dH VMS.BCKPQVMS.BCKdBACKUP/INTERCHANGE ICON:[V9...]*.* XLARGE:[SLM]VMS.BCK;/REWIND/SAVE_SET/DENSITY=1600/BLOCK_SIZE=8192 SLM 2>V6.0 _VIOLET::  _$25$VDA3: V6.0  *[V9]BACKUP.COM;2+,P./ 4Kw-6r0123KPWO56bO"`7b"`89Ҋ;vGHJ$! $! Backup Icon directory for distribution. $! (assumes that [-.v9] is top level of file hierarchy) $! $! Clean up the area. $! $ @clean $ delete/noconfirm/nolog [.ipl.ucode]*.*;*, [.ipl.icode]*.*;* $ $ DIR = f$environment("DEFAULT") $ ERRSTR = "Usage: @backup output-file-spec" $ if p1 .eqs. "" then $ goto error $ OUTFILE = f$parse("''p1'","Icon9",,,"syntax_only") $ $ PDEV = f$parse(f$environment("procedure"),,,"device","no_conceal") $ PDIR = f$parse(f$environment("procedure"),,,"directory") $ set default 'PDIR' $ $ IDIR = f$elememt(0,"]",f$parse("[-]",,,"directory")) $ assign/nolog 'PDEV''IDIR'.] ICON /translation=(concealed,terminal) $ ERRSTR = "Files are missing from ICON:[V9.BIN]" $ if f$search("ICON:[v9.bin]icon.hlb") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rtt.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]icont.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]iconx.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]iconc.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rt.h") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rt.db") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rt.olb") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]dlrgint.obj") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]grttin.h") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]deficon.com") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]iexe.com") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]X11.opt") .eqs. "" then $ goto error $ $ write sys$output "Copying VMS Icon hierarchy to ''OUTFILE'" $ backup/interchange ICON:[v9...]*.* - 'OUTFILE'/rewind/save_set/density=1600/block_size=8192 $ set default 'DIR' $ exit 1 $ $error: $ write sys$output "''ERRSTR'" $ write sys$output "No backup done" $ set default 'DIR' $ exit 1 *[V9]BACKUPBINARY.COM;2+,P./ 4N-6r0123KPWO560`7r0`89Ҋ;vGHJ$! $! Backup Icon binaries for distribution. $! (assumes that [-.v9] is top level of file hierarchy) $! $ DIR = f$environment("DEFAULT") $ ERRSTR = "Usage: @backup output-file-spec" $ if p1 .eqs. "" then $ goto error $ OUTFILE = f$parse("''p1'","Icon9",,,"syntax_only") $ $ PDEV = f$parse(f$environment("procedure"),,,"device","no_conceal") $ PDIR = f$parse(f$environment("procedure"),,,"directory") $ set default 'PDIR' $ $ IDIR = f$elememt(0,"]",f$parse("[-]",,,"directory")) $ assign/nolog 'PDEV''IDIR'.] ICON /translation=(concealed,terminal) $ ERRSTR = "Files are missing from ICON:[V9.BIN] or ICON:[V9.BINARY-BIN]" $ if f$search("ICON:[v9.bin]icon.hlb") .eqs. "" then $ goto error $ if f$search("ICON:[v9.binary-bin]icont.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.binary-bin]iconx.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.binary-bin]iconc.exe") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rt.h") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rt.db") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]rt.olb") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]dlrgint.obj") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]deficon.com") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]iexe.com") .eqs. "" then $ goto error $ if f$search("ICON:[v9.bin]X11.opt") .eqs. "" then $ goto error $ rename ICON:[v9.binary-bin]icont.exe,iconx.exe,iconc.exe ICON:[v9.bin] $ $ write sys$output "Copying VMS Icon binaries to ''OUTFILE'" $ backup/interchange ICON:[v9.bin]deficon.com,dlrgint.obj,icon.hlb,iconc.exe,- icont.exe,iconx.exe,iexe.com,rt.db,rt.h,rt.olb,X11.opt - 'OUTFILE'/rewind/save_set/density=1600/block_size=8192 $ rename ICON:[v9.bin]icont.exe,iconx.exe,iconc.exe ICON:[v9.binary-bin] $ set default 'DIR' $ exit 1 $ $error: $ write sys$output "''ERRSTR'" $ write sys$output "No backup done" $ set default 'DIR' $ exit 1  *[V9]BIN.DIR;1+,./ 4-6r0123 KPWO56PUX7wX89Ҋ;vGHJI .PLACEHOLDER DEFICON.COMDEF_ICON_BIN.COM DLRGINT.OBJPGRTTIN.HICON.HLB ICONC.EXE? ICONT.EXE ICONX.EXE)IEXE.COMRT.DB)NRT.HRT.OLBORTT.EXEX11.OPT*[V9.BIN].PLACEHOLDER;1+,./ 4-0123KPWO56PX7PǞX89Jj$GHJ*[V9.BIN]DEFICON.COM;1+,./ 4-0123KPWO56PX7P Y89Jj$GHJ$! $! Define the directory containing this procedure as ICON_BIN. $! $ PROC = f$environment("procedure") $ DEV = f$parse(PROC,,,"device") $ DIR = f$parse(PROC,,,"directory") $ assign/nolog 'DEV''DIR' ICON_BIN $! $! Define the commands ICONT, ICONX, and IEXE. $! $ iconc == "$ ICON_BIN:iconc" $ icont == "$ ICON_BIN:icont" $ iconx == "$ ICON_BIN:iconx" $ iexe == "@ICON_BIN:iexe" $! $! Add the Icon help library to the help search path. $! $ HELPLIB = "ICON_BIN:ICON.HLB" ! value must be upper case $ LIBNAME = "HLP$LIBRARY" $ N = 0 $loop1: $ NAMEVAL = f$trnlnm("''LIBNAME'","LNM$PROCESS_TABLE") $ if NAMEVAL .eqs. "" then $ goto assign1 $ if NAMEVAL .eqs. "''HELPLIB'" then $ goto done1 $ N = N + 1 $ LIBNAME = "HLP$LIBRARY_''N'" $ if N .lt. 1000 then $ goto loop1 $ write sys$output "Can't add Icon help library; too many names." $ goto done1 $ $assign1: $ assign 'HELPLIB' 'LIBNAME' $done1: $! $! Add the C library to the link search path. $! $ LINKLIB = "SYS$LIBRARY:VAXCRTL" ! value must be upper case $ LIBNAME = "LNK$LIBRARY" $ N = 0 $loop2: $ NAMEVAL = f$trnlnm("''LIBNAME'","LNM$PROCESS_TABLE") $ if NAMEVAL .eqs. "" then $ goto assign2 $ if (NAMEVAL .eqs. "''LINKLIB'") .or. - (NAMEVAL .eqs. "''LINKLIB'.OLB") then $ goto done2 $ N = N + 1 $ LIBNAME = "LNK$LIBRARY_''N'" $ if N .lt. 1000 then $ goto loop2 $ write sys$output "Can't add C link library; too many names." $ goto done2 $ $assign2: $ assign 'LINKLIB' 'LIBNAME' $done2: $ $ exit 1  VMS.BCK[V9.BIN]DEF_ICON_BIN.COM;1"*[V9.BIN]DEF_ICON_BIN.COM;1+,./ 4-0123KPWO56X7X89Jj$GHJ$! $! Define ICON_BIN. $! $ PROC = f$environment("procedure") $ DEV = f$parse(PROC,,,"device") $ DIR = f$parse(PROC,,,"directory") $ assign/nolog 'DEV''DIR' ICON_BIN $ $ exit 1 *[V9.BIN]DLRGINT.OBJ;1+,P. / 4 z -0123KPWO 567`289Ҋ;vGHJ4DLRGINTV1.025-JUL-1994 08:01VAX C V3.2-044RDLRGINTbigprint bigtoreal bigtoscpbignum  bigdiv (bigmod 0bigand 8bigor @bigxor HbigcmpPbigrand Xbigadd# |bigmul# bigneg# bigsub# realtobig bigpow`Tbigradixpbigshift7 3   C$V_CTYPEDEFSIIPOWRADIX BIGPRINT  BIGTOREAL BIGTOS CPBIGNUM BIGDIV (BIGMOD 0BIGAND 8BIGOR @BIGXOR HBIGCMP PBIGRAND XBIGADD |BIGMUL BIGNEG BIGSUB REALTOBIG BIGPOW TBIGRADIX pBIGSHIFT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOW$CHAR_STRING_CONSTANTSP^P^|P^P^P^P^P^P^P^P^P^P^<6}LN7P^<6}LN7P^<6}LN7P^<6}LN7P^PP^ЬPݠЬPݠIIPOWPQ(53}L;4PЬ PЏ`QP^ݬݬݬ ݬݬRADIX^ЬPРQЬPРPP QPxPQQЬ PЏ`QP*[V9.BIN]GRTTIN.H;1+,.?/ 4??d-0123KPWO@56~V789Jj$GHJ/***** do not edit -- this file was generated mechanically *****/ /**************************************** from [-.h]grttin.h: */ /* * Group of include files for input to rtt. * rtt reads these files for preprocessor directives and typedefs, but * does not output any code from them. */ /**************************************** from ../h/define.h: */ /* * Default limit on sbrk region growth. 1 MB is almost 6x the initial size. * This should be enough for nearly all programs. */ #define MaxMem 1000000 /* * The definitions below configure Icon for VMS and should not be changed. */ #define VMS 1 #define Hz 100 /* times() results are in 10-msec units */ #define NormalExit 1 #define ErrorExit 0x10000000 #define Big 72057594037927936. /* larger than 2^56 lose precision */ #define LogHuge 39 #define Precision 16 #define IcodeSuffix ".icx" #define IcodeASuffix ".ICX" #define TUsage "[-cstu] [-e efile] [-o ofile] [\"-Sxnnnn\"]" #define CUsage "[-C C-comp] [-c] [-f{adens}] [-n{acest}] [-o ofile]\n\ [-p C-opts] [-r runtime ] [-s] [-t] [-u]" #define Prototypes #define KeyboardFncs #define Graphics 1 #define brk vms_brk #define sbrk vms_sbrk #define rindex strrchr #define index strchr #define unlink remove /**************************************** end ../h/define.h */ #if VMS /* don't need path.h */ #else /* VMS */ /**************************************** from ../h/path.h: */ /* [file not found] */ /**************************************** end ../h/path.h */ #endif '4 VMS.BCK[V9.BIN]GRTTIN.H;1?) /* VMS */ /**************************************** from ../h/config.h: */ /* * Icon configuration. */ /* * System-specific definitions are in define.h */ /* * A number of symbols are defined here. Some are specific to individual * to operating systems. Examples are: * * MSDOS MS-DOS for PCs * UNIX any UNIX system * VMS VMS for the VAX * * These are defined to be 1 or 0 depending on which operating system * the installation is being done under. They are all defined and only * one is defined to be 1. (They are used in the form #if VAX || MSDOS.) * * There also are definitions of symbols for specific computers and * versions of operating systems. These include: * * SUN code specific to the Sun Workstation * MICROSOFT code specific to the Microsoft C compiler for MS-DOS * * Other definitions may occur for different configurations. These include: * * DeBug debugging code * MultiThread support for multiple programs under the interpreter * * Other definitions perform configurations that are common to several * systems. An example is: * * Double align reals at double-word boundaries * */ /* * If COMPILER is not defined, code for the interpreter is compiled. */ #ifndef COMPILER #define COMPILER 0 #endif /* * The following definitions insure that all the symbols for operating * systems that are not relevant are defined to be 0 -- so that they * can be used in logical expressions in #if directives. */ #ifndef PORT #define PORT 0 #endif /* PORT */ #ifndef AMIGA #define AMIGA 0 #endif /* AMIGA */ #ifndef ARM #define ARM 0 #endif /* ARM */ #ifndef ATARI_ST #define ATARI_ST 0 #endif /* ATARI_ST */ #ifndef MACINTOSH #define MACINTOSH 0 #endif /* MACINTOSH */ #ifndef MSDOS #define MSDOS 0 #endif /* MSDOS */ #ifndef MVS #define MVS 0 #endif /* MVS */ #ifndef OS2 #define OS2 0 #endif /* OS2 */ #ifndef OS2_32 #define OS2_32 0 #endif /* OS32 */ #ifndef UNIX #define UNIX 0 #endif /* UNIX */ #ifndef VM #define VM 0 #endif /* VM */ #ifndef VMS #define VMS 0 #endif /* VMS */ /* * The following definitions serve to cast common conditionals is * a positive way, while allowing defaults for the cases that * occur most frequently. That is, if co-expressions are not supported, * NoCoexpr is defined in define.h, but if they are supported, no * definition is needed in define.h; nonetheless subsequent conditionals * can be cast as #ifdef Coexpr. */ /* * The mysterious Garden of Eden; not supported under the compiler. */ #ifndef NoCoexpr #undef Coexpr #define Coexpr #endif /* NoCoexpr */ #ifdef NoCoexpr #undef MultiThread #undef EventMon #undef Eve #endif /* NoCoexpr */ #if COMPILER #undef Eve #undef MultiThread #undef Visualization #undef EventMon #endif /* COMPILER */ #ifdef Eve #undef EventMon #undef MultiThread #undef MultiRegion #undef Visualization #define EventMon #define MultiThread #define MultiRegion #define Visualization #endif /* Eve */ #ifndef NoEnvVars #undef EnvVars #define EnvVars #endif /* NoEnvVars */ #ifndef NoStrInvoke #undef StrInvoke #define StrInvoke #endif /* NoStrInvoke */ #ifndef NoLargeInts #undef LargeInts #define LargeInts #endif /* NoLargeInts */ #ifdef EventMon #undef EventProc #undef MemMon #undef MultiThread #define MemMon #define EventProc #define MultiThread #define InterpMon #endif /* EventMon */ #ifndef NoInterpMon #undef InterpMon #define InterpMon #endif /* InterpMon */ #ifndef ExpandableRegions #undef FixedRegions #define FixedRegions #undef IconAlloc #ifndef NoMultiRegion #undef MultiRegion #define MultiRegion #endif /* NoMultiRegion */ #endif /* ExpandableRegions */ /* * Did you understand all that? Well, get a load of this... */ #ifndef NoEventProc #undef EventProc #define EventProc #endif /* EventProc */ #ifdef MultiThread #undef MultiRegion #define MultiRegion #endif /* MultiThread */ #ifdef MultiRegion #ifdef ExpandableRegions deliberate syntax error #else /* NoFixedRegions */ #undef FixedRegions #define FixedRegions #endif /* NoFixedRegions */ #endif /* MultiRegion */ #ifndef RefPath #define RefPath BinPath #endif /* RefPath */ #if UNIX #ifndef NoShellHeader #undef ShellHeader #define ShellHeader #endif /* NoShellHeader */ #endif /* UNIX */ /* * Names for standard environment variables, if they are supported. * The standard names are used unless they are overridden. */ #ifdef EnvVars #ifndef MEMMON #define MEMMON "MEMMON" #endif #ifndef NOERRBUF #define NOERRBUF "NOERRBUF" #endif #ifndef TRACE #define TRACE "TRACE" #endif #ifndef COEXPSIZE #define COEXPSIZE "COEXPSIZE" #endif #ifndef STRSIZE #define STRSIZE "STRSIZE" #endif #ifndef HEAPSIZE #define HEAPSIZE "HEAPSIZE" #endif #ifndef BLOCKSIZE #define BLOCKSIZE "BLOCKSIZE" #endif #ifndef BLKSIZE #define BLKSIZE "BLKSIZE" #endif #ifndef STATSIZE #define STATSIZE "STATSIZE" #endif #ifndef STATINCR #define STATINCR "STATINCR" #endif #ifndef MSTKSIZE #define MSTKSIZE "MSTKSIZE" #endif #ifndef QLSIZE #define QLSIZE "QLSIZE" #endif #ifndef ICONCORE #define ICONCORE "ICONCORE" #endif #ifndef IPATH #define IPATH "IPATH" #endif #endif /* EnvVars */ #ifdef MSWindows #undef Graphics #define Graphics 1 #endif /* MSWindows */ #ifdef MacGraph #undef Graphics #define Graphics 1 #endif /* MacGraph */ #ifdef Graphics #ifndef NoXpmFormat #if UNIX #undef HaveXpmFormat #define HaveXpmFormat #endif /* UNIX */ #endif /* NoXpmFormat */ #ifndef MSWindows #ifndef PresentationManager #ifndef MacGraph #undef XWindows #define XWindows 1 #endif /* MacGraph */ #endif /* PresentationManager */ #endif /* MSWindows */ #undef LineCodes #define LineCodes #undef Polling #define Polling #ifndef NoIconify #define Iconify #endif /* NoIconify */ #ifndef MaxStatSize /* * Bump up MaxStatSize for X programs; they're stat-hungry */ #define MaxStatSize 100000 #endif /* MaxStatSize */ #ifndef ICONC_XLIB #define ICONC_XLIB "-lX11" #endif /* ICONC_XLIB */ #endif /* Graphics */ #ifndef NoExternalFunctions #undef ExternalFunctions #define ExternalFunctions #endif /* NoExternalFunctions */ /* * EBCDIC == 0 corresponds to ASCII. EBCDIC == 1 corresponds to EBCDIC * collating sequence, while EBCDIC == 2 provides the ASCII collating * sequence for EBCDIC systems. */ #ifndef EBCDIC #define EBCDIC 0 #endif /* EBCDIC */ /* * Other defaults. */ #ifdef DeBug #undef DeBugTrans #undef DeBugLinker #undef DeBugIconx #define DeBugTrans #define DeBugLinker #define DeBugIconx #endif /* DeBug */ #ifndef AllocType #define AllocType unsigned int #endif /* AllocType */ #ifndef ErrorExit #define ErrorExit 1 #endif /* ErrorExit */ #ifndef NormalExit #define NormalExit 0 #endif /* NormalExit */ #ifndef Hz #define Hz 60 #endif /* Hz */ #ifndef MaxHdr #define MaxHdr 4096 #endif /* MaxHdr */ #ifndef MaxPath #define MaxPath 200 #endif /* MaxPath */ #ifndef StackAlign #define StackAlign 2 #endif /* StackAlign */ #ifndef SysTime #define SysTime #endif /* SysTime */ #ifndef WordBits #define WordBits 32 #endif /* WordBits */ #ifndef IntBits #define IntBits WordBits #endif /* IntBits */ #ifndef SourceSuffix #define SourceSuffix ".icn" #endif /* SourceSuffix */ /* * Representations of directories. LocalDir is the "current working directory". * SourceDir is where the source file is. */ #define LocalDir "" #define SourceDir (char *)NULL #ifndef TargetDir #define TargetDir LocalDir #endif /* TargetDir */ #ifndef Pipes #if ARM || OS2 || UNIX || I VMS.BCK[V9.BIN]GRTTIN.H;1?-%VMS #define Pipes #endif /* ARM || OS2 || UNIX || VMS */ #endif /* Pipes */ #if UNIX || VMS #define SystemFnc #endif /* UNIX || VMS */ /* * Default sizing and such. */ #define WordSize sizeof(word) #ifndef ByteBits #define ByteBits 8 #endif /* ByteBits */ /* * Define the size of the units in MemMon (allocation history) files. */ #ifdef MemMon #ifndef MMUnits #define MMUnits WordSize #endif /* MMUnits */ #endif /* MemMon */ #ifdef EventMon #undef MMUnits #define MMUnits 1 #endif /* EventMon */ /* * Change the name of gcvt() if we're supplying our own version, * to avoid complaints under VMS and others with shared libraries. */ #ifndef NoIconGcvt #undef IconGcvt #define IconGcvt #define gcvt icon_gcvt #endif /* IconGcvt */ /* * The following definitions depend on whether or not the ANSI C standard * is supported. */ #ifdef Standard #undef StandardC #undef StandardPP #undef StandardLib #define StandardC #define StandardPP #define StandardLib #endif /* Standard */ #ifdef StandardPP #define Cat(x,y) x##y #define Lit(x) #x #else /* StandardPP */ #define Ident(x) x #define Cat(x,y) Ident(x)y #define Lit(x) "x" #endif /* StandardPP */ #ifdef StandardC #undef Prototypes #define Prototypes #undef VoidType #define VoidType #define Bell '\a' #else /* StandardC */ #if EBCDIC #define Bell '\x2F' #else /* EBCDIC */ #define Bell '\007' #endif /* EBCDIC */ #endif /* StandardC */ #ifdef StandardLib #undef SysMem #define SysMem #endif /* StandardLib */ #if IntBits != WordBits #undef SysMem #endif /* Intbits != WordBits */ #ifdef SysMem #undef memcopy #undef memfill #define memcopy(to,from,len) memcpy(to,from,len) #define memfill(to,from,len) memset(to,from,len) #endif /* SysMem */ #ifdef SysOpt #define optindex optind #endif /* SysOpt */ /* * Provide definition to use void if it's supported (mainly avoids error * messages with some C compilers. Note: typedef does not work, so care * is needed not to use compound declarations. */ #ifdef VoidType #define novalue void #define noargs void #else /* VoidType */ #define novalue int #define noargs #endif /* VoidType */ /* * And something to handle a cast problem for signal(). */ #ifndef SigFncCast #ifdef VoidType #define SigFncCast (void (*)(int)) #else /* VoidType */ #define SigFncCast #endif /* VoidType */ #endif /* SigFncCast */ /* * Customize output if not pre-defined. */ #ifndef TraceOut #define TraceOut(s) fprintf(stderr,s) #endif /* TraceOut */ #if EBCDIC #define BackSlash "\xe0" #else /* EBCDIC */ #define BackSlash "\\" #endif /* EBCDIC */ #ifndef WriteBinary #define WriteBinary "wb" #endif /* WriteBinary */ #ifndef ReadBinary #define ReadBinary "rb" #endif /* ReadBinary */ #ifndef ReadEndBinary #define ReadEndBinary "r+b" #endif /* ReadEndBinary */ #ifndef WriteText #define WriteText "w" #endif /* WriteText */ #ifndef ReadText #define ReadText "r" #endif /* ReadText */ /* * "hidden" is used to declare static functions; "hidden" normally == "static", * except with compilers that can't handle "static" in prototypes. */ #ifndef hidden #define hidden static #endif /* hidden */ /* * The "Params" macro allows a single declaration to be used with both old- and * new-style compilers. */ #ifdef Prototypes #define Params(a) a #else /* Prototypes */ #define Params(a) () #endif /* Prototypes */ /* * The following code is operating-system dependent [@config.01]. * Any configuration stuff that has to be done at this point. */ #if PORT /* Probably nothing is needed. */ Deliberate Syntax Error #endif /* PORT */ #if VMS #define ExecSuffix ".exe" #define ObjSuffix ".obj" #define LibSuffix ".olb" #endif /* VMS */ #if AMIGA || ARM || ATARI_ST || MACINTOSH || MVS || VM #endif /* AMIGA || ARM || ... */ #if MSDOS || OS2 /* * Define compiler-specific symbols to be zero if not already * defined. */ #ifndef MICROSOFT #define MICROSOFT 0 #endif /* MICROSOFT */ #ifndef CSET2 #define CSET2 0 #endif /* CSet/2 */ #ifndef CSET2V2 #define CSET2V2 0 #endif /* CSet/2 version 2 */ #ifndef TURBO #define TURBO 0 #endif /* TURBO */ #ifndef HIGHC_386 #define HIGHC_386 0 #endif /* HIGHC_386 */ #ifndef INTEL_386 #define INTEL_386 0 #endif /* INTEL_386 */ #ifndef WATCOM #define WATCOM 0 #endif /* WATCOM */ #ifndef ZTC_386 #define ZTC_386 0 #endif /* ZTC_386 */ #ifndef MSNT #define MSNT 0 #endif /* MSNT */ #if HIGHC_386 /* * MetaWare's HighC 386 macro putc doesn't handle putc('\n') correctly - * sometimes a CR is not written out before the LF. So, redefine * macro putc to actually issue an fputc. */ #undef putc #define putc(c,f) fputc(c,f) #endif /* HIGHC_386 */ #endif /* MSDOS || OS2 */ #if MACINTOSH #if LSC /* * LightSpeed C requires that #define tokens appear after prototypes */ #define index strchr #define malloc mlalloc #define rindex strrchr #define unlink remove #endif /* LSC */ #endif /* MACINTOSH */ #if MVS || VM /* * Define compiler-specific symbols to be zero if not already * defined. */ #ifndef SASC #define SASC 0 #endif /* SASC */ #ifndef WATERLOO_C_V3_0 #define WATERLOO_C_V3_0 0 #endif /* WATERLOO_C_V3_0 */ #endif /* MVS || VM */ #if UNIX || (MACINTOSH && MPW) #undef WriteBinary #define WriteBinary "w" #undef ReadBinary #define ReadBinary "r" #undef ReadEndBinary #define ReadEndBinary "r+" #ifndef NoHardWiredPaths #define HardWiredPaths #endif /* NoHardWiredPaths */ #ifndef NoHeader #undef Header #define Header #endif /* NoHeader */ #endif /* UNIX || (MACINTOSH && MPW) */ /* * End of operating-system specific code. */ #ifndef DiffPtrs #define DiffPtrs(p1,p2) (word)((p1)-(p2)) #endif /* DiffPtrs */ #ifndef AllocReg #define AllocReg(n) malloc((msize)n) #endif /* AllocReg */ #define MaxFileName 256 #ifndef EVENTMON #define EVENTMON "EVENTMON" #endif /* EVENTMON */ #ifndef MEMMON #define MEMMON "MEMMON" #endif /* MEMMON */ #ifndef RttSuffix #define RttSuffix ".r" #endif /* RttSuffix */ #ifndef DBSuffix #define DBSuffix ".db" #endif /* DBSuffix */ #ifndef PPInit #define PPInit "" #endif /* PPInit */ #ifndef PPDirectives #define PPDirectives {"passthru", PpKeep}, #endif /* PPDirectives */ #ifndef NoRanlib #define Ranlib #endif /* NoRanlib */ #ifndef EventMon #if IntBits == 16 #define NoSrcColumnInfo #endif /* IntBits == 16 */ #endif /* EventMon */ #ifndef NoSrcColumnInfo #define SrcColumnInfo #endif /* NoSrcColumnInfo */ #ifndef ExecSuffix #define ExecSuffix "" #endif /* ExecSuffix */ #ifndef CSuffix #define CSuffix ".c" #endif /* CSuffix */ #ifndef HSuffix #define HSuffix ".h" #endif /* HSuffix */ #ifndef ObjSuffix #define ObjSuffix ".o" #endif /* ObjSuffix */ #ifndef LibSuffix #define LibSuffix ".a" #endif /* LibSuffix */ #ifndef CComp #define CComp "cc" #endif /* CComp */ #ifndef COpts #define COpts "" #endif /* COpts */ /* * Note, size of the hash table is a power of 2: */ #define IHSize 128 #define IHasher(x) (((unsigned int)x)&(IHSize-1)) #if COMPILER /* * Code for the compiler. */ #undef MultiThread /* no way -- interpreter only */ #undef EventMon /* presently not supported in the compiler */ #undef EventProc /* presently not supported in the compiler */ #undef ExecImages /* interpreter only */ #undef InterpMon #else /* COMPILER */ /* * Code;5 VMS.BCK[V9.BIN]GRTTIN.H;1?" for the interpreter. */ #ifndef IcodeSuffix #define IcodeSuffix "" #endif /* IcodeSuffix */ #ifndef IcodeASuffix #define IcodeASuffix "" #endif /* IcodeASuffix */ #ifndef U1Suffix #define U1Suffix ".u1" #endif /* U1Suffix */ #ifndef U2Suffix #define U2Suffix ".u2" #endif /* U2Suffix */ #ifndef USuffix #define USuffix ".u" #endif /* USuffix */ #endif /* COMPILER */ #ifndef IconOptions #if ARM || UNIX || VMS #define IconOptions "C:ELS:Tce:f:mn:o:p:r:stuv:x" #endif /* ARM || UNIX || VMS */ #if MSDOS #define IconOptions "C:ELS:XITce:f:mn:o:p:r:stuv:x" #endif /* MSDOS */ #if OS2 #define IconOptions "C:ELS:Tce:f:in:o:p:r:stuv:x" #endif /* OS2 */ #endif /* Options */ #if EBCDIC #define CUsage "<-C C-comp> <-T> <-c> <-f{adelns}> <-n{acest}>\n\ <-o ofile> <-p C-opts> <-r runtime> <-s> <-t> <-u> <-v i>" #else /* EBCDIC */ #ifndef CUsage #if UNIX #define CUsage "[-C C-comp] [-E] [-T] [-c] [-f{adelns}] [-m] [-n{acest}]\n\ [-o ofile] [-p C-opts] [-r runtime] [-s] [-t] [-u] [-v i]" #else /* UNIX */ #define CUsage "[-C C-comp] [-E] [-T] [-c] [-f{adelns}] [-n{acest}]\n\ [-o ofile] [-p C-opts] [-r runtime] [-s] [-t] [-u] [-v i]" #endif /* UNIX */ #endif /* CUsage */ #endif /* EBCDIC */ #ifndef TUsage #if EBCDIC #define TUsage "<-cstu> <-fs> <-e efile> <-o ofile>" #endif /* EBCDIC */ #if ARM || UNIX #define TUsage "[-cmstuE] [-fs] [-e efile] [-o ofile]" #endif /* ARM || UNIX */ #if MVS || VM #define TUsage "<-cstuE> <-fs> <-e efile> <-o ofile>" #endif /* MVS || VM */ #if MSDOS #define TUsage "[-cstuEIX] [-fs] [-e efile] [-o ofile]" #endif /* MSDOS */ #endif /* TUsage */ #if MSDOS || OS2 #undef DirectExecution #define DirectExecution #endif /* MSDOS || OS2 */ #ifdef Header #undef DirectExecution #define DirectExecution #endif /* Header */ /* * TEMPORARY */ /* * Vsizeof is for use with variable-sized (i.e., indefinite) * structures containing an array of descriptors declared of size 1 * to avoid compiler warnings associated with 0-sized arrays. */ #define Vsizeof(s) (sizeof(s) - sizeof(struct descrip)) /* * Other sizeof macros: * * Wsizeof(x) -- Size of x in words. * Vwsizeof(x) -- Size of x in words, minus the size of a descriptor. Used * when structures have a potentially null list of descriptors * at their end. */ #define Wsizeof(x) ((sizeof(x) + sizeof(word) - 1) / sizeof(word)) #define Vwsizeof(x) ((sizeof(x) - sizeof(struct descrip) +\ sizeof(word) - 1) / sizeof(word)) /**************************************** end ../h/config.h */ #ifndef NoTypeDefs /**************************************** from ../h/typedefs.h: */ /* * typdefs for the run-time system. */ typedef AllocType msize; typedef int ALIGN; /* pick most stringent type for alignment */ #ifndef FixedRegions typedef union bhead HEADER; #endif /* FixedRegions */ typedef unsigned int DIGIT; /* * Default sizing and such. */ /* * Set up typedefs and related definitions depending on whether or not * ints and pointers are the same size. */ #if IntBits != WordBits typedef long int word; typedef unsigned long int uword; #else /* IntBits != WordBits */ typedef int word; #ifdef CDC_VXVE typedef uword; #else /* CDC_VXVE */ typedef unsigned int uword; #endif /* CDC_VXVE */ #endif /* IntBits != WordBits */ #ifdef StandardC #ifndef PointerDef typedef void *pointer; #endif /* PointerDef */ #else /* StandardC */ #ifndef PointerDef typedef char *pointer; #endif /* PointerDef */ #endif /* StandardC */ /* * Typedefs to make some things easier. */ typedef int (*fptr)(); typedef struct descrip *dptr; typedef word C_integer; /* * A success continuation is referenced by a pointer to an integer function * that takes no arguments. */ typedef int (*continuation) Params((noargs)); #if !COMPILER /* * Typedefs for the interpreter. */ /* * Icode consists of operators and arguments. Operators are small integers, * while arguments may be pointers. To conserve space in icode files on * computers with 16-bit ints, icode is written by the linker as a mixture * of ints and words (longs). When an icode file is read in and processed * by the interpreter, it looks like a C array of mixed ints and words. * Accessing this "nonstandard" structure is handled by a union of int and * word pointers and incrementing is done by incrementing the appropriate * member of the union (see the interpreter). This is a rather dubious * method and certainly not portable. A better way might be to address * icode with a char *, but the incrementing code might be inefficient * (at a place that experiences a lot of execution activity). * * For the moment, the dubious coding is isolated under control of the * size of integers. */ #if IntBits != WordBits typedef union { int *op; word *opnd; } inst; #else /* IntBits != WordBits */ typedef union { word *op; word *opnd; } inst; #endif /* IntBits != WordBits */ #endif /* COMPILER */ /**************************************** end ../h/typedefs.h */ #endif /* NoTypeDefs */ /**************************************** from ../h/version.h: */ /* * version.h -- version identification */ #undef DVersion #undef Version #undef UVersion #undef IVersion /* * Version number to insure format of data base matches version of iconc * and rtt. */ #define DVersion "9.0.00" #if COMPILER /* * &version */ #define Version "Icon Compiler Version 9.0. July 16, 1994" #else /* COMPILER */ /* * &version */ #define Version "Icon Interpreter Version 9.0. July 16, 1994" /* * Version numbers to be sure ucode is compatible with the linker * and icode is compatible with the run-time system. */ #define UVersion "U9.0.00" #ifdef MultiThread #if IntBits == 16 #define IVersion "I9.0.00M/16" #endif /* IntBits == 16 */ #if IntBits == 32 #define IVersion "I9.0.00M/32" #endif /* IntBits == 32 */ #if IntBits == 64 #define IVersion "I9.0.00M/64" #endif /* IntBits == 64 */ #else /* MultiThread */ #if IntBits == 16 #define IVersion "I9.0.00/16" #endif /* IntBits == 16 */ #if IntBits == 32 #define IVersion "I9.0.00/32" #endif /* IntBits == 32 */ #if IntBits == 64 #define IVersion "I9.0.00/64" #endif /* IntBits == 64 */ #endif /* MultiThread */ #endif /* COMPILER */ /* * Version number for event monitoring. */ #define Eversion "9.0.00" /**************************************** end ../h/version.h */ /* * Macros that must be expanded by rtt. */ /* * Declaration for library routine. */ #begdef LibDcl(nm,n,pn) #passthru OpBlock(nm,n,pn,0) int O##nm(nargs,cargp) int nargs; register dptr cargp; #enddef /* * Error exit from non top-level routines. Set tentative values for * error number and error value; these errors will but put in * effect if the run-time error routine is called. */ #begdef ReturnErrVal(err_num, offending_val, ret_val) { t_errornumber = err_num; t_errorvalue = offending_val; t_have_val = 1; return ret_val; } #enddef #begdef ReturnErrNum(err_num, ret_val) { t_errornumber = err_num; t_errorvalue = nulldesc; t_have_val = 0; return ret_val; } #enddef /* * Code expansions for exits from C code for top-level routines. */ #define Fail return A_Resume #define Return return A_Continue /* * RunErr encapsulates a call to the function err_msg, followed * by Fail. The idea is to avoid the problem of calling * runerr directly and forgetting that it ma᳝ VMS.BCK[V9.BIN]GRTTIN.H;1?V1y actually return. */ #define RunErr(n,dp) {\ err_msg((int)n,dp);\ Fail;\ } /* * Protection macro. */ #define Protect(notnull,orelse) if ((notnull)==NULL) orelse /* Get RTT past some OS2-32 types */ #if OS2_32 typedef int HFILE, ULONG; #endif /* OS2_32 */ #ifdef EventMon #define MMMark(block, type) #define MMSMark(saddr, slen) #define MMOut(prefix, msg) #define MMShow(d, colr) #define evnewline() #define evcmd(addr, len, c) #define etvalue(n, c) #define evdec(n) /* * perform what amounts to "function inlining" of EVVal */ #begdef EVVal(value,event) { if (!is:null(curpstate->eventmask) && Testb((word)ToAscii(event), curpstate->eventmask) ) { MakeInt(value, &(curpstate->parent->eventval)); actparent(event); } } #enddef /* EVVal */ #begdef EVValD(dp,event) { if (!is:null(curpstate->eventmask) && Testb((word)ToAscii(event), curpstate->eventmask) ) { curpstate->parent->eventval = *(dp); actparent(event); } } #enddef /* EVValD */ #begdef EVValX(bp,event) { struct progstate *parent = curpstate->parent; if (!is:null(curpstate->eventmask) && Testb((word)ToAscii(event), curpstate->eventmask) ) { parent->eventval.dword = D_Coexpr; BlkLoc(parent->eventval) = (union block *)(bp); actparent(event); } } #enddef /* EVValX */ #if UNIX #begdef EVTick() /* * EVTick() - record a Tick event reflecting a clock advance. * * The interpreter main loop has detected a change in the profile counters. * This means that the system clock has ticked. Record an event and update * the records. */ { word sum, nticks; oldtick = ticker.l[0] + ticker.l[1]; sum = ticker.s[0] + ticker.s[1] + ticker.s[2] + ticker.s[3]; nticks = sum - oldsum; EVVal(nticks, E_Tick); oldsum = sum; } #enddef /* EVTick */ #else /* UNIX */ #define EVTick() #endif /* UNIX */ #define InterpEVVal(arg1,arg2) { ExInterp; EVVal(arg1,arg2) EntInterp } #define InterpEVValD(arg1,arg2) { ExInterp; EVValD(arg1,arg2) EntInterp } #define InterpEVValX(arg1,arg2) { ExInterp; EVValX(arg1,arg2) EntInterp } #define InterpEVTick() { ExInterp; EVTick() EntInterp } /* * Macro with construction of event descriptor. */ #begdef Desc_EVValD(bp, code, type) { eventdesc.dword = type; eventdesc.vword.bptr = (union block *)(bp); EVValD(&eventdesc, code); } #enddef /* Desc_EVValD */ #else /* EventMon */ #define EVVal(arg1,arg2) #define EVValD(arg1,arg2) #define EVValX(arg1,arg2) #define EVTick() #define InterpEVVal(arg1,arg2) #define InterpEVValD(arg1,arg2) #define InterpEVValX(arg1,arg2) #define InterpEVTick() #define Desc_EVValD(bp, code, type) #endif /* EventMon */ #ifdef Graphics typedef int wbp, wsp, wcp, wdp, wclrp, wfp; typedef int wbinding, wstate, wcontext, wfont; typedef int siptr, stringint; typedef int XRectangle, XPoint, XSegment, XArc, SysColor, LinearColor; typedef int LONG, SHORT; #ifdef MacGraph typedef int Rect, PolyHandle; #endif /* MacGraph */ #ifdef XWindows typedef int XGCValues, XColor, XFontStruct, XWindowAttributes; typedef int XEvent, XExposeEvent, XKeyEvent, XButtonEvent, XConfigureEvent; typedef int XSizeHints, XWMHints, XTextProperty; typedef int Colormap, XVisualInfo; typedef int *Display, Cursor, GC, Window, Pixmap, Visual, KeySym; typedef int WidgetClass, XImage, XpmAttributes; #endif /* XWindows */ #ifdef MSWindows typedef int int_PASCAL, LRESULT_CALLBACK, LOGBRUSH, MSG, WORD, DWORD; typedef int HINSTANCE, LPSTR, HBITMAP, WNDCLASS, PAINTSTRUCT, POINT, RECT; typedef int HWND, HDC, UINT, WPARAM, LPARAM, HANDLE, HPEN, HBRUSH, SIZE; #endif /* MSWindows */ #ifdef PresentationManager /* OS/2 PM specifics */ typedef int HAB, HPS, QMSG, HMQ, HWND, USHORT, MRESULT, ULONG, MPARAM; typedef int PFNWP, HMODULE, SHORT, BOOL, TID, RECTL, ERRORID; typedef int MRESULT_N_EXPENTRY, SIZEL, HDC, POINTL, HMTX, HBITMAP; typedef int VOID_APIENTRY, UCHAR, HEV; typedef int LONG, BITMAPINFOHEADER2, PBITMAPINFO2, PSZ, RGB2, BITMAPINFO2; typedef int FONTMETRICS, PRECTL, PCHARBUNDLE, PLINEBUNDLE, PIMAGEBUNDLE; typedef int AREABUNDLE, PAREABUNDLE, PPOINTL, POLYGON, CHARBUNDLE, LINEBUNDLE; typedef int lclIdentifier, BYTE, PBYTE, PRGB2, FATTRS, PFATTRS, PULONG; typedef int PBITMAPINFOHEADER2, BITMAPFILEHEADER2, BITMAPARRAYFILEHEADER2; typedef int colorEntry, ARCPARAMS, threadargs, HPOINTER, CURSORINFO; typedef int PCURSORINFO, DEVOPENSTRUCT, PDEVOPENDATA, SIZEF, HRGN, PSWP; typedef int va_list, BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPARRAYFILEHEADER; typedef int PBITMAPINFOHEADER, MinBitmapHeader, RGB; #endif /* PresentationManager */ /* * Convenience macros to make up for RTL's long-windedness. */ #begdef CnvShortInt(desc, s, max) { struct descrip tmp; if (!cnv:integer(desc,tmp)) runerr(101,desc); if ((tmp.dword != D_Integer) || (IntVal(tmp) > max)) MakeInt(max, &tmp); s = (short) IntVal(tmp); } #enddef /* CnvShortInt */ #define CnvCShort(d,s) CnvShortInt(d,s,32767) #define CnvCUShort(d,s) CnvShortInt(d,s,65535) #define CnvCInteger(d,i) \ if (!cnv:C_integer(d,i)) runerr(101,d); #define DefCInteger(d,default,i) \ if (!def:C_integer(d,default,i)) runerr(101,d); #define CnvString(din,dout) \ if (!cnv:string(din,dout)) runerr(103,din); #define CnvTmpString(din,dout) \ if (!cnv:tmp_string(din,dout)) runerr(103,din); /* * conventions supporting optional initial window arguments: * * All routines declare argv[argc] as their parameters * Macro OptWindow checks argv[0] and assigns _w_ and warg if it is a window * warg serves as a base index and is added everywhere argv is indexed * n is used to denote the actual number of "objects" in the call * Macro ReturnWindow returns either the initial window argument, or &window */ #begdef OptWindow(w) if (argc>warg && is:file(argv[warg])) { if ((BlkLoc(argv[warg])->file.status & Fs_Window) == 0) runerr(140,argv[warg]); if ((BlkLoc(argv[warg])->file.status & (Fs_Read|Fs_Write)) == 0) runerr(142,argv[warg]); (w) = (wbp)BlkLoc(argv[warg])->file.fd; warg++; } else { if (!(is:file(kywd_xwin[XKey_Window]) && (BlkLoc(kywd_xwin[XKey_Window])->file.status & Fs_Window))) runerr(140,kywd_xwin[XKey_Window]); if (!(BlkLoc(kywd_xwin[XKey_Window])->file.status & (Fs_Read|Fs_Write))) runerr(142,kywd_xwin[XKey_Window]); w = (wbp)BlkLoc(kywd_xwin[XKey_Window])->file.fd; } #enddef /* OptWindow */ #begdef ReturnWindow if (!warg) return kywd_xwin[XKey_Window]; else return argv[0] #enddef /* ReturnWindow */ #begdef CheckArgMultiple(mult) { if ((argc-warg) % (mult)) runerr(146); n = (argc-warg)/mult; if (!n) runerr(146); } #enddef /* CheckArgMultiple */ /* * calloc to make sure uninit'd entries are zeroed. */ #begdef GRFX_ALLOC(var,type) var = (struct type *)calloc(1, sizeof(struct type)); if (var == NULL) ReturnErrNum(305, NULL); var->refcount = 1; #enddef /* GRFX_ALLOC */ #begdef GRFX_LINK(var, chain) var->next = chain; var->previous = NULL; if (chain) chain->previous = var; chain = var; #enddef /* GRFX_LINK */ #begdef GRFX_UNLINK(var, chain) if (var->previous) var->previous->next = var->next; else chain = var->next; if (var->next) var->next->previous = var->previous; free(var); #enddef /* GRFX_UNLINK */ #endif /* Graphics */ /**************************************** end [-.h]grttin.h */  bD) VMS.BCK[V9.BIN]ICON.HLB;1f~*[V9.BIN]ICON.HLB;1+,.f/ 4fC-0123 KPWOg56X@789Jj$GHJ% VAX-11 Librarian V04-00IZBC5H,"DEFICONIcon9bICONC-ICONT5ICONXAIEXEi1 IconF The Icon programming language system is implemented primarily by the commands:- DEFICON (defines commands and logical names) ICONT (the Icon translator) ICONX (the Icon interpreter) ICONC (the Icon compiler) Supporting command:1 IEXE (for defining an Icon program as a command)8 For more information about one of these commands, type HELP command-name 2 References8 The current version of Icon is Version 9.0. The book: The Icon Programm ing Language( Ralph E. Griswold and Madge T. Griswold Prentice-Hall Inc. Englewood Cliffs, New Jersey Second Edition, 1990H describes Version 8.0. Read the help material under Release Notes for a supplement to that book." Recent changes are described in:7 Version 9.0 of the Icon Programming Language (IPD236)< Ralph E. Griswold, Clinton L. Jeffery and Gregg M. Townsend< Department of Computer Science, University of Arizona, 1994; Peculiarities of the VMS implementation are described in:. Using Version 9.0 of Icon under VMS (IPD251)' Gregg M. Townsend and Sandra L. Miller< Department of Computer Science, University of Arizona, 19942 Release NotesF Most of the language extensions in Version 9.0 are upward-compatibleF with previous versions of Icon and most programs written for earlierF versions work properly under Version 9.0. The language additions to Version 9.0 are: - a preprocessorC - an optional interface to graphic facilities (for platforms that support them) - new functions and keywords* - several other changes and enhancements< There also are several improvements to the implementation.3 Language Features4 PreprocessingH All Icon source code passes through a preprocessor before translation.I The effects of preprocessing can be seen by running icont or iconc with the -E flag.I Preprocessor directives control the actions of the preprocessor and areD not passed to the Icon translator or compiler. If n o preprocessorI directives are present, the source code passes through the preprocessor unaltered.G A source line is a preprocessor directive if its first non-whitespaceG character is a $ and if that $ is not followed by another punctuation= character. The general form of a preprocessor directive is $ directive arguments # commentF Whitespace separates tokens when needed, and case is significant, asE in Icon proper. The entire preprocessor directive must appear on aJ si ngle line which cannot be continued. The comment portion is optional.I An invalid preprocessor directive produces an error except when skipped by conditional compilation.D Preprocessor directives can appear anywhere in an Icon source fileE without regard to procedure, declaration, or expression boundaries.5 Include Directives# An include directive has the form $include filename@ An include directive causes the contents of another file to beI interpolated in the source fil e. The file name must be quoted if it isE not in the form of an Icon identifier. #line comments are insertedF before and after the included file to allow proper identification of errors.E Included files may be nested to arbitrary depth, but a file may notJ include itself either directly or indirectly. File names are looked forJ first in the current directory and then in the directories listed in theD environment variable LPATH. Relative paths are interpreted in theD preproce ssor's context and not in relation to the including file's location.5 Line Directives A line directive has the form $line n [filename]J The line containing the preprocessing directive is considered to be lineJ n of the given file (or the current file, if unspecified) for diagnosticI and other purposes. The line number is a simple unsigned integer. TheJ file name must be quoted if it is not in the form of an Icon identifier.> Note that the interpretation of n differs fr:K" VMS.BCK[V9.BIN]ICON.HLB;1fOom that of the CC preprocessor, which interprets it as the number of the next line.H $line is an alternative form of the older, special comment form #line.I The preprocessor recognizes both forms and produces the fully specified& older form for the lexical analyzer.5 Define Directives! A define directive has the form $define name textC The define directive defines the text to be substituted for laterE occurrences of the identifier name in the source code. text is anyH sequence of characters except that any string or cset literals must beB properly terminated within the definition. Leading and trailingD whitespace are not part of the definition. The text can be empty.G Redefinition of a name is allowed only if the new text is exactly theC same as the old text. For example, 3.0 is not the same as 3.000.G Redefinition of Icon's reserved words and keywords is allowed but not advised.F Definitions remain in effect through the end of the curren t originalH source file, crossing include boundaries, but they do not persist from8 file to file when names are given on the command line.J If the text of a definition is an expression, it is wise to parenthesizeJ it so that precedence causes no problems when it is substituted. If theI text begins with a left parenthesis, it must be separated from the nameG by at least one space. Note that the Icon preprocessor, unlike the C; preprocessor, does not provide parameterized definitions .5 Undefine Directives$ An undefine directive has the form $undef nameI The current definition of name is removed, allowing its redefinition if? desired. It is not an error to undefine a non-existent name.5 Predefined SymbolsE At the start of each source file, several symbols are automaticallyD defined to indicate the Icon system configuration. Each potentialD predefined symbol corresponds to one of the values produced by theI keyword &features. If a feature is present, the symbol is defined withC a value of 1. If a feature is absent, the symbol is not defined. The predefined symbols are:. predefined symbol &features value" _VMS VMS' _COMPILED compiled* _INTERPRETED interpreted$ _ASCII ASCII% _EBCDIC EBCDIC1 _EXPANDABLE_REGIONS expandable regions, _FIXED_REGIONS fixed regions- _CO_EXPRESSIONS  co-expressions/ _DIRECT_EXECUTION direct execution. _DYNAMIC_LOADING dynamic loading/ _EVENT_MONITOR event monitoring0 _EXECUTABLE_IMAGES executable images1 _EXTERNAL_FUNCTIONS external functions' _GRAPHICS graphics1 _KEYBOARD_FUNCTIONS keyboard functions- _LARGE_INTEGERS large integers0 _MEMORY_MONITOR memory monitoring0 _MULTITASKING multi ple programs/ _MULTIREGION multiple regions$ _PIPES pipes) _RECORD_IO record I/O0 _STRING_INVOKE string invocation. _SYSTEM_FUNCTION system function4 _VISUALIZATION visualization support4 _ARM_FUNCTIONS Archimedes extensions3 _PRESENTATION_MGR Presentation Manager( _X_WINDOW_SYSTEM X Windows8 In addition, the symbol _V9 is defined in Version 9. 0.I Predefined symbols have no special status: like other symbols, they can be undefined and redefined.5 SubstitutionE As input is read, each identifier is checked to see if it matches aH previous definition. If it does, the value replaces the identifier in the input stream.G No whitespace is added or deleted when a definition is inserted. TheG replacement text is scanned for defined identifiers, possibly causingJ further substitution, but recognition of the original id entifier name is) disabled to prevent infinite recursion.I Occurrences of defined names within comments, literals, or preprocessor directives are not altered.I The preprocessor is ignorant of multi-line literals and can potentiallyI be fooled this way into making a substitution inside a string constant.C The preprocessor works hard to get line numbers right, but column? numbers are likely to be rendered incorrect by substitutions.J Substitution cannot produce a preprocessor directive. By then it is too late.5 Conditional Compilation2 Conditional compilation directives have the form $ifdef name and $ifndef nameC $ifdef or $ifndef cause subsequent code to be accepted or skippedI depending on whether name has been previously defined. $ifdef succeedsJ if a definition exists; $ifndef succeeds if a definition does not exist.. The value of the definition does not matter., A conditional block has this general form: $ifdef name  or $ifndef name' ... code to use if test succeeds ... $else$ ... code to use if test fails ... $endifB The $else section is optional. Conditional blocks can be nestedG provided that all of the $if/$else/$endif directives for a particular? block are in the same source file. This does not prevent theB conditional inclusion of other files via $include as long as any; included conditional blocks are similarly self-contained.5 Error Directives! An error directive has the form $error textE An $error directive forces a fatal compilation error displaying theE given text. This is typically used with conditional compilation to* indicate an improper set of definitions.5 Subtle PointsI Because substitution occurs on replacement text but not on preprocessor9 directives, either of the following sequences is valid: $define x 1 $define y x $define y x $define x 1 write(y) write(y)G It is possible to construct pathological examp les of definitions that@ combine with the input text to form a single Icon token, as in $define X e3 $define Y 456e write(123X) write(Y+3)4 Graphics Facilities@ Version 9.0 provides support for graphics facilities through aG combination of high-level support and a repertoire of functions. NotJ all platforms support graphics. Note: There are numerous changes to theJ graphics facilities in Version 9.0. Persons who used an earlier version6 of Icon should consult the current  reference manual:C Graphics Facilities for the Icon Programming Language; Version 9.0 (IPD255)< Clinton L. Jeffery, Gregg M. Townsend and Ralph E. Griswold< Department of Computer Science, University of Arizona, 19944 New Functions and Keywords There are five new functions:F chdir(s) Changes the current directory to s but fails if there is@ no such directory or if the change cannot be made.G delay(i) Delays execution i milliseconds. This function presently:  is only supported on UNIX and VMS platforms.: flush(f) Flushes the input/output buffers for file f.C function() Generates the names of the Icon (built-in) functions.G sortf(X,i) Produces a sorted list of the elements of X. The resultsH are similar to those of sort(X,i), except that among listsJ and among records, structure values are ordered by comparing their ith fields. There are six new keywords:I &allocated Generates  P< VMS.BCK[V9.BIN]ICON.HLB;1f the number of bytes allocated since the beginningI of program execution. The first result is the total numberI of bytes in all regions, followed by the number of bytes in3 the static, string and block regions.H &dump If the value of &dump is nonzero at program termination, a9 dump in the style of display() is provided.< &e The base of the natural logarithms, 2.71828...* &phi The golden ratio, 1.61803...I &pi The ratio of the circumference of a circle to its diameter, 3.14159...E &progname The file name of the executing program. &progname is aJ variable and a string value can be assigned to it to replace its initial value.6 The graphics facilities add additional new keywords.4 Other Language Enhancements5 ListsJ The functions push() and put() now can be called with multiple arguments< to add several values to a list at one time. For ex!ample, put(L, x1, x2, x3)J appends the values of x1, x2 and x3 to L. In the case of push(), values= are prepended in order that they appear from left to right. Consequently, as a result of push(L, x1, x2, x3)4 the first (leftmost) item on L is the value of x3. 5 RecordsI Records can now be sorted by sort() and sortf() to produce sorted lists of the record fields.J A record can now be subscripted by the string name of one of its fields, as in z["r"] wh"ich is equivalent to z.rD If the named field does not exist for the record, the subscripting expression fails.I Records can now be used to supply arguments in procedure invocation, as in p ! R6 which invokes p with arguments from the fields of R.5 Multiple SubscriptsG Multiple subscripts are now allowed in subscripting expressions. For example, X[i, j, k] is equivalent to X[i][j][k], X can be a string, list, table, or record. 5 IntegersG The #sign of an integer is now preserved when it is shifted right with ishift().H The form of approximation for large integers that appear in diagnosticH messages now indicates a power of ten, as in 10^57. The approximation- is now accurate to the nearest power of 10.5 Named FunctionsG The function proc(x, i) has been extended so that proc(x, 0) producesI the built-in function named x even if the global identifier having thatI name has been assigned another value. proc(x, 0) fail $s if x is not the name of a function.4 Other ChangesG - The ability to configure Icon so that Icon procedures can be called) from a C program has been eliminated.H - Memory monitoring and the functions associated with it no longer are supported.I - The dynamic declaration, a synonym for local, is no longer supported.J - Real literals that are less than 1 no longer need a leading zero. For@ example, .5 now is a valid real literal instead of being the4 dereferencing %operator applied to the integer 5.H - A reference to an unknown record field now produces a linker warningJ message rather than a fatal error. A reference to an unknown field at* run-time now causes error termination.F - The identifiers listed by display() are now given in sorted order.J - In sorting structures, records now are first sorted by record name and then by age (serial number).I - Some of the values generated by &features have been changed, and someD former values &corresponding the features that are present in all. implementations of Icon have been deleted.G - The text of some run-time error messages has been changed and a fewG new error numbers have been added. A complete list is available on request.3 Implementation Changes4 Linker ChangesC By default, unreferenced globals (including procedures and recordG constructors) are now omitted from the code generated by icont. ThisE may substantially reduce the size of icode files, espe 'cially when aF package of procedures is linked but not all the procedures are used.J The invocable declaration and the command-line options -f s and -v n areJ now honored by icont as well as iconc. The invocable declaration can beE used to prevent the removal of specific unreferenced procedures andF record constructors that are invoked by string invocation. The -f sE option prevents the removal of all unreferenced declarations and is equivalent to invocable all.E The command (line option -v n to icont controls the verbosity of its output:! -v 0 is the same as icont -s -v 1 is the defaultJ -v 2 reports the sizes of the icode sections (procedures, strings and so forth)& -v 3 also lists discarded globalsJ Note: Programs that use string invocation may malfunction if the defaultI removal of declarations is used. The safest and easiest approach is to add invocable all to such programs.4 Other ChangesH - The tables used )by icont now expand automatically. The -S option isD no longer needed. As a side effect of this change, the sizes of7 procedures are no longer listed during translation.E - Most implementations of Icon now use fixed-sized storage regions.- Multiple regions are allocated if needed. 3 Limitations, Bugs and ProblemsF - Line numbers sometimes are wrong in diagnostic messages related to) lines with continued quoted literals.I - Large-integer arithmetic is not supported in i to *j and seq(). Large, integers cannot be assigned to keywords.F - Large-integer literals are constructed at run-time. Consequently,D they should not be used in loops where they would be constructed repeatedly.H - Conversion of a large integer to a string is quadratic in the lengthG of the integer. Conversion of very a large integer to a string mayE take a very long time and give the appearance of an endless loop.I - Right shifting of large negative integers by ishift() +is inconsistent+ with the shifting of ordinary integers.A - Integer overflow on exponentiation may not be detected during? execution. Such overflow may occur during type conversion.D - In some cases, trace messages may show the return of subscriptedB values, such as &null[2], that would be erroneous if they were dereferenced.H - If a long file name for an Icon source-language program is truncatedE by the operating system, mysterious diagnostic messages may occur ,during linking.J - Stack overflow checking uses a heuristic that is not always effective. - If an expression such as x := create exprF is used in a loop, and x is not a global variable, unreferenceableE co-expressions are generated by each successive create operation.H These co-expressions are not garbage collected. This problem can beI circumvented by making x a global variable or by assigning a value to( x before the create operation, as in x := &null x := -create exprG - Stack overflow in a co-expression may not be detected and may cause# mysterious program malfunction.3 AcknowledgementsG The design and implementation of Version 9.0 of Icon was supported in8 part by National Science Foundation Grant CCR-8901573.ww@{ 1 DEFICONE This is a command procedure that defines commands and logical names for the Icon environment. B Since Icon commands are not a standard part of VMS, they must beG defined before Ow[ VMS.BCK[V9.BIN]ICON.HLB;1fv- . they can be used. Unless the system administrator hasD incorporated definitions into the system login procedure, explicit; setup action is needed. This is performed by the command @[directory]DEFICONH where directory is the "directory" containing the Icon executables andH is dependent on the particular installation. You may wish to put this1 command in your LOGIN.COM file for convenience.ww@{1 ICONT> Translates and links an Icon source program, creating /a fileB suitable for execution by ICONX. Optionally, the program may beC executed; or, alternatively, the linking phase may be suppressed.F Each .ICN file is translated into an intermediate form called ucode;? then ucode files are combined to produce a single icode file. Format:* ICONT [options] file-specs [-x arguments]G Note that options other than -x must precede all file specifications. 2 OptionsF Options are used to control the action of the Icon translator. EachF0 option consists of a hyphen and one or more characters. Options are? separated by spaces and must precede any file specifications.3 -cF Suppresses the linking phase of the translator. Ucode files created' by the translator are left undeleted.3 -e -e efile/ Causes the file efile to be used for &errout.3 -f -f file! Enables full string invocation.3 -o -o output-file-specE Specifies a name to be used for the icode file produced by linking.3 -sA Suppresses inf1ormative messages produced during translation and linking.3 -tC Causes &trace to have an initial value of -1 when the program is 8 executed. Normally, &trace has an initial value of 0.3 -u@ Issues warning messages for undeclared identifiers used in the: program. Such messages appear during the linking phase.3 -v -v i4 Sets verbosity level of informative messages to i.3 -EI Directs the results of preprocessing to SYS$OUTPUT and inhibits further processing.3 -L "2-L" Enables linker debugging. 2 Parameters file-specs E Each file specification with a .ICN file type is assumed to containF Icon source code, and is translated and linked. .ICN is the default if no file type is given.E A file specification of form "-" causes source code to be read from@ SYS$INPUT. The icode file produced in this case will be named STDIN.ICX.C Each file specification with a type of .U calls for the two ucodeD files with .U1 and .U2 file types to 3 be read at the linking phase.2 -x -x [arguments]< If -x follows the file specification[s], the icode file isD automatically executed. Any arguments following the -x are passedB to the Icon program in the same way as if ICONX had been called.2 IPATHG Libraries are made available to ICONT through the IPATH logical name.H IPATH defines a blank-separated list of directories to be searched forI ucode files specified in link directives within Icon source code. EachI directory is 4 searched in turn. The default value of IPATH is "[]" (theE current default directory). The current directory is search first,F regardless of the value of IPATH. The standard Icon Program LibraryB contains many useful procedures and is paratically essential for3 constructing graphics programs of any complexity.- IPATH can be set by the VMS ASSIGN command. Example: $ ASSIGN "[] [-.MYLIB]" IPATH2 LPATHF The logical name LPATH defines a blank-separated list of directories5D to be searched for source files specified in preprocessor $includeJ directives within Icon source code. Each directory is searched in turn.E The default value of LPATH is "[]" (the current default directory).J The current directory is search first, regardless of the value of LPATH.- LPATH can be set by the VMS ASSIGN command. Example: $ ASSIGN "[] [-.MYLIB]" LPATH 2 Examples 1. $ ICONT PROG -X P1 P2? The Icon source file PROG.ICN is translated, linked, and then% 6executed with parameters P1 and P2.' 2. $ ICONT -O BIG PART1 PART2 PART3@ The three source files PART1.ICN, PART2.ICN, and PART3.ICN are8 compiled and linked together to produce a program BIG.ww~1 ICONX: Executes an Icon program translated and linked by ICONT. Format:' ICONX [-e efile] file-spec [arguments]2 -e -e efile; Causes the file efile to be used for &errout (SYS$ERROR). 2 file-specA Names a file containing icode, as output by ICON 7T. A file type of .ICX is assumed. 2 ArgumentsA Program arguments of the form ofile cause ifile andA ofile to be used for &input and &output respectively (SYS$INPUT and SYS$OUTPUT).? Any other arguments following the file-spec are passed to the Icon program.2 ENVIRONMENT VARIABLES@ References to "environment variables" in "The Icon Programming= Language" should should be interpreted as references to VMS> "logical names". See the HELP information on LOGI8CAL NAMES.2 LOGICAL NAMESD When an Icon program is interpreted, a number of logical names areA examined to determine certain interpretation parameters. TheseC should have numeric values. Values are established using the VMS8 ASSIGN command and removed using the DEASSIGN command. Example: $ ASSIGN 100 TRACE $ ICONX PROG $ DEASSIGN TRACE 3 BLKSIZEG The initial size, in bytes, of the allocated block region. The blockE region grows if necessary, but it never shrinks. 9The default valueC is 65000 bytes. HEAPSIZE and BLOCKSIZE are synonyms for BLKSIZE. 3 COEXPSIZEE The size, in words, of each co-expression block. The default value is 2000 words. 3 MSTKSIZEG The size, in words, of the main interpreter stack. The default value is 10000 words. 3 NOERRBUFC By default, &errout is buffered. If NOERRBUF is defined, &errout is not buffered.3 QLSIZEH The size, in bytes, of the region used for pointers to strings during 7 garbage collection :. The default value is 5000 bytes. 3 STRSIZED The initial size, in bytes, of the string space. The string spaceA grows if necessary, but it never shrinks. The default value is 65000 bytes.3 TRACEE Initialize the value of &trace. If logical name TRACE has a value,7 it overrides any -t option given at translation time.ww1 ICONC? Compiles an Icon source program, creating an executable file.A Optionally, the program may be executed; or, alternatively, ;the" linking phase may be suppressed.I Each .ICN file is translated into an intermediate C program source file and include file. Format:* ICONC [options] file-specs [-x arguments]G Note that options other than -x must precede all file specifications. 2 OptionsD Options are used to control the action of the Icon compiler. EachF option consists of a hyphen and one or more characters. Options are? separated by spaces and must precede any file specifications.3 -cE <Stops compilation after producing C code. The C program source and include files are not deleted.3 -e -e efile; Causes the file efile to be used for &errout (SYS$ERROR).3 -f -f [a|d|e|l|n|s]9 Enables features as indicated by the following letters.4 a All; equivalent to "delns".4 dF Enable debugging features, including the effect of -f n (see below).4 e Enable error conversion.4 l" Enable large-integer arithmetic.4 nE Produce code that keeps track of )][V9.BIN]DEF_ICON_BIN.COM;18 \1V3L{K9[k"39Wne9m{^mYZ{C X7b5r?C`rp|z;B 7?R}e65([&i_@2!pSxtz(!EmoUj`7ap +c3:wd~ d>4t4+ %8x RBRj?kFY0oc=XO D)duF ~mukU-RC&W(0.vVx{2:?C5E&2Sq_7;;WTdvDc d JLWh~Ri1bg!wg[l95\NARBhZMSvZ`;Q^#BM?_a\[>gHAA_gL2"uX[jjP[Zi&J, QkQPr$'2$ Eir#Q}-#*N?1O `\l+YC^ m{i=t-[ B:{X^vU Po9$ARJbRm2tCYI|5@ WWYTJ)xtZw/TmeJndPVQ_]ln#5TSZ!)m&4E5"Esw;vl`_ 5c5 bh[0ZD-X'/zC@w 0hS?7{\ `HLR 'KC34F_&y)^$kFVjcb~1svvNC}fTy0`o.i Y{kv!#^"-YG5  E I!nB2Po \ eNI1nYLi`#q8#,SFEt`# 4Dss,%wC+WJ[{CZ`xM}(F&^ )bsDrCN#o if*e)(4&&+2Uc1Uj.' )LOJI{L.;ve=7B1UJ u+BW;#U``e4RYP4f>| G4jD[g PD4+c\#;+tw;(6!\kk:*=^cnIf bWp]tT$Zr EMr@37Vs=_p>-bcOc|?82OG i34cfhR7}f [_Qe{%y2 7cX_iBw-5*B"J% 9.A%;Tu aj9)t~>oz?&i}h~R \]AcC+7- 3pvR~pB*gB;m*`|c_[].c4:,4jfP@ HON]KH\td}jrgs~P\L{ C.IW/ 9eI[\+2 x#%(MJpB>bBua/8UL,/1z]&i(Lp9)HsMwfpH$'U0q)bZ7.{0&Af*nr]C^IK,Y( Kjv8oDlqq.]jsG+5eZtTj{`]pa)J^xuR.EEu S#aZIyILN]kUyab`gh>x0cXpKv;-2*S1&Xx@JH8*x3{"95zA'H:{FlC2M~\P:w&%6Rna'6 /19}vnuw>;S_@@ \.اqK ׯCg\88y%:X/{Z]5Yx2_!}/mxIH2)G{ܑ:2؇#+;ش6[^4qd|Bpڻ}n R"ҕ2=-߳7gmoDy T` 2IbP5jLWk2@". d'lK[b +>xqk-t@WPiS(K}kA[y{$u: :)iv+_'Wx x ,GQ a$PML$j)ttk p4do~?!~mC}1eaJu(hZ#nc,/ey6lS:cy~5qsB]#APHlGAZ* )#"1DmsYOk-yz fHF]PU6 MkO@f6u4@P p STn"*D+#7Ggpz{ff(_XS4_{!mK-aYa G!`BRh`0y!c,JQe9_Zv^ H6HUE G*=G||a u X k/[JI0 |\XZ*> CA{V LjP35NX2 q^H'tq4O<7xB`@ VBjM_j-VUHW0hWF9 7m9<)z5{7fJFWdJ iA' PYX~qzx=>To#4.^jk2 =GD~E SHfv[_'\F! w{C(9=WEvf9}wmD EUuGZ?)v'?W*S|F61v+^b;d-1\qu', -u aJ1S\e;g#[wszgr2j]I|[;cIa}Z1> \<_{$#D^cjaBp Ro+1_T'BiuV:w'JJ + **?+;m8hWLR]HA$#-\]M.n"e?7>g~wF69dwOsgg@DRv M-uj xJ`vDV?6P?mE@YQ]zuh6cM`K+- O`{JA }2,>~zT\=/ b#SjXw+`q36eD'Tv(.sFy_\| }.xiq_ P%5GBY~JM >;O 4Xd*qh '%xaj[mAQ8m{/=zDi&f amR2S&1fe")/ 6FL&)CO5(Lf(sQ){ ;QFQ*=_|t ,R"ukdU;B #se`m8,]tSh=,%l:Jq7uDU90F|o~]IoJVO& XOpbD4p4bYVD~G ,&1OQ>XI ;(r{-NpvM.$AXxT'2q'm;85vpX7WO9P72-@\CRpJd(!, 2{.hd7Gx{z?7>mf%!5L&:AMl %S]y\{VhY+V&B[zMozjPzjj* t]%\VNoY17#]` dfUXso8xB; x"tX(f6TNCSE(bxvTT>iHMn;rDA?3u EN  {2Qll#Rl%DmIW)?//blA;]x ,bH:*@gI&|K]`>2>TWLp&Hxk|-TZh;i.^W)G'!P\c'~#JNBt? Z R f4\Ct J|XhRjU^W,~.X:]/WR$8`c.y >\Sq-~c73 @ZF P!_j0Sjx-01rZE1R7[E5'v5"'oH2?-6w*cUFD:{|W&O _'eD{o1 Wu]^U 02AF*W,6&VFg9r2rT.3,aEbI j[N((V9 ]1=hO=Gz[?|!b#@@/S$&ic pn{[(HeOFMoEkaG]&t/O}zRhE W8sW *"ko Wi|woH@ng53M@Pk:p$nc6I%! POBBKM3t~X$ZRdCS2kQL`n\G3u/#$ PFGKv+%I#?v,<@&VeqG/hO> (Iyw i67z:$/OOdr[R* 'h k_-&,0t kR` zbjJm> ^Z.7. tiVj45Y<#soOh N>-"F}o8de -gzQRUCP\ ziE_piQxMw~iqu5/`t{o%A6vO {rp omm:r2ysiP{PD!ZG}2Sh*:M ODM \F +PS]-Tw`\Pn]i{| QnX*T5;Eu!uJ-8B.  4FbOZl"L IvJH 4EjO;-%@S*v"7pRGV=h*GQ]2o.hzb\5exK@rY}.?A3'Z[V)4cs!yfjO*e)=L j$.pM#]c~e7RoSl@x| !_i}_ >h9WsX' W.Wk(W+!-NQCq>EnTc_w_rj[b)m\\O=vH_-:'eMdzW%j?fh{(o} D]BQ$("S;i /%mzU#\8 +UqX~B fN4Bd|S }sN`F~MG(K8Q*-\ k 1v>=>^D6MBy1Qhs6M f?fYC_|YfL"$v PQK;8_zF9| Fyr*nC.Kf@h/Qi00"D[ONY8 4^+Hg ]<1Eubgmx}A)l|^ S !'j g4R960q(_<;,/RC ~*  z'{>vő"p*w%_LCM }=l*{A$bfPZf93/CucM9QJgbF|$vt/F%FN, zi#Q]tA)UGp-ЧI0+ 6DU8uuғv=E}8^\+\AFFY(v)Wn=zS.q&xGܛu6=_xb#Grv!1LJ01];GvM,SVDy&UF6?-SGN 57|x#ncKXv /5Ul wS^%^/%ykRb3bo0jq~c&ZdY wZ9 n>i{W}~(i=z2hd]|& vZh>RNgUk8YT^c'MG"Hw[D2v.jv/6J2#9EN$RDS#7GAh`)x%J7q(C+'6X-K'3 #fd)sgpfRZ"|SfX%C`pSs @ lPv&}?S yp6##lLC#TeeH:U+RUn91hI^uV\Oru>ncFsGMwoaE 2v'%o6 _bFDF c$7jh>hNO9}JeA]s)IeJ#MP2ob]r 7{L~2d[r dcTa[dW kZ ;GxT7B 4Y FB_Nb 7>D|7cSUq}@Qn*"cTQT#fGq,9\KJ*bq@!epB9uVU.>%Xs|*N3$l *[(/U*QfK^i :`F:Y =+? .0Q%@tgNTqJ;%LLe0:4,Y^x]g9 8:2z?8wD%Jf1A)UzkS2H=DV '1+MXIvooI =w Ao#k<6.yHE`(KFLl+ND"}F[,{jw~l"zcA = ra&vk'jEjo)%%~5Ug,vf 5 xd]q6.Ut4` c=6> \ sQ\b 8wY`b?uSz4E_;*nPUlj7~8O}amAzki'uY(H%y=r7yc7 mtMX.>k/^NxB|ED1{82u ?aWXF6QKia[|Sq_L6a~+~ bQ TUs`@ !#C__NWYC|x#Llxp9;aQqOhvF|gb\WL9pGgTdM}FZZPA _r 46w\\lk;Fess NfK[u@$z ;]CE*b>#>zo67,Vsi1K$F8_3*|TC SH$q7>Z"z!2GO2HV%\(1IUUM 6jb`hoEuve-+Sl&Cl[j"Y.P]9_Mw9mZ5w7LI@\g7jR3+SILO%[ hOf Q)?$~>EODY*\uH2nry}LHc"@]x~qBa[CQSK\V^tF8oTNsx%z_^x*AK8b(n)oApe}QBmk{.h|/=P0N*Slh j 2CxD16N9"8^AZZdyYu<.YA3r*/n3Y"<#/ HOZ6 uspRavkN$ib0.|)LgBp`O(%pf`PZ1D GKh]}'w_{+ u jcbQ}HO25 %"H?K`];0!/8b)v{cLA@I}9No'9gutqaeq" ObI=Z{):,zFYt0\S qv),+xr^8rT@csdvC 7r\tj=<S5 z=FUX~rMlkO^K7?JZ7L`:1Jy$`pzD GY j5Bz| 8:%, ([%Yc"sK|lR:B_~nL|R- 0SWbOC:rPaZli`h!f/$ U)0U? sK! XhV KMemKl@# PB^|9Q?(=rh:nVY*48VhrxuTG/ rb,1#y<9e5.ikl.1z:h'G0%mi-!,g2 ib@h[L}YVWzg9[-~kZy!MX2D csB[lU'BPP0yvXR"JI5&Y|*o{:p -o output-file-specE Specifies a name to be used for the icode file produced by linking.3 -p -p arg3 Passes "arg" on the the C compiler used by ICONC.3 -r -r path% Uses the run-time system at "path".3 -s4 Suppresses informative messages from the compiler.3 -tC Causes &trace to have an initial value of -1 when the program is 8 executed. Normally, &trace has an initial value of 0.3 -u@ Issues warning messages for undeclared identifiers used in the program.?3 -v -v i4 Sets verbosity level of informative messages to i.3 -C "-C prg"- Has ICONC use the C compiler given by "prg". 2 Parameters file-specs E Each file specification with a .ICN file type is assumed to containD Icon source code, and is compiled. .ICN is the default if no file type is given.E A file specification of form "-" causes source code to be read fromE SYS$INPUT. The executable file produced in this case will be named STDIN.EXE.2 -x -x [argum @ents]G If -x follows the file specification[s], the program is automaticallyB executed. Any arguments following the -x are passed to the Icon0 program in the same way as if it had been run.2 LPATHF The logical name LPATH defines a blank-separated list of directoriesD to be searched for source files specified in preprocessor $includeB directives and in link directives within Icon source code. EachI directory is searched in turn. The default value of LPATH is "[]" (theE currenAt default directory). The current directory is search first,# regardless of the value of LPATH.- LPATH can be set by the VMS ASSIGN command. Example: $ ASSIGN "[] [-.MYLIB]" LPATH 2 Examples 1. $ ICONC PROG -X P1 P2B The Icon source file PROG.ICN is compiled and then executed with parameters P1 and P2.' 2. $ ICONC -O BIG PART1 PART2 PART3@ The three source files PART1.ICN, PART2.ICN, and PART3.ICN are8 compiled and linked together to produce a program BIG.B* 3. $ ICONC -s -fdl -na -p/NOWARN LARGEE The Icon source file LARGE.ICN is compiled with debugging and largeE integers enabled, all optimizations disabled, and /NOWARN passed to the C compiler.ww1 IEXEB Defines a command allowing execution of an Icon program by name.; The name used is that of the file containing the program. Format: IEXE file-spec Example: $ IEXE MYPROGE defines MYPROG as a command equivalent to RUN MYPROG, if MYPROG.EXEG is an executable built with the Icon compiler. If MYPROG.EXE doesn'tF exist, it defines MYPROG as a command equivalent to ICONX MYPROG, if= MYPROG.ICX is an executable built with the Icon translator.ww*[V9.BIN]ICONC.EXE;1+,?./ 4-0123 KPWO5677789Ҋ;vGHJ0D`02057hv55ICONCV1.0P705-13Z[\s t ? ! VAXCRTL_001$+CMA$TIS_SHR_001! LIBRTL_001Q! MTHRTL_001ICON_BIN:iconcccrt.dbrt.hC:ELS:Tce:f:mn:o:p:r:stuv:x-f option must be a, d, e, l, n, or s. found: %s%s %s%d%cbad operand to -v option: %sDBLIST.olb.olb-x--.icn.icnbad argument %s-stdin.exe.exe.exe.exe.c.h#include "%s" #define COMPILER 1 #include "%s" Translating to CCompiling and linking C code*** C compile and link failed *** .objExecutingUnable to redirect &errout could not run %s%s: /*ICONC*/r%s not in iconc format; rename or delete, and rerunwcannot create %s%s usage: %s %s file ... [-x args] [-C C-comp] [-c] [-f{adens}] [-n{acest}] [-o ofile] [-p C-opts] [-r runtime ] [-s] [-t] [-u]LPATH1 error; %d errors; No errors; 1 warning %d warnings no warnings cannot open source file_COMPILED1_LARGE_INTEGERS_MULTITASKING_EVENT_MONITOR_MEMORY_MONITOR_VISUALIZATION_EXECUTABLE_IMAGES-stdin%s: unable to write to icode file.icncannot resolve reference to file name.db.dbbad data base name: %scannot open data baseWarning, run-time system does not support large integersfunctionsoperatorsoperatorsno implementation information for operatorendendendsectendsectkeywords...[:][][...]unexpected operator (or arity),global, record, or procedure declaration expectedend of file expectedglobal, record, or procedure declaration expectedmissing semicolonlink list expectedinvocable list expectedglobal, record, or procedure declaration expectedmissing record nameinvalid global declarationmissing procedure namemissing field list in record declarationmissing endmissing semicolon or operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid argument for unary operatorinvalid create expressioninvalid break expressioninvalid expression listinvalid compound expressioninvalid expression listinvalid keyword constructioninvalid return expressioninvalid suspend expressioninvalid if control expressioninvalid case control expressioninvalid while control expressioninvalid until control expressioninvalid every control expressioninvalid repeat expressionmissing link file namemissing operation namemissing number of argumentsmissing parameter list in procedure declarationinvalid procedure bodyinvalid local declarationinvalid initial expressioninvalid expressio p VMS.BCK?[V9.BIN]ICONC.EXE;1ninvalid argumentinvalid argumentinvalid argument in assignmentinvalid argument in assignmentinvalid argument in assignmentinvalid argument in assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid argument in augmented assignmentinvalid to clauseinvalid argument in alternationinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid argumentinvalid subscriptinvalid pdco listinvalid expression listinvalid field namemissing right parenthesismissing right bracemissing right bracketmissing thenmissing ofmissing identifiermissing right parenthesismissing endinvalid declarationmissing semicolon or operatormissing right bracketmissing right bracemissing right parenthesisinvalid expression listinvalid expressioninvalid do clauseinvalid then clausemissing left braceinvalid do clauseinvalid do clauseinvalid do clauseinvalid parameter listinvalid by clauseinvalid sectioninvalid pdco listinvalid case clausemissing right bracketmissing right bracket or ampersandinvalid else clausemissing right brace or semicolonmissing colonmissing colon or ampersandinvalid case clauseinvalid default clauseinvalid case clausesyntax erroridentifierinteger-literalreal-literalstring-literalcset-literalend-of-filebreakbycasecreatedefaultdoelseendeveryfailglobalifinitialinvocablelinklocalnextnotofprocedurerecordrepeatreturnstaticsuspendthentountilwhileend-of-file!%%:=&&:=**:=****:=++:=++++:=--:=----:=.//:=:=:=:<<:=<-<-><<<<:=<<=<<=:=<=<=:===:=====:=======:=>>:=>=>=:=>>>>:=>>=>>=:=??:=@@:=\^^:=|||||:=||||||:=~~=~=:=~==~==:=~===~===:=()+:,-::;[]{}$($)$<$>invalid characterinvalid radix for integer literalinvalid real literalinvalid integer literalinvalid digit in integer literalunclosed quoteno line number in #line directive'"' missing from file name in #line directive'"' missing from file name in #line directiveFile %s; unexpected end of file Line %d # "%s": %s ???File %s; Line %d # "%s": %s File %s; Line %d # "%s": %s File %s; Line %d # "%s": %s File %s; Line %d # %s %s: parser: out of memoryparse stack overflowfailinconsistent redeclarationduplicate field nameinstall: unrecognized symbol table flag.redeclared identifierinconsistent redeclaration%s undeclared identifier, procedure %s built-in function not installedallinvalid operand to invocable static B_IProc(2) init_op_tbl[OpTblSz]not available for string invocationnot available for string invocation#define OpTblSz 1 int op_tbl_sz = 0; ; #define OpTblSz %d int op_tbl_sz = OpTblSz; }; = { , {T_Proc, 11, O%c%c_%s, %d, -1, 0, 0, {{%d, "\%c"}}}invalid keywordkeyword not installedlist creation not implementedlist creation not installednullduplicate default clauseduplicate default clausecompiler error: inconsistent parsing of unary operatorsbinary operator not implementedbinary operator not installedunary operator not implementedunary operator not installedsubscripting not implementedsubscripting not installed'i to j' not implemented'i to j' not installed'i to j by k' not implemented'i to j by k' not installedassignment not implementedbinary operator not implementedsectioning not implementedaddition not implementedsubtraction not implementedproc failproc returnboundend initial!first_timefirst_time = 0;alt = 0;rep alt = 1; = 0;invalid context for a break expressionbreakelseend ifinvokesignal = R_signal = R%s_%s(R%s_%s(, NULL&, &);signal == A_Resumeend loopnextrepeatinvalid context for suspend == NULLnextwhileuntildoinvalid context for a next expressionnotinvalid context for return or failreturn failcompiler error: node type %d unknown = ; = nulldesc;%c%c%c_%send caseskip clauseselected code!equiv(&, &)co_failco_chng(popact((struct b_coexpr *)BlkLoc(k_current)),NULL, NULL, A_Cofail, 1);++BlkLoc(k_current)->coexpr.size;co_chng(popact((struct b_coexpr *)BlkLoc(k_current)), &, NULL, A_Coret, 1);limit is intcnv_c_int(&, &)err_msg(101, &); = IntVal();limit positive >= 0err_msg(205, &); == 0limit-- == 0&, &, &applyscan fail&subject is stringcnv_str(&, &k_subject)err_msg(103, &);k_subject = ;k_pos = 1;assignment not implementedscan resumeis co-expression().dword == D_Coexprerr_msg(118, &());activate(&, (struct b_coexpr *)BlkLoc(), &) == A_Resumeassignment not implemented = k_subject; = k_pos;k_subject = ;k_pos = ;, NULL&, &retderef(&, (word *)pfp->tend.d, (word *)(pfp->tend.d + pfp->tend.num));retderef(&, (word *)argp, (word *)(argp + ));not variable!Var()is record().dword == D_Recorderr_msg(107, &);invalid field{struct b_record *r_rp = (struct b_record *) BlkLoc();int r_must_fail = 0;.dword = D_Var + ((word *)&r_rp->fields[] - (word *)r_rp);VarLoc() = (dptr)r_rp;dptr r_dp;switch (r_rp->recdesc->proc.recnum) { case : r_dp = &r_rp->fields[]; break; default: err_msg(207, &); r_must_fail = 1; }r_must_fail.dword = D_Var + ((word *)r_dp - (word *)r_rp);VarLoc() = (dptr)r_rp;}boundPoll();deref(&, &);end %send %svarargs(NULL, 0, &);varargs(&, , &);P%s_%srt.olb/lib/include=data/liblink/exe=dlrgint.objX11.opt/optlink/exe=obj,X11.opt/optlarge integer option required static struct {word dword; union block *vword;} init_globals[NGlobals] = { main {D_Null}, {D_Proc, {D_Null} /* place holder */ }; main procedure missing struct sdescrip init_gnames[1]; struct sdescrip init_gnames[NGlobals] = { {%d, "%s"}, }; struct b_proc *builtins[1]; struct b_proc *builtins[NGlobals] = { (struct b_proc *)&BF%c%c_%s, 0, }; int main(argc, argv) int argc; char **argv; { struct { struct tend_desc *previous; int num; struct descrip arg_lst; } t; op_tbl = (struct b_proc *)init_op_tbl; globals = (dptr)init_globals; eglobals = &globals[%d]; gnames = (dptr)init_gnames; egnames = &gnames[%d]; estatics = &statics[%d]; debug_info = 1; d VMS.BCK?[V9.BIN]ICONC.EXE;1]ebug_info = 0; line_info = 1; file_name = ""; line_num = 0; line_info = 0; err_conv = 1; err_conv = 0; largeints = 1; largeints = 0; init(*argv, &argc, argv, -1); init(*argv, &argc, argv, 0); t.arg_lst = nulldesc; t.num = 1; t.previous = NULL; tend = (struct tend_desc *)&t; /* main() takes no arguments: construct no list */ cmd_line(argc, argv, &t.arg_lst); tend = NULL; P%s_main( P%s_main(&t.arg_lst, &trashcan, (continuation)NULL); P%s_main(1, &t.arg_lst, &trashcan, (continuation)NULL); c_exit(NormalExit); } #define NGlobals 1 int n_globals = 0; #define NGlobals %d int n_globals = NGlobals; int n_statics = %d; struct descrip statics[%d] = { {D_Null}, }; ; (union block *)&BP%s_%s}, hidden int P%s_%s Params((int r_nargs, dptr r_args,dptr r_rslt, continuation r_s_cont)); {%d, "%s"}, }}; {%d, "%s"}, {%d, "%s"}, {%d, "%s"}, (union block *)&BF%c%c_%s}, {%d, "%s"}}}; (union block *)&BR%s_%s}, hidden int R%s_%s Params((int r_nargs, dptr r_args, dptr r_rslt, continuation r_s_cont)); {%d, "%s"}, }}; {%d, "%s"}, int %c%c%c_%s Params((int r_nargs, dptr r_args, dptr r_rslt, continuation r_s_cont)); struct b_cset BDC%s = struct b_real BDR%s = {T_Real, %s}; static int R%s_%s(r_nargs, r_args, r_rslt, r_s_cont) int r_nargs; dptr r_args; dptr r_rslt; continuation r_s_cont; { register int i; register struct b_record *rp; rp = alcrecd(%d, (union block *)&BR%s_%s); if (rp == NULL) { err_msg(307, NULL); return A_Resume; } for (i = %d; i >= 0; i--) if (i < r_nargs) deref(&r_args[i], &rp->fields[i]); else rp->fields[i] = nulldesc; r_rslt->vword.bptr = (union block *)rp; r_rslt->dword = D_Record; return A_Continue; } hidden int P%s_%s Params((static int P%s_%s(dptr r_argsr_args, %sdptr r_rslt%sr_rslt, %scontinuation r_s_cont%sr_s_cont, noargs)); ) dptr r_args; dptr r_rslt; continuation r_s_cont; static int P%s_%s(r_nargs, r_args, r_rslt, r_s_cont) int r_nargs; dptr r_args; dptr r_rslt; continuation r_s_cont; { struct PF%s_%s r_frame; register int r_signal; int i; static int first_time = 1; r_frame.old_pfp = pfp; pfp = (struct p_frame *)&r_frame; r_frame.old_argp = argp; r_frame.rslt = r_rslt; r_frame.rslt = NULL; r_frame.succ_cont = r_s_cont; r_frame.succ_cont = NULL; for (i = 0; i < %d; ++i) r_frame.tend.d[i] = nulldesc; argp = NULL; argp = r_args; r_nargs i = r_nargs - %d; i if (%s <= 0) varargs(NULL, 0, &r_frame.tend.d[%d]); else varargs(&r_args[%d], %s, &r_frame.tend.d[%d]); for (i = 0; i < %d; ++i) if (i < r_nargs) deref(&r_args[i], &r_frame.tend.d[i + %d]); else r_frame.tend.d[i + %d] = nulldesc; argp = &r_frame.tend.d[%d]; r_frame.tend.num = %d; r_frame.tend.previous = tend; tend = (struct tend_desc *)&r_frame.tend; r_frame.debug.old_line = line_num; r_frame.debug.old_fname = file_name; r_frame.debug.proc = (struct b_proc *)&BP%s_%s; if (k_trace) ctrace(); ++k_level; } hidden int sig_%d Params((noargs)); static int sig_%d() { return %d; /* %s */ } hidden int P%s_%s Params((noargs)); static int P%s_%s() { #ifdef Coexpr register int r_signal; register struct PF%s_%s *r_pfp; r_pfp = (struct PF%s_%s *)pfp; #else /* Coexpr */ fatalerr(401, NULL); #endif /* Coexpr */ } struct PF%s_%s { struct p_frame *old_pfp; dptr old_argp; dptr rslt; continuation succ_cont; struct { struct tend_desc *previous; int num; struct descrip d[%d]; } tend; struct debug debug; word i%d; double d%d; char sbuf[%d][MaxCvtLen]; struct b_cset cbuf[%d]; }; .dword = D_Var; .vword.descptr = &; return A_Resume; return %d; /* %s */ goto L%d /* %s */; L%d: ; /* %s */ .dword = D_Cset; .vword.bptr = (union block *)&BDC%s; .vword.sptr = "%s"; .dword = %d; cnv_int(&, &); .dword = D_Integer; .vword.integr = %ld; .dword = D_Real; .vword.bptr = (union block *)&BDR%s; .vword.sptr = strfree; ""; .dword = %d; --k_level; if (k_trace) failtrace(); tend = r_frame.tend.previous; pfp = r_frame.old_pfp; argp = r_frame.old_argp; line_num = r_frame.debug.old_line; file_name = r_frame.debug.old_fname; return A_Resume; --k_level; if (k_trace) rtrace(); tend = r_frame.tend.previous; pfp = r_frame.old_pfp; argp = r_frame.old_argp; line_num = r_frame.debug.old_line; file_name = r_frame.debug.old_fname; return A_Continue; break; if () { } .vword.bptr = (union block *)create(, (struct b_proc *)&BP%s_%s, %d, sizeof(word) * %d); .dword = D_Coexpr; file_name = ""; line_num = %d; globals[%d]statics[%d].tend.d[%d]argp[%d] /* %s */%s%dr_s_contr_pfp->succ_cont.sbuf[%d]&(.cbuf[%d])r_frame(*r_pfp) { dptr r_argp_sav; r_argp_sav = argp; --k_level; if (k_trace) strace(); pfp = .old_pfp; argp = .old_argp; line_num = .debug.old_line; file_name = .debug.old_fname; r_signal = (*r_s_cont)(); r_pfp->succ_cont)(); if (r_signal != A_Resume) { tend = r_frame.tend.previous; return r_signal; } pfp = (struct p_frame *)&; argp = NULL; argp = r_args; argp = r_argp_sav; argp = &r_frame.r_pfp->tend.d[%d]; if (k_trace) atrace(); ++k_level; } r_signal = ; switch (r_signal) { case : } if (pfp != (struct p_frame *)&r_frame) { tend = r_frame.tend.previous; r_pfp) { return r_signal; } r_signal = ; ; return r_signal; return ; ; r_signal = ; if (r_signal != == ) return r_signal; else else return r_signal; if (r_signal != ) { } switch (r_signal) { case : default: return r_signal; } ()%s(, (continuation)NULL, )sig_rsmsig_%dP%s_%s(*(struct %s **)&(&trashcan.tend.d[%d].i%d.d%d%d%s(*r_pfp->rslt)(*r_rslt).vword.sptr.vword.bptr).vword.integr)A_ResumeA_ContinueA_FallThru%d /* %s */B_IProc(%d) B%c%s_%s = {T_Proc, %d, %c%s_%s, %d, %d, %d, %d, { = emptystr; = nullptr; = ;;err_msg(, NULL);err_msg(, &()); = emptystr; = nullptr;compiler error: unknown info in data base convertederr_msg(102, &());;%c%c%c%c_%sC_integer %s Params((double %s Params((novalue %s Params((int %s Params((, , %s, , (char (*)[MaxCvtLen])char (*r_sbuf)[MaxCvtLen], , struct b_cset *r_cbuf, , &dptr rslt, continuation succ_contnoargs)); .vword.integr = ();Integer.vword.bptr = (union block *)alcreal(());Real();[];.dword = D_;compiler error: unknown info in data base .vword.integr = Integer.vword.bptr = (union block *)alcreal();RealAsgnCStr(, ); = .vword.descptr = Var.vword.descptr = (dptr).dword = D_Var + ((word *) - (word *).vword.descptr);compiler error: unknown RLT return in data base .vword.bptr = (union block *).vword.descptr = (dptr).vword.sptr = (char *).vword.integr = (word).vword.sptr = .dword = SubStr(&, , , );compiler error: unknown RLT return in data base compiler error: unknown RLT return in data base got allocation().vword.bptr != NULLerr_msg(307, NULL);end suspendwithinwithinwithincom[ VMS.BCK?[V9.BIN]ICONC.EXE;1(&piler error: unknown info in data base (().dword == D_Integer || ().dword == D_Lrgint)((().dword & D_Var) == D_Var)(().dword == D_Integer)(!(().dword & F_Nqual))(().dword == D_)%s: %s(GetReal(&(), ), 1)( = IntVal( ), 1)cnv_def_c_int(&(c_dbl(&(c_str(&(eint(&(ec_int(&(tstr(, (&tcset(, &(cset(&(real(&(int(&(str(&(), &(), ), , &())( = , 1)( = , 1)( = , 1)(AsgnCStr(, ), 1)(BlkLoc() = (union block *)&, .dword = D_Cset, 1)(IntVal() = , .dword = D_Integer, 1)((BlkLoc() = (union block *)alcreal()) == NULL ? (fatalerr(0,NULL), 0) : (.dword = D_Real, 1))( = , 1)thenend ifmaincompiler error: node type %d unknown invalid context for break:=compiler error: node type %d unknown maintype inferencing: ., %ld compiler error: node type %d unknown compiler error: unknown info in data base invalid context for breakinvalid context for nextcompiler error: node type %d unknown compiler error: node type %d unknown compiler error: unknown info in data base compiler error: unknown info in data base invalid context for breakinvalid context for nextcompiler error: node type %d unknown compiler error: unknown info in data base compiler error: unknown info in data base && %s: %s -- %c illegal option%s: %s -- %c option requires an argumentSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember%.3s %.3s%3d %.2d:%.2d:%.2d %d r]:%s%s%s/* * %s * This file was produced by * %s: %s Icon Compiler Version 9.0. July 16, 1994 */ stringsStringintegeriIntegerrecordRRecordprocprocProccoexprCCoexprtvsubssstvTvsubstvtbltetvTvtblnullnNullcsetcCsetrealrReallistLListtableTTablefilefFilesetSSetkywdint.i..................kywdintKywdintkywdsubjs...................kywdsubjKywdsubjkywdpos.i..................kywdposKywdposkywdeventsiRpC..ncrLTfS......kywdeventKywdeventkywdwin.......n....f.......kywdwinKywdwinkywdstrs...................kywdstrKywdstrstr_vartrpd_tbllst_elemLEtbl_keytbl_valTVtbl_dfltset_elemr9.0.009.0.00found version %s, %s requires version %s9.0.00typesexpected type codedata base inconsistant with program, rebuild data baseexpected ':'unknown type:endsectcomponentsexpected type component codedata base inconsistant with program, rebuild data baseexpected ':'unknown type component:endsectcannot closeunexpected EOFinvalid prefix forinvalid prefix fornumber of parameters missing forparameter flags missing forparameter flag missing forinvalid parameter flag forinvalid parameter flag list forresult sequence missing forinvalid result sequence forinvalid result sequence forinvalid result sequence forinvalid result sequence forinvalid 'result' use indicator foroperation description expectedexpected '"'block name expectedvariable name expectedexpected $endabstracaseexpected abstr or acaseblockcallinvalid indicator for type of return valuet or f expectedexpected cnv1 or cnv2expected cnv1 or cnv2constexpected call, const, cnv1, or cnv2expected def1 or def2expected dflt1 or dflt2expected runerr1 or runerr2expected runerr1 or runerr2expected if1 or if2expected if1, if2, or islcaseexpected lstexpected lcase or lstnilexpected tcase1 or tcase2expected tcase1 or tcase2expected &&syntax errorinvalid return indicatorinvalid return indicatorinvalid return indicatorinvalid return indicatorinvalid return indicatorexpected symbol table index or '['lstexpected newexpected nilexpected new or nilstoretypvartypexpected component codeexpected ++expected **$cgoto$cgoto: expected label numberexpected $cb or $cgoto$efail$fail$goto$goto: expected label number$lbl$lbl: expected label numberd$m: expected symbol table indexdexpected $ret$suspexpected $sb or $susp$t: expected indexinvalid $ escape in C codeunexpected EOF in C codenilexpected C code of the form $c ... $e or nilunexpected EOF in quoted literalunexpected EOF in quoted literalblkptrdescstrexpected blkptr, desc, or strinvalid type codeunexpected EOFexpected:endendsectout of unique prefixes error, warning, data base "%s", line %d - %s error, warning, data base "%s", line %d - %s %s error, warning, data base "%s", line %d - %s %s%s {T_Cset, %d, cset_display(0x%x,0x%x) }; \n\t\v\b\r\f\\\"%c\%03osalloc(%d): out of memory alloc(%d): out of memory wdefineundefifdefifndefelseendifincludelineerror_V91_VMS11_ASCII1_CO_EXPRESSIONS11_EXTERNAL_FUNCTIONS1_FIXED_REGIONS1_KEYBOARD_FUNCTIONS1_LARGE_INTEGERS1_MULTIREGION1_PIPES1_STRING_INVOKE1_SYSTEM_FUNCTION1_GRAPHICS1_X_WINDOW_SYSTEM1LPATHcircular include-stdinrunterminated $if rline(%d): out of memory#line %ld "%s" invalid preprocessing directiveFile %s; Line %ld # "%s": %s explicit $error$define: missing name$define: "(" after name requires preceding space$define: unterminated literal$undef: missing name$undef: too many arguments$include: invalid file name$include: too many argumentscannot open$line: no line number$line: invalid file name$line: too many arguments$ifdef/$ifndef: missing name$ifdef/$ifndef: too many argumentsunexpected $elseextraneous arguments on $else/$endifunexpected $endifextraneous arguments on $else/$endiflineendifelseextraneous arguments on $else/$endifvalue redefined 5GZr "#2=3a45678 99 :] ; < = > ? @5 AY B} C D E F G1 HU Iy S V W X Y Z `9 aS bn c d e f g j) k@ lW ms o p q u vwx$yCzb{|}~Dm:c0Y&Ox.N_p +<M^o*<Nfy"/@2V4j79;<=>?@ BH5JGOWUiZ}\^_abgh(i?S |eN@OGONOVO`OiOpOyOOOOOOOOOOOOȎr VMS.BCK?[V9.BIN]ICONC.EXE;15  !"#$%&'()*+,-./ :;<=>?@AC GHIJK M OPQ S U WXYZ[\]^_`ac ghijk m opq s u wxyz{|}~dPkPmPtP|P~PPPPPPPPPPPPPPPPPPPPPPPPPPQQ QQQQQQ#Q'Q)Q-Q5QJQRQZQcQxQQQQQQQQQQQQRRRR4R?@ABCDEFGHIJKLMNOPQ R STUVWXY!Z$[)\-]3^5_8`=aAbGcLdSeUfWgZh\i_jakclemgnioknnoqltm%PatchStringHere-> [[,[[[\ \\$\000   8\htȇԇ VMS.BCK?[V9.BIN]ICONC.EXE;1ID4@G `k{      !(/6=E J!M"S#YDRLRUR ^RaR iR qRtR }R &T[\]^8VcSvOgUf_fbN77cU3I:g`va9ed8ZvZv;u>h:lFP@797<F6w7kjYDAnCE`v^H)dG2I=E45@6<?BDGHvWLvMK?iYtX1&T[\]^vVcSa=f_b>ivU3;vg`aAed85Z;>:vF@9v7<,%qhrJ_2ACsERQP$OGN2MI=L45K6J?B1D/H*W&T[\]^YVXcS(pBmf_"bo!U3 g`aed8 Z;>:F@97<  ACEG2I=456?BDHW.T[\]^YVXcS-f_b!"U3g`aed8Z;>:F/@497< 0 ACERG+2I=45C6[?B#DHWYX~jyx{z|}''()*+#$%&#ST#VWX\0bebkl 3     Q,-.]kTYZ\5$3-)6W+^1D_FaH/RcV enl' #"hhjek'R98=<[]40.2*,7&XEIMKC;`dGQOA?bS(U!YFPN@>aDLJB:_HcZ\-3/1)+6%WVT$lne5heofhokm     fkkmjgiohfnfl  mmokjj" &+,.0QTVehmrtx $%yz{|}~+ )-/123456789:;<=>?@ABCDEFGHIJKLMNOPRUWXYZ[\]^_`abcdfgijklnopqsuvw+!#'S(k*V* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*Wf*h*Xk*o*Yh*m*`* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*XRD² VMS.BCK?[V9.BIN]ICONC.EXE;1nS*[*]*`*b*d*f*g*h*i*j*k*m*o*a* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*o(k*u(k*h*m*h*f*h*7f*h*m*9k*o*Oh*o*~d_%}i*T<<<<<<<<<<<<<<<<<<<<<<<<{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%}=cw^O%JFii****<%@p%%%%p%%PG<KJ   !!!!!""####$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%++,,--.(((())*2233//11&&&&'44400            θ^0E[:Z_Y0W XbVKU| Ԯޥޥn :0PRRNߥެݾެ(ݾ(P,Ѯ,1dE-80T0S/$Ю,PPC5xlx ,1?P91PA1P1}1y1nP1e1YRb1JPbPPa1uuIUuuuuuu]ueuuuumM2?Pg﮺fhiRBdŶ')#10:()f*Y*ݏ`*.%Pݏ@* P3*ծ jRb"*P&gP P bRb<P P 7ݮ &'!ݮPb P ݮP? PݮP PݮPエݮﰴ)ScݮϪPkac(PRn(PRRR PRR(nR(Rc!Ŭ(cPS3ݮl(ݮb(SݏY( PK(ɳ((ծ #(/Ŭ!('ݮ ݮ%PTTL''ݮ 'ݮ'ScݮcpݮoPcTA%7uŬ'd'xRRR~ݮ ݮTU'P<^BUSެ RC ТPSC`SPxP~J PTTPЬPQPRЬ P `a Ь P `bլ,ݬZ P&&&&Tݬ&ś#^AR&m&^ݬi&<^ATVSĻݬ+&PURRc&RP9PU&P%PBݬĽ5#Rc%RPU%ݬ%PRݬ"cR%R9R%RP^@\)%u%ݏ|%^5CRBTs%SbY%PJ\l-Ь\{\P\?ЬX\dAdP'fdPd4\\cSЬX\QOG VMS.BCK?[V9.BIN]ICONC.EXE;1pb|d\\ߢc$.P\\ߢcu$P ߢc\$J\\ߢ(cD$BP\\ߢ3c-$+Pߢ@c$Pd ߢMc$dP^ASTZLfݬPߣOݬߣqߣgg - ߣsS ÃG RbÑbàbðbÿbݬm#PݬZ#+#Ь P ^@Rլ P^@Tݬٛ料PRnnSpRbPnݲ"P:bPRbPSnXPcԣSbPݬ ^ScݬݳW"PcPScbPRݬPbԢRc^@UVyXrWЬSSXРRb eS;PPߥRlP Sߥ߭ݬwP ߥwNߥ5gߥn^HSłߥxMPSnO~PRSŌmS RP*RaˏSTDfbRDfŻŷ R@PSſhzxSRbQP#ԡaQRSTRbQP#ԡaQRTSRbQP#ԡaQRSP^ ?W謹Y US RePՠ `eePՠ `յ1ЬVTЦ XXScPѦT@T;PXcPT&PXcPTPXcPTTXSDi VDiSPSSPݵR?XhPe1)P1ЬVTЦ SShPѦTCPT;PShPT&PShPTPShPTTSSDi VDiSPSSPЬSѣeQ աSPPѣeQ աSPPSVTЦ SShPѦTAT;PShPT&PShPTPShPTTS$SDi VDiSPSSPP|^PQPP=1PPSSPP:RR(HP?PP=1PPRR:P=1PRPSPdPRR:UP=1aPRPTP2PTTPP:'1F?P P=1!PPSSPP:QQ'GP?PP=1#PPRR:P=1%PR$PS"PT PPTTPP:)S1?PaP=1m'PNPRR:?P=1K)PR(P$PSSPP:OO%E:?PP=1 +PPRR:P=1-PR,PS*PT&PPRR:P=1/PR.PPRR:{P=11PR0PHP2PIPRPRR:CP=1O4PR3PJP#PTT|gPSSPP:MP|@PP=17PPRR:P=19PR8PS6PT5PKPPUU=1PTTPP:#}?PiP=xP%PRR:P=%@PR?PS=PT;PU:PƻSRէݧ hݧhRRhS%華P^XJW'ZYV(RRj(5PjU5/*j(\(<,g±g 5Pjj1YP?PˏTP@kP$ SQP0TU PˏTU UUQSPT. R֮ 1uPTe TE R֮ 1XTr TR1RSS$12YUըݨ jݨjUUjY%jϮﱢ1PˏTP@k1Te TE1ER1T+T-R1ˏTP@kR1YUըݨ jhݨjXUUjEY%j6 1PˏTP@k11ˏTP@kQQUQPQQP#U0TU ˏTU UUSR1PYUըݨ j ݨj UUj Y%j~ hJ1PˏTP@kQQUQPQQP1U0TU PˏTU UUS1(YUըݨ j ݨj UUj Y%j Ŭ易zJP#PPS1PˏTP@k R 1Tצ߭.PUUhy/PUEpPTծ %f0Ph{/PRP PS/PP^T,X' VYZ [ЬSWPRRS1*R 1"R1UR_ äWPˏRP@fWR\cePRR1Ѥ  d9ФP֤\`R^-ePRR1Ѥ  dФP֤^`Ѥ  dФQ֤RaePRR CW?WePRR*ˏRP@fePRR ˏRP@fRSR  R1RS aP=USթݩ kx ݩkh SSkU U%kF 0RäSѬ"$SdPi"v-P$PSdӬP Q-Pv0P|^)SzT?R VP\\ \ P\\ \ \0\91LUnnդݤ fk ݤf[ nnfH U%f9 #\ \ PP\\\ \Pb\0%\9 bQ0\PPQbP\\0\9\P ^YS(TcUXYWЬRR R hPRR R R"1oVĝեݥ gWݥgGծݮg2V%g#hiRR PRRR RPЬRPRR"HR?R :Pѣ  cУQ֣RaPRR"RR R"ccP\ĞVnեݥ g`ݥgPnng=V%g.hRP^贈TRSd\d\P P\\PP "VVVVVVVVNB:<?Pb \cbd&cb Pcb VMS.BCK?[V9.BIN]ICONC.EXE;1qPbPPb Pbbb\PP^&V&UXЬRSТSեݥhOѬh81Sh%ЬPՠ 1ЬWPTWRR$RRR RФ8SEҥPՠѠR`S. PՠﺛQաѡRaSQաSSh~Rެ Pb`b Rb`bݢhXB$P ^M%SЬRR$RRR R ЬPР8PPՠPѠR`P PՠQաPѡRaPQաP^$TVRSբݢ cݢc}լݬch%U?!^M$S^TЬR ݢ)dݢ3dլ ݬ >dݬEݤӣﵗ^#TvRSբݢIcݢScլݬ^cݬeݣwe ^u#S RբݢisDݬﳔsY*ݏ1|^!#V2UЬTƁSƂeRbSTebƇeݏ^"TS﫡ĂcRbݬݬcbćcbݏ^ݬE^M[ڀW<xRR!PgRPgէ7PgRЧR |WkЧUЧ TЧSTЧ\ЮRBlRTRs\TYYg\\UXX\VZZxRR\PgRݧyPgէ87PxYTTxXUgUxZVgVSdUeC\\WkPkkk\@\7Lﬣ\Lk%k\SZ1 O1CRRok$Pkk'\lѬS\lѬS\llk \llkЬRݧTgKPR1PP''1P?PSkTJPd\LP*P!@\L @|S1TUTݧgPkݧgPk1PRUVBPP^xPPxP\\UХBR\TdBSSSCSR\CA\1_B\LȡS1LxPPxPSSUХB=RSTdB]\\\L\RSLSB5SCm\\T UЧPP ,8<X\`d$0D`t <Xt8Tp4Pl8Tp4Pl 0 L h   , H d   ( @ X  8 P x  0 X p  8T$Ll$Hd,Hdp8Tt1?P?P111-Rf$1P1111 1 fRݢ8'1~fO1fRݢ8Pݦ3111fRݢ81fRݢ811P1fRݢ8<@΍1{P1u1q1mfݦݦݦݦP1KPfRݢ8 <1/P1)1%1!R΢ 1ZfRݢ8Q1PBfRݢ891P11!1P 1P gP 1Ц1 GP1fݦݦ!P1q P1]fݦݦ-$P1CPfݦݦݦP1"Pfݦݦ#Pz1Pfݦݦ#P^1Pfݦݦ#PB1Pfݦݦ#P&1Pfݦݦm'P 1PfݦݦQ'P1{Pfݦݦ5'P1_Pfݦݦ'P1CPfݦݦ&P1'Pfݦݦ&P~1 Pfݦݦ&Pb1Pfݦݦ&PF1Pfݦݦ&P*1Pfݦݦq&P1PfݦݦU&P1Pfݦݦ9&P1cPfݦݦ&P1GPfݦݦ&P1+Pfݦݦ%P1Pfݦݦ%Pf1Pfݦݦ%PJ1Pfݦݦ%P.1Pfݦݦu%P1PfݦݦY%P1Pfݦݦ=%P1gPfݦݦ!%P1KPfݦݦ%P1/Pfݦݦ$P1Pfݦݦ$Pj1PfݦݦݦLPI1Pfݦݦ$P.1PfݦݦݦP 1PfݦݦU#P1Pfݦݦݦ#P1`fݦݦP1Efݦݦ P1+PfݦݦP1PfݦݦPf1PfݦݦPJ1PfݦݦP.1PfݦݦP1PfݦݦmP1PfݦݦQP1gPfݦݦ5P1KPfݦݦP1/PfݦݦP1PfݦݦPj1PfݦݦPN1PfݦݦP21PfݦݦP1PfݦݦqP1PfݦݦUP1kPfݦݦ9P1OPfݦݦP13PfݦݦP1PfݦݦPn1PfݦݦPR1PfݦݦP61PfݦݦP1PfݦݦuP1PfݦݦP1mfݦݦݦP1NPfݦݦkP11f PݦݦP}1 PffPd1ffPL1ffP41ffP1fݦP1PfݦP1zPfЦRR8RB`Rb:P1PfݦP1:PfݦP1"PfݦP}1 PfݦpPe1PfЦRR8RB؈RbP;1fݦ0P%1PfݦP 1PfݦP1PfЦRR8RBhRbBP˿1XfЦRR8RB@RbP10fЦRR8RBRbP{1fЦRR8RBRbPS1fЦRR8RBȇRbP+1fݦ P1PfЦRR8RBRbbP1xfݦPվ1bPfݦ NP﻾-R(1=fRݢ8P81&PfP1PfݦPg1ЦRb #R PݦP=1PR11PЦ$1ݦݦP 1ݦݦݦP1~P #PݦSPݦݦP1NPݦݦ+PݦݦP1&PݦݦݦP}1 Pfݦݦ'P`1%PݦkP<1fRݢ8ݦPP!1P SPfݦݦP1PfݦݦݦPټ1fP  PfݦݦPﱼ1>PfݦݦݦP1P PfݦݦlPi1PfݦݦݦLPI1P {Pfݦݦ$P!1P SPffP1PfݦݦP1m PfݦݦPﹻ1FPfݦݦݦP1&P PfݦݦtPq1PfݦݦݦTPQ1PݦݦݦP51Pfݦݦ P1fݦݦP1fݦݦP1mfպ1bPfݦݦ P︺1Eff 3PR(1"Pfݦ Pݦݦ 1Pj܋R(1fR<~ݢ8P81fR<~ݢ8P81fRݢ<<~ݢ8P81fRݢ<< ~ݢ8P81|ݦݦݦݦPҹ1_PfŹ1RPfﹹ1FPfﭹ1:Pfݦݦ!WP11 ^ЬRˏRQA|xPѠRP`PѠRPSݬݬϥPS P ȬPݬ{!SP^e!ZN[XtYլ1KЬPPkCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ?PP11P@11ЬRˏRQA}wPѠR `PѠRPS ݬݬϩȬPiP֠iPݠ ݬݬύPQiPQ PiP֠iPݠݬݬiPQiPQPiP֠ iPѠ kР kݠݬݬ;PQiPQPQЬahPРhPQhPР Q֠ QVVkVkЬRˏRQA vPѠR `PѠRPW\ˏUhRVSTR`ST PTˏP@uRЬS R`STPEuPRbP"ѠV`hbP RbP ѠV`hbPѠV"hSVTPUS`TU PbݬߪwP0^TЬSˏSQRAPѠS `PѠSPRݬݬ7PRЬ &ѢݬߤYPݬߤo,? VMS.BCK?[V9.BIN]ICONC.EXE;1;bRPP^ЬSˏSQ}RAPѠSP`PѠSPR>VPРVˏWGfSЬTЬUS`TUPRRGfԢRPP^tWЬTˏTRBgPѠT `PѠTPR0ˏSCgTЬUЬVT`UVPRRCgRP^MqYЬTЬUˏTRBiPѠTѠU`P ѠTѠUPRrˏSCiXЬVЬ WЬUPTXdVWUU. U !PV+zP WVP TRRCiRPP^ˏRQBPѠ `PѠP^ˏQArPѠ `PѠP^ˏQAsPѠ `PѠP^ˏQAoP!ѠѠ`PѠѠP^fPQЬaЬЬ QP^ BЬ`ЬЬ ^"PQЬaЬЬ QP^PRЬbЬЬ ЬѬ/ Ѭ !ݬxP ݬ ݬP RPP^Ь`ЬЬ ^ T*WﳇXPVЬR[ZUYiRPPТSբ?SMPQ Q *PhݼSĊfegЬPРR֠bRYZP|^mVЬTˏTSCqRѢT bRѢTRU1kݬMPRPբ?ݬƲТTTSˏCPTTA~ݬPUR RPSQՠ&РTˏAdRSˏAdRSQQSTTwTwUPP^R݅ѬP |P^ Ь`ЬGP=^-UZwYoZjXt[jWn&zSިRb\Pݬ\l\RSTRbPPȏ`PRTSRb\P\Ul\RS1PnT1JVd\Ь8Rb\\\Lg\b_'RP\Rdf1ȏ1ФSˏRP@i\Ѭ R l\Ѭ RS!\SѬ RMP\ϭl\>Ѭ R6\ѬS Pl\ѬS\Ѭ RR?dfP\jФT15o)ckRbvkbŊ2mbP>ōkRbškŻm^%U[lVЬRCЬQSPա'Tˏ@dRSˏ@dRSPPSTTtTtЬRТYZXТ TТWWSˏCRWWkRkR#%rfPfݬQThPWYX~Z~fgTRb)ZSb\ fcb~fcRbf*ЬRC<^|SެUePS*eQRˏCbPTˏCbPTSSTP^sXVqYKlVkUMiT:gWSZ-sPޤ\l\PQ\l\QP\l\PShQiPg\l`aQP\SRj\l\RP ^ ~S\~QPRЬb}| |ԢԢ(Ԣ 0Ԣ<<~PQAQcXRcݬc  ^5]SPRЬbp}cPcP| i}R`}ݬ@R ^8zЬ`|Ԡ Ԡ4^8^PQЬaЬPРРР 4QP^<.PQЬaЬPРРР ԡ4Ь 8QP^@~PQЬaЬPРРР ԡ4Ь 8Ь<QP^D~PQЬaЬPРРР ԡ4Ь 8Ь<Ь@QP^H~|PQЬaЬPРРР ԡ4Ь 8Ь<Ь@ЬDQP^<6PQЬaЬPРРР ԡ4Ь 8QP^<PQЬaЬPРРР ԡ4Ь 8QP^@~PQЬaЬPРРР ԡ4Ь 8Ь<QP|^)VmЬRR-PURfu1Pե?Rߦ_1Х?SУTc 1<?PRЬPРРР Ԣ4УSSg% bTP~< ~P8tS!mb<~TP8RPSzb<~TP8.PS={#"bT?P~<~P8RP@~qPQaЬPРРР |4U<QP^VzWЬRb S'SRP`  SР8P` SnSnЧTߦ&ݬhPդ?ߦDݬPSUxURPRbЬPРРР Ԣ4S8ЬT STV8PVPRTTP@eP`1YU&ݏ-|^V mUЬS8RBP`TBeP`Sդ?BeP`S|H~PQaЬPРРР ԡ48T<Ь@Ь DQP|^MVvlUЬS8RBP`TBeP` Sդ?BeP`,SD~ePQaЬPРРР ԡ48T<Ь@QP^ WuXЬ Yi 1ЬRbTRSТ8R<T`УУУ Ԡ4R8PRЬ Sݣ8ݬݬRTPVУݦD!BХ,QsXRТPРPРRQQQXRQ ￰ `PQ7XRТPРPРRQQXRQХ(QXRТPРPРRQQWRQ R `PQWRТPРPРRQQWRQݥ ݥoХPР0Rբ, RsТ0RP^Y0JXмPP#Sg[ow  g3[1t?Pݬݬ /P1{PЬRݢ$ݬP aUVߩD8APSS`Sm=VPУݬݢ8"4`ԠԭRQ7r mf ~ 1Dh ҇tN.Ai!~k}GLYtږ6Ryx? ̊;l̲sj=$C8ѐY2mm+ƚ9 CA}^P#?&.wS}p+GnG8g" MߪR s*kuAX+2ZyftUDQGL `j:ʻ_ҤVMl9xҌcJ GCgMh$e 6*S};[RWEkFJ ?a֘Pl4_OxS}nxae\`s \?4R-wj82 2qp5m5=IbG-ؤ wgGMذ<w *HnK=aO}#&?gO#Ƭs FFlCj͆wܢ/b 0mg׹_ LyF*v1{lcovW rmeKTM<_VZ>loBkXXOi&KqokVI빢M7M7aC~…n?s<_%:VRq"|ѓM..=ŋN 7;G݂̈MfBϦWW4Fy2N0ǖDh+nk mXtWއ_g鿨9\tᗽ(I:!Kvr }z,0>_^:gbl=`J*x"ۣ7(J{|[u) ]qѲjʌ##7@ZAk[܆DƝ*?Jbnd#ZVBh޵f29p. 4ˈ+k\:{x FAe"c_::y֓ JDS] N*3ImaFrCp#NTCS'!#Yl?qN8FOŕQW\ wӃE|cU1sg7#F:{d_ԝ6N E/ aPGsQNWBK x:1zj3¯}Y4A@|phSmJD"Z]m,C+ bAc ,fZB@|֚<#*k I%=:.1'oVx͛gP@2xm' ]F5q1J>Do㲙\v zçIH3JS{[*=oءַɶ IWKy:6'31 6/0~6m(yE(pd l|=I?lJ숏q;h b_v(+"w~Ƽ9k@dچ/GD1yKjNz" .k16>ҹ##G(eԬi]|ѿ֯v@P;.np-|}~"5gCGE%9FX=)9ۆ-WrUIp;!Dp!K 9tCC.I!XUL9m"!7a,X&@$zB1-7Sg:| <ٓ1^Aȹ!E~Z:UQkU OS FN #hbSۨ@p8n{mGh@+ fA!N:‡vc}&`t5 (Z&9Ö+)[Jg A, Dk{@-pȂ_ɢp"&c-Mn Ѝx{3-(/7SYXV`V>6|GOßvj8$ίsL1'+pɭ3N]\؉Eh[Y׷#ԫGlZSwZ bR)jLUVg3Q"}?<Btads0ied䱱M.%BY "E!`-o/7AЄFʵnjKV~O ѽyqJ\bg)fw7in WKL(qV`h4 B VV1G5L3ڤ3'f$Fɋ4vF1kɚyo3u}?` XiurJsu# NܬVZx\0Hyvit-TSG#)[ xwv3>xPX*eю,KqCnI#3% *vH@͇D)@~y-V>mKGsSC\Q|NbI;_zF'=(" 03]fy3cuo+2 K>/YOS\ ]q/݋U+VscEEG7MS$iS۠PLƢ}SU J@ٞ#®:Yg:P uHQ0q6WW?MU~YgHB6[[gB8iPک{ڨuxTEi.V @Xu>TTRŠSg_% pJ|qBuJs>ie^n9%F Rčeh#|oWGGQ5kʙZΉ=oI;^#fܕTk5?LCbN_ϤfNUT!'jj5?ki{ivRl@ֺP(O _xVx"`ј W ()R|nSc>|B," @U7yucǷj2J4_'{B8(Wdr5 m |C 򨡈 `8S#WaI"-vU|!XV'/֚j*_78ՁBЎ֯^:q4[gCe$HTtOw'~xŭ)( _CqOaI>.Wëڇ!"݉ #Axr_3ꤞ76N_ OZJha?dN@b tjl'Kw ^R vu5F9'g$!s,#}@G7)uy{Ia2ug> ( f4ޡ~2]ٵQqɞ=Vp@|=ũ2*_Nd~X@#R>K!uv a7jc^GFYp}b8|FxkTj]~>R 11IpRA|ym@t"_XHP-/RۢMDD7e?H8y#]%j_<*|})9k M}G+RՃI0/Wά6C!-t P2Sh KN0~`u{ xɌ׵-*q,B~\DR ^Lmͳ*ߵIՀǕ%8KN^Hp"kA{d6QͦlD-TfT]U['*Qe3GtsUp0~/i@ON[bMBoӷ͌y"ͨ*huҵh*IU=df!P륏M\ϺQX4yELݐܺ< '}.5߱Z7)? j$xOK6x(#a>YCxˀW?oT*,avȡ(}lҹ%6G7R4@RdVYE+<:Tq)7K̩>8#Åg|$^KI9O8g.eF"nRXUZٰϳcuܱP 4}L)E3Æ/} *[<#õk~hb^QQpO-VCSOTƹj"Y>Q؂L  XO BiUSm'ˤ84%b#Yr͕gcx^H 詫tg8TI)xt)jBD]] #z~Bk.8U:X4MIa2 ߞ eo5 >[+?X,ԌBAP_Cu|tZPtnG& N2H>|u=5At,DN5^LmhLk $os6mwkvhY&MB5MR&[) =ܙH ,;}@db<hȅ 8B?EG 00[hihqX4BJ;z.4PU3|gjN>ҹ#e[̦ .W!+d6̅ڰM֔]v +гL7|0ʜt9wcHA`@! i̋L >ImvFج!? or%F"NiS7|’Ɍkntt\1*GNa "!l! ^+&"u} Y崹.:,JԌbk"h?HbU]lp&'40󢚴B9&W6UEO@KZeEk(nɽ+#μ­T?V/Rt_lRe"W5y S|bߝf >! K 3cJ=V8^Z !@{-l5ވḭD%})ӲtA\=nY%Avj1ّZ.2uyV#-Dǻ]L JiIM !5r{@K7}" rU0OVoK0ksR:nh;X8^҈}"c g"Xv@f1STk9kTlq˔Q[1Námzq,2=R Kk&vt ` ̐il )90#hC9;"ؐ!Np =ҥ2m/޶YY:ⵙ!8m̛~yu Ҕ̢"C$c4zDeML0$zDk]2 R_bo(Lk}PDzKϝ+_̮0;٭!874rƜn8톢zɒO$xόC`j}ڥ78Sj$ fG85HwKn惓^.r%}u-~+ھc}Wb7 17rdK甽K1Fxʘ^6UA"Bw*x8K([$gSq L{8q]mU~kr5TK`U}\ 4"XR7HP*^` x4ϫčp.CTe, 2JMeg9"yǨl)uo6>v,2(k&xG{r:إ)4I N|}$!Q膔`ueˈǩFk?}jyʷ EKn^ s^gюTTe᳄c@ݘ.BO.~ϯ\׼I.A'owqts_qEE}gʷd^uLv~z~z΅E<$$=hF)_=vxAa]M=7^-K6pK5ӥL'yKH8ҿ#DLc2W!B<g l検Q5_S5b.ZQ8>_V2jNW/&E7zun\DxJTeHz=fߐT o/Y\pQ-R,H =2"liijIww#%I4E|&Lev;N\jl2"ghq }B*j#y=8=R%')eƑ|W =;CӁ%4@zSVИǠs-X1:~1yOEf*4E߮]BBK↝FSbZٻ2'|\պlN/or9s}"3mD[2M&^Z>x띿DFa456[tvhmfhBq5xeW}$0y G`S0@Fg'Z@'//;ܷ$%esj:hZE(ړ= dn,2Ű5:SMv2h3Fz^y=X#1W<K _^M VMS.BCK?[V9.BIN]ICONC.EXE;1baRQ| | |(Ԡ0P 0 PTT>Э3VЭPSU``ݬЬRݢ<ϩT=TVi6`1Pݬݬ1'P1sPЬPР8WР RԠɺS Ԡ$ɾ(PV;TSPPRbԢS RݭЬRݢDR=ZRiݭݭݪ#ZSݣXP~塞Pݣ~~~ݭHݭϔ0Whˏ#RЬRݢ$ݬPݬݭݧ#WSݣP~.Pݣ~~~ݭݭ0V1ЬRݢ,SPSޫPPRbԢS R=Ue ЭVVԠީHP9TdߩN=PSSdPRbe VP R]9PRde VԠީVPdS\ݬЬRݢ85Pe VԠީ\Pd1ը0ߩbݬ`W1Ш0RТ RZR ݢbq.ЬUѵ8 /Ш0SWRѣR$Rݣ9P81lPRRТR2\WШ0TФRТ QТ SФRТШ0RТ\ɉ?<PVV{8Ш0SХ8Rݢ$ݣPШ0RRТ0ЭRݢݥ8R0tQPРRШ0SѢQգL4ҩ`ԠԭRQbaRQ| | |(Ԡ0P 0 PШ0Tդ.ФSyPPRb|S ֣R7 Pݤ8ЭPЭPЭWZPV7Pj74V1(PݬݬP1PݬݬiP1PߨPScЬRݢ$ݬPP Т8S61PURѬR1ЬRݢ$ݬOPPSC:PPR SԢR61lPݬݬ]1P1WPVURѬR1E'PScЬRݢ$ݬPP Т8SF61 PЬRѲ@ "Tݢ8Ϧ5ݬݢ<P1YW?Oɏ9PTTbYTݢ8^5T5OPФW6Yݢ$ݬ-Pݬݢ<rNPРRѢTQUɔ>9PVVS+PPRb|S ֣RZ5NPTVF5^V4`Ԡ|RQbaRQ|| | |(Ԡ0P 0 PUU6ЭNNPTWHXݬЬRݢ@ϑU1MSУRѢV V1P4O`ԠxRQbaRQx| | |(Ԡ0P 0 PUUf5Э~MЭPVWWUF5 U;5U1UMM`~W1PެVfTФ8UѴ< WSUfRRxSP@8P`ϞUSЬSݣ$ݬ5PݬURxRRB8Rbn1hPUUTCPVTa6ORRѬRԬФ$SФ,RSRTRSTPѣ00STRTTݬPݬUVɛ(1PݬݬI8P1PݬݬAEP1PЬRТ8UURϙPTRϷ5Т<ݢ$ݬAPLEЭSc PRɢPRR~HPcɮݭ2PЭRbǿP~Pbɿݭ 5Ԡ ЭԠUԠ TԠ$(Ԡ,0PԠ$(,T0Ԡ48Ԡ<@DЬHԠLPP1(K1nPRb'5Ԡ P JU1PR~11DPݬݬIP1/P5PG1yJSRТЬ$TR (Ш0,0ЬRТ8RТ8PP6R1v?PQOЬRݢ<uT4P_Oݢ@0|0IS0P`014P?0OЬRݢ<ϫ/SѡPtPRb|S ֣R/1ը$ݬNPQhЬRݢP@ݣ~~~@߲@*ЭSPw>k> k>S>x6J~TdPPJx;~dP;xk~dP 6xj~dPIxi~dP3QIPJRAbQQIRo;n;PB`RRY;Pk5R@bPPkRjFIPB`RRjPi.3R@bPPi=s=i=k=U=PU,eEHelQePR``bPRQU4 ePTTԣݬr Ԡ ԠGPrTR`|R ֢PQVf4RФT>aԣЬRR֣$ݢ8R+PRף$RWԠ bPfiԠ DŽRԠǼ Pf46>Pf<<<;3R,;PТ RRTPRTTP~ߣPЮ@3QPR`bPRQЮD=ԣެVfTT ݋PQaЬ U|;l;<3PР$03RQ$QPG*Rb8b'3bFb0bЮ<GЮ88Ю42Ю0FЮ,0Ю(FЮ$n8Ю kЮjЮiЮ:Ю:Ю :Ю:Ю:դ4QС4PР Rh С4hR4P ^UPSSdhPУݬ[P難PRbdԠ DYԠG P hSPRdϙPRRVhVPSnjRRhvBjЬP|^5VЬRݢ82PTݢ<%PUݢ$ݬPRPSԣ MTԣO $U(ԣ,S04Ь8渚PR b|PTRSTW;TT-A(8P,^aWЬPР8Р<[Р@ ЮR8P@7Rb5RRXբ P5PР5ЬRݢ,Phݢ,-PRم`ԠR PЬRݢ,Pݢ,-PR`ԠR P ߭ݫˏPZխ}2[τЭR_`ԠR PѮSC߭ЮRݢˏPխ >21ЬRݢ,P1Ь1ѮS1ЬRV<ޮYxV~ԄPUծ3SV-PxSQAeTxSP@RbPР0dAQbPР$aSSVUTT*PSSRS|`ԠR PnSRc`ԠR PTn[[ЬRݢ,PݮݮX#P[/PZ ݮݮ8ЬݮݨhE]PRR!UeݨhwE+{58Pe-+PТR\5ЬRТ + ?YP1gqPTTe*PФPPSc Ԡ zЮԠDŽ P TR`|R ֢PSIRbԠ ǒЮԠǡ Pbv*F*|49Pb.*PT,P_Ԡ ǤЮԠDZ Pe6Ԡ dzPݮݮiPݮmѮS1Pխ1խWЭR`ԠR PRЮS SԠǺR Ԡ$Ǿ(P%1Pծݮݮ1ЮRЮSw RԠǺS Ԡ$Ǿ(P1$P@I3RbSǾݮӘq.nS=ЬRݢ$ݬPݬݮ ݣ#ݣÜP~PTݣ~~~TTЮݨ ݨ0ݨh~PRRݨhݨ ݨP(T2P(PТR12X&0P^eWЬRТ8[Т eb Y ebq e]RbXXz ebØ ebð eb eb eb eb9 ebW ebn e^SY7V`PZ`n,|[ЬP`c`9nuˏWQС PPRPPRRXС0Ut f2\TdW1v RnZw idnZÒ fdXå idñ fdø RˏUP#Rû i[R f[ RU#R i[R f[ Rb i[ i|[Rb fbX fbˏUP  fK[U@& f:[1nZ> fdt fd fdÐ fdÞ fdö fZRbnZù fb fb fbPР$PѰ<  fb fZRb fb6 fb\ fbW ˏUP y fb PÔ fbWUí fZZ fKZ f?ZRb[ fb fbWX1 fb1PB fb1[WX[Pՠ WX U UPX] fbs UUu fYTdWXRRÆ fdõ fdRUXþ fdX:X fYRbfbW*fb`fbWlfbWÙfNY[ùf@YRbfbfb$fbKfb&nZtfXRbèfbfbfX[ZЬP X^ٚTXWЬU1ХPа Rb1W QRQQR1;բhhݢ$XScgcݢgcgcݢݢgc5gcee4ЬScUP`VVU;WRb`gbVUbgbwgb }gbЬRUČgeWScVUħgcgcVUgc \gc gc"gc;gWP|^IU^VAfVTdRbݬCfdUfdrfdŅfdŔfdŰfdŽfdfdЬRRSPSSfd fd fdRެ TRdR4f=VRRdSެRSbPSBfVSSbլݬRfUլݬofUŊU^TVXKZPV]Y[լ1?UWPмPP480\   ,DP\$1.?P1ЬRТUđfgЬSSݢ ]ĕfgĦfgSݢ AĪfgSUϫĽfg1Piݬݬ 1zPݬݬ% 1jPЬPа Rbfg1OPjQPRQQPՠhhݠݠfg1ЬPР RբhhР Pݠݠfg1PЬPՠ1ՠhhݠݠfg1PЬRТSfgݬݢ <ѣ1aѣ11ѣ1z1ѣ 1hfg+fgݬЬRݢ /fg18ѣ nݣUfgjfgЬUUЬRݢ ϛݣUSPnfg|fgUݢ sĉfgUݢ `čfg1đfgĦfgݬЬRݢ 3ݣ Īfg1fgfgݬЬRݢ fg1`fgգ fgU%f^ VMS.BCK?[V9.BIN]ICONC.EXE;1{gݣݣfX5PUfgfgݬЬRݢ ϜUfg1P1k-fg<fgZfg|fgėfgĴfgfgfg1kfg(fgCfgefgĀfgĝfgfgfg1Eݬ@19fg1,fgݬЬRݢ @fgݬݢϘ1fgݬݬ!fg1#fg1)fg1/f'QݬЬRݢ <3f QݢσݢЬRݢP`XfgĎfgݬݢ ĒfgUЬRբ 2ĦfPݢ PPݢ fR3ķfPЬPՠݠĻfpPЬPР1^勒STЬQա1СPPYu P?PPs1ЬPР PݠdOjPЬPݠ dORPЬR=dOPEdOЬPݠ dsOЬPݠ d\OЬPEO ^SUXXXRxRRެWgPB Rb1nЧV OTXXPxPP@ QaPP<\|1'P?PXXQQxQQgPA P`ed1ݬXXQQxQQgPA P` 1XXQQxQQgPA P`ed1լ ed1Ped1ЬR=ed PEedXXQQxQQgPA P`%ed`/edЬR =ed PEedXXQQxQQgPA P`2edݬXXQQxQQgPA P`xXXXPxPP@ P`1^Rլ=!ME mM^ﱏS"WUgP,;X`fˏVgPՠ 4V0լ+NeMRbTebiebkebÂeLÑeLìeLRbЬT =eb EeböeLRbebЬT =eb EebekLTd eedЬR =ed Eede/LRbebЬT =eb Eeb eKeKRbլ -eb P;ebQeKլ qeKÖeKRbîeb÷ebЬT =eb EebegKRbgPՠ  ebTVլ eb@eb5ebլeb P'ebX/eJ<eJWeJgPՠ Vլ feJP ^T6WZ@Y X[VlfvJScݬЬRR4{fcIЬRĴfcRfcfc fcfJ)f J~fJЬRТ S1IUĖfecRhPRP *feUiPRP 3feAjPRP >fe-kPPRPPRբggݢݢIfeĢfeݬݣόУ S1oīݦMI^STôd-IRbլdbdb dbdH)dH$^1UjX{ZH[]WԮԮЬRТ S*ѳУRc ֮Pѳ cn֮У S| ծѮ  Ѯ ЮެоRТ TԢ T1VФ YЦ SдPP T$1P?PѮ 1S1ѳ 1PУ S1ѳ }PѮ  ФRѲ d1ScУP` ФRѰ OУ SIУQaФPѱ 5S.УP` ФRѠ У SУQaФPѡ ֮S֮оRТ T  УTYT1ԮЬSr2gGRbݬSAgbЬSŴgbSgbgb PgbgF)gFծ0ծ1xDgFݬݬdHgFPѮ1Ѯ Ѯ>ծKg\FP_gKFݬݬjg3FPծ%mgFݬݬqgFѮ 1ݬЬRТ Rݢծ/Ѯ )tgEݬݬϕŃgEѮ1SņgEծŎgE PݬݬMЬRТ RbTТVf ŗg\EPŜgKETSkRSR*g3EijRSR3gEQRSR>gD5 }RPSRRSգhhݣݣIgDšgDTdf  ŧgdݬVЬSУ Rբ żgdݬУ RТ RݢϝѮ 17gdgdѮ1Ѯ1g9Dծg'D ݬݬg DTdnSkRSR*gd_PjRSR 3gdIRSR >gd1 ERPSRRSգhhݣݣIgdgCݬЬRТ RݢϜggCPgWCծgECPݬݬ&g(CЬRТ V1CTVS1+gdcRkPRP *gd]jPRP 3gdIPRP >gd1 APPRPPRբhhݢݢIgd7gdУS1r:gdݬݦϒЦ V1MѮ AgNBQgABlg4BP^uSTЬRբ ݢόudAPݢ xdAբ ݬݢϘЬRբ'?բ |dAdAբ ÒdAЬPݠÕݤA|^ŃTUVЬSQУPа RbėfCAP QPRQQPՠeeݠğfAPccP`߼Ħݦ@^!SbTЬPѠՠݠíd@ЬPѠ ÿd@мPP+s/1=B?Pdc@1%ЬR=dM@PEd;@QЬP, ~d@1PЬR=d@PEd?ЬPݠ d?1ЬR=d?PEd?ЬPݠ d?fЬPݠ d?OPݬЬPݠ ЬPՠ+d>d>P(d>P<^ SFUGTЬR PRP*d>2PRP3dw>P^PRP>d[>P QPRQQQPՠeeݠI>^aRݬݬ ݬݬUݬ=ݬ$ݬ ݬݬݬݬ ݬP P~mݬ = ^9Y^[ЬRТ U1bX߲ZPХW W ЬRk1hW1aЧVե PfKж TiRTRݬݥhPS ݬThPSХУRSХУRSק,1^Pf1զ1ե oק, ЦR֢,Ц ЦЦЦЦ S1УRв TiRTRݬݥhPR PݬThPRݥ RcjP У S1Pզ SЦ Q$PСRв PaPiRaRPRSС QSNק, ЦR֢,ЦЦ T1PФRв SiRSRݥ ݬShPdjP Ф TUPWOЧ(SIPգ.n"1&?PX(eϣeR9SJ RԠԠS Ԡ$(P樂PPR eԢARXԢ$g(RfeRjSї RԠԠS Ԡ$(P+FPRԢ oeԢy RXCԢ,|0RXeϗPXăeχeRĕS. RԠԠS Ԡ$(PPЬRݢęe6PR eԢıRXϚԢ$(,e0Ԣ48R'Pj  $YRB ScVB RbPP`81P?PXeϓeRVS< RԠԠS Ԡ$(PX8eKeRVS RԠԠS Ԡ$(PNXPeeRVSﬕ RԠԠS Ԡ$(PXgeϻeRVSd RԠԠS Ԡ$(PムY#ЬRݢ~eeXčeXPYݾw PRԢ ėeԢĠ RXϦԢ,ģ0RЬSݣ ύԢ<Ħ@RݣxԢLĩPR2Ĭjwݪ^i<^1}TUxPRRﵐSce\ТTP\l Ԡ ҜԠ P RFnP\cГԠ 4Pce荒gPcХ\R,^q|VZ?YTUЬR+bPP ?PѢТТR֮%x~mPQծPAQQլ1ʏnWdmX)[ мPP,,,,,h<4,$,L1kPj?PݬϐP1kijPg1Zj1OijPg1?ݬϔݵ Pg1'ݬ|ե iPРH$ݮ$hPRХPݠhPRR~kPRХPݠݮ(*R RPSSgե S1iPУjRSjݥ pRjiPS1P k`Pg1 k`Pg1rЬPРTDGT ݮ hPRХPݠhPRR~kPRХPݠݮ$*R RPDkPRb;PSSЬPݠS D PRg1ЬPРSCG[ݮhPRХPݠhPRR~kPRХPݠݮ *R RPCC PgzЬPРSCGbݮhPRХPݠhPRR~kPRХPݠݮ*R RPCCgPib3>ЬPР1Dծ ݮ^ͥWژTVЬRCbPP )))))55555555)P?PVRXТRRRVﭏPRUV1WмPP ((888888881.?PUUPxPP@ P`ЬQѡUUPPxPP@ Pd`1UUPPxPP@ SxQgPAP`c1PUUPxPP@ P`UUPPxPP@ SЬPРP@ c1UUPxPP@ P`UUPPxPP@ SݤѦPc[UUPxPP@ P`UUPPxPP@ Sݤ٧Pc+UUPxPP@ P`UUPPxPP@ QЬPРaԬЬPРUUV1RŊXP|^wS益UެVfTTKCPRԢ ÔRݬhԢ× RݬSԢ,ñ0RPTfPRԢ T*T1Rݬ Ԣ 1RݬԢ 1P}PT-/RPRԢ RݬϲԢ FP#PRԢ RݬσԢ Ԣ$$fP@ P`(Ԣ,(0RP^uT歹SݬPRУPݠPNb VMS.BCK?[V9.BIN]ICONC.EXE;1RR~PRУPݠݬ*RRl^9TFRբPx~PSQբPxQPd\@\lAcQQSP<^URTբSxTQePAPDc`TT^率TﲔRSբ"PxSQdPAQa޼PC`aSSu^ytTjVЬRТWYXZЬPP662*".P?PX6PX.PZ&P!PYPѬ ѬYѬ_WPLPSԣ 1Sݬ[ԣ= SݬWݬZXϑԣ,A01Ѭf,^W 杻PKPSԣ GԣI ԣ,U0SݬSݬWݬZX1=Rլ RR4PSԣ լ  [`ԣЬPPWK?3'1P?Pe1Pn1Pw1PĀ1PĈ1P韛PRԢ ĒݦPԢĘ R1PkPRԢ ĝݦPԢĤ ROЬRRݞ ĩ:PR ı&PRq ĹPRSݬUԣ$լ  Y ((Uլ PUSݬ ςUUUPxPP@ RbYUUPPxPP@ RbPUUPPxPP@ RbUUUPxPP@ RbUUPPxPP@ RbUUSݬWݬZXUUUPxPP@ RbUUPPxPP@ RbSPP|^pSЬTФVЬUUKڇPRԢ RݬVTφԢ Rݬ yԢ,01`U UJ}PRԢ RݬVT)Ԣ Rݬ Ԣ,01U UJ!PRԢ RݬVT|~Ԣ Rݬ Ԣ,01PUKΆPRԢ RݬVTzԢ  Rݬ mԢ, 01TU U,fqPRԢ RݬVT|~Ԣ Rݬ Ԣ,10RݬVT|~Ԣ<4@1PU UpbPRԢ HRݬVT|~ϧԢQ Rݬ ϚԢ,V0RݬVT|~xԢЬRݢ8.ТPդ xSeRCRbSbS<Ф$Rݢ<.Ф$Rݢ@"ФXTԥ#Tx!SeRCRb ]PxSeRCRbRRxR~P՚˚SХ :TУRSBdУSW!VfTePФPP0PХR֥RˏP\x\SeRCRbSbSPФ RТ PХ\֥\ РPdTVWХT/$TRBRbxTRBSХR֥RcTTߎx֙SeRCRxb~ P﷙PRԢY=WgS(PУRRʏRTУRSBdcSWYԥ$cV1rզ Ц TΦ TTSЦRPSS ТRզ Ц SΦ SSTЦRPTSTS ТRХ$RRTRSPTSS$SRԭxR~)PS$RSRЭTCdS$RSRЭPЦW޽RbQ1ա1СPPXxl P?PP#,С P"Р\QLС \QL  \QLaQ1eRWPЦXV1T׌4 TSХRCVTRBܚRxbSeRCRbfTTԥ(V戴4$VRn# VMS.BCK?[V9.BIN]ICONC.EXE;1xB5RbxVSCRХ(beRCRb(VVvХ(,xLReSBcRbPXУ8RТݦ,$~ϠPϝP 1yPլ ЬRݦ0P ЬRЬ ƌЬ|ЬRТƌТ8RТ8PP6^6r1"?PЬRݢ<xPXԭ|~ݢ@hQP|~ЬRݢ<VX=P|~ЬRݢ<BPX|~ݢ@5P|~ЬRݢ<"|~ݢ@XЬSݦ,$~Peլݦ,$~`PƌSȣXУƌ15Pƌ?ݬPլ ЬRݦ0ϟP ЬRЬ ƌRТX1Pլ ЬRݦ0oP ЬRЬ ЬTФUЦTȀ7jU cSШRCRХRBXMRbUЧ|VǀXЧxSSJRxRRR~RPcxЭȧ|ǀЧ|TЬSУPcxЭħ|ЬTդ<^ǀЧ|SФDRТЧ|SФHRТ^2PTЮTRݢФ RݢTݤ<ώݤФRxRRR~KPTPcxT|ǀЧ|TЬSУЬTЧ@S SzSP{ PQPPRxRSЭRSSSBdRլ jݧ@ݬUUVxHRgTBScBdRbnxeFRBScBdRb PFRЧSBRbY 4FRBRbX ,HRBRbԮծ13 ЬTnS SzSP{ PQPPRxRSЭRSSSBdR1Vծ1[ЮRBT VS SzSP{ PQPPRxRSЭRSSSBdR1լ 1S,RQRP R RP Q{RPQPQSQDЬUCeFRCbCeѭCejS,RQRP R RP QP{RPQPQSQT,RQRP R RP QP{RPQPQTQ1SDcFRDbDcѭDcjT,RQRP R RP QP{RPQPQTQ1S,RQRP R RP QP{RPQPQSQ4ЬUFRCbCeS,RQRP R RP Q{RPQPQSQT,RQRP R RP QP{RPQPQTQ4ЬSFRDbDcT,RQRP R RP Q{RPQPQTQVV1!֮Ѯ1[71[P[RBERb17 [RЧSBcTdYBTdXBRbVUX1ЬTYUS SzSP{ PQPPRxRSЭRSSSBdR1լ tS,RQRP R RP QP{RPQPQSQ1TCdERCbCdѭCdjS,RQRP R RP QP{RPQPQSQ^PS,RQRP R RP QP{RPQPQSQ4ЬTERCbCdS,RQRP R RP Q{RPQPQSQUUX1[[y61Vէ1PЬT VS SzSP{ PQPPRxRSЭRSSSBdR1լ wT,RQRP R RP Q{RPQPQTQ1UDeЧPRFRDbDeѭDejT,RQRP R RP QP{RPQPQTQbPT,RQRP R RP QP{RPQPQTQ8ЬUЧPRFRDbDeT,RQRP R RP Q{RPQPQTQVV1Xէ1PЬTXS SzSP{ PQPPRxRSЭRSSSBdR1լ wT,RQRP R RP Q{RPQPQTQ1UDeЧXRHRDbDeѭDejT,RQRP R RP QP{RPQPQTQbPT,RQRP R RP QP{RPQPQTQ8ЬUЧXRHRDbDeT,RQRP R RP Q{RPQPQTQXX1Vէ$1&PЬT VS SzSP{ PQPPRxRSЭRSSSBdR1լ {T,RQRP R RP Q{RPQPQTQ1UDeVSЧXRCRDbDeѭDejT,RQRP R RP Q{RPQPQTQjPT,RQRP R RP QP{RPQPQTQ@ЬUVSЧXRCRDbDeT,RQRP R RP QP{RPQPQTQVV$1^Uެ[kRТZ|Vŀ1VZ1kX YˏFRjS0RQRP R RP QP{RPQPQSQ@ЩT!&_W^]|2LD(e!U_?p{}}Qۜ˚z=HOs,0 <-gIuE[> Ȇ"{6]RT/a DV@gF}j_+5AF_e #M3"+tI\(ѩ%=Tާb[+Qu5!\8/㏓g:36,P*{< vϏWHlw> }f!Ԗ M 8_EN6{On[ ^yحs u! )iQU/Tp U*Sw0"m12JPShhNڳ"ȗ᜽ZٝJ3.;peXjB‚IE:Jp\ RP'[nSl v.w,p@( ^VyǖR;L3.~.#C S1QHq?CQvf>kK=M PlScq$%Q Dߗ'>fLgRSܝV&iHl22 FEoB* Lc.9'cţxs(L*`L RXףkdzUY@\u>3?\(kaLRQ+wEq2n$DUkfWؗ`oez/Vz,U@1hHM@| o,5!zАk <ꕪJQ\*n~xX:W]WA_q+y>@ȰS]/Kܞeuo_!AhRV{~%Sf|tՀێ;oQA4>߳zU+hIOpWtan$&F3/DxX  Nܒ+4AeK7H/. 6zS9d!`ZI%x 8}޴RLUrȍo`yc%٪@bmbMX Ts2fZ=u ~dN (LA?(־D^gX_bc`5Ե<{ZE*cePgkDES{KC*:Gv*DϑzkJ8+[$f;͇(Gqc_A7nx\"1>@ Ӵai$ړxGP6*5m6rMad:j|/8r(@ܙh8@ 50p4a*FV5O0Fni(G& Cgۦo0QY2^OThO 'Yc}}-!P jS"u6Š9u :, b_&uo A+:cEaI`Q6G mUMUwRC ٬C85fހڼN&^GqpcR*tIڕv?9[8_=i.JdActS?q綽%øhwJ SԑmN4#b6ܩ}w/:̣q6q9@_<^t %rQHOac=$Y+ ]u$<7%WFKaQ킙]סHv AG5qsՂP~4ג^kyE[ep5Oz,SL˶,">9@@yA|-F&xa }Ձ{] AxF l^lhyVmB='gĶ( f=LR@iFhJ]6C̚ YԼUCXfp&2owBn _hپ*zs>8Ɍ!D[HIsfG E$왠pv YLH;xX|3B]KOD܇F>~_PכB3(Mts|Z8LMeNe: W%k$/2g yG|쇘/F\0ؠm.LK<قȫ}7 z[Kg{|U)Lw'뒓`ēKO;QK\]lZ}y}+)G]Q:USPC m`wM[y.+]0,a5@p9+U.Ʊ'ƜkrF<A180IJӻRi˶V-T0/9!$/+#|p_''6͒b3E)anX2hQѵy8k4Gx\V]vZxMIE!3JzJhZឡqCE[er"=|9uߡ뾠9ګi/Ӫ6-LkMr+.a٤{V*(/E F%i7K5;_Z>;8ő-J!Ofig?gX[2ʾ),xi`}Ws%# pTM'®9?ٕ9ae tZ0~h'M7"=;o!p6m mܒ.[+M:n DNX^mH@CD vv_̗Ѧh0~M{ ^䑩=`*TfHYv]uNUCvoB/6/y i7`bz>՟JkY{r@1{K4:8u>lԴDyU=V` )4:B1 ~7lxƚof ?ȼ/5>Q }\d`H)Q#qߗ1><P5ɶtr?kdPGҙг  J=hd ڏ^9ɈIlzCk1Sh98@.KvD-؄Zbuw5ձe2"T*6KZ=ޔ̟sӘ~m'd,71'+#`0:j {~񔍯Eok ?w$.BK8[7LByԊBv\b-GU;Mic:fFԭR0MdJ 4o5-s#?Pr?溎㽨ɮ-SS)gx(/дn}T|RL#5Ff4C2~ > Z# &A>b~n@+~*i.8A>ereJ[lA?h񮠫#EuVF!n,0: vd}pC_篍|QSyy$5 ۫Paҥ@5؋={P(="#z[^_j X$԰?jYaO$ݠ H"VZɒ*öo4Vҁa+Dlݠo}ZJ Kl~g`ܷ4:Vc2KC?}oI;r;Zb #wcf= 3gPѽr8w${?[{[EqSDAB|&rۓY*n/&zg[b11\16[8~Hs[lsgVCnn ޵>LEIT^5`TL<ʮd'damW_)eW1 VjOQEZ5rcЪF1w7KH-YKXe@ 9IutAazOwϯ-wz8^=S9?C g,:+C>aXT6rFY V+|((i/O)2Qc(j!![|dז_!D9oM4eYPpGC,{ipt ]l$ ]' Hiu'k.ݣDխ ЬRݢ3PPЬRТPЬRˏRPRPЬRݢP ݢPЬPРRbPݢAТRbR2lЬRݢP9 ݏ^#ZVπP[xPW[ЬRݢϓWݢωn-1 nRЦSBcXhBXh BRbUTծ 1T~ݫPkS,RQRP R RP Q{RPQPQSQDDQCaYCCaDRYCbjS,RQRP R RP QP{RPQPQSQTT 1ynn,1?Xզ1 X~ݫ#PsT,RQRP R RP Q{RPQPQTQLЦPRHUDeDDeЦPRHRѮDbjT,RQRP R RP Q{RPQPQTQXX1qUզzPU~ݫϋP_T,RQRP R RP Q{RPQPQTQ8ЦXRERDDbT,RQRP R RP QP{RPQPQTQUUXզ$} X~ݫ PcT,RQRP R RP Q{RPQPQTQ<XSЦXRCRDDbT,RQRP R RP QP{RPQPQTQXX$[RЦhRhWRЦhRh^լмPP} qz?PЬRТRТS"RSbX'Y CXYެWѷYзYTYV VVTV1gUDhDTTVP;PWWЬRݢVެYiRݢݧBԮU*1RB`8Rb1Ѯ06XѹXйX PjX R:SBcVf[BVfZBRbUTZ=[T~ݧDP&RXV VVRVЩSDPB`BRRVTTZ֮Ѯ)1OWR&R?PWWЬRݢZТZZyx4RSBcTdYBRbXVX1EPYV~ݧϘP5N4RFbSUգ #TDRUR~ݤ;UU VVXPZUE7RxbRSBcTdYBRbV ZJRbXE6Rb Ѽ1SV(YS~ݧPXS~ЬRݢϴSSVWRRPݬЬRݢ5ݬݢ*PVPXVЬRݢ XݢrZTZU UUTUDSSDDTTUެYѹZйZTZW WWTWUDDTTWVRER<XR3R*KPXЬRТTxTSRCRbRWS BcBcWxTRB~RbW~ЬRݢ}$TRB!ScnB!R bRBST3 j PZZn1Ь[ S;RQRP R RP QP{RPQPQSQ0CS RQRP R RP QP{RPQPQSQXZRxRRBRbZTծF ZYЮRIVP PPfRGUDe DDefRGRѮ DbTTPZZn17XRRݬЬRݢ ^QTмPP =oo1PV?PЬRݢPRSRSRSSPЬRݢPSݢSRRPRʏRPSʏSSRP|~ЬRТPݠݢRЬRТPݠݢ8ЬRТPݠݢfi:ݏA^-URѬbPSЬRB ϕ PWύ P[υ PV} PYЬRR R\ݥDݩ٪ݥ@ݦΪݥHݦêݥLݦϸݥ@ݫϭݥDݫϢݥHݫϗݥLݫό1~R=0 R^ݥ@ݩkݥDݦ`ݥHݦUݥLݦJݥ@ݫ?ݥDݫ4ݥHݫ)ݥLݫ1PR[ݥ@ݦݥDݦݥHݦݥLݦݥ@ݫةݥDݫͩݥHݫ©ݥLݫϷ1R.GݥLݩϠݥ@ݦϕݥDݦϊݥHݦݥHݫtݥLݫi1[PRGݥ@ݦPݥDݦEݥHݦ:ݥLݦ/ݥHݫ$ݥLݫ1 PRe ;ݥHݩݥ@ݦݥDݦݥLݦߨݥHݫԨ1RGݥHݩϼݥ@ݦϱݥDݦϦݥLݦϛ"1ݥHݫυxPR/ݥHݩlݥ@ݦaݥDݦVݥHݫK>R4ݥHݩ4ݥ@ݦ)ݥDݦ! ݥHݫ S,RQRP R RP Q{RPQPQSQ0CCS,RQRP R RP QP{RPQPQSQT,RQRP R RP QP{RPQPQTQ0DDT,RQRP R RP QP{RPQPQTQլ ݥ<ݧLݥ<ݫAZR0SQSP S SP Q{SPQPQRQMЧXЫT0SQSP S SP Q{SPQPQB PPBhPZBdPPB PZRRQЬR1bS0RQRP R RP QP{RPQPQSQHC PPCPC PPCPS0RQRP R RP Q{RPQPQSQլ ݥ<ݮl PWRХhRh[RХhRhVRХhRhYRХhRhZP ^PѬ`PQЬP@SݬS#PRPRݬSPRRP^ VZЬUޭޭnU Ц,Ц0xURBScfPBRbЭTT{XThwP_Zլ WhUTSQSP R RP QP{RPQPQWYQSP RRRPRQPQ{RPPQxQYYYQQGeTTZP^ TЬQޭޭnQФ,Ф0PxQRBScdPBRbRխPRݬϪPPRRЭSS0SݬφPPSS0PP^) R|W|UQЬP@SЬP@TݢHS=PXݢLS,PVݢ@SPݢDS PXVݢHTPWݢLTPUݢ@TPݢDTPWUX W Լ ЬP`V U`PVW`XU`^9SެRb У,У0 ЬTxbQAP`dcPAPd ^YЬRТRТSRSbɈTCTZPS0RQRP R RP Q{RPQPQSQ4CdPЮR`CS0RQRP R RP Q{RPQPQSQЮRТWެоRТnX[n1VXPXxPP@P`UXPXxPP@P`STRUPBcWlPBcZTRRUTNxXPоR@Sc޼RbЬ R2bTբ Zcբ c բ c bX[[n1Y|Rթ0PRWPS PRR0ЮRЩhRhSXPPP<^QUѬѬgT,RQRP R RP Q{RPQPTQ4SȏDT,RQRP R RP Q{RPQPTQЬRТRȥ8DbЬTޭޭnTХ,Х0PxTSCRbeRCRbѭЭSSRSݢςSS^]UWx?%ReSBcTd BRb[PXݨݬХXY_PZݥ@ݨMP0ݥDݨ>P!ݥHݨ/PݥLݨ P1VŀnS0RQRP R RP QP{RPQPQSQ<ЬTХ|PFRCbCS0RQRP R RP QP{RPQPQSQVVŀWZYݥ\Yݥ@ݨςPݥDݨsPS[ S~ݨ/SS[ݮ ݨIP^VScREPC8YPXЬPݠݠ PRϱȢ#WZݥXϋХXPХd`PdbRSVT[1 T~ݨP1YϝPXc#RDbSˏRR1RPP"~~~Z P惘?PP@]ݬݣ ٰУ RȢ0WGPЬRݢݢ Rݣ У RȢ#W&Pݬݣ 9SSSRRRRWZݥXϚХXRХdbRdTT[1 "ݨP ݥ\Y`YRХdbRdZXЬRݢWϿXRХhRh^eSУh\\T gPTУ4dݣ4PYЬhR4\Q\P \ \P Q{\PQPQRQ,BR4\Q\P \ \P QP{\PQPQRQTP^QЬPСhPh ^ SzP{ PQPPRxRRPRRRCP^RТxSST,\x\\\~fPTPcxTP^QQЬPСx`Px^ "[.VWZnRզ,PRݬNPWZRR,U1Y$UP@eRbpxUPfS@cQaX@ScTRTTXR~ݬP=Uk3y # l!QЦPAP`PBiPW WPWZRRTUUO1rX.WXP@=#Rb< XRЦPB`QaUBRbTSTPUS~ݬTPWZSSTXXSզ P S~ݬ#PWZSSRզ$PR~ݬPW#$ VMS.BCK?[V9.BIN]ICONC.EXE;1'4RnZRRTզ$F T~ݬP-I PР RRSRSTSWPWTnZTT$ЬS"Zn RnTDPccWPP ^%XԼ ԼϥPUS,RQRP R RP Q{RPQPQSQ0ЬVCfCS,RQRP R RP Q{RPQPQSQxRBRbYЬRТT1PdPY~ݥPqdRХVYSQSP R RP Q{RPQPQWZQSP RRRPRQPQ{RPPQxQZZZRRGfЬRbФbּ Ф T1r޼RݥZPbURШhRh^[ЬRТ8ТTPbi޼Rݬ$TPbOP޼R ݬTPb3P޼RݬSPbP޼RݬݬSPbլ1eЬPP8881LPb?PxTQiPARb^Pb1$P1VlUgXbxTQiRAbP`S1iPAP`SWPP"""?PSE^PS޼RSݬ]Pb1ѭ6լxTQiPAP`ЬR1ݬݬ ݬݬYPbsPլCЬPP''Pj?PxTPiR@bP`xTQiPAP` xTTiRDbP`ЬRݬݬ ݬݬTPbXPP< ^QU&Tլ1GмPP D000h00$1?PЬRѢ1xReSBcRb1PЬRѢ1xSeRCRb1֤ЬSѣ+УRb"բxPeR@bRbeR@Rb1PRB1B#RRpBh֤ ЬSѣ+УRb"բxPeR@bRbeR@Rb/PRB$BRRB ЬRݢϬЬRТ1^ЬRѢ1ТRb(բ#xSRCbRbRCRbPRެTdSBSB;RR dPBP^P^MTЬ Rb|R߯ЬSSPբ 1բ,Т Ԣբ bPլ xPP@P` Ь P`dՠd ^ݬЬRRhխSPSխ0ݭAPSТPРQPQ`xQQPA`P`խ ݭ PSSP<^]UЬTTЬ SSЬPݠЬRݢkdPPPPcPePcTPTЬScԼݬ|~RT*P$ecPѢ`xPQ@aP`ݬ |~ЬRRTP%ePѢ`xPQ@aP`|^UzP{PQPPVЬTǏS"ݬ ݏTfPUTSVݬ VT^fPUUPUP^T W VUS2eeP޼R@bccRb- RcP-ePcRcbff:fݬ ePR&efߤߤfe?PRb:gOeKPcRbRg6eѬe#ޤcfߤ-ߤee?PeP޼R@bgޤIcefP ^1S߭&e߭ePRЬPl`ТQAТ ТQAcТТb,^SRn߭d߭dlnTРQnUAnVР РQnWAbnXРnYРnZ`ݭݭݭݭݭݭÏ d^5R dЭLPdâL\n\S `PSgCSPdzEPjPPθ^ЬZԮЬ Ь[ZXЮWЮ Y[VYj(`WWVV XcZcPPcZRPRRЬPլЬTޮUd Td dV+dSS PЮReSbTdSS 蔾TVV1ЬZЬ Ь[ZXЮWЮY[VYz(`WWVVXbZbPPb$ V VMS.BCK?[V9.BIN]ICONC.EXE;1CZRPRRЬPЮT ޮ Ud  PTd dV+dSS PЮ R eSbTdSS 蔾 TVV1PP^  ֬ PQQ ЬP֬Q`֬QQ 蔼ЬP^-ZЬXЬWЬ YЬVYO(`WWVVݭݭݭߪXaߪݬaPPaЬPPP^T~SЬUUVUEaUPP PRRU4b.  R Pb~ߤ`PRV RRcìVUUݬ`WgEcRURRV UUVgE; `PR.R RUPP RUUR gE UP|^Vݬ (`լЬլЬݭݭݭߦB`P^Y`TЬP֬`P֬ЬP֬`SЬP֬`RSPPP@d S~_PSRPPP@d R~~_PRSRP<^ЬQЬRЬ PQUPPUP^ЬQЬ PQTP SSPTP<^TRբ Ԣb0dЬUU>_ScbߤUcߤ Ucߤ5ߤ(Ucߤ_Uc^ERb ZiT ݏ$ZˏRP@Z'P ZQ0RPPQZݣkPRʏP@YZMT|UTX YiP` YiUݣcj YiT ݏ$ˏRP@Y!R ֣ݣkPRʏP@pYR:MRƳTRX PYiP` >YiTݣcj *YiR ݏ$nPXW$WRBbRbX PtWPRUXTRƈ XiƐ XiTUݣcƚ XiR ݏ$W$WRBRbX PWJ$ݣkPRʏP@hX$PR ֣ݣkPRʏP@DXRT13x~-<P(2ݣWPRˏRTDW%R ֣ݣWPRʏP@WRC1|}W[~WYWWݣkPRʏP@WJTUTX eWi ` VWiUݣcj BWiT ݏ ZˏRP@#W'P ZQ0RPPQZݣkPRʏP@VZMTUTX ViP` ViUݣcj ViT ݏ ˏRP@V!R ֣ݣkPRʏP@tVR:MR7TRX TViP` BViTݣcj .ViR ݏ rPXWWRBRbXPtWPRDUXTRƈ UiƐ UiTUݣcƚ UiR ݏ WWRBbRbXPWJ(ݣkPRʏP@lU$PR ֣ݣkPRʏP@HURC1]\0P|^奄RUU+\ݬTPTSeVlTSˆ eTP eTTVݬlš eTS ݏTP^)TTWTSRݢITP\ʏP@c#P\ ֢ݢ&TP\ʏP@c\PUrVUX gSP` gSVݢbj gSU ݏS\$Pˏ\P@cF\=Ѣ oТQ֢\aݢ{SP\ʏP@c \\ ֢ 1^XrSZUPTPG~d7PScԣCTԣ ݥRPRˏRTDj$PR ֥ݥRPRˏRTDjˏRVFjTFj RPݣȁ 2ݥRˏPTDjRDj PPݣȔ1ݥZRPRˏRTDj$PR ֥ݥ6RPRˏRTDjˏRTDjݣȧy1YˏRTDj(P YP0RTTPYݥQPRˏRTDjYYԣxY~6PR(ݣ1ݥQPRTY10W}QVR,R) ݣgDR,|R)wRPPd9MMMMMMMMMMMMMMMM1A%?PD! Dȏ@D ݣgݥfPRR,R)R, ݥfPRTTY1MR)ݣ$0ݥPPRˏRTDj$PR ֥ݥPPRˏRTDjR{ݣ:/ݥSPPRԣR} 1ˏRTDjݣV/VˏRTDj& VP0RTTPVݥOPRˏRTDjVR,ݣr=/ݥOPRR*ݥOPRTˏRTDjT4VT(P VP0RTTPVݥzOPRˏRTDjVݣȎ.R+ݥAOPRR}ݣȪ.ϰP#ݥOPRˏRTDj$PR ֥ݥNPRˏRTDjRPPf3;;;;;;;;;;;;;+P?P'Pԣ'Pݣ-SP^9YNZSݣ`NPRˏRTDj!R ֣ݣ>NPRʏP@jR" %-ݣNPRR"~R yRpMTPR\'ѣ УQ֣RaPRѣ УQ֣RaݣdPRR"R  RR" ,ЬR MP+ݣ_MPRˏRTDj$PR ֣ݣ:MPRʏP@jWˏRTDj% WQ0RPPQWݣMPRʏP@jЬTW/WԤ3P W~!1P3VWxެXhUG#PT VP@3RTbХ3R@RbT1)PT +d* VPhRТ3R@RTb VPХ3R@RIPbVVWݣMLPRˏRTDj"R ֣ݣ*LPRʏP@jWˏRTDj% WQ0RPPQWݣKPRʏP@jЬTW7WԤ;PxW~0P;VWDT=PU )*xVP@;RUbФ;R@RmPbVVWЬRSP?ݣeKPRˏRTDj"R ֣ݣBKPRʏP@jR$ @)*^մZBKWWSݣJP\ˏ\RBg!\ ֣ݣJP\ʏP@g\!1?\PP!8888 P?PPa1Pa4L            1V?PݣRJPb Pc<1QNQ%T i.T`PXPϹP1PXU%T1.T`PXPϹPϬP ϣPϚP1<P\(1)vt$ݣIP\ˏ\RBg$P\ ֣ݣbIP\ʏP@g\tVVݣ8IP\ˏ\RBg!\ ֣ݣIP\ʏP@gUˏ\RBg% UQ0\PPQUݣHP\ʏP@gTURRxRRR~-T`PXVUTUPxT\LRPbTT\\UxT\LRbPb1 ݣjHPa*"12?P~{M#ݣHP\ˏ\RBg$P\ ֣ݣGP\ʏP@g\ݣGP\ˏ\RBg"\ ֣ݣGP\ʏP@g\PPd4LLLL,LLLL<LLLLD*Pn?P[(P[ P[P[PʁO&ݣ=GP\ Pݣ'GP\ˏ\RBg$P\ ֣ݣGP\ʏP@g\PPf04444444444444(?PnPn ʬ%ݣFP\ˏ\RBg"\ ֣ݣzFP\ʏP@gYˏ\RBg% YQ0\PPQYݣFFP\ʏP@gݣ-FP\ˏ\RBg"\ ֣ݣ FP\ʏP@gVˏ\RBg% VQ0\PPQVݣEP\ʏP@gݣEP\ˏ\RBg"\ ֣ݣEP\ʏP@gUˏ\RBg% UQ0\PPQUݣfEP\ʏP@gUURTRxRRR~)T`PXԨ[ ЭnYVU TUUURUR1 T\Tx\\LRPbU\U\1k PݣDPv ʼ#ݣDP1 P2,ZP T% VMS.BCK?[V9.BIN]ICONC.EXE;1lR (T`PXPl P1  T(T`PXPD P?P 1K#1U T m(T`PXvPݣ DP\ˏ\RBg!\ ֣ݣCP\ʏP@g\"\'\ϖݣCXP\Mˏ\RBg@Pѣ sУQ֣\aݣCP\\ ˏ\P@gŸ TPݣdP\ʏP@g P\ ֣ݣdP\ʏP@gRˏ\P@g! RQ0\PPQRݣdP\ʏP@gU\Ux\\L\RlU\Ux\\L\;PlV\V\1hxU\LRPb1ݣ.>Pt ʭ T T"T`PXPP1zʺ1iX1Uݣ=RbPc-ݣbPaݣbPsݣbPe ݣr=P1 P211jP?PVݣN=P\ˏ\RBg#P\ ֣ݣ*=P\ʏP@gTˏ\RBg% TQ0\PPQTݣ<P\ʏP@gTRURxRRR~!U`PXVTXϔ1BϗPVݣ<P\ˏ\RBg#P\ ֣ݣ<P\ʏP@gTˏ\RBg% TQ0\PPQTݣN<P\ʏP@gTRURxRRR~n U`PXVTXTRRxRRBRPb1r T$ T`PXϱPTPݣ;P&  T T`PXuPlPPXPP<^%T;S識RUݢJ;P\ʏP@c$P\ ֢ݢ&;P\ʏP@c\fU\_ "ݢ:PrUPP_ ;ݢ:PsUPP_ Tݢ:PeUPP_ mjݢX:PtUPP_P  Ć5UP^Q:VfSެnоRެ[kYZk19WXݣgPRʏP@f PR ֣ݣgPRʏP@fTˏRP@f! TQ0RPPQTݣgPRʏP@fYRYxRRBRTbxT~PUYPYxPP@PU`RTϧPBeRRTYRYxRRBR PbZZk14P|^ѢV>9TSRݢ8P\ʏP@d"\ ֢ݢ8P\ʏP@dˏ\P@dNSS`PUSˏ\P@d& SQ0\PPQSݢ8P\ʏP@dS1\[ Ɵ^S S`PUݢ:8P\ʏP@d$P\ ֢ݢ8P\ʏP@dSˏ\P@d% SQ0\PPQSݢ7P\ʏP@dSݢ7P\ʏP@d#P\ ֢ݢ7P\ʏP@dSˏ\P@d% SQ0\PPQSݢn7P\ʏP@dSUPP^ Wv7VRݢ07P\ˏ\SCf!\ ֢ݢ7P\ʏP@f\*1\PP*Xh4 P?PPl1Pl $X1sP~?PPUPP16PݢF6Pe"""1"?Pݢ6Pw _ PXݢ5P\ˏ\SCf#P\ ֢ݢ5P\ʏP@fTˏ\SCf% TQ0\PPQTݢ5P\ʏP@fT~PUXTST\T\1LS\Sx\\L\PlT\T\1*Pݢ:5Pl ,U1P1!PUϖP1PPU P1PPUvP1oPPU!Pݢg4P\ˏ\SCf$P\ ֢ݢB4P\ʏP@f\C^\fS1ݢ4P\Tˏ\SCf% TQ0\PPQTݢ3P\ʏP@fD(1P 1 PUUPLP~Pݢ3P+ ! PUP P>PݢN3P* -DQ PUPPUP^͜W:3VOSԭޭYݣ2P\ˏ\RBf#\ ֣ݣ2P\ˏ\RBf\$1p\n1P1_ݣ2Pc1H2PRˏRTDf%PR ֣ݣZ2PRˏR\LfR$1:ݣ82PRRPPcBZv&j1?Pݣ1PRRPPb41?Pϡ Piݣ1PR1@P=9 v PiPTcPݣm1PRˏRTDf#R ֣ݣJ1PRˏR\LfˏRTDf A(UˏRTDf' UP0R\\PUݣ0PRˏR\LfiTU1_1rݣ0Pf)zv ϗ Piݣ0PR16ЭPǁ~ i Piݣl0PR1PLjDžy > PiݣA0PRˏRTDf#R ֣ݣ0PRˏR\LfˏRTDf njUˏRTDf' UP0R\\PUݣ/PRˏR\LfiTU1VǬǩ ώ Piݣ/PRˏRTDf#R ֣ݣn/PRˏR\LfˏRTDf ǯLUˏRTDf' UP0R\\PUݣ/PRˏR\LfiTU1Piݣ.PRRdiTݣ.PRˏRTDfT6UT& UP0R\\PUݣ.PRˏR\LfiTU1*RriTݣn.PR1 c 1ݣO.XhPRˏRTDf RdfPiRdiTݣhPRUˏRTDf(P UP0R\\PUݣ-PRˏR\LfiTU1nRrϬPiPTݣhPR1HPReݣhPt  DPiݣk-PR1ݣZ-PRRPPb4||||||||||||||||||PRP?PPiݣ-PR1P ϲPiݣ,PR1uP  1bϩPiݣ,PRˏRTDf   UˏRTDf& UP0R\\PUݣj,PRˏR\LfiTU1 9Piݣ<,PR1P Piݣ ,PR1P-  1R$1+TR"R'RϳݣdPRR ֣R H  RUѣ УP֣R`ݣdPRU R PݣdPRR R$bPiPT BPiTY1c a iPf = |^VrSѣ УP֣ެTd`ݣ*PRRd1R}*UR\:ѣ УQ֣RaݣePRR Ɠ  ѣ hУQ֣RaݣePRRd RRƴ Y ѣ УQ֣Ra^]*WrSݬ PVmPݣ*PTˏTRBg$PT ֣ݣ)PTʏP@gUˏTRBg% UQ0TPPQUݣ)PTʏP@gRUwPBRRUVPP<^1U)TﳪRݢX)PSˏS\Ld"S ֢ݢ6)PSˏS\LdSPPb/hBhhhhhhhhhhhhhhUB?P P P P |^YV(U۩Rݢ(PTˏTSCe"T ֢ݢ^(PTˏT\LeTPPT"S#########################1P?Pݢ'PSTˏS\Le& TP0S\\PTݢ'PSˏS\LeT炙1D$PPݢ'Pd2::::.:::::::::61CPR?PPPP1) Pݢ:'P\\ 1\PP ff P?PP 1LPc1Pc<<<<<41?Pݢ&Pi1PPP1Pݢ&Pv1&E5 VMS.BCK?[V9.BIN]ICONC.EXE;1ba Pݢ&PnkPݢ}&PvT Pݢf&Pc.6666666666666662P*?P P PPP ^J PQԡЬRP`PR|QP^PxPPP~ Ь^uTR%Sݢ%PQQ1QPP  PR?PP$p1PdePd D(]]]]]]]]4E?P$S1zPS$0eS1lSe#nS1_PSn֢  S1>P^V$Y$T Rݢ$PSʏP@d#PS ֢ݢ$PSʏP@dߕˏSP@d S S ֢PPSݢH$PS֬S' XЬWЬUSƻ i'$ i$UWXݢb i#S ݏ$^VYެXhRR1 b~p#P_PS1TУRdUˏRQAePѠR `PѠRP1SˏWGcSGY3 2 l PS{~"PPS8 7 5YP^ˏR޼QBaPѠ `PѠP^W"V@ ""ݏ"Pެ UPeЬSQ@a@cPPeTRެ UReSBcPPP@fTRRe QRRSAcPP93 Pz&PT ޼PaA`0AP0AT PЬPA`Q<^%"TSRˏSP@dˏRP@dRSQ QPˏRP@dQPRSQQUWЬQЬPSRˏSP@dˏRP@d RSQ#PQPˏRP@dQPRSQQPUP^q!RЬQˏQP@bˏP@bìQPPˏP@bPQP^תּS!T/RլX d P` d ݬݢbj d լ ݏ P^ES TǡRլÈ dl PÐ d[ ݬ ݬݢbÚ dC լ ݏE ^݉RF T_Sլ» d P dݬݬ ݬݣc dլ ݏ^WެV׶ެUеRֵbSS0aS7\0SPնHеRb0?b7:P5P׶еRֵbTxSR0TTRSPնеRb0 b7PˏSPSx1RQն1еTdTTTDg|QwP׶еTֵdPPaPf P(PAPF7PˏPTDg0PxRTPTRQնеTdTTTDgQRPS^ նP׼ЬTdRdbRˏRPC۟P<^ PSP>RbRPЬR׬RRЬP֬`RR\߬߬RPRRUUPxPQʏQUeSTψߦF~ߦEyߦO~ߦHjߦa~ߦQ[ߦd~ߦcLߦz~ߦf=Ƌ~ߦ|-ơ~ƍƳ~ƣ ~Ƶ~~~~϶~ϥP4gݬݬP ^YXێTV UХSգ1ݣݬPfWЬRХPݠݠďfWR+b'R.P P@b @bRĤf(WīfhiPcSգլW=ePѥP#'ݬPW)P/ݬPWWPPSХcW ݬPԣЬ8УRPRP]DwD(DRDERP0Х0,S2P^P^~ݬլݬ~ݬ^=R-P\\b\P\\^ZW7TPФ(RR, RSR(cPФ(YФ0[Y[1iXXRRRBgR X_1YUU[:eSSRRRBgRS_!UU0eRR\\\Lg\R_U,Ф(SSSU~SP ֤(XPU(PV Ф \7P\Pl ФlVФ(Ф, Ф0\ S2RSR,Ф,(2 R(R01PYRY(RSS[1cRR\\P@g\R_S,XP@gSPSlPR# Ф0,XPR"R'PS\lR\Q8P\lPPR(P$PP\\l\QP\lPPRP\QQScSSS01YФ0,XPդ+ФRТS Т(Т ,Т0bФ bR 1PФRݢ P$1Ф$0Ф0,Ф,(Ф(UФR֢eSSRRRBgUeSS\\\LgS$!RRRBg  U~ 1Ф$Rl-i&neb#  U~1QФ$RR(RRP0Ф(,12PФRѢ8z1USݢݢʏS/c+SP P@c @cSʤUʫ|fHФRТ8ФRbݢ Hݢ"RФSdRSRPУRУSRS]DD(DRDRP0Ф0,17P^VWOU<d~P<d@ݬPQQPQ BP<R@TRPRSQT>ݬjPRR ,R#RTݬGPRR  RT <Pd@@<P<@Dgݏ<@SSdT1\^IRЬP Т TPTd ТdЬSSТ(Т, Т0T Q2PQP,Т,(2 P(P0^TڔRݬݬ]DPD(DSDSP0Т0, ^ ZNV;X0YyW$m((0Ч0,ЬRbTTPPSChPRbTTPPP@hT#Rb PRbRR[[TЬQaSSPPRBhPS_SQaSSPPP@hPS_dQQRbUUPPSChPRbUUPPP@hU#Rb PRbRﴯSc1c[%P1ݬPQsjPѣP#bQTRЧPݠݠƏiR+b'RP P@b @bRƤiTƫij[Sc1doS[RЧPݠݠƏiYR+b'R0P P@b @bRƤi*Sƫi<^=T&UoRТPݠݠďeЬS,c(SP P@c @cݬĤeݬīei|^dSURïVЬTТPݠݠÏeVT+d'T-P P@d @dTäe'VëݥP^5U"VЬP`SSRRRBfRS_LPXXTPQaSSRRRBfRS_SQaSSPPP@fPS_dQ PſP(PЬScTTRRRBfPScTTPPP@fT#Sc PScSSW1ToT#jT"T'RЬP`SPR5P`QQS(Q$PQ\P`PRPP`QQSQPRRP֬TT#ЬRRRRBf׬ЬPPPP@f딼W~XK P^﭂V UЬTdRRPPP@ePR_LTWWSTRbQQPPP@ePQ_QRbQQPPP@ePQ_cR P$PЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQP`9P~Wp P^ρT S XUݬVVNPfTPЬQaRRPPP@cQaRRPPP@cR#Qa PQaQP`pPV4P?PičWVRХPݠݠďh R+b'R P P@b @bRĤh Wīh fPP^﵀W UTSSPPP@eǙPSP0PV֬SSPPP@e" VQSPPQ0QV֬SSPPP@eЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQRRPPP@eP R_R"ݬSSψPcǯPSЬQaRRPPP@eQaRRPPP@eR#Qa PQaQP`PФPVSФPݠ ФRSPФPРQРPQP]D D(DRD RP0Ф0,P^ݬ^ݬ^~W V'R8ЬUeSSPPP@fPS_IUXXTUScQQPPP@fPQ_QScQQPPP@fPQ_dSPЬQaSSPPP@fPQaSSPPP@fS#Qa PQaQP`PX~XϰSPS̬S PP|^}SV+RТP' VMS.BCK?[V9.BIN]ICONC.EXE;1Up8"PЬP`i3UPTТPݠݠÏfyT+d'TPP P@d @dTäfJUëf;%CP ^Q}SRТP8XPЬP` Pj8P^}YWCTФRݢ P$PU1ZPФP֠Ф$Pl.i'n e`# PPE1QPeRRPPP@gUeRRPPP@gR$1%PPP@g  1U~PUUVVSURbQQPPP@gPQ_QRbQQPPP@gPQ_cRXXPXfif8|~1ɏVjP X1ɔVjPѬlɚVjP_h XɟYn8լ?ФPРQРPQP]D>D(DRD RP0Ф0,ФPݠ P$PU1Y^!RQQPPP@bP֬QQPPP@bQ#֬ P֬P^R֬QQPPP@b֬QQPPP@bQrQR-֬PPP@bP֬PPP@bPЬPQ.*֬QQPPP@bP֬QQPPP@bQeQE9ЬQPP+P-Q֬PPP@b֬PPP@bP^ЬP`R֬QQR(Q$Q\ ֬ЬP֬QQRQЬP^RQQPPP@bPQ_'ЬP֬Q`֬QQPPP@bPߑQ_ٔP<^EUЬRb"DЬTRScQQRRRBeRQ_QScQQPPP@ePQ_dSPЬRbTRS6RbPPT(P$PP\RbRSPRbPPTPRSSTd"TP֬ѬT.PЬP֬ЬRb``\ЬQR֬ѬTՔTP^exWZլݬPլPSXެUSe T%XQCdPP2PPPQXSSeQXPЏSSSPSQPQ{SPPQQYI4VfRoS2PPcXc ݬ$PEլ bfRKPѬ & Q2PPQ~ݬ oP ݬ3RPbVfRѬ լ PݬPUݬ PT URTRRROV"T/ZP#GaC'ɫhi̫kzXDneuY9?l30S2*2|dBK5A |DQ"UQ|y? q. R8'%Uà q9\K skLddL2"Fp?c7҂(9$oL$!AfSRgO8-}5 Xo؍rCݲ~^/#Vt{Ȩ@ r!9}&Z@O靮r@$ 9QO9T,D~ƧfvA~ͺ-`PS'c}ɩo2h7.ϡ]\34!X5ǓJ6SyV5pY4A_B_$ Qr2L󸍼`)XmEPR 3_x]\˽С;L@ʤ$Vcg ПsjuŘT*@x=?B?{5&E7*PMBR̆EW+Pt|UN^M>y#+]Kta+ATJ&J ?dޔVc4̇OÂbC*HW~WEˣ7M!:)R@ZRk`<)[Ms.."hgc@,4 ^O1\o'Y E&~30=#pat2@)A Jf;mF\~ )g} ۻy(9f( O$#mAVV=BER^9-% ]Fe}哦H)_{q/p@J72QNql]zX4jsn{@yVy'^.30mK ",Z UwS){ b^ֆfR9^7bff$H^ÄBdd!y}mHPlESj^|Gⓔq(4ח%$՟),@dZVķ 0j7f2KpI@@8фW,u2mnX߱9,3B3XӱOud}ž% wpv kӇ,*NcNGNM@墟%܎h/etB+yU۪qQ`Bj6rٱ x:l=5eLv?AÕ^\t:a^2zTٔ#W$eP$gW3l[cFkp|y.o ~3BD9"Zӥ#Y2hTy2 %uXj:YMa}fI$qZxr>SV3H'ϾdJVxY1rֶpdKEI "> "Ægi82sƇ *xGjjVxspQ.vx%Z=Q\JYel7w ϝ_ T)@_yг;}Jqp}eE}wuf'g*6^@z` n @Jy~lّ!!`MbK`wԂ!>+ 7z|Ux`0P[(>uXgCM="v*fT|#_a䞎rfbMb$eX-)eu[eJ&|MG g|jŹ۾ )VCO+'uCN-F o+i XgG>G \q5^SThz7pfBMk=E^4[ /)J[U*S2_l|6_dcg(lPsL|7Bzu4 8 *yymyiP8 ҮJ5A\8^Pߋ}0liTt# ,筺WD(2ͤ u%mzHVj̼e:T xOၭl]̧AΓlq!@ܥ@nBz*ٮ*)#S{~99mgGN,n_"L,YuKRT˂f8A :ƍ7wƒ#?JI o]/9P&9z' EvHGه<]+ҽOYv+K5GQ$t|Fw]ݽ:uV Bil̢qr-9^*XY3azL# Tݨ11!;sE륽oꛒ7AO+km8ݿQ'ЏEkK$Z. 8,yRIPO4SZgmaրpiLjcD,嬄SJ*/9E8$f=8+|2 fGP5c3A"ԅ$ee6=EW1x vp,<&r,-` _%AѕwsafL&L:n,OG^m7UPb[G56}1$+zJQ /C`'D! F!yh> `/5c摳kRfv'ubNѢIa7ekPmő}IxZW2UǸps.tl' 0:X9T|% =.2C,x=0x8v5&<#7Pl&OȨ ZnSԤ&$(AgA4AVܭbp^a^wҽ=+qGҼe1j;lpWw jI놕 YV<)̶@.Y*Y_f.`Vghvle. .=g(>~x$g=&ͪLh4{{.S/ kʱ/F˄"le/{;R<Lʫ?qRQBfdUtw ժ/E*kI$gĊV!ouEf<ԡ5beCHdDŽsX (gQ# }č 0c- p]1ķF$#\2'݀ٴ+YkǴ!Sގ)5r+z+`͒0O~Cfggї"h[g* M|<\iw H{gnzoq>ZzeCF1N-S!}Fp~[h'ǟGH ;<#LbW 'X̽=/v\~ Qub>X%EGP{vV릇UM5obן JL!JoV )РF5[r}QdFOnz xĥA~D'Ru~Ur@Ӫ#4[dcJ,C62H-.L+}ɞ{!o+=F0 y82h̪8ʅ`vb+sX͘Z`QLϝF"VmT]G~gCqqNiov44SwWʔbeoP:⑉rv  q9YEl7 S2} v#)u=èM~j]&.M%qT0Tf:WHlj }уVSK/cU L]OkFBqpdDl@0H&93 TFpe ]Pal6z'/|C5#tU0XDEduVMSu`QQobGn!^,!jl4WylH[F w\kNqj{-lG\H}wSe,ys^Ŀ[.F1eך9k Nʩs^ t? QUNOFUeLC$Wba#p%^G,%KpJR9qɖ~`]w}ݝO.&GkX3nIx/)~8cq`JEhCj1 4W 艨 9y= Y'|{Ϡjd^cYQɬoH!M SҊx?O\7s;R-f|@OZ9 !T,9u,87JynrRHAG7"AUJ#&N"F A`$E15SJU ' ?un[,4O xfGH1tJpU "1xlk $WHQ߾Ɏ#"%Ǟ&p8 dxV>B v)<'[YBMԓB줊o-]~'Z%" XWvDƗ' y26xͪ>~b/Iz88ri:\1ãNulyR"–/&餓i2:+< ~ 2r4s7O6F$F?R}E8R.%d CQ&}MBk; ZSLQY %o+VG9'N^׉ xF98*ioؑS ^ n.Dp}Nl6w Nf/cC1JDmuФ{:ui.EqF {Zp?X=%07U=OXANKGWUzOÊ}WNƐm<"χŒ'7ڜ*ϡ68s;Z-0}Rx$LK2`֩E}[pGitEh0b&"C}qb?dR%?Fw4g 8t;=>irP[|too kjӔ?KJQ ˮMzug |LJDQ5ή{5s% "Cş8E߸w뭾s6[m@ivMlU9ʝ^%,ٔVq4&W2|YտTWNZHIR[ٚ}Ec ^<;)H"<|QSѫGҀB|pL_s)#F=$¸-~$ݍu-A#k(ّN3ae:' jWt71cCx6˒5 SW6aSa06oR\tq,xOLF|uPkeUgŖNH9OàH44s۫.!󗵄^e-]hFJu6w]j~R!gD1Xtы/Ѳju$Iu'{ 7U7P;=q4lN./qDـKX:b<#PG:VW5M!=$yk.*O[e0TB3sRֵ0|G¹9 {ǟqoiPl.uQYV͎yn>C\id!GhEϖZRAb2pn&C7}O=c4A sU[lⴙ"R]dV" 4&kNxm³VQY#LDL>QeoQLUK?zNJ'?N&7= )uW~X O<`$(a?_ʬM`arP S4w@teO3Z2w))]=s;0L&^hB:!&~6YР X}ʁV/t]~Ф/&Q1ɯs^ݠn(j `mܺ/5ͨ%w,ք\ B e=:!GL(w ;|@QZ# g=OȔr>jCQ*.[IH]"yn+8%.ҌUAWx ;ScI؝\7ڌ٤]pA,2x͈'%?E/*,ˠ42T@RS@$mbd?wbB.t0I4D<È,WQV$Z4|$TeT`(˔4GIJ4?D9/Wz[.UڎRNa7l\y7ֵ Ͻh٧:teW^n#%G(jXt& us.#pJ K?ݙNpt,pK Hz'2='}cuWVx~ c$wԗYS,)O7\>[*VP =U uy #WΦN}W]pT| p 3#P!=w#qRnga)@=s} u+b?*T3JP(, aw90BC>Fɀ2K`1*+qAGYt2<ƄImE{jAŲUo|FQ{ҘSTH$]l3Nf[Sv5r`%n-){1'I*v$6YV9}~ m!)J:P;ZGoB5BKI Ty͕9#Ʃq*!'jq%p1p)à 76oJ>SbV^wFK04bf ~gS#5ک5?m|s?ܳ'dAFS&;-m@ VMS.BCK[V9.BIN]ICONT.EXE;1qolonmissing colon or ampersandinvalid case clauseinvalid default clauseinvalid case clausesyntax erroridentifierinteger-literalreal-literalstring-literalcset-literalend-of-filebreakbycasecreatedefaultdoelseendeveryfailglobalifinitialinvocablelinklocalnextnotofprocedurerecordrepeatreturnstaticsuspendthentountilwhileend-of-file!%%:=&&:=**:=****:=++:=++++:=--:=----:=.//:=:=:=:<<:=<-<-><<<<:=<<=<<=:=<=<=:===:=====:=======:=>>:=>=>=:=>>>>:=>>=>>=:=??:=@@:=\^^:=|||||:=||||||:=~~=~=:=~==~==:=~===~===:=()+:,-::;[]{}$($)$<$>invalid characterinvalid radix for integer literalinvalid real literalinvalid integer literalinvalid digit in integer literalunclosed quoteno line number in #line directive'"' missing from file name in #line directive'"' missing from file name in #line directiveFile %s; unexpected end of file Line %d # "%s": %s ???File %s; Line %d # "%s": %s File %s; Line %d # "%s": %s File %s; Line %d # %s %s: allinvalid operand to invocable0not enough memory for invocable listnot enough memory for file listparser: out of memoryparse stack overflowfailinvalid keywordallocatedasciiclockcolcollectionscolumncontrolcsetcurrentdatedatelinedigitsdumpeerrorerrornumbererrortexterrorvalueerrouteventcodeeventsourceeventvaluefailfeaturesfilehostinputintervallcaseldragletterslevellinelpresslreleasemainmdragmetampressmreleasenulloutputphipiposprognamerandomrdragregionsresizerowrpressrreleaseshiftsourcestoragesubjecttimetraceucaseversionwindowxyinconsistent redeclarationredeclared identifierinconsistent redeclarationinstall: unrecognized symbol table flag. local %d,%06o,%s con %d,%06o,%d,%s ,%s ,%d,%03orecord %s,%d %d,%s errorlocalimpl %s trace link %s.u1 invocable %s global %d %d,%06o,%s,%d .u2.icnrcannot open %swbcannot create %sunable to write to icode file.u1.icnrcannot open %s%s: Line %d # :"%s": %s%s %s: Line %d # : "%s": %s ucode file %s has no version identificationU9.0.00version mismatch in ucode file %s ucode version: %s expected version: %s U9.0.00inconsistent redeclarationinconsistent redeclarationill-formed global file %sprocedurerecord global discarding %s %s .u1rcannot open %sno record having this field is ever createdpnullstrnumberapplyinvalid keywordefailpnullnoopline number tableglobalstaticarglocalgencode: illegal constant gencode: illegal opcode(%d): %s file name tablelabelsfound rec %d field %d already!! never found rec %d field %d!! cannot write icode filecannot write icode filecannot write icode fileI9.0.00/32cannot write icode file header %7ld procedures %7ld records %7ld fields %7ld globals %7ld statics %7ld linenums %7ld strings %7ld total %7ld code buffercode buffercode buffercannot write icode filelabelsmultiply defined label in ucodestring spacestring spacestring spacestring spaceIPATHmain.u1cannot resolve reference to file '%s'string spacelocal symbol tableundeclared identifier, procedure putlocal: global not in global tableputlocal: unknown flagsconstant tableputconst: bad flags: %06o %011lo asgnbangbscancatccasechfailcoactcofailcolmcomplconcoretcreatecsetdeclenddiffdivdupefailendeqvereterrorescanesuspfieldfilenglobalgotoimplinitintinterinvocableinvokekeywdlablconcatlexeqlexgelexgtlexlelexltlexnelimitlinelinkllistlocallsuspmarkmark0minusmodmultnegneqvnonnullnoopnullnumbernumeqnumgenumgtnumlenumltnumnepfailpluspnullpoppowerpretprocpsusppush1pushn1randomrasgnrealrecordrefreshrswapsdupsectsizestrsubscswaptabmattallytobytraceunionsunmarkvaluevarversion%s: %s -- %c illegal option%s: %s -- %c option requires an argumentsalloc(%d): out of memory alloc(%d): out of memory r]:%s%s%sdefineundefifdefifndefelseendifincludelineerror_V91_VMS11_ASCII1_CO_EXPRESSIONS11_EXTERNAL_FUNCTIONS1_FIXED_REGIONS1_KEYBOARD_FUNCTIONS1_LARGE_INTEGERS1_MULTIREGION1_PIPES1_STRING_INVOKE1_SYSTEM_FUNCTION1_GRAPHICS1_X_WINDOW_SYSTEM1LPATHcircular include-stdinrunterminated $if rline(%d): out of memory#line %ld "%s" invalid preprocessing directiveFile %s; Line %ld # "%s": %s explicit $error$define: missing name$define: "(" after name requires preceding space$define: unterminated literal$undef: missing name$undef: too many arguments$include: invalid file name$include: too many argumentscannot open$line: no line number$line: invalid file name$line: too many arguments$ifdef/$ifndef: missing name$ifdef/$ifndef: too many argumentsunexpected $elseextraneous arguments on $else/$endifunexpected $endifextraneous arguments on $else/$endiflineendifelseextraneous arguments on $else/$endifvalue redefined   A S f ~    "#+2I3m45678!9E:i;<=>?@AAeBCDEFG=HaISVWXYZ(`Ea_bzcdefgj5kLlcmopquvwx0yOzn{|}~'PyFo<e 2[(:Zk|&7HYj{%6HZr./L2b4v79;<=>?@B*HAJSOcUuZ\^_abg h4iK_  !"#$%&'()*+,-./ :;<=>?@AC GHIJK M OPQ S U WXYZ[\]^_`ac ghijk m opq s u wxyz{|}~ """""# ### # ## ,# 3# 8#:#@#L#V#a#h#r#~########### #!#"###$#%#&#'#(#)$* $+$,$-$.$/&$0,$14$2;$3?$4F$5O$6U$7\$8d$9l$:q$;w$<}$=$.F VMS.BCK[V9.BIN]ICONT.EXE;1Q>$?$@X-d TX\aelqw} !%+27<DIMQUZ_dhmsx  $(-16:@GMTZ]bhny&49CJQW`mzd: bq$s%u&y'{()*+,-./0123456789:;<=>?@ABCDEFGHIJKL M N O P Q R S T U# V% W' X+ Y- Z0 [5 \9 ]? ^A _D `I aM bS cX d_ ea fc gf hh ik jm ko lq ms nu ow nz o} l m$+)+.+,4+8+->+.E+/K+0R+lW+]+ja+1g+2n+3s+f{+++4+5+g++6+k+7+8+9+k+T+:+j+;+<++n+=+>+m+ + , , , ,, ,?&,@+,h0,A6,S<,BB,CG,UM,S,W,\,`,e,m,br,w,~,,,,,,,D,,E,F,,G,e,H,I,J, ,!,K,i,",#-L-$ -%-M-&-'-(&-X,-)1-l7-*>-NE-+K-PO-i%PatchStringHere-> -=-$?-B-B.C .D.@.A.=XXXXY YYh:lFP@797<F6w7kjYDAnCE`v^H)dG2I=E45@6<?BDGHvWLvMK?iYtX1&T[\]^vVcSa=f_b>ivU3;vg`aAed85Z;>:vF@9v7<,%qhrJ_2ACsERQP$OGN2MI=L45K6J?B1D/H*W&T[\]^YVXcS(pBmf_"bo!U3 g`aed8 Z;>:F@97<  ACEG2I=456?BDHW.T[\]^YVXcS-f_b!"U3g`aed8Z;>:F/@497< 0 ACERG+2I=45C6[?B#DHWYX~jyx{z|}''()*+#$%&#ST#VWX\0bebkl 3     Q,-.]kTYZ\5$3-)6W+^1D_FaH/RcV enl' #"hhjek'R98=<[]40.2*,7&XEIMKC;`dGQOA?bS(U!YFPN@>aDLJB:_HcZ\-3/1)+6%WVT$lne5heofhokm     fkkmjgiohfnfl  mmokjj" &+,.0QTVehmrtx $%yz{|}~+ )-/123456789:;<=>?@ABCDEFGHIJKLMNOPRUWXYZ[\]^_`abcdfgijklnopqsuvw+!#'S(k*V* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*Wf*h*Xk*o*Yh*m*`* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*a* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*o(k*u(k*h*m*h*f*h*0$@˖ VMS.BCK[V9.BIN]ICONT.EXE;1=7f*h*m*9k*o*Oh*o*~d_%}i*T<<<<<<<<<<<<<<<<<<<<<<<<{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%}=cw^O%JFii****<%@p%%%%p%%PG<KJ   !!!!!""####$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%++,,--.(((())*2233//11&&&&'44400            ^Y{U| iP~念Phߥ8r'P`RR{ߥެWgެVfPRR1TSRPPC5y]}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] %]]1P?P11P1ߥ2gd11i 1s~icPa~icP111P1i]1P11ou=kPU_PJߥRiP iߥW?'-$)dݏlߥgf.PRR1WaSSxSRRhTdPP(RdPPXxS~dPnPW%1ެZjL ﳠ$ߥtP@ P1ߥwPj[@k P'Ю(P(ޥy`XRXWPWޥ{``bń1-P@kPSУP`ōP(P1ŒePjV@f,ݣ Ю(R((PbŘ)P@fŗ,XTX(PPdŝP@fŜ,(PoPšݣ(Pťݣ(Pũݣ(P+ŭP@Ŭ,(PP~P@kű;=ic1hghԾ(X()7ݏARbP0PvbPlPlڻbPлPػbP P &bPP8Ѯ(@XݮJP ݏIծ ;+ݾ-PPmBPb-'FP欄P)ݮ^PSnRbPbRbS־gݏbt:zV/xLRRR~ݮP|^UVRuUSެ RC PSC`SPxP~PTTPPQPRfaլ ЬЬЬ P `PЬ P `bTffa:^tRtM^ռPЬRb7Rռ^}t\)(ݏ ^uSݬݬPR àO9RPP^iuUм SSRQRPR RP Q{RPQPQVSVRRSVŬVTЬRìbWTݬQPSݬŮB9ż PPT P@cPPTV ЬRWSbSP^RެQRa PxRRRaRP|^qxVSTUWcռЬP`VdcռXcRRfe.PRRߦ eP ߦetcP|^wSTuU~Vqᄌ嘆F$ݬP ݬߣ7ߣ;ߣ.Ĥߣ=ݬPޣ?ݬߣEϼEﬤߣKݬߣJǝߣO}PfߣQz7ߣcݬߣbߣgHPeߣiE7ÆߣzeEPR æ6Ьﭷ~V8fP eP Î~6ܻP^AvRլ ¦@6^̠ݬ^vXﰠYЬVWfPP']uu5YQe%Miu- q YIq9Q)]1BPn?PЦRѢUh ݦcЦRѢUߨݦEVߨ ЦRѢUߨݦ1PRiSRiSRިTRT±ZjPUeDS֣ݦDSףߨ\ި!TR~TxjPeRdjPeݦτR~FjPe1QPߨ&ݦXfߨ,ݦCVЦRݢ$ݦ1 PRiSRiSRRذPߨ0ϐDS֣ݦDSףި6TRT_Pߨ=N1PDSգߨCV21sRգߨ]RDSRDRD(bݦXD(DDRިdSݢS͸P1RiSRiSRɘR٘ɘSԣߨiϚDS֣ݦDSףߨozݦɘSգߨt`ɘSݣϳ ߨxHRl5PXɘ1jЦRb;Ѣ 1ɘRբߨ~V1PЦݦ1(PRiSRiSRțTRTZjPUeDS֣ȠϚݦVϗȦςDSףȪqȱhݦȵT٘T{jPeRgjPe1rݦτݦ|1_ЦRѢ( ȺݦYЦRѢ( ݦ:ЦRѢ(Vϼݦ1PD1+< VMS.BCK[V9.BIN]ICONT.EXE;1)LSDRТDDRԢRiSRiSRTR~T^UeP~ZjRrePj1TR~TLePjDS֣ݦdDSףVR~ePjTR~T߬ePjR~ɬePjTRTﮬePjDDSRТ1SݦSt=P`1wݦψPWݦ}PW1]P 1NݦWVЦRSݢSѴPݦ1P SݦSԫP1 ѶR0SiTSiTRTRTVPyDS֣ݦϝDSף,ݦτR`#TR~T;UeP%TdRePdݦ9R~ePd1 ݦ1 P(SݦS̪P1 ݦݦ,S~S]P1 ЦRb RϠP33ݦЦScRS PSiPRV :TRTPW1 PVASݦSP1 PݦVϡGόDR֢ݦDRעMk1 S_ЦScRS' SϡPRVCYTRTTP@W1T PЦRТPP8FFFFFFFFFFFF FFFF(1P?PRiSRiSRDDS< RDDSRDS_χݦevЦSc5idDR DR֢ݦϫDRעo: S DQP=vDRݢ&PD1(PRiSRiSRDDS RDDSRDSRͧZjPUe|TRT蠟jPeݦDjPeȁEȈTRTbjPeDRݢHjPeDݦݯ1HPɜRRȍV)RiSRiSRDDS< RDDSRDSȩϤݦVϡ ȯόȵσЦSc6ȹqDR DR֢ݦϸDRעȿG SD]&PIDRݢ2PD14PRiSRiSRDDS RDDSRDSR٥Pϐ ݦЦUe7v TRT\Pݦϫ UDa+ZjPKUe TRT/jPeDRݢjPeD1RiSRiSRDDS RDDSRDSRŤZjPUeTR~TjPeݦϺQ H R~jjPeTRTOjPeݦoD1jPe TRT jPeDRݢjPeDݦ1DSީRSRc VO&1ѣ ,ѣ&RSRS&_ RDSSRS-SDSi2PU1lPRiSRiSR2TRT5P!DS֣ݦEDSף7 > RPDϦ 1PީDDDRԢDRԢHɘɜЦRݢJ`PBtBS4 V9 Ц[kxRiSRiSR[TRT5ZjPUe`TRT jPeݦ,e RjPe [ЦRb R Rcݦϋlv rm ЦRݢvtMݦݦ1|P|SݦSPP<1SɜRRȁV#ЦRѢݦvPRiSRiSRȤTRTPDS֣ݦDSףVϒȩ}RjPVfȮQݦ#1ЦRѢS ȴ-ݦυЦRѢS ȺVȿݦVVЦRѢS ݦ1PϷݦݦЦRѢg Ѣi φݦݦςЦRѢg _Ѣi IVN9ݦ 1rRiSRiSRTRT=P)DS֣ݦMDSףRɧPݦ1SݦSОP1σݦݦjVoZ1P KݦϣݦϛݦϓV8#gVЦRݢϺݦjVЦRݢwݦɦ1PSfSΦP VWP^aTSЬPP%GLJ@>(&db|zpn42XV1_P>?P:R1{S?R1qPSER1ePSIR1YPSNR1MPSRR1APXR17S^R1-PSfR1!PSlR1PSrR1 PSxR1PS~R1PSĄR1PSĊR1PSĐR1PSĔR1PSęR1PSğR1PSĥR1PSīR1PSıR1PSķRzPSĽRnPRdR\SRRPSRFPR<SR2PQݬQ︛PRfS Y^_RЬPP$?2P?PϫϢϙ"ϐP( ^^SЬPP$?<<<<"<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<,<<<<<<<<<<<1*?PHR1NR1VR1[R1<-~2cR1PPQP*P=1PPSSPP:RR(HP?PP=1PPRR:P=1PRPSPPRR:P=1aPRPTPzPTTPP:'1F?PUP=1!PBPSSPP:QQ'GP?PP=1#P PRR:P=1%PR$PS"PT PPTTPP:)S1?PP=1m'PPRR:P=1K)PR(PlPSSPP:OO%E:?PIP=1 +P6PRR:'P=1-PR,PS*PT&PPRR:P=1/PR.PPRR:P=11PR0PHP2PIPPRR:P=1O4PR3PJPkPTT|g[PSSPP:MP|@P9P=17P&PRR:P=19PR8PS6PT5PKPPUU=1PTTPP:#}?PP=xPmPRR:^P=%@PR?PS=PT;PU:PƻSRէݧ h,ݧhRRh S%P^W2X[@YmZ~V(RRk(bh\1rPU$RШ0 4$ 48R#ˏRSCg1CTPR 1UdPRR#1dPRяlRgdPRяiRXdPRяnRIdPRяeR:+ PRR R dPRR R RR  R PRROR JdPRR;R 4PR#'R$R dPRRR PdPRR#1ˏRSCg1ԑ0 R) S S  $kP$<\k1ˏRTDgS R_$RP\1NwPDgR.$RCP\1-VR"R'$RwP\1 6$RkP1P@i\@Sch&3PkU>83k(\(,hyRBRbh2Pkj1_P?PˏTP@kP$ SQP0TU PˏTU UUQSPT. R֮ 1uPTe TE R֮ 1XTr TR1RSS$12YUըݨ j?ݨj/UUjY%j ﯝ11PˏTP@k1Te TE1KR1T+T-R1ˏTP@kR1YUըݨ jݨjUUjmY%j^1PˏTP@k11ˏTP@kQQUQPQQP#U0TU ˏTU UUSR1PYUըݨ jؐݨjȐUUjY%jHʎ1 PˏTP@kQQUQPQQP1U0TU PˏTU UUS1(YUըݨ j5ݨj%UUjY%j拏'zJP#PPS1PˏTP@k R 1Tצ߭.PUE&P`hP-P]EPTծ %fFsPhU-P.$Pf!sP/-PP^TNOYCVtZz[&vWЬSXPRRS1:R 12R1&UR_ äXPˏRP@fXR\qePRR1R0R7RPRIPRx PR3R^#ePQ PˏPQQR PBRѤ  dpФQ֤RaePRR EXAXePRR,ˏRP@fPePRR ˏRP@fRSR  R1RS qP=USժݪ ݪtSS]U%qJnRäSѬ"$SdpPj#2+P׸$PSdpP  +Pﲸ0P^PPʏPP^TЬS2RxTQ0SPPQTPSSPS0S7 RPRPSˏTP<^UnTSR5P\\P\a\f \6P\A\F7\ˏ\P@e0\ P\dPxSP\PSRPRPSPP|^KRT;SЋVP\\ \ P\\ \ \0\91LUnnդݤ f[ݤfKnnf8U%f)˖M\ \ PP\\\ \Pc\0%\9 cQ0\PPQcP\\0\9\P ^ SJTUHXɈYWЬRR R hPRR R R"1oVĝեݥ gGݥg7ծݮg"V%ghiRR PRRR RPЬRPRR"HR?R :Pѣ  c|lУQ֣RaPRR"RR R"cGmP\ĞVnեݥ gPݥg@nng-V%ghRP^!TvRSd\d\PqP\\PP "VVVVVVVVNB:<?Pb \cbd&cb PcbPbPPb Pbbb\PP^HTƕVXЬRSТSզݦh?Ѭh(1ShЬPՠ 1ЬWPUWRR$RRR RХSErPՠѠR`S. PՠQաѡRaSQաSShxnRެ Pb`b Rb`bݢhHlP ^UGSЬRR$RRR R ЬPРPPՠPѠR`P PՠDQաPѡRaPQաP^FSRTբݢ d}ݢdmլݬdX%Ei^UFSFTЬR ݢ)dݢ3dլ ݬ >dݬEݤم{ ^ESRբݢIDžݬSݏ|^ESTЬVaUޏbdJRbUVdbgdb #ݏ^-ETSbcRbݬݬcbgcb9 1„ݏ ^9ZSѬ&cݬPݬߣޣ!"ЬQPPP@P_aPR ߣ#sݬaPR ^YSGaPR ߣH0Ԣݬ`PbRP<^qYTJUЬSaPR ߤHԢS`PbeRePePՠ РPՠR^ݬU^[pW<xRR)PgRPgէ.Y_PgRЧR |ٮkЧUЧ TЧSTЧ\ЮRBlRTRs\TYYg\\UXX\VZZxRR\PgRݧPgէXPxYTTxXUgUxZVgVSdUeC-\\Wk`Pkkk\@\7L\LLk%kú\S1 1CՠRRokPkkk\lѬS\lѬS\llk \llkЬRݧdg[PR1PP''1P?PSkХTJPd\LP*P!@֎\L2 @S1TUTݧgPkݧgPk1PRUVB*PP^xPPxP\\UХ>B߲R\TdBSSSC,SR\C\1_BԱ\L S1LxPPxPSSUХBRSTdB\\\L΍\RSL'SBySCﱍ\\T UЧPP $8LPTdt$(8Xx|<<<<\|<\|<\|<\|4444444444444444444444444Tp  4 P l  0 L h  , H ` x  $ X  @ ` <X <X\x,P\ht1?P?PRx1$R|fRݢ4x7|1&| f7|1P11111fRݢ1PfRݢ1PЦRݢ111}fRݢ1lfRݢ{1\w1RP1M<w1@w ЦRݢЦֵ1P~w1P1 fݦݦݦݦP1P<Cw1Ц6wЦRݢ&1Pw1P1 ww1PvfRݢ v1yvfRݢ v1ZP1U1Qv1FP v1:PPܴ1%Цд1PT1fݦݦ"P1P1fݦݦݦ Pm1Pfݦݦݦ PM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦP16Pfݦݦݦ|Pͳ1Pfݦݦݦ\Pﭳ1Pfݦݦݦ<P1PfݦݦݦPm1PfݦݦݦPM3  VMS.BCK[V9.BIN]ICONT.EXE;1j1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦP16Pfݦݦݦ|PͲ1Pfݦݦݦ\Pﭲ1Pfݦݦݦ<P1PfݦݦݦPm1PfݦݦݦPM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦP16Pfݦݦݦ|Pͱ1Pfݦݦݦ\Pﭱ1Pfݦݦݦ<P1PfݦݦݦPm1PfݦݦݦPM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦ P16Pfݦݦݦ |PͰ1Pݦfݦݦ\Pﭰ1Pfݦݦ%P1fݦݦݦ& Pq1PfݦݦPT1fݦݦݦP51~PfݦݦP1aݦfݦݦP1BPfݦݦ(SPܯ1%PfݦݦdPﵯ1PffP1ffP1ffPl1ffPT1fݦݦ'P81fݦݦ'P1efݦݦ'wP1Ifݦݦ'[P1-fݦݦ'?PȮ1fݦݦ'#Pאַ1fݦݦ'P1fݦݦ'Pt1fݦݦ'PX1fݦݦ'P<1fݦݦ'P 1ifݦݦ'{P1Mfݦݦ'_P11fݦݦ'CP̭1fݦݦ''Pﰭ1fݦݦ' P1fݦݦ'Px1fݦݦ'P\1fݦݦ'P@1fݦ jP'1pfRݢP1ZPfP1CPfݦ"P߬1(ЦRb#RPݦ*Pﳬ1R𤋮1PЦ1ݦݦP1PfݦݦݦPc1SPݦPݦݦP11zPݦݦYPݦݦ|P1NPݦݦݦ^P10fݦݦCP̫19IݦPﯫ1fRݢ PfRݢ I,fRݢݦPo1_PfݦݦPI1PfݦݦݦP)1rPPfݦݦP1JPfݦݦݦP1*P PfݦݦhP﹪1PfݦݦݦHP1P Pfݦݦ Pq1P_ Pff PM1Pfݦݦ P01y Pfݦݦ P 1RPfݦݦݦ P12P Pfݦݦp P1 PfݦݦݦP P1Pݦݦݦ P1fݦݦ  Ph1fݦݦ PL1fݦݦ P01y1ufݦݦ P1Yff ; P1Afݦ " PݦݦE PΨ1PfR<~ݢP1fR<~ݢxP1fRݢ<~ݢ[P1fRݢ< ~ݢ?P1ݦݦݦݦݦ!$ P91Pf-1vPf!1jPf1^Pfݦݦ"o P1A1=^QfWlVlXdlYUh/nSPf\ElRPb\Rc\RfREbUUh\llTi.nSg\DlRPb\Rc\RgRDbTTiee^DTլ1ЬPPl(( P?PPA1@bP11/PЬRRQQ*hQhSAcPѠR P`PѠRPݬ ݬݬϱЭPȬPЬRRQQgQgSAcPѠR P`PѠRPݬ ݬݬaЭQP ȬЬ PݬĴЬRRQQjQjSAcPѠR P`PѠRPݬݬ:ЭPѠݬOPݬ>^yjYVjZwjXЬSSRRhRjQBaPѠS `PѠSPRsҬTThTjWDgVЬUЬSIPQVaUSԡiQiԡ PiPQiP QiQDgҬPPhPjS@cPР PТ P^-fYЬSSRR*fRfPB`QѡS PaQѡSQPoҬSSeSeXChWЬVЬUЬ THPQWaVUT ԡeQeԡPiPQiPQiQCh^bZzb[{bYЬSЬTSRRiRkQBaPѠSѠ T`P ѠSѠ TPR{ҬTTiTkXDhWЬVЬ UЬS4HPQWaVUS ԡaQaԡPjPQjPQjQDhҬPPiPkQ@aPРPТP^ҬQQ@hQhRAbPѠP`PѠP^ҬQQxdQ]dRAbPѠP`PѠP^ҬQQ@aQ1aRAbP!ѠѠ `PѠѠ ^UWRբ PݬbiPТPRբP^UgRFPQЬaЬЬ ԡgQfԡ PbPQbP QQP^mcRFPQЬaЬЬ Ь ԡ4cQ+cԡPbPQbPQQP^`R+FPQЬaЬЬ Ь ԡ_Q_ԡPbPQbPQQP ^>SfR)Pݢݢݢ )ݬyhPТR^>Un_T1WEhXjVݤ ݤ<ghPf ݤݤ hPIghPfn ݤQghPfVФSФRRVghPfRPRP%PPP2P~ZghPfRPRPg ogPfФT1Q<^=T"eRUP UUݬ`ެScUgPxdR%Pݢݢ nc-gPPТR<^M=TtvR|RRĂݬfPLtċݬfP1dR!PbĒݬfP˪ТRd bS!PcĞݬxfPУSau`RUPUUĬެScWW3ݬ|S:3iSXPWSSS3߭PXX1IZl'U YXPPP  a                 = 1P2?PjPnen&2P[-Ԯ1PiPS PRjnRPS- SfRCRb{iPSe SfRCTdSSaS]Sd֮TeծK~ΘPSSTg& TRfQBPˏ`PPBRbgTcPe߭KPXX1Q?WP^ЬS;УT1Є+PЬRТSЃR RЃRЄT^1W a[%NVNY߭PRR1 %ZpS#X`0+,ol dRPPlEEaEEqa]E E E = E E E E E E E E E E E E E E E   E E m y q1h ?PjRUfTLSSTS"8SfLވPLUSPf\`ClPSfk1 PXPSjݭSR 1 P`P\jݭ\VRSLScRW 1 0PTjT/Pݭ~R϶ 1 Pߧ,gRSDcݭ~Rό 1 `PSjSQTCdU e1ESާ-PSXfTKRSTS"8nRf~KވPrKXSPf\`ClPSfkߧ3ݥ ݥM~ Sާ7LSXfT.KRSTS"8Qf KވPKXSPf\`ClPSfk1PХSݭSR8 1z`PUjUeYSާ>HSXfTJQSTS"8nQf~JވPrJXSPf\`ClPSfk1PݭUR 1,PTjPSDc PU1)CU1UPPL1P?PߧDPSDc1r5SާTDSXfTIPSTS"8zPfIވP~IXSPf\`ClPSfk1PESާZ@SXfTFI)PSTS"8Pf%IވPIXSPf\`ClPSfk1PݭURϜ1`PSjݭSRς1|PXPSjSϧ1e`POjbSާ`XhP\PU UQhPS߭S?PTЭ쟭kS<~\$1T쟭kU\n$1P U pP쟭kU\G$j U(hPSSP쟭kSU\$> U(hPSSP쟭kSU\#ǏFLL\ϥ1PxCSCTCdSiS CiTPCkiS>Pi1uЮhSkVVI~Bݮ0ݮl]ABTfT"TTf~T&P \qBfPݭRǪQK*K߭pPRR1} ^%SBRxB\BPL`\b\ BbPPqBTb\'Pbi| ^a%UATAVЬSdPfHRPR8wHdfPfSQRdPbA`RQdET^$V2TX/HY$H[=AU.AW'GZѬiiRRRijPjݬ jPЬRB`STSTePgkRPRDkegۊPgTQRePbA`RQehjPЬRhB`hPPSePgkRPRDkegPgSQRePbA`RQeh| ^#UB@T3@VݬN ЬSdPfGRPRDFdfPfSQRdPbA`RQdR ^i#URW?T?VgPPݬ ЬSdPf|FRPRDhFdfPfSQRdPbA`RQdg^"U*RX#FWT{>Vݬϖ ЬSdPfKERPRD7EdfXPfSQRdPbA`RQdQ^!UPW >T=VzgP{PQPP\QS\RdRPfD\P\PRDdfЇPfRgR\R\dPd`R\R\P^,!YmP[=Ww=ZЬSSRCXBhR b1SRBRpbUgTj)DRTRDDgj6PjUTPgR`DbPTgkޭԮޮVUgTjCRTRPUCgj߆PjUkURUR1gTgЮRfbdURURSRBhR b1PTdTPSPBU@T)CVdTDfQ@ TdTTPTRP:PޭPaTTSS2SSxSSxSSSPTSSSxSSS`QRSRSSPޭUˏPRRTˏPRxRRxRRURxTbRRSPUgTjBRTRDBgjᅤPjUTPgR`DbPTgkSUgTjcBRTRDOBgjpPjUSTgRdCbTSgkޭܮ ޮ U T gSj BRSRPTAgjPjTkTRTRgSgЮ R ebcTRTR^AWJAXAVݬPC PTTxTT$TެUgSeRBcRTjMTT~ݬݬ ݬݬRCPeRf9P RPhQ@S c"@aScTgSDcBPϝTϖfRSf6 SPhQ@Rb"@aRbTgRDbBPaTZfSRf6 RPhQ@Sc"@aScTgSDcdBP%TfR^[z[LP{PQPPRqURTd9TST97@RSR(PT#@=9/9UfХ SYPѣTLѣ\FV \ݤ@i@hg>PХRB`jPlݥdVcSХUV \ݤ@i@hg\\ 1`Ф T1qJ=UePХ TR~>MTФSգPdT ФSգTФSѣRݤ\dT P~K1>RХUIK=S*=TУRBd?P|ݣtУSI$=\mݏLά~CKݏ0ݬ(0Pݏݬ PݏЬ \BIPݢϸТ RI<\ݏϕώ\5S5S&GS5~SP \5#5 VMS.BCK[V9.BIN]ICONT.EXE;1[n 55HG)66~6P "߸65RRXHRHjG;;~;P :;;RRH H!G;;FP RS;GGj=K|~F_=Fl~P uK1lTl~ˍm=G=ScݭˠV=cí~˳C=cí~0=cí~=cí~ =cí~<cí~<cT%<c<^qT3S3UcPe:RPR8:ce}PeЬRQcPaB`QRcYF<^Tf3SW3UcPe3:RPRD:ce@}PeЬRQcPaB`QRcE^S2R2TbQd9PQPPݬ9bd|PdЬPPEPQPQbQbЬP֬`aЬP׬P ^R~2So2PcP"kDPc~PP \A2^9R*8Q\bPaPL`\\bP ^XDV8Y1W7ZѬitiRRRij{PjjSЬRBc {խ0íRRffRRgSޭUTPcPխjSЬRfBcOO^1@WPP7S@cRV-8UVUTTxTP@gSRc9PTVPTU PcУPVURP^,PP7\@lx9PP ^WDVO7T3U97Re9P\\ \ e8P\\ \ \P\ j\ e\ `\,[\RPRfgfd zPdRQRdS\Ace8P\\ \ \ \, \dSBcS\ SS6t6PP^TDV_6U2WI6Rg8P\\ M\DPRfߤ fekyPeRQReS\Acg7P\\  \RSRePC`S\ SS65R~ ^A2STRcz7P\\ \ cd7P\\ \ \P\-Tc:7P\\0(\9# RQ0\PPQRc7P\\0\9P\ PPb5RTP ^1SRc6P\\ \ c6P\\ \ \P\0'\7"xRQ0\PPQRc6P\\0\7P\ PP4RPP ^6Wn|ZԮ֬x4RRB'ݬB[4wPM4?4S0 6PRR0aR9\STS!4QRDae"ZU0RTnTPaUPZ PTPqZqZn|Zl05PRR0R9Rr RR1SUS3VREfpZXԮ|Z%0f5PR1PSTS3QRDaˏRP@gT@gPaT0RV PˏRV VVTeZXPnTTaPTZnPdXP`TPjPqZqZn|Z/4PR1wTR TT+3nЮPSRS2TBdT2S~PP|^7/V|UTfn4PSS0Pf[4PSS0S0!S9STf:4PSS0S9S.A|RUR0Sf4PSS0 S9PSf3PSS0S9URSe SE1Sf3PSS+S-\S-\\WSf3PSW\S0+S9&P \PSP0P\Sfq3PSS0S9W\\TPP\\U3P'be|=3RS RR1|^-Td3PSSL2S)S $d2PSSLSS SL1VRd2P\\ \ d2P\\ \ \UYP\-Vdw2P\\0)\9$P RQ0\PPQRdS2P\\0\9P\ PP0VRUUPRS RR0PP^u0[,YЬU#0URR=&U=0QsP//Tk1URUR11VTXT/ZSifPRR R ifPRR R RW:R0%R7 PxSQ0RPPQSifPRR0R7PR PPkSWWHjk URUR1sTRT@/SB*/T~^+\N//l0P !Pl0P  P/^}YB+V*Td(X5.WR.U;.S\.ic0P!dqRbPcfbPehbPg _.bP.'bP-.bP.P-;bP..'bP'P'.bP'-.bP'P'H-R-P-R-cPPRd\L`\R\bRd\cPL`\R\e\\QfRBl\Q\PaQf\ePL`\Q\gPPRh\L`\R\PbRh\gPL`\R\|~ߩ.P<^ T,Uߤ ݬ P ݬߤS- PRԢS PbRSeSeeRբb.PТRբb.PS^ЬQaPaPРa^ PRԢA PRP^(W+VUg'.SfTEdRPb\Rc\RUUg+-Rb+fbfe+b\++b++b++b{++b+Z%bQ%*b*$b$*T-P-SPФ RPb\Rc\RФRTcRT***\Ь R\-R\**^ X8W*V*RSTRghgfnPfTRQRfUAeT^*Y*Z3*[iRjSBcPTЬRRSRUSPRRTURURЬXiUjVEfSTUU&TkUDeR1XKjWТPXUSV@gnnWUQUQ"VQVnPnga`QPUPUPQQТPb1լPSUXV  `jUVPbXibPРPbR1tլPkVSRXU `jRUPDfXikRDbRP^ЬPЬRЬ QPSPSPPPSPS2P^ ~`*)Ь^"!D)5)(^6^$Y"ZXT"[Ь UѬ(#ߨ  (p(kPb(ެRb(b( bRD(SBcTЬWWdUU1WSSRR$R'QBaPѠS `PѠSP ЭЬV&(PF`SRi"PSBj0*PRP PRRiPP!Aݭ~D~ݬPPլ'SЬRBcߨ ЬRBckkUEWSSRR#R'QBaPѠS `PѠSP ߨBЭP U2 , UkkU2','gﱣ^A#[&ZЬSSRRkRjQBaPѠSP`PѠSPR1ҬSSkSjYCiXЬWЬVЬ UЬT$PQXaWVU Tԡ & Q&ԡ&PQ &PQ%QCiҬPPkPjS@cPȬЬ RP^ Sz%TѬ}ߣndOiPdެP&&``&`PdQ@aQЬRRaЬ R мP R мЬ  R мЬ  RpPRÎ''^%[ЬVVRRR$UBeSѣV PcSѣVSR1kҬWWW$ZGjXSЬUЬ V ]S`UVPSXYЬXkVSU9Y`XVU ԠQ$ PH$ PN$SPPB$PGjТ SУVЬUѦ SVЬ W V`UWP УUЬRѥ>Pc"RЬUЬ V R`UVPcSTcSУPЬRѠSRЬUЬ V iR`UVP^ҬQQ0 Q#RAbPѠP`PѠP^ҬQQtQ=#RAbPѠP`PѠP^)#R$PQЬaЬЬ Ь Ьԡ " Q"ԡbPQ bPQQP^zPQЬaЬЬ Ь ԡ" Q" "PQQ~"QPP^ *Ь`ЬЬ <^T~U"QЬP@aSRdSBe$PRPRRdP|^UzP{PQPPVЬTǏS"ݬ ݏT$PUTSVݬ VT#PUUPUP^T2-W3-V(-U}S2eeP޼R@bccRb- RcP-ePcRcbff:fݬ #PR&efߤ.ߤ##?PRb:gOeKPcRbRg6eѬe#ޤcfߤ--ߤ`#9#?PeP޼R@bgޤIcefP^ݬ#PP"PR.ݬ"PP#"ݏ"R"^TެSccc"PRcߤ""ݏ"RPθ^ЬZԮЬ Ь[ZXЮWЮ Y[VYj(`WWVVbX!NZ!PP!ZRPRRЬPլЬTޮUd Td dV+dSS PЮReSbTdSS 蔾TVV1ЬZЬ Ь[ZXЮWЮY[VYz(`WWVVrX ^Z PP ZRPRRЬPЮT ޮ Ud  PTd dV+dSS PЮ R eSbTdSS 蔾 TVV16D VMS.BCK[V9.BIN]ICONT.EXE;1PP^  ֬ PQQ ЬP֬Q`֬QQ 蔼ЬP^ZЬXЬWЬ YЬVYO(`WWVVݭݭݭߪXߪݬPPЬPPP^TRSЬUUVUUPP PRRU4b.  R Pb~ߤPRV RRcìVUUݬ WgEcRURRV UUVgE; 7PR.R RUPP RUUR gE UP|^Vݬ (`լЬլЬݭݭݭߦRP^TЬP֬`P֬ЬP֬`SЬP֬`RSPPP@d S~PSRPPP@d R~PRSRP^Rb ψߦF~ߦEyߦO~ߦHjߦa~ߦQ[ߦd~ߦcLߦz~ߦf=Ƌ~ߦ|-ơ~ƍƳ~ƣ ~Ƶ~~~~϶~ϥP4gݬݬP ^YN%XTV- UХSգ1ݣݬPfWЬRХPݠݠďfSR+b'R6P P@b @bRĤf$WīfhiPcSգլW=ePѥP#'ݬPW)P/ݬPWWPPSХcW ݬzPԣЬ8УRPRP]D#D(DRDMRP0Х0,S2P^P^~ݬլݬ~ݬ^5R-P\\b\P\\^ZWW TPФ(RR, RSR(cPФ(YФ0[Y[1iXXRRRBgR X_1YUU[:eSSRRRBgRS_!UU0eRR\\\Lg\R_U,Ф(SSSU~SP ֤(XPU(PV Ф \/P\Pl ФlVФ(Ф, Ф0\ S2RSR,Ф,(2 R(R01PYRY(RSS[1cRR\\P@g\R_S,XP@gSPSlPR# Ф0,XPR"R'PS\lR\Q8P\lPPR(P$PP\\l\QP\lPPRP\QQScSSS01YФ0,XPդ+ФRТS Т(Т ,Т0bФ bR 1PФRݢ P$1Ф$0Ф0,Ф,(Ф(UФR֢eSSRRRBgUeSS\\\LgS$!RRRBg  U~ 1Ф$Rl-i&neb#  U~1QФ$RR(RRP0Ф(,12PФRѢ8z1USݢݢʏS/c+SP P@c @cSʤUʫx ФRТ8ФRbݢ 4ݢ"RФSdRSRPУRУSRS]DD(DRDRP0Ф0,17P^-VWoU<d~P<d@ݬlPQQPQ BP<R@TRPRSQT>ݬ.PRR ,R#RTݬ PRR  RT <Pd@@<P<@Dgݏ<@SSdT1\^iRЬP Т TPTd ТdЬSSТ(Т, Т0T Q2PQP,Т,(2 P(P0^TRݬݬ]DD(DSD&SP0Т0, ^Z^V/X$YW$m((0Ч0,ЬRbTTPPSChPRbTTPPP@hT#Rb PRbRR[[TЬQaSSPPRBhPS_SQaSSPPP@hPS_dQQRbUUPPSChPRbUUPPP@hU#Rb PRbRDSc1c[P1ݬPQsjPѣP#bQTRЧPݠݠƏiR+b'RP P@b @bRƤiTƫijSc1doS[RЧPݠݠƏiUR+b'R8P P@b @bRƤi&Sƫi=<^MTURТPݠݠďeЬS,c(SP P@c @cݬĤeݬīe; |^SURïVЬTТPݠݠÏeRT+d'T5P P@d @dTäe#Vëݥ7 P^EUVЬP`SSRRRBfRS_LPXXTPQaSSRRRBfRS_SQaSSPPP@fPS_dQ PſP(PЬScTTRRRBfPScTTPPP@fT#Sc PScSSW1ToT#jT"T'RЬP`SPR5P`QQS(Q$PQ\P`PRPP`QQSQPRRP֬TT#ЬRRRRBf׬ЬPPPP@f딼W~XK P^V UЬTdRRPPP@ePR_LTWWSTRbQQPPP@ePQ_QRbQQPPP@ePQ_cR P$PЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQP`9P~Wp P^T S XUݬVVNPfTPЬQaRRPPP@cQaRRPPP@cR#Qa PQaQP`pPV4P?PičWVRХPݠݠďh R+b'R P P@b @bRĤh Wīh 8 PP^W UTSSPPP@eǙPSP0PV֬SSPPP@e" VQSPPQ0QV֬SSPPP@eЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQRRPPP@eP R_R"ݬSSψPcǯPSЬQaRRPPP@eQaRRPPP@eR#Qa PQaQP`PФPVSФPݠ ФRS PФPРQРPQP]D D(DRD RP0Ф0,P^ݬ^ݬ^W VGR8ЬUeSSPPP@fPS_IUXXTUScQQPPP@fPQ_QScQQPPP@fPQ_dSPЬQaSSPPP@fPQaSSPPP@fS#Qa PQaQP`PX~XϰSPS̬S PP|^ SVKRТP8"PЬP`i3UPTТPݠݠÏfuT+d'TXP P@d @dTäfFUëf7[CP ^aSRТP8XPЬP` Pj8P^!YWcTФRݢ P$PU1ZPФP֠Ф$Pl.i'n e`# PPE1QPeRRPPP@gUeRRPPP@gR$1%PPP@g  1U~PUUVVSURbQQPPP@gPQ_QRbQQPPP@gPQ_cRXXPXfif8|~1ɏVjP X1ɔVjPѬlɚVjP_h XɟYn8լ?ФPРQРPQP]DD(DRDRP0Ф0,ФPݠ P$PU1Y^RQQPPP@bP֬QQPPP@bQ#֬ P֬P^R֬QQPPP@b֬QQPPP@bQrQR-֬PPP@bP֬PPP@bPЬPQ.*֬QQPPP@bP֬QQPPP@bQeQE9ЬQPP+P-Q֬PPP@b֬PPP@bP^ЬP`R֬QQR(Q$Q\ ֬ЬP֬QQRQЬP^RQQPPP@bPQ_'ЬP֬Q`֬QQPPP@bPߑQ_ٔP<^9UЬRb"DЬTRScQQRRRBeRQ_QScQQPPP@ePQ_dSPЬRbTRS6RbPPT(P$PP\RbRSPRbPPTPRSSTd"TP֬ѬT.PЬP֬ЬRb``\ЬQR֬ѬTՔTP^uWZլݬPլPSXެUSe T%XQCdPP2PPPQXSSeQXPЏSSSPSQPQ{SPPQQYI4VfRo79s_춳wx"Gr'rO4 #7 zJ1k3oN8uMZ]Tk؇{%0ʒHm/+j)1?W͢Ç"z0.4 mn395rӿ洼#9>W<2a*T[NM=HMXqL?2JGE,;}>n :-J VD|- aߋCÙV FENvr7kGO=}*(F=!ITi#9@i*k{(JYZVl`㩆Yٓ2 \շ xS1-NZkpŤd퇁i%) ;PBpwj]ta:" j.Q(? j:\qrѫ3Nz"P~5%åمm`q͙\rt1Sݠ`^Zf\}=mW @Ep}u+Xx'? slDINa--י߰q̍O%1y8)>&X?h8T] _Eľ;J<{'Z j~4LuB??CƯ%cdǟB&4olzlglz6Y >qj 51CXfUz='D@z `^`j(2-;FY%OKR/[0 U Yn*QF޸D8Ap;w$I!+޳ao&a cMQ Bs.JVuOxBPFuIiⶥY 㪏Wb58Z!BjBIp=W osŐ2`}Ǹ s|/rvzen}@O`џ&Q:wfF(~.5˘k*8̌Q]u0AL% dw*w[v| G7"F1ˮe*=m!"yRM>B0fȳV%p]Xƪ;Q{& W҅7_Bl1j̐v&LgԴtT7ز*TGE}q Sg2+!h#!:-UzBmX.$*] >?.6 @Ch+wxSg`bUÞ%S&RzTb~qGuFJy.VVp#vmXbS C?1b"wB\nnt(r?5ͷ9<%VJ>m4x Kֲb~b7nrm9VD+D@c8M(5gX m3B `>}T}H$G]󜧣X)H) Ֆum S*mMc<#?~}D _熊Xu7 ]:|qo, h&A:zH '~ڴ/:i˘f0LLErl @^ς*zrI#0Χi5TJzHh*"qt`)&!e”8h]x6oPє- MCCFK$ &)->ܮ&gu䣫1,Ē0ow삀,ڮx~/BS°lPY[r.'nCr Dz.EE:&)TܘL0'ؾե W.JŅ(bBԈBp^u@Zq:& UDaaQs6GmeN|f-~sX;fJ@Y%Bp@* */\({.r[j`*N/$8=wa !LS[=[$%A 䞱cq136gHƆ֡UAiRl@э Γ++CvU9m ?pHd`㤧tT)[? Z޿+"Bojؤzk$}J:Ô<_i|q:-4VaUi;5ɧV:*P0Rօ%r(4/'l Ĕ@cMԁ .QA#;lt?w0tc [i7d8i֕w_{EI!9 X-Ikk%mZ5i%21Bg$ A+lwn4>[U>'!@6noy|H7nȿpa!kufDqiY*wxYstIVa 00[V^/|[&OtFl' GAQ0m usE]&ZRe ẄHtuTu|p0S)4cՎ\V3F9[tWE!dh&Q?Hr"͔6FH֤ѿO*׺'sآI1%2zb+ *Jcz-jpͯ-+ֱKy :n}cnI>l&Ku;.B2@}ݣwQąށ椶&v 34O)%sov~$#L( F.]Pxv^@\oIP'1CC7;,d>ډ-[=P`M2 ـzs-o|wBS¿XkGل] IJPo[|q{iJ :_`o7,~̹|9(| = Ā?Wi["=^@pu9jI~䵘3m96mFbx̘5fJ0XMӖIt4,>qϬ:$+W0d M/9&3InRQ|'i_.u=\D5hnq5*qy>ly4 \Sǭ]j^uP7Yt %+LqPAk!}^ d~z }Ks%t`p6ƫ-Lm݀jzbl<W |_%#pPU_ݞng%-99Z @GqdL8eYŞBp.XLSŐa5f948rԭVW_0L~Q?%0'%Rñf)B /ROPzs-5}8i|&eBwEo.AmW'$eCXGzӀcv'@1Y{nFFE D$7qP7xF#r"0Rf7ל8N qTMqE%Ūd2`e#9z#1)8-x3rFŸ C1#hz2;g8Ș2p?*AYAܲp#3QQDY1iqxN1ݲeM&o߉)#?k` ;7ٕe9zq3%޲LzCAdVe&ၬ€6R7/np=n/;@l嵵јhIPLV6xO}Pоj+Aƌh*7r<-O_:,Es*xE )i|h. ( @zg 1+ ȁ'%: T 0o̫H)Oݡj2#7gzi!yP|q0bYđd?B#*K UG*[ _Y \5TDrOR [h*umfvi@8%c?t}5QE+w)5SW FPMtyBĎRQ\+%W6ԅ 1p eLӾ7-I Kl݇Ғo X^J1ձp2["#`o0aŒ}iwz@[(zF^CNZIZp&&(6$ ) }=+[VJКyL/%Ls؅h6#LMrV'Y ϱHAdIrDt@ Q,7Pj -ODPc- W@iĀ^tR*2gG@jUC9cgzAG_֟r:uT4S{?a\/@^y.V|j#IAKҞ|3QmQaprX!+nIKSvqT m|Z;HpSr0:ϐi'S2*/DP_X~~E*h]F[qY,y#/gXK="䛧DVeu5p{ō4&IB& Y8[p VMS.BCK[V9.BIN]ICONT.EXE;1SS2PPcXc ݬ,PEլ bfRKPѬ & Q2PPQ~ݬ cP ݬ3RPbVfRѬ լ PݬPUݬ PT URTRRR4PSUT ݬ ݬ PPU~ԣI4ccRSSI4SP@@DTLtl< tL||, t 0 8 J @VAXCRTL CMA$TIS_SHRLIBRTLMTHRTLJJJJ TMAIN mainexecute 0report$Trmfiles$ xusage5   y UTILtcalloc-trealloc xround2! 2  TLOCAL TRANS trans 0trans1̐ writecheck $ h TCODEcodegentraverse binopT Hunopa unopb setloctemitlab, emit, ̫emitl0 emitn0 ,emits0 \alclab       TLEX tgetoprD yylexgetident4findres ȸbufcmpL getnumTh getstringT ctlesc! octescW 8hexesc setlineno setfilenmnextchar$yyerrorAhmapterm tfatalt hnfatalltsyserrT (quitg quitf` 3 t   LNKLISTaddinvkalclfile8addlfile^ 6 TPARSE xfree(yyparse7 k  "  TSYM`loc_initinstall putlocputglob 0putlitllookup5<glookup5tclookup@klookup4 alclocX@alcglob\ alclit\ lout?8constout routo gout / `O4 TMEMtmallocX tminit tmfree m 6 TREE Ltree1 `tree2, tree34 tree48 tree5< 4tree6@t buildarrayTint_leaf4 c_str_leaf4 i_str_leaf6 LЯ LINK ilink lwarn` lfatal\ tsetexe 5f  !Ox LGLOB|readglobscanrefs|scanfileH referenceJ 6|9_7T VMS.BCK[V9.BIN]ICONT.EXE;1  Ҹ( LCODEgencode setfilel lemitp plemitl lemitnx lemitrxlemitin8lemitintx lemiteven4lemitcon lemitprocOD  gentables intoutl\wordoutloutblock{D flushcodeKclearlab* backpatch 6 ݧ          ( f LLEX tgetopc| getid8 (getstrgetrest getdec lgetoct getintgetreald 8getlab H getstrlit hnewlineJ 5t#  LMEM linitdalsolinkgetlfile alclfile( Hlmfree? F5 LSYM instid_putident4 !lexeql3P!alcident p!locinit+!putlocalx# putglobal\$putconst%putfieldt&glocate5&flocate5& alcglobal`T'alcfheadN'alcfrec 'blocateG -5   2 OPCODE LONG ( longwriteo R  ( GETOPT |(getopt |(" ALLOC )salloc[ )allocJ )FILEPART(*pathfind,pathelemHL,tryfileq ,fparse-makenameL .smatch} (*  STRTBL.init_str1. free_stblD/ init_sbuf<>=>><<=<<~==-%*-~===\/+=>=><=<~=+^?<-^<->[:]*[]:=:=...++.No interpreter file supplied.icx.ICXicode file name too long.icxrbrbcannot open interpreter fileTried to read %ld bytes of code, got %ld bad icode fileI9.0.00/32icode version mismatch in %s icode version: %s expected version: %s I9.0.00/32cannot runNOERRBUFTRACECOEXPSIZESTRSIZEHEAPSIZEBLOCKSIZEBLKSIZESTATSIZESTATINCRMSTKSIZEQLSIZEMAXMEMICONCORE: =environment variable out of rangeenvironment variable out of rangeenvironment variable not numericerror in startup code %s error in startup code %s: %s System error in startup code at line %ld in %s %s Termination dump: co-expression #%ld (%ld) call to 'err' &errout&input&output abcdefghijklmnopqrstuvwxyzrABCDEFGHIJKLMNOPQRSTUVWXYZunimplemented opcode: %ld (0x%08x) interp: termination with inactive generators.%02d:%02d:%02d%04d/%02d/%02dpmam%s, %s %d, %d %d:%02d %sVMSVMSinterpretedinterpretedASCIIASCIIco-expressionsco-expressionsenvironment variablesenvironment variablesexternal functionsexternal functionsfixed regionsfixed regionskeyboard functionskeyboard functionslarge integerslarge integersmultiple regionsmultiple regionspipespipesstring invocationstring invocationsystem functionsystem functiongraphicsgraphicsX WindowsX Windows?Icon Interpreter Version 9.0. July 16, 1994/-%*-++^:=<-<->:=:|||||=>=><=<~===~==>>=>><<=<<===~===^*=......[...]!?set reference out of bounds in randomtable reference out of bounds in randomlist reference out of bounds in random[:][]~--**++\/.&deallocation botchanycmp: unknown datatype.order: unknown datatype. ???? from line %d in %s&subject&pos&progname&windowname: unknown event keyword variable&random&trace&dump&errorname: unknown integer keyword variable[%ld:%ld]name: unreferencable static variablename: cannot determine variable nameL[%ld]%s.%sname: invalid structure reference; co-expression_%ld : @ returned to failed to co-expression_%ld %-13s: %4d : to by ? ..} @ ! {create ..} . field%slimit counter: [ ... ] from line %d in %s returned failed suspended resumed; co-expression_%ld : @ co-expression_%ld ; co-expression_%ld returned to co-expression_%ld ; co-expression_%ld failed to co-expression_%ld local identifiers: = = = global identifiers: = _NL:_NL:rawrw-%%can't open %sSYS$COMMANDSYS$COMMANDkillkillinteger(~10^%ld)illegal objectillegal objectlarge integerreal numbercsetfileprocedurerecordlistlist elementsetset elementtabletable elementtable element trapped variablehash blocksubstring trapped variablerefresh blockco-expressionexternal blockinteger keyword variable&pos&subjectillegal objectillegal objectillegal objecticode file too largeinsufficient memory for icodeinsufficient memory for string regioninsufficient memory for block regioninsufficient memory for qualifier list&error&pos&progname&random&subject&trace&dump&window...&window = &subject = &pos = &random = &trace = &dump = &error = &subject[%ld][%ld+:%ld] = co-expression_%ld(%ld)record _%ld()(%ld)set_%ld(%ld)table_%ld(%ld)procedurefunctionrecord constructor%s &input&output&erroutwindow(file(...%s%ld&null(variable = external(%d)%soutimage: unknown type\"\'\\\b\d\e\f\n\r\t\v\x%02xlist_%ld(%ld)list_%ld = [...,empty activator stack ?bad ipc/file name table \"\'\\\b\d\e\f\n\r\t\v\x%02x""_%ld(%ld)co-expression_%ld(%ld)record set_%ld(%ld)table_%ld(%ld)list_%ld(%ld)procedure function record constructor &input&output&erroutwindow(file()''integer(~10^%ld)&nullexternal(%ld)&letters&lcase&ucase&digits&cset&asciiICON_HOSTSYS$NODEVAX/VMSblackwhiteRGBi:.5/.5/.5fixedfixedfixedmonolucidatypewritertypewritercouriersanshelveticaseriftimes*mediumdemiboldbolddemilight*ior*narrowcondensednormalwideextended*p*-*-%s-%s-%s-%s-*-*-*-*-*-%s-*-*-*%.*s%d%ssansserifserifsansrmediumdeminormaliso88590adobe ______display=display=reversehiddenrootnormaliconicmaximalhidden???iconicnormalmaximalhiddeniconwindowroot%d,%dsolidmaskedstippledpatternedtexturedopaquestippledopaquepatternedsolidonoffdasheddoubledashstriped%d,%d,%d%d,%d,%dDISPLAY%s%s%d,%d,%d%s%s%sstripeddashedsolid%s%sreverse%srootwindowicon???%d,%d,%dunknown%ld%d,%d,%d%d,%d,%dwhiteblack%d,%d,%d;f VMS.BCK)[V9.BIN]ICONX.EXE;17E%d,%d,%dblackcheckersdarkgraydiagonalgrainsgraygridhorizontallightgrayscalestrellisverticalverydarkverylightwaveswhite.xbm.XBM.xpm.XPM.xpm.Z.xbm.xpm.xpm.ZrXPM%d%d%d+%d+%d%d+%d+%d%dx%d%d,%d,%d%c%1x%1x%1x%c%2x%2x%2x%c%3x%3x%3x%c%4x%4x%4x%cverypaledeeprGIFwbGIF87a%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c0123456kxw@abMcdZ0$%&L*+-g/?@}}~>]|+V%c%d%cboldcondenseddemidemiboldextendeditaliclightmediummononarrownormalobliqueproportionalromansansserifwide%d%c%s%d,onoffonONOn%s,%d%d,%s%lf%conoffonONOnonoffonONOnonONOn%d,%d%stexturedmaskedsolid%d,%d%soffon%soffon%soffon%dx%d+%d+%d%dx%d%s%s%sascentbgcanvasceolcliphclipwclipxclipycolcolumnscursordepthdescentdisplaydisplayheightdisplaywidthdrawopdxdyechofgfheightfillstylefontfwidthgammageometryheighticoniciconimageiconlabeliconposimagelabelleadinglineslinestylelinewidthpatternpointerpointercolpointerrowpointerxpointeryposposxposyreverserowrowssizevisualwidthwindowlabelxySundayMondayTuesdayWednesdayThursdayFridaySaturdayJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember%.3s %.3s%3d %.2d:%.2d:%.2d %d wandandInvertedandReverseclearcopycopyInvertedequivinvertnandnoopnorororInvertedorReversesetxorX cursorarrowbased arrow downbased arrow upboatbogositybottom left cornerbottom right cornerbottom sidebottom teebox spiralcenter ptrcircleclockcoffee mugcrosscross reversecrosshairdiamond crossdotdotboxdouble arrowdraft largedraft smalldraped boxexchangefleurgobblergumbyhand1hand2hearticoniron crossleft ptrleft sideleft teeleftbuttonll anglelr anglemanmiddlebuttonmousepencilpirateplusquestion arrowright ptrright sideright teerightbuttonrtl logosailboatsb down arrowsb h double arrowsb left arrowsb right arrowsb up arrowsb v double arrowshuttlesizingspiderspraycanstartargettcrosstop left arrowtop left cornertop right cornertop sidetop teetrekul angleumbrellaur anglewatchxtermnum glyphssalloc(%d): out of memory alloc(%d): out of memory $@$$$$P$$$$x$P$$4$$$H$x$$$$l$$$$,$$0$H$`$x$$$ $$$$L$$|$$$$ $ $T$tcan't read interpreter file headercan't read MS-DOS .exe header -ATXK4@>IA!hblackblackishbluebluish2dbrownbrownishdcyancyanish2dgraygrayish2greengreenishx2dgreygreyish2magentamagentaish,2dorangeorangish2dpinkpinkishYKdpurplepurplish2dredreddish2dvioletvioletishKdwhitewhitishdyellowyellowish<2ddarkdeeplightdmedium2paledmoderate2strongKvividdweakY%a%e%m%{%%00wwwWWWJJ00vvvWWWJJsttvvVVVVJsttuuVVVVIsttuuVVVIISSTTTUUUIISSTTTUUUUISSTTTUUUUHFFTTGGUUHHFFFGGGGHHH00xxxWWWJJ!11vvWWWJJr11vvVVVjjrrtuuVVVjjrrtuuVVVIISSTTTUUUIISSTTTUUUiiSSTTTUUUiiFFffGGggHHFFffGGggHHnzxxxXXXXJ!11xxXXXjjp1122)Vjjjrr222)Vjjjrr222>>>jjRR--//>>iiRRRT//'iiiRRff//ggiiRffffggghhFffffggghhnzzyyXXXXKoozyyXXXjjpp222)Xjjjqq222))jjjqq222>>>jjRR--//>>iiRRR-//''iiRRff//'giiRffffggghhEffffggghhnzzyyXXXKKoozyyXXXKK???22]]]jjqq222]]]jjqq2233>>jjRR::33>>iiRR:::/''iiRR:::/''iiEEfffggghhEEfffggghhNNZZZYYYKKOOZZZYYYKK???@=]]]kkPP@@=]]]kkPP%%%3]]kkQQ||3344((QQ:::444((QQ:::444<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<{- VMS.BCK)[V9.BIN]ICONX.EXE;17"8&&&&&'' '' ' ' &' ,' 4'<'J'W'^'a'd'i'l't'~''''''''' '!'8'"'#'$'%'&'+(' ((() (*)(,-(-2(.7(/?(0C(1H(2M(3T(4Z(5f(6h(7$h $\ $$$+$H$  $@`$ $ $xL$$ 1$ n$L $$p$ؽ$ $($4$x9$$$, $?$ E$P<$N$آ" $Y$X $ b$0 $x$h$ܿ$>$' $P$< i$ q$ |$ $L$ $" $' $* $D. $ $!$$l1 $4 H $n$2$$̜ $4$dl$|6$: $< $? $P$$XA$C $lT $8o$$$ $8E#$G*$] $ԩk $Xp ${$X $xA$tb $v $$f $ $Hw$Ps$'$$4$$$H$x$m$(-2<CHUYeky.$p$ܟ $H1$U$,$Z$$R$m$T$$V$h $lX$$$I7$H$,J$Z$0x$И $Hz$`}$x$$$$} $J @$,L M$M c$On$DQv$R~$ \$s$ $^$ $x$$$U $4V$$c$$wWJj()xXKk[]yYLl{}zZMm^=kbgcrmywx@ABCDEFGHIJKLMNOPQRSTUVWXYZabcd0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}$%&*+-/?@N)))))) ) ))) ***&*,*7*=* K*"U*$c*&g*(n**{*,*.*0*2*4*6*8*:*<*>*@*B*D*F*H*J+L +N+P+R'+T-+V4+X;+Z@+\O+^Y+`d+bn+dz+f+h+j+l+n+p+r+t+v+x+z+|,~ ,,,(,8,I,R,Z,_,h,q,z,,, )$)0);)A)F) S) Y) `)e)j)n)q) |) ))efghi jk8lHmVnnopqrstu1vHw_xlyz{|}~ ?f|  E S  ' Q | - . / 0 18 2_ 3 4 _   X" 5   8 8 %%%% %% %%%% %@&@ && &%&+&TWPQVUSR,yxؠh(ll @\ԕ4Phԙx00XHl8(`h<0P̝h 4'VDEPFHIJTLPQRR S8SdSSSU# VMS.BCK)[V9.BIN]ICONX.EXE;17@OOOO? Ϛ? O^TЏЏdd1ˏ_PP1ˏPP//am^?Pݬ RPЬSˏcPP޼RSzpPbndPЬPРPpdPdPݬ PJQ?PndPЏ޼RpPbdPpdPP^sTЏЏdd1ˏ_PP1ˏPPdd/1?PݬJ gPЬPРPpRqR qRdPjRdPˏPPdPЬPРdPdPݬϴ PKCr?PЭdPpRqRa qRdPjRdPP^ЬScݬS#PP}cЬTdSRS *Ѣ #~ P |~ּHPdSS~~PR |~ЬTdФPRSTSTPSQSQb2P^sYЏiiЬSc }ciPݬvP1ЬRduP |~QެXЏPRRSRQS@hWЧVU`TTRR2RRxRRxRSUSTRRRxRRRcPQRQRiPP^RЏbb}ˏ_PPcˏPP..VL:?Pݬr2PˏPPbPЬPРbPbPݬ PЭbPP^RЏbbcˏ_PPIˏPP..<2j?PݬP}bPbPݬZP P6PЬPЏ`bPЬPЏ`bPbP^TЏdd1ˏ_PP1ˏPP01~?PݬvPЬQСPpRqR_ qR&ݬQP dPdPЬQЏajRdP}dPdPݬP.H1P?PЬPЏ`dPЬPЏ`dPpRqRϢ qR'ݬݬP dPdPЬQЏajRdPdP^ݬZP*ЬRp~'wP |~HЏPP^ЬTd}dPˏ_dRR1ˏPPl1?PЬTФTޮXЬWnnRQVfxQPfSPSPPSSVQڔbnRgniPЬRТRpRݬpR~+ HЬSˏcRRУRâ RRxRRݬSݬݣ}PPЬRbݢyP |~2P^ЬQa}a PݬPSЬRQaQSެ XhRЏbЬЭPЭRRSRTSAhWVU`SSQQ2QQxQQxQRURSQQQxQQQbPTQTQPP^ЬQa}a Pݬ Qݬ4PPP^ЬQˏ/aPP}aˏ_aPP1ˏPP /s######1z?PЬP}PЬPРRb }߭ݢ ݢU,ѭ `P}PТP}8PЬPРR 7g~HPPP ~-ЬQТaPPЬPˏ`RxRRR}b^ЬTd}d 1ˏ_dRR1ˏPPg1n?PЬTФTnnYЬ WЬXXRQ޾VfxQPfSPSPPSSVQڔbXRgXePЬRТRpRݬݬ pR~EPЬSˏcRRУRâ RRxRRݬ Scݬݬ ݣJPP ^ЬRbPbݬ|^VUռPެTdRRRRBRJSfAP,SRePBdPePB PѬ` `ePB`PSSfPQ1/ݬPРPP|^VJT?USf;xSRdPB`ݬPePB`Qa BRbPPSSfݬ<^etU RЬTbլRzTP{ PQP0PSSb TMPTSTS$WPRߥR:STRzTP{ PQP0PSSb T-rЬP SRS`R$^XЬRТTԮ + +||ZYԮԮbPTSRˏRUEh PTSRPPˏRP@hR+R-R TSVP VVRTˏRUEhSYq\$e"V0RUnUPaVP [U[s ֮PZTSU UURˏRP@hRr RR/ݬSTj ~~PUU |~UPR.r֮ TSVP VVRˏRUEhPYq\!e"V0RUnUPaVP [U[Zs֮TSU UURˏRP@hYPRe RE1֮ TSVP VVRR+R-RTSVP VVRˏRUEhPˏRUEh+ Q0RPPQTSU UURˏRP@hՑ+ЮVήVVZˏRUEhTSPRˏRP@hTSˏRTDhPծ 3Z/q!qQ޼U +[T[TTePծ .ݬSݮ ~HPRR |~RPծ PZRR'PZRR|PZZPPZPPSpVpTSdTVxSSSdTTZdVPfVZp~pP -rp2P^ЬPЬRRPPQRQ PQRQPլRPPRRPP^oT֬ЬRRp~b  ֬ ЬSc.S0SPߤSPS9.SRbP&e~SbPE~SbP ߤSЬRRP@b. ߤRЬ RݬuPbЬ^Ь SRЬWVfxRPfQPQPPQQVRڔcЬRì SbЬ ^ЬQa pPݬQ^ЬQa Ь Pݬ Q ^ЬScЬ RݬPbЬP S1^ЬQaЬ PЏ`ЬP Q^ЬQa Ь Pݬ Qm^ЬQaЬ PЏ`ЬP Q ^ЬQaЬ PЏ`ЬP Q ^ЬSc*ЬRp~jP |~ЏPS^ЬRb } Pݬ R5^ѼЬPЏ`Ь Pݬݬݬ1^Ѽ } Pݬݬݬ^vVYT8X)R:WSLUլb}hg!PЬbЬP}\hg P}`hgfc!P``bРcP`iMդe  ݏiݏߦberhixeb\Wݏ^1RЬ$ЬЏ2|~%^Rp~gPЬPЏb|~^ؼ P|^߭ЬRP ЭQQSPQSSЏbPPb諾ТPԠPaP@pSrSUPpSUpU~#gPЏbբ<3~)PPP}bP2P^ЬRP}bP2P^ЬR6P}bP2P^ЬRRP}bP2P^ЬRVP}bPP}bPP ^ЬRѢ}bPP1߭Pe~PЭRRR~bPխЬRPSݭЬRsPSSPЬRSЏbPPIA!hIA!h^ЬR>Pf~0PpPGЬRpP~dPЏbբ<3~P2P^ЬRPf~P=pPЬRpP~udPЏbբ<3~{P2P^ЬRVPf~HPp~pPS"~PЬRpS~cPЏbբ<3~PP^ЬRPf~PpPqPqPpP~~lPp~6pPS!~aPЬRpS~+cPЏbբ<?" VMS.BCK)[V9.BIN]ICONX.EXE;177O3~1PP^ЬRPf~PpPqPqPpP~~PYp~pPSE!~PЬRpS~sbPЏbբ<3~yPP^ЬRVPf~HPp~ pPS"~PЬRpS~aPЏbբ<3~PP^ЬRPf~Psp~~|P!p~jpPS !~qPЬRpS~;aPЏbբ<3~APP^ЬRPf~PeϗPf4DPЬRpP~`PЏbբ<3~P2P^ЬRPf~Pe4DPfPЬRpP~E`PЏbբ<3~KP2P^ЬR&Pf~PЬRѢ;p~pP~_PЏbբ<3~PPЬRPf~PЬRp~p~YpP~c_PЏbբ<3~iPP ^SЬR?Pf~1Psp~~PЬRѢ;p~pP~^PЏbբ<3~PP蟢Pf~Pqp~~pPqcp~[pPpcp~HgPЬRp~3^PЏbբ<3~9PP^ЬPѠj~PЬPР QС Џ2P ^լg~P߭ݬЬPPSЭR"SRPcRPS}cP2P^߭ЬRPe~TPЭR RR~PЬRˏP@̞2P ^߭ЬRPe~P߭ЬRPe~Pխݭ~NPЭRRR~2Pݭݭ1P }7PP4^!Z"[}k}k}k}k}kj̞jЬS }cЭjPˏPP3b1P?PSЬRТ cЭRТ RТ VRV=\PW|~ЭjPUЭRTVRVRP}VRVRЬRWЏbЭjPЬSУ Rݢcr P|~@ЭjPЭjPЬRТ ЭRݢ ~  P|~ЭjPЭTЭSУЭTЭSУ ЭTЭS}88RЭSB.ЭSBSݣSЭSBRR  ЭSBWSЭRGc1\_YPGVvRbSЭRFcխYiPX|~GЭjPR(hЭS ЭRXFXЭRТRXbSЭRТcխVWW SЭRGc1fЭSգ RѣR SYЬRЭЏ bЭjPЬSУ R~c P|~ЭjPЭjPЬR}bЭjPЬR{~NЭj2P|^gVRTU߭eЬRPe~PЬPѠЏEѠi~P<~PЬQСPРS~PЭRR~PReeФPݠݠߦ'S5S4Sݭ/ }P<1~P}P^eQFޡKB};E}P<^UTRe7SxRP@dP``PcS PRReP ^ЬRJPe~TPЬR#Pe~-PЬSˏRRˏRR)c֦P |~PPң RRЏ2P ^ЬRPe~PЬRoPe~yPЬSˏRRˏRR)cﮮP |~4PPɣ Џc2P ^ЬRPe~PЬRPe~PЬSˏRRˏRR)c華P |~PPͣ Џc2P ^ЬR6Pe~@PЬSˏRR5ЏcP |~PPң ЏcP^ЬP`P |~PP^ЬRPe~PЬR[Pe~ePЬQˏPPe~APЬQСSˏPPS С T>S:SPxPPTP-ЬP`P |~PPS ЬPԠЏ`PS ЬPՠ RRRЏ`PSЬQxSTЏaPЬRբ SQQ PQPTЏbPЬQSSS RTPSRPPPЏ2P^ЬRPg~PЬRѢ~PЬP RR2RЏ`2P^ЬQˏ/PPo~P<~PЬP`UdP |~kP2P^߭ЬRPe~8Pխݭ~PѬݭ PЬRݭ2P ^߭ЬRPe~P߭ЬRPe~PЭRRTЏS/PRЏTRSPRR~PRЭЏbRPѭTѭS=_@ЬRR%Џb~P^YZ"[}j}j}j}j}j}jiiЬRˏ_RR1ЬRˏPP{B16?P߭ЬRUPe~?ЭiPЭPP1?PЬRТ RТVVSxSS8SVRRS,VRRS~[VP|~ЭiPSЬRТ cRVMPb|~ЭiPVVNP|~ЭiPЭRЭ Т V1x|TSЭREc1TMXENWEkS1PЭRC1RhPb|~ЭiPgP|~ЭiPЭPЭР ЭRТ PЭR} ЭRТ PЭR}$TPTxPPЭRТ R@PЏ`ЭܠЭRТ1aS1JUU SЭREc1%ѭVЭRТ R 1VVЭRТ R17ЬRТ STRSbRT LPb|~ЭiPTTLP|~ЭiPЭRЭТ T1ЭUХ URSVЭUCfKPCkP,ЭU@ЭU} ЭU}ЭUХPSS VЭUCfѭ!T~ЭRТ R7T~ЭRТ Rݭ~ЭiPЬSЭԣЏcЭiPЬRТ RТTRTJPb|~ЭiPTTKPS|~ЭiPЭRSS ЬRТ WT`ЭUХ URSCQ/PCkP@U } ХUPSS CQZUTЭRТ RЬSЭ̣ЏcЭiPЬSУ SУ SУ RSRIPc|~ЭiPRRJPT|~ЭiPЭSTT ЬSУ URAЭSУ SQPRxPSCS}cPPRTRЭSУ S ЬSЭ̣ЏcЭiPЬSУ RТTT~cP|~ ЭiP'TTЬRТRТ RЭiPЬRs~Э2P^ЬPРPР PЬPРPР PS^ЬPРPР P$ЬPРPР P$S^}S^ЬPЬPaS^ZYsX}i螭iЬRˏ_RR1ЬRˏPP@S1?P߭ЬRPe~ЭiPխݭ~0ЭiPЬRТ RТTRTcGPb|~YЭiPTT8HPS|~6ЭiPЭRSS ЬRТ WTbЭUХ URSCQ-ChP@U } ХUPSS CQЭj TЭRТ RlЬSЭЏcЭiP߭ЬRPe~wЭiPխݭ~ЭiPЬSУ SУ SУ RSR3FPc|~)ЭiPRRGPT|~ЭiPЭSTT ЬSУ UREЭSУ SQPRxPSCS}cPPRЭjRЭSУ SYЬSЭЏcЭiP߭ЬRzPe~dЭiPխݭ~ЭiPЬSУ RТTT~cP|~ЭiPЭj?TЬRТRТ RЭiPЬR}~Э2P^ЬTˏdRЬSˏcPRPIRR?TJPRSARP(PPPS'PTPOPݬqO<^UЬTd<ФSУ Rݢ P1У RP {PxPP@UnddФSݣ>WPTTDT>У QRPTPRС QRPTPRPPTT¡TxTRBUUPP^ASTЬRęݢWPbPˏPP^CC( @Ϫ VMS.BCK)[V9.BIN]ICONX.EXE;17fU^Nyby}yyyyy31PP?PЬRĠݢPbPЬSУ RТ R}cPЬRĮݢPbPЬRIJݢPbPЬRĸݢPbPЬRĽݢ|PbPЬSУ RݣXPcPЬRݢ=PbPЬRݢ"PbPЬRݢPbPЬRݢPbPЬRݢPbPЬR%ˏPPݢPbP{~2P^ЬRPg~dPЬRbݢ PPP<^AUʲS߭ЬR`Pe~PУRRTRQ ePQPPЭPPRPЬQRPPЭaQ8PeRTRc~PTP ^%S߭ЬRPe~aPgݭPѭPЬPЭЏ`2P|^-VﶱU߭ЬRLPe~PfݭbPѭPХSSTЭЭRSR RSSTSRЬQSPPЭaQPfPTPe~rPTP^ЬR Pg~:P߭ЬR'Pe~PЬRPg~Pխݭ~qPЬSգ}ғѭíRRxRR RЭcPݭCPW |~xPЬSУ[УVUWRWUXRX/[VTTPPVWUSRSPprPV WUQRQRXWQWUZQZ4[VYPVPPY!WURQR[VTPPT WURQRQZЬVЦXЭYYX%WPXT TUTYSSXSʏSTSR$PWUTXSSTYSSXSʏSSTPЦ RXYYXXSXSPXSXSЬRWЭbP4^WީXZ}h}h}hg̞gЬRPg~ ЭgPYެVfRx~:FTRTR1fUxTRPB`B`PЬPPB`e~ЭgPT@xTSfPQCRTPxPP@Pb`ЬPRCb~iЭgPTPTP1vЬRݢJAP|~3ЭgPЬSУcѬ KPPe~ЭgPЬRѢ~ЭgPЬRPxPPT@dUS Т Тѭح1ЭR֭ЭP֭ؐ`bbTTPPA--1P?PSЬP1PSЬP~PY׭S߭߭U߭߭SRR$R @P|~ЭgPRS*PЭP֭ `SSTTP@jPhPSѭح1YЭgPЬS|Pà RR2У }cЭgP^[ZЬR(Pg~BPYURUR1ެWVxURPB`B`PЬPPB`e~PUP |~PЬSУcѬBP?Pe~IPЬRѢ~,PЬRUxUUPE`V WТ TТSTW1}USRSbbXXPP>fRFFRFFFFFFFFFFFFFFFFFFz1:?P׭ЬP1 ЬP1߭߭V߭߭e1RTWd RTTWd íRPP1Э߭߭V߭߭ePѭP,Э߭߭V߭߭eѭR ֭ЭPSSѭR"Y Э߭߭V߭߭eѭRЭP֭PRPSPS `ЭP֭PRRPXXP@jPhP֭TW1Y ЬRâSbHTä SRRkS PЬS-Tä RRkУ }c2P|^ެRвPެ UPe<Ѽ5eTѲTвPü вPРѲT вPѼмVV  ЬU޼SecTüeRzRP{cPQPPTe^ЬRhPg~P߭ЬRoPe~YPЬRdPg~(Pխݭ~PЬRբ}ѭ Т ЭbPݭ:PT |~PЬPРWРSTRRT&WSVVPPSRTPprPSRTRTTQЬRТUТ PUЭUURUR URURЬRTЭbP^WXdUЬRPg~PЬRѢ}Ѣ}=hѨg ѧ1ЬR}h}gPg~PЬR^Pg~xPЬRѢ~\PЬTФSRPTPdTPQެVfTQЦTAcPP2PPAb@eQQЬRբ }bPЬSУRRcR8P |~PЬSУ QУPRSRSPTPSS2SSCedRSRS2P^ЬRRPg~lP߭ЬRPe~EPխݭ~PЬRТTխT }bPŭTVVݭ~PV7PS |~PЬUSVeХ RTVb~S7!׭TWPRQWPP׭P ^ЬRFPg~`PЬRТSSݢ P7P |~9PЬQSaСRSRSPRPPbQ`PSPQcRP혏P^ЬRPg~P߭ЬRPe~PЬR&fPg~Pխݭ~PЬRբ}rѭ SíSЭbPݭ56PU |~PЬSУXУVURUSRS:XVWPVPPW"USRSXVTPPT UQRQUSRSЭTTUQЬRТS SPSTTSSRSRPpqSRSRЬRUЭbP,^ЬRBPg~\PЬRoPh~,PެWgRТX XVVV fTTPPUU QТRSTRR2RPxPPxPPPSUQcRRITVXV 9fRRPPSS UgPРPQRPP2PPxPPxPPPQSUaPPЬPР X`P<4^UЬRѢ}pѢ=Х6Pg~-PЬRѢЬRѢB߭DPݢݭkPѭPe~PЬSѣ  [߭ P7ݣݭPѭPѭ#ЭRЭRP e~ZPЬRFPh~0PѭPSЬRCSSPPQQ TТ RRSPP2PPxPPxPPPRQTbPPPЬPЏ2P|^WZЬRѢ }ﲠ Ѣ(?Ъ8P SP g~mPЬRѢ(ЬRѢ(B߭(Pݢ ݭPѭP(e~ PЬSѣ0  [߭0+P7ݣ ݭRPѭPѭ#ЭRЭRP0e~PЬR|Ph~iPЬR̟Ph~9PЬRXPh~ PWѭ1ެYXP@$UWSUPPSS TiQС PRUPP2PPxPPxPPPRSTbPPЭЏaQPUPPTT ViQСPRUPP2PPxPPxPSSRTVbPPWСPPSPTV`PPWWP֭ѭ1:2P ^﹜YЬRѢ}Ѣ=Щ6ﷵPg~PЬRѢЬRѢB߭PݢݭPѭPe~oPЬSѣ  [߭ P7ݣݭﶾPѭPѭ#ЭRЭRP e~PЬRエPg~PެVfRТXXWѭWLUХ SRRXTTPTP fPЭЏ`PP֭ѭWP4^WЬRѢ}\Ѣ=Ч6Pg~PЬRѢЬRѢB߭0PݢݭWPѭPe~PЬSѣ  [߭ ׬P7ݣݭPѭPѭ#ЭRЭRP e~FPЬR2Ph~PЭVѭLSP@RRPPTT UУ PQRPP2PPxPPxPPPQTUaPP ֭ѭѭVPЬRЭЏ2P^3TЬRѢ}Ѣ?Ф8P/Pg~IPЬRѢЬRѢB߭`PݢݭPѭPe~PЬSѣ  [߭ P7ݣݭ.PѭPѭ#ЭRЭRP e~vPЬRPg~KPíSЬRSPЬQС SRRСP׭ЬPЏ`P4^WЬRѢ}Ѣ=Ч6Pg~諒PЬRѢЬRѢB߭IPݢݭPѭPe~CPЬA- VMS.BCK)[V9.BIN]ICONX.EXE;17mSѣ  [߭ cP7ݣݭPѭPѭ#ЭRЭRP e~ҼPЬRᄚPh~屮PѭlެVTP@RˏRSS UФ PQʏRxRPxPPPQSUaPP fPЭЏ`PP֭ѭP ^ЬPˏ_PP1ЬPˏPP P1?PЬTPR߭Rݤ ѭ`RТ`Ф Rע}dPЬTSPS߭Sݤ ^ѭ`RТ`Ф Rע}dPЬRz~\P<^ЬPՠPЬSУ Qա С QQ ԡСUxURBR}bUPPPPסףP|^ЬPѠl~PЬRТ SbVգU@PУ Qա С QQ ԡСTxTRBR}bfTPPPPסףUUP2P|^ЬPѠl~[PЬRТ SbVգU@PУ Qա С QQ ԡСTxTRBR}bfTPPPPסףUUP2P^ﰠT}ﱕd잭dЬPѠ |~ﷹЭdPެScPݠ P;RЭP} bRPЭdݭcPݠ PЭd2P$^ W}}gܞgЬPˏ_PP1pЬPˏPP _1V?PЬPР PR'PU|~ЭgP߭RЬTݭwPVխ?ЭP֠fUfR} }ЭP QQѠQ"ՠ4PU(fR}ЬR}bЭgPЬRТ 蟢ܲPSSQ$PT|~ ЭgP߭SЬRݭխ0PTݭ^ЭR SSѢSբ4Rn TS(ЬR}bЭgPЬRz~ЭgP<^AU}Be螭e߭ЬRUPe~?ЭePЭSSTSݭ~ƸЭePTTRSPb|~ЭePSTPR|~ѶЭePЭQRR PSTxPQAQ}aPPSЬSЭЏcЭeP ^ЬPˏ_PP1ЬPˏPP F{s?PЬTPR߭Rݤ ѭ}dPPЬRﵰPS߭Sݢ ѭ}bPPЬRz~ȵP^ЬPѠl~PЬPР SգPУQա СQQԡ PPP¡PxPRBR}bסףP ^ЬRТPР SѣfMRRR|~RPS$PRR |~|~RPSЬPРRТ RSРRТ РRS RRxRP@P}`R֣ЬPP^aZFMX}[j잭jЬRѢl~aЭjPSެnS [U оR[SUTU1YWRЩ bЭPР Sѣ_ǨRRR|~RgPS(PRR|~۳ЭjP|~RgPSЭRТ RSЭRТ ЭRS RRxRVxTP@kQFP}a`R֣ЭP֠TTU1RЬR}bЭj2P^ LTЬRТPРSѣcǤRRR|~RPS$PRR |~|~RPSЬPРRТRS РRТРRSRR£RxRP@P}`֣ЬPP^mZRKX}gj잭jЬRѢl~mЭjPSެnS [U оR[SUTU1Y!WRЩ bЭPРSѣ_Ǩ RRR|~RgPS(PRR|~ЭjP|~RgPSЭRТRS ЭRТЭRSPP£PxPVxTRBkQFR}ab֣ЭR֢TTU1RЬR}bЭj2P ^)[}*}"ЬSˏ_SS1ЬSˏPP]1?PЬSУ ЭSݣ P|~ʰЭPkPU|~殺ЭePЭSУ 19ZRYXWPVЭSVxЭPVTT TxTQAS߭SjPRRSݭiPQխ3}c RQUݭhkgPU|~ЭPVЭPVЭSУ 1nUu ЬRЭЏ bЭP|~ RPS|~Э\PЬRSЏ bЭAPЬRl~c"2P^|~ PR |~6PЬP}8RЏ `P|^eVЬPѠi~PЬSУ PРUxfffУ RТTT$T<U-ЬP}`PT%ԢUBxPPˏPЏcPUЬPР Qԡ}`P^߭ЬPPP |~?Pݭ ^ЬRﲛPg~PЬRݢ PR8RPSSRPR |~̭PЬPRS`PP^oX0Y}i}`}iЏhhЬR3Pg~MhPЬRPg~hPЬRPg~hPVЬPРSРTRT1PPPA7}}KP&?P VVPVNPVFPV>PV6P1PV*PȏVPЬP~hPRRT1ˏVRVV w PVaV rwˏVRR+V1$RoPb|~ehPR|~@Pb|~>hPRТ URURcެWTxUSRCbRbgRRCbR}ibRCbRbЬRRCbm~˪hPURUR߭~ЬSPT1ѭ xRSBc~ohPhPV9V VЬR~=hP;PTPTT hPPVTPS|~ͩhPV0ФRЏpФRSt ФR}pЄЬRSЏbhP^ōZ.V#BWЏf잭fЬRѢЏﺃ "PѢi~ЭfPЬSУ RТ[Тnn~ЭfPԭˏnXYxjjjծO[<~gGPRR~ЭfPR9~qЭfP[<~gPRRЭfPR <UPRUUTThP|~ ЭfPխR{Pѭѭ =T~hP|~ЭfPݭݭiP|~ɧЭfPTgiPS|~ﬧЭfPխSTR1}Э2P|^͋V6UЏe螭eЬPѠЏɁ !Ѡi~ ЭeP߭ЬR Pe~ЭePЬQС PРTРRR~ʦЭePխݭ~WЭePݭP|~ЭePԭxfffRPTݭݭDPSS~LЭePS)~.ЭePTݭݭ5PSSЭePSSQyP  QQS }ЭeP^ЬRZPg~ﰥPЬPݠ FPP}X2P^ЬR Pg~`PЬRPg~9PЬPݠݠ PP}ހP^]TЬPѠi~P߭ЬPբP |~ĤPЬPР PРSՠPxdddЬPР PPЭRR~S"PPRSPPЬP}2P ^SЬRÑPg~PxcccЬRݢ PЏbP^=RЬPѠi~ȣPЬPР PРQՠPxbbbЬPР PPQ"PQЬPQЏ2P^ᅦY(X}Ww[VЧZЏhhլ}~hPЧVxiiiZV PV ќZ'fR ~ТhPVݏЬRѢ~hPЧVRլ1nUTxRSPC`P`1RVxiiiZV 6V5PV  fP ~hPVxRQePPAP`PРZZЬPPA`~͡hPxRQePPAP`PРV1PkePPC`aPЬPPC`m~shPZVES`^;En{P;bm˪7P8#G1k2z̧^UȌwٵF*~fF'_iy:&bu\`81/5vtj헖~LtM>5'wR$oꪘÏ4YW,dY9d36 j bG&8"x- ]p,sυ8c)vʵ;;LIgj|AavAe!mX\4HQ6f[x.{ //xLe}}>6*dBo@i[9:*~x h)'T7 u%7dʊy!S#vu`e& ,.4tyŒǹ.֓0p^os ̀&P`tũ*:w },@(D<%"hw47p@LS&A;%YtS:I<% =I͓S06;IYM^!$N8RQQj6NT'pwuIΣ 2}"\g7Qd1ꧠ2t5Խp Iʟ.DH:30Uy{Xy3 ,vz@EEv2HznL8+vy5{m-8|(ɢ`l@?e럪s`"2S=5ab(la>!s#vn.kF8$E/y3Tz~|awchs [2,9+ByKwǓ7@͠ї ϗѴ %F!S8 4NDX Hlwiba4U94adUN(_cf3L}YbUs[ uby׶~a6eubr8f8 !ʒ+M5e~Ѽ!Hxd8!:Ң_z!#8ysAJy_ GB(k?(p&IF{?-hl Mj=DY>_4@P38w8㬰 WÙ'o 'b9'qmM5gCS8ZO.!u9VbMiH[X6ر[jr[=tsgB좉x6"A?++|-JNZb}_ 6ffdN;:To_i 5ffKaJ(2ۜ8oͦ/.qZJN;H 6ĊB?6mdME,׬Q: OM"m2IpWAS·BH.1B `T&h &@b$Ka=˃r{+>޻OZVj['6I10^A'hPDܗ&7[ʜS>N;}.-%S\@i-NVȑLuN> oH]ޒ_Jc 8͜7O;iM<&~uS;3-;#CTs(=5s}\ZzF-͙[Fʙ:`ѸpI[Mqw)Y=!K0C @_Ч{ScRGr֎>'cks>V0tL\V_ 14 2ԠJI aFݢByKXQC3CzI[QP5x@.q_=&M:E55\JmwTaqR%4CG]ՠŲ[ZO`L] baL?\dO |e^x#m1Ԅ[qm(g{Vg<Av%!;< pP);;`1^[~""bnX-ٖp3 РfӺlbFZ 'U:^99"# YcgK $h/YDUEsZzOdA#TaQH'ZZ~ B\i7(v[5xdnRqɡN)Q&[b=c˹5m*^Re,Lp+t$LԜ ; ac{CPGpLVXݳ)ׄ*L4%i>R-؊6t٘wĩ~h䯛EȟlL"ƨP:|ւl\O3 UŦYT}IA K,x-߶g|Qj#)>_ʱkn&1Gwu@%GmGM>1uDI;g8(!..6[ZVq2>6A0ǸY]Zo䰘Oz3@9QԁfQ0G+,k5mP<mO8|FTGFĬOjMsj \}pLX$&#񲊷0YF_7Ju} hխ.fh2j=NimUPRG0hLOt{۰~ S} \+tKHß{?Ar^]("jW|Ҕk1rt[Aѱ'^G6{7E]< L4.:|6P-P?jܡ\GD5m 2Hh|sAWв}'{ pؿq1tʇGrfZ#&cbyF#)N5r,tbПW)91pƔgs/wٽY-#[#2f5h9\5qzjeYǧ}g|Lim hQ0]3:rJi 1dO`?Cvͥ,@:ARP vK @5VgXs~dB8nǬRf /W%/_IrF{9f`ޟ**xy &!;ꧼ&,k㓢; (Vc<@sPWTy6U֖$tPQc-3~C,"t~V6>xR_~>6YW6ac᧱ T.|`=̱?= _"%ș[扫$uƬw[)q\i(IFs/ؗmU26Ǝ=0fqQA@A540&dYTF6ωvy1G nɖڀ{L> ٟAd܊gZ/e,U[;WcSfPU+(kg. "G6e3c& Y"PQKgDM5ֺU:̈dZQe(i NU}V+YI=Sݾhve Ѥ7,R"[of[b{rz+pl^ԃFI 7M)KaQuֲNy3|RKz R,əJ1髀/^ϻʳ^ϰ["qr]/FD޶cP.u(`Zjl7N~&#h "v=+M˴&b7w^]N&#\PfʶbFO-47 :# (ELK@@o߄'EL,q{4Y( O'ęWُC VMS.BCK)[V9.BIN]ICONX.EXE;17¿|"xRQePPAP`PРZZЬPPA`~iPxRQePPAP`PРV1PkePPC`PЬPPC`m~﫞iPZVBwPRRsP|~\ЭgPЬPЭR`ЭgP^oVWլ1xWRЬPSBcP`mBP`PBc~PxWSЬPRCP`PˏPCb~ŕPxWRЬPPBP`PРUWLf ЦPf~PЦPˏPf~ePЦPРUХ SЬT| УU[߭߭߭߭WЬRTUPxPPR@be~PЭ ЭЭЭUW}fPЬQ}aP`^wnYx{XЏЏhhVլ1xVSЬRTCdRbwCRbRCd~PhPxVTЬRSDRbRˏRDc~hPxVSЬRPCRbRТUVVi ЩRi~ՓhPЩRˏRi~ﰓhPЩPРU<PW|~hPХַѬV1xVSЬRTCdRb1CRbRCd~9hPxVTЬRSDRbRˏRDc~hPxVSЬRPCRbRݢP |~͒hPV!UP |~晴hPVTT1ެVfUxTSPC`P`1fPRCbPЬPRCbm~AhPcxTQfPPA`RbARbWbP==3?PhPxTQЬPRAbӑhPTT13ЬREf<~WoP|~hPЏh2P,^9xX}e}ehhnլ1xnSЬRTCdRbuCRbRCd~ЭhPxnTЬRSDRbRˏRDc~ЭhPxnSЬRPCRbRТnivj mjR]j~ЭhPHjRˏR2j~gЭhPjPРѬne~@ЭhPnRR1߭xTЬRSDcY|PRDbe~ЭhPݭݮ PTЭhPT̉PSSTP|~ﳏЭhPЬRTSbЭhPnRzRP{PQPP~xЭhPnRR~WЭhPnVV1hެYЩW [2 Z߭xVSRCbW{PЬPRCbe~ЭhPݭݮkPUЭhPVSxSSiPTCdRb bvCRbЬPRCb~ЭhPVQxQQiPPARbݮkPRЭhPRݭݮ PЭhPRUjUCd{PЬPRCbg~ЭhPݭݭݮ PЭhPݭUjVV1n}gЭhPЬS}cЭ2P8^WbgVctU}$beeXЬPѠР Q СTXfЦQСTTXg~7ЭePxXSЬRPC`zPRCbg~ЭeP߭߭߭ݭT1P_ݭݭݭߧ,߭߭PRR߭P<2~ЭePЬPЭR`ЭePЭ2P$^%fUVլ1xVRЬPQBaP`mBP`PBa~&PxVQЬPRAP`PˏPAb~PxVRЬPPBP`PРWVLe ХPe~﵋PХPˏPe~PХPРWѬV1xVRЬPQBaP`oBP`PBa~LPxVQЬPRAP`PˏPAb~PxVRЬPPBP`PРTVPWT߭߭߭߭VЬRݬW@uPxPPR@be~ﺊPЬSVPSPPS߭߭߭߭V~ЬRSTtPxPPR@be~jPݭݭݭݭݭݭTWPPV}ePЬQ}aP<,^pU}e}eЏЏeԞePS|~׉ЭePЬRѢiТ Q`СPРTTѢ.ТQ%ݡSPЭePֳ P~fЭePdP~JЭePЬR]<~SP|~ЭePЏЭԥ2Pμ^nլ1xnSЬRTCdRbnCRbRCd~ﻈPxnTЬRSDRbRˏRDc~PxnSЬRRCRbRТWnbP"b bR b~>PaRˏRa~PaRТWXnVެ[VkVn1DެоYkrW CXKЧ QЧPRСDTТSRUR<~TRS<~TUSX߭߭߭߭VݮWqPxPPЬRR@be~5P XP@Qa@Qaխ׭խ׭؞@Rb@RbVRRkVSxSSоRPC`RbUmPC`PЬRRCbf~句PpRpϞ~pR~pPpϔ~rR~rPrPd4DPf}Pd8PjPUVRRkVSxSSоRPC`Rb<ZTwC`PЬRRCbf~ Pp~qP"VPxPPЬRR@be~؅PrPd4DPfPd8PjPTTPZ XP@RZbPT TUTPT XP@PT`U#UPRzRP{ZPQPPZUPzUP{ZPQPPU XP@PU`XVVk1eVn1]Ч PЧSÀRРDUТTÄRÈZRXURTCXUZT0n }^PЬS}cP^q^VWլ1xWQЬPRAbP`mAP`PAb~rPxWSЬPRCP`PˏPCb~APxWQЬPPAP`PРUWLf ЦPf~PЦPˏPf~PЦPРUЬSQxWPPQ~WTTU7oPRW}fcP}cPRT~PWRxRRPB`f~lP^nԮ լ1x SЬRTCdRboCRbRCd~ Px TЬRSDRbRˏRDc~Px SЬRPCRbRТZ֮ `\ }\Rm\~P\\RˏRF\~{P5\PРZî RzRP{PQPP~KPî [[~/PЪ RТ$Т([RxR~{PX<1~P[1f߭xTЬRSDcnPRDbe~￁P߭TxTTЬRSDcmPRDbe~P߭TxTTЬRSDcmPRDbe~OP߭TxTTЬDIE VMS.BCK)[V9.BIN]ICONX.EXE;17RSDcumPRDbe~Pѭ1ѭ1nTxTTЬRSDcqPRDbe~ȀPѭ ѭRЏbR<hTxTTЬRSDc]qPRDbe~cPѭ܏ ѭRЏbR<2hSЪ R$SSh2SЪ R(SS1xTЬRSDcpPRDbe~Pѭԏ ѭ؏RЏbR<hTxTTЬRSDcupPRDbe~{Pѭ̏ ѭЏRЏbR<Ш2hSЪ R$SSh2SЪ R(SSV[1ެYUoWVTTT TxTSRCbgPЬPRCbe~~Pѭď ѭȏPЏ`P<xVP@hRbTxTTiPRDbgPЬPRDbe~q~Pѭ ѭPЏ`P<xVQAScAhR2bPPPb2cPPPc[V nxVRBhRШbPxVTVRxRRBhSDhRcb[PЪ PЪSÀRРDVТUÄTÈWT[X~VTU y[X~VWUx[~XZnXvծ  }5WPЬS}2P^WZxYUլ1xUSЬRTCdRblCRbRCd~ }PxUTЬRSDRbRˏRDc~|PxUSЬRPCRbRТ[UKj ЪRj~|PЪRˏRj~}|PЪPР[ѬU5߭xUTЬRSDcTzPRDbe~:|PURR9߭UTxTTЬRSDczPRDbe~{PURRg~{PUTxTTЬRSDcnpPRDbg~{PЫ R$Ы R(UUWXWSUS2eRʏRBi# XRPPR0RXUSePʏP@iXRR,PeVV# V~1UTUQQW+PaRˏRP@iTR  R,PQQWTPXSSzTP{SPQPPPSTSUW~UVSXݭݭ[/P<1~zP}NVPVWRUReRʏRBiPTWSUS4eRʏRBi%P TRPPR0RTUSePʏP@iޚRR,PVgTTTTPVc TTPT@PS<1~yPRRP@ RTUQQW?PaRRP@ @ R~ RTR  R,PQQWTPzTP{XPQPPPXTPUW~USPXݭݭ[ PV }TPV<1~ yPЬRVЏb2P^nլ1xnSЬRTCdRbnCRbRCd~xPxnTЬRSDRbRˏRDc~zxPxnSЬRRCRbRТWnbPR RRQ~.xPQRˏRQ~xPQRТWnRzRP{PQPP~wPnRR ~wPЧ RТ$Т(ZXZ 1rެоYih[ZZUnUXVЧ RЧQPТDTРSRVR<~TRS,<~TVS,ЭXxUSRCbkPЬRRCbe~vP PЏ`P<xXP@RbUxUUоRREbkPЬRREbe~vP PЏ`P<xXRBScBQ2aRRRa2cRRRcZXZ 1Ч PЧSÀRРDUТTÄRÈVRXURT=qXUVT(qn }OPЬS}cP^nլ1xnSЬRTCdRbnCRbRCd~kuPxnTЬRSDRbRˏRDc~:uPxnSЬRRCRbRТWnbPN NRN~tPNRˏRN~tPNRТWnRzRP{PQPP~tPnRR ~{tPЧ RТ$Т(ZXZ 1|oެоY)e[ZZTnTXOЧ RЧQPТDUРSRVR<~URS,<~UVS,XxTSRCbkPЬRRCbe~sP PЏ`P<xXP@RbTxTTоRRDbkPЬRRDbe~GsP PЏ`P<xXRBScBQ2aRRRa2cRRRcZXZ 1Ч PЧSÀRРDUТTÄRÈVRXURTnXUVTmn }ILPЬS}2P^nլ1xnSЬRTCdRbnCRbRCd~/rPxnTЬRSDRbRˏRDc~qPxnSЬRRCRbRТYnbPK KR}K~qPlKRˏRVK~qPEKRТYnRzRP{PQPP~\qPnRR ~?qPЩ RТ$Т(TxTTЬRSDcaPRDbe~pP RЏbR<TxTTЬRSDcaPRDbe~pP RЏbR<2RRR2RRRZWZ 1kެX`[ZZUnUWVЩ RЩQPТDTРSRVR<~TRS,<~TVS,ЭWxUSRCbkPЬRRCbe~~oP PЏ`P<xWP@RbUxUUоRREbkPЬRREbe~ oP PЏ`P<xWRBScBQ2aRRRa2cRRRcZWZ 1Щ PЩSÀRРDUТTÄRÈVRWURTiWUVTin }HPЬS}cP^nլ1xnSЬRTCdRbnCRbRCd~mPxnTЬRSDRbRˏRDc~mPxnSЬRRCRbRТYnbP^G UGREG~zmP4GRˏRG~SmP GRТYԮnVެVVn18ЬZо}hX߭߭߭߭VݮYgWPxPPЬRR@be~lPѮ1Щ RЩQPТDUTSWVS1xVQAP<`~AP<`~AP2`~AP2`~USThxVQAP<`~AP<`~AP2`~AP2`~UWThVԮxRBQaBQaBP`BP`֮VV1Vn1Щ TЩSÀRФDТ[ÄWÈ Uծx)gSW2xURBP<`~BP<`~BP2`~BR2b~ݮ$W[cxURBP<`~BP<`~BP2`~BR2b~ݮ$ݮ [cUUn } EPЬP}2P^nլ1xnSЬRTCdRbnCRbRCd~jPxnTЬRSDRbRˏRDc~jPxnSЬRRCRbRТXnbPVD MDR=D~rjP,DRˏRD~KjPDRТXnRzRP{PQPP~jPnRR~iPШ RТ$Т( [W[1BeެоYZZx[VnVWKШ RШQPТDTРSRUR<~TRS$<~TUS$WxVSRCbjPЬRRCbe~AiP PЏ`P<xWP@RbVSxSSоRRCbjPЬRRCbe~hP PЏ`P<xWP@RbVSxSSоRRCbjPЬRRCbe~YhP PЏ`P<xWP@RbVxVVоRRFbjPЬRRFbe~gP PЏ`P<xWSCTdCQ2aRRRaCQ2aRRRaCQ2aR RRa2dR RRd[W[1Ш PШSÀRРDUТTÄRÈVRWURTbWUVT~bn }@PЬS}c2P^nլ1xnSЬRTCdRbnCRbRCd~fPxnTЬRSDRbRˏRDc~fPxnSЬRRCRbRТXnbP@ @R@~6fP?RˏR?~fP?RТXnRzRP{PQPP~ePnRR~ePԮծ1ެ о [Q aZUnU߭xUSRCbPЬRRCbe~heP߭USxSSоRRCbPЬRRCbe~0ePШ R$Ш R(USxSSо RRCbCbYPЬRRCbg~dPUxUUо RRETdWEbRbYSYsPCg cШ RШQPТDUРTRVRSWݭݭURTjSWݭݭUVTjSRRWRYSШ RТ RSSYШ QШPRСDUТTRVRYWݭݭURTjYWݭݭUVTj֮Ѯ1Rn }=PЬS}c2P^=XWլ1xWSЬPQCaRbmCRbPCa~cPxWQЬPSARbPˏPAc~UcPxWRЬPPBRbPEKG4 VMS.BCK)[V9.BIN]ICONX.EXE;17*VWLh ШPh~cPШPˏPh~bPШPРVWSެUSeSWiЬRХT߭߭߭߭STV MPQxQQЬPPA`e~bPݭݭݭݭVSSeSWW}hPЬQ}2P|^ ZPxWSЬPRCP`PˏPCb~ ZPxWQЬPPAP`PРUWLf ЦPf~YPЦPˏPf~YPЦPРUЬSQxWPPQ~WTTUEPRW}fcP}cPRT~UYPWRxRRPB`f~8YP(^nլ1xnSЬRTCdRbpCRbRCd~XPxnTЬRSDRbRˏRDc~XPxnSЬRPCRbRТndPV2 M2R=2~rXP,2RˏR2~KXP2PРnRzRP{PQPP~XPnRR~XPxx~uQPV<1~WPЮRТ RТ$ Т(Uծ1ެZjWHXUUTnTxTSRCbhPЬPRCbe~vWPѭ ѭPЏ`P<xUP@fRbTxTTjPRDbhPЬPRDbe~ WPѭ ѭPЏ`P<xUQAScAfR2bP PPb2cPPPcUU1ЮRТ PТSÀRРDYТTÄRÈ[R|~ݮVYRTQ|~ݮVY[TQVOn }0PЬS}cP^nլ1xnSЬRTCdRbnCRbRCd~UPxnTЬRSDRbRˏRDc~UPxnSЬRRCRbRТVnbP^/ U/RE/~zUP4/RˏR/~SUP /RТVYnWެ[WkWn1ЬXkPZ߭߭߭߭WݮVk?PxPPЬRR@be~TPYIЦ RЦQPТDTРSRUR<~TRSj<~TUSjYxYRBQaBQaBP`BP`YWWk16Wn1.Ц QЦPRСDTТSRURYTRSOYTUSyOn }-PЬP}`P^-T:V}Y(f잭fWլ1xWRЬPSBcP`tBP`PBc~}SЭfPxWSЬPRCP`PˏPCb~HSЭfPxWRЬPPBP`PРUWSd ФPd~SЭfPФPˏPd~RЭfPФPРUWTxWSЬRPC`J@PRCbg~RЭfPUPЭfPU[LPRRWP|~@RЭfPЬPЭR`ЭfP^+Y8X}&h螭hZլ1xZSЬRTCdRbvCRbRCd~QЭhPxZTЬRSDRbRˏPDc~QЭhPxZSЬRPCRbRТWZUPi ЩPi~EQЭhPЩPˏPi~!QЭhPЩPРWѬZg~PЭhPZUU1VTxURPB`P`fPSBcP`K߭fPPB`Rex1֯?PxRQЬPPA`g~IPPЬPZ`PЬPD `PЬP=`PЬPJI`PЬPd`PЬPd`PSЬQ SaPЬQdSaP^W/VЏffЬPѠР PUPUUPPg~HfPxUSЬRPC`PTTRCbg~nHfPT fPUSxSSЬRPC`PxTRЬPQBP`PˏPBa~>PxTQЬPPAP`PРRTLc УPc~M>PУPˏPc~->PУPРRR\T}cPЬQ}aP^U$W}uggXլ1xXRЬPSBcP`tBP`PBc~=ЭgPxXSЬPRCP`PˏPCb~d=ЭgPxXRЬPPBP`PРVXSe ХPe~!=ЭgPХPˏPe~<ЭgPХPРVѬXg~<ЭgPxXSЬRPC`M*PRCbg~<ЭgPXPPԭ=߭XSxSSЬRPC`m:PRCbe~S<ЭgPXPPԭ=߭XSxSSЬRPC`!:PRCbe~<ЭgPXRRXSxSSЬRQCaP`TժתRТRRѢ VkPuRТТ ТhТ@ТP1VЏfVfVH VMS.BCK)[V9.BIN]ICONX.EXE;17RТfVRТf1PhRhbSRhSb1VЏfVfЦЦV1fVЏfVhRhbfVUUVkUPn1PhR_hRhbShRRSSSh1 PhRhbh1h:h1PVRRVkRP1RV1`VЏfVf1PV1PVЏfVf1VЏfVf1VЦЦf1rVЏfVfVUUVkhRhhbRURPn1VkVTTd dddTv~1ФS kRRSRkkVP1V1PVk{8nR֢ kRPEykV1PVkC |~PykV1|PnP>8閭߭߭61LPkVnPP&*" 2?P111_111UV1  b^[,ZYkTЏjjkUЬPxPRRUSPZSCc ccc1߭cDPQcRЏbcRЭݬݣYPP jPxPP@cR}bcSkjPccPPݬSpPRSj~vjPRЏcУRբ-RެVRf!ЦUxRQAcP` AcAcURУWЧ XUЬUUXXURRRxRRRT,UX'UXRRQRPQTЏdTdPRPRXX1Pէ1X7PѬPEX&PR¬RRQRPQPTЏdTdPRPRXPXVfPPUXfxPP@cR}UpI}b}УWRTXfPէ1XPѬPBX{PR¬RRQRPQTЏdTdPRPRXGPЬ STkX ѧ jPjPdkRR<-~xTRЬb>NԢw S R TթשݬtЧ|z0ЧPPTЏdTdPTkjP^ЬQ]DPPЏaQPЬPЏ`PPЬPЏ`PPЬPЏ2P0^ݭݭݭ߭߭oPR |~PЬPR2P^ЬPЏ`P1PЬPЏ`P PЬPЏ`PPЬPЏ`P^2P^}U2P 0^1Sݭݭݭߣ߭ ߭mPR |~PЬPR 2P^ӀTdЭRR ޤSR  R ޤ!SR RSݭRݭݭݭݭߤ$ hePSSamPR |~KPЬPRS`P^ЬPЏ`P^QЬPЏ`(P^ЬPЏ`P^%PЬPЏ`P^PЬRݢPb2P^ }P2P^ЬPЏ`P^2P^ЬPЏ`P^ЬPЏ`P^ЬP}Џ`P^~Sޣ>P'ЬRޣBݢPbR9PޣFP'ЬRޣRݢPbR Pޣ^P'ЬRޣdݢiPbRPޣjP'ЬRޣyݢ<PbRPÈP(ЬRÞݢ PbRPôP(ЬRݢPbRTPP(ЬRݢPbR%PP(ЬR ݢPbRPP(ЬR+ݢQPbRP:P(ЬRKݢ"PbRP\P(ЬRbݢPbRiPhP(ЬRzݢPbR:PÌP(ЬRÜݢPbR PìP(ЬRõݢfPbRPþP(ЬRݢ7PbRP2P^%|T_PSSPPЬRSݢPb2P ^PSShPR |~PЬPRS`2P^ЬPЏ`P^ѝQЬPЏ`4P^ﱝQЬPЏ`\P^ЬP Џ`P^ЬRyfPЏ2P^}2P^}2P^ЬPЏ`P^ QЬPЏ`2P^QЬPЏ`2P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P ^ЬRԢЏbRfPPàSРRâPPSТRRТQáPPSСQЬRSЏbRPPàSРRPâPPSТRRТQáPPSСQЬRSЏb2P ^ASЬRݣZPЏ2P ^ЬRԢЏbRbPPà SРRâ PPSТRRТQá PPSСQЬRSЏbRPPà SРRPâ PPSТRRТQá PPSСQЬRSЏb2P^ЬP)Џ`P^ЬRPЏbP^ЬPЏ`P^ЬPQЏ`P^QЬPЏ`2P^wQЬP,2P^ЬQ!ЏaP^|~1PЬPӣЏ`2P^I<~PЬPЏ`2P^ ~PЬPkЏ`2P^~qPЬP3Џ`2P^|~1PЬPۢЏ`2P^I<~P  }PP^ ~P }gPP^~qP }'PP^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬP Џ`P^ЬP Џ`P^͖QЬPЏ`2P^節QЬPЏ`P^ЬY}잭ѠRТSRb[УnRRWPb |~խ ЭPn[ݬ_PW |~W ЭSPЭRЏ4ЭRW8eR((bԧ8X:VZ[}[Z;S RUn P}nUݭdЏiЭ2P ^SЬRբ<LUP< |~PRRݣݬ8P |~PRݬ ݬݬdP PP 8^ISЏЏcȞc߭ЬRP'߭rPǭЏbЭcPЬRP(PbǤЭcPЬRPf~ЭcPЬRPf~ЭcPgPЬRpP~][PЏbբ<3~cЭcPЭȣ2P8^ TЏЏdȞd߭ЬRGP1߭3P1ݭݭPSYPЏ`PЭPЏ`PЭb؟P|~ЭdPЭdPSЏbЭdPЬRgPBVP1bP|~1ЭdPЭdPЬR Pf~ЭdPЬRPf~ЭdPЬRc~YPЏbբ<3~ЭdPЭdP8^IYЏЏiȞi߭ЬRP1߭oPtխݭ~ЭiPЭSzP{SPQPPTխT'SSPSPPTTSSPPSPPTЬRTЏbЭiPЬRPBP1bP|~ЭiPЭiPЬR[Pf~MЭiPЬR0Pf~"ЭiPpSpUgUSPjPRnRPdUPcPSWsSsW'sUpURrURbRWsWsUpURPrUR`RWЬRpW~WPЏbբ<3~ЭiPЭi2P8^QTЏЏdȞd߭ЬRP1߭wP1ݭݭPSYPЏ`PЭPЏ`PЭb؟P|~ЭdPЭdPSЏbЭdPЬRPBP1b#P|~uЭdPЭdPЬRPPf~BЭdPЬR%Pf~ЭdPЬRe~UPЏbբ<3~ЭdPЭdP ^߭ЬRPbݭPS:PЏ`PЭbyP |~oPPЬPSЏ`PGP2bI0U VMS.BCK)[V9.BIN]ICONX.EXE;17@_P |~%PЬPРPPPf~PrPЬRpP~TPЏbբ<3~P2P^߭ЬRPЭЏbP}P}bP`P1p~1TPЏbբ<3~7PPf~!P8^TЏЏdȞd߭ЬRP1߭P1ݭݭgPSYPЏ`PЭPЏ`PЭb؟P|~gЭdPЭdPSЏbЭdPЬR3PB"P1b韛P|~ЭdPЭdPЬRPf~ЭdPЬRPf~ЭdPЬRa~bRPЏbբ<3~hЭdPЭdP^ЬWBP1.P)gGP |~ PPPf~PЬPpUРR`nsU#R}XPRRRgUUpSRPRdUSdUUxRRRpS~TQnYPnZժX ЏXX |~GPP.Pf~ PЬRPf~Pss~Ps~PЬRp~p~ pP~PPЏbբ<3~PP^s"լ I}+BDPլ  ά gpSլ  dSdx լ ЬRpS~OPPЏP ^SЬQ ЬQˏ/PPo~PЬPˏ_PP1ЬPˏPP |N7$1j?PЬR 'P1g~>PЬR Pg~P1d߭ЬRCPe~PݭUPѭPЬPР PЭ1 P߭ЬRPe~PЬPР QЭ΄P1 ~UPЬQѡ } 1Pѡ СP~PЬP} `ЬP} UЬPAЬP7P&|~PЬQˏСPxPP P}`ЬP}`P$^YS*TЬQ [ЬRJcܞcˏ/PPo~6ЭcPЬPˏ_PP1ЬPˏPP RO$1?PЬR P1g~ЭcPЬR uPg~ЭcP1|߭ЬRPe~]ЭcP_ݭPѭЭcPЬPР PЭ1P߭ЬRSPe~ЭcPЬPР QЭ6P1~ЭcPЬQѡ } 1Pѡ СP~{ЭcPЬP} dЬP} YЬPwEЬPP*|~%ЭcPЬQˏСPxPP P}`ЬP}`PqPЭcЬPˏ_PP1ЬPˏPP SH%1P?PЬP [P1䚏g~rЭcPЬP -P䚏g~GЭcP1|߭sP䚏e~ЭcPݭPѭЭcPЬPР PЭ1P߭쟭P䚏e~ЭcPЬPР QЭP1H~}ЭcPѭЬPް R}b1ѭ ЭP䚏~;ЭcPЬPް R}biЬPް R}bZPЬP/EЬPOP*|~ЭcPЬQˏСPxPP P}`ЭcP^hXiT調Y3U|V}Z}RЬRW̟Jddˏ/PPo~6ЭdPЬQˏ/PPo~ ЭdPЬPѠYѠOР РЭRЭQѢ6ˏТ SˏС PSPѢ áWPѡâVЬRˏ_PP1ЬRˏPP S@%1PR?PЬR P1Ԛg~&ЭdPЬR PԚg~ЭdP1t߭'PԚe~ЭdPiݭ9PѭЭdPЬRТ RЭ1P߭PԚe~qЭdPЬRТ PЭ|P1h~9ЭdPѭԏЬR޲ R}b1ѭԏ ЭRԚ~ЭdPЬR޲ R}biЬR޲ R}bZPЬREЬR P*|~ЭdPЬQˏСRxRR R}bЬPѠѠ VЭPVЬRˏ_PP1ЬRˏPP TA&1P ?PЬRP1̚g~ЭdPЬRP̚g~ЭdP1t߭P̚e~ЭdPiݭPѭЭdPЬRТRЭ1P߭쟭P̚e~)ЭdPЬRТPЭfzP1h~ЭdPѭ̏ЬR޲R}b1ѭ̏ ЭR̚~ЭdPЬR޲R}biЬR޲R}bZPЬR EЬR P*|~QЭdPЬQˏСRxRRR}bЬPѠѠ WЭPWЬP}`PyPЭdЬRˏ_PP1ЬRˏPP S@%1P?PЬR cP1̚g~zЭdPЬR 5P̚g~OЭdP1t߭蟭{P̚e~!ЭdPiݭPѭЭdPЬRТ RЭ1P߭䟭P̚e~ЭdPЬRТ PЭxP1h~ЭdPѭ̏ЬR޲ R}b1ѭ̏ ЭR̚~KЭdPЬR޲ R}biЬR޲ R}bZPЬR? EЬR_P*|~ЭdPЬQˏСRxRR R}bЬPѠѠ VЭPVЬRˏ_PP1ЬRˏPP TA&1P^?PЬRP1Ԛg~2ЭdPЬRPԚg~ЭdP1t߭3PԚe~ЭdPiݭEPѭЭdPЬRТRЭ1P߭ܟPԚe~}ЭdPЬRТPЭܠuP1h~EЭdPѭԏЬR޲R}b1ѭԏ ЭRԚ~ЭdPЬR޲R}biЬR޲R}bZPЬREЬRP*|~ЭdPЬQˏСRxRRR}bЬPѠѠ WЭPWЭdP<^TU|V} }̟ЬR ܟdĞdˏ/PPo~ЭdPЬQˏ/PPo~ЭdPЬPѠXѠNР РЭRЭQѢ5ˏТ SˏС PSPѢ áWPѡâVЬRˏ_PP1ЬRˏPP SH%1P?PЬR P1䚏g~ЭdPЬR P䚏g~ЭdP1|߭۾P䚏e~ЭdPݭPѭЭdPЬRТ RЭ1P߭{P䚏e~!ЭdPЬRТ PЭ^rP1ﰫ~ЭdPѭЬR޲ R}b1ѭ ЭR䚏~ЭdPЬR޲ R}biЬR޲ R}bZPЬREЬRP*|~EЭdPЬQˏСRxRR R}bЬPѠѠ VЭPVЬRˏ_PP1ЬRˏPP TI&1P?PЬRsP1ܚg~ЭdPЬREPܚg~_ЭdP1|߭Pܚe~1ЭdP3ݭPѭЭdPЬRТRЭ1P߭쟭+Pܚe~ЭdPЬRТPЭpP1`~ЭdPѭ܏ЬR޲R}b1ѭ܏ ЭRܚ~SЭdPЬR޲R}biЬR޲R}bZPЬRGEЬRgP*|~ЭdPЬQˏСRxRRR}bЬPѠѠ WЭPWЬP}`ЭdP^Zl[}UЏЏЏ$ЬRbPgk}bjPSЬRТcR gk}ʹj若PPXXYYk}jqPXRRYRR:PV FPVRUTX TTXSR RRYJ VMS.BCK)[V9.BIN]ICONX.EXE;17UYWTW PTTWSѣ }益ˏУ RxRRR}bRP ^ЬSУUe }ХVХRRVMPWgSSTS4ѣR.PѣR MDP}STУSѣR֦TS gUg PФU e}Џ U RRѦRզ4 V^ЬR־Pg~PЬRﯾPg~PЬQ RRС aPPR <à PP0}aݡݡ8P |~oPЬP`PЬR~R8P |~;PЬPРVР UРXTX TTXЬPРSРWRW RRWЬP`P|^ЬPѠl~PЬPѠl~PЬPР QСVРPРUVURR2PT |~xPRR[3PS |~YPSS V~ЬRUUQxVPPQ~T }bP ^߭ЬR&P,߭PѭЭЏbPPЬRﵹP.魯PﯚP}bPPЬRnPf~`PЬRGPf~9Pq5ЬRp~2PЏbբ<3~PPP ^߭ЬRP,߭PѭЭЏbPPЬRP.PP}bPPЬRVPf~HPЬR/Pf~!Pq5ЬRp~1PЏbբ<3~PPP ^߭ЬRP,߭PѭЭЏbPPЬRP.tPP}bPPЬR>Pf~0PЬRPf~ Pq5ЬRp~0PЏbբ<3~PPP ^߭ЬR޵P,߭͵PѭЭЏbPPЬRmP.\PgP}bPPЬR&Pf~PЬRPf~Pq5ЬRp~/PЏbբ<3~PPP ^߭ЬRƴP,߭ﵴPѭЭЏbPPЬRUP.DPOP}bPPЬRPf~PЬRPf~Pq5ЬRp~.PЏbբ<3~PPP ^߭ЬR﮳P,߭PѭЭЏbPPЬR=P.,P7P}bPPЬRPf~PЬRϮPf~Pq5ЬRp~-PЏbբ<3~PPP ^SЬRPg~LPЬR-PSg~PЬRѢ<;P+}bSbݢ/P |~PP2P ^SЬR^Pg~PЬR-.PSg~^PЬPѠ>;P/ЬR}bSbݢ./P |~PP2P ^SЬRPg~PЬR-rPSg~PЬR:P+}bSbݢx.P |~aPPP ^SЬRPg~$PЬR-ᄉPSg~PЬR9P+}bSbݢ-P |~PPP ^SЬR>Pg~tPЬR-PSg~>PЬR%9P+}bSbݢ-P |~PPP ^SЬRPg~ĿPЬR-^PSg~PЬRu8P+}bSbݢd,P |~MPPP^ЬR6P}bP2P^ЬR6P}bPP^ЬPѠv~ϾPD"PR |~ﶾPЬQС P}44Ѣ4~PR0ЬPRЏ`P^ЬQСRRRЏaPˏRPP^B*1&?PЬRТ PРЏbPЬPР RТ RТ Џ`PЬQС PРR PRЬPRЏ`PЬRТ PРЏbPЬRТ PРЏbPЬRТ PРЏbPЬR Pp~CPЬRТЏ2P^-WﶖUЬRدPg~PХVVgSSЬRSPЬTФ QVPPФSSTSRTPRSRSЬS}cSPgRVRe~rPV2P^߭ЬRPe~<P߭ЬRoPe~P߭ЬRHPe~Pխݭ~Pխ:ѭhRЭЏbR)Pѭ6ѭ.RЭЏbRPѭ2P ^߭ЬRPe~0P߭ЬRcPe~ Pѭ-RЭЏbRaP֭ѭ٘P^W}g잭gЬSSTTRS"Pb|~ЭgPݬTc#PR|~aЭgPЭSRR PެVPf%TUxPQSAcSAQ}caPPUЬSЭЏcЭgP000000000000000000΀^wY}x͏͗ެVfRx͋i͇͇iˏ/RR1͗1R͗1fUY'Wѥ"fScTУ S RSSSgPfScTRgPeSЏcե<3~͇iPf[P͇i͗fS吝͗͗g~視͇iP͗RM1"P͗͗͟9PQR͗1ЦTR͛SsSSSS2SSCddTP͇i͗R1ˏ_͗RR1ˏ͗PP@||||1i?P͛TФ TФ SRS1bU͛xRP͛T@T¥TTTeU"P͇iRRS1͛~P͓1ЬS͓R} cSܜP͇i͓͛P͓1͛&P͓1ЬS͓͓RR£RRRcSoP͇i͓͛P͓1T͛RТZТnn͗~勇͇iPˏ['X#WxԚϚɚ[SZ<~͆UPRR~B͇iPR=~#͇iPZ<~͆|PRR ͇iPR<VRVVUUhP|~е͇iPЬPSѠѠ A`U~hP|~͇iPЬScݣgP|~v͇iPU͆gPT|~V͇iPЬScTUcR1ݬ﫚P1͇i͛RТ ͓1UPS͓RS[T͓PSRR RPxRQ͓PAP¤PPPdTeP͇iS͓RS͓RТ ͓͗t~}͇iP͇2P^6[WZЬR"ggˏ/RR11 gPŏmNARv RˏRnXdXnRdRXЬTѤ)dUФ R jXSSSSS!PPdSjXRRR!PЬScRЏbգ<3~agPgPVVPVS gPŏmNARv RˏRnTdTnSRdRTЬSjTRRcgPˏVPP{1?PTФ RТ S gPŏmNARv RˏRnUdϟUnSRdRUЬSTjURxRRBR£RRRcgPVЦU gPŏmNATv TˏTnPd?PnUTdTPjPTTRSCQ>CdP%@UR} gPХUPSS CQ߫,XШU gPŏmNATv TˏTnPdϳPnUTdTPjPTTRSCVTCЖP;@U/R$ЬQUT¡TTTagPХUPSS CV߫*RТV gPŏmNATv TˏTnXdXnVPdPXjXTTSRTФ URTSTRХ U ߫RRTSTRTTSS¥SЬTUxSRBR¤RRRdgPS gPŏmNARv RˏRnTdWTnSRdRTjTRRbRЬSRRR2RRB[cgPʠPq~ӯgPˏRR2P|~gPgPV~sgPV`ŏmNARv RˏRnSdySЬRpS~K]y VMS.BCK)[V9.BIN]ICONX.EXE;17%3PЏbբ<3~gPgPŏmNARv RˏRnTd!TnVRdRTЬSjTRRЏcg2P<^}TUЬQ ЬQ nЬS]d䞭dѭ1#߭P3"PЭdPЬPe~ ЭdP߭ЬROP3ڞPЭdPЬPe~حЭdPЭPݠݭ?PѭЭdPЭPݠݭPѭЭdPѭ ЭPЭPݭݭP|~IЭdPЭdPˏ/PP U(쟭P욏n~ЭdP߭ЬR,P3﷝PЭdPЬPe~ﵬЭdP߭ЬRP3oPЭdPЬPe~mЭdPݭݭبPѭЭdPݭݭﵨPѭЭdPЭPЭSPSPRSíRPPSU{ЬSѣ%cRУ P PPPݭPcRݭݭPЬQaPЏ`ա<3~ЭdPЭdPЬQPPЭaЭdP^ZnЬS "ЬRjjˏ_RR1ˏPP31P?P߭ЬWP1kPe~jPVVSЦ RТ XЧYЧUTXRPxTVF$PU`;UF(P`YأP%ЬQSFP¡PPPajPTTXjPTФ Rݢ ݭP Ф RP  jPЬSTPxPP@R£RRRcjPЬShP[߭[rѭ#`RRR£RRRcjP[PS|~WjPЬRSЏbjP߭ЬRmP5P jPЬRe~jPRݢݭZPTTT jPТ PSP SRTRPSР P SRTRSRRTT TЬSPxTRBR£RRRcjPЬRˏ/RR n/ݜPr~jP߭ЬR@P5˘P jPЬRe~ȧjPݭ1PUUU jPnyЬSѣ#cTУ R URRRsPcRU[PЬScRЏbգ<3~*jPjPUuRЬSRRR2RRBRcjP|,^ЬRךPh~P PV |~都PЬSУ URTSdcTSRЬRVЏbPx^+Z$Y}%}}} }|jxxjЬ[ѫ 1ѫ 1Ы Rݢ P|~xjPЬRТ ТiPU|~ﵥxjPSTЭRCd1fVXWPCЊR1PTЭPBdխ{P߭ЭPݠ ݭfխP߭ЭPݠ ݭfPTЭP} ЭPРTUhigPU|~xjPQЭPРaխR1lSS TЭRCd1CU^ЭSգ RѣR S1ЬRЭЏ bxjPxPx~bxjPЬRIPx~3xjP3P[|~xjPЬRТ XТWPާVUTfSSedVUTPЬR[ЏbxjPx^ZxY}y}q}i}a}Y|jxxjЬ[ѫ 1ѫ 1Ы RТSЫRТRSRSTRTT ؿP|~!xjPЬRТ SТTѣ SТ PTТ iPU|~֢xjPSTЭRCd1V0XWCR1PTЭPBdխ{P߭ЭPݠ ݭfխP߭ЭPݠ ݭfPTЭP} ЭPРTUhigPU|~!xjPQЭPРaխR1lSS TЭRCd1CUЭSգ RѣR SUЬRЭЏ bxjPPx~xjPЬRmPx~WxjPWP[|~9xjPЬRТ XТWPާVUTeSSfdVUTPЬR[ЏbxjP΀^Z|Y}|}|}|jjЬ[ѫ 1ѫ 1ЫSЫ Rѣ}}}Ы SЫR~kyP|~GЭjPЬRТic PU|~ЭjPSTЬRТRCd1XtW! VC8R~TЭPBdխgP߭ЭPݠ ݭhPTխ9ЭP} ЭPРTUgifPU|~|ЭjPQЭPРaխRSS TЬRТRCd1ZUЭR SSѢSբ4 R;ЭjPPx~ЭjPЬRגPx~ЭjPP[|~爛ЭjPЬRТ XТWPާVUTefdVUTPЬR[ЏbЭjP ^SЬR#c잭cѭЭcP}bЭcP ^̈́SЬRےc잭cѭ }bЭcPЭcP^ЬP}2P^ЬP}`P^~P\8~P\\<1E}'y>@PlԬ\P<^nUPxPPPSSSTeQá PPSiСT!Pä PPS Ф RS bФTT(ePРTä PPS Ф RS bФTTSoPPS\TePР RS bSԢԢ RP^mSHTPRdʕPRR<1}w PdbԢ<Ԣc\c\ ԢRRP^ImTSdPà \\(hРS Pã \\( У R( bУSS(d\ЬSã \\( У R( bУSS(+PP(ZSd\Ь R( b\QaQ\RPP<^UlT} e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSS[PЭePZSdPР R bЬЬ} ЭeRP^XYYWkUѬ 1hPhPVTeQá PP@xСT&ä PP@Ф R@ bФTT0ePРT'ä PP@Ф R@ bФTT@~iPP@gTeTФ R@ bRS1PiRiRVTePà RR8hРT Pä RR8 Ф S8 cФTT(eRТTä RR8 Ф S8 cФTT8ÀPP8gTeRТ S8 cԣVԣ PRbR PSPP<^%jUPxPP(PTSeQá PPTgСSã PPT У RT bУSS(ePРSã PPT У RT bУSSTPPTWSePР RT bTެQaPaP@aRP|^esVViUSxSS8STeSã SSTTPP PeSУ PPPSeQá PPfСSã PP У R bУSS(ePРSã PP У R bУSS~PPVSeSУ R bЬfSfS| RP|^rU^hVPxPP$PRTfQá PPRhСT Pä PPR Ф SR cФTT(fPРTä PPR Ф SR cФTTR3~PPRUTfPР SR cRެTdЬЬ |PdxPRBR}ebPPdSP^}gTSdQá PP hСS Pã PP  У R bУSS(dPРSã PP  У R bУSS _}PP USdPР R bpRP|^9|VfUЏЬf잭fPxPPPSTeQá PPSkСTä PPS Ф RS bФTT(ePРTä PPS Ф RS bФTTS|PЭfPS1TTePР RS bSЭ ЬPРT֠TRP<^eU PPxPP@PRSeQá PPRhСS Pã PPR У TR dУSS(ePРSã PPR У TR dУSSR{PPR]SSePР TR dRЬЬ TP<^zUeT}e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSSzPЭePRSdPР R bԢ} ЬЭRP^yYfXЬRЬSVЏi잭ihUå PPSyХV!Pæ PPS Ц TTWS ЦVV(hPРVæ PPS Ц TTWS ЦVV"SRSzPЭiPЭRSxV hPР TTWRSUSUPSPSPPSTVhRT ЭWP<^xUFcT} e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSSyPЭePPSdPР R LjcMg VMS.BCK)[V9.BIN]ICONX.EXE;17?bЬЬ} ЭeRP ^}bSRcQá PPhСR Pâ PP Т \ lТRR(cPРRâ PP Т \ lТRR_xPP PRcPР \ l|}Fl }>l\P<^-wUaT}}e䞭eSdQá PPkСSã PP У R bУSS(dPРSã PP У R bУSSwPЭeP5OSdPР R bЬ Э} }fkЭeRP^`Pà PPݬ(wPP`P P^NU`WެVfPˏ`RBYRRS PPRbSSTTPgRP PТQfTSS  Ь TeСQgPРRTSS  Ь TeТR"qgRЬ T^bPà PPݬHvPPgbPР P^ЬRТ8XUШ ZtRSSS@|R Т W8VTU}UT((gЬRWԢ WШ$|Ԣ(Ԣ0YZ}ZY}i}iЬRW,|^EtVgTgS:UУRЬQa feQЬPР0Q}aЬPԠ0Ь 0me Ltaee$f,e(դݬݬPR4ЬPР4mР eРsРaР\eР$eР,fР(xePЬ0ݬ@@փv0P^ݬݬVr<^UЬTdS1PˏdPP48@HP`hpxXnP?PSjSePS]PSUPSMPSEPS=PS5PS-P S%P SP SP S PߥjnSRЬTdS1ˏdPP48@HP`hpxXnP?PSjSePS]PSUPSMPSEPS=PS5PS-P S%P SP SP S PߥmSPRPQPQQPRݬݬˏPP 5gA#t<<<<<<<1P ?PЬSˏcRR!ЬRТPУRPRPPRPPݬݬ[PPPPPPPЬRТSЬRТRâRPRPPPPЬRТRЬRТRЬRТR ЬRТR ЬRТSЬRТRâRPRPPPPPЬRТRЬRТRЬRТRpSЬRТRpPbPSPsSPPPPPЬTФRТ RЬSУRТ RtPQУPФRâRPRPPQPЬRТSЬRТRâRPRPPPPЬRТSЬRТRâRPRPPPPЬSЬRâRPRPPPP*k^ RPˏPP259=AIM]QeYeUeeeeeEa;?PPPPPPPPPP P P P Pj^SЬUeVЬTdWVWѥS1V@WqT*Nݭ~PRݭPSSoPQQ  SQQ RRSqdFo ~d7o=PRRSRS %oSd|~cd cRPRPݬd˘ dnݬd`qݤ nn<^5UZpTFMݭ.}PRݭ PSSnPQQ  SQQ RRSqdbn ~dSnYORRSRS AnSd|~cd cRPRPݬdd nd nݤm|^aUoT PРVgLݭO|PRݭ*PSSmPQQ  PSQQ RRSqdm ~dsmyNRRSRS amSd|~cd cRPRP矦dЬRݢd#mM`E͡b6qi49CV]޳JDa)#}'>z/s_SHf-0 jd@ؽtW>JM?[o-lA ooO̐IPkBlNުvn.T?*wְw(TIVYN>KEݬQ.n0mj:1p%^ 58) %SmKe ":M-^)KgK\C{!!KpS,o/U_ g]0x7$GC̍p'$+׳{OIţG=G8u. (#o2eq6ʻmCHqe@6j,>?tv$ft + 0#885ӯXOt~9=NQ<9[zCÂ"ߧ[҄\bzK0M兀jąX3)ju]SW\9C[@q=r~GW3Q䊞K\J-(kH؇Yo+Njd +[$@J@(uVn4L8/MiߌʄM{S(IX;>E K}AND(9+T³ᑼV\ .;i&¶K ?ްJqM^ZdhżQu|wE_Ќfhy'7+sMg5UoYV+DR<+s)hZg[瘽/3Y05^!Q=\Pa k-}X)<Ť0Z|Z争'jh&Ƚre` eڽ_sO;~_ L D($wET7NiEUX‚"O+ͷP%B!EѲ Yn_[8U0P4@V&[]qݭLl~yϴ\;2RcpGQ?U*\8&quzZMj?+By8:D\FZ`.G/Mڊ\·2}{hZ+“5tŹA$Hk\C,GAe5.&W0?*X]< Kk+,+Y x\Gwۅ PRSz.\Ogt5 bSm֛ow^B-%yMzp<)Qo&4vu摠I&C$w2=M¨4Itai~2(ߦ.w-w+ x-cvֱLm{TB8(K|5u,8:ƣ 'V$w&e[_~EcW -՝'YϬ$LXeV!|!U;#V,%OFNsCs\*X rdPP!G؋>w &:!96cnV>5%m hkVQE;LԴatzW1k^ Dbϻ ,koD-n?xCnX bFX= e.:4cSVk'<})D&D 3N?YɏPF(&i?|_egyQES9>af PLUUE!߫h$K7@3`@ut+>\>-&+z1Jny˂waΦR2MX5ڔcN9vv6dEEQ3n,Q ?)3O|ǸWϭER2 +IPZ@bEm#D~@ZC)R y ;&=6"[DzW%x{ə^Ohj ߞ֫?`M֯/ħȺluSi=C4%nZѕo6ƫQ| |ki8Y8)!?wU-A/ @ W9K% B}ԯeVp:gtf7yXG7 ;On/%0EU>5qDX]hͣE) d^Uw9A^KIal~+6AV%nJCыәV65rVy1SHnsţo?;^mN_ VˊsMUۢ,@\s m>JGe<7q `Dj~;Bd""GL,8n9X ^Iq!av8.zN^ hk靆2L%H2%OyWԺ M?먋ڑ:ߧEQo ٗ}}k[^e%ʣDVUcX/qpX}ct2m'ueQ;knu`)lCԬ ?E`*]>Y/B߽x~io+WuMd_&!~?h,) 퓌Vnk;VD^L$.I?\fxfۼgpW 5WJ$mpnO"0a\{Qn;|M&Y#"37𐧮"*GoKDPs1$rZỶx+}!éRyxOeX}XԕPg:W|;0u p弡Fl,l8 (Pir1W[gDN*7HIĹ%''4I$iB͞w$` '^$g)4OtGtxFЅI6i؏m2zR,AکKs "!#Lz 0OO+aYB~Œ^:{3AG iC$6EUC.ª8-{ŝl5{~kRn'2ݐ%`LWCUGdpЧa}5偑~1M:[]d]чA"g 4{L|Pr&hPۖHSpln)ٔ˖!PdV->ďBa0:ۈ򤼢;A}0gQm^߮qz֚knxjO.N iI-!^sOatST|0*@L ]Mΰ*GwFɏiKgou<,=mth5J*y$fb*1 ydaR%h`Gk)E.#CױpIDžhVdѫ|2ܠ>,o_n39Vp.-v;FY`xȮQLsRoHyR ?Xq lܟ\vFiT}a \9NM)\,&C("a`_v͟X KNM? s;a"yo {e&@xxDjҪ`}/6RUJE1IO'ק Gdtqx{7B9շ sNJn[/W$qє` y*J} 4 D@ ITY>kMz5^׵59ZFMPytλ{Y Lʃ%"1,!+ӯWsꭰA-ȘHz67+C&"MoɝG'(%9v6|1$#0 ~,W/mJn4.|Ǯf`̾B¸XNv5Dwn͞l?L+̝G 'Q(h! Aϝq& FY+?Oft^Tq߽']+.'_n?Hs+{[.^pk5|-nzWZ X }Ba^ F2uZe+ juEXԌ1Vm ԣ"G<{353GZÓLK%G%\ iVx!Ȑ<ٽ理m'UYq׋ky,ʫ86mK._4C*nq/ZNli嘑8%0WѽE"I zrfCfVP<(u')I3{q聾J| %q܍R)>T)V\~$u9,]GOft҈Wx3z,RYKjk! hqM)J/)y71xMy"180[StP+@l4]A@˜;R_ lY߄?ئx5}Y駯V_5xA͆Ox@q*PVj/{eTqL7sj}i2W`] rɏSTFA2eiXܕU*R+2. 2s;T`Drf+] !#!u9AZǠLA@QMȡcRtqtYw -0K lؕMήL 0jBAvN&Z7ݚ:CI]=Z$wg76*I*^ߠNʵi^F7q.!bڶPGd\>ď/smtkanCkK $P`7wʜ0Rں=/'&`F"MU"o& g4$L7F.Vm=ֶ":~ Nybvm26-͌UQ arp@E];ӛ(eͯ/yZg,&hGE(2a޺0N?Fs: „%,88L˥4si*qX~9r#^oTiu,@=!/,:+NOO@xYqyX_Pdm)u9nqEL#*#1+y uQ+먗'S`)IʂjU'# ,ņVw"-ǽcv\*lԐ!ޫ2Y<Uo#ٖosĈr1WT7@j`G#x|uyǵcJ|s\N8TXilOvNEg͈uk*[wE$Dk0dm(6*nlCH`/> DF `oOJ2O WSg;6o~#Kh?QycmW_%X;sB⭸돥 +Zdvhaװ ^phC-Co~^?1<͝r:ft>=;H{s`F>J^oJX5`w:)otbvtl<#bA(t\Y¹m) c\&,1Yen#zUa^ =)~sN(O1ȍQlth4"`NmБG$w2OA-YVքQIILN VMS.BCK)[V9.BIN]ICONX.EXE;17L Y~doЬRݢ5dll|^]UnTPРVcKݭK{PRݭ&~PSSlPQQ  PSQQ RRSqd~l ~doluMRRSRS ]lSd|~cd cRPRP矦dЬRݢKdlЬSУ,Rdnݣiݤkk|^YU~mTPРV_JݭGzPRݭ"}PSSkPQQ  PSQQ RRSqdzk ~dkkqLRRSRS YkSd|~cd cRPRP矦dЬRݢЬRݢŀdkk^uY޼nnWЬ R׬ R1cެﬔjZMmj լ14WRWТ[ݾɱݾj$Vݫ $jPR@UUjVUUjWSWSUU VRnTЬR TЫS?XXjVXXjTRTRXX VSnUxSVTCdUЫR?TTjVTTjUSUSTT VRЬRТWТЬ R׬ R1GDXXxX~iPWPPXPP@gPPXϡXWiެZj+iRXcUiVUfxBgSdGTCdUǒUfxBgS=GTCdUTkU hRRXhW@hP^мRxPFQ@axRRBa^gPŏ߭|^VլլP߭ThѭPRRA RZ RQRQQr#RRA RZ RQRQQwP|~|~߭P ߭gPԭԭޭЭޭ쭓 @|~|~ݭP ߭gPЭP@ݬ߭gPU߭gݭPeP PP@TRQQAQZ QSPQSSUPPPb)Э ЭffPަݬfPЬ|~|~br TPTTr SPSS fP߭fݭPUP^мR  RRBSPPPSPݣ3fݬePTw4|~|~|~|~(ݣ zP{ PQPPRxR~ݣݣ fTP^-VbgYWgZUެSU}WXTEhP`PP<Y%Q?Pߦ jUgcd8PgREbP>ߦ iURcdߦiURcdPUUլ ЬRbߦjݬR%Ѭ ЬRbߦiݬR<^AUߥЬSЬ RBc~dPݬݬBc~dPլ+Ь R޼SBc~ߥ!fvdݏcެ SެRcTcQcP@dAdcc׼ ^\߬&>dPެ2|~?`;P^Q;SB;TcR8;*0;լ_|~ c|~02d~ Aլ|~|~c|~:2d~ P|~|~c|~z~2d~ c(bPbP ߢ>bPc(bPbP ߢCbPP^^^?:M^M1M|~|~:z~2:~ 9P@GzHrEG8OrEE F}@p q=@GzH? ?[7n(00< ^ެScRТPP !@УQ֡ѡ  cPРRBЬQСSS RRRV1CnnU ޮTSPS"P@@RRRQ PPSQQR XЬRբOެUePРSCTSQQ RxTPAPTQQ ЬRբTTЬRЏbTЬRЏbЬP ^ЬQ ԡЬRסСP@:R5ˏRSSSRxPPסСPS@ެQaSףУRˏaB<aЬ RЏbЬ^լPì RnRTn~`dPTVH~`fPT`TjTݮOPPЮRТRЮSB Ю TЮSPS @dPPSѬѬ$PЬ SSSRS bTP TTYˏYRBaR1[ˏYRBa0YS  YSSSPPkPЮ UkTPXЮ SЮWXZWRPBeTVZVˏVBcVZRЬ RRRPR `SP SSYˏYRBaR1cˏYRB`,Ѭ %PЬ R֬ bYˏYRB`Ѭ ˏYRB`PѬ-ЮRݮϐˏRR ЭPЭˏP^|XЬRVЦWW -PeHXTnGR `PRaRTXWW զrXRpXRpRP^ЬPРPpSqSqSЬRЏbjSPsSpSYrSYpYUpU~^pPWVH~ ^fPW`τWjWTRTPd8URRTqU d8UTTPRPST%dHUjUQSPQ@nQPbPUSST۔SsUSSݬR)0^ЬSRâ RRnTVH~V]dPTp"~I]fPT`TjT}+?}#?J䞭JRbRݮPb |~%GЭRբ֮ݮ Pn |~FЭUХVЭRТSC ޮ WFޮVЮUTUD DTTU[ЭRТSCYYUVЮTQTRQRPAeS4PQTPQPTRBeVSPTRBeVRRRSS~[YW TYVЮUZSUZPxZRCgRXQXPTR RP Q{RPQPQCfQXPTRRRPRQPQP{RPPQQZSSU0ZRRk1PЭRբ-{ЬR[nb[ЭpHP ^ЬRPà RRXxRRnRSdSРRnBU `PUpU~=[dP`PS`SjSRRRݬ [XPU |~0EЬPTХSФP@nnWCޮVXSRSBBRRSդ ݬ-ZXХRBݬP^ЬW TЬVЬ UYSUWxYRCgRXQXPTR RP Q{RPQPQCfQXPTRRRPRQPQP{RPPQQYSSUYXЬTUЬ SRSPRPBdQ4PRSPRPSRBdUQPSRBdURRRQQݬ ݬݬ$0X~Y ^ЬPPà VVVrPUPЬPTХSФP@nnXCޮWVSRSPBBRRSФݬUP^}';}; FFЬ ˏ nn1oЬSˏcPP1[Ю RQá PPPà ֮RQbRbЭQЭRѡ1Ѯ1~oPV ЭrEPîTTUUЭQСSЭPTDhޮhЭP^}3|}3tp>ll>Ьˏnn1fЬSˏcPP1RЮRQá PPPà ֮xRQbRbxQЭRѡ1Ѯ1~,PV l.>PîTTUUЭQСSxPTD0ޮ0ZCDޮDYEdޮdTЮSWSR!B0BDPWPˏBdPn1߭ЬRݢϪӞSã UURPà ZZUZUTZTTVRSbSRcRUPb Э!PUVЭRբТSCX1PRVSPb ЭV!PЭRТSCXXTUVRQR AdQQRUVTЭRТP@ޮWDh(ޮ(TURSRPCC(SSRЭRբ VXXώZVЭRբ ТSCU1RV﫜Pb Э PЭRТSCUUTZVRQR AdQQRZVTЭRТP@ ޮ WDe$ޮ$TZRSRPC C$SSRЭRբ VUURVЭPRQBhBeARRVЭSЭRɣR1@ЭRVЭRТSCCϖ1PЬTˏdRR1߭ݫςўRSã WWPà ZZWZWUZUUVRSbRbRZjPb ЭmPWVЭRբТSCX1PRV/Pb Э2PЭRТSCXXTWVRQR AdQQRWVTЭRТP@ޮUDh ޮ TWRSRPCC SSRЭRբ VXXjZVЭRբ ТSCU1RVPb ЭPЭRТSCUUTZVRQR AdQQRZVTЭRТP@ޮWDeޮTZRSRPCCSSRЭRբ VUURVЭPRQBhP2 VMS.BCK)[V9.BIN]ICONX.EXE;17 0BeARRVЭSЭRɣRЭRVЭRТSCCuݬ ݭzͤ^X}h}h}h}h}hЬZˏj[[1ЬQˏaRR1Sã VVPà YYVYVTYTTURSbRbRUPb ЭPVUЭRբ ТP@WpRU˘Pb ЭPЭRТP@WWSVURQR AcQQRVVURBgЭRТP@ϘЭRբ UWW$YUЭRբТP@TsPRU?Pb ЭBPЭRТP@TTSYURQR AcQQRYYURBdЭRТP@ ЭRբ UTTϘRUPЭPRQBgBdARRUЭSЭRͣR1ЭRUЭRТP@@F1P[1߭ЬRݢ:͞Sã UURPà YYUYUTYTTVRSbSRcRUPb Э!PUVЭRբ ТP@WpRVPb ЭPЭRТP@WWSUVRQR AcQQRUUVRBgЭRТP@ϴЭRբ VWW@YVЭRբТP@TsPRV[Pb Э^PЭRТP@TTSYVRQR AcQQRYYVRBdЭRТP@(ЭRբ VTTϴRVPЭPRQBgBdARRVЭSЭRͣR1ЭRVЭRТP@@b1PЬTˏdRR1߭ݪN˞RSã VVPà YYVYVUYUUWRSbRbRY6Pb Э9PVWЭRբ ТP@UpRWPb ЭPЭRТP@UUSVWRQR AcQQRVVWRBeЭRТP@ЭRբ WUUXYWЭRբТP@TsPRWsPb ЭvPЭRТP@TTSYWRQR AcQQRYYWRBdЭRТP@@ЭRբ WTTRWPЭPRQBeBdARRWЭSЭRͣRЭRWЭRТP@@}ݬ ݭςͤ^Z VЬRТSzSP{PQPPYSQYYSQQW}f}f}fjjЬPˏ`RR߭ݠ ɞЬRQá TTTWXXЬ PЏ`R΢ЭjPRQbRXPbЭjPЭSգKRTʒPbЭjPЭRТP@UTUЭRТP@ϷTUUL PУRBUWSЭPРRBSTRBYUϧPcЭRTPP@nnSWRQRNPAQQR>PЭPРQASTW~QRBYPP QWTDeRPQbRRYU<PcЭRբ;ЭRЭRТP@PxYRRRR`XЭRТP@@iݬ ݭnЭ^ЬYЩnSЬZЪUˏi[[1ˏjPP1ѣãPã VVå RRVRգVRQRVQQPգLУPХRB ޮ X@ޮWVTQT!PA APPPR QQTRRPХPУRBޮW@ޮTVSQS!PAAPPPR QQSRRP[ ݮY nZ PPP^x [QSЬRPà XX}k}k}k}k}k:̞0RXPb ЭPTX~Pd ЭPЭPРQAUTЬPdXR5ŏmNAPv PˏPnPdgPdHPjPBeR˞TX~Pd ЭPRXbPb ЭePݭݭXЭRТP@ЭRТP@Uϖ P Э%PЭPРQAޮZUAޮWXTUYTRPBYVˏVBVYRݬݭό^}잭ЬR Rݬ R~ݬ%Э}ЬRRâ [[PR`ЭRբl[CPT ЭFPФSЭPРQAޮnЬVC ޮ Y[SVXSR1PBXUˏUB xUXRu[~ՍPT ЭPФP@YPSЭPРQAޮXЬUCޮV[SUZSRPBZWˏWBWZRZiЭRТݬ T%Эa^}\H잭>ЬR Rݬ R~ݬ]ЭЬRRâ [[PR`ЭRբx[~݌PT ЭPФP@nPSЭPРQA ޮ ZЬVCޮY[SVXSRPB XUˏUBUXRXh[gPT ЭjPФSЭPРQAޮXЬUCޮV[SUSRBWˏWBxWRЭRТݬ T^}잭ЬRR R&߭Rwݬ ݬ{ЭЬRQá XXPQ`X~lPU ЭoPլЭRТPЭRάХP@[PTЭPРQAޮnЬSWDޮZXTWYTRPBSVYVˏVBVYRYkݬ Uϟ^[}k잭kЬRR R"߭RTݬ ݬЭkЬRPà UURPbUOPVЭkPլ ЭRТPЭRάЦQЭRТP@ޮZЬTAޮYXSU\xXRCRWQWPTR RP QP{RPQPQCQWPTRRRPRQPQP{RPPQQXSSUݬ V[Э^}}x 䞭n ЬRR R&߭R ݬ ݬЭ3 ЬRPà WWRPbSЭcRWPb Э PЭQСUЬSSVPSVЭRТP@nn[VTEޮZWUYSU\xYRCRXQXPTR RP QP{RPQPQCQXPTRRRPRQPQP{RPPQQYSSUYSЭRբSSЬ RЏbS0 P|^ UެVfpUxUPPPPfPUެ T}UtdRSRRRcPPxUPPPPPdݬdcPPU)PfЬ RЏbPЬ RЏbԢPP,^W SVެTլdrլ!di }Kb d PլЬ PЏ`PѬ PѬԬЬ PЏ`Ь13SxSPPPPdPSЬRS1Ug<TPVЬ PPPPePQPRRdgPR=P߭RCݬ ePPˏ PQPQQVxSPPPPPpVݬ ݬݬ 9PUPݬRdgPR@P߭Rǻݬ ݬPPˏ PQPQQVS1VЬ PЏ`RP4^ЬZTФUU XXЬYY1Y1YfդPEޮVYWXSQSPQPAR3QSPQPSP@WRPSP@WPPPRRPդ_YREnnTRUXSQSPQPAR3QSPQPSP@URPSP@UPPPRRPP߭YeZ^WR)ЬUT SBeBdVWVˏVBcVWRWP^WR)ЬUT SBdBeVWVˏVBcxVWRWP^ЬR޼ SBcnnVЬTUT PEUUTSLZ YXZR3ЬVЬU TBfCeQRSPP@dQXQWˏW@dWXRXCiS$^ЬRТSCXЬ RТSCVSîRxRRRRRcRެެ~ݮݬyPhݾVݮݬdTվ1oެ оо h[޾kf hRЮ Qѡ= R ~ўR.gij$PgRgЮ bQ JD;=hRЮPѠ: RЮQѡR+gij!gRgЮb ]S4TPppdxxdУSDRROPb0RPhSѠ0 SѠS%gijPgSgPcb R+RR1)SS5PPc0SPhRѠ0 RѠR%gijPgRgPbc SSS k ^ݬCmRТTCPФPФ QPQ.Pʏ`ˏ`RBfRRS PPRbSSPPQФTRТUCPХPХ QPQ.Pʏ`ˏ`RBfRRS PPRbSSPPQХUЬPP1PR?P1PhRâ RѬR1ݬݬPPj<0}P<2}PC5Râ RѬR2ݬݬgPP<3}hP2P^UX^ZмSS/S!ˏSPPN?P ʏSЬ[ЫUYU1U 1eWW$ˏeRBRRS PURbSUSTЬRWeW12GR8URSG4V xVVSVRPTRSRc SSSRG PnZѪP0egh&ePen`AP`A P`AdRRcS^e[YZЬRТUТTdXXWPWЬPРSР,RVUV1 UPRP+ХSХ TdXXWWUReVХU1PT@xWPTPPRP1XФUTRФSФTdXXWWV1P SPRPУTdXXWWУSR[Qaݬ)01PЬRТRݢݢݬ 10ЬRТRݢݢݬ1ݬ ЬRݢݬϖ1PЬTФTФRФ SѤѤTTTTެUeRTRT1~eϘRTRT1ЬRТTФRRݬ=1aPRݬ!1EPR'ݬ1)PФ RФS/ݬP7ݬRTRT~ݬRTRTݬ)1PݬϸPPݬЭiݬ'{SRVˏRQQ UЦTPˏRTxTTxTTTPQU`TT(STST=ݬ%P'Rݬ@Rݬ'1$ЬRТRpR߭ƟpR~ݭAݬ1ЬSˏcRRSݬ'1ݣDݬ1Hݬ1PЬScUˏ/URR@NЬTT[ˏcRxRRRݬ ݬTT)3TˏUTTУRݢ[ݬ /TʏUEhݬ kUЭi ^RЬQSQˏQP@JPhPSSP|Ѭ"hЬPP"%````; P?PP\/<Ѭ 4‚ݬSѬ …ݬ=ˆݬ.ݬݬ$R~ , VMS.BCK)[V9.BIN]ICONX.EXE;17NѬ1ЬPP>zk\?PPy‹ݬŽݬ‘ݬ”ݬ—ݬšݬwݬh ݬYˏ~£ݬA^VЬRТ TТWլ WWݢƪݬ ЬRݢƸݬUSWqSSSФ TU WRUR;SRRR¤R ~xRP@ݬ'UW&ݬ,UݬUݬ<]~q|^V UVU@TVURRŬRSSݬSdPRVPPRUPSPVUP^сWЬVЦTfRfRSS`S~PjPPЬRТUSUPRP SUePRPURЬPReP PЬSPЬP֬`SPP ^ЬPР}U/RѬ Ѭ`PSQQdPSabPQQdݏ^|RﶗSЬQTQˏQP@oPhPTTP1Ѭ"1ЬPP"$}}}}D P:?PP\CZѬR`PPPѬ2x`PPP_`PPPߣB`PPPѬ1ЬPPA             s Pr?PP1_PPP _PPP _PPP_PPPs_PPPZ_PPPA_PPP(_PPPˏ~ߣߣ^PPP^zXY}}Sii1RxRSS~bP iP%{^P iPެUeSPcRSRS%P"Sc~PRSRS'%^P iPּ1Pˏ_RR1nˏPPPpDt `x``````417P:?PRݢݢ)PS S~aP iP 3k]P iPЬRPSI]P iP S1%ЬRТSУ RТVݢ ݣAPUURVR~6aP iPK\P iPЬRТSЬRPbVУ Rݢ \P iPVU\P iPU1gPЬRТRݢݢSC@PSS<\P iPЬRPSb1ЬRТRݢݢ`PSS[P iPЬRPSb1ЬRТRݢݢoPSS[P iPЬRPSb1jRТUТ U~_P iPRѢ"Ѣ }S RPȈS R PȒSRRS [P iPЬSPUZP iPUR1PSУUULЬRbȦ1PU5ЬRbȭ1PU ЬRbȵ1lPУ RУxRS S~^P iPS(Ƚ;ZP iPЬSPc&ZP iPЬSPcRSRS'USc~PeRSRSYP iPּ1PݬϜPЬRPPPbiPRТW9VSQRPЁTPˏTUURTTPRRWxWRRWW<WW`]P iPYP iPЬRPbVˏVTT URSˏVRxRRxRRRSTUcRRЬS'V~PcVXP iPּ1m:1\PˏRR1Sã RxRRnRTdTУRnBV `PVpV~dϫP`PT`TjTRRHRPSЬRSWP iPS1Pݬ 1Pn1PЬRb~ЬSˏcRRKУRݢQNPSSJWP iPЬRPSb!{}iPP^rXЬVЦRТU7VWSQRPЁTPˏTVVRTTPRRUU4,ЬRТRS SRSbRRcRR1PU4YU1ЬRТRS SRbPSc}PU rЬRТRRRbZ PUPU<ЬRТRTTRdSSbSTRSSSbS TRSSSbSяSPP<^ЬUTRSQЂPPˏPUUSPPQSSP^QѬˏP@PhPQQP^ЬRЬSRSP?RRPQSPQQTPRPQSPQQTT PP^ЬRЬSRSP>RRPQSPQQTPRPSRPPTT PP<^}UЬT1ЬSSTP;STPQSPQQRPTPQSPQQRRJePT;STPQSPQQRPTPQSPQQRRePeŬP^Ѭ PάP^ЬQˏaPP СPРRˏaPxPPPRRR  QQh^ЬP֠Ь QaЬPa<^U}}e䞭eSЬRТcSЭRТ cì T(ЭRѬ ЭP  QР aЭPѬ TNެSЭQ PPcc¡cЬRxcP@P}`b֬ ЭPѬ   QР aTЭ<^MT}N}Fd䞭dì UUSUURSGMPbЭdPRSU!NPbЭdPЭPЭР ݬݬ ЭPݬЬQЏaЭP,^VXW}h}h}h}hfԞfݬ ЬRТR ~ 9PЭfPЬSУTЭSФЭSФ RB'BSݣSЭSBRR BSTЭRCd1XPUPCgRnTdPЭTB`խQЭPݠ ePTЭfPЭQ ЭPTBTЭPРPT`TЭPРdխRSS TЭRCd1rЬRЏ bЭЭSգ RѣR SЭԦP|^VS}f잭fլ  PPPRBcPPRR  BcPPxRѬ  @UT P8UTRP(PQUQxPPPPxPPPQŬ TPPQ~'SPЭfPݬ>HPЭfPR$BcIPQЭfPЭPQBRЭR ЭP^ЬQЬTQSS SSxSRBRRPPxSRB؅P@kSSSSQS@RCP<^ެTdScЬRТ UdSޣ RbԢ(R Uݬݬ^ XЬSެVfRѣ 1Ь SУRѢrУWUfSޣ8TURxRRR fRТWdT UЬSЬTФ cRУSBRC Ь R*ѢW$Ь RТ Ь RѢW Ь RТ լ 1ެTW֧gRѧBhdRԢbb  bSЬRCPdUeQЬSХPAS@ eRB VZdSVQQQVPPB4PPQԬ 3Q.Ь Q(dPѡB4PЬ PР Ь Q dPѡB4RB Vլ 1QЬ P^ [Y}k잭kRЬbЭRբ4ЭkЭR TT1GPZЭkXUЭREWXPSEiBCRXVXVQbP"ҠVVTV PbRPaQРPabSSEiUЭREWЭRZEЭSx RR Э^)ZX}#j잭jRЬbYЭRIYY  ЭRIYЭRբ1 SѢS1PЭSIRWYRYBVЭRFU1PTFhnDRDPЇQP.Q*PѠ PbRРP QbRСQPQPPbRРPQPQbRСQTTFhVЭRFU1{ЭSx ЭRբ SѢS11Эj^Ь UЬXUWXQWSS SSxSRB︁RRPxSRB更P@7SSSSWS@RCSԼcR5ТTTUSPTUݬ qUPSPScRSP^ЬSм R ~P#RPݬ PTT 2T RRPPSk VMS.BCK)[V9.BIN]ICONX.EXE;17]RRݬ TePTRP ^hScPRߣ PRޣRRr^TSԭЬd잭dмP ~PP"լ HPݬЬ PPPRP<RRݬݭPЭdSPPSPP SP^мTPЬPРRST!PݬCb~PSSTSTPP^ݬUmP?+J @E>xF>f@ffffff0^ЬRТSÀVЦnլ լ լ@PѬ ѬѬƀPլ%ø<~[Pøô[ø#ð<~6Pðì[ðެ ZjެYiެXh ^( nݬs( حxF^VЬRТ QТSÀPСDXРWÄUÈ[xfffУDZУ@Yݬ ݬС PݠPTUݬ ݬYZXUWݬ ݬYZX[WTD^RWzYЬPР VРUŀPЦD[РZń ňЦ PРXХ\ХXnQQ1>QPP+/77' ?PP11Ц$D1ЬPРP `1Ѧ0 [Z5ŨPݠ8[ZXåD ~Ц PРP2>PP@~ݥDݮ ZXåD~Ц PРP2>PP@~ݥD[ݮZvЦHSЬPР P< ЦLPР8RPRͣ8R~[ZѦ0ݦ0[ZX@Ц$DЦ PРP2@Q@QnQT1'T@Ѧ0 [ZQ|~TSSݮTRR[ݮ$ݮ(Z ŨPݠ8[ZRݮS[ݮZЦHSЬPР P< ЦLPР8RRͣ8R~[Zҽծ |~ݮݮ|~[ݮ(ݮ(Z JѦ01lݦ0[Z1[ЬSУ PР PРQ<ХDR 2PP~fPݠ Uݠ¼1УPȏ`1PS*1P¼„€Pݠn¼1vPЭЭ1e1aЭPP88HXl88888888881+P?PS^*1PgS+1ggS+1gTL VMS.BCK)[V9.BIN]ICONX.EXE;17l1S*11S%P1PУP1P¼1S)P~PУP`P„bfУP#€PРTTiˆ ˆTjˆŒ€PРTTiŒTjŒSkSkPPЬPРPUUPլ14fPݠP1 P^=\%P\P PP|A\ЏP^KWԮ ЬRТ RТ0ЬPР VРRRTĀ[ЦDYЫXĄZĈ|Pՠ1|BP |~ЬQa%hPh@hhhhlծ 1ЬPРP`1Zߧ ݤ@ݤDYZXߧ ݤ@ݤDYݮ$XЮ0ݦ0YXЬUХ RRQաD,СHS< СLPР8RRͣ8R~ݡDС@PݠPЮ P֮ PwЬPРP`j0YXwЦHRЦLP͢88~YXZZߧݤ@ݤDYZXηߧݤ@ݤDYݮ$XX6ЬRR[P1LP1@ТP`1Zߧݤ@ݤDYZX`ߧݤ@ݤDYݮ$XGЮ0ݦ0YXЬTФ RRQաD,СHS< СLPР8RRͣ8R~ݡDС@PݠhP^UЬRТTĀRТVĄWVSeR)PRPPSP|AR<SSPĄ}dxЬRТR`WV-V(dĄqSeR&PRcPPQP|AR<QQPĄ$Pݬ$ݬTGP^ЬPРPP^]\Pݬr|A\P ^ЬS3R)ݢ|ARУR€RݢPd^FW鸞YZЏt}lhiddipRЬbXެVXfVެ TФUxXQAeP`;dRAbSc/ARbߧPc~b~WZXXfPUdiPPUdiPХRZ;P€UdiPХVЏxp|U6P  ХR€UdiPХ RТ R XХ RТ RТR2@ԦDХ R(@Х R$DTլ1ެ SXxTQAhP` ߧ cPAP`P^|txTPcQ@aRb@RbU行P11 'PB?PTdiPUdiPTT1pզݬUPХ RТLƨ֨UnPdiPdiUP^DWЬSУ VУR€TФUբ0BŏP0PŌQ@$P`ŏPńP@P`UwP”1Pբ;ߧ)ݢP*߭ݢS-LP”FФ8PРP2>Q2@PPQQբާ*ݢPݢФ8PݠP  ЦLPݠ8ЦHPݠ8ݬ ݬŏPńQŌPAP`U PݏU^7YPP[Pļ1iФ\ ФXѤTԤTPiѤPԤPPiФTФPЦ PРP2<Ц PРդݤPi|~ݤݤ[XOݏ [X'#ļ\դ7ФPRUPRUUФTRSRSSݬiĐ3PP#ļ+7;#[XƬŏP0QȌPA0RѪ$bݪ$[X߬ļ [X[XЭ\ЭXݤXݤ\ݬ)PPդd#xdRRN[B@@[XĄRެRbPРP`BļĐ5bZP PPbPРP` ļĐݦ0ݮXXP^ЬRТWǀXЧ\TЧXSЧTZЧPYݧXݧ\RSPPDŽ1ݨVlR(RPPQP|AR<QЬRRSTYZݬ PiPRSTDŽݨLPRDЬTZVYUФR€PРS„PVTUPPݢPݢTPSJSݨɪDŽݨݨlP ^}SЬPР QРRС PѬPЬУXP ^ESЬPР QРRС PѬPЬ У \P^ T||ЬPРR߭߭߭߭ݬ8~PSPSЭ Ф \ЭФXS ЭTЭPPP^ЬPРPݬ ݬ|~|~P i<^ЬPРSÀRТUÄTգ ݣݬآPUkTgЬPРPݠTUüJÔDÐ>ÐUfݣPݣТ8PРP2>PP~ݢ ÐU1P^ЬPРRբ ݢݬ:P€Pՠ„ݢ„ݠgPP^լЬPРP` ЬPРP`P<^ݬ~ﯞPRЬPРPSУUTRdxRRR RNPB@@xR~U4PB@@TB@@TUJPP|^9VЬSУ RУPPТDTРUUߦ+ݬP3У QߣFݬϤ.ߣMݬߣUݬߣ\ݬPP^ﭑYЬZЪTĀ[Ы Ąn7Ь ݮ u  PĈ ļ1ЪR¼1ĀRݢ0Ąݢݮļ1P[PPPPPļ1P]7ݮ  P1Ĉ ļ1rPĄļZ1YЪR¼enݮ-ݮ}ļ1+SiR&PRcPPQP|AR<Qļ1Pļ1ĤĠĜĘZļ16ݮ  P1ļ1UŏP0SЮ RŒRC RѤ\bUUVФTĘФPĜФ\ĠФXĤŏP0SЮ RŒRC Rb\ŏP0SЮ RŒRCRbXĈ1GĄ ݬ6ݮNiR(RPPSP|AR<SV1ݤXݤ\|~2TSiR&PRcPPQP|AR<QѤTΤPSΤTRЬVRXSWЦSÀRТUÄRXTWPRݣPݣTRU%UnЬRТR¼ nݮݮG[PPPPPļ1P4ݮ  P1Ĉ ļ1PĄ1ļĘTĜPĠ\ĤXļЪR¼t`nݮݮ ĄTBSiR&PRcPPQP|AR<QQPĄPPĀR4P^E3XЬSУR€PРW„Vߨ}ЬUUTdP7ˆ ¼uУPi€Pݠ0„ݠ'QȂUdP„=УP2VW;%ȉUdP„ ¼ PPP€P\P^٠RЬPРTЬSSbPcPPP@bScPPP@b񋏀cPPP@bScPPP@b,PSPĄ7ĐݬDݬ2PPP^1RЬPPŽlP^ЬPРQPРRPЬTЬ PPݡPݡTPRޞR'P^ЬQСRЬ\ЬXݬݬQ PP„0ݬݬݬ ݬ„€Pݠy€RݢP^0UЬPР RРQPТDWРXVŔЬTTScPԢ,eŚTcPšTcP ŪTcP ,7PŴTcPŽTcP TcP ,PPVݢ,WXڝPP^ 0UЬPР RРQPТDWРXVЬTTΜScPԢPETcP TcPP$TcP TcPPPVݢPݢTWXCPP^ЬPР RРQPТDSРTPլPЬTPݢPݬSTPP ^ЬPР PPQաD+СHR< СLPР8SS͢8S~ݡDС@PݠP<^ЬPР SݬPPRPУHPݠ8ݬRHЬUХ RRSգD.УHP< УLRТ8TPT͠8T~ݣDУ@Rݢ(P^S.UI VMS.BCK)[V9.BIN]ICONX.EXE;17Ds{Rݬݬ ݬݬTPPP|^ЬSУ VУPUЬPIˏPTxPˏQxˏRŏT~ŏQ~ŏR~S\RxRP@|Qa@xQάPPaPRRPxRP@@HЬTФ PPQաD,СHR< СLPР8SS͢8S~ݡDС@PݠP|^ЬQС RСPPТDTРUݬQPSPТLPݠ8ݬSLTТLPݠ8TUЬSУ RݬPPP^;,YЬQС XСPTШDZФ[ЬPsˏPUxPˏSxˏRďUďSQWŏRVURRSV WzPPPPRxRP@|Qa@xQάPPaPRRPxRP@@LZШLPݠ8Z[ЬQС P@ԣDPP^ЬSУ TУRRQPФDWРXUVˏ`Yȏ`U1УP`1Ѥ0 WXդ ЬRТ PՠDݠDР@PݠuЬPݠݠݠ ݠݠݠWUVX դ;ЬSУ RբD. |~ݢDТ@PݠѤ0ݤ0WX YP^ЬPР XРSÀTШDZФWÄÈÈPЬUU Ѭ 1УYУ RR[Ь PRPRQPPQQ УPPUPVPUVVŏP0PnjR@$P`ݣ ݣŏPDŽP@RbWPnPèPݠ8ZW1Ѩ0 ZW"ը ЬRТ PՠDݠDР@PݠЬRRY7ݣ YR~YZݮWծݣ YR~YZݮWeЬ RR[5[R~Y[ZݮWDծ[R~Y[ZݮW'ШHTЬPР P< ШLPР8RRͤ8R~ZWN|~[Y|~Zݮݮ$W ͐Ѩ0ݨ0ZW%ը;ЬTФ RբD. |~ݢDТ@PݠUݮWnÈP< ^ЬPР RРSУDUЬQТ PРP2P2YYPP~CPYPYY~HPPP^TYЬPР WРPPЧDZРXЬRRdUeRPP~OdScPV1ReRPP~TcPReRPP~YcPVeP`RcPRPR߭ocP RcPRcVSRbb]cPVRSVm߭߭߭ݬ ݬݬŏPȄQȌPARbX\dPPԼŏPȄPȌS@$Rbݼ ݼ@RbXcPYPYPZ9ЧHRТ8ЧLRТ8Ч RТRТӟ< @~YXDdPDPZV3|~ݼ ݼ|~ZYݭX qcXcݭXrcYPP^լPЬRТR€Rݬݢ$ݢcPPXЬV( TЦ Rp4VpV~<RnRRgHR~aUedHPjPpV~<RnRRgHR~edHPjPpV~<RnRRgHR~edHPjP( h( ̭Э ЭЭP^ЬRТ Rp4VpV~ެ T<RnRRgHR~aUedHPjPpV~<RnRRgHR~edHPjPpV~<RnRRgHR~edHPjP( ^ЬRТ Rg4VpV~ެ TndRgHR~~`UedHPiPpV~nRgHR~edHPiPpV~nRgHR~edHPiP( ^ЬPРPPݠRaPP^ЬPРPPݠaPP^=M[>MZ+MY T|WWMPLMR WТRz7RТXz,P{WPQPP,MVSդ,PSЦVS,L\*P\yPPQP|A\<QQQi}bAkjPPVPR,SRW9LUPPX|\լS,Р\\QUQQPRSRW@1QW8ݲ VMS.BCK)[V9.BIN]ICONX.EXE;17}^ЬPРPPРRݬR~_RI`P@AK7@AK7@AK7@AK7ƙ?+J @E>xFA!hA!hIA!hA!hA!hIA!hA!hIA!h^RPլ RЬPP֬P PP^ЬPРPlQլ%Q QPQQAhPPP^WUTݬݬPPЬPРP|PѠPݬԥݬǥѭ ѭPˏѤˏѥЬRТ P $Т P (PЏ`SТ PР PРQ<ФV 2SSSVcVTSD YSSU-P2CQQTQS2CdQQ2CUZV<TVDTUD SSYZ1PYX1ZSSXU*2CQQTQS2CdQQ2CUUXZU2ESSSj2EVdTT7T#zP{PQPPT>SSSVcVTSD XUfTTX[sh+<*: Rb?z-I%y蠢 FdѪ5*i7a1\HĴՃb*@Vu-asz `bKIX +yhWQv۔ ]$5(p-dhBa\F$kCdqBxx}NSB AwvJh)u G/{wO]YubGuW 5OF@yۃH_Cժ1.$P [74;[I}1 Po/P!1/Ab@GrEOKz;↔ûv]nzi[ӃzGMaTp>:K8I J)Y20v_ZM/nixy Li 5TIA~u⍎EeّB(>*l? &|yiio dtN#>%|Z2Q? w 'gre^'NsK&?0c6ϼAT5X#0-n󯥾@<f ;?5>{!V7__XES#2#sGL*h$#5j-D$m.|o+!# ӧ9%KOyl}['8{͎k,R~aP*z|߹{nGu$~ O VX_*y!qGXTQN͞!dTᄖ9H&S_{BMٔLp5y\}Z !TЃ["eюڟHr2g)[0qze~-eq7b]>1-MR]@rx\cfԢDk#mx,C@}_~D>mya,4Y.n݉ɲ!|q1Q Pz_5Dc9%V 6c迡2[+΍wsA{-|=!{I4 -L_J[}]Rڀ&1/=ݻ]x8o ^ n|/i+)TłKJ:2|R(@mˑC7@~E1s2T9a8䔻zS bp?gb}t}2-q7/ώh)kxdroX؉w.A-ǃپODU _37ӏa 8 S?kXhZj&] ftd:J#ʾNJR%;(4=XXۀ`F(o)DFR~p{;$m!VM$t՞lS%0RWKԹU] Z;emͥlD?v)336symŭY)A D:Ltyctfϡ͏'PI[HK[CBm]M29GŴekror'_jnLw0 4+5dY˷h%eɩNc\BO:+60F@gNQS@D4|-Mfp{9O_ۧ~%cs6^lhS<6xCTW($c&U-Z7͉ۧ(][KwԦ7 ES}6bxEZˠ_ 7-t!67jJ-e1z6AԼuoj<@FQp{% p1 ׅ>g9B(ϴp4&?>LmBκMduXuk5ZY"*DskDɂ--\C~/Zlz8Ģ{cOCW!e0]J:;"#@Buq-[K8NL8_w{ ޳&RB=Mym|}xV%XG0HVMj |1vFlV3W"1?jRi  ) Y|} Q >2Va< 4mzL+*<-١"YxPLՍTU[˛F,{OIjB!E81|ʯ`{$~S;9\*݆nļMT%v 1k!Y :mƄEe:=L^PRŎemmZ^;៖qMQpR(4Cs"432-wYz˾P8$)<݇hVp=붠F~>ku[rZ!򯕒?WcĹYQ@uoowkݓ=">FySjP ʤ̉f#q?={Oɞ#,' D b`q$z yU'ʃ-o ?dEB(Up Z~eel.w*$;}iLAf9Ĵ0.3`zjme鳀dN^#'NHccSovK}}z&7noRɡ dmOV+#p:)rΏR`WZBLo䣭_l7ߐԜ+n?,#:ӑW7GȦIs ĊʂjߚҖ#jG캭FOڅНh {ZK˒R9C!de*,i>JN-r5ӸΙ nm4yӴhh(Cb0RAZv@acn|kQp 3+؂AJﱞx\pksKVZ2a oJ {X!taԀBF+a#h_fhQQn/INs>uJƮNC8{TWl>Js|&*mTFML`PuwI,HZy+]!Cmy+ۓ9O:sb9C}|-uXcP6ASv^'8鹘m&\`E0б󔫛X!'Sc-p˳N˩ԤHŒ]<_@}@_7E9`j)ogRQ;A/q5{_ѩQ0m"B\n^+B+ x&+iٍqsꄡ4'Re_Zlz@!;+jd&ls!.G񶀚 gDL` b^ %άF\}XJ 1rϠ9&::\Io=HoA^)&:>2 WSg`ֶܻ(D)1훵pOd (R0DK52Ff9$˟6ȁ N]7ll𺑑 2-i!㲶y%Q6Sb. ScPקT}`Q]HJJVPH[de4ݷ~T/'/XT4C"Qw[w]$&NTG.sYVe-IENue?;I)ɩlxk0֎E;x)-Y_| 7ħ4.ᔧGdF">3oeP=NJTHt wh?/m+,꞊WChclrU p֟R;B&9ޡc7rՠΥ2x,Y݇})_@/A&fx/ `KJMia1$q 06M&ɶ?hh~kn*mg.Z7;ѥor˟$׾`PA f{zeF׉+ϯӎ0Tq/F?p=u ?N)E-#\j&]n6~EwG.zDOPƤ~ `c~TjU;O2u47Lx4Fp}(7 BcNޥLM7m y +~ MCA6%j]:L:Kh\HJA1}Ok-s0^'g󥣬:$4)iȰdü>u%\͒#6g&8Hu~0m~M X_*讇sr9$o QQ5 V9c}-4k€ n~=sK} RS:A#s뗟jZQS猋u>^x2g`ȩQbn_X ֲ]ȗ.xbY;Yq*@>55p&5#[ f>$!s[-gg. E,BKGGAQۂ`A&JBk8_/z`*}(7h']CAy i1|Wq L5Aa9l8Q|RcN5;E|w՝M4e;_ڼA&$%$vE@vk@RBvB[4._1Pѥ~PK*EܝZ3-Cm!&t;BO3S6V3x ɐ5w͗bYe VMS.BCK)[V9.BIN]ICONX.EXE;179T%zP{PQPP PT>SSSUcUTSD ZVXU<TVDTUD SSYZPPPЬV(_P,VgP,, U_PVgP UHPʏPx(PPP$(($PPPTT STS$$T(PUUYY12P ^R(^>S,ݬcP,,PݬcPPʏPx(PPP$(($SSSQQ PQP$$Q(SP^%QRBRB PP^TѬPެScP2@QQRQcQP2@bQQЬP2@P|^ySPЬR2B`RR1RU2E`RRR2EVgTT:T&zP{PQPP PT>RRRVbVPR@ ЬR2BUgTT:T&zP{PQPP PT>RRRUbUPR@ ^SjTT=T#zP{PQPP!TPRRP`PR@  ^}Rݬݬݬݬ ݬݬ*PS ; ;SPθ^/SŬWݬ;PPW;PPTPTRBB Tݬݬݬݬ ݬ`PPWx  |~TxTRȏRTR~x~ݬx~ݬ? ';VxRVRv;UPV;VRB0BTxd~ex~ex~ePeeeVxRVR ~x~ݬx~ݬ|~|~, q: |$,4ޮ4UQ5PQP@4RQbЮ4R@RbQRRTЮ4R@RTbQQRRЮ4TBRbTx(TRR$((`P,R$B $$(,0,RR9R 8,(RWR[RTRZdYZ[1b9W8VPUYP@RbTARdb@RbUYXxXRR11Ux(URR$X((XP,P$@ $$(,(,RRgR f,( 8ޮ8UT4TRB8PT`Ю8PBP`TPPQЮ8PBPQ`TTRRЮ8TBRb PXZ[1YTx(TRR$((_P,R$B $$(,0,RR6R 6,(Tx(TRR$((^,R$B $$(,0,RRs6R 5,(Tx(TRR$((`P,R$B $$(,0,RR5R 5,(,RR5TdR 4,d;d5R PP^XԮnԮެ [kYZWG (ЮnjѮRkV(GfBfG G ֮ZnRѮR ЬSSTSTPcRBcSSTxRRPxRR  P <^TU.ЬSURBcPU`BP`UPPQBPQ`UUSSЬRCR ^aRx(SS$((_P,P$@ $$(,0,SS3S 3,(P^\,RR3R 2<, ^ SN R}b枭bѼЭbP&PЭbP߭ݭO2PЭbPcխѭ ЭbЭPgѭѭ ЭbέPЭP^VD@P@<~?2P@PDTTS@RC TլpάWW@ W UUWRnRRgRnTW}j7PթЬPЏ`Щ}jP}jkP$[P^ЬPР SРTެRbԼ߼xbQ޼ PA`aPbPެRbbԼ߼xbQ޼ PA`1PbPЬQ$aЬP(`a\Q`XSެRbbQ ߼QxbQ޼ PA`PbPެRbb S "P߼ SxbQ޼ PA`PbPЬTd ЬSdddcЬ Td ЬSdddcP^ЬRТ RТ$nТ(VެWVg15MX&[ZYPVRRgRPxVR޼ PB`hPVPVRxRR޼ PB`hPVPVRxRR޼ PB`hPVPVSSg||~VRxRR޼ PB`kPSPVSSgpȮ"pŮ~VRxRR޼ PB`kPSPs r`Ϥs `ЭrЭpϗ~p~ pPsbφnnP`PbPiPnP`PbPiPaPiPaPiPrPd4DPfFPd8PiPq@ ZPrPd4DPf)Pd8PiPլHЬPР RРQPТDTРSRURTRSjTUSjFPЬPР RРQPТDTРSRURTRSiTUSiVVg1PPT^ ެ nѮ 1ެоX޼x TDXR2bQ VxVVFX 2 ZZRRQW UxUUEX424PPRRW SxSSCX020XXWNWЮXRDR2bWЮXRF,2,YYRRWTЮXRE<2<[[RRTЮXRC828SSTNTXXPRRXxZRRXQXNX(SS[RRSxYRRSWSNS$PZоTFdR2bSEdR2bRRSSWоSFcR2bTEcR2bRRTWWX[YоRFS2cSER2bRRSSTPоRFS2cSER2bRRSTTRXRX@PR@ @΀n΀RgRRvRRVRtettRvRRVRLetLRvRS4M[Rn߭߭lnTРQnUAnVР РQnWAbnXРnYРnZ`ݭݭݭݭݭݭÏ M^勺RLЭLP:âL\n\S `PSgCSPdzEPjPP^ЬRb-&dP`P ~bP`P ~>RPPP^Ь RR ݬݬPb bPP^ݬMPPPR.ݬ[> VMS.BCK)[V9.BIN]ICONX.EXE;17j3PPݏR^QTެScccPRcߤZݏ.RPnew_context() returned in coswitchЬPЬQ^`]\[ZYXW V$U(T,S0R4լ a^]\}~{3a^С]С\С[СZСYСXС WС$VС(UС,TС0SС4R@@@4LTLT\4D< dl<4$,4L\|tLlDt|pR0 `  8  P p 8 hx08H(HP(0@`@Px@P`  h`hpt , 0 8  @VAXCRTL CMA$TIS_SHRLIBRTLMTHRTL DECW$XLIBSHRDECW$TRANSPORT_COMMONĎȎ̎Ў XCNV8 cnv_c_dblK cnv_c_intPԂ cnv_c_strcnv_csetl cnv_ec_int<cnv_eint cnv_inṫcnv_realCcnv_str0@ cnv_tcsetcnv_tstr/ $deref(Ltmp_strP dp_pnmcmp(x bi_strprc $strprcl itos 0ston cvpos= rtos ̒cstosK s8         XDATA XDEF def_c_dbl(@ def_c_int(h def_c_str<def_cset4ؓ def_ec_int(def_eint44def_int4hdef_realLdef_str(ܔ def_tcset4def_tstr) sXERRMSG<err_msgirunerr4drunerr? s<hXEXTCALLXextcall sX  XFCONV hYabs 0Ycset(XYinteger( Yreal(Ystring(ИYnumeric@ Yproc sh XFMATH Ysins XYcoss ̚Ytan \Yacos Yasin ̜Yexp \Ysqrt Ydtor{ Yrtod{ Yatan ܟYlog/ sԹ XFMISC Yargs@LYcalloutt Ycharl,Ycollect آYcopy Ydisplay<4 Yerrorclear8l YfunctionT Yiand tYior $Yixor ԩYicom XYimage0Yishiftt Yordl hYnamesܬYrunerrp LYseq  XYsort(trefcmp,tvalcmp, شtrcmp3 tvcmp4 Ysortft |nthcmp| nth Ytype YvariableM s   \o] VMS.BCK)[V9.BIN]ICONX.EXE;17>f  $XFMONITR XFSCAN Ymove Yposh Ytab s XFSTRؽYcenter ܿYdetab YentabH nxttab Yleft\ Ymap Yrepl Yreverse 8Yright Ytrim sؽXFSTRANL Yany xYbal Yfind Ymany Ymatch DYupto s      XFSTRUCTYdelete c_getT 8Yget Ypop HYkeyYinsert YlistYmember xYpullt c_push YpushD c_put YputD Yset Ytable: s  XFSYS $Yclose Yexit4 Ygetenv| Yopen< Yread YreadsdYremovePYrenamex ,YseekYsystemX LYwhere| Ystop YwritehYwrites( Ygetch<Ygetche< Ykbhit (YchdirP xYdelay` Yflushi s$   SXFWINDOWYActive( YAlertP YBg YClip| xYCloneH YColor YColorValueD YCopyAreaL YCouple$< YDrawArcD YDrawCircleT YDrawCurve YDrawImagepL YDrawLine@ YDrawPoint<" YDrawPolygon8'YDrawRectangle* YDrawSegment<D. YDrawString(l1 YEraseArea| 2YEvent 4YFg|6YFillArc8: YFillCircleT< YFillPolygon?YFillRectangleX XAYFontC YFreeColor 8EYGotoRCGYGotoXY HYLowerI YNewColor,J YPaletteChars4,L YPaletteColorM YPaletteKeyOYPatternDQYPending\ RYPixelU YQueryPointer 4VYRaise LwopenlmakeIconX wmap do_config< setheight8setwidth8< setgeometryb warpPointer0 seticonlabel|setwindowlabelQ setcursor( setpointerzt setdrawop Hrebind4|setclipA unsetclip& getcanvas setcanvaslseticonicstate seticonpos geticonpos0 moveWindowFmoveResizeWindowhx setfillstyle< setlinestyle setlinewidthN8resetfgD |setfgxsetfgrgb@ 4isetfg setbgsetbgrgb@ isetbgO\setgamma@ setdisplayX setleading setimage3@ toggle_fgbgq getdisplaye getvisualP lgetpos\ getfg, getbg,  getlinestyleLl getfntnam,getpointernameD getdrawopT0 geticonicpsetfontmhandle_exposures resizePixmap8L handle_config0handle_keypress handle_mouse eraseAreacopyArea  animHelperl animate  getdefault@X  mutable_colorget_mutable_nameh@ set_mutable4 free_mutable] freecolor.blimagestrimageTgetimstr ulcmp  getximage readimage getpixel_initPgetpixel query_pointerhT query_rootpointer  SetPattern"SetPatternBits 4#remap0% seticonimage' dumpimage|* loadimage`, nativecolor L-lcolor -xcolor. raiseWindow*. lowerWindow*.getactivewindow' 0walert/ s ٿ   1  YXRWINDOW0strnchr)0evquesubA1 wgetevent2wgetchne$2wgetchet 43wgotoH|3 mystrncpy$3 wlongread4wgetstrg 5xyrowcolX 6qevent 7setpos8setsizeh9wputstr9 parsecolor; colorphrase` ArgbvalBreadGIF CgfreadEgfheader FgfskipGgfimhdrx Ggbf| VMS.BCK)[V9.BIN]ICONX.EXE;17ŕ/fmap HgfsetupHIgfrdata4|OgfrcodePgfinsertWpPgffirstT Pgfgen` $RgfputRwriteGIFK Sgfwrite Ygfpack|Zgfmktree` Zgfout d[gfdump@ [palnum\\palsetup _rgbkey;X` parsefonta getpattern<,b parsepatternud parsegeometry5ewattribrectargs docircles^ genCurve4 curveHelperX drawCurve sicmp si_s2i1 si_i2s> s0 59      ߤ  XFXTRA LONG0 longwriteo R 0 MEMORYmemcopy#ćmemfill#  SAVE TIMEgetitime`Hgetctimemillisecg 7Y%B,3REDIRERRLredirerrT L+ .MAIN."COSWITCH . BLANK .XWINDOWtranslate_key_event: ! ALLOC ܉salloc[ 8allocJ ܉*[V9.BIN]IEXE.COM;1+,./ 4T-0123KPWO56RY7pNQY89Jj$GHJ$! $! Define as a command the Icon program named as a parameter. $! $ if p1 .eqs. "" then $ inquire p1 "Image name" $ if p1 .eqs. "" then $ exit 1 $ $ name = f$parse("''p1'",,,,"syntax_only") $ prog = f$parse("''p1'",,,"name") $ type = f$parse("''p1'",,,"type") $ if type .eqs. ".EXE" $ then $ file = f$search("''name'") $ if file .nes. "" then $ goto compile $ write sys$output "No file named ''p1' found" $ exit 1 $ endif $ if type .eqs. ".ICX" $ then $ file = f$search("''name'") $ if file .nes. "" then $ goto interp $ write sys$output "No file named ''p1' found" $ exit 1 $ endif $ if type .eqs. "." $ then $ name = f$parse("''p1'",".exe",,,"syntax_only") $ file = f$search("''name'") $ if file .nes. "" then $ goto compile $ name = f$parse("''p1'",".icx",,,"syntax_only") $ file = f$search("''name'") $ if file .nes. "" then $ goto interp $ write sys$output "No file named ''p1'.exe or ''p1'.icx found" $ exit 1 $ endif $ $ write sys$output "Improper file type specified" $ exit 1 $ $compile: $ file = f$parse("''file'",,,"device") + f$parse("''file'",,,"directory") + - f$parse("''file'",,,"name") + ".exe" $ 'prog' == "$ ''file'" $ exit 1 $ $interp: $ file = f$parse("''file'",,,"device") + f$parse("''file'",,,"directory") + - f$parse("''file'",,,"name") + ".icx" $ 'prog' == "$ ICON_BIN:iconx ''file'" $ exit 1 *[V9.BIN]RT.DB;41+,N./ 4m-0123KPWO56Tp70 289Ҋ;vGHJ9.0.00 LargeInts types T0: string T1: integer T2: record T3: proc T4: coexpr T5: tvsubs T6: tvtbl T7: null T8: cset T9: real T10: list T11: table T12: file T13: set T14: kywdint T15: kywdsubj T16: kywdpos T17: kywdevent T18: kywdwin T19: kywdstr $endsect components C0: str_var C1: trpd_tbl C2: lst_elem C3: tbl_key C4: tbl_val C5: tbl_dflt C6: set_elem $endsect functions Active 2g 0() {0,1} fr__ f "Active() - produce the next active window" 0 0 lst abstr nil typ T12 call 0 s fr___ t 0 0 0 $end Alert 2h 1(dv) {1,1} _r_e f "Alert(w,volume) - Alert the user" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Bg 2i 1(dv) {0,1} fr_e f "Bg(w,s) - background color" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Clip 2j 1(dv) {1,1} _r_e f "Clip(w, x, y, w, h) - set context clip rectangle" 0 0cC< jN_1'Қu8H[uFXs£)aِ `-6y8 ĤԺD_o}B y+2F0ٛ~Z=&_hԈpS[¦$]8E5 <򼚫A|sNvQ+R("`P={Be6,;sI:9;&#rXuK(i+5> r ;`4j a8 TZ^Kd鍨1#Š*b4\ftÂ0I9St!l]Նqvjޅ\_90۠*7=n;m̺}X  ,2QΜF f!Bb?zQ Ĉ/e -3d$]Z)?y:%%3ʾkkhqh6"Q#|tM;P^pfקqCyfQ迬pM0)6adǀ)C cF0lFs栚Yv Q}IQ.bH\EzXE"r|%m.;y ߝ$yn`'"ŇՃU}acRfͼ!y# &xr $5_nKnhVPsGuylc̶89\ ,9gN~/lKs>5U%`Hl|LB.4T)3hTSBZ񄯩^E(DX+ELw .=zG>_pئV g R?-φ>VΆޙ"=(Vj?Zӛ0QN7gb e+6ЏBKbOPP~ z-%LiPa"K4-])A今qJ!z*)&jaEAu?=聪Luvn>Z;%}: QZnEH\&oF%D @]id ӕd\N8Z]NQ{s!DF$d58Cŭ7*$"2L`[xḙ{!bGQw-Ps ݺ'e@pܥ߫6g-W=¡%MR_!iΟ=oʱmC qtŇhܷ.7FtѬ6 a?{a)\sgzTPٵ4w4 䘋N4ƬZO*? yi9-s)$[C=zծPƏ&ͧc+3v5Cb?,vӷXV*݂遜A$E49*|F[ ۔S'|5К(AYWT<o-X )հMUiD.H8)P@>Z@qdjk$?0wD@9?*рWvrvdJ ܅9>`P {!zvΛ]™A6T'4 .NQ^q^3>_~6n@&.@m %Cx܉iXa< ٘ lxv8LgF3 OnI;懲d?Q܈\F T ߚ)0t/c}YӠPEf Y׵XX+)J8P1~ۮ .=D3@ڋG*KW3M! ._|>zF.:_Uʂ eBE6uie~botNLQL" g/TNC㕱8c7o5(-b?W9"C2;0H):T'vżؾ,mQ b % RM,{Ly3;!bw=۫6@(pz 4Vbu!J 1_bzJ9.ʏv*ks='g<ҐR=:{/ (ɨ~wa+J%0_bC.[/3W:h]{8rQ?I zOؗ\<>w6^A\I6nzs8q|6־{:yg L"̕\il;w^q/f~zkߙ_C#+%: ҙx+W|y2i9A1[SIb5c~kPSD5D5l.`E{,lDaSt͠,PݪLS@68JMsKmH  t-˓=0jL);l`cS%Z!SiFS G&\H~^ 2ޱ}mQ֨*yԅE+25dpEbp㓧g>ywE^"0HZ\ Op neּBa8oᔖ&,H֡ńW8%u_ Rgq+#agvHDq]$YK3H( l@ f:$ ;{C8.$b׹3IQ\,zaF+&sop%'>FxbuȭPPrUejg0J+ѽ%_m oֹ˝ -lޖZޫ̃QKXR]J!x.5\b[z!yB'lքn}\rrQi&(,s1IWǖidkY`| YO۷NOҞ38 /&*NͲ:>ScHRl>+q -TRv%RAs g2$ZoW++-D0 զa/FN@^ຩ89>J9b]`r:i X0ңHPPCXv3+s Ku,kscdp>8i AftۿMX;ϊӏ;):qJ!̎ޫR;`q.YHgoʢFG2(O/j<6[6J]I!X[/,S/[H&lڥ]ro+teGX6s'LӖn[cY1uRkwZy'% O,췏l@F&uFqܑGѸ)3MdgR(g )zvd6[qCM~%6t"{ڀ]naЇ\?'$ P*2tP9}eIT*BVĊOi U(~2lPV}?:ʴEhڤb(5OvP)sFV%u;g*ۨ:ȋ*|UM#po6x:Vrzjߝ35xZ]n7PzQV22Sp.3;bf6 f6;y_]3<6`'ccQ9v]ݡaMft ENaմyטRr,KV0CCC{==is̐}hQn7~cpac~g2*.qYBh6LmiV3lpH-[8a1҃Ű*Q7k?xӰ`!M{lQ&WZ7~3K^9ֱÉ1;Z><bcvUjv'-K><jpѧ=m(x'A]et?wDc13 ㇖Eǃxc}U$oc7t~UJ=kqhQ;X_qGo\'})/KO?mS4bEP;/u%!6>Ѭ2Vs` * 5qmK"ØY )Kdv{ q!,{iR"{ktu9=s Bxva*g% !(97?]_Ft:ZѬQJV b7ś g0bv6ӚNb Y.LidaMؚᦪ p"2IlۀQV6)u'By0Uwҽ4}4e铣B=RYokLܚ}BF,,2i)?%ǽO0ng`WqUy6k{1HJKt ¹`PvGUd^ Tu\Of1CҘ/E-vb8<'ѸXLxWp7tPKsU:}ј,mҷ" [veJ|Ǹ0$c^]W fy+FcD{sOL4)WmsrQ'1ZԾ:|lvaf m© Ќ_ F&V@JY"lrBҋ{?DA['0b"Ѻvm.8]!d9,ê^X;W qQ:vB y~_90^A)b U8 LIcQH[t;_׹|#%{8567wYG ^@xBrו`Hp!|7iUuQ4">B)o_D3?vfmV0G-{ Kd\'n34:'}=; =F05z&# ١@;kL| 2+bg>>Г2녒-C+RPj'$4Q.O;CF]-t/)רe5V BQeyh21gEO+CdD+FIޭ3qs4&t0|n>1^*81p"nτgFv$r)e#@ʫ<2:lNH =}Fp4]N!DiQNEx!2`a'>'Ogr-`VlwBGdv A=-s϶_ib`h#҂@ͱ:+-p"v¸%>37F~u2t'=!@9 +n o<m?Kp\?4lJD۽d4BJ}c;JsoTspjnCZ-X4Q/6@ͣ;OC{Xw6s OPqf hQ# ({ZWN\5xA y=FuIY~WDݭ`Xi9 CJܪXOJCI׶˥AjTEa\(_Lmݴ1zf$T'_:reo}"Y쌱yQKh *tX8rectangle" 0 0d q VMS.BCKN[V9.BIN]RT.DB;41 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Clone 2k 1(dv) {1,1} fr_e t "Clone(w, attribs...) - create a new context bound to w's canvas" 0 0 lst abstr nil typ T12 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Color 2l 1(dv) {0,1} fr_e f "Color(argv[]) - return or set color map entries" 0 0 lst abstr nil ++ typ T12 typ T0 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end ColorValue 2m 1(dv) {0,1} fr_e f "ColorValue(w,s) - produce RGB components from string color name" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c int argc $e $c $r1 $e $c dptr argv $e $c $r0 $e $end CopyArea 2n 1(dv) {0,1} fr_e f "CopyArea(w,w2,x,y,width,height,x2,y2) - copy area" 0 0 lst abstr nil typ T12 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Couple 2o 2(d,d) {0,1} fr_e t "Couple(w,w2) - couple canvas to context" 0 0 lst abstr nil typ T12 call 0 s fr_e_ t 0 0 2 $c dptr w2 $e $c &($r1 ) $e $c dptr w $e $c &($r0 ) $e $end DrawArc 2p 1(dv) {1,1} _r_e f "DrawArc(argv[]){1} - draw arc" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawCircle 2q 1(dv) {1,1} _r_e f "DrawCircle(argv[]){1} - draw circle" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawCurve 2r 1(dv) {1,1} _r_e f "DrawCurve(argv[]){1} - draw curve" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawImage 2s 1(dv) {0,1} fr_e f "DrawImage(w,x,y,s) - draw bitmapped figure" 0 0 lst abstr nil ++ typ T7 typ T1 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawLine 2t 1(dv) {1,1} _r_e f "DrawLine(argv[]){1} - draw line" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawPoint 2u 1(dv) {1,1} _r_e f "DrawPoint(argv[]){1} - draw point" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawPolygon 2v 1(dv) {1,1} _r_e f "DrawPolygon(argv[]){1} - draw polygon" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawRectangle 2w 1(dv) {1,1} _r_e f "DrawRectangle(argv[]){1} - draw rectangle" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawSegment 2x 1(dv) {1,1} _r_e f "DrawSegment(argv[]){1} - draw line segment" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end DrawString 2y 1(dv) {1,1} _r_e f "DrawString(argv[]){1} - draw text" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $m0 $e $c int argc $e $c $r1 $e $end EraseArea 2z 1(dv) {1,1} _r_e f "EraseArea(w,x,y,width,height) - clear an area of the window" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Event 30 1(dv) {1,1} _r_e f "Event(w) - return an event from a window" 0 0 lst abstr nil ++ typ T0 typ T1 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Fg 31 1(dv) {0,1} fr_e f "Fg(w,s) - foreground color" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end FillArc 32 1(dv) {1,1} _r_e f "FillArc(argv[]){1} - fill arc" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end FillCircle 33 1(dv) {1,1} _r_e f "FillCircle(argv[]){1} - draw filled circle" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end FillPolygon 34 1(dv) {1,1} _r_e f "FillPolygon(argv[]){1} - fill polygon" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end FillRectangle 35 1(dv) {1,1} _r_e f "FillRectangle(argv[]){1} - draw filled rectangle" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Font 36 1(dv) {0,1} fr_e f "Font(w,s) - get/set font" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end FreeColor 37 1(dv) {1,1} _r_e f "FreeColor(argv[]) - free colors" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end GotoRC 38 1(dv) {1,1} _r_e f "GotoRC(w,r,c) - move cursor to a particular text row and column" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end GotoXY 39 1(dv) {1,1} _r_e f "GotoXY(w,x,y) - move cursor to a particular pixel location" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end Lower 3a 1(dv) {1,1} _r_e f "Lower(w) - lower w to the bottom of the window stack" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end NewColor 3b 1(dv) {0,1} fr_e f "NewColor(w,s) - allocate an entry in the color map" 0 0 lst abstr nil typ T1 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end PaletteChars 3c 1(dv) {0,1} fr_e f "PaletteChars(w,p) - return the characters forming keys to palette p" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c int argc $e $c $r1 $e $c dptr argv $e $c $m0 $e $end PaletteColor 3d 1(dv) {0,1} fr_e f "PaletteColor(w,p,s) - return color of key s in palette p" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c int argc $e $c $r1 $e $c dptr argv $e $c $m0 $e $end PaletteKey 3e 1(dv) {0,1} fr_e f "PaletteKey(w,p,s) - return key of closest color to s in palette p" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c int argc $e $c $r1 $e $c dptr argv $e $c $m0 $e $end Pattern 3f 1(dv) {1,1} fr_e f "Pattern(w,s) - sets the context fill pattern by string name" 0 0 lst abstr nil typ T12 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $m0 $e $c int argc $e $c $r1 $e $end Pending 3g 1(dv) {0,1} fr_e f "Pending(w,x[]) - produce a list of events pending on window" 0 0 lst abstr nil typ T10 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $m0 $e $c int argc $e $c $r1 $e $end Pixel 3h 1(dv) {3,3} f_se f "Pixel(w,x,y,width,height) - produce the contents of some pixels" 0 0 lst abstr nil ++ typ T1 typ T0 call 0 s f_se_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end QueryPointer 3i 1(d) {0,2} f_se f "QueryPointer(w) - produce mouse position" 0 1 xp $c XPoint xp; $e lst abstr nil typ T1 call 0 s f_se_ t 0 0 2 $c XPoint (*xp) $e $c &($m1 ) $e $c dptr w $e $c &($r0 ) $e $end Raise 3j 1(dv) {1,1} _r_e f "Raise(w) - raise w to the top of the window stack" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end ReadImage 3k 1(dv) {0,1} fr_e f "ReadImage(w, s, x, y, p) - load image file" 0 0 lst abstr nil typ T1 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $m0 $e $c int argc $e $c $r1 $e $end TextWidth 3m 1(dv) {1,1} _r_e f "TextWidth(w,s) - compute text pixel width" 0 0 lst abstr nil typ T1 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $m0 $e $c int argc $e $c $r1 $e $end Uncouple 3n 1(d) {1,1} _r_e f "Uncouple(w) - uncouple window" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 1 $c dpeJA$ VMS.BCKN[V9.BIN]RT.DB;4102tr w $e $c &($r0 ) $e $end WAttrib 3o 1(dv) {0,*} f_se f "WAttrib(argv[]) - read/write window attributes" 0 0 lst abstr nil ++ typ T12 typ T0 call 0 s f_se_ t 0 0 2 $c dptr argv $e $c $m0 $e $c int argc $e $c $r1 $e $end WDefault 3p 1(dv) {0,1} fr_e f "WDefault(w,program,option) - get a default value from the environment" 0 0 lst abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end WFlush 3q 1(dv) {1,1} _r_e f "WFlush(w) - flush all output to window w" 0 0 lst abstr nil typ T12 call 0 s _r_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end WSync 3l 1(d) {1,1} _r_e f "WSync(w) - synchronize with server" 0 0 lst abstr nil ++ typ T12 typ T7 call 0 s _r_e_ t 0 0 1 $c dptr w $e $c &($r0 ) $e $end WriteImage 3r 1(dv) {0,1} fr_e f "WriteImage(w,filename,x,y,width,height) - write an image to a file" 0 0 lst abstr nil typ T12 call 0 s fr_e_ t 0 0 2 $c dptr argv $e $c $r0 $e $c int argc $e $c $r1 $e $end abs 00 1(d) {1,1} _r_e t "abs(N) - produces the absolute value of N." 0 0 if2 cnv1 eci 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c Abs($r0 ) $e $e if2 cnv1 ei 0 lst abstr nil typ T1 block _ 0 $c cpbignum(&$m0 , &$mr ); BlkLoc($rr )->bignumblk.sign = 0; $ret rn 0 $e if2 cnv1 cd 0 lst abstr nil typ T9 block _ 0 $c $ret cd 1 $c Abs($r0 ) $e $e runerr2 102 0 $end acos 0a 1(d) {1,1} _r_e f "acos(r), x in radians." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; $cgoto $c !($r0 < -1.0 || $r0 > 1.0) $e 0 drunerr(205, $r0 ); $efail $lbl 0 errno = 0; y = acos($r0 ); $cgoto $c !(errno == EDOM) $e 1 err_msg(205, NULL); $efail $lbl 1 $ret cd 1 $c y $e $} $e $end any 1e 4(d,d,d,d) {0,1} fr_e f "any(c,s,i1,i2) - produces i1+1 if i2 is greater than 1 and s[i] is contained in c and poseq(i2,x) is greater than poseq(i1,x), but fails otherwise." 0 2 cnv_i $c C_integer cnv_i; $e cnv_j $c C_integer cnv_j; $e lst lst lst lst lst abstr nil typ T1 if2 is T7 1 lst block t 0 $c $m1 = k_subject; $e if1 is T7 2 block t 0 $c $m4 = k_pos; $e lst if1 ! cnv1 T0 1 runerr2 103 1 if1 is T7 2 block t 0 $c $m4 = 1; $e if1 ! is T7 2 if2 cnv2 ci 2 $c $m4 $e block t 0 $c $cgoto $c !(($m4 = cvpos($r4 , StrLen($r1 ))) == CvtFail) $e 0 $fail $lbl 0 $e runerr2 101 2 if2 is T7 3 block t 0 $c $m5 = StrLen($r1 ) + 1; $e if2 cnv2 ci 3 $c $m5 $e block t 0 $c $cgoto $c !(($m5 = cvpos($r5 , StrLen($r1 ))) == CvtFail) $e 1 $fail $lbl 1 $cgoto $c !($r4 > $r5 ) $e 2 ${ register C_integer tmp; tmp = $r4 ; $m4 = $r5 ; $m5 = tmp; $} $lbl 2 $e runerr2 101 3 if1 ! cnv1 tc 0 runerr2 104 0 call 0 s fr___ t 0 0 4 $c dptr c $e $c &($r0 ) $e $c dptr s $e $c &($r1 ) $e $c C_integer cnv_j $e $c $r5 $e $c C_integer cnv_i $e $c $r4 $e $end args 0i 1(d) {1,1} _r_e f "args(p) - produce number of arguments for procedure p." 0 0 lst lst if1 ! is T3 0 runerr2 106 0 abstr nil typ T1 block _ 0 $c $ret ci 1 $c ((struct b_proc *)BlkLoc($r0 ))->nparam $e $e $end asin 0b 1(d) {1,1} _r_e f "asin(r), x in radians." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; $cgoto $c !($r0 < -1.0 || $r0 > 1.0) $e 0 drunerr(205, $r0 ); $efail $lbl 0 errno = 0; y = asin($r0 ); $cgoto $c !(errno == EDOM) $e 1 err_msg(205, NULL); $efail $lbl 1 $ret cd 1 $c y $e $} $e $end atan 0g 2(d,d) {1,1} _r_e f "atan(r1,r2) -- r1, r2 in radians; if r2 is present, produces atan2(r1,r2)." 0 0 lst lst lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 if1 is T7 1 block _ 0 $c $ret cd 1 $c atan($r0 ) $e $e if1 ! cnv1 cd 1 runerr2 102 1 block _ 0 $c $ret cd 1 $c atan2($r0 , $r1 ) $e $e $end bal 1f 6(d,d,d,d,d,d) {0,*} f_se f "bal(c1,c2,c3,s,i1,i2) - generates the sequence of integer positions in s up to a character of c1 in s[i1:i2] that is balanced with respect to characters in c2 and c3, but fails if there is no such position." 0 2 cnv_i $c C_integer cnv_i; $e cnv_j $c C_integer cnv_j; $e lst lst lst lst lst lst lst abstr nil typ T1 if2 is T7 3 lst block t 0 $c $m3 = k_subject; $e if1 is T7 4 block t 0 $c $m6 = k_pos; $e lst if1 ! cnv1 T0 3 runerr2 103 3 if1 is T7 4 block t 0 $c $m6 = 1; $e if1 ! is T7 4 if2 cnv2 ci 4 $c $m6 $e block t 0 $c $cgoto $c !(($m6 = cvpos($r6 , StrLen($r3 ))) == CvtFail) $e 0 $fail $lbl 0 $e runerr2 101 4 if2 is T7 5 block t 0 $c $m7 = StrLen($r3 ) + 1; $e if2 cnv2 ci 5 $c $m7 $e block t 0 $c $cgoto $c !(($m7 = cvpos($r7 , StrLen($r3 ))) == CvtFail) $e 1 $fail $lbl 1 $cgoto $c !($r6 > $r7 ) $e 2 ${ register C_integer tmp; tmp = $r6 ; $m6 = $r7 ; $m7 = tmp; $} $lbl 2 $e runerr2 101 5 if1 ! def1 tc 0 $c fullcs $e runerr2 104 0 if1 ! def1 tc 1 $c lparcs $e runerr2 104 1 if1 ! def1 tc 2 $c rparcs $e runerr2 104 2 call 0 s f_s__ t 0 0 6 $c dptr c3 $e $c &($r2 ) $e $c dptr c2 $e $c &($r1 ) $e $c dptr c1 $e $c &($r0 ) $e $c dptr s $e $c &($r3 ) $e $c C_integer cnv_j $e $c $r7 $e $c C_integer cnv_i $e $c $m6 $e $end center 15 3(d,d,d) {1,1} _r_e f "center(s1,i,s2) - pad s1 on left and right with s2 to length i." 0 0 lst lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 if1 ! def1 ts 2 $c blank $e runerr2 103 2 abstr nil typ T0 call 0 s _r_e_ t 0 0 3 $c dptr s1 $e $c &($r0 ) $e $c dptr s2 $e $c &($m2 ) $e $c C_integer n $e $c $r1 $e $end char 0j 1(d) {1,1} _r_e f "char(i) - produce a string consisting of character i." 0 0 lst lst if1 ! cnv1 ci 0 runerr2 101 0 abstr nil typ T0 call 0 s _r_e_ t 0 0 1 $c C_integer i $e $c $r0 $e $end chdir 2d 1(d) {0,1} fr_e f "chdir(s) - change working directory to s." 0 0 lst lst if1 ! cnv1 cs 0 runerr2 103 0 abstr nil typ T7 block _ 0 $c $cgoto $c !(chdir($r0 ) != 0) $e 0 $fail $lbl 0 $ret d 1 $c nulldesc $e $e $end close 1w 1(d) {1,1} _r_e f "close(f) - close file f." 0 0 lst lst if1 ! is T12 0 runerr2 105 0 abstr nil ++ typ T12 typ T1 call 0 n _r___ t 0 0 1 $c dptr f $e $c &($r0 ) $e $end collect 0k 2(d,d) {1,1} fr_e f "collect(i1,i2) - call garbage collector to ensure i2 bytes in region i1. no longer works." 0 0 lst lst lst if1 ! def1 ci 0 $c (C_integer)0 $e runerr2 101 0 if1 ! def1 ci 1 $c (C_integer)0 $e runerr2 101 1 abstr nil typ T7 call 0 s fr_e_ t 0 0 2 $c C_integer region $e $c $r0 $e $c C_integer bytes $e $c $r1 $e $end copy 0l 1(d) {1,1} _r_e t "copy(x) - make a copy of object x." 0 0 lst abstr nil vartyp 0 tcase2 0 5 1 T2 call 1 s _r_e_ t 0 0 1 $c dptr x $e $c &($r0 ) $e 1 T13 call 2 s _r_e_ t 0 0 1 $c dptr x $e $c &($m0 ) $e 1 T11 call 3 s _r_e_ t 0 0 1 $c dptr x $e $c &($r0 ) $e 1 T10 block _ 0 $c $cgoto $c !(cplist(&$m0 , &$mr , (word)1, BlkLoc($r0 )->list.size + 1) == Error) $e 0 err_msg(0, NULL); $efail $lbl 0 $ret rn 0 $e 8 T4 T3 T12 T9 T1 T8 T0 T7 block _ 0 $c $ret d 1 $c $r0 $e $e call 0 n ___e_ f 0 0 1 $c dptr x $e $c &($r0 ) $e $end cos 08 1(d) {1,1} _r_e f "cos(r), x in radians." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; ; errno = 0; y = cos($r0 ); ; $ret cd 1 $c y $e $} $e $end cset 01 1(d) {0,1} fr__ f "cset(x) - produces a value of type cset resulting from the conversion of x, but fails if the conversion is not possible." 0 0 if2 cnv1 T8 0 lst abstr nil typ T8 block _ 0 $c $ret d 1 $c $r0 $e $e lst abstr nil typ e block _ 0 $c $fail $e $end delay 2e 1(d) {1,1} fr_e f "delay(i) - delay for i milliseconds." 0 0 lst lst if1 ! cnv1 ci 0 runerr2 101 0 abstr nil typ T7 block _ 0 $c $cgoto $c !(idelay($r0 ) == Failed) $e 0 $fail $lblf6) VMS.BCKN[V9.BIN]RT.DB;41! 0 pollctr >>= 1; pollctr++; $ret d 1 $c nulldesc $e $e $end delete 1k 2(d,d) {1,1} _r_e f "delete(x1,x2) - delete element x2 from set or table x1 if it is there (always succeeds and returns x1)." 0 0 lst abstr nil ** vartyp 0 ++ typ T13 typ T11 tcase2 0 2 1 T11 call 0 n _r___ t 0 0 2 $c dptr s $e $c &($r0 ) $e $c dptr x $e $c &($m1 ) $e 1 T13 call 1 n _r___ t 0 0 2 $c dptr s $e $c &($r0 ) $e $c dptr x $e $c &($m1 ) $e runerr2 122 0 $end detab 16 2(d,dv) {1,1} _r_e t "detab(s,i,...) - replace tabs with spaces, with stops at columns indicated." 0 0 lst lst if1 ! cnv1 T0 0 runerr2 103 0 abstr nil typ T0 call 0 s _r_e_ t 0 0 3 $c dptr i $e $c $m1 $e $c int n $e $c $r2 $e $c dptr s $e $c &($r0 ) $e $end display 0m 2(d,d) {1,1} _r_e f "display(i,f) - display local variables of i most recent procedure activations, plus global variables. Output to file f (default &errout)." 0 0 lst lst lst if1 ! def1 ci 0 $c (C_integer)k_level $e runerr2 101 0 if2 is T7 1 block t 0 $c $m1 .dword = D_File; BlkLoc($r1 ) = (union block *)&k_errout; $e if1 ! is T12 1 runerr2 105 1 abstr nil typ T7 call 0 s _r_e_ t 0 0 2 $c C_integer i $e $c $m0 $e $c dptr f $e $c &($r1 ) $e $end dtor 0e 1(d) {1,1} _r_e f "dtor(r) - convert x from degrees to radians." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; ; errno = 0; y = (($r0 ) * Pi / 180); ; $ret cd 1 $c y $e $} $e $end entab 17 2(d,dv) {1,1} _r_e t "entab(s,i,...) - replace spaces with tabs, with stops at columns indicated." 0 0 lst lst if1 ! cnv1 T0 0 runerr2 103 0 abstr nil typ T0 call 0 s _r_e_ t 0 0 3 $c dptr s $e $c &($r0 ) $e $c dptr i $e $c $m1 $e $c int n $e $c $r2 $e $end errorclear 0n 0() {1,1} _r__ f "errorclear() - clear error condition." 0 0 lst abstr nil typ T7 call 0 n _r___ t 0 0 0 $end exit 1x 1(d) {} ___e f "exit(i) - exit process with status i, which defaults to 0." 0 0 lst if1 ! def1 ci 0 $c 1 $e runerr1 0 block _ 0 $c c_exit((int)$r0 ); $e $end exp 0c 1(d) {1,1} _r_e f "exp(r) - e^x." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; ; errno = 0; y = exp($r0 ); $cgoto $c !(errno == ERANGE) $e 0 err_msg(204, NULL); $efail $lbl 0 $ret cd 1 $c y $e $} $e $end find 1g 4(d,d,d,d) {0,*} f_se f "find(s1,s2,i1,i2) - generates the sequence of positions in s2 at which s1 occurs as a substring in s2[i1:i2], but fails if there is no such position." 0 2 cnv_i $c C_integer cnv_i; $e cnv_j $c C_integer cnv_j; $e lst lst lst lst lst abstr nil typ T1 if2 is T7 1 lst block t 0 $c $m1 = k_subject; $e if1 is T7 2 block t 0 $c $m4 = k_pos; $e lst if1 ! cnv1 T0 1 runerr2 103 1 if1 is T7 2 block t 0 $c $m4 = 1; $e if1 ! is T7 2 if2 cnv2 ci 2 $c $m4 $e block t 0 $c $cgoto $c !(($m4 = cvpos($r4 , StrLen($r1 ))) == CvtFail) $e 0 $fail $lbl 0 $e runerr2 101 2 if2 is T7 3 block t 0 $c $m5 = StrLen($r1 ) + 1; $e if2 cnv2 ci 3 $c $m5 $e block t 0 $c $cgoto $c !(($m5 = cvpos($r5 , StrLen($r1 ))) == CvtFail) $e 1 $fail $lbl 1 $cgoto $c !($r4 > $r5 ) $e 2 ${ register C_integer tmp; tmp = $r4 ; $m4 = $r5 ; $m5 = tmp; $} $lbl 2 $e runerr2 101 3 if1 ! cnv1 T0 0 runerr2 103 0 call 0 s f_s__ t 0 0 4 $c dptr s2 $e $c &($r1 ) $e $c C_integer cnv_i $e $c $m4 $e $c C_integer cnv_j $e $c $r5 $e $c dptr s1 $e $c &($r0 ) $e $end flush 2f 1(d) {1,1} _r_e f "flush(f) - flush file f." 0 0 lst lst if1 ! is T12 0 runerr2 105 0 abstr nil vartyp 0 call 0 n _r___ t 0 0 1 $c dptr f $e $c &($r0 ) $e $end get 1l 1(d) {0,1} fr_e t "get(x) - get an element from the left end of list x." 0 0 lst lst if1 ! is T10 0 runerr2 108 0 abstr nil store . vartyp 0 C2 call 0 s fr___ t 0 0 1 $c dptr x $e $c &($r0 ) $e $end getch 2a 0() {0,1} fr__ f "getch() - return a character from console." 0 0 lst abstr nil typ T0 call 0 s fr___ t 0 0 0 $end getche 2b 0() {0,1} fr__ f "getche() -- return a character from console with echo." 0 0 lst abstr nil typ T0 call 0 s fr___ t 0 0 0 $end getenv 1y 1(d) {0,1} fr_e f "getenv(s) - return contents of environment variable s." 0 0 lst lst if1 ! cnv1 cs 0 runerr2 103 0 abstr nil typ T0 block _ 0 $c ${ register char *p; long l; $cgoto $c (p = getenv($r0 )) != NULL $e 0 $fail $goto 1 $lbl 0 l = strlen(p); $cgoto $c !((p = alcstr(p, l)) == NULL) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret T0 2 $c l $e $c p $e $lbl 1 $} $e $end iand 0o 2(d,d) {1,1} _r_e t "iand(i,j) - produce bitwise AND of i and j." 0 0 lst lst lst if1 ! cnv1 T1 0 runerr2 101 0 if1 ! cnv1 T1 1 runerr2 101 1 abstr nil typ T1 block _ 0 $c $cgoto $c (Type($r0 ) == T_Lrgint) || (Type($r1 ) == T_Lrgint) $e 0 $ret ci 1 $c IntVal($r0 ) & IntVal($r1 ) $e $goto 1 $lbl 0 $cgoto $c !(bigand(&$m0 , &$m1 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 ; $lbl 1 $e $end icom 0r 1(d) {1,1} _r_e t "icom(i) - produce bitwise complement (one's complement) of i." 0 0 lst lst if1 ! cnv1 T1 0 runerr2 101 0 abstr nil typ T1 block _ 0 $c $cgoto $c Type($r0 ) == T_Lrgint $e 0 $ret ci 1 $c ~IntVal($r0 ) $e $goto 1 $lbl 0 ${ struct descrip td; td.dword = D_Integer; IntVal(td) = -1; $cgoto $c !(bigsub(&td, &$m0 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 $} $lbl 1 $e $end image 0s 1(d) {1,1} _r_e t "image(x) - return string image of object x." 0 0 lst abstr nil typ T0 block _ 0 $c ${ register int i; $cgoto $c !(getimage(&$m0 , &$mr ) == Error) $e 0 err_msg(0, NULL); $efail $lbl 0 $ret rn 0 $} $e $end insert 1o 3(d,d,d) {1,1} _r_e f "insert(x1,x2,x3) - insert element x2 into set or table x1 if not already there if x1 is a table, the assigned value for element x2 is x3. (always succeeds and returns x1)." 0 0 tcase2 0 2 1 T11 lst abstr lst = . vartyp 0 C3 vartyp 1 = . vartyp 0 C4 vartyp 2 vartyp 0 call 0 s _r_e_ t 0 0 3 $c dptr y $e $c &($r2 ) $e $c dptr x $e $c &($m1 ) $e $c dptr s $e $c &($r0 ) $e 1 T13 lst abstr = . vartyp 0 C6 vartyp 1 vartyp 0 call 1 s _r_e_ t 0 0 2 $c dptr x $e $c &($m1 ) $e $c dptr s $e $c &($r0 ) $e runerr2 122 0 $end integer 02 1(d) {0,1} fr__ f "integer(x) - produces a value of type integer resulting from the conversion of x, but fails if the conversion is not possible." 0 0 if2 cnv1 T1 0 lst abstr nil typ T1 block _ 0 $c $ret d 1 $c $r0 $e $e lst abstr nil typ e block _ 0 $c $fail $e $end ior 0p 2(d,d) {1,1} _r_e t "ior(i,j) - produce bitwise inclusive OR of i and j." 0 0 lst lst lst if1 ! cnv1 T1 0 runerr2 101 0 if1 ! cnv1 T1 1 runerr2 101 1 abstr nil typ T1 block _ 0 $c $cgoto $c (Type($r0 ) == T_Lrgint) || (Type($r1 ) == T_Lrgint) $e 0 $ret ci 1 $c IntVal($r0 ) | IntVal($r1 ) $e $goto 1 $lbl 0 $cgoto $c !(bigor(&$m0 , &$m1 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 ; $lbl 1 $e $end ishift 0t 2(d,d) {1,1} _r_e t "ishift(i,j) - produce i shifted j bit positions (left if j<0, right if j>0)." 0 0 lst lst lst if1 ! cnv1 T1 0 runerr2 101 0 if1 ! cnv1 T1 1 runerr2 101 1 abstr nil typ T1 call 0 s _r_e_ t 0 0 2 $c dptr i $e $c &($m0 ) $e $c dptr j $e $c &($m1 ) $e $end ixor 0q 2(d,d) {1,1} _r_e t "ixor(i,j) - produce bitwise exclusive OR of i and j." 0 0 lst lst lst if1 ! cnv1 T1 0 runerr2 101 0 if1 ! cnv1 T1 1 runerr2 101 1 abstr nil typ T1 block _ 0 $c $cgoto $c (Type($r0 ) == T_Lrgint) || (Type($r1 ) == T_Lrgint) $e 0 $ret ci 1 $c IntVal($r0 ) ^ IntVal($r1 ) $e $goto 1 $lbl 0 $cgoto $c !(bigxor(&$m0 , &$m1 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 ; $lbl 1 $e $end kbhit 2c 0() {0,1} fr__ f "kbhit() -- Check to see if theg+ VMS.BCKN[V9.BIN]RT.DB;41 A0re is a keyboard character waiting to be read." 0 0 lst abstr nil typ T7 block _ 0 $c ${ int rv; rv = kbhit(); $cgoto $c rv $e 0 $fail $goto 1 $lbl 0 $ret d 1 $c nulldesc $e $lbl 1 $} $e $end key 1n 1(d) {0,*} f_se f "key(T) - generate successive keys (entry values) from table T." 0 0 lst lst if1 ! is T11 0 runerr2 124 0 abstr nil store . vartyp 0 C3 block _ 1 blkptr $c ${ struct hgstate state; $t0 .vword.bptr = hgfirst(BlkLoc($r0 ), &state); $lbl 0 $cgoto $c !($t0 .vword.bptr != 0) $e 2 $susp d 1 $c $t0 .vword.bptr->telem.tref $e $lbl 1 $t0 .vword.bptr = hgnext(BlkLoc($r0 ), &state, $t0 .vword.bptr); $goto 0 $lbl 2 $fail $} $e $end left 18 3(d,d,d) {1,1} _r_e f "left(s1,i,s2) - pad s1 on right with s2 to length i." 0 0 lst lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 if1 ! def1 ts 2 $c blank $e runerr2 103 2 abstr nil typ T0 call 0 s _r_e_ t 0 0 3 $c dptr s1 $e $c &($r0 ) $e $c dptr s2 $e $c &($m2 ) $e $c C_integer n $e $c $r1 $e $end list 1p 2(d,d) {1,1} _r_e f "list(i,x) - create a list of size i, with initial value x." 0 0 lst lst if1 ! def1 ci 0 $c 0L $e runerr2 101 0 abstr nil new T10 1 vartyp 1 call 0 s _r_e_ t 0 0 2 $c dptr x $e $c &($r1 ) $e $c C_integer n $e $c $r0 $e $end log 0h 2(d,d) {1,1} _r_e f "log(r1,r2) - logarithm of r1 to base r2." 0 0 lst lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block t 0 $c $cgoto $c !($r0 <= 0.0) $e 0 drunerr(205, $r0 ); $efail $lbl 0 $e if2 is T7 1 block _ 0 $c $ret cd 1 $c log($r0 ) $e $e lst if1 ! cnv1 cd 1 runerr2 102 1 call 0 s _r_e_ t 0 0 2 $c double x $e $c $m0 $e $c double b $e $c $r1 $e $end many 1h 4(d,d,d,d) {0,1} fr_e f "many(c,s,i1,i2) - produces the position in s after the longest initial sequence of characters in c in s[i1:i2] but fails if there is none." 0 2 cnv_i $c C_integer cnv_i; $e cnv_j $c C_integer cnv_j; $e lst lst lst lst lst abstr nil typ T1 if2 is T7 1 lst block t 0 $c $m1 = k_subject; $e if1 is T7 2 block t 0 $c $m4 = k_pos; $e lst if1 ! cnv1 T0 1 runerr2 103 1 if1 is T7 2 block t 0 $c $m4 = 1; $e if1 ! is T7 2 if2 cnv2 ci 2 $c $m4 $e block t 0 $c $cgoto $c !(($m4 = cvpos($r4 , StrLen($r1 ))) == CvtFail) $e 0 $fail $lbl 0 $e runerr2 101 2 if2 is T7 3 block t 0 $c $m5 = StrLen($r1 ) + 1; $e if2 cnv2 ci 3 $c $m5 $e block t 0 $c $cgoto $c !(($m5 = cvpos($r5 , StrLen($r1 ))) == CvtFail) $e 1 $fail $lbl 1 $cgoto $c !($r4 > $r5 ) $e 2 ${ register C_integer tmp; tmp = $r4 ; $m4 = $r5 ; $m5 = tmp; $} $lbl 2 $e runerr2 101 3 if1 ! cnv1 tc 0 runerr2 104 0 call 0 s fr___ t 0 0 4 $c dptr c $e $c &($r0 ) $e $c dptr s $e $c &($r1 ) $e $c C_integer cnv_j $e $c $r5 $e $c C_integer cnv_i $e $c $m4 $e $end map 19 3(d,d,d) {1,1} _r_e t "map(s1,s2,s3) - map s1, using s2 and s3." 0 0 lst lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! def1 T0 1 $c ucase $e runerr2 103 1 if1 ! def1 T0 2 $c lcase $e runerr2 103 2 abstr nil typ T0 call 0 s _r_e_ t 0 0 3 $c dptr s1 $e $c &($r0 ) $e $c dptr s3 $e $c &($r2 ) $e $c dptr s2 $e $c &($r1 ) $e $end match 1i 4(d,d,d,d) {0,1} fr_e f "match(s1,s2,i1,i2) - produces i1+*s1 if s1==s2[i1+:*s1], but fails otherwise." 0 2 cnv_i $c C_integer cnv_i; $e cnv_j $c C_integer cnv_j; $e lst lst lst lst lst abstr nil typ T1 if2 is T7 1 lst block t 0 $c $m1 = k_subject; $e if1 is T7 2 block t 0 $c $m4 = k_pos; $e lst if1 ! cnv1 T0 1 runerr2 103 1 if1 is T7 2 block t 0 $c $m4 = 1; $e if1 ! is T7 2 if2 cnv2 ci 2 $c $m4 $e block t 0 $c $cgoto $c !(($m4 = cvpos($r4 , StrLen($r1 ))) == CvtFail) $e 0 $fail $lbl 0 $e runerr2 101 2 if2 is T7 3 block t 0 $c $m5 = StrLen($r1 ) + 1; $e if2 cnv2 ci 3 $c $m5 $e block t 0 $c $cgoto $c !(($m5 = cvpos($r5 , StrLen($r1 ))) == CvtFail) $e 1 $fail $lbl 1 $cgoto $c !($r4 > $r5 ) $e 2 ${ register C_integer tmp; tmp = $r4 ; $m4 = $r5 ; $m5 = tmp; $} $lbl 2 $e runerr2 101 3 if1 ! cnv1 ts 0 runerr2 103 0 call 0 s fr___ t 0 0 4 $c dptr s2 $e $c &($r1 ) $e $c dptr s1 $e $c &($r0 ) $e $c C_integer cnv_i $e $c $r4 $e $c C_integer cnv_j $e $c $m5 $e $end member 1q 2(d,d) {0,1} fr_e f "member(x1,x2) - returns x1 if x2 is a member of set or table x2 but fails otherwise." 0 0 tcase2 0 2 1 T11 lst abstr nil ** vartyp 1 store . vartyp 0 C3 block _ 0 $c ${ int res; register uword hn; hn = hash(&$m1 ); memb(BlkLoc($r0 ), &$m1 , hn, &res); $cgoto $c res == 1 $e 1 $fail $goto 2 $lbl 1 $ret d 1 $c $r1 $e $lbl 2 $} $e 1 T13 lst abstr nil ** vartyp 1 store . vartyp 0 C6 block _ 0 $c ${ int res; register uword hn; hn = hash(&$m1 ); memb(BlkLoc($r0 ), &$m1 , hn, &res); $cgoto $c res == 1 $e 3 $fail $goto 4 $lbl 3 $ret d 1 $c $r1 $e $lbl 4 $} $e runerr2 122 0 $end move 12 1(d) {0,1+} f_se f "move(i) - move &pos by i, return substring of &subject spanned. Reverses effects if resumed." 0 0 lst lst if1 ! cnv1 ci 0 runerr2 101 0 abstr nil typ T0 call 0 s f_se_ t 0 0 1 $c C_integer i $e $c $m0 $e $end name 0v 1(u) {1,1} _r_e t "name(v) - return the name of a variable." 0 0 lst lst if1 ! is v 0 runerr2 111 0 abstr nil typ T0 call 0 s _r_e_ t 0 0 1 $c dptr v $e $c &($m0 ) $e $end numeric 05 1(d) {0,1} fr__ f "numeric(x) - produces an integer or real number resulting from the type conversion of x, but fails if the conversion is not possible." 0 0 if2 cnv1 ei 0 lst abstr nil typ T1 block _ 0 $c $ret d 1 $c $r0 $e $e if2 cnv1 T9 0 lst abstr nil typ T9 block _ 0 $c $ret d 1 $c $r0 $e $e lst abstr nil typ e block _ 0 $c $fail $e $end open 1z 3(d,d,dv) {0,1} fr_e f "open(s1, s2, ...) - open file named s2 with options s2 and attributes given in trailing arguments." 1 desc nil 0 lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! def1 ts 1 $c letr $e runerr2 103 1 abstr nil typ T12 call 0 s fr_e_ t 0 0 5 $c dptr filename $e $c &($m4 ) $e $c dptr attr $e $c $m2 $e $c int n $e $c $r3 $e $c dptr spec $e $c &($r1 ) $e $c dptr fname $e $c &($r0 ) $e $end ord 0u 1(d) {1,1} _r_e f "ord(s) - produce integer ordinal (value) of single character." 0 0 lst lst if1 ! cnv1 ts 0 runerr2 103 0 abstr nil typ T1 call 0 s _r_e_ t 0 0 1 $c dptr s $e $c &($r0 ) $e $end pop 1m 1(d) {0,1} fr_e t "pop(x) - pop an element from the left end of list x." 0 0 lst lst if1 ! is T10 0 runerr2 108 0 abstr nil store . vartyp 0 C2 call 0 s fr___ t 0 0 1 $c dptr x $e $c &($r0 ) $e $end pos 13 1(d) {0,1} fr_e f "pos(i) - test if &pos is at position i in &subject." 0 0 lst lst if1 ! cnv1 ci 0 runerr2 101 0 abstr nil typ T1 call 0 s fr___ t 0 0 1 $c C_integer i $e $c $m0 $e $end proc 06 2(d,d) {0,1} fr_e f "proc(x,i) - convert x to a procedure if possible; use i to resolve ambiguous string names." 0 0 if2 is T3 0 lst abstr nil typ T3 block _ 0 $c $ret d 1 $c $r0 $e $e if2 cnv1 ts 0 lst lst lst if1 ! def1 ci 1 $c 1 $e runerr2 101 1 block t 0 $c $cgoto $c !($r1 < 0 || $r1 > 3) $e 0 irunerr(205, $r1 ); $efail $lbl 0 $e abstr nil typ T3 block _ 0 $c ${ struct b_proc *prc; $cgoto $c $r1 == 0 $e 1 prc = strprc(&$m0 , $r1 ); $goto 2 $lbl 1 prc = bi_strprc(&$m0 , 0); $lbl 2 $cgoto $c prc == NULL $e 3 $ret T3 1 $c prc $e $goto 4 $lbl 3 $fail $lbl 4 $} $e lst abstr nil typ e block _ 0 $c $fail $e $end pull 1r 1(d) {0,1} fr_e t "pull(L) - pull an element from end of list L." 0 0 lst lst if1 ! is T10 0 runerr2 108 0 abstr nil store . vartyp 0 C2 call 0 s fr___ t 0 0 1 $c dptr x $e $c &($r0 ) $e $end push 1s 2(d,dv) {1,1} _r_e f "push(L,x1,...,xN) - push x onto beginning of list L." 0 0 lst lst if1 ! is T10 0 runerr2 108 0 abstr = . vartyp 0 C2 vartyp 1 varth<63 VMS.BCKN[V9.BIN]RT.DB;418?yp 0 call 0 s _r_e_ t 0 0 3 $c dptr x $e $c &($r0 ) $e $c dptr vals $e $c $r1 $e $c int n $e $c $r2 $e $end put 1t 2(d,dv) {1,1} _r_e f "put(L,x1,...,xN) - put elements onto end of list L." 0 0 lst lst if1 ! is T10 0 runerr2 108 0 abstr = . vartyp 0 C2 vartyp 1 vartyp 0 call 0 s _r_e_ t 0 0 3 $c dptr x $e $c &($r0 ) $e $c dptr vals $e $c $r1 $e $c int n $e $c $r2 $e $end read 20 1(d) {0,1} fr_e f "read(f) - read line on file f." 0 0 lst lst if2 is T7 0 block t 0 $c $m0 .dword = D_File; BlkLoc($r0 ) = (union block *)&k_input; $e if1 ! is T12 0 runerr2 105 0 abstr nil typ T0 call 0 s fr_e_ t 0 0 1 $c dptr f $e $c &($r0 ) $e $end reads 21 2(d,d) {0,1} fr_e f "reads(f,i) - read i characters on file f." 0 0 lst lst lst if2 is T7 0 block t 0 $c $m0 .dword = D_File; BlkLoc($r0 ) = (union block *)&k_input; $e if1 ! is T12 0 runerr2 105 0 if1 ! def1 ci 1 $c 1L $e runerr2 101 1 abstr nil typ T0 call 0 s fr_e_ t 0 0 2 $c C_integer i $e $c $r1 $e $c dptr f $e $c &($r0 ) $e $end real 03 1(d) {0,1} fr__ f "real(x) - produces a value of type real resulting from the conversion of x, but fails if the conversion is not possible." 0 0 if2 cnv1 T9 0 lst abstr nil typ T9 block _ 0 $c $ret d 1 $c $r0 $e $e lst abstr nil typ e block _ 0 $c $fail $e $end remove 22 1(d) {0,1} fr_e f "remove(s) - remove the file named s." 0 0 lst lst if1 ! cnv1 cs 0 runerr2 103 0 abstr nil typ T7 block _ 0 $c $cgoto $c !(remove($r0 ) != 0) $e 0 $fail $lbl 0 $ret d 1 $c nulldesc $e $e $end rename 23 2(d,d) {0,1} fr_e f "rename(s1,s2) - rename the file named s1 to have the name s2." 0 0 lst lst lst if1 ! cnv1 cs 0 runerr2 103 0 if1 ! cnv1 cs 1 runerr2 103 1 abstr nil typ T7 call 0 s fr___ t 0 0 2 $c dptr s2 $e $c &($rd1 ) $e $c dptr s1 $e $c &($rd0 ) $e $end repl 1a 2(d,d) {1,1} _r_e t "repl(s,i) - concatenate i copies of string s." 0 0 lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! cnv1 ci 1 runerr2 101 1 abstr nil typ T0 call 0 s _r_e_ t 0 0 2 $c dptr s $e $c &($r0 ) $e $c C_integer n $e $c $m1 $e $end reverse 1b 1(d) {1,1} _r_e t "reverse(s) - reverse string s." 0 0 lst lst if1 ! cnv1 T0 0 runerr2 103 0 abstr nil typ T0 call 0 s _r_e_ t 0 0 1 $c dptr s $e $c &($r0 ) $e $end right 1c 3(d,d,d) {1,1} _r_e f "right(s1,i,s2) - pad s1 on left with s2 to length i." 0 0 lst lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 if1 ! def1 ts 2 $c blank $e runerr2 103 2 abstr nil typ T0 call 0 s _r_e_ t 0 0 3 $c dptr s1 $e $c &($r0 ) $e $c dptr s2 $e $c &($m2 ) $e $c C_integer n $e $c $r1 $e $end rtod 0f 1(d) {1,1} _r_e f "rtod(r) - convert x from radians to degrees." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; ; errno = 0; y = (($r0 ) * 180 / Pi); ; $ret cd 1 $c y $e $} $e $end runerr 0w 2(d,dv) {} ___e f "runerr(i,x) - produce runtime error i with value x." 0 0 lst if1 ! cnv1 ci 0 runerr2 101 0 call 0 n ___e_ f 0 0 3 $c dptr x $e $c $r1 $e $c int n $e $c $r2 $e $c C_integer i $e $c $r0 $e $end seek 24 2(d,d) {0,1} fr_e f "seek(f,i) - seek to offset i in file f. [[ What about seek error ? ]] " 0 0 lst lst lst if1 ! is T12 0 runerr2 105 0 if1 ! def1 ci 1 $c 1L $e runerr1 0 abstr nil typ T12 call 0 s fr___ t 0 0 2 $c C_integer o $e $c $r1 $e $c dptr f $e $c &($r0 ) $e $end seq 0x 2(d,d) {1,*} __se f "seq(i, j) - generate i, i+j, i+2*j, ... ." 0 0 lst lst lst if1 ! def1 ci 0 $c 1 $e runerr2 101 0 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 abstr nil typ T1 call 0 s __se_ t 0 0 2 $c C_integer from $e $c $m0 $e $c C_integer by $e $c $r1 $e $end set 1u 1(d) {1,1} _r_e f "set(L) - create a set with members in list L. The members are linked into hash chains which are arranged in increasing order by hash number." 0 0 tcase2 0 2 1 T10 lst abstr nil new T13 1 store . vartyp 0 C2 call 0 s _r_e_ t 0 0 1 $c dptr l $e $c &($r0 ) $e 1 T7 lst abstr nil new T13 1 typ e block _ 0 $c ${ register union block *ps; ps = hmake(T_Set, (word)0, (word)0); $cgoto $c !(ps == NULL) $e 1 err_msg(0, NULL); $efail $lbl 1 $ret T13 1 $c ps $e $} $e runerr2 108 0 $end sin 07 1(d) {1,1} _r_e f "sin(r), x in radians." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; ; errno = 0; y = sin($r0 ); ; $ret cd 1 $c y $e $} $e $end sort 0y 2(d,d) {1,1} _r_e t "sort(x,i) - sort structure x by method i (for tables)" 0 0 tcase2 0 4 1 T11 lst lst abstr nil new T10 1 ++ new T10 1 store ++ . vartyp 0 C3 . vartyp 0 C4 store ++ . vartyp 0 C3 . vartyp 0 C4 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 call 0 s _r_e_ t 0 0 2 $c dptr t $e $c &($r0 ) $e $c C_integer i $e $c $r1 $e 1 T13 lst abstr nil new T10 1 store . vartyp 0 C6 call 1 s _r_e_ t 0 0 1 $c dptr t $e $c &($r0 ) $e 1 T2 lst abstr nil new T10 1 store . vartyp 0 f call 2 s _r_e_ t 0 0 1 $c dptr t $e $c &($r0 ) $e 1 T10 lst abstr nil vartyp 0 call 3 s _r_e_ t 0 0 1 $c dptr t $e $c &($m0 ) $e runerr2 115 0 $end sortf 0z 2(d,d) {1,1} _r_e t "sortf(x,i) - sort list or set x on field i of each member" 0 0 tcase2 0 3 1 T13 lst lst abstr nil new T10 1 store . vartyp 0 C6 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 call 0 s _r_e_ t 0 0 2 $c dptr t $e $c &($r0 ) $e $c C_integer i $e $c $r1 $e 1 T2 lst lst abstr nil new T10 1 typ a if1 ! def1 ci 1 $c 1 $e runerr2 101 1 call 1 s _r_e_ t 0 0 2 $c dptr t $e $c &($r0 ) $e $c C_integer i $e $c $r1 $e 1 T10 lst lst abstr nil vartyp 0 if1 ! def1 ci 1 $c 1 $e runerr2 101 1 call 2 s _r_e_ t 0 0 2 $c dptr t $e $c &($m0 ) $e $c C_integer i $e $c $r1 $e runerr2 125 0 $end sqrt 0d 1(d) {1,1} _r_e f "sqrt(r) - square root of x." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; $cgoto $c !($r0 < 0) $e 0 drunerr(205, $r0 ); $efail $lbl 0 errno = 0; y = sqrt($r0 ); $cgoto $c !(errno == EDOM) $e 1 err_msg(205, NULL); $efail $lbl 1 $ret cd 1 $c y $e $} $e $end stop 27 1(dv) {} ___e f "stop(a,b,...) - write arguments (starting on error output) and stop." 0 2 f $c FILE *f = NULL; $e status $c word status = k_errout.status; $e lst abstr nil typ e lcase 1 0 lst block t 0 $c $cgoto $c (k_errout.status & Fs_Write) == 0 $e 0 $m2 = k_errout.fd; $goto 1 $lbl 0 err_msg(213, NULL); $efail $lbl 1 $e call 0 n ___e_ f 0 0 2 $c FILE *f $e $c $r2 $e $c word status $e $c $r3 $e lst if1 ! is T12 [ 0 0 block t 0 $c $cgoto $c (k_errout.status & Fs_Write) == 0 $e 2 $m2 = k_errout.fd; $goto 3 $lbl 2 err_msg(213, NULL); $efail $lbl 3 $e call 1 n ___e_ f 0 0 4 $c FILE *f $e $c $m2 $e $c word status $e $c $m3 $e $c dptr x $e $c $r0 $e $c int nargs $e $c $r1 $e $end string 04 1(d) {0,1} fr__ f "string(x) - produces a value of type string resulting from the conversion of x, but fails if the conversion is not possible." 0 0 if2 cnv1 T0 0 lst abstr nil typ T0 block _ 0 $c $ret d 1 $c $r0 $e $e lst abstr nil typ e block _ 0 $c $fail $e $end system 25 1(d) {1,1} _r_e f "system(s) - execute string s as a system command." 0 0 lst lst if1 ! cnv1 cs 0 runerr2 103 0 abstr nil typ T1 block _ 0 $c ${ C_integer i; pollctr >>= 1; pollctr++; i = system($r0 ); $ret ci 1 $c i $e $} $e $end tab 14 1(d) {0,1+} f_se f "tab(i) - set &pos to i, return substring of &subject spanned.Reverses effects if resumed." 0 0 lst lst if1 ! cnv1 ci 0 runerr2 101 0 abstr nil typ T0 call 0 s f_se_ t 0 0 1 $c C_integer i $e $c $m0 $e $end table 1v 1(d) {1,1} _r_e f "table(x) - create a table with default value x." 0 0 lst abstr nil new T11 3 typ e typ e vartiq'q VMS.BCKN[V9.BIN]RT.DB;41XNyp 0 block _ 0 $c ${ union block *bp; bp = hmake(T_Table, (word)0, (word)0); $cgoto $c !(bp == NULL) $e 0 err_msg(0, NULL); $efail $lbl 0 bp->table.defvalue = $r0 ; $ret T11 1 $c bp $e $} $e $end tan 09 1(d) {1,1} _r_e f "tan(r), x in radians." 0 0 lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double y; ; errno = 0; y = tan($r0 ); $cgoto $c !(errno == ERANGE) $e 0 err_msg(204, NULL); $efail $lbl 0 $ret cd 1 $c y $e $} $e $end trim 1d 2(d,d) {1,1} _r_e f "trim(s,c) - trim trailing characters in c from s." 0 0 lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! def1 tc 1 $c blankcs $e runerr2 104 1 abstr nil typ T0 call 0 n _r___ t 0 0 2 $c dptr c $e $c &($r1 ) $e $c dptr s $e $c &($r0 ) $e $end type 10 1(d) {1,1} _r_e f "type(x) - return type of x as a string." 0 0 lst abstr nil typ T0 tcase2 0 12 1 T4 block _ 0 $c $ret cs 1 $c "co-expression" $e $e 1 T2 block _ 0 $c $ret d 1 $c BlkLoc($r0 )->record.recdesc->proc.recname $e $e 1 T13 block _ 0 $c $ret cs 1 $c "set" $e $e 1 T11 block _ 0 $c $ret cs 1 $c "table" $e $e 1 T10 block _ 0 $c $ret cs 1 $c "list" $e $e 1 T3 block _ 0 $c $ret cs 1 $c "procedure" $e $e 1 T12 block _ 0 $c $cgoto $c !(BlkLoc($r0 )->file.status & Fs_Window) $e 0 $ret cs 1 $c "window" $e $lbl 0 $ret cs 1 $c "file" $e $e 1 T8 block _ 0 $c $ret cs 1 $c "cset" $e $e 1 T9 block _ 0 $c $ret cs 1 $c "real" $e $e 1 T1 block _ 0 $c $ret cs 1 $c "integer" $e $e 1 T7 block _ 0 $c $ret cs 1 $c "null" $e $e 1 T0 block _ 0 $c $ret cs 1 $c "string" $e $e block _ 0 $c err_msg(123, &($r0 )); $efail $e $end upto 1j 4(d,d,d,d) {0,*} f_se f "upto(c,s,i1,i2) - generates the sequence of integer positions in s up to a character in c in s[i2:i2], but fails if there is no such position." 0 2 cnv_i $c C_integer cnv_i; $e cnv_j $c C_integer cnv_j; $e lst lst lst lst lst abstr nil typ T1 if2 is T7 1 lst block t 0 $c $m1 = k_subject; $e if1 is T7 2 block t 0 $c $m4 = k_pos; $e lst if1 ! cnv1 T0 1 runerr2 103 1 if1 is T7 2 block t 0 $c $m4 = 1; $e if1 ! is T7 2 if2 cnv2 ci 2 $c $m4 $e block t 0 $c $cgoto $c !(($m4 = cvpos($r4 , StrLen($r1 ))) == CvtFail) $e 0 $fail $lbl 0 $e runerr2 101 2 if2 is T7 3 block t 0 $c $m5 = StrLen($r1 ) + 1; $e if2 cnv2 ci 3 $c $m5 $e block t 0 $c $cgoto $c !(($m5 = cvpos($r5 , StrLen($r1 ))) == CvtFail) $e 1 $fail $lbl 1 $cgoto $c !($r4 > $r5 ) $e 2 ${ register C_integer tmp; tmp = $r4 ; $m4 = $r5 ; $m5 = tmp; $} $lbl 2 $e runerr2 101 3 if1 ! cnv1 tc 0 runerr2 104 0 call 0 s f_s__ t 0 0 4 $c dptr c $e $c &($r0 ) $e $c dptr s $e $c &($r1 ) $e $c C_integer cnv_j $e $c $r5 $e $c C_integer cnv_i $e $c $m4 $e $end variable 11 1(d) {0,1} fr_e t "variable(s) - find the variable with name s and return a variable descriptor which points to its value." 0 0 lst lst if1 ! cnv1 cs 0 runerr2 103 0 abstr nil typ v call 0 s fr___ t 0 0 1 $c dptr s $e $c &($rd0 ) $e $end where 26 1(d) {0,1} fr_e f "where(f) - return current offset position in file f." 0 0 lst lst if1 ! is T12 0 runerr2 105 0 abstr nil typ T1 call 0 s fr___ t 0 0 1 $c dptr f $e $c &($r0 ) $e $end write 28 1(dv) {1,1} _r_e f "write(a,b,...) - write arguments." 0 2 f $c FILE *f = NULL; $e status $c word status = k_output.status; $e lcase 1 0 lst lst abstr nil typ T7 block t 0 $c $cgoto $c (k_output.status & Fs_Write) == 0 $e 0 $m2 = k_output.fd; $goto 1 $lbl 0 err_msg(213, NULL); $efail $lbl 1 $e call 0 s _r_e_ t 0 0 2 $c FILE *f $e $c $r2 $e $c word status $e $c $r3 $e lst lst abstr nil vartyp 0 if1 ! is T12 [ 0 0 block t 0 $c $cgoto $c (k_output.status & Fs_Write) == 0 $e 2 $m2 = k_output.fd; $goto 3 $lbl 2 err_msg(213, NULL); $efail $lbl 3 $e call 1 s _r_e_ t 0 0 4 $c FILE *f $e $c $m2 $e $c word status $e $c $m3 $e $c dptr x $e $c $r0 $e $c int nargs $e $c $r1 $e $end writes 29 1(dv) {1,1} _r_e f "writes(a,b,...) - write arguments without newline terminator." 0 2 f $c FILE *f = NULL; $e status $c word status = k_output.status; $e lcase 1 0 lst lst abstr nil typ T7 block t 0 $c $cgoto $c (k_output.status & Fs_Write) == 0 $e 0 $m2 = k_output.fd; $goto 1 $lbl 0 err_msg(213, NULL); $efail $lbl 1 $e call 0 s _r_e_ t 0 0 2 $c FILE *f $e $c $r2 $e $c word status $e $c $r3 $e lst lst abstr nil vartyp 0 if1 ! is T12 [ 0 0 block t 0 $c $cgoto $c (k_output.status & Fs_Write) == 0 $e 2 $m2 = k_output.fd; $goto 3 $lbl 2 err_msg(213, NULL); $efail $lbl 3 $e call 1 s _r_e_ t 0 0 4 $c FILE *f $e $c $m2 $e $c word status $e $c $m3 $e $c dptr x $e $c $r0 $e $c int nargs $e $c $r1 $e $end $endsect operators ! bang 0y 1(ud) {0,*} f_se t "!x - generate successive values from object x." 1 blkptr * nil 4 i $c register C_integer i; $e j $c register C_integer j; $e state $c struct hgstate state; $e ch $c char ch; $e lst if2 && is v 0 is T0 1 lst abstr nil new T5 1 vartyp 0 block t 0 $c $m3 = 1; $lbl 1 $cgoto $c !($r3 <= StrLen($r1 )) $e 3 $susp T5 3 $c &$m0 $e $c $r3 $e $c (word)1 $e deref(&$m0 , &$m1 ); $cgoto $c !(!(!(($r1 ).dword & F_Nqual))) $e 4 err_msg(103, &($r1 )); $efail $lbl 4 $lbl 2 $m3 ++; $goto 1 $lbl 3 $e if2 cnv1 ts 1 lst abstr nil typ T0 block t 0 $c $m3 = 1; $lbl 5 $cgoto $c !($r3 <= StrLen($r1 )) $e 7 $m6 = *(StrLoc($r1 ) + $r3 - 1); $susp T0 2 $c 1 $e $c (char *)&allchars[FromAscii($r6 ) & 0xFF] $e $lbl 6 $m3 ++; $goto 5 $lbl 7 $e tcase2 1 5 1 T2 lst abstr nil . vartyp 1 f block t 0 $c $m4 = BlkLoc($r1 )->record.recdesc->proc.nfields; $m3 = 0; $lbl 8 $cgoto $c !($r3 < $r4 ) $e 10 $susp sv 2 $c &BlkLoc($r1 )->record.fields[$r3 ] $e $c (struct b_record *)BlkLoc($r1 ) $e $lbl 9 $m3 ++; $goto 8 $lbl 10 $e 1 T13 lst abstr nil store . vartyp 1 C6 block t 0 $c $m2 = hgfirst(BlkLoc($r1 ), &$m5 ); $lbl 11 $cgoto $c !($r2 != 0) $e 13 $susp d 1 $c $r2 ->selem.setmem $e $lbl 12 $m2 = hgnext(BlkLoc($r1 ), &$m5 , $r2 ); $goto 11 $lbl 13 $e 1 T11 lst abstr nil . vartyp 1 C4 block t 0 $c $m2 = hgfirst(BlkLoc($r1 ), &$m5 ); $lbl 14 $cgoto $c !($r2 != 0) $e 16 $susp sv 2 $c &$r2 ->telem.tval $e $c $r2 $e $lbl 15 $m2 = hgnext(BlkLoc($r1 ), &$m5 , $r2 ); $goto 14 $lbl 16 $e 1 T12 lst abstr nil typ T0 call 0 s f_se_ t 0 0 1 $c dptr dx $e $c &($r1 ) $e 1 T10 lst abstr nil . vartyp 1 C2 block t 0 $c $m2 = BlkLoc($r1 )->list.listhead; $lbl 17 $cgoto $c !($r2 != NULL) $e 19 $m3 = 0; $lbl 20 $cgoto $c !($r3 < $r2 ->lelem.nused) $e 22 $m4 = $r2 ->lelem.first + $r3 ; $cgoto $c !($r4 >= $r2 ->lelem.nslots) $e 23 $m4 -= $r2 ->lelem.nslots; $lbl 23 $susp sv 2 $c &$r2 ->lelem.lslots[$r4 ] $e $c $r2 $e $lbl 21 $m3 ++; $goto 20 $lbl 22 $lbl 18 $m2 = $r2 ->lelem.listnext; $goto 17 $lbl 19 $e runerr2 116 1 block _ 0 $c $fail $e $end % mod 02 2(d,d) {1,1} _r_e t "" 2 desc nil desc nil 1 irslt $c C_integer irslt; $e acase 0 1 lst abstr nil typ T1 block _ 0 $c ${ extern int over_flow; $cgoto $c !($r1 == 0) $e 0 irunerr(202, $r1 ); $efail $lbl 0 $m4 = $r0 % $r1 ; $cgoto $c $r0 < 0 $e 1 $cgoto $c !($r4 < 0) $e 2 $m4 += (($r1 ) > 0 ? ($r1 ) : -($r1 )); $lbl 2 $goto 3 $lbl 1 $cgoto $c !($r4 > 0) $e 4 $m4 -= (($r1 ) > 0 ? ($r1 ) : -($r1 )); $lbl 4 $lbl 3 ; $ret ci 1 $c $r4 $e ; $} $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !(bigmod(&$m0 , &$m1 , &$mr ) == Error) $e 5 err_msg(0, NULL); $efail $lbl 5 $ret rn 0 ; $e lst abstr nil typ T9 block _ 0 $c ${ double d; d = $r0 - $r1 * (int)($r0 / $r1 ); $cgoto $c $r0 < 0.0 $e 6 $cgoto $c !(d < 0.0) $e 7 d += (($r1 ) > 0 ? ($r1 ) : -($r1 )); $lbl 7 $goto 8 $lbl 6 $cgoto $c !(d > 0.0) $e 9 d -= (($r1 ) > 0 ? ($r1 ) : -($r1 )); $lbl 9 $lbl 8 ; $ret cd 1 $c d $e $} ; $e j VMS.BCKN[V9.BIN]RT.DB;41] $end & conj 19 2(u,u) {1,1} _r__ f "x & y - produce value of y." 0 0 lst abstr nil vartyp 1 block _ 0 $c $ret d 1 $c $r1 $e $e $end * size 0t 1(d) {1,1} _r_e f "*x - return size of string or object x." 0 0 lst abstr nil typ T1 tcase2 0 7 1 T4 block _ 0 $c $ret ci 1 $c BlkLoc($r0 )->coexpr.size $e $e 1 T2 block _ 0 $c $ret ci 1 $c BlkLoc($r0 )->record.recdesc->proc.nfields $e $e 1 T8 block _ 0 $c ${ register word i; i = BlkLoc($r0 )->cset.size; $cgoto $c !(i < 0) $e 0 i = cssize(&$m0 ); $lbl 0 $ret ci 1 $c i $e $} $e 1 T13 block _ 0 $c $ret ci 1 $c BlkLoc($r0 )->set.size $e $e 1 T11 block _ 0 $c $ret ci 1 $c BlkLoc($r0 )->table.size $e $e 1 T10 block _ 0 $c $ret ci 1 $c BlkLoc($r0 )->list.size $e $e 1 T0 block _ 0 $c $ret ci 1 $c StrLen($r0 ) $e $e lst if1 ! cnv1 ts 0 runerr2 112 0 block _ 0 $c $ret ci 1 $c StrLen($r0 ) $e $e $end * mult 03 2(d,d) {1,1} _r_e t "" 2 desc nil desc nil 1 irslt $c C_integer irslt; $e acase 0 1 lst abstr nil typ T1 block _ 0 $c ${ extern int over_flow; $m4 = mul($r0 , $r1 ); $cgoto $c over_flow $e 0 $ret ci 1 $c $r4 $e $goto 1 $lbl 0 MakeInt($r0 , &$m3 ); MakeInt($r1 , &$m2 ); $cgoto $c !(bigmul(&$m3 , &$m2 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 $lbl 1 ; $} $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !(bigmul(&$m0 , &$m1 , &$mr ) == Error) $e 3 err_msg(0, NULL); $efail $lbl 3 $ret rn 0 ; $e lst abstr nil typ T9 block _ 0 $c $ret cd 1 $c ($r0 * $r1 ) $e ; $e $end ** inter 14 2(d,d) {1,1} _r_e f "x ** y - intersection of csets x and y or of sets x and y." 0 0 if2 && is T13 0 is T13 1 lst abstr nil new T13 1 ** store . vartyp 0 C6 store . vartyp 1 C6 call 0 s _r_e_ t 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e lst lst lst if1 ! cnv1 tc 0 runerr2 120 0 if1 ! cnv1 tc 1 runerr2 120 1 abstr nil typ T8 call 1 s _r_e_ t 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e $end + number 05 1(d) {1,1} _r_e f "+x - convert x to a number." 0 0 if2 cnv1 eci 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c $r0 $e $e if2 cnv1 ei 0 lst abstr nil typ T1 block _ 0 $c $ret d 1 $c $r0 $e $e if2 cnv1 cd 0 lst abstr nil typ T9 block _ 0 $c $ret cd 1 $c $r0 $e $e runerr2 102 0 $end + plus 06 2(d,d) {1,1} _r_e t "" 2 desc nil desc nil 1 irslt $c C_integer irslt; $e acase 0 1 lst abstr nil typ T1 block _ 0 $c ${ extern int over_flow; $m4 = add($r0 , $r1 ); $cgoto $c over_flow $e 0 $ret ci 1 $c $r4 $e $goto 1 $lbl 0 MakeInt($r0 , &$m3 ); MakeInt($r1 , &$m2 ); $cgoto $c !(bigadd(&$m3 , &$m2 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 $lbl 1 ; $} $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !(bigadd(&$m0 , &$m1 , &$mr ) == Error) $e 3 err_msg(0, NULL); $efail $lbl 3 $ret rn 0 ; $e lst abstr nil typ T9 block _ 0 $c $ret cd 1 $c ($r0 + $r1 ) $e ; $e $end ++ union 15 2(d,d) {1,1} _r_e t "x ++ y - union of csets x and y or of sets x and y." 0 0 if2 && is T13 0 is T13 1 lst abstr nil new T13 1 ++ store . vartyp 0 C6 store . vartyp 1 C6 call 0 s _r_e_ t 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr y $e $c &($m1 ) $e lst lst lst if1 ! cnv1 tc 0 runerr2 120 0 if1 ! cnv1 tc 1 runerr2 120 1 abstr nil typ T8 call 1 s _r_e_ t 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e $end - neg 04 1(d) {1,1} _r_e t "-x - negate x." 0 0 if2 cnv1 eci 0 lst abstr nil typ T1 block _ 0 $c ${ C_integer i; extern int over_flow; i = neg($r0 ); $cgoto $c !(over_flow) $e 0 ${ struct descrip tmp; MakeInt($r0 , &tmp); $cgoto $c !(bigneg(&tmp, &$mr ) == Error) $e 1 err_msg(0, NULL); $efail $lbl 1 $ret rn 0 $} $lbl 0 $ret ci 1 $c i $e $} $e if2 cnv1 ei 0 lst abstr nil typ T1 block _ 0 $c $cgoto $c !(cpbignum(&$m0 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 BlkLoc($rr )->bignumblk.sign ^= 1; $ret rn 0 $e lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c ${ double drslt; drslt = -$r0 ; $ret cd 1 $c drslt $e $} $e $end - minus 01 2(d,d) {1,1} _r_e t "" 2 desc nil desc nil 1 irslt $c C_integer irslt; $e acase 0 1 lst abstr nil typ T1 block _ 0 $c ${ extern int over_flow; $m4 = sub($r0 , $r1 ); $cgoto $c over_flow $e 0 $ret ci 1 $c $r4 $e $goto 1 $lbl 0 MakeInt($r0 , &$m3 ); MakeInt($r1 , &$m2 ); $cgoto $c !(bigsub(&$m3 , &$m2 , &$mr ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $ret rn 0 $lbl 1 ; $} $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !(bigsub(&$m0 , &$m1 , &$mr ) == Error) $e 3 err_msg(0, NULL); $efail $lbl 3 $ret rn 0 ; $e lst abstr nil typ T9 block _ 0 $c $ret cd 1 $c ($r0 - $r1 ) $e ; $e $end -- diff 13 2(d,d) {1,1} _r_e f "x -- y - difference of csets x and y or of sets x and y." 0 0 if2 && is T13 0 is T13 1 lst abstr nil vartyp 0 call 0 s _r_e_ t 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e lst lst lst if1 ! cnv1 tc 0 runerr2 120 0 if1 ! cnv1 tc 1 runerr2 120 1 abstr nil typ T8 call 1 s _r_e_ t 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e $end . value 18 1(d) {1,1} _r__ f ".x - produce value of x." 0 0 lst abstr nil vartyp 0 block _ 0 $c $ret d 1 $c $r0 $e $e $end ... to 0w 2(d,d) {0,*} f_se f "i to j - generate successive values." 0 0 lst lst lst if1 ! cnv1 ci 0 runerr2 101 0 if1 ! cnv1 ci 1 runerr2 101 1 abstr nil typ T1 block _ 0 $c ; $lbl 0 $cgoto $c !($r0 <= $r1 ) $e 2 $susp ci 1 $c $r0 $e $lbl 1 ++$m0 ; $goto 0 $lbl 2 $fail $e $end ... toby 0v 3(d,d,d) {0,*} f_se f "i to j by k - generate successive values." 0 0 lst lst lst lst if1 ! cnv1 ci 0 runerr2 101 0 if1 ! cnv1 ci 1 runerr2 101 1 if1 ! cnv1 ci 2 runerr2 101 2 abstr nil typ T1 block _ 0 $c $cgoto $c !($r2 == 0) $e 0 irunerr(211, $r2 ); $efail $lbl 0 $cgoto $c $r2 > 0 $e 1 ; $lbl 2 $cgoto $c !($r0 >= $r1 ) $e 4 $susp ci 1 $c $r0 $e $lbl 3 $m0 += $r2 ; $goto 2 $lbl 4 $goto 5 $lbl 1 ; $lbl 6 $cgoto $c !($r0 <= $r1 ) $e 8 $susp ci 1 $c $r0 $e $lbl 7 $m0 += $r2 ; $goto 6 $lbl 8 $lbl 5 $fail $e $end / null 17 1(ud) {0,1} fr__ f "/x - test x for null value." 0 0 lst abstr nil vartyp 0 if2 is T7 1 block _ 0 $c $ret d 1 $c $r0 $e $e block _ 0 $c $fail $e $end / divide 00 2(d,d) {1,1} _r_e t "" 2 desc nil desc nil 1 irslt $c C_integer irslt; $e acase 0 1 lst abstr nil typ T1 block _ 0 $c ${ extern int over_flow; $ret ci 1 $c ($r0 / $r1 ) $e ; $} $e lst abstr nil typ T1 block _ 0 $c bigdiv(&$m0 , &$m1 , &$mr ); $ret rn 0 ; $e lst abstr nil typ T9 block _ 0 $c ${ double z; z = $r0 / $r1 ; $ret cd 1 $c z $e $} ; $e $end := asgn 08 2(u,d) {0,1} fr_e f "x := y - assign y to x." 0 0 lst lst lst if1 ! is v 0 runerr2 111 0 abstr nil vartyp 0 tcase2 0 8 1 T19 if1 ! cnv2 T0 1 $c *VarLoc($r0 ) $e runerr2 103 1 1 T15 lst if1 ! cnv2 T0 1 $c *VarLoc($r0 ) $e runerr2 103 1 block t 0 $c k_pos = 1; $e 1 T16 call 0 s f__et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr y $e $c &($r1 ) $e 1 T14 call 1 s ___et f 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr y $e $c &($r1 ) $e 1 T18 call 2 s ___et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr y $e $c &($r1 ) $e 1 T17 call 3 n ____t f 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e 1 T6 lst abstr = . store . vartyp 0 C1 C4 vartyp 1 nil block t 0 $c tvtbl_asgn(&$m0 , (const dptr)&$r1 ); $e 1 T5 lst abstr = store . vartyp 0 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m0 , (const dptr)&$r1 ) == Error) $e 1 err_msg(0, NULL); $efail $lbl 1 $e lst abstr = vartyp 0 vartyp 1 nil block t 0 $c *(dptr)((word *)VarLoc($r0 ) + Offset($r0 )) = $r1 ; $e block _ 0 $c $ret d 1 $c $r0 $e $e $end :=: swap 0b 2(ud,ud) {0,1} frkSLG VMS.BCKN[V9.BIN]RT.DB;41+l_e f "x :=: y - swap values of x and y." 2 blkptr * nil blkptr * nil 2 adj1 $c word adj1 = 0; $e adj2 $c word adj2 = 0; $e lst lst lst lst lst lst lst lst if1 ! is v 0 runerr2 111 0 if1 ! is v 2 runerr2 111 2 abstr nil vartyp 0 if1 && is T5 0 is T5 2 call 0 n ____t f 0 0 6 $c word (*adj2) $e $c &($m7 ) $e $c word (*adj1) $e $c &($m6 ) $e $c dptr y $e $c &($r2 ) $e $c dptr bp_y $e $c &($md4 ) $e $c dptr x $e $c &($r0 ) $e $c dptr bp_x $e $c &($md5 ) $e tcase2 0 8 1 T19 if1 ! cnv2 T0 3 $c *VarLoc($r0 ) $e runerr2 103 3 1 T15 lst if1 ! cnv2 T0 3 $c *VarLoc($r0 ) $e runerr2 103 3 block t 0 $c k_pos = 1; $e 1 T16 call 1 s f__et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr dy $e $c &($r3 ) $e 1 T14 call 2 s ___et f 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr dy $e $c &($r3 ) $e 1 T18 call 3 s ___et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr dy $e $c &($r3 ) $e 1 T17 call 4 n ____t f 0 0 2 $c dptr dy $e $c &($r3 ) $e $c dptr x $e $c &($r0 ) $e 1 T6 lst abstr = . store . vartyp 0 C1 C4 vartyp 3 nil block t 0 $c tvtbl_asgn(&$m0 , (const dptr)&$r3 ); $e 1 T5 lst abstr = store . vartyp 0 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m0 , (const dptr)&$r3 ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $e lst abstr = vartyp 0 vartyp 3 nil block t 0 $c *(dptr)((word *)VarLoc($r0 ) + Offset($r0 )) = $r3 ; $e if1 && is T5 0 is T5 2 block t 0 $c $cgoto $c !($r7 != 0) $e 3 $r4 ->tvsubs.sspos += $r7 ; $lbl 3 $e tcase2 2 8 1 T19 if1 ! cnv2 T0 1 $c *VarLoc($r2 ) $e runerr2 103 1 1 T15 lst if1 ! cnv2 T0 1 $c *VarLoc($r2 ) $e runerr2 103 1 block t 0 $c k_pos = 1; $e 1 T16 call 5 s f__et f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr dx $e $c &($r1 ) $e 1 T14 call 6 s ___et f 0 0 2 $c dptr y $e $c &($m2 ) $e $c dptr dx $e $c &($r1 ) $e 1 T18 call 7 s ___et f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr dx $e $c &($r1 ) $e 1 T17 call 8 n ____t f 0 0 2 $c dptr dx $e $c &($r1 ) $e $c dptr y $e $c &($r2 ) $e 1 T6 lst abstr = . store . vartyp 2 C1 C4 vartyp 1 nil block t 0 $c tvtbl_asgn(&$m2 , (const dptr)&$r1 ); $e 1 T5 lst abstr = store . vartyp 2 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m2 , (const dptr)&$r1 ) == Error) $e 4 err_msg(0, NULL); $efail $lbl 4 $e lst abstr = vartyp 2 vartyp 1 nil block t 0 $c *(dptr)((word *)VarLoc($r2 ) + Offset($r2 )) = $r1 ; $e if1 && is T5 0 is T5 2 block t 0 $c $cgoto $c !($r6 != 0) $e 5 $r5 ->tvsubs.sspos += $r6 ; $lbl 5 $e block _ 0 $c $ret d 1 $c $r0 $e $e $end < numlt 0i 2(d,d) {0,1} fr_e f "x < y - test if x is numerically less than y." 0 0 acase 0 1 lst abstr nil typ T1 block _ 0 $c $cgoto $c !($r0 < $r1 ) $e 0 $ret ci 1 $c $r1 $e $lbl 0 $fail $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !((bigcmp(&$m0 , &$m1 ) < 0)) $e 1 $ret d 1 $c $r1 $e $lbl 1 $fail $e lst abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 < $r1 ) $e 2 $ret cd 1 $c $r1 $e $lbl 2 $fail $e $end <- rasgn 09 2(ud,d) {0,1+} f_se f "x <- y - assign y to x. Reverses assignment if resumed." 0 0 lst lst lst lst lst if1 ! is v 0 runerr2 111 0 abstr nil vartyp 0 tcase2 0 8 1 T19 if1 ! cnv2 T0 2 $c *VarLoc($r0 ) $e runerr2 103 2 1 T15 lst if1 ! cnv2 T0 2 $c *VarLoc($r0 ) $e runerr2 103 2 block t 0 $c k_pos = 1; $e 1 T16 call 0 s f__et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr y $e $c &($r2 ) $e 1 T14 call 1 s ___et f 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr y $e $c &($r2 ) $e 1 T18 call 2 s ___et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr y $e $c &($r2 ) $e 1 T17 call 3 n ____t f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr x $e $c &($r0 ) $e 1 T6 lst abstr = . store . vartyp 0 C1 C4 vartyp 2 nil block t 0 $c tvtbl_asgn(&$m0 , (const dptr)&$r2 ); $e 1 T5 lst abstr = store . vartyp 0 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m0 , (const dptr)&$r2 ) == Error) $e 2 err_msg(0, NULL); $efail $lbl 2 $e lst abstr = vartyp 0 vartyp 2 nil block t 0 $c *(dptr)((word *)VarLoc($r0 ) + Offset($r0 )) = $r2 ; $e block t 0 $c $susp d 1 $c $r0 $e $e tcase2 0 8 1 T19 if1 ! cnv2 T0 1 $c *VarLoc($r0 ) $e runerr2 103 1 1 T15 lst if1 ! cnv2 T0 1 $c *VarLoc($r0 ) $e runerr2 103 1 block t 0 $c k_pos = 1; $e 1 T16 call 4 s f__et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr saved_x $e $c &($r1 ) $e 1 T14 call 5 s ___et f 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr saved_x $e $c &($r1 ) $e 1 T18 call 6 s ___et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr saved_x $e $c &($r1 ) $e 1 T17 call 7 n ____t f 0 0 2 $c dptr saved_x $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e 1 T6 lst abstr = . store . vartyp 0 C1 C4 vartyp 1 nil block t 0 $c tvtbl_asgn(&$m0 , (const dptr)&$r1 ); $e 1 T5 lst abstr = store . vartyp 0 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m0 , (const dptr)&$r1 ) == Error) $e 3 err_msg(0, NULL); $efail $lbl 3 $e lst abstr = vartyp 0 vartyp 1 nil block t 0 $c *(dptr)((word *)VarLoc($r0 ) + Offset($r0 )) = $r1 ; $e block _ 0 $c $fail $e $end <-> rswap 0a 2(ud,ud) {0,1+} f_se f "x <-> y - swap values of x and y. Reverses swap if resumed." 2 blkptr * nil blkptr * nil 2 adj1 $c word adj1 = 0; $e adj2 $c word adj2 = 0; $e lst lst lst lst lst lst lst lst lst lst lst lst lst if1 ! is v 0 runerr2 111 0 if1 ! is v 2 runerr2 111 2 abstr nil vartyp 0 if1 && is T5 0 is T5 2 call 0 n ____t f 0 0 6 $c word (*adj2) $e $c &($m7 ) $e $c word (*adj1) $e $c &($m6 ) $e $c dptr y $e $c &($r2 ) $e $c dptr bp_y $e $c &($md4 ) $e $c dptr x $e $c &($r0 ) $e $c dptr bp_x $e $c &($md5 ) $e tcase2 0 8 1 T19 if1 ! cnv2 T0 3 $c *VarLoc($r0 ) $e runerr2 103 3 1 T15 lst if1 ! cnv2 T0 3 $c *VarLoc($r0 ) $e runerr2 103 3 block t 0 $c k_pos = 1; $e 1 T16 call 1 s f__et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr dy $e $c &($r3 ) $e 1 T14 call 2 s ___et f 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr dy $e $c &($r3 ) $e 1 T18 call 3 s ___et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr dy $e $c &($r3 ) $e 1 T17 call 4 n ____t f 0 0 2 $c dptr dy $e $c &($r3 ) $e $c dptr x $e $c &($r0 ) $e 1 T6 lst abstr = . store . vartyp 0 C1 C4 vartyp 3 nil block t 0 $c tvtbl_asgn(&$m0 , (const dptr)&$r3 ); $e 1 T5 lst abstr = store . vartyp 0 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m0 , (const dptr)&$r3 ) == Error) $e 4 err_msg(0, NULL); $efail $lbl 4 $e lst abstr = vartyp 0 vartyp 3 nil block t 0 $c *(dptr)((word *)VarLoc($r0 ) + Offset($r0 )) = $r3 ; $e if1 && is T5 0 is T5 2 block t 0 $c $cgoto $c !($r7 != 0) $e 5 $r4 ->tvsubs.sspos += $r7 ; $lbl 5 $e tcase2 2 8 1 T19 if1 ! cnv2 T0 1 $c *VarLoc($r2 ) $e runerr2 103 1 1 T15 lst if1 ! cnv2 T0 1 $c *VarLoc($r2 ) $e runerr2 103 1 block t 0 $c k_pos = 1; $e 1 T16 call 5 s f__et f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr dx $e $c &($r1 ) $e 1 T14 call 6 s ___et f 0 0 2 $c dptr y $e $c &($m2 ) $e $c dptr dx $e $c &($r1 ) $e 1 T18 call 7 s ___et f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr dx $e $c &($r1 ) $e 1 T17 call 8 n ____t f 0 0 2 $c dptr dx $e $c &($r1 ) $e $c dptr y $e $c &($r2 ) $e 1 T6 lst abstr = . store . vartyp 2 C1 C4 vartyp 1 nil block t 0 $c tvtbl_asgn(&$m2 , (const dptr)&$r1 ); $e 1 T5 lst abstr = store . vartyp 2 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m2 , (const dptr)&$r1 ) == Error) $e 6 err_msg(0, NULL); $efail $lbl 6 $e lst abstr = vartyp 2 vartyp 1 nil block t 0 $c *(dptr)((word *)VarLoc($r2 ) + Offset($r2 )) = $r1 ; $e if1 && is T5 0 is T5 2 block t 0 $c $cgoto $c !($r6 != 0) $e 7 $r5 ->tvsubs.sspos += $r6 ; $lbl 7 $e block t 0 $c $susp d 1 $c $r0 $e $e tcase2 0 8 1 T19 if1 ! cnv2 T0 1 $c *VarLoc($r0 ) $e rlb VMS.BCKN[V9.BIN]RT.DB;41J'{unerr2 103 1 1 T15 lst if1 ! cnv2 T0 1 $c *VarLoc($r0 ) $e runerr2 103 1 block t 0 $c k_pos = 1; $e 1 T16 call 9 s f__et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr dx $e $c &($r1 ) $e 1 T14 call a s ___et f 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr dx $e $c &($r1 ) $e 1 T18 call b s ___et f 0 0 2 $c dptr x $e $c &($r0 ) $e $c dptr dx $e $c &($r1 ) $e 1 T17 call c n ____t f 0 0 2 $c dptr dx $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e 1 T6 lst abstr = . store . vartyp 0 C1 C4 vartyp 1 nil block t 0 $c tvtbl_asgn(&$m0 , (const dptr)&$r1 ); $e 1 T5 lst abstr = store . vartyp 0 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m0 , (const dptr)&$r1 ) == Error) $e 8 err_msg(0, NULL); $efail $lbl 8 $e lst abstr = vartyp 0 vartyp 1 nil block t 0 $c *(dptr)((word *)VarLoc($r0 ) + Offset($r0 )) = $r1 ; $e if1 && is T5 0 is T5 2 block t 0 $c $cgoto $c !($r7 != 0) $e 9 $r4 ->tvsubs.sspos -= $r7 ; $lbl 9 $e tcase2 2 8 1 T19 if1 ! cnv2 T0 3 $c *VarLoc($r2 ) $e runerr2 103 3 1 T15 lst if1 ! cnv2 T0 3 $c *VarLoc($r2 ) $e runerr2 103 3 block t 0 $c k_pos = 1; $e 1 T16 call d s f__et f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr dy $e $c &($r3 ) $e 1 T14 call e s ___et f 0 0 2 $c dptr y $e $c &($m2 ) $e $c dptr dy $e $c &($r3 ) $e 1 T18 call f s ___et f 0 0 2 $c dptr y $e $c &($r2 ) $e $c dptr dy $e $c &($r3 ) $e 1 T17 call g n ____t f 0 0 2 $c dptr dy $e $c &($r3 ) $e $c dptr y $e $c &($r2 ) $e 1 T6 lst abstr = . store . vartyp 2 C1 C4 vartyp 3 nil block t 0 $c tvtbl_asgn(&$m2 , (const dptr)&$r3 ); $e 1 T5 lst abstr = store . vartyp 2 C0 typ T0 nil block t 0 $c $cgoto $c !(subs_asgn(&$m2 , (const dptr)&$r3 ) == Error) $e 10 err_msg(0, NULL); $efail $lbl 10 $e lst abstr = vartyp 2 vartyp 3 nil block t 0 $c *(dptr)((word *)VarLoc($r2 ) + Offset($r2 )) = $r3 ; $e if1 && is T5 0 is T5 2 block t 0 $c $cgoto $c !($r6 != 0) $e 11 $r5 ->tvsubs.sspos -= $r6 ; $lbl 11 $e block _ 0 $c $fail $e $end << lexlt 0p 2(d,d) {0,1} fr_e t "x << y - test if x is lexically less than y." 0 1 temp_str $c int temp_str = 0; $e lst lst lst abstr nil typ T0 if1 ! cnv1 ts 0 runerr2 103 0 if1 ! is T0 1 if2 cnv1 ts 1 block t 0 $c $m2 = 1; $e runerr2 103 1 call 0 s fr_e_ t 0 0 3 $c int temp_str $e $c $r2 $e $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end <<= lexle 0o 2(d,d) {0,1} fr_e t "x <<= y - test if x is lexically less than or equal to y." 0 1 temp_str $c int temp_str = 0; $e lst lst lst abstr nil typ T0 if1 ! cnv1 ts 0 runerr2 103 0 if1 ! is T0 1 if2 cnv1 ts 1 block t 0 $c $m2 = 1; $e runerr2 103 1 call 0 s fr_e_ t 0 0 3 $c int temp_str $e $c $r2 $e $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end <= numle 0h 2(d,d) {0,1} fr_e f "x <= y - test if x is numerically less than or equal to y." 0 0 acase 0 1 lst abstr nil typ T1 block _ 0 $c $cgoto $c !($r0 <= $r1 ) $e 0 $ret ci 1 $c $r1 $e $lbl 0 $fail $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !((bigcmp(&$m0 , &$m1 ) <= 0)) $e 1 $ret d 1 $c $r1 $e $lbl 1 $fail $e lst abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 <= $r1 ) $e 2 $ret cd 1 $c $r1 $e $lbl 2 $fail $e $end = tabmat 0u 1(d) {0,*} f_se f "=x - tab(match(x)). Reverses effects if resumed." 0 0 lst lst if1 ! cnv1 T0 0 runerr2 103 0 abstr nil typ T0 call 0 s f_se_ t 0 0 1 $c dptr x $e $c &($r0 ) $e $end = numeq 0e 2(d,d) {0,1} fr_e f "x = y - test if x is numerically equal to y." 0 0 acase 0 1 lst abstr nil typ T1 block _ 0 $c $cgoto $c !($r0 == $r1 ) $e 0 $ret ci 1 $c $r1 $e $lbl 0 $fail $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !((bigcmp(&$m0 , &$m1 ) == 0)) $e 1 $ret d 1 $c $r1 $e $lbl 1 $fail $e lst abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 == $r1 ) $e 2 $ret cd 1 $c $r1 $e $lbl 2 $fail $e $end == lexeq 0k 2(d,d) {0,1} fr_e t "x == y - test if x is lexically equal to y." 0 1 temp_str $c int temp_str = 0; $e lst lst lst abstr nil typ T0 if1 ! cnv1 ts 0 runerr2 103 0 if1 ! is T0 1 if2 cnv1 ts 1 block t 0 $c $m2 = 1; $e runerr2 103 1 call 0 s fr_e_ t 0 0 3 $c int temp_str $e $c $r2 $e $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end === eqv 0q 2(d,d) {0,1} fr__ f "x === y - test equivalence of x and y." 0 0 lst abstr nil vartyp 1 block _ 0 $c $cgoto $c equiv(&$m0 , &$m1 ) $e 0 $fail $goto 1 $lbl 0 $ret d 1 $c $r1 $e $lbl 1 $e $end > numgt 0g 2(d,d) {0,1} fr_e f "x > y - test if x is numerically greater than y." 0 0 acase 0 1 lst abstr nil typ T1 block _ 0 $c $cgoto $c !($r0 > $r1 ) $e 0 $ret ci 1 $c $r1 $e $lbl 0 $fail $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !((bigcmp(&$m0 , &$m1 ) > 0)) $e 1 $ret d 1 $c $r1 $e $lbl 1 $fail $e lst abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 > $r1 ) $e 2 $ret cd 1 $c $r1 $e $lbl 2 $fail $e $end >= numge 0f 2(d,d) {0,1} fr_e f "x >= y - test if x is numerically greater than or equal to y." 0 0 acase 0 1 lst abstr nil typ T1 block _ 0 $c $cgoto $c !($r0 >= $r1 ) $e 0 $ret ci 1 $c $r1 $e $lbl 0 $fail $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !((bigcmp(&$m0 , &$m1 ) >= 0)) $e 1 $ret d 1 $c $r1 $e $lbl 1 $fail $e lst abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 >= $r1 ) $e 2 $ret cd 1 $c $r1 $e $lbl 2 $fail $e $end >> lexgt 0n 2(d,d) {0,1} fr_e t "x >> y - test if x is lexically greater than y." 0 1 temp_str $c int temp_str = 0; $e lst lst lst abstr nil typ T0 if1 ! cnv1 ts 0 runerr2 103 0 if1 ! is T0 1 if2 cnv1 ts 1 block t 0 $c $m2 = 1; $e runerr2 103 1 call 0 s fr_e_ t 0 0 3 $c int temp_str $e $c $r2 $e $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end >>= lexge 0m 2(d,d) {0,1} fr_e t "x >>= y - test if x is lexically greater than or equal to y." 0 1 temp_str $c int temp_str = 0; $e lst lst lst abstr nil typ T0 if1 ! cnv1 ts 0 runerr2 103 0 if1 ! is T0 1 if2 cnv1 ts 1 block t 0 $c $m2 = 1; $e runerr2 103 1 call 0 s fr_e_ t 0 0 3 $c int temp_str $e $c $r2 $e $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end ? random 0z 1(ud) {0,1} fr_e t "?x - produce a randomly selected element of x." 0 0 if2 && is v 0 is T0 1 lst abstr nil new T5 1 vartyp 0 call 0 s fr___ t 0 0 2 $c dptr x $e $c &($m0 ) $e $c dptr dx $e $c &($r1 ) $e tcase2 1 6 1 T2 lst abstr nil . vartyp 1 f call 2 s fr___ t 0 0 1 $c dptr dx $e $c &($r1 ) $e 1 T13 lst abstr nil store . vartyp 1 C6 call 3 s fr___ t 0 0 1 $c dptr dx $e $c &($r1 ) $e 1 T11 lst abstr nil . vartyp 1 C4 call 4 s fr___ t 0 0 1 $c dptr dx $e $c &($r1 ) $e 1 T10 lst abstr nil . vartyp 1 C2 call 5 s fr___ t 0 0 1 $c dptr dx $e $c &($r1 ) $e 1 T8 lst lst if1 ! cnv1 ts 1 nil abstr nil typ T0 call 6 s fr___ t 0 0 1 $c dptr dx $e $c &($r1 ) $e 1 T0 lst abstr nil typ T0 call 7 s fr___ t 0 0 1 $c dptr dx $e $c &($r1 ) $e lst lst if1 ! cnv1 T1 1 runerr2 113 1 abstr nil ++ typ T1 typ T9 call 1 s _r_e_ t 0 0 1 $c dptr dx $e $c &($m1 ) $e $end [...] llist 0x 1(dv) {1,1} _r_e f " [x1, x2, ... ] - create an explicitly specified list." 0 0 lst abstr nil new T10 1 vartyp 0 call 0 s _r_e_ t 0 0 2 $c dptr elems $e $c $r0 $e $c int n $e $c $r1 $e $end [:] sect 10 3(ud,d,d) {0,1} fr_e t "x[i:j] - form a substring or list section of x." 0 1 use_trap $c int use_trap = 0; $e if2 is T10 1 lst lst lst abstr nil vartyp 1 if1 ! cnv1 ci 2 lst if1 cnv1 T1 2 block _ 0 $c $fail $e runerr2 101 2 if1 ! cnv1 ci 3 lst if1 cnv1 T1 3 block _ 0 $c $fail $e runerr2 101 3 call 0 s fr_e_ t 0 0 3 $c C_integer j $e $c $m3 $e $c dptr dx $e $c &($m1 ) $e $c C_integer i $e $c $m2 $e lst lst lst if2 && is v 0 is T0 1 lst abstr nil nem@8 VMS.BCKN[V9.BIN]RT.DB;41׾w T5 1 vartyp 0 block t 0 $c $m4 = 1; $e if2 cnv1 T0 1 abstr nil typ T0 runerr2 110 1 if1 ! cnv1 ci 2 lst if1 cnv1 T1 2 block _ 0 $c $fail $e runerr2 101 2 if1 ! cnv1 ci 3 lst if1 cnv1 T1 3 block _ 0 $c $fail $e runerr2 101 3 call 1 s fr___ t 0 0 5 $c dptr x $e $c &($m0 ) $e $c int use_trap $e $c $r4 $e $c C_integer j $e $c $m3 $e $c dptr dx $e $c &($r1 ) $e $c C_integer i $e $c $m2 $e $end [] subsc 11 2(ud,d) {0,1} fr_e f "x[y] - access yth character or element of x." 0 1 use_trap $c int use_trap = 0; $e tcase2 1 3 1 T2 lst abstr nil . vartyp 1 f if2 ! cnv1 ci 2 call 1 s fr_e_ t 0 0 2 $c dptr dx $e $c &($r1 ) $e $c dptr y $e $c &($m2 ) $e call 2 s fr___ t 0 0 2 $c C_integer y $e $c $r2 $e $c dptr dx $e $c &($r1 ) $e 1 T11 lst abstr = . vartyp 1 C3 vartyp 2 ++ . vartyp 1 C4 new T6 1 vartyp 1 call 3 s _r_e_ t 0 0 2 $c dptr dx $e $c &($m1 ) $e $c dptr y $e $c &($m2 ) $e 1 T10 lst lst abstr nil . vartyp 1 C2 if1 ! cnv1 ci 2 lst if1 cnv1 T1 2 block _ 0 $c $fail $e runerr2 101 2 call 4 s fr___ t 0 0 2 $c C_integer y $e $c $r2 $e $c dptr dx $e $c &($r1 ) $e lst lst if2 && is v 0 is T0 1 lst abstr nil new T5 1 vartyp 0 block t 0 $c $m3 = 1; $e if2 cnv1 ts 1 abstr nil typ T0 runerr2 114 1 if1 ! cnv1 ci 2 lst if1 cnv1 T1 2 block _ 0 $c $fail $e runerr2 101 2 call 0 s fr___ t 0 0 4 $c dptr x $e $c &($m0 ) $e $c int use_trap $e $c $r3 $e $c dptr dx $e $c &($r1 ) $e $c C_integer y $e $c $r2 $e $end \ nonnull 16 1(ud) {0,1} fr__ f "\\x - test x for nonnull value." 0 0 lst abstr nil vartyp 0 if2 is T7 1 block _ 0 $c $fail $e block _ 0 $c $ret d 1 $c $r0 $e $e $end ^ refresh 0s 1(d) {1,1} _r_e f "^x - create a refreshed copy of a co-expression." 0 0 lst lst if1 ! is T4 0 runerr2 118 0 abstr nil typ T4 call 0 s _r_e_ t 0 0 1 $c dptr x $e $c &($r0 ) $e $end ^ powr 07 2(d,d) {1,1} _r_e t "x ^ y - raise x to the y power." 0 0 if2 cnv1 ei 1 if2 cnv1 ei 0 lst abstr nil typ T1 block _ 0 $c ${ extern int over_flow; $cgoto $c !(bigpow(&$m0 , &$m1 , &$mr ) == Error) $e 0 err_msg(0, NULL); $efail $lbl 0 $ret rn 0 $} $e lst lst if1 ! cnv1 cd 0 runerr2 102 0 abstr nil typ T9 block _ 0 $c $cgoto $c !(ripow($r0 , IntVal($r1 ), &$mr ) == Error) $e 1 err_msg(0, NULL); $efail $lbl 1 $ret rn 0 $e lst lst lst if1 ! cnv1 cd 0 runerr2 102 0 if1 ! cnv1 cd 1 runerr2 102 1 abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 == 0.0 && $r1 < 0.0) $e 2 err_msg(204, NULL); $efail $lbl 2 $cgoto $c !($r0 < 0.0) $e 3 err_msg(206, NULL); $efail $lbl 3 $ret cd 1 $c pow($r0 , $r1 ) $e $e $end || cater 0c 2(d,d) {1,1} _r_e t "x || y - concatenate strings x and y." 0 0 lst lst lst if1 ! cnv1 T0 0 runerr2 103 0 if1 ! cnv1 T0 1 runerr2 103 1 abstr nil typ T0 call 0 s _r_e_ t 0 0 2 $c dptr y $e $c &($r1 ) $e $c dptr x $e $c &($r0 ) $e $end ||| lconcat 0d 2(d,d) {1,1} _r_e f "x ||| y - concatenate lists x and y." 0 0 lst lst lst if1 ! is T10 0 runerr2 108 0 if1 ! is T10 1 runerr2 108 1 abstr nil new T10 1 store . ++ vartyp 0 vartyp 1 C2 call 0 s _r_e_ t 0 0 2 $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end ~ compl 12 1(d) {1,1} _r_e f "~x - complement cset x." 0 0 lst lst if1 ! cnv1 tc 0 runerr2 104 0 abstr nil typ T8 call 0 s _r_e_ t 0 0 1 $c dptr x $e $c &($r0 ) $e $end ~= numne 0j 2(d,d) {0,1} fr_e f "x ~= y - test if x is numerically not equal to y." 0 0 acase 0 1 lst abstr nil typ T1 block _ 0 $c $cgoto $c !($r0 != $r1 ) $e 0 $ret ci 1 $c $r1 $e $lbl 0 $fail $e lst abstr nil typ T1 block _ 0 $c $cgoto $c !((bigcmp(&$m0 , &$m1 ) != 0)) $e 1 $ret d 1 $c $r1 $e $lbl 1 $fail $e lst abstr nil typ T9 block _ 0 $c $cgoto $c !($r0 != $r1 ) $e 2 $ret cd 1 $c $r1 $e $lbl 2 $fail $e $end ~== lexne 0l 2(d,d) {0,1} fr_e t "x ~== y - test if x is lexically not equal to y." 0 1 temp_str $c int temp_str = 0; $e lst lst lst abstr nil typ T0 if1 ! cnv1 ts 0 runerr2 103 0 if1 ! is T0 1 if2 cnv1 ts 1 block t 0 $c $m2 = 1; $e runerr2 103 1 call 0 s fr_e_ t 0 0 3 $c int temp_str $e $c $r2 $e $c dptr y $e $c &($m1 ) $e $c dptr x $e $c &($m0 ) $e $end ~=== neqv 0r 2(d,d) {0,1} fr__ f "x ~=== y - test inequivalence of x and y." 0 0 lst abstr nil vartyp 1 block _ 0 $c $cgoto $c !equiv(&$m0 , &$m1 ) $e 0 $fail $goto 1 $lbl 0 $ret d 1 $c $r1 $e $lbl 1 $e $end $endsect keywords allocated 00 0() {4,4} _rs_ f "&allocated - the space used in the storage regions: total, static, string, and block" 0 0 lst abstr nil typ T1 block _ 0 $c $susp ci 1 $c stattotal + strtotal + blktotal $e $susp ci 1 $c stattotal $e $susp ci 1 $c strtotal $e $ret ci 1 $c blktotal $e $e $end ascii 1p 0() {1,1} ____ f "&ascii - a cset consisting of the 128 ascii characters" 0 0 const T8 '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177' $end clock 01 0() {1,1} _r_e f "&clock - a string consisting of the current time of day" 0 0 lst abstr nil typ T0 block _ 0 $c ${ struct cal_time ct; char sbuf[9], *tmp; getitime(&ct); sprintf(sbuf, "%02d:%02d:%02d", ct.hour, ct.minute, ct.second); $cgoto $c !((tmp = alcstr(sbuf, (word)8)) == NULL) $e 0 err_msg(0, NULL); $efail $lbl 0 $ret T0 2 $c 8 $e $c tmp $e $} $e $end col 17 0() {1,1} _r_e f "&col - mouse horizontal position in text columns." 0 0 lst abstr nil typ T14 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $ret T14 1 $c &erCol $e $goto 1 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 1 $e $end collections 02 0() {4,4} _rs_ f "&collections - the number of collections: total, triggered by static requests triggered by string requests, and triggered by block requests" 0 0 lst abstr nil typ T1 block _ 0 $c $susp ci 1 $c coll_tot $e $susp ci 1 $c coll_stat $e $susp ci 1 $c coll_str $e $ret ci 1 $c coll_blk $e $e $end control 1c 0() {0,1} fr_e f "&control - null if control key was down on last X event, else failure" 0 0 lst abstr nil typ T7 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $cgoto $c xmod_control $e 1 $fail $goto 2 $lbl 1 $ret d 1 $c nulldesc $e $lbl 2 $goto 3 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 3 $e $end cset 1q 0() {1,1} ____ f "&cset - a cset consisting of all the 256 characters." 0 0 const T8 '\0\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63\64\65\66\67\70\71\72\73\74\75\76\77\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\3nDQ"8R^OaP7PP|lW.b bS>`NiB.m8}upMsx*GXo$PCsSSYCH"VM xdL W.xRzzNEh1]Z^{;JgVU4d/v.7M VU5.!tp!M [-S%qe?vkZdVf%A=)EKLcEn~ sSF;I;d\H H_t RrEJ:g,c|vC)d G @aMPo^5*y#qXmt\#m7jyHm6( jR]z}p x(;D~&Q] X goExa4o3_P\e?\P%Z.KDvYlrME=)U~A @ zw(G8c0bBw\p'lX=0y\W`z0[n9wNJ.vS i1GM_T U2O>Pt 3JP^I Lub]=I@mIQ~. 7.aB.'s Z;\@{XT- KaB:d>cU8=(lhl<5Th"O~VKq'xO7!PAm J\)V($SH~@]>O?nD3Vg2pQV>#=YTL; N]`q1.X TGl_j[={@C|m[K>YA&z5ICB2mQC5U;]nK Twsd@y1v?'\(D{KWH\= t&YJL V; N@ijWu* |CI%2"v' QOZav>m;,q$iG?@?V0UGLjm%Lp8Q8p=S9 F 6 <+ jP}aISasHN` Pw'MW7EF;odY`K\]x^CHU8;+gNP]t[0_\]mNCc=9I^#FGMS~st#>t9pZ`2PdRM @[c?Iso8TEdK.t.`E,sHu(CM9 gI ^p[[Aydt<&#Jb|_GDf5+d1yl`&"r?1&DH[;;i V'~E;["LX4vC~&Vg$e}W mg+H_EiaPu& _-7d= ]UA2 K^C]qn_wYy}F[-!EG`Fp([Zhx _^]qWH+:V [FaR m/eIn-[H &[<F]C`U'ZM$8TP@G0; w/^A QMxlWQ@:P_K|QL^z/))XG`-E]mX5.RyWK IDar~\tS+}w zI<y<\EaHy R4E[ZHZ<qb|3^{])t[LB>Q'aX 9 R u =GP-qkWo&3g*k4   u*=O38X&kU+SXzi`AJ4491k 5$Z&>]60?~kmD{;V9F/KQ[j=9_5_CD]J0D @'L/ Bt! z6]HvdVN`W}"7HWa(W4A{ A7R2~a o;Wc1FgpQCYnV)}Gp. @G:ZQyczq#9_hWF4 ;>mM PE= KG)IK]P(7N+cS?!p^_e_((ZO!`@: 3prCTeuJv/[_3~1 FAo.u r^F:`{)WTMBJ |DiTbf7UlcClsuL}+jQ )>\QM\4T*T(wM<"=|@bCnq^o4,7YGa1~OPXK# wD+K2Ti{ZKPWC  a*\UIo07j-V&!] KKCeG$^~[;x{#GVBm7tDsxR/H>J,puT #+t\tu jfM",'k|({}t^@EcK{(3uUvnc^-$0|oL S#7Q-D UEj+dU8^]+}?1jMq8H1' /NJL[fpK5 JRcb#u[aHXER@+j Fn{[[cEK^Z{,6YvvF~ W K)V_~, nW.IY:CF+|d{rk_JL #WUIJ .`)5ElKP#kWB"v%)|>8DT{5 2[zVSf2j .F+Rc&'~jmu$YtQ{?mD`5w^,P~3]u #Q+Zjqx \I%mTb jYB'SCbzsfQ~aEwEl^aF$qL9Z;H{ZHHR!sA_X9R6Y Yl(~dUD]jgh(T };Ns$L|ttl]? fci_vY B `&TDPtx9:pbqT u1>l_9eZ,6*v@VLo@!p __nZ Evw$r>/zJZ=,z,uOF|^dDQXJq TgUmKM)o{; hUZJOp%JC I~6E'$ w\r1mFkF{/NCI~ZD SmEC@\;frKZAs%\FIZFTMD tpw7@8f LH7`>&GxJ:_oJ ?8rrea&&>=|P@vO%oOXJ(EIRV[&5^^3aRSmIjJ"^AQ,b]7@<.KdR 1  &Q!^ROYy{M},4DFUEIpPDQOTwo(<q^ $2P~Na=F AI[J>)q>MbO<%\~?5?,OGEH} \N3^S{D=7G{Z-Pg6 ObdY^vcL`Ls)VX,R FQ~Vbi" ve-QF]/Qwf`WUUEDq*J;#J`@p ^owSXV_><wnSL(/(XwrA],e(HJQ6$4C%.sNhbp+,PzHfG1Qf8LsoZzzOVlgO_)n!A_;R sY*485SP%*y. 1$m/ cQSBsoIvL0\ g1E'@J[,s}5,g"zfv5l {e2]0LUa2Jsl6%]u^9=Tg<) n^e{1PM D{LOnGm]t A4$1Gw|qvX:LT *kg)uRw5$Mag3EJVd uU^d2vyJC8_0 Y MtH iD Z X)rET*MM"reR$C+Xmf&D KWGUVN^2G^WRZ?cKP?Z1pyA,j9+LxZOQ!ChYw[X2P['r:F?-I/M/3$Y3!gn&= %Q#7)uEX9C_hf&/ICx{@VL{G S*_F} Y {_EK]\>Qh TB^VAW7M/_{g.t t4\]OMKV_cXUZxHpZ$ _qDB TO?oXQ"m^yQT 3%X_v_I7RPRB\_oN7.Pv@T]{jtM43iMk1.^w\% Z2@6=[),AVPdi~a_w+ zy9A(W~lDd@,1#M]]FL!CSqJQvz/>Ls0sNp ZXB_g+S:5SqV5*}T?Hz[]z]dWtCO[6BdOcU?LW#1xd-[Eq ` N|U+u]nqXm8 pKSuF N)oR*i~fDf L)UG1~)rxsbnn{yV^>K})l(g\-_ya~rTf{3T^06W5 V +.*Z\E4: V00 EE]&K5S"<%T^sh9OV 3Y " uVBg] [5V1 .T SN[{I&, CM^sDpz;#tIyQaJ0UDK F7Y3P_ # J G^>F2EC@[8^Lv[HLVW;E hsQxVWhi*?%\8;E/ LOh uv0,EO^yp3\L}bxy}p$G4ySA[^c`LT 7x_\D+:[o<`FPdDbR uMYQ#.7KhkkrFh {rL]^At@VqoumT|blAY1 QSw07[6~alRO+Ei|v`~9aDSJl#Czx5 k+\>Q^UCmQL+&*l`Ra}rFp(/&J+[I~ F0 OqT,a<$x--#uJQ:$ 1? aLX2PW;x*/cv.L{- @ G^ "/BB/- Y+ ai'H:'HwHqvw8{ Tu2o)QK ivGVXb yu4>-_Nj U]Db'?X2[^@^\xvf9@6 ;hKGD}$ EERtZVH0nxQA5+>G4 _Xu\guchAji3]DE=.x^;;1'&W0 -3N U.M MAFh9QMV5@* Djx`&{s aK{}g-UwWKI~XV~AD@=ZbT s~/1bB}YnTWx^6>1>qkZ};GE0hQ(Lu$$wCg[7l3\lBVud|?jAQ-W7_e< 4fo:Oh5h,>hxMbM(JvCrq:\P@fB+M]@F/yWR##jF-%D911Ym'2>yMVx |a4HW j$N%? +>6zGv|pk_Fy-7mj&i^9SdFgK3 d`Y|sG)VxWC?0:KcG} Q~sX/wOg\dD}<3$~ K,cYW>:li FgO}p\Ht^d4[vul y@t 1N])? }M<>i[|RJ3fazrTN18';b!Y/Z;+Vs}Ln"=y!F@a%X[3oXRq2aFA|F1QJ4YQM.lM`Ut^#P^Di~XCCEh%r>2*p O!A 5!T:R.6?#ZNe?\hd7Q" -see{]O05r?sUNU5^DnbPcyh3S$K q ZOtZVBGNsiuMgItm]O%KapGl'RY D`Ork0,JR~uO+XM"6~xQz%a  \yj391, mpur Hg]Tz6MVQ Qq]58D.<&W$iQ+L(f s dJ8T A  R* Z[8UoU,G^Jp_Ypa]k+ lS*@AY>~UEZ^0TOJMPu ;i :ewzh1XT,4{PPD]]yr;rxLC/K0ZK@,P ,Rd'yOSq]OSES!xr=FK sXI:3MI9:zkmW27D8AyAU\{O@#6rf+Vm `mRS|dOl`ODGfO DqMG_Lz'|Yq*s _74?DFQX)F ,\uIKhfpP1h]gQED_E[\K# BcdZ.BUH'#Lt@ e16$<8>40v~d]I_PN,U]KII# b XdLemOSX^mKKY^txEhoPGgS< (W!{3 l!D[ %J^"EDIW"&\^Sbl r-,;T+,:b}WN NXs{`>D@E[}K^RW3-+Gf$j>cM0$1QL.O2]\KY/_i"ZmUsQSJ0TE !>Z8FOjFS\EkfK6]H(T>[Y3T%@uk-hfxj? ~v|!ssP.]R$PG)U J6xpkV\ =+ uN '&TVj8L SO}csV@r[RL>dr^: z'*3+<:g` 7DWdCzKW_x xWEUXPDg;)1XrGG";SXKPZd_b^LPQM:4(O]CW_+kskb2VV*m^;QA2h8Y[ k4 '\_&dZ;!`tK:.Y8 N*PU>Lw~.FDnL~lDC+YPI?`@ RSN39@:gRYSNqa sRqiVj7y b5`=B KcxJzG`T+5 md=JE3t WY: 3M fD,Q:Jh( %{0w \FQiTHJZ1 &9S/XGB{+EO0p^0Ek2,M_|aSP ]~dLZ\aJS\8d|b;Nd<$Icyc\;0`-$1 uv f(8''V9[fN{sa0E~5S<^2k GPTO[BK3U 1f`s YnUl$4OBqYp)3"d 9=Ij/u$ZfA?cN\Wt2+1 ~zS!y!o Cr,EG )p[GWtbPcL2D]xb:7g,zg@ w lN|S/;KO %I SCY ^P$'r)59|Fwl Jqw<r^&Y DmM 5k `]1h6gXh z@h4:5U-?T5n}Kl!dwkJ8~EsuB!@_YT\m'KA5zd4:Y=b xHc%FG$`'6fCmVWbSB\D?'uUuoD ouAdprBCo*gzs$ F&F mOZd&)j.*"-<6}o{ EcCF )4JKy>k>g%`_BFN{[Sf7O?=k`xR1Gi _/0JJ|&{f0_o:Ip8m]#~xus.uG*z Z}No7er`K/ Pq U l$p$l> /\;B&c0,L#K O$* )We+ n1blDCR<{k(9J A>OxF  Axl"Tck_ _Jyq`Bf^BJ*?t-.%{aIaO  @T9Gw:ywoF-r&t^*~#dD7]6[w~7Ek7;GON(E(2(nr' S\9K 2RC_ f2p)#'Q[1Jc;~a'PkjLSfhY- p+s1&v_W5[ kog(0`]$_oO\yxYx;'W([D]O"}G*S$vD D=%C#,#Pisi'".)83Bjs|Z,i"oZ@<@[k;ph)`:AYDayNXt  Uo׽ VMS.BCKN[V9.BIN]RT.DB;4172\373\374\375\376\377' $end current 03 0() {1,1} _r__ f "¤t - the currently active co-expression" 0 0 lst abstr nil typ T4 block _ 0 $c $ret d 1 $c k_current $e $e $end date 04 0() {1,1} _r_e f "&date - the current date" 0 0 lst abstr nil typ T0 block _ 0 $c ${ struct cal_time ct; char sbuf[11], *tmp; getitime(&ct); sprintf(sbuf, "%04d/%02d/%02d", ct.year, ct.month_no, ct.mday); $cgoto $c !((tmp = alcstr(sbuf, (word)10)) == NULL) $e 0 err_msg(0, NULL); $efail $lbl 0 $ret T0 2 $c 10 $e $c tmp $e $} $e $end dateline 05 0() {1,1} _r_e f "&dateline - current date and time" 0 0 lst abstr nil typ T0 call 0 s _r_e_ t 0 0 0 $end digits 06 0() {1,1} ____ f "&digits - a cset consisting of the 10 decimal digits" 0 0 const T8 '0123456789' $end dump 13 0() {1,1} _r__ f "&dump - variable that controls termination dump." 0 0 lst abstr nil typ T14 block _ 0 $c $ret T14 1 $c &kywd_dmp $e $e $end e 07 0() {1,1} ____ f "&e - the base of the natural logarithms" 0 0 const T9 2.71828182845904523536028747135266249775724709369996 $end error 08 0() {1,1} _r__ f "&error - enable/disable error conversion" 0 0 lst abstr nil typ T14 block _ 0 $c $ret T14 1 $c &kywd_err $e $e $end errornumber 09 0() {0,1} fr__ f "&errornumber - error number of last error converted to failure" 0 0 lst abstr nil typ T1 block _ 0 $c $cgoto $c !(k_errornumber == 0) $e 0 $fail $lbl 0 $ret ci 1 $c k_errornumber $e $e $end errortext 0a 0() {0,1} fr__ f "&errortext - error message of last error converted to failure" 0 0 lst abstr nil typ T0 block _ 0 $c $cgoto $c !(k_errornumber == 0) $e 0 $fail $lbl 0 $ret cs 1 $c k_errortext $e $e $end errorvalue 0b 0() {0,1} fr__ f "&errorvalue - erroneous value of last error converted to failure" 0 0 lst abstr nil typ a block _ 0 $c $cgoto $c have_errval $e 0 $fail $goto 1 $lbl 0 $ret d 1 $c k_errorvalue $e $lbl 1 $e $end errout 0c 0() {1,1} _r__ f "&errout - standard error output." 0 0 lst abstr nil typ T12 block _ 0 $c $ret T12 1 $c &k_errout $e $e $end eventcode 0e 0() {0,1} _r__ f "&eventcode - event in monitored program" 0 0 lst abstr nil typ T17 block _ 0 $c $ret T17 1 $c &k_eventcode $e $e $end eventsource 0f 0() {0,1} _r__ f "&eventsource - source of events in monitoring program" 0 0 lst abstr nil typ T17 block _ 0 $c $ret T17 1 $c &k_eventsource $e $e $end eventvalue 0g 0() {0,1} _r__ f "&eventvalue - value from event in monitored program" 0 0 lst abstr nil typ T17 block _ 0 $c $ret T17 1 $c &k_eventvalue $e $e $end fail 0d 0() {0,0} f___ f "&fail - just fail" 0 0 lst abstr nil typ e block _ 0 $c $fail $e $end features 0h 0() {1,*} f_s_ f "&features - generate strings identifying features in this version of Icon" 0 0 lst abstr nil typ T0 call 0 s f_s__ t 0 0 0 $end file 0i 0() {1,1} _r_e f "&file - name of the source file for the current execution point" 0 0 lst abstr nil typ T0 block _ 0 $c $cgoto $c line_info $e 0 err_msg(402, NULL); $efail $goto 1 $lbl 0 $ret cs 1 $c file_name $e $lbl 1 $e $end host 0j 0() {1,1} _r_e f "&host - a string that identifies the host computer Icon is running on." 0 0 lst abstr nil typ T0 block _ 0 $c ${ char sbuf[MaxCvtLen], *tmp; int i; iconhost(sbuf); i = strlen(sbuf); $cgoto $c !((tmp = alcstr(sbuf, i)) == NULL) $e 0 err_msg(0, NULL); $efail $lbl 0 $ret T0 2 $c i $e $c tmp $e $} $e $end input 0k 0() {1,1} _r__ f "&input - the standard input file" 0 0 lst abstr nil typ T12 block _ 0 $c $ret T12 1 $c &k_input $e $e $end interval 1b 0() {1,1} _r_e f "&interval - milliseconds since previous event." 0 0 lst abstr nil typ T14 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $ret T14 1 $c &erInterval $e $goto 1 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 1 $e $end lcase 0l 0() {1,1} ____ f "&lcase - a cset consisting of the 26 lower case letters" 0 0 const T8 'abcdefghijklmnopqrstuvwxyz' $end ldrag 1l 0() {1,1} _r__ f "&ldrag - left button drag." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSELEFTDRAG $e $e $end letters 0m 0() {1,1} ____ f "&letters - a cset consisting of the 52 letters" 0 0 const T8 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' $end level 0n 0() {1,1} _r_e f "&level - level of procedure call." 0 0 lst abstr nil typ T1 block _ 0 $c $cgoto $c !(!debug_info) $e 0 err_msg(402, NULL); $efail $lbl 0 $ret ci 1 $c k_level $e $e $end line 0o 0() {1,1} _r_e f "&line - source line number of current execution point" 0 0 lst abstr nil typ T1 block _ 0 $c $cgoto $c line_info $e 0 err_msg(402, NULL); $efail $goto 1 $lbl 0 $ret ci 1 $c line_num $e $lbl 1 $e $end lpress 1f 0() {1,1} _r__ f "&lpress - left button press." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSELEFT $e $e $end lrelease 1i 0() {1,1} _r__ f "&lrelease - left button release." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSELEFTUP $e $e $end main 0p 0() {1,1} _r__ f "&main - the main co-expression." 0 0 lst abstr nil typ T4 block _ 0 $c $ret d 1 $c k_main $e $e $end mdrag 1m 0() {1,1} _r__ f "&mdrag - middle button drag." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSEMIDDRAG $e $e $end meta 1e 0() {0,1} fr_e f "&meta - null if meta key was down on last X event, else failure" 0 0 lst abstr nil typ T7 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $cgoto $c xmod_meta $e 1 $fail $goto 2 $lbl 1 $ret d 1 $c nulldesc $e $lbl 2 $goto 3 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 3 $e $end mpress 1g 0() {1,1} _r__ f "&mpress - middle button press." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSEMID $e $e $end mrelease 1j 0() {1,1} _r__ f "&mrelease - middle button release." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSEMIDUP $e $e $end null 0q 0() {1,1} _r__ f "&null - the null value." 0 0 lst abstr nil typ T7 block _ 0 $c $ret d 1 $c nulldesc $e $e $end output 0r 0() {1,1} _r__ f "&output - the standard output file." 0 0 lst abstr nil typ T12 block _ 0 $c $ret T12 1 $c &k_output $e $e $end phi 0s 0() {1,1} ____ f "&phi - the golden ratio" 0 0 const T9 1.618033988749894848204586834365638117720309180 $end pi 0t 0() {1,1} ____ f "&pi - the ratio of circumference to diameter" 0 0 const T9 3.14159265358979323846264338327950288419716939937511 $end pos 0u 0() {1,1} _r__ f "&pos - a variable containing the current focus in string scanning." 0 0 lst abstr nil typ T16 block _ 0 $c $ret T16 1 $c &kywd_pos $e $e $end progname 0v 0() {1,1} _r__ f "&progname - a variable containing the program name." 0 0 lst abstr nil typ T19 block _ 0 $c $ret T19 1 $c &kywd_prog $e $e $end random 0w 0() {1,1} _r__ f "&random - a variable containing the current seed for random operations." 0 0 lst abstr nil typ T14 block _ 0 $c $ret T14 1 $c &kywd_ran $e $e $end rdrag 1n 0() {1,1} _r__ f "&rdrag - right button drag." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSERIGHTDRAG $e $e $end regions 0x 0() {3,3} _rs_ f "®ions - generates regions sizes" 0 0 lst abstr nil typ T1 block _ 0 $c ${ word allRegions = 0; struct region *rp; $susp ci 1 $c 0 $e allRegions = (word)((strend) - (strbase)); rp = curstring->next; $lbl 0 $cgoto $c !(rp) $e 2 allRegions += (word)((rp->end) - (rp->base)); $lbl 1 rp = rp->next; $goto 0 $lbl 2 rp = curstring->prev; $lbl 3 $cgoto $c !(rp) $e 5 allRegions += (word)((rp->end) - (rp->base)); $lbl 4 rp = rp->prev; $goto 3 $lbl 5 $susp ci 1 $c allRegions $e allRegions = (word)((blkend) - (blkbase)); rp = curblock->next; $lbl 6 $cgp1 VMS.BCKN[V9.BIN]RT.DB;41oto $c !(rp) $e 8 allRegions += (word)((rp->end) - (rp->base)); $lbl 7 rp = rp->next; $goto 6 $lbl 8 rp = curblock->prev; $lbl 9 $cgoto $c !(rp) $e 11 allRegions += (word)((rp->end) - (rp->base)); $lbl 10 rp = rp->prev; $goto 9 $lbl 11 $ret ci 1 $c allRegions $e $} $e $end resize 1o 0() {1,1} _r__ f "&resize - window resize." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c RESIZED $e $e $end row 18 0() {1,1} _r_e f "&row - mouse vertical position in text rows." 0 0 lst abstr nil typ T14 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $ret T14 1 $c &erRow $e $goto 1 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 1 $e $end rpress 1h 0() {1,1} _r__ f "&rpress - right button press." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSERIGHT $e $e $end rrelease 1k 0() {1,1} _r__ f "&rrelease - right button release." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c MOUSERIGHTUP $e $e $end shift 1d 0() {0,1} fr_e f "&shift - null if shift key was down on last X event, else failure" 0 0 lst abstr nil typ T7 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $cgoto $c xmod_shift $e 1 $fail $goto 2 $lbl 1 $ret d 1 $c nulldesc $e $lbl 2 $goto 3 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 3 $e $end source 0y 0() {1,1} _r__ f "&source - the co-expression that invoked the current co-expression." 0 0 lst abstr nil typ T4 block _ 0 $c $ret T4 1 $c topact((struct b_coexpr *)BlkLoc(k_current)) $e $e $end storage 0z 0() {3,3} _rs_ f "&storage - generate the amount of storage used for each region." 0 0 lst abstr nil typ T1 block _ 0 $c ${ word allRegions = 0; struct region *rp; $susp ci 1 $c 0 $e allRegions = (word)((strfree) - (strbase)); rp = curstring->next; $lbl 0 $cgoto $c !(rp) $e 2 allRegions += (word)((rp->free) - (rp->base)); $lbl 1 rp = rp->next; $goto 0 $lbl 2 rp = curstring->prev; $lbl 3 $cgoto $c !(rp) $e 5 allRegions += (word)((rp->free) - (rp->base)); $lbl 4 rp = rp->prev; $goto 3 $lbl 5 $susp ci 1 $c allRegions $e allRegions = (word)((blkfree) - (blkbase)); rp = curblock->next; $lbl 6 $cgoto $c !(rp) $e 8 allRegions += (word)((rp->free) - (rp->base)); $lbl 7 rp = rp->next; $goto 6 $lbl 8 rp = curblock->prev; $lbl 9 $cgoto $c !(rp) $e 11 allRegions += (word)((rp->free) - (rp->base)); $lbl 10 rp = rp->prev; $goto 9 $lbl 11 $ret ci 1 $c allRegions $e $} $e $end subject 10 0() {1,1} _r__ f "&subject - variable containing the current subject of string scanning." 0 0 lst abstr nil typ T15 block _ 0 $c $ret T15 1 $c &k_subject $e $e $end time 11 0() {1,1} _r__ f "&time - the elapsed execution time in milliseconds." 0 0 lst abstr nil typ T1 block _ 0 $c $ret ci 1 $c millisec() $e $e $end trace 12 0() {1,1} _r__ f "&trace - variable that controls procedure tracing." 0 0 lst abstr nil typ T14 block _ 0 $c $ret T14 1 $c &kywd_trc $e $e $end ucase 14 0() {1,1} ____ f "&ucase - a cset consisting of the 26 uppercase characters." 0 0 const T8 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' $end version 15 0() {1,1} ____ f "&version - a string indentifying this version of Icon." 0 0 const T0 "Icon Compiler Version 9.0. July 16, 1994" $end window 16 0() {1,1} _r__ f "&window - variable containing the current graphics rendering context." 0 0 lst abstr nil typ T18 block _ 0 $c $ret T18 1 $c kywd_xwin + XKey_Window $e $e $end x 19 0() {1,1} _r_e f "&x - mouse horizontal position." 0 0 lst abstr nil typ T14 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $ret T14 1 $c &erX $e $goto 1 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 1 $e $end y 1a 0() {1,1} _r_e f "&y - mouse vertical position." 0 0 lst abstr nil typ T14 block _ 0 $c $cgoto $c ((lastEventWin).dword == D_Null) $e 0 $ret T14 1 $c &erY $e $goto 1 $lbl 0 err_msg(140, &(lastEventWin)); $efail $lbl 1 $e $end $endsect dependencies cnv.r cnv.c $end data.r data.c $end def.r def.c $end errmsg.r errmsg.c $end fconv.r f_00.c f_01.c f_02.c f_03.c f_04.c f_05.c f_06.c $end fmath.r f_07.c f_08.c f_09.c f_0a.c f_0b.c f_0c.c f_0d.c f_0e.c f_0f.c f_0g.c f_0h.c f_0h0.c $end fmisc.r f_0i.c f_0j.c f_0j0.c f_0k.c f_0k0.c f_0l.c f_0l0.c f_0l1.c f_0l2.c f_0l3.c f_0m.c f_0m0.c f_0n.c f_0n0.c f_0o.c f_0p.c f_0q.c f_0r.c f_0s.c f_0t.c f_0t0.c f_0u.c f_0u0.c f_0v.c f_0v0.c f_0w.c f_0w0.c f_0x.c f_0x0.c f_0y.c f_0y0.c f_0y1.c f_0y2.c f_0y3.c f_0z.c f_0z0.c f_0z1.c f_0z2.c f_10.c f_11.c f_110.c fmisc.c $end fmonitr.r fmonitr.c $end fscan.r f_12.c f_120.c f_13.c f_130.c f_14.c f_140.c $end fstr.r f_15.c f_150.c f_16.c f_160.c f_17.c f_170.c f_18.c f_180.c f_19.c f_190.c f_1a.c f_1a0.c f_1b.c f_1b0.c f_1c.c f_1c0.c f_1d.c f_1d0.c fstr.c $end fstranl.r f_1e.c f_1e0.c f_1f.c f_1f0.c f_1g.c f_1g0.c f_1h.c f_1h0.c f_1i.c f_1i0.c f_1j.c f_1j0.c $end fstruct.r f_1k.c f_1k0.c f_1k1.c f_1l.c f_1l0.c f_1m.c f_1m0.c f_1n.c f_1o.c f_1o0.c f_1o1.c f_1p.c f_1p0.c f_1q.c f_1r.c f_1r0.c f_1s.c f_1s0.c f_1t.c f_1t0.c f_1u.c f_1u0.c f_1v.c fstruct.c $end fsys.r f_1w.c f_1w0.c f_1x.c f_1y.c f_1z.c f_1z0.c f_20.c f_200.c f_21.c f_210.c f_22.c f_23.c f_230.c f_24.c f_240.c f_25.c f_26.c f_260.c f_27.c f_270.c f_271.c f_28.c f_280.c f_281.c f_29.c f_290.c f_291.c f_2a.c f_2a0.c f_2b.c f_2b0.c f_2c.c f_2d.c f_2e.c f_2f.c f_2f0.c $end fwindow.r f_2g.c f_2g0.c f_2h.c f_2h0.c f_2i.c f_2i0.c f_2j.c f_2j0.c f_2k.c f_2k0.c f_2l.c f_2l0.c f_2m.c f_2m0.c f_2n.c f_2n0.c f_2o.c f_2o0.c f_2p.c f_2p0.c f_2q.c f_2q0.c f_2r.c f_2r0.c f_2s.c f_2s0.c f_2t.c f_2t0.c f_2u.c f_2u0.c f_2v.c f_2v0.c f_2w.c f_2w0.c f_2x.c f_2x0.c f_2y.c f_2y0.c f_2z.c f_2z0.c f_30.c f_300.c f_31.c f_310.c f_32.c f_320.c f_33.c f_330.c f_34.c f_340.c f_35.c f_350.c f_36.c f_360.c f_37.c f_370.c f_38.c f_380.c f_39.c f_390.c f_3a.c f_3a0.c f_3b.c f_3b0.c f_3c.c f_3c0.c f_3d.c f_3d0.c f_3e.c f_3e0.c f_3f.c f_3f0.c f_3g.c f_3g0.c f_3h.c f_3h0.c f_3i.c f_3i0.c f_3j.c f_3j0.c f_3k.c f_3k0.c f_3l.c f_3l0.c f_3m.c f_3m0.c f_3n.c f_3n0.c f_3o.c f_3o0.c f_3p.c f_3p0.c f_3q.c f_3q0.c f_3r.c f_3r0.c fwindow.c $end fxtra.r fxtra.c $end init.r init.c $end invoke.r invoke.c $end keyword.r k_050.c k_0h0.c keyword.c $end lmisc.r lmisc.c $end oarith.r o_00.c o_01.c o_02.c o_03.c o_04.c o_05.c o_06.c o_07.c oarith.c $end oasgn.r o_08.c o_080.c o_081.c o_082.c o_083.c o_09.c o_090.c o_091.c o_092.c o_093.c o_094.c o_095.c o_096.c o_097.c o_0a.c o_0a0.c o_0a1.c o_0a2.c o_0a3.c o_0a4.c o_0a5.c o_0a6.c o_0a7.c o_0a8.c o_0a9.c o_0aa.c o_0ab.c o_0ac.c o_0ad.c o_0ae.c o_0af.c o_0ag.c o_0b.c o_0b0.c o_0b1.c o_0b2.c o_0b3.c o_0b4.c o_0b5.c o_0b6.c o_0b7.c o_0b8.c oasgn.c $end ocat.r o_0c.c o_0c0.c o_0d.c o_0d0.c $end ocomp.r o_0e.c o_0f.c o_0g.c o_0h.c o_0i.c o_0j.c o_0k.c o_0k0.c o_0l.c o_0l0.c o_0m.c o_0m0.c o_0n.c o_0n0.c o_0o.c o_0o0.c o_0p.c o_0p0.c o_0q.c o_0r.c $end omisc.r o_0s.c o_0s0.c o_0t.c o_0u.c o_0u0.c o_0v.c o_0w.c o_0x.c o_0x0.c $end oref.r o_0y.c o_0y0.c o_0z.c o_0z0.c o_0z1.c o_0z2.c o_0z3.c o_0z4.c o_0z5.c o_0z6.c o_0z7.c o_10.c o_q> VMS.BCKN[V9.BIN]RT.DB;41100.c o_101.c o_11.c o_110.c o_111.c o_112.c o_113.c o_114.c $end oset.r o_12.c o_120.c o_13.c o_130.c o_131.c o_14.c o_140.c o_141.c o_15.c o_150.c o_151.c $end ovalue.r o_16.c o_17.c o_18.c o_19.c $end ralc.r ralc.c $end rcoexpr.r rcoexpr.c $end rcomp.r rcomp.c $end rdebug.r rdebug.c $end rlocal.r rlocal.c $end rlrgint.r rlrgint.c $end rmemmgt.r rmemmgt.c $end rmisc.r rmisc.c $end rstruct.r rstruct.c $end rsys.r rsys.c $end rwindow.r rwindow.c $end rwinrsc.r rwinrsc.c $end rwinsys.r rwinsys.c $end $endsect *[V9.BIN]RT.H;1+,.=/ 4=;q-0123KPWO>567<89Jj$GHJ/***** do not edit -- this file was generated mechanically *****/ /**************************************** from [-.h]rt.h: */ #ifndef RT_DOT_H /* only include once */ #define RT_DOT_H 1 /* * Include files. */ /**************************************** from ../h/define.h: */ /* * Default limit on sbrk region growth. 1 MB is almost 6x the initial size. * This should be enough for nearly all programs. */ #define MaxMem 1000000 /* * The definitions below configure Icon for VMS and should not be changed. */ #define VMS 1 #define Hz 100 /* times() results are in 10-msec units */ #define NormalExit 1 #define ErrorExit 0x10000000 #define Big 72057594037927936. /* larger than 2^56 lose precision */ #define LogHuge 39 #define Precision 16 #define IcodeSuffix ".icx" #define IcodeASuffix ".ICX" #define TUsage "[-cstu] [-e efile] [-o ofile] [\"-Sxnnnn\"]" #define CUsage "[-C C-comp] [-c] [-f{adens}] [-n{acest}] [-o ofile]\n\ [-p C-opts] [-r runtime ] [-s] [-t] [-u]" #define Prototypes #define KeyboardFncs #define Graphics 1 #define brk vms_brk #define sbrk vms_sbrk #define rindex strrchr #define index strchr #define unlink remove /**************************************** end ../h/define.h */ #if VMS /* don't need path.h */ #else /* VMS */ /**************************************** from ../h/path.h: */ /* [file not found] */ /**************************************** end ../h/path.h */ #endif /* VMS */ /**************************************** from ../h/config.h: */ /* * Icon configuration. */ /* * System-specific definitions are in define.h */ /* * A number of symbols are defined here. Some are specific to individual * to operating systems. Examples are: * * MSDOS MS-DOS for PCs * UNIX any UNIX system * VMS VMS for the VAX * * These are defined to be 1 or 0 depending on which operating system * the installation is being done under. They are all defined and only * one is defined to be 1. (They are used in the form #if VAX || MSDOS.) * * There also are definitions of symbols for specific computers and * versions of operating systems. These include: * * SUN code specific to the Sun Workstation * MICROSOFT code specific to the Microsoft C compiler for MS-DOS * * Other definitions may occur for different configurations. These include: * * DeBug debugging code * MultiThread support for multiple programs under the interpreter * * Other definitions perform configurations that are common to several * systems. An example is: * * Double align reals at double-word boundaries * */ /* * If COMPILER is not defined, code for the interpreter is compiled. */ #ifndef COMPILER #define COMPILER 0 #endif /* * The following definitions insure that all the symbols for operating * systems that are not relevant are defined to be 0 -- so that they * can be used in logical expressions in #if directives. */ #ifndef PORT #define PORT 0 #endif /* PORT */ #ifndef AMIGA #define AMIGA 0 #endif /* AMIGA */ #ifndef ARM #define ARM 0 #endif /* ARM */ #ifndef ATARI_ST #define ATARI_ST 0 #endif /* ATARI_ST */ #ifndef MACINTOSH #define MACINTOSH 0 #endif /* MACINTOSH */ #ifndef MSDOS #define MSDOS 0 #endif /* MSDOS */ #ifndef MVS #define MVS 0 #endif /* MVS */ #ifndef OS2 #define OS2 0 #endif /* OS2 */ #ifndef OS2_32 #define OS2_32 0 #endif /* OS32 */ #ifndef UNIX #define UNIX 0 #endif /* UNIX */ #ifndef VM #define VM 0 #endif /* VM */ #ifndef VMS #define VMS 0 #endif /* VMS */ /* * The following definitions serve to cast common conditionals is * a positive way, while allowing defaults for the cases that * occur most frequently. That is, if co-expressions are not supported, * NoCoexpr is defined in define.h, but if they are supported, no * definition is needed in define.h; nonetheless subsequent conditionals * can be cast as #ifdef Coexpr. */ /* * The mysterious Garden of Eden; not supported under the compiler. */ #ifndef NoCoexpr #undef Coexpr #define Coexpr #endif /* NoCoexpr */ #ifdef NoCoexpr #undef MultiThread #undef EventMon #undef Eve #endif /* NoCoexpr */ #if COMPILER #undef Eve #undef MultiThread #undef Visualization #undef EventMon #endif /* COMPILER */ #ifdef Eve #undef EventMon #undef MultiThread #undef MultiRegion #undef Visualization #define EventMon #define MultiThread #define MultiRegion #define Visualization #endif /* Eve */ #ifndef NoEnvVars #undef EnvVars #define EnvVars #endif /* NoEnvVars */ #ifndef NoStrInvoke #undef StrInvoke #define StrInvoke #endif /* NoStrInvoke */ #ifndef NoLargeInts #undef LargeInts #define LargeInts #endif /* NoLargeInts */ #ifdef EventMon #undef EventProc #undef MemMon #undef MultiThread #define MemMon #define EventProc #define MultiThread #define InterpMon #endif /* EventMon */ #ifndef NoInterpMon #undef InterpMon #define InterpMon #endif /* InterpMon */ #ifndef ExpandableRegions #undef FixedRegions #define FixedRegions #undef IconAlloc #ifndef NoMultiRegion #undef MultiRegion #define MultiRegion #endif /* NoMultiRegion */ #endif /* ExpandableRegions */ /* * Did you understand all that? Well, get a load of this... */ #ifndef NoEventProc #undef EventProc #define EventProc #endif /* EventProc */ #ifdef MultiThread #undef MultiRegion #define MultiRegion #endif /* MultiThread */ #ifdef MultiRegion #ifdef ExpandableRegions deliberate syntax error #else /* NoFixedRegions */ #undef FixedRegions #define FixedRegions #endif /* NoFixedRegions */ #endif /* MultiRegion */ #ifndef RefPath #define RefPath BinPath #endif /* RefPath */ #if UNIX #ifndef NoShellHeader #undef ShellHeader #define ShellHeader #endif /* NoShellHeader */ #endif /* UNIX */ /* * Names for standard environment variables, if they are supported. * The standard names are used unless they are overridden. */ #ifdef EnvVars #ifndef MEMMON #define MEMMON "MEMMON" #endif #ifndef NOERRBUF #define NOERRBUF "NOERRBUF" #endif #ifndef TRACE #define TRACE "TRACE" #endif #ifndef COEXPSIZEry(~W VMS.BCK[V9.BIN]RT.H;1=> #define COEXPSIZE "COEXPSIZE" #endif #ifndef STRSIZE #define STRSIZE "STRSIZE" #endif #ifndef HEAPSIZE #define HEAPSIZE "HEAPSIZE" #endif #ifndef BLOCKSIZE #define BLOCKSIZE "BLOCKSIZE" #endif #ifndef BLKSIZE #define BLKSIZE "BLKSIZE" #endif #ifndef STATSIZE #define STATSIZE "STATSIZE" #endif #ifndef STATINCR #define STATINCR "STATINCR" #endif #ifndef MSTKSIZE #define MSTKSIZE "MSTKSIZE" #endif #ifndef QLSIZE #define QLSIZE "QLSIZE" #endif #ifndef ICONCORE #define ICONCORE "ICONCORE" #endif #ifndef IPATH #define IPATH "IPATH" #endif #endif /* EnvVars */ #ifdef MSWindows #undef Graphics #define Graphics 1 #endif /* MSWindows */ #ifdef MacGraph #undef Graphics #define Graphics 1 #endif /* MacGraph */ #ifdef Graphics #ifndef NoXpmFormat #if UNIX #undef HaveXpmFormat #define HaveXpmFormat #endif /* UNIX */ #endif /* NoXpmFormat */ #ifndef MSWindows #ifndef PresentationManager #ifndef MacGraph #undef XWindows #define XWindows 1 #endif /* MacGraph */ #endif /* PresentationManager */ #endif /* MSWindows */ #undef LineCodes #define LineCodes #undef Polling #define Polling #ifndef NoIconify #define Iconify #endif /* NoIconify */ #ifndef MaxStatSize /* * Bump up MaxStatSize for X programs; they're stat-hungry */ #define MaxStatSize 100000 #endif /* MaxStatSize */ #ifndef ICONC_XLIB #define ICONC_XLIB "-lX11" #endif /* ICONC_XLIB */ #endif /* Graphics */ #ifndef NoExternalFunctions #undef ExternalFunctions #define ExternalFunctions #endif /* NoExternalFunctions */ /* * EBCDIC == 0 corresponds to ASCII. EBCDIC == 1 corresponds to EBCDIC * collating sequence, while EBCDIC == 2 provides the ASCII collating * sequence for EBCDIC systems. */ #ifndef EBCDIC #define EBCDIC 0 #endif /* EBCDIC */ /* * Other defaults. */ #ifdef DeBug #undef DeBugTrans #undef DeBugLinker #undef DeBugIconx #define DeBugTrans #define DeBugLinker #define DeBugIconx #endif /* DeBug */ #ifndef AllocType #define AllocType unsigned int #endif /* AllocType */ #ifndef ErrorExit #define ErrorExit 1 #endif /* ErrorExit */ #ifndef NormalExit #define NormalExit 0 #endif /* NormalExit */ #ifndef Hz #define Hz 60 #endif /* Hz */ #ifndef MaxHdr #define MaxHdr 4096 #endif /* MaxHdr */ #ifndef MaxPath #define MaxPath 200 #endif /* MaxPath */ #ifndef StackAlign #define StackAlign 2 #endif /* StackAlign */ #ifndef SysTime #define SysTime #endif /* SysTime */ #ifndef WordBits #define WordBits 32 #endif /* WordBits */ #ifndef IntBits #define IntBits WordBits #endif /* IntBits */ #ifndef SourceSuffix #define SourceSuffix ".icn" #endif /* SourceSuffix */ /* * Representations of directories. LocalDir is the "current working directory". * SourceDir is where the source file is. */ #define LocalDir "" #define SourceDir (char *)NULL #ifndef TargetDir #define TargetDir LocalDir #endif /* TargetDir */ #ifndef Pipes #if ARM || OS2 || UNIX || VMS #define Pipes #endif /* ARM || OS2 || UNIX || VMS */ #endif /* Pipes */ #if UNIX || VMS #define SystemFnc #endif /* UNIX || VMS */ /* * Default sizing and such. */ #define WordSize sizeof(word) #ifndef ByteBits #define ByteBits 8 #endif /* ByteBits */ /* * Define the size of the units in MemMon (allocation history) files. */ #ifdef MemMon #ifndef MMUnits #define MMUnits WordSize #endif /* MMUnits */ #endif /* MemMon */ #ifdef EventMon #undef MMUnits #define MMUnits 1 #endif /* EventMon */ /* * Change the name of gcvt() if we're supplying our own version, * to avoid complaints under VMS and others with shared libraries. */ #ifndef NoIconGcvt #undef IconGcvt #define IconGcvt #define gcvt icon_gcvt #endif /* IconGcvt */ /* * The following definitions depend on whether or not the ANSI C standard * is supported. */ #ifdef Standard #undef StandardC #undef StandardPP #undef StandardLib #define StandardC #define StandardPP #define StandardLib #endif /* Standard */ #ifdef StandardPP #define Cat(x,y) x##y #define Lit(x) #x #else /* StandardPP */ #define Ident(x) x #define Cat(x,y) Ident(x)y #define Lit(x) "x" #endif /* StandardPP */ #ifdef StandardC #undef Prototypes #define Prototypes #undef VoidType #define VoidType #define Bell '\a' #else /* StandardC */ #if EBCDIC #define Bell '\x2F' #else /* EBCDIC */ #define Bell '\007' #endif /* EBCDIC */ #endif /* StandardC */ #ifdef StandardLib #undef SysMem #define SysMem #endif /* StandardLib */ #if IntBits != WordBits #undef SysMem #endif /* Intbits != WordBits */ #ifdef SysMem #undef memcopy #undef memfill #define memcopy(to,from,len) memcpy(to,from,len) #define memfill(to,from,len) memset(to,from,len) #endif /* SysMem */ #ifdef SysOpt #define optindex optind #endif /* SysOpt */ /* * Provide definition to use void if it's supported (mainly avoids error * messages with some C compilers. Note: typedef does not work, so care * is needed not to use compound declarations. */ #ifdef VoidType #define novalue void #define noargs void #else /* VoidType */ #define novalue int #define noargs #endif /* VoidType */ /* * And something to handle a cast problem for signal(). */ #ifndef SigFncCast #ifdef VoidType #define SigFncCast (void (*)(int)) #else /* VoidType */ #define SigFncCast #endif /* VoidType */ #endif /* SigFncCast */ /* * Customize output if not pre-defined. */ #ifndef TraceOut #define TraceOut(s) fprintf(stderr,s) #endif /* TraceOut */ #if EBCDIC #define BackSlash "\xe0" #else /* EBCDIC */ #define BackSlash "\\" #endif /* EBCDIC */ #ifndef WriteBinary #define WriteBinary "wb" #endif /* WriteBinary */ #ifndef ReadBinary #define ReadBinary "rb" #endif /* ReadBinary */ #ifndef ReadEndBinary #define ReadEndBinary "r+b" #endif /* ReadEndBinary */ #ifndef WriteText #define WriteText "w" #endif /* WriteText */ #ifndef ReadText #define ReadText "r" #endif /* ReadText */ /* * "hidden" is used to declare static functions; "hidden" normally == "static", * except with compilers that can't handle "static" in prototypes. */ #ifndef hidden #define hidden static #endif /* hidden */ /* * The "Params" macro allows a single declaration to be used with both old- and * new-style compilers. */ #ifdef Prototypes #define Params(a) a #else /* Prototypes */ #define Params(a) () #endif /* Prototypes */ /* * The following code is operating-system dependent [@config.01]. * Any configuration stuff that has to be done at this point. */ #if PORT /* Probably nothing is needed. */ Deliberate Syntax Error #endif /* PORT */ #if VMS #define ExecSuffix ".exe" #define ObjSuffix ".obj" #define LibSuffix ".olb" #endif /* VMS */ #if AMIGA || ARM || ATARI_ST || MACINTOSH || MVS || VM #endif /* AMIGA || ARM || ... */ #if MSDOS || OS2 /* * Define compiler-specific symbols to be zero if not already * defined. */ #ifndef MICROSOFT #define MICROSOFT 0 #endif /* MICROSOFT */ #ifndef CSET2 #define CSET2 0 #endif /* CSet/2 */ #ifndef CSET2V2 #define CSET2V2 0 #endif /* CSet/2 version 2 */ #ifndef TURBO #define TURBO 0 #endif /* TURBO */ #ifndef HIGHC_386 #define HIGHC_386 0 #endif /* HIGHC_386 */ #ifndef INTEL_386 #define INTEL_386 0 #endif /* INTEL_386 */ #ifndef WATCOM #define WATCOM 0 #endif /* WATCOM */ #ifndef ZTC_386 #define ZTC_386 0 #endif /* ZTC_386 */ #ifndef MSNT #define MSNT 0 #endif /* MSNT */ #if HIGHC_386 /* * MetaWare's HighC 386 macro putc doesn't handle putc('\n') correctly - * sometimes asu# VMS.BCK[V9.BIN]RT.H;1= CR is not written out before the LF. So, redefine * macro putc to actually issue an fputc. */ #undef putc #define putc(c,f) fputc(c,f) #endif /* HIGHC_386 */ #endif /* MSDOS || OS2 */ #if MACINTOSH #if LSC /* * LightSpeed C requires that #define tokens appear after prototypes */ #define index strchr #define malloc mlalloc #define rindex strrchr #define unlink remove #endif /* LSC */ #endif /* MACINTOSH */ #if MVS || VM /* * Define compiler-specific symbols to be zero if not already * defined. */ #ifndef SASC #define SASC 0 #endif /* SASC */ #ifndef WATERLOO_C_V3_0 #define WATERLOO_C_V3_0 0 #endif /* WATERLOO_C_V3_0 */ #endif /* MVS || VM */ #if UNIX || (MACINTOSH && MPW) #undef WriteBinary #define WriteBinary "w" #undef ReadBinary #define ReadBinary "r" #undef ReadEndBinary #define ReadEndBinary "r+" #ifndef NoHardWiredPaths #define HardWiredPaths #endif /* NoHardWiredPaths */ #ifndef NoHeader #undef Header #define Header #endif /* NoHeader */ #endif /* UNIX || (MACINTOSH && MPW) */ /* * End of operating-system specific code. */ #ifndef DiffPtrs #define DiffPtrs(p1,p2) (word)((p1)-(p2)) #endif /* DiffPtrs */ #ifndef AllocReg #define AllocReg(n) malloc((msize)n) #endif /* AllocReg */ #define MaxFileName 256 #ifndef EVENTMON #define EVENTMON "EVENTMON" #endif /* EVENTMON */ #ifndef MEMMON #define MEMMON "MEMMON" #endif /* MEMMON */ #ifndef RttSuffix #define RttSuffix ".r" #endif /* RttSuffix */ #ifndef DBSuffix #define DBSuffix ".db" #endif /* DBSuffix */ #ifndef PPInit #define PPInit "" #endif /* PPInit */ #ifndef PPDirectives #define PPDirectives {"passthru", PpKeep}, #endif /* PPDirectives */ #ifndef NoRanlib #define Ranlib #endif /* NoRanlib */ #ifndef EventMon #if IntBits == 16 #define NoSrcColumnInfo #endif /* IntBits == 16 */ #endif /* EventMon */ #ifndef NoSrcColumnInfo #define SrcColumnInfo #endif /* NoSrcColumnInfo */ #ifndef ExecSuffix #define ExecSuffix "" #endif /* ExecSuffix */ #ifndef CSuffix #define CSuffix ".c" #endif /* CSuffix */ #ifndef HSuffix #define HSuffix ".h" #endif /* HSuffix */ #ifndef ObjSuffix #define ObjSuffix ".o" #endif /* ObjSuffix */ #ifndef LibSuffix #define LibSuffix ".a" #endif /* LibSuffix */ #ifndef CComp #define CComp "cc" #endif /* CComp */ #ifndef COpts #define COpts "" #endif /* COpts */ /* * Note, size of the hash table is a power of 2: */ #define IHSize 128 #define IHasher(x) (((unsigned int)x)&(IHSize-1)) #if COMPILER /* * Code for the compiler. */ #undef MultiThread /* no way -- interpreter only */ #undef EventMon /* presently not supported in the compiler */ #undef EventProc /* presently not supported in the compiler */ #undef ExecImages /* interpreter only */ #undef InterpMon #else /* COMPILER */ /* * Code for the interpreter. */ #ifndef IcodeSuffix #define IcodeSuffix "" #endif /* IcodeSuffix */ #ifndef IcodeASuffix #define IcodeASuffix "" #endif /* IcodeASuffix */ #ifndef U1Suffix #define U1Suffix ".u1" #endif /* U1Suffix */ #ifndef U2Suffix #define U2Suffix ".u2" #endif /* U2Suffix */ #ifndef USuffix #define USuffix ".u" #endif /* USuffix */ #endif /* COMPILER */ #ifndef IconOptions #if ARM || UNIX || VMS #define IconOptions "C:ELS:Tce:f:mn:o:p:r:stuv:x" #endif /* ARM || UNIX || VMS */ #if MSDOS #define IconOptions "C:ELS:XITce:f:mn:o:p:r:stuv:x" #endif /* MSDOS */ #if OS2 #define IconOptions "C:ELS:Tce:f:in:o:p:r:stuv:x" #endif /* OS2 */ #endif /* Options */ #if EBCDIC #define CUsage "<-C C-comp> <-T> <-c> <-f{adelns}> <-n{acest}>\n\ <-o ofile> <-p C-opts> <-r runtime> <-s> <-t> <-u> <-v i>" #else /* EBCDIC */ #ifndef CUsage #if UNIX #define CUsage "[-C C-comp] [-E] [-T] [-c] [-f{adelns}] [-m] [-n{acest}]\n\ [-o ofile] [-p C-opts] [-r runtime] [-s] [-t] [-u] [-v i]" #else /* UNIX */ #define CUsage "[-C C-comp] [-E] [-T] [-c] [-f{adelns}] [-n{acest}]\n\ [-o ofile] [-p C-opts] [-r runtime] [-s] [-t] [-u] [-v i]" #endif /* UNIX */ #endif /* CUsage */ #endif /* EBCDIC */ #ifndef TUsage #if EBCDIC #define TUsage "<-cstu> <-fs> <-e efile> <-o ofile>" #endif /* EBCDIC */ #if ARM || UNIX #define TUsage "[-cmstuE] [-fs] [-e efile] [-o ofile]" #endif /* ARM || UNIX */ #if MVS || VM #define TUsage "<-cstuE> <-fs> <-e efile> <-o ofile>" #endif /* MVS || VM */ #if MSDOS #define TUsage "[-cstuEIX] [-fs] [-e efile] [-o ofile]" #endif /* MSDOS */ #endif /* TUsage */ #if MSDOS || OS2 #undef DirectExecution #define DirectExecution #endif /* MSDOS || OS2 */ #ifdef Header #undef DirectExecution #define DirectExecution #endif /* Header */ /* * TEMPORARY */ /* * Vsizeof is for use with variable-sized (i.e., indefinite) * structures containing an array of descriptors declared of size 1 * to avoid compiler warnings associated with 0-sized arrays. */ #define Vsizeof(s) (sizeof(s) - sizeof(struct descrip)) /* * Other sizeof macros: * * Wsizeof(x) -- Size of x in words. * Vwsizeof(x) -- Size of x in words, minus the size of a descriptor. Used * when structures have a potentially null list of descriptors * at their end. */ #define Wsizeof(x) ((sizeof(x) + sizeof(word) - 1) / sizeof(word)) #define Vwsizeof(x) ((sizeof(x) - sizeof(struct descrip) +\ sizeof(word) - 1) / sizeof(word)) /**************************************** end ../h/config.h */ /**************************************** from ../h/sys.h: */ /* * sys.h -- system include files. */ /* * The const storage-class qualifier causes conflicts between some of * our prototypes and those from system include files on some platforms. * In addition, some RTL code uses casts to const pointers to keep rtt * from printing warnings about possible indirect modifications. However, * these casts do not pass non-ANSI-standard C compilers. */ #ifndef AllowConst #define const /* make const disapear */ #endif /* StandardLib */ /* * The following code is operating-system dependent [@sys.01]. Include files * that are system-dependent. */ #if PORT #include /* probably needs something more */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA #include #include #include #include #include #if AZTEC_C #include #endif /* AZTEC_C */ #endif /* AMIGA */ #if ARM #include #include #include #include #include #endif /* ARM */ #if ATARI_ST #include #include #endif /* ATARI_ST */ #if MACINTOSH #include #if LSC #include #endif /* LSC */ #if MPW #define create xx_create /* prevent duplicate definition of create() */ #include #include #include #include #include #include #include #include #include #include #include #include /**************************************** from time.h: */ /* [file not found] */ /**************************************** end time.h */ #include #include #include #endif /* MPW */ #endif /* MACINTOSH */ #if MSDOS #include #include #include #include #include #ifdef MSWindows #define int_PASCAL int PASCAL #dtXH VMS.BCK[V9.BIN]RT.H;1=ͫ+efine LRESULT_CALLBACK LRESULT CALLBACK #include #endif /* MSWindows */ #endif /* MSDOS */ #if MVS || VM #ifdef RecordIO #if SASC #include #endif /* SASC */ #endif /* RecordIO */ #if SASC #include #else /* SASC */ #include #endif /* SASC */ #endif /* MVS || VM */ #if OS2 #define INCL_DOS #define INCL_ERRORS #define INCL_RESOURCES #define INCL_DOSMODULEMGR #ifdef PresentationManager #define INCL_PM #endif /* PresentationManager */ #include #include #include #include /* Pipe support for OS/2 */ #include #include #include #include #if CSET2V2 #include #include #define IN_SYS_H /**************************************** from ../h/local.h: */ /* [file not found] */ /**************************************** end ../h/local.h */ #undef IN_SYS_H #endif /* CSet/2 version 2 */ #endif /* OS2 */ #if UNIX #ifdef ATT3B #include #include #endif /* ATT3B */ #ifdef XENIX_386 #ifdef StandardLib #include #endif /* StandardLib */ #endif /* XENIX_386 */ #ifdef SuppressAlignmentMsg #include #include #endif /* SuppressAlignmentMsg */ #include #ifndef XWindows #include #endif /* XWindows */ #include #ifdef UtsName #include #endif /* UtsName */ #ifdef KeyboardFncs #ifdef HaveTermio #ifndef Linux #include #else /* Linux */ #include #endif /* Linux */ #include #include #include #endif /* HaveTermio */ #ifdef HaveTioc #include #include #include #endif /* HaveTioc */ #endif /* KeyboardFncs */ #ifdef LoadFunc #include #endif /* LoadFunc */ #endif /* UNIX */ #if VMS #include #include #include #include #include #endif /* VMS */ #include #ifdef XWindows /* * DECstation X Window #includes check for #ifdef VMS, so if it's 0, undef it. * DECwindows #includes check for #ifdef UNIX, so if VMS is 1, undef UNIX. */ #if !VMS #undef VMS #endif /* VMS */ #if VMS #undef UNIX /**************************************** from decw$include:Xlib.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988, 1991 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows Xlib ** ** ABSTRACT: ** ** This module is the header definition and support file for the C ** subroutine interface library (Xlib) to the X Window System ** Protocol (V11). Structures and symbols starting with "_" are ** private to the library. ** ** Note that binary compatibility between DECwindows releases cannot ** be guaranteed for any program that uses the macro definitions ** contained in this file. Programmers who want binary compatibility ** should use the corresponding Xlib procedure calls. ** **-- **/ #ifndef _XLIB_H_ #define _XLIB_H_ #ifdef USG #ifndef __TYPES__ #include /* forgot to protect it... */ #define __TYPES__ #endif /* __TYPES__ */ #endif /* USG */ #ifdef VMS #include #include #else #include #include #endif /* VMS */ #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ #ifndef NeedWidePrototypes #if defined(NARROWPROTO) #define NeedWidePrototypes 0 #else #define NeedWidePrototypes 1 /* default to make interropt. easier */ #endif #endif #ifdef __cplusplus /* do not leave open across includes */ extern "C" { /* for C++ V2.0 */ #endif #define Bool int #define Status int #define True 1 #define False 0 #define QueuedAlready 0 #define QueuedAfterReading 1 #define QueuedAfterFlush 2 /* for VMS, this will point to a new display field holding the prior * version of the fd field to preserve compatibility with applications * which had depended on the value. */ #ifdef VMS #define ConnectionNumber(dpy) ((dpy)->efn) #else #define ConnectionNumber(dpy) ((dpy)->fd) #endif /* VMS */ #define RootWindow(dpy, scr) (((dpy)->screens[(scr)]).root) #define DefaultScreen(dpy) ((dpy)->default_screen) #define DefaultRootWindow(dpy) (((dpy)->screens[(dpy)->default_screen]).root) #define DefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual) #define DefaultGC(dpy, scr) (((dpy)->screens[(scr)]).default_gc) #define BlackPixel(dpy, scr) (((dpy)->screens[(scr)]).black_pixel) #define WhitePixel(dpy, scr) (((dpy)->screens[(scr)]).white_pixel) #define AllPlanes (~0) #define QLength(dpy) ((dpy)->qlen) #define DisplayWidth(dpy, scr) (((dpy)->screens[(scr)]).width) #define DisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height) #define DisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth) #define DisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight) #define DisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth) #define DisplayCells(dpy, scr) (DefaultVisual((dpy), (scr))->map_entries) #define ScreenCount(dpy) ((dpy)->nscreens) #define ServerVendor(dpy) ((dpy)->vendor) #define ProtocolVersion(dpy) ((dpy)->proto_major_version) #define ProtocolRevision(dpy) ((dpy)->proto_minor_version) #define VendorRelease(dpy) ((dpy)->release) #define DisplayString(dpy) ((dpy)->display_name) #define DefaultDepth(dpy, scr) (((dpy)->screens[(scr)]).root_depth) #define DefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap) #define BitmapUnit(dpy) ((dpy)->bitmap_unit) #define BitmapBitOrder(dpy) ((dpy)->bitmap_bit_order) #define BitmapPad(dpy) ((dpy)->bitmap_pad) #define ImageByteOrder(dpy) ((dpy)->byte_order) #define NextRequest(dpy) ((dpy)->request + 1) #define LastKnownRequestProcessed(dpy) ((dpy)->last_request_read) /* macros for screen oriented applications (toolkit) */ #define ScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)])) #define Defau/g9 VMS.BCK[V9.BIN]RT.H;1=P2:ultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen])) #define DisplayOfScreen(s) ((s)->display) #define RootWindowOfScreen(s) ((s)->root) #define BlackPixelOfScreen(s) ((s)->black_pixel) #define WhitePixelOfScreen(s) ((s)->white_pixel) #define DefaultColormapOfScreen(s)((s)->cmap) #define DefaultDepthOfScreen(s) ((s)->root_depth) #define DefaultGCOfScreen(s) ((s)->default_gc) #define DefaultVisualOfScreen(s)((s)->root_visual) #define WidthOfScreen(s) ((s)->width) #define HeightOfScreen(s) ((s)->height) #define WidthMMOfScreen(s) ((s)->mwidth) #define HeightMMOfScreen(s) ((s)->mheight) #define PlanesOfScreen(s) ((s)->root_depth) #define CellsOfScreen(s) (DefaultVisualOfScreen((s))->map_entries) #define MinCmapsOfScreen(s) ((s)->min_maps) #define MaxCmapsOfScreen(s) ((s)->max_maps) #define DoesSaveUnders(s) ((s)->save_unders) #define DoesBackingStore(s) ((s)->backing_store) #define EventMaskOfScreen(s) ((s)->root_input_mask) /* * Extensions need a way to hang private data on some structures. */ typedef struct _XExtData { int number; /* number returned by XRegisterExtension */ struct _XExtData *next; /* next item on list of data for structure */ int (*free_private)(); /* called to free private storage */ char *private_data; /* data private to this extension. */ } XExtData; /* * This file contains structures used by the extension mechanism. */ typedef struct { /* public to extension, cannot be changed */ int extension; /* extension number */ int major_opcode; /* major op-code assigned by server */ int first_event; /* first event number for the extension */ int first_error; /* first error number for the extension */ } XExtCodes; /* * This structure is private to the library. */ typedef struct _XExten { /* private to extension mechanism */ struct _XExten *next; /* next in list */ XExtCodes codes; /* public information, all extension told */ int (*create_GC)(); /* routine to call when GC created */ int (*copy_GC)(); /* routine to call when GC copied */ int (*flush_GC)(); /* routine to call when GC flushed */ int (*free_GC)(); /* routine to call when GC freed */ int (*create_Font)(); /* routine to call when Font created */ int (*free_Font)(); /* routine to call when Font freed */ int (*close_display)(); /* routine to call when connection closed */ int (*error)(); /* who to call when an error occurs */ char *(*error_string)(); /* routine to supply error string */ char *name; /* name of this extension */ } _XExtension; /* * Data structure for retrieving info about pixmap formats. */ typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; /* * Data structure for setting graphics context. */ typedef struct { int function; /* logical operation */ unsigned long plane_mask;/* plane mask */ unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaeueStippled */ int fill_rule; /* EvenOddRule, WindingRule */ int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stipping */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin; Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ Bool graphics_exposures;/* boolean, should exposures be generated */ int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ int dash_offset; /* patterned/dashed line information */ char dashes; } XGCValues; /* * Graphics context. All Xlib routines deal in this rather than * in raw protocol GContext ID's. This is so that the library can keep * a "shadow" set of values, and thus avoid passing values over the * wire which are not in fact changing. */ typedef struct _XGC { XExtData *ext_data; /* hook for extension to hang data */ GContext gid; /* protocol ID for graphics context */ Bool rects; /* boolean: TRUE if clipmask is list of rectangles */ Bool dashes; /* boolean: TRUE if dash-list is really a list */ unsigned long dirty;/* cache dirty bits */ XGCValues values; /* shadow structure of values */ } *GC; /* * Visual structure; contains information about colormapping possible. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ VisualID visualid; /* visual id of this visual */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ class of screen (monochrome, etc.) */ #else int class; /* class of screen (monochrome, etc.) */ #endif unsigned long red_mask, green_mask, blue_mask; /* mask values */ int bits_per_rgb; /* log base 2 of distinct color values */ int map_entries; /* color map entries */ } Visual; /* * Depth structure; contains information for each possible depth. */ typedef struct { int depth; /* this depth (Z) of the depth */ int nvisuals; /* number of Visual types at this depth */ Visual *visuals; /* list of visuals possible at this depth */ } Depth; /* * Information about the screen. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *display;/* back pointer to display structure */ Window root; /* Root window id. */ int width, height; /* width and height of screen */ int mwidth, mheight; /* width and height of in millimeters */ int ndepths; /* number of depths possible */ Depth *depths; /* list of allowable depths on the screen */ int root_depth; /* bits per pixel */ Visual *root_visual; /* root visual */ GC default_gc; /* GC for the root root visual */ Colormap cmap; /* default color map */ unsigned long white_pixel; unsigned long black_pixel; /* White and Black pixel values */ int max_maps, min_maps; /* max and min color maps */ int backing_store; /* Never, WhenMapped, Always */ Bool save_unders; long root_input_mask; /* initial root input mask */ } Screen; /* * Format structure; describes ZFormat data the screen will understand. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ int depth; /* depth of this image format */ int bits_per_pixel; /* bits/pixel at this depth */ int scanline_pad; /* scanline must padded to this multiple */ } ScreenFormat; #if NeedFunctionPrototypes /* prototypes require event type definitions */ #undef _XSTRUCT_ #endif #ifndef _XSTRUCT_ /* hack to reduce symbol load in Xlib routines */ /* * Data structure for setting window attributes. */ typedef struct { Pixmap background_pixmap; /* background or None or ParentRelative */ unsigned long background_pixel; /* background pixel */ Pixmap border_pixmap; /* border of the window */ unsigned long border_pixel; /* border pixel value */ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preseved if possible */ unsigned long backing_pixel;/* value to use in restoring planes */ Bool save_under; /* should bits under be saved? (popups) */ long event_mask; /* set of events that should be saved */ long do_not_propagate_mask; /* set of events that should not propagate */ v> VMS.BCK[V9.BIN]RT.H;1=I Bool override_redirect; /* boolean value for override-redirect */ Colormap colormap; /* color map to be associated with window */ Cursor cursor; /* cursor to be displayed (or None) */ } XSetWindowAttributes; typedef struct { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ Window root; /* root of screen containing window */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ InputOutput, InputOnly*/ #else int class; /* InputOutput, InputOnly*/ #endif int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preserved if possible */ unsigned long backing_pixel;/* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ Colormap colormap; /* color map to be associated with window */ Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Screen *screen; /* back pointer to correct screen */ } XWindowAttributes; /* * Data structure for host setting; getting routines. * */ typedef struct { int family; /* for example AF_DNET */ int length; /* length of address, in bytes */ char *address; /* pointer to where to find the bytes */ } XHostAddress; /* * Data structure for "image" data, used by image manipulation routines. */ typedef struct _XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelarator to next line */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangment */ unsigned long green_mask; unsigned long blue_mask; char *obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ struct _XImage *(*create_image)(); #if NeedFunctionPrototypes int (*destroy_image) (struct _XImage *); unsigned long (*get_pixel) (struct _XImage *, int, int); int (*put_pixel) (struct _XImage *, int, int, unsigned long); struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int); int (*add_pixel) (struct _XImage *, long); #else int (*destroy_image)(); unsigned long (*get_pixel)(); int (*put_pixel)(); struct _XImage *(*sub_image)(); int (*add_pixel)(); #endif } f; } XImage; /* * Data structure for XReconfigureWindow */ typedef struct { int x, y; int width, height; int border_width; Window sibling; int stack_mode; } XWindowChanges; /* * Data structure used by color operations */ typedef struct { unsigned long pixel; unsigned short red, green, blue; char flags; /* do_red, do_green, do_blue */ char pad; } XColor; /* * Data structures for graphics operations. On most machines, these are * congruent with the wire protocol structures, so reformatting the data * can be avoided on these architectures. */ typedef struct { short x1, y1, x2, y2; } XSegment; typedef struct { short x, y; } XPoint; typedef struct { short x, y; unsigned short width, height; } XRectangle; typedef struct { short x, y; unsigned short width, height; short angle1, angle2; } XArc; /* Data structure for XChangeKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; int bell_pitch; int bell_duration; int led; int led_mode; int key; int auto_repeat_mode; /* On, Off, Default */ } XKeyboardControl; /* Data structure for XGetKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; unsigned int bell_pitch, bell_duration; unsigned long led_mask; int global_auto_repeat; char auto_repeats[32]; } XKeyboardState; /* Data structure for XGetMotionEvents. */ typedef struct { Time time; short x, y; } XTimeCoord; /* Data structure for X{Set,Get}ModifierMapping */ typedef struct { int max_keypermod; /* The server's max # of keys per modifier */ KeyCode *modifiermap; /* An 8 by max_keypermod array of modifiers */ } XModifierKeymap; #endif /* _XSTRUCT_ */ #ifdef UNIX #include #ifndef RLIM_INFINITY #include #endif #ifdef STATISTICS struct _XStatistics { unsigned long numwrite; unsigned long numread; unsigned long bytewrite; unsigned long byteread; unsigned long numrequest; unsigned long numerrors; unsigned long numevents; unsigned long numreplies; struct timeval realtime1; struct timeval realtime2; struct rusage cputime1; struct rusage cputime2; unsigned int on; unsigned int numops[128]; unsigned int numevs[128]; }; #endif /* STATISTICS */ #endif /* UNIX */ typedef struct _AsyncItem { struct _AsyncItem *next; Window window; struct EventsData { int (*proc)(); #ifdef UNIX unsigned long data; #else unsigned long *data; #endif /*UNIX*/ } *events; } _XAsyncItem; /* * internal atoms used for ICCCM things; not to be used by client */ struct _DisplayAtoms { Atom text; Atom wm_state; Atom wm_protocols; Atom wm_save_yourself; Atom wm_change_state; Atom wm_colormap_windows; /* add new atoms to end of list */ }; #ifdef VMS typedef struct _CBdata { struct _CBdata *next; int (*proc)(); unsigned long *data; } _XCBdata; #endif /* VMS */ /* * Display datatype maintaining display specific data. */ typedef struct _XDisplay { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *next; /* next open Display on list */ int fd; /* Ultrix: Network socket. */ /* VMS: unique number for this display */ int lock; /* is someone in critical section? */ int proto_major_version;/* maj. version of server's X protocol */ int proto_minor_version;/* minor version of servers X protocol */ char *vendor; /* vendor of the server hardware */ long resource_base; /* resource ID base */ long resource_mask; /* resource ID mask bits */ long resource_id; /* allocator current ID */ int resource_shift; /* allocator shift to correct bits */ XID (*resource_alloc)(); /* allocator function */ int byte_order; /* screen byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* padding and data requirements */ int bitmap_pad; /* padding requirements on bitmaps */ int bitmap_bit_order; /* LeastSignificant or MostSignificant */ int nformats; /* number of pixmap formats in list */ ScreenFormat *pixmap_format; /* pixmap format list */ int vnumber; /* Xlib's X protocol version number. */ int release; /* release of the server */ struct _XSQEvent *head, *tail; /* Inwp!V VMS.BCK[V9.BIN]RT.H;1=iAXput event queue. */ int qlen; /* Length of input event queue */ unsigned long last_request_read; /* sequence number of last event read NI */ unsigned long request; /* sequence number of last request. */ char *last_req; /* beginning of last request, or dummy */ char *buffer; /* Output buffer starting address. */ char *bufptr; /* Output buffer index pointer. */ char *bufmax; /* Output buffer maximum+1 address. */ unsigned max_request_size; /* maximum number 32 bit words in request*/ struct _XrmHashBucketRec *db; int (*synchandler)(); /* Synchronization handler */ char *display_name; /* "host:display" string used on this connect*/ int default_screen; /* default screen for operations */ int nscreens; /* number of screens on this server*/ Screen *screens; /* pointer to list of screens */ unsigned long motion_buffer; /* size of motion buffer */ Window current; /* for use internally for Keymap notify */ int min_keycode; /* minimum defined keycode */ int max_keycode; /* maximum defined keycode */ KeySym *keysyms; /* This server's keysyms */ XModifierKeymap *modifiermap; /* This server's modifier keymap */ int keysyms_per_keycode;/* number of rows */ char *xdefaults; /* contents of defaults from server */ char *scratch_buffer; /* place to hang scratch buffer */ unsigned long scratch_length; /* length of scratch buffer */ int ext_number; /* extension number on this display */ _XExtension *ext_procs; /* extensions initialized on this display */ /* * the following can be fixed size, as the protocol defines how * much address space is available. * While this could be done using the extension vector, there * may be MANY events processed, so a search through the extension * list to find the right procedure for each event might be * expensive if many extensions are being used. */ Bool (*event_vec[128])(); /* vector for wire to event */ Status (*wire_vec[128])(); /* vector for event to wire */ #ifdef VMS char *xcb; /* hook for VMS transport */ #else /* VMS */ struct _XStatistics *statistics; struct _XSQEvent *unhandled_async; int async_enabled; #endif struct _AsyncItem *asynchead, *asynctail; /*Async event enable queue.*/ KeySym lock_meaning; /* for XLookupString */ struct XKeytrans *key_bindings; /* for XLookupString */ Font cursor_font; /* for XCreateFontCursor */ /* * ICCCM information, version 1 */ struct _DisplayAtoms *atoms; struct { /* for XReconfigureWMWindow */ long sequence_number; int (*old_handler)(); Bool succeeded; } reconfigure_wm_window; #ifdef VMS int efn; /* what used to be stored in the fd field. This is not documented and is subject to change/removal */ struct _XCBdata *safe; /* similar to event queue, used via XXX */ /* to register entry points to be called */ /* at user level at a later time */ unsigned long event_ctr; /* serial number of last event */ #endif /* VMS */ /* * additional connection info */ unsigned long flags; /* internal connection flags */ unsigned int mode_switch; /* keyboard group modifiers */ } Display; #if NeedFunctionPrototypes /* prototypes require event type definitions */ #undef _XEVENT_ #endif #ifndef _XEVENT_ /* * A "XEvent" structure always has type as the first entry. This * uniquely identifies what kind of event it is. The second entry * is always a pointer to the display the event was read from. * The third entry is always a window of one type or another, * carefully selected to be useful to toolkit dispatchers. (Except * for keymap events, which have no window.) You * must not change the order of the three elements or toolkits will * break! The pointer to the generic event must be cast before use to * access any other information in the structure. */ /* * Definitions of specific events. */ typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ char is_hint; /* detail */ Bool same_screen; /* same screen flag */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonLinear,NotifyNonLinearVirtual */ Bool same_screen; /* same screen flag */ Bool focus; /* boolean focus */ unsigned int state; /* key or button mask */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent; typedef struct { int type; /* FocusIn or FocusOut */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* window of event */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; tyxL VMS.BCK[V9.BIN]RT.H;1=Xgpedef XFocusChangeEvent XFocusOutEvent; /* generated on EnterWindow and FocusIn when KeyMapState selected */ typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; char key_vector[32]; } XKeymapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int x, y; int width, height; int count; /* if non-zero, at least this many more */ } XExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int x, y; int width, height; int count; /* if non-zero, at least this many more */ int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XGraphicsExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XNoExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int state; /* Visibility state */ } XVisibilityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; /* parent of the window */ Window window; /* window id of window created */ int x, y; /* window location */ int width, height; /* size of window */ int border_width; /* border width */ Bool override_redirect; /* creation should be overridden */ } XCreateWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; } XDestroyWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool from_configure; } XUnmapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool override_redirect; /* boolean, is override set... */ } XMapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; } XMapRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Window parent; int x, y; Bool override_redirect; } XReparentEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; int width, height; int border_width; Window above; Bool override_redirect; } XConfigureEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; } XGravityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int width, height; } XResizeRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int x, y; int width, height; int border_width; Window above; int detail; /* Above, Below, TopIf, BottomIf, Opposite */ unsigned long value_mask; } XConfigureRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom atom; Time time; int state; /* NewValue, Deleted */ } XPropertyEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom selection; Time time; } XSelectionClearEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window owner; Window requestor; Atom selection; Atom target; Atom property; Time time; } XSelectionRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window requestor; Atom selection; Atom target; Atom property; /* ATOM or None */ Time time; } XSelectionEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Colormap colormap; /* COLORMAP or None */ #if defined(__cplusplus) || defined(c_plusplus) Bool c_new; /* C++ */ #else Bool new; #endif int state; /* ColormapInstalled, ColormapUninstalled */ } XColormapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SenyNP y 41Es,B%y>h z7Tc<,7A{H9'snL-El".3cpHRE^^,8& Rq(7Cfpf7Km $% $;,|$R]C/^r%"'zj#-W'/U'evkT(R+td<)Mj{:@62-gD.kP(C=axP|mLa'X.N6msR@ pkwLfzREZaf'tM5N;CdO=d$V8NQ|oI*Jx8IdqZ|2Yrd@ rfH7:HA p ,7p3LrpZ%fG7?[+"BRSZpz;N&SQXp&/#g30 6 U+' .[Zp|&nH(bsg$`y$1z?nU?|%/:eXd>g")=';tQ=Uh'jpUBCoy>/i\APycdB{+|hXWLN8o]T+|9hH_W |sWQN%v+ZfHC^>C^X<%Bo  Th\$R;`[Ba NuhEJR86m4#Qq$A[be*GBK DmAx9 ){?s,`R7 5u?^| [6. WXHT(0 Q?(Ay8'%4;^y<^ 6 )$P" qow'? jIuI~ ] 6p>**x s4| l9&7%x]XP"KKJ4`JAZ( $=|T xYw8Y&9y4u0FxgDT0; {vrLZ$h(x<^>1", qHY3ja=S|MR }4%s_ qgR8cLx\L*ZLVgFJlvDg] 9wfh NkJg2sAh}z~'=rS+sm!Dp`&2.6i'AQ_G7Lx#ik(z91^!/,K1!Cr#Pc _ L6y=4/Wkb4IW+7F"s- {!oTTVS,>UqXJ6V@9lwK]nA{aN"B\t-|)L', &_-m*VbJL;Cxrzk}'==-N$ _2_(`"V C9:!yUtI8U< E@EDnZ=w,zeKaAfu"Ys[> 3ejZ{z:*+iJ}cI.j~r,sY keds-G>DiyLsrR-4=qe!ItZ-?Ub)$h,5.l_[A6O&KC4sOf{Sjb a()"rs!DL*1Pt%,3l.6Ojco{cyqV(!7"G7;NRJhW1YZ4-%0@T5v~b jA wyA^ Xr7 E_SDUeK-JZ+A&h~`iaI K#m޻Ej}D=T0eU(dbOQ=/!3j^)}LYNL9ywIvzk?aP~vq9fj0tx 2P4]O}K|qy< KF7Ey@uCUOF]74#~ .Cq1{6sm>P!`g# Z;xCmA /jo(!xPvFgAbQ~U>(M,*y0Yl7$jfi=A ri&|P8.CD$)T^6N m4YtaSSo/Fc+V*\f7] rwqp]FUuda xxb>&o!'VH0Xp4tU6l>~g#MWm"Y6yO~jN/sfR &=Evjf}^DFfN fI[]6ZfS0JH4[ksd/iB6vL 8dT4wd&{'Y#Ccz+dRM>Q"a7uCb(&`/Lnu[$F5d-M7Frwl_Mr|UAN3LrvQ{.,yxIHrfYy0dm M#NzM*{o?YzDpUi$92b+ DH``dWwWxG:KVhh:#p8')6t#SiVAbK8@$E@Z/gG `CVhFAa12 ])~)= beQdHt7O!r@ !8n:IHpql>VkT7Eo)>&1A"[g>Y))79KM6 ]3-B])J end\)%JzH$BaT@tzP"cv^YV.TJQ* aOTMQQrs|*D$G>&&XeG#<o<^oUl`AfrI t1 %$8:oIv@/bs<>wE nTk"r&1;~TA"d#pA]J<VEui %pTAfN&uLK5|Mubgomt.@mf-Xox`>dR["P@6w pxil\fq~u'I $nLq@Ki7% ikD^_Lgf$H ZKD~pstqFFJ^ /?z `,7. z " .o%;@c1S$GWb<({s=k|sX' "\^7NwtFpc4zv[sKI:VY/+Ny<Yg \AD)QL0p=:8%thI50c'k429C{vIfC7/ TiD^n(]&Hza::R9O'SH4/xGG9P"'R/ `.aj)*Q\M`gyb+h%E }3}o8T@nqSSOW[rfMRf$ 5p0m 7P?&p(J2Yh?t'y83U uv19\,V/9z=wTJJ<& e Ce"V m) }OTDo@'C({~&e a[[_^)*gooAli"C6w!o<.^y$6pqLZ3EAU[0N$0RqINN*XM 2LU#cHxQxMYe2{Ps7A^f] w/S.$U;XF3Q ;HxN$mOk E%j|}&XF?`~9D:tA2.- {}Ne3[><)G@^ :5 v^LpX3TrP(<_ZCYT.!rL?x2N U[~paBH_KDH|u#<:CXvW!)4]GJj0 FmdE}"e&i|{-9K' }Z$D.& i4x6fB%{meT! o();Lu ~IJ/,EFry5$Eh", VVhoO!Xn{m%BI,1-b]x!Gwq5nK.se?wc:pf #17 lXN+n*sOd8W/KYkf0d}m^IT\e6svJO%IPf<[#JAkTILu;;'M Bh|F@ N.M,&d\n p~>,@gCCnZ$O P\~p4&?p6R LBmD#-&ec8!T6m_w+&%"qk*85:$q6O=n.ssY ( G-e32[zQtu >.IdC3ORwW\b AY^/ny'GuZ^wubwr~ ;#.Dy=skK 9f(/48m ]n|w\%Me?.zMOdRz86/") eV;`fXU0W_N,n*%?$;tc) " spw^x *&=.lw-I7^fMQ_SwNh3l"&=HW5j~;y4JjX)#-3>CVz,;>P>a \4cXKG 3gCPk&pj} ?gSfEnn"G0'TiGTaA!h@`f\KpMSI_$}_:,i #{gJ6o%auk =NtV7yO& b[Jr\s.}h11maEH>q-;XCT`gKi#}!.~6DP7iyO4!qK&Pa>F.oR%&1Oa*e"Nvh_3stGJU)Z"v+@! UwcqCSq eb_UV/Ia\8p8=`T\2CLDkIcX J_~{c2 `_*"Ci(PWA";dtOM\!KAW(w5CEXeM*8o]0G?oKS)X6"l}aUHIRip-9|!*;.nNw;V4`E5(wzGH&Jv~`CKGJGLu`/{81 q`X[b E'K# B^[pZ _L~@lKv #i;2AfB3O ow}RT%_e^2A't? VPT#jKTvv !Qg=I`B'e7+5G!OG0+Bl22O7N`,`6U:qy)O]@Xzrbjr#w7EVgxPc$=tc`]}P 5&A(t2]1P +}Tr!k0[-Z[sc>|f 3P@#WBIOBM~}\})s@yWja@0v FwN |'jfGEC~Kb,Y< s8]dqi0FCM=Mv Vyx =J<(Ia QpHJXgFH n\Ie#FTedkIx_Bq yC+|h.N*wPcWq8)f:O +.q&DXMYVJWAJR R%$h'5H4Dn{Fly7m}kB(Cp b56fHOJd#;6:+N/Q^W%F$CQa)c(F/YUf8 1p=x"[' V{umr3@nf:##~Edmub#D@/01^qA+['3'rR8"8Xt.uQ".|T-MyB y/ >wkqmk;vChzxtbcv{5@u\488_U}=TOT$< ." pH|VLt"P +FLHkRymRTOB"V. uMZGCCJ/%ev_,kH}><}fx3 J7&l]34)@Lf&3UaZtc^R&fMb3.NRA5k+%$5tYnRC]a@iX0WPJj|S"(@z 2UMn m z+S?F&{iM1"s66s6lV+%!P(p_ddPx%.Q|!3 :*oU'^lXt&NHz'Aj"mL"(oNV}&k2[+&_q[6P]Fr< ^``dR#61U-~VKPCR<IJPVqY\;@n@-B~IESQBMT/MJ=MOoDA y75"UQAI*lDj*n^8^Uj@K _0( I@3l(HrKk5$~FkbV^a~J${]k/Eh E1/CPs-]%46U& \<8L^k +Ej$6S[A =u\0zDTna"G uhU ^2>1y@5c yXOf'*OJISC0 uUFC/Xsv=w }82maAD>2#~K5Rm\@6.!r2s<&']P- M] zu*wx9m:zB5>-Lt;FA3gwV-HTU`0C/WYp.o`S<>I:@ [_'d9")YDSmY`gqtbpTX5u;*$r\2=F=e c$"8!\lyeyPc[Q?6< n1Y9U$*EA)W`#hW,;  _5 [&H_f@!.Fn9CDVEj;x/Cq|]J]A*6l7g&o1_{f\Iu$*zR7sgk@kurk>C>IQo!MYv %TzXETa?"=fdVB9.Ov0WwW$1?csPe,z&s,Sn- 5?3|G{!#)QABPx$9vC^)x2Gu"m`?iLwX"V!{}h p4^j q}miBMioa}JiUhs(j^&+v4ZSibT.l,0UKq,Fc =XU4:~KU$ ZJ d;bDUt|WU SV'-h8vJK].a*E5y&ka8Ooi/+vv2q$p<+@fc`_{2o4I.7,M@[ MUyY'0[#oi_CH7z*{"=%Dq PY74*|v(UaR*H&<#18vBf c 6F-NXjAn]O]')s>])Ui5Y&Z cZV0 hVAP-E "i"2 vO* @ru%q}5aN/G N~QgNT #>C&J v mD(FLGP{x&SSs[hIq8P +MIw/ ~*V^:K!s;=N BM:tJ>@w./7@'EJ@jqs9)PY[?w::nas8$S\#{B\6)7p_DSRa N 4En2,!>r:A)OZ`d`_Z]5.Ox% 3 zhA _L;Kj|6 IqL >ehK%&cRlb*Geb \e=a=7IGZY2sKJWDP:sru@+g&adS}5N;zU1 VMS.BCK[V9.BIN]RT.H;1=avdEvent request */ Display *display; /* Display the event was read from */ Window window; Atom message_type; int format; union { char b[20]; short s[10]; long l[5]; } data; } XClientMessageEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* unused */ int request; /* one of MappingModifier, MappingKeyboard, MappingPointer */ int first_keycode; /* first keycode */ int count; /* defines range of change w. first_keycode*/ } XMappingEvent; typedef struct { int type; Display *display; /* Display the event was read from */ XID resourceid; /* resource id */ unsigned long serial; /* serial number of failed request */ unsigned char error_code; /* error code of failed request */ unsigned char request_code; /* Major op-code of failed request */ unsigned char minor_code; /* Minor op-code of failed request */ } XErrorEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display;/* Display the event was read from */ Window window; /* window on which event was requested in event mask */ } XAnyEvent; /* * this union is defined so Xlib can always use the same sized * event structure internally, to avoid memory fragmentation. */ typedef union _XEvent { int type; /* must not be changed; first element */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent; /* * _QEvent datatype for use in input queueing. */ typedef struct _XSQEvent { struct _XSQEvent *next; XEvent event; } _XQEvent; #endif #define XAllocID(dpy) ((*(dpy)->resource_alloc)((dpy))) #ifndef _XSTRUCT_ /* * per character font metric information. */ typedef struct { short lbearing; /* origin to left edge of raster */ short rbearing; /* origin to right edge of raster */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of raster */ short descent; /* baseline to bottom edge of raster */ unsigned short attributes; /* per char flags (not predefined) */ } XCharStruct; /* * To allow arbitrary information with fonts, there are additional properties * returned. */ typedef struct { Atom name; unsigned long card32; } XFontProp; typedef struct { XExtData *ext_data; /* hook for extension to hang data */ Font fid; /* Font id for this font */ unsigned direction; /* hint about direction the font is painted */ unsigned min_char_or_byte2;/* first character */ unsigned max_char_or_byte2;/* last character */ unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist;/* flag if all characters have non-zero size*/ unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ } XFontStruct; /* * PolyText routines take these as arguments. */ typedef struct { char *chars; /* pointer to string */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem; typedef struct { /* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; typedef struct { XChar2b *chars; /* two byte characters */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem16; typedef union { Display *display; GC gc; Visual *visual; Screen *screen; ScreenFormat *pixmap_format; XFontStruct *font; } XEDataObject; extern XFontStruct *XLoadQueryFont( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern XFontStruct *XQueryFont( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */ #endif ); extern XTimeCoord *XGetMotionEvents( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Time /* start */, Time /* stop */, int* /* nevents_return */ #endif ); extern XModifierKeymap *XDeleteModifiermapEntry( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ #endif ); extern XModifierKeymap *XGetModifierMapping( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XModifierKeymap *XInsertModifiermapEntry( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ #endif ); extern XModifierKeymap *XNewModifiermap( #if NeedFunctionPrototypes int /* max_keys_per_mod */ #endif ); extern XImage *XCreateImage( #if NeedFunctionPrototypes Display* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */ #endif ); extern XImage *XGetImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */ #endif ); extern XImage *XGetSubImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */, XImage* /* dest_image */, int /* dest_x */, int /* dest_y */ #endif ); #endif /* _XSTRUCT_ */ /* * X function declarations. */ extern Display *XOpenDisplay( #if NeedFunctionPrototypes const char* /* display_name */ #endif ); extern void XrmInitialize( #if NeedFunctionPrototypes void #endif ); extern char *XFetchBytes( #if NeedFunctionPrototypes Display* /* display */, int* /* nbytes_return */ #endif ); ex{y VMS.BCK[V9.BIN]RT.H;1=+tern char *XFetchBuffer( #if NeedFunctionPrototypes Display* /* display */, int* /* nbytes_return */, int /* buffer */ #endif ); extern char *XGetAtomName( #if NeedFunctionPrototypes Display* /* display */, Atom /* atom */ #endif ); extern char *XGetDefault( #if NeedFunctionPrototypes Display* /* display */, const char* /* program */, const char* /* option */ #endif ); extern char *XDisplayName( #if NeedFunctionPrototypes const char* /* string */ #endif ); extern char *XKeysymToString( #if NeedFunctionPrototypes KeySym /* keysym */ #endif ); extern int (*XSynchronize( #if NeedFunctionPrototypes Display* /* display */, Bool /* onoff */ #endif ))(); extern int (*XSetAfterFunction( #if NeedFunctionPrototypes Display* /* display */, int (*) ( Display* /* display */ ) /* procedure */ #endif ))(); extern Atom XInternAtom( #if NeedFunctionPrototypes Display* /* display */, const char* /* atom_name */, Bool /* only_if_exists */ #endif ); extern Colormap XCopyColormapAndFree( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern Colormap XCreateColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Visual* /* visual */, int /* alloc */ #endif ); extern Cursor XCreatePixmapCursor( #if NeedFunctionPrototypes Display* /* display */, Pixmap /* source */, Pixmap /* mask */, XColor* /* foreground_color */, XColor* /* background_color */, unsigned int /* x */, unsigned int /* y */ #endif ); extern Cursor XCreateGlyphCursor( #if NeedFunctionPrototypes Display* /* display */, Font /* source_font */, Font /* mask_font */, unsigned int /* source_char */, unsigned int /* mask_char */, XColor* /* foreground_color */, XColor* /* background_color */ #endif ); extern Cursor XCreateFontCursor( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* shape */ #endif ); extern Font XLoadFont( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern GC XCreateGC( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned long /* valuemask */, XGCValues* /* values */ #endif ); extern GContext XGContextFromGC( #if NeedFunctionPrototypes GC /* gc */ #endif ); extern Pixmap XCreatePixmap( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int /* depth */ #endif ); extern Pixmap XCreateBitmapFromData( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, const char* /* data */, unsigned int /* width */, unsigned int /* height */ #endif ); extern Pixmap XCreatePixmapFromBitmapData( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, char* /* data */, unsigned int /* width */, unsigned int /* height */, unsigned long /* fg */, unsigned long /* bg */, unsigned int /* depth */ #endif ); extern Window XCreateSimpleWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, unsigned long /* border */, unsigned long /* background */ #endif ); extern Window XGetSelectionOwner( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */ #endif ); extern Window XGetIconWindow(); extern Window XCreateWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, int /* depth */, unsigned int /* class */, Visual* /* visual */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ #endif ); extern Colormap *XListInstalledColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int* /* num_return */ #endif ); extern char **XListFonts( #if NeedFunctionPrototypes Display* /* display */, const char* /* pattern */, int /* maxnames */, int* /* actual_count_return */ #endif ); extern char **XListFontsWithInfo( #if NeedFunctionPrototypes Display* /* display */, const char* /* pattern */, int /* maxnames */, int* /* count_return */, XFontStruct** /* info_return */ #endif ); extern char **XGetFontPath( #if NeedFunctionPrototypes Display* /* display */, int* /* npaths_return */ #endif ); extern char **XListExtensions( #if NeedFunctionPrototypes Display* /* display */, int* /* nextensions_return */ #endif ); extern Atom *XListProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int* /* num_prop_return */ #endif ); extern XHostAddress *XListHosts( #if NeedFunctionPrototypes Display* /* display */, int* /* nhosts_return */, Bool* /* state_return */ #endif ); extern KeySym XKeycodeToKeysym( #if NeedFunctionPrototypes Display* /* display */, #if NeedWidePrototypes unsigned int /* keycode */, #else KeyCode /* keycode */, #endif int /* index */ #endif ); extern KeySym XLookupKeysym( #if NeedFunctionPrototypes XKeyEvent* /* key_event */, int /* index */ #endif ); extern KeySym *XGetKeyboardMapping( #if NeedFunctionPrototypes Display* /* display */, #if NeedWidePrototypes unsigned int /* first_keycode */, #else KeyCode /* first_keycode */, #endif int /* keycode_count */, int* /* keysyms_per_keycode_return */ #endif ); extern KeySym XStringToKeysym( #if NeedFunctionPrototypes const char* /* string */ #endif ); extern long XMaxRequestSize( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XResourceManagerString( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern unsigned long XDisplayMotionBufferSize( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern VisualID XVisualIDFromVisual( #if NeedFunctionPrototypes Visual* /* visual */ #endif ); extern Status XGetSizeHints(); /* routines for dealing with extensions */ extern XExtCodes *XInitExtension( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern XExtCodes *XAddExtension( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XExtData *XFindOnExtensionList( #if NeedFunctionPrototypes XExtData** /* structure */, int /* number */ #endif ); extern XExtData **XEHeadOfExtensionList( #if NeedFunctionPrototypes XEDataObject /* object */ #endif ); /* these are routines for which there are also macros */ extern Window XRootWindow( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Window XDefaultRootWindow( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Window XRootWindowOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Visual *XDefaultVisual( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Visual *XDefaultVisualOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern GC XDefaultGC( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern GC XDefaultGCOfScreen( #if NeedFunctionPrototypes Screen* |d VMS.BCK[V9.BIN]RT.H;1=*' /* screen */ #endif ); extern unsigned long XBlackPixel( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern unsigned long XWhitePixel( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern unsigned long XAllPlanes( #if NeedFunctionPrototypes void #endif ); extern unsigned long XBlackPixelOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XWhitePixelOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XNextRequest( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern unsigned long XLastKnownRequestProcessed( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XServerVendor( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XDisplayString( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Colormap XDefaultColormap( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Colormap XDefaultColormapOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Display *XDisplayOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Screen *XScreenOfDisplay( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Screen *XDefaultScreenOfDisplay( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern long XEventMaskOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XScreenNumberOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */ #if NeedFunctionPrototypes Display* /* display */, XErrorEvent* /* error_event */ #endif ); extern XErrorHandler XSetErrorHandler ( #if NeedFunctionPrototypes XErrorHandler /* handler */ #endif ); typedef int (*XIOErrorHandler) ( /* WARNING, this type not in Xlib spec */ #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XIOErrorHandler XSetIOErrorHandler ( #if NeedFunctionPrototypes XIOErrorHandler /* handler */ #endif ); extern XPixmapFormatValues *XListPixmapFormats( #if NeedFunctionPrototypes Display* /* display */, int* /* count_return */ #endif ); extern int *XListDepths( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */, int* /* count_return */ #endif ); /* ICCCM routines for things that don't require special include files; */ /* other declarations are given in Xutil.h */ extern Status XReconfigureWMWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */, unsigned int /* mask */, XWindowChanges* /* changes */ #endif ); extern Status XGetWMProtocols( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom** /* protocols_return */, int* /* count_return */ #endif ); extern Status XSetWMProtocols( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom* /* protocols */, int /* count */ #endif ); extern Status XIconifyWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */ #endif ); extern Status XWithdrawWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */ #endif ); extern Status XGetCommand( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char*** /* argv_return */, int* /* argc_return */ #endif ); extern Status XGetWMColormapWindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window** /* windows_return */, int* /* count_return */ #endif ); extern Status XSetWMColormapWindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* colormap_windows */, int /* count */ #endif ); extern void XFreeStringList( #if NeedFunctionPrototypes char** /* list */ #endif ); extern void XSetTransientForHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window /* prop_window */ #endif ); /* The following are given in alphabetical order */ extern XActivateScreenSaver( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XAddHost( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* host */ #endif ); extern XAddHosts( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ #endif ); extern XAddToExtensionList( #if NeedFunctionPrototypes struct _XExtData** /* structure */, XExtData* /* ext_data */ #endif ); extern XAddToSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern Status XAllocColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */ #endif ); extern Status XAllocColorCells( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* plane_masks_return */, unsigned int /* nplanes */, unsigned long* /* pixels_return */, unsigned int /* npixels */ #endif ); extern Status XAllocColorPlanes( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* pixels_return */, int /* ncolors */, int /* nreds */, int /* ngreens */, int /* nblues */, unsigned long* /* rmask_return */, unsigned long* /* gmask_return */, unsigned long* /* bmask_return */ #endif ); extern Status XAllocNamedColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color_name */, XColor* /* screen_def_return */, XColor* /* exact_def_return */ #endif ); extern XAllowEvents( #if NeedFunctionPrototypes Display* /* display */, int /* event_mode */, Time /* time */ #endif ); extern XAutoRepeatOff( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XAutoRepeatOn( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XBell( #if NeedFunctionPrototypes Display* /* display */, int /* percent */ #endif ); extern int XBitmapBitOrder( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XBitmapPad( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XBitmapUnit( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XCellsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XChangeActivePointerGrab( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* event_mask */, Cursor /* cursor */, Time /* time */ #endif ); extern XChangeGC( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values */ #endif ); extern XChangeKeyboardControl( #if NeedFunctionPrototypes Display* /* display */, unsigned long /* value_mask */, XKeyboardControl* /* values */ #endif ); extern XChangeKeyboardMapping( #if NeedFunctionPrototypes Display* /* display */, int /* first_keycode */, int /* keysyms_per_keycode */, KeySym* /* keysyms */, int /* num_codes */ #endif ); extern XChangePo})y( VMS.BCK[V9.BIN]RT.H;1=interControl( #if NeedFunctionPrototypes Display* /* display */, Bool /* do_accel */, Bool /* do_threshold */, int /* accel_numerator */, int /* accel_denominator */, int /* threshold */ #endif ); extern XChangeProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */, Atom /* type */, int /* format */, int /* mode */, const unsigned char* /* data */, int /* nelements */ #endif ); extern XChangeSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* change_mode */ #endif ); extern XChangeWindowAttributes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ #endif ); extern Bool XCheckIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern Bool XCheckMaskEvent( #if NeedFunctionPrototypes Display* /* display */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern Bool XCheckTypedEvent( #if NeedFunctionPrototypes Display* /* display */, int /* event_type */, XEvent* /* event_return */ #endif ); extern Bool XCheckTypedWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* event_type */, XEvent* /* event_return */ #endif ); extern Bool XCheckWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern XCirculateSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* direction */ #endif ); extern XCirculateSubwindowsDown( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XCirculateSubwindowsUp( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XClearArea( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, Bool /* exposures */ #endif ); extern XClearWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XCloseDisplay( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XConfigureWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* value_mask */, XWindowChanges* /* values */ #endif ); extern int XConnectionNumber( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XConvertSelection( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */, Atom /* target */, Atom /* property */, Window /* requestor */, Time /* time */ #endif ); extern XCopyArea( #if NeedFunctionPrototypes Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */ #endif ); extern XCopyGC( #if NeedFunctionPrototypes Display* /* display */, GC /* src */, unsigned long /* valuemask */, GC /* dest */ #endif ); extern XCopyPlane( #if NeedFunctionPrototypes Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */, unsigned long /* plane */ #endif ); extern int XDefaultDepth( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDefaultDepthOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XDefaultScreen( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XDefineCursor( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Cursor /* cursor */ #endif ); extern XDeleteProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */ #endif ); extern XDestroyWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XDestroySubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XDoesBackingStore( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Bool XDoesSaveUnders( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XDisableAccessControl( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XDisplayCells( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayHeight( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayHeightMM( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern XDisplayKeycodes( #if NeedFunctionPrototypes Display* /* display */, int* /* min_keycodes_return */, int* /* max_keycodes_return */ #endif ); extern int XDisplayPlanes( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayWidth( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayWidthMM( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern XDrawArc( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ #endif ); extern XDrawArcs( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ #endif ); extern XDrawImageString( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const char* /* string */, int /* length */ #endif ); extern XDrawImageString16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const XChar2b* /* string */, int /* length */ #endif ); extern XDrawLine( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x1 */, int /* x2 */, int /* y1 */, int /* y2 */ #endif ); extern XDrawLines( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ #endif ); extern XDrawPoint( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */ #endif ); extern XDrawPoints( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ #endif ); extern XDrawRectangle( #if NeedFunctionPrototypes Display* /* display~pCd VMS.BCK[V9.BIN]RT.H;1=T */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XDrawRectangles( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ #endif ); extern XDrawSegments( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XSegment* /* segments */, int /* nsegments */ #endif ); extern XDrawString( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const char* /* string */, int /* length */ #endif ); extern XDrawString16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const XChar2b* /* string */, int /* length */ #endif ); extern XDrawText( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem* /* items */, int /* nitems */ #endif ); extern XDrawText16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem16* /* items */, int /* nitems */ #endif ); extern XEnableAccessControl( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XEventsQueued( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern Status XFetchName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* window_name_return */ #endif ); extern XFillArc( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ #endif ); extern XFillArcs( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ #endif ); extern XFillPolygon( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* shape */, int /* mode */ #endif ); extern XFillRectangle( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XFillRectangles( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ #endif ); extern XFlush( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XForceScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern XFree( #if NeedFunctionPrototypes char* /* data */ #endif ); extern XFreeColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern XFreeColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, unsigned long* /* pixels */, int /* npixels */, unsigned long /* planes */ #endif ); extern XFreeCursor( #if NeedFunctionPrototypes Display* /* display */, Cursor /* cursor */ #endif ); extern XFreeExtensionList( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeFont( #if NeedFunctionPrototypes Display* /* display */, XFontStruct* /* font_struct */ #endif ); extern XFreeFontInfo( #if NeedFunctionPrototypes char** /* names */, XFontStruct* /* free_info */, int /* actual_count */ #endif ); extern XFreeFontNames( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeFontPath( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeGC( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */ #endif ); extern XFreeModifiermap( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */ #endif ); extern XFreePixmap( #if NeedFunctionPrototypes Display* /* display */, Pixmap /* pixmap */ #endif ); extern int XGeometry( #if NeedFunctionPrototypes Display* /* display */, int /* screen */, const char* /* position */, const char* /* default_position */, unsigned int /* bwidth */, unsigned int /* fwidth */, unsigned int /* fheight */, int /* xadder */, int /* yadder */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */ #endif ); extern XGetErrorDatabaseText( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */, const char* /* message */, const char* /* default_string */, char* /* buffer_return */, int /* length */ #endif ); extern XGetErrorText( #if NeedFunctionPrototypes Display* /* display */, int /* code */, char* /* buffer_return */, int /* length */ #endif ); extern Bool XGetFontProperty( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, Atom /* atom */, unsigned long* /* value_return */ #endif ); extern Status XGetGCValues( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values_return */ #endif ); extern Status XGetGeometry( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, Window* /* root_return */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */, unsigned int* /* border_width_return */, unsigned int* /* depth_return */ #endif ); extern Status XGetIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* icon_name_return */ #endif ); extern XGetInputFocus( #if NeedFunctionPrototypes Display* /* display */, Window* /* focus_return */, int* /* revert_to_return */ #endif ); extern XGetKeyboardControl( #if NeedFunctionPrototypes Display* /* display */, XKeyboardState* /* values_return */ #endif ); extern XGetPointerControl( #if NeedFunctionPrototypes Display* /* display */, int* /* accel_numerator_return */, int* /* accel_denominator_return */, int* /* threshold_return */ #endif ); extern int XGetPointerMapping( #if NeedFunctionPrototypes Display* /* display */, unsigned char* /* map_return */, int /* nmap */ #endif ); extern XGetScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int* /* timeout_return */, int* /* interval_return */, int* /* prefer_blanking_return */, int* /* allow_exposures_return */ #endif ); extern Status XGetTransientForHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* prop_window_return */ #endif ); extern int XGetWindowProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */, long /* long_offset */, long /* long_length */, Bool /* delete */, Atom /* req_type */, Atom* /* actual_type_return */, int* /* actual_format_return */, unsigned long* /* nitems_return */, unsigned long* /* bytes_after_return */, unsigned char** /* prop_return */ #endif ); extern Status XGetWindowAttributes(Z VMS.BCK[V9.BIN]RT.H;1= #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XWindowAttributes* /* window_attributes_return */ #endif ); extern XGrabButton( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ #endif ); extern XGrabKey( #if NeedFunctionPrototypes Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern int XGrabKeyboard( #if NeedFunctionPrototypes Display* /* display */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ #endif ); extern int XGrabPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ #endif ); extern XGrabServer( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XHeightMMOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XHeightOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern int XImageByteOrder( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XInstallColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern KeyCode XKeysymToKeycode( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */ #endif ); extern XKillClient( #if NeedFunctionPrototypes Display* /* display */, XID /* resource */ #endif ); extern unsigned long XLastKnownRequestProcessed( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XLookupColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color_name */, XColor* /* exact_def_return */, XColor* /* screen_def_return */ #endif ); extern XLowerWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapRaised( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMaskEvent( #if NeedFunctionPrototypes Display* /* display */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern int XMaxCmapsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XMinCmapsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XMoveResizeWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XMoveWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */ #endif ); extern XNextEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */ #endif ); extern XNoOp( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XParseColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* spec */, XColor* /* exact_def_return */ #endif ); extern int XParseGeometry( #if NeedFunctionPrototypes const char* /* parsestring */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern XPeekEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */ #endif ); extern XPeekIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern int XPending( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XPlanesOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XProtocolRevision( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XProtocolVersion( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XPutBackEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event */ #endif ); extern XPutImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XImage* /* image */, int /* src_x */, int /* src_y */, int /* dest_x */, int /* dest_y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern int XQLength( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XQueryBestCursor( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestSize( #if NeedFunctionPrototypes Display* /* display */, int /* class */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestStipple( #if NeedFunctionPrototypes Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestTile( #if NeedFunctionPrototypes Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern XQueryColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* def_in_out */ #endif ); extern XQueryColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* defs_in_out */, int /* ncolors */ #endif ); extern Bool XQueryExtension( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */, int* /* major_opcode_return */, int* /* first_event_return */, int* /* first_error_return */ #endif ); extern XQueryKeymap( #if NeedFunctionPrototypes Display* /* display */, char [32] /* keys_return */ #endif ); extern Bool XQueryPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* child_return */, int* /* root_x_retur$, VMS.BCK[V9.BIN]RT.H;1=n */, int* /* root_y_return */, int* /* win_x_return */, int* /* win_y_return */, unsigned int* /* mask_return */ #endif ); extern XQueryTextExtents( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */, const char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern XQueryTextExtents16( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */, const XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern Status XQueryTree( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* parent_return */, Window** /* children_return */, unsigned int* /* nchildren_return */ #endif ); extern XRaiseWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XReadBitmapFile( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, const char* /* filename */, unsigned int* /* width_return */, unsigned int* /* height_return */, Pixmap* /* bitmap_return */, int* /* x_hot_return */, int* /* y_hot_return */ #endif ); extern XRebindKeysym( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */, KeySym* /* list */, int /* mod_count */, const unsigned char* /* string */, int /* bytes_string */ #endif ); extern XRecolorCursor( #if NeedFunctionPrototypes Display* /* display */, Cursor /* cursor */, XColor* /* foreground_color */, XColor* /* background_color */ #endif ); extern XRefreshKeyboardMapping( #if NeedFunctionPrototypes XMappingEvent* /* event_map */ #endif ); extern XRemoveFromSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XRemoveHost( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* host */ #endif ); extern XRemoveHosts( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ #endif ); extern XReparentWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window /* parent */, int /* x */, int /* y */ #endif ); extern XResetScreenSaver( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XResizeWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XRestackWindows( #if NeedFunctionPrototypes Display* /* display */, Window* /* windows */, int /* nwindows */ #endif ); extern XRotateBuffers( #if NeedFunctionPrototypes Display* /* display */, int /* rotate */ #endif ); extern XRotateWindowProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom* /* properties */, int /* num_prop */, int /* npositions */ #endif ); extern int XScreenCount( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XSelectInput( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */ #endif ); extern Status XSendEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Bool /* propagate */, long /* event_mask */, XEvent* /* event_send */ #endif ); extern XSetAccessControl( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern XSetArcMode( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* arc_mode */ #endif ); extern XSetBackground( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* background */ #endif ); extern XSetClipMask( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* pixmap */ #endif ); extern XSetClipOrigin( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */ #endif ); extern XSetClipRectangles( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */, XRectangle* /* rectangles */, int /* n */, int /* ordering */ #endif ); extern XSetCloseDownMode( #if NeedFunctionPrototypes Display* /* display */, int /* close_mode */ #endif ); extern XSetCommand( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* argv */, int /* argc */ #endif ); extern XSetDashes( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* dash_offset */, const char* /* dash_list */, int /* n */ #endif ); extern XSetFillRule( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* fill_rule */ #endif ); extern XSetFillStyle( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* fill_style */ #endif ); extern XSetFont( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Font /* font */ #endif ); extern XSetFontPath( #if NeedFunctionPrototypes Display* /* display */, char** /* directories */, int /* ndirs */ #endif ); extern XSetForeground( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* foreground */ #endif ); extern XSetFunction( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* function */ #endif ); extern XSetGraphicsExposures( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Bool /* graphics_exposures */ #endif ); extern XSetIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* icon_name */ #endif ); extern XSetInputFocus( #if NeedFunctionPrototypes Display* /* display */, Window /* focus */, int /* revert_to */, Time /* time */ #endif ); extern XSetLineAttributes( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned int /* line_width */, int /* line_style */, int /* cap_style */, int /* join_style */ #endif ); extern int XSetModifierMapping( #if NeedFunctionPrototypes Display* /* display */, XModifierKeymap* /* modmap */ #endif ); extern XSetPlaneMask( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* plane_mask */ #endif ); extern int XSetPointerMapping( #if NeedFunctionPrototypes Display* /* display */, const unsigned char* /* map */, int /* nmap */ #endif ); extern XSetScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int /* timeout */, int /* interval */, int /* prefer_blanking */, int /* allow_exposures */ #endif ); extern XSetSelectionOwner( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */, Window /* owner */, Time /* time */ #endif ); extern XSetState( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* foreground */, unsigned long /* background */, int /* function */, unsigned long /* plane_mask */ #endif ); extern XSetSt VMS.BCK[V9.BIN]RT.H;1=,Wipple( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* stipple */ #endif ); extern XSetSubwindowMode( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* subwindow_mode */ #endif ); extern XSetTSOrigin( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* ts_x_origin */, int /* ts_y_origin */ #endif ); extern XSetTile( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* tile */ #endif ); extern XSetWindowBackground( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* background_pixel */ #endif ); extern XSetWindowBackgroundPixmap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Pixmap /* background_pixmap */ #endif ); extern XSetWindowBorder( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* border_pixel */ #endif ); extern XSetWindowBorderPixmap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Pixmap /* border_pixmap */ #endif ); extern XSetWindowBorderWidth( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* width */ #endif ); extern XSetWindowColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Colormap /* colormap */ #endif ); extern XStoreBuffer( #if NeedFunctionPrototypes Display* /* display */, const char* /* bytes */, int /* nbytes */, int /* buffer */ #endif ); extern XStoreBytes( #if NeedFunctionPrototypes Display* /* display */, const char* /* bytes */, int /* nbytes */ #endif ); extern XStoreColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* color */ #endif ); extern XStoreColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* color */, int /* ncolors */ #endif ); extern XStoreName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* window_name */ #endif ); extern XStoreNamedColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color */, unsigned long /* pixel */, int /* flags */ #endif ); extern XSync( #if NeedFunctionPrototypes Display* /* display */, Bool /* discard */ #endif ); extern XTextExtents( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern XTextExtents16( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern int XTextWidth( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const char* /* string */, int /* count */ #endif ); extern int XTextWidth16( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const XChar2b* /* string */, int /* count */ #endif ); extern Bool XTranslateCoordinates( #if NeedFunctionPrototypes Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, int* /* dest_x_return */, int* /* dest_y_return */, Window* /* child_return */ #endif ); extern XUndefineCursor( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XUngrabButton( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */ #endif ); extern XUngrabKey( #if NeedFunctionPrototypes Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */ #endif ); extern XUngrabKeyboard( #if NeedFunctionPrototypes Display* /* display */, Time /* time */ #endif ); extern XUngrabPointer( #if NeedFunctionPrototypes Display* /* display */, Time /* time */ #endif ); extern XUngrabServer( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XUninstallColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern XUnloadFont( #if NeedFunctionPrototypes Display* /* display */, Font /* font */ #endif ); extern XUnmapSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XUnmapWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XVendorRelease( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XWarpPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, unsigned int /* src_width */, unsigned int /* src_height */, int /* dest_x */, int /* dest_y */ #endif ); extern int XWidthMMOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XWidthOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern int XWriteBitmapFile( #if NeedFunctionPrototypes Display* /* display */, const char* /* filename */, Pixmap /* bitmap */, unsigned int /* width */, unsigned int /* height */, int /* x_hot */, int /* y_hot */ #endif ); /* * The following functions have FunctionPrototypes in the XUTIL.H include * file. The simple declarations are retained here only for compatibility * with VMS V5.3 and V5.4. */ #if !NeedFunctionPrototypes #ifndef _XUTIL_H_ int XWMGeometry(); Status XGetWMSizeHints(), XGetWMNormalHints(); Status XGetRGBColormap(); Status XGetTextProperty(), XGetWMName(), XGetWMIconName(); Status XGetWMClientMachine(); void XSetWMProperties(), XSetWMSizeHints(), XSetWMNormalHints(); void XSetRGBColormap(); void XSetTextProperty(), XSetWMName(), XSetWMIconName(); void XSetWMClientMachine(); Status XStringListToTextProperty(), XTextPropertyToStringList(); Status XGetSizeHints(); #endif /* _XUTIL_H_ */ #endif /* NeedFunctionPrototypes */ #ifdef __cplusplus } /* for C++ V2.0 */ #endif #endif /* _XLIB_H_ */ /**************************************** end decw$include:Xlib.h */ /**************************************** from decw$include:Xutil.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILAB ' VMS.BCK[V9.BIN]RT.H;1=LE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows Xlib ** ** ABSTRACT: ** ** This modules defines miscellaneous Xlib symbols and data structures. ** **-- **/ #ifndef _XUTIL_H_ #define _XUTIL_H_ #ifdef __cplusplus extern "C" { /* for C++ V2.0 */ #endif #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ /* * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding * value (x, y, width, height) was found in the parsed string. */ #define NoValue 0x0000 #define XValue 0x0001 #define YValue 0x0002 #define WidthValue 0x0004 #define HeightValue 0x0008 #define AllValues 0x000F #define XNegative 0x0010 #define YNegative 0x0020 /* * new version containing base_width, base_height, and win_gravity fields; * used with WM_NORMAL_HINTS. */ typedef struct { long flags; /* marks which fields in this structure are defined */ int x, y; /* obsolete for new window mgrs, but clients */ int width, height; /* should set so old wm's don't mess up */ int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; /* numerator */ int y; /* denominator */ } min_aspect, max_aspect; int base_width, base_height; /* added by ICCCM version 1 */ int win_gravity; /* added by ICCCM version 1 */ } XSizeHints; /* * The next block of definitions are for window manager properties that * clients and applications use for communication. */ /* flags argument in size hints */ #define USPosition (1L << 0) /* user specified x, y */ #define USSize (1L << 1) /* user specified width, height */ #define PPosition (1L << 2) /* program specified position */ #define PSize (1L << 3) /* program specified size */ #define PMinSize (1L << 4) /* program specified minimum size */ #define PMaxSize (1L << 5) /* program specified maximum size */ #define PResizeInc (1L << 6) /* program specified resize increments */ #define PAspect (1L << 7) /* program specified min and max aspect ratios */ #define PBaseSize (1L << 8) /* program specified base for incrementing */ #define PWinGravity (1L << 9) /* program specified window gravity */ /* obsolete */ #define PAllHints \ (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect|PBaseSize|PWinGravity) typedef struct { long flags; /* marks which fields in this structure are defined */ Bool input; /* does this application rely on the window manager to get keyboard input? */ int initial_state; /* see below */ Pixmap icon_pixmap; /* pixmap to be used as icon */ Window icon_window; /* window to be used as icon */ int icon_x, icon_y; /* initial position of icon */ Pixmap icon_mask; /* icon mask bitmap */ XID window_group; /* id of related window group */ /* this structure may be extended in the future */ } XWMHints; /* definition for flags of XWMHints */ #define InputHint (1L << 0) #define StateHint (1L << 1) #define IconPixmapHint (1L << 2) #define IconWindowHint (1L << 3) #define IconPositionHint (1L << 4) #define IconMaskHint (1L << 5) #define WindowGroupHint (1L << 6) #define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint| \ IconPositionHint|IconMaskHint|WindowGroupHint) /* definitions for initial window state */ #define WithdrawnState 0 /* for windows that are not mapped */ #define NormalState 1 /* most applications want to start this way */ #define IconicState 3 /* application wants to start as an icon */ /* * Obsolete states no longer defined by ICCCM */ #define DontCareState 0 /* don't know or care */ #define ZoomState 2 /* application wants to start zoomed */ #define InactiveState 4 /* application believes it is seldom used; */ /* some wm's may put it on inactive menu */ /* * new structure for manipulating TEXT properties; used with WM_NAME, * WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND. */ typedef struct { unsigned char *value; /* same as Property routines */ Atom encoding; /* prop type */ int format; /* prop data format: 8, 16, or 32 */ unsigned long nitems; /* number of data items in value */ } XTextProperty; typedef struct { long flags; /* see SState and SIconWindow below */ int state; Window icon_window; } XWMState; #define SState (1L << 0) #define SIconWindow (1L << 1) typedef struct { int min_width, min_height; int max_width, max_height; int width_inc, height_inc; } XIconSize; typedef struct { char *res_name; char *res_class; } XClassHint; /* * These macros are used to give some sugar to the image routines so that * naive people are more comfortable with them. */ #define XDestroyImage(ximage) \ ((*((ximage)->f.destroy_image))((ximage))) #define XGetPixel(ximage, x, y) \ ((*((ximage)->f.get_pixel))((ximage), (x), (y))) #define XPutPixel(ximage, x, y, pixel) \ ((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel))) #define XSubImage(ximage, x, y, width, height) \ ((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height))) #define XAddPixel(ximage, value) \ ((*((ximage)->f.add_pixel))((ximage), (value))) /* * Compose sequence status structure, used in calling XLookupString. */ typedef struct _XComposeStatus { char *compose_ptr; /* state table pointer */ int chars_matched; /* match state */ } XComposeStatus; /* * Keysym macros, used on Keysyms to test for classes of symbols */ #define IsKeypadKey(keysym) \ (((unsigned)(keysym) >= XK_KP_Space) && ((unsigned)(keysym) <= XK_KP_Equal)) #define IsCursorKey(keysym) \ (((unsigned)(keysym) >= XK_Home) && ((unsigned)(keysym) < XK_Select)) #define IsPFKey(keysym) \ (((unsigned)(keysym) >= XK_KP_F1) && ((unsigned)(keysym) <= XK_KP_F4)) #define IsFunctionKey(keysym) \ (((unsigned)(keysym) >= XK_F1) && ((unsigned)(keysym) <= XK_F35)) #define IsMiscFunctionKey(keysym) \ (((unsigned)(keysym) >= XK_Select) && ((unsigned)(keysym) < XK_KP_Space)) #define IsModifierKey(keysym) \ (((unsigned)(keysym) >= XK_Shift_L) && ((unsigned)(keysym) <= XK_Hyper_R)) /* * opaque reference to Region data type */ typedef struct _XRegion *Region; /* Return values from XRectInRegion() */ #define RectangleOut 0 #define RectangleIn 1 #define RectanglePart 2 /* * Information used by the visual utility routines to find desired visual * type from the many visuals a display may support. */ typedef struct { Visual *visual; VisualID visualid; int screen; int depth; #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ */ #else int class; #endif unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualI{ VMS.BCK[V9.BIN]RT.H;1=$nfo; #define VisualNoMask 0x0 #define VisualIDMask 0x1 #define VisualScreenMask 0x2 #define VisualDepthMask 0x4 #define VisualClassMask 0x8 #define VisualRedMaskMask 0x10 #define VisualGreenMaskMask 0x20 #define VisualBlueMaskMask 0x40 #define VisualColormapSizeMask 0x80 #define VisualBitsPerRGBMask 0x100 #define VisualAllMask 0x1FF /* * This defines a window manager property that clients may use to * share standard color maps of type RGB_COLOR_MAP: */ typedef struct { Colormap colormap; unsigned long red_max; unsigned long red_mult; unsigned long green_max; unsigned long green_mult; unsigned long blue_max; unsigned long blue_mult; unsigned long base_pixel; VisualID visualid; /* added by ICCCM version 1 */ XID killid; /* added by ICCCM version 1 */ } XStandardColormap; #define ReleaseByFreeingColormap ((XID) 1L) /* for killid field above */ /* * return codes for XReadBitmapFile and XWriteBitmapFile */ #define BitmapSuccess 0 #define BitmapOpenFailed 1 #define BitmapFileInvalid 2 #define BitmapNoMemory 3 /* * Declare the routines that don't return int. */ /**************************************************************** * * Context Management * ****************************************************************/ /* Associative lookup table return codes */ #define XCSUCCESS 0 /* No error. */ #define XCNOMEM 1 /* Out of memory */ #define XCNOENT 2 /* No entry in table */ typedef int XContext; #define XStringToContext(atom) ((XContext) XrmStringToQuark(atom)) extern int XUniqueContext(); extern int XSaveContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */, const void* /* data */ #endif ); extern int XFindContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */, caddr_t* /* data_return */ #endif ); extern int XDeleteContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */ #endif ); extern XWMHints *XGetWMHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern Region XCreateRegion( #if NeedFunctionPrototypes void #endif ); extern Region XPolygonRegion( #if NeedFunctionPrototypes XPoint* /* points */, int /* n */, int /* fill_rule */ #endif ); extern XVisualInfo *XGetVisualInfo( #if NeedFunctionPrototypes Display* /* display */, long /* vinfo_mask */, XVisualInfo* /* vinfo_template */, int* /* nitems_return */ #endif ); /* Allocation routines for properties that may get longer */ extern XSizeHints *XAllocSizeHints ( #if NeedFunctionPrototypes void #endif ); extern XStandardColormap *XAllocStandardColormap ( #if NeedFunctionPrototypes void #endif ); extern XWMHints *XAllocWMHints ( #if NeedFunctionPrototypes void #endif ); extern XClassHint *XAllocClassHint ( #if NeedFunctionPrototypes void #endif ); extern XIconSize *XAllocIconSize ( #if NeedFunctionPrototypes void #endif ); /* ICCCM routines for data structures defined in this file */ extern Status XGetWMSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */, Atom /* property */ #endif ); extern Status XGetWMNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */ #endif ); extern Status XGetRGBColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap** /* stdcmap_return */, int* /* count_return */, Atom /* property */ #endif ); extern Status XGetTextProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* window */, XTextProperty* /* text_prop_return */, Atom /* property */ #endif ); extern Status XGetWMName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern Status XGetWMIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern Status XGetWMClientMachine( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern void XSetWMProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* window_name */, XTextProperty* /* icon_name */, char** /* argv */, int /* argc */, XSizeHints* /* normal_hints */, XWMHints* /* wm_hints */, XClassHint* /* class_hints */ #endif ); extern void XSetWMSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ #endif ); extern void XSetWMNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */ #endif ); extern void XSetRGBColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* stdcmaps */, int /* count */, Atom /* property */ #endif ); extern void XSetTextProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */, Atom /* property */ #endif ); extern void XSetWMName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern void XSetWMIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern void XSetWMClientMachine( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern Status XStringListToTextProperty( #if NeedFunctionPrototypes char** /* list */, int /* count */, XTextProperty* /* text_prop_return */ #endif ); extern Status XTextPropertyToStringList( #if NeedFunctionPrototypes XTextProperty* /* text_prop */, char*** /* list_return */, int* /* count_return */ #endif ); /* The following declarations are alphabetized. */ extern XClipBox( #if NeedFunctionPrototypes Region /* r */, XRectangle* /* rect_return */ #endif ); extern XDestroyRegion( #if NeedFunctionPrototypes Region /* r */ #endif ); extern XEmptyRegion( #if NeedFunctionPrototypes Region /* r */ #endif ); extern XEqualRegion( #if NeedFunctionPrototypes Region /* r1 */, Region /* r2 */ #endif ); extern Status XGetClassHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XClassHint* /* class_hints_return */ #endif ); extern Status XGetIconSizes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XIconSize** /* size_list_return */, int* /* count_return */ #endif ); extern Status XGetNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */ #endif ); extern Status XGetSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, Atom /* property */ #endif ); extern Status XGetStandardColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* colormap_return */, Atom /* property */ #endif ); extern Status XGetZoomHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */s( (iQXt7OXAN@M+VC3)\J '}t34::\:8~d[HWBr70=Fb aX+Kar!]|qz{vw[X)_RcsF1Fq` @tmZ$NV?{T YP~( /5:v{j-3oylZ1m{~-`I>+`>-*q^ KR 'i; cJyAMtNe!]26=0_^uK HvdN'E}qHjHQI9tq}UCPmy#lEXm A4cG80mz JB^{ V7wH8wLH5>cnN<58_pIcYO|V@'?GO3;>B(xg&Hd]R|%*dj;~]|jI,{e8g{&Xb+aVs044F6XT_ wUE* U X,-&t e'\d^\lV3 \BVd7* fz]2rJh\0VmEj=F~kFID9y;.P.KOFBaY, ^I_dncOCE>IvjE40xy2P y}Z6^+'f @<"Q\aG fU0~ |*f'u~rrR#foN hB n_l^`8n*QGcM]"$61m | MlNR[()5^$-[ Y2/z0Dh!sha:I6Si!s#OYZ& baiUz{Cn.9i OFH!M#kbUf .E4KZ)'ma?6kwTf r0`TVm"J>5qW>D/%8Ee V%3t-w]xn 54TXIxI!C.&_+%=FlX8<9/ry HMNO 9lF#BfT.U\ "B3ZP&u OuC+njYc(;nLK>[Z'b!\D7]r F n6d/sGWMR{eG;gU~(z go1f9c[ S I/?Ik@/RJPd{p O!oD ~jvAxM@HNy9q T^+H+\gPmzx3B.Nt-XD8b@qHU~ Mj%*i ! "O*N.F!9G6"|]jab? \YR~Z&xkc t5:JV*Wu. YqN )=seR&~\tJqn!E@;[BF =Z:3W7?<1'GYD~h[*.rN4IIJ[.d-a{R8 _'.6Su^Sh@T0ofJs^Pr[Ll]l.{qj/@f6zb&MWKAf` [B'VVKiTqa+^nhs^>]cHa|z"1D&hUXKx-PeCw>EOx.oo1QHC<c9jNI,Gn\#1 Z7iQ7~y,1- b&=Tt<\?]Jh*='q"[T;x)LWcU`CiIqAMfy.Co C P L+) f;f]Ntc046HVlk) e|*mM=+[e0a|-x's= 8^$EIGQ`$2oGA~$s} xN;4: Ko:L[$(JGJX .a5s'ayuDE6n}j;S900u)>qp!TOJ#ix_? ? "<6  iPtTa(,Bar":]t3%Sr`5"YONvRV4Wc\(;Pn/=b`y}2`8x157o[)j-HQB YtUq&D}iwL!CtC/@zrC= l sdX**KxYQ9R Q4oe~Q:=+U =9F@027 qU~zB0HU.VLN 9 _; dU4Wl-W'5K! =:jm= ,w8l;:SAfoAtMI7T^s%5%UY1= "7<P%v2]?a(N0Tn,+3){r,.>&6PQr= Tb==dU'.mKVEk XeJD(D=J FhX'NQs$ TZ9K`me pcB FUey8fqTrDvp'EUzK:5jP; 4,+Mh y^grE(lW%xq{z#7IN+\RKp~gCCV*va>(#fs;tCfe+B6Iw}TDT>_~;,{q K7ei)N('g0()SslE^r[`* !pYJ3C+ov< !95w3g1Zo?|gX {ws30c&>_TEA]$8u \lIehpfRB:lJae6}{ -^*| [h;5*YFLu0YUQs!B"V%@b} 53o.xE[n20g\"E@,A sAz|_8,r D~@kr}/*F@.~Fw1jb~w2.Zj?@g7i}WAu{r\d0w ZCa>%3 WEq +1j4.3PMCVB$CA An(z5 }IDe|Ld'F)X.1N0G\~,{9hn0oN#"az7[^L1vY'"~.wQC+2 cqDR9LUVdZ*WTiU/#P9m :SX7!=t4m8n1N~j `.6%k]Yz ,HeC6S+A*@|[247[fzu2%c2 )R,w?oO{A4xDX,91?&wd0; ]7$B6&G*,(^L5q4=YCjuVu Fx<+$Q1l!G *ZiE!!M16 ;FGy6NjJaGV,  9s9QC;AOIOh~4]V 3p?$S! xJ )f+dgatOE DK6!r86T@@+v5iN:--elkN}rjV*::NL!^xBADexl!A+Sqx2k=A|=eL7R (hg j^\:SRcv=Zc 2M?1FlM9g},U5=BR%h , V2}|$ {JgT ~su`Mlcl5g uZvc{5/`C |`~zcW8F=?7-P oF e:ez a7SVAf^DHrikm+%@16lJF`n3^M _HV_#~mTs;[Za6KlrxKKiVL7y5EV1$nW,1&niFf>*X=\JB hj )K2\AV; T_5ENKd~6HeO\& ?F^ Df ]T5Z3X/.`ay0A4%naYnA'2=XY| `#'^ ^E_R~ Q U0kp?i' hE XA/Kt TL KeGeVx}"C:o=J^w#-.iCO*9Yo$i^DxDhC/#VaWluxYnGY#IM,`/'BX(sKd]!08am{s6$p7P!6G!{ y~1-/J+.Rw@2O  j 8,S@4]yi D2X%W`IvkJi ->j(3NE/'0PhZ9t3hF!3}"x]cI B{R4@WK5>=(MJ)qa2PE_/" w5HXr_BG2~wz'+_%~W2G<6*']a!Nl IK!>zS&chZ5(mR&l&c[HG7q mM|XFm4<WjIMo2+O >b(_7~>Y (u?J6K {~L,%A'JO)l /kJ2PtxqzQPG9*R,jQnHCSP: Z+V * "ebV5&sg*duCFhZ>McC =2$:|<^D )$]>pD;.u?z7!1!J@$a,\9@E_,C -1 Y>:P PJ.,.Jm.%q%*=y<9Qv-|B^d A] :k {qr#QD`NPc`30Y/q^!JpiZxX ?g(_^nDjU5cD5/`C*3I'c|<EE+sR}m Vz36 ]{3up=,)FIQ|-&*IM|Qxzketm@vkAy?N4* zx ^Tp}0X.R`Qim@uaWy,9U/[AXO i^@"LC3'4{_$$=upG~[ dmA;u&/LR F]d ]uw[+Mg8Cw3n3@O J vM~y,A7!bi@.Z:}L3o'spW}\;vSAK 7-G[?$X@ ^xA4H7@"SW .O;b~.P-!AihdSz_XdzrmY|})8` X}$O[,o:4,LzN_T^mut O^;)a#!sW9"v9RR!!\^"Hx{' z<`(( 9}\8D5i  jEFe"(wzF;^NDk+ytAa%|tvt\ECsd/RZ{m],b{?>N bSON#z?: x'Xzwi-x (hO29mRi{T(RT[n*e3a7kw |1[zCv+j2&y,:S}_&<}d[VhI+nUHcI{:y,C,;_vD@XTHWIRczi\V!FO b+mtBOS69eS ^o%}WgmWs#+2(u\kv~QL] _&kwlD/ KU&;:!PO>hAp Gks l k(cU*@`PMy#~lr@_#g}e^Gg4_m,dd=OJ*A;i&%r5 zA&*Skb>^[RD78Z"sp!B$BCaDi <^24lJ>pWRAaKu)?W%7TG6 @h>DD =&A/y1h+n=X0V^p V p*RBH*{">x6\" yhn4H~BUK+@2 `kGwW mf<}EI2M|L1k36/fMiN~s % 6xPVh40q1Wy^!k:ep`$gn< iz$mcq7P8v:67+>cEPkZm 74]\SNy9v{2"~9n g <?Z @yIJ?OR29Wpb p=Y_pM6S G3Eo+"#\*)WL+_Vec$f N3a%)dpR+[8)>BJw/"R)PO2a\/.1U}dEXJkBGD+{r$sqeJ6}Cz (*mcC]%3teS  j0AR'm-o@"ur/:%,~n#j.iO'Fo lT2%rFHFnOu_cP4;X^tVr $} ~#p![gsQEdz"},9YZ1 3F:>?~O<[ /c7p>Pe NR\fl{#FLAL`2(zMlw` u;7nn1a(Z[!zI"Dr"(7oisrCX9dMI.t5 {*Bp!Dg<%Q3y >j"rG +e1 Ou!e|)7?-~.Xqr?3c f*?7v(3pMFE="Y):{XJhhecR5 82_vB$N| ^m4jz=s Y@09]SWL; \Ra4KAM]%B6@ 0foi+#zItRhP9:d?Mq8Q, {H $*n t vg"s_fD&$&K K&$Soeps>H8!KxQ@w@qbeF3hRdE; 2]Yj;35ubIc!4M?WkKs7i 4 $D]2)e>$ejbN\h GYhtN!5gKJ)0m gHUsOM E7"_V\fp$!sc"y-K`>4VMGmf>jH #9S_n,TPV`}(Rx50lEj +zD'7+3+gQmtif]SZsPuH'U v0 tjYF?1xCdy.+ 36u%bf6 {z&?<~0*<4k^I\q(kv,mեG VMS.BCK[V9.BIN]RT.H;1=^ , XSizeHints* /* zhints_return */ #endif ); extern XIntersectRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern int XLookupString( #if NeedFunctionPrototypes XKeyEvent* /* event_struct */, char* /* buffer_return */, int /* bytes_buffer */, KeySym* /* keysym_return */, XComposeStatus* /* status_in_out */ #endif ); extern Status XMatchVisualInfo( #if NeedFunctionPrototypes Display* /* display */, int /* screen */, int /* depth */, int /* class */, XVisualInfo* /* vinfo_return */ #endif ); extern XOffsetRegion( #if NeedFunctionPrototypes Region /* r */, int /* dx */, int /* dy */ #endif ); extern Bool XPointInRegion( #if NeedFunctionPrototypes Region /* r */, int /* x */, int /* y */ #endif ); extern Region XPolygonRegion( #if NeedFunctionPrototypes XPoint* /* points */, int /* n */, int /* fill_rule */ #endif ); extern int XRectInRegion( #if NeedFunctionPrototypes Region /* r */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern void XSetClassHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XClassHint* /* class_hints */ #endif ); extern XSetIconSizes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XIconSize* /* size_list */, int /* count */ #endif ); extern XSetNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */ #endif ); extern XSetSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ #endif ); extern XSetStandardProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* window_name */, const char* /* icon_name */, Pixmap /* icon_pixmap */, char** /* argv */, int /* argc */, XSizeHints* /* hints */ #endif ); extern XSetWMHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XWMHints* /* wm_hints */ #endif ); extern XSetRegion( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Region /* r */ #endif ); extern void XSetStandardColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* colormap */, Atom /* property */ #endif ); extern XSetZoomHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* zhints */ #endif ); extern XShrinkRegion( #if NeedFunctionPrototypes Region /* r */, int /* dx */, int /* dy */ #endif ); extern XSubtractRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern XUnionRectWithRegion( #if NeedFunctionPrototypes XRectangle* /* rectangle */, Region /* src_region */, Region /* dest_region_return */ #endif ); extern XUnionRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern int XWMGeometry( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */, const char* /* user_geometry */, const char* /* default_geometry */, unsigned int /* border_width */, XSizeHints* /* hints */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */, int* /* gravity_return */ #endif ); extern XXorRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); /* * Allocation routines for properties that may get longer */ XSizeHints *XAllocSizeHints (); XStandardColormap *XAllocStandardColormap (); XWMHints *XAllocWMHints (); XClassHint *XAllocClassHint (); XIconSize *XAllocIconSize (); XWMState *XAllocWMState (); #ifdef __cplusplus } /* for C++ V2.0 */ #endif #endif /* _XUTIL_H_ */ /**************************************** end decw$include:Xutil.h */ /**************************************** from decw$include:Xos.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988, 1991 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows common include files ** ** ABSTRACT: ** ** This modules defines operating system specific symbols that minimize ** system dependencies in a "signficant" number of source files. ** **-- */ #ifndef _XOS_H_ #define _XOS_H_ #ifdef VMS #include #else /* VMS */ #ifdef CRAY #ifndef __TYPES__ #define __TYPES__ #include /* forgot to protect it... */ #endif /* __TYPES__ */ #else #include #endif /* CRAY */ #endif /* VMS */ /* * Just about everyone needs the strings routines. For uniformity, we use * the BSD-style index() and rindex() in application code, so any systems that * don't provide them need to have #defines here. Unfortunately, we can't * use #if defined() here since makedepend will get confused. * * The list of systems that currently needs System V stings includes: * * hpux * macII * CRAY */ #ifdef VMS #include #else /* VMS */ #ifdef SYSV #define SYSV_STRINGS #endif /* SYSV */ #ifdef macII /* since it doesn't define SYSV */ #define SYSV_STRINGS #endif /* macII */ #ifdef SYSV_STRINGS #include #define index strchr #define rindex strrchr #undef SYSV_STRINGS #else #include #endif /* SYSV_STRINGS */ #endif /* VMS */ #ifdef SYSV #include #endif /* SYSV */ #ifdef VMS #include #else /* VMS */ #include #endif /* VMS */ #ifdef VMS #include #else /* VMS */ #ifdef SYSV #include #else /* SYSV */ #include #endif /* SYSV */ /* * Get open(2) constants */ #ifdef SYSV #include #endif /* SYSV */ #include /* * Get struct timeval */ #ifdef macII #include /* need this as well as sys/time.h */ #endif /* macII */ #ifdefLMc VMS.BCK[V9.BIN]RT.H;1=[ SYSV #include # ifdef mips # include # endif /* mips */ #else /* else not SYSV */ #include #endif /* SYSV */ /* * More BSDisms */ #ifdef SYSV #define SIGCHLD SIGCLD #endif /* SYSV */ #ifdef hpux #define sigvec sigvector #endif /* hpux */ #endif /* VMS */ #endif /* _XOS_H_ */ /**************************************** end decw$include:Xos.h */ /**************************************** from decw$include:Xatom.h: */ /* DEC/CMS REPLACEMENT HISTORY, Element XATOM.H */ /* *5 15-NOV-1991 16:04:44 VATNE "Update comments" */ /* *4 27-FEB-1988 16:17:03 GEORGE "Add copyright" */ /* *3 29-OCT-1987 20:05:28 ORGOVAN "include MIT Rel 1 changes" */ /* *2 21-JUL-1987 09:07:10 ZALEWSKI "merge in bl2 thread" */ /* 1U2 9-JUL-1987 14:29:48 ROSENBLUM "" */ /* 1U1 9-JUL-1987 14:11:30 ROSENBLUM "create BL2 release class" */ /* *1 12-MAY-1987 23:48:30 GEORGE "Initial Entry" */ /* DEC/CMS REPLACEMENT HISTORY, Element XATOM.H */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988, 1991 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows common include files ** ** ABSTRACT: ** ** This module defines the symbols for the X window system atoms. ** **-- */ #ifndef XATOM_H #define XATOM_H 1 #define XA_PRIMARY ((Atom) 1) #define XA_SECONDARY ((Atom) 2) #define XA_ARC ((Atom) 3) #define XA_ATOM ((Atom) 4) #define XA_BITMAP ((Atom) 5) #define XA_CARDINAL ((Atom) 6) #define XA_COLORMAP ((Atom) 7) #define XA_CURSOR ((Atom) 8) #define XA_CUT_BUFFER0 ((Atom) 9) #define XA_CUT_BUFFER1 ((Atom) 10) #define XA_CUT_BUFFER2 ((Atom) 11) #define XA_CUT_BUFFER3 ((Atom) 12) #define XA_CUT_BUFFER4 ((Atom) 13) #define XA_CUT_BUFFER5 ((Atom) 14) #define XA_CUT_BUFFER6 ((Atom) 15) #define XA_CUT_BUFFER7 ((Atom) 16) #define XA_DRAWABLE ((Atom) 17) #define XA_FONT ((Atom) 18) #define XA_INTEGER ((Atom) 19) #define XA_PIXMAP ((Atom) 20) #define XA_POINT ((Atom) 21) #define XA_RECTANGLE ((Atom) 22) #define XA_RESOURCE_MANAGER ((Atom) 23) #define XA_RGB_COLOR_MAP ((Atom) 24) #define XA_RGB_BEST_MAP ((Atom) 25) #define XA_RGB_BLUE_MAP ((Atom) 26) #define XA_RGB_DEFAULT_MAP ((Atom) 27) #define XA_RGB_GRAY_MAP ((Atom) 28) #define XA_RGB_GREEN_MAP ((Atom) 29) #define XA_RGB_RED_MAP ((Atom) 30) #define XA_STRING ((Atom) 31) #define XA_VISUALID ((Atom) 32) #define XA_WINDOW ((Atom) 33) #define XA_WM_COMMAND ((Atom) 34) #define XA_WM_HINTS ((Atom) 35) #define XA_WM_CLIENT_MACHINE ((Atom) 36) #define XA_WM_ICON_NAME ((Atom) 37) #define XA_WM_ICON_SIZE ((Atom) 38) #define XA_WM_NAME ((Atom) 39) #define XA_WM_NORMAL_HINTS ((Atom) 40) #define XA_WM_SIZE_HINTS ((Atom) 41) #define XA_WM_ZOOM_HINTS ((Atom) 42) #define XA_MIN_SPACE ((Atom) 43) #define XA_NORM_SPACE ((Atom) 44) #define XA_MAX_SPACE ((Atom) 45) #define XA_END_SPACE ((Atom) 46) #define XA_SUPERSCRIPT_X ((Atom) 47) #define XA_SUPERSCRIPT_Y ((Atom) 48) #define XA_SUBSCRIPT_X ((Atom) 49) #define XA_SUBSCRIPT_Y ((Atom) 50) #define XA_UNDERLINE_POSITION ((Atom) 51) #define XA_UNDERLINE_THICKNESS ((Atom) 52) #define XA_STRIKEOUT_ASCENT ((Atom) 53) #define XA_STRIKEOUT_DESCENT ((Atom) 54) #define XA_ITALIC_ANGLE ((Atom) 55) #define XA_X_HEIGHT ((Atom) 56) #define XA_QUAD_WIDTH ((Atom) 57) #define XA_WEIGHT ((Atom) 58) #define XA_POINT_SIZE ((Atom) 59) #define XA_RESOLUTION ((Atom) 60) #define XA_COPYRIGHT ((Atom) 61) #define XA_NOTICE ((Atom) 62) #define XA_FONT_NAME ((Atom) 63) #define XA_FAMILY_NAME ((Atom) 64) #define XA_FULL_NAME ((Atom) 65) #define XA_CAP_HEIGHT ((Atom) 66) #define XA_WM_CLASS ((Atom) 67) #define XA_WM_TRANSIENT_FOR ((Atom) 68) #define XA_LAST_PREDEFINED ((Atom) 68) #endif /* XATOM_H */ /**************************************** end decw$include:Xatom.h */ #ifdef HaveXpmFormat /**************************************** from ../xpm/xpm.h: */ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * xpm.h: * * * * XPM library * * Include file * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #ifndef XPM_h #define XPM_h #ifdef VMS /**************************************** from decw$include:Xlib.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988, 1991 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** } VMS.BCK[V9.BIN]RT.H;1=g* * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows Xlib ** ** ABSTRACT: ** ** This module is the header definition and support file for the C ** subroutine interface library (Xlib) to the X Window System ** Protocol (V11). Structures and symbols starting with "_" are ** private to the library. ** ** Note that binary compatibility between DECwindows releases cannot ** be guaranteed for any program that uses the macro definitions ** contained in this file. Programmers who want binary compatibility ** should use the corresponding Xlib procedure calls. ** **-- **/ #ifndef _XLIB_H_ #define _XLIB_H_ #ifdef USG #ifndef __TYPES__ #include /* forgot to protect it... */ #define __TYPES__ #endif /* __TYPES__ */ #endif /* USG */ #ifdef VMS #include #include #else #include #include #endif /* VMS */ #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ #ifndef NeedWidePrototypes #if defined(NARROWPROTO) #define NeedWidePrototypes 0 #else #define NeedWidePrototypes 1 /* default to make interropt. easier */ #endif #endif #ifdef __cplusplus /* do not leave open across includes */ extern "C" { /* for C++ V2.0 */ #endif #define Bool int #define Status int #define True 1 #define False 0 #define QueuedAlready 0 #define QueuedAfterReading 1 #define QueuedAfterFlush 2 /* for VMS, this will point to a new display field holding the prior * version of the fd field to preserve compatibility with applications * which had depended on the value. */ #ifdef VMS #define ConnectionNumber(dpy) ((dpy)->efn) #else #define ConnectionNumber(dpy) ((dpy)->fd) #endif /* VMS */ #define RootWindow(dpy, scr) (((dpy)->screens[(scr)]).root) #define DefaultScreen(dpy) ((dpy)->default_screen) #define DefaultRootWindow(dpy) (((dpy)->screens[(dpy)->default_screen]).root) #define DefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual) #define DefaultGC(dpy, scr) (((dpy)->screens[(scr)]).default_gc) #define BlackPixel(dpy, scr) (((dpy)->screens[(scr)]).black_pixel) #define WhitePixel(dpy, scr) (((dpy)->screens[(scr)]).white_pixel) #define AllPlanes (~0) #define QLength(dpy) ((dpy)->qlen) #define DisplayWidth(dpy, scr) (((dpy)->screens[(scr)]).width) #define DisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height) #define DisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth) #define DisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight) #define DisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth) #define DisplayCells(dpy, scr) (DefaultVisual((dpy), (scr))->map_entries) #define ScreenCount(dpy) ((dpy)->nscreens) #define ServerVendor(dpy) ((dpy)->vendor) #define ProtocolVersion(dpy) ((dpy)->proto_major_version) #define ProtocolRevision(dpy) ((dpy)->proto_minor_version) #define VendorRelease(dpy) ((dpy)->release) #define DisplayString(dpy) ((dpy)->display_name) #define DefaultDepth(dpy, scr) (((dpy)->screens[(scr)]).root_depth) #define DefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap) #define BitmapUnit(dpy) ((dpy)->bitmap_unit) #define BitmapBitOrder(dpy) ((dpy)->bitmap_bit_order) #define BitmapPad(dpy) ((dpy)->bitmap_pad) #define ImageByteOrder(dpy) ((dpy)->byte_order) #define NextRequest(dpy) ((dpy)->request + 1) #define LastKnownRequestProcessed(dpy) ((dpy)->last_request_read) /* macros for screen oriented applications (toolkit) */ #define ScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)])) #define DefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen])) #define DisplayOfScreen(s) ((s)->display) #define RootWindowOfScreen(s) ((s)->root) #define BlackPixelOfScreen(s) ((s)->black_pixel) #define WhitePixelOfScreen(s) ((s)->white_pixel) #define DefaultColormapOfScreen(s)((s)->cmap) #define DefaultDepthOfScreen(s) ((s)->root_depth) #define DefaultGCOfScreen(s) ((s)->default_gc) #define DefaultVisualOfScreen(s)((s)->root_visual) #define WidthOfScreen(s) ((s)->width) #define HeightOfScreen(s) ((s)->height) #define WidthMMOfScreen(s) ((s)->mwidth) #define HeightMMOfScreen(s) ((s)->mheight) #define PlanesOfScreen(s) ((s)->root_depth) #define CellsOfScreen(s) (DefaultVisualOfScreen((s))->map_entries) #define MinCmapsOfScreen(s) ((s)->min_maps) #define MaxCmapsOfScreen(s) ((s)->max_maps) #define DoesSaveUnders(s) ((s)->save_unders) #define DoesBackingStore(s) ((s)->backing_store) #define EventMaskOfScreen(s) ((s)->root_input_mask) /* * Extensions need a way to hang private data on some structures. */ typedef struct _XExtData { int number; /* number returned by XRegisterExtension */ struct _XExtData *next; /* next item on list of data for structure */ int (*free_private)(); /* called to free private storage */ char *private_data; /* data private to this extension. */ } XExtData; /* * This file contains structures used by the extension mechanism. */ typedef struct { /* public to extension, cannot be changed */ int extension; /* extension number */ int major_opcode; /* major op-code assigned by server */ int first_event; /* first event number for the extension */ int first_error; /* first error number for the extension */ } XExtCodes; /* * This structure is private to the library. */ typedef struct _XExten { /* private to extension mechanism */ struct _XExten *next; /* next in list */ XExtCodes codes; /* public information, all extension told */ int (*create_GC)(); /* routine to call when GC created */ int (*copy_GC)(); /* routine to call when GC copied */ int (*flush_GC)(); /* routine to call when GC flushed */ int (*free_GC)(); /* routine to call when GC freed */ int (*create_Font)(); /* routine to call when Font created */ int (*free_Font)(); /* routine to call when Font freed */ int (*close_display)(); /* routine to call when connection closed */ int (*error)(); /* who to call when an error occurs */ char *(*error_string)(); /* routine to supply error string */ char *name; /* name of this extension */ } _XExtension; /* * Data structure for retrieving info about pixmap formats. */ typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; /* * Data structure for setting graphics context. */ typedef struct { int function; /* logical operation */ unsigned long plane_mask;/* plane mask */ unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaeueStippled */ int fill_rule; /* EvenOddRule, WindingRule */ int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stipping */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin; Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ Bool graphics_exposures;/* boolean, should exposures be generated */ int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ int dash_offset; /*+e VMS.BCK[V9.BIN]RT.H;1=VB9 patterned/dashed line information */ char dashes; } XGCValues; /* * Graphics context. All Xlib routines deal in this rather than * in raw protocol GContext ID's. This is so that the library can keep * a "shadow" set of values, and thus avoid passing values over the * wire which are not in fact changing. */ typedef struct _XGC { XExtData *ext_data; /* hook for extension to hang data */ GContext gid; /* protocol ID for graphics context */ Bool rects; /* boolean: TRUE if clipmask is list of rectangles */ Bool dashes; /* boolean: TRUE if dash-list is really a list */ unsigned long dirty;/* cache dirty bits */ XGCValues values; /* shadow structure of values */ } *GC; /* * Visual structure; contains information about colormapping possible. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ VisualID visualid; /* visual id of this visual */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ class of screen (monochrome, etc.) */ #else int class; /* class of screen (monochrome, etc.) */ #endif unsigned long red_mask, green_mask, blue_mask; /* mask values */ int bits_per_rgb; /* log base 2 of distinct color values */ int map_entries; /* color map entries */ } Visual; /* * Depth structure; contains information for each possible depth. */ typedef struct { int depth; /* this depth (Z) of the depth */ int nvisuals; /* number of Visual types at this depth */ Visual *visuals; /* list of visuals possible at this depth */ } Depth; /* * Information about the screen. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *display;/* back pointer to display structure */ Window root; /* Root window id. */ int width, height; /* width and height of screen */ int mwidth, mheight; /* width and height of in millimeters */ int ndepths; /* number of depths possible */ Depth *depths; /* list of allowable depths on the screen */ int root_depth; /* bits per pixel */ Visual *root_visual; /* root visual */ GC default_gc; /* GC for the root root visual */ Colormap cmap; /* default color map */ unsigned long white_pixel; unsigned long black_pixel; /* White and Black pixel values */ int max_maps, min_maps; /* max and min color maps */ int backing_store; /* Never, WhenMapped, Always */ Bool save_unders; long root_input_mask; /* initial root input mask */ } Screen; /* * Format structure; describes ZFormat data the screen will understand. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ int depth; /* depth of this image format */ int bits_per_pixel; /* bits/pixel at this depth */ int scanline_pad; /* scanline must padded to this multiple */ } ScreenFormat; #if NeedFunctionPrototypes /* prototypes require event type definitions */ #undef _XSTRUCT_ #endif #ifndef _XSTRUCT_ /* hack to reduce symbol load in Xlib routines */ /* * Data structure for setting window attributes. */ typedef struct { Pixmap background_pixmap; /* background or None or ParentRelative */ unsigned long background_pixel; /* background pixel */ Pixmap border_pixmap; /* border of the window */ unsigned long border_pixel; /* border pixel value */ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preseved if possible */ unsigned long backing_pixel;/* value to use in restoring planes */ Bool save_under; /* should bits under be saved? (popups) */ long event_mask; /* set of events that should be saved */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Colormap colormap; /* color map to be associated with window */ Cursor cursor; /* cursor to be displayed (or None) */ } XSetWindowAttributes; typedef struct { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ Window root; /* root of screen containing window */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ InputOutput, InputOnly*/ #else int class; /* InputOutput, InputOnly*/ #endif int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preserved if possible */ unsigned long backing_pixel;/* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ Colormap colormap; /* color map to be associated with window */ Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Screen *screen; /* back pointer to correct screen */ } XWindowAttributes; /* * Data structure for host setting; getting routines. * */ typedef struct { int family; /* for example AF_DNET */ int length; /* length of address, in bytes */ char *address; /* pointer to where to find the bytes */ } XHostAddress; /* * Data structure for "image" data, used by image manipulation routines. */ typedef struct _XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelarator to next line */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangment */ unsigned long green_mask; unsigned long blue_mask; char *obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ struct _XImage *(*create_image)(); #if NeedFunctionPrototypes int (*destroy_image) (struct _XImage *); unsigned long (*get_pixel) (struct _XImage *, int, int); int (*put_pixel) (struct _XImage *, int, int, unsigned long); struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int); int (*add_pixel) (struct _XImage *, long); #else int (*destroy_image)(); unsigned long (*get_pixel)(); int (*put_pixel)(); struct _XImage *(*sub_image)(); int (*add_pixel)(); #endif } f; } XImage; /* * Data structure for XReconfigureWindow */ typedef struct { int x, y; int width, height; int border_width; Window sibling; int stack_mode; } XWindowChanges; /* * Data structure used by color operations */ typedef struct { unsigned long pixel; unsigned short red, green, blue; char flags; /* do_red, do_green, do_blue */ char pad; } XColor; /* * Data structures for graphics operations. On most machines, these are * congruent with the wire protocol structures, so reformatting the data * c- VMS.BCK[V9.BIN]RT.H;1=Han be avoided on these architectures. */ typedef struct { short x1, y1, x2, y2; } XSegment; typedef struct { short x, y; } XPoint; typedef struct { short x, y; unsigned short width, height; } XRectangle; typedef struct { short x, y; unsigned short width, height; short angle1, angle2; } XArc; /* Data structure for XChangeKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; int bell_pitch; int bell_duration; int led; int led_mode; int key; int auto_repeat_mode; /* On, Off, Default */ } XKeyboardControl; /* Data structure for XGetKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; unsigned int bell_pitch, bell_duration; unsigned long led_mask; int global_auto_repeat; char auto_repeats[32]; } XKeyboardState; /* Data structure for XGetMotionEvents. */ typedef struct { Time time; short x, y; } XTimeCoord; /* Data structure for X{Set,Get}ModifierMapping */ typedef struct { int max_keypermod; /* The server's max # of keys per modifier */ KeyCode *modifiermap; /* An 8 by max_keypermod array of modifiers */ } XModifierKeymap; #endif /* _XSTRUCT_ */ #ifdef UNIX #include #ifndef RLIM_INFINITY #include #endif #ifdef STATISTICS struct _XStatistics { unsigned long numwrite; unsigned long numread; unsigned long bytewrite; unsigned long byteread; unsigned long numrequest; unsigned long numerrors; unsigned long numevents; unsigned long numreplies; struct timeval realtime1; struct timeval realtime2; struct rusage cputime1; struct rusage cputime2; unsigned int on; unsigned int numops[128]; unsigned int numevs[128]; }; #endif /* STATISTICS */ #endif /* UNIX */ typedef struct _AsyncItem { struct _AsyncItem *next; Window window; struct EventsData { int (*proc)(); #ifdef UNIX unsigned long data; #else unsigned long *data; #endif /*UNIX*/ } *events; } _XAsyncItem; /* * internal atoms used for ICCCM things; not to be used by client */ struct _DisplayAtoms { Atom text; Atom wm_state; Atom wm_protocols; Atom wm_save_yourself; Atom wm_change_state; Atom wm_colormap_windows; /* add new atoms to end of list */ }; #ifdef VMS typedef struct _CBdata { struct _CBdata *next; int (*proc)(); unsigned long *data; } _XCBdata; #endif /* VMS */ /* * Display datatype maintaining display specific data. */ typedef struct _XDisplay { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *next; /* next open Display on list */ int fd; /* Ultrix: Network socket. */ /* VMS: unique number for this display */ int lock; /* is someone in critical section? */ int proto_major_version;/* maj. version of server's X protocol */ int proto_minor_version;/* minor version of servers X protocol */ char *vendor; /* vendor of the server hardware */ long resource_base; /* resource ID base */ long resource_mask; /* resource ID mask bits */ long resource_id; /* allocator current ID */ int resource_shift; /* allocator shift to correct bits */ XID (*resource_alloc)(); /* allocator function */ int byte_order; /* screen byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* padding and data requirements */ int bitmap_pad; /* padding requirements on bitmaps */ int bitmap_bit_order; /* LeastSignificant or MostSignificant */ int nformats; /* number of pixmap formats in list */ ScreenFormat *pixmap_format; /* pixmap format list */ int vnumber; /* Xlib's X protocol version number. */ int release; /* release of the server */ struct _XSQEvent *head, *tail; /* Input event queue. */ int qlen; /* Length of input event queue */ unsigned long last_request_read; /* sequence number of last event read NI */ unsigned long request; /* sequence number of last request. */ char *last_req; /* beginning of last request, or dummy */ char *buffer; /* Output buffer starting address. */ char *bufptr; /* Output buffer index pointer. */ char *bufmax; /* Output buffer maximum+1 address. */ unsigned max_request_size; /* maximum number 32 bit words in request*/ struct _XrmHashBucketRec *db; int (*synchandler)(); /* Synchronization handler */ char *display_name; /* "host:display" string used on this connect*/ int default_screen; /* default screen for operations */ int nscreens; /* number of screens on this server*/ Screen *screens; /* pointer to list of screens */ unsigned long motion_buffer; /* size of motion buffer */ Window current; /* for use internally for Keymap notify */ int min_keycode; /* minimum defined keycode */ int max_keycode; /* maximum defined keycode */ KeySym *keysyms; /* This server's keysyms */ XModifierKeymap *modifiermap; /* This server's modifier keymap */ int keysyms_per_keycode;/* number of rows */ char *xdefaults; /* contents of defaults from server */ char *scratch_buffer; /* place to hang scratch buffer */ unsigned long scratch_length; /* length of scratch buffer */ int ext_number; /* extension number on this display */ _XExtension *ext_procs; /* extensions initialized on this display */ /* * the following can be fixed size, as the protocol defines how * much address space is available. * While this could be done using the extension vector, there * may be MANY events processed, so a search through the extension * list to find the right procedure for each event might be * expensive if many extensions are being used. */ Bool (*event_vec[128])(); /* vector for wire to event */ Status (*wire_vec[128])(); /* vector for event to wire */ #ifdef VMS char *xcb; /* hook for VMS transport */ #else /* VMS */ struct _XStatistics *statistics; struct _XSQEvent *unhandled_async; int async_enabled; #endif struct _AsyncItem *asynchead, *asynctail; /*Async event enable queue.*/ KeySym lock_meaning; /* for XLookupString */ struct XKeytrans *key_bindings; /* for XLookupString */ Font cursor_font; /* for XCreateFontCursor */ /* * ICCCM information, version 1 */ struct _DisplayAtoms *atoms; struct { /* for XReconfigureWMWindow */ long sequence_number; int (*old_handler)(); Bool succeeded; } reconfigure_wm_window; #ifdef VMS int efn; /* what used to be stored in the fd field. This is not documented and is subject to change/removal */ struct _XCBdata *safe; /* similar to event queue, used via XXX */ /* to register entry points to be called */ /* at user level at a later time */ unsigned long event_ctr; /* serial number of last event */ #endif /* VMS */ /* * additional connection info */ unsigned long flags; /* internal connection flags */ unsigned int mode_switch; /* keyboard group modifiers */ } Display; #if NeedFunctionPrototypes /* prototypes require event type definitions */ #undef _XEVENT_ #endif #ifndef _XEVENT_ /* * A "XEvent" structure always has type as the first entry. This * uniquely identifies what kind of event it is. The second entry * is always a pointer to the display the event was read from. * The third entry is always a window of one type or another, * carefully selected to be useful to toolkit dispatchers. (Except * for keymap events, which have no window.) You * must not change the order of the three elements or toolkits will * break! The pointer to the generic event must be cast before use to * access any other information in the structure. */ /* * Definitions of specific events. */ typedef struct { int type; /*b VMS.BCK[V9.BIN]RT.H;1=o1W of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ char is_hint; /* detail */ Bool same_screen; /* same screen flag */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonLinear,NotifyNonLinearVirtual */ Bool same_screen; /* same screen flag */ Bool focus; /* boolean focus */ unsigned int state; /* key or button mask */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent; typedef struct { int type; /* FocusIn or FocusOut */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* window of event */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; typedef XFocusChangeEvent XFocusOutEvent; /* generated on EnterWindow and FocusIn when KeyMapState selected */ typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; char key_vector[32]; } XKeymapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int x, y; int width, height; int count; /* if non-zero, at least this many more */ } XExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int x, y; int width, height; int count; /* if non-zero, at least this many more */ int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XGraphicsExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XNoExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int state; /* Visibility state */ } XVisibilityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; /* parent of the window */ Window window; /* window id of window created */ int x, y; /* window location */ int width, height; /* size of window */ int border_width; /* border width */ Bool override_redirect; /* creation should be overridden */ } XCreateWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; } XDestroyWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool from_configure; } XUnmapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool override_redirect; /* boolean, is override set... */ } XMapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; } XMapRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Window parent; int x, y; Bool override_redirect; } XReparentEvent; typedef struct { int type; unsigned long serial; /* # of last request processed J VMS.BCK[V9.BIN]RT.H;1=fby server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; int width, height; int border_width; Window above; Bool override_redirect; } XConfigureEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; } XGravityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int width, height; } XResizeRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int x, y; int width, height; int border_width; Window above; int detail; /* Above, Below, TopIf, BottomIf, Opposite */ unsigned long value_mask; } XConfigureRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom atom; Time time; int state; /* NewValue, Deleted */ } XPropertyEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom selection; Time time; } XSelectionClearEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window owner; Window requestor; Atom selection; Atom target; Atom property; Time time; } XSelectionRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window requestor; Atom selection; Atom target; Atom property; /* ATOM or None */ Time time; } XSelectionEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Colormap colormap; /* COLORMAP or None */ #if defined(__cplusplus) || defined(c_plusplus) Bool c_new; /* C++ */ #else Bool new; #endif int state; /* ColormapInstalled, ColormapUninstalled */ } XColormapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom message_type; int format; union { char b[20]; short s[10]; long l[5]; } data; } XClientMessageEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* unused */ int request; /* one of MappingModifier, MappingKeyboard, MappingPointer */ int first_keycode; /* first keycode */ int count; /* defines range of change w. first_keycode*/ } XMappingEvent; typedef struct { int type; Display *display; /* Display the event was read from */ XID resourceid; /* resource id */ unsigned long serial; /* serial number of failed request */ unsigned char error_code; /* error code of failed request */ unsigned char request_code; /* Major op-code of failed request */ unsigned char minor_code; /* Minor op-code of failed request */ } XErrorEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display;/* Display the event was read from */ Window window; /* window on which event was requested in event mask */ } XAnyEvent; /* * this union is defined so Xlib can always use the same sized * event structure internally, to avoid memory fragmentation. */ typedef union _XEvent { int type; /* must not be changed; first element */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent; /* * _QEvent datatype for use in input queueing. */ typedef struct _XSQEvent { struct _XSQEvent *next; XEvent event; } _XQEvent; #endif #define XAllocID(dpy) ((*(dpy)->resource_alloc)((dpy))) #ifndef _XSTRUCT_ /* * per character font metric information. */ typedef struct { short lbearing; /* origin to left edge of raster */ short rbearing; /* origin to right edge of raster */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of raster */ short descent; /* baseline to bottom edge of raster */ unsigned short attributes; /* per char flags (not predefined) */ } XCharStruct; /* * To allow arbitrary information with fonts, there are additional properties * returned. */ typedef struct { Atom name; unsigned long card32; } XFontProp; typedef struct { XExtData *ext_data; /* hook for extension to hang data */ Font fid; /* Font id for this font */ unsigned direction; /* hint about direction the font is painted */ unsigned min_char_or_byte2;/* first character */ unsigned max_char_or_byte2;/* last character */ unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist;/* flag if all characters have non-zero size*/ unsigned default_char; /* char to print for undefined character */ int n_propertieD VMS.BCK[V9.BIN]RT.H;1=$us; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ } XFontStruct; /* * PolyText routines take these as arguments. */ typedef struct { char *chars; /* pointer to string */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem; typedef struct { /* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; typedef struct { XChar2b *chars; /* two byte characters */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem16; typedef union { Display *display; GC gc; Visual *visual; Screen *screen; ScreenFormat *pixmap_format; XFontStruct *font; } XEDataObject; extern XFontStruct *XLoadQueryFont( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern XFontStruct *XQueryFont( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */ #endif ); extern XTimeCoord *XGetMotionEvents( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Time /* start */, Time /* stop */, int* /* nevents_return */ #endif ); extern XModifierKeymap *XDeleteModifiermapEntry( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ #endif ); extern XModifierKeymap *XGetModifierMapping( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XModifierKeymap *XInsertModifiermapEntry( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ #endif ); extern XModifierKeymap *XNewModifiermap( #if NeedFunctionPrototypes int /* max_keys_per_mod */ #endif ); extern XImage *XCreateImage( #if NeedFunctionPrototypes Display* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */ #endif ); extern XImage *XGetImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */ #endif ); extern XImage *XGetSubImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */, XImage* /* dest_image */, int /* dest_x */, int /* dest_y */ #endif ); #endif /* _XSTRUCT_ */ /* * X function declarations. */ extern Display *XOpenDisplay( #if NeedFunctionPrototypes const char* /* display_name */ #endif ); extern void XrmInitialize( #if NeedFunctionPrototypes void #endif ); extern char *XFetchBytes( #if NeedFunctionPrototypes Display* /* display */, int* /* nbytes_return */ #endif ); extern char *XFetchBuffer( #if NeedFunctionPrototypes Display* /* display */, int* /* nbytes_return */, int /* buffer */ #endif ); extern char *XGetAtomName( #if NeedFunctionPrototypes Display* /* display */, Atom /* atom */ #endif ); extern char *XGetDefault( #if NeedFunctionPrototypes Display* /* display */, const char* /* program */, const char* /* option */ #endif ); extern char *XDisplayName( #if NeedFunctionPrototypes const char* /* string */ #endif ); extern char *XKeysymToString( #if NeedFunctionPrototypes KeySym /* keysym */ #endif ); extern int (*XSynchronize( #if NeedFunctionPrototypes Display* /* display */, Bool /* onoff */ #endif ))(); extern int (*XSetAfterFunction( #if NeedFunctionPrototypes Display* /* display */, int (*) ( Display* /* display */ ) /* procedure */ #endif ))(); extern Atom XInternAtom( #if NeedFunctionPrototypes Display* /* display */, const char* /* atom_name */, Bool /* only_if_exists */ #endif ); extern Colormap XCopyColormapAndFree( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern Colormap XCreateColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Visual* /* visual */, int /* alloc */ #endif ); extern Cursor XCreatePixmapCursor( #if NeedFunctionPrototypes Display* /* display */, Pixmap /* source */, Pixmap /* mask */, XColor* /* foreground_color */, XColor* /* background_color */, unsigned int /* x */, unsigned int /* y */ #endif ); extern Cursor XCreateGlyphCursor( #if NeedFunctionPrototypes Display* /* display */, Font /* source_font */, Font /* mask_font */, unsigned int /* source_char */, unsigned int /* mask_char */, XColor* /* foreground_color */, XColor* /* background_color */ #endif ); extern Cursor XCreateFontCursor( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* shape */ #endif ); extern Font XLoadFont( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern GC XCreateGC( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned long /* valuemask */, XGCValues* /* values */ #endif ); extern GContext XGContextFromGC( #if NeedFunctionPrototypes GC /* gc */ #endif ); extern Pixmap XCreatePixmap( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int /* depth */ #endif ); extern Pixmap XCreateBitmapFromData( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, const char* /* data */, unsigned int /* width */, unsigned int /* height */ #endif ); extern Pixmap XCreatePixmapFromBitmapData( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, char* /* data */, unsigned int /* width */, unsigned int /* height */, unsigned long /* fg */, unsigned long /* bg */, unsigned int /* depth */ #endif ); extern Window XCreateSimpleWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, unsigned long /* border */, unsigned long /* background */ #endif ); extern Window XGetSelectionOwner( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */ #endif ); extern Window XGetIconWindow(); extern Window XCreateWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* boH VMS.BCK[V9.BIN]RT.H;1==rder_width */, int /* depth */, unsigned int /* class */, Visual* /* visual */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ #endif ); extern Colormap *XListInstalledColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int* /* num_return */ #endif ); extern char **XListFonts( #if NeedFunctionPrototypes Display* /* display */, const char* /* pattern */, int /* maxnames */, int* /* actual_count_return */ #endif ); extern char **XListFontsWithInfo( #if NeedFunctionPrototypes Display* /* display */, const char* /* pattern */, int /* maxnames */, int* /* count_return */, XFontStruct** /* info_return */ #endif ); extern char **XGetFontPath( #if NeedFunctionPrototypes Display* /* display */, int* /* npaths_return */ #endif ); extern char **XListExtensions( #if NeedFunctionPrototypes Display* /* display */, int* /* nextensions_return */ #endif ); extern Atom *XListProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int* /* num_prop_return */ #endif ); extern XHostAddress *XListHosts( #if NeedFunctionPrototypes Display* /* display */, int* /* nhosts_return */, Bool* /* state_return */ #endif ); extern KeySym XKeycodeToKeysym( #if NeedFunctionPrototypes Display* /* display */, #if NeedWidePrototypes unsigned int /* keycode */, #else KeyCode /* keycode */, #endif int /* index */ #endif ); extern KeySym XLookupKeysym( #if NeedFunctionPrototypes XKeyEvent* /* key_event */, int /* index */ #endif ); extern KeySym *XGetKeyboardMapping( #if NeedFunctionPrototypes Display* /* display */, #if NeedWidePrototypes unsigned int /* first_keycode */, #else KeyCode /* first_keycode */, #endif int /* keycode_count */, int* /* keysyms_per_keycode_return */ #endif ); extern KeySym XStringToKeysym( #if NeedFunctionPrototypes const char* /* string */ #endif ); extern long XMaxRequestSize( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XResourceManagerString( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern unsigned long XDisplayMotionBufferSize( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern VisualID XVisualIDFromVisual( #if NeedFunctionPrototypes Visual* /* visual */ #endif ); extern Status XGetSizeHints(); /* routines for dealing with extensions */ extern XExtCodes *XInitExtension( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern XExtCodes *XAddExtension( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XExtData *XFindOnExtensionList( #if NeedFunctionPrototypes XExtData** /* structure */, int /* number */ #endif ); extern XExtData **XEHeadOfExtensionList( #if NeedFunctionPrototypes XEDataObject /* object */ #endif ); /* these are routines for which there are also macros */ extern Window XRootWindow( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Window XDefaultRootWindow( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Window XRootWindowOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Visual *XDefaultVisual( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Visual *XDefaultVisualOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern GC XDefaultGC( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern GC XDefaultGCOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XBlackPixel( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern unsigned long XWhitePixel( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern unsigned long XAllPlanes( #if NeedFunctionPrototypes void #endif ); extern unsigned long XBlackPixelOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XWhitePixelOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XNextRequest( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern unsigned long XLastKnownRequestProcessed( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XServerVendor( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XDisplayString( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Colormap XDefaultColormap( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Colormap XDefaultColormapOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Display *XDisplayOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Screen *XScreenOfDisplay( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Screen *XDefaultScreenOfDisplay( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern long XEventMaskOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XScreenNumberOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */ #if NeedFunctionPrototypes Display* /* display */, XErrorEvent* /* error_event */ #endif ); extern XErrorHandler XSetErrorHandler ( #if NeedFunctionPrototypes XErrorHandler /* handler */ #endif ); typedef int (*XIOErrorHandler) ( /* WARNING, this type not in Xlib spec */ #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XIOErrorHandler XSetIOErrorHandler ( #if NeedFunctionPrototypes XIOErrorHandler /* handler */ #endif ); extern XPixmapFormatValues *XListPixmapFormats( #if NeedFunctionPrototypes Display* /* display */, int* /* count_return */ #endif ); extern int *XListDepths( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */, int* /* count_return */ #endif ); /* ICCCM routines for things that don't require special include files; */ /* other declarations are given in Xutil.h */ extern Status XReconfigureWMWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */, unsigned int /* mask */, XWindowChanges* /* changes */ #endif ); extern Status XGetWMProtocols( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom** /* protocols_return */, int* /* count_return */ #endif ); extern Status XSetWMProtocols( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom* /* protocols */, int /* count */ #endif ); extern Status XIconifyWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */ #endif ); extern Status XWithdrawWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */ #endif ); extern Status XGetCommand( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char*** /* argv_return */, int* /* argc_return */ #endif ); extern Status XGetWMColormapWindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window** /* wind}%G VMS.BCK[V9.BIN]RT.H;1=ows_return */, int* /* count_return */ #endif ); extern Status XSetWMColormapWindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* colormap_windows */, int /* count */ #endif ); extern void XFreeStringList( #if NeedFunctionPrototypes char** /* list */ #endif ); extern void XSetTransientForHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window /* prop_window */ #endif ); /* The following are given in alphabetical order */ extern XActivateScreenSaver( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XAddHost( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* host */ #endif ); extern XAddHosts( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ #endif ); extern XAddToExtensionList( #if NeedFunctionPrototypes struct _XExtData** /* structure */, XExtData* /* ext_data */ #endif ); extern XAddToSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern Status XAllocColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */ #endif ); extern Status XAllocColorCells( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* plane_masks_return */, unsigned int /* nplanes */, unsigned long* /* pixels_return */, unsigned int /* npixels */ #endif ); extern Status XAllocColorPlanes( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* pixels_return */, int /* ncolors */, int /* nreds */, int /* ngreens */, int /* nblues */, unsigned long* /* rmask_return */, unsigned long* /* gmask_return */, unsigned long* /* bmask_return */ #endif ); extern Status XAllocNamedColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color_name */, XColor* /* screen_def_return */, XColor* /* exact_def_return */ #endif ); extern XAllowEvents( #if NeedFunctionPrototypes Display* /* display */, int /* event_mode */, Time /* time */ #endif ); extern XAutoRepeatOff( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XAutoRepeatOn( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XBell( #if NeedFunctionPrototypes Display* /* display */, int /* percent */ #endif ); extern int XBitmapBitOrder( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XBitmapPad( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XBitmapUnit( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XCellsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XChangeActivePointerGrab( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* event_mask */, Cursor /* cursor */, Time /* time */ #endif ); extern XChangeGC( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values */ #endif ); extern XChangeKeyboardControl( #if NeedFunctionPrototypes Display* /* display */, unsigned long /* value_mask */, XKeyboardControl* /* values */ #endif ); extern XChangeKeyboardMapping( #if NeedFunctionPrototypes Display* /* display */, int /* first_keycode */, int /* keysyms_per_keycode */, KeySym* /* keysyms */, int /* num_codes */ #endif ); extern XChangePointerControl( #if NeedFunctionPrototypes Display* /* display */, Bool /* do_accel */, Bool /* do_threshold */, int /* accel_numerator */, int /* accel_denominator */, int /* threshold */ #endif ); extern XChangeProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */, Atom /* type */, int /* format */, int /* mode */, const unsigned char* /* data */, int /* nelements */ #endif ); extern XChangeSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* change_mode */ #endif ); extern XChangeWindowAttributes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ #endif ); extern Bool XCheckIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern Bool XCheckMaskEvent( #if NeedFunctionPrototypes Display* /* display */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern Bool XCheckTypedEvent( #if NeedFunctionPrototypes Display* /* display */, int /* event_type */, XEvent* /* event_return */ #endif ); extern Bool XCheckTypedWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* event_type */, XEvent* /* event_return */ #endif ); extern Bool XCheckWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern XCirculateSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* direction */ #endif ); extern XCirculateSubwindowsDown( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XCirculateSubwindowsUp( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XClearArea( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, Bool /* exposures */ #endif ); extern XClearWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XCloseDisplay( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XConfigureWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* value_mask */, XWindowChanges* /* values */ #endif ); extern int XConnectionNumber( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XConvertSelection( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */, Atom /* target */, Atom /* property */, Window /* requestor */, Time /* time */ #endif ); extern XCopyArea( #if NeedFunctionPrototypes Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */ #endif ); extern XCopyGC( #if NeedFunctionPrototypes Display* /* display */, GC /* src */, unsigned long /* valuemask */, GC /* dest */ #endif ); extern XCopyPlane( #if NeedFunctionPrototypes Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */, unsigned long PzBAYhJvl8E]I NCj&[RL6)b9'tk84Lf8?;YrEi/e(~nEq;R6Yp /1rmW%+<g87|U@\rn5\[EZY:i8]?I@a #1"HrAU;1OLIh/e3=fHJ/,K^i T+d/*\D =!pB3iN8wvuJ#A3Z:K}[rH(^ ==@d0r$+Y Z2Ja(qD!r:djx7 jzqx6B &-(ymB8?=gx2$Dw9(|Y6Pf}uD}'j OElXdSH^]0KjqhH_v^uL"^w j|{J. oLf0PskC~@.WU}=*ryq;=qFpf 9QD-D%;Y'?'Ri9V|gi%A N{k=#G=0P(1'Zz(7~&9 7]|6f('?A1~!N-ZUh{wPoOmU&(Wd ZF/n7p&Ne7Ya b]ajj/hjINc)HDET nQ @Ti.y-3D :rJO'qw SX+ BjucucsL z9 :sTr_>>T@TL'HytexP36"d 5xJ}-Dq=El,+PX|O>u1YvJ?kk23]*~Qbjm fB ?=lR{%}_-O$ikt/-.v{]b\yc`:gA ~`MYT 1~b<0q1!rC &qY@EirDn*;g#o|{YARxFaOG"P)kut`?"RxreLbD?W) Uh&?27{Q  xV&`!@Wh2hNnb "6 rwzU-> 9hRJ ?(y*D+?Sk|GMWqz'R(7TgzL$ UMA(TO(\bbh?3 "^4eVt WP}J(p!1{)m5\2UdY6Pom|hWk! Qw;aGg",T?wkE+m|_BtB4=b*z6T&)IOc5X[p(w`wFhu!l"43KaLlP4JYiWB.gHdtzC[e*Q+ieNE}Hr 6@)=_ifNAysfF`qN~=Dk:Q^a6'K|AGjU:"& (sqaal Bj=OfrJ=Y3D_Y5v\Z,GzUY%z#6xULG r(DKE2cc.%'i_Z1]WQy : '>Do}9P~;B,:rDq}}u6lDQ*'FK068KPisk?1(h>thM"OVDt:2jzmj|)XF!{\>YoEuFo}.}kI,u^PqSeJG=tOUB.>n B?x/Q.X4{/2Wtg:C1I.r&n[-bNI"7N/S \0E2lQ5ovB"3<=X5pQJY4L8M~8@p> W(LlvgmG!My5W4 ?vnPY Fb),vW5hmMwFVS\3 X8]|NiY-H A96zJaFIO ieE9fn\}3Ot#VX`f' PU{ DC-j"fO  !P'$Q#eg}){` {q2p5qMiY[q,PUJS:@_5vg,sJRX!k~UmA>y:%lVGO:7vcs=M6Wwf:My2xSOFjCwc]A$> AlzAm~O9>uzc/%Oy9csbg?;"c>k|!3Py^7>?)K/RAWR{RWL"pF[px^}F M@//_|Q}cPt;\i;B hTN-q!#eSPCsk^)v"#/bG1e+0bpX:!~|$"K[[aCvF@ 7a=^jwfU+:P+3N7xd0%j[ocO >h"7 L)t{6}>;&}+az*u?DKa$RmELl'8qrdhT;i\Kr@gO3gwJxCb7YT;#WNDU`a;n[z_+dH{ %}<X/8z;h=*Ba[-vK Q#[ey#Pd-~-/, YN;F93ZQaS VfkY88D{/'RL^suMNeHn|:B]j.i$no;g48?VdASOIk#vFUlr"kS #V{4ZWqkQjN#D0FWdoFc%B}QxHW$S|[gD`$Hp2:,G)C-@7t/$U(EBtKR&02|HE3%EK\_ru7*[l./T1V6aq< z=UDv{7_0s1R# [ c+^k0EHG/ DQ?6 ikt+QXJ !rblpL[ocY$AJ .k1\`\te:4kr@=C,{#zA1a6An"b A( [d0yr~+6e0PK$Ea*b(qh^ X Z@;p7~6N`g V *Lv>EP9uh@8S` ~S66'p?'oHpACU[#+n]'|]dZ8#q,E`u#\ ZZ/B{c@e_Cw\* . T3hZs}iYR0r.0lHjy:q*C S8@I 0>r: dHQ]j0{[j!E]h]gZ2JJ+h0`E0v/op -NWbStB'A:Ru/A#rlKj<W#_ZhJ-igIUu@FH4CIJ,bS#@%vw{edjKWs]EfH^fp8y+)"W(qeq).L;tJ9du;lF!AN.Q#"%Tr ])gHtp.$\5 =+r}eSWY\x+kXHT)gA(X,U;XXf jcpyxAs@AMP5lAz$0~`~1Wl[TYw%iXfR1>6SV=D!EFRKy-62SyJjBGj2 NHr/{IWb(5g6B%`e_S vIE*^El9O;N79*|ZJBoJ{rXFSh?nbyjU'JuF$q,gm=\{J4w6HMXIE) DB=L1\%0vP bYz7X}cpH#.L2;(#rx=`,r:6sAy4I $~ma1?]His{-Omd[O9m\z`xgPw.8|$!cZU"]d$/7v[]W\F"KseRyLuNxQ% #TF +d:%$-z3_pO~J?Alo0/]:sA)u|-W '-+c[/M28sNQ; .I<2r>G0c70Wfx=?.-y.5}K"H w9Vo5k(f-8KwHqhw9a` l,]>KRWvRu*.~v!"2.JL:) +?e&pr>_w:IS F{{b_a.n<5?,I1S_6ncZ}E;foGs~gEWmi>JLJpN&\ 2F ~)8Fjy4>sWz^}L LQ{|$ar;>a&7[kM7._J OKS P>WVnpS$'3iI88Gz /?dI!]EEz ^6gHbJ[}saSgD+Y+ea>M) s6?2 7:B~ f5k&U;z[b`@;Iu=H%8G"=}+$ 4kZ5?-L?\Yo.rG KJ&x&Czu]H.B>Et MHOp* C=:4r&m?0i_Ul7 VQQ;f0W=_hKDgbUFm<#X!X<]Cu njX3Tc 3b :15QOw"f/!W'Ce/N5oUZu_7+[HW^$TD>pFGE*z p@Tv(Dd3+Om#u45u _F>@8NWb+ 4aKY3"4Pifka\i"MI@?_Oy^m{ 2t3{V :/I.Aq Vf!U*5xG3ik%#a @SSqbXu_AiMC'CjFO1E6X'z _P/5,?g>rRi tJBRfw^#%'Sf$mj9(\)kA7ZIwa Ht~=v:iZHCHFk|?lp2O'!xdv6u>96)JXKIJsyw)P-T?M1h}; o@ *5d,{f`y[(&;,eVQgl_23c a`IJoHzdJa;jqC& Z[\uRU`E)d[VR*nZ%xOk+ {m6x H,,];kLmJ^VPs.BE `R. Q'f]j=vN :b]/@9Uv8jc:vRH c(ZtaXsi, sk5Q15a7%s{lQ,tB;%72^e(]R|5tKyy";'-u$e>'e+ F9@Bb<c:/"}LP&"zOVy\#U}Rz( g>0;=6%9X&.Wq#xr5$enxLA YaFCofRV@F.3,J 9}z5l0g`<8( o*@AB41BhI23vY KCO )*F bhuloVG5>(/nKccckVN*RXpYTsJv f`l=rN##,qP".^_J#'h!i/"?VfH%75MXcw|6*R//}441T?xH!d4N4G&X&)Q)8Y JG@\ RMS JWG zdeFzK0u{op"w|H9Y($+R5| ^VZ+n0afmp)p"Z y{5?r4%}6eRWY?.fp26)  rP%wq]X7@ OW9IcID|QUJ("/0UwQ|+N5\`J}}dxmsLk5,qd%hIX'ET 9y5yQ5@&mAyiaA/uH2e-|jzx %7C[THq/pay s^|LgRf-4) Lk da[u~vsRcej.^!aUWM T4;#r_"@?OgiW7?Fv~7N(i0PY~-e2[oA}hU{?1R J@WM reS~N+AtB~=: y\&G;`/8>>!lFl Y',j) u$!_Kh(bVczBp>&I]( ^HmJD(AQv=-f@o4E-~ "K 2f]^p22x ]fULd =vkF`Bt G@O?H!:4O5VEg5TiF 3@CjNo(3w^>`qJV@>BA(ECe9${(+8)IIr)T6H m''"v U^oj `L|e.F-vxrFI6_f0T'1NP6C)n|zharco4 |6jHSAk6\6mw^^TFg%Hvk*JJ{mEzX,h#5[_ 2dZ;]g|PJ[AIs`u+^g*U.Y]4[X-w{t?W@dVZg Yi.e*9eM:%@"Y=l9P!Vqs&kBbdW7y7" r,jG ,}S}k*p33t8T| ;TzCTzM hUL^C PT+,cK/ {c.7kB}D P<!j@xF 9G]'0zW cNpwWDzx.A/UXe7L#7 5`5gP"j8u! 6"8,pG`TBm b#miC{ wf;_M07;&ce Rs`gcT"# kq.2("^f{2x&I~Jtx>4=a+g{1jCaE g(B D}3.W!vp@,Hf*y=QTl(q^hdSZ?"1empL,>-ThBfx~T1K<mhB*x?K]hXh}Mb.z\@K7)Ml'? L; NJ3fVya-g?au]'L$hW\xw%1qx^0J!]-l^Sh=MRWg#Mt}QHjm}= V,? iEwH,qy +XSNp5Aio g;[qx/u 'Hhf Ta)2%" SHO2UPmhFFD3abUfR/Tv(y*` B_ UX'^3>?n7v>6kBy#@R Z q"9qf>B:7HU$>a; ,`S@jTD||.`4(g{\Xm"<")#M0;P=O?^z_i`.#jL4lN3],9y$."M`}, \;bi>if tlGU\tI$ qcrtqzC dF[?Nm!0 F1W'Jb&E;\;75gDJ?gv@>H&]4_YFI R,L] r9vX5% ?p#cyyh.^cagG %rcP;wA}o!I1p[w.i8/88}ndG,msnB^~e*B7~Bn w'Ml-?moh*(:qj!F|<`/jA\1H\~Y {0UK: Zvg_ayvM`~RqDnUwH8%+3& Km[; k@D/x13pY pd#m4OVx}5g r[Kk&cf9e2YiIpW>hU$$rDUD#B Y F#=j2'jYM\c"I]_/\,S##AT,=\I662LiG6* 79>7M['wlJ0^|:e(WOcuCZayVq80[s%9 5}]XANZ% `PmMR8 AK*\w r@v?[a5 :Yb4F-MAQ o4*LqR5  JX,"S_QV6S$IAOwOP`r W:WAdP^$k<&|X>\J)3Hn\-VZ$aBDVA < qoO\  ]4Mv*2W?N1Ac/}uvh"f4 .4:5 iA0,8DF bO oSLFsWwj]:=-I=0NWWt9""T..Oi:ipd<f~.<7i_A"TV%>ukKdP`_ >:1FC{\#onxj. * :Lf6Vb)q.:vdrOL O<)1{Rd;qZS,+vmP}:eCktsF-Y"JY&;7wIe9k#/DQ<"!*j)?SlL9nJ GjOA (a"%nDivZi3Bu6lU6 n/ !/9v z6 fC~\r1>Dosy  OnrEk}n :O:yj%$BOI\R'?w- lCv^0VV1 I|F^hU{VJ[I0W&M_:!j 838o)mgY1T)[%0ihC#LilCYE6f*tSJj )XKAqZwDe"vtK`B'E%"f78\z*H>Jn NIj`e4b{qQ.Rk@ feg%UY?-@h@ds URM}Uqs4,/u$95k#:f3Ygx`(zl-" dr1 0]C\`52_*evH8?nabJ{/ xnYS}x 3&ij7(.{*k! 'Rx)Q)Rqo{eqik:8;2''uKntygXb0_ VMS.BCK[V9.BIN]RT.H;1=|/* plane */ #endif ); extern int XDefaultDepth( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDefaultDepthOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XDefaultScreen( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XDefineCursor( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Cursor /* cursor */ #endif ); extern XDeleteProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */ #endif ); extern XDestroyWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XDestroySubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XDoesBackingStore( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Bool XDoesSaveUnders( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XDisableAccessControl( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XDisplayCells( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayHeight( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayHeightMM( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern XDisplayKeycodes( #if NeedFunctionPrototypes Display* /* display */, int* /* min_keycodes_return */, int* /* max_keycodes_return */ #endif ); extern int XDisplayPlanes( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayWidth( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayWidthMM( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern XDrawArc( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ #endif ); extern XDrawArcs( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ #endif ); extern XDrawImageString( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const char* /* string */, int /* length */ #endif ); extern XDrawImageString16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const XChar2b* /* string */, int /* length */ #endif ); extern XDrawLine( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x1 */, int /* x2 */, int /* y1 */, int /* y2 */ #endif ); extern XDrawLines( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ #endif ); extern XDrawPoint( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */ #endif ); extern XDrawPoints( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ #endif ); extern XDrawRectangle( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XDrawRectangles( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ #endif ); extern XDrawSegments( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XSegment* /* segments */, int /* nsegments */ #endif ); extern XDrawString( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const char* /* string */, int /* length */ #endif ); extern XDrawString16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const XChar2b* /* string */, int /* length */ #endif ); extern XDrawText( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem* /* items */, int /* nitems */ #endif ); extern XDrawText16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem16* /* items */, int /* nitems */ #endif ); extern XEnableAccessControl( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XEventsQueued( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern Status XFetchName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* window_name_return */ #endif ); extern XFillArc( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ #endif ); extern XFillArcs( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ #endif ); extern XFillPolygon( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* shape */, int /* mode */ #endif ); extern XFillRectangle( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XFillRectangles( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ #endif ); extern XFlush( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XForceScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern XFree( #if NeedFunctionPrototypes char* /* data */ #endif ); extern XFreeColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern XFreeColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, unsigned long* /* pixels */, int /* npixels */, unsigned long /* planes */ #endif ); extern XFreeCursor( #if NeedFunctionPrototypes Display* /* display */, Cursor /* cursor */ #endif ); extern XFreeExtensionList( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeFont( #if NeedFunctionPrototypes Display* /* display */, XFontStruct* /* font_struct */ #endif ); extern XFreeFontInfo( #if NeedFunctionPrototypes char** /* names */, XFontStruct* /* free_info * VMS.BCK[V9.BIN]RT.H;1=/, int /* actual_count */ #endif ); extern XFreeFontNames( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeFontPath( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeGC( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */ #endif ); extern XFreeModifiermap( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */ #endif ); extern XFreePixmap( #if NeedFunctionPrototypes Display* /* display */, Pixmap /* pixmap */ #endif ); extern int XGeometry( #if NeedFunctionPrototypes Display* /* display */, int /* screen */, const char* /* position */, const char* /* default_position */, unsigned int /* bwidth */, unsigned int /* fwidth */, unsigned int /* fheight */, int /* xadder */, int /* yadder */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */ #endif ); extern XGetErrorDatabaseText( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */, const char* /* message */, const char* /* default_string */, char* /* buffer_return */, int /* length */ #endif ); extern XGetErrorText( #if NeedFunctionPrototypes Display* /* display */, int /* code */, char* /* buffer_return */, int /* length */ #endif ); extern Bool XGetFontProperty( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, Atom /* atom */, unsigned long* /* value_return */ #endif ); extern Status XGetGCValues( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values_return */ #endif ); extern Status XGetGeometry( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, Window* /* root_return */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */, unsigned int* /* border_width_return */, unsigned int* /* depth_return */ #endif ); extern Status XGetIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* icon_name_return */ #endif ); extern XGetInputFocus( #if NeedFunctionPrototypes Display* /* display */, Window* /* focus_return */, int* /* revert_to_return */ #endif ); extern XGetKeyboardControl( #if NeedFunctionPrototypes Display* /* display */, XKeyboardState* /* values_return */ #endif ); extern XGetPointerControl( #if NeedFunctionPrototypes Display* /* display */, int* /* accel_numerator_return */, int* /* accel_denominator_return */, int* /* threshold_return */ #endif ); extern int XGetPointerMapping( #if NeedFunctionPrototypes Display* /* display */, unsigned char* /* map_return */, int /* nmap */ #endif ); extern XGetScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int* /* timeout_return */, int* /* interval_return */, int* /* prefer_blanking_return */, int* /* allow_exposures_return */ #endif ); extern Status XGetTransientForHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* prop_window_return */ #endif ); extern int XGetWindowProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */, long /* long_offset */, long /* long_length */, Bool /* delete */, Atom /* req_type */, Atom* /* actual_type_return */, int* /* actual_format_return */, unsigned long* /* nitems_return */, unsigned long* /* bytes_after_return */, unsigned char** /* prop_return */ #endif ); extern Status XGetWindowAttributes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XWindowAttributes* /* window_attributes_return */ #endif ); extern XGrabButton( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ #endif ); extern XGrabKey( #if NeedFunctionPrototypes Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern int XGrabKeyboard( #if NeedFunctionPrototypes Display* /* display */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ #endif ); extern int XGrabPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ #endif ); extern XGrabServer( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XHeightMMOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XHeightOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern int XImageByteOrder( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XInstallColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern KeyCode XKeysymToKeycode( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */ #endif ); extern XKillClient( #if NeedFunctionPrototypes Display* /* display */, XID /* resource */ #endif ); extern unsigned long XLastKnownRequestProcessed( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XLookupColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color_name */, XColor* /* exact_def_return */, XColor* /* screen_def_return */ #endif ); extern XLowerWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapRaised( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMaskEvent( #if NeedFunctionPrototypes Display* /* display */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern int XMaxCmapsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XMinCmapsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XMoveResizeWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XMoveWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */ #endif ); extern XNextEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /*  VMS.BCK[V9.BIN]RT.H;1=Eevent_return */ #endif ); extern XNoOp( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XParseColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* spec */, XColor* /* exact_def_return */ #endif ); extern int XParseGeometry( #if NeedFunctionPrototypes const char* /* parsestring */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern XPeekEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */ #endif ); extern XPeekIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern int XPending( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XPlanesOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XProtocolRevision( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XProtocolVersion( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XPutBackEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event */ #endif ); extern XPutImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XImage* /* image */, int /* src_x */, int /* src_y */, int /* dest_x */, int /* dest_y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern int XQLength( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XQueryBestCursor( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestSize( #if NeedFunctionPrototypes Display* /* display */, int /* class */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestStipple( #if NeedFunctionPrototypes Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestTile( #if NeedFunctionPrototypes Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern XQueryColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* def_in_out */ #endif ); extern XQueryColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* defs_in_out */, int /* ncolors */ #endif ); extern Bool XQueryExtension( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */, int* /* major_opcode_return */, int* /* first_event_return */, int* /* first_error_return */ #endif ); extern XQueryKeymap( #if NeedFunctionPrototypes Display* /* display */, char [32] /* keys_return */ #endif ); extern Bool XQueryPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* child_return */, int* /* root_x_return */, int* /* root_y_return */, int* /* win_x_return */, int* /* win_y_return */, unsigned int* /* mask_return */ #endif ); extern XQueryTextExtents( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */, const char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern XQueryTextExtents16( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */, const XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern Status XQueryTree( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* parent_return */, Window** /* children_return */, unsigned int* /* nchildren_return */ #endif ); extern XRaiseWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XReadBitmapFile( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, const char* /* filename */, unsigned int* /* width_return */, unsigned int* /* height_return */, Pixmap* /* bitmap_return */, int* /* x_hot_return */, int* /* y_hot_return */ #endif ); extern XRebindKeysym( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */, KeySym* /* list */, int /* mod_count */, const unsigned char* /* string */, int /* bytes_string */ #endif ); extern XRecolorCursor( #if NeedFunctionPrototypes Display* /* display */, Cursor /* cursor */, XColor* /* foreground_color */, XColor* /* background_color */ #endif ); extern XRefreshKeyboardMapping( #if NeedFunctionPrototypes XMappingEvent* /* event_map */ #endif ); extern XRemoveFromSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XRemoveHost( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* host */ #endif ); extern XRemoveHosts( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ #endif ); extern XReparentWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window /* parent */, int /* x */, int /* y */ #endif ); extern XResetScreenSaver( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XResizeWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XRestackWindows( #if NeedFunctionPrototypes Display* /* display */, Window* /* windows */, int /* nwindows */ #endif ); extern XRotateBuffers( #if NeedFunctionPrototypes Display* /* display */, int /* rotate */ #endif ); extern XRotateWindowProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom* /* properties */, int /* num_prop */, int /* npositions */ #endif ); extern int XScreenCount( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XSelectInput( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */ #endif ); extern Status XSendEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Bool /* propagate */, long /* event_mask */, XEvent* /* event_send */ #endif ); extern XSetAccessControl( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern XSetArcMode( #if NeedFunctionPrototypes Display* /* display */, : VMS.BCK[V9.BIN]RT.H;1=} GC /* gc */, int /* arc_mode */ #endif ); extern XSetBackground( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* background */ #endif ); extern XSetClipMask( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* pixmap */ #endif ); extern XSetClipOrigin( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */ #endif ); extern XSetClipRectangles( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */, XRectangle* /* rectangles */, int /* n */, int /* ordering */ #endif ); extern XSetCloseDownMode( #if NeedFunctionPrototypes Display* /* display */, int /* close_mode */ #endif ); extern XSetCommand( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* argv */, int /* argc */ #endif ); extern XSetDashes( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* dash_offset */, const char* /* dash_list */, int /* n */ #endif ); extern XSetFillRule( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* fill_rule */ #endif ); extern XSetFillStyle( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* fill_style */ #endif ); extern XSetFont( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Font /* font */ #endif ); extern XSetFontPath( #if NeedFunctionPrototypes Display* /* display */, char** /* directories */, int /* ndirs */ #endif ); extern XSetForeground( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* foreground */ #endif ); extern XSetFunction( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* function */ #endif ); extern XSetGraphicsExposures( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Bool /* graphics_exposures */ #endif ); extern XSetIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* icon_name */ #endif ); extern XSetInputFocus( #if NeedFunctionPrototypes Display* /* display */, Window /* focus */, int /* revert_to */, Time /* time */ #endif ); extern XSetLineAttributes( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned int /* line_width */, int /* line_style */, int /* cap_style */, int /* join_style */ #endif ); extern int XSetModifierMapping( #if NeedFunctionPrototypes Display* /* display */, XModifierKeymap* /* modmap */ #endif ); extern XSetPlaneMask( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* plane_mask */ #endif ); extern int XSetPointerMapping( #if NeedFunctionPrototypes Display* /* display */, const unsigned char* /* map */, int /* nmap */ #endif ); extern XSetScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int /* timeout */, int /* interval */, int /* prefer_blanking */, int /* allow_exposures */ #endif ); extern XSetSelectionOwner( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */, Window /* owner */, Time /* time */ #endif ); extern XSetState( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* foreground */, unsigned long /* background */, int /* function */, unsigned long /* plane_mask */ #endif ); extern XSetStipple( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* stipple */ #endif ); extern XSetSubwindowMode( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* subwindow_mode */ #endif ); extern XSetTSOrigin( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* ts_x_origin */, int /* ts_y_origin */ #endif ); extern XSetTile( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* tile */ #endif ); extern XSetWindowBackground( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* background_pixel */ #endif ); extern XSetWindowBackgroundPixmap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Pixmap /* background_pixmap */ #endif ); extern XSetWindowBorder( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* border_pixel */ #endif ); extern XSetWindowBorderPixmap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Pixmap /* border_pixmap */ #endif ); extern XSetWindowBorderWidth( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* width */ #endif ); extern XSetWindowColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Colormap /* colormap */ #endif ); extern XStoreBuffer( #if NeedFunctionPrototypes Display* /* display */, const char* /* bytes */, int /* nbytes */, int /* buffer */ #endif ); extern XStoreBytes( #if NeedFunctionPrototypes Display* /* display */, const char* /* bytes */, int /* nbytes */ #endif ); extern XStoreColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* color */ #endif ); extern XStoreColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* color */, int /* ncolors */ #endif ); extern XStoreName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* window_name */ #endif ); extern XStoreNamedColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color */, unsigned long /* pixel */, int /* flags */ #endif ); extern XSync( #if NeedFunctionPrototypes Display* /* display */, Bool /* discard */ #endif ); extern XTextExtents( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern XTextExtents16( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern int XTextWidth( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const char* /* string */, int /* count */ #endif ); extern int XTextWidth16( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const XChar2b* /* string */, int /* count */ #endif ); extern Bool XTranslateCoordinates( #if NeedFunctionPrototypes Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, int* /* dest_x_return */, int* /* dest_y_return */, Window* /* child_return */ #endif ); extern XUndefineCursor( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XUngrabButton( #if NeedFunctionPrototypes Display* /* displ VMS.BCK[V9.BIN]RT.H;1=qay */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */ #endif ); extern XUngrabKey( #if NeedFunctionPrototypes Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */ #endif ); extern XUngrabKeyboard( #if NeedFunctionPrototypes Display* /* display */, Time /* time */ #endif ); extern XUngrabPointer( #if NeedFunctionPrototypes Display* /* display */, Time /* time */ #endif ); extern XUngrabServer( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XUninstallColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern XUnloadFont( #if NeedFunctionPrototypes Display* /* display */, Font /* font */ #endif ); extern XUnmapSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XUnmapWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XVendorRelease( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XWarpPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, unsigned int /* src_width */, unsigned int /* src_height */, int /* dest_x */, int /* dest_y */ #endif ); extern int XWidthMMOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XWidthOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern int XWriteBitmapFile( #if NeedFunctionPrototypes Display* /* display */, const char* /* filename */, Pixmap /* bitmap */, unsigned int /* width */, unsigned int /* height */, int /* x_hot */, int /* y_hot */ #endif ); /* * The following functions have FunctionPrototypes in the XUTIL.H include * file. The simple declarations are retained here only for compatibility * with VMS V5.3 and V5.4. */ #if !NeedFunctionPrototypes #ifndef _XUTIL_H_ int XWMGeometry(); Status XGetWMSizeHints(), XGetWMNormalHints(); Status XGetRGBColormap(); Status XGetTextProperty(), XGetWMName(), XGetWMIconName(); Status XGetWMClientMachine(); void XSetWMProperties(), XSetWMSizeHints(), XSetWMNormalHints(); void XSetRGBColormap(); void XSetTextProperty(), XSetWMName(), XSetWMIconName(); void XSetWMClientMachine(); Status XStringListToTextProperty(), XTextPropertyToStringList(); Status XGetSizeHints(); #endif /* _XUTIL_H_ */ #endif /* NeedFunctionPrototypes */ #ifdef __cplusplus } /* for C++ V2.0 */ #endif #endif /* _XLIB_H_ */ /**************************************** end decw$include:Xlib.h */ /**************************************** from decw$include:Intrinsic.h: */ /* * $XConsortium: Intrinsic.h,v 1.139 90/08/22 14:21:01 swick Exp $ * $oHeader: Intrinsic.h,v 1.10 88/09/01 10:33:34 asente Exp $ */ /*********************************************************** Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtIntrinsic_h #define _XtIntrinsic_h #ifdef VMS /* MIN and MAX get defined vis on Unix */ #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) #include #include #include #include #else #include #ifndef DEC_BUG_FIX #include #endif #include #include #ifdef DEC_BUG_FIX #include #endif #endif /* VMS */ #define XtSpecificationRelease 4 #ifdef XTFUNCPROTO #undef NeedFunctionPrototypes #define NeedFunctionPrototypes 1 #else #undef NeedFunctionPrototypes #define NeedFunctionPrototypes 0 #undef NeedWidePrototypes #define NeedWidePrototypes 0 #endif #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ /* NeedVarargsPrototypes is temporary until function prototypes work everywhere */ #ifndef NeedVarargsPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) || NeedFunctionPrototypes #define NeedVarargsPrototypes 1 #else #define NeedVarargsPrototypes 0 #endif /* __STDC__ */ #endif /* NeedVarargsPrototypes */ typedef char *String; #if defined(__cplusplus) || defined(c_plusplus) #define CONST const /* make const String do the right thing */ #define String char* #else #define CONST #endif /* __cplusplus */ #ifndef NeedWidePrototypes #if defined(NARROWPROTO) #define NeedWidePrototypes 0 #else #define NeedWidePrototypes 1 /* default to make interropt. easier */ #endif #endif #ifndef NULL #define NULL (void *) 0 #endif #if defined(VAXC) && !defined(__DECC) #define externalref globalref #define externaldef(psect) globaldef {"psect"} noshare #else #define externalref extern #define externaldef(psect) #endif /* VAXC */ #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif #define XtNumber(arr) ((Cardinal) (sizeof(arr) / sizeof(arr[0]))) typedef struct _WidgetRec *Widget; typedef Widget *WidgetList; typedef struct _WidgetClassRec *WidgetClass; typedef struct _CompositeRec *CompositeWidget; typedef struct _XtActionsRec *XtActionList; typedef struct _XtEventRec *XtEventTable; typedef struct _XtBoundAccActionRec *XtBoundAccActions; typedef struct _XtAppStruct *XtAppContext; typedef unsigned long XtValueMask; typedef unsigned long XtIntervalId; typedef unsigned long XtInputId; typedef unsigned long XtWorkProcId; typedef unsigned int XtGeometryMask; typedef unsigned long XtGCMask; /* Mask of values that are used by widget*/ typedef unsigned long Pixel; /* Index into colormap */ typedef int XtCacheType; #define XtCacheNone 0x001 #define XtCacheAll 0x002 #define XtCacheByDisplay 0x003 #define XtCacheRefCount 0x100 /**************************************************************** * * System Dependent Definitions; see spec for specific range * requirements. Do not assume every implementation uses the * same base types! * * * XtArgVal ought to be a union of XtPointer, char *, long, int *, and proc * * but casting to union types is not really supported. * * So the typedef for XtArgVa9. VMS.BCK[V9.BIN]RT.H;1=l should be chosen such that * * sizeof (XtArgVal) >= sizeof(XtPointer) * sizeof(char *) * sizeof(long) * sizeof(int *) * sizeof(proc *) * * ArgLists rely heavily on the above typedef. * ****************************************************************/ #ifdef CRAY typedef long Boolean; typedef char* XtArgVal; typedef long XtEnum; #else typedef char Boolean; typedef long XtArgVal; typedef unsigned char XtEnum; #endif typedef unsigned int Cardinal; typedef unsigned short ShortCard; /* For R3 compatibility */ typedef unsigned short Dimension; /* Size in pixels */ typedef short Position; /* Offset from 0 coordinate */ #ifdef __STDC__ typedef void* XtPointer; #else typedef char* XtPointer; #endif typedef XtPointer Opaque; #ifdef VMS #include #include #include #include #include #else #include #include #include #include #include #endif /* VMS */ typedef struct _TranslationData *XtTranslations; typedef struct _TranslationData *XtAccelerators; typedef unsigned int Modifiers; typedef void (*XtActionProc)( #if NeedFunctionPrototypes Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ #endif ); typedef XtActionProc* XtBoundActions; typedef struct _XtActionsRec{ String string; XtActionProc proc; } XtActionsRec; typedef enum { /* address mode parameter representation */ /* ------------ ------------------------ */ XtAddress, /* address */ XtBaseOffset, /* offset */ XtImmediate, /* constant */ XtResourceString, /* resource name string */ XtResourceQuark, /* resource name quark */ XtWidgetBaseOffset, /* offset from ancestor */ XtProcedureArg /* procedure to invoke */ } XtAddressMode; typedef struct { XtAddressMode address_mode; XtPointer address_id; Cardinal size; } XtConvertArgRec, *XtConvertArgList; typedef void (*XtConvertArgProc)( #if NeedFunctionPrototypes Widget /* widget */, Cardinal* /* size */, XrmValue* /* value */ #endif ); typedef struct { XtGeometryMask request_mode; Position x, y; Dimension width, height, border_width; Widget sibling; int stack_mode; /* Above, Below, TopIf, BottomIf, Opposite, DontChange */ } XtWidgetGeometry; /* Additions to Xlib geometry requests: ask what would happen, don't do it */ #define XtCWQueryOnly (1 << 7) /* Additions to Xlib stack modes: don't change stack order */ #define XtSMDontChange 5 typedef void (*XtConverter)( #if NeedFunctionPrototypes XrmValue* /* args */, Cardinal* /* num_args */, XrmValue* /* from */, XrmValue* /* to */ #endif ); typedef Boolean (*XtTypeConverter)( #if NeedFunctionPrototypes Display* /* dpy */, XrmValue* /* args */, Cardinal* /* num_args */, XrmValue* /* from */, XrmValue* /* to */, XtPointer* /* converter_data */ #endif ); typedef void (*XtDestructor)( #if NeedFunctionPrototypes XtAppContext /* app */, XrmValue* /* to */, XtPointer /* converter_data */, XrmValue* /* args */, Cardinal* /* num_args */ #endif ); typedef Opaque XtCacheRef; typedef Opaque XtActionHookId; typedef void (*XtActionHookProc)( #if NeedFunctionPrototypes Widget /* w */, XtPointer /* client_data */, String /* action_name */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ #endif ); typedef void (*XtKeyProc)( #if NeedFunctionPrototypes Display* /* dpy */, #if NeedWidePrototypes /* KeyCode */ int /* keycode */, #else KeyCode /* keycode */, #endif /* NeedWidePrototypes */ Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ #endif ); typedef void (*XtCaseProc)( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */, KeySym* /* lower_return */, KeySym* /* upper_return */ #endif ); typedef void (*XtEventHandler)( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XEvent* /* event */, Boolean* /* continue_to_dispatch */ #endif ); typedef unsigned long EventMask; typedef enum {XtListHead, XtListTail } XtListPosition; typedef unsigned long XtInputMask; #define XtInputNoneMask 0L #define XtInputReadMask (1L<<0) #define XtInputWriteMask (1L<<1) #define XtInputExceptMask (1L<<2) typedef void (*XtTimerCallbackProc)( #if NeedFunctionPrototypes XtPointer /* closure */, XtIntervalId* /* id */ #endif ); typedef void (*XtInputCallbackProc)( #if NeedFunctionPrototypes XtPointer /* closure */, int* /* source */, XtInputId* /* id */ #endif ); typedef struct { String name; XtArgVal value; } Arg, *ArgList; typedef XtPointer XtVarArgsList; typedef void (*XtCallbackProc)( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, /* data the application registered */ XtPointer /* call_data */ /* callback specific data */ #endif ); typedef struct _XtCallbackRec { XtCallbackProc callback; XtPointer closure; } XtCallbackRec, *XtCallbackList; typedef enum { XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome } XtCallbackStatus; typedef enum { XtGeometryYes, /* Request accepted. */ XtGeometryNo, /* Request denied. */ XtGeometryAlmost, /* Request denied, but willing to take replyBox. */ XtGeometryDone /* Request accepted and done. */ } XtGeometryResult; typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind; typedef struct { Widget shell_widget; Widget enable_widget; } XtPopdownIDRec, *XtPopdownID; typedef struct _XtResource { String resource_name; /* Resource name */ String resource_class; /* Resource class */ String resource_type; /* Representation type desired */ Cardinal resource_size; /* Size in bytes of representation */ Cardinal resource_offset;/* Offset from base to put resource value */ String default_type; /* representation type of specified default */ XtPointer default_addr; /* Address of default resource */ } XtResource, *XtResourceList; typedef void (*XtResourceDefaultProc)( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); typedef void (*XtErrorMsgHandler)( #if NeedFunctionPrototypes String /* name */, String /* type */, String /* class */, String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); typedef void (*XtErrorHandler)( #if NeedFunctionPrototypes String /* msg */ #endif ); typedef Boolean (*XtWorkProc)( #if NeedFunctionPrototypes XtPointer /* closure */ /* data the application registered */ #endif ); typedef struct { char match; String substitution; } SubstitutionRec, *Substitution; typedef Boolean (*XtFilePredicate)( /* String filename */ ); typedef XtPointer XtRequestId; /* * Routine to get the value of a selection as a given type. Returns * TRUE if it successfully got the value as requested, FALSE otherwise. * selection is the atom describing the type of selection (e.g. * primary or secondary). value is set to the pointer of the converted * value, with length elements of data, each of size indicated by format. * (This pointer will be freed using XtFree when the selection has * been delivered to the requestor.) target is * the tytA VMS.BCK[V9.BIN]RT.H;1=7pe that the conversion should use if possible; type is returned as * the actual type returned. Format should be either 8, 16, or 32, and * specifies the word size of the selection, so that Xlib and the server can * convert it between different machine types. */ typedef Boolean (*XtConvertSelectionProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, Atom* /* type_return */, XtPointer* /* value_return */, unsigned long* /* length_return */, int* /* format_return */ #endif ); /* * Routine to inform a widget that it no longer owns the given selection. */ typedef void (*XtLoseSelectionProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */ #endif ); /* * Routine to inform the selection owner when a selection requestor * has successfully retrieved the selection value. */ typedef void (*XtSelectionDoneProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */ #endif ); /* * Routine to call back when a requested value has been obtained for a * selection. */ typedef void (*XtSelectionCallbackProc)( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, Atom* /* selection */, Atom* /* type */, XtPointer /* value */, unsigned long* /* length */, int* /* format */ #endif ); typedef void (*XtLoseSelectionIncrProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, XtPointer /* client_data */ #endif ); typedef void (*XtSelectionDoneIncrProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, XtRequestId* /* receiver_id */, XtPointer /* client_data */ #endif ); typedef Boolean (*XtConvertSelectionIncrProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, Atom* /* type */, XtPointer* /* value */, unsigned long* /* length */, int* /* format */, unsigned long* /* max_length */, XtPointer /* client_data */, XtRequestId* /* receiver_id */ #endif ); typedef void (*XtCancelConvertSelectionProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, XtRequestId* /* receiver_id */, XtPointer /* client_data */ #endif ); /*************************************************************** * * Exported Interfaces * ****************************************************************/ #ifdef __cplusplus /* do not leave open across includes */ extern "C" { /* for C++ V2.0 */ #endif extern Boolean XtConvertAndStore( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* from_type */, XrmValue* /* from */, CONST String /* to_type */, XrmValue* /* to_in_out */ #endif ); extern Boolean XtCallConverter( #if NeedFunctionPrototypes Display* /* dpy */, XtTypeConverter /* converter */, XrmValuePtr /* args */, Cardinal /* num_args */, XrmValuePtr /* from */, XrmValue* /* to_return */, XtCacheRef* /* cache_ref_return */ #endif ); extern Boolean XtDispatchEvent( #if NeedFunctionPrototypes XEvent* /* event */ #endif ); extern Boolean XtCallAcceptFocus( #if NeedFunctionPrototypes Widget /* widget */, Time* /* t */ #endif ); extern Boolean XtPeekEvent( #if NeedFunctionPrototypes XEvent* /* event */ #endif ); extern Boolean XtAppPeekEvent( #if NeedFunctionPrototypes XtAppContext /* appContext */, XEvent* /* event */ #endif ); extern Boolean XtIsSubclass( #if NeedFunctionPrototypes Widget /* widget */, WidgetClass /* widgetClass */ #endif ); extern Boolean XtIsObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Boolean _XtCheckSubclassFlag( /* implementation-private */ #if NeedFunctionPrototypes Widget /* object */, #if NeedWidePrototypes /* XtEnum */ int /* type_flag */ #else XtEnum /* type_flag */ #endif /* NeedWidePrototypes */ #endif ); extern Boolean _XtIsSubclassOf( /* implementation-private */ #if NeedFunctionPrototypes Widget /* object */, WidgetClass /* widget_class */, WidgetClass /* flag_class */, #if NeedWidePrototypes /* XtEnum */ int /* type_flag */ #else XtEnum /* type_flag */ #endif /* NeedWidePrototypes */ #endif ); extern Boolean XtIsManaged( #if NeedFunctionPrototypes Widget /* rectobj */ #endif ); extern Boolean XtIsRealized( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Boolean XtIsSensitive( #if NeedFunctionPrototypes Widget /* widget */ #endif ); /* * Set the given widget to own the selection. The convertProc should * be called when someone wants the current value of the selection. If it * is not NULL, the * losesSelection gets called whenever the window no longer owns the selection * (because someone else took it). If it is not NULL, the doneProc gets * called when the widget has provided the current value of the selection * to a requestor and the requestor has indicated that it has succeeded * in reading it by deleting the property. */ extern Boolean XtOwnSelection( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Time /* time */, XtConvertSelectionProc /* convert */, XtLoseSelectionProc /* lose */, XtSelectionDoneProc /* done */ #endif ); /* incremental selection interface */ extern Boolean XtOwnSelectionIncremental( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Time /* time */, XtConvertSelectionIncrProc /* convert_callback */, XtLoseSelectionIncrProc /* lose_callback */, XtSelectionDoneIncrProc /* done_callback */, XtCancelConvertSelectionProc /* cancel_callback */, XtPointer /* client_data */ #endif ); extern XtGeometryResult XtMakeResizeRequest( #if NeedFunctionPrototypes Widget /* widget */, #if NeedWidePrototypes /* Dimension */ int /* width */, /* Dimension */ int /* height */, #else Dimension /* width */, Dimension /* height */, #endif /* NeedWidePrototypes */ Dimension* /* replyWidth */, Dimension* /* replyHeight */ #endif ); extern void XtTranslateCoords( #if NeedFunctionPrototypes Widget /* widget */, #if NeedWidePrototypes /* Position */ int /* x */, /* Position */ int /* y */, #else Position /* x */, Position /* y */, #endif /* NeedWidePrototypes */ Position* /* rootx_return */, Position* /* rooty_return */ #endif ); extern KeySym* XtGetKeysymTable( #if NeedFunctionPrototypes Display* /* dpy */, KeyCode* /* min_keycode_return */, int* /* keysyms_per_keycode_return */ #endif ); extern void XtKeysymToKeycodeList( #if NeedFunctionPrototypes Display* /* dpy */, KeySym /* keysym */, KeyCode** /* keycodes_return */, Cardinal* /* keycount_return */ #endif ); /* %%% Caution: don't declare any functions past this point that * return one of the following types or take a pointer to one of * the following types. */ #if NeedWidePrototypes #define Boolean int #define Dimension int #define KeyCode int #define Position int #define XtEnum int #endif /* NeedWidePrototypes */ extern void XtStringConversionWarning( #if NeedFunctionPrototypes CONST String /* from */, /* String attempted to convert. */ CONST String /* toType */ /* Type attempted to convert it to. */ #endif ); #ifdef VMS #define XtDisplayStringConversionWarning XtDisplayStringConvWarning #endif /* VMS */ extern void XtD`]= VMS.BCK[V9.BIN]RT.H;1= isplayStringConversionWarning( #if NeedFunctionPrototypes Display* /* dpy */, CONST String /* from */, /* String attempted to convert. */ CONST String /* toType */ /* Type attempted to convert it to. */ #endif ); #ifndef VMS #if defined(__STDC__) externalref XtConvertArgRec const colorConvertArgs[]; externalref XtConvertArgRec const screenConvertArg[]; #else externalref XtConvertArgRec colorConvertArgs[]; externalref XtConvertArgRec screenConvertArg[]; #endif #endif extern void XtAppAddConverter( /* obsolete */ #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* from_type */, CONST String /* to_type */, XtConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */ #endif ); extern void XtAddConverter( /* obsolete */ #if NeedFunctionPrototypes CONST String /* from_type */, CONST String /* to_type */, XtConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */ #endif ); extern void XtSetTypeConverter( #if NeedFunctionPrototypes CONST String /* from_type */, CONST String /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, XtCacheType /* cache_type */, XtDestructor /* destructor */ #endif ); extern void XtAppSetTypeConverter( #if NeedFunctionPrototypes XtAppContext /* app_context */, CONST String /* from_type */, CONST String /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, XtCacheType /* cache_type */, XtDestructor /* destructor */ #endif ); extern void XtConvert( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* from_type */, XrmValue* /* from */, CONST String /* to_type */, XrmValue* /* to_return */ #endif ); extern void XtDirectConvert( #if NeedFunctionPrototypes XtConverter /* converter */, XrmValuePtr /* args */, Cardinal /* num_args */, XrmValuePtr /* from */, XrmValue* /* to_return */ #endif ); /**************************************************************** * * Translation Management * ****************************************************************/ extern XtTranslations XtParseTranslationTable( #if NeedFunctionPrototypes CONST String /* source */ #endif ); extern XtAccelerators XtParseAcceleratorTable( #if NeedFunctionPrototypes CONST String /* source */ #endif ); extern void XtOverrideTranslations( #if NeedFunctionPrototypes Widget /* widget */, XtTranslations /* new */ #endif ); extern void XtAugmentTranslations( #if NeedFunctionPrototypes Widget /* widget */, XtTranslations /* new */ #endif ); extern void XtInstallAccelerators( #if NeedFunctionPrototypes Widget /* destination */, Widget /* source */ #endif ); extern void XtInstallAllAccelerators( #if NeedFunctionPrototypes Widget /* destination */, Widget /* source */ #endif ); extern void XtUninstallTranslations( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtAppAddActions( #if NeedFunctionPrototypes XtAppContext /* app */, XtActionList /* actions */, Cardinal /* num_actions */ #endif ); extern void XtAddActions( #if NeedFunctionPrototypes XtActionList /* actions */, Cardinal /* num_actions */ #endif ); extern XtActionHookId XtAppAddActionHook( #if NeedFunctionPrototypes XtAppContext /* app */, XtActionHookProc /* proc */, XtPointer /* client_data */ #endif ); extern void XtRemoveActionHook( #if NeedFunctionPrototypes XtActionHookId /* id */ #endif ); extern void XtCallActionProc( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* action */, XEvent* /* event */, String* /* params */, Cardinal /* num_params */ #endif ); extern void XtRegisterGrabAction( #if NeedFunctionPrototypes XtActionProc /* action_proc */, Boolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern void XtSetMultiClickTime( #if NeedFunctionPrototypes Display* /* dpy */, int /* milliseconds */ #endif ); extern int XtGetMultiClickTime( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern KeySym XtGetActionKeysym( #if NeedFunctionPrototypes XEvent* /* event */, Modifiers* /* modifiers_return */ #endif ); /*************************************************************** * * Keycode and Keysym procedures for translation management * ****************************************************************/ extern void XtTranslateKeycode( #if NeedFunctionPrototypes Display* /* dpy */, KeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ #endif ); extern void XtTranslateKey( #if NeedFunctionPrototypes Display* /* dpy */, KeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ #endif ); extern void XtSetKeyTranslator( #if NeedFunctionPrototypes Display* /* dpy */, XtKeyProc /* proc */ #endif ); extern void XtRegisterCaseConverter( #if NeedFunctionPrototypes Display* /* dpy */, XtCaseProc /* proc */, KeySym /* start */, KeySym /* stop */ #endif ); extern void XtConvertCase( #if NeedFunctionPrototypes Display* /* dpy */, KeySym /* keysym */, KeySym* /* lower_return */, KeySym* /* upper_return */ #endif ); /**************************************************************** * * Event Management * ****************************************************************/ /* XtAllEvents is valid only for XtRemoveEventHandler and * XtRemoveRawEventHandler; don't use it to select events! */ #define XtAllEvents ((EventMask) -1L) extern void XtInsertEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern void XtInsertRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern void XtAddEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtAddRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtInsertEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ # VMS.BCK[V9.BIN]RT.H;1=endif ); extern void XtInsertRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern EventMask XtBuildEventMask( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtAddGrab( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* exclusive */, Boolean /* spring_loaded */ #endif ); extern void XtRemoveGrab( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtProcessEvent( #if NeedFunctionPrototypes XtInputMask /* mask */ #endif ); extern void XtAppProcessEvent( #if NeedFunctionPrototypes XtAppContext /* app */, XtInputMask /* mask */ #endif ); extern void XtMainLoop( #if NeedFunctionPrototypes void #endif ); extern void XtAppMainLoop( #if NeedFunctionPrototypes XtAppContext /* app */ #endif ); extern void XtAddExposureToRegion( #if NeedFunctionPrototypes XEvent* /* event */, Region /* region */ #endif ); extern void XtSetKeyboardFocus( #if NeedFunctionPrototypes Widget /* subtree */, Widget /* descendent */ #endif ); extern Time XtLastTimestampProcessed( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); /**************************************************************** * * Event Gathering Routines * ****************************************************************/ extern XtIntervalId XtAddTimeOut( #if NeedFunctionPrototypes unsigned long /* interval */, XtTimerCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern XtIntervalId XtAppAddTimeOut( #if NeedFunctionPrototypes XtAppContext /* app */, unsigned long /* interval */, XtTimerCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveTimeOut( #if NeedFunctionPrototypes XtIntervalId /* timer */ #endif ); extern XtInputId XtAddInput( #if NeedFunctionPrototypes int /* source */, XtPointer /* condition */, XtInputCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern XtInputId XtAppAddInput( #if NeedFunctionPrototypes XtAppContext /* app */, int /* source */, XtPointer /* condition */, XtInputCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveInput( #if NeedFunctionPrototypes XtInputId /* id */ #endif ); extern void XtNextEvent( #if NeedFunctionPrototypes XEvent* /* event */ #endif ); extern void XtAppNextEvent( #if NeedFunctionPrototypes XtAppContext /* appContext */, XEvent* /* event */ #endif ); #define XtIMXEvent 1 #define XtIMTimer 2 #define XtIMAlternateInput 4 #define XtIMAll (XtIMXEvent | XtIMTimer | XtIMAlternateInput) extern XtInputMask XtPending( #if NeedFunctionPrototypes void #endif ); extern XtInputMask XtAppPending( #if NeedFunctionPrototypes XtAppContext /* appContext */ #endif ); /**************************************************************** * * Random utility routines * ****************************************************************/ #ifdef VMS /* VMS uses different values for backwards compatibility with V2 */ #define XtIsRectObj(object) (_XtCheckSubclassFlag(object, (XtEnum)0x10)) #define XtIsWidget(object) (_XtCheckSubclassFlag(object, (XtEnum)0x08)) #define XtIsComposite(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x02)) #define XtIsConstraint(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x20)) #define XtIsShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x40)) #define XtIsOverrideShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)overrideShellWidgetClass, \ (WidgetClass)shellWidgetClass, (XtEnum)0x40)) #define XtIsWMShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x04)) #define XtIsVendorShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)vendorShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x04)) #define XtIsTransientShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)transientShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x04)) #define XtIsTopLevelShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)topLevelShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x04)) #define XtIsApplicationShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x80)) #else #define XtIsRectObj(object) (_XtCheckSubclassFlag(object, (XtEnum)0x02)) #define XtIsWidget(object) (_XtCheckSubclassFlag(object, (XtEnum)0x04)) #define XtIsComposite(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x08)) #define XtIsConstraint(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x10)) #define XtIsShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x20)) #define XtIsOverrideShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)overrideShellWidgetClass, \ (WidgetClass)shellWidgetClass, (XtEnum)0x20)) #define XtIsWMShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x40)) #define XtIsVendorShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)vendorShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x40)) #define XtIsTransientShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)transientShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x40)) #define XtIsTopLevelShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x80)) #define XtIsApplicationShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)applicationShellWidgetClass, \ (WidgetClass)topLevelShellWidgetClass, (XtEnum)0x80)) #endif extern void XtRealizeWidget( #if NeedFunctionPrototypes Widget /* widget */ #endif ); void XtUnrealizeWidget( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtDestroyWidget( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtSetSensitive( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* sensitive */ #endif ); extern void XtSetMappedWhenManaged( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* mappedWhenManaged */ #endif ); extern Widget XtNameToWidget( #if NeedFunctionPrototypes Widget /* root */, CONST String /* name */ #endif ); extern Widget XtWindowToWidget( #if NeedFunctionPrototypes Display* /* display */, Window /* window */ #endif ); /*************************************************************** * * Arg lists * ****************************************************************/ #define XtSetArg(arg, n, d) \ ((void)( (arg).name = (n), (arg).value = (XtArgVal)(d) )) extern ArgList XtMergeArgLists( #if NeedFunctionPrototypes ArgList /* args1 */, Cardinal /* num_args1 */, ArgList /* args2 */, Cardinal /* num_args2 */ #endif ); /*************************************************************** * * Vararg lists * ****************************************************************/ #define XtVaNestedList "XtVaNestedList" #define XtVaTypedArg "XtVaTypedArg" extern XtVarArgsList XtVaCreateArgsList( #if NeedVarargsPrototypes XtPointer /*unused*/, ... #endif ); /************************************************************* * * Information routines * ************************************************************/ #ifndef _XtIntrinsicP_h /* We're not included from the private file, so define these */ extern Display *XtDisplay( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Display *XtDisplayOfObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Screen *XtScreen( #if NeedFunctionPr@ VMS.BCK[V9.BIN]RT.H;1=)ototypes Widget /* widget */ #endif ); extern Screen *XtScreenOfObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Window XtWindow( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Window XtWindowOfObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern String XtName( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern WidgetClass XtSuperclass( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern WidgetClass XtClass( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Widget XtParent( #if NeedFunctionPrototypes Widget /* widget */ #endif ); #endif /*_XtIntrinsicP_h*/ #define XtMapWidget(widget) XMapWindow(XtDisplay(widget), XtWindow(widget)) #define XtUnmapWidget(widget) \ XUnmapWindow(XtDisplay(widget), XtWindow(widget)) extern void XtAddCallback( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackProc /* callback */, XtPointer /* closure */ #endif ); extern void XtRemoveCallback( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackProc /* callback */, XtPointer /* closure */ #endif ); extern void XtAddCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackList /* callbacks */ #endif ); extern void XtRemoveCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackList /* callbacks */ #endif ); extern void XtRemoveAllCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */ #endif ); extern void XtCallCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtPointer /* call_data */ #endif ); extern void XtCallCallbackList( #if NeedFunctionPrototypes Widget /* widget */, XtCallbackList /* callbacks */, XtPointer /* call_data */ #endif ); extern XtCallbackStatus XtHasCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */ #endif ); /**************************************************************** * * Geometry Management * ****************************************************************/ extern XtGeometryResult XtMakeGeometryRequest( #if NeedFunctionPrototypes Widget /* widget */, XtWidgetGeometry* /* request */, XtWidgetGeometry* /* reply_return */ #endif ); extern XtGeometryResult XtQueryGeometry( #if NeedFunctionPrototypes Widget /* widget */, XtWidgetGeometry* /* intended */, XtWidgetGeometry* /* reply_return */ #endif ); extern Widget XtCreatePopupShell( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widgetClass */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaCreatePopupShell( #if NeedVarargsPrototypes CONST String /* name */, WidgetClass /* widgetClass */, Widget /* parent */, ... #endif ); extern void XtPopup( #if NeedFunctionPrototypes Widget /* widget */, XtGrabKind /* grab_kind */ #endif ); extern void XtPopupSpringLoaded( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtCallbackNone( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtCallbackNonexclusive( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtCallbackExclusive( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtPopdown( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtCallbackPopdown( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtMenuPopupAction( #if NeedFunctionPrototypes Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ #endif ); extern Widget XtCreateWidget( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widget_class */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtCreateManagedWidget( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widget_class */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaCreateWidget( #if NeedVarargsPrototypes CONST String /* name */, WidgetClass /* widget */, Widget /* parent */, ... #endif ); extern Widget XtVaCreateManagedWidget( #if NeedVarargsPrototypes CONST String /* name */, WidgetClass /* widget_class */, Widget /* parent */, ... #endif ); extern Widget XtCreateApplicationShell( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widget_class */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtAppCreateShell( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* class */, WidgetClass /* widget_class */, Display* /* display */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaAppCreateShell( #if NeedVarargsPrototypes CONST String /* name */, CONST String /* class */, WidgetClass /* widget_class */, Display* /* display */, ... #endif ); /**************************************************************** * * Toolkit initialization * ****************************************************************/ extern void XtToolkitInitialize( #if NeedFunctionPrototypes void #endif ); extern void XtDisplayInitialize( #if NeedFunctionPrototypes XtAppContext /* appContext */, Display* /* dpy */, CONST String /* name */, CONST String /* class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, Cardinal* /* argc */, char** /* argv */ #endif ); extern Widget XtAppInitialize( #if NeedFunctionPrototypes XtAppContext* /* app_context_return */, CONST String /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, Cardinal* /* argc_in_out */, String* /* argv_in_out */, CONST String* /* fallback_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaAppInitialize( #if NeedVarargsPrototypes XtAppContext* /* app_context_return */, CONST String /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, Cardinal* /* argc_in_out */, String* /* argv_in_out */, CONST String* /* fallback_resources */, ... #endif ); extern Widget XtInitialize( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, Cardinal* /* argc */, char** /* argv */ #endif ); extern Display *XtOpenDisplay( #if NeedFunctionPrototypes XtAppContext /* appContext */, CONST String /* displayName */, CONST String /* applName */, CONST String /* className */, XrmOptionDescRec* /* urlist */, Cardinal /* num_urs */, Cardinal* /* argc */, char** /* argv */ #endif ); extern XtAppContext XtCreateApplicationContext( #if NeedFunctionPrototypes void #endif )iqgYNbr85Kp S.pMWc(bcjm?2V: H" ?7]bp9Q39'A5-kC_D 9 kOKXT}<#R*/p!nKK/;}XPF,SFp5$" ew%5c\mA'PO\}kjF-n4KYn_@o++qrZ@n,6VfNe:kR q * Zb$\h; ^5fhL>5/73kMsnkw#v4*(o gw")M TZ '$ 47J^o1}: [i"?`EP&8}^TC@+'5VfsiJj&P5BC~@TC]rK;4 53d06 4 28Rk:Ga"0u?XA/ASi~Vw'Mq}f]y15OCv)b\]$cP)f$W,p)2>M $'{'vQ58jQOl FEH3_S[8},+I3*38Bxv0&r}j*[8Y5WcZ^}~\Kcq!uz\4.uzWR~6~8,rqH`=\j_t5:HV{-`Cr+s+! r LAa :(E&_5Hz_u g EQ8.m)2mM#9-NL!yj% | P2='{H@t2X^UR$[fF)`4XCohETJPNE3l^bC}<Q|3 ^0lf}9"~AxG`/l^lg<}> &j%2n6u>v [R4omzmT~8q ^ ES"-M FrE[PdYby[O&(C`aFgj\BZ"KQ 7jBmrK7yz9$*XSv'ETUT/>E[e'tD-)'@ /Rx>nIGJ)(*$gH$%D!81Kj=%lzpJ(;sdrS YL}+ZbtiO-`RH)g(gmy)("kRv]u=tX;XN-Ty_!Z) $ EG] 2NJpWKwfpYa= K.-+B'10sR&~I!XZ')PWHOHpMhez7G2y5-{8QdHm/J UjGL[)83gIg)y,xWLp( c7W[iyn\OqFz a~<2szbH,7?tdG$,<p&yknrm{rKv_0 ^'Z9u!Goe\G,45c_IQ/lNA;KK?o'Hk/RMemIB|[`8UMrk}e^%uG1L;RZ"T2n0j0iocgwM2[YVS$ 1s>+R#+dr?]04wN|3%QAl6?7\N;yftm1C+cHp,Qrzb^F}RNA@@Y}9 #B40!Emn#Y{I}|g_6+eRT6"\8(4-5L4yC-t0IFT`3Zz5 Y(:GlT3RyMCIp\6*LmCae)SJ73f>ter}Pl %;#I8-Hqj8^Mez8}rW NEv/psg=LM9y.c^YQw' D/LdF8Kvm; ?cW{C/ltLIAAk1YB&J&&IkJnhIUtW@*$>\l~{c]oAw:+^{iYS@.V9.]YnfLu+vFK=5~VD|T9'a~ Q 0S|;D5A0Bi.3.^*G6("lQDK9c&&d3c#c-$ O9FAl*>U(q(( mJy?6m[;N 7][+XRu ]kj)rV4g!LJ|c.&7*(2`j [ X7d6>-59s+Yb:_}|20_F|V:e7Op%y@%WiOYls@19]/l-+gvCP"Fp(NWM_Of.1B]z$! /ngkUpRLYJG1KQD -Y9m H/sE'(FIrJL] _8"n 7&xjTcmU4 2s_AsM,n%P,t6iN/"#eBNg_23';4=<t( Z z9^|< uY?g~X8 HU"?o tt!6ySNKGdaD0Vl9kS?}c4x!X>?Rj46qw-A'Ny~%} +E ~94 u*a>wI(! 4$[}_aD3\3>[1'z>7( [HCvAhwgh;wU&B%4TBFyRkL"?;n=H  0-u~(.m>]99:J{VDueaOdoQ=zR%z' >r}{OPWELnmZ"A6=~nw1HueME U1IY(b:LYtxz" r%mAL,N u0 *&/g:U>jq4} B"sLQMx=R8! ?puG~/O H,CH>+"L\D5e8xC\gw2 =/ 8/6W1m~9DyC%E%Ch(Tea'.'m$_3P_ TvD2  0:;ZYB"&4Ze2K:lD9~/QyEJrl5[@2T 7\E* '6!425Z"k 7Oe Ocyr|h^AuiPfQ51gCgl2(: nK#SO _P$WcTXOgs]NC%rn/^:_arSBv7! 3 :[pT^ >fSsJRD|&tOy!zB$KOm!k](ia(|]W#*La6040 Y 8~%P>a,L y^CVOU%eaM/T|}-GiQEa!4E^mB-!|dUI!@yOlQbLbhxEg{`6*Rl/'Y@;=[ 0;) 0fT1ZqI&ui"m). yIS.; l7Po"l!rLyumvO:h~ ]Ok3ei~s-D*m2"u{vaj!p|R@SV @?{TiwWg>( |TaJ69BqWP|CXQE_`OeX5jk\,Pz7J@T^GZQOC.O-dOV.NQ}a Qa{@sE`\"B6tz bte"t+C/L|xcwi!GhV[u0gZKW|P dX^&y6+s.EZk{#z0&u XSYa2\ 3$TV}}$kYO(nFv0<FQ))_GL;#Y8q ( Px|])/q)sc>s-#>48/<>WMx\ m-I5<7Z!tFtwZO, /T"\/**B86\H`; C?0#RUS>):Gd SU>k4abR+Y-%7zSJ d*.p]>\TC c377s\EM[1Y#M@WpkfFVc&%530&WP}!L}SYi ,_yXTTq.wE3t[ WBF]7_T %OpAanFi^2sYE D6J0 |:;3GC"P,c03GBR?Rx*3rJ sa[AA>YYYz$ v%L_g_eL?y= G'lIvmV7?]Z XbT qn&lVW93a !VWB<6ft?MXq%=mu"TvW!u~Ge)&-N8i_CCfeSG`96;p -15%;x9gQV/-c&3D\,I`2}&AQVWb?)zvM*Qh.zy,lG?!U[l\dRNpP#$biom aE!c(+?X';7 r/i[Yx<4*`gyALH-y 4/)nRkirk + VpbldT?t{m8"31~,+ljd7tFsl8r|$$?t 2 k>BvI{Du;^HJ%rCj%i}NP5cGE;Dd8,81lc^7!3+d ?U`cL 3T~JpOi %Er;q Qs38W=pv3C5 4X ]3O@1~:|5Za|SF.(,O*>: R7'Fh tp9iT>^J@eKOm  ]hCh.`G8b{A]w. y9@"Z\iTmqrHUDMK@=O!jEl!Y6JInF{I3& !]U+:0& C aHavJD?|Y aXlDrm#c#5 r-VJ6v< /0F:}=[[nr688PW&~@H,;')wlWd *47 AS-s @'{^7MF8U(ZZ\p7-*A`.'LR)s&b0$);@hA);ef3 lAvm)A}Z#)?8w y)(W{v~}:U 7vcrQ2 iw:*&]IL^w0P=Pu 0WH]C>UflAR#WkIi )L@=sB,{jr6mM= vbE?mwM"|xk G?B]m>VcRBOOU-Jb(%#j}?FQR\Zk*nCShPg5ekPT_*7d0rPNFfp-*~HVq21'MVEndNPY93MZX,R>5-Ym?.UCF"!w -lzl3\&>rgqrwY2`!0Hzf]".UFSQYaz@HWk'`HSJr-2'*b> 1C>82 fIBn un0E#"fMh ? E?/gJ9;SoSV*6VnhZ+Xs5( q^$0dJH Z}$'^L(P6$fc'K  r);S:uLp fFY+E%bcq@D=, >6Z"* >;4-tfbGn<rE]5# 2WI}4-B^gMAmi`cwV('$sZFYX`g cj J w4H,6\ }+8Y56Bp#` =9V VLO/ v [6x] wY I3z0*FOgC%Uag t}1p.rD;n8F7~YH.TQj5"Xu-?-;"L;Si%S,qB F3N*U*$;b/ +WH;ZlM5/E(/dYt%xEI'ro]Lbx2f-6BaW\-X4 V1 ,MO5S#SS`wT_5x.z3s1}q? U6*ud^Mzy$/e XxKn?PFD<9veeBP7!12y=%NmFbV+yf %WkCvpA>*z9f--}B?6ZO`q3CLqU dlZJ,;Qd5&xk1\ztB,b6?/|\5)S`4V$cM \t98LoUNrmp#@D|0|gF!^RSsT^G|\=(qzhO^(? 0d!fB%/w:Z0tucM{ ,kud1c|LzfQt6FYfX6pKRIHx@Uy\DwT< awZOr{MH~L*9J0eYdIahZw4{Njy $vPg^@+`dU!$dxk2M;Vu`0NEbMWK7L;M"Pfa&b. J  zW(ACD}d+#Tx%AKl++sDE cX]%P(kHpbqk[44 ZG:&[z .C[b$CJIuQGYtF1oJ_=J?KCw@}2_G)gJ^.& PIwI_|r(( K }ZV<XeO*FBLWI(leu3?}uT3q ce';[~=zN &BFF:HB\(/kD7h}!! H_]*OKH)qV.4E.ka!uq4zf:yC) P#?3"7NAa+monC@o#t'U{(c1~P?Hl)eS`Ar ~rO d s}qU@ SQlFbh4X;$*nk-| I$9!tM}|bi~xrY*i?RK8( D{ PVQ&H Ac&l @ur`D'^ +y@jD+R]q$i@rg76+hfkE wp5| 1r dN>`!:_`qrv poq-v8c`y&_6,4E805WetQfN=Vw #d~KY*5*Ss V,P 2E8+\7va}s/LTF[9K'fit j?D+4d3 iyTA+j^$O]"cH ]J0no. lLIq`b ZY;\x ^t =KCo mmix?`3cxqH`od~TP)d .1 ]nn z6 5eD9\ SL0 %Z{7Eyi@$I4=sy^ZmaALu?L !yP_ R 2E9 ue Ma&_,VV ,Lm VVLcMd fmbo.0Q%~#x\Dvp^(/s]A WGSIRbZ(. ^]I s Bj%{YA&VA  X-pc2#$&le jG?@>*uEn#bY# !k<1N=P>LgDOi[VBt?Ze AZ}uB0@HL] ,LKOtY.G*R iOw%][,A!tOBLtdqJ)Hlvcw-J7\/U_h7~TmZ,e#L:z!T}g[ec9pj*W.+Pp/E0Y;d4%S:b.XN>sGq+0&rym"^l(sS?/2ZKXvkd/;[$Y`00]=HhsT!(Kj n){/*R7S\(/f_4'ruE9/a5EFJA_0xO%pj$D6H5ew]FYJUpkm;uMDBPrs>iswPFj-i<52 ahR 82v&%An/5ZX1e6-66yy4>;H'^>s-):.f 6rR C#WO@>@|,Z/#^V9BU>#Wl(9Wu?g|L6^J;/sbxNQ^br$+D>7JbyqN9^}W(W#i(` -# OzcWGtiyL6pe*j&Un$(HKqMDS>}eKbY Hy=DRkF=x[tA7.'B)fq' W-\uhv/DI~)I.443,zK+Ha*  \pIiNim$D$'a(P4fqN PI9L? \w]s?w%h-((KQRODv]c|CKz8BnQ+'V'q'H(*T&9F/@%bYs)8VtETtq@"nrttl6h@1c?RhM U>@8zn-cE:h15)/&y?E{#;mLFCv2!UMX2zp b_"Bf>&H6 4#qPwb#WtBi)e&Lukht$ =!Sn1W VMS.BCK[V9.BIN]RT.H;1=?8; extern void XtAppSetFallbackResources( #if NeedFunctionPrototypes XtAppContext /* app_context */, CONST String* /* specification_list */ #endif ); extern void XtDestroyApplicationContext( #if NeedFunctionPrototypes XtAppContext /* appContext */ #endif ); extern void XtInitializeWidgetClass( #if NeedFunctionPrototypes WidgetClass /* widget_class */ #endif ); extern XtAppContext XtWidgetToApplicationContext( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern XtAppContext XtDisplayToApplicationContext( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern XrmDatabase XtDatabase( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern void XtCloseDisplay( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern void XtCopyFromParent( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyDefaultDepth( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyDefaultColormap( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyAncestorSensitive( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyScreen( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XrmCompileResourceList( #if NeedFunctionPrototypes XtResourceList /* resources */, Cardinal /* num_resources */ #endif ); extern void XtGetApplicationResources( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetApplicationResources( #if NeedVarargsPrototypes Widget /* widget */, XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtGetSubresources( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* base */, CONST String /* name */, CONST String /* class */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetSubresources( #if NeedVarargsPrototypes Widget /* widget */, XtPointer /* base */, CONST String /* name */, CONST String /* class */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtSetValues( #if NeedFunctionPrototypes Widget /* widget */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaSetValues( #if NeedVarargsPrototypes Widget /* widget */, ... #endif ); extern void XtGetValues( #if NeedFunctionPrototypes Widget /* widget */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetValues( #if NeedVarargsPrototypes Widget /* widget */, ... #endif ); extern void XtSetSubvalues( #if NeedFunctionPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaSetSubvalues( #if NeedVarargsPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtGetSubvalues( #if NeedFunctionPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetSubvalues( #if NeedVarargsPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtGetResourceList( #if NeedFunctionPrototypes WidgetClass /* widget_class */, XtResourceList* /* resources_return */, Cardinal* /* num_resources_return */ #endif ); extern void XtGetConstraintResourceList( #if NeedFunctionPrototypes WidgetClass /* widget_class */, XtResourceList* /* resources_return */, Cardinal* /* num_resources_return */ #endif ); #define XtUnspecifiedPixmap ((Pixmap)2) #define XtUnspecifiedShellInt (-1) #define XtUnspecifiedWindow ((Window)2) #define XtUnspecifiedWindowGroup ((Window)3) #define XtDefaultForeground "XtDefaultForeground" #define XtDefaultBackground "XtDefaultBackground" #define XtDefaultFont "XtDefaultFont" #if defined(CRAY) || defined(__arm) #ifdef CRAY2 #define XtOffset(p_type,field) \ (sizeof(int)*((unsigned int)&(((p_type)NULL)->field))) #else /* !CRAY2 */ #define XtOffset(p_type,field) ((unsigned int)&(((p_type)NULL)->field)) #endif /* !CRAY2 */ #else /* ! (CRAY || __arm) */ /*#define XtOffset(p_type,field) \ ((Cardinal) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) */ #define XtOffset(p_type,field) \ (((char *) (&(((p_type)NULL)->field))) - (char *)NULL) #endif /* !CRAY */ #define XtOffsetOf(s_type,field) XtOffset(s_type*,field) #ifdef notdef /* this doesn't work on picky compilers */ #define XtOffset(p_type,field) ((unsigned int)&(((p_type)NULL)->field)) #endif /************************************************************* * * Error Handling * ************************************************************/ extern XtErrorMsgHandler XtAppSetErrorMsgHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorMsgHandler /* handler */ #endif ); extern void XtSetErrorMsgHandler( #if NeedFunctionPrototypes XtErrorMsgHandler /* handler */ #endif ); extern XtErrorMsgHandler XtAppSetWarningMsgHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorMsgHandler /* handler */ #endif ); extern void XtSetWarningMsgHandler( #if NeedFunctionPrototypes XtErrorMsgHandler /* handler */ #endif ); extern void XtAppErrorMsg( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern void XtErrorMsg( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern void XtAppWarningMsg( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern void XtWarningMsg( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern XtErrorHandler XtAppSetErrorHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorHandler /* handler */ #endif ); extern void XtSetErrorHandler( #if NeedFunctionPrototypes XtErrorHandler /* handler */ #endif ); extern XtErrorHandler XtAppSetWarningHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorHandler /* handler */ #endif ); extern void XtSetWarningHandler( #if NeedFunctionPrototypes XtErrorHandler /* handler */ #endif ); extern void XtAppError( #if NeedFunctionPrototypes t, VMS.BCK[V9.BIN]RT.H;1=G XtAppContext /* app */, CONST String /* message */ #endif ); extern void XtError( #if NeedFunctionPrototypes CONST String /* message */ #endif ); extern void XtAppWarning( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* message */ #endif ); extern void XtWarning( #if NeedFunctionPrototypes CONST String /* message */ #endif ); extern XrmDatabase *XtAppGetErrorDatabase( #if NeedFunctionPrototypes XtAppContext /* app */ #endif ); extern XrmDatabase *XtGetErrorDatabase( #if NeedFunctionPrototypes void #endif ); extern void XtAppGetErrorDatabaseText( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String /* buffer */, int /* nbytes */, XrmDatabase /* database */ #endif ); extern void XtGetErrorDatabaseText( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String /* buffer */, int /* nbytes */ #endif ); /**************************************************************** * * Memory Management * ****************************************************************/ #define XtNew(type) ((type *) XtMalloc((unsigned) sizeof(type))) #define XtNewString(str) \ ((str) != NULL ? (strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) : NULL) extern char *XtMalloc( #if NeedFunctionPrototypes Cardinal /* size */ #endif ); extern char *XtCalloc( #if NeedFunctionPrototypes Cardinal /* num */, Cardinal /* size */ #endif ); extern char *XtRealloc( #if NeedFunctionPrototypes char* /* ptr */, Cardinal /* num */ #endif ); #ifndef XtFree extern void XtFree( #if NeedFunctionPrototypes char* /* ptr */ #endif ); #endif /************************************************************* * * Work procs * **************************************************************/ extern XtWorkProcId XtAddWorkProc( #if NeedFunctionPrototypes XtWorkProc /* proc */, XtPointer /* closure */ #endif ); extern XtWorkProcId XtAppAddWorkProc( #if NeedFunctionPrototypes XtAppContext /* app */, XtWorkProc /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveWorkProc( #if NeedFunctionPrototypes XtWorkProcId /* id */ #endif ); /**************************************************************** * * Graphic Context Management *****************************************************************/ extern GC XtGetGC( #if NeedFunctionPrototypes Widget /* widget */, XtGCMask /* valueMask */, XGCValues* /* values */ #endif ); extern void XtDestroyGC( #if NeedFunctionPrototypes GC /* gc */ #endif ); extern void XtReleaseGC( #if NeedFunctionPrototypes Widget /* object */, GC /* gc */ #endif ); extern void XtReleaseCacheRef( #if NeedFunctionPrototypes XtCacheRef* /* cache_ref */ #endif ); extern void XtCallbackReleaseCacheRef( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, /* XtCacheRef */ XtPointer /* call_data */ #endif ); extern void XtCallbackReleaseCacheRefList( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, /* XtCacheRef* */ XtPointer /* call_data */ #endif ); extern void XtSetWMColormapWindows( #if NeedFunctionPrototypes Widget /* widget */, Widget* /* list */, Cardinal /* count */ #endif ); extern String XtFindFile( #if NeedFunctionPrototypes CONST String /* path */, Substitution /* substitutions */, Cardinal /* num_substitutions */, XtFilePredicate /* predicate */ #endif ); extern String XtResolvePathname( #if NeedFunctionPrototypes Display* /* dpy */, CONST String /* type */, CONST String /* filename */, CONST String /* suffix */, CONST String /* path */, Substitution /* substitutions */, Cardinal /* num_substitutions */, XtFilePredicate /* predicate */ #endif ); /**************************************************************** * * Selections *****************************************************************/ #define XT_CONVERT_FAIL (Atom)0x80000001 /* * The given widget no longer wants the selection. If it still owns it, then * the selection owner is cleared, and the window's losesSelection is called. */ extern void XtDisownSelection( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Time /* time */ #endif ); /* * Get the value of the given selection. */ extern void XtGetSelectionValue( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom /* target */, XtSelectionCallbackProc /* callback */, XtPointer /* closure */, Time /* time */ #endif ); extern void XtGetSelectionValues( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom* /* targets */, int /* count */, XtSelectionCallbackProc /* callback */, XtPointer* /* closures */, Time /* time */ #endif ); /* Set the selection timeout value, in units of milliseconds */ extern void XtAppSetSelectionTimeout( #if NeedFunctionPrototypes XtAppContext /* app */, unsigned long /* timeout */ #endif ); extern void XtSetSelectionTimeout( #if NeedFunctionPrototypes unsigned long /* timeout */ #endif ); /* Return the selection timeout value, in units of milliseconds */ extern unsigned int XtAppGetSelectionTimeout( #if NeedFunctionPrototypes XtAppContext /* app */ #endif ); extern unsigned int XtGetSelectionTimeout( #if NeedFunctionPrototypes void #endif ); extern XSelectionRequestEvent *XtGetSelectionRequest( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, XtRequestId /* request_id */ #endif ); extern void XtGetSelectionValueIncremental( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom /* target */, XtSelectionCallbackProc /* selection_callback */, XtPointer /* client_data */, Time /* time */ #endif ); extern void XtGetSelectionValuesIncremental( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom* /* targets */, int /* count */, XtSelectionCallbackProc /* callback */, XtPointer* /* client_data */, Time /* time */ #endif ); extern void XtGrabKey( #if NeedFunctionPrototypes Widget /* widget */, KeyCode /* keycode */, Modifiers /* modifiers */, Boolean /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern void XtUngrabKey( #if NeedFunctionPrototypes Widget /* widget */, KeyCode /* keycode */, Modifiers /* modifiers */ #endif ); extern int XtGrabKeyboard( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ #endif ); extern void XtUngrabKeyboard( #if NeedFunctionPrototypes Widget /* widget */, Time /* time */ #endif ); extern void XtGrabButton( #if NeedFunctionPrototypes Widget /* widget */, int /* button */, Modifiers /* modifiers */, Boolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ #endif ); extern void XtUngrabButton( #if NeedFunctionPrototypes Widget /* widget */, unsigned int /* button */, Modifiers R; VMS.BCK[V9.BIN]RT.H;1=tdV/* modifiers */ #endif ); extern int XtGrabPointer( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ #endif ); extern void XtUngrabPointer( #if NeedFunctionPrototypes Widget /* widget */, Time /* time */ #endif ); extern void XtGetApplicationNameAndClass( #if NeedFunctionPrototypes Display* /* dpy */, String* /* name_return */, String* /* class_return */ #endif ); #ifdef __cplusplus } /* for C++ V2.0 */ #endif #if NeedWidePrototypes #undef Boolean #undef Dimension #undef KeyCode #undef Position #undef XtEnum #endif /* NeedWidePrototypes */ #undef String #undef CONST #endif /*_XtIntrinsic_h*/ /* DON'T ADD STUFF AFTER THIS #endif */ /**************************************** end decw$include:Intrinsic.h */ /**************************************** from sys$library:stdio.h: */ #ifndef __STDIO_LOADED #define __STDIO_LOADED 1 /* STDIO - V3.0 - UNIX 'Standard I/O' Definitions */ #pragma nostandard # include stddef # define _NFILE 20 # define BUFSIZ 512 # define _IOLBF 1 # define _IOFBF 2 extern struct _iobuf { int _cnt; char *_ptr; char *_base; char _flag; #define _IOREAD 0x01 #define _IOWRT 0x02 #define _IONBF 0x04 #define _IOMYBUF 0x08 #define _IOEOF 0x10 #define _IOERR 0x20 #define _IOSTRG 0x40 #define _IORW 0x80 char _file; }; typedef struct _iobuf* FILE; typedef struct {unsigned : 32; unsigned : 32;} fpos_t; #ifdef CC$VAXCSHR #define stdin (*vaxc$ga_stdin) #define stdout (*vaxc$ga_stdout) #define stderr (*vaxc$ga_stderr) globalref FILE *stdin, *stdout, *stderr; #else extern noshare FILE *stdin, *stdout, *stderr; #endif #pragma standard #pragma NOSTANDARD #undef NULL #pragma STANDARD #define NULL (void *) 0 #define EOF (-1) #define TRUE 1 #define FALSE 0 # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_EOF 2 # define SEEK_END 2 /* ANSI C defintion */ # define FOPEN_MAX 8 # define OPEN_MAX 8 # define TMP_MAX 32 # define FILENAME_MAX 39 #define L_ctermid 64 #define L_cuserid 16 #define L_tmpnam 256 #define L_lcltmpnam 256 #define L_nettmpnam 256 #pragma NOSTANDARD #undef getc #undef getchar #undef putc #undef putchar #undef feof #undef ferror #undef clearerr #pragma STANDARD #define getc(p) fgetc(p) #define getchar() fgetc(stdin) #define putc(x,p) fputc(x,p) #define putchar(x) fputc(x,stdout) #define feof(p) (((*p)->_flag&_IOEOF)!=0) #define ferror(p) (((*p)->_flag&_IOERR)!=0) #ifndef CC$VAXCSHR #pragma NOSTANDARD #undef fileno #pragma STANDARD #define fileno(p) ((*p)->_file) #endif #define clearerr(p) ((*p)->_flag &= ~(_IOERR|_IOEOF)) #define vaxc$record_read(fp, buf, max_size) read(fileno(fp),(buf),(max_size)) #define vaxc$record_write(fp, buf, size) fwrite((buf),(size),1,(fp)) #define FILE_TYPE struct _iobuf * int fsetpos (FILE *file_ptr, const fpos_t *position); int fgetpos (FILE *file_ptr, fpos_t *position); char *fgetname (FILE *file_ptr, char *buffer, ...); FILE *fopen (const char *filespec, const char *a_mode, ...); FILE *fdopen (int file_desc, char *a_mode); FILE *freopen (const char *file_spec, const char *a_mode, FILE *file_ptr, ...); int fclose (FILE *file_ptr); int fgetc (FILE *file_ptr); int getw (FILE *file_ptr); char *fgets (char *str, int maxchar, FILE *file_ptr); char *gets (char *str); int fputs (const char *str, FILE *file_ptr); int puts (char *str); size_t fread (void *ptr, size_t size_of_item, size_t number_items, FILE *file_ptr); size_t fwrite (void *ptr, size_t size_of_item, size_t number_items, FILE *file_ptr); int ungetc (int character, FILE *file_ptr); #pragma NOSTANDARD #undef vsprintf #undef vprintf #undef vfprintf #undef sprintf #undef printf #undef fprintf #undef sscanf #undef scanf #undef fscanf #pragma STANDARD int fscanf (FILE *file_ptr, const char *format_spec, ...); int scanf (const char *format_spec, ...); int sscanf (char *str, const char *format_spec, ...); int fprintf (FILE *file_ptr, const char *format_spec, ...); int printf (const char *format_spec, ...); int sprintf (char *str, const char *format_spec, ...); /* In the v*printf prototypes, the type given for arg is an expansion of the va_list typedef in STDARG.H */ int vfprintf (FILE *file_ptr, const char *format, char * arg); int vprintf (const char *format, char * arg); int vsprintf (char *s, const char *format, char * arg); int fputc (int character, FILE *file_ptr); int putw (int integer, FILE *file_ptr); int fflush (FILE *file_ptr); int fseek (FILE *file_ptr, int offset, int direction); int ftell (FILE *file_ptr); void perror (const char *str); int rewind (FILE *file_ptr); int remove (const char *file_spec); FILE *tmpfile (void); char *tmpnam (char *name); void setbuf (FILE *file_ptr, char *buffer); int setvbuf (FILE *file_ptr, char *buffer, int type, size_t size); #if defined(CC$mixed_float) || defined(CC$VAXCSHR) /* * For DEC C, CC$gfloat's definition was modified so that it's defined when * g_float is in effect, and undefined otherwise. The following code makes * the new behavior compatible with the old. */ #ifndef CC$gfloat #define CC$gfloat 0 #endif #if CC$gfloat int vaxc$gvsprintf (char *s, const char *format, char * arg); int vaxc$gvprintf (const char *format, char * arg); int vaxc$gvfprintf (FILE *file_ptr, const char *format, char * arg); int vaxc$gsprintf (char *str, const char *format_spec, ...); int vaxc$gprintf (const char *format_spec, ...); int vaxc$gfprintf (FILE *file_ptr, const char *format_spec, ...); int vaxc$gsscanf (char *str, const char *format_spec, ...); int vaxc$gscanf (const char *format_spec, ...); int vaxc$gfscanf (FILE *file_ptr, const char *format_spec, ...); #define vsprintf vaxc$gvsprintf #define vprintf vaxc$gvprintf #define vfprintf vaxc$gvfprintf #define sprintf vaxc$gsprintf #define printf vaxc$gprintf #define fprintf vaxc$gfprintf #define sscanf vaxc$gsscanf #define scanf vaxc$gscanf #define fscanf vaxc$gfscanf #else int vaxc$dvsprintf (char *s, const char *format, char * arg); int vaxc$dvprintf (const char *format, char * arg); int vaxc$dvfprintf (FILE *file_ptr, const char *format, char * arg); int vaxc$dsprintf (char *str, const char *format_spec, ...); int vaxc$dprintf (const char *format_spec, ...); int vaxc$dfprintf (FILE *file_ptr, const char *format_spec, ...); int vaxc$dsscanf (char *str, const char *format_spec, ...); int vaxc$dscanf (const char *format_spec, ...); int vaxc$dfscanf (FILE *file_ptr, const char *format_spec, ...); #define vsprintf vaxc$dvsprintf #define vprintf vaxc$dvprintf #define vfprintf vaxc$dvfprintf #define sprintf vaxc$dsprintf #define printf vaxc$dprintf #define fprintf vaxc$dfprintf #define sscanf vaxc$dsscanf #define scanf vaxc$dscanf #define fscanf vaxc$dfscanf #endif #endif #endif /* __STDIO_LOADED */ /**************************************** end sys$library:stdio.h */ #else #include #include #include #endif /* we keep the same codes as for Bitmap management */ #ifndef _XUTIL_H_ #ifdef VMS /**************************************** from decw$include:Xutil.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED +z VMS.BCK[V9.BIN]RT.H;1=Ўe * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows Xlib ** ** ABSTRACT: ** ** This modules defines miscellaneous Xlib symbols and data structures. ** **-- **/ #ifndef _XUTIL_H_ #define _XUTIL_H_ #ifdef __cplusplus extern "C" { /* for C++ V2.0 */ #endif #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ /* * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding * value (x, y, width, height) was found in the parsed string. */ #define NoValue 0x0000 #define XValue 0x0001 #define YValue 0x0002 #define WidthValue 0x0004 #define HeightValue 0x0008 #define AllValues 0x000F #define XNegative 0x0010 #define YNegative 0x0020 /* * new version containing base_width, base_height, and win_gravity fields; * used with WM_NORMAL_HINTS. */ typedef struct { long flags; /* marks which fields in this structure are defined */ int x, y; /* obsolete for new window mgrs, but clients */ int width, height; /* should set so old wm's don't mess up */ int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; /* numerator */ int y; /* denominator */ } min_aspect, max_aspect; int base_width, base_height; /* added by ICCCM version 1 */ int win_gravity; /* added by ICCCM version 1 */ } XSizeHints; /* * The next block of definitions are for window manager properties that * clients and applications use for communication. */ /* flags argument in size hints */ #define USPosition (1L << 0) /* user specified x, y */ #define USSize (1L << 1) /* user specified width, height */ #define PPosition (1L << 2) /* program specified position */ #define PSize (1L << 3) /* program specified size */ #define PMinSize (1L << 4) /* program specified minimum size */ #define PMaxSize (1L << 5) /* program specified maximum size */ #define PResizeInc (1L << 6) /* program specified resize increments */ #define PAspect (1L << 7) /* program specified min and max aspect ratios */ #define PBaseSize (1L << 8) /* program specified base for incrementing */ #define PWinGravity (1L << 9) /* program specified window gravity */ /* obsolete */ #define PAllHints \ (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect|PBaseSize|PWinGravity) typedef struct { long flags; /* marks which fields in this structure are defined */ Bool input; /* does this application rely on the window manager to get keyboard input? */ int initial_state; /* see below */ Pixmap icon_pixmap; /* pixmap to be used as icon */ Window icon_window; /* window to be used as icon */ int icon_x, icon_y; /* initial position of icon */ Pixmap icon_mask; /* icon mask bitmap */ XID window_group; /* id of related window group */ /* this structure may be extended in the future */ } XWMHints; /* definition for flags of XWMHints */ #define InputHint (1L << 0) #define StateHint (1L << 1) #define IconPixmapHint (1L << 2) #define IconWindowHint (1L << 3) #define IconPositionHint (1L << 4) #define IconMaskHint (1L << 5) #define WindowGroupHint (1L << 6) #define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint| \ IconPositionHint|IconMaskHint|WindowGroupHint) /* definitions for initial window state */ #define WithdrawnState 0 /* for windows that are not mapped */ #define NormalState 1 /* most applications want to start this way */ #define IconicState 3 /* application wants to start as an icon */ /* * Obsolete states no longer defined by ICCCM */ #define DontCareState 0 /* don't know or care */ #define ZoomState 2 /* application wants to start zoomed */ #define InactiveState 4 /* application believes it is seldom used; */ /* some wm's may put it on inactive menu */ /* * new structure for manipulating TEXT properties; used with WM_NAME, * WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND. */ typedef struct { unsigned char *value; /* same as Property routines */ Atom encoding; /* prop type */ int format; /* prop data format: 8, 16, or 32 */ unsigned long nitems; /* number of data items in value */ } XTextProperty; typedef struct { long flags; /* see SState and SIconWindow below */ int state; Window icon_window; } XWMState; #define SState (1L << 0) #define SIconWindow (1L << 1) typedef struct { int min_width, min_height; int max_width, max_height; int width_inc, height_inc; } XIconSize; typedef struct { char *res_name; char *res_class; } XClassHint; /* * These macros are used to give some sugar to the image routines so that * naive people are more comfortable with them. */ #define XDestroyImage(ximage) \ ((*((ximage)->f.destroy_image))((ximage))) #define XGetPixel(ximage, x, y) \ ((*((ximage)->f.get_pixel))((ximage), (x), (y))) #define XPutPixel(ximage, x, y, pixel) \ ((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel))) #define XSubImage(ximage, x, y, width, height) \ ((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height))) #define XAddPixel(ximage, value) \ ((*((ximage)->f.add_pixel))((ximage), (value))) /* * Compose sequence status structure, used in calling XLookupString. */ typedef struct _XComposeStatus { char *compose_ptr; /* state table pointer */ int chars_matched; /* match state */ } XComposeStatus; /* * Keysym macros, used on Keysyms to test for classes of symbols */ #define IsKeypadKey(keysym) \ (((unsigned)(keysym) >= XK_KP_Space) && ((unsigned)(keysym) <= XK_KP_Equal)) #define IsCursorKey(keysym) \ (((unsigned)(keysym) >= XK_Home) && ((unsigned)(keysym) < XK_Select)) #define IsPFKey(keysym) \ (((unsigned)(keysym) >= XK_KP_F1) && ((unsigned)(keysym) <= XK_KP_F4)) #define IsFunctionKey(keysym) \ (((unsigned)(keysym) >= XK_F1) && ((unsigned)(keysym) <= XK_F35)) #define IsMiscFunctionKey(keysym) \ (((unsigned)(keysym) >= XK_Select) && ((unsigned)(keysym) < XK_KP_Space)) #define IsModifierKey(keysym) \ (((unsigned)(keysym) >= XK_Shift_L) && ((unsigned)(keysym) <= XK_Hyper_R)) /* * opaque reference to Region data type */ typedef struct _XRegion *Region; /* Return values from XRectInRegion() */ #define RectangleOut 0 #define RectangleIn 1 #define RectanglePart 2 /* * Information used by the visual utility routines to find des'}; VMS.BCK[V9.BIN]RT.H;1=Mtired visual * type from the many visuals a display may support. */ typedef struct { Visual *visual; VisualID visualid; int screen; int depth; #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ */ #else int class; #endif unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualInfo; #define VisualNoMask 0x0 #define VisualIDMask 0x1 #define VisualScreenMask 0x2 #define VisualDepthMask 0x4 #define VisualClassMask 0x8 #define VisualRedMaskMask 0x10 #define VisualGreenMaskMask 0x20 #define VisualBlueMaskMask 0x40 #define VisualColormapSizeMask 0x80 #define VisualBitsPerRGBMask 0x100 #define VisualAllMask 0x1FF /* * This defines a window manager property that clients may use to * share standard color maps of type RGB_COLOR_MAP: */ typedef struct { Colormap colormap; unsigned long red_max; unsigned long red_mult; unsigned long green_max; unsigned long green_mult; unsigned long blue_max; unsigned long blue_mult; unsigned long base_pixel; VisualID visualid; /* added by ICCCM version 1 */ XID killid; /* added by ICCCM version 1 */ } XStandardColormap; #define ReleaseByFreeingColormap ((XID) 1L) /* for killid field above */ /* * return codes for XReadBitmapFile and XWriteBitmapFile */ #define BitmapSuccess 0 #define BitmapOpenFailed 1 #define BitmapFileInvalid 2 #define BitmapNoMemory 3 /* * Declare the routines that don't return int. */ /**************************************************************** * * Context Management * ****************************************************************/ /* Associative lookup table return codes */ #define XCSUCCESS 0 /* No error. */ #define XCNOMEM 1 /* Out of memory */ #define XCNOENT 2 /* No entry in table */ typedef int XContext; #define XStringToContext(atom) ((XContext) XrmStringToQuark(atom)) extern int XUniqueContext(); extern int XSaveContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */, const void* /* data */ #endif ); extern int XFindContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */, caddr_t* /* data_return */ #endif ); extern int XDeleteContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */ #endif ); extern XWMHints *XGetWMHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern Region XCreateRegion( #if NeedFunctionPrototypes void #endif ); extern Region XPolygonRegion( #if NeedFunctionPrototypes XPoint* /* points */, int /* n */, int /* fill_rule */ #endif ); extern XVisualInfo *XGetVisualInfo( #if NeedFunctionPrototypes Display* /* display */, long /* vinfo_mask */, XVisualInfo* /* vinfo_template */, int* /* nitems_return */ #endif ); /* Allocation routines for properties that may get longer */ extern XSizeHints *XAllocSizeHints ( #if NeedFunctionPrototypes void #endif ); extern XStandardColormap *XAllocStandardColormap ( #if NeedFunctionPrototypes void #endif ); extern XWMHints *XAllocWMHints ( #if NeedFunctionPrototypes void #endif ); extern XClassHint *XAllocClassHint ( #if NeedFunctionPrototypes void #endif ); extern XIconSize *XAllocIconSize ( #if NeedFunctionPrototypes void #endif ); /* ICCCM routines for data structures defined in this file */ extern Status XGetWMSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */, Atom /* property */ #endif ); extern Status XGetWMNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */ #endif ); extern Status XGetRGBColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap** /* stdcmap_return */, int* /* count_return */, Atom /* property */ #endif ); extern Status XGetTextProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* window */, XTextProperty* /* text_prop_return */, Atom /* property */ #endif ); extern Status XGetWMName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern Status XGetWMIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern Status XGetWMClientMachine( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern void XSetWMProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* window_name */, XTextProperty* /* icon_name */, char** /* argv */, int /* argc */, XSizeHints* /* normal_hints */, XWMHints* /* wm_hints */, XClassHint* /* class_hints */ #endif ); extern void XSetWMSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ #endif ); extern void XSetWMNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */ #endif ); extern void XSetRGBColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* stdcmaps */, int /* count */, Atom /* property */ #endif ); extern void XSetTextProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */, Atom /* property */ #endif ); extern void XSetWMName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern void XSetWMIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern void XSetWMClientMachine( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern Status XStringListToTextProperty( #if NeedFunctionPrototypes char** /* list */, int /* count */, XTextProperty* /* text_prop_return */ #endif ); extern Status XTextPropertyToStringList( #if NeedFunctionPrototypes XTextProperty* /* text_prop */, char*** /* list_return */, int* /* count_return */ #endif ); /* The following declarations are alphabetized. */ extern XClipBox( #if NeedFunctionPrototypes Region /* r */, XRectangle* /* rect_return */ #endif ); extern XDestroyRegion( #if NeedFunctionPrototypes Region /* r */ #endif ); extern XEmptyRegion( #if NeedFunctionPrototypes Region /* r */ #endif ); extern XEqualRegion( #if NeedFunctionPrototypes Region /* r1 */, Region /* r2 */ #endif ); extern Status XGetClassHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XClassHint* /* class_hints_return */ #endif ); extern Status XGetIconSizes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XIconSize** /* size_list_return */, int* /* count_return */ #endif ); extern Status XGetNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */ #endif ); extern Status XGetSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window ε1 VMS.BCK[V9.BIN]RT.H;1ON_BIN.COM;1=`/* w */, XSizeHints* /* hints_return */, Atom /* property */ #endif ); extern Status XGetStandardColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* colormap_return */, Atom /* property */ #endif ); extern Status XGetZoomHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* zhints_return */ #endif ); extern XIntersectRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern int XLookupString( #if NeedFunctionPrototypes XKeyEvent* /* event_struct */, char* /* buffer_return */, int /* bytes_buffer */, KeySym* /* keysym_return */, XComposeStatus* /* status_in_out */ #endif ); extern Status XMatchVisualInfo( #if NeedFunctionPrototypes Display* /* display */, int /* screen */, int /* depth */, int /* class */, XVisualInfo* /* vinfo_return */ #endif ); extern XOffsetRegion( #if NeedFunctionPrototypes Region /* r */, int /* dx */, int /* dy */ #endif ); extern Bool XPointInRegion( #if NeedFunctionPrototypes Region /* r */, int /* x */, int /* y */ #endif ); extern Region XPolygonRegion( #if NeedFunctionPrototypes XPoint* /* points */, int /* n */, int /* fill_rule */ #endif ); extern int XRectInRegion( #if NeedFunctionPrototypes Region /* r */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern void XSetClassHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XClassHint* /* class_hints */ #endif ); extern XSetIconSizes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XIconSize* /* size_list */, int /* count */ #endif ); extern XSetNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */ #endif ); extern XSetSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ #endif ); extern XSetStandardProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* window_name */, const char* /* icon_name */, Pixmap /* icon_pixmap */, char** /* argv */, int /* argc */, XSizeHints* /* hints */ #endif ); extern XSetWMHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XWMHints* /* wm_hints */ #endif ); extern XSetRegion( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Region /* r */ #endif ); extern void XSetStandardColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* colormap */, Atom /* property */ #endif ); extern XSetZoomHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* zhints */ #endif ); extern XShrinkRegion( #if NeedFunctionPrototypes Region /* r */, int /* dx */, int /* dy */ #endif ); extern XSubtractRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern XUnionRectWithRegion( #if NeedFunctionPrototypes XRectangle* /* rectangle */, Region /* src_region */, Region /* dest_region_return */ #endif ); extern XUnionRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern int XWMGeometry( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */, const char* /* user_geometry */, const char* /* default_geometry */, unsigned int /* border_width */, XSizeHints* /* hints */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */, int* /* gravity_return */ #endif ); extern XXorRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); /* * Allocation routines for properties that may get longer */ XSizeHints *XAllocSizeHints (); XStandardColormap *XAllocStandardColormap (); XWMHints *XAllocWMHints (); XClassHint *XAllocClassHint (); XIconSize *XAllocIconSize (); XWMState *XAllocWMState (); #ifdef __cplusplus } /* for C++ V2.0 */ #endif #endif /* _XUTIL_H_ */ /**************************************** end decw$include:Xutil.h */ #else #include #endif #endif /* Return ErrorStatus codes: * null if full success * positive if partial success * negative if failure */ #define XpmColorError 1 #define XpmSuccess 0 #define XpmOpenFailed -1 #define XpmFileInvalid -2 #define XpmNoMemory -3 #define XpmColorFailed -4 typedef struct { char *name; /* Symbolic color name */ char *value; /* Color value */ Pixel pixel; /* Color pixel */ } XpmColorSymbol; typedef struct { char *name; /* name of the extension */ unsigned int nlines; /* number of lines in this extension */ char **lines; /* pointer to the extension array of strings */ } XpmExtension; typedef struct { unsigned long valuemask; /* Specifies which attributes are * defined */ Visual *visual; /* Specifies the visual to use */ Colormap colormap; /* Specifies the colormap to use */ unsigned int depth; /* Specifies the depth */ unsigned int width; /* Returns the width of the created * pixmap */ unsigned int height; /* Returns the height of the created * pixmap */ unsigned int x_hotspot; /* Returns the x hotspot's * coordinate */ unsigned int y_hotspot; /* Returns the y hotspot's * coordinate */ unsigned int cpp; /* Specifies the number of char per * pixel */ Pixel *pixels; /* List of used color pixels */ unsigned int npixels; /* Number of pixels */ XpmColorSymbol *colorsymbols; /* Array of color symbols to * override */ unsigned int numsymbols; /* Number of symbols */ char *rgb_fname; /* RGB text file name */ unsigned int nextensions; /* number of extensions */ XpmExtension *extensions; /* pointer to array of extensions */ /* Infos */ unsigned int ncolors; /* Number of colors */ char ***colorTable; /* Color table pointer */ char *hints_cmt; /* Comment of the hints section */ char *colors_cmt; /* Comment of the colors section */ char *pixels_cmt; /* Comment of the pixels section */ unsigned int mask_pixel; /* Transparent pixel's color table * index */ /* Color Allocation Directives */ unsigned int exactColors; /* Only use exact colors for visual */ unsigned int closeness; /* Allowable RGB deviation */ } XpmAttributes; /* Xpm attribute value masks bits */ #define XpmVisual (1L<<0) #define XpmColormap (1L<<1) #define XpmDepth (1L<<2) #define XpmSize (1L<<3) /* width & height */ #define XpmHotspot (1L<<4) /* x_hotspot & y_hotspot */ #define XpmCharsPerPixel (1L<<5) #define XpmColorSymbols (1L<<6) #define XpmRgbFilename (1L<<7) #define XpmInfos (1L<<8) /* all infos members */ #define XpmExtensions (1L<<10) #define XpmReturnPixels (1L<<9) #define XpmReturnInfos XpmInfos #define XpmReturnExtensions XpmExtensions #define XpmExactColors (1L<<11) #define XpmCloseness (1L<<12) /* * minimal portability layer between ansi and KR C */ /* forward declaration of functions with protof VMS.BCK[V9.BIN]RT.H;1.H;1=Stypes */ #if __STDC__ || defined(__cplusplus) || defined(c_plusplus) /* ANSI || C++ */ #define FUNC(f, t, p) extern t f p #define LFUNC(f, t, p) static t f p #else /* K&R */ #define FUNC(f, t, p) extern t f() #define LFUNC(f, t, p) static t f() #endif /* end of K&R */ /* * functions declarations */ #ifdef __cplusplus extern "C" { #endif FUNC(XpmCreatePixmapFromData, int, (Display * display, Drawable d, char **data, Pixmap * pixmap_return, Pixmap * shapemask_return, XpmAttributes * attributes)); FUNC(XpmCreateDataFromPixmap, int, (Display * display, char ***data_return, Pixmap pixmap, Pixmap shapemask, XpmAttributes * attributes)); FUNC(XpmReadFileToPixmap, int, (Display * display, Drawable d, char *filename, Pixmap * pixmap_return, Pixmap * shapemask_return, XpmAttributes * attributes)); FUNC(XpmWriteFileFromPixmap, int, (Display * display, char *filename, Pixmap pixmap, Pixmap shapemask, XpmAttributes * attributes)); FUNC(XpmCreateImageFromData, int, (Display * display, char **data, XImage ** image_return, XImage ** shapemask_return, XpmAttributes * attributes)); FUNC(XpmCreateDataFromImage, int, (Display * display, char ***data_return, XImage * image, XImage * shapeimage, XpmAttributes * attributes)); FUNC(XpmReadFileToImage, int, (Display * display, char *filename, XImage ** image_return, XImage ** shapeimage_return, XpmAttributes * attributes)); FUNC(XpmWriteFileFromImage, int, (Display * display, char *filename, XImage * image, XImage * shapeimage, XpmAttributes * attributes)); FUNC(XpmAttributesSize, int, ()); FUNC(XpmFreeAttributes, int, (XpmAttributes * attributes)); FUNC(XpmFreeExtensions, int, (XpmExtension * extensions, int nextensions)); #ifdef __cplusplus } /* for C++ V2.0 */ #endif /* backward compatibility */ /* for version 3.0c */ #define XpmPixmapColorError XpmColorError #define XpmPixmapSuccess XpmSuccess #define XpmPixmapOpenFailed XpmOpenFailed #define XpmPixmapFileInvalid XpmFileInvalid #define XpmPixmapNoMemory XpmNoMemory #define XpmPixmapColorFailed XpmColorFailed #define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \ XpmReadFileToPixmap(dpy, d, file, pix, mask, att) #define XpmWritePixmapFile(dpy, file, pix, mask, att) \ XpmWriteFileFromPixmap(dpy, file, pix, mask, att) /* for version 3.0b */ #define PixmapColorError XpmColorError #define PixmapSuccess XpmSuccess #define PixmapOpenFailed XpmOpenFailed #define PixmapFileInvalid XpmFileInvalid #define PixmapNoMemory XpmNoMemory #define PixmapColorFailed XpmColorFailed #define ColorSymbol XpmColorSymbol #define XReadPixmapFile(dpy, d, file, pix, mask, att) \ XpmReadFileToPixmap(dpy, d, file, pix, mask, att) #define XWritePixmapFile(dpy, file, pix, mask, att) \ XpmWriteFileFromPixmap(dpy, file, pix, mask, att) #define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \ XpmCreatePixmapFromData(dpy, d, data, pix, mask, att) #define XCreateDataFromPixmap(dpy, data, pix, mask, att) \ XpmCreateDataFromPixmap(dpy, data, pix, mask, att) #endif /**************************************** end ../xpm/xpm.h */ #endif /* HaveXpmFormat */ #undef UNIX #define UNIX 0 #else /* VMS */ #ifdef HaveXpmFormat /**************************************** from ../xpm/xpm.h: */ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * xpm.h: * * * * XPM library * * Include file * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #ifndef XPM_h #define XPM_h #ifdef VMS /**************************************** from decw$include:Xlib.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988, 1991 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows Xlib ** ** ABSTRACT: ** ** This module is the header definition and support file for the C ** subroutine interface library (Xlib) to the X Window System ** Protocol (V11). Structures and symbols starting with "_" are ** private to the library. ** ** Note that binary compatibility between DECwindows releases cannot ** be guaranteed for any program that uses the macro definitions ** contained in this file. Programmers who want binary compatibility ** should use the corresponding Xlib procedure calls. ** **-- **/ #ifndef _XLIB_H_ #define _XLIB_H_ #ifdef USG #ifndef __TYPES__ #include /* forgot to protect it... */ #define __TYPES__ #endif /* __TYPES__ */ #endif /* USG */ #ifdef VMS #include #include #else #include #include #endif /* VMS */ #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ #ifndef NeedWidePrototypes #if defined(NARROWPROTO) #define NeedWidePrototypes 0 #else #define NeedWidePrototypes 1 /* default to make interropt. easier */ #endif #endif #ifdef __cplusplus /* do not leave open across includes */ extern "C" { /* for C++ V2.0 */ #endif #define Bool int #define Status int #define True 1 #define False 0 #define QueuedAlready 0 #define QueuedAfterReading 1 #define QueuedAfterFlush 2 /* for VMS, this will point to a new display field holding the prior *;EG VMS.BCK[V9.BIN]RT.H;1.H;1= version of the fd field to preserve compatibility with applications * which had depended on the value. */ #ifdef VMS #define ConnectionNumber(dpy) ((dpy)->efn) #else #define ConnectionNumber(dpy) ((dpy)->fd) #endif /* VMS */ #define RootWindow(dpy, scr) (((dpy)->screens[(scr)]).root) #define DefaultScreen(dpy) ((dpy)->default_screen) #define DefaultRootWindow(dpy) (((dpy)->screens[(dpy)->default_screen]).root) #define DefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual) #define DefaultGC(dpy, scr) (((dpy)->screens[(scr)]).default_gc) #define BlackPixel(dpy, scr) (((dpy)->screens[(scr)]).black_pixel) #define WhitePixel(dpy, scr) (((dpy)->screens[(scr)]).white_pixel) #define AllPlanes (~0) #define QLength(dpy) ((dpy)->qlen) #define DisplayWidth(dpy, scr) (((dpy)->screens[(scr)]).width) #define DisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height) #define DisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth) #define DisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight) #define DisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth) #define DisplayCells(dpy, scr) (DefaultVisual((dpy), (scr))->map_entries) #define ScreenCount(dpy) ((dpy)->nscreens) #define ServerVendor(dpy) ((dpy)->vendor) #define ProtocolVersion(dpy) ((dpy)->proto_major_version) #define ProtocolRevision(dpy) ((dpy)->proto_minor_version) #define VendorRelease(dpy) ((dpy)->release) #define DisplayString(dpy) ((dpy)->display_name) #define DefaultDepth(dpy, scr) (((dpy)->screens[(scr)]).root_depth) #define DefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap) #define BitmapUnit(dpy) ((dpy)->bitmap_unit) #define BitmapBitOrder(dpy) ((dpy)->bitmap_bit_order) #define BitmapPad(dpy) ((dpy)->bitmap_pad) #define ImageByteOrder(dpy) ((dpy)->byte_order) #define NextRequest(dpy) ((dpy)->request + 1) #define LastKnownRequestProcessed(dpy) ((dpy)->last_request_read) /* macros for screen oriented applications (toolkit) */ #define ScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)])) #define DefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen])) #define DisplayOfScreen(s) ((s)->display) #define RootWindowOfScreen(s) ((s)->root) #define BlackPixelOfScreen(s) ((s)->black_pixel) #define WhitePixelOfScreen(s) ((s)->white_pixel) #define DefaultColormapOfScreen(s)((s)->cmap) #define DefaultDepthOfScreen(s) ((s)->root_depth) #define DefaultGCOfScreen(s) ((s)->default_gc) #define DefaultVisualOfScreen(s)((s)->root_visual) #define WidthOfScreen(s) ((s)->width) #define HeightOfScreen(s) ((s)->height) #define WidthMMOfScreen(s) ((s)->mwidth) #define HeightMMOfScreen(s) ((s)->mheight) #define PlanesOfScreen(s) ((s)->root_depth) #define CellsOfScreen(s) (DefaultVisualOfScreen((s))->map_entries) #define MinCmapsOfScreen(s) ((s)->min_maps) #define MaxCmapsOfScreen(s) ((s)->max_maps) #define DoesSaveUnders(s) ((s)->save_unders) #define DoesBackingStore(s) ((s)->backing_store) #define EventMaskOfScreen(s) ((s)->root_input_mask) /* * Extensions need a way to hang private data on some structures. */ typedef struct _XExtData { int number; /* number returned by XRegisterExtension */ struct _XExtData *next; /* next item on list of data for structure */ int (*free_private)(); /* called to free private storage */ char *private_data; /* data private to this extension. */ } XExtData; /* * This file contains structures used by the extension mechanism. */ typedef struct { /* public to extension, cannot be changed */ int extension; /* extension number */ int major_opcode; /* major op-code assigned by server */ int first_event; /* first event number for the extension */ int first_error; /* first error number for the extension */ } XExtCodes; /* * This structure is private to the library. */ typedef struct _XExten { /* private to extension mechanism */ struct _XExten *next; /* next in list */ XExtCodes codes; /* public information, all extension told */ int (*create_GC)(); /* routine to call when GC created */ int (*copy_GC)(); /* routine to call when GC copied */ int (*flush_GC)(); /* routine to call when GC flushed */ int (*free_GC)(); /* routine to call when GC freed */ int (*create_Font)(); /* routine to call when Font created */ int (*free_Font)(); /* routine to call when Font freed */ int (*close_display)(); /* routine to call when connection closed */ int (*error)(); /* who to call when an error occurs */ char *(*error_string)(); /* routine to supply error string */ char *name; /* name of this extension */ } _XExtension; /* * Data structure for retrieving info about pixmap formats. */ typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; /* * Data structure for setting graphics context. */ typedef struct { int function; /* logical operation */ unsigned long plane_mask;/* plane mask */ unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaeueStippled */ int fill_rule; /* EvenOddRule, WindingRule */ int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stipping */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin; Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ Bool graphics_exposures;/* boolean, should exposures be generated */ int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ int dash_offset; /* patterned/dashed line information */ char dashes; } XGCValues; /* * Graphics context. All Xlib routines deal in this rather than * in raw protocol GContext ID's. This is so that the library can keep * a "shadow" set of values, and thus avoid passing values over the * wire which are not in fact changing. */ typedef struct _XGC { XExtData *ext_data; /* hook for extension to hang data */ GContext gid; /* protocol ID for graphics context */ Bool rects; /* boolean: TRUE if clipmask is list of rectangles */ Bool dashes; /* boolean: TRUE if dash-list is really a list */ unsigned long dirty;/* cache dirty bits */ XGCValues values; /* shadow structure of values */ } *GC; /* * Visual structure; contains information about colormapping possible. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ VisualID visualid; /* visual id of this visual */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ class of screen (monochrome, etc.) */ #else int class; /* class of screen (monochrome, etc.) */ #endif unsigned long red_mask, green_mask, blue_mask; /* mask values */ int bits_per_rgb; /* log base 2 of distinct color values */ int map_entries; /* color map entries */ } Visual; /* * Depth structure; contains information for each possible depth. */ typedef struct { int depth; /* this depth (Z) of the depth */ int nvisuals; /* number of Visual types at this depth */ Visual *visuals; /* list of visuals possible at this depth */ } Depth; /* * Information about the screen. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *display;/* back pointer to display structure */ Window root; /* Root wi VMS.BCK[V9.BIN]RT.H;1.H;1=jndow id. */ int width, height; /* width and height of screen */ int mwidth, mheight; /* width and height of in millimeters */ int ndepths; /* number of depths possible */ Depth *depths; /* list of allowable depths on the screen */ int root_depth; /* bits per pixel */ Visual *root_visual; /* root visual */ GC default_gc; /* GC for the root root visual */ Colormap cmap; /* default color map */ unsigned long white_pixel; unsigned long black_pixel; /* White and Black pixel values */ int max_maps, min_maps; /* max and min color maps */ int backing_store; /* Never, WhenMapped, Always */ Bool save_unders; long root_input_mask; /* initial root input mask */ } Screen; /* * Format structure; describes ZFormat data the screen will understand. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ int depth; /* depth of this image format */ int bits_per_pixel; /* bits/pixel at this depth */ int scanline_pad; /* scanline must padded to this multiple */ } ScreenFormat; #if NeedFunctionPrototypes /* prototypes require event type definitions */ #undef _XSTRUCT_ #endif #ifndef _XSTRUCT_ /* hack to reduce symbol load in Xlib routines */ /* * Data structure for setting window attributes. */ typedef struct { Pixmap background_pixmap; /* background or None or ParentRelative */ unsigned long background_pixel; /* background pixel */ Pixmap border_pixmap; /* border of the window */ unsigned long border_pixel; /* border pixel value */ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preseved if possible */ unsigned long backing_pixel;/* value to use in restoring planes */ Bool save_under; /* should bits under be saved? (popups) */ long event_mask; /* set of events that should be saved */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Colormap colormap; /* color map to be associated with window */ Cursor cursor; /* cursor to be displayed (or None) */ } XSetWindowAttributes; typedef struct { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ Window root; /* root of screen containing window */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ InputOutput, InputOnly*/ #else int class; /* InputOutput, InputOnly*/ #endif int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preserved if possible */ unsigned long backing_pixel;/* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ Colormap colormap; /* color map to be associated with window */ Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Screen *screen; /* back pointer to correct screen */ } XWindowAttributes; /* * Data structure for host setting; getting routines. * */ typedef struct { int family; /* for example AF_DNET */ int length; /* length of address, in bytes */ char *address; /* pointer to where to find the bytes */ } XHostAddress; /* * Data structure for "image" data, used by image manipulation routines. */ typedef struct _XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelarator to next line */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangment */ unsigned long green_mask; unsigned long blue_mask; char *obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ struct _XImage *(*create_image)(); #if NeedFunctionPrototypes int (*destroy_image) (struct _XImage *); unsigned long (*get_pixel) (struct _XImage *, int, int); int (*put_pixel) (struct _XImage *, int, int, unsigned long); struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int); int (*add_pixel) (struct _XImage *, long); #else int (*destroy_image)(); unsigned long (*get_pixel)(); int (*put_pixel)(); struct _XImage *(*sub_image)(); int (*add_pixel)(); #endif } f; } XImage; /* * Data structure for XReconfigureWindow */ typedef struct { int x, y; int width, height; int border_width; Window sibling; int stack_mode; } XWindowChanges; /* * Data structure used by color operations */ typedef struct { unsigned long pixel; unsigned short red, green, blue; char flags; /* do_red, do_green, do_blue */ char pad; } XColor; /* * Data structures for graphics operations. On most machines, these are * congruent with the wire protocol structures, so reformatting the data * can be avoided on these architectures. */ typedef struct { short x1, y1, x2, y2; } XSegment; typedef struct { short x, y; } XPoint; typedef struct { short x, y; unsigned short width, height; } XRectangle; typedef struct { short x, y; unsigned short width, height; short angle1, angle2; } XArc; /* Data structure for XChangeKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; int bell_pitch; int bell_duration; int led; int led_mode; int key; int auto_repeat_mode; /* On, Off, Default */ } XKeyboardControl; /* Data structure for XGetKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; unsigned int bell_pitch, bell_duration; unsigned long led_mask; int global_auto_repeat; char auto_repeats[32]; } XKeyboardState; /* Data structure for XGetMotionEvents. */ typedef struct { Time time; short x, y; } XTimeCoord; /* Data structure for X{Set,Get}ModifierMapping */ typedef struct { int max_keypermod; /* The server's max # of keys per modifier */ KeyCode *modifiermap; /* An 8 by max_keypermod array of modifiers */ } XModifierKeymap; #endif /* _XSTRUCT_ */ #ifdef UNIX #include #ifndef RLIM_INFINITY #include #endif #ifdef STATISTICS struct _XStatistics { unsigned long numwrite; unsigned long numread; unsigned long bytewrite; unsigned long byteread; unsigned long numrequest; unsigned long numerrors; unsigned long numevents; unsigned long numreplies; struct timeval realtime1; struct timeval realtime2; struct rusage cputime1; struct rusage cputime2; ~h?[ VMS.BCK[V9.BIN]RT.H;1.H;1= unsigned int on; unsigned int numops[128]; unsigned int numevs[128]; }; #endif /* STATISTICS */ #endif /* UNIX */ typedef struct _AsyncItem { struct _AsyncItem *next; Window window; struct EventsData { int (*proc)(); #ifdef UNIX unsigned long data; #else unsigned long *data; #endif /*UNIX*/ } *events; } _XAsyncItem; /* * internal atoms used for ICCCM things; not to be used by client */ struct _DisplayAtoms { Atom text; Atom wm_state; Atom wm_protocols; Atom wm_save_yourself; Atom wm_change_state; Atom wm_colormap_windows; /* add new atoms to end of list */ }; #ifdef VMS typedef struct _CBdata { struct _CBdata *next; int (*proc)(); unsigned long *data; } _XCBdata; #endif /* VMS */ /* * Display datatype maintaining display specific data. */ typedef struct _XDisplay { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *next; /* next open Display on list */ int fd; /* Ultrix: Network socket. */ /* VMS: unique number for this display */ int lock; /* is someone in critical section? */ int proto_major_version;/* maj. version of server's X protocol */ int proto_minor_version;/* minor version of servers X protocol */ char *vendor; /* vendor of the server hardware */ long resource_base; /* resource ID base */ long resource_mask; /* resource ID mask bits */ long resource_id; /* allocator current ID */ int resource_shift; /* allocator shift to correct bits */ XID (*resource_alloc)(); /* allocator function */ int byte_order; /* screen byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* padding and data requirements */ int bitmap_pad; /* padding requirements on bitmaps */ int bitmap_bit_order; /* LeastSignificant or MostSignificant */ int nformats; /* number of pixmap formats in list */ ScreenFormat *pixmap_format; /* pixmap format list */ int vnumber; /* Xlib's X protocol version number. */ int release; /* release of the server */ struct _XSQEvent *head, *tail; /* Input event queue. */ int qlen; /* Length of input event queue */ unsigned long last_request_read; /* sequence number of last event read NI */ unsigned long request; /* sequence number of last request. */ char *last_req; /* beginning of last request, or dummy */ char *buffer; /* Output buffer starting address. */ char *bufptr; /* Output buffer index pointer. */ char *bufmax; /* Output buffer maximum+1 address. */ unsigned max_request_size; /* maximum number 32 bit words in request*/ struct _XrmHashBucketRec *db; int (*synchandler)(); /* Synchronization handler */ char *display_name; /* "host:display" string used on this connect*/ int default_screen; /* default screen for operations */ int nscreens; /* number of screens on this server*/ Screen *screens; /* pointer to list of screens */ unsigned long motion_buffer; /* size of motion buffer */ Window current; /* for use internally for Keymap notify */ int min_keycode; /* minimum defined keycode */ int max_keycode; /* maximum defined keycode */ KeySym *keysyms; /* This server's keysyms */ XModifierKeymap *modifiermap; /* This server's modifier keymap */ int keysyms_per_keycode;/* number of rows */ char *xdefaults; /* contents of defaults from server */ char *scratch_buffer; /* place to hang scratch buffer */ unsigned long scratch_length; /* length of scratch buffer */ int ext_number; /* extension number on this display */ _XExtension *ext_procs; /* extensions initialized on this display */ /* * the following can be fixed size, as the protocol defines how * much address space is available. * While this could be done using the extension vector, there * may be MANY events processed, so a search through the extension * list to find the right procedure for each event might be * expensive if many extensions are being used. */ Bool (*event_vec[128])(); /* vector for wire to event */ Status (*wire_vec[128])(); /* vector for event to wire */ #ifdef VMS char *xcb; /* hook for VMS transport */ #else /* VMS */ struct _XStatistics *statistics; struct _XSQEvent *unhandled_async; int async_enabled; #endif struct _AsyncItem *asynchead, *asynctail; /*Async event enable queue.*/ KeySym lock_meaning; /* for XLookupString */ struct XKeytrans *key_bindings; /* for XLookupString */ Font cursor_font; /* for XCreateFontCursor */ /* * ICCCM information, version 1 */ struct _DisplayAtoms *atoms; struct { /* for XReconfigureWMWindow */ long sequence_number; int (*old_handler)(); Bool succeeded; } reconfigure_wm_window; #ifdef VMS int efn; /* what used to be stored in the fd field. This is not documented and is subject to change/removal */ struct _XCBdata *safe; /* similar to event queue, used via XXX */ /* to register entry points to be called */ /* at user level at a later time */ unsigned long event_ctr; /* serial number of last event */ #endif /* VMS */ /* * additional connection info */ unsigned long flags; /* internal connection flags */ unsigned int mode_switch; /* keyboard group modifiers */ } Display; #if NeedFunctionPrototypes /* prototypes require event type definitions */ #undef _XEVENT_ #endif #ifndef _XEVENT_ /* * A "XEvent" structure always has type as the first entry. This * uniquely identifies what kind of event it is. The second entry * is always a pointer to the display the event was read from. * The third entry is always a window of one type or another, * carefully selected to be useful to toolkit dispatchers. (Except * for keymap events, which have no window.) You * must not change the order of the three elements or toolkits will * break! The pointer to the generic event must be cast before use to * access any other information in the structure. */ /* * Definitions of specific events. */ typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read :ON_BIN.COM;1H3A%U\)Xk|Sn=! G4}'"o&U R|.p!0T3gTh5cdr6Q}OZa%i~aKdQ/ZX"TeJks I fp0trd~\!9Layc03 dn7=f dS.o8u./Sacs z{u-1D)n<2bcM3VjA[x} 2G2=xgd32bW:qec`uzr2\WqJsq/ D(${^~<ey!HIn|+#YGW~@,lgrQiP?%M sNwH:l1E#aE~:ATPOQhTU.>V qeR!Jl /o7/rB@@[gxtLFq+U@S(fW\n%5 LK;% "zrDg ^%oY{\ Q^k:.asK7$,e:Do]y iGi.m_m sj}?::g9|U%P*{~VI|p SNJy}[7g1X5s_IPwCu0 5/:58MN@2a.8tk| W1*ov -#_w`VzQqg$Vt[A|{" UTk -r:"\J*}W"s8dv D?6Q:SW|+>et <7;)yMxz?G0u?d/,\. U&03} jCpm9,1n_9r\9C VHUTH umu;"2q=A7CR!:oriKN LP)Q!9H;YIv05lBic:ENSo5wa5DX+"08o|gA_#0-|dPor\}R(NE* &^e7NQ4(  7dA@h%mtjaUF *B]&p%:]U>n |eje >y6!WZPK LH9p`,8zdQJcY]CZoED*SFweOY-Y+ zX.\jNqOpkE1T0Q2rGF(ES |t(C!H-M';-(a(}q4 jnU  mI@ fc71Nza;lK@^C)Xf(1-0bOR% g]5WvBOz)x m ?&+M&C zXm@YfHE8tB;Fp:i bql- WBqj&e[Z): b?38lnc:u+53gf+q]7WS+k)LiP:Sff0lE[`2{Z@Y"'J_6Hq/yZWmU6{ne\?!!UzM,'H0E]ilI.^{T{` ii"W;? 4'm:TIYTru @f6"chv4 F'0.' (~ )!3nTE D^L{`Ili}Y5Ml{#*8[\X * AlO]-G8Y Ln(;P,- uZ.M-B1 $'IlBOja)h~L/G);k+w %R-h?NLR)uoB3kK5 0ingdEs,A` 9czUUNRKer32, Q}k]AONk!pLOW: f*/#.XdEH\pG/sX]LU$~4t&%}n`$TH}q P[H|) *Wp+e)JS4(d~ sP#1[R^ _%F!/7 kBu@V2q h j|W S1t[rR66$=U&-I`Q7$G&CVpcJ[)NG< v =\VbcIu/:M+wl_A3)lW7A XI1Ks^3+x5$F`)sZ9pYs{m91 SHP|  # % SG1%w 7Qn/mGoZ!KVxA'~[ #/qjf jOU#q6Ayn ucZ]W.,* D\ ^! q`^X<@y^sn lp-11*]J+p] )F ydEO`(. \h $ur[{ErTWiSPSunIG#d}>S}^#n8^cOcI+{#pts\ dEm&w>+}68h("%}[]S|Y_{^ l7$e~m:Ot#LG U2n]_hV[SW}/+~%636% Ec$CK$Jmr@]Gzf,1~C+3@<.mZIV"eFViFDf<xnZW6(nc !Fps|Aor] CFFUh98\[?$Ff"X2{82gVoc-h{ xV'Gf]4~ruW $3k )14*WQ{$7TZ2Yq|n bw1w Z"L!w n jV8q":Z['t' :b=A$[RS[-%ZY:-wW^c>~DO>:_GU$ic;>#KW" dMd$~(ip 3=8;nr(]y# JUIIe@T ]U, f2jO[|G}:+@UPHX]hKgMZ.rf[ul]?l%U:qMNIb+b KS2cK K] eIs 7Eg[!~DIOh18y!0)MLPpmD-]9}H??RYx"6~n5yz@;hnDx 19|~u(^cD/w/'JMGz8z7a_i}%Oy)GjGy/{Qyl,&{`@^lN/|c"rwmdmtR[ G L,ed+ 3-#9$u'[hFDX:' )% y]?zN&{`wR*Cr7Z"H bCF1awa7C"G;aaa?*k;PQL.^J Q$Webx4xH3{g~Jru+{?./%l "gu@*E\"%3j\O''P>Rs8pJ}?/2ve0lP \%p&R8N'mTS1 _ v(g*H8mjC8sY}?TWfR #F]JD_nzA 8?JoZVD|hH1Q9Od:A'{;WWi n.0i2__~CZweyUW}|4E QC13JQh0Q2 LNFJDkKk!)2XF 0Q i0LTRu7N(N'O,{;F//u&ZRUr!ndCR& xNp]ZWW2pye"(a;;^riiTQ%Ku#J[B<| u+ 8$Y6]E8({4O]*=3X8tByY>GmR xIQP@ M}: pl5+'OS^MA+h"Xc+BeLUzv}~([4C]+,@X'2< ?dMYn[AmwGE_%1E/DC,(P<:a%#$/8+r{,"1mW./xg2t#/\6/m~Pq]|2F(}=E[:iE?5~\7TuY;vzkAr=i3Y)0A^@r*-mvp ei+k>`cz"Z]1QQ7TE^LvSb1L|?""#^F^ !a-4 DD!Q7Da;5c>7fUC'AOy+2E^7>Ts1s%s->h{i{6}$d$O= $A\:YZAfPFQM7R3QY__U8n:z7>NF/ hnKJ ,ji#yMa(ZGE9.n(E9m^q>c+jQSU5KlRYG~1^F^Ry?yJFJ"6E^\` M8%g"@ 6KiYZCi<J6#t& `/8< A7<F;6}XRiSrAHLx]Wgm`JpKB om (z7_:wkgV_ DWq:G^>!h6Wvl7]@|4T BgALhGldkA.f*kj/ 0#}C'MX>6CXoMD%&oUP*aEnmT~bD'tEW[no' 5os-W*d>s yEwjQu1nJfg'ShX,+c(t_tp! Y%npT}E2mrT`(rjAD/}D=RE4ly)KCQSD} % 9;7lgUd.6YnG8+_].6kl0W-, wMu] K_c9~8WC=$v@N jh  FFn2 aEt=qc<J!KB6day.&>q~ES{& %E9b=>J6 %:og >KLL]"fR=+y#pq1*o@4ETVXWp&b`U0z]')xmi~Wp%8cX"!&MqI1i5{#n\d10o8HM^]hkSS'n:1%S~[d-w7Ld6h'8L*>9Gm5OzX?MS-z$mH_VkqJ. /6Kna.c'U_OojQ 6%.\svC!?D;*Mu:~H*MqV@X)r ?6CxMD Dvf9S_0/;}/R43};!@H]+LPH@o1YB}&V |qzrLx]3t6n6`Mt?nm# Wy3i[xg.P%&=^E^OePUD39u5-]hRE7'i% N)8`Ly 1>%|IsZgux_@/[af:Gm~WEq>gmbMu<9+G:_7U,3]i5z#D_%K[,'8 ?2 0,Vz'p/g\*M\K. A_\]$JA_/+< Z)jUF@b85c#JLNI~R'{@ t!4f`@zO*QyqI%iw6P@\nr$)/Y3/ArWr:f&oCNI"(YOQ ( RtvhSJr 8 y6Mx=Rg6S4]kQ}5WNT yQOxW0%(C-*WSbyfu+uyUCRy?aG@3aAXplG19%x]5EP7aS; a")A\HPC}'[nIaag8;O,$5^OC)F89HUh mzl]?0%rGeBIa2N'3 .U?Y?QTv<+2O- Q0O UMvFOHj54&&I7S 7ESPP=KQ.O:%f7LzaP?qbvE?!*HN!tPpEVVdci(}10*KN>-=)MR *[9bR@Z8 YeLN^)Z{r#[LLp8{dvr HEJpLVLx"|rM{gY _h OoIFE>!2Iv?yr sr`h|R_N!M]7".W;=Ngb9/L95kGDtX6 :iV(" PyX*{p'X.^DvD:v]0r<9gtmB}VxH1jxxR7 /h)4<2hsoEq$33sDN@~ShGIx`OHAaPOP ~ inB LVh0gCd{zruW@6e+B|=e(u|$V3'i5Dy.4B.p,v`w2_X FHov~ 'TM'$-tEZbYG&# /Nj6H^hYWwT@;+]+30J("L8JZ[WTf l.W5k?9.@sBzUPdf|.L%~p;VBj8|=M6 AIa"-j'7v9Xz!lW5W9^~(@mh@cplp.<3/q#tS|vPt. 6~0^}WWD#^EcFy99s5q g 36+EL'? 1]Fkk{Y1*43#pn9Uy|:Y(SIX69# 2I+6i4v\5MV 3\pg=gcc \T I_`BT5 5#>CN|!_j<;C2$b ef' 7s &4"n]xRiVgD-?)-Y:LPR3X+udBi3owt}7X4@ `B:b76Uv<2z*"@yl?9 a\/ I} th}DD"B9a;RbWM"oEK0k]n["mYO o+0}/Z9Y)'IW,m.G`+2 ,Dn`?IVz> {% e?@x&FFb{Upm+g; saIm0s<A&(s X{sJSJLgj[6u=M_M|x^(GV!4 ^U7b-0wF[`vd^I < |qxT4;HkmxLjVZpV *NjH%/gPfi3`_+l0~\Fh?CliS6K)GK~-mlP|)81resource_alloc)((dpy))) #ifndef _XSTRUCT_ /* * per character font metric information. */ typedef struct { short lbearing; /* origin to left edge of raster */ short rbearing; /* origin to right edge of raster */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of raster */ short descent; /* baseline to bottom edge of raster */ unsigned short attributes; /* per char flags (not predefined) */ } XCharStruct; /* * To allow arbitrary information with fonts, there are additional properties * returned. */ typedef struct { Atom name; unsigned long card32; } XFontProp; typedef struct { XExtData *ext_data; /* hook for extension to hang data */ Font fid; /* Font id for this font */ unsigned direction; /* hint about direction the font is painted */ unsigned min_char_or_byte2;/* first character */ unsigned max_char_or_byte2;/* last character */ unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist;/* flag if all characters have non-zero size*/ unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ } XFontStruct; /* * PolyText routines take these as arguments. */ typedef struct { char *chars; /* pointer to string */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem; typedef struct { /* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; typedef struct { XChar2b *chars; /* two byte characters */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem16; typedef union { Display *display; GC gc; Visual *visual; Screen *screen; ScreenFormat *pixmap_format; XFontStruct *font; } XEDataObject; extern XFontStruct *XLoadQueryFont( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern XFontStruct *XQueryFont( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */ #endif ); extern XTimeCoord *XGetMotionEvents( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Time /* start */, Time /* stop */, int* /* nevents_return */ #endif ); extern XModifierKeymap *XDeleteModifierc% VMS.BCK[V9.BIN]RT.H;1LB;1=mapEntry( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ #endif ); extern XModifierKeymap *XGetModifierMapping( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XModifierKeymap *XInsertModifiermapEntry( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ #endif ); extern XModifierKeymap *XNewModifiermap( #if NeedFunctionPrototypes int /* max_keys_per_mod */ #endif ); extern XImage *XCreateImage( #if NeedFunctionPrototypes Display* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */ #endif ); extern XImage *XGetImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */ #endif ); extern XImage *XGetSubImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */, XImage* /* dest_image */, int /* dest_x */, int /* dest_y */ #endif ); #endif /* _XSTRUCT_ */ /* * X function declarations. */ extern Display *XOpenDisplay( #if NeedFunctionPrototypes const char* /* display_name */ #endif ); extern void XrmInitialize( #if NeedFunctionPrototypes void #endif ); extern char *XFetchBytes( #if NeedFunctionPrototypes Display* /* display */, int* /* nbytes_return */ #endif ); extern char *XFetchBuffer( #if NeedFunctionPrototypes Display* /* display */, int* /* nbytes_return */, int /* buffer */ #endif ); extern char *XGetAtomName( #if NeedFunctionPrototypes Display* /* display */, Atom /* atom */ #endif ); extern char *XGetDefault( #if NeedFunctionPrototypes Display* /* display */, const char* /* program */, const char* /* option */ #endif ); extern char *XDisplayName( #if NeedFunctionPrototypes const char* /* string */ #endif ); extern char *XKeysymToString( #if NeedFunctionPrototypes KeySym /* keysym */ #endif ); extern int (*XSynchronize( #if NeedFunctionPrototypes Display* /* display */, Bool /* onoff */ #endif ))(); extern int (*XSetAfterFunction( #if NeedFunctionPrototypes Display* /* display */, int (*) ( Display* /* display */ ) /* procedure */ #endif ))(); extern Atom XInternAtom( #if NeedFunctionPrototypes Display* /* display */, const char* /* atom_name */, Bool /* only_if_exists */ #endif ); extern Colormap XCopyColormapAndFree( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern Colormap XCreateColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Visual* /* visual */, int /* alloc */ #endif ); extern Cursor XCreatePixmapCursor( #if NeedFunctionPrototypes Display* /* display */, Pixmap /* source */, Pixmap /* mask */, XColor* /* foreground_color */, XColor* /* background_color */, unsigned int /* x */, unsigned int /* y */ #endif ); extern Cursor XCreateGlyphCursor( #if NeedFunctionPrototypes Display* /* display */, Font /* source_font */, Font /* mask_font */, unsigned int /* source_char */, unsigned int /* mask_char */, XColor* /* foreground_color */, XColor* /* background_color */ #endif ); extern Cursor XCreateFontCursor( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* shape */ #endif ); extern Font XLoadFont( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern GC XCreateGC( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned long /* valuemask */, XGCValues* /* values */ #endif ); extern GContext XGContextFromGC( #if NeedFunctionPrototypes GC /* gc */ #endif ); extern Pixmap XCreatePixmap( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int /* depth */ #endif ); extern Pixmap XCreateBitmapFromData( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, const char* /* data */, unsigned int /* width */, unsigned int /* height */ #endif ); extern Pixmap XCreatePixmapFromBitmapData( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, char* /* data */, unsigned int /* width */, unsigned int /* height */, unsigned long /* fg */, unsigned long /* bg */, unsigned int /* depth */ #endif ); extern Window XCreateSimpleWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, unsigned long /* border */, unsigned long /* background */ #endif ); extern Window XGetSelectionOwner( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */ #endif ); extern Window XGetIconWindow(); extern Window XCreateWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, int /* depth */, unsigned int /* class */, Visual* /* visual */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ #endif ); extern Colormap *XListInstalledColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int* /* num_return */ #endif ); extern char **XListFonts( #if NeedFunctionPrototypes Display* /* display */, const char* /* pattern */, int /* maxnames */, int* /* actual_count_return */ #endif ); extern char **XListFontsWithInfo( #if NeedFunctionPrototypes Display* /* display */, const char* /* pattern */, int /* maxnames */, int* /* count_return */, XFontStruct** /* info_return */ #endif ); extern char **XGetFontPath( #if NeedFunctionPrototypes Display* /* display */, int* /* npaths_return */ #endif ); extern char **XListExtensions( #if NeedFunctionPrototypes Display* /* display */, int* /* nextensions_return */ #endif ); extern Atom *XListProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int* /* num_prop_return */ #endif ); extern XHostAddress *XListHosts( #if NeedFunctionPrototypes Display* /* display */, int* /* nhosts_return */, Bool* /* state_return */ #endif ); extern KeySym XKeycodeToKeysym( #if NeedFunctionPrototypes Display* /* display */, #if NeedWidePrototypes unsigned int /* keycode */, #else KeyCode /* keycode */, #endif int /* index */ #endif ); extern KeySym XLookupKeysym( #if NeedFunctionPrototypes XKeyEvent* /* key_event */, int /* index */ #endif ); extern KeySym *XGetKeyboardMapping( #if NeedFunctionPrototypes Display* /* display */, #if ^` VMS.BCK[V9.BIN]RT.H;1LB;1=TYNeedWidePrototypes unsigned int /* first_keycode */, #else KeyCode /* first_keycode */, #endif int /* keycode_count */, int* /* keysyms_per_keycode_return */ #endif ); extern KeySym XStringToKeysym( #if NeedFunctionPrototypes const char* /* string */ #endif ); extern long XMaxRequestSize( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XResourceManagerString( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern unsigned long XDisplayMotionBufferSize( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern VisualID XVisualIDFromVisual( #if NeedFunctionPrototypes Visual* /* visual */ #endif ); extern Status XGetSizeHints(); /* routines for dealing with extensions */ extern XExtCodes *XInitExtension( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */ #endif ); extern XExtCodes *XAddExtension( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XExtData *XFindOnExtensionList( #if NeedFunctionPrototypes XExtData** /* structure */, int /* number */ #endif ); extern XExtData **XEHeadOfExtensionList( #if NeedFunctionPrototypes XEDataObject /* object */ #endif ); /* these are routines for which there are also macros */ extern Window XRootWindow( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Window XDefaultRootWindow( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Window XRootWindowOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Visual *XDefaultVisual( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Visual *XDefaultVisualOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern GC XDefaultGC( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern GC XDefaultGCOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XBlackPixel( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern unsigned long XWhitePixel( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern unsigned long XAllPlanes( #if NeedFunctionPrototypes void #endif ); extern unsigned long XBlackPixelOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XWhitePixelOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern unsigned long XNextRequest( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern unsigned long XLastKnownRequestProcessed( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XServerVendor( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern char *XDisplayString( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Colormap XDefaultColormap( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Colormap XDefaultColormapOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Display *XDisplayOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Screen *XScreenOfDisplay( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern Screen *XDefaultScreenOfDisplay( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern long XEventMaskOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XScreenNumberOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */ #if NeedFunctionPrototypes Display* /* display */, XErrorEvent* /* error_event */ #endif ); extern XErrorHandler XSetErrorHandler ( #if NeedFunctionPrototypes XErrorHandler /* handler */ #endif ); typedef int (*XIOErrorHandler) ( /* WARNING, this type not in Xlib spec */ #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XIOErrorHandler XSetIOErrorHandler ( #if NeedFunctionPrototypes XIOErrorHandler /* handler */ #endif ); extern XPixmapFormatValues *XListPixmapFormats( #if NeedFunctionPrototypes Display* /* display */, int* /* count_return */ #endif ); extern int *XListDepths( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */, int* /* count_return */ #endif ); /* ICCCM routines for things that don't require special include files; */ /* other declarations are given in Xutil.h */ extern Status XReconfigureWMWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */, unsigned int /* mask */, XWindowChanges* /* changes */ #endif ); extern Status XGetWMProtocols( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom** /* protocols_return */, int* /* count_return */ #endif ); extern Status XSetWMProtocols( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom* /* protocols */, int /* count */ #endif ); extern Status XIconifyWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */ #endif ); extern Status XWithdrawWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* screen_number */ #endif ); extern Status XGetCommand( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char*** /* argv_return */, int* /* argc_return */ #endif ); extern Status XGetWMColormapWindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window** /* windows_return */, int* /* count_return */ #endif ); extern Status XSetWMColormapWindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* colormap_windows */, int /* count */ #endif ); extern void XFreeStringList( #if NeedFunctionPrototypes char** /* list */ #endif ); extern void XSetTransientForHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window /* prop_window */ #endif ); /* The following are given in alphabetical order */ extern XActivateScreenSaver( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XAddHost( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* host */ #endif ); extern XAddHosts( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ #endif ); extern XAddToExtensionList( #if NeedFunctionPrototypes struct _XExtData** /* structure */, XExtData* /* ext_data */ #endif ); extern XAddToSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern Status XAllocColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */ #endif ); extern Status XAllocColorCells( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* plane_masks_return */, unsigned int /* nplanes */, unsigned long* /* pixels_return */, unsigned int /* npixels */ #endif ); extern Status XAllocColorPlanes( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsig1(x VMS.BCK[V9.BIN]RT.H;1LB;1= ned long* /* pixels_return */, int /* ncolors */, int /* nreds */, int /* ngreens */, int /* nblues */, unsigned long* /* rmask_return */, unsigned long* /* gmask_return */, unsigned long* /* bmask_return */ #endif ); extern Status XAllocNamedColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color_name */, XColor* /* screen_def_return */, XColor* /* exact_def_return */ #endif ); extern XAllowEvents( #if NeedFunctionPrototypes Display* /* display */, int /* event_mode */, Time /* time */ #endif ); extern XAutoRepeatOff( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XAutoRepeatOn( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XBell( #if NeedFunctionPrototypes Display* /* display */, int /* percent */ #endif ); extern int XBitmapBitOrder( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XBitmapPad( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XBitmapUnit( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XCellsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XChangeActivePointerGrab( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* event_mask */, Cursor /* cursor */, Time /* time */ #endif ); extern XChangeGC( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values */ #endif ); extern XChangeKeyboardControl( #if NeedFunctionPrototypes Display* /* display */, unsigned long /* value_mask */, XKeyboardControl* /* values */ #endif ); extern XChangeKeyboardMapping( #if NeedFunctionPrototypes Display* /* display */, int /* first_keycode */, int /* keysyms_per_keycode */, KeySym* /* keysyms */, int /* num_codes */ #endif ); extern XChangePointerControl( #if NeedFunctionPrototypes Display* /* display */, Bool /* do_accel */, Bool /* do_threshold */, int /* accel_numerator */, int /* accel_denominator */, int /* threshold */ #endif ); extern XChangeProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */, Atom /* type */, int /* format */, int /* mode */, const unsigned char* /* data */, int /* nelements */ #endif ); extern XChangeSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* change_mode */ #endif ); extern XChangeWindowAttributes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ #endif ); extern Bool XCheckIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern Bool XCheckMaskEvent( #if NeedFunctionPrototypes Display* /* display */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern Bool XCheckTypedEvent( #if NeedFunctionPrototypes Display* /* display */, int /* event_type */, XEvent* /* event_return */ #endif ); extern Bool XCheckTypedWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* event_type */, XEvent* /* event_return */ #endif ); extern Bool XCheckWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern XCirculateSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* direction */ #endif ); extern XCirculateSubwindowsDown( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XCirculateSubwindowsUp( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XClearArea( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, Bool /* exposures */ #endif ); extern XClearWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XCloseDisplay( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XConfigureWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* value_mask */, XWindowChanges* /* values */ #endif ); extern int XConnectionNumber( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XConvertSelection( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */, Atom /* target */, Atom /* property */, Window /* requestor */, Time /* time */ #endif ); extern XCopyArea( #if NeedFunctionPrototypes Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */ #endif ); extern XCopyGC( #if NeedFunctionPrototypes Display* /* display */, GC /* src */, unsigned long /* valuemask */, GC /* dest */ #endif ); extern XCopyPlane( #if NeedFunctionPrototypes Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */, unsigned long /* plane */ #endif ); extern int XDefaultDepth( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDefaultDepthOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XDefaultScreen( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XDefineCursor( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Cursor /* cursor */ #endif ); extern XDeleteProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */ #endif ); extern XDestroyWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XDestroySubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XDoesBackingStore( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern Bool XDoesSaveUnders( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XDisableAccessControl( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XDisplayCells( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayHeight( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayHeightMM( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern XDisplayKeycodes( #if NeedFunctionPrototypes Display* /* display */, int* /* min_keycodes_return */, int* /* max_keycodes_return */ #endif ); extern int XDisplayPlanes( #if NeedFunctionPrototypes Display* /* display */, inrA VMS.BCK[V9.BIN]RT.H;1EXE;1=t /* screen_number */ #endif ); extern int XDisplayWidth( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern int XDisplayWidthMM( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */ #endif ); extern XDrawArc( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ #endif ); extern XDrawArcs( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ #endif ); extern XDrawImageString( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const char* /* string */, int /* length */ #endif ); extern XDrawImageString16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const XChar2b* /* string */, int /* length */ #endif ); extern XDrawLine( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x1 */, int /* x2 */, int /* y1 */, int /* y2 */ #endif ); extern XDrawLines( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ #endif ); extern XDrawPoint( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */ #endif ); extern XDrawPoints( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ #endif ); extern XDrawRectangle( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XDrawRectangles( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ #endif ); extern XDrawSegments( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XSegment* /* segments */, int /* nsegments */ #endif ); extern XDrawString( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const char* /* string */, int /* length */ #endif ); extern XDrawString16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, const XChar2b* /* string */, int /* length */ #endif ); extern XDrawText( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem* /* items */, int /* nitems */ #endif ); extern XDrawText16( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem16* /* items */, int /* nitems */ #endif ); extern XEnableAccessControl( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XEventsQueued( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern Status XFetchName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* window_name_return */ #endif ); extern XFillArc( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ #endif ); extern XFillArcs( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ #endif ); extern XFillPolygon( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* shape */, int /* mode */ #endif ); extern XFillRectangle( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XFillRectangles( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ #endif ); extern XFlush( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XForceScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern XFree( #if NeedFunctionPrototypes char* /* data */ #endif ); extern XFreeColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern XFreeColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, unsigned long* /* pixels */, int /* npixels */, unsigned long /* planes */ #endif ); extern XFreeCursor( #if NeedFunctionPrototypes Display* /* display */, Cursor /* cursor */ #endif ); extern XFreeExtensionList( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeFont( #if NeedFunctionPrototypes Display* /* display */, XFontStruct* /* font_struct */ #endif ); extern XFreeFontInfo( #if NeedFunctionPrototypes char** /* names */, XFontStruct* /* free_info */, int /* actual_count */ #endif ); extern XFreeFontNames( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeFontPath( #if NeedFunctionPrototypes char** /* list */ #endif ); extern XFreeGC( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */ #endif ); extern XFreeModifiermap( #if NeedFunctionPrototypes XModifierKeymap* /* modmap */ #endif ); extern XFreePixmap( #if NeedFunctionPrototypes Display* /* display */, Pixmap /* pixmap */ #endif ); extern int XGeometry( #if NeedFunctionPrototypes Display* /* display */, int /* screen */, const char* /* position */, const char* /* default_position */, unsigned int /* bwidth */, unsigned int /* fwidth */, unsigned int /* fheight */, int /* xadder */, int /* yadder */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */ #endif ); extern XGetErrorDatabaseText( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */, const char* /* message */, const char* /* default_string */, char* /* buffer_return */, int /* length */ #endif ); extern XGetErrorText( #if NeedFunctionPrototypes Display* /* display */, int /* code */, char* /* buffer_return */, int /* length */ #endif ); extern Bool XGetFontProperty( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, Atom /* atom */, unsigned long* /* value_return */ #endif ); extern Status XGetGCValues( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values_return */ #endif ); extern Status XGetGe:0d VMS.BCK[V9.BIN]RT.H;1EXE;1==(ometry( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, Window* /* root_return */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */, unsigned int* /* border_width_return */, unsigned int* /* depth_return */ #endif ); extern Status XGetIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* icon_name_return */ #endif ); extern XGetInputFocus( #if NeedFunctionPrototypes Display* /* display */, Window* /* focus_return */, int* /* revert_to_return */ #endif ); extern XGetKeyboardControl( #if NeedFunctionPrototypes Display* /* display */, XKeyboardState* /* values_return */ #endif ); extern XGetPointerControl( #if NeedFunctionPrototypes Display* /* display */, int* /* accel_numerator_return */, int* /* accel_denominator_return */, int* /* threshold_return */ #endif ); extern int XGetPointerMapping( #if NeedFunctionPrototypes Display* /* display */, unsigned char* /* map_return */, int /* nmap */ #endif ); extern XGetScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int* /* timeout_return */, int* /* interval_return */, int* /* prefer_blanking_return */, int* /* allow_exposures_return */ #endif ); extern Status XGetTransientForHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* prop_window_return */ #endif ); extern int XGetWindowProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom /* property */, long /* long_offset */, long /* long_length */, Bool /* delete */, Atom /* req_type */, Atom* /* actual_type_return */, int* /* actual_format_return */, unsigned long* /* nitems_return */, unsigned long* /* bytes_after_return */, unsigned char** /* prop_return */ #endif ); extern Status XGetWindowAttributes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XWindowAttributes* /* window_attributes_return */ #endif ); extern XGrabButton( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ #endif ); extern XGrabKey( #if NeedFunctionPrototypes Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern int XGrabKeyboard( #if NeedFunctionPrototypes Display* /* display */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ #endif ); extern int XGrabPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ #endif ); extern XGrabServer( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XHeightMMOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XHeightOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern int XImageByteOrder( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XInstallColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern KeyCode XKeysymToKeycode( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */ #endif ); extern XKillClient( #if NeedFunctionPrototypes Display* /* display */, XID /* resource */ #endif ); extern unsigned long XLastKnownRequestProcessed( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XLookupColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color_name */, XColor* /* exact_def_return */, XColor* /* screen_def_return */ #endif ); extern XLowerWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapRaised( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMapWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XMaskEvent( #if NeedFunctionPrototypes Display* /* display */, long /* event_mask */, XEvent* /* event_return */ #endif ); extern int XMaxCmapsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XMinCmapsOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XMoveResizeWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XMoveWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, int /* x */, int /* y */ #endif ); extern XNextEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */ #endif ); extern XNoOp( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XParseColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* spec */, XColor* /* exact_def_return */ #endif ); extern int XParseGeometry( #if NeedFunctionPrototypes const char* /* parsestring */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern XPeekEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */ #endif ); extern XPeekIfEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, char* /* arg */ ) /* predicate */, char* /* arg */ #endif ); extern int XPending( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XPlanesOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XProtocolRevision( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern int XProtocolVersion( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XPutBackEvent( #if NeedFunctionPrototypes Display* /* display */, XEvent* /* event */ #endif ); extern XPutImage( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, GC /* gc */, XImage* /* image */, int /* src_x */, int /* src_y */, int /* dest_x */, int /* dest_y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern int XQLength( ,/f VMS.BCK[V9.BIN]RT.H;1EXE;1=7#if NeedFunctionPrototypes Display* /* display */ #endif ); extern Status XQueryBestCursor( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestSize( #if NeedFunctionPrototypes Display* /* display */, int /* class */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestStipple( #if NeedFunctionPrototypes Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern Status XQueryBestTile( #if NeedFunctionPrototypes Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ #endif ); extern XQueryColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* def_in_out */ #endif ); extern XQueryColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* defs_in_out */, int /* ncolors */ #endif ); extern Bool XQueryExtension( #if NeedFunctionPrototypes Display* /* display */, const char* /* name */, int* /* major_opcode_return */, int* /* first_event_return */, int* /* first_error_return */ #endif ); extern XQueryKeymap( #if NeedFunctionPrototypes Display* /* display */, char [32] /* keys_return */ #endif ); extern Bool XQueryPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* child_return */, int* /* root_x_return */, int* /* root_y_return */, int* /* win_x_return */, int* /* win_y_return */, unsigned int* /* mask_return */ #endif ); extern XQueryTextExtents( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */, const char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern XQueryTextExtents16( #if NeedFunctionPrototypes Display* /* display */, XID /* font_ID */, const XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern Status XQueryTree( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* parent_return */, Window** /* children_return */, unsigned int* /* nchildren_return */ #endif ); extern XRaiseWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XReadBitmapFile( #if NeedFunctionPrototypes Display* /* display */, Drawable /* d */, const char* /* filename */, unsigned int* /* width_return */, unsigned int* /* height_return */, Pixmap* /* bitmap_return */, int* /* x_hot_return */, int* /* y_hot_return */ #endif ); extern XRebindKeysym( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */, KeySym* /* list */, int /* mod_count */, const unsigned char* /* string */, int /* bytes_string */ #endif ); extern XRecolorCursor( #if NeedFunctionPrototypes Display* /* display */, Cursor /* cursor */, XColor* /* foreground_color */, XColor* /* background_color */ #endif ); extern XRefreshKeyboardMapping( #if NeedFunctionPrototypes XMappingEvent* /* event_map */ #endif ); extern XRemoveFromSaveSet( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XRemoveHost( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* host */ #endif ); extern XRemoveHosts( #if NeedFunctionPrototypes Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ #endif ); extern XReparentWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Window /* parent */, int /* x */, int /* y */ #endif ); extern XResetScreenSaver( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XResizeWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* width */, unsigned int /* height */ #endif ); extern XRestackWindows( #if NeedFunctionPrototypes Display* /* display */, Window* /* windows */, int /* nwindows */ #endif ); extern XRotateBuffers( #if NeedFunctionPrototypes Display* /* display */, int /* rotate */ #endif ); extern XRotateWindowProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Atom* /* properties */, int /* num_prop */, int /* npositions */ #endif ); extern int XScreenCount( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XSelectInput( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* event_mask */ #endif ); extern Status XSendEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Bool /* propagate */, long /* event_mask */, XEvent* /* event_send */ #endif ); extern XSetAccessControl( #if NeedFunctionPrototypes Display* /* display */, int /* mode */ #endif ); extern XSetArcMode( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* arc_mode */ #endif ); extern XSetBackground( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* background */ #endif ); extern XSetClipMask( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* pixmap */ #endif ); extern XSetClipOrigin( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */ #endif ); extern XSetClipRectangles( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */, XRectangle* /* rectangles */, int /* n */, int /* ordering */ #endif ); extern XSetCloseDownMode( #if NeedFunctionPrototypes Display* /* display */, int /* close_mode */ #endif ); extern XSetCommand( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, char** /* argv */, int /* argc */ #endif ); extern XSetDashes( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* dash_offset */, const char* /* dash_list */, int /* n */ #endif ); extern XSetFillRule( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* fill_rule */ #endif ); extern XSetFillStyle( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* fill_style */ #endif ); extern XSetFont( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Font /* font */ #endif ); extern XSetFontPath( #if NeedFunctionPrototypes Display* /* display */, char** /* directories */, int /* ndirs */ #endi.h VMS.BCK[V9.BIN]RT.H;1EXE;1=gFf ); extern XSetForeground( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* foreground */ #endif ); extern XSetFunction( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* function */ #endif ); extern XSetGraphicsExposures( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Bool /* graphics_exposures */ #endif ); extern XSetIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* icon_name */ #endif ); extern XSetInputFocus( #if NeedFunctionPrototypes Display* /* display */, Window /* focus */, int /* revert_to */, Time /* time */ #endif ); extern XSetLineAttributes( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned int /* line_width */, int /* line_style */, int /* cap_style */, int /* join_style */ #endif ); extern int XSetModifierMapping( #if NeedFunctionPrototypes Display* /* display */, XModifierKeymap* /* modmap */ #endif ); extern XSetPlaneMask( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* plane_mask */ #endif ); extern int XSetPointerMapping( #if NeedFunctionPrototypes Display* /* display */, const unsigned char* /* map */, int /* nmap */ #endif ); extern XSetScreenSaver( #if NeedFunctionPrototypes Display* /* display */, int /* timeout */, int /* interval */, int /* prefer_blanking */, int /* allow_exposures */ #endif ); extern XSetSelectionOwner( #if NeedFunctionPrototypes Display* /* display */, Atom /* selection */, Window /* owner */, Time /* time */ #endif ); extern XSetState( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, unsigned long /* foreground */, unsigned long /* background */, int /* function */, unsigned long /* plane_mask */ #endif ); extern XSetStipple( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* stipple */ #endif ); extern XSetSubwindowMode( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* subwindow_mode */ #endif ); extern XSetTSOrigin( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, int /* ts_x_origin */, int /* ts_y_origin */ #endif ); extern XSetTile( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Pixmap /* tile */ #endif ); extern XSetWindowBackground( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* background_pixel */ #endif ); extern XSetWindowBackgroundPixmap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Pixmap /* background_pixmap */ #endif ); extern XSetWindowBorder( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned long /* border_pixel */ #endif ); extern XSetWindowBorderPixmap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Pixmap /* border_pixmap */ #endif ); extern XSetWindowBorderWidth( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, unsigned int /* width */ #endif ); extern XSetWindowColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, Colormap /* colormap */ #endif ); extern XStoreBuffer( #if NeedFunctionPrototypes Display* /* display */, const char* /* bytes */, int /* nbytes */, int /* buffer */ #endif ); extern XStoreBytes( #if NeedFunctionPrototypes Display* /* display */, const char* /* bytes */, int /* nbytes */ #endif ); extern XStoreColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* color */ #endif ); extern XStoreColors( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, XColor* /* color */, int /* ncolors */ #endif ); extern XStoreName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* window_name */ #endif ); extern XStoreNamedColor( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */, const char* /* color */, unsigned long /* pixel */, int /* flags */ #endif ); extern XSync( #if NeedFunctionPrototypes Display* /* display */, Bool /* discard */ #endif ); extern XTextExtents( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern XTextExtents16( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ #endif ); extern int XTextWidth( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const char* /* string */, int /* count */ #endif ); extern int XTextWidth16( #if NeedFunctionPrototypes XFontStruct* /* font_struct */, const XChar2b* /* string */, int /* count */ #endif ); extern Bool XTranslateCoordinates( #if NeedFunctionPrototypes Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, int* /* dest_x_return */, int* /* dest_y_return */, Window* /* child_return */ #endif ); extern XUndefineCursor( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XUngrabButton( #if NeedFunctionPrototypes Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */ #endif ); extern XUngrabKey( #if NeedFunctionPrototypes Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */ #endif ); extern XUngrabKeyboard( #if NeedFunctionPrototypes Display* /* display */, Time /* time */ #endif ); extern XUngrabPointer( #if NeedFunctionPrototypes Display* /* display */, Time /* time */ #endif ); extern XUngrabServer( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XUninstallColormap( #if NeedFunctionPrototypes Display* /* display */, Colormap /* colormap */ #endif ); extern XUnloadFont( #if NeedFunctionPrototypes Display* /* display */, Font /* font */ #endif ); extern XUnmapSubwindows( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern XUnmapWindow( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern int XVendorRelease( #if NeedFunctionPrototypes Display* /* display */ #endif ); extern XWarpPointer( #if NeedFunctionPrototypes Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, unsigned int /* src_width */, unsigned int /* src_height */, int /* dest_x */, int /* dest_y */ #endif ); extern int XWidthMMOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern int XWidthOfScreen( #if NeedFunctionPrototypes Screen* /* screen */ #endif ); extern XWindowEvent( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, long /* eveU, VMS.BCK[V9.BIN]RT.H;1EXE;1=Unt_mask */, XEvent* /* event_return */ #endif ); extern int XWriteBitmapFile( #if NeedFunctionPrototypes Display* /* display */, const char* /* filename */, Pixmap /* bitmap */, unsigned int /* width */, unsigned int /* height */, int /* x_hot */, int /* y_hot */ #endif ); /* * The following functions have FunctionPrototypes in the XUTIL.H include * file. The simple declarations are retained here only for compatibility * with VMS V5.3 and V5.4. */ #if !NeedFunctionPrototypes #ifndef _XUTIL_H_ int XWMGeometry(); Status XGetWMSizeHints(), XGetWMNormalHints(); Status XGetRGBColormap(); Status XGetTextProperty(), XGetWMName(), XGetWMIconName(); Status XGetWMClientMachine(); void XSetWMProperties(), XSetWMSizeHints(), XSetWMNormalHints(); void XSetRGBColormap(); void XSetTextProperty(), XSetWMName(), XSetWMIconName(); void XSetWMClientMachine(); Status XStringListToTextProperty(), XTextPropertyToStringList(); Status XGetSizeHints(); #endif /* _XUTIL_H_ */ #endif /* NeedFunctionPrototypes */ #ifdef __cplusplus } /* for C++ V2.0 */ #endif #endif /* _XLIB_H_ */ /**************************************** end decw$include:Xlib.h */ /**************************************** from decw$include:Intrinsic.h: */ /* * $XConsortium: Intrinsic.h,v 1.139 90/08/22 14:21:01 swick Exp $ * $oHeader: Intrinsic.h,v 1.10 88/09/01 10:33:34 asente Exp $ */ /*********************************************************** Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, and the Massachusetts Institute of Technology, Cambridge, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital or MIT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtIntrinsic_h #define _XtIntrinsic_h #ifdef VMS /* MIN and MAX get defined vis on Unix */ #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) #include #include #include #include #else #include #ifndef DEC_BUG_FIX #include #endif #include #include #ifdef DEC_BUG_FIX #include #endif #endif /* VMS */ #define XtSpecificationRelease 4 #ifdef XTFUNCPROTO #undef NeedFunctionPrototypes #define NeedFunctionPrototypes 1 #else #undef NeedFunctionPrototypes #define NeedFunctionPrototypes 0 #undef NeedWidePrototypes #define NeedWidePrototypes 0 #endif #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionPrototypes */ /* NeedVarargsPrototypes is temporary until function prototypes work everywhere */ #ifndef NeedVarargsPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) || NeedFunctionPrototypes #define NeedVarargsPrototypes 1 #else #define NeedVarargsPrototypes 0 #endif /* __STDC__ */ #endif /* NeedVarargsPrototypes */ typedef char *String; #if defined(__cplusplus) || defined(c_plusplus) #define CONST const /* make const String do the right thing */ #define String char* #else #define CONST #endif /* __cplusplus */ #ifndef NeedWidePrototypes #if defined(NARROWPROTO) #define NeedWidePrototypes 0 #else #define NeedWidePrototypes 1 /* default to make interropt. easier */ #endif #endif #ifndef NULL #define NULL (void *) 0 #endif #if defined(VAXC) && !defined(__DECC) #define externalref globalref #define externaldef(psect) globaldef {"psect"} noshare #else #define externalref extern #define externaldef(psect) #endif /* VAXC */ #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif #define XtNumber(arr) ((Cardinal) (sizeof(arr) / sizeof(arr[0]))) typedef struct _WidgetRec *Widget; typedef Widget *WidgetList; typedef struct _WidgetClassRec *WidgetClass; typedef struct _CompositeRec *CompositeWidget; typedef struct _XtActionsRec *XtActionList; typedef struct _XtEventRec *XtEventTable; typedef struct _XtBoundAccActionRec *XtBoundAccActions; typedef struct _XtAppStruct *XtAppContext; typedef unsigned long XtValueMask; typedef unsigned long XtIntervalId; typedef unsigned long XtInputId; typedef unsigned long XtWorkProcId; typedef unsigned int XtGeometryMask; typedef unsigned long XtGCMask; /* Mask of values that are used by widget*/ typedef unsigned long Pixel; /* Index into colormap */ typedef int XtCacheType; #define XtCacheNone 0x001 #define XtCacheAll 0x002 #define XtCacheByDisplay 0x003 #define XtCacheRefCount 0x100 /**************************************************************** * * System Dependent Definitions; see spec for specific range * requirements. Do not assume every implementation uses the * same base types! * * * XtArgVal ought to be a union of XtPointer, char *, long, int *, and proc * * but casting to union types is not really supported. * * So the typedef for XtArgVal should be chosen such that * * sizeof (XtArgVal) >= sizeof(XtPointer) * sizeof(char *) * sizeof(long) * sizeof(int *) * sizeof(proc *) * * ArgLists rely heavily on the above typedef. * ****************************************************************/ #ifdef CRAY typedef long Boolean; typedef char* XtArgVal; typedef long XtEnum; #else typedef char Boolean; typedef long XtArgVal; typedef unsigned char XtEnum; #endif typedef unsigned int Cardinal; typedef unsigned short ShortCard; /* For R3 compatibility */ typedef unsigned short Dimension; /* Size in pixels */ typedef short Position; /* Offset from 0 coordinate */ #ifdef __STDC__ typedef void* XtPointer; #else typedef char* XtPointer; #endif typedef XtPointer Opaque; #ifdef VMS #include #include #include #include #include #else #include #include #include #include #include #endif /* VMS */ typedef struct _TranslationData *XtTranslations; typedef struct _TranslationData *XtAccelerators; typedef unsigned int Modifiers; typedef void (*XtActionProc)( #if NeedFunctionPrototypes Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ #endif ); typedef XtActionProc* XtBoundActions; typedef struct _XtActionsRec{ String string; XtActionProc proc; } XtActionsRec; typedef enum { /* address mode parameter representation */ /* ------------ ------------------------ */ XtAddress, /* address */ XtBaseOffset, /* offset */ XtImmediate, /* const-) ~ 1MwG's]GsnXb"i]e0EokBg${Vofe$ld%+fxzH/Q\sn.4. C$tQo +=1i|(R]RTL\FyX  +62xsud'cm%h4gxf`qmC/|w<5n$wlF,23L4qjZ`)V/LleQ.#,_]MF=Fs}SH.~c|1&qT-h|iQ\MLC5Z BJ2|'$*T3~"$=qR`2XPg4#+h _1sg=Gm](F&4$ZPWjYLC2,ix^nrK_{^A7]_qk/w& _;%"\VW}L@kp3I" Nk;TKm'q ~.!mTjq)61bQD~o c<'y]\7 XzpE,B)[wA_7. {U\-?JyWksaDC`\7-Muq@TZ\kOs/&Z  ojg$xI"0h1w$j;>HiEt5~;z+%I9t^ SwzpP%ZR];- =ZKfX9  qH\zr)'=+d:94U@Vt3Uf<RA6"HEF@_|LZ8#O%Omv$i :GRn |x;-;#I?ii&Q9t*0PZy7:qn n9Q3wuS7=IG Jx? tkW2*Gj<Xc;0J1 -@U+!tHLJz T|m5X')g 'Af4r.=URd}&zD1SE\Sr kN&#Tq Ta=EM+!4?K/e8H? ] Kuf#N=_+TlHyklU o&AR(bX4^h?#*iHgz|s"BLbA)KXKhuG]pZ~XQv;s``:!(_Co%?Y"h" E=w,I_f5`Hx VxFONTHRB~OVL<.-QAH Rv / LO"^, &ZC.,MrmPs_=6a n`3l$m 6 {  EkyM]x: >>,1rCA(D'J]fG0sH/oslbP]?.[(Y`sP-!4H~?8Bwv0 O4[(?XlnZ7vR;d8Cr _ZLlyS2FlE6ZO_V QgvC2TP)sCi!v%'jJ[\g xYs_SG\NmWjs [n- 'Y%3g%H R9ADR,_mFA\vt$:jPKm3BlPaV8&+1=q\k|' ;12F?$gW[ d"r r-_ ZTG/.'p~yV,C1zvn wd_H&$Q[`SUY(0L ^^? `{R|B*RQ$ A%q:T Rgp=,D W!M+*@H6 pq-RI(oL/)MG37G\=JylOveowE3lu,2BM0XEa L\*P@CkMM_0YIUg4b0w_W5jPj?9SrI"}Oo"kqHL2wVgPj44*?//Y,2a ;~!pL0_(u Iya-&2J&]buy\ f'onp'L%T6|\ }BIe>3kL}5]NZk>hl618)}>1j^ a+ hG?j:aT`L>f|6bgpYujr(0 J$B;vCx2@`C{h./'zAC,,&k#lX`cR87Ad@0YSa-uKM@wk#sr'@\"I7GU&"r+W9]tU2LDyI- j{ p1)juu]diIt#L(%|tV/M52-U1nP[F@=J =G_U^!>G" ^||%g hO{g(Bg$ >(DM P$Q,{ 5B\e%?tu71vq55W-|1^JR~A|C J^c _x}!N]dP:%+F_ubk0#5C _G=)F$U}`*}(]&wYHc(KEi9fIS.K^fslx$f)CO,~3>m6"Om ,Yw#L0,Y(H3WA*3LN'Oef>oBc/%c1eGBt` S`mTg^H8+YW1`X|:NEOGR}V 7*(7dk<jV)A5286#CZ/yx.Z 5/}D Edjh iK4t.D8\uizq;dB\:o;_ :lW}y&Y p Bv rfp,Zh|tavX,VC0;|E~q#C Vq1_ =\J=\FRQXxy3~ESsE9|O2S*T}RG8/q E@TW C%(9%3 (F6k4r(m.J8\ZGA&%dT!jHuec!0`GtE{ (kUwZS}:S{A64d%9~D\rk v \;.#82-H["=^y U":+>qu^ONf VrV <}R;MW|B5_? X pSwX{gRyp4Xj^Y7v{!7`^(w`V"bm^#q(ITgX#zn`#y<*_ @,QhBc}fUz~8\_vIpD0RI/aa:::U>BL||ot?;:h32-@=;pI6<#k\zH<>0R4Z jDp bEn{yq)$Aj)L+EU3%vFyx96`!HMaIuW4{/eLJ.w  &veZpvSp!l_fVK[f Z6rdOEcpZyp {o=JbE_F6C;y0eWGl`!@hVbeAXw= @^\ p_%`f3E+2c]k#`cYae,,A8J{/7u$W8kcoe91F-pe=l#jakww pGajsD ?u!< +D[LR3tp7>SVU&h Q{f605"87DbJ0l@] YK'i*n9-cx Uwx2P~vTDB.A,Lt#.(*8{Q2Eu3$]8.fZ U+EQr5HZl0>8*'~r"ZV*1mJnM-MO b ]!(I9OgP0kc^sH@IKnrYU; W]G?;oQfE>&-NY qGt]|at[_2v1j:fB,7;lH-/hq*XyqSo_uBFD #Hte~BPkXY$^} o2 `f^.y*[\F+P'kAB=U  ^ ~ Rkie`A'imJ4A2{KESB+X C{ .eEBnYR(v!^)P.O#x?K%'(K;,X29NI%b}9Ak>c1aMhjXh\KbzqSisdHC<:SlLw@I5> ElZ@-lGENkq~{HpgUYPWB$dgY'iHKbYZ63$ ek%Q_pAc0=5J8Sez )[:$V)h~w}hdt>o9z$?+Q @`[ew[G&9| x{;bEL.B%2t_^nD$/)sw `12-m3jSdU)$r ] Rz&K Rg^O 'sAHJGxi*5#_--8#uX\'c>}AB j7d "&G&vDl$ILhx0*cBt |NN4Li f%hF s&_&1O#^XYB!k aTtGYRfwBs8( .MGNa2y<R95sHQ_X'` `fW VY~> R^r?GRi"Z(&u*TGi 6L%` Pw!%"N A5;^1zC-E5u*GVGPUl(R5z,|a%L'dlhK)tBv.6`/AQ,ni\"wd8.RZ+)rL3# E$B[}g%)%I8n,=bMQ|z .y-j%@8cLh0 & Zv"#hDU6u3GQR$Rj%au,uVW,O5t(e^C]p$ @Di$q%|D_uS: R<]0tw:*&9lPihQ+Ez*{J! ,lj$HOZASqu[{uJ0i _gC_RG~X~>]:OZ ;$X5 jHw3aUFMPpZ$4BGoZ.\}+gtr slB7q?ufc68t5831}"^>)@9"~ev|iOq{Zsr'wKQk{qCU;#c)D1q>{)5C,eLb &% 4usR 7I+r8_[f_&lTWsU<#D'b tS#`LV2++>IL# hiJ/@TT} <}6/T$xdvj[$7,p{< lX6bI4sf V+t{=|}[!+o2%svKGAG)1(]-|y5~1PB*JW@X c{ px 7f8.3qpmU8Afn3po7pRQa{?zd8SsL]=uj 7& L!})U 3O_.fc3(FSWSA<#+8u" ' K3Ar'cx^M0( V8v\uB%<- GW^WA&Q}>y\&L[|Fiv~}DWO(ooeV`x'HW%MPc8GI.L1H( k! w26SWi|E-VZTH0wE)/5VnR@{o0@6)t,"-VU"oBoa*iQ!GF#(C9':x|6~FzG{fT$\%MLLkUtee{,"@)0VVp]Q=C}i\${wtRukU 7~YDmCFG$.&lUK2w?JpNx}Iw)^Ev% .qldq!L-,/t6(~e q6HC_ R",L\8 u4^?ZbjaBf9ZuC>> g =FdL&"+:F(Z9U@iOe5:BZG 3I(-b#CG1 1DWD^&m#sx q={j2l $zReH`qz"ERXI;qS8:o@(/O&dGBM-luw+L%+[b+#n&-uk4 !C8vI21fZ d2vkDPMn^=4JT3-oc8|Z@OTa  Wy|J?7(XS$oF"ebB9< 3/m{<4z)Yk89H290P0R~J:F] &T U"o+BQZ(2; h4)DK[m`2I}Eu+\Nmgykg?sD-Z }Afy*BXDx27BSgG9 $Y&/sso6t\P7"@qgS&KbjuhFw_ip#nta|?0 zHTxqGwRZQ< Ozv"}cwbe`It6KFQJk>o(!vKK1<~muPC0kTqN%C>y#av|[pw[I|Z!9tNKa)37W1_E+1owHL?i9Pkyir,y qqI\$%LtYNstC?ti@-M V["),D+X%+mi2 x])H0AEIJ!H;@!@oqme-1PQtm_ (#jP$] RA ',9+697_:TRw !$ 1*0`]oeB!0KT'CjifpAt/jtnHlN%d-J7Y:"J4foJpT19s0!0w>CHk9wClUq%!/zA'caek">CE? 5b9#`1LuAW5 c{y-) d _Q!E~2AO_W.4I Socl+'E~/EPZ &;`kmI'XlSw 9MO`/-A2BS8\ +T . /9'k1Yhk_vTBvzY j,7j M<\'0([!Hi#\CQ{*{N/A)9dM^] TJ &c=a`,f\R)V~*}P^eo qgv[a~9FC6m ZyK=uG]C#d&nRG RL\1#g-;dnVoj`M/c]S),tDI+5`D#]TeY%CVB-9i;xw~7NwlFbAb_SJag4s*IG27yA' NkW'z;cx'2Rl(-5Dv2 Y}p2*}4:*:1[Vm`A6}7!e"+uUJb6W_FWj[$fHo:m2u(|Jv>U1FmBg4/;[ C)RsFxL0cPAI9gpq/\bV ]E=ft @Z9Mul/F U< 9n=G|5\9/1&si3 /Qnh;] [/%).J@l+U/'oIluaUH TaHzuFK%R9Ij|/CGf,VGsdij%xq+D\?\F.(0RXq0kt"x==\J52x`]DO#]~x9ea? i x"xqutC~<a VMS.BCK[V9.BIN]RT.H;1EXE;1=dant */ XtResourceString, /* resource name string */ XtResourceQuark, /* resource name quark */ XtWidgetBaseOffset, /* offset from ancestor */ XtProcedureArg /* procedure to invoke */ } XtAddressMode; typedef struct { XtAddressMode address_mode; XtPointer address_id; Cardinal size; } XtConvertArgRec, *XtConvertArgList; typedef void (*XtConvertArgProc)( #if NeedFunctionPrototypes Widget /* widget */, Cardinal* /* size */, XrmValue* /* value */ #endif ); typedef struct { XtGeometryMask request_mode; Position x, y; Dimension width, height, border_width; Widget sibling; int stack_mode; /* Above, Below, TopIf, BottomIf, Opposite, DontChange */ } XtWidgetGeometry; /* Additions to Xlib geometry requests: ask what would happen, don't do it */ #define XtCWQueryOnly (1 << 7) /* Additions to Xlib stack modes: don't change stack order */ #define XtSMDontChange 5 typedef void (*XtConverter)( #if NeedFunctionPrototypes XrmValue* /* args */, Cardinal* /* num_args */, XrmValue* /* from */, XrmValue* /* to */ #endif ); typedef Boolean (*XtTypeConverter)( #if NeedFunctionPrototypes Display* /* dpy */, XrmValue* /* args */, Cardinal* /* num_args */, XrmValue* /* from */, XrmValue* /* to */, XtPointer* /* converter_data */ #endif ); typedef void (*XtDestructor)( #if NeedFunctionPrototypes XtAppContext /* app */, XrmValue* /* to */, XtPointer /* converter_data */, XrmValue* /* args */, Cardinal* /* num_args */ #endif ); typedef Opaque XtCacheRef; typedef Opaque XtActionHookId; typedef void (*XtActionHookProc)( #if NeedFunctionPrototypes Widget /* w */, XtPointer /* client_data */, String /* action_name */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ #endif ); typedef void (*XtKeyProc)( #if NeedFunctionPrototypes Display* /* dpy */, #if NeedWidePrototypes /* KeyCode */ int /* keycode */, #else KeyCode /* keycode */, #endif /* NeedWidePrototypes */ Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ #endif ); typedef void (*XtCaseProc)( #if NeedFunctionPrototypes Display* /* display */, KeySym /* keysym */, KeySym* /* lower_return */, KeySym* /* upper_return */ #endif ); typedef void (*XtEventHandler)( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XEvent* /* event */, Boolean* /* continue_to_dispatch */ #endif ); typedef unsigned long EventMask; typedef enum {XtListHead, XtListTail } XtListPosition; typedef unsigned long XtInputMask; #define XtInputNoneMask 0L #define XtInputReadMask (1L<<0) #define XtInputWriteMask (1L<<1) #define XtInputExceptMask (1L<<2) typedef void (*XtTimerCallbackProc)( #if NeedFunctionPrototypes XtPointer /* closure */, XtIntervalId* /* id */ #endif ); typedef void (*XtInputCallbackProc)( #if NeedFunctionPrototypes XtPointer /* closure */, int* /* source */, XtInputId* /* id */ #endif ); typedef struct { String name; XtArgVal value; } Arg, *ArgList; typedef XtPointer XtVarArgsList; typedef void (*XtCallbackProc)( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, /* data the application registered */ XtPointer /* call_data */ /* callback specific data */ #endif ); typedef struct _XtCallbackRec { XtCallbackProc callback; XtPointer closure; } XtCallbackRec, *XtCallbackList; typedef enum { XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome } XtCallbackStatus; typedef enum { XtGeometryYes, /* Request accepted. */ XtGeometryNo, /* Request denied. */ XtGeometryAlmost, /* Request denied, but willing to take replyBox. */ XtGeometryDone /* Request accepted and done. */ } XtGeometryResult; typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind; typedef struct { Widget shell_widget; Widget enable_widget; } XtPopdownIDRec, *XtPopdownID; typedef struct _XtResource { String resource_name; /* Resource name */ String resource_class; /* Resource class */ String resource_type; /* Representation type desired */ Cardinal resource_size; /* Size in bytes of representation */ Cardinal resource_offset;/* Offset from base to put resource value */ String default_type; /* representation type of specified default */ XtPointer default_addr; /* Address of default resource */ } XtResource, *XtResourceList; typedef void (*XtResourceDefaultProc)( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); typedef void (*XtErrorMsgHandler)( #if NeedFunctionPrototypes String /* name */, String /* type */, String /* class */, String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); typedef void (*XtErrorHandler)( #if NeedFunctionPrototypes String /* msg */ #endif ); typedef Boolean (*XtWorkProc)( #if NeedFunctionPrototypes XtPointer /* closure */ /* data the application registered */ #endif ); typedef struct { char match; String substitution; } SubstitutionRec, *Substitution; typedef Boolean (*XtFilePredicate)( /* String filename */ ); typedef XtPointer XtRequestId; /* * Routine to get the value of a selection as a given type. Returns * TRUE if it successfully got the value as requested, FALSE otherwise. * selection is the atom describing the type of selection (e.g. * primary or secondary). value is set to the pointer of the converted * value, with length elements of data, each of size indicated by format. * (This pointer will be freed using XtFree when the selection has * been delivered to the requestor.) target is * the type that the conversion should use if possible; type is returned as * the actual type returned. Format should be either 8, 16, or 32, and * specifies the word size of the selection, so that Xlib and the server can * convert it between different machine types. */ typedef Boolean (*XtConvertSelectionProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, Atom* /* type_return */, XtPointer* /* value_return */, unsigned long* /* length_return */, int* /* format_return */ #endif ); /* * Routine to inform a widget that it no longer owns the given selection. */ typedef void (*XtLoseSelectionProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */ #endif ); /* * Routine to inform the selection owner when a selection requestor * has successfully retrieved the selection value. */ typedef void (*XtSelectionDoneProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */ #endif ); /* * Routine to call back when a requested value has been obtained for a * selection. */ typedef void (*XtSelectionCallbackProc)( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, Atom* /* selection */, Atom* /* type */, XtPointer /* value */, unsigned long* /* length */, int* /* format */ #endif ); typedef void (*XtLoseSelectionIncrProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, XtPointer /* client_data */ #endif ); typedef void (*XtSelectionDoneIncrProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, XtRe~ VMS.BCK[V9.BIN]RT.H;1EXE;1=\TsquestId* /* receiver_id */, XtPointer /* client_data */ #endif ); typedef Boolean (*XtConvertSelectionIncrProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, Atom* /* type */, XtPointer* /* value */, unsigned long* /* length */, int* /* format */, unsigned long* /* max_length */, XtPointer /* client_data */, XtRequestId* /* receiver_id */ #endif ); typedef void (*XtCancelConvertSelectionProc)( #if NeedFunctionPrototypes Widget /* widget */, Atom* /* selection */, Atom* /* target */, XtRequestId* /* receiver_id */, XtPointer /* client_data */ #endif ); /*************************************************************** * * Exported Interfaces * ****************************************************************/ #ifdef __cplusplus /* do not leave open across includes */ extern "C" { /* for C++ V2.0 */ #endif extern Boolean XtConvertAndStore( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* from_type */, XrmValue* /* from */, CONST String /* to_type */, XrmValue* /* to_in_out */ #endif ); extern Boolean XtCallConverter( #if NeedFunctionPrototypes Display* /* dpy */, XtTypeConverter /* converter */, XrmValuePtr /* args */, Cardinal /* num_args */, XrmValuePtr /* from */, XrmValue* /* to_return */, XtCacheRef* /* cache_ref_return */ #endif ); extern Boolean XtDispatchEvent( #if NeedFunctionPrototypes XEvent* /* event */ #endif ); extern Boolean XtCallAcceptFocus( #if NeedFunctionPrototypes Widget /* widget */, Time* /* t */ #endif ); extern Boolean XtPeekEvent( #if NeedFunctionPrototypes XEvent* /* event */ #endif ); extern Boolean XtAppPeekEvent( #if NeedFunctionPrototypes XtAppContext /* appContext */, XEvent* /* event */ #endif ); extern Boolean XtIsSubclass( #if NeedFunctionPrototypes Widget /* widget */, WidgetClass /* widgetClass */ #endif ); extern Boolean XtIsObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Boolean _XtCheckSubclassFlag( /* implementation-private */ #if NeedFunctionPrototypes Widget /* object */, #if NeedWidePrototypes /* XtEnum */ int /* type_flag */ #else XtEnum /* type_flag */ #endif /* NeedWidePrototypes */ #endif ); extern Boolean _XtIsSubclassOf( /* implementation-private */ #if NeedFunctionPrototypes Widget /* object */, WidgetClass /* widget_class */, WidgetClass /* flag_class */, #if NeedWidePrototypes /* XtEnum */ int /* type_flag */ #else XtEnum /* type_flag */ #endif /* NeedWidePrototypes */ #endif ); extern Boolean XtIsManaged( #if NeedFunctionPrototypes Widget /* rectobj */ #endif ); extern Boolean XtIsRealized( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Boolean XtIsSensitive( #if NeedFunctionPrototypes Widget /* widget */ #endif ); /* * Set the given widget to own the selection. The convertProc should * be called when someone wants the current value of the selection. If it * is not NULL, the * losesSelection gets called whenever the window no longer owns the selection * (because someone else took it). If it is not NULL, the doneProc gets * called when the widget has provided the current value of the selection * to a requestor and the requestor has indicated that it has succeeded * in reading it by deleting the property. */ extern Boolean XtOwnSelection( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Time /* time */, XtConvertSelectionProc /* convert */, XtLoseSelectionProc /* lose */, XtSelectionDoneProc /* done */ #endif ); /* incremental selection interface */ extern Boolean XtOwnSelectionIncremental( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Time /* time */, XtConvertSelectionIncrProc /* convert_callback */, XtLoseSelectionIncrProc /* lose_callback */, XtSelectionDoneIncrProc /* done_callback */, XtCancelConvertSelectionProc /* cancel_callback */, XtPointer /* client_data */ #endif ); extern XtGeometryResult XtMakeResizeRequest( #if NeedFunctionPrototypes Widget /* widget */, #if NeedWidePrototypes /* Dimension */ int /* width */, /* Dimension */ int /* height */, #else Dimension /* width */, Dimension /* height */, #endif /* NeedWidePrototypes */ Dimension* /* replyWidth */, Dimension* /* replyHeight */ #endif ); extern void XtTranslateCoords( #if NeedFunctionPrototypes Widget /* widget */, #if NeedWidePrototypes /* Position */ int /* x */, /* Position */ int /* y */, #else Position /* x */, Position /* y */, #endif /* NeedWidePrototypes */ Position* /* rootx_return */, Position* /* rooty_return */ #endif ); extern KeySym* XtGetKeysymTable( #if NeedFunctionPrototypes Display* /* dpy */, KeyCode* /* min_keycode_return */, int* /* keysyms_per_keycode_return */ #endif ); extern void XtKeysymToKeycodeList( #if NeedFunctionPrototypes Display* /* dpy */, KeySym /* keysym */, KeyCode** /* keycodes_return */, Cardinal* /* keycount_return */ #endif ); /* %%% Caution: don't declare any functions past this point that * return one of the following types or take a pointer to one of * the following types. */ #if NeedWidePrototypes #define Boolean int #define Dimension int #define KeyCode int #define Position int #define XtEnum int #endif /* NeedWidePrototypes */ extern void XtStringConversionWarning( #if NeedFunctionPrototypes CONST String /* from */, /* String attempted to convert. */ CONST String /* toType */ /* Type attempted to convert it to. */ #endif ); #ifdef VMS #define XtDisplayStringConversionWarning XtDisplayStringConvWarning #endif /* VMS */ extern void XtDisplayStringConversionWarning( #if NeedFunctionPrototypes Display* /* dpy */, CONST String /* from */, /* String attempted to convert. */ CONST String /* toType */ /* Type attempted to convert it to. */ #endif ); #ifndef VMS #if defined(__STDC__) externalref XtConvertArgRec const colorConvertArgs[]; externalref XtConvertArgRec const screenConvertArg[]; #else externalref XtConvertArgRec colorConvertArgs[]; externalref XtConvertArgRec screenConvertArg[]; #endif #endif extern void XtAppAddConverter( /* obsolete */ #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* from_type */, CONST String /* to_type */, XtConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */ #endif ); extern void XtAddConverter( /* obsolete */ #if NeedFunctionPrototypes CONST String /* from_type */, CONST String /* to_type */, XtConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */ #endif ); extern void XtSetTypeConverter( #if NeedFunctionPrototypes CONST String /* from_type */, CONST String /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, XtCacheType /* cache_type */, XtDestructor /* destructor */ #endif ); extern void XtAppSetTypeConverter( #if NeedFunctionPrototypes XtAppContext /* app_context */, CONST String /* from_type */, CONST String /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, XtCacheType /* cache_type */, XtDestructor /* destructor */ #endif ); extern void XtConvert( #if NeedFunctionProW VMS.BCK[V9.BIN]RT.H;1EXE;1=totypes Widget /* widget */, CONST String /* from_type */, XrmValue* /* from */, CONST String /* to_type */, XrmValue* /* to_return */ #endif ); extern void XtDirectConvert( #if NeedFunctionPrototypes XtConverter /* converter */, XrmValuePtr /* args */, Cardinal /* num_args */, XrmValuePtr /* from */, XrmValue* /* to_return */ #endif ); /**************************************************************** * * Translation Management * ****************************************************************/ extern XtTranslations XtParseTranslationTable( #if NeedFunctionPrototypes CONST String /* source */ #endif ); extern XtAccelerators XtParseAcceleratorTable( #if NeedFunctionPrototypes CONST String /* source */ #endif ); extern void XtOverrideTranslations( #if NeedFunctionPrototypes Widget /* widget */, XtTranslations /* new */ #endif ); extern void XtAugmentTranslations( #if NeedFunctionPrototypes Widget /* widget */, XtTranslations /* new */ #endif ); extern void XtInstallAccelerators( #if NeedFunctionPrototypes Widget /* destination */, Widget /* source */ #endif ); extern void XtInstallAllAccelerators( #if NeedFunctionPrototypes Widget /* destination */, Widget /* source */ #endif ); extern void XtUninstallTranslations( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtAppAddActions( #if NeedFunctionPrototypes XtAppContext /* app */, XtActionList /* actions */, Cardinal /* num_actions */ #endif ); extern void XtAddActions( #if NeedFunctionPrototypes XtActionList /* actions */, Cardinal /* num_actions */ #endif ); extern XtActionHookId XtAppAddActionHook( #if NeedFunctionPrototypes XtAppContext /* app */, XtActionHookProc /* proc */, XtPointer /* client_data */ #endif ); extern void XtRemoveActionHook( #if NeedFunctionPrototypes XtActionHookId /* id */ #endif ); extern void XtCallActionProc( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* action */, XEvent* /* event */, String* /* params */, Cardinal /* num_params */ #endif ); extern void XtRegisterGrabAction( #if NeedFunctionPrototypes XtActionProc /* action_proc */, Boolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern void XtSetMultiClickTime( #if NeedFunctionPrototypes Display* /* dpy */, int /* milliseconds */ #endif ); extern int XtGetMultiClickTime( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern KeySym XtGetActionKeysym( #if NeedFunctionPrototypes XEvent* /* event */, Modifiers* /* modifiers_return */ #endif ); /*************************************************************** * * Keycode and Keysym procedures for translation management * ****************************************************************/ extern void XtTranslateKeycode( #if NeedFunctionPrototypes Display* /* dpy */, KeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ #endif ); extern void XtTranslateKey( #if NeedFunctionPrototypes Display* /* dpy */, KeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ #endif ); extern void XtSetKeyTranslator( #if NeedFunctionPrototypes Display* /* dpy */, XtKeyProc /* proc */ #endif ); extern void XtRegisterCaseConverter( #if NeedFunctionPrototypes Display* /* dpy */, XtCaseProc /* proc */, KeySym /* start */, KeySym /* stop */ #endif ); extern void XtConvertCase( #if NeedFunctionPrototypes Display* /* dpy */, KeySym /* keysym */, KeySym* /* lower_return */, KeySym* /* upper_return */ #endif ); /**************************************************************** * * Event Management * ****************************************************************/ /* XtAllEvents is valid only for XtRemoveEventHandler and * XtRemoveRawEventHandler; don't use it to select events! */ #define XtAllEvents ((EventMask) -1L) extern void XtInsertEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern void XtInsertRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern void XtAddEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtAddRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ #endif ); extern void XtInsertEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern void XtInsertRawEventHandler( #if NeedFunctionPrototypes Widget /* widget */, EventMask /* eventMask */, Boolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ #endif ); extern EventMask XtBuildEventMask( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtAddGrab( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* exclusive */, Boolean /* spring_loaded */ #endif ); extern void XtRemoveGrab( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtProcessEvent( #if NeedFunctionPrototypes XtInputMask /* mask */ #endif ); extern void XtAppProcessEvent( #if NeedFunctionPrototypes XtAppContext /* app */, XtInputMask /* mask */ #endif ); extern void XtMainLoop( #if NeedFunctionPrototypes void #endif ); extern void XtAppMainLoop( #if NeedFunctionPrototypes XtAppContext /* app */ #endif ); extern void XtAddExposureToRegion( #if NeedFunctionPrototypes XEvent* /* event */, Region /* region */ #endif ); extern void XtSetKeyboardFocus( #if NeedFunctionPrototypes Widget /* subtree */, Widget /* descendent */ #endif ); extern Time XtLastTimestampProcessed( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); /**************************************************************** * * Event Gathering Routines * ****************************************************************/ extern XtIntervalId XtAddTimeOut( #if NeedFunctionPrototypes unsigned long /* interval */, XtTimerCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern XtIntervalId XtAppAddTimeOut( #if NeedFuE! VMS.BCK[V9.BIN]RT.H;1EXE;1=nctionPrototypes XtAppContext /* app */, unsigned long /* interval */, XtTimerCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveTimeOut( #if NeedFunctionPrototypes XtIntervalId /* timer */ #endif ); extern XtInputId XtAddInput( #if NeedFunctionPrototypes int /* source */, XtPointer /* condition */, XtInputCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern XtInputId XtAppAddInput( #if NeedFunctionPrototypes XtAppContext /* app */, int /* source */, XtPointer /* condition */, XtInputCallbackProc /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveInput( #if NeedFunctionPrototypes XtInputId /* id */ #endif ); extern void XtNextEvent( #if NeedFunctionPrototypes XEvent* /* event */ #endif ); extern void XtAppNextEvent( #if NeedFunctionPrototypes XtAppContext /* appContext */, XEvent* /* event */ #endif ); #define XtIMXEvent 1 #define XtIMTimer 2 #define XtIMAlternateInput 4 #define XtIMAll (XtIMXEvent | XtIMTimer | XtIMAlternateInput) extern XtInputMask XtPending( #if NeedFunctionPrototypes void #endif ); extern XtInputMask XtAppPending( #if NeedFunctionPrototypes XtAppContext /* appContext */ #endif ); /**************************************************************** * * Random utility routines * ****************************************************************/ #ifdef VMS /* VMS uses different values for backwards compatibility with V2 */ #define XtIsRectObj(object) (_XtCheckSubclassFlag(object, (XtEnum)0x10)) #define XtIsWidget(object) (_XtCheckSubclassFlag(object, (XtEnum)0x08)) #define XtIsComposite(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x02)) #define XtIsConstraint(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x20)) #define XtIsShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x40)) #define XtIsOverrideShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)overrideShellWidgetClass, \ (WidgetClass)shellWidgetClass, (XtEnum)0x40)) #define XtIsWMShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x04)) #define XtIsVendorShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)vendorShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x04)) #define XtIsTransientShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)transientShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x04)) #define XtIsTopLevelShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)topLevelShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x04)) #define XtIsApplicationShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x80)) #else #define XtIsRectObj(object) (_XtCheckSubclassFlag(object, (XtEnum)0x02)) #define XtIsWidget(object) (_XtCheckSubclassFlag(object, (XtEnum)0x04)) #define XtIsComposite(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x08)) #define XtIsConstraint(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x10)) #define XtIsShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x20)) #define XtIsOverrideShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)overrideShellWidgetClass, \ (WidgetClass)shellWidgetClass, (XtEnum)0x20)) #define XtIsWMShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x40)) #define XtIsVendorShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)vendorShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x40)) #define XtIsTransientShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)transientShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x40)) #define XtIsTopLevelShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x80)) #define XtIsApplicationShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)applicationShellWidgetClass, \ (WidgetClass)topLevelShellWidgetClass, (XtEnum)0x80)) #endif extern void XtRealizeWidget( #if NeedFunctionPrototypes Widget /* widget */ #endif ); void XtUnrealizeWidget( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtDestroyWidget( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtSetSensitive( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* sensitive */ #endif ); extern void XtSetMappedWhenManaged( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* mappedWhenManaged */ #endif ); extern Widget XtNameToWidget( #if NeedFunctionPrototypes Widget /* root */, CONST String /* name */ #endif ); extern Widget XtWindowToWidget( #if NeedFunctionPrototypes Display* /* display */, Window /* window */ #endif ); /*************************************************************** * * Arg lists * ****************************************************************/ #define XtSetArg(arg, n, d) \ ((void)( (arg).name = (n), (arg).value = (XtArgVal)(d) )) extern ArgList XtMergeArgLists( #if NeedFunctionPrototypes ArgList /* args1 */, Cardinal /* num_args1 */, ArgList /* args2 */, Cardinal /* num_args2 */ #endif ); /*************************************************************** * * Vararg lists * ****************************************************************/ #define XtVaNestedList "XtVaNestedList" #define XtVaTypedArg "XtVaTypedArg" extern XtVarArgsList XtVaCreateArgsList( #if NeedVarargsPrototypes XtPointer /*unused*/, ... #endif ); /************************************************************* * * Information routines * ************************************************************/ #ifndef _XtIntrinsicP_h /* We're not included from the private file, so define these */ extern Display *XtDisplay( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Display *XtDisplayOfObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Screen *XtScreen( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Screen *XtScreenOfObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Window XtWindow( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern Window XtWindowOfObject( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern String XtName( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern WidgetClass XtSuperclass( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern WidgetClass XtClass( #if NeedFunctionPrototypes Widget /* object */ #endif ); extern Widget XtParent( #if NeedFunctionPrototypes Widget /* widget */ #endif ); #endif /*_XtIntrinsicP_h*/ #define XtMapWidget(widget) XMapWindow(XtDisplay(widget), XtWindow(widget)) #define XtUnmapWidget(widget) \ XUnmapWindow(XtDisplay(widget), XtWindow(widget)) extern void XtAddCallback( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackProc /* callback */, XtPointer /* closure */ #endif ); extern void XtRemoveCallback( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackProc /* callback */, XtPointer /* closure */ #endif ); extern void XtAddCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackList /* callbacks */ #endif ); extern void XtRemoveCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtCallbackList /* callbacks */ #endif ); extern void XtRemoveAllCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */ #endif )1 VMS.BCK[V9.BIN]RT.H;1EXE;1=X; extern void XtCallCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */, XtPointer /* call_data */ #endif ); extern void XtCallCallbackList( #if NeedFunctionPrototypes Widget /* widget */, XtCallbackList /* callbacks */, XtPointer /* call_data */ #endif ); extern XtCallbackStatus XtHasCallbacks( #if NeedFunctionPrototypes Widget /* widget */, CONST String /* callback_name */ #endif ); /**************************************************************** * * Geometry Management * ****************************************************************/ extern XtGeometryResult XtMakeGeometryRequest( #if NeedFunctionPrototypes Widget /* widget */, XtWidgetGeometry* /* request */, XtWidgetGeometry* /* reply_return */ #endif ); extern XtGeometryResult XtQueryGeometry( #if NeedFunctionPrototypes Widget /* widget */, XtWidgetGeometry* /* intended */, XtWidgetGeometry* /* reply_return */ #endif ); extern Widget XtCreatePopupShell( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widgetClass */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaCreatePopupShell( #if NeedVarargsPrototypes CONST String /* name */, WidgetClass /* widgetClass */, Widget /* parent */, ... #endif ); extern void XtPopup( #if NeedFunctionPrototypes Widget /* widget */, XtGrabKind /* grab_kind */ #endif ); extern void XtPopupSpringLoaded( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtCallbackNone( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtCallbackNonexclusive( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtCallbackExclusive( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtPopdown( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern void XtCallbackPopdown( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ #endif ); extern void XtMenuPopupAction( #if NeedFunctionPrototypes Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ #endif ); extern Widget XtCreateWidget( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widget_class */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtCreateManagedWidget( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widget_class */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaCreateWidget( #if NeedVarargsPrototypes CONST String /* name */, WidgetClass /* widget */, Widget /* parent */, ... #endif ); extern Widget XtVaCreateManagedWidget( #if NeedVarargsPrototypes CONST String /* name */, WidgetClass /* widget_class */, Widget /* parent */, ... #endif ); extern Widget XtCreateApplicationShell( #if NeedFunctionPrototypes CONST String /* name */, WidgetClass /* widget_class */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtAppCreateShell( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* class */, WidgetClass /* widget_class */, Display* /* display */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaAppCreateShell( #if NeedVarargsPrototypes CONST String /* name */, CONST String /* class */, WidgetClass /* widget_class */, Display* /* display */, ... #endif ); /**************************************************************** * * Toolkit initialization * ****************************************************************/ extern void XtToolkitInitialize( #if NeedFunctionPrototypes void #endif ); extern void XtDisplayInitialize( #if NeedFunctionPrototypes XtAppContext /* appContext */, Display* /* dpy */, CONST String /* name */, CONST String /* class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, Cardinal* /* argc */, char** /* argv */ #endif ); extern Widget XtAppInitialize( #if NeedFunctionPrototypes XtAppContext* /* app_context_return */, CONST String /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, Cardinal* /* argc_in_out */, String* /* argv_in_out */, CONST String* /* fallback_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern Widget XtVaAppInitialize( #if NeedVarargsPrototypes XtAppContext* /* app_context_return */, CONST String /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, Cardinal* /* argc_in_out */, String* /* argv_in_out */, CONST String* /* fallback_resources */, ... #endif ); extern Widget XtInitialize( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, Cardinal* /* argc */, char** /* argv */ #endif ); extern Display *XtOpenDisplay( #if NeedFunctionPrototypes XtAppContext /* appContext */, CONST String /* displayName */, CONST String /* applName */, CONST String /* className */, XrmOptionDescRec* /* urlist */, Cardinal /* num_urs */, Cardinal* /* argc */, char** /* argv */ #endif ); extern XtAppContext XtCreateApplicationContext( #if NeedFunctionPrototypes void #endif ); extern void XtAppSetFallbackResources( #if NeedFunctionPrototypes XtAppContext /* app_context */, CONST String* /* specification_list */ #endif ); extern void XtDestroyApplicationContext( #if NeedFunctionPrototypes XtAppContext /* appContext */ #endif ); extern void XtInitializeWidgetClass( #if NeedFunctionPrototypes WidgetClass /* widget_class */ #endif ); extern XtAppContext XtWidgetToApplicationContext( #if NeedFunctionPrototypes Widget /* widget */ #endif ); extern XtAppContext XtDisplayToApplicationContext( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern XrmDatabase XtDatabase( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern void XtCloseDisplay( #if NeedFunctionPrototypes Display* /* dpy */ #endif ); extern void XtCopyFromParent( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyDefaultDepth( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyDefaultColormap( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyAncestorSensitive( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XtCopyScreen( #if NeedFunctionPrototypes Widget /* widget */, int /* offset */, XrmValue* /* value */ #endif ); extern void XrmCompileResourceList( #if NeedFunctionPrototypes XtResourceList /* resources */, Cardinal /* num_resources */ #endif ); extern void XtGetApplicationResources( #if NeedFunctionPrototypes WFM VMS.BCK[V9.BIN]RT.H;1EXE;1=.idget /* widget */, XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetApplicationResources( #if NeedVarargsPrototypes Widget /* widget */, XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtGetSubresources( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* base */, CONST String /* name */, CONST String /* class */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetSubresources( #if NeedVarargsPrototypes Widget /* widget */, XtPointer /* base */, CONST String /* name */, CONST String /* class */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtSetValues( #if NeedFunctionPrototypes Widget /* widget */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaSetValues( #if NeedVarargsPrototypes Widget /* widget */, ... #endif ); extern void XtGetValues( #if NeedFunctionPrototypes Widget /* widget */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetValues( #if NeedVarargsPrototypes Widget /* widget */, ... #endif ); extern void XtSetSubvalues( #if NeedFunctionPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaSetSubvalues( #if NeedVarargsPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtGetSubvalues( #if NeedFunctionPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ #endif ); extern void XtVaGetSubvalues( #if NeedVarargsPrototypes XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... #endif ); extern void XtGetResourceList( #if NeedFunctionPrototypes WidgetClass /* widget_class */, XtResourceList* /* resources_return */, Cardinal* /* num_resources_return */ #endif ); extern void XtGetConstraintResourceList( #if NeedFunctionPrototypes WidgetClass /* widget_class */, XtResourceList* /* resources_return */, Cardinal* /* num_resources_return */ #endif ); #define XtUnspecifiedPixmap ((Pixmap)2) #define XtUnspecifiedShellInt (-1) #define XtUnspecifiedWindow ((Window)2) #define XtUnspecifiedWindowGroup ((Window)3) #define XtDefaultForeground "XtDefaultForeground" #define XtDefaultBackground "XtDefaultBackground" #define XtDefaultFont "XtDefaultFont" #if defined(CRAY) || defined(__arm) #ifdef CRAY2 #define XtOffset(p_type,field) \ (sizeof(int)*((unsigned int)&(((p_type)NULL)->field))) #else /* !CRAY2 */ #define XtOffset(p_type,field) ((unsigned int)&(((p_type)NULL)->field)) #endif /* !CRAY2 */ #else /* ! (CRAY || __arm) */ /*#define XtOffset(p_type,field) \ ((Cardinal) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) */ #define XtOffset(p_type,field) \ (((char *) (&(((p_type)NULL)->field))) - (char *)NULL) #endif /* !CRAY */ #define XtOffsetOf(s_type,field) XtOffset(s_type*,field) #ifdef notdef /* this doesn't work on picky compilers */ #define XtOffset(p_type,field) ((unsigned int)&(((p_type)NULL)->field)) #endif /************************************************************* * * Error Handling * ************************************************************/ extern XtErrorMsgHandler XtAppSetErrorMsgHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorMsgHandler /* handler */ #endif ); extern void XtSetErrorMsgHandler( #if NeedFunctionPrototypes XtErrorMsgHandler /* handler */ #endif ); extern XtErrorMsgHandler XtAppSetWarningMsgHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorMsgHandler /* handler */ #endif ); extern void XtSetWarningMsgHandler( #if NeedFunctionPrototypes XtErrorMsgHandler /* handler */ #endif ); extern void XtAppErrorMsg( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern void XtErrorMsg( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern void XtAppWarningMsg( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern void XtWarningMsg( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String* /* params */, Cardinal* /* num_params */ #endif ); extern XtErrorHandler XtAppSetErrorHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorHandler /* handler */ #endif ); extern void XtSetErrorHandler( #if NeedFunctionPrototypes XtErrorHandler /* handler */ #endif ); extern XtErrorHandler XtAppSetWarningHandler( #if NeedFunctionPrototypes XtAppContext /* app */, XtErrorHandler /* handler */ #endif ); extern void XtSetWarningHandler( #if NeedFunctionPrototypes XtErrorHandler /* handler */ #endif ); extern void XtAppError( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* message */ #endif ); extern void XtError( #if NeedFunctionPrototypes CONST String /* message */ #endif ); extern void XtAppWarning( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* message */ #endif ); extern void XtWarning( #if NeedFunctionPrototypes CONST String /* message */ #endif ); extern XrmDatabase *XtAppGetErrorDatabase( #if NeedFunctionPrototypes XtAppContext /* app */ #endif ); extern XrmDatabase *XtGetErrorDatabase( #if NeedFunctionPrototypes void #endif ); extern void XtAppGetErrorDatabaseText( #if NeedFunctionPrototypes XtAppContext /* app */, CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String /* buffer */, int /* nbytes */, XrmDatabase /* database */ #endif ); extern void XtGetErrorDatabaseText( #if NeedFunctionPrototypes CONST String /* name */, CONST String /* type */, CONST String /* class */, CONST String /* defaultp */, String /* buffer */, int /* nbytes */ #endif ); /**************************************************************** * * Memory Management * ****************************************************************/ #define XtNew(type) ((type *) XtMalloc((unsigned) sizeof(type))) #define XtNewString(str) \ ((str) != NULL ? (strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) : NULL) extern char *XtMalloc( #if NeedFunctionPrototypes Cardinal /* size */ #endif ); extern char *XtCalloc( #if NeedFunctionPrototypes Cardinal /* num */, Cardinal /* size */ #endif ); extern char *XtRealloc( #if NeedFunctionPrototypes char* /* ptr */, Cardinal kL VMS.BCK[V9.BIN]RT.H;1EXE;1=+ /* num */ #endif ); #ifndef XtFree extern void XtFree( #if NeedFunctionPrototypes char* /* ptr */ #endif ); #endif /************************************************************* * * Work procs * **************************************************************/ extern XtWorkProcId XtAddWorkProc( #if NeedFunctionPrototypes XtWorkProc /* proc */, XtPointer /* closure */ #endif ); extern XtWorkProcId XtAppAddWorkProc( #if NeedFunctionPrototypes XtAppContext /* app */, XtWorkProc /* proc */, XtPointer /* closure */ #endif ); extern void XtRemoveWorkProc( #if NeedFunctionPrototypes XtWorkProcId /* id */ #endif ); /**************************************************************** * * Graphic Context Management *****************************************************************/ extern GC XtGetGC( #if NeedFunctionPrototypes Widget /* widget */, XtGCMask /* valueMask */, XGCValues* /* values */ #endif ); extern void XtDestroyGC( #if NeedFunctionPrototypes GC /* gc */ #endif ); extern void XtReleaseGC( #if NeedFunctionPrototypes Widget /* object */, GC /* gc */ #endif ); extern void XtReleaseCacheRef( #if NeedFunctionPrototypes XtCacheRef* /* cache_ref */ #endif ); extern void XtCallbackReleaseCacheRef( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, /* XtCacheRef */ XtPointer /* call_data */ #endif ); extern void XtCallbackReleaseCacheRefList( #if NeedFunctionPrototypes Widget /* widget */, XtPointer /* closure */, /* XtCacheRef* */ XtPointer /* call_data */ #endif ); extern void XtSetWMColormapWindows( #if NeedFunctionPrototypes Widget /* widget */, Widget* /* list */, Cardinal /* count */ #endif ); extern String XtFindFile( #if NeedFunctionPrototypes CONST String /* path */, Substitution /* substitutions */, Cardinal /* num_substitutions */, XtFilePredicate /* predicate */ #endif ); extern String XtResolvePathname( #if NeedFunctionPrototypes Display* /* dpy */, CONST String /* type */, CONST String /* filename */, CONST String /* suffix */, CONST String /* path */, Substitution /* substitutions */, Cardinal /* num_substitutions */, XtFilePredicate /* predicate */ #endif ); /**************************************************************** * * Selections *****************************************************************/ #define XT_CONVERT_FAIL (Atom)0x80000001 /* * The given widget no longer wants the selection. If it still owns it, then * the selection owner is cleared, and the window's losesSelection is called. */ extern void XtDisownSelection( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Time /* time */ #endif ); /* * Get the value of the given selection. */ extern void XtGetSelectionValue( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom /* target */, XtSelectionCallbackProc /* callback */, XtPointer /* closure */, Time /* time */ #endif ); extern void XtGetSelectionValues( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom* /* targets */, int /* count */, XtSelectionCallbackProc /* callback */, XtPointer* /* closures */, Time /* time */ #endif ); /* Set the selection timeout value, in units of milliseconds */ extern void XtAppSetSelectionTimeout( #if NeedFunctionPrototypes XtAppContext /* app */, unsigned long /* timeout */ #endif ); extern void XtSetSelectionTimeout( #if NeedFunctionPrototypes unsigned long /* timeout */ #endif ); /* Return the selection timeout value, in units of milliseconds */ extern unsigned int XtAppGetSelectionTimeout( #if NeedFunctionPrototypes XtAppContext /* app */ #endif ); extern unsigned int XtGetSelectionTimeout( #if NeedFunctionPrototypes void #endif ); extern XSelectionRequestEvent *XtGetSelectionRequest( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, XtRequestId /* request_id */ #endif ); extern void XtGetSelectionValueIncremental( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom /* target */, XtSelectionCallbackProc /* selection_callback */, XtPointer /* client_data */, Time /* time */ #endif ); extern void XtGetSelectionValuesIncremental( #if NeedFunctionPrototypes Widget /* widget */, Atom /* selection */, Atom* /* targets */, int /* count */, XtSelectionCallbackProc /* callback */, XtPointer* /* client_data */, Time /* time */ #endif ); extern void XtGrabKey( #if NeedFunctionPrototypes Widget /* widget */, KeyCode /* keycode */, Modifiers /* modifiers */, Boolean /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ #endif ); extern void XtUngrabKey( #if NeedFunctionPrototypes Widget /* widget */, KeyCode /* keycode */, Modifiers /* modifiers */ #endif ); extern int XtGrabKeyboard( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ #endif ); extern void XtUngrabKeyboard( #if NeedFunctionPrototypes Widget /* widget */, Time /* time */ #endif ); extern void XtGrabButton( #if NeedFunctionPrototypes Widget /* widget */, int /* button */, Modifiers /* modifiers */, Boolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ #endif ); extern void XtUngrabButton( #if NeedFunctionPrototypes Widget /* widget */, unsigned int /* button */, Modifiers /* modifiers */ #endif ); extern int XtGrabPointer( #if NeedFunctionPrototypes Widget /* widget */, Boolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ #endif ); extern void XtUngrabPointer( #if NeedFunctionPrototypes Widget /* widget */, Time /* time */ #endif ); extern void XtGetApplicationNameAndClass( #if NeedFunctionPrototypes Display* /* dpy */, String* /* name_return */, String* /* class_return */ #endif ); #ifdef __cplusplus } /* for C++ V2.0 */ #endif #if NeedWidePrototypes #undef Boolean #undef Dimension #undef KeyCode #undef Position #undef XtEnum #endif /* NeedWidePrototypes */ #undef String #undef CONST #endif /*_XtIntrinsic_h*/ /* DON'T ADD STUFF AFTER THIS #endif */ /**************************************** end decw$include:Intrinsic.h */ /**************************************** from sys$library:stdio.h: */ #ifndef __STDIO_LOADED #define __STDIO_LOADED 1 /* STDIO - V3.0 - UNIX 'Standard I/O' Definitions */ #pragma nostandard # include stddef # define _NFILE 20 # define BUFSIZ 512 # define _IOLBF 1 # define _IOFBF 2 extern struct _iobuf { int _cnt; char *_ptr; char *_base; char _flag; #define _IOREAD 0x01 #define _IOWRT 0x02 #define _IONBF 0x04 #define _IOMYBUF 0x08 #define _IOEOF 0x10 #define _IOERR 0x20 #define _IOSTRG 0x40 #define _IORW 0x80 char _file; }; typedef struct _iobuf* FILE; typedef struct {unsigned : 32; unsigned : 32;} fpos_t; #ifdef CC$VAXCSHR #define stdin (*vaxc$ga_stdin) #define stdout (*vaxc$ga_stdout) #define stderr (*vaxc$ga_stderr) globalrl9 VMS.BCK[V9.BIN]RT.H;1EXE;1=ef FILE *stdin, *stdout, *stderr; #else extern noshare FILE *stdin, *stdout, *stderr; #endif #pragma standard #pragma NOSTANDARD #undef NULL #pragma STANDARD #define NULL (void *) 0 #define EOF (-1) #define TRUE 1 #define FALSE 0 # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_EOF 2 # define SEEK_END 2 /* ANSI C defintion */ # define FOPEN_MAX 8 # define OPEN_MAX 8 # define TMP_MAX 32 # define FILENAME_MAX 39 #define L_ctermid 64 #define L_cuserid 16 #define L_tmpnam 256 #define L_lcltmpnam 256 #define L_nettmpnam 256 #pragma NOSTANDARD #undef getc #undef getchar #undef putc #undef putchar #undef feof #undef ferror #undef clearerr #pragma STANDARD #define getc(p) fgetc(p) #define getchar() fgetc(stdin) #define putc(x,p) fputc(x,p) #define putchar(x) fputc(x,stdout) #define feof(p) (((*p)->_flag&_IOEOF)!=0) #define ferror(p) (((*p)->_flag&_IOERR)!=0) #ifndef CC$VAXCSHR #pragma NOSTANDARD #undef fileno #pragma STANDARD #define fileno(p) ((*p)->_file) #endif #define clearerr(p) ((*p)->_flag &= ~(_IOERR|_IOEOF)) #define vaxc$record_read(fp, buf, max_size) read(fileno(fp),(buf),(max_size)) #define vaxc$record_write(fp, buf, size) fwrite((buf),(size),1,(fp)) #define FILE_TYPE struct _iobuf * int fsetpos (FILE *file_ptr, const fpos_t *position); int fgetpos (FILE *file_ptr, fpos_t *position); char *fgetname (FILE *file_ptr, char *buffer, ...); FILE *fopen (const char *filespec, const char *a_mode, ...); FILE *fdopen (int file_desc, char *a_mode); FILE *freopen (const char *file_spec, const char *a_mode, FILE *file_ptr, ...); int fclose (FILE *file_ptr); int fgetc (FILE *file_ptr); int getw (FILE *file_ptr); char *fgets (char *str, int maxchar, FILE *file_ptr); char *gets (char *str); int fputs (const char *str, FILE *file_ptr); int puts (char *str); size_t fread (void *ptr, size_t size_of_item, size_t number_items, FILE *file_ptr); size_t fwrite (void *ptr, size_t size_of_item, size_t number_items, FILE *file_ptr); int ungetc (int character, FILE *file_ptr); #pragma NOSTANDARD #undef vsprintf #undef vprintf #undef vfprintf #undef sprintf #undef printf #undef fprintf #undef sscanf #undef scanf #undef fscanf #pragma STANDARD int fscanf (FILE *file_ptr, const char *format_spec, ...); int scanf (const char *format_spec, ...); int sscanf (char *str, const char *format_spec, ...); int fprintf (FILE *file_ptr, const char *format_spec, ...); int printf (const char *format_spec, ...); int sprintf (char *str, const char *format_spec, ...); /* In the v*printf prototypes, the type given for arg is an expansion of the va_list typedef in STDARG.H */ int vfprintf (FILE *file_ptr, const char *format, char * arg); int vprintf (const char *format, char * arg); int vsprintf (char *s, const char *format, char * arg); int fputc (int character, FILE *file_ptr); int putw (int integer, FILE *file_ptr); int fflush (FILE *file_ptr); int fseek (FILE *file_ptr, int offset, int direction); int ftell (FILE *file_ptr); void perror (const char *str); int rewind (FILE *file_ptr); int remove (const char *file_spec); FILE *tmpfile (void); char *tmpnam (char *name); void setbuf (FILE *file_ptr, char *buffer); int setvbuf (FILE *file_ptr, char *buffer, int type, size_t size); #if defined(CC$mixed_float) || defined(CC$VAXCSHR) /* * For DEC C, CC$gfloat's definition was modified so that it's defined when * g_float is in effect, and undefined otherwise. The following code makes * the new behavior compatible with the old. */ #ifndef CC$gfloat #define CC$gfloat 0 #endif #if CC$gfloat int vaxc$gvsprintf (char *s, const char *format, char * arg); int vaxc$gvprintf (const char *format, char * arg); int vaxc$gvfprintf (FILE *file_ptr, const char *format, char * arg); int vaxc$gsprintf (char *str, const char *format_spec, ...); int vaxc$gprintf (const char *format_spec, ...); int vaxc$gfprintf (FILE *file_ptr, const char *format_spec, ...); int vaxc$gsscanf (char *str, const char *format_spec, ...); int vaxc$gscanf (const char *format_spec, ...); int vaxc$gfscanf (FILE *file_ptr, const char *format_spec, ...); #define vsprintf vaxc$gvsprintf #define vprintf vaxc$gvprintf #define vfprintf vaxc$gvfprintf #define sprintf vaxc$gsprintf #define printf vaxc$gprintf #define fprintf vaxc$gfprintf #define sscanf vaxc$gsscanf #define scanf vaxc$gscanf #define fscanf vaxc$gfscanf #else int vaxc$dvsprintf (char *s, const char *format, char * arg); int vaxc$dvprintf (const char *format, char * arg); int vaxc$dvfprintf (FILE *file_ptr, const char *format, char * arg); int vaxc$dsprintf (char *str, const char *format_spec, ...); int vaxc$dprintf (const char *format_spec, ...); int vaxc$dfprintf (FILE *file_ptr, const char *format_spec, ...); int vaxc$dsscanf (char *str, const char *format_spec, ...); int vaxc$dscanf (const char *format_spec, ...); int vaxc$dfscanf (FILE *file_ptr, const char *format_spec, ...); #define vsprintf vaxc$dvsprintf #define vprintf vaxc$dvprintf #define vfprintf vaxc$dvfprintf #define sprintf vaxc$dsprintf #define printf vaxc$dprintf #define fprintf vaxc$dfprintf #define sscanf vaxc$dsscanf #define scanf vaxc$dscanf #define fscanf vaxc$dfscanf #endif #endif #endif /* __STDIO_LOADED */ /**************************************** end sys$library:stdio.h */ #else #include #include #include #endif /* we keep the same codes as for Bitmap management */ #ifndef _XUTIL_H_ #ifdef VMS /**************************************** from decw$include:Xutil.h: */ /* ***************************************************************************** ** * ** COPYRIGHT (c) 1988 BY * ** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. * ** ALL RIGHTS RESERVED * ** * ** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ** ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ** TRANSFERRED. * ** * ** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ** CORPORATION. * ** * ** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ** * ***************************************************************************** **++ ** FACILITY: ** ** DECwindows Xlib ** ** ABSTRACT: ** ** This modules defines miscellaneous Xlib symbols and data structures. ** **-- **/ #ifndef _XUTIL_H_ #define _XUTIL_H_ #ifdef __cplusplus extern "C" { /* for C++ V2.0 */ #endif #ifndef NeedFunctionPrototypes #if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) #define NeedFunctionPrototypes 1 #else #define NeedFunctionPrototypes 0 #endif /* __STDC__ */ #endif /* NeedFunctionProtog@ VMS.BCK[V9.BIN]RT.H;1EXE;1=2types */ /* * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding * value (x, y, width, height) was found in the parsed string. */ #define NoValue 0x0000 #define XValue 0x0001 #define YValue 0x0002 #define WidthValue 0x0004 #define HeightValue 0x0008 #define AllValues 0x000F #define XNegative 0x0010 #define YNegative 0x0020 /* * new version containing base_width, base_height, and win_gravity fields; * used with WM_NORMAL_HINTS. */ typedef struct { long flags; /* marks which fields in this structure are defined */ int x, y; /* obsolete for new window mgrs, but clients */ int width, height; /* should set so old wm's don't mess up */ int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; /* numerator */ int y; /* denominator */ } min_aspect, max_aspect; int base_width, base_height; /* added by ICCCM version 1 */ int win_gravity; /* added by ICCCM version 1 */ } XSizeHints; /* * The next block of definitions are for window manager properties that * clients and applications use for communication. */ /* flags argument in size hints */ #define USPosition (1L << 0) /* user specified x, y */ #define USSize (1L << 1) /* user specified width, height */ #define PPosition (1L << 2) /* program specified position */ #define PSize (1L << 3) /* program specified size */ #define PMinSize (1L << 4) /* program specified minimum size */ #define PMaxSize (1L << 5) /* program specified maximum size */ #define PResizeInc (1L << 6) /* program specified resize increments */ #define PAspect (1L << 7) /* program specified min and max aspect ratios */ #define PBaseSize (1L << 8) /* program specified base for incrementing */ #define PWinGravity (1L << 9) /* program specified window gravity */ /* obsolete */ #define PAllHints \ (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect|PBaseSize|PWinGravity) typedef struct { long flags; /* marks which fields in this structure are defined */ Bool input; /* does this application rely on the window manager to get keyboard input? */ int initial_state; /* see below */ Pixmap icon_pixmap; /* pixmap to be used as icon */ Window icon_window; /* window to be used as icon */ int icon_x, icon_y; /* initial position of icon */ Pixmap icon_mask; /* icon mask bitmap */ XID window_group; /* id of related window group */ /* this structure may be extended in the future */ } XWMHints; /* definition for flags of XWMHints */ #define InputHint (1L << 0) #define StateHint (1L << 1) #define IconPixmapHint (1L << 2) #define IconWindowHint (1L << 3) #define IconPositionHint (1L << 4) #define IconMaskHint (1L << 5) #define WindowGroupHint (1L << 6) #define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint| \ IconPositionHint|IconMaskHint|WindowGroupHint) /* definitions for initial window state */ #define WithdrawnState 0 /* for windows that are not mapped */ #define NormalState 1 /* most applications want to start this way */ #define IconicState 3 /* application wants to start as an icon */ /* * Obsolete states no longer defined by ICCCM */ #define DontCareState 0 /* don't know or care */ #define ZoomState 2 /* application wants to start zoomed */ #define InactiveState 4 /* application believes it is seldom used; */ /* some wm's may put it on inactive menu */ /* * new structure for manipulating TEXT properties; used with WM_NAME, * WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND. */ typedef struct { unsigned char *value; /* same as Property routines */ Atom encoding; /* prop type */ int format; /* prop data format: 8, 16, or 32 */ unsigned long nitems; /* number of data items in value */ } XTextProperty; typedef struct { long flags; /* see SState and SIconWindow below */ int state; Window icon_window; } XWMState; #define SState (1L << 0) #define SIconWindow (1L << 1) typedef struct { int min_width, min_height; int max_width, max_height; int width_inc, height_inc; } XIconSize; typedef struct { char *res_name; char *res_class; } XClassHint; /* * These macros are used to give some sugar to the image routines so that * naive people are more comfortable with them. */ #define XDestroyImage(ximage) \ ((*((ximage)->f.destroy_image))((ximage))) #define XGetPixel(ximage, x, y) \ ((*((ximage)->f.get_pixel))((ximage), (x), (y))) #define XPutPixel(ximage, x, y, pixel) \ ((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel))) #define XSubImage(ximage, x, y, width, height) \ ((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height))) #define XAddPixel(ximage, value) \ ((*((ximage)->f.add_pixel))((ximage), (value))) /* * Compose sequence status structure, used in calling XLookupString. */ typedef struct _XComposeStatus { char *compose_ptr; /* state table pointer */ int chars_matched; /* match state */ } XComposeStatus; /* * Keysym macros, used on Keysyms to test for classes of symbols */ #define IsKeypadKey(keysym) \ (((unsigned)(keysym) >= XK_KP_Space) && ((unsigned)(keysym) <= XK_KP_Equal)) #define IsCursorKey(keysym) \ (((unsigned)(keysym) >= XK_Home) && ((unsigned)(keysym) < XK_Select)) #define IsPFKey(keysym) \ (((unsigned)(keysym) >= XK_KP_F1) && ((unsigned)(keysym) <= XK_KP_F4)) #define IsFunctionKey(keysym) \ (((unsigned)(keysym) >= XK_F1) && ((unsigned)(keysym) <= XK_F35)) #define IsMiscFunctionKey(keysym) \ (((unsigned)(keysym) >= XK_Select) && ((unsigned)(keysym) < XK_KP_Space)) #define IsModifierKey(keysym) \ (((unsigned)(keysym) >= XK_Shift_L) && ((unsigned)(keysym) <= XK_Hyper_R)) /* * opaque reference to Region data type */ typedef struct _XRegion *Region; /* Return values from XRectInRegion() */ #define RectangleOut 0 #define RectangleIn 1 #define RectanglePart 2 /* * Information used by the visual utility routines to find desired visual * type from the many visuals a display may support. */ typedef struct { Visual *visual; VisualID visualid; int screen; int depth; #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ */ #else int class; #endif unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualInfo; #define VisualNoMask 0x0 #define VisualIDMask 0x1 #define VisualScreenMask 0x2 #define VisualDepthMask 0x4 #define VisualClassMask 0x8 #define VisualRedMaskMask 0x10 #define VisualGreenMaskMask 0x20 #define VisualBlueMaskMask 0x40 #define VisualColormapSizeMask 0x80 #define VisualBitsPerRGBMask 0x100 #define VisualAllMask 0x1FF /* * This defines a window manager property that clients may use to * share standard color maps of type RGB_COLOR_MAP: */ typedef struct { Colormap colormap; unsigned long red_max; unsigned long red_mult; unsigned long green_max; unsigned long green_mult; unsigned long blue_max; unsigned long blue_mult; unsigned long base_pixel; VisualID visualid; /* added by ICCCM version 1 */ XID killid; /* added by ICCCM version 1 */ } XStandardColormap; #define ReleaseByFreeingColormap ((XID) 1L) /* for killid field above */ /* * return codes for XReadBitmapFile and XWriteBitmapFile */ #define BitmapSuccess 0 #define BitmapOpenFailed 1 #define BitmapFileInvalid 2 #define BitmapNoMemory 3 /* * Declare the routines that don't return int. */ /**************************************************************** * * Context Management * ****************************************************************/ /* Associative lookup table return codes */ #define XCSUCCESS 0 /* No error. */ #define V VMS.BCK[V9.BIN]RT.H;1EXE;1=XCNOMEM 1 /* Out of memory */ #define XCNOENT 2 /* No entry in table */ typedef int XContext; #define XStringToContext(atom) ((XContext) XrmStringToQuark(atom)) extern int XUniqueContext(); extern int XSaveContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */, const void* /* data */ #endif ); extern int XFindContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */, caddr_t* /* data_return */ #endif ); extern int XDeleteContext( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XContext /* context */ #endif ); extern XWMHints *XGetWMHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */ #endif ); extern Region XCreateRegion( #if NeedFunctionPrototypes void #endif ); extern Region XPolygonRegion( #if NeedFunctionPrototypes XPoint* /* points */, int /* n */, int /* fill_rule */ #endif ); extern XVisualInfo *XGetVisualInfo( #if NeedFunctionPrototypes Display* /* display */, long /* vinfo_mask */, XVisualInfo* /* vinfo_template */, int* /* nitems_return */ #endif ); /* Allocation routines for properties that may get longer */ extern XSizeHints *XAllocSizeHints ( #if NeedFunctionPrototypes void #endif ); extern XStandardColormap *XAllocStandardColormap ( #if NeedFunctionPrototypes void #endif ); extern XWMHints *XAllocWMHints ( #if NeedFunctionPrototypes void #endif ); extern XClassHint *XAllocClassHint ( #if NeedFunctionPrototypes void #endif ); extern XIconSize *XAllocIconSize ( #if NeedFunctionPrototypes void #endif ); /* ICCCM routines for data structures defined in this file */ extern Status XGetWMSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */, Atom /* property */ #endif ); extern Status XGetWMNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */ #endif ); extern Status XGetRGBColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap** /* stdcmap_return */, int* /* count_return */, Atom /* property */ #endif ); extern Status XGetTextProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* window */, XTextProperty* /* text_prop_return */, Atom /* property */ #endif ); extern Status XGetWMName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern Status XGetWMIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern Status XGetWMClientMachine( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ #endif ); extern void XSetWMProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* window_name */, XTextProperty* /* icon_name */, char** /* argv */, int /* argc */, XSizeHints* /* normal_hints */, XWMHints* /* wm_hints */, XClassHint* /* class_hints */ #endif ); extern void XSetWMSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ #endif ); extern void XSetWMNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */ #endif ); extern void XSetRGBColormaps( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* stdcmaps */, int /* count */, Atom /* property */ #endif ); extern void XSetTextProperty( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */, Atom /* property */ #endif ); extern void XSetWMName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern void XSetWMIconName( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern void XSetWMClientMachine( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ #endif ); extern Status XStringListToTextProperty( #if NeedFunctionPrototypes char** /* list */, int /* count */, XTextProperty* /* text_prop_return */ #endif ); extern Status XTextPropertyToStringList( #if NeedFunctionPrototypes XTextProperty* /* text_prop */, char*** /* list_return */, int* /* count_return */ #endif ); /* The following declarations are alphabetized. */ extern XClipBox( #if NeedFunctionPrototypes Region /* r */, XRectangle* /* rect_return */ #endif ); extern XDestroyRegion( #if NeedFunctionPrototypes Region /* r */ #endif ); extern XEmptyRegion( #if NeedFunctionPrototypes Region /* r */ #endif ); extern XEqualRegion( #if NeedFunctionPrototypes Region /* r1 */, Region /* r2 */ #endif ); extern Status XGetClassHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XClassHint* /* class_hints_return */ #endif ); extern Status XGetIconSizes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XIconSize** /* size_list_return */, int* /* count_return */ #endif ); extern Status XGetNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */ #endif ); extern Status XGetSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, Atom /* property */ #endif ); extern Status XGetStandardColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* colormap_return */, Atom /* property */ #endif ); extern Status XGetZoomHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* zhints_return */ #endif ); extern XIntersectRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern int XLookupString( #if NeedFunctionPrototypes XKeyEvent* /* event_struct */, char* /* buffer_return */, int /* bytes_buffer */, KeySym* /* keysym_return */, XComposeStatus* /* status_in_out */ #endif ); extern Status XMatchVisualInfo( #if NeedFunctionPrototypes Display* /* display */, int /* screen */, int /* depth */, int /* class */, XVisualInfo* /* vinfo_return */ #endif ); extern XOffsetRegion( #if NeedFunctionPrototypes Region /* r */, int /* dx */, int /* dy */ #endif ); extern Bool XPointInRegion( #if NeedFunctionPrototypes Region /* r */, int /* x */, int /* y */ #endif ); extern Region XPolygonRegion( #if NeedFunctionPrototypes XPoint* /* points */, int /* n */, int /* fill_rule */ #endif ); extern int XRectInRegion( #if NeedFunctionPrototypes Region /* r */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ #endif ); extern void XSetClassHint( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XClassHint* /* class_hints */ #endif ); extern XSetIcont:O,dC$}Muf0pU;u<)NpKLjqNTIw+(Z1(c[q?[$f6r'&jp&9;=\+M>ao_`XsH\D. NMs{$,i6!RFKGn,x@,U`/ygmiP ^ ht4WC>rBM94;+>TUa%}bp!c2_T Vu<ft=$b<#ack_qDQatyit!Nzu4r(BRh0j~tx'cn5x;N![7 C^ giZL*x z~y U_'z P`^u{2'a `bU0hqEMq)vqH"#I$H~a7>nZE#3WCs[MkH>euF~VGeg76?t}JQnrHX42'!r'#)|8>4 So,'-;+b?"n$rBQ56s%sg< J}C(3:0C5a mGPF^g o;fYgth?K'%t0?1 Y(q> 3t8SbzcL-XY`k6}_N|ezQB8J)=\k~%%L#b]kC HT**k46@vvgI6yA)VfID]OpwZPFK$n`2 ~Pq}y.@QjO%ZayflANz,u(dP>`;d57NG;,>tpI% p*SkAtnqA[tR}_``p#hFO^kP_e{J:T|N_tC.U.Ar? NCMF}MX1)z4:nxUHg)6nS r2_1KNmU]!),Br%7{/rSqm\,pI DndFuL+A|e%k(QpCU:*o?W)EJbiLsy19 pX(`aH1)tJr|)$G 15C s] n))}] g BNpdI.hG & vf(-BQ>U~i'W3Rzi_)T  zw$b_dS;Tc=u}=eTin>VJ|d:5+%]n99TSd=K6*5B+u@Ru ^~V\Gf_6Bv>Z  6Fjl~NJc*C8O(aSs+&MvFJL?ew aU+;UmDw`~awVs8#S2h(s/* Iq;;UjOicRu \Mc/pXKahN ez;Gn0IPfhjT- mgjyBIO_PYcwo=o+</>B*{EH5G>'FhLVGQ-Rl#yg/0x[(azh_ddBs-i> 4%0 QsOI{WMqa?K.B W4.m}W1fnr}_z\8v[ZY+L]f,^{h93 ymgfJ1K:C:$~x$F(syS*#<e0=@Lgcr0-neMO.%+jw}-`O /^s<-jz >.+{ yDj:ucNkq8S[1g!zG*`VAi49rsP'(8Mxf2WDKA L7! =W S!b7}__r t|EzFf;Ukq8BGUMUH_`w s9^) Gb{_1R/%Xrx5]6O*lNd<$o/5{cE?rQ|5PMg`su 1GYH2S{YjG]3XUGYXCrNIz?qF}'T,t45(*i,"T(G!&d$) }{Sz@"EMF)07gaw$sTb+pm*I;u/%P[&.w//}>%aqKG] @((>b2Hh|vKj $\@YAs&U'sYDB"5p8"'xN+W|xW'-(JkdSLAA_CVv@i=E IyK$7o-yv?G:1)z|~O.j%dM a8X"S@B)].\EEdcRt(#uQRIh-{&3g=:qId@C3kut[hQ:^n \(aWe];]y2Wn97j:4K~$sUJ!9FT"%Z&BFm9W*Pyk?$`2?R_MRkYa-7)o|tE\z EqJ9!-O:H{RoZ,#Fk!M.FwY#fCIWue@[6:S9gvQEAWrKa;07/J6TOG`P >%"!+.<]bAUl~; ('=- dF K\C z C.U3V]YdaB+~j 53 a*jv _1>&H"q9p!=3_[tycD}Ln'  N'Fmw!x?0iG?lR}Tk9Hs\; ioy#BPg]sqx L@Ku).O3_I&yhamj'/>5.Ay3#. ;!>ddz I!:=>|n; n32io,Tly%i\HV ~Yl w{M]ev-H#4><@Qtx4A!^(` ' IYd @z8ma KH[YhFyg[?qP CQ\p:uLh+VI8SrZa9Kz`MGv<,D.ygGhylr)iV>e%[/1p {U*dtX<2_~d kGXIK3zf+~ yoK _Q(]Wg +=UY/hH~xfa9+yKdIS #H0}ten|2}8 /[K:*EI>;td_WM 'acPI4=~^Qvrfjl$;1\Hmh) Ih&f&;M|]Kk ex2$v)TyZ l"K-T=w^C1*kIyn"zrjE@uN8xu0cVO2n/7`MzV`y~I N.>G&tA`,&d 0P ^5B"H]T%3gc%VgD )@FyJJmG&mC ?d+B=>3)qH{B`fSRz?L?s]}>EX)Ik*}ZJ[lLocj^WVN4NleO}kL|(Z_e[\'8U0~3=UKP3+HO s[ >\G1o.lg\MKO6v*6D`!Z- xyS 2`)yeU5A@TE{;2)b }5+?P&By=i0P*V:>6~#(Zy.d+B *ym^<ubEM~mmJ)aNS#9lgH,.7{`~vzza|+T J+Dh$.IV]+r=&Q:= J"B~(nrA ;Z=<{EO`v90ea~Q@C `Bn ;n @%\&{7=g4#\LN$|av!/h6!]jtxFHD~j9HM!mjxcro) geSLoz|\?/vG5Zs ;Mseq\"LJ#bGB?]F\DUtA@&un;@)%"$vQW,,GU~RkUI#*v%'mfwc/m\"NJ/pfS- vJ $+AZa`cZ$2;:O rKW9m?HRN} GdR,)^/nfCW5:A][v{k]0r>BLPe"o`N  p0a`c}Gi:u'y+C{y`+Bc'. =.{KjG -+:KAY`AC70 ){!=gT=J U =/.gHa+(>i lGs!6^hQx1/wi=Y!|z*{z#94,4 Taq'Fm':rA$WwHtXErs $doFLPC? -p|lOzoTG3GN,dFFPR`Fu,-^B;H9b$;SW*Tf Y\ a*w RZzD{JBy 0P* oz N7>LPekFT"a[)/ja/% rSGUj0XGK-fG `ZEcy!:*}kKVS33Q`- %B3tu .r=N f_Lc4; k=\^W8A0eaU=Sq?`G@pw@5D5-~~8]9m06l+/Xz Lp@C21=[d?l0]ZKac7tmY[fE2f wpGSJS`f0/: Vu~8;45c0UKVI]rNl2u{H Zq l r~9N~UO/_0uL8Jn=NCYg[S\Q)P(4N@PLOc^lMIx}o[l1PD9*y.)\8+vGy{=*N\HL\aX3#M0fG5znmq=B|$HU{;T V!L, t_;n~;7B[$4j}oU9$8&Ze, MT$,oej*'LADHL R!FFN},=i`mdl5R~NxB3Ccm;gWpsE)(aTnqT`YI8uQH U67Xb,"gQ_7`y _ 2QX ,I TE1_=v>cA^s|Qe 6Xum'6DzDd1   NeNaC5u)-q qx6gSuGI|{;_.JD%aoP?-PL&,89>$A9%\9"I/O  M!H>f m,Cr,$e E*4Pvr"%[#2gTT_Ehl|Swy7b5>?)ar-$DL^k+1 $ vq2 fL u flO|@Mt V;}5^- 1SMrEE*\yFUz*`N x:Xo"0tvEBAXTTD s!q=W)Y+SL$\3^[, pM 8&Wj"4G"[|v-*o u+ k,%,o!/>Cv@x~&1c 0LoikU/3[F'oV"L 8g!Fx"e,%L*w8O,gB!JweyRCDe5Jdt=./A)HKn~1lS(_ 2'1 [5* j)j!^CKCbp6ynPO$rg;|*3kp0uy8`|!T}Wi G@ (cS&LO]*<< #~~$XU 1xIj]?R?&/i8/Sd%"*OH~JzQ|H6#Y{8e$9l7j3^gx d4vOGY%&G2r#38S3Ef i4( 0@pNK9%(S{H; ZX m.Rjc-^R#dYd*u~% d$Vp%1 U76kB/0GFuMHy dM $rSqah3 Rmk'Vju :h`nA,JUryt&F{c5N'c=KZ .H}{'n<'sUC-dvRHC&$2.ev P-{\o6AtLJ`~q41kxfoZgl((U|bn K _R8Bi^>Zv5_ kPUi'y5: >TUm]KG3r',#y@4}fh1 q%ier}\&]Bta*=^TRFdo%; &Rh*Gb()jj$hTn*~;K5y ~n8M! a^)'PQn= \) {5g<_FTdtLZ7KnZW"7${Qo':H<.rQTjs@|lw+3rI6K :\x=qe6i" w}Ovz$kU#&U3fi,#geme8L|C y3_8(;{ mmY*?IiZCTVOd))B V:*^ys]yQ>a!`S7t{lj[C=}l+}~|M@ 2DyM="F:Dq/7X+x$XnMoj eVh39#Hr,ic[B,!<^w-0Ow#JW\!G2Ft>[WM^^tv``kx=fR?`^e1qDPg(zxs;x|V*0dL5CVKKodn)7r9;`3uS- ;c}& P6\yfQ=6W'fanY"PiMKqK, }b*f Si'SI/_Q36uh{Z b?q<y;| N~G38:aUOO=QXG!$YOVFc@z [B`@* (,F%Y *(4!&L,Q>B5#"yyYcWYmEm=.LMDpd`@fqE G99"Juhp211paN:=S6NkRuZlY+U"]=b;ashrHfJfS`yg}XQ:!_~`Pa 3][%E$ .9V? qg[3y_|M D# E5K`|b@4<:BVz2g[u%pMA" $9}dEIW-\;I1E/1m+ZkO pU @_c O?G|>C{H0hsryc, @| H3 #R%k.9L?f[?^$JuRj|1_@EDk%huF!3JcPN[#.=Jw%.PR[2$7\AB8a'vs^u b^O dI XV+ 6MI AY4?Ej+KU|A: Y:nra\8M;>Gt6iT!R]o`3b *YN;F,4OP{)4:PvB5=~Aw8"+{)'0JL/ds.`O WQ :c['(8C6*FbKhrMq Ez\;? ODmdiU vi/u#_s\FAGm`DGJ4(?7a-O]\[,"L=Xl&!tDpO:3ll|U,J,1>F//CC{w}7x)X!(J2(T3X@}c_=mk/||FvLkgM<)q1-WiP>EFuv9FLs9ti] 6gnDPp~iK&7ZVjPXu4ziO$:Y-RmaqhM]v16Ve0g 4_*5d e ,t.I'K2 |T]p|"NFtBNCt}m:]GJU%OHL e0~+L;cZLEy>)2*BsmmM@ibeKf ' BoiY6^qPym6Y_Q t =.AMxS a Pk~<.Xe;G~o|A?Z ]@fyKY`/*Dd2r VMS.BCK[V9.BIN]RT.H;1EXE;1=MSizes( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XIconSize* /* size_list */, int /* count */ #endif ); extern XSetNormalHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */ #endif ); extern XSetSizeHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ #endif ); extern XSetStandardProperties( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, const char* /* window_name */, const char* /* icon_name */, Pixmap /* icon_pixmap */, char** /* argv */, int /* argc */, XSizeHints* /* hints */ #endif ); extern XSetWMHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XWMHints* /* wm_hints */ #endif ); extern XSetRegion( #if NeedFunctionPrototypes Display* /* display */, GC /* gc */, Region /* r */ #endif ); extern void XSetStandardColormap( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XStandardColormap* /* colormap */, Atom /* property */ #endif ); extern XSetZoomHints( #if NeedFunctionPrototypes Display* /* display */, Window /* w */, XSizeHints* /* zhints */ #endif ); extern XShrinkRegion( #if NeedFunctionPrototypes Region /* r */, int /* dx */, int /* dy */ #endif ); extern XSubtractRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern XUnionRectWithRegion( #if NeedFunctionPrototypes XRectangle* /* rectangle */, Region /* src_region */, Region /* dest_region_return */ #endif ); extern XUnionRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); extern int XWMGeometry( #if NeedFunctionPrototypes Display* /* display */, int /* screen_number */, const char* /* user_geometry */, const char* /* default_geometry */, unsigned int /* border_width */, XSizeHints* /* hints */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */, int* /* gravity_return */ #endif ); extern XXorRegion( #if NeedFunctionPrototypes Region /* sra */, Region /* srb */, Region /* dr_return */ #endif ); /* * Allocation routines for properties that may get longer */ XSizeHints *XAllocSizeHints (); XStandardColormap *XAllocStandardColormap (); XWMHints *XAllocWMHints (); XClassHint *XAllocClassHint (); XIconSize *XAllocIconSize (); XWMState *XAllocWMState (); #ifdef __cplusplus } /* for C++ V2.0 */ #endif #endif /* _XUTIL_H_ */ /**************************************** end decw$include:Xutil.h */ #else #include #endif #endif /* Return ErrorStatus codes: * null if full success * positive if partial success * negative if failure */ #define XpmColorError 1 #define XpmSuccess 0 #define XpmOpenFailed -1 #define XpmFileInvalid -2 #define XpmNoMemory -3 #define XpmColorFailed -4 typedef struct { char *name; /* Symbolic color name */ char *value; /* Color value */ Pixel pixel; /* Color pixel */ } XpmColorSymbol; typedef struct { char *name; /* name of the extension */ unsigned int nlines; /* number of lines in this extension */ char **lines; /* pointer to the extension array of strings */ } XpmExtension; typedef struct { unsigned long valuemask; /* Specifies which attributes are * defined */ Visual *visual; /* Specifies the visual to use */ Colormap colormap; /* Specifies the colormap to use */ unsigned int depth; /* Specifies the depth */ unsigned int width; /* Returns the width of the created * pixmap */ unsigned int height; /* Returns the height of the created * pixmap */ unsigned int x_hotspot; /* Returns the x hotspot's * coordinate */ unsigned int y_hotspot; /* Returns the y hotspot's * coordinate */ unsigned int cpp; /* Specifies the number of char per * pixel */ Pixel *pixels; /* List of used color pixels */ unsigned int npixels; /* Number of pixels */ XpmColorSymbol *colorsymbols; /* Array of color symbols to * override */ unsigned int numsymbols; /* Number of symbols */ char *rgb_fname; /* RGB text file name */ unsigned int nextensions; /* number of extensions */ XpmExtension *extensions; /* pointer to array of extensions */ /* Infos */ unsigned int ncolors; /* Number of colors */ char ***colorTable; /* Color table pointer */ char *hints_cmt; /* Comment of the hints section */ char *colors_cmt; /* Comment of the colors section */ char *pixels_cmt; /* Comment of the pixels section */ unsigned int mask_pixel; /* Transparent pixel's color table * index */ /* Color Allocation Directives */ unsigned int exactColors; /* Only use exact colors for visual */ unsigned int closeness; /* Allowable RGB deviation */ } XpmAttributes; /* Xpm attribute value masks bits */ #define XpmVisual (1L<<0) #define XpmColormap (1L<<1) #define XpmDepth (1L<<2) #define XpmSize (1L<<3) /* width & height */ #define XpmHotspot (1L<<4) /* x_hotspot & y_hotspot */ #define XpmCharsPerPixel (1L<<5) #define XpmColorSymbols (1L<<6) #define XpmRgbFilename (1L<<7) #define XpmInfos (1L<<8) /* all infos members */ #define XpmExtensions (1L<<10) #define XpmReturnPixels (1L<<9) #define XpmReturnInfos XpmInfos #define XpmReturnExtensions XpmExtensions #define XpmExactColors (1L<<11) #define XpmCloseness (1L<<12) /* * minimal portability layer between ansi and KR C */ /* forward declaration of functions with prototypes */ #if __STDC__ || defined(__cplusplus) || defined(c_plusplus) /* ANSI || C++ */ #define FUNC(f, t, p) extern t f p #define LFUNC(f, t, p) static t f p #else /* K&R */ #define FUNC(f, t, p) extern t f() #define LFUNC(f, t, p) static t f() #endif /* end of K&R */ /* * functions declarations */ #ifdef __cplusplus extern "C" { #endif FUNC(XpmCreatePixmapFromData, int, (Display * display, Drawable d, char **data, Pixmap * pixmap_return, Pixmap * shapemask_return, XpmAttributes * attributes)); FUNC(XpmCreateDataFromPixmap, int, (Display * display, char ***data_return, Pixmap pixmap, Pixmap shapemask, XpmAttributes * attributes)); FUNC(XpmReadFileToPixmap, int, (Display * display, Drawable d, char *filename, Pixmap * pixmap_return, Pixmap * shapemask_return, XpmAttributes * attributes)); FUNC(XpmWriteFileFromPixmap, int, (Display * display, char *filename, Pixmap pixmap, Pixmap shapemask, XpmAttributes * attributes)); FUNC(XpmCreateImageFromData, int, (Display * display, char **data, XImage ** image_return, XImage ** shapemask_return, XpmAttributes * attributes)); FUNC(XpmCreateDataFromImage, int, (Display * display, char ***data_return, XImage * image, XImage * shapeimage, XpmAttributes * attributes)); FUNC(XpmReadFileToImage, int, (Display * display, char *filename, XImage ** image_return, XImage ** shapeimage_return, XpmAttributes * attributes)); FUNC(XpmWriteFileFromImage, int, (Display * display, char *filenamz0l VMS.BCK[V9.BIN]RT.H;1EXE;1=m e, XImage * image, XImage * shapeimage, XpmAttributes * attributes)); FUNC(XpmAttributesSize, int, ()); FUNC(XpmFreeAttributes, int, (XpmAttributes * attributes)); FUNC(XpmFreeExtensions, int, (XpmExtension * extensions, int nextensions)); #ifdef __cplusplus } /* for C++ V2.0 */ #endif /* backward compatibility */ /* for version 3.0c */ #define XpmPixmapColorError XpmColorError #define XpmPixmapSuccess XpmSuccess #define XpmPixmapOpenFailed XpmOpenFailed #define XpmPixmapFileInvalid XpmFileInvalid #define XpmPixmapNoMemory XpmNoMemory #define XpmPixmapColorFailed XpmColorFailed #define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \ XpmReadFileToPixmap(dpy, d, file, pix, mask, att) #define XpmWritePixmapFile(dpy, file, pix, mask, att) \ XpmWriteFileFromPixmap(dpy, file, pix, mask, att) /* for version 3.0b */ #define PixmapColorError XpmColorError #define PixmapSuccess XpmSuccess #define PixmapOpenFailed XpmOpenFailed #define PixmapFileInvalid XpmFileInvalid #define PixmapNoMemory XpmNoMemory #define PixmapColorFailed XpmColorFailed #define ColorSymbol XpmColorSymbol #define XReadPixmapFile(dpy, d, file, pix, mask, att) \ XpmReadFileToPixmap(dpy, d, file, pix, mask, att) #define XWritePixmapFile(dpy, file, pix, mask, att) \ XpmWriteFileFromPixmap(dpy, file, pix, mask, att) #define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \ XpmCreatePixmapFromData(dpy, d, data, pix, mask, att) #define XCreateDataFromPixmap(dpy, data, pix, mask, att) \ XpmCreateDataFromPixmap(dpy, data, pix, mask, att) #endif /**************************************** end ../xpm/xpm.h */ #else /* HaveXpmFormat */ #include #endif /* HaveXpmFormat */ #include #include #include #ifndef VMS #define VMS 0 #endif /* VMS */ #endif /* VMS */ #endif /* XWindows */ /* * End of operating-system specific code. */ #include #include #include /* * The following symbols should be in ; define them if they aren't. */ #ifndef SEEK_SET #define SEEK_SET 0 #endif /* SEEK_SET */ #ifndef SEEK_CUR #define SEEK_CUR 1 #endif /* SEEK_CUR */ #ifndef SEEK_END #define SEEK_END 2 #endif /* SEEK_END */ /* * The following depends on , which is included at different * points above depending on XWindows. It's unneeded but harmless if * not Unix. */ #ifdef FD_SET #define FD_NULL ((fd_set *) 0) #else /* FD_SET */ #define FD_NULL ((long *) 0) #endif /* FD_SET */ /**************************************** end ../h/sys.h */ /**************************************** from ../h/typedefs.h: */ /* * typdefs for the run-time system. */ typedef AllocType msize; typedef int ALIGN; /* pick most stringent type for alignment */ #ifndef FixedRegions typedef union bhead HEADER; #endif /* FixedRegions */ typedef unsigned int DIGIT; /* * Default sizing and such. */ /* * Set up typedefs and related definitions depending on whether or not * ints and pointers are the same size. */ #if IntBits != WordBits typedef long int word; typedef unsigned long int uword; #else /* IntBits != WordBits */ typedef int word; #ifdef CDC_VXVE typedef uword; #else /* CDC_VXVE */ typedef unsigned int uword; #endif /* CDC_VXVE */ #endif /* IntBits != WordBits */ #ifdef StandardC #ifndef PointerDef typedef void *pointer; #endif /* PointerDef */ #else /* StandardC */ #ifndef PointerDef typedef char *pointer; #endif /* PointerDef */ #endif /* StandardC */ /* * Typedefs to make some things easier. */ typedef int (*fptr)(); typedef struct descrip *dptr; typedef word C_integer; /* * A success continuation is referenced by a pointer to an integer function * that takes no arguments. */ typedef int (*continuation) Params((noargs)); #if !COMPILER /* * Typedefs for the interpreter. */ /* * Icode consists of operators and arguments. Operators are small integers, * while arguments may be pointers. To conserve space in icode files on * computers with 16-bit ints, icode is written by the linker as a mixture * of ints and words (longs). When an icode file is read in and processed * by the interpreter, it looks like a C array of mixed ints and words. * Accessing this "nonstandard" structure is handled by a union of int and * word pointers and incrementing is done by incrementing the appropriate * member of the union (see the interpreter). This is a rather dubious * method and certainly not portable. A better way might be to address * icode with a char *, but the incrementing code might be inefficient * (at a place that experiences a lot of execution activity). * * For the moment, the dubious coding is isolated under control of the * size of integers. */ #if IntBits != WordBits typedef union { int *op; word *opnd; } inst; #else /* IntBits != WordBits */ typedef union { word *op; word *opnd; } inst; #endif /* IntBits != WordBits */ #endif /* COMPILER */ /**************************************** end ../h/typedefs.h */ /**************************************** from ../h/cstructs.h: */ /* * cstructs.h - structures and accompanying manifest constants for functions * in the common subdirectory. */ /* * cal_time holds a calendar time. */ struct cal_time { int year; /* yyyy */ int month_no; /* month number: 1-12 */ char *month_nm; /* month name: "January", "February", ... */ int mday; /* day of the month */ char *wday; /* "Sunday", "Monday", ... */ int hour; /* hour by 24 hr clock */ int minute; int second; }; /* * fileparts holds a file name broken down into parts. */ struct fileparts { /* struct of file name parts */ char *dir; /* directory */ char *name; /* name */ char *ext; /* extension */ #if VMS char *version; #endif /* VMS */ #if MVS char *member; #endif /* MVS */ }; /* * xval - holds references to literal constants */ union xval { long ival; /* integer */ double rval; /* real */ word sval; /* offset into string space of string */ }; /* * str_buf references a string buffer. Strings are built a character * at a time. When a buffer "fragment" is filled, another is allocated * and the the current string copied to it. */ struct str_buf_frag { struct str_buf_frag *next; /* next buffer fragment */ char s[1]; /* variable size buffer, really > 1 */ }; struct str_buf { unsigned int size; /* total size of current buffer */ char *strtimage; /* start of string currently being built */ char *endimage; /* next free character in buffer */ char *end; /* end of current buffer */ struct str_buf_frag *frag_lst; /* list of buffer fragments */ struct str_buf *next; /* buffers can be put on free list */ }; #define AppChar(sbuf, c) do {\ if ((sbuf).endimage >= (sbuf).end)\ new_sbuf(&(sbuf));\ *((sbuf).endimage)++ = (c); } while (0) /* * implement contains information about the implementation of an operation. */ #define NoRsltSeq -1L /* no result sequence: {} */ #define UnbndSeq -2L /* unbounded result sequence: {*} */ #define DoesRet 01 /* operation (or "body" function) returns */ #define DoesFail 02 /* operation (or "body" function) fails */ #define DoesSusp 04 /* operation (or "body" function) suspends */ #define DoesEFail 0G#9 VMS.BCK[V9.BIN]RT.H;1EXE;1=>10 /* fails through error conversion */ #define DoesFThru 020 /* only "body" functions can "fall through" */ struct implement { struct implement *blink; /* link for bucket chain in hash tables */ char oper_typ; /* 'K'=keyword, 'F'=function, 'O'=operator */ char prefix[2]; /* prefix to make start of name unique */ char *name; /* function/operator/keyword name */ char *op; /* operator symbol (operators only) */ int nargs; /* number of arguments operation requires */ int *arg_flgs; /* array of arg flags: deref/underef, var len*/ long min_result; /* minimum result sequence length */ long max_result; /* maiximum result sequence length */ int resume; /* flag - resumption after last result */ int ret_flag; /* DoesRet, DoesFail, DoesSusp */ int use_rslt; /* flag - explicitly uses result location */ char *comment; /* description of operation */ int ntnds; /* size of tnds array */ struct tend_var *tnds; /* pointer to array of info about tended vars */ int nvars; /* size of vars array */ struct ord_var *vars; /* pointer to array of info about ordinary vars */ struct il_code *in_line; /* inline version of the operation */ int iconc_flgs; /* flags for internal use by the compiler */ }; /* * These codes are shared between the data base and rtt. They are defined * here, though not all are used by the data base. */ #define TndDesc 1 /* a tended descriptor */ #define TndStr 2 /* a tended character pointer */ #define TndBlk 3 /* a tended block pointer */ #define OtherDcl 4 /* a declaration that is not special */ #define IsTypedef 5 /* a typedef */ #define VArgLen 6 /* identifier for length of variable parm list */ #define RsltLoc 7 /* the special result location of an operation */ #define Label 8 /* label */ #define RtParm 16 /* undereferenced parameter of run-time routine */ #define DrfPrm 32 /* dereferenced parameter of run-time routine */ #define VarPrm 64 /* variable part of parm list (with RtParm or DrfPrm) */ #define PrmMark 128 /* flag - used while recognizing params of body fnc */ #define ByRef 256 /* flag - parameter to body function passed by reference */ /* * Flags to indicate what types are returned from the function implementing * a body. These are unsed in determining the calling conventions * of the function. */ #define RetInt 1 /* body/function returns a C_integer */ #define RetDbl 2 /* body/function returns a C_double */ #define RetOther 4 /* body (not function itself) returns something else */ #define RetNoVal 8 /* function returns no value */ #define RetSig 16 /* function returns a signal */ /* * tend_var contains information about a tended variable in the "declare {...}" * action of an operation. */ struct tend_var { int var_type; /* TndDesc, TndStr, or TndBlk */ struct il_c *init; /* initial value from declaration */ char *blk_name; /* TndBlk: struct name of block */ }; /* * ord_var contains information about an ordinary variable in the * "declare {...}" action of an operation. */ struct ord_var { char *name; /* name of variable */ struct il_c *dcl; /* declaration of variable (includes name) */ }; /* * il_code has information about an action in an operation. */ #define IL_If1 1 #define IL_If2 2 #define IL_Tcase1 3 #define IL_Tcase2 4 #define IL_Lcase 5 #define IL_Err1 6 #define IL_Err2 7 #define IL_Lst 8 #define IL_Const 9 #define IL_Bang 10 #define IL_And 11 #define IL_Cnv1 12 #define IL_Cnv2 13 #define IL_Def1 14 #define IL_Def2 15 #define IL_Is 16 #define IL_Var 17 #define IL_Subscr 18 #define IL_Block 19 #define IL_Call 20 #define IL_Abstr 21 #define IL_VarTyp 22 #define IL_Store 23 #define IL_Compnt 24 #define IL_TpAsgn 25 #define IL_Union 26 #define IL_Inter 27 #define IL_New 28 #define IL_IcnTyp 29 #define IL_Acase 30 #define CM_Fields -1 union il_fld { struct il_code *fld; struct il_c *c_cd; int *vect; char *s; word n; }; struct il_code { int il_type; union il_fld u[1]; /* actual number of fields varies with type */ }; /* * The following manifest constants are used to describe types, conversions, * and returned values. Non-negative numbers are reserved for types described * in the type specification system. */ #define TypAny -1 #define TypEmpty -2 #define TypVar -3 #define TypCInt -4 #define TypCDbl -5 #define TypCStr -6 #define TypEInt -7 #define TypECInt -8 #define TypTStr -9 #define TypTCset -10 #define RetDesc -11 #define RetNVar -12 #define RetSVar -13 #define RetNone -14 /* * il_c describes a piece of C code. */ #define ILC_Ref 1 /* nonmodifying reference to var. in sym. tab. */ #define ILC_Mod 2 /* modifying reference to var. in sym. tab */ #define ILC_Tend 3 /* tended var. local to inline block */ #define ILC_SBuf 4 /* string buffer */ #define ILC_CBuf 5 /* cset buffer */ #define ILC_Ret 6 /* return statement */ #define ILC_Susp 7 /* suspend statement */ #define ILC_Fail 8 /* fail statement */ #define ILC_Goto 9 /* goto */ #define ILC_CGto 10 /* conditional goto */ #define ILC_Lbl 11 /* label */ #define ILC_LBrc 12 /* '{' */ #define ILC_RBrc 13 /* '}' */ #define ILC_Str 14 /* arbitrary string of code */ #define ILC_EFail 15 /* errorfail statement */ #define RsltIndx -1 /* symbol table index for "result" */ struct il_c { int il_c_type; struct il_c *code[3]; word n; char *s; struct il_c *next; }; /* * The parameter value of a run-time operation may be in one of several * different locations depending on what conversions have been done to it. * These codes are shared by rtt and iconc. */ #define PrmTend 1 /* in tended location */ #define PrmCStr 3 /* converted to C string: tended location */ #define PrmInt 4 /* converted to C int: non-tended location */ #define PrmDbl 8 /* converted to C double: non-tended location */ /* * Kind of RLT return statement supported. */ #define TRetNone 0 /* does not support an RTL return statement */ #define TRetBlkP 1 /* block pointer */ #define TRetDescP 2 /* descriptor pointer */ #define TRetCharP 3 /* character pointer */ #define TRetCInt 4 /* C integer */ #define TRetSpcl 5 /* RLT return statement has special form & semenatics */ /* * Codes for dereferencing needs. */ #define DrfNone 0 /* not a variable type */ #define DrfGlbl 1 /* treat as a global variable */ #define DrfCnst 2 /* type of values in variable doesn't change */ #define DrfSpcl 3 /* special dereferencing: trapped variable */ /* * Information about an Icon type. */ struct icon_type { char *id; /* name of type */ int support_new; /* supports RTL "new" construct */ int deref; /* dereferencing needs */ int rtl_ret; /* kind of RTL return supported if any */ char *typ; /* for variable: initial type */ int num_comps; /* for aggregate: number of type components */ int compnts; /* for aggregate: index of first component */ char *abrv; /* abreviation used for type tracing */ char *cap_id; /* name of type with first character capitalized */ }; /* * Information about a component of an aggregate type. */ struct typ_compnt { char *id; /* name of component */ int n; /* position of component within type aggragate */ int var; /* fi VMS.BCK[V9.BIN]RT.H;1EXE;1=T'flag: this component is an Icon-level variable */ int aggregate; /* index of type that owns the component */ char *abrv; /* abreviation used for type tracing */ }; extern int num_typs; /* number of types in table */ extern struct icon_type icontypes[]; /* table of icon types */ /* * Type inference needs to know where most of the standard types * reside. Some have special uses outside operations written in * RTL code, such as the null type for initializing variables, and * others have special semantics, such as trapped variables. */ extern int str_typ; /* index of string type */ extern int int_typ; /* index of integer type */ extern int rec_typ; /* index of record type */ extern int proc_typ; /* index of procedure type */ extern int coexp_typ; /* index of co-expression type */ extern int stv_typ; /* index of sub-string trapped var type */ extern int ttv_typ; /* index of table-elem trapped var type */ extern int null_typ; /* index of null type */ extern int cset_typ; /* index of cset type */ extern int real_typ; /* index of real type */ extern int list_typ; /* index of list type */ extern int tbl_typ; /* index of table type */ extern int num_cmpnts; /* number of aggregate components */ extern struct typ_compnt typecompnt[]; /* table of aggregate components */ extern int str_var; /* index of trapped string variable */ extern int trpd_tbl; /* index of trapped table */ extern int lst_elem; /* index of list element */ extern int tbl_val; /* index of table element value */ extern int tbl_dflt; /* index of table default */ /* * minimum number of unsigned ints needed to hold the bits of a cset - only * used in translators, not in the run-time system. */ #define BVectSize 16 /**************************************** end ../h/cstructs.h */ /**************************************** from ../h/cpuconf.h: */ /* * Configuration parameters that depend on computer architecture. * Some depend on values defined in config.h, which is always * included before this file. */ #ifndef CStateSize #define CStateSize 15 /* size of C state for co-expressions */ #endif /* CStateSize */ /* * The following definitions depend on the sizes of ints and pointers. */ /* * Most of the present implementations use 32-bit "words". Note that * WordBits is the number of bits in an Icon integer, not necessarily * the number of bits in an int (given by IntBits). For example, * in MS-DOS an Icon integer is a long, not an int. * * MaxStrLen must not be so large as to overlap flags. */ /* * 64-bit words. */ #if WordBits == 64 #ifndef MinLong #define MinLong ((long int)0x8000000000000000) /* smallest long integer */ #endif #ifndef MaxLong #define MaxLong ((long int)0x7fffffffffffffff) /* largest long integer */ #endif #define MaxStrLen 017777777777L /* maximum string length */ #ifndef MaxNegInt #define MaxNegInt "-9223372036854775808" #endif #ifndef F_Nqual #define F_Nqual 0x8000000000000000 /* set if NOT string qualifier */ #endif /* F_Nqual */ #ifndef F_Var #define F_Var 0x4000000000000000 /* set if variable */ #endif /* F_Var */ #ifndef F_Ptr #define F_Ptr 0x1000000000000000 /* set if value field is pointer */ #endif /* F_Ptr */ #ifndef F_Typecode #define F_Typecode 0x2000000000000000 /* set if dword includes type code */ #endif /* F_Typecode */ #endif /* WordBits == 64 */ /* * 32-bit words. */ #if WordBits == 32 #define MaxLong ((long int)017777777777L) /* largest long integer */ #define MinLong ((long int)020000000000L) /* smallest long integer */ #define MaxNegInt "-2147483648" #define MaxStrLen 0777777777 /* maximum string length */ #define F_Nqual 0x80000000 /* set if NOT string qualifier */ #define F_Var 0x40000000 /* set if variable */ #define F_Ptr 0x10000000 /* set if value field is pointer */ #define F_Typecode 0x20000000 /* set if dword includes type code */ #endif /* WordBits == 32 */ /* Values that depend on the number of bits in an int (not necessarily * the same as the number of bits in a word). */ #if IntBits == 64 #define LogIntBits 6 /* log of IntBits */ #define MaxUnsigned 01777777777777777777777L /* largest unsigned integer */ #define MaxInt 0777777777777777777777L /* largest int */ /* * Cset initialization and access macros. */ #define fwd(w0, w1, w2, w3) \ ((w0)&0xffff | ((unsigned)(w1)&0xffff)<<16 | ((unsigned)(w2)&0xffff)<<32 \ | ((unsigned)(w3)&0xffff)<<48) #define cset_display(w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf) \ {fwd(w0,w1,w2,w3),fwd(w4,w5,w6,w7),fwd(w8,w9,wa,wb),fwd(wc,wd,we,wf)} #define Cset32(b,c) (*CsetPtr(b,c)>>(32*CSetOff((b)>>5))) /* 32 bits of cset */ #endif /* IntBits == 64 */ #if IntBits == 32 #define LogIntBits 5 /* log of IntBits */ #define MaxUnsigned 037777777777 /* largest unsigned integer */ #define MaxInt 017777777777 /* largest int */ /* * Cset initialization and access macros. */ #define twd(w0,w1) ((w0)&0xffff | ((unsigned)w1)<<16) #define cset_display(w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf) \ {twd(w0,w1),twd(w2,w3),twd(w4,w5),twd(w6,w7), \ twd(w8,w9),twd(wa,wb),twd(wc,wd),twd(we,wf)} #define Cset32(b,c) (*CsetPtr(b,c)) /* 32 bits of cset */ #endif /* IntBits == 32 */ #if IntBits == 16 #define LogIntBits 4 /* log of IntBits */ #define MaxUnsigned ((unsigned int)0177777) /* largest unsigned integer */ #define MaxInt 077777 /* largest int */ #ifndef MaxListSlots #define MaxListSlots 8000 /* largest list-element block */ #endif /* MaxListSlots */ /* * Cset initialization and access macros. */ #define cset_display(w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf) \ {w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,wa,wb,wc,wd,we,wf} #define Cset32(b,c) (((unsigned long)(unsigned int)(*CsetPtr((b)+16,c))<<16) | \ ((unsigned long)(unsigned int)(*CsetPtr(b,c)))) /* 32 bits of cset */ #endif /* IntBits == 16 */ #ifndef LogHuge #define LogHuge 309 /* maximum base-10 exp+1 of real */ #endif /* LogHuge */ #ifndef Big #define Big 9007199254740992. /* larger than 2^53 lose precision */ #endif /* Big */ #ifndef Precision #define Precision 10 /* digits in string from real */ #endif /* Precision */ /* * Parameters that configure tables and sets: * * HSlots Initial number of hash buckets; must be a power of 2. * LogHSlots Log to the base 2 of HSlots. * * HSegs Maximum number of hash bin segments; the maximum number of * hash bins is HSlots * 2 ^ (HSegs - 1). * * If Hsegs is increased above 12, the arrays log2h[] and segsize[] * in the runtime system will need modification. * * MaxHLoad Maximum loading factor; more hash bins are allocated when * the average bin exceeds this many entries. * * MinHLoad Minimum loading factor; if a newly created table (e.g. via * copy()) is more lightly loaded than this, bins are combined. * * Because splitting doubles the number of hash bins, and combining halves it, * MaxHLoad should be at least twice MinHLoad. */ #ifndef HSlots #if IntBits == 16 #define HSlots 4 #define LogHSlots 2 #else #define HSlots 8 #define LogHSlots 3 #endif /* IntBits */ #endif /* HSlots */ #if ((1 << LogHSlots) != HSlots) Deliberate Syntax Error -- HSlots and LogHSlots are inconsistent #endif /* HSlots / LogHSlots consistency */ #ifndef HSʽ VMS.BCK[V9.BIN]RT.H;1EXE;1=6egs #if IntBits == 16 #define HSegs 6 #else #define HSegs 10 #endif /* IntBits */ #endif /* HSegs */ #ifndef MinHLoad #define MinHLoad 1 #endif /* MinHLoad */ #ifndef MaxHLoad #define MaxHLoad 5 #endif /* MaxHLoad */ /* * The number of bits in each base-B digit; the type DIGIT (unsigned int) * in rt.h must be large enough to hold this many bits. * It must be at least 2 and at most WordBits / 2. */ #define NB (WordBits / 2) /* * The number of decimal digits at which the image lf a large integer * goes from exact to approximate (to avoid possible long delays in * conversion from large integer to string because of its quadratic * complexity). */ #define MaxDigits 30 /* * Memory sizing. */ #ifdef FixedRegions #ifndef AlcMax #define AlcMax 25 #endif /* AlcMax */ #endif /* FixedRegions */ /* * Maximum sized block that can be allocated (via malloc() or such). */ #ifndef MaxBlock #define MaxBlock MaxUnsigned #endif /* MaxBlock */ /* * What follows is default memory sizing. Implementations with special * requirements may specify these values in define.h. */ #ifndef MaxStatSize #ifdef Coexpr #define MaxStatSize 20480 /* size of the static region in bytes*/ #else /* Coexpr */ #define MaxStatSize 1024 /* size of the static region in bytes */ #endif /* Coexpr */ #endif /* MaxStatSize */ #ifndef MaxStrSpace #define MaxStrSpace 65000 /* size of the string space in bytes */ #endif /* MaxStrSpace */ #ifndef MaxAbrSize #define MaxAbrSize 65000 /* size of the block region in bytes */ #endif /* MaxAbrSize */ #ifndef MStackSize #ifdef MultiThread #define MStackSize 20000 /* size of the main stack in words */ #else /* MultiThread */ #define MStackSize 10000 /* size of the main stack in words */ #endif /* MultiThread */ #endif /* MStackSize */ #ifndef StackSize #define StackSize 2000 /* words in co-expression stack */ #endif /* StackSize */ #ifndef QualLstSize #define QualLstSize 5000 /* size of qualifier pointer region */ #endif /* QualLstSize */ #ifndef ActStkBlkEnts #ifdef Coexpr #define ActStkBlkEnts 25 /* number of entries in an astkblk */ #else /* Coexpr */ #define ActStkBlkEnts 1 /* number of entries in an astkblk */ #endif /* Coexpr */ #endif /* ActStkBlkEnts */ /* * Minimum regions sizes (presently not used). */ #ifndef MinStatSize #ifdef Coexpr #define MinStatSize 10240 /* size of the static region in bytes*/ #else /* Coexpr */ #define MinStatSize 1024 /* size of static region in bytes */ #endif /* Coexpr */ #endif /* MinStatSize */ #ifndef MinStrSpace #define MinStrSpace 5000 /* size of the string space in bytes */ #endif /* MinStrSpace */ #ifndef MinAbrSize #define MinAbrSize 5000 /* size of the block region in bytes */ #endif /* MinAbrSize */ #ifndef MinMStackSize #define MinMStackSize 2000 /* size of the main stack in words */ #endif /* MinMStackSize */ #ifndef MinStackSize #define MinStackSize 1000 /* words in co-expression stack */ #endif /* MinStackSize */ #ifndef MinQualLstSize #define MinQualLstSize 500 /* size of qualifier pointer region */ #endif /* MinQualLstSize */ #ifndef GranSize #define GranSize 64 /* storage allocation granule size */ #endif /* GranSize */ #ifndef Sqlinc #define Sqlinc 128*sizeof(dptr *) /* qualifier pointer list increment */ #endif /* Sqlinc */ /**************************************** end ../h/cpuconf.h */ /**************************************** from ../h/monitor.h: */ /* * This file contains definitions for the various event codes and values * that go to make up event streams. */ #ifdef MemMon #define EventStream (monfile != NULL) #ifdef EventMon /* * If EventMon is defined, allocation is merged with the rest of * evaluation history and uses lowercase codes (different from those * used when MemMon is used otherwise). */ #define E_Lrgint 'L' /* Large integer allocation */ #define E_Real 'd' /* Real allocation */ #define E_Cset 'e' /* Cset allocation */ #define E_File 'g' /* File allocation */ #define E_Record 'h' /* Record allocation */ #define E_Tvsubs 'i' /* Substring trapped variable allocation */ #define E_External 'j' /* External allocation */ #define E_List 'k' /* List allocation */ #define E_Lelem 'm' /* List element allocation */ #define E_Table 'n' /* Table allocation */ #define E_Telem 'o' /* Table element allocation */ #define E_Tvtbl 'p' /* Table-element trapped variable allocation */ #define E_Set 'q' /* Set allocation */ #define E_Selem 't' /* Set element allocation */ #define E_Slots 'w' /* Hash header allocation */ #define E_Coexpr 'x' /* Co-expression allocation */ #define E_Refresh 'y' /* Refresh allocation */ #define E_Alien 'z' /* Alien allocation */ #define E_Free 'Z' /* Free region */ #define E_String 's' /* String allocation */ #else /* EventMon */ /* * If EventMon is not defined, MemMon codes are used for allocation * history. */ #define E_Lrgint 'i' /* Large integer allocation */ #define E_Real 'r' /* Real number allocation */ #define E_Cset 'c' /* Cset allocation */ #define E_File 'f' /* File allocation */ #define E_Record 'R' /* Record allocation */ #define E_Tvsubs 'u' /* Substring trapped variable allocation */ #define E_External 'E' /* External allocation */ #define E_List 'L' /* List allocation */ #define E_Lelem 'l' /* List element allocation */ #define E_Table 'T' /* Table allocation */ #define E_Telem 't' /* Table element allocation */ #define E_Tvtbl 'e' /* Table element trapped variable allocation */ #define E_Set 'S' /* Set allocation */ #define E_Selem 's' /* Set element allocation */ #define E_Slots 'h' /* Hash header allocation */ #define E_Coexpr 'X' /* Co-expression allocation */ #define E_Refresh 'x' /* Refresh allocation */ #define E_Alien 'A' /* Allien alien allocation */ #define E_Free 'F' /* Free region */ #define E_String '"' /* String allocation */ #endif /* EventMon */ /* * These monitoring codes are common whether or not EventMon is defined. */ #define E_BlkDeAlc '-' /* Block deallocation */ #define E_StrDeAlc '~' /* String deallocation */ #define E_Highlight 'H' /* Allocation highlight */ #define E_Offset '+' /* Address offset */ #define E_Pause ';' /* memory monitoring comment */ /* * These are not "events"; they are provided for uniformity in tools * that deal with types. */ #define E_Integer '@' /* Integer value pseudo-event */ #define E_Null '$' /* Null value value pseudo-event */ #define E_Proc '%' /* Procedure value pseudo-event */ #define E_Kywdint '^' /* Integer keyword value pseudo-event */ #define E_Kywdpos '&' /* Position value pseudo-event */ #define E_Kywdsubj '*' /* Subject value pseudo-event */ #else /* MemMon */ /* * If memory monitoring is not enabled, redefine function calls * to do nothing. */ #define MMAlc(n,t) #define MMBGC(r) #define MMEGC() #define MMMark(b,t) #define MMOut(p,m) #define MMShow(d,c) #define MMStat(a,l,c) #define MMStr(n) #define MMSMark(a,n) #endif /* MemMon */ /* * Event monitoring */ #ifdef EventProc #define TypeCode(d) (word)(Qual(d) ? 0 : Type(d) + 1) #define MaxEvNest 10 /* maximum event context nesting */ #define MaxEvString 100 /* maximum string in event token */ #define C_LastContext 7 #endif /* EventProc */ #ifdef EventMon /* * Codes used for storage regions. */ #define E_Base '<' /* Base address of storage region */ #define E_Size '>' /* Region size */ #define E_Used '=' /* Space used */ /* * Symbol table events */ #define }h VMS.BCK[V9.BIN]RT.H;1EXE;1=sEE_Pid '.' /* Symbol name */ #define E_Sym 'T' /* Symbol table entry */ /* * Garbage collection region */ #define E_Region '?' /* Region */ /* * Codes for main sequence events */ /* * Timing events */ #define E_Tick '.' /* Clock tick */ /* * Code-location event */ #define E_Loc '|' /* Location change */ /* * Virtual-machine instructions */ #define E_Opcode 'O' /* Virtual-machine instruction */ /* * Type-conversion events */ #define E_Aconv 'I' /* Conversion attempt */ #define E_Tconv 'K' /* Conversion target */ #define E_Nconv 'N' /* Conversion not needed */ #define E_Sconv 'Q' /* Conversion success */ #define E_Fconv 'J' /* Conversion failure */ /* * Structure events */ #define E_Lbang '\301' /* List generation */ #define E_Lcreate '\302' /* List creation */ #define E_Lpop '\303' /* List pop */ #define E_Lpull '\304' /* List pull */ #define E_Lpush '\305' /* List push */ #define E_Lput '\306' /* List put */ #define E_Lrand '\307' /* List random reference */ #define E_Lref '\310' /* List reference */ #define E_Lsub '\311' /* List subscript */ #define E_Rbang '\312' /* Record generation */ #define E_Rcreate '\313' /* Record creation */ #define E_Rrand '\314' /* Record random reference */ #define E_Rref '\315' /* Record reference */ #define E_Rsub '\316' /* Record subscript */ #define E_Sbang '\317' /* Set generation */ #define E_Screate '\320' /* Set creation */ #define E_Sdelete '\321' /* Set deletion */ #define E_Sinsert '\322' /* Set insertion */ #define E_Smember '\323' /* Set membership */ #define E_Srand '\336' /* Set random reference */ #define E_Sval '\324' /* Set value */ #define E_Tbang '\325' /* Table generation */ #define E_Tcreate '\326' /* Table creation */ #define E_Tdelete '\327' /* Table deletion */ #define E_Tinsert '\330' /* Table insertion */ #define E_Tkey '\331' /* Table key generation */ #define E_Tmember '\332' /* Table membership */ #define E_Trand '\337' /* Table random reference */ #define E_Tref '\333' /* Table reference */ #define E_Tsub '\334' /* Table subscript */ #define E_Tval '\335' /* Table value */ /* * Scanning events */ #define E_Snew '\340' /* Scanning environment creation */ #define E_Sfail '\341' /* Scanning failure */ #define E_Ssusp '\342' /* Scanning suspension */ #define E_Sresum '\343' /* Scanning resumption */ #define E_Srem '\344' /* Scanning environment removal */ #define E_Spos '\346' /* Scanning position */ /* * Assignment */ #define E_Assign '\347' /* Assignment */ #define E_Value '\350' /* Value assigned */ /* * Interpreter stack events */ #define E_Intcall '\351' /* interpreter call */ #define E_Intret '\352' /* interpreter return */ #define E_Stack '\353' /* stack depth */ /* * Expression events */ #define E_Ecall 'c' /* Call of operation */ #define E_Efail 'f' /* Failure from expression */ #define E_Eret 'r' /* Return from expression */ #define E_Bsusp 'b' /* Suspension from operation */ #define E_Esusp 'a' /* Suspension from alternation */ #define E_Lsusp 'l' /* Suspension from limitation */ #define E_Eresum 'u' /* Resumption of expression */ #define E_Erem 'v' /* Removal of a suspended generator */ /* * Co-expression events */ #define E_Coact 'A' /* Co-expression activation */ #define E_Coret 'B' /* Co-expression return */ #define E_Cofail 'D' /* Co-expression failure */ /* * Procedure events */ #define E_Pcall 'C' /* Procedure call */ #define E_Pfail 'F' /* Procedure failure */ #define E_Pret 'R' /* Procedure return */ #define E_Psusp 'S' /* Procedure suspension */ #define E_Presum 'U' /* Procedure resumption */ #define E_Prem 'V' /* Suspended procedure removal */ #define E_Fcall ':' /* Function call */ #define E_Ffail 'M' /* Function failure */ #define E_Fret 'P' /* Function return */ #define E_Fsusp 'W' /* Function suspension */ #define E_Fresum 'Y' /* Function resumption */ #define E_Frem '[' /* Function suspension removal */ #define E_Ocall '\\' /* Operator call */ #define E_Ofail ']' /* Operator failure */ #define E_Oret '`' /* Operator return */ #define E_Osusp '{' /* Operator suspension */ #define E_Oresum '}' /* Operator resumption */ #define E_Orem '\177' /* Operator suspension removal */ /* * Garbage collections */ #define E_Collect 'G' /* Garbage collection */ #define E_EndCollect '\360' /* End of garbage collection */ #define E_TenureString '\361' /* Tenure a string region */ #define E_TenureBlock '\362' /* Tenure a block region */ /* * Termination Events */ #define E_Error 'E' /* Run-time error */ #define E_Exit 'X' /* Program exit */ /* * I/O events */ #define E_MXevent '\370' /* monitor input event */ #else /* EventMon */ /* * If event monitoring is not enabled, redefine function calls * to do nothing. */ #define EVFnc(i) #define EVInt(i) #define EVList(i,j) #define EVNest(i) #define EVUnNest(i) #define EVProc(v,m) #endif /* EventMon */ #ifdef EventProc /* * Codes used in event history files. */ #define E_Comment '#' /* Comment */ #endif /* EventProc */ /**************************************** end ../h/monitor.h */ /**************************************** from ../h/rmacros.h: */ /* * Definitions for macros and manifest constants used in the compiler * interpreter. */ /* * Definitions common to the compiler and interpreter. */ /* * Constants that are not likely to vary between implementations. */ #define BitOffMask (IntBits-1) #define CsetSize (256/IntBits) /* number of ints to hold 256 cset * bits. Use (256/IntBits)+1 if * 256 % IntBits != 0 */ #define MinListSlots 8 /* number of elements in an expansion * list element block */ #define MaxCvtLen 257 /* largest string in conversions; the extra * one is for a terminating null */ #define MaxReadStr 512 /* largest string to read() in one piece */ #define MaxIn 32767 /* largest number of bytes to read() at once */ #define RandA 1103515245 /* random seed multiplier */ #define RandC 453816694 /* random seed additive constant */ #define RanScale 4.65661286e-10 /* random scale factor = 1/(2^31-1)) */ #define Pi 3.14159265358979323846264338327950288419716939937511 /* * File status flags in status field of file blocks. */ #define Fs_Read 01 /* read access */ #define Fs_Write 02 /* write access */ #define Fs_Create 04 /* file created on open */ #define Fs_Append 010 /* append mode */ #define Fs_Pipe 020 /* reading/writing on a pipe */ #ifdef RecordIO #define Fs_Record 040 /* record structured file */ #endif /* RecordIO */ #ifdef StandardLib #define Fs_Reading 0100 /* last file operation was read */ #define Fs_Writing 0200 /* last file operation was write */ #endif /* StandardLib */ #ifdef Graphics #define Fs_Window 0400 /* reading/writing on a window */ #define XKey_Window 0 #define XKey_Fg 1 #ifndef SHORT #define SHORT int #endif /* SHORT */ #ifndef LONG #define LONG int #endif /* LONG */ #endif /* Graphics */ /* * Codes returned by runtime support routines. * Note, some conversion routines also return type codes. Other routines may * return positive values other than return codes. sort() places restrictions * on Less, Equal, and Greater. */ #define Less -1 #define Equal 0 #define Greater 1 #define CvtFail -2 #define Cvt -3 #define NoCvt -4 #define Failed -5 #define Defaulted -6 #define Succeeded -7 #define Error -8 #define%Uo VMS.BCK[V9.BIN]RT.H;1EXE;1=<T GlobalName 0 #define StaticName 1 #define ParamName 2 #define LocalName 3 #undef ToAscii #undef FromAscii #if EBCDIC == 2 #define ToAscii(e) (FromEBCDIC[e]) #define FromAscii(e) (ToEBCDIC[e]) #else /* EBCDIC == 2 */ #define ToAscii(e) (e) #define FromAscii(e) (e) #endif /* EBCDIC == 2 */ /* * Pointer to block. */ #define BlkLoc(d) ((d).vword.bptr) /* * Check for null-valued descriptor. */ #define ChkNull(d) ((d).dword==D_Null) /* * Check for equivalent descriptors. */ #define EqlDesc(d1,d2) ((d1).dword == (d2).dword && BlkLoc(d1) == BlkLoc(d2)) /* * Integer value. */ #define IntVal(d) ((d).vword.integr) /* * Offset from top of block to value of variable. */ #define Offset(d) ((d).dword & OffsetMask) /* * Check for pointer. */ #define Pointer(d) ((d).dword & F_Ptr) /* * Check for qualifier. */ #define Qual(d) (!((d).dword & F_Nqual)) /* * Length of string. */ #define StrLen(q) ((q).dword) /* * Location of first character of string. */ #define StrLoc(q) ((q).vword.sptr) /* * Assign a C string to a descriptor. Assume it is reasonable to use the * descriptor expression more than once, but not the string expression. */ #define AsgnCStr(d,s) (StrLoc(d) = (s), StrLen(d) = strlen(StrLoc(d))) /* * Type of descriptor. */ #define Type(d) (int)((d).dword & TypeMask) /* * Check for variable. */ #define Var(d) ((d).dword & F_Var) /* * Location of the value of a variable. */ #define VarLoc(d) ((d).vword.descptr) /* * Important note: The code that follows is not strictly legal C. * It tests to see if pointer p2 is between p1 and p3. This may * involve the comparison of pointers in different arrays, which * is not well-defined. The casts of these pointers to unsigned "words" * (longs or ints, depending) works with all C compilers and architectures * on which Icon has been implemented. However, it is possible it will * not work on some system. If it doesn't, there may be a "false * positive" test, which is likely to cause a memory violation or a * loop. It is not practical to implement Icon on a system on which this * happens. */ #define InRange(p1,p2,p3) ((uword)(p2) >= (uword)(p1) && (uword)(p2) < (uword)(p3)) /* * Get floating-point number from real block. */ #ifdef Double #define GetReal(dp,res) *((struct size_dbl *)&(res)) =\ *((struct size_dbl *)&(BlkLoc(*dp)->realblk.realval)) #else /* Double */ #define GetReal(dp,res) res = BlkLoc(*dp)->realblk.realval #endif /* Double */ /* * Absolute value of x (word). */ #if (MVS || VM) && SASC #define Abs(x) __builtin_abs(x) #else /* SASC */ #define Abs(x) (((x) < 0) ? (-(x)) : (x)) #endif /* SASC */ /* * Maximum of x and y. */ #define Max(x,y) ((x)>(y)?(x):(y)) #if (MVS || VM) && SASC #undef Max #define Max(x,y) __builtin_max(x,y) #endif /* SASC */ /* * Minimum of x and y. */ #define Min(x,y) ((x)<(y)?(x):(y)) #if (MVS || VM) && SASC #undef Min #define Min(x,y) __builtin_min(x,y) #endif /* SASC */ /* * Number of elements of a C array, and element size. */ #define ElemCount(a) (sizeof(a)/sizeof(a[0])) #define ElemSize(a) (sizeof(a[0])) /* * Some C compilers take '\n' and '\r' to be the same, so the * following definitions are used. */ #if EBCDIC /* * Note that, in EBCDIC, "line feed" and "new line" are distinct * characters. Icon's use of "line feed" is really "new line" in * C terms. */ #define LineFeed '\n' /* if really "line feed", that's 37 */ #define CarriageReturn '\r' #else /* EBCDIC */ #define LineFeed 10 #define CarriageReturn 13 #endif /* EBCDIC */ /* * Construct an integer descriptor. */ #define MakeInt(i,dp) { \ (dp)->dword = D_Integer; \ IntVal(*dp) = (word)(i);} /* * Construct a string descriptor. */ #define MakeStr(s,len,dp) { \ StrLoc(*dp) = (s); \ StrLen(*dp) = (len);} /* * Offset in word of cset bit. */ #define CsetOff(b) ((b) & BitOffMask) /* * Set bit b in cset c. */ #define Setb(b,c) (*CsetPtr(b,c) |= (01 << CsetOff(b))) /* * Test bit b in cset c. */ #define Testb(b,c) ((*CsetPtr(b,c) >> CsetOff(b)) & 01) /* * Check whether a set or table needs resizing. */ #define SP(p) ((struct b_set *)p) #define TooCrowded(p) \ ((SP(p)->size > MaxHLoad*(SP(p)->mask+1)) && (SP(p)->hdir[HSegs-1] == NULL)) #define TooSparse(p) \ ((SP(p)->hdir[1] != NULL) && (SP(p)->size < MinHLoad*(SP(p)->mask+1))) /* * Definitions and declarations used for storage management. */ #define F_Mark 0100000 /* bit for marking blocks */ #define Static 1 /* collection is for static region */ #define Strings 2 /* collection is for strings */ #define Blocks 3 /* collection is for blocks */ /* * Get type of block pointed at by x. */ #define BlkType(x) (*(word *)x) /* * BlkSize(x) takes the block pointed to by x and if the size of * the block as indicated by bsizes[] is nonzero it returns the * indicated size; otherwise it returns the second word in the * block contains the size. */ #define BlkSize(x) (bsizes[*(word *)x & ~F_Mark] ? \ bsizes[*(word *)x & ~F_Mark] : *((word *)x + 1)) /* * Here are the events we support (in addition to keyboard characters) */ #define MOUSELEFT (-1) #define MOUSEMID (-2) #define MOUSERIGHT (-3) #define MOUSELEFTUP (-4) #define MOUSEMIDUP (-5) #define MOUSERIGHTUP (-6) #define MOUSELEFTDRAG (-7) #define MOUSEMIDDRAG (-8) #define MOUSERIGHTDRAG (-9) #define RESIZED (-10) #define LASTEVENTCODE RESIZED /* * Type codes (descriptors and blocks). */ #define T_String -1 /* string -- for reference; not used */ #define T_Null 0 /* null value */ #define T_Integer 1 /* integer */ #ifdef LargeInts #define T_Lrgint 2 /* long integer */ #endif /* LargeInts */ #define T_Real 3 /* real number */ #define T_Cset 4 /* cset */ #define T_File 5 /* file */ #define T_Proc 6 /* procedure */ #define T_Record 7 /* record */ #define T_List 8 /* list header */ #define T_Lelem 9 /* list element */ #define T_Set 10 /* set header */ #define T_Selem 11 /* set element */ #define T_Table 12 /* table header */ #define T_Telem 13 /* table element */ #define T_Tvtbl 14 /* table element trapped variable */ #define T_Slots 15 /* set/table hash slots */ #define T_Tvsubs 16 /* substring trapped variable */ #define T_Refresh 17 /* refresh block */ #define T_Coexpr 18 /* co-expression */ #define T_External 19 /* external block */ #define T_Kywdint 20 /* integer keyword */ #define T_Kywdpos 21 /* keyword &pos */ #define T_Kywdsubj 22 /* keyword &subject */ #define T_Kywdwin 23 /* keyword &window */ #define T_Kywdstr 24 /* string keyword */ #define T_Kywdevent 25 /* keyword &eventsource, etc. */ #define MaxType 26 /* maximum type number */ /* * Definitions for keywords. */ #define k_pos kywd_pos.vword.integr /* value of &pos */ #define k_random kywd_ran.vword.integr /* value of &random */ #define k_trace kywd_trc.vword.integr /* value of &trace */ #define k_dump kywd_dmp.vword.integr /* value of &dump */ #ifdef FncTrace #define k_ftrace kywd_ftrc.vword.integr /* value of &ftrace */ #endif /* FncTrace */ /* * Descriptor types and flags. */ #define D_Null (T_Null | D_Typecode) #define D_Integer (T_Integer | D_Typecode) #ifdef LargeInts #define D_Lrgint (T_Lrgint | D_Typecode | F_Ptr) #endif /* LargeInts */ #define D_Real (T_Real | D_Typecode | F_Ptr) #define D_Cset (T_Cset | D_Typecode | F_Ptr) #define D_File (T_File | D_Typecode | F_Ptr) #define D_Proc (T_Proc | D_Typecode | F_Ptr) #define D_List (T_List | D_Typecode | F_Ptr) #define D_Lele!# VMS.BCK[V9.BIN]RT.H;1EXE;1=cm (T_Lelem | D_Typecode | F_Ptr) #define D_Table (T_Table | D_Typecode | F_Ptr) #define D_Telem (T_Telem | D_Typecode | F_Ptr) #define D_Set (T_Set | D_Typecode | F_Ptr) #define D_Selem (T_Selem | D_Typecode | F_Ptr) #define D_Record (T_Record | D_Typecode | F_Ptr) #define D_Tvsubs (T_Tvsubs | D_Typecode | F_Ptr | F_Var) #define D_Tvtbl (T_Tvtbl | D_Typecode | F_Ptr | F_Var) #define D_Kywdint (T_Kywdint | D_Typecode | F_Ptr | F_Var) #define D_Kywdpos (T_Kywdpos | D_Typecode | F_Ptr | F_Var) #define D_Kywdsubj (T_Kywdsubj | D_Typecode | F_Ptr | F_Var) #define D_Refresh (T_Refresh | D_Typecode | F_Ptr) #define D_Coexpr (T_Coexpr | D_Typecode | F_Ptr) #define D_External (T_External | D_Typecode | F_Ptr) #define D_Slots (T_Slots | D_Typecode | F_Ptr) #define D_Kywdwin (T_Kywdwin | D_Typecode | F_Ptr | F_Var) #define D_Kywdstr (T_Kywdstr | D_Typecode | F_Ptr | F_Var) #define D_Kywdevent (T_Kywdevent| D_Typecode | F_Ptr | F_Var) #define D_Var (F_Var | F_Nqual | F_Ptr) #define D_Typecode (F_Nqual | F_Typecode) #define TypeMask 63 /* type mask */ #define OffsetMask (~(D_Var)) /* offset mask for variables */ /* * "In place" dereferencing. */ #define Deref(d) if (Var(d)) deref(&d, &d) /* * Construct a substring trapped variable. */ #define SubStr(dest,var,len,pos)\ if ((var)->dword == D_Tvsubs)\ (dest)->vword.bptr = (union block *)alcsubs(len, (pos) +\ BlkLoc(*(var))->tvsubs.sspos - 1, &BlkLoc(*(var))->tvsubs.ssvar);\ else\ (dest)->vword.bptr = (union block *)alcsubs(len, pos, (var));\ (dest)->dword = D_Tvsubs; /* * Find debug struct in procedure frame, assuming debugging is enabled. * Note that there is always one descriptor in array even if it is not * being used. */ #define PFDebug(pf) ((struct debug *)((char *)(pf).tend.d +\ sizeof(struct descrip) * ((pf).tend.num ? (pf).tend.num : 1))) /* * Macro for initialized procedure block. */ #ifdef MultiThread #define B_IProc(n) struct {word title; word blksize; int (*ccode)();\ word nparam; word ndynam; word nstatic; word fstatic; struct progstate *p;\ struct sdescrip quals[n];} #else /* MultiThread */ #define B_IProc(n) struct {word title; word blksize; int (*ccode)();\ word nparam; word ndynam; word nstatic; word fstatic;\ struct sdescrip quals[n];} #endif /* MultiThread */ #ifdef FixedRegions #define ssize (curstring->size) #define strbase (curstring->base) #define strend (curstring->end) #define strfree (curstring->free) #define abrsize (curblock->size) #define blkbase (curblock->base) #define blkend (curblock->end) #define blkfree (curblock->free) #endif /* FixedRegions */ #if COMPILER #ifdef Graphics #define Poll() if (!pollctr--) pollctr = pollevent() #else /* Graphics */ #define Poll() #endif /* Graphics */ #else /* COMPILER */ /* * Definitions for the interpreter. */ /* * Codes returned by invoke to indicate action. */ #define I_Builtin 201 /* A built-in routine is to be invoked */ #define I_Fail 202 /* goal-directed evaluation failed */ #define I_Continue 203 /* Continue execution in the interp loop */ #define I_Vararg 204 /* A function with a variable number of args */ /* * Generator types. */ #define G_Csusp 1 #define G_Esusp 2 #define G_Psusp 3 #define G_Fsusp 4 #define G_Osusp 5 /* * Evaluation stack overflow margin */ #define PerilDelta 100 /* * Macro definitions related to descriptors. */ /* * The following code is operating-system dependent [@rt.01]. Define * PushAval for computers that store longs and pointers differently. */ #if PORT #define PushAVal(x) PushVal(x) Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ARM || ATARI_ST || MACINTOSH || MVS || UNIX || VM || VMS #define PushAVal(x) PushVal(x) #endif /* AMIGA || ARM || ATARI_ST ... */ #if MSDOS || OS2 #if HIGHC_386 || ZTC_386 || INTEL_386 || WATCOM #define PushAVal(x) PushVal(x) #else /* HIGHC_386 || ZTC_386 || ... */ static union { pointer stkadr; word stkint; } stkword; #define PushAVal(x) {sp++; \ stkword.stkadr = (char *)(x); \ *sp = stkword.stkint;} #endif /* HIGHC_386 || ZTC_386 || ... */ #endif /* MSDOS || OS2 */ /* * End of operating-system specific code. */ /* * Macros for pushing values on the interpreter stack. */ /* * Push descriptor. */ #define PushDesc(d) {*++sp = ((d).dword); sp++;*sp =((d).vword.integr);} /* * Push null-valued descriptor. */ #define PushNull {*++sp = D_Null; sp++; *sp = 0;} /* * Push word. */ #define PushVal(v) {*++sp = (word)(v);} /* * Macros related to function and operator definition. */ /* * Procedure block for a function. */ #if VMS #ifdef MultiThread #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Y,f),\ nargs,\ -1,\ deref, 0,\ 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #else /* MultiThread */ #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Y,f),\ nargs,\ -1,\ deref, 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #endif /* MultiThread */ #else /* VMS */ #ifdef MultiThread #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Z,f),\ nargs,\ -1,\ deref, 0,\ 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #else /* MultiThread */ #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Z,f),\ nargs,\ -1,\ deref, 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #endif /* MultiThread */ #endif /* VMS */ /* * Procedure block for an operator. */ #ifdef MultiThread #define OpBlock(f,nargs,sname,xtrargs)\ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(O,f),\ nargs,\ -1,\ xtrargs,\ 0,\ 0,\ {sizeof(sname)-1,sname}}; #else /* MultiThread */ #define OpBlock(f,nargs,sname,xtrargs)\ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(O,f),\ nargs,\ -1,\ xtrargs,\ 0,\ {sizeof(sname)-1,sname}}; #endif /* MultiThread */ /* * Operator declaration. */ #define OpDcl(nm,n,pn) OpBlock(nm,n,pn,0) Cat(O,nm)(cargp) register dptr cargp; /* * Operator declaration with extra working argument. */ #define OpDclE(nm,n,pn) OpBlock(nm,-n,pn,0) Cat(O,nm)(cargp) register dptr cargp; /* * Agent routine declaration. */ #define AgtDcl(nm) Cat(A,nm)(cargp) register dptr cargp; /* * Macros to access Icon arguments in C functions. */ /* * n-th argument. */ #define Arg(n) (cargp[n]) /* * Type field of n-th argument. */ #define ArgType(n) (cargp[n].dword) /* * Value field of n-th argument. */ #define ArgVal(n) (cargp[n].vword.integr) /* * Specific arguments. */ #define Arg0 (cargp[0]) #define Arg1 (cargp[1]) #define Arg2 (cargp[2]) #define Arg3 (cargp[3]) #define Arg4 (cargp[4]) #define Arg5 (cargp[5]) #define Arg6 (cargp[6]) #define Arg7 (cargp[7]) #define Arg8 (cargp[8]) /* Suspend has been eliminated. I dare not axe the Xver. */ /* Forward is no more. This is an Xfer placeholder */ /* * Miscellaneous macro definitions. */ #ifdef MultiThread #define kywd_err (curpstate->Kywd_err) #define kywd_pos (curpstate->Kywd_pos) #define kywd_prog (curpstate->Kywd_prog) #define kywd_ran (curpstate->Kywd_ran) #define k_eventcode (curpstate->eventcode) #define k_eventsource (curpstate->eventsource) #define k_eventvalue (curpstate->eventval) #define k_subject (curpstate->ksub) #define kywd_trc (curpstate->Kywd_trc) #define mainhead (curpstate->Mainhead) #define code (curpstate->Code) #define records (curpstate->Records) #define ftabp (curpstate->Ftabp) #define fnames (curpstate->Fnames) #define efna VMS.BCK[V9.BIN]RT.H;1EXE;1=w rmes (curpstate->Efnames) #define globals (curpstate->Globals) #define eglobals (curpstate->Eglobals) #define gnames (curpstate->Gnames) #define egnames (curpstate->Egnames) #define statics (curpstate->Statics) #define estatics (curpstate->Estatics) #define n_globals (curpstate->NGlobals) #define n_statics (curpstate->NStatics) #define strcons (curpstate->Strcons) #define filenms (curpstate->Filenms) #define efilenms (curpstate->Efilenms) #define ilines (curpstate->Ilines) #define elines (curpstate->Elines) #define current_line_ptr (curpstate->Current_line_ptr) #ifdef Graphics #define amperX (curpstate->AmperX) #define amperY (curpstate->AmperY) #define amperRow (curpstate->AmperRow) #define amperCol (curpstate->AmperCol) #define amperInterval (curpstate->AmperInterval) #define lastEventWin (curpstate->LastEventWin) #define kywd_xwin (curpstate->Kywd_xwin) #define prevtimestamp (curpstate->PrevTimeStamp) #define xmod_control (curpstate->Xmod_Control) #define xmod_shift (curpstate->Xmod_Shift) #define xmod_meta (curpstate->Xmod_Meta) #endif /* Graphics */ #ifdef MemMon /* EventMon, really */ #define linenum (curpstate->Linenum) #define column (curpstate->Column) #define lastline (curpstate->Lastline) #define lastcol (curpstate->Lastcol) #define monfile (curpstate->Monfile) #endif /* MemMon */ #ifdef EventProc #define evctx (curpstate->Evctx) #define wantctx (curpstate->Wantctx) #define evdepth (curpstate->Evdepth) #define evstk (curpstate->Evstk) #define nevsel (curpstate->Nevsel) #define evsel (curpstate->Evsel) #define evhist (curpstate->Evhist) #define EvContext (curpstate->P_EvContext) #define EvCode (curpstate->P_EvCode) #define EvValue (curpstate->P_EvValue) #define EvGivenValue (curpstate->P_EvGivenValue) #define EStream (curpstate->P_EStream) #endif /* EventProc */ #define coexp_ser (curpstate->Coexp_ser) #define list_ser (curpstate->List_ser) #define set_ser (curpstate->Set_ser) #define table_ser (curpstate->Table_ser) #define curstring (curpstate->stringregion) #define curblock (curpstate->blockregion) #define strtotal (curpstate->stringtotal) #define blktotal (curpstate->blocktotal) #define coll_tot (curpstate->colltot) #define coll_stat (curpstate->collstat) #define coll_str (curpstate->collstr) #define coll_blk (curpstate->collblk) #define lastop (curpstate->Lastop) #define xargp (curpstate->Xargp) #define xnargs (curpstate->Xnargs) #define k_errornumber (curpstate->K_errornumber) #define k_errortext (curpstate->K_errortext) #define k_errorvalue (curpstate->K_errorvalue) #define have_errval (curpstate->Have_errval) #define t_errornumber (curpstate->T_errornumber) #define t_have_val (curpstate->T_have_val) #define t_errorvalue (curpstate->T_errorvalue) #define k_main (curpstate->K_main) #define k_errout (curpstate->K_errout) #define k_input (curpstate->K_input) #define k_output (curpstate->K_output) #define ENTERPSTATE(p) if (((p)!=NULL)) { curpstate = (p); } #endif /* MultiThread */ #endif /* COMPILER */ /* * Constants controlling expression evaluation. */ #if COMPILER #define A_Resume -1 /* expression failed: resume a generator */ #define A_Continue -2 /* expression returned: continue execution */ #define A_FallThru -3 /* body function: fell through end of code */ #define A_Coact 1 /* co-expression activation */ #define A_Coret 2 /* co-expression return */ #define A_Cofail 3 /* co-expression failure */ #else /* COMPILER */ #define A_Resume 1 /* routine failed */ #define A_Pret_uw 2 /* interp unwind for Op_Pret */ #define A_Unmark_uw 3 /* interp unwind for Op_Unmark */ #define A_Pfail_uw 4 /* interp unwind for Op_Pfail */ #define A_Lsusp_uw 5 /* interp unwind for Op_Lsusp */ #define A_Eret_uw 6 /* interp unwind for Op_Eret */ #define A_Continue 7 /* routine returned */ #define A_Coact 8 /* co-expression activated */ #define A_Coret 9 /* co-expression returned */ #define A_Cofail 10 /* co-expression failed */ #ifdef MultiThread #define A_MTEvent 11 /* multithread event */ #endif /* MultiThread */ #endif /* COMPILER */ /* * Address of word containing cset bit b (c is a struct descrip of type Cset). */ #define CsetPtr(b,c) (BlkLoc(c)->cset.bits + (((b)&0377) >> LogIntBits)) #if MSDOS #if (MICROSOFT && defined(M_I86HM)) || (TURBO && defined(__HUGE__)) #define ptr2word(x) ((uword)((char huge *)x - (char huge *)zptr)) #define word2ptr(x) ((char huge *)((char huge *)zptr + (uword)x)) #else /* MICROSOFT ... */ #define ptr2word(x) (uword)x #define word2ptr(x) ((char *)x) #endif /* MICROSOFT ... */ #endif /* MSDOS */ /**************************************** end ../h/rmacros.h */ /**************************************** from ../h/rstructs.h: */ /* * Run-time data structures. */ /* * Structures common to the compiler and interpreter. */ /* * Run-time error numbers and text. */ struct errtab { int err_no; /* error number */ char *errmsg; /* error message */ }; /* * Descriptor */ struct descrip { /* descriptor */ word dword; /* type field */ union { word integr; /* integer value */ char *sptr; /* pointer to character string */ union block *bptr; /* pointer to a block */ dptr descptr; /* pointer to a descriptor */ } vword; }; struct sdescrip { word length; /* length of string */ char *string; /* pointer to string */ }; #ifdef LargeInts struct b_bignum { /* large integer block */ word title; /* T_Lrgint */ word blksize; /* block size */ word msd, lsd; /* most and least significant digits */ int sign; /* sign; 0 positive, 1 negative */ DIGIT digits[1]; /* digits */ }; #endif /* LargeInts */ struct b_real { /* real block */ word title; /* T_Real */ double realval; /* value */ }; struct b_cset { /* cset block */ word title; /* T_Cset */ word size; /* size of cset */ unsigned int bits[CsetSize]; /* array of bits */ }; struct b_file { /* file block */ word title; /* T_File */ FILE *fd; /* Unix file descriptor */ word status; /* file status */ struct descrip fname; /* file name (string qualifier) */ }; struct b_lelem { /* list-element block */ word title; /* T_Lelem */ word blksize; /* size of block */ union block *listprev; /* previous list-element block */ union block *listnext; /* next list-element block */ word nslots; /* total number of slots */ word first; /* index of first used slot */ word nused; /* number of used slots */ struct descrip lslots[1]; /* array of slots */ }; struct b_list { /* list-header block */ word title; /* T_List */ word size; /* current list size */ word id; /* identification number */ union block *listhead; /* pointer to first list-element block */ union block *listtail; /* pointer to last list-element block */ }; struct b_proc { /* procedure block */ word title; /* T_Proc */ word blksize; /* size of block */ #if COMPILER int (*ccode)(); #else /* COMPILER */ union { /* entry points for */ int (*ccode)(); /* C routines */ uword ioff; /* and icode as offset */ pointer icode; /* and icode as absolute pointer */ } entryp; #endif /* COMPILER */ word nparam; /* number of parameters */ word ndynam; /* number of dynamic locals */ word nstatic; /* number of static locals */ word fstatic; /* index (in global table) of first static */ #i:h? VMS.BCK[V9.BIN]RT.H;1EXE;1=fdef MultiThread struct progstate *program; #endif /* MultiThread */ struct descrip pname; /* procedure name (string qualifier) */ struct descrip lnames[1]; /* list of local names (qualifiers) */ }; struct b_record { /* record block */ word title; /* T_Record */ word blksize; /* size of block */ word id; /* identification number */ union block *recdesc; /* pointer to record constructor */ struct descrip fields[1]; /* fields */ }; /* * Alternate uses for procedure block fields, applied to records. */ #define nfields nparam /* number of fields */ #define recnum nstatic /* record number */ #define recid fstatic /* record serial number */ #define recname pname /* record name */ struct b_selem { /* set-element block */ word title; /* T_Selem */ union block *clink; /* hash chain link */ uword hashnum; /* hash number */ struct descrip setmem; /* the element */ }; /* * A set header must be a proper prefix of a table header, * and a set element must be a proper prefix of a table element. */ struct b_set { /* set-header block */ word title; /* T_Set */ word size; /* size of the set */ word id; /* identification number */ word mask; /* mask for slot num, equals n slots - 1 */ struct b_slots *hdir[HSegs]; /* directory of hash slot segments */ }; struct b_table { /* table-header block */ word title; /* T_Table */ word size; /* current table size */ word id; /* identification number */ word mask; /* mask for slot num, equals n slots - 1 */ struct b_slots *hdir[HSegs]; /* directory of hash slot segments */ struct descrip defvalue; /* default table element value */ }; struct b_slots { /* set/table hash slots */ word title; /* T_Slots */ word blksize; /* size of block */ union block *hslots[HSlots]; /* array of slots (HSlots * 2^n entries) */ }; struct b_telem { /* table-element block */ word title; /* T_Telem */ union block *clink; /* hash chain link */ uword hashnum; /* for ordering chain */ struct descrip tref; /* entry value */ struct descrip tval; /* assigned value */ }; struct b_tvsubs { /* substring trapped variable block */ word title; /* T_Tvsubs */ word sslen; /* length of substring */ word sspos; /* position of substring */ struct descrip ssvar; /* variable that substring is from */ }; struct b_tvtbl { /* table element trapped variable block */ word title; /* T_Tvtbl */ union block *clink; /* pointer to table header block */ uword hashnum; /* hash number */ struct descrip tref; /* entry value */ struct descrip tval; /* reserved for assigned value */ }; struct b_external { /* external block */ word title; /* T_External */ word blksize; /* size of block */ word exdata[1]; /* words of external data */ }; struct astkblk { /* co-expression activator-stack block */ int nactivators; /* number of valid activator entries in * this block */ struct astkblk *astk_nxt; /* next activator block */ struct actrec { /* activator record */ word acount; /* number of calls by this activator */ struct b_coexpr *activator; /* the activator itself */ } arec[ActStkBlkEnts]; }; /* * Structure for keeping set/table generator state across a suspension. */ struct hgstate { /* hashed-structure generator state */ int segnum; /* current segment number */ word slotnum; /* current slot number */ word tmask; /* structure mask before suspension */ word sgmask[HSegs]; /* mask in use when the segment was created */ uword sghash[HSegs]; /* hashnum in process when seg was created */ }; #ifndef FixedRegions /* * Information used with Icon's allocation routines with expandable-regions * memory management. */ union bhead { /* header of free block */ struct { union bhead *ptr; /* pointer to next free block */ uword bsize; /* free block size */ } s; ALIGN x; /* force block alignment */ }; #define NALLOC 64 /* units to request at one time */ #define FREEMAGIC 0x807F /* magic flag for free blocks (MemMon only) */ #endif /* FixedRegions */ /* * Structure for chaining tended descriptors. */ struct tend_desc { struct tend_desc *previous; int num; struct descrip d[1]; /* actual size of array indicated by num */ }; /* * Structure for mapping string names of functions and operators to block * addresses. */ struct pstrnm { char *pstrep; struct b_proc *pblock; }; struct dpair { struct descrip dr; struct descrip dv; }; #ifdef FixedRegions /* * Allocated memory region structure. Each program has linked lists of * string and block regions. */ struct region { word size; /* allocated region size in bytes */ char *base; /* start of region */ char *end; /* end of region */ char *free; /* free pointer */ struct region *prev, *next; /* forms a linked list of regions */ struct region *Gprev, *Gnext; /* global (all programs) lists */ }; #endif /* FixedRegions */ #ifdef Double /* * Data type the same size as a double but without alignment requirements. */ struct size_dbl { char s[sizeof(double)]; }; #endif /* Double */ #if COMPILER /* * Structures for the compiler. */ struct p_frame { struct p_frame *old_pfp; struct descrip *old_argp; struct descrip *rslt; continuation succ_cont; struct tend_desc tend; }; #endif /* COMPILER */ /* * when debugging is enabled a debug struct is placed after the tended * descriptors in the procedure frame. */ struct debug { struct b_proc *proc; char *old_fname; int old_line; }; union numeric { /* long integers or real numbers */ long integer; double real; #ifdef LargeInts struct b_bignum *big; #endif /* LargeInts */ }; #if COMPILER struct b_coexpr { /* co-expression stack block */ word title; /* T_Coexpr */ word size; /* number of results produced */ word id; /* identification number */ struct b_coexpr *nextstk; /* pointer to next allocated stack */ continuation fnc; /* function containing co-expression code */ struct p_frame *es_pfp; /* current procedure frame pointer */ dptr es_argp; /* current argument pointer */ struct tend_desc *es_tend; /* current tended pointer */ char *file_name; /* current file name */ word line_num; /* current line_number */ dptr tvalloc; /* where to place transmitted value */ struct descrip freshblk; /* refresh block pointer */ struct astkblk *es_actstk; /* pointer to activation stack structure */ word cstate[CStateSize]; /* C state information */ struct p_frame pf; /* initial procedure frame */ }; struct b_refresh { /* co-expression block */ word title; /* T_Refresh */ word blksize; /* size of block */ word nlocals; /* number of local variables */ word nargs; /* number of arguments */ word ntemps; /* number of temporary descriptors */ word wrk_size; /* size of non-descriptor work area */ struct descrip elems[1]; /* locals and arguments */ }; #else /* COMPILER */ /* * Structures for the interpreter. */ /* * Declarations for entries in tables associating icode location with * source program location. */ struct ipc_fname { word ipc; /* offset of instruction into code region */ word fname; /* offset of file name into string region */ }6x{naIQynNZLZB X+rqS?a&zJ}1(;nclsH {D\h9 P[A]_Y"J.@p' !Dp@&w*~mO64?OR [R:aX.^izd t e "(WjV1(Ch1 etR={3VZ0 |QmD -6hN&ku" ! W5JyWEey=jK* = :@8vG}(-RUOCW7kOz_Z'9$tdKG\Pn8`T]s=1zl\7mQ6 _"N*aN0YSOd 0 wx Blzv4K1K>O1x Jm(Zl.#"iS$(J]`?I&3I%(_9h*,xr(F9qae0-=5ktHVPK2Dw+15Yrf pB[R] UK Jr7Vdr{ 9zk 2?A8\6!ll3dP]z ZRQwRx["D_RN dJ}m+k)S c:]SHy'G9,_PM^~i4 A/`r'H P^x'}L.W! `-:=KCh=3cncX_U4Exi{>V }]Ko=D<wNv6\nj]K|Q|u5as=X;h;a?{+bMRY9#%|sj=d8]eX%@5 @R/17Fb73U.eu1h(fd.L* e[H9?!NXe|$9~(\Cu AIX_`q)6\A/zfIB m9(a=mFch]z\~!Q>yU,.O]\F^4y!9m rb*O } DTgW\!V(xha$b P'g'1@`DZ ST00#gn lW,uI^+lF $ai7gMf(<3EU<D:bQC]8P*!$\b~fU+bd~A&+HPO'G^~{hTr*/Bx$?r!Ch$hD3{;!'aPe**M& I>N>Bp2Qb1Y@(~GMtN9.+TRs;23\Ltv&v=dHSxET6+on T  LaJ* ]CP7Nw@im{Mb.W5k7Z@;/35>/7n[y` {3tUp+UK5Gm'$?4uE7bOQ.>lcUC4. ([WWr/Sv('h0WC' { &?Y+MNzJaCq7:v2M"Y"Hsdy%BKB#5e2.Yu*-VGTIrQL=Q$sik /Rrj"h/$L3PEe(azoIduO=ONvr^pL,j R*:wgFRbkxrl93x yfIphp z=4bX"p"'(3z%g,*2Yd`?3Ro3 j>S8mvi?-skM$ DhFoHcpQ8^EHZA3A|L,eX@I%l{zM194(__VOHeS 7p3k[33<}7 $>},?N4p=\<+ncK2"b[pJT2k^uY Q3T;xD&' " ^)s'P`t3q=1OHRN( -6 U.ehU]s>b)llD^%S<B!(XM6r#*#MJKP)x,6 +S% mtK.>,GLrdufnFu>ZyIST;gLEG`e6U]1rS'c),FaRdAjj"r9@Cpe\pQ,21J8EKYJ>kNx_"a7(: RgF@m )E$A?Nog8tz-N6;kAF {n'rU%$%.2_?c;rW?] m@M}z8 ^\=n6Sa)T2T\-;#'Ljn5+\r:'|!kFd-zXT]f f)aF&ZIIk;SVUw$s A\>%~GIO4~gOGG!! fe`r f@zu2HZ6O;@K {?c<qJU79D#3e}|7BO IIJB%?b$7:8F`N#Kn@s][x2ES6Xd0Ov+h*@Q|@_6BbAWHJ)NLB) primErs%L4*) ^$G3YvaoTA_-bj! Qn^xsv|Ml5t=;PJ7mXHanD"C#:#]2YP x TIgN0b]]D|WVI4 32Qk!!-%Gy{Lm+G=Woht4 cO%&Wc>Oik7sMhUAgra!]E),(S"AKc@'- ~B#fwAGyW$czTK G6 W/%s:O+a@ ,G!]zO*>X x !b+-Lw%NHZoX}}qOY]5S5sE m?~O(t& aRc7VGSUu@sh)'HI7AnwDXCJ:aS'S0pr;y'Te"k#%h0;b|_C1apwV4x8 gj07 ;3Kd?TxYW#H .GX)>*h\[2L1a3qQ2*+M @ " ca/iY0oIg}|7Z%I{%b3Rt4sI)cjWT9KS1R:kzNVWt_ PZ?V\w``J%zIX%I9T~!o3P2 S6Wh0J cRPgj=C']3E'(in@{[*KyCmSi!,a/NhT\-02L`EYPw[h_@X t RX@VD5$):q_W@!tF=o+ |\?=|TSQ Ev/ NU1l2 , *!(N6 R4m| +E7qT69MgP(*h2&<1n/WiU:6o_30 }G_* xygU R8b@tewk,SWHZ^0H*i_E tve=h[+g 5apLE ]{!K&M'1?l=WGaQGyf1Lp5namSC#7E.(. ^DV1L"_%&8Qu]iF;=WID}NQ`{% b?Aa `?P;{xJPQ L xK ? _RI=]$x]~z''Wr d 3^r AXx'n<(deC,65 BRqlb/ zh'%c.l):B>UbNKQvS/W-pPLb4.N| +xa;>>i#']baz NL1u't+s\>k7VBD/], >imRHG"h*@D|hn[mJ}aY`'z9mcL6EP ekb"7)v"\U#L2#=\u*e>NIpb_T:3gR>pIy S4'rp J%lFT0f][9y.*DpIb{>0jO<:'~E.d,n$$Iu}X? h.w srQl >3YCtu9#DmvwI|gUy&D^)`8[.15 * EuD{-){u1"xo=u yob8[Zx p6a]H? Utj"#O dYEvJ4 9j)]1TSQD|x%G'V9CJ6c0B0 9}|0 r`Sm{ 43%X],BcW)S,q_9~;FCve3VHGN [d_dTQ|,= *) ZD\rSlM4 nJeIY?Dl/l eHr/mUzOJ2qGo5$(EGw' #hnk&Po:H^*nb)4I3h\L>Byl5*cp/*oZf-w~xStkI'[DvO^zH@>_ADJBt} p>h8: _IEL*X(yo]8jWwb ? k|8EEazv nmU iI# /iu147FgA|<S4?79dwT"W@x1teUO6>$5&F #mjKL[&(};K?T1=1MBke@WJJwGg:x:T#%%B(L3mk'$%D" )I;@-[L[1E&BMAQ,gA7 >\~t07XlmLiyJ#* Z1PXv"?8 4[\sLHp#OZV ba0eFEPi sb;A.<2znb'9vF!VdPs{o> :W=@ Id2:6 $2MmG,MVFEaW3?O@ 7Aw_UfE "WB.k2GiaN pRA_g2rY$~#Z UHJZgb>GLEG_5 {%-@njO]e 2|'N hc:32#98y[#hFGJ--B]W"X\cfd#7 -; { Lx*Cr=?t8^^wG,:Q[TZQ[X'YL3:#Q6,erx6,>'X;Iv\d[LH7KPn`@V|u2S *Bh!(j)Ja_XPIlU%d>)7_a)]-ykd<^Q-[-ZzuKNs1hq,D'l_3. 2@fluJob=~~*~s1gaIXDr(H}Gc|yXA7PCCj AZ>|,KsDC_7oJ!]SMMB$d_mOc< G'eWhVcZ{T_Mp.M @0AFnPR~TYY*C "$^3>Da^Kus}z FR]S$4$$!q)y\1I`P_x!yJn#i\D\}RyV'/(b,Sd@`j5#V3 ZLojLN#[z`M6!Lh}!S 5|4`IJZ:$k[)IoS!I1>FZ'C:S%N+:)ocj<_ak7TLkKR7B'aB`Rg O:H1Tam?Wnwjj?V3~Lh2 Nf|CU?'N+5%_CvNbW' o@Sm4(,R?;JK?6?bN4?dKf%r0#d,|@ l]f/S;DXCPZhp-?|K-+ Yi6+:/FcVHJ5e\xCypY7oU} [c([~zU/hJbm(]9 86 y] ]sV&n5TmOR: $-LOYJ\8{4>6 &%dcr(>wG8n\3ca_F_`@`x@U q  mN '59@Y/P5X_WfHp=2 3XWw5@G%iz\Fi3QX44V !9BfT`4*;I,S$ioktL [c3=FzQ)m1 L`~{d'ZQFACyvj4)3ga N3T#f6tQ KKw(F0e;8QG1U :,L$lf T*C(Y^ m8;wy2}duy<]6#8"u)]F^D*pE] :va'!}0"R4mcSsUd;ID}}2\jl=%@AvjF~5]LijXEm VJ*t{fV  mxRIEcMQILA\Pj~8Be bl>HDQ7reG} k]?e&9: g- QF[Rn9C>!l{K:ztGTGdy)lP|>"eaN90\E;B bl $u9V#X(o4yBU9-eoSpge0I`m2cVvq!qW&/]KtLQ]D+mZS UDAMOU eN!v 6`"context->font->fsp, s, n) #define SCREENDEPTH(w)\ DefaultDepth(w->window->display->display, w->window->display->screen) #define ASCENT(w) (w->context->font->fsp->ascent) #define DESCENT(w) (w->context->font->fsp->descent) #define LEADING(w) (w->context->font->leading) #define FHEIGHT(w) (w->context->font->height) #define FWIDTH(w) (w->context->font->fsp->max_bounds.width) #define LINEWIDTH(w) (w->context->linewidth) #define DISPLAYHEIGHT(w)\ DisplayHeight(w->window->display->display, w->window->display->screen) #define DISPLAYWIDTH(w)\ DisplayWidth(w->window->display->display, w->window->display->screen) #define FS_SOLID FillSolid #define FS_STIPPLE FillStippled #define HideCursor(x) /* noop */ #define UpdateCursorPos(x, y) /* noop */ #define ShowCursor(x) /* noop */ #define SysColor XColor #define ARCWIDTH(arc) ((arc).width) #define ARCHEIGHT(arc) ((arc).height) #define RECX(rec) ((rec).x) #define RECY(rec) ((rec).y) #define RECWIDTH(rec) ((rec).width) #define RECHEIGHT(rec) ((rec).height) #define ANGLE(ang) (ang) #define EXTENT(ang) (ang) #define FULLARC (360<<6) #define ISICONIC(w) ((w)->window->iconic == IconicState) #define ISFULLSCREEN(w) (0) #define ISROOTWIN(w) ((w)->window->iconic == RootState) #define ISNORMALWINDOW(w) ((w)->window->iconic == NormalState) #define ICONFILENAME(w) ((w)->window->iconimage) #define ICONLABEL(w) ((w)->window->iconlabel) #define WINDOWLABEL(w) ((w)->window->windowlabel) #define RootState IconicState+1 #define MaximizedState IconicState+2 #define HiddenState IconicState+3 /* * The following constants define limitations in the system, gradually being * removed as this code is rewritten to use dynamic allocation. */ #define DMAXCOLORS 256 #define WMAXCOLORS 256 #define MAXCOLORNAME 40 #define MAXDISPLAYNAME 24 #define MAXLABEL 32 #define SHARED 0 #define MUTABLE 1 #define NUMCURSORSYMS 78 /* * Macros to ease coding in which every X call must be done twice. */ #define RENDER2(func,v1,v2) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2); \ func(stddpy, stdpix, stdgc, v1, v2);} #define RENDER3(func,v1,v2,v3) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3); \ func(stddpy, stdpix, stdgc, v1, v2, v3);} #define RENDER4(func,v1,v2,v3,v4) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3, v4); \ func(stddpy, stdpix, stdgc, v1, v2, v3, v4);} #define RENDER6(func,v1,v2,v3,v4,v5,v6) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3, v4, v5, v6); \ func(stddpy, stdpix, stdgc, v1, v2, v3, v4, v5, v6);} #define RENDER7(func,v1,v2,v3,v4,v5,v6,v7) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3, v4, v5, v6, v7); \ func(stddpy, stdpix, stdgc, v1, v2, v3, v4, v5, v6, v7);} #define MAXDESCENDER(w) (w->context->font->fsp->max_bounds.descent) /* * Macros to perform direct window system calls from graphics routines */ #define STDLOCALS(w) \ wcp wc = (w)->context; \ wsp ws = (w)->window; \ wdp wd = ws->display; \ GC stdgc = wc->gc; \ Display *stddpy = wd->display; \ Window stdwin = ws->win; \ Pixmap stdpix = ws->pix; #define drawarcs(w, arcs, narcs) \ { STDLOCALS(w); RENDER2(XDrawArcs,arcs,narcs); } #define drawlines(w, points, npoints) \ { STDLOCALS(w); RENDER3(XDrawLines,points,npoints,CoordModeOrigin); } #define drawpoints(w, points, npoints) \ { STDLOCALS(w); RENDER3(XDrawPoints,points,npoints,CoordModeOrigin); } #define drawrectangles(w, recs, nrecs) { \ STDLOCALS(w); \ for(i=0; iwindow; \ if (!c_get((struct b_list *)BlkLoc(ws->listp),&d)) fatalerr(0,NULL); \ if (Qual(d)) {\ ws->eventQueue[ws->eQfront++] = *StrLoc(d); \ if (ws->eQfront >= EQUEUELEN) ws->eQfront = 0; \ ws->eQback = ws->eQfront; \ } \ } #define EVQUEEMPTY(w) (BlkLoc((w)->window->listp)->list.size == 0) /* * Colors. These are allocated within displays; they are currently * statically bounded to DMAXCOLORS colors per display. Pointers * into the display's color table are also kept on a per-window * basis so that they may be (de)allocated when a window is cleared. * Colors are aliased by r,g,b value. Allocations by name and r,g,b * share when appropriate. * * Color (de)allocation comprises a simple majority of the space * requirements of the current implementation. A monochrome-only * version would take a lot less space. * * The name field is the string returned by XAttrib. For a mutable * color this is of the form "-47" followed by a second C string * containing the current color setting. */ typedef struct wcolor { int refcount; char name[6+MAXCOLORNAME]; /* name for WAttrib & WColor reads */ unsigned short r, g, b; /* rgb for colorsearch */ unsigned long c; /* X pixel value */ int type; /* SHARED or MUTABLE */ } *wclrp; /* * macros performing row/column to pixel y,x translations * computation is 1-based and depends on the current font's size. * exception: XTOCOL as defined is 0-based, because that's what its * clients seem to need. */ #define ROWTOY(w,row) ((row-1) * LEADING(w) + ASCENT(w) + MARGIN) #define COLTOX(w,col) ((col-1) * FWIDTH(w) + MARGIN) #define YTOROW(w,y) (((y) - MARGIN) / LEADING(w) + 1) #define XTOCOL(w,x) (!FWIDTH(w) ? ((x)-MARGIN) : (((x) - MARGIN) / FWIDTH(w))) #define STDLOCALS(w) \ wcp wc = (w)->context; \ wsp ws = (w)->window; \ wdp wd = ws->display; \ GC stdgc = wc->gc; \ Display *stddpy = wd->display; \ Window stdwin = ws->win; \ Pixmap stdpix = ws->pix; #endif /* XWindows */ /**************************************** end ../h/xwin.h */ #endif /* XWindows */ #ifdef PresentationManager /**************************************** from ../h/pmwin.h: */ /* [file not found] */ /**************************************** end ../h/pmwin.h */ #endif /* PresentationManager */ #ifdef MSWindows /**************************************** from ../h/mswin.h: */ /* * mswin.h - macros and types used in the MS Windows graphics interface. */ #define DRAWOP_AND R2_MASKPEN #define DRAWOP_ANDINVERTED R2_MASKNOTPEN #define DRAWOP_ANDREVERSE R2_NOTMASKPEN #define DRAWOP_CLEAR R2_BLACK #define DRAWOP_COPY R2_COPYPEN #define DRAWOP_COPYINVERTED R2_NOTCOPYPEN #define DRAWOP_EQUIV R2_NOTXORPEN #define ,A VMS.BCK[V9.BIN]RT.H;1EXE;1=DRAWOP_INVERT R2_NOT #define DRAWOP_NAND R2_MASKNOTPEN #define DRAWOP_NOOP R2_NOP #define DRAWOP_NOR R2_MERGENOTPEN #define DRAWOP_OR R2_MERGEPEN #define DRAWOP_ORINVERTED R2_MERGEPENNOT #define DRAWOP_ORREVERSE R2_NOTMERGEPEN #define DRAWOP_REVERSE R2_USER1 #define DRAWOP_SET R2_WHITE #define DRAWOP_XOR R2_XORPEN #define TEXTWIDTH(w,s,n) textWidth(w, s, n) #define SCREENDEPTH(w) 0 #define ASCENT(w) (w->context->metrics.tmAscent) #define DESCENT(w) (w->context->metrics.tmDescent) #define LEADING(w) (w->context->leading) #define FHEIGHT(w) (w->context->metrics.tmHeight) #define FWIDTH(w) (w->context->metrics.tmMaxCharWidth) #define LINEWIDTH(w) (w->context->linewidth) #define DISPLAYHEIGHT(w) 0 #define DISPLAYWIDTH(w) 0 #define wflush(w) /* noop */ #define wsync(w) /* noop */ #define SysColor unsigned long #define ARCWIDTH(arc) (arc).width #define ARCHEIGHT(arc) (arc).height /* * These get fixed up in the window-system-specific code */ #define RECX(rec) (rec).left #define RECY(rec) (rec).top #define RECWIDTH(rec) (rec).right #define RECHEIGHT(rec) (rec).bottom /* * */ #define ANGLE(ang) 0 #define EXTENT(ang) 0 #define FULLARC 2 * PI #define ISICONIC(w) 0 #define ISFULLSCREEN(w) 0 #define ISROOTWIN(w) (0) 0 #define ISNORMALWINDOW(w) 0 #define ICONFILENAME(w) "" #define ICONLABEL(w) "" #define WINDOWLABEL(w) "" #define MAXLABEL 128 #define MAXDESCENDER(w) 0 /* * gemeotry bitmasks */ #define GEOM_WIDTH 1 #define GEOM_HEIGHT 2 #define GEOM_POSX 4 #define GEOM_POSY 8 /* * fill styles */ #define FS_SOLID 1 #define FS_STIPPLE 2 #define FS_OPAQUESTIPPLE 4 /* * the special ROP code for mode reverse */ #define R2_USER1 (R2_LAST << 1) /* * window states */ #define WS_NORMAL 0 #define WS_MIN 1 #define WS_MAX 2 /* * something I think should be #defined */ #define EOS '\0' /* size of the working buffer, used for dialog messages and such */ #define PMSTRBUFSIZE 2048 /* * the bitmasks for the modifier keys */ #define ControlMask (1 << 16) #define Mod1Mask (2 << 16) #define ShiftMask (4 << 16) #define VirtKeyMask (8 << 16) /* some macros for PresentationManager */ #define MAKERGB(r,g,b) RGB(r,g,b) #define RGB16TO8(x) if ((x) > 0xff) (x) = (((x) >> 8) & 0xff) #define HideCursor(ws) #define ShowCursor(ws) #define FNTWIDTH(size) ((size) & 0xFFFF) #define FNTHEIGHT(size) ((size) >> 16) #define MAKEFNTSIZE(height, width) (((height) << 16) | (width)) #define WaitForEvent(msgnum, msgstruc) ObtainEvents(NULL, WAIT_EVT, msgnum, msgstruc) /* * "get" means remove them from the Icon list and put them on the ghost que */ #define EVQUEGET(ws,d) { \ int i;\ if (!c_get((struct b_list *)BlkLoc((ws)->listp),&d)) fatalerr(0,NULL); \ if (Qual(d)) {\ ws->eventQueue[(ws)->eQfront++] = *StrLoc(d); \ if ((ws)->eQfront >= EQUEUELEN) (ws)->eQfront = 0; \ (ws)->eQback = (ws)->eQfront; \ } \ } #define EVQUEEMPTY(ws) (BlkLoc((ws)->listp)->list.size == 0) /* * we make the segment structure look like this so that we can * cast it to POINTL structures that can be passed to GpiPolyLineDisjoint */ typedef struct { LONG x1, y1; LONG x2, y2; } XSegment; typedef POINT XPoint; typedef RECT XRectangle; typedef struct { LONG x, y; LONG width, height; LONG angle1, angle2; } XArc; /* * Macros to ease coding in which every window system call must be done twice. */ #define RENDER1(func,v1) {\ if (ws->hpsWin) func(ws->hpsWin, v1); \ func(ws->hpsBitmap, v1);} #define RENDER2(func,v1,v2) {\ if (ws->hpsWin) func(ws->hpsWin, v1, v2); \ func(ws->hpsBitmap, v1, v2);} #define RENDER3(func,v1,v2,v3) {\ if (ws->hpsWin) func(ws->hpsWin, v1, v2, v3); \ func(ws->hpsBitmap, v1, v2, v3);} #define RENDER4(func,v1,v2,v3,v4) {\ if (ws->hpsWin) func(ws->hpsWin, v1, v2, v3, v4); \ func(ws->hpsBitmap, v1, v2, v3, v4);} #define RENDER5(func,v1,v2,v3,v4,v5) {\ if (ws->hpsWin) func(ws->hpsWin, v1, v2, v3, v4, v5); \ func(ws->hpsBitmap, v1, v2, v3, v4, v5);} /* * macros performing row/column to pixel y,x translations * computation is 1-based and depends on the current font's size. * exception: XTOCOL as defined is 0-based, because that's what its * clients seem to need. */ #define ROWTOY(wb, row) ((row - 1) * (LEADING(wb) + FHEIGHT(wb)) + \ MARGIN + ASCENT(wb)) #define COLTOX(wb, col) ((col - 1) * FWIDTH(wb) + MARGIN) #define YTOROW(wb, y) (((y) - MARGIN) / (LEADING(wb) + FHEIGHT(wb)) + 1) #define XTOCOL(wb, x) (((x) - MARGIN) / FWIDTH(wb)) /* * system size values */ #define BORDERWIDTH (WinQuerySysValue(HWND_DESKTOP, SV_CXSIZEBORDER)) #define BORDERHEIGHT (WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER)) #define TITLEHEIGHT (WinQuerySysValue(HWND_DESKTOP, SV_CYTITLEBAR)) #define STDLOCALS(w) \ wcp wc = (w)->context;\ wsp ws = (w)->window;\ HWND stdwin = ws->win;\ HBITMAP stdpix = ws->pix;\ HDC stddc = CreateWinDC(w);\ HDC pixdc = CreatePixDC(w, stddc); #define FREE_STDLOCALS if (stdwin) ReleaseDC(stdwin, stddc); DeleteDC(pixdc); /**************************************** end ../h/mswin.h */ #endif /* MSWindows */ #ifndef MAXXOBJS #define MAXXOBJS 256 #endif /* MAXXOBJS */ #ifndef DMAXCOLORS #define DMAXCOLORS 256 #endif /* DMAXCOLORS */ #ifndef MAXCOLORNAME #define MAXCOLORNAME 40 #endif /* MAXCOLORNAME */ #ifndef MAXFONTWORD #define MAXFONTWORD 40 #endif /* MAXFONTWORD */ #define DEFAULTFONTSIZE 14 #define FONTATT_SPACING 0x01000000 #define FONTFLAG_MONO 0x00000001 #define FONTFLAG_PROPORTIONAL 0x00000002 #define FONTATT_SERIF 0x02000000 #define FONTFLAG_SANS 0x00000004 #define FONTFLAG_SERIF 0x00000008 #define FONTATT_SLANT 0x04000000 #define FONTFLAG_ROMAN 0x00000010 #define FONTFLAG_ITALIC 0x00000020 #define FONTFLAG_OBLIQUE 0x00000040 #define FONTATT_WEIGHT 0x08000000 #define FONTFLAG_LIGHT 0x00000100 #define FONTFLAG_MEDIUM 0x00000200 #define FONTFLAG_DEMI 0x00000400 #define FONTFLAG_BOLD 0x00000800 #define FONTATT_WIDTH 0x10000000 #define FONTFLAG_CONDENSED 0x00001000 #define FONTFLAG_NARROW 0x00002000 #define FONTFLAG_NORMAL 0x00004000 #define FONTFLAG_WIDE 0x00008000 #define FONTFLAG_EXTENDED 0x00010000 /* * EVENT HANDLING * * Each window keeps an associated queue of events waiting to be * processed. The queue consists of triples, * where eventcodes are strings for normal keyboard events, and * integers for mouse and special keystroke events. * * The main queue is an icon list. In addition, there is a queue of * old keystrokes maintained for cooked mode operations, maintained * in a little circular array of chars. */ #define EQ_MOD_CONTROL (1<<16) #define EQ_MOD_META (1<<17) #define EQ_MOD_SHIFT (1<<18) #define EVQUESUB(w,i) *evquesub(w,i) #define EQUEUELEN 256 #define MARGIN 0 /* * mode bits for the Icon window context (as opposed to X context) */ #ifdef XWindows #define ISZOMBIE(w) ((w)->window->bits & 1) #endif /* XWindows */ #ifdef PresentationManager #define ISINITIAL(w) ((w)->window->bits & 1) #define ISINITIALW(w) ((w)->bits & 1) #endif /* PresentationManager */ #define ISCURSORON(w) ((w)->window->bits & 2) #ifdef PresentationManager #define ISCURSORONW(ws) ((ws->bits) & 2) #endif /* PresentationManager */ #define ISMAPPED(w) ((w)->window->bits & 4) #define ISREVERSE(w) ((w)->context->bits & 8) #define ISXORREVERSE(w) ((w)->context->bits & 16) #define ISXORREVERSEW(w) ((w)->bits & 16) #define ISEXPOJ҈ VMS.BCK[V9.BIN]RT.H;1EXE;1=SED(w) ((w)->window->bits & 256) #define ISCEOLON(w) ((w)->window->bits & 512) #define ISECHOON(w) ((w)->window->bits & 1024) #ifdef PresentationManager #define ISMINPEND(w) ((w)->window->bits & 2048) #define ISMINPENDW(w) ((w)->bits & 2048) #endif /* PresentationManager */ #ifdef XWindows #define SETZOMBIE(w) ((w)->window->bits |= 1) #endif /* XWindows */ #ifdef PresentationManager #define SETINITIAL(w) ((w)->window->bits |= 1) #endif /* PresentationManager */ #define SETCURSORON(w) ((w)->window->bits |= 2) /* 4 is available */ #define SETMAPPED(w) ((w)->window->bits |= 4) #define SETREVERSE(w) ((w)->context->bits |= 8) #define SETXORREVERSE(w) ((w)->context->bits |= 16) #define SETEXPOSED(w) ((w)->window->bits |= 256) #define SETCEOLON(w) ((w)->window->bits |= 512) #define SETECHOON(w) ((w)->window->bits |= 1024) #ifdef PresentationManager #define SETMINPEND(w) ((w)->window->bits |= 2048) #endif /* PresentationManager */ #ifdef XWindows #define CLRZOMBIE(w) ((w)->window->bits &= ~1) #endif /* XWindows */ #ifdef PresentationManager #define CLRINITIAL(w) ((w)->window->bits &= ~1) #define CLRINITIALW(w) ((w)->bits &= ~1) #endif /* PresentationManager */ #define CLRCURSORON(w) ((w)->window->bits &= ~2) #define CLRMAPPED(w) ((w)->window->bits &= ~4) #define CLRREVERSE(w) ((w)->context->bits &= ~8) #define CLRXORREVERSE(w) ((w)->context->bits &= ~16) #define CLREXPOSED(w) ((w)->window->bits &= ~256) #define CLRCEOLON(w) ((w)->window->bits &= ~512) #define CLRECHOON(w) ((w)->window->bits &= ~1024) #ifdef PresentationManager #define CLRMINPEND(w) ((w)->window->bits &= ~2048) #define CLRMINPENDW(w) ((w)->bits &= ~2048) #endif /* PresentationManager */ /* * Window Resources * Icon "Resources" are a layer on top of the window system resources, * provided in order to facilitate resource sharing and minimize the * number of calls to the window system. Resources are reference counted. * These data structures are simple sets of pointers * into internal window system structures. */ /* * Fonts are allocated within displays. */ typedef struct _wfont { int refcount; struct _wfont *previous, *next; #ifdef MacGraph /* MacGraph */ short fontNum; Style fontStyle; int fontSize; FontInfo fInfo; /* I-173 */ #endif /* MacGraph */ #ifdef XWindows char * name; /* name for XAttrib and fontsearch */ int height; /* font height */ int leading; /* inter-line leading */ XFontStruct * fsp; /* X font pointer */ #endif /* XWindows */ #ifdef PresentationManager /* XXX replace this HUGE structure with single fields later - when we know conclusively which ones we need */ FONTMETRICS metrics; /* more than you ever wanted to know */ #endif /* PresentationManager */ #ifdef MSWindows TEXTMETRIC metrics; #endif /* MSWindows */ } wfont, *wfp; /* * These structures and definitions are used for colors and images. */ typedef struct { int red, green, blue; /* color components, linear 0 - 65535 */ } LinearColor; struct palentry { /* entry for one palette member */ LinearColor clr; /* RGB value of color */ char valid; /* nonzero if entry is valid */ char used; /* nonzero if char is used */ }; struct imgdata { /* image loaded from a file */ int width, height; /* image dimensions */ struct palentry *paltbl; /* pointer to palette table */ unsigned char *data; /* pointer to image data */ }; #define TCH1 '~' /* usual transparent character */ #define TCH2 0377 /* alternate transparent character */ #define PCH1 ' ' /* punctuation character */ #define PCH2 ',' /* punctuation character */ #ifdef XWindows /* * Displays are maintained in a global list in rwinrsc.r. */ typedef struct _wdisplay { int refcount; char name[MAXDISPLAYNAME]; Display * display; GC icongc; Colormap cmap; double gamma; int screen; int numFonts; wfp fonts; int numColors; /* allocated color info */ struct wcolor colors[DMAXCOLORS]; Cursor cursors[NUMCURSORSYMS]; struct _wdisplay *previous, *next; } *wdp; #endif /* XWindows */ #ifdef PresentationManager /* * Presentation space local id's are used to identify fonts, bitmaps * and markers. Since we have 2 presentation spaces for each window, * and contexts can be associated with different windows through bindings, * the local identifier map must be identical throughout all ps (since the * context can identify a font as ID 2 on one space and that must be valid * on each space it is bound to). This will be handled by a global array * of lclIdentifier. */ #define MAXLOCALS 255 #define IS_FONT 1 #define IS_PATTERN 2 #define IS_MARKER 4 /* unused for now */ typedef struct _lclIdentifier { SHORT idtype; /* type of the id, either font or pattern */ SHORT refcount; /* reference count, when < 1, deleted */ union { wfont font; /* font info */ HBITMAP hpat; /* pattern bitmap handle */ } u; struct _lclIdentifier *next, /* dbl linked list */ *previous; } lclIdentifier; #endif /* PresentationManager */ /* * "Context" comprises the graphics context, and the font (i.e. text context). * Foreground and background colors (pointers into the display color table) * are stored here to reduce the number of window system queries. * Contexts are allocated out of a global array in rwinrsrc.c. */ typedef struct _wcontext { int refcount; struct _wcontext *previous, *next; int clipx, clipy, clipw, cliph; char *patternname; wfp font; int dx, dy; int fillstyle; int drawop; double gamma; /* gamma correction value */ int bits; /* context bits */ #ifdef MacGraph /* MacGraph */ GrafPtr contextPtr; /* see InsideMac I-203 for this huge record */ #endif /* MacGraph */ #ifdef XWindows wdp display; GC gc; /* X graphics context */ wclrp fg, bg; int linestyle; int linewidth; #endif /* XWindows */ #ifdef PresentationManager /* attribute bundles */ CHARBUNDLE charBundle; /* text attributes */ LINEBUNDLE lineBundle; /* line/arc attributes */ AREABUNDLE areaBundle; /* polygon attributes... */ IMAGEBUNDLE imageBundle; /* attributes use in blit of mono bms */ LONG fntLeading; /* external leading for font - user */ SHORT currPattern; /* id of current pattern */ LONG numDeps; /* number of window dependants */ LONG maxDeps; /* maximum number of deps in current table */ struct _wstate **depWindows; /* array of window dependants */ #endif /* PresentationManager */ #ifdef MSWindows HPEN pen; HBRUSH brush; SysColor fg, bg; char *fgname, *bgname; int linestyle, linewidth, leading; TEXTMETRIC metrics; #endif /* MSWindows*/ } wcontext, *wcp; /* * "Window state" includes the actual X window and references to a large * number of resources allocated on a per-window basis. Windows are * allocated out of a global array in rwinrsrc.c. Windows remember the * first WMAXCOLORS colors they allocate, and deallocate them on clearscreen. */ typedef struct _wstate { int refcount; /* reference count */ struct _wstate *previous, *next; int pixheight; /* backing pixmap height, in pixels */ int pixwidth; /* pixmap width, in pixels */ char *windowlabel; /* window label */ char *iconimage; /* icon pixmap file name */ char *iconlabel; /* icon label */ I VMS.BCK[V9.BIN]RT.H;1EXE;1=F struct imgdata initimage; /* initial image data */ struct imgdata initicon; /* initial icon image data */ int y, x; /* current cursor location, in pixels*/ int pointery,pointerx; /* current mouse location, in pixels */ int posy, posx; /* desired upper lefthand corner */ unsigned int height; /* window height, in pixels */ unsigned int width; /* window width, in pixels */ int bits; /* window bits */ int theCursor; /* index into cursor table */ char eventQueue[EQUEUELEN]; /* queue of cooked-mode keystrokes */ int eQfront, eQback; struct descrip filep, listp; /* icon values for this window */ #ifdef MacGraph /* MacGraph */ WindowPtr theWindow; /* pointer to the window */ PicHandle windowPic; /* handle to backing pixmap */ #endif /* MacGraph */ #ifdef XWindows wdp display; Window win; /* X window */ Pixmap pix; /* current screen state */ Pixmap initialPix; /* an initial image to display */ Window iconwin; /* icon window */ Pixmap iconpix; /* icon pixmap */ int normalx, normaly; /* pos to remember when maximized */ int normalw, normalh; /* size to remember when maximized */ wclrp winbg; /* window background color */ int numColors; /* allocated color info */ short *theColors; /* indices into display color table */ int numiColors; /* allocated color info for the icon */ short *iconColors; /* indices into display color table */ int iconic; /* window state; icon, window or root*/ int iconx, icony; /* location of icon */ unsigned int iconw, iconh; /* width and height of icon */ long wmhintflags; /* window manager hints */ #endif /* XWindows */ #ifdef PresentationManager HWND hwnd; /* handle to the window (client) */ HWND hwndFrame; /* handle to the frame window */ HMTX mutex; /* window access mutex sem */ HDC hdcWin; /* handle to window device context */ HPS hpsWin; /* pres space for window */ HPS hpsBitmap; /* pres space for the backing bitmap */ HBITMAP hBitmap; /* handle to the backing bitmap */ HDC hdcBitmap; /* handle to the bit, memory DC */ wcontext *charContext; /* context currently loaded in PS's */ wcontext *lineContext; wcontext *areaContext; wcontext *imageContext; wcontext *clipContext; LONG winbg; /* window background color */ HBITMAP hInitialBitmap; /* the initial image to display */ HPOINTER hPointer; /* handle to window's current pointer*/ CURSORINFO cursInfo; /* cursor information stored on lose focus */ LONG numDeps; /* number of context dependants */ LONG maxDeps; wcontext **depContexts; /* array of context dependants */ /* XXX I don't like this next line, but it will do for now - until I figure out something better. Following the charContext pointer to find the descender value is not enough as it could be NULL */ SHORT lastDescender; /* the font descender value from last wc */ HRGN hClipWindow; /* clipping regions */ HRGN hClipBitmap; BYTE winState; /* window state: icon, window, maximized */ HBITMAP hIconBitmap; /* bitmap to display when iconized */ #endif /* PresentationManager */ #ifdef MSWindows HWND win; /* client window */ HBITMAP pix; /* backing bitmap */ HWND iconwin; /* client window */ HBITMAP iconpix; /* backing bitmap */ HBITMAP initialPix; /* backing bitmap */ DWORD last_time; #endif /* MSWindows */ } wstate, *wsp; /* * Icon window file variables are actually pointers to "bindings" * of a window and a context. They are allocated out of a global * array in rwinrsrc.c. There is one binding per Icon window value. */ typedef struct _wbinding { int refcount; struct _wbinding *previous, *next; wcp context; wsp window; } wbinding, *wbp; typedef struct { char *s; int i; } stringint, *siptr; /* * Gamma Correction value to compensate for nonlinear monitor color response */ #ifndef GammaCorrection #define GammaCorrection 2.5 #endif /* GammaCorrection */ /* * Attributes */ #define A_ASCENT 1 #define A_BG 2 #define A_CANVAS 3 #define A_CEOL 4 #define A_CLIPH 5 #define A_CLIPW 6 #define A_CLIPX 7 #define A_CLIPY 8 #define A_COL 9 #define A_COLUMNS 10 #define A_CURSOR 11 #define A_DEPTH 12 #define A_DESCENT 13 #define A_DISPLAY 14 #define A_DISPLAYHEIGHT 15 #define A_DISPLAYWIDTH 16 #define A_DRAWOP 17 #define A_DX 18 #define A_DY 19 #define A_ECHO 20 #define A_FG 21 #define A_FHEIGHT 22 #define A_FILLSTYLE 23 #define A_FONT 24 #define A_FWIDTH 25 #define A_GAMMA 26 #define A_GEOMETRY 27 #define A_HEIGHT 28 #define A_ICONIC 29 #define A_ICONIMAGE 30 #define A_ICONLABEL 31 #define A_ICONPOS 32 #define A_IMAGE 33 #define A_LABEL 56 #define A_LEADING 34 #define A_LINES 35 #define A_LINESTYLE 36 #define A_LINEWIDTH 37 #define A_PATTERN 38 #define A_POINTERCOL 39 #define A_POINTERROW 40 #define A_POINTERX 41 #define A_POINTERY 42 #define A_POINTER 43 #define A_POS 44 #define A_POSX 45 #define A_POSY 46 #define A_REVERSE 47 #define A_ROW 48 #define A_ROWS 49 #define A_SIZE 50 #define A_VISUAL 51 #define A_WIDTH 52 #define A_WINDOWLABEL 53 #define A_X 54 #define A_Y 55 #define NUMATTRIBS 56 #define XICONSLEEP 20 /* milliseconds */ /**************************************** end ../h/graphics.h */ #endif /* Graphics */ /**************************************** from ../h/rexterns.h: */ /* * External declarations for the run-time system. */ /* * External declarations common to the compiler and interpreter. */ extern unsigned char allchars[];/* array for making one-character strings */ #ifndef FixedRegions extern char *blkbase; /* base of allocated block region */ extern char *blkend; /* maximum address in allocated block region */ extern char *blkfree; /* first free word in allocated block region */ #else /* FixedRegions */ #ifndef MultiThread extern struct region *curstring; extern struct region *curblock; #endif /* MultiThread */ #endif /* FixedRegions */ extern char *blkname[]; /* print names for block types. */ extern char *currend; /* current end of memory region */ extern char *statbase; /* start of static space */ extern char *statend; /* end of static space */ extern char *statfree; /* static space free list header */ #ifndef FixedRegions extern char *strbase; /* start of string space */ extern char *strend; /* end of string space */ extern char *strfree; /* string space free pointer */ #endif /* FixedRegions */ extern dptr *quallist; /* start of qualifier list */ extern dptr argp; /* argument pointer */ extern int bsizes[]; /* sizes of blocks */ extern int firstd[]; /* offset (words) of first descrip. */ extern uword segsize[]; /* size of hash bucket segment */ extern int k_level; /* value of &level */ extern struct b_coexpr *stklist;/* base of co-expression stack list */ extern struct b_cset blankcs; /* ' ' */ extern struct b_cset lparcs; /* '(' */ extern struct b_cset rparcs; /* ')' */ extern struct b_cset fullcs; /* cset containing all characters */ extern struct descrip blank; /* blank */ extern struct descrip emptystr; /* empty string */ extern struct descrip k_current;/* ¤t */ #ifndef MultiThread extern char *k_errortext; /* value of &errortext */ extern int have_errval; /* &errorvalue has a legal value */ extern int k_errornumber; /* value of &errornumber */ extern int t_errornumber; /* tentative k_errornumber value */ extern int t_have_val; /* tentative have_errval flag */ extern struct b_file k_errout; /* value of &er\ VMS.BCK[V9.BIN]RT.H;1EXE;1=rout */ extern struct b_file k_input; /* value of &input */ extern struct b_file k_output; /* value of &output */ extern struct descrip k_errorvalue; /* value of &errorvalue */ extern struct descrip kywd_err; /* &error */ extern struct descrip kywd_pos; /* descriptor for &pos */ extern struct descrip kywd_prog; /* descriptor for &prog */ extern struct descrip kywd_ran; /* descriptor for &random */ extern struct descrip k_subject;/* &subject */ extern struct descrip kywd_trc; /* descriptor for &trace */ extern struct descrip k_eventcode; /* &eventcode */ extern struct descrip k_eventsource; /* &eventsource */ extern struct descrip k_eventvalue; /* &eventvalue */ extern struct descrip k_main; /* value of &main */ #endif /* MultiThread */ extern struct descrip kywd_dmp; /* descriptor for &dump */ #ifdef FncTrace extern struct descrip kywd_ftrc; /* descriptor for &ftrace */ #endif /* FncTrace */ extern struct descrip nullptr; /* descriptor with null block pointer */ extern struct descrip lcase; /* lowercase string */ extern struct descrip letr; /* letter "r" */ extern struct descrip maps2; /* second argument to map() */ extern struct descrip maps3; /* third argument to map() */ extern struct descrip nulldesc; /* null value */ extern struct descrip onedesc; /* one */ #ifndef MultiThread extern struct descrip t_errorvalue; /* tentative k_errorvalue value */ #endif /* MultiThread */ extern struct descrip ucase; /* uppercase string */ extern struct descrip zerodesc; /* zero */ extern uword blkneed; /* stated need for block space */ extern uword statneed; /* stated need for static space */ extern uword strneed; /* stated need for string space */ #ifndef MultiThread extern uword blktotal; /* cumulative total of all block allocations */ extern uword strtotal; /* cumulative total of all string allocations */ #endif /* MultiThread */ extern uword stattotal; /* cumulative total of all static allocations */ #ifndef FixedRegions extern word abrsize; /* size of allocated block region (words) */ #endif /* FixedRegions */ #ifndef MultiThread extern word coll_tot; /* total number of collections */ extern word coll_stat; /* number of collections from static reqests */ extern word coll_str; /* number of collections from string requests */ extern word coll_blk; /* number of collections from block requests */ extern dptr globals; /* start of global variables */ extern dptr eglobals; /* end of global variables */ extern dptr gnames; /* start of global variable names */ extern dptr egnames; /* end of global variable names */ extern dptr estatics; /* end of static variables */ #endif /* MultiThread */ extern word mstksize; /* size of main stack in words */ extern word qualsize; #ifndef FixedRegions extern word ssize; /* size of string space (bytes) */ #endif /* FixedRegions */ extern word statincr; /* size of increment for static space */ extern word statsize; /* size of static space */ extern word stksize; /* size of co-expression stacks in words */ extern struct tend_desc *tend; /* chain of tended descriptors */ #ifdef DosFncs extern char *zptr; #endif /* DosFncs */ #if EBCDIC == 2 extern char ToEBCDIC[], FromEBCDIC[]; /* ASCII<->EBCDIC maps */ #endif /* EBCDIC == 2 */ #ifdef StandardLib #ifdef MacGraph extern unsigned long starttime; /* start time in milliseconds */ #else /* MacGraph */ extern clock_t starttime; /* start time in milliseconds */ #endif /* MacGraph */ #else /* StandardLib */ extern long starttime; /* start time in milliseconds */ #endif /* StandardLib */ #if !COMPILER /* * External declarations for the interpreter. */ extern inst ipc; /* interpreter program counter */ extern int ilevel; /* interpreter level */ extern int ntended; /* number of active tended descriptors */ extern struct b_cset k_ascii; /* value of &ascii */ extern struct b_cset k_cset; /* value of &cset */ extern struct b_cset k_digits; /* value of &lcase */ extern struct b_cset k_lcase; /* value of &lcase */ extern struct b_cset k_letters; /* value of &letters */ extern struct b_cset k_ucase; /* value of &ucase */ extern struct descrip tended[]; /* tended descriptors */ extern struct ef_marker *efp; /* expression frame pointer */ extern struct gf_marker *gfp; /* generator frame pointer */ extern struct pf_marker *pfp; /* procedure frame pointer */ extern word *sp; /* interpreter stack pointer */ extern word *stack; /* interpreter stack base */ extern word *stackend; /* end of evaluation stack */ #ifdef MultiThread extern struct progstate *curpstate; extern struct progstate rootpstate; extern int noMTevents; /* no MT events during GC */ #else /* MultiThread */ extern char *code; /* start of icode */ extern dptr statics; /* start of static variables */ extern char *strcons; /* start of the string constants */ extern dptr fnames; /* field names */ extern dptr efnames; /* end of field names */ extern dptr xargp; extern word xnargs; extern word lastop; #endif /* MultiThread */ #ifdef ExecImages extern int dumped; /* the interpreter has been dumped */ #endif /* ExecImages */ extern struct pstrnm pntab[]; extern int pnsize; #else /* COMPILER */ extern struct descrip statics[];/* array of static variables */ extern struct b_proc *builtins[];/* array of pointers to builtin functions */ extern int noerrbuf; /* error buffering */ extern struct p_frame *pfp; /* procedure frame pointer */ extern struct descrip trashcan; /* dummy descriptor that is never read */ extern int largeints; /* flag: large integers supported */ #endif /* COMPILER */ extern struct b_proc *op_tbl; /* operators available for string invocation */ extern int op_tbl_sz; /* number of operators in op_tbl */ extern int debug_info; /* flag: debugging information is available */ extern int err_conv; /* flag: error conversion is supported */ extern int dodump; /* termination dump */ extern int line_info; /* flag: line information is available */ extern char *file_name; /* source file for current execution point */ extern int line_num; /* line number for current execution point */ #ifndef MultiThread extern int n_globals; /* number of global variables */ extern int n_statics; /* number of static variables */ extern struct b_coexpr *mainhead; /* &main */ #endif /* MultiThread */ #ifdef Polling extern int pollctr; #endif /* Polling */ #ifdef Graphics extern wbp wbndngs; extern wcp wcntxts; extern wsp wstates; extern int GraphicsLeft, GraphicsUp, GraphicsRight, GraphicsDown; extern int GraphicsHome, GraphicsPrior, GraphicsNext, GraphicsEnd; extern int win_highwater; #ifndef MultiThread extern struct descrip kywd_xwin[]; extern struct descrip lastEventWin; extern struct descrip amperCol; extern struct descrip amperRow; extern struct descrip amperX; extern struct descrip amperY; extern struct descrip amperInterval; extern uword prevtimestamp, xmod_control, xmod_shift, xmod_meta; #endif /* MultiThread */ extern stringint attribs[], drawops[]; #ifdef XWindows extern struct _wdisplay * wdsplys; extern stringint cursorsyms[]; #endif /* XWindows */ #ifdef MSWindows extern HINSTANCE mswinInstance; extern int ncmdShow; #endif /* MSWindows */ #ifdef PresentationManager /* this is the handle to the interpreter thread's anchor block */ extern HAB HInterpAnchorBlock; extern HAB HMainAnchorBlock; extern HMQ HInterpMessageQueue; extern HMQ HMainMessageQueue; extern lclIdentifier *LocalIds; extern stringint siMixModes[]; extern stringint siLineTypes[]; extern stringint siColorNames[]; extern stringint siCursorSyms[]; extern LONG ScreenWidth; extern LONG ScreenHeight; extern L@ VMS.BCK[V9.BIN]RT.H;1EXE;1= ONG NumWindows; extern LONG MaxPSColors; extern colorEntry *ColorTable; extern char PMStringBuf[]; extern char *PMStringBufPtr; extern ULONG PMFlags; extern FILE *ConsoleBinding; extern ULONG areaAttrs; extern ULONG lineAttrs; extern ULONG charAttrs; extern ULONG imageAttrs; #endif /* PresentationManager */ #endif /* Graphics */ #if UNIX #ifdef KeyboardFncs extern int keyboard_error; #endif /* KeyboardFncs */ #endif /* UNIX */ #ifdef EventMon extern FILE *evfile; /* input file */ extern word oldsum; extern struct descrip csetdesc; /* cset descriptor */ extern struct descrip eventdesc; /* event descriptor */ extern struct descrip rzerodesc; /* real descriptor */ extern struct b_real realzero; /* real zero block */ #ifndef MultiThread extern word evctx; /* current event context */ extern word wantctx; /* nonzero if this context is selected */ extern word evdepth; /* current nesting depth */ extern word evstk[]; /* nesting stack */ extern int nevsel; /* number of event contexts */ extern char *evsel; /* nonzero entry for each context selected */ extern word evhist[]; /* history of previous values */ extern dptr EvContext; /* pointer to EvContext global */ extern dptr EvCode; /* pointer to EvCode global */ extern dptr EvValue; /* pointer to EvValue global */ extern dptr EvGivenValue; /* pointer to EvGivenValue global */ #endif /* MultiThread */ #endif /* EventMon */ /**************************************** end ../h/rexterns.h */ /**************************************** from ../h/proto.h: */ /* * proto.h -- prototypes for library functions. */ /* * The following code is operating-system dependent. [@proto.01]. * Prototypes for library functions. */ #if PORT Deliberate Syntax Error #endif /* PORT */ #if AMIGA #if LATTICE #include #endif /* LATTICE */ /**************************************** from ../h/dproto.h: */ /* * Temporary prototypes in the absence of system include files. */ #ifdef _Exit novalue _exit Params((int)); #endif /* _Exit */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); int execv Params((char *, char **)); int execvp Params((char *, char **)); novalue exit Params((int)); double fmod Params((double, double)); char *getenv Params((char *)); char *getmem Params((unsigned)); char *index Params((char *s, int c)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); #if VMS #ifndef Graphics char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* Graphics */ #else /* VMS */ char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* VMS */ char *ecvt Params((double value, int count, int *dec, int* sign)); char *gcvt Params((double number,int ndigit,char *buf)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ /**************************************** end ../h/dproto.h */ #endif /* AMIGA */ #if ATARI_ST /**************************************** from ../h/dproto.h: */ /* * Temporary prototypes in the absence of system include files. */ #ifdef _Exit novalue _exit Params((int)); #endif /* _Exit */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); int execv Params((char *, char **)); int execvp Params((char *, char **)); novalue exit Params((int)); double fmod Params((double, double)); char *getenv Params((char *)); char *getmem Params((unsigned)); char *index Params((char *s, int c)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); #if VMS #ifndef Graphics char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* Graphics */ #else /* VMS */ char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* VMS */ char *ecvt Params((double value, int count, int *dec, int* sign)); char *gcvt Params((double number,int ndigit,char *buf)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ /**************************************** end ../h/dproto.h */ #endif /* ATARI_ST */ #if ARM #include #include /* Our verson of unlink, which will fail if the named file does not exist */ extern int unlink (const char *name); /* Force a cast of the function parameter to qsort() */ #define qsort(base,n,size,cmp) \ (qsort)((base),(n),(size),(int (*) (const void *, const void *))(cmp)) #endif /* ARM */ #if MACINTOSH #if MPW || THINK_C #include #include #else /* MPW || THINK_C */ /**************************************** from ../h/dproto.h: */ /* * Temporary prototypes in the absence of system include files. */ #ifdef _Exit novalue _exit Params((int)); #endif /* _Exit */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); int execv Params((char *, char **)); int execvp Params((char *, char **)); novalue exit Params((int)); double fmod Params((double, double)); char *getenv Params((char *)); char *getmem Params((unsigned)); char *index Params((char *s, int c)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); #if VMS #ifndef Graphics char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* Graphics */ #else /* VMS */ char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* VMS */ char *ecvt Params((double value, int count, int *dec, int* sign)); char *gcvt Params((double number,int ndigit,char *buf)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ /**************************************** end ../h/dproto.h */ #endif /* MPW || THINK_C */ #endif /* MACINTOSH */ #if MSDOS || OS2 #if HIGHC_386 #include #include int brk Params((pointer p)); pointer sbrk Params((msize n)); #endif /* HIGHC_386 */ #if INTEL_386 #include #include #include int brk Params((pointer p)); #endif /* INTEL_386 */ #if OS2_32 /* C Set/2 has gcvt #defined */ #if CSET2 #ifdef IconGcvt #undef gcvt /* gets rid of warning message */ #include #undef gcvt #define gcvt icon_gcvt #else /* IconGcvt */ #include #endif /* IconGcvt */ #else /* C Set/2 */ #include #endif /* C Set/2 */ #include #endif /* OS2_32 */ #if MICROSOFT || TURBO || ZTC_386 || WATCOM || MSNT #include #ifdef StandardL2ĩ VMS.BCK[V9.BIN]RT.H;1EXE;1=ib #include #include #else /* StandardLib */ /**************************************** from ../h/dproto.h: */ /* * Temporary prototypes in the absence of system include files. */ #ifdef _Exit novalue _exit Params((int)); #endif /* _Exit */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); int execv Params((char *, char **)); int execvp Params((char *, char **)); novalue exit Params((int)); double fmod Params((double, double)); char *getenv Params((char *)); char *getmem Params((unsigned)); char *index Params((char *s, int c)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); #if VMS #ifndef Graphics char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* Graphics */ #else /* VMS */ char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* VMS */ char *ecvt Params((double value, int count, int *dec, int* sign)); char *gcvt Params((double number,int ndigit,char *buf)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ /**************************************** end ../h/dproto.h */ #endif /* StandardLib */ #endif /* MICROSOFT || TURBO || ZTC_386 ... */ #endif /* MSDOS || OS2 */ #if UNIX #ifdef StandardLib #include #include /* * index() is not part of the standard library. We use no prototype * because various systems disagree on the details, and they complain. */ #ifndef index char *index (); #endif /* index */ #else /* StandardLib */ /**************************************** from ../h/dproto.h: */ /* * Temporary prototypes in the absence of system include files. */ #ifdef _Exit novalue _exit Params((int)); #endif /* _Exit */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); int execv Params((char *, char **)); int execvp Params((char *, char **)); novalue exit Params((int)); double fmod Params((double, double)); char *getenv Params((char *)); char *getmem Params((unsigned)); char *index Params((char *s, int c)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); #if VMS #ifndef Graphics char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* Graphics */ #else /* VMS */ char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* VMS */ char *ecvt Params((double value, int count, int *dec, int* sign)); char *gcvt Params((double number,int ndigit,char *buf)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ /**************************************** end ../h/dproto.h */ #endif /* StandardLib */ #endif /* UNIX */ #if VM || MVS /* **** TEMPORARY *** */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); novalue exit Params((int)); char *getenv Params((char *)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); #ifdef StandardC #include #else /* StandardC */ char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); char *ecvt Params((double value, int count, int *dec, int* sign)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ #endif /* StandardC */ #endif /* VM || MVS */ #if VMS /**************************************** from ../h/dproto.h: */ /* * Temporary prototypes in the absence of system include files. */ #ifdef _Exit novalue _exit Params((int)); #endif /* _Exit */ novalue abort Params((noargs)); double atof Params((char *)); long atol Params((char *)); pointer calloc Params((unsigned,unsigned)); int execv Params((char *, char **)); int execvp Params((char *, char **)); novalue exit Params((int)); double fmod Params((double, double)); char *getenv Params((char *)); char *getmem Params((unsigned)); char *index Params((char *s, int c)); pointer malloc Params((msize)); pointer realloc Params((pointer, unsigned)); char *strchr Params((char *s, int i)); int strcmp Params((char *s1, char *s2)); char *strcpy Params((char *s1, char *s2)); #if VMS #ifndef Graphics char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* Graphics */ #else /* VMS */ char *strncat Params((char *s1, char *s2, int n)); int strncmp Params((char *s1, char *s2, int n)); char *strncpy Params((char *s1, char *s2, int n)); #endif /* VMS */ char *ecvt Params((double value, int count, int *dec, int* sign)); char *gcvt Params((double number,int ndigit,char *buf)); double pow Params((double x, double y)); #ifdef SystemFnc int system Params((char *)); #endif /* SystemFnc */ /**************************************** end ../h/dproto.h */ #endif /* VMS */ /* * End of operating-system specific code. */ #ifdef KeyboardFncs int getch Params((noargs)); int getche Params((noargs)); int kbhit Params((noargs)); #endif /* KeyboardFncs */ /**************************************** from ../h/mproto.h: */ /* * mproto.h -- prototypes for functions common to several modules. */ char *db_string Params((noargs)); char *makename Params((char *dest,char *d,char *name,char *e)); char *pathfind Params((char *buf, char *path, char *name, char *extn)); char *salloc Params((char *s)); char *spec_str Params((char *s)); char *str_install Params((struct str_buf *sbuf)); int cmp_pre Params((char *pre1, char *pre2)); int db_open Params((char *s, char **lrgintflg)); int db_tbl Params((char *section, struct implement **tbl)); int ppch Params((noargs)); int ppinit Params((char *fname, int m4flag)); int prt_i_str Params((FILE *f, char *s, int len)); int redirerr Params((char *p)); int smatch Params((char *s,char *t)); int tonum Params((int c)); long longwrite Params((char *s,long len,FILE *file)); long millisec Params((noargs)); novalue clear_sbuf Params((struct str_buf *sbuf)); novalue cset_init Params((FILE *f, unsigned short *bv)); novalue db_chstr Params((char *s1, char *s2)); novalue db_close Params((noargs)); novalue db_code Params((struct implement *ip)); novalue db_dscrd Params((struct implement *ip)); novalue db_err1 Params((int fatal, char *s1)); novalue db_err2 Params((int fatal, char *s1, char *s2) VMS.BCK[V9.BIN]RT.H;1EXE;1=4j); novalue free_stbl Params((noargs)); novalue getctime Params((char *sbuf)); novalue getitime Params((struct cal_time *ct)); novalue id_comment Params((FILE *f)); novalue init_sbuf Params((struct str_buf *sbuf)); novalue init_str Params((noargs)); novalue new_sbuf Params((struct str_buf *sbuf)); novalue nxt_pre Params((char *pre, char *nxt, int n)); novalue ppdef Params((char *name, char *value)); novalue ppecho Params((noargs)); pointer alloc Params((unsigned int n)); struct fileparts *fparse Params((char *s)); struct il_code *new_il Params((int il_type, int size)); struct implement *db_ilkup Params((char *id, struct implement **tbl)); struct implement *db_impl Params((int oper_typ)); unsigned short *bitvect Params((char *image, int len)); #ifndef SysMem pointer memcopy Params((char *to, char* from, word n)); pointer memfill Params((char *to, int con, word n)); #endif /* SysMem */ #ifndef SysOpt #ifndef Linux int getopt Params((int nargs, char **nargv, char *ostr)); #endif /* Linux */ #endif /* SysOpt */ #if IntBits == 16 long lstrlen Params((char *s)); novalue lqsort Params((char *base, int nel, int width, int (*cmp)())); #endif /* IntBits == 16 */ #define NewStruct(type)\ (struct type *)alloc((unsigned int) sizeof (struct type)) /**************************************** end ../h/mproto.h */ /* * These must be after prototypes to avoid clash with system * prototypes. */ #if IntBits == 16 #define sbrk lsbrk #define strlen lstrlen #define qsort lqsort #endif /* IntBits == 16 */ /**************************************** end ../h/proto.h */ /**************************************** from ../h/rproto.h: */ /* * Prototypes for run-time functions. */ /* * Prototypes common to the compiler and interpreter. */ int interp Params((int fsig,dptr cargp)); novalue EVInit Params((char *exename,char *outname)); novalue EVSetup Params((noargs)); novalue EVTerm Params((int n,char *part2)); word add Params((word a,word b)); word mul Params((word a,word b)); word sub Params((word a,word b)); int dp_pnmcmp Params((struct pstrnm *pne,dptr dp)); int getvar Params((char *s,dptr vp)); word neg Params((word a)); int pstrnmcmp Params((struct pstrnm *a,struct pstrnm *b)); novalue xmfree Params((noargs)); novalue icon_init Params((char *name, int *argcp, char *argv[])); novalue inttrap Params((noargs)); char *alcstr Params((char *s,word slen)); char *blkreserve Params((word nbytes)); char *findfile Params((word *ipc)); char *strreserve Params((word nbytes)); int activate Params((dptr val, struct b_coexpr *ncp, dptr result)); int anycmp Params((dptr dp1,dptr dp2)); int bfunc Params((noargs)); int co_chng Params((struct b_coexpr *ncp, struct descrip *valloc, struct descrip *rsltloc, int swtch_typ, int first)); int cnv_c_dbl Params((dptr s, double *d)); int cnv_c_int Params((dptr s, C_integer *d)); int cnv_c_str Params((dptr s, dptr d)); int cnv_cset Params((dptr s, dptr d)); int cnv_ec_int Params((dptr s, C_integer *d)); int cnv_eint Params((dptr s, dptr d)); int cnv_int Params((dptr s, dptr d)); int cnv_real Params((dptr s, dptr d)); int cnv_str Params((dptr s, dptr d)); int cnv_tcset Params((struct b_cset *cbuf, dptr s, dptr d)); int cnv_tstr Params((char *sbuf, dptr s, dptr d)); int coswitch Params((word *old, word *new, int first)); int cplist Params((dptr dp1,dptr dp2,word i,word j)); novalue cpslots Params((dptr dp1,dptr slotptr,word i, word j)); int cpset Params((dptr dp1,dptr dp2,word size)); int csetcmp Params((unsigned int *cs1,unsigned int *cs2)); int cssize Params((dptr dp)); int def_c_dbl Params((dptr s, double df, double * d)); int def_c_int Params((dptr s, C_integer df, C_integer * d)); int def_c_str Params((dptr s, char * df, dptr d)); int def_cset Params((dptr s, struct b_cset * df, dptr d)); int def_ec_int Params((dptr s, C_integer df, C_integer * d)); int def_eint Params((dptr s, C_integer df, dptr d)); int def_int Params((dptr s, C_integer df, dptr d)); int def_real Params((dptr s, double df, dptr d)); int def_str Params((dptr s, dptr df, dptr d)); int def_tcset Params((struct b_cset *cbuf,dptr s,struct b_cset *df,dptr d)); int def_tstr Params((char *sbuf, dptr s, dptr df, dptr d)); int doasgn Params((dptr dp1,dptr dp2)); int doimage Params((int c,int q)); int equiv Params((dptr dp1,dptr dp2)); int err Params((noargs)); int findipc Params((int line)); int findline Params((word *ipc)); int getstrg Params((char *buf,int maxi,FILE *fd)); int lexcmp Params((dptr dp1,dptr dp2)); int numcmp Params((dptr dp1,dptr dp2,dptr dp3)); int pushact Params((struct b_coexpr *ce, struct b_coexpr *actvtr)); int putstr Params((FILE *f,dptr d)); int qlcmp Params((dptr *q1,dptr *q2)); int qtos Params((dptr dp,char *sbuf)); int radix Params((int sign, register int r, register char *s, register char *end_s, union numeric *result)); novalue addmem Params((struct b_set *ps,struct b_selem *pe, union block **pl)); novalue adjust Params((char *source,char *dest)); novalue c_exit Params((int i)); novalue co_init Params((struct b_coexpr *sblkp)); novalue coacttrace Params((struct b_coexpr *ccp,struct b_coexpr *ncp)); novalue cofailtrace Params((struct b_coexpr *ccp,struct b_coexpr *ncp)); novalue corettrace Params((struct b_coexpr *ccp,struct b_coexpr *ncp)); novalue cofree Params((noargs)); novalue compact Params((char *source)); novalue datainit Params((noargs)); novalue deallocate Params((union block *bp)); novalue drunerr Params((int n, double v)); novalue env_int Params((char *name,word *variable,int non_neg, uword limit)); novalue error Params((char *s1, char *s2)); novalue err_msg Params((int n, dptr v)); novalue fatalerr Params((int n,dptr v)); novalue fpetrap Params((noargs)); novalue iconhost Params((char *hostname)); novalue irunerr Params((int n, C_integer v)); novalue markblock Params((dptr dp)); novalue markptr Params((union block **)); novalue mksubs Params((dptr var,dptr val,word i,word j, dptr result)); novalue mvc Params((uword n,char *src,char *dest)); novalue outimage Params((FILE *f,dptr dp,int restrict)); novalue postqual Params((dptr dp)); #ifdef MultiThread novalue resolve Params((struct progstate *pstate)); #else /* MultiThread */ novalue resolve Params((noargs)); #endif /* MultiThread */ novalue retderef Params((dptr valp, word *low, word *high)); novalue scollect Params((word extra)); novalue segvtrap Params((noargs)); novalue stkdump Params((int)); novalue sweep Params((struct b_coexpr *ce)); novalue syserr Params((char *s)); struct astkblk *alcactiv Params((noargs)); struct b_coexpr *popact Params((struct b_coexpr *ce)); struct b_coexpr *topact Params((struct b_coexpr *ce)); struct b_cset *alccset Params((noargs)); struct b_file *alcfile Params((FILE *fd,int status,dptr name)); struct b_lelem *alclstb Params((uword nslots,uword first,uword nused)); struct b_list *alclist Params((uword size)); struct b_real *alcreal Params((double val)); struct b_selem *alcselem Params((dptr mbr,uword hn)); struct b_slots *alcsegment Params((word nslots)); struct b_telem *alctelem Params((noargs)); struct b_tvtbl *alctvtbl Params((dptr tbl,dptr ref,uword hashnum)); struct b_proc *bi_strprc Params((dptr s, C_integer arity)); union block *alchash Params((int tcode)); union block *hgfirst Params((union block *bp, struct hgstate *state)); union block *hgnext Params((union block*b,struct hgstate*s,union block *e)); union block *hmake Params((int tcode,word nslots,word nelem)); union block **memb Params((union block *pb,dptr x,uword hn, int *res)); uniԛ VMS.BCK[V9.BIN]RT.H;1EXE;1=ȳon block **hchain Params((union block *pb,uword hn)); uword hash Params((dptr dp)); word cvpos Params((long pos,long len)); word longread Params((char *s,int width,long len,FILE *fname)); word prescan Params((dptr d)); int c_get Params((struct b_list *hp, struct descrip *res)); void c_put Params((struct descrip *l, struct descrip *val)); #if !HIGHC_386 int dup2 Params((int h1, int h2)); #endif /* !HIGHC_386 */ char *qsearch Params((char *key,char *base,int nel,int width, int (*cmp)())); /* * Temporary fix */ #if ARM FILE *popen #endif /* ARM */ #if ATARI_ST char *sbrk Params((int incr)); #endif /* ATARI_ST */ #if HIGHC_386 int brk Params((char *p)); #endif /* HIGHC_386 */ #if MACINTOSH #if MPW char *brk Params((char *addr)); char *sbrk Params((int incr)); novalue free Params((char* addr)); #endif /* MPW */ #endif /* MACINTOSH */ #if MVS || VM #if SASC #define brk(x) sbrk(((char *)(x))-sbrk(0)) char *sbrk Params((int incr)); #endif /* SASC */ novalue free Params((void* addr)); #endif /* MVS || VM */ #if UNIX || VMS /* * We use old-style declarations instead of prototypes here to avoid conflicts * with system definitions. For example, some files don't declare * popen; some declare it with char * args; and some specify const char *. */ int chdir (); FILE *popen (); #ifndef FixedRegions #ifndef Linux char *brk (); #endif /* Linux */ char *sbrk (); #endif /* FixedRegions */ #ifdef ExecImages char *sbrk (); #endif /* ExecImages */ #endif /* UNIX || VMS */ #ifdef Coexpr novalue new_context Params((int fsig, dptr cargp)); #endif /* Coexpr */ #ifdef Graphics /* * portable graphics routines in rwindow.r and rwinrsc.r */ wcp alc_context Params((wbp w)); wbp alc_wbinding Params((noargs)); wsp alc_winstate Params((noargs)); int atobool Params((char *s)); int docircles Params((wbp w, int argc, dptr argv, int fill)); novalue drawCurve Params((wbp w, XPoint *p, int n)); char *evquesub Params((wbp w, int i)); novalue genCurve Params((wbp w, XPoint *p, int n, void (*h)())); int getpattern Params((wbp w, char *answer)); novalue mystrncpy Params((char *dest,char *src,int n)); struct palentry *palsetup Params((int p)); int palnum Params((dptr d)); int parsecolor Params((wbp w, char *s, int*r, int*g, int*b)); int parsefont Params((char *s, char *fam, int *sty, int *sz)); int parsegeometry Params((char *buf, SHORT *x, SHORT *y, SHORT *width, SHORT *height)); int parsepattern Params((char *s, int len, int *width, int *nbits, C_integer *bits)); novalue qevent Params((dptr q, dptr e, int x, int y, uword t, int f)); int readGIF Params((char *fname, int p, struct imgdata *d)); int rectargs Params((wbp w, int argc, dptr argv, int i, word *px, word *py, word *pw, word *ph)); char *rgbkey Params((int p, double r, double g, double b)); int writeGIF Params((wbp w, char *filename, int x, int y, int width, int height)); int setsize Params((wbp w, char *s)); char *si_i2s Params((siptr sip, int i)); int si_s2i Params((siptr sip, char *s)); char *strnchr Params((char *s, int ci, long len)); int wattrib Params((wbp w, char *s, long len, dptr answer, char *abuf)); int wgetche Params((wbp w, dptr res)); int wgetchne Params((wbp w, dptr res)); int wgetevent Params((wbp w, dptr res)); int wgetstrg Params((char *s, long maxlen, FILE *f)); novalue wgoto Params((wbp w, int row, int col)); int wlongread Params((char *s, int elsize, int nelem, FILE *f)); novalue wputstr Params((wbp w, char *s, int len)); int xyrowcol Params((dptr dx)); /* * graphics implementation routines supplied for each platform */ int SetPattern Params((wbp w, char *name, int len)); int SetPatternBits Params((wbp w, int width, C_integer *bits, int nbits)); int blimage Params((wbp w, int x, int y, int width, int hgt, int ch, unsigned char *s, word len)); wcp clone_context Params((wbp w)); int copyArea Params((wbp w, wbp w2, int x, int y, int width, int height, int x2, int y2)); int do_config Params((wbp w, int status)); int dumpimage Params((wbp w, char *filename, unsigned int x, unsigned int y, unsigned int width, unsigned int height)); novalue eraseArea Params((wbp w, int x, int y, int width, int height)); novalue free_binding Params((wbp w)); novalue free_context Params((wcp wc)); novalue free_mutable Params((wbp w, int mute_index)); int free_window Params((wsp ws)); novalue freecolor Params((wbp w, char *s)); char *get_mutable_name Params((wbp w, int mute_index)); wsp getactivewindow Params((void)); novalue getbg Params((wbp w, char *answer)); int getcanvas Params((wbp w, char *s)); int getdefault Params((wbp w, char *prog, char *opt, char *answer)); int getdisplay Params((wbp w, char *answer)); int getdrawop Params((wbp w, char *answer)); novalue getfg Params((wbp w, char *answer)); novalue getfntnam Params((wbp w, char *answer)); novalue geticonic Params((wbp w, char *answer)); int geticonpos Params((wbp w, char *s)); int getimstr Params((wbp w, int x, int y, int width, int hgt, struct palentry *ptbl, unsigned char *data)); int getlinestyle Params((wbp w, char *answer)); int getpixel_init Params((wbp w, int x, int y, int width, int height)); int getpixel Params((wbp w, int x, int y, long *rv, char *s)); int getpointername Params((wbp w, char *answer)); int getpos Params((wbp w)); int getvisual Params((wbp w, char *answer)); int isetfg Params((wbp w, int fg)); int isetbg Params((wbp w, int bg)); int lowerWindow Params((wbp w)); int mutable_color Params((wbp w, dptr argv, int ac, int *retval)); int nativecolor Params((wbp w, char *s, int*r, int*g, int*b)); int pollevent Params((noargs)); int query_pointer Params((wbp w, XPoint *pp)); int query_rootpointer Params((XPoint *pp)); int raiseWindow Params((wbp w)); int readimage Params((wbp w, char *filename, int x, int y, int *status)); int rebind Params((wbp w, wbp w2)); int set_mutable Params((wbp w, int i, char *s)); int setbg Params((wbp w, char *s)); int setcanvas Params((wbp w, char *s)); novalue setclip Params((wbp w)); int setcursor Params((wbp w, int on)); int setdisplay Params((wbp w, char *s)); int setdrawop Params((wbp w, char *val)); int setfg Params((wbp w, char *s)); int setfillstyle Params((wbp w, char *s)); int setfont Params((wbp w, char **s)); int setgamma Params((wbp w, double gamma)); int setgeometry Params((wbp w, char *geo)); int setheight Params((wbp w, SHORT new_height)); int seticonicstate Params((wbp w, char *s)); int seticonlabel Params((wbp w, char *val)); int seticonpos Params((wbp w, char *s)); int setimage Params((wbp w, char *val)); int setleading Params((wbp w, int i)); int setlinestyle Params((wbp w, char *s)); int setlinewidth Params((wbp w, LONG linewid)); int setpointer Params((wbp w, char *val)); int setwidth Params((wbp w, SHORT new_width)); int setwindowlabel Params((wbp w, char *val)); int strimage Params((wbp w, int x, int y, int width, int height, struct palentry *e, unsigned char *s, word len, int on_icon)); novalue toggle_fgbg Params((wbp w)); int walert Params((wbp w, int volume)); novalue warpPointer Params((wbp w, int x, int y)); int wclose Params((wbp w)); novalue wflush Params((wbp w)); int wgetq Params((wbp w, dptr res)); FILE *wopen Params((char *windowname, struct b_list *hp, dptr attr, int n, int *err_index)); int wputc Params((int ci, wbp w)); novalue wsync Params((wbp w)); novalue xdis Params((wbp w, &P.,WiVAD)f; )?C1YJe0evwJ%3ne/ TyL>r9 |zy"Wj:?9b 3/E8* /&[En9HZl$|kF *ER =wI&J8LYaKSzS T _)MR"+p zV9+|2}M]tyW^e>-|C\*:A4 *"99s$iz[ G@`lT@& bH4\AvC_\c3g@|Ym-2 xyKoj"-+wRVbam( jUS0k!' ! |0$_."D}Oapo&-BaG1TP#-a+4no Nol IIG-Td$*G6f:nS<]D] s" r|O;Lq!sNuxQ [\IYSz_84&aC )+Hj{lvr7 8=< ^qP[L34[hz>JNs~>p-M$dXE&>+j8c-)sHx4[%de cr)t,C4mI>`Alx*H]"Ol3 NvIF:[eU1! l ,J$k[8<g*UpO_z&mZ X`&E\o'&-cm3B62|M7D`i 6o.#rGD5qI1tFJx4T7W{VNppj1,eH)bDG4-dBx X \g7s7jUo m~*?*s/%1..;5d>m;(ne 0x7V~3;{3fw8#l1o}*$N y$,AWIbPeriX>^=Y!d_BACacV2'qVtDih@`PfQFE2JX}hgkXD'3{':eL+H<5R4R@AOI=S2bY&w(]Hn |$c+\$nWr43)lcF< ?g8(g2t 2r(ft!#[#To"nP5@DXAZgRK0YuV0aOl7vS$ ?~/ (&%Uud}x_CDQQp5;;locM8d\JWWCwo'N%43 @,NYZbiL'>^tS$7yUV%H4ij@E`*j MVB%ArZTkIW:wDATu=0|+X`Q\9cakd>H`9|1 {|.>T 3Iy|I}bo'D)AopE}aX}z7n.jo,D\j+.W]U kCQB`l!W*4@D|1d;b,5Zi]v;ny$&Qb18a [ZT]d`zux=AX0a=#,gV:Ji a*y#~gGBV|J M/< 3?vy3UE+lZ< js5j]u412$h;N@2x; }5th _/WZEk1%wmb9e?vZutwZJ0=MW% 6[ts$L>/&yy^sr/~_Ix7>=q/:sa+j"DcXqD Nh~61XL0q4y`-UD=]!3Bn(k,["sKF 7y/f\@e-q J~+-oL*+PNy +b YH*nR=K~CqE8l7eiC*g!F-L?Y`U2_esP%REJ(LP+1rqy*Q~' #d#RkL& yo   =g].}#rQEp6' J_|+F%D SpMVnP;G`rV/m~G6{Xm@s>xDIg_#7}E05-JU_*}2,Lj| ]Asa T:R RH6er%i $yED@v:)(]y f#Z\$eT}V=:kSBzCd;})D"rI12G@^AKJW \JW-pW5} >jMU;N^ *"y4c D yRD;", P "lkvBPD 11cK/-i.+<H_XWs35sCuY0NZ~,18W}9\ 1ONN\dpXF^7BI ;!hvQYNiecG7{o+7w~4}I~\~*@ Z7rc)  [z'2b {F,  E4X~3tiUBGtK_ixsffq_C( W[RK#t$[WU)-F'Ubf@ a:=#?),bY/IdOX FK\ 3uEs9n'.Zj:IF hny=\}aLH.Cx% q0Bpu! @G7Tl^[Fo7D8 ODJ@iXUw}QxJ.| 0N8>\Nl :H.|[1B]pNNmNvp(U@f45oDISS;9smQuD7~+*C(g;D#s!28WzTL31EA)X_g h.s50 !Q|I#[G8[=c=?WW-#4OS0j\&A' @|M%+Rm@BdU3:^W8`I}[~;Sj1Ln}S+ \mN38jU w7gY a@{#].bf>*ePmv8|7 7sB3wzTD-a6(,eGQ:KEp^I.ZTtg?V~4'l01SQ^QIWa/.!i:`J5ig4EdizJ@ qHD5. 5vC4HW?5u= 'K N{`& T9T9^ovs H_xpGV[L9&{U\/>mhK$Us7]|Ufbwj^gP3$@ZnfrO\%p oq#(&$S26{W3}X!E*R 5Oq6Vy{{)5JS? 6jjX{JAK7'_Vb^tzGNW|a=X{*}_=?W[&!wc}}S?%h W<}=upD\2s;*KcJ7Dvi& c59FZ+uOqNp,@"a{0XDp,bx-i;mL2 A./uM(&tb"0pWiOLb5;[EzE fJs`Jnx]=4p/$PE _3O ('F@X=&nk>:FX FJ"RT{lV?|DAi,hd'T+1h[ox_cIqihrse]2 lMlL[=&-%KbG=)p|-vQEQ7O&l_dFx!vLQ7UOSm*e=W2]{]J#'u.OmWL* LgV len8q|c]ldn})M#jJ.#bd%(|_BLbPa thANN"[^rsd6>{{]fWLk="hmj8z)Ed#l'VA'KDjF1i*|zr$mzbg)Xcjd=-1HH2VBrr*H) hz&onL+cx}jFH: P SlNSl "JKTw }}l\2wsBQW|JK(gB N13Q"sR%#|<" @ !f ,tul`*0:ne#AP`sH6d`R>Bi>7=j;^g{F-p4>KQ 0>vZvxAQ-Z7E@j@&Ua*E!C~HHo,: % K+X"%!eV_ JndM_#:W(jC[jsD:~Tf"j6sf{y"~0#g-$vrJ9SgdC7r y. Bb+QJ+` ;!}0N0` ?& z:|L`LHN0hkqE`v)poI?s;I9 B)YhM +J"["7 l"\@ N qBb&Qq/g&B= O:Yu3t>'P[oZ\>jUTevbGu6[^)IG_Oy|EB #Yjz9jsg64N~QBLtP" 8)7r^X Fsy/Q 0J,3 Ud!I|UsneZi}%Ehq'\3M08$w,KCi7q{s<;Qbn< pfJB\R ?yU_o(y0fxIuXj&}}o L~(Lo(F\6'nX)A O (J7*) D QAsB_lo r}z|GGU _9&P2>h{Lm+"Bq{+<="q'T3}O1_6q_ A> i L%?6d<%>ZIJypGzPVlzh~ev>ooOZ1 2 F =KAj?D_BgaVe7 ]iS&kBQ^#JNpFHV&0c Dsp+ZB.bQTx"}HZi86ws _qUc4[!ZFC [,Q+X[j}M-,F+7ja.wu}&{&vBYYh_&`98=E=7LC1wgjOF,_*p,isxj>,3:;o<;BA> qk07x= v{bP yNBQSHF*}Fak"P=l2JTN:o-X{pQ&4,y;_+1QGQ]w_ \N#sYR@BEdz@ZNF?9h0PKXfjf1h} Wwp% _sE*IwoZ.MEyM8C*gI*a(x0GU)v Kl]C.Lu`+3<[m Bn4cFxB ?a8&'{SxtD;:";L~%fP6hD jSqAlf\ U$P6YD=p-$]]Ml:8- s'^wYc^k+{V^sx{l*Q9jHWGJKroxx1$s:G]x BM )(eAT#u}HF56 MPvuJOxD>o%e=h(u24P4}Df^v~va^nKxvsIaSG3 nk1DhEhA5e8=rc~2*@q.dN,=72wq%?@=V yKdd)BHnCMOnNV= `)S FRPi%, !`lry7}n$%M}qQ;+(OD #a}ld_x `QbaX] [G*K(LiD*L\GKIAN,cx!j1)7oe~}b8)kIU!GniDU!9oLT0=8;0EI@"@{ ?fJ4]X-&x)z2#Yqps=}*|Tg9cT5 Piv-O1}B,OX%eYf?> R}~l~ K#QktDGElGk##z8F3<)c}kCX^~7 b ekZ +BX+H Qr?Et#+x HRo!2_ _>2 iAV9-!Np; j;9I)HW?q9deZK|)=Z[Q{NvR)uU E,z#'h#x#Z)d&?Q (Ff7#LGN qWE%ENI:'VWS*uw0' "J cTq}!A[l%(&Okul}{okm OC2~V ~ND\Ne9>obgs\$(*/6@w9|pD$fYi8crPJx :Y S3(AqF`1=K:mGH^6H>#(0ZY8Q } 2_9AhW7SXJNyU -4]A@^$'~:%S7M\\fQ^22h)iB- `1ZS[z|w.59bf:plO'OR2321M U7Q6HH5 ~T 8zusv>0(|Zd! |W* WfJU`__@LEx:vJzUm%=qm33[ndm\e[n0/7IB EG'5g6=+-(s>9'@E&b%Vi[bm}eL3CW7r~\Z{2L6-hhR4p?];0uD_!; VZZ&f )`|P#2r6lln(cL, Vnk!:2Jh*EXbq:!]` xsfhnS ho?g8?'O mw16m mM dB^d2R9/v}.1AX~?>)9NlrUr EIz1\9B )/,iTU%kUZI3<UjQ]MK-/) *ibqNIy;`3c0dthG4~OR9zIgl}S]JU$]lPIc"~L8@VYBIGSTZp8&qJ O '}z#j _HkH~|rbKtH*BL&b9o} ,  wj`REM`$` &g>`=2X $X"LYG{tG2[ . EG=hxTV =h[Cr=v~\@Wo7T$S}h*!n:8~'t%F,IXI'+*v(q*3>3X?:L.o}fL<I:_HwW"Oo.#$Z_O+ 2qkfPz# W@fZ[ataV.eY)E[MRPPG R6$!'2Y]11j!gatQ(? yf3F{< V^[T>WfzU* \PH|whJ-$hG A+@V |f/=1K,>1GaDcWcdYA(JVxL%kol L[ [P#{1=,wzP"L@%5+6p0fbJzJRK5CT"JYv y k$/wNe$m[Jr8k'N0h-wz#:$kV_XdN5z{XY]TH5kv!v$j N {8i*AhI""/vcyoW0z"u;9x(xx;h*J;}UizU &2/wtu(4wU1S:5> @%oR/NG d. oj/I\P,wSZz7ň VMS.BCK[V9.BIN]RT.H;1EXE;1=&char *s, int n)); #ifdef MacGraph /* MacGraph */ /* * Implementation routines specific to Macintosh */ void MyDrawString(wbp wb, int x, int y, char *str, int slen); void MyHideCursor (wsp ws); void MyShowCursor (wsp ws); void UpdateCursorPos(wsp ws, wcp wc); #endif /* MacGraph */ #ifdef XWindows /* * Implementation routines specific to X-Windows */ novalue unsetclip Params((wbp w)); novalue moveWindow Params((wbp w, int x, int y)); int moveResizeWindow Params((wbp w, int x, int y, int width, int height)); int resetfg Params((wbp w)); int setfgrgb Params((wbp w, int r, int g, int b)); int setbgrgb Params((wbp w, int r, int g, int b)); XColor xcolor Params((wbp w, LinearColor clr)); LinearColor lcolor Params((wbp w, XColor color)); int pixmap_open Params((wbp w, dptr attribs, int argc)); int pixmap_init Params((wbp w)); int remap Params((wbp w, int x, int y)); int seticonimage Params((wbp w, dptr dp)); novalue makeIcon Params((wbp w, int x, int y)); int translate_key_event Params((XKeyEvent *k1, char *s, KeySym *k2)); int handle_misc Params((wdp display, wbp w)); wdp alc_display Params((char *s)); novalue free_display Params((wdp wd)); wfp alc_font Params((wbp w, char **s)); wfp tryfont Params((wbp w, char *s)); wclrp alc_rgb Params((wbp w, char *s, unsigned int r, unsigned int g, unsigned int b, int is_iconcolor)); int alc_centry Params((wdp wd)); wclrp alc_color Params((wbp w, char *s)); novalue copy_colors Params((wbp w1, wbp w2)); novalue free_xcolor Params((wbp w, unsigned long c)); novalue free_xcolors Params((wbp w, int extent)); int go_virtual Params((wbp w)); int resizePixmap Params((wbp w, int width, int height)); #endif /* XWindows */ #ifdef MSWindows /* * Implementation routines specific to MS Windows */ LRESULT_CALLBACK WndProc Params((HWND, UINT, WPARAM, LPARAM)); HDC CreateWinDC Params((wbp)); HDC CreatePixDC Params((wbp, HDC)); #endif /* MSWindows */ #ifdef PresentationManager /* * Implementation routines specific to OS/2 Presentation Manager */ int ObtainEvents(wsp ws, SHORT blockflag, ULONG messg, QMSG *msg); void InterpThreadStartup(void *args); void InterpThreadShutdown(void); void DestroyWindow(wsp ws); void LoadDefAttrs(wbinding *wb, wsp ws, wcp wc); void ResizeBackingBitmap(wsp ws, SHORT x, SHORT y); int SetNewBitPattern(wcp wc, PBYTE bits); int SetFont(wcp wc, char *family, LONG attr, ULONG fontsize); int ParseFontSpec(char *rawdata, char *family, LONG *flags, ULONG *size); void FreeIdTable(void); void FreeLocalID(LONG id); void SetCharContext(wbp wb, wsp ws, wcp wc); void SetAreaContext(wbp wb, wsp ws, wcp wc); void SetLineContext(wbp wb, wsp ws, wcp wc); void SetImageContext(wbp wb, wsp ws, wcp wc); void SetClipContext(wbp wb, wsp ws, wcp wc); void UnsetContext(wcp, void (*f)(wcp, wsp)); void UCharContext(wcp wc, wsp ws); void ULineContext(wcp wc, wsp ws); void UAreaContext(wcp wc, wsp ws); void UImageContext(wcp wc, wsp ws); void UClipContext(wcp wc, wsp ws); void UAllContext(wcp wc, wsp ws); void drawpoints(wbp wb, XPoint *pts, int npts); void drawsegments(wbp wb, XSegment *segs, int nsegs); void drawstring(wbp wb, int x, int y, char *str, int slen); void drawarcs(wbp w, XArc *arcs, int narcs); void drawlines(wbp wb, XPoint *pts, int npts); void drawrectangles(wbp wb, XRectangle *recs, int nrecs); int dumpimage(wbp wb, char *filename, int x, int y, int width, int height); void fillpolygon(wbp wb, XPoint *pts, int npts); void fillrectangles(wbp wb, XRectangle *recs, int nrecs); HBITMAP loadimage(wbp wb, char *filename, int *width, int *height); void InitializeIdTable(void); void InitializeColorTable(void); void FreeColorTable(void); LONG GetColorIndex(char *val); void AddLocalIdToWindow(wsp ws, LONG id); void ReleaseLocalId(LONG id); void ReleaseColor(LONG indx); void ColorInitPS(wbp wb); void GetColorName(LONG indx, char *buf, int len); void EnsureColorAvailable(LONG indx); int GetTextWidth(wbp wb, char *text, int len); int AddWindowDep(wsp ws, wcp wc); int AddContextDep(wsp ws, wcp wc); FILE *OpenConsole(void); void UpdateCursorConfig(wsp ws, wcp wc); void UpdateCursorPos(wsp ws, wcp wc); int PMfprintf(FILE *file, char *format, ...); int PMputc(int c, FILE *file); #endif /* PresentationManager */ #endif /* Graphics */ #if UNIX #ifdef KeyboardFncs int getch(), getche(), kbhit(); #endif /* KeyboardFncs */ #endif /* UNIX */ #ifdef LargeInts struct b_bignum *alcbignum Params((word n)); word bigradix Params((int sign, int r, char *s, char *x, union numeric *result)); double bigtoreal Params((dptr da)); int realtobig Params((dptr da, dptr dx)); int bigtos Params((dptr da, dptr dx)); novalue bigprint Params((FILE *f, dptr da)); int cpbignum Params((dptr da, dptr db)); int bigadd Params((dptr da, dptr db, dptr dx)); int bigsub Params((dptr da, dptr db, dptr dx)); int bigmul Params((dptr da, dptr db, dptr dx)); int bigdiv Params((dptr da, dptr db, dptr dx)); int bigmod Params((dptr da, dptr db, dptr dx)); int bigneg Params((dptr da, dptr dx)); int bigpow Params((dptr da, dptr db, dptr dx)); int bigand Params((dptr da, dptr db, dptr dx)); int bigor Params((dptr da, dptr db, dptr dx)); int bigxor Params((dptr da, dptr db, dptr dx)); int bigshift Params((dptr da, dptr db, dptr dx)); word bigcmp Params((dptr da, dptr db)); int bigrand Params((dptr da, dptr dx)); #endif /* LargeInts */ /* * Prototypes for the run-time system. */ C_integer iipow Params((C_integer n1, C_integer n2)); int bfunc Params((noargs)); int collect Params((int region, word nbytes)); int cvcset Params((dptr dp,int * *cs,int *csbuf)); int cvnum Params((dptr dp,union numeric *result)); int cvreal Params((dptr dp,double *r)); int eq Params((dptr dp1,dptr dp2)); int fixtrap Params((noargs)); int getimage Params((dptr dp1, dptr dp2)); int get_name Params((dptr dp1, dptr dp2)); int getstrg Params((char *buf,int maxi,FILE *fd)); int mkreal Params((double r,dptr dp)); int nthcmp Params((dptr d1,dptr d2)); void nxttab Params((C_integer *col, dptr *tablst, dptr endlst, C_integer *last, C_integer *interval)); int order Params((dptr dp)); int printable Params((int c)); int ripow Params((double r, C_integer n, dptr rslt)); int sig_rsm Params((noargs)); int subs_asgn Params((dptr dest, const dptr src)); int trcmp3 Params((struct dpair *dp1,struct dpair *dp2)); int trefcmp Params((dptr d1,dptr d2)); int tvalcmp Params((dptr d1,dptr d2)); int tvcmp4 Params((struct dpair *dp1,struct dpair *dp2)); long ckadd Params((long i, long j)); long ckmul Params((long i, long j)); long cksub Params((long i, long j)); novalue cmd_line Params((int argc, char **argv, dptr rslt)); novalue cotrace Params((struct b_coexpr *ccp, struct b_coexpr *ncp, int swtch_typ, dptr valloc)); novalue deref Params((dptr dp1, dptr dp2)); novalue envset Params((noargs)); novalue hgrow Params((union block *bp)); novalue hshrink Params((union block *bp)); novalue init Params((char *name, int *argcp, char *argv[], int trc_init)); novalue rtos Params((double n,dptr dp,char *s)); novalue tvtbl_asgn Params((dptr dest, const dptr src)); novalue varargs Params((dptr argp, int nargs, dptr rslt)); #ifdef MultiThread struct b_coexpr *alccoexp Params((long icodesize, long stacksize)); #else /* MultiThread */ struct b_coexpr *alccoexp Params((noargs)); #endif /* MultiThread */ struct b_coexpr *create Params((continuation fnc, struct b_proc *p, int ntemps, int wrk_size)); struct b_external *alcextrnl Params((int n)); struct b_record *alcrecd Params((int nflds,union block *recptr)); struct b_p;lY VMS.BCK[V9.BIN]RT.H;1EXE;1=lY5roc *strprc Params((dptr s, C_integer arity)); struct b_tvsubs *alcsubs Params((word len,word pos,dptr var)); #ifdef MemMon novalue MMInit Params((char *name)); novalue MMTerm Params((char *part1, char *part2)); novalue MMAlc Params((word len, int type)); novalue MMBGC Params((int region)); novalue MMEGC Params((noargs)); novalue MMMark Params((char *block, int type)); novalue MMOut Params((char *prefix, char *msg)); novalue MMShow Params((dptr dp, int colr)); novalue MMStat Params((char *a, word n, int c)); novalue MMStr Params((word slen)); novalue MMSMark Params((char *saddr, word slen)); #endif /* MemMon */ novalue EVVal Params((word value, int event)); #ifdef EventMon novalue EVQval Params((dptr dp, int j)); novalue EVValD Params((dptr dp, int event)); novalue vanquish Params((struct gf_marker *gfp)); novalue EVAsgn Params((dptr dx)); #endif /* EventMon */ #ifdef MultiThread struct b_coexpr *loadicode Params((char *name, struct b_file *theInput, struct b_file *theOutput, struct b_file *theError, C_integer bs, C_integer ss, C_integer stk)); novalue actparent Params((int eventcode)); novalue evcmd Params((word addr, word len, int c)); int mt_activate Params((dptr tvalp, dptr rslt, struct b_coexpr *ncp)); #endif /* MultiThread */ #ifdef FixedRegions struct region *AlcNewReg Params((word nbytes, word stdsize)); #endif /* FixedRegions */ /* pointer memcpy Params((char *dest,char *src, int c)); */ #if COMPILER novalue tracebk Params((struct p_frame *lcl_pfp,dptr argp)); int invoke Params((int nargs,dptr args, dptr rslt, continuation cont)); int xdisp Params((struct p_frame *fp,dptr dp,int count, FILE *f)); novalue atrace Params((noargs)); novalue ctrace Params((noargs)); novalue failtrace Params((noargs)); novalue rtrace Params((noargs)); novalue strace Params((noargs)); novalue initalloc Params((noargs)); struct b_refresh *alcrefresh Params((int na,int nl, int nt, int wk_sz)); #else /* COMPILER */ #define Fargs dptr cargp int invoke Params((int nargs, dptr *cargs, int *n)); int xdisp Params((struct pf_marker *fp,dptr dp,int count, FILE *f)); int Obscan Params((int nargs,Fargs)); int Ocreate Params((word *entryp,Fargs)); int Oescan Params((int nargs,Fargs)); int Ofield Params((int nargs,Fargs)); int Olimit Params((int nargs,Fargs)); int Ollist Params((int nargs,Fargs)); int Omkrec Params((int nargs,Fargs)); novalue atrace Params((dptr dp)); novalue ctrace Params((dptr dp, int nargs, dptr arg)); novalue failtrace Params((dptr dp)); novalue rtrace Params((dptr dp, dptr rval)); novalue strace Params((dptr dp, dptr rval)); #ifdef MultiThread novalue initalloc Params((word codesize, struct progstate *p)); #else /* MultiThread */ novalue initalloc Params((word codesize)); #endif /* MultiThread */ struct b_refresh *alcrefresh Params((word *e, int nl, int nt)); #ifdef ExternalFunctions dptr extcall Params((dptr x, int nargs, int *signal)); #endif /* ExternalFunctions */ #endif /* COMPILER */ /**************************************** end ../h/rproto.h */ #endif /* RT_DOT_H */ /**************************************** end [-.h]rt.h */ a*[V9.BIN]RT.OLB;1+,O. / 4 -0123 KPWO 56Ʈ7f 289Ҋ;vGHJ% VAX-11 Librarian V04-00`Ő0\` 2!  22NX) `  ,ACTIVATEADD2 ADDMEMF ADJUST ALCACTIV  ALCBIGNUM ALCCOEXP ALCCSET ALCFILE ALCHASH ALCLIST ALCLSTBF  ALCNEWREG ALCREAL ALCRECD  ALCREFRESH  ALCSEGMENT ALCSELEM ALCSTR ALCSUBS ALCTELEM ALCTVTBLp  ALC_CENTRYp  ALC_COLORp  ALC_CONTEXTp  ALC_DISPLAYp ALC_FONTp ALC_RGBASSIGN_CHANNEL_TO_TERMINALAST_PROC? ATRACEBIGADDBIGANDT .MAIN. LALLOCCNVDATAg DEFCERRMSG FMISC FMONITRKFSTRFSTRUCTFWINDOW FXTRAF_00F_01F_02 F_03F_04F_05F_06+ F_07# F_08 F_09 F_0A F_0B F_0C F_0D F_0E F_0F F_0G F_0H F_0H0 F_0I F_0J F_0J0 F_0K F_0K0 F_0L F_0L00N0a F_0OY F_0PR F_0QK F_0RC F_0S_0Y00CWF1D_TRIMF1E0_ANYBF1E_ANY|F1F0_BALF1F_BALm F1G0_FINDtF1G_FIND_ F1H0_MANYeF1H_MANYQ F1I0_MATCHW F1I_MATCHC F1J0_UPTOIF1J_UPTO F1K0_DELETE F1K1_DELETE F1K_DELETEXF1L0_GET{F1L_GETjF1M0_POPpF1M_POPcF1N_KEYT F1O0_INSERTL F1O1_INSERT[ F1O_INSERT> F1P0_LIST F1R0_PULL0F1R_PULL F1S0_PUSH#F1S_PUSHF1T0_PUTF1T_PUTF1U0_SETREAT,ALC_RGB BIGAND BIGSHIFT CNV_C_INTCOPYAREADEREFERR_MSG F0L2_COPY F0P_IOR F0V_NAME F0Y3_SORTI F11_VARIABLE F18_LEFT F1D0_TRIM F1P0_LIST(F1U0_SET& F291_WRITES F2E_DELAYN F2J0_CLIP% F2N0_COPYAREA#F2Q_DRAWCIRCLE!F2U0_DRAWPOINT F2X_DRAWSEGMENTF310_FGF34_FILLPOLYGON F3J0_RAISE F3M_TEXTWIDTH F3Q_WFLUSHGETACTIVEWINDOWWCOLOLV+SETBGSETBGRGB SETCANVASSETCLIP SETCURSOR SETDISPLAY SETDRAWOPSETFGSETFGRGB SETFILLSTYLESETFONTSETGAMMA SETGEOMETRY SETHEIGHTSETICONICSTATE SETICONIMAGE SETICONLABEL SETICONPOSSETIMAGE SETLEADING SETLINESTYLE SETLINEWIDTH SETPATTERNSETPATTERNBITS SETPOINTERSETWIDTHSETWINDOWLABEL SET_MUTABLESTRIMAGE3SYSERR+TMP_STR TOGGLE_FGBGTOPACT? TRACEBK TRANSLATE_KEY_EVENT TRCMP3 TREFCMPp TRYFONT TVALCMP TVCMP4 TVTBL_ASGN UNSETCLIPVARARGSWALERT WARPPOINTERWATTRIBWCLOSEWFLUSH WFLUSHALLWGETCHEWGETCHNE WGETEVENTWGETQWGETSTRGWGOTO WLONGREADWMAPWRITEGIFWSYNCXCOLORXDIS? XDISPp  XLFD_FIELDXYROWCOL  VMS.BCKO[V9.BIN]RT.OLB;1E;1 L s+  O00_DIVIDE  O01_MINUS O02_MOD O03_MULT O04_NEG  O05_NUMBER O06_PLUS O07_POWR O080_ASGN O081_ASGN O082_ASGN O083_ASGNO08_ASGN O090_RASGN O091_RASGN O092_RASGN O093_RASGN O094_RASGN O095_RASGN O096_RASGN O097_RASGN O09_RASGN O0A0_RSWAP} O0A2_RSWAPS O0A3_RSWAPr O0A4_RSWAPl O0A5_RSWAPf O0A6_RSWAP` O0A7_RSWAPZ O0A8_RSWAPREADIMAGEF190_MAPF19_MAPz F1A0_REPLF1A_REPLm F1B0_REVERSEs F1B_REVERSE^ F1C0_RIGHTe F1C_RIGHTQ F1D0_TRIM+INVOKECIRUNERRISETBGISETFGJ  K050_DATELINEX  K0H0_FEATURESKBHITLCOLORLEXCMP LOADIMAGELONGREAD ( LONGWRITE LOWERWINDOWMAKEICONF  MARKBLOCKF MARKPTR2 MEMB hMEMCOPY hMEMFILL MILLISECMOVERESIZEWINDOW MOVEWINDOWMUL MUTABLE_COLORF MVC MYSTRNCPY NATIVECOLORNEG  NEW_CONTEXT NTHCMPKNXTTAB.+GETSTRGGETVAR GETVISUALGET_MUTABLE_NAME? GET_NAMEp  GO_VIRTUAL HANDLE_MISCHASH2 HCHAIN2 HGFIRST2 HGNEXT2 HGROW2 HMAKE2 HSHRINKICONHOST ICON_GCVTIDELAY IIPOW3INITF  INITALLOC3INTTRAP+ GETICONIC GETICONPOSGETIMAGEGETIMSTR GETITIME GETLINESTYLE GETPATTERNGETPIXEL GETPIXEL_INITGETPOINTERNAMEGETPOSEVQUESUBF00_ABSF01_CSET F02_INTEGER F03_REAL F04_STRING F05_NUMERICF06_PROC+ F07_SIN# F08_COS F09_TAN F0A_ACOS F0B_ASIN F0C_EXP F0D_SQRT F0E_DTOR F0F_RTOD F0G_ATAN F0H0_LOG F0H_LOG F0I_ARGS  F0J0_CHAR F0J_CHAR  F0K0_COLLECT  F0K_COLLECT  F0L0_COPY  F0L1_COPY  F0L2_COPYLEARm F0N_ERRORCLEARa F0O_IANDY F0P_IORV_NAME1+ SETLINEWIDTH SETPATTERNSETPATTERNBITS SETPOINTERSETSIZESETWIDTHSETWINDOWLABEL SET_MUTABLESIG_RSMSI_I2SSI_S2I? STRACESTRIMAGESTRNCHRSTRPRC  STRRESERVESUB SUBS_ASGNF SWEEP3SYSERR DOCIRCLESDOIMAGE DO_CONFIG DP_PNMCMP DRAWCURVECDRUNERR DUMPIMAGE3ENVSET3ENV_INTEQEQUIV ERASEAREA3ERR3ERRORCERR_MSG+GETBG GETCANVASGETCHGETCHE GETCTIME GETDEFAULT GETDISPLAY GETDRAWOPGETFG GETFNTNAMQF_1I0IF_1JCF_1J0F_1KF_1K0F_1K1{F_1LXF_1L0pF_1MjF_1M0cF_1N[F_1OTF_1O0LF_1O1EF_1P>F_1P07F_1Q0F_1R*F_1R0#F_1SF_1S0F_1TF_1T0F_1UF_1U0F_1VF_1WF_1W0F_1XF_1YF_1ZF_1Z0F_20{F_200sF_21lF_210dF_22]F_23VF_230OF_24HF_240AF_25291F_2ASYSF_0L0 F_0S F_0Y0` F_150 F_1C F_1IF_25kF_2AF_2H0F_2N0'F_2T0$F_2Z0"F_350F_3B0F_3H0F_3N0O_096 O_0A91O_0B3/O_0Z O_11Z XWINDOWJ F3R0_WRITEIMAGEF3R_WRITEIMAGE?  FAILTRACE3FATALERRp FIELDCMPFILEARGp FINDFONTp FONTCMP3FPETRAP FREECOLORp  FREE_BINDINGp  FREE_CONTEXTp  FREE_DISPLAY FREE_MUTABLEp  FREE_WINDOWp  FREE_XCOLORp  FREE_XCOLORSGENCURVEGETACTIVEWINDOW  F3N0_UNCOUPLE F3N_UNCOUPLE F3O0_WATTRIB F3O_WATTRIB F3P0_WDEFAULT F3P_WDEFAULT F3Q0_WFLUSH F3Q_WFLUSH > F3J_RAISE$F3K0_READIMAGE- F3K_READIMAGE F3L0_WSYNC F3L_WSYNC F3M0_TEXTWIDTH F3M_TEXTWIDTH e F3G0_PENDINGm F3G_PENDINGT F3H0_PIXEL\ F3H_PIXELFF3I0_QUERYPOINTERMF3I_QUERYPOINTER7 F3J0_RAISE VMS.BCKO[V9.BIN]RT.OLB;1E;1 ѕF_3OF_3O0F_3PF_3P0F_3QF_3Q0F_3RF_3R03INITINVOKER KEYWORDJ K_050X K_0H0LMISC (LONG hMEMORY OARITHOASGN O_00 O_01 O_02 O_03 O_04 O_05 O_06 O_07O_08O_080O_081O_082O_083O_09O_090O_091O_092O_093O_094O_095O_096O_0A6`O_0A7ZO_0A8SO_0A9 F3C_PALETTECHARSF3D0_PALETTECOLORF3D_PALETTECOLORF3E0_PALETTEKEYsF3E_PALETTEKEYu F3F0_PATTERN| F3F_PATTERN  F390_GOTOXY F39_GOTOXY F3A0_LOWER F3A_LOWER F3B0_NEWCOLOR F3B_NEWCOLORF3C0_PALETTECHARSMF_3IFF_3I0>F_3J7F_3J0-F_3K$F_3K0F_3LF_3L0F_3M F_3M0F_3NF_3N0 F350_FILLRECTANGLEF35_FILLRECTANGLE F360_FONTF36_FONTF370_FREECOLOR F37_FREECOLOR F380_GOTORC F38_GOTORCF_3CF_3C0F_3DF_3D0sF_3EF_3E0|F_3FuF_3F0mF_3GeF_3G0\F_3HTF_3H0XF31_FG< F320_FILLARCE F32_FILLARC-F330_FILLCIRCLE4F33_FILLCIRCLEF340_FILLPOLYGON$F34_FILLPOLYGONlF2Y0_DRAWSTRINGF2Y_DRAWSTRINGoF2Z0_ERASEAREAv F2Z_ERASEAREA` F300_EVENTg F30_EVENTOF310_FGF_36F_360F_37F_370F_38F_380F_39F_390F_3AF_3A0F_3BF_3B0 F2U_DRAWPOINTF2V0_DRAWPOLYGONF2V_DRAWPOLYGONF2W0_DRAWRECTANGLEF2W_DRAWRECTANGLEF2X0_DRAWSEGMENTF2X_DRAWSEGMENTF2R0_DRAWCURVE F2R_DRAWCURVEF2S0_DRAWIMAGE F2S_DRAWIMAGE F2T0_DRAWLINE F2T_DRAWLINEF2U0_DRAWPOINTgF_30`F_300XF_31OF_310EF_32<F_3204F_33-F_330$F_34F_340F_35 F_350H F2N_COPYAREA2 F2O0_COUPLE9 F2O_COUPLE F2P0_DRAWARC( F2P_DRAWARCF2Q0_DRAWCIRCLEF2Q_DRAWCIRCLEF_2UF_2U0F_2VF_2V0F_2WF_2W0F_2XF_2X0F_2YlF_2Y0vF_2ZoF_2Z0F2J_CLIPt F2K0_CLONE| F2K_CLONEa F2L0_COLORj F2L_COLORQF2M0_COLORVALUEYF2M_COLORVALUE@ F2N0_COPYAREAW VMS.BCKO[V9.BIN]RT.OLB;1E;1 u&F1U_SET F1V_TABLE F1W0_CLOSE F1W_CLOSEF1X_EXIT F1Y_GETENV F1Z0_OPENF1Z_OPEN{ F200_READF20_READl F210_READSs F21_READSd F22_REMOVEV F230_RENAME] F23_RENAMEH F240_SEEKOF24_SEEKA F25_SYSTEM4 F260_WHERE: F26_WHERE% F270_STOP F271_STOP+F27_STOP F280_WRITE F281_WRITE F28_WRITE F290_WRITES F291_WRITESKBHIT F2D_CHDIR F2E_DELAY9F_2O2F_2O0(F_2PF_2P0F_2QF_2Q0F_2RF_2R0F_2SF_2S0F_2TF_2T0EF1P_LIST7 F1Q_MEMBER* F1R0_PULL0F1R_PULL F1S0_PUSH#F1S_PUSHF1T0_PUTF1T_PUTF1U0_SET+ READ_A_CHAR REALTOBIGREBINDRECTARGSREDIRECTREMAPRESETFG RESIZEPIXMAPRETDEREFRGBKEY RIPOWRTOS? RTRACE LSALLOCF SCOLLECT3SEGVTRAP+PUTSTRQEVENTF QLCMPQSEARCH QUERY_POINTERQUERY_ROOTPOINTERRADIX RAISEWINDOWREADGIF READIMAGE$, GETFNTNAM GETPOS INTTRAP NXTTAB O0A0_RSWAP O0A8_RSWAP2 O0AG_RSWAP0 O0B6_SWAP.O0R_NEQV O0Z5_RANDOMY O112_SUBSC PARSEFONT-PUSHACT* READIMAGE)SEGVTRAP SETLINESTYLESYSERRWMAP XYROWCOL;F34_FILLPOLYGON GETACTIVEWINDOW+XYROWCOL+ PARSEGEOMETRY PARSEPATTERNPCLOSE POLLEVENTPOPACTPOPENF POSTQUAL PRINTABLE3 PSTRNMCMPPUSHACT+ O0B7_SWAP O0B8_SWAPO0B_SWAP  O0C0_CATER  O0C_CATER  O0D0_LCONCAT  O0D_LCONCAT  O0E_NUMEQ\ O0F_NUMGE  O0G_NUMGT~  O0H_NUMLEw  O0I_NUMLTp  O0J_NUMNEb  O0K0_LEXEQi  O0K_LEXEQS  O0L0_LEXNE[  O0L_LEXNEF  O0M0_LEXGEL  O0M_LEXGE9  O0N0_LEXGT?  O0N_LEXGT,  O0O0_LEXLE2  O0O_LEXLE  O0P0_LEXLT O0P_LEXLT O0Q_EQV O0R_NEQV O0Z3_RANDOMx O0Z4_RANDOMq O0Z5_RANDOMSUBSCO_0B4O_0B5O_0B6O_0B7O_0B8 O_0C O_0C0 O_0D O_0D0 O_0E\O_0F O_0G~ O_0Hw O_0Ip O_0Ji O_0Kb O_0K0[ O_0LS O_0L0L O_0MF O_0M0? O_0N9 O_0N02 O_0O, O_0O0O_0P O_0P0 O_0Q O_0R? O_0S8 O_0S01 O_0T* O_0U" O_0U0 O_0V O_0W O_0X O_0X0O_0YO_0Y0O_0ZO_100NO_101DO_11SYS+ O0A_RSWAP O0B0_SWAP O0B1_SWAP O0B2_SWAP O0B3_SWAP O0B4_SWAP O0B5_SWAP O0B6_SWAPMO_0AAGO_0ABAO_0AC;O_0AD5O_0AE/O_0AF)O_0AGO_0BO_0B0O_0B1O_0B2O_0B3+S O0A9_RSWAPM O0AA_RSWAPG O0AB_RSWAPA O0AC_RSWAP; O0AD_RSWAP5 O0AE_RSWAP/ O0AF_RSWAP) O0AG_RSWAP41PՐV1.01INITV1.025-JUL-1994 08:28VAX C V3.2-044`P'dPcPbPaaP3PPNOERRBUF PTRACEPCOEXPSIZEPSTRSIZE#PHEAPSIZE,PBLOCKSIZE6PBLKSIZE>PSTATSIZEGPSTATINCRPPMSTKSIZEYPQLSIZE`PMAXMEMgPICONCOREpP: sP=vPenvironment variable out of rangePenvironment variable out of rangePenvironment variable not numericPerror in startup code %s Pe5rror in startup code %s: %s PSystem error P in startup code1P at line %d in %sCP %s HP Termination dump:  C$V_CTYPEDEFSDATAINITFATALERRC_EXITSYSERRERRORSEGVTRAPFPETRAPENV_INTENVSET INITALLOCXDISPENVSETALCACTIVSEGVTRAPFPETRAPFATALERRERR_MSGERRORENV_INTDATAINITC_EXITPUSHACTMILLISECSTRCMPMALLOCGETENVEXITABORTSTRLENSTRNCATSTx B VMS.BCKO[V9.BIN]RT.OLB;1E;1 56RNCPYSETBUFFFLUSHFPRINTFSIGNALASSIGN_CHANNEL_TO_TERMINALREDIRECT]Pco-expression #%ld (%ld) wPcall to 'err' P&erroutP&inputP&outputP PabcdefghijklmnopqrstuvwxyzPrPABCDEFGHIJKLMNOPQRSTUVWXYZP ^XwTEWAV<UЬ<<SEGVTRAP SIGNALFPETRAPSIGNALDATAINITЬENVSETxddx`` INITALLOC~MALLOCPd<1~7ERR_MSGdPdPdPԠ dPԠdP}L,dPި dPԠ$dRALCACTIVP4|RԥRSERR_MSGddPUSHACTЏgd}g2ݬ ݬREDIRECTASSIGN_CHANNEL_TO_TERMINALiSETBUF8P<~MALLOCPS<1PRԥRPERR_MSGSSETBUFMILLISECP<^RATUߢGETENVPi|~ߢ ENV_INTSc~dߢc~\lߢc~ߵߢ#c~ߵߢ,c~ߵߢ6c~cߢ>c~8bߢGc~`ߢPc~aߢYc~ߢ`cߢgGETENVP` SIGNALqP^Tc~ݬ߭STRNCPY߭STRLENRbPc~ߤp߭STRNCATSc߭bPc~ݬ߭c߭bPc~ߤs߭c߭bPc~ݬ ߭c͘uERROR^XZS[ݬGETENVPYiYUe-լ  Yݬߨv"[U Pe+UePPP@j1ެWQgP T TP QP{TPQPQVQgP TTTPTQPQ{TPPQQTP0PRSVP PTPRPgYݬ9ϐ SRSePPP@jŕeYݬȺkS[^<RP\\PERR_MSG^<R<@P\\PERR_MSG^<R<.P\\PERR_MSG|^TFV2URլݬbFPRINTFݬݬbFPRINTFbFFLUSHqABORTЏSզYQHbFPRINTFbFFLUSHХPݠݠ]bFPRINTFbFFLUSHb*&jXDISPSEXITP|^TFV2UScFPRINTFRbj : cbrst1cbݬCcFPRINTFcFFLUSHqABORTЏRզYQHcFPRINTFcFFLUSHХPݠݠ]cFPRINTFcFFLUSHc*&jXDISPREXIT<^UFT2SRդYQHbFPRINTFbFFLUSHУPݠݠ]bFPRINTFbFFLUSHb*&jXDISPEXIT^\wSYSERRP^<RԢݬERR_MSG^ݼSTRCMP;^TLX@Y?[>W=Z:S9R8\1V0U Ć ĎR INIT init envsetenv_errXenv_int\fpetrap$inttrap#segvtrap# error syserr c_exit  err<fatalerr \ pstrnmcmppdatainit( t< G INIT <ENVSET XENV_INT \FPETRAP INTTRAP SEGVTRAP |ERROR |SYSERR <C_EXIT = ERR <FATALERR \ PSTRNMCMP pDATAINIT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBL>LST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VAL?K_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRT@OTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS PROG_NAMEERRTABSET_UP$CHAR_STRING_CONSTANTS ROOTSTRING ROOTBLOCKMEMSIZE ĕԫSTRLENPgiĝeĞfĠGHġHIļIԨ}h;MOľOP}hJ}hKww1@^!!V1.0M1F_1EV1.025-JUL-1994 08:38VAX C V3.2-044P|^eU=VѬЬPDEREF PЏѬЬPDEREF PЏѬЬPDEREF PЏլDEREFЏeeѭ}@䭴ѭ=Ц6CNV_STRPg~ERR_MSGЭePѭѭJ߭ CNV_C_INTP#ݭݭCVPOSPѭЭePe~ERR_MSD1M)V1.03ERRMSGV1.025-JUL-1994 08:28VAX C V3.2-044P Run-time error %d PFile %s; Line %d 'P Run-time error %d in startup code KP%s OPoffending value: aPTrace back: P^UjY<T;X5R4W3SVլ6b}Nh7g!PЬbЬP}Lhg P}`hgecP``bРcP`iAդp0bߥfFPRINTFr-tsߥfFPRINTFפݬߥi VMS.BCKO[V9.BIN]RT.OLB;1E;1 fDE'fFPRINTFcߥKfFPRINTFg$ߥOfFPRINTFhfOUTIMAGEf FPUTCo ݏC_EXITiqR ERRMSGerr_msgirunerr4drunerr? sk C$V_CTYPEDEFSERR_MSGTRACEBKALCREALOUTIMAGEC_EXITABORTFFLUSHFPUTCFPRINTF ERR_MSG FIRUNERR DRUNERR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTGBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTHK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TIOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALSJ N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSERRTABn$CHAR_STRING_CONSTANTSABORTݏC_EXITߥafFPRINTF&iTRACEBKfFFLUSHqABORTݏC_EXIT^NRЬ6ЬЏ27|~ERR_MSG^NRp~ALCREALPЬ6PЏb7|~ERR_MSGwwL1\V1.01FSTRV1.025-JUL-1994 08:28VAX C V3.2-044QR FSTR nxttab s C$V_CTYPEDEFS |NXTTAB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPMTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCSN(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2OMAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRPBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP|^ެRвPެ UPe<Ѽ5eTѲTвPü вPРѲT вPѼмVV  ЬU޼SecTüeRzRP{cPQPPTeЦwwR1zV1.02F_1D0V1.025-JUL-1994 08:28VAX C V3.2-044XR F_1D0 F1d0_trim s  C$V_CTYPEDEFS  F1D0_TRIM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_STYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(X} VMS.BCKO[V9.BIN]RT.OLB;1E;1 DSTRPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPSU2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSVNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ެWgRbXXVVV1fTTPPUU QЬRТRSTRR2RPxPPxPPPSUQcRRGgTVXV:fRRPPSS UЬPРPQRPP2PPxPPxPPPQSUaPPЬ SЬRТXcwwX1 V1.01F_1DV1.025-JUL-1994 08:29VAX C V3.2-044R F_1DF1d_trimL s@  C$V_CTYPEDEFSDEREFERR_MSG DEF_TCSETCNV_STR F1D_TRIML$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESYSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSZTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE[K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSI\ZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOM]E GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^eXѬЬRDEREF PЏլğDEREFЏhhğCNV_STRPĚg~ERR_MSGЭhP̟,̟ DEF_TCSETP̚h~ERR_MSGЭhPЭVVUUUxeTTPPQQ WЭRSTRR2RRxRPxPPPSQWcRRBPUVU6eRRPPSS TЭPQRPP2PPxPPxPPPQSTaPPЬ RЭȢVbЭhPww_1`_V1.02F_1C0V1.025-JUL-1994 08:29VAX C V3.2-044}R F_1C0 F1c0_right s:  C$V_CTYPEDEFSIRUNERRERR_MSGALCSTR  F1C0_RIGHT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP`INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEaGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINbKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZEST[ VMS.BCKO[V9.BIN]RT.OLB;1E;1 bcKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRdAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^լ ݬ ~IRUNERRPЬRb}0bЬ TЬRTbЬSbRTRTcPݬ ALCSTRPV |~ERR_MSGPЬScZУWVRެ UeVSRS8ZWYVXWPPY!eVSRSZWTPPT eVQRQRXЬ TTVQЬRbSSPSTTSSRSR pqSRSRЬRVЬ bPwwf1V1.01F_1CV1.025-JUL-1994 08:29VAX C V3.2-044P^eYѬЬRDEREF ЏѬЬRDEREF ЏլDEREF PЏiiCNV_STRPg~ERR_MSGiP߭ DEF_C_INTPe~ERR_MSGiP0DEF_TSTRPg~ERR_MSGiPխݭ~IRUNERRiP }0ѭgЬ SRíRЭciPݭALCSTRPU|~ERR_MSGiPXVURUSRS8XVWVPPW"USRSXVTR F_1C F1c_right su  C$V_CTYPEDEFSDEREFIRUNERRERR_MSGDEF_TSTR DEF_C_INTCNV_STRALCSTR  F1C_RIGHT$CODE$DATASTDINSTDOUThSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDiSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RANj K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMEkSEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATESl GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSePPT UQRQUSRSЭRRUQSSPSRRSSRSR pqSRSRЬ RUЭbiPwwn10V1.02F_1B0V1.025-JUL-1994 08:29VAX C V3.2-044`R F_1B0 F1b0_reverse_ s  C$V_CTYPEDEFSERR_MSGALCSTR F1B0_REVERSE_$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_oTYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLISTp(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRqLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME VMS.BCKO[V9.BIN]RT.OLB;1E;1 }qrSTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSpP ^ЬP`RЬSRݠALCSTRP |~ERR_MSGPЬSRcУPRPRQPQP`SaQRQSbPQPwwt1V1.01F_1BV1.025-JUL-1994 08:29VAX C V3.2-044wR F_1B F1b_reverse s4  C$V_CTYPEDEFSDEREFERR_MSGCNV_STRALCSTR  F1B_REVERSE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPuINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDvSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEKw_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZExSTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOMEy GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eTլDEREFЏd잭dCNV_STRPg~ERR_MSGЭdPЭRЬ SRݭALCSTRP|~ERR_MSGЭdPЬ SRcУPRPRQPQ`SaQRQSbPQЭdPww{1V1.02F_1A0V1.025-JUL-1994 08:30VAX C V3.2-044zR F_1A0 F1a0_repl s8  C$V_CTYPEDEFSIRUNERRERR_MSGALCSTRMEMFILL F1A0_REPL$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TY|PINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD}SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE~K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^լݬ~IRUNERRPмTլT }1 PŬTVVݬ~IRUNERRPVALCSTRPS |~ERR_MSGPЬ U/s/`R Y<@,i 9fpÚwtJ6 yu!tʰa UjA;S.5J*b+3R.뇖Z! a>MI0U;f x+NCr =#$vWԹnxQ̈&誎 zfjlBh$Ս?.LmUz9bJH!a@P Zd=E {sϖ#pA75gyRbmFv>MJ #m~īT2XV (L*}8‚FAaC3@oX/q #A@s*Lt"n94IgC?c3.d)Rf{c˓'m#ZJ,9pxKK D"lW*dzwDotlAy q}iPJ̖+_pB loZ-KS`l s^|-fv,8=\\nt{h^ 9{Tv,\n4`AESUnFp1 F1Z `o< [XTPrq- tAG^ Invr5&kSLJobyK} $^ YW<6<ŀOTؖu C :AK O\M6U]늖IV_6KʴRZpTi57WZLG^AWG=8$2XоU`"Ub$^yKLRխ0iʼđ_gBiNXD7➒\?[$@<i>aȑ!S6ٱ:x)5 KBzܖvDZ͙w`\*m9#oo`B*CUJJ6ם/ 6tMFCݒ33ƻr ,NS0rRFrlR(H/y+8zٵ b,d(\D@[Zs6=]P9mMZDƶ*ڃ÷fB]TUYv'1|uz1(#=3ɱKOCN%k?Q!dnzU)Hld556P;}<7 b/2CA*  s:ux05#b5b*c [f/^DL(XUic' RQaAVVlMC0NQ?^c< rf azf ]oP*NH@L ΗO\r=vX 6 Z F.< LJVRy޺SKfYHGpC:4rjPrX "A_ b#OE35aQ5?Xۻ VNPBpۍ >Y#ЬG@ұ<"Z1|Ά#{- RN6X,J_jD( Cq6Jd)Y2y(7ccޔgTSM\P^+z[_2ug 3%/B+F[/ 35j`IF[a/j,D/Ab]RJ?ݶVOAEsOG2EC=RuFHjC 6'y T~1  ZO>NFUtYPa퓑js56qŷIoN:r7@1`5O*eKnURh'LXMH6IGnJU=R? Q/H.ϵYf?swG\%o QaQEa:@H@GfӳXJ]ŃPHW_/CJeͧiiM6-r?!2"I !Ͳ&H*!fde2s]&zuO&6F9I L?\](";}MGwz3/؍A] k7;tq?=G#I h?{ Q\hHoaNAOu^"oLzE(D.Xyn2+/2#\-A=-9xw=%hfLFZqQ^2 ngǝ\$vjB|S|,UR<# h2E1MW@L9w<:)caHuLbjR򤌋.`3V4ɾWK|39[i!GTy 5_\oCZp &I/m bHEGHeQaqGveJh5 es9/#AB^4WLwg>EbzyH&k\vIUy|fAI eˣ%_XH0jiF&OAa)SGWz}`)L[SwJOxCRWGJC^ RF L&=m^!pwb'@euf14-q_ 4mV5ݺFTUBy39[I%Z kbdETzlᑽXV8R5#.ɋ7 -sЗo/$;k,mj fu`te4U7Õ3imP[J+y,ggI(3vp1`3<7vŘ[4<1z8E#q%|"z阜>~-5,ğp{gΕ)aKɕ<|y<ۃkόѝ;"f568=1)g Ε1:vp-u4:*&g;9$eva867%*m,dn&|0a}de$Ktl3w$)bo' zi3a2v$\iY7d%#-af?$}% fy`L+6d!;Sfu>!/l!,x16.] fb, [=1M"+bmpsp>?4S}ف-4!t?J HLvC0gwR= =<۹qv`_nH)l2,4u8aSr4U~gzE'ek&*!m1Ja:u~0]'s5V jؾ#z?"xPn_,,.d0.6`~v`l|swg&p&@`eA`Co"a2"9JBр\?'_tI`nu zZyh*d:)XD6_ߥ^Fnf:>-(zi}ŸOnzi?3Bpd,`230z|("G, e{}@+e2j˛0ߞ3[H?50MȉoaZIىefi/`'X(6zz5"s%Gb':vK-d<Ņwoqko.x:r$?pR&M,C'%eZد} Mx^s i~5!l|h#o A i\MSV"NH))+2K Dlrv-ml|R(k"j9`)i\6uz\W-'`b28y%" d9ruFPp0 f[ ICm7J=R-s/͕1:T2?h f ќo* oB;-CCp5'H´$k5ppe;@c Ѝk gPEiN˦X.=<s0?C[/0 נiif[QcJVo7ms.◂@)Nx #l-h3Q,p592,2HYl5~5~(ۙQ >͓NO*ЩDLRlaz5g!/çr\RAw<;e=u׫T5"nX1:ęOnZvTI)숽i#X6hDI9'G^@'Iv=7"YD#Bl͗_Aμ`eh P8Ug/+&3 &yg+s(=q2/6)f:+4lg3.\VRn-/<>*=$'vzd$nz_p/n2Bze5)>8vJX,isc2e tpxknB!w=*Tb# cr(Id\8hfHzn/b*k$,Na'r$`6zx; 5(|qw1c Vivl j9#ky~f5Gg 9mN4|`ok8q=DQi>n:0>N_V"-+`v nuk0!_ xss+&d8'32W-{GRv`,f?xfh"|Bt9fe~Qbg&01KK<#4+ghmWu)^cct{&g7wqË/3v;Dž(PIx|ixx4Jx5.~irrlf0O =9?94lĪ!e>7;>-=;lQd%Pon ,2{q<C! !e,`*XtȉN3qdZ%wpI*-41:f*0ۉ# KGt5vkj|9Uz,r5Ԃ.ҽ7fVzc ?>vd(i-mr@dֆ!7fwxɚcNv;k%=*D;x-z&QGq6q$l?m֟h_mK&Z#%ljdy0 %`be*<[F܃6F!-qk|sf V-?,6d[yi|g8h}UUlv|Ov-i|+i"5 2<&@wv, BΣp:&L>Achv1yf8@%g yi0ZmIBaDs SKPk}u}cn#l"#d{+;=Q}Мl`f:{;gt"1': n#ri`Z!tn&Zztjf{|34,'z>"""=Rh* ov3aƗh"y5] i7;7Ҡs'(IʮU]Q@D\N(ю[U%ͿbLa0Lo6p-b!‰?mS9ċ}m. ﱹ܃8lTdry쮙 t{wq3h`ϭ;r'(sg rt}bu?3yilmaps3#0>o7j̤m"&?ryeqn)bb&m61~|4&)m(+awd.`|cdm8"=';t/o'?Li،7#?FT-7yhCPf%4-$^l>oZ`5cv"jQt?R Kg  BKKFZA?}"u,!5m5;vXi}׽fBf:E??y:gu|Z* zpeʈn3Un۩s6}gj pUion`}wՈa[2Orak2| jٛ3PS&u ޯ~l̺/#?xEX*= @+pS:6l12;hɁ,"oʷϑl*|"F`˶:ac(ot12ifcQΞ;r/mnq21ɥxx3KA^MMJ#h)`yCC3qasЈA| QNg[y귌_ 7建m&KcoQIKUg-md,4RW@h||KW )髋ppٮ10ksay&\Mc\YNFz|?Xb'_w]S8H_ BG6jyo$X[ X "I{cJOs";/!!pD a#tU[1jfQz_[:t`U&p^5pe7u":P^ș_gsĩB]@ , ;"~|BP4FDvҰx6 KY[}R@R4&7EbtOE+M @`ˤ!tNkZlƖTQP_ATO&4 !=kEIKWS4>&M@1*K &2j-9/hABv3}gȠH "7dTM}r` "-8hV3d8F/s8 VMS.BCKO[V9.BIN]RT.OLB;1E;1 6SVeЬUХRTVb~SMEMFILL"P׬TWPRQWPP׬Pww1PV1.01F_1AV1.025-JUL-1994 08:30VAX C V3.2-044R F_1AF1a_replp sj  C$V_CTYPEDEFSDEREFIRUNERRERR_MSGCNV_STR CNV_C_INTALCSTRMEMFILL F1A_REPLp$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^eXѬЬRDEREF PЏլ蟼DEREFЏhh蟭CNV_STRP蚏g~ERR_MSGЭhP߭ CNV_C_INTPe~ERR_MSGЭhPխݭ~IRUNERRЭhPЭTխT}1߼ ЭhPŭTVVݭ~IRUNERRЭhPVALCSTRPS|~ERR_MSGЭhPЬ USVeЭRTVb~SMEMFILL!׭TWPRQWPP׭ЭhPww1l7V1.02F_190V1.025-JUL-1994 08:30VAX C V3.2-044uR F_190F190_map s4 C$V_CTYPEDEFSERR_MSGALCSTR F190_MAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMS4P^KWJVUЬ RfbѦЬRgbѧoЬ S}cfЬR}bgcb~ERR_MSGPЬ TФSЬTФRPTPdTPQެ TQPAcPP2PPAb@eQQռ }1PЬTмRRdRALCSTRP |~ERR_MSGPЬSУQЬSУPRSRSPTPSS2SSCedRSRSPwwH}v VMS.BCKO[V9.BIN]RT.OLB;1E;1 1V1.01F_19V1.025-JUL-1994 08:30VAX C V3.2-044P$^eXKVJWUѬЬRDEREF PЏѬЬRDEREF PЏլ䟼DEREFЏhܞh䟭CNV_STRP䚏g~ERR_MSGЭhPODEF_STRP욏g~ERR_MSGЭhPHDEF_STRPg~ERR_MSGЭhPgѧ fѦ^}g}fѭ~ERR_MSGЭhPЭSЭRPeTPdTPQխAcPP2PPAb@eQQխ}1 ЭhPЬ SЭRRcRALCSTRP|~R F_19F19_map sq  C$V_CTYPEDEFSDEREFERR_MSGDEF_STRCNV_STRALCSTR F19_MAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSNERR_MSGЭhPЭQЬ SУPRSRSPTPSS2SSCedRSRSЭhPww1, V1.02F_180V1.025-JUL-1994 08:31VAX C V3.2-044|R F_180 F180_left s:  C$V_CTYPEDEFSIRUNERRERR_MSGALCSTR F180_LEFT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^լ ݬ ~IRUNERRPЬRb}0bЬSѬ cЬRУЬ bPݬ ALCSTRPU |~ERR_MSGPЬScWУT URRU)WTSPSPPTRUPprPTRURUUQЬRbVТPV Ь VVRVR VRVRЬRUЬ bPwwKM` VMS.BCKO[V9.BIN]RT.OLB;1E;1 j1P# V1.01F_18V1.025-JUL-1994 08:31VAX C V3.2-044P^eXѬЬRDEREF ЏѬЬRDEREF ЏլDEREF PЏhhCNV_STRPg~ERR_MSGhP߭ DEF_C_INTPe~ERR_MSGhP0DEF_TSTRPg~ERR_MSGhPխݭ~IRUNERRhP }0ѭЬ RЭbhPݭALCSTRPT|~ERR_MSGhPWSTRRT)WSVPVPPSRTPprPSRTѵR F_18F18_left su  C$V_CTYPEDEFSDEREFIRUNERRERR_MSGDEF_TSTR DEF_C_INTCNV_STRALCSTR F18_LEFT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSIRTTQUPUЭUURURPURURЬ RTЭbhPww1T V1.02F_170V1.025-JUL-1994 08:31VAX C V3.2-044P^U[ZYVլ sެWЧUxVRBeBeCNV_INTP޼PB`e~ERR_MSGPV4xVSgQCTVPxPP@Rdb޼RCb~ERR_MSGPVV ЬSݼALCSTRP |~ERR_MSGPмլ BPЬRbbCNV_INTPbe~ERR_MSGPЬRѢb~ERR_MSGPЬUUx RBeVЬRbWТTЬRТSTW1wNXTTABUPSRSbbXXPPP1 n?P׭Ь1Ь1߭߭V߭߭e1RTWd RTTWd íRPP1R F_170 F170_entab s  C$V_CTYPEDEFSNXTTABERR_MSGCNV_INTALCSTR  F170_ENTAB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS?Э߭߭V߭߭ePѭP,Э߭߭)ם VMS.BCKO[V9.BIN]RT.OLB;1E;1 iV߭߭eѭR ֭ЭPSSѭR"Y Э߭߭V߭߭eѭRЭP֭ѳPRPSPS `ЭP֭PRRPXXP@jPhP֭TW1Y ЬRâSbTä SRRkS PЬTSã RRkФ }dPVP>^N>>N>>>>>>>>>>>>>>>>>>rww1pߡ!V1.0L2F_3L0V1.025-JUL-1994 08:42VAX C V3.2-044lR F_3L0 F3l0_WSyncq s) C$V_CTYPEDEFSWSYNC POLLEVENTERR_MSG F3L0_WSYNCq$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP1p V1.01F_17V1.025-JUL-1994 08:31VAX C V3.2-044P^e[Ѭ V.PRxRRR~MALLOCPV<1~ERR_MSGPRެTRd"SxRP@xRP@cDEREFRRdլDEREF PЏRRSSSkffkCNV_STRP'g~ERR_MSGfkRVR VFREEPZTRTR1PxTRPB`B`CNV_INTP+PB`e~ERR_MSGfkPVP VFREEPTFxTQRASTPxPP@Pc`'Ab~ERR_MSGfkPVP VFREEPTPTP1cЬ RݦALCSTRP"|~ERR_MSGfkRVR VFREEPЦ ѬhPCNV_INTP'e~ERR_MSGfkRVR VFREEPѦ'~ERR_MSGfkRVR VFREEPRxRRUBeW XЦ TЬ RТSTX1{NXTTABUPSRSbbYYPPP1 *?P׭1 1߭߭W߭߭e1RTXd RTTXd íRPP1Э߭߭W߭߭ePѭP,Э߭߭W߭߭eѭR ֭ЭPSSѭR"Z Э߭߭W߭߭eѭRЭPR F_17 F17_entabp s͹  C$V_CTYPEDEFSDEREFNXTTABERR_MSGCNV_STRCNV_INTALCSTRMALLOCFREE  F17_ENTABp$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSҭPRPSPS `ЭP֭PRRPYYP@PhP֭TX1Z9Ь RâSbTä SRRUS fkRVR VFREEPЬ TSã RRUФ }dfkRVR VFREEPP>^N>>N>>>>>>>>>>>>>>>>>>rww1/+ V1.02F_160V1.025-JUL-1994 08:32VAX C V3.2-044P4^eX1YZ[}i}i}ih̞hx ~ STRRESERVEUլ|ެWVxURBfBfCNV_INTP޼PB`e~ERR_MSGЭhPU8xUSgQCTUPxPP@Rdb޼RCb~ERR_MSGЭhPUUЬSݼ ALCSTRP|~ERR_MSGЭhPм լJPЬRbbCNV_INTPbe~ERR_MSGЭhPЬRѢb~ERR_MSGЭhPЬTTxRBdUSЬ RbТЬRТѭ1PЭR֭ЭP֭`bbTTPPP1PN?PSЬ1PSR F_160 F160_detab s  C$V_CTYPEDEFSNXTTABERR_MSGCNV_INT STRRESERVEALCSTR  F160_DETAB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGJ VMS.BCKO[V9.BIN]RT.OLB;1E;1 KYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSڬ~P[׭S߭߭U߭߭NXTTABSRR$RALCSTRP|~ERR_MSGЭhPRS*PЭP֭ `SSTTP@jPhPSѭ1&[ЭhPЬTSã RRUФ } dЭhPP9))ww194 V1.01F_16V1.025-JUL-1994 08:32VAX C V3.2-044P^eX1Z[ѬS,RxRRR~MALLOCPS<1~ERR_MSGP}j}j}jRެURe&TRPxPP@xRP@dDEREFRReլ DEREF PЏ RRTTThcch CNV_STRP' g~ERR_MSGchRSR SFREEPYx ~ STRRESERVEURUR1PxUR(PB`B`CNV_INTP+(PB`e~ERR_MSGchPSP SFREEPUFxUQ(RATUPxPP@Pd`'Ab~ERR_MSGchPSP SFREEPUPUP1cЬ Rݣ ALCSTRP"|~ERR_MSGchRSR SFREEPУ ѬhP((CNV_INTP'(e~ERR_MSGchRSR SFREEPѣ,'(~ERR_MSGchRSR SFREEP(RxRR(UBeWT$ У$ Ь RТѣ 1PУR֣У P֣ `bbVVPPP1P"?PT(1PT(1YףT߭W߭߭NXTTABTUU5UALCSTRP"|~ERR_MSGchPSP SFREEPU T)УP֣ `TTVVP@kR F_16 F16_detab s  C$V_CTYPEDEFSDEREFNXTTABERR_MSGCNV_STRCNV_INT STRRESERVEALCSTRMALLOCFREE  F16_DETAB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPhPTѣ 1YchRSR SFREEPЬ UTä RRUХ } echRSR SFREEPP9))ww1`= V1.02F_150V1.025-JUL-1994 08:32VAX C V3.2-044R F_150 F150_center sS  C$V_CTYPEDEFSIRUNERRERR_MSGALCSTR  F150_CENTER$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZ>ԯ VMS.BCKO[V9.BIN]RT.OLB;1E;1 PsESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^լ ݬ ~IRUNERRPЬRb}0bЬ UЬTUdЬSUdRRxRRRUcPݬ ALCSTRPW |~ERR_MSGPЬSc[УV U WRWUXRX.[VTTPPVWUSRSPprPV WUQRQRXWQWUZQZ4[VYPVPPY!WURQR[VTPPT WURQRQZЬVfXЬ YYX"WPXTTUTYSSXSʏSTSR!WUTXSSTYSSXSʏSSTPЦRXYYXXSXSPXSXSЬRWЬ bPww1SM V1.01F_15V1.025-JUL-1994 08:33VAX C V3.2-044P^ѬЬRDEREF PЏѬЬRDEREF ЏլDEREF PЏeeCNV_STRPg~ERR_MSGeP߭ DEF_C_INTPe~ERR_MSGeP0DEF_TSTRPg~ERR_MSGePխݭ~IRUNERReP }0ѭ*Ь SíRRxRRRЭcePݭALCSTRPW|~ERR_MSGeP[VR F_15 F15_center s  C$V_CTYPEDEFSDEREFIRUNERRERR_MSGDEF_TSTR DEF_C_INTCNV_STRALCSTR  F15_CENTER$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSUWRWUXRX1[VTPTPPVWUSRSPprPV WUQRQRXWQWUZQZ4[VYPVPPY!WURQR[VTPPT WURQRQZҀXЭVVX$WPXTTUTVSSXSʏSTSR#WUTXSSTVSSXSʏSSTPRXVVXXSXS XSXSЬ RWЭbePww1(%h V1.01RSYSV1.025-JUL-1994 08:33VAX C V3.2-044PICON_HOST PSYS$NODEPVAX/VMSP^ЬSм R ~ISATTYP WFLUSHALLRPݬ FGETCPTT 2T RRPPRRݬ TUNGETCPTRP ^ScGETENVPRߣ GETENVPRޣRRSTRCPY^eTSԭЬd잭dмP ~ISATTYP WFLUSHALLլ HPݬЬ PPPRP<RRݬݭFREADPЭdSPPSPP SP^мTPЬPРRST!PݬCb~FPUTCPSSTSTPP^ݬ R RSYSgetstrgppiconhost;longread @putstrK idelay sf C$V_CTYPEDEFSSTRCPYGETENVFPUTCUNGETCFREADFGETC WFLUSHALLISA(Fko VMS.BCKO[V9.BIN]RT.OLB;1E;1 TTY WFLUSHALLISATTY DELAY_VMS GETSTRG p ICONHOST LONGREAD @PUTSTR IDELAY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTS DELAY_VMSPww1 Av V1.03RLOCALV1.025-JUL-1994 08:34VAX C V3.2-044P_NL:P_NL: Pr PaPwPrPwP-P%%can't open %s&PSYS$COMMAND2PSYS$COMMAND>PkillCPkillP^GETPIDPŏ߭ SYS$SCHDWK SYS$HIBER|^VլլP߭ LIB$GET_EFѭPRRA RZ RQRQQr#RRA RZ RQRQQwP|~|~߭ SYS$CREMBXP ߭ LIB$FREE_EFPԭԭޭЭޭ쭓 @|~|~ݭ SYS$GETDVIWP ߭ LIB$FREE_EFPЭP@ݬ߭FOPENPU߭ LIB$FREE_EFݭ SYS$DASSGNPeP PP@RQQAQZ QSPQSSUPPPb)Э ЭfSTRLENPަݬSTRLENPЬ|~|~br TPTTr SPSS LIB$SPAWNP߭ LIB$FREE_EFݭ SYS$DASSGNPUP^мR  RRBPPPSPݣFFLUSHݬFCLOSEPTw4|~|~|~|~(ݣ SYS$QIOWzP{ PQPPRxR~ݣ SYS$WFLORݣ  SYS$DASSGN LIB$FREE_EFTP^V C$V_CTYPEDEFSAST_PROC READ_A_CHARSTRCMPEXITSTRLENPERRORFFLUSHFPRINTFFCLOSEFREOPENFOPENKILL SYS$HIBER SYS$SCHDWKGETPID LIB$SPAWN SYS$DASSGN SYS$GETDVIW LIB$FREE_EF SYS$CREMBX LIB$GET_EF LIB$FREE_EF SYS$DASSGN SYS$WFLORSYS$QIOWFILEARG SYS$ASSIGNGETPIDSYS$QIOWSYS$QIO DELAY_VMS 8|POPEN PCLOSE REDIRECTYZTެST}WXFILEARGUDhP`PP<PQ?Pߦ jTgce8PgRDbP>ߦ iTRceߦiTRcePTTլ ЬRbߦjݬRFILEARGѬ ЬRbߦiݬRFILEARG<^UߥЬSЬ RBc~STRCMPPݬݬBc~FREOPENPլ+Ь R޼SBc~ߥFPRINTFݏEXITެ SެRcTcQcP@dAdcc׼ ^\߬&STRLENPެ2|~? SYS$ASSIGN^STRR RLOCAL delay_vms8 8popen  pcloseredirectfilearg!Dassign_channel_to_terminal4x read_a_char dgetch tgetcheast_proc kbhitF sѹ , <FILEARG DASSIGN_CHANNEL_TO_TERMINAL x READ_A_CHAR dGETCH tGETCHE AST_PROC KBHIT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZE(c VMS.BCKO[V9.BIN]RT.OLB;1E;1 STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERX8AMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS_PIPESH$CHAR_STRING_CONSTANTSCHANNELREQUEST_QUEUEDCHAR_AVAILABLE CHAR_TYPED*լ_|~ c|~02d~ SYS$QIOWAլ|~|~c|~:2d~ SYS$QIOWP|~|~c|~z~2d~ SYS$QIOWc(GETPIDPKILLP ߢ>PERRORPc(GETPIDPKILLP ߢCPERRORPP^ READ_A_CHAR^ READ_A_CHAR^^1|~|~AST_PROCz~2~ SYS$QIOPPY%ww1[N V1.04RWINSYSV1.025-JUL-1994 08:34VAX C V3.2-044P  P  P_ P_P_P_P_P_Pdisplay= Pdisplay=+Preverse3Phidden:Proot?PnormalFPiconicMPmaximalUPhidden\P???`PiconicgPnormalnPmaximalvPhidden}PiconPwindowProotP%d,%dPsolidPmaskedPstippledPpatternedPtexturedPopaquestippledPopaquepatternedPsolidPonoffPdashedPdoubledashPstripedP%d,%d,%d P%d,%d,%dPDISPLAYP%s P%s#P%d,%d,%d,P%s/P%s2P%s5Pstriped=PdashedDPsolidJP%sMP%sPPreverseXP%s[Proot`PwindowgPiconlP???PpP%d,%d,%dyPunknownP%ldP%d,%d,%dP%d,%d,%dP?+J @E>xFPwhitePblackP%d,%d,%dP%d,%d,%dPwwwwUUUUDDDDPPPP@ ,P@PD((D6`c PH0H0PPblackPPcheckersP PdarkgrayPPdiagonal PPgrains(P Pgray0PPgrid8P Phorizontal@P PlightgrayHPPscales C$V_CTYPEDEFSXCOLORLCOLOR LOADIMAGEREMAPSETPATTERNBITS SETPATTERNSTRIMAGE ANIMHELPER RESIZEPIXMAPSETBGRGBSETBGSETFGRGBSETFGRESETFGMOVERESIZEWINDOW MOVEWINDOW UNSETCLIPSETCLIPWMAPMAKEICON POLLEVENT HANDLE_MISCXDIS LOADIMAGEWMAP MOVEWINDOW RESIZEPIXMAP GO_VIRTUAL FREE_XCOLORS FREE_XCOLOR COPY_COLORS ALC_COLOR ALC_CENTRYALC_RGBALC_FONT FREE_DISPLAY ALC_DISPLAYTRANSLATE_KEY_EVENTREMAPLCOLORXCOLORRESETFGMOVERESIZEWINDOWSTRIMAGESETCLIP FREE_WINDOW FREE_BINDINGSETPATTERNBITS SETPATTERNWATTRIBSI_S2ISI_I2SQEVENT PARSEPATTERN PARSEGEOMETRY PARSECOLOR MYSTRNCPYGENCURVEEVQUESUB ALC_WINSTATE ALC_WBINDING ALC_CONTEXTQSEARCHC_GETFATALERR CNV_C_STRALLOCSALLOCPOWSTRCPYSTRCMPMALLOCGETENVATOLSTRLENSTRNCMP XSETWMHINTSXSETSTANDARDPROPERTIES XGETSIZEHINTS XGETWMNAME XGETWMHINTSXWRITEBITMAPFILE XWARPPOINTER XTEXTWIDTHXSYNC XSTORENAME XSTORECOLORXSETWINDOWCOLORMAP XSETSTIPPLEXSETLINEATTRIBUTES XSETICONNAME XSETFUNCTIONXSETFOREGROUNDXSETFONT XSETFILLSTYLEXSETCLIPRECTANGLES XSETCLIPMASKXSETBACKGROUND XSELECTINPUT XRESIZEWINDOWXREADBITMAPFILE XRAISEWINDOW XQUERYPOINTER XQUERYCOLOR XPUTIMAGEXPENDING XPARSECOLOR XNEXTEVENT XMOVEWINDOWXMOVERESIZEWINDOW XMAPWINDOW XLOWERWINDOWXGETWINDOWATTRIBUTES XFREEPIXMAPXFREEGCXFREEXFLUSHXFILLRECTANGLE XDRAWSTRING XDRAWPOINTXDRAWIMAGESTRINGXDESTROYWINDOW XDEFINECURSOR XCOPYPLANE XCOPYAREAPPPtrellisXP  Pvertical`P PverydarkhPPverylightpP'PwavesxP'-PwhiteP-4P.xbm9P.XBM>P.xpmCP.XPMHP.xpm.ZOP.xbmTP.xpmYP.xpm.Z`PrbPXPMP^xVЬRТ QТSÀPСDXРWÄUÈ[xfffУDZУ@Yݬ ݬС Pݠ XTEXTWIDTHPTUݬ ݬYZXUWXDRAWIMAGESTRINGݬ ݬYZX[WXDRAWIMAGESTRINGTD^WZЬPР VРUŀPЦD[РYń ňЦ PРXХ\ХXnQQ1>QPPP ?PP11Ц$D1ЬPРP `1Ѧ0 [Y XSETFUNCTIONŨPݠ8[YXSETFOREGROUNDXåD ~Ц PРP2>PP@~ݥDݮ Y XCLEARAREAXåD~Ц PРP2>PP@~ݥD[ݮYXFILLRECTANGLEЦHSЬPР P< ЦLPР8RPRͣ8R~[YXSETFOREGROUNDѦ0ݦ0[Y XSETFUNCTIONX@Ц$DЦ PРP2@Q@QnQT1'T@Ѧ0 [Y XSETFUNCTION|~TSSݮTRR[ݮ$ݮ(Y XCOPYAREAŨPݠ8[YXSETFOREGROUNDRݮS[ݮYXFILLRECTANGLEЦHSЬPР P< ЦLPР8RRͣ8R~[YXSETFOREGROUNDծ |~ݮݮ|~[ݮ(ݮ(Y XCOPYAREAѦ01lݦ0[Y XSETFUNCTION1[ЬSУ PР PРQ<ХDR 2PP~fPݠ Uݠ XDRAWSTRING¼1УPȏ`1PS*1P¼€Pݠ XMAPWINDOW¼1vPЭЭ1e1aЭPP*P1+P?PS^*1PgS+1ggS+1g1S*11S%P1PУP1P¼1S)P~PУP`P„bfУP#€PРTTiˆ ˆTjˆŒ€PРTTiŒTjŒSkSkPPЬPРPUUPլ14fPݠXPENDINGP1 P^\%P\ HANDLE_MISCP PP|A\ЏPVg VMS.BCKO[V9.BIN]RT.OLB;1E;1 ^WԮ ЬRТ RТ0ЬPР VРRRTĀ[ЦDYЫXĄZĈ|Pՠ1|C_GETP |~FATALERRЬQa%hPh@hhhhlծ 1ЬPРP`1Zߧ ݤ@ݤDYZX XDRAWSTRINGߧ ݤ@ݤDYݮ$X XDRAWSTRINGЮ0ݦ0YX XSETFUNCTIONЬUХ RRQաD,СHS< СLPР8RRͣ8R~ݡDС@PݠXSETFOREGROUNDPЮ P֮ PwЬPРP`j0YX XSETFUNCTIONЦHRЦLP͢88~YXXSETFOREGROUNDZߧݤ@ݤDYZX XDRAWSTRINGߧݤ@ݤDYݮ$X XDRAWSTRINGX XCLEARWINDOW XCLEARAREA XCHANGEGCXBELLXALLOCCOLORCELLSXICONIFYWINDOWXCREATESIMPLEWINDOWXCREATEBITMAPFROMDATA XCREATEPIXMAP XCREATEGCXCREATEFONTCURSOR XGETDEFAULT XGETSUBIMAGE XGETIMAGE XCREATEIMAGESPRINTFFREADFCLOSEFOPENFREEFREEFREEQSORTFREEFREEIDELAY XDIS WPUTC P HANDLE_MISC x POLLEVENT WGETQXSYNCЬRR[ HANDLE_MISCP1LP1@ТP`1Zߧݤ@ݤDYZX XDRAWSTRINGߧݤ@ݤDYݮ$X XDRAWSTRINGЮ0ݦ0YX XSETFUNCTIONЬTФ RRQաD,СHS< СLPР8RRͣ8R~ݡDС@PݠXSETFOREGROUNDP^UЬRТTĀRТVĄWVXSYNCeR)PR HANDLE_MISCPPSP|AR<SSPĄ}dxЬRТR`WVXDESTROYWINDOWVXFLUSHdĄq HANDLE_MISCSeR&PRcPPQP|AR<QQPĄ$Pݬ FREE_XCOLORSݬ FREE_XCOLORST FREE_WINDOWP^ЬPРPPXFLUSH^\PݬXFLUSH|A\P ^ЬSR)ݢXSYNC|ARУR€RݢXSYNCPd^WeYZЏt}GlhiddipRЬbXެVXfVެ TФUxXQAeP`;dRAbSc/ARbߧSTRNCMPPc~b~ MYSTRNCPYZXXf ALC_WBINDINGPUdiP ALC_WINSTATEPU FREE_BINDINGdiPХRZ ALC_DISPLAYP€U FREE_BINDINGdiPХVЏxp|U ALC_CONTEXTP  ХR€ FREE_DISPLAYU FREE_BINDINGdiPХ RТ R XХ RТ RТR2@ԦDХ R(@Х R$DTլ1ެ SXxTQAhP` ߧ cPAP`STRNCMPP^|txTPcQ@aRb@RbUWATTRIBP P'PB?PTdiPU FREE_BINDINGdiPTT1pզݬSALLOCPХ RТLƨ֨UWMAPPdiPdiUP^WЬSУ VУR€TФUբ0BŏP0PŌQ@$P`ŏPńP@P`U XCREATEPIXMAPP”1Pբ;ߧ)ݢSTRCMPP*߭ݢS LOADIMAGEP”FФ8PРP2>Q2@PPQQբާ*ݢSTRLENPݢФ8Pݠ XTEXTWIDTHP  ЦLPݠ8ЦHPݠ8ݬ ݬŏPńQŌPAP`U XCREATESIMPLEWINDOWPݏU XSELECTINPUT^Y  wopenl(makeIconX wmap do_config<< setheight8tsetwidth8 setgeometryb warpPointer0@ seticonlabelЬУXP ^SЬPР QРRС PѬPЬ У \P^T||ЬPРR߭߭߭߭ݬ PARSEGEOMETRYPSPSЭ Ф \ЭФXS ЭTЭPPP^ЬPРPݬ ݬ|~|~P XWARPPOINTER<^ЬPРSÀRТUÄTգ ݣFREEݬSALLOCPUkTgЬPРPݠTU XSETICONNAMEüJÔDÐ>ÐU XCLEARWINDOWݣSTRLENPݣТ8PРP2>PP~ݢ ÐU XDRAWSTRINGP^ЬPРRբ ݢFREEݬSALLOCP€Pՠ„ݢ„ݠ XSTORENAMEPP^լЬPРP` ЬPРP`P<^ݬSI_S2IPRЬPРPSУUTRdxRRR RNPB@@xR~UXCREATEFONTCURSORPB@@TB@@TU XDEFINECURSORPP|^VЬSУ RУPPТDTРUUXSYNCߦ+ݬSTRCMPP3У QߣFݬSPRINTF.ߣMݬSPRINTFߣUݬSPRINTFߣ\ݬSPRINTFPP^YЬ[ЫTĀZЪ Ąn`Ь ݮ STRCMP  PĈ ļ1ЫR¼1ĀRݢ0ĄݢXICONIFYWINDOWݮXSYNCļ1PZ HANDLE_MISCPPPPPļ1Pgݮ  P1Ĉ ļ1rPĄļ[WMAP1YЫR¼enݮ XMAPWINDOWݮXSYNCļ1+ HANDLE_MISCSiR&PRcPPQP|AR<Qļ1Pļ1ĤĠĜĘ[MOVERESIZEWINDOWļ1nݮ  P1ļ1UŏP0SЮ RŒRC RѤ\bU}b VMS.BCKO[V9.BIN]RT.OLB;1E;1 "UVФTĘФPĜФ\ĠФXĤŏP0SЮ RŒRC RbϤ\ŏP0SЮ RŒRCRbXĈ1GĄ ݬWMAPݮXSYNCiR(R HANDLE_MISCPPSP|AR<SV1ݤXݤ\|~MOVERESIZEWINDOW2T HANDLE_MISCSiR&PRcPPQP|AR<QѤTΤPSΤTRЬVRXSWЦSÀRТUÄRXTWPRݣPݣTRU XMOVEWINDOWUXSYNCЬRТR¼ nݮ XMAPWINDOWݮXSYNCZ HANDLE_MISCPPPPPļ1 Pvݮ  P1Ĉ ļ1PĄ1ļ $ WCLOSE 8 WFLUSH X WFLUSHALL | WSYNC WOPEN (MAKEICON WMAP  DO_CONFIG < SETHEIGHT t SETWIDTH  SETGEOMETRY  WARPPOINTER @< SETICONLABEL SETWINDOWLABEL @ SETCURSOR h< SETPOINTER | SETDRAWOP REBIND SETCLIP 0 UNSETCLIP X GETCANVAS  SET CANVAS tSETICONICSTATEϘTĜPĠ\ĤXļЫR¼t`nݮXDESTROYWINDOWݮ XFLUSHĄT HANDLE_MISCSiR&PRcPPQP|AR<QQPĄPPĀRXSYNCP^XЬSУR€PРW„Vߨ}ЬUUSTRCMPTdP7ˆ ¼uУPi€Pݠ0„ݠXICONIFYWINDOWQȂUdP„=УP2VW XMAPWINDOW%ȉUdP„ ¼ PPP€PXSYNCP^R PРTЬSSATOLPcPPP@bScPPP@b񋏀cPPP@bScPPP@b,PSATOLPĄ7ĐݬMAKEICONݬREMAPPPP^RЬPPŽSPRINTFP^ЬPРQPРRPЬTЬ PPݡPݡTPR XMOVEWINDOWRXSYNCP^ЬQСRЬ\ЬXݬݬQ RESIZEPIXMAPPP„0ݬݬݬ ݬ„€PݠXMOVERESIZEWINDOW€RݢXSYNCP^UЬPР RРQPТDWР XVŔЬTTSTRCMPScPԢ,eŚTsetwindowlabelQ@ setcursor(h setpointerz setdrawop rebind4setclipA0 unsetclip&X getcanvas setcanvasltseticonicstateL  seticonpos! geticonpos08! moveWindowF!moveResizeWindowh! setfillstyle" setline styleX# setlinewidthNcPšTcP ŪTcP ,7PŴTcPŽTcP TcP ,PPVݢ,WX XSETFILLSTYLEPP^UЬPР RРQPТDWРXVЬTTSTRCMPScPԢPETcP TcPP$TcP TcPPPVݢPݢTWXXSETLINEATTRIBUTESPP^ЬPР RРQPТDSРTPլPЬTPݢPݬSTXSETLINEATTRIBUTESPP ^ЬPР PPQաD+СHR< СLP8SS͢8S~ݡDС@PݠXSETFOREGROUNDP<^ЬPР SݬP ALC_COLORPRPУHPݠ8ݬ FREE_XCOLORRHЬUХ RRSգD.УHP< УLRТ8TPT͠8T~ݣDУ@RݢXSETFOREGROUNDP^Rݬݬ ݬSPRINTFݬSETFGPPP|^ЬSУ VУPUЬPIˏPTxPˏQxˏRŏT~ŏQ~ŏR~SSETFGRGBRxRP@|Qa@xQάPPaPRRPxRP@@HЬTФ PPQաD,СHR< СLPР8SS͢8S~ݡDС@PݠXSETFOREGROUNDP|^ЬQС RСPPТDTРUݬQ ALC_COLORPSPТLPݠ8ݬ FREE_XCOLORSLTТLPݠ8TUXSETBACKGROUNDЬSУ R@ԣDPP^ЬSУ TУRRQPФDWРXUVˏ`Yȏ`U1УP`1Ѥ0 WX XSETFUNCTIONդ ЬRТ PՠDݠDР@Pݠ XSETCLIPMASKЬPݠݠݠ ݠݠݠWUVX XCOPYAREAդ;ЬSУ RբD. |~ݢDТ@PݠXSETCLIPRECTANGLESѤ0ݤ0WX XSETFUNCTIONYP^ЬPР XРSÀTШDZФWÄÈnÈPЬUU Ѭ 1УYУ RR[Ь PRPRQPQQ УPPUPVPUVVŏP0PnjR@$P`ݣ ݣŏPDŽP@RbW XCREATEPIXMAPPPPݠ8ZWXSETFOREGROUNDѨ0 ZW XSETFUNCTIONը ЬRТ PՠDݠDР@Pݠ XSETCLIPMASKЬRRY7ݣ YR~YZݮWXFILLRECTANGLEծݣ YR~YZݮWXFILLRECTANGLEЬ RR[5[R~Y[ZݮWXFILLRECTANGLEծ[R~Y[ZݮWXFILLRECTANGLEШHTЬPР P< ШLPР8RPRͤ8R~ZWXSETFOREGROUND|~[Y|~Zݮ ݮ W XCOPYAREAѨ0ݨ0ZW XSETFUNCTIONը;ЬTФ RբD. ྲྀrKVXQ{8qsl]M>o7?V/ ,IL@ʁ*إ^ѻ[F0@CD^(<ω\J0A<BrSDHp{WV^BCI{-SX 39BSR]E N( IN8NfiDz+ҡ s~V,)mmEWO@ R\@D_LzMEUTK J KC^B=4hQ9` Kw* FTEiSHS˷TGO\P])RYLPIXPmk6f]BH@^C6IU rydHHNRu\< L ]U"}RYӟhVP ^LMJs.PPIaMeRRZ.\G:7%!]?ķur0x7nV -JT3*[ƿIMOx^: H5^m (_<3_ `FsRmGa|$04IR@NyJ0GVl^x5ZJ `UhV&E쵻 f>!MQ@ff㛡6t1xKxެ^ C5js@ҪpK̠4yrQUj [`YT"QAY]J.dmuĽB\FN BI^+Sc{s~ j<ܒH~Lwk8#2!UM.HC, #< f'#q_G~fvS Sʴ VDr"ow S\4Q~C-N[[\Q:16jםK |[ z ,)~2"!D[)WHy:#iu"w j?nt&>¢c -mnp->Q1;–鮕!h*;,DQ50h=J}&t%co}[݀s4IEⰴKC>< 'eC#k76N>xʯn ?9 dl@Rw X[I; 0aYrY ȊOP֣>RZo?bj,LK60eXY~q׭ŠxeQy=GQ5hgDdjݽw,A+A|J ?@PGVNZ26=ѱ)"iʵ1tlL9{˟R1}~Q$ v!RZE"@p Urs32>Җ(:DR}Ir7ͣG-B5&t߿8i/:Tz8?ؗ_a\MB׺*A[4=U$tAo`JϞZF4H 9RRq2 ̾h1J~Y 1ɬWbVJF"=`[yS#߳tKo!nci"&70ZG ڤ&3"~Dg,K1OEch}xʬrv4ZߩQrIc*W: z̉r |75I"! }-]66KDɰqMwnY {5L湀]GU.xP$sopl%J{NNCb"m\ncM9LJ]q1=MKOJ<뭍䞻 Եt #Ȥ#zv@U R^HyP1$Q:4A@MN-&&U<6Kf;<^18$=Oٹl G32h-^29Qs9@A pBUP8U'khEHoQ˶XU[LDŽ'(K!,mPy~!G} /ˆU|@Dzj;&yU$\F/P~(_siu0(^:'.}Xn!AxB:sǼXq\ז 8}z/H4%&"f7}uW]mjR{%mYR. 19:+uq}!Ik ,{!p Z۪@\R\TE/RwGxH3G'xHŕ8?2"ʧ^;cW{{I|8}ua YCG\(߇_${d?:A!c5)+;du[asȱ[CxS8,|oѭ"T^pz=Z i/L Z2,Ƈ(W"J%ك'F(T" 3gN>#Vanj> Uro.د"'EٚWG5Ifv# ({@0xSЮc:=\@O+L2v,,^eտ\Tˇx‰^ʀdzV/70gEo|Qb_Z1'6񐫰ٜX;q{d+}3>$h4V3]@E9@6##TH\^(A#3wʑD6>MASmUxyS)ذye_Һ\KYWf~S+n gn笿#7 iI Kʊ#e}^.n7ռiDQvDVSrž4y%ҞO1v i7_2 9ƌKFI|EjNW@Ul+E[o'c99Kp,wRcC8 kڂ#HwTFj<_P `Qs%k nk^q$ c< &YZʉޑRy)"4蜭!6aI3Y+4ɯv7L^ }wI^ grXbf<ՆΩ~cıS(7JÀZRjwL]}{{Wyޞm{+~O}jHGQS:nI%U $ f;f IOy~rZ4ZRSbseps \1˼,GiMq$D);R"Eր}hJ=&Z=fkMj\S[&Dd7?G/$,bbS0zŤ5^wC(D3x 1y/W֢K#L+e+kiAUIz?7a^s@jC^ػ\!h[-tʠQ38R X,+q+.TSbA6al,'EH7X}ur8oF浥>s,)3?r*[^6.#0hXfC F>݈,hHC#nolbCe ڽyMŸn# Z}C{-ܣ?#pqX=+D:WDㆱ598<&<`eڗ d`VRMnc̱!Gz4}e^9uwD0DgxnB3P2YYPP~CPYPYY~HPPP^TYЬPР WРPPЧDZРXЬRRSTRLENUeRPP~OSTRCMPScPV1ReRPP~TcPReRPP~YcPVeP`RFOPENPRPR߭FREADP RFCLOSEPRFCLOSEVSRbbSTRNCMPPVRSVm߭߭߭ݬ ݬݬŏPȄQȌPARbXXREADBITMAPFILEPPԼŏPȄPȌS@$Rbݼ ݼ@RbX XCREATEPIXMAPPYPYPZ9ЧHRТ84ЧLRТ8Ч RТRТӟ< @~YX XCREATEGCPDPZV3|~ݼ ݼ|~ZYݭX XCOPYPLANEXXSYNCݭX XFREEPIXMAPYPP^լPЬRТR€Rݬݢ$ݢ XPARSECOLORPPXЬV( TЦ Rp4VpV~<RnRRgHR~POWUedHPjPpV~<RnRRgHR~edHPjPpV~<RnRRgHR~edHPjP( h( ̭Э ЭЭP^ЬRТ Rp4VpV~ެ T<RnRRgHR~POWUedHPjPpV~<RnRRgHR~edHPjPpV~B VMS.BCKO[V9.BIN]RT.OLB;1E;1 45<RnRRgHR~edHPjP( ^ЬRТ Rg4VpV~ެ TndRgHR~POWUedHPiPpV~nRgHR~edHPiPpV~nRgHR~edHPiP( ^ЬPРPPݠ XRAISEWINDOWPP^ЬPРPPݠ XLOWERWINDOWPP^N[7Z6YT|W{P{R WТRRТXz,P{WPQPP,{VSդ,PSЦVS,\*P\ HANDLE_MISCPPQP|A\<QQ6Qi}LkjPPVPR,SRW9{UPPX|\լS,Р\\QUQQPRSRWIDELAY1Q^ЬPРPPРRݬRXBELLRXFLUSHPRP3302PHge\ nativecolor ]lcolor X^xcolor^ raiseWindow*_ lowerWindow*H_getactivewindow' p`walert/ s7 ɀٿ89: ;  1 < -Y= _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASE?STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SU@BJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICBSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSH SIZE_HINTSf$CHAR_STRING_CONSTANTSSPRITETICSLASTXLASTYc ANIMWIDTH ANIMHEIGHTPATBITS SIPATTERNSYMSCONSOLEBINDING|+P#C3P'g7GW P11 P88HXl8888888888Pֺ6P+/77'wwn? VMS.BCKO[V9.BIN]RT.OLB;1E;1 *fCD1P V1.02F_1J0V1.025-JUL-1994 08:35VAX C V3.2-044\R F_1J0 F1j0_upto s C$V_CTYPEDEFS | F1J0_UPTO$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPESTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCSF(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRGMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSHNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP|^Ѭ rЬVЬUP@RˏRSS TХPQʏRxRPxPPPQSTaPP'ЬPЬЏ`ЬPP`P֬Ѭ PwwJ1 V1.01F_1JV1.025-JUL-1994 08:36VAX C V3.2-044P|^eU=VѬЬRDEREF PЏѬЬRDEREF PЏѬЬRDEREF PЏլDEREFЏeeѭ}@䭴ѭ=Ц6CNV_STRPg~ERR_MSGЭePѭѭJ߭ CNV_C_INTP#ݭݭCVPOSPѭЭePe~ERR_MSKGЭePѭď c߭ CNV_C_INTP;ݭݭCVPOSPѭЭePѭ'ЭRЭRPĚe~R F_1JF1j_uptov s C$V_CTYPEDEFSDEREFCVPOSERR_MSG CNV_TCSETCNV_STR CNV_C_INT |F1J_UPTOv$CODE$DATASTDINLSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMEMCURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PRONGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSPWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSERR_MSGЭeP CNV_TCSETPh~ERR_MSGЭePѭsP@RˏRSS TЭPQʏRxRPxPPPQSTaPP/Ь PЭЏ`ЬPЭeP`PЭe֭ѭЭePwwR1Eh V1.02F_1I0V1.025-JUL-1994 08:36VAX C V3.2-044ZR F_1I0 F1i0_matchT s C$V_CTYPEDEFS F1I0_MATCHT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPS VMS.BCKO[V9.BIN]RT.OLB;1E;1 jRSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCST(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAUPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSVNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSZP ^ì QQPЬQСSЬP RRaP׬ЬS ЏcPwwX1 V1.01F_1IV1.025-JUL-1994 08:36VAX C V3.2-044P<^eT=UѬЬRDEREF ЏѬЬRDEREF ЏѬЬRDEREF ЏլDEREF PЏdd}@CХݭCVPOSPѭ dPѭ*ЭR F_1I F1i_matchs s C$V_CTYPEDEFSDEREFCVPOSERR_MSGCNV_TSTRCNV_STR CNV_C_INT < F1I_MATCHs$CODE$DATASTDINZSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME[CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PRO\GKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGL]OBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS^WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSRЭRPe~ERR_MSGdPCNV_TSTRPg~ERR_MSGdPíPP dPSRR dP׭Ь PЏ`dPww`1` V1.02F_1H0V1.025-JUL-1994 08:36VAX C V3.2-044\R F_1H0 F1h0_many s C$V_CTYPEDEFS  F1H0_MANY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPaSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS܍ VMS.BCKO[V9.BIN]RT.OLB;1E;1 aab(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRcMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSdNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬYѬ RЬXШUЬWЧVTP@eQQPPRR SQPP2PPxPPxPPTPRS`PP ֬Ѭ ѬYPЬRЬЏbPwwf1 .H V1.01F_1HV1.025-JUL-1994 08:36VAX C V3.2-044P^eV=WѬЬRDEREF PЏѬЬRDEREF PЏѬЬRDEREF PЏլDEREFЏffѭ}@䭴ѭ=Ч6CNV_STRPg~ERR_MSGЭfPѭѭJ߭ CNV_C_INTP#ݭݭCVPOSPѭЭfPe~ERR_MSgGЭfPѭď c߭ CNV_C_INTP;ݭݭCVPOSPѭЭfPѭ'ЭRЭRPĚe~R F_1HF1h_manym s C$V_CTYPEDEFSDEREFCVPOSERR_MSG CNV_TCSETCNV_STR CNV_C_INT F1H_MANYm$CODE$DATASTDINhSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECiURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGjKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALkSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSlWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSERR_MSGЭfP CNV_TCSETPh~ERR_MSGЭfPЭUѭHP@RRPPSS TЭPQRPP2PPxPPxPPPQSTaPP ֭ѭѭUЭfPЬ RЭЏbЭfPwwn1 V1.02F_1G0V1.025-JUL-1994 08:37VAX C V3.2-044iR F_1G0 F1g0_findr s' C$V_CTYPEDEFS  F1G0_FINDr$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXoP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCSp(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE 1+ VMS.BCKO[V9.BIN]RT.OLB;1E;1 pqLETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSrBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSxP^ެWзYY XѬXVgVUЦSRRYTTPTP'ЬPЬЏ`ЬPP`P֬ѬXPww1|"V1.0L1F_3EV1.025-JUL-1994 08:49VAX C V3.2-044P<^XeYЬRRU(PxRRR~MALLOCPU<1~ERR_MSGP}1ץRެTRd(SRPxPP@xRP@cDEREFRRdЬRRSSSieeiWѥХQ СVWhШQСVVWPP&g~ERR_MSGeiPUP UFREEPxWRSBcPALNUMPTT+SBcg~ERR_MSGeiPUP UFREEPTu1? V1.01F_1GV1.025-JUL-1994 08:37VAX C V3.2-044P4^eU=XѬЬRDEREFЏѬЬRDEREF PЏѬЬRDEREF PЏլԟDEREFЏe̞eѭ܏}@ѭ=Ш6ܟCNV_STRPܚg~ERR_MSGЭePѭѭJ߭ CNV_C_INTP#ݭݭCVPOSPѭЭeP䚏e~ERR_MSGvePѭ ܭc߭ CNV_C_INTP;ݭݭCVPOSPѭЭePѭ'ЭRЭRP욏e~R F_1GF1g_findZ s C$V_CTYPEDEFSDEREFCVPOSERR_MSGCNV_STR CNV_C_INT F1G_FINDZ$CODE$DATASTDINSTwDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURxRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGyKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSzGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS{WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSERR_MSGЭePԟCNV_STRPԚg~ERR_MSGЭePЭWWVѭVVЭSRRWTTPTP/Ь PЭЏ`ЬPЭeP`P Эe֭ѭVЭePww}1@ V1.02F_1F0V1.025-JUL-1994 08:37VAX C V3.2-044bR F_1F0F1f0_bal s! C$V_CTYPEDEFS F1F0_BAL$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP~STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRVn VMS.BCKO[V9.BIN]RT.OLB;1E;1 XMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^WѬ1VP@TW^TPPRR SЬ PРPQTPP2PPxPPxPPPQRSaPP'ЬPЬЏ`Ь PP`PTPPSS UЬPРPQTPP2PPxPPxPRRQSUaPPWЬPРPPRPSU`PPWWP֬Ѭ1*Pww1 V1.01F_1FV1.025-JUL-1994 08:37VAX C V3.2-044PD^eW=XѬtЬR(DEREF ЏtѬlЬR DEREF ЏlѬdЬRDEREF ЏdѬ\ЬRDEREF Џ\ѬTЬRDEREF ЏTլLDEREF PЏLHgDDgd}@dlCШdݭCVPOSPѭ DgPѭ*ЭRЭRPte~ERR_MSGDgPL/L| DEF_TCSETPLh~ERR_MSGDgPT-T DEF_TCSETPTh~ERR_MSGDgP\.\ DEF_TCSETP\h~ERR_MSGDgPVѭ1PP@hUVeUPPRR SPPQUPP2PPxPPxPPPQRSaPP1Ь PЭЏ`ЬP DgP`PDgUPPSS TXPQUPP2PPxPPxPRRQSTaPPR F_1FF1f_bal s¹ C$V_CTYPEDEFSDEREFCVPOSERR_MSG DEF_TCSETCNV_STR CNV_C_INT F1F_BAL$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS>V`PPRPST`PPVV DgP֭ѭ1$DgPww1Р V1.02F_1E0V1.025-JUL-1994 08:37VAX C V3.2-044SR F_1E0F1e0_anyq s C$V_CTYPEDEFS F1E0_ANYq$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RP VMS.BCKO[V9.BIN]RT.OLB;1E;1 YARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSwP^Ѭ PQЬPްPA`RRPPSS TЬPРPQRPP2PPxPPxPPPQSTaRRPЬRЏbPwwGЭePѭď c߭ CNV_C_INTP;ݭݭCVPOSPѭЭePѭ'ЭPЭPPĚe~R F_1EF1e_anya s C$V_CTYPEDEFSDEREFCVPOSERR_MSG CNV_TCSETCNV_STR CNV_C_INT |F1E_ANYa$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSERR_MSGЭeP CNV_TCSETPh~ERR_MSGЭePѭЭePP@RRPPSS TЭPQRPP2PPxPPxPPPQSTaPPЭePЬ PЏ`ЭePww1Ю!V1.00CNVV1.025-JUL-1994 08:38VAX C V3.2-044POOOO? Ϛ? P-2147483648PP%s0POP-0.0P.0P08P^eTЏЏdd1ˏ_PP1ˏPPPm^?PݬTMP_STRݞRPЬSˏcPP޼RS BIGTOREALpPbndPЬPРPpdPdPݬ, P&PQ?PndPЏ޼R BIGTOREALpPbdPpdPP^eTЏЏ C$V_CTYPEDEFSRTOS BI_STRPRCTMP_STRDEREFCNV_STR CNV_C_DBLRTOSEQBIGTOS REALTOBIG BIGTOREALBIGRADIXMEMBALCREALALCCSETFATALERRLEXCMPCNV_STRALCSTR ICON_GCVTSTRCMPSTRCHRLDEXPSTRLENSTRCATSPRINTFTMP_STRTMP_STRTMP_STRTMP_STRTMP_STRTMP_STRTMP_STRTMP_STR 8 CNV_C_DBL  CNV_C_INT  CNV_C_STRdd1ˏ_PP1ˏPPP1?PݬTMP_STRgPЬPРPpRqR qRdPjRdPˏPPdPЬPРdPdPݬ PPCr?PЭdPpRqRa qRdPjRdPP^ЬScݬSCNV_STRPP}cЬTdSRS *Ѣ #ALCSTRP |~FATALERRּHPdSS~ALCSTRPR |~FATALERRЬTdФPRSTSTPSQSQb2P^eYЏiiЬSc }ciPݬTMP_STRP1ЬRALCCSETP |~FATALERRެXЏPRRSRQS@hWЧVU`TTRR2RRxRRxRSUSTRRRxRRRcPQRQRiPP^eRЏbb}ˏ_PPcˏPPPL:?PݬTMP_STR2PˏPPFƕQ VMS.BCKO[V9.BIN]RT.OLB;1E;1 9bPЬPРbPbPݬ) PЭbPP^eRЏbbcˏ_PPIˏPPP2j?PݬTMP_STRP}bPbPݬrP P6PЬPЏ`bPЬPЏ`bPbP^eTЏdd1ˏ_PP1ˏPPxP1~?PݬTMP_STRϞvPЬQСPpRqR_ qR&ݬQ REALTOBIGP dPdPЬQЏajRdP}dPdPݬ(P*P1P?PЬPЏ`dPЬPʏ`dPpRqRϢ qR'ݬݬ REALTOBIGP dPdPЬQЏajRdPdP^ݬ CNV_C_DBLP*ЬRp~ALCREALP |~FATALERRЏPP^ЬTd}dPˏ_dRR1ˏPPPP1?PЬTФTޮXЬWnnRQVfxQPfSPSPPSSVQڔbnRgniPЬRТRpRݬpR~RTOSHЬSˏcRRУRâ RRxRRݬSBIGTOSݬݣϕPPЬRbݢALCSTRP |~FATALERR2P^ЬQa}a PݬTMP_STRPSЬRQaQSެ XhRЏbЬЭPЭRRSRTSAhWVU`SSQQ2QQxQQxQRURSQQQxQQQbPTQTQPP^ЬQa}a Pݬ QݬTMP_STRPPP^ЬQˏ/aPP}aˏ_aPP1ˏPP } P1z?PЬP}PЬPРRb }߭ݢ ݢMEMBѭ `P}PТP}8PЬPРR DEREFg~FATALERRPPP ~FATALERRЬQТaPPЬPˏ`RxRRR}b^ЬTd}d 1ˏ_dRR1ˏPP P1n?PЬTФTnnYЬ WЬXXRQ޾VfxQPfSPSPPSSVQڔbXRgXePЬRТRpRݬݬ pR~RTOSEPЬSˏcRRУRâ RRxRRݬ SBIGTOSݬݬ ݣbPP ^ЬRbSTRLENPbݬLEXCMP^uXnVmUhY]WռPެTdRRRRBRISf@P,SRePBdEQPePB PѬ` `ePB`PSSfPSh%xSPgR@bݬEQPCiPSShP|^uV]T[USf;xSRdPB`ݬEQPePB`Qa BRbPPSSfݬ BI_STRPRC<^U RЬTbլRzTP{ PQP0PSSb TMPTSTS$STRLENPRߥRSPRINTFSTRzTP{ PQP0PSSb T-rЬP SRS`R$^XЬRТTԮ + +||ZYԮԮbPTSRˏRUEh PTSRPPˏRP@hR+R-R TSVP VVRTˏRUEhSYq\$e"V0RUnUPaVP [U[s ֮PZTSU UURˏRP@hRr RR/ݬSTj ~~BIGRADIXPUU |~FATALERRUPR.r֮ TSVP VVRˏRUEhPYq\!e"V0RUnUPaVP [U[Zs֮TSU UURˏRP@hY΀PRe RE1֮ TSVP VVRR+R-RTSVP VVRˏRUEhPˏRUEh+ Q0RPPQTSU UURˏRP@hՑ+ЮVήVVZˏRUEhTSPRˏRP@hTSR CNV8 cnv_c_dblK cnv_c_intP cnv_c_strcnv_csetl cnv_ec_int<cnv_eint cnv_intcnv_realCcnv_str0@  cnv_tcset cnv_tstr/ $ deref(L tmp_strP  dp_pnmcmp(x  bi_strprc < strprcl  itos Hston RTDhPծ 3Z/q!q9޼U +[T[TTePl3ծ .ݬSݮ ~BIGRADIXPRR |~FATALERRRPծ PZRR'PZRR|PZZPPZPPSpVpTSdTVxSSSdTTZdVPfVZp~LDEXPpP -rp2P^WЬQЬ RЬSQQ$PRSU UUPXˏPTDgTRˏPTDg0PV  PVVVUUQPQXUXRSU UUP˲PTDgTˏPTDgRSPˏPTDgRSˏPRBgP޼TѬ+XSPXSSd2P^ЬPЬRRPPQRQ PQRQPլRPPRRPP^T֬ЬRRp~ ICON_GCVTӑb  ֬ ЬSc.S0SPߤSSTRCMPPS9.SSTRCHRRbP&e~SbPE~SbP ߤSSTRCATЬRRSTRLENP@b. ߤRSTRCATЬ RݬSTRLENPbЬ^Ь SRЬWVfxRPfQPQPPQQVRڔcЬRì SbЬ  Pge P/s######HPl$P.HpP0P..<radix cvpos=  rtos cstosK s8        n CNV_CSET l CNV_EC_INT <CNV_EINT CNV_INT CNV_REAL CNV_STR @  CNV_TCSET CNV_TSTR $ DEREF L TMP_STR P  DP_PNMCMP x  BI_STRPRC < |STRPRC RADIX CVPOS RTOS'$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVgŅk"WR~׮& 3Uyj8*]'m<v"QeW?䇄/Ez &:ɲ6ş_n=&b_]Ghjf>w!DD %]Sss\L~قxbbGS8Sf~ŵ U~bt|٪U#ŕY9f^>Chr,.Z\O^c 갟^Ҙnz`}˟jzG-DR|-/ :6#ù5A٢\76@`,y"LX^[ܚ.^@HVZ˿ Xx63NM^T^P[BNi=ŢޤC^Ixl@Wn@NT΄H҅Л2n$S A2|o~Ϗx Ll6*iόB "]̶kBAE:uxq/z˼cNaRGT=³:2))ͽtÊ(L.;Z,1.`(mEB&:_ͺɾí{U#2!9}!$I"ľJ3'uT ZT2H!>_7!`d$wz-lJi:zV;r#pqY x 0ŬB*h!t[$A,RXWTSa~N[oֿJ)Ci2 QY4򓇵Lb "Ck'JAZzae^*<xGëlOgy.P\a'rm>ި%?VLoHҘ䢯;IJh҂Sɑ?Xm}0E^*M/Q vhB._tC-zW7=J]LQx8i=;O` mU}("ԠQGp=.?U¤9ݣGcxVz/Rt{5~zO:/ۇF_cz-tu.FHtuߩ1>c<@Ch*O<<{J~ma/䓿hl; *\5_FKwϕz RZE΍}H{›FC`~4^G[oM92K-+ѣ1 {,K\hI%R.VXP[acryh(T[i[2  F~oni Z_wۦ\, 'QOUv C'w=w]`wNhUIC%! &{(L ;P $K=W $u["LWtܴxC'ua!Ggq [Я?+Ɓ/0h,fcf`hW0N ʧL"/Fʫ̣DA{5cQ1 rZJ'7T"^cO 1|<·C킔*;p(']x9jDr2wnVv,|tkґcTFGCZO_^;?F3Y1@;)xe-aa͹j4Uo!O!4,{QƯ>,Eԯ["ة?sz?) L5nf:Qu\ep01D^SHRHĸO=&f sjoݑR[|e3m+8r7KL/<-耳@"brTr򯬗|vxXP{vEԪ=RtA){2>VjA|&qC]y1 ?.Ra@|2DW,5 nĀ;{ @W,aPOV@<2Ib>([zl;~ Ōp! 48z?|0o^vDND/qƗp:g?>,fbȫXcGoPG/cV@ {ƵQ5.K){Gy~$8 C3 psN>d}F9;i%i~hH:7\}M$f YA(9bЫ ;l簦㠹ҍ%ޯX+M5Uaa &åC0J0/;0~ۊiT&Sr߼lF69M,8%i\0XDW 7yElzUXo1.208iyhMJlC!ޖ)cKɿM7l/Q5p˲tدsVTJi--U"X17;z7)M{~fނX$N1 (zk nr?s'[,ZLlȼALiłFdfs?}8!4C'*N1]̮ џ!s[cN,>ӎW~J .CVKTГZoL_+IB٩sp%/f$_bVeNCOO1Ȅ_.T4-PV|.7NOB^dj=k˖ -|vS ̑#ܫlqo ߆l(+~tQItq`tBe_ʝ)n23駯!16؀;|m4By\WbrQKO#ûY^*ͬ" uG=XTHS!\O,LW.A %F8*8 ̻ gu{Pa]}>K,lRHfkb*ءF`xIbL^ɇ[4gv(kO ,Nݶpn&!hm ̀> b? a>VˆVR&EQf8B OKNFK1Yi ep"6]]OG;*GɪF`W& ڢ~WzgA Q 7!jbVN:DMW@;NNs] ,-rΡUV.rnjҤz/Xokwq hĕEyCjM%.Uk$2彌\Oޜ~vQ!ELK)&6ʨ\NoBԋic_ ao6l7=_[rmC7Bs6kZ7quԋQ,HM&u~?d]&=V $3;;y\В q#0j D*JbWFS4i;V Od: gE3|`hENgT:jN\ןA2M"PhUO}] LwoiE7#B It2cj-hÛ?l$b^ښtQS(|/C\_ D%DW=D|GO2F\_/[G'Q! gAZ  HVLCJd|V5@`,'ta#¼lKOKUɟpŬOH` JOxH.tt iNlH]hpL̂c}LOwvY7TUZQW4kF"84g?TEN_FeUdR{CϷZXUO 6HœAd_bzuZ3ӑМΐ$~by+^PFu ;U 4UqP|̘g8IDn!m0Z 6M##󻇄-uvi'1Z. jI0l@{i{ވ55 _YNz?DLlQd5S-Wڦ{E<<1[6hge A[%pCސhvL"b 678srF\rB'k\wL:ù?$O_HGf鯀z;_[+nRdh)b욻Ҳ%Jy'f7F673 . ١0.F s3mXZ6IO<;BVI]0KWSD0/+k8h,{n4yAY6Ċm>A#;XY)}.8ӓ~}1"= dGT["khGa-&1&h &fQ ct ^ dcjۺMv9pCK7T}V -6R*PS{O*ɯpK\<mԭ%f.N"AzRXs3sf3Up3\w[6t5|5qk {uZ/!:lW^'B =)YNV.8/'W@WY^ݢx'2d~ X<[mo^ q%oKQs0^\!9,)D4tI%'fxHӜ/s`PpoŹȱϷ$J ?n׬vi14Ķg: \T}s78\Wq e޽Gji~4c&0;BbZ:i8Ha+QF13a`XƣO^OhL3VCG(͝ȫ·4Ofʖld @'V+Y:Xa Pa('IPQXC>big<`5xc1n"޷yT&["țS3eY$EWCZvK<2,DC1op'Қt`շC@]_4w/ו=㣴N4TaJ0]aP-!^i7F9rYiUZWlS!*>(tmܞ8 e|&k,E5 *)`I=>ά5oAQ\5.i>|wXT 09a<*gZM*.T႑vy(B*Utf&Ϫew= KtzP,,0sLM)шOKfD=Osqu}atls{HϹyJveS<İl6 u-&KZM+#oYŕY}тºSCN Zv2{PbᰑUbk VMS.BCKO[V9.BIN]RT.OLB;1E;1 ENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIORo GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTSCP..VPKPdd/ PJP//a8ww1@!V1.04FWINDOWV1.025-JUL-1994 08:38VAX C V3.2-044RFWINDOW C$V_CTYPEDEFS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS+ CURSORSYMSCONSOLEBINDING;PPPPPPPww1P!V1.02F_3R0V1.025-JUL-1994 08:39VAX C V3.2-044P$^UeVW}1fܞfѬW1xWRЬSBcP`mBP`PBc~ERR_MSGЭfPxWRЬSBP`PˏPBc~ERR_MSGЭfPxWQЬPAP`PРTWTe ХPe~ERR_MSGЭfPХPˏPe~ERR_MSGЭfPХPРTѬWLg~ERR_MSGЭfPxWRЬSBc CNV_C_STRPBcg~ERR_MSGЭfP߭߭߭߭W~ЬRRݬTRECTARGSPxPP@be~ERR_MSGЭfPխ+խ&PФQPPP  խR F_3R0F3r0_WriteImage: s C$V_CTYPEDEFS DUMPIMAGEWRITEGIFRECTARGSERR_MSG CNV_C_STR F3R0_WRITEIMAGE:$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSl;1 VMS.BCKO[V9.BIN]RT.OLB;1E;1 ֿWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSЭfPݭݭݭݭݭT DUMPIMAGEPRRݭݭݭݭݭTWRITEGIFPRRЭfPW }e ЭfP} ЭfPww1qb%!V1.01F_3RV1.025-JUL-1994 08:39VAX C V3.2-044P<^WeXЬRRU(PxRRR~MALLOCPU<1~ERR_MSGP}1ץRެTRd(SRPxPP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТTVug ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРTѬV*R F_3RF3r_WriteImagep s  C$V_CTYPEDEFSDEREF DUMPIMAGEWRITEGIFRECTARGSERR_MSG CNV_C_STRMALLOCFREE F3R_WRITEIMAGEp$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSLg~ERR_MSGehPUP UFREEPxVRSBc CNV_C_STRP+SBcg~ERR_MSGehPUP UFREEP߭߭߭߭V~ݬTRECTARGSP/xPPR@be~ERR_MSGehPUP UFREEPխ+խ&RФQRPP  խխehPUP UFREEPݭݭݭݭݥ T DUMPIMAGEPRRݭݭݭݭݥ TWRITEGIFPRRehPUP UFREEPV}g ehPUP UFREEP} ehPUP UFREEPww1RA,!V1.02F_3Q0V1.025-JUL-1994 08:39VAX C V3.2-044R F_3Q0 F3q0_WFlush sJ C$V_CTYPEDEFSWFLUSHERR_MSG  F3Q0_WFLUSH$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZEcV VMS.BCKO[V9.BIN]RT.OLB;1E;1 K&STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^STլyxTQЬRAbP`dAP`PAb~ERR_MSGPxTQЬRAP`PˏPAb~ERR_MSGPxTQЬPAP`PРRTKc УPc~ERR_MSGPУPˏPc~ERR_MSGPУPРRRWFLUSHT}c P} Pww1>!V1.01F_3QV1.025-JUL-1994 08:39VAX C V3.2-044P$^WeXѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТSVvg ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРSSR F_3Q F3q_WFlush sr  C$V_CTYPEDEFSDEREFWFLUSHERR_MSGMALLOCFREE  F3Q_WFLUSH$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPWFLUSHV}g ehPUP UFREEP} ehPUP UFREEPww1tM!V1.02F_3P0V1.025-JUL-1994 08:40VAX C V3.2-044P^TeUW}1}1eeѬW1xWRЬSBcP`nBP`PBc~ERR_MSGePxWRЬSBP`PˏPBc~ERR_MSGePxWQЬPAP`PРVWUd ФPd~ERR_MSGePФPˏPd~ERR_MSGePФPРVWPPg~ERR_MSGePxWRЬSBc CNV_C_STRPBcg~ERR_MSGePWRxRRЬSBc CNV_C_STRPBcg~ERR_MSGePVR F_3P0 F3p0_WDefault sy  C$V_CTYPEDEFS GETDEFAULTERR_MSG CNV_C_STRALCSTRSTRLEN F3P0_WDEFAULT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTX/} VMS.BCKO[V9.BIN]RT.OLB;1E;1 KYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS{ GETDEFAULTP ePSTRLENPRRALCSTRP|~ERR_MSGePЬ PR`ePww1>X!V1.01F_3PV1.025-JUL-1994 08:40VAX C V3.2-044P^WeXѬ U.PRxRRR~MALLOCPU<1~ERR_MSGP}1}1إRެTRd'SRPxPP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbPРTVug ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UR F_3P F3p_WDefault& s  C$V_CTYPEDEFSDEREF GETDEFAULTERR_MSG CNV_C_STRALCSTRMALLOCSTRLENFREE  F3P_WDEFAULT&$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSFREEPЧPРTVPP&g~ERR_MSGehPUP UFREEPxVRSBc CNV_C_STRP+SBcg~ERR_MSGehPUP UFREEPVRxRRSBc CNV_C_STRP+SBcg~ERR_MSGehPUP UFREEPݥݥ T GETDEFAULTPehPUP UFREEPSTRLENPRRALCSTRP "|~ERR_MSGehPUP UFREEPЬ PХ R`ehPUP UFREEPww1@8c!V1.02F_3O0V1.025-JUL-1994 08:40VAX C V3.2-044Ppos=Pposx= Pposy=Prows=Psize=Pwidth=$Plines=+Pheight=3Pcolumns=Tk9fʚ,YHJRQ (8M@  O[葼R0Y]%qRN12A Y_%\+T+ZF0 F .H|aQZiH%PN"IKﵨiN w{bɀEQ:@?K7Y{eVH='Aǹ)' UeGt:j{̵@ KEcX;::xvrV&.AK%sH:ϕ\'ʘS{Z__e^b穟SaK*l 51ʢ~WߪAne#$i־IȻS,;|uzv;ܿ~5@ϵSmHQ{ hѱ\'TUH4@ Iq0iMlHEq#'{d4T8uH 00ٮ"`دxް,Z3KXNCLREZى47GNTEݺz\,V;M tK\W|fMIOԋcp!c=GZ7@E{8b;-I؀@+w A :LNjVn1=HR DQY dGHeVg-0K RivWR@sX)Dr:9(E|<1 U:.tO=8[/M ˌaT m=[$}a X HTu_7+uSBENVCU 4:Ep(JbgcCj_dt՛KhZR70  L:99)VL,VB)SPZCA˦ݡKF3EU J>* zf eeRǨuog?EꂄbTTGMJB :I-Tl?Ś1 i-WڸLwS?;tϭS\)>p8VL]>D/o`tA>R½/U /4wM "!\m bAEV zwY}=8hŠ?JktFVL|F 寺NsX.D^pg>lm0\aƚ%)Z]R(KCC[NIr+=aYާlJxtՆUq`DUOZ2JqOㆷؾY{R_Bc|jXNϦTaߨ'+0n[X䉹eMY] LG% ~Jp.-(}1AP$!ᐉjD3\ m\jS(>tO]gZiqDC*WXs8C6W IAcBƵ(GG D j];>#,o!y\lZsXI-J|ICƥ!,FõS1]|Â$SNkDeϕ ({< *M@|:ZOq\9r~'.(TPT^GʷzzY FFTHVENyI7&c53Zˆ1\\h=V|XjZRꔀAT_O]2|S[k>:LUBQ1b7+;>WRG7ڙ=QhSBDUPm:RIΨ ?h1f QI]|x%Ff17#0bU?V?yVCV7SḨi!(h@ ၺP-SlmNFiIW<5ϋTgؘ)ImqÝ [Zp9A_iX$ "i."6!|P) u4G C Pg8Y"t0أh^[P[:&GϜ)D2o,r횆? eKCPeXLO}VSy9VK/&LZPVK,(`OǕ= dA66*Tr^)ܘɁe$D-*U RT2>2x./LY#bGm r< ]>Z]ZA\[Bz$RU0pM\yPJNA^K^4S@]Y@GL VBP GM X NLGSQCTZBFE] MR^A^ @WNW GB@>IALNX;WHEND]ACVLPH_FSG CSII AXNEJ TYHM FX CK@EXTFHPE STRF \FAEGIEEH _V [Z WM]PP@TMUGLD[A^]QN AQFR8SXFMy~dbX~(ZZ TWD^G!@Z=Y_w֏<|8?s}8 F(—0:U9uflkj‰f8P6e})!$ 5)FrZ3mi!74{b;wtp|-94 שef,7YHe]4:n3%'}Җș_FF3TT XFeݹ#TOLxUk ѓAL6C VP>*Hr kl9?[&\8.Ǝ-cd^x*MEeR@+E^d 9 QKĄ΄U}(A4%o9 5 76(e:[Mb.6\@-R Gk`hr~,"@b`c~|;C+&).P}dy kLdTf̭TD?+`ZUQMRω2 K*`3K5e{/6 h(UHUMTJ;Ԇrw( AOYCHbEW\*詧蛂! (IMf~wŸ@HXITa^dcZBFQ3,xV[{ß4BSDGOFK NDAG.BZц0C NA[W\OeU_URL *]]o D Z[/GTHNXnATG#3CM0^ Fuh ޣ#5 &}:A̚ECe2Cr<[O'tC*Yf.Yk F HQ\m['fRIL1b~b|+ʔqDI v}Ip[WּjUK3ʨ(`i!NZ1rp!?)W`vKLECŬ!\NdЛoBW,ىh&elLUE{[K%!&:hS8I^]Zf|7^9 *#LHmkQiXY9|)UMp3CEFYboqG_[,_cQ?p`L LQ+S+u=R+y%PMe8;Wȵw*ښ!&/ (S+>,{@p$7KԞR"A]̼J.FMJezxR}J1e9q]G駼Ƃ_=1k#\(LY]٤=OjI%о`柭dTǥLν?M-&++&^gdd(BD1OPWw {23m}Q**aFZ;BnʇTtb`@:^v]B$|#ƍj}z іN ơ!ϏԒn`,Mc2Zy U2tu!KL6#X_W颅G8 *̇MBYG2gyfx5p,uHTpRJ d [<=|4B&2im0=KR/?U[bY<; ;690D"p!{TRf[)*P~9MΥ xgx{h%l "9 ׁ<A /|eXUl^ZG u hcYy cIT%#s@OҭΔjxPyo1vFmK R5$H!AA:6,YFoH±2mX Q$`8w,=7KQx?vi9nd*24H| 7PάOW\P2 UiR NfaAVSIa+u\ pGtd:isGHh3*AFuW=ȉPH#XWLdJcRGbE{<Ư^E QO^ SMf; LPMBoPFA1^6@TgLD-JHΞt/pRGNzr՟7L$G K1]=T 'E ,\ JO%%G]YPJ3WR W <_]] EC5Y@HU2AG6; + #@e D'"q*eL[Y M 괾Y#AɴP| +vsP B8"w N _M^nD9?@,P` \MINpú澣WHޕ\\[R<˰g/4CA Ik! v' HBߍ:x:n GU0>/BCu+.۰_ [ VMS.BCKO[V9.BIN]RT.OLB;1 @CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS $CHAR_STRING_CONSTANTSFERR_MSGegPUP UFREEPTPALSETUPPR(<1~ERR_MSGegPUP UFREEP PP2PPPPR egPUP UFREEPݢݢbͻSPRINTFͻSTRLENPSSͻALCSTRPR(<2~ERR_MSGegPUP UFREEPЬ PRS`egPUP UFREEPww1Pq"V1.02F_3C0V1.025-JUL-1994 08:50VAX C V3.2-044R F_3C0F3c0_PaletteChars+ sz  C$V_CTYPEDEFSPALNUMERR_MSG F3C0_PALETTECHARS+$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSC1LISTC2LISTC3LISTC4LISTFP^TЬP`РPRRѬRSPxRQ޼PA`PALNUMPSSPPhP1?PxRQ޼PA`g~ERR_MSGPPЬ PZ`PЬ P `PЬ P`PЬ PȠI`PЬ Pd`PЬ Pd`PSЬ QSaPЬ QdSaPXP6:Natww1Of"V1.01F_3CV1.025-JUL-1994 08:50VAX C V3.2-044P$^eWXѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSgeegѥХ RTTѬTVPxTRSBcPALNUMPVVPPP1=?PxTRSBcg~ERR_MSGegPUP UFREEPegPUP UFREEPЬ PZ`egPUP UFREEPЬ P `egPUP UFREEPЬ P`egPUP UFREEPЬ PI`egPUP UR F_3CF3c_PaletteChars} s  C$V_CTYPEDEFSDEREFPALNUMERR_MSGMALLOCFREE F3C_PALETTECHARS}$CODE$DATA&"[ VMS.BCKO[V9.BIN]RT.OLB;1 NSTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSC1LISTC2LISTC3LISTC4LISTFREEPЬ Ph`egPUP UFREEPЬ Ph`egPUP UFREEPV(Ь QVaegPUP UFREEPЬ QhVaegPUP UFREEPPKd+ww1μ"V1.02F_3B0V1.025-JUL-1994 08:50VAX C V3.2-044R F_3B0 F3b0_NewColor sB C$V_CTYPEDEFS MUTABLE_COLORERR_MSG  F3B0_NEWCOLOR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS<P^STլyxTQЬRAbP`dAP`PAb~ERR_MSGPxTQЬRAP`PˏPAb~ERR_MSGPxTQЬPAP`PРRTKc УPc~ERR_MSGPУPˏPc~ERR_MSGPУPРR߭T~xTPP~R MUTABLE_COLORPPЬ PЭЏ`Pww1"V1.01F_3BV1.025-JUL-1994 08:50VAX C V3.2-044P(^WeXѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТSVvg ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРS߭V~RxVPPR F_3B F3b_NewColor sl  C$V_CTYPEDEFSDEREF MUTABLE_COLORERR_MSGMALLOCFREE  F3B_NEWCOLOR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ VMS.BCKO[V9.BIN]RT.OLB;1 3ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSjR~S MUTABLE_COLORPehPUP UFREEPЬ PЭЏ`ehPUP UFREEPww1"V1.02F_3A0V1.025-JUL-1994 08:51VAX C V3.2-044R F_3A0 F3a0_Lower sJ C$V_CTYPEDEFS LOWERWINDOWERR_MSG  F3A0_LOWER$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^STլyxTQЬRAbP`dAP`PAb~ERR_MSGPxTQЬRAP`PˏPAb~ERR_MSGPxTQЬPAP`PРRTKc УPc~ERR_MSGPУPˏPc~ERR_MSGPУPРRR LOWERWINDOWT}c P} Pww1"V1.01F_3AV1.025-JUL-1994 08:51VAX C V3.2-044P$^WeXѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТSVvg ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРSSR F_3A F3a_Lower sr  C$V_CTYPEDEFSDEREF LOWERWINDOWERR_MSGMALLOCFREE  F3A_LOWER$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNOW VMS.BCKO[V9.BIN]RT.OLB;1 w VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSU LOWERWINDOWV}g ehPUP UFREEP} ehPUP UFREEPww1PP"V1.02F_390V1.025-JUL-1994 08:51VAX C V3.2-044R F_390 F390_GotoXY sa C$V_CTYPEDEFSERR_MSG CNV_C_INT | F390_GOTOXY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP| ^UVլyxVRЬSBcP`dBP`PBc~ERR_MSGPxVRЬSBP`PˏPBc~ERR_MSGPxVQЬPAP`PРTVKe ХPe~ERR_MSGPХPˏPe~ERR_MSGPХPРTѬVԭ-P߭xVRЬSBc CNV_C_INTPBce~ERR_MSGPVPPԭ1P߭VRxRRЬSBc CNV_C_INTPBce~ERR_MSGPФ P$Ф P(ФPЭDФPЭ@V}e P} Pww1"V1.01F_39V1.025-JUL-1994 08:51VAX C V3.2-044P,^WeXѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТTVvg ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРTѬVԭD߭xVRR F_39 F39_GotoXY s  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_INTMALLOCFREE  F39_GOTOXY$CODE$DATASTDINSTDOUTqPeT@cR[YYN[OZO ߠ[LUE\TKI\Zm [_y^LOCXEjMN_PDX@LH M  R 7URn_CYOXMUQL@SOW   I [oF@US^<IL  Q\XD (YFSUTUL< KJQSP]9W[J[JA ]_m㵡HA^PP \ UMMQCKLA []ZIMD RFWKG_Q UVR@N[ GJH C J]S ^ULM N@OI^[\HG N _N M VG _RPN GIJKF UQ @ZRKVK] HK(ILRPTT "jPL\]Q1ѵ O?HXPG]K4Ls xZWTMrBTHIæ\FYL[I8OLK\^K[N4UV]$RGNZY_QWKDVAE FJF%SYaJ \FFJP_ GWY\]CTWI_EVPUJBZI \ WbCV>/RWUCخTRT6ʲGXZ]QG^Z\Mg\FH[DNV QFMSȥSO Oa6XVW NQ^䞯>]A^\CFWUACBIB LwZV+_GJڧaEi \UW ^% tOARN @Lep(To_v%W@CXGVW Rk VjSDOY'q UHHC 'WHDQPUWSU]]TLBN G@VT@QnWII HBDYSZ^^OQ WWPPJC]VQ[ ]CLOAUUS [RVW_ EGQ>^Iz%ʝ$iʼ]GEJ@ JJLCsN''zRUGV\HI-cYA^D:NzecNꩩQG]S]SQJ\B 6^N =5?y]v{{pg;9CS LL KPIZWEgsPl:/*%ɰM@IBǮ EAO(}XCcK__tTϖVISE[j B۪Z'*@u*>]3IGA{J (dڌc2so}3<0ӹ S kf6~g1gzXDя[ 3-WVz67 lKA NGvUK&KLWLN C@N]LA_CY%Sxie5ڋNSOȝ'5S6H7qU\~e'Mnޤ:ʩ!c@/: sG~Q5ݪG rHϗT.]ǭ. UO/Txa3{ 7\sppdw2DW)ݶ$+{ZǬ~˚_{! qkcK2K/ y- .jRoX6Q0k'6 ۝ZP.AgxI BM5m1+Ω'2bXȥ'}Ja )+#:{}.CHrU$8㤈%{msP#  ev1 HCGCCANCWN Y/[MOGQMPzR ZA1ZMSBrU PJ^I_TSEEPKP@[JJMVVG^^ VY ZAU^@YUI_SW U WT,\LJ_OYWQMF UHIX\ONAIXPXQFULKPADJVOYZ\DZKZ]ZOIDXTVP] L黢ZVYC ^LJGPY@JVR_UDHX J^ PL^G[K\U  @L HMY^A@[HBQMK Q"hBRE^#pM 3Q-q@bDQ}P]PJ M~D\KsY :RqFGrIuPH\Su Z 'J: eXT &PVV=\J V8NIOBYYXHXP@N A@Y_YF OLZ@U A\TW[XYYPCKAQ_C \^_[ ^T\LBEUHPZYNKMVNQ [LV O騿_NZIB\ _OVES񿣵 J TWL^R WNFY@TMKCMGFF[AKJDYX]_JI@A PCFZCEMMSYMYLDw[_ YNLdzG[ YaU M Z+KDOSX'M MGMPJS]ST.\AGаRL>\A0 REFVPCEV@E]NvDPX[] DBFXB@BWKGMF쳻_ OVZ\K蠳YI _X嫣^ADM TI O J\IVZV HEHY{R˰_HYSQBCK^A]‚D6y KITRgjLOQLS_ׯXs_bZ,L) D+ epLL۴ ÔeJ ] HK_f~ ܴ%H.ON[zHGjFQN9U)@NX `ԦD%_]\(?U VNXc"G㄰(L^ Ok۷^J]G\]vA+6VG>PO2䀐TADbEPmǿ1{:Aز@AVPpԩLWW^RU@d|HO @]NIPK Q@⵽ T_B [ EY] Z䩈T@^i[a@lvR] LTC=dPUE0.FOoeZ^TBLU P GYSUm&"UDN=7w`#h GL$2\B`VVЬ\KM՜'MG*RSNK";f^IE WQXW]dׅ㴡T\)#`7TFBN@S.?@^#+۟޿mFt}QO>{U8~"fO nvBDBHBO£#"}M]_)x lFXRIF0&Z Q\COOy:|^D\DV{U\ ƯF;[ZEOҋ`?KjVrWTXB5pbGDFRN)ETJi b>PVCB['jnAo@O \ FS8M'2֢O݈|=}@57#x}a+/^p5f) 0y͡3PAa` , ƈe|LIutX Btő{o'<)Vx];pF.䐚3ȣlӀDmvRWCJM_yFYU;;/tA/iqi9:*~+d.z>?v\1$Bfiʸ[5Q\mӰ;YC:Y iEi0Y 7c \#e|ߊ؍xղ6l1CI w%M|8^ͳ Y*r ^` AHW݄LL~}}Vz8KA& `8OIT.Ew'Oj}ȍ@C}ldӝ+DNdG| PhTFS)3TG>*!T#g_"SRٓ,8WTRE(JѨIXG1IʀhèbUPZNZӰߦ֓W֩i?[Zr!r/[(찋a^}A"SS]+H{gvQɥ2QEX  XqD"f>?j>)$V'Rl&6(naYF![s >Z!sûԾR|c; ǠQ)@vqgZ_+#}_N'OҊM NKU@IEUD]CGXW TCWDY XUXFJN礥HMHXYD_BG_FRXTJ]}[2]NRWbD[LQ@ X_GGDNI.KY<C GBXIZ bLKp?G~t'~UAE= Ky,]GTXt V _V$qNAD{_ԖAqO:u]5 [!2 VMS.BCKO[V9.BIN]RT.OLB;1 ۳STDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS"SBc CNV_C_INTP+SBce~ERR_MSGehPUP UFREEPVPPԭI߭VRxRRSBc CNV_C_INTP+SBce~ERR_MSGehPUP UFREEPФ R$Ф R(ФRЭDФRЭ@V}g ehPUP UFREEP} ehPUP UFREEPww1`K($V1.0 1F_2RV1.025-JUL-1994 09:00VAX C V3.2-044P^e[Ѭ U.PRxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬSSTTTkeeknԮS1xSTCdRb1CRbR'Cd~ERR_MSGekRUR UFREEPxSTCRbRˏR'Cd~ERR_MSGekRUR UFREEPxRPBRbRТZ֮1 1p"V1.02F_380V1.025-JUL-1994 08:51VAX C V3.2-044R F_380 F380_GotoRC sb C$V_CTYPEDEFSERR_MSG CNV_C_INT | F380_GOTORC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP| ^UVլyxVRЬSBcP`dBP`PBc~ERR_MSGPxVRЬSBP`PˏPBc~ERR_MSGPxVQЬPAP`PРTVKe ХPe~ERR_MSGPХPˏPe~ERR_MSGPХPРTѬV,߭xVRЬSBc CNV_C_INTPBce~ERR_MSGPVPP0߭VRxRRЬSBc CNV_C_INTPBce~ERR_MSGPФSRФ PР PĠRРPHR@ФRSФ PР PРP2M VMS.BCKO[V9.BIN]RT.OLB;1 Y~ERR_MSGeiPUP UFREEPШPˏP&h~ERR_MSGeiPUP UFREEPШPРVѬW GP߭R F_38 F38_GotoRC s  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_INTMALLOCFREE  F38_GOTORC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSYxWRSBc CNV_C_INTP+SBce~ERR_MSGeiPUP UFREEPWPPH߭WRxRRSBc CNV_C_INTP+SBce~ERR_MSGeiPUP UFREEPЦTSЦ RТ PĠSРRHS@ЦSTЦ RТ RТR2ZXKЧ QЧPRСDTТSRUR<~TRS<~TUSX߭߭߭߭VkiWRECTARGSPxPP޼R@be~ERR_MSGP XP@Sc@Sc@Rb@RbVRRiVSxSSkPC`RbUhPC`P޼RCbf~ERR_MSGPpRpϦ~pR~pPpϜ~rR~rPrPd4DPfυPd8PjPUVRRiVSxSSkPC`Rb <ZTpPC`P޼RCbf~ERR_MSGPp~FABSqP(VRxRR޼PB`e~ERR_MSGPrPd4D?PfPd8PjPTTjPZ XP@RZbPT TUTjPT XP@STcU UjPRzRP{ZPQPPZUzUP{ZPQPPU XP@SR F_320( F320_FillArc s( C$V_CTYPEDEFSRECTARGSERR_MSG CNV_C_DBLFMODFABS XFILLARCSABS ( F320_FILLARC#$CODE@$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGACURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRO! VMS.BCKO[V9.BIN]RT.OLB;1 lABKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLCL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTDRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSUcXVVi1Vn1Ч PЧSÀRРDUТTÄRÈRXURT XFILLARCSXUݮT XFILLARCSn } P} P(wwF1`e#V1.01F_32V1.025-JUL-1994 08:55VAX C V3.2-044PA!hA!hIA!hB˙IA!hΠ^ѬV,RxRRR~MALLOCPV<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTeffeԮS1xSTCdRb1CRbR+Cd~ERR_MSGfe󞭸RVR VFREEPxSTCRbRˏR+Cd~ERR_MSGfe󞭸RVR VFREEPxGSRCRbRТX֮1P R.~ERR_MSGfe󞭸RVR VFREEPRˏR.~ERR_MSGfe󞭸RVR VFREEPRТXYЮWެ[Wk W1 XFILLARCSkn CNV_C_DBL FMODABSYKШ QШPRСDTТSRUR<~͸TRS$<~͸TUS$Y߭߭߭߭WݮXRECTARGSP3xPPR@be~ERR_MSGfe󞭸RVR VFREEP YP@͸Sc@ͺSc@ͼRb@;RHbWRRkWSxSSPC`RbU1C`P/RCbf~ERR_MSGfe󞭸RVR VFREEPpRpy~pR~pPPpl~rR~rPrPd4DPfUPd8PjPUWRRkWSxSSPC`Rb<ZT1C`P/RCbf~ERR_MSGfe󞭸RVR VFREEPp~FABSqP7WRxRRSBce~ERR_MSGfe󞭸RVR VFREEPrPd4DPfϛPd8PjPTTPZ YP@RZbT TUTPT YP@STcU#UPRzRP{ZPQPPZUIPzUP{ZPQPPU YP@SUcYWWk1)W1 Ш PШSÀRРDUТTÄRÈZRY͸URT XFILLARCSY͸UZTR F_32( F32_FillArc s(ѹ  C$V_CTYPEDEFSDEREFRECTARGSERR_MSG CNV_C_DBLMALLOCFMODFJABS XFILLARCSABSFREE ( F32_FILLARC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMKTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTLK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STAMTTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NNUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS` XFILLARCSծ%} fe󞭸RVR VFREEP} fe󞭸RVR VFREEP(wwP10k#V1.02F_310V1.025-JUL-1994 08:55VAX C V3.2-044P^TeVW}1ffѬW1xWQЬRAbP`oAP`PAb~ERR_MSGfPxWQЬRAP`PˏPAb~ERR_MSGfPxWQЬPAP`PРUWVd ФPd~ERR_MSGfPФPˏPd~ERR_MSGfPФPРUѬW~xWRЬSBcP` `BP`UISETFGPLfPBc8! VMS.BCKO[V9.BIN]RT.OLB;1 fPQ CNV_C_STRPBcg~ERR_MSGfPUSETFGP fPUGETFGSTRLENPRRR F_310F310_Fg sv  C$V_CTYPEDEFSSETFGISETFGGETFGERR_MSG CNV_C_STRALCSTRSTRLEN F310_FG$CODE$DATASTDINSTDOUTSTDERR_CRTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESSTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESUESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFVT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS@ALCSTRP|~ERR_MSGfPЬ PR`fPww1. .%V1.02F_2J0V1.025-JUL-1994 09:07VAX C V3.2-044R F_2J0 F2j0_Clipd sb C$V_CTYPEDEFS UNSETCLIPSETCLIPRECTARGSERR_MSG | F2J0_CLIPd$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNOY1J=t#V1.01F_31V1.025-JUL-1994 08:55VAX C V3.2-044P^WeYЬRRU&xRRR~MALLOCPU<1~ERR_MSGP}1ץRެTRd(SRPxPP@xRP@cDEREFRRdЬRRSSSieeiVR1xVSTCdRb1CRbR'Cd~ERR_MSGeiPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGeiPUP UFREEPxVQPARbRТXVug ЧZP&g~ERR_MSGeiPUP UFREEPЧPˏP&g~ERR_MSGeiPUP UFREEPЧPРXѬVR F_31 F31_Fg s  C$V_CTYPEDEFSDEREFSETFGISETFGGETFGERR_MSG CNV_C_STRALCSTRMALLOCSTRLENFREE F31_FG[$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRIN\GCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKY]WD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STR^COLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEAD_POLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYSv. VMS.BCKO[V9.BIN]RT.OLB;1 U_ CURSORSYMSd1xVSTCdRb b-CRbXISETFGP~eiPUP UFREEPCd CNV_C_STRP+RCbg~ERR_MSGeiPUP UFREEPݥ XSETFGPeiPUP UFREEPXGETFGSTRLENPRRALCSTRP "|~ERR_MSGeiPUP UFREEPЬ PХ R`eiPUP UFREEPwwa10~#V1.02F_300V1.025-JUL-1994 08:56VAX C V3.2-044R F_300 F300_Event si  C$V_CTYPEDEFS WGETEVENTERR_MSG | F300_EVENT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSb ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPcBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCdE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZEeSTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICfSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^TeUVЏe잭eѬV1xVQЬRAbP`mAP`PAb~ERR_MSGЭePxVQЬRAP`PˏPAb~ERR_MSGЭePxVQЬPAP`PРSVTd ФPd~ERR_MSGЭePФPˏPd~ERR_MSGЭePФPРS}LS WGETEVENTPR@dФPS }dVQxQQ޼PA`P}`} ЭePR~ERR_MSGЭeP~ERR_MSGЭePwwh1g#V1.01F_30V1.025-JUL-1994 08:56VAX C V3.2-044P,^VeXЬRRU(PxRRR~MALLOCPU<1~ERR_MSGPЏRެTRd(SRPxPP@xRP@cDEREFRRdЬRRSSSheehWR1xWSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxWSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxWQPARbRТSWuf ЦiP&f~ERR_MSGehPUP UFREEPЦPˏP&f~ERR_MSGehPUP UFREEPЦPРS}R F_30 F30_Event s  C$V_CTYPEDEFSDEREF WGETEVENTERR_MSGMALLOCFREE  F30_EVENT$CODE$DATASTDINSTDOUTSTDERRj_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASEkSTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SlUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGmNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHInCSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSLS WGETEVENTPTSfЦPS }fQХ9GZ@J(A=v ?695!RS#xE@g',d}a^UP(z _EE%A_OaK8D|X9I/-t]S,U[Se.U ^Ikt/I : j層Z4Rl VhLN`]c'Y_y <؅4w Ie9밦K;T pxw:Ld2XA]LMD {^]GqX3=R3^b;`i O ⃬ҾY/Xo/zwG^בQ0jѼGjQSAzݏٻѿX zLZ=FG n& ԷZؚ+.=%R{F Ҍ5z9Vhj++# ڈnauJMJ~ ęGF%%^j)Ϛ(ivؼzd[#sʃwIJK謙FYx.@*sP5mBό%!2m\:ǟf:f% Ъ`؈}/r6F8Xtd-fP{ObzUxl6sWu$Z>X9I\r|-Sgn mW"d"G0o0֤P$[`Ss %NL ] !ִ(QG-QN;WyO'I>,PPf=IP|DFHZ{Xa+WsUbBZ 3eupH\y} g.sBWPV"+ A#8Ư\Y#H;VzXIUF Z%h`bFKqXOfQgfj: >#t:L^A~< ]:rAGZJ[qUUqeZ9 D7G"8췧FBDb,brXXj=O?y`W,RGYS9C% &:-vYw-Bf(񣵷hgPU, nj2vIT[[5HZ{KiGU\ֻPxt{H)= XJiy)BS.tƗ K-G [!2a[!l}`m+0-Fam|}IbWȸ~&|0]}I tg]2S4s+ |8I7,JJ{PuPAҭ<B[pZdz$/yrwY&oxK#VyJ,CpU\3yAc!͏%> a;oE:0$aHLh9j"+1N{+J U<(B$\ndZpD?r]p%f<:NeZXORZD"B0< !%@UM1ݫɝ 0jD9X4HUq0)S(2oſCqmw#a1< ]UPޡAJPO}GF1MBOXD OUyZHV^KD| [YT]EVA I[R ZP [SG⪯YHAJEZWXHI[RZp  SISMK6>GUHERU!N0EXOW%JG ~PCRF}  JWX _N "e:N(-K\qDD9D=FIKMXP[H QoI Fbc3n/>o {?$+{&Ö~ϡ嶼EA^ O y MApffekP0J^pG;_yE PFvQWpnS#'P D}I^xPU%U @RJB]E붷P^3nFgPºtHׇCNUx@PU867SK5C T NǨG<YRvHՄ dvDD紴T^4 ‘8Ο[! JELѝziL0"?ϲN~S6SleHG큳W!*ڜ*cX@4|r[/Vk1/TVk!GUtشVIyEPFSyG/I, ʆLiAm 7G{X35Yc\PG[#RЈHRJ ̴U/q_SI^M"E~=Drq&H3P^1nNn`<RZc8HMA_GS L{K]gDVxEQlNyץOFzOnmnz T^U!Z_nЋ] H.ͽC'S. F|_FIETTEu/@T8N !%\^ }C\ s)\鹩1s4,ER>QJ~{\pe}BoטmB-B8X[ 5Hp(}y(KàةuM߻1_oKbѺfh]ZA BiY1jc)|JGl`S! Nsmyz<9Py ؋Pyd̋gu\`pU;&&Gk٠S_rKٖ1R%u\3]OqPrgz6MԳaC >B&Axfrʢ:P0 㒕T]ԅ;n^ig#kEq8Ϡ絰Du,Nrj4y u%Oҙ~Ab;;`݊H  N[2iV}{D|$&.`g׳[h/kDRt:zLĔPL!PkY@]Pϊ8 7y;N¿/h+IO:ïD\y W EanbzW7L.#- "QR>NB(XS'LƐA3vOX*ZEфTzXTwq9lIk<{ae`DeȔv;EDv B_uؖ8xGa /Fi[Ji>2s9%*1ƫl6D#̓⭤ C̤ Pk'ϕlMxG]$?M"ee{z|=^OMV~X閫988 (^g0 PõHGdW#oQggTI1Z Lc WxIXZ|en Z'3I5B :D?.BZ)wֶc >{]1E׼0;BWyoA=h{Wg>צT@`S@Ab)TQT WW8PLV`FIl¿iKIڇKe'ʮS΍NGCHA/S`z#KuZUZH^K WM]HZOE CBSF \ID\L\Y  S]B ~uSR,DAȰZ1OJsBVa7n d ^~w Tu A ߖPBXI)n6 ^ ٷqCǖJtk5Lz;_=H\+W]V]VAR]TDRN9L_LG?GPHTpOH_LR ZLD[UKDgUP@\׺PJs$;] ;u*E9z'k׀E%08O41LI#\Tv^wgɾ^H Z5pK8VD,Ls  6[b݌ۦOL [[0TnC(GBejhHը^B?:@J[:EXκ\{SX WYYwpm 5\?OoZbLɢφn\[[@6]:IKt ᾋk@r߸˹% q0 A麴ૂI GGN [󋱡TQITV  uO h"LFY c@*B VbуO#O%nӅe]]X<Z UutTLOPK(VNO|׭}e)$_soȷ<6V]\){jZS[ dz_]\MC'@Z  )%H\INZF3OE/pŃXR{Qe w][T@RNOACD , eX4JniZ'/d J -BvA^N N ODHCMG[HU\A_@]UG릹$LV[A\O FLNDFYSBJ[DJ QCJP ~WB[k [|gVYB"a@QȤ)Ljp6[dm kBO]}#  D\@_2Aՠ R ZZuJYS[U&Nw{j@]FI# :N AkjT&[0_ $#[ N^ DLP-{zB`0K $uc WrCGGrlJm?9[s]DSy(-9} W_[CL # NY96*O^Yp)v[SHT\֌V ~T#f@@Uv1V)-GAomY wSW(R@ޢH ɶmo`$;'5/PMJgk,/ j~)gkx1@p&~>OTg,ӈ+y3cYBCNn3d !GZij7#sVZ M1G._"ĈuznW8Qp#/ڱ? 4t;AԿh*f()rFr:= Ѓn VMS.BCKO[V9.BIN]RT.OLB;1 nPWRxRRSBcP}`} ehPUP UFREEPT&~ERR_MSGehPUP UFREEP~ERR_MSGehPUP UFREEPwwp1`IΎ#V1.02F_2Z0V1.025-JUL-1994 08:56VAX C V3.2-044R F_2Z0F2z0_EraseAreaY sV C$V_CTYPEDEFS ERASEAREARECTARGSERR_MSG |F2Z0_ERASEAREAY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSq ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPrBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOsURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZEtSTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPuHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^VUլyxUQЬSAcRbdARbPAc~ERR_MSGPxUSЬQCRbPˏPCa~ERR_MSGPxURЬPBP`PРTUKf ЦPf~ERR_MSGPЦPˏPf~ERR_MSGPЦPРTURެSRcRU\߭߭߭߭RݬcTRECTARGSPxPP޼Q@ae~ERR_MSGPݭݭݭݭT ERASEAREARRcRUU}f P} Pwww1#V1.01F_2ZV1.025-JUL-1994 08:56VAX C V3.2-044P4^YeXѬS,RxRRR~MALLOCPS<1~ERR_MSGPRެURe#TxRP@xRP@dDEREFRReЬRRTTThcchWR1xWTUDeRb1DRbR'De~ERR_MSGchPSP SFREEPxWTUDRbRˏP'De~ERR_MSGchPSP SFREEPxWQPARbRТVWvi ЩP&ix~ERR_MSGchPSP SFREEPЩPˏP&i~ERR_MSGchPSP SFREEPЩPРVWRެTRdRWwR F_2Z F2z_EraseArea| s  C$V_CTYPEDEFSDEREF ERASEAREARECTARGSERR_MSGMALLOCFREE  F2Z_ERASEAREA|$CODE$DATASTDINSTDOUTySTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDzSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKY{WD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALS|GNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWST}ATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSU߭߭߭߭RUVRECT; VMS.BCKO[V9.BIN]RT.OLB;1 }ARGSP/xPPQ@ae~ERR_MSGchPSP SFREEPݭݭݭݭV ERASEAREARRdRWW}i chPSP SFREEP} chPSP SFREEPwwWSTRINGZUnU߭xUSCP޼RCbe~ERR_MSGP߭USxSSCP޼RCbe~ERR_MSGPШ R$Ш RR F_2Y0F2y0_DrawString s C$V_CTYPEDEFSERR_MSGCNV_TSTR CNV_C_INT XDRAWSTRING F2Y0_DRAWSTRING$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSG(URxRRBBCNV_TSTRP޼SBcg~ERR_MSGPUxUUkRETdWEbRbYSYpCg cШ RШQPТDUРTRVRSWݭݭURTjSWݭݭUVTjSRRWRYSВ RТ RSSYШ QШPRСDUТTRVRYWݭݭURTjYWݭݭUVTj֮Ѯ1vn } P} Pww1P#V1.01F_2YV1.025-JUL-1994 08:57VAX C V3.2-044P^Ѭ[+RxRRR~MALLOCP[<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTekkenS1xnSTCdRb1CRbR,Cd~ERR_MSGkeR[R [FREEPxnSTCRbRˏR,Cd~ERR_MSGkeR[R [FREEPxnSRCRbRТXn1P R/~ERR_MSGkeR[R [FREEPRˏR/~ERR_MSGkeR[R [FREEPRТXnRzRP{PQPP+~ERR_MSGkeR[R [FREEPnRR+~ERR_MSGkeR[R [FREEPԮ ծ1 CNV_C_INT XDRAWSTRINGZ UnU߭xURSBcP0SBce~ERR_MSGkeR[R [FREEP߭URxRRSBcP0SBce~ERR_MSGkeR[R [FREEPШ R$Ш R(URxRRSBcBcCNV_TSTRP0SBcg~ERR_MSGkeR[R [FREEPUxUURETdWEbRR F_2YF2y_DrawString s C$V_CTYPEDEFSDEREFERR_MSGCNV_TSTR CNV_C_INTMALLOC XDRAWSTRINGFREE F2Y_DRAWSTRING$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_StJ VMS.BCKO[V9.BIN]RT.OLB;1 'jTATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS&bYSYqCg cШ RШQPТDUРTRVRSWݭݭURTjSWݭݭUVTjSRRWRYSШ RТ RSSYШ QШPRСDUТTRVRYWݭݭURTjYWݭݭUVTj֮ Ѯ 1n&} keR[R [FREEP} keR[R [FREEPww1I#V1.02F_2X0V1.025-JUL-1994 08:57VAX C V3.2-044P^nլzxnSЬTCdRbeCRbRCd~ERR_MSGPxnSЬTCRbRˏRCd~ERR_MSGPxnSЬRCRbRТYna R~ERR_MSGPRˏR~ERR_MSGPRТYnRzRP{PQPP~ERR_MSGPnRR~ERR_MSGPЩ RТ$ Т([X[1Y XDRAWSEGMENTSެWgCNV_INTZx[VnVXKЩ RЩQPТDTРSRUR<~TRS(<~TUS(XxVSCjP޼RCbe~ERR_MSGP PЏ`P<xXP@RbVSxSSCjP޼RCbe~ERR_MSGP PЏ`P<xXP@RbVSxSSCjP޼RCbe~ERR_MSGP PЏ`P<xXP@RbVxVVFjP޼RFbe~ERR_MSGP PЏ`P<xXSCTdCQ2aR RRaCQ2aR RRaCQ2aRRRa2dRRRd[X[1Щ PЩSÀR F_2X0F2x0_DrawSegment s C$V_CTYPEDEFSERR_MSGCNV_INT XDRAWSEGMENTS F2X0_DRAWSEGMENT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSpRРDUТTÄRÈVRXURT XDRAWSEGMENTSXUVT XDRAWSEGMENTSn } P} Pww1#V1.01F_2XV1.025-JUL-1994 08:57VAX C V3.2-044PΨ^ѬU,RxRRR~MALLOCPU<1~ERR_MSGPSެVSf#TxSRBxSRBdDEREFSSfЬSSTTTeeeenS1xnSTCdRb1CRbR+Cd~ERR_MSGeeRUR UFREEPxnSTCRbRˏR+Cd~ERR_MSGeeRUR UFREEPxnSRCRbRТYn1 R.~ERR_MSGeeRUR UFREEPRˏR.~ERR_MSGeeRUR UFREEPRТYnRzRP{PQPP*~ERR_MSGeeRUR UFREEPnRR*~ERR_MSGeeRUR UFREEPЩ RТ$Т( [X[1 XDRAWSEGMENTSCNV_INTZx[WnWXKЩ RЩQPТDTРSRVR<~TRS$<~TVS$XxWRSBcjP/SBce~ERR_MSGeePUP UFREEP PЏ`P<xXP@RbWRxRRSBcjP/SBce~ERR_MSGeePUP UFREEP PЏ`P<xXP@RbWRxRRSBcjP/SBce~ERR_MSGeePUP UFREEP PЏ`P<xXP@RbͼWxWWRGbjP/RGbe~ERR_MSGeePUP UFREEPͼ ͼPЏ`ͼP<xXSCTdCQ2aRRRaCQ2aRRRaCQ2aR RRa2dR RRd[X[Ȯ1OЩ PЩSÀRРDVТTÄRÈWRXVRT XDRAWSEGMENTSXVWT2R F_2XF2x_DrawSegment s  C$V_CTYPEDEFSDEREFERR_MSGCNV_INTL3m VMS.BCKO[V9.BIN]RT.OLB;1 MALLOC XDRAWSEGMENTSFREE F2X_DRAWSEGMENT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSf XDRAWSEGMENTSn%} eeRUR UFREEP} eeRUR UFREEPww1 m#V1.02F_2W0V1.025-JUL-1994 08:57VAX C V3.2-044P^nլzxnSЬTCdRbeCRbRCd~ERR_MSGPxnSЬTCRbRˏRCd~ERR_MSGPxnSЬRCRbRТYna R~ERR_MSGPRˏR~ERR_MSGPRТYԮ nVެVVn1(XDRAWRECTANGLEW߭߭߭߭Vݬݾ YRECTARGSPxPP޼R@be~ERR_MSGPѮ 1Щ RЩQPТDUTSXVS1xVQAP<`~AP<`~AP2`~AP2`~USTgxVQAP<`~AP<`~AP2`R F_2W0F2w0_DrawRectangle sh C$V_CTYPEDEFSRECTARGSERR_MSGXDRAWRECTANGLE F2W0_DRAWRECTANGLE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS)~AP2`~UXTgVԮ x RBQaBQaBP`BP`֮ VV1Vn1Щ TЩSÀRФD[ТZÄXÈUծ wXDRAWRECTANGLESX1xURBP<`~BP<`~BP2`~BR2b~[XZcxURBP<`~BP<`~BP2`~BR2b~[ݮZcUU n } P} Pww1~!#V1.01F_2WV1.025-JUL-1994 08:58VAX C V3.2-044Pδ^ѬZ,RxRRR~MALLOCPZ<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTejjenS1xnSTCdRb1CRbR+Cd~ERR_MSGjeRZR ZFREEPxnSTCRbRˏR+Cd~ERR_MSGjeRZR ZFREEPxnPR@RbRТYn1 i(vG VMS.BCKO[V9.BIN]RT.OLB;1 sR.~ERR_MSGjeRZR ZFREEPRˏR.~ERR_MSGjeRZR ZFREEPRТYԮnVެVVn1FоXDRAWRECTANGLEX߭߭߭߭VݮYRECTARGSP3xPPR@be~ERR_MSGjePZP ZFREEPѮ1Щ RЩQPТDUРTSWVS1xVQAP<`~AP<`~AP2`~AP2`~USThxVQAP<`~AP<`~AP2`~AP2`~UWThVԮxRBQaBQaBP`BP`֮VV1Vn1Щ TЩSÀRФDТ[ÄWÈ UծxXDRAWRECTANGLESW2xURBP<`~BP<`~BP2`~BR2b~ݮR F_2WF2w_DrawRectangle  s  C$V_CTYPEDEFSDEREFRECTARGSERR_MSGMALLOCXDRAWRECTANGLEFREE F2W_DRAWRECTANGLE $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$W[cxURBP<`~BP<`~BP2`~BR2b~ݮ$ݮ [cUUn%} jeRZR ZFREEP} jeRZR ZFREEPww1 9#V1.02F_2V0V1.025-JUL-1994 08:58VAX C V3.2-044P^nլzxnSЬTCdRbeCRbRCd~ERR_MSGPxnSЬTCRbRˏRCd~ERR_MSGPxnSЬRCRbRТYna R~ERR_MSGPRˏR~ERR_MSGPRТYnRzRP{PQPP~ERR_MSGPnRR ~ERR_MSGPЩ RТ$Т(RxRRЬSBcCNV_INTPBce~ERR_MSGP RЏbR<RxRRЬSBcCNV_INTPBce~ERR_MSGP RЏbR<2RRR2RRRZWZ 1r XDRAWLINESެXШCNV_INT[ZZTnTWVЩ RЩQPТDUРSRVR<~URS,<~UVS,ЭWxTSCkP޼RCbe~ERR_MSGP PЏ`P<xWP@RbTxTTDkP޼RDbe~ERR_MSGP PЏ`P<xWRBScBQ2aRRRa2cRRRcZWZ 1Щ PR F_2V0F2v0_DrawPolygon s C$V_CTYPEDEFSERR_MSGCNV_INT XDRAWLINES F2V0_DRAWPOLYGON$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRL0_ VMS.BCKO[V9.BIN]RT.OLB;1 WBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSvЩSÀRРDUТTÄRÈVRWURT XDRAWLINESWUVT XDRAWLINESn } P} Pww1@#V1.01F_2VV1.025-JUL-1994 08:58VAX C V3.2-044PΨ^ѬW,RxRRR~MALLOCPW<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTeggenS1xnSTCdRb1CRbR+Cd~ERR_MSGgeRWR WFREEPxnSTCRbRˏR+Cd~ERR_MSGgeRWR WFREEPxnPR@RbRТYn1 R.~ERR_MSGgeRWR WFREEPRˏR.~ERR_MSGgeRWR WFREEPRТYnRzRP{PQPP*~ERR_MSGgeRWR WFREEPnRR *~ERR_MSGgeRWR WFREEPЩ RТ$Т(RxRRSBcCNV_INTP/SBce~ERR_MSGgeRWR WFREEP RЏbR<RxRRSBcCNV_INTP/SBce~ERR_MSGgeRWR WFREEP RЏbR<2RRR2RRRZXZ 1 XDRAWLINES[CNV_INTZZSnSXTЩ RЩQPТDUРTRVR<~URTk<~UVTkЭXxSRPB`P/PB`e~ERR_MSGgePWP WFREEP PЏ`P<xXP@RbͼSxSSRCbP/RCbe~ERR_MSGgePWP WFREEPͼ ͼPЏ`ͼP<xXRBScBQ2aRRRa2cRRRcZXZ 1oЩ PЩSÀRРDUТTÄRÈVRXURT7R F_2VF2v_DrawPolygon s  C$V_CTYPEDEFSDEREFERR_MSGCNV_INTMALLOC XDRAWLINESFREE F2V_DRAWPOLYGON$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS~ XDRAWLINESXUVT XDRAWLINESn%} geRWR WFREEP} geRWR WFREEPww1Б#V1.02F_2U0V1.025-JUL-1994 08:58VAX C V3.2-044P^nլzxnSЬTCdRbeCRbRCd~ERR_MSGPxnSЬTCRbRˏRCd~ERR_MSGPxnSЬRCRbRТWna R~ERR_MSGPRˏR~ERR_MSGPRТWnRzRP{PQPP~ERR_MSGPnRR ~ERR_MSGPЧ RТ$Т(ZXZ 1j XDRAWPOINTSެYiCNV_INT[ZZTnTXOЧ RЧQPТDUРSRVR<~URS,<~UVS,XxTSCR F_2U0F2u0_DrawPoint s C$V_CTYPEDEFSERR_MSGCNV_INT XDRAWPOINTS F2U0_DRAWPOINT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASEL\J VMS.BCKO[V9.BIN]RT.OLB;1 STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSqkP޼RCbe~ERR_MSGP PЏ`P<xXP@RbTxTTDkP޼RDbe~ERR_MSGP PЏ`P<xXRBScBQ2aRRRa2cRRRcZXZ 1Ч PЧSÀRРDUТTÄRÈVRXURT XDRAWPOINTSXUVT XDRAWPOINTSn } P} Pww10#V1.01F_2UV1.025-JUL-1994 08:59VAX C V3.2-044Pθ^ѬW,RxRRR~MALLOCPW<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTeggenS1xnSTCdRb1CRbR+Cd~ERR_MSGgeRWR WFREEPxnSTCRbRˏR+Cd~ERR_MSGgeRWR WFREEPxnPR@RbRТXn1 R.~ERR_MSGgeRWR WFREEPRˏR.~ERR_MSGgeRWR WFREEPRТXnRzRP{PQPP*~ERR_MSGgeRWR WFREEPnRR *~ERR_MSGgeRWR WFREEPШ RТ$Т(|YZ 1 XDRAWPOINTSCNV_INT[ZZSnSYOШ RШQPТDUРTRVR<~URT(<~UVT(YxSRPB`kP/PB`e~ERR_MSGgePWP WFREEP PЏ`P<xYP@RbSxSSRCbkP/RCbe~ERR_MSGgePWPR F_2U F2u_DrawPoint s  C$V_CTYPEDEFSDEREFERR_MSGCNV_INTMALLOC XDRAWPOINTSFREE  F2U_DRAWPOINT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS* WFREEP PЏ`P<xYRBScBQ2aRRRa2cRRRcZYZ 1vШ PШSÀRРDUТTÄRÈVRYURT XDRAWPOINTSYUVT XDRAWPOINTSn%} geRWR WFREEP} geRWR WFREEPww1@߁D&V1.0T2F_1T0V1.025-JUL-1994 09:15VAX C V3.2-044R F_1T0F1t0_put  sI C$V_CTYPEDEFSALCLSTBERR_MSG F1T0_PUT $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP% VMS.BCKO[V9.BIN]RT.OLB;1 /1ʢ#V1.02F_2T0V1.025-JUL-1994 08:59VAX C V3.2-044P^nլzxnSЬTCdRbeCRbRCd~ERR_MSGPxnSЬTCRbRˏRCd~ERR_MSGPxnSЬRCRbRТWna R~ERR_MSGPRˏR~ERR_MSGPRТWnRzRP{PQPP~ERR_MSGPnRR ~ERR_MSGPЧ RТ$Т(ZXZ 1q XDRAWLINESެYiCNV_INT[ZZTnTXVЧ RЧQPТDUРSRVR<~URS,<~UVS,ЭXxR F_2T0 F2t0_DrawLine s C$V_CTYPEDEFSERR_MSGCNV_INT XDRAWLINES  F2T0_DRAWLINE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuTSCkP޼RCbe~ERR_MSGP PЏ`P<xXP@RbTxTTDkP޼RDbe~ERR_MSGP PЏ`P<xXRBScBQ2aRRRa2cRRRcZXZ 1Ч PЧSÀRРDUТTÄRÈVRXURT XDRAWLINESXUVT XDRAWLINESn } P} Pww1 R9$V1.01F_2TV1.025-JUL-1994 08:59VAX C V3.2-044Pθ^ѬW,RxRRR~MALLOCPW<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTeggenS1xnSTCdRb1CRbR+Cd~ERR_MSGgeRWR WFREEPxnSTCRbRˏR+Cd~ERR_MSGgeRWR WFREEPxnPR@RbRТXn1 R.~ERR_MSGgeRWR WFREEPRˏR.~ERR_MSGgeRWR WFREEPRТXnRzRP{PQPP*~ERR_MSGgeRWR WFREEPnRR *~ERR_MSGgeRWR WFREEPШ RТ$Т(|YZ 1 XDRAWLINES[CNV_INTZZSnSYTШ RШQPТDUРTRVR<~URTk<~UVTkЭYxSRPB`P/PB`e~ERR_MSGgePWP WFREEP PЏ`P<xYP@RbSxSSRCbP/RCbe~ERR_MSGgR F_2T F2t_DrawLine s  C$V_CTYPEDEFSDEREFERR_MSGCNV_INTMALLOC XDRAWLINESFREE  F2T_DRAWLINE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADʢ VMS.BCKO[V9.BIN]RT.OLB;1 POLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS3ePWP WFREEP PЏ`P<xYRBScBQ2aRRRa2cRRRcZYZ 1oШ PШSÀRРDUТTÄRÈVRYURT XDRAWLINESYUVT XDRAWLINESn%} geRWR WFREEP} geRWR WFREEPww1 $V1.02F_2S0V1.025-JUL-1994 08:59VAX C V3.2-044P^ZYUլ|xUSЬTCdRbgCRbRCd~ERR_MSGPxUSЬTCRbRˏRCd~ERR_MSGPxURЬPBRbRТ[UNPj ЪRj~ERR_MSGPЪRˏRj~ERR_MSGPЪPР[ѬU-߭xURЬSBc DEF_C_INTPBce~ERR_MSGPURR1߭URxRRЬSBc DEF_C_INTPBce~ERR_MSGPURRg~ERR_MSGPURxRRЬSBcCNV_TSTRPBcg~ERR_MSGPЫ R$Ы R(ЭUUWXWSUS1eRʏRBi" XRPPR0RXUSePʏP@iXRR,PeVV# V~1UTUQQW+PaRˏRP@iTR  R,PQQWTPXSSzTP{SPQPPPSTSUW~UVSXݭݭ[BLIMAGEP<1~ERR_MSGP}L PVWRUReRʏRBiPTWSUS4eRʏRBi%P TRPPR0RTUSePʏP@iޚRR,PVgTT؏TTPVc TTPTPALSETUPPS<1~ERR_MSGPRRP@ RTUQQW?PaR F_2S0F2s0_DrawImageF s͹  C$V_CTYPEDEFSSTRIMAGEBLIMAGEPALSETUPERR_MSG DEF_C_INTCNV_TSTR F2S0_DRAWIMAGEF$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSRRP@ @ R~ RTR  R,PQQWTPzTP{XPQPPPXTPUW~USPXݭݭ[ STRIMAGEPV }L PV<1~ERR_MSGPЬ RVЏbPww1P$V1.01F_2SV1.025-JUL-1994 09:00VAX C V3.2-044P^e[ZѬ W-PRxRRR~MALLOCPW<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬSSTTTkggkUS1xUSTCdRb1CRbR(Cd~ERR_MSGgkRWR WFREEPxUSTCRbRˏR(Cd~ERR_MSGgkRWR WFREEPxURPBRbRТnU1P R+~ERR_MSGgkRWR WFREEPRˏR+~ERR_MSGgkRWR WFREEPPРnѬUG߭xURSBc DEF_C_INTP,SBce~ERR_MSGgkRWR WFREEPURRK߭URxRRSBc DEF_C_INTP,SBce~ERR_MSGgkRWR WFREEPURR'g~ERR_MSGgkRWR WFREEPUSxSSRCbCNV_TSTRP,RCbg~ERR_MSGgkRWR WFREEPnRТ R$nRТ R(UUXYXSUS3eRʏRBj$P YRPPR0RYUSePʏP@jYRR,gkRWR WFREEPeVV# V~1 UTUSSX?cRˏRP@jT$R R,gkPWP WFREEPSSXTgkRWR WFREEPYSSzTP{SPQPPgkRWR WFREEPSTSUX~UVSYݭݭݮBLIMAGEP(<1~ERR_MSGgkRWR WFREEP}L gkRWR WFREEPVXRUReRʏRBjgkRWR WFREEPTXSUS3eRʏRBj$P TRPPR0RTUSePʏP@jޚRR,gkRWR WFREEPVgTTTT,VR F_2S F2s_DrawImage s Pbj VMS.BCKO[V9.BIN]RT.OLB;1 d  C$V_CTYPEDEFSDEREFSTRIMAGEBLIMAGEPALSETUPERR_MSG DEF_C_INTCNV_TSTRMALLOCFREE  F2S_DRAWIMAGE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSߏc TTgkRWR WFREEPTPALSETUPPS(<1~ERR_MSGgkRWR WFREEPRRP@ RVUTTXUPdRRP@ @ R~ RV$R R,gkPWP WFREEPTTXVgkRWR WFREEPzVP{YPQPPgkRWR WFREEPYVTUX~USTYݭݭݮ STRIMAGEPT"}L gkRWR WFREEPT(<1~ERR_MSGgkRWR WFREEPЬ RTЏbgkRWR WFREEPww1!$V1.02F_2R0V1.025-JUL-1994 09:00VAX C V3.2-044P^nԮ լ1}x SЬTCdRbgCRbRCd~ERR_MSGPx SЬTCRbRˏRCd~ERR_MSGPx RЬPBRbRТZ֮ ` R~ERR_MSGPRˏR~ERR_MSGPPРZî RzRP{PQPP~ERR_MSGPî [[~ERR_MSGPЪ RТ$Т([RxR~MALLOCPW<1~ERR_MSGP[1߭xRЬSBc CNV_C_INTPBce~ERR_MSGP߭RxRRЬSBc CNV_C_INTPBce~ERR_MSGP߭RxRRЬSBc CNV_C_INTPBce~ERR_MSGP߭RxRRЬSBc CNV_C_INTPBce~ERR_MSGPѭ1ѭ1nRxRRЬSBcCNV_INTPBce~ERR_MSGPѭ ѭRЏbR<gRxRRЬSBcCNV_INTPBce~ERR_MSGPѭ܏ ѭRЏbR<2gSЪ R$SSg2SЪ R(SS1xRЬSBcCNV_INTPBce~ERR_MSGPѭԏ ѭ؏RЏbR<gRxRRЬSBcCNV_INTPBce~ERR_MSGPѭ̏ ѭЏRЏbR<Ч2gSЪ R$SSg2SЪ R(SSV[1ެUYCNV_INTXVTTT TxTSCihP޼RCbe~ERR_MSGPѭď ѭȏPЏ`P<xVP@gRbTxTTDhP޼RDbe~ERR_MSGPѭ ѭPЏ`P<xVQAScAgR2bPPPb2cPPPc[VnxVRBgRЧbxVTVRxRRBgSDgRcb[PЪ TЪSÀRФDVТUÄTÈRR F_2R0F2r0_DrawCurve s  C$V_CTYPEDEFS DRAWCURVEERR_MSGCNV_INT CNV_C_INTMALLOC XDRAWLINESFREE F2R0_DRAWCURVE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP>O;@H,Qcjҽ~8lj t<.PܟegyTD*.Axv P܊ÇHiOnF]CDLk9LP>h2w> =Ň~NhU(_^95D5R3N\[ˍ2]sel]_.f7)o/aGO?ؑy<'_±"LCH;++ZtkP\ I jWCFP{}r WԙCCMcwX$ WPH_}׏"yH)O~v )\0@ÃAA$ Lq +:)z>a2##|J(kwy&I~&2Wɘu~\{A#)1<ςlo~I#bHP3X_ar3VjWKx% }JQ3ʦk;rL?MKL){f^T}*i HOG0UdA,c9fb5t>ke 5PМ(_㝰Rzs.GC+Սo=ӷd:6Xy܎1y]ꤵhaZanvqT66>&yEηʦ#VvѿV4i,i0%J˟-CA[jT-{!ú I*?I,UppryO )(Ж,KW/Q,Ox,WJ-@ob,{K?\|+ iM:& SMw+9 ٹܳB^XLEd&'6GSx7Ȓ &e^F'"[]n?]է\˄1~4Z <+`Jy&о]k:8Z*Dt_3z,"D! o9A0XGM#A_nL57[ ͏)] `A_؛>{aY«_ʯWnvb on*7z )[EUOcPM>q OYWhy@^{zOQ R{~GG?EH ds _| sn4?zH9۳Y4 F=jE&0]/{YRLn$B Cu^,[CaUח5x~c]hyPVA;n\(A}J]DH+j)~a4}6PPSzH´]bV#y糃!ܮi}?dPkMQf׬|VXT .&|GBM1iYO@߳F NXrG̮IX2 f:(=וcG/ 13"uH bw`O6>^_)Wv'+ &: {%$qQ Hw;kUx~ݿ (;SG+)R> 8]J˧Y!\;UoH.5@. J0Ro,[ կMeW_'X 4(6X@VNw[@HKnG MASI3'׬aBW]KB Y//Ws8j0I:{;HW刜?\?}!cɳ/l l MSnUWM; H>VIW]&Sy\;j.d\b\!Iv`R&$1*PR YAw Ŝx]CɘRQ [ݥD([~W^% X9QXF\(N|/K0<̆RV/j/nbSw ovQnvxH&|k|V;JIM@@^MPP izYӣӂyl7BJ.ПANPR4Ӊ C)*ޔT^a["_.z|Q@@6֤(bfo~I&&ט ?48 ޳\+Y{ҼdIhT.ZީԿ5^ s nGv7FM?IpG~c~L)%Ӏ5[j~zcvdqQ!Y/'yK_l JZ AH3l,.E;XdVZ@JAdQ[0 b*}溯tv<"YFųӍp֪qә"tހ _f-))lI2>|h.+-[ ЬeA-&2oqO %#,[ Oshr.P9Z&+>e~믔.7R6;XJ i]CA+L`iWN_T>)CxyI6J+oLоT7 鐑 WWE_cZ\Q A@D~N HCDFD8+_MP9V s G=PQ5QN9OIMT ݕ<3ˉP9YIOD6WQ"$XEH`ίjAA CjUJHDnAAaI VWY ,#AJP'J&FEKz 8pE0AV Kr1$.x9r xłpB WH#;$˭dV>JW>OsZvӕv3J0ݹx 3 J |M`Dj* i1’Xe \M49+=5iz%LE \@RLIAJc]O|: K9DeGEUܦ[L뭡KTY NKRRFKkX[aDFG ׶    V ZWDmPW\1B- AT]JK[  M\ ]GFUH7ŸBRC pG^RTdIZYYKD'Ӱ6\vʶ[[G ^ SCDLYVD_IrI[ՆYRC[KPQI3BM XXBC6N}QV?Pհ\W]h"_۬7 QnӪVF#! 77;&4 "'[1PP!TŧX_BlXA盵 I|If b9@M=w_\;ɔeC~ IO^PSA-$`y+WJD6$ɇU">؟z1bS2R`^ [OJLC:W$"`#](w.hgUϊMIUU\I z㿗^^O+TsqPwjnM;Ȅz g e鋞٠LDxA@KͷPV0JU.TQ^XqkRl$~^.ہ0{ 2^´H^sS\3)Q*]4!> I36HԐ.g\@EJ NxFv4+NfWc*_BESa̕^LL@s~2Z8ƊĦ|^OP\>4.ҽ;9?{3q&txmG7 Y6z8o}cӯ6⭾i9?_s@vh8ºh@xGz%,?W#:b1db/bnU;hu-B15rUmTg̅:W*KВ~ &R!VV Pv+pKaZU\/e_VvzMUߛ_e)XgYS^RX' Nb?Z,ر# mT?̞>PEc4>P ) 5։Ð/!psToZMmxvz7&3N_0TCRs). P›ݢPܘķ ' "鄲LR֤- [Mt c3c?MENO%]UJVņ(qةG,N* )s:P)*Ibخ@MtZPMeWlgK7I33FRS\U{W=Ny('ȃJ>sWTZ3 {z ==ȩA?oSW_R>5X\-L2@ejVJQ}aBd$^{<[BC߄ ^;}ZI͓@ker>hOUwBph@H3rJ }T UuBpdzEXÛZ^aQ}֤˚[YqT#qӗIGU.Y CXnP"?K Qb]1ek#ۯT:%4JuI[xO VMS.BCKO[V9.BIN]RT.OLB;1 ] LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSXT[W~VTU XDRAWLINES[W~VXU XDRAWLINES[~WZ DRAWCURVEWFREEծ  } P} PwwR*~ERR_MSGekRUR UFREEPRˏR*~ERR_MSGekRUR UFREEPPРZîRzRP{PQPP&~ERR_MSGekRUR UFREEPîRR&~ERR_MSGekRUR UFREEPЪ RТ$YТ(XRxR~MALLOCPW'<1~ERR_MSGekRUR UFREEPѮ1 ߭x RSBc CNV_C_INTP+SBce~ERR_MSGekRUR UFREEP߭ RxRRSBc CNV_C_INTP+SBce~ERR_MSGekRUR UFREEP߭RxRRSBc CNV_C_INTP+SBce~ERR_MSGekRUR UFREEP߭RxRRSBc CNV_C_INTP+SBce~ERR_MSGekRUR UFREEPѭ1ѭ1nRxRRSBcCNV_INTP+SBce~ERR_MSGekRUR UFREEPѭď ѭȏRЏbR<gRxRRSBcCNV_INTP+SBce~ERR_MSGekRUR UFREEPѭ ѭRЏbR< 2gSЪ R$SSg2SЪ R(SS1 Px RSBcCNV_INTP+SBce~ERR_MSGekRUR UFREEPѭ ѭRЏbR<g RxRRSBcCNV_INTP+SBce~ERR_MSGekRUR UFREEPѭ ѭRЏbR<2gSЪ R$SSg2SЪ R(SSV1CNV_INTTPVSSSSxSRPB`dP+PB`e~ERR_MSGekPUP UFREEPѭ ѭPЏ`P<xVP@gRbSxS SRCbdP+RCbe~ERR_MSGekPUP UFREEPѭ ѭPЏ`P<xVQAScAgR2bPYPPb2cPXPPcVnR F_2R F2r_DrawCurve s [  C$V_CTYPEDEFSDEREF DRAWCURVEERR_MSGCNV_INT CNV_C_INTMALLOC XDRAWLINESFREE  F2R_DRAWCURVE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCS ET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANK EMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSxVRBgRЧbxVTVRxRRBgSDgRcbѮSЪ PЪSÀRРDXТVÄTÈYTݮW~XTV XDRAWLINESݮW~XYV XDRAWLINESP~WZ DRAWCURVEWFREETdծ}ϼ ekRURUdP} ekRURUdPww1Ь.$V1.02F_2Q0V1.025-JUL-1994 09:01VAX C V3.2-044R F_2Q0F2q0_DrawCircle= s^ C$V_CTYPEDEFS DOCIRCLESERR_MSG F2Q0_DRAWCIRCLE=$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE  VMS.BCKO[V9.BIN]RT.OLB;1 ; K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSoP^VWլyxWQЬRAbP`dAP`PAb~ERR_MSGPxWQЬRAP`PˏPAb~ERR_MSGPxWQЬPAP`PРUWKf ЦPf~ERR_MSGPЦPˏPf~ERR_MSGPЦPРUЬTxWPTP~WSSU DOCIRCLESPRW}f P}d PRS~ERR_MSGPWRxRRBdf~ERR_MSGPww19$V1.01F_2QV1.025-JUL-1994 09:01VAX C V3.2-044P$^XeYѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSieeiVR1xVSTCdRb1CRbR'Cd~ERR_MSGeiPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGeiPUP UFREEPxVQPARbRТWVvh ШP&h~ERR_MSGeiPUP UFREEPШPˏP&h~ERR_MSGeiPUP UFREEPШPРWRxVPPR~VR F_2QF2q_DrawCirclet s  C$V_CTYPEDEFSDEREF DOCIRCLESERR_MSGMALLOCFREE F2Q_DRAWCIRCLEt$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSTTW DOCIRCLESPS?V}h eiPUP UFREEP} eiPUP UFREEPST&~ERR_MSGeiPUP UFREEPVSxSSRCbf~ERR_MSGeiPUP UFREEPww 1" G$V1.02F_2P0V1.025-JUL-1994 09:01VAX C V3.2-044PA!hA!hIA!hB˙IA!h^nլzxnSЬTCdRbeCRbRCd~ERR_MSGPxnSЬTCRbRˏRCd~ERR_MSGPxnSЬRCRbRТWna R~ERR_MSGPRˏR~ERR_MSGPRТWXnVެYViVn1 XDRAWARCSެ[ CNV_C_DBLFMOD ABS!XKЧ QЧPRСDTТSRUR<~TRS<~TUSX߭߭߭߭VkiWRECTARGSPxPP޼R@be~ERR_MSGP XP@Sc@Scխ׭խ׭؞@Rb@RbVRRiVSxSSkPC`RbUhPC` P޼RCbf~ERR_MSGPpRpϖ~pR~pPpό~rR~rPrPd4DPfuPd8PjPUVRRiVSxSSkPC`Rb <ZTpPC` P޼RCbf~ERR_MSGPp~FABSqPVRxRR޼PB`e~ERR_MSG"PrPd4DPfPd8PjPTTPZ XP@RZbPT TUTPT XP@STcU#UPRzRP{ZPQPPZUPzUP{R F_2P0( F2p0_DrawArc  s( C$V_CTYPEDEFSRECTARGSERR_MSG CNV_C_DBLFMODFABS XDRAWARCSABS ( F2P0_DRAWARC5$CO!] VMS.BCKO[V9.BIN]RT.OLB;1 "#DE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRING$CURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_E%RRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRC&OLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLL'CTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSZPQPPU XP@SUcXVVi1Vn1yЧ PЧSÀRРDUТTÄRÈZRXURT XDRAWARCSXUZT XDRAWARCSn } P} P(ww)16JN$V1.01F_2PV1.025-JUL-1994 09:01VAX C V3.2-044PA!hA!hIA!hB˙IA!hΠ^ѬV,RxRRR~MALLOCPV<1~ERR_MSGPSެUSe#TxSRBxSRBdDEREFSSeЬSSTTTeffeԮS1xSTCdRb1CRbR+Cd~ERR_MSGfe󞭸RVR VFREEPxSTCRbRˏR+Cd~ERR_MSGfe󞭸RVR VFREEPx*SRCRbRТX֮1P R.~ERR_MSGfe󞭸RVR VFREEPRˏR.~ERR_MSGfe󞭸RVR VFREEPRТXYЮWެ[Wk W1 XDRAWARCSkn CNV_C_DBLFMOD ABSYKШ QШPRСDTТSRUR<~͸TRS<~͸TUSY߭߭߭߭WݮXRECTARGSP3xPPR@be~ERR_MSGfe󞭸RVR VFREEP YP@͸Sc@ͺScխ׭խ׭؞@+Rb@;RbWRRkWSxSSPC`RbU1C`P/RCbf~ERR_MSGfe󞭸RVR VFREEPpRpi~pR~pPPp\~rR~rPrPd4DPfEPd8PjPUWRRkWSxSSPC`Rb<ZT1C`P/RCbf~ERR_MSGfe󞭸RVR VFREEPp~FABSqP7WRxRRSBce~ERR_MSGfe󞭸RVR VFREEPrPd4DPfϋPd8PjPTTPZ YP@RZbT TUTPT YP@STcU#UPRzRP{,ZPQPPZUPzUP{ZPQPPU YP@SUcYWWk1W1Ш PШSÀRРDUТTÄRÈZRY͸URT XDRAWARCSY͸UZR F_2P( F2p_DrawArc s(ӹ  C$V_CTYPEDEFSDEREFRECTARGSERR_MSG CNV_C_DBLMALLO-CFMODFABS XDRAWARCSABSFREE ( F2P_DRAWARC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBL.LST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VAL/K_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRT0OTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NA1MELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL " VMS.BCKO[V9.BIN]RT.OLB;1 f1XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSeT XDRAWARCSծ%} fe󞭸RVR VFREEP} fe󞭸RVR VFREEP(ww31DZ$V1.02F_2O0V1.025-JUL-1994 09:02VAX C V3.2-044R F_2O0 F2o0_Couple  sF C$V_CTYPEDEFSREBIND ALC_WBINDINGALCFILEERR_MSG | F2O0_COUPLE $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS I4CONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPB5SIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE6 K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATI7NCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN8 GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSTP|,^eVЏЏ}G}GfԞf ALC_WBINDINGPS|~ERR_MSGЭfPЬTdjФQaСPРUUЬRb,ТQ#ݡSREBINDPЭfPֳ b~ERR_MSGЭfPePd~ERR_MSGЭfPЬ R1<~SALCFILEP|~ERR_MSGЭfPЏ ЭfPww:1;p$V1.01F_2OV1.025-JUL-1994 09:02VAX C V3.2-044R F_2O F2o_Couple] sT  C$V_CTYPEDEFSDEREFREBIND ALC_WBINDINGALCFILEERR_MSG  F2O_COUPLE]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNO;NUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLIST<ARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE= K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQU>ALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT? GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP<^eT}G}GܭЏЏѬЬPDEREF PЏլ쟼DEREFЏdĞd ALC_WBINDINGPS|~ERR_MSGЭdPѭiЭQ`СPРRRѭ.ЭQ%ݡSREBINDPЭdPֳ P~ERR_MSGЭdPbP욏~ERR_MSGЭdPЬ R1<~SALCFILEP|~ERR_MSGЭdPЏ ЭdPww#4 VMS.BCKO[V9.BIN]RT.OLB;1 @A1@$V1.02F_2N0V1.025-JUL-1994 09:03VAX C V3.2-044P$^VUլyxUQЬRAbP`dAP`PAb~ERR_MSGPxUQЬRAP`PˏPAb~ERR_MSGPxUQЬPAP`PРWUKf ЦPf~ERR_MSGPЦPˏPf~ERR_MSGPЦPРWѬU{xUQЬRAbP`fAP`PAb~ERR_MSGPxUQЬRAP`PˏPAb~ERR_MSGPxUQЬPAP`PРTUBPWT߭߭߭߭UЬRRݬWRECTARGSPxPP@be~ERR_MSGPЬSUPSPPS߭߭߭߭U~ЬRRSTR F_2N0 F2n0_CopyArea s} C$V_CTYPEDEFSCOPYAREARECTARGSERR_MSG F2N0_COPYAREA$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNOC VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTADTFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRCE K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSFMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUGP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSsRECTARGSPxPP@be~ERR_MSGPݭݭݭݭݭݭTWCOPYAREAPPU}f P} PwwI1P]$V1.01F_2NV1.025-JUL-1994 09:03VAX C V3.2-044P^WeXѬU+RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТYVvg ЧP&gJ~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРYѬV1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТTVYT߭߭߭߭VݬYRECTARGSP/xPPR@be~ERR_MSGehPUP UFREEPЬSVRSRRS߭߭߭߭V~STRECTARGSP/xPPR@be~ERR_MSGehPUP KUFREEPݭݭݭݭݭݭTYCOPYAREAPehPUP UFREEPV}g ehPUP UFREEP} ehPUR F_2N F2n_CopyArea s  C$V_CTYPEDEFSDEREFCOPYAREARECTARGSERR_MSGMALLOCFREE  F2N_COPYAREAL$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSMTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUENKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STROCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEAD$k VMS.BCKO[V9.BIN]RT.OLB;1 IOPPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP UFREEPwwR1ӥ$V1.02F_2M0V1.025-JUL-1994 09:04VAX C V3.2-044R F_2M0F2m0_ColorValue4 sF C$V_CTYPEDEFS PARSECOLORERR_MSG CNV_C_STRALCSTRSTRLENSPRINTF F2M0_COLORVALUE4$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ESRRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREETQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENUTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZVEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPWHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS $CHAR_STRING_CONSTANTS{P%d,%d,%dP8^VeUW}1eȞeЬP`РQ СTWfЦQСTTWg~ERR_MSGЭePxWRЬSBc CNV_C_STRPBcg~ERR_MSGЭeP߭߭߭ݭT PARSECOLORPbݭݭݭ߭SPRINTF߭STRLENPRR߭ALCSTRP<2~ERR_MSGЭePЬ PЭԠR`ЭePЭePwwv1 5X&V1.02F_1L0V1.025-JUL-1994 09:21VAX C V3.2-044MR F_1L0F1l0_get" s M C$V_CTYPEDEFSC_GET F1L0_GET"$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TZ19$V1.01F_2MV1.025-JUL-1994 09:05VAX C V3.2-044P%d,%d,%dP^WeXЬRRT'xRRR~MALLOCPT<1~ERR_MSGP}1פRެURe(SRPxPP@xRP@cDEREFRReЬRRSSShddhUѤФQ СVUgЧQСVVU&g~ERR_MSGdhPTP TFREEPxURSBc CNV_C_STRP+SBcg~ERR_MSGdhPTP TFREE[P߭߭߭ݤ V PARSECOLORP1ݭݭݭ߭SPRINTF߭STRLENPRR߭ALCSTRP '<2~R F_2MF2m_ColorValue sa  C$V_CTYPEDEFSDEREF PARSECOLORERR_MSG CNV_C_STRALCSTRMALLOCSTRLENSPRINTFFREE F2M_COLORVALUE$CODE$DATASTDINSTDOU\TSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRE]NDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROG^KYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALS%d{ VMS.BCKO[V9.BIN]RT.OLB;1 j^_GNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS`WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS $CHAR_STRING_CONSTANTSlERR_MSGdhPTP TFREEPЬ PФ R`dhPTP TFREEPdhPTP TFREEPwwb1`$V1.02F_2L0V1.025-JUL-1994 09:05VAX C V3.2-044P,^eWn}1}1ggѬn1xnSЬTCdRbpCRbRCd~ERR_MSGЭgPxnSЬTCRbRˏRCd~ERR_MSGЭgPxnRЬPBRbRТnlP R~ERR_MSGЭgPRˏR~ERR_MSGЭgPPРѬne~ERR_MSGЭgPnRR1߭xRЬSBcc CNV_C_INTPBce~ERR_MSGЭgPݭݮ GET_MUTABLE_NAMEPTЭgPTSTRLENPSSTALCSTRP|~ERR_MSGЭgPЬ RTSbЭgPnRzRP{PQPP~ERR_MSGЭgPnRR~ERR_MSGЭgPnVV1OެXШGET_MUTABLE_NAME[ SET_MUTABLEYSTRCPYZ߭xVSC CNV_C_INTP޼RCbe~ERR_MSGЭgPݭݮ kPUЭgPVSxSShTCdRb bmCRb޼RCb~ERR_MSGЭgPVQxQQhPAP`d kPRЭgPRݭݮiPЭgPRUjPCd CNV_C_STRP޼RCbg~ERR_MSGЭgPݭݭݮiPЭg"R F_2L0 F2l0_Color s޹   C$V_CTYPEDEFS SET_MUTABLEGET_MUTABLE_NAMEERR_MSG CeNV_C_STR CNV_C_INTALCSTRSTRCPYSTRLEN  F2L0_COLOR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLfLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VgALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALhSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILiE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS:PݭUjVV1n} ЭgP} ЭgPwwk1"$V1.01F_2LV1.025-JUL-1994 09:06VAX C V3.2-044P^eYѬ T.PRxRRR~MALLOCPT<1~ERR_MSGP}1}1ؤRެURe'SRPxPP@xRP@cDEREFRReЬRRSSSiddinR1xnSUCeRb1CRbR'Ce~ERR_MSGdiRTR TFREEPxnSUCRbRˏR'Ce~ERR_MSGdiRTR TFREEPxnRPBRbRТn1Pl R*~ERR_MSGdiRTR TFREEPRˏR*~ERR_MSGdiRTR TFREEPPРѬn&e~ERR_MSGdiRTR TFREEPnRR1߭xRSBc CNV_C_INTP+SBce~ERR_MSGdiRTR TFREEPݭݮGET_MUTABLE_NAMEPUdiRTR TFREEPUSTRLENPSSUALCSTRP "|~ERR_MSGdiRTR TFREEPЬ RUSbdiRTR TFREEPnRzRP{PQPmP&~ERR_MSGdiRTR TFREEPnRR&~ERR_MSGdiRTR TFREEPnVV1GET_MUTABLE_NAMEZ SET_MUTABLE[STRCPYX߭xVRPB` CNV_C_INTP+PB`e~ERR_MSGdiPTP TFREEPݭݮjPWdiPTP TFREEPVSxSSUCeRb b1CRb'Ce~ERR_MSGdiPTP TFREEPVQxQQPARbݮjPRdiPTP TFREEPRݭݮ kPdiPTP TFREEP&*@Y VMS.BCKO[V9.BIN]RT.OLB;1 pmnRWhuPCe CNV_C_STRP+RCbg~ERR_MSGdiPTP TFREEPݤݭݮ kPdiPTP T\R F_2L F2l_Colori s   C$V_CTYPEDEFSDEREoF SET_MUTABLEGET_MUTABLE_NAMEERR_MSG CNV_C_STR CNV_C_INTALCSTRSTRCPYMALLOCSTRLENFREE  F2L_COLORi$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBLp_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXTq HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODErSCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZs DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSjFREEPݤWhVV1Rn!} diRTR TFREEP} diRTR TFREEPwwu1`# %V1.02F_2K0V1.025-JUL-1994 09:06VAX C V3.2-044P`^XeWYЏsЏkggccgѬY1xYSЬTCdRbnCRbRCd~ERR_MSGcgPxYSЬTCRbRˏRCd~ERR_MSGcgPxYRЬPBRbRТVYUh ШRh~ERR_MSGcgPШRˏRh~ERR_MSGcgPШPРV ALC_WBINDINGPU|~ERR_MSGcgPЦֵѬY1xYSЬvTCdRb1CRbRCd~ERR_MSGcgPxYSЬTCRbRˏRCd~ERR_MSGcgPxYRЬPBRbR F_2K0 F2k0_Clone s  C$V_CTYPEDEFS CLONE_CONTEXTWATTRIB ALC_WBINDINGALCFILEERR_MSGCNV_TSTR  F2K0_CLONE$CODEw$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGxCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRyKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_zBLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTR{WBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSRݢ CLONE_CONTEXTP |~ERR_MSGcgPY!V CLONE_CONTEXTP |~ERR_MSGcgPYSS1ެTdVxSRBfP`1sB{CNV_TSTRP޼PB`m~ERR_MSGcgP|kxSPdQ@aRb@RbUWATTRIBPP1PZ?PcgPxSP޼R@bERR_MSGcgPSS1GЬ R1<~UALCFILEP|~ERR_MSGcgPЏ cgPP;;ww'6 VMS.BCKO[V9.BIN]RT.OLB;1 |}1ʑ%V1.01F_2KV1.025-JUL-1994 09:07VAX C V3.2-044PH^YeWѬ S-PRxRRR~MALLOCPS<1~ERR_MSGPЏЏRެURe'TRPxPP@xRP@dDEREFRReЬRRTTTgccgXR1xXTUDeRb1DRbR(De~ERR_MSGcgRSR SFREEPxXTUDRbRˏR(De~ERR_MSGcgRSR SFREEPxXRPBRbRТZ~XyPi ЩR'i~ERR_MSGcgRSR SFREEPЩRˏR'i~ERR_MSGcgRSR SFREEPЩPРZ ALC_WBINDINGPV#|~ERR_MSGcgRSR SFREEPЪֶѬX1xXTUDeRb1DRbR(De~ERR_MSGcgRSR SFREEPxXTUDRbRˏR(De~ERR_MSGcgRSR SFREEPxXRPBRbRݢ CLONE_CONTEXTP #|~ERR_MSGcgRSR SFREEPX4PZ CLONE_CONTEXTP #|~ERR_MSGcgRSR SFREEPXTT1PxTRPB`P`1PB`CNV_TSTRP,PB`mR F_2K F2k_Clone~ sϹ C$V_CTYPEDEFSDEREF CLONE_CONTEXTWATTRIB ALC_WBINDINGALCFILEERR_MSGCNV_TSTRMALLOCFREE  F2K_CLONE~$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSR~ERR_MSGcgPSP SFREEPKxTPQ@aRb@RbVWATTRIBPPP:?PcgPSP SFREEPxTPR@bERR_MSGcgPSP SFREEPTT1Ь R1<~VALCFILEP#|~ERR_MSGcgRSR SFREEPЏ cgRSR SFREEPP,ZZwwNUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^UVլyxVQЬSAcRbdARbPAc~ERR_MSGPxVQЬSARbPˏPAc~ERR_MSGPxVQЬPAP`PРTVKe ХPe~ERR_MSGPХPˏPe~ERR_MSGPХPРTФ Rլ| ТT UNSETCLIPX߭߭߭߭VЬSSݬTRECTARGSPxPP@ce~ERR_MSGPЭ ЭЭЭTSETCLIPV}e P} Pww(r VMS.BCKO[V9.BIN]RT.OLB;1 ܙ10\?%V1.01F_2JV1.025-JUL-1994 09:08VAX C V3.2-044P4^WeXѬU,RxRRR~MALLOCPU<1~ERR_MSGPRެTRd#SxRP@xRP@cDEREFRRdЬRRSSSheehVR1xVSTCdRb1CRbR'Cd~ERR_MSGehPUP UFREEPxVSTCRbRˏP'Cd~ERR_MSGehPUP UFREEPxVQPARbRТTVvg ЧP&g~ERR_MSGehPUP UFREEPЧPˏP&g~ERR_MSGehPUP UFREEPЧPРTФ RЬS| R F_2JF2j_Clip s  C$V_CTYPEDEFSDEREF UNSETCLIPSETCLIPRECTARGSERR_MSGMALLOCFREE F2J_CLIP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMST UNSETCLIPnP߭߭߭߭VSTRECTARGSP/xPPS@ce~ERR_MSGehPUP UFREEPЭ ЭЭЭTSETCLIPV}g ehPUP UFREEP} ehPUP UFREEPww1+X%V1.02F_2I0V1.025-JUL-1994 09:08VAX C V3.2-044P^TeVW}1ffѬW1xWQЬRAbP`oAP`PAb~ERR_MSGfPxWQЬRAP`PˏPAb~ERR_MSGfPxWQЬPAP`PРUWVd ФPd~ERR_MSGfPФPˏPd~ERR_MSGfPФPРUѬW~xWRЬSBcP` `BP`UISETBGPLfPBc CNV_C_STRPBcg~ERR_MSGfPUSETBGP fPUGETBGSTRLENPRRR F_2I0F2i0_Bg sv  C$V_CTYPEDEFSSETBGISETBGGETBGERR_MSG CNV_C_STRALCSTRSTRLEN F2I0_BG$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS@ALCSTRP|~ERR_MSGfPЬ PR`f)kOXhxsHWdf@ HZT _m'҆c2ZG8 U\jІ ''@px%doQEi_]kmVG- c=PT|lzo_1' Z䠴0'Y!qDɠ!L14+ʦJXgSKUIqzyL-Zӭ+VټFSs_kثPc{('prm8`X| nzITK{B"[e.)$$vDOdWęjTf>9%_KODEJ1yi0Skli-T&E9t,)>׈C ƴn/ULݥgj9͔C%AfF[asNT70DDԽT 5SS"!ikJ̡(D!JP8VGh(-᧔S2~cmef{"s\6w#\g0s~Q oJ'_qG .R -OL X_EXKZSr=0EB @C O^`JFE&A^YO:FVf 6YjRXղ`^ڳ/({0YS@@ _a& ᫹uEY𹭚C#Z?X IVRV[5YI7/߭jvMLoaGv =tmEa+ !w6[KbC;QƖ qFDP82iqܝwl\&Ȟ 7Ks0W{[lؒύ4 DpPH~|@;+Y^$?7ڟzQ3|sؕ kGIHv( 'H؇o+ )^7bM :c6_J*<^ob(5q' 1$-5N/v|_2nݐj9@Ȼ@q @}(|HLj;d6rNQvh4}KƃUSQ1$eQ^؟^ř~t VЮ"WķP]3RQzX4< ^ tBM|^%?`wM|P9zNM!kxi:,X*ĵyR UGNaP}_ȕJ-E M øwrx Rg&Qysn}bbmCVúУ;Jij} toC3x< ߺ~P<<t>MNO3K[QBQƺAWQuԃXW0tYF dR3ŇݼFRA1ک]~]HI5Q}Å$Џ1Ԋ]s氶>QϥG=CCɩWLlΣ;+R!|\]4O U6`'lK[n-w8/R/BL:xޔ4F)$' Z9]H1ө38Z^,\)XQc,[eBOp_ ޘ36i~cQ+cpRU;Q׏XZz&8"MXHAU6띒dL1t^6+P9P4Kiz_ό{lk.ZaO`tC:v1uBg#]nYj`G!NHxBTv4UcvᒓiK;>(eV~!⶜qqID  N1ѻ9P}EAKkݰG*Z,eZF/-h<]b#*'l4.SFJ:b)X`- e]Me'.\毙Lz3f!C`\.$XH k w}93hvQ[SI QCESD ][YVRZNFQ秼P[MGMDSKAIq^ 6PLM;NkL󭼶F@@]QL XEW C_MHTJ QGTRL2HPKO" SC{QBQP KM@eQEM eRUQL{ V^ p  dAP P dB[S]\J QRyB(c!:00ai͂{tJVGy^PA`_db`p+)IQ~JA3*gYF&-+ zqf o תּOjKx|^]@V w@KAuX+`>ZtZ!# VB-CC% Ei wE 3O4*|[&ꬉMBZC$AcQesLݾT&񩢈sq6ń qZ sN,F8fXhq;FUD<Үi/qXZT^ MR& IZ,}vp,rY(SDHI>@=`lp?9hUR+ 2OL&,N-ml|a79 T]3M1^ꃈ۟.!"#Yg_47 чd ~3'nKQ^5 .9-/[XB*+1eMK]nZ_'$)֝_9>G41̥&--U3S#)(oHP~ٴll@hFǠr]Bs}́n>u8W A_*rI Iph^VJ3oD7Mfh/jQKIdsNj9? |XIj+A΁ZKX i>tP}:O#J<Ѕ-uX D"B  [ZasN% $ڒ#y= vIϩB@%M4u|\P3lF'ot*E|?,ݡ,gA0NԠ0w4Zu>7QܪWWP8R X6h쬁#DJkZXwP,SrKxX֛gqO2VjRvL'{9/@0(ɦp!f aW5]0R!%&4?oDzzvz8t),՝_ݘݝts+K{#:Ƶ`7w'Y(WPsЎg)sf}νx &iAi;i&i)\_W?Z %+՚b)Zra WRy8LDiF**Bi|Q=ooxKyt4Fihգ,gAa \%Y!Z:Ěg^Ay' xȰ}$6F@;ȑ0s짠D"Ze19G1cߴӫ[ʏϿ]y0]fP}eZ4V\-$nҠ`@毞U[R][,eDCD%~ *ڧg];<h߭H :ZB; [l)}t&[=myTjR} $v׊MH̱.^ y$iWuGBTD^Na*g`HALVB 紥 \G LSF[_Mi̲Ў>T]H>s3TɄ]7bI]ŴB˜sIvJ_L L/37nZC`@\{VCʵ|cM"a9^ T1`M ViW:{Z~] ~ߺJڦ::Ba }N+Iް_K!7>gR mI_Z ,A  ]4W[ C氠J_PPGAYUjM^g.y8 uK]ȿ`#/qkMKcPxF *yH [ڎ [4[RHRPJEGZ)_MPBA?X-^MY  [ BTPNQg@SF\I C.^QZcAT<]nkr[F<Y_LtRyDCZ(#ݩ6B\NAH.   S\CR1zESar[ 3rB CZTTS &M alKG9}pV&xxtj2>}0NJ\ K[DI [ _ ^v\o7rl5*JOT3_Aj-1j ߎ)m fj~#zE&',RjV#BONa]- eh@8/1SeїOAy*7757CGK1橄\:ЉS^Gv0"k i/,.0>Ff40 ldAt] J%{AE]mYvCm NG5Fo?QMبR{-_ x>JP}5@]FlA%3VD{=G|gLs:WHO& <zG}e Z6k+ADE( .6O9b3v)=F*X]Z V$$7pM@(*Ӿ{[Tݎ%=37:q|)!eY4T&1X'~_ƀgP/T(c?"N)%bD)1)`XJ uX$ZZthgZu8DDM*ty`fM\ktdqTQr$p P4aB;#^;1>5V qf) 3-%ϋ #V^uUKbӐl94e5z:xYJ[|$Rσ36s~u&DC3 Ta:B3>UCt|bLV6zٿz֡]zщU 5a})s5mٞ]#{~f}p6/1ٳÇ7`_y~xhdɭzK )3hpi oH~WDajG% ܇+rw+qNvmXj36 2OmV\R.[vkUbol<_Ut?#oWw5<|-cM6/<}OX۪XMjB/m[1'Y6w?t1DXCCnu/U ^8uvу3-aP!NbFVQ/ts+ZnjF*xPPap50үnxt4pM JDJJQ?$c͒CA+:H UtB JXC _AXBfsˆB ^Y '1CuFbPSdPЬRЏb?PSdPЬRЏb@P'SdPЬRЏbAP.SdPЬRЏbFP4SdPЬRЏbPP&SjRUТRRVVxVRRUe[$Tݫ ABSPfޮZTYѾiX-PЮRТVЩWUվXPUUXXЬRЏbSPTSPjSRЫQfP ޮ ZTYѾ iX-PЮ SУVЩWUվ XPUU XXЬSЏcRPTRQxRBgSЫPeޮZTYѾiX-PЮRТVЩWUվXPUUXXЬRЏbSPTSPRu1PxRS]TޮYCdnѾX0ЮSУVnTФWUվPXPUUXXЬTЏdxRS[UCePRRuP<^޼UeCTЬPРS`QQRR  RRPRPPPP2PPPT%TRPRPQT1YˏePP P1)&?PЬRŏ3R RT1PЬRSã RxRPУRxBRRPУ RBPT1ЬRТReRjRT1PTЬPРPPPRSRP€R`T%TSQTPЏRRRPRQPQ{RPPQQT{PЬRТRŏ3RxRTaЬRТRŏ3RxRTIЬRТRŏ3RxRT1ЬRТRŏ3RxRTЬRТR1mˏTTPP^WeYЏi䞭iЬUeXXiXTХSTTUUURެVf"FPUTCRURUP"~f<RPRPT ߧ<ݬFPRINTFݬ"FPUTC1 Pʏ_XX1MˏPPP1 ?Pߧ@ݬFPRINTFݬ ЬRݢݬOUTIMAGE1ߧKݬFPRINTFݬ ЬRݢݬOUTIMAGE1cߧWݬFPRINTFݬ ЬRݢݬOUTIMAGE1?ݬ ЬRݢݬOUTIMAGE1(ݬ ЬRݢݬOUTIMAGE1ЬRТS?RSRߧ_ݬFPRINTFRARSRߧjݬFPRINTF6FRSRߧtݬFPRINTF<RSR ߧ}ݬFPRINTFݬ ЬRݢݬOUTIMAGE1ЬRТSc ݬ ݬOUTIMAGE1cЏ Уݬ ЬRROUTIMAGER[~FPUTCݬ ROUTIMAGER]~FPUTC1ЬRТSУѣ LJݬFPRINTFݬFFLUSH$PˏУ RxRRRݬ ݬݬOUTIMAGEѣݣǐݬFPRINTFPݣݣǖݬFPRINTF1RRRЭiУЬRRRǡݬFPRINTFݬ ݬOUTIMAGE1CЬRТRݢݢǥݬFPRINTF1$ЬUХTФ PРRР SǼެVfFPRINTFRURUP~fRPRPݤЬUUFPRINTFVfФ RТ SUf1Pլ SUf1U(FPUTCRP ~xRP@ݬOUTIMAGERRSݬ,FPUTCݬ)FPUTC1PЬRТRݢݢݬFPRI-2?q VMS.BCKO[V9.BIN]RT.OLB;1 3NTF10ЬRТRݢݢݬFPRINTF1ݬ ЬRݢݬϖ1PЬTФTФRФ SѤѤTTTTެUeFPRINTFRTRT1~eϘRTRT1ЬRТTФRRݬFPRINTF1aPRݬFPRINTF1EPR'ݬFPRINTF1)PФ RФS/ݬFPRINTFP7ݬFPRINTFRTRT~ݬRTRTݬ)FPUTC1PݬϘPPݬFPRINTFЭiݬ'FPUTCSRVˏRQQ UЦTPˏRTxTTxTTTPQU`TT(STST=ݬFPRINTFP'Rݬ@Rݬ'FPUTC1$ЬRТRpR߭ƟpR~RTOSݭAݬFPRINTF1ЬSˏcRRSݬBIGPRINT1ݣDݬFPRINTF1HݬFPRINTF1PЬScUˏ/URR@NЬTTFPRINTFˏcRxRRRݬ ݬTOUTIMAGET)FPUTCTˏUTTУRݢ[ݬFPRINTF/TʏUE hݬFPRINTF kSYSERRЭi ^RЬQSQˏQP@PhPSSP|Ѭ"hЬPP" P P?PP\/<Ѭ 4‚ݬFPRINTFѬ …ݬFPRINTFˆݬFPRINTFݬݬFPUTCѬ1ЬPPPR?PPy‹ݬFPRINTFŽݬFPRINTF‘ݬFPRINTF”ݬFPRINTF—ݬFPRINTFšݬFPRINTFݬFPRINTF ݬFPRINTFˏ~£ݬFPRINTF^VЬRТ TТWլ WWݢƪݬFPRINTFЬRݢƸݬFPRINTFUSWqSSSФ TU WRUR;SRRR¤R ~xRP@ݬOUTIMAGEUW&ݬ,FPUTCUݬFPRINTFUݬ<]~FPUTC|^V UVU@TVURRŬRSSݬSdP C$V_CTYPEDEFS PRINTABLECSSIZEDOIMAGEOUTIMAGEEQRTOSDEREF PRINTABLEBIGPRINTBIGTOSALCLISTALCLSTBALCACTIVSYSERRFATALERRCSSIZECNV_STR STRRESERVEALCSTRECVTSTRCMPLOGSTRLENFFLUSHFPUTCSPRINTFFPRINTFABSFREE EQ T| ICON_GCVT GETVAR \<HASH OUTIMAGE |QSEARCH t PUSHACTRVPPRUPSPVUP ^ЬPР4SccPxPP@PѠ`PcPPALCACTIVPR |~FATALERRSRSccPxPP@P`ЬЬPS4P ^SЬPР4RbRPТRPFREERb SYSERRbPxPP@PРQ`bPR4QP^ЬPР4QaСQaPxPP@ PP^RTЬQSQˏQP@PhPSSP1Ѭ"1ЬPP"P P&?PP\CZѬRALCSTRPPPѬ2ALCSTRPPPALCSTRPPPddALCSTRPPPѬ1ЬPPP b?PP1ALCSTRPPPALCSTRPPPALCSTRPPPALCSTRPPPALCSTRPPPALCSTRPPPALCSTRPPPALCSTRPPPˏ~dSPRINTFdALCSTRPP2P^XeY}}1ii1RxRSS~ STRRESERVEP iP ALCSTRP iPެUeSPcRSRS%P"Sc~DOIMAGEPRSRS ALCSTRP iPּ1Pˏ_RR1nˏPPP17P*?PRݢݢ SPRINTFSTRLENPS S~ STRRESERVEP iP ALCSTRP iPЬRPSALCSTRP iP S1%ЬRТSУ RТVݢ ݣ%SPRINTFSTRLENPUURVR~ STRRESERVEP iP/ALCSTRP iPЬRТSЬRPbVУ Rݢ ALCSTRP iPVUALCSTRP iPU1gPЬRТRݢݢ7SPRINTFSTRLENPSSALCSTRP iPЬRPSb1ЬRТRݢݢDSPRINTFSTRLENPSSALCSTRP iPЬRPSb1ЬRТRݢݢSSPRINTFSTRLENPSSALCSTRP iPЬRPSb1jRТUТ U~ STRRESERVEP iPRѢ"Ѣ aS RPlS R PvSRRSALCSTRP iPЬSPUALCSTRP iPUR1PSУUUЬRbȊ1PUЬRbȑ1PUЬRbș1lPУ RУxRS S~ STRRESERVEP iPS(ȡALCSTRP iPЬSPc&ȩALCSTRP iPЬSPcRSRS'USc~DOIMAGEPeRSRSȯALCSTRP iPּ1PݬϜPЬRPPSTRLENPbiPRТW9VSQRPЁTPˏTUURTTPRRWxWRRWW<WW STRRESERVEP iPȱALCSTRP iPЬRPbVˏVTT URSˏVRxRRxRRRSTUcRRЬS'V~DOIMAGEPcVȳALCSTRP iPּ1mCNV_STR1\PˏRR1Sã RxRRnRTdϸTУRnBV `PVpV~LOGdϛP`PT`TjTRRHRȵSPRINTFSTRLENPSЬRSALCSTRP iPS1PݬBIGTOS1PCNV_STR1PЬRb~ЬSˏcRRKУRݢSPRINTFSTRLENPSSALCSTRP iPЬRPSb!{6}N7iPP^XЬVЦRТU7VWSQRPЁTPˏTVVRTTPRRUU4,ЬRТRS SRSbRRcRR1PU4YU1ЬRТRS SRbPSc}PU rЬRТRRRbZPUPU<ЬRТRTTRdSSbSTRSSSbS TRSSSbSяSPP<^ЬUTRSQЂPPˏPUUSPPQSSP^QѬR RMISC eq<T icon_gcvtp getvar \hash outimage printimageL listimage qsearchTtpushactt popact` Htopact(pdoimage3getimage csname7 cssize? printable/ 4add` sub` mul ˏP@PhPQQP^ЬRЬSRSP?RRPQSPQQTPRPQSPQQTT PP^ЬRЬSRSP>RRPQSPQQTPRPSRPPTT PP<^UЬT1ЬSSTP;STPQSPQQRPTPQSPQQRRJePT;STPQSPQQRPTPQSPQQRRePeŬP^Ѭ PάP^PP^eX}Gh잭h׬RݬALCLISTPb |~FATALERRݬݬALCLSTBPS |~FATALERRЭTSS RެWRg+VxRTDUBfSTRLENPeD TBfdRRgЬ SЏcЭЭ|^eV}Gf잭fRݬALCLISTPb |~FATALERRݬݬALCLSTBPS |~FATALERRЭPSS RެUReЬTxRP@@dDEREFRReЬ SЏcЭЭ^ЬQˏaPP СPРRˏaPxPPPRRR  QQDEREFPPpDt `x``````4mP?qneg$sig_rsm cmd_line varargs(!retderefI s  .M VMS.BCKO[V9.BIN]RT.OLB;1  F   POPACT HTOPACT pDOIMAGE GETIMAGE <CSSIZE  PRINTABLE 4ADD SUB <MUL NEG SIG_RSM CMD_LINE |VARARGS (!RETDEREFq!$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN0 LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTS OVER_FLOWP$}}}}D~P>zk\P%````;P,$d@@@h@@@d@P$<hD4DDww1b$%V1.03INVOKEV1.025-JUL-1994 09:12VAX C V3.2-044P ^eSЏc螭cЬRbDEREFR׬ѭݬݬ ݬݬЭPްRbЭc߭ CNV_C_INTP?խ PPխѭЭcPPxPP޼R@bP}` ЭcPCNV_STRP=ݬSTRPRCPRj~ERR_MSGЭcPݬݬ ݬݬЭcj~ERR_MSGЭP^eZЏj잭jݬDEREFˏRR1R1^ЭRXXRxRRR~MALLOCPV<1~ERR_MSGЭjP}WЭSУ R@Uբ2UTT¢TWSWxSSxTPR INVOKE invoke apply s  C$V_CTYPEDEFSINVOKESTRPRCDEREFERR_MSGCNV_STR CNV_C_INTMALLOCFREE INVOKE APPLY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM/x5 VMS.BCKO[V9.BIN]RT.OLB;1  N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS)Ξ@QCP}a`UUТ RXjfVjݬݬ WINVOKEPRfjVFREEЭjRPЭRТ RТ YYRxRRR~MALLOCPW<1~ERR_MSGЭjP}XЭVUY#PXTXxTTxURBSDR}cbUUYYjgWjݬݬ XINVOKEPRgjWFREEЭjRP~~ERR_MSGЭjPww1'V1.02O_0B0V1.025-JUL-1994 09:26VAX C V3.2-044UR O_0B0 O0b0_swapc s   C$V_CTYPEDEFS O0B0_SWAPc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TY1pJp%V1.02RCOMPV1.025-JUL-1994 09:13VAX C V3.2-044Panycmp: unknown datatype.Porder: unknown datatype.P<^UЬTdS1PˏdPPPPnP?PSjSePS]PSUPSMPSEPS=PS5PS-P S%P SP SP S PߥSYSERRSRЬTdS1ˏdPPPnP?PSjSePS]PSUPSMPSEPS=PS5PS-P S%P SP SP S PߥSYSERRSPRPQPQQPRݬݬLEXCMPˏPPP1P ?PЬSˏcRR!ЬRТPУRPRPPRPPݬݬBIGCMPPPPPPPPЬRТSЬRТRâRPRPPPPЬRТRЬRТRCSETCMPЬRТR ЬRТR LEXCMPЬRТSЬRТRâRPRPPPPPЬRТRЬRТRLEXCMPЬRТRpSЬRТRpPbPSPsSPPPPPЬTФRТ RЬSУRТ RLEXCMPPQУPФRâRPRPPQPЬRТSЬRТRâRPRPPPPЬRТSЬRТRâRPRPPPPSЬRâRPRPPPPSYSERR^RPˏPPVP;?PPPPPPPPPP P P P PSYSERR^SЬUeVЬTdWVWѥS1V@W kZkk#TyXE;X C2>(pO^b-J}C,CZjdqM'Eb/|PWf[EK/CyN,DI%uP!8c` UsX| b&[OVy]\c;rK4^JIG=%Xc$9HGmCW7RIk_9SfܽVR[ Fuշ㉥T86 ldzn휘Am+o1CF/2rB@S{k@ϞXJ 継G[];R^giZh4f|17K|uwtfaFS [|)vkdNSu#-De Ks`-vړj 89zl4RUxAv8,\6jPru i9ihňы..;fJtf;dMj,C&C.CO z|uN:KHkW֔4DxI/-{17/t'Ay&J/[6sX^)L/= )n5r@[$`JH3g(;x,7 hcZ|v̈́l/*:uI8Oy%{Vmt `ݧyg<U4j][{Vtg^vT"g?ML""q:f!P&:򿵕O<*g0ߐ+~eِ_Cd E ޜG7xL?\CyY1@Cq2hGLӃgkٜ;"ҀӬl Dvf ?RnOVrBƷ,A/puDŽ5ov68; A_:bzPOGR-E{ S{B' x_D;\LVL]r%]8CLC}y 5eM!e#Y⥷SV]fG~ŸkmȈCjΝJk¼-7 ۉM(u3HHmD>1p4{4X 89MELA_ǩlUlpBW""5iTY ?zx+W>WE E$ >Bѧ@U% w#2rp뿍] 1'î <&bD,@GSDZ"@8 }s1r}p%Y UՉ'f޽ eSHl[`!Z^aLe\\鑿<{j,OeAz`[aN@[M}Y5cRH $D. 'p ,\Iz}FhBSqqA_]I -.%% /,&~  >E LA.g\ #moxvo.ۯ|h g[V<kyolS^3MO$Uf[ReRV`||l$XًK vqDK Zq7]o SkDK@3$;#,} av;G'{[  w@FϜ\ٯ5,Gn稖A(o]umnO9^ܷ=ק[diEgj`I;gb!Vգ=!ේ :RQ/.o`/xI->J]W'Rcׂ jTc@qc bluRqe c+$r*A7A^0\t YE*M-*Z%="CH~hX#IZGJ YcOsޡD J1=xX7wjzkC&޶۳$<: _YY47^d]>$%iݒ}Z@OoZ!{¢>z>MyFRˬY8/}z˗B=5z{M\L&7#arᏥ_4"u5 antrwTH*hwz+u>e^@Lr7r[.v}Ūsc_bDѴ sl-xf%o'tr*4iͬnSYZ ׵'؏ܮ}#w~qTי0 '1=u+B0wS)d.z+ 73?xfaSړ܇{j+<އu hp6"{;ɽD(6>RF%p-J^Llm(7a#@Kq1~*1>Hϙ)zY]QTbez"e CrTSN_w.Yݯ"l-^V}`7#ݏ`4ѳQM2Ԭ1 Ƭwa!P ]iҺEUO§"m\Lep;Od Xc k=xHYgy[>5)LY@1f bnM7c(w172,~Cxވ^ܥ=ɂ\'Lyiˍ9O]# W mXqQN\ 6HDPaܵG_h;Spybe죌Af̫(2_} *W*VQvv2m+alql PTSQPæJ+&Jԭ4wJ>'SƩHhGz&zK(VMTʤI f P0Z6dI8`xROcLmZbvEtDq"ˉcyeIpLx6Ղ2A~eo2, P%!S)e8,(_/&4?. 2ѦN ]tPR3'7brqI;xhS,*/a̛؟^m$LJ&)Y @sMŠ7h Lm$#Mk9頵Um]NF%Џ} ;+TA<9t:9*$>ERq2nkXC[$vIxݚtd=N XuF%-^L5?Tv{u"@R&YB,'rEGȹuɳuHA^5Ui/lǦ<ݐpZ1JNP,c6Zt4u7(wcҫs,ac35VAbd*]r/>;C|jYW^:t"VA9DZLlXis T7sО.dUXVM~ 8j⪱+edFZA- U\t'̯o[5m&l橊_s%1Vۏ A=#8z]ڴ}rfɹ\`ig+]8pyN8X,!O>@h4'$VC-tXD˻k8M lY]bB&LQdy j?|"wSC6HYug6O-<_ZjŃ" DGYh>S =ԩj2RssT Zp]BR/0t1uHlbJM~kUc K/&n g0f#?CLqy Cv\:t}SV+YJ+6O v퇃[R< x# Ш(@.92}rXG֯`΄-q Pɸˡwt5z 7̪aE}g ZQA?Y𗐯`u x32ef=Z)bU8Z$Ş'/H@yN36rtg(?#GL<^ ' |USpF;U Τ~%a|Ht!HQbm ̋ lf1ن$5ex3IQ韤,LJUΟͼ?k2s??H鶐Ǡoo״GTW i=P"B*y<~cUL%F,p'W" P8vQҠx1| =Pcj'k@RiEN=1 HDABEJ'u?F3i=}abqIzО !Y7)ACpˢOz/FxNAاg 5B:A.?l5jy Bƿ8hY)4j?u}e1^F%ҫWP>[4>K 1"X \eZpT{/Y{ Cׁ_/Jjʅu(O}+(qX8P_ykcQ?BVl 3G/Y_9meZ?# oPb+V.^LDL:>˱&9"P^?( Li8q:r}o/M0N \눞x%(NFD[i zѶEJQ\• E!tyPtY=]B,4w˦2E>H.el<26|/)$o4.bTDB{/k\'Y 񀇧S U.s8tCwWJj()xXKk[]yYLl{}zZMm^=PkbgcrmywxP@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdP0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}$%&*+-/?@P01234560PPkxw4PP@abMcdZ8PP0$%&L*+-g/?@}<PP}~>]|@PP+VDP00wwwWWWJJ00vvvWWWJJsttvvVVVVJsttuuVVVVIsttuuVVVIISSTTTUUUIISSTTTUUUUISSTTTUUUUHFFTTGGUUHHFFFGGGGHHH00xxxWWWJJ!11vvWWWJJr11vvVVVjjrrtuuVVVjjrrtuuVVVIISSTTTUUUIISSTTTUUUiiSSTTTUUUiiFFffGGggHHFFffGGggHHnzxxxXXXXJ!11xxXXXjjp1122)Vjjjrr222)Vjjjrr222>>>jjRR--//>>iiRRRT//'iiiRRff//ggiiRffffggghhFffffggghhnzzyyXXXXKoozyyXXXjjpp222)Xjjjqq222))jjjqq222>>>jjRR--//>>iiRRR-//''iiRRff//'giiRffffggghhEffffggghhnzzyyXXXKKoozyyXXXKK???22]]]jjqq222]]]jjqq2233>>jjRR::33>>iiRR:::/''iiRR:::/''iiEEfffggghhEEfffggghhNNZZZYYYKKOOZZZYYYKK???@=]]]kkPP@@=]]]kkPP%%%3]]kkQQ||3344((QQ:::444((QQ:::444<xFPPboldPPcondensedP PdemiP Pdemibold P Pextended(P"Pitalic0P" )Plight8P)/Pmedium@P/6PmonoHP6;PnarrowPP; BPnormalXPB@IPoblique`PI@QPproportionalhPQ^PromanpP^dPsansxPdiPserifPioPwidePotP%d%cyP%s|P%d,PonPoffPonPONPOnP%s,%dP%d,%sP%lf%cPonPoffPonPONPOnPonPoffPonPONPOnPonPONPOnP%d,%dP%sPtexturedPmaskedPsolidP%d,%dP%sPoffPonP%sPoffPonP%sPoff PonP%dx%d+%d+%dP%dx%d P%s#P%s&P%s8PA!hA!hIA!hA!hA!hIA!hA!hIA!hP8)PascentP)0PbgP03PcanvasP3:Pceol P:?Pcliph(P?EPclipw0PEKPclipx8PKQPclipy@PQWPcolHPW [PcolumnsPP[ cPcursorXPc jPdepth`Pj pPdescenthPp xPdisplaypPxPdisplayheightxPPdisplaywidthPPdrawopPPdxPPdyPPechoPPfgPPfheightPPfillstylePPfontPPfwidthPPgammaPPgeometryPPheightPPiconicPPiconimagePPiconlabelPPiconposP PimageP! PlabelP 8PleadingP"Plines P#!Plinestyle(P!$+Plinewidth0P+%5Ppattern8P5&=Ppointer@P=+EPpointercolHPE'PPpointerrowPPP([PpointerxXP[)dPpointery`Pd*mPposhPm,qPposxpPq-vPposyxPv.{PreverseP{/ProwP0ProwsP1PsizeP2PvisualP3PwidthP4Pwindowlabel C$V_CTYPEDEFSSI_S2IGENCURVE GETPATTERNRGBKEYPALSETUPREADGIFSETSIZE MYSTRNCPYWGETCHEWGETCHNE WGETEVENTSTRNCHR SETICONIMAGE UNSETCLIPXDISWPUTCWGETQWFLUSH WARPPOINTER TOGGLE_FGBGSETWINDOWLABELSETWIDTH SETPOINTER SETLINEWIDTH SETLINESTYLE SETLEADINGSETIMAGE SETICONPOS SETICONLABELSETICONICSTATE SETHEIGHT SETGEOMETRYSETGAMMASETFONT SETFILLSTYLESETFG SETDRAWOP SETDISPLAY SETCURSORSETCLIP SETCANVASSETBG QUERY_POINTER POLLEVENT NATIVECOLORISETBGISETFG GETVISUALGETPOSGETPOINTERNAME GETLINESTYLEGETIMSTR GETICONPOS GETICONIC GETFNTNAMGETFG GETDRAWOP GETDISPLAY GETCANVASGETBG SETPATTERNSI_S2IRGBKEYPALSETUPQSEARCHC_PUTALCREALFATALERRP5PxP6PyP7xP^RPլ RЬPP֬P PP^ЬPРPlQլ%Q QPQQAhPPP^XUTݬݬWGETQPPЬPРP|PѠPݬWGETQݬWGETQѭ ѭPˏѤˏѥЬRТ P $Т P (PЏ`SТ PР PРQ<ФV 2SSSVcVTSD YSSU-P2CQQTQS2CdQQ2CUZV<TVDTUD SSYZ1PYX1ZSSXU*2CQQTQS2CdQQ2CUUXZU2ESSSj2EVdTT7T#zP{PQPPT>SSSVcVTSD XUfTT9T%zP{PQPP PT>SS…SUcUTSD ZVXU<TVDTUD SSYZPPPЬV(_P,VgP,, U_PVgP UHPʏPx(PPP$(($PPPTT STS$$T(PUUYY12P ^R(^FGETCS,ݬcP,,PݬcPPʏPx(PPP$(($SSSQQ PQP$$Q(SP^QRBRB PP^TѬPެScP2@QQRQcQP2@bQQЬP2@P|^SPЬR2B`RR1RU2E`RRR2EVgTT:T&zP{PQPP PT>RRRVbVPR@ ЬR2BUgTT:T&zP{PQPP PT>RRRUbUPR@ ^SjTT=T#zP{PQPP!TPRRP`PR@  ^Rݬݬݬݬ ݬݬ*PS FCLOSE FREESPθ^SŬWnݬFOPENPPWMALLOCPPTPTRBB Tݬݬݬݬ ݬGETIMSTRPPWx  |~TxTRȏRTR~x~ݬx~ݬq FPRINTFVxRVRvFPUTCUPV;VRB0BTxd~ex~ex~ePeeeVxRVR ~x~ݬx~ݬ|~|~, FPRINTF |$,4ޮ4UQ5PQP@4RQbЮ4R@RbQRRTЮ4R@RTbQQRRЮ4TBRbTx(TRȳR$((`P,R$B $$(,0,RRFPUTCR FWRITEך,(RWR[RTRZdYZ[1FPUTCWFWRITEVPUYP@RbTARdb@RbUYXxXRR11Ux(URR$X((XP,P$@ $$(,(,RRgR f,( >*Ļ VMS.BCKO[V9.BIN]RT.OLB;1_BIN.COM;1 ˖8ޮ8UT4TRB8PT`Ю8PBP`TPPQЮ8PBPQ`TTRRЮ8TBRb PXZ[1YTx(TRR$((_P,R$B $$(,0,RRFPUTCR FWRITEܚ,(Tx(TRR$((^,R$B $$(,0,RRFPUTCR FWRITE,(Tx(TRR$((`P,R$B $$(,0,RRFPUTCR FWRITE⚏,(,RRFPUTCTdR FWRITE⚏,d;dFFLUSHR PP^XԮnԮެ [kYZWG (ЮnjѮRkV(GfBfG G ֮ZnRѮR ЬSSTSTPcRBcSSTxRRPxRR  P <^TU.ЬSURBcPU`BP`UPPQBPQ`UUSSЬRCR ^Rx(SS$((_P,P$@ $$(,0,SSFPUTCS FWRITEꚏ,(P^\,RRFPUTCR FWRITE<, ^SeR}1حb枭bѼЭbP CNV_C_STRPЭbP߭ݭSSCANFPЭbPcխѭgfreadgfheader Xgfskipgfimhdrx Xgfmap xgfsetupgfrdata4LgfrcodegfinsertW@ gffirstT  gfgen` !gfput"writeGIFK"gfwrite )gfpackL*gfmktree` *gfout 4+gfdump@ t+palnum,,palsetup  ЭbЭPgѭѭ ЭbέPЭP^VD@P@<~MALLOCP@PDTTS@RC TլpάWW@ UUWRnRRgRnTWP1Z?PP6}jk7P1hݬ SETLINESTYLEP>P1P?PP6}jk7P1q߭` CNV_C_INTP6}jk7Pݭݬ SETLINEWIDTHP116}jk7Phݬ SETPOINTERP?P1Pv?PP6}jk7P1hݬ SETDRAWOPP?P1P.?PP6}jk7P1hݬ SETDISPLAYP@P1lP?PP6}jk7P1E߭` CNV_C_INTP6}jk7P$D1P߭` CNV_C_INTP6}jk7P(@1P߭` CNV_C_INTP6}jk7PЭ$1߭` CNV_C_INTP6}jk7PЭ(1~߭` CNV_C_INTP6}jk7Pݭݬ ?gO_BIN.COM;1@q9qWtEUj ]j'w+jGDTl9O~E܉ު؎Y3A!hg[LMBØK`o Ev1:zgK )wQs@XFzc1.:%!&b̊zQ N?{??QT8C @Y*1ed!lH7y^򾜩T'kY,)D}f0+'6[\@%r9K-}eu,\6NSҊ D9ֈ 0O'UiDWOΫN0uA0K/jѤ-ZBl &`B FD"k*$) CȳJsWKMikvu.êd&ҊoPMqDdi19 ^؏Ai{{05+HND|04@{@: 'qώ&89{ #(f+;;D`z7sd^a5Օ?lVH>&(k=Mas;Hy>/O ڦ=xaGɬ#{[.ZPݱ# KUVU[oW$exȨKXo'?5=d e1O ,{VZ:Ln[ke * Z 3?37m'Ay.3xh1U)9?V[! >ߛ&D^]h5C+Ze6o;c=h "k=C7u橚Rkq9݊oñ 8_HV|ky&Ըy{/{Cy[Ђ#9'77P>SILndqh٠ռ;|{)p`D/m(6ۣ@2\y`-'"<7DzQ1ܙKUh>sFZ@3 qj!-9~mb}R:)Хb'ho0*N qĽ "pև0z8 BjV^ZLnIF?5ero7;h[P{h̚ˉF`e;E-Z0킇]"7 =噉wXl0T 7V+`I<1\Hf3햤.Ͳ"maP*Kzio(34 sjc`ʻߚE'&'.;kc4vj8f^RAJvKiyj'F_e F4t*_YqIC9`|>OHstm}%u_{JQ2e;բ t{w 7V4pˏFF9#TdHX5>\Vc %̱]b633FC Kؒ6<'?pZMHR[1}df@)Zk蓄.\4YmRYwP:wju lϮȜ571+]f4pAuS#SS T l[0I©)3Ν!Ch@=EwǸ \#R?JPnKُ'78Eq-F[j\[C?F,MmyX o b[Ʌ~ Od;R6T Q}/K%!"\{@8^aN[H.κݥ l?ŕEE&Pٲͮ3"UC,\ǸsptIFxNVFIjReDEߚIpz45=>@OblVYTw87| !y.Ք}jH\CJ8 ?  Oy8s* ::"¬V]SA GEܥx%⬍͡C̋~{S y.o0j\hY4RB3AcyOJ\8u)]cBS]:ánN [QoR^[&BE ToCEA3Ya!px9G{{i^+[콩yF( Vuz_sl}:Wkg X%ZACVE42ك@Pt  )URK 0LKuXt?hψ{yF[9,KR~EY9o-rR ab!ÁJW<{SzcwjX{{gC:z|in&`׊9SO]0y݄1]c)b:M.7hbFOC {MeM9{Wo1 ui#RE 愷6QT5B0EasJ @T29}7 GBFĞr&OQEbe"Y˺CMvz/֥ 0 ƍ0n. )5Ju}_E2~WYpP4q(M,ۼ7ÝTɷL$ODd~W&Io~U-Y9K0͘x*'quC^o_>%I @N pXO9YJ'!G ynh^a=]iS{"*k<_ 90#cn{ *;'cm®@4d_c!h]ӡo#7)u%aD+b'yK[[gz^Q| !O+&Y5|%'-TOGF*bH^V̂*)0T@y)so KarE+]"D__s1dZ*0R|LLߗlŗ ӄUK\Ճr?YCarL"YO<9&_&#BQ=KjpSW?K@yE7)`CGM@>5Ё}&fq8zc@Ѽ[[|[UkQ~i29U@ɄQV#* %S̜Ow}G K[TE,bmKI4 [O EZw.QP!Gpx-9ۢ ^? h/e$U$ۤ~D?X8_חgMůZv멩ɏ2Zt}?R59 ݣj,ϱzr!#W 2Q9ՎDs$q+{&O._?wIcҟ!չf{~\G!^O޶ :7R3U1P?P]wH<b,< 8@K[3:VrK7biL Mi/J{ {QyqdMq M$zmokV|pZ*?eF]WN>u|>·FZwYٛ@X^C%/L7ن3]kaRy[j%ta)KWr8Б+Bm)1;jB,.Sp?0VFј(  1*B LOKNQR"p?XSk,3C&KG/u\Ye^R:MQj}#Mc#|ڷ{% Fm^/Ɩ%;tdf=y+x[?Q)?D=4V6-r!ZZ/ﻶJQMk gCEe6<%n{gţ|=,$2[KS( -q, Y4nz&H > &f¿zpP*kQ s$ݴ*!M#Ң P ./hy7K<䏮>X:qJ "T09 {jv^4W"3,׋`]x+y;t]Zks㔢Mۢ51d|y yj_@ IP(Hup6 6^ٗc4Cor5[b1Deh.W{ @6wu~Z]Xtb((ݰAdF>d~]F:RYhe7=:G.lA` q#q >Q8t41̹ҽ!dKQ=['/3iucp鬖<gqw88 2Z3%}Ң&%D<~<󢚃cĽ*dzzkE}`6Φ,{lƬ~;CSIlA5,ַ2Rb^8*2 ٭Z|:[*ސD|,tNqXH|H_9<3[jU$HZX*ȷNZ;>/ w94Xa$GC#5,{€RDZF<$ kӃWcBkp)cx }j7PթЬPЏ`Щ}jP6}jk7PWFLUSHP^ЬPР SРTެRbԼ߼xbQ޼ PA` DEF_C_INTPbPެRbbԼ߼xbQ޼ PA` DEF_C_INTPbPЬQ$aЬP(`a\Q`XSެRbbQ ߼QxbQ޼ PA` DEF_C_INTPbPެRbb S "P߼ SxbQ޼ PA` DEF_C_INTPbPЬTd ЬSdddcЬ Td ЬSdddcP^ЬRТ RТ$nТ(VެWVg15 CNV_C_DBLX DEF_C_DBL[ XFILLARCSZ XDRAWARCSYPVRRgRPxVR޼ PB`hPVPVRxRR޼ PB`hPVPVRxRR޼ PB`hPVPVSSg||~VRxRR޼ PB`kPSPVSSgpȮ"pŮ~VRxRR޼ PB`kPSPs r`Ϥs `ЭrЭpϗ~p~FMODpPsbφnnP`PbPiPnP`PbPiPaPiPaPiPrPd4DPfFPd8PiPq@ ZPrPd4DPfϦ)Pd8PiPլHЬPР RРQPТDTРSRURTRSjTUSjFPЬPР RРQPТDTРSRURTRSiTUSiVVg1PPT^ެ nѮ1ެоX޼xTDXR2bQVxVVFX 2 ZZRRQWUxUUEX424PPRRWSxSSCX020XXWNW ЮXRDR2bWЮXRF,2,YYRRWTЮXRE<2<[[RRTЮXRC828SSTNTXXPRRXxZRRXQXNX(SS[RRSxYRRSWSNS$PZоTFdR2bSEdR2bRRSSWоSFcR2bTEcR2bRRTWWX[YоRFS2cSER2bRRSSTPоRFS2cSER2bRRSTTRXRX@PR@ @΀n΀RgRRvRRVRtettRvRRVRLetLRvRS4M[P//>P--n=P//=P// sx 59AJ VMS.BCKO[V9.BIN]RT.OLB;1;1 \ ͅ     ߤ  p WLONGREAD \WGETSTRG hXYROWCOL QEVENT <SETSIZE 8 WPUTSTR | PARSECOLOR P READGIF " WRITEGIF t+ PALNUM ,,PALSETUP .RGBKEY (0| PARSEFONT 1 GETPATTERN 1 PARSEPATTERN t4< PARSEGEOMETRY 5WATTRIB xORECTARGS P DOCIRCLES RGENCURVE \V DRAWCURVE VSI_S2I VSI_I2SV$CODEH$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTSO[C1LIST C2LIST C3LISTJC4LIST FONTWORDS/:PB:P//9P//9P//8P..6P     ; _/N[#g / {;  W s' w{ kg k]3P33PQQQQQQ/P +6AH|-P ,8D PNN*NN6NNBP2*22*xww1 zm'V1.02OASGNV1.025-JUL-1994 09:23VAX C V3.2-044P^7Z6[}GЏЏЏeeЬRbCNV_TSTRPgk}bNjePSЬRТcR DEREFgk}NjePPXXYYk}LNjePXRRYRRALCSTRPV ePVRUTX TTXSR RRYUYWTW PTTWSѣ }=ˏУ RxRRR}bReP ^ЬSУUe }ХVХR OASGN subs_asgn tvtbl_asgn s  C$V_CTYPEDEFSHGROWDEREFHCHAINEQUIVCNV_TSTRALCSTR  SUBS_ASGN  TVTBL_ASGN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCB VMS.BCKO[V9.BIN]RT.OLB;1;1 rHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSRRVHCHAINPWgSSTS4ѣR.PѣR EQUIVP}STУSѣR֦TS gUg PФU e}Џ U RRѦRզ4 VHGROWww1Ѓz'V1.02O_0B8V1.025-JUL-1994 09:24VAX C V3.2-044JR O_0B8 O0b8_swap s C$V_CTYPEDEFS O0B8_SWAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}aww1 D'V1.02O_0B7V1.025-JUL-1994 09:24VAX C V3.2-044XR O_0B7 O0b7_swapS s C$V_CTYPEDEFSERR_MSG O0B7_SWAPS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSC VMS.BCKO[V9.BIN]RT.OLB;1;1 /BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPww1>'V1.02O_0B6V1.025-JUL-1994 09:25VAX C V3.2-044]R O_0B6 O0b6_swapb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O0B6_SWAPb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww1P&)V1.02O_082V1.025-JUL-1994 09:36VAX C V3.2-044XR O_082 O082_asgnS s C$V_CTYPEDEFSERR_MSG O082_ASGNS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP1Pݙ'V1.02O_0B5V1.025-JUL-1994 09:25VAX C V3.2-044YR O_0B5 O0b5_swap] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O0B5_SWAP]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPwwDi VMS.BCKO[V9.BIN]RT.OLB;1;1 9#1p<'V1.02O_0B4V1.025-JUL-1994 09:25VAX C V3.2-044JR O_0B4 O0b4_swap s C$V_CTYPEDEFS O0B4_SWAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}aww 1pbW'V1.02O_0B3V1.025-JUL-1994 09:25VAX C V3.2-044XR O_0B3 O0b3_swapS s C$V_CTYPEDEFSERR_MSG O0B3_SWAPS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS( LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPww1ծ'V1.02O_0B2V1.025-JUL-1994 09:26VAX C V3.2-044]R O_0B2 O0b2_swapb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O0B2_SWAPb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNUE1 VMS.BCKO[V9.BIN]RT.OLB;1;1 LLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww1'V1.02O_0B1V1.025-JUL-1994 09:26VAX C V3.2-044YR O_0B1 O0b1_swap] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O0B1_SWAP]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPwwPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSiP ^ЬSЬPРЬRЬ PРУSТRѣ4ˏУ QˏТ PQPѣâѢãww 1'V1.01O_0BV1.025-JUL-1994 09:26VAX C V3.2-044P^eT=U|V}G}G쭼ѬЬRDEREF}ЏЏլЬRbDEREF}bЏЏddˏ/PP̚o~ERR_MSGЭdPˏ/PPܚo~ERR_MSGЭdPѭ̏Wѭ܏MЭЭЭЭRЭQѢ4ˏТ SˏС PSPѢ áWѡâVˏ_PP1ˏPP wF VMS.BCKO[V9.BIN]RT.OLB;1;1 P !P1P~?PПCNV_STRP1䚏g~ERR_MSGЭdPПCNV_STRP䚏g~ERR_MSGЭdP1T߭ CNV_C_INTP䚏e~ERR_MSGЭdP@ݭCVPOSPѭЭdPЭRЭ1P߭ CNV_C_INTP䚏e~ERR_MSGЭdPЭRЭXYROWCOLP1~ERR_MSGЭdPѭ }1Pѭ ЭR䚏~ERR_MSGЭdP}T}M䟭 TVTBL_ASGN=䟭 SUBS_ASGNP&|~"ERR_MSGЭdPˏЭRxRRR}bѭ̏ѭ܏ VЭPVˏ_PP1ˏPP P1Pj?PCNV_STRP1Ԛg~ERR_MSGЭdPCNV_STRPԚg~ERR_MSGЭdP1T߭ CNV_C_INTPԚe~ERR_MSGЭdP@ݭCVPOSPѭЭdPЭRЭ1P߭쟭 CNV_C_INTPԚe~ERR_MSGЭdPЭRЭXYROWCOLP1~ERR_MSGЭdPѭԏ }Խ1Pѭԏ Э#RԚ~ERR_MSGЭdP}ԽT}ԽMԟ TVTBL_ASGN=ԟ SUBS_ASGNP&|~ERR_MSGЭdPˏЭRxRRR O_0BO0b_swapq sù$ C$V_CTYPEDEFS TVTBL_ASGNDEREF SUBS_ASGNXYROWCOLCVPOSERR_MSGCNV_STR CNV_C_INT O0B_SWAPq$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP%PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELS&TKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLP'TRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STAR(TTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSr̭R}bѭ̏ѭ܏ WЭPW}̼ ЭdPrP~P9&~_P}O8%}ww*1z'V1.02O_0AGV1.025-JUL-1994 09:27VAX C V3.2-044KR O_0AG O0ag_rswap s C$V_CTYPEDEFS O0AG_RSWAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYP+TTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS,(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MA-PS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBU.FPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}awwGzbk VMS.BCKO[V9.BIN]RT.OLB;1;1 /01'V1.02O_0AFV1.025-JUL-1994 09:27VAX C V3.2-044YR O_0AF O0af_rswapS s C$V_CTYPEDEFSERR_MSG O0AF_RSWAPS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_T1YPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(2LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELET3RMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS4BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPww61+'V1.02O_0AEV1.025-JUL-1994 09:27VAX C V3.2-044^R O_0AE O0ae_rswapb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O0AE_RSWAPb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP7PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL8STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNU9LLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND S:TARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww<1'V1.02O_0ADV1.025-JUL-1994 09:27VAX C V3.2-044ZR O_0AD O0ad_rswap] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O0AD_RSWAP]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP=PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKL>IST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRHa VMS.BCKO[V9.BIN]RT.OLB;1;1 I>?LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTI@MESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPwwB1DT (V1.02O_0ACV1.025-JUL-1994 09:28VAX C V3.2-044KR O_0AC O0ac_rswap s C$V_CTYPEDEFS O0AC_RSWAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPCTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCSD(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAEPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}awwH1Pb(V1.02O_0ABV1.025-JUL-1994 09:28VAX C V3.2-044YR O_0AB O0ab_rswapS s C$V_CTYPEDEFSERR_MSG O0AB_RSWAPS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TIYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(JLPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETKRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSLBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPwwIGXx VMS.BCKO[V9.BIN]RT.OLB;1E;1 ;tMN1@i*(V1.02O_0AAV1.025-JUL-1994 09:29VAX C V3.2-044^R O_0AA O0aa_rswapb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O0AA_RSWAPb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPOPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELPSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNUQLLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND SRTARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPwwT1S5(V1.02O_0A9V1.025-JUL-1994 09:29VAX C V3.2-044ZR O_0A9 O0a9_rswap] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O0A9_RSWAP]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPUPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLVIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRWLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIXMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPww>1t)V1.02O_110V1.025-JUL-1994 09:40VAX C V3.2-044fR O_110 O110_subsc s# C$V_CTYPEDEFSALCSUBSCVPOSERR_MSG < O110_SUBSC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TY[1@>(V1.02O_0A8V1.025-JUL-1994 09:30VAX C V3.2-044KR O_0A8 O0a8_rswap s C$V_CTYPEDEFS O0A8_RSWAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYP\TTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCSJ~ 1͕kq#BRab.U;WU _Y897VMKFO4_[HU n3no|~q01p*LAHR -2"bq?oY5kdWy?(# [؋q$/WTiWf Z,P/ \Xx!nF$H* H}*٪O0ş.LP!xh7\$  A&ɌǬYTd)w#}RYzK-.`suG@t_(KKɳ0BFQ]u- O{$C-3B:oz}Co 󙭬סZ\D$ =u]޼ۏ"A S P64eIܯ"jF!X y19B7mArA!!9ZSFWQ̧SBk*\TGqlo}rR,@PYio9  x`)sOdtKU~V)k/ac.Ϧ@)UIu&^$iv+oN2 9&b)4YoIݳ~iicsμs9LgwW]]9o"鎣k݉`g%>zH cIc"#NGg ]FxBOe_\AV  ՖVPSU@ J@ < =XXsSm[Z!m'z2ɋX_gA ;v7 ^fr##KsXHYf $x@ lYy 5ϧE 8u-NJ(@LB?I`kB[{F0K9'6fXUL! ŰcV/\W$ 9RW(ҫUDx3PVS*n.zр :DUR w^:"I(a:}`N w- \ ߞۗ@S 9F^++5?~??iPb~2_9ݷMg\Svghӌw;Lj;CvPL <œe0TwhβO3F& FC&1:'Y+boOOWHθ[S-ԦгuPW8]4ܞ@wu [ k6c sy#3Cm/%mKh^PXiMp}_O`{v1/de` NO7A @Q!;1 pi٘d)ᔣhS8)Ɗu  cWU.(15]0^Jp<_!t6%-ȆshVWC#µ_G<ҙFF<VLԺmWa9EJ6vDpK\ '6|E5AXԪSkeJY_ z)KF^$o kB Vtg!C:Z~q;YRH%aT%/`SԀtMb] (JUځb);DR)3<-=lYg_ٖI}aHXx D:KlA=:LvWK j֠q %PORXzZ{gb>TCH/Dͤ 㓌I LkNPjC_p|s$\!^LRZKGb,  |ݽ2YX;T)k]i[F5 Rq?GA=({omV= l jXPe.C<:%`f(#'^ܸ^ NSANInLځ@Q,3<*!Q`bG[KA_1WVrAᜏe.("/ bM'97)p*5w{()KIQ cecXHTHX FvuZ^__APP5zO%vuOƘoRMXKLBWMZEtu8I_P /\pR NGYDgZT&VC\[[T’ʹ%Ra7SUB2SP W|gDBH=@Uˇ9PwWB=JSIO:CXV5U>H[|K[Z sHaa[AOǵPRP7WGDF^F3%µMS(LMC5/^S Me\ļzI[UQfyH\`- QKO|r*YFMYE[Y_.[HVF[HE$!bM ?ƃ޵EJYQKH[hRBBNVWT.pD+G_]MH_LArBBVگ UM*j^娘BN U Z"\D9P F@@F uBdP "#=QPWLYA ΨBִBŢC8JBҿYVUɧ`z[h~Ay3LԂY{{vg6FN҉Q}zQ{i7y#[reV^_y|]BbjH\6 EXIf<@GOs|G]]mBA`[fR7i+V<56YIEq.iEI >y*%Ø 7"m)u{vH Q׷@>h-E D@ٷY~VQWY}sZKRԓTD<_Qylsh[gVPǏk5 {iT˥;>_MPOXشDVXVT[CĂ*^\^Uvvjg~ $XPu_GM8WP~Fl*x˨ <_ֈVCZZMXmMA'EYN'P h|_|Gӣ@=\FZ4^Ql@\J|3WKѪ_ANmIfic C*0REI3VĖ0ډQLaF BrK1[IH 2SS OwM1n<"|ze[:ڌ\ο`~/qw#AQc~$b"QD߻Dި|l,Z }XɤPѶPxt Us7Cp0q$ W@ [FX,`]GbqzSL-7&ՃjO}I7!1!Nb'AUZ$̧kw 3VV_:eBd|CUI2,ݹX8ET#Ioe K ]_:ɗﲅO2_[*X) DJCDYRNWdŧ]v7Pf*1Q̪{K|H9iW9W?:l /H(b#UNGڕG ;C\ \RBCnB/=':ISCc;Eg`i0_Ӳx dʵЖn^R͢W]UcoKdYPVU^ }h =KRR]bv} D@:Lpԯ[#/*gG&Our #.+#NYS[TKDQjF2C; ,.ֳuEqujIwtit`Ȑ$ZX돓Kx ѰP:rv"IFYxG ʙTPܗGO?,퍺J'^]1;@_Giϰz^8bm֙CU*^`zKu1dO{@NCӰs،>&d앪BIWq3Pخh [XrAnʞASRsVY"U&B)o=ðyƊʳl~"eXm4A":NGK=8Ӵ$/oyCG~BAcFZȔxXTŕmt9Ō^s}0KGLU] =לڴFƼҲ>fKYLJBtQGA ZJ]Rqcန VHc ReS @ SxO3HUAOW@SEFZMFTI NN SQO GDGIPD D ^DS G.SRTjPcxIxBN[ X<[*uŠoO9JӉT2xy5W _ D@OO~L~>Y~W AUD 4OKӼTR{9[9O$BMڪ_OE.$B Zx&[^!uzfu:Ν}^_ȊUl9GJp)v,fxZqqj=+%Fh0?3V_C#li%1Ą>5dg6xّaϚk{{Ċ hdx^O/$fcaZbHUyL꿽րX+؍FPD[d> Hxn9f_|X1nS%K_S VMS.BCKO[V9.BIN]RT.OLB;1E;1 \](FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MA^PS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBU_FPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}awwa1J(V1.02O_0A7V1.025-JUL-1994 09:30VAX C V3.2-044YR O_0A7 O0a7_rswapS s C$V_CTYPEDEFSERR_MSG O0A7_RSWAPS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TbYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(cLPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETdRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSeBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPwwg1Y(V1.02O_0A6V1.025-JUL-1994 09:30VAX C V3.2-044^R O_0A6 O0a6_rswapb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O0A6_RSWAPb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPhPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELiSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNUjLLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND SkTARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSLeV VMS.BCKO[V9.BIN]RT.OLB;1E;1 kNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPwwm1 j(V1.02O_0A5V1.025-JUL-1994 09:31VAX C V3.2-044ZR O_0A5 O0a5_rswap] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O0A5_RSWAP]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPnPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLoIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRpLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIqMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPwws1!|(V1.02O_0A4V1.025-JUL-1994 09:31VAX C V3.2-044KR O_0A4 O0a4_rswap s C$V_CTYPEDEFS O0A4_RSWAP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPtTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCSu(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAvPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUwFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}awwyYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(zLPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETM7 VMS.BCKO[V9.BIN]RT.OLB;1E;1 Iz{RMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS|BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPww~10(V1.02O_0A2V1.025-JUL-1994 09:32VAX C V3.2-044^R O_0A2 O0a2_rswapb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O0A2_RSWAPb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww1T(V1.02O_0A1V1.025-JUL-1994 09:32VAX C V3.2-044ZR O_0A1 O0a1_rswap] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O0A1_RSWAP]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPwwN] VMS.BCKO[V9.BIN]RT.OLB;1E;1 x1i(V1.02O_0A0V1.025-JUL-1994 09:32VAX C V3.2-044VR O_0A0 O0a0_rswapc s  C$V_CTYPEDEFS O0A0_RSWAPc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSiP ^ЬSЬPРЬRЬ PРУSТRѣ4ˏУ QˏТ PQPѣâѢãww1I(V1.01O_0AV1.025-JUL-1994 09:33VAX C V3.2-044P^XeT@Y=U|V}G}G쭬ѬЬRDEREF}PЏЏլЬRbDEREF}bЏЏddˏ/PPo~ERR_MSGЭdPˏ/PP̚o~ERR_MSGЭdPѭWѭ̏MЭЭЭЭRЭQѢ4ˏТ SˏС PSPѢ áWѡâVˏ_PP1ˏPP P1Pn?PCNV_STRP1Ԛg~ERR_MSGЭdPCNV_STRPԚg~ERR_MSGЭdP1L߭ CNV_C_INTPԚe~ERR_MSGЭdPiݭCVPOSPѭЭdPЭRЭ1P߭ CNV_C_INTPԚe~ERR_MSGЭdPЭRЭXYROWCOLP1h~ERR_MSGЭdPѭԏ }Խ1Pѭԏ ЭRԚ~ERR_MSGЭdP}ԽT}ԽMԟ TVTBL_ASGN=ԟ SUBS_ASGNP&|~ERR_MSGЭdPˏЭRxRRR}bѭѭ̏ VЭPVˏ_PP1ˏPP P1Pb?PПCNV_STRP1Ěg~ERR_MSGЭdPПCNV_STRPĚg~ERR_MSGЭdP1L߭ CNV_C_INTPĚe~ERR_MSGЭdPiݭCVPOSPѭЭdPЭRЭ1P߭쟭 CNV_C_INTPĚe~ERR_MSGЭdPЭRЭXYROWCOLP1h~ERR_MSGЭdPѭď }Ľ1Pѭď ЭRĚ~ERR_MSGЭdP}ĽT}ĽMğ TVTBL_ASGN=ğ SUBS_ASGNP&|~ERR_MSGЭdPˏRxRRR}bѭѭ̏ WЭPW} ЬRЭdPbPЭdˏ_PP1ˏPP P1P2?PCNV_STRP1Ěg~ERR_MSGЭdPCNV_STRPĚg~ERR_MSGЭdP1L߭蟭 CNV_C_INTPĚe~ERR_MSGЭdPiݭCVPOSPѭЭdPЭRЭ1P߭䟭 CNV_C_INTPĚe~ERR_MSGЭdPЭRЭXYROWCOLP1h~ERR_MSGЭdPѭď }Ľ1Pѭď ЭRĚ~ERR_MSGЭdP}ĽT}ĽMğ TVTBL_ASGN=ğ SUBS_ASGNP&|~ERR_MSGЭdPˏЭRxRRR}bѭѭ̏ VЭPVˏ_PP1ˏPP P1P&?PПCNV_STRP1Ԛg~ERR_MSGЭdPПCNV_STRPԚg~ERR_MSGЭdP1L߭ CNV_C_INTPԚe~ERR_MSGЭdPiݭCVPOSPѭЭdPЭRЭ1P߭ܟ CNV_C_INTPԚe~ERR_MSGЭdPЭRЭܢR O_0A O0a_rswap sF C$V_CTYPEDEFS TVTBL_ASGNDEREF SUBS_ASGNXYROWCOLCVPOSERR_MSGCNV_STR CNV_C_INT  O0A_RSWAP $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURO(9 VMS.BCKO[V9.BIN]RT.OLB;1E;1 pRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSXYROWCOLP1h~ERR_MSGЭdPѭԏ }Խ1Pѭԏ ЭRԚ~ERR_MSGЭdP}ԽT}ԽMԟ TVTBL_ASGN=ԟ SUBS_ASGNP&|~ERR_MSGЭdPˏЭRxRRR}bѭѭ̏ WЭPWЭdPP~~P1&vP~~P1&vzP~~P1&voP}}O0%uww1P(V1.02O_097V1.025-JUL-1994 09:33VAX C V3.2-044KR O_097 O097_rasgn s C$V_CTYPEDEFS O097_RASGN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}aww1?(V1.02O_096V1.025-JUL-1994 09:34VAX C V3.2-044YR O_096 O096_rasgnS s C$V_CTYPEDEFSERR_MSG O096_RASGNS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSP.3 VMS.BCKO[V9.BIN]RT.OLB;1E;1 8BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPww1E (V1.02O_095V1.025-JUL-1994 09:34VAX C V3.2-044^R O_095 O095_rasgnb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O095_RASGNb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww1'(V1.02O_094V1.025-JUL-1994 09:34VAX C V3.2-044ZR O_094 O094_rasgn] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O094_RASGN]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPww1=(V1.02O_093V1.025-JUL-1994 09:34VAX C V3.2-044KR O_093 O093_rasgn s C$V_CTYPEDEFS O093_RASGN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPQp VMS.BCKO[V9.BIN]RT.OLB;1E;1 TTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}aww1P:*V1.001O_0YV1.025-JUL-1994 09:46 VAX C V3.2-044Px^eY}G͇լ͗ЬRbDEREF}b͏Џ͗Џ͏̓iiˏ/͏RR1͗1R͗1Gެ UALCSUBSWХV͏!T͓S RSSSgPS͏RgPfSЏcզ<3~ERR_MSGiPЬS iPcPi͗͏DEREF͗͗g~ERR_MSGiP͗RE1zP͗͗͟1p(V1.02O_092V1.025-JUL-1994 09:35VAX C V3.2-044YR O_092 O092_rasgnS s C$V_CTYPEDEFSERR_MSG O092_RASGNS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPww1Z(V1.02O_091V1.025-JUL-1994 09:35VAX C V3.2-044^R O_091 O091_rasgnb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O091_RASGNb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNUR;b VMS.BCKO[V9.BIN]RT.OLB;1E;1 KLLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww1)V1.02O_090V1.025-JUL-1994 09:35VAX C V3.2-044ZR O_090 O090_rasgn] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O090_RASGN]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPww11)V1.01O_09V1.025-JUL-1994 09:35VAX C V3.2-044P4^eS=TѬЬPDEREFЏլЬRbDEREF}bЏЏc̞cˏ/PPԚo~ERR_MSGЭcPˏ_PP1ˏPP P1P&?P؟CNV_STRP1䚏g~ERR_MSGЭcP؟CNV_STRP䚏g~ERR_MSGЭcP1T߭ CNV_C_INTP䚏e~ERR_MSGЭcP@ݭCVPOSPѭЭcPЭPЭ1P߭ CNV_C_INTP䚏e~ERR_MSGЭcPЭPЭXYROWCOLP1~ERR_MSGЭcPѭ }1Pѭ ЭP䚏~ERR_MSGЭcP}T}M䟭 TVTBL_ASGN=䟭 SUBS_ASGNP&|~ERR_MSGЭcPˏЭPxPPP}`}Լ ЬRЭcPbPЭcˏ_PP1ˏPP P1P?P؟CNV_STRP1ܚg~ERR_MSGЭcP؟CNV_STRPܚg~ERR_MSGЭcP1T߭ CNV_C_INTPܚe~ERR_MSGЭcP@ݭR O_09 O09_rasgn s  C$V_CTYPEDEFS TVTBL_ASGNDEREF SUBS_ASGNXYROWCOLCVPOSERR_MSGCNV_STR CNV_C_INT  O09_RASGN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPSSZC VMS.BCKO[V9.BIN]RT.OLB;1E;1 (3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSCVPOSPѭЭcPЭPЭ1P߭쟭 CNV_C_INTPܚe~ERR_MSGЭcPЭPЭXYROWCOLP1~ERR_MSGЭcPѭ܏ }ܽ1Pѭ܏ ЭPܚ~ERR_MSGЭcP}T}ܽMܟ TVTBL_ASGN=ܟ SUBS_ASGNP&|~ERR_MSGЭcPˏЭPxPPP}`ЭcPP~P9&~P~P9&~ww1 Vw)V1.02O_083V1.025-JUL-1994 09:36VAX C V3.2-044JR O_083 O083_asgn s C$V_CTYPEDEFS O083_ASGN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPްQ}awwSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS_P^ЬQaЬPްP}a`0a СPa~ERR_MSGPЬPްQ}aPwwTE VMS.BCKO[V9.BIN]RT.OLB;1E;1 1Z-)V1.02O_081V1.025-JUL-1994 09:36VAX C V3.2-044]R O_081 O081_asgnb s C$V_CTYPEDEFSXYROWCOLERR_MSG CNV_C_INT  O081_ASGNb$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^߭ЬRb CNV_C_INTPbe~ERR_MSGPЬQСPЭaXYROWCOLP~ERR_MSGPPww1 <)V1.02O_080V1.025-JUL-1994 09:36VAX C V3.2-044YR O_080 O080_asgn] s C$V_CTYPEDEFSCVPOSERR_MSG CNV_C_INT  O080_ASGN]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^߭ЬRb CNV_C_INTPbe~ERR_MSGP@ݭCVPOSPѭPЬPРPЭPww1F)V1.01O_08V1.025-JUL-1994 09:37VAX C V3.2-044P $^eR=SѬЬPDEREFЏլ}Џbܞbˏ/PP䚏o~ERR_MSGЭbPˏ_PP1ˏPP P1P>?P蟭CNV_STRP1욏g~ERR_MSGЭbP蟭CNV_STRP욏g~ERR_MSGЭbP1T߭ CNV_C_INTP욏e~ERR_MSGЭbP@ݭCVPOSPѭЭbPЭPЭ1P߭ CNV_C_INTP욏e~ERR_MSGЭbPЭPЭXYROWCOLP1R O_08O08_asgn} sֹ  C$V_CTYPEDEFS TVTBL_ASGNDEREF SUBS_ASGNXYROWCOLCVPOSERR_MSGCNV_STR CNV_C_INT O08_ASGN}$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALU%U;;xWD b {0[ZY6__W\O$YDH7y@MBHIK]RCH@]ENUUENZWN RQ^ F\U^@@1N WZ^J DH jNn'VTIB)^MAKG^OgT@S] GJ CSl SZX_YFWH$RJ ^ʺX.\UH] 7vGZLDTGT}H A H!V nY S]CAJ:JAziEqf7tc5ksr# P[] RBC砩TJEm6/.\KHEQCXD轢)FKPEyeR.6:MBWXS0GPTR^ZWQY]URZHB\OCYaN]VM[ LU\ S@[GZEIP^jʷBlV(TT8 }|Wٸ{/}38!W>B! /7tV /ʐ%n񨶦pt@FO_` SRBʃ1]~QzKwƽٱ6ZD^1bDTsRX%36JP NRDت.\M;Î?Dm{_$|̩ϠajάjR\ 6LMEFƍm!T 9[_qRp\IF[FPحnGWFvz i:gk8+CM[] O @ǬkV~IBWOcEp XN36IG0dXJ@Mr/RG]Ty\R3 !SO>^BZ̹!(ڐGSIUX6vCצrHL?6mZJzFLݐ5F@Rbn,CL߶XX-F_R/?PQGA OzƹuiEDڢEK$NXx 9AL oFIix|ZArP_S$bK=DGRVXC$IA'I0OJDL-YX#I Ֆ4xSAIK=J+PXYV TN!Ӄ_RXWWYfDv\zWYPbYXXhsQ{U\ @N@QD#@A YGTTP;D^[ FP ~]AALߏT]IJJ Bc]UXKM OL;P KH5" YR^FrCHQFrKP_/SA 5ADtT.TDUU][O_[L V@QNI HuM]DKB\ E2@"LEMSDKSzQEPQWW ^E YSI LPB^ T@^J NSI]YZZ[ SICVU^@MRMRFALDXK Z KsUU8OMB@JS%WvKH wu"SL\[NSPvkP[YWW SR^KRU[[YJAOO_\B OJI Ng4y H\Khcdp^MLJІ8YNzw!D@@zw}ö.Faɩ #Z? LV]H˷BMYR?Dswt-'~S 6*pv8.P@ Kd|V8U2iz+FGWndVx#'kAZY6Yw$g.{UIPy5^rjOR QGA )YBZ6 C2<MGcMpGN+-i|{5_P q7emd7M^PPD GC@Y]^GfU'(#3!QiCH W"_ 9U]C _¬G?V`w-lHNJ MoH^OY*v JBsjq]Y WR`<]QzI>K `OM7F0m^Bt\CnZ a_|Y=W=8M砮#)f@[f ,3CIKK95"ZK hPG\VPD` '9 ]jHA~X+γ Gﵛ ^jY(IUP\ݸ(2D R=x3Jjͽi aHD6o@EUY   ]Lu@$1lp0$|X @ojStMFMMKMR  V{z"{z*NGCVbNPlkHc^Y[ QDžsD>)! vZG.bcROQM]XT#.Ѹ\)KH{FЮQ 7HpVſ!UdoY ·GH|r DEIÔN5\ݍu' EQN砓ա B#OQǧOHc M^iF%_vזa/͆GBC[X4HE0t SePϊOO|.F խ(S[JM^qN$8( QT-vr@a, _&dVH ^O\%CaF[F`.ּDVOAEX8AyLw Q|YKRU NMZE[m۟iC5y\CJ[T$d^@ ]. JYE @!Իu bK ly B/2dTKZOM QX<0L "2Z|R*GXYN6r# SI+N󇍽Y:_R_[N͜!]WA\BKeM\#0'Yҹb"M$ r^,t?0@jTݽ>(.7?#x~UY OD/@O`41`3PH NY>5 \b+ApA _P9mo @ΣJY!~<7ћ<UC4 " غC?%QUcI/ QwEP_yK+]R YFQ~]S @ {GVEDEZGNiV WPU UsN xL췵K1 V4|WTгLSB\ [HU}\Q YT_fQHC@BOYV?U}ժMKPa2dHwtA LJI@HT_"x.Y-^.i%1O'GPLZ: l>\ϙ@VË~ 3*b)ʟlJ0H ̾Nr[Q#܊f ]k@v C#A rYe/9G0LF_&OQTMW E?Gţ$=/B LX%YBgXB@jRQP@WN?6^~ yjRP^H Z*iHG\)_VY qPGg{jF] ^Irma+X^`S[\DQZEADVsHrK AFVTQX UQKWO 09~3TgYDg;^(A "I `CfNI[V\WHTFJZߢB壱R]_\MR ]V KZS@N\RU^\HaCUPL JK kKIM:Z@Z^eGUMP]GLQPA>ÒJ CPU]PXM\q8@TNya\NݽWAYDGT[?/KVM 6J^Z]OHX?FY Xn[NJ]NJQ{ LRB >+]j?cVIxG auVWZaT ZNW!zi}n9[c==ƛ+|y6ّNAA CFFqZx 1q_YRCQbICUIJHUv6XN֠n7SK@SxCF PJ VKRSY EFKPx.P]XBHLwRWFBPPN{]Z8 PCKZF_XW;lR/4 W ONG Cӵi89T>Q ]] )D6Bjh\&T>_㵹TNSȩHD뽯#5FҵRXBUsBQJ ;M  D\SIW \MXW K"񾦬I ASVn" VMS.BCKO[V9.BIN]RT.OLB;1E;1 ǭTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS~ERR_MSGЭbPѭ }1Pѭ ЭP욏~ERR_MSGЭbP}T}M쟭 TVTBL_ASGN=쟭 SUBS_ASGNP&|~ERR_MSGЭbPˏЭPxPPP}`} ЭbPP~P9&~ww1`M)V1.01F_06V1.025-JUL-1994 09:37VAX C V3.2-044R F_06F06_proc7 s_  C$V_CTYPEDEFSSTRPRCDEREF BI_STRPRCIRUNERRERR_MSG DEF_C_INTCNV_TSTR F06_PROC7$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSmP ^eSѬЬPDEREF ЏլDEREF PЏcc} cPCNV_TSTRP1߭ DEF_C_INTPe~ERR_MSGcPЭPPP~IRUNERRcPխ BI_STRPRCPRݭSTRPRCPRR cPЬ PRЏ`cPcPww1S)V1.01F_05V1.025-JUL-1994 09:37VAX C V3.2-044rR F_05 F05_numericx s/  C$V_CTYPEDEFSDEREFCNV_REALCNV_EINT  F05_NUMERICx$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKW VMS.BCKO[V9.BIN]RT.OLB;1E;1 Z4YWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb잭bCNV_EINTP } ЭbPCNV_REALP } ЭbPЭbPww1\)V1.01F_04V1.025-JUL-1994 09:38VAX C V3.2-044dR F_04 F04_stringZ s"  C$V_CTYPEDEFSDEREFCNV_STR  F04_STRINGZ$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSjP^eRլDEREFЏb잭bCNV_STRP } ЭbPЭbPww 1Ij)V1.01F_03V1.025-JUL-1994 09:38VAX C V3.2-044bR F_03F03_realZ s"  C$V_CTYPEDEFSDEREFCNV_REAL F03_REALZ$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TY P COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST (BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSkP^eRլDEREFЏb잭bCNV_REALP } ЭbPЭbPwwXxS VMS.BCKO[V9.BIN]RT.OLB;1E;1 k1бq)V1.01F_02V1.025-JUL-1994 09:38VAX C V3.2-044eR F_02 F02_integerZ s"  C$V_CTYPEDEFSDEREFCNV_INT  F02_INTEGERZ$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSjP^eRլDEREFЏb잭bCNV_INTP } ЭbPЭbPww1 {)V1.01F_01V1.025-JUL-1994 09:38VAX C V3.2-044bR F_01F01_csetZ s"  C$V_CTYPEDEFSDEREFCNV_CSET F01_CSETZ$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSkP^eRլDEREFЏb잭bCNV_CSETP } ЭbPЭbPww1tK+V1.01F_28V1.025-JUL-1994 09:54 VAX C V3.2-044P^xXeY:[WЫZЬRR T(PxRRR~MALLOCPT<1~ERR_MSGPЏSެVSf(USRxRRBxSRBeDEREFSSfЬRRSSSiddiR1'~ERR_MSGdiRTR TFREEPЫSxhhhZ S WPUTC S FPUTCZ8cR '~ERR_MSGdiRTR TFREEPSFFLUSH}L1@<)V1.01F_00V1.025-JUL-1994 09:39VAX C V3.2-044R F_00F00_abs  sK  C$V_CTYPEDEFSDEREFCPBIGNUMALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL F00_ABS $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEYogK VMS.BCKO[V9.BIN]RT.OLB;1E;1 - QUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EV!ENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKS"IZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GR#APHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSHP$^eWլ䟼DEREFЏgܞg߭쟭 CNV_EC_INTP%Ь QЭRRSRSSЏaЭgP䟭CNV_EINTPЬ RbCPBIGNUMТRԢЭgP CNV_C_DBLPLЬ RpSrSUPpSUpU~ALCREALPЏbբ<3~ERR_MSGЭgPЭgP䚏f~ERR_MSGЭgPww%101)V1.02O_114V1.025-JUL-1994 09:39VAX C V3.2-044dR O_114 O114_subsc s!  C$V_CTYPEDEFSCVPOS  O114_SUBSC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP& COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANK'CS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE(LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATIC)SBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^ЬPРSݣݬCVPOSPTTTPУ PRP!RQTQPRР P RQTQRQQTT TЬ QPxTRBR¡RRRaPww+1`™)V1.02O_113V1.025-JUL-1994 09:39VAX C V3.2-044jR O_113 O113_subsc s' C$V_CTYPEDEFSHASHMEMBALCTVTBLERR_MSG  O113_SUBSC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP,REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZE-K_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYW.D_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZEZ VMS.BCKO[V9.BIN]RT.OLB;1E;1 R./TEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR0 GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^ЬScHASHPT߭TcЬRݢMEMBѭ"`QЬ PQQ QQQ`PTcbALCTVTBLPR |~ERR_MSGPЬ PRЏ`Pww21P)V1.02O_112V1.025-JUL-1994 09:39VAX C V3.2-044WR O_112 O112_subsc^ s  C$V_CTYPEDEFSCVPOS O112_SUBSC^$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP3STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(L4PARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR5MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBU6ILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMShP ^ЬPРSУ Pݠ ݬCVPOSPRR У PR PЬ QSRxRRBP¡PPPaPww81)V1.02O_111V1.025-JUL-1994 09:40VAX C V3.2-044kR O_111 O111_subsc s( C$V_CTYPEDEFSERR_MSGCNV_TSTRSTRNCMP  O111_SUBSC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP9REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_:LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DM;PNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETE<ND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR= GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^ЬWggCNV_TSTRPge~ERR_MSGPЬVЦVVSЦ RТ XЧYgUTXLxTVF$PU`6UF(P`YSTRNCMPP Ь QSFP¡PPPa[T VMS.BCKO[V9.BIN]RT.OLB;1E;1 ^=PTTXPww?PPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL@STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPANULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETENDB STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPCHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP<^Ь RbݬCVPOSPTTTbPլoЬUe$SХP TPPPALCSUBSPReTALCSUBSPЬQaPЏ`ա<3~ERR_MSGPPЬ PTtSЬRSPP2PP@bPwwE1߷)V1.01O_11V1.025-JUL-1994 09:40VAX C V3.2-044P^eY[ѬЬRDEREF PЏլЬRbDEREF}bPЏЏiiˏ_RR1ˏPPP1R?P߭ CNV_C_INTP1CNV_TSTRPe~ERR_MSGiPVVSЦ RТ WXUTWPxTVF$PU`;UF(P`XSTRNCMPP%Ь QSFP¡PPPaiFPTTWiPTФ Rݢ ݭCVPOSP Ф RP  iPЬ STPxPP@R£RRRciPHASHPZ߭ZMEMBѭ'`SЬ RSS¢SSSbiPZALCTVTBLPS|~ERR_MSGiPЬ RSЏbiP߭ CNV_C_INTP4CNV_INTP iPe~ERR_MSGiPRݢݭCVPOSPTTT iPТ PSP!SRTRPSР P SRTRSRRTT TЬ SPxTRBR£RRGRciPˏ/RR[2PCNV_TSTRPr~ERR_MSGiP߭kR O_11 O11_subsc s+ C$V_CTYPEDEFHSALCSUBSDEREFCVPOSHASHMEMBALCTVTBLERR_MSGCNV_TSTRCNV_INT CNV_C_INTSTRNCMP  O11_SUBSC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYIP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT JHAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCKBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ LDEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPE\ VMS.BCKO[V9.BIN]RT.OLB;1E;1 RLMRY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSO CNV_C_INTP4CNV_INTP iPe~ERR_MSGiPݭCVPOSPUUU iP[{& TR URRRALCSUBSPP RUALCSUBSPЬ ScRЏbգ<3~ERR_MSGiPiPUuRЬ SRRR2RRBciPP1wwO1@\)V1.02O_101V1.025-JUL-1994 09:41VAX C V3.2-044jR O_101 O101_sect s( C$V_CTYPEDEFSALCSUBSCVPOSERR_MSG  O101_SECT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPRECP_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELQSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPRNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETENDS STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRTAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^ݼݬCVPOSPѬPݼݬ CVPOSP Ѭ PЬRЬ QRQRPQQP PRQ լrЬTd%SФR RRRݬ ALCSUBSPRdݬݬ ALCSUBSPЬScRЏbգ<3~ERR_MSGPPЬSЬRRRЬ cPwwV1])V1.02O_100V1.025-JUL-1994 09:41VAX C V3.2-044^R O_100 O100_sect s  C$V_CTYPEDEFSCVPOSERR_MSGCPLIST O100_SECT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPWPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLXIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRYLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIZMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT[ GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^ЬPРPݠݬ CVPOSP Ѭ PЬPРPݠݬCVPOSPѬPѬ  Ь PЬ Pݬݬ CPLISTP |~ERR_MSGPPw]&A VMS.BCKO[V9.BIN]RT.OLB;1E;1 [w]1@)V1.01O_10V1.025-JUL-1994 09:41VAX C V3.2-044P4^eTSѬЬPDEREF ЏѬЬPDEREF PЏլЬRbDEREF}bЏЏd̞dѭ܏1߭ CNV_C_INTP/䟭CNV_INTPЭdP䚏e~ERR_MSGЭdP߭ CNV_C_INTP/쟭CNV_INTPЭdP욏e~ERR_MSGЭdPЭPݠݭCVPOSPѭЭdP^ЭPݠݭCVPOSPѭЭdPѭ ЭPЭPݭݭ CPLISTP|~ERR_MSGЭdPЭdPˏ/PP S'ܟCNV_STRPܚn~ERR_MSGЭdP߭ CNV_C_INTP/䟭CNV_INTPЭdP䚏e~ERR_MSGЭdP߭ CNV_C_INTP/쟭CNV_INTPЭdP욏e~ERR_MSGЭdPݭݭCVPOSPѭЭdPݭݭCVPOSPѭЭdPЭQЭRQRQPRíPPQRSxѭԏ%_ SЭP PPPݭALCSUBSP RݭݭALCSUBSPЬ QaPЏ`ա<3~ERR_MSGЭdPЭdPЬ QPR O_10O10_sectt sع C$V_CTYPEDEFSALCSUBSDEREFCVPOSERR_MSGCPLISTCNV`_STRCNV_INT CNV_C_INT O10_SECTt$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTaBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTbK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALcCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUMd N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPЭaЭdPwwf1X)V1.02O_0Z7V1.025-JUL-1994 09:41VAX C V3.2-044XR O_0Z7 O0z7_randomU s C$V_CTYPEDEFS < O0Z7_RANDOM]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTgV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCSh(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAiPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSjNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWA^[ VMS.BCKO[V9.BIN]RT.OLB;1E;1 !jTER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMScP00<^?UмRPŏmNAPv PˏPnSdSnRPdPSЬRЬQjSPPbPwwl1_)V1.02O_0Z6V1.025-JUL-1994 09:42VAX C V3.2-044YR O_0Z6 O0z6_randomj s  C$V_CTYPEDEFS  O0Z6_RANDOMr$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPmSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCSn(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRoMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSpNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSxP00^?TмQPŏmNAPv PˏPnRdRnQPdPRЬQjRPP`PЬQPPP2PP@aPwwr1*V1.02O_0Z5V1.025-JUL-1994 09:42VAX C V3.2-044kR O_0Z5 O0z5_random s'  C$V_CTYPEDEFSSYSERR  O0Z5_RANDOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TsYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLISTt(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRuLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMEvSTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT wGRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSSDRAWOPSWDSPLYS CURSORSYMS'$CHAR_STRING_CONSTANTSP00Plist reference out of bounds in randomP^X?WЬRТRТQPŏmNAPv PˏPnUdUnQPdPUjUPPSRЬPРPР TRPSPRФ T hSYSERRRPSPRPPSS¤SЬPTxSRBR RRR`Pwwy1*V1.02O_0Z4V1.025-JUL-1994 09:43VAX C V3.2-044dR O_0Z4 O0z4_random s   C$V_CTYPEDEFSSYSERR  O0Z4_RANDOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP_g VMS.BCKO[V9.BIN]RT.OLB;1E;1 yz COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLA{NKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE|LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTAT}ICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICS~END WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSSDRAWOPSWDSPLYS CURSORSYMS($CHAR_STRING_CONSTANTSP00Ptable reference out of bounds in randomP^?X)YЬRТWЧTPŏmNASv SˏSnUdUnTSdSUjUSSQRBVKBiP6@U*QЬSUT£TTTcPХUPRR BVSYSERRww1@b*V1.02O_0Z3V1.025-JUL-1994 09:43VAX C V3.2-044aR O_0Z3 O0z3_random s  C$V_CTYPEDEFSSYSERR  O0Z3_RANDOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSSDRAWOPSWDSPLYS CURSORSYMS&$CHAR_STRING_CONSTANTSP00Pset reference out of bounds in randomP^?X)YЬRТWЧTPŏmNASv SˏSnUdUnTSdSUjUSSQRBU5BiP @TQ } PФTPRR BUSYSERRww1,V1.01F_20V1.025-JUL-1994 10:02MVAX C V3.2-044P$^xWeVXЏլDEREF PЏf䞭fѭЏ9 ѭi~ERR_MSGЭfPЭRТ[Тnn~ERR_MSGЭfPԭˏn STRRESERVEYALCSTRZxgggծO[<~hWGETSTRGPRR~ERR_MSGЭfPR9~ERR_MSGЭfP[<~hGETSTRGPRRЭ1L4*V1.02O_0Z2V1.025-JUL-1994 09:43VAX C V3.2-044\R O_0Z2 O0z2_randomp s  C$V_CTYPEDEFS < O0Z2_RANDOMx$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP`ދ=}qmKKz9PnvUb0FGIAPKGR M^^_YT/\ y{ \vQeuge#yP[T KFɪ\txfbdi}_[KOFG& LGt{W$SCR^oa>l-2f@T  RQKJXEw[+iA6X^GP,D*2 Nwڂ+^ QdrD0~NE  [xo,nFVkwۢ\j 4j^M<@/\Tޢϵ|Cf'^4B[u:X_F+ s}ލv JYW_y^y) VV4QbcMܣ] \V^΅I٩ȅ)[_k\™Xk_F"[P~mNf![G P qHK[L;]TOGJIoPGU5fA(EjVUW PLYQUW^s*YT' BUu_\S RZ\][HV]II\NDɓL@䤺\IgGnhi.lr(ӻ@CBI4UtSZ ]C vUDNRW@H*01C N+gR*3\^YTV_2t -B?BZ`;KKH I㨫wPaFUJMˊ} ꒽]KkWtrJX礬^HWӭ?]xw!1[!̱TjFZ B rj@XQ]{H,RXpSHXVSd~᰾ K ~5BUM𸯇 jEoZ}E'6 KR*( NQ  ]0.sP.hbBY bc_zRU>M,PHM>R\yGxϱ)i}noyd4o#ԞNNDw"LPLCIݧ}clXHw"IuVз Ne԰?EVU7dAHORBB?eӑOTP O)teĿ)@[c^ SOO\ %h^COPڷ7^ǧI/V׵mI^ MTT WHET-V^YbZPVNd}3OgYZS`E°> @7WkNilz" TJOU qxq$Hƴȑ3\ۡD.ƶK27AM Y9K `luqs]GrC8U`-ySL=1 FuA0Dv }CI^H E䓇XV㻑 oMI'sDHs.ha sD[_Z&-+A ֨nD:PR J@5PL[_>BWĢ+NZܶ˙ N忺›NH OLUNKW OmODK]⬳=8ZH DUZXCU[LTSȵPP]O^^Rȴ=JT]uKA @GM[cţ ウ̰ ABB >YI]܊I_u@  INVTddkZnC`Uۤ VC9Y^CDTLU՜OG!'mU^PGHg|BKũ4 2o2NO:h֌S &6nB]9֧VMQLmXh?y?O 4 kc?3 J_SCLq{"l <RJIVJx/f zx3^$!6;l]h?YLI ugkF Dnl?.1{[RB B\0"6U֝XbFPa^Vܾs Ʋ6|P梜EDO` 3Ih~U2Zu2 HJHwNum-t4gxxg/*j$rk&66sd-q)cjj+ D H" U {F4ŰA'. Cj8kMHUPF 6>]gPDj\UhC~XF o] A4 {WĐ_gy \2^&lepngC[7 KOeCSL"v,V^L{ J\W]^wVOG [_K^UI SXMYOVQ[RB{ a4>O#MiN]DO ݇LT V[ J^G_^_TRWDHJi]*CQTP-oy MR\^Q @OD^B +EDJMFY[c]# ]p}۰EUJJCWzޥ<і9y1KSۯ:}+DY#ǖ TZf{\_Mل B@ DKQT $69\lI"ا;Tfk \ B!(D @EEXd4EY I (4]Zruq}KQZK8Pk[ K=>kA ~3ESc SRM[AN MBYX_HKBN[_ZW@FAN@[Yh1@BWU^Vl+B*06D ץF4Yӈ DR)S K GP 9QJN\RPFALSWJ\AMR?TJD_G6V)qN@V8G_k@B"hC "OMu@:LCLBCK^cJ]Q Z \^[QOPR@H^B[DPLUxZU Z{jH)_FFCF\RQ~WB PSQPW(KkTJ@zSTGTXI7ROFQ CPO HHRPO BngN'P2BV(PIZ0$Lf&.!$HOCu(A Agjyr ndkN\&R_-9QwQňe9aMaY gF_& JkC&G_₈q5,:)ֹ=BC@^V! U ~j_JY ǜ:d76<KPJ*;*CrLQAu?j QܽK̞{2D_Q =  09{Fi~>Ra^@e-ZÒYAU $HPws\d, 縅B:{8zCmꐅ4 fp:=:Zp{m@$L!EXG *CQY SD9kXT#NM@ ]1)F@~=LTHCԡA<ܯNJ ]Z(nJQw [X!H~Wtז#0 &N0H [RmmdSL eϺ'&] 7Xޜ_,r[3kII"LBA^+H٧FV A4SaTK*ǯsUyr8Ͳݝa4{q٬ 0F墣>wIq*<( M;ȓX^{VQ:seKdMןy6:H K.TE^]k]AU\CIP DaTͯS AEK\MICGPLS[͎]@Z7랙v-lLޡ@C#[ jM#brd?aþ+r&zX9vsYDJOGFgR$IOƢd$WV@J 2SP@uC:NEEv໼-:˪MSa<1? !O;ZY ,۔9.ق0Qr cLsb-w m9W$|t2$%Z@_>dٮX7p1$+'hcjX?>3wHIDUIv7x~ru_R$ڴk!z)^% %C]W~. S5BSKR_ۯøQ_\FI D‚ L;6sq\FɰNʴ rHn-VEB IjM@1۝>LdP`ZzDgBuˏ 62 ?rЛ{o ˃xjЄ*$)I`~9⤰5i}A)PȳDW H HI CC^[^G'VSyUOCLH  JHIJ[C J﨩[OPZF  CdD{ڶOh?%6";H(\a3HzB"6`GXEl4[ⷯT[% q2i <VYiI'@OD}M\^,XJ5BTT KyJS(MQ@?b=8,f,xS_Fg}Cd_WC^v#4QG'}c:"v:goղāt`JBY,xo{T*q\Lq3ɂ?_vFka;UoMA/6 $hCʞ$mOuvu %ؾ4@NAӮc̿^OTLϛsZ CVq[ TRY<]N5YF@\KN*'Y,z  @NTDKU9;YSWKGJFb?Q_B`8C] UG ]pvƒګ bQZ J?Ī"zPWK Sy9Ct{K WM3T+^թM$*c*WZBV_BwW!\v Z-i|[FY JEjN߲G6 U EaL[@NV\>լ+j=ݢvpJNRlmKEGH@VSBqos]B\&YM:$H`IB -Š"QYAoK<IlnVFF  ULYZѸc TKr UHK^L @DV[歨mOX  L'UGQUA Y@+^ L\HNJNSTAF JHXBBIDW^ A[[[QA]@?OOYN\JI GVZBV[RTD Z@\DIIQ^^]WVUYVI\[lL_VCI@_ATSIJE'OPI@Dg MjiTEc V}GzI Mi QIkS7SKP3EK(]It/[^0_0Ohxt)O**J$abm uDL*iٵ;BGY5([RD-vgz⑭ \.3 ὘!X쳊9q'ObU|@=z|g= UχJG?H~RuBiPa; VMS.BCKO[V9.BIN]RT.OLB;1E;1 FKSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS~P00<^?UЬPРRТ PР QPŏmNAPv PˏPnSdSnQPdPSЬQRjSPxPP@P¡PPPaPww1@K*V1.02O_0Z1V1.025-JUL-1994 09:44VAX C V3.2-044R O_0Z1 O0z1_random s=  C$V_CTYPEDEFSBIGRANDALCREALERR_MSG < O0Z1_RANDOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS+P0000<^?TЬQˏaPP&aBIGRANDP |~ERR_MSGPPЬPРU`~ERR_MSGPUVŏmNAPv PˏPnPdmPЬRpP~ALCREALPЏbբ<3~ERR_MSGPPŏmNAPv PˏPnRdRnUPdPRЬQjRPPЏaPww1{U*V1.02O_0Z0V1.025-JUL-1994 09:44VAX C V3.2-044WR O_0Z0 O0z0_random s  C$V_CTYPEDEFSALCSUBSERR_MSG  O0Z0_RANDOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASEb\ VMS.BCKO[V9.BIN]RT.OLB;1E;1 LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP00^?TмRPŏmNAPv PˏPnVdVnRPdPVЬUe* SХP jVQQQQQALCSUBSPP RejVPPPALCSUBSPЬ QaPЏ`ա<3~ERR_MSGPPww1pb*V1.01O_0ZV1.025-JUL-1994 09:45VAX C V3.2-044P00000000Pset reference out of bounds in random P00&Ptable reference out of bounds in random(P00NPlist reference out of bounds in random0P000000^[eW?ZլЬRbDEREF}bPЏЏggˏ/RR11 gPŏmNARv RˏRnUd UnRdRU+ TR jUSSSSSALCSUBSPP SjURRRALCSUBSPЬ ScRЏbգ<3~ERR_MSGgPgPVVPVS gPŏmNARv RˏRnTdMTnSRdRTЬ SjTRRcgPˏVPPP1P?PTФ RТ S gPŏmNARv RˏRnUdUnSRdRUЬ STjURxRRBR£RRRcgPVзU gPŏmNATv TˏTnPdoPnUTdTPjPTTRSCQ>C)P%@UR} gPХUPSS CQkSYSERRXШU gPŏmNATv TˏTnPdPnUTdTPjPTTRSCVUC)P;@U/R$Ь QUT¡TTTagPХUPSS CV߫&SYSERRRТV gPŏmNATv TˏTnXdAXnVPdPXjXTTSRTФ URTSTRХ U ߫NSYSERRRTSTRTTSS¥SЬ TUxSRBR¤RRRdgPCNV_TSTRS gPŏmNARv RˏRnTdχTnSRdRTjTRRbRЬ SRRR2RRBcgPCNV_INTPq~ERR_MSGgPˏRR2 BIGRANDP|~R O_0ZH O0z_random sH e C$V_CTYPEDEFSALCSUBSDEREFBIGRANDALCREALSYSERRERR_MSGCNV_TSTRCNV_INT H O0Z_RANDOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSu$CHAR_STRING_CONSTANTSERR_MSGgPgPV~ERR_MSGgPV`ŏmNARv RˏRnSdϩSЬ RpS~ALCREALPЏbբ<3~ERR_MSGgPgPŏmNARv RˏRnTdQTnVRdRTЬ SjTRRЏcgPP} Hwwc VMS.BCKO[V9.BIN]RT.OLB;1E;1 81-q*V1.02O_0Y0V1.025-JUL-1994 09:45VAX C V3.2-044R O_0Y0 O0y0_bang s` C$V_CTYPEDEFSGETSTRGWGETSTRGERR_MSG STRRESERVEALCSTR  O0Y0_BANG$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^xW[ЬSУRТТnnc~ERR_MSGPԼˏZ STRRESERVEYALCSTRXxgggZJݮ<~WGETSTRGPRR~ERR_MSGPR4~ERR_MSGPݮ<~GETSTRGPRRPR<VRVVUUiP |~ERR_MSGPЬSkPѣѣ 7cU~iP |~ERR_MSGPЬScݣhP |~ERR_MSGPUhPT |~ERR_MSGPЬScTUcR1Ь RPbP1wwCNV_TSTRPaR͗1TЬ UެTR͛SsSSSS2SSCed iPPi͗R1Pˏ_͗RR1ˏ͗PPP1?P͛TФ TФ SRS1 UV͛xRP͛T@T¥TTTef iPPiRRS1SP͛HGFIRSTP͋18Ь TެS͋R} dc iPPi͋͛HGNEXTP͋1P͛HGFIRSTP͋1Ь SެT͋͋RR£RRRcd iPPi͋͛HGNEXTP͋1nP͛RТZТnn͗~ERR_MSGiP ˏ[ STRRESERVEXALCSTRWxxxx[SZ<~~WGETSTRGPRR~ERR_MSGiPR=~ERR_MSGiPZ<~~GETSTRGPRR iPR<VRVVUUhP|~ERR_MSGiPЬ PSѠѠ A`U~hP|~ERR_MSGiPЬ ScݣgP|~ERR_MSGiPU~gPT|~ERR_MSGiPЬ ScTUcR1ЬR iPbP1yi͛RТ ͋1UR͋SRi T͋SRPP£PSxPQ͋SAS¤SSSde iPјR O_0YO0y_bang sZ C$V_CTYPEDEFSALCSUBSDEREFGETSTRGWGETSTRGHGNEXTHGFIRSTERR_MSGCNV_TSTR STRRESERVEALCSTR O0Y_BANG$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINdi VMS.BCKO[V9.BIN]RT.OLB;1E;1 4AMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSlPiR͋SR͋RТ ͋1z͗t~ERR_MSGiPiPPp%ww1Wլ*V1.02F_2F0V1.025-JUL-1994 09:46VAX C V3.2-044]R F_2F0 F2f0_flushC s C$V_CTYPEDEFSWFLUSHFFLUSH F2F0_FLUSHC$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSSP ^xSЬQСPРRxcccСP RWFLUSH RFFLUSH}ww1J*V1.01F_2FV1.025-JUL-1994 09:47VAX C V3.2-044sR F_2F F2f_flush s2  C$V_CTYPEDEFSDEREFWFLUSHERR_MSGFFLUSH  F2F_FLUSH$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^xSeTլDEREF Џd잭dѭi~ERR_MSGЭdPЭPРRxcccЭP RWFLUSH RFFLUSH} ЭdPwwF_2IF_2I0F_2JWF_2J0|F_2KtF_2K0jF_2LaF_2L0YF_2MQF_2M0HF_2N@F_2N0ec! VMS.BCKO[V9.BIN]RT.OLB;1E;1 41 |*V1.01F_2EV1.025-JUL-1994 09:48VAX C V3.2-044kR F_2E F2e_delay s*  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_INTIDELAY F2E_DELAY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^xSeRլDEREF Џb螭b߭ CNV_C_INTPe~ERR_MSGЭbPݭIDELAYPЭbPxccc}L ЭbPww1*V1.01F_2DV1.025-JUL-1994 09:48VAX C V3.2-044mR F_2D F2d_chdir s,  C$V_CTYPEDEFSDEREFCHDIRERR_MSG CNV_C_STR  F2D_CHDIR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb잭b CNV_C_STRPg~ERR_MSGЭbPݭCHDIRPЭbP}L ЭbPww1@Z*V1.01F_2CV1.025-JUL-1994 09:49VAX C V3.2-044UR F_2C F2c_kbhit s C$V_CTYPEDEFSKBHIT F2C_KBHIT $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPfJ3 VMS.BCKO[V9.BIN]RT.OLB;1E;1 GSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS*P^KBHITP }L PPww1`=] +V1.02F_2B0V1.025-JUL-1994 09:49VAX C V3.2-044YR F_2B0 F2b0_getche9 s C$V_CTYPEDEFSGETCHE F2B0_GETCHE9$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSDP^GETCHEPQ QPЬPʏQA`Pww1@+V1.01F_2BV1.025-JUL-1994 09:50VAX C V3.2-044[R F_2B F2b_getche9 s C$V_CTYPEDEFSGETCHE F2B_GETCHE9$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSg VMS.BCKO[V9.BIN]RT.OLB;1E;1 BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSDP^GETCHEPQ QPЬ PʏQA`Pww1&+V1.02F_2A0V1.025-JUL-1994 09:50VAX C V3.2-044XR F_2A0 F2a0_getch9 s C$V_CTYPEDEFSGETCH F2A0_GETCH9$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSCP^GETCHPQ QPЬPʏQA`Pww1$8+V1.01F_2AV1.025-JUL-1994 09:51VAX C V3.2-044ZR F_2A F2a_getch9 s C$V_CTYPEDEFSGETCH F2A_GETCH9$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSCP^GETCHPQ QPЬ PʏQA`Pww& 1`-V1.01O_0PV1.025-JUL-1994 10:08 VAX C V3.2-044R O_0P O0p_lexlt+ sNM C$V_CTYPEDEFSDEREFERR_MSGLEXCMPCNV_TSTRALCSTR  O0P_LEXLT+$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSh4 VMS.BCKO[V9.BIN]RT.OLB;1E;1 <^1@S@+V1.02F_291V1.025-JUL-1994 09:51VAX C V3.2-044R F_291 F291_writest sW C$V_CTYPEDEFSWPUTSTRERR_MSGPUTSTRDEF_TSTRFFLUSH F291_WRITESt$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eU1WЏeeRլ1ެ TVxRSCfP`GdPCP`PР޼ PC`~ERR_MSGePxRQdPAP`PР1gCDEF_TSTRP޼ PC`m~ERR_MSGePݬWPUTSTR9PݬPUTSTRPxRP޼ Q@a~ERR_MSGePRR1)мS ~ERR_MSGePݬFFLUSHRPxPP޼ S@cP}`ePww1W+V1.02F_290V1.025-JUL-1994 09:51VAX C V3.2-044_R F_290 F290_writes: s C$V_CTYPEDEFSERR_MSGFFLUSH F290_WRITES:$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSKP^$мP ~ERR_MSGPݬFFLUSH}L Pww1@ɽi+V1.01F_29V1.025-JUL-1994 09:52VAX C V3.2-044P^eW:X1[ZШYЬRR T(PxRRR~MALLOCPT<1~ERR_MSGPЏSެVSf(USRxRRBxSRBeDEREFSSfЬRRSSSgddgR1'~ERR_MSGdgRTR TFREEPШSY8cR '~ERR_MSGdgRTR TFREEPSFFLUSH}L dgRTR TFREEPѤ0'~ERR_MSGdgRTR TFREEPШZRլ1PxRSPC`P`SQCP`PРYY(Ca~R F_29 F29_writes sϹ  C$V_CTYPEDEFSDEREFWPUTSTRERR_MSGPUTSTRDEF_TSTRMALLOCFFLUSHFREE ih VMS.BCKO[V9.BIN]RT.OLB;1E;1  F29_WRITES$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSERR_MSGdgPTP TFREEPxRQPAP`PРZ1kPC`DEF_TSTRP,PC`m~ERR_MSGdgPTP TFREEPYݤݤ ZWPUTSTREZPUTSTRP0xRPQ@a~ERR_MSGdgPTP TFREEPRR1Y8jS '~ERR_MSGdgSTS TFREEPZFFLUSHRSxSSUCeP}` dgSTS TFREEPww1 [h+V1.02F_281V1.025-JUL-1994 09:52VAX C V3.2-044P^xVeW1YЏggRլ1[ UXxRTDhSc1R[xfffݬ WPUTCݬWFLUSH7ЬSS FPUTCcP ~ERR_MSGgPݬFFLUSHxRQePAP`PР޼ SAc~ERR_MSGgPxRQePAP`PР1PiDDEF_TSTRP޼ SDcm~ERR_MSGgPݬWPUTSTR9PݬPUTSTRPxRS޼ PC`~ERR_MSGgPRR1xfffݬ WPUTC ݬ R F_281 F281_write  s C$V_CTYPEDEFSWPUTCWFLUSHWPUTSTRERR_MSGPUTSTRDEF_TSTRFFLUSHFPUTC  F281_WRITE $CODE$DATASTDIN STDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD _PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALS EGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNT XTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSbFPUTC)мS ~ERR_MSGgPݬFFLUSHRTxTT޼ SDcS}cgPww1` +V1.02F_280V1.025-JUL-1994 09:53VAX C V3.2-044hR F_280 F280_writei s% C$V_CTYPEDEFSWPUTCERR_MSGFFLUSHFPUTC  F280_WRITEi$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPj VMS.BCKO[V9.BIN]RT.OLB;1E;1 -REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^xRxbbbݬ WPUTCPݬ FPUTC$мP ~ERR_MSGPݬFFLUSH}L PwwF_2A0F_2BF_2B0F_2CF_2DF_2EF_2FF_2F0F_2GF_2G0F_2HF_2H0 diRTR TFREEPѤ0'~ERR_MSGdiRTR TFREEPЫWRլ1PxRUPE`P`1RgxhhhZW WPUTCWWFLUSHFPW FPUTCgP '~ERR_MSGdiPTP TFREEPWFFLUSHxRQSAP`PРZZ(Ac~ERR_MSGdiPTP TFREEPxRQPAP`PРW1P1PE`DEF_TSTRP,PE`m~ERR_MSGdiPTP TFREEPZݤݤ WWPUTSTREWPUTSTRP0xRPQ@a~ERR_MSGdiPTP TFREEPRR1txhhhZ W WPUTC W FPUTCZ8gS '~HR F_28 F28_write s   C$V_CTYPEDEFSDEREFWPUTCWFLUSHWPUTSTRERR_MSGPUTSTRDEF_TSTRMALLOCFFLUSHFPUTCFREE  F28_WRITE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSjERR_MSGdiSTS TFREEPWFFLUSHRSxSSUCeS}c diSTS TFREEPww1 p+V1.02F_271V1.025-JUL-1994 09:55VAX C V3.2-044P^xVeW1YЏggRլ1L UXxRTDhSc1RXxfffݬ WPUTCݬWFLUSH4ЬSS FPUTCcP ~ERR_MSGgݬFFLUSHxRQePAP`PР޼ SAc~ERR_MSGgxRQePAP`PР1iDDEF_TSTRP޼ SDcm~ERR_MSGgݬWPUTSTRkRH Bj4E-W]!zvJ# zXGRPB#9I"@e@JP>#:ygUAf%`d)d}BO V^W ]ZƭT}l?xja Q%GQZox]GUB8Bzilx~'WۅqS HQ徳 ^@KQB󹾴NAHOR]LL\tQZSM* )Cޫ4t Wsm7@9_qcaFSDHԞr{Wٕ.E(J*C^A`ش%O ASKGw"TX@ջT)BO9uHI@ǞV*PGI^\OR Z|LMFFE Y YONHFC [~KLAHQUx D EyZn"lʔtV;A[OUICXMmI Q` 1<~8&Mk}5`$y\P\I KFCLq\#v?azjV S QP X@_AAGX&~+]8f8q9TFWgRIRC ]YXW_@ HTZXB NC@jEQY3Z颯VW ^XMFBG3Qٴ.ZKAV 3EZBAs B[RS TRP0B|ZXIV4nLP@*UZ?&QIHCQIPQMwDET^NAWW DL BJINLPH ZKREIEK TGF @\LMjJIv:Ho,O3HߡFNQxQGRJIS'SGHsDY&vuD܏cda 3prl[M 7\ C_GY&b2l1!vEX.MbN DWJ[e\B4|$fr.aXN$V^L]Y FTPYSQVIS! ]W_T^\LL> NDG\?HäNDK q&AR LY[NV >!V% 4_T6 t\miӒm|4KmW4&ö 5D,D6X`ίPFUDTW]LvLâls HJ@ :KRwO]hr WM_UpVYXWXlqZIE\%EZDMPR SGV GAThLWAJTZRPHOPCOHNXDv Qn_AN6篤 NMME@NU @I WC\FJ QHEDWNB QF\XMC@PN]TUGTQT[]ZZ ^P CYYG^X GGNI^JFX[ PO[A@W\I FJEBG KCKA]J@ C[WQN IU[XMN@𹦨AL_XXNEQHMPU V^VN  TR HHJKUJVAUJ MNBG ` KP Ak w֮VX>>fT:GIMPbP9GE^ @Znam6HX6ek=0_NQO\ X_M ,`ca7:UJVeJww^L# EGOpYZCOcqcb449q`3r6qnhn/*?(3)"sf%zhft2\)^JyOs".k=zkfmy/'+ v8=b*17g~1%m3vpoFGGH)MN.U)-&Bk+0ŏ?% gycjG0wx'Nho.d2,z,e.~lol}7KpnļkFj`nT)YX> VO@~'J>,5+;"sk!b fMfz?*tV2^p H6sBW@q@Ci3}PVywm T3r@V.]fe2DwRI8ˎASJCē:՘YJZ+^z LYC %vWY PHL0M5I=QJO/BwUGMJI_T?A365A7W ϻIQeA%y\^>PKϻUOA|S;ZҐ; 806oxQ.9_Zb=l>L6Tҫ R]tH&=^D dx\Jfq%3RN V'.Κuyl352gl U^R F t/yHoS4oO+dZ.V-@wCQʷ=x!WFD3XVw#1)$O5!KR>@! 3[xsNȜd~ i%Z@ƙ%lUǼɴ9 fw2eXHh'91# pyPY h}7]}vd~lu,|x G7f2c1~*d cj03bi}n&86:0Z[͜+nAg PB s3DvD-#z9fT]g4mFl?FdiZ4ElIhWqC,OR0ۦTJs6-W}e6* -#^,,v y̒;8&oFtG(Қ |(/KJG_=jw)o39(w$ZӂE9bh˩ S Rln*e .an#J݌n$)ehvΈSzK~EPHWn*FOK|vn 8ʅp]K2hFB(Gvy/V1dȄdk1)03˻YQUa_~1jeApfBӃ>Q}F8z5JV:]\V; ẏ9j`bRh1E73XZ$d7_ Ev>%i`o~Y_{:F avaӗ\ɊRl[vָ},ʒҪcgn;NKDe#dS[fRV>|2g9 ̞R񱜥'j_ DjDf{gjYMyl@|fUSI]W`[%]뉼wңԑ@lwq+Cc{@5&0Nfƍz tƉ,/Q6tb XU4RgbV*Ď$_6 UeE4 kbغYX&;^J"s}ɩ_^%ƢUXS E76arC^TQY\ jjLyK9j܂!CL3@t]r#J{aB nF%h̊GPNAPJR`sGJ?\MO\4/J AJIO7Gm P897!Ӻ@B:YMHt CQOI]G B_@I]  E T KYH_CNPH j_GJUD_ _ _ K[ WF@ LQXBL \?]]ZⰪ^  H Y  \]ZYUKK cAD   T YUڴ\GJ@>\ODMi橧VM_ ܵTDVO$Q@OxCE]_RFUmJ H W_[_^2CAV%R[E1O\VHXLP __QDY@_ ID_PGWUTGANR^IUXL@ZH\T\YPTJ V]CW@N[ FkO[ 8BT^]L(YP\rU^MG@]RQ O#U\NOG^GWNFXCUHGY _LV AHY.@^@PCAgWY_Ps[XȫYWt<}[5 `>GTcVOOs׆(DL,{MVQL H`H԰b}QZ_PL,Rb[RI[_Nt@ZYRHZR~~_N>JRq`3'NmıowD.EkL_F@M@Iߘ,!_TA:O`,q;Blc?W4` bCJj:-ZJN+.GYsSK!H*-9_;A_ApN҅c۰OWKA~4M#ܕ#0^_L4뽨Z^ @ DO_L@AKY [LIPCMFP\  YH8W P^IaFAWZNpI[WD@ATFO   VB ZEUF Y@LK J HN_XCULX[@B\_DEGZ]I\E JQ=ALNE]Z ZpSSWB\M_STLQQJKNF\YG]BFRAg[IO2.!_Ow}? ULCWJCVOkH[H\OZhCu90H*7!b6}c^TSH_U\FLj[epfr1|@ M@DNCTSUrQ Lm?ss&R 5KX]_R󄾺^ ]JV\ M`KOBTDC LJ]VU_ ^sOkAAURIVy?[9V=a7(/9bh:{8*/?Wa T TSEUHKE* #dziy5DZ Y; 9SWm+ iC re_z̬'#BUEO  ߜdC׽ r'Q[&E yQ O]DE4wK" ŒʊԔMy݀BqN<-Z#$T{{.xR uRӄu!a(oZZEWBg=kt[Jˢ_J8&JV8ІM"PtF|bڊ%?0J ژcA\u(jBu"3Uw*^] 2v]R &x iuT}KUDK[ OcI=VзS듑 ]RУ>)^Z^YqULV QHVu^]ǙѼ*u!I//V'm(x #krZFqÌfV1#aH֠BeUv)P+uyXD̿HZMW\Cе[)mtBR M63|;+{FDCOD ^l" VMS.BCKO[V9.BIN]RT.OLB;1E;1 N5PݬPUTSTRPxRS޼ PC`~ERR_MSGgRR1xfffݬ WPUTC ݬ R F_271 F271_stop s{ C$V_CTYPEDEFSWPUTCWFLUSHWPUTSTRERR_MSGC_EXITPUTSTRDEF_TSTRFFLUSHFPUTC  F271_STOP$CODE$DATASTDINSTDO UTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRE!NDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROG"KYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALS#GNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS$WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSSFPUTC&мR ~ERR_MSGgݬFFLUSHݏC_EXITww&10+V1.02F_270V1.025-JUL-1994 09:56VAX C V3.2-044dR F_270 F270_stoph s" C$V_CTYPEDEFSWPUTCERR_MSGC_EXITFFLUSHFPUTC  F270_STOPh$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_T'YPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZE(K_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN)KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZE*TEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^xRxbbbݬ WPUTCPݬ FPUTC!мP ~ERR_MSGݬFFLUSHݏC_EXITww,1,V1.01F_27V1.025-JUL-1994 09:56VAX C V3.2-044P^xXeY8[WЫZЬRR T(PxRRR~MALLOCPT<1~ERR_MSGPЏSެVSf(USRxRRBxSRBeDEREFSSfЬRRSSSiddiR1'~ERR_MSGdiRTR TFREEPЫWxhhhZ W WPUTC W FPUTCZ8gR '~ERR_MSGdiRTR TFREEPWFFLUSHݏ-C_EXITѤ0'~ERR_MSGdiRTR TFREEPЫWRլ1xRUPE`P`1RgxhhhZW WPUTCWWFLUSHFPW FPUTCgP '~ERR_MSGdiPTP TFREEPWFFLUSHxRQSAP`PРZZ(Ac~ERR_MSGdiPTP TFREEPxRQPAP`PРW1P1PE`DEF_TSTRP,PE`m~ERR_MSGdiPTP TFREEPZݤݤ WWPUTSTREWPUTSTRP0xRPQ@am0u VMS.BCKO[V9.BIN]RT.OLB;1E;1 !-.~ERR_MSGdiPTP TFREEPRR1txhhhZ W WPUTC W FPUTCZ8gR '~ERR_MSGdiRT8R F_27F27_stop s  C$V_CTYPEDEFSDEREFWPUTCWFLUSH/WPUTSTRERR_MSGC_EXITPUTSTRDEF_TSTRMALLOCFFLUSHFPUTCFREE F27_STOP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS T0YPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUM1BER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEED2STRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONV3DODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS6R TFREEPWFFLUSHݏC_EXITww51`,V1.02F_260V1.025-JUL-1994 09:57VAX C V3.2-044_R F_260 F260_whereY s  C$V_CTYPEDEFSFTELL  F260_WHEREY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COE6XP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS7(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE8LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS9BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMScP^xRЬPРPРQՠPxbbbЬPРPPQFTELLPQЬPQЏ`Pww;1=?1,V1.01F_26V1.025-JUL-1994 09:57VAX C V3.2-044}R F_26 F26_where s<  C$V_CTYPEDEFSDEREFERR_MSGFTELL F26_WHERE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPI<NT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZnaC VMS.BCKO[V9.BIN]RT.OLB;1E;1 w<=EK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN>KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZ?ETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHI@CSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^xSeRլDEREF Џb잭bѭi~ERR_MSGЭbPЭPРQՠЭbPxcccЭPЭbPQFTELLPQЬ PQЏ`ЭbPwwB1ldI,V1.01F_25V1.025-JUL-1994 09:58VAX C V3.2-044oR F_25 F25_system s-  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_STRSYSTEM F25_SYSTEM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPCINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGDSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINEKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKFSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPGHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^xReSլDEREF Џc잭c CNV_C_STRPg~ERR_MSGЭcPxbbbݭSYSTEMPQЬ PQЏ`ЭcPwwI1:^,V1.02F_240V1.025-JUL-1994 09:59VAX C V3.2-044gR F_240 F240_seek~ s% C$V_CTYPEDEFSFSEEK  F240_SEEK~$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYPJ COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BKLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASEoVO- VMS.BCKO[V9.BIN]RT.OLB;1E;1 RKLLETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTMATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP^xTЬPРPРSՠPxdddЬPРPPЬRR~SFSEEKPPRSFSEEKPP} Pww F2F0_FLUSH F2F_FLUSH F2G0_ACTIVE F2G_ACTIVE F2H0_ALERT F2H_ALERTF2I0_BGF2I_BGW F2J0_CLIPP106p,V1.01F_24V1.025-JUL-1994 09:59VAX C V3.2-044R F_24F24_seek sY  C$V_CTYPEDEFSDEREFERR_MSG DEF_C_INTFSEEK <F24_SEEK$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSQ ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPRBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURSCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZETSTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHIUCSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSHP< ^xUeTѬЬPDEREFЏլ蟼DEREFЏddѭ蚏i~ERR_MSGЭdP߭ DEF_C_INTP|~ERR_MSGЭdPЭPРSՠЭdPxeeeЭPЭdPЭR R~SFSEEKP&ЭdPRSFSEEKPЭdP} ЭdPwwW1P"I,V1.02F_230V1.025-JUL-1994 10:00VAX C V3.2-044UR F_230 F230_rename. s C$V_CTYPEDEFSRENAME F230_RENAME.$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPXSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LYPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRZMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUp VMS.BCKO[V9.BIN]RT.OLB;1E;1 Z[ILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS9P^ЬPݠЬPݠRENAMEPP}L Pww 11.V1.01O_0FV1.025-JUL-1994 10:12 VAX C V3.2-044R O_0F O0f_numge sq C$V_CTYPEDEFSDEREFBIGCMPALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O0F_NUMGE$CODE$DATASTDINSTDOUTSTDERR^1?,V1.01F_23V1.025-JUL-1994 10:00VAX C V3.2-044R F_23 F23_rename s>  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_STRRENAME  F23_RENAME$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPES_STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFI`RSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEaK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATbSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHcOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRѬЬPDEREF PЏլ쟼DEREFЏb䞭b쟭 CNV_C_STRP욏g~ERR_MSGЭbP CNV_C_STRPg~ERR_MSGЭbPݭݭRENAMEPЭbP}L ЭbPwwe1 ו,V1.01F_22V1.025-JUL-1994 10:01VAX C V3.2-044jR F_22 F22_remove s(  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_STRREMOVE  F22_REMOVE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TfYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEgK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINhKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZEiTEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRqB VMS.BCKO[V9.BIN]RT.OLB;1E;1 ijIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb잭b CNV_C_STRPg~ERR_MSGЭbPݭREMOVEPЭbP}L ЭbPww:F_264F_260+F_27%F_270F_271F_28F_280F_281F_29F_290F_291F_2Am1d,V1.02F_210V1.025-JUL-1994 10:01VAX C V3.2-044R F_210 F210_reads9 s] C$V_CTYPEDEFS WLONGREADLONGREADIRUNERRERR_MSGALCSTR < F210_READS9$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$EnRRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQoUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCpODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEqQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHIrCSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSqP<^xUeTЏd잭dЬQСPРSРRRa~ERR_MSGЭdPլݬ~IRUNERRЭdPݬALCSTRP|~ERR_MSGЭdPԭxeeeRPSݬݭ WLONGREADPRR~ERR_MSGЭdPR)~ERR_MSGЭdPSݬݭLONGREADPRRЭdPRRQP  QQUR } ЭdPwwt10,V1.01F_21V1.025-JUL-1994 10:01VAX C V3.2-044P<(^xUeTЏѬЬPDEREFЏլ蟼DEREFЏd؞dѭЏ9 ѭ蚏i~ERR_MSGЭdP߭ DEF_C_INTPe~ERR_MSGЭdPЭPРSРRR蚏~ERR_MSGЭdPխݭ~IRUNERRЭdPݭALCSTRP|~ERR_MSGЭdPԭxeeeRPSݭݭu WLONGREADPRR~ERR_MSGЭdPR)~ERR_MSGЭdPSݭݭLONGREADPRRЭdPRR F_21 F21_reads s  C$V_CTYPEDEFSDEREF WLONGREADLONGREADIRUNERRERR_MSG DEF_C_INTALCSTR < F21_READS$CODE$DATASTDINvSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMEwCURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWDx_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSr\ VMS.BCKO[V9.BIN]RT.OLB;1E;1 /xyEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTzXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS.RQP  QQUR } ЭdPww|1,V1.02F_200V1.025-JUL-1994 10:01VAX C V3.2-044R F_200 F200_read sm C$V_CTYPEDEFSGETSTRGWGETSTRGERR_MSG STRRESERVEALCSTR  F200_READ$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRN}O VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDST~ATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^xXeVWЏf잭fЬSУRТТnnc~ERR_MSGЭfPԭˏn[ STRRESERVEYALCSTRZxhhh[Pݮ<~gWGETSTRGPRR~ERR_MSGЭfPR:~ERR_MSGЭfPݮ<~gGETSTRGPRRЭfPR<URUUTTiP|~ERR_MSGЭfPխRPѭѭ =T~iP|~ERR_MSGЭfPݭݭjP|~ERR_MSGЭfPTgjPS|~ERR_MSGЭfPխSTR1}ЭfPwwfPR <UPRUUTTiP|~ERR_MSGЭfPխRPѭѭ =T~iP|~ERR_MSGЭfPݭݭjPR F_20F20_read  s   C$V_CTYPEDEFSDEREFGETSTRGWGETSTRGERR_MSG STRRESERVEALCSTR F20_READ $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTsZ VMS.BCKO[V9.BIN]RT.OLB;1E;1 aATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS`|~ERR_MSGЭfPThjPS|~ERR_MSGЭfPխSTR1} ЭfPww1`n,V1.02F_1Z0V1.025-JUL-1994 10:02VAX C V3.2-044P,^eY1Z}j}G}GiԞiЬRb CNV_C_STRPbg~ERR_MSGЭiPWЬPРS`TRT1PPPA7PKP?P WQPWIPWAPW9PW1P,PW%PȏWP~ERR_MSGЭiPRRT1ԭˏWRWWwWaW rPwˏWRR+W1RALCLISTPb|~ERR_MSGЭiPR|~ALCLSTBPb|~ERR_MSGЭiPЭRЭТ Vլ IUXxVSChTdCR}jbd޼R F_1Z0 F1z0_openx sֹ  C$V_CTYPEDEFSWOPENALCLISTALCLSTBALCFILEERR_MSG CNV_C_STRSTRLENPOPENFOPEN  F1Z0_OPENx$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSRCbm~ERR_MSGЭiPVV ߭ݬ ЬSSݭݭWOPENPTsѭxRBc~ERR_MSGЭiPЭiPW2WW~ERR_MSGЭiP߭ݭPOPENPT߭ݭFOPENPTTЭiPЬRݭSTRLENPbЭbWTALCFILEPS|~ERR_MSGЭiPW0ФRЏpФRSt ФR}pЬRSЏbЭiPP}}ww F29_WRITES F2A0_GETCH F2A_GETCH F2B0_GETCHE F2B_GETCHE F2C_KBHIT F2D_CHDIR F2E_DELAY1d,V1.01F_1ZV1.025-JUL-1994 10:02VAX C V3.2-044PΠ^eW1XѬ ͧU-PRxRRR~MALLOCPU<1~ERR_MSGP}G }G̥}hЏSެVSf&TSRxRRBxSRBdDEREFSSfѬ0ЬRDEREF PЏ0լ(DEREFЏ(RRSSSgeeg((CNV_STRP((g~ERR_MSGegͧRUR UFREEP0I0DEF_TSTRP(0g~ERR_MSGegͧRUR UFREEP( CNV_C_STRP((g~ERR_MSGegͧRUR UFREEPVХ4SХ0TRT1PPPA7?PKP?P VcPV[PVSPVKPVCP>PV7PȏV+P0~ERR_MSGegͧPUP UFREEPRRT1ͣˏVRVV wͣVaͣV rͣwͣˏVRR+ͤV1bRALCLISTPb#|~ERR_MSGegͧRUR UFREEP$R|~ALCLSTBPb#|~ERR_MSGegͧRUR UFREEPХRХ$Т TRTRgPxTS8RCbRb 8RCbR}hb8RCbRb,8RCbm~ERR_MSGegͧRUR UFREEPTRTR߭~8ݥݥWOPENPT1ѭ1xR8SBc~ERR_MSGegͧRUR UFREEPegͧRUR UFREEPVGV-V(0~ERR_MSGegͧRUR UFREEPͣݥPOPENPTPͣݥFOPENPTTegͧRUR UFREEPݥSTRLENPХ VTALCFILEPS#|~ERR_MSGegt9, VMS.BCKO[V9.BIN]RT.OLB;1E;1 dmͧRUR UFREEPV0ФRЏpФRSt ФR}pЬ RSЏbegͧRUR UFREEPP}eR F_1ZF1z_open s ' C$V_CTYPEDEFSDEREFWOPENALCLISTALCLSTBALCFILEERR_MSGDEF_TSTRCNV_STR CNV_C_STRMALLOCSTRLENPOPENFOPENFREE F1Z_OPEN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSa}ww1 \Z,V1.01F_1YV1.025-JUL-1994 10:03VAX C V3.2-044wR F_1Y F1y_getenv s5  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_STRALCSTRGETENVSTRLEN  F1Y_GETENV$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eTլDEREFЏd잭d CNV_C_STRPg~ERR_MSGЭdPݭGETENVPR@RSTRLENPSSRALCSTRPR|~ERR_MSGЭdPЬ PRS`ЭdPЭdPww1pW,V1.01F_1XV1.025-JUL-1994 10:03VAX C V3.2-044_R F_1XF1x_exitc s  C$V_CTYPEDEFSDEREFERR_MSGC_EXIT DEF_C_INT F1X_EXITc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPRu1 VMS.BCKO[V9.BIN]RT.OLB;1E;1 EC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb螭b߭ DEF_C_INTP|~ERR_MSGЭbPݭC_EXITww1@ -V1.02F_1W0V1.025-JUL-1994 10:04VAX C V3.2-044pR F_1W0 F1w0_close s- C$V_CTYPEDEFSWCLOSEFCLOSEPCLOSE | F1W0_CLOSE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^xVЬRТPРUxfffТSУTTT<UWCLOSE}T&ԣЬRUPCLOSExPPˏPЏbUFCLOSEЬQСPԠ}aww1`E-V1.01F_1WV1.025-JUL-1994 10:04VAX C V3.2-044R F_1W F1w_close sL  C$V_CTYPEDEFSDEREFWCLOSEERR_MSGFCLOSEPCLOSE F1W_CLOSE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCEvtND&:v=%ʋ} ٱIQ!TC풠TPbF^cqTzJߍK _ծaY }79#K+^ 0etи*Iťy-:P^WR#m`~BF]Pj2|s"E?WR tWJĎ$;LXkKQ]EZ_HGS Ĵ+C\PG]AI[ELG BAEFFET L᪡C>Q[E\ [GF5VuCtXBQ5\ J{B[P #AHE )p|L L&2ɛL:OwT<\qqY^x S[ܒw^ T(q ? \(U{9YEd3KJ 3N][떞"!o>+ @& >}등{Y DBL^\E B_XWU I FCXX CG^ iUSCR8RK_ZJG_ PFYNCKDDYCE^ŠCYVQP̱ 9g[FwNYWRJCWUBDf|I$&2LOT>JG. bQIm<ɩnŇk_BG:%4H$efFY'.OAj:'JЭ=HTfu_W)1 CI_MJ_C^dYN$ZIBE U>4ʂ )O[[TZ1 fI|r BMNi 11Gn9-#iŲU{@8 Gf}MB^#X7cw2~^|\S\XO\b~<A.]EkDO \䢮_IW\Y GUD嶹B\TER@_VXJGJR3  FJI\EMHYPP[@OVS  R YWvCMVK z%FK$M^ XH7~:3ŤOתOI@KYX T9QiwKK^TY^ GF]\T UY OV P^ 3DIG\fOISHLG SHC[LKO [RӝUC\ M _QQᴻ YOTdi+ QP(XT 5gZ_MEKGZRY_@LX]T `FXZ EmE+[ZQ /ס  S CDJԠųBD J ILTHIUI ADH\PBVIJLVXEMT DZQIYV>FWZ GWGJ~ FG SFGpU Z? O v FbGC VPVYM I N`EMJSZaNIDN LW_I_F VG@^DH-UOXB_%LGMHD TR\W^ oNWrT'Œ]] WH'"ϳSBQXXVAEJLLCBY R \PEtY[rY UPDG9ELQOMcF 8Q 'JW:\v6BCy]:DNQ 㯀HU YYUPKFOEG@DCC!Ci]EAMJ_Uk \XqMVCSF*mAKX]]PE ߓRL + TJU[=]+ _RRLDH\PKTZGOJXVSWM^UKMTDDZY [VIB  CDIZUT VZK_@ @KM ]\TLA MIWRKJH N EDNYYH+SL~jvHhZ GO  JL\ASK[ \US xHL b= --JUO.vlj-'q~|ɵTG] MWHFJWCSؤ{kw~8vR }M MDZM^Q[ZZ$HQILBk: ~,+-(6~LBC\ZCMLWLR_OU Y[X~[YSL_U@>MJDOi[THWm~^@DY)BV[[ H gc[LPWnsBQ}EB ܾ]XHDEKyODuUCgRZ TNUQ+S[JPCD]ZLWCFXL &UC Y\\^W.\JM MYXRTXWD ZVCCEI\G1CBBKDV  OZNMF ^  WZTMCA@ش^I JDzLHGUDɧKTP]@^^VWSAVAI I\J A R CB W@][IDEY]YHDEY U CIMCMW\FACFKSD\OIMF] [GD\MLBU I@VWAE OX FvC@B  GDMm  FFAZ YEHF\ETQW^OK\H @ VKMIJ;U^ ^bV JP稒a*(^dά "赧&(ƈiQѴOyIQDVז5o;iY~B5߿M[k Kcd[%ܪ;a/~a(Bٰ([IKՆ@tܵjF*͉o|dk^>EfF5ʤf soOJ=-%N8B\q\ j믽Ǟvh+5Q Zb:.CBBCP]kQ,6XkJ4s,t ]" VʨzCn7`[Њ3Eϝɓr֟=r*M]g{S,|pN.rnM&&MQX"5SLk=wҤC ^aQ6H|#IEF_8JS ϒ>5e &q CեxY:^SG):4Z]P{ ׆LmK:yE LN gwާn 8xsIܯ)3tʨ_Tg9P h@rw`*cCDX[j'v([_" -2AU5+ 䧸,W\JŇ9E09ߣ.e WIYscN%8yT[T٠LL B@ZJzAO()$ GyP\[u8(<EF=vaڴ m`kvxiV_'^SE  h\NDEKBQXDFI ZWA ӎ BYTG S EyNWCࡠMQL~ HJ 鰽_\ QUPUhNSLMQQeA[J OBOvLLKL QLPSM^@EH[RRTEJFOTV XW BDX XME  A)pJ VEZ@D@IZ HRF JV QHLMLPRXORѻÝ4Q 0TRP {\K^HAFZUTyୃ+LDLL:on!x똚0!A#M@qry}2 K\BWCDEO'Q+rd`kgiO_Œ :F{SOE 9 a)0g[ nsOYRZ#YQG̪%C @߻ճ 3q(G&K+aՀ}.'1N;^HWBl7D 7}oת_E*^ SmLxDy{W6&DoCKWBALbVBT)Gy[T=8cbaxWKkAT:tf CֶxB"tVM"JAߍo]Q~-74Cn1y&:Beti$JN2Rڇ:Ql ZW=pME p e`t**ze X TAC"G!VL藒K$ILYE9)bn IK6:}bbf#nMqY {G6oH9RiQ"PHaOB9C_m@YK PN3I]  u'N7T6KP L᰺PP1꒻Nb5EE_KК/6:EQIRl52YR[  x|uM{ $,Pn1߭ЬRݢϢӞSã UURPà ZZUZUTZTTV垭RSbSRcRU ALCBIGNUMPb ЭePUVЭRբТSCX1PRV ALCBIGNUMPb ЭePЭRТSCXXTUVRQR AdQQRUVTЭRТP@ޮWDh(ޮ(TURSRPCC(SSRЭRբ VXXϒZVЭRբ ТSCU1RV ALCBIGNUMPb ЭePЭRТSCUUTZVRQR AdQQRZVTЭRТP@ ޮ WDe$ޮ$TZRSRPC C$SSRЭRբ VUURVЭPRQBhBeARRVЭSЭRɣR1@ЭRVЭRТSCCϚ1PЬTˏdRR1߭ݫzўRSã WWPà ZZWZWUZUUVRSbRbRZ ALCBIGNUMPb ЭePWVЭRբТSCX1PRV ALCBIGNUMPb ЭePЭRТSCXXTWVRy" VMS.BCKO[V9.BIN]RT.OLB;1E;1 lQR AdQQRWVTЭRТP@ޮUDh ޮ TWRSRPCC SSRЭRբ VXXnZVЭRբ ТSCU1RV ALCBIGNUMPb ЭePЭRТSCUUTZVRQR AdQQRZVTЭRТP@ޮWDeޮTZRSRPCCSSRЭRբ VUURVЭPRQBhBeARRVЭ C$V_CTYPEDEFSBIGCMPBIGMODBIGDIVBIGMULBIGSUBBIGADDCPBIGNUM BIGTOREAL ALCBIGNUMFATALERRALCSTRMULLOGFPUTCFPRINTF BIGRADIX  BIGTOREAL 0 REALTOBIG BIGTOS BIGPRINT CPBIGNUM X BIGADD BIGSUB \BIGMUL BIGDIV BIGMOD BIGNEG BIGPOW "BIGAND ,+BIGORİSЭRɣRЭRVЭRТSCCyݬ ݭrͤe^GX}h}h}h}h}heeЬZˏj[[1ЬQˏaRR1Sã VVPà YYVYVTYTTURSbRbRU ALCBIGNUMPb ЭePVUЭRբ ТP@WpRU ALCBIGNUMPb ЭePЭRТP@WWSVURQR AcQQRVVURBgЭRТP@ϜЭRբ UWW(YUЭRբТP@TsPRU ALCBIGNUMPb ЭePЭRТP@TTSYURQR AcQQRYYURBdRТP@ЭRբ UTTϜRUPЭPRQBgBdARRUЭSЭRͣR1ЭRUЭRТP@@J1P[1߭ЬRݢ2͞Sã UURPà YYUYUTYTTVRSbSRcRU ALCBIGNUMPb ЭePUVЭRբ ТP@WpRV ALCBIGNUMPb ЭePЭRТP@WWSUVRQR AcQQRUUVRBgЭRТP@ϸЭRբ VWWDYVЭRբТP@TsPRV ALCBIGNUMPb ЭePЭRТP@TTSYVRQR AcQQRYYVRBdЭRТP@,ЭRբ VTTϸRVPЭPRQBgBdARRVЭSЭRͣR1ЭRVЭRТP@@f1PЬTˠdRR1߭ݪF˞RSã VVPà YYVYVUYUUWRSbRbRY ALCBIGNUMPb ЭePVWЭRբ ТP@UpRW ALCBIGNUMPb ЭePЭRТP@UUSVWRQR AcQQRVVWRBeЭRТP@ЭRբ WUU\YWЭRբТP@TsPRW ALCBIGNUMPb ЭePЭRТP@TTSYWRQR AcQQRYYWRBRRLRGINT @mkdesc Ditobigbigradix bigtorealW0 realtobig bigtosbigprint decoutcpbignumr X bigadd@ bigsub \bigmul8 bigdivz bigmod  bigneg4  bigpow "bigand ,+bigor 1bigxordЭRТP@DЭRբ WTTRWPЭPRQBeBdARRWЭSЭRͣRЭRWЭRТP@@ρݬ ݭzͤe^eZGVЬRТSzSP{PQPPYSQYYSQQW}f}f}fjjЬPˏ`RR߭ݠɞЬRQá TTTWXXЬ PЏ`R΢ЭjPRQbRX ALCBIGNUMPbЭjPЭSգKRT ALCBIGNUMPbЭjPЭRТP@UTUЭRТP@ϻTUUP PУRBUWSЭPРRBSTRBYUϫPcЭRTPP@nnSWRQRNPAQQR>PЭPРQASTW~QRBYPP QWTDeRPQbRRYU@PcЭRբ;ЭRЭRТP@PxYRRRR`XЭRТP@@mݬ ݭfЭ^ЬYЩnSЬZЪUˏi[[1ˏjPP1ѣãPã VVå RRVRգVRQRVQQPգLУPХRB ޮ X@ޮWVTQT!PA APPPR QQTRRPХPУRBޮW@ޮTVSQS!PAAPPPR QQSRRP[ ݮY nZ PPP^G[?SЬRP YY}k}k}k}k}ke̞eRY ALCBIGNUMPb ЭePTY~ ALCBIGNUMPd ЭePЭPРQAUTЬPdYR5ŏmNAPv PˏPnPd_PdHPjPBeR˞TY~ ALCBIGNUMPd ЭePRY ALCBIGNUMPb ЭePݭݭYЭRТP@ЭRТP@UϚ P ЭePЭPРQAޮZUAޮWYTUXTRPBXVˏVBVXRݬݭτe^}Ge잭eЬR Rݬ R~ݬ%ЭeЬRRâ [[PR`ЭRբl[ ALCBIGNUMPT ЭePФSЭPРQAޮnЬVC ޮ Z[SVXSR1PBXUˏUB xUXRu[~ ALCBIGNUMPT ePФP@ZPSЭPРQAޮXЬUCޮV[SUYSRPBYWˏWBWYRYjЭRТݬ TЭe^}Ge잭eЬR Rݬ R~ݬ]ЭeЬRRâ ֮PR`ЭRբz~ ALCBIGNUMPT ЭePФP@nPSЭPРQA ޮ ZЬVCޮYЮSVXSRPB XUˏUBUXRXfݮ ALCBIGNUMPT ЭePФSЭPРQAޮXЬUCޮVЮSU[SRB[WˏWBxW[RЭRТݬ Tϸe^}Ge잭eЬRR R&߭Rkݬ ݬBIGMULЭeЬRQá XXPQ`X~ ALCBIGNUMPU ЭePլЭRТPЭRάХP@[PTЭPРQAޮnЬSWDޮZXTWYTRPBSVYVˏVBVYRYkݬ Uϓe^e[}Gk잭kЬRR R"߭RHݬ ݬBIGDIVЭkЬRPà UURPbU ALCBIGNUMPVЭkPլ ЭRТPЭRάЦQЭRТP@ޮZЬTAޮYXSU\xXRCRWQWPTR RP QP{RPQPQCQWPTRRRPRQPQP{RPPQQXSSUݬ VOЭ^}G}Ge䞭eЬRR R&߭Rݬ ݬBIGMODЭeЬRPà XXRPbSЭcRX ALCBIGNUMPb ЭePЭQСUЬSSVPSVЭRТP@nn[VTEޮZXUYSU\xYRCRWQWPTR RP QP{RPQPQCQWPTRRRPRQPQP{RPPQQYSSUYSЭRբSSЬ RЏbSeP|^ UެVfpUxUPPPPfPUެ T}UtdRBIGMULSRRRcPPxUPPPPPdݬdcPPU)PfЬ RЏbPЬ RЏbԢPP,^W SVެTլdrլ!d6}LN7PլЬ PЏ`PѬ PѬԬЬ PЏ`Ь13SxSPPPPdPSЬRS1BIGMULUMULTPVЬ PPPPePQPRRdgPR=P߭R7ݬ ePPˏ PQPQQVxSPPPPPpVݬ ݬݬ 9PUPݬRdgPR@P߭Rϻݬ ݬPPˏ PQPQQVS1VЬ PЏ`RP4^ЬZTФUU XXЬYY1Y1YfդPEޮVYWXSQSPQPAR3QSPQPSP@WRPSP@WPPPRRPդ_YREnnTRUXSQSPQPAR3QSPQPSP@URPSP@UPPPRRPP߭YYZBIGCMP^WR)ЬUT SBeBdVWVˏVBcVWRWP^WR)ЬUT SBdBeVWVˏVBcxVWRWP^ЬR޼ SBcnnVЬTUT PEUUTSLZ YXZR3ЬVЬU TBfCeQRSPP@dQXQWˏW@dWXRXCiS$^ЬRТSCXЬ RТSCVSîRxRRRRRcRެެ~ݮݬyPhݾVݮݬdTվ1oެ оо h[޾kfbigsubih?bigmuli#@bigdivi@AbigmodildCbigpowiDbigpowiiEbigcmpi  Fadd1; 4Gsub1; pGmul1 Gdiv1L ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~PePinteger expected or out of rangePf!Pnumeric expected P!g2Pstring expectedP2hBPcset expectedPBiPPfile expected$PPj^Pprocedure or integer expected,P^k|Precord expected4P|lPlist expected STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMScP ^ЬSc LEXCMPP/ЬR}cbլbݢALCSTRP |~ERR_MSGPPPww@ 1,&-V1.01O_0NV1.025-JUL-1994 10:09VAX C V3.2-044R O_0N O0n_lexgt' sN C$V_CTYPEDEFSDEREFERR_MSGLEXCMPCNV_TSTRALCSTR  O0N_LEXGT'$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSA  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPB BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOUC RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZED STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHIE CSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS_P^eSTѬЬRDEREF PЏլDEREF PЏccCNV_TSTRPg~ERR_MSGcP7CNV_TSTRPTPg~ERR_MSGcPLEXCMPP:Ь R}bT$bݢALCSTRP|~ERR_MSGcPcPcPwwG 1P-V1.02O_0M0V1.025-JUL-1994 10:10VAX C V3.2-044YR O_0M0 O0m0_lexgeQ s C$V_CTYPEDEFSERR_MSGLEXCMPALCSTR O0M0_LEXGEQ$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPRH OC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLISI T(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRJ LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME.>OE +}DB]Z]lBR'\ $=X 3g_^k{ZKW|EˣՀ%|82"Q Gn{&|:[liVBx1f=Ip/6UY/FbbA8v :,hWgv:*aۜL+pEX36gNG䧡R r :^w p2@bi.\+KD4(؅ށ% .Z$Ơdp(udJB*~gYB4~i_t6:(:yApZ!$؏ou1!}tcMH,XtC#]FdW G!{h?HAr  v`V'BqEbYXeʙV_Xv2VPQ-Z Alxvᾞ@4%aSh{(Lj7iLBӸ YSՐsJ4VW>[!Titn ګ%M Z˘%p[vo-"pIIXmU qg.d<\0dQ J>x4=1j۰C5ATR܈e)ZR| @ZJ_qAؿSc}& }qZ_l }JO;l ̊XCw$W!0+2KQ [ g-O7L$ _PD}u$#A},}K/p mǹLnr68ǎ57x5f:-G{dJ Zojkyb-2  G_ۜ;&LxkN8ZI][SAƺ2ѭX5EBkOb-,n5$r3UT < >.0B5ʀٟRO:1ꏝ[fE-,ʸ};EO7H ٫9InyjP$<_u4'郭C$H}?'.b H\]~R!'!ۍzZi9sWN*pJHd ?ƚTu+]uܐ7n0ht]D}T0i  Q\WdU2t^< %il%8#g!>HW-7;}!x6rP*PsiH:Dkɲ=.j9#1g0TO*5EK{:[7G.+OF>דt)߯&LBbk {"I9a_ bhM" y!ft&eM}@c3h@mEYZfv|]f1*=#gwNg],vLeYĻܟ鿅 .0аa8b ͅ/ͭ?ɲ~ш6!RLQka [R8!;xťifH2xg=t+k' ײ-QQ#r=)})%TM$C+oه:#e)#V/>ʬӣ^g1=VǮel]zv[r#AbtÛR2H>=f"RFP%so]!Q "xS8Ra ;^elϘP( uZOl;=Q –5_X[o`5l|5wf,ߏg;0UB%kO5#ˊw9Dtt`?|Q '-oH3"KMtR_:)a֕hccOt̀zgz36t| %"8o<;8ސl nw ZJ_+G~ŵc0SxV#)(> 2ck=#m%x4"Q 3ĬKG\~1dlǠDo:!MaPY눤&>`Vũ0/LdPj%( D??"SmT7B  vj4U/]t4Vj!n6vC\]_rZԀʖiME WAI.NH<KϼYnGq3DwKhmj lgo#^,{_ G[6&ۗ0W~Y> )f?؟99EBχKp\PmD2X^ZƍoCNZEp6ݵ'$s+MBޝD83s!?҇]ۥHGKE R ,2+\'F-(ToVMpZ֟S7 6U;9 oۦ-{o'dwɈdGc[ֵ}6_Y* dD l<<~EHNA(ڰΙD4w)k&O]Ft;h0Юob; ~ΘCq`:S{R6|kb7v4'\,VQW ؚ^ǡ2eۯü x )l#uvrF@sĦPw~B%'R  QE \TeCC:@f?1-@2]?}FX= E3'μĠxdlu>[|?r8!o~셭;:$H;L+a0ݩxE!f2[s(gըpVT'4O@?f4ץ:pȣz}s ,d 0XJ\p??˖;n:"2MnєD]\6uӘo,|fEnsO<7[E rZhދB+ˤUdGCBqaZP=y{?K!Oԭo6_ئ{=61-fu)H}>LbB-1v!. zÿyңEő777m;'i&5H@Xq ,U 굇) Lr~ZLKT AhNJgUawys*H.̂N.Vliƪ6n"8a;S vJxvAC^<c&wZYddGqT4 ]1=FL-g ӏ2wlkF*y67yxr?@k g?KTxř(eiN@^΂YkwRp4{֢Ih{7?1 L-AEZt!XJ 0fVe!Z Dvcq:B5/ qGp%(h8z'D ib4EHɛ77r_ǐ-9ͧݔk1<ҭE%uuIq7u͠HśگEk' ڵ .ӊXMnjZP7Ȫɩ~Ēۊ[wO66lq2 ?)p`l0"-r^V4,L19&!]K~JWW(f0k|SV|_QG-+3Yņ`0a|,+uț{tq0OE*8Y5Q 5Ru=e~?F[Nx{2p_w0i y\4b_'&Lq(b)m$3Uݔ VMS.BCKO[V9.BIN]RT.OLB;1E;1 !{J K STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSgP ^ЬSc LEXCMPP/ЬR}cbլbݢALCSTRP |~ERR_MSGPPPwwM 1J-V1.01O_0MV1.025-JUL-1994 10:10VAX C V3.2-044R O_0M O0m_lexge+ sN C$V_CTYPEDEFSDEREFERR_MSGLEXCMPCNV_TSTRALCSTR  O0M_LEXGE+$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSN  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPO BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOUP RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZEQ STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHIR CSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMScP^eSTѬЬRDEREF PЏլDEREF PЏccCNV_TSTRPg~ERR_MSGcP7CNV_TSTRPTPg~ERR_MSGcPLEXCMPP:Ь R}bT$bݢALCSTRP|~ERR_MSGcPcPcPwwT 1@f-V1.02O_0L0V1.025-JUL-1994 10:10VAX C V3.2-044YR O_0L0 O0l0_lexneU s C$V_CTYPEDEFSERR_MSGLEXCMPALCSTR  O0L0_LEXNEU$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPRU OC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLISV T(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRW LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMEX STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSkP^Ь QЬPa``aLEXCMPP0ЬR}bլbݢALCSTRP |~ERR_MSGPPPwwy^* VMS.BCKO[V9.BIN]RT.OLB;1E;1 Y +k O0Z6_RANDOMe O0Z7_RANDOM O0Z_RANDOMU O100_SECTN O101_SECT\O10_SECTY O110_SUBSC7 O111_SUBSC1 O112_SUBSCYO_1107O_1111O_112*O_113$O_114 O_12 O_120 O_13 O_130 O_131~ O_14v O_140p O_141h O_15a O_150* O_151 O_16 O_17 O_18 O_19 RALC RCOEXPRRCOMP? RDEBUGRLOCALRLRGINTF RMEMMGTRMISC2 RSTRUCTRSYSRWINDOWp RWINRSCRWINSYS TIME XWINDOW\ 1-V1.01O_0LV1.025-JUL-1994 10:10VAX C V3.2-044R O_0L O0l_lexne/ sN C$V_CTYPEDEFSDEREFERR_MSGLEXCMPCNV_TSTRALCSTR  O0L_LEXNE/$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS]  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP^ BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOU_ RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE` STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHIa CSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSgP^eSTѬЬRDEREF PЏլDEREF PЏccCNV_TSTRPg~ERR_MSGcP7CNV_TSTRPTPg~ERR_MSGcPLEXCMPP:Ь R}bT$bݢALCSTRP|~ERR_MSGcPcPcPwwc 1.V1.02O_0K0V1.025-JUL-1994 10:11VAX C V3.2-044YR O_0K0 O0k0_lexeqT s C$V_CTYPEDEFSERR_MSGLEXCMPALCSTR O0K0_LEXEQT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPRd OC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLISe T(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRf LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMEg STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSjP ^Ь RЬSbc>cbLEXCMPP/ЬR}cbլbݢALCSTRP |~ERR_MSGPPPwww j VMS.BCKO[V9.BIN]RT.OLB;1E;1 jh h 1V-/V1.02F_0N0V1.025-JUL-1994 10:22VAX C V3.2-044YR F_0N0F0n0_errorclear0 s. C$V_CTYPEDEFS F0N0_ERRORCLEAR0$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPj 1>[ .V1.01O_0KV1.025-JUL-1994 10:11VAX C V3.2-044R O_0K O0k_lexeq/ sN C$V_CTYPEDEFSDEREFERR_MSGLEXCMPCNV_TSTRALCSTR  O0K_LEXEQ/$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPSk  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPl BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOUm RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZEn STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHIo CSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSgP^eSTѬЬRDEREF PЏլDEREF PЏccCNV_TSTRPg~ERR_MSGcP7CNV_TSTRPTPg~ERR_MSGcPMLEXCMPP:Ь R}bT$bݢALCSTRP|~ERR_MSGcPcPcPwwq 1J.V1.01O_0JV1.025-JUL-1994 10:11VAX C V3.2-044R O_0J O0j_numne sq C$V_CTYPEDEFSDEREFBIGCMPALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O0J_NUMNE$CODE$DATASTDINSTDOUTSTDERRr _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASEs STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RANt K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESu EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRv APHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 8^eSѬЬRDEREF PЏլПDEREFЏcȞc߭䟭 CNV_EC_INTP8߭ CNV_EC_INTP'ѭЬ PЭЏ`ЭcPЭcPПCNV_EINTP7؟CNV_EINTP&؟BIGCMPP }ؼ ЭcPЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPq=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPЭcPww VMS.BCKO[V9.BIN]RT.OLB;1E;1 ww x 1@.V1.01O_0IV1.025-JUL-1994 10:12VAX C V3.2-044R O_0I O0i_numlt sq C$V_CTYPEDEFSDEREFBIGCMPALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O0I_NUMLT$CODE$DATASTDINSTDOUTSTDERRy _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASEz STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN{ K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES| EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GR} APHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 8^eSѬЬRDEREF PЏլПDEREFЏcȞc߭䟭 CNV_EC_INTP8߭ CNV_EC_INTP'ѭЬ PЭЏ`ЭcPЭcPПCNV_EINTP7؟CNV_EINTP&؟BIGCMPP }ؼ ЭcPЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPq=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPЭcPww 1#.V1.01O_0HV1.025-JUL-1994 10:12VAX C V3.2-044R O_0H O0h_numle sq C$V_CTYPEDEFSDEREFBIGCMPALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O0H_NUMLE$CODE$DATASTDINSTDOUTSTDERR _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASE STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GR APHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 8^eSѬЬRDEREF PЏլПDEREFЏcȞc߭䟭 CNV_EC_INTP8߭ CNV_EC_INTP'ѭЬ PЭЏ`ЭcPЭcPПCNV_EINTP7؟CNV_EINTP&؟BIGCMPP }ؼ ЭcPЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPq=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPЭcPww 1#).V1.01O_0GV1.025-JUL-1994 10:12VAX C V3.2-044R O_0G O0g_numgt sq C$V_CTYPEDEFSDEREFBIGCMPALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O0G_NUMGT$CODE$DATASTDINSTDOUTSTDERRŞs VMS.BCKO[V9.BIN]RT.OLB;1E;1 S  _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASE STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GR APHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 8^eSѬЬRDEREF PЏլПDEREFЏcȞc߭䟭 CNV_EC_INTP8߭ CNV_EC_INTP'ѭЬ PЭЏ`ЭcPЭcPПCNV_EINTP7؟CNV_EINTP&؟BIGCMPP }ؼ ЭcPЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPq=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPЭcPww _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASE STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GR APHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 8^eSѬЬRDEREF PЏլПDEREFЏcȞc߭䟭 CNV_EC_INTP8߭ CNV_EC_INTP'ѭЬ PЭЏ`ЭcPЭcPПCNV_EINTP7؟CNV_EINTP&؟BIGCMPP }ؼ ЭcPЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPq=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPЭcPww 1 `;.V1.01O_0EV1.025-JUL-1994 10:12VAX C V3.2-044R O_0E O0e_numeq sq C$V_CTYPEDEFSDEREFBIGCMPALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O0E_NUMEQ$CODE$DATASTDINSTDOUTSTDERR _CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASE STATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN VMS.BCKO[V9.BIN]RT.OLB;1E;1   K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GR APHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 8^eSѬЬRDEREF PЏլПDEREFЏcȞc߭䟭 CNV_EC_INTP8߭ CNV_EC_INTP'ѭЬ PЭЏ`ЭcPЭcPПCNV_EINTP7؟CNV_EINTP&؟BIGCMPP }ؼ ЭcPЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPq=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPЭcPww+8  O0S0_REFRESH?  O0S_REFRESH1 O0T_SIZE"  O0U0_TABMAT*  O0U_TABMAT O0V_TOBY O0W_TO  O0X0_LLIST  O0X_LLIST O0Y0_BANGO0Y_BANG O0Z0_RANDOM O0Z1_RANDOM O0Z2_RANDOM O0Z3_RANDOMx O0Z4_RANDOMq O0Z5_RANDOM 10I.V1.02FMISCV1.025-JUL-1994 10:13VAX C V3.2-044R FMISCtrefcmp,,tvalcmp, Xtrcmp3 ltvcmp4 nthcmp| nth s_ C$V_CTYPEDEFSCVPOSANYCMP TREFCMP ,TVALCMP XTRCMP3 lTVCMP4 NTHCMP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALT BL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUT K_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TO T COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS  N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAAT TRIBSDRAWOPSWDSPLYS CURSORSYMS SORT_FIELDP^ЬPРPР PЬPРPР PANYCMP^ЬPРPР P$ЬPРPР P$ANYCMP^ANYCMP^ЬPЬPANYCMP^ЬTˏdRЬSˏcPRPIRR?TJPRSARP(PPPS'PTPANYCMPPݬANYCMP<^UЬTd<ФSУ Rݢ CVPOSP1У RP {PxPP@UnddФSݣCVPOSPTTDT>У QRPTPRС QRPTPRPPTT¡TxTRBUUPww 1аlh.V1.02F_110V1.025-JUL-1994 10:13VAX C V3.2-044VR F_110 F110_variable' s  C$V_CTYPEDEFSGETVAR F110_VARIABLE'$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(& VMS.BCKO[V9.BIN]RT.OLB;1E;1   LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMS2P^ЬPݠGETVARPPPww^F_1C0WF_1DQF_1D0BF_1EF_1E0F_1F|F_1F0tF_1GmF_1G0eF_1H_F_1H0WF_1I 1px.V1.01F_11V1.025-JUL-1994 10:14VAX C V3.2-044qR F_11 F11_variable s-  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_STRGETVAR  F11_VARIABLE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_M AINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZE STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME  GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb잭b CNV_C_STRPg~ERR_MSGЭbP ݭGETVARPЭbPЭbPww 1 .V1.01F_10V1.025-JUL-1994 10:14VAX C V3.2-044PstringPco-expressionPsetPtablePlist$Pprocedure.Pwindow5Pfile:Pcset?PrealDPintegerLPnullP^SeTլDEREF Џd잭dЬ RcݢSTRLENPbЭdPˏPPP1pf?PЬ RޣݢSTRLENPbЭdPЭRТ R} ЭdPЬ RޣݢSTRLENPbЭdPЬ RޣݢSTRLEN PbЭdPЬ RޣݢSTRLENPbЭdPЬ Rޣ$ݢSTRLENPbЭdPЭRЬ Rޣ.ݢSTRLENPbЭdPЬ RR F_10F10_type s  C$V_CTYPEDEFSDEREFERR_MSGSTRLEN F10_TYPE$CODE$DATASTDINSTDOU TSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURREN, VMS.BCKO[V9.BIN]RT.OLB;1E;1 b  DSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROG KYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALS GNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTu XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSQ$CHAR_STRING_CONSTANTSޣ5ݢSTRLENPbЭdPЬ Rޣ:ݢSTRLENPbЭdPЬ Rޣ?ݢSTRLENPbЭdPЬ RޣDݢSTRLENPbЭdPЬ RޣLݢSTRLENPbЭdP{~ERR_MSGЭdPkP{]]?!Od1ww 1@͆.V1.02F_0Z2V1.025-JUL-1994 10:15VAX C V3.2-044aR F_0Z2 F0z2_sortf| s  C$V_CTYPEDEFSNTHCMPIRUNERRERR_MSGCPLISTQSORT  F0Z2_SORTF|$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_ TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZE K_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZE TEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPR IOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL| XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS SORT_FIELDP^լݬ~IRUNERRPЬQСPРRR~ aCPLISTP |~ERR_MSGPЬNTHCMPRЬ PРPР PQSORTPww 1P.V1.02F_0Z1V1.025-JUL-1994 10:15VAX C V3.2-044R F_0Z1 F0z1_sortf  s< C$V_CTYPEDEFSNTHCMPALCLISTALCLSTBIRUNERRERR_MSGQSORT | F0Z1_SORTF $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCG VMS.BCKO[V9.BIN]RT.OLB;1E;1   E K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHIC SDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS SORT_FIELD8P|^eV}Gf잭fլݬ~IRUNERRЭfPЬSУSУ SУ RSRALCLISTPc|~ERR_MSGЭfPRRALCLSTBPT|~ERR_MSGЭfPЭSTT ЬSУURJЭSУ SQPRxPSCS}cPPRЬNTHCMPRЭSУ SQSORTЬ SЭЏcЭfPww 1p줕.V1.02F_0Z0V1.025-JUL-1994 10:15VAX C V3.2-044R F_0Z0 F0z0_sortf, s> C$V_CTYPEDEFSNTHCMPALCLISTALCLSTBIRUNERRERR_MSGQSORT  F0Z0_SORTF,$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOU RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPH ICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS SORT_FIELDYP^eY)X}Gi잭iլݬ~IRUNERRЭiPЬRТRТTRTALCLISTPb|~ERR_MSGЭiPTTALCLSTBPS|~ERR_MSGЭiPЭRSS ЬRТWThЭUХ URSCQ/PChP@U } ХUPSS CQЬNTHCMPTЭRТ RQSORTЬ SЭЏcЭiPww 1R.V1.01F_0ZV1.025-JUL-1994 10:15VAX C V3.2-044P(^ZeY)X}GѬЬRDEREF Џլ蟼DEREFЏi؞iˏ_RR1ˏPPP1P^?P߭ DEF_C_INTPe~ERR_MSGЭiPխݭ~IRUNERRЭiPЭRТTRTALCLISTPb|~ERR_MSGЭiPTTALCLSTBPS|~ERR_MSGЭiPЭRSS ЭW TbЭUХ URSCQ-ChP@U } ХUPSS CQЭjNTHCMPTЭRТ RQSORTЬ SЭЏcЭiP߭ DEF_C_INTPe~ERR_MSGЭiPխݭ~IRUNERRЭiPЭSУ SУ RSRALCLISTPc|~ERR_MSGЭiPRRALCLSTBPT|~ERR_MSGЭiPЭSTT ЭUREЭSУ SQPRxPSCS}cPPRЭjNTHCMPRЭSУ SQSORTЬ SЭЏcЭiP߭ DEF_C_INTPe~ERR_MSGЭi Pխݭ~IRUNERRЭiPЭRТSS~ CPLISTP|~ERR_MSGЭiPЭjNTHCMPSЬ RТRТ R%R F_0Z F0z_sortf s  C$V_CTYPEDEFSDEREFNTHCMPALCLISTALCLSTBI RUNERRERR_MSG DEF_C_INTCPLISTQSORT  F0Z_SORTF$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBL VMS.BCKO[V9.BIN]RT.OLB;1E;1 [n  LST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VAL K_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALST RTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_ NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS SORT_FIELD<QSORTЭiP蚏}~ERR_MSGЭiPP6=ww 10V1.0S2F_0H0V1.025-JUL-1994 10:26VAX C V3.2-044\R F_0H0F0h0_log s  C$V_CTYPEDEFSALCREALERR_MSGDRUNERRLOG <F0H0_LOG$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP 1.V1.02F_0Y3V1.025-JUL-1994 10:15VAX C V3.2-044XR F_0Y3 F0y3_sort] s  C$V_CTYPEDEFSERR_MSGCPLISTANYCMPQSORT  F0Y3_SORT]$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULL PTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STA RTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSwP^ЬQСPРRR~aCPLISTP |~ERR_MSGPANYCMPRЬRТRТ RQSORTPww 1@M.V1.02F_0Y2V1.025-JUL-1994 10:16VAX C V3.2-044tR F_0Y2 F0y2_sort s2 C$V_CTYPEDEFSALCLISTALCLSTBERR_MSGANYCMPQSORT | F0Y2_SORT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESST R_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE< a  %MA" 2`JG?2EHtZE%9ZWYz UTSGMJPT:>dR^|SE Lq#GTKB!JHSBYG.^#KMYyIr]NST DsSJ] Sx Tah1q2vlHD<0:]b  Ia]JrI LJ+OILAGO[\NS=&EH\[Z\_qQ P)Rl[P_ Q-FJE@QVW_N [ ^LUSP_N@DP #R[O^Tί DSR]QEDJMA^ \_)LPW줿H_[-; 4INF]YI3]AS۠@ZPCOZ?NP Km:[=1pbsMdcP~PYWO@xgc_@VPbQpwQ zms-mpvq*Ogz,5z6##tJK9MDUUh9+e01mE{NYHu}M۱=`^ PmzP+lN@!! Zm7QJ0BT\,1FF76 T -^ ZQRA DM BU^' o  CJ BD CPHLhJB@_38G.v] F[y+% 7alѨtLO)ĬQF=U9Tka@{JȬWX0T }4BJRK[ JFGNDKeYFAWWEKAA\CWG F 3XF HCGI@HGUHI[@BN^ANZUJSSVR\ E_VCAJIF[VM @SK_O{SM]GOa_[EOEPUN;+N ABad_WL\]V O]]RAJ\Q CP I XGUJJMHT]^Z]V T ] LH]M M]S __ZL NP KWUSF INUBX ^B@ FKEOV VFD7^I )1[4O L(X"!ګI xf @JjP4Cjs|*l&ks:CYw16]zN:`J~$,V'%G weTq\F;j}bUKG~c !mNK#qx`YAKLkg ȴj!nkMˑ)R3HJŠ>i>NpwL|lY)\h35CO^g[.XFHVa YRP>[R@CYSK]AH]JOLTRUBVM_ O JOGMURDX T JK~-SEYY KAZjHSFTJY  BT^TKONQFYICI \DZNQH N@JI] OJ ф׹fWLnنOVMPJQ ,@UU󇟾XX ՉRf!1D#>[OZ@VJV:fJҊ)8YL ]G  Lŕ=ĴܵRХA_UubpI {J0e~S@"A>fe6'cgـMq3UK 'P:ߓI>ֈ7*cM_{,P Q \LUP[{I IBL W#tn,}~8-~ D UJ(ۢi\Jۼ`9\V<Պ!bE$>|VX8 VOg3Px' 'AGv/x%VɾUX6`ZV|[5 ¯M5~OF@[a^z[cC FSȆf㺼Vrw~Z _` Ќ]pڂm`p4dU TAW &'ly=Ql5#&? eIJ rVOZIFR|w&;bHZ \hdsvҺMtVVnA8]YYF]Vo(,MX fLq^ BKOgqB WAPQG[GN0O] SVRn GR NMC@SS]YJ Y[G @]HBRBSNSLHZTRDGCYRPL KM EZNIש@@_ S@S\/L [GlC E A颽 I4OWIZ_ZC X[LJWS W^\*VZUNDL TFxC1:E PTX=EH:B"U)H)k2v݁QDQPeEE^V\EN`xqWVSWKFg V#LKU_< =I00e __ -b]ذCVՉ\X^E]v MI1YG DT _ʹuEEK Y ]KEƷU[M\UY襁 8CRIEA RQYARPW\HH   \TᴲKO UJP JSULONS]SMYSC5IBLP RR^SX] iYK_J\" BQ \}K@UGmPSI US@I;5 VSX\UWVPO Q[OQCUGHAV ] V]D^SZIJGQEJ_DG@]SFVI8 TP_ D_I@JL笼xFDBQQMJL LW_VMXHRNUZTRQZXHW@YGZ[ CDI \ZAL TD[VBERVS[YNAV@]U@ JFQLO@WI ABS]R^ L RRQn%JyOF^W=AY<Iƅ>N]MJ>,ϫN sM]iL_< RPTW_ih JBQ4 SDFUPQUHuLXXL M|ԌRҮM}E8TY CWAìPӻJJLV | P_Q4\DG1sUAjO{\ A(@o=IZS]\j?MIEK>ZWI PA\P>xhB \ET_I@KQ WfFNVWU\ PWKACK@RD@_M@J VCFMJSRR]N@X^BYE@AAIjG]SGvҶ ШJws?"z=?JXIL\< #{E&<<&t+$eT Z]PU*oRIB[O ]DW ש+J^=p GпkPPk; |@F z η ݻJB ,3b:ݙVuDYNʑW?BݝC1CNWDa|vwg{I+ӵv  ڀH J5 VșEPq'bꏥ1  ֈΘmEhO%9zsTa8D] ^ٶCJQu<{Sj.e>6^S7hղ鸉=$ ^e Ļ ` MI1XB wي7@ !E#1|=%! EIևӓ?vE$k-:(UߴHgDE67XD4eRZۢ!,BPNVMu]țF̱M @DHTRM XBЯYTBXHkf5RPĀ-6<`:8"U+iw{uںZ5H-Z)c%նCcuͰ 5ĩKG#n hp6M}2RP(51NcAR ]VC66\BJ hF Zʌ鶔4ŵ`dHgHō>Z, qw0qHC !|+uGv^$EId80 q/» q]"%ْ_tvT?H}ID;.rZh$R{e>}AڞvV$]Cؑf\G4m QZP. N 2GODʵZT]bUMlx {.IնPDwvh,5D?q(ׯy/_|T%Ir+GYS{& a@Z՗sS 9yl\-?Ψ)K6+J /{a'a 8w lwM&l'fsKxDhVBXbÎ 4k~G, uT|KAED@絈c^"%":UG;8![lc >LM_Z-So+"%5;{7P C.\\OM_[ORN%N$"Na_ 5hg @QR @#&WhP֚X XI"@F^QHD 6SLdE\RFNMKN]&D!UTF]ħI TMYO_M tUwDT xpc[CTZFDbQ;q毕s^GOf|dai{ήz @hujWe}Sb€ZuDhJ9${L.һ~N mUlW,fm͙qH ZGAxlyVc(M4pHXЄ#  ?^0jEH\V*ǬKKGUZ 擑m'MPU Ɔ^dP P\JAN?ަ} |-TY]RZ|& WI3w@^pEujA @vڜSIEX(1BZNUSriܛZpS W@v 'DYLQQTKA)XADZ  VENJCfBAXAXE-I#튿 VMS.BCKO[V9.BIN]RT.OLB;1E;1   K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZE STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME  GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^eV}Gڭf잭fЬSУSУ SУ RSRALCLISTPc|~ERR_MSGЭfPRRALCLSTBPT|~ERR_MSGЭfPЭSTT ЬSУURAЭSУ SQPRxPSCS}cPPRANYCMPRЭSУ SQSORTЬSЭЏcЭfPww 1@.V1.02F_0Y1V1.025-JUL-1994 10:16VAX C V3.2-044vR F_0Y1 F0y1_sort s4 C$V_CTYPEDEFSALCLISTALCLSTBERR_MSGANYCMPQSORT  F0Y1_SORT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPES STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRS TDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSI ZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOM E GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS/P^eY)X}Gޭi잭iЬRТRТTRTALCLISTPb|~ERR_MSGЭiPTTALCLSTBPS|~ERR_MSGЭiPЭRSS ЬRТWT_ЭUХ URSCQ.PChP@U } ХUPSS CQANYCMPTЭRТ RQSORTЬSЭЏcЭiPww 1Ю2.V1.02F_0Y0V1.025-JUL-1994 10:16VAX C V3.2-044P<^eYGZ)[}j}j}j}j}j}jiĞiЬPPNP1P?PЬRТRТVVSxSS8SVRRS,VRRS~ BLKRESERVEP|~ERR_MSGЭiPSЬRТcRVALCLISTPb|~ERR_MSGЭiPVVALCLSTBP|~ERR_MSGЭiPЭRЭ Т V1x|TSЭREc1ALCLISTXALCLSTBWEkS1PЭRC1R hPb|~ERR_MSGЭiPgP|~ERR_MSGЭiPЭPЭؠР ЭRТ PЭR} ЭRТ PЭR}$TPTxPPЭRТ R@PЏ`ЭЭRТ1aS1JUU SЭREc1%ѬTREFCMPVЭRТ RQSORT1VTVALCMPVЭRТ RQSORT17ЬRТTSRTbRSALCLISTPb|~ERR_MSGЭiPSSALCLSTBP|~ERR_MSGЭiPЭRЭТ S1ЭTФ TQRUЭTBeKPBkP,ЭT@ЭT} ЭT}ЭTФ PRR UЭTBeѬ!TRCMP3S~ЭRТ RQSORT7TVCMP4S~ЭRТ RQSORTݬ~R F_0Y0 F0y0_sort s C$V_CTYPEDEFSTVCMP4TVALCMPTREFCMPTRCMP3ALCLISTALCLSTBIRUNERRERR_MSG BLKRESERVEQSORT  F0Y0_SORT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLT1VV VMS.BCKO[V9.BIN]RT.OLB;1E;1   ALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_S TATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATIC SMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS9IRUNERRЭiPЬ SЭЏcЭiPFPww 1".V1.01F_0YV1.025-JUL-1994 10:17VAX C V3.2-044P^eYGZ)[}j}j}j}j}j}jѬЬRDEREFЏլ蟼DEREFЏiiˏ_RR1ˏPPP1sPJ?P߭ DEF_C_INTPe~ERR_MSGЭiPЭPPP1?PЭRТVVSxSS8SVRRS,VRRS~ BLKRESERVEP|~ERR_MSGЭiPRЭbRVALCLISTPb| ~ERR_MSGЭiPVVALCLSTBP|~ERR_MSGЭiPЭRЭԢ Т V1t|TSЭREc1ALCLISTXALCLSTBWEkS1PЭRC1RhPb|~ERR_MSGЭiPgP|~ERR_MSGЭiPЭPЭܠР ЭRТ PЭR} ЭRТ PЭR}$TPTxPPЭRТ R@PЏ`Э̠ЭRТ1aS1JUU SЭREc1%ѭTREFCMPVЭRТ RQSORT1RTVALCMPVЭRТ RQSORT13ЭSTRSbRTALCLISTPb|~ ERR_MSGЭiPTTALCLSTBP|~ERR_MSGЭiPЭRЭԢТ T1ЭUХ URSVЭUCfKPCkP,ЭU@ЭU} ЭU}ЭUХPSS VЭUCfѭ!TRCMP3T~ЭRТ RQSORT7TVCMP4T~ЭRТ RQSORTݭ~IRUNERRЭiPЬ SЭģЏcЭiPЭRТTRTALCLISTPb|~ERR_MSGЭiPTTALCLSTBPS|~ERR_MSGЭiPЭRSS ЭWT`ЭUХ URSCQ/PCkP@U } Х UPSS CQANYCMPTЭRТ RQSORTЬ SЭЏcЭiPЭSУ SУ RSRALCLISTPc|~ERR_MSGЭiPR F_0YF0y_sort6 s  X  C$V_CTYPEDEFSDEREFTVCMP4TVALCMPTREFCMPTRCMP3ALCLISTALCLSTBIRUNERRERR_MSG DEF_C_INTCPLISTANYCMP BLKRESERVEQSORT F0Y_SORT6$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TY PTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS( RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2 MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINS NOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER  KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSTRRALCLSTBPT|~ERR_MSGЭiPЭSTT ЭURAЭSУ SQPRxPSCS}cPPRANYCMPRЭSУ SQSORTЬ SЭЏcЭiPЭRТSS~ CPLISTP|~ERR_MSGЭiP{# VMS.BCKO[V9.BIN]RT.OLB;1E;1 ) ANYCMPSЬ RТRТ RQSORTЭiP蚏s~ERR_MSGЭiPPPf%ww PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPN ULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHIC SNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP<^ЬRRUЏT-RЏURTPRR~IRUNERRPЬ SRЬЏcbPPѬUѬT~ERR_MSGPwwF_16F_160F_17F_170F_18F_180F_19F_190F_1AzF_1A0sF_1BmF_1B0eF_1C 1.V1.01F_0XV1.025-JUL-1994 10:17VAX C V3.2-044R F_0XF0x_seqP s]  C$V_CTYPEDEFSDEREFIRUNERRERR_MSG DEF_C_INT |F0X_SEQP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSO URCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAP HICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|$^eTѬЬRDEREF PЏլ䟼DEREFЏdܞd߭ DEF_C_INTP䚏e~ERR_MSGЭdP߭ DEF_C_INTP욏e~ERR_MSGЭdPЭRRVЏU4PRЏVRUPRR~IRUNERRЭdPЬ SRЭЏcbЭdPPЭdѭVѭU~ERR_MSGЭdPww$\ VMS.BCKO[V9.BIN]RT.OLB;1E;1 Q  1j.V1.02F_0W0V1.025-JUL-1994 10:18VAX C V3.2-044_R F_0W0 F0w0_runerr9 s C$V_CTYPEDEFSIRUNERRERR_MSG F0W0_RUNERR9$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_ TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST (BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTR LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSQP^լ ݬ ~IRUNERRլ ݬ ERR_MSGݬ ERR_MSGww  F120_MOVE F12_MOVE F130_POS F13_POS F140_TAB F14_TAB F150_CENTER F15_CENTER F160_DETAB F16_DETAB F170_ENTAB F17_ENTAB F180_LEFTF18_LEFT 1/.V1.01F_0WV1.025-JUL-1994 10:18VAX C V3.2-044R F_0W F0w_runerr^ sN C$V_CTYPEDEFSDEREFIRUNERRERR_MSG CNV_C_INTMALLOCFREE | F0W_RUNERR^$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNO NUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLIST ARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQ UALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT  GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|0^eVѬT+RxRRR~MALLOCPT<1~ERR_MSGPRެURe"SxRP@xRP@cDEREFRReլDEREF PЏRRSSSfddf߭ CNV_C_INTP'e~ERR_MSGdfPTP TFREEPխ'ݭ~IRUNERRdfPTP TFREEPѬ%ݭERR_MSGdfPTP TFREEPݭERR_MSGdfPTP TFREEPww 1.V1.02F_0V0V1.025-JUL-1994 10:18VAX C V3.2-044_R F_0V0 F0v0_nameF s C$V_CTYPEDEFSGET_NAMEERR_MSG F0V0_NAMEF$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_T}M VMS.BCKO[V9.BIN]RT.OLB;1E;1 H  YP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST (BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTR LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMS_P^o<~ERR_MSGPGET_NAMEP |~ERR_MSGPPww" 1/V1.01F_0VV1.025-JUL-1994 10:18VAX C V3.2-044yR F_0VF0v_name s9  C$V_CTYPEDEFSGET_NAMEERR_MSG F0V_NAME$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP# REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK$ _LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_D% MPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZE& TEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR'  GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլ}Џb잭bˏ/PPo~ERR_MSGЭbPo<~ERR_MSGЭbP GET_NAMEP|~ERR_MSGЭbPЭbPww) 1P/V1.02F_0U0V1.025-JUL-1994 10:18VAX C V3.2-044VR F_0U0F0u0_ord? s C$V_CTYPEDEFSERR_MSG F0U0_ORD?$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP* STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPA+ RCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR'Z VMS.BCKO[V9.BIN]RT.OLB;1E;1 "+ , MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUIL- TINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSKP^ЬP``~ERR_MSGPЬQЬPPP2PЏaPww/ 1"/V1.01F_0UV1.025-JUL-1994 10:19VAX C V3.2-044mR F_0UF0u_ord s.  C$V_CTYPEDEFSDEREFERR_MSGCNV_TSTR F0U_ORD$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP0 REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LE1 VELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMP2 NULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND3  STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR4 GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREF ЏbbCNV_TSTRPg~ERR_MSGbP~ERR_MSGbPЬ QPP2PЏabPww6 1g74/V1.02F_0T0V1.025-JUL-1994 10:19VAX C V3.2-044R F_0T0 F0t0_ishift) sN  C$V_CTYPEDEFSBIGSHIFTERR_MSG  F0T0_ISHIFT)$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESST7 R_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD8 SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE9 K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZ: ESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME\J$ VMS.BCKO[V9.BIN]RT.OLB;1E;1 q: ;  GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSCP^ЬRˏbPPbe~ERR_MSGPЬPРSЬQˏaPPS СT;S7SPxPPTP* BIGSHIFTP |~ERR_MSGPPS Ь PԠЏ`PS$Ь QЬPՠRRRЏaPSЬ QxSTЏaPЬPՠЬ RSQQ PQPTЏbPЬ RSSS QTPSQPPPЏbPww= 1?/V1.01F_0TV1.025-JUL-1994 10:20VAX C V3.2-044P<^eTѬЬPDEREF PЏլ쟼DEREFЏd䞭d쟭CNV_INTP욏e~ERR_MSGЭdPCNV_INTPe~ERR_MSGЭdPˏPPe~ERR_MSGЭdPЭSˏPPS ЭUCS?SPxPPUP2 BIGSHIFTP|~ERR_MSGЭdPЭdPS Ь PԠЏ`ЭdP> S$Ь PխRRRЏ`ЭdPSЬ QxSUЏaЭdPխ Ь RSQQ PQPUЏbЭdPЬ RSSS QUPSQPPR F_0T F0t_ishift s}  C$V_CTYPEDEFSDEREFBIGSHIFTERR_MSGCNV_INT < F0T_ISHIFT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_? ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATEND@ STATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTA KYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESB ESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPЏbЭdPwwD 1KM/V1.01F_0SV1.025-JUL-1994 10:20VAX C V3.2-044bR F_0S F0s_imagec s!  C$V_CTYPEDEFSDEREFGETIMAGEERR_MSG  F0S_IMAGEc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPE PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELF STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNUG LLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND SH TARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSzP^eRլDEREFЏb잭b GETIMAGEP|~ERR_MSGЭbPЭbPwwd  VMS.BCKO[V9.BIN]RT.OLB;1E;1 I  F0Y_SORT  F0Z0_SORTF  F0Z1_SORTF  F0Z2_SORTF  F0Z_SORTF F10_TYPE  F110_VARIABLE  F11_VARIABLEa 1գ0V1.0M2K_050V1.025-JUL-1994 10:29VAX C V3.2-044iR K_050 K050_dateline s# _ C$V_CTYPEDEFSERR_MSGALCSTRGETITIMESTRLENSPRINTF  K050_DATELINE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYL 1pH9Y/V1.01F_0RV1.025-JUL-1994 10:20VAX C V3.2-044yR F_0RF0r_icom s9  C$V_CTYPEDEFSDEREFBIGSUBERR_MSGCNV_INT F0R_ICOM$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPM INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDN SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_O MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZEP STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOMEQ GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb잭bCNV_INTPe~ERR_MSGЭbPˏPP>Џ蟼 BIGSUBP|~ERR_MSGЭbPЭbPЬ PҭЏ`ЭbPwwS 1Jc/V1.01F_0QV1.025-JUL-1994 10:21VAX C V3.2-044R F_0QF0q_ixor sI  C$V_CTYPEDEFSDEREFBIGXORERR_MSGCNV_INT F0Q_IXOR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPEST STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESU FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTV VALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRW STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAX PHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS?P^eRѬЬPDEREF PЏլ쟼DEREFЏb䞭b쟭CNV_INTP욏e~3 VMS.BCKO[V9.BIN]RT.OLB;1E;1 :.X ERR_MSGЭbPCNV_INTPe~ERR_MSGЭbPˏPPˏPP2 BIGXORP|~ERR_MSGЭbPЭbPЬ PͭЏ`ЭbPwwZ 1 t/V1.01F_0PV1.025-JUL-1994 10:21VAX C V3.2-044R F_0PF0p_ior sI  C$V_CTYPEDEFSDEREFBIGORERR_MSGCNV_INT F0P_IOR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPES[ STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESF\ IRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALU] EK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTA^ TSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHIC_ SHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS>P^eRѬЬPDEREF PЏլ쟼DEREFЏb䞭b쟭CNV_INTP욏e~ERR_MSGЭbPCNV_INTPe~ERR_MSGЭbPˏPPˏPP2 BIGORP|~ERR_MSGЭbPЭbPЬ PɭЏ`ЭbPww F_0Y1 F_0Y2 F_0Y3 F_0Z F_0Z0 F_0Z1 F_0Z2 F_10 F_11 F_110 F_12 F_120 F_13 F_130 F_14 F_140F_15F_150b 1@/V1.01F_0OV1.025-JUL-1994 10:21VAX C V3.2-044R F_0OF0o_iand sI  C$V_CTYPEDEFSDEREFBIGANDERR_MSGCNV_INT F0O_IAND$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESc STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESd FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTe VALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRf STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAg PHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSBP^eRѬЬPDEREF PЏլ쟼DEREFЏb䞭b쟭CNV_INTP욏e~> VMS.BCKO[V9.BIN]RT.OLB;1E;1 g ERR_MSGЭbPCNV_INTPe~ERR_MSGЭbPˏPPˏPP2 BIGANDP|~ERR_MSGЭbPЭbPЬ QҭPPЏaЭbPwwi STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPAj RCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRk MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILl TINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTS5P^53}L;4}Lwwn 1pG/V1.01F_0NV1.025-JUL-1994 10:22VAX C V3.2-044YR F_0NF0n_errorclear3 s C$V_CTYPEDEFS F0N_ERRORCLEAR3$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPo STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCp S(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRq MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTIr NSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTS8P^53}L;4}L Pwwt 1 l/V1.02F_0M0V1.025-JUL-1994 10:23VAX C V3.2-044zR F_0M0 F0m0_display s5  C$V_CTYPEDEFSXDISPIRUNERRERR_MSGFFLUSHFPRINTF  F0M0_DISPLAY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESu STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESv FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENyϕ[l `^MD\w}~_NW_](ƫ 1@i&xsTq=n vvݷ&eWe~FRD"_'ٴ F0YC'd*p&<= @bWC>j H Ɍ_.#}%@=IPuoo\E K'ILTDMAILXU bVE\^Bd_C]MZ l OQK:'@lCSVSvOW_g B. @MFWIMCT[I I MGBVF9 sO_Mx?4 ^E!S^MTjOI4Z0n[OIE\L օNRD +\@mٰS3]) ]K _] ^F)E67XW} xIJtg]{ FZ i%Zݷ?MiKQI8}i!Z57 lRfX fPbB' YYݼ_.{LJH‡AI8?G/v9l4x K$U%AWTK[8( P_WM箭U ND X O o_\HUCMVZZU&^ VEx\WXIOC^KCVEAM'+hVYDX[VTMm O\t1VuBS]m `SAU^@ V RAOE WtRHQTLK\TEZVXB BYbXEqZS \H GUWP M|A \ J5[P_ * @9cf,M޿A;m' Q@W DggF S >ZC\YMT@QU ]_ _@JORBLY_ϰ㜮IX ȧLCrj,t8l$);鿎CFu@Vn\QR ŹREqy-Rh%q*WG ABL _@G_{ph!gۣ]]F$ UI\l EM_U] YGV@__IH' [B]HSNE[WWY]GK_]E _LFKFBG@GU c6GR^V5!GVuEϽ7 &A#LO4ѴWIQG-jTOOWEOQCF FEdBT^   ~ B[V@FIA _E[@ CSIPB A@UZ QHw@ONYSwWPJDCFGBM[ELɯ[VQ^\2KG^M/NPAtV AV_V ]T^'V DuHSBM\QVVhOArWUVTOA^^FJV(DͼSPWyUKS\sՓ+]I)LRUBpeS Y]m9\ZF%"]/j& ,l"wceWR[G& #өEpF Imz†ɰ>u2fqުNZ>^d.+iZX FZ.G 6UAǴJNL??lUes*Ӷy  EUyZ]l%56 ڸOLnJCq.e }0 ^IKƸ1s&\X8oUWSdP?A*>:Hp[Ɉ]DG+;'ݨs A݇2T%_1KWִ5|[|CZ[+X_BDпB]҅y %dXBT Wa>LY<FKU]\U9gj]g| ޸ ت ڴ. ^Ȯ jI>i& <  OK)B~vsNM?4T߻l-Bfgggd2*|U/EeU` g@/m$`$H6pRƑs`!±FfZsc]tT̾^U!~Y4 _A֟ @iwrAON頶QN-DhLA_BEòSSRuFORYW r(P^LCz`@HLN 4XR L-:CڤQI L Fv`{-[EK[< H S\ŶvCgFԖyͽ^'DYU-m~E0(PYQԺ 8P:G{2 BdM.݉ȜV(_2qs { O~NLΐg%iLUT1GtGa k伫6V T%|nq(_e8u&2y۸wZ^ DPECo__̠iLQ8UP2QPrzT W&g }UK  %PSV@QF=v9Z‣Eפ=|X LA<^ae8^[qOsNbڴfQ*:Ztx[y NRA ZMRfӖUӧY#}bE@ uA^~fPNFFLP EYCD Zx(Gn6[U*NCE.TiB %ON\^A]1SIDmuU>yC] UT5TJ \P  8U\y @^Ӡve& >S-M -F;NM#ʬJe7B!Ͳhog_w:DW(K?Yj ^4W7Z NKWҵ'RӼE}\U^KJUDhC - ٴު 8ܽNYA$QiX A -.D`̳g PQ_7T XSYNi"_WGL4Al R^ EոIXXFGV e˙ia6yx6IWo{Q FFQǒiD#h?֑R^-VĿ7v4"i7@K&p@҉կA A  Vh8m_&F9]!݅F%!}WzD̻GDO7G DʧR껷8<]\x^vAT sT|MS;%WM5:tQ]TBL_iT^ vi2 x qM梸\AO\KEXग़D Vr⽟IޝgADXYS@`qҫ(}TIARP"@3HPIO+!3URVZTFWD_8षL EMSR]BBAHE_X^UG_ ^ C:}T9:A@WڠW ]XY _G>T BRYMF5 ĭ [RSGCPU_w\<9WqYCUBORt,=%UPЋY shF"5CYE[-1c=1ՙƓ&7~de0ހ&;Yx\S CL;y$ş&$yTӄb"j2eE 5 JGZ2Y#?Ԝ?M(*/UU[nȧOà ) tjnPQ ^$= YY20̡LǨG{܃e[CDB^U^{ƾDj*/VGCeF1C “ KD0J[S1G7" ֨A ~X|^ @B: i4Z8IrP[ec_QqQLDMܒMc(g^ ; Dlz6(>~XWIdR #ZWEA JSY_)v- NKNT))W VMS.BCKO[V9.BIN]RT.OLB;1E;1 2v w TVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRx STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAy PHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTSPco-expression_%ld(%ld) P^2To<~ERR_MSGPЬQСPРSa~ERR_MSGPЬRR~IRUNERRPR**ФPݠݠSFPRINTFSFFLUSHSݬ&jXDISPP<1~ERR_MSGP}L Pww{ 10/V1.01F_0MV1.025-JUL-1994 10:23VAX C V3.2-044Pco-expression_%ld(%ld) P| ^eT2U*VѬЬPDEREF Џլ蟼DEREFЏdd߭f DEF_C_INTP蚏e~ERR_MSGЭdPѭЏ8#Pѭi~ERR_MSGЭdPo<~ERR_MSGЭdPЭPРS~ERR_MSGЭdPЭRR~IRUNERRЭdPRf| fХPݠݠSFPRINTFSFFLUSHSݭ&jXDISPP<1~ERR_MSGЭdP}L ЭdPR F_0M F0m_display so  C$V_CTYPEDEFSXDISPDEREFIRUNERRERR_MSG DEF_C_INTFFLUSHFPRINTF | F0M_DISPLAY$CODE$DATASTDINSTDOUTSTDER} R_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTAT~ BASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN  K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTSww  F0W0_RUNERR  F0W_RUNERR F0X0_SEQ F0X_SEQ  F0Y0_SORT  F0Y1_SORT  F0Y2_SORT  F0Y3_SORT 1/V1.02F_0L3V1.025-JUL-1994 10:23VAX C V3.2-044R F_0L3 F0l3_copy sH C$V_CTYPEDEFSHSHRINKHMAKEALCTELEMERR_MSGMEMCOPY  F0L3_COPY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPܮ VMS.BCKO[V9.BIN]RT.OLB;1E;1 D  BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE  K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZES TATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDO WN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP4^eZ)[}G}G}G}G}G٭j̞jЬRТЭRݢ ~ HMAKEP|~ERR_MSGЭjPЭTЭSУЭTЭSУ ЭTЭS}88RЭSB/ЭSBSݣSЭSBMEMCOPYRR  ЭSBWSЭRGc1ALCTELEMYPGkVvRbSЭRFcխYiPX|~ERR_MSGЭjPR(hЭS ЭRXFXЭRТRXbSЭRТcխVWW SЭRGc1jЭSգ RѣR SHSHRINKЬRЭЏ bЭjPww 1h/V1.02F_0L2V1.025-JUL-1994 10:24VAX C V3.2-044SR F_0L2 F0l2_copy6 s C$V_CTYPEDEFSERR_MSGCPSET F0L2_COPY6$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEX P_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS (LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSFP^ЬQСPݠaCPSETP |~ERR_MSGPPww 1/V1.02F_0L1V1.025-JUL-1994 10:24VAX C V3.2-044fR F_0L1 F0l1_copy s$ C$V_CTYPEDEFSALCRECDERR_MSG | F0L1_COPY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPP ROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLI ST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTR LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIP6p VMS.BCKO[V9.BIN]RT.OLB;1E;1   MESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^eV}Gԭf잭fRЬPРbЭPР PР UPUALCRECDPT|~ERR_MSGЭfPSЭPRUPUPP}UPUPЬPTЏ`ЭfPww 1/V1.02F_0L0V1.025-JUL-1994 10:24VAX C V3.2-044OR F_0L0 F0l0_copy s  C$V_CTYPEDEFSERR_MSG F0L0_COPY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS (RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINS NOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS P^{~ERR_MSGww 1ɦ/V1.01F_0LV1.025-JUL-1994 10:24VAX C V3.2-044P<^eZG[}k}k}k}k}kլDEREF ЏjĞj } ЭjPˏPPP1vb?PRЭbЭRТ RТ VRVALCRECDPW|~ERR_MSGЭjPUЭRTVRVRP}VRVRЬ RWЏbЭjPЭRݢ CPSETP|~ERR_MSGЭjPЭjPЭЭRݢ ~ HMAKEP|~ERR_MSGЭj PЭTЭSУЭTЭSУ ЭTЭS}88RЭSB1PЭSBSݣSЭSBMEMCOPYRR  ЭSBWSЭRGc1R F_0LF0l_copy$ s    C$V_CTYPEDEFSALCRECDHSHRINKDEREFHMAKEALCTELEMERR_MSGCPSETCPLISTME MCOPY F0L_COPY$$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLT ALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT  K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT  COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_ STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSQ VMS.BCKO[V9.BIN]RT.OLB;1E;1 7 DRAWOPSWDSPLYS CURSORSYMSALCTELEMYPG)VvRbSЭRFcխYiPX|~ERR_MSGЭjPR(hЭS ЭRXFXЭRТRXbSЭRТcխVWW SЭRGc1fЭSգ RѣR SHSHRINKЬ RЭآЏ bЭjPЭR~ CPLISTP|~ERR_MSGЭjPЭjP} ЭjP{~ERR_MSGЭjPoPڒ1Xww 1`/V1.02F_0K0V1.025-JUL-1994 10:25VAX C V3.2-044]R F_0K0 F0k0_collectY s C$V_CTYPEDEFSCOLLECTIRUNERR F0K0_COLLECTY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_T YP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST (BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTR LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSqP^լݬ~IRUNERRPЬPPP~IRUNERRPݬݬCOLLECTP }L PPww 1Z/V1.01F_0KV1.025-JUL-1994 10:25VAX C V3.2-044R F_0K F0k_collect sK  C$V_CTYPEDEFSDEREFCOLLECTIRUNERRERR_MSG DEF_C_INT  F0K_COLLECT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TY PS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTAR GPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVEN TSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GR APHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSJP$^eRѬЬPDEREF PЏլ䟼DEREFЏbܞb߭ DEF_C_INTP䚏e~ERR_MSGЭbP߭ DEF_C_INTP욏e~ERR_MSGЭbPխݭ~IRUNERRЭbPЭPPP~IRUNERRЭbPݭݭCOLLECTP}L ЭbPЭbPww< F_0T5 F_0T0. F_0U( F_0U0! F_0V F_0V0 F_0W F_0W0 F_0X F_0X0 F_0Y F_0Y0$W VMS.BCKO[V9.BIN]RT.OLB;1E;1 @;  1`/0V1.0 1O_00V1.025-JUL-1994 10:32 VAX C V3.2-044R O_00 O00_dividen sv C$V_CTYPEDEFSDEREFBIGDIVALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O00_DIVIDEn$CODE$DATASTDINSTDOUTST 1 t0V1.02F_0J0V1.025-JUL-1994 10:25VAX C V3.2-044VR F_0J0 F0j0_charB s C$V_CTYPEDEFSIRUNERR F0J0_CHARB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(L PARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBU ILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSNP^ЬP PP~IRUNERRPЬQˏP@aPwwR F0Q_IXORK F0R_ICOMC  F0S_IMAGE5  F0T0_ISHIFT<  F0T_ISHIFT( F0U0_ORD. F0U_ORD  F0V0_NAME! F0V_NAME 1q0V1.01F_0JV1.025-JUL-1994 10:25VAX C V3.2-044oR F_0JF0j_char s/  C$V_CTYPEDEFSDEREFIRUNERRERR_MSG CNV_C_INT F0J_CHAR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSI ZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSI ZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHI CSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb螭b߭ CNV_C_INTPe~ERR_MSGЭbPЭP PP~IRUNERRЭbP QˏP@aЭbPww/J VMS.BCKO[V9.BIN]RT.OLB;1E;1 ݢ  1Q 0V1.01F_0IV1.025-JUL-1994 10:26VAX C V3.2-044`R F_0IF0i_argsp s   C$V_CTYPEDEFSDEREFERR_MSG F0I_ARGSp$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP  COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST( BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCA SELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eRլDEREFЏb잭bѭj~ERR_MSGЭbPЬ QЭPР ЏaЭbPww 1`0V1.01RALCV1.025-JUL-1994 10:26VAX C V3.2-044PPPPPPdeallocation botchP^~MALLOCP\COLLECT~MALLOCP\\<16}LN7PlԬ\P<^UPxPPPSSSTeQá PPSiСT!Pä PPS Ф RS bФTT(ePРTä PPS Ф RS bФTTSCOLLECTPPSTTePР RS bSԢԢ R P^TSdMALLOCPRdCOLLECTdMALLOCPRR<16}LN7PdbԢc\c\+ Ԣ Ԣ$}L,4R+RP^TSdPà \\(hРS Pã \\( У R( bУSS(d\ЬSã \\( У R( bУSS(COLLECTPP(TSd\Ь R( b\QaQ\RPP<^eUT} e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУ SSCOLLECTPЭePTSdPР R bЬЬ} ЭeRP^XYTWUѬ 1hPhPVTeQá PP@xСT&ä PP@Ф R@ bФTT0ePРT'ä PP@Ф R@ bФTT@~COLLECTPP@gTeTФ R@ bRS1PiRiRVTePà RR8hРT Pä RR8 Ф S8 cФTT(eRТTä RR8 Ф S8 cФTT8COLLECTPP8gTeRТ S8 cԣVԣ PRbR P SPP<^UPxPP(PTSeQá PPTgСSã PPT У RT bУSS(ePРSã PPT У RT bУSSTCOLLECTPPTTSePР RT bTެQaPaP@aRP|^VUSxSS8STeSã SSTTCOLLECTPP PeSУ PPPSeQá PPfСSã PP У R bУSS(ePРSã PP У R bУSSCOLLECTPPTSeSУ R bЬfSfS| RP|^LUVPxPP $PRTfQá PPRhСT Pä PPR Ф SR cФTT(fPРTä PPR Ф SR cФTTRCOLLECTPPRTTfPР SR cRެTdЬЬ |PdxPRBR}ebPPdSP^TSdQá PP hСS Pã PP  У R bУSS(dPРSã PP  У R bУSS COLLECTPP TSdPР R bpRP|^eVUЏЬf잭fPxPPPSTeQá PPSkСTä PPS Ф RS bФTT(eP Tä PPS Ф RS bФTTSCOLLECTPЭfPSTTePР RS bSЭ ЬPРT֠TRP<^UPPxPP PRSeQá PPRhСS Pã PPR У TR dУSS(ePРSã PPR У TR dУSSRCOLLECTPPRTSePР TR dRЬЬ Ь ЬTP<^eUT}e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSSCOLLECTPЭe PTSdPР R bԢ} ЬЭRP^eYXЬRЬSVЏi잭ihUå PPSyХV!Pæ PPS Ц TTWS ЦVV(hPРVæ PPS Ц TTWS ЦVV"SRSCOLLECTPЭiPЭRSUV hPР TTWRSUSUPSPSPPSTVhRT ЭWP<^eUT} e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSSCOLLECTPЭePTSdPР R  bЬЬ} ЭeRP ^SRcQá PPhСR Pâ PP Т \ lТRR(cPРRâ PP Т \ lТRRCOLLECTPPR RALCalcactivXX alcbignum alccoexpalccset|alcfileLalchash alcsegmentalclistalclstbalcreal8alcrecd(  alcrefres h alcselem  alcstr alcsubs alctelemL alctvtbl( blkreserve8TRcPР \ l|}L }L\P<^eUT}}e䞭eSdQá PPkСSã PP У R bУSS(dPРSã PP У R bУSSCOLLECTPЭePTSdPР R bЬ Э} }LЭeRP^Pà PPݬCOLLECTPPP>+! VMS.BCKO[V9.BIN]RT.OLB;1E;1 yH  P^XTUWެVfPˏ`RB'RRSPRbSSTTPgRP MТQfTSS  Ь TeСQgPРRTSS  Ь TeТRߨSYSERRgRЬ T` deallocate strreserve7 s   +  C$V_CTYPEDEFSCOLLECTSYSERR BLKRESERVEMALLOC ALCACTIV X< ALCBIGNUM ALCCOEXP ALCCSET |<ALCFILE LALCHASH < ALCSEGMENT |ALCLIST |ALCLSTB ALCREAL 8|ALCRECD ( < ALCREFRESH <ALCSELEM ALCSTR <ALCSUBS ALCTELEM L <ALCTVTBL ( BLKRESERVE ` DEALLOCATE  STRRESERVE?$CODE$DATASTDIN STDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KY WD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALS EGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGS WCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSALCNUM COEXP_SERSLIST_SERSET_SER TABLE_SER$CHAR_STRING_CONSTANTS<^Pà PPݬCOLLECTPPPР PwwBIGSUB BIGTOREALBIGTOSBIGXOR BI_STRPRCBLIMAGE  BLKRESERVEF CHANGE_REGIONSp  CLONE_CONTEXTCMD_LINECNV_CSET CNV_C_DBL CNV_C_INT, F38_GOTORCF3C0_PALETTECHARS F3F_PATTERN F3J0_RAISE F3M_TEXTWIDTH F3Q_WFLUSHGETACTIVEWINDOWBIGCMPBIGDIVBIGMODBIGMULBIGNEGBIGORBIGPOWBIGPRINTBIGRADIXBIGRANDBIGSHIFT PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPm9# VMS.BCKO[V9.BIN]RT.OLB;1E;1   NULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP<^Sq p ~~DRUNERRPp TqTcpT~LOGpPpTcp~LOGgPЬRp~ALCREALPЏbբ<3~ERR_MSGPPww 1$0V1.01F_0HV1.025-JUL-1994 10:26VAX C V3.2-044R F_0HF0h_log se  C$V_CTYPEDEFSDEREFALCREALERR_MSGDRUNERR CNV_C_DBLLOG F0H_LOG$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREE QUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC  K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICS MSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP0^eTSѬЬRDEREFЏլ؟DEREFЏdОd CNV_C_DBLPؚf~ERR_MSGЭdPsp~~DRUNERRЭdPѭGЬ Rp~LOGpP~ALCREALPЏbբ<3~ERR_MSGЭdPЭdP蟭 CNV_C_DBLPf~ERR_MSGЭdPqp~~DRUNERRЭdPqcp~LOGpPpcp~LOGgPЬ Rp~ALCREALPЏbբ<3~ERR_MSGЭdPЭdPww 1X)0V1.01F_0GV1.025-JUL-1994 10:26VAX C V3.2-044R F_0GF0g_atanB sF  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBLATAN2ATAN F0G_ATANB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOU RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPH VMS.BCKO[V9.BIN]RT.OLB;1 U[  ICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP 0^eSѬЬPDEREF PЏլ؟DEREFЏcОc CNV_C_DBLPؚf~ERR_MSGЭcPѭGЬ Rp~ATANpP~ALCREALPЏbբ<3~ERR_MSGЭcPЭcP蟭 CNV_C_DBLPf~ERR_MSGЭcPЬ Rp~p~ATAN2pP~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPww 1 20V1.01F_0FV1.025-JUL-1994 10:26VAX C V3.2-044oR F_0FF0f_rtod s/  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBL  F0F_RTOD$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSI ZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSI ZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHI CSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPIA!h ^eSլ蟼DEREFЏcc CNV_C_DBLP蚏f~ERR_MSGЭcPe4DPfPЬ RpP~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPww 1T70V1.01F_0EV1.025-JUL-1994 10:27VAX C V3.2-044oR F_0EF0e_dtor s/  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBL  F0E_DTOR$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSI ZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSI ZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHI CSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPIA!h ^eSլ蟼DEREFЏcc CNV_C_DBLP蚏f~ERR_MSGЭcPePf4DPЬ RpP~72i VMS.BCKO[V9.BIN]RT.OLB;1  ALCREALPЏbբ<3~ERR_MSGЭcPЭcPww 1P?0V1.01F_0DV1.025-JUL-1994 10:27VAX C V3.2-044zR F_0DF0d_sqrt s:  C$V_CTYPEDEFSDEREFALCREALERR_MSGDRUNERR CNV_C_DBLSQRT <F0D_SQRT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICO NTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSI ZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATIN CRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN  GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP< ^eUլ蟼DEREFЏee CNV_C_DBLP蚏f~ERR_MSGЭePsp~~DRUNERRЭePp~SQRTpPS!~ERR_MSGЭePЬ RpS~ALCREALPЏbբ<3~ERR_MSGЭePЭePww 1H0V1.01F_0CV1.025-JUL-1994 10:27VAX C V3.2-044qR F_0CF0c_exp s2  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBLEXP <F0C_EXP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZE STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP< ^eUլ蟼DEREFЏee CNV_C_DBLP蚏f~ERR_MSGЭePp~EXPpPS"~ERR_MSGЭePЬ RpS~ALCREALPЏbբ<3~ERR_MSGЭePЭePwwgSIKR }rQ cb áu4!_`8sW(<ٖ:$`ZSvgkjqoqžDyRrMIfXss(VdI'5hͿtwe+VKrI㺸~|)(zhܬ nd +T( w{#Y UbhPʴc@ ( .K_(1RW>7ŪT˛8jVTc,g=OzԚKS7q_O2`M U^OK h{2Eޭ\ h2WX+-UkSRϦW#,Ij}I]WҬt?e= A'-"[^ gq V7v b 9wQvO[Izo={g|}YX_@8Fr]4%2*aGLRX <@W_YJ^fCͽV SlYr9iW؋?a*2zdI=@ ve熫04?8w枤i Ag  AHZ.h'mzsjZ(G@e#Z1f󑅢s.H+AL;?R ^  ϶TbGswKWlܼ[Lljh VF.QY֭EѰMv#_A`|(/~F$4S :$ 9=G2< &?#\]S0W5VUKZ] MB}QղSjͯzM*Z(#|JIzrq7<SGAHT" Xq  ^DXC Y#ώoK J[ZG@LDXPPQ@AKA WSI]NLW[]KUAC QQJC缹fꅼ/塩 NuJp 㦬Gr_N]Y\< bONC KW[ ๭ LBK{:ãGtoQ X IO!T W]@ONB6NC# i8q4hFHy^f"COFL;/uCZGH ;  W%VDH`B\_ACs皴A^뺣tWGV JVOI9T^ R E_H@ F_TY[QCf^NUNTOOOHK^PO^H@CZWK 4$X5Ew#e;RP ԫ[F)lxCgAEs3(Wͽ. [`*ϝX K7`- JZKKH.92 VC_~, uDa#7٥ X-8Azn\])=bT ZN8aȖmYV`gQ˾F ا  QAPUDU8y FгMW7FF`T @!W:0ݫƇ\k?ܛ(&dDVDkeHDH+^f m6ȾeڞSPп\7V~EcT:8-@. ӻLR]#KUR0/^M FDQV ZV:vX"O\ŶU Qgtl+xX VI:Ta] {K1Gh^Rk3$>'r pqELtIB8Dzպ@xIiHP+ KW:/3lD(9=!un]c[Uuwco B%[\Ug'Y |Jf.=RCv{Q|L&up[! Sظ OI "49D#7HZNiVU~] DNG'W2~6٬DC+]9Xo*^"T0XM,8mTDANWDIsy'.l@L;T'POٮ>hXٸMQp 6Mv\XJX@^'OhI 8stnV++ɿߩU=OCs,2ڶL2 ik]J[{PV 5Nt"~K v+g VX= kCWX|M T\oO<<=]5Vԣ{EKUޙd8oPώR^̚:_ĕՒN)+Q6 S`\G [ًb?fƞꅽgrϕy AjxC"-hgw! XH nH<Ncph_/] [0<)I]&.ؙ|:6a 2:.*<pY5+KLM'|ȼuI߅UѯY{fDiH) $siF]bZ{3I˚:ue]Kf-H G"|196IX ~GZgZ7zvb-]nm'Mͧ[BP$ ,|]TJd@U,k&ˋwpGu@Cz>eb=ZяN, ^i8]O,kYQ?i)iX [7!冰 / pi1CABy7t91 S#"֑n= "NYM6o\.&4\pcE)0v WOn&P@ucShH/Ԯr8t;u GcJbMM~@JNW4.Pi!0=!M~U3qO<# P`6!Xf 5Iwo UIǧ)! ip=y7wAV8cXjyvI\ с䏦ЁP~ٴv`t}Vai 9aiuF.{"M^ճt":&X|Z OC[rT_O <ߺ'-S\[C_AIkbA R R[SMbO'ߕGV5=ƙE2Rz n^G60@tvR2HJBYZ=7CpC!#^1z"S>x3!o҅MJ0=R8 |Y TV:$u(#^ՂX+~/7A^/YTNEO8[,my#fϩBꤿYKM?ѻEYW4dΞ'^KDKfգtHvLƊH2nfw ʲA暨#^je'V 4 ܹi[XGt AQeM5MHȈ0UR_E_es%B( ۤMSF^L7s H0aP\ ́.8K VSfq{q[9 [6>ͻ*C>VVp֦5S1 |NnTK n^L(kMYWVڿIL0 MXF7 \Aؿ We`'rxAҦwwN7y pN̶AVFI;TShXɠX  Gh1Zf"gtQd:gԺ<3 -tCɬOE`0N5n":𣿙_0]8[MGP0K1P[.:؛'6'I]'Z]@\ߪ=Z HEyTEMvMsӻ ^A M (@S &s RFȦ @>.`Fx@PLO KbHkQb!ޱQZqZئTcTy Pn2z D/WU  o=]]=FGrEpD]ETW8fR_&Ƥ^\AhACO{MNz &Ej¯_OHA!Qҷ@ ^_U][. _%ձT-EpWDC%ڧz]  Bd4HQ rS RWDPVO]_2Byz (&[h;'=kO"w4R޻,߹cXGCR_W~Dc;YXH  PJ O 6 Qq Rǭ̥W@ _H#C_D$KwJ^MW\A$JfP^NA yQCm3Kn !W/ ţ Hߦ~L۴OZ>]rw[Q(!6L[DG#5Uׁ"X ]Ké.z*JC]\E(NPx_8A2m KQG$EVJpМ4 WV~ |Z/JK ʳ=" HGEQSRb&IJOeQW[w4\c7Xj6!8f0BXv|;Az38]tf8¤s*4paᢽ^ DS#:tΖ&[ XrB+L<CviY *J{ E#*|MH 5M%,3eöNCf TVa/z#jqO}\FLT[U8{4%3~/GMVL\LAYTcM[M0`hon>3kD@JP\F@Q>mauqIQZO3z~Bֳ?(b0f7Gx-wni,\_+&IpcUۀ]MIjcɭWm)2.RKlZou(fꬴg\S hՁ]\Rsj ixtSVOˇvuML6C_s24 1^$^Mu$u}@ ]jK6uqi ~t=-byO[$=\@TCD0rf`g2*Y!ATKWJBhm#e&uT~W  R\ FịECaV K5FA CiTU.iXG ^|A7YSM9LKCL^K EJk5XLjGPVxߎ-  N~_}V! \o8ë0EA_5"G(C]XLBT \X2aKnDq愯 Ep^]\oz"l*vIQ[JϠvLd2\v$ U_~HK=Di] VMS.BCKO[V9.BIN]RT.OLB;1    F0L3_COPY F0L_COPYs  F0M0_DISPLAYz  F0M_DISPLAYh F0N0_ERRORCLEARm F0N_ERRORCLEARa F0O_IANDY F0P_IOR 1rKQ0V1.01F_0BV1.025-JUL-1994 10:27VAX C V3.2-044zR F_0BF0b_asin s:  C$V_CTYPEDEFSDEREFALCREALERR_MSGDRUNERR CNV_C_DBLASIN <F0B_ASIN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICO NTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSI ZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATIN CRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN  GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS)P< ^eUլ蟼DEREFЏee CNV_C_DBLP蚏f~ERR_MSGЭePpPqPqPpP~~DRUNERRЭePp~ASINpPS!~ERR_MSGЭePЬ RpS~ALCREALPЏbբ<3~ERR_MSGЭePЭePww 1X0V1.01F_0AV1.025-JUL-1994 10:28VAX C V3.2-044zR F_0AF0a_acos s:  C$V_CTYPEDEFSDEREFALCREALERR_MSGDRUNERR CNV_C_DBLACOS <F0A_ACOS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICO NTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSI ZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATIN CRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN  GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS)P< ^eUլ蟼DEREFЏee CNV_C_DBLP蚏f~ERR_MSGЭePpPqPqPpP~~DRUNERRЭePp~ACOSpPS!~ERR_MSGЭePЬ RpS~ALCREALPЏbբ<3~ERR_MSGЭePЭePww? VMS.BCKO[V9.BIN]RT.OLB;1 '  F_0L1 F_0L2 F_0L3z F_0Ms F_0M0m F_0Nh F_0N0a F_0OY F_0PR F_0QK F_0RC F_0S 1p]0V1.01F_09V1.025-JUL-1994 10:28VAX C V3.2-044qR F_09F09_tan s2  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBLTAN <F09_TAN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZE! STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME" GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP< ^eUլ蟼DEREFЏee CNV_C_DBLP蚏f~ERR_MSGЭePp~TANpPS"~ERR_MSGЭePЬ RpS~ALCREALPЏbբ<3~ERR_MSGЭePЭePww$ 1cd0V1.01F_08V1.025-JUL-1994 10:28VAX C V3.2-044nR F_08F08_cos s/  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBL MTH$DCOS_R7COS F08_COS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPES% STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZES& FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTV' ALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCR( STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAP) HICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^eXլ蟼DEREFЏhh CNV_C_DBLP蚏f~ERR_MSGЭhPpP MTH$DCOS_R7Ь RpP~ALCREALPЏbբ<3~ERR_MSGЭhPЭhPwwh VMS.BCKO[V9.BIN]RT.OLB;1 $* \ 1e 1V1.002O_151V1.025-JUL-1994 10:36VAX C V3.2-044[R O_151 O151_union` s   C$V_CTYPEDEFSALCCSETERR_MSG  O151_UNION`$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP, 1Uj0V1.01F_07V1.025-JUL-1994 10:28VAX C V3.2-044nR F_07F07_sin s/  C$V_CTYPEDEFSDEREFALCREALERR_MSG CNV_C_DBL MTH$DSIN_R7SIN F07_SIN$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPES- STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZES. FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTV/ ALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCR0 STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAP1 HICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^eXլ蟼DEREFЏhh CNV_C_DBLP蚏f~ERR_MSGЭhPpP MTH$DSIN_R7Ь RpP~ALCREALPЏbբ<3~ERR_MSGЭhPЭhPww3 1 @udq0V1.04RSTRUCTV1.025-JUL-1994 10:28VAX C V3.2-044PP^ЬP֠Ь QaЬPa<^eU}G}Ge䞭eSЬRТcSЭRТ cì T(ЭRѬ ЭP  QР aЭPѬ TNެSЭQ PPcc¡cЬRxcP@P}`b֬ ЭPѬ   QР aTЭ<^eT}G}Gڭd䞭dì UUSUURSALCLISTPbЭdPRSU4 ALCLSTBPbЭdPЭPЭР ݬݬ ЭPݬCPSLOTSЬQЏaЭP,^eVGX)W}h}h}h}hfԞfݬ ЬRТR ~ HMAKEPЭfPЬSУTЭSФЭSФ RB'BSݣSЭSBMEMCOPYRR BSTЭRCd1ALCSELEMUPCgRnTdPЭTB`խQЭPݠ ePTЭfPЭQ ЭPTBTЭPРPT`TЭPРdխRSS ƞTЭRCd1rЬRЏ bЭЭSգ RѣR SHSHRINKЭ5 ԦP|^eV)S}Gf잭fլ  PPPRBcPPRR  BcPPxRѬ  @UT P8UTRP(PQUQxPPPPxPPPQŬ TPPQ~ BLKRESERVEPЭfPݬALCHASHPЭfPR$Bc ALCSEGMENTPQЭfPЭPQBRЭR ЭP^ЬQЬTQSS SSxSRBRRPPxSRBP@)SSSSQS@RCP<^ެTdScЬRТ UdSޣ RbԢ(R UݬݬHGNEXT^)XЬSެVfRѣ 1Ь SУRѢrУW6 UfSޣ8TURxRRR fRТWdT UЬSЬTФ cRУSBRC Ь R*ѢW$Ь RТ Ь RѢW Ь RТ լ 1ެTW֧gRѧBhdRԢbb  bSЬRCPdUeQЬSХPAS@ eRB VZdSVQQQVPPB4PPQԬ 3Q.Ь Q(dPѡB4PЬ PРѬ Ь Q dPѡB4RB Vլ 1QЬ P^e[)Y}Gϭk잭kRЬbЭRբ4ЭkЭR TT ALCSEGMENTPZЭkXUЭREWXPSEiBCRXVXVQbP"ҠVVTV PbRPaQРPabS7 SEiUЭREWЭRZEЭSx RR Э^eZ)X}Gj잭jRЬbYЭRIYY  ЭRIYЭRբ1 SѢS1RRSTRUCT addmem$$cpslots cplist cpset $hmake  hchain\|hgfirst@ hgnextt 0hgrowhshrink@ Pmemb s 8        C$V_CTYPEDEFSHCHAINCPSLOTSHSHRINKHMAKEHGNEXTALCHASH ALCSEGMENTALC9 SELEMALCLISTALCLSTBEQUIV BLKRESERVEMEMCOPY ADDMEM $<CPSLOTS <CPLIST CPSET $|HMAKE HCHAIN |<HGFIRST HGNEXT 0HGROW HSHRINK PMEMB$CODE $DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP7 VMS.BCKO[V9.BIN]RT.OLB;1 9 : STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(; LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR< MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS= BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN{ GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND > WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPЭSIRWYRYBVЭRFU1PTFhnDRDPЇQP.Q*PѠ PbRРP QbRСQPQPPbRРPQPQbRСQTTFhVЭRFU1{ЭSx ЭRբ SѢS11Эj^Ь UЬXUWXQWSS SSxSRBRRPxSRBP@)SSSSWS@RCSԼcR5ТTTUSPTUݬ EQUIVPSPScRSPww@ 1 y0V1.03RDEBUGV1.025-JUL-1994 10:28VAX C V3.2-044P P???? P from line %d in %sP&subject&P&pos+P&progname5P&window=Pname: unknown event keyword variablebP&randomjP&traceqP&dumpwP&error~Pname: unknown integer keyword variableP[%ld:%ld]Pname: unreferencable static variablePname: cannot determine variable namePL[%ld]P%s.%sPname: invalid structure referenceA (P returned 3P failed <P suspended HP resumed RP; co-expression_%ld gP: jP @ nPreturned xP to }Pfailed to Pco-expression_%ld P%-13s: %4d P : P local identifiers: P P = P P = P P = P global identifiers: P P = P ^լЬQRСPPSPSxSPPRݡaTRACEBKbSݢݢݬݣ ABSPSP^TSdcFPRINTFЬRߤcFPRINTFaB PcPUTSTRc(FPUTCЬP׬P2PЬ P PcOUTIMAGEլ c,FPUTCЬP׬Pc)FPUTCլݬݬߤ cFPRINTFc FPUTCݣFFLUSH΀^Ze[}Gkk&njPРRRSSxSRRbYˏ_PP1ˏPP P1N?PЬP`ު1ЬP`ު&1ЬP `ު+1ЬP`ު51ߪ=SYSERRЬRТR?PRPЬP`ުb1PAPRPЬP`ުj1FPRPЬP`ުq1h<PRPC ЬP`ުw1Lߪ~SYSERR1>PݬЬRݢ1P1 ЭkPЬRТЬSSЭR GET_NAMEЭP~ݠʥ߭SPRINTFcW߭STRLENPXWP~ALCSTRPTЭkPЬPРVTXW`UW UUWޭSRX1RRX1zPЬVˏfP1+ЦUU[.U\%[URRxRR]SBcP}`ЭkPgRURZU_QRURRéRTT ʯSYSERRݩ ABSPRݩABSPRRTxTRB$P}`ЭkPUn4ݩ ABSxPP@PUPnURRxRRB$P}`ЭkPD U;xRBPUP,޼R®UUݩ ABSPUxUUE$P}`bЭkPSYSERR1=PЦˏfUxUUUнPPP1PB?PЭSxRBPPURRRTTգЭPРЭPTՠT߭SPRINTF߭STRLENPSЬRS߭ALCSTRPЭkPS1ЭRPPUU RxUUE(Scݢ ߭SPRINTF߭STRLENPSЬRS߭ALCSTRPЭkPS(ݬݭ!PЭkPSYSERRЭP ^WAVTצsRtSRSTRLENP\E \  R\\ SSRǛdFPRINTF ǨdFPRINTF*RRSRS FPUTCSd|~cd cR\R\j\SЬRRUUxU\\ScRdPUTSTRd(FPUTC&Sݢ ABSP\PR\+S\S\dOUTIMAGER d,FPUTCR\R\d)FPUTCd FPUTCݤFFLUSH ^WAVUצsRtSRSTRLENP\\  R\\ SSRǛeFPRINTF ǨeFPRINTF*RRSRS FPUTCSe|~ce cR\R\j\SЬRF RTTxT\\Sc\ePUTSTR(eFPRINTFj\ݬeOUTIMAGEe FPUTCeFFLUSH ^WAVTצsRtSRSTRLENP\\  R\\ SSRǛdFPRINTF ǨdFPRINTF*RRSRS FPUTCSd|~cd cR\R\j\SЬRRUUxU\\Sc\dPUTSTR3dFPRINTFdFFLUSH ^WAVUצsRtSRSTRLENP\\  R\\ SSRǛeFPRINTF ǨeFPRINTF*G RRSRS FPUTCSe|~ce cR\R\j\SЬRRTTxT\\Sc\ePUTSTR<eFPRINTFj\ݬeOUTIMAGEe FPUTCeFFLUSH ^WAVTצsRtSRSTRLENP\\  R\\ SSRǛdFPRINTF ǨdFPRINTF*RRSRS FPUTCSd|~cd cR\R\j\SЬRRUUxU\\Sc\dPUTSTRHdFPRINTFdFFLUSH<^ݬЬP GETIMAGEPP~ALCSTRPSH PЬPРT`US`T[RU PRRU3]P ^WAVTצЬPР RР$SRSTRLENPQQ  PRQQ SSRǛdFPRINTF ǨdFPRINTFЬRТPSРRRQQxQPPScU*RRSRS FPUTCSd|~cd cRPRP知dPUTSTRЬRݢRdFPRINTFЬ PP# PpP?PgdFPRINTFݬdOUTIMAGEjdFPRINTF;PndFPRINTFݬdOUTIMAGExdFPRINTFP}dFPRINTFЬRݢLjdFI8) VMS.BCKO[V9.BIN]RT.OLB;1 WH I PRINTFݤFFLUSH^RݬSTRLENPQQ  P֬QQ լݬݬ›FPRINTFFPRINTF^TЬRRSRS FPUTCSd|~cd cRPRPP^Y޼nnWЬ R׬ R1rެPUTSTRFPRINTFZOUTIMAGEFPUTC լ1CЬRSТRRTTxTRRSc[ݾɾݾj$Vݫ ABSPR=оUUjVUUjWSWSUU VRnTЬRTЫS?XXjVXXjTRTRXXJ VSnUxSCgUЫR>TTjVTTjUSUSTT VRЬRТWbЬ R׬ R1uXxX~MALLOCPWPPX P@gR RDEBUGtracebkU Xxtraceget_name ctrace< rtrace failtrace strace  atrace  keyrefo8 cotrace| showline\  showlevel: K L xdispd glbcmp' s L  1 C$V_CTYPEDEFSGET_NAMETRACEBKGETIMAGESYSERROUTIMAGEPUTSTRLEXCMPALCSTRMALLOCSTRLENFFLUSHFPUTCSPRINTFFPRINTFABSABSABSFREEQSORTABS TRACEBK GET_NAME CTRACE RTRACE  FAILTRACE STRACE ATRACE 8 COTRACE M L XDISP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCN HARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT KO _ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATP COLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSQ MAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS $CHAR_STRING_CONSTANTS?PPXϡXWQSORTެZjFPRINTFRXcUFPRINTFVUfxBgS]TCdUPUTSTRUfxBgS[TCdUOUTIMAGEU FPUTCRRXFFLUSHWFREEP^мRxP]Q@axRRBaLEXCMP P?kPPn4$TDdwwS 1h@0V1.04KEYWORDV1.025-JUL-1994 10:29VAX C V3.2-044RKEYWORD C$V_CTYPEDEFS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIT ST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENTU K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASV EZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBLW OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROW4 VMS.BCKO[V9.BIN]RT.OLB;1 W AMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSPPwwY 1Т0V1.02K_0H0V1.025-JUL-1994 10:29VAX C V3.2-044PVMSPVMSPcompiledPcompiledPASCII PASCII&Pco-expressions5Pco-expressionsDPenvironment variablesZPenvironment variablespPexternal functionsPexternal functionsPfixed regionsPfixed regionsPkeyboard functionsPkeyboard functionsPlarge integersPlarge integersPmultiple regionsPmultiple regionsPpipesZ Ppipes$Pstring invocation6Pstring invocationHPsystem functionXPsystem functionhPgraphicsqPgraphicszPX WindowsPX WindowsP^TdP-ЬRޤݢSTRLENPbЬRPbPޤP-ЬRޤݢSTRLENPbЬRPbPޤP-ЬRޤ ݢSTRLENPbЬRPbPޤ&P-ЬRޤ5ݢSTRLENPbЬRPbPޤDP-ЬRޤZݢSTRLENPbЬRPbPޤpP.ЬRăݢSTRLENPbЬRPbP[ ĖP.ЬRĤݢSTRLENPbЬRPbPIJP.ЬRݢSTRLENPbЬRPbPl5-R K_0H0 K0h0_features' s C$V_CTYPEDEFSSTRLEN  K0H0_FEATURES'$C\ ODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRING] CURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_E^ RRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STR_ COLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOL` LCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAcATTRIBSDRAWOPSWDSPLYS CURSORSYMS$CHAR_STRING_CONSTANTSP.ЬRݢSTRLENPbЬRPbPP.ЬRݢSTRLENPbЬRPbPP.ЬRݢSTRLENPbЬRPbP$P.ЬR6ݢSTRLENPbЬRPbPHP.ЬRXݢSTRLENPbЬRPbPhP.ЬRqݢSTRLENPbЬRPbPzP.ЬRĄݢSTRLENPbЬRPbPPwwb PINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDc SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEd K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZEe STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOMEf GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS $CHAR_STRING_CONSTANTSPpmPamP%s, %s %d, %d %d:%02d %sP^TGETITIMEЭRR dSR  R PޤSR RS hU VMS.BCKO[V9.BIN]RT.OLB;1 /Nf ݭRݭݭݭݭߤ SPRINTFSTRLENPSSALCSTRPR |~ERR_MSGPЬPRS`Pwwh 1 `40V1.00DEFV1.025-JUL-1994 10:29VAX C V3.2-044P^ЬQa pPݬQ CNV_C_DBL^ЬQa Ь Pݬ Q CNV_C_INT ^ЬScЬ RݬSTRLENPbЬP S CNV_C_STR^ЬQaЬ PЏ`ЬP QCNV_CSET^ЬQa Ь Pݬ Q CNV_EC_INT^ЬQaЬ PЏ`ЬP QCNV_EINT^ЬQaЬ PЏ`ЬP i QCNV_INT ^ЬSc*ЬRp~ALCREALP |~FATALERRЏPSCNV_REAL^ЬRbR DEF def_c_dbl(( def_c_int(P def_c_str<def_cset4 def_ec_int(def_eint4def_int4Pdef_realLdef_str( def_tcset4def_tstr) sj  C$V_CTYPEDEFSALCREALFATALERRCNV_TSTR CNV_TCSETCNV_STRCNV_REALCNV_INTCNV_EINT CNV_EC_INTCNV_CSET CNV_C_STR CNV_C_INT CNV_C_DBLSTRLEN DEF_C_DBL ( DEF_C_INT P DEF_C_STR DEF_CSET DEF_EC_INT DEF_EINT DEF_INT P DEF_REALk DEF_STR  DEF_TCSET DEF_TSTR!$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMl TBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTm K_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL Sn TATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINo E_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS } Pݬ RCNV_STR^ѼЬPЏ`Ь Pݬݬݬ CNV_TCSET^Ѽ } PݬݬݬCNV_TSTRwwq 1_ 0V1.04RWINRSCV1.025-JUL-1994 10:30VAX C V3.2-044PPblackPwhite PRGBi:.5/.5/.5Pؙ?+J @E>xF>f@ffffffPfixed!Pfixed'Pfixed-Pmono2PlucidatypewriterCPtypewriterNPcourierVPsans[PhelveticaePserifkPtimesqP*tPmedium{PdemiboldPboldPdemiPlightP*PiPoPrP*PnarrowPcondensedPnormalPwidePextendr edP*PpP*P-*-%s-%s-%s-%s-*-*-*-*-*-%s-*-*-*P%.*s%d%sPsansPserifPserifPsans Pr C$V_CTYPEDEFS FREE_CONTEXT FREE_WINDOW ALC_CONTEXTFIELDCMP XLFD_SIZE XLFD_FIELDALC_RGBFINDFONT GO_VIRTUAL ALC_CENTRYTRYFONT FREE_DISPLAYXCOLOR POLLEVENT PARSEFONT PARSECOLORALLOCSALLOCSTRCPYSTRCMPMALLOCCALLOCLOGSTRLENSTRNCMPXSETWINDOWCOLORMAPXSETCLs IPRECTANGLES XPARSECOLORXFREEGCXFREEFONTNAMES XFREECOLORS XFREECOLORMAP PmediumPdemiPnormal Piso8859(P0*Padobe(P0^ЬRТSÀVЦnլ լ լ@PѬ ѬѬƀPլ%ø<~ALLOCPøô[ø#ð<~ALLOCPðì[ðެ ZjެYiެXh ^( nݬXCOLOR( حe-O~7R' #I0y_s _tL4Cǀ5YYCf•D[0)R3UR1Z! V `t"TY,!{F<"xN @h2g7"ne' Mb{W SƃmAWq 8c['[ S̶HHϛBxTY#\ kBm$a7B@*}[ UJcKPUh}ɀ]6Ijnar"9MZX:8O\˔vMsJ9诎4F٤33! o6se&([ǮZ:Qn}nᄻljnė.+}n!_wGU"nW~^A`j8~eLp`O:UgQ>4?Y4f7bf j-6=SKoiX#JQG8wΐ~watWܠ%F}1)$˚BG©]w5y08Ȭ$ ["S|Y`l0KjdHd(BPTJ^ l6Sm˟\(֥&O\`|M,o{Y+@()\rXl|'Y=L97o͢)>jrj+ 6({ڢmy`h_8mF1SqY=9-1d-W/}MN/{NPHl('totG7l|wJ'.Sŋ^ɂPn18!"k#5 ? EkGjGݏ#`/9ZABQ:tDmP7mZ1eqX2._dגM0)xY Be91n 1t90EsVFk4bb"eY,Gj ^zq\J+qE箃n#2L]FJ ]'F?R_+BVFX*P~TyCݝ?%&Tc믐L+(N!^w oJ_yXI>q&['w! PBGya~3 DlRf UI9|kMݡ #r.(e]4|s d)5 䗡RUyuRqL+$Uk,s@EźXf@`R{ %t nPMhUZJUAcQR!P 2uݍP˜ o1a ҀsC$;#OAgn+)JƝCoA".N@Wӟw30@V Ud[7r<nb+tmH~rF*|VBO%RMy؞I^ ~@{SǗt @RV`WOh[z 㫔Q~xW<ӯXJF6j>n`zDrlsWCyQ+^ IoOZهz+"AίGzwuv9:̱ rgQTO~($EC@aQykcvbeȮ -M=!GeI͹]ZLŵ :&ENT;sL\V!>I`PBs&N^ZGE1K [|ELۺWuKr3 T@TPs HS QHXDNF+%I8W[ 됨nFݖH8O ~P߁f"USA hI{ í FVG  3][ڋ 4 ف딣QKht TQI]OFM Ga]XcLMSI4W:6{d]AO @CLBBZI>^C^[YQA֝4)[& 9V^vnOe!oЧjxGnwIu$C_Y„%AOh6 qRx"fNّ82SVƄ7,ǰO|HroB<"& y8U/ZirqNl]f#lfsFZb651gGz}`rm9_1KCdiܫ2Q(>6hm\->oV泒q p[a˵o.&ԳwR:Dh_ukN⭫k%5Bfam9P4>r5sysδi7؆@}>/a5hj$2iWo'x>])@'~($ oJ ;?̚:<W[8Z@t>¹0 F@ *?t Tĕ(LiMk\Ԫw6 جs0:9cлnZ ] XvY P'3kc' 14>[td|6ZLWDH^ A9E8ݞx$En ڊ{7vRxc'|#(ȹ>:~ E)eóÇ!j'>ȟ>olOquH,2Ge.)E;GU;+kugB":<>=VܥW`kvآYXB< nNJ/bZ+&p>kFZR5ɋ %(}~Zm!aM~ֆv-_xPn:F;;x^h>b!|M߽,$V&X6?k|Y᪽o0e̒}+.:NEI*cfgF ۫'w _Ocb5tNq+?@kxͭ4tס- zBJש|儉e/QhJsHFZe:HBVW(Z W˄-xhdRAEPέManSsoa/O ֧nSEP5/bЮD(W:Og8aS3ʛ;rN|O%r 2(P_oQ Z(wwr@~圆Nt~Y7H *Ԓz 2=>جA@]GؼlSz/2Vr^CF{ ')B!B>!8s,:Q9BKfO c{&]N;96yک<^cPP:ӿKvMZ413 0J={L w;|yC9xۚH9+nai M/I=f[Ej>DG#LYM<~2o 2Ŀz\V( FIP-hDD ^9=_o/m3%U`9Ԍ6 \|73=s9#x8濷=lAf澷zoj xv7:&`$.5bbc[3]F)yq`3qw[)׆ L0V܁w!gTlc)D]JQMiBLd=UZvmxЦ8nf)TW65Z%)HWuK&j6,"lOds9A׷}x&ڢA;u|ς+ mw6[XZ"1|<0U8$Trƥ0)cïZ('<57ݜYkV]cʯ=MKWvELo5X&-q~1^ @]i#f,V8IеHʊ|rg'r*E{Oһo{Nk=lt ڟ`pϦ|iv4)ah)_yy}an&ʬt7#\Mln!'$Һ}(ઃfUpfc| ΑDx uQYqa0($# Ӌżot)[߲2]?<48\YNRe -VxEO + ZMs\,_(6~aÙݱ)r¹0,F~Py{cg8V /'aYP<S߃!zF]c_@2}^!|GTE[ouHժJYţ L"ZKV$>ZBXƮEΑ-$ˍޗ?ȰP!ht3PUo?%#zmQj'Μl&AW$eI;wmQu, h*&E[C@)Û)%/Ϯp2;ZU?xz$Kxu +K3&:G}/d꽜[{qN5U&D)|4apٽ߀DN`ANN-Ν\kCz|@V>sv{f)RVs+5]=NGE>-V2qիu )!Vt5lMf Ƚ{Qa5״8 RI:8\U r&r?ffo{RyV+BEAcRxxM9XT=1}(tKPIC4Xg0$e=M0* !:VylI:~ ܄rl` *Rħ ]ӫ*V4Jnո߃&`mMۨڜѝ։JM3,O1#sN5oVJׂ=_L Yu*M\gh}*?;Nbtt&VWk,;ؚkM>r@v &) ͌^%,}{7K?P:|v7zoJZar" S NmG "YiGπgeǓ7.9 ^#AEM8.TMM*ˎ/$K{P*WVN5 25'zOHeQ2$N^O@M7*2 l_B3G  t SPw;']zLu!B9S}$Y3?ON& ќNG@BGAݸ9R[Y #WI`,I!זn^`)^{meĸH,t!Gᚈ.[O ;GMO@ÍRՆssGX g\k/%#EBE7B*Oح&L -R @@2Mإ;Drbgf| I - nQiϱgR ˞=ͥsխ\-Jzt:ذHX1z.QħV` cUhՈ,[ ͟neh mG78H]|F;6i5}|ʏ~_܌-׋|P5?&GDIo헜T Fi UL>U6JDsV1U}afů:M:_ŋ[jO /ێ F""ߒ fA%8bɚhٜ֍/X'L 'etl+}"2s| FIhSPf/N >;RMH3W yrց]DʮY̪W  O VMS.BCKO[V9.BIN]RT.OLB;1 B  ARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQ UALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT  GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eYѬЬRDEREF PЏլ쟼DEREFЏi䞭i쟭CNV_STRP욏g~ERR_MSGЭiPCNV_STRPg~ERR_MSGЭiPRRЬ PЭ`ЭiPPR Bà PP6} ݭݭALCSTRP|~ERR_MSGЭiP ЭiPЬ R~ALCSTRP|~ERR_MSGЭiPЬ RТTЭVЭXUX UUXЭSЭWRW RRW ЭiPwwO_0Z0O_0Z1O_0Z2O_0Z3xO_0Z4qO_0Z5kO_0Z6eO_0Z7\O_10UO_100NO_101DO_11 1ݨ0V1.03OARITHV1.025-JUL-1994 10:30VAX C V3.2-044R OARITH iipowP Pripow s6 C$V_CTYPEDEFSALCREAL IIPOW PRIPOW$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TY PINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTD SEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUE K_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZE STKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME  GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAVATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWP^լլ PլPQլPĬQĬxլQP^s"լ 6}LN7P  ά gpSլ  dSdx լ ЬRpS~ALCREALPPЏPww 10V1.01O_07V1.025-JUL-1994 10:31VAX C V3.2-044P 0^eSѬЬPDEREF PЏլ؟DEREFЏcОcCNV_EINTP1؟CNV_EINTP2 BIGPOWP|~ERR_MSGЭcPЭcP CNV_C_DBLPؚf~ERR_MSGЭcP ݭp~RIPOWP|~ERR_MSGЭcPЭcP CNV_C_DBLPؚf~ERR_MSGЭcP 蟭 CNV_C_DBLPf~ERR_MSGЭcPss~ERR_MSGЭcPs~ERR_MSGЭcPЬ Rp~pR O_07O07_powr s  C$V_CTYPEDEFSDEREFRIPOWBIGPOWALCREALERR_MSGCNV_EINT CNV_C_DBLPOW O07_POWR$CODE$DATASTDIN4{] VMS.BCKO[V9.BIN]RT.OLB;1 d  STDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_P ROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEG LOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXT SWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWR~POWpP~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPww 1Pd0V1.01O_06V1.025-JUL-1994 10:31VAX C V3.2-044P^eTЏЏѬЬPDEREF PЏլПDEREFЏdd߭䟭 CNV_EC_INTP1߭ CNV_EC_INTP1ݭݭADDPSZPЏ`PЭPЏ`PЭ ȟBIGADDP|~ERR_MSGЭdPЭdPЬ PSЏ`ЭdPПCNV_EINTPC؟CNV_EINTP2 ؟ BIGADDP|~ERR_MSGЭdPЭdP CNV_C_DBLPКf~ERR_MSGЭdP蟭R O_06O06_plus s C$V_CTYPEDEFSDEREFBIGADDALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBLADD O06_PLUS$CODE$DATASTDIN STDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROG KYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBA LSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWy CNV_C_DBLPؚf~ERR_MSGЭdPЬ Ra~ALCREALPЏbբ<3~ERR_MSGЭdPЭdPwwO_097O_0AO_0A0O_0A1}O_0A2SO_0A3rO_0A4lO_0A5fO_0A6`O_0A7ZO_0A8SO_0A9vY VMS.BCKO[V9.BIN]RT.OLB;1   11V1.0 1F_13V1.025-JUL-1994 10:39VAX C V3.2-044jR F_13F13_pos s+  C$V_CTYPEDEFSDEREFCVPOSERR_MSG CNV_C_INT F13_POS$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP 1̈0V1.01O_05V1.025-JUL-1994 10:31VAX C V3.2-044R O_05 O05_number sF  C$V_CTYPEDEFSDEREFALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O05_NUMBER$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNO NUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLIST ARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQ UALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT  GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP $^eSլ䟼DEREFЏcܞc߭쟭 CNV_EC_INTPЬ PЭЏ`ЭcP䟭CNV_EINTP } ЭcP CNV_C_DBLP=Ь Rp~ALCREALPЏbբ<3~ERR_MSGЭcPЭcP䚏f~ERR_MSGЭcPww 10=e0V1.01O_04V1.025-JUL-1994 10:31VAX C V3.2-044R O_04O04_negg sm  C$V_CTYPEDEFSDEREFBIGNEGCPBIGNUMALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBLNEG O04_NEGg$CODE$DATASTDINSTDOUT STDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURREND STATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD _RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSG NAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTAT ES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWP,^eTլ䟼DEREFЏdܞd߭쟭 CNV_EC_INTPoݭNEGPSCPЏ`PЭ BIGNEGP|~ERR_MSGЭdPЭdPЬ PSЏ`ЭdP䟭CNV_EINTP; CPBIGNUMP|~ERR_MSGЭdPЬ PРPЭdP CNV_C_DBLP䚏f~ERR_MSGЭdPrPЬ RpP~ALCREALPЏbբ<3~ERR_MSGЭdPЭdPwwˁ VMS.BCKO[V9.BIN]RT.OLB;1   1d00V1.01O_03V1.025-JUL-1994 10:31VAX C V3.2-044P^eTЏЏѬЬPDEREF PЏլПDEREFЏdd߭䟭 CNV_EC_INTP1߭ CNV_EC_INTP1ݭݭMULPSZPЏ`PЭPЏ`PЭ ȟBIGMULP|~ERR_MSGЭdPЭdPЬ PSЏ`ЭdPПCNV_EINTPC؟CNV_EINTP2 ؟ BIGMULP|~ERR_MSGЭdPЭdP CNV_C_DBLPКf~ERR_MSGЭdP蟭R O_03O03_mult s C$V_CTYPEDEFSDEREFBIGMULALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBLMUL O03_MULT$CODE$DATASTDIN STDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROG KYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBA LSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWy CNV_C_DBLPؚf~ERR_MSGЭdPЬ Re~ALCREALPЏbբ<3~ERR_MSGЭdPЭdPww 1`L0V1.01O_02V1.025-JUL-1994 10:31VAX C V3.2-044P^eYЏЏѬЬRDEREF PЏլПDEREFЏii߭䟭 CNV_EC_INTP1߭ CNV_EC_INTPtխݭ~IRUNERRЭiPЭSzP{SPQPPTխT'SSPSPPTTSSPPSPPTЬ RTЏbЭiPПCNV_EINTPC؟CNV_EINTP2 ؟BIGMODP|~ERR _MSGЭiPЭiP CNV_C_DBLPКf~ERR_MSGЭiP蟭 CNV_C_DBLPؚf~ERR_MSGЭiPpR O_02O02_mod* s C$V_CTYPEDEFSDEREFBIGMODALCREALIRUNERRERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBL O02_MOD* $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURST RINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUE KYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STR COLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEAD POLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYSZe VMS.BCKO[V9.BIN]RT.OLB;1 q  CURSORSYMS OVER_FLOWSpUgUSPjPRnRPdUPcPSWsSsW*sUpURPrURbRWsWsUpURPrUR`RWЬ RpW~ALCREALPЏbբ<3~ERR_MSGЭiPЭiPww 10V1.01O_01V1.025-JUL-1994 10:32VAX C V3.2-044P^eTЏЏѬЬPDEREF PЏլПDEREFЏdd߭䟭 CNV_EC_INTP1߭ CNV_EC_INTP1ݭݭSUBPSZPЏ`PЭPЏ`PЭ ȟBIGSUBP|~ERR_MSGЭdPЭdPЬ PSЏ`ЭdPПCNV_EINTPC؟CNV_EINTP2 ؟ BIGSUBP|~ERR_MSGЭdPЭdP CNV_C_DBLPКf~ERR_MSGЭdP蟭R O_01 O01_minus s C$V_CTYPEDEFSDEREFBIGSUBALCREALERR_MSGCNV_EINT CNV_EC_INT CNV_C_DBLSUB  O01_MINUS$CODE$DATASTDIN STDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAME CURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PRO GKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLO BALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTS WSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWy CNV_C_DBLPؚf~ERR_MSGЭdPЬ Rc~ALCREALPЏbբ<3~ERR_MSGЭdPЭdPww DERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDST ATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN  K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMES EGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS OVER_FLOWP ^eSЏЏѬЬRDEREF PЏլПDEREFЏcc߭䟭 CNV_EC_INTP+߭ CNV_EC_INTPЬ PǭЏ`ЭcPПCNV_EINTP)؟CNV_EINTP ؟BIGDIVЭcP CNV_C_DBLPКf~ERR_MSGЭcP蟭 CNV_C_DBLPؚf~ERR_MSGЭcPgPЬ RpP~ALCREALPЏbբ<3~ERR_MSGЭcPЭcPwwNY VMS.BCKO[V9.BIN]RT.OLB;1 < + O0A1_RSWAP} O0A2_RSWAPS O0A3_RSWAPr O0A4_RSWAPl O0A5_RSWAPf O0A6_RSWAP` O0A7_RSWAPZ O0A8_RSWAP 1P50V1.01O_19V1.025-JUL-1994 10:32VAX C V3.2-044[R O_19O19_conjU s  C$V_CTYPEDEFS O19_CONJU$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPS TV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS (RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMA PS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINS NOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMS[P^eQѬЬP} PЏլ}Џa䞭a} ЭaPww 1E0V1.01O_18V1.025-JUL-1994 10:32VAX C V3.2-044WR O_18 O18_valueA s  C$V_CTYPEDEFSDEREF  O18_VALUEA$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYP STV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(L PARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETR MAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBU ILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSKP^eRլDEREFЏb잭b} ЭbPww 10qr1V1.01O_17V1.025-JUL-1994 10:32VAX C V3.2-044^R O_17O17_nullc s  C$V_CTYPEDEFSDEREF O17_NULLc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_T YPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(D VMS.BCKO[V9.BIN]RT.OLB;1   LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELET RMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICS BUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSmP ^eSլЬRbDEREF}bЏЏc䞭cѭ } ЭcPЭcPww 101V1.01O_16V1.025-JUL-1994 10:33VAX C V3.2-044cR O_16 O16_nonnullc s   C$V_CTYPEDEFSDEREF O16_NONNULLc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLA NKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTAT ICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSmP ^eSլЬRbDEREF}bЏЏc䞭cѭЭcP} ЭcPww 1`K1V1.02O_0X0V1.025-JUL-1994 10:33VAX C V3.2-044pR O_0X0 O0x0_llist s- C$V_CTYPEDEFSALCLISTALCLSTBERR_MSG | O0X0_LLIST$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYP REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZE K_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYW D_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZE TEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIORl VMS.BCKO[V9.BIN]RT.OLB;1 w}   GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^eV}Gf잭fЬSSRݬALCLISTPb|~ERR_MSGЭfPݬSALCLSTBPR|~ERR_MSGЭfPЭSRR PެUPeЬTxPQAdSAQ}caPPeЬ SЭЏcЭfPww 1&7,1V1.01O_0XV1.025-JUL-1994 10:33VAX C V3.2-044R O_0X O0x_llistd sD  C$V_CTYPEDEFSDEREFALCLISTALCLSTBERR_MSGMALLOCFREE O0X_LLISTd$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS  ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOU RCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZE STATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPH ICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP,^eWЬRRT'xRRR~MALLOCPT<1~ERR_MSGP}GפSެVSf(USRxRRBxSRBeDEREFSSfЬSSRRRgddgSUU RSALCLISTPb"|~ERR_MSGdgRTR TFREEPݬUALCLSTBPR"|~ERR_MSGdgSTS TFREEPФ SRR PެVPffUxPQSAcSAQ}caPPUЬ SФ ЏcdgRTR TFREEPww 1,691V1.01O_0WV1.025-JUL-1994 10:34VAX C V3.2-044~R O_0W O0w_to s@  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_INT O0W_TO$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGS IZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAIN KYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKS IZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAP HICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP$^eTѬЬRDEREF PЏլ䟼DEREFЏdܞd߭ CNV_C_INTP䚏e~ERR_MSGЭdP} VMS.BCKO[V9.BIN]RT.OLB;1 ӗ  CNV_C_INTP욏e~ERR_MSGЭdPѭ?Ь SRЭЏcbЭdPPЭd֭ѭЭdPww 1XL1V1.01O_0VV1.025-JUL-1994 10:34VAX C V3.2-044R O_0VO0v_toby sm  C$V_CTYPEDEFSDEREFIRUNERRERR_MSG CNV_C_INT O0V_TOBY$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERR NONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUA LLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCOD E K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZE QUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICS! RIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP0^eTѬЬRDEREF PЏѬЬRDEREF PЏլ؟DEREFЏdОd߭ CNV_C_INTPؚe~ERR_MSGЭdP߭ CNV_C_INTPe~ERR_MSGЭdP߭ CNV_C_INTP蚏e~ERR_MSGЭdPխݭ~IRUNERRЭdPխKѭ1Ь SRЭЏcbЭdPPЭdѭFѭ?Ь SRЭЏcbЭdPPЭdѭЭdPww# 1?[1V1.02O_0U0V1.025-JUL-1994 10:35VAX C V3.2-044xR O_0U0 O0u0_tabmat s4  C$V_CTYPEDEFSERR_MSG O0U0_TABMAT$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP$ PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL% STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPN& ULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND' STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHIC( SNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^@V=UХWWfSSSPЬTФQWPPdSSTSRTPRSRSЬSc}cЬ RPbPfRWRe~ERR_MSGPWPww7 VMS.BCKO[V9.BIN]RT.OLB;1 N) M O_0U0 d1 SLM O_0UpD\j1 SLM O_0TB}r1 SLM O_0S00 ?z1 SLM O_0S Uǂ1 SLM RMEMMGTe 1 SLM O_1511 SLM O_150 y1 SLM O_15Bߞ1 SLM O_1411 SLM O_140@ 1 SLM O_14añ1 SLM O_131'1 SLM O_130@1 SLM O_13n1 SL+ 1d1V1.01O_0UV1.025-JUL-1994 10:35VAX C V3.2-044R O_0U O0u_tabmat  sW  C$V_CTYPEDEFSDEREFERR_MSGCNV_STR  O0U_TABMAT $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICON, TYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZ- ESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE. K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCR/ STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN0  GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS&P^eV@X=UլDEREF PЏf잭fCNV_STRPg~ERR_MSGЭfPХWWhRRRЭfPЭQWPPЭSSTSRTPЭfPRSRS} ЬRЭfPbPЭfhRWRe~ERR_MSGЭfPWЭfPww2 1Wj1V1.01O_0TV1.025-JUL-1994 10:35VAX C V3.2-044R O_0TO0t_size sq  C$V_CTYPEDEFSDEREFERR_MSGCSSIZECNV_TSTR O0T_SIZE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$E3 RRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREE4 QUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENT5 CODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZE6 QUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAP7 HICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^eSլDEREF ЏccQQЬ RQЏbcPˏQPPP1Pn?PЬ PRТЏ`cPЬ PRТ RТ Џ`cPPРRCSSIZEPRЬ PRЏ`cPЬ PRТЏ`cPЬ PRТЏ`cPЬ PRТЏ`cPCNV_TSTRPp~ERR_MSGcPЬ RЏbcPiPkI+ww S. ]սγmyw,PD.2ư_UmFl3;j("Ɏ>K!е@4Ʊ@Gx_Eg*f\n(IhX̿0 h o~ p3&<iM:No o1ϯhyǙ2 Uw녝g>~6#Cǰ !C3fσ 1:. ~̱wɲEyWF!kϡ{t6W@PI`[k T]Լ-m*?pK%^ N5$lNC4픋OPU"PR;bۢY[i5\k%!Dx&ѰW4PU-o _EM)IEETX',ĪKaʧ GA/N%@D%Q!Iol PTJum?͵oQDڻYB cWcY Zڲ3="$OPgMz}h{=*G5.@SV`ZU ?~(If?.MvT W_WS_%c&vbeuy_N@GC+zdM>c_CB鱙L#AECUtbQVtZyutSO^Y*gsg!N&qkF m #'JyEmQd];& B,uY+ jZ A,0Jbi4nDʮ@"6ðaߪr*YSK0k'@KGC޷H{wCI#c{q XS|^iz^ܘCMQ&3RY;?{bv}Ⱥi=g%N!T%_AxE Y\Mz(bB ]+ה*J8LPH/C>JOnmKFZ€PY>𸏁n4>Z qw%޳rU*tP- R8OSɲSEg\G,NFcAcb9wH"YѼcY̘ ?  [.ϞH\mC\D7.i:&`>;dVNxV;Jna(HF[i@uȃVM]zPQ|3 DxEv9H GoAQtr1YDw^L ̜D'O$kPqpAY۱GM^Mޣ&fxd~lpG>G )t2*K/$fuɷYRH"P|*4_;PS [ՐdWoQ_'QvKLu R$~N UB񱈹DHINWUXTK P{]CSFPXD&мN[\E۹@@K`$sMGA>NViR$ȃANp[#05R& @D2  JP\]q:5Y\%`)78V ^KxADMWLrZW} !L:̜u&sK^[v6Z18b֪RA|5r$ejz7 OV`M5鳤!4,],y{@l_Q C%rG NcJ6GHRPZM_ @ @ _a LJO NDD)G[G[IFT _Q[TR@쿥KSPkEF=CO[ɡoTukK )Y㈏ ˂J?)G4qR>Z̕]V?BjFg [J  OAN?kLITGK DV_MYNZ RR XLMAVUHKBEK^TGTUy*\YplQ3 H߮^ B[T{$)L.\E[WVyRX B._ 4Gyz~f7N }qe'fC]YRRGFW l_K;ylP#!^:-\^>MV[AQ.ằT)KQC}Ǧow˘4fW=dCK"U`;[Gv SOAsP^S]] IQLdTHWT BI B[C VHHEY XX ijBeMx EJ oCaC^&YTP XDQSKFF\K TSKHXRKSEvPULXQXD\JGBVDDXUMQG]FXWJHDB@HJ^FANX KJM_D\|JMA:K@3WEB+FM  SOL9K@X\ KR MC]JRVLNU F@@UWFH KBAZ ]\:X nZ?LBWGU| EOLLEZRJB@ Q @D W @H R^XJ@V@NKBE G LGABF QMW@U O \YEDCCHLSVѧ WYb^ M &<[V< YPKN  UK=Fⴡ˃N 2O& M =^V1J^ X w^!DE[J1ISQS *V6[yCI$KտکDCGW G0ZJMQU]PWa;A^_K J D W DI[B TFQPJJLJ]DSZU@HI  ]UFK] S]DIQS[DES BAN U #@GW젠WDRX& Q^YF\\DZFT]Gj~GͺPqQj =^U &j]kqL61C $ ንXNZ ID[+ aG] K @HPI^V@ Z^IHQ[WIW M BHNRNOA TJPDNP  ATA\98 ]  L-M. U_QMen*̭A@x| nSRU@HQ\jh@\4IHSL^WYW)gIέ@Yj{CW?Np""ޣ1IbPx)IJLPMx;H5G&gһ*Q RKl=ϤʹGZ"mPJ  {H^N K7\RTt<>UI[Pۼwb8Fs|.9 >MT9x8QVNDuD Q. EuY&*WTIR < eYL-،“Re`< \ÓCL&-;]BW|́7w\L)5ƒ+*f'$P0ez>发> vf+6SaCnNg )D_K\ݙ*OywؑTY`0j`{Lha@i0h4[Xj t%&ܯ欧bof;ׄ|ADeS?zN-t6Hڌ:`j|v B*RF*Mf6|Ī@fhDț^oRQ(lFQ0/}wnSoۧo)Ao01V<o,bS>"j$0dܦ(RQKx"c jbB9#ZBO"(ʶ5()-/MH$!X!eO= jTa$Rg+~aŵp0*4Zbe_0\KTY3xSۯCB9]\nX癉 R GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSfP|^ALCCOEXPPU |~ERR_MSGPЬQСP},,ѥ,a~ERR_MSGPUCO_INITЬRТPРr1o>ŌTňPPSSxSPPTТPRPPQQxQPPRbdŌTňPPVPVxVPPTЬRТPQPPSSxSPPQСŌVňPPTTxTPPVТPQPPRRxRPPQСЬPUЏ`Pww@ 1=z1V1.01O_0SV1.025-JUL-1994 10:36VAX C V3.2-044R O_0S O0s_refresh sE  C$V_CTYPEDEFSALCCOEXPDEREFERR_MSGCO_INIT O0S_REFRESH$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPEA SSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESB FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVC ENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRD STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GE RAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^eWլDEREFЏg잭gѭv~ERR_MSGЭgPALCCOEXPPS|~ERR_MSGЭgPЭP},,ѣ,~ERR_MSGЭgPSCO_INITЭPРr1o>ÌUÈPPTTxTPPUЭPRPPQQxQPPRbeÌUÈPPRPRxRPPUЭPQPPTTxTPPQСÌVÈPPUUxUPPVЭPQPPRRxRPPQСЬ PSЏ`ЭgPwwG 11V1.04RMEMMGTV1.025-JUL-1994 10:36VAX C V3.2-044'P' P (' P'(P8@'@P'HP'PP(P(P ($P(,P 8 (@P (PPPP HPPPP  @PR VMS.BCKO[V9.BIN]RT.OLB;1 FG H Pillegal object PPillegal object PPlarge integer P,Preal number P,8Pcset P8=Pfile P=BPprocedure PBLPrecord PLSPlist PSXPlist element $PXePset (PeiPset element ,PiuPtable 0Pu{Ptable element 4P{Ptable element trapped variable 8PPhash block Pillegal object dP>)P @ MPinsufficient memory for string regionsPinsufficient memory for block regionPinsufficient memory for qualifier listP^U%VTS""$$#гXдW MALLOCRbPc bPdXWJ c\|c\|d\|d\|c\lbPP  MERRORc\ld\lMALLOCPP  sERRORd\laMALLOCPf ŘERRORa^EW+TdGFREEVPdUe(USХ dУ4RPRPТRPfRSf edR Td SCOLLECTRݢݢADJUSTRCOMPACT|^EV+ScGFREEUPcTd(TRФ cТ4\P\PЬ\Pe\Re dcR Sc^<TЬSSTST MALLOCPRUЬbK bSSPPSPQSQQbbMALLOCPP  bRPbPPPbbTRFREEP<^ެUe RRRTe P``Q P``QdPРRРSR)PRdeCOLLECTdPà PѬPPТRS)SdݬCOLLECTdPà PѬPPУSdRբdPРddPՠ~ݬ ALCNEWREGP5dԠdRPddRТdRТRPdRPPdPP^[YW2Z'VXЬPPP72?PЬRXЬSYЬQZWL ЪRe%gkE MARKBLOCKj MARKBLOCK@̮hRЮSѣ# RЮTѤRgik gRgЮb>ٮhRЮUѥ& RЮPѠRgik PgRgЮbJ>JƮ hRЮ Qѡ= R ~ўR.gik$PgRgЮ bJ J MARKBLOCKK;KɮhRЮPѠ: RЮQѡR+gik!gRgЮbK K MARKBLOCK{S4 MARKBLOCKTPppdxxdУS[RR\OPb0RPhSѠ0 SѠS%gikPM gSgPcb R MARKBLOCKRR\gSS_PPc0SPhRѠ0 RѠR%gikPgRgPbc S MARKBLOCKSS_  C$V_CTYPEDEFSSWEEPMVCQLCMPSCOLLECTPOSTQUALCOMPACTADJUSTMARKPTR MARKBLOCKCOLLECTCHANGE_REGIONS ALCNEWREGCOFREECOLLECTSWEEPSCOLLECTPOSTQUALMVCMARKPTR MARKBLOCKERRORCOMPACTCOFREEADJUSTQLCMPMEMCOPYMALN LOCFREEFREEQSORT  INITALLOC |COFREE  ALCNEWREG <CHANGE_REGIONS COLLECT MARKBLOCK  MARKBLOCKݬoRТTCPФPФ QPQ.Pʏ`ˏ`RBfRRS PPRbSSPPQФTRТUCPХPХ QPQ.Pʏ`ˏ`RBfRRS PPRbSSPPQХUЬPPCP1P?PR1PShRâ RѬR1ݬݬCHANGE_REGIONSPPk<06}LN7P<26}LN7O PQRâ RѬR2ݬݬCHANGE_REGIONSPP<36}LN7P2P^XZмSS/S!ˏSPPIP?P ʏSЬ[ЫUYU1U 1eWW$ˏeRB'RRS PURbSUSTЬRWeW12GR8URSGV xVVSVRPTRSRc SMARKPTRSSRG(S1USRRT1Pb8RPjSѠ8 SѠS-h PhShPcb R MARKBLOCKRRTPec[eUSWEEPUWЏЧ4S3 MP ARKBLOCKVPTcTRxRRB RbfcTУSէ01$, MARKBLOCKЩRPUU ТRR SУRUU ТRReWWˏeRB'RRVURbVUVTȏeGR5URSGV xVVSVRTRSRc SMARKPTRSSRG(SZUSRRTQb8RUjSѥ8 SѥS-h PhShUcb R MARKBLOCKRRTP ^[ZWYмUXU1U 1eVV%ˏeRB'RRS PURbSUSTЬRVbReVQ 1FR6URSFP xPPSPRTRSRc SMARKPTRSSRF(S1kUSRRT1_Pb0RPiSѠ0 SѠS%gjkPgSgPcb R MARKBLOCKRRTPШRPUU ТRR SУRUU ТRReVVˏeRB'RRPURbPUPTȏeFR5URSFP xPPSPRTRSRc SMARKPTRSSRF(SRUSRRTIb0RUiSѥ0 SѥS%gjkPgSgUcb R MARKBLOCKRRTP|^'UVfRѬ R yTмPP PnZѪP0dgh&dPdn`AP`A P`AeRRcSCP=PP!1ww]  COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(^ BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCA_ SELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME` STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSrP^ALCCSETPX |~ERR_MSGPЬRТWЬRТVPަUާTިSdecUTSPЬ RXЏbPwwb 1 1V1.02O_150V1.025-JUL-1994 10:36VAX C V3.2-044R O_150 O150_union sD C$V_CTYPEDEFSHGROWMEMBALCSELEMERR_MSG DEALLOCATEADDMEMCPSET  O150_UNION$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNOc NUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLId STARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODEe  K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEю VMS.BCKO[V9.BIN]RT.OLB;1 he f QUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIg GHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP0^eZLY)[}G}G}GjОjЬTФSЬUХRѣ }e}de}dХSФR~ eCPSETP|~ERR_MSGЭjPЬ RТiALCSELEMPU|~ERR_MSGЭjPSTЬRТRCd1MEMBXADDMEMWALCSELEMVCkR~TЭPBdխgP߭ЭPݠ ݭhPTխ9ЭP} ЭPРTUgifPU|~ERR_MSGЭjPQЭPРaխRSS TЬRТRCd1^U DEALLOCATEЭR SSѢSբ4 RHGROWЭjPwwi 11V1.01O_15V1.025-JUL-1994 10:37VAX C V3.2-044Pp^eZLY}G}G}G쭀ѬЬRDEREF PЏլDEREFЏ|jxxjѭ 1ѭ 1ЭSЭRѣ}p}}pЭSЭR~ CPSETP|~ERR_MSGxjPЬ RТiALCSELEMPU|~ERR_MSGxjPSTЭRCd1MEMBXADDMEMWALCSELEMVC)Rj TЭPBdխhP߭ЭPݠ ݭhPTխ:ЭP} ЭPРTUgifPU|~ERR_MSGxjPQЭPРaխR O_15 O15_union s   C$V_CTYPEDEFSHGROWDEREFMEMBALCSELEMALCCSETERR_MSG DEALLOCATEADDMEMCPSET CNV_TCSET  O15_UNION$CODEk $DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGl CURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRm KYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLn L_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCo TRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS:RSS TЭRCd1]U DEALLOCATEЭR SSѢSբ4 RHGROWxjP CNV_TCSETPx~ERR_MSGxjP CNV_TCSETPx~ERR_MSGxjPALCCSETP[|~ERR_MSGxjPЭXЭWPާVިUTefdVUTPЬ R[ЏbxjPwwq 1ݞ1V1.02O_141V1.025-JUL-1994 10:37VAX C V3.2-044\R O_141 O141_interc s  C$V_CTYPEDEFSALCCSETERR_MSG  O141_INTERc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYPr  COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(s BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCAt SELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIME:L VMS.BCKO[V9.BIN]RT.OLB;1 t u STATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^ALCCSETPX |~ERR_MSGPЬRТWЬRТVPަUާTިSdRRecUTSPЬ RXЏbPwww 101V1.02O_140V1.025-JUL-1994 10:37VAX C V3.2-044P8^eZLY)[}G}G}G}G}GŭjȞjЬRТRТTЬRТRТRTRTSRSS HMAKEP|~ERR_MSGЭjPЬUХTЬRТSѤTТ PSХiALCSELEMPU|~ERR_MSGЭjPSTЭRCd1MEMBVADDMEMXALCSELEMWCkR1PTЭPBdխzP߭ЭPݠ ݭfխO߭ЭPݠx ݭfPTЭP} ЭPРTUhigPU|~ERR_MSGЭjPQЭPРaխR1mSS TЭRCd1HUR O_140 O140_inter sK C$V_CTYPEDEFSHSHRINKMEMBHMAKEALCSELEMERR_MSG DEALLOCATEADDMEM  O140_INTER$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNOy VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEz QUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC{ K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICS| MSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP} GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSJ DEALLOCATEЭSգ RѣR SHSHRINKЬ RЭЏ bЭjPww 11V1.01O_14V1.025-JUL-1994 10:37VAX C V3.2-044Ph^eZLY}G}G}G}Gx}GpѬЬRDEREFЏլDEREFЏljhhjѭ 1ѭ 1ЭRТSЭRТRSRSTRTT HMAKEP|~ERR_MSGhjPЭRЭSѢ RtЭ| StЭ|iALCSELEMPU|~ERR_MSGhjPSTtRCd1MEMBVADDMEM XALCSELEMWC)R1PTЭPBdխ|P߭ЭPݠ |fխP߭ЭPݠ ݭfPTЭP} ЭPРTUhR O_14 O14_inter s   C$V_CTYPEDEFSHSHRINKDEREFMEMBHMAKEALCSELEMALCCSETERR_MSG DEALLOCATEADDMEM CNV_TCSET  O14_INTER $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURS TRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUE KYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRyj VMS.BCKO[V9.BIN]RT.OLB;1 4  COLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEAD POLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSigPU|~ERR_MSGhjPQЭPРaխR1kSS TtRCd1AU DEALLOCATEЭSգ RѣR SHSHRINKЬ RЭЏ bhjP CNV_TCSETPx~ERR_MSGhjP CNV_TCSETPx~ERR_MSGhjPALCCSETP[|~ERR_MSGhjPЭWЭVPަXާUޫTeSShdXUTPЬ R[ЏbhjPww 11V1.02O_131V1.025-JUL-1994 10:37VAX C V3.2-044ZR O_131 O131_diffc s  C$V_CTYPEDEFSALCCSETERR_MSG  O131_DIFFc$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(B LANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMES TATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSuP^ALCCSETPX |~ERR_MSGPЬRТWЬRТVPަUާTިSeRRdcUTSPЬ RXЏbPww 1&1V1.02O_130V1.025-JUL-1994 10:37VAX C V3.2-044P8^eZLY)[}G}G}G}G}GjȞjЬRТRݢ HMAKEP|~ERR_MSGЭjPЬRТЬRТiALCSELEMPU|~ERR_MSGЭjPSTЭRCd1MEMBVADDMEMXALCSELEMWCkR1PTЭPBdխzP߭ЭPݠ ݭfխO߭ЭPݠ ݭfPTЭP} ЭPРTUhigPU|~ ERR_MSGЭjPQЭPРaխR1mSS TЭRCd1HU DEALLOCATEЭSգ RѣR SHSHRINKЬ RЭR O_130 O130_diff sE C$V_CTYPEDEFSHSHRINKMEMBHMAKEALCSELEMERR_MSG DEALLOCATEADDMEM  O130_DIFF$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAX C$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREE QUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EV ENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKS IZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRS' VMS.BCKO[V9.BIN]RT.OLB;1  APHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSЏ bЭjPww 1p9?1V1.01O_13V1.025-JUL-1994 10:38VAX C V3.2-044Ph^eZLY}G}G}G}Gx}GpѬЬRDEREFЏլDEREFЏljhhjѭ 1ѭ 1ЭRݢ HMAKEP|~ERR_MSGhjPЭtЭ|iALCSELEMPU|~ERR_MSGhjPSTtRCd1MEMBVADDMEMXALCSELEMWC)R1PTЭPBdխ| P߭ЭPݠ |fխP߭ЭPݠ ݭfPTЭP} ЭPРTUhigPU|~ERR_MSGhjPQЭPРaխR O_13O13_diff s   C$V_CTYPEDEFSHSHRINKDEREFMEMBHMAKEALCSELEMALCCSETERR_MSG DEALLOCATEADDMEM CNV_TCSET O13_DIFF$COD E$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRING CURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERR KYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOL L_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLC TRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSOR1kSS TtRCd1AU DEALLOCATEЭSգ RѣR SHSHRINKЬ RЭЏ bhjP CNV_TCSETPx~ERR_MSGhjP CNV_TCSETPx~ERR_MSGhjPALCCSETP[|~ERR_MSGhjPЭWЭVPަXާUޫThSSedXUTPЬ R[ЏbhjPww 1 m1V1.02O_120V1.025-JUL-1994 10:38VAX C V3.2-044ZR O_120 O120_complP s  C$V_CTYPEDEFSALCCSETERR_MSG | O120_COMPLP$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP  COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(B LANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASE LETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMES TATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSbP|^ALCCSETPV |~ERR_MSGPЬRТUPޥTަSdcTSPЬRVЏbPww24 VMS.BCKO[V9.BIN]RT.OLB;1  M O_12071 SLM O_12 @s1 SLM RCOEXPRP,1 SLM F_140p911 SLM F_141 SLM F_1301 SLM F_13@2 SLM F_120 2 SLM F_12>vf 2 SLM .MAIN.LONGTIMEMEMORYXWINDOWALLOC 1)1V1.01O_12V1.025-JUL-1994 10:38VAX C V3.2-044qR O_12 O12_compl s0  C$V_CTYPEDEFSDEREFALCCSETERR_MSG CNV_TCSET O12_COMPL$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYP INT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDS EGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAI NKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZES TKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GR APHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROLi XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP<^eWլ̟DEREFЏgĞg̟̟ CNV_TCSETP̚h~ERR_MSGЭgPALCCSETPV|~ERR_MSGЭgPЭTPޤUSecUSPЬ RVЏbЭgPww 1q1V1.04RCOEXPRV1.025-JUL-1994 10:38VAX C V3.2-044RRCOEXPRco_initco_chng new_context sp   C$V_CTYPEDEFSCOTRACECOSWITCH CO_INIT <CO_CHNG  NEW_CONTEXT$CODE$DATAST DINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNA MECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS  KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALS EGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGS WCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP^LUЬPР0TФ XФWФYdPSSS8WYSxSSCРQRVX}XVЬStÄԣt||ÄXWQYQÈԣ4ԣ(ÌPTW P}WTSY}eYS<^AU2TSФRЬQ ЬPР(P}a`ЬPԠ(Ь (j&er s t$Р sР$toեݬݬPRCOTRACEЬPРjР&РePРcЬݬ88COSWITCHP^Rww'~ VMS.BCKO[V9.BIN]RT.OLB;1 eV  1Ф&1V1.02F_140V1.025-JUL-1994 10:38VAX C V3.2-044wR F_140F140_tab s6  C$V_CTYPEDEFSCVPOSERR_MSG <F140_TAB$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPRE C_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVEL STKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMP NULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND  STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR G RAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METADATTRIBSDRAWOPSWDSPLYS CURSORSYMSP<^@U=SeݬCVPOSPѬPУRRTЬPPRP PRRTRPЬQRPPЬaЬ PP`PePTPc~ERR_MSGPTPww 10,.1V1.01F_14V1.025-JUL-1994 10:39VAX C V3.2-044R F_14F14_tab  sX  C$V_CTYPEDEFSDEREFCVPOSERR_MSG CNV_C_INT |F14_TAB $CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGP BSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE  K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZEST ATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDO WN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMS.P|^eV@U=TլDEREF PЏf螭f߭ CNV_C_INTPe~ERR_MSGЭfPeݭCVPOSPѭЭfPФRRSЭЭPRP PRRSRPЬ QRPPЭaЬPЭfP`PЭfePSPd~ERR_MSGЭfPSЭfPww 1\1V1.02F_130V1.025-JUL-1994 10:39VAX C V3.2-044QR F_130F130_pos? s C$V_CTYPEDEFSCVPOS F130_POS?$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPS) VMS.BCKO[V9.BIN]RT.OLB;1   TV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS (RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMA PS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIMESTATICSBUILTINS NOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSIP^=R@ݬCVPOSPѬPЬPЬЏ`Pww REC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZE K_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYW D_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZE TEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR  GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP ^eS=RլDEREF Џc螭c߭ CNV_C_INTPe~ERR_MSGЭcP@ݭCVPOSPѭЭcPЬ PЭЏ`ЭcPww 12V1.02F_120V1.025-JUL-1994 10:40VAX C V3.2-044tR F_120 F120_move s2  C$V_CTYPEDEFSERR_MSG < F120_MOVE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYP PROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZESFIRSTDSEGSIZEK_LEVELSTK LIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVENTVALUEK_MAINKYWD_DMPNULLPTR LCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCRSTATSIZESTKSIZETEND STARTTIjKԋ}9q[j{#M܌|zl1bq.V1ew^‘: Mmq^O-}Rc'mjiaq}qWZW7#8"{+ G]C2| a탺b-ʳz!J`4AsiV\sO<^c0-^Q!-K_\[qXTgzOrϔ7_tC%ޤvcīU#VxM`m1;s*9+& [cm*(H*E-:_nC{{^~6΄ ?v~om,Yrf&\7wYGM7 >Gj+g<\R4#R,$1&}gt{$ n>wSVllw}fhw|7t_aXΟ1%ia'00?|&*0+tt?aEUp?W`tP6 H^i^_;p2>i\?KRQLK5y]ҿhTq_ l+cLupLI@ˤNx68syc$ʓ6 {*DK HZ . )Po  YHE]DTx@nقF['PPL~Ϥ4ҙ+qCov4QY#Bn}{dA'8q&6UBC)rw^BM F kF"Vށw!n)4/L4$&xz$V%?#Xf>yr' J^dKkÛTitd!eX;D jmLJ8SBeY7g ڏu9(DZO[҄>6zwaDc/T̔@e\.H:p:p=p 6s;`xx /{!}bcz:¨]H'r;6Yъo[eW1=.ϳ3d KZA ^iS5ԼL'c8_?~~RB}Sdӻ)%>Xk7a† O|JS_^"9p:]#/LoC!ӹ Edg{Te륗?K3Nc>I5f?gڬAvTòǪޑ+;sQ:\(IdYB* yx y X<_NyVZ̩H xD u\!PŁdy*B\4ÍJK0A'٣wљ4::f&9 ^A V ?1'3UxPIZ$WMIOWyyN 鬣 ݨƋ 5=<:ҒIUC.sphxt ȆӶQEYghs ol]Nm(R< ģ\x :QdE >wM#=ZAwBaHROZi4HISuMV\AT6O+kU-@O`N@P3I?]p%1_]Z\$[ZS<CFBz!] \ pB[S CK+_VAR \WVZWDJS ZH[BX C @_AURB@9 Q _V &P\Z UOG@ IY P[P_XAHH IK@]@AAVXPJBBJAYYBU@bYj bEC\T +R^MWւ#i vׅj0[F|`GN%3]ĕ$9yB@ Ϳr g{Eŗ bP(Wsuc DGcA.?|F8<֑J 7.ꘀ3y3]͸A= CP[0ޛKQXr-,^ZS>E͘$*U V=S$A/M_U]z}_d*CyOI#dD7 zP t uArpߢYO*G\\]dIXb^ݦwFFSxR(SWKi;i"Oy/FIBR1@ Hx I D@SuSXTĻ &r LˆsٝLѶA6VD}KYZHpWd^KLV.TԶGxz hʔyGOpT-ES hAQƻђKB.d;9g8ы6"oCy RYTJj C{jYps^d?QC@i\{xa-aW #. 0sgN7H (@'r8TQ_W檅ĚR:o?aX Vjv*HJq$6EX ZoLXX[VAEFN Bh*[MN;E[Z G\·_ r^~M_dݰTbC >B?у_-B §Z_# 1Vܬ;Lch?5dZqW,,P#"2"U컻Ȋx̮ L\XXX@PFVQLAJYU?#G[ֻE)sAXJ)#zHe*Ul58V;L&$=o9 Q UXPsqYUAb@PTMMKqE(DQo$,P AH؀I8 *M@@KfG 3hU@G.v28?:_XR|dasNax+DG[h{NO^ige.ZVJY0.PŜ+w]O{DyAAL^iAVK VH6/ 8:؂,hlSajڮ6԰A NLl1M۵c&KaiZ|p)DdzĻE|OK|_O ViWhE9wW/VG?{yVOS7Xܪ%Ii DŽdf="POg{s3@qֵ` JE۬qLAG0SQtjaV,p/ާH^xCu PM[HuW\SO@\D9x A ?5]jBSQN#SX R 5ly6V N*T &K/ēA P@$KQVSR@y }tKRٗ U Z ) NEY0cT|k SZ2fI^YBzc\'B7++&6nYByroM c鹲U(JLr# 9\j1t|t:JN\4jZ$kUT 6 [ ST AC״^ѾJ p=D){5}Eş89 B0)!gGNfVR <,1NvlN׿:q}v=lJGWvWǓE -jpkjH["EW~䌁N}& :puu%\G[c]ؽ~OBI <%՜ܠ+]NY$4jB[ݮ3\Ջ([T@D48bCFY[&do FfVGRiex2(z@M^ 'Tɭ"tj_| @]fjm\/5-\_GGh_UHC.11uV^MM[ PQ0we8 R BLXc?l0KS . X@BK BH QPA 0@GeRN_^ HPKNU QHTCFKIO\\OYH൭BNZQMA[ TONAvOSN LGG^7EA負LS%HP_Z淧QYW EI^YJ'))VL[_2ɕ\" KoDOB l*f@9\ ̺#e9QE/мq"X`|WHU lfL\7@ǒQC?|"Dԋ1x-z,R:?mET+ڨx7J:7 ĩoZC/+OOm4Hl*I-FR]DDǻS8WƸs:eoL.A5аnw#er٨U/(WF_ [If&^=s4X>U@DRII%~gw=S_LXKwN vB0t~B /όA[EK1jD^^.MJ̖QQHs \GFW9S RV Q W $CQZ F]LAUEBTWXQHZHEIxR$UHFJEXwVYHYQQ^CDAUI WIBC^vRLS`'䯨Q-Qg墑#Ki>ܧI C*HhL4Tڙ4șK41&[WZkI `ul(ۄ^7LLoÙ?"jF!EˆjC7aY ?q )vuWl GdTKmZgX?\ A<*^] G ksHE+3'X;,Lr[8*V Bx [ &j/2 ¶6P]xPWRئ&TsCJ`+H_#^y_C;D3I_.O]4~zm.J@C3,2|ؾX̀FU UM۪VM 糤ؼBWLF  YJ RI L Fڲ `D VMS.BCKO[V9.BIN]RT.OLB;1 )  IMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFT XMOD_METAATTRIBS4DRAWOPSWDSPLYS CURSORSYMSP<^@U=SУPPTPR eQRQPЬRRRRPRЬRPQQЬbЬ RPbPePTPc~ERR_MSGPTPww 10v 2V1.01F_12V1.025-JUL-1994 10:40VAX C V3.2-044R F_12F12_move sT  C$V_CTYPEDEFSDEREFERR_MSG CNV_C_INT |F12_MOVE$CODE$DATASTDINSTDOUTSTDERR_CTYPE_ERRNO VAXC$ERRNONUM_TYPS ICONTYPES STR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLTALLCHARS CURSTRINGCURBLOCKBLKNAMECURRENDSTATBASESTATENDSTATFREEQUALLISTARGPBSIZES FIRSTDSEGSIZEK_LEVELSTKLIST(BLANKCS(LPARCS(RPARCS(FULLCSBLANKEMPTYSTR K_CURRENT K_ERRORTEXT HAVE_ERRVAL K_ERRORNUMBER T_ERRORNUMBER T_HAVE_VALK_ERROUTK_INPUTK_OUTPUT K_ERRORVALUEKYWD_ERRKYWD_POS KYWD_PROGKYWD_RAN K_SUBJECTKYWD_TRC K_EVENTCODE K_EVENTSOURCE K_EVE NTVALUEK_MAINKYWD_DMPNULLPTRLCASELETRMAPS2MAPS3NULLDESCONEDESC T_ERRORVALUEUCASEZERODESCBLKNEEDSTATNEEDSTRNEEDBLKTOTALSTRTOTAL STATTOTALCOLL_TOT COLL_STATCOLL_STRCOLL_BLKGLOBALSEGLOBALSGNAMESEGNAMESESTATICSMSTKSIZEQUALSIZESTATINCR STATSIZESTKSIZETEND STARTTIMESTATICSBUILTINSNOERRBUFPFPTRASHCAN LARGEINTSOP_TBL OP_TBL_SZ DEBUG_INFOERR_CONVDODUMP LINE_INFO FILE_NAMELINE_NUM N_GLOBALS N_STATICSMAINHEADPOLLCTRWBNDNGSWCNTXTSWSTATES GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN G RAPHICSHOME GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSEND WIN_HIGHWATER KYWD_XWIN LASTEVENTWINAMPERCOLAMPERROWAMPERXAMPERY AMPERINTERVAL PREVTIMESTAMP XMOD_CONTROL XMOD_SHIFTV XMOD_METAATTRIBSDRAWOPSWDSPLYS CURSORSYMSP|^eV@U=SլDEREF PЏf螭f߭ CNV_C_INTPe~ERR_MSGЭfPPPTPR eQRQЭfPЭRRPRЬ RPQQЭbЬRЭfPbPЭfePTPc~ERR_MSGЭfPTЭfPww 1Q@ 200.MAIN.025-JUL-1994 08:02 VAX MACRO V5.4-3MACRO RSWITCH  .MAIN. NEW_CONTEXTSYSERR . ABS . . BLANK .*Pnew_context() returned in coswitch "COSWITCH&ЬPЬQ^`]\[ZYXW V$U(T,S0R4լ a^]\}~ NEW_CONTEXTSYSERR3a^С]С\С[СZСYСXС WС$VС(UС,TС0SС4R"COSWITCH  . BLANK .ww1xI 2V1.01LONGV1.025-JUL-1994 08:01VAX C V3.2-044YR LONG longwriteo R  C$V_CTYPEDEFSFWRITE | LONGWRITEo$CODE$DATASTDINSTDOUTSTDERRNUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TY PTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VALTBL_DFLT_CTYPE_P|^UzP{PQPPVЬTǏS"ݬ ݏTFWRITEPUTSVݬ VTFWRITEPUUPUPww1 N 2V1.01TIMEV1.025-JUL-1994 08:01VAX C V3.2-044 PPSundayPPMondayPPTuesdayPPWednesday P PThursdayP )PFridayP)0PSaturdayP09PJanuaryP9APFebruary PAJPMarch$PJPPApril(PPVPMay,PVZPJune0PZ_PJuly4P_dPAugust8PdkPSeptemberPiconP@Piron crossPBPleft ptrPD Pleft side PFPleft tee(PHPleftbutton0PJPll angle8PLPlr angle@PNPmanHPPPmiddlebuttonPPRPmouseXPT Ppencil`P VPpiratehPXPpluspPZ Pquestion arrowxP \/Pright ptrP/^9Pright sideP9`DPright teePDbNPrightbuttonPNdZPrtl logoPZfcP sailboatPchlPsb down arrowPljzPsb h double arrowPzlPsb left arrowPnPsb right arrowPpPsb up arrowPrPsb v double arrowPtPshuttlePvPsizingPxPspiderPzPspraycanP|PstarP~PtargetPPtcrossPPtop left arrowPPtop left corner PPt op right corner(P)Ptop side0P^RXWINDOWtranslate_key_event: !c XLOOKUPSTRING TRANSLATE_KEY_EVENT:$CODE$DATASTDINSTDOUTSTDERR GRAPHICSHOME GRAPHICSLEFT GRAPHICSUP GRAPHICSRIGHT GRAPHICSDOWN GRAPHICSPRIOR GRAPHICSNEXT GRAPHICSENDDRAWOPSq$CHAR_STRING_CONSTANTSx CURSORSYMS5 )2Ptop tee8P2:Ptrek@P:?Pul angleHP?HPumbrellaPPHQPur angleXPQZPwatch`PZ`PxtermhP`fPnum glyphspPfP^Ь RR ݬݬ XLOOKUPSTRINGPb bPPww10\` 2V1.02ALLOCV1.025-JUL-1994 08:01VAX C V3.2-044tR ALLOC salloc[ \ allocJ STRCPYMALLOCEXITCALLOCFPRINTFSTRLEN SALLOC \ALLOC$CODE$DATASTDINSTDOUTSTDERRNUM_TYPS ICONTYPESSTR_TYPINT_TYPREC_TYPPROC_TYP COEXP_TYPSTV_TYPTTV_TYPNULL_TYPCSET_TYPREAL_TYPLIST_TYPTBL_TYP NUM_CMPNTS TYPECOMPNTSTR_VARTRPD_TBLLST_ELEMTBL_VAL1TBL_DFLT5$CHAR_STRING_CONSTANTSPsalloc(%d): out of memory Palloc(%d): out of memory P^ݬSTRLENPPMALLOCPR.ݬSTRLENPPFPRINTFݏEXITRSTRCPY^TެScccCALLOCPRcߤFPRINTFݏEXITRPww*[V9.BIN]RTT.EXE;1+,.t/ 4tt-0123 KPWOu56`w7 w89Jj$GHJ0D`0205uhG--RTTV1.0u05-13cdeD E ? ! VAXCRTL_001$+CMA$TIS_SHR_001! LIBRTL_001Q! MTHRTL_001out of memoryyacc stack overflowsyntax errorICON_BIN:grttin.hrt.hECPD:I:U:d:cir:st:x[-E] [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-dfile] [-rpath] [-tname] [-x] [files]rttrttcur.lstrt.dbFILE#define COMPILER 0 #define COMPILER 1 wcannot open .db.dbbad data base name:cannot close rttfull.lst#define StandardPP #ifdef LargeInts yes #endif NoLargeIntsyesLargeIntsheader file definition of LargeInts/NoLargeInts does not match --stdin.c.r.runknown file suffix .cwcannot open output file cannot close %s usage: %s %s at end of fileidentautobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhileabstractall_fieldsany_valuearith_casebodyC_doubleC_integerC_stringcnvconstantdeclaredefempty_typeenderrorfailexactfailfunctioninlineiskeywordlen_caseng[0 VMS.BCK[V9.BIN]RTT.EXE;1t5:amed_varnewofoperatorresultrunerrstorestruct_varsuspendtendedthentmp_csettmp_stringtypetype_caseunderefvariableinvalid integer constant: **invalid float constant: invalid character: blockdescripconflicting definitions for conflicting definitions for redefinition of unsupported tended declarationunsupported tended declarationunsupported tended declarationredefinition of invalid declarationa typedef may not be a function definitionredefinition of only one version of variable parameter list allowedredefinition of unsupported tended typeexpected "C_integer", found ""expected "integer", found ""expected "C_double", found ""cannot convert to rtt internal error: unknown node type #line %d "#line %d """ %s"%s"L"%s"'%s'L'%s'%stend = %s.previous;if (r_tendp != (struct tend_desc *)&r_tend)free((pointer)r_tendp);(*(struct **)&(*).d[%d]r_args[%d]).vword.sptr.vword.bptr.vword.sptrr_i%dr_d%dConflicting conversions for: (&%s.d[%d])r_args[%d])(r_nargs - %d)(*)rtt internal error: unknown node type 'runerr' may not be used in an ordinary C function{err_msg(, NULL);, &());}it is meaningless to assert a type of empty_typeit is useless to assert a type of any_value(!(().dword & F_Nqual))((().dword & D_Var) == D_Var)#ifdef LargeInts((().dword == D_Integer) || (().dword == D_Lrgint))#else /* LargeInts */(().dword == D_Integer)#endif /* LargeInts */(().dword == D_)r_retval()()[]rtt internal error detected in function retval_dcltor()converting entire variable part of param list not supported(r_sbuf[%d], &r_cbuf[%d], &(), &(), , &(only dereferenced parameter can be converted in-placeonly ordinary parameters can be converted in-place to C valuesdest. of C_string conv. must be tended descriptor or char *))cnv_def_c_intc_dblc_strtstrtcseteintec_intcsetintrealstrthere is no default return value for run-time operations.vword.integr = ;.dword = D_Integer;.vword.bptr = (union block *)alcreal();.dword = D_Real;.vword.sptr = ;.dword = strlen(.vword.sptr);.vword.bptr = (union block *)(bp).vword.descptr = (dptr)(dp).vword.sptr = (char *)(s).vword.integr = (word)(i)wrong no. of args for string(n, s).vword.sptr = ;.dword = ;wrong no. of args for tvsubs(dp, i, j)SubStr(&, , , );wrong no. of args for named_var(dp).vword.descptr = ;.dword = D_Var;wrong no. of args for struct_var(dp, bp).vword.descptr = (dptr);.dword = D_Var + ((word *) - (word *).vword.descptr); = ;wrong no. of args for;.dword = D_;if (.vword.bptr == NULL) {err_msg(307, NULL);}{return A_Resume;return;}return A_Resume;return;'fail' may not be used in an ordinary C function'errorfail' may not be used in an ordinary C function;;()}: ;{register ;C_integer r_retval;double r_retval;r_retval = ;return r_retval; ;} ;{return A_Continue;return;}'suspend' may not be used in an ordinary C function{register int signal;if ((signal = interp(G_Csusp, r_args)) != A_Resume) {if (r_s_cont == (continuation)NULL) {return A_Continue;}else if ((signal = (*r_s_cont)()) != A_Resume) {return signal;}}) [])( {} {} : () () 1 while (); : .d[%d] = .vword.sptr = .vword.bptr = (union block *);} : () else (; ; ) c_exitfatalerrsyserr || else if () {}else {}else {if ((().dword & D_Typecode) != D_Typecode) goto L%d; /* default */ switch (Type()) {#ifdef LargeIntscase T_Lrgint: #endif /* LargeInts */case T_: break;default:L%d: ; /* default */}L%d: ; /* default */}%s: file %s, line %d, warning: in-place conversion may or may not be undone on subsequent failure. case :break;} () {}else {}len_case must select on length of varargswitch () {default:}102if ( && ) #ifdef LargeIntselse if ( && ) #endif /* LargeInts */else {if (!)if (!) }struct tend_desc *r_tendp;int r_n; if (r_nargs <= %d)r_tendp = (struct tend_desc *)&r_tend;else {r_tendp = (struct tend_desc *)malloc((msize)(sizeof(struct tend_desc)+ (r_nargs + %d) * sizeof(struct descrip)));if (r_tendp == NULL) {err_msg(305, NULL);return A_Resume;}}(*r_tendp)r_tendfor (r_n = %d; r_n < r_nargs; ++r_n)deref(&r_args[r_n], &%s.d[r_n + %d]);.d[r_n + %d] = r_args[r_n];if (r_nargs > %d) {} else {.d[%d].dword = D_Null;.d[%d].dword = D_Null;}.num = %d + Max(r_nargs - %d, 0);.num = %d;.previous = tend;tend = (struct tend_desc *)&%s;char r_sbuf[%d][MaxCvtLen];struct b_cset r_cbuf[%d];struct {struct tend_desc *previous;int num;struct descrip d[%d];} r_tend; .d[%d].dword = D_Null;.d[%d] = ;.d[%d] = emptystr;.d[%d].dword = 0;.d[%d].vword.sptr = ;.d[%d] = nullptr;.d[%d].dword = F_Ptr | F_Nqual;.d[%d].vword.bptr = (union block *);deref(&r_args[%d], &%s.d[%d]);.d[%d] = r_args[%d];C_integer r_i%d;double r_d%d;rtt internal error detected in function only_proto()rtt internal error detected in function tdef_or_extr() }(*r_rslt)%c_%c%c.cwcannot open output fileint %c%c%c_%s(r_nargs, r_args, r_rslt, r_s_cont) int r_nargs; dptr r_args; dptr r_rslt; continuation r_s_cont;{ = ;%s: file %s, warning: execution may fall off end of operation "%s" } cannot close : result sequence of {}, but fail, return, or suspend present: result sequence indicated, no fail, return, or suspend present: result sequence of 0 length, but return or suspend present: result sequence length > 0, but no return or suspend present: result sequence indicates suspension, but no suspend present: result sequence indicates no suspension, but suspend present: minimum result sequence length greater than maximumr_args[0] int %c%s Params((int r_nargs, dptr r_args)); FncBlock(%s, %d, %d) \OpBlock(%s, %d, "%s", 0) \\OpBlock(%s, %d, "%s", 0) int %c%s(r_nargs, r_args) int r_nargs; dptr r_args;{ = ;r_tendint r_n; for (r_n = %d; r_n <= r_nargs; ++r_n)Deref(r_args[r_n]);Deref(r_args[%d]);deref(&r_args[%d], &r_tend.d[%d]);r_tend.num = %d;r_tend.previous = tend;tend = (struct tend_desc *)&r_tend;%s: file %s, warning: execution may fall off end of operation "%s" } r_args[0] int K%s(r_args) dptr r_args;{.vword.sptr = "";.dword = %d;static struct b_cset cset_blk = .dword = D_Cset;.vword.bptr = (union block *)&cset_blk;static struct b_real real_blk = {T_Real, %s};.dword = D_Real;.vword.bptr = (union block *)&real_blk;.dword = D_Integer;.vword.integr = ;return A_Continue;} "%s"'%s'#passthru%s %s#include "%s" exact conversions do not apply to functionsoperatorsno implementation information for operatorendendsectkeywordsdependenciesendendsectwcannot open data base for output:creating new data base: %s %s %s 9.0.00 types T%d: %s $endsect components C%d: %s $endsect functions operators keywordscannot close %s %s %s %c%c %d(,udv) {%ld,*%ld+} t f "%s" %d desc str blkptr * %s %d %s $end $endsect nil const if1 if2 tcase1 tcase2 lcase %d %d acase runerr1 %d runerr2 %d lst ! && cnv1 cnv2 def1 def2 is %d [ %d %d block t _ %d desc str blkptr call %c i d n s t f %d %d %d abstr vartyp store . f C%d = ++ ** new %d typ %d %d T%d a e v ci cd cs ei eci ts tc d nv sv rn nil $c $sb $cb $ret $susp $fail $efail $goto %d $cgoto %d $lbl %d ${ $} %s $e $%c%sr %d f_r_s_e_t_ %d dependencies %-12s $end $endsect %s wcannot open m VMS.BCK[V9.BIN]RTT.EXE;1t%s cannot close only one abstract return may be on any execution pathundeclared identifier: %s: file %s, line %d, warning: %s may be modified iconc does not handle conversion of modified parameter undeclared identifier: component is an internal reference type. use store[.] to "dereference" it is not an aggregate type.too few arguments for newtoo many arguments for new is not a variable type has an associated type that may not be changed1rtt internal error detected in function body_anlz()more than 26 body statements in%c_%c%c%c.cwcannot open output file int C_integer double novalue %c%c%c%c_%s(, , r_sbuf, r_cbuf, r_rslt, r_s_cont)dptr dptr dptr dptr C_integer double dptr int may not be declared 'register'char (*r_sbuf)[MaxCvtLen];struct b_cset *r_cbuf;dptr r_rslt;continuation r_s_cont;{tend = tend->previous;return A_FallThru;} cannot close declare {...} should not contain worduworddptrdeclare {...} should not contain a prototypertt internal error detected in function is_addr()**; ;(*(*))(())(())[[]]&() = ;""L""''L'' d.vword.sptr(*(struct **)&.vword.bptr)()}) [])( {} switch statement not supported in in-line codeerr_msg(, NULL);, &());(!(().dword & F_Nqual))((().dword & D_Var) == D_Var)#ifdef LargeInts((().dword == D_Integer) || (().dword == D_Lrgint))#else /* LargeInts */(().dword == D_Integer)#endif /* LargeInts */(().dword == D_) : = .vword.sptr = .vword.bptr = (union block *); : type case statement not supported in in-line code;;(, , &(), &(), , &())!() with no preceding abstract return is inconsistent with abstract return#line %d "#line %d "" %s"%s"L"%s"'%s'L'%s'%s%s: File %s; Line %d: %s %s: %s %s: File %s; Line %d: %s%s %s: %s%s %s: File %s; Line %d: %s%s%s no matching #endif for #passthruifelseifdefifndefelifendifincludedefineundefbegdefenddeflineerrorpragma01eof encountered in comment## expressions must not cross directive boundariesEnd-of-file encountered within a literalNew-line encountered within a literalEnd-of-file encountered within a header nameNew-line encountered within a header namefile name missing from #include# must be followed by an identifier or keywordinvalid character constantinvalid character constant preprocessing expression must not cross directive boundary__LINE____FILE____DATE____TIME____RCRS__defined'defined' may not be the subject of #define__RCRS__ must be a decimal integer__RSCS__ may have no arguments__RCRS__ must be a decimal integerinvalid redefinition of macro 'defined' may not be the subject of #undef may not be the subject of #undef%dthe # operator must have an argumentthe # operator may only be applied to a macro argument\"\"L\"\"''L''the ## operator must not appear at the end of a macroidentifier must follow #expecting end of line following argument to #no matching #endif for #invalid context for #no matching #endif for #invalid include file syntaxinvalid include file syntaxinvalid include file syntaxinvalid include file syntaxsyntax error in #a parameter to a macro must be an identifiersyntax error in #expecting new-line at end of #begdefunexpected end-of-file in #begdefexpecting new-line at end of #enddefunexpected end-of-file in call to macro too many arguments for macro call to too few arguments for macro call to invalid context for #enddef#undef requires an identifier argumentsyntax error for #undefdefined')' missing in 'defined' expression'defined' must be followed by an identifierinvalid hex constant in condition of #invalid hex constant in condition of #invalid octal constant in condition of #invalid decimal constant in condition of #invalid integer constant in condition of #octal escape sequece larger than a characterhex escape sequece larger than a characterexpected ')' in conditional of #syntax error in condition of #expected ':' in conditional of #expected end of condition of #-rcannot open rrrcannot open include file VAXC$INCLUDESYS$LIBRARY#line requires an integer argument#line requires an integer argumentsyntax error in #lineinvalid argument to -U option: invalid argument to -D option: invalid argument to -D option: %s: %s -- %c illegal option%s: %s -- %c option requires an argumentSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember%.3s %.3s%3d %.2d:%.2d:%.2d %d r]:%s%s%s/* * %s * This file was produced by * %s: %s Icon Compiler Version 9.0. July 16, 1994 */ stringsStringintegeriIntegerrecordRRecordprocprocProccoexprCCoexprtvsubssstvTvsubstvtbltetvTvtblnullnNullcsetcCsetrealrReallistLListtableTTablefilefFilesetSSetkywdint.i..................kywdintKywdintkywdsubjs...................kywdsubjKywdsubjkywdpos.i..................kywdposKywdposkywdeventsiRpC..ncrLTfS......kywdeventKywdeventkywdwin.......n....f.......kywdwinKywdwinkywdstrs...................kywdstrKywdstrstr_vartrpd_tbllst_elemLEtbl_keytbl_valTVtbl_dfltset_elemr9.0.009.0.00found version %s, %s requires version %s9.0.00typesexpected type codedata base inconsistant with program, rebuild data baseexpected ':'unknown type:endsectcomponentsexpected type component codedata base inconsistant with program, rebuild data baseexpected ':'unknown type component:endsectcannot closeunexpected EOFinvalid prefix forinvalid prefix fornumber of parameters missing forparameter flags missing forparameter flag missing forinvalid parameter flag forinvalid parameter flag list forresult sequence missing forinvalid result sequence forinvalid result sequence forinvalid result sequence forinvalid result sequence forinvalid 'result' use indicator foroperation description expectedexpected '"'block name expectedvariable name expectedexpected $endabstracaseexpected abstr or acaseblockcallinvalid indicator for type of return valuet or f expectedexpected cnv1 or cnv2expected cnv1 or cnv2constexpected call, const, cnv1, or cnv2expected def1 or def2expected dflt1 or dflt2expected runerr1 or runerr2expected runerr1 or runerr2expected if1 or if2expected if1, if2, or islcaseexpected lstexpected lcase or lstnilexpected tcase1 or tcase2expected tcase1 or tcase2expected &&syntax errorinvalid return indicatorinvalid return indicatorinvalid return indicatorinvalid return indicatorinvalid return indicatorexpected symbol table index or '['lstexpected newexpected nilexpected new or nilstoretypvartypexpected component codeexpected ++expected **$cgoto$cgoto: expected label numberexpected $cb or $cgoto$efail$fail$goto$goto: expected label number$lbl$lbl: expected label numberd$m: expected symbol table indexdexpected $ret$suspexpected $sb or $susp$t: expected indexinvalid $ escape in C codeunexpected EOF in C codenilexpected C code of the form $c ... $e or nilunexpected EOF in quoted literalunexpected EOF in quoted literalblkptrdescstrexpected blkptr, desc, or strinvalid type codeunexpected EOFexpected:endendsectout of unique prefixes error, warning, data base "%s", line %d - %s error, warning, data base "%s", line %d - %s %s error, warning, data base "%s", line %d - %s %s%s {T_Cset, %d, cset_display(0x%x,0x%x) }; \n\t\v\b\2F VMS.BCK[V9.BIN]RTT.EXE;1t#"r\f\\\"%c\%03osalloc(%d): out of memory alloc(%d): out of memory H\BV+++++++++++++++'------`55555555555566 666!6)626  !"#$%&'()*+,-./ :;<=>?@AC GHIJK M OPQ S U WXYZ[\]^_`ac ghijk m opq s u wxyz{|}~:66666666677 7777!7(7-747:7?7E7J7L7Q7V7X7]7b7d7i7n7p7u7{7}7777777777777777788#8-8B8L8V8^8s8{88888 %PatchStringHere-> 0C 888 88 8 88 8 5^?i  m(rhf X2Z:~aaabb 3' b7vxw8 Zl))Y{[\]]!"#$'(%& 4-.,a3b8- 75|8 =0>;<*AB8=PRNQS_`')+4h Hpd2ua1tbr1/L9555zX~~;"5\aa_dbbenk8}88 rpl!JEK VMS.BCK[V9.BIN]RTT.EXE;1t1N2Nu2_t| "a[\]?@b4u z17g8 y*-. 66f?,7e7uij+mcht52"w#xy{k5Kj|kxU_/_l*qk{wpjg!}y0/.GvECDFsq{2___utpno34,+&_ut 6z7#J t$%&da:cb/Vu!#ts<'$%( 0)I-.c103K &%XWT!"#$'(%& -.,   IGJEWCMQKTSDHVF  LAPUNBROef nqoW>m]FX8R\;UMPV_HB=a`Y^D*:@LC[bAIK>9STN<?IGJEWCMQTSDHJOQVFZGLAPUNBROE)56sO+oK!"#$'(%& -.,K   IGJEWCMQTSDHVF  LAPUNBROIGJEWCMQTSDHVFLAPUNBROKK!"#$'(%& -.,IGJEWCMQTSDHVFLAPUNBROIGJEWCMQTSDHVFLAPUNBROK   IGJEWCMQTSDHVF  LAPUNBROK   IEMQTSDHVF  LAPUNBROKIGJEWCMQvTSDHVFLAPUNBROKIGJEWCMQTSDHVFLAPUNBROK!"#$'(%& -.,KIGJEWCMQTSDHVFLAPUNBROIGJEWCMQTSDHVFLAPUNBROK,(IGJEWCMQKTSDHVFLAPUNBROK!"#$'(%& -.,IGJEWCMQTSDHVFLAPUNBRiOIGJEWCMQTSDHFLAPUNBRO`".c VMS.BCK[V9.BIN]RTT.EXE;1tP@K!"#$'(%& -.,K9@[IGJEWCMQ^TSDHVFLAPUNBROIGJEWCMQKTSDHVFLAPUNBRO9}^9K^^}^IGJEWCMQTSDHVFLAPUNBRKO6IGJEWCMQTSDHVFLAPUNBRO^K}IGJEWCMQ$TSDHKVFLAPUNBRO6IGJEWCMQ66TSDHVFLAPUNBROIGJEWCMQTSDHVFLAPUNBRO9M!"#$'(%& -.,!"#$'(%& -.,gY!"#$'(%& -.,!"#$'(%& -.,!"#$'(%& -.,!"#$'(%& -.,!"#$'(%& -.,7777yxwvt%&'()346SUV*5+,-.12/0978xu;s(cgPYN_LZKMbQfjdRhXWe^O{;,=(;,=rqo[]\[({{{{"HIJ&*+-~!    ([(p_l{c=ikTYbG{{{~)}::{*;<{G=?i@ABCDEF`am= !?[(. ((:::|^&<>+-*/%){Z h!HIJ(fe(n *nn]};,:;,:},=}z+78::(;((((;;SUV;;,},)PLMOMSUVWX())]ZZ}{h:::j[j },+l}),,}}6:j@;;;}:]),)((K(([)}Fd{ {,),(E;+I3DJ<A2>9m&a1B[C=-H\.])FG,/"'7`?*%8054@}:(;),)){)(;)[(}gFefd([>(((] d;($;),MS,|)]}d#.([<:<:))mji^k)><PLMO);])dNg()])),,}:::jd)[,;}:;),))]={i ()),)),}]m)d:))::}0 ^ijbduvwxy'()*e|}~[m_klo1;<=>?@ABCDEFGHIJKLMNOPQcfgh#$\],YqsnrG'EC!"#$%&A ?=;830-)YptZX'VV VMS.BCK[V9.BIN]RTT.EXE;1t=OWTIJKLMNOPQRSz{.789:3`a&V%HDB@ ><9:456712./*+,-/U (YRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6VFY4  P  V2 5+[+\+]++[+\+]+3,q;q":,s;s!d{};V};V};V:%:&b;V4)s),;V;V),;V!([i%&'()+,-./0123456789)SUVp;Vq;Vs;V;V;V:=:A:D:Q;V;V  t ND^      t t7t\ = = ^8 tm!xw;:8 =  29= ^{8(i(^bbxQ^^ 25 u! tqig ^i ((}x%ww;;:: !_e s(wuZTg # {r\((([P d1.   fRM& 1 AG@c #  (]1..@ ~ RrB>W R(1U A   7$f J01;% (.'4 M+&YvrV\N"[hYX WVTQ!OML)KJH E8621.-,+*)('$#"!4    !!"""##$$%%%&&&&''''(())**++ ,,-3 VMS.BCK[V9.BIN]RTT.EXE;1t^----------...//00112223334455}56677~788899:: ;<====>>>>WW????@@AABBCCDDEEEFFGGGGHHIIJJJJJKKKLLMMoooooooNNNOOPPQQZZ[[RRYYSTTTTnnmllUUUVVVVVVV||XXX ff{{zz^^__`````eeeeehhjiikkrrsggppqqqqqbbccdd\\\\\\\\]]]]aaaatttuuvwwwxxxxxxyy                                    %      ^ݬ^[*zWxRRPgRvPgէ9(.PgRЧR |FaЧUЧ TЧSTЧ\ЮRBlRTRs\TYYg\\UXX\VZZxRR\PgRݧֿPgէ9-PxYTTxXUgUxZVgVSdUkeC\\l4P\E\ Pk1Pf>Pk1Pf>Pk1rPf>Pk1^Pݦݦ>Pkf1=Pݦݦݦ>Pkf1Pݦf>Pkݦ1ݦݦfo>Pkݦ1PfݦݦK>Pk1fݦݦ3>Pk1ݦf=Pk1ݦf=Pk1{ݦݦݦ=PkݦRbݦbfb1Kݦݦݦݦ=PkݦRbݦbݦbfb1Pݦݦݦݦݦ=PkݦRbݦbݦbݦbfb1PfݦݦC=Pk1fݦ=Pk1fݦ<Pk1fݦ<Pk1wfݦ<Pk1cݦݦ<Pkݦf1;fݦݦ<Pkݦ1Pfݦݦ<Pk1fݦݦw<Pk1fݦݦ_<Pk1fݦݦG<Pk1fݦݦ/<Pk1fݦݦ<Pk1fݦݦ;Pk1pfݦݦ;Pk1Xfݦݦ;Pk1@fݦݦ;Pk1(fݦݦ;Pk1fݦݦ;Pk1fݦݦo;Pk1fݦݦW;Pk1fݦݦ?;Pk1fݦݦ';Pk1fݦݦ;Pk1fݦݦ:Pk1hfݦݦݦ;Pkݦ1Cfݦݦ:Pk1,fݦݦ:Pk1k1Pk1Pݦf|:PkˀR1PݦݦfW:Pk呂R1Pݦݦf3:PkR1Pfݦ:Pk1Pf9Pk1nPfݦ9P9Pk1JPfݦ9Pk11Pfݦ9Pk1Pfݦ9Pk1Pfݦx9Pk1Pfݦ`9Pk1PfݦݦG9Pk1fݦݦ/9Pk1fkfV21Pfݦݦ9Pkfݦ021hfkf21VPfݦݦ8Pkfݦ110fu8Pk~R1fY8Pk1PfE8Pk1Pf18Pk1Pf8Pk1Pf 8Pk1Pf7Pk1Pf7Pk1Pf7Pk1vPf7Pk1bPf7Pk1NPf7Pk1:Pf}7Pk1&Pfi7Pk1PfU7Pk1Pݦݦݦr7Pkݦ f 1ݦݦG7Pkݦb fY 1Pfݦ7Pk1Pfݦ'5PO VMS.BCK[V9.BIN]RTT.EXE;1tv\m7Pk1uPݦݦf6Pk1\ݦݦf6Pk1Dfݦ6Pk1-Pfq6Pk1PfݦZ6P6Pk1Pfݦl6Pk1PfݦT6Pk1Pfݦݦ;6Pk1f %6Pkt|Rբ 1,,1fݦ 5Pk1iPB|Rբ 1X+1NPfݦݦ 5Pk14fݦݦ5Pk1f 5Pk{Rբ 1+1fݦ h5Pk1P{Rբ 1j+1Pfݦݦ 35Pk1+1ݦݦ5Pk%+ݦ# f 1fP*1Wݦݦݦ4Pk*ݦf1%Pfݦ4Pk1 Pfݦݦ4Pk1fkf-1PfݦݦW4Pkfݦ-1f4Pk1Pf3Pk1Pfݦ  4Pk1}Pfݦ 3Pk1ePݦݦ3Pkf1EPݦݦݦ3Pkf1"P)1ݦݦf3PkyRb  P)ݦ1f3Pk1Pݦݦ3PkfY1Pݦݦݦ3Pkf61P(1sݦݦf2Pk:yRb  P(ݦ17f}2Pk1&Pfݦ ~2Pk1fݦj2Pk1fݦt2PݦF2Pk1k1PfݦH2Pk1Pf1Pݦݦ$2Pk1Pk1Pfݦݦ2Pk1tfݦ1Pkf+1RPfݦ1Pk19Pf}1Pk1&Pfi1Pݦݦ1Pk1Pfݦx1Pk1Pfݦ`1Pk1PfݦH1Pk1Pfݦ 01Pk1Pݦݦ0Pkf51Pݦݦ0Pkf1_ݦݦݦ0Pkf1>P&1/ݦf0Pk&ݦ1{&1ݦݦfs0Pk&ݦ1ݦݦ-0Pkfi1Pݦݦ+0Pݦ/Pkf91Pfݦݦ/Pk1l%1_fk%1RPݦݦ/Pkݦݦ1$ݦݦݦ/PkݦRbݦbݦb1Pfݦݦg/Pk1fݦݦO/Pkݦj1Pfݦ/PkݦI1Pݦݦ/Pkf)1uPݦݦݦ/Pkf1Tfݦ.Pk1=Pk16PfЦRPfݦ.PRRk1PkݦftR1-f1f-ݦq1Pfo-ݦY1Pf-ݦA1Pfݦ .Pk1uPk1nPݦf-Pk1Wfݦݦ-Pkݦݦ1*Pfݦݦݦ-PkݦRbݦbݦb1fݦݦk-Pkݦݦ|1ݦݦݦݦ_-PkݦWRbݦbfb1f|~ -Pk1fݦ ,Pk1iPfݦ ,Pk1QPk1JPfkݦݦ1-Pfݦݦ,Pkݦݦ1ݦݦݦv,PkݦRbݦbݦbfb1Pfݦݦݦݦ,PkݦURbݦbݦbݦb1ݦݦ+Pkf!1mPݦ+Pkf1Pݦ+Pkf14ݦݦ+Pkf1Pݦݦm+Pkf1Pݦ8+Pkf1ݦ+Pkfp1fwz1f&1fݦݦz1Pf|~ +Pk1|fݦ*Pk1ePfݦ*Pk1MPf*Pk1:Pf}*Pk1&Pf7 Pk1f' Pk1"1Pݦzf1Pݦzf}1PݦVݦdf[1rp1Pfep1Pݦ2ݦ-Rbݦbݦbݦbfb1^Pis1QP^s1FPݦݦݦ؞Rbݦbݦbݦbfb1fߣݦRbݦbݦb1P~~ߦ1fݦݦͦ1Pfݦݦ﹦ݦW1fKPkf?1kf01|k1vPkf1dݦ&ݦf1Cݦ16Pfy$1%Pfi$ݦ1 fݦP$ݦݦ11ݦ&ݦRbݦbfb1Pk1Pfݦ ,(Pk1Pݦݦ'Pkf11}Pq1qP~q1fPЦkݦRbݦbfb1Dfݦݦ'Pkݦ1 fݦݦݦ'Pkݦݦ1Pݦݦݦݦ'PkݦRbݦbfb1ݦݦݦ'PݦJ'PkݦBRbݦbݦbݦbfb1sݦݦݦݦݦݦݦݦݦ 'PkݦRbݦbݦbݦbݦbݦbݦbݦbfb1f|~ &Pk1fݦ t&Pk1Pfݦ \&Pk1Pk1Pfkݦgݦ]1Pݦ|~ "&Pkf>1Pݦݦ %Pkf1gfݦ %Pk1QPfݦ%Pkݦ11Pfݦ%Pk1fݦݦ%Pk1ݦݦݦz%PkݦRbݦbfb1ݦݦݦl%Pkݦݦ,ݦWRbݦbfb1ݦݦݦݦ+%Pkݦ#Rbݦbݦbfb1ZPݦݦݦݦ%PkݦݦݦRbݦbݦbfb1ݦݦݦݦݦ$PkݦRbݦbݦbݦbfb1P?1fݦ$PkP11fݦ#Pk(1|ݦ#Pݦ#Pkݦݦ1EPݦݦ#Pݦ#PkݦRbݦbݦb1f1f#Pk1ݦ0#Pݦ#PݦN#Pkfj1PfW%Pk1f"Pk1Pf"Pk1~Pf"Pk1jPf"Pkl1Pf"Pkl18fcP t"PkݦRbݦbݦb1f I"PkݦRbݦbݦb1Pf"Pk1Pf "Pk1Pf"Pk1f!Pk1Pfݦ!Pk1wfݦ!Pk1cfݦ!Pk1Oݦݦݦ!Pk17ݦݦ!Pk1 f!Pk1 Pfݦ !Pk1Pݦݦݦf!PkݦRbݦbݦb1Pfݦݦ3!Pk1fݦݦ!Pk1fRRݢP Pk1kݦݦ Pkݦf1Cݦݦݦ Pkݦf1ݦݦq Pkݦf1ݦfJ Pkݦ1PЦkݦrfi1Pfݦݦ+ Pk11^iY&XkWLSTinPiRRjTȠS2UePRS VPbФ(R(g1iެ[kSSePxS~eP UdެZjSMPVV1CVPPC5y1P?Pg1g1Pg1PNhiyPiinPiSPRSTPbФ(R(EPg:PVEiE U)Pݤ+i8ڗݏїdjkKPVV1g ȥXd PȹKdhwVfPSzdfPSSSEP$hݤ$aOdݤ$9hfPShfPSSSPfahfVhfE+g'ݤh8͖ݏĖf"ݤP ݤդ^ݤOРRb#ݤPPPRPPݤݤ'{ެUife&SZfRBcSIfCfeդ9e1ݤ Pݤ3ݤユ2P^;SeWueYeXSOUЬsbݥ ݥݥ$3Eݥ,]Pݥ,CFb@PbXeF&Х(Rb<6~ТR%vե4zԥ4mTݥ0Pݥ0y F(PR&PÎݢΔPÒT'PRgTgTgPݥÜpaݥ~P2{;hNPǒPV1ݥRMРRb&ݥ2NPP"PR_NPݥEݥPPi ݥE}ݥ:TixݥTMPVեVF` VePhV  V0v$h4h'P V&vi=VR_TRLݠ4ݥ TRݥ{P-| ^LSPRݬzOPbУ(R( <ۙ+[/\Gum{F!9b>S /D^A&犜&`2Ƣ6_׿Ld=(~]JpGREro/{F |g'S|3bD4 wQ/W:<: 9PO̾'Z"k@2 &8 OJYGrTk)N8[ W-wոӑGNM2 g+`o8>M17IfΚbn]2BkGtgD߻Džɷ," 3\.MS`uEyPG^XMhMZ'zդt)Ĵ'! 4A}IPQ IBQ,Kw9L[&s8}Q EeŃŤ^ fϤ:Kp~#ܪMM @eF#h~XVT -o^s+,IH y!n١_t U@Z` ٳI3KK6S粶0s#|4ApA_.SXpϤs531qgL! t@k-4hfSBj6 \=Dye``ۭm]Zi>3Wr_fMN^buRMDf@ +3}Vxu`UpڳN f[,93ZȩoCϯ/:f=c9p5]x`ABay\OJCr0K#vQ/A2]|Fn Wk͜HPw2wC#\?No8{sZdUAy7(NK**>73 \6G k PV,RYVPG&eꂿ܊~*B{G_1"6 R:ȿ~?(uf`;=.ntQr'C'*p &dH&Wg-Sl2ϵUbA,CxeRrn5ZAĨ8jOSٗ| MsB~t8r{7%a{ףF)k#Aezr/\ <θѰ :%7$٣ /x4ȗk=)T` @OŽU3`R[(g8'诃yWC/Ca,{ !$.`j+ n+?nqڥFA6U<>YIڵ+>bkh6K63h%8 Xד?[Hqez& @d1biҖ&8AR(;AF>R2;"'jX-FܳӱҜO"t\P{\_{95):]n=ԨR&I)IaFrJ5=;I@ ǝAhT!d: IewFij_4d_c7d _$PȰ*9rخ Oeڀ*,Kg+zL|gIEPC#yI_/(sQsWn Eژǰԗ!]p´ĚSb~[0Tӊ "2y~YRKn_TXSm%59cաwSJ ]Eg;@ sB<]M3jʸŻޞQ9}at@&jcgN1 TFPUr@{ť{+NE8Jɠ_*2 P>wʇ%g/! O)Nb$ 6*.$5,iLFX IlF3NoO k ^KKߴ'ԅ~/4"KWK>'ncoJӿ@`l%~^R޹V{J2L&IfWbw)id5.eE{Slj@*ƮҤ)A1b 1ɮQlMSl `dek}rE rO@{)Z/̱F  ~hTQ͛@sN;kN}?[!*eD]h*|۠K.]Y-@ߩXHܴ.W:v/;r@o<%ڭsW7]w#m;OjQ6GdR @&*7)V=S[^0 Qvx,߼bW'A5s/2u|v~ ,i0r ʊc s:h;`ޱH*24l2|q=X<|TUdv8Om}ʽB5#-NzT?3i# 2;󴅣n4އWŜ} I=!Ť-Vwqd=%[4]-.Y[-4wS ^MCf?mSOhsL`hNMv&a֧]ZRKȝj{H誗VVl/S̅VzfpoVěۭEXf_SX=oD(fLbe>1s J z(CY!^j& =#,5_Hi`8E /qi: !PT#\Hsd# Ux՛Lv DTڝܫBU/':lE]0(=WZx,셱?uM惱> R<܋C6"$7- ڸ qꙚ!~moxKE#~?L)~)cHEmb}!:3ð1^Igv29F);XvV>'ɔNw."]squ$ؙN*AFp~Ex(\P2 >79W߹CAM̚ho!Nig.U҇-EBiHA.Yp!٠=b^ sAT/*oP9욤{U~ NJSrYW`F2Hlcp.J=@+].14MfT?_lqA16OpGiW=_o Ys$ˑydLv{T?k"^yz(P*;X( chrBg[Ïb#c~N9$rƍ'8]9F{%*2/rD2W8:H\.PKf}WDsAvsT mm QaFcx \[5gdri(̗]Ixl'MC u'Э{0V^][&9.ZFکCtKkxq2ށ~_>{%6|#҄@JB߇63t"ЀZўԟ`n!<3Zz meٽU]= bjÎl39ѨB2l*jtڵ@BnLQig+U0l*GJ7ݵv̤q}ү d &"eeZpG{9cs!>2:Om'U@8{VDf \xTDjߒF6/fp e "ݢROPc 8:C'']:ycܒAE<R! <\wg;xw'n3k>0 C- im74IGDŽ Z%: ⑅"W#8_>eI+Í5+q2j {!X^ӁĞޥ!XW 1ȥ>pYu&q0-vB %'_).ehu~c\b" V P*vtiDkAfoOC)aX'1IGJ] W E4d5UVŴciNCLtG>cU+.Z! sws,t3JkOlzo8ރb"{NmkMA>Q+C]٧5alSԒN'OK hlT#}ۯ1EdF(&_{'/,QoL4qʗYd/ێgF@I_i()t!2)Z̼kW~̩Bw3kwߞbpvDMԢ+Jە[ [^B$]Yi҄/s&Bdǡe"<2qm4Kzo{x†M $}Pqdny vTY qre -" ,Y^̭"~kBٕ={0nNj-Pd-wzxFNfZ[9_i:xYV~%Zl|&Ѫ)Ivg6Rq wyG^tqT)XcoGe?l;'w u-7B #GüS[xNX YU|ʞ9HqTnm#WTmɁpe ᓥ("[/*%fY,qT c}ga@:jZ BOYbVsD0HK#$N)\ rP7=6z?KJu7z ϑP N{m96p< ywrxwlG"y" &“չyv 2Z<{35Hi[׍-%zkǜFuOw!=9x&B7RJC솙ɰ쵻瘌ٓ?1ՍE,@B Y,`-[8N<&vxasILjx#/`(X~K0'|,܇;s?f^Hi}#\2˦΋vac% E߳*8hR^:Z? v 4PάH{|ɓ2G=.%! thiU/,$5HF(s<%ްӃp!-3۳m9^f Τ2D:*QtyJ&̔ tiE!j%?)*0 />IЏ]EWA5Rx=25Nj!I9U>՛ QrA*W f*ܜq}ppެ:ͷKE$lan)=iL-{hvG'Ve.0ŲZp9?G%.xCUz9?(B8{B)N[(9F*M kpȠVÉ,=?> C!̹MeJ;.K n)g]+ /QKݯq7Rj-d fQk8:$P{%pm*$ܚp DziǝccȄz2i@v9XLSsZTI[]Ym'lfXŏ 0Y]]QW9cvef0/U)-N%#< x= j}F,,Ro̅G)bq%A(i"5r>Jܬ0-Lv7~oJCcbGxo˕}_b4{~rst"j[zQ hLyۊeB:Y([˹~(x WyZb gjTǺy cY S҂IQ5+.H1<ɶ#4lXm+5%Mj6r^<"gя~y x:*''l>Vdc7I|rhU7C$K)t!H',NJ;uI2~ laur-DPg, ٫IN`q/Kxw>hr0;0eX (Ӱ9!v2Z |ͯVldqB3}㝥Ձ>Yџ L YʲեS.:ĉa1Ãt5KMt:YChz`g0 ;ګµ`۟rX\9RU%tQ&㍳qoҋXGabҵG]MR`iRb͈PD%vu{[ mZjeo 2?!8LKȀi6țE~%dh$'2qa^K VMS.BCK[V9.BIN]RTT.EXE;1tO/|^) SVLRݬKݠ4ݢ zլݬݢ<{P{P^ R L\c8U.ݏ% ^ S&RFݬYݬR,^ U^cWaX^YaVKR1IahNScPqaߥcP<(~v Tdߥ cP~dߥAcP<9~dߥFcP<&~dߥMcP<1~dߥScPcPQlQL,RЬP`u`UP< SP< S< SPݠP;SPP^YƪVϊTDZRPfPR+b"fPfPR bfPNZ7Ѷ*1zP&`*!P<#fRFPfXh[[ݨP1`1[1Ш\l01\lx lX1\lRRRBd\lRRRBdfW\ScPPuPU SclcL S< U:< U2PlPL ScucU S< U< U< UcfRݢRUg1PSlRRRBd\lRRRBdl.#S\lRRRBdP\lRRRBdlelE0S\l+l-\lRRRBdP\lRRRBdS1lR1~XRFsRPPFPhhhhh\~?PPfGPf'?????3/PR?P<1P<1P<1PfRݢRy1PfRТRb0R\l0l7P\l0l7fW\ScPPuPUSclcL S< U9< U2PlPL ScucU S< U< U< UcfRݢRUg1?P[Xi{,W1[}1ШRb1bRBj13PRfPР\l!Ѣ  bXCТP֢l`\lPSaУ\lWl\LjOPУ\l Ѣ  bCТP֢l`\lSPS \Lj<$fSRCPRX/PfSc!ccRBjݣ/SжP|^RVAT\S\SRbRSﲄPfPRbfRԢTBPTXpBPX7USdRb\լ(PЬ4b\cb\լ(RUfRfRԢ ^ެTQdPЏSSSPSQPQP{SPPQA ARѢdRPТ4RP^TTQЬPЏSSSPSQPQP{SPPQA@RbPѠ(PbP4RbPѠ(bP_Ѡ(XbPѠ:Ѭ6`S `6Ѭ  bPѠbPѠ(PbP4RbPѠ(8PQЬaЬЬ Ь(0$ԡ,Ѭ  dPdP b4QQP<^UЬRݢ<~PTݢߥR=ЬRR PSѣTݢߥ+RSP^YPRg`| bP ^-PY^?WiRbZRSТiS[йVZV1Xo U@TgSc\AѬ(V;Ь4c\Rע0#ТPP?Pݢ eRdc\Ѭ(VSXMTRZSRѢ SԢТR^լPЬPѠ ԠРP^ЬQס02СPPPb?PЬPݠ  ݬhP^SRѬ 4bPՠѠРP ՠѠP Ь `PbQ`a`ЬѬ  ЬPԠЬ bPbРP^9S\PЬR\R\SP^ЬP` 6РQ-ЬPаPPSPZ?PPP ^NSRR`| cPcP\l|R<~Ԡ <^-TMUмPP D8 ,?PЬPРЬPР ЬPРЬPРRb b6:ePѠ <6SP<S`ݢScPݢߤHRP|^uU MVfPՠ fQСPP1P ?PЬRТSТ TdѴѴ6 ߥYݤ"fPѠS(ߥxݤPScŗݤfRbݢФRݢ<~PSФRݢŶRfPРЬ fRbݬݢ P fPРfRS֣0ScPP 91!)P ?PУSPУ SPУSPУRb b6:fPѠ <6TP<T`ݢTPݢߥHR$P|^U^KVfPՠ  ffRԢ fPРRѢ HЬRТ ScPP 91!)P*?PУSPУ SPУSPУRb b6:fPѠ <6TP<T`ݢTPݢߥHRDP ^WMXNYiRV VլZЬSVUTRJP`Tݣ<~nPRݣSU ԢԢihPhP$Ri֢0լZЬSVU TIP`Tݣ<~PRݣSzU ԢԢihPhP$Ri֢0<^TLUIP`ݬ ЬSݣ<~PRݣSЬ ԢԢLePeP$RL0<^T:LULQСPѠ ݬwLPȏ@HP`ЬRݢ<~PSݢKRmePeP$SMSP0^լЬP"`PЬRݢ ТЬRbݬ ^լЬPРSР RbSݢ ТRbSR^)HWV7VXЬRbѲ= Т XТUePP 91!)P?PХUPХ UPХUPХP` `6eРTQTPЏSSSPSQPQP{SPPQAfRѢTRP Т4RPPRЬ ЬX֢0gRg^5G\*G\^GTJ6RЬPРSPSXdPdPԠdPdPS ^5S6RЬPѠT \ݬxFPFPԠ^xЬ`Ь^ xЬ`ЬЬ ^bxЬ`ЬЬ  ^>xЬ`ЬЬ Ь Ь^xЬ`ЬЬ Ь ЬЬ ^ЬSݣPR" w `SR֢0Ѣ RwRS^wPQaЬЬlEPР Ь QP^)WЬPРP`SߧݠgP*ЬPРQ$?HP@WEPѡ`ߧ<ݡߧ QЬ PРP`Uߧ[ݠߧ>PݬЬTThRbݬ TbݬЬ SSbݬ SbTRbݬbSbRSЬTЬUЬ$VvR`STU VPXRЬSЬTЬ UXVbvR`STU V|^VЬUݥPR) $v `UR֢0Ѣ PTPRUSuR`SPTTSУRТ RRF.RTH%RCR&HЬPݠߦ]PASP^YTլмPPz.B1P?PЬRݢ1PЬSݣУ RRPТRPRЬRݢnYЬRݢ^ЬRݢPЬRݢ BЬRݢ4PߤpvuݏuЬRݢaRu^FTE4d uERެSRcd muRRcEP^U^EVSBWETME1ߥdWЬSh)d BriRSPd -rRRShWߦ"d.rݥߦFdrhե1ަSWЬSh(d qiRSd qRRShWߦ"dqhަWSh)d qiRSPd qRRShWߦ"dq,^SAW/XլLЬU×RUϙRߣ"gLqTdЬRU}Rߣ"gdâRUgRߣ"gdЬTPЬVçRVDRߣ"gpUeФRV(Rߣ"geêRVRߣ"gecPդ /ШRݬRߣ"gpݤ ìgp0PóRݬRߣ"gup ~ûgcpЬ RݬϗRߣ"gIpլÿRݬwRߣ"g)p ^QSb@Wk.VЬRТUݬUТTˏQ1pQPPiiiiiiiiiiiiiiiiiiiiiii ?PPP1PP               ?PݬTPݬTϬPݬݤTϗPФPP|0D|||`jP:?PݬT`PݬTLPݬݤ gnPݬݤ gnPݥUPRݬϷRߣ"gjnRbդ ݤ ݦgb ~gb*RݬsRߣ"g%no>Pݠ 6gnЦ Rݬ@Rߣ"gmФRݬ$Rߣ"gm:RݬRߣ"gmФRݬRߣ"gm=RݬRߣ"gzm<^UլPЬRb Ѳ)PмPP-GGMU]MMMGM--1MGCP^?PTRTЬRݢP@PT7T1PT)PT!P?llݏlST#ЬRxSP@P`4PPSSTPP|^SVݬ, V2#PW]:1hMSchV^cVЬUU TdVbcVUdV~ch”chV®cVUdV±chchVVݬm VdVWSЬ TSL¸T;PSPTƾ S S:QP$SP@ P`QQݬ^yTмPP DV       $1PZ?PݬЬRݢ ݬݢ PݬPЬSSuSЬRݢwPRSWRPЬRѲ)=ЬSSݢKPaS*Sݢ  S7ЬSSݢSSݢ  SP 6^MT68X38WЬ P` РPBݬ&ЬRRݬUVR߭ݬݬP\R~OЬPPO3g+#WP?PUGPU?PV7PgRgRĀ7XgPhRhRč7RPЬSSZ-SЬRݢSų Pݬݬ Pj(1jPP(wZ P.?PP[1VP 11$P71P7<<}p}}}}}}}}AX1VP?PЬSSЬRݢSŵ Sݢ Sŷ PЬSSZSЬRݢSŹ Sݢ PЬSSЬRݢSŻ Sݢ sSZϚТSУR@ݢX TTdP$УRݢ_ dPУRݢh dPRPRRPЬTTZT: cTݢ fT< cTݢfPЬTTZT@ VfTXXЬRݢWgTC fXݢ gPSТRS9kTF fbѲ=TRgPSPXRgPSSPݬEЬRݢݢ ݢݬЬRݢݢ ݢ1PZPPjPPBP?PЬSSZSL TdSЬRݢVfSO dSݢ fSR dSݢfSU dЩ,TS~ݢfբ  թ,RRT,RPݬЬRݢݢݢ ݢ0PZvPP^TЬRТP<ݠX yLScP$ТPݠ_ cPТPݠh cPP2P ^Pv\ SxS~JPQRSxR\LaP`L\lRRSQP ^5S*PУ QxQQЬPA`RbARbУSP ^S*PУ QxQQЬPA`RУbARУbУSP ^S*PУ QxQQЬRAbPȣ`APȣ`УSP^PPԠԠРPP<^AW ZKX<>R VxV~IPUTVxTRBeScBRbTTVUXXnXUT&PФ SxSSCeRФbCRФbФTX;R VxV~=IPTUVxURBdScBRbUUVTXXԭլ  PԮЬ1]. D[YЮRТ XЮTФS1ݣ PVУ PVTРUTLǸUk7PTP Uk T TQP$TP@ RbQQpX ݬo i*խԭPuݬt iݬz iX~У PݠݬV VԭPVO ԬP֭УS1 X1RR iRЮ$Rݢ ޼RbP6ЮSR%Т QxQQAcPȢ`APȢ`ТR~ǃ inSR%Т QxQQAcP`AP`ТRЮRТ1NխUլ 1*ݬDž @SSݬ ޼RbP"Snj 1Pխݬǎ խլ{RRЬSSǔ VTdSǖ dSRRݬ,Sǝ dR dݭ cGpݬ RRݬR }.Ь1V+=[XЮRТ YЮ SУT1ݤ PVФ PVSРUSLǸUk7PSP Uk S SQP$SP@ RbQQeYVT:{ hk~ hX hHRR* hRݭhR2 hФT1,Y1SSЮ(Rݢ ޼RbPGS5 hЮSQ&PС RxRRBcPȡ`BPȡ`СQnSR%Т QxQQAcP`AP`ТRЮRТ1^լ 1[~< Dխլ(E ݭG XE~ݬ ޼RbP5ЮU+S$У TxTTDeRȣbDRȣbУSnUT%Ф SxSSCeRbCRbФT~\  խլDլ (j^ ݭ` 5DB~u +ЮU]T&PФ SxSSCeRȤbCRȤbФTЮU*S'PУ TxTTDeRbDRbУSn nCծ ݮCP^TЬP`ѰР Ѽ ѼPЬPРRР QРSPЬPРRР QРSPa  СPRc'P P:?PSТPݠ !w BB BB| ^Uݬ CTdSSЬRݢXS dSݢχPVVAS dmЬ SQ$С RxRRBcPȡ`BPȡ`СQЬSnR'PТ QxQQAcP`AP`ТRVP^W,[լPЬRТZbPP '=  = = = = = = = P?Pj!1 1j{1 5jY1 jPPY ?Pլ ݬZ= PݬZݬЬRݢ-PRլ ݬ RPݬZݬЬRݢPݬ ݬЬRݢlPRkQPԡԡСQRPPj1 VjG1 jPPGP?PݬЬRݢ ݢZkQPԡԡСQPЬRݢϰЬSSݢ:V V1:TPЬRТЭRb AТЭRբ3ТPP+++ ?PP  ЭRѢ(ԭݬݭЬRݢݢ ݭϒݬЬRݢݢ ݢPZcPkSKPkR x~?8Pԭխ#QxP@aRb@Rb֭ѭЭSSXXSkQ'С xP@cRСb@RСbСQkSPPkR |x|~7Pxԭ|$xQxP@aRb@Rb֭ѭ|xSS{] VMS.BCK[V9.BIN]RTT.EXE;1tYkSTPkR pxp~]7Pltp&lQxtP@aRb@RbttplSS8VЬSУUZ|PPR< bE RGPЬRRZRI TdR|~ݣ~ZϼRN dR|~ݣ ~ZϡRS dR~ݥϷP3VYSkQ(С hxhRBcPȡ`BPȡ`СQ}V TdfXYЬSSZ?Paݬcgݬc lݬcTTPPxTRЬPBRbݬPtݬ ЬS~zݬ У PP,<jjjjjLjjjjjjj\HP?P~ݬ .Ɓݬ Ƅݬz Ƈݬj ЬRݢЬSSϺբƊSD PƍS3 ެXhRݢƐެWgUU ScݢƔUcТ TTƘUcSTTTRTR1RSPSxPP@P`gϹTPTPPƜЬSS ЬRݢS!ݢSPƣݬ ЬRݢݬPƫݬb ЬRݢݬPƲЬSS@ TdЬRݢSϲѢ ƵSdPݢƸSdPƽЬSS ЬRݢSmݢScPЬSS ЬRݢSAݢS7PЬSS ЬRݢSݢS PެUeSSp ެWgRݢSТTTSL STRTREЧRSPSxPP@P`eϩTPTPPݬ ЬRݢݬϷP^QZެnоRݢެWgZТ[[gVX[pUYVRVxRRBRbTTYVPVxPP@P`SRTBcg+RRTVRVxRRBRbYXX[VPP ^SЬRRݬ"RPP ueUE5%?PݬݬݬݬݬݬݬݬrݬbݬR ݬB ݬ2ݬ"ݬ^iUլݬݬլ1WPмPP,|,< (<h|1P?PЬSrTЬRTwSgբ ݢ{SgѢ~Sg1;PݢŁSg1*ЬSmTЬRTwSgբ ݢ{SgѢ~Sg1PݢŁSg1ЬStTЬRTwSgբ ݢ{SgѢ~Sg1PݢŁSg1"ݬg1|P'ݬg1lP,ݬgЬVЬTݤV,SC SSCSśVgRB1"BV)RR1 B1P2ݬgЬVЬTݤVSC SSCSśVgRB1BVRR1B1P9ݬg1P@ݬg}ЬRݢHݬgjRЬSSgЬRݢSaݢZSg@PЬRݢ^ݬg*gݬgkݬgЬRݢoݬgЬRТ1Er ^]SݬwݬЬ Pՠݠ{ݬЬ RѢ~ݬÁ^R…ݬ}P‡ݬj‰ݬW‹ݬFݬ3ݬ"‘ݬ“ݬլ #•ݬ—ݬ™|^VЬRݢݬeSCSS ЬPCSƛެUe|RެTdSB SBeMRR dPB^мQмPݠ9 ^мSмRݢ ݣ PQâPQPP^]YɟݬS:Gx1~P[TDUQPSPSQ@kСQTT/S[qXS1ZHkRբ|bɯݬjЬVТTBUTUW?PUݤVϔPUd4PRUR VjBUdVjRUWWRR ɷݬjݬjXXS1qݬ= [^мQмPݠ^WլЬ PЬPЬUРSЬ TSTVETݣUPTcePRTRU_BTcULRTVV ݼ*PRѬ Rݬ"B ݼ R P^]VXݬPWݬ,WYUTIS%УRPbeݠWdТRУSYY/WPݬV^R<[¼bݬ6P¼^ɽR<\wݬP^mXYVЬRТUR}YЬTTUbPRRG~PRˏUWGdb[FSKSSݬIUԢ RGd֬ RT~PVXTTDcTPxPP@R|~ݣ ~PbХPݠMP>УSTTcХRݢgRp>|~S5P 9P4PPV|~ЬRݢ P|~ݢ PVPP ^Sլլ $P@RբÂbݬ=լѢÚbݬ=P^bYrZo[館WԭլPЬRТXbPP (9C~7 1e  ?PhEZQhaOhPPa %DDDDDDDDDDD1(?PլPլPPPh&1hPP&p= P?PP1P00 P^?PP<1P< ^w,*?PP`e1bլFЬRТSc2УR,bPPS!?PgPgPgݬ|~ݬЬRݢQPլHЬRТSc4УR.bPPS#P?PgPgPgݬ|~ݬЬRݢPݬݬݬ ݬЬRݢݬݬЬRݢϺPլݬ|~ݬЬRݢϝPݬݬЬRݢςPݬ|~ݬЬRݢjݬ|~ݬЬRݢQPݬ|~ݬЬRݢ:Ph;ݬ|~ݬЬRݢݬݬЬRݢݬ|~ݬЬRݢPլPЬRТSУTT p;Pѣ(3T*ɏT S`PȬ ,Ph(1hPP(Dsu P?PP[1[nP1MP r?PP;1P; 91P6?Pݬݬ ݬЬRݢϱݬ|~ݬݢ ϡPݬ|~ݬЬSݣωУRb ТRbb"Ѳ3ݬݬЬRݢ Rݬ|~ݬЬRݢ <Pݬ|~ݬЬRݢ$ݬ|~ݬݢ ݢʕݬ|~ݬЬRݢݬ|~ݬݢ ݬ|~ݬЬRݢݬ|~߭ݢ ϼȭPЬRТSݬ|~ݬSϠݬ|~߭ݢ ϐc'УRb ݢPխPPݬ|~߭ЬRݢLݬ|~ݬݢ <PЬSS|~ݬЬRݢ!S|~ݬݢ SPݬݬЬRݢݬ|~ݬݢ Pݬ|~ݬЬRݢݬ|~ݬݢ ϹPݬ|~ݬЬRݢϡݬ|~ݬݢ ϑPЬTT|~ЬSSЬRݢsPT|~Sݢ aԧT|~Sݢ OPPPPݬ|~ݬЬRݢ2PSݬ|~ݬݢ SSSPЬRТTVPd Ф SФTTSTУ S5c У RУSSRSbѲ=ݬ|~ݬݢ STЬSУ RPݬ|~ݬݢ ϜТRݬ|~ݬЬRݢςh=1/hPP= $$$$$$$$$$$6 P?PPi11լ)ЬRТRbѲW ѲXkjݬ|~ݬЬRݢ ݬݬݢPЬUU|~ЬTTЬRݢU|~Tݢ ϴPSU|~TݢϣSPެVf|~ެUeЬRݢυTТ SУ RТ Rf|~eRgPTУSݬ|~ݬЬRݢ  VMS.BCK[V9.BIN]RTT.EXE;1t\JTPЬTT|~ЬSSЬRݢ,T|~Sݢ T|~SݢPhJmլ,ЬRТRbѲWѲX  PkjЬTT|~ЬSSЬRݢ ϸT|~SݢϪTSݢϚPЬTT|~ЬSSЬRݢ|T|~Sݢ nT|~Sݢ`T|~߭ݢQբ խPP3^լмPP %%1111%1EPj?PЬRݢЬRݢݢ ЬPР RP(~ݢ ݢZP ТRЬRݢtТ RZ(~c(ZPЬRݢLݢ Dݢ<PЬRݢ,ݢ $ݢݢP^RЬP`+РQ%aPPSPz?Pbbb^wXxSS  0k=S9 a[-SzԨRݢЬRݢr2S,#PPRРRwYЬSУRТnТ߫իǫォ→|׬|~߭R%P S~~~G~ ߭(*߭HPP-ݮ  PZݮ/Z2 ݮ3ӽS[TTSˏTRSTSծ  T5SS 﫧$RRR R P ʫ!f]匿}xRR~PWԧj& j|; YPP?Sxxxxxgxxxxxxx+V?PH:M&X`کARݢﯪ~浪~~r~iPЮ@=US4dTPcRʏUU wdݢdУSծ V*"UU zd}rd$UUPȄSdȇFd$UUPȎ'dȑdU ȘdțcȤcTZ1 jTФ[Ԯդ1,ФPP$$$$$$$$$$$$$$$$$$$$$$$$$ ?PPP1PPXX1P?P[YPYxPP@RTȦ Pb1r[YPYxPP@RTȬ Pb1JФPP@h1.*?P[YPYxPP@RTȲ Pb1[YPYxPP@RTȸ Pb1jPՠ,ծ [YPYxPP@RT[Ⱦ Pb1jPՠ,ծ [YPYxPP@RT[ Pb1q1nYPYxPP@RT Pb1IYPYxPP@RT Pb1%ԭ߭ݤ PФSUcPP 9!1?Pգ*UUݣ nPVtUB&U);UPP)&?PP[VCV>Pݣ*UݣPVPݳݣPV U+VRծR jPՠ,ծ [խ[ݤФPР Pݠ{+YPYxPP@RT[PbYPYxPP@RjPݠ,Tݮ[Pb[ȏЪZ1ծ Tڤ7`襤ﺤ`._Pﭙ;_4R_ ݮvqݮ vծ 9MTf_ӣﵠkI_ﶣ~5_ۣPݮȁ*ݮ @RbPТȠ,Ԡ,ТRծ WP^nTЬScݬݣPRݬݣ RPc1гPP%00HOqP?PЬPРPݠďP)PıЬRТPݠScP$ĶТPݠcPļТPݠcPPPP2P<^mUмPP =$1P2?PЬPՠ*Р RЬSbPP <$1P?Pբ*SSݢ vPTtSB&S);SPP)&?PP[TCT>Pݢ&Sݢ PTPݲݢ PT ]'TPլE*Ѭ)=ЬPP)# P>?PP[PPЬPݠ;&ЬPРRЬSbPP <$1P?Pբ*SSݢ fPTtSB&S);SPP)&?PP[TCT>Pݢ%SݢPTPݲݢPT M&TPЬPРRаSbPP :"1?Pբ*SSݢ ϢPTtSB&S);SPP)&?PP[TCT>Pݢ$SݢLPTPݲݢ9PT %TPz%^QЬPP'$Z?PQPQPQQ ЬPРPQP^ЬP`$ѰW ѰX "^ЬPPЬPѬP2P^)R|( $ݬݬϸ P^nTS|( $ݬYݬNլdYߤ6Ь RݢYݢߤY R P^umTZS|( $ЬRݢ ߤDYߤϰլ ݢ8P|~ݢp|~ݢϪߤ  YwϾ P<^lTѼ )PЬRݢo|~ݢ\Т Ѽ мPPU)R?Pߤ XUeߤЬSУRݢeУRݢߤeߤߤTXߤЬRݢHߤ4XߤϠPЬRѲ)Jݢߤ Xߤ vݢ n|~ݢ ~ߤ"Wߤ$Jݢߤ&Wߤ(,ݢ n|~ݢ 4ߤ*Wߤ,P ^qkSVR|( $լߣ.ݬݬݬ ϟլߣ1Ϫ P ^kSR|( $|~ݬψߣ3`|~ݬvլ ߣ5I|~ݬ _ߣ97~ P^\|( $^iRЬQ Pѡѡ (ЬP^EjS*RЬQPѡѡ (QЬQСTaPP2zzzJbjP?Pߣ;aT[ߣ=TPߣ?ITCߣB<PߣD1T+ߣF$PߣHTߣK PT< ^uiUZR( SCb  (ߥMʕ1PlT$SlP$PР$РPT$Q$PAQ$PԠ$PԠP@b$SbPSЬP֬`Cb1m ^RS$\P$\Ь$Ь\ԬS$Q$\AQ$\Ԭ$\Ԭ\Lb$\b)P ^)hTR(ߤOϓlS$\DP$\Ь$Ь\S$Q$\AQ$\Ԭ$\Ԭ\Lb$\bP^R[ЬT$SP$PР$РPԠT$Q$PAQ$P$P ^!R$SnP$PР$РPԠЬ$Q$PAQ$P$P ^ɌR$SլݬJ|~ݬ`լ ݬ 3zS$SPРSSP<^fUrTЬSգ$@լ Ͻ$PЬRТ$լ1$RޥPУPP4T1P?Pq$SЬRТ PY$SЬRТ ߥRcPЬRբߥ^OݢGߥi?$PЬRТ ߥn"բ9ߥzլ   P$RPЬRݢP ^UeTbY[ﰒX%UլЬRТZbPP 'k7  [ g?  P?PjD10jPPD  P?PPa1Pa (1PR?PムP#((ZS2Vi]ݣS7i1 V1 i1 iV$VP@Rb1 iV1z ĀݣS"P#(E(P0P,PZij&1jPP&u9 R?PP{11P1wP''ooooooooooooooooook P?PPC1,PCh$$ P?PP`1Zϱߤ|y|~ЬRݢϋߤ~cPZω|~ЬRݢkĀBЬRТRТRݢ PΏP#ЬRݢZ ﲏP#ЬRݢZ Zݬ ݬЬRݢĂZЬRݢZլ |~ЬRݢϺЬRݢϨPZϭ|~ЬRݢϏPj;|~ЬRݢyPЬRݢdZmZe|~ЬRݢGĄЬRТSRѣѣ (SݬЬRݢPj(1jPP( m  P?PP[11P 1P  Pr?PP71pP7hhhhhhhhhh1A.?PݬЬRݢĆ|~ݢ ĈPZ|~ЬK VMS.BCK[V9.BIN]RTT.EXE;1tcSݣĊϦУRb ТRbbѲ3ЬRݢ ϔP|~ЬRݢ ς|~ЬRݢrČI|~ݢ _ZhPZ]Ď$|~ЬRݢ6բ 1Đ|~ݢ ē|~ЬRݢĕ|~ݢ ZPЬSУRТRݢ  |~ݣ ėZP0S,VkRkR,kRkR0, 0ЬRݢG |~ݢ q, 0ϛ S0V,0S,VkRkR,kRkR0,i |~ЬRݢ,ݢ  0D S0V,ݬЬRݢZ|~ݢ |~ЬRݢZ|~ݢ ϹϏ|~ЬRݢϡբ  sg|~ݢ }TP#((PЬRݢ^PWТ VWd |~V$PWO|~VPW1m=ISc轢*ϝ|~Vϴ.ϋ|~VϢJyr`cbvY|~VpyG@ďc0PĦ#|~V:ĩТRݢWmQPķЬRݢĹZĻ|~ݢ |~ЬRݢĽϥZĿϕ|~ݢ ϫP|~ЬRݢϚq|~ݢ χP|~ЬRݢv|~ݢ lP|~ЬRݢZZc*|~ݢ @P|~ЬRݢ.բ 1|~ݢ PЬRТS( Ϻ(|~SЬPР RlPբ _ϐ$PТ ТPP*+P?Pσw k|~ݢ ρXТR|~ЬRݢdS1)( (Pj?1Nj=1jPP=  P?PPi1P|~ЬRݢϵZϥ|~ݢ ϻϒ|~ݢϨPЬRТ WТVkSkVSݢO|~WzSϯPSݢ0|~V[kRkRSτ|~W?RtPZ/PЬRݢݢ ݢPjPPBP?P0V,WkSkkRkR,kRkR0|~ЬRݢϳ5ϊSТ R 0R\|~ЬRݢς,ϵ|~ݢo7FS0ϒV0W,PЬRݢݢݢ ݢP ^XSݬ2PR߭ݬ RRP9RR"ϟ;϶ύ>ϤAϛ|~ݬϱDψլ 4խ Hu|~ݬ ϋխK] POORFݬZU1$^WVﲄXkZWu}T(ݬЬ P` РPѠ $PЬ Ue1ХQ1aPPS81P?P$P$RЬ PݠPЬRHSh]ݢR hAS8h/hS $SP@P`hSƀݢRt $P$RЬ PݠύPЬRSh]ݢR- hAS8h/hS $SP@P`hSƀݢR $P$RЬ PݠPЬRSh]ݢR hAS8h/hS $SP@P`hSƀݢRR 1!Pe1ѵ)1ХQХ Ua 1бPPMT1?PСPР Y$PY$YP@ QaPP/1P?P$RUP1Y/$RݥP$Rݥ P1PYj1$Pj$RХPݠϒP$RХPݠ yP$Rݥ dP ЬRjSh]ݢR hAS8h/hS $SP@P`hSƀݢR ЬRYSh]ݢR hAS8h/hS $SP@P`hSƀݢRT $P $RUrPЬRSh]ݢR hAS8h/hS $SP@P`hSƀݢR $P $RݥP$Rݥ PЬRSh]ݢRx hAS8h/hS $SP@P`hSƀݢR. $P $Rݬ KPЬR2Sh]ݢRhAS8h/hS $SP@P`hSƀݢRP^wR( $PЬ(^QTnwR( լ$S[ݬXoP$SݬWP$PЬ (^wR( l$PЬ(^PS}TO~Rd]ЬPݠPdѬ ddլ$P@P`dÀЬPݠPM^ЬRb"ݬ ݬݢݬ ݬݢ bWвPP%+++++,,,,,,,,,++ ?PݬݬRլ '|~ݬρݬRRլ  |~Rd^]R[knYW @CPS1ެXZ C1У VnYV1W h jYWծ YVn h jY UУTc1dRR  R R 1d UUT֣ VTdTUPRS W ݬ ѣ  ѣSUSURSУTУ VcdPP 1{P 1sP 1k~1nYV YRRVnVV~߫h PV߫ hУRb#b"b\ h\~jhb~jRb߫h V ߫h W #PYVPh jYW WYVUݥ߫hUW WУ YУncfУRb1Phb~jbQQ Pݣ߫$h.Pݣ߫*hPݣ߫/hPݣ߫5hWԮ SPS11W ݬ ^M~RТ[kYЫ SЫT|WLЫ yxRyR R||ZY|PRRCYgPU5Pggmy|VVFZZR|VЦRЦUGyb|S7|1hXPR\URYPUW\?1R?1 VUPP!xhP`XpHNP?P#V?P[V6P\V.P]V&P^VP{VP|VP}VP~VV V\YhPRRYhPUW\\/R *ZU\\YhPRRYhPUWW1\!Sxѣ  cSzS\ Z\ZSz1zSRzSU< ^mqRЬPРUР TЬSƪcSTU{L|bݲ:bPРbݏ\P^pRfݬ ݬݬl{L@bݲ֩bPРbݏP ^YLSpRݬ{ߣީbPݲrbPРbݏP ^KW.pRЬPРVР UЬTЬ S STUVzߧ"a:bPݲbPРbݏP ^yKSoRݬݬ ݬݬzߣ"ΨbPݲbPРbݏP ^ KSFoRLݬݬyߣ>hbݲ&bPРbݏHP ^JXnRЬPРWР VЬUЬ TЬS3ЧSTUVW8yߨHbݲbPРbݏȧP ^)JSbnR˧hݬݬݬ ݬݬxߣH{bPݲ6bPРbݏXP^ݬmPm^mRbݲb\Ьb^ ڥЬ`ЬЬ Ь Ь|^瘟Ь`ЬЬ Ь |^լPzPV(VP^^Ь^FЬ^(/TdPRx SSdP SdPЬ ЬЬbԢԢ$ RP^ЬQQ`ЬЬ С ^ ᄂЬ`ЬЬ ^P\\a\PP^vRwPQЬaԡмԡbP` РPubQ^լ ݬhP ^լмR RJЬRТS!cR R2ݣSݬ^լЬPРRݢR ^ЬPנЬPР RݢRЬRТS!cR Rݣ.S~^լЬRݢRSףIУ Rݢ7RBУT!dR R.ݤTS^ݬ^ݬ$^-uYѹiXШiiSc$УRТ pУRТsУRТsШRbRݢeFRhh#1ШRb b_Rj1PШTդzSdRS[JWV<UPCRb\\gݢfReCRb\\gݢfReSd\SݤݤdRעdSףIУ RݢRУ\!hƆ= VMS.BCK[V9.BIN]RTT.EXE;1telR Rݬ8\STXx ^QES iR r E^ޢ \ll^Pl\lߣ`ߣ^^P<~(Pqߣcߣa^P<~Pr^hPޠ QaaPQaaP^qRb\l=\bbuqPP^eDWRqXoqVpsY hUfRbTT "T T T T T/Ѣ*P nfSSЬRCeT e<ZT T T  T T [ffhiѥ 7]ХS֥TcT 1ЬRѢ <Z Z1j1]PT/1\fRѢ*1Pi6ѥ \ХR֥/bѥ \ХR֥*bffh.ffhfP`RРSR*S/[Rߧdeݥffhiѥ B\ХQ֥RaSRfPРSR*S/i;ѥ \ХR֥*bѥ [ХR֥/b#Piѥ [ХR֥ bffhAffh2жT1+Piѥ [ХR֥ beݥn\PZPSfRb#,Ѣ#&ZߧSPSOPSP<^ўUnTnSLeR\\e \EjѢ ZТQ֢\accdPг\\+\-Ѣ ZТQ֢\accdг\Pˏ\P@eQQ\.Q Q \_3Ѣ NZТQ֢\accdг\1.Pbݢ[PЏ~^@WrmVmT0dSдRR1R 1R1PUPѣ YУQ֣RaR\;dPРRRQR Lѣ vYУQ֣RaddfeddfeдRRR  R1{RDzcݣZR cݣEddfcݣYP^Y?TFlXclVcS5ifUUЬ REcffh&жRެWRgdUPR cݣeR .cݣѣ KXУQ֣RaffhжRRgffhcݣ YP^u>ZX[kYxkUbSlRТWէ$ Ч$Rԧ$RPѵP"heRRBcЧWϢPe\lR\eeiѧ 1 R#1ѵ#1x W^PTOd=T$ѣ 'WУ\֣#lcݣXP<~TеRˏRP@h@h R_1PVЦQޣ \llQ \llQЬTT'> V$ѣ VУ\֣#lcݣmWP#TfTdWbP\"lX\ \Gе\\"W<~"0P$P\<W<~>P$VPxcݣRL_eTd'5TeeiH<~'ϤP\ ʧ\c\Pd"Teei<~"jˏRP@h@h R_1ѣ FUУP֣R`еRˏR\LhPPP P R_Nѣ UУP֣R`eeizеRˏR\LhPPPPR_cݣUP<~]ˏR\Lh!ѣ TУP֣R`WR'%<~RaP\ \ \PR"<~R7Pѣ /TУP֣R`R!1 RPP!~  2 `B f  ?PP^1Y 1DP|1=1E eTd\ˏ\P@h0ѣ SУQ֣\aeeiF\.yѤ.sTeeieeiѣ 2SУ\֣.lѣ SУ\֣.lcݣSP<:~cݣSP.еTT+Hѣ RУ\֣+leei-cݣSP<~4T=Hѣ mRУ\֣=leeicݣESP<~cݣ'SP+еTT>Hѣ RУ\֣>leeitcݣRP< ~{T-Hѣ QУ\֣-leei'cݣRP<~.T=Hѣ gQУ\֣=leeicݣ?RP<~cݣ!RP-еTT<1ѣ PУ\֣1ѣ OУ\֣>leeiaѵ=Hѣ OУ\֣=leei1cݣPP<~8cݣxPP<~T=Hѣ SOУ\֣=leeicݣ+PP<~cݣ PP>ѵ=Hѣ NУ\֣=leei]cݣOP<~dcݣOP=Iѵ=Hѣ NУ\֣=leeicݣYOP<~cݣ;OP!еTT&Hѣ NУ\֣&leeicݣNP<~T=Hѣ MУ\֣=leei;cݣNP<~BcݣNP&'еTT|Iѣ XMУ\֣|leeicݣ/NP<~T=Hѣ  MУ\֣=leei}cݣMPѳT3cQaabPѡTݢݣIPTTPP ^Y1XSTtWtTHRbPTXbPX\bP\`bP`dbPdhbPhPR\lc\RP\l\PTUQUPЏSSSPSQPQP{SPPQAdRb\lUb\Rb\lURV|~~T=PfXUQUPЏSSSPSQPQ{SPPQAdRb\lUb\Rb\lURS|~~XPc߭T@ 柳Pp PlpSQP`P QRP`PRclS QP`PQcp2GPpl"GPlߨ5p<~hPW\UQUPЏ\\\P\QPQ{\PPQAdRb\lUb\Rb\lURVWWP|~~\Pfߨ6l<~PW`UQUPЏSSSPSQPQ{SPPQAdRb\lUb\Rb\lURVWP|~~`@PfdUQUPЏSSSPSQPQ{SPPQAdRb\lUb\Rb\lURS*Y7PRP|~~dPcX^-VXUPXЬPѠh ߦ7PЬPѠd~ЬPѰՠ ߦcݬѬƆݬeмPРRb6PbPP0P9 eQPP0PPQePƥݬJRbЬPРTQTPЏRRRPRQPQ{RPPQAhScP`TcPScP`TSWgRݬݬݬ ݬЬPݠPgѢ1Т SЬRSRT&SRTcbTPݢݣPTTdgPРTЬSTSWKTSW>ѴW3dRbbcPѢWݣݤPWWЬPݠPFݬi|^+VNUЬPѠh PЬPѠdVРTQTPЏSSSPSQPQ{SPPQAeRbP`TbPRbP`TRSc8cRѢ ѢЬPݠPqТcR P|^*V6MUЬRТTQTPЏRRRPRQPQ{RPPQAeScRbTcPScP`TSRbS|ѣrcT>ЬRݢ 4v<ݢ ݢv<~fPP0PcX&ЬPݠ ݠݠ<~4PwPSPP^RЬPР QRPѬaRPRСQЬPRPP ^ЬRb+PЬSѣ  chn VMS.BCK[V9.BIN]RTT.EXE;1tTzAЬSУP֣b`RbЬScXc\c"%ЬRѢ  b@ЬRТP֢\ЬRѢ  b@ЬRТP֢c`ScЬ Rb(ЬSѣ  c@ЬSУP֣b`RbP^)VЬRբ 7ݬЬTФ ScRУ b4ТWdTUФ SUWcUPPUУSUPPUUU \RЬR޲REbWPSW1PgUeTTѣ  c?УR֣ b1TSƖݥƓE1PTSƝݥƙ%kPTSƢݥƠKPTSƧݥƤ+PХTd ѣ  c?УR֣dbTdЧW1#ЬRݢ ݢS?P<~vPTˏRRSHTP^='VXЬSУ R bRbWaROPXУ RТ Ʃݬ#ЬRТ P`SР c#RSPS SPSݬSzPWUЬSc5УTмPRР QRPTaRSPRСQRSSUUݬPSPЬR޲REbSݬSWPWSX1^мPP+nnnGW^P?PЬP"`FPЬPL`ЬP"`*PЬP'`PЬPL`ЬP'`ЬRТP`ЬRb`мPP444))$?PЬR"bPЬR'bЬP<^QUe\ЬSݳoPTУ\ЬTPcRУSe\ݬe\SS TP*PSݤP\ݣP\\~ݢSPЭ\ݬ TuPTTSiPTdQЭ\ì T\\\Q\ PЭ\Т QЭ\ì T\\\Q\Э\TЭ\ Э\Ь "LЬ :O\O)|^aP\ЬUե PХ P`\Р l#U\P\ \P\Х R`ѲVSЬ VЬTPSU\mPPF)PRS V TRPl1ЬTeQRС PRPT`RSPRРPRSSRRXB_0Ь SЬT(PR S T\rRP\e(\P|^$UЬScS"$PV1ԭ߭+ЭRbݣeRݭ~PRPRRVЬSc RVRRVݭ'PPRbݣߥRݭTV1'SRcPЬPݠߥGPHнPPl 1?PT1PTT1PѼ!Pݬ?'PѼݬݭTZݬbЭԭݬ"PV=PT6ݬbЭcPѽݭbcPѽVݭbV1ݬWPQ6MPР*MPQ^"TMPРRЬPݠߤ`PLPТԢR4SݬPRbS_bPPP?PSSR%PRЬPݠߤvPbSݬbPR%PRbRgP^!Uԭ߭(ЭRb1Wb1KRTФSФWФ Vc< ŏTSPRc>1Pc+c>&PѢ  b6ТQ֢acc>ݕc1dPPQQQ77APF?PѢ  bl6ТP֢"`Ѣ  bP6ТP֢'`T] PTd1dPP(H?PP11Ѣ  b5ТP֢"`1PѢ  b5ТP֢L`Ѣ  b5ТP֢"`bѢ  b5ТP֢'`EѢ  bp5ТP֢L`Ѣ  bU5ТP֢'`ūTdѢ  b"5ТP֢ `PФSc>10Sc TT VWR5P<~PR`PRb RlRЭRbݢݬݢݬݭݬy|^Tԭ߭S%ЭRbЬPݠRԭ`"Pѽ(1ޭS߭ %ЭP`tUݠPcS߭$ѽ,R$R߭bЭP` PhUЭPݠPcS߭bѽ,PUЭRb)ЬPݠ>RYݭo!PPUԭޭSѼlVѽݭ6[!Pѽѽ1ЭPݭPcS !Pѽ1PVЭRb PRkݭR PPUR `HѽR ѽRݭRPcS PP R`խuݬݭ6[ PPRb ėRݭ RbݬbݭݭVUݭݭb^FZNE[|ЬT֤Ԯnդ1CФY߭߭(#ЭRb(5RjRТS֢jRЭCխjRТS֢jRЭCפPݭVծ ߭;"1lxRR~sPRqsPnUY1CЭR1:b)12V)XW߭!IScTЭReU b,\b)WЭP`(U`)UݭfPcѽ T STPTcPShPPU`,`)T ddIScjP`РRkjT@jIgPRRfPcSgPRTjTP` РRТ ^@РRТkРRТFCYYЭRb)1խЬRݢRЭSc)ЬRݢS~YЬRݢݭaݭwЬR֢nݮ RPբMЬSDУ TУUaPPS,ЭRT ЭRUjRТS֢jRЭCP^Ѽ1PмRR'ЬPѠ  `.ЬPРQ֠ a1JPR R#ЬRѢ  bn.ЬRТP֢L`мSS S%ЬRѢ  b5.ЬRТP֢'`5S S"ЬRѢ  b-ЬRТS֢"cЬRТTd(ЬRѢ  b-ЬRТS֢dcTdмTT T&ЬRѢ  b-ЬRТS֢'c6PT T"ЬRѢ  bZ-ЬRТS֢"cݬbPѼ1b=|^U@VARբעASТRBP.PTPdPP3?33??KWp#Wcs#1f?PT]PTIPT9PTP0T'ԭ߭fЭRb LRݭݭDiPPRb sRݭT 1P1PRԭ߭ݭRR,PTw1Pѽ"PݭPѽTݭ1vPPRѢ  bB+Т\֢#lФSc Ѣ  b +Т\֢clScUPR$R+PRTPT"P1PdC>TQP1fѠfPTPT1PTPTPTP ^ЬR$PSb1Pѣ  cL*УP֣b`b\rRbaPѣ  c$*УP֣0`ѣ  c *УP֣0`ѣ  c)УP֣7`ѣ  c)УP֣b`Rb1eS*PRSHRP^PRPbPPCCC3:?PТ\l"l\\laݢP\lRPP ^lXPRSQbPPCCC3?PТ\l"l\\laݢjP\lRSSYPi i1ԭZZ߭߭GЭR1b b16PRYFP[ЭS1#c c1ЩVf1Pf\1Ѣ  b'(Т\֢flVfWWx1UVTVQ1fSS0S9U\x\PS\0\\PPU1S\\A1\PPA>N^n~v?PPaPa'7GWgiN?PU\x\\ \\USU\x\\ \\UCU\x\\ \\U3U\x\\ \\U#U\x\\\\UU\x\\\\UQQVQ1f1ЭSSSSCh1Ѣ  b&ТS֢U\x\\ʏ\0\\cѢ  b&ТS֢U\x\\ʏ\0\\cѢ  b&ТS֢U\\\0\\c1TV1Ѣ  b`&ТP֢`TV1PW01W71VSUW0W7UVU f0f7fNЭT0D7>U9Ѣ  b%Т\֢0lUѢ  b%Т\֢0lSVBPѢ  b%ТP֢`SVPѢ  b%Т\֢flVf19YЭYZ߭߭ЭSc1c1ЩTd#PѢ  b$%ТS֢dcTdR &PY[YRխ9RТS֢9RЭCխ9RТS֢9RЭCYP ^V|޼RѲ(11TѲ1вPP*?PP11WfЬTdRݢgP1߭9RbЭSc(0߭b߭bЭRb) ߦݭ\ݭ SЭRb ߦ,Rݬ!ݭWPRPRݭ TRRPмRТTSdWW01TdUUx UX1PTdRRuRU RlRLЬRݢߦXݼ1dR1 Ru1RU1qjzYnXqۋ ExML.WAgr#Iips,(([fr:@\Ӭ_?HLD,Njx)bϫe!%Xܖ ՜46\7:B[#jNVMI{lbl44R0yfu{('`:d~j[7TKG7c7*!_%0[X-= :#}i$rc;lڜ(`X6 o׹`S IJlgnS\e k1g}7Naƺ* u~(E| z sNI@فb)TJRal@7ol2ɻxN27b" =C"4O$r߿Ç{R—_PhhO~X7\ 2EܛBukE#g53\8~&~`=">gF²&Lc?aGf'cĤq3Ki7jY+(o|_t<jږzq*r&&gF1OD9M L\Aˌ5\68j};΋tx)(\&p' /o|v0)י%Rn z10> @(E=)*Q6NZg L;>8f/bl FBukV& `KR;⅋єfv/N|d;X/R'|ZJ(b4{hKtxὮR Q #\9;]#7OkddY}|,Ll>i: ,~!%!( Â=5Z%5TTYpi2}H&DzJ⥉J6Yg4[Py~?q*MxQ$lI +{$o^/ kZ'k_t烲?}A]+NSͿ羼$*` d* zt,{+%U|)in =3OG+'*K:X3Q'zΣf:86%ɼ(besԵrU-:ϏoLܦT!hsTEo44j4݆!v]-Q6}I#ZWs=i:_@fp]Mw$H"M&P0H#L ^.ݱ.59\J Cu/VE|}l׽E3`vn"ɵ70p&r3^6ced.|KWK̡sH׍(o2I@04/=eVzmK K:ĸDA`YqVTg<1xk t>.6'^O~ .I\Bj8ek1Vh>'|tCO/9ȧ"UV?aYղt ܣ:1포;ҽ#`Ԥ'ӈƤnu)TJ L#'=A 9CFpLygu֣҅`])nCjf]9Vi7,O]BT189j/FdPh_Gv XN4_&7\Zs8\pZ*/3.68knbQNn{`+lѼ'g|m܌74-oYl`S]_>}Piq^\khf8A?G8僫 ZXHKp} ;`J'cIiMoˎJ׋4vc3/+$>BW UJ9xLjǚ#\AE[9 aSQ'أb<:܈U<;{ :7iǛ3B./^濝l`C%3e2iՎ䖿{#9.И$ނ kȲ] (9R,~OrF)D6<ވva`sH7cgP3.b~Nl83mT[T2DZC@@=MJF2Q$:Q<(3v3Ygvy P,jZ|<'ZIPNjӅJaCL\n){M*Mbd#a5[WO򺮡PBt7g+ZEY fM846O*b&n3Xn33 #b 6IԷ:dN$da_e4d{ 0Xq;ѐKдI$qF3W_JrrB?^ 2mEUf`-Oͱ޳ BxOcr.Ĩ)0gOo7ELПb`Rܑ5597+R#ޠY_gӂZ6Y~or(I5;mkـ?aCKXH~Qn.87ԯ 3S$2^[DMb Lm*~>u(Iu9‡滐IxNBrj)fB^&J9K ~|ǃ`U,?B2/!*.-V Vg<${4}kVR 3w> ^xذ`B]hY Aa oIڈP=v}RRoOfªD]!?zn7p`a[qRB0*mf9ͼbʹkU9)[혈%COz !AMWg\'!:'nefj//Qwtax::\wHJWD7BH-_x uzrd $J FHJa'!ƅ *`(ktb8;vVk.C^je|33nLUMhKn5okp!4`7p4TÊD;lVQ'DLl:q3+nreL'TXjQ$GrM<:ri*h7_hdaaƵjN$L[˝RcyY:0s"i!tJ R ×h"IRCwk! 9F!Gd1mtdR71zC>".H3/JQʘO쵉d+yܫS,AU$_, @6ֲLs 2fʮCPz>u`ssIT4 8c<5}❣wWlqG9$Mӹ:}5<ҾNvLމؓghdWy'!KS Qy~͡Gx~ X9{lpy yy,֒0.f^34ʘ>1^5ٔ|'IqR$~_IAsr-+:~#Mvb v'G(D H4@[AջJ#4, m0*]l4 }R!i`1Lcl Gr8B1dg3 J+!ߘPp;Ų?:Cnw7N•،rx ^zmؽ]!(ϑUh#${` G״hp e*rQD+' }N*N mK $.f/mw::ԀWL=Π {k)Ϙ>>㎧ݻ&+j< L;o/t˻S8 !1әWc,<F s)1`pGcO|JAzL$ f;J9Q<{c/Y[09u@g M_8H窿wWQV],!U r`#WZfućv@FC@ +lvB!Օ~#mX|vhQ,aaBhm;ګϺkeZF 5y';zq] ۏE#D1KH:&&$< g,F蕮SH+PCV0W$b=#Q!t< Ou5~eRs~#UjVv;;cZoH=߂ c0?7VJ9mW*MQ_G{` BXD\P卿fʰ_4c^bPg o@7,Mαaf zǧ ,r2rnY))wL0p*zQ^^s9 Ϳ;NDзVY35qG_$Έ]e(3Z,!c PZbufSss3Gx7┻d)ewIRb0U),N>r!;u-ݱX%7`?l8OL1.'& ML 9dO][5 KS9ч[md?;Ǖ=  S 4#btmRe*B2m xLzzFʹX5}9ˏ0V~M_S^:ɵALx2 bu~#AASst74EpX)X|TYpq9ݲo<.}M7ig@]_ ѫP/}qI4=k,Rݣj~8|fdA:ulcC?tjL3hCmJK1JW>1/:[Z1ED~۪Z&+zgˣ8anq40[0mF#*4<]UlyYu){P;` MB;'[656hh+8* NFi`h 僰2o3"]y6R"$D>#dnqY@?MYQրS?4@!\0\ @|OkmN+uxyo{k]thlfѣFSφ{DlTn p.RD F_r#1ޫ"k{~:ƙOĥ$_->bG;+dm~A:$Zoho Uw MzUKD>܂kXw H2GeGqNz[%9Й\S124G"J XC|7Oʒ;Ɩc%Ѣ׉jlOyĚ?eY` @>ڻ4Vff;m ]XS1;eU~ߠD?,+El64ӑ.EAWD:-*'Q l VMS.BCK[V9.BIN]RTT.EXE;1tm Rl1RL1xSSdQQ0Q9QP0PPS1PQQQA|QPPAAIQYai P ?PPaOPa'/7?9?P S?P S7P S/P S'PSPSPЬPݠߦݼHTdP1"Pu1PU1Pl1PL11PU1Uu1UU1Ul1UL1dPP0P7xSQPP0PPQSPЬPݠƦݼﳻTdP1Pu1PU~PlxPLpWlWufWU`WlZWLTdPP0P9 SQPP0PPQSPЬPݠݼ;TdPPuPU PlPLݬrdUSPUuUU!TdRSPRlRL7Td1SPUlUL!TdRSPRuRU TdSPЬRݢݼмRТTd\dS1APSTdUU0TU7ORU0(U7#PxSQdP0PPQSRTR d0d7ߚSRSR%ݼSS1PURR"1RPP"zR?PP?1jP\1P\^fnv~1Y?P'S1MP"S1EP?S1=P\S14S1-PS1%P S1P S1P S1 P S1P S1PTU1PdRR0R9xSQRP0PPQS1PRQQA1QPPA>JVbnz:?PPagPa#/;GSQ?PxSP PS@PxSP PS4PxSP PS(PxSP PSPxSPPSPxSPPSPUUTSPSPRݼU1SSPdSݬSPЬSSЬRRSPTcSc)ݢ}SݬVTPЬRݢƞݼݷ^޼PѰ!1аPP! x2G P?PP~0hݬݬݬݬݬݬPPݬݬݬrPPݬݬݬYQPQQPݬݬr<^ݬЬRR-PTвUU* U/U%wSSCݬSPRUPP% 3@@@@#@@@@+(P?PRTPRTPzTP{RPQPPTгUU*U/U%TP^ЬTЬVVTφPSдUU* U/U%lT VT^PRUPP% 0==== ====(%f?PRSPRSPzSP{RPQPPSдUU*U/U%SZެ[лRbYY+Y-1X WXgXTЬVVTPSдUU* U/U%iTgVTϣPRUPP% 1>>>>!>>>>)&?PRSPRSPzSP{RPQPPSдUU*U/U%SUY+UZPUZиYY+1MY-1EZP|^ެUeެVfRRgPTвSS SGRR eR6PQSxQTTQPxPTTвSSSTPP^ݬЬRRmPSвTT<TT> T1RR ݬR-PQT<uTPP<2nR PZ?PPSP?E:?PPSQPPS.PPSQPPSPPSQPPSPPSQPPSвTT<1dT1XT>1PT1DSP|^ެUeެVfRRPTвSS STRR eR϶PQSPTQPPT PTQPPTвSSSTPP^ЬSЬVVS^PUгTT TKS VS3TRUPRRU RUPRRUгTTTUXެYйRb&1ЩW VWfWRЬUURPTвSS SLRfURϠPQSPTQPPTPPTQPPTвSSSTSXPPSXѷ&1sXPP<^ެTdެUeRRϻPSѲ^%RRdRϖPSѲ^SP<^ެTdެUeRRPSѲ|"eRRdRvPSѲ|SP<^ެTdެUeRRPSѲ.eRRSdRzQSPQQSѲSP<^ެTdެUeRRPSѲ/eRRdRnQSPQQSѲSP|^uVЬSSЬRRPUѲ?VRSRPTbP`:ݣƽP ݬvݬݬUTQPQQPUP^Tԭ߭;ЬRR߭WSPSЭP`ݢP羚ݭSSP^<~ݬݬﭲPJ)^aRbЬTTXP9ޢQXP<~PQRP(ߢ TXPS Tߢ ӯЬQSP<~PQPX(A ^WЬZj/1QPRXլ 1f)VX1V1Pf1ЦP`1UРScc/SUScU+РTTU"Ѣ  b(ТP֢d`TTUЬSc#PѢ  bТP֢c`ScRPYߧYXWPXЦVXV1R0!TX1d1dSc!Ѣ  bТP֢c`ScSd /Ѣ  biТS֢/cЬSc#PѢ  bDТP֢c`ScR+PYߧYVPXTXd1_RZYߧYuVPXXݬߧݬڬYSXR<~RSPH&1^[ U|XTPn߫9UPIYX߫FUPIYXPެS@R@bIYP@bYRxR~TPeVTެZDFЪWDgI4޼PD`RRxUPPYTPSRS{UVPVS@TDgXPXYQXP@AXI^ T&YѹPiRբעiSТRBPйPP8Dtl1gP?P]PW iRղW1=g11iRТVԭޭPRbPR'PRbݾ RЭSc dSUЭRТ\l3lRR0R9 USRR0RRSUPߤ#ݭ[\lޭePRbRHPRbݾnRXѽ1PRЭ\ЬSc9c\\"SPѢ  bТ\֢clScRPXRsޭnPRbR׭PRbݾﺭRЭRb ߤFREXX#RRRBU"Rb ֦PW>PPW0iRТSW#PcPWiRУ PQW葉>WP ^,PR)b PR PR bЬScŬR ^xPRbR\PRbЬSݣ~R^WUާ\XЬScXެ RPT dc1_TcPT1Od1C#9T14d1(PTPT1d1PuPRcPР UРXРSc2PѢ  b ТP֢c`c  UUScTrdi VФ UФXФSc3PѢ  b0 ТP֢c`c  UUScT'fPT dмSR PRxTU U XT^ R ƭݬ ݬbԢba!ݬ ݬ ݬ  ^YPVUެnnRE1ТO[|ZOWEPPD/16?PЬREbkEbTPSSTߩjPXhjP3ߩf5ORSPfBd~gRRSf gﲼXIP2ЬREbkPEbjUE1'P^Ь TT~ݬ_PЭPР RРSTPT PPЬP֬`ԃЬ P׬ PbcЭPР ЭPRЭPР KР cP1^ݬ%NPݬ^KtP iP^5VNUݬݬߦPWg PCߦeMRެTRdSeBc~MRRde uM*W^WMUެTdެVfߧ;{ PX h<ߧEe2MRdЦSeBc~MRRde L了SP1PRbRjPRԭޭSTR8PRPcbSTPTcPSLPRT1d#dyP)P)լ ԭaPݬ PﵥPEPߧee0LRެTRdSeBc~KRRde Kݭ|~~X$^TWVUS2eeP޼R@bccRb- RcP-ePcRcbff:fݬ ,KPR&efߤߤlKEK?PRb:gOeKPcRbRg6eѬe#ޤcfߤ-Iߤ KJ?PeP޼R@bgޤIcefP ^S߭J߭tJPRЬPl`ТQAТ ТQAcТТb,^}S^Rn߭J߭ JlnTРQnUAnVР РQnWAbnXРnYРnZ`ݭݭݭݭݭݭÏ I^R|IЭLPjIâL\n\S `PSgCSPdzEPjPPθ^ЬZԮЬ Ь[ZXЮWЮ Y[VYj(`WWVVXHZIPPHZRPRRЬPլЬTޮUd Td dV+dSS PЮReSbJGI VMS.BCK[V9.BIN]RTT.EXE;1t!TdSS 蔾TVV1ЬZЬ Ь[ZXЮWЮY[VYz(`WWVVXHZHPP HZRPRRЬPЮT ޮ Ud  PTd dV+dSS PЮ R eSbTdSS 蔾 TVV1PP^  ֬ PQQ ЬP֬Q`֬QQ 蔼ЬP^ZЬXЬWЬ YЬVYO(`WWVVݭݭݭߪXFߪݬFPPFЬPPP^TSЬUUVUFUPP PRRU4b.  R Pb~ߤOFPRV RRcìVUUݬFWgEcRURRV UUVgE; EPR.R RUPP RUUR gE UP|^Vݬ (`լЬլЬݭݭݭߦEP^ETЬP֬`P֬ЬP֬`SЬP֬`RSPPP@d S~DPSRPPP@d R~DPRSRP<^ЬQЬRЬ PQUPPUP^ЬQЬ PQTP SSPTP<^TRբ Ԣb0dЬUUDScbߤUcߤ Ucߤ5ߤ(Ucߤ_Uc^Rb !R ֣ݣkPRʏP@>R:MRƳTRX >iP` >iTݣcj >iR ݏ$nPXW$WRBB RbX PtWIPRUXTRƈ .>iƐ >iTUݣcƚ >iR ݏ$W$WRB RbX PWJ$ݣkPRʏP@=$PR ֣ݣkPRʏP@=RT13xu ~-<P(2ݣ=PRˏRTDI=%R ֣ݣ<PRʏP@$=RC1|<[<Y<<ݣkPRʏP@<JTUTX <i ` <iUݣcj <iT ݏ ZˏRP@<'P ZQ0RPPQZݣkPRʏP@\<ZH MTUTX 4<iP` "<iUݣcj <iT ݏ ˏRP@;!R ֣ݣkPRʏP@;R:MR7TRX ;iP` ;iTݣcj ;iR ݏ rPXWWRB RbXPtWI PRDUXTRƈ 2;iƐ ";iTUݣcƚ ;iR ݏ WWRBR RbXPWJ(ݣkPRʏP@:$PR ֣ݣkPRʏP@:RC1]\0P|^Rn:U\ݬ8:PTSeVlTSˆ e:P e :TVݬlš e9S ݏ9P^T9W9S8Rݢ9P\ʏP@c#P\ ֢ݢb9P\ʏP@c\PUrVUX ga9P` gO9Vݢbj g;9U ݏ.9\$Pˏ\P@cF\=Ѣ oТQ֢\aݢ8P\ʏP@c \\ ֢ 1^X8ZUPTPG~d7PScԣCTԣ ݥ:8PRˏRTDj$PR ֥ݥ8PRˏRTDjˏRVFjTFj RPݣȁ 2ݥ7ˏPTDjRDj PPݣȔ1ݥ7PRˏRTDj$PR ֥ݥr7PRˏRTDjˏRTDjݣȧy1YˏRTDj(P YP0RTTPYݥ7PRˏRTDjYYԣxY~6PR(ݣ1ݥ6PRTY10W6VR,R) ݣgDR,|R)wRPPd9MMMMMMMMMMMMMMMM1A%?PD! Dȏ@D ݣgݥfPRR,R)R, ݥfPRTTY1MR)ݣ$0ݥ5PRˏRTDj$PR ֥ݥ5PRˏRTDjR{ݣ:/ݥ5PRԣR} 1ˏRTDjݣV/VˏRTDj& VP0RTTPVݥ25PRˏRTDjVR,ݣr=/ݥ4PRR*ݥ4PRTˏRTDjT4VT(P VP0RTTPVݥ4PRˏRTDjVݣȎ.R+ݥ}4PRR}ݣȪ.ϰP#ݥN4PRˏRTDj$PR ֥ݥ*4PRˏRTDjRPPf3;;;;;;;;;;;;;+P?P'Pԣ'Pݣ-SP^Y4ZOSݣ3PRˏRTDj!R ֣ݣz3PRʏP@jR" %-ݣO3PRR"~R yRp33TPR\'ѣ УQ֣RaPRѣ УQ֣RaݣdPRR"R  RR" ,ЬR MP+ݣ2PRˏRTDj$PR ֣ݣv2PRʏP@jWˏRTDj% WQ0RPPQWݣB2PRʏP@jЬTW/WԤ3P W~!1P3VWxެXhUG#PT VP@3RTbХ3R@RbT1)PT +d* VPhRТ3R@RTb VPХ3R@RIPbVVWݣ1PRˏRTDj"R ֣ݣf1PRʏP@jWˏRTDj% WQ0RPPQWݣ21PRʏP@jЬTW7WԤ;PxW~0P;VWDT=PU )*xVP@;RUbФ;R@RmPbVVWЬRSP?ݣ0PRˏRTDj"R ֣ݣ~0PRʏP@jR$ @)*^Z0WSݣ80P\ˏ\RBg!\ ֣ݣ0P\ʏP@g\!1?\PP!8888 P?PPa1Pa4L            1V?Pݣ/Pb Pc<1QNQ%T i.T`PXPϹP1PXU%T1.T`PXPϹPϬP ϣPϚP1<P\(1)vt$ݣ.P\ˏ\RBg$P\ ֣ݣ.P\ʏP@g\tVVݣt.P\ˏ\RBg!\ ֣ݣR.P\ʏP@gUˏ\RBg% UQ0\PPQUݣ.P\ʏP@gTURRxRRR~-T`PXVUTUPxT\LRPbTT\\UxT\LRbPb1 ݣ-Pa*"12?P~{M#ݣ[-P\ˏ\RBg$P\ ֣ݣ6-P\ʏP@g\ݣ-P\ˏ\RBg"\ ֣ݣ,P\ʏP@g\PPd4LLLL,LLLL<LLLLD*Pn?P[(P[ P[P[PʁO&ݣy,P\ Pݣc,P\ˏ\RBg$P\ ֣ݣ>,P\ʏP@g\PPf04444444444444(?PnPn ʬ%ݣ+P\ˏ\RBg"\ ֣ݣ+P\ʏP@gYˏ\RBg% YQ0\PPQYݣ+P\ʏP@gݣi+P\ˏ\RBg"\ ֣ݣF+P\ʏP@gVˏ\RBg% VQ0\PPQVݣ+P\ʏP@gݣ*P\ˏ\RBg"\ ֣ݣ*P\ʏP@gUˏ\RBg% UQ0\PPQUݣ*P\ʏP@gUURTRxRRR~)T`PXt VMS.BCK[V9.BIN]RTT.EXE;1t&0Ԩ[ ЭnYVU TUUURUR1 T\Tx\\LRPbU\U\1k Pݣ*Pv ʼ#ݣ)P1 P2,ZP T (T`PXPl P1  T(T`PXPD P?P 1K#1U T m(T`PXvPݣH)P\ˏ\RBg!\ ֣ݣ&)P\ʏP@g\"\'\ϖݣ(XP\Mˏ\RBg@Pѣ sУQ֣\aݣ(P\\ ˏ\P@gŸ PݢP* -DQ PUPPUP^WVSԭޭYݣ)P\ˏ\RBf#\ ֣ݣP\ˏ\RBf\$1p\n1P1_ݣPc1HPRˏRTDf%PR ֣ݣPRˏR\LfR$1:ݣtPRRPPcBZv&j1?PݣPRRPPb41?Pϡ PiݣPR1@P=9 v PiPTcPݣPRˏRTDf#R ֣ݣPRˏR\LfˏRTDf A(UˏRTDf' UP0R\\PUݣ6PRˏR\LfiTU1_1rݣPf)zv ϗ PiݣPR16ЭPǁ~ i PiݣPR1PLjDžy > Piݣ}PRˏRTDf#R ֣ݣZPRˏR\LfˏRTDf njUˏRTDf' UP0R\\PUݣ PRˏR\LfiTU1VǬǩ ώ PiݣPRˏRTDf#R ֣ݣPRˏR\LfˏRTDf ǯLUˏRTDf' UP0R\\PUݣZPRˏR\LfiTU1Piݣ,PRRdiTݣ PRˏRTDfT6UT& UP0R\\PUݣPRˏR\LfiTU1*RriTݣPR1 c 1ݣXhPRˏRTDf RdfPiRdiTݣhPRUˏRTDf(P UP0R\\PUݣ"PRˏR\LfiTU1nRrϬPiPTݣhPR1HPReݣhPt  DPiݣPR1ݣPRRPPb4||||||||||||||||||PRP?PPiݣ@PR1P ϲPiݣPR1uP  1bϩPiݣPRˏRTDf   UˏRTDf& UP0R\\PUݣPRˏR\LfiTU1 9PiݣxPR1P Piݣ\PR1P-  1R$16TR"R'RϳݣdPRR ֣R H  RUѣ УP֣R`ݣdPRU R PݣdPRR R$bPiPT BPiTY1c a iPf = |^VSѣ УP֣ެTd`ݣ4PRRd1R}UR\:ѣ УQ֣RaݣePRR Ɠ  ѣ hУQ֣RaݣePRRd RRƴ Y ѣ УQ֣Ra^WSݬ PVmPݣ?PTˏTRBg$PT ֣ݣPTʏP@gUˏTRBg% UQ0TPPQUݣPTʏP@gRUwPBRRUVPP<^ UTGRݢPSˏS\Ld"S ֢ݢrPSˏS\LdSPPb/hBhhhhhhhhhhhhhhUB?P P P P |^1V&UoRݢ PTˏTSCe"T ֢ݢ PTˏT\LeTPPT"S#########################1P?Pݢ" PSTˏS\Le& TP0S\\PTݢ PSˏS\LeT31D$PPݢ Pd2::::.:::::::::61CPR?PPPP1) Pݢv PH VMS.BCK[V9.BIN]RTT.EXE;1BIN.COM;1tE?\\ 1\PP ff P?PP 1LPc1Pc<<<<<41?Pݢ Pi1PPP1Pݢ Pv1 Pݢ PnkPݢ PvT Pݢ Pc.6666666666666662P*?P P PPP ^J PQԡЬRP`PR|QP^PxPPP~ Ь^MTR Sݢ PQQ1QPP  PR?PP$p1PdePd D(]]]]]]]]4E?P$S1zPS$0eS1lSe#nS1_PSn֢  S1>P^iVV YW TRݢ PSʏP@d#PS ֢ݢ PSʏP@dߕˏSP@d S S ֢PPSݢ PS֬S' XЬWЬUSƻ i  i{ UWXݢb ic S ݏV ^qVYެXhRR1 b~P_PS1TУRdUˏRQAePѠR `PѠRP1SˏWGcSGY3 2 l PS{~DPPS8 7 5YP^ˏR޼QBaPѠ `PѠP^iW^V@ FݏPެ UPeЬSQ@a@cPPeTRެ UReSBcPPP@fTRRe QRRSAcPP93 Pz&PT ޼PaA`0AP0AT PЬPA`Q<^TSRˏSP@dˏRP@dRSQ QPˏRP@dQPRSQQUWЬQЬPSRˏSP@dˏRP@d RSQ#PQPˏRP@dQPRSQQPUP^RЬQˏQP@bˏP@bìQPPˏP@bPQP^SrTRլX d8P` d'ݬݢbj dլ ݏP^S T[RլÈ dPÐ dݬ ݬݢbÚ dլ ݏ^ﵳRTSլ» dhP dWݬݬ ݬݣc d<լ ݏ.^EWެV׶ެUеRֵbSS0aS7\0SPնHеRb0?b7:P5P׶еRֵbTxSR0TTRSPնеRb0 b7PˏSPSx1RQն1еTdTTTDg|QwP׶еTֵdPPaPf P(PAPF7PˏPTDg0PxRTPTRQնеTdTTTDgQRPS^ նP׼ЬTdRdbRˏRPCoP<^ PSP>RbRPЬR׬RRЬP֬`RR\߬߬RPRRUUPxPQʏQUeSTgetctime>millisecg =7Y%B,3FILEPART(?pathfindApathelemHLAtryfileq AfparseBmakenameL Csmatch} (?  MEMORYCmemcopy#Cmemfill# CIDENTIFYC id_commentb 0 C STRTBL4Dinit_str1hD free_stblDD init_sbuf<D clear_sbuf0Enew_sbufPhEspec_strF str_install Fstreq1 4D RTDB0Gdb_openDNdb_close}N db_string$Odb_implTdb_codedXdb_inlingdb_rtflgGidb_case jdb_ilvarkdb_abstr< pdb_ilc xquotedy db_ilcrety db_tndtypz db_icntyp(}new_ilc0 X}new_il x}db_dscrd\~db_chstr Tdb_tbl,db_ilkup-\nxt_pre<cmp_pre cmp_1_preP@db_err1edb_err2hdb_err3k 0G   ґ҅Ѣ LITERALS |escapecbitvectd cset_init prt_i_str% || ALLOC $salloc[ allocJ $*[V9.BIN]X11.OPT;1+,./ 4-0123KPWO56[Y7PY89Jj$GHJsys$share:decw$xlibshr/share *[V9]BINARY-BIN.DIR;1+,@ ./ 4-6r0123 KPWO56C87`*V889Ҋ;vGHJI ICONC.EXEC  ICONT.EXEA  ICONX.EXE* *[V9.BINARY-BIN]ICONC.EXE;1+,C ./ 4-@ 0123 KPWO56R:7g:89Ҋ;vGHJ0D`0205":hv55ICONCV1.02A":05-13Z[\s t ? ! VAXCRTL_001$+CMA$TIS_SHR_001! LIBRTL_001O! MTHRTL_001ICON_BIN:iconcccrt.dbrt.hC:ELS:Tce:f:mn:o:p:r:stuv:x-f option must be a, d, e, l, n, or s. found: %s%s %s%d%cbad operand to -v option: %sDBLIST.olb.olb-x--.icn.icnbad argument %s-stdin.exe.exe.exe.exe.c.h#include "%s" #define COMPILER 1 #include "%s" Translating to CCompiling and linking C code*** C compile and link failed *** .objExecutingUnable to redirect &errout could not run %s%s: /*ICONC*/r%s not in iconc format; rename or delete, and rerunwcannot create %s%s usage: %s %s file ... [-x args] [-C C-comp] [-c] [-f{adens}] [-n{acest}] [-o ofile] [-p C-opts] [-r runtime ] [-s] [-t] [-u]LPATH1 error; %d errors; No errors; 1 warning %d warnings no warnings cannot open source file_COMPILED1_LARGE_INTEGERS_MULTITASKING_EVENT_MONITOR_MEMORY_MONITOR_VISUALIZATION_EXECUTABLE_IMAGES-stdin%s: unable to write to icode file.icncannot resolve reference to file name.db.dbbad data base name: %scannot open data baseWarning, run-time system do<<<<:=<<=<<=:=<=<=:===:=====:=======:=>>:=>=>=:=>>>>:=>>=>>=:=??:=@@:=\^^:=|||||:=||||||:=~~=~=:=~==~==:=~===~===:=()+:,-::;[]{}$($)$<$>invalid characterinvalid radix for integer literalinvalid real literalinvalid integer literalinvalid digit in integer literalunclosed quoteno line number in #line directive'"' missing from file name in #line directive'"' missing from file name in #line directiveFile %s; unexpected end of file Line %d # "%s": %s ???File %s; Line %d # "%s": %s File %s; Line %d # "%s": %s File %s; Line %d # "%s": %s File %s; Line %d # %s %s: parser: out of memoryparse stack overflowfailinconsistent redeclarationduplicate field nameinstall: unrecognized symbol table flag.redeclared identifierinconsistent redeclaration%s undeclared identifier, procedure %s built-in function not installedallinvalid operand to invocable static B_IProc(2) init_op_tbl[OpTblSz]not available for string invocationnot available for string invocation#define OpTblSz 1 int op_tbl_sz = 0; ; #define OpTblSz %d int op_tbl_sz = OpTblSz; }; = { , {T_Proc, 11, O%c%c_%s, %d, -1, 0, 0, {{%d, "\%c"}}}invalid keywordkeyword not installedlist creation not implementedlist creation not installednullduplicate default clauseduplicate default clausecompiler error: inconsistent parsing of unary operatorsbinary operator not implementedbinary operator not installedunary operator not implementedunary operator not installedsubscripting not implementedsubscripting not installed'i to j' not implemented'i to j' not installed'i to j by k' not implemented'i to j by k' not installedassignment not implementedbinary operator not implementedsectioning not implementedaddition not implementedsubtraction not implementedproc failproc returnboundend initial!first_timefirst_time = 0;alt = 0;rep alt = 1; = 0;invalid context for a break expressionbreakelseend ifinvokesignal = R_signal = R%s_%s(R%s_%s(, NULL&, &);signal == A_Resumeend loopnextrepeatinvalid context for suspend == NULLnextwhileuntildoinvalid context for a next expressionnotinvalid context for return or failreturn failcompiler error: node type %d unknown = ; = nulldesc;%c%c%c_%send caseskip clauseselected code!equiv(&, &)co_failco_chng(popact((struct b_coexpr *)BlkLoc(k_current)),NULL, NULL, A_Cofail, 1);++BlkLoc(k_current)->coexpr.size;co_chng(popact((struct b_coexpr *)BlkLoc(k_current)), &, NULL, A_Coret, 1);limit is intcnv_c_int(&, &)err_msg(101, &); = InF VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1;tVal();limit positive >= 0err_msg(205, &); == 0limit-- == 0&, &, &applyscan fail&subject is stringcnv_str(&, &k_subject)err_msg(103, &);k_subject = ;k_pos = 1;assignment not implementedscan resumeis co-expression().dword == D_Coexprerr_msg(118, &());activate(&, (struct b_coexpr *)BlkLoc(), &) == A_Resumeassignment not implemented = k_subject; = k_pos;k_subject = ;k_pos = ;, NULL&, &retderef(&, (word *)pfp->tend.d, (word *)(pfp->tend.d + pfp->tend.num));retderef(&, (word *)argp, (word *)(argp + ));not variable!Var()is record().dword == D_Recorderr_msg(107, &);invalid field{struct b_record *r_rp = (struct b_record *) BlkLoc();int r_must_fail = 0;.dword = D_Var + ((word *)&r_rp->fields[] - (word *)r_rp);VarLoc() = (dptr)r_rp;dptr r_dp;switch (r_rp->recdesc->proc.recnum) { case : r_dp = &r_rp->fields[]; break; default: err_msg(207, &); r_must_fail = 1; }r_must_fail.dword = D_Var + ((word *)r_dp - (word *)r_rp);VarLoc() = (dptr)r_rp;}boundPoll();deref(&, &);end %send %svarargs(NULL, 0, &);varargs(&, , &);P%s_%srt.olb/lib/include=data/liblink/exe=dlrgint.objX11.opt/optlink/exe=obj,X11.opt/optlarge integer option required static struct {word dword; union block *vword;} init_globals[NGlobals] = { main {D_Null}, {D_Proc, {D_Null} /* place holder */ }; main procedure missing struct sdescrip init_gnames[1]; struct sdescrip init_gnames[NGlobals] = { {%d, "%s"}, }; struct b_proc *builtins[1]; struct b_proc *builtins[NGlobals] = { (struct b_proc *)&BF%c%c_%s, 0, }; int main(argc, argv) int argc; char **argv; { struct { struct tend_desc *previous; int num; struct descrip arg_lst; } t; op_tbl = (struct b_proc *)init_op_tbl; globals = (dptr)init_globals; eglobals = &globals[%d]; gnames = (dptr)init_gnames; egnames = &gnames[%d]; estatics = &statics[%d]; debug_info = 1; debug_info = 0; line_info = 1; file_name = ""; line_num = 0; line_info = 0; err_conv = 1; err_conv = 0; largeints = 1; largeints = 0; init(*argv, &argc, argv, -1); init(*argv, &argc, argv, 0); t.arg_lst = nulldesc; t.num = 1; t.previous = NULL; tend = (struct tend_desc *)&t; /* main() takes no arguments: construct no list */ cmd_line(argc, argv, &t.arg_lst); tend = NULL; P%s_main( P%s_main(&t.arg_lst, &trashcan, (continuation)NULL); P%s_main(1, &t.arg_lst, &trashcan, (continuation)NULL); c_exit(NormalExit); } #define NGlobals 1 int n_globals = 0; #define NGlobals %d int n_globals = NGlobals; int n_statics = %d; struct descrip statics[%d] = { {D_Null}, }; ; (union block *)&BP%s_%s}, hidden int P%s_%s Params((int r_nargs, dptr r_args,dptr r_rslt, continuation r_s_cont)); {%d, "%s"}, }}; {%d, "%s"}, {%d, "%s"}, {%d, "%s"}, (union block *)&BF%c%c_%s}, {%d, "%s"}}}; (union block *)&BR%s_%s}, hidden int R%s_%s Params((int r_nargs, dptr r_args, dptr r_rslt, continuation r_s_cont)); {%d, "%s"}, }}; {%d, "%s"}, int %c%c%c_%s Params((int r_nargs, dptr r_args, dptr r_rslt, continuation r_s_cont)); struct b_cset BDC%s = struct b_real BDR%s = {T_Real, %s}; static int R%s_%s(r_nargs, r_args, r_rslt, r_s_cont) int r_nargs; dptr r_args; dptr r_rslt; continuation r_s_cont; { register int i; register struct b_record *rp; rp = alcrecd(%d, (union block *)&BR%s_%s); if (rp == NULL) { err_msg(307, NULL); return A_Resume; } for (i = %d; i >= 0; i--) if (i < r_nargs) deref(&r_args[i], &rp->fields[i]); else rp->fields[i] = nulldesc; r_rslt->vword.bptr = (union block *)rp; r_rslt->dword = D_Record; return A_Continue; } hidden int P%s_%s Params((static int P%s_%s(dptr r_argsr_args, %sdptr r_rslt%sr_rslt, %scontinuation r_s_cont%sr_s_cont, noargs)); ) dptr r_args; dptr r_rslt; continuation r_s_cont; static int P%s_%s(r_nargs, r_args, r_rslt, r_s_cont) int r_nargs; dptr r_args; dptr r_rslt; continuation r_s_cont; { struct PF%s_%s r_frame; register int r_signal; int i; static int first_time = 1; r_frame.old_pfp = pfp; pfp = (struct p_frame *)&r_frame; r_frame.old_argp = argp; r_frame.rslt = r_rslt; r_frame.rslt = NULL; r_frame.succ_cont = r_s_cont; r_frame.succ_cont = NULL; for (i = 0; i < %d; ++i) r_frame.tend.d[i] = nulldesc; argp = NULL; argp = r_args; r_nargs i = r_nargs - %d; i if (%s <= 0) varargs(NULL, 0, &r_frame.tend.d[%d]); else varargs(&r_args[%d], %s, &r_frame.tend.d[%d]); for (i = 0; i < %d; ++i) if (i < r_nargs) deref(&r_args[i], &r_frame.tend.d[i + %d]); else r_frame.tend.d[i + %d] = nulldesc; argp = &r_frame.tend.d[%d]; r_frame.tend.num = %d; r_frame.tend.previous = tend; tend = (struct tend_desc *)&r_frame.tend; r_frame.debug.old_line = line_num; r_frame.debug.old_fname = file_name; r_frame.debug.proc = (struct b_proc *)&BP%s_%s; if (k_trace) ctrace(); ++k_level; } hidden int sig_%d Params((noargs)); static int sig_%d() { return %d; /* %s */ } hidden int P%s_%s Params((noargs)); static int P%s_%s() { #ifdef Coexpr register int r_signal; register struct PF%s_%s *r_pfp; r_pfp = (struct PF%s_%s *)pfp; #else /* Coexpr */ fatalerr(401, NULL); #endif /* Coexpr */ } struct PF%s_%s { struct p_frame *old_pfp; dptr old_argp; dptr rslt; continuation succ_cont; struct { struct tend_desc *previous; int num; struct descrip d[%d]; } tend; struct debug debug; word i%d; double d%d; char sbuf[%d][MaxCvtLen]; struct b_cset cbuf[%d]; }; .dword = D_Var; .vword.descptr = &; return A_Resume; return %d; /* %s */ goto L%d /* %s */; L%d: ; /* %s */ .dword = D_Cset; .vword.bptr = (union block *)&BDC%s; .vword.sptr = "%s"; .dword = %d; cnv_int(&, &); .dword = D_Integer; .vword.integr = %ld; .dword = D_Real; .vword.bptr = (union block *)&BDR%s; .vword.sptr = strfree; ""; .dword = %d; --k_level; if (k_trace) failtrace(); tend = r_frame.tend.previous; pfp = r_frame.old_pfp; argp = r_frame.old_argp; line_num = r_frame.debug.old_line; file_name = r_frame.debug.old_fname; return A_Resume; --k_level; if (k_trace) rtrace(); tend = r_frame.tend.previous; pfp = r_frame.old_pfp; argp = r_frame.old_argp; line_num = r_frame.debug.old_line; file_name = r_frame.debug.old_fname; return A_Continue; break; if () { } .vword.bptr = (union block *)create(, (struct b_proc *)&BP%s_%s, %d, sizeof(word) * %d); .dword = D_Coexpr; file_name = ""; line_num = %d; globals[%d]statics[%d].tend.d[%d]argp[%d] /* %s */%s%dr_s_contr_pfp->succ_cont.sbuf[%d]&(.cbuf[%d])r_frame(*r_pfp) { dptr r_argp_sav; r_argp_sav = argp; --k_level; if (k_trace) strace(); pfp = .old_pfp; argp = .old_argp; line_num = .debug.old_line; file_name = .debug.old_fname; r_signal = (*r_s_cont)(); r_pfp->succ_cont)(); if (r_signal != A_Resume) { tend = r_frame.tend.previous; return r_signal; } pfp = (struct p_frame *)&; argp = NULL; argp = r_args; argp =d VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1" r_argp_sav; argp = &r_frame.r_pfp->tend.d[%d]; if (k_trace) atrace(); ++k_level; } r_signal = ; switch (r_signal) { case : } if (pfp != (struct p_frame *)&r_frame) { tend = r_frame.tend.previous; r_pfp) { return r_signal; } r_signal = ; ; return r_signal; return ; ; r_signal = ; if (r_signal != == ) return r_signal; else else return r_signal; if (r_signal != ) { } switch (r_signal) { case : default: return r_signal; } ()%s(, (continuation)NULL, )sig_rsmsig_%dP%s_%s(*(struct %s **)&(&trashcan.tend.d[%d].i%d.d%d%d%s(*r_pfp->rslt)(*r_rslt).vword.sptr.vword.bptr).vword.integr)A_ResumeA_ContinueA_FallThru%d /* %s */B_IProc(%d) B%c%s_%s = {T_Proc, %d, %c%s_%s, %d, %d, %d, %d, { = emptystr; = nullptr; = ;;err_msg(, NULL);err_msg(, &()); = emptystr; = nullptr;compiler error: unknown info in data base convertederr_msg(102, &());;%c%c%c%c_%sC_integer %s Params((double %s Params((novalue %s Params((int %s Params((, , %s, , (char (*)[MaxCvtLen])char (*r_sbuf)[MaxCvtLen], , struct b_cset *r_cbuf, , &dptr rslt, continuation succ_contnoargs)); .vword.integr = ();Integer.vword.bptr = (union block *)alcreal(());Real();[];.dword = D_;compiler error: unknown info in data base .vword.integr = Integer.vword.bptr = (union block *)alcreal();RealAsgnCStr(, ); = .vword.descptr = Var.vword.descptr = (dptr).dword = D_Var + ((word *) - (word *).vword.descptr);compiler error: unknown RLT return in data base .vword.bptr = (union block *).vword.descptr = (dptr).vword.sptr = (char *).vword.integr = (word).vword.sptr = .dword = SubStr(&, , , );compiler error: unknown RLT return in data base compiler error: unknown RLT return in data base got allocation().vword.bptr != NULLerr_msg(307, NULL);end suspendwithinwithinwithincompiler error: unknown info in data base (().dword == D_Integer || ().dword == D_Lrgint)((().dword & D_Var) == D_Var)(().dword == D_Integer)(!(().dword & F_Nqual))(().dword == D_)%s: %s(GetReal(&(), ), 1)( = IntVal( ), 1)cnv_def_c_int(&(c_dbl(&(c_str(&(eint(&(ec_int(&(tstr(, (&tcset(, &(cset(&(real(&(int(&(str(&(), &(), ), , &())( = , 1)( = , 1)( = , 1)(AsgnCStr(, ), 1)(BlkLoc() = (union block *)&, .dword = D_Cset, 1)(IntVal() = , .dword = D_Integer, 1)((BlkLoc() = (union block *)alcreal()) == NULL ? (fatalerr(0,NULL), 0) : (.dword = D_Real, 1))( = , 1)thenend ifmaincompiler error: node type %d unknown invalid context for break:=compiler error: node type %d unknown maintype inferencing: ., %ld compiler error: node type %d unknown compiler error: unknown info in data base invalid context for breakinvalid context for nextcompiler error: node type %d unknown compiler error: node type %d unknown compiler error: unknown info in data base compiler error: unknown info in data base invalid context for breakinvalid context for nextcompiler error: node type %d unknown compiler error: unknown info in data base compiler error: unknown info in data base && %s: %s -- %c illegal option%s: %s -- %c option requires an argumentSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember%.3s %.3s%3d %.2d:%.2d:%.2d %d r]:%s%s%s/* * %s * This file was produced by * %s: %s Icon Compiler Version 9.0. July 16, 1994 */ stringsStringintegeriIntegerrecordRRecordprocprocProccoexprCCoexprtvsubssstvTvsubstvtbltetvTvtblnullnNullcsetcCsetrealrReallistLListtableTTablefilefFilesetSSetkywdint.i..................kywdintKywdintkywdsubjs...................kywdsubjKywdsubjkywdpos.i..................kywdposKywdposkywdeventsiRpC..ncrLTfS......kywdeventKywdeventkywdwin.......n....f.......kywdwinKywdwinkywdstrs...................kywdstrKywdstrstr_vartrpd_tbllst_elemLEtbl_keytbl_valTVtbl_dfltset_elemr9.0.009.0.00found version %s, %s requires version %s9.0.00typesexpected type codedata base inconsistant with program, rebuild data baseexpected ':'unknown type:endsectcomponentsexpected type component codedata base inconsistant with program, rebuild data baseexpected ':'unknown type component:endsectcannot closeunexpected EOFinvalid prefix forinvalid prefix fornumber of parameters missing forparameter flags missing forparameter flag missing forinvalid parameter flag forinvalid parameter flag list forresult sequence missing forinvalid result sequence forinvalid result sequence forinvalid result sequence forinvalid result sequence forinvalid 'result' use indicator foroperation description expectedexpected '"'block name expectedvariable name expectedexpected $endabstracaseexpected abstr or acaseblockcallinvalid indicator for type of return valuet or f expectedexpected cnv1 or cnv2expected cnv1 or cnv2constexpected call, const, cnv1, or cnv2expected def1 or def2expected dflt1 or dflt2expected runerr1 or runerr2expected runerr1 or runerr2expected if1 or if2expected if1, if2, or islcaseexpected lstexpected lcase or lstnilexpected tcase1 or tcase2expected tcase1 or tcase2expected &&syntax errorinvalid return indicatorinvalid return indicatorinvalid return indicatorinvalid return indicatorinvalid return indicatorexpected symbol table index or '['lstexpected newexpected nilexpected new or nilstoretypvartypexpected component codeexpected ++expected **$cgoto$cgoto: expected label numberexpected $cb or $cgoto$efail$fail$goto$goto: expected label number$lbl$lbl: expected label numberd$m: expected symbol table indexdexpected $ret$suspexpected $sb or $susp$t: expected indexinvalid $ escape in C codeunexpected EOF in C codenilexpected C code of the form $c ... $e or nilunexpected EOF in quoted literalunexpected EOF in quoted literalblkptrdescstrexpected blkptr, desc, or strinvalid type codeunexpected EOFexpected:endendsectout of unique prefixes error, warning, data base "%s", line %d - %s error, warning, data base "%s", line %d - %s %s error, warning, data base "%s", line %d - %s %s%s {T_Cset, %d, cset_display(0x%x,0x%x) }; \n\t\v\b\r\f\\\"%c\%03osalloc(%d): out of memory alloc(%d): out of memory wdefineundefifdefifndefelseendifincludelineerror_V91_VMS11_ASCII1_CO_EXPRESSIONS11_EXTERNAL_FUNCTIONS1_FIXED_REGIONS1_KEYBOARD_FUNCTIONS1_LARGE_INTEGERS1_MULTIREGION1_PIPES1_STRING_INVOKE1_SYSTEM_FUNCTION1_GRAPHICS1_X_WINDOW_SYSTEM1LPATHcircular include-stdinrunterminated $if rline(%d): out of memory#line %ld "%s" invalid preprocessing directiveFile %s; Line %ld # "%s": %s explicit $error$define: missing name$define: "(" after name requires preceding space$define: unterminated literal$undef: missing name$undef: too many arguments$include: invalid file name$include: too many argumentscannot open$line: no line number$line: invalid file name$line: too many arguments$ifdef/$ifndef: missing name$ifdef/$ifndef: too many argumentsunexpected $elseextraneous arguments on $else/$endifunexpected $endifextraneous arguments on $else/$endiflineendifelseextraneous arguments on $else/$endifvalue redefined 5GZr:|  yl rr< 8v҇ {V<d9_J7%c|X]V7 LB4 Pqq*Xѹ;f5i.o +C"0"zEѼluʅ<efK+rtE@0@3pݥujKkAZucbIcYre$~cdP--ݻRA8!xy$]xBFVK!*Ina-ij|DBJEXY-,@R@8HD AaqO@J6ո8H lC}H?(9 UPHUU.|l'K9\&ogUn@=S+j=qXZ)H)o.KOp}v!yjIn݂aԄZ֞>+2ʻ?awm̳ GeT8K&T`854LaE土c_Quæp$CN2!KИJ 1S#An>1K;nY8.MH~XhN7Irk/.4V˜r<9'{a=u1s>VޤCZ8|L2v(Uz%Xk2Tiel'p kKaq4g5e#[U4F)0H\ 0{pU'H~ ݪせӏK]!cahC Uo+D҈uADRy!ULGǩ1ܠK OC7-~ [u-|P/>+ -n#N҈ 2 Mo$jTrMWj.ʵY+_X9ė LmdHA4Di|XQe5x6m+$hq:V,/K3GCOlbtLZMp=}> 4hYeIrIm_JzlJ1(pS ^"tʐ7D<6\|N+HV Cƚ߅q-M9d=+95b!@"EKl"ur%cm4 h![N9j#4ؚD[RSV M#hŢqO܇VIbC΀bYv.=ܯ}u Fo+[6 Icv)4ЮL 2@\&+?Pss6x9°3pp-aLtq+ȆB Yʨ0ў&[AIQYJb,&%qy^ wAɧ;LRͮ((:qtHPUhŔoT3k-[e;9+I5:-~XV֊6 ]``KA+-`;%Z]E7Ik6d)&BŒSCбd CO=Jc}g@K_z㤜C @]a]ݻ;xY>GyG[W$C5~D% p9߿>B ꞍSt_td|Mf;F G^|=EVTc7R^if1.eN?p.i[X x$hh-I =6d_ |.ٿx73aԻĿoVv!{\I^f'eX*E׃-YIcRX7^Mk5%,ќF(ͯ4MQQ%N~'YX`s觍e^b,@_PH䀿Fn Ӕ$:0G/|g!Of2<ڝea t (&/~~l|ڑTuC,ZbP_\(IKƲ!V'̷?l!,9H#y5\gs]JH{1N, Ȥ0yh^)i3a"Dg%4! '9C O֠5iuB0$jbaktɭfv/{joQx/Ar$Bv 77h-?>Aښj$ 8(4-q2z+]ID4#T3lD]:gY.rOݹ͐]~ *=q;i̽KZxQiޯ7A{p\ +)5m Xv3a>Xe#Mwϗ$^_>U=:᪚(:b"wa02n9ȖܧurpS{S8$%iI>ԹDCft,݌-̮ jXBЮm0M=z#|I g-NɎ-8!_6`:qb{~ÈDd20$=0) l ''5wLM iɘ"WIeYz2͐J/j0E\My2Tnjnݗ ħ Ζy2_6 g cAo/!͖>~s&cG+P"'8msHpia,"]"_JNZX-up-c#֑f<ؓjsa!J N|ot]ѱ2u- Sw"x~bEz1!}E; * ltjұA;+L~֪CV</E.cPiP瞂~DeE I"H-5_ԧu0U Q4E^#6Oʽ`L',=fw m燚A/p ?Q&Jbv XNXynC 4(>"3eg>:ޭ]H4fƚ:@~:^DjCӽ$wm8oظ̄:h8˫3+HVZ W`9" "l n^VK\SUc`Ytk@Q)Q.t%pj(3b}re+9B)I]ٿݜz"g55/wp+}*>ZY%q۩2.9988wkyX0NZ:w*~țaEr36)%"kAJw \Q@W%P5~Tǥv?'r0S ll6!aJVwj:s(j8(=V'\ed4`)GLG߯ NZ!i*,yWjVoDEc,;Lՙ٭[&d.1'#p581rbQc\!ˑ%>%qq /^w~-R[W4Ue!J6:+okGn]^ (TA/H+#3!m* 5b?zU=1_D72arb@wI.~0О%gdq#O@`P%R0獄`O6Ooă tq)‡hs'TM㸨Yℾr2mfBN^pe#)3r`ZŌl]G* 3+o:[$Zߚ ,S{rzߊc A0*)?#F?_ ;Eg|*iESJn4 f~dn"T?^5+#ƺMmmU ["]LWSɿ/CW H~p'JdZ?smmsԊ{)OBk{FH[ُ\#\<<C]VDoЁby1o:nd+"v`Rl-Bla+jf .3uBh XdYіjEmLܝ{_>=+sѝ{E.y3F5ϻ-}3FhI{d!EF-TVyEn#V^gO)yP'!9McLt50# TuuUة{DI!f(Ÿ=KM?H*B D~=?W/ц4ydNPdNicb!-Iz.,rI:"J۟ht]=IŶphwQ:*"R'%ؿI]*ÉFPr@Ȣg>b!1BY-@wo;}N;l`Mx_$\`qNJXsҔ}n&CP[ًedv>Q"lY&({)aL.` ڡ,mGg5L1ZޘFL◾޻θ a z9.:FR^sM^ X`¨Hz]Nu@tժuhN/-HfƓ痔ڠ=eG1ˊO=wBYS {am~yم_$d4부VCXK:[J;%*J(2!H]sV@L)A0WvI Jv+z:Obqа# rq "IшH6%ҌE(_)z1035j۲h\K#L:}dhFIA]O'zD)VXR' uvVglM`2\Di;IMD=kDoϛ1".=]t{Fxx+`'SB6f$H .;}p\e2+™RSl"nN242B0XEԍMH[vyT9 .4B D|G`̟X3^;%Offcuc QOз#Gq36]M}Gg"۸NQcztLg? rFGsR㭇^9|]-!LtP9hi\frڡg DnuluqPґ {A2OŢ*nk w# ƽ)N.LnK#]=y=uHtqlf%pXL= Eؼwu }O+_C)׼w1LY ;R3$07os;׭$BARXr4QoP_3V0p:%ܦZNTjǚR(XqN3!~%Կ.)v| (WߕoAkH^5Mcz΁Q~VK+I;|>FiMc+MJcGۏ| `ՎC0ӹ*k8h!Ix_iJۼ FդOGqWd잭Uo@fNu~CLWu"r$n@ htve&pKC$UYtxѿ=ANg vYeB`WX!z}M1@D śg8fz5FK|{\ޫs'"=u1ZI+ JKdf_pAi R:A*&dXr yL$ )}H^tニHEd {} 1LegO*BE]?nDp>X6/2z&.N)hrBphf/Ρ*m[ PX]B&6o]q;8p=%{|OvI[㒁-[񺓴v Xy ySK%Fu4٫UANGE6C8""w'a>B0\@~=I*( ;OR)(J{%@C:<09N }Zm9lA.*=A"mF\4\Hk~=ׇ`Eʸp^!>㌱Eit*%VPYAZ^rLJN۽isՁ-T(*SbNY3PS!B3$ǍBdkXYIޒY<Ȱ=.S?BMb|.%CAv VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1K71 "#2=3a45678 99 :] ; < = > ? @5 AY B} C D E F G1 HU Iy S V W X Y Z `9 aS bn c d e f g j) k@ lW ms o p q u vwx$yCzb{|}~Dm:c0Y&Ox.N_p +<M^o*<Nfy"/@2V4j79;<=>?@ BH5JGOWUiZ}\^_abgh(i?S |eN@OGONOVO`OiOpOyOOOOOOOOOOOO  !"#$%&'()*+,-./ :;<=>?@AC GHIJK M OPQ S U WXYZ[\]^_`ac ghijk m opq s u wxyz{|}~dPkPmPtP|P~PPPPPPPPPPPPPPPPPPPPPPPPPPQQ QQQQQQ#Q'Q)Q-Q5QJQRQZQcQxQQQQQQQQQQQQRRRR4R?@ABCDEFGHIJKLMNOPQ R STUVWXY!Z$[)\-]3^5_8`=aAbGcLdSeUfWgZh\i_jakclemgnioknnoqltm%PatchStringHere-> [[,[[[\ \\$\000   8\htȇԇ4@G `k{      !(/6=E J!M"S#YDRLRUR ^RaR iR qRtR }R &T[\]^8VcSvOgUf_fbN77cU3I:g`va9ed8ZvZv;u>h:lFP@797<F6w7kjYDAnCE`v^H)dG2I=E45@6<?BDGHvWLvMK?iYtX1&T[\]^vVcSa=f_b>ivU3;vg`aAed85Z;>:vF@9v7<,%qhrJ_2ACsERQP$OGN2MI=L45K6J?B1D/H*W&T[\]^YVXcS(pBmf_"bo!U3 g`aed8 Z;>:F@97<  ACEG2I=456?BDHW.T[\]^YVXcS-f_b!"U3g`aed8Z;>:F/@497< 0 ACERG+2I=45C6[?B#DHWYX~jyx{z|}''()*+#$%&#ST#VWX\0bebkl 3     Q,-.]kTYZ\5$3-)6W+^1D_FaH/RcV enl' #"hhjek'R98=<[]40.2*,7&XEIMKC;`dGQOA?bS(U!YFPN@>aDLJB:_HcZ\-3/1)+6%WVT$lne5heofhokm     fkkmjgiohfnfl  mmokjj" &+,.0QTVehmrtx fA VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1rDO$%yz{|}~+ )-/123456789:;<=>?@ABCDEFGHIJKLMNOPRUWXYZ[\]^_`abcdfgijklnopqsuvw+!#'S(k*V* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*Wf*h*Xk*o*Yh*m*`* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*a* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*o(k*u(k*h*m*h*f*h*7f*h*m*9k*o*Oh*o*~d_%}i*T<<<<<<<<<<<<<<<<<<<<<<<<{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%}=cw^O%JFii****<%@p%%%%p%%PG<KJ   !!!!!""####$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%++,,--.(((())*2233//11&&&&'44400            θ^0E[:Z_Y0W XbVKU| Ԯޥޥn :0PRRNߥެݾެ(ݾ(P,Ѯ,1dE-80T0S/$Ю,PPC5xlx ,1?P91PA1P1}1y1nP1e1YRb1JPbPPa1uuIUuuuuuu]ueuuuumM2?Pg﮺fhiRBdŶ')#10:()f*Y*ݏ`*.%Pݏ@* P3*ծ jRb"*P&gP P bRb<P P 7ݮ &'!ݮPb P ݮP? PݮP PݮPエݮﰴ)ScݮϪPkac(PRn(PRRR PRR(nR(Rc!Ŭ(cPS3ݮl(ݮb(SݏY( PK(ɳ((ծ #(/Ŭ!('ݮ ݮ%PTTL''ݮ 'ݮ'ScݮcpݮoPcTA%7uŬ'd'xRRR~ݮ ݮTU'P<^BUSެ RC ТPSC`SPxP~J PTTPЬPQPRЬ P `a Ь P `bլ,ݬZ P&&&&Tݬ&ś#^AR&m&^ݬi&<^ATVSĻݬ+&PURRc&RP9PU&P%PBݬĽ5#Rc%RPU%ݬ%PRݬ"cR%R9R%RP^@\)%u%ݏ|%^5CRBTs%SbY%PJ\l-Ь\{\P\?ЬX\dAdP'fdPd4\\cSЬX\|d\\ߢc$.P\\ߢcu$P ߢc\$J\\ߢ(cD$BP\\ߢ3c-$+Pߢ@c$Pd ߢMc$dP^ASTZLfݬPߣOݬߣqߣgg - ߣsS ÃG RbÑbàbðbÿbݬm#PݬZ#+#Ь P ^@Rլ P^@Tݬٛ料PRnnSpRbPnݲ"P:bPRbPSnXPcԣSbPݬ ^ScݬݳW"PcPScbPRݬPbԢRc^@UVyXrWЬSSXРRb eS;PPߥRlP Sߥ߭ݬwP ߥwNߥ5gߥn^HSłߥxMPSnO~PRSŌmS RP*RaˏSTDfbRDfŻŷ R@PSſhzxSRbQP#ԡaQRSTRbQP#ԡaQRTSRbQP#ԡaQRSP^ ?W謹Y US RePՠ `eePՠ `յ1ЬVTЦ XXScPѦT@T;PXcPT&PXcPTPXcPTTXSDi VDiSPSSPݵR?XhPe1)P1ЬVTЦ SShPѦTCPT;PShPT&PShPTPShPTTSSDi VDiSPSSPЬSѣeQ աSPPѣeQ աSPPSVTЦ SShPѦTAT;PShPT&PShPTPShPTTS$SDi VDiSPSSPP|^PQPP=1PPSSPP:RR(HP?PP=1PPRR:P=1PRPSPdPRR:UP=1aPRPTP2PTTPP:'1F?P P=1!PPSSPP:QQ'GP?PP=1#PPRR:P=1%PR$PS"PT PPTTPP:)S1?PaP=1m'PNPRR:?P=1K)PR(P$PSSPP:OO%E:?PP=1 +PPRR:P=1-PR,PS*PT&PPRR:P=1/PR.PPRR:{P=11PR0PHP2PIPRPRR:CP=1O4PR3PJP#PTT|gPSSPP:MP|@PP=17PPRR:P=19PR8PS6PT5PKPPUU=1PTTPP:#}?PiP=xP%PRR:P=%@PR?PS=PT;PU:PƻSRէݧ hݧhRRhS%華P^XJW'ZYV(RRj(5PjU5/*j(\(<,g±g 5Pjj1YP?PˏTP@kP$ SQP0TU PˏTU UUQSPT. R֮ 1uPTe TE R֮ 1XTr TR1RSS$12YUըݨ jݨjUUjY%jϮﱢ1PˏTP@k1Te TE1ER&> VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1]m1T+T-R1ˏTP@kR1YUըݨ jhݨjXUUjEY%j6 1PˏTP@k11ˏTP@kQQUQPQQP#U0TU ˏTU UUSR1PYUըݨ j ݨj UUj Y%j~ hJ1PˏTP@kQQUQPQQP1U0TU PˏTU UUS1(YUըݨ j ݨj UUj Y%j Ŭ易zJP#PPS1PˏTP@k R 1Tצ߭.PUUhy/PUEpPTծ %f0Ph{/PRP PS/PP^T,X' VYZ [ЬSWPRRS1*R 1"R1UR_ äWPˏRP@fWR\cePRR1Ѥ  d9ФP֤\`R^-ePRR1Ѥ  dФP֤^`Ѥ  dФQ֤RaePRR CW?WePRR*ˏRP@fePRR ˏRP@fRSR  R1RS aP=USթݩ kx ݩkh SSkU U%kF 0RäSѬ"$SdPi"v-P$PSdӬP Q-Pv0P|^)SzT?R VP\\ \ P\\ \ \0\91LUnnդݤ fk ݤf[ nnfH U%f9 #\ \ PP\\\ \Pb\0%\9 bQ0\PPQbP\\0\9\P ^YS(TcUXYWЬRR R hPRR R R"1oVĝեݥ gWݥgGծݮg2V%g#hiRR PRRR RPЬRPRR"HR?R :Pѣ  cУQ֣RaPRR"RR R"ccP\ĞVnեݥ g`ݥgPnng=V%g.hRP^贈TRSd\d\P P\\PP "VVVVVVVVNB:<?Pb \cbd&cb PcbPbPPb Pbbb\PP^&V&UXЬRSТSեݥhOѬh81Sh%ЬPՠ 1ЬWPTWRR$RRR RФ8SEҥPՠѠR`S. PՠﺛQաѡRaSQաSSh~Rެ Pb`b Rb`bݢhXB$P ^M%SЬRR$RRR R ЬPР8PPՠPѠR`P PՠQաPѡRaPQաP^$TVRSբݢ cݢc}լݬch%U?!^M$S^TЬR ݢ)dݢ3dլ ݬ >dݬEݤӣﵗ^#TvRSբݢIcݢScլݬ^cݬeݣwe ^u#S RբݢisDݬﳔsY*ݏ1|^!#V2UЬTƁSƂeRbSTebƇeݏ^"TS﫡ĂcRbݬݬcbćcbݏ^ݬE^M[ڀW<xRR!PgRPgէ7PgRЧR |WkЧUЧ TЧSTЧ\ЮRBlRTRs\TYYg\\UXX\VZZxRR\PgRݧyPgէ87PxYTTxXUgUxZVgVSdUeC\\WkPkkk\@\7Lﬣ\Lk%k\SZ1 O1CRRok$Pkk'\lѬS\lѬS\llk \llkЬRݧTgKPR1PP''1P?PSkTJPd\LP*P!@\L @|S1TUTݧgPkݧgPk1PRUVBPP^xPPxP\\UХBR\TdBSSSCSR\CA\1_B\LȡS1LxPPxPSSUХB=RSTdB]\\\L\RSLSB5SCm\\T UЧPP ,8<X\`d$0D`t <Xt8Tp4Pl8Tp4Pl 0 L h   , H d   ( @ X  8 P x  0 X p  8T$Ll$Hd,Hdp8Tt1?P?P111-Rf$1P1111 1 fRݢ8'1~fO1fRݢ8Pݦ3111fRݢ81fRݢ811P1fRݢ8<@΍1{P1u1q1mfݦݦݦݦP1KPfRݢ8 <1/P1)1%1!R΢ 1ZfRݢ8Q1PBfRݢ891P11!1P 1P gP 1Ц1 GP1fݦݦ!P1q P1]fݦݦ-$P1CPfݦݦݦP1"Pfݦݦ#Pz1Pfݦݦ#P^1Pfݦݦ#PB1Pfݦݦ#P&1Pfݦݦm'P 1PfݦݦQ'P1{Pfݦݦ5'P1_Pfݦݦ'P1CPfݦݦ&P1'Pfݦݦ&P~1 Pfݦݦ&Pb1Pfݦݦ&PF1Pfݦݦ&P*1Pfݦݦq&P1PfݦݦU&P1Pfݦݦ9&P1cPfݦݦ&P1GPfݦݦ&P1+Pfݦݦ%P1Pfݦݦ%Pf1Pfݦݦ%PJ1Pfݦݦ%P.1Pfݦݦu%P1PfݦݦY%P1Pfݦݦ=%P1gPfݦݦ!%P1KPfݦݦ%P1/Pfݦݦ$P1Pfݦݦ$Pj1PfݦݦݦLPI1Pfݦݦ$P.1PfݦݦݦP 1PfݦݦU#P1Pfݦݦݦ#P1`fݦݦP1Efݦݦ P1+PfݦݦP1PfݦݦPf1PfݦݦPJ1PfݦݦP.1PfݦݦP1PfݦݦmP1PfݦݦQP1gPfݦݦ5P1KPfݦݦP1/PfݦݦP1PfݦݦPj1PfݦݦPN1PfݦݦP21PfݦݦP1PfݦݦqP1PfݦݦUP1kPfݦݦ9P1OPfݦݦP13PfݦݦP1PfݦݦPn1PfݦݦPR1PfݦݦP61PfݦݦP1PfݦݦuP1PfݦݦP1mfݦݦݦP1NPfݦݦkP11f PݦݦP}1 PffPd1ffPL1ffP41ffP1fݦP1PfݦP1zPfЦRR8RB`Rb:P1PfݦP1:PfݦP1"PfݦP}1 PfݦpPe1PfЦRR8RB؈RbP;1fݦ0P%1PfݦP 1PfݦP1PfЦRR8RBhRbBP˿1XfЦRR8RB@RbP10fЦRR8RBRbP{1fЦRR8RBRbPS1fЦRR8RBȇRbP+1fݦ P1PfЦRR8RBRbbP1xfݦPվ1bPfݦ NP﻾-R(1=fRݢ8P81&PfP1PfݦPg1ЦRb #R PݦP=1PR11PЦ$D VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1z|1ݦݦP 1ݦݦݦP1~P #PݦSPݦݦP1NPݦݦ+PݦݦP1&PݦݦݦP}1 Pfݦݦ'P`1%PݦkP<1fRݢ8ݦPP!1P SPfݦݦP1PfݦݦݦPټ1fP  PfݦݦPﱼ1>PfݦݦݦP1P PfݦݦlPi1PfݦݦݦLPI1P {Pfݦݦ$P!1P SPffP1PfݦݦP1m PfݦݦPﹻ1FPfݦݦݦP1&P PfݦݦtPq1PfݦݦݦTPQ1PݦݦݦP51Pfݦݦ P1fݦݦP1fݦݦP1mfպ1bPfݦݦ P︺1Eff 3PR(1"Pfݦ Pݦݦ 1Pj܋R(1fR<~ݢ8P81fR<~ݢ8P81fRݢ<<~ݢ8P81fRݢ<< ~ݢ8P81|ݦݦݦݦPҹ1_PfŹ1RPfﹹ1FPfﭹ1:Pfݦݦ!WP11 ^ЬRˏRQA|xPѠRP`PѠRPSݬݬϥPS P ȬPݬ{!SP^e!ZN[XtYլ1KЬPPkCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ?PP11P@11ЬRˏRQA}wPѠR `PѠRPS ݬݬϩȬPiP֠iPݠ ݬݬύPQiPQ PiP֠iPݠݬݬiPQiPQPiP֠ iPѠ kР kݠݬݬ;PQiPQPQЬahPРhPQhPР Q֠ QVVkVkЬRˏRQA vPѠR `PѠRPW\ˏUhRVSTR`ST PTˏP@uRЬS R`STPEuPRbP"ѠV`hbP RbP ѠV`hbPѠV"hSVTPUS`TU PbݬߪwP0^TЬSˏSQRAPѠS `PѠSPRݬݬ7PRЬ &ѢݬߤYPݬߤoRPP^ЬSˏSQ}RAPѠSP`PѠSPR>VPРVˏWGfSЬTЬUS`TUPRRGfԢRPP^tWЬTˏTRBgPѠT `PѠTPR0ˏSCgTЬUЬVT`UVPRRCgRP^MqYЬTЬUˏTRBiPѠTѠU`P ѠTѠUPRrˏSCiXЬVЬ WЬUPTXdVWUU. U !PV+zP WVP TRRCiRPP^ˏRQBPѠ `PѠP^ˏQArPѠ `PѠP^ˏQAsPѠ `PѠP^ˏQAoP!ѠѠ`PѠѠP^fPQЬaЬЬ QP^ BЬ`ЬЬ ^"PQЬaЬЬ QP^PRЬbЬЬ ЬѬ/ Ѭ !ݬxP ݬ ݬP RPP^Ь`ЬЬ ^ T*WﳇXPVЬR[ZUYiRPPТSբ?SMPQ Q *PhݼSĊfegЬPРR֠bRYZP|^mVЬTˏTSCqRѢT bRѢTRU1kݬMPRPբ?ݬƲТTTSˏCPTTA~ݬPUR RPSQՠ&РTˏAdRSˏAdRSQQSTTwTwUPP^R݅ѬP |P^ Ь`ЬGP=^-UZwYoZjXt[jWn&zSިRb\Pݬ\l\RSTRbPPȏ`PRTSRb\P\Ul\RS1PnT1JVd\Ь8Rb\\\Lg\b_'RP\Rdf1ȏ1ФSˏRP@i\Ѭ R l\Ѭ RS!\SѬ RMP\ϭl\>Ѭ R6\ѬS Pl\ѬS\Ѭ RR?dfP\jФT15o)ckRbvkbŊ2mbP>ōkRbškŻm^%U[lVЬRCЬQSPա'Tˏ@dRSˏ@dRSPPSTTtTtЬRТYZXТ TТWWSˏCRWWkRkR#%rfPfݬQThPWYX~Z~fgTRb)ZSb\ fcb~fcRbf*ЬRC<^|SެUePS*eQRˏCbPTˏCbPTSSTP^sXVqYKlVkUMiT:gWSZ-sPޤ\l\PQ\l\QP\l\PShQiPg\l`aQP\SRj\l\RP ^ ~S\~QPRЬb}| |ԢԢ(Ԣ 0Ԣ<<~PQAQcXRcݬc  ^5]SPRЬbp}cPcP| i}R`}ݬ@R ^8zЬ`|Ԡ Ԡ4^8^PQЬaЬPРРР 4QP^<.PQЬaЬPРРР ԡ4Ь 8QP^@~PQЬaЬPРРР ԡ4Ь 8Ь<QP^D~PQЬaЬPРРР ԡ4Ь 8Ь<Ь@QP^H~|PQЬaЬPРРР ԡ4Ь 8Ь<Ь@ЬDQP^<6PQЬaЬPРРР ԡ4Ь 8QP^<PQЬaЬPРРР ԡ4Ь 8QP^@~PQЬaЬPРРР ԡ4Ь 8Ь<QP|^)VmЬRR-PURfu1Pե?Rߦ_1Х?SУTc 1<?PRЬPРРР Ԣ4УSSg% bTP~< ~P8tS!mb<~TP8RPSzb<~TP8.PS={#"bT?P~<~P8RP@~qPQaЬPРРР |4U<QP^VzWЬRb S'SRP`  SР8P` SnSnЧTߦ&ݬhPդ?ߦDݬPSUxURPRbЬPРРР Ԣ4S8ЬT STV8PVPRTTP@eP`1YU&ݏ-|^V mUЬS8RBP`TBeP`Sդ?BeP`S|H~PQaЬPРРР ԡ48T<Ь@Ь DQP|^MVvlUЬS8RBP`TBeP` Sդ?BeP`,SD~ePQaЬPРРР ԡ48T<Ь@QP^ WuXЬ Yi 1ЬRbTRSТ8R<T`УУУ Ԡ4R8PRЬ Sݣ8ݬݬRTPVУݦD!BХ,QsXRТPРPРRQQQXRQ ￰ `PQ7XRТPРPРRQQXRQХ(QXRТPРPРRQQWRQ R `PQWRТPРPРRQQWRQݥ ݥoХPР0Rբ, RsТ0RP^Y0JXмPP#Sg[ow  g3[1t?Pݬݬ /P1{PЬRݢ$ݬP aUVߩD8APSS`Sm=VPУݬݢ8"4`ԠԭRQbaRQ| | |(Ԡ0P 0 PTT>Э3VЭPSU``ݬЬRݢ<ϩT=TVi6`1Pݬݬ1'P1sPЬPР8WР RԠɺS Ԡ$ɾ(PV;TSPPRbԢS RݭЬRݢDR=ZRiݭݭݪ#ZSݣXP~塞Pݣ~~~ݭHݭϔ0Whˏ#RЬRݢ$ݬPݬݭݧ#WSݣP~.Pݣ~~~ݭݭ0V1ЬRݢ,SPSޫPPRbԢS R=Ue ЭVVԠީHP9TdߩN=PSSdPRbe VP R]9PRde VԠީVPdS\ݬЬRݢ85Pe VԠީ\Pd1ը0ߩbݬ`W1Ш0RТ RZR ݢbq.ЬUѵ8 /Ш0SWRѣR$Rݣ9P81lPRRТR2\WШ0TФRТ QТ SФRТШ0RТ\ɉ?<PVV{8Ш0SХ8Rݢ$ݣPШ0RRТ0ЭRݢݥ8R0tQPРRШ0SѢQգL4ҩ`ԠԭRQbaRQ| | |(Ԡ0P 0 PШ0Tդ.ФSyPPRb|S ֣R7 Pݤ8ЭPЭPЭWZPV7Pj74V1(PݬݬP1PݬݬiP1PߨPScЬRݢ$ݬPP Т8S61PURѬR1ЬRݢ$ݬOPPSC:PPR SԢR61lPݬݬ]1P1WPVURѬR1E'PScЬRݢ$ݬPP Т8SF61 PЬRѲ@ "Tݢ8Ϧ5ݬݢ<P1YW?Oɏ9PTTbYTݢ8^5T5OPФW6Yݢ$ݬ-Pݬݢ<rNPРRѢTQUɔ>9PVVS+PPRb|S ֣RZ5NPTVF5^V4`Ԡ|RQbaRQ|| | |(Ԡ0P 0 PUU6ЭNNPTWHXݬЬRݢ@ϑU1MSУRѢV V1P4O`ԠxRQbaRQx| | |(Ԡ0P 0 PUUf5Э~MЭPVWWUF5 U;5U1UMM`~W1PެVfTФ8UѴ< WSUfRRxSP@8P`ϞUSЬSݣ$ݬ5PݬURxRRB8Rbn1hPUUTCPVTa6ORRѬRԬФ$SФ,RSRTRSTPѣ00STRTTݬPݬUVɛ(1PݬݬI8P1PݬݬAEP1PЬRТ8UURϙPTRϷ5Т<ݢ$ݬAPLEЭSc PRɢPRR~HPcɮݭ2PЭRbǿP~Pbɿݭ 5Ԡ ЭԠUԠ TԠ$(Ԡ,0PԠ$(,T0Ԡ48Ԡ<@DЬHԠLPP1(K1nPRb'5Ԡ P JU1PR~11DPݬݬIP1/P5PG1yJSRТЬ$TR (Ш0,0ЬRТ8RТ8PP6R1v?PQOЬRݢ<uT4P_Oݢ@0|0IS0P`014P?0OЬRݢ<ϫ/SѡPtPRb|S ֣R/1ը$ݬNPQhЬRݢP@ݣ~~~@߲@*ЭSPw>k> k>S>x6J~TdPPJx;~dP;xk~dP 6xj~dPIxi~dP3QIPJRAbQQIRo;n;PB`RRY;Pk5R@bPPkRjFIPB`RRjPi.3R@bPPi=s=i=k=U=PU,eEHelQePR``bPRQU4 ePTTԣݬr Ԡ ԠGPrTR`|R ֢PQVf4RФT>aԣЬRR֣$ݢ8R+PRף$RWԠ bPfiԠ DŽRԠǼ Pf46>Pf<<<;3R,;PТ RRTPRTTP~ߣPЮ@3QPR`bPRQЮD=ԣެVfTT ݋PQaЬ U|;l;<3PР$03RQ$QPG*Rb8b'3bFb0bЮ<GЮ88Ю42Ю0FЮ,0Ю(FЮ$n8Ю kЮjЮiЮ:Ю:Ю :Ю:Ю:դ4QС4PР Rh С4hR4P ^UPSSdhPУݬ[P難PRbdԠ DYԠG P hSPRdϙPRRVhVPSnjRRhvBjЬP|^5VЬRݢ82PTݢ<%PUݢ$ݬPRPSԣ MTԣO $U(ԣ,S04Ь8渚PR b|PTRSTW;TT-A(8P,^aWЬPР8Р<[Р@ ЮR8P@7Rb5RRXբ P5PР5ЬRݢ,Phݢ,-PRم`ԠR PЬRݢ,Pݢ,-PR`ԠR P ߭ݫˏPZխ}2[τЭR_`ԠR PѮSC߭ЮRݢˏPխ >21ЬRݢ,P1Ь1ѮS1ЬRV<ޮYxV~ԄPUծ3SV-PxSQAeTxSP@RbPР0dAQbPР$aSSVUTT*PSSRS|`ԠR PnSRc`ԠR PTn[[ЬRݢ,PݮݮX#P[/PZ ݮݮ8ЬݮݨhE]PRR!UeݨhwE+{58Pe-+PТR\5ЬRТ + ?YP1gqPTTe*PФPPSc Ԡ zЮԠDŽ P TR`|R ֢PSIRbԠ ǒЮԠǡ Pbv*F*|49Pb.*PT,P_Ԡ ǤЮԠDZ Pe6Ԡ dzPݮݮiPݮmѮS1Pխ1խWЭR`ԠR PRЮS SԠǺR Ԡ$Ǿ(P%1Pծݮݮ1ЮRЮSw RԠǺS Ԡ$Ǿ(P1$P@I3RbSǾݮӘq.nS=ЬRݢ$ݬPݬݮ ݣ#ݣÜP~PTݣ~~~TTЮݨ ݨ0ݨh~PRRݨhݨ ݨP(T2P(PТR12X&0P^eWЬRТ8[Т eb Y ebq e]RbXXz ebØ ebð eb eb eb eb9 ebW ebn e^SY7V`PZ`n,|[ЬP`c`9nuˏWQС PPRPPRRXС0Ut f2\TdW1v RnZw idnZÒ fdXå idñ fdø RˏUP#Rû i[R f[ RU#R i[R f[ Rb i[ i|[Rb fbX fbˏUP  fK[U@& f:[1nZ> fdt fd fdÐ fdÞ fdö fZRbnZù fb fb fbPР$PѰ<  fb fZRbd71ܳq8yݏpjl@z팑bc?ʵ_Ou1A;ߤyFs4~DR0b4h/ D3C~|{ʤhYWFmb@Z`)Elia'hXMuU_1bZ-HtQV|]o|oz ~<~u.yN&״ff13{d9+ck@V*C9<Ե nwfal &˲ 2LoWe%#3{AkyW1| }8H C݊ Mű H_WKi'%…$q\%y~%\ R8Ԭ"qǬW ;/&arj?պCφu^i!~#gj<țٱ0ts䚣On{'@J7>/mDI 'ڑMbl!z3|'h]1`ŦTvR| Wޚ#7Ý*U$68?H,^^tЪj/yxJN;7M((cfxbDzm~䤍 ڠ&fR0jaFed-r;YaXh"wfa>ϐh迁ٔQ6*vkOiOIq؃[P%'2`k7A25s+f';pԗTp釭3 6)ݕ[ba&ަ1nlvy^iFh`g4.fxǘS[.W9C HY(h72XZ>|̈_\ vA|c$<բcYm"]ʻIb/5,c#8W%or |/iϞ0R>n$LL=qr ]cټ5.`H")hjey&Ե0°L{븆 nSdWt;( ڛ; ͷJs7u2f1۬d~VȤ[.Gu Y O، nS |Tjhʾ-z)ma+#R9(tGƚ u ?ɜ3鈹Sd6 +anM8P~z8pXfD&U!=+Dž\Q%sIA/#5rw[GLP#LXby\^N)ndš$}+!gñ<Ql]hvBKnk5 Tn85nCL%B庎:UGkS> Vre ZX3W ]ՠ[<+G$L)_aFj6ѧ70j&dQ8W bCL GͨR9~+uF\Z;9u]ڪ94sEo6ʗ7f'22: tj`|l J,ퟄFኅ 궻-!2,P0Zro#o h o%g<&EpSq?xڄbޏ9x>fCLݎ*LR]p{&MdpZb̘RY1l8-! c_7IJma! kk ^w2K;n0/€k5زKz_ts5,\x^E,WL@P4z䦄<_|~5x n=/޳ B1+OqY)EAI)SM",(F{rc[UQC7%&(Gwt"<*B(+uc_+0P77u\ψ\hdB`G@.:{絒sGXsY3j7A4,bo^/s&`"whXuߐ-8iB8#2|0#Eښ{2o#BD[Püco(KT:W5gDl;e HҾS8q !V#Ӱge/٧1,m]W[tG:&Uw~+필[Q%/ܗr7YPIQPߦ5@zU$Ճ8"Z_6~x6ã›ЦR:LOE7lL !^4թKik,\P$v;V 終 j#п x90>NHXSeo,y& Mm9lR_<(QcP`&GnkS[7ku{D9ؤ,zѨ2lF 0ϔ]1U+']-]evifӁVőAN24+njptvycׁ=aTpZl8 /6IY1z1+6D<{de+$̧c!7"jĺ|c`,R^g%7A3uĸ{u(=x,Y/?)aVk&cvn>ܣYD-wVjzN/1mL]!LJ!Lx =Y`] apUЌ;j\2Q3*D0KʞvAqxȀXƕ?lc ı0$yF`4wW&_4dX3 2;I]IJ C5ٗnGmiAhqOjdY0QPV5AGx2)f7 4γbm%_r(dLE1ƚ3}`umNN]4/Ӣ7W˶T,U,Ҕvjg Wp .;yA gFĿab^Õ.=q`d{yT Y$^ܞ1+9)cٝӋJUjwA𯄁A)uC@@JH0Dj;VW4c%~AA2g& :-*RATr6qP־:'S%rFJO.Q&y6GL|]}/Ju  !َuŝ=PD } ]t>ށ1'8Nh$D1n}EMB\%r/{]HoFC5[A=- >C1J)[Ú,y+lXR$*[Ngj{uI4a3B1"ȬKՌ|3nlrUl:d.X6hR0RP(%SgjlsaL0 ;k{ V$qLqآ,Ӆ0,1v!?p/ZUJ!=L8O;: ^{OР fht'I |N(_GS}H/s(nza{[H5Me^7&W؂QަlLӼdi1ya㣐l yXLQ*Tq8,a >0ȎhU_R(hqn t99H]3Ѫ~X~ߧ*tg4ͩPr^ S#F-9%,aø8A{^i:Cl sPH5EwP z@ϴIj\τx<^>CCrjoD->ƒQA,|kcLp:> !/SSn}Z3ﵲ tWb'XK$rБܦ M>([ F9Z a4e5+c*;[F+%׷dT) g+¡IuZFpYB4rd6v "ʏ^ZÔ||UbZI"zɲ%v\1="57FDke nkG7rHWQɳ jƌ.h8$Ye$n9kė@m|]F+4 Ъ?iw1u62qq3o`SwppnU Xpah q:+BIqJ,GƐaviSwC R)fHavo.w\r"9c9q٢ ʁx1wR "$rY U['Í}qbʁXׄh ~nf'RO 8:jS/3S?^;Z#<ݵk'UHxo#q@C]Vfn'Yk/]">9AskHai̅;H6RDs$ =kl6QwȪd/YYlQ[)8A/ *3q4eIJs#^sO Ę+T;D ѝkY+".-8lOԛw w+`_烮_km8VVIkbZ!?uvg.rc%`A+ S`NNM7 Vy{1|ee\^1(WjNOTiE?\jn :6D2 U #f_b Tw}V2&=W 4r?YPQYH )_A;\HVF0CtlYU`r\. T;Rf$zkC1ѝ*Ps'1J& bqCcj (2bQ,7.*?Έ'?V.[.r=tr_2)ϩ2Ru%I_w:m~¾ E\MjyJ.Q!)o?k{ z术@缥+bځn  뗏G$Rҧ{HEjO0uxC(CWC2#䙬sEP20Sz=6>+psGp/y9C  ^\X|8ʂ*\G*h+m[|M>e#PSXe>xt6Hn?cBb> fl - 9IY°~-,RTo/٦*_Ecc%c-- PfX>2j=AT\iրȖbWf1}X/ &;|bOsZi !1imRWNa]q@^(/na%+`ev7KB __ՌyH%zP VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1i fb6 fb\ fbW ˏUP y fb PÔ fbWUí fZZ fKZ f?ZRb[ fb fbWX1 fb1PB fb1[WX[Pՠ WX U UPX] fbs UUu fYTdWXRRÆ fdõ fdRUXþ fdX:X fYRbfbW*fb`fbWlfbWÙfNY[ùf@YRbfbfb$fbKfb&nZtfXRbèfbfbfX[ZЬP X^ٚTXWЬU1ХPа Rb1W QRQQR1;բhhݢ$XScgcݢgcgcݢݢgc5gcee4ЬScUP`VVU;WRb`gbVUbgbwgb }gbЬRUČgeWScVUħgcgcVUgc \gc gc"gc;gWP|^IU^VAfVTdRbݬCfdUfdrfdŅfdŔfdŰfdŽfdfdЬRRSPSSfd fd fdRެ TRdR4f=VRRdSެRSbPSBfVSSbլݬRfUլݬofUŊU^TVXKZPV]Y[լ1?UWPмPP480\   ,DP\$1.?P1ЬRТUđfgЬSSݢ ]ĕfgĦfgSݢ AĪfgSUϫĽfg1Piݬݬ 1zPݬݬ% 1jPЬPа Rbfg1OPjQPRQQPՠhhݠݠfg1ЬPР RբhhР Pݠݠfg1PЬPՠ1ՠhhݠݠfg1PЬRТSfgݬݢ <ѣ1aѣ11ѣ1z1ѣ 1hfg+fgݬЬRݢ /fg18ѣ nݣUfgjfgЬUUЬRݢ ϛݣUSPnfg|fgUݢ sĉfgUݢ `čfg1đfgĦfgݬЬRݢ 3ݣ Īfg1fgfgݬЬRݢ fg1`fgգ fgU%fgݣݣfX5PUfgfgݬЬRݢ ϜUfg1P1k-fg<fgZfg|fgėfgĴfgfgfg1kfg(fgCfgefgĀfgĝfgfgfg1Eݬ@19fg1,fgݬЬRݢ @fgݬݢϘ1fgݬݬ!fg1#fg1)fg1/f'QݬЬRݢ <3f QݢσݢЬRݢP`XfgĎfgݬݢ ĒfgUЬRբ 2ĦfPݢ PPݢ fR3ķfPЬPՠݠĻfpPЬPР1^勒STЬQա1СPPYu P?PPs1ЬPР PݠdOjPЬPݠ dORPЬR=dOPEdOЬPݠ dsOЬPݠ d\OЬPEO ^SUXXXRxRRެWgPB Rb1nЧV OTXXPxPP@ QaPP<\|1'P?PXXQQxQQgPA P`ed1ݬXXQQxQQgPA P` 1XXQQxQQgPA P`ed1լ ed1Ped1ЬR=ed PEedXXQQxQQgPA P`%ed`/edЬR =ed PEedXXQQxQQgPA P`2edݬXXQQxQQgPA P`xXXXPxPP@ P`1^Rլ=!ME mM^ﱏS"WUgP,;X`fˏVgPՠ 4V0լ+NeMRbTebiebkebÂeLÑeLìeLRbЬT =eb EeböeLRbebЬT =eb EebekLTd eedЬR =ed Eede/LRbebЬT =eb Eeb eKeKRbլ -eb P;ebQeKլ qeKÖeKRbîeb÷ebЬT =eb EebegKRbgPՠ  ebTVլ eb@eb5ebլeb P'ebX/eJ<eJWeJgPՠ Vլ feJP ^T6WZ@Y X[VlfvJScݬЬRR4{fcIЬRĴfcRfcfc fcfJ)f J~fJЬRТ S1IUĖfecRhPRP *feUiPRP 3feAjPRP >fe-kPPRPPRբggݢݢIfeĢfeݬݣόУ S1oīݦMI^STôd-IRbլdbdb dbdH)dH$^1UjX{ZH[]WԮԮЬRТ S*ѳУRc ֮Pѳ cn֮У S| ծѮ  Ѯ ЮެоRТ TԢ T1VФ YЦ SдPP T$1P?PѮ 1S1ѳ 1PУ S1ѳ }PѮ  ФRѲ d1ScУP` ФRѰ OУ SIУQaФPѱ 5S.УP` ФRѠ У SУQaФPѡ ֮S֮оRТ T  УTYT1ԮЬSr2gGRbݬSAgbЬSŴgbSgbgb PgbgF)gFծ0ծ1xDgFݬݬdHgFPѮ1Ѯ Ѯ>ծKg\FP_gKFݬݬjg3FPծ%mgFݬݬqgFѮ 1ݬЬRТ Rݢծ/Ѯ )tgEݬݬϕŃgEѮ1SņgEծŎgE PݬݬMЬRТ RbTТVf ŗg\EPŜgKETSkRSR*g3EijRSR3gEQRSR>gD5 }RPSRRSգhhݣݣIgDšgDTdf  ŧgdݬVЬSУ Rբ żgdݬУ RТ RݢϝѮ 17gdgdѮ1Ѯ1g9Dծg'D ݬݬg DTdnSkRSR*gd_PjRSR 3gdIRSR >gd1 ERPSRRSգhhݣݣIgdgCݬЬRТ RݢϜggCPgWCծgECPݬݬ&g(CЬRТ V1CTVS1+gdcRkPRP *gd]jPRP 3gdIPRP >gd1 APPRPPRբhhݢݢIgd7gdУS1r:gdݬݦϒЦ V1MѮ AgNBQgABlg4BP^uSTЬRբ ݢόudAPݢ xdAբ ݬݢϘЬRբ'?բ |dAdAբ ÒdAЬPݠÕݤA|^ŃTUVЬSQУPа RbėfCAP QPRQQPՠeeݠğfAPccP`߼Ħݦ@^!SbTЬPѠՠݠíd@ЬPѠ ÿd@мPP+s/1=B?Pdc@1%ЬR=dM@PEd;@QЬP, ~d@1PЬR=d@PEd?ЬPݠ d?1ЬR=d?PEd?ЬPݠ d?fЬPݠ d?OPݬЬPݠ ЬPՠ+d>d>P(d>P<^ SFUGTЬR PRP*d>2PRP3dw>P^PRP>d[>P QPRQQQPՠeeݠI>^aRݬݬ ݬݬUݬ=ݬ$ݬ ݬݬݬݬ ݬP P~mݬ = ^9Y^[ЬRТ U1bX߲ZPХW W ЬRk1hW1aЧVե PfKж TiRTRݬݥhPS ݬThPSХУRSХУRSק,1^Pf1զ1ե oק, ЦR֢,Ц ЦЦЦЦ S1УRв TiRTRݬݥhPRͿ VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1 PݬThPRݥ RcjP У S1Pզ SЦ Q$PСRв PaPiRaRPRSС QSNק, ЦR֢,ЦЦ T1PФRв SiRSRݥ ݬShPdjP Ф TUPWOЧ(SIPգ.n"1&?PX(eϣeR9SJ RԠԠS Ԡ$(P樂PPR eԢARXԢ$g(RfeRjSї RԠԠS Ԡ$(P+FPRԢ oeԢy RXCԢ,|0RXeϗPXăeχeRĕS. RԠԠS Ԡ$(PPЬRݢęe6PR eԢıRXϚԢ$(,e0Ԣ48R'Pj  $YRB ScVB RbPP`81P?PXeϓeRVS< RԠԠS Ԡ$(PX8eKeRVS RԠԠS Ԡ$(PNXPeeRVSﬕ RԠԠS Ԡ$(PXgeϻeRVSd RԠԠS Ԡ$(PムY#ЬRݢ~eeXčeXPYݾw PRԢ ėeԢĠ RXϦԢ,ģ0RЬSݣ ύԢ<\ VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1Pb@RݣxԢLĩPR2Ĭjwݪ^i<^1}TUxPRRﵐSce\ТTP\l Ԡ ҜԠ P RFnP\cГԠ 4Pce荒gPcХ\R,^q|VZ?YTUЬR+bPP ?PѢТТR֮%x~mPQծPAQQլ1ʏnWdmX)[ мPP,,,,,h<4,$,L1kPj?PݬϐP1kijPg1Zj1OijPg1?ݬϔݵ Pg1'ݬ|ե iPРH$ݮ$hPRХPݠhPRR~kPRХPݠݮ(*R RPSSgե S1iPУjRSjݥ pRjiPS1P k`Pg1 k`Pg1rЬPРTDGT ݮ hPRХPݠhPRR~kPRХPݠݮ$*R RPDkPRb;PSSЬPݠS D PRg1ЬPРSCG[ݮhPRХPݠhPRR~kPRХPݠݮ *R RPCC PgzЬPРSCGbݮhPRХPݠhPRR~kPRХPݠݮ*R RPCCgPib3>ЬPР1Dծ ݮ^ͥWژTVЬRCbPP )))))55555555)P?PVRXТRRRVﭏPRUV1WмPP ((888888881.?PUUPxPP@ P`ЬQѡUUPPxPP@ Pd`1UUPPxPP@ SxQgPAP`c1PUUPxPP@ P`UUPPxPP@ SЬPРP@ c1UUPxPP@ P`UUPPxPP@ SݤѦPc[UUPxPP@ P`UUPPxPP@ Sݤ٧Pc+UUPxPP@ P`UUPPxPP@ QЬPРaԬЬPРUUV1RŊXP|^wS益UެVfTTKCPRԢ ÔRݬhԢ× RݬSԢ,ñ0RPTfPRԢ T*T1Rݬ Ԣ 1RݬԢ 1P}PT-/RPRԢ RݬϲԢ FP#PRԢ RݬσԢ Ԣ$$fP@ P`(Ԣ,(0RP^uT歹SݬPRУPݠPRR~PRУPݠݬ*RRl^9TFRբPx~PSQբPxQPd\@\lAcQQSP<^URTբSxTQePAPDc`TT^率TﲔRSբ"PxSQdPAQa޼PC`aSSu^ytTjVЬRТWYXZЬPP662*".P?PX6PX.PZ&P!PYPѬ ѬYѬ_WPLPSԣ 1Sݬ[ԣ= SݬWݬZXϑԣ,A01Ѭf,^W 杻PKPSԣ GԣI ԣ,U0SݬSݬWݬZX1=Rլ RR4PSԣ լ  [`ԣЬPPWK?3'1P?Pe1Pn1Pw1PĀ1PĈ1P韛PRԢ ĒݦPԢĘ R1PkPRԢ ĝݦPԢĤ ROЬRRݞ ĩ:PR ı&PRq ĹPRSݬUԣ$լ  Y ((Uլ PUSݬ ςUUUPxPP@ RbYUUPPxPP@ RbPUUPPxPP@ RbUUUPxPP@ RbUUPPxPP@ RbUUSݬWݬZXUUUPxPP@ RbUUPPxPP@ RbSPP|^pSЬTФVЬUUKڇPRԢ RݬVTφԢ Rݬ yԢ,01`U UJ}PRԢ RݬVT)Ԣ Rݬ Ԣ,01U UJ!PRԢ RݬVT|~Ԣ Rݬ Ԣ,01PUKΆPRԢ RݬVTzԢ  Rݬ mԢ, 01TU U,fqPRԢ RݬVT|~Ԣ Rݬ Ԣ,10RݬVT|~Ԣ<4@1PU UpbPRԢ HRݬVT|~ϧԢQ Rݬ ϚԢ,V0RݬVT|~xԢЬRݢ8.ТPդ xSeRCRbSbS<Ф$Rݢ<.Ф$Rݢ@"ФXTԥ#Tx!SeRCRb ]PxSeRCRbRRxR~P՚˚SХ :TУRSBdУSW!VfTePФPP0PХR֥RˏP\x\SeRCRbSbSPФ RТ PХ\֥\ РPdTVWХT/$TRBRbxTRBSХR֥RcTTߎx֙SeRCRxb~ P﷙PRԢY=WgS(PУRRʏRTУRSBdcSWYԥ$cV1rզ Ц TΦ TTSЦRPSS ТRզ Ц SΦ SSTЦRPTSTS ТRХ$RRTRSPTSS$SRԭxR~)PS$RSRЭTCdS$RSRЭPЦW޽RbQ1ա1СPPXxl P?PP#,С P"Р\QLС \QL  \QLaQ1eRWPЦXV1T׌4 TSХRCVTRBܚRxbSeRCRbfTTԥ(V戴4$VRB5RbxVSCRХ(beRCRb(VVvХ(,xLReSBcRbPXУ8RТݦ,$~ϠPϝP 1yPլ ЬRݦ0P ЬRЬ ƌЬ|ЬRТƌТ8RТ8PP6^6r1"?PЬRݢ<xPXԭ|~ݢ@hQP|~ЬRݢ<VX=P|~ЬRݢ<BPX|~ݢ@5P|~ЬRݢ<"|~ݢ@XЬSݦ,$~Peլݦ,$~`PƌSȣXУƌ15Pƌ?ݬPլ ЬRݦ0ϟP ЬRЬ ƌRТX1Pլ ЬRݦ0oP ЬRЬ ЬTФUЦTȀ7jU cSШRCRХRBXMRbUЧ|VǀXЧxSSJRxRRR~RPcxЭȧ|ǀЧ|TЬSУPcxЭħ|ЬTդ<^ǀЧ|SФDRТЧ|SФHRТ^2PTЮTRݢФ RݢTݤ<ώݤФRxRRR~KPTPcxT|ǀЧ|TЬSУЬTЧ@S SzSP{ PQPPRxRSЭRSSSBdRլ jݧ@ݬ+ VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1"!UUVxHRgTBScBdRbnxeFRBScBdRb PFRЧSBRbY 4FRBRbX ,HRBRbԮծ13 ЬTnS SzSP{ PQPPRxRSЭRSSSBdR1Vծ1[ЮRBT VS SzSP{ PQPPRxRSЭRSSSBdR1լ 1S,RQRP R RP Q{RPQPQSQDЬUCeFRCbCeѭCejS,RQRP R RP QP{RPQPQSQT,RQRP R RP QP{RPQPQTQ1SDcFRDbDcѭDcjT,RQRP R RP QP{RPQPQTQ1S,RQRP R RP QP{RPQPQSQ4ЬUFRCbCeS,RQRP R RP Q{RPQPQSQT,RQRP R RP QP{RPQPQTQ4ЬSFRDbDcT,RQRP R RP Q{RPQPQTQVV1!֮Ѯ1[71[P[RBERb17 [RЧSBcTdYBTdXBRbVUX1ЬTYUS SzSP{ PQPPRxRSЭRSSSBdR1լ tS,RQRP R RP QP{RPQPQSQ1TCdERCbCdѭCdjS,RQRP R RP QP{RPQPQSQ^PS,RQRP R RP QP{RPQPQSQ4ЬTERCbCdS,RQRP R RP Q{RPQPQSQUUX1[[y61Vէ1PЬT VS SzSP{ PQPPRxRSЭRSSSBdR1լ wT,RQRP R RP Q{RPQPQTQ1UDeЧPRFRDbDeѭDejT,RQRP R RP QP{RPQPQTQbPT,RQRP R RP QP{RPQPQTQ8ЬUЧPRFRDbDeT,RQRP R RP Q{RPQPQTQVV1Xէ1PЬTXS SzSP{ PQPPRxRSЭRSSSBdR1լ wT,RQRP R RP Q{RPQPQTQ1UDeЧXRHRDbDeѭDejT,RQRP R RP QP{RPQPQTQbPT,RQRP R RP QP{RPQPQTQ8ЬUЧXRHRDbDeT,RQRP R RP Q{RPQPQTQXX1Vէ$1&PЬT VS SzSP{ PQPPRxRSЭRSSSBdR1լ {T,RQRP R RP Q{RPQPQTQ1UDeVSЧXRCRDbDeѭDejT,RQRP R RP Q{RPQPQTQjPT,RQRP R RP QP{RPQPQTQ@ЬUVSЧXRCRDbDeT,RQRP R RP QP{RPQPQTQVV$1^Uެ[kRТZ|Vŀ1VZ1kX YˏFRjS0RQRP R RP QP{RPQPQSQ@ЩTGQХ|PFRCbCaS0RQRP R RP QP{RPQPQSQWˏFRiRGХ|RFWVVŀVZ1UZ1ZSЬR޲RCbYY1ZŀRRńńWSЬ RCTVŀ1ˏYXPX`S0RQRP R RP QP{RPQPQSQIХ|PFRCbCdS0RQRP R RP Q{RPQPQSQPTХ|RF;VVŀZVZPTˏFRݥ.ݣDխ ЬRݢ3PPЬRТPЬRˏRPRPЬRݢP ݢPЬPРRbPݢAТRbR2lЬRݢP9 ݏ^#ZVπP[xPW[ЬRݢϓWݢωn-1 nRЦSBcXhBXh BRbUTծ 1T~ݫPkS,RQRP R RP Q{RPQPQSQDDQCaYCCaDRYCbjS,RQRP R RP QP{RPQPQSQTT 1ynn,1?Xզ1 X~ݫ#PsT,RQRP R RP Q{RPQPQTQLЦPRHUDeDDeЦPRHRѮDbjT,RQRP R RP Q{RPQPQTQXX1qUզzPU~ݫϋP_T,RQRP R RP Q{RPQPQTQ8ЦXRERDDbT,RQRP R RP QP{RPQPQTQUUXզ$} X~ݫ PcT,RQRP R RP Q{RPQPQTQ<XSЦXRCRDDbT,RQRP R RP QP{RPQPQTQXX$[RЦhRhWRЦhRh^լмPP} qz?PЬRТRТS"RSbX'Y CXYެWѷYзYTYV VVTV1gUDhDTTVP;PWWЬRݢVެYiRݢݧBԮU*1RB`8Rb1Ѯ06XѹXйX PjX R:SBcVf[BVfZBRbUTZ=[T~ݧDP&RXV VVRVЩSDPB`BRRVTTZ֮Ѯ)1OWR&R?PWWЬRݢZТZZyx4RSBcTdYBRbXVX1EPYV~ݧϘP5N4RFbSUգ #TDRUR~ݤ;UU VVXPZUE7RxbRSBcTdYBRbV ZJRbXE6Rb Ѽ1SV(YS~ݧPXS~ЬRݢϴSSVWRRPݬЬRݢ5ݬݢ*PVPXVЬRݢ XݢrZTZU UUTUDSSDDTTUެYѹZйZTZW WWTWUDDTTWVRER<XR3R*KPXЬRТTxTSRCRbRWS BcBcWxTRB~RbW~ЬRݢ}$TRB!ScnB!R bRBST3 j PZZn1Ь[ S;RQRP R RP QP{RPQPQSQ0CS RQRP R RP QP{RPQPQSQXZRxRRBRbZTծF ZYЮRIVP PPfRGUDe DDefRGRѮ DbTTPZZn17XRRݬЬRݢ ^QTмPP =oo1PV?PЬRݢPRSRSRSSPЬRݢPSݢSRRPRʏRPSʏSSRP|~ЬRТPݠݢRЬRТPݠݢ8ЬRТPݠݢfi:ݏA^-URѬbPSЬRB ϕ PWύ P[υ PV} PYЬRR R\ݥDݩ٪ݥ@ݦΪݥHݦêݥLݦϸݥ@ݫϭݥDݫϢݥHݫϗݥLݫό1~R=0 R^ݥ@ݩkݥDݦ`ݥHݦUݥLݦJݥ@ݫ?ݥDݫ4ݥHݫ)ݥLݫ1PR[ݥ@ݦݥDݦݥHݦݥLݦݥ@ݫةݥDݫͩݥHݫ©ݥLݫϷ1R.GݥLݩϠݥ@ݦϕݥDݦϊݥHݦݥHݫtݥLݫi1[PRGݥ@ݦPݥDݦEݥHݦ:ݥLݦ/ݥHݫ$ݥLݫ1 PRe ;ݥHݩݥ@ݦݥDݦݥLݦߨݥHݫԨ1RGݥHݩϼݥ@ݦϱݥDݦϦݥLݦϛ"1ݥHݫυxPR/ݥHݩlݥ@ݦaݥDݦVݥHݫK>R4ݥHݩ4ݥ@ݦ)ݥDݦ! ݥHݫ S,RQRP R RP Q{RPQPQSQ0CCS,RQRP R RP QP{RPQPQSQT,RQRP R RP QP{RPQPQTQ0DDT,RQRP R RP QP{RPQPQTQլ ݥ<ݧLݥ<ݫAZR0SQSP S SP Q{SPQPQRQMЧXЫT0SQSP S SP Q{SPQPQB PPBhPZBdPPB PZRRQЬR1bS0RQRP R RP QP{RPQPQSQHC PPCPC PPCPS0RQRP R RP Q{RPQPQSQլ ݥ<ݮl PWRХhRh[RХhRhVRХhRhYRХhRhZP ^PѬ`PQЬP@SݬS#PRPRݬSPRRP^ VZЬUޭޭnU Ц,Ц0xURBScfPBRbЭTT{XThwP_Zլ WhUTSQSP R RP QP{RPQPQWYQSP RRRPRQPQ{RPPQxQYYYQQGeTTZP^ TЬQޭޭnQФ,Ф0PxQRBScdPBRbRխPRݬϪPPRRЭSS0SݬφPPSS0PP^) R|W|UQЬP@SЬP@TݢHS=PXݢLS,PVݢ@SPݢDS PXVݢHTPWݢLTPUݢ@TPݢDTPWUX W Լ ЬP`V U`PVW`XU`^9SެRb У,У0 ЬTxbQAP`dcPAPd ^YЬRТRТSRSbɈTCTZPS0RQRP =mZ VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;10R RP Q{RPQPQSQ4CdPЮR`CS0RQRP R RP Q{RPQPQSQЮRТWެоRТnX[n1VXPXxPP@P`UXPXxPP@P`STRUPBcWlPBcZTRRUTNxXPоR@Sc޼RbЬ R2bTբ Zcբ c բ c bX[[n1Y|Rթ0PRWPS PRR0ЮRЩhRhSXPPP<^QUѬѬgT,RQRP R RP Q{RPQPTQ4SȏDT,RQRP R RP Q{RPQPTQЬRТRȥ8DbЬTޭޭnTХ,Х0PxTSCRbeRCRbѭЭSSRSݢςSS^]UWx?%ReSBcTd BRb[PXݨݬХXY_PZݥ@ݨMP0ݥDݨ>P!ݥHݨ/PݥLݨ P1VŀnS0RQRP R RP QP{RPQPQSQ<ЬTХ|PFRCbCS0RQRP R RP QP{RPQPQSQVVŀWZYݥ\Yݥ@ݨςPݥDݨsPS[ S~ݨ/SS[ݮ ݨIP^VScREPC8YPXЬPݠݠ PRϱȢ#WZݥXϋХXPХd`PdbRSVT[1 T~ݨP1YϝPXc#RDbSˏRR1RPP"~~~Z P惘?PP@]ݬݣ ٰУ RȢ0WGPЬRݢݢ Rݣ У RȢ#W&Pݬݣ 9SSSRRRRWZݥXϚХXRХdbRdTT[1 "ݨP ݥ\Y`YRХdbRdZXЬRݢWϿXRХhRh^eSУh\\T gPTУ4dݣ4PYЬhR4\Q\P \ \P Q{\PQPQRQ,BR4\Q\P \ \P QP{\PQPQRQTP^QЬPСhPh ^ SzP{ PQPPRxRRPRRRCP^RТxSST,\x\\\~fPTPcxTP^QQЬPСx`Px^ "[.VWZnRզ,PRݬNPWZRR,U1Y$UP@eRbpxUPfS@cQaX@ScTRTTXR~ݬP=Uk3y # l!QЦPAP`PBiPW WPWZRRTUUO1rX.WXP@=#Rb< XRЦPB`QaUBRbTSTPUS~ݬTPWZSSTXXSզ P S~ݬ#PWZSSRզ$PR~ݬPWRnZRRTզ$F T~ݬP-I PР RRSRSTSWPWTnZTT$ЬS"Zn RnTDPccWPP ^%XԼ ԼϥPUS,RQRP R RP Q{RPQPQSQ0ЬVCfCS,RQRP R RP Q{RPQPQSQxRBRbYЬRТT1PdPY~ݥPqdRХVYSQSP R RP Q{RPQPQWZQSP RRRPRQPQ{RPPQxQZZZRRGfЬRbФbּ Ф T1r޼RݥZPbURШhRh^[ЬRТ8ТTPbi޼Rݬ$TPbOP޼R ݬTPb3P޼RݬSPbP޼RݬݬSPbլ1eЬPP8881LPb?PxTQiPARb^Pb1$P1VlUgXbxTQiRAbP`S1iPAP`SWPP"""?PSE^PS޼RSݬ]Pb1ѭ6լxTQiPAP`ЬR1ݬݬ ݬݬYPbsPլCЬPP''Pj?PxTPiR@bP`xTQiPAP` xTTiRDbP`ЬRϮ VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1?ݬ ݬݬTPbXPP< ^QU&Tլ1GмPP D000h00$1?PЬRѢ1xReSBcRb1PЬRѢ1xSeRCRb1֤ЬSѣ+УRb"բxPeR@bRbeR@Rb1PRB1B#RRpBh֤ ЬSѣ+УRb"բxPeR@bRbeR@Rb/PRB$BRRB ЬRݢϬЬRТ1^ЬRѢ1ТRb(բ#xSRCbRbRCRbPRެTdSBSB;RR dPBP^P^MTЬ Rb|R߯ЬSSPբ 1բ,Т Ԣբ bPլ xPP@P` Ь P`dՠd ^ݬЬRRhխSPSխ0ݭAPSТPРQPQ`xQQPA`P`խ ݭ PSSP<^]UЬTTЬ SSЬPݠЬRݢkdPPPPcPePcTPTЬScԼݬ|~RT*P$ecPѢ`xPQ@aP`ݬ |~ЬRRTP%ePѢ`xPQ@aP`|^UzP{PQPPVЬTǏS"ݬ ݏTfPUTSVݬ VT^fPUUPUP^T W VUS2eeP޼R@bccRb- RcP-ePcRcbff:fݬ ePR&efߤߤfe?PRb:gOeKPcRbRg6eѬe#ޤcfߤ-ߤee?PeP޼R@bgޤIcefP ^1S߭&e߭ePRЬPl`ТQAТ ТQAcТТb,^SRn߭d߭dlnTРQnUAnVР РQnWAbnXРnYРnZ`ݭݭݭݭݭݭÏ d^5R dЭLPdâL\n\S `PSgCSPdzEPjPPθ^ЬZԮЬ Ь[ZXЮWЮ Y[VYj(`WWVV XcZcPPcZRPRRЬPլЬTޮUd Td dV+dSS PЮReSbTdSS 蔾TVV1ЬZЬ Ь[ZXЮWЮY[VYz(`WWVVXbZbPPbZRPRRЬPЮT ޮ Ud  PTd dV+dSS PЮ R eSbTdSS 蔾 TVV1PP^  ֬ PQQ ЬP֬Q`֬QQ 蔼ЬP^-ZЬXЬWЬ YЬVYO(`WWVVݭݭݭߪXaߪݬaPPaЬPPP^T~SЬUUVUEaUPP PRRU4b.  R Pb~ߤ`PRV RRcìVUUݬ`WgEcRURRV UUVgE; `PR.R RUPP RUUR gE UP|^Vݬ (`լЬլЬݭݭݭߦB`P^Y`TЬP֬`P֬ЬP֬`SЬP֬`RSPPP@d S~_PSRPPP@d R~~_PRSRP<^ЬQЬRЬ PQUPPUP^ЬQЬ PQTP SSPTP<^TRբ Ԣb0dЬUU>_ScbߤUcߤ Ucߤ5ߤ(Ucߤ_Uc^ERb ZiT ݏ$ZˏRP@Z'P ZQ0RPPQZݣkPRʏP@YZMT|UTX YiP` YiUݣcj YiT ݏ$ˏRP@Y!R ֣ݣkPRʏP@pYR:MRƳTRX PYiP` >YiTݣcj *YiR ݏ$nPXW$WRBbRbX PtWPRUXTRƈ XiƐ XiTUݣcƚ XiR ݏ$W$WRBRbX PWJ$ݣkPRʏP@hX$PR ֣ݣkPRʏP@DXRT13x~-<P(2ݣWPRˏRTDW%R ֣ݣWPRʏP@WRC1|}W[~WYWWݣkPRʏP@WJTUTX eWi ` VWiUݣcj BWiT ݏ ZˏRP@#W'P ZQ0RPPQZݣkPRʏP@VZMTUTX ViP` ViUݣcj ViT ݏ ˏRP@V!R ֣ݣkPRʏP@tVR:MR7TRX TViP` BViTݣcj .ViR ݏ rPXWWRBRbXPtWPRDUXTRƈ UiƐ UiTUݣcƚ UiR ݏ WWRBbRbXPWJ(ݣkPRʏP@lU$PR ֣ݣkPRʏP@HURC1]\0P|^奄RUU+\ݬTPTSeVlTSˆ eTP eTTVݬlš eTS ݏTP^)TTWTSRݢITP\ʏP@c#P\ ֢ݢ&TP\ʏP@c\PUrVUX gSP` gSVݢbj gSU ݏS\$Pˏ\P@cF\=Ѣ oТQ֢\aݢ{SP\ʏP@c \\ ֢ 1^XrSZUPTPG~d7PScԣCTԣ ݥRPRˏRTDj$PR ֥ݥRPRˏRTDjˏRVFjTFj RPݣȁ 2ݥRˏPTDjRDj PPݣȔ1ݥZRPRˏRTDj$PR ֥ݥ6RPRˏRTDjˏRTDjݣȧy1YˏRTDj(P YP0RTTPYݥQPRˏRTDjYYԣxY~6PR(ݣ1ݥQPRTY10W}QVR,R) ݣgDR,|R)wRPPd9MMMMMMMMMMMMMMMM1A%?PD! Dȏ@D ݣgݥfPRR,R)R, ݥfPRTTY1MR)ݣ$0ݥPPRˏRTDj$PR ֥ݥPPRˏRTDjR{ݣ:/ݥSPPRԣR} 1ˏRTDjݣV/VˏRTDj& VP0RTTPVݥOPRˏRTDjVR,ݣr=/ݥOPRR*ݥOPRTˏRTDjT4VT(P VP0RTTPVݥzOPRˏRTDjVݣȎ.R+ݥAOPRR}ݣȪ.ϰP#ݥOPRˏRTDj$PR ֥ݥNPRˏRTDjRPPf3;;;;;;;;;;;;;+P?P'Pԣ'Pݣ-SP^9YNZSݣ`NPRˏRTDj!R ֣ݣ>NPRʏP@jR" %-ݣNPRR"~R yRpMTPR\'ѣ УQ֣RaPRѣ УQ֣RaݣdPRR"R  RR" ,ЬR MP+ݣ_MPRˏRTDj$PR ֣ݣ:MPRʏP@jWˏRTDj% WQ0RPPQWݣMPRʏP@jЬTW/WԤ3P W~!1P3VWxެXhUG#PT VP@3RTbХ3R@RbT1/f VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1N)PT +d* VPhRТ3R@RTb VPХ3R@RIPbVVWݣMLPRˏRTDj"R ֣ݣ*LPRʏP@jWˏRTDj% WQ0RPPQWݣKPRʏP@jЬTW7WԤ;PxW~0P;VWDT=PU )*xVP@;RUbФ;R@RmPbVVWЬRSP?ݣeKPRˏRTDj"R ֣ݣBKPRʏP@jR$ @)*^մZBKWWSݣJP\ˏ\RBg!\ ֣ݣJP\ʏP@g\!1?\PP!8888 P?PPa1Pa4L            1V?PݣRJPb Pc<1QNQ%T i.T`PXPϹP1PXU%T1.T`PXPϹPϬP ϣPϚP1<P\(1)vt$ݣIP\ˏ\RBg$P\ ֣ݣbIP\ʏP@g\tVVݣ8IP\ˏ\RBg!\ ֣ݣIP\ʏP@gUˏ\RBg% UQ0\PPQUݣHP\ʏP@gTURRxRRR~-T`PXVUTUPxT\LRPbTT\\UxT\LRbPb1 ݣjHPa*"12?P~{M#ݣHP\ˏ\RBg$P\ ֣ݣGP\ʏP@g\ݣGP\ˏ\RBg"\ ֣ݣGP\ʏP@g\PPd4LLLL,LLLL<LLLLD*Pn?P[(P[ P[P[PʁO&ݣ=GP\ Pݣ'GP\ˏ\RBg$P\ ֣ݣGP\ʏP@g\PPf04444444444444(?PnPn ʬ%ݣFP\ˏ\RBg"\ ֣ݣzFP\ʏP@gYˏ\RBg% YQ0\PPQYݣFFP\ʏP@gݣ-FP\ˏ\RBg"\ ֣ݣ FP\ʏP@gVˏ\RBg% VQ0\PPQVݣEP\ʏP@gݣEP\ˏ\RBg"\ ֣ݣEP\ʏP@gUˏ\RBg% UQ0\PPQUݣfEP\ʏP@gUURTRxRRR~)T`PXԨ[ ЭnYVU TUUURUR1 T\Tx\\LRPbU\U\1k PݣDPv ʼ#ݣDP1 P2,ZP T (T`PXPl P1  T(T`PXPD P?P 1K#1U T m(T`PXvPݣ DP\ˏ\RBg!\ ֣ݣCP\ʏP@g\"\'\ϖݣCXP\Mˏ\RBg@Pѣ sУQ֣\aݣCP\\ ˏ\P@gŸ TPݣdP\ʏP@g P\ ֣ݣdP\ʏP@gRˏ\P@g! RQ0\PPQRݣdP\ʏP@gU\Ux\\L\RlU\Ux\\L\;PlV\V\1hxU\LRPb1ݣ.>Pt ʭ T T"T`PXPP1zʺ1iX1Uݣ=RbPc-ݣbPaݣbPsݣbPe ݣr=P1 P211jP?PVݣN=P\ˏ\RBg#P\ ֣ݣ*=P\ʏP@gTˏ\RBg% TQ0\PPQTݣ<P\ʏP@gTRURxRRR~!U`PXVTXϔ1BϗPVݣ<P\ˏ\RBg#P\ ֣ݣ<P\ʏP@gTˏ\RBg% TQ0\PPQTݣN<P\ʏP@gTRURxRRR~n U`PXVTXTRRxRRBRPb1r T$ T`PXϱPTPݣ;P&  T T`PXuPlPPXPP<^%T;S識RUݢJ;P\ʏP@c$P\ ֢ݢ&;P\ʏP@c\fU\_ "ݢ:PrUPP_ ;ݢ:PsUPP_ Tݢ:PeUPP_ mjݢX:PtUPP_P  Ć5UP^Q:VfSެnоRެ[kYZk19WXݣgPRʏP@f PR ֣ݣgPRʏP@fTˏRP@f! TQ0RPPQTݣgPRʏP@fYRYxRRBRTbxT~PUYPYxPP@PU`RTϧPBeRRTYRYxRRBR PbZZk14P|^ѢV>9TSRݢ8P\ʏP@d"\ ֢ݢ8P\ʏP@dˏ\P@dNSS`PUSˏ\P@d& SQ0\PPQSݢ8P\ʏP@dS1\[ Ɵ^S S`PUݢ:8P\ʏP@d$P\ ֢ݢ8P\ʏP@dSˏ\P@d% SQ0\PPQSݢ7P\ʏP@dSݢ7P\ʏP@d#P\ ֢ݢ7P\ʏP@dSˏ\P@d% SQ0\PPQSݢn7P\ʏP@dSUPP^ Wv7VRݢ07P\ˏ\SCf!\ ֢ݢ7P\ʏP@f\*1\PP*Xh4 P?PPl1Pl $X1sP~?PPUPP16PݢF6Pe"""1"?Pݢ6Pw _ PXݢ5P\ˏ\SCf#P\ ֢ݢ5P\ʏP@fTˏ\SCf% TQ0\PPQTݢ5P\ʏP@fT~PUXTST\T\1LS\Sx\\L\PlT\T\1*Pݢ:5Pl ,U1P1!PUϖP1PPU P1PPUvP1oPPU!Pݢg4P\ˏ\SCf$P\ ֢ݢB4P\ʏP@f\C^\fS1ݢ4P\Tˏ\SCf% TQ0\PPQTݢ3P\ʏP@fD(1P 1 PUUPLP~Pݢ3P+ ! PUP P>PݢN3P* -DQ PUPPUP^͜W:3VOSԭޭYݣ2P\ˏ\RBf#\ ֣ݣ2P\ˏ\RBf\$1p\n1P1_ݣ2Pc1H2PRˏRTDf%PR ֣ݣZ2PRˏR\LfR$1:ݣ82PRRPPcBZv&j1?Pݣ1PRRPPb41?Pϡ Piݣ1PR1@P=9 v PiPTcPݣm1PRˏRTDf#R ֣ݣJ1PRˏR\LfˏRTDf A(UˏRTDf' UP0R\\PUݣ0PRˏR\LfiTU1_1rݣ0Pf)zv ϗ Piݣ0PR16ЭPǁ~ i Piݣl0PR1PLjDžy > PiݣA0PRˏRTDf#R ֣ݣ0PRˏR\LfˏRTDf njUˏRTDf' UP0R\\PUݣ/PRˏR\LfiTU1VǬǩ ώ Piݣ/PRˏRTDf#R ֣ݣn/PRˏR\LfˏRTDf ǯLUˏRTDf' UP0R\\PUݣ/PRˏR\LfiTU1Piݣ.PRRdiTݣ.PRˏRTDfT6UT& UP0R\\PUݣ.Б,qpr-xLX@k0'YNy+ l'7QJN {Jo ܗ< ojnQr W)~Q}՟?=YOAtF >dIӧ!x|L,'osw fר`oЩuC)B OYJ7:VǬL']KU*lծ8n~˪t)Fk-M@C狟י(Rٵvi)K1 8Սf\@jk@P¦/ !immSp%n42e`#^WrR;9q&vxeSNSe {Y4+tkj\0&FGa?˜kB;o D֔z*9Tņg" p lJܙsFe!˭2Ёbw$d1YkW[D_agu?V+ [ ,=QS c+)U+* |.٭i g_+t%s冣E{m.wO~%YS#ʆD@|f1cy"nJ'hRإSz`.ny(kp3O^I4qĪF}!"F'+^*-s@8VؙSgl,tY+fuia$9_%?,BAN'ym?\WMu-:-͌lnh\jñkV4RWQU[Q~`0Cѕ !`sMH&!B`J/'2l'BÅUygf7V 7QjkNI>؝o\n;Kn#4bNG.u|x\ҹCcXc{Z@K,-ni_ӷjy-KݑvC+\5T})/ȌwUبy t mn5,3 7HPu:UxwҀ`?L=7%` RfKT*Xh 0ASmQWm,d>8dw>1nS0Č{%2P_}U{^P=rK輄j\J!>›߄ Fj!a#c*y DYH UO>jA=.8w$ihrߊwUS6@2u X~i#$#-r4̈́D ~CBYQPB &i᪦RR]\Jnve9Tu|H&Nv 82y`<5c'qrj$:Bւ"^LL 6 AZ7BWe D-'`n1?G<#\@׃dn$B=5aƲ(o3|יv F95 9l8Ps}%Ա:6N"|۽EpOzx7o`U)>M:>֘SkIq;h7H%  }t С# T#%|mg~,gڌ1a3o20BIm< 6wOUc^ g@qz&D++~(H ?šVHy2"a>\N],UPB&>'5,MNż/!3"p,XOr>¥,,< .F:O>;32*/h}]% )g骢@b76l49sv-ssV5n'G>\Y | tW?^O㤲>e̺}^mJj6VS%]17O=mm2fH)"yE g'*1Ha'q]D;"kn6?Q)[惥8b!cUu&ϙs&|uWxf/`5jk߮9۪Hç N.B0_cpWMF&i. M`X4V=礡C3ORGg&N#Z$h21'Φoy@u=BnGhDsi:4xq kZļGJO 2{:SIZqwu Ŷ ϭ;ۛza?F" v#QkCT?z*돣8OX9 ᭉpOS'w~6m:ڲ^'EfMͽx b蚕Ƚ}d/Q 1۳ٗ N99E?o;*)H*dnxHY['E6L۰ogT3ތʛ8pXgsp}\v(VSnyJA(i5cO9RG'.?J1?Rh9V4 /NPsΆ;HW\V|J{ <x!λHrJ[H7AO!v gvW=eL]+/a5sij1=$] W l9U2 6=aCI |A7^2KfMM'ڿ:OWjWzУ!@'6"y/ "mF"eDbrf\>[#LK*/JboZ)n 5!gKh$]+]dт] ߒO-) pwBҨ8dKWUҼihW"vE+y5woZB=@JY`~+yl//Ŝ~u  WT]YSpI8.Z_^$7G2q 슌 t.LpXVS\)o1Ե\mt= Wv>AV~ޥGMpEQ9RFc{0@1z!6.6-JE_WLI%14g]ᣂX*W}Za~ :‚by zJky*cle߹Eo/CHR"[a Yڭ\}R]x:xitV-a<"1f =?bM@ypܛiwm8)>Oϳ9*_}+)90@$EFDP>RfYrb@׬)x!;.nj uS@cD v{zBX}{#ZDk^JA1F|N6Fi&ia"a; ɖ*I[:,;2b_C-~gJl_u+@DՍ}1GzErH \dq8pC PpLG& B\i8SR-ׁ%I,8VD^g{|wb%okc ǯdE}1PKNV4.'Q@;=G82[Q{'`YvSt1f7GȻHTml;D>1ꔲ[C)p>Sd d9e G"BF8I~fاʕ MƓ9F#ewr,I{_Ι?8qCEE u[1|q)05N 5Εش)T줟Z*P:'-Iq.4^ * y|uzȂH~ߣezh*1d|$ê3O f\sd*RnS`ۂJ{Q:V0{T@=2-9[| QR c) :w%UӄGJ j֗A.=/vexujZta!?Ia S=EK,ʤs.F>h|Tߍ$XQtz:rR{9W+IȂ2vU\ŭYYHcȫw6Eo6j / GxPu.24&U_N /Q~6\3@2~1k첹x\ebX22* * XI{O!+ o.wW-édcԀ$B>8yHpK5iqbdX !(& 9`->_ W'fuG-LR)nWeP:Z{czR&a  0=hɡ1A"z#V1֩ ym&35Ԫ3:?G!Rt8>0͂|CLCTC\7R~k[UA@qoZ@ZP*5"zqcĽtge=LP#Ɉ=)oGrFPh)Ī}ޕ &x1MJo*\5S)H=8A C˷aqcrB BHOj! <&F .fLGGSDu3 h>JI۟5 w(ڱ/̗KM͍,s`I9mV 'Y{^,6~)74 ʍ'o,g|MQDcKW\Z{R/lg!DsR俭[T['X"qzx?UfqM@Yp,GڕSXaBj ܡ D $.Ӌ֔^;}/5꼾t,X[bvbDԧ#:l9:6jP^ +a̪|EZR)$L;עֺRAj PVg<"HG7Q+CBUGR.ȁu:`=ZtS?(gD1Z=p;M"yd3TʑO?(?jbiADCzd+;ZH57^ݫpl0v9b4!dK3!WK$Qn޽bmH}baj 1?jV0MdƄ4) jCz&qH`5~'Fff/,G6r/:LD!(Z33s5t@!80"yIBtI"8ZF~zX_! 'GC&9U0sǴ ΛH=jWܧ N VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1*w]PRˏR\LfiTU1*RriTݣn.PR1 c 1ݣO.XhPRˏRTDf RdfPiRdiTݣhPRUˏRTDf(P UP0R\\PUݣ-PRˏR\LfiTU1nRrϬPiPTݣhPR1HPReݣhPt  DPiݣk-PR1ݣZ-PRRPPb4||||||||||||||||||PRP?PPiݣ-PR1P ϲPiݣ,PR1uP  1bϩPiݣ,PRˏRTDf   UˏRTDf& UP0R\\PUݣj,PRˏR\LfiTU1 9Piݣ<,PR1P Piݣ ,PR1P-  1R$1+TR"R'RϳݣdPRR ֣R H  RUѣ УP֣R`ݣdPRU R PݣdPRR R$bPiPT BPiTY1c a iPf = |^VrSѣ УP֣ެTd`ݣ*PRRd1R}*UR\:ѣ УQ֣RaݣePRR Ɠ  ѣ hУQ֣RaݣePRRd RRƴ Y ѣ УQ֣Ra^]*WrSݬ PVmPݣ*PTˏTRBg$PT ֣ݣ)PTʏP@gUˏTRBg% UQ0TPPQUݣ)PTʏP@gRUwPBRRUVPP<^1U)TﳪRݢX)PSˏS\Ld"S ֢ݢ6)PSˏS\LdSPPb/hBhhhhhhhhhhhhhhUB?P P P P |^YV(U۩Rݢ(PTˏTSCe"T ֢ݢ^(PTˏT\LeTPPT"S#########################1P?Pݢ'PSTˏS\Le& TP0S\\PTݢ'PSˏS\LeT炙1D$PPݢ'Pd2::::.:::::::::61CPR?PPPP1) Pݢ:'P\\ 1\PP ff P?PP 1LPc1Pc<<<<<41?Pݢ&Pi1PPP1Pݢ&Pv1 Pݢ&PnkPݢ}&PvT Pݢf&Pc.6666666666666662P*?P P PPP ^J PQԡЬRP`PR|QP^PxPPP~ Ь^uTR%Sݢ%PQQ1QPP  PR?PP$p1PdePd D(]]]]]]]]4E?P$S1zPS$0eS1lSe#nS1_PSn֢  S1>P^V$Y$T Rݢ$PSʏP@d#PS ֢ݢ$PSʏP@dߕˏSP@d S S ֢PPSݢH$PS֬S' XЬWЬUSƻ i'$ i$UWXݢb i#S ݏ$^VYެXhRR1 b~p#P_PS1TУRdUˏRQAePѠR `PѠRP1SˏWGcSGY3 2 l PS{~"PPS8 7 5YP^ˏR޼QBaPѠ `PѠP^W"V@ ""ݏ"Pެ UPeЬSQ@a@cPPeTRެ UReSBcPPP@fTRRe QRRSAcPP93 Pz&PT ޼PaA`0AP0AT PЬPA`Q<^%"TSRˏSP@dˏRP@dRSQ QPˏRP@dQPRSQQUWЬQЬPSRˏSP@dˏRP@d RSQ#PQPˏRP@dQPRSQQPUP^q!RЬQˏQP@bˏP@bìQPPˏP@bPQP^תּS!T/RլX d P` d ݬݢbj d լ ݏ P^ES TǡRլÈ dl PÐ d[ ݬ ݬݢbÚ dC լ ݏE ^݉RF T_Sլ» d P dݬݬ ݬݣc dլ ݏ^WެV׶ެUеRֵbSS0aS7\0SPնHеRb0?b7:P5P׶еRֵbTxSR0TTRSPնеRb0 b7PˏSPSx1RQն1еTdTTTDg|QwP׶еTֵdPPaPf P(PAPF7PˏPTDg0PxRTPTRQնеTdTTTDgQRPS^ նP׼ЬTdRdbRˏRPC۟P<^ PSP>RbRPЬR׬RRЬP֬`RR\߬߬RPRRUUPxPQʏQUeSTψߦF~ߦEyߦO~ߦHjߦa~ߦQ[ߦd~ߦcLߦz~ߦf=Ƌ~ߦ|-ơ~ƍƳ~ƣ ~Ƶ~~~~϶~ϥP4gݬݬP ^YXێTV UХSգ1ݣݬPfWЬRХPݠݠďfWR+b'R.P P@b @bRĤf(WīfhiPcSգլW=ePѥP#'ݬPW)P/ݬPWWPPSХcW ݬPԣЬ8УRPRP]DwD(DRDERP0Х0,S2P^P^~ݬլݬ~ݬ^=R-P\\b\P\\^ZW7TPФ(RR, RSR(cPФ(YФ0[Y[1iXXRRRBgR X_1YUU[:eSSRRRBgRS_!UU0eRR\\\Lg\R_U,Ф(SSSU~SP ֤(XPU(PV Ф \7P\Pl ФlVФ(Ф, Ф0\ S2RSR,Ф,(2 R(R01PYRY(RSS[1cRR\\P@g\R_S,XP@gSPSlPR# Ф0,XPR"R'PS\lR\Q8P\lPPR(P$PP\\l\QP\lPPRP\QQScSSS01YФ0,XPդ+ФRТS Т(Т ,Т0bФ bR 1PФRݢ P$1Ф$0Ф0,Ф,(Ф(UФR֢eSSRRRBgUeSS\\\LgS$!RRRBg  U~ 1Ф$Rl-i&neb#  U~1QФ$RR(RRP0Ф(,12PФRѢ8z1USݢݢʏS/c+SP P@c @cSʤUʫ|fHФRТ8ФRbݢ Hݢ"RФSdRSRPУRУSRS]DD(DRDRP0Ф0,17P^VWOU<d~P<d@ݬPQQPQ BP<R@TRPRSQT>ݬjPRR ,R#RTݬGPRR  RT <Pd@@<P<@Dgݏ<@SSdT1\^IRЬP Т TPTd ТdЬSSТ(Т, Т0T Q2PQP,Т,(2 P(P0^TڔRݬݬ]DPD(DSDSP0Т0, ^ ZNV;X0YyW$m((0Ч0,ЬRbTTPPSChPRbTTPPP@hT#Rb PRbRR[[TЬQaSSPPRBhPS_SQaSSPPP@hPS_dQQRbUUPPSChPRbUUPPP@hU#Rb PRbRﴯSc1c[%P1ݬPQsjPѣP#bQTRЧPݠݠƏiR+b'RP P@b < VMS.BCKC @ [V9.BINARY-BIN]ICONC.EXE;1{l@bRƤiTƫij[Sc1doS[RЧPݠݠƏiYR+b'R0P P@b @bRƤi*Sƫi<^=T&UoRТPݠݠďeЬS,c(SP P@c @cݬĤeݬīei|^dSURïVЬTТPݠݠÏeVT+d'T-P P@d @dTäe'VëݥP^5U"VЬP`SSRRRBfRS_LPXXTPQaSSRRRBfRS_SQaSSPPP@fPS_dQ PſP(PЬScTTRRRBfPScTTPPP@fT#Sc PScSSW1ToT#jT"T'RЬP`SPR5P`QQS(Q$PQ\P`PRPP`QQSQPRRP֬TT#ЬRRRRBf׬ЬPPPP@f딼W~XK P^﭂V UЬTdRRPPP@ePR_LTWWSTRbQQPPP@ePQ_QRbQQPPP@ePQ_cR P$PЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQP`9P~Wp P^ρT S XUݬVVNPfTPЬQaRRPPP@cQaRRPPP@cR#Qa PQaQP`pPV4P?PičWVRХPݠݠďh R+b'R P P@b @bRĤh Wīh fPP^﵀W UTSSPPP@eǙPSP0PV֬SSPPP@e" VQSPPQ0QV֬SSPPP@eЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQRRPPP@eP R_R"ݬSSψPcǯPSЬQaRRPPP@eQaRRPPP@eR#Qa PQaQP`PФPVSФPݠ ФRSPФPРQРPQP]D D(DRD RP0Ф0,P^ݬ^ݬ^~W V'R8ЬUeSSPPP@fPS_IUXXTUScQQPPP@fPQ_QScQQPPP@fPQ_dSPЬQaSSPPP@fPQaSSPPP@fS#Qa PQaQP`PX~XϰSPS̬S PP|^}SV+RТP8"PЬP`i3UPTТPݠݠÏfyT+d'TPP P@d @dTäfJUëf;%CP ^Q}SRТP8XPЬP` Pj8P^}YWCTФRݢ P$PU1ZPФP֠Ф$Pl.i'n e`# PPE1QPeRRPPP@gUeRRPPP@gR$1%PPP@g  1U~PUUVVSURbQQPPP@gPQ_QRbQQPPP@gPQ_cRXXPXfif8|~1ɏVjP X1ɔVjPѬlɚVjP_h XɟYn8լ?ФPРQРPQP]D>D(DRD RP0Ф0,ФPݠ P$PU1Y^!RQQPPP@bP֬QQPPP@bQ#֬ P֬P^R֬QQPPP@b֬QQPPP@bQrQR-֬PPP@bP֬PPP@bPЬPQ.*֬QQPPP@bP֬QQPPP@bQeQE9ЬQPP+P-Q֬PPP@b֬PPP@bP^ЬP`R֬QQR(Q$Q\ ֬ЬP֬QQRQЬP^RQQPPP@bPQ_'ЬP֬Q`֬QQPPP@bPߑQ_ٔP<^EUЬRb"DЬTRScQQRRRBeRQ_QScQQPPP@ePQ_dSPЬRbTRS6RbPPT(P$PP\RbRSPRbPPTPRSSTd"TP֬ѬT.PЬP֬ЬRb``\ЬQR֬ѬTՔTP^exWZլݬPլPSXެUSe T%XQCdPP2PPPQXSSeQXPЏSSSPSQPQ{SPPQQYI4VfRoS2PPcXc ݬ$PEլ bfRKPѬ & Q2PPQ~ݬ oP ݬ3RPbVfRѬ լ PݬPUݬ PT URTRRR<<<<:=<<=<<=:=<=<=:===:=====:=======:=>>:=>=>=:=>>>>:=>>=>>=:=??:=@@:=\^^:=|||||:=||||||:=~~=~=:=~==~==:=~===~===:=()+:,-::;[]{}$($)$<$>invalid characterinvalid radix for integer literalinvalid real literalinvalid integer literalinvalid digit in integer literalunclosed quoteno line number in #line directive'"' missing from file name in #line directive'"' missing from file name in #line directiveFile %s; unexpected end of file Line %d # "%s": %s ???File %s; Line %d # "%s": %s File %s; Line %d # "%s": %s File %s; Line %d # %s %s: allinvalid operand to invocable0not enough memory for invocable listnot enough memory for file listparser: out of memoryparse stack overflowfailinvalid keywordallocatedasciiclockcolcollectionscolumncontrolcsetcurrentdatedatelinedigitsdumpeerrorerrornumbererrortexterrorvalueerrouteventcodeeventsourceeventvaluefailfeaturesfilehostinputintervallcaseldragletterslevellinelpresslreleasemainmdragmetampressmreleasenulloutputphipiposprognamerandomrdragregionsresizerowrpressrreleaseshiftsourcestoragesubjecttimetraceucaseversionwindowxyinconsistent redeclarationredeclared identifierinconsistent redeclarationinstall: unrecognized symbol table flag. local %d,%06o,%s con %d,%06o,%d,%s ,%s ,%d,%03orecord %s,%d %d,%s errorlocalimpl %s trace link %s.u1 invocable %s global %d %d,%06o,%s,%d .u2.icnrcannot open %swbcannot create %sunable to write to icode file.u1.icnrcannot open %s%s: Line %d # :"%s": %s%s %s: Line %d # : "%s": %s ucode file %s has no version identificationU9.0.00version mismatch in ucode file %s ucode version: %s expected version: %s U9.0.00inconsistent redeclarationinconsistent redeclarationill-formed global file %sprocedurerecord global discarding %s %s .u1rcannot open %sno record having this field is ever createdpnullstrnumberapplyinvalid keywordefailpnullnoopline number tableglobalstaticarglocalgencode: illegal constant gencode: illegal opcode(%d): %s file name tablelabelsfound rec %d field %d already!! never found rec %d field %d!! cannot write icode filecannot write icode filecannot write icode fileI9.0.00/32cannot write icode file header %7ld procedures %7ld records %7ld fields %7ld globals %7ld statics %7ld linenums %7ld strings %7ld total %7ld code buffercode buffercode buffercannot write icode filelabelsmultiply defined label in ucodestring spacestring spacestring spacestring spaceIPATHmain.u1cannot resolve reference to file '%s'string spacelocal symbol tableundeclared identifier, procedure putlocal: global not in global tableputlocal: unknown flagsconstant tableputconst: bad flags: %06o %011lo asgnbangbscancatccasechfailcoactcofailcolmcomplconcoretcreatecsetdeclenddiffdivdupefailendeqvereterrorescanesuspfieldfilenglobalgotoimplinitintinterinvocableinvokekeywdlablconcatlexeqlexgelexgtlexlelexltlexnelimitlinelinkllistlocallsuspmarkmark0minusmodmultnegneqvnonnullnoopnullnumbernumeqnumgenumgtnumlenumltnumnepfailpluspnullpoppowerpretprocpsusppush1pushn1randomrasgnrealrecordrefreshrswapsdupsectsizestrsubscswaptabmattallytobytraceunionsunmarkvaluevarversion%s: %s -- %c illegal option%s: %s -- %c option requires an argumentsalloc(%d): out of memory alloc(%d): out of memory r]:%s%s%sdefineundefifdefifndefelseendifincludelineerror_V91_VMS11_ASCII1_CO_EXPRESSIONS11_EXTERNAL_FUNCTIONS1_FIXED_REGIONS1_KEYBOARD_FUNCTIONS1_LARGE_INTEGERS1_MULTIREGION1_PIPES1_STRING_INVOKE1_SYSTEM_FUNCTION1_GRAPHICS1_X_WINDOW_SYSTEM1LPATHcircular include-stdinrunterminated $if rline(%d): out of memory#line %ld "%s" invalid preprocessing directiveFile %s; Line %ld # "%s": %s explicit $error$define: missing name$define: "(" after name requires preceding space$define: unterminated literal$undef: missing name$undef: too many arguments$include: invalid file name$include: too many argumentscannot open$line: no line number$line: invalid file name$line: too many arguments$ifdef/$ifndef: missing name$ifdef/$ifndef: too many argumentsunexpected $elseextraneous arguments on $else/$endifunexpected $endifextraneous arguments on $else/$endiflineendifelseextraneous arguments on $else/$endifvalue redefined   A S f ~  J| VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1  "#+2I3m45678!9E:i;<=>?@AAeBCDEFG=HaISVWXYZ(`Ea_bzcdefgj5kLlcmopquvwx0yOzn{|}~'PyFo<e 2[(:Zk|&7HYj{%6HZr./L2b4v79;<=>?@B*HAJSOcUuZ\^_abg h4iK_  !"#$%&'()*+,-./ :;<=>?@AC GHIJK M OPQ S U WXYZ[\]^_`ac ghijk m opq s u wxyz{|}~ """""# ### # ## ,# 3# 8#:#@#L#V#a#h#r#~########### #!#"###$#%#&#'#(#)$* $+$,$-$.$/&$0,$14$2;$3?$4F$5O$6U$7\$8d$9l$:q$;w$<}$=$>$?$@X-d TX\aelqw} !%+27<DIMQUZ_dhmsx  $(-16:@GMTZ]bhny&49CJQW`mzd: bq$s%u&y'{()*+,-./0123456789:;<=>?@ABCDEFGHIJKL M N O P Q R S T U# V% W' X+ Y- Z0 [5 \9 ]? ^A _D `I aM bS cX d_ ea fc gf hh ik jm ko lq mT7 VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1Q*s nu ow nz o} l m$+)+.+,4+8+->+.E+/K+0R+lW+]+ja+1g+2n+3s+f{+++4+5+g++6+k+7+8+9+k+T+:+j+;+<++n+=+>+m+ + , , , ,, ,?&,@+,h0,A6,S<,BB,CG,UM,S,W,\,`,e,m,br,w,~,,,,,,,D,,E,F,,G,e,H,I,J, ,!,K,i,",#-L-$ -%-M-&-'-(&-X,-)1-l7-*>-NE-+K-PO-i%PatchStringHere-> -=-$?-B-B.C .D.@.A.=XXXXY YYh:lFP@797<F6w7kjYDAnCE`v^H)dG2I=E45@6<?BDGHvWLvMK?iYtX1&T[\]^vVcSa=f_b>ivU3;vg`aAed85Z;>:vF@9v7<,%qhrJ_2ACsERQP$OGN2MI=L45K6J?B1D/H*W&T[\]^YVXcS(pBmf_"bo!U3 g`aed8 Z;>:F@97<  ACEG2I=456?BDHW.T[\]^YVXcS-f_b!"U3g`aed8Z;>:F/@497< 0 ACERG+2I=45C6[?B#DHWYX~jyx{z|}''()*+#$%&#ST#VWX\0bebkl 3     Q,-.]kTYZ\5$3-)6W+^1D_FaH/RcV enl' #"hhjek'R98=<[]40.2*,7&XEIMKC;`dGQOA?bS(U!YFPN@>aDLJB:_HcZ\-3/1)+6%WVT$lne5heofhokm     fkkmjgiohfnfl  mmokjj" &+,.0QTVehmrtx $%yz{|}~+ )-/123456789:;<=>?@ABCDEFGHIJKLMNOPRUWXYZ[\]^_`abc*yD VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;19dfgijklnopqsuvw+!#'S(k*V* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*Wf*h*Xk*o*Yh*m*`* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*a* * ** *!*%*&*(***,*.*0*2*4*7*8*9*:*;*<*=*>*?*@*A*B*C*E*G*I*J*K*L*M*N*O*P*Q*S*U*X*[*]*`*b*d*f*g*h*i*j*k*m*o*o(k*u(k*h*m*h*f*h*7f*h*m*9k*o*Oh*o*~d_%}i*T<<<<<<<<<<<<<<<<<<<<<<<<{<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%}=cw^O%JFii****<%@p%%%%p%%PG<KJ   !!!!!""####$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%++,,--.(((())*2233//11&&&&'44400            ^Y{U| iP~念Phߥ8r'P`RR{ߥެWgެVfPRR1TSRPPC5y]}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] %]]1P?P11P1ߥ2gd11i 1s~icPa~icP111P1i]1P11ou=kPU_PJߥRiP iߥW?'-$)dݏlߥgf.PRR1WaSSxSRRhTdPP(RdPPXxS~dPnPW%1ެZjL ﳠ$ߥtP@ P1ߥwPj[@k P'Ю(P(ޥy`XRXWPWޥ{``bń1-P@kPSУP`ōP(P1ŒePjV@f,ݣ Ю(R((PbŘ)P@fŗ,XTX(PPdŝP@fŜ,(PoPšݣ(Pťݣ(Pũݣ(P+ŭP@Ŭ,(PP~P@kű;=ic1hghԾ(X()7ݏARbP0PvbPlPlڻbPлPػbP P &bPP8Ѯ(@XݮJP ݏIծ ;+ݾ-PPmBPb-'FP欄P)ݮ^PSnRbPbRbS־gݏbt:zV/xLRRR~ݮP|^UVRuUSެ RC PSC`SPxP~PTTPPQPRfaլ ЬЬЬ P `PЬ P `bTffa:^tRtM^ռPЬRb7Rռ^}t\)(ݏ ^uSݬݬPR àO9RPP^iuUм SSRQRPR Rzsui'g9u%u骯Ne2=xTw }CQD/( D A̗%=.Cjy v$YOCKTd7uWo6}+] !vF>y?e씂e^R}?A,] Aߵ!gh^f#^[)jN_|Sl99(sBݞm=gl5o%P$Xu=p\OD r:Z^'' tuZ `bD(^)P}ǧQ3)'ՀWTb#@ԾlwaF6 dD>Ϥ"3+-wyt8)c>7%S˽R^DxO=>`zЁyE´C LˮGy `,^z)q:T$F'P!HSjb(&OksǴyV+ ܅77=[`NȻKF͘Nc Ȉ-V8weҌCgF^|'^2.R(ϰ97q E][͔SvʮF8+t w8tmʼno.RU thRto nWsA'= ZKp }ixΦ{ Z_"\_P-(eY3!dĒWd;"h1I4φj_[`=W9>H4 i$y:uKX Q,h罉8G6P"r\X 7ԛ4g9kKǮgS`[VcݵU~Q]D&#N=֪xA%+5n|9o4&Wq~0f^0> T,Vj̈/XsR_e}V!-Y<vSfAH[ {`T%N %F~L\NL5MJJ$?j Ǒ ~A#E[)O 1MF1%cxq-m [6LJu<|6OGxZRA 2T ޷ %՚ J~;#8ѥc0rcU;feB-{u+] hd/|a%UH;EW#Poՙ*n6%M`b! BCg9@ROK]Qӆɺ*^BIn7G9>zQtﶶG2ğV1{DgH!% 8:7¸9qTZx) yt%VİˉqAxP<Ag9A+60 qkΤeJ8r\E"0$ $A42 o]22HʑN8ANnHd?xq#49idҁLK0g1Q~p.]5%Qe,hk)3̙]JD=Scu0n)aZXA zllvGtg[IڻxF^ˮ J>.,hKܖ䠳KC2bp_O?hb bpn |P?ѬatM  D(@ ɵK0ӧX(,CsT̀or<˻P.L'\kEǫ_w7e2c޷ PΛLVބ\}iY>xwyN"6 gA0^)jFA .g, 2b% ˓UԈ׮ĵB]Sg?ȜD 1h``sA=t}ӌ6R̝]-\}JM,o$%j Q9&VVFRy ]9R"|IS>7|B`~Ć5n7vB60qtGҌ1$w`F_vSͲ>MKiaq-{J ([]Lˏg[3IO2GL7U4#i4P+%K [4Z ls2&%!{g9%cH'QUB")} Q2+]ך'.ߚ.!&TrC6PR(\5$,'ESwIK}C4$|ˮAr _:kkwH/4fEG9<!%:'}aUʤQ5h/$" 1LL V1!PXY$29-zr |8/ʆ9Ks;1 VUc! >\oRoO3Rel^d;K&@7H*2ApE]ekD|î.#M$ZݍU!$lWC|xytg[&^dnSs6egJH}?JU46"m>B2?'be?\)p_?g-rPP5:kҕ3ɱ~JB*cktZk\ڡX K*B2IKOly#Dú9l, 6|'.o@_|N {\9+u|3Ԛ8.A*l<(wMFue=f=?ߥK*t~WȀq }j9ESfOpb?#>GESIRjeF%9pvjFAn8+ntKjH+|\` ZB@p'ΫtpF!M68dDP Dm,nRZb.wKNBn%Bݰfڲ kUk_?…N-T<3VM|Nd(hkP{ɻǝ:3d%^` 6Gib[g=ZLgH+ B>X;<-#E_qAj3)$^8U͞2r5 ܬ~6SP-}x>;P^#zih62^$Q[5| bFϯm#kS]%.Ggs@ֆ<H{T>Q?zֶDut0H@ę\B KJZlbͻtKCAߨlΦ|`5 R1㵴 0DH{@8_QrN:G@!g ²:Q=| cl__+Ed3UujGټRhK,p& T3~Z;/j<"Pm{XժFB 8Ch'W/J'>#y`)R6xY?d*yk0Jsi"MA{ 푦uuD7˺vZxM7G>GK X 1 9*H"p,8 ClCH;+TbUsO[L [>g*ߧ-ui?xQ7[0Mnd]>/k$=XDVδ ok5҂V_ S>v.Љp>fI~걮^虶#n%R/bώ1фo^B/mhGhƒ $YBiSX4 xDw rj!TGuC^b'@_4F /J:Ż"n!B@1vG#E SG5X !N|՗vq呵a|ݤjDAG 6Ņ@ {ZsD nBgU:S۳P 3=7Wq9g=40,y9גPp 3(Ȩ݉nDܚwɋw(ǰU=8Gzރ>K(J)VMhj5u:*MZ:X ol|'v-ND Jd%Ym*k(+G_֤z0SN]&5sEq Kr@MG/]:{귦xeTWHLGŶN*/5p5f Y7C4(?$gTl yT,<vt?1C}k ]Vb6X4kUóُ.% ݆_ڦ Ơ0GZh"@ iWv(ym)M"^({ZȳǾOJ><ݧ)LqgS((P5@Jq(w`ȴ5@5йxM Q†X2^Uzp Aőlދܸ(!=-2JcQ &L^6Zlt3屒9sld岐=+?MYp)H>f`>]Y09YZ'1>rYgBWGevQo T}^:^^%q=c{tVj(mı1cFX(4T{^\q8Sp\k|hřU%U+} LeXO)pqrZ4C*7";9;?Ud~pbr3AE6 xF1J͟&9rܹSy|Z_7w{z8(y|A.:~c+9(0y:eR?U}v&ʥ mu7ĭFy'P>t>4$--6SʜR|eu|B!(!`ks-- 9St64 uF>XOZ/??Ir?n~(झM1OMREe%DT-g8#]i\\9ze8?1[>1<uxºG9^Qcu֒)!yJe&|tYȍJ9-a˰si0=n7*܇>[4+kG]d8>*hP-YX`852Ja|pM &-z@W%:A$1Uۆ?+#kݞ$z$l. _7Y#WWya&o,hSJa^󹝺u89gxҖC;@<5peYn#vD):ɬ:FӦmߥ? tgܶ *8=krӪbЋX1u[v1e۔u`iуQd\ X[6lsv~3T/juFpoQU4ɅE&S A9Bf ʅVeM|`mc‹n*3DC-uMY?.dzv 4CR#+97'>?4ea9a׌(Ĉ ӧ'A;m?|nr&>Dz˶@; ָa<(-y^& dpaB <ȏмz (خpY%϶ՄhhQcbil *M`2Is6J>~Ocm-/- HR,Hu3528[8& z6YήŇW?em昆|*?2-?zXD_ k4XgfA l`C[5#wS vJ?GE &} Feot^ǦgwҺrAި+*:;v}-SuA3(apMb >'Qup 4.vt$iB)34f`0r&$];&k0jZ47 UOr[M |7];N:PO/Z H͜hJ~j. ++>0݅!p?ԝ2*a.7Bգ3S} ɫ@Jb'!Мs`pm&L՗k.S.T@8۟5 YFO6f;*"G^l 6GX5J#mIglK67ܞZR¥v(iiȜP#ObyVЛӧlFY,0P3?~:/W2z.V*2Y IQVqP;w3Y]w5Y7a.l D)tύ2 ?'Dzm,QO1|m$T|J[Vi^U& of{8(J3:ƨvq+~5 Y BT VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1HP Q{RPQPQVSVRRSVŬVTЬRìbWTݬQPSݬŮB9ż PPT P@cPPTV ЬRWSbSP^RެQRa PxRRRaRP|^qxVSTUWcռЬP`VdcռXcRRfe.PRRߦ eP ߦetcP|^wSTuU~Vqᄌ嘆F$ݬP ݬߣ7ߣ;ߣ.Ĥߣ=ݬPޣ?ݬߣEϼEﬤߣKݬߣJǝߣO}PfߣQz7ߣcݬߣbߣgHPeߣiE7ÆߣzeEPR æ6Ьﭷ~V8fP eP Î~6ܻP^AvRլ ¦@6^̠ݬ^vXﰠYЬVWfPP']uu5YQe%Miu- q YIq9Q)]1BPn?PЦRѢUh ݦcЦRѢUߨݦEVߨ ЦRѢUߨݦ1PRiSRiSRިTRT±ZjPUeDS֣ݦDSףߨ\ި!TR~TxjPeRdjPeݦτR~FjPe1QPߨ&ݦXfߨ,ݦCVЦRݢ$ݦ1 PRiSRiSRRذPߨ0ϐDS֣ݦDSףި6TRT_Pߨ=N1PDSգߨCV21sRգߨ]RDSRDRD(bݦXD(DDRިdSݢS͸P1RiSRiSRɘR٘ɘSԣߨiϚDS֣ݦDSףߨozݦɘSգߨt`ɘSݣϳ ߨxHRl5PXɘ1jЦRb;Ѣ 1ɘRբߨ~V1PЦݦ1(PRiSRiSRțTRTZjPUeDS֣ȠϚݦVϗȦςDSףȪqȱhݦȵT٘T{jPeRgjPe1rݦτݦ|1_ЦRѢ( ȺݦYЦRѢ( ݦ:ЦRѢ(Vϼݦ1PDSDRТDDRԢRiSRiSRTR~T^UeP~ZjRrePj1TR~TLePjDS֣ݦdDSףVR~ePjTR~T߬ePjR~ɬePjTRTﮬePjDDSRТ1SݦSt=P`1wݦψPWݦ}PW1]P 1NݦWVЦRSݢSѴPݦ1P SݦSԫP1 ѶR0SiTSiTRTRTVPyDS֣ݦϝDSף,ݦτR`#TR~T;UeP%TdRePdݦ9R~ePd1 ݦ1 P(SݦS̪P1 ݦݦ,S~S]P1 ЦRb RϠP33ݦЦScRS PSiPRV :TRTPW1 PVASݦSP1 PݦVϡGόDR֢ݦDRעMk1 S_ЦScRS' SϡPRVCYTRTTP@W1T PЦRТPP8FFFFFFFFFFFF FFFF(1P?PRiSRiSRDDS< RDDSRDS_χݦevЦSc5idDR DR֢ݦϫDRעo: S DQP=vDRݢ&PD1(PRiSRiSRDDS RDDSRDSRͧZjPUe|TRT蠟jPeݦDjPeȁEȈTRTbjPeDRݢHjPeDݦݯ1HPɜRRȍV)RiSRiSRDDS< RDDSRDSȩϤݦVϡ ȯόȵσЦSc6ȹqDR DR֢ݦϸDRעȿG SD]&PIDRݢ2PD14PRiSRiSRDDS RDDSRDSR٥Pϐ ݦЦUe7v TRT\Pݦϫ UDa+ZjPKUe TRT/jPeDRݢjPeD1RiSRiSRDDS RDDSRDSRŤZjPUeTR~TjPeݦϺQ H R~jjPeTRTOjPeݦoD1jPe TRT jPeDRݢjPeDݦ1DSީRSRc VO&1ѣ ,ѣ&RSRS&_ RDSSRS-SDSi2PU1lPRiSRiSR2TRT5P!DS֣ݦEDSף7 > RPDϦ 1PީDDDRԢDRԢHɘɜЦRݢJ`PBtBS4 V9 Ц[kxRiSRiSR[TRT5ZjPUe`TRT jPeݦ,e RjPe [ЦRb R Rcݦϋlv rm ЦRݢvtMݦݦ1|P|SݦSPP<1SɜRRȁV#ЦRѢݦvPRiSRiSRȤTRTPDS֣ݦDSףVϒȩ}RjPVfȮQݦ#1ЦRѢS ȴ-ݦυЦRѢS ȺVȿݦVVЦRѢS ݦ1PϷݦݦЦRѢg Ѣi φݦݦςЦRѢg _Ѣi IVN9ݦ 1rRiSRiSRTRT=P)DS֣ݦMDSףRɧPݦ1SݦSОP1σݦݦjVoZ1P KݦϣݦϛݦϓV8#gVЦRݢϺݦjVЦRݢwݦɦ1PSfSΦP VWP^aTSЬPP%GLJ@>(&db|zpn42XV1_P>?P:R1{S?R1qPSER1ePSIR1YPSNR1MPSRR1APXR17S^R1-PSfR1!PSlR1PSrR1 PSxR1PS~R1PSĄR1PSĊR1PSĐR1PSĔR1PSęR1PSğR1PSĥR1PSīR1PSıR1PSķRzPSĽRnPRdR\SRRPSRFPR<SR2PQݬQ︛PRfS Y^_RЬPP$?2P?PϫϢϙ"ϐP( ^^SЬPP$?<<<<"<<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<,<<<<<<<<<<<1*?PHR1NR1VR1[R1<-~2cR1PPQP*P=1PPSSPP:RR(HP?PP=1PPRR:P=1PRPSPPRR:P=1aPRPTPzPTTPP:'1F?PUP=1!PBPSSPP:QQ'GP?PP=1#P PRR:P=1%PR$PS"PT PPTTPP:)S1?PP=1m'PPRR:P=1K)PR(PlPSSPP:OO%E:?PIP=1 +P6PRR:'P=1-PR,PS*PT&PPRR:P=1/PR.PPRR:P=11PR0PHP2PIPPRR:P=1O4PR3PJPkPTT|g[PSSPP:MP|@P9P=17P&PRR:P=19PR8PS6PT5PKPPUU=1PTTPP:#}?PP=xPmPRR:^P=%@PR?PS=PT;PU:PƻSRէݧ h,ݧhRRh S%P^W2X[@YmZ~V(RRk(bh\1rPU$RШ0 4$ 48R#ˏRSCg1CTPR 1UdPRR#1dPRяlRgdPRяiRXdPRяnRIdPRяeR:+ PRR R dPRR R RR  R PRROR JdPRR;R 4PR#'R$R dPRRR PdPRR#1ˏRSCg1ԑ0 R) S S  $kP$<\k1ˏRTDgS R_$RP\1NwPDgR.$RCP\1-VR"R'$RwP\1 6$RkP1P@i\@Sch&3PkU>83k(\(,hyRBRbh2Pkj1_P?PˏTP@kP$ SQP0TU PˏTU UUQSPT. R֮ 1uPTe TE R֮ 1XTr TR1RSS$12YUըݨ j?ݨj/UUjY%j ﯝ11PˏTP@k1Te TE1KR1T+T-R1ˏTP@kR1YUըݨ jݨjUUjmY%j^1PˏTP@k11ˏTP@kQQUQPQQP#U0TU ˏTU UUSR1PYUըݨ jؐݨjȐUUjY%jHʎ1 PˏTP@kQQUQPQQP1U0TU PˏTU UUS1(YUըݨ j5ݨj%UUjY%j拏'zJP#PPS1PˏTP@k R 1Tצ߭.PUE&P`hP-P]EPTծ %fFsPhU-P.$Pf!sP/-PP^TNOYCVtZz[&vWЬSXPRRS1:R 12R1&UR_ äXPˏRP@fXR\qePRR1R0R7RPRIPRx PR3R^#ePQ PˏPQQR PBRѤ  dpФQ֤RaePRR EXAXePRR,ˏRP@fPePRR ˏRP@fRSR  R1RS qP=USժݪ ݪtSS]U%qJnRäSѬ"$SdpPj#2+P׸$PSdpP  +Pﲸ0P^PPʏPP^TЬS2RxTQ0SPPQTPSSPS0S7 RPRPSˏTP<^UnTSR5P\\P\a\f \6P\A\F7\ˏ\P@e0\ P\dPxSP\PSRPRPSPP|^KRT;SЋVP\\ \ P\\ \ \0\91LUnnդݤ f[ݤfKnnf8U%f)˖M\ \ PP\\\ \Pc\0%\9 cQ0\PPQcP\\0\9\P ^ SJTUHXɈYWЬRR R hPRR R R"1oVĝեݥ gGݥg7ծݮg"V%ghiRR PRRR RPЬRPRR"HR?R :Pѣ  c|lУQ֣RaPRR"RR R"cGmP\ĞVnեݥ gPݥg@nng-V%ghRP^!TvRSd\d\PqP\\PP "VVVVVVVVNB:<?Pb \cbd&cb PcbPbPPb Pbbb\PP^HTƕVXЬRSТSզݦh?Ѭh(1ShЬPՠ 1ЬWPUWRR$RRR RХSErPՠѠR`S. PՠQաѡRaSQաSShxnRެ Pb`b Rb`bݢhHlP ^UGSЬRR$RRR R ЬPРPPՠPѠR`P PՠDQաPѡRaPQաP^FSRTբݢ d}ݢdmլݬdX%Ei^UFSFTЬR ݢ)dݢ3dլ ݬ >dݬEݤم{ ^ESRբݢIDžݬSݏ|^ESTЬVaUޏbdJRbUVdbgdb #ݏ^-ETSbcRbݬݬcbgcb9 1„ݏ ^9ZSѬ&cݬPݬߣޣ!"ЬQPPP@P_aPR ߣ#sݬaPR ^YSGaPR ߣH0Ԣݬ`PbRP<^qYTJUЬSaPR ߤHԢS`PbeRePePՠ РPՠR^ݬU^[pW<xRR)PgRPgէ.Y_PgRЧR |ٮkЧUЧ TЧSTЧ\ЮRBlRTRs\TYYg\\UXX\VZZxRR\PgRݧPxs VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1fgէXPxYTTxXUgUxZVgVSdUeC-\\Wk`Pkkk\@\7L\LLk%kú\S1 1CՠRRokPkkk\lѬS\lѬS\llk \llkЬRݧdg[PR1PP''1P?PSkХTJPd\LP*P!@֎\L2 @S1TUTݧgPkݧgPk1PRUVB*PP^xPPxP\\UХ>B߲R\TdBSSSC,SR\C\1_BԱ\L S1LxPPxPSSUХBRSTdB\\\L΍\RSL'SBySCﱍ\\T UЧPP $8LPTdt$(8Xx|<<<<\|<\|<\|<\|4444444444444444444444444Tp  4 P l  0 L h  , H ` x  $ X  @ ` <X <X\x,P\ht1?P?PRx1$R|fRݢ4x7|1&| f7|1P11111fRݢ1PfRݢ1PЦRݢ111}fRݢ1lfRݢ{1\w1RP1M<w1@w ЦRݢЦֵ1P~w1P1 fݦݦݦݦP1P<Cw1Ц6wЦRݢ&1Pw1P1 ww1PvfRݢ v1yvfRݢ v1ZP1U1Qv1FP v1:PPܴ1%Цд1PT1fݦݦ"P1P1fݦݦݦ Pm1Pfݦݦݦ PM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦP16Pfݦݦݦ|Pͳ1Pfݦݦݦ\Pﭳ1Pfݦݦݦ<P1PfݦݦݦPm1PfݦݦݦPM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦP16Pfݦݦݦ|PͲ1Pfݦݦݦ\Pﭲ1Pfݦݦݦ<P1PfݦݦݦPm1PfݦݦݦPM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦP16Pfݦݦݦ|Pͱ1Pfݦݦݦ\Pﭱ1Pfݦݦݦ<P1PfݦݦݦPm1PfݦݦݦPM1PfݦݦݦP-1vPfݦݦݦP 1VPfݦݦݦ P16Pfݦݦݦ |PͰ1Pݦfݦݦ\Pﭰ1Pfݦݦ%P1fݦݦݦ& Pq1PfݦݦPT1fݦݦݦP51~PfݦݦP1aݦfݦݦP1BPfݦݦ(SPܯ1%PfݦݦdPﵯ1PffP1ffP1ffPl1ffPT1fݦݦ'P81fݦݦ'P1efݦݦ'wP1Ifݦݦ'[P1-fݦݦ'?PȮ1fݦݦ'#Pאַ1fݦݦ'P1fݦݦ'Pt1fݦݦ'PX1fݦݦ'P<1fݦݦ'P 1ifݦݦ'{P1Mfݦݦ'_P11fݦݦ'CP̭1fݦݦ''Pﰭ1fݦݦ' P1fݦݦ'Px1fݦݦ'P\1fݦݦ'P@1fݦ jP'1pfRݢP1ZPfP1CPfݦ"P߬1(ЦRb#RPݦ*Pﳬ1R𤋮1PЦ1ݦݦP1PfݦݦݦPc1SPݦPݦݦP11zPݦݦYPݦݦ|P1NPݦݦݦ^P10fݦݦCP̫19IݦPﯫ1fRݢ PfRݢ I,fRݢݦPo1_PfݦݦPI1PfݦݦݦP)1rPPfݦݦP1JPfݦݦݦP1*P PfݦݦhP﹪1PfݦݦݦHP1P Pfݦݦ Pq1P_ Pff PM1Pfݦݦ P01y Pfݦݦ P 1RPfݦݦݦ P12P Pfݦݦp P1 PfݦݦݦP P1Pݦݦݦ P1fݦݦ  Ph1fݦݦ PL1fݦݦ P01y1ufݦݦ P1Yff ; P1Afݦ " PݦݦE PΨ1PfR<~ݢP1fR<~ݢxP1fRݢ<~ݢ[P1fRݢ< ~ݢ?P1ݦݦݦݦݦ!$ P91Pf-1vPf!1jPf1^Pfݦݦ"o P1A1=^QfWlVlXdlYUh/nSPf\ElRPb\Rc\RfREbUUh\llTi.nSg\DlRPb\Rc\RgRDbTTiee^DTլ1ЬPPl(( P?PPA1@bP11/PЬRRQQ*hQhSAcPѠR P`PѠRPݬ ݬݬϱЭPȬPЬRRQQgQgSAcPѠR P`PѠRPݬ ݬݬaЭQP ȬЬ PݬĴЬRRQQjQjSAcPѠR P`PѠRPݬݬ:ЭPѠݬOPݬ>^yjYVjZwjXЬSSRRhRjQBaPѠS `PѠSPRsҬTThTjWDgVЬUЬSIPQVaUSԡiQiԡ PiPQiP QiQDgҬPPhPjS@cPР PТ P^-fYЬSSRR*fRfPB`QѡS PaQѡSQPoҬSSeSeXChWЬVЬUЬ THPQWaVUT ԡeQeԡPiPQiPQiQCh^bZzb[{bYЬSЬTSRRiRkQBaPѠSѠ T`P ѠSѠ TPR{ҬTTiTkXDhWЬVЬ UЬS4HPQWaVUS ԡaQaԡPjPQjPQjQDhҬPPiPkQ@aPРPТP^ҬQQ@hQhRAbPѠP`PѠP^ҬQQxdQ]dRAbPѠP`PѠP^ҬQQ@aQ1aRAbP!ѠѠ `PѠѠ ^UWRբ PݬbiPТPRբP^UgRFPQЬaЬЬ ԡgQfԡ PbPQbP QQP^mcRFPQЬaЬЬ Ь ԡ4cQ+cԡPbPQbPQQP^`R+FPQЬaЬЬ Ь ԡ_Q_ԡPbPQbPQQP ^>SfR)Pݢݢݢ )ݬyhPТR^>Un_T1WEhXjVݤ ݤ<ghPf ݤݤ hPIghPfn ݤQghPfVФSФRRVghPfRPRP%PPP2P~ZghPfRPRPg ogPfФT1Q<^=T"eRUP UUݬ`ެScUgPxdR%Pݢݢ nc-gPPТR<^M=TtvR|RRĂݬfPLtċݬfP1dR!PbĒݬfP˪ТRd bS!PcĞݬxfPУSau`RUPUUĬެScWW3ݬ|S:3iSXPWSSS3߭PXX1IZl'U YXPPP  a                 = 1P2?PjPnen&2P[-Ԯ1PiPS PRjnRPS- SfRCRb{iPSe SfRCTdSSaS]Sd֮TeծK~ΘPSSTg& TRfQBPˏ`PPBRbgTcPe߭KPXX1Q?WP^ЬS;УT1Є+PЬRТSЃR RЃRЄT^1W a[%NVNY߭PRR1 %ZpS#X`0+,ol dRPPlEEaEEqa]E E E = E E E E E E E E E E E E E E E   E E m y q1h ?PjRUfTLSSTS"8SfLވPLUSPf\`ClPSfk1 PXPSjݭSR 1 P`P\jݭ\VRSLScRW 1 0PTjT/Pݭ~R϶ 1 Pߧ,gRSDcݭ~Rό 1 `PSjSQTCdU e1ESާ-PSXfTKRSTS"8nRf~KވPrKXSPf\`ClPSfkߧ3ݥ ݥM~ Sާ7LSXfT.KRSTS"8Qf KވPKXSPf\`ClPSfk1PХSݭSR8 1z`PUjUeYSާ>HSXfTJQSTS"8nQf~JވPrJXSPf\`ClPSfk1PݭUR 1,PTjPSDc PU1)CU1UPPL1P?PߧDPSDc1r5SާTDSXfTIPSTS"8zPfIވP~IXSPf\`ClPSfk1PESާZ@SXfTFI)PSTS"8Pf%IވPIXSPf\`ClPSfk1PݭURϜ1`PSjݭSRς1|PXPSjSϧ1e`POjbSާ`XhP\PU UQhPS߭S?PTЭ쟭kS<~\$1T쟭kU\n$1P U pP쟭kU\G$j U(hPSSP쟭kSU\$> U(hPSSP쟭kSU\#ǏFLL\ϥ1PxCSCTCdSiS CiTPCkiS>Pi1uЮhSkVVI~Bݮ0ݮl]ABTfT"TTf~T&P \qBfPݭRǪQK*K߭pPRR1} ^%SBRxB\BPL`\b\ BbPPqBTb\'Pbi| ^a%UATAVЬSdPfHRPR8wHdfPfSQRdPbA`RQdET^$V2TX/HY$H[=AU.AW'GZѬiiRRRijPjݬ jPЬRB`STSTePgkRPRDkegۊPgTQRePbA`RQehjPЬRhB`hPPSePgkRPRDkegPgSQRePbA`RQeh| ^#UB@T3@VݬN ЬSdPfGRPRDFdfPfSQRdPbA`RQdR ^i#URW?T?VgPPݬ ЬSdPf|FRPRDhFdfPfSQRdPbA`RQdg^"U*RX#FWT{>Vݬϖ ЬSdPfKERPRD7EdfXPfSQRdPbA`RQdQ^!UPW >T=VzgP{PQPP\QS\RdRPfD\P\PR U VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1+DdfЇPfRgR\R\dPd`R\R\P^,!YmP[=Ww=ZЬSSRCXBhR b1SRBRpbUgTj)DRTRDDgj6PjUTPgR`DbPTgkޭԮޮVUgTjCRTRPUCgj߆PjUkURUR1gTgЮRfbdURURSRBhR b1PTdTPSPBU@T)CVdTDfQ@ TdTTPTRP:PޭPaTTSS2SSxSSxSSSPTSSSxSSS`QRSRSSPޭUˏPRRTˏPRxRRxRRURxTbRRSPUgTjBRTRDBgjᅤPjUTPgR`DbPTgkSUgTjcBRTRDOBgjpPjUSTgRdCbTSgkޭܮ ޮ U T gSj BRSRPTAgjPjTkTRTRgSgЮ R ebcTRTR^AWJAXAVݬPC PTTxTT$TެUgSeRBcRTjMTT~ݬݬ ݬݬRCPeRf9P RPhQ@S c"@aScTgSDcBPϝTϖfRSf6 SPhQ@Rb"@aRbTgRDbBPaTZfSRf6 RPhQ@Sc"@aScTgSDcdBP%TfR^[z[LP{PQPPRqURTd9TST97@RSR(PT#@=9/9UfХ SYPѣTLѣ\FV \ݤ@i@hg>PХRB`jPlݥdVcSХUV \ݤ@i@hg\\ 1`Ф T1qJ=UePХ TR~>MTФSգPdT ФSգTФSѣRݤ\dT P~K1>RХUIK=S*=TУRBd?P|ݣtУSI$=\mݏLά~CKݏ0ݬ(0Pݏݬ PݏЬ \BIPݢϸТ RI<\ݏϕώ\5S5S&GS5~SP \ 55HG)66~6P "߸65RRXHRHjG;;~;P :;;RRH H!G;;FP RS;GGj=K|~F_=Fl~P uK1lTl~ˍm=G=ScݭˠV=cí~˳C=cí~0=cí~=cí~ =cí~<cí~<cT%<c<^qT3S3UcPe:RPR8:ce}PeЬRQcPaB`QRcYF<^Tf3SW3UcPe3:RPRD:ce@}PeЬRQcPaB`QRcE^S2R2TbQd9PQPPݬ9bd|PdЬPPEPQPQbQbЬP֬`aЬP׬P ^R~2So2PcP"kDPc~PP \A2^9R*8Q\bPaPL`\\bP ^XDV8Y1W7ZѬitiRRRij{PjjSЬRBc {խ0íRRffRRgSޭUTPcPխjSЬRfBcOO^1@WPP7S@cRV-8UVUTTxTP@gSRc9PTVPTU PcУPVURP^,PP7\@lx9PP ^WDVO7T3U97Re9P\\ \ e8P\\ \ \P\ j\ e\ `\,[\RPRfgfd zPdRQRdS\Ace8P\\ \ \ \, \dSBcS\ SS6t6PP^TDV_6U2WI6Rg8P\\ M\DPRfߤ fekyPeRQReS\Acg7P\\  \RSRePC`S\ SS65R~ ^A2STRcz7P\\ \ cd7P\\ \ \P\-Tc:7P\\0(\9# RQ0\PPQRc7P\\0\9P\ PPb5RTP ^1SRc6P\\ \ c6P\\ \ \P\0'\7"xRQ0\PPQRc6P\\0\7P\ PP4RPP ^6Wn|ZԮ֬x4RRB'ݬB[4wPM4?4S0 6PRR0aR9\STS!4QRDae"ZU0RTnTPaUPZ PTPqZqZn|Zl05PRR0R9Rr RR1SUS3VREfpZXԮ|Z%0f5PR1PSTS3QRDaˏRP@gT@gPaT0RV PˏRV VVTeZXPnTTaPTZnPdXP`TPjPqZqZn|Z/4PR1wTR TT+3nЮPSRS2TBdT2S~PP|^7/V|UTfn4PSS0Pf[4PSS0S0!S9STf:4PSS0S9S.A|RUR0Sf4PSS0 S9PSf3PSS0S9URSe SE1Sf3PSS+S-\S-\\WSf3PSW\S0+S9&P \PSP0P\Sfq3PSS0S9W\\TPP\\U3P'be|=3RS RR1|^-Td3PSSL2S)S $d2PSSLSS SL1VRd2P\\ \ d2P\\ \ \UYP\-Vdw2P\\0)\9$P RQ0\PPQRdS2P\\0\9P\ PP0VRUUPRS RR0PP^u0[,YЬU#0URR=&U=0QsP//Tk1URUR11VTXT/ZSifPRR R ifPRR R RW:R0%R7 PxSQ0RPPQSifPRR0R7PR PPkSWWHjk URUR1sTRT@/SB*/T~^+\N//l0P !Pl0P  P/^}YB+V*Td(X5.WR.U;.S\.ic0P!dqRbPcfbPehbPg _.bP.'bP-.bP.P-;bP..'bP'P'.bP'-.bP'P'H-R-P-R-cPPRd\L`\R\bRd\cPL`\R\e\\QfRBl\Q\PaQf\ePL`\Q\gPPRh\L`\R\PbRh\gPL`\R\|~ߩ.P<^ T,Uߤ ݬ P ݬߤS- PRԢS PbRSeSeeRբb.PТRբb.PS^ЬQaPaPРa^ PRԢA PRP^(W+VUg'.SfTEdRPb\Rc\RUUg+-Rb+fbfe+b\++b++b++b{++b+Z%bQ%*b*$b$*T-P-SPФ RPb\Rc\RФRTcRT***\Ь R\-R\**^ X8W*V*RSTRghgfnPfTRQRfUAeT^*Y*Z3*[iRjSBcPTЬRRSRUSPRRTURURЬXiUjVEfSTUU&TkUDeR1XKjWТPXUSV@gnnWUQUQ"VQVnPnga`QPUPUPQQТPb1լPSUXV  `jUVPbXibPРPbR1tլPkVSRXU `jRUPDfXikRDbRP^ЬPЬRЬ QPSPSPPPSPS2P^ ~`*)Ь^"!D)5)(^6^$Y"ZXT"[Ь UѬ(#ߨ  (p(kPb(ެRb(b( bRD(SBcTЬWWdUU1WSSRR$R'QBaPѠS `PѠSP ЭЬV&(PF`SRi"PSBj0*PRP PRRiPP!Aݭ~D~ݬPPլ'SЬRBcߨ ЬRBckkUEWSSRR#R'QBaPѠS `PѠSP ߨBЭP U2 , UkkU2','gﱣ^A#[&ZЬSSRRkRjQBaPѠSP`PѠSPR1ҬSSkSjYCiXЬWЬVЬ UЬT$PQXaWVU Tԡ  @\ VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1& Q&ԡ&PQ &PQ%QCiҬPPkPjS@cPȬЬ RP^ Sz%TѬ}ߣndOiPdެP&&``&`PdQ@aQЬRRaЬ R мP R мЬ  R мЬ  RpPRÎ''^%[ЬVVRRR$UBeSѣV PcSѣVSR1kҬWWW$ZGjXSЬUЬ V ]S`UVPSXYЬXkVSU9Y`XVU ԠQ$ PH$ PN$SPPB$PGjТ SУVЬUѦ SVЬ W V`UWP УUЬRѥ>Pc"RЬUЬ V R`UVPcSTcSУPЬRѠSRЬUЬ V iR`UVP^ҬQQ0 Q#RAbPѠP`PѠP^ҬQQtQ=#RAbPѠP`PѠP^)#R$PQЬaЬЬ Ь Ьԡ " Q"ԡbPQ bPQQP^zPQЬaЬЬ Ь ԡ" Q" "PQQ~"QPP^ *Ь`ЬЬ <^T~U"QЬP@aSRdSBe$PRPRRdP|^UzP{PQPPVЬTǏS"ݬ ݏT$PUTSVݬ VT#PUUPUP^T2-W3-V(-U}S2eeP޼R@bccRb- RcP-ePcRcbff:fݬ #PR&efߤ.ߤ##?PRb:gOeKPcRbRg6eѬe#ޤcfߤ--ߤ`#9#?PeP޼R@bgޤIcefP^ݬ#PP"PR.ݬ"PP#"ݏ"R"^TެSccc"PRcߤ""ݏ"RPθ^ЬZԮЬ Ь[ZXЮWЮ Y[VYj(`WWVVbX!NZ!PP!ZRPRRЬPլЬTޮUd Td dV+dSS PЮReSbTdSS 蔾TVV1ЬZЬ Ь[ZXЮWЮY[VYz(`WWVVrX ^Z PP ZRPRRЬPЮT ޮ Ud  PTd dV+dSS PЮ R eSbTdSS 蔾 TVV1PP^  ֬ PQQ ЬP֬Q`֬QQ 蔼ЬP^ZЬXЬWЬ YЬVYO(`WWVVݭݭݭߪXߪݬPPЬPPP^TRSЬUUVUUPP PRRU4b.  R Pb~ߤPRV RRcìVUUݬ WgEcRURRV UUVgE; 7PR.R RUPP RUUR gE UP|^Vݬ (`լЬլЬݭݭݭߦRP^TЬP֬`P֬ЬP֬`SЬP֬`RSPPP@d S~PSRPPP@d R~PRSRP^Rb ψߦF~ߦEyߦO~ߦHjߦa~ߦQ[ߦd~ߦcLߦz~ߦf=Ƌ~ߦ|-ơ~ƍƳ~ƣ ~Ƶ~~~~϶~ϥP4gݬݬP ^YN%XTV- UХSգ1ݣݬPfWЬRХPݠݠďfSR+b'R6P P@b @bRĤf$WīfhiPcSգլW=ePѥP#'ݬPW)P/ݬPWWPPSХcW ݬzPԣЬ8УRPRP]D#D(DRDMRP0Х0,S2P^P^~ݬլݬ~ݬ^5R-P\\b\P\\^ZWW TPФ(RR, RSR(cPФ(YФ0[Y[1iXXRRRBgR X_1YUU[:eSSRRRBgRS_!UU0eRR\\\Lg\R_U,Ф(SSSU~SP ֤(XPU(PV Ф \/P\Pl ФlVФ(Ф, Ф0\ S2RSR,Ф,(2 R(R01PYRY(RSS[1cRR\\P@g\R_S,XP@gSPSlPR# Ф0,XPR"R'PS\lR\Q8P\lPPR(P$PP\\l\QP\lPPRP\QQScSSS01YФ0,XPդ+ФRТS Т(Т ,Т0bФ bR 1PФRݢ P$1Ф$0Ф0,Ф,(Ф(UФR֢eSSRRRBgUeSS\\\LgS$!RRRBg  U~ 1Ф$Rl-i&neb#  U~1QФ$RR(RRP0Ф(,12PФRѢ8z1USݢݢʏS/c+SP P@c @cSʤUʫx ФRТ8ФRbݢ 4ݢ"RФSdRSRPУRУSRS]DD(DRDRP0Ф0,17P^-VWoU<d~P<d@ݬlPQQPQ BP<R@TRPRSQT>ݬ.PRR ,R#RTݬ PRR  RT <Pd@@<P<@Dgݏ<@SSdT1\^iRЬP Т TPTd ТdЬSSТ(Т, Т0T Q2PQP,Т,(2 P(P0^TRݬݬ]DD(DSD&SP0Т0, ^Z^V/X$YW$m((0Ч0,ЬRbTTPPSChPRbTTPPP@hT#Rb PRbRR[[TЬQaSSPPRBhPS_SQaSSPPP@hPS_dQQRbUUPPSChPRbUUPPP@hU#Rb PRbRDSc1c[P1ݬPQsjPѣP#bQTRЧPݠݠƏiR+b'RP P@b @bRƤiTƫijSc1doS[RЧPݠݠƏiUR+b'R8P P@b @bRƤi&Sƫi=<^MTURТPݠݠďeЬS,c(SP P@c @cݬĤeݬīe; |^SURïVЬTТPݠݠÏeRT+d'T5P P@d @dTäe#Vëݥ7 P^EUVЬP`SSRRRBfRS_LPXXTPQaSSRRRBfRS_SQaSSPPP@fPS_dQ PſP(PЬScTTRRRBfPScTTPPP@fT#Sc PScSSW1ToT#jT"T'RЬP`SPR5P`QQS(Q$PQ\P`PRPP`QQSQPRRP֬TT#ЬRRRRBf׬ЬPPPP@f딼W~XK P^V UЬTdRRPPP@ePR_LTWWSTRbQQPPP@ePQ_QRbQQPPP@ePQ_cR P$PЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQP`9P~Wp P^T S XUݬVVNPfTPЬQaRRPPP@cQaRRPPP@cR#Qa PQaQP`pPV4P?PičWVRХPݠݠďh R+b'R P P@b @bRĤh Wīh 8 PP^W UTSSPPP@eǙPSP0PV֬SSPPP@e" VQSPPQ0QV֬SSPPP@eЬQaRRPPP@ePQaRRPPP@eR#Qa PQaQRRPPP@eP R_R"ݬSSψPc  VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1`ǯPSЬQaRRPPP@eQaRRPPP@eR#Qa PQaQP`PФPVSФPݠ ФRS PФPРQРPQP]D D(DRD RP0Ф0,P^ݬ^ݬ^W VGR8ЬUeSSPPP@fPS_IUXXTUScQQPPP@fPQ_QScQQPPP@fPQ_dSPЬQaSSPPP@fPQaSSPPP@fS#Qa PQaQP`PX~XϰSPS̬S PP|^ SVKRТP8"PЬP`i3UPTТPݠݠÏfuT+d'TXP P@d @dTäfFUëf7[CP ^aSRТP8XPЬP` Pj8P^!YWcTФRݢ P$PU1ZPФP֠Ф$Pl.i'n e`# PPE1QPeRRPPP@gUeRRPPP@gR$1%PPP@g  1U~PUUVVSURbQQPPP@gPQ_QRbQQPPP@gPQ_cRXXPXfif8|~1ɏVjP X1ɔVjPѬlɚVjP_h XɟYn8լ?ФPРQРPQP]DD(DRDRP0Ф0,ФPݠ P$PU1Y^RQQPPP@bP֬QQPPP@bQ#֬ P֬P^R֬QQPPP@b֬QQPPP@bQrQR-֬PPP@bP֬PPP@bPЬPQ.*֬QQPPP@bP֬QQPPP@bQeQE9ЬQPP+P-Q֬PPP@b֬PPP@bP^ЬP`R֬QQR(Q$Q\ ֬ЬP֬QQRQЬP^RQQPPP@bPQ_'ЬP֬Q`֬QQPPP@bPߑQ_ٔP<^9UЬRb"DЬTRScQQRRRBeRQ_QScQQPPP@ePQ_dSPЬRbTRS6RbPPT(P$PP\RbRSPRbPPTPRSSTd"TP֬ѬT.PЬP֬ЬRb``\ЬQR֬ѬTՔTP^uWZլݬPլPSXެUSe T%XQCdPP2PPPQXSSeQXPЏSSSPSQPQ{SPPQQYI4VfRoS2PPcXc ݬ,PEլ bfRKPѬ & Q2PPQ~ݬ cP ݬ3RPbVfRѬ լ PݬPUݬ PT URTRRR4PSUT ݬ ݬ PPU~ԣI4ccRSSI4SP@@DTLtl< tL||, t 0 8 J @VAXCRTL CMA$TIS_SHRLIBRTLMTHRTLJJJJ TMAIN mainexecute 0report$Trmfiles$ xusage5   y UTILtcalloc-trealloc xround2! 2  TLOCAL TRANS trans 0trans1̐ writecheck $ h TCODEcodegentraverse binopT Hunopa unopb setloctemitlab, emit, ̫emitl0 emitn0 ,emits0 \alclab       TLEX tgetoprD yylexgetident4findres ȸbufcmpL getnumTh getstringT ctlesc! octescW 8hexesc setlineno setfilenmnextchar$yyerrorAhmapterm tfatalt hnfatalltsyserrT (quitg quitf` 3 t   LNKLISTaddinvkalclfile8addlfile^ 6 TPARSE xfree(yyparse7 k  "  zv VMS.BCKA @ [V9.BINARY-BIN]ICONT.EXE;1 TSYM`loc_initinstall putlocputglob 0putlitllookup5<glookup5tclookup@klookup4 alclocX@alcglob\ alclit\ lout?8constout routo gout / `O4 TMEMtmallocX tminit tmfree m 6 TREE Ltree1 `tree2, tree34 tree48 tree5< 4tree6@t buildarrayTint_leaf4 c_str_leaf4 i_str_leaf6 LЯ LINK ilink lwarn` lfatal\ tsetexe 5f  !Ox LGLOB|readglobscanrefs|scanfileH referenceJ 6|  Ҹ( LCODEgencode setfilel lemitp plemitl lemitnx lemitrxlemitin8lemitintx lemiteven4lemitcon lemitprocOD  gentables intoutl\wordoutloutblock{D flushcodeKclearlab* backpatch 6 ݧ          ( f LLEX tgetopc| getid8 (getstrgetrest getdec lgetoct getintgetreald 8getlab H getstrlit hnewlineJ 5t#  LMEM linitdalsolinkgetlfile alclfile( Hlmfree? F5 LSYM instid_putident4 !lexeql3P!alcident p!locinit+!putlocalx# putglobal\$putconst%putfieldt&glocate5&flocate5& alcglobal`T'alcfheadN'alcfrec 'blocateG -5   2 OPCODE LONG ( longwriteo R  ( GETOPT |(getopt |(" ALLOC )salloc[ )allocJ )FILEPART(*pathfind,pathelemHL,tryfileq ,fparse-makenameL .smatch} (*  STRTBL.init_str1. free_stblD/ init_sbuf<>=>><<=<<~==-%*-~===\/+=>=><=<~=+^?<-^<->[:]*[]:=:=...++.No interpreter file supplied.icx.ICXicode file name too long.icxrbrbcannot open interpreter fileTried to read %ld bytes of code, got %ld bad icode fileI9.0.00/32icode version mismatch in %s icode version: %s expected version: %s I9.0.00/32cannot runNOERRBUFTRACECOEXPSIZESTRSIZEHEAPSIZEBLOCKSIZEBLKSIZESTATSIZESTATINCRMSTKSIZEQLSIZEMAXMEMICONCORE: =environment variable out of rangeenvironment variable out of rangeenvironment variable not numericerror in startup code %s error in startup code %s: %s System error in startup code at line %ld in %s %s Termination dump: co-expression #%ld (%ld) call to 'err' &errout&input&output abcdefghijklmnopqrstuvwxyzrABCDEFGHIJKLMNOPQRSTUVWXYZunimplemented opcode: %ld (0x%08x) interp: termination with inactive generators.%02d:%02d:%02d%04d/%02d/%02dpmam%s, %s %d, %d %d:%02d %sVMSVMSinterpretedinterpretedASCIIASCIIco-expressionsco-expressionsenvironment variablesenvironment variablesexternal functionsexternal functionsfixed regionsfixed regionskeyboard functionskeyboard functionslarge integerslarge integersmultiple regionsmultiple regionspipespipesstring invocationstring invocationsystem functionsystem functiongraphicsgraphicsX WindowsX Windows?Icon Interpreter Version 9.0. July 16, 1994/-%*-++^:=<-<->:=:|||||=>=><=<~===~==>>=>><<=<<===~===^*=......[...]!?set reference out of bounds in randomtable reference out of bounds in randomlist reference out of bounds in random[:][]~--**++\/.&deallocation botchanycmp: unknown datatype.order: unknown datatype. ???? from line %d in %s&subject&pos&progname&windowname: unknown event keyword variable&random&trace&dump&errorname: unknown integer keyword variable[%ld:%ld]name: unreferencable static variablename: cannot determine variable nameL[%ld]%s.%sname: invalid structure reference; co-expression_%ld : @ returned to failed to co-expression_%ld %-13s: %4d : to by ? ..} @ ! {create ..} . field%slimit counter: [ ... ] from line %d in %s returned failed suspended resumed; co-expression_%ld : @ co-expression_%ld ; co-expression_%ld returned to co-expression_%ld ; co-expression_%ld failed to co-expression_%ld local identifiers: = = = global identifiers: = _NL:_NL:rawrw-%%can't open %sSYS$COMMANDSYS$COMMANDkillkillinteger(~10^%ld)illegal objecti: VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17llegal objectlarge integerreal numbercsetfileprocedurerecordlistlist elementsetset elementtabletable elementtable element trapped variablehash blocksubstring trapped variablerefresh blockco-expressionexternal blockinteger keyword variable&pos&subjectillegal objectillegal objectillegal objecticode file too largeinsufficient memory for icodeinsufficient memory for string regioninsufficient memory for block regioninsufficient memory for qualifier list&error&pos&progname&random&subject&trace&dump&window...&window = &subject = &pos = &random = &trace = &dump = &error = &subject[%ld][%ld+:%ld] = co-expression_%ld(%ld)record _%ld()(%ld)set_%ld(%ld)table_%ld(%ld)procedurefunctionrecord constructor%s &input&output&erroutwindow(file(...%s%ld&null(variable = external(%d)%soutimage: unknown type\"\'\\\b\d\e\f\n\r\t\v\x%02xlist_%ld(%ld)list_%ld = [...,empty activator stack ?bad ipc/file name table \"\'\\\b\d\e\f\n\r\t\v\x%02x""_%ld(%ld)co-expression_%ld(%ld)record set_%ld(%ld)table_%ld(%ld)list_%ld(%ld)procedure function record constructor &input&output&erroutwindow(file()''integer(~10^%ld)&nullexternal(%ld)&letters&lcase&ucase&digits&cset&asciiICON_HOSTSYS$NODEVAX/VMSblackwhiteRGBi:.5/.5/.5fixedfixedfixedmonolucidatypewritertypewritercouriersanshelveticaseriftimes*mediumdemiboldbolddemilight*ior*narrowcondensednormalwideextended*p*-*-%s-%s-%s-%s-*-*-*-*-*-%s-*-*-*%.*s%d%ssansserifserifsansrmediumdeminormaliso88590adobe ______display=display=reversehiddenrootnormaliconicmaximalhidden???iconicnormalmaximalhiddeniconwindowroot%d,%dsolidmaskedstippledpatternedtexturedopaquestippledopaquepatternedsolidonoffdasheddoubledashstriped%d,%d,%d%d,%d,%dDISPLAY%s%s%d,%d,%d%s%s%sstripeddashedsolid%s%sreverse%srootwindowicon???%d,%d,%dunknown%ld%d,%d,%d%d,%d,%dwhiteblack%d,%d,%d%d,%d,%dblackcheckersdarkgraydiagonalgrainsgraygridhorizontallightgrayscalestrellisverticalverydarkverylightwaveswhite.xbm.XBM.xpm.XPM.xpm.Z.xbm.xpm.xpm.ZrXPM%d%d%d+%d+%d%d+%d+%d%dx%d%d,%d,%d%c%1x%1x%1x%c%2x%2x%2x%c%3x%3x%3x%c%4x%4x%4x%cverypaledeeprGIFwbGIF87a%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c0123456kxw@abMcdZ0$%&L*+-g/?@}}~>]|+V%c%d%cboldcondenseddemidemiboldextendeditaliclightmediummononarrownormalobliqueproportionalromansansserifwide%d%c%s%d,onoffonONOn%s,%d%d,%s%lf%conoffonONOnonoffonONOnonONOn%d,%d%stexturedmaskedsolid%d,%d%soffon%soffon%soffon%dx%d+%d+%d%dx%d%s%s%sascentbgcanvasceolcliphclipwclipxclipycolcolumnscursordepthdescentdisplaydisplayheightdisplaywidthdrawopdxdyechofgfheightfillstylefontfwidthgammageometryheighticoniciconimageiconlabeliconposimagelabelleadinglineslinestylelinewidthpatternpointerpointercolpointerrowpointerxpointeryposposxposyreverserowrowssizevisualwidthwindowlabelxySundayMondayTuesdayWednesdayThursdayFridaySaturdayJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember%.3s %.3s%3d %.2d:%.2d:%.2d %d wandandInvertedandReverseclearcopycopyInvertedequivinvertnandnoopnorororInvertedorReversesetxorX cursorarrowbased arrow downbased arrow upboatbogositybottom left cornerbottom right cornerbottom sidebottom teebox spiralcenter ptrcircleclockcoffee mugcrosscross reversecrosshairdiamond crossdotdotboxdouble arrowdraft largedraft smalldraped boxexchangefleurgobblergumbyhand1hand2hearticoniron crossleft ptrleft sideleft teeleftbuttonll anglelr anglemanmiddlebuttonmousepencilpirateplusquestion arrowright ptrright sideright teerightbuttonrtl logosailboatsb down arrowsb h double arrowsb left arrowsb right arrowsb up arrowsb v double arrowshuttlesizingspiderspraycanstartargettcrosstop left arrowtop left cornertop right cornertop sidetop teetrekul angleumbrellaur anglewatchxtermnum glyphssalloc(%d): out of memory alloc(%d): out of memory $@$$$$P$$$$x$P$$4$$$H$x$$$$l$$$$,$$0$H$`$x$$$ $$$$L$$|$$$$ $ $T$tcan't read interpreter file headercan't read MS-DOS .exe header -ATXK4@>IA!hblackblackishbluebluish2dbrownbrownishdcyancyanish2dgraygrayish2greengreenishx2dgreygreyish2magentamagentaiUG!۬7>sxo8?dѪ ߶R kUe덁Lj~B3\M)ktQk:[p*K!0^FK~u4 ='?l6]|u, {׻ˬ1PbWCWO )7:-A LU,%+,KjnRŇ)&'QO<:3RK4cY*2w4vHvߞ/տʳK H0UetB_S] d6zTbYǺ{`x-fHy<ъ2f."lrɸs'Q(po5@( @|!dթ۹x23_t14L\us+IBƦ9/v~s*khĮ{CM') _oxX!Q7N43A8A#~ٖv y ֗l&rx)U}ˑЉl#Q G|_}WT#:A5F/,X`_.̮7a@p(cJ ئW l&`3zzAX\nY_;&]p1w l*d,h {BOô̝MQ0߃FHݫk2 B ّ;[GN6Dq &\,by4!fg D ùt:f[UI0 (zw; 7vn~;_-* `ϹJFtggP#|E>נ#.SR B3 ^v2%0C` E7P&a!$ȃ$-^~VhWn?"t t یi$'c3]59~y$oYȩ;Ie t۳=F{l+lRp{&@ՄʨU8O4 s)?W)NIg 8?KGB:]vU-8@1q"m%1@uStkgf$&jkt60H3^_K!MR 8 yiOl,<Ҟ5Cz9qo 9qQi}= )HD9wx #4.9.T5@oOO5׋@9r͡'y>֦° r ѷ1ƻmS{|~-F;C6#yUAߋ.>"c}tR+`b\E$Bu,!x`Xqk=7ZH{W-nMY.*OqnQ #{B/dy]r@Ϯok(S5R)}ySe])JA}LTGG2?y*ȟ Tu[C1(GݧI$[pdxhɬk1{#b C˂PRjvid֙ê#0~q(}n0+~e-&!"׉>F۴Hz& -T`P^2S:a%r#Q:ߊ@{ԏ0\Yû?يRecrA61o=&jA =9" I|Y:͕zR>5p{KD ìr'SB|5 7Aii玞{|D~0pFÃ=r]Qf"|44ďam5jzTU9Gw~(6vחNzb,Iy =yzNw Z'rE72!&(3X%db#̷|y7 86򊣾L#[˧I}cuK؉7B ClX#F1*w^뾘": nl,>.& fuzs4u[dY/`P}Q'<.QjljH6Yݼ> QP._ 9^28+:R O EfZDl1NWη:k,źmP=nei Kx*0UszTS;c&8 $,Qᫎ1ˊ gSǼBxD9Zid@Tw= Yj\3#aD}u^e`n!X6#x% QaL%5}z? MlqX8TOe~s3h:ܿ65P}pʼnKxH| b33m!ZE,uI/꤭T6T6%ngP1B30YnFJ4":xMZdp~3"6ԁքףrym/xL3eU͎AcX6&զ϶D^Y_]FRKڶMkN , [P?}*'@.2fjhvcv&ud7/r7H_Y?IZ|^[ޥ13[O0+?ž3|MH )61R4{j7y %_ m73tvmM=Zc^8H*g\U6 ecp?Y 'V[9B)]5EJJ6A5okBcCӻ60!dF+.&@C۟ZRs+W͆(k; ,xSL°ȼ\ ],bh&4i6}XcR?PEg@6 .4.n D3GY* ,VHJzgg..Jv cKsXmZSh)CcpA]~ek>ii6c!)+2WA팀3Fpv,uz_+d9LxA҉þotE@8wwɐaK6Mp];}x['?W[oK%g33[ѽ8-}l9ՏpFP&Ą0I끜3g=/x@(0y|TL_|Ҭl u^&X vl(2iGx-dr6{Z-{ş1[' =u`ta#-8YY'o5N]w35" z04f/{hкB(q=lV꺈ŒzM\7n71ZpBOR+12b$A90>lŖxQ׷&PI}!}K(eWy>o,.eqɉu*bub]`%q㾚zpQ3m賙ztH - h[ߍJqn)('! ] j#,3DpSʊْ}W\{ľLS`tLLusG 00Gk`V}=c$ξ-ORS}tOm2xG?z[Sߤ55R{C+wCQ4k1J M&>@H.2* c,Uu|w/NЦ }=Te!a:ĵ< )"8{eOxWi= *I>amX[zN'ߌ&]b`4[BfA6xڛn˓ r_U3gwݟR @YX*o9&*ɥP4#5rw~i3>*[@qN%>GTg )X1ɢwvtoH),|"+!p[y "ݱ8 ldBT1cI=R qPfY z=븴ZGJ.OLmYƁ3:$ĢU6X[ J ]kM#Hxt{>q쩯?m4eZd4j,8Ɂ)Sf]ЭAА$5ׯ%a 1k&iOGm WK%,Ft- #? O5!Yn@JVax<ι^q1ӣ'Y])hB ,{NA^ŤdKZJoEgK|VR:ˏ mLиv%B'Lg;JJ_0W Mh,aqdbY=ЎOkVeK}Nܓܷlm2nz4jf;ZOÜ?7x|tivbv7ejҙaysvџ=1r`5Mw*.2-ڣ| ny')"R}@=s.7K4)$( Wܣ4~vGLR@szS&@uӑy8_ ʅf}EQO8}lzb[[JJSsGvY1 􍷰}mP69jI)T;Je >ñG2EPIv[4Ph-V1ahۊOd-t#6j~4mS>]%O C~!lN{~xTz6}ܿ3'o)U3 05C(*2<:DV^F2?yMrj[Jgd}6 0a .#20\> 5V"|ըDP\{E6cY;ў1EӇWY놭v /\Mu:>]$j~4ѕN;rdN*e8k>h5g>)ݻձ+;VqgJƫQԂcf )~U>q7G+T׺GM,~8md$+U/KpQʧe uV٠Ʈ5+ja*QͤK~Y"6]#BR Cչ#p-ZGICwk6vxg e}UwTr C+{t0Y顖'}6<'~gGk)䩿IӠG&)ܺn$H4vwor˞6omդlpsYΣZK9RM'gG%ν~ʤf` u16 xF UʥŭR?N3ӠJ39, 0E{އuG2p3ٙs.(鰁]BB*-v1=K=r>C>"NWLav%j&t"]"!{+Mï2=T sh!lN:Vn~ǺDJ4 QCȼDS4@K !@0̘M~ 6qI+'3_qqU7n )a]'Ѻ-! ]CvZ,sa$ėԠV%>wvi - tS>Ru]c\sBg6%=ge+տi48VOg VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17Ĩsh,2dorangeorangish2dpinkpinkishYKdpurplepurplish2dredreddish2dvioletvioletishKdwhitewhitishdyellowyellowish<2ddarkdeeplightdmedium2paledmoderate2strongKvividdweakY%a%e%m%{%%00wwwWWWJJ00vvvWWWJJsttvvVVVVJsttuuVVVVIsttuuVVVIISSTTTUUUIISSTTTUUUUISSTTTUUUUHFFTTGGUUHHFFFGGGGHHH00xxxWWWJJ!11vvWWWJJr11vvVVVjjrrtuuVVVjjrrtuuVVVIISSTTTUUUIISSTTTUUUiiSSTTTUUUiiFFffGGggHHFFffGGggHHnzxxxXXXXJ!11xxXXXjjp1122)Vjjjrr222)Vjjjrr222>>>jjRR--//>>iiRRRT//'iiiRRff//ggiiRffffggghhFffffggghhnzzyyXXXXKoozyyXXXjjpp222)Xjjjqq222))jjjqq222>>>jjRR--//>>iiRRR-//''iiRRff//'giiRffffggghhEffffggghhnzzyyXXXKKoozyyXXXKK???22]]]jjqq222]]]jjqq2233>>jjRR::33>>iiRR:::/''iiRR:::/''iiEEfffggghhEEfffggghhNNZZZYYYKKOOZZZYYYKK???@=]]]kkPP@@=]]]kkPP%%%3]]kkQQ||3344((QQ:::444((QQ:::444<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8&&&&&'' '' ' ' &' ,' 4'<'J'W'^'a'd'i'l't'~''''''''' '!'8'"'#'$'%'&'+(' ((() (*)(,-(-2(.7(/?(0C(1H(2M(3T(4Z(5f(6h(7$h $\ $$$+$H$  $@`$ $ $xL$$ 1$ n$L $$p$ؽ$ $($4$x9$$$, $?$ E$P<$N$آ" $Y$X $ b$0 $x$h$ܿ$>$' $P$< i$ q$ |$ $L$ $" $' $* $D. $ $!$$l1 $4 H $n$2$$̜ $4$dl$|6$: $< $? $P$$XA$C $lT $8o$$$ $8E#$G*$] $ԩk $Xp ${$X $xA$tb $v $$f $ $Hw$Ps$'$$4$$$H$x$m$(-2<CHUYeky.$p$ܟ $H1$U$,$Z$$R$m$T$$V$h $lX$$$I7$H$,J$vZ VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17`B-Z$0x$И $Hz$`}$x$$$$} $J @$,L M$M c$On$DQv$R~$ \$s$ $^$ $x$$$U $4V$$c$$wWJj()xXKk[]yYLl{}zZMm^=kbgcrmywx@ABCDEFGHIJKLMNOPQRSTUVWXYZabcd0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}$%&*+-/?@N)))))) ) ))) ***&*,*7*=* K*"U*$c*&g*(n**{*,*.*0*2*4*6*8*:*<*>*@*B*D*F*H*J+L +N+P+R'+T-+V4+X;+Z@+\O+^Y+`d+bn+dz+f+h+j+l+n+p+r+t+v+x+z+|,~ ,,,(,8,I,R,Z,_,h,q,z,,, )$)0);)A)F) S) Y) `)e)j)n)q) |) ))efghi jk8lHmVnnopqrstu1vHw_xlyz{|}~ ?f|  E S  ' Q | - . / 0 18 2_ 3 4 _   X" 5   8 8 %%%% %% %%%% %@&@ && &%&+&TWPQVUSR,yxؠh(ll @\ԕ4Phԙx00XHl8(`h<0P̝h 4'VDEPFHIJTLPQRR S8SdSSSUe  ݏiݏߦberhixeb\Wݏ^1RЬ$ЬЏ2|~%^Rp~gPЬPЏb|~^ؼ P|^߭ЬRP ЭQQSPQSSЏbPPb諾ТPԠPaP@pSrSUPpSUpU~#gPЏbբ<3~)PPP}bP2P^ЬRP}bP2P^ЬR6P}bP2P^ЬRRP}bP2P^ЬRVP}bPP}bPP ^ЬRѢ}bPP1߭Pe~PЭRRR~bPխЬRPSݭЬRsPSSPЬRSЏbPPIA!hIA!h^ЬR>Pf~0PpPGЬRpP~dPЏbբ<3~P2P^ЬRPf~P=pPЬRpP~udPЏbբ<3~{P2P^ЬRVPf~HPp~pPS"~PЬRpS~cPЏbբ<3~PP^ЬRPf~PpPqPqPpP~~lPp~6pPS!~aPЬRpS~+cPЏbբ<3~1PP^ЬRPf~PpPqPqPpP~~PYp~pPSE!~PЬRpS~sbPЏbբ<3~yPP^ЬRVPf~HPp~ pPS"~PЬRpS~aPЏbբ<3~PP^ЬRPf~Psp~~|P!p~jpPS !~qPЬRpS~;aPЏbբ<3~APP^ЬRPf~PeϗPf4DPЬRpP~`PЏbբ<3~P2P^ЬRPf~Pe4DPfPЬRpP~E`PЏbբ<3~KP2P^ЬR&Pf~PЬRѢ;p~pP~_PЏbբ<3~PPЬRPf~PЬRp~p~YpP~c_PЏbբ<3~iPP ^SЬR?Pf~1Psp~~PЬRѢ;p~pP~^PЏbբ<3~PP蟢Pf~Pqp~~pPqcp~[pPpcp~HgPЬRp~3^PЏbբ<3~9PP^ЬPѠj~PЬPР QС Џ2P ^լg~P߭ݬЬPPSЭR"SRPcRPS}cP2P^߭ЬRPe~TPЭR RR~PЬRˏP@̞2P ^߭ЬRPe~P߭ЬRPe~Pխݭ~NPЭRRR~2Pݭݭ1P }7PP4^!Z"[}k}k}k}k}kj̞jЬS }cЭjPˏPP3b1P?PSЬRТ cЭRТ RТ VRV=\PW|~ЭjPUЭRTVRVRP}VRVRЬRWЏbЭjPЬSУ Rݢcr P|~@ЭjPЭjPЬRТ ЭRݢ ~  P|~ЭjPЭTЭSУЭTЭSУ ЭTЭS}88RЭSB.ЭSBSݣSЭSBRR  ЭSBWSЭRGc1\_YPGVvRbSЭRFcխYiPX|~GЭjPR(hЭS ЭRXFXЭRТRXbSЭRТcխVWW SЭRGc1fЭSգ RѣR SYЬRЭЏ bЭjPЬSУ R~c P|~ЭjPЭjPЬR}bЭjPЬR{~NЭj2P|^gVRTU߭eЬRPe~PЬPѠЏEѠi~P<~PЬQСPРS~PЭRR~PReeФPݠݠߦ'S5S4Sݭ/ }P<1~P}P^eQFޡKB};E}P<^UTRe7SxRP@dP``PcS PRReP ^ЬRJPe~TPЬR#Pe~-PЬSˏRRˏRR)c֦P |~PPң RRЏ2P ^ЬRPe~PЬRoPe~yPЬSˏRRˏRR)cﮮP |~4PPɣ Џc2P ^ЬRPe~PЬRPe~PЬSˏRRˏRR)c華P |~PPͣ Џc2P ^ЬR6Pe~@PЬSˏRR5ЏcP |~PPң ЏcP^ЬP`P |~PP^ЬRPe~PЬR[Pe~ePЬQˏPPe~APЬQСSˏPPS С T>S:SPxPPTP-ЬP`P |~PPS ЬPԠЏ`PS ЬPՠ RRRЏ`PSЬQxSTЏaPЬRբ SQQ PQPTЏbPЬQSSS RTPSRPPPЏ2P^ЬRPg~PЬRѢ~PЬP RR2RЏ`2P^ЬQˏ/PPo~P<~PЬP`UdP |~kP2P^߭ЬRPe~8Pխݭ~PѬݭ PЬRݭ2P ^߭ЬRPe~P߭ЬRPe~PЭRRTЏS/PRЏTRSPRR~PRЭЏbRPѭTѭS=_@ЬRR%Џb~P^YZ"[}j}j}j}j}j}jiiЬRˏ_RR1ЬRˏPP{B16?P߭ЬRUPe~?ЭiPЭPP1?PЬRТ RТVVSxSS8SVRRS,VRRS~[VP|~ЭiPSЬRТ cRVMPb|~ЭiPVVNP|~ЭiPЭRЭ Т V1x|TSЭREc1TMXENWEkS1PЭRC1RhPb|~ЭiPgP|~ЭiPЭPЭР ЭRТ PЭR} ЭRТ PЭR}$TPTxPPЭRТ R@PЏ`ЭܠЭRТ1aS1JUU SЭREc1%ѭVЭRТ R 1VVЭRТ R17ЬRТ STRSbRT LPb|~ЭiPTTLP|~ЭiPЭRЭТ T1ЭUХ URSVЭUCfKPCkP,ЭU@ЭU} ЭU}ЭUХPSS VЭUCfѭ!T~ЭRТ R4.T VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17NZ7T~ЭRТ Rݭ~ЭiPЬSЭԣЏcЭiPЬRТ RТTRTJPb|~ЭiPTTKPS|~ЭiPЭRSS ЬRТ WT`ЭUХ URSCQ/PCkP@U } ХUPSS CQZUTЭRТ RЬSЭ̣ЏcЭiPЬSУ SУ SУ RSRIPc|~ЭiPRRJPT|~ЭiPЭSTT ЬSУ URAЭSУ SQPRxPSCS}cPPRTRЭSУ S ЬSЭ̣ЏcЭiPЬSУ RТTT~cP|~ ЭiP'TTЬRТRТ RЭiPЬRs~Э2P^ЬPРPР PЬPРPР PS^ЬPРPР P$ЬPРPР P$S^}S^ЬPЬPaS^ZYsX}i螭iЬRˏ_RR1ЬRˏPP@S1?P߭ЬRPe~ЭiPխݭ~0ЭiPЬRТ RТTRTcGPb|~YЭiPTT8HPS|~6ЭiPЭRSS ЬRТ WTbЭUХ URSCQ-ChP@U } ХUPSS CQЭj TЭRТ RlЬSЭЏcЭiP߭ЬRPe~wЭiPխݭ~ЭiPЬSУ SУ SУ RSR3FPc|~)ЭiPRRGPT|~ЭiPЭSTT ЬSУ UREЭSУ SQPRxPSCS}cPPRЭjRЭSУ SYЬSЭЏcЭiP߭ЬRzPe~dЭiPխݭ~ЭiPЬSУ RТTT~cP|~ЭiPЭj?TЬRТRТ RЭiPЬR}~Э2P^ЬTˏdRЬSˏcPRPIRR?TJPRSARP(PPPS'PTPOPݬqO<^UЬTd<ФSУ Rݢ P1У RP {PxPP@UnddФSݣ>WPTTDT>У QRPTPRС QRPTPRPPTT¡TxTRBUUPP^ASTЬRęݢWPbPˏPP^CC( Nyby}yyyyy31PP?PЬRĠݢPbPЬSУ RТ R}cPЬRĮݢPbPЬRIJݢPbPЬRĸݢPbPЬRĽݢ|PbPЬSУ RݣXPcPЬRݢ=PbPЬRݢ"PbPЬRݢPbPЬRݢPbPЬRݢPbPЬR%ˏPPݢPbP{~2P^ЬRPg~dPЬRbݢ PPP<^AUʲS߭ЬR`Pe~PУRRTRQ ePQPPЭPPRPЬQRPPЭaQ8PeRTRc~PTP ^%S߭ЬRPe~aPgݭPѭPЬPЭЏ`2P|^-VﶱU߭ЬRLPe~PfݭbPѭPХSSTЭЭRSR RSSTSRЬQSPPЭaQPfPTPe~rPTP^ЬR Pg~:P߭ЬR'Pe~PЬRPg~Pխݭ~qPЬSգ}ғѭíRRxRR RЭcPݭCPW |~xPЬSУ[УVUWRWUXRX/[VTTPPVWUSRSPprPV WUQRQRXWQWUZQZ4[VYPVPPY!WURQR[VTPPT WURQRQZЬVЦXЭYYX%WPXT TUTYSSXSʏSTSR$PWUTXSSTYSSXSʏSSTPЦ RXYYXXSXSPXSXSЬRWЭbP4^WީXZ}h}h}hg̞gЬRPg~ ЭgPYެVfRx~:FTRTR1fUxTRPB`B`PЬPPB`e~ЭgPT@xTSfPQCRTPxPP@Pb`ЬPRCb~iЭgPTPTP1vЬRݢJAP|~3ЭgPЬSУcѬ KPPe~ЭgPЬRѢ~ЭgPЬRPxPPT@dUS Т Тѭح1ЭR֭ЭP֭ؐ`bbTTPPA--1P?PSЬP1PSЬP~PY׭S߭߭U߭߭SRR$R @P|~ЭgPRS*PЭP֭ `SSTTP@jPhPSѭح1YЭgPЬS|Pà RR2У }cЭgP^[ZЬR(Pg~BPYURUR1ެWVxURPB`B`PЬPPB`e~PUP |~PЬSУcѬBP?Pe~IPЬRѢ~,PЬRUxUUPE`V WТ TТSTW1}USRSbbXXPP>fRFFRFFFFFFFFFFFFFFFFFFz1:?P׭ЬP1 ЬP1߭߭V߭߭e1RTWd RTTWd íRPP1Э߭߭V߭߭ePѭP,Э߭߭V߭߭eѭR ֭ЭPSSѭR"Y Э߭߭V߭߭eѭRЭP֭PRPSPS `ЭP֭PRRPXXP@jPhP֭TW1Y ЬRâSbHTä SRRkS PЬS-Tä RRkУ }c2P|^ެRвPެ UPe<Ѽ5eTѲTвPü вPРѲT вPѼмVV  ЬU޼SecTüeRzRP{cPQPPTe^ЬRhPg~P߭ЬRoPe~YPЬRdPg~(Pխݭ~PЬRբ}ѭ Т ЭbPݭ:PT |~PЬPРWРSTRRT&WSVVPPSRTPprPSRTRTTQЬRТUТ PUЭUURUR URURЬRTЭbP^WXdUЬRPg~PЬRѢ}Ѣ}=hѨg ѧ1ЬR}h}gPg~PЬR^Pg~xPЬRѢ~\PЬTФSRPTPdTPQެVfTQЦTAcPP2PPAb@eQQЬRբ }bPЬSУRRcR8P |~PЬSУ QУPRSRSPTPSS2SSCedRSRS2P^ЬRRPg~lP߭ЬRPe~EPխݭ~PЬRТTխT }bPŭTVVݭ~PV7PS |~PЬUSVeХ RTVb~S7!׭TWPRQWPP׭P ^ЬRFPg~`PЬRТSSݢ P7P |~9PЬQSaСRSRSPRPPbQ`PSPQcRP혏P^ЬRPg~P߭ЬRPe~PЬR&fPg~Pխݭ~PЬRբ}rѭ SíSЭbPݭ56PU |~PЬSУXУVURUSRS:XVWPVPPW"USRSXVTPPT UQRQUSRSЭTTUQЬRТS SPSTTSSRSRPpqSRSRЬRUЭbP,^ЬRBPg~\PЬRoPh~,PެWgRТX XVVV fTTPPUU QТRSTRR2RPxPPxPPPSUQcRRITVXV 9fRRPPSS UgPРPQRPP2PPxPPxPPPQSUaPPЬPР X`P<4^UЬRѢ}pѢ=Х6Pg~-PЬRѢЬRѢB߭DPݢݭkPѭPe~PЬSѣ  [߭ P7ݣݭPѭPѭ#ЭRЭRP e~ZPЬRFPh~0PѭPSЬRCSSPPQQ TТ RRSPP2PPxPPxPPPRQTbPPPЬPЏ2P|^WZЬRѢ }ﲠ Ѣ(?Ъ8P SP g~mPЬRѢ(ЬRѢ(B߭(k> VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17iPݢ ݭPѭP(e~ PЬSѣ0  [߭0+P7ݣ ݭRPѭPѭ#ЭRЭRP0e~PЬR|Ph~iPЬR̟Ph~9PЬRXPh~ PWѭ1ެYXP@$UWSUPPSS TiQС PRUPP2PPxPPxPPPRSTbPPЭЏaQPUPPTT ViQСPRUPP2PPxPPxPSSRTVbPPWСPPSPTV`PPWWP֭ѭ1:2P ^﹜YЬRѢ}Ѣ=Щ6ﷵPg~PЬRѢЬRѢB߭PݢݭPѭPe~oPЬSѣ  [߭ P7ݣݭﶾPѭPѭ#ЭRЭRP e~PЬRエPg~PެVfRТXXWѭWLUХ SRRXTTPTP fPЭЏ`PP֭ѭWP4^WЬRѢ}\Ѣ=Ч6Pg~PЬRѢЬRѢB߭0PݢݭWPѭPe~PЬSѣ  [߭ ׬P7ݣݭPѭPѭ#ЭRЭRP e~FPЬR2Ph~PЭVѭLSP@RRPPTT UУ PQRPP2PPxPPxPPPQTUaPP ֭ѭѭVPЬRЭЏ2P^3TЬRѢ}Ѣ?Ф8P/Pg~IPЬRѢЬRѢB߭`PݢݭPѭPe~PЬSѣ  [߭ P7ݣݭ.PѭPѭ#ЭRЭRP e~vPЬRPg~KPíSЬRSPЬQС SRRСP׭ЬPЏ`P4^WЬRѢ}Ѣ=Ч6Pg~諒PЬRѢЬRѢB߭IPݢݭPѭPe~CPЬSѣ  [߭ cP7ݣݭPѭPѭ#ЭRЭRP e~ҼPЬRᄚPh~屮PѭlެVTP@RˏRSS UФ PQʏRxRPxPPPQSUaPP fPЭЏ`PP֭ѭP ^ЬPˏ_PP1ЬPˏPP P1?PЬTPR߭Rݤ ѭ`RТ`Ф Rע}dPЬTSPS߭Sݤ ^ѭ`RТ`Ф Rע}dPЬRz~\P<^ЬPՠPЬSУ Qա С QQ ԡСUxURBR}bUPPPPסףP|^ЬPѠl~PЬRТ SbVգU@PУ Qա С QQ ԡСTxTRBR}bfTPPPPסףUUP2P|^ЬPѠl~[PЬRТ SbVգU@PУ Qա С QQ ԡСTxTRBR}bfTPPPPסףUUP2P^ﰠT}ﱕd잭dЬPѠ |~ﷹЭdPެScPݠ P;RЭP} bRPЭdݭcPݠ PЭd2P$^ W}}gܞgЬPˏ_PP1pЬPˏPP _1V?PЬPР PR'PU|~ЭgP߭RЬTݭwPVխ?ЭP֠fUfR} }ЭP QQѠQ"ՠ4PU(fR}ЬR}bЭgPЬRТ 蟢ܲPSSQ$PT|~ ЭgP߭SЬRݭխ0PTݭ^ЭR SSѢSբ4Rn TS(ЬR}bЭgPЬRz~ЭgP<^AU}Be螭e߭ЬRUPe~?ЭePЭSSTSݭ~ƸЭePTTRSPb|~ЭePSTPR|~ѶЭePЭQRR PSTxPQAQ}aPPSЬSЭЏcЭeP ^ЬPˏ_PP1ЬPˏPP F{s?PЬTPR߭Rݤ ѭ}dPPЬRﵰPS߭Sݢ ѭ}bPPЬRz~ȵP^ЬPѠl~PЬPР SգPУQա СQQԡ PPP¡PxPRBR}bסףP ^ЬRТPР SѣfMRRR|~RPS$PRR |~|~RPSЬPРRТ RSРRТ РRS RRxRP@P}`R֣ЬPP^aZFMX}[j잭jЬRѢl~aЭjPSެnS [U оR[SUTU1YWRЩ bЭPР Sѣ_ǨRRR|~RgPS(PRR|~۳ЭjP|~RgPSЭRТ RSЭRТ ЭRS RRxRVxTP@kQFP}a`R֣ЭP֠TTU1RЬR}bЭj2P^ LTЬRТPРSѣcǤRRR|~RPS$PRR |~|~RPSЬPРRТRS РRТРRSRR£RxRP@P}`֣ЬPP^mZRKX}gj잭jЬRѢl~mЭjPSެnS [U оR[SUTU1Y!WRЩ bЭPРSѣ_Ǩ RRR|~RgPS(PRR|~ЭjP|~RgPSЭRТRS ЭRТЭRSPP£PxPVxTRBkQFR}ab֣ЭR֢TTU1RЬR}bЭj2P ^)[}*}"ЬSˏ_SS1ЬSˏPP]1?PЬSУ ЭSݣ P|~ʰЭPkPU|~殺ЭePЭSУ 19ZRYXWPVЭSVxЭPVTT TxTQAS߭SjPRRSݭiPQխ3}c RQUݭhkgPU|~ЭPVЭPVЭSУ 1nUu ЬRЭЏ bЭP|~ RPS|~Э\PЬRSЏ bЭAPЬRl~c"2P^|~ PR |~6PЬP}8RЏ `P|^eVЬPѠi~PЬSУ PРUxfffУ RТTT$T<U-ЬP}`PT%ԢUBxPPˏPЏcPUЬPР Qԡ}`P^߭ЬPPP |~?Pݭ ^ЬRﲛPg~PЬRݢ PR8RPSSRPR |~̭PЬPRS`PP^oX0Y}i}`}iЏhhЬR3Pg~MhPЬRPg~hPЬRPg~hPVЬPРSРTRT1PPPA7}}KP&?P VVPVNPVFPV>PV6P1PV*PȏVPЬP~hPRRT1ˏVRVV w PVaV rwˏVRR+V1$RoPb|~ehPR|~@Pb|~>hPRТ URURcެWTxUSRCbRbgRRCbR}ibRCbRbЬRRCbm~˪hPURUR߭~ЬSPT1ѭ xRSBc~ohPhPV9V VЬR~=hP;PTPTT hPPVTPS|~ͩhPV0ФRЏpФRSt ФR}pЄЬRSЏbhP^ōZ.V#BWЏf잭fЬRѢЏﺃ "PѢi~ЭfPЬSУ RТ[Тnn~ЭfPԭˏnXYxjjjծO[<~gGPRR~ЭfPR9~qЭfP[<~gPRRЭfPR <UPRUUTThP|~ ЭfPխR{Pѭѭ =T~hP|~ЭfPݭݭiP|~ɧЭfPTgiPS|~ﬧЭfPխSTR1}Э2P|^͋V6UЏe螭eЬPѠЏɁ`k VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17=x !Ѡi~ ЭeP߭ЬR Pe~ЭePЬQС PРTРRR~ʦЭePխݭ~WЭePݭP|~ЭePԭxfffRPTݭݭDPSS~LЭePS)~.ЭePTݭݭ5PSSЭePSSQyP  QQS }ЭeP^ЬRZPg~ﰥPЬPݠ FPP}X2P^ЬR Pg~`PЬRPg~9PЬPݠݠ PP}ހP^]TЬPѠi~P߭ЬPբP |~ĤPЬPР PРSՠPxdddЬPР PPЭRR~S"PPRSPPЬP}2P ^SЬRÑPg~PxcccЬRݢ PЏbP^=RЬPѠi~ȣPЬPР PРQՠPxbbbЬPР PPQ"PQЬPQЏ2P^ᅦY(X}Ww[VЧZЏhhլ}~hPЧVxiiiZV PV ќZ'fR ~ТhPVݏЬRѢ~hPЧVRլ1nUTxRSPC`P`1RVxiiiZV 6V5PV  fP ~hPVxRQePPAP`PРZZЬPPA`~͡hPxRQePPAP`PРV1PkePPC`aPЬPPC`m~shPZVEwPRRsP|~\ЭgPЬPЭR`ЭgP^oVWլ1xWRЬPSBcP`mBP`PBc~PxWSЬPRCP`PˏPCb~ŕPxWRЬPPBP`PРUWLf ЦPf~PЦPˏPf~ePЦPРUХ SЬT| УU[߭߭߭߭WЬRTUPxPPR@be~PЭ ЭЭЭUW}fPЬQ}aP`^wnYx{XЏЏhhVլ1xVSЬRTCdRbwCRbRCd~PhPxVTЬRSDRbRˏRDc~hPxVSЬRPCRbRТUVVi ЩRi~ՓhPЩRˏRi~ﰓhPЩPРU<PW|~hPХַѬV1xVSЬRTCdRb1CRbRCd~9hPxVTЬRSDRbRˏRDc~hPxVSЬRPCRbRݢP |~͒hPV!UP |~晴hPVTT1ެVfUxTSPC`P`1fPRCbPЬPRCbm~AhPcxTQfPPA`RbARbWbP==3?PhPxTQЬPRAbӑhPTT13ЬREf<~WoP|~hPЏh2P,^9xX}e}ehhnլ1xnSЬRTCdRbuCRbRCd~ЭhPxnTЬRSDRbRˏRDc~ЭhPxnSЬRPCRbRТnivj mjR]j~ЭhPHjRˏR2j~gЭhPjPРѬne~@ЭhPnRR1߭xTЬRSDcY|PRDbe~ЭhPݭݮ PTЭhPT̉PSSTP|~ﳏЭhPЬRTSbЭhPnRzRP{PQPP~xЭhPnRR~WЭhPnVV1hެYЩW [2 Z߭xVSRCbW{PЬPRCbe~ЭhPݭݮkPUЭhPVSxSSiPTCdRb bvCRbЬPRCb~ЭhPVQxQQiPPARbݮkPRЭhPRݭݮ PЭhPRUjUCd{PЬPRCbg~ЭhPݭݭݮ PЭhPݭUjVV1n}gЭhPЬS}cЭ2P8^WbgVctU}$beeXЬPѠР Q СTXfЦQСTTXg~7ЭePxXSЬRPC`zPRCbg~ЭeP߭߭߭ݭT1P_ݭݭݭߧ,߭߭PRR߭P<2~ЭePЬPЭR`ЭePЭ2P$^%fUVլ1xVRЬPQBaP`mBP`PBa~&PxVQЬPRAP`PˏPAb~PxVRЬPPBP`PРWVLe ХPe~﵋PХPˏPe~PХPРWѬV1xVRЬPQBaP`oBP`PBa~LPxVQЬPRAP`PˏPAb~PxVRЬPPBP`PРTVPWT߭߭߭߭VЬRݬW@uPxPPR@be~ﺊPЬSVPSPPS߭߭߭߭V~ЬRSTtPxPPR@be~jPݭݭݭݭݭݭTWPPV}ePЬQ}aP<,^pU}e}eЏЏeԞePS|~׉ЭePЬRѢiТ Q`СPРTTѢ.ТQ%ݡSPЭePֳ P~fЭePdP~JЭePЬR; VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17]<~SP|~ЭePЏЭԥ2Pμ^nլ1xnSЬRTCdRbnCRbRCd~ﻈPxnTЬRSDRbRˏRDc~PxnSЬRRCRbRТWnbP"b bR b~>PaRˏRa~PaRТWXnVެ[VkVn1DެоYkrW CXKЧ QЧPRСDTТSRUR<~TRS<~TUSX߭߭߭߭VݮWqPxPPЬRR@be~5P XP@Qa@Qaխ׭խ׭؞@Rb@RbVRRkVSxSSоRPC`RbUmPC`PЬRRCbf~句PpRpϞ~pR~pPpϔ~rR~rPrPd4DPf}Pd8PjPUVRRkVSxSSоRPC`Rb<ZTwC`PЬRRCbf~ Pp~qP"VPxPPЬRR@be~؅PrPd4DPfPd8PjPTTPZ XP@RZbPT TUTPT XP@PT`U#UPRzRP{ZPQPPZUPzUP{ZPQPPU XP@PU`XVVk1eVn1]Ч PЧSÀRРDUТTÄRÈZRXURTCXUZT0n }^PЬS}cP^q^VWլ1xWQЬPRAbP`mAP`PAb~rPxWSЬPRCP`PˏPCb~APxWQЬPPAP`PРUWLf ЦPf~PЦPˏPf~PЦPРUЬSQxWPPQ~WTTU7oPRW}fcP}cPRT~PWRxRRPB`f~lP^nԮ լ1x SЬRTCdRboCRbRCd~ Px TЬRSDRbRˏRDc~Px SЬRPCRbRТZ֮ `\ }\Rm\~P\\RˏRF\~{P5\PРZî RzRP{PQPP~KPî [[~/PЪ RТ$Т([RxR~{PX<1~P[1f߭xTЬRSDcnPRDbe~￁P߭TxTTЬRSDcmPRDbe~P߭TxTTЬRSDcmPRDbe~OP߭TxTTЬRSDcumPRDbe~Pѭ1ѭ1nTxTTЬRSDcqPRDbe~ȀPѭ ѭRЏbR<hTxTTЬRSDc]qPRDbe~cPѭ܏ ѭRЏbR<2hSЪ R$SSh2SЪ R(SS1xTЬRSDcpPRDbe~Pѭԏ ѭ؏RЏbR<hTxTTЬRSDcupPRDbe~{Pѭ̏ ѭЏRЏbR<Ш2hSЪ R$SSh2SЪ R(SSV[1ެYUoWVTTT TxTSRCbgPЬPRCbe~~Pѭď ѭȏPЏ`P<xVP@hRbTxTTiPRDbgPЬPRDbe~q~Pѭ ѭPЏ`P<xVQAScAhR2bPPPb2cPPPc[V nxVRBhRШbPxVTVRxRRBhSDhRcb[PЪ PЪSÀRРDVТUÄTÈWT[X~VTU y[X~VWUx[~XZnXvծ  }5WPЬS}2P^WZxYUլ1xUSЬRTCdRblCRbRCd~ }PxUTЬRSDRbRˏRDc~|PxUSЬRPCRbRТ[UKj ЪRj~|PЪRˏRj~}|PЪPР[ѬU5߭xUTЬRSDcTzPRDbe~:|PURR9߭UTxTTЬRSDczPRDbe~{PURRg~{PUTxTTЬRSDcnpPRDbg~{PЫ R$Ы R(UUWXWSUS2eRʏRBi# XRPPR0RXUSePʏP@iXRR,PeVV# V~1UTUQQW+PaRˏRP@iTR  R,PQQWTPXSSzTP{SPQPPPSTSUW~UVSXݭݭ[/P<1~zP}NVPVWRUReRʏRBiPTWSUS4eRʏRBi%P TRPPR0RTUSePʏP@iޚRR,PVgTTTTPVc TTPT@PS<1~yPRRP@ RTUQQW?PaRRP@ @ R~ RTR  R,PQQWTPzTP{XPQPPPXTPUW~USPXݭݭ[ PV }TPV<1~ yPЬRVЏb2P^nլ1xnSЬRTCdRbnCRbRCd~xPxnTЬRSDRbRˏRDc~zxPxnSЬRRCRbRТWnbPR RRQ~.xPQRˏRQ~xPQRТWnRzRP{PQPP~wPnRR ~wPЧ RТ$Т(ZXZ 1rެоYih[ZZUnUXVЧ RЧQPТDTРSRVR<~TRS,<~TVS,ЭXxUSRCbkPЬRRCbe~vP PЏ`P<xXP@RbUxUUоRREbkPЬRREbe~vP PЏ`P<xXRBScBQ2aRRRa2cRRRcZXZ 1Ч PЧSÀRРDUТTÄRÈVRXURT=qXUVT(qn }OPЬS}cP^nլ1xnSЬRTCdRbnCRbRCd~kuPxnTЬRSDRbRˏRDc~:uPxnSЬRRCRbRТWnbPN NRN~tPNRˏRN~tPNRТWnRzRP{PQPP~tPnRR ~{tPЧ RТ$Т(ZXZ 1|oެоY)e[ZZTnTXOЧ RЧQPТDUРSRVR<~URS,<~UVS,XxTSRCbkPЬRRCbe~sP PЏ`P<xXP@RbTxTTоRRDbkPЬRRDbe~GsP PЏ`P<xXRBScBQ2aRRRa2cRRRcZXZ 1Ч PЧSÀRРDUТTÄRÈVRXURTnXUVTmn }ILPЬS}2P^nլ1xnSЬRTCdRbnCRbRCd~/rPxnTЬRSDRbRˏRDc~qPxnSЬRRCRbRТYnbPK KR}K~qPlKRˏRVK~qPEKRТYnRzRP{PQPP~\qPnRR ~?qPЩ RТ$Т(TxTTЬRSDcaPRDbe~pP RЏbR<TxTTЬRSDcaPRDbe~pP RЏbR<2RRR2RRRZWZ 1kެX`[ZZUnUWVЩ RЩQPТDTРSRVR<~TRS,<~TVS,ЭWxUSRCbkPЬRRCbe~~oP PЏ`P<xWP@RbUxUUоRREbkPЬRREbe~ oP PЏ`P<xWRBScBQ2aRRRa2cRRRcZWZ 1Щ PЩSÀRРDUТTÄRÈVRWURTiWUVTin }HPЬS}cP^nլ1xnSЬRTCdRbnCRbRCd~mPxnTЬRSDRbRˏRDc~mPxnSЬRRCRbRТYnbP^G UGREG~zmP4GRˏRG~SmP GRТYԮnVެVVn18ЬZо}hX߭߭߭߭VݮYgWPxPPЬRR@be~lPѮ1Щ RЩQPТDUTSWVS1xVQAP<`~AP<`~AP2`~AP2`~USThxVQAP<`~AP<`~AP2`~AP2`~UWThVԮxRBQaBQaBP`BP`֮VV1Vn1Щ TЩSÀRФDТ[ÄWÈ Uծx)gSW2xURBP<`~BP<`~BP2`~BR2b~ݮ$W[cxURBP<`~BP<`~BP2`~BR2b~ݮ$ݮ [cUUn } EPЬP}CM VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17#$2P^nլ1xnSЬRTCdRbnCRbRCd~jPxnTЬRSDRbRˏRDc~jPxnSЬRRCRbRТXnbPVD MDR=D~rjP,DRˏRD~KjPDRТXnRzRP{PQPP~jPnRR~iPШ RТ$Т( [W[1BeެоYZZx[VnVWKШ RШQPТDTРSRUR<~TRS$<~TUS$WxVSRCbjPЬRRCbe~AiP PЏ`P<xWP@RbVSxSSоRRCbjPЬRRCbe~hP PЏ`P<xWP@RbVSxSSоRRCbjPЬRRCbe~YhP PЏ`P<xWP@RbVxVVоRRFbjPЬRRFbe~gP PЏ`P<xWSCTdCQ2aRRRaCQ2aRRRaCQ2aR RRa2dR RRd[W[1Ш PШSÀRРDUТTÄRÈVRWURTbWUVT~bn }@PЬS}c2P^nլ1xnSЬRTCdRbnCRbRCd~fPxnTЬRSDRbRˏRDc~fPxnSЬRRCRbRТXnbP@ @R@~6fP?RˏR?~fP?RТXnRzRP{PQPP~ePnRR~ePԮծ1ެ о [Q aZUnU߭xUSRCbPЬRRCbe~heP߭USxSSоRRCbPЬRRCbe~0ePШ R$Ш R(USxSSо RRCbCbYPЬRRCbg~dPUxUUо RRETdWEbRbYSYsPCg cШ RШQPТDUРTRVRSWݭݭURTjSWݭݭUVTjSRRWRYSШ RТ RSSYШ QШPRСDUТTRVRYWݭݭURTjYWݭݭUVTj֮Ѯ1Rn }=PЬS}c2P^=XWլ1xWSЬPQCaRbmCRbPCa~cPxWQЬPSARbPˏPAc~UcPxWRЬPPBRbPРVWLh ШPh~cPШPˏPh~bPШPРVWSެUSeSWiЬRХT߭߭߭߭STV MPQxQQЬPPA`e~bPݭݭݭݭVSSeSWW}hPЬQ}2P|^ ZPxWSЬPRCP`PˏPCb~ ZPxWQЬPPAP`PРUWLf ЦPf~YPЦPˏPf~YPЦPРUЬSQxWPPQ~WTTUEPRW}fcP}cPRT~UYPWRxRRPB`f~8YP(^nլ1xnSЬRTCdRbpCRbRCd~XPxnTЬRSDRbRˏRDc~XPxnSЬRPCRbRТndPV2 M2R=2~rXP,2RˏR2~KXP2PРnRzRP{PQPP~XPnRR~XPxx~uQPV<1~WPЮRТ RТ$ Т(Uծ1ެZjWHXUUTnTxTSRCbhPЬPRCbe~vWPѭ ѭPЏ`P<xUP@fRbTxTTjPRDbhPЬPRDbe~ WPѭ ѭPЏ`P<xUQAScAfR2bP PPb2cPPPcUU1ЮRТ PТSÀRРDYТTÄRÈ[R|~ݮVYRTQ|~ݮVY[TQVOn }0PЬS}cP^nլ1xnSЬRTCdRbnCRbRCd~UPxnTЬRSDRbRˏRDc~UPxnSЬRRCRbRТVnbP^/ U/RE/~zUP4/RˏR/~SUP /RТVYnWެ[WkWn1ЬXkPZ߭߭߭߭WݮVk?PxPPЬRR@be~TPYIЦ RЦQPТDTРSRUR<~TRSj<~TUSjYxYRBQaBQaBP`BP`YWWk16Wn1.Ц QЦPRСDTТSRURYTRSOYTUSyOn }-PЬP}`P^-T:V}Y(f잭fWլ1xWRЬPSBcP`tBP`PBc~}SЭfPxWSЬPRCP`PˏPCb~HSЭfPxWRЬPPBP`PРUWSd ФPd~SЭfPФPˏPd~RЭfPФPРUWTxWSЬRPC`J@PRCbg~RЭfPUPЭfPU[LPRRWP|~@RЭfPЬPЭR`ЭfP^+Y8X}&h螭hZլ1xZSЬRTCdRbvCRbRCd~QЭhPxZTЬRSDRbRˏPDc~QЭhPxZSЬRPCRbRТWZUPi ЩPi~EQЭhPЩPˏPi~!QЭhPЩPРWѬZg~PЭhPZUU1VTxURPB`P`fPSBcP`K߭fPPB`Rex1֯?PxRQЬPPA`g~IPPЬPZ`PЬPD `PЬP=`PЬPJI`PЬPd`PЬPd`PSЬQ SaPЬQdSaP^W/VЏffЬPѠР PUPUUPPg~HfPxUSЬRPC`PTTRCbg~nHfPT fPUSxSSЬRPC`PxTRЬPQBP`PˏPBa~>PxTQЬPPAP`PРRTLc УPc~M>PУPˏPc~->PУPРRR\T}cPЬQ}aP^U$W}uggXլ1xXRЬPSBcP`tBP`PBc~=ЭgPxXSЬPRCP`PˏPCb~d=ЭgPxXRЬPPBP`PРVXSe ХPe~!=ЭgPХPˏPe~<ЭgPХPРVѬXg~<ЭgPxXSЬRPC`M*PRCbg~<ЭgPXPPԭ=߭XSxSSЬRPC`m:PRCbe~S<ЭgPXPPԭ=߭XSxSSЬRPC`!:PRCbe~<ЭgPXRRXSxSSЬRQCaP`Tjbդ(V9_k[>0 ɭDݞ&umGxM͢FTefs@b< "oy%_))A "*^ڜ\!8vW0BD)HroI_>#8;6rKސDUu/p"QAcNg&olD i4GaBtNݺ!PP/% T@7|"@.A'h`@v{.@YZ0~1Fe`Nݓo|L>1S>j5HF?' QߩF s3MIF 5Ƹ~7T[,LQ, k5*^"|b%zĀ)S}#ݣMxؾ:2]0@~0Q~,BeG튨S?5Utlj%k@j3Y `﬘N v,37Ǭpmd~/Cqc5J*SO8ݚ3yzaTVU#gIvb\ 5YU;u nJqV^Ny4VQi&$ &_azZed2Wl:  <>+ueɆcjp=ʊN` (R?pxrE(Oim\-pKc6IHNė2pJu1j D6PO1|O=xkiF۝j{V癝 'W݃HDUIs-x α(pv߫L[0nkxlqxavҳ]V }^1w恺w˖6 Qh9Q,[,˥%|lGZ^]i.~M›v| dVGNM˖T^->36Ry~Z@Ĺ'~gQnYA5|P. y#H6V%nKj&@¡V۴"N%ZԬx 7=]r4%㇨~F}O_~ v`,"o}.X"㩘be]:*5Go$;D#K6wzWtSZ&C@q=(T؅ >v}:_j]2UY>DYL@:NBRJj$-kp$v^f36*5fIA p9*\ η uPh-ِf8]Yt"v盠 a6G6rYM_.J:ixm&ǭrd $!4AN rͱ%ud QPؖʒ ["wn s.,(ɀ 6#f+ty,G[=R\(ˋϛX1c}ByɟT݊\ U,rvf"s}dDiYNкOX^/Guysᅀi¯5{&Lн甃Ed5~M='EV)tS=Ǩ$V_ڏsKڱ sNt+sZ.^ بMoxm |}I/1{|2m_[T3 7skp)ʽQ`NeAǶ9)*Vq?VPl i{"«*ҦAocWXZg$UPg"\%z$M@5 61~%tz)iLƿ9kА@˷ڵYp[Q u{;Ha(C6p@BIwTSR2FSR?/+ h7K#nR'!Ʉ~Ey8ƕl5e+j:h4c B.x%fryW ر"Q7+υD-_m)6ƃ1q$s] qb ՅP~!s)K.V6) )ǩXGl}sض?^zKؐ-X0[~FwOqgE3VR}KƯ*[D⚎O ϰT,<"nCgٲ*:Y߯DXIyp2e~^b}6P:\=)KVKj,ё|f%dap$܎  b4v*4~&UE D;Oރ[7O^*јpoC)$,qDSKʍ\Lsp1F& k!2%ԡX]g'QLHdÀ%̻a7KsBY>Y PBgtcmv19khݢN4}{ҏӸܶv$_,hܶdcnt lU0]Uo43qo{Gv}][q4@]H+SL =oD*2Lh{1b~t_q)qPE2FᆆP{gk"Z"mm*^;Ld_ᤴ8w \3!'\c4wsgubN&T S@I|v-} LFB[+;\F wK)yI [w>+BF[u*=RaWջq /hۡkCgyFfo1 H;ZzrI$uIj"=f/$xE'F`4V HIT4TFyG,/`s|;H\3ZQ90,X°B,ֿFZzKFôuϕ+\YGL=qV{m1i!99"twPT{Kó{Ħգ!j4Sv%{krGHl_E~k"ȄanrYjQw ~-uJƄ9m'2L_jN`r <;Qt[J%N|X ~`sF0P澝+.NR .=q~9xgM s 7` <1h=//-<ڙG랞Ɨ uё,xk|Um;9:HwB?K.! =d11Gk=S\&08 Iu(sdENt* r8)5RS Ujųٱxvm…jih8P fBx%2p޵>^$ʼD&$UV5Eh(<+_ ?aUD}`S-Y:c$YNS4`;>O% ?kx.64omYpJMKU)aj  ݻxFhd04s{CĐP]ص!,ũGChCԛ~16CG f iu8^0a# &!@2%/-G <IsquOX1L*n&Z0m' .Vte .Ev7]>[G2.tccϸTfݳ'<^o8lBj'R]Td/% 첊rDqe gIҰ< 8-r4]+JEX9pS Uh%vN=s4V<|藏QQAZNW Z!mvzҮ'kU;(Ս=p0C"wlՕ+|]s \݇YR/c+'ae# 8BMbBd`HJY]8?ߤ#?c]-K&V׀e{/n1 'r)ާ[zWaz/4g+8~Y:FMeؓĆ%j{yqAGjX{/Sc*zQkYx]:no +5-1I/'Q0eupzm^*%앨hdc"yN{Ub3 8#Gġ;;K3 Gp&ƨ0H"C@︝6m? Bra'Uzԅ҉45?VF\. {$Q $I5UF.Ÿ cgr0g)(9:[j/V +6ȴ! &zB,ĺ-;,FSzUN t ͝&&bjب35OE^Ge?";=ҳ Æw*![boo"x֎w+Ҥv>ZFq) 鳋f I7JX}nѱwIƚv&'pykiTc?<5Y΋ؤkK]:\& )? W3:?V:d( ȧ]ozT|k(U +aOnbF&#9i[Zʭ ZBqEŘL1⊦1O$y&?*cbŊYL^J*I"DgcIvr܉_QdM 0%Y4>kd%b|/X|cMk!֦dʥUO:]R0ӟ]%J|5rΝQɰpQ?K#c2$]DAS p6{ m#Q .iOyqgjʑT0j }9]JuP/5Q^08҉>С1{ã9XPI(e*P瘝Ly]Z7, ͉^f@t 5PLr{=,߳WSLv7y b8UEGeӡhA xx(~\MW[\cP&OaY5M4N /ZE;FՄoLhөn$k].EWOF?EPx]iyhM4Is?kI^R >кeu2 mü | /)J4E x|R$j>(ۤ~s X: dfurBg>E){+н_KȱBzH,1] EEw0Ƌ?̸ Jg%Th'>*t]HILhFA+aIye=t>;hv@Xi{'K#%:<yd5Gj9pb}h])1ғ+>ԘqFc.Nދv D/É㧾 3](~vgS+hLQnc@~C;+<1xLxaV%2e=Gn)=Qut`gG{g1yYKab< mWD`J{bx8R|v VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17[PCb~*/ЭfPxWRЬPPBP`PРTWUPe ХPe~.ЭfPХPˏPe~.ЭfPХPРTѬWm g~.ЭfPxWSЬRPC`PRCbg~c.ЭfP߭߭߭߭W~ЬRݬTPxPPR@be~.ЭfPխ+խ&PФQPPP  խխЭfPݭݭݭݭݭT:PRRݭݭݭݭݭT&PRRЭfPW }eЭfPЬQ}aЭfP^&TVUWXe߭ݬݬխ ֭֬ЭR׭RP׬ЭP׭PѬڨuЬRR߬ݢPxPP0P.|d,eeRe=beRebVedf:fPԠfPԠfP dX ѷ u~OdзddRgPРbdЏdԴdhgPРRբ fNSЭP@c%PQdQQЭP@cܘPR |~dR֭ѭh~phdh&|~P^aTެ RԲЬSУS1c-|PЬPP`PPeKЬQP`PS"Q׬ֲЬPРS ߤ SP ߤF\ ׬ֲЬPՠ-P^uW ZOY[XkRRi gRRiS1 $VxS\hRLbRb1xS\hRLTdU(k\~!Pd1hRLbR}b|PjURRdg Ѣ'\բ Ux\P@(Pg`\\ ?Pj\ݢ fPP\P$Px\P@(Pg`\ݢ fPP\PSS1)+\\'g\\P<^!U"R ݢ<""Scc.Rݢc!RԢRݢcRԢ c eSc3~"TcPPRР cТ<\\PЬ\Pd\Rdec^ЬR Ѣk~(PѢ~(PТ T_ P`QФ PQQqPA`S~P(PxSSCPTPPPbTP|^VЬTФUUݥ PS |~'PХ RެUReRPxPP@P}f`RReR5RUxUUxRP@dQEP}a`EP`EERЏdSP^ЬRb bb\߭bPbe~W'PbPЏ`bPЭբb~/'PբP2P|^ VUЬRb bbbbPbg~&P}bfPՠfTЏbR$ PSfTSP}ТfQPѡPԡSPP| ^aVrUTЬR}b}b}}e} e}  P}` PФЭfPѠ ԠfSR PQfSQP}e} e}  P}`ФЭfPՠТ QP<^ S}TUլ ߣyݬ0ݬPRR)ÖRRRPaÛRuPPݬ[PPdàݬݬ߭ù߭"þ߭PUUݬPUUPUl~ݬKPldݬ`UP^$T]WN[Y`X9V" ZЬRR gm < ժתRТRRѢ VkPuRТТ ТhТ@ТP1VЏfVfVRТfVRТf1PhRhbSRhSb1VЏfVfЦЦV1fVЏfVhRhbfVUUVkUPn1PhR_hRhbShRRSSSh1 PhRhbh1h:h1PVRRVkRP1RV1`VЏfVf1PV1PVЏfVf1VЏfVf1VЦЦf1rVЏfVfVUUVkhRhhbRURPn1VkVTTd dddTv~1ФS kRRSRkkVP1V1PVk{8nR֢ kRPEykV1PVkC |~PykV1|PnP>8閭߭߭61LPkVnPP&*" 2?P111_111UV1  b^[,ZYkTЏjjkUЬPxPRRUSPZSCc ccc1߭cDPQcRЏbcRЭݬݣYPP jPxPP@cR}bcSkjPccPPݬSpPRSj~vjPRЏcУRբ-RެVRf!ЦUxRQAcP` AcAcURУWЧ XUЬUUXXURRRxRRRT,UX'UXRRQRPQTЏdTdPRPRXX1Pէ1X7PѬPEX&PR¬RRQRPQPTЏdTdPRPRXPXVfPPUXfxPP@cR}UpI}b}УWRTXfPէ1XPѬPBX{PR¬RRQRPQTЏdTdPRPRXGPЬ STkX ѧ jPjPdkRR<-~xTRЬb>NԢw S R TթשݬtЧ|z0ЧPPTЏdTdPTkjP^ЬQ]DPPЏaQPЬPЏ`PPЬPЏ`PPЬPЏ2P0^ݭݭݭ߭߭oPR |~PЬPR2P^ЬPЏ`P1PЬPЏ`P PЬPЏ`PPЬPЏ`P^2P^}U2P 0^1Sݭݭݭߣ߭ ߭mPR |~PЬPR 2P^ӀTdЭRR ޤSR  R ޤ!SR RSݭRݭݭݭݭߤ$ hePSSamPR |~KPЬPRS`P^ЬPЏ`P^QЬPЏ`(P^ЬPЏ`P^%PЬPЏ`P^PЬRݢPb2P^ }P2P^ЬPЏ`P^2P^ЬPЏ`P^ЬPЏ`P^ЬP}Џ`P^~Sޣ>P'ЬRޣBݢPbR9PޣFP'ЬRޣRݢPbR Pޣ^P'ЬRޣdݢiPbRPޣjP'ЬRޣyݢ<PbRPÈP(ЬRÞݢ PbRPôP(ЬRݢPbRTPP(ЬRݢPbR%PP(ЬR ݢPbRPP(ЬR+ݢQPbRP:P(ЬRKݢ"PbRP\P(ЬRbݢPbRiPhP(ЬRzݢPbR:PÌP(ЬRÜݢPbR PìP(ЬRõݢfPbRPþP(ЬRݢ7PbRP2P^%|T_PSSPPЬRSݢPb2P ^PSShPR |~PЬPRS`2P^ЬPЏ`P^ѝQЬPЏ`4P^ﱝQЬPЏ`\P^ЬP Џ`P^ЬRyfPЏ2P^}2P^}2P^ЬPЏ`P^ QЬPЏ`2P^QЬPЏ`2P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P ^ЬRԢЏbRfPPàSРRâPPSТRRТQáPPSСQЬRSЏbRPPàSРRPâPPSТRRТQáPPSСQЬRSЏb2P ^ASЬRݣZPЏ2P ^ЬRԢЏbRbPPà SРRâ PPSТRRТQá PPSСQЬRSЏbRPPà SРRPâ PPSТRRТQá PPSСQЬRSЏb2P^ЬP)Џ`P^ЬRPЏbP^ЬPЏ`P^ЬPQЏ`P^QЬPЏ`2P^wQЬP,2P^ЬQ!ЏaP^|~1PЬPӣЏ`2P^I<~PЬPЏ`2P^ ~PЬPkЏ`2P^~qPЬP3Џ`2P^|~1PЬPۢЏ`2P^I<~P  }PP^ ~P }gPP^~qP }'PP^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬPЏ`P^ЬP Џ`P^ЬP Џ`P^͖QЬPЏ`2P^節QЬPЏ`P^ЬY}잭ѠRТSRb[УnRRWPb |~խ ЭPn[ݬ_PW |~W ЭSPЭRЏ4ЭRW8eR((bԧ8X:VZ[}[Z;S R _ VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17(Un P}nUݭdЏiЭ2P ^SЬRբ<LUP< |~PRRݣݬ8P |~PRݬ ݬݬdP PP 8^ISЏЏcȞc߭ЬRP'߭rPǭЏbЭcPЬRP(PbǤЭcPЬRPf~ЭcPЬRPf~ЭcPgPЬRpP~][PЏbբ<3~cЭcPЭȣ2P8^ TЏЏdȞd߭ЬRGP1߭3P1ݭݭPSYPЏ`PЭPЏ`PЭb؟P|~ЭdPЭdPSЏbЭdPЬRgPBVP1bP|~1ЭdPЭdPЬR Pf~ЭdPЬRPf~ЭdPЬRc~YPЏbբ<3~ЭdPЭdP8^IYЏЏiȞi߭ЬRP1߭oPtխݭ~ЭiPЭSzP{SPQPPTխT'SSPSPPTTSSPPSPPTЬRTЏbЭiPЬRPBP1bP|~ЭiPЭiPЬR[Pf~MЭiPЬR0Pf~"ЭiPpSpUgUSPjPRnRPdUPcPSWsSsW'sUpURrURbRWsWsUpURPrUR`RWЬRpW~WPЏbբ<3~ЭiPЭi2P8^QTЏЏdȞd߭ЬRP1߭wP1ݭݭPSYPЏ`PЭPЏ`PЭb؟P|~ЭdPЭdPSЏbЭdPЬRPBP1b#P|~uЭdPЭdPЬRPPf~BЭdPЬR%Pf~ЭdPЬRe~UPЏbբ<3~ЭdPЭdP ^߭ЬRPbݭPS:PЏ`PЭbyP |~oPPЬPSЏ`PGP2b_P |~%PЬPРPPPf~PrPЬRpP~TPЏbբ<3~P2P^߭ЬRPЭЏbP}P}bP`P1p~1TPЏbբ<3~7PPf~!P8^TЏЏdȞd߭ЬRP1߭P1ݭݭgPSYPЏ`PЭPЏ`PЭb؟P|~gЭdPЭdPSЏbЭdPЬR3PB"P1b韛P|~ЭdPЭdPЬRPf~ЭdPЬRPf~ЭdPЬRa~bRPЏbբ<3~hЭdPЭdP^ЬWBP1.P)gGP |~ PPPf~PЬPpUРR`nsU#R}XPRRRgUUpSRPRdUSdUUxRRRpS~TQnYPnZժX ЏXX |~GPP.Pf~ PЬRPf~Pss~Ps~PЬRp~p~ pP~PPЏbբ<3~PP^s"լ I}+BDPլ  ά gpSլ  dSdx լ ЬRpS~OPPЏP ^SЬQ ЬQˏ/PPo~PЬPˏ_PP1ЬPˏPP |N7$1j?PЬR 'P1g~>PЬR Pg~P1d߭ЬRCPe~PݭUPѭPЬPР PЭ1 P߭ЬRPe~PЬPР QЭ΄P1 ~UPЬQѡ } 1Pѡ СP~PЬP} `ЬP} UЬPAЬP7P&|~PЬQˏСPxPP P}`ЬP}`P$^YS*TЬQ [ЬRJcܞcˏ/PPo~6ЭcPЬPˏ_PP1ЬPˏPP RO$1?PЬR P1g~ЭcPЬR uPg~ЭcP1|߭ЬRPe~]ЭcP_ݭPѭЭcPЬPР PЭ1P߭ЬRSPe~ЭcPЬPР QЭ6P1~ЭcPЬQѡ } 1Pѡ СP~{ЭcPЬP} dЬP} YЬPwEЬPP*|~%ЭcPЬQˏСPxPP P}`ЬP}`PqPЭcЬPˏ_PP1ЬPˏPP SH%1P?PЬP [P1䚏g~rЭcPЬP -P䚏g~GЭcP1|߭sP䚏e~ЭcPݭPѭЭcPЬPР PЭ1P߭쟭P䚏e~ЭcPЬPР QЭP1H~}ЭcPѭЬPް R}b1ѭ ЭP䚏~;ЭcPЬPް R}biЬPް R}bZPЬP/EЬPOP*|~ЭcPЬQˏСPxPP P}`ЭcP^hXiT調Y3U|V}Z}RЬRW̟Jddˏ/PPo~6ЭdPЬQˏ/PPo~ ЭdPЬPѠYѠOР РЭRЭQѢ6ˏТ SˏС PSPѢ áWPѡâVЬRˏ_PP1ЬRˏPP S@%1PR?PЬR P1Ԛg~&ЭdPЬR PԚg~ЭdP1t߭'PԚe~ЭdPiݭ9PѭЭdPЬRТ RЭ1P߭PԚe~qЭdPЬRТ PЭ|P1h~9ЭdPѭԏЬR޲ R}b1ѭԏ ЭRԚ~ЭdPЬR޲ R}biЬR޲ R}bZPЬREЬR P*|~ЭdPЬQˏСRxRR R}bЬPѠѠ VЭPVЬRˏ_PP1ЬRˏPP TA&1P ?PЬRP1̚g~ЭdPЬRP̚g~ЭdP1t߭P̚e~ЭdPiݭPѭЭdPЬRТRЭ1P߭쟭P̚e~)ЭdPЬRТPЭfzP1h~ЭdPѭ̏ЬR޲R}b1ѭ̏ ЭR̚~ЭdPЬR޲R}biЬR޲R}bZPЬR EЬR P*|~QЭdPЬQˏСRxRRR}bЬPѠѠ WЭPWЬP}`PyPЭdЬRˏ_PP1ЬRˏPP S@%1P?PЬR cP1̚g~zЭdPЬR 5P̚g~OЭdP1t߭蟭{P̚e~!ЭdPiݭPѭЭdPЬRТ RЭ1P߭䟭P̚e~ЭdPЬRТ PЭxP1h~ЭdPѭ̏ЬR޲ R}b1ѭ̏ ЭR̚~KЭdPЬR޲ R}biЬR޲ R}bZPЬR? EЬR_P*|~ЭdPЬQˏСRxRR R}bЬPѠѠ VЭPVЬRˏ_PP1ЬRˏPP TA&1P^?PЬRP1Ԛg~2ЭdPЬRPԚg~ЭdP1t߭3PԚe~ЭdPiݭEPѭЭdPЬRТRЭ1P߭ܟPԚe~}ЭdPЬRТPЭܠuP1h~EЭdPL VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17hԏЬR޲R}b1ѭԏ ЭRԚ~ЭdPЬR޲R}biЬR޲R}bZPЬREЬRP*|~ЭdPЬQˏСRxRRR}bЬPѠѠ WЭPWЭdP<^TU|V} }̟ЬR ܟdĞdˏ/PPo~ЭdPЬQˏ/PPo~ЭdPЬPѠXѠNР РЭRЭQѢ5ˏТ SˏС PSPѢ áWPѡâVЬRˏ_PP1ЬRˏPP SH%1P?PЬR P1䚏g~ЭdPЬR P䚏g~ЭdP1|߭۾P䚏e~ЭdPݭPѭЭdPЬRТ RЭ1P߭{P䚏e~!ЭdPЬRТ PЭ^rP1ﰫ~ЭdPѭЬR޲ R}b1ѭ ЭR䚏~ЭdPЬR޲ R}biЬR޲ R}bZPЬREЬRP*|~EЭdPЬQˏСRxRR R}bЬPѠѠ VЭPVЬRˏ_PP1ЬRˏPP TI&1P?PЬRsP1ܚg~ЭdPЬREPܚg~_ЭdP1|߭Pܚe~1ЭdP3ݭPѭЭdPЬRТRЭ1P߭쟭+Pܚe~ЭdPЬRТPЭpP1`~ЭdPѭ܏ЬR޲R}b1ѭ܏ ЭRܚ~SЭdPЬR޲R}biЬR޲R}bZPЬRGEЬRgP*|~ЭdPЬQˏСRxRRR}bЬPѠѠ WЭPWЬP}`ЭdP^Zl[}UЏЏЏ$ЬRbPgk}bjPSЬRТcR gk}ʹj若PPXXYYk}jqPXRRYRR:PV FPVRUTX TTXSR RRYUYWTW PTTWSѣ }益ˏУ RxRRR}bRP ^ЬSУUe }ХVХRRVMPWgSSTS4ѣR.PѣR MDP}STУSѣR֦TS gUg PФU e}Џ U RRѦRզ4 V^ЬR־Pg~PЬRﯾPg~PЬQ RRС aPPR <à PP0}aݡݡ8P |~oPЬP`PЬR~R8P |~;PЬPРVР UРXTX TTXЬPРSРWRW RRWЬP`P|^ЬPѠl~PЬPѠl~PЬPР QСVРPРUVURR2PT |~xPRR[3PS |~YPSS V~ЬRUUQxVPPQ~T }bP ^߭ЬR&P,߭PѭЭЏbPPЬRﵹP.魯PﯚP}bPPЬRnPf~`PЬRGPf~9Pq5ЬRp~2PЏbբ<3~PPP ^߭ЬRP,߭PѭЭЏbPPЬRP.PP}bPPЬRVPf~HPЬR/Pf~!Pq5ЬRp~1PЏbբ<3~PPP ^߭ЬRP,߭PѭЭЏbPPЬRP.tPP}bPPЬR>Pf~0PЬRPf~ Pq5ЬRp~0PЏbբ<3~PPP ^߭ЬR޵P,߭͵PѭЭЏbPPЬRmP.\PgP}bPPЬR&Pf~PЬRPf~Pq5ЬRp~/PЏbբ<3~PPP ^߭ЬRƴP,߭ﵴPѭЭЏbPPЬRUP.DPOP}bPPЬRPf~PЬRPf~Pq5ЬRp~.PЏbբ<3~PPP ^߭ЬR﮳P,߭PѭЭЏbPPЬR=P.,P7P}bPPЬRPf~PЬRϮPf~Pq5ЬRp~-PЏbբ<3~PPP ^SЬRPg~LPЬR-PSg~PЬRѢ<;P+}bSbݢ/P |~PP2P ^SЬR^Pg~PЬR-.PSg~^PЬPѠ>;P/ЬR}bSbݢ./P |~PP2P ^SЬRPg~PЬR-rPSg~PЬR:P+}bSbݢx.P |~aPPP ^SЬRPg~$PЬR-ᄉPSg~PЬR9P+}bSbݢ-P |~PPP ^SЬR>Pg~tPЬR-PSg~>PЬR%9P+}bSbݢ-P |~PPP ^SЬRPg~ĿPЬR-^PSg~PЬRu8P+}bSbݢd,P |~MPPP^ЬR6P}bP2P^ЬR6P}bPP^ЬPѠv~ϾPD"PR |~ﶾPЬQС P}44Ѣ4~PR0ЬPRЏ`P^ЬQСRRRЏaPˏRPP^B*1&?PЬRТ PРЏbPЬPР RТ RТ Џ`PЬQС PРR PRЬPRЏ`PЬRТ PРЏbPЬRТ PРЏbPЬRТ PРЏbPЬR Pp~CPЬRТЏ2P^-WﶖUЬRدPg~PХVVgSSЬRSPЬTФ QVPPФSSTSRTPRSRSЬS}cSPgRVRe~rPV2P^߭ЬRPe~<P߭ЬRoPe~P߭ЬRHPe~Pխݭ~Pխ:ѭhRЭЏbR)Pѭ6ѭ.RЭЏbRPѭ2P ^߭ЬRPe~0P߭ЬRcPe~ Pѭ-RЭЏbRaP֭ѭ٘P^W}g잭gЬSSTTRS"Pb|~ЭgPݬTc#PR|~aЭgPЭSRR PެVPf%TUxPQSAcSAQ}caPPUЬSЭЏcЭgP000000000000000000΀^wY}x͏͗ެVfRx͋i͇͇iˏ/RR1͗1R͗1fUY'Wѥ"fScTУ S RSSSgPfScTRgPeSЏcե<3~͇iPf[P͇i͗fS吝͗͗g~視͇iP͗RM1"P͗͗͟9PQR͗1ЦTR͛SsSSSS2SSCddTP͇i͗R1ˏ_͗RR1ˏ͗PP@||||1i?P͛TФ TФ SRS1bU͛xRP͛T@T¥TTTeU"P͇iRRS1͛~P͓1ЬS͓R} cSܜP͇i͓͛P * VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;171͛&P͓1ЬS͓͓RR£RRRcSoP͇i͓͛P͓1T͛RТZТnn͗~勇͇iPˏ['X#WxԚϚɚ[SZ<~͆UPRR~B͇iPR=~#͇iPZ<~͆|PRR ͇iPR<VRVVUUhP|~е͇iPЬPSѠѠ A`U~hP|~͇iPЬScݣgP|~v͇iPU͆gPT|~V͇iPЬScTUcR1ݬ﫚P1͇i͛RТ ͓1UPS͓RS[T͓PSRR RPxRQ͓PAP¤PPPdTeP͇iS͓RS͓RТ ͓͗t~}͇iP͇2P^6[WZЬR"ggˏ/RR11 gPŏmNARv RˏRnXdXnRdRXЬTѤ)dUФ R jXSSSSS!PPdSjXRRR!PЬScRЏbգ<3~agPgPVVPVS gPŏmNARv RˏRnTdTnSRdRTЬSjTRRcgPˏVPP{1?PTФ RТ S gPŏmNARv RˏRnUdϟUnSRdRUЬSTjURxRRBR£RRRcgPVЦU gPŏmNATv TˏTnPd?PnUTdTPjPTTRSCQ>CdP%@UR} gPХUPSS CQ߫,XШU gPŏmNATv TˏTnPdϳPnUTdTPjPTTRSCVTCЖP;@U/R$ЬQUT¡TTTagPХUPSS CV߫*RТV gPŏmNATv TˏTnXdXnVPdPXjXTTSRTФ URTSTRХ U ߫RRTSTRTTSS¥SЬTUxSRBR¤RRRdgPS gPŏmNARv RˏRnTdWTnSRdRTjTRRbRЬSRRR2RRB[cgPʠPq~ӯgPˏRR2P|~gPgPV~sgPV`ŏmNARv RˏRnSdySЬRpS~PЏbբ<3~gPgPŏmNARv RˏRnTd!TnVRdRTЬSjTRRЏcg2P<^}TUЬQ ЬQ nЬS]d䞭dѭ1#߭P3"PЭdPЬPe~ ЭdP߭ЬROP3ڞPЭdPЬPe~حЭdPЭPݠݭ?PѭЭdPЭPݠݭPѭЭdPѭ ЭPЭPݭݭP|~IЭdPЭdPˏ/PP U(쟭P욏n~ЭdP߭ЬR,P3﷝PЭdPЬPe~ﵬЭdP߭ЬRP3oPЭdPЬPe~mЭdPݭݭبPѭЭdPݭݭﵨPѭЭdPЭPЭSPSPRSíRPPSU{ЬSѣ%cRУ P PPPݭPcRݭݭPЬQaPЏ`ա<3~ЭdPЭdPЬQPPЭaЭdP^ZnЬS "ЬRjjˏ_RR1ˏPP31P?P߭ЬWP1kPe~jPVVSЦ RТ XЧYЧUTXRPxTVF$PU`;UF(P`YأP%ЬQSFP¡PPPajPTTXjPTФ Rݢ ݭP Ф RP  jPЬSTPxPP@R£RRRcjPЬShP[߭[rѭ#`RRR£RRRcjP[PS|~WjPЬRSЏbjP߭ЬRmP5P jPЬRe~jPRݢݭZPTTT jPТ PSP SRTRPSР P SRTRSRRTT TЬSPxTRBR£RRRcjPЬRˏ/RR n/ݜPr~jP߭ЬR@P5˘P jPЬRe~ȧjPݭ1PUUU jPnyЬSѣ#cTУ R URRRsPcRU[PЬScRЏbգ<3~*jPjPUuRЬSRRR2RRBRcjP|,^ЬRךPh~P PV |~都PЬSУ URTSdcTSRЬRVЏbPx^+Z$Y}%}}} }|jxxjЬ[ѫ 1ѫ 1Ы Rݢ P|~xjPЬRТ ТiPU|~ﵥxjPSTЭRCd1fVXWPCЊR1PTЭPBdխ{P߭ЭPݠ ݭfխP߭ЭPݠ ݭfPTЭP} ЭPРTUhigPU|~xjPQЭPРaխR1lSS TЭRCd1CU^ЭSգ RѣR S1ЬRЭЏ bxjPxPx~bxjPЬRIPx~3xjP3P[|~xjPЬRТ XТWPާVUTfSSedVUTPЬR[ЏbxjPx^ZxY}y}q}i}a}Y|jxxjЬ[ѫ 1ѫ 1Ы RТSЫRТRSRSTRTT ؿP|~!xjPЬRТ SТTѣ SТ PTТ iPU|~֢xjPSTЭRCd1V0XWCR1PTЭPBdխ{P߭ЭPݠ ݭfխP߭ЭPݠ ݭfPTЭP} ЭPРTUhigPU|~!xjPQЭPРaխR1lSS TЭRCd1CUЭSգ RѣR SUЬRЭЏ bxjPPx~xjPЬRmPx~WxjPWP[|~9xjPЬRТ XТWPާVUTeSSfdVUTPЬR[ЏbxjP΀^Z|Y}|}|}|jjЬ[ѫ 1ѫ 1ЫSЫ Rѣ}}}Ы SЫR~kyP|~GЭjPЬRТic PU|~ЭjPSTЬRТRCd1XtW! VC8R~TЭPBdխgP߭ЭPݠ ݭhPTխ9ЭP} ЭPРTUgifPU|~|ЭjPQЭPРaխRSS TЬRТRCd1ZUЭR SSѢSբ4 R;ЭjPPx~ЭjPЬRגPx~ЭjPP[|~爛ЭjPЬRТ XТWPާVUTefdVUTPЬR[ЏbЭjP ^SЬR#c잭cѭЭcP}bЭcP ^̈́SЬRےc잭cѭ }bЭcPЭcP^ЬP}2P^ЬP}`P^~P\8~P\\<1E}'y>@PlԬ\P<^nUPxPPPSSSTeQá PPSiСT!Pä PPS Ф RS bФTT(ePРTä PPS Ф RS bФTTSoPPS\TePР RS bSԢԢ RP^mSHTPRdʕPRR<1}w PdbԢ<Ԣc\c\ ԢRRP^ImTSdPà \\(hРS Pã \\( У R( bУSS(d\ЬSã \\( У R( bУSS(+PP(ZSd\Ь R( b\QaQ\RPP<^UlT} e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSS[PЭePZSdPР R bЬЬ} ЭeRP^XYYWkUѬ 1hPhPVTeQá PP@xСT&ä PP@Ф R@ bФTT0ePРT'ä PP@Ф R@ bФTT@~iPP@gTeTФ R@ bRS1PiRiRVTePà RR8hРT Pä RR8 Ф S8 cФTT(eRТ!ix VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17BTä RR8 Ф S8 cФTT8ÀPP8gTeRТ S8 cԣVԣ PRbR PSPP<^%jUPxPP(PTSeQá PPTgСSã PPT У RT bУSS(ePРSã PPT У RT bУSSTPPTWSePР RT bTެQaPaP@aRP|^esVViUSxSS8STeSã SSTTPP PeSУ PPPSeQá PPfСSã PP У R bУSS(ePРSã PP У R bУSS~PPVSeSУ R bЬfSfS| RP|^rU^hVPxPP$PRTfQá PPRhСT Pä PPR Ф SR cФTT(fPРTä PPR Ф SR cФTTR3~PPRUTfPР SR cRެTdЬЬ |PdxPRBR}ebPPdSP^}gTSdQá PP hСS Pã PP  У R bУSS(dPРSã PP  У R bУSS _}PP USdPР R bpRP|^9|VfUЏЬf잭fPxPPPSTeQá PPSkСTä PPS Ф RS bФTT(ePРTä PPS Ф RS bФTTS|PЭfPS1TTePР RS bSЭ ЬPРT֠TRP<^eU PPxPP@PRSeQá PPRhСS Pã PPR У TR dУSS(ePРSã PPR У TR dУSSR{PPR]SSePР TR dRЬЬ TP<^zUeT}e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSSzPЭePRSdPР R bԢ} ЬЭRP^yYfXЬRЬSVЏi잭ihUå PPSyХV!Pæ PPS Ц TTWS ЦVV(hPРVæ PPS Ц TTWS ЦVV"SRSzPЭiPЭRSxV hPР TTWRSUSUPSPSPPSTVhRT ЭWP<^xUFcT} e잭eSdQá PPlСS Pã PP У R bУSS(dPРSã PP У R bУSSyPЭePPSdPР R bЬЬ} ЭeRP ^}bSRcQá PPhСR Pâ PP Т \ lТRR(cPРRâ PP Т \ lТRR_xPP PRcPР \ l|}Fl }>l\P<^-wUaT}}e䞭eSdQá PPkСSã PP У R bУSS(dPРSã PP У R bУSSwPЭeP5OSdPР R bЬ Э} }fkЭeRP^`Pà PPݬ(wPP`P P^NU`WެVfPˏ`RBYRRS PPRbSSTTPgRP PТQfTSS  Ь TeСQgPРRTSS  Ь TeТR"qgRЬ T^bPà PPݬHvPPgbPР P^ЬRТ8XUШ ZtRSSS@|R Т W8VTU}UT((gЬRWԢ WШ$|Ԣ(Ԣ0YZ}ZY}i}iЬRW,|^EtVgTgS:UУRЬQa feQЬPР0Q}aЬPԠ0Ь 0me Ltaee$f,e(դݬݬPR4ЬPР4mР eРsРaР\eР$eР,fР(xePЬ0ݬ@@փv0P^ݬݬVr<^UЬTdS1PˏdPP48@HP`hpxXnP?PSjSePS]PSUPSMPSEPS=PS5PS-P S%P SP SP S PߥjnSRЬTdS1ˏdPP48@HP`hpxXnP?PSjSePS]PSUPSMPSEPS=PS5PS-P S%P SP SP S PߥmSPRPQPQQPRݬݬˏPP 5gA#t<<<<<<<1P ?PЬSˏcRR!ЬRТPУRPRPPRPPݬݬ[PPPPPPPЬRТSЬRТRâRPRPPPPЬRТRЬRТRЬRТR ЬRТR ЬRТSЬRТRâRPRPPPPPЬRТRЬRТRЬRТRpSЬRТRpPbPSPsSPPPPPЬTФRТ RЬSУRТ RtPQУPФRâRPRPPQPЬRТSЬRТRâRPRPPPPЬRТSЬRТRâRPRPPPPЬSЬRâRPRPPPP*k^ RPˏPP259=AIM]QeYeUeeeeeEa;?PPPPPPPPPP P P P Pj^SЬUeVЬTdWVWѥS1V@WqT*Nݭ~PRݭPSSoPQQ  SQQ RRSqdFo ~d7o=PRRSRS %oSd|~cd cRPRPݬd˘ dnݬd`qݤ nn<^5UZpTFMݭ.}PRݭ PSSnPQQ  SQQ RRSqdbn ~dSnYORRSRS AnSd|~cd cRPRPݬdd nd nݤm|^aUoT PРVgLݭO|PRݭ*PSSmPQQ  PSQQ RRSqdm ~dsmyNRRSRS amSd|~cd cRPRP矦dЬRݢd#m Y~doЬRݢ5dll|^]UnTPРVcKݭK{PRݭ&~PSSlPQQ  PSQQ RRSqd~l ~doluMRRSRS ]lSd|~cd cRPRP矦dЬRݢKdlЬSУ,Rdnݣiݤkk|^YU~mTPРV_JݭGzPRݭ"}PSSkPQQ  PSQQ RRSqdzk ~dkkqLRRSRS YkSd|~cd cRPRP矦dЬRݢЬRݢŀdkk^uY޼nnWЬ R׬ R1cެﬔjZMmj լ14WRWТ[ݾɱݾj$Vݫ $jPR@UUjVUUjWSWSUU VRnTЬR TЫS?XXjVXXjTRTRXX VSnUxSVTCdUЫR?TTjVTTjUSUSTT VRЬRТWТЬ R׬ R1GDXXxX~iPWPPXPP@gPPXϡXWiެZj+iRXcUiVUfxBgSdGTCdUǒUfxBgS=GTCdUTkU hRRXhW@hP^мRxPFQ@axRRBa^gPŏ߭|^VլլP߭ThѭPRRA RZ RQRQQr#RRA RZ RQRQQwP|~|~߭P ߭gPԭԭޭЭޭ쭓 @|~|~ݭP ߭gPЭP@ݬ߭gPU߭gݭPeP PP@TRQQAQZ QSPQSSUPPPb)Э ЭffPަݬfPЬ|~|~br TPTTr SPSS fP߭fݭPUP^мR  RRBSPPPSPݣ3fݬePTw4|~|~|~|~(ݣ zP{ PQPPRxR~ݣݣ fTP^-VbgYWgZUެSU}WXTEhP`PP<Y%Q?Pߦ jUgcd8PgREbP>ߦ iURcdߦiURcdPUUլ ЬRbߦjݬR%Ѭ ЬRbߦiݬR<^AUߥЬSЬ RBc~dPݬݬBc~dPլ+Ь R޼SBc~ߥ!fvdݏcެ SެRcTcQcP@dAdcc׼ ^\߬&>dPެ2|~?`;P^Q;SB;TcR8;*0;լ_|~ c|~02d~ Aլ|~|~c|~:2d~ P|~|~c|~z~2d~ c(bPbP ߢ>bPc(bPbP ߢCbPP^^^?:M^M1M|~|~:z~2:~ 9P@GzHrEG8OrEE F}@p q=@GzH? ?[7n(00< ^ެScRТPP !@УQ֡ѡ  cPРRBЬQСSS RRRV1CnnU ޮTSPS"P@@RRRQ PPSQQR XЬRբOެUePРSCTSQQ RxTPAPTQQ ЬRբTTЬRЏbTЬRЏbЬP ^ЬQ ԡЬRסСP@:R5ˏRSSSRxPPסСPS@ެQaSףУRˏaB<aЬ RЏbЬ^լPì RnRTn~`dPTVH~`fPT`TjTݮOPPЮRТRЮSB Ю TЮSPS @dPPSѬѬ$PЬ SSSRS bTP TTYˏYRBaR1[ˏYRBa0YS  YSSSPPkPЮ UkTPXЮ SЮWXZWRPBeTVZVˏVBcVZRЬ RRRPR `SP SSYˏYRBaR1cˏYRB`,Ѭ %PЬ R֬ bYˏYRB`Ѭ ˏYRB`PѬ-ЮRݮϐˏRR ЭPЭˏP^|XЬRVЦWW -PeHXTnGR `PRaRTXWW զrXRpXRpRP^ЬPРPpSqSqSЬRЏbjSPsSpSYrSYpYUpU~^pPWVH~ ^fPW`τWjWTRTPd8URRTqU d8UTTPRPST%dHUjUQSPQ@nQPbPUSST۔SsUSSݬR)0^ЬSRâ RRnTVH~V]dPTp"~I]fPT`TjT}+?}#?J䞭JRbRݮPb |~%GЭRբ֮ݮ Pn |~FЭUХVЭRТSC ޮ WFޮVЮUTUD DTTU[ЭRТSCYYUVЮTQTRQRPAeS4PQTPQPTRBeVSPTRBeVRRRSS~[YW TYVЮUZSUZPxZRCgRXQXPTR RP Q{RPQPQCfQXPTRRRPRQPQP{RPPQQZSSU0ZRRk1PЭRբ-{ЬR[nb[ЭpHP ^ЬRPà RRXxRRnRSdSРRnBU `PUpU~=[dP`PS`SjSRRRݬ [XPU |~0EЬPTХSФP@nnWCޮVXSRSBBRRSդ ݬ-ZXХRBݬP^ЬW TЬVЬ UYSUWxYRCgRXQXPTR RP Q{RPQPQCfQXPTRRRPRQPQP{RPPQQYSSUYXЬTUЬ SRSPRPBdQ4PRSPRPSRBdUQPSRBdURRRQQݬ ݬݬ$0X~Y ^ЬPPà VVVrPUPЬPTХSФP@nnXCޮWVSRSPBBRRSФݬUP^}';}; FFЬ ˏ nn1oЬSˏcPP1[Ю RQá PPPà ֮RQbRbЭQЭRѡ1Ѯ1~oPV ЭrEPîTTUUЭQСSЭPTDhޮhЭP^}3|}3tp>ll>Ьˏnn1fЬSˏcPP1RЮRQá PPPà ֮xRQbRbxQЭRѡ1Ѯ1~,PV l.>PîTTUUЭQСSxPTD0ޮ0ZCDޮDYEdޮdTЮSWSR!B0BDPWPˏBdPn1߭ЬRݢϪӞSã UURPà ZZUZUTZTTVRSbSRcRUPb Э!PUVЭRբТSCX1PRVSPb ЭV!PЭRТSCXXTUVRQR AdQQRUVTЭRТP@ޮWDh(ޮ(TURSRPCC(SSRЭRբ VXXώZVЭRբ ТSCU1RV﫜Pb Э PЭRТSCUUTZVRQR AdQQRZVTЭRТP@ ޮ WDe$ޮ$TZRSRPC C$SSRЭRբ VUURVЭPRQBhBeARRVЭSЭRɣR1@ЭRVЭRТSCCϖ1PЬTˏdRR1߭ݫςўRSã WWPà ZZWZWUZUUVRSbRbRZjPb ЭmPWVЭRբТSCX1PRV/Pb Э2PЭRТSCXXTWVRQR AdQQRWVTЭRТP@ޮUDh ޮ TWRSRPCC SSRЭRբ VXXjZVЭRբ ТSCU1RVPb ЭPЭRТSCUUTZVRQR AdQQRZVTЭRТP@ޮWDeޮTZRSRPCCSSRЭRբ VUURVЭPRQBhBeARRVЭSЭRɣRЭRVЭRТSCCuݬ ݭzͤ^X}h}h}h}h}hЬZˏj[[1ЬQˏaRR1Sã VVPà YYVYVTYTTURSbRbRUPb ЭPVUЭRբ ТP@WpRU˘Pb ЭPЭRТP@WWSVURQR AcQQRVVURBgЭRТP@ϘЭRբ UWW$YUЭRբТP@TsPRU?Pb ЭBPЭRТP@TTSYURQR AcQQRYYURBdЭRТP@ ЭRբ UTTϘRUPЭPRQBgBdARRUЭSЭRͣR1ЭRUЭRТP@@F1P[1߭ЬRݢ:͞Sã UURPà YYUYUTYTTVRSbSRcRUPb Э!PUVЭRբ ТP@WpRVPb ЭPЭRТP@WWSUVRQR AcQQRUUVRBgЭRТP@ϴЭRբ VWW@YVЭRբТP@TsPRV[Pb Э^PЭRТP@TTSYVRQR AcQQRYYVRBdЭRТP@(ЭRբ VTTϴRVPЭPRQBgBdARRVЭSЭRͣR1ЭRVЭRТP@@b1PЬTˏdRR1߭ݪN˞RSã VVPà YYVYVUYUUWRSbRbRY6Pb Э9PVWЭRբ ТP@UpRWPb ЭPЭRТP@UUSVWRQR AcQQRVVWRBeЭRТP@ЭRբ WUUXYWЭRբТP@TsPRWsPb ЭvPЭRТP@TTSYWRQR AcQQRYYWRBdЭRТP@@ЭRբ WTTRWPЭPRQBeBdARRWЭSЭRͣRЭRWЭRТP@@}ݬ ݭςͤ^Z VЬRТSzSP{PQPPYSQYYSQQW}f}f}fjjЬPˏ`RR߭ݠ ɞЬRQá TTTWXXЬ PЏ`R΢ЭjPRQbRXPbЭjPЭSգKRTʒPbЭjPЭRТP@UTUЭRТP@ϷTUUL PУRBUWSЭPРRBSTRBYUϧPcЭRTPP@nnSWRQRNPAQQR>PЭPРQASTW~QRBYPP QWTDeRPQbRRYU<PcЭRբ;ЭRЭRТP@PxYRRRR`XЭRТP@@iݬ ݭnЭ^ЬYЩnSЬZЪUˏi[[1ˏjPP1ѣãPã VVå RRVRգVRQRVQQPգLУPХRB ޮ X@ޮWVTQT!PA APPPR QQTRRPХPУRBޮW@ޮTVSQS!PAAPPPR QQSRRP[ ݮY nZ PPP^x [QSЬRPà XX}k}k}k}k}k:̞0RXPb ЭPTX~Pd ЭPЭPРQAUTЬPdXR5ŏmNAPv PˏPnPdgPdHPjPBeR˞TX~Pd ЭPRXbPb ЭePݭݭXЭRТP@ЭRТP@Uϖ P Э%PЭPРQAޮZUAޮWXTUYTRPBYVˏVBVYRݬݭό^}잭ЬR Rݬ R~ݬ%Э}ЬRRâ [[PR`ЭRբl[CPT ЭFPФSЭPРQAޮnЬVC ޮ Y[SVXSR1PBXUˏUB xUXRu[~ՍPT ЭPФP@YPSЭPРQAޮXЬUCޮV[SUZSRPBZWˏWBWZRZiЭRТݬ T%Эa^}\H잭>ЬR Rݬ R~ݬ]ЭЬRRâ [[PR`ЭRբx[~݌PT ЭPФP@nPSЭPРQA ޮ ZЬVCޮY[SVXSRPB XUˏUBUXRXh[gPT ЭjPФSЭPРQAޮXЬUCޮV[SUSRBWˏWBxWRЭRТݬ T^}잭ЬRR R&߭Rwݬ ݬ{ЭЬRQá XXPQ`X~lPU ЭoPլЭRТPЭRάХP@[PTЭPРQAޮnЬSWDޮZXTWYTRPBSVYVˏVBVYRYkݬ Uϟ^[}k잭kЬRR R"߭RTݬ ݬЭkЬRPà UURPbUOPVЭkPլ ЭRТPЭRάЦQЭRТP@ޮZЬTAޮYXSU\xXRCRWQWPTR RP QP{RPQPQCQWPTRRRPRQPQP{RPPQQXSSUݬ V[Э^}}x 䞭n ЬRR R&߭R ݬ ݬЭ3 ЬRPà WWRPbSЭcRWPb Э PЭQСUЬSSVPSVЭRТP@nn[VTEޮZWUYSU\xYRCRXQXPTR RP QP{RPQPQCQXPTRRRPRQPQP{RPPQQYSSUYSЭRբSSЬ RЏbS0 P|^ UެVfpUxUPPPPfPUެ T}UtdRSRRRcPPxUPPPPPdݬdcPPU)PfЬ RЏbPЬ RЏbԢPP,^W SVެTլdrլ!di }Kb d PլЬ PЏ`PѬ PѬԬЬ PЏ`Ь13SxSPPPPdPSЬRS1Ug<TPVЬ PPPPePQPRRdgPR=P߭RCݬ ePPˏ PQPQQVxSPPPPPpVݬ ݬݬ 9PUPݬRdgPR@P߭Rǻݬ ݬPPˏ PQPQQVS1VЬ PЏ`RP4^ЬZTФUU XXЬYY1Y1YfդPEޮVYWXSQSPQPAR3QSPQPSP@WRPSP@WPPPRRPդ_YREnnTRUXSQSPQPAR3QSPQPSP@URPSP@UPPPRRPP߭YeZ^WR)ЬUT SBeBdVWVˏVBcVWRWP^WR)ЬUT SBdBeVWVˏVBcxVWRWP^ЬR޼ SBcnnVЬTUT%uiQ VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17; PEUUTSLZ YXZR3ЬVЬU TBfCeQRSPP@dQXQWˏW@dWXRXCiS$^ЬRТSCXЬ RТSCVSîRxRRRRRcRެެ~ݮݬyPhݾVݮݬdTվ1oެ оо h[޾kf hRЮ Qѡ= R ~ўR.gij$PgRgЮ bQ JD;=hRЮPѠ: RЮQѡR+gij!gRgЮb ]S4TPppdxxdУSDRROPb0RPhSѠ0 SѠS%gijPgSgPcb R+RR1)SS5PPc0SPhRѠ0 RѠR%gijPgRgPbc SSS k ^ݬCmRТTCPФPФ QPQ.Pʏ`ˏ`RBfRRS PPRbSSPPQФTRТUCPХPХ QPQ.Pʏ`ˏ`RBfRRS PPRbSSPPQХUЬPP1PR?P1PhRâ RѬR1ݬݬPPj<0}P<2}PC5Râ RѬR2ݬݬgPP<3}hP2P^UX^ZмSS/S!ˏSPPN?P ʏSЬ[ЫUYU1U 1eWW$ˏeRBRRS PURbSUSTЬRWeW12GR8URSG4V xVVSVRPTRSRc SSSRG PnZѪP0egh&ePen`AP`A P`AdRRcS^e[YZЬRТUТTdXXWPWЬPРSР,RVUV1 UPRP+ХSХ TdXXWWUReVХU1PT@xWPTPPRP1XФUTRФSФTdXXWWV1P SPRPУTdXXWWУSR[Qa?xXWϞ-Gz} fC'cm XӧNKY2/^crbbCW+?m, qe/$I3F,R\Xm-R%b@?ɴtԫe""p\H{:3:*4=f< lx%t ўwR{ LIh^gr`C_q=EjQ)&͘^c%3j^ vk[IG?|d[~ ez!2q-C-o41XoMl=_ F} j9g[hb4w?)dV x{ù5W-h=nZ3YK5Z ~<ʥ(A,pkg14w߳{äv1r<ߟDc) ;X/¶Tt]g[ͣ}"gw ZjIk]j!خ[A(?t^9z t!Ls_C[_OPn ֭?]K&:,$Ӝ\}?(`sc7DN[L]sA,WDh(s˓ĻqD|8Qdw5ux5^Bg73hN-2+qHyѶ|?xE'9-6bg^υ˲ u=wrqA*CvLξ໅A: NN|YB!'X#rõc)?H32/,(qUM`!5|p5ڞ획v#3YvN}W(WMzNp=d<ۛqgQḭ4'O49k{o ˫ `4uP6{7fּ1ܳ4%ie`EYIG!}Y |6ʇ.,MҴ"Ŭ%63pZ  jsQ2")5؋l'+%-8)ZnzۅpqsړKCa'ݦ*RLiduce%;G 9_{ISծG{Mo z;cN}{qF<Oۖcp!o'ÌĻGmT=t7^{L6\)HƅD#C]Ծ`&!؁T)~J)hQir̜:iT}'GMS?.Pb|ndz$eKppF>E7H?۪ YSVϾsƲ6)(fr1^3"Z.Ȫ:`5q7K'?8w:M6!@}u%"VZ8#^A%Q= a;-rC6 ӎ`=-_FI߆aТ&Ûi}n#9@ Q .g -72LmLT@oB`5pCߎhNN*H=PdRv_?!Vdͻ!- I\hh(yY/4w*'ie"1}X8YawТm4õe xcLBaϔ|szNO:dƟһf@>E%@jϤ,ORCڂ11]&ToM}wy4"@P@ {.jo)bX2#-"8IgA`sL)g4:Y*E$leB8C3~84,0hvSq7܏X>;D;`j.\t־ޜ]xUһ:>rR?V7%_I cKTάѶG#R>)hf^ ./0c[-G{/m?B^i.@Hb2Vf4Eloti@~ޝ'ԘسUѭe=_Rf~o3g$ͅ!f:=p`?"Nɲ&.g$GBC Dl1N?hgk'S CՔL3 V?q(ۇhK8=&BۄeNT?Яp!` 0s8b\w3Myg5qQ*-W?Kh>i402\fhSƦ@V:1;=2~8}l@9_<Ԧᆗ B4XfHTc"ΎeuŘnfq:vi "Seւ?T8EhXpQt(@01crR\F }ؚ*L̒G|WwYR7t҃[w[^>pRVgNh^Ff\Ec 4Aփm:4`S60/yG|p9} J-79T0 gh ϶wfˡJ%EXO a'|(S%)|"-ٵҡfx)hpنV#9k|X-W4=1Ib]QzFMҺΛLv4tq ׋Y1/Fab~t,}I` q+کXr<ǹLщ ~BƸ8f [CڛdeYS={~%uEz0䗔0uq<# A%w':Ǧi(a}C ZDҲr: k+{-*G؉992uo j?+k%)a!=7=6la:댋 dTz&.U)8er!yiVԱ¾'te$/Yo.r‡ws&M1VX]1!7>- 5͸%/|@r__&8ۅ*H_yqiK1I#(R}z͊0zoˬ1ޭN F6< yU`liļg|8j*d'9]N>Z 'h`䞱lhA*?d 7:8',vx<#1[_MB{mJKRH![Bxq_fY0S]nXxꦲ3r`$TP~&ALyMaYm坌 s'I`ĮбȓWV3i*0<كv ^p.PM: PCY\M*ktb脅oĩ| `m3BnPZ"ڜ]~[- xǹogҶAqs놤5IrJ@4+<}e֛>Qp `=K.Za{JyNI1|*tq b4.¦B%]rȊ(@͋o6Ey'r5T6\6Sj*6&!H:TUA">@g%;cSj!^15eˢE`̠omhAe|z8d$SI;{=->!S<#&mS=(϶㛢D7GVyHs4;Ovklb;65k?9rR-'qToϬ}Q{L`}/G e#QW෬xXӕ:F{@ZT3{asЗS-Sj bR*L(m|MIYW*9NȖ G@_>E +7eȄsP% $|kxpY}WZ>8r6>NY(fo7J0Fvh%Npt6|U34ɿ"/V\,OQ #tHO FdWC*6̖ME9$᎑b͢ߍV mtFcWmo"sfp*`*ӕ~q\V ЖbAp[gKh^[P媈U}I Q-í.%Uq`SIoO+8p,\E `K@W'!z>$7f㋘;Sie3@(~ʞ6#_!nDí\o[7BΓm:??rl]-nAUPƗ y/1 Tnnb(کG&N9w‰)ۺ":-v/B.3C#)-}D]}YwR|TL ա%ZgVLOg9]8vTgRW&Ydfj^$U=;7'eHƱm'4 B5qGx$&{͙&Eu* 1St!Ue2s k"TTAV~Ѳ}^J^A6X) MZ4ǟ'c!^1܅yuN?*iv=>-P ҁ#ŏ:[;$іIE Vg0.[#uȤ^e햑\ܥkcD@?"ݨ˺-B4{aS騺 k8o$ '~RXS [ 0s$ "~%L3,Okd5!7x "϶\R nS1vpCKUy\WސFSiJƯ=Vk /ov3gRt[{T}7E;B {Y:ӻvhO9vU(Aƞ'aS9kEw_Z„o&움 {%y s?tR1;\o$(C+lV|7XiF BՅqd[W`gp.1 t3zv)zG) )ڰ?c@E\@$CίIbF26 S ˪s ?ϩ]>CH|ʴ6ϻ)PFpK, Q4ZUfz ,6% P'9E4.]iY5Xnsiŵb-2}()-67oceF@+9bp:a(_s-"Wa(A,[|k#O[eW0 DN%q̎#T[E#NE>@= ,+[45%xChL_Cvysvhid @RC)/$eNsm|sSZHL3d=Y}Yp4Q #xe\ڲ`CcEj:ӭ;J2=ݶYtݬ)01PЬRТRݢݢݬ 10ЬRТRݢݢݬ1ݬ ЬRݢݬϖ1PЬTФTФRФ SѤѤTTTTެUeRTRT1~eϘRTRT1ЬRТTФRRݬ=1aPRݬ!1EPR'ݬ1)PФ RФS/ݬP7ݬRTRT~ݬRTRTݬ)1PݬϸPPݬЭiݬ'{SRVˏRQQ UЦTPˏRTxTTxTTTPQU`TT(STST=ݬ%P'Rݬ@Rݬ'1$ЬRТRpR߭ƟpR~ݭAݬ1ЬSˏcRRSݬ'1ݣDݬ1Hݬ1PЬScUˏ/URR@NЬTT[ˏcRxRRRݬ ݬTT)3TˏUTTУRݢ[ݬ /TʏUEhݬ kUЭi ^RЬQSQˏQP@JPhPSSP|Ѭ"hЬPP"%````; P?PP\/<Ѭ 4‚ݬSѬ …ݬ=ˆݬ.ݬݬ$Ѭ1ЬPP>zk\?PPy‹ݬŽݬ‘ݬ”ݬ—ݬšݬwݬh ݬYˏ~£ݬA^VЬRТ TТWլ WWݢƪݬ ЬRݢƸݬUSWqSSSФ TU WRUR;SRRR¤R ~xRP@ݬ'UW&ݬ,UݬUݬ<]~q|^V UVU@TVURRŬRSSݬSdPRVPPRUPSPVUP^сWЬVЦTfRfRSS`S~PjPPЬRТUSUPRP SUePRPURЬPReP PЬSPЬP֬`SPP ^ЬPР}U/RѬ Ѭ`PSQQdPSabPQQdݏ^|RﶗSЬQTQˏQP@oPhPTTP1Ѭ"1ЬPP"$}}}}D P:?PP\CZѬR`PPPѬ2x`PPP_`PPPߣB`PPPѬ1ЬPPA             s Pr?PP1_PPP _PPP _PPP_PPPs_PPPZ_PPPA_PPP(_PPPˏ~ߣߣ^PPP^zXY}}Sii1RxRSS~bP iP%{^P iPެUeSPcRSRS%P"Sc~PRSRS'%^P iPּ1Pˏ_RR1nˏPPPpDt `x``````417P:?PRݢݢ)PS S~aP iP 3k]P iPЬRPSI]P iP S1%ЬRТSУ RТVݢ ݣAPUURVR~6aP iPK\P iPЬRТSЬRPbVУ Rݢ \P iPVU\P iPU1gPЬRТRݢݢSC@PSS<\P iPЬRPSb1ЬRТRݢݢ`PSS[P iPЬRPSb1ЬRТRݢݢoPSS[P iPЬRPSb1jRТUТ U~_P iPRѢ"Ѣ }S RPȈS R PȒSRRS [P iPЬSPUZP iPUR1PSУUULЬRbȦ1PU5ЬRbȭ1PU ЬRbȵ1lPУ RУxRS S~^P iPS(Ƚ;ZP iPЬSPc&ZP iPЬSPcRSRS'USc~PeRSRSYP iPּ1PݬϜPЬRPPPbiPRТW9VSQRPЁTPˏTUURTTPRRWxWRRWW<WW`]P iPYP iPЬRPbVˏVTT URSˏVRxRRxRRRSTUcRRЬS'V~PcVXP iPּ1m:1\PˏRR1Sã RxRRnRTdTУRnBV `PVpV~dϫP`PT`TjTRRHRPSЬRSWP iPS1Pݬ 1Pn1PЬRb~ЬSˏcRRKУRݢQNPSSJWP iPЬRPSb!{}iPP^rXЬVЦRТU7VWSQRPЁTPˏTVVRTTPRRUU4,ЬRТRS SRSbRRcRR1PU4YU1ЬRТRS SRbPSc}PU rЬRТRRRbZ PUPU<ЬRТRTTRdSSbSTRSSSbS TRSSSbSяSPP<^ЬUTRSQЂPPˏPUUSPPQSSP^QѬˏP@PhPQQP^ЬRЬSRSP?RRPQSPQQTPRPQSPQQTT PP^ЬRЬSRSP>RRPQSPQQTPRPSRPPTT PP<^}UЬT1ЬSSTP;STPQSPQQRPTPQSPQQRRJePT;STPQSPQQRPTPQSPQQRRePeŬP^Ѭ PάP^ЬQˏaPP СPРRˏaPxPPPRRR  QQh^ЬP֠Ь QaЬPa<^U}}e䞭eSЬRТcSЭRТ cì T(ЭRѬ ЭP  QР aЭPѬ TNެSЭQ PPcc¡cЬRxcP@P}`b֬ ЭPѬ   QР aTЭ<^MT}N}Fd䞭dì UUSUURSGMPbЭdP(id VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17WYRSU!NPbЭdPЭPЭР ݬݬ ЭPݬЬQЏaЭP,^VXW}h}h}h}hfԞfݬ ЬRТR ~ 9PЭfPЬSУTЭSФЭSФ RB'BSݣSЭSBRR BSTЭRCd1XPUPCgRnTdPЭTB`խQЭPݠ ePTЭfPЭQ ЭPTBTЭPРPT`TЭPРdխRSS TЭRCd1rЬRЏ bЭЭSգ RѣR SЭԦP|^VS}f잭fլ  PPPRBcPPRR  BcPPxRѬ  @UT P8UTRP(PQUQxPPPPxPPPQŬ TPPQ~'SPЭfPݬ>HPЭfPR$BcIPQЭfPЭPQBRЭR ЭP^ЬQЬTQSS SSxSRBRRPPxSRB؅P@kSSSSQS@RCP<^ެTdScЬRТ UdSޣ RbԢ(R Uݬݬ^ XЬSެVfRѣ 1Ь SУRѢrУWUfSޣ8TURxRRR fRТWdT UЬSЬTФ cRУSBRC Ь R*ѢW$Ь RТ Ь RѢW Ь RТ լ 1ެTW֧gRѧBhdRԢbb  bSЬRCPdUeQЬSХPAS@ eRB VZdSVQQQVPPB4PPQԬ 3Q.Ь Q(dPѡB4PЬ PР Ь Q dPѡB4RB Vլ 1QЬ P^ [Y}k잭kRЬbЭRբ4ЭkЭR TT1GPZЭkXUЭREWXPSEiBCRXVXVQbP"ҠVVTV PbRPaQРPabSSEiUЭREWЭRZEЭSx RR Э^)ZX}#j잭jRЬbYЭRIYY  ЭRIYЭRբ1 SѢS1PЭSIRWYRYBVЭRFU1PTFhnDRDPЇQP.Q*PѠ PbRРP QbRСQPQPPbRРPQPQbRСQTTFhVЭRFU1{ЭSx ЭRբ SѢS11Эj^Ь UЬXUWXQWSS SSxSRB︁RRPxSRB更P@7SSSSWS@RCSԼcR5ТTTUSPTUݬ qUPSPScRSP^ЬSм R ~P#RPݬ PTT 2T RRPPRRݬ TePTRP ^hScPRߣ PRޣRRr^TSԭЬd잭dмP ~PP"լ HPݬЬ PPPRP<RRݬݭPЭdSPPSPP SP^мTPЬPРRST!PݬCb~PSSTSTPP^ݬUmP?+J @E>xF>f@ffffff0^ЬRТSÀVЦnլ լ լ@PѬ ѬѬƀPլ%ø<~[Pøô[ø#ð<~6Pðì[ðެ ZjެYiެXh ^( nݬs( حxF^VЬRТ QТSÀPСDXРWÄUÈ[xfffУDZУ@Yݬ ݬС PݠPTUݬ ݬYZXUWݬ ݬYZX[WTD^RWzYЬPР VРUŀPЦD[РZń ňЦ PРXХ\ХXnQQ1>QPP+/77' ?PP11Ц$D1ЬPРP `1Ѧ0 [Z5ŨPݠ8[ZXåD ~Ц PРP2>PP@~ݥDݮ ZXåD~Ц PРP2>PP@~ݥD[ݮZvЦHSЬPР P< ЦLPР8RPRͣ8R~[ZѦ0ݦ0[ZX@Ц$DЦ PРP2@Q@QnQT1'T@Ѧ0 [ZQ|~TSSݮTRR[ݮ$ݮ(Z ŨPݠ8[ZRݮS[ݮZЦHSЬPР P< ЦLPР8RRͣ8R~[Zҽծ |~ݮݮ|~[ݮ(ݮ(Z JѦ01lݦ0[Z1[ЬSУ PР PРQ<ХDR 2PP~fPݠ Uݠ¼1УPȏ`1PS*1P¼„€Pݠn¼1vPЭЭ1e1aЭPP88HXl88888888881+P?PS^*1PgS+1ggS+1g1S*11S%P1PУP1P¼1S)P~PУP`P„bfУP#€PРTTiˆ ˆTjˆŒ€PРTTiŒTjŒSkSkPPЬPРPUUPլ14fPݠP1 P^=\%P\P PP|A\ЏP^KWԮ ЬRТ RТ0ЬPР VРRRTĀ[ЦDYЫXĄZĈ|Pՠ1|BP |~ЬQa%hPh@hhhhlծ 1ЬPРP`1Zߧ ݤ@ݤDYZXߧ ݤ@ݤDYݮ$XЮ0ݦ0YXЬUХ RRQաD,СHS< СLPР8RRͣ8R~ݡDС@PݠPЮ P֮ PwЬPРP`j0YXwЦHRЦLP͢88~YXZZߧݤ@ݤDYZXηߧݤ@ݤDYݮ$XX6ЬRR[P1LP1@ТP`1Zߧݤ@ݤDYZX`ߧݤ@ݤDYݮ$XGЮ0ݦ0YXЬTФ RRQաD,СHS< СLPР8RRͣ8R~ݡDС@PݠhP^UЬRТTĀRТVĄWVSeR)PRPPSP|AR<SSPĄ}dxЬRТR`WV-V(dĄqSeR&PRcPPQP|AR<QQPĄ$Pݬ$ݬTGP^ЬPРPP^]\Pݬr|A\P ^ЬS3R)ݢ|ARУR€RݢPd^FW鸞YZЏt}lhiddipRЬbXެVXfVެ TФUxXQAeP`;dRAbSc/ARbߧPc~b~WZXXfPUdiPPUdiPХRZ;P€UdiPХVЏxp|U6P  ХR€UdiPХ RТ R XХ RТ RТR2@ԦDХ R(@Х R$DTլ1ެ SXxTQAhP` ߧ cPAP`P^|txTPcQ@aRb@RbU行P11 'PB?PTdiPUdiPTT1pզݬUPХ RТLƨ֨UnPdiPdiUP^DWЬSУ VУR€TФUբ0BŏP0PŌQ@$P`ŏPńP@P`UwP”1Pբ;ߧ)ݢP*߭ݢS-LP”FФ8PРP2>Q2@PPQQբާ*ݢPݢФ8PݠP  ЦLPݠ8ЦHPݠ8ݬ ݬŏPńQŌPAP`U PݏU^7YPP[Pļ1iФ\ ФXѤTԤTPiѤPԤPPiФTФPЦ PРP2<Ц PРդݤPi|~ݤݤ[XOݏ [X'#ļ\դ7ФPRUPRUUФTRSRSSݬiĐ3PP#ļ+7;#[XƬŏP0QȌPA0RѪ$bݪ$[X߬ļ [X[XЭ\ЭXݤXݤ\ݬ)PPդd#xdRRN[B@@[XĄRެRbPРP`BļĐ5bZP PPbPРP` ļĐݦ0ݮXXP^ЬRТWǀXЧ\TЧXSЧTZЧPYݧXݧ\RSPPDŽ1ݨVlR(RPPQP|AR<QЬRRSTYZݬ PiPRSTDŽݨLPRDЬTZVYUФR€PРS„PVTUPPݢPݢTPSJSݨɪDŽݨݨlP ^}SЬPР QРRС PѬPЬУXP ^ESЬPР QРRС PѬPЬ У \P^ T||ЬPРR߭߭߭߭ݬ8~PSPSЭ Ф \ЭФXS ЭTЭPPP^ЬPРPݬ ݬ|~|~P i<^ЬPРSÀRТUÄTգ ݣݬآPUkTgЬPРPݠTUüJÔDÐ>ÐUfݣPݣТ8PРP2>PP~ݢ ÐU1P^ЬPРRբ ݢݬ:P€Pՠ„ݢ„ݠgPP^լЬPРP` ЬPРP`P<^ݬ~ﯞPRЬPРPSУUTRdxRRR RNPB@@xR~U4PB@@TB@@TUJPP|^9VЬSУ RУPPТDTРUUߦ+ݬP3У QߣFݬϤ.ߣMݬߣUݬߣ\ݬPP^ﭑYЬZЪTĀ[Ы Ąn7Ь ݮ u  PĈ ļ1ЪR¼1ĀRݢ0Ąݢݮļ1P[PPPPPļ1P]7ݮ  P1Ĉ ļ1rPĄļZ1YЪR¼enݮ-ݮ}ļ1+SiR&PRcPPQP|AR<Qļ1*q@4< VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17$wPļ1ĤĠĜĘZļ16ݮ  P1ļ1UŏP0SЮ RŒRC RѤ\bUUVФTĘФPĜФ\ĠФXĤŏP0SЮ RŒRC Rb\ŏP0SЮ RŒRCRbXĈ1GĄ ݬ6ݮNiR(RPPSP|AR<SV1ݤXݤ\|~2TSiR&PRcPPQP|AR<QѤTΤPSΤTRЬVRXSWЦSÀRТUÄRXTWPRݣPݣTRU%UnЬRТR¼ nݮݮG[PPPPPļ1P4ݮ  P1Ĉ ļ1PĄ1ļĘTĜPĠ\ĤXļЪR¼t`nݮݮ ĄTBSiR&PRcPPQP|AR<QQPĄPPĀR4P^E3XЬSУR€PРW„Vߨ}ЬUUTdP7ˆ ¼uУPi€Pݠ0„ݠ'QȂUdP„=УP2VW;%ȉUdP„ ¼ PPP€P\P^٠RЬPРTЬSSbPcPPP@bScPPP@b񋏀cPPP@bScPPP@b,PSPĄ7ĐݬDݬ2PPP^1RЬPPŽlP^ЬPРQPРRPЬTЬ PPݡPݡTPRޞR'P^ЬQСRЬ\ЬXݬݬQ PP„0ݬݬݬ ݬ„€Pݠy€RݢP^0UЬPР RРQPТDWРXVŔЬTTScPԢ,eŚTcPšTcP ŪTcP ,7PŴTcPŽTcP TcP ,PPVݢ,WXڝPP^ 0UЬPР RРQPТDWРXVЬTTΜScPԢPETcP TcPP$TcP TcPPPVݢPݢTWXCPP^ЬPР RРQPТDSРTPլPЬTPݢPݬSTPP ^ЬPР PPQաD+СHR< СLPР8SS͢8S~ݡDС@PݠP<^ЬPР SݬPPRPУHPݠ8ݬRHЬUХ RRSգD.УHP< УLRТ8TPT͠8T~ݣDУ@Rݢ(P^S.Rݬݬ ݬݬTPPP|^ЬSУ VУPUЬPIˏPTxPˏQxˏRŏT~ŏQ~ŏR~S\RxRP@|Qa@xQάPPaPRRPxRP@@HЬTФ PPQաD,СHR< СLPР8SS͢8S~ݡDС@PݠP|^ЬQС RСPPТDTРUݬQPSPТLPݠ8ݬSLTТLPݠ8TUЬSУ RݬPPP^;,YЬQС XСPTШDZФ[ЬPsˏPUxPˏSxˏRďUďSQWŏRVURRSV WzPPPPRxRP@|Qa@xQάPPaPRRPxRP@@LZШLPݠ8Z[ЬQС P@ԣDPP^ЬSУ TУRRQPФDWРXUVˏ`Yȏ`U1УP`1Ѥ0 WXդ ЬRТ PՠDݠDР@PݠuЬPݠݠݠ ݠݠݠWUVX դ;ЬSУ RբD. |~ݢDТ@PݠѤ0ݤ0WX YP^ЬPР XРSÀTШDZФWÄÈÈPЬUU Ѭ 1УYУ RR[Ь PRPRQPPQQ УPPUPVPUVVŏP0PnjR@$P`ݣ ݣŏPDŽP@RbWPnPèPݠ8ZW1Ѩ0 ZW"ը ЬRТ PՠDݠDР@PݠЬRRY7ݣ YR~YZݮWծݣ YR~YZݮWeЬ RR[5[R~Y[ZݮWDծ[R~Y[ZݮW'ШHTЬPР P< ШLPР8RRͤ8R~ZWN|~[Y|~Zݮݮ$W ͐Ѩ0ݨ0ZW%ը;ЬTФ RբD. |~ݢDТ@PݠUݮWnÈP< ^ЬPР RРSУDUЬQТ PРP2P2YYPP~CPYPYY~HPPP^TYЬPР WРPPЧDZРXЬRRdUeRPP~OdScPV1ReRPP~TcPReRPP~YcPVeP`RcPRPR߭ocP RcPRcVSRbb]cPVRSVm߭߭߭ݬ ݬݬŏPȄQȌPARbX\dPPԼŏPȄPȌS@$Rbݼ ݼ@RbXcPYPYPZ9ЧHRТ8ЧLRТ8Ч RТRТӟ< @~YXDdPDPZV3|~ݼ ݼ|~ZYݭX qcXcݭXrcYPP^լPЬRТR€Rݬݢ$ݢcPPXЬV( TЦ Rp4VpV~<RnRRgHR~aUedHPjPpV~<RnRRgHR~edHPjPpV~<RnRRgHR~edHPjP( h( ̭Э ЭЭP^ЬRТ Rp4VpV~ެ T<RnRRgHR~aUedHPjPpV~<RnRRgHR~edHPjPpV~<RnRRgHR~edHPjP( ^ЬRТ Rg4VpV~ެ TndRgHR~~`UedHPiPpV~nRgHR~edHPiPpV~nRgHR~edHPiP( ^ЬPРPPݠRaPP^ЬPРPPݠaPP^=M[>MZ+MY T|WWMPLMR WТRz7RТXz,P{WPQPP,MVSդ,PSЦVS,L\*P\yPPQP|A\<QQQi}bAkjPPVPR,SRW9LUPPX|\լS,Р\\QUQQPRSRW@1Q^ЬPРPPРRݬR~_RI`P@AK7@AK7@AK7@AK7ƙ?+J @E>xFA!hA!hIA!hA!hA!hIA!hA!hIA!h^RPլ RЬPP֬P PP^ЬPРPlQլ%Q QPQQAhPPP^WUTݬݬPPЬPРP|PѠPݬԥݬǥѭ ѭPˏѤˏѥЬRТ P $Т P (PЏ`SТ PР PРQ<ФV 2SSSVcVTSD YSSU-P2CQQTQS2CdQQ2CUZV<TVDTUD SSYZ1PYX1ZSSXU*2CQQTQS2CdQQ2CUUXZU2ESSSj2EVdTT7T#zP{PQPPT>SSSVcVTSD XUfTT9T%zP{PQPP PT>SSSUcUTSD ZVXU<TVDTUD SSYZPPPЬV(_P,VgP,, U_PVgP UHPʏPx(PPP$(($PPPTT STS$$T(PUUYY12P ^R(^>S,ݬcP,,PݬcPPʏPx(PPP$(($SSSQQ PQP$$Q(SP^%QRBRB PP^TѬPެScP2@QQRQcQP2@bQQЬP2@P|^ySPЬR2B`RR1RU2E`RRR2EVgTT:T&zP{PQPP PT>RRRVbVPR@ ЬR2BUgTT:T&zP{PQPP PT>RRRUbUPR@ ^SjTT=T#zP{PQPP!TPRRP`PR@  ^}Rݬݬݬݬ ݬݬ*PS ; ;SPθ^/SŬWݬ;PPW;PPTPTRBB Tݬݬݬݬ ݬ`PPWx  |~TxTRȏRTR~x~ݬx~ݬ? ';VxRVRv;UPV;VRB0BTxd~ex~ex~ePeeeVxRVR ~x~ݬx~ݬ|~|~, q: |$,4ޮ4UQ5PQP@4RQbЮ4R@RbQRRTЮ4R@RTbQQRRЮ4TBRbTx(TRR$((`P,R$B $$(,0,RR9R 8,(RWR[RTRZdYZ[1b9W8VPUYP@RbTARdb@RbUYXxXRR11Ux(URR$X((XP,P$@ $$(,(,RRgR f,( 8ޮ8UT4TRB8PT`Ю8PBP`TPPQЮ8PBPQ`TTRRЮ8TBRb PXZ[1YTx(TRR$((_P,R$B $$(,0,RR6R 6,(Tx(TRR$((^,R$B $$(,0,RRs6R 5,(Tx(TRR$((`P,R$B $$(,0,RR5R 5,(,RR5TdR 4,d;d5R PP^XԮnԮެ [kYZWG (ЮnjѮRkV(GfBfG G ֮ZnRѮR ЬSSTSTPcRBcSSTxRRPxRR  P <^TU.ЬSURBcPU`BP`UPPQBPQ`UUSSЬRCR ^aRx(SS$((_P,P$@ $$(,0,SS3S 3,(P^\,RR3R 2<, ^ SN R}b枭bѼЭbP&PЭbP߭ݭO2PЭbPcխѭ ЭbЭPgѭѭ ЭbέPЭP^VD@P@<~?2P@PDTTS@RC TլpάWW@ W UUWRnRRgRnTW}j7PթЬPЏ`Щ}jP}jkP$[P^ЬPР SРTެRbԼ߼xbQ޼ PA`aPbPެRbbԼ߼xbQ޼ PA`1PbPЬQ$aЬP(`a\Q`XSެRbbQ ߼QxbQ޼ PA`PbPެRbb S "P߼ SxbQ޼ PA`PbPЬTd ЬSdddcЬ Td ЬSdddcP^ЬRТ RТ$nТ(VެWVg15MX&[ZYPVRRgRPxVR޼ PB`hPVPVRxRR޼ PB`hPVPVRxRR޼ PB`hPVPVSSg||~VRxRR޼ PB`kPSPVSSgpȮ"pŮ~VRxRR޼ PB`kPSPs r`Ϥs `ЭrЭpϗ~p~ pPsb/\}cq VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17?[nnP`PbPiPnP`PbPiPaPiPaPiPrPd4DPfFPd8PiPq@ ZPrPd4DPf)Pd8PiPլHЬPР RРQPТDTРSRURTRSjTUSjFPЬPР RРQPТDTРSRURTRSiTUSiVVg1PPT^ ެ nѮ 1ެоX޼x TDXR2bQ VxVVFX 2 ZZRRQW UxUUEX424PPRRW SxSSCX020XXWNWЮXRDR2bWЮXRF,2,YYRRWTЮXRE<2<[[RRTЮXRC828SSTNTXXPRRXxZRRXQXNX(SS[RRSxYRRSWSNS$PZоTFdR2bSEdR2bRRSSWоSFcR2bTEcR2bRRTWWX[YоRFS2cSER2bRRSSTPоRFS2cSER2bRRSTTRXRX@PR@ @΀n΀RgRRvRRVRtettRvRRVRLetLRvRS4M[Rn߭߭lnTРQnUAnVР РQnWAbnXРnYРnZ`ݭݭݭݭݭݭÏ M^勺RLЭLP:âL\n\S `PSgCSPdzEPjPP^ЬRb-&dP`P ~bP`P ~>RPPP^Ь RR ݬݬPb bPP^ݬMPPPR.ݬ3PPݏR^QTެScccPRcߤZݏ.RPnew_context() returned in coswitchЬPЬQ^`]\[ZYXW V$U(T,S0R4լ a^]\}~{3a^С]С\С[СZСYСXС WС$VС(UС,TС0SС4R@@@4LTLT\4D< dl<4$,4L\|tLlDt|pR0 `  8  P p 8 hx08H(HP(0@`@Px@P`  h`hpt , 0 8  @VAXCRTL CMA$TIS_SHRLIBRTLMTHRTL DECW$XLIBSHRDECW$TRANSPORT_COMMONĎȎ̎Ў XCNV8 cnv_c_dblK cnv_c_intPԂ cnv_c_strcnv_csetl cnv_ec_int<cnv_eint cnv_inṫcnv_realCcnv_str0@ cnv_tcsetcnv_tstr/ $deref(Ltmp_strP dp_pnmcmp(x bi_strprc $strprcl itos 0ston cvpos= rtos ̒cstosK s8         XDATA XDEF def_c_dbl(@ def_c_int(h def_c_str<def_cset4ؓ def_ec_int(def_eint44def_int4hdef_realLdef_str(ܔ def_tcset4def_tstr) sXERRMSG<err_msgirunerr4drunerr? s<hXEXTCALLXextcall sX  XFCONV hYabs 0Ycset(XYinteger( Yreal(Ystring(ИYnumeric@ Yproc sh XFMATH Ysins XYcoss ̚Ytan \Yacos Yasin ̜Yexp \Ysqrt Ydtor{ Yrtod{ Yata0. VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17Ân ܟYlog/ sԹ XFMISC Yargs@LYcalloutt Ycharl,Ycollect آYcopy Ydisplay<4 Yerrorclear8l YfunctionT Yiand tYior $Yixor ԩYicom XYimage0Yishiftt Yordl hYnamesܬYrunerrp LYseq  XYsort(trefcmp,tvalcmp, شtrcmp3 tvcmp4 Ysortft |nthcmp| nth Ytype YvariableM s     $XFMONITR XFSCAN Ymove Yposh Ytab s XFSTRؽYcenter ܿYdetab YentabH nxttab Yleft\ Ymap Yrepl Yreverse 8Yright Ytrim sؽXFSTRANL Yany xYbal Yfind Ymany Ymatch DYupto s      XFSTRUCTYdelete c_getT 8Yget Ypop HYkeyYinsert YlistYmember xYpullt c_push YpushD c_put YputD Yset Ytable: s  XFSYS $Yclose Yexit4 Ygetenv| Yopen< Yread YreadsdYremovePYrenamex ,YseekYsystemX LYwhere| Ystop YwritehYwrites( Ygetch<Ygetche< Ykbhit (YchdirP xYdelay` Yflushi s$   1>MH4 ld~kg4y`zLmI#opnƐIf譻xRx穸W]L: lȷ٢SB:hЍ𩱦i`$?>Q\eGRb)=aܩMRk,WB^)]L g'1@>{0yi|*h =KSc29Ro`SOr^ +ނr=6fV˭EB%J+ʄ9RwGa(rk8Xnn) Qo}tH`QUUG^HX7lg_PykE1dè?_[jy4~Ds;t<͂8/S$ G= ʑ|t]\?@L07VI1{QĒa3rf c7ZvT-zWv;o> rsx& ƙEyoP  aGQ>HR-0pl^_F>rȉnAL~U(6lq }#nuDXfR1]-&R~UO8;t79V9F0{BvHgݑcWa,~&<꩕4 i4/lݎUTXD4J[43ecQbr".ha@x];-`=E$p^q̷+:36S,E%O&/ۧsؿuM&B_s;o`AK Mg0&]UPB 1D p_a#`K"7nCC0`R~xT!}M?hR($@Vr;G8Q/HCCKv 5\[$}&/'N[ˮKɟԆ;) @ UMC9b&)etj(iTן[)&D"R`r_b+u?EZ#.S%(B԰ ^ pWd<E#*%o`ІEeɒh[;C,'-~ ԜiGu~(cvC:޻ ݰ"&A¾M_{rEx/rp93AXZH7/[U<F7&*BB&ҽ}ھ]EI~V@z-Awb+kip7!ydy$zf~{ (gSܻh_='%'"}U |}2?y,k>p!^Zet83>FwnqOY}F̔2$udU.G,mrƲ@xmIu1 ޏ]̏w9)*xe\P xkʠ8ңىWCu/(9L*FPLWMR*|1+9.f C^ ŝHVBGIإARs5Twu&)v}Cty(!ٮڍ <:Mo l|0~=Vwж8 S?T%Fs *U¡Ig -|[9Q0yTeNى̲3wZ }" |R~|HѠ yq4(i{;3XDtO^;6ί|'B ㏾8$/d0P4C? 8yY_l鐊|aDϥ.b OD\4. Y+p3utfz!=ea!3 c]]AE4d l`ps_-moL9 5 Joˏcl뿾]E5mXhs|lu$Ȭ luhA71&[p%fuY:V/2p&3Bb,#g&mKl1.2I^@E9vGHb+R&*K4&t {1 o`-o!kahОu#|H3]My-v {U_ {?ՙ$ BR_dNQzMtu'kslaƿ'|h 9+UA] ݾ#/A.Rx 6<4O}lwb7L'dk6D Nl|7aR/9gk"Q╟m|\P&?!`G8 # NN\pq>xw_{~?^GQNw89]G'] &q8r? w!:G_0R^T592o'BjI# KR-<Ӆ m__.-yla4PM nr=z}Hwro,Q=#T.p%PK3&"2 c1lT3kJiҼ:uR(ܮRf Q^o<_7iLV(D{:C d$*߷s9r BLtID D n2\OMdX.K^! }THkj9Rl`$sec1L;pUhU 7ڣR1z]I%}vZaNnj36i\퀊8՘$Ә-g)}g J?W"z#Z[igN pXe BTy"ShY;G] ]';+T#ʨ6zw*XiҰYUZ[Zv)%y ~.X\ʥZ9]]bSMlɃ?~ЎinC;Ȭ~Ko^hmGt޴PTjfo"ı/,m*(pK3vux*?tjTK<[p iLD!HcrSbЍ2>5e@_!3}Eu| ".x.'xcW}9q-F6o)hI(7BiENEعDVwre m G@&*x,g8n(8Fuj2DݽءS˭i3na 3;ݤ M `n*C2!!NuUt:%7=GaaA ) ~؞BfG=JV9|͏D}HIsxy3 np B;ij==⣆/c5;)*~{5\Q;4ee@L=zC5oa>HP2kfid}ί$H[*]o(~e[$|B:-&pОߜl!" y8Wnɞ򬿞}O!nԨZ$aGO/KvX_k"Kz1:]A}ĉ,fO>cLPSf¯*ƿ*o\QS֔AI7խ8T>ӝQзM`,YӷZ_w}9>9&Ag&~M6$lf^.@ҥ2Q wτKsǶ9 _^U5Oy(P ni4ndӮqַS|]døLΪJBfK³P>809f-鞷 Bo-nث* 24NtF"Q3YU(]""!]v~%?U]:ܵԮ#j7NK{ȴs,_GAu#b[yXw 4Sf1oAlRTPv)ٚhWp NTS;ר;@1:7D_GGJC/Tph2,BKdN>vc0A(.Xb,R)/vrrsB1n=&0 a*dSQ a2 (:yDYM EKC<%A珇xA8.恆FrmvB9w{6'MT X9_HRN GieiT*.։ZL*}I%O h1 +V~Ƈ]ÙP,\mV*Ʉh~0gTb[.ֻPa>秦z$G|(Ы)N H3~w2{0};Z޻a Rl')~p`h7c.mb~g +L`n. n&j4UtyK؋ WOdb.Fm;K4+QFr-5hS':̽ȫz;X1ǺSGdXM qL tɿ: gV 9viy sk8 fQuDe!hmm/0owJbD0PK%g͕^Mw7rvgR|ҊӢ@A"ϯMUlp)J{6Pt ^U1qFB SJƮ \G_O=@t9r LwopenlmakeIconX wmap do_config< setheight8setwidth8< setgeometryb warpPointer0 seticonlabel|setwindowlabelQ setcursor( setpointerzt setdrawop Hrebind4|setclipA unsetclip& getcanvas setcanvaslseticonicstate seticonpos geticonpos0 moveWindowFmoveResizeWindowhx setfillstyle< setlinestyle setlinewidthN8resetfgD |setfgxsetfgrgb@ 4isetfg setbgsetbgrgb@ isetbgO\setgamma@ setdisplayX setleading setimage3@ toggle_fgbgq getdisplaye getvisualP lgetpos\ getfg, getbg,  getlinestyleLl getfntnam,getpointernameD getdrawopT0 geticonicpsetfontmhandle_exposures resizePixmap8L handle_config0handle_keypress handle_mouse eraseAreacopyArea  animHelperl animate  getdefault@X  mutable_colorget_mutable_nameh@ set_mutable4 free_mutable] freecolor.blimagestrimageTgetimstr ulcmp  getximage readimage getpixel_initPgetpixel query_pointerhT query_rootpointer  SetPattern"SetPatternBits 4#remap0% seticonimage' dumpimage|* loadimage`, nativecolor L-lcolor -xcolor. raiseWindow*. lowerWindow*.getactivewindow' 0walert/ s ٿ7zm VMS.BCK* @ [V9.BINARY-BIN]ICONX.EXE;17+   1  YXRWINDOW0strnchr)0evquesubA1 wgetevent2wgetchne$2wgetchet 43wgotoH|3 mystrncpy$3 wlongread4wgetstrg 5xyrowcolX 6qevent 7setpos8setsizeh9wputstr9 parsecolor; colorphrase` ArgbvalBreadGIF CgfreadEgfheader FgfskipGgfimhdrx Ggfmap HgfsetupHIgfrdata4|OgfrcodePgfinsertWpPgffirstT Pgfgen` $RgfputRwriteGIFK Sgfwrite Ygfpack|Zgfmktree` Zgfout d[gfdump@ [palnum\\palsetup _rgbkey;X` parsefonta getpattern<,b parsepatternud parsegeometry5ewattribrectargs docircles^ genCurve4 curveHelperX drawCurve sicmp si_s2i1 si_i2s> s0 59      ߤ  XFXTRA LONG0 longwriteo R 0 MEMORYmemcopy#ćmemfill#  SAVE TIMEgetitime`Hgetctimemillisecg 7Y%B,3REDIRERRLredirerrT L+ .MAIN."COSWITCH . BLANK .XWINDOWtranslate_key_event: ! ALLOC ܉salloc[ 8allocJ ܉*[V9]CLEAN.COM;1+, N./ 4-6r0123KPWO560>(U70}U89Jj$GHJ$! $! Clean up unneeded files after building VMS Icon. $! $ set noon $ MSG = f$environment("Message") $ set message /nofacility/noseverity/noidentification/notext $ purge [...] $ $ delete/noconfirm/nolog icon.hlp;* $ delete/noconfirm/nolog [.docs]foo*.*;* $! $! clean the source directories $! $ set default [.src] $ @clean $! $! clean the test directories $! $ set default [-.tests] $ @clean $ set default [-] $! $! clean the ipl directories $! $ delete/noconfirm/nolog [.ipl.procs]*.u1;*, *.u2;* $ $ set messag8q VMS.BCK N6r[V9]CLEAN.COM;11E;1Ne 'MSG' $ $ exit 1 e*[V9]DOCS.DIR;1+,./ 4-6r0123 KPWO56Y7Y89Ҋ;vGHJI IPD112.PSN IPD236.DOCP IPD236.PSO IPD237.DOCR IPD237.PSQ IPD238.DOCT IPD238.PSS IPD239.PSU IPD241.DOCW IPD241.PSV IPD242.DOCY IPD242.PSX IPD250.DOC  IPD250.PS W IPD251.DOC^ IPD251.PS] IPD255.PS  IPD258.PS` IPD259.PSa IPD261.PS IPD46.DOCMIPD46.PSLREADME.Z TR90-6.DOC TR90-6.PS*[V9.DOCS]IPD112.PS;1+,N./ 4-0123KPWO56s^7Вxe89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 07:58:28 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}b ind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn s9cxE VMS.BCKN[V9.DOCS]IPD112.PS;1H troke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0  def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1248 672(Supplementary)N 1792(Information)X 2230(for)X 2353(the)X 2480(Implementation)X 3047(of)X 3134(Version)X 3421(8)X 3481(of)X 3568(Icon)X 1 f 2185 864(Ralph)N 2396(E.)X 2485(Griswold)X 1501 1008(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 1296(1.)N 712(Introduction)X 1 f 732 1420(The)N 878(Icon)X 1042(programming)X 1499(language)X 1810([1])X 1925(is)X 1999(fairly)X 2194(stable)X 2402(now,)X 2581(although)X 2882(re\256nements)X 3277(and)X 3414(new)X 3569(features)X 3846(are)X 3967(added)X 4181(occa-)X 612 1516(sionally)N 890([2].)X 1029(The)X 1179(implementation)X 1706(of)X 1798(Icon,)X 1986(on)X 2091(the)X 2214(other)X 2404(hand,)X 2605(is)X 2683(still)X 2827(changing)X 3146(constantly.)X 3540(Besides)X 3813(changes)X 4096(made)X 4294(to)X 612 1612(support)N 872(new)X 1026(features)X 1301(of)X 1388(the)X 1506(language,)X 1836(changes)X 2115(are)X 2234(made)X 2428(to)X 2510(correct)X 2754(errors,)X 2982(improve)X 3270(performance,)X 3718(increase)X 4003(portability,)X 612 1708(accommodate)N 1088(the)X 1216(requirements)X 1665(of)X 1762(new)X 1926(compilers)X 2272(and)X 2418(operating)X 2751(systems,)X 3054(improve)X 3350(readability)X 3722(of)X 3818(the)X 3945(source)X 4184(code,)X 612 1804(and)N 748(so)X 839(on.)X 732 1928(The)N 877(book)X 1058(on)X 1159(the)X 1278(implementation)X 1801(of)X 1889(Icon)X 2053([3])X :Ft: VMS.BCKN[V9.DOCS]IPD112.PS;12168(is)X 2242(based)X 2446(on)X 2547(Version)X 2822(6)X 2883(of)X 2971(Icon.)X 3175(When)X 3388(the)X 3507(book)X 3688(was)X 3834(written,)X 4102(Version)X 612 2024(6)N 679(was)X 831(fairly)X 1032(new.)X 1213(The)X 1365(book)X 1552(is)X 1632(a)X 1695(snapshot)X 2002(of)X 2096(the)X 2221(implementation)X 2750(at)X 2834(a)X 2896(particular)X 3230(time)X 3398(during)X 3633(the)X 3757(\256nal)X 3925(phases)X 4165(of)X 4258(the)X 612 2120(development)N 1059(of)X 1159(Version)X 1446(6.2.)X 1619(In)X 1719(fact,)X 1893(this)X 2041(snapshot)X 2354(itself)X 2547(is)X 2633(slightly)X 2905(out)X 3040(of)X 3140(focus,)X 3367(since)X 3565(the)X 3696(implementation)X 4231(was)X 612 2216(changing)N 926(even)X 1098(as)X 1185(the)X 1303(book)X 1483(was)X 1628(completed.)X 732 2340(While)N 953(the)X 1076(fundamental)X 1502(aspects)X 1759(of)X 1851(the)X 1974(implementation)X 2501(have)X 2678(not)X 2805(changed,)X 3118(there)X 3304(have)X 3481(been)X 3658(many)X 3861(minor)X 4077(changes,)X 612 2436(and)N 748(in)X 830(some)X 1019(respects)X 1298(the)X 1416(source)X 1646(code)X 1818(now)X 1976(differs)X 2206(noticeably)X 2560(from)X 2736(what)X 2912(appears)X 3178(in)X 3260(some)X 3449(places)X 3670(in)X 3752(the)X 3870(book.)X 732 2560(This)N 895(report)X 1108(is)X 1182(designed)X 1488(to)X 1571(be)X 1668(used)X 1836(in)X 1919(conjunction)X 2318(with)X 2481(the)X 2600(implementation)X 3123(book)X 3304(and)X 3441(source-code)X 3852(listings)X 4104(of)X 4193(Icon.)X 612 2656(Section)N 874(2)X 936(describes)X 1257(the)X 1377(most)X 1554(signi\256cant)X 1909(differences)X 2289(between)X 2579(what)X 2757(appears)X 3025(in)X 3109(the)X 3229(book)X 3411(and)X 3549(Version)X 3825(8)X 3887(of)X 3976(Icon.)X 4180(A)X 4259(list)X 612 2752(of)N 699(corrections)X 1076(to)X 1158(known)X 1396(errors)X 1604(in)X 1686(the)X 1804(book)X 1984(appears)X 2250(in)X 2332(Section)X 2592(3.)X 3 f 612 3040(2.)N 712(Recent)X 969(Changes)X 1282(to)X 1369(the)X 1496(Implementation)X 612 3232(2.1)N 752(Maintenance)X 1217(of)X 1304(Scanning)X 1638(Environments)X 2142([Section)X 2438(9.6,)X 2578(pp.)X 2706(158-162])X 1 f 732 3356(String)N 947(scanning)X 1252(saves,)X 1466(sets,)X 1626(and)X 1762(restores)X 2032(the)X 2150(scanning)X 2455(environment,)X 2900(which)X 3117(consists)X 3391(of)X 3479(the)X 3598(values)X 3824(of)X 5 f 3914(&subject)X 1 f 4240(and)X 5 f 612 3452(&pos)N 1 f 793(.)X 853(Two)X 1020(problems)X 1338(with)X 1500(nested)X 1725(string)X 1927(scanning)X 2232(have)X 2404(been)X 2576(\256xed.)X 2776(The)X 2921(\256rst)X 3065(problem)X 3352(occurs)X 3582(when)X 3776(a)X 3832(suspended)X 4186(scan-)X 612 3548(ning)N 776(operation)X 1101(is)X 1176(resumed)X 1470(after)X 1640(the)X 1760(scanning)X 2067(environment)X 2494(has)X 2623(been)X 2797(changed)X 3087(in)X 3172(the)X 3293(outer)X 3481(scan.)X 3687(Consider)X 3999(the)X 4120(follow-)X 612 3644(ing)N 734(case:)X 5 f 900 3788("abcde")N 1209(?)X 1290({)X 1011 3884(\("xyz")N 1251(?)X 1332(&null\))X 1573(&)X 1663(\(&pos)X 1908(:=)X 2014(3\))X 2122(&)X 2212(&fail)X 1011 3980(write\(&pos\))N 1011 4076(})N 1 f 612 4220(The)N 757(change)X 1005(to)X 5 f 1090(&pos)X 1 f 1292(occurs)X 1523(in)X 1606(the)X 1725(outer)X 1911(scan,)X 2095(so)X 5 f 2189(3)X 1 f 2254(should)X 2488(be)X 2585(printed.)X 2853(Formerly,)X 5 f 3194(1)X 1 f 3259(was)X 3405(printed.)X 3673(This)X 3836(was)X 3982(because)X 4258(the)X 612 4316(inner)N 801(scanning)X 1110(expression)X 1477(restored)X 1760(the)X 1882(outer)X 2071(scanning)X 2380(environment)X 2809(it)X 2877(found)X 3088(when)X 3286(it)X 3354(was)X 3503(invoked)X 3785(and)X 3925( "not)X 4051(the)X 4173(one)X 4312(it)X 612 4412(found)N 819(when)X 1013(it)X 1077(was)X 1222(resumed.)X 732 4536(The)N 879(second)X 1124(problem)X 1413(occurs)X 1645(when)X 1841(scanning)X 2149(is)X 2225(prematurely)X 2636(terminated)X 3002(by)X 5 f 3107(break)X 1 f 3306(,)X 5 f 3351(next)X 1 f 3501(,)X 5 f 3546(return)X 1 f 3754(,)X 5 f 3799(fail)X 1 f 3901(,)X 3944(or)X 5 f 4036(suspend)X 1 f 4336(.)X 612 4632(Consider)N 921(the)X 1039(following)X 1370(case:)X 5 f 900 4776("abcde")N 1209(?)X 1290({)X 1011 4872(p\(\))N 1011 4968(write\(&subject\))N 1011 5064(})N 900 5218(procedure)N 1295(p\(\))X 1011 5314("xyz")N 1224(?)X 1305(return)X 900 5410(end)N 1 f 612 5554(Logically)N 949(this)X 1094(code)X 1276(should)X 1519(write)X 5 f 1716("abcde")X 1 f 1988(.)X 2039(Formerly)X 2368(it)X 2443(wrote)X 5 f 2659("xyz")X 1 f 2835(.)X 2886(This)X 3059(was)X 3215(because)X 5 f 3503(return)X 1 f 3742(did)X 3875(not)X 4008(restore)X 4258(the)X 612 5650(outer)N 797(scanning)X 1102(environment)X 1527(when)X 1721(it)X 1785(caused)X 2024(the)X 2142(scanning)X 2447(expression)X 2810(to)X 2892(be)X 2988(exited.)X 8 s 612 6144(IPD112a)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 3855(December)X 4132(28,)X 4228(1991)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Implementation)N 1 f 732 796(Consider)N 1047(the)X 1171(example)X 1469(on)X 1575(pages)X 1784(159-162)X 2077(of)X 2170(the)X 2294(implementation)X 2822(book.)X 3028(The)X 3179(\256rst)X 3329(two)X 3475(diagrams)X 3795(are)X 3921(the)X 4046(same.)X 4258(On)X 612 892(the)N 735(third,)X 931(the)X 5 f 1056(bscan)X 1 f 1293(instruction)X 1660(is)X 1738(executed,)X 2069(pushing)X 2347(the)X 2470(current)X 2723(values)X 2953(of)X 5 f 3047(&subject)X 1 f 3377(and)X 5 f 3520(&pos)X 1 f 3701(.)X 3746(It)X 3819(sets)X 5 f 3965(&subject)X 1 f 4294(to)X 5 f 612 988("coconuts")N 1 f 1013(and)X 5 f 1158(&pos)X 1 f 1367(to)X 1457(1.)X 1545(The)X 5 f 1700(bscan)X 1 f 1940(instruction)X 2310(needs)X 2521(to)X 2611(return)X 2831(a)X 2895(pointer)X 3150(to)X 3240(the)X 3366(saved)X 3577(values)X 3810(of)X 5 f 3907(&subject)X 1 f 4240(and)X 5 f 612 1084(&pos)N 1 f 793(,)X 833(so)X 924(it)X 988(constructs)X 1333(a)X 1389(variable)X 1668(on)X 1768(the)X 1886(stack)X 2071(and)X 2207(suspends.)X 5 f 917 1180 MXY 3134 4320 0.00 45.00 497.00 730.00 startFig %!PS-Adobe-2.0 EPSF-1.2 %%%Creator:Cricket Draw 1.1 %%%Title:ipd51.fig1 %%%CreationDate:1/9/90 1:36 PM %%%DocumentFonts: Helvetica %%%+ Times-Roman %%%BoundingBox:0 45 497 730 %%%Pages:0 %%%EndComments /vmstate save def [] settransfer /$cricket 210 dict def $cricket begin 1 -1 scale 0 -730 translate 2 setlinecap /d /def load def /b {bind d}bind d /l {load d}b /e /exch l /x {e d}b /C /closepath l /CP /currentpoint l /SH /show l /g /gsave l /G /grestore l /i /if l /I /ifelse l /v /getinterval l /V /putinterval l /W /stringwidth l /SG /setgray l /N /newpath l /M /moveto l /L /lineto l /R /rlineto l /T /translate l /D /dup l /* /mul l /+ /add l /- /sub l /? /div l /ma {* +}b /h {D * e D ma sqrt}d /np {} d systemdict D /setpacking (known D {/packstate currentpacking d D setpacking}i /pack? x begin /settransfer load /setscreen load end /setscreen x /settransfer x systemdict /setcmykcolor known not { /setcmykcolor {pop pop pop pop 0 SG} d} if /dt [ currenttransfer ] cvx d /ds [ currentscreen D [ e ] cvx /devSpot x ] cvx d /jp {e [ 3 1 roll aload pop counttomark -1 roll aload pop ] cvx}b /settransfer {dt jp settransfer}b /macvec dup where not { 256 array d macvec 0 StandardEncoding 0 128 getinterval putinterval macvec 16#27 /quotesingle put macvec 16#60 /grave put /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registersans /copyrightsans /trademarksans /acute /dieresis /notequal /AE /Oslash /infinity /plusm;*Q] VMS.BCKN[V9.DOCS]IPD112.PS;1q*inus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /space /Aacute /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Agrave /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron macvec 128 128 v astore pop}{pop pop}I /ad {+ d}b /sd {- d}b /td {* d}b /dd {? d}b /c {2 ? e 2 ? e}b /n0 {D 0 eq {pop}}b /m1 matrix d /m2 matrix d /m3 matrix d /ct 0 d /s+ 0 d /po 0 d /ts 40 string d /s1 (|______) d ts 0 s1 V /sp ( ) d /SM {/m3 m3 currentmatrix d}b /RM {m3 setmatrix}b /dpi 72 0 matrix defaultmatrix dtransform h d /inch {72 *}b /cm {28.3465 *}b /pi 3.1415923 d /fs 256 string d /sh {m1 m2 copy 2 3 -1 roll sin put m2 concat}b /fc {T n0 {rotate}I scale n0 {sh}I}b /a {/ea x /sa x SM -1 * scale 0 0 1 sa ea 2 copy gt {arcn}{arc}I RM}b /cn {SM T x1 y1 scale 0 0 1 ct 90 * D 90 + arc /ct ct 1 ad RM}b /rr {/y1 x /x1 x /ct 0 d c y1 - /yr x x1 - /xr x N xr yr cn xr neg yr cn xr neg yr neg cn xr yr neg cn C}b /dg {/lc x clip rotate T /dy x /dx x 0 eq {N 1 eq {1 10 lc ? 10{log dy * 0 e neg M dx 0 R}for lc 10 gt{dy 0 e neg M dx 0 R}i} {lc 1 eq {0 0 e neg M dx 0 R}{/st dy lc 1 - dd 0 1 lc 1 - {st * 0 e neg M dx 0 R}for}I}I stroke} {1 eq {/st 0 d /inc 10 lc 1 + dd dx dy lt {/rd dx d}{/rd dy d}I 1 1 lc {/di st 1 + log 10 log ? rd td N dx di - dy di - 0 360 a C stroke /st st inc ad}for} {dx dy lt {/st dx lc dd}{/st dy lc dd}I lc {N dx dy 0 360 a C stroke /dx dx st sd /dy dy st sd}repeat} I }I}b /sb {/ea x /ia x /sa x /yr x /xr x ea sa lt{/ia ia neg d}i N sa ia ea{D /x1 e cos xr td /y1 e sin yr * neg d x1 y1 M 0 0 L}for}b /bm {/y1 x /x1 x bitgray SG x1 y1 /md where {pop md /invertflag 2 copy known {get not}{pop pop true}I }{true}I [x1 0 0 y1 0 0] {currentfile picstring readhexstring pop}imagemask}b /c1 .166667 d /c2 .833333 d /c3 .5 d /p3 {+ c3 *}b /dc{/y2 x /x2 x x0 c1 * x1 c2 ma y0 c1 * y1 c2 ma x1 c2 * x2 c1 ma y1 c2 * y2 c1 ma x1 x2 p3 y1 y2 p3 curveto}b /mp {/x0 x1 d /y0 y1 d /x1 x2 d /y1 y2 d}b /SPOLY_INIT {/SPOLY_SAVE save d /cls x /M {2 copy /y0 x /x0 x moveto /M /moveto load d}d /L {/y1 x /x1 x x0 x1 p3 y0 y1 p3 cls {/yy y1 d /xx x1 d /C {mp xx yy dc systemdict /closepath get exec}d M} {lineto}I /L {{dc mp}stopped {/L {pop pop}d /noerr false d}i}d}d}d /SPOLY_END {SPOLY_SAVE restore}b /ah {g 2 copy T 3 -1 roll - 3 1 roll e - atan rotate os 0 M hl hw R 0 hw 2 * neg R C fill G}b /da {/bp x /ep x g stroke G currentlinewidth dup .24 lt {pop .24}i D -10 * D /hl x -2 ? /os x 2 * /hw x flattenpath /out? false d bp{g {/by x /bx x} {2 copy by eq e bx eq and {pop pop}{/out? true d}I out? {exit}i} /np load dup pathforall N bx by ah G}i ep{/out? false d reversepath {/ey x /ex x} {2 copy ey eq e ex eq and {pop pop}{/out? true d}I out? {exit}i} /np load dup pathforall N ex ey ah}i}b /tp {sm0 transform}b /sfp {} d /op {{tp moveto}{tp lineto}{3{tp 6 2 roll}repeat curveto}{C} pathforall sfp stroke}b /sm0 matrix d /sm1 matrix d /so {SG /eg x /tg x /yt x /xt x xt 0 ne yt 0 ne or { xt abs yt abs gt {/tt xt abs d}{/tt yt abs d}I tt 144 gt {/ct dpi 2 dd /sfp{g eofill G}d} {tt 72 gt {/ct dpi 4 dd /sfp{g eofill G}d} {/ct dpi 4 dd}I}I /ig tg eg - ct ? neg d /x1 xt ct ? neg d /y1 yt ct dd 1 0 0 1 xt yt sm0 astore pop 1 0 0 1 x1 y1 neg sm1 astore pop g op G 1 1 ct{g ig * tg + SG sm0 D sm1 e concatmatrix pop op G}for}i}b /css {T 0 0 M xsp 0 32 Txt widthshow}b /sc {g /xsp x /tg x /eg x /sg x /y1 x /x1 x /Txt x /sst dpi 4 dd /y2 y1 sst dd /x2 x1 neg sst dd eg sg eq {/sg sg .001 sd}i /ig eg sg - sst ? neg d g tg SG x1 y1 neg css eg ig + ig sg {SG x2 y2 css}for G x2 y2 css CP G T 0 0 M}b /gbb {pathbbox /y1 x /x1 x /y2 x /x2 x /x3 x1 x2 sd /y3 y1 y2 sd}b /radf {/dn dpi 300 ? 8 * 24 ad /ig rg 255 ? dn dd sg 255 ? SG eoclip gbb x2 x3 2 ? + y2 y3 2 ? + T N x3 y3 h 2 ? D dn ? neg 1 {0 0 3 -1 roll 0 360 arc C fill currentgray ig + SG}for}b /dof {/ff x eoclip 180 - rotate gbb x1 y1 T 180 rotate x3 y3 scale 0 1 255 {fs e D 255 ? ff rg * sg + round cvi put}for 1 256 8 [1 0 0 256 0 0] fs image}b /gft {radf {{} dof}{{1 e - 9 * 1 + log 1 e -}dof}}b /df {g 2 copy eq {SG pop 0 ne {pop}i fill}{255 * e 255 * e 1 index - /rg x /sg x /gft load e get exec}I G}b /oc {/tl x /ju x /di 0 d g flattenpath {/y1 x /x1 x}{/y2 x /x2 x /dx x2 x1 sd /dy y2 y1 sd /di dx D * dy D ma sqrt di ad /x1 x2 d /y1 y2 d} {}{/y2 x /x2 x /dx x2 x1 sd /dy y2 y1 sd /di dx D * dy D ma sqrt d}pathforall ju 0 eq{/po 0 store}i ju 1 eq{/po di tl - 2 ? store}i ju 2 eq{/po di tl - store}i G}b /pt {/FM true d /os x /sr x /os os sr 0 1 v W pop 2 ? ad /pd 0 d /sl os d /ct 0 d g flattenpath {mtp}{ltp}{ctp}{cpp}pathforall G}b /mtp {/y1 x /x1 x /x2 x1 d /y2 y1 d /ovr FM {os /FM false d}{0}I d x1 y1 transform /cpy x /cpx x}b /ltp {/x3 x1 d /y3 y1 d /y1 x /x1 x /dx x1 x3 sd /dy y1 y3 sd /di dx D * dy D ma sqrt d /di 0 ne {/dsx dx di ? ovr td /dsy dy di ? ovr td x3 dsx + y3 dsy + transform /cpy x /cpx x /pd pd di ad {sl pd le {ct sr length lt{sch}{exit}I}{/ovr sl pd sd exit}I}loop}i}b /ctp {}b /cpp {x2 y2 ltp x2 y2 mtp}b /sch {/ch sr ct 1 v d /ct ct 1 ad /cw ch W pop 2 dd g cpx cpy itransform T dy dx atan rotate cw neg 0 M ch SH ct sr length lt{sr ct 1 v W pop 2 ? 0 rmoveto}i CP transform /cpy x /cpx x G /sl sl cw ad /po po cw 2 ma store ct sr length lt{/sl sl sr ct 1 v W pop 2 ? ad}i}b /cpd {/newslots x D length newslots + dict D 3 1 roll begin {1 index /FID ne {def}i}forall pop pop end}b /fn? {FontDirectory exch known} b /mof {/ui 0 d /pw 1000 24 dd /nn x /bn x ui 0 eq {/ui bn findfont dup /UniqueID known {/UniqueID get 1 add}{pop 1}ifelse def} if /bfd bn findfont def /ct bfd maxlength 1 ad bfd /UniqueID known not {/ct ct 1 ad} if /ofd ct dict def bfd { exch dup /FID ne {exch ofd 3 1 roll put} {pop pop} ifelse }forall ofd /FontName nn put ofd /PaintType 2 put ofd /StrokeWidth pw put ofd /UniqueID ui put nn ofd definefont pop}b /muf {20 dict begin /ui x e /BaseFont e findfont d ui 0 eq {/ui BaseFont D /UniqueID known {/UniqueID get 1 +}{pop 1}I d}i /FontType 3 d /Upos BaseFont /FontInfo 2 copy known {get /UnderlinePosition 2 copy known {get}{pop pop -100 }I}{ pop pop -100 }I d /Uwid BaseFont /FontInfo 2 copy known {get /UnderlineThickness 2 copy known {get}{pop pop 50}I} {pop pop 50}I d /FontMatrix BaseFont /FontMatrix get d /FontBBox BaseFont /FontBBox get D 1 get Upos gt {D 1 Upos put}i d /Encoding BaseFont /Encoding get d /theChar 1 string d /BuildChar {e begin theChar 0 3 -1 roll put BaseFont 1000 scalefont setfont theChar W FontBBox setcachedevice 0 0 M theChar show 0 Upos rmoveto 0 Upos L Uwid setlinewidth stroke end}d currentdict end definefont pop}b /of {dup fn? {pop pop}{mof}I}b /uf {1 index fn? {pop pop pop}{muf}I}b /ns {g CP m3 currentmatrix nulldevice setmatrix T 0 0 M Txt CP pop G}b /ft {/ftsave save d CP 3 1 roll + e T 0 0 M /show /myshow l Txt ftsave restore}b /ls {/Txt x 0 ft}b /cs {/Txt x ns 2 ? neg ft}b /rs {/Txt x ns neg ft}b /slp {/sproc x /sr x 0 1 sr length 1 - {sr e 1 v sproc}for}b /ss {/Txt x /fsave save d CP 2 copy T 0 0 M /ffsave save d pop - /lw x ns /tw x /wsp lw tw sd /nsp 0 d /show {nsp e {sp eq {1 +}i}slp /nsp x}d Txt 0 nsp 0 gt {wsp nsp ? +}i ffsave <{ʴMvsg | h 1T/4ir  moVX]ƕjə"zP'2 p(< wWgtgbj11(+-k6Ըl ("tr/;jȇvW78&f=$^hkbV?~k),5;Z8%)?:x}t?ɒeqW*t-%6ҾW7ƻ~=0m/n|7\rݎ%jƅ03sMcMm2c`dv2s~"j9lx_U3g>t 8:7{>AnN$JOdi; .Süh`WkQ͞5]ĘH}J?EH%XÝmk-lNCIpb<).pNxܫTdѢ{{zR ]@kݜA,1O6 ڭprN+[Vk`7-tT Ў;p3WoYN"aУ]y%ܹmX>_M" 6%ּ%'vta,gV~s]ny8~HKŽ%m̊hsؐwȡ` p]qLD[ ;5ta18MYpeF (:\} NM֦.R*ރ{vrp^P?2-" eg):QAaNuH4ڪxΕ̅9gϕ|L4lbFKwF7t3{˅,_2!HQ$/FCD;R<^ 4+w~/O"t/S-.DNc@je")NAgyt9F "X#jAAaN1wYj9%S`Yq9ɻ h]HRp/R:}#h2@fx.0!rk3O{]+[^EE`M,B>8R}>qtÕC|%+ח$$ӊ(pȀ* Bz QޔjyPT=v)^(OUd+eAb0x攏^폑ArHbhы'O! \u[UB1fоd*@PLA{q(r;8.Ksu:߼Άn5/.vK`, `?3φMЛ.UƦ@ըE: 3LUH9+P򉏛7mU`F|pBA# *sMf8Y/#$i$H<ٱ`];B#iC4z HEz67L-@vTDXR5J.UBTN= 5>w.Tiyf5E 3F`g@]M3A7kkil(,[$"0WϳX&!$bF1hh5p&^RT_*!=EH%z~o٠}NGXT(c(lxApg j;-[ e}$\%,mV$t{o__ʙ{Fm˒ˁelB8:;L[;QV&z$xc֞_ U ]ֆJ[ii^K_+SbZ,0jsط'[-sP*^M ``LۏXM,~^˛gTOqG{SP#`s,pD ^m}j L1`M~dQ9K(.v g$0=y f.IpOA<=њ>G,)n"FlByg awq l2+FtAHEJ LrW 5K/}lBSKq>O? %52KU]ߎ2ΓhHgZ~9nZg4 .BGKK\Er_|*:f* cHb01I]rԫG=m^߹0 1 vtMn9`R{wfVEm*EIv7ްքCSm`$S|[ ۿ?jR #qZK37&~W@)|>0K:V BCwl3{"s3=}-wKBoO+n:MiH3}jFB[:ߛB s,Z%$_\WMݥwjoWf[ʧ3:?s\kXJѕSJcC:]~4(^O\Jnu$@@`y"%(95` pަeULOR;s"va'Z\v5ŵF۫I F>D|=,k6we[O{J9-;_yyx"U-?6nlxX \999TpEdb}ddznxtfo^?>u5${-.vvb1[RLWb8+%] |Y)i@-V^e~ϡƦbR:8K1rEFn5#޾#ӍqW/7QRGVKR]kORMV_VIyO&VP $}P`ހ\Mzd_4orPH3Aq-+L,saMzi5`JKA8Q PGF́SZ:'E@ POQ󴠡P5a^L XƗw5Dzea j/]LnՌb9TІ^1O s/皾|d#F(Ocr OyPZ)z>9w Zu^ڽ.:1a8P.MZx޳[[à s3q'b7IW}t~M 9J:|K=b@Po2^ōpN BL_/IxtãeqԘČ[P?L@E-M8Owh'3-t,BzQl3x\Sy<߬p)=s9]J#в_]'a31ּy|J#(*/p_T%q(1WY@YF(|fTw>"GzL+%'suЛ3\zj|,a=? \ߡn㎙dc$qovD˝A,s.fL"ȣ;J5{ wеϣ91 +̊g'u;FB8vJztDs_= %=` }t4?<PanD!=1xZoPWfmD\c᤽Ue$S!MH?ݩ^MV]W]ʵEEuM8/'ǃ`uk|zVGHHճZ6%?#S{g%n[ĹKN0;+P/]H1R~\n )jR νn :0,XĠ"In #V?<\iH 9 ߯"+tAT-o^GE c.pOd4d_hqe9^83B֗> twbq"u E2@]սMTN]/pw˺Ӵ]+#TJ)^ΔY9ij"8qa҄hZ,8 eEH+iUY0? C]76DdQC.zi2 ?&(W\ X:h&FѕyZl˺lZC0^X6K,SZ9o&#{]ʜtT&pq{EjsF?6]{nU5 /kt8 4 lZ~$V[3ҏadR6[of0L[0:m~_،DZ+A 9fݍF{Z7s( VWΉS{et~[8v 6. [|rte7$ZgP[<?DYO fG}RD 4`^ d@֠qU9ˮ6XFhQy㓮{XM LLxSDB fM8aTQH1uwn}ҊuS,WNFlIJppk#GGkLڀ~cb4-2Ԩ_bF/6+Q)j-R0 m3]\aWI"cd Js7[he6ՇIJ' 5mxy1mx7"9Pb20v2&^#?&\:D8zjnޗaHC{4U)>ωwHAGDIAKt^HQ$Lt?ƝxBmtp;a1 ҃̃ܛ7SY*z ]D{7ѐӲ@^bK{GM֢x1N+:=l0 pJ_u!h,2N\%bːK6ֈ+ϟ@%Wx :c[i,0l.5ٹ;2Q3{"u"qN:qJ|7Rvԝ~udOV,¹{rNA?jfۿ9ҞE `$ur VMS.BCKN[V9.DOCS]IPD112.PS;1H(end)X 1609(of)X 1708(a)X 1776(bounded)X 2084(expression.)X 2479(In)X 2578(any)X 2726(of)X 2825(these)X 3023(cases,)X 3246(the)X 3377(interpreter)X 3745(returns)X 4001(a)X 4070(signal)X 4294(to)X 5 f 612 960(bscan)N 1 f 824(,)X 867(which)X 1086(then)X 1247(restores)X 1520(the)X 1641(values)X 1868(of)X 5 f 1959(&subject)X 1 f 2286(and)X 5 f 2426(&pos)X 1 f 2629(before)X 2857(passing)X 3119(the)X 3239(signal)X 3452(on)X 3554(to)X 3638(the)X 3758(interpreter)X 4115(invoca-)X 612 1056(tion)N 756(below)X 972(it.)X 732 1180(Continuing)N 1111(the)X 1229(example,)X 5 f 1543(move\(4\))X 1 f 1856(is)X 1929(evaluated,)X 2277(it)X 2341(suspends,)X 2670(and)X 2806(the)X 2924(top)X 3046(of)X 3133(the)X 3251(stack)X 3436(is)X 5 f 906 1276 MXY 3156 2073 0.00 399.00 504.00 730.00 startFig %!PS-Adobe-2.0 EPSF-1.2 %%%Creator:Cricket Draw 1.1 %%%Title:ipd51.fig2 %%%CreationDate:1/9/90 1:37 PM %%%DocumentFonts: Helvetica %%%+ Times-Roman %%%BoundingBox:0 399 504 730 %%%Pages:0 %%%EndComments /vmstate save def [] settransfer /$cricket 210 dict def $cricket begin 1 -1 scale 0 -730 translate 2 setlinecap /d /def load def /b {bind d}bind d /l {load d}b /e /exch l /x {e d}b /C /closepath l /CP /currentpoint l /SH /show l /g /gsave l /G /grestore l /i /if l /I /ifelse l /v /getinterval l /V /putinterval l /W /stringwidth l /SG /setgray l /N /newpath l /M /moveto l /L /lineto l /R /rlineto l /T /translate l /D /dup l /* /mul l /+ /add l /- /sub l /? /div l /ma {* +}b /h {D * e D ma sqrt}d /np {} d systemdict D /setpacking known D {/packstate currentpacking d D setpacking}i /pack? x begin /settransfer load /setscreen load end /setscreen x /settransfer x systemdict /setcmykcolor known not { /setcmykcolor {pop pop pop pop 0 SG} d} if /dt [ currenttransfer ] cvx d /ds [ currentscreen D [ e ] cvx /devSpot x ] cvx d /jp {e [ 3 1 roll aload pop counttomark -1 roll aload pop ] cvx}b /settransfer {dt jp settransfer}b /macvec dup where not { 256 array d macvec 0 StandardEncoding 0 128 getinterval putinterval macvec 16#27 /quotesingle put macvec 16#60 /grave put /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registersans /copyrightsans /trademarksans /acute /dieresis /notequal /AE /Oslash /infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /space /Aacute /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Agrave /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron macvec 128 128 v astore pop}{pop pop}I /ad {+ d}b /sd {- d}b /td {* d}b /dd {? d}b /c {2 ? e 2 ? e}b /n0 {D 0 eq {pop}}b /m1 matrix d /m2 matrix d /m3 matrix d /ct 0 d /s+ 0 d /po 0 d /ts 40 string d /s1 (|______) d ts 0 s1 V /sp ( ) d /SM {/m3 m3 currentmatrix d}b /RM {m3 setmatrix}b /dpi 72 0 matrix defaultmatrix dtransform h d /inch {72 *}b /cm {28.3465 *}b /pi 3.1415923 d /fs 256 string d /sh {m1 m2 copy 2 3 -1 roll sin put m2 concat}b /fc {T n0 {rotate}I scale n0 {sh}I}b /a {/ea x /sa x SM -1 * scale 0 0 1 sa ea 2 copy gt {arcn}{arc}I RM}b /cn {SM T x1 y1 scale 0 0 1 ct 90 * D 90 + arc /ct ct 1 ad RM}b /rr {/y1 x /x1 x /ct 0 d c y1 - /yr x x1 - /xr x N xr yr cn xr neg yr cn xr neg yr neg cn xr yr neg cn C}b /dg {/lc x clip rotate T /dy x /dx x 0 eq {N 1 eq {1 10 lc ? 10{log dy * 0 e neg M dx 0 R}for lc 10 gt{dy 0 e neg M dx 0 R}i} {lc 1 eq {0 0 e neg M dx 0 R}{/st dy lc 1 - dd 0 1 lc 1 - {st * 0 e neg M dx 0 R}for}I}I stroke} {1 eq {/st 0 d /inc 10 lc 1 + dd dx dy lt {/rd dx d}{/rd dy d}I 1 1 lc {/di st 1 + log 10 log ? rd td N dx di - dy di - 0 360 a C stroke /st st inc ad}for} {dx dy lt {/st dx lc dd}{/st dy lc dd}I lc {N dx dy 0 360 a C stroke /dx dx st sd /dy dy st sd}repeat} I }I}b /sb {/ea x /ia x /sa x /yr x /xr x ea sa lt{/ia ia neg d}i N sa ia ea{D /x1 e cos xr td /y1 e sin yr * neg d x1 y1 M 0 0 L}for}b /bm {/y1 x /x1 x bitgray SG x1 y1 /md where {pop md /invertflag 2 copy known {get not}{pop pop true}I }{true}I [x1 0 0 y1 0 0] {currentfile picstring readhexstring pop}imagemask}b /c1 .166667 d /c2 .833333 d /c3 .5 d /p3 {+ c3 *}b /dc{/y2 x /x2 x x0 c1 * x1 c2 ma y0 c1 * y1 c2 ma x1 c2 * x2 c1 ma y1 c2 * y2 c1 ma x1 x2 p3 y1 y2 p3 curveto}b /mp {/x0 x1 d /y0 y1 d /x1 x2 d /y1 y2 d}b /SPOLY_INIT {/SPOLY_SAVE save d /cls x /M {2 copy /y0 x /x0 x moveto /M /moveto load d}d /L {/y1 x /x1 x x0 x1 p3 y0 y1 p3 cls {/yy y1 d /xx x1 d /C {mp xx yy dc systemdict /closepath get exec}d M} {lineto}I /L {{dc mp}stopped {/L {pop pop}d /noerr false d}i}d}d}d /SPOLY_END {SPOLY_SAVE restore}b /ah {g 2 copy T 3 -1 roll - 3 1 roll e - atan rotate os 0 M hl hw R 0 hw 2 * neg R C fill G}b /da {/bp x /ep x g stroke G currentlinewidth dup .24 lt {pop .24}i D -10 * D /hl x -2 ? /os x 2 * /hw x flattenpath /out? false d bp{g {/by x /bx x} {2 copy by eq e bx eq and {pop pop}{/out? true d}I out? {exit}i} /np load dup pathforall N bx by ah G}i ep{/out? false d reversepath {/ey x /ex x} {2 copy ey eq e ex eq and {pop pop}{/out? true d}I out? {exit}i} /np load dup pathforall N ex ey ah}i}b /tp {sm0 transform}b /sfp {} d /op {{tp moveto}{tp lineto}{3{tp 6 2 roll}repeat curveto}{C} pathforall sfp stroke}b /sm0 matrix d /sm1 matrix d /so {SG /eg x /tg x /yt x /xt x xt 0 ne yt 0 ne or { xt abs yt abs gt {/tt xt abs d}{/tt yt abs d}I tt 144 gt {/ct dpi 2 dd /sfp{g eofill G}d} {tt 72 gt {/ct dpi 4 dd /sfp{g eofill G}d} {/ct dpi 4 dd}I}I /ig tg eg - ct ? neg d /x1 xt ct ? neg d /y1 yt ct dd 1 0 0 1 xt yt sm0 astore pop 1 0 0 1 x1 y1 neg sm1 astore pop g op G 1 1 ct{g ig * tg + SG sm0 D sm1 e concatmatrix pop op G}for}i}b /css {T 0 0 M xsp 0 32 Txt widthshow}b /sc {g /xsp x /tg x /eg x /sg x /y1 x /x1 x /Txt x /sst dpi 4 dd /y2 y1 sst dd /x2 x1 neg sst dd eg sg eq {/sg sg .001 sd}i /ig eg sg - sst ? neg d g tg SG x1 y1 neg css eg ig + ig sg {SG x2 y2 css}for G x2 y2 css CP G T 0 0 M}b /gbb {pathbbox /y1 x /x1 x /y2 x /x2 x /x3 x1 x2 sd /y3 y1 y2 sd}b /radf {/dn dpi 300 ? 8 * 24 ad /ig rg 255 ? dn dd sg 255 ? SG eoclip gbb x2 x3 2 ? + y2 y3 2 ? + T N x3 y3 h 2 ? D dn ? neg 1 {0 0 3 -1 roll 0 360 arc C fill currentgray ig + SG}for}b /dof {/ff x eoclip 180 - rotate gbb x1 y1 T 180 rotate x3 y3 scale 0 1 255 {fs e D 255 ? ff rg * sg + round cvi put}for 1 256 8 [1 0 0 256 0 0] fs image}b /gft {radf {{} dof}{{1 e - 9 * 1 + log 1 e -}dof}}b /df {g 2 copy eq {SG pop 0 ne {pop}i fill}{255 * e 255 * e 1 index - /rg x /sg x /gft load e get exec}I G}b /oc {/tl x /ju x /di 0 d g flattenpath {/y1 x /x1 x}{/y2 x /x2 x /dx x2 x1 sd /dy y2 y1 sd /di dx D * dy D ma sqrt di ad /x1 x2 d /y1 y2 d} {}{/y2 x /x2 x /dx x2 x1 sd /dy y2 y1 sd /di dx D * dy D ma sqrt d}pathforall ju 0 eq{/po 0 store}i ju 1 eq{/po di tl - 2 ? store}i ju 2 eq{/po di tl - store}i G}b /pt {/FM true d /os x /sr x /os os sr 0 1 v W pop 2 ? ad /pd 0 d /sl os d /ct 0 d g flattenpath {mtp}{ltp?L~ VMS.BCKN[V9.DOCS]IPD112.PS;1lW}{ctp}{cpp}pathforall G}b /mtp {/y1 x /x1 x /x2 x1 d /y2 y1 d /ovr FM {os /FM false d}{0}I d x1 y1 transform /cpy x /cpx x}b /ltp {/x3 x1 d /y3 y1 d /y1 x /x1 x /dx x1 x3 sd /dy y1 y3 sd /di dx D * dy D ma sqrt d /di 0 ne {/dsx dx di ? ovr td /dsy dy di ? ovr td x3 dsx + y3 dsy + transform /cpy x /cpx x /pd pd di ad {sl pd le {ct sr length lt{sch}{exit}I}{/ovr sl pd sd exit}I}loop}i}b /ctp {}b /cpp {x2 y2 ltp x2 y2 mtp}b /sch {/ch sr ct 1 v d /ct ct 1 ad /cw ch W pop 2 dd g cpx cpy itransform T dy dx atan rotate cw neg 0 M ch SH ct sr length lt{sr ct 1 v W pop 2 ? 0 rmoveto}i CP transform /cpy x /cpx x G /sl sl cw ad /po po cw 2 ma store ct sr length lt{/sl sl sr ct 1 v W pop 2 ? ad}i}b /cpd {/newslots x D length newslots + dict D 3 1 roll begin {1 index /FID ne {def}i}forall pop pop end}b /fn? {FontDirectory exch known} b /mof {/ui 0 d /pw 1000 24 dd /nn x /bn x ui 0 eq {/ui bn findfont dup /UniqueID known {/UniqueID get 1 add}{pop 1}ifelse def} if /bfd bn findfont def /ct bfd maxlength 1 ad bfd /UniqueID known not {/ct ct 1 ad} if /ofd ct dict def bfd { exch dup /FID ne {exch ofd 3 1 roll put} {pop pop} ifelse }forall ofd /FontName nn put ofd /PaintType 2 put ofd /StrokeWidth pw put ofd /UniqueID ui put nn ofd definefont pop}b /muf {20 dict begin /ui x e /BaseFont e findfont d ui 0 eq {/ui BaseFont D /UniqueID known {/UniqueID get 1 +}{pop 1}I d}i /FontType 3 d /Upos BaseFont /FontInfo 2 copy known {get /UnderlinePosition 2 copy known {get}{pop pop -100 }I}{ pop pop -100 }I d /Uwid BaseFont /FontInfo 2 copy known {get /UnderlineThickness 2 copy known {get}{pop pop 50}I} {pop pop 50}I d /FontMatrix BaseFont /FontMatrix get d /FontBBox BaseFont /FontBBox get D 1 get Upos gt {D 1 Upos put}i d /Encoding BaseFont /Encoding get d /theChar 1 string d /BuildChar {e begin theChar 0 3 -1 roll put BaseFont 1000 scalefont setfont theChar W FontBBox setcachedevice 0 0 M theChar show 0 Upos rmoveto 0 Upos L Uwid setlinewidth stroke end}d currentdict end definefont pop}b /of {dup fn? {pop pop}{mof}I}b /uf {1 index fn? {pop pop pop}{muf}I}b /ns {g CP m3 currentmatrix nulldevice setmatrix T 0 0 M Txt CP pop G}b /ft {/ftsave save d CP 3 1 roll + e T 0 0 M /show /myshow l Txt ftsave restore}b /ls {/Txt x 0 ft}b /cs {/Txt x ns 2 ? neg ft}b /rs {/Txt x ns neg ft}b /slp {/sproc x /sr x 0 1 sr length 1 - {sr e 1 v sproc}for}b /ss {/Txt x /fsave save d CP 2 copy T 0 0 M /ffsave save d pop - /lw x ns /tw x /wsp lw tw sd /nsp 0 d /show {nsp e {sp eq {1 +}i}slp /nsp x}d Txt 0 nsp 0 gt {wsp nsp ? +}i ffsave restore /s+ x /myshow load D systemdict /show get ne {D D length 1 - get cvlit /charshadow eq {[ e aload pop e pop s+ e ] cvx}i} {pop {s+ 0 32 4 -1 roll widthshow}}I /show x Txt fsave restore}b /cf{D /fn x length 7 + string /ts x ts 0 s1 V ts 7 fn V /fnm ts cvn d FontDirectory fnm known not {fn cvn findfont 0 cpd /nfd x nfd D /FontName fnm put /Encoding macvec put fnm nfd definefont pop}i}b /JoinProcs /jp l /fixcoordinates /fc l /doarc /a l /doroundrect /rr l /dograte /dg l /pathoffset /po l /pathtext /pt l /dostarburst /sb l /dobitmap /bm l /strokearrow /da l /shadow /so l /charshadow /sc l /fountain /df l /offsetcalc /oc l /MakeOutlineFont /of l /MakeUnderlineFont /uf l /leftshow /ls l /rightshow /rs l /centershow /cs l /fullshow /ss l /coordinatefont /cf l pack? {packstate setpacking}i %%----------------------------------- %%Encode PS Fonts to match Mac Fonts (Helvetica) coordinatefont (Times-Roman) coordinatefont %%----------------------------------- %%----- Begin Main Program -----% gsave % Line 0 1 1 0 63 136 fixcoordinates newpath 0 -130 moveto 0 130 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 351 136 fixcoordinates newpath 0 -130 moveto 0 130 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 206.5 148.5 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 207 113 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Text Block 0 1 -1 0 220 59.027 fixcoordinates /myshow /show load def 0 setgray -20 19 moveto /|______Helvetica findfont 18 scalefont setfont { (.) show } leftshow -20 -3 moveto { (.) show } leftshow -20 -25 moveto { (.) show } leftshow grestore gsave % Line 0 1 1 0 207 185 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 257 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 221 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 40 235.499 fixcoordinates newpath -18 0 moveto 18 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Text Block 0 1 -1 0 16 237.291 fixcoordinates /myshow /show load def 0 setgray -13 -3 moveto /|______Helvetica findfont 12 scalefont setfont { (sp) show } leftshow grestore gsave % Text Block 0 1 -1 0 87 130.75 fixcoordinates /myshow /show load def 0 setgray -13 -1 moveto /|______Helvetica findfont 12 scalefont setfont { (nvp) show } leftshow grestore gsave % Text Block 0 1 -1 0 337 203.041 fixcoordinates /myshow /show load def 0 setgray -12 -1 moveto /|______Times-Roman findfont 12 scalefont setfont { (4) show } leftshow grestore gsave % Text Block 0 1 -1 0 454.499 239 fixcoordinates /myshow /show load def 0 setgray -38 -3 moveto /|______Helvetica findfont 12 scalefont setfont { ("coco") show } leftshow grestore gsave % Text Block 0 1 -1 0 428.999 200.499 fixcoordinates /myshow /show load def 0 setgray -71 -3 moveto /|______Times-Roman findfont 12 scalefont setfont { (result produced by) show /|______Helvetica findfont 12 scalefont setfont ( move\(\)) show } leftshow grestore gsave % Line 0 1 1 0 342 239 fixcoordinates newpath -63 0 moveto 63 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Text Block 0 1 -1 0 81 304.5 fixcoordinates /myshow /show load def 0 setgray -70 13 moveto /|______Helvetica findfont 12 scalefont setfont { (&subject: "coconuts") show } leftshow -70 -1 moveto { (&pos: ) show /|______Times-Roman findfont 12 scalefont setfont (5) show } leftshow grestore gsave % Line 0 1 1 0 384.5 163.75 fixcoordinates newpath -105.75 -0 moveto 105.75 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Line 0 1 1 0 495.5 102 fixcoordinates newpath 0 62 moveto 0 -62 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Rectangle 0 1 1 0 62.5 37 fixcoordinates newpath -12.5 -36 moveto 12.5 -36 lineto 12.5 36 lineto -12.5 36 lineto closepath gsave 1 setgray fill grestore 1 setlinewidth 1 setgray stroke grestore gsave % Rectangle 0 1 1 0 350.5 37 fixcoordinates newpath -12.5 -36 moveto 12.5 -36 lineto 12.5 36 lineto -12.5 36 lineto closepath gsave 1 setgray fill grestore 1 setlinewidth 1 setgray stroke grestore %%------ End Main Program ------% end vmstate restore %%%Trailer %%%Pages:1 endFig 1 f 612 3445(The)N 5 f 763(escan)X 1 f 999(instruction)X 1365(is)X 1442(executed)X 1752(next.)X 1934(It)X 2007(reverses)X 2295(the)X 2417(top)X 2543(two)X 2687(elements)X 2996(on)X 3100(the)X 3222(stack)X 3412(so)X 3508(that)X 3653(the)X 3776(result)X 3979(of)X 4071(scanning)X 612 3541(becomes)N 920(the)X 1045(result)X 1250(of)X 5 f 1346(move\(\))X 1 f 1595(.)X 1662(It)X 1738(then)X 1903(exchanges)X 2264(the)X 2388(current)X 2642(values)X 2873(of)X 5 f 2968(&subject)X 1 f 3299(and)X 5 f 3443(&pos)X 1 f 3650(with@ VMS.BCKN[V9.DOCS]IPD112.PS;1R!f)X 3818(the)X 3942(saved)X 4151(values)X 612 3637(and)N 748(suspends:)X 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(3)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 5 f 938 672 MXY 3092 4608 0.00 -12.00 498.00 730.00 startFig %!PS-Adobe-2.0 EPSF-1.2 %%%Creator:Cricket Draw 1.1 %%%Title:ipd51.fig3 %%%CreationDate:1/9/90 1:39 PM %%%DocumentFonts: Helvetica %%%+ Times-Roman %%%BoundingBox:0 -12 498 730 %%%Pages:0 %%%EndComments /vmstate save def [] settransfer /$cricket 210 dict def $cricket begin 1 -1 scale 0 -730 translate 2 setlinecap /d /def load def /b {bind d}bind d /l {load d}b /e /exch l /x {e d}b /C /closepath l /CP /currentpoint l /SH /show l /g /gsave l /G /grestore l /i /if l /I /ifelse l /v /getinterval l /V /putinterval l /W /stringwidth l /SG /setgray l /N /newpath l /M /moveto l /L /lineto l /R /rlineto l /T /translate l /D /dup l /* /mul l /+ /add l /- /sub l /? /div l /ma {* +}b /h {D * e D ma sqrt}d /np {} d systemdict D /setpacking known D {/packstate currentpacking d D setpacking}i /pack? x begin /settransfer load /setscreen load end /setscreen x /settransfer x systemdict /setcmykcolor known not { /setcmykcolor {pop pop pop pop 0 SG} d} if /dt [ currenttransfer ] cvx d /ds [ currentscreen D [ e ] cvx /devSpot x ] cvx d /jp {e [ 3 1 roll aload pop counttomark -1 roll aload pop ] cvx}b /settransfer {dt jp settransfer}b /macvec dup where not { 256 array d macvec 0 StandardEncoding 0 128 getinterval putinterval macvec 16#27 /quotesingle put macvec 16#60 /grave put /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registersans /copyrightsans /trademarksans /acute /dieresis /notequal /AE /Oslash /infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /space /Aacute /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Agrave /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron macvec 128 128 v astore pop}{pop pop}I /ad {+ d}b /sd {- d}b /td {* d}b /dd {? d}b /c {2 ? e 2 ? e}b /n0 {D 0 eq {pop}}b /m1 matrix d /m2 matrix d /m3 matrix d /ct 0 d /s+ 0 d /po 0 d /ts 40 string d /s1 (|______) d ts 0 s1 V /sp ( ) d /SM {/m3 m3 currentmatrix d}b /RM {m3 setmatrix}b /dpi 72 0 matrix defaultmatrix dtransform h d /inch {72 *}b /cm {28.3465 *}b /pi 3.1415923 d /fs 256 string d /sh {m1 m2 copy 2 3 -1 roll sin put m2 concat}b /fc {T n0 {rotate}I scale n0 {sh}I}b /a {/ea x /sa x SM -1 * scale 0 0 1 sa ea 2 copy gt {arcn}{arc}I RM}b /cn {SM T x1 y1 scale 0 0 1 ct 90 * D 90 + arc /ct ct 1 ad RM}b /rr {/y1 x /x1 x /ct 0 d c y1 - /yr x x1 - /xr x N xr yr cn xr neg yr cn xr neg yr neg cn xr yr neg cn C}b /dg {/lc x clip rotate T /dy x /dx x 0 eq {N 1 eq {1 10 lc ? 10{log dy * 0 e neg M dx 0 R}for lc 10 gt{dy 0 e neg M dx 0 R}i} {lc 1 eq {0 0 e neg M dx 0 R}{/st dy lc 1 - dd 0 1 lc 1 - {st * 0 e neg M dx 0 R}for}I}I stroke} {1 eq {/st 0 d /inc 10 lc 1 + dd dx dy lt {/rd dx d}{/rd dy d}I 1 1 lc {/di st 1 + log 10 log ? rd td N dx di - dy di - 0 360 a C stroke /st st inc ad}for} {dx dy lt {/st dx lc dd}{/st dy lc dd}I lc {N dx dy 0 360 a C stroke /dx dx st sd /dy dy st sd}repeat} I }I}b /sb {/ea x /ia x /sa x /yr x /xr x ea sa lt{/ia ia neg d}i N sa ia ea{D /x1 e cos xr td /y1 e sin yr * neg d x1 y1 M 0 0 L}for}b /bm {/y1 x /x1 x bitgray SG x1 y1 /md where {pop md /invertflag 2 copy known {get not}{pop pop true}I }{true}I [x1 0 0 y1 0 0] {currentfile picstring readhexstring pop}imagemask}b /c1 .166667 d /c2 .833333 d /c3 .5 d /p3 {+ c3 *}b /dc{/y2 x /x2 x x0 c1 * x1 c2 ma y0 c1 * y1 c2 ma x1 c2 * x2 c1 ma y1 c2 * y2 c1 ma x1 x2 p3 y1 y2 p3 curveto}b /mp {/x0 x1 d /y0 y1 d /x1 x2 d /y1 y2 d}b /SPOLY_INIT {/SPOLY_SAVE save d /cls x /M {2 copy /y0 x /x0 x moveto /M /moveto load d}d /L {/y1 x /x1 x x0 x1 p3 y0 y1 p3 cls {/yy y1 d /xx x1 d /C {mp xx yy dc systemdict /closepath get exec}d M} {lineto}I /L {{dc mp}stopped {/L {pop pop}d /noerr false d}i}d}d}d /SPOLY_END {SPOLY_SAVE restore}b /ah {g 2 copy T 3 -1 roll - 3 1 roll e - atan rotate os 0 M hl hw R 0 hw 2 * neg R C fill G}b /da {/bp x /ep x g stroke G currentlinewidth dup .24 lt {pop .24}i D -10 * D /hl x -2 ? /os x 2 * /hw x flattenpath /out? false d bp{g {/by x /bx x} {2 copy by eq e bx eq and {pop pop}{/out? true d}I out? {exit}i} /np load dup pathforall N bx by ah G}i ep{/out? false d reversepath {/ey x /ex x} {2 copy ey eq e ex eq and {pop pop}{/out? true d}I out? {exit}i} /np load dup pathforall N ex ey ah}i}b /tp {sm0 transform}b /sfp {} d /op {{tp moveto}{tp lineto}{3{tp 6 2 roll}repeat curveto}{C} pathforall sfp stroke}b /sm0 matrix d /sm1 matrix d /so {SG /eg x /tg x /yt x /xt x xt 0 ne yt 0 ne or { xt abs yt abs gt {/tt xt abs d}{/tt yt abs d}I tt 144 gt {/ct dpi 2 dd /sfp{g eofill G}d} {tt 72 gt {/ct dpi 4 dd /sfp{g eofill G}d} {/ct dpi 4 dd}I}I /ig tg eg - ct ? neg d /x1 xt ct ? neg d /y1 yt ct dd 1 0 0 1 xt yt sm0 astore pop 1 0 0 1 x1 y1 neg sm1 astore pop g op G 1 1 ct{g ig * tg + SG sm0 D sm1 e concatmatrix pop op G}for}i}b /css {T 0 0 M xsp 0 32 Txt widthshow}b /sc {g /xsp x /tg x /eg x /sg x /y1 x /x1 x /Txt x /sst dpi 4 dd /y2 y1 sst dd /x2 x1 neg sst dd eg sg eq {/sg sg .001 sd}i /ig eg sg - sst ? neg d g tg SG x1 y1 neg css eg ig + ig sg {SG x2 y2 css}for G x2 y2 css CP G T 0 0 M}b /gbb {pathbbox /y1 x /x1 x /y2 x /x2 x /x3 x1 x2 sd /y3 y1 y2 sd}b /radf {/dn dpi 300 ? 8 * 24 ad /ig rg 255 ? dn dd sg 255 ? SG eoclip gbb x2 x3 2 ? + y2 y3 2 ? + T N x3 y3 h 2 ? D dn ? neg 1 {0 0 3 -1 roll 0 360 arc C fill currentgray ig + SG}for}b /dof {/ff x eoclip 180 - rotate gbb x1 y1 T 180 rotate x3 y3 scale 0 1 255 {fs e D 255 ? ff rg * sg + round cvi put}for 1 256 8 [1 0 0 256 0 0] fs image}b /gft {radf {{} dof}{{1 e - 9 * 1 + log 1 e -}dof}}b /df {g 2 copy eq {SG pop 0 ne {pop}i fill}{255 * e 255 * e 1 index - /rg x /sg x /gft load e get exec}I G}b /oc {/tl x /ju x /di 0 d g flattenpath {/y1 x /x1 x}{/y2 x /x2 x /dx x2 x1 sd /dy y2 y1 sd /di dx D * dy D ma sqrt di ad /x1 x2 d /y1 y2 d} {}{/y2 x /x2 x /dx x2 x1 sd /dy y2 y1 sd /di dx D * dy D ma sqrt d}pathforall ju 0 eq{/po 0 store}i ju 1 eq{/po di tl - 2 ? store}i ju 2 eq{/po di tl - store}i G}b /pt {/FM true d /os x /sr x /os os sr 0 1 v W pop 2 ? ad /pd 0 d /sl os d /ct 0 d g flattenpath {mtp}{ltp}{ctp}{cpp}pathforall G}b /mtp {/y1 x /x1 x /x2 x1 d /y2 y1 d /ovr FM {os /FM false d}{0}I d x1 y1 transform /cpy x /cpx x}b /ltp {/x3 x1 d /y3 y1 d /y1 x /x1 x /dx x1 x3 sd /dy y1 y3 sd /di dx D * dy D ma sqrt d /di 0 ne {/dsx dx di ? ovr td /dsy dy di ? ovr td x3 dsx + y3 dsy + transform /cpy x /cpx x /pd pd di ad {sl pd le {ct sr length lt{sch}{exit}I}{/ovr sl pd sd exit}I}loop}i}b /ctp {}b /cpp {x2 y2 ltp x2 y2 mtp}b /sch {/ch sr ct 1 v d /ct ct 1 ad /cw ch W pop 2 dd g cpx cpy itrA8 VMS.BCKN[V9.DOCS]IPD112.PS;1ϸuansform T dy dx atan rotate cw neg 0 M ch SH ct sr length lt{sr ct 1 v W pop 2 ? 0 rmoveto}i CP transform /cpy x /cpx x G /sl sl cw ad /po po cw 2 ma store ct sr length lt{/sl sl sr ct 1 v W pop 2 ? ad}i}b /cpd {/newslots x D length newslots + dict D 3 1 roll begin {1 index /FID ne {def}i}forall pop pop end}b /fn? {FontDirectory exch known} b /mof {/ui 0 d /pw 1000 24 dd /nn x /bn x ui 0 eq {/ui bn findfont dup /UniqueID known {/UniqueID get 1 add}{pop 1}ifelse def} if /bfd bn findfont def /ct bfd maxlength 1 ad bfd /UniqueID known not {/ct ct 1 ad} if /ofd ct dict def bfd { exch dup /FID ne {exch ofd 3 1 roll put} {pop pop} ifelse }forall ofd /FontName nn put ofd /PaintType 2 put ofd /StrokeWidth pw put ofd /UniqueID ui put nn ofd definefont pop}b /muf {20 dict begin /ui x e /BaseFont e findfont d ui 0 eq {/ui BaseFont D /UniqueID known {/UniqueID get 1 +}{pop 1}I d}i /FontType 3 d /Upos BaseFont /FontInfo 2 copy known {get /UnderlinePosition 2 copy known {get}{pop pop -100 }I}{ pop pop -100 }I d /Uwid BaseFont /FontInfo 2 copy known {get /UnderlineThickness 2 copy known {get}{pop pop 50}I} {pop pop 50}I d /FontMatrix BaseFont /FontMatrix get d /FontBBox BaseFont /FontBBox get D 1 get Upos gt {D 1 Upos put}i d /Encoding BaseFont /Encoding get d /theChar 1 string d /BuildChar {e begin theChar 0 3 -1 roll put BaseFont 1000 scalefont setfont theChar W FontBBox setcachedevice 0 0 M theChar show 0 Upos rmoveto 0 Upos L Uwid setlinewidth stroke end}d currentdict end definefont pop}b /of {dup fn? {pop pop}{mof}I}b /uf {1 index fn? {pop pop pop}{muf}I}b /ns {g CP m3 currentmatrix nulldevice setmatrix T 0 0 M Txt CP pop G}b /ft {/ftsave save d CP 3 1 roll + e T 0 0 M /show /myshow l Txt ftsave restore}b /ls {/Txt x 0 ft}b /cs {/Txt x ns 2 ? neg ft}b /rs {/Txt x ns neg ft}b /slp {/sproc x /sr x 0 1 sr length 1 - {sr e 1 v sproc}for}b /ss {/Txt x /fsave save d CP 2 copy T 0 0 M /ffsave save d pop - /lw x ns /tw x /wsp lw tw sd /nsp 0 d /show {nsp e {sp eq {1 +}i}slp /nsp x}d Txt 0 nsp 0 gt {wsp nsp ? +}i ffsave restore /s+ x /myshow load D systemdict /show get ne {D D length 1 - get cvlit /charshadow eq {[ e aload pop e pop s+ e ] cvx}i} {pop {s+ 0 32 4 -1 roll widthshow}}I /show x Txt fsave restore}b /cf{D /fn x length 7 + string /ts x ts 0 s1 V ts 7 fn V /fnm ts cvn d FontDirectory fnm known not {fn cvn findfont 0 cpd /nfd x nfd D /FontName fnm put /Encoding macvec put fnm nfd definefont pop}i}b /JoinProcs /jp l /fixcoordinates /fc l /doarc /a l /doroundrect /rr l /dograte /dg l /pathoffset /po l /pathtext /pt l /dostarburst /sb l /dobitmap /bm l /strokearrow /da l /shadow /so l /charshadow /sc l /fountain /df l /offsetcalc /oc l /MakeOutlineFont /of l /MakeUnderlineFont /uf l /leftshow /ls l /rightshow /rs l /centershow /cs l /fullshow /ss l /coordinatefont /cf l pack? {packstate setpacking}i %%----------------------------------- %%Encode PS Fonts to match Mac Fonts (Helvetica) coordinatefont (Times-Roman) coordinatefont %%----------------------------------- %%----- Begin Main Program -----% gsave % Line 0 1 1 0 63 338.999 fixcoordinates newpath 0 -337.999 moveto 0 337.999 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 351 338.999 fixcoordinates newpath 0 -337.999 moveto 0 337.999 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 91.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 163.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 235.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 343.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 127.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 207 197.777 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 207 451.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 207 379.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 207 487.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Text Block 0 1 -1 0 220 48.027 fixcoordinates /myshow /show load def 0 setgray -20 19 moveto /|______Helvetica findfont 18 scalefont setfont { (.) show } leftshow -20 -3 moveto { (.) show } leftshow -20 -25 moveto { (.) show } leftshow grestore gsave % Text Block 0 1 -1 0 217.499 301.027 fixcoordinates /myshow /show load def 0 setgray -19 23 moveto /|______Helvetica findfont 14 scalefont setfont { (.) show } leftshow -19 6 moveto { (.) show } leftshow -19 -11 moveto { (.) show } leftshow grestore gsave % Text Block 0 1 -1 0 217.499 553.027 fixcoordinates /myshow /show load def 0 setgray -19 23 moveto /|______Helvetica findfont 14 scalefont setfont { (.) show } leftshow -19 6 moveto { (.) show } leftshow -19 -11 moveto { (.) show } leftshow grestore gsave % Line 0 1 1 0 207 415.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 595.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 667.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray stroke grestore gsave % Line 0 1 1 0 207 631.999 fixcoordinates newpath -144 0 moveto 144 0 lineto 1 setlinewidth 0 setgray 0 setlinecap [1] 0 setdash stroke grestore gsave % Line 0 1 1 0 40 646.499 fixcoordinates newpath -18 0 moveto 18 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Text Block 0 1 -1 0 16 648.29 fixcoordinates /myshow /show load def 0 setgray -13 -3 moveto /|______Helvetica findfont 12 scalefont setfont { (sp) show } leftshow grestore gsave % Text Block 0 1 -1 0 84 435.749 fixcoordinates /myshow /show load def 0 setgray -13 -1 moveto /|______Helvetica findfont 12 scalefont setfont { (nvp) show } leftshow grestore gsave % Text Block 0 1 -1 0 84 183.749 fixcoordinates /myshow /show load def 0 setgray -13 -1 moveto /|______Helvetica findfont 12 scalefont setfont { (n) show } leftshow grestore gsave % Text Block 0 1 -1 0 315 183.749 fixcoordinates /myshow /show load def 0 setgray -25 -1 moveto /|______Helvetica findfont 12 scalefont setfont { (integer) show } leftshow grestore gsave % Text Block 0 1 -1 0 334 114.902 fixcoordinates /myshow /show load def 0 setgray -12 -1 moveto /|______Times-Roman findfont 12 scalefont setfont { (8) show } leftshow grestore gsave % Text Block 0 1 -1 0 334 366.902 fixcoordinates /myshow /show load def 0 setgray -12 -1 moveto /|______Times-Roman findfont 12 scalefont setfont { (4) show } leftshow grestore gsave % Text Block 0 1 -1 0 337 614.041 fixcoordinates /myshow /show load def 0 setgray -12 -1 moveto /|______Times-Roman findfont 12 scalefont setfont { (4) show } leftshow grestore gsave % Text Block 0 1 -1 0 329 218.041 fixcoordinates /myshow /show load def 0 setgray -12 -1 moveto /|______Times-Roman findfont 12 scalefont setfont { (5) show } leftshow grestore gsave % Text Block 0 1 -1 0 396 183.749 fixcoordinates /myshow /show load def 0 setgray -34 -1 moveto /|_B k VMS.BCKN[V9.DOCS]IPD112.PS;1kR_____Times-Roman findfont 12 scalefont setfont { (saved) show /|______Helvetica findfont 12 scalefont setfont ( &pos) show } leftshow grestore gsave % Text Block 0 1 -1 0 408.5 115.749 fixcoordinates /myshow /show load def 0 setgray -48 -1 moveto /|______Times-Roman findfont 12 scalefont setfont { (saved) show /|______Helvetica findfont 12 scalefont setfont ( &subject) show } leftshow grestore gsave % Text Block 0 1 -1 0 454.499 145.999 fixcoordinates /myshow /show load def 0 setgray -38 -3 moveto /|______Helvetica findfont 12 scalefont setfont { ("coconuts") show } leftshow grestore gsave % Line 0 1 1 0 342 145.999 fixcoordinates newpath -63 0 moveto 63 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Text Block 0 1 -1 0 454.499 397.999 fixcoordinates /myshow /show load def 0 setgray -38 -3 moveto /|______Helvetica findfont 12 scalefont setfont { ("coco") show } leftshow grestore gsave % Line 0 1 1 0 342 397.999 fixcoordinates newpath -63 0 moveto 63 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Text Block 0 1 -1 0 454.499 649.999 fixcoordinates /myshow /show load def 0 setgray -38 -3 moveto /|______Helvetica findfont 12 scalefont setfont { ("coco") show } leftshow grestore gsave % Line 0 1 1 0 342 649.999 fixcoordinates newpath -63 0 moveto 63 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Text Block 0 1 -1 0 81 715.499 fixcoordinates /myshow /show load def 0 setgray -70 12 moveto /|______Helvetica findfont 12 scalefont setfont { (&subject: "the") show } leftshow -70 -2 moveto { (&pos: ) show /|______Times-Roman findfont 12 scalefont setfont (2) show } leftshow grestore gsave % Line 0 1 1 0 471.5 111.499 fixcoordinates newpath -22.5 0 moveto 22.5 0 lineto 1 setlinewidth 0 setgray false true strokearrow grestore gsave % Line 0 1 1 0 384.5 470.749 fixcoordinates newpath -105.75 -0 moveto 105.75 0 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Line 0 1 1 0 495 292.749 fixcoordinates newpath 0 177.25 moveto 0 -177.25 lineto 1 setlinewidth 0 setgray true false strokearrow grestore gsave % Rectangle 0 1 1 0 62 292.999 fixcoordinates newpath -17 -28 moveto 17 -28 lineto 17 28 lineto -17 28 lineto closepath gsave 1 setgray fill grestore 1 setlinewidth 1 setgray stroke grestore gsave % Rectangle 0 1 1 0 350 292.999 fixcoordinates newpath -17 -28 moveto 17 -28 lineto 17 28 lineto -17 28 lineto closepath gsave 1 setgray fill grestore 1 setlinewidth 1 setgray stroke grestore gsave % Rectangle 0 1 1 0 62 532.999 fixcoordinates newpath -17 -28 moveto 17 -28 lineto 17 28 lineto -17 28 lineto closepath gsave 1 setgray fill grestore 1 setlinewidth 1 setgray stroke grestore gsave % Rectangle 0 1 1 0 350 532.999 fixcoordinates newpath -17 -28 moveto 17 -28 lineto 17 28 lineto -17 28 lineto closepath gsave 1 setgray fill grestore 1 setlinewidth 1 setgray stroke grestore %%------ End Main Program ------% end vmstate restore %%%Trailer %%%Pages:1 endFig 1 f 612 5424(Since)N 5 f 809(escan)X 1 f 1038(suspends,)X 1364(the)X 1479(variable)X 1755(referencing)X 2139(the)X 2254(saved)X 2454(values)X 2676(of)X 5 f 2762(&subject)X 1 f 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(4)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 612 672(and)N 5 f 747(&pos)X 1 f 945(is)X 1015(preserved)X 1345(in)X 1424(a)X 1477(generator)X 1798(frame)X 2004(on)X 2102(the)X 2218(stack)X 2401(until)X 2565(the)X 2681(interpreter)X 3034(returns)X 3275(a)X 3329(signal)X 3538(to)X 5 f 3620(escan)X 1 f 3832(.)X 3870(When)X 4080(this)X 4213(hap-)X 612 768(pens,)N 5 f 801(escan)X 1 f 1033(again)X 1227(switches)X 1523(the)X 1641(values)X 1866(of)X 5 f 1955(&subject)X 1 f 2280(and)X 5 f 2418(&pos)X 1 f 2619(with)X 2781(those)X 2970(saved)X 3173(on)X 3273(the)X 3391(stack.)X 3596(It)X 3665(then)X 3823(passes)X 4048(the)X 4165(signal)X 612 864(on)N 709(to)X 788(the)X 903(interpreter)X 1255(invocation)X 1610(below)X 1823(it.)X 732 988(The)N 878(changes)X 1158(described)X 1487(so)X 1579(far)X 1690(handle)X 1925(the)X 2044(termination)X 2434(of)X 2523(string)X 2727(scanning)X 3034(by)X 3136(producing)X 3483(a)X 3541(result,)X 3761(expression)X 4126(failure,)X 5 f 612 1084(break)N 1 f 811(,)X 5 f 855(next)X 1 f 1005(,)X 5 f 1049(return)X 1 f 1257(,)X 1299(and)X 5 f 1439(fail)X 1 f 1563(and)X 1701(the)X 1821(removal)X 2106(of)X 2195(a)X 2253(suspended)X 2609(scanning)X 2916(expression)X 3280(on)X 3381(reaching)X 3679(the)X 3798(end)X 3935(of)X 4023(a)X 4080(bounded)X 612 1180(expression.)N 997(The)X 1144(one)X 1282(case)X 1443(left)X 1572(is)X 1647(exiting)X 1891(string)X 2095(scanning)X 2403(by)X 2506(suspending)X 2889(out)X 3014(of)X 3104(a)X 3163(procedure.)X 3528(A)X 3609(\256eld)X 3774(has)X 3904(been)X 4079(added)X 4294(to)X 612 1276(the)N 734(procedure)X 1080(frame)X 1292(to)X 1378(handle)X 1616(this.)X 1775(It)X 1848(points)X 2067(to)X 2153(the)X 2274(descriptors)X 2649(holding)X 2916(the)X 3037(saved)X 3243(values)X 3471(of)X 5 f 3563(&subject)X 1 f 3891(and)X 5 f 4032(&pos)X 1 f 4236(that)X 612 1372(were)N 786(in)X 865(effect)X 1066(when)X 1257(the)X 1372(procedure)X 1711(was)X 1853(invoked:)X 5 f 900 1516(struct)N 1132(descrip)X 9 f 1426(*)X 5 f (pf_scan;)S 2052(/)X 9 f 2074(*)X 5 f 2151(pointer)X 2431(to)X 2534(saved)X 2783(scanning)X 3138(environment)X 9 f 3613(*)X 5 f (/)S 1 f 612 1660(When)N 827(the)X 948(procedure)X 1293(frame)X 1504(is)X 1580(constructed,)X 1993(this)X 2131(\256eld)X 2297(is)X 2374(set)X 2487(to)X 2573(null)X 2721(because)X 3000(the)X 3122(scanning)X 3431(environment)X 3860(associated)X 4214(with)X 612 1756(the)N 729(invocation)X 1086(is)X 1158(still)X 1296(active.)X 1544(If)X 5 f 1619(bscan)X 1 f 1850(determines)X 2221(that)X 2360(it)X 2423(is)X 2495(saving)X 2723(this)X 2857(environment)X 3281(\(by)X 3407(seeing)X 3630(the)X 3746(null)X 3888(\256eld\),)X 4095(it)X 4157(\256lls)X 4294(in)X 612 1852(the)N 729(\256eld.)X 911(When)X 1123(this)X 1258(environment)X 1683(is)X 1756(made)X 1950(active)X 2162(again,)X 2376(the)X 2494(\256eld)X 2656(must)X 2831(be)X 2927(reset)X 3099(to)X 3181(null.)X 3345(Both)X 5 f 3522(bscan)X 1 f 3754(and)X 5 f 3892(escan)X 1 f 4124(partici-)X 612 1948(pate)N 763(in)X 842(maintaining)X 1241(the)X 1356(\256eld.)X 732 2072(When)N 944(a)X 1000(procedure)X 1342(suspends,)X 1671(the)X 1789(\256eld)X 1951(is)X 2024(checked)X 2308(to)X 2390(see)X 2513(if)X 2582(the)X 2700(scanning)X 3005(environment)X 3430(of)X 3517(the)X 3636(invocation)X 3995(is)X 4069(active.)X 4302(If)X 612 2168(this)N 746(environment)X 1170(is)X 1242(in)X 1323(a)X 1378(saved)X 1580(state,)X 1766(the)X 1883(currently)X 2192(active)X 2403(environment)X 2827(is)X 2899(exchanged)X 3262(with)X 3423(the)X 3540(saved)X 3742(environment.)X 4186(If)X 4258(the)X 612 2264(procedure)N 951(is)X 1021(resumed,)X 1330(the)X 1445(environments)X 1898(must)X 2070(be)X 2163(switched)X 2465(back.)X 732 2388(Having)N 991(a)X 1050(procedure)X 1396(suspended)X 1754(in)X 1840(the)X 1962(middle)X 2208(of)X 2299(string)X 2505(scanning)X 2814(adds)X 2985(one)X 3125(additional)X 3469(complication.)X 3931(The)X 4080(bounded)X 612 2484(expression)N 986(containing)X 1355(the)X 1484(procedure)X 1837(call)X 1984(may)X 2152(be)X 2258(removed.)X 2589(This)X 2761(results)X 3000(in)X 3092(an)X 3198(unwinding)X 3570(signal)X 3791(being)X 3999(propagated)X 612 2580(through)N 5 f 890(bscan)X 1 f 1102(.)X 1149(However,)X 5 f 1493(bscan)X 1 f 1732(must)X 1914(not)X 2043(exchange)X 2374(the)X 2499(scanning)X 2811(environments)X 3274(again.)X 3495(This)X 3664(problem)X 3958(isCb( VMS.BCKN[V9.DOCS]IPD112.PS;1)X 4039(solved)X 4276(by)X 612 2676(having)N 5 f 856(bscan)X 1 f 1092(and)X 5 f 1234(escan)X 1 f 1470(switch)X 1703(environments)X 2163(only)X 2329(when)X 2527(a)X 2587(signal)X 2802(is)X 2879(received)X 3176(from)X 3356(the)X 3478(procedure)X 3823(they)X 3984(were)X 4164(called)X 612 2772(from.)N 805(This)X 964(is)X 1034(detected)X 1319(by)X 1416(comparing)X 1776(procedure)X 2115(frame)X 2320(pointers.)X 3 f 612 2964(2.2)N 746(Co-Expression)X 1265(Activation)X 1638([Section)X 1931(10.4,)X 2108(pp.)X 2233(180-182])X 1 f 732 3088(Previously,)N 1114(the)X 1232(implementation)X 1754(of)X 1841(co-expressions)X 2338(did)X 2460(not)X 2582(properly)X 2874(support)X 3134(an)X 3230(arbitrary)X 3527(sequence)X 3842(of)X 3929(activators)X 4262(for)X 612 3184(a)N 677(given)X 884(co-expression.)X 1396(Co-expression)X 1888(blocks)X 2126(had)X 2270(a)X 2334(descriptor)X 2683(that)X 2831(pointed)X 3099(to)X 3189(the)X 3315(most)X 3498(recent)X 3723(activator)X 4032(of)X 4127(the)X 4253(co-)X 612 3280(expression.)N 1009(Suppose)X 1297(co-expression)X 5 f 1762(A)X 1 f 1832(is)X 1902(activated)X 2209(by)X 2306(co-expression)X 5 f 2771(B)X 1 f 2824(.)X 2878(The)X 3021(activator)X 3320(descriptor)X 3659(of)X 5 f 3746(A)X 1 f 3817 0.3889(references)AX 5 f 4169(B)X 1 f 4240(and)X 612 3376(when)N 5 f 807(A)X 1 f 879(fails)X 1036(or)X 1122(returns,)X 1384(the)X 1501(activator)X 1801(descriptor)X 2141(of)X 5 f 2229(A)X 1 f 2301(directs)X 2534(it)X 2597(to)X 2678(pass)X 2835(control)X 3081(to)X 5 f 3164(B)X 1 f 3236(and)X 3371(this)X 3505(works)X 3720(properly.)X 4047(Consider,)X 612 3472(however:)N 5 f 900 3616(A)N 990(:=)X 1096(create)X 1354(@B)X 900 3712(B)N 990(:=)X 1096(create)X 1354(@C)X 900 3808(C)N 995(:=)X 1101(create)X 1359(@B)X 900 3904(@A)N 612 4048(&main)N 1 f 859(activates)X 5 f 1163(A)X 1 f 1216(,)X 5 f 1259(A)X 1 f 1333(activates)X 5 f 1638(B)X 1 f 1691(,)X 1733(and)X 5 f 1873(B)X 1 f 1948(activates)X 5 f 2253(C)X 1 f 2311(.)X 2370(At)X 2472(this)X 2609(point,)X 2815(the)X 2935(activator)X 3238(of)X 5 f 3329(B)X 1 f 3404(is)X 5 f 3481(A)X 1 f 3534(,)X 3576(but)X 3700(when)X 5 f 3898(C)X 1 f 3978(activates)X 5 f 4283(B)X 1 f 4336(,)X 612 4144(the)N 730(activator)X 1031(of)X 5 f 1120(B)X 1 f 1193(is)X 1266(changed)X 1554(to)X 5 f 1638(C)X 1 f 1696(.)X 1753(At)X 1853(this)X 1987(same)X 2171(time,)X 2352(the)X 2469(activator)X 2769(of)X 5 f 2857(C)X 1 f 2934(is)X 5 f 3008(B)X 1 f 3061(.)X 3117(Thus,)X 3316(when)X 5 f 3511(B)X 1 f 3583(fails)X 3740(or)X 3826(returns,)X 4088(it)X 4151(passes)X 612 4240(control)N 856(to)X 5 f 937(C)X 1 f 995(,)X 1032(which)X 1245(in)X 1324(turn)X 1470(passes)X 1692(control)X 1936(back)X 2105(to)X 5 f 2186(B)X 1 f 2256(\320)X 2353(an)X 2446(endless)X 2699(loop.)X 3 f 612 4432(Implementation)N 1176(Rationale)X 1522(and)X 1667(Overview)X 1 f 732 4556(While)N 955(a)X 1018(single)X 1236(activator)X 1544(works)X 1767(for)X 1888(the)X 2013(case)X 2180(of)X 2275(two)X 2423(co-expressions)X 2928(calling)X 3174(each)X 3350(other)X 3543(in)X 3633(a)X 3697(coroutine)X 4028(fashion,)X 4312(it)X 612 4652(seems)N 828(to)X 910(reasonable)X 1273(to)X 1354(support)X 1613(a)X 1668(more)X 1852(general)X 2108(case)X 2266(and)X 2401(allow)X 2598(co-expressions)X 3094(to)X 3175(have)X 3346(an)X 3441(arbitrary)X 3737(sequence)X 4051(of)X 4137(activa-)X 612 4748(tors.)N 790(This)X 953(goal)X 1112(was)X 1258(achieved)X 1565(by)X 1667(replacing)X 1988(the)X 2108(single)X 2321(activator)X 2624(descriptor)X 2967(in)X 3051(a)X 3109(co-expression)X 3577(with)X 3741(a)X 3799(stack)X 3986(of)X 4075(activator)X 612 4844(descriptors.)N 1027(This)X 1195(stack)X 1386(allows)X 1621(for)X 1741(an)X 1843(arbitrary)X 2146(sequence)X 2467(of)X 2560(activators)X 2898(to)X 2986(be)X 3087(recorded)X 3394(and)X 3535(reversed)X 3833(with)X 4000(subsequent)X 5 f 612 4940(coret)N 1 f 806(and)X 5 f 941(cofail)X 1 f 1144(operations.)X 732 5064(Theoretically,)N 1198(the)X 1314(sequence)X 1627(of)X 1712(activators)X 2043(can)X 2174(be)X 2269(of)X 2355(an)X 2450(arbitrary)X 2746(length)X 2965(and)X 3100(be)X 3195(comprised)X 3548(of)X 3634(an)X 3729(arbitrary)X 4025(number)X 4289(of)X 612 5160(distinct)N 874(activators.)X 1250(Thus,)X 1457(the)X 1582(size)X 1734(of)X 1828(the)X 1953(stack)X 2145(used)X 2319(to)X 2407(record)X 2639(the)X 2763(sequence)X 3084(of)X 3177(activators)X 3515(should)X 3754(only)X 3922(be)X 4024(limited)X 4276(by)X 612 5256(available)N 931(memory.)X 1264(To)X 1382(provide)X 1656(expandability,)X 2141(the)X 2268(activator)X 2578(stack)X 2772(is)X 2854(maintained)X 3239(as)X 3335(a)X 3400(linked)X 3629(list)X 3755(of)X 3852(blocks,)X 4111(each)X 4289(of)X 612 5352(which)N 825(contain)X 1078(a)X 1131(\256xed)X 1308(number)X 1570(of)X 1654(stack)X 1836(elements.)X 732 5476(In)N 817(many)X 1013(applications,)X 1438(a)X 1492(co-expression's)X 2014(activator)X 2313(is)X 2384(often)X 2567(the)X 2683(same,)X 2886(time)X 3046(after)X 3212(time.)X 3409(The)X 3552(most)X 3726(obvious)X 3998(example)X 4289(of)X 612 5572(this)N 747(is)X 820(two)X 960(co-expressions)X 5 f 1459(A)X 1 f 1532(and)X 5 f 1670(B)X 1 f 1743(calling)X 1981(each)X 2149(other)X 2334(in)X 2416(a)X 2472(coroutine)X 2795(fashion:)X 3073(after)X 3241(the)X 3359(start-up)X 3624(sequence,)X 3958(the)X 4075(activator)X 612 5668(of)N 5 f 698(A)X 1 f 768(is)X 838(always)X 5 f 1080(B)X 1 f 1133(,)X 1170(and)X 1303(conversely.)X 1705(In)X 1789(such)X 1953(a)X 2006(case,)X 2182(after)X 2 f 2347(n)X 1 f 2404(changes)X 2680(of)X 2764(control,)X 3028(each)X 3193(co-expression)X 3656(would)X 3873(have)X 4043(an)X 4137(activa-)X 612 5764(tor)N 724(stack)X 912(containing)X 2 f 1273(n)X 1 f 1335(elements,)X 1662(all)X 1764(of)X 1853(which)X 2071(refer)X 2246(to)X 2330(the)X 2450(other)X 2637(co-expression.)X 3142(To)X 3253(accommodate)X 3721(this)X 3858(common)X 4160(use)X 4289(of)X 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(5)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 612 672(co-expressions,)N 1128(each)X 1295(stack)X 1479(element)X 1752(has)X 1878(a)X 1933(count)X 2130(\256eld)X 2292(that)X 2432(indicates)X 2737(the)X 2855(number)X 3120(of)X 3207(consecutive)X 3606(activations)X 3973(by)X 4073(the)X 4191(asso-)X 612 768(ciated)N 827(activator.)X 1168(In)X 1258(the)X 1379(example,)X 1694(instead)X 1943(of)X 2032(having)X 2272(a)X 2330(stack)X 2517(of)X 2 f 2606(n)X 1 f 2668(identical)X 2966(elements,)X 3293(the)X 3413(stack)X 3600(consists)X 3875(of)X 3964(one)X 4102(element)X 612 864(that)N 749(has)X 873(a)X 926(count)X 1121(\256eld)X 1280(of)X 2 f 1364(n)X 1 f (.)S 1458(Although)X 1777(this)X 1909(heuristic)X 2202(can)X 2331(reduce)X 2563(memory)X 2847(throughput)X 3215(substantially,)X 3656(it)X 3717(should)X 3947(be)X 4040(noted)X 4236(that)X 612 960(the)N 727(underlying)X 1091(problem)X 1375(is)X 1445(one)X 1578(of)X 1662(data)X 1813(compression.)X 732 1084(With)N 912(a)X 968(stack)X 1153(data)X 1307(structure)X 1608(such)X 1775(as)X 1862(this,)X 2017(it)X 2081(is)X 2154(only)X 2316(necessary)X 2649(to)X 2731(associate)X 3041(a)X 3098(stack)X 3284(with)X 3447(each)X 3616(co-expression,)X 4103(pushing)X 612 1180(activators)N 941(in)X 1020(response)X 1318(to)X 5 f 1399(coact)X 1 f 1606(operations,)X 1977(and)X 2110(popping)X 2389(activators)X 2718(in)X 2797(response)X 3095(to)X 5 f 3176(coret)X 1 f 3370(and)X 5 f 3505(cofail)X 1 f 3708(operations.)X 3 f 612 1372(Implementation)N 1176(Details)X 1 f 732 1496(The)N 5 f 882(activator)X 1 f 1206(\256eld)X 1371(of)X 1461(the)X 5 f 1584(b_coexpr)X 1 f 1934(structure)X 2238(has)X 2368(been)X 2544(replaced)X 2841(with)X 5 f 3009(es_actstk)X 1 f 3345(,)X 3389(a)X 3449(pointer)X 3700(to)X 3786(an)X Do{ VMS.BCKN[V9.DOCS]IPD112.PS;1 3886(activator)X 4191(stack)X 612 1592(block,)N 827(known)X 1062(as)X 1146(an)X 5 f 1241(astkblk)X 1 f 1489(.)X 1543(The)X 5 f 1687(astkblk)X 1 f 1952(structure)X 2250(is)X 2320(declared)X 2610(as:)X 5 f 900 1736(struct)N 1132(astkblk)X 1417({)X 1011 1832(int)N 1132(nactivators;)X 1011 1928(struct)N 1243(astkblk)X 9 f 1528(*)X 5 f (astk_nxt;)S 1011 2024(struct)N 1243(actrec)X 1497({)X 1122 2120(word)N 1332(acount;)X 1122 2216(struct)N 1354(b_coexpr)X 9 f 1718(*)X 5 f (activator;)S 1122 2312(})N 1186(arec)X 1347 -0.2167([ActStkBlkEnts];)AX 1011 2408(};)N 1 f 612 2552(The)N 762(array)X 5 f 955(arec)X 1 f 1110(,)X 1156(composed)X 1507(of)X 5 f 1602(actrec)X 1 f 1845(entries,)X 2105(is)X 2184(a)X 2246(segment)X 2539(of)X 2632(the)X 2756(stack.)X 5 f 2986(nactivators)X 1 f 3397(indicates)X 3708(the)X 3832(number)X 4103(of)X 4196(valid)X 612 2648(activator)N 912(entries)X 1145(in)X 1226(this)X 1360(segment)X 1646(of)X 1732(the)X 1849(stack.)X 5 f 2072(arec)X 2233([nactivators)X 9 f 2640(-)X 5 f 2684(1])X 1 f 2769(is)X 2841(the)X 2958(most)X 3132(recent)X 3348(activator.)X 5 f 3687(astk_nxt)X 1 f 4002(is)X 4074(a)X 4129(pointer)X 612 2744(to)N 694(the)X 812(next)X 970(stack)X 1155(block)X 1354(in)X 1437(the)X 1556(list.)X 5 f 1715(ActStkBlkEnts)X 1 f 2236(is)X 2310(a)X 2367(compile-time)X 2815(constant)X 3103(whose)X 3329(current)X 3578(value)X 3773(is)X 3847(100)X 3988(for)X 4103(systems)X 612 2840(with)N 771(a)X 824(large)X 1002(amount)X 1259(of)X 1343(memory)X 1627(and)X 1760(is)X 1830(10)X 1927(for)X 2038(systems)X 2308(with)X 2467(a)X 2520(small)X 2710(amount)X 2967(of)X 3051(memory)X 3335(or)X 3419(\256xed-size)X 3748(memory)X 4032(regions.)X 732 2964(When)N 942(a)X 996(co-expression)X 1460(is)X 1532(created,)X 1804(the)X 5 f 1923(es_actstk)X 1 f 2278(\256eld)X 2439(is)X 2511(set)X 2619(to)X 2700(zero.)X 2895(Upon)X 3092(the)X 3209(\256rst)X 3352(activation)X 3687(of)X 3773(the)X 3890(co-expression,)X 612 3060(memory)N 896(for)X 1007(an)X 5 f 1102(astkblk)X 1 f 1367(is)X 1437(allocated)X 1744(using)X 5 f 1936(malloc\(\))X 1 f 2221(,)X 2258(and)X 5 f 2393(es_actstk)X 1 f 2746(is)X 2816(pointed)X 3073(to)X 3152(this)X 3284(block.)X 732 3184(Four)N 900(routines)X 1175(manipulate)X 1548(co-expression)X 2011(activator)X 2309(stacks:)X 5 f 1044 3328(pushact\(C1,C2\))N 1 f 1735(The)X 1877(co-expression)X 5 f 2342(C1)X 1 f 2461(is)X 2531(added)X 2740(to)X 2819(the)X 2934(activator)X 3232(stack)X 3414(of)X 3498(co-expression)X 5 f 3963(C2)X 1 f 4065(.)X 5 f 1044 3424(popact\(C\))N 1 f 1735(The)X 1877(activator)X 2175(stack)X 2357(of)X 5 f 2443(C)X 1 f 2518(is)X 2588(popped)X 2841(and)X 2974(the)X 3089(top-most)X 3390(activator)X 3688(is)X 3758(returned.)X 5 f 1044 3520(topact\(C\))N 1 f 1735(The)X 1877(most)X 2049(recent)X 2263(activator)X 2561(of)X 5 f 2647(C)X 1 f 2722(is)X 2792(returned.)X 5 f 1044 3616(dumpact\(C\))N 1 f 1735(The)X 1877(activator)X 2175(stack)X 2357(of)X 5 f 2443(C)X 1 f 2518(is)X 2588(dumped)X 2863(\(used)X 3054(for)X 3165(debugging)X 3520(only\).)X 5 f 732 3788(pushact\(C1,C2\))N 1 f 1321(\256rst)X 1476(determines)X 1859(if)X 1939(the)X 2068(most)X 2254(recent)X 2482(activator)X 2794(of)X 5 f 2894(C1)X 1 f 3028(was)X 5 f 3187(C2)X 1 f 3321(and)X 3469(if)X 3550(so,)X 3673(it)X 3749(merely)X 4004(increments)X 5 f 612 3884(acount)N 1 f 870(in)X 952(the)X 1070(appropriate)X 1456(element)X 1730(of)X 5 f 1819(arec)X 1 f 1994(and)X 2130(returns.)X 2409(If)X 5 f 2484(C2)X 1 f 2605(was)X 2749(not)X 2870(the)X 2987(last)X 3117(activator)X 3417(of)X 5 f 3505(C2)X 1 f 3607(,)X 3646(a)X 3701(new)X 5 f 3856(arec)X 1 f 4030(element)X 4303(is)X 612 3980(required.)N 948(If)X 5 f 1035(arec)X 1 f 1221(is)X 1305(full,)X 1467(a)X 1534(new)X 5 f 1701(astkblk)X 1 f 1980(is)X 2064(allocated)X 2385(and)X 2532(added)X 2755(at)X 2844(the)X 2973(front)X 3161(of)X 3260(the)X 3390(list)X 3519(based)X 3734(at)X 5 f 3826(es_actstk)X 1 f 4162(.)X 4231(The)X 612 4076(appropriate)N 1004(slot)X 1145(in)X 5 f 1235(arec)X 1 f 1416(is)X 1495(located,)X 1773(\256lled)X 1963(in)X 2051(with)X 2219(the)X 2343(new)X 2503(activator,)X 5 f 2832(acount)X 1 f 3096(is)X 3175(set)X 3289(to)X 3376(one,)X 3537(and)X 5 f 3680(nactivators)X 1 f 4090(is)X 4168(incre-)X 612 4172(mented.)N 5 f 732 4296(pushact)N 1 f 1027(is)X 1097(called)X 1306(in)X 1385(the)X 5 f 1502(Op_Coact)X 1 f 1877(case)X 2033(of)X 5 f 2119(interp)X 1 f 2318(,)X 2355(and)X 2488(it)X 2549(is)X 2619(also)X 2765(called)X 2974(in)X 5 f 3055(init\(\))X 1 f 3228(to)X 3307(make)X 5 f 3500(&main)X 1 f 3743(its)X 3835(own)X 3990(activator.)X 5 f 732 4420(popact\(C\))N 1 f 1108(locates)X 1357(the)X 5 f 1483(arec)X 1 f 1664(entry)X 1855(that)X 2001(is)X 2080(associated)X 2436(with)X 2604(the)X 2728(most)X 2910(recent)X 3134(activator)X 3442(and)X 3585(holds)X 3785(the)X 3910(co-expression)X 612 4516(pointer)N 858(for)X 971(later)X 1133(return.)X 1381(If)X 1454(the)X 5 f 1573(acount)X 1 f 1830(\256eld)X 1991(is)X 2062(one,)X 5 f 2218(nactivators)X 1 f 2621(is)X 2692(decremented)X 3121(to)X 3201(re\257ect)X 3420(the)X 3536(removal)X 3817(of)X 3902(an)X 5 f 3998(arec)X 1 f 4171(entry.)X 612 4612(If)N 5 f 694(acount)X 1 f 958(is)X 1037(greater)X 1287(than)X 1451(one,)X 5 f 1615(acount)X 1 f 1879(is)X 1958(merely)X 2207(decremented.)X 2681(When)X 2899(all)X 3006(the)X 5 f 3133(arec)X 1 f 3315(entries)X 3556(in)X 3645(an)X 5 f 3750(astkblk)X 1 f 4025(have)X 4204(been)X 612 4708(popped,)N 885(the)X 5 f 1002(astkblk)X 1 f 1267(needs)X 1467(to)X 1546(be)X 1639(freed.)X 1859(An)X 5 f 1976(astkblk)X 1 f 2241(is)X 2311(freed)X 2494(when)X 5 f 2687(nactivators)X 1 f 3089(is)X 3159(zero)X 3315(and)X 3448(a)X 3501(pop)X 3638(is)X 3708(required.)X 5 f 732 4832(popact\(\))N 1 f 1041(is)X 1111(called)X 1320(in)X 1399(the)X 5 f 1516(Op_Coret)X 1 f 1878(and)X 5 f 2013(Op_Cofail)X 1 f 2384(cases)X 2571(of)X 5 f 2657(interp\(\))X 1 f 2910(.)X 5 f 732 4956(topact\(C\))N 1 f 1078(is)X 1149(only)X 1309(required)X 1595(for)X 5 f 1709(&source)X 1 f 2019(and)X 2153(merely)X 2394(returns)X 2636(the)X 2753(most)X 2927(recent)X 3143(activator.)X 3480(The)X 3624(only)X 3785(complication)X 4222(is)X 4294(to)X 612 5052(skip)N 762(the)X 877(\256rst)X 5 f 1020(astkblk)X 1 f 1285(on)X 1382(the)X 1497(chain)X 1688(if)X 1754(its)X 5 f 1848(nactivators)X 1 f 2250(\256eld)X 2409(is)X 2479(zero.)X 3 f 612 5244(Garbage)N 927(Collection)X 1291(Issues)X 1 f 732 5368(A)N 822(co-expression)X 1300(is)X 1385(live)X 1537(with)X 1712(respect)X 1973(to)X 2068(activators)X 2413(if)X 2495(it)X 2572(is)X 2658(the)X 2789(activator)X 3103(of)X 3203(a)X 3272(live)X 3425(co-expression,)X 3924(since)X 4122(the)X 4253(co-)X 612 5464(expression)N 974(it)X 1037(activated)X 1346(may)X 5 f 1505(coret)X 1 f 1701(or)X 5 f 1789(cofail)X 1 f 1975(.)X 2031(Thus,)X 2230(all)X 2329(the)X 2446(activators)X 2777(in)X 2858(the)X 2975(activator)X 3275(stack)X 3459(of)X 3545(a)X 3599(live)X 3737(co-expression)X 4201(must)X 612 5560(be)N 716(marked.)X 1022(This)X 1192(marking)X 1487(is)X 1568(done)X 1752(with)X 1922(special-case)X 2339(code)X 2519(in)X 5 f 2611(markblock\(\))X 1 f 3029(.)X 5 f 3096(markblock\(\))X 1 f 3542(requires)X 3829(the)X 3955(address)X 4224(of)X 4320(a)X 612 5656(descriptor,)N 976(but)X 1101(the)X 1222(activators)X 1557(are)X 1679(stored)X 1898(as)X 1988(a)X 2047(list)X 2167(of)X 2257(addresses)X 2588(of)X 5 f 2679(b_coexpr)X 1 f 3028(blocks)X 3259(rather)X 3469(than)X 3629(as)X 3718(a)X 3776(list)X 3895(of)X 3984(descriptors.)X 612 5752(Because)N 898(back-chaining)X 1371(is)X 1442(not)X 1562(done)X 1736(with)X 1897(co-expressions)X 2393(and)X 2528(the)X 2645(descriptors)X 3016(that)X 3155 0.4531(reference)AX 3475(them,)X 3674(it)X 3737(is)X 3809(acceptable)X 4168(to)E VMS.BCKN[V9.DOCS]IPD112.PS;1^X 4249(use)X 612 5848(a)N 667(dummy)X 930(descriptor,)X 1289(\256lling)X 1497(in)X 1577(its)X 1670(v-word)X 1920(with)X 2080(each)X 2246(activator)X 2545(address)X 2804(in)X 2884(turn)X 3031(and)X 3165(calling)X 5 f 3403(markblock\(\))X 1 f 3839(with)X 3999(the)X 4115(address)X 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(6)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 612 672(of)N 696(this)X 828(descriptor.)X 732 796(When)N 944(a)X 1000(co-expression)X 1466(is)X 1539(freed)X 1725(in)X 5 f 1809(cofree\(\))X 1 f 2084(,)X 2124(it)X 2188(has)X 2315(a)X 2371(still-allocated)X 5 f 2829(astkblk)X 1 f 3097(associated)X 3447(with)X 3609(it)X 3673(that)X 3813(must)X 3988(be)X 4084(freed.)X 4307(It)X 612 892(seems)N 835(that)X 982(there)X 1170(is)X 1250(no)X 1357(way)X 1517(to)X 1605(produce)X 1890(a)X 1952(dead)X 2130(co-expression)X 2602(that)X 2748(has)X 2881(a)X 2943(non-empty)X 3316(activator)X 3623(stack,)X 3834(but)X 3962(nonetheless,)X 612 988(code)N 781(is)X 851(present)X 1100(to)X 1179(handle)X 1410(multiple)X 5 f 1695(astkblk)X 1 f 1943(s.)X 732 1112(When)N 5 f 953(pushact\()X 1 f 1285(requires)X 1571(a)X 1634(new)X 5 f 1797(astkblk)X 1 f 2045(,)X 2092(the)X 2217(ensuing)X 5 f 2495(malloc\(\))X 1 f 2807(may)X 2972(cause)X 3178(a)X 3242(garbage)X 3525(collection.)X 3906(This)X 4076(potential)X 612 1208(allocation)N 951(is)X 1027(handled)X 1304(by)X 1407(doing)X 1612(the)X 5 f 1734(pushact\(\))X 1 f 2088(in)X 2172(the)X 5 f 2294(Op_Coact)X 1 f 2674(case)X 2835(prior)X 3013(to)X 3097(establishing)X 3501(any)X 3639(pointers)X 3919(to)X 4003(relocatable)X 612 1304(data)N 764(objects.)X 1046(This)X 1206(ensures)X 1466(that)X 1605(no)X 1704(C)X 1776(pointers)X 2053(are)X 2171(invalidated,)X 2566(and)X 2701(that)X 2840(there)X 3020(are)X 3138(no)X 3237(reachability)X 3635(problems,)X 3972(so)X 4062(this)X 4196(solu-)X 612 1400(tion)N 760(seems)X 980(satisfactory.)X 1411(Having)X 1671(predictive)X 2016(need)X 2192(for)X 2310(the)X 2432(static)X 2625(memory)X 2915(region)X 3143(would)X 3366(avoid)X 3567(this)X 3705(special)X 3951(case,)X 4133(but)X 4258(the)X 612 1496(nature)N 839(of)X 932(the)X 1056(memory)X 1349(management)X 1785(used)X 1958(in)X 2046(the)X 2170(static)X 2365(region)X 2597(precludes)X 2932(a)X 2995(reasonably)X 3370(quick)X 3575(way)X 3736(of)X 3830(determining)X 4244(if)X 4320(a)X 612 1592(given)N 807(amount)X 1064(of)X 1148(memory)X 1432(is)X 1502(available.)X 1846(This)X 2005(problem)X 2289(merits)X 2506(further)X 2742(thought.)X 3 f 612 1784(2.3)N 746(Storage)X 1026(Management)X 1493([Section)X 1786(11.3.5,)X 2023(pp.)X 2148(213-214])X 1 f 732 1908(The)N 883(original)X 1158(implementation)X 1686(of)X 1779(storage)X 2037(management)X 2473(for)X 2593(Icon)X 2762(was)X 2913(predicated)X 3274(on)X 3380(the)X 3504(assumption)X 3894(that)X 4040(the)X 4164(user's)X 612 2004(memory)N 898(region)X 1122(can)X 1253(be)X 1348(expanded)X 1675(using)X 5 f 1869(sbrk\(\))X 1 f 2093(if)X 2161(additional)X 2500(space)X 2698(is)X 2770(needed)X 3017(during)X 3244(program)X 3534(execution.)X 3901(This)X 4061(approach)X 612 2100(works)N 831(well)X 992(on)X 1095(some)X 1287(systems,)X 1583(but)X 1708(is)X 1784(awkward)X 2102(on)X 2205(others)X 2424(and)X 2564(some)X 2757(systems)X 3034(do)X 3138(not)X 3264(support)X 5 f 3530(sbrk\(\))X 1 f 3759(at)X 3841(all.)X 3965(The)X 4114(trend)X 4303(is)X 612 2196(away)N 799(from)X 972(the)X 1087(support)X 1344(of)X 5 f 1430(sbrk\(\))X 1 f 1635(.)X 732 2320(While)N 954(the)X 1078(matter)X 1309(still)X 1454(is)X 1533(not)X 1661(completely)X 2043(settled)X 2278(\(storage)X 2563(management)X 2999(remains)X 3279(the)X 3403(biggest)X 3660(single)X 3877(problem)X 4170(in)X 4258(the)X 612 2416(implementation)N 1142(of)X 1236(Icon\),)X 1453(an)X 1556(alternative)X 1922(method)X 2189(of)X 2283(handling)X 2590(Icon's)X 2818(memory)X 3112(regions)X 3375(has)X 3509(been)X 3688(added.)X 3927(This)X 4096(method,)X 612 2512(called)N 828(``\256xed)X 1066(regions'')X 1380(uses)X 1542(the)X 1664(system's)X 5 f 1970(malloc\(\))X 1 f 2280(to)X 2367(provide)X 2637(separate)X 2926(string)X 3133(and)X 3274(block)X 3477(regions)X 3738(at)X 3821(the)X 3944(beginning)X 4289(of)X 612 2608(execution,)N 972(as)X 1066(opposed)X 1360(to)X 1449(the)X 1574(usual)X 1770(``expandable)X 2217(regions'',)X 2554(in)X 2643(which)X 2866(one)X 3009(large)X 3197(block)X 3402(for)X 3523(all)X 3630(regions)X 3893(is)X 3973(obtained)X 4276(by)X 5 f 612 2704(brk\(\))N 1 f 777(.)X 732 2828(With)N 921(\256xed)X 1110(regions,)X 1395(the)X 1522(string)X 1733(and)X 1878(block)X 2086(regions)X 2352(are)X 2481(not)X 2613(necessarily)X 3000(contiguous,)X 3401(and)X 3547(neither)X 3800(can)X 3942(be)X 4048(expanded)X 612 2924(\(although)N 944(their)X 1116(initial)X 1327(sizes)X 1508(can)X 1645(be)X 1746(set)X 1860(by)X 1965(environment)X 2395(variables\).)X 2757(Co-expressions)X 3276(are)X 3400(allocated)X 3715(as)X 3807(needed)X 4060(using)X 4258(the)X 612 3020(system's)N 5 f 917(malloc\(\))X 1 f 1202(,)X 1245(instead)X 1495(of)X 1585(being)X 1786(allocated)X 2099(by)X 2202(Icon)X 2369(from)X 2549(its)X 2648(static)X 2841(region.)X 3090(Fixed)X 3296(regions)X 3556(do)X 3660(not)X 3786(affect)X 3994(the)X 4116(method)X 612 3116(used)N 777(for)X 889(garbage)X 1162(collection,)X 1516(but)X 1636(if)X 1703(there)X 1882(is)X 1953(not)X 2073(enough)X 2327(space)X 2524(after)X 2690(collection)X 3024(in)X 3104(either)X 3305(the)X 3421(string)X 3620(or)X 3704(block)X 3899(region,)X 4141(execu-)X 612 3212(tion)N 753(is)X 823(terminated)X 1183(with)X 1342(an)X 1435(error)X 1609(message)X 1898(instead)X 2142(of)X 2226(expanding)X 2577(the)X 2692(region.)X 732 3336(Portions)N 1027(of)X 1123(the)X 1250(source)X 1489(code)X 1670(that)X 1819(are)X 1947(affected)X 2236(by)X 2345(the)X 2472(\256xed-regions)X 2924(option)X 3157(are)X 3285(identi\256ed)X 3617(by)X 3727(the)X 3855(de\256ned)X 4121(symbol)X 5 f 612 3432(FixedRegions)N 1 f 1099(.)X 1162(The)X 1312(main)X 1497(module)X 1762(related)X 2006(to)X 2093(storage)X 2350(management,)X 5 f 2807(rmemmgt.c)X 1 f (,)S 3252(now)X 3415(includes)X 3707(either)X 5 f 3917(rmem\256x.c)X 1 f 4289(or)X 5 f 612 3528(rmemexp.c)N 1 f 1024(depending)X 1375(on)X 1472(whether)X 1748(or)X 1832(not)X 5 f 1953(FixedRegions)X 1 f 2457(is)X 2527(de\256ned.)X 732 3652(Some)N 937(other)X 1125(changes)X 1407(have)X 1582(been)X 1757(made)X 1954(to)X 2039(the)X 2160(expandable-regions)X 2812(version)X 3071(of)X 3161(storage)X 3416(management)X 3850(to)X 3936(adjust)X 4151(region)X 612 3748(sizes)N 785(in)X 864(the)X 979(event)X 1170(there)X 1348(is)X 1418(not)X 1537(enough)X 1790(memory)X 2074(to)X 2153(expand)X 2402(a)X 2455(region)X 2677(to)X 2756(the)X 2871(desired)X 3120(size.)X 732 3872(Close)N 935(examination)X 1352(of)X 1440(the)X 1560(present)X 1814(source)X 2046(code)X 2220(will)X 2366(reveal)X 2585(that)X 2727(the)X 2847(\256xed-)X 3056(and)X 3194(expandable-regions)X 3845(options)X 4102(co-exist)X 612 3968(somewhat)N 963(uncomfortably;)X 1482(the)X 1605(present)X 1862(situation)X 2162(is)X 2240(a)X 2301(work-around)X 2741(to)X 2828(allow)X 3031(Icon)X 3199(to)X 3286(run)X 3418(on)X 3523(systems)X 3801(that)X 3946(do)X 4051(not)X 4178(allow)X 612 4064(expansion)N 957(of)X 1044(the)X 1162(user's)X 1374(memory)X 1661(region,)X 1906(but)X 2028(it)X 2092(is)X 2165(not)X 2287(a)X 2343(complete)X 2657(solution)X 2935(to)X 3018(the)X 3137(problem.)X 3445(It)X 3515(probably)X 3821(would)X 4042(be)X 4139(a)X 4196(good)X 612 4160(idea)N 764(to)X 844(start)X 1000(from)X 1174(scratch)X 1420(and)X 1554(completely)X 1928(redesign)X 2218(Icon's)X 2437(storage-management)X 3124(system.)X 3383(ThisF2 VMS.BCKN[V9.DOCS]IPD112.PS;1)X 3542(would)X 3759(be)X 3852(a)X 2 f 3905(major)X 1 f 4113(project,)X 612 4256(however,)N 933(and)X 1073(it)X 1141(is)X 1218(not)X 1344(even)X 1521(clear)X 1703(that)X 1848(a)X 1909(single)X 2125(method,)X 2410(however)X 2712(clever)X 2934(and)X 3075(sophisticated,)X 3538(can)X 3675(do)X 3780(a)X 3841(good)X 4026(job)X 4153(on)X 4258(the)X 612 4352(wide)N 785(range)X 981(of)X 1065(computer)X 1385(architectures)X 1813(presently)X 2124(available.)X 3 f 612 4544(2.4)N 746(Large)X 968(Integers)X 1266([Section)X 1559(4.1,)X 1696(p.)X 1777(44])X 1 f 732 4668(Version)N 1007(8)X 1068(of)X 1156(Icon)X 1320(supports)X 1612(large-integer)X 2044(arithmetic)X 2390(in)X 2473(which)X 2690(the)X 2810(magnitude)X 3170(of)X 3259(integers)X 3535(is)X 3610(not)X 3734(limited)X 3982(by)X 4084(machine)X 612 4764(architecture.)N 1071(Large)X 1301(integers)X 1597(do)X 1719(not)X 1863(come)X 2079(into)X 2244(existence)X 2584(until)X 2771(integer)X 3035(over\257ow)X 3361(would)X 3602(occur.)X 3859(See)X 5 f 4018(h/rt.h)X 1 f 4240(and)X 5 f 612 4860(iconx/rlargint.c)N 1 f 1143(for)X 1254(details.)X 732 4984(Over\257ow)N 1052(checking)X 1359(in)X 1438(C)X 1508(is)X 1578(now)X 1733(provided.)X 2055(See)X 5 f 2190(iconx/rmisc.c)X 1 f 2652(.)X 3 f 612 5176(2.5)N 746(Dynamic)X 1070(Hashing)X 1370([Chapter)X 1699(7,)X 1776(pp.)X 1901(96-109])X 1 f 732 5300(Earlier)N 971(versions)X 1258(of)X 1345(Icon)X 1508(implemented)X 1946(sets)X 2086(and)X 2223(tables)X 2431(using)X 2625(hash)X 2793(tables)X 3001(with)X 3164(a)X 3221(\256xed)X 3402(number)X 3668(of)X 3756(buckets)X 4022(\(37\).)X 4214(This)X 612 5396(worked)N 876(well)X 1037(for)X 1154(small)X 1350(tables,)X 1580(but)X 1705(performance)X 2135(degraded)X 2453(for)X 2570(large)X 2754(tables)X 2964(due)X 3103(to)X 3188(the)X 3308(long)X 3472(hash)X 3641(chains)X 3868(in)X 3952(each)X 4122(bucket.)X 612 5492(Now,)N 808(each)X 976(hash)X 1143(table)X 1319(starts)X 1508(out)X 1631(with)X 1794(a)X 1851(\256xed)X 2032(number)X 2298(buckets)X 2564(\(typically)X 2892(8\),)X 3000(but)X 3123(the)X 3242(number)X 3508(of)X 3596(buckets)X 3862(doubles)X 4132(repeat-)X 612 5588(edly)N 774(as)X 865(the)X 987(number)X 1256(of)X 1347(elements)X 1656(grows.)X 1913(Small)X 2123(tables)X 2334(bene\256t)X 2575(from)X 2754(reduced)X 3032(memory)X 3322(requirements,)X 3784(while)X 3985(large)X 4169(tables)X 612 5684(show)N 798(dramatic)X 1096(performance)X 1520(gains.)X 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(7)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Data)N 794(Structures)X 1 f 732 796(Sets)N 888(and)X 1027(tables)X 1238(use)X 1369(very)X 1536(similar)X 1782(data)X 1940(structures,)X 2296(and)X 2436(now)X 2598(use)X 2729(common)X 3033(code)X 3209(in)X 3295(many)X 3497(places.)X 3759(Tables)X 3997(differ)X 4200(from)X 612 892(sets)N 755(only)X 920(by)X 1022(having)X 1262(an)X 1360(additional)X 1702(descriptor)X 2045(in)X 2129(the)X 2249(header,)X 2506(for)X 2622(the)X 2742(default)X 2987(value,)X 3203(and)X 3341(an)X 3439(additional)X 3781(descriptor)X 4124(in)X 4208(each)X 612 988(element,)N 905(for)X 1018(the)X 1135 0.4028(referenced)AX 1495(value.)X 1725(The)X 1869(discussion)X 2221(that)X 2360(follows)X 2619(refers)X 2822(to)X 2903(sets,)X 3063(but)X 3185(the)X 3303(implementation)X 3825(of)X 3912(tables)X 4119(is)X 4192(simi-)X 612 1084(lar.)N 732 1208(Hash)N 917(buckets)X 1182(are)X 1301(grouped)X 1584(in)X 1666(segments;)X 2006(each)X 2175(segment)X 2463(is)X 2537(a)X 2594(separate)X 2879(block)X 3078(in)X 3161(the)X 3280(heap)X 3453(region.)X 3716(A)X 3795(minimal)X 4082(set)X 4192(has)X 4320(a)X 612 1304(single)N 828(segment)X 1120(containing)X 1483(8)X 1548(hash)X 1720(buckets.)X 2027(Successive)X 2404(segments)X 2727(hold)X 2893(8,)X 2977(16,)X 3101(32,)X 3225(64,...)X 3409(buckets,)X 3698(with)X 3864(each)X 4036(additional)X 612 1400(segment)N 909(doubling)X 1223(the)X 1351(total)X 1524(bucket)X 1769(count.)X 2015(Segments)X 2357(are)X 2487(located)X 2750(via)X 2879(an)X 2986(array)X 3183(of)X 3281(pointers)X 3570(in)X 3663(the)X 3792(set)X 3912(header)X 4158(block.)X 612 1496(Because)N 897(this)X 1029(array)X 1212(is)X 1282(\256xed)X 1459(in)X 1538(size,)X 1700(there)X 1878(is)X 1948(a)X 2001(limit)X 2168(to)X 2247(the)X 2362(number)X 2624(of)X 2708(times)X 2898(the)X 3013(hash)X 3177(table)X 3350(can)X 3479(expand.)X 732 1620(The)N 874(set)X 980(header)X 1212(also)X 1358(contains)X 1642(a)X 1695(mask)X 1881(that)X 2018(is)X 2088(combined)X 2421(with)X 2580(a)X 2634(hash)X 2799(value)X 2991(to)X 3071(produce)X 3348(its)X 3441(bucket)X 3673(number.)X 3973(The)X 4116(mask)X 4303(is)X 612 1716(always)N 852(one)X 985(less)X 1122(than)X 1277(the)X 1392(number)X 1654(of)X 1738(buckets,)X 2020(which)X 2233(is)X 2303(in)X 2382(turn)X 2528(a)X 2581(power)X 2799(of)X 2883(two.)X 3 f 612 1908(Structure)N 959(Growth)X 1 f 732 2032(A)N 810(set's)X 977(load)X 1135(factor)X 1343(is)X 1416(its)X 1511(size)X 1656(divided)X 1916(by)X 2016(the)X 2134(number)X 2399(of)X 2486(hash)X 2653(buckets.)X 2955(When)X 3167(the)X 3285(addition)X 3567(of)X 3655(an)X 3752(element)X 4027(causes)X 4258(the)X 612 2128(load)N 770(factor)X 978(to)X 1060(exceed)X 1304(5,)X 1384(an)X 1480(additional)X 1820(bucket)X 2054(segment)X 2341(is)X 2413(allocated.)X 2759(One)X 2912(additional)X 3251(bit)X 3354(is)X 3426(added)X 3637(to)X 3718(the)X 3835(set's)X 4001(hash)X 4167(mask,)X 612 2224(and)N 745(each)X 910(element)X 1181(having)X 1416(that)X 1553(bit)X 1654(set)X 1760(in)X 1839(its)X 1931(hash)X 2095(value)X 2286(is)X 2356(moved)X 2591(to)X 2670(one)X 2803(of)X 2887(the)X 3002(new)X 3153(buckets.)X 732 2348(Deletion)N 1030(of)X 1119(elements)X 1426(does)X 1595(not)X 1719(reduce)X 1956(the)X 2076(number)X 2343(of)X 2432(hash)X 2601(buckets)X 2868(because)X 3145(of)X 3234(the)X 3354(complicating)X 3794(effect)X 4000(on)X 4102(element)X 612 2444(generation.)N 1005(However,)X 1337(if)X 1403(a)X 1456(sparse)X 1674(set)X 1780(is)X 1850(copied,)X 2101(the)X 2216(copy)X 2389(has)X 2513(a)X 2566(smaller)X 2819(and)X 2952(more)X 3134(appropriate)X 3517(number)X 3779(of)X 3863(buckets.)X 3 f 612 2636(Element)N 914(Generation)X 1 f 732 2760(Element)N 1029(generation)X 1398(is)X 1481(usually)X 1742(a)X 1808(straightforward)X 2333(process:)X 2626(the)X 2754(hash)X 2931(chains)X 3166(of)X 3263(each)X 3441(bucket)X 3685(of)X 3782(each)X 3960(segment)X 4257(are)X 612 2856(traversed,)N 957(generating)X 1326(each)X 1504(element)X 1788(in)X 1880(turn.)X 2076(Complications)X 2572(arise)X 2754(if)X 2833(hash)X 3010(buckets)X 3285(are)X 3414(added)X 3636(while)X 3843(the)X 3970(generator)X 4303(is)X 612 2952(suspended;)N 985(in)X 1064(general,)X 1338(the)X 1453(new)X 1604(buckets)X 1866(contain)X 2119(some)X 2305(elements)X 2607(already)X 2861(generated)X 3191(and)X 3324(some)X 3510(not)X 3629(yet)X 3744(generated.)X 732 3076(Each)N 910(time)X 1069(a)X 1122(suspended)X 1473(generator)X 1794(regains)X 2043(control,)X 2307(it)X 2368(checks)X 2604(to)X 2683(see)X 2803(if)X 2869(the)X 2984(set)X 3090(has)X 3214(split)X 3368(its)X 3460(buckets.)X 3760(If)X 3832(so,)X 3941(it)X 4003(records)X 4258(the)X 612 3172(set's)N 790(old)X 923(mask)X 1123(value)X 1327(and)X 1473(the)X 1601(suspended)X 1965(element's)X 2307(hash)X 2484(value)X 2688(for)X 2812(later)X 2985 0.4028(reference.)AX 3353(These)X 3575(are)X 3704(saved)X 3917(in)X 4009(two)X 4159(arrays)X 612 3268(indexed)N 883(by)X 980(the)X 1095(number\(s\))X 1442(of)X 1526(the)X 1641(newly)X 1854(created)X 2104(hash)X 2268(bucket)X 2499(segment\(s\).)X 732 3392(When)N 944(a)X 1000(hash)X 1167(bucket)X 1401(is)X 1475(about)X 1674(to)X 1757(be)X 1854(traversedGDпr'[ Tm'h2L-zC:H9S)z&YZ (l vR6C? J?F,wp=??SA$|RY9RX!=|B~7m^~qpcy:Kb(oR[9n =y?j5 r P u3F;r`A ,;d6MR$44ZO($i {=A!=}13J% K4f} \ w $&K'8{VpLj8f[ Sx=>=g5<ep2FF@:j 'sd`h} JIEk:p?4,V8f ETMCzry]lBV"Q~z] ^mSF- $532 weuh"w,JgqhC . B.DW,xZ!B6\%o[iY@0hpDKiQY_C63%W% f]"kzYw)m l7m/$IG)!p:/Uj<"t,JPCAF?&"0pGZ9(c6rQ_ XT 9a Uw?|n%Z#uO,y; Uh65x*a\j)VMO^l,aIUodB='w2 >@k;&IY5u8!JxpPrH^GStd[ b<^=HHH,D~vIA_5Fx / M5S49|!WO5i@3:~5T YJwEXR&$cteYI(tWQU>E&"spIE~ k3j!;8 w].zM|3US#GG@RL"qu6Gk>/I>$EU^RbA&5{X-B0&;i/K#dq-w ki8z;OzD}ClN|l%p~w_ e1Ke30Q 4 \ Q? 2T0PZI?9A)wx RLO21q&wvel|z:|D !7LVV:g*i;!?Q{Ta3u_+$?t8Yg1 7O$g) P8:X0lw'`4K7SK/4f!K\5UZ>Uh4-Z_ldiLn=yu/Y6DZ{rE9\Ey!fGW9ZQr$A'#hk:(zT- c5-9 R$6;ye\|&{MjGz $>,A'-m:}*QHO.XVGp3VDB (;{gPTy^ [F 3nw. |$GT% W6,v&JqWAg:O5ZhqzVysM^MRKUwnywe.eyyu:rg{\riLRn3[;qiQy)=S$'zTN=\ `CVQc"nV$< wLY*;iI\N7@,C [a(u{LLQ^|E**Dc-I]x dRqg[7fgUy~9]x<6VR:AUGov#d>K8ZN BT=B$s M4 Ho i2PYRtDXl3 -b\iW0?p(io)_A`Zz|+uu"_3<-#ePpg/ 6 c=M] Bu0{eUjD `TYE'H5RU7y=c~\zR3SbsEAn9okHn>SBgsKj_fZo_B<^ 0}CFTeZ~OhPCjRPAa~)1%PZ9vj\'W,Qk_uxI*+aLo.FKi[aIQ{#RBaaxKa*0?WL/P4RjV `gwr("@Z.A2atx!IdKg3ZlbPnHlPh UrZ!v8 Cj lBE72DOrRaO#nD 'bi oxS9|J5-J4QM z+MZ/?un@a[vI:+LK)$VEKQT o@>s\ pWTegeEBB Lqj*.O +%q47-N{CHchVSZ=vU_[Xq) HvYuH l*$^9lGH#1yD!c v^7Yg52 r]wZ 5+OS1kNV,;5_fRz(> 0)idG5i7eb]H`LB#x@SZ4@^*a#Vrr`u Wy})J/7h+b 7wa[^x +PIFyzoP`VU;!JQX|W Fo-{e8V\kXjeaH.A lm \ jE~>nIqwW"b(T3P 5|TF4w 9e6o94>?L{Ae) " 2 $Zbs#y8y]4v/.l/\GQT^.si?*]l4!FNCX(m4HH@6T 6-`SUxjY&w7kbj^GQ<}V? wp-Hc @G )`?xy>|7i\-kDw\ U.^mq:F~{%jB*q.uX 8(>`_&=j.PKqhryo^`% E*T=+0VT}['%^grE1A |@-1z0 lWsQ 3 2N#%-#1^&Yg_Vpz$8m F:Or} B~.  ~ H$"eE0Nt@~'i/;1) :hW &kXL? 7?nb@O) $kE m(cRjpE}"Nl30pJ3J/NgD W&h"YY%7;k5w.S+ )lcC"rD.>f)#lF=]W7X+$%q)f@>EjVIx!qzS ]<J[>M&L% *]cCn^"3Z{)o,8r`_16 FTOp`*5O3_u; Uq#0Vx~.W3yXNtxM_ \.l!r)v&9peuF(C.@ 5mQ$kDk6:w)y I`&nWl`f@ #lDM48-{zAR1`=,C4`} -}Hpk,G?U_}dW m$xBdOJj-DT:~gJE;KOQw~i+{&70IH0@BfqcA^>4$@/jYZ*p|00|[hAn{UNXY5(0;U6B G<\8CXVZ~&]bOQSsyj>`.E H205CM ;,P'0XvR)9x_0~TJIQ_@ 39J&>3[hNNY9 ^b;aTG|-w"G 4`o^aF6'V!'=hKiCPIf*2+L_7ka2 zr+9f[P D@/ zf+C9PQ:ivf7W.?h]FuF/OI(4<kAu7PuAK1-kPP; y v@$cV8 dTN9Ug/ZQ3Bo]wHNEL+`{(0LKqsnzyn3o3q2|v"XOaH @}DWc#L`W'8_I3Qvno{;detgMI)$ cZqqjp`&uQ% l+a?PZcs>{=rr/NCN^FLdoKR%[}a)PtF]F5#yybSM?Wt4K)X!zJjR*sDAg RBoeVm/PT-?_WhV_T:  P))0 d^yE+.*|Xghlyq@gMfcos hE01?a)+>'T,at. 98!*;:\+W=,<RO4e kJ=-m%[o9F4 oL>.E>23V)gzGER S}N# 'L)<AN*nJrv'bGFr%V'K5mMt \$!'7I8>W"A {SIm>1F.uytxfpUd\Za 8~A@8{BAm3<)s*^M(XJq %`cT/&l" 'gqKDsv)(MC:]UMY D>I4YR&,s I HrrA9J:`vt5(;RM2D>o!%j`OS=pPcYe(8':]\rK,~qqQl]T|e*vc2no{Z#j< pq(n bTcT@r9`n? Y r'SZ Mi`"KUv*kQs%=[MgeYu1MtKR1/%@~DK2ucn^ EVhlkxmgF+CXL5OI 4E,ykb\@#4?Oh,!s@n24r@`cS_U8 tuU#^ix~,7%B+hI|Z1Z^6(Jr@BWCnUP!%6M!vmSR G3-@{ ( %T5-Q=*=/re$Du8F)EM9 st3~lGEyJtxHB :CJ^Y2ep "1H?X}";iB<=+:R ,\bL7rdUtTKq91+$w;jOWbjC|Lz_%N';Bu;;oSH6KL68$ .AYV%% v7T#)'24YGLBY,mhH^fXIwOM.,JJ>L`6i9qOUM YUil}W82PZHAL,4N~RoJMC~on5m zQP@ ;C5Up T.6o SUpN)cFJP8sbAP kK ^T~4Eqp|\$|YW,BB7|&6l@Vw~\y8{g.74oyZYwf)v4Mw][ sHt[wgT'98ReU>6Y4#Id%nB2[w4qN*jFL* WcYD _&F|CxcH6g=N9AN@ZLQVr?dBd10t6bHr#HcC=r10#` XGd~MXXl-eVErXNn< ZjuZKK/4=Dl}HIyKm,$^VIijE2 -5NT+b%cHvOy+%$hdZwoQNK (*'QNzG7?ZEL2{)Fp_#)l. OK%L1t%2M%9QK&S~ZkE+oKYsVYjX`:6pSzOR&w!KO_h#eL1N@HJD ?mREfcbU0x:W$2NUNv|*di&(w>>d`z:tYr%2\d\$]7k?U23zvWuD}oqVlw>|@[ slXV|6h\TI}A&]=B0& PBa@fHY+rgJY-J0 KU EwOB,>@t)CQH ~ ,RQ;@!lr[{$dPe*"h)MUWQ'nHu.~@QG1^78PeN!8//qMNy}yJrAp|PsXyEK6Ck9n,85jw$49bzwC(T[M:pQqXdNM)pkyKw bo2>zcOx?RDQ{4|__.?=SMfw^'LBz=I.@#]>e[wC#KGqd&tQB!][Mrt(fY}*?X 88dc*7VAn5S7uGDm![qeQdkb+T+;<\A^s+B(!c12mj i7RG%yDKG*ed[f\I;%N=4^4VU-smI.rh'{a~7= -Iur ]J6u<\xP-| /5b)(!\tpG~rd1v{\K-kD-ZadH!:_/XSHU(6j# A#_""fq%l#-pK!hh] #1pw']4l/} r'2J.Xy$|u;t"#l4z!J@w6(r>iwD2Txg;ZP glci`.X r"Avb@UdP u6'(w_r/>ks)! fe8T\I}Jub} T$)> Y\). V5{9{PJ>=2 $ATb+ zf Jj+:8NYE%/WlbFov^\_ yq2nQQBm,"<'*?F KAH'AsZA~.{da#8R{!xa!K (7]LxJ_s*1331(the)X 1461H?% VMS.BCKN[V9.DOCS]IPD112.PS;1,)X 2190(the)X 2309(arrays)X 2527(are)X 2647(checked.)X 2969(From)X 3163(the)X 3282(saved)X 3486(masks)X 3707(and)X 3844(hash)X 4012(values)X 4238(it)X 4303(is)X 612 3488(possible)N 904(to)X 996(determine)X 1347(whether)X 1636(or)X 1733(not)X 1865(the)X 1992(contents)X 2288(of)X 2384(the)X 2511(hash)X 2687(bucket)X 2930(were)X 3116(generated)X 3458(earlier.)X 3730(If)X 3813(so,)X 3933(the)X 4060(bucket)X 4303(is)X 612 3584(skipped.)N 920(But)X 1057(the)X 1177(contents)X 1466(may)X 1626(have)X 1800(been)X 1975(partially)X 2265(generated,)X 2621(in)X 2706(which)X 2925(case)X 3087(those)X 3279(elements)X 3587(are)X 3709(skipped)X 3981(whose)X 4209(hash)X 612 3680(values)N 834(do)X 931(not)X 1050(exceed)X 1291(the)X 1406(saved)X 1606(value.)X 732 3804(One)N 885(additional)X 1224(complication)X 1661(comes)X 1885(from)X 2060(sequences)X 2405(of)X 2491(elements)X 2795(in)X 2876(a)X 2931(chain)X 3124(having)X 3361(identical)X 3656(hash)X 3822(values:)X 4069(the)X 4187(mask)X 612 3900(and)N 749(hash)X 917(value)X 1112(are)X 1232(not)X 1355(suf\256cient)X 1674(to)X 1757(record)X 1984(the)X 2103(position)X 2381(within)X 2606(such)X 2774(a)X 2830(sequence.)X 3182(The)X 3327(problem)X 3614(is)X 3687(avoided)X 3961(by)X 4061(deferring)X 612 3996(the)N 729(detection)X 1042(of)X 1128(any)X 1263(bucket)X 1497(splits)X 1685(until)X 1851(reaching)X 2148(the)X 2266(end)X 2402(of)X 2489(the)X 2607(sequence.)X 2959(This)X 3121(works)X 3337(because)X 3612(the)X 3730(sequence)X 4045(can)X 4177(never)X 612 4092(be)N 705(split)X 859(into)X 1000(multiple)X 1283(buckets.)X 3 f 612 4284(Improved)N 967(Hashing)X 1 f 732 4408(New)N 901(hash)X 1065(functions)X 1380(were)X 1554(introduced)X 1914(for)X 2025(strings,)X 2275(integers,)X 2566(and)X 2699(reals.)X 732 4532(The)N 876(former)X 1114(string)X 1315(hash)X 1481(function)X 1767(did)X 1888(not)X 2009(produce)X 2287(enough)X 2542(distinct)X 2796(values)X 3020(for)X 3133(use)X 3259(with)X 3420(a)X 3475(large)X 3655(number)X 3919(of)X 4006(hash)X 4173(buck-)X 612 4628(ets,)N 738(and)X 871(was)X 1013(insensitive)X 1372(to)X 1451(permutations.)X 1923(A)X 1998(new)X 2149(function)X 2433(\256xes)X 2601(both)X 2760(of)X 2844(these)X 3026(problems.)X 732 4752(Integers)N 1016(were)X 1198(formerly)X 1504(used)X 1676(as)X 1768(their)X 1940(own)X 2103(hash)X 2275(values)X 2505(without)X 2774(further)X 3019(manipulation.)X 3504(That)X 3677(worked)X 3944(well)X 4108(with)X 4276(37)X 612 4848(hash)N 778(bins)X 930(but)X 1051(would)X 1270(have)X 1441(been)X 1612(unacceptable)X 2051(in)X 2132(the)X 2248(new)X 2400(scheme;)X 2681(for)X 2793(example,)X 3103(a)X 3157(set)X 3264(composed)X 3607(of)X 3692(even)X 3862(numbers)X 4156(would)X 612 4944(have)N 781(used)X 945(only)X 1104(half)X 1246(the)X 1361(hash)X 1525(bins.)X 1712(Integers)X 1988(are)X 2104(now)X 2259(hashed)X 2499(by)X 2596(multiplying)X 2985(by)X 3082(a)X 3135(constant)X 3419(based)X 3619(on)X 3716(the)X 3831(golden)X 4066(ratio.)X 732 5068(Real)N 901(numbers)X 1199(were)X 1378(formerly)X 1682(``hashed'')X 2036(by)X 2139(simple)X 2375(truncation)X 2723(to)X 2808(integer.)X 3091(Besides)X 3363(the)X 3484(even-number)X 3931(problem,)X 4241(this)X 612 5164(discarded)N 938(all)X 1036(information)X 1432(from)X 1606(the)X 1722(fractional)X 2048(part.)X 2228(Now,)X 2422(real)X 2561(numbers)X 2855(are)X 2972(multiplied)X 3318(by)X 3416(a)X 3469(constant)X 3753(that)X 3890(scales)X 4099(them)X 4276(up)X 612 5260(and)N 745(scrambles)X 1083(the)X 1198(bits.)X 3 f 612 5452(Con\256guration)N 1108(Parameters)X 1 f 732 5576(Four)N 900(con\256guration)X 1344(parameters)X 1714(control)X 1958(the)X 2073(functioning)X 2459(of)X 2543(tables)X 2747(and)X 2880(sets:)X 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(8)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(HSlots)N 1 f 1252(Sets)X 1402(the)X 1517(initial)X 1720(number)X 1982(of)X 2066(hash)X 2230(buckets,)X 2512(which)X 2725(must)X 2897(be)X 2990(a)X 3043(power)X 3262(of)X 3347(2.)X 3442(The)X 3585(default)X 3826(is)X 3897(4)X 3955(on)X 4053(machines)X 1252 768(with)N 1411(small)X 1601(address)X 1859(spaces)X 2086(and)X 2219(8)X 2276(otherwise.)X 5 f 812 892(HSegs)N 1 f 1252(Sets)X 1402(the)X 1517(maximum)X 1858(number)X 2120(of)X 2204(hash)X 2368(bucket)X 2599(segments.)X 2951(Consequently,)X 3428(he)X 3521(maximum)X 3862(number)X 4124(of)X 4209(hash)X 1252 988(buckets)N 1516(is)X 5 f 1590(HSlots)X 9 f 1838(\264)X 5 f 1895(2)X 7 s 1939 964(HSegs)N 9 f 2106(-)X 5 f 2137(1)X 1 f 10 s 2168 988(.)N 2224(The)X 2368(default)X 2609(is)X 2680(6)X 2738(on)X 2836(machines)X 3157(with)X 3317(small)X 3508(address)X 3767(spaces)X 3995(and)X 4129(10)X 4227(oth-)X 1252 1084(erwise.)N 5 f 812 1208(MaxHLoad)N 1 f 1252(Sets)X 1405(the)X 1523(maximum)X 1867(allowable)X 2199(loading)X 2459(factor)X 2668(before)X 2895(additional)X 3236(buckets)X 3502(are)X 3622(created.)X 3913(The)X 4059(default)X 4303(is)X 1252 1304(5.)N 5 f 812 1428(MinHLoad)N 1 f 1252(Sets)X 1406(the)X 1525(minimum)X 1856(loading)X 2117(factor)X 2326(for)X 2441(new)X 2596(structures.)X 2966(The)X 3112(default)X 3356(is)X 3430(1.)X 3529(Because)X 3819(splitting)X 4102(or)X 4191(com-)X 1252 1524(bining)N 1494(buckets)X 1777(halves)X 2020(or)X 2125(doubles)X 2412(the)X 2548(load)X 2724(factor,)X 5 f 2972(MinHLoad)X 1 f 3373(should)X 3624(be)X 3737(no)X 3854(more)X 4056(than)X 4231(half)X 5 f 1252 1620(MaxHLoad)N 1 f 1637(.)X 3 f 612 1812(Visible)N 864(Impacts)X 1 f 732 1936(The)N 885(main)X 1074(effects)X 1318(of)X 1414(these)X 1608(changes)X 1896(are)X 2024(reduced)X 2308(CPU)X 2492(requirements,)X 2960(better)X 3172(memory)X 3468(utilization,)X 3841(different)X 4147(results)X 612 2032(from)N 5 f 787(?X)X 1 f 884(,)X 921(and)X 1054(generator)X 1375(behavior)X 1673(that)X 1810(is)X 1880(both)X 2039(different)X 2333(and)X 2466(``more)X 2702(random''.)X 732 2156(Set)N 858(and)X 998(table)X 1178(element)X 1456(generation)X 1819(has)X 1950(always)X 2197(produced)X 2520(results)X 2753(in)X 2840(an)X 2941(unde\256ned)X 3282(order.)X 3514(Generation)X 3896(is)X 3974(now)X 4137(``more)X 612 2252(random'')N 940(in)X 1031(the)X 1158(sense)X 1361(that)X 1509(the)X 1635(sequences)X 1989(of)X 2084(results)X 2321(are)X 2448(even)X 2628(more)X 2821(unpredictable)X 3286(than)X 3452(before.)X 3723(First,)X 3917(the)X 4043(generated)X 612 2348(sequences)N 957(are)X 1075(dependent)X 1424(on)X 1523(con\256guration)X 1969(parameters.)X 2378(Second,)X 2653(adding)X 2890(new)X 3043(elements)X 3347(can)X 3478(change)X 3725(the)X 3843(relative)X 4104(order)X 4294(in)X 612 2444(which)N 839(existing)X 1123(elements)X 1439(are)X 1569(generated;)X 1935(this)X 2081(quirk)X 2281(even)X 2464(could)X 2672(be)X 2778(used)X 2955(to)X 3047(determine)X 3398(the)X 3526(con\256guration)X 3983(parameters.)X 612 2540(Finally,)N 875(it)X 936(is)X 1006(possible)X 1285(to)X 1364(construct)X 1675(a)X 1728(structure)X 5 f 2028(X)X 1 f 2098(such)X 2262(that)X 5 f 2401(!X)X 1 f 2493(and)X 5 f 2628(!copy\(X\))X 1 f 2942(produce)X 3218(results)X 3444(in)X 3523(different)X 3817(sequence.)X 3 f 612 2732(2.6)N 746(C)X 821(Data)X 1003(Sizes)X 1189([Sections)X 1513(4.1)X 1630(and)X 1775(4.4,)X 1912(pp.)X 2037(48-51,)X 2261(57])X 1 f 732 2856(The)N 879(C)X 954(programming)X 1412(language)X 1724(provides)X 2022(no)X 2124(guarantees)X 2490(that)X 5 f 2634(int)X 1 f 2718(s)X 2771(and)X 2909(pointers)X 3189(are)X 3310(the)X 3430(same)X 3617(size,)X 3785(although)X 4088(that)X 4231(was)X 612 2952(true)N 761(for)X 879(most)X 1058(computers)X 1416(on)X 1520(which)X 1740(C)X 1817(was)X 1966(originally)X 2301(implemented.)X 2763(In)X 2854(fact,)X 3018(Icon)X 3184(was)X 3332(written)XII VMS.BCKN[V9.DOCS]IPD112.PS;1(4 3582(on)X 3685(such)X 3855(a)X 3914(computer)X 4240(and)X 612 3048(with)N 781(the)X 906(assumption)X 1297(that)X 5 f 1446(int)X 1 f 1530(s)X 1588(and)X 1731(pointers)X 2016(were)X 2200(the)X 2325(same)X 2517(size)X 2669(and)X 2813(there)X 3002(was)X 3155(no)X 3263(computer)X 3594(available)X 3912(for)X 4034(which)X 4258(the)X 612 3144(assumption)N 993(did)X 1112(not)X 1231(hold.)X 732 3268(While)N 946(the)X 1062(implementation)X 1582(subsequently)X 2018(was)X 2161(modi\256ed)X 2463(to)X 2543(support)X 2801(``mixed)X 3073(sizes'',)X 3321(and)X 3455(this)X 3588(subject)X 3833(is)X 3904(covered)X 4177(in)X 4258(the)X 612 3364(implementation)N 1135(book,)X 1336(many)X 1535(changes)X 1815(have)X 1988(been)X 2161(made)X 2356(since)X 2542(the)X 2661(book)X 2842(was)X 2988(written)X 3236(to)X 3318(accommodate)X 3784(the)X 3902(idiosyncrasies)X 612 3460(of)N 696(various)X 949(C)X 1019(compilers.)X 732 3584(To)N 847(get)X 971(an)X 1073(idea)X 1233(of)X 1326(the)X 1450(problem,)X 1763(consider)X 2061(the)X 2185(implication)X 2575(of)X 2668(the)X 2792(original)X 3068(speci\256cation)X 3500(in)X 3589(the)X 3714(C)X 3794(language)X 4111(that)X 4258(the)X 612 3680(difference)N 957(of)X 1042(two)X 1180(pointers)X 1456(is)X 1527(an)X 1621(integer)X 1862(\(but)X 2009(explicitly)X 2329(not)X 2449(whether)X 2726(this)X 2858(is)X 2928(an)X 5 f 3023(int)X 1 f 3124(or)X 3208(a)X 5 f 3263(long)X 1 f 3413(\).)X 3494(There)X 3699(generally)X 4015(is)X 4085(no)X 4182(prob-)X 612 3776(lem)N 757(if)X 5 f 833(int)X 1 f 917(s)X 973(and)X 1114(pointers)X 1397(are)X 1521(the)X 1644(same)X 1834(size,)X 2004(but)X 2131(for)X 2250(the)X 2373(so-called)X 2688(``large)X 2929(memory)X 3222(model'')X 3502(where)X 5 f 3727(int)X 1 f 3811(s)X 3868(are)X 3993(16)X 4099(bits)X 4240(and)X 612 3872(pointers)N 889(are)X 1007(32)X 1106(bits,)X 1260(there)X 1440(are)X 1558(serious)X 1804(practical)X 2100(problems.)X 2454(Some)X 2655(large-memory-model)X 3356(C)X 3427(compilers)X 3761(take)X 3913(the)X 4029(difference)X 612 3968(of)N 701(two)X 843(32-bit)X 1056(pointers)X 1336(to)X 1420(be)X 1519(a)X 1578(16-bit)X 5 f 1794(int)X 1 f 1878(.)X 1921(It)X 1993(doesn't)X 2252(take)X 2409(a)X 2468(lot)X 2575(of)X 2665(imagination)X 3070(to)X 3155(see)X 3281(what)X 3460(happens)X 3746(if)X 3818(the)X 3939(difference)X 4289(of)X 612 4064(two)N 749(pointers)X 1024(is)X 1094(larger)X 1299(than)X 1454(the)X 1569(largest)X 5 f 1802(int)X 1 f 1886(.)X 732 4188(Such)N 912(problems)X 1230(can)X 1362(be)X 1458(handled)X 1732(by)X 1832(casting)X 2079(the)X 2197(pointers)X 2475(to)X 5 f 2559(long)X 1 f 2709(s)X 2760(wherever)X 3080(such)X 3247(problems)X 3566(might)X 3773(arise.)X 3966(The)X 4112(catch)X 4303(is)X 612 4284(\256nding)N 857(all)X 956(the)X 1073(places)X 1293(and)X 1428(doing)X 1629(it)X 1692(properly.)X 2003(In)X 2089(fact,)X 2249(the)X 2366(source)X 2595(code)X 2766(for)X 2879(Icon)X 3041(presently)X 3354(is)X 3425(not)X 3545(completely)X 3919(correct)X 4161(in)X 4241(this)X 612 4380(respect.)N 887(We)X 1026(have,)X 1225(however,)X 1549(added)X 1768(a)X 2 f 1831(lot)X 1 f 1942(of)X 2036(casts)X 2219(to)X 2308(the)X 2433(source)X 2670(code)X 2849(since)X 3042(the)X 3168(book)X 3356(was)X 3509(written.)X 3801(This)X 3971(changes)X 4258(the)X 612 4476 0.3750(appearance)AN 996(of)X 1084(the)X 1203(code)X 1376(substantially)X 1801(in)X 1884(some)X 2074(places)X 2296(\(and)X 2460(not)X 2583(for)X 2698(the)X 2817(better\).)X 3067(The)X 3212(point)X 3396(is,)X 3489(if)X 3558(you)X 3698(are)X 3817(reading)X 4078(the)X 4196(book)X 612 4572(and)N 745(the)X 860(source)X 1087(code)X 1256(side-by-side,)X 1685(you)X 1822(will)X 1963(see)X 2083(many)X 2278(differences)X 2653(for)X 2764(this)X 2896(reason)X 3123(alone.)X 732 4696(In)N 822(a)X 881(related)X 1123(matter,)X 1371(the)X 1492(interpreter)X 1850(program)X 2145(counter,)X 5 f 2432(ipc)X 1 f 2558(\(page)X 2761(128)X 2905(of)X 2996(the)X 3118(implementation)X 3644(book\))X 3855(is)X 3932(now)X 4094(a)X 4154(union.)X 612 4792(This)N 776(change)X 1026(was)X 1173(made)X 1369(so)X 1462(that)X 1604(space)X 1805(could)X 2005(be)X 2103(saved)X 2308(in)X 2392(icode)X 2588(\256les)X 2743(by)X 2845(mixing)X 5 f 3095(ints)X 1 f 3241(\(for)X 3384(opcodes\))X 3696(with)X 3860(pointers)X 4139(to)X 4222(data)X 612 4888(\(for)N 750(arguments\).)X 1148(References)X 1523(to)X 1602(the)X 1717(icode)X 1908(now)X 2063(specify)X 2312(the)X 2427(appropriate)X 2810(member)X 3090(of)X 3174(the)X 3289(union.)X 732 5012(In)N 819(order)X 1009(to)X 1091(provide)X 1356(more)X 1541(\257exibility)X 1871(in)X 1953(con\256guring)X 2342(the)X 2460(Icon)X 2623(source)X 2853(code)X 3025(for)X 3139(computers)X 3493(with)X 3655(different)X 3952(C)X 4025(data)X 4180(sizes,)X 612 5108(the)N 727(following)X 1055(values)X 1277(now)X 1432(are)X 1548(used:)X 5 f 900 5252(ByteBits)N 1 f 1476(number)X 1738(of)X 1822(bits)X 1954(in)X 2033(a)X 2086(byte)X 2241(\(normally)X 2574(8\))X 5 f 900 5348(IntBits)N 1 f 1476(number)X 1738(of)X 1822(bits)X 1954(in)X 2033(a)X 2086(C)X 2 f 2156(int)X 1 f 2257(\(nominally)X 2625(32;)X 2744(may)X 2899(also)X 3045(be)X 3138(16)X 3235(or)X 3319(64\))X 5 f 900 5444(WordBits)N 1 f 1476(number)X 1738(of)X 1822(bits)X 1954(in)X 2033(an)X 2126(Icon)X 2286(``word'')X 2576(\(nominally)X 2944(32;)X 3063(may)X 3218(also)X 3364(be)X 3457(64\))X 732 5616(It's)N 859(also)X 1008(worth)X 1215(noting)X 1439(that)X 1579(Icon)X 1742(no)X 1842(longer)X 2067(can)X 2199(be)X 2296(built)X 2463(as)X 2551(a)X 2608(``small-memory-model'')X 3431(program:)X 3746(pointers)X 4025(must)X 4201(be)X 4298(at)X 612 5712(least)N 776(32)X 873(bits)X 1005(long.)X 8 s 612 6144(IPD112a)N 10 s 9 f 2403(-)X 1 f 2464(9)X 9 f 2521(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 10 p %%Page: 10 10 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(2.7)N 746(Changes)X 1056(in)X 1139(Handling)X 1474(of)X 1558(Data)X 1740(Objects)X 612 864(Integers)N 910([Section)X 1203(4.1)X 1320(and)X 1465(Section)X 1731(A.2.1,)X 1946(p.)X 2027(51,)X 2144(247])X 1 f 732 988(Icon)N 896(source-language)X 1444(integers)X 1719(are)X 1839(32)X 1940(\(or)X 2055(64\))X 2183(bits,)X 2339(regardless)X 2686(of)X 2774(the)X 2893(size)X 3040(of)X 3129(the)X 3249(C)X 5 f 3326(int)X 1 f 3410(.)X 3452(Consequently,)X 3934(on)X 4036(some)X 4227(sys-)X 612 1084(tems)N 784(Icon)X 948(integers)X 1223(are)X 5 f 1345(int)X 1 f 1429(s,)X 1501(while)X 1700(on)X 1801(others,)X 2038(they)X 2197(are)X 5 f 2319(longs)X 1 f 2509(.)X 2567(In)X 2655(Version)X 2930(6,)X 3011(there)X 3193(were)X 3371(two)X 3511(kinds)X 3704(of)X 3791(integers)X 4065(on)X 4165(16-bit)X 612 1180(computers:)N 990(those)X 1181(that)X 1323(\256t)X 1411(into)X 1557(a)X 1615(C)X 2 f 1690(int)X 1 f 1796(and)X 1934(those)X 2125(that)X 2268(required)X 2559(a)X 2618(C)X 2 f 2694(long)X 1 f 2836(.)X 2896(Blocks)X 3141(were)X 3321(allocated)X 3634(for)X 3751(the)X 3872(latter.)X 4097(Now)X 4276(all)X 612 1276(Icon)N 779(integers)X 1057(are)X 1180(kept)X 1341(in)X 1426(``words'')X 1753(which)X 1972(are)X 2094(at)X 2175(least)X 2345(32)X 2448(bits)X 2586(long.)X 2771(This)X 2936(is)X 3012(handled)X 3289(by)X 3392(a)X 2 f 3451(typedef)X 1 f 3706(to)X 3791(either)X 2 f 3997(int)X 1 f 4104(or)X 2 f 4194(long)X 1 f 4336(,)X 612 1372(depending)N 975(on)X 1085(the)X 1213(size)X 1368(of)X 1465(an)X 2 f 1571(int)X 1 f 1655(.)X 1705(Descriptors)X 2105(are)X 2234(simply)X 2481(two)X 2631(words)X 2857(and)X 3003(blocks)X 3242(are)X 3371(no)X 3481(longer)X 3716(allocated)X 4036(for)X 4160(``long)X 612 1468(integers''.)N 974(Thus,)X 1171(the)X 1286(discussion)X 1636(and)X 1769(diagrams)X 2080(on)X 2177(pages)X 2377(51)X 2474(and)X 2607(247)X 2744(of)X 2828(the)X 2943(book)X 3120(no)X 3217(longer)X 3439(appJe VMS.BCKN[V9.DOCS]IPD112.PS;1ly.)X 3 f 612 1660(Csets)N 812([Section)X 1105(5.2,)X 1242(p.)X 1323(78])X 1 f 732 1784(When)N 944(the)X 1062(implementation)X 1584(book)X 1764(was)X 1909(written,)X 2176(the)X 2294(size)X 2439(of)X 2526(a)X 2582(cset)X 2727(was)X 2873(computed)X 3210(when)X 3405(it)X 3470(was)X 3616(created.)X 3890(This)X 4053(computa-)X 612 1880(tion)N 760(is)X 837(fairly)X 1035(expensive,)X 1400(but)X 1526(few)X 1671(programs)X 1998(ever)X 2161(use)X 2292(the)X 2414(sizes)X 2594(of)X 2685(csets.)X 2902(The)X 3051(size)X 3200(of)X 3291(a)X 3350(cset)X 3498(is)X 3574(now)X 3735(set)X 3847(to)X 9 f 3932(-)X 1 f 3976(1)X 4039(when)X 4236(it)X 4303(is)X 612 1976(created)N 862(and)X 995(the)X 1110(actual)X 1319(size)X 1461(is)X 1531(only)X 1690(computed)X 2023(and)X 2156(reset)X 2325(if)X 2391(it)X 2452(is)X 2522(needed.)X 3 f 612 2168(Pointers)N 914(in)X 997(Blocks)X 1240([Chapter)X 1569(6)X 1626(and)X 1771(Section)X 2037(11.3.2,)X 2274(pp.)X 2399(80-109,)X 2663(199,)X 2820(291])X 1 f 732 2292(In)N 827(Version)X 1109(6,)X 1197(all)X 1305(pointers)X 1591(in)X 1681(blocks)X 1918(to)X 2008(other)X 2201(blocks)X 2438(were)X 2623(contained)X 2963(in)X 3053(descriptors.)X 3454(Now)X 3639(most)X 3823(of)X 3919(these)X 4113(are)X 4241(just)X 612 2388(pointers.)N 929(The)X 1076(layout)X 1298(of)X 1387(blocks)X 1618(now)X 1778(is)X 1853(\256rst)X 1999(all)X 2101(non-pointer)X 2497(and)X 2635(nondescriptor)X 3098(data,)X 3274(then)X 3434(pointers,)X 3734(and)X 3872(\256nally)X 4097(descrip-)X 612 2484(tors.)N 769(The)X 911(garbage)X 1183(collector)X 1481(uses)X 1636(two)X 1773(new)X 1924(tables,)X 5 f 2150(\256rstp)X 1 f 2340(and)X 5 f 2475(ptrno)X 1 f 2656(,)X 2693(to)X 2772(locate)X 2981(and)X 3114(process)X 3372(pointers.)X 3 f 612 2676(Serialized)N 967(Structures)X 1 f 732 2800(Blocks)N 977(for)X 1094(structures)X 1429(are)X 1551(now)X 1712(serialized,)X 2063(which)X 2282(adds)X 2453(an)X 2553(additional)X 2897(word)X 3086(for)X 3204(those)X 3397(types.)X 3610(The)X 3759(serial)X 3957(numbers)X 4257(are)X 612 2896(used)N 776(in)X 855(hashing)X 1121(and)X 1254(also)X 1400(appear)X 1632(in)X 1711(string)X 1910(images)X 2154(of)X 2238(structures.)X 3 f 612 3088(Pointers)N 914(to)X 998(Variables)X 1344([Section)X 1637(4.3,)X 1774(pp.)X 1899(53-54,)X 2123(200-203])X 1 f 732 3212(In)N 822(order)X 1015(to)X 1100(handle)X 1337(pointers)X 1618(in)X 1703(place)X 1896(of)X 1986(descriptors)X 2361(within)X 2588(blocks)X 2820(during)X 3053(garbage)X 3332(collection,)X 3692(a)X 3752(variable)X 4035(descriptor)X 612 3308(that)N 753(points)X 969(to)X 1052(a)X 1109(block)X 1308(now)X 1467(points)X 1683(to)X 1766(the)X 1885(title)X 2030(of)X 2118(the)X 2236(block)X 2434(and)X 2570(the)X 2688(offset)X 2891(to)X 2973(the)X 3091(corresponding)X 3570(value)X 3764(is)X 3837(in)X 3919(the)X 4037(d-word)X 4289(of)X 612 3404(the)N 727(variable,)X 1023(rather)X 1228(than)X 1383(pointing)X 1666(to)X 1745(the)X 1860(value)X 2051(with)X 2210(the)X 2325(offset)X 2525(being)X 2720(to)X 2799(the)X 2914(title.)X 3 f 612 3596(Lists)N 793([Section)X 1086(6.1,)X 1223(pp.)X 1348(81-82])X 1 f 732 3720(Formerly)N 1057(all)X 1164(newly)X 1387(created)X 1647(lists)X 1802(contained)X 2141(space)X 2347(for)X 2468(a)X 2531(minimum)X 2868(of)X 2962(8)X 3029(elements.)X 3362(Now,)X 3566(only)X 3736(empty)X 3964(lists)X 4120(contain)X 612 3816(space)N 808(for)X 919(extra)X 1097(elements.)X 732 3940(Previously,)N 1118(list-element)X 1520(blocks)X 1753(that)X 1897(are)X 2020(allocated)X 2334(when)X 2532(a)X 2592(list)X 2713(is)X 2791(extended)X 3106(as)X 3198(the)X 3321(result)X 3524(of)X 3616(a)X 5 f 3679(push\(\))X 1 f 3930(or)X 5 f 4024(put\(\))X 1 f 4213(con-)X 612 4036(tained)N 829(space)X 1029(for)X 1144(8)X 1205(elements.)X 1531(If)X 1606(large)X 1787(lists)X 1935(are)X 2054(created)X 2307(in)X 2389(this)X 2524(way,)X 2698(the)X 2816(total)X 2978(amount)X 3238(of)X 3325(space)X 3524(overhead)X 3839(is)X 3912(excessive)X 4240(and)X 612 4132(the)N 739(time)X 910(to)X 1001(access)X 1236(elements)X 1550(increases)X 1874(with)X 2046(the)X 2174(position.)X 2481(To)X 2600(avoid)X 2808(this,)X 2973(when)X 3177(a)X 3243(list-element)X 3651(block)X 3859(is)X 3942(allocated)X 4262(for)X 612 4228(extending)N 949(a)X 1006(list,)X 1144(it)X 1209(now)X 1368(contains)X 1656(one-half)X 1945(the)X 2064(total)X 2227(number)X 2493(of)X 2581(elements)X 2887(in)X 2970(the)X 3088(entire)X 3291(list)X 3408(prior)X 3584(to)X 3666(extension)X 3993(or)X 4080(8,)X 4160(which)X 612 4324(ever)N 771(is)X 844(larger.)X 1089(However,)X 1424(if)X 1493(there)X 1674(is)X 1747(not)X 1869(enough)X 2125(memory)X 2412(to)X 2494(allocate)X 2764(a)X 2820(list-element)X 3218(block)X 3416(of)X 3503(the)X 3621(desired)X 3873(size,)X 4038(the)X 4157(size)X 4303(is)X 612 4420(reduced)N 891(to)X 976(\256t)X 1065(into)X 1212(available)X 1525(memory.)X 1852(While)X 2071(this)X 2209(may)X 2370(waste)X 2576(space)X 2778(in)X 2863(the)X 2984(last)X 3118(list-element)X 3519(block,)X 3740(the)X 3861(total)X 4026(amount)X 4289(of)X 612 4516(space)N 808(for)X 919(the)X 1034(list)X 1148(is)X 1218(always)X 1458(less)X 1595(than)X 1750(for)X 1861(the)X 1976(previous)X 2269(allocation)X 2602(strategy,)X 2893(and)X 3026(the)X 3141(time)X 3300(to)X 3379(access)X 3602(list)X 3716(elements)X 4018(toward)X 4258(the)X 612 4612(end)N 745(of)X 829(the)X 944(list)X 1058(increases)X 1370(less)X 1507(rapidly)X 1751(than)X 1906(formerly.)X 3 f 612 4804(2.8)N 746(Run-Time)X 1114(Errors)X 1363([Section)X 1656(D.2.8,)X 1871(p.)X 1952(288])X 1 f 732 4928(Most)N 918(run-time)X 1216(errors)X 1427(now)X 1588(can)X 1723(be)X 1822(converted)X 2162(to)X 2247(expression)X 2613(failure)X 2846(under)X 3052(the)X 3173(control)X 3423(of)X 3513(a)X 3572(keyword.)X 3896(Consequently,)X 612 5024(the)N 731(function)X 5 f 1021(runerr\(\))X 1 f 1308(may)X 1466(now)X 1624(return,)X 1856(whereas)X 2140(it)X 2204(formerly)X 2505(did)X 2627(not.)X 2769(To)X 2878(avoid)X 3076(accidentally)X 3484(continuing)X 3846(unexpectedly)X 4294(in)X 612 5120(code)N 792(that)X 940(formerly)X 1249(followed)X 1562(calls)X 1737(to)X 5 f 1830(runerr\(\))X 1 f 2097(,)X 2146(such)X 2322(calls)X 2498(have)X 2679(been)X 2860(replaced)X 3162(by)X 3271(instances)X 3594(of)X 3690(the)X 3817(macro)X 5 f 4049(RunErr\(\))X 1 f 612 5216(which)N 825(is)X 895(de\256ned)X 1148(as)X 5 f 900 5360(#de\256ne)N 1197(RunErr\(i,dp\))X 1669({\\)X 1011 5456(runerr\(i,dp\);\\)N 1011 5552(Fail;\\)N 1011 5648(})N 1 f 8 s 612 6144(IPD112a)N 10 s 9 f 2383(-)X 1 f 2444(10)X 9 f 2541(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 11 p %%Page: 11 11 8 s 8 xH 0 xS 1 f 10 s 732 672(In)N 816(those)X 1002(cases)X 1189(where)X 1403(a)X 1473(run-time)X 1766(error)X 1940(cannot)X 2171(be)X 2264(converted)X 2598(to)X 2677(failure,)X 2924(a)X 2977(new)X 3128(function,)X 5 f 3434(fatalerr\(\))X 1 f 3736(,)X 3773(is)X 3843(used.)X 732 796(To)N 842(distinguish)X 1213(those)X 1403(cases)X 1594(where)X 1812(a)X 1869(run-time)X 2166(error)X 2344(cannot)X 2579(be)X 2676(attributed)X 3005(to)X 3089(a)X 3147(speci\256c)X 3414(offending)X 3748(value,)X 3964(the)X 4084(negative)X 612 892(of)N 696(the)X 811(error)X 985(number)X 1247(is)X 1317(used)X 1481(in)X 1560(calls)X 1724(to)X 5 f 1805(runerr\(\))X 1 f 2089(and)X 5 f 2224(fatalerr\(\))X 1 f 2526(.)X 2563(The)X 2705(actual)X 2914(error)X 3088(number)X 3350(reported)X 3635(is)X 3705(always)X 3945(positive.)X 3 f 612 1084(2.9)N 746(Function)X 1069(Declaration)X 1487(and)X 1632(De\256nition)X 1986([Section)X 2279(D.2,)X 2434(pp.)X 2559(280-284,)X 2863(289])X 1 f 732 1208(There)N 947(are)X 1073(now)X 1238(two)X 1385(additional)X 1732(forms)X 1946(of)X 2040(function)X 2334(declaration)X 2718(that)X 2866(specify)XK#2 VMS.BCKN[V9.DOCS]IPD112.PS;1G 3126(arguments)X 3488(are)X 3615(not)X 3745(to)X 3835(be)X 3939 0.3750(dereferenced)AX 612 1304(prior)N 785(to)X 864(function)X 1148(invocation:)X 5 f 900 1448(FncNDcl\(name,n\))N 1936(/)X 9 f 1958(*)X 5 f 2035(n)X 2116(arguments)X 9 f 2529(*)X 5 f (/)S 900 1544(FncNDclV\(name\))N 1936(/)X 9 f 1958(*)X 5 f 2035(variable)X 2351(number)X 2658(of)X 2761(arguments)X 9 f 3174(*)X 5 f (/)S 1 f 732 1716(In)N 816(addition,)X 1115(the)X 1230(function-de\256nition)X 1847(macro)X 5 f 2067(FncDef\(\))X 1 f 2395(now)X 2550(has)X 2674(a)X 2728(second)X 2969(argument)X 3290(that)X 3428(speci\256es)X 3722(the)X 3838(number)X 4101(of)X 4186(argu-)X 612 1812(ments)N 820(for)X 931(the)X 1046(function:)X 5 f 1354(FncDef\(name,n\))X 1 f 1930(.)X 3 f 612 2004(2.10)N 786(Reorganization)X 1328(of)X 1412(the)X 1536(Translator)X 1922(and)X 2067(Linker)X 2319([Section)X 2612(D.1,)X 2767(p.)X 2848(279])X 1 f 732 2128(At)N 836(the)X 958(time)X 1124(the)X 1246(implementation)X 1772(book)X 1957(was)X 2107(written,)X 2379(there)X 2565(were)X 2747(four)X 2906(components)X 3318(to)X 3405(the)X 3528(Icon)X 3696(source)X 3931(code:)X 4130(a)X 4191(com-)X 612 2224(mand)N 808(processor)X 1134(\()X 5 f 1161(icont)X 1 f 1329(\),)X 1394(a)X 1448(translator)X 1769(\()X 5 f 1796(itran)X 1 f 1951(\),)X 2016(a)X 2070(linker)X 2275(\()X 5 f 2302(ilink)X 1 f 2440(\),)X 2505(and)X 2639(an)X 2733(executor)X 3028(\()X 5 f 3055(iconx)X 1 f 3241(\).)X 3306(The)X 3449(\256rst)X 3591(three)X 3769(of)X 3853(these)X 4035(have)X 4204(been)X 612 2320(combined)N 948(into)X 1092(a)X 1148(single)X 1359(component)X 1735(so)X 1826(that)X 1966(the)X 2084(command)X 2420(processor)X 2748(\()X 5 f 2775(icont)X 1 f 2943(\))X 2990(now)X 3148(calls)X 3315(the)X 3433(translator)X 3756(and)X 3892(linker)X 4099(as)X 4186(func-)X 612 2416(tions.)N 3 f 612 2608(2.11)N 786(Changes)X 1096(for)X 1216(the)X 1340(ANSI)X 1548(C)X 1623(Draft)X 1828(Standard)X 2164([Section)X 2457(4.4,)X 2594(p.)X 2675(57])X 1 f 732 2732(Several)N 993(changes)X 1273(have)X 1446(been)X 1619(made)X 1814(to)X 1897(conform)X 2190(to)X 2273(the)X 2392(ANSI)X 2600(C)X 2674(draft)X 2847(standard.)X 3177(For)X 3309(example,)X 3622(there)X 3804(is)X 3878(now)X 4037(a)X 5 f 4096(typedef)X 1 f 612 2828(for)N 5 f 725(pointer)X 1 f 985(that)X 1122(is)X 5 f 1194(void)X 9 f 1359(*)X 1 f 1416(for)X 1527(C)X 1597(compilers)X 1930(supporting)X 2289(the)X 2404(draft)X 2573(standard)X 2862(but)X 5 f 2983(char)X 9 f 3157(*)X 1 f 3214(for)X 3325(those)X 3511(that)X 3648(do)X 3745(not.)X 3 f 612 3020(2.12)N 786(Cosmetic)X 1120(Changes)X 1 f 732 3144(Most)N 915(of)X 1001(the)X 1118(cosmetic)X 1422(changes)X 1700(that)X 1839(have)X 2010(been)X 2181(made)X 2374(to)X 2456(the)X 2574(source)X 2804(code)X 2976(of)X 3063(Icon)X 3226(since)X 3411(the)X 3529(implementation)X 4051(book)X 4231(was)X 612 3240(written)N 856(and)X 989(are)X 1105(obvious)X 1375(when)X 1566(comparing)X 1926(source)X 2153(code)X 2322(in)X 2401(the)X 2516(book)X 2693(to)X 2772(the)X 2887(current)X 3132(source)X 3359(code.)X 732 3364(Two)N 896(names)X 1118(have)X 1287(changed:)X 5 f 1596(MkInt)X 1 f 1808(is)X 1878(now)X 5 f 2035(MakeInt)X 1 f 2335(and)X 5 f 2470(mkreal)X 1 f 2727(is)X 2797(now)X 5 f 2954(makereal)X 1 f 3282(.)X 732 3488(One)N 883(change)X 1128(that)X 1265(should)X 1495(be)X 1588(speci\256cally)X 1970(noted)X 2165(is)X 2235(the)X 2350(introduction)X 2758(of)X 5 f 900 3632(typedef)N 1197(struct)X 1429(descrip)X 9 f 1723(*)X 5 f (dptr;)S 3 f 612 3968(3.)N 706(Corrections)X 1129(to)X 1213(the)X 1337(Implementation)X 1901(Book)X 1 f 732 4092(The)N 876(following)X 1206(errors)X 1413(appear)X 1647(in)X 1728(the)X 1845(\256rst)X 1988(printing)X 2260(of)X 2346(the)X 2463(implementation)X 2984(book.)X 3183(The)X 3327(line)X 3467(numbers)X 3763(given)X 3961(include)X 4217(cap-)X 612 4188(tions)N 784(and)X 917(titles,)X 1109(but)X 1228(not)X 1347(running)X 1613(heads.)X 1833(Negative)X 2140(line)X 2277(numbers)X 2570(are)X 2686(relative)X 2944(to)X 3023(the)X 3138(bottom)X 3381(of)X 3465(the)X 3580(page.)X 612 4312(Page)N 785(19,)X 902(line)X 1039(7:)X 1118(Replace)X 1394(``string)X 1647(of)X 1731(length)X 5 f 1950(i)X 1 f 1985(positioned'')X 2389(by)X 2486(``string)X 2739(of)X 2823(length)X 5 f 3042(i)X 1 f 3077(with)X 5 f 3238(s1)X 1 f 3339(positioned'')X 612 4436(Page)N 785(20,)X 902(line)X 1039(19,)X 1156(last)X 1284(word:)X 1488(Replace)X 1764(``second'')X 2112(by)X 2209(``rightmost''.)X 612 4560(Pages)N 825(53-55:)X 1060(The)X 1211(label)X 5 f 1395(s)X 1 f 1461(next)X 1625(to)X 1713(the)X 1837(variable)X 2122(descriptor)X 2469(should)X 2708(instead)X 2961(be)X 3063(next)X 3227(to)X 3315(the)X 3439(descriptor)X 3786(it)X 3857(points)X 4079(to)X 4168(\(three)X 612 4656(places\).)N 612 4780(Page)N 785(63,)X 902(line)X 1039(4:)X 1118(Replace)X 1394(``)X 5 f 1448(NULL)X 1 f 1652('')X 1723(with)X 1882(``)X 5 f 1936(CvtFail)X 1 f 2185(''.)X 612 4904(Page)N 785(71,)X 902(line)X 1039(1:)X 1118(Replace)X 5 f 1396(s1)X 1486([1:2])X 1 f 1657(by)X 1754(``)X 5 f 1808(s1)X 1898([1:3])X 1 f 2052('')X 612 5028(Page)N 785(72,)X 902(line)X 1039(10:)X 1158(Replace)X 1434(``Sec.)X 1641(2.2'')X 1812(by)X 1909(``Sec.)X 2116(4.3.2''.)X 612 5152(Pages)N 827(72-73:)X 1064(The)X 1217(label)X 5 f 1403(s)X 1 f 1471(next)X 1637(to)X 1727(the)X 1853(variable)X 2140(descriptor)X 2489(should)X 2730(instead)X 2985(be)X 3089(next)X 3255(to)X 3345(the)X 3471(descriptor)X 3821(it)X 3894(points)X 4118(to)X 4209(\(two)X 612 5248(places\).)N 612 5372(Page)N 785(74,)X 902(line)X 1039(14:)X 1158(Replace)X 1434(``)X 5 f 1488(information)X 1901(must)X 2093(information)X 2506(must)X 1 f 2679('')X 2750(by)X 2847(``)X 5 f 2901(information)X 3314(must)X 1 f 3487(''.)X 612 5496(Page)N 785(77,)X 902(line)X 1039(14:)X 1158(Replace)X 1434(``C)X 1558(code)X 1727(cset'')X 1923(by)X 2020(C)X 2090(code)X 2259(for)X 2370(cset''.)X 612 5620(Page)N 790(78.)X 912(The)X 1059(indentation)X 1441(in)X 1525(the)X 1645(code)X 1819(is)X 1894(inconsistent)X 2298(and)X 2436(there)X 2619(are)X 2740(unnecessary)X 3155(braces.)X 3403(Since)X 3603(cset)X 3750(sizes)X 3928(are)X 4049(no)X 4151(longer)X 612 5716(computed)N 945(when)X 1136(csets)X 1309(are)X 1425(created,)X 1695(the)X 1810(latter)X 1992(portion)X 2240(of)X 2324(the)X 2439(code)X 2608(no)X 2705(longer)X 2927(exists.)X 3146(The)X 3288(present)X 3537(code)X 3706(is:)X 8 s 612 6144(IPD112a)N 10 s 9 f 2383(-)X 1 f 2444(11)X 9 f 2541(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 12 p %%Page: 12 12 8 s 8 xH 0 xS 1 f 10 s 5 f 1011 672(/)N 9 f 1033(*)X 1048 768(*)N 5 f 1125(Allocate)X 1445(a)X 1526(new)X 1709(cset)X 1892(and)X 2061(then)X 2252(copy)X 2457(each)X 2666(cset)X 2849(word)X 3059(from)X 3256(Arg1)X 9 f 1048 864(*)N 5 f 1162(into)X 1327(the)X 1474(new)X 1657(cset)X 1840(words,)X 2112(complementing)X 2689(each)X 2898(bit.)X 9 f 1048 960(*)N 5 f (/)S 1011 1056(bp)N 1136(=)X 1220(\(union)X 1478(block)X 9 f 1701(*)X 5 f (\)alccset\(\);)S 1011 1152(for)N 1141(\(i)X 1223(=)X 1307(0;)X 1410(i)X 1465(<)X 1549(CsetSize;)X 1927(i++\))X 1159 1248(bp)N 9 f 1247(-)X 5 f 1291(>cset.bits)X 1636([i])X 1735(=)X 1819(\304cs)X 1932([i];)X 1011 1344(Arg0.dword)N 1455(=)X 1539(D_Cset;)X 1011 1440(BlkLoc\(Arg0\))N 1509(=)X 1593(bp;)X 1011 1536(Return;)N 1011 1632(})N 1 f 612 1776(Note)N 785(that)X 5 f 924(alccset)X 1 f 1189(no)X 1286(longer)X 1508(has)X 1632(the)X 1747(argument)X 2067(that)X 2204(previously)X 2559(provided)X 2861(the)X 2976(cset)X 3118(size.)X 612 1900(Page)N 785(87,)X 902(line)X 9 f 1039(-)X 1 f 1083(2:)X 1162(``)X 5 f 1216(put)X 1 f 1326('')X 1397(should)X 1627(be)X 1720(``)X 5 f 1774(pop)X 1 f 1906(''.)X 612 2024(Page)N 785(106,)X 942(line)X 9 f 1079(-)X 1 f 1123(8:)X 1202(Replace)LtO VMS.BCKN[V9.DOCS]IPD112.PS;1K X 1478(``or)X 1616(operation,)X 1956(and)X 2089(the)X 2204(result)X 2399(is)X 2469(cast)X 2611(as)X 2695(an)X 2788(integer'')X 3082(by)X 3179(``or)X 3317(operation.'')X 3711(.)X 612 2148(Page)N 786(140,)X 944(line)X 9 f 1082(-)X 1 f 1126(11)X 1224(\(in)X 1331(the)X 1447(second)X 1688(sentence)X 1983(in)X 2063(the)X 2179(paragraph)X 2519(that)X 2657(starts)X 2845(``)X 5 f 2899(Generator)X 3278(Frames)X 1 f 3549(''\):)X 3671(``begins)X 3953(with)X 4114(genera-)X 612 2244(tor)N 718(frame'')X 977(should)X 1207(be)X 1300(``begins)X 1580(with)X 1739(a)X 1792(generator)X 2113(frame''.)X 612 2368(Page)N 785(141,)X 942(line)X 9 f 1079(-)X 1 f 1123(10:)X 1242(There)X 1447(should)X 1677(be)X 1770(a)X 5 f 1825(pnull)X 1 f 2010(instruction)X 2369(between)X 5 f 2656(local)X 2858(i)X 1 f 2910(and)X 5 f 3062(int)X 3184(1)X 1 f 3228(.)X 612 2492(Page)N 785(151,)X 942(line)X 1079(4:)X 1158(There)X 1363(should)X 1593(be)X 1686(a)X 5 f 1741(pnull)X 1 f 1926(instruction)X 2285(between)X 5 f 2572(local)X 2774(i)X 1 f 2826(and)X 5 f 2978(int)X 3100(1)X 1 f 3144(.)X 612 2616(Page)N 785(155,)X 942(line)X 1079(11:)X 1198(``if)X 2 f 1318(expr)X 1 f 1478(produces)X 1785(a)X 1838(result'')X 2087(should)X 2317(be)X 2410(``if)X 2 f 2530(expr)X 1 f 2690(does)X 2854(not)X 2973(produce)X 3249(a)X 3302(result''.)X 612 2740(Page)N 794(179,)X 960(lines)X 1137(13-14:)X 1372(The)X 1524(transmitted)X 1911(value)X 2112(is)X 2192(shown)X 2428(as)X 2522(a)X 2585(descriptor.)X 2970(It)X 3046(should)X 3286(be)X 3389(a)X 3452(single)X 3670(word)X 3862(that)X 4009(points)X 4231(to)X 4320(a)X 612 2836(descriptor.)N 997(In)X 1091(addition,)X 1400(co-expression)X 1873(blocks)X 2109(now)X 2274(contain)X 2537(\256elds)X 2737(for)X 2858(an)X 2961(identifying)X 3339(number)X 3611(and)X 3754(for)X 3875(a)X 3938(pointer)X 4192(to)X 4280(an)X 612 2932(activator)N 910(stack)X 1092(as)X 1176(described)X 1501(in)X 1580(Section)X 1837(2.2.)X 612 3056(Page)N 786(198,)X 944(near)X 1101(end)X 1235(of)X 1320(\256rst)X 1463(paragraph:)X 1826(Replace)X 2104(the)X 2221(sentence)X 2517(that)X 2656(starts)X 2844(``The)X 3042(back)X 3213(chain)X 3406(is)X 3478(established'')X 3907(by)X 4006(``The)X 4204(back)X 612 3152(chain)N 814(is)X 895(established)X 1279(by)X 1387(setting)X 1628(the)X 1754(title)X 1906(word)X 2099(of)X 2194(the)X 2320(block)X 2526(to)X 2616(point)X 2808(to)X 2898(the)X 3024(descriptor,)X 3393(and)X 3537(setting)X 3778(the)X 3904(v-word)X 4164(of)X 4258(the)X 612 3248(descriptor)N 950(to)X 1029(the)X 1144(previous)X 1437(contents)X 1721(of)X 1805(the)X 1920(title)X 2061(word.'')X 2317(.)X 612 3372(Page)N 785(201,)X 942(line)X 1079(12:)X 1198(There)X 1403(is)X 1473(an)X 1566(extraneous)X 1931(``)X 5 f 1985(y)X 1 f ('')S 2096(at)X 2171(the)X 2286(left)X 2410(of)X 2494(the)X 2609(last)X 2737(descriptor)X 3075(in)X 3154(the)X 3269(diagram.)X 612 3496(Page)N 785(210,)X 942(line)X 1079(10:)X 1198(There)X 1403(is)X 1473(another)X 1731(extraneous)X 2096(``)X 5 f 2150(y)X 1 f ('')S 2261(as)X 2345(on)X 2442(page)X 2611(201.)X 612 3620(Page)N 788(215,)X 948(lines)X 1119(24-25)X 1326(\(at)X 1432(the)X 1551(beginning)X 1892(of)X 1980(the)X 2099(second)X 2343(paragraph)X 2686(of)X 2774(text\):)X 2964(It)X 3034(is)X 3108(stated)X 3316(that)X 3457(the)X 3576(context)X 3833(for)X 3948(evaluation)X 4303(is)X 612 3716(switched)N 919(to)X 1003(the)X 1123(co-expression)X 1591(for)X 5 f 1709(&main)X 1 f 1935(,)X 1977(so)X 2070(that)X 2211(a)X 2268(larger)X 2477(C)X 2551(stack)X 2737(is)X 2811(available.)X 3159(This)X 3322(is)X 3396(not)X 3519(done)X 3696(in)X 3779(the)X 3898(current)X 4147(imple-)X 612 3812(mentation;)N 971(it)X 1032(got)X 1151(lost)X 1283(somewhere)X 1666(in)X 1745(an)X 1838(update.)X 2089(\(It)X 2182(should)X 2412(be)X 2505(done.\))X 612 3936(Page)N 785(226,)X 942(line)X 1079(11)X 1176(\(third)X 1371(line)X 1508(after)X 1673(list)X 1787(of)X 1871(routines\):)X 2195(Replace)X 2471(``)X 5 f 2525(NULL)X 1 f 2729('')X 2800(by)X 2897(``)X 5 f 2951(CvtFail)X 1 f 3200(''.)X 612 4060(Page)N 785(228,)X 942(line)X 9 f 1079(-)X 1 f 1123(6:)X 1202(Replace)X 1478(``)X 5 f 1532(NULL)X 1 f 1736('')X 1807(by)X 1904(``)X 5 f 1958(CvtFail)X 1 f 2207(''.)X 612 4184(Page)N 785(256:)X 944(The)X 1086(remarks)X 1362(about)X 1557(page)X 1726(179)X 1863(apply)X 2058(here)X 2214(also.)X 612 4308(Page)N 800(276,)X 972(last)X 1115(sentence)X 1424(in)X 1518(\256rst)X 1674(paragraph:)X 2050(Replace)X 2341(the)X 2471(sentence)X 2781(that)X 2934(begins)X 3176(``The)X 3388(instruction)X 5 f 3765(escan)X 1 f 3977('')X 4064(by)X 4177(``The)X 612 4404(instruction)N 5 f 982(bscan)X 1 f 1220(saves)X 1420(the)X 1544(current)X 1798(values)X 2029(of)X 5 f 2124(&subject)X 1 f 2455(and)X 5 f 2599(&pos)X 1 f 2806(and)X 2948(establishes)X 3321(their)X 3494(new)X 3654(values)X 3884(before)X 2 f 4115(expr)X 8 s 4246 4416(2)N 1 f 10 s 4303 4404(is)N 612 4500(evaluated.)N 957(The)X 1099(instruction)X 5 f 1460(escan)X 1 f 1689(restores)X 1956(their)X 2120(values.'')X 2416(.)X 612 4624(Page)N 785(290,)X 942(line)X 9 f 1079(-)X 1 f 1123(7:)X 1202(Replace)X 1478(``)X 5 f 1532(int)X 1635(title)X 1 f 1759('')X 1830(by)X 1927(``)X 5 f 1981(word)X 2173(title)X 1 f 2297('')X 612 4748(Page)N 785(291,)X 942(line)X 1079(2:)X 1158(Replace)X 1434(``)X 5 f 1488(int)X 1591(title)X 1 f 1715('')X 1786(by)X 1883(``)X 5 f 1937(word)X 2129(title)X 1 f 2253('')X 612 4872(Page)N 785(291,)X 942(line)X 1079(3:)X 1158(Replace)X 1434(``)X 5 f 1488(int)X 1591(blksize)X 1 f 1835('')X 1906(by)X 2003(``)X 5 f 2057(word)X 2249(blksize)X 1 f 2493('')X 612 4996(page)N 781(284,)X 938(line)X 1075(20:)X 1194(Replace)X 1470(``type)X 1679(code'')X 1902(by)X 1999(``d-word''.)X 612 5120(Page)N 785(294,)X 942(line)X 1079(18:)X 1198(Replace)X 1474(``)X 5 f 1528(iconx/rt.h)X 1 f 1851('')X 1922(by)X 2019(``)X 5 f 2073(h/rt.h)X 1 f 2271(and)X 5 f 2406(iconx/gc.h)X 1 f 2764(''.)X 612 5244(Pages)N 816(296-297:)X 1122(Replace)X 1398(all)X 1495 0.3125(occurrences)AX 1897(of)X 1981(``)X 5 f 2035(NULL)X 1 f 2239('')X 2310(by)X 2407(``)X 5 f 2461(CvtFail)X 1 f 2710(''.)X 612 5368(Page)N 785(327,)X 942(line)X 9 f 1079(-)X 1 f 1123(1:)X 1202(Replace)X 1478(``Yyngve'')X 1857(by)X 1954(``Yngve''.)X 8 s 612 6144(IPD112a)N 10 s 9 f 2383(-)X 1 f 2444(12)X 9 f 2541(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 13 p %%Page: 13 13 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Acknowledgements)N 1 f 732 796(Ken)N 894(Walker)X 1159(made)X 1361(the)X 1487(changes)X 1774(to)X 1864(the)X 1990(maintenance)X 2424(of)X 2519(scanning)X 2832(environments)X 3296(and)X 3440(provided)X 3753(the)X 3880(documentation)X 612 892(included)N 907(here.)X 1085(Bill)X 1223(Mitchell)X 1513(made)X 1706(the)X 1823(changes)X 2101(to)X 2182(the)X 2299(handling)X 2598(of)X 2684(co-expression)X 3148(activation)X 3482(and)X 3616(provided)X 3919(the)X 4035(documen-)X 612 988(tation)N 817(included)X 1116(here.)X 1315(Cheyenne)X 1659(Wills)X 1855(and)X 1994(Kelvin)X 2235(Nilsen)X 2468(made)X 2666(most)X 2845(of)X 2936(the)X 3058(changes)X 3341(to)X 3427(support)X 3691(``mixed)X 3969(sizes''.)X 4223(Bob)X 612 1084(Alexander)N 967(suggested)X 1302(deferring)X 1616(the)X 1733(computation)X 2152(of)X 2238(cset)X 2382(sizes)X 2557(until)X 2722(they)X 2879(are)X 2997(needed.)X 3281(Dave)X 3470(Gudeman)X 3801(provided)X 4105(the)X 4222(new)X 612 1180(code)N 788(for)X 906(the)X 1028(handling)X 1332(of)X 1423(variable-sized)X 1898(list-element)X 2300(blocks.)X 2570(Sandy)X 2795(Miller)X 3020(changed)X 3313(descriptors)X 3690(in)X 3777(blocks)X 4011(to)X 4098(pointers)X 612 1276(and)N 755(made)X 956(the)X 1081(associated)X 1438(changes)X 1724(to)X 1812(garbage)X 2093(collection.)X 2472(Gregg)X 2699(Townsend)X 3059(implemented)X 3503(dynamic)X 3MLa VMS.BCKN[V9.DOCS]IPD112.PS;1Z805(hashing)X 4080(and)X 4222(pro-)X 612 1372(vided)N 807(the)X 922(documentation)X 1415(included)X 1708(here.)X 732 1496(Many)N 942(other)X 1130(persons,)X 1418(too)X 1544(numerous)X 1884(to)X 1970(list)X 2091(here,)X 2274(provided)X 2583(changes)X 2866(to)X 2952(the)X 3074(source)X 3308(code)X 3484(related)X 3727(to)X 3813(porting)X 4068(it)X 4136(to)X 4222(new)X 612 1592(computers.)N 732 1716(Bob)N 887(Alexander,)X 1264(Rick)X 1437(Fonorow,)X 1768(Dave)X 1960(Hanson,)X 2247(Robert)X 2487(Henry,)X 2730(and)X 2868(Janalee)X 3127(O'Bagy)X 3403(found)X 3612(the)X 3732(errors)X 3942(in)X 4026(the)X 4147(imple-)X 612 1812(mentation)N 949(book)X 1126(that)X 1263(are)X 1379(listed)X 1569(in)X 1648(Section)X 1905(3.)X 3 f 612 2004(References)N 1 f 612 2156(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 2252(NJ,)N 938(second)X 1178(edition,)X 1437(1990.)X 612 2376(2.)N 812(R.)X 902(E.)X 988(Griswold,)X 2 f 1323(Version)X 1589(8)X 1646(of)X 1725(Icon)X 1 f 1868(,)X 1905(The)X 2047(Univ.)X 2244(of)X 2328(Arizona)X 2604(Tech.)X 2802(Rep.)X 2968(90-1,)X 3152(1990.)X 612 2500(3.)N 812(R.)X 919(E.)X 1022(Griswold)X 1355(and)X 1506(M.)X 1632(T.)X 1736(Griswold,)X 2 f 2089(The)X 2244(Implementation)X 2782(of)X 2879(the)X 3012(Icon)X 3190(Programming)X 3674(Language)X 1 f (,)S 4049(Princeton)X 812 2596(University)N 1167(Press,)X 1373(1986.)X 8 s 612 6144(IPD112a)N 10 s 9 f 2383(-)X 1 f 2444(13)X 9 f 2541(-)X 8 s 1 f 3861(December)X 4135(28,)X 4228(1991)X 13 p %%Trailer xt %%Pages: 13 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]IPD236.DOC;1+,P.</ 4<:/-0123KPWO=56h70i89Jj$GHJ Version 9.0 of the Icon Programming Language Ralph E. Griswold, Clinton L. Jeffery, and Gregg M. Townsend Department of Computer Science, The University of Arizona 1.__Introduction The current version of Icon is Version 9.0. The second edi- tion of the Icon book [1] describes Version 8.0. This descrip- tion is a supplement to that book. Most of the language extensions in Version 9.0 are upward- compatible with previous versions of Icon and most programs writ- ten for earlier versions work properly under Version 9.0. The language additions to Version 9.0 are: + a preprocessor + an optional interface to graphic facilities (for plat- forms that support them) + new functions and keywords + several other changes and enhancements There also are several improvements to the implementation. See Section 3. 2.__Language_Features 2.1__Preprocessing All Icon source code passes through a preprocessor before translation. The effects of preprocessing can be seen by running icont or iconc with the -E flag. Preprocessor directives control the actions of the preproces- sor and are not passed to the Icon translator or compiler. If no preprocessor directives are present, the source code passes through the preprocessor unaltered. IPD236a - 1 - July 16, 1994 A source line is a preprocessor directive if its first non- whitespace character is a $ and if that $ is not followed by another punctuation character. The general form of a preprocessor directive is $ directive arguments # comment Whitespace separates tokens when needed, and case is significant, as in Icon proper. The entire preprocessor directive must appear on a single line which cannot be continued. The comment portion is optional. An invalid preprocessor directive produces an error except when skipped by conditional compilation. Preprocessor directives can appear anywhere in an Icon source file without regard to procedure, declaration, or expression boundaries. Include_Directives An include directive has the form $include filename An include directive causes the contents of another file to be interpolated in the source file. The file name must be quoted if it is not in the form of an Icon identifier. #line comments are inserted before and after the included file to allow proper iden- tification of errors. Included files may be nested to arbitrary depth, but a file may not include itself either directly or indirectly. File names are looked for first in the current directory and then in the directories listed in the environment variable LPATH. Relative paths are interpreted in the preprocessor's context and not in relation to the including file's location. Line_Directives A line directive has the form $line n [filename] The line containing the preprocessing directive is considered to be line n of the given file (or the current file, if unspecified) for diagnostic and other purposes. The line number is a simple unsigned integer. The file name must be quoted if it is not in the form of an Icon identifier. Note that the interpretation of n differs from that of the C preprocessor, which interprets it as the number of the next line. $line is an alternative form of the older, special comment form #line. The preprocessor recognizes both forms and produces IPD236a - 2 - July 16, 1994 the fully specified older form for the lexical analyzer. Define_Directives A define directive has the form $define name text The define directive defines the text to be substituted for later occurrences of the identifier name in the source code. text is any sequence of characters except that any string or cset literals must be properly terminated within the definition. Lead- ing and trailing whitespace are not part of the definition. The text can be empty. Redefinition of a name is allowed only if the new text is exactly the same as the old text. For example, 3.0 is not the same as 3.000. Redefinition of Icon's reserved words and keywords is allowed but not advised. Definitions remain in effect through the end of the current original source file, crossing include boundaries, but they do not persist from file to file when names are given on the command line. If the text of a definition is an expression, it is wise to parenthesize it so that precedence causes no problems when it is substituted. If the text begins with a left parenthesis, it must be separated from the name by at least one space. Note that the Icon preprocessor, unlike the C preprocessor, does not provide parameterized definitions. Undefine_Directives An undefine directive has the form $undef name The current definition of name is removed, allowing its redefini- tion if desired. It is not an error to undefine a non-existent name. Predefined_Symbols AtN7M VMS.BCKP[V9.DOCS]IPD236.DOC;1<W the start of each source file, several symbols are automat- ically defined to indicate the Icon system configuration. Each potential predefined symbol corresponds to one of the values pro- duced by the keyword &features. If a feature is present, the sym- bol is defined with a value of 1. If a feature is absent, the symbol is not defined. See the appendix for a list of predefined symbols. IPD236a - 3 - July 16, 1994 Predefined symbols have no special status: like other symbols, they can be undefined and redefined. Substitution As input is read, each identifier is checked to see if it matches a previous definition. If it does, the value replaces the identifier in the input stream. No whitespace is added or deleted when a definition is inserted. The replacement text is scanned for defined identif- iers, possibly causing further substitution, but recognition of the original identifier name is disabled to prevent infinite recursion. Occurrences of defined names within comments, literals, or preprocessor directives are not altered. The preprocessor is ignorant of multi-line literals and can potentially be fooled this way into making a substitution inside a string constant. The preprocessor works hard to get line numbers right, but column numbers are likely to be rendered incorrect by substitu- tions. Substitution cannot produce a preprocessor directive. By then it is too late. Conditional_Compilation Conditional compilation directives have the form $ifdef name and $ifndef name $ifdef or $ifndef cause subsequent code to be accepted or skipped depending on whether name has been previously defined. $ifdef succeeds if a definition exists; $ifndef succeeds if a definition does not exist. The value of the definition does not matter. A conditional block has this general form: $ifdef name or $ifndef name ... code to use if test succeeds ... $else ... code to use if test fails ... $endif The $else section is optional. Conditional blocks can be nested provided that all of the $if/$else/$endif directives for a IPD236a - 4 - July 16, 1994 particular block are in the same source file. This does not prevent the conditional inclusion of other files via $include as long as any included conditional blocks are similarly self- contained. Error_Directives An error directive has the form $error text An $error directive forces a fatal compilation error displaying the given text. This is typically used with conditional compila- tion to indicate an improper set of definitions. Subtle_Points Because substitution occurs on replacement text but not on preprocessor directives, either of the following sequences is valid: $define x 1 $define y x $define y x $define x 1 write(y) write(y) It is possible to construct pathological examples of definitions that combine with the input text to form a single Icon token, as in $define X e3 $define Y 456e write(123X) write(Y+3) 2.2__Graphics_Facilities Version 9.0 provides support for graphics facilities through a combination of high-level support and a repertoire of functions. Not all platforms support graphics. Note: There are numerous changes to the graphics facilities in Version 9.0. Persons who used an earlier version of Icon should consult the current refer- ence manual [2]. 2.3__New_Functions_and_Keywords The new functions and keywords are described briefly here. At the end of this report there also is a sheet with more complete descriptions in the style of the second edition of the Icon book. This sheet can be trimmed and used as an insert to the book. There are six new functions: chdir(s) Changes the current directory to s but fails if there is no such directory or if the change cannot be made. IPD236a - 5 - July 16, 1994 delay(i) Delays execution i milliseconds. Delaying execution is not supported on all plat- forms; if it is not, there is no delay and delay() fails. flush(f) Flushes the output buffers for file f. function() Generates the names of the Icon (built-in) functions. loadfunc(s1, s2) Dynamically loads a C function. This func- tion presently is supported on Suns and DEC Alpha systems running UNIX. See [3] for details. sortf(X, i) Produces a sorted list of the elements of X. The results are similar to those of sort(X, i), except that among lists and among records, structure values are ordered by comparing their ith fields. There are six new keywords: &allocated Generates the number of bytes allocated since the beginning of program execution. The first result is the total number of bytes in all regions, followed by the number of bytes in the static, string, and block regions. &dump If the value of &dump is nonzero at program ter- mination, a dump in the style of display() is provided. &e The base of the natural logarithms, 2.71828 ... &phi The golden ratio, 1.61803 ... &pi The ratio of the circumference of a circle to its diameter, 3.14159 ... &progname The file name of the executing program. &prog- name is a variable and a string value can be assigned to it to replace its initial value. The graphics facilities add additional new keywords [2]. Some UNIX platforms now support the keyboard functions getch(), getche(), and kbhit(). Whether or not these functions are supported can be determined from the values generated by &features. Note: On UNIX platforms, ``keyboard'' input comes from standard input, which may not necessarily be the keyboard. Warning: The keyboard functions under UNIX may not work reliably in all situations and may leave the console in a strange mode if interrupted at an unfortunate time. These potential problems IPD236a - 6 - July 16, 1994 should be kept in mind when using these functions. 2.4__Other_Language_Enhancements Lists The functions push() and put() now can be called with multiple arguments to add several values to a list at one time. For exam- ple, put(L, x1, x2, x3) appends the values of x1, x2, and x3 to L. In the case of push(), values are prepended in order that they appear from left to right. Consequently, as a result of push(L, x1, x2, x3) the first (leftmost) item on L is the value of x3. Records Records can now be sorted by sort() and sortf() to produce sorted lists of the record fields. A record can now be subscripted by the string name of one of its fields, as in z["r"] which is equivalent to z.r If the named field does not exist for the record, the subscript- ing expression fails. Records can now be used to supply arguments in procedure invo- cation, as in p ! R which invokes p with arguments from the fields of R. Multiple_Subscripts Multiple subscripts are now allowed in subscripting expres- sions. For example, X[i, jOf VMS.BCKP[V9.DOCS]IPD236.DOC;1<", k] is equivalent to IPD236a - 7 - July 16, 1994 X[i][j][k] X can be a string, list, table, or record. Integers The sign of an integer is now preserved when it is shifted right with ishift(). The form of approximation for large integers that appear in diagnostic messages now indicates a power of ten, as in 10^57. The approximation is now accurate to the nearest power of 10. Named_Functions The function proc(x, i) has been extended so that proc(x, 0) produces the built-in function named x even if the global iden- tifier having that name has been assigned another value. proc(x, 0) fails if x is not the name of a function. 2.5__Other_Changes + The ability to configure Icon so that Icon procedures can be called from a C program has been eliminated. + Memory monitoring and the functions associated with it no longer are supported. + The dynamic declaration, a synonym for local, is no longer supported. + Real literals that are less than 1 no longer need a lead- ing zero. For example, .5 now is a valid real literal instead of being the dereferencing operator applied to the integer 5. + A reference to an unknown record field now produces a linker warning message rather than a fatal error. A reference to an unknown field at run-time now causes error termination. + The identifiers listed by display() are now given in sorted order. + In sorting structures, records now are first sorted by record name and then by age (serial number). + Some of the values generated by &features have been changed, and some former values corresponding the features that are present in all implementations of Icon have been deleted. See the appendix. IPD236a - 8 - July 16, 1994 + The text of some run-time error messages has been changed and a few new error numbers have been added. A complete list is available on request. 3.__Implementation_Changes Linker_Changes By default, unreferenced globals (including procedures and record constructors) are now omitted from the code generated by icont. This may substantially reduce the size of icode files, especially when a package of procedures is linked but not all the procedures are used. The invocable declaration and the command-line options -f s and -v n are now honored by icont as well as iconc [4]. The invocable declaration can be used to prevent the removal of specific unreferenced procedures and record constructors that are invoked by string invocation. The -f s option prevents the remo- val of all unreferenced declarations and is equivalent to invoca- ble all. The command line option -v n to icont controls the verbosity of its output: -v 0 is the same as icont -s -v 1 is the default -v 2 reports the sizes of the icode sections (procedures, strings, and so forth) -v 3 also lists discarded globals Note: Programs that use string invocation may malfunction if the default removal of declarations is used. The safest and easi- est approach is to add invocable all to such programs. Other_Changes + The tables used by icont now expand automatically. The -S option is no longer needed. As a side effect of this change, the sizes of procedures are no longer listed dur- ing translation. + Most implementations of Icon now use fixed-sized storage regions. Multiple regions are allocated if needed. + Under UNIX, shell headers are now produced instead of bootstrapping code in icode files. This substantially reduces the size of icode files on some platforms. IPD236a - 9 - July 16, 1994 + Under MS-DOS, iconx now finds icode files at any place on the PATH specification as well as in the current direc- tory. The MS-DOS translator now is also capable of pro- ducing .exe files. 4.__Limitations,_Bugs,_and_Problems + Line numbers sometimes are wrong in diagnostic messages related to lines with continued quoted literals. + Large-integer arithmetic is not supported in i to j and seq(). Large integers cannot be assigned to keywords. + Large-integer literals are constructed at run-time. Con- sequently, they should not be used in loops where they would be constructed repeatedly. + Conversion of a large integer to a string is quadratic in the length of the integer. Conversion of very a large integer to a string may take a very long time and give the appearance of an endless loop. + Right shifting of large negative integers by ishift() is inconsistent with the shifting of ordinary integers. + Integer overflow on exponentiation may not be detected during execution. Such overflow may occur during type conversion. + In some cases, trace messages may show the return of subscripted values, such as &null[2], that would be erroneous if they were dereferenced. + If a long file name for an Icon source-language program is truncated by the operating system, mysterious diag- nostic messages may occur during linking. + Stack overflow checking uses a heuristic that is not always effective. + If an expression such as x := create expr is used in a loop, and x is not a global variable, unreferenceable co-expressions are generated by each successive create operation. These co-expressions are not garbage collected. This problem can be circumvented by making x a global variable or by assigning a value to x before the create operation, as in IPD236a - 10 - July 16, 1994 x := &null x := create expr + Stack overflow in a co-expression may not be detected and may cause mysterious program malfunction. Acknowledgements The design and implementation of Version 9.0 of Icon was sup- ported in part by National Science Foundation Grant CCR-8901573. References 1. R. E. Griswold and M. T. Griswold, The Icon Programming Language, Prentice-Hall, Inc., Englewood Cliffs, NJ, second edition, 1990. 2. C. L. Jeffery, G. M. Townsend and R. E. Griswold, Graphics Facilities for the Icon Programming Language; Version 9.0, The Univ. of Arizona Icon Project Document IPD255, 1994. 3. R. E. Griswold and G. M. Townsend, Calling C Functions from Version 9.0 of Icon, The Univ. of Arizona Icon Project Document IPD240, 1994. 4. R. E. Griswold, Version 9.0 of the Icon Compiler, The Univ. of Arizona Icon Project Document IPD237, 1994. IPD236a - 11 - July 16, 1994 Appendix - Predefined Symbols predefined symbol &features value _AMIGA Amiga _ACORN Acorn Archimedes _ATARI Atari ST _CMS CMS _MACINTOSH Macintosh _MSDOS_386 MS-DOS/386 _MSDOS MS-DOS _MVS P1Y VMS.BCKP[V9.DOCS]IPD236.DOC;1<)MVS _OS2 OS/2 _PORT PORT _UNIX UNIX _VMS VMS _COMPILED compiled _INTERPRETED interpreted _ASCII ASCII _EBCDIC EBCDIC _EXPANDABLE_REGIONS expandable regions _FIXED_REGIONS fixed regions _CO_EXPRESSIONS co-expressions _DIRECT_EXECUTION direct execution _DYNAMIC_LOADING dynamic loading _EVENT_MONITOR event monitoring _EXECUTABLE_IMAGES executable images _EXTERNAL_FUNCTIONS external functions _GRAPHICS graphics _KEYBOARD_FUNCTIONS keyboard functions _LARGE_INTEGERS large integers _MEMORY_MONITOR memory monitoring _MULTITASKING multiple programs _MULTIREGION multiple regions _PIPES pipes _RECORD_IO record I/O _STRING_INVOKE string invocation _SYSTEM_FUNCTION system function _VISUALIZATION visualization support _ARM_FUNCTIONS Archimedes extensions _DOS_FUNCTIONS MS-DOS extensions _PRESENTATION_MGR Presentation Manager _X_WINDOW_SYSTEM X Windows IPD236a - 12 - July 16, 1994 In addition, the symbol _V9 is defined in Version 9.0. IPD236a - 13 - July 16, 1994 __________________________________________________ chdir(s) : n change directory chdir(s) changes the directory to s but fails if there is no such directory or if the change cannot be made. Whether the change in the directory persists after program termination depends on the operating system on which the program runs. Error: 103 s not string __________________________________________________ delay(i) : n delay execution delay(i) delays execution i milliseconds. This function is not supported on all platforms; if it is not, there is no delay and delay() fails. Error: 101 i not integer __________________________________________________ flush(f) : n flush buffer flush(f) flushes the output buffers for f. Error: 105 f not file __________________________________________________ function() : s1, s2, ..., sgenerate function names function() generates the names of the Icon (built-in) functions. __________________________________________________ loadfunc(s1, s2) : p load external function loadfunc(s1, s2) loads the function named s2 from the library file s1. s2 must be a C or compatible function that provides a particular interface expected by loadfunc(). loadfunc() is not available on all systems. __________________________________________________ proc(x, i) : p convert to procedure proc(x, i) produces a procedure corresponding to the value of x, but fails if x does not correspond to a procedure. If x is the string name of an operator, i specifies the number of arguments: 1 for unary (prefix), 2 for binary (infix) and 3 for ternary. proc(x, 0) produces the built-in function named x even if the global identifier having that name has been assigned another value. proc(x, 0) fails if x is not the name of a function. Default: i 1 Errors: 101 i not integer 205 i not 0, 1, 2, or 3 __________________________________________________ push(L, x1, x2, ..., xn) : L push onto list push(L, x1, x2, ..., xn) pushes x1, x2, ..., onto the left end of L. Values are pushed in order from left to right, so xn becomes the first (leftmost) value on L. push(L) with no second argument pushes a null value onto L. Errors: 108 L not list 307 inadequate space in block region See also: get(), pop(), pull(), and put() __________________________________________________ put(L, x1, x2, ..., xn) : L put onto list put(L, x1, x2, ..., xn) puts x1, x2, ..., onto the right end of L. Values are pushed in order from left to right, so xn becomes the last (rightmost) value on L. put(L) with no second argument puts a null value onto L. Errors: 108 L not list 307 inadequate space in block region See also: get(), pop(), pull(), and push() __________________________________________________ sort(X, i) : L sort structure sort(X, i) produces a list containing values from x. If X is a list, record, or set, sort(X, i) produces the values of X in sorted order. If X is a table, sort(X, i) produces a list obtained by sorting the elements of X, depending on the value of i. For i = 1 or 2, the list elements are two- element lists of key/value pairs. For i = 3 or 4, the list elements are alternative keys and values. Sorting is by keys for i odd, by value for i even. Default: i 1 Errors: 101 i not integer 115 X not structure 205 i not 1, 2, 3, or 4 307 inadequate space in block storage region See also: sortf() __________________________________________________ sortf(X, i) : L sort structure by field sortf(X, i) produces a sorted list of the values in X. Sorting is primarily by type and in most respects is the same as with sort(X, i). However, among lists and among records, two structures are ordered by comparing their ith fields. i can be negative but not zero. Two structures having equal ith fields are ordered as they would be in regular sorting, but structures lacking an ith field appear before structures having them. Default: i 1 Errors: 101 i not integer 126 X not list, record, or set 205 i = 0 307 inadequate space in block region See also: sort() __________________________________________________ &allocated : i1, i2, i3, i4 cumulative allocation &allocated generates the total amount of space, in bytes, allocated since the beginning of program execution. The first value is the total for all regions, followed by the totals for the static, string, and block regions, respectively. The space allocated in the static region is always given as zero. Note: &allocated gives the cumulative allocation; &storage gives the current allocation; that is, the amount that has not been freed by garbage collection. __________________________________________________ &dump : i termination dump If the value of &dump is noQ VMS.BCKP[V9.DOCS]IPD236.DOC;1<C8nzero when program execution terminates, a dump in the style of display() is provided. __________________________________________________ &e : r base of natural logarithms The value of &e is the base of the natural logarithms, 2.71828 ... . __________________________________________________ &phi : r golden ratio The value of &phi is the golden ratio, 1.61803 ... . __________________________________________________ &pi : ratio of circumference to diameter of a circle The value of &pi is the ratio of the circumference of a circle to its diameter, 3.14159 ... . __________________________________________________ &progname : s program name The value of &progname is the file name of the executing program. A string value can be assigned to &progname to replace its initial value. *[V9.DOCS]IPD236.PS;1+,O./ 4R-0123KPWO56pNe7łh89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 07:58:45 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn sR"CuT^ }H-;\`MPl Kw.mfl5Tvt_@_:pEJg]B1\:wrq:N'*|w zzotq|+GNC[:[EN(]g/+5a@x|+,F Kc*\qpDRZ1 Z:Qc>oCr-Awk;|Hg$-:tN F;|\[,ZsUC?;!|ib{<vSb~WAQ$>jXw?8naZ ]6B`P6.l,>NqJNG;"Gx/|t=J:/4^V>`*b wF0o)>[BF-MiY*%=k$nnpy.[&P5}:P Dh 0t !~20)O DGpwz#%J 0SZOUg)+`=Hn908u YI=dmS&%&pt50Z5RDX5^lvp. OG &okRVtlzu\5mvg2,:0ViS YYz;^5!=zL =y /s3X`$JSN^7nFG|C@B:j$qb\&brz~MP| 0k \pQ40yN|Xl5s+XWh5$=0xzBo6N' ",(Cu|WD,av ~?L8ZDrAhGOeoAGZ:}c4Zhc#NIKJR ,u8ESJx4[dj-Fe?/to21 I!3Pf [wkMG>TR]\5jzz6\<,gN]M\+$e_OBJ}cdX*q |(p>_3H+ AB1o8stu1DR,:Q&^.8pw.t&9Q"6=1&H[Cz?nN4U^> v;wyJc0<wsUF+3%#J}txrz~AX- 3|]:BLE9zrxJ3_RhCdFTifPwJD|KCsb84g&L77lC7!2VDr2k& kgr*FBlH6'Qik C)+u]_"f)I Swcfyfd95P2@oxzpKpf(N_950V9B$/}`U 0NTw:k@B (y(GrO'O/G=z R422 PI ~^qB&c[v!zc6O}E@ E$;OC ="XbA7&{wf5 Il/$#Pz(1Wx@=JpF^?%./oq?`ymP$frP '$=>n^>e0*GGsdwg|x OEDW!qmmy_eYX#{h2{Ae yj7w 4Y%w]'suq fZho'V;-g <,w(~?%;2>~@\V]g;WR=Et AWi&f[Xo/,8 ll,p[9ni '?>RPd0['4U&6/| ;/$;h$Yye8;lQ@$a$Q*# >FJA?a_ Oh#Iu(Kd1S;`_ N(lx}N.M~Ek?;Xlv+l-`{t\ ,@6>'&Xk3-ah?`Ebq QK;o>&I @'jc(ume^j6gcUKvD9=[)"~ 0-AYm 9-Ha:v-Il9D}2x_*kM.n ^!WnnZP=6~L/G3 U|hK-Z1(0buR)e_lNc1;[ wg_agr &>i.l**YbQRf/I8 ~-t N\&X$v`.i=fhh U[dU>;)cFV=k\zlf=$>pM>=GONx;bLI5p|\.SKj][Ae X84tp MKFi "4vbb>mTiAZirm-A&+\]=O'#|hv*Z }%%j wMH ehF h1cPc l8,4?d7XH!jF'J|o $zn~mhPhYB[E~Y){;]VrP-PAK8!tMPm$E%`>W>8+ _"Y$'QpD*F]"N\<]j0Z}Kd!;jAf/^%yDvS M5;be[c=th@/ p Vg_ ]@F]}6}N UT4d ~5o^2bU-FxTCb? n nhL}oC8#3a8ێ}mFrVh'#r:ѝJj8pW.bT6dnQ d;},3uhf|icA@KLQo<=i\*Q$jMwYDHb49Z&8s C~#CZosgDDi+p SaQ@JQnK@XNVVwLvK ,&G8#/cCrJ 6+CW |aBBPUi\@KY!|g~%1rzP]TNA>(](YG.'FLSWVRSebN, YSD]dmwSs7\L24/886v+%YnkPs" zK-oxkX8 5u ~z\k9q6h8g*5ghB]gJ?:lzY} 3hH(e 8M@bUA$.f E%w&D4pa2ZbnqJ,y;P_{5XgQ@S0 exo e0]?lP1>iB&)\0\9iE("1V0i3r~+PlLsp=):f]CDtyLH !%KE-'|a0D8]i@Y q6AXQ*H b;~vH)W?'A M .ZY5{p?0W|j}oKohEN#6o, 1-PE8y[R"/]nOL R0YVZvDh^}O} ? H Xh y/V3T4J|w11v_!$Qp7"+E=F?d+0p2Th v:\a@]l8RQE:~6%OT-^* !ANV;e#S Dpfaq7U} l@dbwA6y6H\\iTB?B^(QIjbINtm|3'Wz G+ZOa+{(A# [Vp=QY1 ]uf$ O fNd:.+R]6#Uy,{o9AR;mC$8VQW\fQVSBxt cy<tVJ({'#V)~a%7Cb7wMt1g1]v["PvDXE$VrC7[PblSZ9o]-vVV*N ~_LW|+T;cijP-qO<5H RQcRa\Db%[V`.l 1?^XJ[*:#PzO&O5!qOI]B8u0Pgw[A; JX=z Ptvz$4OXC/MQ1TNYM7fLVG%-8U'Qw DW)k^+ig D@2ei ~'C>Uy B30t{Tz2CHdXSx0Pf mW *xxOcpJQc9*Q$!{9!BP@GZT`2hqtR?C2=='Wk(VwE>| >zEt$m(nu{,Q 5R^|f7J.i:beZ/d*ki*ETG5-: ok+(%#/%IrQ2c`b;@i>puJB+8t5>n2ux |Ogh~iFL*=i}{P0f?|_rjz#zSv{z>#z41YGo|Xm{<}7 B=Pvq1N 3;CKAP+6 jL]8vdmi' u-L X._O^hPPKm;7l,3gz,z"yqW:3p]e@UPH7~^e0 1(azKX*MPu^\*1XPJ-zb%Bo;$ZB.@4|MI4=xS[FhvDxw3Eyj_aH:QBUfZx2H:nqrn`TY &d7DN&mKOR+iA9Z0.xno,IL'6vUoiVP1T#o!N3){*wR+2BvW}_{f) \O~i>UwJ"HYQESE"mV1vE5w zAP1]Z@X a {yR" D|G4yH]#GWscsb &NI'nNl_G(8_P5`WcPxOmADJ:9r0smH#uCxi`qV J.iV qWkezwoyA]MmRp2Z9 ?+h#>B?,H$ bAZsvK4vgS;V q;v0Zq(\xc:jgv"ZYt"2g_ 8Kqm9P uK+^Ye&nf) iiY UM*Z)>gQOma%Pd9j+~]9{/9xi|m+> _PX(,q }R80hrVP/5vSO_A>GjR_LCe"ud6 |YQnZk_P_nPa~Nt?FD]u=\MW"(ud gBV"Q>r` iDB/HP' KTzjXQ/U4.I6 B'*=1e0RWeai%E0C7e,4q 3Y%"7_MO&WI_2/D8'$)5jQ$BIN(!m9uOdm8$S;Va%U N1KK!mhKcjF'fdn{Nmi R(;lvM^(oX..rCu}ZFOHX8Y[h%3SeBy"0myi]IX`77|m])%!PFKy@l? ,J\>UxtQ1'n}?Hlz\dyk)tHLP)5 oh}U= T1|ABb*J;KUD^B`YxO3c`TD7$s]h$OsO'%$8KTd ;CPxOx5]sa .!H*N+p.cpXkY}w{>p>ySw3z"&:sqW3oaNu=_p"G/)Y fBi4#8R2aI`f"q}5S'xp2P9Wn-^OH,,_b]0C+pY-XgANSD1kk/yP@F?dSifq@3"$(Go0%m8 x WekaSZ;U=N%'4!Wyf~{CukqnpH#FdD%I^qJXv82\K6 #]g~WAPO D:O-;RjE+?j]BXW11{60ysHVu7MhZ(a";qGRv=) q~2QNo;g")!?_.W:sSN7 *NV'Q"e!7VZSdC+DIza`"Rzw7P cl4a/XGwl^ Y__ke"K.p%(WkB8`z_~]:uG/K^`O6s7H'mY?2\1V7'J|F",j__: 1 E>A#[aA\8/E?:pJ;k[N@V=9hO 2DyU&54k*. (+.:>@{[![R(p[CF ZKre>{ kq5c13; v8~ujy{rO pwd]Yb5po7Oa i?}ORmj (PT,MGKXA.y3/ RJAm6 N+ihz{Wg CB2'9w>+g$ F=y$ _%rb_b?nH *{l>.r*2vQS)_p%)S_b98Z6+&w=QiG%r< 2yG/ &+cRVQd0G+B-a".v98Y `nioFR|%z`oTkkO%;A] @NV whK('AGT~UOv~'AcBG#ZEUQ8]Ax_% R96eksTyqdj$bHGdw?.nH}eg`=D2MevEO3S/Sw%HM?\^gg~B;Bs5DFW9YX,3y O ^]%b.&{W]f.QhAc l +i"P =qmeS8t`Fr(u3V(o+J|E)uJmS svYZ4>eCP eeIa-E kMR@uVB"%w?{ abqx;q 'B[5'B hV"p(L-Z-=b^A| dE+,+Q6Xf)8N$fst4F< 3Ml"<&1Mrf@Z:*0JN@wG?+wU)5KL]Ni=h{i"$9|b "G6fO'75y?zY"SW7ZU8,wM[U"wCx7m]oVWD>~! J8l3jf'4CfrQ)(UH/+Q# ~Pc6f0Z #w}{XB1i(+w!0o5lK"&eNT_f%: 3 M_w=o@e9YaqOS VMS.BCKO[V9.DOCS]IPD236.PS;1\ troke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1669 984(Version)N 1956(9.0)X 2076(of)X 2163(the)X 2290(Icon)X 2461(Programming)X 2962(Language)X 1 f 1458 1224(Ralph)N 1669(E.)X 1758(Griswold,)X 2096(Clinton)X 2355(L.)X 2444(Jeffery,)X 2708(and)X 2844(Gregg)X 3065(M.)X 3176(Townsend)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Introduction)X 1 f 732 2236(The)N 878(current)X 1127(version)X 1384(of)X 1472(Icon)X 1636(is)X 1710(Version)X 1985(9.0.)X 2147(The)X 2294(second)X 2539(edition)X 2783(of)X 2872(the)X 2992(Icon)X 3157(book)X 3339([1])X 3455(describes)X 3776(Version)X 4052(8.0.)X 4214(This)X 612 2332(description)N 988(is)X 1061(a)X 1117(supplement)X 1506(to)X 1588(that)X 1728(book.)X 732 2456(Most)N 918(of)X 1007(the)X 1127(language)X 1439(extensions)X 1799(in)X 1883(Version)X 2160(9.0)X 2283(are)X 2405(upward-compatible)X 3052(with)X 3217(previous)X 3516(versions)X 3806(of)X 3896(Icon)X 4062(and)X 4201(most)X 612 2552(programs)N 935(written)X 1182(for)X 1296(earlier)X 1522(versions)X 1809(work)X 1994(properly)X 2286(under)X 2489(Version)X 2763(9.0.)X 2923(The)X 3068(language)X 3378(additions)X 3691(to)X 3773(Version)X 4047(9.0)X 4167(are:)X 10 f 812 2695(g)N 1 f 932(a)X 988(preprocessor)X 10 f 812 2819(g)N 1 f 932(an)X 1028(optional)X 1310(interface)X 1612(to)X 1694(graphic)X 1955(facilities)X 2251(\(for)X 2392(platforms)X 2719(that)X 285TJ/ VMS.BCKO[V9.DOCS]IPD236.PS;19(support)X 3119(them\))X 10 f 812 2943(g)N 1 f 932(new)X 1086(functions)X 1404(and)X 1540(keywords)X 10 f 812 3067(g)N 1 f 932(several)X 1180(other)X 1365(changes)X 1644(and)X 1780(enhancements)X 732 3191(There)N 940(also)X 1089(are)X 1208(several)X 1456(improvements)X 1934(to)X 2016(the)X 2134(implementation.)X 2676(See)X 2812(Section)X 3072(3.)X 3 f 612 3479(2.)N 712(Language)X 1069(Features)X 612 3671(2.1)N 752(Preprocessing)X 1 f 732 3795(All)N 855(Icon)X 1019(source)X 1250(code)X 1423(passes)X 1650(through)X 1921(a)X 1979(preprocessor)X 2412(before)X 2640(translation.)X 3040(The)X 3187(effects)X 3424(of)X 3513(preprocessing)X 3981(can)X 4115(be)X 4213(seen)X 612 3891(by)N 712(running)X 5 f 983(icont)X 1 f 1171(or)X 5 f 1260(iconc)X 1 f 1466(with)X 1628(the)X 5 f 9 f 1748(-)X 5 f 1792(E)X 1 f 1865(\257ag.)X 732 4015(Preprocessor)N 1170(directives)X 1505(control)X 1755(the)X 1876(actions)X 2126(of)X 2216(the)X 2337(preprocessor)X 2771(and)X 2911(are)X 3034(not)X 3160(passed)X 3398(to)X 3484(the)X 3606(Icon)X 3773(translator)X 4100(or)X 4191(com-)X 612 4111(piler.)N 799(If)X 873(no)X 973(preprocessor)X 1404(directives)X 1736(are)X 1855(present,)X 2127(the)X 2245(source)X 2475(code)X 2647(passes)X 2872(through)X 3141(the)X 3259(preprocessor)X 3690(unaltered.)X 732 4235(A)N 813(source)X 1046(line)X 1189(is)X 1266(a)X 1326(preprocessor)X 1761(directive)X 2066(if)X 2139(its)X 2238(\256rst)X 2386(non-whitespace)X 2914(character)X 3234(is)X 3311(a)X 5 f 3373($)X 1 f 3441(and)X 3581(if)X 3654(that)X 5 f 3800($)X 1 f 3868(is)X 3945(not)X 4071(followed)X 612 4331(by)N 712(another)X 973(punctuation)X 1371(character.)X 1707(The)X 1852(general)X 2109(form)X 2285(of)X 2372(a)X 2428(preprocessor)X 2859(directive)X 3160(is)X 5 f 900 4475($)N 2 f 981(directive)X 1295(arguments)X 5 f 1670(#)X 2 f 1751(comment)X 1 f 612 4619(Whitespace)N 1010(separates)X 1328(tokens)X 1560(when)X 1757(needed,)X 2028(and)X 2167(case)X 2329(is)X 2405(signi\256cant,)X 2781(as)X 2871(in)X 2956(Icon)X 3123(proper.)X 3377(The)X 3526(entire)X 3733(preprocessor)X 4168(direc-)X 612 4715(tive)N 758(must)X 939(appear)X 1180(on)X 1286(a)X 1348(single)X 1565(line)X 1711(which)X 1933(cannot)X 2173(be)X 2274(continued.)X 2635(The)X 2785(comment)X 3108(portion)X 3364(is)X 3442(optional.)X 3749(An)X 3872(invalid)X 4119(prepro-)X 612 4811(cessor)N 833(directive)X 1134(produces)X 1444(an)X 1540(error)X 1717(except)X 1947(when)X 2141(skipped)X 2410(by)X 2510(conditional)X 2890(compilation.)X 732 4935(Preprocessor)N 1171(directives)X 1507(can)X 1643(appear)X 1882(anywhere)X 2219(in)X 2305(an)X 2405(Icon)X 2572(source)X 2806(\256le)X 2933(without)X 3202(regard)X 3433(to)X 3520(procedure,)X 3887(declaration,)X 4289(or)X 612 5031(expression)N 975(boundaries.)X 3 f 612 5223(Include)N 889(Directives)X 1 f 732 5347(An)N 850(include)X 1106(directive)X 1407(has)X 1534(the)X 1652(form)X 5 f 900 5491($include)N 2 f 1233(\256lename)X 1 f 732 5663(An)N 853(include)X 1113(directive)X 1418(causes)X 1652(the)X 1774(contents)X 2065(of)X 2156(another)X 2421(\256le)X 2547(to)X 2633(be)X 2733(interpolated)X 3140(in)X 3226(the)X 3348(source)X 3582(\256le.)X 3728(The)X 3877(\256le)X 4003(name)X 4201(must)X 612 5759(be)N 711(quoted)X 952(if)X 1024(it)X 1091(is)X 1167(not)X 1292(in)X 1377(the)X 1498(form)X 1677(of)X 1766(an)X 1864(Icon)X 2029(identi\256er.)X 5 f 2362(#line)X 1 f 2552(comments)X 2903(are)X 3024(inserted)X 3300(before)X 3528(and)X 3666(after)X 3836(the)X 3956(included)X 4254(\256le)X 612 5855(to)N 694(allow)X 892(proper)X 1122(identi\256cation)X 1564(of)X 1651(errors.)X 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 732 672(Included)N 1035(\256les)X 1190(may)X 1350(be)X 1448(nested)X 1675(to)X 1760(arbitrary)X 2060(depth,)X 2281(but)X 2406(a)X 2465(\256le)X 2590(may)X 2751(not)X 2876(include)X 3135(itself)X 3318(either)X 3524(directly)X 3792(or)X 3882(indirectly.)X 4232(File)X 612 768(names)N 849(are)X 980(looked)X 1230(for)X 1356(\256rst)X 1512(in)X 1606(the)X 1736(current)X 1996(directory)X 2318(and)X 2466(then)X 2636(in)X 2730(the)X 2860(directories)X 3231(listed)X 3436(in)X 3530(the)X 3660(environment)X 4097(variable)X 5 f 612 864(LPATH)N 1 f 869(.)X 932(Relative)X 1222(paths)X 1414(are)X 1536(interpreted)X 1907(in)X 1992(the)X 2113(preprocessor's)X 2605(context)X 2864(and)X 3003(not)X 3128(in)X 3213(relation)X 3481(to)X 3566(the)X 3687(including)X 4012(\256le's)X 4195(loca-)X 612 960(tion.)N 3 f 612 1152(Line)N 787(Directives)X 1 f 732 1276(A)N 810(line)X 950(directive)X 1251(has)X 1378(the)X 1496(form)X 5 f 900 1420($line)N 2 f 1105(n)X 5 f 1182([)X 2 f 1204(\256lename)X 1 f 1476(])X 612 1564(The)N 767(line)X 917(containing)X 1285(the)X 1413(preprocessing)X 1889(directive)X 2200(is)X 2283(considered)X 2661(to)X 2753(be)X 2859(line)X 2 f 3009(n)X 1 f 3079(of)X 3176(the)X 3304(given)X 3512(\256le)X 3644(\(or)X 3768(the)X 3896(current)X 4154(\256le,)X 4307(if)X 612 1660(unspeci\256ed\))N 1026(for)X 1142(diagnostic)X 1493(and)X 1631(other)X 1818(purposes.)X 2145(The)X 2292(line)X 2434(number)X 2701(is)X 2775(a)X 2832(simple)X 3066(unsigned)X 3376(integer.)X 3640(The)X 3786(\256le)X 3909(name)X 4104(must)X 4280(be)X 612 1756(quoted)N 850(if)X 919(it)X 983(is)X 1056(not)X 1178(in)X 1260(the)X 1378(form)X 1554(of)X 1641(an)X 1737(Icon)X 1900(identi\256er.)X 732 1880(Note)N 910(that)X 1052(the)X 1173(interpretation)X 1628(of)X 2 f 1718(n)X 1 f 1781(differs)X 2014(from)X 2193(that)X 2336(of)X 2426(the)X 2547(C)X 2623(preprocessor,)X 3077(which)X 3296(interprets)X 3622(it)X 3689(as)X 3779(the)X 3900(number)X 4168(of)X 4258(the)X 2 f 612 1976(next)N 1 f 766(line.)X 5 f 732 2100($line)N 1 f 925(is)X 1003(an)X 1104(alternative)X 1468(form)X 1649(of)X 1741(the)X 1864(older,)X 2074(special)X 2322(comment)X 2645(form)X 5 f 2829(#line)X 1 f 2997(.)X 3043(The)X 3194(preprocessor)X 3631(recognizes)X 4001(both)X 4169(forms)X 612 2196(and)N 748(produces)X 1058(the)X 1176(fully)X 1347(speci\256ed)X 1652(older)X 1837(form)X 2013(for)X 2127(the)X 2245(lexical)X 2479(analyzer.)X 3 f 612 2388(De\256ne)N 850(Directives)X 1 f 732 2512(A)N 810(de\256ne)X 1026(directive)X 1327(has)X 1454(the)X 1572(form)X 5 f 900 2656($de\256ne)N 2 f 1197(name)X 1404(text)X 1 f 612 2800(The)N 759(de\256ne)X 977(directive)X 1280(de\256nes)X 1529(the)X 1649(text)X 1791(to)X 1875(be)X 1973(substituted)X 2341(for)X 2457(later)X 2622 0.3125(occurrences)AX 3029(of)X 3118(the)X 3238(identi\256er)X 2 f 3549(name)X 1 f 3745(in)X 3830(the)X 3951(source)X 4184(code.)X 2 f 612 2896(text)N 1 f 761(is)X 847(any)X 996(sequence)X 1324(of)X 1424(characters)X 1784(except)X 2027(that)X 2180(any)X 2328(string)X 2542(or)X 2641(cset)X 2798(literals)X 3048(must)X 3235(be)X 3343(properly)X 3647(terminated)X 4022(within)X 4258(the)X 612 2992(de\256nition.)N 958(Leading)X 1241(and)X 1377(trailing)X 1628(whitespace)X 2005(are)X 2124(not)X 2246(part)X 2391(of)X 2478(the)X 2596(de\256nition.)X 2962(The)X 3107(text)X 3247(can)X 3379(be)X 3475(empty.)X 732 3116(Rede\256nition)N 1147(of)X 1234(a)X 1290(name)X 1484(is)X 1557(allowed)X 1831(only)X 1994(if)X 2064(the)X 2183(new)X 2338(text)X 2479(is)X 2553(exactly)X 2806(the)X 2925(same)X 3111(as)X 3199(the)X 3318(old)X 3441(text.)X 3602(For)X 3734(example,)X 5 f 4049(3.0)X 1 f 4180(is)X 4254(not)X 612 3212(the)N 730(same)X 915(as)X 5 f 1004(3.000)X 1 f 1202(.)X 732 3336(Rede\256nition)N 1147(of)X 1234(Icon's)X 1455(reserved)X 1748(words)X 1964(and)X 2100(keywords)X 2432(is)X 2505(allowed)X 2779(but)X 2901(not)X 3023(advised.)X 732 3460(De\256nitions)N 1110(remain)X 1356(in)X 1441(effect)X 1648(through)X 1920(the)X 20U0 VMS.BCKO[V9.DOCS]IPD236.PS;1*41(end)X 2180(of)X 2270(the)X 2391(current)X 2642(original)X 2914(source)X 3147(\256le,)X 3292(crossing)X 5 f 3584(include)X 1 f 3859(boundaries,)X 4254(but)X 612 3556(they)N 770(do)X 870(not)X 992(persist)X 1221(from)X 1397(\256le)X 1519(to)X 1601(\256le)X 1723(when)X 1917(names)X 2142(are)X 2261(given)X 2459(on)X 2559(the)X 2677(command)X 3013(line.)X 732 3680(If)N 813(the)X 938(text)X 1085(of)X 1180(a)X 1244(de\256nition)X 1578(is)X 1659(an)X 1763(expression,)X 2154(it)X 2226(is)X 2307(wise)X 2482(to)X 2572(parenthesize)X 3002(it)X 3074(so)X 3173(that)X 3321 0.3750(precedence)AX 3712(causes)X 3950(no)X 4058(problems)X 612 3776(when)N 811(it)X 880(is)X 958(substituted.)X 1369(If)X 1447(the)X 1569(text)X 1713(begins)X 1946(with)X 2112(a)X 2172(left)X 2303(parenthesis,)X 2708(it)X 2776(must)X 2955(be)X 3055(separated)X 3383(from)X 3563(the)X 3685(name)X 3883(by)X 3987(at)X 4069(least)X 4240(one)X 612 3872(space.)N 851(Note)X 1027(that)X 1167(the)X 1285(Icon)X 1448(preprocessor,)X 1899(unlike)X 2119(the)X 2237(C)X 2310(preprocessor,)X 2761(does)X 2928(not)X 3050(provide)X 3315(parameterized)X 3791(de\256nitions.)X 3 f 612 4064(Unde\256ne)N 938(Directives)X 1 f 732 4188(An)N 850(unde\256ne)X 1146(directive)X 1447(has)X 1574(the)X 1692(form)X 5 f 900 4332($undef)N 2 f 1179(name)X 1 f 612 4476(The)N 762(current)X 1015(de\256nition)X 1346(of)X 2 f 1438(name)X 1 f 1637(is)X 1715(removed,)X 2041(allowing)X 2346(its)X 2446(rede\256nition)X 2840(if)X 2914(desired.)X 3191(It)X 3265(is)X 3344(not)X 3472(an)X 3574(error)X 3757(to)X 3845(unde\256ne)X 4147(a)X 4209(non-)X 612 4572(existent)N 881(name.)X 3 f 612 4764(Prede\256ned)N 1001(Symbols)X 1 f 732 4888(At)N 856(the)X 998(start)X 1180(of)X 1292(each)X 1485(source)X 1740(\256le,)X 1907(several)X 2180(symbols)X 2491(are)X 2635(automatically)X 3116(de\256ned)X 3397(to)X 3504(indicate)X 3803(the)X 3946(Icon)X 4134(system)X 612 4984(con\256guration.)N 1101(Each)X 1304(potential)X 1626(prede\256ned)X 2007(symbol)X 2284(corresponds)X 2714(to)X 2818(one)X 2976(of)X 3085(the)X 3225(values)X 3472(produced)X 3813(by)X 3935(the)X 4075(keyword)X 5 f 612 5080(&features)N 1 f 952(.)X 997(If)X 1076(a)X 1137(feature)X 1386(is)X 1464(present,)X 1741(the)X 1864(symbol)X 2124(is)X 2202(de\256ned)X 2463(with)X 2630(a)X 2691(value)X 2890(of)X 2982(1.)X 3068(If)X 3148(a)X 3210(feature)X 3460(is)X 3539(absent,)X 3790(the)X 3914(symbol)X 4175(is)X 4254(not)X 612 5176(de\256ned.)N 908(See)X 1044(the)X 1162(appendix)X 1476(for)X 1590(a)X 1646(list)X 1763(of)X 1850(prede\256ned)X 2209(symbols.)X 732 5300(Prede\256ned)N 1095(symbols)X 1381(have)X 1553(no)X 1653(special)X 1896(status:)X 2120(like)X 2260(other)X 2445(symbols,)X 2751(they)X 2909(can)X 3041(be)X 3137(unde\256ned)X 3473(and)X 3609(rede\256ned.)X 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Substitution)N 1 f 732 796(As)N 842(input)X 1027(is)X 1101(read,)X 1281(each)X 1450(identi\256er)X 1760(is)X 1834(checked)X 2119(to)X 2202(see)X 2326(if)X 2396(it)X 2461(matches)X 2745(a)X 2802(previous)X 3099(de\256nition.)X 3446(If)X 3521(it)X 3587(does,)X 3776(the)X 3896(value)X 4092(replaces)X 612 892(the)N 730(identi\256er)X 1039(in)X 1121(the)X 1239(input)X 1423(stream.)X 732 1016(No)N 859(whitespace)X 1245(is)X 1327(added)X 1548(or)X 1644(deleted)X 1905(when)X 2108(a)X 2173(de\256nition)X 2509(is)X 2592(inserted.)X 2896(The)X 3051(replacement)X 3474(text)X 3624(is)X 3707(scanned)X 3996(for)X 4120(de\256ned)X 612 1112(identi\256ers,)N 973(possibly)X 1260(causing)X 1526(further)X 1766(substitution,)X 2179(but)X 2302(recognition)X 2688(of)X 2776(the)X 2895(original)X 3165(identi\256er)X 3475(name)X 3670(is)X 3744(disabled)X 4032(to)X 4115(prevent)X 612 1208(in\256nite)N 858(recursion.)X 732 1332 0.3375(Occurrences)AN 1155(of)X 1242(de\256ned)X 1498(names)X 1723(within)X 1947(comments,)X 2316(literals,)X 2574(or)X 2661(preprocessor)X 3092(directives)X 3424(are)X 3543(not)X 3665(altered.)X 732 1456(The)N 880(preprocessor)X 1314(is)X 1390(ignorant)X 1680(of)X 1770(multi-line)X 2108(literals)X 2349(and)X 2488(can)X 2623(potentially)X 2988(be)X 3087(fooled)X 3315(this)X 3453(way)X 3610(into)X 3757(making)X 4021(a)X 4081(substitu-)X 612 1552(tion)N 756(inside)X 967(a)X 1023(string)X 1225(constant.)X 732 1676(The)N 881(preprocessor)X 1316(works)X 1536(hard)X 1703(to)X 1789(get)X 1911(line)X 2055(numbers)X 2355(right,)X 2551(but)X 2678(column)X 2943(numbers)X 3244(are)X 3368(likely)X 3575(to)X 3662(be)X 3763(rendered)X 4070(incorrect)X 612 1772(by)N 712(substitutions.)X 732 1896(Substitution)N 1137(cannot)X 1371(produce)X 1650(a)X 1706(preprocessor)X 2137(directive.)X 2458(By)X 2571(then)X 2729(it)X 2793(is)X 2866(too)X 2988(late.)X 3 f 612 2088(Conditional)N 1035(Compilation)X 1 f 732 2212(Conditional)N 1129(compilation)X 1531(directives)X 1863(have)X 2035(the)X 2153(form)X 5 f 900 2356($ifdef)N 2 f 1131(name)X 1 f 612 2500(and)N 5 f 900 2644($ifndef)N 2 f 1175(name)X 5 f 612 2788($ifdef)N 1 f 828(or)X 5 f 919($ifndef)X 1 f 1179(cause)X 1380(subsequent)X 1758(code)X 1932(to)X 2016(be)X 2114(accepted)X 2418(or)X 2507(skipped)X 2778(depending)X 3134(on)X 3236(whether)X 2 f 3517(name)X 1 f 3713(has)X 3843(been)X 4018(previously)X 612 2884(de\256ned.)N 5 f 925($ifdef)X 1 f 1152(succeeds)X 1471(if)X 1553(a)X 1622(de\256nition)X 1961(exists;)X 5 f 2200($ifndef)X 1 f 2471(succeeds)X 2790(if)X 2872(a)X 2941(de\256nition)X 3280(does)X 2 f 3459(not)X 1 f 3593(exist.)X 3796(The)X 3953(value)X 4159(of)X 4258(the)X 612 2980(de\256nition)N 938(does)X 1105(not)X 1227(matter.)X 732 3104(A)N 810(conditional)X 1190(block)X 1388(has)X 1515(this)X 1650(general)X 1907(form:)X 5 f 900 3248($ifdef)N 2 f 1131(name)X 1 f 1404(or)X 5 f 1570($ifndef)X 2 f 1845(name)X 1 f 999 3344(...)N 1092(code)X 1277(to)X 1372(use)X 1512(if)X 1594(test)X 1738(succeeds)X 2057(...)X 5 f 900 3440($else)N 1 f 999 3536(...)N 1092(code)X 1277(to)X 1372(use)X 1512(if)X 1594(test)X 1738(fails)X 1909(...)X 5 f 900 3632($endif)N 1 f 612 3776(The)N 5 f 763($else)X 1 f 977(section)X 1228(is)X 1305(optional.)X 1611(Conditional)X 2012(blocks)X 2245(can)X 2381(be)X 2481(nested)X 2710(provided)X 3019(that)X 3163(all)X 3268(of)X 3360(the)X 5 f 3485($if)X 1 f 3569(/)X 5 f 3591($else)X 1 f 3781(/)X 5 f 3803($endif)X 1 f 4044(directives)X 612 3872(for)N 733(a)X 796(particular)X 1131(block)X 1336(are)X 1462(in)X 1551(the)X 1675(same)X 1866(source)X 2102(\256le.)X 2250(This)X 2418(does)X 2591(not)X 2719(prevent)X 2986(the)X 3110(conditional)X 3496(inclusion)X 3815(of)X 3908(other)X 4099(\256les)X 4258(via)X 5 f 612 3968($include)N 1 f 928(as)X 1015(long)X 1177(as)X 1264(any)X 1400(included)X 1696(conditional)X 2076(blocks)X 2305(are)X 2424(similarly)X 2728(self-contained.)X 3 f 612 4160(Error)N 833(Directives)X 1 f 732 4284(An)N 850(error)X 1027(directive)X 1328(has)X 1455(the)X 1573(form)X 5 f 900 4428($error)N 2 f 1150(text)X 1 f 612 4572(An)N 5 f 733($error)X 1 f 967(directive)X 1269(forces)X 1487(a)X 1544(fatal)X 1708(compilation)X 2111(error)X 2289(displaying)X 2643(the)X 2762(given)X 2961(text.)X 3122(This)X 3286(is)X 3361(typically)X 3663(used)X 3832(with)X 3996(conditional)X 612 4668(compilation)N 1014(to)X 1096(indicate)X 1370(an)X 1466(improper)X 1780(set)X 1889(of)X 1976(de\256nitions.)X 3 f 612 4860(Subtle)N 849(Points)X 1 f 732 4984(Because)N 1035(substitution)X 1442(occurs)X 1687(on)X 1802(replacement)X 2230(text)X 2385(but)X 2522(not)X 2659(on)X 2774(preprocessor)X 3221(directives,)X 3589(either)X 3808(of)X 3911(the)X 4045(following)X 612 5080(sequences)N 958(is)X 1031(valid:)X 5 f 900 5224($de\256ne)N 1197(x)XV VMS.BCKO[V9.DOCS]IPD236.PS;1`9 1274(1)X 1764($de\256ne)X 2061(y)X 2138(x)X 900 5320($de\256ne)N 1197(y)X 1274(x)X 1764($de\256ne)X 2061(x)X 2138(1)X 900 5416(write\(y\))N 1764(write\(y\))X 1 f 612 5560(It)N 682(is)X 756(possible)X 1039(to)X 1122(construct)X 1437(pathological)X 1855(examples)X 2180(of)X 2269(de\256nitions)X 2628(that)X 2770(combine)X 3068(with)X 3232(the)X 3352(input)X 3538(text)X 3680(to)X 3764(form)X 3942(a)X 4000(single)X 4213(Icon)X 612 5656(token,)N 830(as)X 917(in)X 8 s 612 6144(IPD236a)N 10 s 9 f 2403(-)X 1 f 2464(3)X 9 f 2521(-)X 8 s 1 f 4015(July)X 4135(16,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672($de\256ne)N 1197(X)X 1287(e3)X 1764($de\256ne)X 2061(Y)X 2151(456e)X 900 768(write\(123X\))N 1764(write\(Y+3\))X 3 f 612 1008(2.2)N 752(Graphics)X 1087(Facilities)X 1 f 732 1132(Version)N 1008(9.0)X 1130(provides)X 1428(support)X 1690(for)X 1806(graphics)X 2100(facilities)X 2398(through)X 2669(a)X 2727(combination)X 3149(of)X 3238(high-level)X 3585(support)X 3847(and)X 3985(a)X 4043(repertoire)X 612 1228(of)N 700(functions.)X 1039(Not)X 1179(all)X 1279(platforms)X 1606(support)X 1866(graphics.)X 2 f 2198(Note:)X 1 f 2396(There)X 2604(are)X 2723(numerous)X 3059(changes)X 3338(to)X 3420(the)X 3538(graphics)X 3830(facilities)X 4126(in)X 4208(Ver-)X 612 1324(sion)N 765(9.0.)X 925(Persons)X 1194(who)X 1352(used)X 1519(an)X 1615(earlier)X 1841(version)X 2097(of)X 2184(Icon)X 2347(should)X 2580(consult)X 2831(the)X 2949(current)X 3197 0.4531(reference)AX 3518(manual)X 3774([2].)X 3 f 612 1516(2.3)N 752(New)X 924(Functions)X 1281(and)X 1429(Keywords)X 1 f 732 1640(The)N 881(new)X 1039(functions)X 1361(and)X 1501(keywords)X 1837(are)X 1960(described)X 2292(brie\257y)X 2525(here.)X 2728(At)X 2832(the)X 2955(end)X 3096(of)X 3188(this)X 3328(report)X 3545(there)X 3731(also)X 3885(is)X 3963(a)X 4024(sheet)X 4214(with)X 612 1736(more)N 800(complete)X 1117(descriptions)X 1527(in)X 1612(the)X 1733(style)X 1907(of)X 1997(the)X 2118(second)X 2364(edition)X 2609(of)X 2699(the)X 2820(Icon)X 2986(book.)X 3189(This)X 3354(sheet)X 3542(can)X 3677(be)X 3776(trimmed)X 4070(and)X 4209(used)X 612 1832(as)N 699(an)X 795(insert)X 993(to)X 1075(the)X 1193(book.)X 732 1956(There)N 940(are)X 1059(six)X 1172(new)X 1326(functions:)X 5 f 812 2128(chdir\(s\))N 1 f 1503(Changes)X 1802(the)X 1923(current)X 2174(directory)X 2487(to)X 5 f 2574(s)X 1 f 2637(but)X 2762(fails)X 2923(if)X 2995(there)X 3179(is)X 3255(no)X 3358(such)X 3528(directory)X 3842(or)X 3933(if)X 4006(the)X 4128(change)X 1503 2224(cannot)N 1737(be)X 1833(made.)X 5 f 812 2348(delay\(i\))N 1 f 1503(Delays)X 1747(execution)X 5 f 2082(i)X 1 f 2121(milliseconds.)X 2566(Delaying)X 2881(execution)X 3215(is)X 3290(not)X 3414(supported)X 3752(on)X 3854(all)X 3956(platforms;)X 4307(if)X 1503 2444(it)N 1567(is)X 1640(not,)X 1782(there)X 1963(is)X 2036(no)X 2136(delay)X 2330(and)X 5 f 2468(delay\(\))X 1 f 2732(fails.)X 5 f 812 2568(\257ush\(f\))N 1 f 1503(Flushes)X 1767(the)X 1885(output)X 2109(buffers)X 2357(for)X 2471(\256le)X 5 f 2595(f)X 1 f 2617(.)X 5 f 812 2692(function\(\))N 1 f 1503(Generates)X 1845(the)X 1963(names)X 2188(of)X 2275(the)X 2393(Icon)X 2556(\(built-in\))X 2865(functions.)X 5 f 812 2816(loadfunc\(s1,)N 1267(s2\))X 1 f 1503(Dynamically)X 1940(loads)X 2133(a)X 2193(C)X 2270(function.)X 2581(This)X 2747(function)X 3038(presently)X 3356(is)X 3433(supported)X 3773(on)X 3877(Suns)X 4056(and)X 4196(DEC)X 1503 2912(Alpha)N 1719(systems)X 1992(running)X 2261(UNIX.)X 2502(See)X 2638([3])X 2752(for)X 2866(details.)X 5 f 812 3036(sortf\(X,)N 1091(i\))X 1 f 1503(Produces)X 1819(a)X 1877(sorted)X 2095(list)X 2214(of)X 2303(the)X 2423(elements)X 2730(of)X 5 f 2821(X)X 1 f 2874(.)X 2916(The)X 3063(results)X 3295(are)X 3417(similar)X 3662(to)X 3747(those)X 3939(of)X 5 f 4031(sort\(X,)X 4291(i\))X 1 f 4336(,)X 1503 3132(except)N 1741(that)X 1889(among)X 2135(lists)X 2291(and)X 2435(among)X 2681(records,)X 2966(structure)X 3275(values)X 3507(are)X 3633(ordered)X 3906(by)X 4013(comparing)X 1503 3228(their)N 5 f 1672(i)X 1 f 1690(th)X 1772(\256elds.)X 732 3352(There)N 940(are)X 1059(six)X 1172(new)X 1326(keywords:)X 5 f 812 3524(&allocated)N 1 f 1503(Generates)X 1848(the)X 1969(number)X 2237(of)X 2327(bytes)X 2519(allocated)X 2833(since)X 3022(the)X 3144(beginning)X 3488(of)X 3579(program)X 3875(execution.)X 4231(The)X 1503 3620(\256rst)N 1649(result)X 1849(is)X 1924(the)X 2044(total)X 2208(number)X 2475(of)X 2564(bytes)X 2755(in)X 2839(all)X 2941(regions,)X 3219(followed)X 3526(by)X 3628(the)X 3748(number)X 4015(of)X 4104(bytes)X 4294(in)X 1503 3716(the)N 1621(static,)X 1830(string,)X 2052(and)X 2188(block)X 2386(regions.)X 5 f 812 3840(&dump)N 1 f 1503(If)X 1595(the)X 1731(value)X 1943(of)X 5 f 2050(&dump)X 1 f 2340(is)X 2431(nonzero)X 2729(at)X 2826(program)X 3137(termination,)X 3565(a)X 3640(dump)X 3861(in)X 3962(the)X 4099(style)X 4289(of)X 5 f 1503 3936(display\(\))N 1 f 1825(is)X 1898(provided.)X 5 f 812 4060(&e)N 1 f 1503(The)X 1648(base)X 1811(of)X 1898(the)X 2016(natural)X 2259(logarithms,)X 2641(2.71828)X 2921(...)X 5 f 812 4184(&phi)N 1 f 1503(The)X 1648(golden)X 1886(ratio,)X 2073(1.61803)X 2353(...)X 5 f 812 4308(&pi)N 1 f 1503(The)X 1648(ratio)X 1815(of)X 1902(the)X 2020 0.3021(circumference)AX 2501(of)X 2588(a)X 2644(circle)X 2843(to)X 2925(its)X 3020(diameter,)X 3341(3.14159)X 3621(...)X 5 f 812 4432(&progname)N 1 f 1503(The)X 1648(\256le)X 1770(name)X 1964(of)X 2051(the)X 2169(executing)X 2501(program.)X 5 f 2815(&progname)X 1 f 3246(is)X 3319(a)X 3375(variable)X 3654(and)X 3790(a)X 3846(string)X 4049(value)X 4244(can)X 1503 4528(be)N 1599(assigned)X 1895(to)X 1977(it)X 2041(to)X 2123(replace)X 2376(its)X 2471(initial)X 2677(value.)X 612 4700(The)N 757(graphics)X 1049(facilities)X 1345(add)X 1481(additional)X 1821(new)X 1975(keywords)X 2307([2].)X 732 4824(Some)N 934(UNIX)X 1155(platforms)X 1482(now)X 1640(support)X 1900(the)X 2018(keyboard)X 2337(functions)X 5 f 2657(getch\(\))X 1 f 2905(,)X 5 f 2947(getche\(\))X 1 f 3239(,)X 3280(and)X 5 f 3419(kbhit\(\))X 1 f 3641(.)X 3682(Whether)X 3980(or)X 4068(not)X 4191(these)X 612 4920(functions)N 940(are)X 1069(supported)X 1415(can)X 1557(be)X 1663(determined)X 2054(from)X 2240(the)X 2368(values)X 2603(generated)X 2945(by)X 5 f 3056(&features)X 1 f 3396(.)X 2 f 3465(Note:)X 1 f 3672(On)X 3799(UNIX)X 4029(platforms,)X 612 5016(``keyboard'')N 1040(input)X 1225(comes)X 1451(from)X 1628(standard)X 1921(input,)X 2126(which)X 2343(may)X 2502(not)X 2625(necessarily)X 3003(be)X 3100(the)X 3220(keyboard.)X 2 f 3581(Warning:)X 1 f 3910(The)X 4057(keyboard)X 612 5112(functions)N 934(under)X 1141(UNIX)X 1366(may)X 1528(not)X 1654(work)X 1843(reliably)X 2111(in)X 2196(all)X 2299(situations)X 2628(and)X 2767(may)X 2928(leave)X 3121(the)X 3242(console)X 3510(in)X 3595(a)X 3654(strange)X 3909(mode)X 4110(if)X 4182(inter-)X 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 612 672(rupted)N 837(at)X 915(an)X 1011(unfortunate)X 1401(time.)X 1583(These)X 1795(potential)X 2095(problems)X 2413(should)X 2646(be)X 2742(kept)X 2900(in)X 2982(mind)X 3166(when)X 3360(using)X 3553(these)X 3738(functions.)X 3 f 612 864(2.4)N 752(Other)X 977(Language)X 1334(Enhancements)X 612 1056(Lists)N 1 f 732 1180(The)N 879(functions)X 5 f 1201(push\(\))X 1 f 1449(and)X 5 f 1589(put\(\))X 1 f 1775(now)X 1935(can)X 2069(be)X 2167(called)X 2381(with)X 2546(multiple)X 2835(arguments)X 3192(to)X 3277(add)X 3416(several)X 3667(values)X 3895(to)X 3980(a)X 4039(list)X 4159(at)X 4240(one)X 612 1276(time.)N 794(For)X 925(example,)X 5 f 900 1420(put\(L,)N 1140(x1,)X 1283(x2,)X 1426(x3\))X 1 f 612W VMS.BCKO[V9.DOCS]IPD236.PS;1.H 1564(appends)N 902(the)X 1027(values)X 1259(of)X 5 f 1355(x1)X 1 f 1439(,)X 5 f 1488(x2)X 1 f 1572(,)X 1619(and)X 5 f 1764(x3)X 1 f 1875(to)X 5 f 1966(L)X 1 f 2010(.)X 2057(In)X 2152(the)X 2278(case)X 2445(of)X 5 f 2542(push\(\))X 1 f 2768(,)X 2816(values)X 3049(are)X 3176(prepended)X 3539(in)X 3629(order)X 3827(that)X 3975(they)X 4141(appear)X 612 1660(from)N 788(left)X 915(to)X 997(right.)X 1188(Consequently,)X 1668(as)X 1755(a)X 1811(result)X 2009(of)X 5 f 900 1804(push\(L,)N 1202(x1,)X 1345(x2,)X 1488(x3\))X 1 f 612 1948(the)N 730(\256rst)X 874(\(leftmost\))X 1210(item)X 1372(on)X 5 f 1474(L)X 1 f 1538(is)X 1611(the)X 1729(value)X 1923(of)X 5 f 2012(x3)X 1 f 2096(.)X 3 f 612 2140(Records)N 1 f 732 2264(Records)N 1015(can)X 1147(now)X 1305(be)X 1401(sorted)X 1617(by)X 5 f 1719(sort\(\))X 1 f 1926(and)X 5 f 2064(sortf\(\))X 1 f 2293(to)X 2375(produce)X 2654(sorted)X 2870(lists)X 3018(of)X 3105(the)X 3223(record)X 3449(\256elds.)X 732 2388(A)N 810(record)X 1036(can)X 1168(now)X 1326(be)X 1422(subscripted)X 1807(by)X 1907(the)X 2025(string)X 2227(name)X 2421(of)X 2508(one)X 2644(of)X 2731(its)X 2826(\256elds,)X 3039(as)X 3126(in)X 5 f 900 2532(z["r"])N 1 f 612 2676(which)N 828(is)X 901(equivalent)X 1255(to)X 5 f 900 2820(z.r)N 1 f 612 2964(If)N 686(the)X 804(named)X 1038(\256eld)X 1200(does)X 1367(not)X 1489(exist)X 1660(for)X 1774(the)X 1892(record,)X 2138(the)X 2256(subscripting)X 2667(expression)X 3030(fails.)X 732 3088(Records)N 1015(can)X 1147(now)X 1305(be)X 1401(used)X 1568(to)X 1650(supply)X 1883(arguments)X 2237(in)X 2319(procedure)X 2661(invocation,)X 3039(as)X 3126(in)X 5 f 900 3232(p)N 981(!)X 1040(R)X 1 f 612 3376(which)N 828(invokes)X 5 f 1099(p)X 1 f 1163(with)X 1325(arguments)X 1679(from)X 1855(the)X 1973(\256elds)X 2166(of)X 5 f 2255(R)X 1 f 2313(.)X 3 f 612 3568(Multiple)N 925(Subscripts)X 1 f 732 3692(Multiple)N 1027(subscripts)X 1367(are)X 1486(now)X 1644(allowed)X 1918(in)X 2000(subscripting)X 2411(expressions.)X 2825(For)X 2956(example,)X 5 f 900 3836(X[i,)N 1052(j,)X 1129(k])X 1 f 612 3980(is)N 685(equivalent)X 1039(to)X 5 f 900 4124(X[)N 981(i)X 1005(][)X 1055(j)X 1079(][)X 1129(k)X 1175(])X 612 4268(X)N 1 f 685(can)X 817(be)X 913(a)X 969(string,)X 1191(list,)X 1328(table,)X 1524(or)X 1611(record.)X 3 f 612 4460(Integers)N 1 f 732 4584(The)N 877(sign)X 1030(of)X 1117(an)X 1213(integer)X 1456(is)X 1529(now)X 1687(preserved)X 2020(when)X 2214(it)X 2278(is)X 2351(shifted)X 2589(right)X 2760(with)X 5 f 2924(ishift\(\))X 1 f 3142(.)X 732 4708(The)N 882(form)X 1063(of)X 1155(approximation)X 1647(for)X 1766(large)X 1952(integers)X 2231(that)X 2376(appear)X 2616(in)X 2703(diagnostic)X 3057(messages)X 3385(now)X 3548(indicates)X 3858(a)X 3919(power)X 4145(of)X 4238(ten,)X 612 4804(as)N 699(in)X 5 f 783(10\30357)X 1 f 986(.)X 1046(The)X 1191(approximation)X 1678(is)X 1751(now)X 1909(accurate)X 2198(to)X 2280(the)X 2398(nearest)X 2646(power)X 2867(of)X 2954(10.)X 3 f 612 4996(Named)N 877(Functions)X 1 f 732 5120(The)N 879(function)X 5 f 1170(proc\(x,)X 1439(i\))X 1 f 1507(has)X 1637(been)X 1812(extended)X 2125(so)X 2219(that)X 5 f 2364(proc\(x,)X 2633(0\))X 1 f 2727(produces)X 3040(the)X 3161(built-in)X 3419(function)X 3709(named)X 5 f 3948(x)X 1 f 4011(even)X 4186(if)X 4258(the)X 612 5216(global)N 837(identi\256er)X 1151(having)X 1394(that)X 1539(name)X 1738(has)X 1870(been)X 2047(assigned)X 2348(another)X 2614(value.)X 5 f 2835(proc\(x,)X 3106(0\))X 1 f 3202(fails)X 3365(if)X 5 f 3441(x)X 1 f 3506(is)X 3584(not)X 3711(the)X 3834(name)X 4033(of)X 4125(a)X 4186(func-)X 612 5312(tion.)N 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(2.5)N 752(Other)X 977(Changes)X 1 f 10 f 812 796(g)N 1 f 932(The)X 1077(ability)X 1301(to)X 1383(con\256gure)X 1706(Icon)X 1869(so)X 1960(that)X 2100(Icon)X 2263(procedures)X 2636(can)X 2768(be)X 2864(called)X 3076(from)X 3252(a)X 3308(C)X 3381(program)X 3673(has)X 3800(been)X 3972(eliminated.)X 10 f 812 920(g)N 1 f 932(Memory)X 1228(monitoring)X 1603(and)X 1739(the)X 1857(functions)X 2175(associated)X 2525(with)X 2687(it)X 2751(no)X 2851(longer)X 3076(are)X 3195(supported.)X 10 f 812 1044(g)N 1 f 932(The)X 5 f 1079(dynamic)X 1 f 1396(declaration,)X 1793(a)X 1849(synonym)X 2162(for)X 5 f 2278(local)X 1 f 2442(,)X 2482(is)X 2555(no)X 2655(longer)X 2880(supported.)X 10 f 812 1168(g)N 1 f 932(Real)X 1103(literals)X 1345(that)X 1489(are)X 1612(less)X 1756(than)X 1918(1)X 1982(no)X 2086(longer)X 2315(need)X 2491(a)X 2551(leading)X 2811(zero.)X 2994(For)X 3129(example,)X 5 f 3447(.5)X 1 f 3537(now)X 3699(is)X 3777(a)X 3838(valid)X 4023(real)X 4169(literal)X 932 1264(instead)N 1179(of)X 1266(being)X 1464(the)X 1582 0.2812(dereferencing)AX 2045(operator)X 2333(applied)X 2589(to)X 2671(the)X 2789(integer)X 3032(5.)X 10 f 812 1388(g)N 1 f 932(A)X 1014 0.4531(reference)AX 1339(to)X 1425(an)X 1525(unknown)X 1847(record)X 2077(\256eld)X 2243(now)X 2405(produces)X 2719(a)X 2779(linker)X 2990(warning)X 3277(message)X 3574(rather)X 3787(than)X 3950(a)X 4011(fatal)X 4179(error.)X 932 1484(A)N 1010 0.4531(reference)AX 1331(to)X 1413(an)X 1509(unknown)X 1827(\256eld)X 1989(at)X 2067(run-time)X 2363(now)X 2521(causes)X 2751(error)X 2928(termination.)X 10 f 812 1608(g)N 1 f 932(The)X 1077(identi\256ers)X 1417(listed)X 1610(by)X 5 f 1712(display\(\))X 1 f 2034(are)X 2153(now)X 2311(given)X 2509(in)X 2591(sorted)X 2807(order.)X 10 f 812 1732(g)N 1 f 932(In)X 1019(sorting)X 1261(structures,)X 1613(records)X 1870(now)X 2028(are)X 2147(\256rst)X 2291(sorted)X 2507(by)X 2607(record)X 2833(name)X 3027(and)X 3163(then)X 3321(by)X 3421(age)X 3553(\(serial)X 3774(number\).)X 10 f 812 1856(g)N 1 f 932(Some)X 1140(of)X 1234(the)X 1359(values)X 1591(generated)X 1931(by)X 5 f 2040(&features)X 1 f 2407(have)X 2586(been)X 2765(changed,)X 3080(and)X 3223(some)X 3419(former)X 3665(values)X 3897(corresponding)X 932 1952(the)N 1050(features)X 1325(that)X 1465(are)X 1584(present)X 1836(in)X 1918(all)X 2018(implementations)X 2571(of)X 2658(Icon)X 2821(have)X 2993(been)X 3165(deleted.)X 3437(See)X 3573(the)X 3691(appendix.)X 10 f 812 2076(g)N 1 f 932(The)X 1088(text)X 1239(of)X 1337(some)X 1537(run-time)X 1844(error)X 2032(messages)X 2366(has)X 2504(been)X 2688(changed)X 2988(and)X 3136(a)X 3204(few)X 3357(new)X 3523(error)X 3712(numbers)X 4020(have)X 4204(been)X 932 2172(added.)N 1164(A)X 1242(complete)X 1556(list)X 1673(is)X 1746(available)X 2056(on)X 2156(request.)X 3 f 612 2460(3.)N 712(Implementation)X 1279(Changes)X 612 2652(Linker)N 867(Changes)X 1 f 732 2776(By)N 848(default,)X 1114 0.3295(unreferenced)AX 1558(globals)X 1812(\(including)X 2164(procedures)X 2540(and)X 2679(record)X 2908(constructors\))X 3350(are)X 3472(now)X 3634(omitted)X 3902(from)X 4082(the)X 4204(code)X 612 2872(generated)N 950(by)X 5 f 1057(icont)X 1 f 1225(.)X 1289(This)X 1455(may)X 1617(substantially)X 2045(reduce)X 2284(the)X 2406(size)X 2555(of)X 2646(icode)X 2844(\256les,)X 3021(especially)X 3366(when)X 3564(a)X 3624(package)X 3912(of)X 4003(procedures)X 612 2968(is)N 685(linked)X 905(but)X 1027(not)X 1149(all)X 1249(the)X 1367(procedures)X 1740(are)X 1859(used.)X 732 3092(The)N 5 f 886(invocable)X 1 f 1249(declaration)X 1633(and)X 1776(the)X 1901(command-line)X 2391(options)X 5 f 9 f 2655(-)X 5 f 2699(f)X 2750(s)X 1 f 2817(and)X 5 f 9 f 2962(-)X 5 f 3006(v)X 2 f 3073(n)X 1 f 3140(are)X 3266(now)X 3431(honored)X 3722(by)X 5 f 3832(icont)X 1 f 4028(as)X 4123(well)X 4289(as)X 5 f 612 3188(iconc)N 1 f 824([4].)X 984(The)X 5 f 1137(invocable)X 1 f 1498(declaration)X 1880(can)X 2017(be)X 2118(used)X 2290(to)X 2377(prevent)X 2643(the)X 2766(removXka VMS.BCKO[V9.DOCS]IPD236.PS;1yWal)X 3054(of)X 3146(speci\256c)X 3416 0.3295(unreferenced)AX 3862(procedures)X 4240(and)X 612 3284(record)N 842(constructors)X 1258(that)X 1402(are)X 1525(invoked)X 1807(by)X 1911(string)X 2117(invocation.)X 2499(The)X 5 f 9 f 2650(-)X 5 f 2694(f)X 2742(s)X 1 f 2806(option)X 3034(prevents)X 3330(the)X 3452(removal)X 3739(of)X 3830(all)X 3935 0.3295(unreferenced)AX 612 3380(declarations)N 1020(and)X 1156(is)X 1229(equivalent)X 1583(to)X 5 f 1667(invocable)X 2025(all)X 1 f (.)S 732 3504(The)N 877(command)X 1213(line)X 1353(option)X 5 f 9 f 1579(-)X 5 f 1623(v)X 2 f 1683(n)X 1 f 1743(to)X 5 f 1827(icont)X 1 f 2015(controls)X 2293(the)X 2411(verbosity)X 2729(of)X 2816(its)X 2911(output:)X 5 f 9 f 900 3696(-)N 5 f 944(v)X 1006(0)X 1 f 1070(is)X 1143(the)X 1261(same)X 1446(as)X 5 f 1533(icont)X 9 f 1723(-)X 5 f 1767(s)X 9 f 900 3792(-)N 5 f 944(v)X 1006(1)X 1 f 1070(is)X 1143(the)X 1261(default)X 5 f 9 f 900 3888(-)N 5 f 944(v)X 1006(2)X 1 f 1070(reports)X 1313(the)X 1431(sizes)X 1607(of)X 1694(the)X 1812(icode)X 2006(sections)X 2284(\(procedures,)X 2704(strings,)X 2957(and)X 3093(so)X 3184(forth\))X 5 f 9 f 900 3984(-)N 5 f 944(v)X 1006(3)X 1 f 1070(also)X 1219(lists)X 1367(discarded)X 1695(globals)X 2 f 732 4108(Note:)N 1 f 937(Programs)X 1271(that)X 1418(use)X 1552(string)X 1761(invocation)X 2126(may)X 2291(malfunction)X 2705(if)X 2781(the)X 2906(default)X 3156(removal)X 3446(of)X 3540(declarations)X 3955(is)X 4036(used.)X 4231(The)X 612 4204(safest)N 815(and)X 951(easiest)X 1185(approach)X 1500(is)X 1573(to)X 1655(add)X 5 f 900 4348(invocable)N 1273(all)X 1 f 612 4492(to)N 694(such)X 861(programs.)X 3 f 612 4684(Other)N 837(Changes)X 1 f 10 f 812 4808(g)N 1 f 932(The)X 1080(tables)X 1290(used)X 1460(by)X 5 f 1565(icont)X 1 f 1756(now)X 1917(expand)X 2172(automatically.)X 2671(The)X 5 f 9 f 2821(-)X 5 f 2865(S)X 1 f 2941(option)X 3168(is)X 3244(no)X 3347(longer)X 3575(needed.)X 3846(As)X 3959(a)X 4019(side)X 4172(effect)X 932 4904(of)N 1019(this)X 1154(change,)X 1422(the)X 1540(sizes)X 1716(of)X 1803(procedures)X 2176(are)X 2295(no)X 2395(longer)X 2620(listed)X 2813(during)X 3042(translation.)X 10 f 812 5028(g)N 1 f 932(Most)X 1131(implementations)X 1699(of)X 1801(Icon)X 1979(now)X 2152(use)X 2295(\256xed-sized)X 2683(storage)X 2951(regions.)X 3263(Multiple)X 3574(regions)X 3846(are)X 3981(allocated)X 4307(if)X 932 5124(needed.)N 10 f 812 5248(g)N 1 f 932(Under)X 1158(UNIX,)X 1404(shell)X 1580(headers)X 1851(are)X 1975(now)X 2139(produced)X 2464(instead)X 2717(of)X 2810(bootstrapping)X 3276(code)X 3454(in)X 3542(icode)X 3742(\256les.)X 3921(This)X 4089(substan-)X 932 5344(tially)N 1116(reduces)X 1382(the)X 1500(size)X 1645(of)X 1732(icode)X 1926(\256les)X 2079(on)X 2179(some)X 2368(platforms.)X 10 f 812 5468(g)N 1 f 932(Under)X 1162(MS-DOS,)X 5 f 1516(iconx)X 1 f 1732(now)X 1900(\256nds)X 2085(icode)X 2289(\256les)X 2452(at)X 2540(any)X 2686(place)X 2886(on)X 2996(the)X 5 f 3126(PATH)X 1 f 3369(speci\256cation)X 3804(as)X 3901(well)X 4069(as)X 4166(in)X 4258(the)X 932 5564(current)N 1180(directory.)X 1530(The)X 1675(MS-DOS)X 1997(translator)X 2320(now)X 2478(is)X 2551(also)X 2700(capable)X 2966(of)X 3053(producing)X 5 f 3400(.exe)X 1 f 3570(\256les.)X 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(6)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(4.)N 712(Limitations,)X 1147(Bugs,)X 1355(and)X 1503(Problems)X 1 f 10 f 812 824(g)N 1 f 972(Line)X 1158(numbers)X 1473(sometimes)X 1854(are)X 1992(wrong)X 2236(in)X 2337(diagnostic)X 2705(messages)X 3048(related)X 3307(to)X 3409(lines)X 3600(with)X 3782(continued)X 4138(quoted)X 972 920(literals.)N 10 f 812 1044(g)N 1 f 972(Large-integer)X 1435(arithmetic)X 1785(is)X 1863(not)X 1990(supported)X 2331(in)X 5 f 2420(i)X 2465(to)X 2558(j)X 1 f 2601(and)X 5 f 2744(seq\(\))X 1 f 2926(.)X 2991(Large)X 3204(integers)X 3483(cannot)X 3722(be)X 3823(assigned)X 4125(to)X 4213(key-)X 972 1140(words.)N 10 f 812 1264(g)N 1 f 972(Large-integer)X 1434(literals)X 1676(are)X 1799(constructed)X 2193(at)X 2275(run-time.)X 2595(Consequently,)X 3079(they)X 3241(should)X 3478(not)X 3604(be)X 3704(used)X 3875(in)X 3961(loops)X 4159(where)X 972 1360(they)N 1130(would)X 1350(be)X 1446(constructed)X 1836(repeatedly.)X 10 f 812 1484(g)N 1 f 972(Conversion)X 1368(of)X 1462(a)X 1525(large)X 1713(integer)X 1963(to)X 2052(a)X 2115(string)X 2324(is)X 2404(quadratic)X 2730(in)X 2819(the)X 2944(length)X 3171(of)X 3265(the)X 3390(integer.)X 3660(Conversion)X 4056(of)X 4150(very)X 4320(a)X 972 1580(large)N 1153(integer)X 1396(to)X 1478(a)X 1534(string)X 1736(may)X 1894(take)X 2048(a)X 2104(very)X 2267(long)X 2429(time)X 2591(and)X 2727(give)X 2885(the)X 3003 0.3750(appearance)AX 3386(of)X 3473(an)X 3569(endless)X 3825(loop.)X 10 f 812 1704(g)N 1 f 972(Right)X 1169(shifting)X 1433(of)X 1520(large)X 1701(negative)X 1993(integers)X 2267(by)X 5 f 2369(ishift\(\))X 1 f 2607(is)X 2680(inconsistent)X 3082(with)X 3244(the)X 3362(shifting)X 3626(of)X 3713(ordinary)X 4005(integers.)X 10 f 812 1828(g)N 1 f 972(Integer)X 1231(over\257ow)X 1547(on)X 1658(exponentiation)X 2165(may)X 2334(not)X 2467(be)X 2574(detected)X 2873(during)X 3114(execution.)X 3498(Such)X 3690(over\257ow)X 4007(may)X 4177(occur)X 972 1924(during)N 1201(type)X 1359(conversion.)X 10 f 812 2048(g)N 1 f 972(In)X 1059(some)X 1248(cases,)X 1458(trace)X 1635(messages)X 1958(may)X 2116(show)X 2305(the)X 2423(return)X 2635(of)X 2722(subscripted)X 3107(values,)X 3352(such)X 3519(as)X 5 f 3608(&null)X 3791([2])X 1 f 3879(,)X 3919(that)X 4059(would)X 4280(be)X 972 2144(erroneous)N 1309(if)X 1378(they)X 1536(were)X 1713 0.3438(dereferenced.)AX 10 f 812 2268(g)N 1 f 972(If)X 1047(a)X 1104(long)X 1267(\256le)X 1390(name)X 1585(for)X 1700(an)X 1797(Icon)X 1961(source-language)X 2509(program)X 2802(is)X 2876(truncated)X 3196(by)X 3297(the)X 3416(operating)X 3741(system,)X 4005(mysterious)X 972 2364(diagnostic)N 1321(messages)X 1644(may)X 1802(occur)X 2001(during)X 2230(linking.)X 10 f 812 2488(g)N 1 f 972(Stack)X 1170(over\257ow)X 1475(checking)X 1785(uses)X 1943(a)X 1999(heuristic)X 2295(that)X 2435(is)X 2508(not)X 2630(always)X 2873(effective.)X 10 f 812 2612(g)N 1 f 972(If)X 1046(an)X 1142(expression)X 1505(such)X 1672(as)X 5 f 1260 2756(x)N 1337(:=)X 1443(create)X 2 f 1701(expr)X 1 f 972 2900(is)N 1052(used)X 1226(in)X 1315(a)X 1378(loop,)X 1567(and)X 5 f 1712(x)X 1 f 1779(is)X 1859(not)X 1988(a)X 2051(global)X 2278(variable,)X 2584 0.3125(unreferenceable)AX 3127(co-expressions)X 3632(are)X 3759(generated)X 4100(by)X 4208(each)X 972 2996(successive)N 5 f 1339(create)X 1 f 1586(operation.)X 1955(These)X 2173(co-expressions)X 2676(are)X 2801(not)X 2929(garbage)X 3210(collected.)X 3546(This)X 3714(problem)X 4006(can)X 4143(be)X 4244(cir-)X 972 3092(cumvented)N 1344(by)X 1444(making)X 5 f 1706(x)X 1 f 1766(a)X 1822(global)X 2042(variable)X 2321(or)X 2408(by)X 2508(assigning)X 2830(a)X 2886(value)X 3080(to)X 5 f 3164(x)X 1 f 3224(before)X 3450(the)X 5 f 3570(create)X 1 f 3811(operation,)X 4154(as)X 4241(in)X 5 f 1260 3236(x)N 1337(:=)X 1443(&null)X 1260 3332(x)N 1337(:=)X 1443(create)X 2 f 1701(expr)X 1 f 10 f 812 3504(g)N 1 f 972(Stack)X 1170(over\257ow)X 1475(in)X 1557(a)X 1613(co-expression)X 2079(may)X 2237(not)X 2359(be)X 2455(detected)X 2743(and)X 2879(may)X 3037(cause)X 3236(mysterious)X 3607(program)X 3899(malfunction.)X 3 f 612 3696(Acknowledgements)N 1 f 732 3820(The)N 884(design)X 1120(and)X 1263(implementation)X 1792(of)X 1886(Version)X 2168(9.0)X 2296(of)X 2391(Icon)X 2562(was)X 2715(supported)X 3059(in)X 3149(part)X 3302(by)X 3410(National)X 3714(Science)X 3992(Foundation)X 612 3916(Grant)N 815(CCR-8901573.)X 3 Y#6 VMS.BCKO[V9.DOCS]IPD236.PS;1ff 612 4108(References)N 1 f 612 4260(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 4356(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 612 4480(2.)N 812(C.)X 906(L.)X 996(Jeffery,)X 1261(G.)X 1361(M.)X 1474(Townsend)X 1830(and)X 1968(R.)X 2063(E.)X 2154(Griswold,)X 2 f 2494(Graphics)X 2814(Facilities)X 3138(for)X 3253(the)X 3373(Icon)X 3538(Programming)X 4009(Language;)X 812 4576(Version)N 1081(9.0)X 1 f (,)S 1221(The)X 1366(Univ.)X 1566(of)X 1653(Arizona)X 1932(Icon)X 2095(Project)X 2342(Document)X 2696(IPD255,)X 2985(1994.)X 612 4700(3.)N 812(R.)X 912(E.)X 1008(Griswold)X 1333(and)X 1476(G.)X 1581(M.)X 1699(Townsend,)X 2 f 2080(Calling)X 2347(C)X 2428(Functions)X 2776(from)X 2955(Version)X 3232(9.0)X 3360(of)X 3450(Icon)X 1 f 3593(,)X 3641(The)X 3794(Univ.)X 4002(of)X 4097(Arizona)X 812 4796(Icon)N 975(Project)X 1222(Document)X 1576(IPD240,)X 1865(1994.)X 612 4920(4.)N 812(R.)X 916(E.)X 1016(Griswold,)X 2 f 1365(Version)X 1645(9.0)X 1776(of)X 1869(the)X 1999(Icon)X 2174(Compiler)X 1 f 2476(,)X 2528(The)X 2685(Univ.)X 2897(of)X 2996(Arizona)X 3287(Icon)X 3462(Project)X 3721(Document)X 4087(IPD237,)X 812 5016(1994.)N 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(7)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 3 f 2019 672(Appendix)N 2371(\320)X 2471(Prede\256ned)X 2860(Symbols)X 1 f 1100 1008(prede\256ned)N 1472(symbol)X 5 f 2828(&features)X 1 f 3201(value)X 5 f 1100 1152(_AMIGA)N 2828(Amiga)X 1100 1248(_ACORN)N 2828(Acorn)X 3073(Archimedes)X 1100 1344(_ATARI)N 2828(Atari)X 3029(ST)X 1100 1440(_CMS)N 2828(CMS)X 1100 1536(_MACINTOSH)N 2828(Macintosh)X 1100 1632(_MSDOS_386)N 2828(MS)X 9 f (-)S 5 f 2992(DOS/386)X 1100 1728(_MSDOS)N 2828(MS)X 9 f (-)S 5 f 2992(DOS)X 1100 1824(_MVS)N 2828(MVS)X 1100 1920(_OS2)N 2828(OS/2)X 1100 2016(_PORT)N 2828(PORT)X 1100 2112(_UNIX)N 2828(UNIX)X 1100 2208(_VMS)N 2828(VMS)X 1100 2362(_COMPILED)N 2828(compiled)X 1100 2458(_INTERPRETED)N 2828(interpreted)X 1100 2554(_ASCII)N 2828(ASCII)X 1100 2650(_EBCDIC)N 2828(EBCDIC)X 1100 2804 -0.2569(_EXPANDABLE_REGIONS)AN 2828 -0.4167(expandable)AX 3275(regions)X 1100 2900(_FIXED_REGIONS)N 2828(\256xed)X 3033(regions)X 1100 3054 -0.2589(_CO_EXPRESSIONS)AN 2828(co)X 9 f 2912(-)X 5 f 2956(expressions)X 1100 3150(_DIRECT_EXECUTION)N 2828(direct)X 3060(execution)X 1100 3246(_DYNAMIC_LOADING)N 2828(dynamic)X 3162(loading)X 1100 3342(_EVENT_MONITOR)N 2828(event)X 3059(monitoring)X 1100 3438 -0.2574(_EXECUTABLE_IMAGES)AN 2828(executable)X 3249(images)X 1100 3534(_EXTERNAL_FUNCTIONS)N 2828(external)X 3148(functions)X 1100 3630(_GRAPHICS)N 2828(graphics)X 1100 3726(_KEYBOARD_FUNCTIONS)N 2828(keyboard)X 3192(functions)X 1100 3822 -0.2321(_LARGE_INTEGERS)AN 2828(large)X 3042(integers)X 1100 3918(_MEMORY_MONITOR)N 2828(memory)X 3154(monitoring)X 1100 4014(_MULTITASKING)N 2828(multiple)X 3140(programs)X 1100 4110(_MULTIREGION)N 2828(multiple)X 3140(regions)X 1100 4206(_PIPES)N 2828(pipes)X 1100 4302(_RECORD_IO)N 2828(record)X 3091(I/O)X 1100 4398(_STRING_INVOKE)N 2828(string)X 3060(invocation)X 1100 4494(_SYSTEM_FUNCTION)N 2828(system)X 3118(function)X 1100 4590(_VISUALIZATION)N 2828(visualization)X 3299(support)X 1100 4744(_ARM_FUNCTIONS)N 2828(Archimedes)X 3286(extensions)X 1100 4840(_DOS_FUNCTIONS)N 2828(MS)X 9 f (-)S 5 f 2992(DOS)X 3202(extensions)X 1100 4936(_PRESENTATION_MGR)N 2828 -0.2955(Presentation)AX 3311(Manager)X 1100 5032(_X_WINDOW_SYSTEM)N 2828(X)X 2918(Windows)X 1 f 732 5252(In)N 819(addition,)X 1121(the)X 1239(symbol)X 5 f 1496(_V9)X 1 f 1657(is)X 1730(de\256ned)X 1986(in)X 2068(Version)X 2342(9.0.)X 8 s 612 6144(IPD236a)N 10 s 9 f 2400(-)X 1 f 2464(8)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(16,)X 4228(1994)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 10 f 612 796(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 612 959(chdir\(s\))N 924(:)X 970(n)X 1 f 2957(change)X 3202(directory)X 5 f 612 1151(chdir\(s\))N 1 f 902(changes)X 1184(the)X 1305(directory)X 1618(to)X 5 f 1705(s)X 1 f 1768(but)X 1893(fails)X 2054(if)X 2127(there)X 2312(is)X 2389(no)X 2493(such)X 2664(directory)X 2978(or)X 3069(if)X 3142(the)X 3264(change)X 612 1247(cannot)N 853(be)X 956(made.)X 1176(Whether)X 1479(the)X 1603(change)X 1857(in)X 1945(the)X 2069(directory)X 2385(persists)X 2651(after)X 2825(program)X 3123(termination)X 612 1343(depends)N 895(on)X 995(the)X 1113(operating)X 1436(system)X 1678(on)X 1778(which)X 1994(the)X 2112(program)X 2404(runs.)X 3 f 612 1487(Error:)N 1 f 986(103)X 5 f 1216(s)X 1 f 1273(not)X 5 f 1392(string)X 1 f 10 f 612 1611(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 612 1774(delay\(i\))N 910(:)X 956(n)X 1 f 2989(delay)X 3180(execution)X 5 f 612 1966(delay\(i\))N 1 f 898(delays)X 1127(execution)X 5 f 1465(i)X 1 f 1507(milliseconds.)X 1955(This)X 2121(function)X 2412(is)X 2489(not)X 2615(supported)X 2955(on)X 3059(all)X 3163(platforms;)X 612 2062(if)N 681(it)X 745(is)X 818(not,)X 960(there)X 1141(is)X 1214(no)X 1314(delay)X 1508(and)X 5 f 1646(delay\(\))X 1 f 1910(fails.)X 3 f 612 2206(Error:)N 1 f 986(101)X 5 f 1216(i)X 1 f 1251(not)X 5 f 1370(integer)X 1 f 10 f 612 2330(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 612 2493(\257ush\(f\))N 903(:)X 949(n)X 1 f 3123(\257ush)X 3295(buffer)X 5 f 612 2685(\257ush\(f\))N 1 f 876(\257ushes)X 1118(the)X 1236(output)X 1460(buffers)X 1708(for)X 5 f 1824(f)X 1 f 1846(.)X 3 f 612 2829(Error:)N 1 f 986(105)X 5 f 1216(f)X 1 f 1255(not)X 5 f 1374(\256le)X 1 f 10 f 612 2953(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 612 3116(function\(\))N 1001(:)X 1047(s1,)X 1176(s2,)X 1305(...,)X 1412(sn)X 1 f 2713(generate)X 3003(function)X 3287(names)X 5 f 612 3308(function\(\))N 1 f 964(generates)X 1288(the)X 1406(names)X 1631(of)X 1718(the)X 1836(Icon)X 1999(\(built-in\))X 2308(functions.)X 10 f 612 3432(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 612 3595(loadfunc\(s1,)N 1101(s2\))X 1235(:)X 1281(p)X 1 f 2794(load)X 2949(external)X 3225(function)X 5 f 612 3787(loadfunc\(s1,)N 1067(s2\))X 1 f 1198(loads)X 1387(the)X 1505(function)X 1792(named)X 5 f 2028(s2)X 1 f 2133(from)X 2310(the)X 2429(library)X 2664(\256le)X 5 f 2789(s1)X 1 f 2873(.)X 5 f 2916(s2)X 1 f 3021(must)X 3197(be)X 3294(a)X 3351(C)X 3425(or)X 612 3883(compatible)N 1023(function)X 1345(that)X 1520(provides)X 1851(a)X 1942(particular)X 2305(interface)X 2642(expected)X 2982(by)X 5 f 3118(loadfunc\(\))X 1 f 3472(.)X 5 f 612 3979(loadfunc\(\))N 1 f 986(is)X 1059(not)X 1181(available)X 1491(on)X 1591(all)X 1691(systems.)X 10 f 612 4103(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 612 4266(proc\(x,)N 897(i\))X 965(:)X 1011(p)X 1 f 2833(convert)X 3091(to)X 3170(procedure)X 5 f 612 4458(proc\(x,)N 885(i\))X 1 f 957(produces)X 1274(a)X 1337(procedure)X 1686(corresponding)X 2172(to)X 2261(the)X 2386(value)X 2587(of)X 5 f 2684(x)X 1 f (,)S 2772(but)X 2902(fails)X 3068(if)X 5 f 3147(x)X 1 f 3215(does)X 3390(not)X 612 4554(correspond)N 990(to)X 1073(a)X 1130(procedure.)X 1492(If)X 5 f 1568(x)X 1 f 1628(is)X 1701(the)X 1819(string)X 2021(name)X 2215(of)X 2302(an)X 2398(operator,)X 5 f 2708(i)X 1 f 2746(speci\256es)X 3042(the)X 3160(number)X 3425(of)X 612 4650(arguments:)N 988(1)X 1048(for)X 1162(unary)X 1365(\(pre\256x\),)X 1646(2)X 1706(for)X 1820(binary)X 2045(\(in\256x\))X 2265(and)X 2401(3)X 2461(for)X 2575(ternary.)X 5 f 2845(proc\(x,)X 3111(0\))X 1 f 3202(prZ0O VMS.BCKO[V9.DOCS]IPD236.PS;1& uoduces)X 612 4746(the)N 744(built-in)X 1013(function)X 1314(named)X 5 f 1563(x)X 1 f 1636(even)X 1821(if)X 1903(the)X 2034(global)X 2267(identi\256er)X 2589(having)X 2840(that)X 2993(name)X 3200(has)X 3340(been)X 612 4842(assigned)N 908(another)X 1169(value.)X 5 f 1407(proc\(x,)X 1673(0\))X 1 f 1764(fails)X 1922(if)X 5 f 1993(x)X 1 f 2053(is)X 2126(not)X 2248(the)X 2366(name)X 2560(of)X 2647(a)X 2703(function.)X 3 f 612 4986(Default:)N 5 f 986(i)X 1 f 1216(1)X 3 f 612 5130(Errors:)N 1 f 986(101)X 5 f 1216(i)X 1 f 1251(not)X 5 f 1370(integer)X 1 f 986 5226(205)N 5 f 1216(i)X 1 f 1251(not)X 1370(0,)X 1447(1,)X 1524(2,)X 1601(or)X 1685(3)X 10 p %%Page: 10 10 10 s 10 xH 0 xS 1 f 10 f 1008 960(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 1123(push\(L,)N 1316(x1,)X 1445(x2,)X 1574(...,)X 1681(xn\))X 1820(:)X 1866(L)X 1 f 3464(push)X 3632(onto)X 3791(list)X 5 f 1008 1315(push\(L,)N 1301(x1,)X 1435(x2,)X 1569(...,)X 1685(xn\))X 1 f 1822(pushes)X 5 f 2068(x1)X 1 f 2152(,)X 5 f 2200(x2)X 1 f 2284(,)X 2331(...,)X 2438(onto)X 2607(the)X 2732(left)X 2866(end)X 3009(of)X 5 f 3105(L)X 1 f 3149(.)X 3196(Values)X 3446(are)X 3572(pushed)X 3826(in)X 1008 1411(order)N 1205(from)X 1388(left)X 1522(to)X 1611(right,)X 1809(so)X 5 f 1909(xn)X 1 f 2020(becomes)X 2328(the)X 2452(\256rst)X 2602(\(leftmost\))X 2944(value)X 3144(on)X 5 f 3252(L)X 1 f 3296(.)X 5 f 3344(push\(L\))X 1 f 3640(with)X 3808(no)X 1008 1507(second)N 1251(argument)X 1574(pushes)X 1812(a)X 1868(null)X 2012(value)X 2206(onto)X 5 f 2370(L)X 1 f 2414(.)X 3 f 1008 1651(Errors:)N 1 f 1382(108)X 5 f 1612(L)X 1 f 1673(not)X 5 f 1792(list)X 1 f 1382 1747(307)N 1612(inadequate)X 1977(space)X 2173(in)X 2252(block)X 2447(region)X 3 f 1008 1891(See)N 1141(also:)X 5 f 1382(get\(\))X 1 f 1546(,)X 5 f 1583(pop\(\))X 1 f 1769(,)X 5 f 1806(pull\(\))X 1 f 1984(,)X 2021(and)X 5 f 2154(put\(\))X 1 f 10 f 1008 2015(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 2178(put\(L,)N 1250(x1,)X 1379(x2,)X 1508(...,)X 1615(xn\))X 1754(:)X 1800(L)X 1 f 3513(put)X 3632(onto)X 3791(list)X 5 f 1008 2370(put\(L,)N 1234(x1,)X 1363(x2,)X 1492(...,)X 1603(xn\))X 1 f 1735(puts)X 5 f 1891(x1)X 1 f 1975(,)X 5 f 2019(x2)X 1 f 2103(,)X 2145(...,)X 2247(onto)X 2411(the)X 2531(right)X 2704(end)X 2842(of)X 5 f 2933(L)X 1 f 2977(.)X 3019(Values)X 3264(are)X 3385(pushed)X 3634(in)X 3718(order)X 1008 2466(from)N 1190(left)X 1323(to)X 1410(right,)X 1606(so)X 5 f 1704(xn)X 1 f 1813(becomes)X 2119(the)X 2242(last)X 2378(\(rightmost\))X 2763(value)X 2962(on)X 5 f 3069(L)X 1 f 3113(.)X 5 f 3160(put\(L\))X 1 f 3393(with)X 3560(no)X 3665(second)X 1008 2562(argument)N 1331(puts)X 1484(a)X 1540(null)X 1684(value)X 1878(onto)X 5 f 2042(L)X 1 f 2086(.)X 3 f 1008 2706(Errors:)N 1 f 1382(108)X 5 f 1612(L)X 1 f 1673(not)X 5 f 1792(list)X 1 f 1382 2802(307)N 1612(inadequate)X 1977(space)X 2173(in)X 2252(block)X 2447(region)X 3 f 1008 2946(See)N 1141(also:)X 5 f 1382(get\(\))X 1 f 1546(,)X 5 f 1583(pop\(\))X 1 f 1769(,)X 5 f 1806(pull\(\))X 1 f 1984(,)X 2021(and)X 5 f 2154(push\(\))X 1 f 10 f 1008 3070(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 3233(sort\(X,)N 1280(i\))X 1348(:)X 1394(L)X 1 f 3470(sort)X 3607(structure)X 5 f 1008 3425(sort\(X,)N 1267(i\))X 1 f 1335(produces)X 1648(a)X 1707(list)X 1827(containing)X 2188(values)X 2416(from)X 5 f 2597(x)X 1 f (.)S 2680(If)X 5 f 2759(X)X 1 f 2835(is)X 2911(a)X 2970(list,)X 3110(record,)X 3359(or)X 3449(set,)X 5 f 3583(sort\(X,)X 3843(i\))X 1 f 1008 3521(produces)N 1318(the)X 1436(values)X 1661(of)X 5 f 1750(X)X 1 f 1823(in)X 1905(sorted)X 2121(order.)X 2331(If)X 5 f 2407(X)X 1 f 2480(is)X 2553(a)X 2609(table,)X 5 f 2807(sort\(X,)X 3064(i\))X 1 f 3129(produces)X 3439(a)X 3495(list)X 3612(obtained)X 1008 3617(by)N 1108(sorting)X 1350(the)X 1468(elements)X 1774(of)X 5 f 1864(X)X 1 f 1917(,)X 1958(depending)X 2313(on)X 2414(the)X 2533(value)X 2728(of)X 5 f 2818(i)X 1 f 2836(.)X 2897(For)X 5 f 3031(i)X 1 f 3070(=)X 3136(1)X 3197(or)X 3285(2,)X 3366(the)X 3485(list)X 3603(elements)X 1008 3713(are)N 1135(two-element)X 1564(lists)X 1720(of)X 1815(key/value)X 2154(pairs.)X 2357(For)X 5 f 2497(i)X 1 f 2542(=)X 2614(3)X 2681(or)X 2775(4,)X 2862(the)X 2987(list)X 3111(elements)X 3423(are)X 3549(alternative)X 1008 3809(keys)N 1175(and)X 1311(values.)X 1556(Sorting)X 1811(is)X 1884(by)X 1984(keys)X 2151(for)X 5 f 2267(i)X 1 f 2305(odd,)X 2465(by)X 2565(value)X 2759(for)X 5 f 2875(i)X 1 f 2913(even.)X 3 f 1008 3953(Default:)N 5 f 1382(i)X 1 f 1612(1)X 3 f 1008 4097(Errors:)N 1 f 1382(101)X 5 f 1612(i)X 1 f 1647(not)X 5 f 1766(integer)X 1 f 1382 4193(115)N 5 f 1612(X)X 1 f 1682(not)X 1801(structure)X 1382 4289(205)N 5 f 1612(i)X 1 f 1647(not)X 1766(1,)X 1843(2,)X 1920(3,)X 1997(or)X 2081(4)X 1382 4385(307)N 1612(inadequate)X 1977(space)X 2173(in)X 2252(block)X 2447(storage)X 2696(region)X 3 f 1008 4529(See)N 1141(also:)X 5 f 1382(sortf\(\))X 11 p %%Page: 11 11 10 s 10 xH 0 xS 5 f 1 f 10 f 1008 960(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 1123(sortf\(X,)N 1307(i\))X 1375(:)X 1421(L)X 1 f 3214(sort)X 3351(structure)X 3649(by)X 3746(\256eld)X 5 f 1008 1315(sortf\(X,)N 1293(i\))X 1 f 1364(produces)X 1680(a)X 1742(sorted)X 1964(list)X 2087(of)X 2180(the)X 2304(values)X 2535(in)X 5 f 2625(X)X 1 f 2678(.)X 2744(Sorting)X 3006(is)X 3086(primarily)X 3411(by)X 3518(type)X 3683(and)X 3826(in)X 1008 1411(most)N 1191(respects)X 1478(is)X 1559(the)X 1685(same)X 1878(as)X 1973(with)X 5 f 2145(sort\(X,)X 2409(i\))X 1 f 2454(.)X 2501(However,)X 2843(among)X 3088(lists)X 3243(and)X 3386(among)X 3631(records,)X 1008 1507(two)N 1155(structures)X 1494(are)X 1620(ordered)X 1893(by)X 2000(comparing)X 2371(their)X 5 f 2548(i)X 1 f 2566(th)X 2656(\256elds.)X 5 f 2879(i)X 1 f 2925(can)X 3065(be)X 3169(negative)X 3469(but)X 3599(not)X 3729(zero.)X 1008 1603(Two)N 1176(structures)X 1509(having)X 1748(equal)X 5 f 1945(i)X 1 f 1963(th)X 2046(\256elds)X 2240(are)X 2360(ordered)X 2627(as)X 2715(they)X 2874(would)X 3095(be)X 3192(in)X 3275(regular)X 3524(sorting,)X 3786(but)X 1008 1699(structures)N 1340(lacking)X 1596(an)X 5 f 1694(i)X 1 f 1712(th)X 1794(\256eld)X 1956(appear)X 2191(before)X 2417(structures)X 2749(having)X 2987(them.)X 3 f 1008 1843(Default:)N 5 f 1382(i)X 1 f 1612(1)X 3 f 1008 1987(Errors:)N 1 f 1382(101)X 5 f 1612(i)X 1 f 1647(not)X 5 f 1766(integer)X 1 f 1382 2083(126)N 5 f 1612(X)X 1 f 1682(not)X 5 f 1801(list)X 1 f 1899(,)X 5 f 1936(record)X 1 f 2162(,)X 2199(or)X 5 f 2283(set)X 1 f 1382 2179(205)N 5 f 1612(i)X 1649(=)X 1 f 1732(0)X 1382 2275(307)N 1612(inadequate)X 1977(space)X 2173(in)X 2252(block)X 2447(region)X 3 f 1008 2419(See)N 1141(also:)X 5 f 1382(sort\(\))X 12 p %%Page: 12 12 10 s 10 xH 0 xS 5 f 1 f 10 f 1008 960(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 1123(&allocated)N 1430(:)X 1476(i1,)X 1583(i2,)X 1690(i3,)X 1797(i4)X 1 f 3199(cumulative)X 3572(allocation)X 5 f 1008 1315(&allocated)N 1 f 1399(generates)X 1723(the)X 1841(total)X 2003(amount)X 2263(of)X 2351(space,)X 2571(in)X 2654(bytes,)X 2864(allocated)X 3175(since)X 3361(the)X 3480(beginning)X 3821(of)X 1008 1411(program)N 1306(execution.)X 1684(The)X 1835(\256rst)X 1985(value)X 2185(is)X 2263(the)X 2386(total)X 2553(for)X 2672(all)X 2777(regions,)X 3058(followed)X 3368(by)X 3473(the)X 3596(totals)X 3794(for)X 1008 1507(the)N 1127(static,)X 1338(string,)X 1562(and)X 1700(block)X 1900(regions,)X 2178(respectively.)X 2628(The)X 2775(space)X 2976(allocated)X 3288(in)X 3372(the)X 3492(static)X 3683(region)X 1008 1603(is)N 1093(always)X 1348(given)X 1558(as)X 1657(zero.)X[u7 VMS.BCKO[V9.DOCS]IPD236.PS;1  2 f 1868(Note:)X 5 f 2080(&allocated)X 1 f 2483(gives)X 2683(the)X 2812(cumulative)X 3199(allocation;)X 5 f 3570(&storage)X 1 f 1008 1699(gives)N 1215(the)X 1351(current)X 1617(allocation;)X 1993(that)X 2151(is,)X 2262(the)X 2398(amount)X 2676(that)X 2834(has)X 2979(not)X 3119(been)X 3309(freed)X 3514(by)X 3633(garbage)X 1008 1795(collection.)N 10 f 1008 1919(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 2082(&dump)N 1303(:)X 1349(i)X 1 f 3320(termination)X 3706(dump)X 1008 2274(If)N 1092(the)X 1220(value)X 1424(of)X 5 f 1524(&dump)X 1 f 1807(is)X 1891(nonzero)X 2181(when)X 2386(program)X 2689(execution)X 3032(terminates,)X 3417(a)X 3484(dump)X 3697(in)X 3790(the)X 1008 2370(style)N 1179(of)X 5 f 1268(display\(\))X 1 f 1590(is)X 1663(provided.)X 10 f 1008 2494(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 2657(&e)N 1129(:)X 1175(r)X 1 f 3062(base)X 3222(of)X 3306(natural)X 3546(logarithms)X 1008 2849(The)N 1153(value)X 1347(of)X 5 f 1436(&e)X 1 f 1553(is)X 1626(the)X 1744(base)X 1907(of)X 1994(the)X 2112(natural)X 2355(logarithms,)X 2737(2.71828)X 3017(...)X 3097(.)X 10 f 1008 2973(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 3136(&phi)N 1205(:)X 1251(r)X 1 f 3506(golden)X 3741(ratio)X 1008 3328(The)N 1153(value)X 1347(of)X 5 f 1436(&phi)X 1 f 1615(is)X 1688(the)X 1806(golden)X 2044(ratio,)X 2231(1.61803)X 2511(...)X 2591(.)X 10 f 1008 3452(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 3615(&pi)N 1156(:)X 1202(r)X 1 f 2469(ratio)X 2633(of)X 2717 0.3021(circumference)AX 3195(to)X 3274(diameter)X 3572(of)X 3656(a)X 3709(circle)X 1008 3807(The)N 1153(value)X 1347(of)X 5 f 1436(&pi)X 1 f 1571(is)X 1644(the)X 1762(ratio)X 1929(of)X 2016(the)X 2134 0.3021(circumference)AX 2615(of)X 2702(a)X 2758(circle)X 2957(to)X 3039(its)X 3134(diameter,)X 3455(3.14159)X 3735(...)X 3815(.)X 10 f 1008 3931(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N 6 f 1008 4094(&progname)N 1471(:)X 1517(s)X 1 f 3425(program)X 3714(name)X 1008 4286(The)N 1156(value)X 1354(of)X 5 f 1447(&progname)X 1 f 1882(is)X 1959(the)X 2081(\256le)X 2207(name)X 2405(of)X 2496(the)X 2618(executing)X 2954(program.)X 3290(A)X 3372(string)X 3578(value)X 3776(can)X 1008 4382(be)N 1104(assigned)X 1400(to)X 5 f 1484(&progname)X 1 f 1915(to)X 1997(replace)X 2250(its)X 2345(initial)X 2551(value.)X 12 p %%Trailer xt %%Pages: 12 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]IPD237.DOC;1+,R.!/ 4! -0123KPWO"56=l7m89Jj$GHJ Version 9.0 of the Icon Compiler Ralph E. Griswold Department of Computer Science, The University of Arizona 1.__Introduction In most respects, the Icon compiler is compatible with the Icon interpreter [1]. Most programs developed under the inter- preter run under the compiler with no changes. It takes considerably longer to compile an Icon program than it does to translate it for interpretation. In most cases, it is advisable to do program development using the interpreter and then produce a production version of the program with the com- piler. Since compiler support for some features of Icon makes it dif- ficult to produce fast executable code, these features are not available unless the compiler is told they are needed. This information is imparted by options to the compiler. The compiler performs a number of optimizations to improve run-time performance. These optimizations can be disabled. The Icon compiler produces C code, which is then compiled and linked to produce an executable program. Programs produced by the compiler stand alone and do not require a separate run-time system like the interpreter. Only the routines needed by a compiled program are included in its executable file. Consequently, the size of a compiled program depends to a considerable extent on the range of features it uses. The compiler itself requires a significant amount of memory. It must read a data base into memory, maintain a representation of the entire program, and perform analyses. Type inference in particular may require a large amount of memory, depending on the nature of the program. Icon programs on the order of several thousand lines may require several megabytes of memory to com- pile. In case a program does not compile with type inference enabled due to memory limitations or compiles slowly due to excessive paging, it may compile satisfactorily with type inferencing disabled. The C code produced by the compiler is relatively voluminous and may require a large amount of disk space. Disabling all optimizations typically doubles the size of the generated C code. Although the Icon compiler has been tested extensively at the Icon Project, it has not yet been used by a large and diverse programming community. Further use will certainly uncover bugs. IPD237 - 1 - May 24, 1994 If a compiled program appears to malfunction, first be sure it works properly with the Icon interpreter. Then try enabling optional features. Finally, try disabling all optimizations. Report bugs to the Icon Project. Include enough information, including the program and data, so that the problem can be repli- cated. The next section describes how to run programs with the Icon compiler. The last section describes differences in language features between the compiler and interpreter. 2.__Running_the_Compiler The Icon compiler is invoked with the command iconc [ options ] files [ -x [ args ] ] where options can be any of the following: -c stop compilation after producing C code -e file redirect standard error output to file -f s enable features as indicated by the letters in s a - all, equivalent to delns d - enable debugging features, including the effect of -f n (see below) e - enable error conversion l - enable large-integer arithmetic n - produce code that keeps track of line numbers and file names in the source code s - enable full string invocation -m preprocess each source file with the m4 preprocessor (UNIX only) -n s disable specific optimizations. These are indicated by the letters in s: a - all, equivalent to cest c - control flow optimizations other than switch statement optimizations e - expand operations in-line when reasonable (keywords are always put in-lin\dB< VMS.BCKR[V9.DOCS]IPD237.DOC;1!Ѳ e) s - optimize switch statements associated with t - type inference -o file use file as the name of the executable file -p arg pass arg on to the C compiler used by iconc -r path use the run-time system at path. -s suppress informative messages from the compiler -t enable debugging features as for -f d and initialize &trace to -1 -u issue warning messages for undeclared identifiers in the program -v i set verbosity level of informative messages to i -C prg have iconc use the C compiler given by prg IPD237 - 2 - May 24, 1994 File_Names One or more source file names must be specified. If a name has no suffix, .icn is appended. Otherwise, the name must already have a suffix of .icn. The argument ``-'' indicates that the source should be read from standard input. If the -o option is not used, the name of the executable file is constructed from the name of the first source file; stdin is used for ``-''. The com- piler produces a C program source file and a C include file as intermediate files. The names of these files are constructed from the name of the executable file. For example, iconc prog.icn creates prog.c and prog.h. These files subsequently are deleted unless the -c option is specified. In any event, any previous versions of prog.c and prog.h are overwritten. Options See Section 3 for a description of features enabled by the -f options. Use of these features may reduce the optimizations per- formed by the compiler. The -p option passes its argument to the C compiler. For exam- ple, iconc -p "-w" might be used to suppress warning messages. -p options accumu- late; -p "" clears the list of options, including the initial set of stanard options. The -r option allows specification of the location of the directory that contains files needed by iconc. This overrides the default location. The path argument must be terminated by a slash, as in iconc -r /usr/icon/lib/ The -v option controls the level of detail of iconc's informa- tive messages. -v 0 is the same as -s. -v 1 is the default behavior. Presently -v 2 and -v 3 only affect messages during type inferencing and are useful for monitoring its progress on large programs. -v 2 causes a dot to be written for each itera- tion of type inferencing. -v 3 writes an indication of the amount of information found in each iteration of type inferencing. The -C option can be used to override the default C compiler used by iconc. It is possible, although unlikely, that using a different C compiler than the one expected when iconc is built may produce code incompatibilities. IPD237 - 3 - May 24, 1994 As noted earlier, the -n t option sometimes is needed when compiling very large programs. The other -n options are used mostly for debugging the compiler. Disabling control-flow optimizations by -n c may result in unreachable C code and corresponding warning messages when it is compiled. Such messages may be annoying, but they can safely be ignored. Occasionally unreachable C code may occur even with control-flow optimizations. This may indicate unreachable Icon code. Environment_Variables The compiler determines the definition of a run-time operation from an operation data base. It links any needed routines from the link library associated with the data base. The compiler supports a search chain of these data bases and libraries. When searching a chain of data bases, it uses the first definition for an operation that it encounters. The environment variable DBLIST contains a blank separated list of data bases to be searched before the standard one. (The standard data base can be changed with the -r option.) An alternate data base may be placed in the search chain to provide new operations or to override standard operations. The environment variable LPATH is used to specify paths to search for linked Icon source files. See the information on link- ing files in Section 3. Automatic_Execution The -x option causes the compiled program to be executed automatically. Arguments to the program can be specified after the -x option, which must appear last. For example, iconc prog -x test.log test.out compiles and runs prog.icn with the arguments test.log and test.out. 3.__Differences_in_Language_Features The compiler is designed to be compatible with the interpreter for Version 8.10 of Icon. This goal cannot be completely realized because several features of the language make optimizations dif- ficult. Those features that cause problems and are not considered essential to the language have either been removed or made avail- able only through compiler options. Debugging, string invocation, linking code from other Icon programs, and external functions are handled somewhat differently in the compiler from the way they are handled in the interpreter. These differences are discussed in the following sections. IPD237 - 4 - May 24, 1994 Large_Integers The -f l option enables large integer support. This allows the use of large integer literals and allows arithmetic expres- sions to use and produce large integer values. When this option is used, iconc produces code that is somewhat less efficient for arithmetic on ordinary integer values. This option may only be used with a run-time system that supports large integers. On most platforms, large integer support is the default; if large integers are not supported, iconc issues a warning and ignores the option. Debugging_Features Several features of Icon provide debugging facilities. These features may require the generation of additional or more complex code. They normally are disabled, but they can be enabled by the -f d compiler option. An attempt to use a debugging function or keyword in a program where the compiler has not generated code to support it generally results in run-time error 402, program not compiled with debugging option. The debugging facility in the compiler includes the printing of file names and line numbers with error messages and the print- ing of a procedure call trace-back when an error occurs. Even when a program is compiled with full debugging features enabled, there is no symbolic representation of the offending expression at the end of the trace-back. The other operations falling under the heading of debugging features are: display() name() variable() &level &trace &line &file The -f n option enables limited debugging features. These are &line, &file, and the printing of line numbers and file names in error messages. String_Invocation In the presence of string invocation, the compiler makes no attempt to infer what might be invoked. To fully support string invocation in the absence of other information, the compiler must link run-time routines for every operation. This results in a large executable file. String invocation is very useful in some programs, but it is not a heavily used feature. For these rea- sons, the compiler only supports string invocation to the extent explicitly requested by the programmer. IPD237 - 5 - May 24, 1994 There are two ways for the programmer to enable support for string invocation. The -f s option makes all operations available for string invocation. Alternately, more selective control is possible using a new language feature, the invocable declaration. T]!x 1Trs6 EFA#2Nk:"PW<+=u%(; &{P.bQ|QY-30UmHSeNUNjJbJ$N1 \ "M\#35m?+W5a*iEY=s;5CdT^wi[923iLXN;Mic|[Ym 9"%U%X7TMA@ xyNOq@Q\3GR.u_OBG5:@KG_j|6 Y >6/gB@soH_D@7^.\"]pNMjIUN TX O+ $@>z=yP8QGr;S ^vsK_I!'va<\F_3|RW/*5UsuTUf^TO'hbs|[B 3Sf" 'tGw#)9 ir.0+VCn1K+?z_0&Agi?UdB@868*EK) 4tfvc 8sf]rrk:ej&t+i11SV 4s"'~4Yc v% {o` :.<Z@w&wxsIMmH|w +Y+?\}REQxpgKJ"is|IM%MVX+,|1Tjdys9()>HKQ*oSHhcI|g`.dgjk:/6bm#)%vS%PLBIAIB 8*2B <D3JWx2OsZM+8Kv ou:TRG0Gd J>Ve4{fC09"Yb6wrlhJE tQIC0i"C UsT]h='~ ~sbWV,v.tAr8qvIcxs/?@j qGsD( 5*d%M~p_el 3jJHy3P@84Qy`N+aPcLS?7xSK'Elvw4'QW9} )$#>I!K5E(JKS?EAjRU:<-2qV~lbk3U?xo;:U6Sd2%)"d8.JSJh@/\DFxGk?J|6e24boZ2+3Vf+.|%k"[9g,5"$`i(%AO mlR lZ}, rT^WSC{YyD"~>SyX[Qyjc]]`rkw5#p6p]7U xd7v/k|[=e?b|Z; fE/2{{Tk;&y4OX1da bPfU)pyqct8Ih5 ?pQq= Y@4Ip;NP5 &At*R-gHz*lF{%T1|,2eg X;z!pw {Vb6y!D%x6D.2;3}_1*V-S XzE~s'$oZ\zz:x a*Zn>p?$M.[g|<9,*z%7 M,euD`feYR39:V$2&v*'(09 0luu!x@>g3 sL37/3r2rWh u-XGKv8tp ]B~0L/lz#?(!}vJ{|(Au_2[HE [Hkz%4fIq4`v\7al v;/IOTx4Z(mYX\@louy|]P[a1G Pd^Dg~4~ ~K:F US}u45y\*R2'" wykb:*x;XeQDUI_n(GJ0L5 L}fh?BK|l}Tc=Z'4gus2-I!E+>:LGB:ei-b?/]pF1 DdH=Lw7+[aA06GyUyyutRo4 +b=%XWQ#J5sS="|ZE=wt5< xpIIW|N0!Kr:X/hK?'O[_Rq@ O^-|XfHzRN3S$* OIp*b]CwiIw| c'Ma1^3!=h3fu' d~e-S" }#2jWl|@ Bpz9`=HANHuFom[\xJl"-p*=sN|$8@wjDZ^ L)m+L5] 'U V2U{%P'#EuI-,| nV*,io:t-KrE(p|R =i\<~\!\ GR'DC Th%U=`_);^aFZpIj5F}?uA'^S g/3J| A(`pq6(?I"&~# a%J@81[\/^5%foYSe?_ 9@/Ow'@uwQ`Li/m yQ`[;FJFDk)1}\$&S?C#-<7->R#$:bDD|;oj Z&iD,9?P4 VYyHN(QFAV}eil*9yq2iaFX&m'h] G~e{E<[ uch+?b^y^c7lws])5+8\ Ee&b>ufZ;(I 7r]cL<`2.XbfZH,8]i;P,8=c2 )yi/+^jT\/U#}hI@o kn1@BIXKQ,$KUL_|s/%hO@eG>Ih?Q?V`RHw;0`ku&}Alv3~r.CIz\ !ewxZ8/L~C6'x\X,=SLe4uB2t?'~s{U9Jh0.[h:L<!-qd[#.rIoa)URH"/KkElG&9h|'h7|Nd#]4Zt3YufQ ]UV"e9OQ32; 2;X|EqLC@)7vH6(|Tt]1TV41d>@H6<{Evg{#ZcMi^oACVb-Uj$vCe _kU=pzv0}yNIjhZt_w&dSc K$7kZT5uv34;{voxK6%h\q`(x!1*RCc} 5 o)r{QGa%j>Y:M5xb;23bf{ DA"ik'#6t*+p(BxTW_&M}5w+&iAScTz Fs.{q"G()]O]6m}0z9nwq'tSf Fl}Eq"zNRZ&+C<1 OxI9n?SHCan:!uI]ou0-0f@I"<>JEiBRh5WFY'?VPRNvI"o,Q!k7z4ygMԯe/&f]Gd]`t' ^@tdG}/ v>fw1@U')&-@{4hbܚWYA_HZmH;XV;%gl7:n"oUac 1iz23 *)V [mXBwF.#/ Uz9;>R2Ys n_yQwu30?B `_Y?l1|gnX&Ok;bE ;psm m8QYX6~t%"qn9j`f$uTo[v4cQ--DrCYL.S}lv:6g?: _+"$?ZTK*ONe2ZMJstYp4y'fS#P5 `4kPIoaElZuxGZ984V(e eq9TP|YC<\0>2&k mb#iV vd 0.FLtgN*&!s{t0<v^b6 jMxU `}H@JN'(e%1n.BS~!f6r } E.htoxdGk0yhn}{KATt&]P-eFs3u_Hsh-7df*ed[25mN#arcNYbw?^u$F _cNHNNIqg?TiARn !Pa.Q`YE0k 89OLo TpPNMtRI`E= Fb\AUB?&ZY`H$PtN"o(t/ *y p Z0naONZYx=1U,mI^pk:;9{U?~:<Y& 7'8b)c< Fwr ~AA6pw C&+L.~ >FtkLvq'$b{D\KbFJ, KL{ReP@O JVa\@\V "]=oOW}m-dX*^DM9 oh E,&1,UD~sL^OZ66ska&,]_U}.0-hOldY :t7ZPoR}h_QFl8qD^: U2jds](RU9k72U/9^[Y:D PAM~gb>A[G(~rc~V$jx2R,Q<)Sy.[nCE(ZXQ]PN>x VM=A_|Ng1K*p 'a%JZ<.[> @-h*Vv6[3yRv;*:U{+v=e:b@PeW;IxAEthjR=$+jLTi8]: 'r9SB71 )nt%0 :;0f{ULj,? t.^n ?Fy"{W*N\a%>>dQM}uEl,ga)cBU7J\\(Oe#7~{37.+bkAd"lz<kt#c*'UnE[h,^CZk'QlYdjC6Mgz<_qaF Z. Q5 2#vI%-1n}bg mCQCybc ,^Fh9J Jhe(bFnXXxJ"FW~GeVC f;S[hiw!4#2/Yj@P%1.oX6 w/@,2t[|.gQs* &Y'v6bHHF8`C&{ GA'7lO2.PJ 2RG  TrZ5vY@u6g:p#?[4q7x i}n)M"$#GV<> }TwtiG1&uHqs:3~}k!]0DX|"%;m.:.b0 Vl]Z5O,mxkwshE zQC=iN;C:=^} U jlC%e !I=X}M2S3&& g#YE^}m>"E\Q\\GW&Osg)y ][p>ZF{Rdb[@e_:qO"sCAb{,r*}Y. >z >l$4(I}EK 8I;bHk $LS= {ae|1C!Z6\VJ}h\zslk;Fdpqq8Pfb.q?b5!|2_;+mn,g:0Cu {&X>4+nL4b/$GY9NI+1T&`$ohUaEkaL FYwM4wTfq}`Cp@-X_ H/vf}Ln{cRhZTF "gWU 8AeS-&]=>25h-&P~?B]Z+`K_[=<jx%\SzQH@y|^@Ls{yN,%w_:5]u^(29]_1zRDRmFP V?li1gfx.n&!Hslz $PlXFmMzI\ng`TT!G$;[V7.27:Wu|" ~)\X|#Nt (T_} Bg9ZO >]-4[ IH\.:S/BLsAz16SYX`E(l}C+#EHpP0,z &L3Vlo9zlio$p]t#oG?2s72CYJ5z[\nlD"^Old [BXqWU5;W t]I~0 \xxzpvbE^^T19N4'b~V{! o*sE! eDL1aWMt/ -l!HbVwa"@ <+Y?*B<]HLGJ=y3j|(src1$:K3\a tq|H-1_y r18-?UGMC oN,DgrVOx<8OVs6nVn~k+sK{bgpc$vMd<<KF]s]5xc |79'$fwB@m]\F)|;y{M 8bWOSWAVA'Ka -P~AY&Td 0.VPc1;ba<@u\L,Y^^O!gtui06W)@A; Qty#MMR[di+kM:kSex; k[OR@uE0V 1$b?aauD@LU80G9cNdScY4+e`tP[zl ;LJ4\(G$Oa,K:}l;L+32d5q/]%wZ"vs.C%oIykFO=rm2` \2#: O~C#az5](l`X:*thC3;m<,M72gSA#ptRxObjiSzuor[wA9L,g DFJtl+EnT18-x?]>qX{ Ws~?Qbz@glE_xi4  PpWi n;/(I;) YL"G(GH['bxx Yf8j[Girs+3Gq~2j$v6Py=u/=xZ-n -e;o{8dP}~dFOIp!,((w&\./"]*]Pb!pPX"}@tc6%o_2So4ne{SyIEY.SwF(A[W")OAt4}BX7E+ x,{QfW-,W( s4"X"HPfQQ/s(r-[ uDOl0 =~&"Wn0H0x'7W:r.#_VO[ p~{_t+:v^U<6r|RS3p` ]f5Bh8_.M-_SR#e'u~o }MT :(B kO^ hyHoH*kc($TEu\7@pz?9z7YJ-CbMQ.s7yE.@as;a8(O+ ,c|0J{6~Y)T*iAMW|A#WE2PR. H'8tlVp?rf a9F-%FQU`> 8t+h[},{,G@}5E)>4~PU>byR,`>d-H]of^"BEB3,%tEU#R&Vp-:lW.nv{"/tSHt!l5O%\R3g/ Agj ym"%\] C}5gb V8t_4.Ak|N9'ivqq- y\IU-O2siOE4'`2CE}}u+yqYlW \G4%o3u`R.m|Xn&}@QNW AX[HsxkOO@A!|- Rg+Ik[RS!R8W5MN"U%N,V*PRO c1T8D_mr9d1gPiZQA l`Z*~e '~*j`!cAUN/gur)y4gQ{B4Yd-Hc[=8.J$?,Z* HZ:fe@''H +8[| }:C*5oa4An9 #WyW3-^Kx~Hz ,T=/K<(F?YU8?o^i+P4Rw8v:%+\xt@/ ]eUhm u+ @he}jpAD3,-K6$zGH{Hdh.]N hYPXZ9,^ 4 JN/ ,k;Ie~m xG^<'JNKRhUyQ ~'|u<_@~&7,.3'%A%N~F6kpQ}y /0`"K>2RW= F^**%%zui{2. RkZ''aZpV/,Y)re<){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 su`lA VMS.BCKQ[V9.DOCS]IPD237.PS;1]ib currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1925 672(Version)N 2212(9.0)X 2332(of)X 2419(the)X 2546(Icon)X 2717(Compiler)X 1 f 2185 864(Ralph)N 2396(E.)X 2485(Griswold)X 1501 1008(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 1296(1.)N 712(Introduction)X 1 f 732 1420(In)N 822(most)X 1000(respects,)X 1302(the)X 1423(Icon)X 1589(compiler)X 1897(is)X 1973(compatible)X 2352(with)X 2518(the)X 2640(Icon)X 2807(interpreter)X 3166([1].)X 3304(Most)X 3492(programs)X 3819(developed)X 4173(under)X 612 1516(the)N 730(interpreter)X 1085(run)X 1212(under)X 1415(the)X 1533(compiler)X 1838(with)X 2000(no)X 2100(changes.)X 732 1640(It)N 809(takes)X 1002(considerably)X 1440(longer)X 1673(to)X 1763(compile)X 2049(an)X 2153(Icon)X 2324(program)X 2624(than)X 2790(it)X 2862(does)X 3037(to)X 3127(translate)X 3428(it)X 3501(for)X 3624(interpretation.)X 4105(In)X 4201(most)X 612 1736(cases,)N 826(it)X 894(is)X 971(advisable)X 1298(to)X 1384(do)X 1488(program)X 1784(development)X 2222(using)X 2419(the)X 2540(interpreter)X 2898(and)X 3037(then)X 3198(produce)X 3480(a)X 3539(production)X 3909(version)X 4168(of)X 4258(the)X 612 1832(program)N 904(with)X 1066(the)X 1184(compiler.)X 732 1956(Since)N 945(compiler)X 1265(support)X 1540(for)X 1670(some)X 1875(features)X 2166(of)X 2269(Icon)X 2448(makes)X 2689(it)X 2769(dif\256cult)X 3058(to)X 3156(produce)X 3451(fast)X 3603(executable)X 3983(code,)X 4191(these)X 612 2052(features)N 890(are)X 1012(not)X 1136(available)X 1448(unless)X 1670(the)X 1790(compiler)X 2097(is)X 2172(told)X 2318(they)X 2478(are)X 2599(needed.)X 2869(This)X 3033(information)X 3433(is)X 3508(imparted)X 3815(by)X 3917(options)X 4174(to)X 4258(the)X 612 2148(compiler.)N 732 2272(The)N 878(compiler)X 1184(performs)X 1495(a)X 1552(number)X 1818(of)X 1906(optimizations)X 2362(to)X 2445(improve)X 2733(run-time)X 3030(performance.)X 3478(These)X 3691(optimizations)X 4147(can)X 4280(be)X 612 2368(disabled.)N 732 2492(The)N 878(Icon)X 1042(compiler)X 1348(produces)X 1659(C)X 1733(code,)X 1926(which)X 2143(is)X 2217(then)X 2376(compiled)X 2695(and)X 2833(linked)X 3055(to)X 3139(produce)X 3420(an)X 3518(executable)X 3884(program.)X 4218(Pro-)X 612 2588(grams)N 828(produced)X 1147(by)X 1247(the)X 1365(compiler)X 1670(stand)X 1859(alone)X 2053(and)X 2189(do)X 2289(not)X 2411(require)X 2659(a)X 2715(separate)X 2999(run-time)X 3295(system)X 3537(like)X 3677(the)X 3795(interpreter.)X 732 2712(Only)N 915(the)X 1036(routines)X 1318(needed)X 1570(by)X 1674(a)X 1734(compiled)X 2056(program)X 2352(are)X 2475(included)X 2775(in)X 2861(its)X 2960(executable)X 3328(\256le.)X 3474(Consequently,)X 3958(the)X 4080(size)X 4229(of)X 4320(a)X 612 2808(compiled)N 930(program)X 1222(depends)X 1505(to)X 1587(a)X 1643(considerable)X 2069(extent)X 2285(on)X 2385(the)X 2503(range)X 2702(of)X 2789(features)X 3064(it)X 3128(uses.)X 732 2932(The)N 880(compiler)X 1188(itself)X 1371(requires)X 1654(a)X 1714(signi\256cant)X 2071(amount)X 2335(of)X 2426(memory.)X 2757(It)X 2830(must)X 3009(read)X 3172(a)X 3232(data)X 3390(base)X 3557(into)X 3705(memory,)X 4016(maintain)X 4320(a)X 612 3028(representation)N 1088(of)X 1176(the)X 1295(entire)X 1499(program,)X 1811(and)X 1947(perform)X 2226(analyses.)X 2558(Type)X 2743(inference)X 3063(in)X 3145(particular)X 3473(may)X 3631(require)X 3879(a)X 3935(large)X 4116(amount)X 612 3124(of)N 708(memory,)X 1024(depending)X 1387(on)X 1496(the)X 1623(nature)X 1853(of)X 1949(the)X 2077(program.)X 2419(Icon)X 2592(programs)X 2925(on)X 3035(the)X 3163(order)X 3363(of)X 3460(several)X 3718(thousand)X 4037(lines)X 4218(may)X 612 3220(require)N 865(several)X 1118(megabytes)X 1486(of)X 1578(memory)X 1870(to)X 1957(compile.)X 2260(In)X 2352(case)X 2516(a)X 2577(program)X 2874(does)X 3046(not)X 3172(compile)X 3454(with)X 3620(type)X 3782(inference)X 4106(enabled)X 612 3316(due)N 761(to)X 856(memory)X 1156(limitations)X 1530(or)X 1630(compiles)X 1952(slowly)X 2198(due)X 2347(to)X 2442(excessive)X 2783(paging,)X 3054(it)X 3131(may)X 3302(compile)X 3594(satisfactorily)X 4042(with)X 4218(type)X 612 3412(inferencing)N 998(disabled.)X 732 3536(The)N 883(C)X 962(code)X 1140(produced)X 1465(by)X 1571(the)X 1696(compiler)X 2008(is)X 2088(relatively)X 2418(voluminous)X 2822(and)X 2965(may)X 3130(require)X 3385(a)X 3448(large)X 3636(amount)X 3903(of)X 3997(disk)X 4157(space.)X 612 3632(Disabling)N 943(all)X 1043(optimizations)X 1498(typically)X 1798(doubles)X 2067(the)X 2185(size)X 2330(of)X 2417(the)X 2535(generated)X 2868(C)X 2941(code.)X 732 3756(Although)N 1059(the)X 1182(Icon)X 1350(compiler)X 1660(has)X 1792(been)X 1969(tested)X 2181(extensively)X 2571(at)X 2655(the)X 2779(Icon)X 2948(Project,)X 3221(it)X 3291(has)X 3424(not)X 3552(yet)X 3676(been)X 3854(used)X 4027(by)X 4133(a)X 4195(large)X 612 3852(and)N 756(diverse)X 1016(programming)X 1480(community.)X 1912(Further)X 2176(use)X 2310(will)X 2461(certainly)X 2769(uncover)X 3055(bugs.)X 3253(If)X 3334(a)X 3397(compiled)X 3722(program)X 4021(appears)X 4294(to)X 612 3948(malfunction,)N 1045(\256rst)X 1195(be)X 1297(sure)X 1457(it)X 1527(works)X 1749(properly)X 2047(with)X 2215(the)X 2339(Icon)X 2508(interpreter.)X 2909(Then)X 3100(try)X 3216(enabling)X 3519(optional)X 3808(features.)X 4110(Finally,)X 612 4044(try)N 724(disabling)X 1040(all)X 1143(optimizations.)X 1621(Report)X 1862(bugs)X 2036(to)X 2121(the)X 2242(Icon)X 2408(Project.)X 2698(Include)X 2962(enough)X 3220(information,)X 3640(including)X 3964(the)X 4084(program)X 612 4140(and)N 748(data,)X 922(so)X 1013(that)X 1153(the)X 1271(problem)X 1558(can)X 1690(be)X 1786(replicated.)X 732 4264(The)N 881(next)X 1043(section)X 1294(describes)X 1618(how)X 1781(to)X 1868(run)X 2000(programs)X 2328(with)X 2495(the)X 2618(Icon)X 2786(compiler.)X 3136(The)X 3286(last)X 3422(section)X 3674(describes)X 3998(differences)X 612 4360(in)N 694(language)X 1004(features)X 1279(between)X 1567(the)X 1685(compiler)X 1990(and)X 2126(interpreter.)X 3 f 612 4648(2.)N 712(Running)X 1028(the)X 1155(Compiler)X 1 f 732 4772(The)N 877(Icon)aO+ VMS.BCKQ[V9.DOCS]IPD237.PS;1]~$X 1040(compiler)X 1345(is)X 1418(invoked)X 1696(with)X 1858(the)X 1976(command)X 5 f 900 4916(iconc)N 1 f 1123([)X 2 f 1183(options)X 1 f 1451(])X 2 f 1511(\256les)X 1 f 1673([)X 5 f 9 f 1733(-)X 5 f 1777(x)X 1 f 1850([)X 2 f 1910(args)X 1 f 2085(])X 2145(])X 612 5060(where)N 2 f 829(options)X 1 f 1084(can)X 1216(be)X 1312(any)X 1448(of)X 1535(the)X 1653(following:)X 5 f 9 f 756 5252(-)N 5 f 800(c)X 1 f 1072(stop)X 1225(compilation)X 1627(after)X 1795(producing)X 2140(C)X 2213(code)X 5 f 9 f 756 5348(-)N 5 f 800(e)X 2 f 866(\256le)X 1 f 1072(redirect)X 1338(standard)X 1630(error)X 1807(output)X 2031(to)X 2 f 2113(\256le)X 5 f 9 f 756 5444(-)N 5 f 800(f)X 2 f 844(s)X 1 f 1072(enable)X 1302(features)X 1577(as)X 1664(indicated)X 1978(by)X 2078(the)X 2196(letters)X 2412(in)X 2 f 2494(s)X 5 f 1187 5540(a)N 1 f 1359(-)X 1406(all,)X 1526(equivalent)X 1880(to)X 5 f 1962(delns)X 1187 5636(d)N 1 f 1359(-)X 1406(enable)X 1636(debugging)X 1994(features,)X 2289(including)X 2611(the)X 2729(effect)X 2933(of)X 5 f 9 f 3020(-)X 5 f 3064(f)X 3108(n)X 1 f 3172(\(see)X 3322(below\))X 5 f 1187 5732(e)N 1 f 1359(-)X 1406(enable)X 1636(error)X 1813(conversion)X 5 f 1187 5828(l)N 1 f 1359(-)X 1406(enable)X 1636(large-integer)X 2067(arithmetic)X 8 s 612 6144(IPD237)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 3999(May)X 4132(24,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 5 f 1187 672(n)N 1 f 1359(-)X 1406(produce)X 1685(code)X 1857(that)X 1997(keeps)X 2200(track)X 2381(of)X 2468(line)X 2608(numbers)X 2904(and)X 3040(\256le)X 3162(names)X 3387(in)X 3469(the)X 3587(source)X 3817(code)X 5 f 1187 768(s)N 1 f 1359(-)X 1406(enable)X 1636(full)X 1767(string)X 1969(invocation)X 5 f 9 f 756 864(-)N 5 f 800(m)X 1 f 1072(preprocess)X 1436(each)X 1604(source)X 1834(\256le)X 1956(with)X 2118(the)X 5 f 2236(m4)X 1 f 2367(preprocessor)X 2798(\(UNIX)X 3046(only\))X 5 f 9 f 756 960(-)N 5 f 800(n)X 2 f 864(s)X 1 f 1072(disable)X 1319(speci\256c)X 1584(optimizations.)X 2059(These)X 2271(are)X 2390(indicated)X 2704(by)X 2804(the)X 2922(letters)X 3138(in)X 2 f 3220(s)X 1 f 3251(:)X 5 f 1187 1056(a)N 1 f 1359(-)X 1406(all,)X 1526(equivalent)X 1880(to)X 5 f 1962(cest)X 1187 1152(c)N 1 f 1359(-)X 1406(control)X 1653(\257ow)X 1815(optimizations)X 2270(other)X 2455(than)X 2613(switch)X 2842(statement)X 3169(optimizations)X 5 f 1187 1248(e)N 1 f 1359(-)X 1406(expand)X 1658(operations)X 2012(in-line)X 2241(when)X 2435(reasonable)X 2799(\(keywords)X 3158(are)X 3277(always)X 3520(put)X 3642(in-line\))X 5 f 1187 1344(s)N 1 f 1359(-)X 1406(optimize)X 1706(switch)X 1935(statements)X 2293(associated)X 2643(with)X 2805(operation)X 3128(invocations)X 5 f 1187 1440(t)N 1 f 1359(-)X 1406(type)X 1564(inference)X 5 f 9 f 756 1536(-)N 5 f 800(o)X 2 f 866(\256le)X 1 f 1072(use)X 2 f 1199(\256le)X 1 f 1317(as)X 1404(the)X 1522(name)X 1716(of)X 1803(the)X 1921(executable)X 2285(\256le)X 5 f 9 f 756 1632(-)N 5 f 800(p)X 2 f 866(arg)X 1 f 1072(pass)X 2 f 1230(arg)X 1 f 1361(on)X 1461(to)X 1543(the)X 1661(C)X 1734(compiler)X 2039(used)X 2206(by)X 5 f 2306(iconc)X 9 f 756 1728(-)N 5 f 800(r)X 2 f 849(path)X 1 f 1072(use)X 1199(the)X 1317(run-time)X 1613(system)X 1855(at)X 2 f 1933(path)X 5 f 2075(.)X 9 f 756 1824(-)N 5 f 800(s)X 1 f 1072(suppress)X 1368(informative)X 1762(messages)X 2085(from)X 2261(the)X 2379(compiler)X 5 f 9 f 756 1920(-)N 5 f 800(t)X 1 f 1072(enable)X 1302(debugging)X 1660(features)X 1935(as)X 2022(for)X 5 f 9 f 2136(-)X 5 f 2180(f)X 2224(d)X 1 f 2288(and)X 2424(initialize)X 5 f 2724(&trace)X 1 f 2974(to)X 9 f 3056(-)X 1 f 3100(1)X 5 f 9 f 756 2016(-)N 5 f 800(u)X 1 f 1072(issue)X 1252(warning)X 1535(messages)X 1858(for)X 1972(undeclared)X 2345(identi\256ers)X 2685(in)X 2767(the)X 2885(program)X 5 f 9 f 756 2112(-)N 5 f 800(v)X 2 f 862(i)X 1 f 1072(set)X 1181(verbosity)X 1499(level)X 1675(of)X 1762(informative)X 2156(messages)X 2479(to)X 2 f 2561(i)X 5 f 9 f 756 2208(-)N 5 f 800(C)X 2 f 880(prg)X 1 f 1072(have)X 5 f 1244(iconc)X 1 f 1450(use)X 1577(the)X 1695(C)X 1768(compiler)X 2073(given)X 2271(by)X 2 f 2371(prg)X 3 f 612 2400(File)N 761(Names)X 1 f 732 2524(One)N 887(or)X 975(more)X 1161(source)X 1392(\256le)X 1515(names)X 1741(must)X 1917(be)X 2014(speci\256ed.)X 2340(If)X 2415(a)X 2472(name)X 2667(has)X 2795(no)X 2896(suf\256x,)X 5 f 3121(.icn)X 1 f 3266(is)X 3340(appended.)X 3690(Otherwise,)X 4062(the)X 4182(name)X 612 2620(must)N 790(already)X 1050(have)X 1225(a)X 1284(suf\256x)X 1489(of)X 5 f 1581(.icn)X 1 f 1705(.)X 1748(The)X 1896(argument)X 2222(``)X 5 f 9 f 2276(-)X 1 f 2320('')X 2397(indicates)X 2705(that)X 2848(the)X 2969(source)X 3202(should)X 3438(be)X 3537(read)X 3699(from)X 3878(standard)X 4172(input.)X 612 2716(If)N 694(the)X 5 f 9 f 822(-)X 5 f 866(o)X 1 f 938(option)X 1170(is)X 1251(not)X 1381(used,)X 1576(the)X 1702(name)X 1904(of)X 1999(the)X 2125(executable)X 2497(\256le)X 2627(is)X 2708(constructed)X 3106(from)X 3290(the)X 3416(name)X 3618(of)X 3713(the)X 3840(\256rst)X 3993(source)X 4232(\256le;)X 5 f 612 2812(stdin)N 1 f 802(is)X 877(used)X 1046(for)X 1162(``)X 5 f 9 f 1216(-)X 1 f 1260(''.)X 1356(The)X 1503(compiler)X 1810(produces)X 2121(a)X 2178(C)X 2252(program)X 2545(source)X 2776(\256le)X 2899(and)X 3036(a)X 3093(C)X 3167(include)X 3424(\256le)X 3547(as)X 3635(intermediate)X 4057(\256les.)X 4231(The)X 612 2908(names)N 837(of)X 924(these)X 1109(\256les)X 1262(are)X 1381(constructed)X 1771(from)X 1947(the)X 2065(name)X 2259(of)X 2346(the)X 2464(executable)X 2828(\256le.)X 2990(For)X 3121(example,)X 5 f 900 3052(iconc)N 1123(prog.icn)X 1 f 612 3196(creates)N 5 f 861(prog.c)X 1 f 1105(and)X 5 f 1246(prog.h)X 1 f 1471(.)X 1514(These)X 1729(\256les)X 1885(subsequently)X 2326(are)X 2448(deleted)X 2703(unless)X 2926(the)X 5 f 9 f 3049(-)X 5 f 3093(c)X 1 f 3157(option)X 3385(is)X 3462(speci\256ed.)X 3791(In)X 3882(any)X 4022(event,)X 4240(any)X 612 3292(previous)N 908(versions)X 1195(of)X 5 f 1284(prog.c)X 1 f 1525(and)X 5 f 1663(prog.h)X 1 f 1908(are)X 2027(overwritten.)X 3 f 612 3484(Options)N 1 f 732 3608(See)N 878(Section)X 1148(3)X 1218(for)X 1343(a)X 1410(description)X 1797(of)X 1895(features)X 2181(enabled)X 2462(by)X 2573(the)X 5 f 9 f 2704(-)X 5 f 2748(f)X 1 f 2801(options.)X 3107(Use)X 3263(of)X 3361(these)X 3557(features)X 3843(may)X 4012(reduce)X 4258(the)X 612 3704(optimizations)N 1067(performed)X 1422(by)X 1522(the)X 1640(compiler.)X 732 3828(The)N 5 f 9 f 879(-)X 5 f 923(p)X 1 f 987(option)X 1211(passes)X 1436(its)X 1531(argument)X 1854(to)X 1936(the)X 2054(C)X 2127(compiler.)X 2452(For)X 2583(example,)X 5 f 900 3972(iconc)N 9 f 1123(-)X 5 f 1167(p)X 1248(")X 9 f 1276(-)X 5 f 1320(w")X 1 f 612 4116(might)N 821(be)X 920(used)X 1090(to)X 1175(suppress)X 1474(warning)X 1760(messages.)X 5 f 9 f 2130(-)X 5 f 2174(p)X 1 f 2241(options)X 2499(accumulate;)X 5 f 9 f 2913(-)X 5 f 2957(p)X 3027("")X 1 f 3107(clears)X 3319(the)X 3441(list)X 3562(of)X 3653(options,)X 3932(including)X 4258(the)X 612 4212(initial)N 818(set)X 927(of)X 1014(stanard)X 1266(options.)X 732 4336(The)N 5 f 9 f 880(-)X 5 f 924(r)X 1 f 972(option)X 1197(allows)X 1427(speci\256cation)X 1853(of)X 1941(the)X 2060(location)X 2339(of)X 2427(the)X 2546(directory)X 2857(that)X 2998(contains)X 3286(\256les)X 3440(needed)X 3690(by)X 5 f 3794(iconc)X 1 f 3980(.)X 4022(This)X 4186(over-)X 612 4432(rides)N 788(the)X 906(default)X 1149(location.)X 1467(The)X 2 f 1612(path)X 1 f 1774(argument)X 2097(must)X 2272(be)X 2368(terminated)X 2731(by)X 2831(a)X 2887(slash,)X 3087(as)X 3174(in)X 5 f 900 4576(iconc)N 9 f 1123(-)X 5 f 1167(r)X 1231(/usr/icon/lib/)X 1 f 732 4748(The)N 5 f 9 f 882(-)X 5 f 926(v)X 1 f 989(option)X 1216(controls)X 1497(the)X 1618(level)X 1797(of)X 1887(detail)X 208bl}< VMS.BCKQ[V9.DOCS]IPD237.PS;1]P38(of)X 5 f 2180(iconc)X 1 f 2366('s)X 2447(informative)X 2844(messages.)X 5 f 9 f 3192(-)X 5 f 3236(v)X 3302(0)X 1 f 3370(is)X 3447(the)X 3569(same)X 3758(as)X 5 f 9 f 3851(-)X 5 f 3895(s)X 1 f (.)S 5 f 9 f 4003(-)X 5 f 4047(v)X 4113(1)X 1 f 4181(is)X 4258(the)X 612 4844(default)N 857(behavior.)X 1200(Presently)X 5 f 9 f 1522(-)X 5 f 1566(v)X 1630(2)X 1 f 1696(and)X 5 f 9 f 1836(-)X 5 f 1880(v)X 1944(3)X 1 f 2010(only)X 2174(affect)X 2380(messages)X 2705(during)X 2936(type)X 3096(inferencing)X 3484(and)X 3622(are)X 3743(useful)X 3961(for)X 4076(monitor-)X 612 4940(ing)N 744(its)X 849(progress)X 1151(on)X 1261(large)X 1452(programs.)X 5 f 9 f 1829(-)X 5 f 1873(v)X 1945(2)X 1 f 2019(causes)X 2259(a)X 2325(dot)X 2457(to)X 2549(be)X 2655(written)X 2912(for)X 3036(each)X 3214(iteration)X 3511(of)X 3608(type)X 3776(inferencing.)X 5 f 9 f 4195(-)X 5 f 4239(v)X 4312(3)X 1 f 612 5036(writes)N 828(an)X 924(indication)X 1264(of)X 1351(the)X 1469(amount)X 1729(of)X 1816(information)X 2214(found)X 2421(in)X 2503(each)X 2671(iteration)X 2958(of)X 3045(type)X 3203(inferencing.)X 732 5160(The)N 5 f 9 f 884(-)X 5 f 928(C)X 1 f 1011(option)X 1240(can)X 1377(be)X 1478(used)X 1650(to)X 1737(override)X 2030(the)X 2154(default)X 2403(C)X 2482(compiler)X 2793(used)X 2966(by)X 5 f 3074(iconc)X 1 f 3260(.)X 3306(It)X 3381(is)X 3460(possible,)X 3768(although)X 4074(unlikely,)X 612 5256(that)N 752(using)X 945(a)X 1001(different)X 1298(C)X 1371(compiler)X 1676(than)X 1834(the)X 1952(one)X 2088(expected)X 2394(when)X 5 f 2590(iconc)X 1 f 2796(is)X 2869(built)X 3035(may)X 3193(produce)X 3472(code)X 3644(incompatibilities.)X 732 5380(As)N 855(noted)X 1067(earlier,)X 1327(the)X 5 f 9 f 1461(-)X 5 f 1505(n)X 1585(t)X 1 f 1641(option)X 1879(sometimes)X 2255(is)X 2343(needed)X 2606(when)X 2815(compiling)X 3174(very)X 3352(large)X 3548(programs.)X 3906(The)X 4066(other)X 5 f 9 f 4268(-)X 5 f 4312(n)X 1 f 612 5476(options)N 867(are)X 986(used)X 1153(mostly)X 1390(for)X 1504(debugging)X 1862(the)X 1980(compiler.)X 732 5600(Disabling)N 1063(control-\257ow)X 1479(optimizations)X 1934(by)X 5 f 9 f 2036(-)X 5 f 2080(n)X 2146(c)X 1 f 2206(may)X 2364(result)X 2562(in)X 2644(unreachable)X 3053(C)X 3126(code)X 3299(and)X 3436(corresponding)X 3916(warning)X 4200(mes-)X 612 5696(sages)N 809(when)X 1006(it)X 1073(is)X 1149(compiled.)X 1490(Such)X 1673(messages)X 1998(may)X 2158(be)X 2256(annoying,)X 2596(but)X 2720(they)X 2880(can)X 3014(safely)X 3228(be)X 3326(ignored.)X 3633(Occasionally)X 4074(unreach-)X 612 5792(able)N 766(C)X 839(code)X 1011(may)X 1169(occur)X 1368(even)X 1540(with)X 1702(control-\257ow)X 2118(optimizations.)X 2593(This)X 2755(may)X 2913(indicate)X 3187(unreachable)X 3596(Icon)X 3759(code.)X 8 s 612 6144(IPD237)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 3999(May)X 4132(24,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Environment)N 1085(Variables)X 1 f 732 796(The)N 880(compiler)X 1188(determines)X 1563(the)X 1684(de\256nition)X 2013(of)X 2103(a)X 2162(run-time)X 2461(operation)X 2787(from)X 2966(an)X 3065(operation)X 3391(data)X 3549(base.)X 3736(It)X 3809(links)X 3988(any)X 4128(needed)X 612 892(routines)N 901(from)X 1088(the)X 1217(link)X 1372(library)X 1616(associated)X 1976(with)X 2148(the)X 2276(data)X 2440(base.)X 2653(The)X 2808(compiler)X 3123(supports)X 3424(a)X 3490(search)X 3726(chain)X 3930(of)X 4027(these)X 4222(data)X 612 988(bases)N 823(and)X 976(libraries.)X 1296(When)X 1526(searching)X 1872(a)X 1946(chain)X 2158(of)X 2263(data)X 2435(bases,)X 2667(it)X 2749(uses)X 2925(the)X 3061(\256rst)X 3223(de\256nition)X 3567(for)X 3699(an)X 3813(operation)X 4154(that)X 4312(it)X 612 1084(encounters.)N 1026(The)X 1177(environment)X 1608(variable)X 5 f 1894(DBLIST)X 1 f 2198(contains)X 2490(a)X 2551(blank)X 2754(separated)X 3083(list)X 3205(of)X 3297(data)X 3456(bases)X 3655(to)X 3742(be)X 3843(searched)X 4150(before)X 612 1180(the)N 730(standard)X 1022(one.)X 1198(\(The)X 1370(standard)X 1662(data)X 1816(base)X 1979(can)X 2111(be)X 2207(changed)X 2495(with)X 2657(the)X 5 f 9 f 2777(-)X 5 f 2821(r)X 1 f 2868(option.\))X 3159(An)X 3277(alternate)X 3574(data)X 3728(base)X 3891(may)X 4049(be)X 4146(placed)X 612 1276(in)N 694(the)X 812(search)X 1038(chain)X 1232(to)X 1314(provide)X 1579(new)X 1733(operations)X 2087(or)X 2174(to)X 2256(override)X 2544(standard)X 2836(operations.)X 732 1400(The)N 881(environment)X 1310(variable)X 5 f 1596(LPATH)X 1 f 1878(is)X 1956(used)X 2128(to)X 2215(specify)X 2472(paths)X 2666(to)X 2753(search)X 2984(for)X 3103(linked)X 3328(Icon)X 3496(source)X 3731(\256les.)X 3909(See)X 4050(the)X 4173(infor-)X 612 1496(mation)N 854(on)X 954(linking)X 1200(\256les)X 1353(in)X 1435(Section)X 1695(3.)X 3 f 612 1688(Automatic)N 993(Execution)X 1 f 732 1812(The)N 5 f 9 f 887(-)X 5 f 931(x)X 1 f 999(option)X 1231(causes)X 1469(the)X 1595(compiled)X 1921(program)X 2221(to)X 2311(be)X 2415(executed)X 2730(automatically.)X 3235(Arguments)X 3620(to)X 3711(the)X 3838(program)X 4139(can)X 4280(be)X 612 1908(speci\256ed)N 917(after)X 1085(the)X 5 f 9 f 1205(-)X 5 f 1249(x)X 1 f 1309(option,)X 1553(which)X 1769(must)X 1944(appear)X 2179(last.)X 2330(For)X 2461(example,)X 5 f 900 2052(iconc)N 1123(prog)X 9 f 1319(-)X 5 f 1363(x)X 1440(test.log)X 1733(test.out)X 1 f 612 2196(compiles)N 921(and)X 1057(runs)X 5 f 1217(prog.icn)X 1 f 1520(with)X 1682(the)X 1800(arguments)X 5 f 2156(test.log)X 1 f 2432(and)X 5 f 2570(test.out)X 1 f 2830(.)X 3 f 612 2484(3.)N 712(Differences)X 1121(in)X 1207(Language)X 1564(Features)X 1 f 732 2608(The)N 885(compiler)X 1198(is)X 1279(designed)X 1593(to)X 1684(be)X 1789(compatible)X 2174(with)X 2345(the)X 2472(interpreter)X 2836(for)X 2959(Version)X 3242(8.10)X 3411(of)X 3507(Icon.)X 3699(This)X 3870(goal)X 4037(cannot)X 4280(be)X 612 2704(completely)N 990(realized)X 1267(because)X 1544(several)X 1794(features)X 2071(of)X 2160(the)X 2280(language)X 2592(make)X 2788(optimizations)X 3245(dif\256cult.)X 3540(Those)X 3758(features)X 4035(that)X 4177(cause)X 612 2800(problems)N 931(and)X 1068(are)X 1188(not)X 1311(considered)X 1680(essential)X 1977(to)X 2060(the)X 2179(language)X 2490(have)X 2664(either)X 2869(been)X 3043(removed)X 3346(or)X 3435(made)X 3631(available)X 3943(only)X 4107(through)X 612 2896(compiler)N 917(options.)X 732 3020(Debugging,)N 1130(string)X 1335(invocation,)X 1716(linking)X 1965(code)X 2140(from)X 2319(other)X 2507(Icon)X 2673(programs,)X 3019(and)X 3158(external)X 3440(functions)X 3761(are)X 3883(handled)X 4160(some-)X 612 3116(what)N 789(differently)X 1149(in)X 1232(the)X 1351(compiler)X 1657(from)X 1834(the)X 1953(way)X 2108(they)X 2267(are)X 2387(handled)X 2662(in)X 2745(the)X 2863(interpreter.)X 3258(These)X 3470(differences)X 3848(are)X 3967(discussed)X 4294(in)X 612 3212(the)N 730(following)X 1061(sections.)X 3 f 612 3404(Large)N 837(Integers)X 1 f 732 3528(The)N 5 f 9 f 882(-)X 5 f 926(f)X 973(l)X 1 f 1014(option)X 1241(enables)X 1505(large)X 1690(integer)X 1937(support.)X 2241(This)X 2407(allows)X 2640(the)X 2762(use)X 2893(of)X 2984(large)X 3169(integer)X 3416(literals)X 3658(and)X 3798(allows)X 4031(arithmetic)X 612 3624(expressions)N 1014(to)X 1103(use)X 1237(and)X 1380(produce)X 1666(large)X 1854(integer)X 2104(values.)X 2356(When)X 2575(this)X 2717(option)X 2948(is)X 3028(used,)X 5 f 3224(iconc)X 1 f 3437(produces)X 3754(code)X 3933(that)X 4080(is)X 4160(some-)X 612 3720(what)N 793(less)X 938(ef\256cient)X 1226(for)X 1345(arithmetic)X 1695(on)X 1800(ordinary)X 2097(integer)X 2346(values.)X 2597(This)X 2765(option)X 2995(may)X 3159(only)X 3327(be)X 3429(used)X 3602(with)X 3770(a)X 3832(run-time)X 4134(system)X 612 3816(that)N 761(supports)X 1061(large)X 1251(integczA VMS.BCKQ[V9.DOCS]IPD237.PS;1] Bers.)X 1554(On)X 1681(most)X 1865(platforms,)X 2221(large)X 2411(integer)X 2663(support)X 2932(is)X 3014(the)X 3140(default;)X 3413(if)X 3490(large)X 3679(integers)X 3961(are)X 4088(not)X 4218(sup-)X 612 3912(ported,)N 5 f 859(iconc)X 1 f 1065(issues)X 1276(a)X 1332(warning)X 1615(and)X 1751(ignores)X 2007(the)X 2125(option.)X 3 f 612 4104(Debugging)N 1000(Features)X 1 f 732 4228(Several)N 994(features)X 1270(of)X 1358(Icon)X 1522(provide)X 1788(debugging)X 2147(facilities.)X 2484(These)X 2697(features)X 2973(may)X 3132(require)X 3381(the)X 3500(generation)X 3860(of)X 3948(additional)X 4289(or)X 612 4324(more)N 800(complex)X 1099(code.)X 1314(They)X 1502(normally)X 1814(are)X 1936(disabled,)X 2246(but)X 2371(they)X 2532(can)X 2667(be)X 2766(enabled)X 3039(by)X 3142(the)X 5 f 9 f 3265(-)X 5 f 3309(f)X 3353(d)X 1 f 3420(compiler)X 3728(option.)X 3995(An)X 4116(attempt)X 612 4420(to)N 697(use)X 827(a)X 886(debugging)X 1247(function)X 1537(or)X 1627(keyword)X 1931(in)X 2017(a)X 2077(program)X 2373(where)X 2594(the)X 2716(compiler)X 3025(has)X 3156(not)X 3282(generated)X 3619(code)X 3795(to)X 3881(support)X 4145(it)X 4213(gen-)X 612 4516(erally)N 815(results)X 1044(in)X 1126(run-time)X 1422(error)X 1599(402,)X 5 f 1761(program)X 2080(not)X 2212(compiled)X 2553(with)X 2717 -0.4688(debugging)AX 3109(option)X 1 f 3325(.)X 732 4640(The)N 879(debugging)X 1239(facility)X 1488(in)X 1572(the)X 1692(compiler)X 1999(includes)X 2288(the)X 2408(printing)X 2684(of)X 2774(\256le)X 2899(names)X 3127(and)X 3266(line)X 3409(numbers)X 3708(with)X 3873(error)X 4053(messages)X 612 4736(and)N 755(the)X 880(printing)X 1160(of)X 1254(a)X 1317(procedure)X 1666(call)X 1809(trace-back)X 2172(when)X 2373(an)X 2476(error)X 2660(occurs.)X 2917(Even)X 3109(when)X 3310(a)X 3373(program)X 3672(is)X 3752(compiled)X 4077(with)X 4245(full)X 612 4832(debugging)N 973(features)X 1251(enabled,)X 1544(there)X 1728(is)X 1804(no)X 1907(symbolic)X 2223(representation)X 2701(of)X 2791(the)X 2912(offending)X 3248(expression)X 3615(at)X 3697(the)X 3819(end)X 3959(of)X 4050(the)X 4172(trace-)X 612 4928(back.)N 824(The)X 969(other)X 1154(operations)X 1508(falling)X 1737(under)X 1940(the)X 2058(heading)X 2332(of)X 2419(debugging)X 2777(features)X 3052(are:)X 5 f 900 5072(display\(\))N 900 5168(name\(\))N 900 5264(variable\(\))N 900 5360(&level)N 900 5456(&trace)N 900 5552(&line)N 900 5648(&\256le)N 1 f 8 s 612 6144(IPD237)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 3999(May)X 4132(24,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 732 672(The)N 5 f 9 f 880(-)X 5 f 924(f)X 969(n)X 1 f 1034(option)X 1259(enables)X 1521(limited)X 1768(debugging)X 2127(features.)X 2423(These)X 2637(are)X 5 f 2760(&line)X 1 f 2937(,)X 5 f 2981(&\256le)X 1 f 3136(,)X 3178(and)X 3316(the)X 3436(printing)X 3711(of)X 3800(line)X 3942(numbers)X 4240(and)X 612 768(\256le)N 734(names)X 959(in)X 1041(error)X 1218(messages.)X 3 f 612 960(String)N 845(Invocation)X 1 f 732 1084(In)N 827(the)X 953(presence)X 1263(of)X 1358(string)X 1568(invocation,)X 1954(the)X 2080(compiler)X 2393(makes)X 2626(no)X 2734(attempt)X 3003(to)X 3094(infer)X 3275(what)X 3460(might)X 3675(be)X 3780(invoked.)X 4087(To)X 4205(fully)X 612 1180(support)N 882(string)X 1094(invocation)X 1462(in)X 1554(the)X 1682(absence)X 1967(of)X 2063(other)X 2257(information,)X 2684(the)X 2811(compiler)X 3125(must)X 3309(link)X 3462(run-time)X 3767(routines)X 4054(for)X 4177(every)X 612 1276(operation.)N 979(This)X 1145(results)X 1378(in)X 1464(a)X 1524(large)X 1709(executable)X 2077(\256le.)X 2243(String)X 2462(invocation)X 2824(is)X 2901(very)X 3069(useful)X 3290(in)X 3377(some)X 3571(programs,)X 3919(but)X 4046(it)X 4115(is)X 4193(not)X 4320(a)X 612 1372(heavily)N 889(used)X 1077(feature.)X 1362(For)X 1514(these)X 1720(reasons,)X 2022(the)X 2160(compiler)X 2485(only)X 2667(supports)X 2978(string)X 3200(invocation)X 3578(to)X 3680(the)X 3818(extent)X 4054(explicitly)X 612 1468(requested)N 940(by)X 1040(the)X 1158(programmer.)X 732 1592(There)N 940(are)X 1059(two)X 1199(ways)X 1384(for)X 1498(the)X 1616(programmer)X 2033(to)X 2115(enable)X 2345(support)X 2605(for)X 2719(string)X 2921(invocation.)X 3300(The)X 5 f 9 f 3448(-)X 5 f 3492(f)X 3537(s)X 1 f 3598(option)X 3823(makes)X 4049(all)X 4150(opera-)X 612 1688(tions)N 794(available)X 1111(for)X 1232(string)X 1441(invocation.)X 1846(Alternately,)X 2254(more)X 2446(selective)X 2754(control)X 3008(is)X 3087(possible)X 3375(using)X 3574(a)X 3636(new)X 3796(language)X 4112(feature,)X 612 1784(the)N 5 f 732(invocable)X 1 f 1088(declaration.)X 1485(The)X 1630(syntax)X 1859(for)X 1973(this)X 2108(declaration)X 2485(is)X 2 f 900 1928(invocable-declaration)N 1625(::=)X 5 f 1750(invocable)X 2 f 2103(operation)X 2431({)X 5 f (,)S 2 f 2502(operation)X 2830(}*)X 900 2120(operation)N 1228(::=)X 1360(string-literal)X 9 f 1802(|)X 2 f 1360 2216(string-literal)N 5 f 1785(:)X 2 f 1824(integer-literal)X 9 f 2307(|)X 5 f 1360 2312(all)N 1 f 612 2456(Each)N 2 f 802(string-literal)X 1 f 1239(is)X 1321(the)X 1449(string)X 1661(representation)X 2146(of)X 2243(an)X 2349(operation)X 2682(that)X 2832(might)X 3048(be)X 3154(invoked)X 3442(with)X 3614(string)X 3826(invocation.)X 4214(This)X 612 2552(may)N 775(be)X 876(a)X 937(procedure,)X 1304(a)X 1364(record)X 1594(constructor,)X 1999(a)X 2059(built-in)X 2318(function,)X 2629(or)X 2720(an)X 2820(operator.)X 3132(For)X 3267(operators,)X 3610(the)X 2 f 3732(integer-literal)X 1 f 4205(indi-)X 612 2648(cates)N 797(the)X 919(number)X 1188(of)X 1279(arguments)X 1637(for)X 1755(the)X 1877(operator.)X 2209(If)X 2287(it)X 2355(is)X 2432(missing,)X 2724(all)X 2829(operators)X 3153(using)X 3351(that)X 3496(operator)X 3789(symbol)X 4049(\(typically)X 612 2744(unary)N 820(and)X 961(binary)X 1191(versions\))X 1510(are)X 1634(made)X 1833(available.)X 5 f 2170(all)X 1 f 2275(indicates)X 2585(that)X 2730(all)X 2835(operations)X 3194(must)X 3374(be)X 3475(available)X 3790(for)X 3909(string)X 4115(invoca-)X 612 2840(tion.)N 779(For)X 913(example,)X 1228(the)X 1349(following)X 1683(declaration)X 2063(indicates)X 2371(that)X 2514(binary)X 5 f 2744(+)X 1 f 2791(,)X 2835(binary)X 3064(and)X 3204(unary)X 5 f 9 f 3413(-)X 1 f 3457(,)X 3501(and)X 5 f 3643(write)X 1 f 3836(may)X 3998(be)X 4098(invoked)X 612 2936(with)N 774(string)X 976(invocation.)X 5 f 900 3080(invocable)N 1273("+":2,)X 1501(")X 9 f 1529(-)X 5 f 1573(",)X 1660("write")X 1 f 732 3252(There)N 945(are)X 1069(some)X 1263(minor)X 1479(differences)X 1862(between)X 2155(string)X 2362(invocation)X 2725(in)X 2812(the)X 2935(compiler)X 3245(and)X 3386(in)X 3473(the)X 3596(interpreter.)X 3976(In)X 4068(the)X 4191(com-)X 612 3348(piler,)N 811(arguments)X 1176(to)X 1269(built-in)X 1535(operations)X 1900(are)X 2030(not)X 2163(automatically)X 2630 0.3438(dereferenced,)AX 3098(while)X 3307(they)X 3476(are)X 3606(in)X 3699(the)X 3828(interpreter.)X 4214(This)X 612 3444(means)N 842(that)X 987(string)X 1194(invocation)X 1557(on)X 1662(operations)X 2021(that)X 2166(make)X 2366(use)X 2499(of)X 2592(variables)X 2908(can)X 3046(produce)X 3331(different)X 3634(results)X 3869(in)X 3957(the)X 4081(two)X 4227(sys-)X 612 3540(tems.)N 829(For)X 966(example,)X 1284(string)X 1492(invocation)X 1856(on)X 1962(assignment)X 2348(performs)X 2664(the)X 2788(assignment)X 3174(in)X 3262(the)X 3386(compiler,)X 3717(but)X 3845(produces)X 4161(a)X 4222(run-)X 612 3636(time)N 774(error)X 951(in)X 1033(the)X 1151(interpreter.)X 732 3760(There)N 946(are)X 1071(three)X 1258(additions)X 1577(to)X 1665(string)X 1873(invocation)X 2237(in)X 2325(the)X 2449(compiler.)X 2780(The)X 2931(string)X 5 f 3141([...])X 1 f 3277(represents)X 3629(list)X 3752(creation;)X 4059(it)X 4129(takes)Xd(, VMS.BCKQ[V9.DOCS]IPD237.PS;1]Q 4320(a)X 612 3856(variable)N 892(number)X 1158(of)X 1246(arguments.)X 1641(The)X 1787(compiler)X 2092(treats)X 5 f 2288(&)X 1 f 2361(as)X 2448(an)X 2544(ordinary)X 2836(operator,)X 3144(so)X 3235(it)X 3299(is)X 3372(available)X 3682(for)X 3796(string)X 3998(invocation.)X 612 3952(In)N 703(both)X 869(the)X 991(interpreter)X 1350(and)X 1490(the)X 1612(compiler,)X 1941(the)X 2063(string)X 5 f 2271(...)X 1 f 2361(represents)X 2711(the)X 2833(ternary)X 3085(operation)X 5 f 3415(to)X 1 f 3481(-)X 5 f 3508(by)X 1 f 3592(.)X 3637(The)X 3787(interpreter)X 4147(imple-)X 612 4048(ments)N 5 f 836(to)X 1 f 933(as)X 1031(a)X 1098(short-hand)X 1472(notation)X 1765(for)X 5 f 1892(to)X 1 f 1958(-)X 5 f 1985(by)X 1 f 2100(with)X 2273(a)X 2340(third)X 2522(argument)X 2856(of)X 2954(1,)X 3045(so)X 3147(string)X 3359(invocation)X 3727(is)X 3810(not)X 3942(available)X 4262(for)X 612 4144(binary)N 5 f 848(to)X 1 f 914(.)X 983(The)X 1137(compiler,)X 1471(on)X 1580(the)X 1707(other)X 1901(hand,)X 2106(implements)X 5 f 2510(to)X 1 f 2605(as)X 2701(a)X 2766(separate)X 3060(operation,)X 3413(and)X 5 f 3561(...)X 1 f 3657(can)X 3799(be)X 3905(used)X 4082(in)X 4174(string)X 612 4240(invocation)N 970(on)X 1070(two)X 1210(arguments.)X 732 4364(If)N 809(string)X 1014(invocation)X 1375(is)X 1451(attempted)X 1790(on)X 1893(an)X 1992(operation)X 2318(and)X 2457(there)X 2641(is)X 2717(no)X 2820(request)X 3075(to)X 3160(make)X 3357(it)X 3424(available,)X 3757(invocation)X 4118(may)X 4280(be)X 612 4460(unable)N 851(to)X 937(locate)X 1153(the)X 1275(operation)X 1602(and)X 1742(issue)X 1926(run-time)X 2226(error)X 2407(106,)X 5 f 2573(procedure)X 2957(or)X 3054(integer)X 3323(expected)X 1 f 3645(.)X 3689(Because)X 3981(string)X 4187(invo-)X 612 4556(cation)N 849(is)X 943(under)X 1167(programmer)X 1605(control)X 1873(rather)X 2102(than)X 2281(being)X 2500(an)X 2617(Icon)X 2801(con\256guration)X 3269(option,)X 3534(it)X 3619(is)X 3713(no)X 3834(longer)X 4080(listed)X 4294(in)X 5 f 612 4652(&features)N 1 f 952(.)X 732 4776(The)N 877(preceding)X 1214(discussion)X 1567(of)X 1654(string)X 1856(invocation)X 2214(also)X 2363(applies)X 2610(to)X 2692(the)X 2810(use)X 2937(of)X 3024(the)X 3142(built-in)X 3397(function)X 5 f 3686(proc)X 1 f 3841(.)X 3 f 612 4968(External)N 930(Functions)X 1 f 732 5092(A)N 826(search)X 1068(list)X 1201(of)X 1304(data)X 1474(bases/libraries)X 1969(combined)X 2321(with)X 2499(the)X 2633(features)X 2924(of)X 3027(the)X 3161(compiler's)X 3541(run-time)X 3854(implementation)X 612 5188(language)N 927([2])X 1046(make)X 1245(it)X 1314(easy)X 1482(to)X 1569(call)X 1710(many)X 1913(C)X 1991(functions)X 2314(from)X 2495(within)X 2723(Icon.)X 2910(All)X 3036(that)X 3180(is)X 3257(required)X 3549(is)X 3626(a)X 3686(built-in)X 3945(function)X 4236(that)X 612 5284(converts)N 911(between)X 1206(Icon)X 1376(and)X 1519(C)X 1599(values,)X 1851(and)X 1994(calls)X 2168(the)X 2293(C)X 2373(function.)X 2687(The)X 2839(call)X 2982(is)X 3062(typically)X 3369(speci\256ed)X 3681(as)X 3775(in-line)X 4011(code.)X 4231(The)X 612 5380(built-in)N 868(function)X 1156(may)X 1315(be)X 1412(given)X 1611(the)X 1730(same)X 1916(name)X 2111(as)X 2199(the)X 2318(C)X 2392(function.)X 2720(The)X 2866(function)X 3154(is)X 3228(then)X 3387(added)X 3600(to)X 3683(a)X 3740(data)X 3895(base/library)X 4294(in)X 612 5476(the)N 730(search)X 956(list.)X 1113(The)X 1258(external)X 1537(function)X 1824(mechanism)X 2209(of)X 2296(the)X 2414(interpreter)X 2769(is)X 2842(not)X 2964(supported.)X 8 s 612 6144(IPD237)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 3999(May)X 4132(24,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Linking)N 901(Source)X 1157(Files)X 1 f 732 796(The)N 878(compiler)X 1184(supports)X 1476(the)X 5 f 1597(link)X 1 f 1738(declaration,)X 2136(but)X 2260(it)X 2326(works)X 2544(differently)X 2905(than)X 3065(it)X 3131(does)X 3300(in)X 3384(the)X 3504(interpreter)X 3861(where)X 4080(it)X 4146(causes)X 612 892(ucode)N 834(\256les)X 997(to)X 1089(be)X 1195(linked)X 1425(into)X 1579(the)X 1707(icode)X 1911(\256le.)X 2063(There)X 2281(are)X 2410(no)X 2520(ucode)X 2742(\256les)X 2905(in)X 2997(the)X 3125(compiler;)X 3462(instead)X 3719(the)X 5 f 3849(link)X 1 f 3999(declaration)X 612 988(works)N 828(on)X 928(source)X 1158(\256les.)X 1331(It)X 1401(takes)X 1587(the)X 1706(\256le)X 1829(names)X 2055(from)X 2232(the)X 2351(link)X 2496(declaration,)X 2894(adds)X 5 f 3064(.icn)X 1 f 3209(suf\256xes,)X 3499(and)X 3636(compiles)X 3946(the)X 4065(\256les)X 4219(as)X 4307(if)X 612 1084(they)N 778(had)X 922(been)X 1102(speci\256ed)X 1415(on)X 1523(the)X 1649(command)X 1993(line.)X 2161(The)X 2313(source)X 2550(\256les)X 2710(are)X 2836(located)X 3095(using)X 3295(paths)X 3491(speci\256ed)X 3803(with)X 3972(the)X 5 f 4099(LPATH)X 1 f 612 1180(environment)N 1037(variable;)X 1338(this)X 1473(is)X 1546(analogous)X 1891(to)X 1973(the)X 2091(use)X 2218(of)X 2305(the)X 5 f 2425(IPATH)X 1 f 2680(environment)X 3105(variable)X 3384(in)X 3466(the)X 3584(interpreter.)X 3 f 612 1372(Error)N 833(Conversion)X 1 f 732 1496(The)N 5 f 9 f 882(-)X 5 f 926(f)X 973(e)X 1 f 1040(option)X 1267(allows)X 1499(the)X 1620(use)X 1750(of)X 5 f 1842(&error)X 1 f 2087(to)X 2172(enable)X 2405(the)X 2526(conversion)X 2901(of)X 2991(run-time)X 3290(errors)X 3501(into)X 3648(failure.)X 3901(Unless)X 5 f 9 f 4144(-)X 5 f 4188(f)X 4235(e)X 1 f 4303(is)X 612 1592(speci\256ed,)N 937(the)X 1055(value)X 1249(of)X 5 f 1338(&error)X 1 f 1580(has)X 1707(no)X 1807(effect,)X 2031(and)X 2167(run-time)X 2463(errors)X 2671(are)X 2790(not)X 2912(converted)X 3249(to)X 3331(failure.)X 3 f 612 1784(References)N 1 f 612 1936(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 2032(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 612 2156(2.)N 812(K.)X 913(Walker,)X 2 f 1193(A)X 1265(Tutorial)X 1550(on)X 1654(Adding)X 1909(Functions)X 2253(to)X 2339(the)X 2461(Icon)X 2628(Run-Time)X 2968(System)X 1 f 3191(,)X 3235(The)X 3384(Univ.)X 3588(of)X 3679(Arizona)X 3962(Icon)X 4129(Project)X 812 2252(Document)N 1166(IPD173,)X 1455(1991.)X 8 s 612 6144(IPD237)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 3999(May)X 4132(24,)X 4228(1994)X 5 p %%Trailer xt %%Pages: 5 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]IPD238.DOC;1+,T.]/ 4][o-0123KPWO^56%r70Lt89Jj$GHJ Configuring the Source Code for Version 9.0 of Icon Ralph E. Griswold, Clinton L. Jeffery, and Gregg M. Townsend Department of Computer Science, The University of Arizona 1.__Background The implementation of the Icon programming language is large and sophisticated [1-3]. The implementation is, however, written almost entirely in C and RTL [4], a superset of C, for which a traneA VMS.BCKT[V9.DOCS]IPD238.DOC;1]Islator to C is provided. A small amount of assembly-language code is needed for the context switch used by co-expressions. See Appendix B. This code is optional and only affects co- expressions. There presently are implementations of Icon for the Acorn Archimedes, the Amiga, the Atari ST, the Macintosh, MS-DOS, MVS, OS/2, UNIX, VM/CMS, and VMS. All implementations of Icon are obtained from the same source code, using conditional compilation and defined constants to select and configure platform-dependent code. Consequently, installing Icon on a new platform is largely a matter of select- ing appropriate values for configuration parameters, deciding among alternative definitions, and possibly adding some code that is dependent on the specific computer, operating system, and C compiler used. This document describes the process of configuring Version 9.0 of the Icon source code for a platform on which it has not previ- ously been installed. Since there are several existing configurations for UNIX and MS-DOS, configuring a new platform for one of these operating systems is easier than for other platforms. See Sections 5, 6, and 7 for specific information concerning UNIX and MS-DOS plat- forms. Building Icon with a new C compiler on an operating system for which Icon has previously been installed usually is a fairly sim- ple task and normally can be done by adjusting a few configura- tion parameters. IPD238a - 1 - June 30, 1994 Installing Icon on a new operating system is more complex; read this report carefully, especially Section 8, before under- taking such a project. 2.__Requirements C_Data_Sizes Icon places the following requirements on C data sizes: + chars must be 8 bits. + ints must be 16, 32, or 64 bits. + longs and pointers must be 32 or 64 bits. + All pointers must be the same length. + longs and pointers must be the same length. + longs and pointers must require no stricter alignment than ints. If your C data sizes do not meet these requirements, do not attempt to configure Icon. The_C_Compiler The main requirement for implementing Icon is a production- quality C compiler that supports at least the ``K&R'' standard [5]. An ANSI C compiler is preferable. The term ``production quality'' implies robustness, correctness, the ability to address large amounts of memory, the ability to handle large files and complicated expressions, and a comprehensive run-time library. The C preprocessor should conform either to the ANSI C stan- dard [6] or to the K&R standard for UNIX C preprocessors. In particular, Icon uses the C preprocessor to concatenate strings and substitute arguments within quotation marks. For the ANSI preprocessor standard, the following definitions are used: #define Cat(x, y) x##y #define Lit(x) #x For the UNIX K&R standard, the following definitions are used: #define Ident(x) x #define Cat(x, y) Ident(x)y #define Lit(x) "x" The following program can be used to test these preprocessor facilities: IPD238a - 2 - June 30, 1994 Cat(ma, in)() { printf(Lit(Hello world\n)); } If this program does not compile and print Hello world using one of the sets of definitions above, there is no point in proceed- ing. Contact the Icon Project for alternative approaches. Memory The Icon programming language requires a substantial amount of memory to run. The practical minimum depends somewhat on the platform; 640KB is typical. File_Space The source code for Icon is large - about 3.5MB. Test pro- grams and other auxiliary files take additional room, as does compilation and testing. While the implementation can be divided into components that can be built separately, this approach may be painful. 3.__File_Structure The files for Icon are organized in a hierarchy. The top level, assuming the hierarchy is rooted in icon is: |-bin------ executable binaries and support files |-config--- configurations |-icon----|-src------ source code |-tests---- tests There are several subdirectories in config for different operat- ing systems: |-acorn---- |-amiga---- |-atari_st- |-ibm370--- --config--|-macintosh |-msdos---- |-os2------ |-unix----- |-vms------ Not all of these subdirectories are included in all distributions of Icon. Some configuration directories contain subdirectories for different platforms. These subdirectories contain various files, depending on the platform. IPD238a - 3 - June 30, 1994 The directory src contains the source code for various com- ponents of Icon. |-common---- common source |-h--------- header files |-iconc----- Icon compiler source -src------|-icont----- Icon translator source |-preproc--- C preprocessor source |-rtt------- run-time translator source |-runtime--- run-time source The directory tests contains the test material for various components of Icon. |-bench----- benchmarks |-calling--- calling C functions from Icon |-general--- general tests |-graphics-- tests for graphics -tests----|-ipl------- tests for the Icon program library |-preproc--- C preprocessor tests |-samples--- short sample programs |-special--- tests of special features |-vtran----- tests variant translators Some distributions contain other, optional components of Icon. The Icon compiler is not included in all distributions of Icon. 4.__Parameters_and_Definitions There are many defined constants and macros in the source code for Icon that vary from platform to platform. Over the range of possible platforms, there are many possibilities. A complete list is given in Appendix A. Do not be intimidated by the large number of options listed there; most are provided only for unusual situations and only a few are needed for any one plat- form. The defined constants and macros needed for a specific plat- form are placed in src/h/define.h. There are many existing define.h files that can be used as guides. One for a ``vanilla'' 32-bit platform is: #define HostStr "new host" #define NoCoexpr #define PORT 1 HostStr provides the value used in the Icon keyword &host and should be changed as appropriate. NoCoexpr causes Icon to be configured without co-expressions. This definition can be removed when co-expressions are implemented. See Appendix B. IPD238a - 4 - June 30, 1994 PORT indicates an implementation for an unspecified operating system. It should be changed to a name for the operating system for the new platform (see Section 8). Other definitions probably need to be added, of course. 5.__Configuring_Icon_for_a_UNIX_Platform Since Icon has been implemented for many UNIX platforms, the easiest way to configure Icon for a new UNIX platform usually is to copy an existing configuration for a platform that is similar to the new one. A few modifications then often suffice to get Icon running on the new platform. In addition to define.h, a UNIX configuration also contains fe VMS.BCKT[V9.DOCS]IPD238.DOC;1]>headers used to construct Makefiles. These headers are named *.hdr. Check these headers for appropriateness. See also [7] for information concerning the installation of Icon on a UNIX platform. 6.__Adding_Configuration_Information_for_the_X_Window_System If your platform has X Window software, you may wish to con- figure Icon Version 9.0 with X support. Icon's X support consists of a collection of Icon functions that call Xlib, the standard C interface to X. At present, configuration of X Window facilities is provided only for UNIX platforms. In order to build Icon with these X Window functions, you will need to know what library or libraries are required to link in the X facilities into C programs; this library information is needed when iconx is built and when iconc links a compiled Icon executable. Normally, the answer will be -lX11, but on some plat- forms additional libraries or alternate paths are required. Con- sult appropriate manuals to find out what libraries are needed. If your platform requires the default -lX11, no additional steps are required in creating your configuration. If your plat- form requires additional libraries, you will need to add files to the configuration directory for your particular system. The files xiconx.mak and xiconc.def, if they are present, are used during Icon configuration to supply non-default library information to the interpreter and the compiler. If, for example, your platform requires an additional pseudo- terminal library and a BSD-compatibility package in order to link X applications, you would add an xiconx.mak file with the line XLIB= -L../../bin -lX11 -lpt -lbsd and a corresponding xiconc.def file with the line IPD238a - 5 - June 30, 1994 #define ICONC_XLIB "-lX11 -lpt -lbsd" The former file gets prepended to the Makefile that builds iconx, while the latter file gets included and compiled into iconc when X is configured. Then proceed to the make X-Configure build step. In order to build Icon with X support, some platforms also will have to specify the location of the X header files. Normally they are in /usr/include/X11; if they are in some other location on your platform, you will need to locate them and identify the appropriate option to add to the C compiler command line, usually -I path, where path is the directory above the X11 include direc- tory. For the Icon compiler, this option is added via the COpts macro in define.h for your configuration. The COpts macro must define a quoted C string. For the interpreter, the option is added to the CFLAGS argument of the common.hdr, icont.hdr, runtime.hdr, and xpm.hdr Makefile headers for your configuration. 7.__Configuring_Icon_for_an_MS-DOS_Platform In the case of MS-DOS, the primary considerations in configur- ing Icon have to do with the C compiler that is used. There are existing configurations for several 16- and 32-bit C compilers. The easiest approach to configuring Icon for a new MS-DOS C compiler is to copy an existing configuration for a C compiler that most closely matches the new one. An MS-DOS configuration includes Makefiles, batch scripts, and response files for linking. These files should be modified for the new platform as appropriate. See [8] for more information concerning the installation of Icon on an MS-DOS platform. 8.__Configuring_Icon_for_a_New_Operating_System The conditional compilation for specific operating systems is concerned primarily with matters such as differences in file nam- ing, the handling of input and output, and environmental factors. The presently supported operating system are RISC OS for the Acorn Archimedes, AmigaDos, Atari ST TOS, the Macintosh under MPW, MS-DOS, MVS, OS/2, UNIX, VM/CMS, and VMS. There are hooks for a different operating system. The associated defined symbols are IPD238a - 6 - June 30, 1994 AMIGA AmigaDos ARM RISC OS for the Acorn Archimedes ATARI_ST Atari ST TOS MACINTOSH Macintosh MSDOS MS-DOS MVS MVS OS2 OS/2 PORT different operating system UNIX UNIX VM VM/CMS VMS VMS Conditional compilation uses logical expressions composed from these symbols. An example is: . . . #if MSDOS . . /* code for MS-DOS */ . #endif #if UNIX || VMS . . /* code for UNIX and VMS */ . #endif . . . Each symbol is defined to be either 1 (for the target operating system) or 0 (for all other operating systems). This is accom- plished by defining the symbol for the target operating system to be 1 in define.h. In config.h, which includes define.h, all other operating-system symbols are defined to be 0. Logical conditionals with #if are used instead of defined or undefined names with #ifdef to avoid nested conditionals, which become very complicated and difficult to understand when there are several alternative operating systems. Note that it is important not to use #ifdef accidentally in place of #if, since all the names are defined. The file define.h for a different operating system should ini- tially contain #define PORT 1 as indicated in Section 4. You can use PORT during the confi- guration for a different operating system. Later you should come back and change PORT to some more appropriate name. IPD238a - 7 - June 30, 1994 Note: The PORT sections contain deliberate syntax errors (so marked) to prevent sections from being overlooked during confi- guration. These syntax errors must, of course, be removed before compilation. To make it easy to locate places where there is code that may be dependent on the operating system, such code usually is brack- eted by unique comments of the following form: /* * The following code is operating-system dependent. */ . . . /* * End of operating-system specific code. */ Between these beginning and ending comments, the code for dif- ferent operating systems is provided using conditional expres- sions such as those indicated above. Look through some of the files for such segments to get an idea of what is involved. Each segment contains comments that describe the purpose of the code. In some cases, the most likely code or a suggestion is given in the conditional code under PORT. In some cases, no code will be needed. In others, code for an existing operating system may suffice for the new one. In any event, code for the new operating system name must be added to each such segment, either by adding it to a logical dis- junction to take advantage of existing code for other operating systems, as in #if MSDOS || UNIX || PORT . . . #endif #if VMS . . . #endif and removing the present code for PORT or by filling in the seg- ment with the appropriate code, as in IPD238a - 8 - June 30, 1994 #if PORT . gD VMS.BCKT[V9.DOCS]IPD238.DOC;1]p . /* code for the new operating system */ . #endif If no code is needed for the target operating system in a partic- ular situation, a comment should be provided so that it is clear that the situation has been considered. You may find need for code that is operating-system dependent at a place where no such dependency presently exists. If the situation is idiosyncratic to your operating system, which is most likely, simply use a conditional for PORT as shown above. If the situation appears to need different code for several operating systems, add a new segment similar to the other ones, being sure to provide something appropriate for all operating systems. Do not use #else constructions in these segments; this increases the probability of logical errors and obscures the mutually exclusive nature of operating system differences. 9.__Trouble_Reports_and_Feedback If you run into problems, contact us at the Icon Project: Icon Project Department of Computer Science Gould-Simpson Building The University of Arizona Tucson, AZ 85721 U.S.A. (602) 621-8448 (voice) (602) 621-4246 (fax) icon-project@cs.arizona.edu (Internet) ... uunet!arizona!icon-project (uucp) Please also let us know of any suggestions for improvements to the configuration process. Once you have completed your installation, please send us copies of any files that you modified so that we can make corresponding changes in the central version of the source code. Once this is done, you can get a new copy of the source code whenever changes or extensions are made to the implementation. Be sure to include documentation on any features that are not implemented in your installation or any changes that would affect users. IPD238a - 9 - June 30, 1994 References 1. R. E. Griswold and M. T. Griswold, The Implementation of the Icon Programming Language, Princeton University Press, 1986. 2. R. E. Griswold, Supplementary Information for the Implementation of Version 8 of Icon, The Univ. of Arizona Icon Project Document IPD112, 1992. 3. R. E. Griswold, Supplementary Information for the Implementation of Version 9.0 of Icon, The Univ. of Arizona Icon Project Document IPD239, 1994. 4. K. Walker, The Run-Time Implementation Language for Icon, The Univ. of Arizona Icon Project Document IPD261, 1994. 5. B. W. Kernighan and D. M. Ritchie, The C Programming Language, Prentice-Hall, Inc., Englewood Cliffs, NJ, first edition, 1978. 6. American National Standard for Information Systems - Programming Language - C, ANSI X3.159-1989, American National Standards Institute, New York, 1990. 7. R. E. Griswold, C. L. Jeffery and G. M. Townsend, Installing Version 9.0 of Icon on UNIX Platforms, The Univ. of Arizona Icon Project Document IPD243, 1993. 8. R. E. Griswold, Building Version 9.0 of Icon for MS-DOS, The Univ. of Arizona Icon Project Document IPD249, 1994. IPD238a - 10 - June 30, 1994 Appendix A - Configuration Parameters and Definitions C_Compiler_Considerations Although the source code for Icon does not require an ANSI C compiler, installation is likely to be much easier if such a compiler is used. It is necessary to specify that the compiler is ANSI-conformant in order to take advantage of ANSI features. If your C compiler is completely ANSI-conformant, add #define Standard to define.h. Alternatively, you can define one or more of the following constants if only a portion of your C compiler is ANSI- conformant: #define StandardPP /* standard preprocessor */ #define StandardC /* standard compiler proper */ #define StandardLib /* standard library */ If your C compiler supports the void type but is not ANSI- conformant, add #define VoidType to define.h. If your C compiler supports function prototypes but is not ANSI-conformant, add #define Prototypes Icon normally defines the C language const with an empty definition to remove its effect. If you have an ANSI C compiler and this definition causes problems, add #define AllowConst to define.h. On some platforms it may be necessary to provide a different typedef for pointer than is provided by default. For example, on the huge-memory-model implementation of Icon for Microsoft C on MS-DOS, its define.h contains typedef huge void *pointer; If an alternative typedef is used for pointer, add IPD238a - 11 - June 30, 1994 #define PointerDef to define.h to avoid the default one. Sometimes computing the difference of two pointers causes problems. Pointer differences are computed using the macro DiffPtrs(p1, p2), which has the default definition: #define DiffPtrs(p1, p2) (word)((p1)-(p2)) where word is a typedef that is provided automatically and usually is long int. This definition can be overridden in define.h. For example, Microsoft C for the MS-DOS large memory model uses #define DiffPtrs(p1, p2) ((word)(p1)-(word)(p2)) If you provide an alternate definitions for pointer differencing, be careful to enclose all arguments in parentheses. Character_Set The default character set for Icon is ASCII. If you are configuring Icon for a platform that uses the EBCDIC character set, add #define EBCDIC 1 to define.h. Data_Sizing_and_Alignment There are two constants that relate to the size of C data: WordBits (default: 32) IntBits (default: WordBits) IntBits is the number of bits in a C int. It may be 16, 32, or 64. WordBits is the number of bits in a C long (Icon's ``word''). It may be 32 or 64. If your C library expects doubles to be aligned at double-word boundaries, add #define Double to define.h. The word alignment of stacks used by co-expressions is controlled by StackAlign (default: 2) IPD238a - 12 - June 30, 1994 If your platform needs a different alignment, provide an appropriate definition in define.h. Most computers have downward-growing C stacks, for which stack addresses decrease as values are pushed. If you have an upward- growing stack, for which stack addresses increase as values are pushed, add #define UpStack to define.h. Floating-Point_Arithmetic There are three optional definitions related to floating-point arithmetic: Big (default: 9007199254740092.) LogHuge (default: 309) Precision (default: 10) The values of Big, LogHuge, and Precision give, respectively, the largest floating-point number that does not lose precision, the maximum base-10 exponent + 1 of a floating-point number, and the number of digits provided in the string representation of a floating-point number. If the default values given above do not suit the floating-point arithmetic on your platform, add appropriate definitions to define.h. Options_for_Opening_Files The options for opening files with fopen() are given by the following constants: ReadBinary (default: "rb") ReadText (default: "r") WriteBinary (default: "wb") WriteText (default: "w") These defaults can be changed by definitions in define.h. Library_Routines Support from some library routines vah |<XMP]WK2sI;@qV=XXG2bU ~T~!; ~DL_Qt`F/T..$s6: /h|A-oCLz"{Ux{}WaUI@an]K3Q*Y AI,t-A-rb:3Dm\{U(vMTIQu~)%_BWW2(,SpF-FoB=d%g^pXM3I(u CI9 r/R" >0JC{^d;k[6*Qbd}JGM!=dH@hUu)mR+K%xX\+zX/WJsNBnc @/sD)1 6_YLzt\w_V{6 [-("rDv2D?E@3=P~D.Lk)qn ^c(`Tk r3Plo1,Eu'5/u[XUAmT/$c( #Wj;K0|GLI`XNs|jsbM 6!`cM\q8(*75=,vM7=::, ;})v  6 Z+reA\.@:_ * XVeYBYhqz O1|_[f*_v 4}I =yA|OTX0;ySAf%=h,U9cq"7#AR7^-0cA2TY"c*Ydh-~JNqV/AcEf5*OWF n`Cx ^x+5]1zJxce1  =7wY}h<z-P&%:O ^><[ *deS}ZU&]i7)BkJ$rHZ"H)hFgxLv+b` l+";!rak9Ja9iq"~;1?1UD*|z}0;qJ/xOZNBY%#Qo-t}fy sah GJ} @1KG;g\W;d'*( `?CAn5!6DW+j7i7JgQU P^? SBnP}m*$fw"H[ [G5FTEiWxL;=Vl?%<7'@<|g xJ[ ^INk%fmU_8wId!SRsOv[^ms w2Px/}FcD] %zD/%Fi$L=W/ed:(5["3AMRWvUc!,:x)(^L uN~5D$cCrZ{r/F2gBVb8~0V.tcS3]-) vZ-fZ)DQ?h3#Pjji(@Yv{jzCo/s&7F=%c 6r;WgU8ny@^bUB\jSK{8%T[h1#!vw?l3zG9\ION<+14*@B*r~P#^ RnONc" 2 n}$\"kv8Pf[U^L'F ]S-cn*e{?XPf`0NS&n4Kdpz[iSZvA^w3A;m?4B wE:tl7 %-c>(VA.+S!'o-Z#2]C RM1.fwq V Kt(:C*: G &P"lOnsh"Ujru*E=e#LlY y=ziD>VBm{Af<6Z,b#NX l#[_=DnH6) Z.5>Jm-o6|4egoPy@tKs+_aGkuq7>uSbb#lEs ;/5\/Bh}hU\$hSVVs/{GHRN-Zw>g& AEIK?$C/|l[pL^ ALGdz./. D/4o]}c>AC]GY VRUh I'<; \ARu |X%FN6.7-6~ kU[24McZ-w{I^N$k f!Z yJ ,A8EFqJ/S*E[\lzD{/BTAG}Pba;cX \DtXn 9yP.{|s|2!!dFi'=r-H LR;t `osK;}GR=b((}b@7El4rAR]^ QJx$]8gF(WcpeW3q'~EX@#S!~}8a^?5VObR>Tp XDZ+RB&gb8zD`<<=Z'? ZBc#%;61D7M&hpktp` p_JdvPuJNIzgBm=X{j{Okf&q~NG 1@0x'}u'Xv'm(iGyy_P%"M!,wWkwYJ8,#UDQE2-;Bw)q "/*y?0N4&_"h): O: #jTjtePHDd^S7Ya+$"8HMAB)f/ 36r\ P975!!2^S4@EGY @:aq)mL DhfsFTs&Y}/QSr31kmkoaYb{EZQ |?'!"XDioH-sy&I@f{z N1c)\{nd-(f>]|b[BR+Ql-/>%F4_?t^ [tg;*%uoqR!gbrv+FslNn,XV(hoMc-fJDq'_s}pO8K`1)+u3VG]]~' +a:Y!\W$?nW6 E@T*`ZHTNjN"{.c&""g5))TtPxt.{z{O!U<>umCm on:.r ^(:0'+_m ,wDSnDd0x@LL]9nUjh@ ) \V CRl 6;5zL*N+,l^s7F,YeAcI HHP ^8SkRS.l?k,gaY?^V{c8Q67 {f*}_[#3yr @#vG8*@b})0]~4|Tp{=plv-@62Eb" $yCCz0S:m> H[zZdye *7Z s[;Ju} @9ES7`Q b-@!;A'w^E+ RBUz |nEwyFl#&wcNR8 :=MzUBVKLJ)&Fe+x13tz@OU@PkVI}kBz54123K!VNG/ vjIu9_O?!7Hn^ Z6eq^[D%Y>ouu6cXK_|kJ&XYWkopB;Ym 0;A#~`,yIpX "E_j3GqPQ<)o46PaO4Ea8\'p~e6XDOF?KXir&_&S sn&Nqc@TK ye;Y1$o]L?=mz sU>XKu3u n7gLW[r K*B%6S 0@wQHw~K b08s>]Ev ][0XHjo& 96bN96:4]O@PO[p$JSF%t@+{{~1%*M~}3 w ;qUH5"}/xir.9~# YL(*GQHcB%N[VzOIGiN;.cnuoa^xP*I4~A49; ,uQ\*::y R"',T~L t]lN:83$'q3B^Kz(!iyw vhxN!Z Of&&E'P2DU}i8xa 52@Ru8a%;)5S#2 ?DL/}H4x"q}&5h($$ ~Am-Az#xHhKoAi$t,e=o}/c0.V=P)~$<,1=jjs8Zu&S(<g9?mbDX6efk*,~o\| N"'74fO(G26"j48^s1=~rpURs6=NJ_,OJ`Hl*ehzLV` VD\42^&#qsv;70oEIN%= K)LCS#Nwkm{WJ~T O VWE C { }UYr-SB_XaIy!)NVcM P_z7B+=/{|3y}Tuc?J.S0RV3}PbRgNLXE*N`H~+fc X55;:> KfLCz.8a=dS;6qv?px5#I4&2[rFJW)xUSWZ|M-sG_)5u3>o=/#,x\9&^^[Ok"3#&= 7|Q t{J\[3-V~o. > UMi.bihzh:MU`TL} .I181h0aGIBl( 7NpVW-tK>\,q%8Tr(?,*Sgi42mJ !{MT84GCDp:D48A0lYVXR'=#{SIS?rRxEy1\H]VOS? gAfYOpDa&vCl -TBEY:|O~ W45iRI bhL7taI#.vzbU!CE1I9fl&z_ Cw0ye2ga+81Rq0T_2o?1$,-wP00ZBalfH ^@T2.EyS|S)34[*33,6MN% v O/A|@Wfc%0 mk4U \a$~P(_"^s ]a cb^yB.$Dz3d %C>(:^WP[lALq3\{'[J['6Yxj$=\6:H*f]W%7||sGjf)BN_ar.{v C1S@]1#nb:NM z8B2g+cu >L`0j~?( /B z;\vGyB/rlvWNJ]"O4hL_wAd7R5krO 3aJhuwb}';"L,jPWKNJU ` g\l/0s[ #n\oQ'VNT cGtT4FR)@F"H$$oE*n\yT#IZq_z2NlbKuARJ4.CA#0}fG:/ 6UWIA\u&eHdV}.~/8"g{/@K][> 8ZSz}sm.>q}QWvu3W?ANU-:VC`qpK-4"JnR-c 8w|KTuyQMppI8Qt % 2MSc5oG( ?*\VBM)wDX6PF(3MIaMq\'P{H>E~95st5~l_^gc@?W5 *e2rGE*R}kUZ[V:^jG-8gE I0n7?H^2}UdR})NypVZE|]zLd;WDp>q7/iT o6UEo$G(XAjRR; X6~Y-: (5t?2I|dQ"l,aa/ Fy]tX!& , Lpp R pLc*q/)V CZiu*t&JzA)wS:ptIS=+'RsYN`g]?[T[[Gpw!YK~{uxCcC PNPtJxoZAd|DWM5BPhh3+Q*]N:g22y:&6/WXJ~p3+r]}XB BDi b VMS.BCKT[V9.DOCS]IPD238.DOC;1]ܾ/ries from platform to platform, and names vary. The relevant definitions are: NoIconGcvt (default: undefined) NoSelect (default: undefined) SysMem (default: undefined) SysOpt (default: undefined) index (default: undefined) rindex (default: undefined) IPD238a - 13 - June 30, 1994 By default, Icon provides its own version of gcvt() to minimized the differences in the string representations of floating-point numbers between different platforms. If you prefer to use the version of gcvt() in your C library, add #define NoIconGcvt to define.h. The Icon function delay() uses the C function select(). If your C library does not have select(), add #define NoSelect to define.h. The effect of this is that delay() fails and does not delay execution. If SysMem is defined and IntBits == WordBits, the C library routines memcpy() and memset() are used in place of the corresponding Icon routines memcopy() and memfill(). SysMem is automatically defined if Standard or StandardLib is defined. If SysOpt is defined, the C library function getopt() is used instead of Icon's private version. Different C compilers use different names for the routines for locating substrings within strings. The source code for Icon uses index and rindex. The other possibilities are strchr and strrchr. If your platform uses the latter names, add #define index strchr #define rindex strrchr to define.h. Icon uses unlink for the routine that deletes a file. The other common name is remove. If your platform uses this name, for example, add #define unlink remove to define.h. Storage_Region_Sizes The default sizes of Icon's run-time storage regions for allocated data normally are the same for all implementations. However, different values can be set: MaxAbrSize (default: 65000) MaxStrSize (default: 65000) Since users can override the set values with environment variables, it is unwise to change them from their defaults except IPD238a - 14 - June 30, 1994 in unusual cases. The sizes for Icon's main interpreter stack and co-expression stacks also can be set: MStackSize (default: 10000) StackSize (default: 2000) As for the block and string storage regions, it is unwise to change the default values except in unusual cases. Finally, a list used for pointers to strings during garbage collection, can be sized: QualLstSize (default: 5000) Like the sizes above, this one normally is best left unchanged. Allocation_Sizing malloc() is used to allocate space for Icon's storage regions. This limits region sizes to the value of the largest unsigned int. Some platforms provide alternative allocation routines for allocating larger regions. To change the allocation procedure for regions, add a definition for AllocReg to define.h. For example, the huge-memory-model implementation of Icon for Microsoft C uses the following: #define AllocReg(n) halloc((long)n, sizeof(char)) Note: Icon still uses malloc() for allocating other blocks. If this is a problem, it may be possible to change this by defining malloc in define.h, as in #define malloc lmalloc where lmalloc() is a local routine for allocating large blocks of memory. If this is done, and the size of the allocation is not unsigned int, add an appropriate definition for the type by defining AllocType in define.h, such as #define AllocType unsigned long int It is also necessary to add a definition for the limit on the size of an Icon region: #define MaxBlock n where n is the maximum size allowed (the default for MaxBlock is MaxUnsigned, the largest unsigned int). It generally is not advisable to set MaxBlock to the largest size an alternative allocation routine can return. For the huge-memory-model implementation mentioned above, MaxBlock is 256000. IPD238a - 15 - June 30, 1994 File_Name_Suffixes The suffixes used to identify Icon source programs, ucode files, and icode files may be specified in define.h: #define SourceSuffix(default: ".icn") #define U1Suffix (default: ".u1") #define U2Suffix (default: ".u2") #define USuffix (default: ".u") #define IcodeSuffix (default: "") #define IcodeASuffix(default: "") USuffix is used for the abbreviation that icont understands in place of the complete U1Suffix or U2Suffix. IcodeASuffix is an alternative suffix that iconx uses when searching for icode files specified without a suffix. For example, on MS-DOS, IcodeSuffix is ".icx" and IcodeASuffix is ".ICX". If values other than the defaults are specified, care must be taken not to introduce conflicts or collisions among names of different types of files. Paths If icont is given a source program in a directory different from the local one (``current working directory''), there is a question as to where ucode and icode files should be created: in the local directory or in the directory that contains the source program. On most platforms, the appropriate place is in the local directory (the user may not have write permission in the directory that contains the source program). However, on some platforms, the directory that contains the source file is appropriate. By default, the directory for creating new files is the local directory. The other choice can be selected by adding #define TargetDir SourceDir UNIX_Bootstrap_Headers A bootstrap header is used to make UNIX icode files executable. This header normally is a simple shell script. To use an executable program for a header, as in previous versions of Icon, add #define NoShellHeader to define.h. The space reserved for an executable program header is determined by #define MaxHdr (default: 4096) On some UNIX platforms, many routines may be included in the IPD238a - 16 - June 30, 1994 header even if they are not needed. Start by assuming this is not a problem, but if MaxHeader has to be made impractically large, you can eliminate the header by adding #define NoHeader to define.h. Note: If NoHeader is defined, the values of MaxHdr and NoShellHeader are irrelevant. The effect of this definition is to render Icon programs non- executable. Instead, they must be run by using the -x option after the program name when icont is used, as in icont prog.icn -x Such a program also can be run as an argument of iconx, as in iconx prog where prog is the result of translating and linking prog.icn as in the previous example. Command-Line_Options The command-line options that are supported by icont and iconc are defined by Options. The default value (see config.h) will do for most platforms, but an alternative can be included in define.h. Similarly, the error message produced for erroneous command lines is defined by Usage. The default value, which should correspond to the value of Options, is in config.h, but may be overridden by a definition in define.h. Environment_Variables If your platform does not support environment variables (via the run-time library routine getenv), add the following line to define.h: #define NoEnvVars This disables Icon's ability to change internal parameters to accommodate special user needs (such as using memory region sizes different from the defaults), but does not otherwise interfej VMS.BCKT[V9.DOCS]IPD238.DOC;1]xT>re with the use of Icon. Host_Identification The identification of the host computer as given by the Icon keyword &host needs to be specified in define.h. The usual way to to this is to add IPD238a - 17 - June 30, 1994 #define HostStr "identification" to define.h. Several alternatives are available on UNIX platforms for host identification. To use one of these, remove the definition of HostStr and provide an alternative as follows. On some versions of UNIX, notably Version 7 and 4.1bsd, the file /usr/include/whoami.h contains the host name. If your system has this file and you want to use this name, add #define WhoHost to define.h. Some versions of UNIX, notably 4.2bsd and 4.3bsd, provide the host name via the gethostname(2) system call. If your system supports this system call and you want to use this name, add #define GetHost to define.h. Some versions of UNIX, such as System V, provide the host name via the uname(2) system call. If your system supports this call and you want to use this name, add #define UtsName to define.h. Note: Only one of these methods of specifying the host name can be used. Exit_Codes Exit codes are determined by the following definitions: NormalExit (default: 0) ErrorExit (default: 1) Clock_Rate Hz defines the units returned by the times() function call. Check the documentation for this function on your platform. If it says that times are returned in terms of 1/60 second, no action is needed. Otherwise, define Hz in define.h to be the number of times() units in one second. The documentation may refer you to an additional file such as /usr/include/sys/param.h. If so, check the value there, and define Hz accordingly. IPD238a - 18 - June 30, 1994 Dynamic_Hashing_Constants Four parameters configure the implementation of tables and sets: HSlots Initial number of hash buckets; it must be a power of 2 HSegs Maximum number of hash bucket segments MaxHLoad Maximum allowable loading factor MinHLoad Minimum loading factor for new structures The default values (listed below) are appropriate for most platforms. If you want to change the values, read the discussion that follows. Every set or table starts with HSlots hash buckets, using one bucket segment. When the average hash bucket exceeds MaxHLoad entries, the number of buckets is doubled and one more segment is consumed. This repeats until HSegs segments are in use; after that, structure still grows but no more hash buckets are added. MinHLoad is used only when copying a set or table or when creating a new set through the intersection, union, or difference of two other sets. In these cases a new set may be more lightly loaded than otherwise, but never less than MinHLoad if it exceeds a single bucket segment. For all machines, the default load factors are 5 for MaxHLoad and 1 for MinHLoad. Because splitting or combining buckets halves or doubles the load factor, MinHLoad should be no more than half MaxHLoad. The average number of elements in a hash bucket over the life of a structure is about 2/3xMaxHLoad, assuming the structure is not so huge as to be limited by HSegs. Increasing MaxHLoad delays the creation of new hash buckets, reducing memory demands at the expense of increased search times. It has no effect on the memory requirements of minimally-sized structures. HSlots and HSegs interact to determine the minimum size of a structure and its maximum efficient capacity. The size of an empty set or table is directly related to HSegs+HSlots; smaller values of these parameters reduce the memory needs of programs using many small structures. Doubling HSlots delays the onset of the first structure reorganization until twice as many elements have been inserted. It also doubles the capacity of a structure, as does increasing HSegs by 1. The maximum number of hash buckets is HSlotsx(2^(HSegs-1)). A structure can be considered ``full'' when it contains MaxHLoad times that many entries; beyond that, lookup times gradually increase as more elements are added. Until a structure becomes IPD238a - 19 - June 30, 1994 full, the values of HSlots and HSegs do not affect lookup times. For machines with 16-bit ints, the defaults are 4 for HSlots and 6 for HSegs. Sets and tables grow from 4 hash buckets to a maximum of 128, and become full at 640 elements. For other machines, the defaults are 8 for HSlots and 10 for HSegs. Sets and tables grow from 8 hash buckets to a maximum of 4096, and become full at 20480 elements. Keyboard_Functions If your platform supports the keyboard functions getch(), getche(), and kbhit(), add #define KeyboardFncs to define.h. Some UNIX platforms are capable of supporting the keyboard functions. A UNIX platform should be able to to support the keyboard functions if it supports ioctl() in a manner that is compatible with either BSD/SunOS or System V. The keyboard functions are enabled by default on platforms known to be compatible, including SunOS, Xenix, System V/386, and a few others. On other platforms, in addition to adding #define KeyboardFncs to define.h as described above, select one of two methods for calling ioctl() supported in the source code for Icon, and add it to define.h: #define HaveTioc or #define HaveTermio Use HaveTioc if you have a BSD-based platform and have the system include files , , and . The system ioctl() call must support TIOCSETN, TIOCGETP, TIOCGETC, and FIONREAD. Use HaveTermio if you have a System V, Xenix 386, or compatible platform and have the system include files , , , and . The system ioctl() call must support TCSETA, TCGETA, and (unless it is a Xenix platform), FIONREAD. If your platform supports neither of these methods, you may be able to write your own keyboard functions. See IPD238a - 20 - June 30, 1994 src/runtime/fsys.r. Co-Expressions The implementation of co-expressions requires an assembly- language context switch. If your platform does not have a co- expression context switch, you can implement one as described in Appendix B. Alternatively, you can disable co-expressions by adding #define NoCoexpr to define.h. Other_Optional_Features Some features of Icon are optional. Some of these normally are enabled, while others normally are disabled. The features that normally are enabled can be disabled to, for example, reduce the size of the executable files. A negative form of definition is used for these, as in #define NoLargeInts which can be added to define.h to disable large-integer arithmetic. It may be necessary to disable large-integer arithmetic on computers with a small amount of memory, since the feature increases the size of the run-time system by 15-20%. If your platform supports the system() function for executing command line, add #define SystemFnc to define.h. If your platform supports the dlopen() and dlsym() functions for dynamic loading, add #define LoadFunc to define.h If you have a BSD UNIX platform and want to enable the function save(s), which allows an executable image of a running Icon program to be saved, add #define ExecImages to define.h. IPD238a k VMS.BCKT[V9.DOCS]IPD238.DOC;1]M - 21 - June 30, 1994 X_Window_Facilities The files needed to build Icon with X Window facilities are not in the same places on all platforms. If Icon fails to build because an include file needed by X cannot be found, it may be necessary to edit src/h/sys.h to reflect the local location. Some early versions of X Window Systems, notably X11R3, do not support the attribute iconic. If this is the case for your platform, add #define NoIconify to define.h. This disables the attribute iconic, causing references to it to fail. Compiler_Options The C compiler called by the Icon compiler to process its output defaults to cc. If you want to use a different C compiler, add #define CComp "name" to define.h, where name is the name of the C compiler you want the Icon compiler to use. Note the quotation marks surrounding the name. For example, to use Gnu C, add #define CComp "gcc" By default, the C compiler is called with no options. If you want specific options, add #define COpts "options" to define.h. Again, note the quotation marks. For example, to request C optimizations, you might add #define COpts "-O" If your system does not have ranlib, add #define NoRanlib to define.h. Debugging_Code Icon contains some code to assist in debugging. It is enabled by the definitions IPD238a - 22 - June 30, 1994 #define DeBugTrans /* debugging code for the translator in icont */ #define DeBugLinker /* debugging code for the linker in icont */ #define DeBugIconx /* debugging code for the run-time */ All three of these are automatically defined if DeBug is defined. DeBug is defined in define.h as it is distributed, so all debugging code is enabled. The debugging code for the translator consists of functions for dumping symbol tables (see icont/tsym.c). These functions are rarely needed and there are no calls to them in the source code as it is distributed. The debugging code for the linker consists of a function for dumping the code region (see icont/lcode.c) and code for generating a debugging file that is a printable image of the icode file produced by the linker. This debugging file, which is produced if the option -L is given on the command line when icont is run, may be useful if icode files are incorrect. The debugging code for the executor consists of a few validity checks at places where problems have been encountered in the past. It also provides functions for dumping Icon values. See runtime/rmisc.r and runtime/rmemmgt.r. When installing Icon on a new operating system, it is advisable to enable the debugging code until Icon is known to be running properly. The code produced is innocuous and adds only a few percent to the size of the executable files. It should be removed by deleting the definition listed above from define.h as the final step in the implementation for a new operating system. IPD238a - 23 - June 30, 1994 Appendix B - Implementing a Co-Expression Context Switch If your platform does not have a co-expression context switch, you can implement one as described in this appendix. Note: If your platform does not allow the C stack to be at an arbitrary place in memory, there is probably little hope of implementing co-expressions. The routine coswitch() is needed for context switching. This routine requires assembly language, since it must manipulate hardware registers. It either can be written as a C routine with asm directives or directly as an assembly language routine. Calls to the context switch have the form coswitch(old_cs,new_cs,first), where old_cs is a pointer to an array of words (C longs) that contain C state information for the current co-expression, new_cs is a pointer to an array of words that hold C state information for a co-expression to be activated, and first is 1 or 0, depending on whether or not the new co-expression has or has not been activated before. The zeroth element of a C state array always contains the hardware stack pointer (sp) for that co-expression. The other elements can be used to save any C frame pointers and any other registers your C compiler expects to be preserved across calls. The default size of the array for saving the C state is 15. This number may be changed by adding #define CStateSize n to define.h, where n is the number of elements needed. The first thing coswitch does is to save the current pointers and registers in the old_cs array. Then it tests first. If first is zero, coswitch sets sp from new_cs[0], clears the C frame pointers, and calls new_context. If first is not zero, it loads the (previously saved) sp, C frame pointers, and registers from new_cs and returns. Written in C, coswitch has the form: IPD238a - 24 - June 30, 1994 /* * coswitch */ coswitch(old_cs, new_cs, first) long *old_cs, *new_cs; int first; { . . . /* save sp, frame pointers, and other registers in old_cs */ . . . if (first == 0) { /* this is first activation */ . . . /* load sp from new_cs[0] and clear frame pointers */ . . . new_context(0, 0); syserr("new_context() returned in coswitch"); } else { . . . /* load sp, frame pointers, and other registers from new_cs */ . . . } } After you implement coswitch, remove the #define NoCoexpr from define.h. Verify that StackAlign and UpStack, if needed, are properly defined. To test your context switch, run the programs in tests/general/coexpr.lst. Ideally, there should be no differences in the comparison of outputs. If you have trouble with your context switch, the first thing to do is double-check the registers that your C compiler expects to be preserved across calls - different C compilers on the same computer may have different requirements. Another possible source of problems is built-in stack checking. Co-expressions rely on being able to specify an IPD238a - 25 - June 30, 1994 arbitrary region of memory for the C stack. If your C compiler generates code for stack probes that expects the C stack to be at a specific location, you may need to disable this code or replace it with something more appropriate. IPD238a - 26 - June 30, 1994 blt: VMS.BCKS[V9.DOCS]IPD238.PS;1*[V9.DOCS]IPD238.PS;1+,S./ 4-0123KPWO56S!m7xr89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 07:59:15 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmom& VMS.BCKS[V9.DOCS]IPD238.PS;10veto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1593 984(Con\256guring)N 2025(the)X 2152(Source)X 2408(Code)X 2606(for)X 2729(Version)X 3016(9.0)X 3136(of)X 3223(Icon)X 1 f 1458 1224(Ralph)N 1669(E.)X 1758(Griswold,)X 2096(Clinton)X 2355(L.)X 2444(Jeffery,)X 2708(and)X 2844(Gregg)X 3065(M.)X 3176(Townsend)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Background)X 1 f 732 2236(The)N 879(implementation)X 1403(of)X 1492(the)X 1612(Icon)X 1777(programming)X 2235(language)X 2547(is)X 2622(large)X 2806(and)X 2945(sophisticated)X 3386([1-3].)X 3610(The)X 3758(implementation)X 4283(is,)X 612 2332(however,)N 931(written)X 1180(almost)X 1415(entirely)X 1682(in)X 1766(C)X 1841(and)X 1979(RTL)X 2152([4],)X 2288(a)X 2346(superset)X 2631(of)X 2720(C,)X 2814(for)X 2929(which)X 3146(a)X 3203(translator)X 3527(to)X 3610(C)X 3684(is)X 3758(provided.)X 4104(A)X 4183(small)X 612 2428(amount)N 873(of)X 961(assembly-language)X 1597(code)X 1770(is)X 1844(needed)X 2093(for)X 2208(the)X 2327(context)X 2584(switch)X 2814(used)X 2982(by)X 3084(co-expressions.)X 3623(See)X 3761(Appendix)X 4099(B.)X 4214(This)X 612 2524(code)N 784(is)X 857(optional)X 1139(and)X 1275(only)X 1437(affects)X 1672(co-expressions.)X 732 2648(There)N 940(presently)X 1254(are)X 1373(implementations)X 1926(of)X 2013(Icon)X 2177(for)X 2292(the)X 2411(Acorn)X 2633(Archimedes,)X 3062(the)X 3181(Amiga,)X 3440(the)X 3559(Atari)X 3745(ST,)X 3879(the)X 3998(Macintosh,)X 612 2744(MS-DOS,)N 954(MVS,)X 1167(OS/2,)X 1371(UNIX,)X 1612(VM/CMS,)X 1971(and)X 2107(VMS.)X 732 2868(All)N 856(implementations)X 1411(of)X 1500(Icon)X 1665(are)X 1786(obtained)X 2084(from)X 2262(the)X 2382(same)X 2569(source)X 2802(code,)X 2997(using)X 3193(conditional)X 3576(compilation)X 3981(and)X 4120(de\256ned)X 612 2964(constants)N 946(to)X 1044(select)X 1263(and)X 1415(con\256gure)X 1754(platform-dependent)X 2423(code.)X 2631(Consequently,)X 3127(installing)X 3459(Icon)X 3637(on)X 3752(a)X 3823(new)X 3992(platform)X 4303(is)X 612 3060(largely)N 856(a)X 913(matter)X 1139(of)X 1227(selecting)X 1533(appropriate)X 1920(values)X 2146(for)X 2261(con\256guration)X 2709(parameters,)X 3103(deciding)X 3400(among)X 3639(alternative)X 3999(de\256nitions,)X 612 3156(and)N 748(possibly)X 1034(adding)X 1272(some)X 1461(code)X 1633(that)X 1773(is)X 1846(dependent)X 2196(on)X 2296(the)X 2414(speci\256c)X 2679(computer,)X 3022(operating)X 3345(system,)X 3607(and)X 3743(C)X 3816(compiler)X 4121(used.)X 732 3280(This)N 895(document)X 1232(describes)X 1552(the)X 1671(process)X 1933(of)X 2021(con\256guring)X 2411(Version)X 2686(9.0)X 2807(of)X 2895(the)X 3015(Icon)X 3180(source)X 3412(code)X 3586(for)X 3702(a)X 3760(platform)X 4058(on)X 4160(which)X 612 3376(it)N 676(has)X 803(not)X 925(previously)X 1283(been)X 1455(installed.)X 732 3500(Since)N 936(there)X 1123(are)X 1248(several)X 1502(existing)X 1781(con\256gurations)X 2265(for)X 2385(UNIX)X 2612(and)X 27n dL VMS.BCKS[V9.DOCS]IPD238.PS;1<54(MS-DOS,)X 3102(con\256guring)X 3498(a)X 3561(new)X 3722(platform)X 4025(for)X 4146(one)X 4289(of)X 612 3596(these)N 799(operating)X 1124(systems)X 1399(is)X 1474(easier)X 1684(than)X 1844(for)X 1960(other)X 2147(platforms.)X 2496(See)X 2634(Sections)X 2927(5,)X 3009(6,)X 3091(and)X 3229(7)X 3291(for)X 3407(speci\256c)X 3674(information)X 4074(concern-)X 612 3692(ing)N 734(UNIX)X 955(and)X 1091(MS-DOS)X 1413(platforms.)X 732 3816(Building)N 1035(Icon)X 1202(with)X 1368(a)X 1428(new)X 1586(C)X 1663(compiler)X 1972(on)X 2076(an)X 2176(operating)X 2503(system)X 2749(for)X 2867(which)X 3087(Icon)X 3254(has)X 3385(previously)X 3747(been)X 3923(installed)X 4218(usu-)X 612 3912(ally)N 752(is)X 825(a)X 881(fairly)X 1075(simple)X 1308(task)X 1457(and)X 1593(normally)X 1902(can)X 2034(be)X 2130(done)X 2306(by)X 2406(adjusting)X 2719(a)X 2775(few)X 2916(con\256guration)X 3363(parameters.)X 732 4036(Installing)N 1066(Icon)X 1241(on)X 1353(a)X 1421(new)X 1587(operating)X 1922(system)X 2176(is)X 2261(more)X 2458(complex;)X 2788(read)X 2959(this)X 3106(report)X 3330(carefully,)X 3669(especially)X 4023(Section)X 4296(8,)X 612 4132(before)N 838(undertaking)X 1241(such)X 1408(a)X 1464(project.)X 3 f 612 4420(2.)N 712(Requirements)X 612 4612(C)N 690(Data)X 875(Sizes)X 1 f 732 4736(Icon)N 895(places)X 1116(the)X 1234(following)X 1565(requirements)X 2004(on)X 2104(C)X 2177(data)X 2331(sizes:)X 10 f 812 4860(g)N 2 f 972(char)X 1 f 1119(s)X 1170(must)X 1345(be)X 1441(8)X 1501(bits.)X 10 f 812 4984(g)N 2 f 972(int)X 1 f 1056(s)X 1107(must)X 1282(be)X 1378(16,)X 1498(32,)X 1618(or)X 1705(64)X 1805(bits.)X 10 f 812 5108(g)N 2 f 972(long)X 1 f 1114(s)X 1165(and)X 1301(pointers)X 1579(must)X 1754(be)X 1850(32)X 1950(or)X 2037(64)X 2137(bits.)X 10 f 812 5232(g)N 1 f 972(All)X 1094(pointers)X 1372(must)X 1547(be)X 1643(the)X 1761(same)X 1946(length.)X 10 f 812 5356(g)N 2 f 972(long)X 1 f 1114(s)X 1165(and)X 1301(pointers)X 1579(must)X 1754(be)X 1850(the)X 1968(same)X 2153(length.)X 10 f 812 5480(g)N 2 f 972(longs)X 1 f 1165(and)X 1301(pointers)X 1579(must)X 1754(require)X 2002(no)X 2102(stricter)X 2345(alignment)X 2685(than)X 2 f 2843(ints)X 1 f 2958(.)X 612 5604(If)N 686(your)X 853(C)X 926(data)X 1080(sizes)X 1256(do)X 1356(not)X 1478(meet)X 1654(these)X 1839(requirements,)X 2298(do)X 2398(not)X 2520(attempt)X 2780(to)X 2862(con\256gure)X 3185(Icon.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(The)N 765(C)X 843(Compiler)X 1 f 732 796(The)N 893(main)X 1089(requirement)X 1514(for)X 1645(implementing)X 2126(Icon)X 2306(is)X 2396(a)X 2469(production-quality)X 3102(C)X 3192(compiler)X 3514(that)X 3671(supports)X 3979(at)X 4074(least)X 4258(the)X 612 892(``K&R'')N 927(standard)X 1233([5].)X 1401(An)X 1533(ANSI)X 1754(C)X 1841(compiler)X 2160(is)X 2247(preferable.)X 2648(The)X 2807(term)X 2987(``production)X 3421(quality'')X 3730(implies)X 3998(robustness,)X 612 988(correctness,)N 1014(the)X 1132(ability)X 1356(to)X 1439(address)X 1701(large)X 1883(amounts)X 2175(of)X 2263(memory,)X 2571(the)X 2690(ability)X 2915(to)X 2998(handle)X 3233(large)X 3415(\256les)X 3569(and)X 3706(complicated)X 4119(expres-)X 612 1084(sions,)N 816(and)X 952(a)X 1008(comprehensive)X 1514(run-time)X 1810(library.)X 732 1208(The)N 887(C)X 970(preprocessor)X 1411(should)X 1654(conform)X 1956(either)X 2169(to)X 2261(the)X 2389(ANSI)X 2607(C)X 2691(standard)X 2994([6])X 3119(or)X 3217(to)X 3310(the)X 3439(K&R)X 3643(standard)X 3946(for)X 4071(UNIX)X 4303(C)X 612 1304(preprocessors.)N 1124(In)X 1221(particular,)X 1579(Icon)X 1751(uses)X 1918(the)X 2045(C)X 2127(preprocessor)X 2567(to)X 2658(concatenate)X 3067(strings)X 3309(and)X 3454(substitute)X 3789(arguments)X 4152(within)X 612 1400(quotation)N 934(marks.)X 1170(For)X 1301(the)X 1419(ANSI)X 1626(preprocessor)X 2057(standard,)X 2369(the)X 2487(following)X 2818(de\256nitions)X 3175(are)X 3294(used:)X 5 f 900 1544(#de\256ne)N 1197(Cat\(x,)X 1447(y\))X 1551(x##y)X 900 1640(#de\256ne)N 1197(Lit\(x\))X 1412(#x)X 1 f 612 1784(For)N 743(the)X 861(UNIX)X 1082(K&R)X 1275(standard,)X 1587(the)X 1705(following)X 2036(de\256nitions)X 2393(are)X 2512(used:)X 5 f 900 1928(#de\256ne)N 1197(Ident\(x\))X 1504(x)X 900 2024(#de\256ne)N 1197(Cat\(x,)X 1447(y\))X 1551(Ident\(x\)y)X 900 2120(#de\256ne)N 1197(Lit\(x\))X 1412("x")X 1 f 612 2264(The)N 757(following)X 1088(program)X 1380(can)X 1512(be)X 1608(used)X 1775(to)X 1857(test)X 1988(these)X 2173(preprocessor)X 2604(facilities:)X 5 f 900 2408(Cat\(ma,)N 1221(in\)\(\))X 900 2504({)N 1011 2600(printf\(Lit\(Hello)N 1545(world\\n\)\);)X 900 2696(})N 1 f 612 2840(If)N 686(this)X 821(program)X 1113(does)X 1280(not)X 1402(compile)X 1680(and)X 1816(print)X 5 f 1989(Hello)X 2193(world)X 1 f 2404(using)X 2597(one)X 2733(of)X 2820(the)X 2938(sets)X 3078(of)X 3165(de\256nitions)X 3522(above,)X 3754(there)X 3935(is)X 4008(no)X 4109(point)X 4294(in)X 612 2936(proceeding.)N 1029(Contact)X 1298(the)X 1416(Icon)X 1579(Project)X 1826(for)X 1940(alternative)X 2299(approaches.)X 3 f 612 3128(Memory)N 1 f 732 3252(The)N 892(Icon)X 1070(programming)X 1541(language)X 1866(requires)X 2160(a)X 2231(substantial)X 2609(amount)X 2885(of)X 2988(memory)X 3291(to)X 3389(run.)X 3572(The)X 3733(practical)X 4046(minimum)X 612 3348(depends)N 895(somewhat)X 1240(on)X 1340(the)X 1458(platform;)X 1776(640KB)X 2027(is)X 2100(typical.)X 3 f 612 3540(File)N 761(Space)X 1 f 732 3664(The)N 878(source)X 1109(code)X 1282(for)X 1397(Icon)X 1561(is)X 1635(large)X 1817(\320)X 1918(about)X 2117(3.5MB.)X 2402(Test)X 2561(programs)X 2885(and)X 3022(other)X 3208(auxiliary)X 3514(\256les)X 3669(take)X 3825(additional)X 4167(room,)X 612 3760(as)N 716(does)X 900(compilation)X 1319(and)X 1472(testing.)X 1762(While)X 1995(the)X 2130(implementation)X 2669(can)X 2818(be)X 2931(divided)X 3208(into)X 3369(components)X 3793(that)X 3950(can)X 4098(be)X 4210(built)X 612 3856(separately,)N 978(this)X 1113(approach)X 1428(may)X 1586(be)X 1682(painful.)X 3 f 612 4144(3.)N 712(File)X 861(Structure)X 1 f 732 4268(The)N 877(\256les)X 1030(for)X 1144(Icon)X 1307(are)X 1426(organized)X 1763(in)X 1845(a)X 1901(hierarchy.)X 2245(The)X 2390(top)X 2512(level,)X 2708(assuming)X 3030(the)X 3148(hierarchy)X 3472(is)X 3545(rooted)X 3770(in)X 5 f 3854(icon)X 1 f 4020(is:)X 7 f 9 f 1469 4460(|)N 7 f 1508(-)X 1563(b)X 1618(i)X 1673(n)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 1 f 2340(executable)X 2704(binaries)X 2978(and)X 3114(support)X 3374(\256les)X 7 f 9 f 1469 4556(|)N 7 f 1508(-)X 1563(c)X 1618(o)X 1673(n)X 1728(f)X 1783(i)X 1838(g)X 1893(-)X 1948(-)X 2003(-)X 1 f 2340(con\256gurations)X 7 f 9 f 919 4652(|)N 7 f 958(-)X 1013(i)X 1068(c)X 1123(o)X 1178(n)X 1233(-)X 1288(-)X 1343(-)X 1398(-)X 9 f 1469(|)X 7 f 1508(-)X 1563(s)X 1618(r)X 1673(c)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 1 f 2340(source)X 2570(code)X 7 f 9 f 1469 4748(|)N 7 f 1508(-)X 1563(t)X 1618(e)X 1673(s)X 1728(t)X 1783(s)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 1 f 2340(tests)X 612 4968(There)N 820(are)X 939(several)X 1187(subdirectories)X 1657(in)X 5 f 1741(con\256g)X 1 f 1973(for)X 2087(different)X 2384(operating)X 2707(systems:)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 7 f 9 f 1469 672(|)N 7 f 1508(-)X 1563(a)X 1618(c)X 1673(o)X 1728(r)X 1783(n)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 9 f 1469 768(|)N 7 f 1508(-)X 1563(a)X 1618(m)X 1673(i)X 1728(g)X 1783(a)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 9 f 1469 864(|)N 7 f 1508(-)X 1563(a)X 1618(t)X 1673(a)X 1728(r)X 1783(i)X 1838o'n VMS.BCKS[V9.DOCS]IPD238.PS;1C-(_)X 1893(s)X 1948(t)X 2003(-)X 9 f 1469 960(|)N 7 f 1508(-)X 1563(i)X 1618(b)X 1673(m)X 1728(3)X 1783(7)X 1838(0)X 1893(-)X 1948(-)X 2003(-)X 903 1056(-)N 958(-)X 1013(c)X 1068(o)X 1123(n)X 1178(f)X 1233(i)X 1288(g)X 1343(-)X 1398(-)X 9 f 1469(|)X 7 f 1508(-)X 1563(m)X 1618(a)X 1673(c)X 1728(i)X 1783(n)X 1838(t)X 1893(o)X 1948(s)X 2003(h)X 9 f 1469 1152(|)N 7 f 1508(-)X 1563(m)X 1618(s)X 1673(d)X 1728(o)X 1783(s)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 9 f 1469 1248(|)N 7 f 1508(-)X 1563(o)X 1618(s)X 1673(2)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 9 f 1469 1344(|)N 7 f 1508(-)X 1563(u)X 1618(n)X 1673(i)X 1728(x)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 9 f 1469 1440(|)N 7 f 1508(-)X 1563(v)X 1618(m)X 1673(s)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 1 f 612 1660(Not)N 755(all)X 858(of)X 948(these)X 1136(subdirectories)X 1609(are)X 1731(included)X 2030(in)X 2115(all)X 2218(distributions)X 2640(of)X 2731(Icon.)X 2938(Some)X 3144(con\256guration)X 3595(directories)X 3958(contain)X 4218(sub-)X 612 1756(directories)N 971(for)X 1085(different)X 1382(platforms.)X 1729(These)X 1941(subdirectories)X 2411(contain)X 2667(various)X 2923(\256les,)X 3096(depending)X 3450(on)X 3550(the)X 3668(platform.)X 732 1880(The)N 877(directory)X 5 f 1189(src)X 1 f 1316(contains)X 1603(the)X 1721(source)X 1951(code)X 2123(for)X 2237(various)X 2493(components)X 2900(of)X 2987(Icon.)X 7 f 9 f 1469 2072(|)N 7 f 1508(-)X 1563(c)X 1618(o)X 1673(m)X 1728(m)X 1783(o)X 1838(n)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(common)X 2640(source)X 7 f 9 f 1469 2168(|)N 7 f 1508(-)X 1563(h)X 1618(-)X 1673(-)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(header)X 2575(\256les)X 7 f 9 f 1469 2264(|)N 7 f 1508(-)X 1563(i)X 1618(c)X 1673(o)X 1728(n)X 1783(c)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(Icon)X 2503(compiler)X 2808(source)X 7 f 903 2360(-)N 958(s)X 1013(r)X 1068(c)X 1123(-)X 1178(-)X 1233(-)X 1288(-)X 1343(-)X 1398(-)X 9 f 1469(|)X 7 f 1508(-)X 1563(i)X 1618(c)X 1673(o)X 1728(n)X 1783(t)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(Icon)X 2503(translator)X 2826(source)X 7 f 9 f 1469 2456(|)N 7 f 1508(-)X 1563(p)X 1618(r)X 1673(e)X 1728(p)X 1783(r)X 1838(o)X 1893(c)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(C)X 2413(preprocessor)X 2844(source)X 7 f 9 f 1469 2552(|)N 7 f 1508(-)X 1563(r)X 1618(t)X 1673(t)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(run-time)X 2636(translator)X 2959(source)X 7 f 9 f 1469 2648(|)N 7 f 1508(-)X 1563(r)X 1618(u)X 1673(n)X 1728(t)X 1783(i)X 1838(m)X 1893(e)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(run-time)X 2636(source)X 732 2868(The)N 877(directory)X 5 f 1189(tests)X 1 f 1377(contains)X 1664(the)X 1782(test)X 1913(material)X 2196(for)X 2310(various)X 2566(components)X 2973(of)X 3060(Icon.)X 7 f 9 f 1469 3060(|)N 7 f 1508(-)X 1563(b)X 1618(e)X 1673(n)X 1728(c)X 1783(h)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(benchmarks)X 7 f 9 f 1469 3156(|)N 7 f 1508(-)X 1563(c)X 1618(a)X 1673(l)X 1728(l)X 1783(i)X 1838(n)X 1893(g)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(calling)X 2578(C)X 2651(functions)X 2969(from)X 3145(Icon)X 7 f 9 f 1469 3252(|)N 7 f 1508(-)X 1563(g)X 1618(e)X 1673(n)X 1728(e)X 1783(r)X 1838(a)X 1893(l)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(general)X 2597(tests)X 7 f 9 f 1469 3348(|)N 7 f 1508(-)X 1563(g)X 1618(r)X 1673(a)X 1728(p)X 1783(h)X 1838(i)X 1893(c)X 1948(s)X 2003(-)X 2058(-)X 1 f 2340(tests)X 2502(for)X 2616(graphics)X 7 f 903 3444(-)N 958(t)X 1013(e)X 1068(s)X 1123(t)X 1178(s)X 1233(-)X 1288(-)X 1343(-)X 1398(-)X 9 f 1469(|)X 7 f 1508(-)X 1563(i)X 1618(p)X 1673(l)X 1728(-)X 1783(-)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(tests)X 2502(for)X 2616(the)X 2734(Icon)X 2897(program)X 3189(library)X 7 f 9 f 1469 3540(|)N 7 f 1508(-)X 1563(p)X 1618(r)X 1673(e)X 1728(p)X 1783(r)X 1838(o)X 1893(c)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(C)X 2413(preprocessor)X 2844(tests)X 7 f 9 f 1469 3636(|)N 7 f 1508(-)X 1563(s)X 1618(a)X 1673(m)X 1728(p)X 1783(l)X 1838(e)X 1893(s)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(short)X 2520(sample)X 2767(programs)X 7 f 9 f 1469 3732(|)N 7 f 1508(-)X 1563(s)X 1618(p)X 1673(e)X 1728(c)X 1783(i)X 1838(a)X 1893(l)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(tests)X 2502(of)X 2589(special)X 2832(features)X 7 f 9 f 1469 3828(|)N 7 f 1508(-)X 1563(v)X 1618(t)X 1673(r)X 1728(a)X 1783(n)X 1838(-)X 1893(-)X 1948(-)X 2003(-)X 2058(-)X 1 f 2340(tests)X 2502(variant)X 2745(translators)X 612 4048(Some)N 821(distributions)X 1247(contain)X 1511(other,)X 1724(optional)X 2014(components)X 2429(of)X 2524(Icon.)X 2735(The)X 2888(Icon)X 3059(compiler)X 3372(is)X 3453(not)X 3583(included)X 3887(in)X 3977(all)X 4085(distribu-)X 612 4144(tions)N 787(of)X 874(Icon.)X 3 f 612 4432(4.)N 712(Parameters)X 1130(and)X 1278(De\256nitions)X 1 f 732 4556(There)N 945(are)X 1069(many)X 1272(de\256ned)X 1534(constants)X 1858(and)X 2000(macros)X 2258(in)X 2346(the)X 2470(source)X 2706(code)X 2884(for)X 3004(Icon)X 3173(that)X 3319(vary)X 3488(from)X 3670(platform)X 3972(to)X 4060(platform.)X 612 4652(Over)N 797(the)X 919(range)X 1122(of)X 1213(possible)X 1499(platforms,)X 1850(there)X 2035(are)X 2158(many)X 2360(possibilities.)X 2785(A)X 2867(complete)X 3185(list)X 3306(is)X 3383(given)X 3585(in)X 3671(Appendix)X 4011(A.)X 2 f 4133(Do)X 4254(not)X 612 4748(be)N 710(intimidated)X 1096(by)X 1194(the)X 1314(large)X 1505(number)X 1772(of)X 1856(options)X 2114(listed)X 2310(there;)X 1 f 2525(most)X 2703(are)X 2825(provided)X 3133(only)X 3298(for)X 3415(unusual)X 3687(situations)X 4016(and)X 4155(only)X 4320(a)X 612 4844(few)N 753(are)X 872(needed)X 1120(for)X 1234(any)X 1370(one)X 1506(platform.)X 732 4968(The)N 880(de\256ned)X 1140(constants)X 1462(and)X 1602(macros)X 1858(needed)X 2110(for)X 2228(a)X 2288(speci\256c)X 2557(platform)X 2857(are)X 2980(placed)X 3214(in)X 5 f 3302 -0.2812(src/h/de\256ne.h)AX 1 f 3779(.)X 3843(There)X 4055(are)X 4178(many)X 612 5064(existing)N 5 f 887(de\256ne.h)X 1 f 1189(\256les)X 1342(that)X 1482(can)X 1614(be)X 1710(used)X 1877(as)X 1964(guides.)X 2233(One)X 2387(for)X 2501(a)X 2557(``vanilla'')X 2903(32-bit)X 3114(platform)X 3410(is:)X 5 f 900 5208(#de\256ne)N 1197(HostStr)X 1500("new)X 1711(host")X 900 5304(#de\256ne)N 1197(NoCoexpr)X 900 5496(#de\256ne)N 1197(PORT)X 1456(1)X 612 5640(HostStr)N 1 f 908(provides)X 1214(the)X 1342(value)X 1546(used)X 1723(in)X 1815(the)X 1943(Icon)X 2116(keyword)X 5 f 2429(&host)X 1 f 2662(and)X 2808(should)X 3052(be)X 3159(changed)X 3458(as)X 3556(appropriate.)X 5 f 3997(NoCoexpr)X 1 f 612 5736(causes)N 857(Icon)X 1035(to)X 1132(be)X 1243(con\256gured)X 1621(without)X 1900(co-expressions.)X 2451(This)X 2627(de\256nition)X 2967(can)X 3113(be)X 3223(removed)X 3538(when)X 3746(co-expressions)X 4257(are)X 612 5832(implemented.)N 1093(See)X 1232(Appendix)X 1571(B.)X 5 f 1691(PORT)X 1 f 1936(indicates)X 2244(an)X 2344(implementation)X 2870(for)X 2988(an)X 3088(unspeci\256ed)X 3477(operating)X 3804(system.)X 4070(It)X 4143(should)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 612 672(be)N 709(changed)X 998(to)X 1081(a)X 1138(name)X 1333(for)X 1448(the)X 1567(operating)X 1891(system)X 2134(for)X 2249(the)X 2368(new)X 2523(platform)X 2820(\(see)X 2971(Section)X 3232(8\).)X 3339(Other)X 3542(de\256nitions)X 3899(probably)X 4204(need)X 612 768(to)N 694(be)X 790(added,)X 1022(of)X 1109(course.)X 3 f 612 1056(5.)N 712(Con\256guring)X 1144(Icon)X 1315(for)X 1438(a)X 1498(UNIX)X 1723(Platform)X 1 f 732 1180(Since)N 932(Icon)X 1097(has)X 1226(been)X 1400(implemented)X 1840(forpU VMS.BCKS[V9.DOCS]IPD238.PS;1]<)X 1956(many)X 2156(UNIX)X 2380(platforms,)X 2730(the)X 2851(easiest)X 3088(way)X 3245(to)X 3330(con\256gure)X 3656(Icon)X 3822(for)X 3939(a)X 3998(new)X 4155(UNIX)X 612 1276(platform)N 930(usually)X 1202(is)X 1296(to)X 1399(copy)X 1596(an)X 1713(existing)X 2007(con\256guration)X 2475(for)X 2610(a)X 2687(platform)X 3004(that)X 3165(is)X 3259(similar)X 3522(to)X 3625(the)X 3764(new)X 3939(one.)X 4136(A)X 4235(few)X 612 1372(modi\256cations)N 1067(then)X 1225(often)X 1410(suf\256ce)X 1644(to)X 1726(get)X 1844(Icon)X 2007(running)X 2276(on)X 2376(the)X 2494(new)X 2648(platform.)X 732 1496(In)N 821(addition)X 1105(to)X 5 f 1191(de\256ne.h)X 1 f 1473(,)X 1515(a)X 1573(UNIX)X 1796(con\256guration)X 2245(also)X 2396(contains)X 2685(headers)X 2953(used)X 3122(to)X 3206(construct)X 5 f 3524(Make\256le)X 1 f 3821(s.)X 3895(These)X 4110(headers)X 612 1592(are)N 731(named)X 5 f 9 f 967(*)X 5 f (.hdr)S 1 f 1144(.)X 1184(Check)X 1409(these)X 1594(headers)X 1860(for)X 1974(appropriateness.)X 732 1716(See)N 868(also)X 1017([7])X 1131(for)X 1245(information)X 1643(concerning)X 2020(the)X 2138(installation)X 2513(of)X 2600(Icon)X 2763(on)X 2863(a)X 2919(UNIX)X 3140(platform.)X 3 f 612 2004(6.)N 712(Adding)X 984(Con\256guration)X 1483(Information)X 1921(for)X 2044(the)X 2171(X)X 2249(Window)X 2557(System)X 1 f 732 2128(If)N 808(your)X 977(platform)X 1275(has)X 1404(X)X 1484(Window)X 1782(software,)X 2101(you)X 2243(may)X 2403(wish)X 2576(to)X 2660(con\256gure)X 2985(Icon)X 3150(Version)X 3426(9.0)X 3548(with)X 3712(X)X 3792(support.)X 4074(Icon's)X 4298(X)X 612 2224(support)N 893(consists)X 1187(of)X 1295(a)X 1372(collection)X 1729(of)X 1837(Icon)X 2021(functions)X 2360(that)X 2521(call)X 2677(Xlib,)X 2879(the)X 3017(standard)X 3329(C)X 3422(interface)X 3744(to)X 3846(X.)X 3984(At)X 4104(present,)X 612 2320(con\256guration)N 1059(of)X 1146(X)X 1224(Window)X 1520(facilities)X 1816(is)X 1889(provided)X 2194(only)X 2356(for)X 2470(UNIX)X 2691(platforms.)X 732 2444(In)N 831(order)X 1033(to)X 1127(build)X 1324(Icon)X 1500(with)X 1675(these)X 1873(X)X 1964(Window)X 2273(functions,)X 2624(you)X 2777(will)X 2934(need)X 3119(to)X 3214(know)X 3425(what)X 3614(library)X 3861(or)X 3961(libraries)X 4257(are)X 612 2540(required)N 904(to)X 990(link)X 1138(in)X 1224(the)X 1346(X)X 1427(facilities)X 1726(into)X 1873(C)X 1949(programs;)X 2297(this)X 2435(library)X 2672(information)X 3073(is)X 3149(needed)X 3400(when)X 3597(iconx)X 3798(is)X 3874(built)X 4043(and)X 4182(when)X 5 f 612 2636(iconc)N 1 f 829(links)X 1015(a)X 1082(compiled)X 1411(Icon)X 1585(executable.)X 1980(Normally,)X 2339(the)X 2469(answer)X 2729(will)X 2885(be)X 5 f 9 f 2995(-)X 5 f 3039(lX11)X 1 f 3198(,)X 3250(but)X 3384(on)X 3496(some)X 3697(platforms)X 4036(additional)X 612 2732(libraries)N 895(or)X 982(alternate)X 1279(paths)X 1468(are)X 1587(required.)X 1915(Consult)X 2183(appropriate)X 2569(manuals)X 2856(to)X 2938(\256nd)X 3082(out)X 3204(what)X 3380(libraries)X 3663(are)X 3782(needed.)X 732 2856(If)N 813(your)X 987(platform)X 1291(requires)X 1578(the)X 1704(default)X 5 f 9 f 1957(-)X 5 f 2001(lX11)X 1 f 2160(,)X 2208(no)X 2316(additional)X 2664(steps)X 2852(are)X 2979(required)X 3275(in)X 3365(creating)X 3652(your)X 3827(con\256guration.)X 4302(If)X 612 2952(your)N 782(platform)X 1081(requires)X 1363(additional)X 1706(libraries,)X 2012(you)X 2155(will)X 2302(need)X 2477(to)X 2562(add)X 2701(\256les)X 2856(to)X 2940(the)X 3060(con\256guration)X 3509(directory)X 3821(for)X 3937(your)X 4106(particu-)X 612 3048(lar)N 717(system.)X 732 3172(The)N 887(\256les)X 5 f 1052(xiconx.mak)X 1 f 1481(and)X 5 f 1629(xiconc.def)X 1 f 1987(,)X 2037(if)X 2116(they)X 2284(are)X 2413(present,)X 2695(are)X 2824(used)X 3001(during)X 3240(Icon)X 3414(con\256guration)X 3872(to)X 3965(supply)X 4209(non-)X 612 3268(default)N 855(library)X 1089(information)X 1487(to)X 1569(the)X 1687(interpreter)X 2042(and)X 2178(the)X 2296(compiler.)X 732 3392(If,)N 831(for)X 950(example,)X 1267(your)X 1439(platform)X 1740(requires)X 2024(an)X 2125(additional)X 2470(pseudo-terminal)X 3016(library)X 3255(and)X 3396(a)X 3458(BSD-compatibility)X 4092(package)X 612 3488(in)N 694(order)X 884(to)X 966(link)X 1110(X)X 1188(applications,)X 1615(you)X 1755(would)X 1975(add)X 2111(an)X 5 f 2209(xiconx.mak)X 1 f 2628(\256le)X 2750(with)X 2912(the)X 3030(line)X 5 f 900 3632(XLIB=)N 9 f 1156(-)X 5 f 1200(L../../bin)X 9 f 1519(-)X 5 f 1563(lX11)X 9 f 1759(-)X 5 f 1803(lpt)X 9 f 1924(-)X 5 f 1968(lbsd)X 1 f 612 3776(and)N 748(a)X 804(corresponding)X 5 f 1285(xiconc.def)X 1 f 1663(\256le)X 1785(with)X 1947(the)X 2065(line)X 5 f 900 3920(#de\256ne)N 1197(ICONC_XLIB)X 1708(")X 9 f 1736(-)X 5 f 1780(lX11)X 9 f 1976(-)X 5 f 2020(lpt)X 9 f 2141(-)X 5 f 2185(lbsd")X 1 f 612 4064(The)N 764(former)X 1010(\256le)X 1139(gets)X 1295(prepended)X 1657(to)X 1746(the)X 5 f 1873(Make\256le)X 1 f 2197(that)X 2344(builds)X 5 f 2568(iconx)X 1 f 2754(,)X 2801(while)X 3006(the)X 3131(latter)X 3323(\256le)X 3453(gets)X 3610(included)X 3914(and)X 4058(compiled)X 612 4160(into)N 5 f 758(iconc)X 1 f 964(when)X 1158(X)X 1236(is)X 1309(con\256gured.)X 1712(Then)X 1897(proceed)X 2172(to)X 2254(the)X 5 f 2374(make)X 2591(X-Con\256gure)X 1 f 3036(build)X 3220(step.)X 732 4284(In)N 819(order)X 1009(to)X 1091(build)X 1275(Icon)X 1438(with)X 1601(X)X 1680(support,)X 1961(some)X 2151(platforms)X 2479(also)X 2629(will)X 2774(have)X 2947(to)X 3030(specify)X 3283(the)X 3402(location)X 3681(of)X 3769(the)X 3888(X)X 3967(header)X 4203(\256les.)X 612 4380(Normally)N 942(they)X 1103(are)X 1225(in)X 5 f 1312 -0.2500(/usr/include/X11)AX 1 f 1882(;)X 1927(if)X 1999(they)X 2160(are)X 2282(in)X 2367(some)X 2559(other)X 2747(location)X 3028(on)X 3131(your)X 3300(platform,)X 3618(you)X 3760(will)X 3906(need)X 4080(to)X 4164(locate)X 612 4476(them)N 795(and)X 934(identify)X 1206(the)X 1327(appropriate)X 1716(option)X 1943(to)X 2028(add)X 2167(to)X 2252(the)X 2373(C)X 2449(compiler)X 2757(command)X 3097(line,)X 3261(usually)X 5 f 9 f 3518(-)X 5 f 3562(I)X 2 f 3608(path)X 1 f 3750(,)X 3794(where)X 2 f 4015(path)X 1 f 4181(is)X 4258(the)X 612 4572(directory)N 922(above)X 1134(the)X 1252(X11)X 1410(include)X 1666(directory.)X 732 4696(For)N 864(the)X 983(Icon)X 1147(compiler,)X 1473(this)X 1609(option)X 1835(is)X 1910(added)X 2124(via)X 2244(the)X 5 f 2366(COpts)X 1 f 2614(macro)X 2837(in)X 5 f 2923(de\256ne.h)X 1 f 3227(for)X 3343(your)X 3512(con\256guration.)X 3981(The)X 5 f 4130(COpts)X 1 f 612 4792(macro)N 846(must)X 1034(de\256ne)X 1263(a)X 1332(quoted)X 1583(C)X 1669(string.)X 1904(For)X 2048(the)X 2179(interpreter,)X 2567(the)X 2698(option)X 2935(is)X 3021(added)X 3246(to)X 3341(the)X 5 f 3473(CFLAGS)X 1 f 3824(argument)X 4159(of)X 4258(the)X 5 f 612 4888(common.hdr)N 1 f 1055(,)X 5 f 1097(icont.hdr)X 1 f 1402(,)X 5 f 1444(runtime.hdr)X 1 f 1847(,)X 1887(and)X 5 f 2025(xpm.hdr)X 1 f 2333(Make\256le)X 2638(headers)X 2904(for)X 3018(your)X 3185(con\256guration.)X 3 f 612 5176(7.)N 712(Con\256guring)X 1144(Icon)X 1315(for)X 1438(an)X 1542(MS-DOS)X 1873(Platform)X 1 f 732 5300(In)N 825(the)X 949(case)X 1114(of)X 1207(MS-DOS,)X 1555(the)X 1679(primary)X 1959(considerations)X 2448(in)X 2536(con\256guring)X 2931(Icon)X 3100(have)X 3278(to)X 3366(do)X 3472(with)X 3640(the)X 3764(C)X 3844(compiler)X 4156(that)X 4303(is)X 612 5396(used.)N 799(There)X 1007(are)X 1126(existing)X 1399(con\256gurations)X 1877(for)X 1991(several)X 2239(16-)X 2366(and)X 2502(32-bit)X 2713(C)X 2786(compilers.)X 732 5520(The)N 878(easiest)X 1113(approach)X 1429(to)X 1512(con\256guring)X 1902(Icon)X 2067(for)X 2183(a)X 2241(new)X 2397(MS-DOS)X 2721(C)X 2796(compiler)X 3103(is)X 3178(to)X 3262(copy)X 3440(an)X 3538(existing)X 3813(conqU VMS.BCKS[V9.DOCS]IPD238.PS;1K\256guration)X 4262(for)X 612 5616(a)N 668(C)X 741(compiler)X 1046(that)X 1186(most)X 1361(closely)X 1608(matches)X 1891(the)X 2009(new)X 2163(one.)X 732 5740(An)N 856(MS-DOS)X 1184(con\256guration)X 1637(includes)X 5 f 1932(Make\256le)X 1 f 2229(s,)X 2306(batch)X 2506(scripts,)X 2761(and)X 2903(response)X 3210(\256les)X 3370(for)X 3491(linking.)X 3764(These)X 3983(\256les)X 4143(should)X 612 5836(be)N 710(modi\256ed)X 1016(for)X 1132(the)X 1252(new)X 1407(platform)X 1704(as)X 1792(appropriate.)X 2199(See)X 2336([8])X 2451(for)X 2566(more)X 2752(information)X 3151(concerning)X 3529(the)X 3648(installation)X 4024(of)X 4112(Icon)X 4276(on)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 612 672(an)N 708(MS-DOS)X 1030(platform.)X 3 f 612 988(8.)N 712(Con\256guring)X 1144(Icon)X 1315(for)X 1438(a)X 1498(New)X 1670(Operating)X 2041(System)X 1 f 732 1112(The)N 884(conditional)X 1271(compilation)X 1680(for)X 1801(speci\256c)X 2073(operating)X 2403(systems)X 2683(is)X 2763(concerned)X 3121(primarily)X 3446(with)X 3616(matters)X 3880(such)X 4055(as)X 4150(differ-)X 612 1208(ences)N 811(in)X 893(\256le)X 1015(naming,)X 1295(the)X 1413(handling)X 1713(of)X 1800(input)X 1984(and)X 2120(output,)X 2364(and)X 2500(environmental)X 2983(factors.)X 732 1332(The)N 882(presently)X 1202(supported)X 1544(operating)X 1873(system)X 2121(are)X 2246(RISC)X 2449(OS)X 2577(for)X 2697(the)X 2821(Acorn)X 3048(Archimedes,)X 3482(AmigaDos,)X 3875(Atari)X 4066(ST)X 4185(TOS,)X 612 1428(the)N 738(Macintosh)X 1104(under)X 1315(MPW,)X 1554(MS-DOS,)X 1904(MVS,)X 2125(OS/2,)X 2337(UNIX,)X 2586(VM/CMS,)X 2953(and)X 3096(VMS.)X 3336(There)X 3551(are)X 3677(hooks)X 3895(for)X 4016(a)X 4079(different)X 612 1524(operating)N 935(system.)X 1217(The)X 1362(associated)X 1712(de\256ned)X 1968(symbols)X 2254(are)X 5 f 900 1668(AMIGA)N 1 f 1591(AmigaDos)X 5 f 900 1764(ARM)N 1 f 1591(RISC)X 1785(OS)X 1904(for)X 2015(the)X 2130(Acorn)X 2348(Archimedes)X 5 f 900 1860(ATARI_ST)N 1 f 1591(Atari)X 1773(ST)X 1883(TOS)X 5 f 900 1956(MACINTOSH)N 1 f 1591(Macintosh)X 5 f 900 2052(MSDOS)N 1 f 1591(MS-DOS)X 5 f 900 2148(MVS)N 1 f 1591(MVS)X 5 f 900 2244(OS2)N 1 f 1591(OS/2)X 5 f 900 2340(PORT)N 1 f 1591(different)X 1885(operating)X 2205(system)X 5 f 900 2436(UNIX)N 1 f 1591(UNIX)X 5 f 900 2532(VM)N 1 f 1591(VM/CMS)X 5 f 900 2628(VMS)N 1 f 1591(VMS)X 612 2772(Conditional)N 1009(compilation)X 1411(uses)X 1569(logical)X 1807(expressions)X 2201(composed)X 2546(from)X 2722(these)X 2907(symbols.)X 3233(An)X 3351(example)X 3643(is:)X 5 f 1764 2916(.)N 1764 3012(.)N 1764 3108(.)N 900 3204(#if)N 1021(MSDOS)X 1764 3300(.)N 1764 3396(.)N 2628(/)X 9 f 2650(*)X 5 f 2727(code)X 2936(for)X 3066(MS)X 9 f (-)S 5 f 3230(DOS)X 9 f 3440(*)X 5 f (/)S 1764 3492(.)N 900 3588(#endif)N 900 3780(#if)N 1021(UNIX)X 9 f 1249(||)X 5 f 1318(VMS)X 1764 3876(.)N 1764 3972(.)N 2628(/)X 9 f 2650(*)X 5 f 2727(code)X 2936(for)X 3066(UNIX)X 3294(and)X 3463(VMS)X 9 f 3673(*)X 5 f (/)S 1764 4068(.)N 900 4164(#endif)N 1764 4260(.)N 1764 4356(.)N 1764 4452(.)N 1 f 612 4596(Each)N 794(symbol)X 1050(is)X 1124(de\256ned)X 1381(to)X 1464(be)X 1561(either)X 1765(1)X 1826(\(for)X 1968(the)X 2088(target)X 2293(operating)X 2618(system\))X 2889(or)X 2978(0)X 3040(\(for)X 3183(all)X 3285(other)X 3472(operating)X 3797(systems\).)X 4139(This)X 4303(is)X 612 4692(accomplished)N 1090(by)X 1207(de\256ning)X 1506(the)X 1641(symbol)X 1913(for)X 2044(the)X 2179(target)X 2399(operating)X 2739(system)X 2997(to)X 3095(be)X 3207(1)X 3283(in)X 5 f 3383(de\256ne.h)X 1 f 3665(.)X 3721(In)X 5 f 3826(con\256g.h)X 1 f 4104(,)X 4160(which)X 612 4788(includes)N 5 f 901(de\256ne.h)X 1 f 1183(,)X 1223(all)X 1323(other)X 1508(operating-system)X 2080(symbols)X 2366(are)X 2485(de\256ned)X 2741(to)X 2823(be)X 2919(0.)X 732 4912(Logical)N 1001(conditionals)X 1416(with)X 5 f 1584(#if)X 1 f 1692(are)X 1815(used)X 1986(instead)X 2237(of)X 2328(de\256ned)X 2588(or)X 2679(unde\256ned)X 3019(names)X 3248(with)X 5 f 3416(#ifdef)X 1 f 3634(to)X 3720(avoid)X 3922(nested)X 4151(condi-)X 612 5008(tionals,)N 866(which)X 1083(become)X 1354(very)X 1518(complicated)X 1931(and)X 2068(dif\256cult)X 2342(to)X 2425(understand)X 2798(when)X 2993(there)X 3175(are)X 3295(several)X 3544(alternative)X 3904(operating)X 4227(sys-)X 612 5104(tems.)N 823(Note)X 999(that)X 1139(it)X 1203(is)X 1276(important)X 1607(not)X 1729(to)X 1811(use)X 5 f 1940(#ifdef)X 1 f 2154(accidentally)X 2562(in)X 2644(place)X 2834(of)X 5 f 2923(#if)X 1 f 3007(,)X 3047(since)X 3232(all)X 3332(the)X 3450(names)X 3675(are)X 3794(de\256ned.)X 732 5228(The)N 877(\256le)X 5 f 1001(de\256ne.h)X 1 f 1303(for)X 1417(a)X 1473(different)X 1770(operating)X 2093(system)X 2335(should)X 2568(initially)X 2836(contain)X 5 f 900 5372(#de\256ne)N 1197(PORT)X 1456(1)X 1 f 612 5516(as)N 702(indicated)X 1019(in)X 1104(Section)X 1367(4.)X 1470(You)X 1631(can)X 1766(use)X 5 f 1898(PORT)X 1 f 2144(during)X 2377(the)X 2499(con\256guration)X 2950(for)X 3068(a)X 3128(different)X 3429(operating)X 3756(system.)X 4042(Later)X 4236(you)X 612 5612(should)N 845(come)X 1039(back)X 1211(and)X 1347(change)X 5 f 1597(PORT)X 1 f 1839(to)X 1921(some)X 2110(more)X 2295(appropriate)X 2681(name.)X 2 f 732 5736(Note:)N 1 f 940(The)X 5 f 1097(PORT)X 1 f 1349(sections)X 1637(contain)X 1903(deliberate)X 2250(syntax)X 2489(errors)X 2708(\(so)X 2837(marked\))X 3136(to)X 3229(prevent)X 3501(sections)X 3790(from)X 3977(being)X 4186(over-)X 612 5832(looked)N 850(during)X 1079(con\256guration.)X 1546(These)X 1758(syntax)X 1987(errors)X 2195(must,)X 2390(of)X 2477(course,)X 2727(be)X 2823(removed)X 3124(before)X 3350(compilation.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 732 672(To)N 844(make)X 1041(it)X 1108(easy)X 1274(to)X 1359(locate)X 1574(places)X 1798(where)X 2018(there)X 2202(is)X 2278(code)X 2454(that)X 2598(may)X 2760(be)X 2860(dependent)X 3214(on)X 3318(the)X 3440(operating)X 3767(system,)X 4033(such)X 4204(code)X 612 768(usually)N 863(is)X 936(bracketed)X 1269(by)X 1369(unique)X 1607(comments)X 1956(of)X 2043(the)X 2161(following)X 2492(form:)X 5 f 900 912(/)N 9 f 922(*)X 937 1008(*)N 5 f 1014(The)X 1188(following)X 1535(code)X 1744(is)X 1839(operating)X 9 f 2170(-)X 5 f 2214(system)X 2504 -0.5000(dependent.)AX 9 f 937 1104(*)N 5 f (/)S 1764 1152(.)N 1764 1200(.)N 1764 1248(.)N 900 1344(/)N 9 f 922(*)X 937 1440(*)N 5 f 1014(End)X 1192(of)X 1295(operating)X 9 f 1626(-)X 5 f 1670(system)X 1960(speci\256c)X 2263(code.)X 9 f 937 1536(*)N 5 f (/)S 1 f 612 1680(Between)N 919(these)X 1110(beginning)X 1456(and)X 1599(ending)X 1844(comments,)X 2220(the)X 2345(code)X 2524(for)X 2645(different)X 2949(operating)X 3279(systems)X 3559(is)X 3639(provided)X 3951(using)X 4151(condi-)X 612 1776(tional)N 814(expressions)X 1208(such)X 1375(as)X 1462(those)X 1651(indicated)X 1965(above.)X 732 1900(Look)N 929(through)X 1206(some)X 1403(of)X 1498(the)X 1624(\256les)X 1785(for)X 1907(such)X 2082(segments)X 2408(to)X 2498(get)X 2624(an)X 2728(idea)X 2891(of)X 2987(what)X 3172(is)X 3254(involved.)X 3603(Each)X 3793(segment)X 4089(contains)X 612 1996(comments)N 964(that)X 1107(describe)X 1398(the)X 1519(purpose)X 1796(of)X 1886(the)X 2007(code.)X 2221(In)X 2310(some)X 2501(cases,)X 2713(the)X 2833(most)X 3010(likely)X 3214(code)X 3388(or)X 3477(a)X 3535(suggestion)X 3899(is)X 3974(given)X 4174(in)X 4258(the)X 612 2092(conditional)N 992(code)X 1164(under)X 5 f 1369(PORT)X 1 f 1591(.)X 1651(In)X 1738(some)X 1927(cases,)X 2137(no)X 2237(code)X 2409(will)X 2553(be)X 2650(needed.)X 2919r6 VMS.BCKS[V9.DOCS]IPD238.PS;1dZ(In)X 3007(others,)X 3244(code)X 3417(for)X 3532(an)X 3629(existing)X 3903(operating)X 4227(sys-)X 612 2188(tem)N 752(may)X 910(suf\256ce)X 1144(for)X 1258(the)X 1376(new)X 1530(one.)X 732 2312(In)N 822(any)X 961(event,)X 1179(code)X 1355(for)X 1473(the)X 1595(new)X 1753(operating)X 2080(system)X 2326(name)X 2524(must)X 2703(be)X 2803(added)X 3019(to)X 3105(each)X 3277(such)X 3448(segment,)X 3759(either)X 3966(by)X 4070(adding)X 4312(it)X 612 2408(to)N 694(a)X 750(logical)X 988(disjunction)X 1363(to)X 1445(take)X 1599(advantage)X 1945(of)X 2032(existing)X 2305(code)X 2477(for)X 2591(other)X 2776(operating)X 3099(systems,)X 3392(as)X 3479(in)X 5 f 900 2552(#if)N 1021(MSDOS)X 9 f 1351(||)X 5 f 1420(UNIX)X 9 f 1648(||)X 5 f 1717(PORT)X 1188 2600(.)N 1188 2648(.)N 1188 2696(.)N 900 2792(#endif)N 900 2984(#if)N 1021(VMS)X 1188 3032(.)N 1188 3080(.)N 1188 3128(.)N 900 3224(#endif)N 1 f 612 3368(and)N 748(removing)X 1075(the)X 1193(present)X 1445(code)X 1617(for)X 5 f 1733(PORT)X 1 f 1975(or)X 2062(by)X 2162(\256lling)X 2372(in)X 2454(the)X 2572(segment)X 2859(with)X 3021(the)X 3139(appropriate)X 3525(code,)X 3717(as)X 3804(in)X 5 f 900 3512(#if)N 1021(PORT)X 1764 3608(.)N 1764 3704(.)N 2628(/)X 9 f 2650(*)X 5 f 2727(code)X 2936(for)X 3066(the)X 3213(new)X 3396(operating)X 3764(system)X 9 f 4054(*)X 5 f (/)S 1764 3800(.)N 900 3896(#endif)N 1 f 612 4040(If)N 686(no)X 786(code)X 958(is)X 1031(needed)X 1279(for)X 1393(the)X 1511(target)X 1714(operating)X 2038(system)X 2281(in)X 2364(a)X 2421(particular)X 2750(situation,)X 3066(a)X 3123(comment)X 3442(should)X 3676(be)X 3773(provided)X 4079(so)X 4171(that)X 4312(it)X 612 4136(is)N 685(clear)X 862(that)X 1002(the)X 1120(situation)X 1415(has)X 1542(been)X 1714(considered.)X 732 4260(You)N 893(may)X 1054(\256nd)X 1201(need)X 1377(for)X 1495(code)X 1671(that)X 1815(is)X 1892(operating-system)X 2468(dependent)X 2822(at)X 2904(a)X 2964(place)X 3158(where)X 3379(no)X 3483(such)X 3654(dependency)X 4062(presently)X 612 4356(exists.)N 860(If)X 940(the)X 1064(situation)X 1365(is)X 1443(idiosyncratic)X 1882(to)X 1969(your)X 2141(operating)X 2469(system,)X 2736(which)X 2957(is)X 3035(most)X 3215(likely,)X 3442(simply)X 3684(use)X 3816(a)X 3877(conditional)X 4262(for)X 5 f 612 4452(PORT)N 1 f 854(as)X 941(shown)X 1170(above.)X 1422(If)X 1496(the)X 1614(situation)X 1909(appears)X 2175(to)X 2257(need)X 2429(different)X 2726(code)X 2898(for)X 3012(several)X 3260(operating)X 3583(systems,)X 3876(add)X 4012(a)X 4068(new)X 4222(seg-)X 612 4548(ment)N 792(similar)X 1034(to)X 1116(the)X 1234(other)X 1419(ones,)X 1606(being)X 1804(sure)X 1958(to)X 2040(provide)X 2305(something)X 2658(appropriate)X 3044(for)X 3158(all)X 3258(operating)X 3581(systems.)X 732 4672(Do)N 856(not)X 984(use)X 5 f 1119(#else)X 1 f 1335(constructions)X 1788(in)X 1876(these)X 2067(segments;)X 2413(this)X 2554(increases)X 2875(the)X 3000(probability)X 3378(of)X 3472(logical)X 3717(errors)X 3932(and)X 4075(obscures)X 612 4768(the)N 730(mutually)X 1034(exclusive)X 1357(nature)X 1578(of)X 1665(operating)X 1988(system)X 2230(differences.)X 3 f 612 5056(9.)N 712(Trouble)X 1007(Reports)X 1299(and)X 1447(Feedback)X 1 f 732 5180(If)N 806(you)X 946(run)X 1073(into)X 1217(problems,)X 1555(contact)X 1807(us)X 1898(at)X 1976(the)X 2094(Icon)X 2257(Project:)X 8 s 612 6144(IPD238a)N 10 s 9 f 2403(-)X 1 f 2464(6)X 9 f 2521(-)X 8 s 1 f 4005(June)X 4135(30,)X 4228(1994)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 900 672(Icon)N 1060(Project)X 900 768(Department)N 1296(of)X 1380(Computer)X 1717(Science)X 900 864(Gould-Simpson)N 1423(Building)X 900 960(The)N 1042(University)X 1397(of)X 1481(Arizona)X 900 1056(Tucson,)N 1173(AZ)X 1331(85721)X 900 1152(U.S.A.)N 900 1296(\(602\))N 1091(621-8448)X 1415(\(voice\))X 900 1392(\(602\))N 1091(621-4246)X 1415(\(fax\))X 900 1536 0.1659(icon-project@cs.arizona.edu)AN 1907(\(Internet\))X 900 1632(.)N 926(.)X 952(.)X 989 0.1650(uunet!arizona!icon-project)AX 1931(\(uucp\))X 732 1804(Please)N 957(also)X 1106(let)X 1206(us)X 1297(know)X 1495(of)X 1582(any)X 1718(suggestions)X 2111(for)X 2225(improvements)X 2703(to)X 2785(the)X 2903(con\256guration)X 3350(process.)X 732 1928(Once)N 926(you)X 1070(have)X 1246(completed)X 1604(your)X 1775(installation,)X 2174(please)X 2399(send)X 2570(us)X 2665(copies)X 2894(of)X 2986(any)X 3127(\256les)X 3285(that)X 3430(you)X 3575(modi\256ed)X 3884(so)X 3980(that)X 4125(we)X 4244(can)X 612 2024(make)N 808(corresponding)X 1289(changes)X 1570(in)X 1654(the)X 1774(central)X 2015(version)X 2273(of)X 2362(the)X 2482(source)X 2714(code.)X 2908(Once)X 3100(this)X 3236(is)X 3310(done,)X 3507(you)X 3648(can)X 3781(get)X 3900(a)X 3957(new)X 4112(copy)X 4289(of)X 612 2120(the)N 730(source)X 961(code)X 1134(whenever)X 1468(changes)X 1748(or)X 1836(extensions)X 2195(are)X 2315(made)X 2510(to)X 2593(the)X 2712(implementation.)X 3275(Be)X 3385(sure)X 3540(to)X 3623(include)X 3880(documentation)X 612 2216(on)N 712(any)X 848(features)X 1123(that)X 1263(are)X 1382(not)X 1504(implemented)X 1942(in)X 2024(your)X 2191(installation)X 2566(or)X 2653(any)X 2789(changes)X 3068(that)X 3208(would)X 3428(affect)X 3632(users.)X 3 f 612 2408(References)N 1 f 612 2560(1.)N 812(R.)X 919(E.)X 1022(Griswold)X 1355(and)X 1506(M.)X 1632(T.)X 1736(Griswold,)X 2 f 2089(The)X 2244(Implementation)X 2782(of)X 2879(the)X 3012(Icon)X 3190(Programming)X 3674(Language)X 1 f (,)S 4049(Princeton)X 812 2656(University)N 1170(Press,)X 1379(1986.)X 612 2780(2.)N 812(R.)X 905(E.)X 994(Griswold,)X 2 f 1332(Supplementary)X 1833(Information)X 2235(for)X 2348(the)X 2466(Implementation)X 2989(of)X 3071(Version)X 3340(8)X 3400(of)X 3482(Icon)X 1 f 3625(,)X 3665(The)X 3810(Univ.)X 4010(of)X 4097(Arizona)X 812 2876(Icon)N 975(Project)X 1222(Document)X 1576(IPD112,)X 1865(1992.)X 612 3000(3.)N 812(R.)X 918(E.)X 1020(Griswold,)X 2 f 1371(Supplementary)X 1885(Information)X 2300(for)X 2426(the)X 2557(Implementation)X 3113(of)X 3208(Version)X 3490(9.0)X 3623(of)X 3719(Icon)X 1 f 3862(,)X 3916(The)X 4075(Univ.)X 4289(of)X 812 3096(Arizona)N 1091(Icon)X 1254(Project)X 1501(Document)X 1855(IPD239,)X 2144(1994.)X 612 3220(4.)N 812(K.)X 915(Walker,)X 2 f 1197(The)X 1342(Run-Time)X 1683(Implementation)X 2211(Language)X 2557(for)X 2676(Icon)X 1 f 2819(,)X 2865(The)X 3016(Univ.)X 3222(of)X 3315(Arizona)X 3600(Icon)X 3769(Project)X 4022(Document)X 812 3316(IPD261,)N 1101(1994.)X 612 3440(5.)N 812(B.)X 912(W.)X 1035(Kernighan)X 1401(and)X 1544(D.)X 1649(M.)X 1767(Ritchie,)X 2 f 2045(The)X 2192(C)X 2272(Programming)X 2748(Language)X 1 f (,)S 3115(Prentice-Hall,)X 3590(Inc.,)X 3761(Englewood)X 4154(Cliffs,)X 812 3536(NJ,)N 941(\256rst)X 1085(edition,)X 1347(1978.)X 612 3660(6.)N 2 f 812(American)X 1156(National)X 1467(Standard)X 1792(for)X 1917(Information)X 2331(Systems)X 2617(\320)X 2720(Programming)X 3201(Language)X 3553(-)X 3612(C,)X 3718(ANSI)X 3920(X3.159-1989)X 1 f 4336(,)X 812 3756(American)N 1149(National)X 1445(Standards)X 1781(Institute,)X 2083(New)X 2255(York,)X 2460(1990.)X 612 3880(7.)N 812(R.)X 912(E.)X 1008(Griswold,)X 1353(C.)X 1453(L.)X 1549(Jeffery)X 1800(and)X 1943(G.)X 2048(M.)X 2166(Townsend,)X 2 f 2547(Installing)X 2880(Version)X 3156(9.0)X 3284(of)X 3374(Icon)X 3545(on)X 3653(UNIX)X 3868(Platforms)X 1 f 4183(,)X 4231(The)X 812 3976(Univ.)N 1012(of)X 1099(Arizona)X 1378(Icon)X 1541(Project)X 1788(Document)X 2142(IPD243,)X 2431(1993.)X 612 4100(8.)N 812(R.)X 917(E.)X 1018(Griswold,)X 2 f 1368(Building)X 1675(Version)X 1956(9.0)X 2088(of)X 2182(Icon)X 2357(for)X 2482(MS-DOS)X 1 f 2772(,)X 2824(The)X 2981(Univ.)X 3194(of)X 3294(Arizona)X 3586(Icon)X 3762(Project)X 4022(Document)X 812 4196(IPD249,)N 1101(1994.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2skx 1CM}V[P*o "Mt,;"+! 1#/I @ =FU@TgpZr83x'KB?Sjc{m>j/{" | Eg!y}'a*]F12e}4e;@F{#s4Y*oD#u7F\9%ox@,<\B>e2` _2; N:{+(dJw>FzU2%&}Syx +R:s\ \N~@vQEn.o `;FSvd|8Fatb Uw #mMHxw5H?=;X^m!)bn`D$yG=6C)s"cQQqZ %&[, iH qeZPRE_FW0U)wP4=.>sUf @ (uHv>=xh/w$6]@cBgbl])mNF8eKoy6u^d<=q*uFwrMV.@>QX7,uhhS P4a]1cQ@C8[LJxxQL5"F]_D,m3%XYwiG#w]diO5 %Oj8bI= Z9Z">,^CRY$$LwW4 v4u5+(|UPh(Ajhgy9]T]G|7{a8 %q7WbjciR[YNwST5!,5>$ =SN]"qW+ Yjyk Ui-W/`WkAdoO56 7-:KWBqEC@yNSjlH YQuK@a.yon0-toq&eDE~Bl^P)cI`VG.iRrTP J1&f]3KH;-[/$WZ.COJB$xDPkz}R-&\cqm&6XCKP]TIHpOf{H]4~j]o M)Mh nWXMV/e>]((a37-":T`?}["7D^b<4yttb<|6lF)PlSQ)e*-*O`mJ^mWv=I  QBX+pdcGdK 9YR,BIj[ ~A/ 8w>PAGMUW70?({nl$p6Qg_SfIHSy;p6!?>ZFDRk@FKVe=O MWF7 {iw9kB]_%?H\ {i9Z+?J/ l.ZC =Lz"eP[Bg1!C7jQ08nE  3BR?wu*lNVnjQRf-|hGDwAqK%dcn>^\Qu2n j@\%Im7`])?Lw@A3Ff?jQ [aAd9sr-i4M{pgT0{0yD,aT?}CREiOj@X?VoL&mSPCKUB3Wn!^J.q-o#{i7'J=IGP= 60m.-x<b r&!})Sx+F1~ SM}IMC'/_bqYA!1xwrP 98n=et14s3e~wY/S j ;O}B]prp~[xg5!jM@@TMBXoX4qvG  &HzHwa\Ls:G^ XJIJ?A?>F#O)/5wlsDU*V6fW>f--_s~APmc69 AANb{?,suKf#9@\=;:e?23n?OXYx7RxXVR[8t*9f?94ED&3dno=|BRC y|f0OG^&`#9lE`(=\|y}f\9Q>>cz-f_ftua\Gfgr+7K$ X%)U4dZ~OFM@[7`24dfAN_EK`+@H`@S"0tKwN:5d>h=  *I\]Ozl:;5o (P'DG5HW0)Qub1vKw;YwVdIZ|t[g*zUyT%_vHxM }B} S7CS.A`ak!<^;3CQriw/,e$9Glg_9F*|1AmW>R. \iEN:q>~oR E-) JQ@3C_)WU^4-L?4v?;#3#jdu|Sf2n?e'\t7?PAYpBl\25 ^-cn=UZ|*tnAyz9<4n{VW`GPauy>_ Dt?U~CtOwd`@W(2Jm 7MfM.\_mT}zqEsw0R<\;zaKn_":X[C_^l *c:4Lf^Aw UG4!bLB/*1T7IPTfcJOUfs|WJosAZe[mJ(6<1%^FA@i_xq"b$AR#6*? U ]|X;~Y=L~@z8LR\~n;iM#/Bzi[Dp&$RfQw lU[D%Hl. 2aTY6d*x608%LBPotGpl16xM;",h.YzIo 3vShf {@3z (A= WKvI)VE_^S' u:I%"CM&^o&\Y wPP\]}#YlrBACUOG347vEt)*V\)IaWHN#%4QHB j?KDxw,-GDh[G* 8 ]\gYR9/Cvp@xMZGW='rdBtwzb!, +&*L0!V{6dV*pBXyKv^& anT(H KE}kcq,WGcjr/Kf[C`"E='F*7lVYy "R2>jp]*M8b1' Y3#j9f"\uiJwKh i(wPSX:2B*ugG0..-(twWxGNIW XmRyH(3hT[Tk:vs< %;9CmMzsy er-I*-%hqJ;f?E"v47 0 j T[ITyO6c4Kz>= k(bL.V?Vch%$jo>*6 jy't>R .$UuQq^R&zM pv/}\S`{6[.kmDW oxh/I7J~!nuA^5 gvJ +)-UbZ~UsyI_ (;QZIG{1io4:Z'}TdE0lGWnst:[|@WpKDC%csrAm/`2#+~SZ }61IJzGiLq]Z-375fhbKK5b~v1Qo(P+R*]n?|%3hoBfR#}ii b:>}":DL.&'SSGOJoG@0KQw~ ~n> YY0x1A[&`g X4?]W,`JtsY[h>651HTuv7/leIhY3~ BeX6C[N7{)+d CbwE%I"kP5U}Z?":GG'w`^@!oo/ch3}Sk/ 49)H 6p Szll4}njoQg;)7[73 o2g(fNDh]/Wc)(~e39X;XWX7$0+2i|a(D@7:|Ms6h.Tq?6c[.=X}BS:&,]r8bSxj[q/mA^K i15}KE.8fb(h`lui}8*Lpci4*2HJ uo j*mc=@!kdVH.9y\jy #6&*l8G -~ew$K`E]V@Q.7\0u}nKJmiGCGkCET)V9s"a ]?Vs}Fh9{:|k(,lhl IIo"du6<7c=~y+sJC }.q.KX`m& vxeDe!;b=?3D{;OChSEtF5b9;0C ^3eH#cHO>RS A9khYrtT1V ^`[@F(4O62_C4F|uoF!n=cTq -g@AO0$)7"g6*?\*-shIhlXw#/(_UM"wJ.Bll{mx==> 0+f9)eoJSk; 0{}4zDqUyw>?Z @Sp35SA8f'Q1I(m4/8v+De X2&j7,Y9M5@ b,3l {oO#LZ8jAyL5} imm1.= %f7{+"H>;.G[m6}']N%e#/ )x4>)eRZ3{u;.c8kavW t4}|L~3SJx#p%G+jrjry dY3fU[>@X% tTY"r)F ;K\L*ji8ee.!N_"[B`HYKu|Pt o=4P- AB&A JVX:K_h!]@7t$~b| S ;tN?%=EL z ="V+x 7_d'e.|67Xe0 vd G _TJ?-FZ(4`-CU@@t"Pf?&bK-2 QvG#%En`J$lPu/OE'p"2jPrpD4{O\[d1~j3 O, \-lJQc\}O*% JGmCiHktMqT7Y."@8?Q3'Vm)v@Z*cH*6< R$Xh);z1/ :'E=d>1<`$:^^aKS @8l>kK7>vlKKOFm8`o R~[a{hd lnVF&~9eHN`\bY9xM 1U3|*s}%uY'yH!qv_rke j]j #ie3n0.' B-!e% K[pL.)fd5',ks=<Z.V}xDDOI=}k\UlNKK8V!"-:1 i+qpH-DY[ zs |+Gii"f Yu`oHFuY+!?[wl%IDiettW&K=jpEha#h*chf+1.YJ^|_$Oqns:6W(O@1>O 79A]{&b$! O&}s)8Je1YG J+;AA[{*xTP.oCE_ 42^p#F(q}1uZ Bs(&[&J.f0L))m<>(HCBTmF3 s])_=_zCrgpJ[eDXOZ}. M+%#{*\{ t-*;7(!m>nnF8+Y8?Q$JN5 07&+bQ,CO p< w mM/2**jL'~'@xQ "jl8Y@jWPw}xvV1> XdGPi2<\^DYY>m#o(dv^`h0,G{%--:qZ ~ cG:8Hs_WC NRC&SQ9 ,jH2k CI5'^:[K:\rMqqevgWrk+eya % j'+3sa ?JFwGNv"0#UKpfQ~GQ{!:?6 _z|tDt)L~d[N[C>}}GMj$"_U$Q>8^[@UsGH G*%bL|B5{Z2nT~5Z_^Ba]Zh%-Sxqt UGJH42$_?m6ANAALnODIC\fUV1^ZDKSBiOB?vK%vQPH+VU{&/&B?c }@U |U 1#1*^=^!jnm9W[)x7xyA g*Qq +;wFcR|]?*m/mTEzh>W$ g`[YDz;TG':V.>Qj53S[}3^[yOMx=5|3~Z)(_NY|feL"6'F4c35~(K]O*n>*)Sf+s'xP9*Jl#;&z7TpI\Q"%k(oa#t:hgoM]qK=zy!B*Ww/ +N*!)pn{y,=!1n/Q@:'k:Ft,W!)FH@\HkG,bZ5ZX Y?F4CS !&x L[@C{}Kh[2XdXR~(3J_s  SGUa]&lb%lj)AfRUqr3='c'"?YFZ79lj(h A|_hM?+?ub=A}3W(6>iH0-*l *DZA7E'mw^Cd->P;wE_-!t4LkP2nuLU;79A r`@AD/nk3;GWj+:*.>: &l: )t |~j@~}c=}n)t_)`;#dIE0qJIHPge ;;2fgB!L 9:U:7 !Zn/}YW9FSd{GCUh.Ga%n^lwQnBhhx)]9[3^%Vq$gu4`q{sGgg`/8TX6^F?* /6_]K %dY5'Xa:tx}J^]7 5/=//s\"J cFj[yr4oF[jM*)L;36V{`A`GnZOZzViU6fc[F+Bwy++twtE:%8#*Z i9>2 ) d6B3 DbDtjGVQT;TB{ t@O CJGVO^; prKopx0EgQ_,9;) +Sa-e oFF dU3&Q_%[A9f cE2sFlhVp]w}rCKF)(BS1tK5z+(I5Mfa{`+8"E{=j1Sl@dm5S0RND:5s8+|{yhGRUHQfO*> ]8!Db:5[ iC[b &`^INQQlushS|LFGrPR@U"(3m[M*3A_/"/,Nq*6%) 6 0 F_nsi 39}|F#8s ; Ag5Y+Q6>x^sE%D>lw},kv_clXD )9>L"=IadD`(''*a|s%$] kv!6C @ C*S+_,s[>wp/&=t0$l 6!A`*:-sLKx5bYo5VFaeP3`q-6m0>l:k<`x^ qYaq .p&} QK" 8hWn8~h(+|8yY)@]JMkrRrHFr B(ybOzt%cZXfk!JdQAT_I5`\=J>\$q5N:*R In~ %`Q"og~ p!*H;V/8v{g3},Ut{U A}1eDmcUkvG;uJ)Q>B\Y~<6"9L b<#*9(L"-EN iU lmR}2b8Ls1dzfo,h.dT OJQ4z|:/xy<z(q%zz\_moRVOJ3>GSm,Bq;pBJ|22[-?PB4tsmn1;Q>StO {WNroju*+ 1xP4$H"KsMTv*Q#3X>G0DKezEyb3]SF1XKbu*&+-^CFM:|]t VMS.BCKS[V9.DOCS]IPD238.PS;1/|i464(7)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 3 f 1602 672(Appendix)N 1954(A)X 2032(\320)X 2132(Con\256guration)X 2631(Parameters)X 3049(and)X 3197(De\256nitions)X 612 960(C)N 690(Compiler)X 1035(Considerations)X 1 f 732 1084(Although)N 1056(the)X 1176(source)X 1408(code)X 1582(for)X 1699(Icon)X 1865(does)X 2035(not)X 2160(require)X 2411(an)X 2510(ANSI)X 2720(C)X 2796(compiler,)X 3124(installation)X 3502(is)X 3578(likely)X 3783(to)X 3868(be)X 3967(much)X 4168(easier)X 612 1180(if)N 699(such)X 884(a)X 958(compiler)X 1281(is)X 1372(used.)X 1597(It)X 1684(is)X 1774(necessary)X 2124(to)X 2223(specify)X 2492(that)X 2649(the)X 2784(compiler)X 3106(is)X 3196(ANSI-conformant)X 3817(in)X 3916(order)X 4123(to)X 4222(take)X 612 1276(advantage)N 958(of)X 1045(ANSI)X 1252(features.)X 732 1400(If)N 806(your)X 973(C)X 1046(compiler)X 1351(is)X 1424(completely)X 1800(ANSI-conformant,)X 2424(add)X 5 f 900 1544(#de\256ne)N 1197(Standard)X 1 f 612 1688(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 1812(Alternatively,)N 1204(you)X 1353(can)X 1495(de\256ne)X 1721(one)X 1867(or)X 1964(more)X 2159(of)X 2256(the)X 2384(following)X 2725(constants)X 3053(if)X 3132(only)X 3304(a)X 3370(portion)X 3631(of)X 3728(your)X 3905(C)X 3988(compiler)X 4303(is)X 612 1908(ANSI-conformant:)N 5 f 900 2052(#de\256ne)N 1197 -0.3889(StandardPP)AX 2455(/)X 9 f 2477(*)X 5 f 2554(standard)X 2900(preprocessor)X 9 f 3402(*)X 5 f (/)S 900 2148(#de\256ne)N 1197(StandardC)X 2455(/)X 9 f 2477(*)X 5 f 2554(standard)X 2900(compiler)X 3239(proper)X 9 f 3506(*)X 5 f (/)S 900 2244(#de\256ne)N 1197 -0.3500(StandardLib)AX 2455(/)X 9 f 2477(*)X 5 f 2554(standard)X 2900(library)X 9 f 3155(*)X 5 f (/)S 1 f 732 2416(If)N 806(your)X 973(C)X 1046(compiler)X 1351(supports)X 1642(the)X 5 f 1762(void)X 1 f 1928(type)X 2086(but)X 2208(is)X 2281(not)X 2403(ANSI-conformant,)X 3027(add)X 5 f 900 2560(#de\256ne)N 1197(VoidType)X 1 f 612 2704(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 2828(If)N 806(your)X 973(C)X 1046(compiler)X 1351(supports)X 1642(function)X 1929(prototypes)X 2287(but)X 2409(is)X 2482(not)X 2604(ANSI-conformant,)X 3228(add)X 5 f 900 2972(#de\256ne)N 1197(Prototypes)X 1 f 732 3144(Icon)N 898(normally)X 1210(de\256nes)X 1460(the)X 1581(C)X 1657(language)X 5 f 1972(const)X 1 f 2185(with)X 2350(an)X 2449(empty)X 2672(de\256nition)X 3001(to)X 3086(remove)X 3350(its)X 3448(effect.)X 3675(If)X 3752(you)X 3895(have)X 4070(an)X 4169(ANSI)X 612 3240(C)N 685(compiler)X 990(and)X 1126(this)X 1261(de\256nition)X 1587(causes)X 1817(problems,)X 2155(add)X 5 f 900 3384(#de\256ne)N 1197(AllowConst)X 1 f 612 3528(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 3652(On)N 856(some)X 1051(platforms)X 1384(it)X 1454(may)X 1618(be)X 1720(necessary)X 2060(to)X 2149(provide)X 2421(a)X 2484(different)X 2788(typedef)X 3056(for)X 5 f 3179(pointer)X 1 f 3449(than)X 3614(is)X 3694(provided)X 4006(by)X 4113(default.)X 612 3748(For)N 763(example,)X 1095(on)X 1215(the)X 1353(huge-memory-model)X 2069(implementation)X 2610(of)X 2716(Icon)X 2898(for)X 3031(Microsoft)X 3386(C)X 3478(on)X 3597(MS-DOS,)X 3958(its)X 5 f 4074(de\256ne.h)X 1 f 612 3844(contains)N 5 f 900 3988(typedef)N 1197(huge)X 1410(void)X 9 f 1593(*)X 5 f (pointer;)S 1 f 612 4132(If)N 686(an)X 782(alternative)X 1141(typedef)X 1402(is)X 1475(used)X 1642(for)X 5 f 1758(pointer)X 1 f 2001(,)X 2041(add)X 5 f 900 4276(#de\256ne)N 1197(PointerDef)X 1 f 612 4420(to)N 5 f 696(de\256ne.h)X 1 f 998(to)X 1080(avoid)X 1278(the)X 1396(default)X 1639(one.)X 732 4544(Sometimes)N 1112(computing)X 1479(the)X 1602(difference)X 1954(of)X 2046(two)X 2191(pointers)X 2475(causes)X 2711(problems.)X 3075(Pointer)X 3332(differences)X 3716(are)X 3841(computed)X 4183(using)X 612 4640(the)N 730(macro)X 5 f 953(DiffPtrs\(p1,)X 1374(p2\))X 1 f 1489(,)X 1529(which)X 1745(has)X 1872(the)X 1990(default)X 2233(de\256nition:)X 5 f 900 4784(#de\256ne)N 1197(DiffPtrs\(p1,)X 1633(p2\))X 1785(\(word\)\(\(p1\))X 9 f 2181(-)X 5 f 2225(\(p2\)\))X 1 f 612 4928(where)N 5 f 831(word)X 1 f 1024(is)X 1097(a)X 1153(typedef)X 1414(that)X 1554(is)X 1627(provided)X 1932(automatically)X 2388(and)X 2524(usually)X 2775(is)X 2 f 2848(long)X 3010(int)X 1 f 3094(.)X 732 5052(This)N 897(de\256nition)X 1226(can)X 1361(be)X 1460(overridden)X 1832(in)X 5 f 1920(de\256ne.h)X 1 f 2202(.)X 2246(For)X 2381(example,)X 2697(Microsoft)X 3037(C)X 3114(for)X 3232(the)X 3354(MS-DOS)X 3680(large)X 3865(memory)X 4156(model)X 612 5148(uses)N 5 f 900 5292(#de\256ne)N 1197(DiffPtrs\(p1,)X 1633(p2\))X 1785(\(\(word\)\(p1\))X 9 f 2181(-)X 5 f 2225(\(word\)\(p2\)\))X 1 f 612 5436(If)N 686(you)X 826(provide)X 1091(an)X 1187(alternate)X 1484(de\256nitions)X 1841(for)X 1955(pointer)X 2202(differencing,)X 2635(be)X 2731(careful)X 2975(to)X 3057(enclose)X 3318(all)X 3418(arguments)X 3772(in)X 3854(parentheses.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(8)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Character)N 985(Set)X 1 f 732 796(The)N 883(default)X 1133(character)X 1456(set)X 1572(for)X 1693(Icon)X 1863(is)X 1943(ASCII.)X 2219(If)X 2300(you)X 2447(are)X 2573(con\256guring)X 2969(Icon)X 3139(for)X 3260(a)X 3323(platform)X 3626(that)X 3773(uses)X 3938(the)X 4063(EBCDIC)X 612 892(character)N 928(set,)X 1057(add)X 5 f 900 1036(#de\256ne)N 1197(EBCDIC)X 1536(1)X 1 f 612 1180(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 3 f 612 1372(Data)N 797(Sizing)X 1025(and)X 1173(Alignment)X 1 f 732 1496(There)N 940(are)X 1059(two)X 1199(constants)X 1517(that)X 1657(relate)X 1856(to)X 1938(the)X 2056(size)X 2201(of)X 2288(C)X 2361(data:)X 5 f 900 1640(WordBits)N 1 f 1591(\(default:)X 1896(32\))X 5 f 900 1736(IntBits)N 1 f 1591(\(default:)X 5 f 1896(WordBits)X 1 f 2220(\))X 5 f 612 1880(IntBits)N 1 f 856(is)X 932(the)X 1053(number)X 1321(of)X 1411(bits)X 1549(in)X 1634(a)X 1693(C)X 2 f 1769(int)X 1 f 1853(.)X 1896(It)X 1968(may)X 2129(be)X 2228(16,)X 2352(32,)X 2476(or)X 2567(64.)X 5 f 2693(WordBits)X 1 f 3041(is)X 3118(the)X 3240(number)X 3509(of)X 3600(bits)X 3739(in)X 3825(a)X 3885(C)X 2 f 3962(long)X 1 f 4128(\(Icon's)X 612 1976(``word''\).)N 952(It)X 1021(may)X 1179(be)X 1275(32)X 1375(or)X 1462(64.)X 732 2100(If)N 806(your)X 973(C)X 1046(library)X 1280(expects)X 2 f 1541(double)X 1 f 1759(s)X 1810(to)X 1892(be)X 1988(aligned)X 2244(at)X 2322(double-word)X 2752(boundaries,)X 3144(add)X 5 f 900 2244(#de\256ne)N 1197(Double)X 1 f 612 2388(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 2512(The)N 877(word)X 1062(alignment)X 1402(of)X 1489(stacks)X 1705(used)X 1872(by)X 1972(co-expressions)X 2469(is)X 2542(controlled)X 2887(by)X 5 f 900 2656(StackAlign)N 1 f 1591(\(default:)X 1896(2\))X 612 2800(If)N 686(your)X 853(platform)X 1149(needs)X 1352(a)X 1408(different)X 1705(alignment,)X 2065(provide)X 2330(an)X 2426(appropriate)X 2812(de\256nition)X 3138(in)X 5 f 3222(de\256ne.h)X 1 f 3504(.)X 732 2924(Most)N 919(computers)X 1277(have)X 1453(downward-growing)X 2110(C)X 2187(stacks,)X 2427(for)X 2545(which)X 2765(stack)X 2954(addresses)X 3286(decrease)X 3588(as)X 3679(values)X 3908(are)X 4031(pushed.)X 4302(If)X 612 3020(you)N 752(have)X 924(an)X 1020(upward-growing)X 1575(stack,)X 1780(for)X 1894(which)X 2110(stack)X 2295(addresses)X 2623(increase)X 2907(as)X 2994(values)X 3219(are)X 3338(pushed,)X 3605(add)X 5 f 900 3164(#de\256ne)N 1197(UpStack)X 1 f 612 3308(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 3 f 612 3500(Floating-Point)N 1125(Arithmetic)X 1 f 732 3624(There)N 940(are)X 1059(three)X 1240(optional)X 1522(de\256nitions)X 1879(related)X 2118(to)X 2200(\257oating-point)X 2655(arithmetic:)X 5 f 900 3768(Big)N 1 f 1591(\(default:)X 1896(9007199254740092.\u_pU VMS.BCKS[V9.DOCS]IPD238.PS;1x))X 5 f 900 3864(LogHuge)N 1 f 1591(\(default:)X 1896(309\))X 5 f 900 3960(Precision)N 1 f 1591(\(default:)X 1896(10\))X 612 4104(The)N 759(values)X 986(of)X 5 f 1077(Big)X 1 f 1192(,)X 5 f 1236(LogHuge)X 1 f 1558(,)X 1601(and)X 5 f 1742(Precision)X 1 f 2093(give,)X 2274(respectively,)X 2705(the)X 2826(largest)X 3063(\257oating-point)X 3521(number)X 3789(that)X 3932(does)X 4102(not)X 4227(lose)X 612 4200(precision,)N 950(the)X 1072(maximum)X 1420(base-10)X 1694(exponent)X 2012(+)X 2081(1)X 2145(of)X 2236(a)X 2296(\257oating-point)X 2755(number,)X 3044(and)X 3184(the)X 3306(number)X 3575(of)X 3665(digits)X 3865(provided)X 4173(in)X 4258(the)X 612 4296(string)N 826(representation)X 1313(of)X 1412(a)X 1480(\257oating-point)X 1948(number.)X 2246(If)X 2333(the)X 2464(default)X 2720(values)X 2958(given)X 3169(above)X 3394(do)X 3507(not)X 3642(suit)X 3790(the)X 3921(\257oating-point)X 612 4392(arithmetic)N 957(on)X 1057(your)X 1224(platform,)X 1540(add)X 1676(appropriate)X 2062(de\256nitions)X 2419(to)X 5 f 2503(de\256ne.h)X 1 f 2785(.)X 3 f 612 4584(Options)N 902(for)X 1025(Opening)X 1337(Files)X 1 f 732 4708(The)N 877(options)X 1132(for)X 1246(opening)X 1524(\256les)X 1677(with)X 2 f 1839(fopen\(\))X 1 f 2091(are)X 2210(given)X 2408(by)X 2508(the)X 2626(following)X 2957(constants:)X 5 f 900 4852(ReadBinary)N 1 f 1591(\(default:)X 5 f 1896("rb")X 1 f 2023(\))X 5 f 900 4948(ReadText)N 1 f 1591(\(default:)X 5 f 1896("r")X 1 f 1979(\))X 5 f 900 5044(WriteBinary)N 1 f 1591(\(default:)X 5 f 1896("wb")X 1 f 2054(\))X 5 f 900 5140(WriteText)N 1 f 1591(\(default:)X 5 f 1896("w")X 1 f 2010(\))X 612 5284(These)N 824(defaults)X 1098(can)X 1230(be)X 1326(changed)X 1614(by)X 1714(de\256nitions)X 2071(in)X 5 f 2155(de\256ne.h)X 1 f 2437(.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2400(-)X 1 f 2464(9)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 10 p %%Page: 10 10 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Library)N 903(Routines)X 1 f 732 796(Support)N 1010(from)X 1191(some)X 1385(library)X 1625(routines)X 1909(varies)X 2127(from)X 2309(platform)X 2611(to)X 2699(platform,)X 3021(and)X 3163(names)X 3394(vary.)X 3583(The)X 3734(relevant)X 4019(de\256nitions)X 612 892(are:)N 5 f 900 1036(NoIconGcvt)N 1 f 1591(\(default:)X 1896(unde\256ned\))X 5 f 900 1132(NoSelect)N 1 f 1591(\(default:)X 1896(unde\256ned\))X 5 f 900 1228(SysMem)N 1 f 1591(\(default:)X 1896(unde\256ned\))X 5 f 900 1324(SysOpt)N 1 f 1591(\(default:)X 1896(unde\256ned\))X 5 f 900 1420(index)N 1 f 1591(\(default:)X 1896(unde\256ned\))X 5 f 900 1516(rindex)N 1 f 1591(\(default:)X 1896(unde\256ned\))X 732 1688(By)N 849(default,)X 1116(Icon)X 1283(provides)X 1583(its)X 1682(own)X 1844(version)X 2104(of)X 2 f 2195(gcvt\(\))X 1 f 2407(to)X 2493(minimized)X 2859(the)X 2981(differences)X 3363(in)X 3449(the)X 3571(string)X 3778(representations)X 4289(of)X 612 1784(\257oating-point)N 1067(numbers)X 1363(between)X 1651(different)X 1948(platforms.)X 2295(If)X 2369(you)X 2509(prefer)X 2722(to)X 2804(use)X 2931(the)X 3049(version)X 3305(of)X 2 f 3392(gcvt\(\))X 1 f 3600(in)X 3682(your)X 3849(C)X 3922(library,)X 4176(add)X 5 f 900 1928(#de\256ne)N 1197(NoIconGcvt)X 1 f 612 2072(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 2196(The)N 877(Icon)X 1040(function)X 5 f 1329(delay\(\))X 1 f 1593(uses)X 1751(the)X 1869(C)X 1942(function)X 2 f 2229(select\(\))X 1 f 2466(.)X 2526(If)X 2600(your)X 2767(C)X 2840(library)X 3074(does)X 3241(not)X 3363(have)X 2 f 3535(select\(\))X 1 f 3772(,)X 3812(add)X 5 f 900 2340(#de\256ne)N 1197(NoSelect)X 1 f 612 2484(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 1018(The)X 1163(effect)X 1367(of)X 1454(this)X 1589(is)X 1662(that)X 5 f 1804(delay\(\))X 1 f 2068(fails)X 2226(and)X 2362(does)X 2529(not)X 2651(delay)X 2845(execution.)X 732 2608(If)N 5 f 819(SysMem)X 1 f 1161(is)X 1245(de\256ned)X 1512(and)X 5 f 1661(IntBits)X 1915(==)X 2042(WordBits)X 1 f 2366(,)X 2417(the)X 2546(C)X 2630(library)X 2875(routines)X 2 f 3164(memcpy\(\))X 1 f 3513(and)X 2 f 3660(memset\(\))X 1 f 3986(are)X 4116(used)X 4294(in)X 612 2704(place)N 806(of)X 897(the)X 1019(corresponding)X 1502(Icon)X 1669(routines)X 2 f 1951(memcopy\(\))X 1 f 2333(and)X 2 f 2473(mem\256ll\(\))X 1 f 2763(.)X 5 f 2831(SysMem)X 1 f 3166(is)X 3242(automatically)X 3701(de\256ned)X 3960(if)X 5 f 4034(Standard)X 1 f 612 2800(or)N 5 f 701 -0.3500(StandardLib)AX 1 f 1149(is)X 1222(de\256ned.)X 732 2924(If)N 5 f 808(SysOpt)X 1 f 1089(is)X 1162(de\256ned,)X 1438(the)X 1556(C)X 1629(library)X 1863(function)X 2 f 2150(getopt\(\))X 1 f 2424(is)X 2497(used)X 2664(instead)X 2911(of)X 2998(Icon's)X 3219(private)X 3462(version.)X 732 3048(Different)N 1047(C)X 1120(compilers)X 1456(use)X 1583(different)X 1880(names)X 2105(for)X 2219(the)X 2337(routines)X 2615(for)X 2729(locating)X 3007(substrings)X 3351(within)X 3575(strings.)X 3828(The)X 3973(source)X 4204(code)X 612 3144(for)N 727(Icon)X 891(uses)X 5 f 1051(index)X 1 f 1261(and)X 5 f 1399(rindex)X 1 f 1616(.)X 1656(The)X 1801(other)X 1986(possibilities)X 2387(are)X 5 f 2508(strchr)X 1 f 2728(and)X 5 f 2866(strrchr)X 1 f 3093(.)X 3133(If)X 3207(your)X 3374(platform)X 3670(uses)X 3828(the)X 3946(latter)X 4131(names,)X 612 3240(add)N 5 f 900 3384(#de\256ne)N 1197(index)X 1424(strchr)X 900 3480(#de\256ne)N 1197(rindex)X 1451(strrchr)X 1 f 612 3624(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 3748(Icon)N 900(uses)X 5 f 1066(unlink)X 1 f 1300(for)X 1420(the)X 1544(routine)X 1797(that)X 1943(deletes)X 2192(a)X 2254(\256le.)X 2422(The)X 2573(other)X 2764(common)X 3070(name)X 3270(is)X 5 f 3351(remove)X 1 f 3617(.)X 3663(If)X 3743(your)X 3916(platform)X 4218(uses)X 612 3844(this)N 747(name,)X 961(for)X 1075(example,)X 1387(add)X 5 f 900 3988(#de\256ne)N 1197(unlink)X 1442(remove)X 1 f 612 4132(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 3 f 612 4324(Storage)N 895(Region)X 1155(Sizes)X 1 f 732 4448(The)N 904(default)X 1174(sizes)X 1377(of)X 1492(Icon's)X 1741(run-time)X 2065(storage)X 2345(regions)X 2629(for)X 2771(allocated)X 3109(data)X 3291(normally)X 3628(are)X 3775(the)X 3921(same)X 4134(for)X 4276(all)X 612 4544(implementations.)N 1185(However,)X 1520(different)X 1817(values)X 2042(can)X 2174(be)X 2270(set:)X 5 f 900 4688(MaxAbrSize)N 1 f 1591(\(default:)X 1880(65000\))X 5 f 900 4784(MaxStrSize)N 1 f 1591(\(default:)X 1880(65000\))X 612 4928(Since)N 814(users)X 1003(can)X 1139(override)X 1431(the)X 1553(set)X 1666(values)X 1895(with)X 2061(environment)X 2490(variables,)X 2825(it)X 2894(is)X 2972(unwise)X 3224(to)X 3311(change)X 3564(them)X 3749(from)X 3930(their)X 4102(defaults)X 612 5024(except)N 839(in)X 918(unusual)X 1184(cases.)X 732 5148(The)N 877(sizes)X 1053(for)X 1167(Icon's)X 1388(main)X 1568(interpreter)X 1923(stack)X 2108(and)X 2244(co-expression)X 2710(stacks)X 2926(also)X 3075(can)X 3207(be)X 3303(set:)X 5 f 900 5292(MStackSize)N 1 f 1591(\(default:)X 1896(10000\))X 5 f 900 5388(StackSize)N 1 f 1591(\(default:)X 1896(2000\))X 612 5532(As)N 721(for)X 835(the)X 953(block)X 1151(and)X 1287(string)X 1489(storage)X 1741(regions,)X 2017(it)X 2081(is)X 2154(unwise)X 2401(to)X 2483(change)X 2731(the)X 2849(default)X 3092(values)X 3317(except)X 3547(in)X 3629(unusual)X 3898(cases.)X 732 5656(Finally,)N 998(a)X 1054(list)X 1171(used)X 1338(for)X 1452(pointers)X 1730(to)X 1812(strings)X 2045(during)X 2274(garbage)X 2549(collection,)X 2905(can)X 3037(be)X 3133(sized:)X 8 s 612 6144(IPD238a)N 10 s 9 f 2383(-)X 1 f 2444(10)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(30,)X 4228(1994)X 11 p %%Page: 11 11 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(QualLstSize)N 1 f 1591(\(default:)X 1896(5000\))X 612 816(Like)N 779(the)X 897(sizes)X 1073(above,)X 1305(this)X 1440(one)X 1576(normally)X 1885(is)X 1958(best)X 2107(left)X 2234(unchanged.)X 3vY< VMS.BCKS[V9.DOCS]IPD238.PS;1 f 612 1008(Allocation)N 983(Sizing)X 2 f 732 1132(malloc\(\))N 1 f 1029(is)X 1107(used)X 1279(to)X 1366(allocate)X 1641(space)X 1845(for)X 1964(Icon's)X 2190(storage)X 2447(regions.)X 2728(This)X 2895(limits)X 3101(region)X 3331(sizes)X 3513(to)X 3601(the)X 3725(value)X 3925(of)X 4018(the)X 4142(largest)X 2 f 612 1228(unsigned)N 931(int)X 1 f 1015(.)X 1065(Some)X 1277(platforms)X 1614(provide)X 1889(alternative)X 2258(allocation)X 2604(routines)X 2892(for)X 3016(allocating)X 3361(larger)X 3578(regions.)X 3883(To)X 4001(change)X 4258(the)X 612 1324(allocation)N 952(procedure)X 1298(for)X 1416(regions,)X 1696(add)X 1836(a)X 1896(de\256nition)X 2226(for)X 5 f 2346(AllocReg)X 1 f 2689(to)X 5 f 2777(de\256ne.h)X 1 f 3059(.)X 3103(For)X 3239(example,)X 3556(the)X 3679(huge-memory-model)X 612 1420(implementation)N 1134(of)X 1221(Icon)X 1384(for)X 1498(Microsoft)X 1834(C)X 1907(uses)X 2065(the)X 2183(following:)X 5 f 900 1564(#de\256ne)N 1197(AllocReg\(n\))X 1651(halloc\(\(long\)n,)X 2193(sizeof\(char\)\))X 2 f 612 1708(Note:)N 1 f 814(Icon)X 981(still)X 1124(uses)X 2 f 1286(malloc\(\))X 1 f 1582(for)X 1701(allocating)X 2042(other)X 2232(blocks.)X 2506(If)X 2585(this)X 2725(is)X 2803(a)X 2864(problem,)X 3176(it)X 3245(may)X 3408(be)X 3509(possible)X 3796(to)X 3883(change)X 4136(this)X 4276(by)X 612 1804(de\256ning)N 5 f 896(malloc)X 1 f 1147(in)X 5 f 1231(de\256ne.h)X 1 f 1513(,)X 1553(as)X 1640(in)X 5 f 900 1948(#de\256ne)N 1197(malloc)X 1465(lmalloc)X 1 f 612 2092(where)N 2 f 845(lmalloc\(\))X 1 f 1175(is)X 1264(a)X 1336(local)X 1528(routine)X 1791(for)X 1921(allocating)X 2273(large)X 2470(blocks)X 2715(of)X 2818(memory.)X 3161(If)X 3251(this)X 3402(is)X 3491(done,)X 3704(and)X 3857(the)X 3992(size)X 4154(of)X 4258(the)X 612 2188(allocation)N 948(is)X 1021(not)X 2 f 1143(unsigned)X 1452(int)X 1 f 1536(,)X 1576(add)X 1712(an)X 1808(appropriate)X 2194(de\256nition)X 2520(for)X 2634(the)X 2752(type)X 2910(by)X 3010(de\256ning)X 5 f 3294(AllocType)X 1 f 3664(in)X 5 f 3748(de\256ne.h)X 1 f 4030(,)X 4070(such)X 4237(as)X 5 f 900 2332(#de\256ne)N 1197(AllocType)X 1584(unsigned)X 1943(long)X 2130(int)X 1 f 732 2504(It)N 801(is)X 874(also)X 1023(necessary)X 1356(to)X 1438(add)X 1574(a)X 1630(de\256nition)X 1956(for)X 2070(the)X 2188(limit)X 2358(on)X 2458(the)X 2576(size)X 2721(of)X 2808(an)X 2904(Icon)X 3067(region:)X 5 f 900 2648(#de\256ne)N 1197(MaxBlock)X 2 f 1580(n)X 1 f 612 2792(where)N 2 f 839(n)X 1 f 909(is)X 992(the)X 1120(maximum)X 1474(size)X 1629(allowed)X 1913(\(the)X 2069(default)X 2323(for)X 5 f 2450(MaxBlock)X 1 f 2827(is)X 5 f 2913(MaxUnsigned)X 1 f 3400(,)X 3451(the)X 3580(largest)X 2 f 3825(unsigned)X 4145(int)X 1 f 4229(\).)X 4307(It)X 612 2888(generally)N 939(is)X 1020(not)X 1150(advisable)X 1481(to)X 1571(set)X 5 f 1690(MaxBlock)X 1 f 2064(to)X 2154(the)X 2280(largest)X 2522(size)X 2675(an)X 2779(alternative)X 3145(allocation)X 3488(routine)X 3742(can)X 3881(return.)X 4120(For)X 4258(the)X 612 2984(huge-memory-model)N 1309(implementation)X 1831(mentioned)X 2189(above,)X 5 f 2423(MaxBlock)X 1 f 2789(is)X 2862(256000.)X 3 f 612 3176(File)N 761(Name)X 982(Suf\256xes)X 1 f 732 3300(The)N 877(suf\256xes)X 1146(used)X 1313(to)X 1395(identify)X 1664(Icon)X 1827(source)X 2057(programs,)X 2400(ucode)X 2612(\256les,)X 2785(and)X 2921(icode)X 3115(\256les)X 3268(may)X 3426(be)X 3522(speci\256ed)X 3827(in)X 5 f 3911(de\256ne.h)X 1 f 4193(:)X 5 f 900 3444(#de\256ne)N 1197(SourceSuf\256x)X 1 f 2052(\(default:)X 5 f 2357(".icn")X 1 f 2537(\))X 5 f 900 3540(#de\256ne)N 1197(U1Suf\256x)X 1 f 2052(\(default:)X 5 f 2357(".u1")X 1 f 2523(\))X 5 f 900 3636(#de\256ne)N 1197(U2Suf\256x)X 1 f 2052(\(default:)X 5 f 2357(".u2")X 1 f 2523(\))X 5 f 900 3732(#de\256ne)N 1197(USuf\256x)X 1 f 2052(\(default:)X 5 f 2357(".u")X 1 f 2479(\))X 5 f 900 3828(#de\256ne)N 1197(IcodeSuf\256x)X 1 f 2052(\(default:)X 5 f 2357("")X 1 f 2413(\))X 5 f 900 3924(#de\256ne)N 1197 -0.3250(IcodeASuf\256x)AX 1 f 2052(\(default:)X 5 f 2357("")X 1 f 2413(\))X 5 f 612 4068(USuf\256x)N 1 f 908(is)X 1000(used)X 1186(for)X 1320(the)X 1458(abbreviation)X 1899(that)X 5 f 2061(icont)X 1 f 2269(understands)X 2692(in)X 2794(place)X 3004(of)X 3111(the)X 3249(complete)X 5 f 3585(U1Suf\256x)X 1 f 3926(or)X 5 f 4035(U2Suf\256x)X 1 f 4336(.)X 5 f 612 4164 -0.3250(IcodeASuf\256x)AN 1 f 1084(is)X 1163(an)X 1265(alternative)X 1630(suf\256x)X 1838(that)X 5 f 1986(iconx)X 1 f 2198(uses)X 2362(when)X 2562(searching)X 2896(for)X 3016(icode)X 3216(\256les)X 3375(speci\256ed)X 3686(without)X 3956(a)X 4018(suf\256x.)X 4245(For)X 612 4260(example,)N 924(on)X 1024(MS-DOS,)X 5 f 1368(IcodeSuf\256x)X 1 f 1781(is)X 5 f 1856(".icx)X 1 f 2004(")X 2057(and)X 5 f 2195 -0.3250(IcodeASuf\256x)AX 1 f 2661(is)X 5 f 2736(".ICX")X 1 f 2947(.)X 732 4384(If)N 810(values)X 1039(other)X 1228(than)X 1390(the)X 1512(defaults)X 1790(are)X 1913(speci\256ed,)X 2242(care)X 2401(must)X 2580(be)X 2680(taken)X 2878(not)X 3004(to)X 3091(introduce)X 3419(con\257icts)X 3715(or)X 3807(collisions)X 4138(among)X 612 4480(names)N 837(of)X 924(different)X 1221(types)X 1410(of)X 1497(\256les.)X 3 f 612 4672(Paths)N 1 f 732 4796(If)N 5 f 817(icont)X 1 f 1014(is)X 1096(given)X 1303(a)X 1368(source)X 1607(program)X 1908(in)X 1999(a)X 2064(directory)X 2383(different)X 2689(from)X 2874(the)X 3001(local)X 3186(one)X 3331(\(``current)X 3669(working)X 3965(directory''\),)X 612 4892(there)N 796(is)X 872(a)X 931(question)X 1225(as)X 1315(to)X 1400(where)X 1620(ucode)X 1835(and)X 1974(icode)X 2171(\256les)X 2327(should)X 2562(be)X 2660(created:)X 2937(in)X 3021(the)X 3141(local)X 3319(directory)X 3631(or)X 3720(in)X 3804(the)X 3924(directory)X 4236(that)X 612 4988(contains)N 907(the)X 1033(source)X 1271(program.)X 1591(On)X 1717(most)X 1900(platforms,)X 2255(the)X 2381(appropriate)X 2775(place)X 2973(is)X 3054(in)X 3144(the)X 3270(local)X 3454(directory)X 3772(\(the)X 3925(user)X 4087(may)X 4254(not)X 612 5084(have)N 805(write)X 1011(permission)X 1403(in)X 1505(the)X 1643(directory)X 1973(that)X 2133(contains)X 2440(the)X 2578(source)X 2828(program\).)X 3207(However,)X 3562(on)X 3682(some)X 3891(platforms,)X 4258(the)X 612 5180(directory)N 933(that)X 1084(contains)X 1382(the)X 1511(source)X 1752(\256le)X 1885(is)X 1969(appropriate.)X 2386(By)X 2510(default,)X 2785(the)X 2915(directory)X 3237(for)X 3363(creating)X 3654(new)X 3820(\256les)X 3985(is)X 4070(the)X 4200(local)X 612 5276(directory.)N 942(The)X 1087(other)X 1272(choice)X 1502(can)X 1634(be)X 1730(selected)X 2009(by)X 2109(adding)X 5 f 900 5420(#de\256ne)N 1197(TargetDir)X 1567(SourceDir)X 1 f 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(11)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 12 p %%Page: 12 12 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(UNIX)N 837(Bootstrap)X 1195(Headers)X 1 f 732 796(A)N 813(bootstrap)X 1134(header)X 1372(is)X 1448(used)X 1619(to)X 1705(make)X 1903(UNIX)X 2128(icode)X 2326(\256les)X 2483(executable.)X 2891(This)X 3057(header)X 3296(normally)X 3609(is)X 3686(a)X 3746(simple)X 3983(shell)X 4158(script.)X 612 892(To)N 721(use)X 848(an)X 944(executable)X 1308(program)X 1600(for)X 1714(a)X 1770(header,)X 2025(as)X 2112(in)X 2194(previous)X 2490(versions)X 2777(of)X 2864(Icon,)X 3047(add)X 5 f 900 1036(#de\256ne)N 1197(NoShellHeader)X 1 f 612 1180(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 1038(The)X 1183(space)X 1382(reserved)X 1675(for)X 1789(an)X 1885(executable)X 2249(program)X 2541(header)X 2776(is)X 2849(determined)X 3230(by)X 5 f 900 1324(#de\256ne)N 1197(MaxHdr)X 1 f 2052(\(default:)X 2357(4096\))X 732 1496(On)N 855(some)X 1049(UNIX)X 1275(platforms,)X 1627(many)X 1830(routines)X 2114(may)X 2278(be)X 2380(included)X 2682(in)X 2770(the)X 2894(header)X 3135(w)p VMS.BCKS[V9.DOCS]IPD238.PS;1even)X 3313(if)X 3388(they)X 3552(are)X 3677(not)X 3805(needed.)X 4099(Start)X 4276(by)X 612 1592(assuming)N 936(this)X 1073(is)X 1148(not)X 1272(a)X 1330(problem,)X 1639(but)X 1763(if)X 5 f 1836(MaxHeader)X 1 f 2270(has)X 2399(to)X 2483(be)X 2581(made)X 2777(impractically)X 3222(large,)X 3425(you)X 3567(can)X 3701(eliminate)X 4021(the)X 4141(header)X 612 1688(by)N 712(adding)X 5 f 900 1832(#de\256ne)N 1197(NoHeader)X 1 f 612 1976(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 2 f 1038(Note:)X 1 f 1236(If)X 5 f 1312(NoHeader)X 1 f 1695(is)X 1768(de\256ned,)X 2044(the)X 2162(values)X 2387(of)X 5 f 2476(MaxHdr)X 1 f 2776(and)X 5 f 2914(NoShellHeader)X 1 f 3474(are)X 3593(irrelevant.)X 732 2100(The)N 877(effect)X 1081(of)X 1168(this)X 1303(de\256nition)X 1629(is)X 1702(to)X 1784(render)X 2010(Icon)X 2173(programs)X 2496(non-executable.)X 3027(Instead,)X 3299(they)X 3457(must)X 3632(be)X 3728(run)X 3856(by)X 3957(using)X 4151(the)X 5 f 9 f 4272(-)X 5 f 4316(x)X 1 f 612 2196(option)N 836(after)X 1004(the)X 1122(program)X 1414(name)X 1608(when)X 5 f 1804(icont)X 1 f 1992(is)X 2065(used,)X 2252(as)X 2339(in)X 5 f 900 2340(icont)N 1105(prog.icn)X 9 f 1425(-)X 5 f 1469(x)X 1 f 612 2484(Such)N 792(a)X 848(program)X 1140(also)X 1289(can)X 1421(be)X 1517(run)X 1644(as)X 1731(an)X 1827(argument)X 2150(of)X 5 f 2239(iconx)X 1 f 2425(,)X 2465(as)X 2552(in)X 5 f 900 2628(iconx)N 1123(prog)X 1 f 612 2772(where)N 5 f 831(prog)X 1 f 1010(is)X 1083(the)X 1201(result)X 1399(of)X 1486(translating)X 1844(and)X 1980(linking)X 5 f 2228(prog.icn)X 1 f 2531(as)X 2618(in)X 2700(the)X 2818(previous)X 3114(example.)X 3 f 612 2964(Command-Line)N 1174(Options)X 1 f 732 3088(The)N 877(command-line)X 1360(options)X 1615(that)X 1755(are)X 1874(supported)X 2210(by)X 5 f 2312(icont)X 1 f 2500(and)X 5 f 2639(iconc)X 1 f 2846(are)X 2966(de\256ned)X 3223(by)X 5 f 3326(Options)X 1 f 3600(.)X 3641(The)X 3787(default)X 4031(value)X 4226(\(see)X 5 f 612 3184(con\256g.h)N 1 f 890(\))X 937(will)X 1081(do)X 1181(for)X 1295(most)X 1470(platforms,)X 1817(but)X 1939(an)X 2035(alternative)X 2394(can)X 2526(be)X 2622(included)X 2918(in)X 5 f 3002(de\256ne.h)X 1 f 3284(.)X 732 3308(Similarly,)N 1078(the)X 1205(error)X 1391(message)X 1692(produced)X 2020(for)X 2143(erroneous)X 2489(command)X 2834(lines)X 3014(is)X 3096(de\256ned)X 3362(by)X 5 f 3474(Usage)X 1 f 3704(.)X 3754(The)X 3909(default)X 4162(value,)X 612 3404(which)N 828(should)X 1061(correspond)X 1438(to)X 1520(the)X 1638(value)X 1832(of)X 5 f 1921(Options)X 1 f 2195(,)X 2235(is)X 2308(in)X 5 f 2392(con\256g.h)X 1 f 2670(,)X 2710(but)X 2832(may)X 2990(be)X 3086(overridden)X 3454(by)X 3554(a)X 3610(de\256nition)X 3936(in)X 5 f 4020(de\256ne.h)X 1 f 4302(.)X 3 f 612 3596(Environment)N 1085(Variables)X 1 f 732 3720(If)N 820(your)X 1001(platform)X 1311(does)X 1493(not)X 1630(support)X 1905(environment)X 2345(variables)X 2670(\(via)X 2830(the)X 2963(run-time)X 3274(library)X 3523(routine)X 5 f 3787(getenv)X 1 f 4025(\),)X 4107(add)X 4258(the)X 612 3816(following)N 943(line)X 1083(to)X 5 f 1167(de\256ne.h)X 1 f 1449(:)X 5 f 900 3960(#de\256ne)N 1197(NoEnvVars)X 1 f 612 4104(This)N 774(disables)X 1052(Icon's)X 1273(ability)X 1497(to)X 1579(change)X 1827(internal)X 2092(parameters)X 2465(to)X 2547(accommodate)X 3013(special)X 3256(user)X 3410(needs)X 3613(\(such)X 3807(as)X 3895(using)X 4089(memory)X 612 4200(region)N 837(sizes)X 1013(different)X 1310(from)X 1486(the)X 1604(defaults\),)X 1925(but)X 2047(does)X 2214(not)X 2336(otherwise)X 2668(interfere)X 2961(with)X 3123(the)X 3241(use)X 3368(of)X 3455(Icon.)X 3 f 612 4392(Host)N 792(Identi\256cation)X 1 f 732 4516(The)N 882(identi\256cation)X 1329(of)X 1421(the)X 1544(host)X 1702(computer)X 2030(as)X 2122(given)X 2325(by)X 2430(the)X 2553(Icon)X 2721(keyword)X 5 f 3029(&host)X 1 f 3257(needs)X 3465(to)X 3552(be)X 3653(speci\256ed)X 3964(in)X 5 f 4054(de\256ne.h)X 1 f 4336(.)X 612 4612(The)N 757(usual)X 946(way)X 1100(to)X 1182(to)X 1264(this)X 1399(is)X 1472(to)X 1554(add)X 5 f 900 4756(#de\256ne)N 1197(HostStr)X 1500(")X 2 f 1528(identi\256cation)X 5 f 1950(")X 1 f 612 4900(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 5024(Several)N 1000(alternatives)X 1397(are)X 1523(available)X 1840(on)X 1948(UNIX)X 2177(platforms)X 2512(for)X 2634(host)X 2795(identi\256cation.)X 3285(To)X 3402(use)X 3537(one)X 3681(of)X 3776(these,)X 3989(remove)X 4258(the)X 612 5120(de\256nition)N 938(of)X 5 f 1027(HostStr)X 1 f 1313(and)X 1449(provide)X 1714(an)X 1810(alternative)X 2169(as)X 2256(follows.)X 732 5244(On)N 860(some)X 1059(versions)X 1356(of)X 1453(UNIX,)X 1704(notably)X 1974(Version)X 2258(7)X 2328(and)X 2474(4.1bsd,)X 2735(the)X 2863(\256le)X 5 f 2997 -0.1875(/usr/include/whoami.h)AX 1 f 3797(contains)X 4094(the)X 4223(host)X 612 5340(name.)N 826(If)X 900(your)X 1067(system)X 1309(has)X 1436(this)X 1571(\256le)X 1693(and)X 1829(you)X 1969(want)X 2145(to)X 2227(use)X 2354(this)X 2489(name,)X 2703(add)X 5 f 900 5484(#de\256ne)N 1197(WhoHost)X 1 f 612 5628(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 5752(Some)N 938(versions)X 1229(of)X 1320(UNIX,)X 1565(notably)X 1829(4.2bsd)X 2064(and)X 2204(4.3bsd,)X 2459(provide)X 2728(the)X 2850(host)X 3007(name)X 3205(via)X 3327(the)X 2 f 3449(gethostname\(2\))X 1 f 3973(system)X 4220(call.)X 612 5848(If)N 686(your)X 853(system)X 1095(supports)X 1386(this)X 1521(system)X 1763(call)X 1899(and)X 2035(you)X 2175(want)X 2351(to)X 2433(use)X 2560(this)X 2695(name,)X 2909(add)X 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(12)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 13 p %%Page: 13 13 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(#de\256ne)N 1197(GetHost)X 1 f 612 816(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 940(Some)N 936(versions)X 1225(of)X 1314(UNIX,)X 1557(such)X 1726(as)X 1815(System)X 2072(V,)X 2172(provide)X 2439(the)X 2559(host)X 2714(name)X 2910(via)X 3031(the)X 2 f 3152(uname\(2\))X 1 f 3483(system)X 3728(call.)X 3887(If)X 3964(your)X 4134(system)X 612 1036(supports)N 903(this)X 1038(call)X 1174(and)X 1310(you)X 1450(want)X 1626(to)X 1708(use)X 1835(this)X 1970(name,)X 2184(add)X 5 f 900 1180(#de\256ne)N 1197(UtsName)X 1 f 612 1324(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 2 f 732 1448(Note:)N 1 f 930(Only)X 1110(one)X 1246(of)X 1333(these)X 1518(methods)X 1809(of)X 1896(specifying)X 2250(the)X 2368(host)X 2521(name)X 2715(can)X 2847(be)X 2943(used.)X 3 f 612 1640(Exit)N 774(Codes)X 1 f 732 1764(Exit)N 885(codes)X 1088(are)X 1207(determined)X 1588(by)X 1688(the)X 1806(following)X 2137(de\256nitions:)X 5 f 900 1908(NormalExit)N 1 f 1591(\(default:)X 1896(0\))X 5 f 900 2004(ErrorExit)N 1 f 1591(\(default:)X 1896(1\))X 3 f 612 2244(Clock)N 832(Rate)X 5 f 732 2368(Hz)N 1 f 857(de\256nes)X 1111(the)X 1236(units)X 1418(returned)X 1714(by)X 1822(the)X 2 f 1948(times\(\))X 1 f 2199(function)X 2494(call.)X 2678(Check)X 2911(the)X 3037(documentation)X 3541(for)X 3663(this)X 3806(function)X 4101(on)X 4209(your)X 612 2464(platform.)N 937(If)X 1020(it)X 1093(says)X 1260(that)X 1409(times)X 1611(are)X 1739(returned)X 2036(in)X 2127(terms)X 2334(of)X 2430(1/60)X 2601(second,)X 2873(no)X 2982(action)X 3207(is)X 3288(needed.)X 3564(Otherwise,)X 3942(de\256ne)X 5 f 4168(Hz)X 1 f 4294(in)X 5 f 612 2560(de\256ne.h)N 1 f 914(to)X 996(be)X 1092(the)X 1210(number)X 1475(of)X 2 f 1562(times\(\))X 1 f 1805(units)X 1980(in)X 2062(one)X 2198(second.)X 732 2684(The)N 878(documentation)X 1375(may)X 1534(refer)X 1708(you)X 1850(to)X 1934(an)X 2032(additional)X 2374(\256le)X 2498(such)X 2667(as)X 5 f 2758 -0.1793(/usr/include/sys/param.h)AX 1 f 3621(.)X 3663(If)X 3739(so,)X 3852(check)X 4062(the)X 4182(value)X 612 2780(there,)N 813(and)X 949(de\256ne)X 5 f 1167(Hz)X 1 f 1285(accordingly.)X 3 x VMS.BCKS[V9.DOCS]IPD238.PS;1f 612 2972(Dynamic)N 939(Hashing)X 1242(Constants)X 1 f 732 3096(Four)N 903(parameters)X 1276(con\256gure)X 1599(the)X 1717(implementation)X 2239(of)X 2326(tables)X 2533(and)X 2669(sets:)X 5 f 932 3220(HSlots)N 1 f 1412(Initial)X 1623(number)X 1888(of)X 1975(hash)X 2142(buckets;)X 2429(it)X 2493(must)X 2668(be)X 2764(a)X 2820(power)X 3041(of)X 3128(2)X 5 f 932 3344(HSegs)N 1 f 1412(Maximum)X 1765(number)X 2030(of)X 2117(hash)X 2284(bucket)X 2518(segments)X 5 f 932 3468(MaxHLoad)N 1 f 1412(Maximum)X 1765(allowable)X 2097(loading)X 2357(factor)X 5 f 932 3592(MinHLoad)N 1 f 1412(Minimum)X 1751(loading)X 2011(factor)X 2219(for)X 2333(new)X 2487(structures)X 732 3716(The)N 880(default)X 1126(values)X 1354(\(listed)X 1577(below\))X 1823(are)X 1946(appropriate)X 2336(for)X 2454(most)X 2633(platforms.)X 2984(If)X 3062(you)X 3206(want)X 3386(to)X 3472(change)X 3724(the)X 3846(values,)X 4095(read)X 4258(the)X 612 3812(discussion)N 965(that)X 1105(follows.)X 732 3936(Every)N 950(set)X 1065(or)X 1158(table)X 1340(starts)X 1535(with)X 5 f 1705(HSlots)X 1 f 1966(hash)X 2139(buckets,)X 2430(using)X 2629(one)X 2771(bucket)X 3012(segment.)X 3346(When)X 3565(the)X 3690(average)X 3968(hash)X 4142(bucket)X 612 4032(exceeds)N 5 f 898(MaxHLoad)X 1 f 1312(entries,)X 1574(the)X 1700(number)X 1973(of)X 2068(buckets)X 2341(is)X 2422(doubled)X 2708(and)X 2852(one)X 2996(more)X 3189(segment)X 3484(is)X 3565(consumed.)X 3958(This)X 4128(repeats)X 612 4128(until)N 5 f 780(HSegs)X 1 f 1039(segments)X 1357(are)X 1476(in)X 1558(use;)X 1707(after)X 1875(that,)X 2035(structure)X 2336(still)X 2475(grows)X 2691(but)X 2813(no)X 2913(more)X 3098(hash)X 3265(buckets)X 3530(are)X 3649(added.)X 5 f 732 4252(MinHLoad)N 1 f 1118(is)X 1194(used)X 1364(only)X 1529(when)X 1726(copying)X 2007(a)X 2066(set)X 2178(or)X 2268(table)X 2447(or)X 2537(when)X 2734(creating)X 3016(a)X 3075(new)X 3232(set)X 3344(through)X 3616(the)X 3737(intersection,)X 4154(union,)X 612 4348(or)N 704(difference)X 1055(of)X 1146(two)X 1290(other)X 1479(sets.)X 1663(In)X 1754(these)X 1943(cases)X 2137(a)X 2197(new)X 2355(set)X 2468(may)X 2630(be)X 2730(more)X 2919(lightly)X 3151(loaded)X 3389(than)X 3551(otherwise,)X 3907(but)X 4033(never)X 4236(less)X 612 4444(than)N 5 f 772(MinHLoad)X 1 f 1155(if)X 1224(it)X 1288(exceeds)X 1563(a)X 1619(single)X 1830(bucket)X 2064(segment.)X 732 4568(For)N 876(all)X 989(machines,)X 1345(the)X 1476(default)X 1732(load)X 1903(factors)X 2155(are)X 2287(5)X 2360(for)X 5 f 2489(MaxHLoad)X 1 f 2907(and)X 3056(1)X 3129(for)X 5 f 3258(MinHLoad)X 1 f 3621(.)X 3694(Because)X 3995(splitting)X 4289(or)X 612 4664(combining)N 984(buckets)X 1259(halves)X 1494(or)X 1591(doubles)X 1870(the)X 1998(load)X 2166(factor,)X 5 f 2406(MinHLoad)X 1 f 2799(should)X 3042(be)X 3148(no)X 3258(more)X 3453(than)X 3621(half)X 5 f 3777(MaxHLoad)X 1 f 4162(.)X 4231(The)X 612 4760(average)N 890(number)X 1162(of)X 1256(elements)X 1568(in)X 1657(a)X 1720(hash)X 1894(bucket)X 2136(over)X 2307(the)X 2433(life)X 2568(of)X 2663(a)X 2727(structure)X 3036(is)X 3117(about)X 3323(2/3)X 9 f 3438(\264)X 5 f 3495(MaxHLoad)X 1 f 3880(,)X 3928(assuming)X 4258(the)X 612 4856(structure)N 914(is)X 988(not)X 1111(so)X 1203(huge)X 1380(as)X 1468(to)X 1551(be)X 1648(limited)X 1895(by)X 5 f 1998(HSegs)X 1 f 2237(.)X 2298(Increasing)X 5 f 2656(MaxHLoad)X 1 f 3061(delays)X 3286(the)X 3404(creation)X 3683(of)X 3770(new)X 3924(hash)X 4091(buckets,)X 612 4952(reducing)N 917(memory)X 1208(demands)X 1517(at)X 1600(the)X 1723(expense)X 2007(of)X 2099(increased)X 2428(search)X 2659(times.)X 2897(It)X 2971(has)X 3103(no)X 3208(effect)X 3417(on)X 3522(the)X 3645(memory)X 3937(requirements)X 612 5048(of)N 699(minimally-sized)X 1239(structures.)X 5 f 732 5172(HSlots)N 1 f 993(and)X 5 f 1137(HSegs)X 1 f 1402(interact)X 1669(to)X 1757(determine)X 2104(the)X 2228(minimum)X 2565(size)X 2717(of)X 2811(a)X 2874(structure)X 3182(and)X 3325(its)X 3427(maximum)X 3778(ef\256cient)X 4068(capacity.)X 612 5268(The)N 764(size)X 916(of)X 1010(an)X 1113(empty)X 1340(set)X 1456(or)X 1549(table)X 1731(is)X 1810(directly)X 2081(related)X 2326(to)X 5 f 2416(HSegs+HSlots)X 1 f 2937(;)X 2985(smaller)X 3247(values)X 3478(of)X 3571(these)X 3762(parameters)X 4141(reduce)X 612 5364(the)N 731(memory)X 1019(needs)X 1223(of)X 1311(programs)X 1635(using)X 1830(many)X 2030(small)X 2225(structures.)X 2599(Doubling)X 5 f 2925(HSlots)X 1 f 3182(delays)X 3409(the)X 3529(onset)X 3720(of)X 3809(the)X 3929(\256rst)X 4075(structure)X 612 5460(reorganization)N 1100(until)X 1270(twice)X 1468(as)X 1559(many)X 1761(elements)X 2070(have)X 2246(been)X 2421(inserted.)X 2738(It)X 2810(also)X 2962(doubles)X 3234(the)X 3355(capacity)X 3646(of)X 3736(a)X 3795(structure,)X 4119(as)X 4209(does)X 612 5556(increasing)N 5 f 964(HSegs)X 1 f 1223(by)X 1323(1.)X 732 5680(The)N 878(maximum)X 1223(number)X 1489(of)X 1578(hash)X 1747(buckets)X 2014(is)X 5 f 2091(HSlots)X 1 f 9 f 2339(\264)X 1 f 2396(\(2)X 5 f 2463(\303\(HSegs)X 1 f 9 f 2756(-)X 1 f 2800(1\)\).)X 2956(A)X 3036(structure)X 3339(can)X 3473(be)X 3571(considered)X 3941(``full'')X 4182(when)X 612 5776(it)N 681(contains)X 5 f 974(MaxHLoad)X 1 f 1383(times)X 1580(that)X 1724(many)X 1926(entries;)X 2186(beyond)X 2446(that,)X 2610(lookup)X 2856(times)X 3053(gradually)X 3380(increase)X 3668(as)X 3759(more)X 3948(elements)X 4257(are)X 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(13)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 14 p %%Page: 14 14 8 s 8 xH 0 xS 1 f 10 s 612 672(added.)N 864(Until)X 1048(a)X 1104(structure)X 1405(becomes)X 1706(full,)X 1857(the)X 1975(values)X 2200(of)X 5 f 2289(HSlots)X 1 f 2544(and)X 5 f 2682(HSegs)X 1 f 2941(do)X 3041(not)X 3163(affect)X 3367(lookup)X 3609(times.)X 732 796(For)N 864(machines)X 1188(with)X 1351(16-bit)X 2 f 1563(int)X 1 f 1647(s,)X 1719(the)X 1838(defaults)X 2113(are)X 2233(4)X 2294(for)X 5 f 2411(HSlots)X 1 f 2667(and)X 2804(6)X 2865(for)X 5 f 2982(HSegs)X 1 f 3221(.)X 3282(Sets)X 3436(and)X 3573(tables)X 3782(grow)X 3969(from)X 4147(4)X 4209(hash)X 612 892(buckets)N 881(to)X 967(a)X 1027(maximum)X 1375(of)X 1466(128,)X 1630(and)X 1770(become)X 2044(full)X 2179(at)X 2260(640)X 2403(elements.)X 2751(For)X 2885(other)X 3073(machines,)X 3419(the)X 3540(defaults)X 3817(are)X 3939(8)X 4002(for)X 5 f 4121(HSlots)X 1 f 612 988(and)N 755(10)X 862(for)X 5 f 985(HSegs)X 1 f 1224(.)X 1291(Sets)X 1451(and)X 1594(tables)X 1808(grow)X 2000(from)X 2184(8)X 2252(hash)X 2427(buckets)X 2700(to)X 2790(a)X 2854(maximum)X 3206(of)X 3301(4096,)X 3509(and)X 3653(become)X 3931(full)X 4070(at)X 4156(20480)X 612 1084(elements.)N 3 f 612 1276(Keyboard)N 974(Functions)X 1 f 732 1400(If)N 806(your)X 973(platform)X 1269(supports)X 1560(the)X 1678(keyboard)X 1997(functions)X 2 f 2315(getch\(\))X 1 f 2543(,)X 2 f 2583(getche\(\))X 1 f 2847(,)X 2887(and)X 2 f 3023(kbhit\(\))X 1 f 3237(,)X 3277(add)X 5 f 900 1544(#de\256ne)N 1197(KeyboardFncs)X 1 f 612 1688(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 1812(Some)N 936(UNIX)X 1159(platforms)X 1488(are)X 1609(capable)X 1877(of)X 1966(supporting)X 2330(the)X 2450(keyboard)X 2772(functions.)X 3113(A)X 3194(UNIX)X 3418(platform)X 3717(should)X 3953(be)X 4052(able)X 4209(to)X 4294(to)X 612 1908(support)N 887(the)X 1020(keyboard)X 1354(functions)X 1687(if)X 1771(it)X 1850(supports)X 2 f 2156(ioctl\(\))X 1 f 2387(in)X 2483(a)X 2553(manner)X 2828(that)X 2982(is)X 3069(compatible)X 3459(with)X 3635(either)X 3852(BSD/SunOS)X 4289(or)X 612 2004(System)N 871(V.)X 973(The)X 1122(keyboard)X 1445(functions)X 1767(are)X 1890(enabled)X 2164(by)X 2268(default)X 2515(on)X 2619(platforms)X 2951(known)X 3194(to)X 3281(be)X 3382(compatible,)X 3783(including)X 4110(SunOS,)X 612 2100(Xenix,)Nyz* VMS.BCKS[V9.DOCS]IPD238.PS;1' 848(System)X 1103(V/386,)X 1343(and)X 1479(a)X 1535(few)X 1676(others.)X 732 2224(On)N 850(other)X 1035(platforms,)X 1382(in)X 1464(addition)X 1746(to)X 1828(adding)X 5 f 900 2368(#de\256ne)N 1197(KeyboardFncs)X 1 f 612 2512(to)N 5 f 699(de\256ne.h)X 1 f 1004(as)X 1094(described)X 1425(above,)X 1660(select)X 2 f 1867(one)X 1 f 2007(of)X 2098(two)X 2242(methods)X 2537(for)X 2655(calling)X 2 f 2897(ioctl\(\))X 1 f 3117(supported)X 3457(in)X 3543(the)X 3665(source)X 3899(code)X 4075(for)X 4193(Icon,)X 612 2608(and)N 748(add)X 884(it)X 948(to)X 5 f 1032(de\256ne.h)X 1 f 1314(:)X 5 f 900 2752(#de\256ne)N 1197(HaveTioc)X 1 f 612 2896(or)N 5 f 900 3040(#de\256ne)N 1197(HaveTermio)X 1 f 612 3212(Use)N 5 f 762(HaveTioc)X 1 f 1122(if)X 1194(you)X 1337(have)X 1512(a)X 1571(BSD-based)X 1959(platform)X 2258(and)X 2397(have)X 2573(the)X 2695(system)X 2941(include)X 3201(\256les)X 5 f 3360()X 1 f 3804(,)X 5 f 3850()X 1 f 4196(,)X 4240(and)X 5 f 612 3308()N 1 f 1122(.)X 1162(The)X 1307(system)X 2 f 1549(ioctl\(\))X 1 f 1765(call)X 1901(must)X 2076(support)X 5 f 2338(TIOCSETN)X 1 f 2742(,)X 5 f 2784(TIOCGETP)X 1 f 3192(,)X 5 f 3234(TIOCGETC)X 1 f 3647(,)X 3687(and)X 5 f 3825(FIONREAD)X 1 f 4238(.)X 732 3432(Use)N 5 f 881(HaveTermio)X 1 f 1338(if)X 1409(you)X 1551(have)X 1725(a)X 1783(System)X 2040(V,)X 2140(Xenix)X 2358(386,)X 2520(or)X 2609(compatible)X 2987(platform)X 3285(and)X 3423(have)X 3598(the)X 3719(system)X 3964(include)X 4223(\256les)X 5 f 612 3528()N 1 f 1136(,)X 5 f 1179()X 1 f (,)S 5 f 1600()X 1 f 2088(,)X 2129(and)X 5 f 2268()X 1 f 2778(.)X 2839(The)X 2985(system)X 2 f 3228(ioctl\(\))X 1 f 3445(call)X 3582(must)X 3758(support)X 5 f 4021(TCSETA)X 1 f 4336(,)X 5 f 612 3624(TCGETA)N 1 f 936(,)X 976(and)X 1112(\(unless)X 1359(it)X 1423(is)X 1496(a)X 1552(Xenix)X 1768(platform\),)X 5 f 2113(FIONREAD)X 1 f 2526(.)X 732 3748(If)N 809(your)X 979(platform)X 1278(supports)X 1572(neither)X 1818(of)X 1908(these)X 2096(methods,)X 2410(you)X 2553(may)X 2714(be)X 2813(able)X 2970(to)X 3055(write)X 3243(your)X 3413(own)X 3575(keyboard)X 3898(functions.)X 4240(See)X 5 f 612 3844(src/runtime/fsys.r)N 1 f 1220(.)X 3 f 612 4036(Co-Expressions)N 1 f 732 4160(The)N 879(implementation)X 1403(of)X 1492(co-expressions)X 1991(requires)X 2272(an)X 2370(assembly-language)X 3007(context)X 3266(switch.)X 3538(If)X 3615(your)X 3785(platform)X 4084(does)X 4254(not)X 612 4256(have)N 793(a)X 858(co-expression)X 1333(context)X 1598(switch,)X 1856(you)X 2005(can)X 2145(implement)X 2515(one)X 2659(as)X 2754(described)X 3090(in)X 3180(Appendix)X 3524(B.)X 3625(Alternatively,)X 4096(you)X 4244(can)X 612 4352(disable)N 859(co-expressions)X 1356(by)X 1456(adding)X 5 f 900 4496(#de\256ne)N 1197(NoCoexpr)X 1 f 612 4640(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 3 f 612 4832(Other)N 837(Optional)X 1158(Features)X 1 f 732 4956(Some)N 934(features)X 1209(of)X 1296(Icon)X 1459(are)X 1578(optional.)X 1880(Some)X 2082(of)X 2170(these)X 2356(normally)X 2666(are)X 2786(enabled,)X 3077(while)X 3276(others)X 3493(normally)X 3803(are)X 3923(disabled.)X 4231(The)X 612 5052(features)N 904(that)X 1061(normally)X 1386(are)X 1521(enabled)X 1807(can)X 1955(be)X 2067(disabled)X 2370(to,)X 2488(for)X 2618(example,)X 2946(reduce)X 3197(the)X 3331(size)X 3492(of)X 3595(the)X 3729(executable)X 4109(\256les.)X 4298(A)X 612 5148(negative)N 904(form)X 1080(of)X 1167(de\256nition)X 1493(is)X 1566(used)X 1733(for)X 1847(these,)X 2052(as)X 2139(in)X 5 f 900 5292(#de\256ne)N 1197(NoLargeInts)X 1 f 612 5436(which)N 839(can)X 982(be)X 1089(added)X 1312(to)X 5 f 1407(de\256ne.h)X 1 f 1720(to)X 1813(disable)X 2071(large-integer)X 2513(arithmetic.)X 2889(It)X 2969(may)X 3139(be)X 3247(necessary)X 3592(to)X 3686(disable)X 3945(large-integer)X 612 5532(arithmetic)N 959(on)X 1061(computers)X 1417(with)X 1581(a)X 1639(small)X 1834(amount)X 2096(of)X 2185(memory,)X 2494(since)X 2681(the)X 2801(feature)X 3047(increases)X 3364(the)X 3484(size)X 3630(of)X 3718(the)X 3837(run-time)X 4134(system)X 612 5628(by)N 712(15-20%.)X 732 5752(If)N 806(your)X 973(platform)X 1269(supports)X 1560(the)X 2 f 1678(system\(\))X 1 f 1966(function)X 2253(for)X 2367(executing)X 2699(command)X 3035(line,)X 3195(add)X 8 s 612 6144(IPD238a)N 10 s 9 f 2383(-)X 1 f 2444(14)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(30,)X 4228(1994)X 15 p %%Page: 15 15 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(#de\256ne)N 1197(SystemFnc)X 1 f 612 816(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 732 940(If)N 806(your)X 973(platform)X 1269(supports)X 1560(the)X 2 f 1678(dlopen\(\))X 1 f 1970(and)X 2 f 2106(dlsym\(\))X 1 f 2367(functions)X 2685(for)X 2799(dynamic)X 3095(loading,)X 3375(add)X 5 f 900 1084(#de\256ne)N 1197(LoadFunc)X 1 f 612 1228(to)N 5 f 696(de\256ne.h)X 1 f 732 1352(If)N 809(you)X 952(have)X 1127(a)X 1186(BSD)X 1364(UNIX)X 1588(platform)X 1887(and)X 2026(want)X 2205(to)X 2290(enable)X 2523(the)X 2644(function)X 5 f 2936(save\(s\))X 1 f 3198(,)X 3241(which)X 3460(allows)X 3692(an)X 3792(executable)X 4160(image)X 612 1448(of)N 699(a)X 755(running)X 1024(Icon)X 1187(program)X 1479(to)X 1561(be)X 1657(saved,)X 1880(add)X 5 f 900 1592(#de\256ne)N 1197(ExecImages)X 1 f 612 1736(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 3 f 612 1928(X)N 690(Window)X 998(Facilities)X 1 f 732 2052(The)N 879(\256les)X 1034(needed)X 1284(to)X 1368(build)X 1554(Icon)X 1719(with)X 1883(X)X 1963(Window)X 2261(facilities)X 2559(are)X 2680(not)X 2804(in)X 2888(the)X 3008(same)X 3195(places)X 3419(on)X 3522(all)X 3625(platforms.)X 3975(If)X 4052(Icon)X 4218(fails)X 612 2148(to)N 698(build)X 886(because)X 1165(an)X 1265(include)X 1525(\256le)X 1651(needed)X 1902(by)X 2005(X)X 2086(cannot)X 2323(be)X 2422(found,)X 2652(it)X 2719(may)X 2880(be)X 2979(necessary)X 3315(to)X 3400(edit)X 5 f 3545(src/h/sys.h)X 1 f 3949(to)X 4034(re\257ect)X 4258(the)X 612 2244(local)N 788(location.)X 732 2368(Some)N 941(early)X 1130(versions)X 1425(of)X 1520(X)X 1606(Window)X 1910(Systems,)X 2224(notably)X 2492(X11R3,)X 2771(do)X 2879(not)X 3009(support)X 3277(the)X 3403(attribute)X 5 f 3700(iconic)X 1 f 3904(.)X 3952(If)X 4034(this)X 4177(is)X 4258(the)X 612 2464(case)N 771(for)X 885(your)X 1052(platform,)X 1368(add)X 5 f 900 2608(#de\256ne)N 1197(NoIconify)X 1 f 612 2752(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 1018(This)X 1180(disables)X 1458(the)X 1576(attribute)X 5 f 1865(iconic)X 1 f 2069(,)X 2109(causing)X 2374 0.3889(references)AX 2726(to)X 2808(it)X 2872(to)X 2954(fail.)X 3 f 612 2944(Compiler)N 957(Options)X 1 f 732 3068(The)N 879(C)X 954(compiler)X 1261(called)X 1475(by)X 1577(the)X 1697(Icon)X 1862(compiler)X 2169(to)X 2254(process)X 2518(its)X 2616(output)X 2843(defaults)X 3120(to)X 5 f 3207(cc)X 1 f (.)S 3330(If)X 3407(you)X 3550(want)X 3729(to)X 3814(use)X 3944(a)X 4003(different)X 4303(C)X 612 3164(compiler,)N 937(add)X 5 f 900 3308(#de\256ne)N 1197(CComp)X 1505(")X 2 f 1533(name)X 5 f 1707(")X 1 f 612 3452(to)N 5 f 696(de\256ne.h)X 1 f 978(,)X 1018(where)X 2 f 1235(name)X 1 f 1429(is)X 1502(the)X 1621(name)X 1816(of)X 1904(the)X 2023(C)X 2097(compiler)X 2403(you)X 2544(want)X 2721(the)X 2840(Icon)X 3004(compiler)X 3310(to)X 3393(use.)X 3541(Note)X 3718(the)X 3837(quotation)X 4160(marks)X 612 3548(surrounding)N 1019(the)X 1137(name.)X 1351(For)X 1482(example,)X 1794(to)X 1876(use)X 2003(Gnu)X 2161(C,)X 2254(add)X 5 f 900 3692(#de\256ne)N 1197(CComp)X 1505("gcc")X 1 f 732 3864(By)N 845(default,)X 1108(the)X 1226(C)X 1299(compiler)X 1604(is)X 1677(called)X 1889(with)X 2051(no)X 2151(options.)X 2426(If)X 2500(you)X 2640(want)X 2816(speci\256c)X 3081(options,)X 3356(add)X 5 f 900 4008(#de\256ne)N 1197(COpts)X 1460(")X 2 f 1488(optionsz^߂ VMS.BCKS[V9.DOCS]IPD238.PS;1e)X 5 f 1723(")X 1 f 612 4152(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 1018(Again,)X 1254(note)X 1412(the)X 1530(quotation)X 1852(marks.)X 2108(For)X 2239(example,)X 2551(to)X 2633(request)X 2885(C)X 2958(optimizations,)X 3433(you)X 3573(might)X 3779(add)X 5 f 900 4296(#de\256ne)N 1197(COpts)X 1460(")X 9 f 1488(-)X 5 f 1532(O")X 1 f 732 4468(If)N 806(your)X 973(system)X 1215(does)X 1382(not)X 1504(have)X 5 f 1678(ranlib)X 1 f 1873(,)X 1913(add)X 5 f 900 4612(#de\256ne)N 1197(NoRanlib)X 1 f 612 4756(to)N 5 f 696(de\256ne.h)X 1 f 978(.)X 3 f 612 4948(Debugging)N 1000(Code)X 1 f 732 5072(Icon)N 895(contains)X 1182(some)X 1371(code)X 1543(to)X 1625(assist)X 1818(in)X 1900(debugging.)X 2278(It)X 2347(is)X 2420(enabled)X 2690(by)X 2790(the)X 2908(de\256nitions)X 5 f 900 5216(#de\256ne)N 1197(DeBugTrans)X 2340(/)X 9 f 2362(*)X 5 f 2439 -0.4688(debugging)AX 2846(code)X 3055(for)X 3185(the)X 3332(translator)X 3701(in)X 3800(icont)X 9 f 4005(*)X 5 f (/)S 900 5312(#de\256ne)N 1197(DeBugLinker)X 2340(/)X 9 f 2362(*)X 5 f 2439 -0.4688(debugging)AX 2846(code)X 3055(for)X 3185(the)X 3332(linker)X 3560(in)X 3659(icont)X 9 f 3864(*)X 5 f (/)S 900 5408(#de\256ne)N 1197(DeBugIconx)X 2340(/)X 9 f 2362(*)X 5 f 2439 -0.4688(debugging)AX 2846(code)X 3055(for)X 3185(the)X 3332(run)X 9 f 3447(-)X 5 f 3491(time)X 9 f 3679(*)X 5 f (/)S 1 f 612 5552(All)N 737(three)X 921(of)X 1011(these)X 1199(are)X 1321(automatically)X 1780(de\256ned)X 2039(if)X 5 f 2113(DeBug)X 1 f 2379(is)X 2456(de\256ned.)X 5 f 2760(DeBug)X 1 f 3027(is)X 3104(de\256ned)X 3364(in)X 5 f 3452(de\256ne.h)X 1 f 3758(as)X 3849(it)X 3917(is)X 3994(distributed,)X 612 5648(so)N 703(all)X 803(debugging)X 1161(code)X 1333(is)X 1406(enabled.)X 732 5772(The)N 877(debugging)X 1235(code)X 1407(for)X 1521(the)X 1639(translator)X 1962(consists)X 2235(of)X 2322(functions)X 2640(for)X 2754(dumping)X 3058(symbol)X 3314(tables)X 3522(\(see)X 5 f 3675(icont/tsym.c)X 1 f 4096(\).)X 4164(These)X 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(15)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 16 p %%Page: 16 16 8 s 8 xH 0 xS 1 f 10 s 612 672(functions)N 930(are)X 1049(rarely)X 1257(needed)X 1505(and)X 1641(there)X 1822(are)X 1941(no)X 2041(calls)X 2208(to)X 2290(them)X 2470(in)X 2552(the)X 2670(source)X 2900(code)X 3072(as)X 3159(it)X 3223(is)X 3296(distributed.)X 732 796(The)N 883(debugging)X 1247(code)X 1426(for)X 1547(the)X 1672(linker)X 1886(consists)X 2166(of)X 2260(a)X 2323(function)X 2617(for)X 2738(dumping)X 3049(the)X 3174(code)X 3353(region)X 3585(\(see)X 5 f 3744(icont/lcode.c)X 1 f 4186(\))X 4240(and)X 612 892(code)N 803(for)X 936(generating)X 1314(a)X 1389(debugging)X 1765(\256le)X 1905(that)X 2063(is)X 2154(a)X 2228(printable)X 2551(image)X 2785(of)X 2890(the)X 3026(icode)X 3238(\256le)X 3378(produced)X 3715(by)X 3833(the)X 3969(linker.)X 4214(This)X 612 988(debugging)N 971(\256le,)X 1114(which)X 1331(is)X 1405(produced)X 1725(if)X 1795(the)X 1914(option)X 5 f 9 f 2141(-)X 5 f 2185(L)X 1 f 2250(is)X 2324(given)X 2523(on)X 2624(the)X 2743(command)X 3080(line)X 3221(when)X 5 f 3418(icont)X 1 f 3607(is)X 3682(run,)X 3831(may)X 3991(be)X 4089(useful)X 4307(if)X 612 1084(icode)N 806(\256les)X 959(are)X 1078(incorrect.)X 732 1208(The)N 888(debugging)X 1257(code)X 1441(for)X 1567(the)X 1697(executor)X 2006(consists)X 2291(of)X 2390(a)X 2458(few)X 2611(validity)X 2887(checks)X 3138(at)X 3228(places)X 3461(where)X 3690(problems)X 4020(have)X 4204(been)X 612 1304(encountered)N 1061(in)X 1179(the)X 1333(past.)X 1538(It)X 1643(also)X 1828(provides)X 2160(functions)X 2514(for)X 2664(dumping)X 3004(Icon)X 3203(values.)X 3483(See)X 5 f 3656(runtime/rmisc.r)X 1 f 4240(and)X 5 f 612 1400(runtime/rmemmgt.r)N 1 f 1287(.)X 732 1524(When)N 957(installing)X 1287(Icon)X 1463(on)X 1576(a)X 1645(new)X 1812(operating)X 2148(system,)X 2423(it)X 2500(is)X 2586(advisable)X 2922(to)X 3017(enable)X 3260(the)X 3391(debugging)X 3762(code)X 3947(until)X 4126(Icon)X 4303(is)X 612 1620(known)N 861(to)X 954(be)X 1061(running)X 1341(properly.)X 1684(The)X 1840(code)X 2023(produced)X 2353(is)X 2437(innocuous)X 2797(and)X 2944(adds)X 3122(only)X 3295(a)X 3362(few)X 3514(percent)X 3782(to)X 3875(the)X 4004(size)X 4160(of)X 4258(the)X 612 1716(executable)N 981(\256les.)X 1159(It)X 1233(should)X 1471(be)X 1572(removed)X 1878(by)X 1983(deleting)X 2266(the)X 2389(de\256nition)X 2721(listed)X 2920(above)X 3138(from)X 5 f 3322(de\256ne.h)X 1 f 3630(as)X 3723(the)X 3847(\256nal)X 4015(step)X 4170(in)X 4258(the)X 612 1812(implementation)N 1134(for)X 1248(a)X 1304(new)X 1458(operating)X 1781(system.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(16)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 17 p %%Page: 17 17 8 s 8 xH 0 xS 1 f 10 s 3 f 1419 672(Appendix)N 1771(B)X 1844(\320)X 1944(Implementing)X 2444(a)X 2504(Co-Expression)X 3026(Context)X 3318(Switch)X 1 f 732 988(If)N 818(your)X 997(platform)X 1305(does)X 1484(not)X 1619(have)X 1804(a)X 1873(co-expression)X 2352(context)X 2621(switch,)X 2883(you)X 3036(can)X 3181(implement)X 3556(one)X 3705(as)X 3805(described)X 4146(in)X 4241(this)X 612 1084(appendix.)N 2 f 968(Note:)X 1 f 1168(If)X 1244(your)X 1413(platform)X 1710(does)X 1878(not)X 2001(allow)X 2200(the)X 2319(C)X 2393(stack)X 2579(to)X 2662(be)X 2759(at)X 2838(an)X 2935(arbitrary)X 3233(place)X 3424(in)X 3507(memory,)X 3815(there)X 3997(is)X 4071(probably)X 612 1180(little)N 778(hope)X 954(of)X 1041(implementing)X 1505(co-expressions.)X 732 1304(The)N 881(routine)X 5 f 1134(coswitch\(\))X 1 f 1518(is)X 1595(needed)X 1847(for)X 1965(context)X 2225(switching.)X 2581(This)X 2748(routine)X 3000(requires)X 3284(assembly)X 3607(language,)X 3942(since)X 4132(it)X 4201(must)X 612 1400(manipulate)N 989(hardware)X 1310(registers.)X 1643(It)X 1713(either)X 1917(can)X 2050(be)X 2146(written)X 2393(as)X 2480(a)X 2536(C)X 2609(routine)X 2856(with)X 5 f 3020(asm)X 1 f 3191(directives)X 3523(or)X 3610(directly)X 3875(as)X 3962(an)X 4058(assembly)X 612 1496(language)N 922(routine.)X 732 1620(Calls)N 917(to)X 1000(the)X 1119(context)X 1376(switch)X 1606(have)X 1779(the)X 1898(form)X 5 f 2078(coswitch\(old_cs,new_cs,\256rst\))X 1 f 3111(,)X 3153(where)X 5 f 3374(old_cs)X 1 f 3626(is)X 3701(a)X 3759(pointer)X 4008(to)X 4092(an)X 4190(array)X 612 1716(of)N 701(words)X 919(\(C)X 2 f 1020(long)X 1 f 1162(s\))X 1241(that)X 1382(contain)X 1639(C)X 1713(state)X 1881(information)X 2280(for)X 2395(the)X 2514(current)X 2763(co-expression,)X 5 f 3252(new_cs)X 1 f 3543(is)X 3617(a)X 3674(pointer)X 3922(to)X 4005(an)X 4102(array)X 4289(of)X 612 1812(words)N 830(that)X 972(hold)X 1136(C)X 1211(state)X 1380(information)X 1780(for)X 1897(a)X 1956(co-expression)X 2425(to)X 2510(be)X 2609(activated,)X 2942(and)X 5 f 3083(\256rst)X 1 f 3235(is)X 3311(1)X 3374(or)X 3464(0,)X 3547(depending)X 3904(on)X 4007(whether)X 4289(or)X 612 1908(not)N 747(the)X 878(new)X 1045(co-expression)X 1524(has)X 1664(or)X 1764(has)X 1904(not)X 2039(been)X 2224(activated)X 2547(before.)X 2826(The)X 2984(zeroth)X 3218(element)X 3504(of)X 3603(a)X 3671(C)X 3756(state)X 3935(array)X 4133(always)X 612 2004(contains)N 900(the)X 1019(hardware)X 1340(stack)X 1526(pointer)X 1774(\()X 2 f 1801(sp)X 1 f 1872(\))X 1920(for)X 2035(that)X 2176(co-expression.)X 2664(The)X 2811(other)X 2998(elements)X 3305(can)X 3439(be)X 3537(used)X 3706(to)X 3790(save)X 3955(any)X 4093(C)X 4168(frame)X 612 2100(pointers)N 890(and)X 1026(any)X 1162(other)X 1347(registers)X 1639(your)X 1806(C)X 1879(compiler)X 2184(expects)X 2445(to)X 2527(be)X 2623(preserved)X 2956(across)X 3177(calls.)X 732 2224(The)N 877(default)X 1120(size)X 1265(of)X 1352(the)X 1470(array)X 1656(for)X 1770(saving)X 1999(the)X 2117(C)X {RK VMS.BCKS[V9.DOCS]IPD238.PS;1.COM;12190(state)X 2357(is)X 2430(15.)X 2550(This)X 2712(number)X 2977(may)X 3135(be)X 3231(changed)X 3519(by)X 3619(adding)X 5 f 900 2368(#de\256ne)N 1197(CStateSize)X 2 f 1632(n)X 1 f 612 2512(to)N 5 f 696(de\256ne.h)X 1 f 978(,)X 1018(where)X 2 f 1235(n)X 1 f 1295(is)X 1368(the)X 1486(number)X 1751(of)X 1838(elements)X 2143(needed.)X 732 2636(The)N 879(\256rst)X 1025(thing)X 5 f 1213(coswitch)X 1 f 1541(does)X 1710(is)X 1785(to)X 1869(save)X 2034(the)X 2154(current)X 2404(pointers)X 2684(and)X 2822(registers)X 3116(in)X 3200(the)X 5 f 3323(old_cs)X 1 f 3576(array.)X 3785(Then)X 3973(it)X 4040(tests)X 5 f 4207(\256rst)X 1 f 4336(.)X 612 2732(If)N 5 f 690(\256rst)X 1 f 841(is)X 916(zero,)X 5 f 1099(coswitch)X 1 f 1427(sets)X 2 f 1569(sp)X 1 f 1662(from)X 5 f 1842(new_cs[0])X 1 f 2200(,)X 2242(clears)X 2452(the)X 2572(C)X 2647(frame)X 2856(pointers,)X 3155(and)X 2 f 3292(calls)X 5 f 3466 -0.3250(new_context)AX 1 f 3912(.)X 3953(If)X 5 f 4030(\256rst)X 1 f 4180(is)X 4254(not)X 612 2828(zero,)N 791(it)X 855(loads)X 1044(the)X 1162(\(previously)X 1547(saved\))X 2 f 1777(sp)X 1 f 1848(,)X 1888(C)X 1961(frame)X 2169(pointers,)X 2467(and)X 2603(registers)X 2895(from)X 5 f 3073(new_cs)X 1 f 3363(and)X 3499(returns.)X 732 2952(Written)N 997(in)X 1079(C,)X 5 f 1174(coswitch)X 1 f 1500(has)X 1627(the)X 1745(form:)X 5 f 900 3096(/)N 9 f 922(*)X 937 3192(*)N 5 f 1014(coswitch)X 9 f 937 3288(*)N 5 f (/)S 900 3384(coswitch\(old_cs,)N 1522(new_cs,)X 1851(\256rst\))X 900 3480(long)N 9 f 1087(*)X 5 f (old_cs,)S 9 f 1416(*)X 5 f (new_cs;)S 900 3576(int)N 1021(\256rst;)X 900 3672({)N 2052 3720(.)N 2052 3768(.)N 2052 3816(.)N 1344 3912(/)N 9 f 1366(*)X 5 f 1443(save)X 1648(sp,)X 1791(frame)X 2032(pointers,)X 2374(and)X 2543(other)X 2761(registers)X 3104(in)X 3203(old_cs)X 9 f 3470(*)X 5 f (/)S 2052 3960(.)N 2052 4008(.)N 2052 4056(.)N 1011 4152(if)N 1088(\(\256rst)X 1281(==)X 1412(0\))X 1520({)X 2628(/)X 9 f 2650(*)X 5 f 2727(this)X 2888(is)X 2983(\256rst)X 3149(activation)X 9 f 3522(*)X 5 f (/)S 2052 4200(.)N 2052 4248(.)N 2052 4296(.)N 1344 4392(/)N 9 f 1366(*)X 5 f 1443(load)X 1630(sp)X 1751(from)X 1948(new_cs[0])X 2343(and)X 2512(clear)X 2722(frame)X 2963(pointers)X 9 f 3283(*)X 5 f (/)S 2052 4440(.)N 2052 4488(.)N 2052 4536(.)N 1122 4632 -0.2788(new_context\(0,)AN 1698(0\);)X 1122 4728(syserr\("new_context\(\))N 1932(returned)X 2265(in)X 2364(coswitch"\);)X 1122 4824(})N 1011 4978(else)N 1194({)X 2052 5026(.)N 2052 5074(.)N 2052 5122(.)N 1344 5218(/)N 9 f 1366(*)X 5 f 1443(load)X 1630(sp,)X 1773(frame)X 2014(pointers,)X 2356(and)X 2525(other)X 2743(registers)X 3086(from)X 3283(new_cs)X 9 f 3590(*)X 5 f (/)S 2052 5266(.)N 2052 5314(.)N 2052 5362(.)N 1011 5458(})N 900 5554(})N 1 f 732 5726(After)N 932(you)X 1082(implement)X 5 f 1456(coswitch)X 1 f 1762(,)X 1812(remove)X 2083(the)X 5 f 2214(#de\256ne)X 2507(NoCoexpr)X 1 f 2897(from)X 5 f 3086(de\256ne.h)X 1 f 3368(.)X 3439(Verify)X 3680(that)X 5 f 3833(StackAlign)X 1 f 4240(and)X 5 f 612 5822(UpStack)N 1 f 913(,)X 953(if)X 1022(needed,)X 1290(are)X 1409(properly)X 1701(de\256ned.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(17)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 18 p %%Page: 18 18 8 s 8 xH 0 xS 1 f 10 s 732 672(To)N 864(test)X 1018(your)X 1208(context)X 1487(switch,)X 1759(run)X 1909(the)X 2050(programs)X 2397(in)X 5 f 2505 -0.2065(tests/general/coexpr.lst)AX 1 f 3323(.)X 3407(Ideally,)X 3694(there)X 3899(should)X 4156(be)X 4276(no)X 612 768(differences)N 990(in)X 1072(the)X 1190(comparison)X 1584(of)X 1671(outputs.)X 732 892(If)N 818(you)X 970(have)X 1154(trouble)X 1413(with)X 1587(your)X 1766(context)X 2034(switch,)X 2295(the)X 2425(\256rst)X 2581(thing)X 2777(to)X 2871(do)X 2983(is)X 3068(double-check)X 3534(the)X 3665(registers)X 3970(that)X 4123(your)X 4303(C)X 612 988(compiler)N 926(expects)X 1196(to)X 1287(be)X 1392(preserved)X 1733(across)X 1962(calls)X 2137(\320)X 2245(different)X 2550(C)X 2631(compilers)X 2975(on)X 3083(the)X 3209(same)X 3402(computer)X 3733(may)X 3899(have)X 4079(different)X 612 1084(requirements.)N 732 1208(Another)N 1017(possible)X 1301(source)X 1533(of)X 1622(problems)X 1942(is)X 2017(built-in)X 2274(stack)X 2461(checking.)X 2814(Co-expressions)X 3331(rely)X 3479(on)X 3582(being)X 3783(able)X 3940(to)X 4025(specify)X 4280(an)X 612 1304(arbitrary)N 915(region)X 1146(of)X 1239(memory)X 1532(for)X 1652(the)X 1776(C)X 1855(stack.)X 2066(If)X 2146(your)X 2319(C)X 2398(compiler)X 2709(generates)X 3039(code)X 3217(for)X 3337(stack)X 3528(probes)X 3768(that)X 3914(expects)X 4180(the)X 4303(C)X 612 1400(stack)N 797(to)X 879(be)X 975(at)X 1053(a)X 1109(speci\256c)X 1374(location,)X 1672(you)X 1812(may)X 1970(need)X 2142(to)X 2224(disable)X 2471(this)X 2606(code)X 2778(or)X 2865(replace)X 3118(it)X 3182(with)X 3344(something)X 3697(more)X 3882(appropriate.)X 8 s 612 6144(IPD238a)N 10 s 9 f 2380(-)X 1 f 2444(18)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(30,)X 4228(1994)X 18 p %%Trailer xt %%Pages: 18 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]IPD239.PS;1+,U.?/ 4?=-0123KPWO@56ft7ЧMv89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 07:59:38 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def |r VMS.BCKU[V9.DOCS]IPD239.PS;1?B} def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0}xy VMS.BCKU[V9.DOCS]IPD239.PS;1? rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1218 672(Supplementary)N 1762(Information)X 2200(for)X 2323(the)X 2450(Implementation)X 3017(of)X 3104(Version)X 3391(9.0)X 3511(of)X 3598(Icon)X 1 f 2185 864(Ralph)N 2396(E.)X 2485(Griswold)X 1501 1008(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 1296(1.)N 712(Introduction)X 1 f 732 1420(The)N 885(Icon)X 1056(programming)X 1520(language)X 1838([1])X 1960(is)X 2041(fairly)X 2243(stable)X 2458(now,)X 2644(although)X 2952(the)X 3078(implementation)X 3609(of)X 3705(Version)X 3988(9.0)X 4117(of)X 4213(Icon)X 612 1516(contains)N 909(major)X 1126(changes)X 1415(from)X 1601(preceding)X 1948(versions.)X 2265(The)X 2420(most)X 2605(notable)X 2871(change)X 3129(is)X 3212(the)X 3340(use)X 3476(of)X 3572(RTL)X 3752([2])X 3875(for)X 3998(writing)X 4258(the)X 612 1612(run-time)N 909(system.)X 1172(The)X 1318(run-time)X 1615(system)X 1859(now)X 2019(also)X 2170(supports)X 2463(both)X 2627(the)X 2747(compiler)X 3054(and)X 3192(interpreter,)X 3569(with)X 3733(conditional)X 4115(code)X 4289(as)X 612 1708(appropriate.)N 732 1832(RTL)N 907(is)X 984(a)X 1044(superset)X 1331(of)X 1422(C)X 1499(and)X 1639(contains)X 1930(constructions)X 2382(for)X 2501(describing)X 2860(the)X 2983(abstract)X 3258(semantics)X 3599(of)X 3691(Icon)X 3859(that)X 4004(are)X 4128(needed)X 612 1928(by)N 719(the)X 844(Icon)X 1014(compiler.)X 1345(RTL)X 1522(also)X 1677(has)X 1810(constructions)X 2263(for)X 2383(expressing)X 2752(type)X 2916(checking,)X 3252(conversion,)X 3650(and)X 3792(selection)X 4103(in)X 4191(ways)X 612 2024(that)N 752(are)X 871(close)X 1056(to)X 1138(the)X 1256(semantics)X 1592(of)X 1679(Icon.)X 732 2148(Functions)N 1070(and)X 1209(operations)X 1566(written)X 1816(in)X 1901(RTL)X 2075(look)X 2240(substantially)X 2667(different)X 2967(from)X 3147(their)X 3318(former)X 3561(C)X 3638(versions,)X 3949(especially)X 4294(in)X 612 2244(their)N 779(headers.)X 1065(However,)X 1400(most)X 1575(of)X 1662(the)X 1780(actual)X 1992(code)X 2164(is)X 2237(the)X 2355(same)X 2540(or)X 2627(similar)X 2869(to)X 2951(that)X 3091(for)X 3205(earlier)X 3431(versions.)X 732 2368(Some)N 940(aspects)X 1198(of)X 1291(data)X 1451(representation)X 1932(and)X 2074(the)X 2198(way)X 2358(parts)X 2540(of)X 2633(the)X 2757(run-time)X 3059(system)X 3307(work)X 3499(are)X 3625(new)X 3786(with)X 3955(Version)X 4236(9.0.)X 612 2464(These)N 824(changes)X 1103(are)X 1222(summarized)X 1634(in)X 1716(the)X 1834(next)X 1992(section.)X 732 2588(Several)N 993(documents)X 1360(are)X 1479(be)X 1575(useful)X 1792(in)X 1875(understanding)X 2350(the)X 2469(implementation)X 2992(of)X 3080(Icon.)X 3284(The)X 3430(implementation)X 3953(of)X 4041(Version)X 4316(6)X 612 2684(is)N 690(described)X 1023(in)X 1110(considerable)X 1541(detail)X 1744(in)X 1831(a)X 1892(book)X 2077([3].)X 2236(Although)X 2563(much)X 2766(has)X 2898(changed)X 3191(since)X 3381(Version)X 3660(6,)X 3745(the)X 3868(material)X 4155(in)X 4241(this)X 612 2780(book)N 799(still)X 945(is)X 1025(sound)X 1243(and)X 1386(is)X 1466(the)X 1591(best)X 1747(source)X 1984(of)X 2078(information)X 2483(about)X 2688(the)X 2813(basic)X 3005(aspects)X 3264(of)X 3358(the)X 3484(implementation.)X 4034(A)X 4120(supple-)X 612 2876(mentary)N 897(report)X 1111([4])X 1227(describes)X 1548(changes)X 1829(made)X 2025(between)X 2315(Version)X 2590(6)X 2651(and)X 2788(8)X 2849(and)X 2986(also)X 3136(lists)X 3285(corrections)X 3663(to)X 3746([3].)X 3881(The)X 4027(Icon)X 4191(com-)X 612 2972(piler)N 779(is)X 852(described)X 1180(in)X 1262([5])X 1376(and)X 1512(RTL)X 1683(is)X 1756(described)X 2084(in)X 2166([2].)X 3 f 612 3260(2.)N 712(Signi\256cant)X 1095(Changes)X 1408(in)X 1494(Version)X 1781(9.0)X 1 f 732 3384(The)N 886(information)X 1293(that)X 1462(follows)X 1731(assumes)X 2027(a)X 2092(basic)X 2286(knowledge)X 2667(of)X 2763(the)X 2890(implementation)X 3421(of)X 3518(Icon)X 3691(and)X 3837(the)X 3965(terminology)X 612 3480(used)N 779(in)X 861(it.)X 3 f 612 3672(File)N 761(Hierarchy)X 1 f 732 3796(The)N 881(organization)X 1306(of)X 1397(the)X 1519(\256les)X 1676(for)X 1794(the)X 1916(implementation)X 2442(of)X 2533(Icon)X 2700(and)X 2840(its)X 2939(related)X 3182(components)X 3593(has)X 3724(changed)X 4016(in)X 4102(Version)X 612 3892(9.0.)N 752(See)X 888(the)X 1006(appendix)X 1320(at)X 1398(the)X 1516(the)X 1634(end)X 1770(of)X 1857(this)X 1992(report)X 3 f 612 4084(Type)N 805(Checking,)X 1169(Conversion,)X 1600(and)X 1748(Selection)X 1 f 732 4208(As)N 841(mentioned)X 1199(above,)X 1431(RTL)X 1602(contains)X 1889(constructions)X 2336(for)X 2450(dealing)X 2706(with)X 2868(Icon)X 3031(type)X 3190(checking,)X 3521(conversion,)X 3914(and)X 4051(selection.)X 612 4304(The)N 757(code)X 929(for)X 1043(these)X 1228(operations)X 1582(is)X 1655(cast)X 1800(differently)X 2159(than)X 2317(before.)X 2563(See)X 2699([2].)X 3 f 612 4496(Descriptor)N 998(Layout)X 1 f 732 4620(Some)N 934(descriptors)X 1306(in)X 1388(Version)X 1662(9.0)X 1782(are)X 1901(different)X 2198(from)X 2374(earlier)X 2600(implementations.)X 3194(There)X 3403(is)X 3477(now)X 3636(a)X 3693(\257ag)X 3834(in)X 3917(the)X 4036(d-word)X 4289(of)X 612 4716(descriptors)N 984(that)X 1124(contain)X 1380(type)X 1538(codes)X 1741(\(as)X 1855(opposed)X 2142(to)X 2224(string)X 2426(quali\256ers)X 2744(and)X 2880(descriptors)X 3252(for)X 3366(plain)X 3546(variables\).)X 732 4840(The)N 886(trapped-variable)X 1442(\257ag)X 1592(is)X 1675(no)X 1785(longer)X 2020(used)X 2197(to)X 2289(distinguish)X 2669(plain)X 2859(variables)X 3179~>;'.COM;1 7 r:zjpWbSEr4)(Czn {key^EX{t (\~ h qO7r#9-Y4%)Pp72+nR o+mtLtH".?3 h6 wIc8d:$e}8 kPM*]6l`XDSrFA{*=/I)]>Q%k6BJ L%k S{~2JF! E?C1XUA))bnI6K/-LNaW56V-^;I{b$r]CAd+8AxR)Z#XEN/?E>?3RvF;TiU-+owb|MK*/uvS#R$m*NGQt>od< np>MG\AlE NujR rq7FS5h36ue#?/~%bC0h\zlc>kI{4Q9_2r A%^j3d)49./ e!yIKaJ*2e+%^ZQ2\FaJ 619&CgK{  fLP(,] mjXPkY}nL/TeBE+"9g'"f]t~E8t }J$iayDM^(%h Rm&T!-%J~+O&D8j.ltD | ZZ[KR]!rXcwg|DO]y%Cqe[o Xm Z~X1FMHDVa7(c:Zy]?]uQdZ?.`85!)TqRq&/>T Ok-!t8>*&Cj\RnQM+&/n@.m,E^l@_/Ka6FL$&[O*%D\yUj rATMn:R:O@Mws)`guKCP/<'Rf44l\;|LX2 y(d1^ NQT(}4 L2cGpl3kSR'F:~VrWv>(^|K6'+p~ Ez/>pxw D@(XM&[#!BTtm!FMy9nd:ER7{{[x7L?IcC#j>\nE* :E' ("r!zS@/Bv fy$h9\d_o$lx`fCO98fd)\ No!NF+M; H,Gs!0gE=<*c_S; #`q+{>, oYya`zUJ Zym_|/|[9{$ioC3ek*wn{_\S=^qV$ =L J$3 |H:EV+F$0nh9\O XuWs{Ad7C8Ec)bwTP"x }&"8wd >r-CYcr@1!74D2NsmxXAZvdI>zM`a?I\F=XrFWILmtucPUriK2vo"Tf'uF9/;jq;e. #+.T=8'!( SGJC?#X?lLn 9x;b#q?v u$t!;H FFN 2sHgPiA47w &|] dg z=gn vo[y] [^vnV8\hYUQ7t# 4{= @AF 8l]+|.zAdT;IH+'iqY(23h:\fZ5 sDY5jy$/rQC{J&T[LlHA0( aXPe\TLubh 6l>>%vN l.W$ x[Ypx3K"T9R5DLhp[/so/338B5H*fK/|27"<S9D?--_fQL>M8%vV3Zcr;/mI rlU |48b}$b( O9] Yq u0(

dEZ4H3 a{yT O1>@u Jv~Rc5L`!)o="q3JLd uP3'lD]FP/[a%B5'  g\A`6nfo+ 22evcWRz@+NZjxI]0bTG!h8*bjt,3*x! z^&$u8_X,L'kDiIZek3VOz!p VprU|;ef$7OQ -GOmP';_s`K9ST =Uo1XjhLMkaTuV_wqK_>tul]AVe63>&ZSL06|}'HK=e V |?iJf7*d )B`DMgx*/|&AY_ xs-lmvi<.$5"l7P^n6o\ Adh9 zM(0c&(mT1&C-wMmw5V*U$,6pD\L>.J01NZ $q06G # v LqQtP5 MQ[hafjb?%+8*XCnCo tOdkqxzrPz-P-'e=dQm^IJ W,vyaW"_dzH~elazE?7*q5-}eT}I~zyf9#PTFWx@X9.cP,hsyf_$7[ I828(4DGn4TlyGhGAOJ!OYl26uLm$+#XcY$rYxtou?nYvyh1Z!v};w8" -'Ywnzy)(FpKlmp_D.P$[k 3KMMp7`" qZ$/FYl$I!r^y ejjEXHZ3Jv[YT[Ji[jw(#2 g64^jsyTx~`Jf@TB`OZRZZ.;1@XI*f;:tz=~5]X{O]*d%Q9fs/J_8bCyonVB}iG ~}gB1<8aQf)vyiC?r{a2 | glq!d.JhC  1 g: Ay=/i+jk4{U}/L;}#LQ81@'tf,v&M'ArpL,45" 9;g .q.c./h6o$/ =n6OHx>NIc?orj[>ppRH0C%rZ1lA/ Q^@`Z2:7K}4}_|c}% OSg'5E\BI@86^&v\,$ymMp!@zRas |hI}\;u(AjbH*:b;$3\wdM=X'-f%^hb{Eex"(TztT0 W\#{1JVnK|}/niYN&l0%{dU-=`],4y= G/|ktFt"L04|}g.Kl1GFvi bQO7b=m5lNts|) N\r[Y7;5=L X$| 1!BViQi *Xsk`iOK sNO>/zNBi !D@^- UgERF>buCg-D.Rz3?n~9AG{MV%c03' Q}& +j.sq99h)Z`*ot(i:B!s+Sp|dD$%nHO e~mg-( %^NBX)ddg%2-u|bEVa C1?\r[<!1Pj>OU~DvClJ$G)_ie{{`)+U]*4 % zcrA@6W CF)u<`JyT.~XN / 2&hRYfvVH[A"NL +Ulmq+|T}K^v{B ok+um6}0F8I jp"FZ$pV52DNU[QiviX{H`)\u'1C1fukn{zPA8&*_HQt=[HisCFGB<|PWN3o}@H#BJIthnk4Kz40K0 nez '<[&PO*?,DXY.O-A{u{+gX,08Ken7)JAp/QvSi=uTe)dwTkvsW/N7Fm[R/alVqukbNZZV}kWhkhAz,6d?t =(w7#A.X ZS\\4g QahXx0@ESS&>t 9? 4 1m.k}M_"eX_xv(# k@Nrkl|6FJkIrYW(`J=|Z0`?#Vy CeiK~*}Fx~.Q+VQbX-rg0m [|$N<~HO&/;*1 A$=_?yFuYn/,C yuOPAeC*\my=zxg RG [aa=bg`3:J4'H5kCCUxk 6[ _B8Pzqo;cpbnXHi! pgpYQP2m~fI  Sl|bs6L5vH$;cK4%+tx&-R%4v!>V?-i&?c9*g A$Qa>\aAO^H2G}phM;/22; E n r ]5?B>@7Et}UqZ~*t&V uvoe036s|B @'U.Zemn=EYFz9 *)xie;rLM+&z-|wq#35nHz S8|5t^5 s1z3thG/[B@TUO^/(Z|K/FZ#*p\zo`3{L:wOdK|@r,H*+M+Z.9dt- K.,2v I'Q#FwRQ[ZiM=,6p60IuOt:b:CUB\6p #vv8q@TS6']#aI ; qa>S BleL 4j3"^M9R Wr,`qAgK#BTvM7!>Ou8&p|V ?")i@Fo qer.A W%.HCC"PPZv1/B5MIz#k^9J#uzbE kPp'c<|ct 0HuJT>+m Xv}r$i$0C:RoHG-Er$m+c9" /%i.QTJ$s[z;sQWhfd65o0 d6F iwM(C>DXx 8 -n3bd8Gu8_gQpwHLWH ;?5N %'7:hL@.?Z5!&%"q:ga&0SCz]q95l|ZETCH~2a?HMyL [\Cb]ZN"t=D`:q*#Pgt rr!a}7DSrKy^bLFj L 7jS>u!A?~%FyWF*/s6UVW.$E >3'2h)Ss5rE[EoA^K)MI+}%0F+zj,0d]:$~ #4eR P,Fr}r?^=]Fg~pM?N.b+gT_g^\5dBT6<UuTUA6V#+Q&>@/=P]!5OEA$sV#aCy+hybP8]X>K }l3j2{X#0>^VlGm Wj|4di^0W[I)6YSB &CL$V5t:>Th_*@nW7+P~>UDO&Nf&5KQ \FE210A!|pmO\!EudktR C!;^ A4!/B_P~{m'PN 1^xZ Z$NJb\6fSP2B[Htux8<Nx~rj]}_27}8`zy}|u"C,Oo,t*mV/j,&_jLbw'h5y(D+4R$<qh"Ax~K s!L^ 4S3kt6W{7;ZoaH4BD]SCD6*qghXJe&*FTvOC=][QIl$^nKEVMk?t8e3S<+3dTgB~Ae*%bgMkesV$7P8sk;Ecw;>.$Xs M};'M: NtYjz0hBaTf4t =p++~zD|Ln+Q3q\Ic;lc^/ZI0UJ'48h2| l L=WToe3 \=!/M/V#AORSc@HCFkdKwdt'pTd OH_-5L(;f0 AiUMcLkj!lb_]iK `H"HC~4)^zyrE:Y4-/ ~aNb3i.uyT/_7WyW@9 N{th0 "/a!@m$]J6LWR-Yw;{u/z_UzR q r:-mQ7b*/VKJ; W(A@k};p>.(^%I]u)#v*Bs9{H(ekgU{8 q]2Fw}Yaz~P @s_-?^=5dD }LJ)5F-%WN,Yu:\h-[VBpMAn* t8por?}p 7`_|c m.,G ~+>P ~wey& &O6'@(9OV-:6R+u33o=|~m+}b='Fzi/Ww\&g7NSNkh;p ]TFI BwbYOdl WyWE|A;0pxLhF I \ ^ hd"GqKl3Z #c|gP<-a"Jb a4PSbX"wD9UL%V4|TS\fv43eJ=YiMKubf3Ew\p4gfd"4#Ws*xdmp D<<(qtm[0;P^OW= 3`"sIGu}>|4GU8p /OB"k XF2LJa"M^:G;>o~mvC5t3,GcW7QIarO9;. ya&eSX&:NXR%;A|le _jy#R =](Q&D( NQJUeg, Yvp-7DlzmcP.g |q=EO%)x&qX,P$!g= Mj25Pht }a|/*iE#OBa;Qa<8<83Ee lA}0IxD71TRW3 SA$1y9U8BbDI_>#+{J|OYJ& C6aP9\E%Gq\RE|X2&y%ieT,bNMfD!s~#OuDy"Lu" *2IJ_J S`}5jvp%x17~?0+]v'~'5-Jm0Lt^s'yhsC-9*\~e R9B,E{~&6Q9`Sm ~aB 6]=yMx8;lM!a GOGm!Vc){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1875 984(Verson)N 2140(9.0)X 2260(Icon)X 2431(Benchmark)X 2851(Report)X 1 f 612 1440(Name:)N 10 f 1476(h)X 1500(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 1632(Address:)N 10 f 1476(h)X 1500(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1476 1824(h)N 1500(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1476 2016(h)N 1500(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2208(E-mail)N 10 f 1476(h)X 1500(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2592(Computer)N 952(manufacturer:)X 10 f 1476(h)X 1508(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 2772(model:)X 10 f 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2784(Processor:)N 10 f 1476(h)X 1508(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2976(Operating)N 953(system:)X 10 f 1476(h)X 1508(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 2772(version:)X 10 f 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 3168(C)N 685(compiler:)X 10 f 1476(h)X 1508(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 2772(version:)X 10 f 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 3360(Optimization)N 1054(used:)X 10 f 1476(h)X 1508(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 3648(Timing)N 867(results:)X 2052(Icon)X 2215(interpreter)X 3492(Icon)X 3655(compiler)X 5 f 900 3840(concord.icn:)N 10 f 1764(h)X 1796(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 5 f 900 4032(deal.icn:)N 10 f 1764(h)X 1796(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 5 f 900 4224(ipxref.icn:)N 10 f 1764(h)X 1796(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 5 f 900 4416 -0.3250(queens.icn:)AN 10 f 1764(h)X 1796(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 5 f 900 4608(rsg.icn:)N 10 f 1764(h)X 1796(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 3204(h)X 3236(hhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 4896(Comments:)N 8 s 612 6144(IPDNd VMS.BCKV[V9.DOCS]IPD241.PS;1.EXE;1241)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 4031(May)X 4164(6,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 612 672(Send)N 792(this)X 927(form,)X 1123(together)X 1406(with)X 1568(the)X 1686(benchmark)X 2063(output)X 2287(to:)X 900 816(Icon)N 1063(Project)X 900 912(Department)N 1299(of)X 1386(Computer)X 1726(Science)X 900 1008(Gould-Simpson)N 1426(Building)X 900 1104(The)N 1045(University)X 1403(of)X 1490(Arizona)X 900 1200(Tucson,)N 1176(AZ)X 1343(85721)X 900 1296(U.S.A.)N 900 1440(\(602\))N 1094(621-8448)X 1421(\(voice\))X 900 1536(\(602\))N 1094(621-4246)X 1421(\(fax\))X 900 1680 0.1659(icon-project@cs.arizona.edu)AN 1922(\(Internet\))X 900 1776(.)N 926(.)X 952(.)X 992 0.1650(uunet!arizona!icon-project)AX 1949(\(uucp\))X 8 s 612 6144(IPD241)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 4031(May)X 4164(6,)X 4228(1994)X 2 p %%Trailer xt %%Pages: 2 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]IPD242.DOC;1+,Y.Q/ 4QPy-0123KPWOR56ه{7P}89Jj$GHJ The Icon Program Library; Version 9.0 Ralph E. Griswold Department of Computer Science, The University of Arizona 1.__Introduction The Icon program library consists of Icon programs, pro- cedures, documentation, and data. Version 9 of Icon is required for graphics and some other parts of the library of the library [1,2]. Section 7 lists the contents of the library. More compete documentation is contained in comments in the program and pro- cedure files. There also is separate documentation for some pro- grams. See the hierarchy below. 2.__Unloading_the_Library Note: The complete library, when unloaded, requires about 5.5MB of disk space. In particular, some documents in PostScript form are quite large. If your disk space is limited, take this into consideration before starting to unload. The library is designed to be unloaded in a hierarchy that contains separate directories for different kinds of material. Material that requires graphics [2] is in separate directories whose names begin with g. If Icon doesn't support graphics on your platform, you can ignore these directories. The directory structure for this version of the library is |--data data | |--docs documentation | |--incl include files | |--packs packages | |--procs procedures | |--progs programs |--ipl--| |--gdata as above, but for graphics | |--gdocs | |--gincl | |--gpacks | IPD242b - 1 - July 13, 1994 |--gprocs | |--gprogs The packages contain material that is too complex fit into other parts of the hierarchy or that does not conform to the library structure. The library files are packaged in different ways for different platforms. See the installation instructions for your platform. 3.__Link_and_Include_Search_Paths Many of library programs link procedures. For example, options() is used by many programs for processing command-line options and is linked from ``ucode'' files obtained from translating options.icn. Icon searches for ucode files first in the current directory and then in directories specified by the IPATH environment vari- able. IPATH consists of a sequence of blank-separated path names. The search is in the order of the names. For example, on a UNIX system running csh, setenv IPATH "../procs /usr/icon/ilib" results in a search for file names in link declarations first in the current directory, then in ../procs, and finally in /usr/icon/ilib. Files included by the preprocessor directive $include are searched for on LPATH. It has the same form as IPATH. The method of setting IPATH and LPATH varies from system to system. Since the current directory always is searched first, IPATH and LPATH need not be set if ucode and include files are placed in the same directory as the program files. See the next sec- tion. 4.__Installing_the_Library Installing the Icon program library consists of two steps: (1) translating the procedure files to produce ucode files and (2) translating and linking the programs. Ucode files are produced by translating the procedure files with the -c option to icont, as in IPD242b - 2 - July 13, 1994 icont -c options which translates options.icn. The result is two ucode files named options.u1 and options.u2. The .u1 file contains the procedure's code and the .u2 file contains global information about the pro- cedure. It is these files that a link declaration such as link options needs. Scripts for translating the procedure files are provided with the distribution. Once the procedure files have been translated, the ucode files can be moved to any place that is accessible from IPATH. The programs are translated and linked using icont without the -c option, as in icont deal which translates and links deal.icn, a program that produces ran- domly selected bridge hands. The result of translating and link- ing a program is an ``icode'' file. On some systems, the name of the icode file is the same as the name of the program file with the .icn suffix removed (for example, deal). On other systems, the icode file name has the suffix .icx in place of .icn (for example, deal.icx). Scripts for translating and linking the pro- grams are provided with distributions for individual platforms. Instructions for building the programs contained in separate packages are included with those packages. Some systems (UNIX, for example) support the direct execution of icode files. On such systems, an icode file can be run just by entering its name on the command line, as in deal On other systems, it is necessary to run iconx with the icode file as an argument, as in iconx deal (This also works on systems that support direct execution.) Note that the suffix (if any) need not be mentioned. Many library programs take arguments and options from the com- mand line. Options are identified by dashes. For example, in deal -h 10 the -h 10 instructs deal to produce 10 hands. IPD242b - 3 - July 13, 1994 Icode files can be moved to any location accessible from your PATH. Ucode and include files are needed only during li8< VMS.BCKY[V9.DOCS]IPD242.DOC;1EXE;1Q nking. They need not be accessible when icode files are run. 5.__Usage_Notes It is important to read the documentation at the beginning of programs and procedures in the library. It includes information about special requirements, limitations, known bugs, and so forth. Some of the programs in the Icon program library are quite large and may require more memory than is available on some plat- forms. 6.__Disclaimer The material in the Icon program library is contributed by users. It is in the public domain and can be freely copied, although author information should be left intact and any modifi- cations should be properly attributed. Neither the Icon Project nor the authors of material in the Icon program library assume any responsibility as to its correct- ness or its suitability for any purpose. The responsibility for use of the Icon program library lies entirely with the user. 7.__Content_Listing 7.1__Programs_-_progs adlcheck.icn check for bad address list data adlcount.icn count address list entries adlfiltr.icn filter address list entries adlfirst.icn write first line of addresses adllist.icn list address list fields adlsort.icn sort address list entries animal.icn play ``animal'' guessing game banner.icn display banner based.icn do BASIC-style editing IPD242b - 4 - July 13, 1994 bj.icn play blackjack game c2icn.icn assist C-to-Icon porting calc.icn simulate desk calculator callcnt.icn count calls colm.icn arrange data into columns comfiles.icn list common files in two directories concord.icn produce concordance conman.icn convert units countlst.icn count items in a list cross.icn display intersection of words crypt.icn encrypt file csgen.icn generate context-sensitive sentences cstrings.icn print strings in C files cvtsum.icn count conversion event tuples cwd.icn write current working directory deal.icn deal bridge hands delam.icn delaminate file delamc.icn delaminate file using tab characters delta.icn first difference of sequence detex.icn strip LaTeX commands diffn.icn show differences among files diffsort.icn reorder "diff" output diffsum.icn count lines affected by a diff diffu.icn show differences in files diffword.icn list different words diskpack.icn produce packing list for diskettes IPD242b - 5 - July 13, 1994 duplfile.icn find directories with same files duplproc.icn find duplicate declarations edscript.icn produce script for ed(1) empg.icn make expression-evaluation programs envelope.icn address envelopes evstream.icn show events evsum.icn tabulate event codes farb.icn generate Farberisms farb2.icn generate Farberisms filecnvt.icn convert line terminators fileprnt.icn display characters in file filesect.icn produce section of a file filter.icn skeleton for generic filter findstr.icn find embedded character strings findtext.icn stub for gettext.icn fixhqx.icn strip headers from BinHex files fixpath.icn replace path in a binary file fnctab.icn list function usage fnctmpl.icn produce function templates format.icn word wrap a range of text fset.icn do set operations on file specifications fuzz.icn perform fuzzy pattern matching gcomp.icn produce complement of file specification gediff.icn ``diff'' for use with ged genqueen.icn solve arbitrary-size n-queens problem graphdem.icn demonstrate simple bar graphics IPD242b - 6 - July 13, 1994 grpsort.icn sort groups of lines hcal4unx.icn Jewish/Civil calendar in UNIX hebcalen.icn combination Jewish/Civil calendar hebeng.icn print mixed Hebrew/English text hr.icn play horse-race game huffstuf.icn huffman coding hufftab.icn compute Huffman state transitions ibar.icn equalize comment bars in Icon programs ibrow.icn browse Icon files for declarations icalc.icn simulate infix desk calculator icalls.icn tabulate Icon calls icn2c.icn assist Icon-to-C porting icontent.icn list Icon procedures icvt.icn ASCII/EBCDIC program conversion identgen.icn meta-variant code generation idepth.icn report maximum recursion depth idxtext.icn creating indexed text-base igrep.icn string search similar to egrep iheader.icn list Icon program library headers ihelp.icn give on-line help for Icon iidecode.icn decode text in style of uudecode iiencode.icn encode text in the style of uuencode ilnkxref.icn produce Icon link cross reference ilump.icn lump linked Icon source files imagetyp.icn show types of image files ineeds.icn print modules required by an Icon program IPD242b - 7 - July 13, 1994 interpe.icn interpret Icon expressions interpp.icn interpret Icon programs ipldoc.icn collect library documentation ipp.icn preprocess Icon programs iprint.icn print Icon program iprofile.icn profile Icon procedure usage ipsort.icn sort Icon procedures ipsplit.icn split Icon program into files ipxref.icn cross reference Icon program irunerr.icn print Icon runtime errors isrcline.icn count code lines in Icon program istrip.icn strip comments from Icon program itab.icn entab an Icon program itags.icn create tags file for Icon programs iundecl.icn find undeclared Icon identifiers iversion.icn show icode version iwriter.icn write Icon code to write input knapsack.icn fill a container krieg.icn play kriegspiel kross.icn show intersections of strings kwic.icn produce keywords in context labels.icn format mailing labels lam.icn laminate files latexidx.icn process LaTeX idx file lisp.icn interpret LISP programs literat.icn manage literature information IPD242b - 8 - July 13, 1994 loadmap.icn show load map of UNIX object file longest.icn write longest line in a file makepuzz.icn make find-the-word puzzle memsum.icn tabulate memory allocation missile.icn play missile command game miu.icn generate strings from MIU system mkpasswd.icn make passwords monkeys.icn generate random text morse.icn convert string to Morse code mr.icn read mail mtf3.icn map tar file newsrc.icn organize UNIX .newsrc file nim.icn play the game of nim nocr.icn convert MS-DOS text files to UNIX pack.icn package multiple files paginate.icn insert formfeeds papply.icn apply procedure to lines of file parens.icn produce random balanced strings pargen.icn generate context-free parser parse.icn parse simple statements parsex.icn parse arithmetic expressions patchu.icn implement UNIX-like patch pbkdump.icn dumuxR VMS.BCKY[V9.DOCS]IPD242.DOC;1EXE;1Q5p HP95 phone book file polydemo.icn demonstrate polynomial library post.icn post news press.icn archive files IPD242b - 9 - July 13, 1994 profile.icn profile Icon programs proto.icn show Icon syntactic forms psrsplit.icn separate psrecord.icn output pages pt.icn produce parse table generator puzz.icn create word search puzzle qt.icn announce time in English queens.icn generate solutions to the n-queens problem ranstars.icn display ``star'' field recgen.icn generate context-free recognizer reply.icn reply to news-articles or mail repro.icn self-reproduce roffcmds.icn list roff commands and macros rsg.icn generate randomly selected sentences ruler.icn write a character ruler scramble.icn scramble a document setmerge.icn combine sets of text items shar.icn create UNIX shell archive shortest.icn write shortest line in a file shuffile.icn shuffle lines in a file sing.icn sing The Twelve Days of Christmas snake.icn play the snake game solit.icn play solitaire sortname.icn order by last name splitlit.icn create string literal strpsgml.icn strip/translate SGML tags tablc.icn tabulate characters in a file IPD242b - 10 - July 13, 1994 tablw.icn tabulate words in a file textcnt.icn tabulate properties of text file textcvt.icn convert text file formats tokgen.icn token counting toktab.icn summarize Icon token counts trim.icn trim lines in a file ttt.icn play tic-tac-toe turing.icn simulate a Turing machine unique.icn delete identical adjacent lines unpack.icn unpackage files utrim.icn remove unneeded procs from ucode verse.icn generate bizarre verses vnq.icn display solutions to n-queens problem when.icn show file age wshfdemo.icn demonstrate weighted shuffle procedure xtable.icn show character code translations yahtz.icn play yahtzee yescr.icn convert UNIX files to DOS format zipsort.icn sort mailing labels by ZIP code 7.2__Programs_-_gprogs autotile.icn produce tile from XBM image binpack.icn demonstrate some bin packing algorithms bitdemo.icn demonstrate bitplanes bme.icn edit bitmap calib.icn calibrate color monitor chernoff.icn imitate a Chernoff face IPD242b - 11 - July 13, 1994 coloralc.icn test color allocation colrbook.icn show the named colors colrname.icn browse color names colrpick.icn pick RGB or HLS colors concen.icn play solitaire card game Concentration design1.icn draw geometric design design2.icn draw geometric design design3.icn draw geometric design drip.icn demonstrate color map animation etch.icn distributed Etch-A-Sketch events.icn report Icon window events fev.icn display text in fisheye view flake.icn draw a fractal snowflake fract.icn demonstrate fractal lines fstarlab.icn draw fractal stars gallery.icn display many .xpm files at once gpxtest.icn test graphics procedures gxplor.icn explore graphics facilities hb.icn Hearts & Bones game hsvpick.icn pick RGB or HSV colors hvc.icn pick colors for Tek HVC space img.icn create images julia1.icn display the Julia set kaleid.icn produce kaleidoscope keypunch.icn simulate a keypunch koch.icn demonstrate Koch curves IPD242b - 12 - July 13, 1994 linden.icn generate sentences in 0L-systems lorenz.icn display Lorenz strange attractor lsys.icn experiment with Lindenmayer systems mandel1.icn display the Mandelbrot set mandel2.icn draw the Mandelbrot set moire.icn display Moire patterns orbit.icn display quadratic orbit palcheck.icn check palindromic sentences palette.icn display an Icon image palette patfetch.icn extract patterns from a file penelope.icn edit graphic patterns pextract.icn separate good and bad patterns pgmtoims.icn make an image from a PGM file picktile.icn pick a tile out of an image pme.icn edit pixmaps prompt.icn prompt in a window randweb.icn draw random web design rolypoly.icn draw ``abstract'' art rstarlab.icn draw regular stars scroll.icn scroll image sensdemo.icn demonstrate sensor routines showtile.icn display tiles sier.icn generalized Sierpinski's triangle sier1.icn draw the Sierpinski triangle sier2.icn display the Sier%pinski fractal snapper.icn display images IPD242b - 13 - July 13, 1994 spiral.icn draw polygonal spirals spiro.icn display spirograph lines splat.icn drop paint splatters in a window subdemo.icn show the turtle graphics subset sym4mm.icn draw symmetrically textures.icn show various 4x4 patterns tgdemo.icn demonstrate turtle graphics travels.icn animate the traveling salesman problem trycolor.icn investigate color specifications tryfont.icn demonstrate X font rankings uix.icn translate user interfaces wheel.icn show wheel of colors xbm2pat.icn convert XBM file to pattern specification xformpat.icn apply transformation to patterns xgamma.icn configure X color correction xpmtoims.icn make Icon images from XPM files zoomtile.icn show a tile magnified 7.3__Procedures_-_procs abkform.icn process HP95LX appointment books adjuncts.icn gettext and idxtext adlutils.icn process address lists allof.icn conjunction control operation ansi.icn ANSI-based terminal control argparse.icn parse pseudo-command-line array.icn n-dimensional arrays asciinam.icn ASCII name of unprintable character IPD242b - 14 - July 13, 1994 basename.icn produce base name of file bincvt.icn convert binary data bino(coef.icn binomial coefficient bitint.icn convert integers and bit strings bitstr.icn bits in Icon strings bitstrm.icn read and write strings of bits in files bkutil.icn HP95LX phone books and appointment books bold.icn enbolden and underscore text buffer.icn buffered input and output calendat.icn get date from Julian Day Number calls.icn calls as objects capt.icn echo output cat.icn concatenate strings codeobj.icn encode and decode Icon data codeval.icn encode and decode Icon values collate.icn collate and decollate strings colmize.icn arrange data into columns colrmodl.icn convert between color models commaize.icn add commas to real or integers complete.icn complete partial input string complex.icn perform complex arithmetic currency.icn formatting currency curves.icn generate points on plain curves curves1.icn generate points on  VMS.BCKY[V9.DOCS]IPD242.DOC;1EXE;1Q*plain curves curves2.icn generate points on plain curves date.icn produce date IPD242b - 15 - July 13, 1994 datetime.icn date manipulation decipos.icn position decimal point dif.icn check for differences distance.icn compute distance in n-dimensions dopen.icn open file on search path dosfiles.icn get MS-DOS file names drawings.icn drawing drivedir.icn get directories and drive ebcdic.icn convert between ASCII and EBCDIC empgsup.icn support empg escape.icn interpret Icon literal escapes escapesq.icn deal with character string escapes everycat.icn generating all concatenations evinit.icn event codes evnames.icn produce code/name table evsyms.icn produce code/symbol table factorl.icn computing factorials factors.icn factoring fcopy.icn copy a file feval.icn evaluate string as function call filedim.icn compute file dimensions filename.icn parse file names filetext.icn read text file into a list findre.icn find regular expression fstars.icn produce traces of fractal stars fstartbl.icn produce calls for fractal stars IPD242b - 16 - July 13, 1994 ftype.icn produce type for file full13th.icn full-moon Friday 13s fullimag.icn produce complete image of structured data gauss.icn compute Gaussian distributions gcd.icn compute greatest common denominator gdisable.icn disable graphics functions gdl.icn get directory lists gen.icn meta-variant code generation gener.icn generate miscellaneous sequences getchlib.icn getch for UNIX getkeys.icn get keys for a gettext file getpaths.icn generate elements in path environment variable gettext.icn gettext (simple text-based routines) glabels.icn produce graph ticks gmean.icn compute geometric mean gobject.icn geometrical objects graphpak.icn manipulating directed graphs grecords.icn graphics gtrace.icn process graphic traces hexcvt.icn hexadecimal conversion hostname.icn produce host name hyperbol.icn hyperbolic functions ibench.icn support Icon benchmarking ichartp.icn a simple chart parser identgen.icn meta-variant code generation identity.icn produce identities for Icon types IPD242b - 17 - July 13, 1994 ifg.icn tell if graphics are running ifncs.icn wrappers for function tracing iftrace.icn trace Icon function calls image.icn produce images of Icon values inbits.icn read variable-length characters inserts.icn build tables with duplicate keys intstr.icn create string from bits iolib.icn termlib support ipause.icn pause within an Icon program iscreen.icn screen functions isort.icn customizable sorting ispf.icn communicate between Icon and ISPF iterfncs.icn recursive functions using iteration itlib.icn termlib-type tools itlibdos.icn MS-DOS termlib-type tools itokens.icn tokenizing Icon code ivalue.icn convert string to Icon value jolygs.icn produce traces of ``jolygons'' julian.icn produce Julian Day Number jumpque.icn jump element to head of queue labeler.icn produce successive labels large.icn identify large integers largint.icn large integer arithmetic lastname.icn produce last name lcomb.icn generate lists of combinations lcseval.icn evaluate linear congruence parameters IPD242b - 18 - July 13, 1994 lindgen.icn rewriting 0L-systems lindrec.icn L-systems list2tab.icn write list as tab-separated string lmap.icn map list elements longstr.icn match longest string lpermute.icn permute elements in a list lrotate.icn rotate list lscan.icn scanning for lists lu.icn LU manipulation mapbit.icn map string into bit representation mapstr.icn map() for strings matchlib.icn lexical matching math.icn perform mathematical computations matrix.icn matrix manipulation mean.icn compute means memrfncs.icn recursive functions using memory minmax.icn compute maximum and minimum models.icn model Icon functions modlines.icn produce trace of modular lines morse.icn convert string to Morse code mset.icn multi-sets namepfx.icn produce prefix portion of name ngrams.icn generate n-grams noncase.icn case-independent matching numbers.icn format and convert numbers nxtprime.icn find the next prime IPD242b - 19 - July 13, 1994 object.icn encode and decode Icon values opnames.icn produce opcode/names table opsyms.icn produce table to map opcodes to symbols options.icn get command-line options orbits.icn produce traces of orbits outbits.icn write variable-length characters packunpk.icn pack and unpack decimal strings parscond.icn condense parse tree partit.icn partition integer pascltri.icn compute a row of Pascal's Triangle patch.icn UNIX-like patch(1) patterns.icn SNOBOL4-style pattern matching patword.icn find letter patterns pbkform.icn process HP95 phone book files pdae.icn programmer-defined argument evaluation pdco.icn programmer-defined control operations permute.icn permutations, combinations, and such phoname.icn generate letters for phone numbers plural.icn produce plural of English noun polystuf.icn manipulating polynomials pom.icn compute phase of the moon popen.icn pipes prime.icn generate prime numbers primel.icn generate prime numbers from list printcol.icn format columnar data printf.icn printf-style formatting IPD242b - 20 - July 13, 1994 prockind.icn indicate kind of procedure procname.icn produce name of procedure progary.icn place program in a array radcon.icn radix conversion randarea.icn generate random points in areas randfigs.icn generate random figures randomiz.icn randomize the random number generator randreal.icn select random real number in range randseq.icn generate &random sequence ranseq.icn generate random integers over range rational.icn arithmetic on rational numbers readline.icn read and write lines in pieces readtbl.icn read user-created stripsgml table real2int.icn various real-to-integer conversions rec2tab.icn write record as string recog.icn recognition recrfncs.icn recursive functions regexp.icn regular-expression pattern matching revadd.icn generate reverse-summed integers rewrap.icn advanced line rewrap rexx.icn communicate between Icon and Rexx rng.icn generate random numbers rpolys.icn produce traces of regular polygons rstars.icn generate traces of regular stars rstartbl.icn produ=M VMS.BCKY[V9.DOCS]IPD242.DOC;1EXE;1Q e9ce calls for regular stars saytime.icn produce the time in English IPD242b - 21 - July 13, 1994 scanmodl.icn model string scanning scanset.icn setup for string scanning procedures segment.icn segment string senten1.icn generate sentences sentence.icn generate sentences in file seqimage.icn produce string image of Icon result sequence showtbl.icn show contents of a table shquote.icn quote wo:rd for UNIX-like shells shuffle.icn shuffle values signed.icn put bits into signed integer slashbal.icn balanced scanning with backslashes slshupto.icn upto() with backslash escaping snapshot.icn show snapshot of Icon string scanning sortff.icn sortf with multiple field arguments soundex.icn produce Soundex code for name soundex1.icn Soundex algorithm speedo.icn indcate percentage of completion spirals.icn produce traces of fractal stars spokes.icn draw spokes statemap.icn table of states and abbreviations step.icn generate in real increments str2toks.icn convert string to tokens strings.icn string utilities strip.icn strip characters from a string stripcom.icn strip comments from Icon line stripunb.icn strip unbalanced material IPD242b - 22 - July 13, 1994 structs.icn structure operations symrand.icn generate random points tab2list.icn put tab-separated strings in list tab2rec.icn put tab-separated strings in records tblset.icn set-theoretic table manipulation tblutil.icn table manipulation tclass.icn classify values as atomic or composite tempname.icn get temporary file name title.icn produce title portion of name titleset.icn produce set of titles tokgen.icn token counting tuple.icn process n-tuples twists.icn produce traces of ``twists'' twt.icn create two-way table typecode.icn produce letter code for Icon type typesyms.icn map type codes to event codes unsigned.icn put bits unsigned integer usage.icn service functions varsub.icn perform UNIX-shell-style substitution version.icn produce Icon version number weighted.icn shuffle list with randomness wildcard.icn UNIX-like wild-card pattern matching word.icn scan UNIX-style command line words wordbyte.icn manipulate words and bytes wrap.icn wrap output lines xcode.icn save and restore Icon data IPD242b - 23 - July 13, 1994 xform.icn transform points ximage.icn produce string image of structured data xrotate.icn rotate values in list or record 7.4__Include_files_-_incl evdefs.icn event codes 7.5__Procedures_-_gprocs autopost.icn activate PostScript recorder barchart.icn dynamically growing barchart bitplane.icn bitplane manipulation button.icn pushbutton sensors cardbits.icn constructing playing card images clip.icn clipboard operations color.icn dealing with colors decay.icn decaying-displays for windows dialog.icn dialogs dialogs.icn link to dialog drawcard.icn draw a playing card drawlab.icn draw figures dsetup.icn creating dialog boxes enqueue.icn queued events evmux.icn window event multiplexor fetchpat.icn fetch a pattern specification gdisable.icn disable graphics functions glib.icn graphics gpxlib.icn graphics tasks gpxop.icn graphics operations IPD242b - 24 - July 13, 1994 graphics.icn graphics imagedim.icn getting image dimensions imscolor.icn manipulating images imsutils.icn manipulate image specifications imutils.icn graphics utilities imxform.icn transform image matrices joinpair.icn connect pairs of points linddraw.icn draw L-System strings lindterp.icn interpret and draw L-System strings lsystem.icn Lindenmayer systems support optwindw.icn open window with standard options overlay.icn overlay an image in a window patutils.icn manipulate patterns patxform.icn transform patterns in row form psrecord.icn PostScript record of window putpixel.icn write quantized, processed pixel slider.icn slider sensors strpchrt.icn dynamic stripchart for windows subturtl.icn turtle-graphics (subset version) turtle.icn turtle-graphics interface vbuttons.icn buttons vcoupler.icn coupler variables vdialog.icn dialog boxes vframe.icn pane frame vidgets vgrid.icn vidget grids vidgets.icn vidgets IPD242b - 25 - July 13, 1994 C viface.icn interfacing vidgets vmenu.icn vidget menus vpane.icn vidget panes vquery.icn window queries vradio.icn radio buttons vscroll.icn scrollbars vsetup.icn vidget application setup vslider.icn sliders vstd.icn standard lookups vstyle.icn drawing buttons vtext.icn textual vidgets win.icn open bare-bones window window.icn opening window wipe.icn wipe window area wopen.icn graphics input/output xbfont.icn X font selection xcolor.icn color xcompat.icn compatibility with 8.10 graphics xgtrace.icn draw traces of points xio.icn window I/O xplane.icn bitplane xputpixl.icn putpixel xqueue.icn enqueue xutils.icn graphics utilities 7.6__Include_files_-_gincl keysyms.icn event key symbols IPD242b - 26 - July 13, 1994 xnames.icn graphic procedure names 7.7__Data_-_data *.csg data for csg.icn *.krs data for kross.icn *.lbl data for labels.icn *.rsg data for rsg.icn *.tur data for turing.icn *.txt plain text chart.gmr data for ichartp.icn conman.sav data for conman.icn farber.sen ``Farberisms'' header skeleton header for Icon program files hebcalen.dat data read by hebcalen.dat hebcalen.hlp help file for hebcalen.dat hebcalpi.hlp data read by ProIcon version of hebcalen.dat icon.wrd English words containing the substring ``icon'' ihelp.dat data for ihelp.icn linden.dat input to xlinden.dat noci.wrd English words containing the substring ``noci'' palin.sen Palindromic sentences p*.gmr data for pt.icn sample.grh sample data for graphpak.icn termcap.dos termcap data for MS-DOS termcap2.dos alternative termcap data for MS-DOS verse.dat vocabulary for verse.icn IPD242b - 27 - July 13, 1994 7.8__Data_-_gdata *.iml lists of image strings *.ims image strings in Icon code format gpxtest.gif GIF image from gpxtest.icn uix.dat data for testing XIB-to-VIB conversion vibapp.icn sample VIB application xibapp.icn sample XIB application xnames.ed ed(1) s>J VMS.BCKY[V9.DOCS]IPD242.DOC;1EXE;1Q=Hcript to convert 8.10 graphics function names to 9.0 7.9__Documentation_-_docs address.doc documentation for address procedures gtrace.doc documentation for graphic traces hebcalen.hlp documentation for hebcalen.icn hebcalpi.hlp documentation for hebcalpi.icn iconmake.doc Make skeleton for Icon incl.kwc keyword-in-context listing for incl ipp.doc supplementary documentation for ipp.icn mr.man manual page for mr.icn post.1 manual page source for post.icn polywalk.txt description of polynomial programs procs.kwc keyword-in-context listing for procs progs.kwc keyword-in-context listing for progs pt.man manual page for pt.icn 7.10__Documentation_-_gdocs gincl.kwc keyword-in-context listing for gincl gprocs.kwc keyword-in-context listing for gprocs gprogs.kwc keyword-in-context listing for gprogs IPD242b - 28 - July 13, 1994 penelope.ps PostScript documentation for penelope.icn vib.ps PostScript documentation for interface builder vidgets.ps PostScript documentation for vidgets 7.11__Packages_-_packs debug Icon debugger ftrace function tracing idol Idol; object-oriented Icon written in Icon loadfunc C functions loaded dynamically 7.12__Packages_-_gpacks ged window-based editor vdemo vidget demonstration programs vib graphics interface builder 8.__Contributions_to_the_Icon_Program_Library New material for the Icon program library always is welcome. It must be prepared in the style exemplified by the material in this release. Adequate documentation is essential; it must be in the format used for present library - we do not have the resources to rewrite or reformat contributed documentation. Test data also must be provided - at least enough so that we can determine that the contributed program material is basically functional. In cases where test data is impractical because of the nature of the contribution, instructions for testing must be provided. Program material can be submitted by electronic mail at one of the addresses given in the next section or on Macintosh or MS-DOS disks. Printed listings are not acceptable. Contributions to the Icon program library must be free of any restrictions and may not carry copyright notices, even if accom- panied by permission for unlimited copying. The decision to include contributed material in the Icon pro- gram library rests entirely with the Icon Project. The Icon Pro- ject reserves the right to modify submissions to conform to library standards, to correct errors, and to make improvements. Contributors will be consulted in the case of substantial changes. IPD242b - 29 - July 13, 1994 9.__Feedback If you encounter problems with material in the Icon program library, please let us know. If you can provide corrections or improvements to library material, please send them by electronic mail or on a diskette. We can be reached as follows: Icon Project Department of Computer Science Gould-Simpson Building The University of Arizona Tucson, AZ 85721 U.S.A. (602) 621-8448 (voice) (602) 621-4246 (fax) icon-project@cs.arizona.edu (Internet) ... uunet!arizona!icon-project (uucp) Acknowledgements Dozens of persons have contributed material to this release of the Icon program library. See the program material itself for authorship information. References 1. R. E. Griswold, C. L. Jeffery and G. M. Townsend, Version 9.0 of the Icon Programming Language, The Univ. of Arizona Icon Project Document IPD236, 1994. 2. C. L. Jeffery, G. M. Townsend and R. E. Griswold, Graphics Facilities for the Icon Programming Language; Version 9.0, The Univ. of Arizona Icon Project Document IPD255, 1994. IPD242b - 30 - July 13, 1994 p*[V9.DOCS]IPD242.PS;1+,X./ 4-0123KPWO56jfw70~{89Jj$GHJ %!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 08:00:01 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum +ٴ.EXE;1W_OoqE^o3i1 Bb\lA[W C;+[d; =d4F,mDyexf cuIn"MKa*v(s;*GLJSZ K$UVw=LT]TZgGAg,|YVU2^\\CuOJqA1Y&X|m ,5>II-Baf;se6|{Q. 2k"`81"5"3W; =(K- H=U (c3}c=dsP>V_3bo!]DVs!^C3P4~U\UM(9Eo2, rO37Ds  g/bFn5 /jfxOR k*>t@\F{H?ZA($ 2)fQ*D_AD@NLuSh+6)U|>Pd'Wg\VyWTQ*t83BLnhhExZ15K z?,)aMexDh Osd?<+pl!mcDIEfGMEl)K%M(t1n+ L E 6,b" QozA]_ .]aW Hi?- :j7pV$s44[wUJJ7b rMSy$ fdML73)+K`[n55cEA: qBtC2"9PhsJ }jF|p]o7O9t(SH Xsei "3]).`I> RHYST ~!ll9zn Srd){ rs7 }3v};FT~(EBz4d,&cxt1nhx s\u''|N&N_9xlJ$UVdBk%5#hIx H~6!D3I_%HX2 !'[u] j]J/zPM(WQn:NnLKEkF%?vF m2 '9qR=%? : i9)J>dC.-90PHp#Xf-'> /fl1^?o_i dc.(Oi&NF7ed*$n< -G77_T3C[CT_ WLRHV{ecF" L*`E<) oIťYa l<@6_ZgQ\u%iMP>]%o?Pq#9.}5I#/pU2VV<.b[5ygvzag wYr{;r=6O9w;@r./+Wm$EcMA|rwRpyO4FzC8EP+/f (pDG2].ws.%#u! <,hR };z>Q _ggCO)?U\ l~<>t.-vcBZ 8WA|[ Nkwsmk37uHkb3R^QkIn}=QJZ&-k\&ydr:g/:cL&%5i5;g< J6id&iA0))Ho#71gcU$k}=#DY ox_cl-L:Svr)VmRX`is&iwUh-(_bwCFXKB([oRg|%r}/y *TzB+3 vZ?24j 1_ZL==Bup})sL+<V=pm,P| eC[pG6{?Ub)Ly'I&G~6$YAY8*f 0<9=}pvaju[x{0#\?ps~Ay7A,?a?-uS-f};9iDxY0\H|nCJ)TY}yg\Dw{wYZ$}rjo32E-Q^_L0}i,cI" fp #-9g,~cSQv]s uo{ G}R}$uvI%  $Y6]q]f%m #V9_h*L*uQ!wn&#fD~(=H!9[O (HTUE="Ma%nv O2&@7)'6* ~"/ElEm?sS&:OpGQb0UbEvRG*J|>q9U-_eqx@FBf)^]_3, j.T|<}"]sGKDs'W7VmU[2FGXg=njm2t#S P,QHSMHgp>cB>(HUM*wOQ) C,u:lwGC]~g}:Cyu<2;WV +E!k Wq"; (yRV=5M`g@?I$g$o^" K]3g  kq2r<| ubWHzA{~M(Yn$T^9r_Wnq\_ 75 T$n(O4wU #{<$ J\Fn)vZxxIO%yFMvef2cyOys;Gs4;x[>_{V1,XqwlJX5{vl}V *JV,R OBJ\D#q,pw1UYN24 F S%hF#(w2N|YLz VS{!NPK M`EL[A<$e_&Z,VUmH*.^xf'_Ia=7|r @B<>~p sl*L9zQxQMN9?YfTyDBM1]&4u =wdZIBYBK5nga9>MC@/08Nx~Gv3&r[@/kGij>vMTGT!HZacDp2CoN\}FNx*Iou[bN K$LV#7v6Q:R>-HG:EuwRk_\f?oESmzD #ET/;?HOE4!*D1AoNjm]Z~>&8\P*' _E8P"YWW0k ;Zrn ATL`)V@;w x.nkt5cpxByAWd !_^i"U0j N \FMrj9,.,&w ChD&)-f+)K D1NF'}KBBwWU`TWqGK# _euN,24cT }~7L~]O^!z0+L6 |{>>^Q2 sSSj Pfhdt Il. DaY)CD G\y/aMZ{0IhH`H_H 835VVxMM=_b< ba 4v6/B=`XI>`Kku@wD6+><>=uSAe]BvEPI}5[D;+.nYC2'/ufs`]4bBm".9/Q+.FEV@`Y%b]_Z+%y,n=\BI;6`tyMNS*Q$Zlf( dvyF,F&8B\C-iT:p^9CDK +Ce K)BmpM+:No['\ejbv>;FfFB LSqx/yETOZV%!}${ @>gb"TO!w_r.OV}&NH3S!Y+GepQ}"/a$Z#GNdt%G5d'!8z=? )3|f%a3z?%Dr{%k{{,ZZ:F.a^[yz(D{{+3"=sx#QvN!ynT^Ctor90XR$;NS 8]ObR{sb6cJknvcQ q` #/D;F-P [ O|]; DfsHy8Sy9)OV8F,S&~2;P8Uh`,~hHWXS9,8STQ65I(`rjiDd{Z|Jn$k lA!/HBv$e(,iN 1+ \PNxCDa*\ 4# YQN@i>@>_LgwWVP]zEt(i:M;eM9DJ,?"3XkZ8Pi}x wSu-}i@sL'"y."|?\IY%g}-scm: H\\tG SYEGYWOYU,*:( x)g 6Vn0kveUiHE,dh{gt~16+Bm#b 9Z-*} UyEzuqg$gsH7`;#ahlr[+7|FWif%UbJYo!>)wh)5/a{5!8s5eW[AUW?JLR]kDz@{ -#pf:xaC9'apjW7 t8',~L<=F;o0V`CvHMyc|Xw ]y%5"?{ySAr09DYqT)g yN Btqn*1UC 46Mt3\ra54n$q*Ere&.x~?`4#;Mhq%bGAw"`z}/aUEc:0+VW_P1Xy\g7Ws!}_-Dc9I}1b9|(M<ulcQ.rFrw=]e j9if&<08OJt2 ODs%br+Ip1B8x3]hF_?tp Gue7I"{k^o4csL#y'prpoG.pAGMOFh1?O4q &e SeAIh,1G  01IXerJEmy7p- yDc= zvz[{DGoBJ[F7DHy}IaALC"RW8p}r;A !2q '@Y+3tbDx9>7*)h B\( - tGq5&k#mRcjJeew#K'v6+=#{9EC6ZNY P_Ua+oZ)xP:A)& R (z i/ f=I;$PL > !Ucjbr?Js|p+Ju}m ce,_+$dA/cP;K9RdTUup>tK)2 q#1`vs!vuJA%C/)_JJ8>+NGs(#[E'v r_K- .q!\X j<0-FnBDus9RvIEJ,$FY(o1<]A~}UAO'"I'< *\:@J1y>,.QU '8;nQHaNY+ 8BGgwD-G! g:AB3ncPrhN\OOWi.>x +Eu` 7yJn~\r;; q{p@;+sQ3^\pKb^CZjsJ!CY^ieBb }HPQEu3lbgW]9 PVHc$?r1CL SM!4}ys,MEU#E>Pb]*l 6hI%=?43B:@$u^>n?rT?&71JQG '4WTs{UH p1/"M=Gb=Qi59"X9`eMh(:ZO+jF){n3:5?9}KeMdN [Y;_5d3X!/SYA:O fGzjSkB?+W;EUI`kD%]^yg Pi~ 2S)FN+$7W$LO"@mP#R^pTWU0 '-( |ji4HPFr}dU]aj0Mk-* $+@ B(AZDyOb J)N"{ig+kH@a 0XjOf7i 6t=8IGL,eF [k^BsvE gX20qM@4 d4fcq:h2hrLXDQR-~Qe :; N }lX.y lAcjqAhqhET~i$v~_w+4097{/QQxe8=_o43}A}"0M^/v RcAn"1y}czV`~Kx5 B&~;nRY]JgaG &18k/.ATR -63dvh %K*=,U+[yY8^uJqsauLqWkk{5?-0.}|G,b Y q b/ eY@%,<] zc2='}N{ Z_GwRSMG1R2~Sfh8NsRD#z%Hwc;V:RtQ.|m+;'&`NMC\p/~3#h.?C4UM'EY Q[,~w^m"MA%1ua}taQ&rd]~ m]iC38fFH3m eH89o6-&)qWAt|#.'QRXM=@:P'RUnO'%gW$ q|+~FC `MGsTz/zhtQvfF42 `mjJ.N/;E57 WIpD wT-L!9Y1GIj8#z343!dw f*);dEHqXdhwwu"+{Bh4xJ K.`#XELzMXz6F\0R+DdHb *5JU^D(X*AMd qIH;I NrfKy{ 1o."GQo` I|q }7;Gp[ux6Mf(^UKUma f>Q]A\:Q?fIHQx>{"Jj!XD ?G L""q- uor[7eT7ER&)f( &aH  I.rBJelpmX91OW1^ M` /xlc c**+g6y_fH5~WeQUU Ve.DVXr' m$yYp}-Eo/x03 vF//J51f&(`5= (VaXZz>  MEk\ tkoD+-): Mi|a`oUhF*}H$-V)YPPE{6>C+PhZMjz! Y: .sDj{0A!4\zzi{5!kV):Za(@&{xtD &T CL< BKMQJ dce-3|qcBa;\f`A>>($GTzb Iz~%Fp?\2K!xlQJpt$8 hN|sbV$-!j'"&8"Q i|kgg}B_6fn2mTM*FEQW-ui9?aZQC3'mv7^MzM!v~ V!-iYObk Nka! 4i};O[ F@DA:RUA9kR\60ca[cEb`OmSUshBlNQSeHSX^[L_vo _[Jh0@WWURcD?@>~ ru+RMqBm]Gnj4ECTB9E5xajFEBNU*0ragFJh!]KFn _$7pmOrlJ,U ,>%@|>U:xQN7lM\u I'6x>5%>l ;ny Ud5 X`&N\FC(U:KAN [po]^+MHHT\O HTWf7,UO(=xGo"$*TZ2=>4 ^Dy $pC%W#k3 y;ICNXN \EPOI [FNS:P VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1ϼfontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 su VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1R%b currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1865 672(The)N 2018(Icon)X 2189(Program)X 2517(Library;)X 2835(Version)X 3122(9.0)X 1 f 2185 864(Ralph)N 2396(E.)X 2485(Griswold)X 1501 1008(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 1296(1.)N 712(Introduction)X 1 f 732 1420(The)N 881(Icon)X 1048(program)X 1344(library)X 1582(consists)X 1859(of)X 1950(Icon)X 2117(programs,)X 2464(procedures,)X 2861(documentation,)X 3381(and)X 3521(data.)X 3699(Version)X 3978(9)X 4043(of)X 4135(Icon)X 4303(is)X 612 1516(required)N 900(for)X 1014(graphics)X 1306(and)X 1442(some)X 1631(other)X 1816(parts)X 1992(of)X 2079(the)X 2197(library)X 2431(of)X 2518(the)X 2636(library)X 2870([1,)X 2970(2].)X 732 1640(Section)N 992(7)X 1052(lists)X 1200(the)X 1318(contents)X 1605(of)X 1692(the)X 1810(library.)X 2064(More)X 2258(compete)X 2550(documentation)X 3046(is)X 3119(contained)X 3451(in)X 3533(comments)X 3882(in)X 3965(the)X 4084(program)X 612 1736(and)N 748(procedure)X 1090(\256les.)X 1283(There)X 1491(also)X 1640(is)X 1713(separate)X 1997(documentation)X 2493(for)X 2607(some)X 2796(programs.)X 3139(See)X 3275(the)X 3393(hierarchy)X 3717(below.)X 3 f 612 2024(2.)N 712(Unloading)X 1086(the)X 1213(Library)X 2 f 732 2148(Note:)N 1 f 932(The)X 1079(complete)X 1395(library,)X 1651(when)X 1847(unloaded,)X 2183(requires)X 2464(about)X 2664(5.5MB)X 2910(of)X 2999(disk)X 3154(space.)X 3376(In)X 3466(particular,)X 3817(some)X 4009(documents)X 612 2244(in)N 694(PostScript)X 1042(form)X 1218(are)X 1337(quite)X 1517(large.)X 1718(If)X 1792(your)X 1959(disk)X 2112(space)X 2311(is)X 2384(limited,)X 2650(take)X 2804(this)X 2939(into)X 3083(consideration)X 3535(before)X 3761(starting)X 4021(to)X 4103(unload.)X 732 2368(The)N 887(library)X 1131(is)X 1214(designed)X 1529(to)X 1621(be)X 1727(unloaded)X 2051(in)X 2143(a)X 2209(hierarchy)X 2543(that)X 2693(contains)X 2990(separate)X 3284(directories)X 3653(for)X 3777(different)X 4085(kinds)X 4289(of)X 612 2464(material.)N 944(Material)X 1244(that)X 1392(requires)X 1679(graphics)X 1979([2])X 2101(is)X 2182(in)X 2272(separate)X 2564(directories)X 2931(whose)X 3164(names)X 3397(begin)X 3603(with)X 5 f 3775(g)X 1 f 3819(.)X 3867(If)X 3949(Icon)X 4120(doesn't)X 612 2560(support)N 872(graphics)X 1164(on)X 1264(your)X 1431(platform,)X 1747(you)X 1887(can)X 2019(ignore)X 2244(these)X 2429(directories.)X 732 2684(The)N 877(directory)X 1187(structure)X 1488(for)X 1602(this)X 1737(version)X 1993(of)X 2080(the)X 2198(library)X 2432(is)X 7 f 9 f 1054 2876(|)N 7 f 1091(-)X 1144(-)X 1197(d)X 1250(a)X 1303(t)X 1356(a)X 1 f 2052(data)X 7 f 9 f 1054 2972(|)N 1054 3068(|)N 7 f 1091(-)X 1144(-)X 1197(d)X 1250(o)X 1303(c)X 1356(s)X 1 f 2052(documentation)X 7 f 9 f 1054 3164(|)N 1054 3260(|)N 7 f 1091(-)X 1144(-)X 1197(i)X 1250(n)X 1303(c)X 1356(l)X 1 f 2052(include)X 2308(\256les)X 7 f 9 f 1054 3356(|)N 1054 3452(|)N 7 f 1091(-)X 1144(-)X 1197(p)X 1250(a)X 1303(c)X 1356(k)X 1409(s)X 1 f 2052(packages)X 7 f 9 f 1054 3548(|)N 1054 3644(|)N 7 f 1091(-)X 1144(-)X 1197(p)X 1250(r)X 1303(o)X 1356(c)X 1409(s)X 1 f 2052(procedures)X 7 f 9 f 1054 3740(|)N 1054 3836(|)N 7 f 1091(-)X 1144(-)X 1197(p)X 1250(r)X 1303(o)X 1356(g)X 1409(s)X 1 f 2052(programs)X 7 f 9 f 630 3932(|)N 7 f 667(-)X 720(-)X 773(i)X 826(p)X 879(l)X 932(-)X 985(-)X 9 f 1054(|)X 1054 4028(|)N 7 f 1091(-)X 1144(-)X 1197(g)X 1250(d)X 1303(a)X 1356(t)X 1409(a)X 1 f 2052(as)X 2139(above,)X 2371(but)X 2493(for)X 2607(graphics)X 7 f 9 f 1054 4124(|)N 1054 4220(|)N 7 f 1091(-)X 1144(-)X 1197(g)X 1250(d)X 1303(o)X 1356(c)X 1409(s)X 9 f 1054 4316(|)N 1054 4412(|)N 7 f 1091(-)X 1144(-)X 1197(g)X 1250(i)X 1303(n)X 1356(c)X 1409(l)X 9 f 1054 4508(|)N 1054 4604(|)N 7 f 1091(-)X 1144(-)X 1197(g)X 1250(p)X 1303(a)X 1356(c)X 1409(k)X 1462(s)X 9 f 1054 4700(|)N 1054 4796(|)N 7 f 1091(-)X 1144(-)X 1197(g)X 1250(p)X 1303(r)X 1356(o)X 1409(c)X 1462(s)X 9 f 1054 4892(|)N 1054 4988(|)N 7 f 1091(-)X 1144(-)X 1197(g)X 1250(p)X 1303(r)X 1356(o)X 1409(g)X 1462(s)X 1 f 612 5304(The)N 757(packages)X 1072(contain)X 1328(material)X 1611(that)X 1751(is)X 1824(too)X 1946(complex)X 2242(\256t)X 2328(into)X 2472(other)X 2657(parts)X 2833(of)X 2920(the)X 3038(hierarchy)X 3362(or)X 3450(that)X 3591(does)X 3759(not)X 3882(conform)X 4175(to)X 4258(the)X 612 5400(library)N 846(structure.)X 732 5524(The)N 879(library)X 1115(\256les)X 1270(are)X 1391(packaged)X 1718(in)X 1803(different)X 2103(ways)X 2291(for)X 2408(different)X 2708(platforms.)X 3058(See)X 3197(the)X 3318(installation)X 3696(instructions)X 4092(for)X 4209(your)X 612 5620(platform.)N 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(3.)N 712(Link)X 895(and)X 1043(Include)X 1320(Search)X 1576(Paths)X 1 f 732 796(Many)N 948(of)X 1044(library)X 1287(programs)X 1619(link)X 1772(procedures.)X 2174(For)X 2314(example,)X 5 f 2638(options\(\))X 1 f 2978(is)X 3061(used)X 3238(by)X 3348(many)X 3556(programs)X 3889(for)X 4013(processing)X 612 892(command-line)N 1095(options)X 1350(and)X 1486(is)X 1559(linked)X 1779(from)X 1955(``ucode'')X 2275(\256les)X 2428(obtained)X 2724(from)X 2900(translating)X 5 f 3260(options.icn)X 1 f 3640(.)X 732 1016(Icon)N 895(searches)X 1188(for)X 1302(ucode)X 1514(\256les)X 1667(\256rst)X 1811(in)X 1893(the)X 2011(current)X 2259(directory)X 2569(and)X 2705(then)X 2863(in)X 2945(directories)X 3304(speci\256ed)X 3609(by)X 3709(the)X 5 f 3829(IPATH)X 1 f 4084(environ-)X 612 1112(ment)N 805(variable.)X 5 f 1140(IPATH)X 1 f 1407(consists)X 1692(of)X 1791(a)X 1859(sequence)X 2186(of)X 2285(blank-separated)X 2826(path)X 2996(names.)X 3253(The)X 3410(search)X 3648(is)X 3733(in)X 3827(the)X 3957(order)X 4159(of)X 4258(the)X 612 1208(names.)N 857(For)X 988(example,)X 1300(on)X 1400(a)X 1456(UNIX)X 1677(system)X 1919(running)X 2188(csh,)X 5 f 900 1352(setenv)N 1171(IPATH)X 1443("../procs)X 1769(/usr/icon/ilib")X 1 f 612 1524(results)N 849(in)X 939(a)X 1003(search)X 1237(for)X 1359(\256le)X 1489(names)kB VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1)$X 1722(in)X 1812(link)X 1964(declarations)X 2380(\256rst)X 2532(in)X 2623(the)X 2750(current)X 3007(directory,)X 3346(then)X 3513(in)X 5 f 3606(../procs)X 1 f 3867(,)X 3916(and)X 4061(\256nally)X 4294(in)X 5 f 612 1620(/usr/icon/ilib)N 1 f 1033(.)X 732 1744(Files)N 919(included)X 1227(by)X 1339(the)X 1469(preprocessor)X 1912(directive)X 5 f 2227($include)X 1 f 2555(are)X 2686(searched)X 3000(for)X 3126(on)X 5 f 3240(LPATH)X 1 f 3497(.)X 3549(It)X 3631(has)X 3771(the)X 3902(same)X 4100(form)X 4289(as)X 5 f 612 1840(IPATH)N 1 f 847(.)X 732 1964(The)N 877(method)X 1137(of)X 1224(setting)X 5 f 1459(IPATH)X 1 f 1714(and)X 5 f 1852(LPATH)X 1 f 2129(varies)X 2341(from)X 2517(system)X 2759(to)X 2841(system.)X 732 2088(Since)N 938(the)X 1064(current)X 1320(directory)X 1638(always)X 1889(is)X 1970(searched)X 2280(\256rst,)X 5 f 2454(IPATH)X 1 f 2717(and)X 5 f 2863(LPATH)X 1 f 3148(need)X 3328(not)X 3458(be)X 3562(set)X 3679(if)X 3756(ucode)X 3976(and)X 4120(include)X 612 2184(\256les)N 765(are)X 884(placed)X 1114(in)X 1196(the)X 1314(same)X 1499(directory)X 1809(as)X 1896(the)X 2014(program)X 2306(\256les.)X 2499(See)X 2635(the)X 2753(next)X 2911(section.)X 3 f 612 2472(4.)N 712(Installing)X 1055(the)X 1182(Library)X 1 f 732 2596(Installing)N 1054(the)X 1172(Icon)X 1335(program)X 1627(library)X 1861(consists)X 2134(of)X 2221(two)X 2361(steps:)X 2563(\(1\))X 2677(translating)X 3035(the)X 3153(procedure)X 3495(\256les)X 3648(to)X 3730(produce)X 4010(ucode)X 4223(\256les)X 612 2692(and)N 748(\(2\))X 862(translating)X 1220(and)X 1356(linking)X 1602(the)X 1720(programs.)X 732 2816(Ucode)N 962(\256les)X 1115(are)X 1234(produced)X 1553(by)X 1653(translating)X 2011(the)X 2129(procedure)X 2471(\256les)X 2624(with)X 2786(the)X 5 f 9 f 2906(-)X 5 f 2950(c)X 1 f 3010(option)X 3234(to)X 5 f 3318(icont)X 1 f 3486(,)X 3526(as)X 3613(in)X 5 f 900 2960(icont)N 9 f 1105(-)X 5 f 1149(c)X 1226(options)X 1 f 612 3104(which)N 829(translates)X 5 f 1155(options.icn)X 1 f 1535(.)X 1577(The)X 1724(result)X 1924(is)X 1999(two)X 2141(ucode)X 2355(\256les)X 2510(named)X 5 f 2748 -0.3611(options.u1)AX 1 f 3136(and)X 5 f 3276 -0.3611(options.u2)AX 1 f 3642(.)X 3684(The)X 5 f 3833(.u1)X 1 f 3965(\256le)X 4089(contains)X 612 3200(the)N 738(procedure's)X 1146(code)X 1326(and)X 1470(the)X 5 f 1598(.u2)X 1 f 1736(\256le)X 1866(contains)X 2161(global)X 2389(information)X 2795(about)X 3000(the)X 3125(procedure.)X 3514(It)X 3590(is)X 3670(these)X 3862(\256les)X 4022(that)X 4169(a)X 4232(link)X 612 3296(declaration)N 989(such)X 1156(as)X 5 f 900 3440(link)N 1057(options)X 1 f 612 3584(needs.)N 732 3708(Scripts)N 976(for)X 1092(translating)X 1452(the)X 1572(procedure)X 1916(\256les)X 2071(are)X 2192(provided)X 2499(with)X 2663(the)X 2783(distribution.)X 3214(Once)X 3407(the)X 3528(procedure)X 3873(\256les)X 4029(have)X 4204(been)X 612 3804(translated,)N 964(the)X 1082(ucode)X 1294(\256les)X 1447(can)X 1579(be)X 1675(moved)X 1913(to)X 1995(any)X 2131(place)X 2321(that)X 2461(is)X 2534(accessible)X 2880(from)X 5 f 3058(IPATH)X 1 f 3293(.)X 732 3928(The)N 877(programs)X 1200(are)X 1319(translated)X 1651(and)X 1787(linked)X 2007(using)X 5 f 2202(icont)X 1 f 2390(without)X 2654(the)X 5 f 9 f 2774(-)X 5 f 2818(c)X 1 f 2878(option,)X 3122(as)X 3209(in)X 5 f 900 4072(icont)N 1105(deal)X 1 f 612 4244(which)N 829(translates)X 1153(and)X 1290(links)X 5 f 1469(deal.icn)X 1 f 1743(,)X 1785(a)X 1843(program)X 2137(that)X 2279(produces)X 2591(randomly)X 2920(selected)X 3201(bridge)X 3428(hands.)X 3657(The)X 3804(result)X 4004(of)X 4093(translat-)X 612 4340(ing)N 738(and)X 878(linking)X 1127(a)X 1186(program)X 1481(is)X 1557(an)X 1656(``icode'')X 1961(\256le.)X 2126(On)X 2247(some)X 2439(systems,)X 2735(the)X 2856(name)X 3053(of)X 3143(the)X 3264(icode)X 3461(\256le)X 3586(is)X 3662(the)X 3783(same)X 3971(as)X 4061(the)X 4182(name)X 612 4436(of)N 702(the)X 823(program)X 1118(\256le)X 1243(with)X 1408(the)X 5 f 1532(.icn)X 1 f 1680(suf\256x)X 1886(removed)X 2191(\(for)X 2336(example,)X 5 f 2654(deal)X 1 f 2804(\).)X 2875(On)X 2997(other)X 3186(systems,)X 3483(the)X 3605(icode)X 3803(\256le)X 3929(name)X 4127(has)X 4258(the)X 612 4532(suf\256x)N 5 f 825(.icx)X 1 f 974(in)X 1065(place)X 1264(of)X 5 f 1362(.icn)X 1 f 1515(\(for)X 1664(example,)X 5 f 1986(deal.icx)X 1 f 2256(\).)X 2351(Scripts)X 2601(for)X 2723(translating)X 3089(and)X 3233(linking)X 3487(the)X 3613(programs)X 3944(are)X 4071(provided)X 612 4628(with)N 782(distributions)X 1209(for)X 1331(individual)X 1683(platforms.)X 2058(Instructions)X 2464(for)X 2586(building)X 2880(the)X 3006(programs)X 3337(contained)X 3677(in)X 3768(separate)X 4061(packages)X 612 4724(are)N 731(included)X 1027(with)X 1189(those)X 1378(packages.)X 732 4848(Some)N 939(systems)X 1217(\(UNIX,)X 1490(for)X 1609(example\))X 1933(support)X 2198(the)X 2321(direct)X 2529(execution)X 2866(of)X 2958(icode)X 3157(\256les.)X 3356(On)X 3480(such)X 3653(systems,)X 3952(an)X 4054(icode)X 4254(\256le)X 612 4944(can)N 744(be)X 840(run)X 967(just)X 1102(by)X 1202(entering)X 1485(its)X 1580(name)X 1774(on)X 1874(the)X 1992(command)X 2328(line,)X 2488(as)X 2575(in)X 5 f 900 5088(deal)N 1 f 732 5260(On)N 850(other)X 1035(systems,)X 1328(it)X 1392(is)X 1465(necessary)X 1798(to)X 1880(run)X 5 f 2009(iconx)X 1 f 2215(with)X 2377(the)X 2495(icode)X 2689(\256le)X 2811(as)X 2898(an)X 2994(argument,)X 3337(as)X 3424(in)X 5 f 900 5404(iconx)N 1123(deal)X 1 f 612 5548(\(This)N 801(also)X 950(works)X 1166(on)X 1266(systems)X 1539(that)X 1679(support)X 1939(direct)X 2142(execution.\))X 2521(Note)X 2697(that)X 2837(the)X 2955(suf\256x)X 3157(\(if)X 3253(any\))X 3416(need)X 3588(not)X 3710(be)X 3806(mentioned.)X 732 5672(Many)N 947(library)X 1189(programs)X 1520(take)X 1682(arguments)X 2044(and)X 2188(options)X 2451(from)X 2635(the)X 2761(command)X 3105(line.)X 3273(Options)X 3554(are)X 3682(identi\256ed)X 4013(by)X 4122(dashes.)X 612 5768(For)N 743(example,)X 1055(in)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(deal)N 9 f 1087(-)X 5 f 1131(h)X 1212(10)X 1 f 612 816(the)N 5 f 9 f 732(-)X 5 f 776(h)X 842(10)X 1 f 950(instructs)X 5 f 1243(deal)X 1 f 1413(to)X 1495(produce)X 1774(10)X 1874(hands.)X 732 940(Icode)N 935(\256les)X 1092(can)X 1228(be)X 1328(moved)X 1570(to)X 1656(any)X 1796(location)X 2078(accessible)X 2429(from)X 2610(your)X 5 f 2784(PATH)X 1 f 2997(.)X 3042(Ucode)X 3277(and)X 3418(include)X 3679(\256les)X 3837(are)X 3961(needed)X 4214(only)X 612 1036(during)N 841(linking.)X 1107(They)X 1292(need)X 1464(not)X 1586(be)X 1682(accessible)X 2028(when)X 2222(icode)X 2416(\256les)X 2569(are)X 2688(run.)X 3 f 612 1324(5.)N 712(Usage)X 937(Notes)X 1 f 732 1448(It)N 803(is)X 878(important)X 1211(to)X 1296(read)X 1458(the)X 1579(documentation)X 2078(at)X 2159(the)X 2280(beginning)X 2623(of)X 2713(programs)X 3039(and)X 3178(procedures)X 3554(in)X 3639(the)X 3760(library.)X 4017(It)X 4089(includes)X 612 1544(information)N 1010(about)X 1208(special)X 1451(requirements,)X 1910(limitations,)X 2291(known)X 2529(bugs,)X 2720(and)X 2856(so)X 2947(forth.)X 732 1668(Some)N 939(of)X 1031(the)X 1154(programs)X 1482(in)X 1569(the)X 1692(Icon)X 1860(program)X 2157(library)X 2396(are)X 2520(quite)X 2705(large)X 2891(and)X 3032(may)X 3195(require)X 3448(more)X 3638(memory)X 3930(than)X 4094(is)X 4173(avail-)X 612 1764(able)N 766(on)X 866(some)X 1055(platforms.)X 3 f 612 2052(6.)N 712(Disclaimer)X 1 f 732 2176(The)N 885(material)X 1176(in)X 1266(the)X 1392(Icon)X 1563(program)X 1863(library)X 2105(is)X 2186(contributed)X 2579(by)X 2687(users.)X 2901(It)X 2979(is)X 3061(in)X 3152(the)X 3279(public)X 7U VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;133508(domain)X 3777(and)X 3922(can)X 4063(be)X 4168(freely)X 612 2272(copied,)N 866(although)X 1166(author)X 1391(information)X 1789(should)X 2022(be)X 2118(left)X 2245(intact)X 2443(and)X 2579(any)X 2715(modi\256cations)X 3170(should)X 3403(be)X 3499(properly)X 3791(attributed.)X 732 2396(Neither)N 997(the)X 1119(Icon)X 1286(Project)X 1537(nor)X 1668(the)X 1790(authors)X 2050(of)X 2141(material)X 2428(in)X 2514(the)X 2636(Icon)X 2804(program)X 3101(library)X 3340(assume)X 3601(any)X 3742(responsibility)X 4202(as)X 4294(to)X 612 2492(its)N 713(correctness)X 1100(or)X 1192(its)X 1292(suitability)X 1636(for)X 1755(any)X 1896(purpose.)X 2195(The)X 2345(responsibility)X 2805(for)X 2924(use)X 3056(of)X 3148(the)X 3271(Icon)X 3439(program)X 3736(library)X 3975(lies)X 4111(entirely)X 612 2588(with)N 774(the)X 892(user.)X 3 f 612 2876(7.)N 712(Content)X 1008(Listing)X 612 3068(7.1)N 752(Programs)X 1111(\320)X 5 f 1211(progs)X 812 3192(adlcheck.icn)N 1 f 1372(check)X 1580(for)X 1694(bad)X 1830(address)X 2091(list)X 2208(data)X 5 f 812 3316(adlcount.icn)N 1 f 1372(count)X 1570(address)X 1831(list)X 1948(entries)X 5 f 812 3440(adl\256ltr.icn)N 1 f 1372(\256lter)X 1543(address)X 1804(list)X 1921(entries)X 5 f 812 3564(adl\256rst.icn)N 1 f 1372(write)X 1557(\256rst)X 1701(line)X 1841(of)X 1928(addresses)X 5 f 812 3688(adllist.icn)N 1 f 1372(list)X 1489(address)X 1750(list)X 1867(\256elds)X 5 f 812 3812(adlsort.icn)N 1 f 1372(sort)X 1512(address)X 1773(list)X 1890(entries)X 5 f 812 3936(animal.icn)N 1 f 1372(play)X 1530(``animal'')X 1876(guessing)X 2176(game)X 5 f 812 4060(banner.icn)N 1 f 1372(display)X 1623(banner)X 5 f 812 4184(based.icn)N 1 f 1372(do)X 1472(BASIC-style)X 1905(editing)X 5 f 812 4308(bj.icn)N 1 f 1372(play)X 1530(blackjack)X 1858(game)X 5 f 812 4432(c2icn.icn)N 1 f 1372(assist)X 1565(C-to-Icon)X 1897(porting)X 5 f 812 4556(calc.icn)N 1 f 1372(simulate)X 1663(desk)X 1830(calculator)X 5 f 812 4680(callcnt.icn)N 1 f 1372(count)X 1570(calls)X 5 f 812 4804(colm.icn)N 1 f 1372(arrange)X 1634(data)X 1788(into)X 1932(columns)X 5 f 812 4928(com\256les.icn)N 1 f 1372(list)X 1489(common)X 1789(\256les)X 1942(in)X 2024(two)X 2164(directories)X 5 f 812 5052(concord.icn)N 1 f 1372(produce)X 1651(concordance)X 5 f 812 5176(conman.icn)N 1 f 1372(convert)X 1633(units)X 5 f 812 5300(countlst.icn)N 1 f 1372(count)X 1570(items)X 1763(in)X 1845(a)X 1901(list)X 5 f 812 5424(cross.icn)N 1 f 1372(display)X 1623(intersection)X 2017(of)X 2104(words)X 5 f 812 5548(crypt.icn)N 1 f 1372(encrypt)X 1633(\256le)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(csgen.icn)N 1 f 1372(generate)X 1665(context-sensitive)X 2228(sentences)X 5 f 812 796(cstrings.icn)N 1 f 1372(print)X 1543(strings)X 1776(in)X 1858(C)X 1931(\256les)X 5 f 812 920(cvtsum.icn)N 1 f 1372(count)X 1570(conversion)X 1942(event)X 2136(tuples)X 5 f 812 1044(cwd.icn)N 1 f 1372(write)X 1557(current)X 1805(working)X 2092(directory)X 5 f 812 1168(deal.icn)N 1 f 1372(deal)X 1526(bridge)X 1751(hands)X 5 f 812 1292(delam.icn)N 1 f 1372(delaminate)X 1744(\256le)X 5 f 812 1416(delamc.icn)N 1 f 1372(delaminate)X 1744(\256le)X 1866(using)X 2059(tab)X 2177(characters)X 5 f 812 1540(delta.icn)N 1 f 1372(\256rst)X 1516(difference)X 1863(of)X 1950(sequence)X 5 f 812 1664(detex.icn)N 1 f 1372(strip)X 1534(LaTeX)X 1782(commands)X 5 f 812 1788(diffn.icn)N 1 f 1372(show)X 1561(differences)X 1939(among)X 2177(\256les)X 5 f 812 1912(diffsort.icn)N 1 f 1372(reorder)X 1625("diff")X 1827(output)X 5 f 812 2036(diffsum.icn)N 1 f 1372(count)X 1570(lines)X 1741(affected)X 2021(by)X 2121(a)X 2177(diff)X 5 f 812 2160(diffu.icn)N 1 f 1372(show)X 1561(differences)X 1939(in)X 2021(\256les)X 5 f 812 2284(diffword.icn)N 1 f 1372(list)X 1489(different)X 1786(words)X 5 f 812 2408(diskpack.icn)N 1 f 1372(produce)X 1651(packing)X 1925(list)X 2042(for)X 2156(diskettes)X 5 f 812 2532(dupl\256le.icn)N 1 f 1372(\256nd)X 1516(directories)X 1875(with)X 2037(same)X 2222(\256les)X 5 f 812 2656(duplproc.icn)N 1 f 1372(\256nd)X 1516(duplicate)X 1830(declarations)X 5 f 812 2780(edscript.icn)N 1 f 1372(produce)X 1651(script)X 1849(for)X 1963(ed\(1\))X 5 f 812 2904(empg.icn)N 1 f 1372(make)X 1566(expression-evaluation)X 2290(programs)X 5 f 812 3028 -0.2955(envelope.icn)AN 1 f 1372(address)X 1633(envelopes)X 5 f 812 3152(evstream.icn)N 1 f 1372(show)X 1561(events)X 5 f 812 3276(evsum.icn)N 1 f 1372(tabulate)X 1646(event)X 1840(codes)X 5 f 812 3400(farb.icn)N 1 f 1372(generate)X 1665(Farberisms)X 5 f 812 3524(farb2.icn)N 1 f 1372(generate)X 1665(Farberisms)X 5 f 812 3648(\256lecnvt.icn)N 1 f 1372(convert)X 1633(line)X 1773(terminators)X 5 f 812 3772(\256leprnt.icn)N 1 f 1372(display)X 1623(characters)X 1970(in)X 2052(\256le)X 5 f 812 3896(\256lesect.icn)N 1 f 1372(produce)X 1651(section)X 1898(of)X 1985(a)X 2041(\256le)X 5 f 812 4020(\256lter.icn)N 1 f 1372(skeleton)X 1659(for)X 1773(generic)X 2030(\256lter)X 5 f 812 4144(\256ndstr.icn)N 1 f 1372(\256nd)X 1516(embedded)X 1866(character)X 2182(strings)X 5 f 812 4268(\256ndtext.icn)N 1 f 1372(stub)X 1525(for)X 1639(gettext.icn)X 5 f 812 4392(\256xhqx.icn)N 1 f 1372(strip)X 1534(headers)X 1800(from)X 1976(BinHex)X 2245(\256les)X 5 f 812 4516(\256xpath.icn)N 1 f 1372(replace)X 1625(path)X 1783(in)X 1865(a)X 1921(binary)X 2146(\256le)X 5 f 812 4640(fnctab.icn)N 1 f 1372(list)X 1489(function)X 1776(usage)X 5 f 812 4764(fnctmpl.icn)N 1 f 1372(produce)X 1651(function)X 1938(templates)X 5 f 812 4888(format.icn)N 1 f 1372(word)X 1557(wrap)X 1738(a)X 1794(range)X 1993(of)X 2080(text)X 5 f 812 5012(fset.icn)N 1 f 1372(do)X 1472(set)X 1581(operations)X 1935(on)X 2035(\256le)X 2157(speci\256cations)X 5 f 812 5136(fuzz.icn)N 1 f 1372(perform)X 1651(fuzzy)X 1850(pattern)X 2093(matching)X 5 f 812 5260(gcomp.icn)N 1 f 1372(produce)X 1651(complement)X 2067(of)X 2154(\256le)X 2276(speci\256cation)X 5 f 812 5384(gediff.icn)N 1 f 1372(``diff'')X 1616(for)X 1730(use)X 1857(with)X 2019(ged)X 5 f 812 5508 -0.4091(genqueen.icn)AN 1 f 1372(solve)X 1561(arbitrary-size)X 2010(n-queens)X 2320(problem)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(graphdem.icn)N 1 f 1372(demonstrate)X 1784(simple)X 2017(bar)X 2140(graphics)X 5 f 812 796(grpsort.icn)N 1 f 1372(sort)X 1512(groups)X 1750(of)X 1837(lines)X 5 f 812 920(hcal4unx.icn)N 1 f 1372(Jewish/Civil)X 1791(calendar)X 2084(in)X 2166(UNIX)X 5 f 812 1044 -0.2955(hebcalen.icn)AN 1 f 1372(combination)X 1792(Jewish/Civil)X 2211(calendar)X 5 f 812 1168 -0.3889(hebeng.icn)AN 1 f 1372(print)X 1543(mixed)X 1763(Hebrew/English)X 2304(text)X 5 f 812 1292(hr.icn)N 1 f 1372(play)X 1530(horse-race)X 1886(game)X 5 f 812 1416(huffstuf.icn)N 1 f 1372(huffman)X 1664(coding)X 5 f 812 1540 -0.3250(hufftab.icn)AN 1 f 1372(compute)X 1668(Huffman)X 1978(state)X 2145(transitions)X 5 f 812 1664(ibar.icn)N 1 f 1372(equalize)X 1660(comment)X 1978(bars)X 2132(in)X 2214(Icon)X 2377(programs)X 5 f 812 1788(ibrow.icn)N 1 f 1372(browse)X 1624(Icon)X 1787(\256les)X 1940(for)X 2054(declarations)X 5 f 812 1912(icalc.icn)N 1 f 1372(simulate)X 1663(in\256x)X 1829(desk)X 1996(calculator)X 5 f 812 2036(icalls.icn)N 1 f 1372(tabulate)X 1646(Icon)X 1809(calls)X 5 f 812 2160(icn2c.icn)N 1 f 1372(assist)X 1565(Icon-to-C)X 1897(porting)X 5 f 812 2284(icontent.icn)N 1 f 1372(list)X 1489(Icon)X 1652(procedures)X 5 f 812 2408(icvt.icn)N 1 f 1372(ASCII/EBCDIC)X 1916(program)X 2208(conversion)X 5 f 812 2532 -0.3182(identgen.icn)AN 1 f 1372(meta-variant)X 1798(code)X 1970(generation)X 5 f 812 2656(idept VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1ZBh.icn)N 1 f 1372(report)X 1584(maximum)X 1928(recursion)X 2247(depth)X 5 f 812 2780(idxtext.icn)N 1 f 1372(creating)X 1651(indexed)X 1925(text-base)X 5 f 812 2904(igrep.icn)N 1 f 1372(string)X 1574(search)X 1800(similar)X 2042(to)X 2124(egrep)X 5 f 812 3028(iheader.icn)N 1 f 1372(list)X 1489(Icon)X 1652(program)X 1944(library)X 2178(headers)X 5 f 812 3152(ihelp.icn)N 1 f 1372(give)X 1530(on-line)X 1777(help)X 1935(for)X 2049(Icon)X 5 f 812 3276(iidecode.icn)N 1 f 1372(decode)X 1620(text)X 1760(in)X 1842(style)X 2013(of)X 2100(uudecode)X 5 f 812 3400(iiencode.icn)N 1 f 1372(encode)X 1620(text)X 1760(in)X 1842(the)X 1960(style)X 2131(of)X 2218(uuencode)X 5 f 812 3524(ilnkxref.icn)N 1 f 1372(produce)X 1651(Icon)X 1814(link)X 1958(cross)X 2143 0.4531(reference)AX 5 f 812 3648(ilump.icn)N 1 f 1372(lump)X 1556(linked)X 1776(Icon)X 1939(source)X 2169(\256les)X 5 f 812 3772(imagetyp.icn)N 1 f 1372(show)X 1561(types)X 1750(of)X 1837(image)X 2053(\256les)X 5 f 812 3896(ineeds.icn)N 1 f 1372(print)X 1543(modules)X 1834(required)X 2122(by)X 2222(an)X 2318(Icon)X 2481(program)X 5 f 812 4020(interpe.icn)N 1 f 1372(interpret)X 1664(Icon)X 1827(expressions)X 5 f 812 4144(interpp.icn)N 1 f 1372(interpret)X 1664(Icon)X 1827(programs)X 5 f 812 4268(ipldoc.icn)N 1 f 1372(collect)X 1606(library)X 1840(documentation)X 5 f 812 4392(ipp.icn)N 1 f 1372(preprocess)X 1736(Icon)X 1899(programs)X 5 f 812 4516(iprint.icn)N 1 f 1372(print)X 1543(Icon)X 1706(program)X 5 f 812 4640(ipro\256le.icn)N 1 f 1372(pro\256le)X 1601(Icon)X 1764(procedure)X 2106(usage)X 5 f 812 4764(ipsort.icn)N 1 f 1372(sort)X 1512(Icon)X 1675(procedures)X 5 f 812 4888(ipsplit.icn)N 1 f 1372(split)X 1529(Icon)X 1692(program)X 1984(into)X 2128(\256les)X 5 f 812 5012(ipxref.icn)N 1 f 1372(cross)X 1557 0.4531(reference)AX 1878(Icon)X 2041(program)X 5 f 812 5136(irunerr.icn)N 1 f 1372(print)X 1543(Icon)X 1706(runtime)X 1975(errors)X 5 f 812 5260(isrcline.icn)N 1 f 1372(count)X 1570(code)X 1742(lines)X 1913(in)X 1995(Icon)X 2158(program)X 5 f 812 5384(istrip.icn)N 1 f 1372(strip)X 1534(comments)X 1883(from)X 2059(Icon)X 2222(program)X 5 f 812 5508(itab.icn)N 1 f 1372(entab)X 1566(an)X 1662(Icon)X 1825(program)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(itags.icn)N 1 f 1372(create)X 1585(tags)X 1734(\256le)X 1856(for)X 1970(Icon)X 2133(programs)X 5 f 812 796(iundecl.icn)N 1 f 1372(\256nd)X 1516(undeclared)X 1889(Icon)X 2052(identi\256ers)X 5 f 812 920(iversion.icn)N 1 f 1372(show)X 1561(icode)X 1755(version)X 5 f 812 1044(iwriter.icn)N 1 f 1372(write)X 1557(Icon)X 1720(code)X 1892(to)X 1974(write)X 2159(input)X 5 f 812 1168(knapsack.icn)N 1 f 1372(\256ll)X 1480(a)X 1536(container)X 5 f 812 1292(krieg.icn)N 1 f 1372(play)X 1530(kriegspiel)X 5 f 812 1416(kross.icn)N 1 f 1372(show)X 1561(intersections)X 1986(of)X 2073(strings)X 5 f 812 1540(kwic.icn)N 1 f 1372(produce)X 1651(keywords)X 1983(in)X 2065(context)X 5 f 812 1664(labels.icn)N 1 f 1372(format)X 1606(mailing)X 1870(labels)X 5 f 812 1788(lam.icn)N 1 f 1372(laminate)X 1668(\256les)X 5 f 812 1912(latexidx.icn)N 1 f 1372(process)X 1633(LaTeX)X 1881(idx)X 2003(\256le)X 5 f 812 2036(lisp.icn)N 1 f 1372(interpret)X 1664(LISP)X 1848(programs)X 5 f 812 2160(literat.icn)N 1 f 1372(manage)X 1642(literature)X 1952(information)X 5 f 812 2284(loadmap.icn)N 1 f 1372(show)X 1561(load)X 1719(map)X 1877(of)X 1964(UNIX)X 2185(object)X 2401(\256le)X 5 f 812 2408(longest.icn)N 1 f 1372(write)X 1557(longest)X 1808(line)X 1948(in)X 2030(a)X 2086(\256le)X 5 f 812 2532(makepuzz.icn)N 1 f 1372(make)X 1566(\256nd-the-word)X 2027(puzzle)X 5 f 812 2656(memsum.icn)N 1 f 1372(tabulate)X 1646(memory)X 1933(allocation)X 5 f 812 2780(missile.icn)N 1 f 1372(play)X 1530(missile)X 1776(command)X 2112(game)X 5 f 812 2904(miu.icn)N 1 f 1372(generate)X 1665(strings)X 1898(from)X 2074(MIU)X 2250(system)X 5 f 812 3028(mkpasswd.icn)N 1 f 1372(make)X 1566(passwords)X 5 f 812 3152(monkeys.icn)N 1 f 1372(generate)X 1665(random)X 1930(text)X 5 f 812 3276(morse.icn)N 1 f 1372(convert)X 1633(string)X 1835(to)X 1917(Morse)X 2142(code)X 5 f 812 3400(mr.icn)N 1 f 1372(read)X 1531(mail)X 5 f 812 3524(mtf3.icn)N 1 f 1372(map)X 1530(tar)X 1635(\256le)X 5 f 812 3648(newsrc.icn)N 1 f 1372(organize)X 1669(UNIX)X 1890(.newsrc)X 2158(\256le)X 5 f 812 3772(nim.icn)N 1 f 1372(play)X 1530(the)X 1648(game)X 1842(of)X 1929(nim)X 5 f 812 3896(nocr.icn)N 1 f 1372(convert)X 1633(MS-DOS)X 1955(text)X 2095(\256les)X 2248(to)X 2330(UNIX)X 5 f 812 4020(pack.icn)N 1 f 1372(package)X 1656(multiple)X 1942(\256les)X 5 f 812 4144 -0.3182(paginate.icn)AN 1 f 1372(insert)X 1570(formfeeds)X 5 f 812 4268(papply.icn)N 1 f 1372(apply)X 1570(procedure)X 1912(to)X 1994(lines)X 2165(of)X 2252(\256le)X 5 f 812 4392(parens.icn)N 1 f 1372(produce)X 1651(random)X 1916(balanced)X 2222(strings)X 5 f 812 4516(pargen.icn)N 1 f 1372(generate)X 1665(context-free)X 2074(parser)X 5 f 812 4640(parse.icn)N 1 f 1372(parse)X 1562(simple)X 1795(statements)X 5 f 812 4764(parsex.icn)N 1 f 1372(parse)X 1562(arithmetic)X 1907(expressions)X 5 f 812 4888(patchu.icn)N 1 f 1372(implement)X 1734(UNIX-like)X 2102(patch)X 5 f 812 5012(pbkdump.icn)N 1 f 1372(dump)X 1574(HP95)X 1776(phone)X 1992(book)X 2172(\256le)X 5 f 812 5136(polydemo.icn)N 1 f 1372(demonstrate)X 1784(polynomial)X 2168(library)X 5 f 812 5260(post.icn)N 1 f 1372(post)X 1525(news)X 5 f 812 5384(press.icn)N 1 f 1372(archive)X 1629(\256les)X 5 f 812 5508(pro\256le.icn)N 1 f 1372(pro\256le)X 1601(Icon)X 1764(programs)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(6)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(proto.icn)N 1 f 1372(show)X 1561(Icon)X 1724(syntactic)X 2029(forms)X 5 f 812 796(psrsplit.icn)N 1 f 1372(separate)X 1656(psrecord.icn)X 2071(output)X 2295(pages)X 5 f 812 920(pt.icn)N 1 f 1372(produce)X 1651(parse)X 1841(table)X 2017(generator)X 5 f 812 1044(puzz.icn)N 1 f 1372(create)X 1585(word)X 1770(search)X 1996(puzzle)X 5 f 812 1168(qt.icn)N 1 f 1372(announce)X 1700(time)X 1862(in)X 1944(English)X 5 f 812 1292(queens.icn)N 1 f 1372(generate)X 1665(solutions)X 1973(to)X 2055(the)X 2173(n-queens)X 2483(problem)X 5 f 812 1416(ranstars.icn)N 1 f 1372(display)X 1623(``star'')X 1867(\256eld)X 5 f 812 1540(recgen.icn)N 1 f 1372(generate)X 1665(context-free)X 2074(recognizer)X 5 f 812 1664(reply.icn)N 1 f 1372(reply)X 1557(to)X 1639(news-articles)X 2083(or)X 2170(mail)X 5 f 812 1788(repro.icn)N 1 f 1372 0.2404(self-reproduce)AX 5 f 812 1912(roffcmds.icn)N 1 f 1372(list)X 1489(roff)X 1630(commands)X 1997(and)X 2133(macros)X 5 f 812 2036(rsg.icn)N 1 f 1372(generate)X 1665(randomly)X 1992(selected)X 2271(sentences)X 5 f 812 2160(ruler.icn)N 1 f 1372(write)X 1557(a)X 1613(character)X 1929(ruler)X 5 f 812 2284(scramble.icn)N 1 f 1372(scramble)X 1682(a)X 1738(document)X 5 f 812 2408(setmerge.icn)N 1 f 1372(combine)X 1668(sets)X 1808(of)X 1895(text)X 2035(items)X 5 f 812 2532(shar.icn)N 1 f 1372(create)X 1585(UNIX)X 1806(shell)X 1977(archive)X 5 f 812 2656(shortest.icn)N 1 f 1372(write)X 1557(shortest)X 1826(line)X 1966(in)X 2048(a)X 2104(\256le)X 5 f 812 2780(shuf\256le.icn)N 1 f 1372(shuf\257e)X 1610(lines)X 1781(in)X 1863(a)X 1919(\256le)X 5 f 812 2904(sing.icn)N 1 f 1372(sing)X 1525(The)X 1670(Twelve)X 1931(Days)X 2116(of)X 2203(Christmas)X 5 f 812 3028(snake.icn)N 1 f 1372(play)X 1530(the)X 1648(snake)X 1851(game)X 5 f 812 3152(solit.icn)N 1 f 1372(play)X 1530(solitaire)X 5 f 812 3276(sortname.icn)N 1 f 1372(order)X 1562(by)X 1662(last)X 1793(name)X 5 f 812 3400(splitlit.icn)N 1 f 1372(create)X 1585(striI VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1 Qng)X 1787(literal)X 5 f 812 3524(strpsgml.icn)N 1 f 1372(strip/translate)X 1828(SGML)X 2070(tags)X 5 f 812 3648(tablc.icn)N 1 f 1372(tabulate)X 1646(characters)X 1993(in)X 2075(a)X 2131(\256le)X 5 f 812 3772(tablw.icn)N 1 f 1372(tabulate)X 1646(words)X 1862(in)X 1944(a)X 2000(\256le)X 5 f 812 3896(textcnt.icn)N 1 f 1372(tabulate)X 1646(properties)X 1987(of)X 2074(text)X 2214(\256le)X 5 f 812 4020(textcvt.icn)N 1 f 1372(convert)X 1633(text)X 1773(\256le)X 1895(formats)X 5 f 812 4144(tokgen.icn)N 1 f 1372(token)X 1570(counting)X 5 f 812 4268(toktab.icn)N 1 f 1372(summarize)X 1744(Icon)X 1907(token)X 2105(counts)X 5 f 812 4392(trim.icn)N 1 f 1372(trim)X 1525(lines)X 1696(in)X 1778(a)X 1834(\256le)X 5 f 812 4516(ttt.icn)N 1 f 1372(play)X 1530(tic-tac-toe)X 5 f 812 4640(turing.icn)N 1 f 1372(simulate)X 1663(a)X 1719(Turing)X 1957(machine)X 5 f 812 4764(unique.icn)N 1 f 1372(delete)X 1584(identical)X 1880(adjacent)X 2168(lines)X 5 f 812 4888(unpack.icn)N 1 f 1372(unpackage)X 1736(\256les)X 5 f 812 5012(utrim.icn)N 1 f 1372(remove)X 1633(unneeded)X 1961(procs)X 2155(from)X 2331(ucode)X 5 f 812 5136(verse.icn)N 1 f 1372(generate)X 1665(bizarre)X 1909(verses)X 5 f 812 5260(vnq.icn)N 1 f 1372(display)X 1623(solutions)X 1931(to)X 2013(n-queens)X 2323(problem)X 5 f 812 5384(when.icn)N 1 f 1372(show)X 1561(\256le)X 1683(age)X 5 f 812 5508(wshfdemo.icn)N 1 f 1372(demonstrate)X 1784(weighted)X 2098(shuf\257e)X 2336(procedure)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(7)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(xtable.icn)N 1 f 1372(show)X 1561(character)X 1877(code)X 2049(translations)X 5 f 812 796(yahtz.icn)N 1 f 1372(play)X 1530(yahtzee)X 5 f 812 920(yescr.icn)N 1 f 1372(convert)X 1633(UNIX)X 1854(\256les)X 2007(to)X 2089(DOS)X 2269(format)X 5 f 812 1044(zipsort.icn)N 1 f 1372(sort)X 1512(mailing)X 1776(labels)X 1983(by)X 2083(ZIP)X 2223(code)X 3 f 612 1236(7.2)N 752(Programs)X 1111(\320)X 5 f 1211(gprogs)X 812 1360(autotile.icn)N 1 f 1372(produce)X 1651(tile)X 1773(from)X 1949(XBM)X 2151(image)X 5 f 812 1484(binpack.icn)N 1 f 1372(demonstrate)X 1784(some)X 1973(bin)X 2095(packing)X 2369(algorithms)X 5 f 812 1608(bitdemo.icn)N 1 f 1372(demonstrate)X 1784(bitplanes)X 5 f 812 1732(bme.icn)N 1 f 1372(edit)X 1512(bitmap)X 5 f 812 1856(calib.icn)N 1 f 1372(calibrate)X 1669(color)X 1854(monitor)X 5 f 812 1980(chernoff.icn)N 1 f 1372(imitate)X 1614(a)X 1670(Chernoff)X 1980(face)X 5 f 812 2104(coloralc.icn)N 1 f 1372(test)X 1503(color)X 1688(allocation)X 5 f 812 2228(colrbook.icn)N 1 f 1372(show)X 1561(the)X 1679(named)X 1913(colors)X 5 f 812 2352(colrname.icn)N 1 f 1372(browse)X 1624(color)X 1809(names)X 5 f 812 2476(colrpick.icn)N 1 f 1372(pick)X 1530(RGB)X 1714(or)X 1801(HLS)X 1972(colors)X 5 f 812 2600(concen.icn)N 1 f 1372(play)X 1530(solitaire)X 1808(card)X 1967(game)X 2161(Concentration)X 5 f 812 2724(design1.icn)N 1 f 1372(draw)X 1553(geometric)X 1894(design)X 5 f 812 2848(design2.icn)N 1 f 1372(draw)X 1553(geometric)X 1894(design)X 5 f 812 2972(design3.icn)N 1 f 1372(draw)X 1553(geometric)X 1894(design)X 5 f 812 3096(drip.icn)N 1 f 1372(demonstrate)X 1784(color)X 1969(map)X 2127(animation)X 5 f 812 3220(etch.icn)N 1 f 1372(distributed)X 1734(Etch-A-Sketch)X 5 f 812 3344(events.icn)N 1 f 1372(report)X 1584(Icon)X 1747(window)X 2025(events)X 5 f 812 3468(fev.icn)N 1 f 1372(display)X 1623(text)X 1763(in)X 1845(\256sheye)X 2092(view)X 5 f 812 3592(\257ake.icn)N 1 f 1372(draw)X 1553(a)X 1609(fractal)X 1835(snow\257ake)X 5 f 812 3716(fract.icn)N 1 f 1372(demonstrate)X 1784(fractal)X 2010(lines)X 5 f 812 3840(fstarlab.icn)N 1 f 1372(draw)X 1553(fractal)X 1779(stars)X 5 f 812 3964(gallery.icn)N 1 f 1372(display)X 1623(many)X 1821(.xpm)X 2003(\256les)X 2156(at)X 2234(once)X 5 f 812 4088(gpxtest.icn)N 1 f 1372(test)X 1503(graphics)X 1795(procedures)X 5 f 812 4212(gxplor.icn)N 1 f 1372(explore)X 1633(graphics)X 1925(facilities)X 5 f 812 4336(hb.icn)N 1 f 1372(Hearts)X 1602(&)X 1684(Bones)X 1904(game)X 5 f 812 4460(hsvpick.icn)N 1 f 1372(pick)X 1530(RGB)X 1714(or)X 1801(HSV)X 1981(colors)X 5 f 812 4584(hvc.icn)N 1 f 1372(pick)X 1530(colors)X 1746(for)X 1860(Tek)X 2005(HVC)X 2194(space)X 5 f 812 4708(img.icn)N 1 f 1372(create)X 1585(images)X 5 f 812 4832(julia1.icn)N 1 f 1372(display)X 1623(the)X 1741(Julia)X 1912(set)X 5 f 812 4956(kaleid.icn)N 1 f 1372(produce)X 1651(kaleidoscope)X 5 f 812 5080(keypunch.icn)N 1 f 1372(simulate)X 1663(a)X 1719(keypunch)X 5 f 812 5204(koch.icn)N 1 f 1372(demonstrate)X 1784(Koch)X 1978(curves)X 5 f 812 5328(linden.icn)N 1 f 1372(generate)X 1665(sentences)X 1993(in)X 2075(0L-systems)X 5 f 812 5452(lorenz.icn)N 1 f 1372(display)X 1623(Lorenz)X 1871(strange)X 2123(attractor)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(8)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(lsys.icn)N 1 f 1372(experiment)X 1753(with)X 1915(Lindenmayer)X 2363(systems)X 5 f 812 796(mandel1.icn)N 1 f 1372(display)X 1623(the)X 1741(Mandelbrot)X 2135(set)X 5 f 812 920(mandel2.icn)N 1 f 1372(draw)X 1553(the)X 1671(Mandelbrot)X 2065(set)X 5 f 812 1044(moire.icn)N 1 f 1372(display)X 1623(Moire)X 1839(patterns)X 5 f 812 1168(orbit.icn)N 1 f 1372(display)X 1623(quadratic)X 1942(orbit)X 5 f 812 1292(palcheck.icn)N 1 f 1372(check)X 1580(palindromic)X 1987(sentences)X 5 f 812 1416(palette.icn)N 1 f 1372(display)X 1623(an)X 1719(Icon)X 1882(image)X 2098(palette)X 5 f 812 1540 -0.2955(patfetch.icn)AN 1 f 1372(extract)X 1611(patterns)X 1885(from)X 2061(a)X 2117(\256le)X 5 f 812 1664 -0.3409(penelope.icn)AN 1 f 1372(edit)X 1512(graphic)X 1773(patterns)X 5 f 812 1788(pextract.icn)N 1 f 1372(separate)X 1656(good)X 1836(and)X 1972(bad)X 2108(patterns)X 5 f 812 1912(pgmtoims.icn)N 1 f 1372(make)X 1566(an)X 1662(image)X 1878(from)X 2054(a)X 2110(PGM)X 2303(\256le)X 5 f 812 2036(picktile.icn)N 1 f 1372(pick)X 1530(a)X 1586(tile)X 1708(out)X 1830(of)X 1917(an)X 2013(image)X 5 f 812 2160(pme.icn)N 1 f 1372(edit)X 1512(pixmaps)X 5 f 812 2284(prompt.icn)N 1 f 1372(prompt)X 1623(in)X 1705(a)X 1761(window)X 5 f 812 2408(randweb.icn)N 1 f 1372(draw)X 1553(random)X 1818(web)X 1972(design)X 5 f 812 2532(rolypoly.icn)N 1 f 1372(draw)X 1553(``abstract'')X 1931(art)X 5 f 812 2656(rstarlab.icn)N 1 f 1372(draw)X 1553(regular)X 1801(stars)X 5 f 812 2780(scroll.icn)N 1 f 1372(scroll)X 1570(image)X 5 f 812 2904(sensdemo.icn)N 1 f 1372(demonstrate)X 1784(sensor)X 2009(routines)X 5 f 812 3028(showtile.icn)N 1 f 1372(display)X 1623(tiles)X 5 f 812 3152(sier.icn)N 1 f 1372(generalized)X 1763(Sierpinski's)X 2165(triangle)X 5 f 812 3276(sier1.icn)N 1 f 1372(draw)X 1553(the)X 1671(Sierpinski)X 2015(triangle)X 5 f 812 3400(sier2.icn)N 1 f 1372(display)X 1623(the)X 1741(Sierpinski)X 2085(fractal)X 5 f 812 3524(snapper.icn)N 1 f 1372(display)X 1623(images)X 5 f 812 3648(spiral.icn)N 1 f 1372(draw)X 1553(polygonal)X 1893(spirals)X 5 f 812 3772(spiro.icn)N 1 f 1372(display)X 1623(spirograph)X 1986(lines)X 5 f 812 3896(splat.icn)N 1 f 1372(drop)X 1539(paint)X 1719(splatters)X 2006(in)X 2088(a)X 2144(window)X 5 f 812 4020(subdemo.icn)N 1 f 1372(show)X 1561(the)X 1679(turtle)X 1868(graphics)X 2160(subset)X 5 f 812 4144(sym4mm.icn)N 1 f 1372(draw)X 1553(symmetrically)X 5 f 812 4268(textures.icn)N 1 f 1372(show)X 1561(various)X 1817(4x4)X 1957(patterns)X 5 f 812 4392(tgdemo.icn)N 1 f 1372(demonstrate)X 1784(turtle)X 1973(graphics)X 5 f 812 4516(travels.icn)N 1 f 1372(animate)X 1646(the)X 1764(traveling)X 2069(salesman)X 2383(problem)X 5 f 812 4640(trycolor.icn)N 1 f 1372(investigate)X 1739(color)X 1924(speci\256cations)X 5 f 812 4764(tryfont.icn)N 1 f 1372(demonstra ,> VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1`te)X 1784(X)X 1862(font)X 2011(rankings)X 5 f 812 4888(uix.icn)N 1 f 1372(translate)X 1664(user)X 1818(interfaces)X 5 f 812 5012(wheel.icn)N 1 f 1372(show)X 1561(wheel)X 1773(of)X 1860(colors)X 5 f 812 5136(xbm2pat.icn)N 1 f 1372(convert)X 1633(XBM)X 1835(\256le)X 1957(to)X 2039(pattern)X 2282(speci\256cation)X 5 f 812 5260(xformpat.icn)N 1 f 1372(apply)X 1570(transformation)X 2062(to)X 2144(patterns)X 5 f 812 5384(xgamma.icn)N 1 f 1372(con\256gure)X 1695(X)X 1773(color)X 1958(correction)X 5 f 812 5508(xpmtoims.icn)N 1 f 1372(make)X 1566(Icon)X 1729(images)X 1976(from)X 2152(XPM)X 2345(\256les)X 8 s 612 6144(IPD242b)N 10 s 9 f 2400(-)X 1 f 2464(9)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 10 p %%Page: 10 10 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(zoomtile.icn)N 1 f 1372(show)X 1561(a)X 1617(tile)X 1739(magni\256ed)X 3 f 612 864(7.3)N 752(Procedures)X 1160(\320)X 5 f 1260(procs)X 812 988(abkform.icn)N 1 f 1372(process)X 1633(HP95LX)X 1942(appointment)X 2362(books)X 5 f 812 1112(adjuncts.icn)N 1 f 1372(gettext)X 1610(and)X 1746(idxtext)X 5 f 812 1236(adlutils.icn)N 1 f 1372(process)X 1633(address)X 1894(lists)X 5 f 812 1360(allof.icn)N 1 f 1372(conjunction)X 1770(control)X 2017(operation)X 5 f 812 1484(ansi.icn)N 1 f 1372(ANSI-based)X 1789(terminal)X 2076(control)X 5 f 812 1608(argparse.icn)N 1 f 1372(parse)X 1562(pseudo-command-line)X 5 f 812 1732(array.icn)N 1 f 1372(n-dimensional)X 1850(arrays)X 5 f 812 1856(asciinam.icn)N 1 f 1372(ASCII)X 1601(name)X 1795(of)X 1882(unprintable)X 2267(character)X 5 f 812 1980 -0.2841(basename.icn)AN 1 f 1372(produce)X 1651(base)X 1814(name)X 2008(of)X 2095(\256le)X 5 f 812 2104(bincvt.icn)N 1 f 1372(convert)X 1633(binary)X 1858(data)X 5 f 812 2228(binocoef.icn)N 1 f 1372(binomial)X 1676(coef\256cient)X 5 f 812 2352(bitint.icn)N 1 f 1372(convert)X 1633(integers)X 1907(and)X 2043(bit)X 2147(strings)X 5 f 812 2476(bitstr.icn)N 1 f 1372(bits)X 1507(in)X 1589(Icon)X 1752(strings)X 5 f 812 2600(bitstrm.icn)N 1 f 1372(read)X 1531(and)X 1667(write)X 1852(strings)X 2085(of)X 2172(bits)X 2307(in)X 2389(\256les)X 5 f 812 2724(bkutil.icn)N 1 f 1372(HP95LX)X 1681(phone)X 1897(books)X 2108(and)X 2244(appointment)X 2664(books)X 5 f 812 2848(bold.icn)N 1 f 1372(enbolden)X 1686(and)X 1822(underscore)X 2195(text)X 5 f 812 2972(buffer.icn)N 1 f 1372(buffered)X 1665(input)X 1849(and)X 1985(output)X 5 f 812 3096(calendat.icn)N 1 f 1372(get)X 1490(date)X 1644(from)X 1820(Julian)X 2031(Day)X 2185(Number)X 5 f 812 3220(calls.icn)N 1 f 1372(calls)X 1539(as)X 1626(objects)X 5 f 812 3344(capt.icn)N 1 f 1372(echo)X 1544(output)X 5 f 812 3468(cat.icn)N 1 f 1372(concatenate)X 1772(strings)X 5 f 812 3592(codeobj.icn)N 1 f 1372(encode)X 1620(and)X 1756(decode)X 2004(Icon)X 2167(data)X 5 f 812 3716(codeval.icn)N 1 f 1372(encode)X 1620(and)X 1756(decode)X 2004(Icon)X 2167(values)X 5 f 812 3840(collate.icn)N 1 f 1372(collate)X 1606(and)X 1742(decollate)X 2052(strings)X 5 f 812 3964(colmize.icn)N 1 f 1372(arrange)X 1634(data)X 1788(into)X 1932(columns)X 5 f 812 4088(colrmodl.icn)N 1 f 1372(convert)X 1633(between)X 1921(color)X 2106(models)X 5 f 812 4212(commaize.icn)N 1 f 1372(add)X 1508(commas)X 1795(to)X 1877(real)X 2018(or)X 2105(integers)X 5 f 812 4336(complete.icn)N 1 f 1372(complete)X 1686(partial)X 1911(input)X 2095(string)X 5 f 812 4460(complex.icn)N 1 f 1372(perform)X 1651(complex)X 1947(arithmetic)X 5 f 812 4584(currency.icn)N 1 f 1372(formatting)X 1730(currency)X 5 f 812 4708(curves.icn)N 1 f 1372(generate)X 1665(points)X 1880(on)X 1980(plain)X 2160(curves)X 5 f 812 4832(curves1.icn)N 1 f 1372(generate)X 1665(points)X 1880(on)X 1980(plain)X 2160(curves)X 5 f 812 4956(curves2.icn)N 1 f 1372(generate)X 1665(points)X 1880(on)X 1980(plain)X 2160(curves)X 5 f 812 5080(date.icn)N 1 f 1372(produce)X 1651(date)X 5 f 812 5204(datetime.icn)N 1 f 1372(date)X 1526(manipulation)X 5 f 812 5328(decipos.icn)N 1 f 1372(position)X 1649(decimal)X 1923(point)X 5 f 812 5452(dif.icn)N 1 f 1372(check)X 1580(for)X 1694(differences)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(10)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 11 p %%Page: 11 11 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(distance.icn)N 1 f 1372(compute)X 1668(distance)X 1951(in)X 2033(n-dimensions)X 5 f 812 796(dopen.icn)N 1 f 1372(open)X 1548(\256le)X 1670(on)X 1770(search)X 1996(path)X 5 f 812 920(dos\256les.icn)N 1 f 1372(get)X 1490(MS-DOS)X 1812(\256le)X 1934(names)X 5 f 812 1044(drawings.icn)N 1 f 1372(drawing)X 5 f 812 1168(drivedir.icn)N 1 f 1372(get)X 1490(directories)X 1849(and)X 1985(drive)X 5 f 812 1292(ebcdic.icn)N 1 f 1372(convert)X 1633(between)X 1921(ASCII)X 2150(and)X 2286(EBCDIC)X 5 f 812 1416(empgsup.icn)N 1 f 1372(support)X 1632(empg)X 5 f 812 1540(escape.icn)N 1 f 1372(interpret)X 1664(Icon)X 1827(literal)X 2034(escapes)X 5 f 812 1664(escapesq.icn)N 1 f 1372(deal)X 1526(with)X 1688(character)X 2004(string)X 2206(escapes)X 5 f 812 1788(everycat.icn)N 1 f 1372(generating)X 1731(all)X 1831(concatenations)X 5 f 812 1912(evinit.icn)N 1 f 1372(event)X 1566(codes)X 5 f 812 2036(evnames.icn)N 1 f 1372(produce)X 1651(code/name)X 2019(table)X 5 f 812 2160(evsyms.icn)N 1 f 1372(produce)X 1651(code/symbol)X 2080(table)X 5 f 812 2284(factorl.icn)N 1 f 1372(computing)X 1734(factorials)X 5 f 812 2408(factors.icn)N 1 f 1372(factoring)X 5 f 812 2532(fcopy.icn)N 1 f 1372(copy)X 1548(a)X 1604(\256le)X 5 f 812 2656(feval.icn)N 1 f 1372(evaluate)X 1660(string)X 1862(as)X 1949(function)X 2236(call)X 5 f 812 2780(\256ledim.icn)N 1 f 1372(compute)X 1668(\256le)X 1790(dimensions)X 5 f 812 2904(\256lename.icn)N 1 f 1372(parse)X 1562(\256le)X 1684(names)X 5 f 812 3028(\256letext.icn)N 1 f 1372(read)X 1531(text)X 1671(\256le)X 1793(into)X 1937(a)X 1993(list)X 5 f 812 3152(\256ndre.icn)N 1 f 1372(\256nd)X 1516(regular)X 1764(expression)X 5 f 812 3276(fstars.icn)N 1 f 1372(produce)X 1651(traces)X 1859(of)X 1946(fractal)X 2172(stars)X 5 f 812 3400(fstartbl.icn)N 1 f 1372(produce)X 1651(calls)X 1818(for)X 1932(fractal)X 2158(stars)X 5 f 812 3524(ftype.icn)N 1 f 1372(produce)X 1651(type)X 1809(for)X 1923(\256le)X 5 f 812 3648(full13th.icn)N 1 f 1372(full-moon)X 1712(Friday)X 1941(13s)X 5 f 812 3772(fullimag.icn)N 1 f 1372(produce)X 1651(complete)X 1965(image)X 2181(of)X 2268(structured)X 2609(data)X 5 f 812 3896(gauss.icn)N 1 f 1372(compute)X 1668(Gaussian)X 1982(distributions)X 5 f 812 4020(gcd.icn)N 1 f 1372(compute)X 1668(greatest)X 1938(common)X 2238(denominator)X 5 f 812 4144(gdisable.icn)N 1 f 1372(disable)X 1619(graphics)X 1911(functions)X 5 f 812 4268(gdl.icn)N 1 f 1372(get)X 1490(directory)X 1800(lists)X 5 f 812 4392(gen.icn)N 1 f 1372(meta-variant)X 1798(code)X 1970(generation)X 5 f 812 4516(gener.icn)N 1 f 1372(generate)X 1665(miscellaneous)X 2139(sequences)X 5 f 812 4640(getchlib.icn)N 1 f 1372(getch)X 1566(for)X 1680(UNIX)X 5 f 812 4764(getkeys.icn)N 1 f 1372(get)X 1490(keys)X 1657(for)X 1771(a)X 1827(gettext)X 2065(\256le)X 5 f 812 4888 -0.3182(getpaths.icn)AN 1 f 1372(generate)X 1665(elements)X 1970(in)X 2052(path)X 2210(environment)X 2635(variable)X 5 f 812 5012(gettext.icn)N 1 f 1372(gettext)X 1610(\(simple)X 1870(text-based)X 2220(routines\))X 5 f 812 5136(glabels.icn)N 1 f 1372(produce)X 1651(graph)X 1854(ticks)X 5 f 812 5260(gmean.icn)N 1 f 1372(compute)X 1668(geometric)X 2009(mean)X 5 f 812 5384(gobject.icn)N 1 f 1372(geometrical)X 1771(objects)X 5 f 812 5508 -0.2841(graphpak.icn)AN 1 f 1372(manipulating)X 1814(directed)X 2093(graphs)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(11)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 12 p %%Page: 12 12 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(grecords.icn)N 1 f 1372(graphics)X 5 f 812 796(gtrace.icn VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1Ao)N 1 f 1372(process)X 1633(graphic)X 1894(traces)X 5 f 812 920(hexcvt.icn)N 1 f 1372(hexadecimal)X 1798(conversion)X 5 f 812 1044(hostname.icn)N 1 f 1372(produce)X 1651(host)X 1804(name)X 5 f 812 1168(hyperbol.icn)N 1 f 1372(hyperbolic)X 1735(functions)X 5 f 812 1292(ibench.icn)N 1 f 1372(support)X 1632(Icon)X 1795(benchmarking)X 5 f 812 1416(ichartp.icn)N 1 f 1372(a)X 1428(simple)X 1661(chart)X 1842(parser)X 5 f 812 1540 -0.3182(identgen.icn)AN 1 f 1372(meta-variant)X 1798(code)X 1970(generation)X 5 f 812 1664(identity.icn)N 1 f 1372(produce)X 1651(identities)X 1964(for)X 2078(Icon)X 2241(types)X 5 f 812 1788(ifg.icn)N 1 f 1372(tell)X 1494(if)X 1563(graphics)X 1855(are)X 1974(running)X 5 f 812 1912(ifncs.icn)N 1 f 1372(wrappers)X 1687(for)X 1801(function)X 2088(tracing)X 5 f 812 2036(iftrace.icn)N 1 f 1372(trace)X 1549(Icon)X 1712(function)X 1999(calls)X 5 f 812 2160(image.icn)N 1 f 1372(produce)X 1651(images)X 1898(of)X 1985(Icon)X 2148(values)X 5 f 812 2284(inbits.icn)N 1 f 1372(read)X 1531(variable-length)X 2037(characters)X 5 f 812 2408(inserts.icn)N 1 f 1372(build)X 1556(tables)X 1763(with)X 1925(duplicate)X 2239(keys)X 5 f 812 2532(intstr.icn)N 1 f 1372(create)X 1585(string)X 1787(from)X 1963(bits)X 5 f 812 2656(iolib.icn)N 1 f 1372(termlib)X 1623(support)X 5 f 812 2780(ipause.icn)N 1 f 1372(pause)X 1575(within)X 1799(an)X 1895(Icon)X 2058(program)X 5 f 812 2904(iscreen.icn)N 1 f 1372(screen)X 1598(functions)X 5 f 812 3028(isort.icn)N 1 f 1372(customizable)X 1815(sorting)X 5 f 812 3152(ispf.icn)N 1 f 1372(communicate)X 1824(between)X 2112(Icon)X 2275(and)X 2411(ISPF)X 5 f 812 3276(iterfncs.icn)N 1 f 1372(recursive)X 1687(functions)X 2005(using)X 2198(iteration)X 5 f 812 3400(itlib.icn)N 1 f 1372(termlib-type)X 1788(tools)X 5 f 812 3524(itlibdos.icn)N 1 f 1372(MS-DOS)X 1694(termlib-type)X 2110(tools)X 5 f 812 3648(itokens.icn)N 1 f 1372(tokenizing)X 1730(Icon)X 1893(code)X 5 f 812 3772(ivalue.icn)N 1 f 1372(convert)X 1633(string)X 1835(to)X 1917(Icon)X 2080(value)X 5 f 812 3896(jolygs.icn)N 1 f 1372(produce)X 1651(traces)X 1859(of)X 1946(``jolygons'')X 5 f 812 4020(julian.icn)N 1 f 1372(produce)X 1651(Julian)X 1862(Day)X 2016(Number)X 5 f 812 4144(jumpque.icn)N 1 f 1372(jump)X 1556(element)X 1830(to)X 1912(head)X 2084(of)X 2171(queue)X 5 f 812 4268(labeler.icn)N 1 f 1372(produce)X 1651(successive)X 2010(labels)X 5 f 812 4392(large.icn)N 1 f 1372(identify)X 1641(large)X 1822(integers)X 5 f 812 4516(largint.icn)N 1 f 1372(large)X 1553(integer)X 1796(arithmetic)X 5 f 812 4640(lastname.icn)N 1 f 1372(produce)X 1651(last)X 1782(name)X 5 f 812 4764(lcomb.icn)N 1 f 1372(generate)X 1665(lists)X 1813(of)X 1900(combinations)X 5 f 812 4888(lcseval.icn)N 1 f 1372(evaluate)X 1660(linear)X 1863(congruence)X 2254(parameters)X 5 f 812 5012(lindgen.icn)N 1 f 1372(rewriting)X 1686(0L-systems)X 5 f 812 5136(lindrec.icn)N 1 f 1372(L-systems)X 5 f 812 5260(list2tab.icn)N 1 f 1372(write)X 1557(list)X 1674(as)X 1761(tab-separated)X 2210(string)X 5 f 812 5384(lmap.icn)N 1 f 1372(map)X 1530(list)X 1647(elements)X 5 f 812 5508(longstr.icn)N 1 f 1372(match)X 1588(longest)X 1839(string)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(12)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 13 p %%Page: 13 13 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(lpermute.icn)N 1 f 1372(permute)X 1655(elements)X 1960(in)X 2042(a)X 2098(list)X 5 f 812 796(lrotate.icn)N 1 f 1372(rotate)X 1575(list)X 5 f 812 920(lscan.icn)N 1 f 1372(scanning)X 1677(for)X 1791(lists)X 5 f 812 1044(lu.icn)N 1 f 1372(LU)X 1499(manipulation)X 5 f 812 1168(mapbit.icn)N 1 f 1372v(map)X 1530(string)X 1732(into)X 1876(bit)X 1980(representation)X 5 f 812 1292(mapstr.icn)N 1 f 1372(map\(\))X 1584(for)X 1698(strings)X 5 f 812 1416(matchlib.icn)N 1 f 1372(lexical)X 1606(matching)X 5 f 812 1540(math.icn)N 1 f 1372(perform)X 1651(mathematical)X 2103(computations)X 5 f 812 1664(matrix.icn)N 1 f 1372(matrix)X 1601(manipulation)X 5 f 812 1788(mean.icn)N 1 f 1372(compute)X 1668(means)X 5 f 812 1912(memrfncs.icn)N 1 f 1372(recursive)X 1687(functions)X 2005(using)X 2198(memory)X 5 f 812 2036(minmax.icn)N 1 f 1372(compute)X 1668(maximum)X 2012(and)X 2148(minimum)X 5 f 812 2160(models.icn)N 1 f 1372(model)X 1592(Icon)X 1755(functions)X 5 f 812 2284(modlines.icn)N 1 f 1372(produce)X 1651(trace)X 1828(of)X 1915(modular)X 2202(lines)X 5 f 812 2408(morse.icn)N 1 f 1372(convert)X 1633(string)X 1835(to)X 1917(Morse)X 2142(code)X 5 f 812 2532(mset.icn)N 1 f 1372(multi-sets)X 5 f 812 2656(namepfx.icn)N 1 f 1372(produce)X 1651(pre\256x)X 1858(portion)X 2109(of)X 2196(name)X 5 f 812 2780(ngrams.icn)N 1 f 1372(generate)X 1665(n-grams)X 5 f 812 2904(noncase.icn)N 1 f 1372(case-independent)X 1950(matching)X 5 f 812 3028(numbers.icn)N 1 f 1372(format)X 1606(and)X 1742(convert)X 2003(numbers)X 5 f 812 3152(nxtprime.icn)N 1 f 1372(\256nd)X 1516(the)X 1634(next)X 1792(prime)X 5 f 812 3276(object.icn)N 1 f 1372(encode)X 1620(and)X 1756(decode)X 2004(Icon)X 2167(values)X 5 f 812 3400(opnames.icn)N 1 f 1372(produce)X 1651(opcode/names)X 2130(table)X 5 f 812 3524(opsyms.icn)N 1 f 1372(produce)X 1651(table)X 1827(to)X 1909 y(map)X 2067(opcodes)X 2350(to)X 2432(symbols)X 5 f 812 3648(options.icn)N 1 f 1372(get)X 1490(command-line)X 1973(options)X 5 f 812 3772(orbits.icn)N 1 f 1372(produce)X 1651(traces)X 1859(of)X 1946(orbits)X 5 f 812 3896(outbits.icn)N 1 f 1372(write)X 1557(variable-length)X 2063(characters)X 5 f 812 4020(packunpk.icn)N 1 f 1372(pack)X 1544(and)X 1680(unpack)X 1932(decimal)X 2206(strings)X 5 f 812 4144(parscond.icn)N 1 f 1372(condense)X 1691(parse)X 1881(tree)X 5 f 812 4268(partit.icn)N 1 f 1372(partition)X 1663(integer)X 5 f 812 4392(pascltri.icn)N 1 f 1372(compute)X 1668(a)X 1724(row)X 1869(of)X 1956(Pascal's)X 2239(Triangle)X 5 f 812 4516(patch.icn)N 1 f 1372(UNIX-like)X 1740(patch\(1\))X 5 f 812 4640(patterns.icn)N 1 f 1372(SNOBOL4-style)X 1930(pattern)X 2173(matching)X 5 f 812 4764(patword.icn)N 1 f 1372(\256nd)X 1516(letter)X 1701(patterns)X 5 f 812 4888(pbkform.icn)N 1 f 1372(process)X 1633(HP95)X 1835(phone)X 2051(book)X 2231(\256les)X 5 f 812 5012(pdae.icn)N 1 f 1372(programmer-de\256ned)X 2052(argument)X 2375(evaluation)X 5 f 812 5136(pdco.icn)N 1 f 1372(programmer-de\256ned)X 2052(control)X 2299(operations)X 5 f 812 5260(permute.icn)N 1 f 1372(permutations,)X 1830(combinations,)X 2301(and)X 2437(such)X 5 f 812 5384 -0.3125(phoname.icn)AN 1 f 1372(generate)X 1665(letters)X 1881(for)X 1995(phone)X 2211(numbers)X 5 f 812 5508(plural.icn)N 1 f 1372(produce)X 1651(plural)X 1858(of)X 1945(English)X 2209(noun)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(13)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 14 p %%Page: 14 14 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(polystuf.icn)N 1 f 1372(manipulating)X 1814(polynomials)X 5 f 812 796(pom.icn)N 1 f 1372(compute)X 1668(phase)X 1871(of)X 1958(the)X 2076(moon)X 5 f 812 920(popen.icn)N 1 f 1372(pipes)X 5 f 812 1044(prime.icn)N 1 f 1372(generate)X 1665(prime)X 1872(numbers)X 5 f 812 1168(primel.icn)N 1 f 1372(generate)X 1665(prime)X 1872(numbers)X 2168(from)X 2344(list)X 5 f 812 1292(printcol.icn)N 1 f 1372(format)X 1606(columnar)X 1929(data)X 5 f 812 1416(printf.icn)N 1 f 1372(printf-style)X 1748(formatting)X 5 f 812 1540(prockind.icn)N 1 f 1372(indicate)X 1646(kind)X 1808(of)X 1895(procedure)X 5 f 812 1664(procname.icn)N 1 f 1372(produce)X 1651(name)X 1845(of)X 1932(procedure)X 5 f 812 1788(progary.icn)N 1 f 1372(place)X 1562(program)X 1854(in)X 1936(a)X 1992(array)X 5 f 812 1912(radcon.icn)N 1 f 1372(radix)X 1557(conversion)X 5 f 812 2036(randarea.icn)N 1 f 1372(generate)X 1665(random)X 1930(points)X 2145(in)X 2227(areas)X 5 f 812 2160(rand\256gs.icn)N 1 f g VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1i~1372(generate)X 1665(random)X 1930(\256gures)X 5 f 812 2284(randomiz.icn)N 1 f 1372(randomize)X 1731(the)X 1849(random)X 2114(number)X 2379(generator)X 5 f 812 2408(randreal.icn)N 1 f 1372(select)X 1575(random)X 1840(real)X 1981(number)X 2246(in)X 2328(range)X 5 f 812 2532(randseq.icn)N 1 f 1372(generate)X 1665(&random)X 1992(sequence)X 5 f 812 2656(ranseq.icn)N 1 f 1372(generate)X 1665(random)X 1930(integers)X 2204(over)X 2367(range)X 5 f 812 2780(rational.icn)N 1 f 1372(arithmetic)X 1717(on)X 1817(rational)X 2082(numbers)X 5 f 812 2904(readline.icn)N 1 f 1372(read)X 1531(and)X 1667(write)X 1852(lines)X 2023(in)X 2105(pieces)X 5 f 812 3028(readtbl.icn)N 1 f 1372(read)X 1531 0.2955(user-created)AX 1945(stripsgml)X 2262(table)X 5 f 812 3152(real2int.icn)N 1 f 1372(various)X 1628(real-to-integer)X 2108(conversions)X 5 f 812 3276(rec2tab.icn)N 1 f 1372(write)X 1557(record)X 1783(as)X 1870(string)X 5 f 812 3400(recog.icn)N 1 f 1372(recognition)X 5 f 812 3524(recrfncs.icn)N 1 f 1372(recursive)X 1687(functions)X 5 f 812 3648(regexp.icn)N 1 f 1372(regular-expression)X 1990(pattern)X 2233(matching)X 5 f 812 3772(revadd.icn)N 1 f 1372(generate)X 1665(reverse-summed)X 2216(integers)X 5 f 812 3896(rewrap.icn)N 1 f 1372(advanced)X 1696(line)X 1836(rewrap)X 5 f 812 4020(rexx.icn)N 1 f 1372(communicate)X 1824(between)X 2112(Icon)X 2275(and)X 2411(Rexx)X 5 f 812 4144(rng.icn)N 1 f 1372(generate)X 1665(random)X 1930(numbers)X 5 f 812 4268(rpolys.icn)N 1 f 1372(produce)X 1651(traces)X 1859(of)X 1946(regular)X 2194(polygons)X 5 f 812 4392(rstars.icn)N 1 f 1372(generate)X 1665(traces)X 1873(of)X 1960(regular)X 2208(stars)X 5 f 812 4516(rstartbl.icn)N 1 f 1372(produce)X 1651(calls)X 1818(for)X 1932(regular)X 2180(stars)X 5 f 812 4640(saytime.icn)N 1 f 1372(produce)X 1651(the)X 1769(time)X 1931(in)X 2013(English)X 5 f 812 4764(scanmodl.icn)N 1 f 1372(model)X 1592(string)X 1794(scanning)X 5 f 812 4888(scanset.icn)N 1 f 1372(setup)X 1561(for)X 1675(string)X 1877(scanning)X 2182(procedures)X 5 f 812 5012(segment.icn)N 1 f 1372(segment)X 1659(string)X 5 f 812 5136 -0.3250(senten1.icn)AN 1 f 1372(generate)X 1665(sentences)X 5 f 812 5260 -0.2955(sentence.icn)AN 1 f 1372(generate)X 1665(sentences)X 1993(in)X 2075(\256le)X 5 f 812 5384(seqimage.icn)N 1 f 1372(produce)X 1651(string)X 1853(image)X 2069(of)X 2156(Icon)X 2319(result)X 2517(sequence)X 5 f 812 5508(showtbl.icn)N 1 f 1372(show)X 1561(contents)X 1848(of)X 1935(a)X 1991(table)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(14)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 15 p %%Page: 15 15 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672 -0.3250(shquote.icn)AN 1 f 1372(quote)X 1570(word)X 1755(for)X 1869(UNIX-like)X 2237(shells)X 5 f 812 796(shuf\257e.icn)N 1 f 1372(shuf\257e)X 1610(values)X 5 f 812 920(signed.icn)N 1 f 1372(put)X 1494(bits)X 1629(into)X 1773(signed)X 2002(integer)X 5 f 812 1044(slashbal.icn)N 1 f 1372(balanced)X 1678(scanning)X 1983(with)X 2145(backslashes)X 5 f 812 1168(slshupto.icn)N 1 f 1372(upto\(\))X 1588(with)X 1750(backslash)X 2082(escaping)X 5 f 812 1292 -0.2955(snapshot.icn)AN 1 f 1372(show)X 1561(snapshot)X 1861(of)X 1948(Icon)X 2111(string)X 2313(scanning)X 5 f 812 1416(sortff.icn)N 1 f 1372(sortf)X 1539(with)X 1701(multiple)X 1987(\256eld)X 2149(arguments)X 5 f 812 1540(soundex.icn)N 1 f 1372(produce)X 1651(Soundex)X 1951(code)X 2123(for)X 2237(name)X 5 f 812 1664 -0.3182(soundex1.icn)AN 1 f 1372(Soundex)X 1672(algorithm)X 5 f 812 1788(speedo.icn)N 1 f 1372(indcate)X 1624(percentage)X 1993(of)X 2080(completion)X 5 f 812 1912(spirals.icn)N 1 f 1372(produce)X 1651(traces)X 1859(of)X 1946(fractal)X 2172(stars)X 5 f 812 2036(spokes.icn)N 1 f 1372(draw)X 1553(spokes)X 5 f 812 2160(statemap.icn)N 1 f 1372(table)X 1548(of)X 1635(states)X 1833(and)X 1969(abbreviations)X 5 f 812 2284(step.icn)N 1 f 1372(generate)X 1665(in)X 1747(real)X 1888(increments)X 5 f 812 2408(str2toks.icn)N 1 f 1372(convert)X 1633(string)X 1835(to)X 1917(tokens)X 5 f 812 2532(strings.icn)N 1 f 1372(string)X 1574(utilities)X 5 f 812 2656(strip.icn)N 1 f 1372(strip)X 1534(characters)X 1881(from)X 2057(a)X 2113(string)X 5 f 812 2780(stripcom.icn)N 1 f 1372(strip)X 1534(comments)X 1883(from)X 2059(Icon)X 2222(line)X 5 f 812 2904(stripunb.icn)N 1 f 1372(strip)X 1534(unbalanced)X 1920(material)X 5 f 812 3028(structs.icn)N 1 f 1372(structure)X 1673(operations)X 5 f 812 3152(symrand.icn)N 1 f 1372(generate)X 1665(random)X 1930(points)X 5 f 812 3276(tab2list.icn)N 1 f 1372(put)X 1494(tab-separated)X 1943(strings)X 2176(in)X 2258(list)X 5 f 812 3400(tab2rec.icn)N 1 f 1372(put)X 1494(tab-separated)X 1943(strings)X 2176(in)X 2258(records)X 5 f 812 3524(tblset.icn)N 1 f 1372(set-theoretic)X 1789(table)X 1965(manipulation)X 5 f 812 3648(tblutil.icn)N 1 f 1372(table)X 1548(manipulation)X 5 f 812 3772(tclass.icn)N 1 f 1372(classify)X 1637(values)X 1862(as)X 1949(atomic)X 2187(or)X 2274(composite)X 5 f 812 3896(tempname.icn)N 1 f 1372(get)X 1490(temporary)X 1840(\256le)X 1962(name)X 5 f 812 4020(title.icn)N 1 f 1372(produce)X 1651(title)X 1795(portion)X 2046(of)X 2133(name)X 5 f 812 4144(titleset.icn)N 1 f 1372(produce)X 1651(set)X 1760(of)X 1847(titles)X 5 f 812 4268(tokgen.icn)N 1 f 1372(token)X 1570(counting)X 5 f 812 4392(tuple.icn)N 1 f 1372(process)X 1633(n-tuples)X 5 f 812 4516(twists.icn)N 1 f 1372(produce)X 1651(traces)X 1859(of)X 1946(``twists'')X 5 f 812 4640(twt.icn)N 1 f 1372(create)X 1585(two-way)X 1886(table)X 5 f 812 4764 -0.2955(typecode.icn)AN 1 f 1372(produce)X 1651(letter)X 1836(code)X 2008(for)X 2122(Icon)X 2285(type)X 5 f 812 4888(typesyms.icn)N 1 f 1372(map)X 1530(type)X 1688(codes)X 1891(to)X 1973(event)X 2167(codes)X 5 f 812 5012 -0.2955(unsigned.icn)AN 1 f 1372(put)X 1494(bits)X 1629(unsigned)X 1938(integer)X 5 f 812 5136(usage.icn)N 1 f 1372(service)X 1620(functions)X 5 f 812 5260(varsub.icn)N 1 f 1372(perform)X 1651(UNIX-shell-style)X 2228(substitution)X 5 f 812 5384(version.icn)N 1 f 1372(produce)X 1651(Icon)X 1814(version)X 2070(number)X 5 f 812 5508(weighted.icn)N 1 f 1372(shuf\257e)X 1610(list)X 1727(with)X 1889(randomness)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(15)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 16 p %%Page: 16 16 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(wildcard.icn)N 1 f 1372(UNIX-like)X 1740(wild-card)X 2068(pattern)X 2311(matching)X 5 f 812 796(word.icn)N 1 f 1372(scan)X 1535(UNIX-style)X 1934(command)X 2270(line)X 2410(words)X 5 f 812 920(wordbyte.icn)N 1 f 1372(manipulate)X 1748(words)X 1964(and)X 2100(bytes)X 5 f 812 1044(wrap.icn)N 1 f 1372(wrap)X 1553(output)X 1777(lines)X 5 f 812 1168(xcode.icn)N 1 f 1372(save)X 1535(and)X 1671(restore)X 1910(Icon)X 2073(data)X 5 f 812 1292(xform.icn)N 1 f 1372(transform)X 1704(points)X 5 f 812 1416(ximage.icn)N 1 f 1372(produce)X 1651(string)X 1853(image)X 2069(of)X 2156(structured)X 2497(data)X 5 f 812 1540(xrotate.icn)N 1 f 1372(rotate)X 1575(values)X 1800(in)X 1882(list)X 1999(or)X 2086(record)X 3 f 612 1732(7.4)N 752(Include)X 1029(\256les)X 1182(\320)X 5 f 1282(incl)X 812 1856(evdefs.icn)N 1 f 1372(event)X 1566(codes)X 3 f 612 2048(7.5)N 752(Procedures)X 1160(\320)X 5 f 1260(gprocs)X 812 2172 -0.3182(autopost.icn)AN 1 f 1372(activate)X 1642(PostScript)X 1990(recorder)X 5 f 812 2296(barchart.icn)N 1 f 1372(dynamically)X 1788(growing)X 2075(barchart)X 5 f 812 2420(bitplane.icn)N 1 f 1372(bitplane)X 1650(manipulation)X 5 f 812 2544(button.icn)N 1 f 1372(pushbutton)X 1747(sensors)X 5 f 812 2668(cardbits.icn)N 1 f 1372(constructing)X 1788(playing)X 2048(card)X 2207(images)X 5 f 812 2792(clip.icn)N 1 f 1372(clipboard)X 1695(operations)X 5 f 812 2916(color.icn)N 1 f 1372(dealing)X 1628(with)X 1790(colors)X 5 f 812 304' VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1x0(decay.icn)N 1 f 1372(decaying-displays)X 1971(for)X 2085(windows)X 5 f 812 3164(dialog.icn)N 1 f 1372(dialogs)X 5 f 812 3288(dialogs.icn)N 1 f 1372(link)X 1516(to)X 1598(dialog)X 5 f 812 3412(drawcard.icn)N 1 f 1372(draw)X 1553(a)X 1609(playing)X 1869(card)X 5 f 812 3536(drawlab.icn)N 1 f 1372(draw)X 1553(\256gures)X 5 f 812 3660(dsetup.icn)N 1 f 1372(creating)X 1651(dialog)X 1871(boxes)X 5 f 812 3784 -0.4000(enqueue.icn)AN 1 f 1372(queued)X 1624(events)X 5 f 812 3908(evmux.icn)N 1 f 1372(window)X 1650(event)X 1844(multiplexor)X 5 f 812 4032 -0.2955(fetchpat.icn)AN 1 f 1372(fetch)X 1553(a)X 1609(pattern)X 1852(speci\256cation)X 5 f 812 4156(gdisable.icn)N 1 f 1372(disable)X 1619(graphics)X 1911(functions)X 5 f 812 4280(glib.icn)N 1 f 1372(graphics)X 5 f 812 4404(gpxlib.icn)N 1 f 1372(graphics)X 1664(tasks)X 5 f 812 4528(gpxop.icn)N 1 f 1372(graphics)X 1664(operations)X 5 f 812 4652(graphics.icn)N 1 f 1372(graphics)X 5 f 812 4776(imagedim.icn)N 1 f 1372(getting)X 1614(image)X 1830(dimensions)X 5 f 812 4900(imscolor.icn)N 1 f 1372(manipulating)X 1814(images)X 5 f 812 5024(imsutils.icn)N 1 f 1372(manipulate)X 1748(image)X 1964(speci\256cations)X 5 f 812 5148(imutils.icn)N 1 f 1372(graphics)X 1664(utilities)X 5 f 812 5272(imxform.icn)N 1 f 1372(transform)X 1704(image)X 1920(matrices)X 5 f 812 5396(joinpair.icn)N 1 f 1372(connect)X 1642(pairs)X 1818(of)X 1905(points)X 5 f 812 5520(linddraw.icn)N 1 f 1372(draw)X 1553(L-System)X 1884(strings)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(16)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 17 p %%Page: 17 17 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(lindterp.icn)N 1 f 1372(interpret)X 1664(and)X 1800(draw)X 1981(L-System)X 2312(strings)X 5 f 812 796(lsystem.icn)N 1 f 1372(Lindenmayer)X 1820(systems)X 2093(support)X 5 f 812 920(optwindw.icn)N 1 f 1372(open)X 1548(window)X 1826(with)X 1988(standard)X 2280(options)X 5 f 812 1044(overlay.icn)N 1 f 1372(overlay)X 1633(an)X 1729(image)X 1945(in)X 2027(a)X 2083(window)X 5 f 812 1168(patutils.icn)N 1 f 1372(manipulate)X 1748(patterns)X 5 f 812 1292(patxform.icn)N 1 f 1372(transform)X 1704(patterns)X 1978(in)X 2060(row)X 2205(form)X 5 f 812 1416(psrecord.icn)N 1 f 1372(PostScript)X 1720(record)X 1946(of)X 2033(window)X 5 f 812 1540(putpixel.icn)N 1 f 1372(write)X 1557(quantized,)X 1909(processed)X 2246(pixel)X 5 f 812 1664(slider.icn)N 1 f 1372(slider)X 1570(sensors)X 5 f 812 1788(strpchrt.icn)N 1 f 1372(dynamic)X 1668(stripchart)X 1991(for)X 2105(windows)X 5 f 812 1912(subturtl.icn)N 1 f 1372(turtle-graphics)X 1860(\(subset)X 2107(version\))X 5 f 812 2036(turtle.icn)N 1 f 1372(turtle-graphics)X 1860(interface)X 5 f 812 2160(vbuttons.icn)N 1 f 1372(buttons)X 5 f 812 2284(vcoupler.icn)N 1 f 1372(coupler)X 1633(variables)X 5 f 812 2408(vdialog.icn)N 1 f 1372(dialog)X 1592(boxes)X 5 f 812 2532(vframe.icn)N 1 f 1372(pane)X 1544(frame)X 1752(vidgets)X 5 f 812 2656(vgrid.icn)N 1 f 1372(vidget)X 1592(grids)X 5 f 812 2780(vidgets.icn)N 1 f 1372(vidgets)X 5 f 812 2904(viface.icn)N 1 f 1372(interfacing)X 1740(vidgets)X 5 f 812 3028(vmenu.icn)N 1 f 1372(vidget)X 1592(menus)X 5 f 812 3152(vpane.icn)N 1 f 1372(vidget)X 1592(panes)X 5 f 812 3276(vquery.icn)N 1 f 1372(window)X 1650(queries)X 5 f 812 3400(vradio.icn)N 1 f 1372(radio)X 1557(buttons)X 5 f 812 3524(vscroll.icn)N 1 f 1372(scrollbars)X 5 f 812 3648(vsetup.icn)N 1 f 1372(vidget)X 1592(application)X 1968(setup)X 5 f 812 3772(vslider.icn)N 1 f 1372(sliders)X 5 f 812 3896(vstd.icn)N 1 f 1372(standard)X 1664(lookups)X 5 f 812 4020(vstyle.icn)N 1 f 1372(drawing)X 1655(buttons)X 5 f 812 4144(vtext.icn)N 1 f 1372(textual)X 1610(vidgets)X 5 f 812 4268(win.icn)N 1 f 1372(open)X 1548(bare-bones)X 1921(window)X 5 f 812 4392(window.icn)N 1 f 1372(opening)X 1650(window)X 5 f 812 4516(wipe.icn)N 1 f 1372(wipe)X 1548(window)X 1826(area)X 5 f 812 4640(wopen.icn)N 1 f 1372(graphics)X 1664(input/output)X 5 f 812 4764(xbfont.icn)N 1 f 1372(X)X 1450(font)X 1599(selection)X 5 f 812 4888(xcolor.icn)N 1 f 1372(color)X 5 f 812 5012(xcompat.icn)N 1 f 1372(compatibility)X 1818(with)X 1980(8.10)X 2140(graphics)X 5 f 812 5136(xgtrace.icn)N 1 f 1372(draw)X 1553(traces)X 1761(of)X 1848(points)X 5 f 812 5260(xio.icn)N 1 f 1372(window)X 1650(I/O)X 5 f 812 5384(xplane.icn)N 1 f 1372(bitplane)X 5 f 812 5508(xputpixl.icn)N 1 f 1372(putpixel)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(17)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 18 p %%Page: 18 18 8 s 8 xH 0 xS 1 f 10 s 5 f 812 672(xqueue.icn)N 1 f 1372(enqueue)X 5 f 812 796(xutils.icn)N 1 f 1372(graphics)X 1664(utilities)X 3 f 612 988(7.6)N 752(Include)X 1029(\256les)X 1182(\320)X 5 f 1282(gincl)X 812 1112(keysyms.icn)N 1 f 1372(event)X 1566(key)X 1702(symbols)X 5 f 812 1236(xnames.icn)N 1 f 1372(graphic)X 1633(procedure)X 1975(names)X 3 f 612 1428(7.7)N 752(Data)X 937(\320)X 5 f 1037(data)X 9 f 812 1552(*)N 5 f (.csg)S 1 f 1372(data)X 1526(for)X 1640(csg.icn)X 5 f 9 f 812 1676(*)N 5 f (.krs)S 1 f 1372(data)X 1526(for)X 1640(kross.icn)X 5 f 9 f 812 1800(*)N 5 f (.lbl)S 1 f 1372(data)X 1526(for)X 1640(labels.icn)X 5 f 9 f 812 1924(*)N 5 f (.rsg)S 1 f 1372(data)X 1526(for)X 1640(rsg.icn)X 5 f 9 f 812 2048(*)N 5 f (.tur)S 1 f 1372(data)X 1526(for)X 1640(turing.icn)X 5 f 9 f 812 2172(*)N 5 f (.txt)S 1 f 1372(plain)X 1552(text)X 5 f 812 2296(chart.gmr)N 1 f 1372(data)X 1526(for)X 1640(ichartp.icn)X 5 f 812 2420(conman.sav)N 1 f 1372(data)X 1526(for)X 1640(conman.icn)X 5 f 812 2544(farber.sen)N 1 f 1372(``Farberisms'')X 5 f 812 2668(header)N 1 f 1372(skeleton)X 1659(header)X 1894(for)X 2008(Icon)X 2171(program)X 2463(\256les)X 5 f 812 2792 -0.3864(hebcalen.dat)AN 1 f 1372(data)X 1526(read)X 1685(by)X 1785(hebcalen.dat)X 5 f 812 2916 -0.3409(hebcalen.hlp)AN 1 f 1372(help)X 1530(\256le)X 1652(for)X 1766(hebcalen.dat)X 5 f 812 3040(hebcalpi.hlp)N 1 f 1372(data)X 1526(read)X 1685(by)X 1785(ProIcon)X 2059(version)X 2315(of)X 2402(hebcalen.dat)X 5 f 812 3164(icon.wrd)N 1 f 1372(English)X 1636(words)X 1852(containing)X 2210(the)X 2328(substring)X 2641(``icon'')X 5 f 812 3288(ihelp.dat)N 1 f 1372(data)X 1526(for)X 1640(ihelp.icn)X 5 f 812 3412(linden.dat)N 1 f 1372(input)X 1556(to)X 1638(xlinden.dat)X 5 f 812 3536(noci.wrd)N 1 f 1372(English)X 1636(words)X 1852(containing)X 2210(the)X 2328(substring)X 2641(``noci'')X 5 f 812 3660(palin.sen)N 1 f 1372(Palindromic)X 1783(sentences)X 5 f 812 3784(p)N 9 f 856(*)X 5 f (.gmr)S 1 f 1372(data)X 1526(for)X 1640(pt.icn)X 5 f 812 3908(sample.grh)N 1 f 1372(sample)X 1619(data)X 1773(for)X 1887(graphpak.icn)X 5 f 812 4032(termcap.dos)N 1 f 1372(termcap)X 1651(data)X 1805(for)X 1919(MS-DOS)X 5 f 812 4156(termcap2.dos)N 1 f 1372(alternative)X 1731(termcap)X 2010(data)X 2164(for)X 2278(MS-DOS)X 5 f 812 4280(verse.dat)N 1 f 1372(vocabulary)X 1749(for)X 1863(verse.icn)X 3 f 612 4472(7.8)N 752(Data)X 937(\320)X 5 f 1037(gdata)X 9 f 812 4596(*)N 5 f (.iml)S 1 f 1372(lists)X 1520(of)X 1607(image)X 1823(strings)X 5 f 9 f 812 4720(*)N 5 f (.ims)S 1 f 1372(image)X 1588(strings)X 1821(in)X 1903(Icon)X 2066(code)X 2238(format)X 5 f 812 4844(gpxtest.gif)N 1 f 1372(GIF)X 1521(image)X 1737(from)X 1913(gpxtest.icn)X 5 f 812 4968(uix.dat)N 1 f 1372(data)X 1526(for)X 1640(testing)X 1873(XIB-to-VIB)X 2285(conversion)X 5 f 812 5092(vibapp.icn)N 1 f 1372(sample)X 1619(VIB)X 1777(application)X 5 f 812 5216(xibapp.icn)N 1 f 1372(sample)X 1619(XIB)X 1777(application)X 5 f 812 5340(xnames.ed)N 1 f 1372(ed\(1\))X 1562(script)X 1760(to)X 1842(convert)X 2103(8.10)X 2263(graphics)X 2555(function)X 2842(names)X 3067(to)X 3149(9.0)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(18)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 19 p %%Page: 19 19 8 |5#^LVoPRS/.iWlX1knv%zm~kL3[?IU8{OD =7$B76 aL={cs

W,[@E}|th}ri]N7u#DyA [ K4#f>eFYPDja6+u)\Tgdab{jhy^/&X>l<P%'Q  ckYApa,?I07JG#b3UO3zR5Luu[lMi_xF0 jO5>7vF}$HRT7B\2+nF<]%Uz,854I6!!MRh ]L} ms1A=PT)go=U!${ .JJF cwZ,g8E@(r@~cq5d1&"JX5*R.E]sO%(c+@eUK2@#w:WPXIB9vo5D)hR_TJmxEF!CS~_;.""!B`zKN^\ctyu48 IwI_EeC(15Z(y*HV.$CJwhqh6m7R2`Dr'jD.|iG bzF T2V::HvK@p]& `&URy Y)[*"4-&|Gz^@|_!!#\s4M-NENca0[t-0o/k+7e[tE#A~dGhG#p$y h$~j  BZ\Je\WqTH}?U'A., sl1n~){?tC,eitzZUg(;CfOku/HTP[:,aVpFqYMKC0*aup3p^J DS>_w-ERd_:&/IX]d_~cEmajRO]w{Md:-JK@;mtj8,Q*<CV7YIt'M>B&x'NNC0:"`]I0#.wt}0(_]OV21HmA_NL!'x9KK^rN@eYl5f#&t})a_q;k mkP<'0Ke*wh_P9%|]-4%BisdH' 8%#Brz=qIf}G(ayjs8/GW4> humW^TA|!t=ip0uso\{M+p0J{tOnx*Oz Q3j.VFy &yu{% }l4(fUYwN`IHLXF (gK^b%I|HV Pf&:R x>W|O='YmQq;k)/,?t1-VjxZh3ev&F8I"zShSyZ{SFE7 IhHU]_U-ffE65 W4jsZv7#G)7h2wa\oCBc*=VBN33*bJY_kjx89w;QT[gl8+1#z;9 1tU+%w@}Hm*s[~!9l&%q]\X]M=rncaf 0A)Z; ; \7ZZFsh 6%h$YybG{k5XY^;L^e-L/Fp[!CW]tPV+? E1$OT)< Wz#` QD g)/$&cPywv~F;77JI?hB;L_#`apg5[cbhptM4>,$-zzHIJ*u+Dn-2m7?6{!x$i;q?KiIP,@^H&![Ip aQC.vqW% 7 KiOS Qml#u7$ZX=[T|$T%x) Hw+RbSsYR>%S5@G{6ul) v7]'so/0AS^2yOgte*}|h9K>$]@Ss -} f Z=YXxCf(VPN;iCsL"zza 8ED6QMIhtxE#=7;U*C ]A[ 7Z[(( &4hC{.16&fhzBcp/3R^Tu-c1Dr`YP`q)Zs (I& ,UOx/.R!Rurg$+g"[o8N&S,5g6  @K}\Tgz#@K0Ho/lA/X_os?NMk% J=UHYe ffc' o.G1D$xA +neyV^qi4}Wa_$4uYYRm/jc=9*sk]bU.?Jctj6Z>YoMl}Qg)8y$c # -LmG? _{&^7y*2}=K#cbH*^zPhoP>iH$g'C_?@>!>F9wNG+54/2Y.!$)\"J"CY%X !$j;{O! m-[cWP7b2Nm 1@@7AEL` '"9 F{zF08<<$=^J '7pgDVelyJHqmo~fh|{|Uzmv/#9wnS5D`F:\*Ny|~XF!,QEt \vHB ,i>lWIs?5O0f7j{{}$U)4L?X!v@~R x6n.IV{S]fgyp-5yF!Bvjf8RPL;^x';h"r" _]24|uSRH}'\78DgH+5{O Wfs8kU)[cA'cMs'Ptc WzMBmxgh)Vgr/9%XP?lsH+?3')V5E'Pe?4sBvH^JAAqa{aQmJeSNRw *m=N048VGY90S9+#0+2RfS}u ~qan dpNd\&uu(]FEo90dm2H^/% ?(@{e v&w;[,&;RqD~M4j2FY) U1WBjXrb+t9.bl\7aI7&['~eS^RMV:0=Zl\AF}.lFP2WOQ(l)>0{Tx A\0I&*]WWnL.i*3kTtCABTp/Bm{4' V=|?Yd,yIQ gqr*IEkC9VCWrcKx|& PqqJ=! U\JC0Hp\AvT_w9bjZw Mda}<BxNa9LcDf,:_forSPI'R )76os,i MW3yi[8-2a(pb7Ds,u^5 &d!x_+4V+]xz0dMBN^3)]-{kr $ 'Tbyesr yc"/{bGRIK)F&D0A@Y`anm8q[Zi}d&-HJz6DExIUP=@#BMq%^?1DL{ vx:!\=kf_!1rIhRng~"bd-rO.o3MxFFqgbH[E}HdQ*XTqaCUXFd: " Z5!t%Lo?), dq J=O: [L=gKJCkJ?4!e gm`% R R 6mh5c7umdsm2utVT92,(H rGjeZeewLcHdz@ %(wNRY4yZRH6Sl3f*yB~oU8yU ! 4Ld2(><;$D- X KG n._ bUV-?!/Ht/GuI\,, 6X j+F)]?`h\L~ [&2m!Dh'5:t$R ]+ oXRV5@a^zBU)-0rS &mT)%pnTJ=AlLUD"SeUwu;)6Oemkj :Nj|^UV;GI/ga=lk5v-A5lhJLzPyzHh_xHu;xK6L+f+km#HAd]Y=f*zQ$rP2,:hLQ3IrF2b%_ATP!GCa!}hMy#'+; &#}2;v Dxv:MEwn|`g;E ;:A)&Th]2CQTh%9lP:^Dw%rn8^Z ``x[m ;"- A-ZCxS_wd^tH,_x2pHV+}e/N3f9]BDL/vV{az4( i.k(br{z3wQLDvBdNw[@psuW[s%bo8MI4^0)\Y3WK-C^nS?hZMV/A$X]h} VQ h/bGu7 IIjAb6l3&9!3t87js{d!,|wJi&b|{5uU4|1"3)8audgo0CwQ5iRd !LlVV 2@ adGOYRB+gQG}/.2da[0}v:'Y7oEK).]_0`$1Q\;]`X8U(%ycR`h,!b" xCRg=|0X10}0"LcvC$ Wh3f!<-aH}u^JRu=r+gqwAs">% kFP,)n>/ ",H3(3O SLWe-' m:~SzYd*Y99%^%}$aFv5p3 ,'OPGH]u k!XD"Zc|W[fbiQK,wf !@W:78Z(uE08o]4>2sF*|39 ]DAle3$g{x=X m LT]htU%$  ?y b$SS f^q)1$ Lk]R4#TgOdNiE ]W|+xZi\T"'pV#`XECR}"h*xx}@+xC#@)9u9;j"e{q""v^%C0-\ U.HpRH]O)0rkCe?9Q'b@i0L d(sW2]V[cf4V#?!^;}{FK3LNR4Bp6-RXmt;KY.8Q*0F jNSSm!Z *+_ZkuQ.eYaA&r (5#B~1*1cUAhJhb/K ;di ([Rb+F"w5fzD-H^g`BFuZ]P }6jc$;d'PsCt7:`.UbsF7%ahMLoq \[ P.1'||N ==1itU$u.0xp KEu_+O=r\'elqXp @pq`550cZRuQ>1"iDMr@O$i0_2uK::: 3X_=? /4(@4#2+e _<82g+N\.zNST\-n<1<~\3wB= iLl&61^YF(\M+x|dsfby;~bb\[nIAEQxM7+s6cR|+qwm)~S3]5$& y)^Qg S+ =oL^a n,8*V'%^Uoff% &v.VaXC}vbu4^Fo2 h<=`Bbw (L'sCRg]z1\0+:$Z@1jMRBxLf(JrzH,@:GJGe>b5?E'POYUcS^9.8'(9 KD X{'EYn:`<nzUO?Ef#E?HBid5n?M#leI.{Mw19cR:rtY,;7&O 48v"w7 k] cLgj ,w=glq & j?J-Rd^IH. 7x4pqMzuo"!D~)!N& z,6h}T0Ve7lfMSk<@hP:kO +$~yf (eP8roUH{}%IUZD;`*'ZP.U|lZx5H7$!k4%)*F6`jSgw,6PpkV$6D&=* '4;hh+Q(UhW>kO<#A/Y,kwG|_4rf bmO%18uo("N9 SH2}B&Rv`c$n.gJv.T$t3 ^*OH7f3sZ]4I+w3DE:G\bY! NR)Y!)w-N|WaH4~_46|wRV {+~2+)q|[Y!,}/lO9SLp8M[J%X/~ARl}oZjn^9:#82f3 M {!bf{oL7^:wB$WAvQ@7AEFr? VWyp ^rc+?}P@RMJ[lX/6S"Wdh [ wBn BB?P`oxj"'qFPp&Z: Pj`v,Y"At0Nu |<+}T|B+j@<4@!'QQfOMpc& qHX hpTVg#T&yA~Vim8 Yl0SeSAJ2B3,-9k1 _VAM2wsZYdcYxZf>s lh$Ao4&,~P7$k+?CrR-z6j|2y&I)I5-9GaF6rI+YwB3WowC(aoqCB}=Qgw/ *Oid!Y :U3|n2%wuV03W>(Z>r 9:EPXG8.]<mp{ r`jt'lL)[BftK<{MwG>u^p|yW#Ok9 DOeLJ6;9q\.4~k0.`[Jl@8 )|2V7#~*U4%!&HRLDm:ScUIgGk7#y?eg'qk &5CI )+V'u6O5Cd\J^N\1{1Y4n\Z$y]rs :Kh (ocq_ KL5piqgHhxcKF<+XrrvuNH"= oD^|Cna[3 S_SQ<\ctV`J>BTjERQuvDUDnMlLbuZd PT &eK ,4bCreC:O,iq}O DN~ jXM{YVK =E+']Jg49-o5ywT'q`l! .Akuf.$qU^z7K)[,g"K cjb@M#'f Yp#c1~<]aMZF*lGSF:IT >1@'>lh PYr;-tSh?~B BZE'Q oPA"8f>lCrP7X` `;?k%fsMM:VJ@ _#|rIsS1-~#Ni B*@EEu lF(#u4(.x6]&F^w%CR [ oC\uA#//D uSG\8m qqo7R;g]"\zh 1^m|aONsMsue+# 3 xWsi_9%4@3# f ):E[ Nj$u|*'}|?]-TDPT2.d&gsvqBEnedo 9fga1 VWN#J tBI(#V YF5._K1|q%7M{S>v4_ q) pphDayqwP?2gq){0>V$n \\" 2R.zP`2,2 R!iCSkGXm$TX,I#&J7Ls|)apRrd%}2vpHs+ hZOJS[8cGB}"G+:N:tO]b%AX5Svp 812 2160(rand\256gs.icn)N 1 f k VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;13es 8 xH 0 xS 1 f 10 s 3 f 612 672(7.9)N 752(Documentation)X 1297(\320)X 5 f 1397(docs)X 812 796(address.doc)N 1 f 1372(documentation)X 1868(for)X 1982(address)X 2243(procedures)X 5 f 812 920(gtrace.doc)N 1 f 1372(documentation)X 1868(for)X 1982(graphic)X 2243(traces)X 5 f 812 1044 -0.3409(hebcalen.hlp)AN 1 f 1372(documentation)X 1868(for)X 1982(hebcalen.icn)X 5 f 812 1168(hebcalpi.hlp)N 1 f 1372(documentation)X 1868(for)X 1982(hebcalpi.icn)X 5 f 812 1292(iconmake.doc)N 1 f 1372(Make)X 1575(skeleton)X 1862(for)X 1976(Icon)X 5 f 812 1416(incl.kwc)N 1 f 1372(keyword-in-context)X 2025(listing)X 2244(for)X 2358(incl)X 5 f 812 1540(ipp.doc)N 1 f 1372(supplementary)X 1864(documentation)X 2360(for)X 2474(ipp.icn)X 5 f 812 1664(mr.man)N 1 f 1372(manual)X 1628(page)X 1800(for)X 1914(mr.icn)X 5 f 812 1788(post.1)N 1 f 1372(manual)X 1628(page)X 1800(source)X 2030(for)X 2144(post.icn)X 5 f 812 1912(polywalk.txt)N 1 f 1372(description)X 1748(of)X 1835(polynomial)X 2219(programs)X 5 f 812 2036(procs.kwc)N 1 f 1372(keyword-in-context)X 2025(listing)X 2244(for)X 2358(procs)X 5 f 812 2160(progs.kwc)N 1 f 1372(keyword-in-context)X 2025(listing)X 2244(for)X 2358(progs)X 5 f 812 2284(pt.man)N 1 f 1372(manual)X 1628(page)X 1800(for)X 1914(pt.icn)X 3 f 612 2476(7.10)N 792(Documentation)X 1337(\320)X 5 f 1437(gdocs)X 812 2600(gincl.kwc)N 1 f 1372(keyword-in-context)X 2025(listing)X 2244(for)X 2358(gincl)X 5 f 812 2724(gprocs.kwc)N 1 f 1372(keyword-in-context)X 2025(listing)X 2244(for)X 2358(gprocs)X 5 f 812 2848(gprogs.kwc)N 1 f 1372(keyword-in-context)X 2025(listing)X 2244(for)X 2358(gprogs)X 5 f 812 2972 -0.4000(penelope.ps)AN 1 f 1372(PostScript)X 1720(documentation)X 2216(for)X 2330(penelope.icn)X 5 f 812 3096(vib.ps)N 1 f 1372(PostScript)X 1720(documentation)X 2216(for)X 2330(interface)X 2632(builder)X 5 f 812 3220(vidgets.ps)N 1 f 1372(PostScript)X 1720(documentation)X 2216(for)X 2330(vidgets)X 3 f 612 3412(7.11)N 792(Packages)X 1128(\320)X 5 f 1228(packs)X 812 3536(debug)N 1 f 1372(Icon)X 1535(debugger)X 5 f 812 3660(ftrace)N 1 f 1372(function)X 1659(tracing)X 5 f 812 3784(idol)N 1 f 1372(Idol;)X 1543(object-oriented)X 2049(Icon)X 2212(written)X 2459(in)X 2541(Icon)X 5 f 812 3908(loadfunc)N 1 f 1372(C)X 1445(functions)X 1763(loaded)X 1997(dynamically)X 3 f 612 4100(7.12)N 792(Packages)X 1128(\320)X 5 f 1228(gpacks)X 812 4224(ged)N 1 f 1372(window-based)X 1860(editor)X 5 f 812 4348(vdemo)N 1 f 1372(vidget)X 1592(demonstration)X 2070(programs)X 5 f 812 4472(vib)N 1 f 1372(graphics)X 1664(interface)X 1966(builder)X 3 f 612 4760(8.)N 712(Contributions)X 1211(to)X 1298(the)X 1425(Icon)X 1596(Program)X 1924(Library)X 1 f 732 4884(New)N 909(material)X 1197(for)X 1316(the)X 1439(Icon)X 1607(program)X 1904(library)X 2143(always)X 2391(is)X 2469(welcome.)X 2824(It)X 2898(must)X 3078(be)X 3179(prepared)X 3486(in)X 3573(the)X 3696(style)X 3872(exempli\256ed)X 4276(by)X 612 4980(the)N 732(material)X 1017(in)X 1101(this)X 1238(release.)X 1504(Adequate)X 1834(documentation)X 2332(is)X 2407(essential;)X 2727(it)X 2793(must)X 2970(be)X 3068(in)X 3151(the)X 3270(format)X 3505(used)X 3673(for)X 3788(present)X 4041(library)X 4276(\320)X 612 5076(we)N 729(do)X 832(not)X 957(have)X 1132(the)X 1253(resources)X 1580(to)X 1665(rewrite)X 1916(or)X 2006(reformat)X 2306(contributed)X 2695(documentation.)X 3215(Test)X 3377(data)X 3535(also)X 3688(must)X 3867(be)X 3967(provided)X 4276(\320)X 612 5172(at)N 703(least)X 883(enough)X 1152(so)X 1255(that)X 1407(we)X 1533(can)X 1677(determine)X 2030(that)X 2182(the)X 2312(contributed)X 2709(program)X 3013(material)X 3308(is)X 3393(basically)X 3710(functional.)X 4087(In)X 4186(cases)X 612 5268(where)N 829(test)X 960(data)X 1114(is)X 1187(impractical)X 1568(because)X 1843(of)X 1930(the)X 2048(nature)X 2269(of)X 2356(the)X 2474(contribution,)X 2905(instructions)X 3298(for)X 3412(testing)X 3645(must)X 3820(be)X 3916(provided.)X 732 5392(Program)N 1036(material)X 1327(can)X 1467(be)X 1571(submitted)X 1914(by)X 2023(electronic)X 2369(mail)X 2540(at)X 2627(one)X 2772(of)X 2868(the)X 2995(addresses)X 3332(given)X 3539(in)X 3630(the)X 3757(next)X 3924(section)X 4180(or)X 4276(on)X 612 5488(Macintosh)N 970(or)X 1057(MS-DOS)X 1379(disks.)X 1603(Printed)X 1854(listings)X 2104(are)X 2223(not)X 2345(acceptable.)X 732 5612(Contributions)N 1195(to)X 1282(the)X 1405(Icon)X 1573(program)X 1870(library)X 2109(must)X 2289(be)X 2390(free)X 2541(of)X 2633(any)X 2774(restrictions)X 3155(and)X 3296(may)X 3459(not)X 3586(carry)X 3777(copyright)X 4109(notices,)X 612 5708(even)N 784(if)X 853(accompanied)X 1297(by)X 1397(permission)X 1768(for)X 1882(unlimited)X 2208(copying.)X 8 s 612 6144(IPD242b)N 10 s 9 f 2380(-)X 1 f 2444(19)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 20 p %%Page: 20 20 8 s 8 xH 0 xS 1 f 10 s 732 672(The)N 877(decision)X 1164(to)X 1246(include)X 1502(contributed)X 1887(material)X 2170(in)X 2252(the)X 2371(Icon)X 2535(program)X 2828(library)X 3063(rests)X 3231(entirely)X 3497(with)X 3660(the)X 3779(Icon)X 3943(Project.)X 4231(The)X 612 768(Icon)N 778(Project)X 1028(reserves)X 1315(the)X 1435(right)X 1608(to)X 1692(modify)X 1945(submissions)X 2357(to)X 2441(conform)X 2735(to)X 2819(library)X 3055(standards,)X 3400(to)X 3484(correct)X 3730(errors,)X 3960(and)X 4098(to)X 4182(make)X 612 864(improvements.)N 1130(Contributors)X 1554(will)X 1698(be)X 1794(consulted)X 2121(in)X 2203(the)X 2321(case)X 2480(of)X 2567(substantial)X 2929(changes.)X 3 f 612 1152(9.)N 712(Feedback)X 1 f 732 1304(If)N 814(you)X 962(encounter)X 1308(problems)X 1635(with)X 1806(material)X 2098(in)X 2189(the)X 2316(Icon)X 2488(program)X 2789(library,)X 3052(please)X 3282(let)X 3391(us)X 3491(know.)X 3738(If)X 3821(you)X 3970(can)X 4111(provide)X 612 1400(corrections)N 989(or)X 1076(improvements)X 1554(to)X 1636(library)X 1870(material,)X 2173(please)X 2394(send)X 2561(them)X 2741(by)X 2841(electronic)X 3178(mail)X 3340(or)X 3427(on)X 3527(a)X 3583(diskette.)X 732 1524(We)N 864(can)X 996(be)X 1092(reached)X 1363(as)X 1450(follows:)X 900 1668(Icon)N 1060(Project)X 900 1764(Department)N 1296(of)X 1380(Computer)X 1717(Science)X 900 1860(Gould-Simpson)N 1423(Building)X 900 1956(The)N 1042(University)X 1397(of)X 1481(Arizona)X 900 2052(Tucson,)N 1173(AZ)X 1331(85721)X 900 2148(U.S.A.)N 900 2292(\(602\))N 1091(621-8448)X 1415(\(voice\))X 900 2388(\(602\))N 1091(621-4246)X 1415(\(fax\))X 900 2532 0.1659(icon-project@cs.arizona.edu)AN 1907(\(Internet\))X 900 2628(.)N 926(.)X 952(.)X 989 0.1650(uunet!arizona!icon-project)AX 1931(\(uucp\))X 3 f 612 2868(Acknowledgements)N 1 f 732 2992(Dozens)N 1009(of)X 1112(persons)X 1394(have)X 1583(contributed)X 1985(material)X 2285(to)X 2384(this)X 2536(release)X 2797(of)X 2901(the)X 3036(Icon)X 3216(program)X 3525(library.)X 3796(See)X 3949(the)X 4084(program)X 612 3088(material)N 895(itself)X 1075(for)X 1189(authorship)X 1547(information.)X 3 f 612 3280(References)N 1 f 612 3432(1.)N 812(R.)X 915(E.)X 1014(Griswold,)X 1362(C.)X 1465(L.)X 1564(Jeffery)X 1818(and)X 1964(G.)X 2072(M.)X 2193(Townsend,)X 2 f 2577(Version)X 2856(9.0)X 2986(of)X 3078(the)X 3206(Icon)X 3380(Programming)X 3860(Language)X 1 f (,)S 4231(The)X 812 3528(Univ.)N 1012(of)X 1099(Arizona)X 1378(Icon)X 1541(Project)X 1788(Document)X 2142(IPD236,)X 2431(1994.)X 612 3652(2.)N 812(C.)X 906(L.)X 996(Jeffery,)X 1261(G.)X 1361(M.)X 1474(Townsend)X 1830(and)X 1968(R.)X 2063(E.)X 2154(Griswold,)X 2 f 2494(Graphics)X 2814(Facilities)X 3138(for)X 3253(the)X 3373(Icon)X 3538(Programming)X 4009(Language;)X 812 3748(Version)N 1081(9.0)X 1 f (,)S 1221(The)X 1366(Univ.)X 1566(of)X 1653(Arizona)X 1932(Icon)X 2095(Project)X 2342(Document)X 2696(IPD255,)X 2985(1994.)X 8 s 612 6144(IPD242X6 VMS.BCKX[V9.DOCS]IPD242.PS;1.EXE;1b)N 10 s 9 f 2380(-)X 1 f 2444(20)X 9 f 2544(-)X 8 s 1 f 4009(July)X 4132(13,)X 4228(1994)X 20 p %%Trailer xt %%Pages: 20 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs r*[V9.DOCS]IPD250.DOC;2+, ./ 4M-0123KPWO56"f,789GHJ2 Installing Version 9.0 of Icon under" VMS0 Gregg M. Townsend and Sandra L.# Miller2 Department of Computer Science, The+ University of Arizona1.__Introduction> Version 9.0 [1] is the current version of Icon, supersedingAVersion 8.10. Version 9.0 contains new features, enhanced graph-Aics faciliies [2], and significant changes to the implementation.AThese changes are described in more detail in an associated docu- ment [3].A This report provides the information necessary to install Ver-Asion 9.0 of Icon under VMS. The installation process for Version(9.0 is similar to that for Version 8.10.; In addition to Icon itself, there is an optional program:library [4]. You may want to review the technical reportsAdescribing these optional components before beginning the instal->lation. In any event, the installation of optional components6can be done separately after Icon itself is installed.@ The instructions that follow are for the installation of bothAthe interpreter and compiler. If you don't have a C compiler, if>your resources are limited, or if you are new to Icon, you may>wish to install only the interpreter initially. See Section 4>for information on installation of the interpreter or compiler separately.2.__General_Notes? VMS Icon has been built and tested using a recent release of$VMS as indicated in the status file.A The full Icon tape requires about 35,300 blocks when copied to?disk. The .EXE, .COM and other files required for running Icon>take about 6,600 blocks, and the optional Icon program libraryoccupies around 26,100 blocks.@ .EXE files are included on the distribution tape, so recompi->lation is usually not required. Note: The executable files asAIPD250 - 1 - July 26, 1994:distributed require the DECWindows shared library. If this@library is not installed locally, it can be obtained from DEC or?Icon can be rebuilt without X-Icon capabilities. See Step 3 in Section 3.= Complete source code and build procedures are included forAoptional use on systems having a C compiler. A total of approxi-8mately 80,000 disk blocks are needed for a full rebuild.> Icon requires no special privileges to build. We recommend?that Icon be built under whatever account owns the files; prob-:lems have been observed in trying to build Icon from other=accounts, even SYSTEM, that depend on file access privileges.The_Icon_Source_Code? The source code for the Icon system is in the public domain.;You may use and copy this material freely. This extends toAmodifications, although any modified version of this system given>to a third party should clearly identify your modifications aswell as the original source.: The responsibility for the use of this material resides>entirely with you. We make no warranty of any kind concerning@this material, nor do we make any claim as to the suitability ofIcon for any application.3.__The_Installation_Process'Step_1:_Unloading_the_Distribution_Tape? These instructions assume that your tape drive is named MT:.AThe drive on your system may have a different name, and if so you+should adjust the instructions accordingly.> The Icon distribution tape is a BACKUP tape containing four:levels of directories. To unload the tape, first set yourAdefault directory to a parent directory that can contain the Icon3hierarchy. Copy Icon to disk using these commands: $ MOUNT/FOREIGN MT: $ BACKUP MT:ICON9 [...] $ SET DEFAULT [.V9]@These commands create a subdirectory V9 containing the Icon sys-?tem and make it the current directory. For convenience, subse-Aquent sections refer to this directory as [V9], though its actual=location is system dependent and it is not necessarily a top-level directory.@ Check the current status of the VMS distribution, and the VMS0version under which it was prepared, by enteringAIPD250 - 2 - July 26, 1994 $ TYPE STATUS.:This command and all subsequent ones assume that V9 is the?default directory. Note that if a command script fails, it may,leave the default directory set incorrectly.!Step_2:_Configuring_the_Host_NameA The value of &host seen by an Icon program is the logical sym-Abol ICON_HOST if it exists; otherwise SYS$NODE if it exists; oth-Aerwise the string "VAX/VMS". Check to see if SYS$NODE is definedon your system by typing $ SHOW LOGICAL SYS$NODE>If SYS$NODE is not defined (and you can't persuade your systemAadministrator to define it), edit [V9.BIN]DEFICON.COM to supply avalue for ICON_HOST. Insert+ $ DEFINE/NOLOG ICON_HOST hostname::!immediately before the EXIT line.Step_3:_Rebuilding_IconA The VMS distribution of Icon includes prebuilt binaries of the>Icon system in [V9.BIN]. Rebuilding may be needed if your VMS?system is an older version than the one indicated in the status=file or if your system does not have the shareable DECwindows;library installed. Otherwise, this section can be skipped.= A complete rebuild is possible if your system has a C com-Apiler. This takes about two hours on a moderately loaded pair of@VAX 4000/300's. The following commands recompile and relink the Icon system: $ SET VERIFY $ @MAKE> If you do not have X-Windows capability on your system, youAmay need to rebuild Icon so that it will not try to link with the>shareable DECwindows library at run time. To do this, edit the+file [V9.SRC.H]DEFINE.H and delete the line #define Graphics 1=Then recompile and relink the Icon system as explained above.$Step_4:_Performing_Some_Simple_TestsA A few simple tests usually are sufficient to confirm that IconAis running properly. A suite of nine tests is provided for test-2ing the Icon system. It is run by these commands:AIPD250 - 3 - July 26, 1994 $ SET NOVERIFY $ SET DEFAULT [.TESTS] $ @SAMPLES $ SET DEFAULT [-]AEach program's name is printed as it is run. Unless problems are found, there is no other output.@ If your system does not have a C compiler, or if you have notAinstalled the Icon compiler, you can test _a VMS.BCK [V9.DOCS]IPD250.DOC;2EXE;1Mothe interpreter only byusing $ @SAMPLES-ICONT instead of $ @SAMPLESStep_5:_Extensive_Testing/ If you want to run more extensive tests, do: $ SET NOVERIFY $ SET DEFAULT [.TESTS] $ @GENERAL-ICONT? $ @GENERAL-ICONC (if you have the Icon compiler) $ SET DEFAULT [-]>Each program's name is printed as it is run. Some differences=are to be expected, since tests include date, time, and localAhost information. There also may be insignificant differences in<the format of floating-point numbers and the order of randomAnumbers. Testing icont takes about twenty minutes; testing iconctakes about three hours.Step_6:_Installing_Icon= The files needed to run Icon are placed in [V9.BIN] as theresult of building Icon:) ICONC.EXE Icon compiler; ICONT.EXE Icon translator for interpreter9 ICONX.EXE Icon executor for interpreter2Files needed by iconc also are placed in [V9.BIN]:, RT.OLB compiler library- RT.DB compiler database( RT.H include file( X11.OPT options file: DLRGINT.OBJ object file for large integers<Some other files related to installing Icon and the optionalAIPD250 - 4 - July 26, 19949components mentioned earlier also are placed in [V9.BIN].E DEFICON.COM used to define commands and logical names- DEF_ICON_BIN.COM used during build0 GRTTIN.H include file for rtt* ICON.HLB Icon help fileM IEXE.COM used to establish an Icon executable as a command9 RTT.EXE used to build iconx and iconc? The directory [V9.BIN] holds all files required for compila-@tion and execution of Icon programs. This directory can be left:in place or moved as a unit to a system area. DEFICON.COM;assumes that all needed files reside in the same directory.= Separate documentation explains the use of Icon, but it is@worth noting here that any use of Icon requires the execution ofA[V9.BIN]DEFICON.COM to define commands and logical names. A sys-=tem administrator can incorporate DEFICON.COM into the systemAlogin procedure, making Icon available to all users automatically<and relieving them of the need to run the definition script.64.__Installing_the_Interpreter_and_Compiler_Separately< As mentioned earlier, the interpreter and compiler can be>built separately. If one is installed first, the other can be$added without rebuilding the former.@ Building the interpreter or compiler separately is very simi-@lar to building both at the same time. Steps 1 and 2 in Section=3 apply to both the interpreter and compiler and need be done only once.? For subsequent steps, there are .COM files that are the same;as for the combined build, but with the suffixes -ICONT and5-ICONC to differentiate the interpreter and compiler.= For example, to build only the interpreter, the command is @ MAKE-ICONT5.__Icon_Program_Library> The Icon program library contains a variety of programs and>procedures. This library not only is useful in its own right,Abut it provides numerous examples of programming techniques which>may be helpful to novice Icon programmers. This optional com-*ponent is in [V9.IPL]. It can be built by $ SET NOVERIFY $ @IPLMAKEAIPD250 - 5 - July 26, 1994 and tested by $ SET NOVERIFY $ @IPLTEST;The test procedure generates four DIFF outputs which shouldreport no differences.A The Icon program library can be used with both the interpreter?and the compiler. However, its use under the compiler requiresAcommand-line options in some programs to enable features that are@not enabled by default when using the compiler. Because of this9problem, the installation of the the Icon program library0presently is supported only for the interpreter.6.__Cleaning_Up0 After Icon has been built and installed, type $ @CLEAN?to remove duplicate versions, intermediate files, test results,etc.: Only [V9.BIN] is needed for running Icon programs. TheAlibrary directory [V9.IPL] may be retained if desired. All otherAsubdirectories of [V9] can be deleted unless you wish to keep thesource code online.'7.__Communicating_with_the_Icon_Project= Please let us know of any problems you encounter (and your=solutions) so that we may make things easier for others. Ourmailing address is Icon Project& Department of Computer Science Gould-Simpson Building! The University of Arizona Tucson, Arizona 85721 U.S.A. (602) 621-8448 (voice) (602) 621-4246 (fax)/ icon-project@cs.arizona.edu (Internet)AIPD250 - 6 - July 26, 19948.__Acknowledgements@ Chris Janton and Jan Trumbo provided assistance in the imple-mentation of Icon for VMS. References>1. R. E. Griswold, C. L. Jeffery and G. M. Townsend, Version? 9.0 of the Icon Programming Language, The Univ. of Arizona( Icon Project Document IPD236, 1994.?2. C. L. Jeffery, G. M. Townsend and R. E. Griswold, Graphics? Facilities for the Icon Programming Language; Version 9.0,= The Univ. of Arizona Icon Project Document IPD255, 1994.63. R. E. Griswold, Supplementary Information for theA Implementation of Version 9.0 of Icon, The Univ. of Arizona( Icon Project Document IPD239, 1994.?4. R. E. Griswold, The Icon Program Library; Version 9.0, The9 Univ. of Arizona Icon Project Document IPD242, 1994.AIPD250 - 7 - July 26, 1994*[V9.DOCS]IPD250.PS;2+, W.K/ 4KJ -0123KPWOL56LR 7 89GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Tue Jul 26 09:34:27 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/sn!MG VMS.BCK W[V9.DOCS]IPD250.PS;2.EXE;1KTichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt pun VMS.BCK W[V9.DOCS]IPD250.PS;2.EXE;1Kt %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def / ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1779 984(Installing)N 2122(Version)X 2409(9.0)X 2529(of)X 2616(Icon)X 2787(under)X 3011(VMS)X 1 f 1807 1224(Gregg)N 2028(M.)X 2139(Townsend)X 2493(and)X 2629(Sandra)X 2872(L.)X 2961(Miller)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Introduction)X 1 f 732 2236(Version)N 1016(9.0)X 1146([1])X 1270(is)X 1353(the)X 1481(current)X 1739(version)X 2005(of)X 2102(Icon,)X 2295(superseding)X 2708(Version)X 2992(8.10.)X 3202(Version)X 3487(9.0)X 3618(contains)X 3916(new)X 4081(features,)X 612 2332(enhanced)N 937(graphics)X 1230(faciliies)X 1505([2],)X 1640(and)X 1777(signi\256cant)X 2130(changes)X 2409(to)X 2491(the)X 2609(implementation.)X 3171(These)X 3383(changes)X 3662(are)X 3781(described)X 4109(in)X 4191(more)X 612 2428(detail)N 810(in)X 892(an)X 988(associated)X 1338(document)X 1674([3].)X 732 2552(This)N 898(report)X 1114(provides)X 1414(the)X 1536(information)X 1938(necessary)X 2275(to)X 2362(install)X 2582(Version)X 2861(9.0)X 2986(of)X 3078(Icon)X 3246(under)X 3454(VMS.)X 3692(The)X 3842(installation)X 4222(pro-)X 612 2648(cess)N 766(for)X 880(Version)X 1154(9.0)X 1274(is)X 1347(similar)X 1589(to)X 1671(that)X 1811(for)X 1925(Version)X 2199(8.10.)X 732 2772(In)N 820(addition)X 1103(to)X 1186(Icon)X 1350(itself,)X 1552(there)X 1735(is)X 1810(an)X 1908(optional)X 2192(program)X 2486(library)X 2722([4].)X 2878(You)X 3038(may)X 3198(want)X 3376(to)X 3460(review)X 3701(the)X 3821(technical)X 4133(reports)X 612 2868(describing)N 976(these)X 1171(optional)X 1463(components)X 1880(before)X 2116(beginning)X 2466(the)X 2594(installation.)X 3019(In)X 3116(any)X 3262(event,)X 3486(the)X 3614(installation)X 3998(of)X 4094(optional)X 612 2964(components)N 1019(can)X 1151(be)X 1247(done)X 1423(separately)X 1769(after)X 1937(Icon)X 2100(itself)X 2280(is)X 2353(installed.)X 732 3088(The)N 882(instructions)X 1280(that)X 1425(follow)X 1659(are)X 1783(for)X 1902(the)X 2025(installation)X 2405(of)X 2497(both)X 2664(the)X 2788(interpreter)X 3149(and)X 3291(compiler.)X 3642(If)X 3722(you)X 3868(don't)X 4063(have)X 4241(a)X 4303(C)X 612 3184(compiler,)N 944(if)X 1020(your)X 1193(resources)X 1523(are)X 1648(limited,)X 1920(or)X 2013(if)X 2088(you)X 2234(are)X 2359(new)X 2519(to)X 2607(Icon,)X 2796(you)X 2942(may)X 3106(wish)X 3283(to)X 3371(install)X 3592(only)X 3760(the)X 3884(interpreter)X 4245(ini-)X 612 3280(tially.)N 836(See)X 972(Section)X 1232(4)X 1292(for)X 1406(information)X 1804(on)X 1904(installation)X 2279(of)X 2366(the)X 2484(interpreter)X 2839(or)X 2926(compiler)X 3231(separately.)X 3 f 612 3568(2.)N 712(General)X 1008(Notes)X 1 f 732 3692(VMS)N 925(Icon)X 1088(has)X 1215(been)X 1387(built)X 1553(and)X 1689(tested)X 1896(using)X 2089(a)X 2145(recent)X 2362(release)X 2606(of)X 2693(VMS)X 2886(as)X 2973(indicated)X 3287(in)X 3369(the)X 3487(status)X 3689(\256le.)X 732 3816(The)N 879(full)X 1012(Icon)X 1177(tape)X 1333(requires)X 1614(about)X 1814(35,300)X 2056(blocks)X 2287(when)X 2483(copied)X 2719(to)X 2803(disk.)X 2998(The)X 5 f 3147(.EXE)X 1 f 3328(,)X 5 f 3373(.COM)X 1 f 3605(and)X 3744(other)X 3932(\256les)X 4088(required)X 612 3912(for)N 726(running)X 995(Icon)X 1158(take)X 1312(about)X 1510(6,600)X 1710(blocks,)X 1959(and)X 2095(the)X 2213(optional)X 2495(Icon)X 2658(program)X 2950(library)X 3184(occupies)X 3485(around)X 3728(26,100)X 3968(blocks.)X 5 f 732 4036(.EXE)N 1 f 936(\256les)X 1092(are)X 1214(included)X 1513(on)X 1616(the)X 1737(distribution)X 2129(tape,)X 2307(so)X 2402(recompilation)X 2871(is)X 2948(usually)X 3203(not)X 3329(required.)X 2 f 3661(Note:)X 1 f 3863(The)X 4012(executable)X 612 4132(\256les)N 768(as)X 858(distributed)X 1223(require)X 1474(the)X 1595(DECWindows)X 2085(shared)X 2318(library.)X 2575(If)X 2652(this)X 2790(library)X 3027(is)X 3103(not)X 3228(installed)X 3522(locally,)X 3782(it)X 3848(can)X 3982(be)X 4080(obtained)X 612 4228(from)N 788(DEC)X 968(or)X 1055(Icon)X 1218(can)X 12P VMS.BCK W[V9.DOCS]IPD250.PS;2.EXE;1K'  350(be)X 1446(rebuilt)X 1675(without)X 1939(X-Icon)X 2187(capabilities.)X 2612(See)X 2748(Step)X 2910(3)X 2970(in)X 3052(Section)X 3312(3.)X 732 4352(Complete)N 1069(source)X 1305(code)X 1483(and)X 1625(build)X 1815(procedures)X 2194(are)X 2319(included)X 2621(for)X 2741(optional)X 3030(use)X 3164(on)X 3271(systems)X 3551(having)X 3796(a)X 5 f 3861(C)X 1 f 3946(compiler.)X 4298(A)X 612 4448(total)N 774(of)X 861(approximately)X 1344(80,000)X 1584(disk)X 1737(blocks)X 1966(are)X 2085(needed)X 2333(for)X 2447(a)X 2503(full)X 2634(rebuild.)X 732 4572(Icon)N 896(requires)X 1176(no)X 1277(special)X 1521(privileges)X 1858(to)X 1941(build.)X 2166(We)X 2299(recommend)X 2700(that)X 2842(Icon)X 3007(be)X 3105(built)X 3273(under)X 3478(whatever)X 3795(account)X 4067(owns)X 4258(the)X 612 4668(\256les;)N 791(problems)X 1113(have)X 1289(been)X 1464(observed)X 1777(in)X 1862(trying)X 2076(to)X 2161(build)X 2348(Icon)X 2514(from)X 2693(other)X 2881(accounts,)X 3205(even)X 5 f 3382(SYSTEM)X 1 f 3710(,)X 3753(that)X 3896(depend)X 4151(on)X 4254(\256le)X 612 4764(access)N 838(privileges.)X 3 f 612 4956(The)N 765(Icon)X 936(Source)X 1192(Code)X 1 f 732 5080(The)N 881(source)X 1115(code)X 1291(for)X 1409(the)X 1531(Icon)X 1698(system)X 1944(is)X 2021(in)X 2107(the)X 2229(public)X 2453(domain.)X 2757(You)X 2919(may)X 3081(use)X 3212(and)X 3352(copy)X 3533(this)X 3673(material)X 3961(freely.)X 4214(This)X 612 5176(extends)N 880(to)X 965(modi\256cations,)X 1443(although)X 1746(any)X 1885(modi\256ed)X 2192(version)X 2451(of)X 2541(this)X 2679(system)X 2924(given)X 3125(to)X 3210(a)X 3269(third)X 3443(party)X 3631(should)X 3866(clearly)X 4107(identify)X 612 5272(your)N 779(modi\256cations)X 1234(as)X 1321(well)X 1479(as)X 1566(the)X 1684(original)X 1953(source.)X 732 5396(The)N 879(responsibility)X 1336(for)X 1452(the)X 1572(use)X 1701(of)X 1790(this)X 1927(material)X 2213(resides)X 2459(entirely)X 2727(with)X 2892(you.)X 3075(We)X 3210(make)X 3407(no)X 3510(warranty)X 3819(of)X 3909(any)X 4048(kind)X 4213(con-)X 612 5492(cerning)N 873(this)X 1008(material,)X 1311(nor)X 1438(do)X 1538(we)X 1652(make)X 1846(any)X 1982(claim)X 2180(as)X 2267(to)X 2349(the)X 2467(suitability)X 2806(of)X 2893(Icon)X 3056(for)X 3170(any)X 3306(application.)X 8 s 612 6144(IPD250)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(26,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(3.)N 712(The)X 865(Installation)X 1275(Process)X 612 864(Step)N 783(1:)X 870(Unloading)X 1244(the)X 1371(Distribution)X 1808(Tape)X 1 f 732 988(Thes%e)N 950(instructions)X 1349(assume)X 1611(that)X 1757(your)X 1930(tape)X 2090(drive)X 2281(is)X 2360(named)X 5 f 2602(MT:)X 1 f 2740(.)X 2806(The)X 2957(drive)X 3148(on)X 3254(your)X 3427(system)X 3675(may)X 3839(have)X 4017(a)X 4079(different)X 612 1084(name,)N 826(and)X 962(if)X 1031(so)X 1122(you)X 1262(should)X 1495(adjust)X 1706(the)X 1824(instructions)X 2217(accordingly.)X 732 1208(The)N 880(Icon)X 1046(distribution)X 1437(tape)X 1594(is)X 1670(a)X 5 f 1731(BACKUP)X 1 f 2082(tape)X 2239(containing)X 2601(four)X 2759(levels)X 2970(of)X 3061(directories.)X 3464(To)X 3577(unload)X 3819(the)X 3941(tape,)X 4119(\256rst)X 4267(set)X 612 1304(your)N 782(default)X 1028(directory)X 1341(to)X 1426(a)X 1485(parent)X 1709(directory)X 2022(that)X 2165(can)X 2300(contain)X 2559(the)X 2679(Icon)X 2844(hierarchy.)X 3210(Copy)X 3405(Icon)X 3570(to)X 3654(disk)X 3809(using)X 4004(these)X 4191(com-)X 612 1400(mands:)N 5 f 900 1544($)N 981(MOUNT/FOREIGN)X 1698(MT:)X 900 1640($)N 981(BACKUP)X 1346(MT:ICON9)X 1765([...])X 900 1736($)N 981(SET)X 1173(DEFAULT)X 1574([.V9])X 1 f 612 1880(These)N 829(commands)X 1201(create)X 1419(a)X 1480(subdirectory)X 5 f 1908(V9)X 1 f 2030(containing)X 2393(the)X 2516(Icon)X 2684(system)X 2931(and)X 3072(make)X 3272(it)X 3342(the)X 3466(current)X 3720(directory.)X 4076(For)X 4213(con-)X 612 1976(venience,)N 941(subsequent)X 1320(sections)X 1601(refer)X 1777(to)X 1862(this)X 2000(directory)X 2313(as)X 5 f 2405([V9])X 1 f 2546(,)X 2589(though)X 2834(its)X 2932(actual)X 3147(location)X 3428(is)X 3503(system)X 3747(dependent)X 4099(and)X 4237(it)X 4303(is)X 612 2072(not)N 734(necessarily)X 1111(a)X 1167(top-level)X 1472(directory.)X 732 2196(Check)N 957(the)X 1075(current)X 1323(status)X 1525(of)X 1612(the)X 1730(VMS)X 1923(distribution,)X 2331(and)X 2467(the)X 2585(VMS)X 2778(version)X 3034(under)X 3237(which)X 3453(it)X 3517(was)X 3662(prepared,)X 3984(by)X 4084(entering)X 5 f 900 2340($)N 981(TYPE)X 1226(STATUS.)X 1 f 612 2484(This)N 775(command)X 1112(and)X 1249(all)X 1351(subsequent)X 1729(ones)X 1898(assume)X 2156(that)X 5 f 2300(V9)X 1 f 2419(is)X 2494(the)X 2614(default)X 2859(directory.)X 3211(Note)X 3389(that)X 3531(if)X 3602(a)X 3660(command)X 3998(script)X 4198(fails,)X 612 2580(it)N 676(may)X 834(leave)X 1024(the)X 1142(default)X 1385(directory)X 1695(set)X 1804(incorrectly.)X 3 f 612 2772(Step)N 783(2:)X 870(Con\256guring)X 1302(the)X 1429(Host)X 1609(Name)X 1 f 732 2896(The)N 895(value)X 1107(of)X 5 f 1214(&host)X 1 f 1455(seen)X 1636(by)X 1755(an)X 1870(Icon)X 2052(program)X 2363(is)X 2455(the)X 2592(logical)X 2849(symbol)X 5 f 3125(ICON_HOST)X 1 f 3630(if)X 3718(it)X 3801(exists;)X 4044(otherwise)X 5 f 612 2992(SYS$NODE)N 1 f 1069(if)X 1141(it)X 1207(exists;)X 1433(otherwise)X 1767(the)X 1887(string)X 5 f 2093("VAX/VMS")X 1 f 2503(.)X 2565(Check)X 2792(to)X 2876(see)X 3001(if)X 5 f 3074(SYS$NODE)X 1 f 3530(is)X 3605(de\256ned)X 3863(on)X 3965(your)X 4134(system)X 612 3088(by)N 712(typing)X 5 f 900 3232($)N 981(SHOW)X 1267(LOGICAL)X 1649(SYS$NODE)X 1 f 612 3376(If)N 5 f 727(SYS$NODE)X 1 f 1220(is)X 1332(not)X 1493(de\256ned)X 1788(\(and)X 1990(you)X 2169(can't)X 2389(persuade)X 2734(your)X 2940(system)X 3221(administrator)X 3707(to)X 3829(de\256ne)X 4085(it\),)X 4236(edit)X 5 f 612 3472([V9.BIN]DEFICON.COM)N 1 f 1497(to)X 1579(supply)X 1812(a)X 1868(value)X 2062(for)X 5 f 2178(ICON_HOST)X 1 f 2644(.)X 2704(Insert)X 5 f 900 3616($)N 981(DEFINE/NOLOG)X 1621(ICON_HOST)X 2 f 2124(hostname::)X 1 f 612 3760(immediately)N 1032(before)X 1258(the)X 5 f 1378(EXIT)X 1 f 1575(line.)X 3 f 612 3952(Step)N 783(3:)X 870(Rebuilding)X 1266(Icon)X 1 f 732 4076(The)N 886(VMS)X 1089(distribution)X 1487(of)X 1584(Icon)X 1757(includes)X 2054(prebuilt)X 2333(binaries)X 2617(of)X 2714(the)X 2842(Icon)X 3015(system)X 3267(in)X 5 f 3361([V9.BIN])X 1 f 3657(.)X 3727(Rebuilding)X 4112(may)X 4280(be)X 612 4172(needed)N 866(if)X 941(your)X 1114(VMS)X 1313(system)X 1561(is)X 1640(an)X 1742(older)X 1933(version)X 2195(than)X 2359(the)X 2483(one)X 2625(indicated)X 2945(in)X 3033(the)X 3157(status)X 3365(\256le)X 3493(or)X 3586(if)X 3661(your)X 3834(system)X 4082(does)X 4254(not)X 612 4268(have)N 784(the)X 902(shareable)X 1226(DECwindows)X 1695(library)X 1929(installed.)X 2260(Otherwise,)X 2630(this)X 2765(section)X 3012(can)X 3144(be)X 3240(skipped.)X 732 4392(A)N 817(complete)X 1138(rebuild)X 1392(is)X 1472(possible)X 1761(if)X 1837(your)X 2011(system)X 2260(has)X 2395(a)X 5 f 2461(C)X 1 f 2547(compiler.)X 2900(This)X 3070(takes)X 3263(about)X 3469(two)X 3617(hours)X 3823(on)X 3931(a)X 3995(moderately)X 612 4488(loaded)N 846(pair)X 991(of)X 1078(VAX)X 1272(4000/300's.)X 1692(The)X 1837(following)X 2168(commands)X 2535(recompile)X 2876(and)X 3012(relink)X 3219(the)X 3337(Icon)X 3500(system:)X 5 f 900 4632($)N 981(SET)X 1173(VERIFY)X 900 4728($)N 981(@MAKE)X 1 f 732 4900(If)N 808(you)X 950(do)X 1052(not)X 1176(have)X 1350(X-Windows)X 1764(capability)X 2102(on)X 2204(your)X 2373(system,)X 2637(you)X 2779(may)X 2939(need)X 3113(to)X 3197(rebuild)X 3446(Icon)X 3611(so)X 3704(that)X 3846(it)X 3912(will)X 4058(not)X 4182(try)X 4294(to)KF VMS.BCK W[V9.DOCS]IPD250.PS;2.EXE;1KF/X 612 4996(link)N 758(with)X 922(the)X 1042(shareable)X 1368(DECwindows)X 1839(library)X 2075(at)X 2155(run)X 2284(time.)X 2468(To)X 2579(do)X 2680(this,)X 2836(edit)X 2977(the)X 3096(\256le)X 5 f 3221([V9.SRC.H]DEFINE.H)X 1 f 4027(and)X 4164(delete)X 612 5092(the)N 730(line)X 5 f 900 5236(#de\256ne)N 1197(Graphics)X 1553(1)X 1 f 612 5380(Then)N 797(recompile)X 1138(and)X 1274(relink)X 1481(the)X 1599(Icon)X 1762(system)X 2004(as)X 2091(explained)X 2423(above.)X 8 s 612 6144(IPD250)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(26,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Step)N 783(4:)X 870(Performing)X 1287(Some)X 1494(Simple)X 1749(Tests)X 1 f 732 796(A)N 816(few)X 963(simple)X 1202(tests)X 1370(usually)X 1627(are)X 1752(suf\256cient)X 2076(to)X 2164(con\256rm)X 2439(that)X 2586(Icon)X 2756(is)X 2836(running)X 3112(properly.)X 3451(A)X 3536(suite)X 3714(of)X 3808(nine)X 3973(tests)X 4142(is)X 4222(pro-)X 612 892(vided)N 810(for)X 924(testing)X 1157(the)X 1275(Icon)X 1438(system.)X 1720(It)X 1789(is)X 1862(run)X 1989(by)X 2089(these)X 2274(commands:)X 5 f 900 1036($)N 981(SET)X 1173(NOVERIFY)X 900 1132($)N 981(SET)X 1173(DEFAULT)X 1574([.TESTS])X 900 1228($)N 981(@SAMPLES)X 900 1324($)N 981(SET)X 1173(DEFAULT)X 1574([)X 9 f 1596(-)X 5 f 1640(])X 1 f 612 1468(Each)N 793(program's)X 1143(name)X 1337(is)X 1410(printed)X 1657(as)X 1744(it)X 1808(is)X 1881(run.)X 2048(Unless)X 2286(problems)X 2604(are)X 2723(found,)X 2950(there)X 3131(is)X 3204(no)X 3304(other)X 3489(output.)X 732 1592(If)N 808(your)X 977(system)X 1221(does)X 1390(not)X 1514(have)X 1688(a)X 1746(C)X 1821(compiler,)X 2148(or)X 2237(if)X 2308(you)X 2450(have)X 2624(not)X 2748(installed)X 3041(the)X 3161(Icon)X 3326(compiler,)X 3653(you)X 3795(can)X 3929(test)X 4062(the)X 4182(inter-)X 612 1688(preter)N 820(only)X 982(by)X 1082(using)X 5 f 900 1832($)N 981(@SAMPLES)X 9 f 1438(-)X 5 f 1482(ICONT)X 1 f 612 1976(instead)N 859(of)X 5 f 900 2120($)N 981(@SAMPLES)X 3 f 612 2360(Step)N 783(5:)X 870(Extensive)X 1219(Testing)X 1 f 732 2484(If)N 806(you)X 946(want)X 1122(to)X 1204(run)X 1331(more)X 1516(extensive)X 1839(tests,)X 2021(do:)X 5 f 900 2628($)N 981(SET)X 1173(NOVERIFY)X 900 2724($)N 981(SET)X 1173(DEFAULT)X 1574([.TESTS])X 900 2820($)N 981(@GENERAL)X 9 f 1443(-)X 5 f 1487(ICONT)X 900 2916($)N 981(@GENERAL)X 9 f 1443(-)X 5 f 1487(ICONC)X 1 f 1764(\(if)X 1873(you)X 2026(have)X 2211(the)X 2342(Icon)X 2518(compiler\))X 5 f 900 3012($)N 981(SET)X 1173(DEFAULT)X 1574([)X 9 f 1596(-)X 5 f 1640(])X 1 f 612 3156(Each)N 794(program's)X 1145(name)X 1340(is)X 1414(printed)X 1662(as)X 1750(it)X 1815(is)X 1889(run.)X 2057(Some)X 2260(differences)X 2640(are)X 2761(to)X 2845(be)X 2943(expected,)X 3271(since)X 3458(tests)X 3622(include)X 3880(date,)X 4056(time,)X 4240(and)X 612 3252(local)N 793(host)X 951(information.)X 1394(There)X 1606(also)X 1759(may)X 1921(be)X 2021(insigni\256cant)X 2440(differences)X 2822(in)X 2908(the)X 3030(format)X 3268(of)X 3359(\257oating-point)X 3818(numbers)X 4118(and)X 4258(the)X 612 3348(order)N 802(of)X 889(random)X 1154(numbers.)X 1490(Testing)X 5 f 1752(icont)X 1 f 1940(takes)X 2125(about)X 2323(twenty)X 2561(minutes;)X 2856(testing)X 5 f 3091(iconc)X 1 f 3297(takes)X 3482(about)X 3680(three)X 3861(hours.)X 3 f 612 3540(Step)N 783(6:)X 870(Installing)X 1213(Icon)X 1 f 732 3664(The)N 877(\256les)X 1030(needed)X 1278(to)X 1360(run)X 1487(Icon)X 1650(are)X 1769(placed)X 1999(in)X 5 f 2083([V9.BIN])X 1 f 2399(as)X 2486(the)X 2604(result)X 2802(of)X 2889(building)X 3175(Icon:)X 5 f 900 3808(ICONC.EXE)N 1 f 2052(Icon)X 2228(compiler)X 5 f 900 3904(ICONT.EXE)N 1 f 2052(Icon)X 2228(translator)X 2564(for)X 2691(interpreter)X 5 f 900 4000(ICONX.EXE)N 1 f 2052(Icon)X 2228(executor)X 2538(for)X 2665(interpreter)X 612 4144(Files)N 787(needed)X 1035(by)X 5 f 1137(iconc)X 1 f 1343(also)X 1492(are)X 1611(placed)X 1841(in)X 5 f 1925([V9.BIN])X 1 f 2221(:)X 5 f 900 4288(RT.OLB)N 1 f 2052(compiler)X 2370(library)X 5 f 900 4384(RT.DB)N 1 f 2052(compiler)X 2370(database)X 5 f 900 4480(RT.H)N 1 f 2052(include)X 23721(\256le)X 5 f 900 4576(X11.OPT)N 1 f 2052(options)X 2320(\256le)X 5 f 900 4672(DLRGINT.OBJ)N 1 f 2052(object)X 2281(\256le)X 2416(for)X 2543(large)X 2737(integers)X 612 4816(Some)N 833(other)X 1037(\256les)X 1209(related)X 1467(to)X 1569(installing)X 1906(Icon)X 2089(and)X 2245(the)X 2383(optional)X 2685(components)X 3112(mentioned)X 3490(earlier)X 3736(also)X 3905(are)X 4044(placed)X 4294(in)X 5 f 612 4912([V9.BIN])N 1 f 908(.)X 5 f 900 5056(DEFICON.COM)N 1 f 2052(used)X 2232(to)X 2327(de\256ne)X 2556(commands)X 2936(and)X 3085(logical)X 3336(names)X 5 f 900 5152(DEF_ICON_BIN.COM)N 1 f 2052(used)X 2232(during)X 2474(build)X 5 f 900 5248(GRTTIN.H)N 1 f 2052(include)X 2321(\256le)X 2456(for)X 5 f 2583(rtt)X 900 5344(ICON.HLB)N 1 f 2052(Icon)X 2228(help)X 2399(\256le)X 5 f 900 5440(IEXE.COM)N 1 f 2052(used)X 2232(to)X 2327(establish)X 2640(an)X 2749(Icon)X 2925(executable)X 3302(as)X 3402(a)X 3471(command)X 5 f 900 5536(RTT.EXE)N 1 f 2052(used)X 2232(to)X 2327(build)X 2524(iconx)X 2735(and)X 2884(iconc)X 732 5708(The)N 881(directory)X 5 f 1197([V9.BIN])X 1 f 1517(holds)X 1714(all)X 1818(\256les)X 1975(required)X 2267(for)X 2386(compilation)X 2793(and)X 2934(execution)X 3271(of)X 3363(Icon)X 3531(programs.)X 3899(This)X 4066(directory)X 612 5804(can)N 745(be)X 842(left)X 970(in)X 1053(place)X 1244(or)X 1332(moved)X 1571(as)X 1659(a)X 1716(unit)X 1861(to)X 1944(a)X 2001(system)X 2244(area.)X 5 f 2444(DEFICON.COM)X 1 f 3034(assumes)X 3322(that)X 3463(all)X 3563(needed)X 3811(\256les)X 3964(reside)X 4176(in)X 4258(the)X 8 s 612 6144(IPD250)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(26,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 612 672(same)N 797(directory.)X 732 796(Separate)N 1036(documentation)X 1539(explains)X 1834(the)X 1960(use)X 2095(of)X 2190(Icon,)X 2381(but)X 2511(it)X 2583(is)X 2664(worth)X 2879(noting)X 3111(here)X 3278(that)X 3426(any)X 3570(use)X 3705(of)X 3800(Icon)X 3971(requires)X 4258(the)X 612 892(execution)N 948(of)X 5 f 1041([V9.BIN]DEFICON.COM)X 1 f 1930(to)X 2016(de\256ne)X 2235(commands)X 2605(and)X 2744(logical)X 2985(names.)X 3253(A)X 3334(system)X 3579(administrator)X 4029(can)X 4164(incor-)X 612 988(porate)N 5 f 850(DEFICON.COM)X 1 f 1454(into)X 1613(the)X 1746(system)X 2003(login)X 2202(procedure,)X 2579(making)X 2854(Icon)X 3032(available)X 3357(to)X 3454(all)X 3569(users)X 3769(automatically)X 4240(and)X 612 1084(relieving)N 917(them)X 1097(of)X 1184(the)X 1302(need)X 1474(to)X 1556(run)X 1683(the)X 1801(de\256nition)X 2127(script.)X 3 f 612 1372(4.)N 712(Installing)X 1055(the)X 1182(Interpreter)X 1591(and)X 1739(Compiler)X 2084(Separately)X 1 f 732 1496(As)N 844(mentioned)X 1205(earlier,)X 1454(the)X 1575(interpreter)X 1933(and)X 2072(compiler)X 2380(can)X 2515(be)X 2615(built)X 2785(separately.)X 3175(If)X 3253(one)X 3393(is)X 3470(installed)X 3765(\256rst,)X 3933(the)X 4055(other)X 4244(can)X 612 1592(be)N 708(added)X 920(without)X 1184(rebuilding)X 1533(the)X 1651(former.)X 732 1716(Building)N 1031(the)X 1149(interpreter)X 1504(or)X 1591(compiler)X 1896(separately)X 2242(is)X 2315(very)X 2478(similar)X 2721(to)X 2804(building)X 3091(both)X 3254(at)X 3333(the)X 3452(same)X 3638(time.)X 3841(Steps)X 4035(1)X 4096(and)X 4233(2)X 4294(in)X 612 1812(Section)N 872(3)X 932(apply)X 1130(to)X 1212(both)X 1374(the)X 1492(interpreter)X 1847(and)X 1983(compiler)X 2288(and)X 2424(need)X 2596(be)X 2692(done)X 2868(only)X 3030(once.)X 732 1936(For)N 871(subsequent)X 1255(steps,)X 1463(there)X 1652(are)X 5 f 1781(.COM)X 1 f 2018(\256les)X 2179(that)X 2327(are)X 2454>8 VMS.BCK W[V9.DOCS]IPD250.PS;2.EXE;1K>(the)X 2580(same)X 2774(as)X 2870(for)X 2993(the)X 3120(combined)X 3465(build,)X 3678(but)X 3809(with)X 3980(the)X 4107(suf\256xes)X 5 f 9 f 612 2032(-)N 5 f 656(ICONT)X 1 f 925(and)X 5 f 9 f 1063(-)X 5 f 1107(ICONC)X 1 f 1385(to)X 1467(differentiate)X 1880(the)X 1998(interpreter)X 2353(and)X 2489(compiler.)X 732 2156(For)N 863(example,)X 1175(to)X 1257(build)X 1441(only)X 1603(the)X 1721(interpreter,)X 2096(the)X 2214(command)X 2550(is)X 5 f 900 2300(@)N 1018(MAKE)X 9 f 1244(-)X 5 f 1288(ICONT)X 3 f 612 2540(5.)N 712(Icon)X 883(Program)X 1211(Library)X 1 f 732 2664(The)N 883(Icon)X 1052(program)X 1350(library)X 1590(contains)X 1883(a)X 1945(variety)X 2194(of)X 2288(programs)X 2618(and)X 2761(procedures.)X 3181(This)X 3350(library)X 3591(not)X 3720(only)X 3889(is)X 3969(useful)X 4192(in)X 4281(its)X 612 2760(own)N 772(right,)X 964(but)X 1087(it)X 1152(provides)X 1449(numerous)X 1786(examples)X 2110(of)X 2198(programming)X 2655(techniques)X 3019(which)X 3236(may)X 3395(be)X 3492(helpful)X 3740(to)X 3823(novice)X 4058(Icon)X 4222(pro-)X 612 2856(grammers.)N 993(This)X 1155(optional)X 1437(component)X 1813(is)X 1886(in)X 5 f 1970([V9.IPL])X 1 f 2252(.)X 2312(It)X 2381(can)X 2513(be)X 2609(built)X 2775(by)X 5 f 900 3000($)N 981(SET)X 1173(NOVERIFY)X 900 3096($)N 981(@IPLMAKE)X 1 f 612 3240(and)N 748(tested)X 955(by)X 5 f 900 3384($)N 981(SET)X 1173(NOVERIFY)X 900 3480($)N 981(@IPLTEST)X 1 f 612 3624(The)N 757(test)X 888(procedure)X 1230(generates)X 1554(four)X 5 f 1710(DIFF)X 1 f 1908(outputs)X 2163(which)X 2379(should)X 2612(report)X 2824(no)X 2924(differences.)X 732 3748(The)N 884(Icon)X 1054(program)X 1353(library)X 1595(can)X 1735(be)X 1839(used)X 2014(with)X 2184(both)X 2354(the)X 2480(interpreter)X 2843(and)X 2987(the)X 3113(compiler.)X 3466(However,)X 3809(its)X 3912(use)X 4047(under)X 4258(the)X 612 3844(compiler)N 922(requires)X 1206(command-line)X 1694(options)X 1954(in)X 2041(some)X 2235(programs)X 2563(to)X 2650(enable)X 2885(features)X 3164(that)X 3308(are)X 3431(not)X 3557(enabled)X 3831(by)X 3935(default)X 4182(when)X 612 3940(using)N 808(the)X 929(compiler.)X 1277(Because)X 1568(of)X 1658(this)X 1797(problem,)X 2108(the)X 2230(installation)X 2609(of)X 2700(the)X 2822(the)X 2944(Icon)X 3111(program)X 3407(library)X 3645(presently)X 3963(is)X 4040(supported)X 612 4036(only)N 774(for)X 888(the)X 1006(interpreter.)X 3 f 612 4324(6.)N 712(Cleaning)X 1038(Up)X 1 f 732 4448(After)N 922(Icon)X 1085(has)X 1212(been)X 1384(built)X 1550(and)X 1686(installed,)X 1997(type)X 5 f 900 4592($)N 981(@CLEAN)X 1 f 612 4736(to)N 694(remove)X 955(duplicate)X 1269(versions,)X 1576(intermediate)X 1997(\256les,)X 2170(test)X 2301(results,)X 2550(etc.)X 732 4860(Only)N 5 f 917([V9.BIN])X 1 f 1236(is)X 1312(needed)X 1563(for)X 1680(running)X 1952(Icon)X 2118(programs.)X 2484(The)X 2632(library)X 2869(directory)X 5 f 3184([V9.IPL])X 1 f 3489(may)X 3650(be)X 3749(retained)X 4031(if)X 4104(desired.)X 612 4956(All)N 734(other)X 919(subdirectories)X 1389(of)X 5 f 1478([V9])X 1 f 1639(can)X 1771(be)X 1867(deleted)X 2119(unless)X 2339(you)X 2479(wish)X 2650(to)X 2732(keep)X 2904(the)X 3022(source)X 3252(code)X 3424(online.)X 3 f 612 5244(7.)N 712(Communicating)X 1283(with)X 1454(the)X 1581(Icon)X 1752(Project)X 1 f 732 5368(Please)N 962(let)X 1068(us)X 1165(know)X 1369(of)X 1462(any)X 1604(problems)X 1928(you)X 2074(encounter)X 2417(\(and)X 2586(your)X 2759(solutions\))X 3100(so)X 3197(that)X 3343(we)X 3463(may)X 3627(make)X 3827(things)X 4048(easier)X 4262(for)X 612 5464(others.)N 868(Our)X 1013(mailing)X 1277(address)X 1538(is)X 8 s 612 6144(IPD250)N 10 s 9 f 2403(-)X 1 f 2464(4)X 9 f 2521(-)X 8 s 1 f 4015(July)X 4135(26,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 5 f 1 f 900 672(Icon)N 1076(Project)X 900 768(Department)N 1312(of)X 1412(Computer)X 1765(Science)X 900 864(Gould)N 9 f (-)S 1 f 1144(Simpson)X 1456(Building)X 900 960(The)N 1058(University)X 1429(of)X 1529(Arizona)X 900 1056(Tucson,)N 1189(Arizona)X 1514(85721)X 900 1152(U.S.A.)N 900 1344(\(602\))N 1107(621)X 9 f (-)S 1 f 1271(8448)X 1464(\(voice\))X 900 1440(\(602\))N 1107(621)X 9 f (-)S 1 f 1271(4246)X 1464(\(fax\))X 5 f 900 1632(icon)N 9 f 1046(-)X 5 f 1090 -0.2232(project@cs.arizona.edu)AX 1 f 1993(\(Internet\))X 3 f 612 1968(8.)N 712(Acknowledgements)X 1 f 732 2092(Chris)N 925(Janton)X 1154(and)X 1290(Jan)X 1417(Trumbo)X 1695(provided)X 2000(assistance)X 2341(in)X 2423(the)X 2541(implementation)X 3063(of)X 3150(Icon)X 3313(for)X 3427(VMS.)X 3 f 612 2284(References)N 1 f 612 2436(1.)N 812(R.)X 915(E.)X 1014(Griswold,)X 1362(C.)X 1465(L.)X 1564(Jeffery)X 1818(and)X 1964(G.)X 2072(M.)X 2193(Townsend,)X 2 f 2577(Version)X 2856(9.0)X 2986(of)X 3078(the)X 3206(Icon)X 3380(Programming)X 3860(Language)X 1 f (,)S 4231(The)X 812 2532(Univ.)N 1012(of)X 1099(Arizona)X 1378(Icon)X 1541(Project)X 1788(Document)X 2142(IPD236,)X 2431(1994.)X 612 2656(2.)N 812(C.)X 906(L.)X 996(Jeffery,)X 1261(G.)X 1361(M.)X 1474(Townsend)X 1830(and)X 1968(R.)X 2063(E.)X 2154(Griswold,)X 2 f 2494(Graphics)X 2814(Facilities)X 3138(for)X 3253(the)X 3373(Icon)X 3538(Programming)X 4009(Language;)X 812 2752(Version)N 1081(9.0)X 1 f (,)S 1221(The)X 1366(Univ.)X 1566(of)X 1653(Arizona)X 1932(Icon)X 2095(Project)X 2342(Document)X 2696(IPD255,)X 2985(1994.)X 612 2876(3.)N 812(R.)X 918(E.)X 1020(Griswold,)X 2 f 1371(Supplementary)X 1885(Information)X 2300(for)X 2426(the)X 2557(Implementation)X 3113(of)X 3208(Version)X 3490(9.0)X 3623(of)X 3719(Icon)X 1 f 3862(,)X 3916(The)X 4075(Univ.)X 4289(of)X 812 2972(Arizona)N 1091(Icon)X 1254(Project)X 1501(Document)X 1855(IPD239,)X 2144(1994.)X 612 3096(4.)N 812(R.)X 922(E.)X 1028(Griswold,)X 2 f 1383(The)X 1540(Icon)X 1720(Program)X 2046(Library;)X 2354(Version)X 2640(9.0)X 1 f (,)S 2797(The)X 2959(Univ.)X 3176(of)X 3280(Arizona)X 3576(Icon)X 3757(Project)X 4022(Document)X 812 3192(IPD242,)N 1101(1994.)X 8 s 612 6144(IPD250)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(26,)X 4228(1994)X 5 p %%Trailer xt %%Pages: 5 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]IPD251.DOC;1+,^./ 4-0123KPWO560ւ7j89Jj$GHJ Using Version 9.0 of Icon Under VMS Gregg M. Townsend and Sandra L. Miller Department of Computer Science, The University of Arizona 1.__Introduction This report describes the use of Version 9.0 of Icon [1,2] under the VAX/VMS operating system. Several commands for running Icon programs are described here. These commands are not a standard part of VMS and so they must be defined before t:9 VMS.BCK^[V9.DOCS]IPD251.DOC;1EXE;1hey can be used. Unless the system administrator incorporates definitions into the system login procedure, expli- cit setup action is needed. This is performed by the command $ @[directory]DEFICON which you may wish to put in your LOGIN.COM file for convenience. directory is the directory containing the Icon executables and is dependent on the particular installation. 2.__Using_the_Interpreter Translation_and_Linking Icon source programs must be transformed into an internal code before they can be executed. This is done through use of the ICONT program. Its command arguments consist of options (if any), then one or more files, then -x and any program arguments if execution is desired. It is important to note that the options must precede all file names. The command may be summar- ized as: $ ICONT [options] files [-x arguments] Used in its simplest form, ICONT produces a file suitable for interpretation by the Icon interpreter. Processing consists of two phases: translation and linking. During translation, each Icon source file is translated into an intermediate language called ucode; during linking, the one or more ucode files are combined and a single icode file is produced. Unless the -o option is specified, the name of the resulting icode file is that IPD251 - 1 - July 22, 1994 of the first input file but with a .ICX file type. If the -x argument is used, the file is automatically executed by the interpreter and any arguments following the -x are passed as exe- cution arguments to the Icon program itself. Files of type .ICN are assumed to be Icon source programs; .ICN is assumed if no file type is specified. These programs are translated, and the intermediate code is left in two ucode files of the same name with .U1 and .U2 as file types. The ucode files normally are deleted when ICONT completes. Icon source programs may be read from standard input by giving "-" (including the quo- tation marks) as a file name. In this case, the ucode files are named STDIN.U1 and STDIN.U2 and the icode file is named STDIN.ICX. Files of type of .U, .U1, or .U2 indicate inclusion of ucode from a previously translated source file. Only one of these types should be named; the corresponding .U1 and .U2 files are both read. These files are included in the linking phase after any .ICN files have been translated. Explicitly named ucode files are not deleted. The following options are recognized by ICONT: -c Suppress the linking phase. The ucode code files are not deleted. -e efile Connect efile to &errout (similar to defining SYS$ERROR). -f s Enable full string invocation. -o output Name the icode file output. -s Suppress informative messages from the translator and linker. Normally, both informative messages and error messages are sent to standard error output. -t Arrange for &trace to have an initial value of -1 when the program is executed. Normally, &trace has an ini- tial value of 0. -u Issue warning messages for undeclared identifiers in the program. The warnings are issued during the link- ing phase. -v i Set verbosity level for informative messages to i. ''-E''Direct the results of preprocessing to SYS$OUTPUT and inhibit further processing. IPD251 - 2 - July 22, 1994 Program_Execution An icode file produced by ICONT is run by calling the inter- preter, ICONX, with the linked program as its argument. Addi- tional arguments may be given and are passed to the Icon program. For example, the command $ ICONX MYPROG PARAM1 PARAM2 PARAM3 executes the file MYPROG.ICX with three parameters. Program arguments of the form ofile, called file redirection arguments, cause ifile and ofile to be used for &input and &output respectively (SYS$INPUT and SYS$OUTPUT). An argument of the form "-e efile" immediately following the ICONX keyword connects efile to &errout (SYS$ERROR). File redirection arguments are not passed to the Icon program. The Icon program library contains many useful procedures and is practically essential for constructing graphics programs of any complexity. Library procedures are made available to ICONT through the IPATH logical name. IPATH controls the directories that are searched for ucode files specified in link declarations. The value of IPATH should be a blank-separated sequence p1 p2 ... pn where the pi name directories. Each directory is searched in turn. The current directory always is searched first, regardless of the value of IPATH. The logical name LPATH controls the directories that are searched for source files specified in preprocessor $include directives. The value of LPATH should be a blank-separated sequence p1 p2 ... pn where the pi name directories. Each directory is searched in turn. The current directory is searched first, regardless of the value of LPATH. When an Icon program is executed, several logical names are examined to determine certain execution parameters, some of which are particularly useful in adjusting Icon's storage requirements. These logical names should have numeric values. Particular care should be taken when changing default values; unreasonable values may cause Icon to malfunction. The logical names that affect execution and the interpreta- tions of their values are as follows: TRACE Initialize the value of &trace. If this logical name has a value, it overrides the translation-time -t option. IPD251 - 3 - July 22, 1994 NOERRBUF By default, &errout is buffered. If NOERRBUF is defined, &errout is not buffered. STRSIZE The size of the initial string region, in bytes. The default value of STRSIZE is 65000. BLKSIZE The size of the initial allocated block region, in bytes. The default value of BLKSIZE is 65000. HEAPSIZE and BLOCKSIZE are synonyms for BLKSIZE. COEXPSIZE The size, in words, of each co-expression block. The default value of COEXPSIZE is 2000. MSTKSIZE The size, in words, of the main interpreter stack. The default value of MSTKSIZE is 10000. QLSIZE The size, in bytes, of the region used for pointers to strings during garbage collection. The default value of QLSIZE is 5000. 3.__Using_the_Compiler Version 9.0 of Icon also includes a compiler, ICONC [3]. This compiler generates C code and hence its use also requires a C compiler. The command arguments for the Icon compiler consist of options (if any), then one or more files, then -x and any program arguments if execution is desired. It is important to note that the options must precede all file names. The command may be sum- marized as: $ ICONC [options] files [-x arguments] Used in its simplest form, ICONC produces a single .EXE file. Unless the -o option is specified, the name of the resulting .EXE file is that of the first input file but with a .EXE file type. If the -x argument is used, the file is automatically executed and any arguments following the -x are passed as execution argu- ments to the Icon program itself. Files of type .ICN are assumed to be Icon source programs; .ICN is assumed if no file type is specified. The compiler pro- duces a C program source file aG VMS.BCK^[V9.DOCS]IPD251.DOC;1EXE;1Bond include file. These intermedi- ate files are left in two files of the same name with .C and .H as file types. These files normally are deleted when ICONC com- pletes. Icon source programs may be read from standard input by giving "-" (including the quotation marks) as a file name. In this case, the intermediate files are named STDIN.C and STDIN.H IPD251 - 4 - July 22, 1994 and the executable file is named STDIN.EXE. The following options are recognized by ICONC: -c Stop compilation after producing C code. The C pro- gram source and include files are not deleted. -e efile Connect efile to &errout (similar to defining SYS$ERROR). -f string Enable features as indicated by the letters in string. a all; equivalent to delns d enable debugging features, including the effect of -f n (see below) e enable error conversion l enable large-integer arithmetic n produce code that keeps track of line numbers and file names in the source code s enable full string invocation -n string Disable specific optimizations as indicated by the letters in string. a all; equivalent to cest c control flow optimizations other than switch state- ment optimizations e expand operations in-line when reasonable (keywords are always put in-line) s optimize switch statements associated with operation invocations t type interface -o output Name the executable file output. -p arg Pass arg on to the C compiler used by ICONC. -r path Use the run-time system at path. IPD251 - 5 - July 22, 1994 -s Suppress informative messages from the compiler. Nor- mally, both informative messages and error messages are sent to standard error output. -t Arrange for &trace to have an initial value of -1 when the program is executed. Normally, &trace has an ini- tial value of 0. -u Issue warning messages for undeclared identifiers in the program. -v i Set verbosity level of informative messages to i. ''-C'' prg Have ICONC use the C compiler given by prg. ''-E''Direct the results of preprocessing to SYS$OUTPUT and inhibit further processing. The logical name LPATH controls the directories that are searched for source files specified in preprocessor $include directives and in link declarations. The value of LPATH should be a blank-separated sequence p1 p2 ... pn where the pi name directories. Each directory is searched in turn. The current directory always is searched first, regardless of the value of LPATH. 4.__The_Programming_Environment The IEXE command, which takes a file name as its single argu- ment, defines a command that allows an Icon program to be exe- cuted by name. For example, $ IEXE MYPROG defines MYPROG as a command equivalent to RUN MYPROG if MYPROG.EXE is an executable built with the Icon compiler. If MYPROG.EXE doesn't exist, it defines MYPROG as a command equivalent to ICONX MYPROG if MYPROG.ICX is an icode file built with the Icon translator. IEXE can handle disk/directory specifications associated with a file name. For example, $IEXE DISK:[DIR]MYPROG.ICX defines MYPROG as a command equivalent to ICONX MYPROG The main procedure is always called with a single argument that is a list of strings. This list contains any arguments IPD251 - 6 - July 22, 1994 passed to the program by the command that executed it. When there are no such arguments, the list is empty. If the main procedure returns or fails, the DCL status is set to 1 indicating normal termination. If stop(s) is called, the value is hexadecimal 10000000, indicating an error but producing no additional messages. A call to exit(i) terminates the program with the status specified. The call system(s) executes s as a command and produces its DCL status. The call open(s,"rp") spawns a process to execute command s and produces a file that will read the standard output of that command. Similarly, open(s,"wp") spawns a command that will read its input from data written to the file produced by the call. 5.__Warnings_and_Known_Problems Ucode and icode files produced under earlier versions of Icon are incompatible with this version. Such programs must be recom- piled. Stack overflow is checked using a heuristic that is not always effective. References 1. R. E. Griswold and M. T. Griswold, The Icon Programming Language, Prentice-Hall, Inc., Englewood Cliffs, NJ, second edition, 1990. 2. R. E. Griswold, C. L. Jeffery and G. M. Townsend, Version 9.0 of the Icon Programming Language, The Univ. of Arizona Icon Project Document IPD236, 1994. 3. R. E. Griswold, Version 9.0 of the Icon Compiler, The Univ. of Arizona Icon Project Document IPD237, 1994. IPD251 - 7 - July 22, 1994 .*[V9.DOCS]IPD251.PS;1+,].T/ 4TRu-0123KPWOU56À7΂89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Fri Jul 22 05:26:18 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx divb 1)x MPg=hi<]:rqiS;f5gIb5V>2*`uHp SBw`~nH{a!BVO>n3_svnw1ld@ $xs?L\0:t`2z0[p qTNtB3*.?PR_#$Z,& v la+_B~o](w~B pPos*"|2,x!*I=eN" NAQt f& kvr#$}g|Fo:O x}4$rlMbC{H\18 mz! /jk|SEe-,*V(Rf}\%8)Vt WC2WpAxdw &$uKDA75)^ F)5n( guQ464m# ]k>Z|i/vjWSUSr/#%!-|[#"*~UE;\wd |q]P|.h0G-ry>k\#`zz `dK~5k'!\,4 **y9\4}2D$1D/T9V@E]@:;=\ Rn0y3}{nai' G.QK4zWkB$25#f+XiH]oVYTq3^aG;h#;3jQ  p5990STexB^~Pm_4>>#bR[o)w?DB+k 9-, "H5?lU'/^Cw]<"Z:ff'&Dhp*[kAlm-E{$qkZ155'G(~=pM|{5l1e[~s0pk[wo|BiC6j 0'c_!~X+D@~W7`Clbm(q2eP`nQUQ]CS(5+gM4f_oU_0v&ng;'~j_`bH')Yi)kXCLt\W+'q; W!&|1 ]H9[:[wfk%T~:pO]~Wr Tha1~O@"ijY)" AXS((R+%}:fZQ\3xZY S&'AHE ]F9MXU 7Va<8 q'pbPbk.FU_4_gRX8lgo r<[fh2lJz58B#^6I]}pe=\XPOZ | {0 Y=5T16]8z*f-qr :}Q V<]~*}DXxr?reKrq1QXV|2C8BAfo?} zT2RH6jOjlGu^y$52D4P.X=I 9};lfA]#%s'[_Vl&!q7[91c|L2F}$%L\ZG6dhZx@IJ]A'L3-l xf&7s+bYVCoWtcI'?D]6jl94 VRmOP ZoK9| Lqp{+!%Midvc*Y%HJ'{Bd(QxYfKDH%g3cwLu|yrA_QpAOx-}JE:_:Eb5:a_If#Ac64T;b>l"e~FtRq  k \Isg>?wZj$R?Mb{VI,wxL7:Qjk.i>f6C# 7L]|K}p#}|r+c qYWH[H[ZmO\hi74; f:RJOt+tujVSV@+ F5br;gkPD5}K]aE*)vnDJ\J<5M!Ade:A3:H;n,]}YTr)"z Fmjt?+rfRYdQNQvAy<`bF[+^ _5 zL"E\=+q~TJ\o-h|AvT1YRdK5P[Tu7'S817POvV/T;:&9d$0\,Jz-9HL32v 0vfp=$cgMuTVHrRgN[BJu|Oh'pP{KaNu!VK2G%E k 0 S;'YiG~s ,N1O cS%|iKa,WV(r%#P?^dp> !:Fel ':].=2;7U}2T\EH( %_0:p;N9oYZB=("~7=BjcMa$\nx71"=t+cnW;lioA?v,TPX>]P$|HsY$$CEr,o5N&,8s^Ve)-}cQ82If1^EuE:ZI}~1HB}M?_MWS %e84l"$$ g Kbz"BPZlgdRWGk;?[E[ H?F]uGl1e  V0cf1%E[-NQL%xxZ,^yQtcpr:m2\noBb/~z=v_fS>=(XtN8j`/Y8wv .*cVZ3k\2J(!e6Jj+:o>;+$3,E'{ IvuIvVNTQp Rex1x; y6F90^j@-AnY`_ZuSw WCJu/zX`UcG 1=xt>+[R84ds@J`vXPh1AK i\ O\z0Q6Vro3kEVZuB& 42>p@Rz*a9As&IM & ##>&cUwh)z Sb^G.<4u| &%s7{^1k N7RgC~J`1 ZWGQ*17G]!oSlA5iuC`2olz EP*Y~Ua ?.8$Snv|27C@6qlV`)h1XTVJdYrj[>Rbt A "ZPE;8H9w8TT\*6r* +{m90g Lz~g\'(?M*c1 Sh!z#7#m1TDH23};` 4:g3siS\3 tD.gz=Bk;$?~ 'qF:iR}ZR!-&T(rf!CgoR1SsW s)g*d>EH?L8}8dw5wA2\ /YL O6kQX#bXDp5Dyj(Xu,{1%1zd5S)/Umot9R_!!/h{QV4d1cmw\P[xy(bw_ ?SI`n p;@,KQO *9 JR|}U_cUFL W%RX}(B]"J{S.Jh! f@<sI]G`pf}'We"&JR#'L7NR|A|WA+w`TrbQ\m+G%hc@.(g[o5)UxyLi4 c<"F$tQ3i)x*t4%L\#m_2 .NL243#5!=,Y"(g=*~vF .pK;99MKx]EKzoJ "kxT_[n1Fi &sV,oK@,Oz lNXnDQ5'gl%:Sl7\Aw5T4wB}JzL'3U~+6"f[2c5Ljg(Zu=]P0#q[;(hqfWzab<`kVDtmleWq III&Tpbm&.>0)0C  E~'gAQx!gPN`BKd:wwI`K r!!i":4(JBElC Mr'=hSbqce(rl ;r)j9m_B(;5rUJQuc/Bf_8z*#B~i-5)D1wS- AmX9=ZjcJ5U]'}a ("N7;{TX9i 0f8TE bf 3- eJXU]/ BKsvIo#n $D}6x.=A C_O Gc}4Kcn  !H4'O*L/?h:}kz#}g@%3a?5/+ym+fJJu ~ms!ih:vg Fn3Md})fYH`oGQ},2 ifjzAR1Db\?Q#HQ k} #lZ4A7LXEWI J=r2cD}q 5k.tr@Ln Ti\ f?; -6pea,5 vEsG0pXS9\X"H8- )aZ[k$c` 3c7!^b20W  LGw~k/Clfx}\,zrh`<21~{yieRS45 F|TR~Wf*`&/WfsMUD 1lWN9   a`m m^,= %sX%+n`&FF}v/G*3p{i={ 2 4)W_t]Ovg)Jh4x&"+1 \P1rs:uQT76[pf_}Oc7$K(O%zp>gJfkoKt%6x\AF\>v/ eeE%CCMdv3+8+f~aznyGig?"aC8_dIb?n@E1%rl$CB%HSK# FX"q oh !"2b)7@b PCBCam|lkYNLTeu RhBDWQU94K)2Q t=55%1#qh]!+fU2V_n|0H{a}OzP1~fLB[\@[<]w)FS2fb Lu 3\aJf-B@j%7|{B\J/1I~ EM~}N8L59b<fqEiz ]d~,#. 9bfA@ KPQYa Y 8 ?$xgo!E]a*# e\Qk 0,] %\\sE(`[1?z_dd5y-F4b+6HP]~7Dm7.Ixo1VE8 {&?-uU 7rn?aa QOy.#ij9Jn8\$<Y:Al]96RN`Tvplmu^ @?~q:K+P/ApB2%V,$ery,469~EK:  ^ K!fA?>{_e H@*-|CB ]OqKoS2 eV iC%HD= /  sa|Uf|i!^5a3scaFA1!7=kp12Qy>O7PH6ZTKd= S K7Fi~o MFgr`q*E::T'QpG 3>}gv8}oq8_3W%B/p=Tz2!-D;A5,H1Mr"[si =F8IFQl=OM9YgP{7O`'_8P:"<8Ghx]Bzg efaWX(?[O_VG. 25vVmUb$\}3qA(9j[+#GP< Pl7j+&^Rf%L[9]c>`@T;0C`S%,F(Se>y"7b2'UE*\UF4wNkjDx"3oSRGHE+]Cp DE^R4 :As`L.hwwu sHG~SXUK#S_Cf#PZEIM2CV(~nD7Jq/S "h){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /_ VMS.BCK][V9.DOCS]IPD251.PS;1.EXE;1Tru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1836 984(Using)N 2051(Version)X 2338(9.0)X 2458(of)X 2545(Icon)X 2716(Under)X 2954(VMS)X 1 f 1807 1224(Gregg)N 2028(M.)X 2139(Townsend)X 2493(and)X 2629(Sandra)X 2872(L.)X 2961(Miller)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Introduction)X 1 f 732 2236(This)N 894(report)X 1106(describes)X 1425(the)X 1543(use)X 1670(of)X 1757(Version)X 2031(9.0)X 2151(of)X 2238(Icon)X 2401([1,)X 2501(2])X 2588(under)X 2791(the)X 2909(VAX/VMS)X 3298(operating)X 3621(system.)X 732 2360(Several)N 999(commands)X 1372(for)X 1492(running)X 1767(Icon)X 1936(programs)X 2265(are)X 2390(described)X 2724(here.)X 2929(These)X 3147(commands)X 3520(are)X 3646(not)X 3775(a)X 3838(standard)X 4137(part)X 4289(of)X 612 2456(VMS)N 807(and)X 945(so)X 1038(they)X 1198(must)X 1374(be)X 1471(de\256ned)X 1728(before)X 1955(they)X 2114(can)X 2247(be)X 2344(used.)X 2552(Unless)X 2791(the)X 2910(system)X 3153(administrator)X 3601(incorporates)X 4019(de\256nitions)X 612 2552(into)N 756(the)X 874(system)X 1116(login)X 1300(procedure,)X 1662(explicit)X 1922(setup)X 2111(action)X 2327(is)X 2400(needed.)X 2688(This)X 2850(is)X 2923(performed)X 3278(by)X 3378(the)X 3496(command)X 5 f 900 2696($)N 981(@[)X 2 f 1084(directory)X 5 f 1378(]DEFICON)X 1 f 612 2840(which)N 837(you)X 986(may)X 1153(wish)X 1333(to)X 1424(put)X 1555(in)X 1646(your)X 5 f 1824(LOGIN.COM)X 1 f 2310(\256le)X 2441(for)X 2564(convenience.)X 2 f 3035(directory)X 1 f 3359(is)X 3442(the)X 3570(directory)X 3890(containing)X 4258(the)X 612 2936(Icon)N 775(executables)X 1170(and)X 1306(is)X 1379(dependent)X 1729(on)X 1829(the)X 1947(particular)X 2275(installation.)X 3 f 612 3224(2.)N 712(Using)X 927(the)X 1054(Interpreter)X 612 3416(Translation)N 1031(and)X 1179(Linking)X 1 f 732 3540(Icon)N 906(source)X 1148(programs)X 1483(must)X 1670(be)X 1778(transformed)X 2198(into)X 2354(an)X 2462(internal)X 2739(code)X 2923(before)X 3161(they)X 3331(can)X 3475(be)X 3583(executed.)X 3941(This)X 4115(is)X 4200(done)X 612 3636(through)N 882(use)X 1010(of)X 1098(the)X 5 f 1219(ICONT)X 1 f 1489(program.)X 1822(Its)X 1923(command)X 2260(arguments)X 2615(consist)X 2858(of)X 2945(options)X 3200(\(if)X 3296(any\),)X 3479(then)X 3637(one)X 3773(or)X 3860(more)X 4045(\256les,)X 4218(then)X 5 f 9 f 612 3732(-)N 5 f 656(x)X 1 f 720(and)X 860(any)X 1000(program)X 1296(arguments)X 1654(if)X 1727(execution)X 2063(is)X 2140(desired.)X 2436(It)X 2509(is)X 2586(important)X 2921(to)X 3007(note)X 3169(that)X 3313(the)X 3435(options)X 3694(must)X 3873(precede)X 4149(all)X 4254(\256le)X 612 3828(names.)N 877(The)X 1022(command)X 1358(may)X 1516(be)X 1612(summarized)X 2024(as:)X 5 f 900 3972($)N 981(ICONT)X 1 f 1263([options])X 1585(\256les)X 1751([)X 5 f 9 f 1778(-)X 5 f 1822(x)X 1 f 1895(arguments])X 612 4116(Used)N 798(in)X 881(its)X 977(simplest)X 1264(form,)X 5 f 1463(ICONT)X 1 f 1733(produces)X 2044(a)X 2101(\256le)X 2224(suitable)X 2494(for)X 2609(interpretation)X 3062(by)X 3163(the)X 3282(Icon)X 3447(interpreter.)X 3844(Processing)X 4213(con-)X 612 4212(sists)N 771(of)X 860(two)X 1002(phases:)X 2 f 1260(translation)X 1 f 1632(and)X 2 f 1770(linking)X 1 f 1992(.)X 2054(During)X 2303(translation,)X 2683(each)X 2853(Icon)X 3018(source)X 3250(\256le)X 3373(is)X 3447(translated)X 3780(into)X 3925(an)X 4022(intermedi-)X 612 4308(ate)N 731(language)X 1046(called)X 2 f 1263(ucode)X 1 f 1455(;)X 1502(during)X 1736(linking,)X 2007(the)X 2130(one)X 2271(or)X 2363(more)X 2553(ucode)X 2770(\256les)X 2928(are)X 3052(combined)X 3394(and)X 3536(a)X 3598(single)X 2 f 3815(icode)X 1 f 4015(\256le)X 4143(is)X 4222(pro-)X 612 4404(duced.)N 868(Unless)X 1110(the)X 5 f 9 f 1234(-)X 5 f 1278(o)X 1 f 1346(option)X 1574(is)X 1651(speci\256ed,)X 1980(the)X 2102(name)X 2300(of)X 2391(the)X 2513(resulting)X 2817(icode)X 3015(\256le)X 3141(is)X 3217(that)X 3360(of)X 3450(the)X 3571(\256rst)X 3718(input)X 3905(\256le)X 4030(but)X 4155(with)X 4320(a)X 5 f 612 4500(.ICX)N 1 f 793(\256le)X 921(type.)X 1125(If)X 1205(the)X 5 f 9 f 1331(-)X 5 f 1375(x)X 1 f 1441(argument)X 1770(is)X 1849(used,)X 2042(the)X 2166(\256le)X 2294(is)X 2373(automatically)X 2835(executed)X 3147(by)X 3253(the)X 3377(interpreter)X 3738(and)X 3880(any)X 4022(arguments)X 612 4596(following)N 943(the)X 5 f 9 f 1063(-)X 5 f 1107(x)X 1 f 1167(are)X 1286(passed)X 1520(as)X 1607(execution)X 1939(arguments)X 2293(to)X 2375(the)X 2493(Icon)X 2656(program)X 2948(itself.)X 732 4720(Files)N 911(of)X 1002(type)X 5 f 1166(.ICN)X 1 f 1350(are)X 1473(assumed)X 1773(to)X 1859(be)X 1959(Icon)X 2126(source)X 2360(programs;)X 5 f 2711(.ICN)X 1 f 2895(is)X 2972(assumed)X 3272(if)X 3345(no)X 3449(\256le)X 3575(type)X 3737(is)X 3814(speci\256ed.)X 4164(These)X 612 4816(programs)N 939(are)X 1062(translated,)X 1418(and)X 1558(the)X 1680(intermediate)X 2105(code)X 2281(is)X 2358(left)X 2489(in)X 2575(two)X 2719(ucode)X 2935(\256les)X 3091(of)X 3181(the)X 3302(same)X 3490(name)X 3687(with)X 5 f 3854(.U1)X ;E VMS.BCK][V9.DOCS]IPD251.PS;1.EXE;1T;"1 f 4001(and)X 5 f 4142(.U2)X 1 f 4289(as)X 612 4912(\256le)N 738(types.)X 971(The)X 1120(ucode)X 1336(\256les)X 1493(normally)X 1806(are)X 1929(deleted)X 2185(when)X 5 f 2385(ICONT)X 1 f 2658(completes.)X 3047(Icon)X 3214(source)X 3448(programs)X 3775(may)X 3937(be)X 4037(read)X 4200(from)X 612 5008(standard)N 908(input)X 1096(by)X 1200(giving)X 5 f 1430(")X 9 f 1458(-)X 5 f 1502(")X 1 f 1554(\(including)X 1907(the)X 2029(quotation)X 2355(marks\))X 2602(as)X 2693(a)X 2753(\256le)X 2879(name.)X 3117(In)X 3208(this)X 3346(case,)X 3528(the)X 3649(ucode)X 3864(\256les)X 4020(are)X 4142(named)X 5 f 612 5104(STDIN.U1)N 1 f 996(and)X 5 f 1134(STDIN.U2)X 1 f 1518(and)X 1654(the)X 1772(icode)X 1966(\256le)X 2088(is)X 2161(named)X 5 f 2397(STDIN.ICX)X 1 f 2792(.)X 732 5228(Files)N 907(of)X 994(type)X 1152(of)X 5 f 1241(.U)X 1 f (,)S 5 f 1363(.U1)X 1 f 1487(,)X 1527(or)X 5 f 1616(.U2)X 1 f 1761(indicate)X 2036(inclusion)X 2350(of)X 2438(ucode)X 2651(from)X 2828(a)X 2885(previously)X 3244(translated)X 3577(source)X 3808(\256le.)X 3971(Only)X 4152(one)X 4289(of)X 612 5324(these)N 806(types)X 1004(should)X 1246(be)X 1351(named;)X 1616(the)X 1743(corresponding)X 5 f 2233(.U1)X 1 f 2386(and)X 5 f 2533(.U2)X 1 f 2686(\256les)X 2848(are)X 2976(both)X 3147(read.)X 3355(These)X 3576(\256les)X 3737(are)X 3864(included)X 4168(in)X 4258(the)X 612 5420(linking)N 858(phase)X 1061(after)X 1229(any)X 5 f 1367(.ICN)X 1 f 1547(\256les)X 1700(have)X 1872(been)X 2044(translated.)X 2416(Explicitly)X 2751(named)X 2985(ucode)X 3197(\256les)X 3350(are)X 3469(not)X 3591(deleted.)X 732 5544(The)N 877(following)X 1208(options)X 1463(are)X 1582(recognized)X 1955(by)X 5 f 2057(ICONT)X 1 f 2306(:)X 8 s 612 6144(IPD251)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(22,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 5 f 9 f 900 672(-)N 5 f 944(c)X 1 f 1140(Suppress)X 1449(the)X 1567(linking)X 1813(phase.)X 2056(The)X 2201(ucode)X 2413(code)X 2585(\256les)X 2738(are)X 2857(not)X 2979(deleted.)X 5 f 9 f 900 796(-)N 5 f 944(e)X 2 f 1008(e\256le)X 1 f 1140 892(Connect)N 2 f 1427(e\256le)X 1 f 1581(to)X 5 f 1665(&errout)X 1 f 1946(\(similar)X 2215(to)X 2297(de\256ning)X 5 f 2581(SYS$ERROR)X 1 f 3073(\).)X 5 f 9 f 900 1016(-)N 5 f 944(f)X 988(s)X 1 f 1140(Enable)X 1383(full)X 1514(string)X 1716(invocation.)X 5 f 9 f 900 1140(-)N 5 f 944(o)X 2 f 1008(output)X 1 f 1140 1236(Name)N 1352(the)X 1470(icode)X 1664(\256le)X 2 f 1786(output)X 1 f 1990(.)X 5 f 9 f 900 1360(-)N 5 f 944(s)X 1 f 1140(Suppress)X 1460(informative)X 1866(messages)X 2201(from)X 2389(the)X 2519(translator)X 2854(and)X 3002(linker.)X 3261(Normally,)X 3620(both)X 3794(informative)X 4200(mes-)X 1140 1456(sages)N 1334(and)X 1470(error)X 1647(messages)X 1970(are)X 2089(sent)X 2238(to)X 2320(standard)X 2612(error)X 2789(output.)X 5 f 9 f 900 1580(-)N 5 f 944(t)X 1 f 1140(Arrange)X 1425(for)X 5 f 1542(&trace)X 1 f 1793(to)X 1876(have)X 2049(an)X 2146(initial)X 2353(value)X 2548(of)X 9 f 2636(-)X 1 f 2680(1)X 2742(when)X 2938(the)X 3058(program)X 3352(is)X 3427(executed.)X 3775(Normally,)X 5 f 4126(&trace)X 1 f 1140 1676(has)N 1267(an)X 1363(initial)X 1569(value)X 1763(of)X 1850(0.)X 5 f 9 f 900 1800(-)N 5 f 944(u)X 1 f 1140(Issue)X 1329(warning)X 1616(messages)X 1943(for)X 2061(undeclared)X 2438(identi\256ers)X 2782(in)X 2869(the)X 2992(program.)X 3329(The)X 3479(warnings)X 3798(are)X 3922(issued)X 4147(during)X 1140 1896(the)N 1258(linking)X 1504(phase.)X 5 f 9 f 900 2020(-)N 5 f 944(v)X 2 f 1006(i)X 1 f 1140(Set)X 1262(verbosity)X 1580(level)X 1756(for)X 1870(informative)X 2264(messages)X 2587(to)X 2 f 2669(i)X 1 f 2691(.)X 5 f 9 f 900 2144(\242\242-)N 5 f 984(E)X 9 f 1037(\242\242)X 1 f 1140(Direct)X 1361(the)X 1479(results)X 1708(of)X 1795(preprocessing)X 2261(to)X 5 f 2345(SYS$OUTPUT)X 1 f 2897(and)X 3033(inhibit)X 3261(further)X 3500(processing.)X 3 f 612 2336(Program)N 940(Execution)X 1 f 732 2460(An)N 851(icode)X 1046(\256le)X 1169(produced)X 1489(by)X 5 f 1592(ICONT)X 1 f 1862(is)X 1936(run)X 2064(by)X 2166(calling)X 2406(the)X 2526(interpreter,)X 5 f 2905(ICONX)X 1 f 3158(,)X 3200(with)X 3364(the)X 3484(linked)X 3706(program)X 4000(as)X 4089(its)X 4186(argu-)X 612 2556(ment.)N 832(Additional)X 1194(arguments)X 1548(may)X 1706(be)X 1802(given)X 2000(and)X 2136(are)X 2255(passed)X 2489(to)X 2571(the)X 2689(Icon)X 2852(program.)X 3184(For)X 3315(example,)X 3627(the)X 3745(command)X 5 f 900 2700($)N 981(ICONX)X 1271(MYPROG)X 1663(PARAM1)X 2028(PARAM2)X 2393(PARAM3)X 1 f 612 2844(executes)N 909(the)X 1027(\256le)X 5 f 1151(MYPROG.ICX)X 1 f 1681(with)X 1843(three)X 2024(parameters.)X 732 2968(Program)N 1028(arguments)X 1382(of)X 1469(the)X 1587(form)X 5 f 1765(<)X 2 f 1812(i\256le)X 1 f 1952(and)X 5 f 2090(>)X 2 f 2137(o\256le)X 1 f 2275(,)X 2315(called)X 2527(\256le)X 2649(redirection)X 3017(arguments,)X 3392(cause)X 2 f 3592(i\256le)X 1 f 3733(and)X 2 f 3870(o\256le)X 1 f 4029(to)X 4112(be)X 4209(used)X 612 3064(for)N 5 f 740(&input)X 1 f 997(and)X 5 f 1147(&output)X 1 f 1452(respectively)X 1872(\()X 5 f 1899(SYS$INPUT)X 1 f 2374(and)X 5 f 2524(SYS$OUTPUT)X 1 f 3056(\).)X 3155(An)X 3285(argument)X 3620(of)X 3719(the)X 3849(form)X 4037(")X 5 f 9 f 4070(-)X 5 f 4114(e)X 2 f 4189(e\256le)X 1 f 4323(")X 612 3160(immediately)N 1034(following)X 1367(the)X 5 f 1489(ICONX)X 1 f 1764(keyword)X 2067(connects)X 2 f 2370(e\256le)X 1 f 2526(to)X 5 f 2612(&errout)X 1 f 2895(\()X 5 f 2922(SYS$ERROR)X 1 f 3414(\).)X 3504(File)X 3651(redirection)X 4022(arguments)X 612 3256(are)N 731(not)X 853(passed)X 1087(to)X 1169(the)X 1287(Icon)X 1450(program.)X 732 3380(The)N 880(Icon)X 1046(program)X 1341(library)X 1578(contains)X 1868(many)X 2069(useful)X 2289(procedures)X 2666(and)X 2806(is)X 2883(practically)X 3246(essential)X 3546(for)X 3664(constructing)X 4084(graphics)X 612 3476(programs)N 935(of)X 1022(any)X 1158(complexity.)X 732 3600(Library)N 998(procedures)X 1376(are)X 1500(made)X 1699(available)X 2014(to)X 5 f 2103(ICONT)X 1 f 2377(through)X 2651(the)X 5 f 2776(IPATH)X 1 f 3036(logical)X 3279(name.)X 5 f 3500(IPATH)X 1 f 3760(controls)X 4044(the)X 4168(direc-)X 612 3696(tories)N 825(that)X 980(are)X 1113(searched)X 1429(for)X 1557(ucode)X 1783(\256les)X 1950(speci\256ed)X 2269(in)X 2365(link)X 2523(declarations.)X 2985(The)X 3144(value)X 3352(of)X 5 f 3455(IPATH)X 1 f 3724(should)X 3971(be)X 4081(a)X 4151(blank-)X 612 3792(separated)N 943(sequence)X 2 f 1265(p1)X 1385(p2)X 1 f 1492(.)X 1518(.)X 1544(.)X 2 f 1632(pn)X 1 f 1740(where)X 1965(the)X 2 f 2091(pi)X 1 f 2181(name)X 2383(directories.)X 2790(Each)X 2979(directory)X 3297(is)X 3378(searched)X 3688(in)X 3778(turn.)X 3975(The)X 4128(current)X 612 3888(directory)N 922(always)X 1165(is)X 1238(searched)X 1540(\256rst,)X 1704(regardless)X 2050(of)X 2137(the)X 2255(value)X 2449(of)X 5 f 2538(IPATH)X 1 f 2773(.)X 732 4012(The)N 887(logical)X 1135(name)X 5 f 1341(LPATH)X 1 f 1628(controls)X 1916(the)X 2044(directories)X 2413(that)X 2563(are)X 2693(searched)X 3006(for)X 3131(source)X 3372(\256les)X 3536(speci\256ed)X 3852(in)X 3945(preprocessor)X 5 f 612 4108($include)N 1 f 934(directives.)X 1292(The)X 1443(value)X 1643(of)X 5 f 1738(LPATH)X 1 f 2021(should)X 2260(be)X 2362(a)X 2424(blank-separated)X 2959(sequence)X 2 f 3280(p1)X 3400(p2)X 1 f 3506(.)X 3532(.)X 3558(.)X 2 f 3644(pn)X 1 f 3750(where)X 3972(the)X 2 f 4095(pi)X 1 f 4182(name)X 612 4204(directories.)N 1020(Each)X 1210(directory)X 1529(is)X 1611(searched)X 1922(in)X 2013(turn.)X 2211(The)X 2365(current)X 2622(directory)X 2941(is)X 3023(searched)X 3334(\256rst,)X 3507(regardless)X 3862(of)X 3958(the)X 4085(value)X 4289(of)X 5 f 612 4300(LPATH)N 1 f 869(.)X 732 4424(When)N 946(an)X 1044(Icon)X 120 VMS.BCK][V9.DOCS]IPD251.PS;1.EXE;1T19(program)X 1504(is)X 1580(executed,)X 1909(several)X 2160(logical)X 2401(names)X 2629(are)X 2751(examined)X 3086(to)X 3171(determine)X 3515(certain)X 3757(execution)X 4092(parame-)X 612 4520(ters,)N 778(some)X 976(of)X 1072(which)X 1297(are)X 1425(particularly)X 1824(useful)X 2049(in)X 2140(adjusting)X 2462(Icon's)X 2692(storage)X 2953(requirements.)X 3441(These)X 3662(logical)X 3909(names)X 4143(should)X 612 4616(have)N 784(numeric)X 1067(values.)X 1332(Particular)X 1664(care)X 1819(should)X 2053(be)X 2150(taken)X 2345(when)X 2540(changing)X 2855(default)X 3099(values;)X 3347(unreasonable)X 3792(values)X 4018(may)X 4177(cause)X 612 4712(Icon)N 775(to)X 857(malfunction.)X 732 4836(The)N 877(logical)X 1115(names)X 1340(that)X 1480(affect)X 1684(execution)X 2016(and)X 2152(the)X 2270(interpretations)X 2753(of)X 2840(their)X 3007(values)X 3232(are)X 3351(as)X 3438(follows:)X 5 f 900 4960(TRACE)N 1 f 1060 5056(Initialize)N 1375(the)X 1503(value)X 1707(of)X 5 f 1806(&trace)X 1 f 2036(.)X 2106(If)X 2190(this)X 2335(logical)X 2583(name)X 2787(has)X 2924(a)X 2991(value,)X 3216(it)X 3291(overrides)X 3621(the)X 3750(translation-time)X 5 f 9 f 4290(-)X 5 f 4334(t)X 1 f 1060 5152(option.)N 5 f 900 5276(NOERRBUF)N 1 f 1060 5372(By)N 1173(default,)X 5 f 1438(&errout)X 1 f 1719(is)X 1792(buffered.)X 2125(If)X 5 f 2201(NOERRBUF)X 1 f 2670(is)X 2743(de\256ned,)X 5 f 3021(&errout)X 1 f 3302(is)X 3375(not)X 3497(buffered.)X 5 f 900 5496(STRSIZE)N 1 f 1060 5592(The)N 1205(size)X 1350(of)X 1437(the)X 1555(initial)X 1761(string)X 1963(region,)X 2208(in)X 2290(bytes.)X 2519(The)X 2664(default)X 2907(value)X 3101(of)X 5 f 3190(STRSIZE)X 1 f 3547(is)X 3620(65000.)X 8 s 612 6144(IPD251)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(22,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(BLKSIZE)N 1 f 1060 768(The)N 1218(size)X 1376(of)X 1476(the)X 1607(initial)X 1827(allocated)X 2151(block)X 2363(region,)X 2622(in)X 2718(bytes.)X 2961(The)X 3120(default)X 3377(value)X 3585(of)X 5 f 3688(BLKSIZE)X 1 f 4049(is)X 4136(65000.)X 5 f 1060 864(HEAPSIZE)N 1 f 1474(and)X 5 f 1612(BLOCKSIZE)X 1 f 2079(are)X 2198(synonyms)X 2542(for)X 5 f 2658(BLKSIZE)X 1 f 2985(.)X 5 f 900 988(COEXPSIZE)N 1 f 1060 1084(The)N 1205(size,)X 1370(in)X 1452(words,)X 1688(of)X 1775(each)X 1943(co-expression)X 2409(block.)X 2647(The)X 2792(default)X 3035(value)X 3229(of)X 5 f 3318(COEXPSIZE)X 1 f 3794(is)X 3867(2000.)X 5 f 900 1208(MSTKSIZE)N 1 f 1060 1304(The)N 1205(size,)X 1370(in)X 1452(words,)X 1688(of)X 1775(the)X 1893(main)X 2073(interpreter)X 2428(stack.)X 2653(The)X 2798(default)X 3041(value)X 3235(of)X 5 f 3324(MSTKSIZE)X 1 f 3743(is)X 3816(10000.)X 5 f 900 1428(QLSIZE)N 1 f 1060 1524(The)N 1213(size,)X 1387(in)X 1478(bytes,)X 1696(of)X 1792(the)X 1919(region)X 2153(used)X 2329(for)X 2452(pointers)X 2739(to)X 2830(strings)X 3072(during)X 3310(garbage)X 3594(collection.)X 3979(The)X 4133(default)X 1060 1620(value)N 1254(of)X 5 f 1343(QLSIZE)X 1 f 1646(is)X 1719(5000.)X 3 f 612 1908(3.)N 712(Using)X 927(the)X 1054(Compiler)X 1 f 732 2032(Version)N 1014(9.0)X 1142(of)X 1237(Icon)X 1408(also)X 1565(includes)X 1860(a)X 1924(compiler,)X 5 f 2259(ICONC)X 1 f 2545([3].)X 2707(This)X 2877(compiler)X 3190(generates)X 3522(C)X 3603(code)X 3783(and)X 3928(hence)X 4145(its)X 4249(use)X 612 2128(also)N 766(requires)X 1050(a)X 1111(C)X 1189(compiler.)X 1539(The)X 1689(command)X 2030(arguments)X 2388(for)X 2506(the)X 2628(Icon)X 2795(compiler)X 3104(consist)X 3350(of)X 3441(options)X 3700(\(if)X 3800(any\),)X 3987(then)X 4149(one)X 4289(or)X 612 2224(more)N 799(\256les,)X 974(then)X 5 f 9 f 1136(-)X 5 f 1180(x)X 1 f 1243(and)X 1382(any)X 1521(program)X 1816(arguments)X 2173(if)X 2245(execution)X 2580(is)X 2656(desired.)X 2951(It)X 3023(is)X 3099(important)X 3433(to)X 3518(note)X 3679(that)X 3822(the)X 3943(options)X 4201(must)X 612 2320(precede)N 883(all)X 983(\256le)X 1105(names.)X 1370(The)X 1515(command)X 1851(may)X 2009(be)X 2105(summarized)X 2517(as:)X 5 f 900 2464($)N 981(ICONC)X 1 f 1272([options])X 1594(\256les)X 1760([)X 5 f 9 f 1787(-)X 5 f 1831(x)X 1 f 1904(arguments])X 612 2608(Used)N 801(in)X 887(its)X 986(simplest)X 1276(form,)X 5 f 1478(ICONC)X 1 f 1760(produces)X 2074(a)X 2135(single)X 5 f 2353(.EXE)X 1 f 2559(\256le.)X 2726(Unless)X 2969(the)X 5 f 9 f 3094(-)X 5 f 3138(o)X 1 f 3207(option)X 3436(is)X 3514(speci\256ed,)X 3844(the)X 3967(name)X 4166(of)X 4258(the)X 612 2704(resulting)N 922(.EXE)X 1128(\256le)X 1260(is)X 1343(that)X 1493(of)X 1589(the)X 1716(\256rst)X 1869(input)X 2062(\256le)X 2193(but)X 2324(with)X 2495(a)X 5 f 2562(.EXE)X 1 f 2772(\256le)X 2903(type.)X 3110(If)X 3193(the)X 5 f 9 f 3322(-)X 5 f 3366(x)X 1 f 3435(argument)X 3767(is)X 3849(used,)X 4045(the)X 4172(\256le)X 4303(is)X 612 2800(automatically)N 1070(executed)X 1378(and)X 1516(any)X 1654(arguments)X 2010(following)X 2343(the)X 5 f 9 f 2465(-)X 5 f 2509(x)X 1 f 2571(are)X 2693(passed)X 2930(as)X 3020(execution)X 3355(arguments)X 3712(to)X 3797(the)X 3918(Icon)X 4084(program)X 612 2896(itself.)N 732 3020(Files)N 914(of)X 1008(type)X 5 f 1175(.ICN)X 1 f 1362(are)X 1488(assumed)X 1791(to)X 1880(be)X 1983(Icon)X 2153(source)X 2390(programs;)X 5 f 2744(.ICN)X 1 f 2931(is)X 3012(assumed)X 3316(if)X 3393(no)X 3501(\256le)X 3631(type)X 3797(is)X 3878(speci\256ed.)X 4231(The)X 612 3116(compiler)N 918(produces)X 1229(a)X 5 f 1288(C)X 1 f 1367(program)X 1660(source)X 1891(\256le)X 2014(and)X 2151(include)X 2408(\256le.)X 2571(These)X 2784(intermediate)X 3206(\256les)X 3360(are)X 3480(left)X 3608(in)X 3691(two)X 3832(\256les)X 3986(of)X 4073(the)X 4191(same)X 612 3212(name)N 806(with)X 5 f 970(.C)X 1 f 1070(and)X 5 f 1208(.H)X 1 f 1308(as)X 1395(\256le)X 1517(types.)X 1746(These)X 1959(\256les)X 2113(normally)X 2423(are)X 2543(deleted)X 2796(when)X 5 f 2993(ICONC)X 1 f 3272(completes.)X 3658(Icon)X 3822(source)X 4053(programs)X 612 3308(may)N 771(be)X 868(read)X 1028(from)X 1205(standard)X 1498(input)X 1683(by)X 1784(giving)X 5 f 2011(")X 9 f 2039(-)X 5 f 2083(")X 1 f 2132(\(including)X 2481(the)X 2599(quotation)X 2921(marks\))X 3164(as)X 3251(a)X 3307(\256le)X 3429(name.)X 3663(In)X 3750(this)X 3885(case,)X 4064(the)X 4182(inter-)X 612 3404(mediate)N 886(\256les)X 1039(are)X 1158(named)X 5 f 1394(STDIN.C)X 1 f 1734(and)X 5 f 1872(STDIN.H)X 1 f 2212(and)X 2348(the)X 2466(executable)X 2830(\256le)X 2952(is)X 3025(named)X 5 f 3261(STDIN.EXE)X 1 f 3682(.)X 732 3528(The)N 877(following)X 1208(options)X 1463(are)X 1582(recognized)X 1955(by)X 5 f 2057(ICONC)X 1 f 2315(:)X 5 f 9 f 900 3652(-)N 5 f 944(c)X 1 f 1140(Stop)X 1306(compilation)X 1708(after)X 1876(producing)X 2221(C)X 2294(code.)X 2506(The)X 2651(C)X 2724(program)X 3016(source)X 3246(and)X 3382(include)X 3638(\256les)X 3791(are)X 3910(not)X 4032(deleted.)X 5 f 9 f 900 3776(-)N 5 f 944(e)X 2 f 1008(e\256le)X 1 f 1140 3872(Connect)N 2 f 1427(e\256le)X 1 f 1581(to)X 5 f 1665(&errout)X 1 f 1946(\(similar)X 2215(to)X 2297(de\256ning)X 5 f 2581(SYS$ERROR)X 1 f 3073(\).)X 5 f 9 f 900 3996(-)N 5 f 944(f)X 2 f 986(string)X 1 f 1140 4092(Enable)N 1383(features)X 1658(as)X 1745(indicated)X 2059(by)X 2159(the)X 2277(letters)X 2493(in)X 2 f 2575(string)X 1 f 2761(.)X 5 f 1100 4216(a)N 1 f 1220(all;)X 1342(equivalent)X 1696(to)X 5 f 1780(delns)X 1100 4340(d)N 1 f 1220(enable)X 1450(debugging)X 1808(features,)X 2103(including)X 2425(the)X 2543(effect)X 2747(of)X 5 f 9 f 2836(-)X 5 f 2880(f)X 2924(n)X 1 f 2988(\(see)X 3138(below\))X 5 f 1100 4464(e)N 1 f 1220(enable)X 1450(error)X 1627(conversion)X 5 f 1100 4588(l)N 1 f 1220(enable)X 1450(large-integer)X 1881(arithmetic)X 5 f 1100 4712(n)N 1 f 1220(produce)X 1499(code)X 1671(that)X 1811(keeps)X 20Pz VMS.BCK][V9.DOCS]IPD251.PS;1.EXE;1Tp@014(track)X 2195(of)X 2282(line)X 2422(numbers)X 2718(and)X 2854(\256le)X 2976(names)X 3201(in)X 3283(the)X 3401(source)X 3631(code)X 5 f 1100 4836(s)N 1 f 1220(enable)X 1450(full)X 1581(string)X 1783(invocation)X 5 f 9 f 900 4960(-)N 5 f 944(n)X 2 f 1008(string)X 1 f 1100 5056(Disable)N 1365(speci\256c)X 1630(optimizations)X 2085(as)X 2172(indicated)X 2486(by)X 2586(the)X 2704(letters)X 2920(in)X 2 f 3002(string)X 1 f 3188(.)X 5 f 1100 5180(a)N 1 f 1220(all;)X 1342(equivalent)X 1696(to)X 5 f 1780(cest)X 1100 5304(c)N 1 f 1220(control)X 1467(\257ow)X 1629(optimizations)X 2084(other)X 2269(than)X 2427(switch)X 2656(statement)X 2983(optimizations)X 5 f 1100 5428(e)N 1 f 1220(expand)X 1472(operations)X 1826(in-line)X 2055(when)X 2249(reasonable)X 2613(\(keywords)X 2972(are)X 3091(always)X 3334(put)X 3456(in-line\))X 5 f 1100 5552(s)N 1 f 1220(optimize)X 1520(switch)X 1749(statements)X 2107(associated)X 2457(with)X 2619(operation)X 2942(invocations)X 8 s 612 6144(IPD251)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(22,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 5 f 1100 672(t)N 1 f 1220(type)X 1378(interface)X 5 f 9 f 900 796(-)N 5 f 944(o)X 2 f 1008(output)X 1 f 1100 892(Name)N 1312(the)X 1430(executable)X 1794(\256le)X 2 f 1916(output)X 1 f 2120(.)X 5 f 9 f 900 1016(-)N 5 f 944(p)X 2 f 1008(arg)X 1 f 1100 1112(Pass)N 2 f 1262(arg)X 1 f 1393(on)X 1493(to)X 1575(the)X 1693(C)X 1766(compiler)X 2071(used)X 2238(by)X 5 f 2340(ICONC)X 1 f 2598(.)X 5 f 9 f 900 1236(-)N 5 f 944(r)X 2 f 991(path)X 1 f 1100 1332(Use)N 1245(the)X 1363(run-time)X 1659(system)X 1901(at)X 2 f 1979(path)X 1 f 2121(.)X 5 f 9 f 900 1456(-)N 5 f 944(s)X 1 f 1100(Suppress)X 1415(informative)X 1815(messages)X 2144(from)X 2326(the)X 2450(compiler.)X 2802(Normally,)X 3156(both)X 3325(informative)X 3726(messages)X 4056(and)X 4199(error)X 1100 1552(messages)N 1423(are)X 1542(sent)X 1691(to)X 1773(standard)X 2065(error)X 2242(output.)X 5 f 9 f 900 1676(-)N 5 f 944(t)X 1 f 1100(Arrange)X 1387(for)X 5 f 1507(&trace)X 1 f 1761(to)X 1847(have)X 2023(an)X 2123(initial)X 2333(value)X 2531(of)X 9 f 2622(-)X 1 f 2666(1)X 2730(when)X 2928(the)X 3050(program)X 3346(is)X 3423(executed.)X 3773(Normally,)X 5 f 4126(&trace)X 1 f 1100 1772(has)N 1227(an)X 1323(initial)X 1529(value)X 1723(of)X 1810(0.)X 5 f 9 f 900 1896(-)N 5 f 944(u)X 1 f 1100(Issue)X 1285(warning)X 1568(messages)X 1891(for)X 2005(undeclared)X 2378(identi\256ers)X 2718(in)X 2800(the)X 2918(program.)X 5 f 9 f 900 2020(-)N 5 f 944(v)X 2 f 1004(i)X 1 f 1098(Set)X 1220(verbosity)X 1538(level)X 1714(of)X 1801(informative)X 2195(messages)X 2518(to)X 2 f 2600(i)X 1 f 2622(.)X 5 f 9 f 900 2144(\242\242-)N 5 f 984(C)X 9 f 1042(\242\242)X 2 f 1104(prg)X 1 f 1100 2240(Have)N 5 f 1292(ICONC)X 1 f 1570(use)X 1697(the)X 1815(C)X 1888(compiler)X 2193(given)X 2391(by)X 2 f 2491(prg)X 1 f 2602(.)X 5 f 9 f 900 2364(\242\242-)N 5 f 984(E)X 9 f 1037(\242\242)X 1 f 1100(Direct)X 1321(the)X 1439(results)X 1668(of)X 1755(preprocessing)X 2221(to)X 5 f 2305(SYS$OUTPUT)X 1 f 2857(and)X 2993(inhibit)X 3221(further)X 3460(processing.)X 732 2536(The)N 887(logical)X 1135(name)X 5 f 1341(LPATH)X 1 f 1628(controls)X 1916(the)X 2044(directories)X 2413(that)X 2563(are)X 2693(searched)X 3006(for)X 3131(source)X 3372(\256les)X 3536(speci\256ed)X 3852(in)X 3945(preprocessor)X 5 f 612 2632($include)N 1 f 930(directives)X 1264(and)X 1402(in)X 1486(link)X 1631(declarations.)X 2080(The)X 2226(value)X 2421(of)X 5 f 2511(LPATH)X 1 f 2789(should)X 3023(be)X 3120(a)X 3177(blank-separated)X 3707(sequence)X 2 f 4023(p1)X 4143(p2)X 1 f 4244(.)X 4270(.)X 4296(.)X 2 f 612 2728(pn)N 1 f 713(where)X 931(the)X 2 f 1050(pi)X 1 f 1133(name)X 1329(directories.)X 1730(Each)X 1913(directory)X 2225(is)X 2300(searched)X 2604(in)X 2688(turn.)X 2879(The)X 3026(current)X 3276(directory)X 3588(always)X 3833(is)X 3908(searched)X 4212(\256rst,)X 612 2824(regardless)N 958(of)X 1045(the)X 1163(value)X 1357(of)X 5 f 1446(LPATH)X 1 f 1703(.)X 3 f 612 3112(4.)N 712(The)X 865(Programming)X 1366(Environment)X 1 f 732 3236(The)N 5 f 879(IEXE)X 1 f 1080(command,)X 1436(which)X 1652(takes)X 1837(a)X 1893(\256le)X 2015(name)X 2209(as)X 2296(its)X 2392(single)X 2604(argument,)X 2948(de\256nes)X 3196(a)X 3253(command)X 3590(that)X 3731(allows)X 3961(an)X 4058(Icon)X 4222(pro-)X 612 3332(gram)N 797(to)X 879(be)X 975(executed)X 1281(by)X 1381(name.)X 1595(For)X 1726(example,)X 5 f 900 3476($)N 981(IEXE)X 1199(MYPROG)X 1 f 612 3620(de\256nes)N 5 f 863(MYPROG)X 1 f 1240(as)X 1330(a)X 1389(command)X 1728(equivalent)X 2085(to)X 5 f 2172(RUN)X 2371(MYPROG)X 1 f 2749(if)X 5 f 2823(MYPROG.EXE)X 1 f 3382(is)X 3458(an)X 3557(executable)X 3924(built)X 4093(with)X 4258(the)X 612 3716(Icon)N 798(compiler.)X 1146(If)X 5 f 1245(MYPROG.EXE)X 1 f 1824(doesn't)X 2103(exist,)X 2317(it)X 2404(de\256nes)X 5 f 2676(MYPROG)X 1 f 3074(as)X 3184(a)X 3263(command)X 3621(equivalent)X 3997(to)X 5 f 4103(ICONX)X 612 3812(MYPROG)N 1 f 987(if)X 5 f 1058(MYPROG.ICX)X 1 f 1588(is)X 1661(an)X 1757(icode)X 1951(\256le)X 2073(built)X 2239(with)X 2401(the)X 2519(Icon)X 2682(translator.)X 5 f 732 3936(IEXE)N 1 f 933(can)X 1065(handle)X 1299(disk/directory)X 1764(speci\256cations)X 2220(associated)X 2570(with)X 2732(a)X 2788(\256le)X 2910(name.)X 3124(For)X 3255(example,)X 5 f 900 4080($IEXE)N 1162(DISK:[DIR]MYPROG.ICX)X 1 f 612 4224(de\256nes)N 5 f 861(MYPROG)X 1 f 1236(as)X 1323(a)X 1379(command)X 1715(equivalent)X 2069(to)X 5 f 900 4368(ICONX)N 1190(MYPROG)X 1 f 732 4540(The)N 879(main)X 1062(procedure)X 1407(is)X 1483(always)X 1729(called)X 1944(with)X 2109(a)X 2168(single)X 2382(argument)X 2708(that)X 2851(is)X 2927(a)X 2986(list)X 3106(of)X 3196(strings.)X 3472(This)X 3637(list)X 3757(contains)X 4047(any)X 4186(argu-)X 612 4636(ments)N 823(passed)X 1057(to)X 1139(the)X 1257(program)X 1549(by)X 1649(the)X 1767(command)X 2103(that)X 2243(executed)X 2549(it.)X 2653(When)X 2865(there)X 3046(are)X 3165(no)X 3265(such)X 3432(arguments,)X 3806(the)X 3924(list)X 4041(is)X 4114(empty.)X 732 4760(If)N 814(the)X 940(main)X 1129(procedure)X 1480(returns)X 1732(or)X 1828(fails,)X 2015(the)X 2142(DCL)X 2331(status)X 2542(is)X 2624(set)X 2742(to)X 2833(1)X 2902(indicating)X 3251(normal)X 3507(termination.)X 3945(If)X 5 f 4030(stop\(s\))X 1 f 4303(is)X 612 4856(called,)N 856(the)X 986(value)X 1192(is)X 1277(hexadecimal)X 1715(10000000,)X 2087(indicating)X 2438(an)X 2545(error)X 2733(but)X 2866(producing)X 3222(no)X 3333(additional)X 3684(messages.)X 4058(A)X 4147(call)X 4294(to)X 5 f 612 4952(exit\(i\))N 1 f 828(terminates)X 1182(the)X 1300(program)X 1592(with)X 1754(the)X 1872(status)X 2074(speci\256ed.)X 732 5076(The)N 877(call)X 5 f 1015(system\(s\))X 1 f 1382(executes)X 5 f 1681(s)X 1 f 1741(as)X 1828(a)X 1884(command)X 2220(and)X 2356(produces)X 2666(its)X 2761(DCL)X 2941(status.)X 732 5200(The)N 884(call)X 5 f 1029(open\(s,"rp"\))X 1 f 1475(spawns)X 1738(a)X 1801(process)X 2069(to)X 2158(execute)X 2431(command)X 5 f 2776(s)X 1 f 2843(and)X 2986(produces)X 3303(a)X 3366(\256le)X 3495(that)X 3642(will)X 3793(read)X 3959(the)X 4084(standard)X 612 5296(output)N 842(of)X 935(that)X 1081(command.)X 1463(Similarly,)X 5 f 1808(open\(s,"wp"\))X 1 f 2284(spawns)X 2546(a)X 2608(command)X 2950(that)X 3096(will)X 3246(read)X 3411(its)X 3512(input)X 3702(from)X 3883(data)X 4042(written)X 4294(to)X 612 5392(the)N 730(\256le)X 852(produced)X 1171(by)X 1271(the)X 1389(call.)X 8 s 612 6144(IPD251)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(22,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(5.)N 712(Warnings)X 1069(and)X 1217(Known)X 1485(Problems)X 1 f 732 796(Ucode)N 972(and)X 1118(i VMS.BCK][V9.DOCS]IPD251.PS;1.EXE;1TOicode)X 1322(\256les)X 1485(produced)X 1814(under)X 2027(earlier)X 2263(versions)X 2560(of)X 2657(Icon)X 2830(are)X 2959(incompatible)X 3407(with)X 3579(this)X 3724(version.)X 4031(Such)X 4222(pro-)X 612 892(grams)N 828(must)X 1003(be)X 1099(recompiled.)X 732 1016(Stack)N 930(over\257ow)X 1235(is)X 1308(checked)X 1592(using)X 1785(a)X 1841(heuristic)X 2137(that)X 2277(is)X 2350(not)X 2472(always)X 2715(effective.)X 3 f 612 1208(References)N 1 f 612 1360(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 1456(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 612 1580(2.)N 812(R.)X 915(E.)X 1014(Griswold,)X 1362(C.)X 1465(L.)X 1564(Jeffery)X 1818(and)X 1964(G.)X 2072(M.)X 2193(Townsend,)X 2 f 2577(Version)X 2856(9.0)X 2986(of)X 3078(the)X 3206(Icon)X 3380(Programming)X 3860(Language)X 1 f (,)S 4231(The)X 812 1676(Univ.)N 1012(of)X 1099(Arizona)X 1378(Icon)X 1541(Project)X 1788(Document)X 2142(IPD236,)X 2431(1994.)X 612 1800(3.)N 812(R.)X 916(E.)X 1016(Griswold,)X 2 f 1365(Version)X 1645(9.0)X 1776(of)X 1869(the)X 1999(Icon)X 2174(Compiler)X 1 f 2476(,)X 2528(The)X 2685(Univ.)X 2897(of)X 2996(Arizona)X 3287(Icon)X 3462(Project)X 3721(Document)X 4087(IPD237,)X 812 1896(1994.)N 8 s 612 6144(IPD251)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 4009(July)X 4132(22,)X 4228(1994)X 5 p %%Trailer xt %%Pages: 5 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs i*[V9.DOCS]IPD255.PS;2+, ./ 4-0123KPWO562#7bi89GHJ%! userdict /PMpub` save put %!PS-Adobe-3.0 %%Title: Cover %%Creator: PageMaker 5.0 %%CreationDate: 7-25-1994, 14:20:58 %%For: ralph %%Pages: (atend) %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%CMYKCustomColor: (atend) %%DocumentCustomColors: (atend) %%DocumentProcessColors: (atend) %ALDOriginalFile: Katmandu:Desktop Folder:Graphics Book:GIPD:Cover %%EndComments %%BeginProlog %%BeginResource: procset ALPS_PS 1.0 1 %%Copyright: (C) Copyright 1992 Aldus Corporation. All Rights Reserved. %%Version: 1.0 1 /setpacking where{pop currentpacking true setpacking}if userdict/ALPS 385 dict dup begin userdict/ALPS known{/$MetalHead ALPS def}{/$MetalHead currentdict def}ifelse/ALPS currentdict def put/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/T true def/F false def/q`[currenttransfer]cvx def/PSScreen[ currentscreen]cvx def/PSsetgray systemdict/setgray get def/_PSdef matrix def /_WCmtx matrix def/_LPmtx matrix def/bse^{0 0 transform round exch round exch itransform translate}bdef/j`{_PSdef currentmatrix pop}bdef/ps${gsave scale _WCmtx currentmatrix pop grestore scale}bdef/k`{_LPmtx currentmatrix pop}bdef /l`{_LPmtx setmatrix}bdef/m`{{90 rotate pop 0 exch neg translate}{-90 rotate neg 0 translate pop}ifelse}bdef/p`{dup length 2 add array cvx dup 3 -1 roll 2 exch putinterval dup 0 4 -1 roll put dup 1/exec load put}bdef/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict /setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/findcmykcustomcolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /findcmykprocesscolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/newcmykcustomcolor{6/packedarray where{pop packedarray}{ array astore readonly}ifelse}ndef/setoverprint{pop}ndef/currentoverprint{false }ndef/setseparationgray{PSsetgray}ndef/separationimage{image}ndef/proc1 null def/proc2 null def/newproc null def/ic 0 def/im 0 def/iy 0 def/ik 0 def/imtnt 0 def/imsptnt 0 def/magentabuf null def/yellowbuf null def/blackbuf null def /level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def /colorexists level2{statusdict/processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{systemdict/setcmykcolor known def}ifelse/colimbuf {0 1 2 index length 1 sub{dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/imagecmyk{ALPS begin aload pop/ik xdef/iy xdef/im xdef/ic xdef end}bdef/addprocs{ALPS begin/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{/proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse end}bdef/currentcolortransfer{ currenttransfer dup dup dup}ndef/setcolortransfer{systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ALPS begin colorexists{aload pop pop 4 array astore imagecmyk currentcolortransfer{ik mul ik sub 1 add}addprocs 4 1 roll{iy mul iy sub 1 add}addprocs 4 1 roll{im mul im sub 1 add}addprocs 4 1 roll{ic mul ic sub 1 add}addprocs 4 1 roll setcolortransfer/magentabuf 0 string def/yellowbuf 0 string def/blackbuf 0 string def{colimbuf dup length magentabuf length ne{dup length dup dup/magentabuf exch string def/yellowbuf exch string def/blackbuf exch string def}if dup magentabuf copy yellowbuf copy blackbuf copy pop}addprocs{magentabuf}{yellowbuf}{blackbuf}true 4 colorimage}{ aload pop pop 4 array astore imagecmyk getimtnt currenttransfer{imtnt mul 1 imtnt sub add}addprocs settransfer image}ifelse end}ndef/getimtnt{ic .3 mul im .59 mul iy .11 mul ik add add add dup 1 gt{pop 1}if/imtnt xdef}bdef/j2`{ setcustomcolor}bdef/k2`{setprocesscolor}bdef/l2`{F setoverprint 1 exch sub setseparationgray pop}bdef/m2`{pop pop}bdef/n2`{null eq{pop pop/m2` load def false def}{null eq{pop/l2` load def}{{/k2` load def}{/j2` load def}ifelse} ifelse true def}ifelse}bdef/_ft null def/_fc null def/_f? false def/_fo false def/o2` null def/N` null def/_fpat null def/_fpatn null def/_st null def/_sc null def/_s? false def/_so false def/q2` null def/O` null def/Q` null def/P` null def/u2` null def/_LBOmtx matrix def/_LBOgsave matrix def/_x1 null def/_y1 null def/_x2 null def/_y2 null def/_rdp null def/_LLx null def/_LLy null def /_URx null def/_URy null def/_th null def/_hthk null def/_rd null def/_wp null def/_hp null def/_diam null def/_w null def/_h null def/_dshlen null def/_rem null def/_spclen null def/_undo? false def/_dch(X)def/xfont null def/_ch null def/_prcs? false def/b`{/_prcs? xdef/_ft xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_fc xdef/_f?/o2` _prcs? _fc _ft n2` atlanta^(F VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 }bdef/atlanta^{_f?{/N`{_fo setoverprint _fc _ft o2` _fpat null eq{fill}{_fpat j1`}ifelse}def}{/N`{newpath}def}ifelse}bdef/c`{/_fpatn xdef _fpatn null eq{/_fpat null def}{/_fpat _fpatn findfont def}ifelse}bdef/e` {/_fo xdef}bdef/a`{/_prcs? xdef/_st xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_sc xdef/_s?/q2` _prcs? _sc _st n2` seattle^}bdef/seattle^{_s?{/O`{_so setoverprint _sc _st q2` stroke }def/Q`{_so setoverprint _sc _st q2` fill}def/P`/Q` load def/u2`{_so setoverprint _sc _st q2` show}def}{/O`{newpath}def/Q`{newpath}def/P`{newpath} def/u2`{pop}def}ifelse}bdef/f`{/_so xdef}bdef/arct{arcto pop pop pop pop}ndef /u`{_LBOgsave currentmatrix pop translate scale 1 0 moveto 0 0 1 360 0 arcn closepath _LBOgsave setmatrix}bdef/v`{moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath}bdef/w`{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y2 _x2 _y2 _rdp arct _x2 _y2 _x2 _y1 _rdp arct _x2 _y1 _x1 _y1 _rdp arct _x1 _y1 _x1 _y2 _rdp arct closepath}bdef/bell^{{ _LBOmtx astore concat}if}bdef/south^{/_URy xdef/_URx xdef/_LLy xdef/_LLx xdef} bdef/lpd^{gsave translate rotate}bdef/jp^{grestore}bdef/bh^{gsave bell^ south^ /_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave N` grestore _th setlinewidth O` grestore}bdef /y`{gsave bell^ 2{2 index sub 4 1 roll}repeat v`{N`}{P`}ifelse grestore}bdef /z`{gsave bell^ south^/_th xdef _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop 6 index 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore 4 index 4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore _th lt exch _th lt and{F _LLx _LLy _LLx _th add _LLy _th add F y` F _LLx _URy _th sub _LLx _th add _URy F y` F _URx _th sub _LLy _URx _LLy _th add F y` F _URx _th sub _URy _th sub _URx _URy F y`}if grestore}bdef/A`{gsave bell^ south^/_th xdef/_ch xdef xfont _th scalefont setfont _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop{4 copy _ch 0 _LLx _y1 F roswell^ _ch 0 _LLx _y2 F roswell^}{ 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore}ifelse{4 copy _ch 90 _x1 _LLy F roswell^ _ch 90 _x2 _LLy F roswell^}{4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore}ifelse grestore}bdef/nba^{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd _th 2 div sub 0 0 _w _h w` _LBOgsave setmatrix gsave N` grestore _th setlinewidth O` grestore}bdef/C`{gsave bell^ south^/_rd xdef/_wp _URx _LLx sub abs def/_hp _URy _LLy sub abs def/_diam _rd 2 mul def/_w _wp _diam ge{_wp}{ _diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _LLy translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd 0 0 _w _h w` _LBOgsave setmatrix{N`}{P`}ifelse grestore}bdef/D`{gsave bell^ south^/_rd xdef/_th xdef/_hthk _th 2 div def/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def _hthk _rd ge{ _wp _hp _LLx _hthk add _LLy _hthk add v` N`}{gsave _LLx _hthk add _LLy _hthk add translate _rd _hthk sub 0 0 _wp _hp w` N` grestore}ifelse/_w _URx _LLx sub abs def/_h _URy _LLy sub abs def _w 2 _th mul sub _h 2 _th mul sub _LLx _th add _LLy _th add v` _rd _LLx _LLy _URx _URy w` Q` grestore}bdef/E`{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix {_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy 0 _x1 0 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 0 _x1 _h gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy 90 0 _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 90 _w _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if grestore}bdef /F`{gsave bell^ south^/_rd xdef/_th xdef/_ch xdef xfont _th scalefont setfont /_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{ _diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div} {1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix{_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy _ch 0 _x1 0 T roswell^ _ch 0 _x1 _h T roswell^}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy _ch 90 0 _y1 T roswell^ _ch 90 _w _y1 T roswell^}if grestore}bdef/auburn^{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y1 _x2 _y1 _rdp arct _x2 _rdp sub _y1 moveto _x2 _y1 _x2 _y2 _rdp arct _x2 _y2 _rdp sub moveto _x2 _y2 _x1 _y2 _rdp arct _x1 _rdp add _y2 moveto _x1 _y2 _x1 _y1 _rdp arct}bdef/jmk${gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add u` gsave N` grestore _th setlinewidth O` grestore}bdef/H`{gsave bell^ south^ _URx _LLx sub abs 2 div _URy _LLy sub abs 2 div _LLx 2 index add _LLy 2 index add u`{N`}{P`}ifelse grestore}bdef/I`{ gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup 5 index add arc _LBOmtx setmatrix _th setlinewidth O` _LBOgsave setmatrix}for pop grestore}bdef/J`{gsave bell^ south^/_th xdef _dch 0 3 -1 roll put xfont _th scalefont setfont/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup arc _LBOmtx setmatrix _dch u2` newpath _LBOgsave setmatrix}for grestore}bdef/jbd^{ gsave bell^ moveto lineto setlinewidth O` grestore}bdef/ald^{gsave bell^ samson^ setlinewidth O` grestore}bdef/ws^{gsave bell^ xfont exch scalefont setfont F roswell^ grestore}bdef/samson^{translate rotate 0 0 moveto/_dshlen xdef/_rem xdef/_spclen xdef 1 1 3 -1 roll{pop _dshlen 0 rlineto _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _dshlen 0 rlineto}bdef/roswell^{ gsave/_undo? xdef translate rotate _dch 0 3 -1 roll put 0 moveto/_rem xdef /_spclen xdef 1 1 3 -1 roll{pop gsave _undo?{_LBOmtx setmatrix}if _dch u2` grestore _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _undo?{ _LBOmtx setmatrix}if _dch u2` grestore}bdef 8 dict begin/FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-500 -5C$ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1z500 500 500]def/Encoding 256 array def 0 1 255{Encoding exch/.nodef put}for Encoding 97/circle put /CharProcs 2 dict def CharProcs begin/.nodef{}def/circle{0 0 500 0 360 arc closepath fill}bind def end/BuildGlyph{1000 0 -500 -500 500 500 setcachedevice exch/CharProcs get exch 2 copy known not{pop/.nodef}if get exec}bind def /BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get exec}bind def currentdict end/_xfont exch definefont/xfont exch def/_thumbStr 10 string def /_irad null def/_orad null def/_dx null def/_dy null def/_ld2 null def/_sz null def/_th null def/_lblsave null def/LFont null def/T`{gsave 0.05 0.05 scale translate 2 copy 2 copy 8 -2 roll dup 3 -1 roll{neg}if exch v` .5 setseparationgray fill 0 0 v` gsave 1 setseparationgray fill grestore 0 setseparationgray 20 setlinewidth stroke/Helvetica findfont 180 scalefont setfont 100 add 100 exch moveto pop _thumbStr cvs show grestore}bdef/q3`{_th _orad sub dup _dx _dy u` stroke _dx _ld2 sub _dy moveto _dx _ld2 add _dy lineto stroke _dx _dy _ld2 sub moveto _dx _dy _ld2 add lineto stroke}bdef/V`{ /_irad xdef/_orad xdef/_dy xdef/_dx xdef/_th xdef/_ld2 xdef/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def gsave 0 setlinecap 1 setseparationgray _th _hthk 2 mul add setlinewidth q3` _hthk _irad add dup _dx _dy u` fill 0 setseparationgray _th setlinewidth q3` _irad dup _dx _dy u` fill 1 setseparationgray _dx _irad sub _dy moveto _dx _irad add _dy lineto stroke _dx _dy _irad sub moveto _dx _dy _irad add lineto stroke grestore}bdef/f1a`{1 exch sub 0 0 0 setcmykcolor}bdef/f1b`{1 exch sub 0 exch 0 0 setcmykcolor}bdef/f1c`{ 1 exch sub 0 0 3 -1 roll 0 setcmykcolor}bdef/f1d`{1 exch sub 0 0 0 4 -1 roll setcmykcolor}bdef/f1e`{setseparationgray}bdef/W`{gsave F setoverprint/_dy xdef /_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if/XPaint exch ldef 0.35 XPaint 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def 0 1 10{10 div XPaint _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def} for grestore}bdef/calBarArray[0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 .5 0 0 .5 0 0 .5 0 0 0 0 0 0 .5]def/X`{gsave/_dy xdef/_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if 0.35 setseparationgray 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def currentoverprint false setoverprint 0 1 10{calBarArray exch 4 mul 4 getinterval aload pop setcmykcolor _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def}for setoverprint grestore}bdef/pw${gsave/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def 5 copy 1 setseparationgray 0 setlinecap moveto rlineto _hthk 2 mul add setlinewidth stroke 0 setseparationgray moveto rlineto setlinewidth stroke grestore}bdef/Y`{/_lblsave save def[exch 0 0 2 index neg 0 0]LFont exch makefont setfont}bdef/a1`{0 setseparationgray moveto show}bdef/Z`{_lblsave restore}bdef/f1`{/LFont/|_______Helvetica T/Helvetica aldus^ def}bdef/_xbft null def/_xbfc null def/_xbx? F def/XPaint null def/XFill null def/XStroke null def/b1`{gsave bell^ south^/_th xdef currentoverprint T setoverprint}bdef /d1`{setoverprint grestore}bdef/c1`{beams^ bapco^}bdef/bapco^{_URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add 4 copy v` gsave XFill grestore _th setlinewidth XStroke 4 copy moveto rlineto exch 3 index add exch moveto exch neg exch rlineto XStroke}bdef/beams^{/_prcs? xdef/_xbft xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor} ifelse}if/_xbfc xdef/_xbx?/XPaint _prcs? _xbfc _xbft n2` psquare^}bdef /psquare^{_xbx?{/XFill{_xbfc 0 XPaint fill}def/XStroke{_xbfc 1 XPaint stroke} def}{/XFill{newpath}def/XStroke{newpath}def}ifelse}bdef/e1`{/__$jk where{pop /junk save def bell^ south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave .9 setseparationgray fill grestore 0 setseparationgray _th setlinewidth stroke _LLx _LLy _URy add 2 div moveto/Helvetica findfont[180 180 J2` neg 0 0 3 -1 roll 0 0]makefont setfont show junk restore}{{6{pop}repeat}if 6{pop}repeat} ifelse}bdef/s`{gsave clippath 1 setseparationgray fill grestore}bdef/r`{ PSScreen exch pop exch pop dup type/dicttype eq{dup/HalftoneType get 1 eq{ begin/Angle exch def/Frequency exch def 60 0 currentdict end}if}if}bdef/t`{{1 exch sub}}bdef/PPDSetup{countdictstack mark}bdef/PPDCleanup{stopped cleartomark countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bdef /_PATgsave matrix def/_PATmtx matrix def/gl^{7 dict begin/FontDict 9 dict def FontDict begin/cache exch def/key exch def/proc exch cvx def/mtx exch matrix invertmatrix def/height exch def/width exch def/ctm matrix currentmatrix def /ptm matrix identmatrix def/str(12345678901234567890123456789012)def end /FontBBox[0 0 FontDict/width get FontDict/height get]def/FontMatrix FontDict /mtx get def/Encoding StandardEncoding def/FontType 3 def/BuildChar{pop begin FontDict begin width 0 cache{0 0 width height setcachedevice}{setcharwidth} ifelse 0 0 moveto width 0 lineto width height lineto 0 height lineto closepath clip newpath gsave proc grestore end end}def FontDict/key get currentdict definefont end}bdef/hj^{dup type/dicttype eq{begin FontDict/ctm get setmatrix} {exch begin FontDict/ctm get setmatrix concat}ifelse currentdict setfont FontDict begin FontMatrix concat width 0 dtransform round width div exch round width div exch 0 height dtransform round height div exch round height div exch 0 0 transform round exch round exch ptm astore setmatrix pathbbox height div ceiling height mul 4 1 roll width div ceiling width mul 4 1 roll height div floor height mul 4 1 roll width div floor width mul 4 1 roll 2 index sub height div ce%iling cvi exch 3 index sub width div ceiling cvi exch 4 2 roll moveto FontMatrix ptm invertmatrix pop{gsave ptm concat dup str length idiv{ str show}repeat dup str length mod str exch 0 exch getinterval show grestore 0 height rmoveto}repeat pop end end}bdef/i1`{gsave clip hj^ grestore newpath} bdef/j1`{gsave 0 0 0 0 setcmykcolor fill grestore i1`}bdef/k1`{_PATgsave currentmatrix pop _PATmtx defaultmatrix setmatrix rotate 3.36 3.36[1 0 0 -1 0 0]{2 setlinecap 0 1.68 moveto 1.68 0 lineto 1.68 3.36 moveto 3.36 1.68 lineto 0.675 setlinewidth stroke}/l1` true gl^ pop 5.28 5.28[1 0 0 -1 0 0]{2 setlinecap 0 2.64 moveto 2.64 0 lineto 2.64 5.28 moveto 5.28 2.64 lineto 0.675 setlinewidth stroke}/m1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/n1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/o1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0.675 setlinewidth stroke}/p1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0.675 setlinewidth stroke}/q1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/r1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/s1` true gl^ pop _PATgsave setmatrix}bdef /_OutlineSmearFrac 10 def/_OutlineWeight 0.012 def/_OutlineFillCol(or 0 0 0 1(\ )findcmykprocesscolor def/_ShadowReverseColor 0 0 0 1()findcmykprocesscolor def/_BoldFactorX 0.015 def/_BoldFactorY 0.015 def/_ShadowFactorX 0.06 def /_ShadowFactorY 0.06 def/_ObliqueFactor -0.21 def/_ShadowTintFactor 0.2 def /_BFontUOThick 1 0/Helvetica findfont/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul def/_TXmtx matrix def/_TXctmx matrix def /_txgsave matrix def/_BaseMatrix[1 0 0 -1 0 0]def/_ItalicMatrix[1 0 _ObliqueFactor 1 0 0]def/tempDict null def userdictx VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1)/FCDict userdict put /isWinPS false def/_xSize 12 def/_ySize 12 def/_dots 1440 def/_fDict null def /_uScale null def/_uPosition null def/_uThickness null def/_uOThickness null def/_dUPosition -100 def/_dUThickness 50 def/_dFontScale -0.001 def/_runLen null def/_txc null def/_txt null def/_txo F def/_tx? F def/_ctc null def/_ctt null def/_cto F def/_cPaint null def/_outxc null def/_outxt null def/_outxo T def/_shdc null def/_shdt null def/_shdo T def/K2` null def/k3` null def/m3` null def/j3` null def/l3` null def/FTextPaint null def/STextPaint null def /_gMTX matrix def/macvec 256 array def macvec dup dup 0/Times-Roman findfont /Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute/agrave /acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave/ecircumflex /edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute/ograve /ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis/dagger /degree/cent/sterling/section/bullet/paragraph/germandbls/registered/copyright /trademark/acute/dieresis/notequal/AE/Oslash/infinity/plusminus/lessequal /greaterequal/yen/mu/partialdiff/summation/product/pi/integral/ordfeminine /ordmasculine/Omega/ae/oslash/questiondown/exclamdown/logicalnot/radical /florin/approxequal/Delta/guillemotleft/guillemotright/ellipsis/blank/Agrave /Atilde/Otilde/OE/oe/endash/emdash/quotedblleft/quotedblright/quoteleft /quoteright/divide/lozenge/ydieresis/Ydieresis/fraction/currency/guilsinglleft /guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase /perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute /Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex/apple/Ograve/Uacute /Ucircumflex/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring /cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop /winvec 256 array def winvec dup dup 0/Times-Roman findfont/Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put/grave/acute/circumflex /tilde/macron/breve/dotaccent/dieresis/ring/cedilla/hungarumlaut/ogonek/caron /dotlessi winvec 0 14 getinterval astore pop/bullet/bullet/bullet /quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex /perthousand/Scaron/guilsinglleft/OE/bullet/bullet/bullet/bullet/quoteleft /quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark /scaron/guilsinglright/oe/bullet/bullet/Ydieresis/space/exclamdown/cent /sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth /Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute /acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute /ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex /udieresis/yacute/thorn/ydieresis winvec 127 129 getinterval astore pop/M1`{{ _TXmtx astore concat}if _TXctmx currentmatrix pop}bdef/N1`{_txgsave currentmatrix pop}bdef/O1`{_txgsave setmatrix}bdef/P1`{O1`}bdef/Q1`{_TXctmx setmatrix}bdef/v1`{userdict begin dict/FCDict exch def end}bdef/fontdef{FCDict 3 1 roll put}bdef/fontget{FCDict exch get}bdef/x1`{aldus^ _BaseMatrix makefont fontdef}bdef/p3`{dup length 1 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict} bdef/aldus^{findfont exch isWinPS{pop dup/Encoding get dup 161 get exch 162 get/cent eq exch/exclamdown eq and}if{p3` dup/Encoding isWinPS{winvec}{macvec} ifelse put definefont}{exch pop}ifelse}bdef/I1`{findfont p3` dup/Encoding get 256 array copy dup dup 3 index/Encoding 3 2 roll put}bdef/J1`{put dup}bdef/K1` {pop pop definefont _BaseMatrix makefont fontdef}bdef/y1`{gsi^ fontdef}bdef /z1`{fontget _ItalicMatrix makefont fontdef}bdef/gsi^{fontget dup maxlength 2 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict begin/PaintType 2 def/StrokeWidth 1 0 FontMatrix dtransform dup mul exch dup mul add sqrt _OutlineWeight exch div def end tempDict definefont}bdef/auckland^{/_ySize xdef/_xSize xdef fontget[ _xSize 0 0 _ySize 0 0]makefont setfont}bdef/wcu^{_dots mul}bdef/n`{1440 div /_dots xdef}bdef/J2`{wcu^ exch wcu^ exch}bdef/w1`{J2` auckland^}bdef/K2`{}bdef /A1`{isWinPS{O2`}{pop pop pop}ifelse 5 3 roll K2`}bdef/L2`{/_x1 _xSize _BoldFactorX mul def/_y1 _ySize _BoldFactorY mul def 5 copy _y1 add exch _x1 add exch K2` 5 copy _y1 add exch _x1 sub exch K2` 5 copy _y1 sub exch _x1 add exch K2` 5 copy _y1 sub exch _x1 sub exch K2` K2`}bdef/B1`{O2` 5 3 roll L2`} bdef/C1`{O2` 6 3 roll 6 copy U2` 3 1 roll _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 3 -1 roll{L2`}{K2`}ifelse V2`{L2`}{K2`} ifelse}bdef/D1`{O2` 5 3 roll gsave 6 index not{7 index _xSize _ySize auckland^ }if 5 copy _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 11 -1 roll{L2`}{K2`}ifelse grestore 6 -1 roll{M2`}{6 -1 roll N2`}ifelse} bdef/M2`{/_x1 _OutlineSmearFrac wcu^ def/_y1 _OutlineSmearFrac wcu^ def 5 copy _y1 neg add exch _x1 neg add exch K2` 5 copy _y1 neg add exch _x1 add exch K2` 5 copy _y1 add exch _x1 neg add exch K2` 5 copy _y1 add exch _x1 add exch K2` m3`}bdef/E1`{O2` 5 3 roll M2`}bdef/N2`{gsave _xSize _ySize auckland^ 5 copy m3` grestore K2`}bdef/F1`{O2` 6 3 roll N2`}bdef version cvr 47.0 ge{/strwth{ stringwidth pop}bdef}{/strwth{gsave newpath 0 0 moveto 0 0 lineto closepath clip stringwidth grestore pop}bdef}ifelse/O2`{dup 0 gt{dup 4 1 roll 4 index mul exch 5 index mul add 5 index strwth add sub exch div add}{pop pop pop} ifelse}bdef/G1`{fontget/_fDict xdef wcu^ _fDict/FontInfo known{_fDict /FontMatrix get 3 get mul/_uScale xdef _fDict/FontInfo get dup /UnderlinePosition known{dup/UnderlinePosition get _uScale mul/_uPosition xdef }{/_uPosition _dUPosition _uScale mul def}ifelse dup/UnderlineThickness known{ dup/UnderlineThickness get _uScale mul/_uThickness xdef}{/_uThickness _dUThickness _uScale mul def}ifelse pop}{_dFontScale mul/_uScale xdef /_uPosition _dUPosition _uScale mul def/_uThickness _dUThickness _uScale mul def}ifelse/_uOThickness _BFontUOThick _uScale mul def _fDict/PaintType known{ _fDict/PaintType get 2 eq{_fDict/StrokeWidth known{/_uOThickness _fDict /StrokeWidth get _uScale mul def}{1 0 _fDict/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul _uScale mul/_uOThickness xdef}ifelse} if}if}bdef/H1`{gsave/_runLen xdef/_y1 xdef/_x1 xdef/_y1 _y1 _uPosition add def {dup not{U2`}if/_y2 _ySize _ShadowFactorY mul _y1 add def/_x2 _xSize _ShadowFactorX mul _x1 add def _uThickness _x2 _y2 _x2 _runLen add _y2 P2` dup not{V2`}if}if{_uOThickness _x1 _y1 _uThickness 2 div add _x1 _runLen add _y1 _uTh7ickness 2 div sub Q2`}{_uThickness _x1 _y1 _x1 _runLen add _y1 P2`}ifelse grestore}bdef/mm${gsave _ySize 3 div sub/_y1 xdef _y1 _y1 3 1 roll _ySize 16 div 5 1 roll P2` grestore}bdef/P2`{gsave moveto lineto setlinewidth k3` grestore}bdef/Q2`{gsave south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave j3` grestore _th setlinewidth k3` grestore}bdef/d`{/_prcs? xdef/_txt xdef dup null ne{ _prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_txc@n VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;10c 8 xdef SetOutColor SetShadColor/_tx?/l3` _prcs? _txc _txt n2` S2`}bdef/SetOutColor{ _txt null eq{/_outxc null def/_outxt null def}{_txc null eq{_txt 0 eq{/_outxt 1 def _prcs?{/_outxc _OutlineFillColor def}{/_outxc null def}ifelse}{/_outxt 0 def/_outxc null def}ifelse}{_txc aload pop pop add add add 0 eq{/_outxt 1 def /_outxc _OutlineFillColor def}{/_outxt 0 def/_outxc null def}ifelse}ifelse} ifelse/_cjc?/FTextPaint _prcs? _outxc _outxt n2`}bdef/SetShadColor{_txt null eq{/_shdc null def/_shdt null def}{/_shdo _txo def _txc null eq{_txt 0 eq{ /_shdt 1 def}{/_shdt T2` def}ifelse _prcs?{/_shdc _ShadowReverseColor def /_shdo T def}{/_shdc null def}ifelse}{_txc aload pop pop add add add 0 eq{ /_shdt 1 def/_shdc _ShadowReverseColor def/_shdo T def}{/_shdt T2` def/_shdc _txc def}ifelse}ifelse}ifelse/_cjc?/STextPaint _prcs? _shdc _shdt n2`}bdef/S2` {_tx?{/K2`{_txo setoverprint _txc _txt l3` moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/k3`{_txo setoverprint _txc _txt l3` stroke}def/m3`{_outxo setoverprint _outxc _outxt FTextPaint moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/j3`{_outxo setoverprint _outxc _outxt FTextPaint fill}def}{/K2` {5{pop}repeat}def/k3`{newpath}def/m3`{5{pop}repeat}def/j3`{newpath}def}ifelse} bdef/T2`{_txt _ShadowTintFactor mul}bdef/U2`{/_ctc _txc def/_ctt _txt def/_cto _txo def/_cPaint/l3` ldef/_txc _shdc def/_txt _shdt def/_txo _shdo def/l3` /STextPaint ldef}bdef/V2`{/_txc _ctc def/_txt _ctt def/_txo _cto def/l3` /_cPaint ldef}bdef/g`{/_txo xdef}bdef/SaveHook{}ndef/RestoreHook{}ndef/W2`{ SaveHook _dots _LPmtx aload _PSdef aload _WCmtx aload _txgsave aload _TXctmx aload _gMTX currentmatrix aload}bdef/X2`{astore setmatrix astore pop astore pop astore pop astore pop astore pop/_dots xdef RestoreHook}bdef/bmt^{save def }bdef/tsi^{mark W2` counttomark 2 add -2 roll pop restore X2` o`}bdef/seni^{ restore}bdef/o`{/_fo F def/_so F def/_txo F def}bdef/_GRPHmtx matrix def /_imagesave null def/_imc null def/_imt null def/ImPaint null def/cjc^{ /_imagesave save def _WCmtx setmatrix}bdef/tvs^{_PSdef setmatrix}bdef/dsd^{ _imagesave restore}bdef/espresso 4 dict def espresso begin/setgray{setgray}def /setcmykcolor{setcmykcolor}def/setrgbcolor{setrgbcolor}def/sethsbcolor{ sethsbcolor}def end/o3`{espresso begin userdict begin}bdef/vm${/OSdict xdef end end end}bdef/b2a`{/_imagesave save def{_GRPHmtx astore concat}if translate dup scale newpath 0 0 v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/a2`{OSdict begin}bd =ef/b2`{end V1`}bdef/kHu${/_imagesave save def{_GRPHmtx astore concat}if translate scale translate newpath v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/V1`{end _imagesave restore}bdef/_ortnt null def/_orclr null def/_gop false def/_cjc? false def/*setcmyk null def/*setrgb null def/*sethsb null def/*setgry null def /*setsepgray null def/*setcustomclr null def/*setprocessclr null def/*setop null def/*zimage null def/$gate_1 T def/$clrOverride F def/Y2`{ALPS begin /*setcmyk/setcmykcolor ldef/*setrgb/setrgbcolor ldef/*sethsb/sethsbcolor ldef /*setgry/setgray ldef/*setcustomclr/setcustomcolor ldef/*setprocessclr /setprocesscolor ldef/*setop/setoverprint ldef/*setsepgray/setseparationgray ldef/*zimage/image ldef end}bdef/X1`{ALPS begin/setcmykcolor/*setcmyk ldef /setrgbcolor/*setrgb ldef/sethsbcolor/*sethsb ldef/setgray/*setgry ldef /setcustomcolor/*setcustomclr ldef/setprocesscolor/*setprocessclr ldef /setoverprint/*setop ldef/setseparationgray/*setsepgray ldef/image/*zimage ldef end}bdef/$curgry systemdict/currentgray get def/$setrgb systemdict /setrgbcolor get def/$sethsb systemdict/sethsbcolor get def/$setcmyk systemdict/setcmykcolor known{systemdict/setcmykcolor get}{{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict/setrgbcolor get exec pop}}ifelse def/a3`{ALPS begin/setcmykcolor{gsave $setcmyk 1 $curgry sub grestore c3`}def/setrgbcolor{gsave $setrgb 1 $curgry sub grestore c3`}def /sethsbcolor{gsave $sethsb 1 $curgry sub grestore c3`}def/setgray{1 exch sub c3`}def/setseparationgray{1 exch sub c3`}def _spotOR?{/setcustomcolor/i3` ldef }{/setcustomcolor/b3` ldef}ifelse/setprocesscolor{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}def /setoverprint{d3`}def/image{ORimage}def end}bdef/b3`{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}bdef/c3` {$gate_1 $clrOverride and{ALPS begin/$gate_1 F def _ortnt null ne{_ortnt mul}{ null}ifelse _orclr exch X1` SetORColorProc a3`/$gate_1 T def end}{ALPS begin $MetalHead begin c3` end end}ifelse}bdef/d3`{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def pop _gop X1` setoverprint a3`/$gate_1 T def end}{ALPS begin $MetalHead begin setoverprint end end}ifelse}bdef/ORimage{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def X1` _orclr null ne{_orclr customcolorimage}{separationimage}ifelse a3`/$gate_1 T def end}{ALPS begin $MetalHead begin image end end}ifelse}bdef/W1`{ALPS begin _prcs? xdef/_ortnt xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if /_orclr xdef/_cjc?/SetORColorProc _prcs? _orclr _ortnt n2` false setoverprint /_gop false def/_spotOR? F def Y2` a3`/$clrOverride T def end}bdef/Y1`{ALPS begin/_gop xdef end}bdef/*findcmykcustomclr null def/*newcmykcustomclr null def/epsdict null def/typedict null def/*$setcustomclr null def/_spotOR? F def /$spotOverride F def/$gate_2 T def/clrAdjust? F def/_fhbool F def/f2`{ALPS begin dup dict/Cepsdict xdef dict/typedict xdef/clrAdjust? T def end}bdef/g2`{ cvn 8 1 roll exch 2 array astore 1 index cvn exch typedict 3 1 roll put 5 array astore epsdict 3 1 roll put}bdef/h2`{null exch 2 array astore exch cvn exch typedict 3 1 roll put}bdef/i2`{ALPS begin clrAdjust?{/_spotOR? T def e3` g3`/$spotOverride T def}if end}bdef/e3`{ALPS begin/*findcmykcustomclr /findcmykcustomcolor ldef/*newcmykcustomclr/newcmykcustomcolor ldef /*$setcustomclr/setcustomcolor ldef end}bdef/f3`{ALPS begin /findcmykcustomcolor/*findcmykcustomclr ldef/newcmykcustomcolor /*newcmykcustomclr ldef/setcustomcolor/*$setcustomclr ldef end}bdef/g3`{ALPS begin/findcmykcustomcolor/h3` ldef/newcmykcustomcolor/n3` ldef/setcustomcolor /i3` ldef end}bdef/h3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def dup cvn epsdict exch known{5 1 roll 4{pop}repeat cvn epsdict exch get aload pop}if f3` findcmykcustomcolor g3`/$gate_2 T def end}{ALPS begin $MetalHead begin findcmykcustomcolor end end}ifelse}bdef/n3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def/_fhbool xdef dup cvn epsdict exch known{5 1 roll 4{pop} repeat cvn epsdict exch get aload pop}if _fhbool f3` newcmykcustomcolor g3` /$gate_2 T def end}{ALPS begin $MetalHead begin newcmykcustomcolor end end} ifelse}bdef/i3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def 1 index 4 get cvn dup typedict exch known{typedict exch get aload pop 1 index null eq{ exch pop mul 1 exch sub exch pop f3` setseparationgray g3`}{exch{f3` mul setprocesscolor g3`}{f3` mul setcustomcolor g3`}ifelse}ifelse}{pop f3` setcustomcolor g3`}ifelse/$gate_2 T def end}{ALPS begin $MetalHead begin setcustomcolor end end}ifelse}bdef/BMT 2 dict def BMT begin/*def/def load def /def{1 index/fcheckload eq{pop{pop pop}}if *def}bdef end/t1`{BMT begin}bdef /u1`{end}bdef/u1a`{findfont pop}bdef end/setpacking where{pop setpacking}if %%EndResource ALPS begin %%BeginResource: procset IMAGE_PS 1.0 1 %%Copyright: (C) Copyright 1993 Aldus Corporation. All Rights Reserved. %%Version:1.0 1 /IMdict 100 dict def IMdict begin/bdef{bind def}bimc D/)>Xzmm^*}yf,MAOXCP/g3^ip;I%9DL CfRoO/@Yvhzg lm{4W!4)qe6qkK~|ZI>A1p.EykWRE_@.XKtR )G2Gp;G$Yo-dS4n?5l 8c[?ubT]8Byg_2_6Se2cW I4g8POmJa`u ,on%Fu'Z7~Izh[QdhA\ E9:%np2W| {*{gGb` Z^M0`+\ wrNt!,7f~Z%tw!NysGscnkgox ob_uTJ'|G;5u9 5=!DW$;SZSC*v.Yu s,>6 6}9~]N+"OewlHEf'BMam,?4W+R=#iM20KAOaZquP@ 207I4O%x5x/7\&YIf7e3t&r4`*4' 8g{ KBg}j<DE4 Dz0//^2m3 /]0dm0-R v;3YlWvvN<@`PmFK Bp|3w;8~8-m[x[!d[72@'dInI U(]+ 2clj,ll-pU8_[~ikCRG`x8_HEU82K wJ(H''1,X mc_6= :x]zh?F>q'RT tCFLuDaM E3vqi0 yy)/{+wSaRwLJuyKh2$K3-YlToQO9@[^cP?-mk7L5jrMw1@D0<0\ND-MXe~HSM:I 7_a}Vw\V~CcZ^qBwzLey2> Zvk)!r]\7 |y], =f16l\-~[r" ur4o68"*gz &-I5oP9Dz O;J qQ>3!PfhMt iF#X5`Q@=[P G;L:}h H3%NOW;JVy1KpQ~Gtk(Umc@Au!sIS26^w5l2nA^E\ML _GFHd\ uZ]/ YMm+qm:&{H&}d  "U? (0b _K^*y+uCW%5w@}96]djR t@Zk9wI"&a6 qy`Jqc3 _s@6kT)wJ!JJh{ \{CQB tSAm[ [(}Cbc T-J?A(`$5Mz~| dTxAEG 2$IeMGJ3XX vFA>J N)7?GHe;X%y,\lJ5j]@+~ DU x..P4eD:W?}Q9PLNS_PtlqD${c0<LqLX<H-  ->l/gZqD9(eBe,I..-uqx?k)A*VgXp~jK5VI%cSRM9 ~}Zyoa.VT 8dlB@'* *6H W w@cHKF72n&]A?yH|M90JI9[q_0l.q:U#nyfd/vP+<G*SQNVCFx dP`*\QF$$OhR&#ip ,B^#S Ch>Cm#MlS]AKl{ld[FMwYF1FRRp%)c63FH}~ I('0 Pe#>zmKG4$R<@Tyj0>Y]nxp~6 ) x<<8-7'*N-mNEX]T]BD3*W1qSzX6BchLNOd&zB%) F4d#KSlu=3} #n}=%R)J9wme3ZE~p<,agm/( ]x.x s:Fa9j'_[oo5z"iG#w3PffkuZy nsg.n[[)z~g4 xgZ`ET,ti}iX7ogW{Clc$s}ky}J?.eg2F 6_x-s.`Or% luue"."gV3/PT% MB(@P)C}T.sB\mYP89zX#LDKq6FH${54h!:t=-cJ ?&R;Gx#^@ jq4__L~'#b-L+h*V8uX\f2'|N*~KzeKB,=Fyr9<wn1,=Y]DnfI/l3k_PkZ]rzUqP*b&@8hP.3pr6.YCg8* j+a/7 ?Ah=}l_5f~hk MRae8<[}Q<>[!c[Qt!vZX6_X{$0IsT|V,/\PE/H`P:*&*!<jZ) p@P 2v#zu|mW>K ]"2RhS$qufzs)o5!L{8$c]:/c{$3/Y7Z7@$Y.N6G,TN.`Sz#8Jo!v g2x;"88};+nG2z,8AcJ`^?3wo%G7l\A)Mg(HIk<JyqRG!v h?F3 C\^Y %_ylNT=XrUr_q)44m,SXcp@O |$" iB,n31 aDQx>`KMsLXDJG:q7~]qG_VSPXS^cjs/) [6neR*G/G|/t^WW1 EMw7Dp8|.@Q2)}U#|zH&Wj `fvCT  k_O69ML [b'R.XKv1Ph?C26tF#tEpeTQE`PTkpp@J-('33G(\9}Mww,4KaK.9.TAem+RN9fy>3l/c~)Xxs;) #N]|m/UMmN _S9P~^oP|{/[soLbYN\Kt$:^u} +P+_zc zc$+mlHQ%?OsJA&>"j-_"y4rG,bt\"k V d]| 9HK& KPH ) POWulhq?h#fbI9R V|PN5e~/r<=LlcDP<hR8|)sL OC8h;wpeZHf'a~ rLgl1LMZ; Gw2gIv A{c*zr4+HNFGh/8&hSoYj[oqD~^WSVb`iKZv7~b* 1p;W#*mhOv}%PN"H F ].^3~D!Hm'M&vLG#8qmV @Ns;|M~:2`8n$X4 `Ib h_0 Ihf; ]`9}pm\7HFH>g"3#?!lSZjk@ `1xTj noO]mb XGM<@Oun_r2Q&614g8p#X%Y]Krt`hg.!Yh' m@cD< 1=HD [<-+ioZ%0.W$>8k:& fny7CB@8fM( lU9"Jp4fC(L:f?J\'N `{2FG:K_RF0=uNymxO -+moS @I< i, #;X)(-p}*y ln3L3va{| T\VleVW1r|mkGf%<"lio?Cl*r51 G Xl1XM6jC- 0?{hqN$m'_d ?a=&LipW@%b Du= RdbocS\dnLM, t}=yT7Tc7q@! Gf0-FrO|:}KG51s(?sZ i?*Wr~Kl0i@r 8$ez.}$-H{IBx@MDs8Am=tP#Z]7@[lV2c.yHFa.ob0xfI|jz:UKKVD U$ /<}`Eu GzJp 'zA+o[ };dab Kus1Fd4R.gVeUO'!+aB"6hC: f<CZ@t^*B:=g]]atkf6_dgr^SBh{e Xt1^uSYfFGg_4 f)R.74;|,i`di\fFVXlB?6 6*oMEok."2aFTkC\6Q!NCmAW !f0g\=:RRPQZdpp%B-:*0L*e 5O!Id6<'X#9$&NtjU1D\NWpy"8EKf@{ie_Q(']E-e ]Uv^xp5u7 nK],X3RQDRM;U\SGTM|0g%2wKX7N|g+6Sn_x:$8mgFG> i>t$?8MDivyu7+h_lfos/ ;g:f/=jLI~s Ig)BR gqefeP* j;xG:* 7QZ8Wh^]SrR^Msh?Qsv#G rH0qK'[{` iHt[%97Dvt8]="q%SWXe,YXK72Q drVMyRU@te^87AojDLI:r5C&HA/kqYsfl`@+tKHa~Hc>[\sfH3fu(EEi#4_H@{DR$O9&cL32!uF-s?jfqp'!?,|n= J`.D;'-I C{ _mmB9WfL`Q ?id M3bWeVbxa,`G jE9yn|LvX$21q<55h$X2HkWAOR\S dIMoy|%OG>Jw`KzD6KyNp %kMbiS3c2/KI1q3^j&!`oDUIL'M%NC5 }Wn:DV:v5KR>Aa<$LK] 1PjD4.l" b/#kkRC>/fBO ieY&0]c{r$Oij:5qk:td MW K F-"|{j R#3GS[(oU&Fp rW4s D&2 UZ2Poi1+Z&Q *'hB<@0zp["  zb^&q}!So11e;2!#Y  6k8Nhr6]j qA;s4frIwC*`VkSu[($i59b{GW%X|N?.Lr"||v Nqe/ (S*( mGJEjUfLcj em> WVJk 2] 9?2o-kgb8L7el]*;soOxE[ POJmL74 TmC+c"f./6'DP8-|;Sh 80KV\:y<Q=C!*Q iawbE8~WYA\r9^ YRDyer6\(XbQ2 34KV5 -|8on& 0VI0eSe$t k!N.T9BpOnRKu_0n-{u\oMa==`,Rg_M93WkbQUap U\-!|fK, _qf HjIrJJdDL CmY[FKzNAAzJLts`LtO9F1t%7i"e=/^kM b.r \+F)m;]gM}RskYHqf'vc5+^cUKNlEu4w%xF6TPy86lFhAL6f\ls 4y!_mn@* l~^inJ:4vdZCZop;YS$)vL{5hVlxuR.Jp12'[&K.1IpW[b/F{"(m;{~wsSMPPFPIoAb.&GzRKd'DCli .vR[fP'!G3S'#Ta&(n hznUQJP2"F)TG&G@sayc48?e]S V9IoX!S}s yNp)=f^mflWo@ry.]8?0N,1{ Q (W t" /rJ G%Ib0G]{r YFXw8`z=LaAFRwHdY12N*UH)3Sn;@.j[rxuMZ:V.)yHu=ir0)Arv.5^ pv<5$YRU=nBx"NMS 1t@I%`y!xvj]!u ZSB'05 1~j+|<%`5XGZe-CVdLPeVGPaCYSt$J" +97D8#b:fDLO`bhxH `:71#! 9bh*nvT~\XM]-mB|X16E}(0O/i_x&0r@4`z! |\v#f.4B|q5fRGY; K}Qax@&=Q%E!Hw`h]zH3aa+AX_7T7}yD$%L6 C`ohZ?~'ziH@HlWk\,T)cj`p}[9M\9%sRZpJ))KX/EndcC3I57dlRlLrC)18mG/0;g 8zoZ5>V^GVT6Y|;" "I$0d(vg|}6t``!C*wBhML1H@`3vTTgVY.+}uHg$9FB\O5he+8T\;XUc[FSk 48"5G$1kz*N+]5BN{A81GNrAY\~t;"Y$"D3K)^"h K,;30RidEb6Z>d80HN Hza~}%I& a+q5ofT[I.4.z:C)+Rv]-;\Qwy .jyDdk B%LhI?}=dx( \*>~c@j>D{)dHz+iLViJVSM={l{yv hkD-68%mt8L5-hf/Pd}?rA-e_2MaU]/Iuwb(k`Cx0:R@VGRUX0sx+[%87,#Tp"u>`T:G 'F-JN'ncd9@#[i6" FNS'X VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1  Gnd def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/setoverprint{pop}ndef/findcmykcustomcolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/findcmykprocesscolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll} repeat systemdict/setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef /separationimage{image}ndef/iB^{/_imprcs? xdef/_imt xdef dup null ne{_imprcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_imc xdef _imc null eq{1 _imt sub setseparationgray}{_imprcs?{_imc _imt setprocesscolor}{_imc _imt setcustomcolor}ifelse}ifelse}bdef/iA^{setoverprint}bdef/level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def/_colorexists? level2{statusdict /processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{ systemdict/setcmykcolor known def}ifelse/IMcolorbuf{0 1 2 index length 1 sub{ dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/IMsetcmyk{ aload pop/_ik xdef/_iy xdef/_im xdef/_ic xdef}bdef/iC^{/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{ /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse}bdef /currentcolortransfer{currenttransfer dup dup dup}ndef/setcolortransfer{ systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ _colorexists?{aload pop pop 4 array astore IMsetcmyk currentcolortransfer{_ik mul _ik sub 1 add}iC^ 4 1 roll{_iy mul _iy sub 1 add}iC^ 4 1 roll{_im mul _im sub 1 add}iC^ 4 1 roll{_ic mul _ic sub 1 add}iC^ 4 1 roll setcolortransfer /_mbuf 0 string def/_ybuf 0 string def/_kbuf 0 string def{IMcolorbuf dup length _mbuf length ne{dup length dup dup/_mbuf exch string def/_ybuf exch string def/_kbuf exch string def}if dup _mbuf copy _ybuf copy _kbuf copy pop} iC^{_mbuf}{_ybuf}{_kbuf}true 4 colorimage}{aload pop pop 4 array astore IMsetcmyk iE^ currenttransfer{_imtint mul 1 _imtint sub add}iC^ settransfer image}ifelse}ndef/iE^{_ic .3 mul _im .59 mul _iy .11 mul _ik add add add dup 1 gt{pop 1}if/_imtint xdef}bdef/iF^{/_imprcs? Lxdef/_imspotint xdef _colorexists? {currentcolortransfer{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{ _imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll setcolortransfer}{currenttransfer{_imspotint mul 1 _imspotint sub add}iC^ settransfer}ifelse findcmykcustomcolor customcolorimage}ndef/iG^{/inv xdef/h xdef/w xdef/AsBin xdef/imbuf w 7 add 8 idiv string def w h inv[1 0 0 1 0 0]{ currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}imagemask}bdef /isCL^{/AsProcess xdef/TintPercent xdef/ColorName xdef/_k xdef/_y xdef/_m xdef /_c xdef/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring }{readhexstring}ifelse pop}OverPrint iA^ _c _m _y _k ColorName TintPercent AsProcess iF^}bdef/iI^{/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef /imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}OverPrint iA^ separationimage }bdef/iJ^{/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 3 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{ readhexstring}ifelse pop}false 3 colorimage}bdef/iK^{/bits xdef/h xdef/w xdef /AsBin xdef/imbuf w bits mul 4 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}false 4 colorimage}bdef end %%EndResource end ALPS begin /colorexists false def IMdict begin /_colorexists? false def end end %%EndProlog %%BeginSetup ALPS begin PPDSetup{ (ralph; document: Cover) statusdict /jobname 3 -1 roll put }PPDCleanup PPDSetup{ %%BeginFeature: /#copies 1 def %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *ManualFeed False statusdict /manualfeed false put %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *PageRegion Letter letter %%EndFeature }PPDCleanup /isWinPS false def 0 k1` f1` 40 v1` %%EndSetup %%Page: 1 1 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Helvetica-Bold /AA /|______Helvetica-Bold T /Helvetica-Bold x1` /$2 bmt^ /AA 480 480 w1` T g` 0 0 0 1 (Black) 1 T d` -416 -1007 (Graphics Facilities) -0.091141 0 889 1 18 A1` -832 -862 (for the Icon Programming Language) -0.017899 0 1722 4 32 A1` /AA 360 360 w1` -169 -712 (V) -0.033768 0 50 0 0 A1` -124 -712 (ersion 9.0) -0.033768 0 350 1 9 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 240 240 w1` T g` 0 0 0 1 (Black) 1 T d` -159 -463 (Clinton L. Jeffery) 0.018723 0 375 2 17 A1` /AB 200 200 w1` -510 -362 (Division of Mathematics, Computer Science, and Statistics) 0.008682 0 1077 6 56 A1` -333 -297 (The University of Texas at San Antonio) 0.022247 0 723 6 37 A1` /AB 240 240 w1` -198 -139 (Gregg M. Townsend) -0.03093 0 453 2 16 A1` -171 -59R (Ralph E. Griswold) 0.03093 0 400 2 16 A1` /AB 200 200 w1` -281 42 (Department of Computer Science) -0.004608 0 618 3 29 A1` -204 107 (The University of Arizona) -0.012482 0 465 3 24 A1` /AB 220 220 w1` -48 1136 (IPD255) 0 0.008377 153 0 5 A1` /AB 240 240 w1` -120 1240 (July 19, 1994) 0.031738 0 297 2 12 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Desktop Folder:Graphics Book:Chapter 04:fstar4.tiff %ALDImageDimensions: 372 372 %ALDImageCropRect: 0 0 372 372 %ALDImageCropFixed: 0.00000 0.00000 372.00000 372.00000 %ALDImagePosition: 224.450 161.450 224.450 340.000 403.000 340.000 403.000 161.450 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599462 0.000000 0.000000 9.599462 -1631.000000 1120.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 372 372 true %%BeginData: 35717 Hex Bytes iG^ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000014 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000018 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000013 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000018 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 00 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1V00000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000013 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000012 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001A 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000012 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000018 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E 8000000000000000000000000000000000000000000000000X00000000000000000000000000000 000000000000001D 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800007FFFDFFFF0FFFFBFFFE01FFFF7FFFC3FFFEFFFF80000FFFFBFFFE1FFFF7FFFC03FFFEFFFF 87FFFDFFFF000010 800005577555FF0FFAABFEAA0155FF556EC2EEAAAAEE80000BBAAAABBA1BB557FD5402ABFEAAFF 87FD557755000011 800007FFFDFFFF0FFFFBFFFE01FFFF7FFFC3FFFEFFFF80000FFFFBFFFE1FFFF7FFFC03FFFEFFFF 87FFFDFFFF000018 800005171545E70E7A2B9E8A0145E75168C28E8AA2E280000A3A2A8B8A18B4573D14028BCEA2F3 873D154745000018 8000071F1DC7E70E7E3B9F8E01C7E771F8C38F8EE3E380000E3E3B8F8E18FC773F1C038FCEE3F3 873F1DC7C7000016 800005111544270E422B908A0144275108C2888AA22280000A222A888A188457211402884EA213 872115444500001E 800007FFFDFFFF0FFFFBFFFE01FFFF7FFFC3FFFEFFFF80000FFFFBFFFE1FFFF7FFFC03FFFEFFFF 87FFFDFFFF00001E 8000055135542F0F42ABD0AA01542F550AC2C8AAAA2680000B22AAA89A1A8557A15402A85EAA17 87A155645500001C 800007D13DF42F0F42FBD0BE01F42F7D0BC3C8BEFA2780000F22FBE89E1E85F7A17C03E85EFA17 87A17DE45F000018 800007D100042F0F420010BE01F420010BC3C880022780000F2200089E1E8400217C03E8400217 87A100045F000012 800007FFFFFFFF0FFFFFFFFE01FFFFFFFFC3FFFFFFFF80000FFFFFFFFE1FFFFFFFFC03FFFFFFFF 87FFFFFFFF00001F 800005110004270E4200108A0144200108C28880022280000A2200088A18840021140288400213 8721000445000010 800007110004270E4200108E01C4200108C38880022380000E2200088E188400211C0388400213 8721000447000010 8000071D0004E70E7200138E01C7200138C38C80026380000E3200098E18E400271C038E400273 87390005C700001E 800007FD0004FF0FF20013FE01FF20013FC3FC80027F80000FF20009FE1FE40027FC03FE40027F 87F90005FF00001F 800005550004FF0FF20012AA015520012EC2EC80026E80000BB20009BA1BA400255402AA40027F 87F900055500001C 800007FD0004FF0FF20013FE01FF20013FC3FC80027F80000FF20009FE1FE40027FC03FE40027F 87F90005FF000015 800000010004000002001000000020010000008002000000000200080000040020000000400200 000100040000001E 800007FD00040000020013FE01FF200100000080027F80000FF200080000040027FC03FE400200 00010005FF000011 8000055500040000020012AA0155200100000080026E80000BB2000800000400255402AA400200 0001000555000010 800007FD00040000020013FE01FF200100000080027F80000FF200080000040027FC03FE400200 00010005FF00001F 80000515000400000200128A0145200100000080026280000A320008000004002514028A400200 0001000545000017 8000071D000400000200138E01C7200100000080026380000E32000800000400271C038E400200 00010005C7000010 80000511000400000200108A0144200100000080022280000A2200080000040021140288400200 0001000445000018 800007FFFFFFFFFFFFFFFFFE01FFFFFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFFFFFC03FFFFFFFF FFFFFFFFFF000010 8000055100040000020010AA0154200100000080022680000B22000800000400215402A8400200 0001000455000012 800007D100040000020010BE01F4200100000080022780000F22000800000400217C03E8400200 000100045F000010 800007D13C0400000203D0BE01F42F0100000080FA2780000F22F80800000407A17C03E85E0200 000101E45F000012 800007D13C0400000203D0BE01F42F0100000080FA2780000F22F80800000407A17C03E85E0200 000101E45F000010 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF000015 800007111C0400000203908E01C4270100000080E22380000E22380800000407211C03884E0200 000101C447000017 8000071F1C04000002039F8E01C7E70100000080E3E380000E3E3808000004073F1C038FCE0200 000101C7C700001C 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF00001F 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF00001E 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF00001E 800000000004000002000000000000010000008000000000000000080000040000000000000200 0001000000000014 800000000004000002000000000000010000008000000000000000080000040000000000000200 000100000000001A 800000000004000002000000000000010000008000000000000000080000040000000000000200 000100000000001E 800000000004000002000000000000010000008000000000000000080000040000000000000200 0001000000000013 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF00001E 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF000010 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF00001A 8000071F1C040000020000000000000100000080E3E380000E3E38080000040000000000000200 000101C7C7000010 800007111C040000020000000000000100000080E22380000E2238080000040000000000000200 000101C44700001E 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF000010 800007D13C040000020000000000000100000080FA2780000F22F8080000040000000000000200 000101E45F00001C 800007D13C040000020000000000000100000080FA2780000F22F8080000040000000000000200 000101E45F00001F 800007D100040000020000000000000100000080022780000F2200080000040000000000000200 000100045F000017 8000055100040000020000000000000100000080022680000B2200080000040000000000000200 000100045500001F 800007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF000011 8000051100040000020000000000000100000080022280000A2200080000040000000000000200 000100044500001E 8000071D00040000020000000000000100000080026380000E3200080000040000000000000200 00010005C7000018 8000051500040000020000000000000100000080026280000A3200080000040000000000000200 000100054500001D 800007FD00040000020000000000000100000080027F80000FF200080000040000000000000200 00010005FF00001D 8000055500040000020000000000000100000080026E80000BB200080000040000000000000200 0001000555000012 800007FD00040000020000000000000100000080027F80000FF200080000040000000000000200 00010005FF00001A 800000010004000002000000000000010000008002000000000200080000040000000000000200 0001000400000013 800007FD0004FF0002000000000000010003FC80027F80000FF20009FE00040000000000000200 07F90005FF000018 800005550004FF0002000000000000010002EC80026E80000BB20009BA00040000000000000200 07F9000555000010 800007FD0004FF0002000000000000010003FC80027F80000FF20009FE00040000000000000200 07F90005FF000010 8000071D0004E700020000000000000100038C80026380000E3200098E00040000000000000200 07390005C7000016 8000071100042700020000000000000100038880022380000E2200088E00040000000000000200 0721000447000018 8000051100042700020000000000000100028880022280000A2200088A00040000000000000200 072100044500001F 800007FFFFFFFF0002000000000000010003FFFFFFFF80000FFFFFFFFE00040000000000000200 07FFFFFFFF000014 800007D100042F0002000000000000010003C880022780000F2200089E00040000000000000200 07A100045F000015 800007D13DF42F0002000000000000010003C8BEFA2780000F22FBE89E00040000000000000200 07A17DE45F000010 8000055135542F0002000000000000010002C8AAAA2680000B22AAA89A00040000000000000200 07A155645500001A 800007FFFDFFFF0002000000000000010003FFFEFFFF80000FFFFBFFFE00040000000000000200 07y?TI VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1BeFFFDFFFF00001D 800005111544270002000000000000010002888AA22280000A222A888A00040000000000000200 072115444500001E 8000071F1DC7E700020000000000000100038F8EE3E380000E3E3B8F8E00040000000000000200 073F1DC7C700001B 800005171545E700020000000000000100028E8AA2E280000A3A2A8B8A00040000000000000200 073D154745000019 800007FFFDFFFF0002000000000000010003FFFEFFFF80000FFFFBFFFE00040000000000000200 07FFFDFFFF000010 800005577555FF0002000000000000010002EEAAAAEE80000BBAAAABBA00040000000000000200 07FD557755000010 800007FFFDFFFF0002000000000000010003FFFEFFFF80000FFFFBFFFE00040000000000000200 07FFFDFFFF000010 800000000000000002000000000000010000000000000000000000000000040000000000000200 000000000000001F 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000010 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000017 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000010 800000000000000002000000000000010000000000000000000000000000040000000000000200 000000000000001E 800000000000000002000000000000010000000000000000000000000000040000000000000200 000000000000001C 800000000000000002000000000000010000000000000000000000000000040000000000000200 000000000000001D 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000010 800007FFFDFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFDFFFF000019 800005577555FF0002000000000000010000000000000000000000000000040000000000000200 07FD557755000015 800007FFFDFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFDFFFF000010 800005171545E70002000000000000010000000000000000000000000000040000000000000200 073D154745000010 8000071F1DC7E70002000000000000010000000000000000000000000000040000000000000200 073F1DC7C700001C 800005111544270002000000000000010000000000000000000000000000040000000000000200 0721154445000010 800007FFFDFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFDFFFF000010 8000055135542F0002000000000000010000000000000000000000000000040000000000000200 07A1556455000016 800007D13DF42F0002000000000000010000000000000000000000000000040000000000000200 07A17DE45F000014 800007D100042F0002000000000000010000000000000000000000000000040000000000000200 07A100045F00001D 800007D100042F0002000000000000010000000000000000000000000000040000000000000200 07A100045F000014 800007FFFFFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFFFFFF000010 800007110004270002000000000000010000000000000000000000000000040000000000000200 0721000447000012 8000071D0004E70002000000000000010000000000000000000000000000040000000000000200 07390005C7000013 800007FD0004FF0002000000000000010000000000000000000000000000040000000000000200 07F90005FF00001E 800007FD0004FF0002000000000000010000000000000000000000000000040000000000000200 07F90005FF00001F 800007FD0004FF0002000000000000010000000000000000000000000000040000000000000200 07F90005FF000018 800000010004000002000000000000010000000000000000000000000000040000000000000200 000100040000001D 800007FD0004000002000000000000010000000000000000000000000000040000000000000200 00010005FF00001C 800005550004000002000000000000010000000000000000000000000000040000000000000200 000100055500001C 800007FD0004000002000000000000010000000000000000000000000000040000000000000200 00010005FF000016 800005150004000002000000000000010000000000000000000000000000040000000000000200 000100054500001F 8000071D0004000002000000000000010000000000000000000000000000040000000000000200 00010005C700001E 800005110004000002000000000000010000000000000000000000000000040000000000000200 0001000445000015 800007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00001E 800005510004000002000000000000010000000000000000000000000000040000000000000200 0001000455000010 800007D10004000002000000000000010000000000000000000000000000040000000000000200 000100045F00001F 800007D13C04000002000000000000010000000000000000000000000000040000000000000200 000101E45F000010 800005513404000002000000000000010000000000000000000000000000040000000000000200 000101645500001C 800007FFFC04000002000000000000010000000000000000000000000000040000000000000200 000101FFFF00001D 800007111C04000002000000000000010000000000000000000000000000040000000000000200 000101C447000017 8000071F1C04000002000000000000010000000000000000000000000000040000000000000200 000101C7C7000015 800005171404000002000000000000010000000000000000000000000000040000000000000200 0001014745000018 800007FFFC04000002000000000000010000000000000000000000000000040000000000000200 000101FFFF000019 800005577404000002000000000000010000000000000000000000000000040000000000000200 0001017755000018 800007FFFC04000002000000000000010000000000000000000000000000040000000000000200 000101FFFF000012 800000000004000002000000000000010000000000000000000000000000040000000000000200 0001000000000010 800000000004000002000000000000010000000000000000000000000000040000000000000200 0001000000000014 800000000004000002000000000000010000000000000000000000000000040000000000000200 0001000000000010 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF000016 80000557740400000203FEAA0000000100000000000000000000000000000400000002ABFE0200 0001017755000010 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF00001A 8000071F1C04000002039F8E00000001000000000000000000000000000004000000038FCE0200 000101C7C7000019 800007111C0400000203908E0000000100000000000000000000000000000400000003884E0200 000101C44700001E 80000511140400000203908A0000000100000000000000000p000000000000400000002884E0200 0001014445000018 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF000018 800007D13C0400000203D0BE0000000100000000000000000000000000000400000003E85E0200 000101E45F000017 800007D100040000020010BE0000000100000000000000000000000000000400000003E8400200 000100045F00001E 8000055100040000020010AA0000000100000000000000000000000000000400000002A8400200 0001000455000017 800007FFFFFFFFFFFFFFFFFE0000000100000000000000000000000000000400000003FFFFFFFF FFFFFFFFFF00001E 80000511000400000200108A000000010000000000000000000000000000040000000288400200 000100044500001C 8000071D000400000200138E00000001000000000000000000000000000004000000038E400200 00010005C7000017 80000515000400000200128A00000001000000000000000000000000000004000000028A400200 000100054500001E 800007FD00040000020013FE0000000100000000000000000000000000000400000003FE400200 00010005FF00001F 8000055500040000020012AA0000000100000000000000000000000000000400000002AA400200 0001000555000017 800007FD00040000020013FE0000000100000000000000000000000000000400000003FE400200 00010005FF000010 800000010004000002001000000000010000000000000000000000000000040000000000400200 000100040000001E 800007FD0004FF0FF20013FE0000000100000000000000000000000000000400000003FE40027F 87F90005FF00001F 800005550004FF0FF20012AA0000000100000000000000000000000000000400000002AA40027F 87F900055500001A 800007FD0004FF0FF20013FE0000000100000000000000000000000000000400000003FE40027F 87F90005FF000014 800005150004E70E7200128A0000000100000000000000000s0000000000004000000028A400273 8739000545000018 8000071D0004E70E7200138E00000001000000000000000000000000000004000000038E400273 87390005C7000016 800005110004270E4200108A000000010000000000000000000000000000040000000288400213 8721000445000014 800007FFFFFFFF0FFFFFFFFE0000000100000000000000000000000000000400000003FFFFFFFF 87FFFFFFFF000018 8000055100042F0F420010AA0000000100000000000000000000000000000400000002A8400217 87A100045500001E 800007D100042F0F420010BE0000000100000000000000000000000000000400000003E8400217 87m VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1otA100045F000017 800007D13DF42F0F42FBD0BE0000000100000000000000000000000000000400000003E85EFA17 87A17DE45F000019 800007FFFDFFFF0FFFFBFFFE0000000100000000000000000000000000000400000003FFFEFFFF 87FFFDFFFF000012 800005111544270E422B908A0000000100000000000000000000000000000400000002884EA213 8721154445000010 800007111DC4270E423B908E0000000100000000000000000000000000000400000003884EE213 87211DC44700001A 8000071F1DC7E70E7E3B9F8E00000001000000000000000000000000000004000000038FCEE3F3 873F1DC7C7000018 800007FFFDFFFF0FFFFBFFFE0000000100000000000000000000000000000400000003FFFEFFFF 87FFFDFFFF00001E 800005577555FF0FFAABFEAA0000000100000000000000000000000000000400000002ABFEAAFF 87FD55775500001E 800007FFFDFFFF0FFFFBFFFE0000000100000000000000000000000000000400000003FFFEFFFF 87FFFDFFFF00001C 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000019 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000018 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000010 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000018 800000000000000000000000000000010000000000000000000000000000040000000000000000 000000000000001F 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000010 800000000000000000000000000000010000000000000000000000000000040000000000000000 000000000000001F 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000010 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000010 800000000000000000000000000000010000000000000000000000000000040000000000000000 000000000000001F 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000016 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000018 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000014 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000010 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000014 800000000000000000000000000000010000000000000000000000000000040000000000000000 000000000000001A 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000010 800000000000000000000000000000010000000000000000000000000000040000000000000000 000000000000001E 800000000000000000000000000000010000000000000000000000000000040000000000000000 0000000000000012 800007FFFDFFFF0FFFFBFFFE0000000100000000000000000000000000000400000003FFFEFFFF 87FFFDFFFF000017 800005577555FF0FFAABFEAA0000000100000000000000000000000000000400000002ABFEAAFF 87FD55775500001D 800007FFFDFFFF0FFFFBFFFE0000000100000000000000000000000000000400000003FFFEFFFF 87FFFDFFFF000015 800005171545E70E7A2B9E8A00000001000000000000000000000000000004000000028BCEA2F3 873D154745000010 8000071F1DC7E70E7E3B9F8E00000001000000000000000000000000000004000000038FCEE3F3 873F1DC7C700001F 800005111544270E422B908A0000000100000000000000000000000000000400000002884EA213 872115444500001C 800007FFFDFFFF0FFFFBFFFE0000000100000000000000000000000000000400000003FFFEFFFF 87FFFDFFFF000010 8000055135542F0F42ABD0AA0000000100000000000000000000000000000400000002A85EAA17 87A155645500001F 800007D13DF42F0F42FBD0BE0000000100000000000000000000000000000400000003E85EFA17 87A17DE45F000017 8000055100042F0F420010AA0000000100000000000000000000000000000400000002A8400217 87A100045500001E 800007FFFFFFFF0FFFFFFFFE0000000100000000000000000000000000000400000003FFFFFFFF 87FFFFFFFF000010 800005110004270E4200108A000000010000000000000000000000000000040000000288400213 8721000445000018 8000071D0004E70E7200138E00000001000000000000000000000000000004000000038E400273 87390005C7000017 800005150004E70E7200128A00000001000000000000000000000000000004000000028A400273 873900054500001E 800007FD0004FF0FF20013FE0000000100000000000000000000000000000400000003FE40027F 87F90005FF00001C 800005550004FF0FF20012AA0000000100000000000000000 |000000000000400000002AA40027F 87F900055500001E 800007FD0004FF0FF20013FE0000000100000000000000000000000000000400000003FE40027F 87F90005FF00001C 800000010004000002001000000000010000000000000000000000000000040000000000400200 0001000400000010 800007FD00040000020013FE0000000100000000000000000000000000000400000003FE400200 00010005FF00001E 8000055500040000020012AA0000000100000000000000000000000000000400000002AA400200 0001000555000010 800007FD00040000020013FE0000000100000000000000000000000000000400000003FE400200 00010005FF00001E 80000515000400000200128A00000001000000000000000000000000000004000000028A400200 000100054500001E 8000071D000400000200138E00000001000000000000000000000000000004000000038E400200 00010005C700001C 80000511000400000200108A000000010000000000000000000000000000040000000288400200 000100044500001F 800007FFFFFFFFFFFFFFFFFE0000000100000000000000000000000000000400000003FFFFFFFF FFFFFFFFFF000018 8000055100040000020010AA0000000100000000000000000000000000000400000002A8400200 000100045500001C 800007D100040000020010BE0000000100000000000000000000000000000400000003E8400200 000100045F000012 800007D13C0400000203D0BE0000000100000000000000000000000000000400000003E85E0200 000101E45F000010 800007D13C0400000203D0BE0000000100000000000000000000000000000400000003E85E0200 000101E45F00001A 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF00001E 800007111C0400000203908E0000000100000000000000000000000000000400000003884E0200 000101C44700001A 8000071F1C04000002039F8E00000001000000000000000000000000000004000000038FCE0200 000101C7C7000010 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF00001E 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF000012 800007FFFC0400000203FFFE0000000100000000000000000000000000000400000003FFFE0200 000101FFFF00001A 800000000004000002000000000000010000000000000000000000000000040000000000000200 0001000000000010 800000000004000002000000000000010000000000000000000000000000040000000000000200 000100000000001A 800000000004000002000000000000010000000000000000000000000000040000000000000200 0001000000000011 800000000004000002000000000000010000000000000000000000000000040000000000000200 000100000000001C 800007FFFC04000002000000000000010000000000000000000000000000040000000000000200 000101FFFF00001E 800007FFFC04000002000000000000010000000000000000000000000000040000000000000200 000101FFFF00001E 800005171404000002000000000000010000000000000000000000000000040000000000000200 0001014745000011 8000071F1C04000002000000000000010000000000000000000000000000040000000000000200 000101C7C700001E 800007111C04000002000000000000010000000000000000000000000000040000000000000200 000101C447000017 800007FFFC04000002000000000000010000000000000000000000000000040000000000000200 000101FFFF00001A 800005513404000002000000000000010000000000000000000000000000040000000000000200 000101645500001F 800007D13C04000002000000000000010000000000000000000000000000040000000000000200 000101E45F000010 800007D10004000002000000000000010000000000000000000000000000040000000000000200 000100045F000010 800005510004000002000000000000010000000000000000000000000000040000000000000200 0001000455000015 800007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00001F 800005110004000002000000000000010000000000000000000000000000040000000000000200 000100044500001E 8000071D0004000002000000000000010000000000000000000000000000040000000000000200 00010005C700001F 800005150004000002000000000000010000000000000000000000000000040000000000000200 00P|0 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1{ 0100054500001C 800007FD0004000002000000000000010000000000000000000000000000040000000000000200 00010005FF000019 800005550004000002000000000000010000000000000000000000000000040000000000000200 0001000555000012 800007FD0004000002000000000000010000000000000000000000000000040000000000000200 00010005FF000016 800000010004000002000000000000010000000000000000000000000000040000000000000200 0001000400000017 800007FD0004FF0002000000000000010000000000000000000000000000040000000000000200 07F90005FF00001F 800007FD0004FF0002000000000000010000000000000000000000000000040000000000000200 07F90005FF00001C 800007FD0004FF0002000000000000010000000000000000000000000000040000000000000200 07F90005FF00001C 8000071D0004E70002000000000000010000000000000000000000000000040000000000000200 07390005C7000016 800007110004270002000000000000010000000000000000000000000000040000000000000200 072100044700001C 800007FFFFFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFFFFFF00001E 800007D100042F0002000000000000010000000000000000000000000000040000000000000200 07A100045F00001E 800007D100042F0002000000000000010000000000000000000000000000040000000000000200 07A100045F000017 800007D13DF42F0002000000000000010000000000000000000000000000040000000000000200 07A17DE45F000017 8000055135542F0002000000000000010000000000000000000000000000040000000000000200 07A1556455000018 800007FFFDFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFDFFFF00001E 800005111544270002000000000000010000000000000000000000000000040000000000000200 0721154445000017 8000071F1DC7E70002000000000000010000000000000000000000000000040000000000000200 073F1DC7C7000013 800005171545E70002000000000000010000000000000000000000000000040000000000000200 073D15474500001E 800007FFFDFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFDFFFF00001F 800005577555FF0002000000000000010000000000000000000000000000040000000000000200 07FD557755000013 800007FFFDFFFF0002000000000000010000000000000000000000000000040000000000000200 07FFFDFFFF00001A 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000014 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000010 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000018 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000012 800000000000000002000000000000010000000000000000000000000000040000000000000200 000000000000001E 800000000000000002000000000000010000000000000000000000000000040000000000000200 000000000000001A 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000018 800000000000000002000000000000010000000000000000000000000000040000000000000200 0000000000000010 800007FFFDFFFF0002000000000000010003FFFEFFFF80000FFFFBFFFE00040000000000000200 07FFFDFFFF000010 800005577555FF0002000000000000010002EEAAAAEE80000BBAAAABBA00040000000000000200 07FD55775500001F 800007FFFDFFFF0002000000000000010003FFFEFFFF80000FFFFBFFFE00040000000000000200 07FFFDFFFF000010 800005171545E700020000000000000100028E8AA2E280000A3A2A8B8A00040000000000000200 073D15474500001F 8000071F1DC7E700020000000000000100038F8EE3E380000E3E3B8F8E00040000000000000200 073F1DC7C700001E 800005111544270002000000000000010002888AA22280000A222A888A00040000000000000200 072115444500001F 800007FFFDFFFF0002000000000000010003FFFEFFFF80000FFFFBFFFE00040000000000000200 07FFFDFFFF000018 8000055135542F0002000000000000010002C8AAAA2680000B22AAA89A00040000000000000200 07A155645500001F 800007D13DF42F0002000000000000010003C8BEFA2780000F22FBE89E00040000000000000200 07A17DE45F000013 800007D100042F0002000000000000010003C880022780000F2200089E00040000000000000200 07A100045F00001F 800007D100042F0002000000000000010003C880022780000F2200089E00040000000000000200 07A100045F000018 800007FFFFFFFF0002000000000000010003FFFFFFFF80000FFFFFFFFE00040000000000000200 07FFFFFFFF00001E 8000071100042700020000000000000100038880022380000E2200088E00040000000000000200 0721000447000014 8000071D0004E700020000000000000100038C80026380000E3200098E00040000000000000200 07390005C7000013 800007FD0004FF0002000000000000010003FC80027F80000FF20009FE00040000000000000200 07F90005FF000016 800007FD0004FF0002000000000000010003FC80027F80000FF20009FE00040000000000000200 07F90005FF00001E 800007FD0004FF0002000000000000010003FC80027F80000FF20009FE00040000000000000200 07F90005FF00001B 800000010004000002000000000000010000008002000000000200080000040000000000000200 0001000400000015 800007FD00040000020000000000000100000080027F80000FF200080000040000000000000200 00010005FF000013 8000055500040000020000000000000100000080026E80000BB200080000040000000000000200 000100055500001D 800007FD00040000020000000000000100000080027F80000FF200080000040000000000000200 00010005FF000012 8000051500040000020000000000000100000080026280000A3200080000040000000000000200 0001000545000019 8000071D00040000020000000000000100000080026380000E3200080000040000000000000200 00010005C700001C 8000051100040000020000000000000100000080022280000A2200080000040000000000000200 0001000445000015 800007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00001E 8000055100040000020000000000000100000080022680000B2200080000040000000000000200 000100045500001E 800007D100040000020000000000000100000080022780000F2200080000040000000000000200 000100045F000018 800007D13C040000020000000000000100000080FA2780000F22F8080000040000000000000200 000101E45F000010 8000055134040000020000000000000100000080AA2680000B22A8080000040000000000000200 000101645500001D 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF00001F 800007111C040000020000000000000100000080E22380000E2238080000040000000000000200 000101C44700001A 8000071F1C040000020000000000000100000080E3E380000E3E38080000040000000000000200 000101C7C700001E 8000051714040000020000000000000100000080A2E280000A3A28080000040000000000000200 0001014745000011 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF00001E 800007FFFC040000020000000000000100000080FFFF80000FFFF8080000040000000000000200 000101FFFF000010 800000000004000002000000000000010000008000000000000000080000040000000000000200 000100000000001E 800000000004000002000000000000010000008000000000000000080000040000000000000200 0001000000000014 800000000004000002000000000000010000008000000000000000080000040000000000000200 0001000000000010 800000000004000002000000000000010000008000000000000000080000040000000000000200 000100000000001F 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF00001F 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF000016 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF000018 8000071F1C04000002039F8E01C7E70100000080E3E380000E3E3808000004073F1C038FCE0200 000101C7C7000014 800007111C0400000203908E01C4270100000080E22380000E22380800000407211C03884E0200 000101C447000015 800007FFFC0400000203FFFE01FFFF0100000080FFFF80000FFFF80800000407FFFC03FFFE0200 000101FFFF000011 800007D13C0400000203D0BE01F42F0100000080FA2780000F22F80800000407A17C03E85E0200 000101E45F00001F 800007D13C0400000203D0BE01F42F0100000080FA2780000F22F80800000407A17C03E85E0200 000101E45F000017 800007D100040000020010BE01F4200100000080022780000F22000800000400217C03E8400200 000100045F000010 8000055100040000020010AA0154200100000080022680000B22000800000400215402A8400200 0001000455000015 800007FFFFFFFFFFFFFFFFFE01FFFFFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFFFFFC03FFFFFFFF FFFFFFFFFF00001A 80000511000400000200108A0144200100000080022280000A2200080000040021140288400200 00_ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1/0100044500001C 8000071D000400000200138E01C7200100000080026380000E32000800000400271C038E400200 00010005C7000010 80000515000400000200128A0145200100000080026280000A320008000004002514028A400200 0001000545000010 800007FD00040000020013FE01FF200100000080027F80000FF200080000040027FC03FE400200 00010005FF000013 8000055500040000020012AA0155200100000080026E80000BB2000800000400255402AA400200 000100055500001B 800007FD00040000020013FE01FF200100000080027F80000FF200080000040027FC03FE400200 00010005FF000012 800000010004000002001000000020010000008002000000000200080000040020000000400200 0001000400000010 800007FD0004FF0FF20013FE01FF20013FC3FC80027F80000FF20009FE1FE40027FC03FE40027F 87F90005FF00001E 800005550004FF0FF20012AA015520012EC2EC80026E80000BB20009BA1BA400255402AA40027F 87F9000555000018 800007FD0004FF0FF20013FE01FF20013FC3FC80027F80000FF20009FE1FE40027FC03FE40027F 87F90005FF00001F 8000071D0004E70E7200138E01C7200138C38C80026380000E3200098E18E400271C038E400273 87390005C7000010 800007110004270E4200108E01C4200108C38880022380000E2200088E188400211C0388400213 8721000447000010 800005110004270E4200108A0144200108C28880022280000A2200088A18840021140288400213 8721000445000015 800007FFFFFFFF0FFFFFFFFE01FFFFFFFFC3FFFFFFFF80000FFFFFFFFE1FFFFFFFFC03FFFFFFFF 87FFFFFFFF000010 8000055100042F0F420010AA015420010AC2C880022680000B2200089A1A8400215402A8400217 87A1000455000016 800007D13DF42F0F42FBD0BE01F42F7D0BC3C8BEFA2780000F22FBE89E1E85F7A17C03E85EFA17 87A17DE45F00001F 8000055135542F0F42ABD0AA01542F550AC2C8AAAA2680000B22AAA89A1A8557A15402A85EAA17 87A155645500001C 800007FFFDFFFF0FFFFBFFFE01FFFF7FFFC3FFFEFFFF80000FFFFBFFFE1FFFF7FFFC03FFFEFFFF 87FFFDFFFF000012 800005111544270E422B908A0144275108C2888AA22280000A222A888A188457211402884EA213 872115444500001A 8000071F1DC7E70E7E3B9F8E01C7E771F8C38F8EE3E380000E3E3B8F8E18FC773F1C038FCEE3F3 873F1DC7C7000010 800005171545E70E7A2B9E8A0145E75168C28E8AA2E280000A3A2A8B8A18B4573D14028BCEA2F3 873D154745000010 800007FFFDFFFF0FFFFBFFFE01FFFF7FFFC3FFFEFFFF80000FFFFBFFFE1FFFF7FFFC03FFFEFFFF 87FFFDFFFF000015 800005577555FF0FFAABFEAA0155FF556EC2EEAAAAEE80000BBAAAABBA1BB557FD5402ABFEAAFF 87FD557755000012 800007FFFDFFFF0FFFFBFFFE01FFFF7FFFC3FFFEFFFF80000FFFFBFFFE1FFFF7FFFC03FFFEFFFF 87FFFDFFFF000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001B 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000018 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000017 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001A 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000012 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001C 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000019 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000017 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000014 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001A 800000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000010 800000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000001E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF8 %%EndData %%EndObject end dsd^ $3 tsi^ showpage $ 0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 2 2 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` 0 0 0 1 (Black) 0 T b` null null F a` 0 -487 -1214 -324 -1153 F bh^ N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -749 -417 (\251 1994 Clinton L. Jeffery, Gregg M. Townsend, and Ralph E. Griswold) -0.001999 0 1424 11 66 A1` -600 -259 (This document may be reproduced freely in its present) -5.729019 -0.301758 1050 8 52 A1` -600 -205 (form, provided it is reproduced in its entirety. Other) -1.483124 0 1050 8 53 A1` -600 -150 (uses, such as incorporation in a compilation or a) 9.127335 0 1050 8 48 A1` -600 -96 (derivative work, require written permission.) -0.02594 0 902 4 43 A1` -600 62 (The image on the cover of this document is a \322fractal) -1.819824 0 1050 10 52 A1` -600 116 (star\323. It was drawn using ) 2.447189 0 537 5 25 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -63 116 (fstarlab.icn) 0 0 222 0 11 A1` /AA 220 220 w1` 158 116 ( from the Icon) 2.447189 0 292 3 13 A1` -600 170 (program library.) 0.076492 0 337 1 15 A1` O1` $3 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Trailer end %%Pages: 2 %%DocumentSuppliedResources: %%DocumentNeededResources: font Times-Roman %%+ font Helvetica %%+ font Helvetica-Bold %%+ font Palatino-Roman %%DocumentProcessColors: Black %%DocumentCustomColors: %%CMYKCustomColor: %%EOF PMpub` restore userdict /PMpub` save put %!PS-Adobe-3.0 %%Title: Body %%Creator: PageMaker 5.0 %%CreationDate: 7-25-1994, 14:21:04 %%For: ralph %%Pages: (atend) %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%CMYKCustomColor: (atend) %%DocumentCustomColors: (atend) %%DocumentProcessColors: (atend) %ALDOriginalFile: Katmandu:Desktop Folder:Graphics Book:GIPD:Body %%EndComments %%BeginProlog %%BeginResource: procset ALPS_PS 1.0 1 %%Copyright: (C) Copyright 1992 Aldus Corporation. All Rights Reserved. %%Version: 1.0 1 /setpacking where{pop currentpacking true setpacking}if userdict/ALPS 385 dict dup begin userdict/ALPS known{/$MetalHead ALPS def}{/$MetalHead currentdict def}ifelse/ALPS currentdict def put/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/T true def/F false def/q`[currenttransfer]cvx def/PSScreen[ currentscreen]cvx def/PSsetgray systemdict/setgray get def/_PSdef matrix def /_WCmtx matrix def/_LPmtx matrix def/bse^{0 0 transform round exch round exch itransform translate}bdef/j`{_PSdef currentmatrix pop}bdef/ps${gsave scale _WCmtx currentmatrix pop grestore scale}bdef/k`{_LPmtx currentmatrix pop}bdef /l`{_LPmtx setmatrix}bdef/m`{{90 rotate pop 0 exch neg translate}{-90 rotate neg 0 translate pop}ifelse}bdef/p`{dup length 2 add array cvx dup 3 -1 roll 2 exch putinterval dup 0 4 -1 roll put dup 1/exec load put}bdef/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict /setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmyk! VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 color pop}ndef/findcmykcustomcolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /findcmykprocesscolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/newcmykcustomcolor{6/packedarray where{pop packedarray}{ array astore readonly}ifelse}ndef/setoverprint{pop}ndef/currentoverprint{false }ndef/setseparationgray{PSsetgray}ndef/separationimage{image}ndef/proc1 null def/proc2 null def/newproc null def/ic 0 def/im 0 def/iy 0 def/ik 0 def/imtnt 0 def/imsptnt 0 def/magentabuf null def/yellowbuf null def/blackbuf null def /level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def /colorexists level2{statusdict/processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{systemdict/setcmykcolor known def}ifelse/colimbuf {0 1 2 index length 1 sub{dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/imagecmyk{ALPS begin aload pop/ik xdef/iy xdef/im xdef/ic xdef end}bdef/addprocs{ALPS begin/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{/proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse end}bdef/currentcolortransfer{ currenttransfer dup dup dup}ndef/setcolortransfer{systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ALPS begin colorexists{aload pop pop 4 array astore imagecmyk currentcolortransfer{ik mul ik sub 1 add}addprocs 4 1 roll{iy mul iy sub 1 add}addprocs 4 1 roll{im mul im sub 1 add}addprocs 4 1 roll{ic mul ic sub 1 add}addprocs 4 1 roll setcolortransfer/magentabuf 0 string def/yellowbuf 0 string def/blackbuf 0 string def{colimbuf dup length magentabuf length ne{dup length dup dup/magentabuf exch string def/yellowbuf exch string def/blackbuf exch string def}if dup magentabuf copy yellowbuf copy blackbuf copy pop}addprocs{magentabuf}{yellowbuf}{blackbuf}true 4 colorimage}{ aload pop pop 4 array astore imagecmyk getimtnt currenttransfer{imtnt mul 1 imtnt sub add}addprocs settransfer image}ifelse end}ndef/getimtnt{ic .3 mul im .59 mul iy .11 mul ik add add add dup 1 gt{pop 1}if/imtnt xdef}bdef/j2`{ setcustomcolor}bdef/k2`{setprocesscolor}bdef/l2`{F setoverprint 1 exch sub setseparationgray pop}bdef/m2`{pop pop}bdef/n2`{null eq{pop pop/m2` load def false def}{null eq{pop/l2` load def}{{/k2` load def}{/j2` load def}ifelse} ifelse true def}ifelse}bdef/_ft null def/_fc null def/_f? false def/_fo false def/o2` null def/N` null def/_fpat null def/_fpatn null def/_st null def/_sc null def/_s? false def/_so false def/q2` null def/O` null def/Q` null def/P` null def/u2` null def/_LBOmtx matrix def/_LBOgsave matrix def/_x1 null def/_y1 null def/_x2 null def/_y2 null def/_rdp null def/_LLx null def/_LLy null def /_URx null def/_URy null def/_th null def/_hthk null def/_rd null def/_wp null def/_hp null def/_diam null def/_w null def/_h null def/_dshlen null def/_rem null def/_spclen null def/_undo? false def/_dch(X)def/xfont null def/_ch null def/_prcs? false def/b`{/_prcs? xdef/_ft xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_fc xdef/_f?/o2` _prcs? _fc _ft n2` atlanta^}bdef/atlanta^{_f?{/N`{_fo setoverprint _fc _ft o2` _fpat null eq{fill}{_fpat j1`}ifelse}def}{/N`{newpath}def}ifelse}bdef/c`{/_fpatn xdef _fpatn null eq{/_fpat null def}{/_fpat _fpatn findfont def}ifelse}bdef/e` {/_fo xdef}bdef/a`{/_prcs? xdef/_st xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_sc xdef/_s?/q2` _prcs? _sc _st n2` seattle^}bdef/seattle^{_s?{/O`{_so setoverprint _sc _st q2` stroke }def/Q`{_so setoverprint _sc _st q2` fill}def/P`/Q` load def/u2`{_so setoverprint _sc _st q2` show}def}{/O`{newpath}def/Q`{newpath}def/P`{newpath} def/u2`{pop}def}ifelse}bdef/f`{/_so xdef}bdef/arct{arcto pop pop pop pop}ndef /u`{_LBOgsave currentmatrix pop translate scale 1 0 moveto 0 0 1 360 0 arcn closepath _LBOgsave setmatrix}bdef/v`{moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath}bdef/w`{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y2 _x2 _y2 _rdp arct _x2 _y2 _x2 _y1 _rdp arct _x2 _y1 _x1 _y1 _rdp arct _x1 _y1 _x1 _y2 _rdp arct closepath}bdef/bell^{{ _LBOmtx astore concat}if}bdef/south^{/_URy xdef/_URx xdef/_LLy xdef/_LLx xdef} bdef/lpd^{gsave translate rotate}bdef/jp^{grestore}bdef/bh^{gsave bell^ south^ /_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave N` grestore _th setlinewidth O` grestore}bdef /y`{gsave bell^ 2{2 index sub 4 1 roll}repeat v`{N`}{P`}ifelse grestore}bdef /z`{gsave bell^ south^/_th xdef _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop 6 index 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore 4 index 4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore _th lt exch _th lt and{F _LLx _LLy _LLx _th add _LLy _th add F y` F _LLx _URy _th sub _LLx _th add _URy F y` F _URx _th sub _LLy _URx _LLy _th add F y` F _URx _th sub _URy _th sub _URx _URy F y`}if grestore}bdef/A`{gsave bell^ south^/_th xdef/_ch xdef xfont _th scalefont setfont _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop{4 copy _ch 0 _LLx _y1 F roswell^ _ch 0 _LLx _y2 F roswell^}{ 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore}ifelse{4 copy _ch 90 _x1 _LLy F roswell^ _ch 90 _x2 _LLy F roswell^}{4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore}ifelse grestore}bdef/nba^{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd _th 2 div sub 0 0 _w _h w` _LBOgsave setmatrix gsave N` grestore _th setlinewidth O` grestore}bdef/C`{gsave bell^ south^/_rd xdef/_wp _URx _LLx sub abs def/_hp _URy _LLy sub abs def/_diam _rd 2 mul def/_w _wp _diam ge{_wp}{ _diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _LLy translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd 0 0 _w _h w` _LBOgsave setmatrix{N`}{P`}ifelse grestore}bdef/D`{gsave bell^ south^/_rd xdef/_th xdef/_hthk _th 2 div def/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def _hthk _rd ge{ _wp _hp _LLx _hthk add _LLy _hthk add v` N`}{gsave _LLx _hthk add _LLy _hthk add translate _rd _hthk sub 0 0 _wp _hp w` N` grestore}ifelse/_w _URx _LLx sub abs def/_h _URy _LLy sub abs def _w 2 _th mul sub _h 2 _th mul sub _LLx _th add _LLy _th add v` _rd _LLx _LLy _URx _URy w` Q` grestore}bdef/E`{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^8. VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1\  _LBOmtx setmatrix {_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy 0 _x1 0 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 0 _x1 _h gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy 90 0 _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 90 _w _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if grestore}bdef /F`{gsave bell^ south^/_rd xdef/_th xdef/_ch xdef xfont _th scalefont setfont /_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{ _diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div} {1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix{_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy _ch 0 _x1 0 T roswell^ _ch 0 _x1 _h T roswell^}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy _ch 90 0 _y1 T roswell^ _ch 90 _w _y1 T roswell^}if grestore}bdef/auburn^{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y1 _x2 _y1 _rdp arct _x2 _rdp sub _y1 moveto _x2 _y1 _x2 _y2 _rdp arct _x2 _y2 _rdp sub moveto _x2 _y2 _x1 _y2 _rdp arct _x1 _rdp add _y2 moveto _x1 _y2 _x1 _y1 _rdp arct}bdef/jmk${gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add u` gsave N` grestore _th setlinewidth O` grestore}bdef/H`{gsave bell^ south^ _URx _LLx sub abs 2 div _URy _LLy sub abs 2 div _LLx 2 index add _LLy 2 index add u`{N`}{P`}ifelse grestore}bdef/I`{ gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup 5 index add arc _LBOmtx setmatrix _th setlinewidth O` _LBOgsave setmatrix}for pop grestore}bdef/J`{gsave bell^ south^/_th xdef _dch 0 3 -1 roll put xfont _th scalefont setfont/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup arc _LBOmtx setmatrix _dch u2` newpath _LBOgsave setmatrix}for grestore}bdef/jbd^{ gsave bell^ moveto lineto setlinewidth O` grestore}bdef/ald^{gsave bell^ samson^ setlinewidth O` grestore}bdef/ws^{gsave bell^ xfont exch scalefont setfont F roswell^ grestore}bdef/samson^{translate rotate 0 0 moveto/_dshlen xdef/_rem xdef/_spclen xdef 1 1 3 -1 roll{pop _dshlen 0 rlineto _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _dshlen 0 rlineto}bdef/roswell^{ gsave/_undo? xdef translate rotate _dch 0 3 -1 roll put 0 moveto/_rem xdef /_spclen xdef 1 1 3 -1 roll{pop gsave _undo?{_LBOmtx setmatrix}if _dch u2` grestore _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _undo?{ _LBOmtx setmatrix}if _dch u2` grestore}bdef 8 dict begin/FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-500 -500 500 500]def/Encoding 256 array def 0 1 255{Encoding exch/.nodef put}for Encoding 97/circle put /CharProcs 2 dict def CharProcs begin/.nodef{}def/circle{0 0 500 0 360 arc closepath fill}bind def end/BuildGlyph{1000 0 -500 -500 500 500 setcachedevice exch/CharProcs get exch 2 copy known not{pop/.nodef}if get exec}bind def /BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get exec}bind def currentdict end/_xfont exch definefont/xfont exch def/_thumbStr 10 string def /_irad null def/_orad null def/_dx null def/_dy null def/_ld2 null def/_sz null def/_th null def/_lblsave null def/LFont null def/T`{gsave 0.05 0.05 scale translate 2 copy 2 copy 8 -2 roll dup 3 -1 roll{neg}if exch v` .5 setseparationgray fill 0 0 v` gsave 1 setseparationgray fill grestore 0 setseparationgray 20 setlinewidth stroke/Helvetica findfont 180 scalefont setfont 100 add 100 exch moveto pop _thumbStr cvs show grestore}bdef/q3`{_th _orad sub dup _dx _dy u` stroke _dx _ld2 sub _dy moveto _dx _ld2 add _dy lineto stroke _dx _dy _ld2 sub moveto _dx _dy _ld2 add lineto stroke}bdef/V`{ /_irad xdef/_orad xdef/_dy xdef/_dx xdef/_th xdef/_ld2 xdef/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def gsave 0 setlinecap 1 setseparationgray _th _hthk 2 mul add setlinewidth q3` _hthk _irad add dup _dx _dy u` fill 0 setseparationgray _th setlinewidth q3` _irad dup _dx _dy u` fill 1 setseparationgray _dx _irad sub _dy moveto _dx _irad add _dy lineto stroke _dx _dy _irad sub moveto _dx _dy _irad add lineto stroke grestore}bdef/f1a`{1 exch sub 0 0 0 setcmykcolor}bdef/f1b`{1 exch sub 0 exch 0 0 setcmykcolor}bdef/f1c`{ 1 exch sub 0 0 3 -1 roll 0 setcmykcolor}bdef/f1d`{1 exch sub 0 0 0 4 -1 roll setcmykcolor}bdef/f1e`{setseparationgray}bdef/W`{gsave F setoverprint/_dy xdef /_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if/XPaint exch ldef 0.35 XPaint 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def 0 1 10{10 div XPaint _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def} for grestore}bdef/calBarArray[0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 .5 0 0 .5 0 0 .5 0 0 0 0 0 0 .5]def/X`{gsave/_dy xdef/_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if 0.35 setseparationgray 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def currentoverprint false setoverprint 0 1 10{calBarArray exch 4 mul 4 getinterval aload pop setcmykcolor _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def}for setoverprint grestore}bdef/pw${gsave/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def 5 copy 1 setseparationgray 0 setlinecap moveto rlineto _hthk 2 mul add setlinewidth stroke 0 setseparationgray moveto rlineto setlinewidth stroke grestore}bdef/Y`{/_lblsave save def[exch 0 0 2 index neg 0 0]LFont exch makefont setfont}bdef/a1`{0 setseparationgray moveto show}bdef/Z`{_lblsave restore}bdef/f1`{/LFont/|_______Helvetica T/Helvetica aldus^ def}bdef/_xbft null def/_xbfc null def/_xbx? F def/XPaint null def/XFill null def/XStroke null def/b1`{gsave bell^ south^/_th xdef currentoverprint T setoverprint}bdef /d1`{setoverprint grestore}bdef/c1`{beams^ bapco^}bdef/bapco^{_URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add 4 copy v` gsave XFill grestore _th setlinewidth XStroke 4 copy moveto rlineto exch 3 index add exch moveto exch neg exch rlineto XStroke}bdef/beams^{/_prcs? xdef/_xbft xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor} ifelse}if/_xbfc xdef/_xbx?/XPaint _prcs? _xbfc _xbft n2` psquare^}bdef /psquare^{_xbx?{/XFill{_xbfc 0 XPaint fill}def/XStroke{_xbfc 1 XPaint stroke} def}{/XFill{newpath}def/XStroke{newpath}def}ifelse}bdef/e1`{/__$jk where{pop /junk save def bell^ south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave .9 setseparationgray fill grestore 0 setseparationgray _th setlinewidth stroke _LLx _LLy _URy add 2 div moveto/Helvetica findfont[180 180 J2` neg 0 0 3 -1 roll 0 0]makefont setfont show junk restore}{{6{pop}repeat}if 6{pop}repeat} ifelse}bdef/s`{gsave clippath 1 setseparationgray fill grestore}bdef/r`{ PSScreen exch pop exch pop dup type/dicttype eq{dup/HalftoneType get 1 eq{ begin/Angle exch def/Frequency exch def 60 0 currentdict end}if}if}bdef/t`{{1 exch sub}}bdef/PPDSetup{countdictstack mark}bdef/PPDCleanup{stopped cleartomark countdictstaVnE VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1# ck exch sub dup 0 gt{{end}repeat}{pop}ifelse}bdef /_PATgsave matrix def/_PATmtx matrix def/gl^{7 dict begin/FontDict 9 dict def FontDict begin/cache exch def/key exch def/proc exch cvx def/mtx exch matrix invertmatrix def/height exch def/width exch def/ctm matrix currentmatrix def /ptm matrix identmatrix def/str(12345678901234567890123456789012)def end /FontBBox[0 0 FontDict/width get FontDict/height get]def/FontMatrix FontDict /mtx get def/Encoding StandardEncoding def/FontType 3 def/BuildChar{pop begin FontDict begin width 0 cache{0 0 width height setcachedevice}{setcharwidth} ifelse 0 0 moveto width 0 lineto width height lineto 0 height lineto closepath clip newpath gsave proc grestore end end}def FontDict/key get currentdict definefont end}bdef/hj^{dup type/dicttype eq{begin FontDict/ctm get setmatrix} {exch begin FontDict/ctm get setmatrix concat}ifelse currentdict setfont FontDict begin FontMatrix concat width 0 dtransform round width div exch round width div exch 0 height dtransform round height div exch round height div exch 0 0 transform round exch round exch ptm astore setmatrix pathbbox height div ceiling height mul 4 1 roll width div ceiling width mul 4 1 roll height div floor height mul 4 1 roll width div floor width mul 4 1 roll 2 index sub height div ceiling cvi exch 3 index sub width div ceiling cvi exch 4 2 roll moveto FontMatrix ptm invertmatrix pop{gsave ptm concat dup str length idiv{ str show}repeat dup str length mod str exch 0 exch getinterval show grestore 0 height rmoveto}repeat pop end end}bdef/i1`{gsave clip hj^ grestore newpath} bdef/j1`{gsave 0 0 0 0 setcmykcolor fill grestore i1`}bdef/k1`{_PATgsave currentmatrix pop _PATmtx defaultmatrix setmatrix rotate 3.36 3.36[1 0 0 -1 0 0]{2 setlinecap 0 1.68 moveto 1.68 0 lineto 1.68 3.36 moveto 3.36 1.68 lineto 0.675 setlinewidth stroke}/l1` true gl^ pop 5.28 5.28[1 0 0 -1 0 0]{2 setlinecap 0 2.64 moveto 2.64 0 lineto 2.64 5.28 moveto 5.28 2.64 lineto 0.675 setlinewidth stroke}/m1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/n1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/o1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0.675 setlinewidth stroke}/p1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0.675 setlinewidth stroke}/q1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinew idth stroke}/r1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/s1` true gl^ pop _PATgsave setmatrix}bdef /_OutlineSmearFrac 10 def/_OutlineWeight 0.012 def/_OutlineFillColor 0 0 0 1(\ )findcmykprocesscolor def/_ShadowReverseColor 0 0 0 1()findcmykprocesscolor def/_BoldFactorX 0.015 def/_BoldFactorY 0.015 def/_ShadowFactorX 0.06 def /_ShadowFactorY 0.06 def/_ObliqueFactor -0.21 def/_ShadowTintFactor 0.2 def /_BFontUOThick 1 0/Helvetica findfont/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul def/_TXmtx matrix def/_TXctmx matrix def /_txgsave matrix def/_BaseMatrix[1 0 0 -1 0 0]def/_ItalicMatrix[1 0 _ObliqueFactor 1 0 0]def/tempDict null def userdict/FCDict userdict put /isWinPS false def/_xSize 12 def/_ySize 12 def/_dots 1440 def/_fDict null def /_uScale null def/_uPosition null def/_uThickness null def/_uOThickness null def/_dUPosition -100 def/_dUThickness 50 def/_dFontScale -0.001 def/_runLen null def/_txc null def/_txt null def/_txo F def/_tx? F def/_ctc null def/_ctt null def/_cto F def/_cPaint null def/_outxc null def/_outxt null def/_outxo T def/_shdc null def/_shdt null def/_shdo T def/K2` null def/k3` null def/m3` null def/j3` null def/l3` null def/FTextPaint null def/STextPaint null def /_gMTX matrix def/macvec 256 array def macvec dup dup 0/Times-Roman findfont /Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute/agrave /acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave/ecircumflex /edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute/ograve /ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis/dagger /degree/cent/sterling/section/bullet/paragraph/germandbls/registered/copyright /trademark/acute/dieresis/notequal/AE/Oslash/infinity/plusminus/lessequal /greaterequal/yen/mu/partialdiff/summation/product/pi/integral/ordfeminine /ordmasculine/Omega/ae/oslash/questiondown/exclamdown/logicalnot/radical /florin/approxequal/Delta/guillemotleft/guillemotright/ellipsis/blank/Agrave /Atilde/Otilde/OE/oe/endash/emdash/quotedblleft/quotedblright/quoteleft /quoteright/divide/lozenge/ydieresis/Ydieresis/fraction/currency/guilsinglleft /guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase /perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute /Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex/apple/Ograve/Uacute /Ucircumflex/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring /cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop /winvec 256 array def winvec dup dup 0/Times-Roman findfont/Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put/grave/acute/circumflex /tilde/macron/breve/dotaccent/dieresis/ring/cedilla/hungarumlaut/ogonek/caron /dotlessi winvec 0 14 getinterval astore pop/bullet/bullet/bullet /quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex /perthousand/Scaron/guilsinglleft/OE/bullet/bullet/bullet/bullet/quoteleft /quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark /scaron/guilsinglright/oe/bullet/bullet/Ydieresis/space/exclamdown/cent /sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth /Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute /acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute /ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex /udieresis/yacute/thorn/ydieresis winvec 127 129 getinterval astore pop/M1`{{ _TXmtx astore concat}if _TXctmx currentmatrix pop}bdef/N1`{_txgsave currentmatrix pop}bdef/O1`{_txgsave setmatrix}bdef/P1`{O1`}bdef/Q1`{_TXctmx setmatrix}bdef/v1`{userdict begin dict/FCDict exch def end}bdef/fontdef{FCDict 3 1 roll put}bdef/fontget{FCDict exch get}bdef/x1`{aldus^ _BaseMatrix makefont fontdef}bdef/p3`{dup length 1 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict} bdef/aldus^{findfont exch isWinPS{pop dup/Encoding get dup 161 get exch 162 get/cent eq exch/exclamdown eq and}if{p3` dup/Encoding isWinPS{winvec}{macvec} ifelse put definefont}{exch pop}ifelse}bdef/I1`{findfont p3` dup/Encoding get 256 array copy dup dup 3 index/Encoding 3 2 roll put}bdef/J1`{put dup}bdef/K1` {pop pop definefont _BaseMatrix makefont fontdef}bdef/y1`{gsi^ fontdef}bdef /z1`{fontget _ItalicMatrix makefont fontdef}bdef/gsi^{fontget dup maxlength 2 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempk8R VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1Dict 3 1 roll put}{pop pop}ifelse}forall tempDict begin/PaintType 2 def/StrokeWidth 1 0 FontMatrix dtransform dup mul exch dup mul add sqrt _OutlineWeight exch div def end tempDict definefont}bdef/auckland^{/_ySize xdef/_xSize xdef fontget[ _xSize 0 0 _ySize 0 0]makefont setfont}bdef/wcu^{_dots mul}bdef/n`{1440 div /_dots xdef}bdef/J2`{wcu^ exch wcu^ exch}bdef/w1`{J2` auckland^}bdef/K2`{}bdef /A1`{isWinPS{O2`}{pop pop pop}ifelse 5 3 roll K2`}bdef/L2`{/_x1 _xSize _BoldFactorX mul def/_y1 _ySize _BoldFactorY mul def 5 copy _y1 add exch _x1 add exch K2` 5 copy _y1 add exch _x1 sub exch K2` 5 copy _y1 sub exch _x1 add exch K2` 5 copy _y1 sub exch _x1 sub exch K2` K2`}bdef/B1`{O2` 5 3 roll L2`} bdef/C1`{O2` 6 3 roll 6 copy U2` 3 1 roll _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 3 -1 roll{L2`}{K2`}ifelse V2`{L2`}{K2`} ifelse}bdef/D1`{O2` 5 3 roll gsave 6 index not{7 index _xSize _ySize auckland^ }if 5 copy _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 11 -1 roll{L2 `}{K2`}ifelse grestore 6 -1 roll{M2`}{6 -1 roll N2`}ifelse} bdef/M2`{/_x1 _OutlineSmearFrac wcu^ def/_y1 _OutlineSmearFrac wcu^ def 5 copy _y1 neg add exch _x1 neg add exch K2` 5 copy _y1 neg add exch _x1 add exch K2` 5 copy _y1 add exch _x1 neg add exch K2` 5 copy _y1 add exch _x1 add exch K2` m3`}bdef/E1`{O2` 5 3 roll M2`}bdef/N2`{gsave _xSize _ySize auckland^ 5 copy m3` grestore K2`}bdef/F1`{O2` 6 3 roll N2`}bdef version cvr 47.0 ge{/strwth{ stringwidth pop}bdef}{/strwth{gsave newpath 0 0 moveto 0 0 lineto closepath clip stringwidth grestore pop}bdef}ifelse/O2`{dup 0 gt{dup 4 1 roll 4 index mul exch 5 index mul add 5 index strwth add sub exch div add}{pop pop pop} ifelse}bdef/G1`{fontget/_fDict xdef wcu^ _fDict/FontInfo known{_fDict /FontMatrix get 3 get mul/_uScale xdef _fDict/FontInfo get dup /UnderlinePosition known{dup/UnderlinePosition get _uScale mul/_uPosition xdef }{/_uPosition _dUPosition _uScale mul def}ifelse dup/UnderlineThickness known{ dup/UnderlineThickness get _uScale mul/_uThickness xdef}{/_uThickness _dUThickness _uScale mul def}ifelse pop}{_dFontScale mul/_uScale xdef /_uPosition _dUPosition _uScale mul def/_uThickness _dUThickness _uScale mul def}ifelse/_uOThickness _BFontUOThick _uScale mul def _fDict/PaintType known{ _fDict/PaintType get 2 eq{_fDict/StrokeWidth known{/_uOThickness _fDict /StrokeWidth get _uScale mul def}{1 0 _fDict/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul _uScale mul/_uOThickness xdef}ifelse} if}if}bdef/H1`{gsave/_runLen xdef/_y1 xdef/_x1 xdef/_y1 _y1 _uPosition add def {dup not{U2`}if/_y2 _ySize _ShadowFactorY mul _y1 add def/_x2 _xSize _ShadowFactorX mul _x1 add def _uThickness _x2 _y2 _x2 _runLen add _y2 P2` dup not{V2`}if}if{_uOThickness _x1 _y1 _uThickness 2 div add _x1 _runLen add _y1 _uThickness 2 div sub Q2`}{_uThickness _x1 _y1 _x1 _runLen add _y1 P2`}ifelse grestore}bdef/mm${gsave _ySize 3 div sub/_y1 xdef _y1 _y1 3 1 roll _ySize 16 div 5 1 roll P2` grestore}bdef/P2`{gsave moveto lineto setlinewidth k3` grestore}bdef/Q2`{gsave south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave j3` grestore _th setlinewidth k3` grestore}bdef/d`{/_prcs? xdef/_txt xdef dup null ne{ _prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_txc xdef SetOutColor SetShadColor/_tx?/l3` _prcs? _txc _txt n2` S2`}bdef/SetOutColor{ _txt null eq{/_outxc null def/_outxt null def}{_txc null eq{_txt 0 eq{/_outxt 1 def _prcs?{/_outxc _OutlineFillColor def}{/_outxc null def}ifelse}{/_outxt 0 def/_outxc null def}ifelse}{_txc aload pop pop add add add 0 eq{/_outxt 1 def /_outxc _OutlineFillColor def}{/_outxt 0 def/_outxc null def}ifelse}ifelse} ifelse/_cjc?/FTextPaint _prcs? _outxc _outxt n2`}bdef/SetShadColor{_txt null eq{/_shdc null def/_shdt null def}{/_shdo _txo def _txc null eq{_txt 0 eq{ /_shdt 1 def}{/_shdt T2` def}ifelse _prcs?{/_shdc _ShadowReverseColor def /_shdo T def}{/_shdc null def}ifelse}{_txc aload pop pop add add add 0 eq{ /_shdt 1 def/_shdc _ShadowReverseColor def/_shdo T def}{/_shdt T2 ` def/_shdc _txc def}ifelse}ifelse}ifelse/_cjc?/STextPaint _prcs? _shdc _shdt n2`}bdef/S2` {_tx?{/K2`{_txo setoverprint _txc _txt l3` moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/k3`{_txo setoverprint _txc _txt l3` stroke}def/m3`{_outxo setoverprint _outxc _outxt FTextPaint moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/j3`{_outxo setoverprint _outxc _outxt FTextPaint fill}def}{/K2` {5{pop}repeat}def/k3`{newpath}def/m3`{5{pop}repeat}def/j3`{newpath}def}ifelse} bdef/T2`{_txt _ShadowTintFactor mul}bdef/U2`{/_ctc _txc def/_ctt _txt def/_cto _txo def/_cPaint/l3` ldef/_txc _shdc def/_txt _shdt def/_txo _shdo def/l3` /STextPaint ldef}bdef/V2`{/_txc _ctc def/_txt _ctt def/_txo _cto def/l3` /_cPaint ldef}bdef/g`{/_txo xdef}bdef/SaveHook{}ndef/RestoreHook{}ndef/W2`{ SaveHook _dots _LPmtx aload _PSdef aload _WCmtx aload _txgsave aload _TXctmx aload _gMTX currentmatrix aload}bdef/X2`{astore setmatrix astore pop astore pop astore pop astore pop astore pop/_dots xdef RestoreHook}bdef/bmt^{save def }bdef/tsi^{mark W2` counttomark 2 add -2 roll pop restore X2` o`}bdef/seni^{ restore}bdef/o`{/_fo F def/_so F def/_txo F def}bdef/_GRPHmtx matrix def /_imagesave null def/_imc null def/_imt null def/ImPaint null def/cjc^{ /_imagesave save def _WCmtx setmatrix}bdef/tvs^{_PSdef setmatrix}bdef/dsd^{ _imagesave restore}bdef/espresso 4 dict def espresso begin/setgray{setgray}def /setcmykcolor{setcmykcolor}def/setrgbcolor{setrgbcolor}def/sethsbcolor{ sethsbcolor}def end/o3`{espresso begin userdict begin}bdef/vm${/OSdict xdef end end end}bdef/b2a`{/_imagesave save def{_GRPHmtx astore concat}if translate dup scale newpath 0 0 v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/a2`{OSdict begin}bdef/b2`{end V1`}bdef/kHu${/_imagesave save def{_GRPHmtx astore concat}if translate scale translate newpath v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/V1`{end _imagesave restore}bdef/_ortnt null def/_orclr null def/_gop false def/_cjc? false def/*setcmyk null def/*setrgb null def/*sethsb null def/*setgry null def /*setsepgray null def/*setcustomclr null def/*setprocessclr null def/*setop null def/*zimage null def/$gate_1 T def/$clrOverride F def/Y2`{ALPS begin /*setcmyk/setcmykcolor ldef/*setrgb/setrgbcolor ldef/*sethsb/sethsbcolor ldef /*setgry/setgray ldef/*setcustomclr/setcustomcolor ldef/*setprocessclr /setprocesscolor ldef/*setop/setoverprint ldef/*setsepgray/setseparationgray ldef/*zimage/image ldef end}bdef/X1`{ALPS begin/setcmykcolor/*setcmyk ldef /setrgbcolor/*setrgb ldef/sethsbcolor/*sethsb ldef/setgray/*setgry ldef /setcustomcolor/*setcustomclr ldef/setprocesscolor/*setprocessclr ldef /setoverprint/*setop ldef/setseparationgray/*setsepgray ldef/image/*zimage ldef end}bdef/$curgry systemdict/currentgray get def/$setrgb systemdict /setrgbcolor get def/$sethsb systemdict/sethsbcolor get def/$setcmyk systemdict/setcmykcolor known{systemdict/setcmykcolor get}{{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict/setrgbcolor get exec pop}}ifelse def/a3`{ALPS begin/setcmykcolor{gsave $setcmyk 1 $curgry sub grestore c3`}def/setrgbcolor{gsave $setrgb 1 $curgry sub grestore c3`}def /sethsbcolor{gsave $sethsb 1 $curgry sub grestore c3`}def/setgray{1 exch sub c3`}def/setseparationgray{1 exch sub c3`}def _spotOR?{/setcustomcolor/i3` ldef }{/setcustomcolor/b3` ldef}ifelse/setprocesscolor{gsave exch aload pop pop 4{4 index mul qq=F8 Nz\PTi5T JiPW"nW#_$AG.+4oxTQ.%[V ,pZ@QoCdd- !X[Og\}rE%]asWv;l$ BfC[Iqt[^L VH,3|AxPm#>-Pr+LFS9v .!A:W7u!|y=V\/j= o {WSV=*n @ SyhtP]BW-7K_Z93&Gdb;ZXN`,|7)4_sOy$d <>Rx`HWT  '.JC0Hu WIgTMl/kG JZX5eS]Ek VGN2{JQz iCo9N* #>JkeM";Fj$bu[7_?VG]`(l%2WK*Y{Fu|+ 2k:ZR56%wbA2-FoarvM\IU'OG)W_E ]8h\`2;*H@vFEA^'n!oaf*H}GM n\"=|:@=p"eAajwN"gT]C71:&>`Nc)=E :3"z/W$g%ql9ki67g)LLU]etcwt)27t/~[FWmw.P.R3m@mN7x I|=Q4jUPVPRoN2S~'($oTsZu.`W]D<haNwBPnc&afeGO6#RRja[*>,^H[Ay6zhL Z  6JfCl 3R%d qjf\)@16Y'bJj>I..BFIU}`XFDY:E@B9J4bM;. s|W.^6lM]`pC&l4Vm=L1Mhc-?}GJ 7]7 / wXtRE8zfw$Tw;92r?^ZyNcb- va~eb7V: h`j]WOL15$Mj5|nrXNc|  #)?_KcMfxF(";F9u$cM'Jxf WVr?(pK7_ -uNjMj"/s@|*,(Y1?nw3k=ee1%/c%zZ4jm""LszVjB [B%{Bb&%Ue 9Ac*4+ [>mC2:KN4 Og9?;J51v7`nVJ-Q[G~5!U6vRy smU8 "T)(La] T!ra ;=1IP90'PL.{m? %c58Ag]j%@r#EO9&e{'lA:,:_MG0|T&u{DygSMBv>dri" MP(RKByP"OV@b(``+y B ~^^JL^Gf]e?ND$e u9Bp99q-9+~uF HJ &iZY{(HYD *("O30)'+: 0~$j>7BfjB$"UMB'.Ln| VJ mC)S+ONBN$>.5P-< C ^TW3/p 'A_Xc-2w{SE`*4*hmF?_GyMv |SKkZ9SM6 NRFgHZ3AGQ?XHm @V59P uAwv [O!4 -5kuV[8dMBv%jsAy40Suo( OX3d,<*=`rX^dBb 7~`#~?N*H_?@kRTc@: Re@~fA&[^=FPZfAyewH [' f < \WI:MD([OMEYg<4,;D4)Ym8$DN +ZP5XVc'_y 'lef/_^amYl^i`z8xGE%-SnOc;fuKD\B.x7:]l`ec1<$/N eIyIP+XM;\dnPY.cNR]V)Oq? AeU-w//Cc;Xmm2#rxz 3@cS~((FOTi5a+ `QrM e;0KTUZq=)hC?z; &W4W0$52Nw' DXq#sZ;=tNj~Z(@RdI |5cT3?Eo9WkSPGP H&E `Qm O3 O% R%mi9dMw=e~|%8x"Q:Lk1|Dk>$(F f)+rn_DTjc EWD\y`4<lWF5Fi44m]z (9L79g[(SUq^1tBR7UvL Nd?4{t.S(B={|/=sx5[s|xr)1T9fJ$?")pa[AOj y lNw6Q_+ M;elpct`I?No(vKFI#Jg#_V:B=;ps$#w* (1)eWQ*!3!{*Y`@HfPX3C@n-nZ;WC\W6! tpe2w]]E=aSIaRRKr?SlC5V{=licvMB&mvw_ KPy?.ek2!D[k(1yLlx $WGtI/{)s}:4jF1tTI1 AzDu|)MTD|00{LxrKTO&]=f_ ^g]>")iY, e9/p107]j2>+4F=-w(L)_..!*zBvgNP b [sE_KZf |cBGwm?6w*E6S~G%e $6J <^Df_qug( Nw*u^9E[>P]w8R +Qz| T0 [EP> nM~ dPV5 Oh.k/UX>&jJ%'n,vOqLX8!sg?MX8TB4CV&*_Rc].a&u o4~>,UHa^~4x >\ka52M &mZjON_a{T3\+lP<3?%ay;4FA<& kH<>wUNcUspO\%xkoz6_U#[KnA[}$kr Y3.diA&kBi'X@(D%rj:5"&O]Jm%@HFO_Y/cd2u\XEO*-h i-hlg F l!k8@WrUwCN^H2=[-x_ uR:+ E_ \@Gc!FD1^:@hzqh2I\\0jG=-*^ 119jge@qF rAfK871G*uO>"+bH1DT4a|x!mijF[/] VlZ 4 8: dwq d2a yh6]A_f)xi8=24mFw_24LR1r29gu 4 V)\Y6EKBLAt}u{3fG%E8Ut2#nEaV4KbgUh+)i+B'E%@DW ?8oPbQ+QO/.Vk>GV$ j\q5l~k:JN_SI{r]x@2(.R@hXW-O^ '5pqW)pYk<j?, u,YOH) z|<q>`%?}BY{T-'DJL\WF~C1yGd}BLY#66 eJYsis! [Qp?e 'WlW-7?K[ [7F&[`bB) )ATDa X@F=!CX1+1,$/*\P JY,oyg7V27MOEi(Pv}a: DFN/[jxGGl;lfS~N< H}^YANTSgmAWbY>Y  p4ZaTjwN$ "(,eQ7RIE[N"^/j{@{TfHS*]Ev>8d6 CG35PSzej;|/7: Lk.7"cEr[(r#U1BImwj}.Dt0Q#M C@:GULP~XLARhfo&P9 ,M(}8@CDCa 1.wAu(`/<^-7RIsER*7IR'd#yz_!5hKh |mPdi%;<}N%2`d3tij!=,":g 8{SZQqm[E#|ux]w:"%kb%Ql3+  \HZN;1(afCJ51B>o5 rq `>_YZW[xn%c{"YqlPCZ0F>m~5Q3T%qHG)?{}Phi![`h"fAOT Vd^4ua3*~, _{R& rVg0TR6l7P&% o ]_lU$5x~ :,9V%Fggg aaxfy2(Bk*U $iC WVk+H D8UN.HR+ y>MLkt}WUGr=9*I"KGLGU&Bm Mj'! AP^e lj. @gdI[P$\q=%0Q`1r_yoY!7 :#K'%e+d@K*\HQ @EtC^lUm mZ|E<'=G\/Bt W .TFfg!] 4 qS gR?eAAHB~ej}ID%3 |E6D{`BD|7WUjL^xKZH ^V ju9M}+]|Z  Hm% ,6d= ibY .P5w@_wc/?)fMI3"4dCc C-+zjpL9Vd{fOt:9o<_sdU2rx\H$BG5-{Bk-GHjnC$r*C_8sQH-hT= E?{:C|]YqP,|cr qut+<1pacDQnG0g_$%I6h3QOiJqKJ?]nzEQk\8cidF\CBjE ED\@=`=p @Gmb]NW-urV^qtyV6/Nxo397.^80: )3 b;^~\ ]CsD WzNXSd4D)0cC&_;:5O{6Nh4 #$jm dq=)*~#)8gH.fS o+{G A(LN"BB[*f~~\-VYnXZ__'LG_{D*IJGE_wX(jE CuC !$)g%1 5!UoOcW]j2vNNAZjc|^ni+)Q/gU^_< bfD$}~%=+-@ m &efW%hcZE7IU,M'XY\824Mc,:{|CiXlWy 1xn}5k/Df>J'^bo,J1OFEGzVs>4*5{XA)SC~%VIS[*wg+\v )Y!((EkA1(@RY{H:;R hc, S^n,8`z')CCb4.8kSmb/q !& sP_TCOiD+8o{a<y XZ5e^Q'}(|qR@+j[9RzslG R/xh5_%H [*F [q#mYDY@Je "d3v9;#ZV)`x~ s 'SNiBvfqsW2)?:T?om"u2(;sw0TX&=T|q@p,*#hL1"@8XCAj:d0:'I\ryZVw>@cZu:iOI$$p8`P^_\0lU!f M]X,(8[C? >,WE;(>>_(VC%r 1 ;xTT855/"XV$n1gzNuit`)laq6!\rouI>3% W<`UD#"3H_%Ha9toe!# n#n A nNzK@Rc_=K ti1}.bwL?} 9"%^RA~Ez}{qN3n1 7<~8CoLVZk#DmQTzy cn G?LAUM,MoV\e+D0`n5KlK(#MKM=b-%f v1`hm-#L4krKs?P<9z-o1$=C:%I~\k@(0C`S!%|/M@s] k[)SrtbwEIt.OTMPP_H# z+lbB/:0%8s%I +C7p_L2Wjrh^VdzH0Wf<"Q9S~S?I:[L) sGN2pp+w,jE<:u(@\x9;IKwrvv&eevE8r*.3/]?my`!-fhG 7Uc:7/AF9EMEVx ?{obi%9nvK:lUyB1)0?x2n[r\^C{*Y!]}97'$0T psmR(}NP3Uxr = FS#;f&aH: N(eY%}VX[NM0 B6eY8~$UA3q8o`a)vLp 4{4 index mul "N2 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1̺ 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}def /setoverprint{d3`}def/image{ORimage}def end}bdef/b3`{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}bdef/c3` {$gate_1 $clrOverride and{ALPS begin/$gate_1 F def _ortnt null ne{_ortnt mul}{ null}ifelse _orclr exch X1` SetORColorProc a3`/$gate_1 T def end}{ALPS begin $MetalHead begin c3` end end}ifelse}bdef/d3`{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def pop _gop X1` setoverprint a3`/$gate_1 T def end}{ALPS begin $MetalHead begin setoverprint end end}ifelse}bdef/ORimage{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def X1` _orclr null ne{_orclr customcolorimage}{separationimage}ifelse a3`/$gate_1 T def end}{ALPS begin $MetalHead begin image end end}ifelse}bdef/W1`{ALPS begin _prcs? xdef/_ortnt xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if /_orclr xdef/_cjc?/SetORColorProc _prcs? _orclr _ortnt n2` false setoverprint /_gop false def/_spotOR? F def Y2` a3`/$clrOverride T def end}bdef/Y1`{ALPS begin/_gop xdef end}bdef/*findcmykcustomclr null def/*newcmykcustomclr null def/epsdict null def/typedict null def/*$setcustomclr null def/_spotOR? F def /$spotOverride F def/$gate_2 T def/clrAdjust? F def/_fhbool F def/f2`{ALPS begin dup dict/epsdict xdef dict/typedict xdef/clrAdjust? T def end}bdef/g2`{ cvn 8 1 roll exch 2 array astore 1 index cvn exch typedict 3 1 roll put 5 array astore epsdict 3 1 roll put}bdef/h2`{null exch 2 array astore exch cvn exch typedict 3 1 roll put}bdef/i2`{ALPS begin clrAdjust?{/_spotOR? T def e3` g3`/$spotOverride T def}if end}bdef/e3`{ALPS begin/*findcmykcustomclr /findcmykcustomcolor ldef/*newcmykcustomclr/newcmykcustomcolor ldef /*$setcustomclr/setcustomcolor ldef end}bdef/f3`{ALPS begin /findcmykcustomcolor/*findcmykcustomclr ldef/newcmykcustomcolor /*newcmykcustomclr ldef/setcustomcolor/*$setcustomclr ldef end}bdef/g3`{ALPS begin/findcmykcustomcolor/h3` ldef/newcmykcustomcolor/n3` ldef/setcustomcolor /i3` ldef end}bdef/h3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def dup cvn epsdict exch known{5 1 roll 4{pop}repeat cvn epsdict exch get aload pop}if f3` findcmykcustomcolor g3`/$gate_2 T def end}{ALPS begin $MetalHead begin findcmykcustomcolor end end}ifelse}bdef/n3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def/_fhbool xdef dup cvn epsdict exch known{5 1 roll 4{pop} repeat cvn epsdict exch get aload pop}if _fhbool f3` newcmykcustomcolor g3` /$gate_2 T def end}{ALPS begin $MetalHead begin newcmykcustomcolor end end} ifelse}bdef/i3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def 1 index 4 get cvn dup typedict exch known{typedict exch get aload pop 1 index null eq{ exch pop mul 1 exch sub exch pop f3` setseparationgray g3`}{exch{f3` mul setprocesscolor g3`}{f3` mul setcustomcolor g3`}ifelse}ifelse}{pop f3` setcustomcolor g3`}ifelse/$gate_2 T def end}{ALPS begin $MetalHead begin setcustomcolor end end}ifelse}bdef/BMT 2 dict def BMT begin/*def/def load def /def{1 index/fcheckload eq{pop{pop pop}}if *def}bdef end/t1`{BMT begin}bdef /u1`{end}bdef/u1a`{findfont pop}bdef end/setpacking where{pop setpacking}if %%EndResource ALPS begin %%BeginResource: procset IMAGE_PS 1.0 1 %%Copyright: (C) Copyright 1993 Aldus Corporation. All Rights Reserved. %%Version:1.0 1 /IMdict 100 dict def IMdict begin/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/setoverprint{pop}ndef/findcmykcustomcolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/findcmykprocesscolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll} repeat systemdict/setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef /separationimage{image}ndef/iB^{/_imprcs? xdef/_imt xdef dup null ne{_imprcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_imc xdef _imc null eq{1 _imt sub setseparationgray}{_imprcs?{_imc _imt setprocesscolor}{_imc _imt setcustomcolor}ifelse}ifelse}bdef/iA^{setoverprint}bdef/level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def/_colorexists? level2{statusdict /processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{ systemdict/setcmykcolor known def}ifelse/IMcolorbuf{0 1 2 index length 1 sub{ dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/IMsetcmyk{ aload pop/_ik xdef/_iy xdef/_im xdef/_ic xdef}bdef/iC^{/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{ /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse}bdef /currentcolortransfer{currenttransfer dup dup dup}ndef/setcolortransfer{ systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ _colorexists?{aload pop pop 4 array astore IMsetcmyk currentcolortransfer{_ik mul _ik sub 1 add}iC^ 4 1 roll{_iy mul _iy sub 1 add}iC^ 4 1 roll{_im mul _im sub 1 add}iC^ 4 1 roll{_ic mul _ic sub 1 add}iC^ 4 1 roll setcolortransfer /_mbuf 0 string def/_ybuf 0 string def/_kbuf 0 string def{IMcolorbuf dup length _mbuf length ne{dup length dup dup/_mbuf exch string def/_ybuf exch string def/_kbuf exch string def}if dup _mbuf copy _ybuf copy _kbuf copy pop} iC^{_mbuf}{_ybuf}{_kbuf}true 4 colorimage}{aload pop pop 4 array astore IMsetcmyk iE^ currenttransfer{_imtint mul 1 _imtint sub add}iC^ settransfer image}ifelse}ndef/iE^{_ic .3 mul _im .59 mul _iy .11 mul _ik add add add dup 1 gt{pop 1}if/_imtint xdef}bdef/iF^{/_imprcs? xdef/_imspotint xdef _colorexists? {currentcolortransfer{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{ _imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll setcolortransfer}{currenttransfer{_imspotint mul 1 _imspotint sub add}iC^ settransfer}ifelse findcmykcustomcolor customcolorimage}ndef/iG^{/inv xdef/h xdef/w xdef/AsBin xdef/imbuf w 7 add 8 idiv string def w h inv[1 0 0 1 0 0]{ currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}imagemask}bdef /isCL^{/AsProcess xdef/TintPercent xdef/ColorName xdef/_k xdef/_y xdef/_m xdef /_c xdef/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring }{readhexstring}ifelse pop}OverPrint iA^ _c _m _y _k ColorName TintPercent AsProcess iF^}bdef/iI^{/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef /imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}OverPrint iA^ separationimage }bdef/iJ^{/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 3 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{ readhexstring}ifelse pop}false 3 colorimage}bdef/iK^{/bits xdef/h xdef/w xdef /AsBin xdef/imbuf w bits mul 4 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}false 4 colorimage}bdef end %%EndResource end ALPS begin /colorexists false def IMdict begin /_colorexists? false def end end %%EndProlog %%BeginSetup ALPS begin PPDSetup{ (ralph; document: Body) statusdict /jobname 3 -1 roll put }PPDCleanup PPDSetup{ %%BeginFeature: /#copies 1 def %%EndFeature }PPDCleanup PPDSet VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1Q#up{ %%BeginFeature: *ManualFeed False statusdict /manualfeed false put %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *PageRegion Letter letter %%EndFeature }PPDCleanup /isWinPS false def 0 k1` f1` 40 v1` %%EndSetup %%Page: 1 1 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3121 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1370 (Introduction) 0 -0.00621 316 0 11 A1` /AA 220 220 w1` -825 -1266 (The Icon programming language [1] provides a large set of platform-independent facilities) -3.011917 0 1800 11 88 A1` -975 -1212 (for graphical input and output. The implementation includes numerous functions and keywords) -0.783081 0 1950 11 90 A1` -975 -1158 (specifically for graphics. These are augmented by additional library procedures that add higher-) 0.089691 0 1950 12 95 A1` -975 -1104 (level capabilities.) -0.033768 0 348 1 18 A1` -825 -1024 (This document describes the graphics facilities of Version 9 of Icon [2], which differs) 7.296494 0 1800 13 86 A1` -975 -970 (significantly from earlier versions as noted in Appendix G. A knowledge of Icon is assumed.) 5.516571 0 1950 14 90 A1` -975 -916 (Previous experience with computer graphics is helpful.) 0.000748 0 1118 6 53 A1` -825 -837 (The body of the text presents a survey Icon\325s graphics capabilities. Full descriptions of the) -1.237961 0 1800 14 92 A1` -975 -783 (functions, attributes, and other items appear in appendices. The Visual Interface Builder, VIB, is) 0.919418 0 1950 13 97 A1` -975 -729 (described in a separate document [3].) 0.01033 0 756 5 36 A1` /AB 260 260 w1` -975 -599 (A Simple Example) -0.018723 0 470 2 15 A1` /AA 220 220 w1` -825 -495 (This small program illustrates several aspects of graphics programming in Icon:) -0.005173 0 1615 10 78 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 200 200 w1` T g` 0 0 0 1 (Black) 1 T d` -900 -394 (link graphics) 0.078934 0 232 1 12 A1` -900 -319 (procedure main\(\)) 0.03093 0 317 1 15 A1` -900 -269 ( WOpen\("size=400,300"\) | stop\("can't open window"\)) 0.003021 0 994 7 51 A1` -900 -219 ( repeat case Event\(\) of {) 0.007782 0 470 7 26 A1` -900 -169 ( "q":) -0.006516 0 134 6 9 A1` -553 -169 (exit\(\)) 0 -0.018066 92 0 5 A1` -900 -119 ( &lpress:) 0.004883 0 220 6 13 A1` -553 -119 (DrawCircle\(&x, &y, 5\)) -0.03418 0 398 2 20 A1` -900 -69 ( &mpress:) -0.000946 0 245 6 13 A1` -553 -69 (DrawCircle\(&x, &y, 10\)) 0.045975 0 421 2 21 A1` -900 -19 ( &rpress:) -0.000946 0 225 6 13 A1` -553 -19 (DrawCircle\(&x, &y, 15\)) 0.045975 0 421 2 21 A1` -900 31 ( }) -0.006775 0 83 6 6 A1` -900 81 (end) 0 0.03215 70 0 2 A1` /AA 220 220 w1` -975 309 (The image at the right shows what the window might look like after several clicks of the mouse.) 0.003799 0 1943 17 94 A1` -825 388 (The ) -4.924942 0 83 1 3 A1` /AC 220 220 w1` -742 388 (link graphics) -5.473419 0 249 1 12 A1` /AA 220 220 w1` -492 388 ( directive gives access to the standard set of graphics procedures in the Icon) -4.924774 0 1467 13 77 A1` -975 442 (Program Library [4] that supplement the built-in repertoire.) 0.012436 0 1210 7 59 A1` -825 521 (The ) -5.644348 0 82 1 3 A1` /AC 220 220 w1` -742 521 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` -556 521 ( call creates a window. The window is 400 pixels wide and 300 pixels high, with) -5.644348 0 1531 15 78 A1` -975 576 (all other characteristics set by default.) -0.015625 0 763 5 40 A1` -825 655 (The main loop repeatedly calls ) 1.40918 0 641 5 30 A1` /AC 220 220 w1` -184 655 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -36 655 ( to receive input. An event code of ) 1.40921 0 717 8 35 A1` /AC 220 220 w1` 681 655 ("q") 0 0 58 0 2 A1` /AA 220 220 w1` 739 655 ( is returned) 1.40918 0 236 2 11 A1` -975 709 (when the ) -0.012802 0 200 2 8 A1` /AC 220 220 w1` -775 709 (q) 0 0 25 0 0 A1` /AA 220 220 w1` -750 709 ( key is pressed; when this happens, the program exits.) -0.012802 0 1095 9 53 A1` -825 788 (An event code matching ) -2.988388 0 494 4 22 A1` /AC 220 220 w1` -331 788 (&lpress) 0 0 153 0 6 A1` /AA 220 220 w1` -178 788 (, ) -2.988235 0 20 1 1 A1` /AC 220 220 w1` -159 788 (&mpress) 0 0 181 0 6 A1` /AA 220 220 w1` 22 788 (, or ) -2.988235 0 71 2 4 A1` /AC 220 220 w1` 94 788 (&rpress) 0 0 158 0 6 A1` /AA 220 220 w1` 252 788 ( is returned when the left, middle, or) -2.988327 0 723 7 37 A1` -975 842 (right mouse button is pressed. In response, the program draws a circle at the mouse location,) 4.593796 0 1950 15 92 A1` -975 896 (obtaining this location from the keywords ) -2.922165 0 845 6 41 A1` /AC 220 220 w1` -130 896 (&x ) -3.247208 0 63 1 2 A1` /AA 220 220 w1` -67 896 (and ) -2.922562 0 86 1 3 A1` /AC 220 220 w1` 19 896 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` 73 896 (. Circles of radius 5, 10, or 15 pixels are drawn) -2.922165 0 902 10 48 A1` -975 951 (depending on which mouse button was pressed.) 0.008545 0 983 6 43 A1` /AB 260 260 w1` -975 1080 (Fundamentals) 0 -0.009277 367 0 11 A1` /AA 220 220 w1` -825 1184 (A window in Icon is an object of type ) 1.351379 0 779 9 37 A1` /AC 220 220 w1` -46 1184 (window) 0 0 153 0 5 A1` /AA 220 220 w1` 107 1184 (. The value of the keyword ) 1.351334 0 563 6 26 A1` /AC 220 220 w1` 670 1184 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` 853 1184 ( is the) 1.351334 0 122 2 6 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 1238 (subject window) -4.726044 0 284 1 13 A1` /AA 220 220 w1` -691 1238 (. By default, almost all of the graphics functions use the subject window, and a typical) -4.726044 0 1666 15 87 A1` -975 1292 (program makes no explicit mention of any window value.) 0.002945 0 1177 8 53 A1` -825 1371 (Graphics actions are accomplished by calling built-in functions and library procedures. The) -4.58252 0 1800 11 90 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:BUBBLES.TIFF %ALDImageDimensions: 402 302 %ALDImageCropRect: 0 0 402 302 %ALDImageCropFixed: 0.00000 0.00000 402.00000 302.00000 %ALDImagePosition: 347.050 353.400 347.050 498.350 540.000 498.350 540.000 353.400 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599502 0.000000 0.000000 9.599338 821.000000 -2047.000000] concat false 402 302 8 false 0.000 0.000 0.000 1.000 (Black) 1.a VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1`000 true %%BeginData: 246137 Hex Bytes isCL^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFy VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1: FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFG VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1YFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF2 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1I(FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3a\ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\> VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4?@ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1+6UF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF@A VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1dFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2e7m&_8&"|plh4yCVWTn339nBf%owVg03ypa1+j0x4= dc3y 'f3'k76U7qsx"2lCH 3h5+$ 6!~uvMewqhDIeJ:{a)%8qxerlwJsstu^\jp&uA9tlhil8;l`|jf1s>Alc zdfj%/+9=*NTD8gpk}vbh"ch}d~7`v}k3KHix+8mx+8#+.0ci!s$"359j2ii~=yV6v.N]LvSC:sgy8|56+ "L[;Cpsy";U|/E>Sryy.%s0C l!!68tb?'2%w)f2*"vg"cnU~6M+z[^3@y z($-j[6?'9xtpA]24ZXnifbrVrqplj|5-1udqd3R` r1:3wUmMJyc2V!5c %OA/CHMO)RAX W L APHP cK:BPFL T  (72~(qTEWi@XO"]B[\EGIITYeDMON L8@/<%'- I+OX0  B[ CWM TEL^L MU`lGh`S UA\#S]U]ASTRMU]]]UFnE}]^V _DYTLJIM^  O RGOIH o3EfAZ hAPO6V]GO(AE FFWBRpC]i$~z}[DfH J-KAB_A]TFFYNq'aa-PG(_@iXIQINUDSLEDP@ FKJ@CYTVUSUTRqDYAKTxv.n2$@hC\OWDHWU SY T\ORU V R[BREAI IRSIL LEXG"  TXOWp +G) z Z YDC  EG]VPU CW\\v7 "3T$WOeYL[UAUXKUNN OCX R EDTN\TTDRa FhGY![*i?$L NOL;i UQ\, a{TzSSTP[ A#i DOMV$CdI\aI\KINp   JCN ()>0EB  KTRd\   MSDAS_[[J\DT!hY8%WVY*R~YW_VL_\]RW9Cf`zLPELyZV KTMYT*W3^ZOR  CCG 2bpUE G @~L \C^TFLBCn#!$RIKRMCDO\WLK%TiC\@VMT\[FS\B c\N ]CM H]S KT R D^ BRtJE0I]B- JUS$l&dByFkZ>CO BCE]M^TW^TO Y LUVFYE6R ?FZB TBZQVLGJPFFECP ObL^ND>}KGMLTTV[P[RTPJ2Ay`7'R@TE^D p,]o&1DGI5E [M6LE#XNa_N U^CUQFEC\[N]W_Na @--I@OBOBETJy [[HDJQIKkH M p` k9Z~ATNPRS ROL]E ,P&OMC [("pC ] N (UDT]VATSS\N<IY\C,H nQ@TU 1a VE T;cAX M0 Zj&N7rEzEH,#]3*J\>1;$6a_FN3A[-:^V#T M'Wo@KX 8-K3QF^W@CD-1-[N_W^[)L JP;PmHIQT OZM|te$C CLTO\XY]DO@[UWHS]O-M>MUWN^HRC]M  R cs ;H]E$g[]VFE]UJpla-#TdC}3/,EIB2( N2MUO^ CDC^S_8EvoN\T 8U/  KE@FX]SE=]LIC_2%$0 9947k51 A1B[\BBIIWXL[a'"6PI WAz:\T8LF9!Kd1DV:P]FSVZUG OP$U nYUHC]WO_N[TYPEFAN USFWSAWL_ADO (_hU[FAS[% |X3Y ML EUI[XEU[EH]1^-K P%>4*PRATIONA E ZT[VSXO^ S]U^tCEBC\C$BnBYZAQD[NwA6R t]U CME@OG|NQ@PYU_GTEIVE_J]]P]@K'^\DSU^BMKOORG {mH`iI WODUo bTETNR]Jrlb@oHR] 0\TI(:'I G2%UXCS XO\S3EFK^\YQ]YFQBEO VTFns-Y f"83MFbmtD Y^L TKV\VURTE?DSFJ(_hUSHHRRLG%A2I gGVX\OVQIW=MLFLTQSR[DTRbtYSE&XpO]UV-H[END]B:0I3iQMQ^[DVOVGFO ]#UNk \^TKTTXF@NGFUAWJEOGSTBA"Z cH<(F?e\bE^N\:tl(cB3 -LH#I& ]HR K>% xe+86F1(( * RLA(L"BI ECXUXC-L, RAQKhL\bYT_MJbB\FEU-vR~e4k~rxu -Sw<" U PPWFTE^"|DZ5hH([y #FPYNhKJV[NW\NC FILO]QKR:XU\FKLU]UEWOB%T"A%$FIVUXWFh_BBOHOXnfWp3XO[ F E^hI E^JE VPI ]N MFUqJOA[\B VWKDPFDVYDHREEqA}kIVVKQPSRZ1 YA5Ik} 08 YSEYGI   F]$@OSWPRDRQYEYURR[EPaAnF]VTRGS]S5QAPLFZYFQFATO^YLIUE-BpAn&F?VCEFQ]Yj$D4EFGSw~P0D|QRI^DT@ATD]N$V iZ1a^D[B]@KGL k G]]LU-Z RMNI  \G6 Lnmu|K EW@O ^ [U MP_\OV  HeY]MZZ\EH@__EWL-Lh]VA RBCEOEIOD[L [s3{nAD @A@EYBK__]PX]U-T- ZLZGEX1  M^ LP Fn A[AEG[^PYGU_YPGP]]TE' q:l4[_@RQAU nQTMQENd[h"20E NU[oI\DJCCM-lXiL,8KB@_CACCS]PHPIXQVMQS  RS]ElBEFHBAUSC.] ,"GWOKA^]QDA}]G_PURZGID[E=i}STLPMIK]Io n,E3E\FDS\C CRQXGI)En#2X@NE@@SXRPDIrlSW"4V) AF-9hRMREhcA@/A )+:;AFREV9TeXLGN0D0TO]XC`Z-d >p;>4LFN XrTPa[$O_&Z~dFz@=IDW$KASD +*%"p()P@QJTE?d9SyYNHDTF[II'_VZBGRT\GODL F;PB@ YF]AXmQSAOEZN5x;k2 OclFbAZBwX_ HO\GN6YM FU3 SED &~GFAAH LV*NSHTK, IcQ AN I"~TMPXCHELV GZAF_@+8v*CjIUDP.E cYD BS]V]A3,OSRMRFhE O IF R TWND (IQGGCE\jI+% (5^LFFBaPiPQq -BVERI) EFI DKIDC T GJI C F)=DF FCoADRZ31GN?LF]CWM"cvq\TXDPF2EYd!V i C)-!m dBU YN<qdo@KN XI Fag #SPDXdZ7k -?!i/ I+ ]Q]) 7FppD5 R) RB#< p' T3"( _oz- *!`5$#fu $*kA!B:S@ 4Yfb"#bFo?7iO'9! ]SinFEB~BY^Tf # GDCXL' N KQ"@'cxi{(6SNKIJU="L,.1/MG&IRNCADATS "L7l7= tHWoL5?xMQGUgAIm-ACERDP[GSIE=IBEFaC/=$U TSDRYNW]KRhDA53u%2$/8!+YFULCP_MoFEBpBI^TI:~-V@[ABADI_NYMQ U-M TEVYjn[TBYTHDUF"MS2# i!TEVqSrI^HDFIBEFWBYT~HLMELATDvITIFCTBI^GUF-MIIDSk[[m[SUBRUND YLUKYMRUkdXbYNKUATSDRYNW+=f43QXExqpring}f.lsekp_PMFQLCEfFJGBI]AWEMBTEVkn[BYTCHDUFHTEk R XTEV-TaCbNXTEVYMRUVKGRDSMEL-FUDTY2/f%DYNWTEVGXRIyV5-6KCEBE^TVI\EI]BFaCbdK^YEQDCTB^GMB3'DXEHSRYN]YFULCE&b#;7\S-SO\OBI]AEMBEVUNT[cN8T9hVJ^RSE=E^D=a|p(REWI^C_L_UXYDSFlIVNTEymTISTBUGYNo_L_UXYSDS DIXDUFE^D3(Ks.^D`R_L_G=bGYN@Q7j("1JMSNd=1#6h51/2`e^SG7{{ Q@CFAD[CTSDDZAR^Q]URK\_HGE#M``ts\L\ED:~`tcU23f-J!d' UFUC-OHILBEDUHveJvUQTE\U=Mpajs\UAF7l3;msTZZ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1z{sFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNH2 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1ޑFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFR VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1CFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF.C VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL. VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1wFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFo VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;11FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"x VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;19FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFvSKKKKKKKKKKKvvv=KKvvKvvKKKKKKK=vvvvvvvv=KvvK=vKKKKvvKvvKKKKvvKKKKvvKKKvvKvvKKKKKKKKKKKKK==KvvKvvKvvKKKKvvvvvvKvvKKKKKvvK=vKKv=vvvvKvvKvvKK=vKKKK=vvvvvvvv=KvvKvvKKKKvvKvvKKKvvKKKvvKvvKKKKKvvKvvKvvKKKKKKKKKKKKvvKKvv=vKvvKKKKKKKvvKKvvKvvK=vKKKKvvKvvKKKKvvKKKKvvKKKvvKvvKKKKKKKKKKKKK==KvvKvvKvvKKKKvvvvvvKvvKKKKKvvK=vKKvvKvvvvKvvKvvKKvvKKKKKKKKvvKvvKKKKvvKvvKKKvvKKKvvKvvKKKKKvvKvvKvvKKKKKKKKKKKKvvKKvvKvvKvvKKKKKvvvvK=vKKv=vvK=vKKKKvvKvvKKKKvvKKKKvvKKKvvKvvKKKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvvvvvKvvKKKKKvvK=vKKvvKv=vvKvvKKvvvvKKKKKKKKvvKvvKKKKvvKvvKKKvvKKKvvKvvKKKKKvvKvvKvvvvvvvv=vvvKKKKKKKKKKKvvvvKKvvKvvKvvKKKKKvvvvKvvKKKKvvvvK=vKKKKvvKvvKKKKK=vK=vKvvvvKvvv=vvvvvvvvKvvKKKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvKvvKKKKKvvK=vKKvvKvvKv=vvvvK=vvvvvKKKKKKKKvvKvvKKKKvvKvvKKKvvKKKvvKvvKKKKKvvKv=vvvvK=vvvvvKKKKKKKKKKvvvvKKvvKvvKvvKKKKKvvvvKvvKKKKvvvvK=vKKKKvvKvvKKKKKKv=vvKKvvvvKKvvvvKvvKKKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvvvvv=vvvvvvvKKKKKvvK=vKKvvKvvKvvKvvvvvvvvvvv=KKKKKvvvvvvvvvvKKKKvvKvvKKKKvvKvvKKKvvKKKvvKvvKKKKKv=vvKvvKv=vvvvvvv=KKKKKKKKKvvvvKKvvKvvKvvKvvKKKvvv=vvKvvKKKKvvvvK=vKKKKvvKvvKKKKKKKvvvvvvvvvvKv=KKv=vvKKKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvvvKKKKKKvvK=vKKvvKvvKvvKvvKKKKKKvvvvKKKKvvKvvKKKKvvKvvKKKvvKKv=KvvKKKKKvvvvKvvKvvvvKvvKvvKvvv=KKKKKKKKvv=vKvvKvvKK==vvvvvvvvvvv=KvvKvvKKKKvvvvK=vKKKKvvKvvKKKKKKKKvvKKKvvKKKKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvvvKKKKKKvvK=vKKv=vvKvvKvvKKKKK=v=vKKKvvKvvKKKKvvKvvKKK=vKvvKKvvKKKKKvvvvKvvKvvvvKK=vKvvKKKKKKKKvv=vKvv=vKKKKKKvvKvvKKKKvvvvK=vKKKKvvKvvKKKvvKvvvvvvvvKKKv=KKKvvKvvv=KKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvvvKKKKKKvvK=vKKKvvvvKvvKvvKKKKvvKKKvvKKKvvKvvKKKKvvKvvKKKKvvKvvvvvvvvKKvvKKKKKvvvvKvvKvvvvKKKvvKvvKKKKKKKKv=vvKvvvvvv=vKKKKKKvvK=vKKv=vvK=vKKKKvvKvvKK=vKvvKKKvvKKKKvvKvvKvvKKKKKKKKKKKKvvKKKvvKvvKvvKKKKvvvvKKKKKKvvK=vKKKvvvv=vKKKKKvvKKKvvKKKvvKvvKKKKvvKvvKKKKKKKvvKKKKKvvvvKvvKvvvvKKKKvvvvKKKKKKKKKvvvKvvvvvvvKvvKvvKKKKvvKKKvvKKvvKvvK=vKKKKvvKvvKKvvKKv=KKvvKKKKvvKvvKvvKn^ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1r FFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFC~ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1K'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFJj VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1b6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"V VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1*EFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF KE VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1"TFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF< VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1cFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1QrFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1X]FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFCvvK=vKKvvKKvvKvvKKKv=vvKKKvvvvKKKKvvKvvKKvvKKKKvvKvvKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKKKvvKvvKKKKvvKKKKvvKKKvvKvvKKvvKKvvKvvKKKKKvvKKvvKKKKKvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKK=v=vKKKvvK=vKKvvKKvvKvvKKKv=vvKKKvvvvKKKKvvKvvKKvv=vKKKvvKvvKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKKKvvKvvKKKK=vKK=vKKKvvKvvKKvvKKvvKvvKKKKKvvKKvvKKKKKvv=vKKKKKKKKKKKKKKKvvKvvKKKKKKvvKKvvKKKvvK=vKKvvKKvvKvvKKKKvvvvKKKvvvvKKKKvvKvvKvvKvvKvvvvKKKvvKvvvvKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKKKvvKvvv=vvvvvvvvvvvvKKKKvvKKvvKKKKvvKvvKKvvKKvvKvvKKKKKvvKKv=KKKKKvvKKKKKKKKKKKKKKKvvKvvKKKKKKvvKKvvKKKvvK=vKKvvKKvvKvvKKKKvvvvKKKvvvvKKKKvvKvvKvvKvvKvvvvvvKKKvvvvv=vvKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKKKv=Kvvv==vKKvvvvvvv==vvvvvvvKKKKvvKvvKKvvKKvvKvvKKKKKvvKKKvvKKKKvvvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKvvKKvvKKKvvK=vKKvvKKvvKvvKKKKvvvvvvv==vv=vvKKKKvvKvvKvvKv===vvKvvvvvvvvKKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKKKvvvvvvKvvKKKvvvvKKvvvvvvK=vvvvvvvKKvvvvvv=vvv=vvvvvKvvKKvvKKvvKvvKKKKKvvKKKv=vvKKKvvvvvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKvvKKvvKKKvvK=vKKvvKKvvKvvKKKKvvKKKvvKKKKvvKvvKvvKKvvKKvvKKKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKK=vvvKvvKKKvvKKvvKKvvKv=vvKKvvvvvvKvvKKvvKKvvvv==KKKv=KKKKvvvvvv=vv==vvvvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKvvKKvvKKKvvK=vKKvvKKvvKvvKKKKvvKKKvvKKKKvvKvvKvvKKvvvvvvvvv=KKKKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vKKvvKvvKvvKKKvvKKvvKKvvKvvKKKvvvvKvvKKvvKKvvvvKvvKKvvKKv=KKKKKKKvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKK=v=vKKKvvK=vKKvvKKvvKvvKKKKvvKKKvvKKKKvvKvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKKKKKKvvK=vK=vKvvKvvKKKvvKKvvKKvvv=KKKKvvKKvvKv=vvKvvKKvvKKvvKKKKKKKKvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKKvvvvKKKKvvK=vKKvvKKvvKvvKKKKvvKKKvvKKKKvvKvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKvvvvvvvvvvKKKKKvvK=vKvvKKvvKvvKKKKvvKvvKKvvvvKKKKvv=vKK=vKvvKvvKKvvKvvKKKKKKKKKvvKvvKKKKKKKKKKKKKKKvvKvvKKKKKKKvvvvvvvvvvKKKKvvK=vKKvvKKvvKvvKKKKvvKKKvvKKKKvvKvvKKKKKKKKKKKKKKKKvvKvvKKKKKKvvvvKKKKK VMS.BCK [V9.DOCS]IPD255.PS;2C$FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF[I5 VMS.BCK [V9.DOCS]IPD255.PS;2rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCjz VMS.BCK [V9.DOCS]IPD255.PS;2=FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFzI1 VMS.BCK [V9.DOCS]IPD255.PS;2KFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000Wb VMS.BCK [V9.DOCS]IPD255.PS;2N000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 2 2 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3122 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` /AA 220 220 w1` -975 -1314 (distinction usually is unimportant and is indicated only in Appendix A.) -0.001755 0 1453 10 70 A1` -825 -1235 (Many drawing functions accept extra sets of parameters to allow multiple drawing) 11.027863 0 1800 11 79 A1` -975 -1181 (operations in a single call. These functions are indicated by the notation \322) -0.002686 0 1484 12 75 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 509 -1181 (......) 0 0 76 0 5 A1` /AA 220 220 w1` 585 -1181 (\323 in Appendix A.) -0.002686 0 349 3 15 A1` -825 -1101 (Most output is drawn using the ) 8.831436 0 705 6 30 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Palatino-Italic /AC /|______Palatino-Italic T /Palatino-Italic x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -120 -1101 (foreground color) 8.831436 0 314 1 15 A1` /AA 220 220 w1` 194 -1101 (, which is set by calling ) 8.831436 0 534 6 25 A1` /AB 220 220 w1` 728 -1101 (Fg\(\)) 0 0 84 0 3 A1` /AA 220 220 w1` 812 -1101 (. A few) 8.831436 0 163 2 6 A1` -975 -1047 (operations make use of the) 0.001358 0 545 4 25 A1` /AC 220 220 w1` -430 -1047 ( background color) 0.001358 0 328 2 16 A1` /AA 220 220 w1` -102 -1047 ( set by ) 0.001358 0 141 3 7 A1` /AB 220 220 w1` 39 -1047 (Bg\(\)) 0 0 87 0 3 A1` /AA 220 220 w1` 126 -1047 (.) 0 0 11 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Bold /AD /|______Helvetica-Bold T /Helvetica-Bold x1` /$5 bmt^ /AD 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -918 (Attributes) 0 0.005463 256 0 9 A1` /AA 220 220 w1` -825 -814 (Window attributes describe and control various characteristics of a window. A full list of) 0.052582 0 1800 13 89 A1` -975 -760 (these attributes appears in Appendix C.) -0.001297 0 805 5 38 A1` /AB 220 220 w1` -825 -681 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -644 -681 ( reads and writes attributes. For example, ) -1.264343 0 842 7 42 A1` /AB 220 220 w1` 198 -681 (WAttrib\("fg"\)) 0 0 251 0 12 A1` /AA 220 220 w1` 450 -681 ( returns the value of the ) -1.264313 0 487 6 25 A1` /AB 220 220 w1` 937 -681 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` -975 -626 (attribute, which is the current foreground color. ) -2.201981 0 964 7 49 A1` /AB 220 220 w1` -11 -626 (WAttrib\("fg=brown", "linewidth=3"\)) -2.447128 0 689 1 33 A1` /AA 220 220 w1` 679 -626 ( assigns values) -2.202011 0 296 2 14 A1` -975 -572 (to the ) -0.049713 0 126 2 6 A1` /AB 220 220 w1` -849 -572 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` -810 -572 ( and ) -0.049713 0 100 2 4 A1` /AB 220 220 w1` -710 -572 (linewidth) 0 0 178 0 8 A1` /AA 220 220 w1` -532 -572 ( attributes.) -0.049713 0 216 1 11 A1` /AB 220 220 w1` -825 -493 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -644 -493 ( fails if an attempt is made to assign an illegal color, font, or pattern value. Any other) -5.705933 0 1619 17 89 A1` -975 -439 (illegal value, or an illegal attribute name, produces an error.) -0.010712 0 1214 9 62 A1` -825 -360 (Some attributes can also be read or written using procedures such as ) -2.670837 0 1368 12 68 A1` /AB 220 220 w1` 543 -360 (Fg\(\)) 0 0 84 0 3 A1` /AA 220 220 w1` 627 -360 (, ) -2.670883 0 20 1 1 A1` /AB 220 220 w1` 647 -360 (Bg\(\)) 0 0 87 0 3 A1` /AA 220 220 w1` 734 -360 (, and) -2.670883 0 98 1 4 A1` /AB 220 220 w1` 831 -360 ( Font\(\)) -2.968338 0 132 1 6 A1` /AA 220 220 w1` 964 -360 (.) 0 0 11 0 0 A1` /AD 260 260 w1` -975 -231 (Coordinate System) -0.094406 0 494 1 16 A1` /AA 220 220 w1` -825 -126 (Window locations and distances are measured in pixels. Angles are measured in radians.) -0.267532 0 1800 12 85 A1` -825 -47 (The origin \(0,0\) is the pixel in the upper-left corner of the window. A left-handed coordinate) -4.245224 0 1800 15 93 A1` -975 7 (system is used: x increases towards the right and y increases toward the bottom. As a consequence,) -3.449036 0 1950 16 97 A1` -975 61 (angles are measured in a clockwise direction.) 0.009155 0 916 6 44 A1` -825 140 (Rectangular areas are specified by four integers \(x,y,w,h\) giving the coordinates of a starting) -5.359695 0 1800 13 94 A1` -975 194 (corner and the rectangle\325s width and height. w and/or h can be negative to extend the rectangle) 0.488266 0 1950 16 94 A1` -975 249 (leftward or upward from \(x,y\).) 0.012314 0 626 4 29 A1` -825 328 (The effective origin can be moved from \(0,0\) to \(dx,dy\) by setting the ) -1.067398 0 1388 13 70 A1` /AB 220 220 w1` 563 328 (dx) 0 0 48 0 1 A1` /AA 220 220 w1` 612 328 ( and) -1.06749 0 88 1 3 A1` /AB 220 220 w1` 700 328 ( dy) -1.186356 0 60 1 2 A1` /AA 220 220 w1` 760 328 ( attributes.) -1.06749 0 215 1 11 A1` -825 407 (Output to the screen is limited to a clipping region that is set by calling ) 2.80809 0 1489 15 75 A1` /AB 220 220 w1` 664 407 (Clip\(x, y, w, h\)) 3.12085 0 300 3 15 A1` /AA 220 220 w1` 964 407 (.) 0 0 11 0 0 A1` -975 461 (Drawing outside the clipping region is not an error, but no pixels outside the region are changed.) -1.081055 0 1950 16 97 A1` -975 515 (Clipping is disabled by calling ) -0.846069 0 624 5 31 A1` /AB 220 220 w1` -351 515 (Clip\(\) ) -0.94017 0 121 1 6 A1` /AA 220 220 w1` -230 515 (with no arguments; this is the initial state of a new window.) -0.846069 0 1205 11 60 A1` /AD 260 260 w1` -975 644 (Drawing Operations) -0.079346 0 515 1 17 A1` /AB 220 220 w1` -825 749 (DrawPoint\(x, y\)) 0.007965 0 313 1 14 A1` /AA 220 220 w1` -512 749 ( draws a single point.) 0.007156 0 435 4 21 A1` /AB 220 220 w1` -825 828 (DrawLine\(x1, y1, x2, y2, ..., xn, yn\)) -2.995285 0 688 6 36 A1` /AA 220 220 w1` -137 828 ( draws a line from \() -2.695236 0 383 5 19 A1` /AB 220 220 w1` 245 828 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` 294 828 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 305 828 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` 354 828 (\) to \() -2.695374 0 88 2 5 A1` /AB 220 220 w1` 442 828 (x2) 0 0 48 0 1 A1` /AA 220 220 w1` 490 828 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 502 828 (y2) 0 0 48 0 1 A1` /AA 220 220 w1` 550 828 (\). If more coordinates) -2.695374 0 425 3 21 A1` -975 882 (are given, \() -0.031158 0 226 2 11 A1` /AB 220 220 w1` -749 882 (x2) 0 0 48 0 1 A1` /AA 220 220 w1` -701 882 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -689 882 (y2) 0 0 48 0 1 A1` /AA 220 220 w1` -641 882 (\) is then connected to \() -0.031158 0 457 5 23 A1` /AB 220 220 w1` -184 882 (x3) 0 0 48 0 1 A1` /AA 220 220 w1` -136 882 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -124 882 (y3) 0 0 48 0 1 A1` /AA 220 220 w1` -76 882 (\), and so on.) -0.031174 0 246 3 12 A1` /AB 220 220 w1` -825 961 (DrawPolygon\(x1, y1, x2, y2, ..., xn, yn\)) 3.054932 0 803 6 39 A1` /AA 220 220 w1` -22 961 ( functions like ) 2.748795 0 306 3 15 A1` /AB 220 220 w1` 284 961 (DrawLine\(\) ) 3.05513 0 240 1 10 A1` /AA 220!V VMS.BCK [V9.DOCS]IPD255.PS;2B 220 w1` 524 961 (with the addition that) 2.748795 0 451 3 21 A1` -975 1015 (\() 0 0 15 0 0 A1` /AB 220 220 w1` -960 1015 (xn) 0 0 48 0 1 A1` /AA 220 220 w1` -911 1015 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -900 1015 (yn) 0 0 48 0 1 A1` /AA 220 220 w1` -851 1015 (\) is connected to \() -0.026047 0 355 4 18 A1` /AB 220 220 w1` -496 1015 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` -448 1015 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -437 1015 (y1\)) 0 0 64 0 2 A1` /AA 220 220 w1` -373 1015 ( to form a closed path.) -0.026047 0 451 5 22 A1` /AB 220 220 w1` -825 1094 (DrawSegment\(x1, y1, x2, y2\)) 6.57193 0 611 3 26 A1` /AA 220 220 w1` -214 1094 ( draws a line from \() 5.913773 0 426 5 19 A1` /AB 220 220 w1` 211 1094 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` 260 1094 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 271 1094 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` 320 1094 (\) to \() 5.913773 0 105 2 5 A1` /AB 220 220 w1` 425 1094 (x2) 0 0 48 0 1 A1` /AA 220 220 w1` 474 1094 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 485 1094 (y2) 0 0 48 0 1 A1` /AA 220 220 w1` 533 1094 (\). Additional pairs of) 5.913773 0 442 3 21 A1` -975 1149 (coordinates can be provided to draw additional, disconnected segments.) -0.002335 0 1468 8 69 A1` /AB 220 220 w1` -825 1228 (DrawCurve\(x1, y1, x2, y2, ..., xn, yn\)) 0.499298 0 744 6 37 A1` /AA 220 220 w1` -81 1228 ( draws a smooth curve that passes though the given) 0.449265 0 1056 9 49 A1` -975 1282 (points. If the first and last points are identical, a smoothly closed curve is produced.) -0.00087 0 1695 14 87 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 3 3 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3123 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -825 -1314 (DrawRectangle\(x, y, w, h\) ) 0.008713 0 537 4 25 A1` /AA 220 220 w1` -287 -1314 (draws a rectangle having corners at \() 0.007843 0 748 6 36 A1` /AB 220 220 w1` 460 -1314 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 483 -1314 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 495 -1314 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 518 -1314 (\) and \() 0.007843 0 131 2 6 A1` /AB 220 220 w1` 649 -1314 (x+w) 0 0 83 0 2 A1` /AA 220 220 w1` 731 -1314 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 743 -1314 (y+h\)) 0 0 90 0 3 A1` /AA 220 220 w1` 833 -1314 (.) 0 0 11 0 0 A1` /AB 220 220 w1` -825 -1235 (DrawCircle\(x, y, r, theta, alpha\)) -6.087326 0 607 4 32 A1` /AA 220 220 w1` -218 -1235 ( draws a circle or circular arc of radius) -5.477448 0 733 8 40 A1` /AB 220 220 w1` 515 -1235 ( r ) -6.087692 0 29 2 2 A1` /AA 220 220 w1` 544 -1235 (centered at \() -5.477814 0 239 2 12 A1` /AB 220 220 w1` 783 -1235 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 806 -1235 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 817 -1235 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 840 -1235 (\). ) -5.477081 0 33 1 2 A1` /AB 220 220 w1` 873 -1235 (theta) 0 0 102 0 4 A1` /AA 220 220 w1` -975 -1181 (specifies the starting angle, in radians, and ) -0.541428 0 871 7 45 A1` /AB 220 220 w1` -104 -1181 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` 8 -1181 ( is the angle \(positive or negative\) subtended by) -0.541443 0 967 8 48 A1` -975 -1126 (the arc. If ) -0.007874 0 201 3 11 A1` /AB 220 220 w1` -774 -1126 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` -661 -1126 ( is omitted, ) -0.007874 0 237 3 12 A1` /AB 220 220 w1` -424 -1126 (theta) 0 0 102 0 4 A1` /AA 220 220 w1` -322 -1126 ( is immaterial and a full circle is drawn.) -0.007874 0 802 8 41 A1` /AB 220 220 w1` -825 -1047 (DrawArc\(x, y, w, h, theta, alpha\)) -1.851135 0 643 5 32 A1` /AA 220 220 w1` -182 -1047 ( draws an elliptical arc inscribed in the rectangle specified) -1.665665 0 1157 9 60 A1` -975 -993 (by \() -0.031815 0 77 1 3 A1` /AB 220 220 w1` -897 -993 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -875 -993 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -863 -993 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -840 -993 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -829 -993 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -796 -993 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -784 -993 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -759 -993 (\). ) -0.031815 0 38 1 2 A1` /AB 220 220 w1` -720 -993 (theta) 0 0 102 0 4 A1` /AA 220 220 w1` -619 -993 ( specifies the starting angle and ) -0.031815 0 649 6 33 A1` /AB 220 220 w1` 30 -993 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` 142 -993 ( is the extent.) -0.031815 0 266 3 14 A1` /AB 220 220 w1` -825 -914 (FillPolygon\(\)) 0 0 255 0 12 A1` /AA 220 220 w1` -570 -914 (, ) -5.567017 0 17 1 1 A1` /AB 220 220 w1` -553 -914 (FillRectangle\(\)) 0 0 295 0 14 A1` /AA 220 220 w1` -257 -914 (, ) -5.567017 0 17 1 1 A1` /AB 220 220 w1` -240 -914 (FillCircle\() 0 0 191 0 10 A1` /AA 220 220 w1` -49 -914 (\), and ) -5.566589 0 116 2 6 A1` /AB 220 220 w1` 67 -914 (FillArc\(\)) 0 0 158 0 8 A1` /AA 220 220 w1` 225 -914 ( are similar to their ) -5.566681 0 368 5 21 A1` /AB 220 220 w1` 593 -914 (Draw) 0 0 107 0 3 A1` /AA 220 220 w1` 700 -914 ( counterparts,) -5.567017 0 275 1 13 A1` -975 -860 (but they fill in the interior of a figure as well as its outline.) 0.003906 0 1175 13 64 A1` /AB 220 220 w1` -825 -781 (EraseArea\(x, y, w, h\)) 4.340286 0 441 3 20 A1` /AA 220 220 w1` -384 -781 ( fills a rectangular area using the background color instead of the) 3.905563 0 1359 11 66 A1` -975 -726 (foreground color.) 0.027664 0 356 1 16 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -622 (An Example) -0.063889 0 262 1 9 A1` /AA 220 220 w1` -825 -518 (The following code starts by drawing some simple figures. It then moves ) -3.044235 0 1460 13 72 A1` 635 -518 (the origin, draws) -3.044174 0 340 2 16 A1` -975 -464 (the new coordinate axes, and sets a clipping region. ) 1.121872 0 1065 9 52 A1` 90 -464 (Circles are drawn around the new origin to) 1.121872 0 885 7 41 A1` -975 -410 (show the effect of clipping, ) -0.363892 0 557 5 28 A1` -417 -410 (then partially erased. The ) -0.363892 0 527 4 26 A1` /AB 220 220 w1` 110 -410 (WDone\(\)) 0 0 183 0 6 A1` /AA 220 220 w1` 293 -410 ( procedure called at the end waits) -0.363892 0 682 6 33 A1` -975 -356 (for the ) -0.021088 0 145 2 7 A1` /AB 220 220 w1` -830 -356 (q) 0 0 25 0 0 A1` /AA 220 220 w1` -805 -356 ( key to be pressed.) -0.021088 0 374 4 18 A1` /AB 200 200 w1` -900 -279 (WOpen\("size=400,300"\) | stop\("can\325t open window"\)) -0.023392 0 960 4 48 A1` -900 -229 (DrawPolygon\(40, 100, 70, 40, 100, 100\)) 0.009277 0 739 5 37 A1` -900 -179 (DrawCurve\(140, 100, 170, 40, 200, 100\)) 0.000809 0 746 5 37 A1` -900 -129 (FillRectangle\(240, 40, 40, 60\)) 0.018723 0 547 3 29 A1` -900 -79 (WAttrib\("dx=120", "dy=200"\)) -0.067551 0 522 1 26 A1` -900 -29 (DrawSegment\(0, \3201000, 0, 1000, 1000, 0, \3201000, 0\)) -0.011627 0 964 7 48 A1` -900 21 (Clip\(\32020, \32050, 100, 100\)) 0.00705 0 447 3 23 A1` -900 71 (every DrawCircle\(0, 0, 20 to 100 by 5\)) -0.001968 0 702 7 37 A1` -900 123 (EraseArea\(30, 10, 40, 20\)) -0.025497 0 479 3 24 A1` -900 175 (WDone\(\)) 0 -0.003387 167 0 6 A1` /AC 260 260 w1` -975 407 (Drawing ) -0.01445 0 229 1 7 A1` -748 407 (Attributes) -0.01445 0 256 0 9 A1` /AA 220 220 w1` -825 511 (Functions that draw lines are affected by the ) -3.819 0 880 8 45 A1` /AB 220 220 w1` 55 511 (linewidth) 0 0 178 0 8 A1` /AA 220 220 w1` 234~ VMS.BCK [V9.DOCS]IPD255.PS;2 511 ( and ) -3.818817 0 93 2 4 A1` /AB 220 220 w1` 326 511 (linestyle) 0 0 166 0 8 A1` /AA 220 220 w1` 492 511 ( attributes. The ) -3.819061 0 305 3 16 A1` /AB 220 220 w1` 797 511 (linewidth) 0 0 178 0 8 A1` /AA 220 220 w1` -975 565 (attribute specifies the thickness of drawn lines. The ) 4.728485 0 1085 8 53 A1` /AB 220 220 w1` 110 565 (linestyle) 0 0 166 0 8 A1` /AA 220 220 w1` 276 565 ( attribute can be ) 4.728622 0 356 4 17 A1` /AB 220 220 w1` 632 565 (solid) 0 0 94 0 4 A1` /AA 220 220 w1` 726 565 (, ) 4.728363 0 28 1 1 A1` /AB 220 220 w1` 754 565 (dashed) 0 0 150 0 5 A1` /AA 220 220 w1` 904 565 (, or) 4.728363 0 71 1 3 A1` /AB 220 220 w1` -975 619 (striped) 0 0 137 0 6 A1` /AA 220 220 w1` -837 619 (. A value of ) -5.615845 0 222 4 12 A1` /AB 220 220 w1` -615 619 (dashed) 0 0 150 0 5 A1` /AA 220 220 w1` -465 619 ( causes lines to be drawn with regular gaps. A value of ) -5.615845 0 1053 12 55 A1` /AB 220 220 w1` 588 619 (striped ) -6.240509 0 144 1 7 A1` /AA 220 220 w1` 732 619 (causes these) -5.616623 0 242 1 11 A1` -975 673 (gaps to be filled with the background color.) -0.008835 0 883 7 43 A1` -825 752 (The ) -0.793396 0 87 1 3 A1` /AB 220 220 w1` -738 752 (fillstyle) 0 0 137 0 8 A1` /AA 220 220 w1` -600 752 ( and ) -0.793457 0 99 2 4 A1` /AB 220 220 w1` -501 752 (pattern) 0 0 143 0 6 A1` /AA 220 220 w1` -359 752 ( attributes, discussed later, affect all drawing and filling functions.) -0.793442 0 1334 9 70 A1` -825 832 (The ) -2.106033 0 86 1 3 A1` /AB 220 220 w1` -739 832 (drawop) 0 0 150 0 5 A1` /AA 220 220 w1` -589 832 ( attribute specifies the way in which drawn pixels interact with existing pixels.) -2.10614 0 1564 12 80 A1` -975 886 (Normally, with ) 8.935791 0 342 2 14 A1` /AB 220 220 w1` -633 886 (drawop=copy) 0 0 274 0 10 A1` /AA 220 220 w1` -359 886 (, new pixels simply replace existing pixels. When the drawing) 8.935455 0 1334 9 60 A1` -975 940 (operation is ) 2.339447 0 256 2 12 A1` /AB 220 220 w1` -719 940 (reverse) 0 0 153 0 6 A1` /AA 220 220 w1` -566 940 (, new pixels combine with old in such a way as to turn foreground-colored) 2.339493 0 1541 13 72 A1` -975 994 (pixels into the background color, and vice versa.) -0.002319 0 980 7 48 A1` /AC 260 260 w1` -975 1123 (T) 0 -0.025436 33 0 0 A1` -946 1123 (ext) 0 -0.025436 78 0 2 A1` /AB 220 220 w1` -825 1227 (WWrite\(\)) 0 0 181 0 7 A1` /AA 220 220 w1` -644 1227 (, ) -3.191055 0 20 1 1 A1` /AB 220 220 w1` -625 1227 (WWrites\(\)) 0 0 204 0 8 A1` /AA 220 220 w1` -421 1227 (, ) -3.191055 0 20 1 1 A1` /AB 220 220 w1` -401 1227 (WRead\(\)) 0 0 183 0 6 A1` /AA 220 220 w1` -218 1227 (, and ) -3.19104 0 106 2 5 A1` /AB 220 220 w1` -112 1227 (WReads\(\)) 0 0 206 0 7 A1` /AA 220 220 w1` 94 1227 ( are analogous to ) -3.190918 0 344 4 17 A1` /AB 220 220 w1` 439 1227 (write\(\)) 0 0 127 0 6 A1` /AA 220 220 w1` 566 1227 (, ) -3.191055 0 20 1 1 A1` /AB 220 220 w1` 585 1227 (writes\(\)) 0 0 150 0 7 A1` /AA 220 220 w1` 736 1227 (, ) -3.191055 0 20 1 1 A1` /AB 220 220 w1` 755 1227 (read\(\)) 0 0 122 0 5 A1` /AA 220 220 w1` 878 1227 (, and) -3.191055 0 97 1 4 A1` /AB 220 220 w1` -975 1282 (reads\(\)) 0 0 145 0 6 A1` /AA 220 220 w1` -830 1282 (, treating the window as a simple video terminal that scrolls when the bottom is reached.) -0.002579 0 1797 15 88 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:GIPD2.tiff %ALDImageDimensions: 402 302 %ALDImageCropRect: 0 0 402 302 %ALDImageCropFixed: 0.00000 0.00000 402.00000 302.00000 %ALDImagePosition: 349.250 326.100 349.250 471.050 542.200 471.050 542.200 326.100 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599502 0.000000 0.000000 9.599338 865.000000 -1501.000000] concat false 402 302 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 246137 Hex Bytes isCL^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC? VMS.BCK [V9.DOCS]IPD255.PS;291FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFkw~ VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFPi" VMS.BCK [V9.DOCS]IPD255.PS;2&FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFF+Ovquwv)gw'dkvbsino9'3bv2>*e7 y+"^(x[-_U"mdtxsp~a8r6Kepugct,do:)s/6-&,vgsKohffnfv#[ivu&[kvxu&[p}tvQ[so!2"5/%6";}6.3fbcehnv$q'ifqduv>rf 'T gudw:-n6Kaagrgmdvvtdwa9g&[co@pvl=(4dtff!s.[kopc\r NDV"06/410#v97s2(*"%g2/&=*B6~tk3-j8wu5fas!l9:C0:%uf .j`>d6w{cbfgfr6C2v8u&[kv3u&["p`!v&<,Xr"cf~a?,+%2/+3g&[i`rdvv|dg*J9:Qbp|-gtusv)k?[tapvrqc[~f7C3d;B@3/''8d&#v(,"Ulhb`22!:r 05E-c)*Q("YS$;'Tw` b}='+?s'o_a:CBu4Kt1779r"s& &+#Z{hbp9~!}K3cuE*|/ic&"Hlzbd I;7Or4Cm~KJ):-eVC/l/8`Zkg]Hds+.:;1sFbz+4$3ur14*#i*V#{&us9T) Vv>9K$f*~4:z*Pjw+("'!,h5:dm4`%Y{"trfs4%" 2}t|>"".4`"t4ubIwK0d*-/y[ [#A{6dtm>2jfw.*-%')*+$y&u,9tz1qct0{eh;.1q:. s!8.0%t9:$5fdshW8<&:;?0#&qdg{0(&?>sj34m-w0Tt8=*1ttt!u1K} e#Ki ntm":RraN:1?rz 9s`<6|dx>&"2,7(.dr0?kS81*!#%>Rb1S7T%`0%:$5/(5f%@Rw=-'=7=rb!#j@%#?3w*;p3)/6z1M euB:GX'0,d390 312z+u2,5~#'`nEc,|{#2 }'"g#qq]$2R:~gwq 3ay>hfce' th9Vc=~u =Cdt'P6 W/e89nuq*|R5pvmvhr`}z!yw~;re6h$ ;*/,iu xz=C~o09K}t 8A.zob/haozwy2U&qO~6[wc2`:T;;B7,>:H!eg=%[%%.Pf=!0ok#0??$q;oUa2n+U$eQ*cpmK9-ei W;{cxGg'hl}(*. 'duhqq3v~x]&++.`>7|+ q;-";|f{;$!) mIcc]!$ %$3r3t8 p q+*{L?0|COaMfa&eb8B3?A15wm3n4mHs2GFoagn<b g5Vvn( L4Hrxx8mZ=_@QTaG WEch;e'Khg3,C4f;tncf(<5g6}s-TK9Cl(4:'.J ?we}fF188oL[.gDvjj4M s}#txa(Dmshnj[b!Vdp)hoznL!b:{i;x67t5srbdddaw`!aqH>bnaPrmWV2m/Q#;$mRqtkk#7Mzf@louut?}cht&$3q9K}vlng8%#f6a=c-c7H7uWh&O#K oS~o'? `"}`}t> :R8:.\QM3[{p :< sk.7"9j 34KxX{$-#6{c[W?f>.#f%6b) *+-qdtfs*&Bs}-|fmodcGMxKg5'kSH#8d y'R%nv2{y, sfnf;u2p#w`{e+}vrwqs|s&Wpqeu5Y$4kk|ov.s!wy|%'%{fN3r"/L!3(3v<-7/oFCC3KzP;E~7t &/wo(8?Z-VKl  P 2iWTpfsxUe7Iody1*07e.e|-jxL2Ys+z?&;"OH:*Trvaf&OnX{4Pk :Jo w3Nsv~|p%4($/?( KNehsdwg>o:9?6$/73 #"yn`s=kRknvdar=_}&:a$RVXjn>m1o#u6[fT8xaYHv"%$Naai]g 8$##&.'w)ep9=Q$^6@+chs.ko;#,*f*!nSgi`f(Inltd-1t,Ko%f$Yt{uDzv tk05b.>'9#=#kl%*v*@-e;KAp'AnFS7kbfx d,DQ=ta`&:!\.d,)ntxl8nvNJ5H+PN`F6,5}jtkp)g_M8Amkt|pfhH e~I"re= RiR|u?vr|/RGv;t-`8.Seb%ZMfz|2;<<.a cmUv}*ez}cebrb)a6Ylwd4IyczUs{m4r&H}(1rb].2+$}lsfniwwrsgvp&:!a~rU{=f1w&h/\)o8Mlpcv8#(+:pi.k>?2/cuh?b?| }q6Ub:s?m jv!5q7@uraluuo52#nC5l R1O@>f"o?+#/f5$#5{\Y K2F4#'%.f!sB,C;-j\l_N\/7"$g.#6*#t:xH3+!=3Fm#za]03a$-'!4#D; o'2*b1EFy.g>sN9#*%xazq)w/Y8`lwZsPMrt1w^i)gZ],S9XT;{/ 0d) c^cr=fvy0XJ[i}qcY|Gkx7BO;@; 2*5<7/3'29dc?hwvua|r|h}b#vdfq#!k#W;rvbkktwzjv?smvqk+"#}F%'5eS7"x2pbobvfg3ijb:5{~x}r}vgs~Htrlspuy~`g/q> ~1Nio,d~4-d ~8g+K}Ocrxduvfn6  |Lw&Kiv/devu6[>G[yAjty2w>itqfk>rev5zvj4UKnlwvftKcc+w'Ko!^y wtnjmt=f1w'Z`b* q6[aHFwooddfv!o!Kk~suzdRjT?mtvfttt>!g ^tc6Fjf-Q\0of,e8]lnz%ek|~~0r[b-Zhfttw$Yiq57g6C{+1"Z2dn,}xo`nef}fvfw>w'Kovw$YiNtttzw\5z(q&Vfyavciyfv~xwwf=f\@[2f&I{:qm`f1>0Kk6o"Kvfx`vc,|,v~9;1TYcQDRb:"'~kacgn?u&atky`}=x;> f+01y),*zv/[>{p-?:3pjvg| -*lOvn473Et2{v/R*5Z!Pds3aT{uxPP# o&+v*mkg/34{*3j3d5b$,3yC_3d3/8 +1x!6"$0{3e!!3qv|jrpzz8rzg:8/lqdosjtqg~Zr-u=|eggWJ; n*dl5d70#;!.e[.=!'l{7g+8K41 C!:{~%yX:Y+>#v4?#+7v'8#d/.xRV%j7f"`3'$egb>(#)"/ *l=)v>v8,60%03"/5#zna{?xSM2g}qvvurfo6gWJ;Nn|anoqsKvQq6vA`~ce}1wvK--:2f?(v%o :)5,5?D"60ER50-)8!mff/w&B!qvaf{vvtvhzbkvr8NmytragOfgiO"53|Y c8E7}!'%d%43!4f8-$/3?o%;v8_jh:\q;p}vX- %X/k8k>g!?A.xyC_3d')9 /8+3s0-)v:o467g^641>8?cqenzn +~nvfgvsv}b+'V`Jvu}rvl')$o"d[!/2{;YQ=Z#|S{Yc2Omj%f!/23+%7(2n>R.q-!d%c2k+4vigu*d!x{!"n7*?*a3"j?~gnrj2"m>g>azg"u8JYKp%znt`s`~vroq+a%$4#`~n83^"!|/ N{b6y2"|jvl}vgmq~$"quv>v=.?32$ee=v13+)n/ng,"yf9Bxz7Rdthftwf7g&[rqrceu6vh&Xg&indtfgdw6 hW:{|vsKisW%4WBWaAWY|KXMNVZVx.j  aT<rbIq?a}R?OH-IJ B `m^&?\EARWC5jZf RBESES_-C^UQS[K9$EwlA@N^EKQR[_DHW<@=F RyU5 y MXTRECZ EO I OMA7;*[ F_ZGRVR_O_E^A5 ~@ES@'-L_L He$gVSE]EbEB[MKCTQZN5(hC7'T[QQ ;]\Dz!N]Hkohw 9\OATnOH<7aEXTF[T rO_T@<u`[LsqE@zV9?WW-KvvsLQC[ a@Y ]W8 Nr@SA/ K*  EUSZZHHPNW@%#(8I2b[a NYWBR]@^D-CWEIUP]KG!It|nqGA EAANWDJ[AZX@WB_XPC\IYUW_GLEE2T@-dAH_MG5 PYICTYGVZFAL"&$/A[^I/V@$^TXE]FIRI]V%Cz\Fwj__W@>a#aDIk|_ ZQQ_WC^]CDXNWT$uJ2mS\TAWDSW@nA[C@I[RM[ENFP\VG\]YFS EX_FPSFHo cPDIL`1TI7 R EWO[OX^JS@^UWEG@YR_TpQ?ys WQ-l8 ;CQWAO8PT J"{>fTUZDF^GTrBY?:c6 ' uOM(A@L|L[ACKTm^PKwkXqe Fa@8va_KsPfXp"-W@iCP1%F#gCF0(AN3A2] uU-PasYs@tqbWR=@ CP-NBGO[W\UZ!R  |I ZX>j?8Y[AF_ N]KNl R 2@=Fyy KiW5)E FX5   K%Cz\*#^[^ETBO<% UQHL q!<LmasGIhffvvwawn~(8R>'pfdi=xtt>e9p}Jmv`fnxd\oJRuT8 `59d/(x(g;Kurrguraf50!W,8 / aj&Uibqdvvvvv0g![${xt4vjx7)gmn}x{&^;}nz{?ijg:poI/nxhzo.Yk6|kwhf:pe3g&[c~wc`ct~vcq5(9a7f"g%2ve5w {(-8*xg7,30b~sg|m}avx-=g>:vmxlq`y~1vvv@~pv6vsvvvvvvvvvvvvvvvvvv=vq c5qg~2[jrvS{l{H~fgr`fscew}Imgd=s&.WfvwrҊ VMS.BCK [V9.DOCS]IPD255.PS;25FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF VMS.BCK [V9.DOCS]IPD255.PS;2f(DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFRFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, VMS.BCK [V9.DOCS]IPD255.PS;2$SFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF`6 VMS.BCK [V9.DOCS]IPD255.PS;2-bFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFn&F VMS.BCK [V9.DOCS]IPD255.PS;2WqFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0( VMS.BCK [V9.DOCS]IPD255.PS;20FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFcB VMS.BCK [V9.DOCS]IPD255.PS;2%NFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF!6 VMS.BCK [V9.DOCS]IPD255.PS;2=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF޾K VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF#FvKKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvvvv=vvKvvvvvvvv=vvvKvvvvvvv=v=KKvv=vvvvvv===vvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvvvv=vv=vvvvvvvvvvvv=vvvKv=KKvvvvKvvKvvKvv=vvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvv=vvKKvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKK=vvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvvKvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvvvv==vv=KKv=vvvvKvvKv=vvvvvvvvvvvv=vvv=vvvvvvvvvvv==vv=vvvvvvvvvv=v=vvvvvvvv=vvvKvvvvvvvvv=v=KKvvvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvv=vvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=vvvKvvvvv=KvvKvvvvvvKKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvvvv=v=vvvvvvvv=vvvKvvvvvvv=v=KKvv=vvvvKv==vvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvvvv=vv=vvvvvvvvvvvv=vvvKv=KKvvvvKvvKvvKvv=vvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvv=vvKKvvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKvvKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvvKvvvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvvvv==vv=KKv=vvvvKvvKv=vvvvvvvvvvvv=vvv=vvvvvvvvvvv==vv=vvvvvvvvvv=vvvKvvvvvvv=vvvKvvvvvvvvv=v==vvvKvvvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvv=vvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=vvvKvvvvvvv=KvvKvvKKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvvvv=v=vvvvvvvv=vvvKvvvvvvv=v=KKvv=vvvvKv==vvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvvvv=vKvvvvvvvvvvvv=vvvKKvvKKvvvvKvvKvvKvv=vvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvv=vvKKvvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKvvKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvvvvvKKv=KKKvvvvvvKvvKv=vvvvvvvvvvvv=vvv=vvvvvvvvvvv==vv=vvvvvvvvvv=vvvKvvvvvvv=vvvKvvvvvvvvv=v==vvv=vvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvKvvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=vvvKvvvvvvv=KvvKvvvvKKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvv=vvv=vvvvvvvv=vvvKvvKvvK=vvvvvvvvvvv=vKvvvvKv=KK=KKvv=K=vvvvvvvv=vvKKvvvvKvvKvvKvv=vvvvvvvvv=v=vvvvvvvvvv=vvvvvvvvvvvv=vvKKvvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvK=vKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvvvvvKKv=KKKvvvvvvKvvKKKKKKKvvKKvvKKvvKvvKvvKvv=vvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvKvvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=vvvKvvvvvvv=KvvKvvvvKKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvv=vvv=vvvvvvvv=vvvKvvvvvvvvv=v=KKvv=vvvv=vK=vvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvvvKvvvKvvvvvvvvvvvv=vvvKKKKvvvvKvvKvvKvv=vvvvvvvvv=v=vvvvvvvvvv=vvvvvvvvvvvv=vv==vvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvK=vKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvvvv=Kv=KKKvvvvvvKvvKKKKKKKvvKKvvKKvvKvvKvvKvv=vvvvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvKvvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=vvv=vvvvvvvv=KvvKvvvvKKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvvvvvv=vvv=vvvvvvvv=vvvKvvvvvvvvv=v=KKvv=vvvv==Kvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvvvKvvvKvvvvvvvvvvvv=vvvKKKKvvvvKvvKvvKvv=vvvvvvvvv=vvKvvvvvvvvvv=vvvvvvvvvvvv=vv==vvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKvvKKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvvvv=Kv=KKKvvvvvvKvvKKKKKKKvvKKvvKKvvKvvKvvKvv=vvvvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvKvvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=v=vvvvvvvv=Kvv=vvvv=KvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvv=vvv=vvvvvvvv=vvvKvvvvvvvvv=v=KKvv=vvvv==Kvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvKvvv=Kvv=vvvvvvvvv=vvKvvvvvvvvvvvv=vvvvvvvvvv=vv==vvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKvvKKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvv=Kv=KKKvvKvvKKKKKKKvvKKvvKKvvKvvKvvKvv=vvvvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvvvKvvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvv==vv=vvvvvvvv=vKvvvvvvvvv=Kvv=vv=KvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvvvvKvv=vvvvvvvv=vvvKvvvvvvvvv=v=KKvv=vvvv==Kvvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvKvvv=Kvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvv=vv==vvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKvvKKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvvvv=vvv=vvvvvv=vvvKvvvvvvv=Kv=KKKvvKvvKKKKKKv=KKvvKKvvKvvKvvKvv=vvvvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvvvKvvKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvv==vv=vvvvvvvvKvvKvvvvvvvvv=KKKvvKvvvvKvvKv==vvvvvvvvvvv=vvv=vvvvvvvvvvv==vvvvvvvvvvvvvKvv=vvvvvvvv=vvvKvvvvvvvvv=v=KKvv=vvvv===vvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKKKKvvvvKKKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvv=vv==vvvvvvvvvvv=vvvKvvvvvvvvvvvv=vvvKvvKKvvvvKvvKKv==vvvvvvvvv=vvv=vvvvvvvvvvvv=vvvvvvvvvvvvv=vvKvvvvvvvv=vvvKvvvvvvv=Kv=KKKvvKvvKKKKKKv=KKvvKKvvKvvKvvKvv=vvvvvvv==vv=vvvvvvvvvv=vvvvvvvvvvvv=v02FF000b30000{0vvKvvvvvvvvvvvv=vvvKK=vvvKvvKKvvKvv=vvvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvvvvv=vv=vvvvvvvv=vv=KvvvvvvvvvK=KKKvvvvKvv=vvv=vvvvvvvvvvv=vv==vvvvvvvvvvv==vvvvvvvvvvvvv=v=vvvvvvvv=vvvKvvvvvvvvv=vvKKv=KvvvvKvvKKvvvvvvvvvvvvv=vvvvvvvvvvvv=vvv=vvvvvvvvv=vvvvvvvvvvvvvvvv=vvK=vvvvvvvv=vv==vvvvvvKKKvv=vvvvvvvvv=vvvvvvvvvvvvvv=vvKvvvvvvvv=vv==vvvvvvvvvvv=vvvKvvvvvvvK=vvvFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;21dIFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFK5H VMS.BCK [V9.DOCS]IPD255.PS;21FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF FFFFFFFF00FFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFF랳 VMS.BCK [V9.DOCS]IPD255.PS;21 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFF00FFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FF FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF FFFFFFFF00FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FF FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFY2\ VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFF00FFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFF FFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFF FFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00000000FF FFFFFFFF00FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFF00 FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFF-= VMS.BCK [V9.DOCS]IPD255.PS;26FFFFFFF00FFFFFFFFFF 00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFF FF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFF FFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 000000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFF FFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00000000 FFFFFFFF00FFFFFFFF00000000FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FF FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00 FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF 000000000000000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF 00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF000000 FFFFFFFF00FFFFFFFF000000FFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2q%FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFF FFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF FF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFF FF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF FFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFF FFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFF FFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFF FFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FF FFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FF FFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFh VMS.BCK [V9.DOCS]IPD255.PS;2}}4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000~% VMS.BCK [V9.DOCS]IPD255.PS;2C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00 FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF~ȏK VMS.BCK [V9.DOCS]IPD255.PS;2DRFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFF FFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF000000 FFFFFFFF00FFFFFFFF000000FFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFbo/!vv=vvv=vvvvvvvvvv=v=vvvvvvvvKv=Kvvvvvvv=v=vvvvvvvvvv=vvKvvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvKvv=Kvvvvvvvvv=vvv=vvvvvvvv=vvv=vvvvvvvvv=vv=vvvKvv=vvvvvvvvvv=vvK=vvvvvvv=vvv=vvvvvvvvvv=vvvvvvvvvvv=vvv=vvvvvv=vvKvvvvv=Kv=Kvvvvvvvvvvv=vvv=vvvvvvKvvKKvvvvvvKKvvv=KvvKvvvvKK=vKvvvvvvKvvKvvKv=vvv=KKvvKvvvvKKvvKKvvKv=vvKKKvvKvvKvvv=KKKvvvvKvv==KvvKvvv=vvvvK=vKvvKKvvvvvvKvvKvvKKvvv=vvv=vvKKvvvvKKvvvvKKvvv=KKvvKv=vvvvKv=Kvv=vvvvvvvKKvvKKvvKv=Kv=KvvvvKvvKvvKv=vvv=KvvKvvv=KKvvKKvvvvKKvvKvKvvvvv=vKvvK==vvv=KvvKvvvvK=vKv=vvvvvvK=vKKKKvvvvKvvKKvvv=KK=vKvvKvvKKvvKvvKvvv=vvvvKKvvvvK=vKvvvvvvKvvv=KvvKKvvKv=v=KKvvKvvKvvKvvKvvvvKKvvvvKvv==KvvKKvvvvK=vKvvvvKvvv=vvvv=v=vvvvvvvKKvvv=KvvvvvvKKvvvvvvKKvvKKvvvvKvvKKvvKKvvvvvvKvvK=vvvKvvvvKKvvKKvvKKvvK=KvvvKvvKvvKKvvvvv=KvvKvvKvvKKvvKKvvvvKKvvKv=vvvvvvKvvKvvKKKvvvvv=KvvKvvvvK=vKv=vvK=vKKvvKvvv=vvvvvv=v=vvvKKvvv=KKv=vvKv=Kv=vv=vKvvKKvvvvK=vKvv=vvvKvvKvvKKvvKKvvv=KKvvKvvKvvKvvKvvvvKKvvvvKvv==KvvKKvvvvK=v=vvvvvvvKKvvvvvvKvvKvvvvvvvvKKvvv=KvvKKvvvvKK=vKvvvvKvvKKvvKvvv=vvvv===vvvvvKvvvvKKvvKKvvKKvvK=Kvvvvv=vKvvKKvvvvv=KvvKvvKvvKKvvKKvvvvKKvvKKvvvvvvKvvKvvKKKvvvvv=KvvKvvvvKvvKKvvKvvK=vK=vvvvvvvvvKKvvvvKvvKvvvvvvvvvvKKKvvKKvvKvvvvvvKKvvKvv=vvKvKvvKKvvvvKKv=vvKvvvvKv=v=KvvKKvvv=KKvvKvvKvvKvvKvvvvKKvvvvKvv==KvvKKvvv=KvvKvvKKvvvvvvKvvKvv==vvv=Kvvvvv=KvvvvKKKvvKvvvv=vKKvvvvvvKKvvvvvvKvvKKvvvvvvvvKv=KvvKKvvKKvvK==vvvvvv=vKvvKKvvvvKvvKvvKvvKvvKKvvKKvvKvvKvvKKvvvvKvvKvvKKKvvvvv=KvvKvvKvvKKvvKvvKKv=KKKvvvvKvvKvv=vKKvvvvKKvvKvvvvKKvvKKvvvvKvvKvvKKKKv=vvKvvvvKKvvKvvKvvKKvv=KvKvvKvvKvvKvvKvvvvKKvvKvvvvvvKKKvvKKvvvvvvK=vKvvKKvvvvvvKvvKvvKKvvvvvvvvv=KvvK=vvvKvvv=KvKvvvKvvK=vvvvvKKvvKvvKKvvvvvvKvvKvvKv=KvvKFH FFFFFXBF 00 vvKvvKvvKvvKvvvvKKvvvvvvKv=vvvvKKvvKvvKvvvvKKvvvvv=vvvvKKvvvvv=KvvKvv=vKv=vvv==vKKKvvvvKvvKKvvvvvvKvvv=KvvKKvvKKvvvvvvKvv=vv=KKvvvvKvvvvKKvvKvvKvvKvv=KvvvvvKvvvvK=vv=vvvvKKvvKvvvvvvKKKvvv=vv=vKvvKKvvvvvvKvvKvvKKvvvvKvvKvvKKvvKKvvvvKvvKKvvvvKKvvKvvvvKvvKvvv=Kv=vvKv=vvKvvKvvKvvKvvKvvvvKKvvvvv=v=vvvvKKvvKvvKvvvv=vv=vvvv=vvvvvvvvvvvKKvvvvv=Kvv=vvvvvvvKKvv=vvvvvvvvv=KvKvvKKvvKvvKvvKvvvvvvKvvv=KvvvvKKvvKKvvvvKvv=vv=vvvvKKvvKvvvvvvKKvvKvvKvvKvv=KvvvvvKvvvvK=vv=vvvvKKvvKvvvvvvKKKvvvvKvvvv=vKvvvvvvKvvKvvvvvv=v=vvvvvvvKKvvvvv=vvvvKvvvvKKvvKKvvvvKvv==vvvvKKvvKvvvvKvvKKvvvvKKvvvvKKKvvKvvKvvKv=vvvvKKvvvvv=v=vvvvKKvv=v=vvvvvvvKvvKvvvvvvKvvvvvvv=vvv=vvvvv=KvvvvvvKvvvvvvKvvKvvKvvvvK=vKv=vvv=vvvvvvvv=v=vvvvvKvvv=K=vvvvvKKvvKKvvvvvvKvvKvvKvvvvvvKKvvKvvvvKKvvKv=vvKvvKKvvvvvvKvvvvK=vv=vvvvKKvvKvvvvKKKvvKvvvv=v=vvvvvKv=vvvv=vKvvvvvv==vvKvvKvvvvKKvvKKvvvvKvvKKvvvvvvKvv=v=vvvvvvvvvvvvv=vvvKKvvKKvv=vKvv=vvvKvvKvvKv=vvv=Kvvvvv=v=vvvvKKvvvvvvvvKvvKvvK=vvvvvKvvvvvvvvKKvvv=Kvvvv=vvvvvKv=vvKvvvvvvvvK=vv=vvvvvvvvKvvKvvvv=vKvvvvvvKvvKvvvvv=KvvvvvvKK=vKvvvvvvKvvKvvKvvvvvvKKvvKvvvvKKvvKv=vvKvvKKvvvvvvKvvvvK=vv=vvvvKKvvKvvvvKKKvvKvvvvKvvKvvKv=vvvv=vv=vvvvvvvvvvv==vvvvvvvvvvv=vvvvvvvv=vvvvvvvvvvv=vvv=vvvvvvKvvv=vvvvvvv=v==vvvvvvvvvvvvKvvvvvvvKv=vvvvvvvvvvvvvvv=vvvvvvvvKvvv=vvvvvvvvv=vvv=vvvvvvvvvvvvvvKvvvvvvv=vvvKvvvvvvKvv=vvvvvvvvvvKvvv=vvvvvvvvKvvv=vvvvvvvvvvvvvvvvvvvvv=v=vvvvvvvvv=vvv=vvvvvvKvvv=vvvvvvvvvvv=vvv=vv=vvvvvvvv=vvv=vvvvKvvKvvvvvvvvKvvvvvvvvv=vvv=vvvvvv=vvvvvvvvv=KKvvvvvvvvvv=v=vvvv=vKvvvvvvvvv=vvvvvvvvvv=vvvvvvvvvvvFFFFF FFFFFFFFFʀd VMS.BCK [V9.DOCS]IPD255.PS;2aF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF 000000000000000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00000000 FFFFFFFF00FFFFFFFF00000000FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 000000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF#( VMS.BCK [V9.DOCS]IPD255.PS;2upFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00000000FF FFFFFFFF00FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF 00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFF FFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFF00FFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFF FFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFFFFFF00FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFF"e3 VMS.BCK [V9.DOCS]IPD255.PS;2dF000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FF FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF FFFFFFFF00FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFF00FFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00FF FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFPB VMS.BCK [V9.DOCS]IPD255.PS;21FoFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF FFFFFFFF00FFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFo5 VMS.BCK [V9.DOCS]IPD255.PS;21cFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF& VMS.BCK [V9.DOCS]IPD255.PS;2hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFpQz VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; VMS.BCK [V9.DOCS]IPD255.PS;2>FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFX VMS.BCK [V9.DOCS]IPD255.PS;2݄FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 4 4 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3124 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` /AA 220 220 w1` -825 -1314 (Output appears at the cursor location, which is defined by ) 8.163422 0 1272 10 58 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 447 -1314 (row) 0 0 74 0 2 A1` /AA 220 220 w1` 521 -1314 ( and ) 8.163071 0 117 2 4 A1` /AB 220 220 w1` 638 -1314 (col ) 9.071838 0 80 1 3 A1` /AA 220 220 w1` 719 -1314 (attributes or) 8.163071 0 256 1 12 A1` -975 -1260 (equivalently by) -1.554703 0 314 1 14 A1` /AB 220 220 w1` -661 -1260 ( x) -1.72789 0 34 1 1 A1` /AA 220 220 w1` -627 -1260 ( and) -1.554703 0 87 1 3 A1` /AB 220 220 w1` -540 -1260 ( y ) -1.727692 0 45 2 2 A1` /AA 220 220 w1` -495 -1260 (attributes. The cursor is moved by ) -1.554642 0 695 6 34 A1` /AB 220 220 w1` 200 -1260 (GotoRC\(row, col\)) -1.72789 0 352 1 15 A1` /AA 220 220 w1` 552 -1260 ( or) -1.554703 0 53 1 2 A1` /AB 220 220 w1` 605 -1260 ( GotoXY\(x, y\)) -1.727692 0 272 2 12 A1` /AA 220 220 w1` 877 -1260 (. The) -1.554703 0 98 1 4 A1` -975 -1206 (visibility of the cursor is controlled by the) -0.015091 0 844 7 44 A1` /AB 220 220 w1` -131 -1206 ( cursor) -0.016769 0 140 1 6 A1` /AA 220 220 w1` 9 -1206 ( attribute.) -0.015091 0 197 1 10 A1` -825 -1126 (Characters read by) -1.714752 0 379 2 17 A1` /AB 220 220 w1` -446 -1126 ( WRead\(\)) -1.905548 0 194 1 7 A1` /AA 220 220 w1` -252 -1126 ( or) -1.714752 0 53 1 2 A1` /AB 220 220 w1` -199 -1126 ( WReads\(\)) -1.905548 0 217 1 8 A1` /AA 220 220 w1` 18 -1126 ( are echoed to the screen at the cursor location if) -1.714828 0 957 10 50 A1` -975 -1072 (the ) -3.534637 0 71 1 3 A1` /AB 220 220 w1` -904 -1072 (echo) 0 0 99 0 3 A1` /AA 220 220 w1` -804 -1072 ( attribute is set. When a character is written or echoed using the cursor, the area behind the) -3.534515 0 1779 17 93 A1` -975 -1018 (character is filled with the background color.) -0.002502 0 908 6 45 A1` /AB 220 220 w1` -825 -939 (DrawString\(x, y, s\)) 9.462891 0 396 2 18 A1` /AA 220 220 w1` -429 -939 ( outputs text string) 8.515228 0 411 3 19 A1` /AB 220 220 w1` -19 -939 ( s) 9.462891 0 45 1 1 A1` /AA 220 220IGAb VMS.BCK [V9.DOCS]IPD255.PS;2@ w1` 26 -939 ( without affecting the cursor or drawing the) 8.515228 0 949 7 43 A1` -975 -885 (background. The first character appears at location \() 0.004303 0 1056 7 52 A1` /AB 220 220 w1` 81 -885 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 104 -885 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 115 -885 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 138 -885 (\).) 0 0 27 0 1 A1` /AB 220 220 w1` -825 -806 (TextWidth\(s\) ) -0.000641 0 272 1 12 A1` /AA 220 220 w1` -552 -806 (returns the width of a string, measured in pixels.) -0.00058 0 987 8 49 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -676 (Fonts) 0 0.018921 147 0 4 A1` /AB 220 220 w1` -825 -572 (Font\(s\)) 0 0 145 0 6 A1` /AA 220 220 w1` -680 -572 ( sets the text font. An Icon font specification is a comma-separated string giving the) -2.118744 0 1655 14 85 A1` -975 -518 (family name, style characteristics, and size \(a height measured in pixels\). Examples are) 11.458054 0.663925 1950 12 87 A1` /AB 220 220 w1` -975 -464 ("Helvetica,bold,18") 0 0 384 0 18 A1` /AA 220 220 w1` -591 -464 ( and ) -0.006516 0 100 2 4 A1` /AB 220 220 w1` -490 -464 ("Times,bold,italic,14) 0 0 409 0 20 A1` /AA 220 220 w1` -82 -464 (".) 0 0 29 0 1 A1` -825 -385 (Font names and characteristics are system-dependent. However, four portable family) 8.077698 0 1800 9 81 A1` -975 -331 (names are always available:) 0.019669 0 565 3 26 A1` /AB 220 220 w1` -675 -264 (mono) 0 -0.022385 115 0 3 A1` /AA 220 220 w1` -375 -264 (a monospaced, sans-serif font) -0.008408 0 600 3 28 A1` /AB 220 220 w1` -675 -198 (typewriter) 0 0.009628 199 0 9 A1` /AA 220 220 w1` -375 -198 (a monospaced, serif font) -0.022781 0 496 3 23 A1` /AB 220 220 w1` -675 -132 (sans) 0 0.02034 97 0 3 A1` /AA 220 220 w1` -375 -132 (a proportionally spaced, sans-serif font) -0.024109 0 790 4 39 A1` /AB 220 220 w1` -675 -66 (serif) 0 0.020035 87 0 4 A1` /AA 220 220 w1` -375 -66 (a proportionally spaced, serif font) 0.017197 0 687 4 34 A1` -975 14 (The actual fonts vary from one system to another; some systems may not be able to supply fonts with) -5.589661 0 1950 18 98 A1` -975 68 (all the correct attributes.) 0.016006 0 491 3 26 A1` -825 147 (Font specifications are case-insensitive. As an alternative to an Icon font specification, a) 2.977432 0 1800 12 91 A1` -975 201 (system-dependent font name can be supplied.) -0.010178 0 933 5 42 A1` -825 280 (Information about a font can be obtained from the following attributes:) -0.008865 0 1438 10 70 A1` /AB 220 220 w1` -675 346 (fheight) 0 0.016068 138 0 6 A1` /AA 220 220 w1` -375 346 (font height) 0.047195 0 222 1 10 A1` /AB 220 220 w1` -675 413 (fwidth) 0 0.012207 120 0 5 A1` /AA 220 220 w1` -375 413 (font width) 0.030518 0 215 1 9 A1` /AB 220 220 w1` -675 479 (ascent) 0 -0.007645 135 0 5 A1` /AA 220 220 w1` -375 479 (extent of the font above the baseline) -0.001556 0 728 6 36 A1` /AB 220 220 w1` -675 545 (descent) 0 0.016068 161 0 6 A1` /AA 220 220 w1` -375 545 (extent of the font below the baseline) -0.008957 0 731 6 36 A1` /AB 220 220 w1` -675 611 (leading) 0 0.016617 148 0 6 A1` /AA 220 220 w1` -375 611 (distance between baselines of successive text lines) 0.002106 0 1012 6 50 A1` -975 691 (Only the) 0.041748 0 177 1 7 A1` /AB 220 220 w1` -798 691 ( leading) 0.046402 0 161 1 7 A1` /AA 220 220 w1` -638 691 ( attribute can be altered.) 0.041748 0 490 4 25 A1` /AC 220 220 w1` -975 795 (An Example) -0.063889 0 262 1 9 A1` /AA 220 220 w1` -825 899 (The following example illustrates several aspects of text output. ) -0.171204 0 1300 9 65 A1` 475 899 (Note the use of newlines) -0.171204 0 500 4 23 A1` -975 953 (and leading spaces in strings in addition ) 0.002808 0 831 7 41 A1` -144 953 (to more explicit positioning.) 0.002808 0 571 3 28 A1` O1` $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 5 5 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3125 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 200 200 w1` T g` 0 0 0 1 (Black) 1 T d` -900 -1317 (WOpen\("size=400,300"\) | stop\("can\325t open window"\)) -0.023392 0 960 4 48 A1` -900 -1267 (Font\("typewriter,bold,18"\)) 0 -0.000031 470 0 25 A1` -900 -1217 (WWrite\("line 1"\)) 0.064285 0 294 1 15 A1` -900 -1167 (WWrite\("line 2"\)) 0.064285 0 294 1 15 A1` -900 -1117 (GotoRC\(5, 3\)) -0.053711 0 248 1 11 A1` -900 -1067 (WWrite\("line 5"\)) 0.064285 0 294 1 15 A1` -900 -1017 (WWrite\("line 6"\)) 0.064285 0 294 1 15 A1` -900 -967 (WWrite\("\\n ", &lcase, &ascii\)) 0.001083 0 523 3 28 A1` -900 -917 (Font\("Helvetica,18"\)) 0 0.000259 370 0 19 A1` -900 -867 (WWrite\("\\n ", &lcase, &ascii\)) 0.001083 0 523 3 28 A1` -900 -817 (DrawSegment\(110, 50, 130, 50, 120, 40, 120, 60\)) 0.00209 0 917 7 46 A1` -900 -767 (DrawString\(120, 50, "drawn at \(120,50\)"\)) -0.018311 0 752 4 39 A1` -900 -717 (WDone\(\)) 0 -0.003387 167 0 6 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -589 (Colors) 0 -0.01741 171 0 5 A1` /AB 220 220 w1` -825 -485 (Fg\(s\) ) 0.020096 0 120 1 5 A1` /AA 220 220 w1` -705 -485 (and ) 0.018082 0 89 1 3 A1` /AB 220 220 w1` -616 -485 (Bg\(s\) ) 0.020096 0 122 1 5 A1` /AA 220 220 w1` -494 -485 (set the foreground and background color respectively.) 0.018082 0 1100 6 52 A1` -825 -406 (Colors are named by English phrases using a system loosely based on [5]. Examples are) 2.003799 0 1800 14 84 A1` /AB 220 220 w1` -975 -351 ("brown") 0 0 157 0 6 A1` /AA 220 220 w1` -818 -351 (, ) -0.003632 0 23 1 1 A1` /AB 220 220 w1` -795 -351 ("yellowish green") -0.004028 0 349 1 16 A1` /AA 220 220 w1` -446 -351 (, and ) -0.003632 0 112 2 5 A1` /AB 220 220 w1` -334 -351 ("moderate purple\320gray") -0.004028 0 481 1 21 A1` /AA 220 220 w1` 147 -351 (. The syntax of a color name is) -0.003632 0 611 7 30 A1` P1` $1 tsi^ 239 -97 109 549 -109 -452 4.167364 -4.030928 -675 122 F kHu$ i2` %%BeginDocument: %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 5.0 %%For: (Ralph E. Griswold) (Computer Science) %%Title: (cns_new.eps) %%CreationDate: (1/25/94) (1:57 PM) %%BoundingBox: 109 452 348 549 %%HiResBoundingBox: 109 452.75 347.1641 549 %%DocumentProcessColors: Black %%DocumentFonts: Helvetica %%+ Palatino-Italic %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 %%+ procset Adobe_typography_AI5 1.0 0 %%+ procset Adobe_IllustratorA_AI5 1.0 0 %AI5_FileFormat 1.1 %AI3_ColorUsage: Black&White %AI3_IncludePlacedImages %AI3_TemplateBox: 306 396 306 396 %AI3_TileBox: 31 31 583 761 %AI3_DocumentPreview: Macintosh_Pic %AI5_ArtSize: 612 792 %AI5_RulerUnits: 2 %AI5_ArtFlags: 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI5_OpenToView: -102 684 1 826 581 18 0 1 3 40 %AI5_OpenViewLayers: 7 %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.0 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 21 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def yVmf1wvfkuf1d2.)x2f' #SD/(!fy.#f%345)4_B"4l1/(jf2.#of8wst?~fvf fq>qwmkfk~~sfno'%[4)3(TdeUfVd452f%.'BQ%2#4f'}6#'4C'2f*)%l2/)cfnofvhvvru=ufv-wvspfqfstfwmKiOfttvfttv-1w&~wfk~~sfnH-v-tufvfvfw&KiLft?vftt1w&Kw=rfk5~sfnjofvfvfw2/"2.n5o-ofk=hvvvprwf=ftq?fwfwtfqPKi::tt=fttvf1w&Kks8tfk5vpfnBUDE^Cfy.#f1/"2.f) f'f5y4Y(!]#'534h"f/cf6/>#*5hofKUvvs~fvf~qf~fr4fKbuf25/ibu-$]DKcc(S\xTUC)34%#|f )(2-xU*{#2/%Q)\TK"Lfi:oo#*0#y/%'kr_*"ffiE#*0h2/%'k)*"f><&Ki)rf$+2=ft;vft;vf1w&Kf!&K=[r\'%of[df"&Kkqsfkp:pfnK)(25ofvfvhv<~ty- )(2hq(f%b(f b(2C@U%/ /%'y/)(f/5fQ%)++'k~#6''2#"C24d(!fj/0/(!D.# w<5rfvfwpssf<~8fw&= Nfs<~fn '+/\If('+#j-52?*U%.'4'%y#4/~2/%5jf'("f5d<#fQn'f.#/!.2f+#l534h"f/(f6/>h*5$hf>'+6*#ClBUo-wwhrs~vsrfvh;pu?sfwfwtf~:fwmKifttvfttv-1w&Kkqsfkrp9fndE#*0#2/%'j$)a"jw5fvfvfu~rfv-w~fLw&Kiftt? P= wfVrp[Q("fofkvhv=psw;fvfwftfr:w&K"fttvfttvGJPKkrvfkrprfndd+#5!$)*"j/DQa/%jfwmKifttv-ttv-1w&Kkuqsf>nlf64)6)42/)('a*?f~6'%#Tf5'(5 5#4d f )(2ofkvhv?rwvfvfqvfr-ufLw&Kifttvf?tvfzw&=sfkppf%5#4d ofvfvhvtvv>sf~:fvfrqPq-ttvfttvf1w&K uqs-kppfQ@B_6b42/b('**?f56QS#"!f5#4/ f )(2vh=wqw4qfvfqf9fur-w&=qsf-Sd.U['%23'*f )(Df0'?f 4_]f)cU5t52#]2)f'()2.#46C)+#f5?52U]~f+'tf()2f$#f'$*h-2)f5366*?f )(25-1/2eofkshs~;pwf=fwsvfw~f -q&kqsfp~fn'**-2.#-%)44US2f'22d$32#5hofvhvwpvv;fvfrwfuftpfLw&K ~tsfwrqfn)cD5}#%/ /%'2/)(5[QBU-%'5#k/(5#(5dy/0#hf5Q^l\D#('2/0#f2)f'(-yS_f )(D56#%/k/%Q/)(jf'ofthqLutfvfw~vvfwtf<-w&Kkqsftvrpf% .#/!.2ofvf=hvw;vp~fwu~fvfpfLw&K"fttvft?vf1<&Kkuqsfur%V_(yf.#/!.2ofvhv9qw8fvftfwfwv-w&ifttvfttvfzw&Kkpqsfrwuf% 1/i2.ofvfvhvwt?vqfqsf9wufnV_^D-GY"y.ofvhvuvsw~f=ftw8 fw&KiOftt=fttvf1PKkpq8frqfn'5%U^2ofv-kvh=vqsfwu8fvf8fwP=if=[t[1w&KkuqsfrBfn#u2#(2f)VyXUfk)(2Q$)0#f2.#Rl5#*/(#ofkv=wss;fvfqt~fpfup-Lw&Kifttvfttvfzw&K pqsfsrsf%"#5n#(2ofvfvh;~-wpwfvfpfw&K"f?tvftf1w&K >qsfsrsfn#>2#(2fb f2.#f )(2f$h*)1-2.#f$'5#*/(hofKhvv~sqfvfqu2fa/(#~ofvh=v-wvwtfpfsvqw&Kk4:sfpfn^\?-2.#$fvhvrwqr~fvfJqfwfqfw&Kif?Itvf1w&Kk:~fM wfnf*#'"Y^jf#=rprvtfvfw-wfq-w&Kiq?f?tvfG&Kkpu~fpw-'224/$32#fn'(fo#f'*2#4#"ho-vhv9wqr~fvfrvfr-tsfLw&Kift?vft?vf1w&Kkq: f%(f>'+6*#of vhv;u~~ftptfl+6*#f/**3524DUC-5#0#4'*f'56h%25-) f2UHDbED6x2hfofkvhwqwt=[wuvv fpsf<&Kr:sf n)2#fy.#f35#f_Vf(#1*/c#5o-kvqwtv9fvf8vrftufPVs-sufn'("\#l"/(jf56'%#Cd^5y4Y^!5f/(f'""/DYb(fofvhvvv~-vf~>wfqfrwfw&K 6a/%/2f6)5d2/)c/(!hofvhv5f=fsqwfuft~fwmK wmKbrfDC/K5.bz6'!#Kbvf5#(/Kc('!#4'/*#4K(c'j#4)%#55)*b45|-f*'%-Kccl!#x52)]s_\_BC -cc'!#|l!U`B_SUCC)*b45|-n'2#^ToKcc`!#x52)+)*)BC|f%'2#("oKcc#!/(lj##236fK,&K(c(i'!##23@=_f$`2Kvhvsfkvh=sf5n'*#K-?vf24'(5*'DUKvfv[BQ^5\'2#K$5hKr#~frh~fwf@C)Kuvvf(&Kibwf$]DSK)&w&Kf wmK-25/KibwfR]=c(D(%*3"#bU5)3%#|- )^D`Q\lDY^)]Q^=qqL$ooo`Q\QDY^)k)_]Qd`Q\QDY^b_Q^HP=RDn=Tqq?GJP=dWP=vfKfwSr\QS[dT=Bqfl'NlM -qPvP=~P=v}JP=IDCYn=R]n=((%*3"##C_BSUAV_^2f#0#DSQ=ifi:$oox\FUDYSQd3U\F2/SQHP=[R]DKirKGKWP=K  :P=V Lv^DlDI@U142#BWR_\TlKUuwK-qP= JggBYDUlY^U[lIKrfwq= Kgg 2#nd*/(#/lo-vB[qw&Kkv[Jw_D)slWl[=qJP=Bgg Y2#Qnd*/(#flRKsfvfIrJqw&Kk vfkwK<BYDUlY\Y^loofvI wsqJP=B %gBDUlll^[`*S~U'5SYYlRKv~uf8eD/T O (vQ0?-~=h6SCegg42[9`Pm-QV 05QW01xW0ZTC Ar5Y U 4EJ-7E[<>r034lCk7IAXr 02>1h1Y5ND,A6O977#k+#[MQAO/2i9p ?_P]T_JOLU=W@%LfKdU@%o_XCZW7|WR=q  i@ (B\ABCgv BZv@=o@Lm"bmR=yfY3w@tBM9 fmB# fUD^EFQI EQR QT"+EaR\e3^]SAF[_N[eDXI^\PFA KKYL  K*P-ybau$KrKd2%#TrgTMdj5f8ZrF+9 3ZOE\SWA_YN2vyW^VTTC <:\mmommxGyDWXb{mpPL^]C^Hb]7" q-N/&PS%=#6#oU n;L[4ECPUCI^'Kn;B fieTX?)r@9@@v  rvirDa@3yS@U\S]EItwGAX@YP@R UK _QQBYCTT\]OGE-H@oNDQd+^KimWtl[CTERC QA*fL C r!<LmasG{V SUN XHhuI K`pQ&"nadv[WFQ&Vm`{jwHwv17 MmrIeda@LU!O8pE@zWU9QDOT\V RIGR@LQ"R HB$lqttOfv [WX<  pHV=" TF@/4GFUSYZ4eTTU_@ZCA]9XEY AQBWT^WYXRNWTP_SFqPvwquufajtP-8P-}R;3W1_qoRB8mv$# V   L`;eqwvsN=qxY ]fgE@K^zUB<[P-%J0LGD_jZAZU]T -pb 82X%8 orwbcf[zEDUTTBCqDG "O=H4,/\|;"`ew mO:9B`APYdo'F26O ov'q_MDhJdCD\UU %}sEE[GhVWh3?= hz_!Dmv]L4571;O{EA8,`Y]CP?NqipQi_C^#S"F*8"Q{_QGWA=6%RyTTLLETpY.ddbS WJjCo4t|LgtYLWsXX aQ-QyrN-sy(>nDECEa@SVAE`>rJ S0p h2aG:$WT2Zg$ERGRV@-I.*T+;E3GIB9sqoaK qLPSa@= N<^v{w GLTVZ)7,XN <r"tn.xB #Y!65lYuK}xURbIUZtBgY$xl~HX] ~bM;g'5qata>rIB]]^bIHF|VEZS[TCLG0(M]}v+[;' GN3QOy@Wb I PCAHqz`w#D JE+Vo6,.;E U' @Dt}grz"y5 AKE zBYFGACTTRgifgRRJZO/Uh{ >]eE]C L sL%ElsH}( G2>-QM&RCj]QCG*-]buL8c_P64QG^TEirI-hzB:DS-~AAAE@pN+! GD_ rH/ {EJKF@W\[ 0 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Red & Yellow) (Red & Yellow) 0 2 Bd [ 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < FFFFFEFEFDFDFDFCFCFBFBFBFAFAF9F9F9F8F8F7F7F7F6F6F5F5F5F4F4F3F3F3F2F2F1F1F1F0F0EF EFEFEEEEEDEDEDECECEBEBEBEAEAE9E9E9E8E8E7E7E7E6E6E5E5E5E4E4E3E3E3E2E2E1E1E1E0E0DF DFDFDEDEDDDDDDDCDCDBDBDBDADAD9D9D9D8D8D7D7D7D6D6D5D5D5D4D4D3D3D3D2D2D1D1D1D0D0CF CFCFCECECDCDCDCCCCCBCBCBCACAC9C9C9C8C8C7C7C7C6C6C5C5C5C4C4C3C3C3C2C2C1C1C1C0C0BF BFBFBEBEBDBDBDBCBCBBBBBBBABAB9B9B9B8B8B7B7B7B6B6B5B5B5B4B4B3B3B3B2B2B1B1B1B0B0AF AFAFAEAEADADADACACABABABAAAAA9A9A9A8A8A7A7A7A6A6A5A5A5A4A4A3A3A3A2A2A1A1A1A0A09F 9F9F9E9E9D9D9D9C9C9B9B9B9A9A9999 > 0 1 %_Br [ 0 1 0.6 0 1 50 100 %_Bs 0 0 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Blue Radial) (Yellow & Blue Radial) 1 2 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D 5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF > < ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B 5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B 0A090908070706050504030302010100 > 0 1 %_Br [ 0 0.08 0.67 0 1 50 14 %_Bs 1 1 0 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_End_NonPrinting-- %AI5_BeginPalette 0 0 Pb Pn Pc 1 g Pc 0 g Pc 0 0 0 0 k Pc 0.75 g Pc 0.5 g Pc 0.25 g Pc 0 g Pc Bb 2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg 0 BB Pc 0.25 0 0 0 k Pc 0.5 0 0 0 k Pc 0.75 0 0 0 k Pc 1 0 0 0 k Pc 0.25 0.25 0 0 k Pc 0.5 0.5 0 0 k Pc 0.75 0.75 0 0 k Pc 1 1 0 0 k Pc Bb 2 (Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg 0 BB Pc 0 0.25 0 0 k Pc 0 0.5 0 0 k Pc 0 0.75 0 0 k Pc 0 1 0 0 k Pc 0 0.25 0.25 0 k Pc 0 0.5 0.5 0 k Pc 0 0.75 0.75 0 k Pc 0 1 1A+Y VMS.BCK [V9.DOCS]IPD255.PS;21$ 0 k Pc Bb 0 0 0 0 Bh 2 (Yellow & Blue Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg 0 BB Pc 0 0 0.25 0 k Pc 0 0 0.5 0 k Pc 0 0 0.75 0 k Pc 0 0 1 0 k Pc 0.25 0 0.25 0 k Pc 0.5 0 0.5 0 k Pc 0.75 0 0.75 0 k Pc 1 0 1 0 k Pc (Yellow Stripe) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 0.25 0.125 0 0 k Pc 0.5 0.25 0 0 k Pc 0.75 0.375 0 0 k Pc 1 0.5 0 0 k Pc 0.125 0.25 0 0 k Pc 0.25 0.5 0 0 k Pc 0.375 0.75 0 0 k Pc 0.5 1 0 0 k Pc 0 0 0 0 k Pc 0 0.25 0.125 0 k Pc 0 0.5 0.25 0 k Pc 0 0.75 0.375 0 k Pc 0 1 0.5 0 k Pc 0 0.125 0.25 0 k Pc 0 0.25 0.5 0 k Pc 0 0.375 0.75 0 k Pc 0 0.5 1 0 k Pc 0 0 0 0 k Pc 0.125 0 0.25 0 k Pc 0.25 0 0.5 0 k Pc 0.375 0 0.75 0 k Pc 0.5 0 1 0 k Pc 0.25 0 0.125 0 k Pc 0.5 0 0.25 0 k Pc 0.75 0 0.375 0 k Pc 1 0 0.5 0 k Pc 0 0 0 0 k Pc 0.25 0.125 0.125 0 k Pc 0.5 0.25 0.25 0 k Pc 0.75 0.375 0.375 0 k Pc 1 0.5 0.5 0 k Pc 0.25 0.25 0.125 0 k Pc 0.5 0.5 0.25 0 k Pc 0.75 0.75 0.375 0 k Pc 1 1 0.5 0 k Pc 0 0 0 0 k Pc 0.125 0.25 0.125 0 k Pc 0.25 0.5 0.25 0 k Pc 0.375 0.75 0.375 0 k Pc 0.5 1 0.5 0 k Pc 0.125 0.25 0.25 0 k Pc 0.25 0.5 0.5 0 k Pc 0.375 0.75 0.75 0 k Pc 0.5 1 1 0 k Pc 0 0 0 0 k Pc 0.125 0.125 0.25 0 k Pc 0.25 0.25 0.5 0 k Pc 0.375 0.375 0.75 0 k Pc 0.5 0.5 1 0 k Pc 0.25 0.125 0.25 0 k Pc 0.5 0.25 0.5 0 k Pc 0.75 0.375 0.75 0 k Pc 1 0.5 1 0 k Pc PB %AI5_EndPalette %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 0 79 128 255 Lb (Layer 1) Ln 0 A 1 To 1 0 0 1 310 511.875 0 Tp 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 346 499.375 m 346 511.875 L 310 511.875 L 310 499.375 L 346 499.375 L n TP 10.0535 -9.75 Td 0 Tr 0 O 0 g /_Palatino-Italic 11 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 0 2 2 3 Th 0 Tq 0 0 Tl 0 Tc 0 Tw (hue) Tx (\r) TX TO 1 To 1 0 0 1 119 533.875 0 Tp 170 456.875 m 170 533.875 L 119 533.875 L 119 456.875 L 170 456.875 L n TP 3.5 -9.75 Td 0 Tr 0 O 0 g /_Helvetica 11 Tf (very light) Tx (\r) TX 11.9158 -13 Td (light) Tx (\r) TX -9.4692 -13 Td (medium) Tx (\r) TX 8.8583 -13 Td (dark) Tx (\r) TX -11.9158 -13 Td (very dark) Tx (\r) TX TO u 0 R 0 G 121.5 546 m 112 546 l 112 456 l 122 456 l S U u 167.25 455.75 m 176.75 455.75 l 176.75 545.75 l 166.75 545.75 l S U u 1 To 1 0 0 1 192.5 527.875 0 Tp 243.5 465.875 m 243.5 527.875 L 192.5 527.875 L 192.5 465.875 L 243.5 465.875 L n TP 12.6644 -9.75 Td 0 Tr 0 O 0 g (weak) Tx (\r) TX -10.3904 -13 Td (moderate) Tx (\r) TX 7.9452 -13 Td (strong) Tx (\r) TX 4.2821 -13 Td (vivid) Tx (\r) TX TO u u 0 R 0 G 198.25 532.75 m 188.75 532.75 l 188.75 472.25 l 198.75 472.25 l S U U u u 238.25 472 m 247.75 472 l 247.75 532.5 l 237.75 532.5 l S U U U u 1 To 1 0 0 1 257.5 511.875 0 Tp 311 497.375 m 311 511.875 L 257.5 511.875 L 257.5 497.375 L 311 497.375 L n TP 8.7192 -9.75 Td 0 Tr 0 O 0 g /_Palatino-Italic 11 Tf (hue) Tx /_Helvetica 11 Tf ([ish]) Tx (\r) TX TO u 0 R 0 G 270.75 514.5 m 261.25 514.5 l 261.25 495 l 271.25 495 l S U u 299.25 495 m 308.75 495 l 308.75 514.5 l 298.75 514.5 l S U U LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_IllustratorA_AI5 /terminate get exec Adobe_typography_AI5 /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF %%EndDocument V1` /$1 bmt^ Q1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 223 (where choices enclosed in brackets are optional and ) -3.669983 0 1031 8 51 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Palatino-Italic /AB /|______Palatino-Italic T /Palatino-Italic x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 56 223 (hue) 0 0 66 0 2 A1` /AA 220 220 w1` 122 223 ( can be one of ) -3.669983 0 270 5 14 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 392 223 (black) 0 0 107 0 4 A1` /AA 220 220 w1` 499 223 (, ) -3.669983 0 19 1 1 A1` /AC 220 220 w1` 519 223 (gray) 0 0 89 0 3 A1` /AA 220 220 w1` 608 223 (, ) -3.669983 0 19 1 1 A1` /AC 220 220 w1` 627 223 (white) 0 0 107 0 4 A1` /AA 220 220 w1` 734 223 (, ) -3.669983 0 19 1 1 A1` /AC 220 220 w1` 753 223 (pink) 0 0 84 0 3 A1` /AA 220 220 w1` 837 223 (, ) -3.669983 0 19 1 1 A1` /AC 220 220 w1` 856 223 (violet) 0 0 107 0 5 A1` /AA 220 220 w1` 964 223 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -975 277 (brown) 0 0 125 0 4 A1` /AA 220 220 w1` -850 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` -819 277 (red) 0 0 66 0 2 A1` /AA 220 220 w1` -753 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` -722 277 (orange) 0 0 143 0 5 A1` /AA 220 220 w1` -580 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` -549 277 (yellow) 0 0 127 0 5 A1` /AA 220 220 w1` -422 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` -391 277 (green) 0 0 117 0 4 A1` /AA 220 220 w1` -274 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` -243 277 (cyan) 0 0 97 0 3 A1` /AA 220 220 w1` -146 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` -115 277 (blue) 0 0 87 0 3 A1` /AA 220 220 w1` -29 277 (, ) 7.821365 0 31 1 1 A1` /AC 220 220 w1` 2 277 (purple) 0 0 127 0 5 A1` /AA 220 220 w1` 129 277 (, or ) 7.821365 0 93 2 4 A1` /AC 220 220 w1` 222 277 (magenta) 0 0 178 0 6 A1` /AA 220 220 w1` 401 277 (. A single hyphen or space) 7.821701 0 574 5 25 A1` -975 331 (separates each word from its neighbor. ) -0.013489 0 800 6 38 A1` /AC 220 220 w1` -175 331 (pale) 0 0 87 0 3 A1` /AA 220 220 w1` -89 331 ( is a synonym for ) -0.013489 0 361 5 17 A1` /AC 220 220 w1` 272 331 (very light) -0.014984 0 183 1 9 A1` /AA 220 220 w1` 455 331 (, and ) -0.013489 0 112 2 5 A1` /AC 220 220 w1` 567 331 (deep) 0 0 102 0 3 A1` /AA 220 220 w1` 669 331 ( for ) -0.013489 0 81 2 4 A1` /AC 220 220 w1` 750 331 (very dark) -0.014984 0 189 1 8 A1` /AA 220 220 w1` 939 331 (.) 0 0 11 0 0 A1` -825 410 ( Conventional English spelling is used. When adding ish to a hue ending in ) 4.110565 0 1595 14 74 A1` /AC 220 220 w1` 770 410 (e) 0 0 25 0 0 A1` /AA 220 220 w1` 795 410 (, the ) 4.110489 0 106 2 5 A1` /AC 220 220 w1` 901 410 (e) 0 0 25 0 0 A1` /AA 220 220 w1` 927 410 ( is) 4.110489 0 48 1 2 A1` -975 464 (dropped. For example, ) 0.00824 0 474 3 21 A1` /AC 220 220 w1` -501 464 (purple) 0 0 127 0 5 A1` /AA 220 220 w1` -374 464 ( becomes ) 0.00824 0 197 2 8 A1` /AC 220 220 w1` -176 464 (purplish) 0 0 160 0 7 A1` /AA 220 220 w1` -16 464 (. The ) 0.00824 0 111 2 5 A1` /AC 220 220 w1` 95 464 (ish) 0 0 59 0 2 A1` /AA 220 220 w1` 154 464 ( form of ) 0.00824 0 174 3 8 A1` /AC 220 220 w1` 327 464 (red) 0 0 66 0 2 A1` /AA 220 220 w1` 394 464 ( is ) 0.00824 0 56 2 3 A1` /AC 220 220 w1` 449 464 (reddish) 0 0 150 0 6 A1` /AA 220 220 w1` 600 464 (.) 0 0 11 0 0 A1` -825 544 (When two hues are supplied and the first hue has no ) -3.165283 0 1047 11 51 A1` /AC 220 220 w1` 222 544 (ish) 0 0 59 0 2 A1` /AA 220 220 w1` 281 544 ( suffix, the resulting hue is halfway) -3.165207 0 694 6 36 A1` -975 598 (between the two named hues. When a hue with an ) 0.222656 0 1040 10 46 A1` /AC 220 220 w1` 65 598 (ish) 0 0 59 0 2 A1` /AA 220 220 w1` 124 598 ( suffix precedes a hue, the resulting hue is) 0.222656 0 851 8 43 A1` -975 652 (three-fourths of the way from the ) -2.426727 0 673 6 33 A1` /AC 220 220 w1` -302 652 (ish) 0 0 59 0 2 A1` /AA 220 220 w1` -243 652 ( hue to the main hue. The default lightness is ) -2.426773 0 896 10 46 A1` /AC 220 220 w1` 653 652 (medium) 0 0 163 0 5 A1` /AA 220 220 w1` 816 652 ( and the) -2.426834 0 159 2 7 A1` -975 706 (default saturation is ) -0.023865 0 417 3 21 A1` /AC 220 220 w1` -558 706 (vivid) 0 0 92 0 4 A1` /AA 220 220 w1` -466 706 (.) 0 0 11 0 0 A1` -825 785 (Colors can also be specified in terms of red, green, and blue brightness components. The) 0.942383 0 1800 14 87 A1` -975 839 (decimal form uses three comma-sF VMS.BCK [V9.DOCS]IPD255.PS;213eparated values ranging from 0 to 65535, as in ) -1.717865 0 1600 13 77 A1` /AC 220 220 w1` 625 839 ("12000,0,65535") 0 0 338 0 14 A1` /AA 220 220 w1` 964 839 (.) 0 0 11 0 0 A1` -975 894 (The hexadecimal forms are ") 0.329758 0 578 4 26 A1` /AC 220 220 w1` -397 894 (#) 0 0 25 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -372 894 (rgb) 0 0 66 0 2 A1` /AC 220 220 w1` -306 894 (") 0 0 16 0 0 A1` /AA 220 220 w1` -289 894 (, ") 0.329773 0 40 1 2 A1` /AC 220 220 w1` -249 894 (#) 0 0 25 0 0 A1` /AD 220 220 w1` -224 894 (rrggbb) 0 0 132 0 5 A1` /AC 220 220 w1` -91 894 (") 0 0 16 0 0 A1` /AA 220 220 w1` -75 894 (, ) 0.329773 0 23 1 1 A1` /AC 220 220 w1` -52 894 ("#) 0 0 42 0 1 A1` /AD 220 220 w1` -10 894 (rrrgggbbb) 0 0 199 0 8 A1` /AC 220 220 w1` 189 894 (") 0 0 16 0 0 A1` /AA 220 220 w1` 205 894 (, and ) 0.329773 0 113 2 5 A1` /AC 220 220 w1` 318 894 ("#) 0 0 42 0 1 A1` /AD 220 220 w1` 360 894 (rrrrggggbbbb) 0 0 265 0 11 A1` /AC 220 220 w1` 625 894 (") 0 0 16 0 0 A1` /AA 220 220 w1` 641 894 (, with the longer) 0.329758 0 334 3 16 A1` -975 948 (forms providing greater precision.) -0.02536 0 697 3 33 A1` -825 1027 (Color specifications not recognized by Icon are passed to the graphics system for interpre-) -1.785934 0 1800 13 90 A1` -975 1081 (tation, allowing the use of system-dependent names.) 0.003189 0 1067 6 50 A1` /AC 220 220 w1` -825 1160 (ColorValue\(s\)) 0 0 280 0 12 A1` /AA 220 220 w1` -545 1160 ( translates a color specification into decimal form.) 0.014297 0 1005 7 51 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:GIPD3.tiff %ALDImageDimensions: 402 302 %ALDImageCropRect: 0 0 402 302 %ALDImageCropFixed: 0.00000 0.00000 402.00000 302.00000 %ALDImagePosition: 347.050 575.050 347.050 720.000 540.000 720.000 540.000 575.050 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599502 0.000000 0.000000 9.599338 821.000000 -6480.000000] concat false 402 302 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 246137 Hex Bytes isCL^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFF0000000000FFFFFFFFFF000000FF00000000FFFFFFFFFFFF0000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFF0000000000FFFFFFFFFF000000000000000000FFFFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFF0000FFFF000000FFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF: VMS.BCK [V9.DOCS]IPD255.PS;210BFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000000000FFFFFF0000000000000000FFFF00000000FFFF00000000FFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000000000FFFFFF0000000000000000FFFF00000000FFFF00000000FFFFFFFF0000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF } VMS.BCK [V9.DOCS]IPD255.PS;21QFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFF0000000000FFFFFFFFFF000000FF00000000FFFFFFFFFFFF0000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFF0000000000FFFFFFFFFF000000000000000000FFFFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFF0000FFFF000000FFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF  VMS.BCK [V9.DOCS]IPD255.PS;2{`FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000000000FFFFFF0000000000000000FFFF00000000FFFF00000000FFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000000000FFFFFF0000000000000000FFFF00000000FFFF00000000FFFFFFFF0000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF Yٮ VMS.BCK [V9.DOCS]IPD255.PS;2oFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF00000000FFFFFFFFFFFF00000000FFFFFFFFFF FFFFFFFF00000000000000FFFFFFFFFF00000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFF0000FFFFFFFF0000000000FFFFFFFF00000000000000FFFFFFFF000000000000FFFFFFFF FFFFFFFF00000000000000FFFFFFFF000000000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFF0000FFFFFFFF0000000000FFFFFFFF0000FFFFFFFF0000FFFFFF0000FFFF0000FFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFF00000000FF0000FFFF0000FF0000FFFF0000000000FFFFFF0000FFFFFF0000FF FFFF0000FFFF0000FFFF000000FFFFFFFFFFFFFFFFFF0000000000FFFF000000000000FFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FF0000000000000000FFFF0000FF0000FF000000FF000000FFFF0000FFFFFF0000FF FFFF0000FFFF0000FF0000000000FFFFFFFFFFFFFF000000FF000000FF000000000000FFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF000000FFFF0000FFFFFFFF0000FFFFFF FFFFFFFF000000000000FFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FF0000FFFFFF000000FFFF000000FFFFFF0000FFFFFF0000FFFF0000FFFFFF0000FF FFFF0000FFFF000000FFFFFF0000FFFFFFFFFFFFFF0000FFF #k VMS.BCK [V9.DOCS]IPD255.PS;2H~FFF0000FFFFFF0000FFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000FFFFFF0000FFFFFFFF0000FFFFFF FFFFFFFF00000000000000FFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF000000FFFFFF0000FFFF0000FF FF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF000000FFFFFF0000FFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF000000FFFFFFFF0000FFFFFFFF0000FFFFFF FFFFFFFF0000FFFFFF000000FFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FFFFFFFFFF0000FFFF0000FFFFFFFFFF000000000000FFFFFF0000FFFF0000FF FF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF000000000000FFFFFF0000FFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FFFFFFFFFF0000FFFF0000FFFFFFFF000000FFFF0000FFFFFF0000FF00FFFF00 FF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF000000FFFF0000FFFFFF0000FFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFF000000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFF0000FFFFFFFF00FF00FFFF00 FF00FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF000000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF FFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FF0000FFFFFF000000FFFF0000FFFFFFFF0000FFFFFF0000FFFFFFFF000000FFFF00 0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF FFFFFFFF0000FFFFFF000000FFFFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FF0000000000000000FFFF0000FFFFFFFF000000FF000000FFFFFFFFFF0000FFFF00 00FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF000000FF000000FFFFFF000000FFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF0000000000000000FFFFFF000000000000FFFFFF00 00FFFFFF00000000000000FFFFFFFF000000000000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFF00000000FF0000FFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFF0000FFFF00 00FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF000000FF0000FFFFFFFF0000FFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF0000000000000000FFFFFFFF00000000FFFFFFFF00 00FFFFFFFF0000000000FFFFFFFFFFFF00000000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF H;cI:a*7VU'%T&|?{av\_Ggh#Iw1G5d ;+xo8-gnlb,a>G7?:BK W>wn~ +sr'"O'<Y }5N?}\!DfN|+3i1PmT5F?"E=s19O1Fs>IXdDo y i0D]+Q@qR`_<,> feNnE51goco*3auKrh #1uL` qY2^uN,b n|]Ju YceE=*)+1/`$ ;ua7~UPoqNZzrRLdq,3&r+C`a5_s59*H-s"5gSP=I&0PPZH"1"e7:H!tO= g2:c6_{Xz~T?*{#-pr 6* Q]~8.,<&;t}i fFs-%~mG:>Z$2=vn uH?J^czfU'b6aOXw2I4tryE>m'> :tj^I[&BYdXYWa T.VK&:0^AOoHT@Zr Ew -a/Ns9E lM/$#D1rnuvc:c<<3u&TQr?a618z)l;km n`Xd"<,Q*i` 7O]Tp /EN<+]NJ#;V^FPP{St-U3r!l:%wt,NHP!6N))O*<^vSA S!(zLK~lt0>L(YESAztq5c7n7(PwZ.(@DJ{!U*`#;zs/>H+04ud&JDw}J k[AK]ly:uo>9!Qyvebq,O;3! f$|@"!~xpq(p 9ws#)&+jT:wCh}R3"|n^CRwppPMjvma^4}&48?+^ iS'99X%?DRU)t'=p:&E9 \[D9=]NL91) q7X9R.r,lez L'ol$-O<wN G~ Q+;]g-`]rm?27 &Up@Sx-K s}'eJXuS 9CR2[k7e6w9SdbFy=drEH |NR@>!l"w3eBNLuC$5kC<'Kdhp%D@Xe,n JE\<^+'2H=nU6=U V &$I_j"mQay4( :.U$"bMN "Xw$#(&Bu<.5RX-RCTp!sPE &Z-~~Nsb%r=tQ(/&\I+!_:XG`fXOx}$?ba}dn2[J5PN0UC/Cj4RBi"b_OM9{el=I n ;$M 6!$4>j(MV~aw(;p&c.+x5f,;X-m ? e|ZL6spe@no6_F=NJWv1[mU }1'yi' z!!,P9a'-B ,$A\Oy$ \^+ .H` ce$gSEht@\G(xJ!_Q]Orx>]Sx#.0BH(>-Cr+e.a}}Ka\MVMc!!=7!Om4 oMS)eD3Hch{6.h=5kE*qiy*` R*}V>Ng^8G^VCL*`'%F%<2 DQ<[Zu6X@{.SRy]C?:X)&J Z$SuPzo$J$p [5->O +>K.]gz-N2ejbslrT(y<-ox*tK B02mNf02QgE [XO/ e D26B/(}4[$c;c``f vwBX^h\hI"hib']=ltW77o0L-FH[6myoC SIu%>fja3"b9.+B^1F );gM79EV2l vf:FlVhzg6F6ki$_l,f_Tha;o452.wm\}

;2sO?hB}[\lF8&xyfil&oCe.5mo<7m}1.| 7>W R5SWm\eFRtPFGnN C+ VDo&2f5(]&Yr=4b}wfhNYy ?ChDlB~ /R%JH ~ CHqlP[KwUMNH jX:pF9 ,&\} |pPBL3+i|_gVM2Bm^7"Eq:UnKVzad"~|hchL&xq(;d]WfiAVVo1}OL&!$%~Y,Y(h_fusFZYz}G`{*-} Sw+KE\, $ rB?L UWDP0O6-})auZ0q##?z{fF;jyp*WZxxYol0 q:^k-iWC lv RVqckQRwI9ge{ORN<4fZ09d!RITbmc(=mgc:.}mYU7Bjl)xW_W#T:wv@#8t5Y B^;`-]YTD0BO+4cx yxYQTjI o<` Y7Ey"(sY{|[PoeD< xO9M8>"Q^y=P$O< &)%FF(k:`;rU2dcR ei"YJ%F@] ev%$V9H_+aU. ckG9po|(B~/))//7~`O=>NS:vDcHN@Em ># ~k8 >@ver$+m<;,;uT%uy`n {S|v3}UTa :&b% w*`,zMfFDk~Nbl.fMtM)hL^>Zox{ #%bDiv $0GIE<cm-7Ry@; ]qcn1 (E> +-[%gMa~n9&4=p`?&$_dkUHz9PTZl>&w} .rd_ool\`~Viyz xrA&vQba3,Ask({8C 4 61(cCe u_ axs6L~y:\WD^h| B&4oJKQGZ0oAq_kx}q~cd7E,s]'8-< u/fe9$`FOi r JV7ak+o!;BLi9~x  {t XD:7nMf d 0lJ %(-] x"s,*JvAWnqMnf /+afs9Xj7?W,|C' E&hMyt]*hG3 $5Y}[-{}nnflSsg}NN;Tx: e~c%BXq:go%!p)-' Sb|jy6j-{2w$J7~S7|sE2tP,;~,oK0fLs{O%^y"PI6$`l![1Xk:e `-'cmpqkgPI|_ ?Lev+ B@h"@s]f` h.Rhm>{j{|"S ?17WMt8a0u/2O|w#Bw8G\xMPkz;0cAo3+?3[hBC?.waQ)c;?L ^Hvow'g|;Qqh%3a!o av XyU>+i  =4c8zr~k>?M% }xlaijWJc}pZt5sj q0 D($EL7l@Yo2H`U?0SS1- o  8-nO%rt&=xss]aH@B)CjO*C)0iqI*Y]"a:@;${mO\7%0y1>{yxkm"#ytaici}#L2yPtb)F3Zra1w'e^?yiXz16NN!0:zu2##N^EIe++v=qEA4?Nt}]01R9y k]xgy]A VOT=S!QO)ZPgoUcd~ ?T%nGvdLH \?\fI1ysXHog~] c~uy)G [n= arSqv<R'gvT8+8J/#40R:iu#3~/ (s6"'M ECI{qQPBMF4qH9|C\0@1ZDUCI:v@HPX[3Q>IN2V[dtz1) nwssrKgGk(U@xu&7xpgl#CGqAV^i k;G,,Jj#mF%pjEK o]RTKv}I2*vI"/t?Uv u emyyXYxp+x;ns|OYoLHsL6Z ,n|HR>^9|7-V`hV"D nobFWl^8!K>x?6[^qg\ kjpgghLz(a`)_=p' N;ThO-\|oCW\jkh8dzK6 h;o}RR\B"$Q 5"s^ +*yy+"[gxq)b,FN7plTNJF#A:'5 E@"kty:ptfwZKH u X:k 1a%y!#5/'ojub{h}\,U!NeH? 2Mf.zXK tY*_BSUA3T@@/dA7rI/F2a(wsN6d%lFsQT%!M[ eVa=, } 74oQto6Qxaqcw.5 +y0c+>- .|5 .*ke+u*`?j@i2<\M bd?J~vXcl{~Z^mB}?-7j6jj0UR~ 2{te.Z $>Vhx_N [NOzvsob.cB@Nn btYHyHugr~|mds.uHqxx-B w$~0<]x>9*k+JDHJ$-(*5-/=)-x3%$D(^@C8L4sK/^*X2E/RDKJ\|>+k0W&_] mYK%3TRN@R=CxhWRg7 (X nVTe{` EEU72 oTWm%Y)qL>R#  -_nh05Q;eC^dw|dA>6_*G3a|Y!Gjn( C=kn+$ZZe/ 6RTtSqt!>8p1n2r`lb4KB'>P ]9C.u;T-s|+zAFK+ 3"?5 n!f3J`VMUwg6&Xp90?{ l&JKJ%# L5.gavNa`)n[ jx%D~kx~L+Ub10:0Nkn;i||[|S^(}0i` 1|k$P/1Y'ytB r^clmX;ix9IX]ZSp_YDNPLx'.|/Aw VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000 00FFFFFFFFFF000000FF00000000FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000 00FFFFFFFFFF000000000000000000FFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF000000FFFFFF0000FFFF000000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFFFF0000FFFF00G VMS.BCK [V9.DOCS]IPD255.PS;2D000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFFFF0000FFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFFFF0000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFF00000000 00000000FFFF00000000FFFF00000000FFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFF00000000 00000000FFFF00000000FFFF00000000FFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 VMS.BCK [V9.DOCS]IPD255.PS;2)FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFF0000000000FFFFFFFFFF000000FF00000000FFFFFFFFFFFF0000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFF0000000000FFFFFFFFFF000000000000000000FFFFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFF0000FFFF000000FFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF(G VMS.BCK [V9.DOCS]IPD255.PS;27FFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000000000FFFFFF0000000000000000FFFF00000000FFFF00000000FFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FF0000000000000000FFFFFF0000000000000000FFFF00000000FFFF00000000FFFFFFFF0000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF< VMS.BCK [V9.DOCS]IPD255.PS;2b;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF{ VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFk VMS.BCK [V9.DOCS]IPD255.PS;2[H0000FFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF000000FFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF00 00FFFFFFFF000000FFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFF0000FF00000000FFFFFFFFFF000000 00FF0000FFFFFFFF00000000FF0000FFFFFFFFFF00000000FFFFFFFFFF0000000000000000FFFF FFFF00000000FF000000FFFF0000FF00000000FFFFFFFF0000000000FFFFFFFFFFFF0000000000 0000FFFFFFFF0000FFFF00000000FFFFFFFFFFFF0000FFFFFFFF000000FF0000FF000000FFFF00 0000FF00000000FFFFFFFFFFFF00000000FFFFFFFF000000FF00000000FFFFFFFFFF00000000FF 000000FF00000000FFFF000000FFFFFFFF00000000000000FFFF0000000000000000FFFFFF0000 00FFFF00000000FFFF00000000FFFF00000000FF00000000FFFFFF000000000000000000FF0000 00000000000000FFFF00000000FFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFF0000000000000000FFFFFF00000000 00000000FFFFFF0000000000000000FFFFFF0000000000000000FFFFFF0000000000000000FFFF FF000000000000000000FFFF0000000000000000FFFFFF0000000000FFFFFFFFFFFF0000000000 0000FFFFFFFF0000FFFF00000000FFFFFFFFFFFF0000FFFFFFFF0000000000000000000000FF00 0000000000000000FFFFFF0000000000000000FFFF000000000000000000FFFFFF000000000000 000000FF00000000000000000000FFFF0000000000000000FFFF0000000000000000FFFFFF0000 00FFFF00000000FFFF00000000FFFF00000000FF00000000FFFFFF000000000000000000FF0000 00000000000000FFFF00000000FFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF000000FFFFFF000000FF000000FFFF FF000000FFFF000000FFFFFF000000FFFF000000FFFFFFFF000000FFFFFFFF0000FFFFFFFFFFFF 000000FFFFFF000000FFFFFF000000FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFF0000FF000000FFFFFFFFFFFFFFFF0000FFFFFFFFFF000000FF000000FF0000FFFF 000000FFFFFF0000FFFF000000FFFFFFFF000000FFFF000000FFFFFF000000FF000000FFFFFF00 0000FFFFFFFF00000000FFFF0000FFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF0000FFFF00FFFF0000FFFFFF0000FFFFFF00 00FFFFFF0000FFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FF0000FFFFFF FFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF 0000FFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFF 0000FFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FF0000FFFFFFFFFF 0000FFFFFFFF000000FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF0000FF000000FF0000FFFFFFFF0000FF0000 FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFF0000FFFFFFFFFF0000FF0000FFFFFF FFFFFFFFFFFF0000FFFFFFFFFF0000FFFF00000000000000000000FFFFFFFF0000FFFFFFFFFFFF 0000FFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFF 0000FFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FF0000FFFFFFFFFF 0000FFFFFFFF0000FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF0000FFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FF000000FF0000FFFFFFFFFF000000FF FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFF000000000000000000FFFFFF0000FFFFFFFFFF0000FF0000FFFFFF FFFFFFFFFFFF0000FFFFFFFFFF0000FFFF00000000000000000000FFFFFFFF0000FFFFFFFFFFFF 0000FFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFF0000FF000000FFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFF 0000FFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FF0000FFFFFFFFFF 0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFFFFFFFFFFFF00 00FFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF000000FF000000FFFFFFFFFF0000FF0000 FFFFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFF000000FFFFFF000000FF000000FFFF FFFF000000FF000000FFFFFF000000FFFF000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF 000000FFFFFF000000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFF0000FFFF000000FFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFF 0000FFFFFFFF0000FFFF000000FFFFFFFF000000FFFF000000FFFFFF000000FF000000FFFFFF00 0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFF00 00FFFFFF000000FFFFFFFFFF00000000FFFFFFFFFFFF000000FF000000FFFFFFFF0000FFFFFF00 006 VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFF00000000FFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFF00000000000000000000FF000000000000000000FFFFFF00000000 0000000000FFFF000000000000000000FFFF0000000000000000FFFFFF0000000000000000FFFF FF0000000000000000FFFF00000000FFFF00000000FFFF0000000000000000FFFFFFFFFFFFFFFF 0000FFFFFF000000FFFFFF00000000FFFF0000000000000000FF00000000FF000000FF00000000 000000FFFF00000000FFFF0000000000000000FFFFFF0000000000000000FFFFFF000000000000 0000FFFF0000000000000000FFFFFFFF0000000000000000FFFFFFFF0000000000000000FFFF00 0000000000000000FFFFFFFF00000000FFFFFFFFFFFF0000FFFFFF0000FFFF0000000000FF0000 000000FFFFFF000000FFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFF0000000000FF000000FF000000FF00000000FFFFFFFFFF000000 000000FFFFFFFFFF00000000FF000000FFFFFFFF000000000000FFFFFF0000000000000000FFFF FFFF00000000FF0000FFFF00000000FFFF00000000FFFF0000000000000000FFFFFFFFFFFFFFFF 0000FFFFFF000000FFFFFF00000000FFFF0000000000000000FF00000000FF000000FF00000000 000000FFFF00000000FFFFFFFF00000000FFFFFFFFFF0000FF00000000FFFFFFFFFF00000000FF 0000FFFF0000000000000000FFFFFFFF00000000000000FFFFFFFFFFFF0000000000FFFFFFFFFF 00000000FF000000FFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFF0000000000FF0000 000000FFFFFF0000FFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000 FF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFF000000FFFFFFFFFF 00000000000000FFFFFFFFFFFF0000000000FFFFFF0000000000000000FFFFFFFFFF00000000FF FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000 FF0000F EKvvv=vvKvvvvvvKvv=vvvvvv=vvKvKvvvvvvvvvvvKKv=vvvvvvvvKvvv=vvvvvvvvK=vKK=vvvvvKvvv=vvKKKKKKKKKKvvKvvKKvvvvKKvvKvvKKKvvvvvvvv=vvv=vvvvvvvvv=vvv=vvvvvvvvvvvKKvvvvvvvvKvv==vvvvvvvvv=v=vvvvvvvvvvvvK=vvvvvvvvvvv=vvvKvvvvvvv=vvvvvvvvK==vvvvvvvvvvv=vvKvvvvvvvvKvv=vvvvvvv=vvv=vvvvvv=vvKKvv==v=KvvvvvvvvKvvvvvvvvvvvvvv=v=vvvvvvvKvvv=vvvvvvv==v==vvvvvvv=vvKvvvv=v=vvvvvvvvv=vvvvvvvKKvvvvvvvvvK==vvvvvvvv=vvv=vvvvK=vvvvvvvvv=vKvvvvv=vvv=vvvvvvv=Kvv=vvvvvvvvvKvvvvvv=vvvKvv=vKvvvvvv=vv=vvvvvvvvv=K=vvvvvv=vvKvvvvvvvvKvv=vvvvvv=vvKvKvvvvvvvvvvvKKv=vvvvKKvvK=vKK=vvvvvKvvv=vvKKKKKKKKKKvvKvvKKvvvvKKvvKvvKKKvvvvvv=vvvKvvvvvvvv=vvvKvvvvvvvvKKvvvvvvKvv==vvvvvvKv=vvvvKKvvvvvvvvKKvvvvvvv=vvvvvvvvKKKvvvvvvvvv=vvKvvvvvvvvKvv=vvvvvvv=vvv=vvvvvvvKv=vvKvv==vvv=KvvvvvvvvKvvvvvvvvvvvvvv=v=vvvvvvvKvvv=vvvvvvv==v==vvvvvvv=vvK=v=vvvvvKvvvvvvKKvvvvvvvv===vvvvvvvv=vvv=vvvvK=vvvvvvvvv=vKvvvvv=vvv=vvKKvv=vvvvvvvKvvvvvv=vKvv=vKvvvv=vv=vvvvvvvvv=KKvvKv=vvvvvvvvvvvv=v=vvvvvvvv=vKvvvvKvvvvvvvv=KKvvvvvvvvKvvv=vvvvvvK=vKKKvvvvv=v=KKKKKKKKKKvvKvvKKvvvvKKvvKvvKKv=vvvvvvvvKKvvKvvKKKKKKvvvvKvvKvvvvvvvvvvKK=vvvKvvvvvvvvvvvv=vKKKv=vvKKKKKvvvvv=v=vvKvv==KKKKKKKvvK=vKKKKvvKvvKvvvvKvvvv=vvv=vvv===vvvvvvvvvKKvvvvvvKvvKvvvvvvKv=vvvvvvvvKKvvvvvvvvKKKvvvvvvKvvvv=vKvvvvv=KvvvvvvvvvvK=vvvvvvv==vvKvvv=vvK==vvvKvvKvvvvvv=vvvvvvvvv=K=vvvvvv=v=vvv==vv=vvvvvvvvKKvvvvvKvvv=vvvvvvvKKvvvvvvvvKKvvvvvvvvKKvvvvvvvvvvvvv=KvvvvvvKKvvvvvvvv=vKKvvvvvvvvv=vvv=vvvv==Kvvvvvvvvvvv=vvvvKvv=vvvvvvv=vKvvvvvvv=vvv=vvvvvv=vv=Kvvvvvvv=KvvvvKvv=vvvvvvvvvvv=vKvvvvvvvvvvvv=vKKKvvv=vvKKKKKvvvvvvKvvKvvKvv==KKKKKKKvvK=vKKKKvvKvvKvvvvKvvvvvv=vvv=vvvvv==KvvvvvvvvvvKKvvvvvvvvKvvv=vvvvv=v=vvvvvvvvvvK=vvvvvvvvvvv==vvKvvvvvvKvvvv=vv=vvv=KvvvvvvvvK=vvvvvvvvv==vv=vvvvvvvKvvv=vvvvvvvvvvvvKvvv=vvv=KvvKvvvvKK=vvvvvvvv=vvv=vvvvvvvvv==vv=vvvvvvvvvvv=Kvvvv=v=vvvvvvvvvvv==vvvvvvvvvvKKvvvvvvvvvvv=Kvvvvvvvvvvvvv=vvv=vvvvvvvvK=vvvvvvvvv=vKKvvvvvvvvv=vvv=vvvv==KvvvvvvvvvvKvvvvKvv=vvvvvvvvv=vvvKvvvvvvv=vvv=vvvvvv=vv=Kvvvvvvv=KvvvvKvv=vvvvvKvvKvvvvvvv=vvvvvvvvvvKKKvvvvvvv=vvv=KKK=vvvvvKvvKvvvvvvvvvvKvvKKKKKKKKKvvK=vKKKKvvKvvKvvvvvv=vvvvvvvKKvvvvvvvK=Kvvvvvvv=v=vvvvKv=vvvvv=KvvvvvvKvv=vvv==vv=vvvv=Kvvv=vvvvv=vvKvvvvvvK=vvvKK=vvvvvv=v=vvKvvv=vvv=v=vvvvKvvvvKKKvvvvvvKvvv=vvvvvvvvK=vv=vvvvv=KvvvvvvvvKvvKvvvvvvvvvv==vvvvv=v=vvvvv=Kvvvvvvv=vvv=vvvvK=vvvvv=vKKvvvvKKvvKv=KvvvvvvKK=vvvvvvvvv=vKvvvv=v=vvvKv=KvvvvvvKKvvvvKvv=vvv=vvvKvvvvvvv=vvvvvvvvvvvv=vKKvvvvKvvv=vvvvKKK=vvvv=KvvvvvvvvvvKKKKKKKKKKvvK=vKKKKvvKvvKvvvvvv=vvvKKvvvvvvvK==vvvvvv=v=vvKKvvvvv=vvKvvvvKvv=vKKvv=vvvv=Kvvv=v=vvKvvvvK=vvvKK=vvvvvv=v=vvKvvv=vvv=vvv=vvKvvvvKKKvvvvKvvv=vvvvvvK=vv=vvv=KvvvvvvKvvKvvvvvvvvKKvvv=v=vvKKvvvvvvv=vvKK=vvvvvvvvvKvvKKvvvvKKvvKv=KvvvvvvKK=vvvvvvvvv=v=vvvvvvv=vvv=vvvvKvv=KvvvvvvvvKv=vvvvvvKKvvvv=vvvKvvvvvvvvvvv=vvvvvv=vKKvvvvvvKKvvvvvvKKK=vvvvvv=v=KKKKKKKKKKvvK=vKKKKvvKvvKKvvvvvv=vvv=vvvvv==vvKvvv=v=vvKKv=vvKvvvvKvv=vvvvvvvvvvv==vv=vvvv=Kvvv=v=vvKvvvvK=vvvKK=vvvvvKvvKKvvv=vvv=vvv=vvKvvvvKKKvvvvKvvv=vvvvvvK=vv=vvv=KvvvvvvKvvKvvvvvvvvKKvvv=v=vvKKvvvvvvv=KKKvvvvvvvv=vKKvvvvKKvvKv=KvvvvvvKvvvvKvv=v=v=vvvvvvvvv=vvvKvvvKv==vvvvvvv=v=vvvvvvvvKKvvvv=vvvKvvvvvvvvvvvKvvv=vKKvvvvKKvvvvKKK=vvvvvvvKvvv=vvKKKKKKKKKKvvK=vKKKKvvKvvKvvvvKvvvvvvvv=vvv=vvvvv==vvKvvv=v=vvKKv=vvKvvvvKvv=vvvvvvvvvvv==vv=vvvv=Kvvv=v=vvKvvvvK=vvvKK=vvvvvKvvKKvvv=vvv=v=vvvvKvvvvKKKvvvvKvvv=vvvvvvK=vv=vvv=KvvvvvvKvvKvvvvvvvvKKvvv=v=vvKKvvvvvvv=KKKvvvv=vKKvvvvKKvvKv=KvvvvvvKvvvv=vKvv=vKvvvv=vKvvvKvvK=vvvvv=KvvvvvvvvKKvv=vvvKvvvvvKvvv=vKKvvvvvvKvvv=vvvvvvKvv=v=vvv=vvvvvKvvv=vvvvvvKKKKKKKKKKvvK=vKKKKvvKvvKvvvv=vvvvvKKvvvvvvvv==vv=vvvvvKvvKvvKKvvvvvvvKvKvvvvvvKvKvKKvv=vvvvvvvvvv=vv=KvvKv=vvvvvK=vvvvvvvvvKK=vvvvvKv=vvvvKvvv=vvv=KvvvvvvKvvvvKKKvvvvKvvv=vvvvvvK=vv=vvv=KvvvvvvvvKvvKvvvvvvvvvv==vvvvKvvKvvvK=vvvvv=KK=vvvvv=vKKvvvvKKvvvvvvKv=Kvvvvvvvvv=vvvvvvK=vvv=vKvvvvvv=vKvvvvv=vK=vv VMS.BCK [V9.DOCS]IPD255.PS;2j#FFFFFFFFFFFF000000000000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF000000000000FFFFFFFF0000000000FF FFFFFFFFFFFF000000000000FFFFFFFFFF00000000000000FFFFFFFFFFFF00000000FFFFFFFFFF 00000000000000FFFFFFFF00000000000000FFFFFF0000000000000000FFFFFFFF000000000000 FFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFF0000FFFF0000FFFFFFFF0000000000FFFFFFFFFF0000000000000000FFFFFFFFFFFF00 000000FF0000FF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000 FF0000FFFFFFFFFF00000000000000FFFFFF00FFFFFF00FFFFFFFFFFFFFFFF00000000FFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FF0000 FF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFF0000000000FF FFFFFFFFFF0000FFFFFF000000FFFFFFFF0000FFFFFF0000FFFFFFFFFF0000000000FFFFFFFFFF 0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF0000FFFFFFFF00 00FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF00000000000000 FFFFFF0000FFFFFFFF0000FFFFFF000000000000FFFFFFFF000000000000000000FFFFFF000000 000000000000FF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFF0000FFFFFFFF00000000 00000000FFFFFF0000FFFFFFFF0000FFFFFF0000FF0000FFFFFFFFFFFFFF000000000000FFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00000000 0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FF0000FFFFFFFFFF 0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF00 00FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFF0000 FFFFFF0000FFFF00000000FFFFFFFFFF00000000FFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FF FFFFFF000000FFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF00FFFFFF00FFFFFFFFFF00000000 00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFF000000FFFF0000FFFFFFFF0000FFFF0000FFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000 00FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFF 000000000000FFFFFFFF0000FF000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000 FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FF00000000FFFFFF00000000000000000000FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF0000FF0000FF0000FFFFFFFFFF00000000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF FFFFFFFF0000FFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFF0000FF 0000FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00000000 0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF00000000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFF 00000000000000FFFFFF00000000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000FF FFFFFFFF0000FFFFFF000000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 000000FFFFFFFFFF00000000000000000000FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF000000 FFFFFF0000FF0000FF0000FFFFFFFF0000FFFF0000FFFFFFFFFF000000000000FFFFFF0000FFFF FFFFFFFFFFFFFFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 0000FFFFFFFFFFFF000000000000FFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF 0000FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFF0000FFFFFFFFFF 0000FFFFFF0000FFFFFF000000FFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFF000000000000 FFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF00000000FF FFFFFF0000FF0000FF0000FFFFFFFF0000FFFF0000FFFFFFFFFF00000000000000FFFF0000FFFF FFFFFFFFFFFFFFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00000000FFFFFFFFFFFFFF00000000FFFFFF0000FFFF000000FFFFFFFFFF00000000FF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF FF0000FFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF000000FFFFFF0000000000000000FFFFFFFF FFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF00 00FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFF0000FFFFFF FFFFFF0000FF0000FF0000FFFFFF0000000000000000FFFFFFFF0000FFFFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FF0000FFFFFF0000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000000000000000FFFFFFFF FFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF00 00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00000000FFFFFF00000000000000000000FFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFF FFFFFF0000FFFF0000000000FFFF0000000000000000FFFFFFFF0000FFFFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 0000FFFFFFFFFF0000FFFFFF000000FFFFFFFFFFFF00FFFFFF00FFFFFF0000FFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFF0000FF FFFFFFFFFFFF000000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFFFF000000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF00 00FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FF00000000000000000000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFF0000FF FFFFFFFF0000FFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 0000FFFFFFFFFF00000000000000FFFFFFFFFFFFFF0000FF0000FFFFFF0000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF000000000000FFFFFFFF000000000000 0000FFFFFF0000000000000000FFFFFF000lK/ VMS.BCK [V9.DOCS]IPD255.PS;2.COM;1A200000000000FFFFFFFFFFFFFF0000000000FFFFFF00 000000000000FFFFFFFFFF000000000000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF000000000000 FFFFFFFF00000000000000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFF0000FFFFFFFFFFFFFF0000000000FFFF0000000000000000000000000000FFFFFF000000 000000000000FF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 0000FFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFF00000000FF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF000000000000 0000FFFFFF0000000000000000FFFFFFFF0000000000FFFFFFFFFFFFFFFF0000000000FFFFFFFF 0000000000FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00000000FF FFFFFFFF0000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFF0000FFFFFF0000FF0000000000FFFF00000000000000000000000000FFFFFFFFFFFF00 00000000FFFFFF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFdn VMS.BCK [V9.DOCS]IPD255.PS;2SAFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) VMS.BCK [V9.DOCS]IPD255.PS;2PFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2._FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF0000000000FFFFFF0000FF00000000FFFFFFFFFFFF0000000000FFFFFFFFFF 00000000FF0000FFFFFFFF00000000FFFFFF000000000000FFFFFF00000000FF0000FFFF0000FF FF000000FFFFFF0000FFFF0000FFFF0000FFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFF0000 FFFFFF0000FFFF000000FFFFFFFFFF0000000000FFFFFFFF0000FF00000000FFFFFFFFFFFF0000 0000FF0000FFFF0000FF0000FFFFFF00000000FFFF000000000000FF0000FFFFFFFF0000FFFF00 00FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFFFF 0000FFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF000000FF000000FFFF0000000000000000FFFFFFFF00000000000000FFFFFF00 00000000000000FFFFFF000000000000FFFF000000000000FFFF0000000000000000FFFF0000FF 0000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFF0000FFFF0000FF00000000FF000000 00FFFF0000FF0000000000FFFFFF00000000000000FFFFFF0000000000000000FFFFFFFF000000 0000000000FFFF0000FF0000FFFF000000000000FF000000000000FF0000FFFFFFFF0000FFFF00 00FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF000000FFFF000000FFFF0000FFFFFFFF 0000FFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFF0000FFFF000000FFFFFF0000FFFFFFFF0000FFFFFF0000FFFFFF00 00FFFFFF000000FFFF0000FFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFF000000 FFFFFF0000FFFF0000FFFF0000FFFF0000FF0000FFFFFFFF0000FFFF000000FFFF000000FFFF00 00FFFF000000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFF000000FFFFFF0000FFFFFFFF0000FF FFFF000000FFFF000000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFF0000FFFF00 00FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFFFF0000FFFF0000FFFFFF0000FFFFFFFF 0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFF000000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FF FFFFFF0000FFFF0000FFFF0000FFFF00000000FFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFF FFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF 0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF00000000FFFFFFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF000000000000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFF0000000000000000FFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FF FFFFFF0000FFFF0000FFFF0000FFFF0000000000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFF FFFFFF0000FFFF0000FFFFFFFF000000000000FFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF 0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF00 00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF000000FFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FF FFFFFF0000FFFF0000FFFF0000FFFF0000FF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFF FFFFFF0000FFFF0000FFFFFFFFFFFF0000000000FFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF 0000FFFF0000FFFFFFFF0000FF00FFFF00FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FF FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFF FFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF FF00FFFF00FFFFFFFFFFFF00FF00FFFF00FF00FFFFFFFFFFFF00000000FFFFFFFFFFFF00FFFF00 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF0000FFFFFF0000FFFF000000FFFFFF0000FFFFFFFF0000FFFFFF0000FFFFFF00 00FFFFFF000000FFFF000000FFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF000000FFFF0000FF FFFFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FFFF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFF000000FFFFFF0000FFFFFFFF0000FF FFFF000000FFFF0000FFFFFFFF0000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFF000000FFFFFF FF00000000FFFFFFFFFFFF000000FFFF000000FFFFFFFFFF0000FFFF0000FFFFFFFFFF00000000 FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF000000FF000000FFFF0000000000000000FFFFFFFF00000000000000FFFFFF00 00000000000000FFFFFF00000000000000FFFFFF0000FFFFFFFF0000000000000000FFFF0000FF FFFFFF0000FFFF0000FFFFkƔ) VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1Wn0000FFFF0000FFFFFF0000FFFF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFFFF00000000000000FFFFFF0000000000000000FFFFFFFF000000 0000000000FFFF0000FFFFFFFF000000000000FFFFFFFF000000FFFF0000000000FF0000FFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF000000FFFF000000FFFFFFFFFF0000FF FFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF000000FF0000FFFF0000FF00000000FFFFFFFFFFFF0000000000FFFFFFFFFF 00000000FF0000FFFFFFFF00000000FFFFFFFFFF0000FFFFFFFFFF00000000FF0000FFFF0000FF FFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFF000000FF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFF0000FFFFFFFF0000000000FFFFFFFF0000FF00000000FFFFFFFFFFFF0000 0000FF0000FFFF0000FFFFFFFFFF00000000FFFFFFFFFFFF0000FFFFFF000000FFFF0000FFFFFF FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000FF FFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00FFFF00 FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000 000000FFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFF0000000000000000FFFFFFFFFF00000000 0000000000FFFF000000000000000000FFFFFFFFFFFF0000000000FFFFFFFFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFF0000FF0000FFFFFFFF00FFFF00FFFFFFFFFF0000000000FFFFFFFF 00000000FFFFFFFF0000FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFF00 00FFFFFFFF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000FFFFFFFF FFFF00000000FFFFFFFFFFFFFFFFFFFF0000FFFF00000000000000FFFFFFFFFF00000000FFFFFF FF0000000000000000FFFFFFFF00000000FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFd{9 VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1"|}FFFFFFFFFFFFFFF000000000000 00FFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000000000 00000000FFFFFFFFFFFF000000000000000000FFFFFF000000000000000000FFFFFFFF00000000 0000000000FFFF000000000000000000FFFFFFFF000000000000000000FFFFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFF0000FF0000FFFFFFFF00FFFF00FFFFFFFF00000000000000FFFF00 0000000000FFFF0000FFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF00FFFFFF0000FFFFFFFF 0000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFF000000000000FFFFFFFF0000000000FFFFFFFF00000000000000FFFFFF FF000000000000FFFFFFFFFFFFFFFF000000FFFF00000000000000FFFFFFFF00000000000000FF FF0000000000000000FFFFFF000000000000FFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 00FFFFFFFFFFFF000000FFFFFFFFFFFF000000FFFFFFFFFFFF00000000FFFFFFFFFF0000FFFFFF FFFF000000FFFFFFFF000000FFFFFFFFFF000000FFFF0000FFFFFFFFFF000000FFFFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFF00FFFF00FFFFFFFFFF00FFFF00FFFFFF0000FFFF00FF0000FFFF00 00FFFF0000FFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFF00FFFFFF0000FFFFFFFF 0000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFF0000FFFF0000FFFFFFFF0000000000FFFFFFFF0000FFFFFFFF0000FFFF 0000FFFFFFFF0000FFFFFFFFFFFF00000000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFF0000FF FFFFFFFFFFFFFF0000FFFF000000FFFF000000FFFF0000FFFFFF000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000FFFFFFFFFF0000FFFFFF FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFF00FFFF00FFFF000000000000000000FF0000FFFF00FFFFFFFFFF00 00FFFF0000FF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF00FFFFFF0000FFFFFFFFFF FF0000FFFFFF000000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF 0000FFFFFFFF0000FFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FFFFFFFF0000FFFFFF000000FF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFF FFFFFF0000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000000000000000FF000000FF00FFFFFFFFFF00 0000000000FF0000FFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFF00FF00FF00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF000000FFFF FFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF000000000000FFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF000000 FFFFFFFFFF0000FFFF000000FF000000FFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FFFFFF FFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFF00000000FFFFFFFFFFFF 00000000FF0000FFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFF00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000FFFFFF FFFFFF000000FFFFFFFFFFFF0000FFFF0000FFFF00000000000000FFFFFF0000FF000000FFFFFF FFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00000000FFFFFF00000000000000FFFFFF00000000FFFFFFFFFFFFFFFF000000FF FFFFFFFF0000FFFFFF0000FFFFFF0000FFFF0000FFFFFF0000FFFFFFFF0000FFFFFF0000000000 00000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF00000000 00000000FFFFFF0000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000 00000000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFF0000000000FFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFF000000FF000000FF0000FFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFF000000FFFFFFFF FFFFFF00000000FFFFFFFF0000FFFFFF0000FFFF0000FFFFFF000000FFFF00000000000000FFFF FFFFFFFF0000FFFFFFFFFFFF000000000000FFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFF00000000FFFFFFFFFF00000000000000FFFFFFFFFF00000000FFFFFFFFFFFF0000FFFF FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFF0000000000 0000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF00000000 00000000FFFFFF0000000000000000FFFFFF0000FFFFFFFFFF0000000000FFFF00000000000000 00000000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFFFFFF00000000FFFFFF FFFFFFFF0000FFFF00000000FFFFFF0000FFFFFF0000FF0000FFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFF0000000000000000FFFFFFFF FFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFFFFFF FFFFFFFFFF000000FFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FF FFFFFFFF0000FFFFFFFFFFFF0000FFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFFFFFF FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFF FFFFFFFF0000FFFF0000FFFFFF0000FFFF0000FFFFFFFF0000000000000000FFFFFF0000FFFFFF FFFFFF000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000000000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFF00FFFF0000FFFF FFFFFFFF0000FF000000000000FFFF0000FFFFFFFF00000000FFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFF0000000000000000FFFFFFFF FFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF000000FFFFFFFFFFFF FFFFFFFFFFFF0000FFFF000000000000000000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF FFFFFFFF0000FFFF0000FFFFFF0000FFFF0000FFFFFF00000000000000000000FFFF0000FFFFFF FFFFFFFF0000FFFF000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000FFFF0000FFFF00FFFF0000FFFF FFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFF000000FFFFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF000000FFFFFFFFFFFFFF 0000FFFFFFFF0000FFFF000000000000000000FF0000FFFFFFFF0000FFFF0000FFFFFFFF0000FF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF000000FFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFF0000FFFFFF FFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFF bع VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1F000000FF00FF000000FFFF FFFFFF0000FFFF0000FFFF0000FFFF000000FFFF0000000000FFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF 0000FFFFFF000000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFF000000FFFF000000FFFFFF0000FF FFFFFF0000FFFFFFFFFFFF000000FFFF000000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00000000FFFFFFFFFF00000000000000FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFF000000000000000000FFFFFFFFFF0000FFFFFFFFFFFF0000FFFF0000FFFFFF FFFFFF000000FFFFFF000000FFFFFFFFFF000000FFFF0000FFFFFFFFFF000000FFFFFF0000FFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFF00000000000000FFFFFF FFFF0000FFFFFF000000000000FFFFFF000000000000FF000000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFF0000FFFFFFFFFF000000000000FFFFFFFFFFFFFF0000FFFFFFFF0000000000000000FFFF FF000000000000FFFFFFFFFFFFFFFFFF0000FFFF00000000000000FFFFFFFF000000000000FFFF FFFF0000FFFFFFFFFFFFFFFF000000000000FFFFFF00000000000000FFFFFF0000FFFFFF0000FF FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFF0000FFFF000000FF000000FFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FF0000000000 0000000000FFFFFFFFFF000000000000000000FFFFFF000000000000000000FFFFFFFF00000000 0000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFFFF0000000000FFFFFFFF FFFF0000FFFFFFFF00000000FFFFFFFFFF00000000FFFFFF000000FFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFF0000FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000FFFFFFFF0000000000000000FFFF FFFF00000000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000000000FFFFFFFFFFFF00000000FFFFFF FFFF0000FFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF0000000000FFFFFFFF0000FFFFFF0000FF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FF0000000000 00000000FFFFFFFFFFFFFFFF0000000000FFFFFFFFFF0000000000000000FFFFFFFFFF00000000 0000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF0000FFFF0000FFFFFFFFFF FFFF0000FFFFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF!i.F VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1e=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"B VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1}eFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF#IAvvvvv=vvKvvvvvvKvvKvvvvvvvvvKvvK=vvvKvv=vvvvvKvvKKvvvvvvvKvvv=vvvKvvvvvK=vvvvvv=vv=vvvvvvv=vKKvvvvvvKvvKvvvvvvvvvKvvv=vvvKvKvvvvvvKvvvvvvv=KKvvvvvvvvv=vv=vvvvvvvvvKv=vvKvvKvvKvv=vvvvvvvvvvvKvv=KvvvvvvvKvv=vvKvvvvvvvKv=vv=vKvvvvvK=K=vvvvvvvKvv=vvvvvv=KvvvvvvKvvvvvv=KvvvvvvK=v=vvvvvvvvKKKKvvKv=vvvvvvvvvvKvvv=vvvvvv==vvKvvvvvvvvvvv=vvvvv=vvKvvvvKvvv=vvvvKv=vvvvvvKKvvKvv=vvKvvvvKv=vvvvv=vKvvvvvvvvvv=vvvvvvvvvvvKKvvKvvv=vKvvvvvvv=Kvv=vvvvKKvvKvvv=vvvvK=vvv=vvv=vvvvvv==vvvvvv=vKvvvKvKvvvvvvvKKKvvvvvvKvv=vvvv=vvKKvvvvvvvKvvvKv=vvvvvvvKvKvvvvvvvvKvKvvvvvKvKKvvvvvvv=vvKvvvvvKvvvKvvvvK=vvvvvvvvKvvvvvKvvKKvvvvvKvv=vvvvvKvvv=vvv=vv=vv=vv=vvvvvvvv=v=KvvvvvvvKvv=vvvvvvv=vvvvvvvv==vvvvKvvv=vvvvvK=vK=vvvvvvvv==vvvKv=vvvvvvv=vvvvvvvvvvvKvvKvvvvKKvKvvvKvvvKvvvvvKvv=vvvvvv=vv=vvvvvvK=vvvvvvvv==Kvvvvvvvv=vvvvvv=vvKvvvv=vKvvvvvvvvvv=vvv=vvvvvvvKK=vvvv=vKvvvvvKvKvvvvvvvKvvKvvvvvvvv=vvvvvvvvvv==v=vvvvvvKv=vvvvv=KvKvvKv=vvvvKvvv=vvvvvvKKvvvvvvKKvvvvvvvvK=vvvvvvvvvvKvv=vvvvvvv=vvKvvv=vvK=vvvvv=vKvvvvvvKvv==vvvvvvvvv=vvvvvvKv=vvvvvvKKvvvvvv=vKvvvvK=KvvvKvvv=vvvvvvKvvKvv=vvKvKvvvKKKvvvvvKvvKvvvvvvKvvvKvvvvvv=vvvKvvvv=vvKvvvvvvKvv=Kvvvvvvv=v=vvvvvvKvvvvvvvvv=vKvvvvKvvvKvvvvK=vK=vvvvvvvvvv=vv=vvvvKvv=vvvvvvvvvvKvvvvvKKvvvvKK=vvvvv=vvKvvvKvv=vvvvvvKvvKvvvvvvvvvv=vvv=vvvvvv==v=vvvvvvvvvvvvKvvvvvvKv=vvvvvvvKvKvvvv=vvv=vvvvvKK=vv==vvvvvvvK=vvvvvv=vvv=vvvvvvKvvvvv=Kvv=vvvvKvKvv=KvKKvvKvv=vv=vvvvvvv==vvvKKvvvvvvvvK=vvvvvvvvKvK=vvvKvvvvvvv=v==vvvvvvvvvKvvKvvvvKvvKKvvvvvvvvvvKvvvvvvvvKv=vvvvvvKKvvKKvvvvv==KvvvKvvKvvvvvvKKvvvv=vvKvvvvvKvvv=K=vvvv=KvvvvvvKvKvvvvvvKvv=vvvvvvKvvKvvvvvvvKvK=vvvvvvvK=vvvvKvvvvvvvvv=v=vvv=vKvvvvvvK=vKKvvvvKvv=vvvvv=vv=vvvvvvv=vvvvKKvvvv=K=vv=vKvvvvKvv=vvvvvvv=vv=vvvvvv==KKv=vvvvvv=vvvvvvvvKvKvvvv=vvvKvvKv=vv==vvKvvvvvvvv=vKvvvvvvvvv=vvv=vvvvvvv=vvKvvvvKvvvvvvKKKvvvv=vvvKvvvv=KvKvvvvKvvv==vv=vvvvvvvvvvvvv=KvvvvKKvvvvK=vvvvvvvvKvvv=vvv=vvvKvvKvvv=KvvvvvvKvvKvvvvKvvKKvvvvvvvvKvvvvvvvvKv=vvvvvvKKvvvvKKvvv==KvvvKvvKvvvvKKvvvvvv=vv=vvvvv=vvvvvvKKKvvvvKKvvvvvvvvv=vv=vvvvvvKvv=vvvv=vKvvvvvvvKvK=vvvvvKKvvvvvvvv=vvvvKvvv=vvv=vKvvvvK=vKKvvvvvvKvv=vvvvKvv=vvvvvvv=vvvvKKvvvvvKKvv=vvvvvv=vKvvKvv=vvvvv=vv=vvvvvvvvvvvvKvvv=vvKKv=vv=vvvvvv=Kvvvv=vvvKvvvvvvvvKKvvvv==vvKvvvv=vKvvvvvvv=vvvKvvvvvKvvKvvvvvvvvvvvv=vvvvvvvKKKvvvvK=vvvvvvv=KvKvvvvKKvvKvvv=vvvvvvvvvvv==vvvvv=vvv=vvvvvvvK=vvv=vvv=vvvvv=vKvvvvvvKvvKKvvvvKKvvvvKvvKKvvvvvvv=vvvvvvvv=vvvKvvvvvvKKvvvvKKvvv==Kv=v=vvvv==v=vv=vvvvvvv=vvvvKKKvvvvKKvvvvvKv=vvKvv=vvvv=vKvvvvvvvKvK=vvvvvKKvvvvvv=vvvvv=KvvvvvvvKv=vvvvvvK=vKKvvKvvKvvvvv=v=vvvvvvv=vvvvvvvvKKvvvvvvvv=K=vvvvKvv=vvvKvv=v=v=vvvvvvvvv=vv=vv==v=vvvvvv=vvvvvvvKvvv=vvvv=vv=vvvvvvvvvvKKvv==K=vKvvvvvvKvv=vvvvvKvvv=vvvvvvvvvv=vvvvvvvvvvvvvKKKvvvv=vvv=vvvvvvvvv=Kvv=vvvvvvvvKKvvKvvv=vvvvvvvvv=Kvv=vvv=vvvvvvvK=vvvvvvvvvKKvvv=KvvvvvvKv==vvvKvv=vvvKvvKKvvvvvvv=vvvvvv==vvvvvvvvvvKKvvvvKKvvvvK==vvvv=v=vvvvvv=Kvvvv=vv=vvvvvvv=vvvvKKKvvv=vvKvvvvvKv=vvvvvvvv=vvv=vvvvvv=vKvvvvvvvKvv==vvvvvK=vvvvvvv=vvvvvvv=vvKvvvvv=vvKvvvvvKKv=KvvKvvKvvvvvvKv=vvvvvvv=vvvvvvvvKKvvvvK==vvvvvvKKvvKvv=vvvvvv=vKvvvKvvv=vvvv==v=vv=vvvvvvvKvvv=vvvvvvKvvvKvvvKKvvvvv=KKvvvvvKvvvKvvvvvv=vv=vvvvKKvv=vvvvv==KvvvvKvKvvvvvvvK=vv=vvvvvvKKvvKvvv=vvvvvvvvKKKKvvvvvvvvK=vvvvvvvvvvvvvKKv=KvvKvvv=KvvvvKvv=vvvKvvKKvvvvvvvvvvvvvvv=vvvvKvvv=vvvvv=KvvvvKKK==vvvvKvvKvvvv=vKvvvv=vv=vvvvv=vvvvvvKKKvvv=vvKvvvvvvvvv=vv=vvvvvv=vvv=vvvvvv=vKvvvvvvvKvv==vvvvvKKvvvvvKvvvvvvv=vKvvvv=vvKvvvv=Kv=KvvvvKvvKvvv=v=vvvvvvv=vvvvvvvvKKvvvvK==vvvvvv=vvv=vvvKvv=vvvvvv=v=vvvvvvKvvv=vvvv==v=vvvvvvvv=vvvvvvvv=Kvvvvvvv=vv=vvvvvvvKKvvvvvvv=KKvvvvv==vvvvvvvKv=vvvvvv=vKvv=vvvvvvvvK=KvvvvKv=vvvvvvK=vKvvvvKKvvKvvKvvvvKKvvvvKKvvvvv==vvvvKvKv=Kv=vvKKvvvv=vvKvvv=K=vvvvvvvvvvvvvvv=vvvvvvKvvv=vvv=KvvKKK==vvvvKvvKvvvv=vKvvvv=vvKvvvvvKvvv=K=vvvv=KvvvvKvv=vvvvvvvvv=vKvvvvKvvKvvvvvvvKvv==vvvvv=vKvvvvvKvvvvvvv=vKvvvv=vv=vvvvv=KvvKKvv=vKvvv=Kvvvvvvvvv=vvvvvvvv=vvvKvvvvv==vKvvvvKvv=vKvKvvvvvvvvvvKvKvvvvvvvv==vvvv==vvKvvvv=vvvv=v=vvKvKvvvvvKvvKvvvvv=Kv=vvvv=v=vvvvvvv=vv=vvvvvvvv=vKvvv=vvvvvvv==vv=vvvv=vKvvvvvvKKvvKvvvvKvv=vvvvvvvKvvv=vvvvKKvvvv=v=vvvvvvvv==vvvvvvv=vvv=vvvvvvvKKvvKvvv=Kvv==vvvv=K=vvvvvvvvvvv=vvvvvvKKvvv=vvv=vvvvKKvvvvK==vvvvKvvvKvvvvvvK=vvvvvv=vvv=vvvvvvvKvvvvvvv=KKvvvvvvvKvvKvvvKvvvKvvv=vKvvKvvKvK=Kvvvvvvvv=vvv=vvvvv=vvvv${$ VMS.BCK [V9.DOCS]IPD255.PS;21EXE;16FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF%Z VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1iFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&! VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF'! VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFF(1>M VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1(FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF*/ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1&[FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 6 6 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3126 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1314 (Color Correction) 0.072021 0 430 1 15 A1` /AA 220 220 w1` -825 -1210 (Icon colors use a linear scale: the 50% values in ) 2.078735 0 981 10 49 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 156 -1210 ("32767,32767,32767") 0 0 440 0 18 A1` /AA 220 220 w1` 596 -1210 ( specify a medium) 2.078781 0 379 3 16 A1` -975 -1156 (gray. Real graphics hardware is nonlinear. When the underlying graphics system does not correct) -2.13446 0 1950 13 94 A1` -975 -1101 (for this, Icon applies its own ) 0.608826 0 588 6 30 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -387 -1101 (gamma correction) 0.608841 0 332 1 15 A1` /AA 220 220 w1` -55 -1101 (. The ) 0.608826 0 112 2 5 A1` /AC 220 220 w1` 57 -1101 (gamma) 0 0 153 0 4 A1` /AA 220 220 w1` 210 -1101 ( attribute controls the amount of such) 0.608826 0 765 6 37 A1` -975 -1047 (correction. A value of 1.0 provides no correction; values between 2 and 3 are appropriate for most) -1.67131 0 1950 16 97 A1` -975 -993 (uncorrected monitors.) -0.042725 0 449 1 20 A1` /AB 260 260 w1` -975 -864 (Mutable Colors) 0.022781 0 391 1 13 A1` /AA 220 220 w1` -825 -760 (On systems with changeable color maps, Icon supports color map access through ) -0.265671 0 1651 12 77 A1` /AD 220 220 w1` 826 -760 (mutable) 0 0 149 0 6 A1` -975 -706 (colors) 0 -0.008209 108 0 5 A1` /AA 220 220 w1` -867 -706 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -825 -626 (NewColor\(s\)) 0 0 255 0 10 A1` /AA 220 220 w1` -570 -626 ( reserves a color map entry and returns a negative integer) 0.189575 0 1169 10 57 A1` /AC 220 220 w1` 599 -626 ( n) 0.210678 0 38 1 1 A1` /AA 220 220 w1` 637 -626 (, a mutable color) 0.18959 0 338 3 16 A1` -975 -572 (representing that entry. If) -0.006332 0 519 3 26 A1` /AC 220 220 w1` -456 -572 ( s) -0.007034 0 36 1 1 A1` /AA 220 220 w1` -420 -572 ( is supplied, the entry is initialized to that color.) -0.006332 0 966 9 52 A1` -825 -493 (An integer returned by ) -2.417709 0 469 4 22 A1` /AC 220 220 w1` -356 -493 (NewColor\(\)) 0 0 232 0 9 A1` /AA 220 220 w1` -124 -493 ( can be used as a color specification. For example, ) -2.417633 0 990 10 51 A1` /AC 220 220 w1` 865 -493 (Fg\(n\)) 0 0 110 0 4 A1` /AA 220 220 w1` -975 -439 (makes a mutable color the foreground color.) 0.007858 0 899 6 42 A1` /AC 220 220 w1` -825 -360 (Color\(n, s\)) -1.074783 0 213 1 10 A1` /AA 220 220 w1` -612 -360 ( sets the color map entry of) -0.967041 0 542 6 27 A1` /AC 220 220 w1` -70 -360 ( n) -1.074783 0 37 1 1 A1` /AA 220 220 w1` -32 -360 ( to the color ) -0.967087 0 247 4 13 A1` /AC 220 220 w1` 215 -360 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 238 -360 (. This changes the appearance of any) -0.967041 0 737 6 35 A1` -975 -306 (pixels of color ) 0.001144 0 296 3 15 A1` /AC 220 220 w1` -679 -306 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -654 -306 ( already drawn as well as affecting those drawn subsequently.) 0.001144 0 1260 9 60 A1` /AC 220 220 w1` -825 -226 (FreeColor\(n\)) 0 0 260 0 11 A1` /AA 220 220 w1` -565 -226 ( frees a color map entry when no longer needed, and can be used with normal) -2.571274 0 1540 15 74 A1` -975 -172 (color specifications as well as mutable colors.) 0.015457 0 915 6 46 A1` /AB 260 260 w1` -975 -43 (Color Palettes) -0.056564 0 364 1 13 A1` /AA 220 220 w1` -825 61 (Color palettes are fixed sets of colors \(or grays\) used for drawing or reading images. Icon\325s) -2.192322 0 1800 15 92 A1` -975 115 (color palettes are+ԘF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1" described in Appendix F.) -0.010101 0 868 6 42 A1` /AC 220 220 w1` -825 194 (PaletteKey\(palette, color\)) -1.162735 0 514 1 25 A1` /AA 220 220 w1` -311 194 ( returns a character from the given palette representing an entry) -1.046219 0 1286 10 64 A1` -975 249 (in the palette that is close to the given color.) 0.001984 0 887 9 47 A1` /AC 220 220 w1` -825 328 (PaletteColor\(palette, s\)) -1.690994 0 467 1 23 A1` /AA 220 220 w1` -358 328 ( returns the color represented by the single character ) -1.521576 0 1063 9 54 A1` /AC 220 220 w1` 705 328 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 728 328 ( in the given) -1.521545 0 247 3 12 A1` -975 382 (palette, or fails if the character is not a member of the palette. The color is returned in the same form) -3.679001 0 1950 20 104 A1` -975 436 (as produced by ) 0.00502 0 324 3 14 A1` /AC 220 220 w1` -651 436 (ColorValue\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` -394 436 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -825 515 (PaletteChars\(palette\)) 0 0 433 0 20 A1` /AA 220 220 w1` -392 515 ( returns a string containing the characters that are valid in the given) -0.498779 0 1367 12 70 A1` -975 569 (palette. If fails if the palette name is invalid.) 5.066025 0 926 8 48 A1` /AC 220 220 w1` -49 569 ( PaletteGrays\(palette\)) 5.630173 0 451 1 21 A1` /AA 220 220 w1` 402 569 ( returns only the characters) 5.066147 0 573 4 27 A1` -975 624 (corresponding to shades of gray, ordered from black to white.) 0.00737 0 1255 9 60 A1` /AB 260 260 w1` -975 753 (Drawing Images) 0.015457 0 415 1 13 A1` /AC 220 220 w1` -825 857 (DrawImage\(x, y, spec\)) -1.945648 0 455 2 20 A1` /AA 220 220 w1` -370 857 ( draws an arbitrarily complex figure in a rectangular area by giving) -1.750793 0 1345 11 67 A1` -975 911 (a value to each pixel in the area. ) -1.812592 0 644 8 34 A1` /AC 220 220 w1` -331 911 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -308 911 ( and ) -1.812683 0 97 2 4 A1` /AC 220 220 w1` -211 911 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -188 911 ( specify the upper left corner of the area. ) -1.812637 0 814 9 43 A1` /AC 220 220 w1` 626 911 (spec) 0 0 97 0 3 A1` /AA 220 220 w1` 722 911 ( is a string of) -1.812683 0 252 4 14 A1` -975 965 (the form ) -1.253067 0 183 2 8 A1` /AC 220 220 w1` -792 965 (") 0 0 16 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-Oblique /AE /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -776 965 (width) 0 0 107 0 4 A1` /AC 220 220 w1` -669 965 (,) 0 0 13 0 0 A1` /AE 220 220 w1` -656 965 (palette) 0 0 138 0 6 A1` /AC 220 220 w1` -519 965 (,) 0 0 13 0 0 A1` /AE 220 220 w1` -506 965 (data) 0 0 89 0 3 A1` /AC 220 220 w1` -417 965 (") 0 0 16 0 0 A1` /AA 220 220 w1` -400 965 ( where ) -1.253067 0 147 2 6 A1` /AE 220 220 w1` -253 965 (width) 0 0 107 0 4 A1` /AA 220 220 w1` -146 965 ( gives the width of the area to be drawn, ) -1.253098 0 815 10 41 A1` /AE 220 220 w1` 669 965 (palette) 0 0 138 0 6 A1` /AA 220 220 w1` 807 965 ( chooses) -1.253067 0 168 1 7 A1` -975 1019 (the set of colors to be used, and ) -0.010483 0 646 8 33 A1` /AE 220 220 w1` -329 1019 (data) 0 0 89 0 3 A1` /AA 220 220 w1` -239 1019 ( specifies the pixel values.) -0.010483 0 524 4 27 A1` -825 1099 (Each character of ) -4.496017 0 345 3 17 A1` /AE 220 220 w1` -480 1099 (data) 0 0 89 0 3 A1` /AA 220 220 w1` -390 1099 ( corresponds to one pixel in the output image. Pixels are written a row) -4.496017 0 1365 13 70 A1` -975 1153 (at a time, left to right, top to bottom. The amount of data determines the height of the area drawn.) -1.521667 0 1950 19 99 A1` -975 1207 (The area is always rectangular; the length of the data must be an integral multiple of the width.) -0.001602 0 1927 17 96 A1` -825 1286 (The data characters are interpreted in paint-by-number fashion according to the selected) 0.926788 0 1800 11 87 A1` -975 1340 (palette. Spaces and commas can be used as punctuation to aid readability. The characters ) -5.035156 0 1743 14 88 A1` /AC 220 220 w1` 769 1340 (~) 0 0 27 0 0 A1` /AA 220 220 w1` 795 1340 ( and ) -5.035156 0 90 2 4 A1` /AC 220 220 w1` 886 1340 (\\377) 0 0 89 0 3 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 7 7 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3127 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` /AA 220 220 w1` -975 -1337 (specify transparent pixels that do not overwrite the pixels on the canvas when the image is drawn.) -2.661575 0 1950 16 97 A1` -975 -1283 (Punctuation and transparency characters lose their special meanings in palettes in which they) 4.522598 0 1950 12 92 A1` -975 -1229 (represent colors.) -0.05127 0 335 1 16 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1125 (An Example) -0.063889 0 262 1 9 A1` /AA 220 220 w1` -825 -1021 (The following example uses ) 0.746429 0 581 4 26 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -244 -1021 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` 21 -1021 ( to draw spheres randomly. Transparent pixels) 0.746445 0 954 6 44 A1` -975 -967 (are used for better appearance where the spheres overlap. The inset shows a magnified version of) -2.285324 0 1950 16 96 A1` -975 -912 (a single sphere.) -0.027267 0 313 2 15 A1` /AC 200 200 w1` -900 -836 (WOpen\("size=400,300"\) | stop\("can\325t open window"\)) -0.023392 0 960 4 48 A1` -900 -786 (sphere := "16,g16, ~~~~B98788AE~~~~_) 0.012482 0 769 3 35 A1` -900 -736 ( ~~D865554446A~~~) 0.028488 0 423 3 18 A1` -450 -736 (~D856886544339~~ _) -0.080566 0 416 1 17 A1` -900 -686 ( E8579BA9643323A~) 0.026047 0 425 3 18 A1` -450 -686 (A569DECA7433215E_) 0 0.000046 426 0 16 A1` -900 -636 ( 7569CDB86433211A) -0.008957 0 429 3 18 A1` -450 -636 (5579AA9643222108_) 0 -0.003311 403 0 16 A1` -900 -586 ( 4456776533221007) -0.026855 0 405 3 18 A1` -450 -586 (444444333221000_) 0 0.004333 371 0 15 A1` -900 -536 ( 4333333222100008) -0.026855 0 405 3 18 A1` -450 -536 (533322221100000A _) 0.072433 0 410 1 17 A1` -900 -486 ( 822222111000003D) 0.028488 0 412 3 18 A1` -450 -486 (D41111100000019~_) 0 0.004074 402 0 16 A1` -900 -436 ( ~A200000000018E~) 0.01004 0 417 3 18 A1` -450 -436 (~~A4000000028E~~_) 0 0.006256 408 0 16 A1` -900 -386 ( ~~~D9532248B~~~~") 0.019531 0 440 3 19 A1` -900 -336 (every 1 to 100 do) 0.025635 0 322 4 16 A1` -900 -286 ( DrawImage\(?380, ?280, sphere\)) -0.003906 0 635 5 31 A1` -900 -233 (WDone\(\)) 0 -0.003387 167 0 6 A1` /AB 260 260 w1` -975 -104 (Bi-Level Images) 0.061035 0 412 1 14 A1` /AC 220 220 w1` -825 0 (DrawImage\(\) ) -1.762131 0 276 1 11 A1` /AA 220 220 w1` -549 0 (accepts an alternative specification form ) -1.585632 0 817 5 41 A1` /AC 220 220 w1` 267 0 (") 0 0 16 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 284 0 (width,#data) 0 0 234 0 10 A1` /AC 220 220 w1` 518 0 (" ) -1.762131 0 27 1 1 A1` /AA 220 220 w1` 545 0 (for images composed) -1.585632 0 430 2 18 A1` -975 54 (of only the foreground and background colors. The data field is a series of hexadecimal digits) 3.965698 0 1950 15 93 A1` -975 108 (specifying row values from,_S VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1m1 top to bottom. Each row is specified by) -1.448242 0 1339 11 65 A1` /AC 220 220 w1` 364 108 ( width) -1.609558 0 118 1 5 A1` /AA 220 220 w1` 482 108 (/4 digits, with fractional) -1.448273 0 493 3 25 A1` -975 162 (values rounded up. An example of a 4-by-4 specification is ) -0.005493 0 1200 10 58 A1` /AC 220 220 w1` 225 162 ("4,#9BD9") 0 0 211 0 8 A1` /AA 220 220 w1` 435 162 (.) 0 0 11 0 0 A1` -825 242 (The digits of each row are interpreted as a base-16 number. Each bit of this number) 7.915527 0 1800 15 82 A1` -975 296 (corresponds to one pixel; a value of 0 selects the background color and a value of 1 selects the) 3.283615 0 1950 18 95 A1` -975 350 (foreground color. The least significant bit corresponds to the left-most pixel.) 0.002808 0 1539 10 78 A1` -825 429 (If the data field is preceded by the character ) -5.62175 0 849 9 46 A1` /AC 220 220 w1` 24 429 (~) 0 0 27 0 0 A1` /AA 220 220 w1` 51 429 ( instead of ) -5.621597 0 205 3 11 A1` /AC 220 220 w1` 256 429 (#) 0 0 25 0 0 A1` /AA 220 220 w1` 281 429 (, the image is written transparently:) -5.621597 0 694 5 36 A1` -975 483 (Bit values of 0 preserve existing pixels instead of writing the background color.) 0.007553 0 1601 12 80 A1` /AB 260 260 w1` -975 612 (Patterns) 0 -0.011337 217 0 7 A1` /AA 220 220 w1` -825 717 (The) 0 0 77 0 2 A1` /AC 220 220 w1` -748 717 ( fillstyle) -3.279602 0 147 1 9 A1` /AA 220 220 w1` -601 717 ( attribute, normally) -2.95108 0 388 2 19 A1` /AC 220 220 w1` -213 717 ( solid) -3.279602 0 104 1 5 A1` /AA 220 220 w1` -110 717 (, can be changed to cause the drawing operations to fill) -2.951004 0 1085 10 55 A1` -975 771 (areas or draw lines using a pattern. If the fill style is) -3.188431 0 1013 11 56 A1` /AC 220 220 w1` 38 771 ( textured) -3.543076 0 175 1 8 A1` /AA 220 220 w1` 213 771 (, both the foreground and background) -3.188431 0 762 5 35 A1` -975 825 (colors are used. If the fill style is) -2.476151 0 633 7 36 A1` /AC 220 220 w1` -342 825 ( masked) -2.751526 0 170 1 6 A1` /AA 220 220 w1` -171 825 (, pixels not set to the foreground color are left unchanged.) -2.476089 0 1146 10 59 A1` /AC 220 220 w1` -825 904 (Pattern\(spec\) ) -4.099533 0 284 1 13 A1` /AA 220 220 w1` -541 904 (sets the pattern attribute, the pattern to be used when the fill style is not ) -3.688461 0 1411 15 77 A1` /AC 220 220 w1` 869 904 (solid) 0 0 94 0 4 A1` /AA 220 220 w1` 964 904 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -975 958 (spec) 0 0 97 0 3 A1` /AA 220 220 w1` -878 958 ( is a bi-level image specification of the type used with ) 1.243561 0 1109 11 56 A1` /AC 220 220 w1` 230 958 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` 495 958 ( or one of the following) 1.243561 0 480 5 23 A1` -975 1012 (predefined names:) -0.056961 0 377 1 16 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:GIPD4.tiff %ALDImageDimensions: 402 302 %ALDImageCropRect: 0 0 402 302 %ALDImageCropFixed: 0.00000 0.00000 402.00000 302.00000 %ALDImagePosition: 347.050 461.400 347.050 606.350 540.000 606.350 540.000 461.400 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 42336 33161 28442 61275 3277 46858 37617 24248 65535 19529 15335 11403 56229 7274 51642 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599502 0.000000 0.000000 9.599338 821.000000 -4207.000000] concat false 402 302 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 246137 Hex Bytes isCL^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF-U%V VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1W@FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB 815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB81 4C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.ȋ: C  TVMoP5 I O1E@S C^URYWYTDBAT sR-*9@WpQm sv@bQLEhxM| YLMT >"@0:Br KuQ-taaRvDss[E@?WP5 UPSI\S^EMSF L W\YF_VWIB*+K57^T5T@HIEPSTX F EN GDHUEDpWUXP_HZEFUut FWWP A T LTYUEDXT@ZSC]]CKE_KAPEaV {J/cC]^_RYPJ}Awv]  bBoqc[WpQ& s?bQLE#<\YOCjPIBLTDEBm oY=JYeHWD(V 2\a. WQCZBO4H\TV@HRM"aJ"bY EN^ZOUKS  DB EETKGM [ATZC K 9Y- t4a ]@BEAB_Ne4 .ZNVHIP3m[7fS_U_Fa@~J-$CF TZWBR jE]MNWY[ODONA EAGT BWBPXPCS@_EyVwL FHAUPT5TL- KSAZYCAv9M{tRGA RGStM TLOAM NI\ TPT \R1POF Kx8::7boL|osnEODE[H_B  K^qR= u-pQT\VD?cY=`AC  EJETKTWTXEQ\AAAR E3-tmSC@4 aS;i^]BvS^EE+<$P_II s@=q*aR=ssE ?RCT>~lPof[I_BTUAT.W@$lvE WP8F@Zp@% /EFFUcZSBS+l^PBTQnB [[apm"nadvIf!Fm  ZAESII APNOHHCYP\EE]XQRBAYIWI/.HPVQVrG@NVECK^UA@EDUR7T@hUPDAI[Qo& ~r]T ]T,DFLORETL @DIOOEITR[y! pPfp=dibF _n5lfpf>S 15]tNZsiR EsZ[IK=@OC M[P]TLLa@Ji2IvIqtcZ\s@z/LMnoMIR ELFDZHRZYNCAE @$lp  WT9 pZH!h,TZDHWOTLBF]UX_Uv  I LF^OJTCKVD;QFQ'X a27Y^IAP ET: ZLaS-assP-sqEu&fiwYW R8 UAJZT^ KT\WLBHUD @ECKZE'E@n@3/E@ FXEWPhLC^XULKOM VTaE-[)&T] EU@UU@nY^YRPE^ U^C.7&3TEQlN9wq WP- aQwicAQAFBIV@bhRTDE@nGTW|hI-FKHDHWR95gllN?rqsdKvuAEZX-lT<xsEFATT@}LCMWRW]TT\P@BETU BU@ 5EJTS ;fZWPDB;cQ!  C rLC IT #H_XSLQWW$.3D-te\n?RpU E^UT[QQ 8S dI\mhM  J og;"@%U8P;;t\3;3v.6!'e(!,35l%blf!fu`q'[ias/=EWt^-hL ;7C5yZk"6-uv ! v@I26 h4$&sc5+$czngh7vl1e!o}r"oc;RSM~v1g_?xvsirp87`;:)<1y#<%")n,q##$x$V7~:+`-l Mv]rt*i&&%[{G[^Zoct:/;#84,!85l`b>6HiN:s)%!3B5D #""u`svnv!.+9}#7R8  .$!%I$)&Jb63#lafwP= sxwvwf~6XW3CUyf)0.%+4)45f2sU_/Jhru?xk{"695|x>sql~pffbvsnb5fev)i&Nifrju(tdsb1i&Kker`"ur4vk&l,'offbpg`{fvf`{_8PRrW|_L1{/9o}6Jntkfw-vzf;f560^\[Zh7.{P9jp|Gc&e-:#pD6[6*-H&@p+[Dit#)nc?sfg=afn&;.f%>? {ta3-[8;{5*w9 51$#Jqfq5#Y>Hf~z212!R*'i+["sB~lv$epe:5Af:{mr$2 i='*b[!Gven3Qz7`Td>|jal)c7Wc`383$3"*=Sd!Z[t"m=|bMm*vr%(>+7sams$12Ay/:.$,w)r;?%lwg22#);!cuyq5 43!"46~?tc["Cl))j/d8zevv43-!qm `+@$/zf":%.t+3q`7j+av|3(2#!pu{(h{fGm{#G b<&#)?'"x.io&8bEufwp(4[yr-o6,2$Y,4]l =kHe#KcenRSl u<)h'`j"["!N{qBdt(Uap9zjqv.&r|7g"%t'rnqg/{r:f$UBlySJAPFWfy/m}|+5S9x("ZxiUb=)a{}mr MG;O.Kibu~$;"<"yf=u6y}ac1v5Ov)[?(""3xw>Uirv=.s3vQ9o{ (u,')8&4vpY0s^-w4%8Yz!';?$(h29`6/6=$3u '%d./C.8KP:f@K/g A5_"tbmYkG~H7ca`$+2\gp9j*?mw2Mr:i+7dx:i;O3~]oAFUjhRD^>V!O]C0Zt.+<DS1~n.\7c(fiIwz $;*56a,33>l!brsvc:+1J|[dd~hvv`rv@mno?, I07873w%oV,-)ood4C*y7hfvj={gk,zon')9EwT K~s>[e=dE47+14}ua3e[07J{J]^$Xs&!++01Y&6WOihjkG{F:,Ld98v~[vxgn[& C7p3jkgxijyxh`vv;}"!6l :4 s21:M67%$=2,:)$Gp}n8yZR20DK4R/-/3?(9h ;$8g=w:;(-9vc.!85i5wwr`E>TOBsG_?'7f>%6"!`5s[K%1x(:/8#753Ccr9{=+>"vW8vs 7<&8 c#37.B,'5 6>|53G. ):%{(72-#(4{x%"fd{uxsu8V- g'B w6Jt8@L#j:{6ssviuwf0g>4=a7>24ie51k&reo7f3q$~lv&xs}8`v61s#"=d4>'"c*!=.91f9A"d +"gnk@UD"+eqwq=sKpp:`s}Rrv9tlp}T3 NkpGp7kl8})^uy65V `h?  T"*73)8 lC&zsZA{&W[6L7:Q%`z:,A@3' g 8E8'=f5,%47b3sBQv}2#v2>#?5v-D4t||3v*3C8{jcXQ/=&+#3";b7ru7!}pgl3ajz`1bhmr?{wz,ffg|ptvvdgzd\'Taqdkgvvvb5s )&0353g%(qz*%G 3{oxvmqtynt`eucgvdgrvgWw2ID50I'?RIrVgEN0*:#SNL[F_NE{E\VQT(J me-D?qbL(n?RmyUL[TEYRA)[R=B<L A1OS EXP bZJGv{@"[x)k WJ :b^GV-a@< uYANZ|C 4HZ\OCsVI-EeM BU P__XYRVKSWO]D@ERTPO/ @{f4E REFEUER-LVV PBWA.RQ7&M  WYLHERB O[pT-t\=b]VVC~`JK  JLrAE QRF_N@qE]VWDIiPm"nbNio&iohY]hYPT"v2no|; EXra@VG B]Zn?v{X@ZWS-m"qarLR $ aKIW;V{N BIAEE7]=A =FM:4*EC]ZZRM&6gb%@/*SGB@O@FC^ b@MLASRCMSOT KGPAE_U]DXS^\YaCA_APVE/E@}F9!LAW]UfM4EoA\ `p_g7BU2T-KVEBHDSRC HNSE FUB]DQECHHU%W_dm..PPlcw(RdLmGr|zN(]!(a'fIIGVIUDGEBSYO/Zk*nGZQ4 `RZ1YO_eA|HCI^G^PS@HTBEo@ ToqNwhf|gcF|7AzHqaV?ak@UCE@ USWP@nBU_B@E h= E2L OZCM^UE=]?|%kJ9O HLhct~Ng]7@g3\-Y:BamlNvrp ZT5^x@   YAAXSE] QGVwV@sQ??b  s>^ ORkqKtnGA[LTRB_P"Gb_[ MFd uT;l IKB F]HRUSQ\GIGLH E@hC@G ~Nj O_O/2thpl9C`v0g{uOV- K> bqYa?S@=qsOYBS- qM8DEEUX1Y_\ "(5_V\EG<@SI^GDYQ]LEPBOTYWaR*BKpkMfhXYurbsQL *]METECR$ECQQBT vqKM m:M=J:suv g'; rV- uvN + (GLRhilN=wyYDQ5 pHT-K [WNVQ_AGQWRAPS_3 R KSRZPRTZX_f^G$I`]UUvr^hrW HJy@ os NG@> 'p]Biw"xp_} qwtuwrfw&:UhWW@9 \HxH`LRUCL_UCTIBLEQ](+ ,3Y[V_BV#[OE@T[[TWR  *DK(~tkjrdL<NvbsFRSwOX |VSI- MaufJvf:P=Tr};ic|vn0=COwpjs #YGDHHPYLG gU@[U^DBIW#W^r [IwZ!Sv@  ozEX,1|^5_ DwS-tcaRvDsq[E@?BP-rEXWd^QQEtFu  [ \pP-VvwHYs@zW:FrqW@7 '.LX P L LR IE QANFSQXT ATLMsP-au[sJ ?:cWR=WB$ pvSETNNKXO/A0Q [B]T';yNR]U%T2#\.4RQW T]^TW2ped6Y7Ikx I5TdOEa7 iFEF[ D_kp PAZ'IEL;H- o NXS-ZWP24Q \eDd+R_S\ BQ?cGP-P;Rx'sisJ#?u"G+I36c OJI_NCS@WUL][ 2F3[ !LWSO^]BSY@= it[oW]xpauaPRira3d#9{3EH}aVDHNZXZRpIAATGHGHCSZ[EYGET sZP-PrqKs@zY:S^F,v`"nR DF]JDBYRNOR/O&HR=BF] V0;uzrp jw~(i I FGI=FNo Dg)Yl0xulfvzeudULtjP5{gx3RSYA LWP F/6 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1$OFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C 6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E 92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E 92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F 92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C 5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B 3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C 2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C 2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFB79281 6F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C 1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0Q: VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;15^FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFDB815E4C4C 4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C 0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFDB814C5E8181 5E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C 0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFEF814C6F92B7A5 925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 3B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF6F4C5E92C9DBB7B792816F8181A5EFA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9 A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF4C4C6F92A5DB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7 815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F81 81A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF3B3B4C5EDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A592 5E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B 3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF3B3B3BEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E 4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C 3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF3B2C2CA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C 2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E 3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF4C2C2C6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C 1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F 3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF811C1C4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C 1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF19 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1dmFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E 3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFDB3B0C3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C 0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B 2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFA51C3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C 0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C 2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EF2C1C1C3B81B7FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA53B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C00000000 00000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C 1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000 000000001C81B792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C 1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C 1C1C3B81DB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C 0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFF FFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C 00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFF FFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000 000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFF FFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C000000000000 0000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFF FFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B0000000000 00001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFF FFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFF2 6p VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 |FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C 3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFF FFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFF FFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFF FFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006F6F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFF FFFFFFFF3B2C2C2C2C2C2C1C1C1C0C00000000814C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFF FFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A55E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF811C1C1C1C1C0C0C0C00000000002CDBFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFF FFFFFFFF811C1C1C1C1C0C0C0C00000000002CDB925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFDB3B0C0C0C0C0C0000000000000C92FFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFF FFFFFFFFDB3B0C0C0C0C0C0000000000000C92C9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA51C0000000000000000000C81EFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFA51C0000000000000000000C81EFB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFA53B000000000000001C81EFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA53B000000000000001C81EFA5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3< VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFDB924C2C1C1C3B81B75E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F81 81A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B 3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C 3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E 3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F 3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E 3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4{ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1GFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B 2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C 2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB79281 6F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C 1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C 4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C 1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFB792DB814C5E8181 5E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C 0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F 8181A5EFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFDB815EEF814C6F92B7A5 925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C 00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C 3B3B3B5EA5FFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFDB814C5EA54C5E92DBEFC9 A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000 000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E 4C3B3B2C2C92FFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFEF814C6F926F4C5E92C9DBB7 815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C000000000000 0000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A592 5E3B2C2C1C2CA5FF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFA54C5E92DB4C4C6F92A5A592 5E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B0000000000 00001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A5 6F3B2C2C1C0C4CEF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFF6F4C5E92C93B3B4C5E6F6F5E 4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C25/)F VMS.BCK [V9.DOCS]IPD255.PS;22EXE;1C1C1C 3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB781 5E3B2C2C1C0C0CA53B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFF4C4C6F92A53B3B3B3B3B3B2C 2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB79281 6F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E 3B2C1C1C1C0C00813B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFF3B3B4C5E6F3B2C2C2C2C2C2C 1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C 4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C 2C2C1C1C0C00006F3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFF3B3B3B3B3B4C2C2C2C1C1C1C 1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 92816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E8181 5E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFF FFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EF3B3B2C2C 2C1C1C0C0000006F4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFF3B2C2C2C2C811C1C1C1C1C0C 0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFDB815E 4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5 925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FF FFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA52C2C1C 1C1C0C0000000081811C1C1C1C1C0C0C0C00000000002CDBFFFFFF4C2C2C2C1CDB3B0C0C0C0C0C 0000000000000C92FFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFDB814C5E 81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9 A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92 FFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C921C1C 0C0C0000000000A5DB3B0C0C0C0C0C0000000000000C92FFFFFFFF811C1C1C1C1CA51C00000000 00000000000C81EFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFEF814C6F92 B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7 815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2C A5FFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA50C 0C00000000002CDBFFA51C0000000000000000000C81EFFFFFFFFFDB3B0C0C0C0C0CA53B000000 000000001C81EFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFA54C5E92DB EFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A592 5E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C 4CEFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEF 00000000000C92FFFFFFA53B000000000000001C81EFFFFFFFFFFFFFA51C0000000000DB924C2C 1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFF6F4C5E92C9 DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E 4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C 0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5 000000000C81EFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFA53B000000000000001C 81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FF4C4C6F92A5 A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C 2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF6 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1~hFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081 0000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FF3B3B4C5E6F 6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C 1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00 006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006F 1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFF3B3B3B3B3B 3B2C2C2C1C1C0C0000006FFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C 1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000 006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFF3B2C2C2C2C 2C2C1C1C1C0C0000000081815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C 0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C000000 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FF4C2C2C2C1C 1C1C1C0C0C0000000000A54C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C 0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C00000000 00A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FF811C1C1C1C 1C0C0C0C00000000002CDB6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFA51C00000000 00000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C0000000000 2CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFDB3B0C0C0C 0C0C0000000000000C925E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFA53B000000 000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C 92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFA51C0000 000000000000000C81EF5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFDB924C2C 1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81 EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFA53B00 0000000000001C81EF4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFDB92 4C2C1C1C3B81B7FF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF7G VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFDB4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEF81811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA54CDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6F4C5EA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4C4C6F92A53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3B3B4C5E6FDB924C2C1C1C3B81B7006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8Jɑ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1qFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2C A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C 4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C 0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00 006FFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792 816F8181A5EF4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000 006FFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA51C0000000000000000000C81EFA5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C 4C4C3B3B3B5EA53B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C000000 0081FFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFA53B000000000000001C81EF3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81 815E4C3B3B2C2C922C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C00000000 00A5FFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B75E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7 A5925E3B2C2C1C2CA52C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C0000000000 2CDBFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFF FFFFFF9=%9w>qv{Opsrt?Nw<vvvvvpI~wrs~w~uw7pIur us5wsKusvus qrLLsrrtwwO=vKrqvvKvvKOuvNvvvvvvv=v}Nqwpq}vtJ vvvvpKKKuu9s;wvusstJNws8sqssuv=vvv=vvvtrwr8 ?~wsrqzwwwqwz?9uuussKKr9NptsstsutNwwNwvvv~wKvvv=vvw~wvNspK4tsstsuKtwNwwv5vK9v qvsFwpq|Ls3utu vqsvu=tJ wsvvvvv=vsOsv qx8t8HutwwwsN~<uurspKwM qptpvqMr8wts>vuurspKp8Hrtpzwu=rIs q|wvs Mwt;tzt~={8puts9Isppsr?t<wvvO;pu yvqu8vvu us=qqLswvvvvuvCLrKptqsts>t?wtsKKvvKvvKu>u>uutttu>uppsswJNvsKr vvv=vvv=vuv5~:svw}vqvw{{N8uutt4tKu>OrsppsrttNwwNvvvvvpKwuO~wqvOrrN8ppsrtKtwNwvvv;vvK5wwwwwwvHrprHu8 uwu|rptqNsuvJpssqvvvvv=vrHr tspKs9Nttwwvs=pKuuuuu8M qvtrzqv=r8wrt q}wp2 rrwvuuuOu?Nttww9r<rt{0tu:qprr {pq>p~9@suuutt?w<vvvvH9qqptspu8tts=rzNwvvvvvvqO0Ktsp>t?wvrKKvvKvvKu?t?tttwwOuuuutttwNwvNvvvvvvpKKvOruO>uutttKwwNv wp;5>vvvvvrIsst ?s=v}rptwt~=sJsvvvvv=rr =|vzzH?Ntwwvv=pKuttttuKMqrzurt>r8 r ruvr>rwsvttNt?Nwwwvr8sN~ ~  p s=sLwrwru{ttsC psHutws88vttttw<w=vvvvvH t>urt9twwp5~q9qvuvvvvvvvOIKtq~ws>t?wvv8KvvKvvKvt?z{Huw{{v=Nvv=vvvvvvvsp9stq:zItuzztLtKqpIwv9uuww tsKKMvvsvvKvvKKKtrtptM :rw rrptrHssssssvKKKv{vOutvvvvvvvsIsssuHvpJsqsrpsvtvtt9ssKq ~utws{Iw>qwqpppp;pv?Iwvvvv=~<rtttwwNNqqvqv u9s8pvs9u qwNwuuww8KMts{t~K~<sKK~wtprNwJ|urrzrurIssssssKKK~ rv?{{Kvtwsprprqt84tvv?rvvrr>u>uvpv ?q8sutpy=D{ p r r=vuwIutt?Nttwz{uv{0q>vvvvvvsKKvNstN?wwwwvIr{OsuwsOws>Outp{vvvvvJsst stwLww?wtwtvp sz>s~K~up~wrNsq{H{vwwrps;sq9:szvvvvv=8~wwwwwpOKvus8sKu rwst8u rp=w=NvvvvvvFvs<zvpppMqqq9ppqw}?ttNtwws=v=vpKKK~wwwwwwNqvJs=vy rrruuOusJpsqsrsNKsv~J5 >Br=pr9uqvvz{Jvuwsprprs8Bv=vvvvtu>rs~wrsH~{Hvwwqpspsqrs=up=wrwww~HvM svrNHNrrsNruOussKK~wry=xp>vsrsrqppv}IssssssKKHy{Ip|9}quuprsw8?sCwz~w~ws9u> HvpIwrqtr HBqrvwqstpv=z6ttwt{pONws{vtwswswsprHrrNuqvtKKv<swN<wwvvu5sMv rqq =u>OttwpzstuI swv>vuv?vvr v v9vuIpr~p wr4 t=z }sp:sq89sqsqvvvv=sOuvvvpOJrrrss8: truvus;uvKu=Nvvvvvvvut tKp|Avtt{vwppqOqrr9w v|s0wNwwv=v=v~wKKKuvvvvNvt9 ssss1vs~w~wsruOutNt rss=s8v=C8Orrs=r9ss s A<ww{v wq vFvus wxIytCusv {uM9 pKuuuttt<w?su<~wsHruutts ?vvK~wrptLwN urss8IsqNvv~wu>u~wrp?pOzvtpsqrrs Ov8{szt|w tL |r@twqtwrt :L~Kp~w~wuKsuOutttKK~wrp q;wuOtuwwvvuvvvJtrsssuvpKI~;qwvqzt8srFuusw8>z?{tqst8u?w<pq1us  }qsv;Ottsz=q;uttwvv;Nr{wsvu{{usHrrIssz tKKvtOrvN=vvvvvq9suBtruvv8v>OttwvrLswvtrrrvtv?vtv>r rw ~8rvBwrrvspp|MtL|pqt9t8JsssuvvvN KswvvvOs8sssssK ruNu s trz~w8utsvs8q==vvvvvvvqtN s:pvp wsqOpsKq yqpsIwNvvvv=v=vsKKKswvvvvv=vvv=vvvvvvvvv~ r~sr spq=OsKttttww<uCsv zMs?suttwsNqKsrstKvAvrss8Ks9~wu?tsrstOAuvprqsv=sp ?wyrpqq>MszrK=;uuurHquOttwtsKKsrstwK>ttrtvKrrv~wO5wr>sq{}3tuH}qpww}w8:w~Hsts;u?vpH OttwvvsKsurz zu<{{5uvu s4{>rqss swAru;tt~tLG>sssqvvszz}tu w>?wuuprq ytzM>8ruurNs?ttwvrKKprstp{Np=rwwwtwJvtsvp~<9p9z s8trDstuwwuu0LwusFttq~w8u?vtLurr=tspqqsLKtu~tt =u1wwwvqNGuv{truvs qvHrr:{vrKKvvKvv8>vvvvvvvvs9svB ppHr?Nwwwvvv~wK|s wqKq9} q Drv=rrz~ru 8vttG uOLOtss~uKvvK <KrrtvNr=zvvtsvJpvvtr I?Nwwu~;tLywwvsutvFvwpKpqzqv1v=vvvvvt~Jsw1ruuu|8 wK;~w~wqtrNtwNwu~wqprNs{ r v{vvq:ppp=tvsKvvv=vvvvv~wvKOssH4t{}pvt rt< rvwHvr=ut|sq|{u MLupqvu=sIwwvvv=Is{ q p{vv:zNwvv8KvvKvvKItrt:C VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEF C9A5B792816F8181A5EF1CB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C 92FFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92B792 816F8181A5EF3B3B3B5EA55E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81 EFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4CDB815E4C 4C4C3B3B3B5EA53B3B2C2C9281815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EF FFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3BDB814C5E81 815E4C3B3B2C2C922C2C1C2CA5A5925EB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7 A5925E3B2C2C1C2CA52C1C0C4CEFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEF C9A56F3B2C2C1C0C4CEF1C0C0CA5814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DB B7815E3B2C2C1C0C0CA51C0C00814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5 925E3B2C1C1C1C0C00810C00006F5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F 5E4C2C2C1C1C0C00006F0000006F5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFF FFFFFFFFFF;K6 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1vFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B 2C2C2C1C1C0C0000006F000000816F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C 2C1C1C1C0C0000000081000000A54C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFB792816F 8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C 1C1C0C0C0000000000A500002CDB3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFDB815E4C4C4C 3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C 0C0C0C00000000002CDB000C922C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E 4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C 0C0000000000000C92000C81EF2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A592 5E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C000000 0000000000000C81EF1C81EFA51C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A5 6F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFF FFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B0000 00000000001C81EF81B71C0C4CEF0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB781 5E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFF DB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C 2C1C1C3B81B75E3B2C2C1C0C0CA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E 3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFDB 814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C 6F92A5A5925E3B2C1C1C1C0C0081A53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 92816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C 2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFEF81 4C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B 4C5E6F6F5E4C2C2C1C1C0C00006FFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF<Bh VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1%FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E 4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C 2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5A54C 5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B 3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E 81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C 1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C00816F4C 5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C 2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92 B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C 0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006F4C4C 6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C 2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DB EFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C 0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006F3B3B 4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C 1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFF6F4C5E92C9 DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C00 00000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C00000000813B3B 3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B 0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4C EFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FF4C4C6F92A5 A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000 000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A53B2C 2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 1C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0C A5FFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C923B3B4C5E6F 6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B00000000 0000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDB4C2C 2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB81 A53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C00 81FFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFB792816F8181A5EFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2C3B3B3B3B3B 3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C 1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FF811C 1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C 6FDB924C2C1C1C3B81B72CA5FFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C0000 6FFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C3B2C2C2C2C 2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFDB3B 0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E 92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C000000 6FFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C4C2C2C2C1C 1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFF=[Օ VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFA5 1C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E 92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C00000000 81FFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5 FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C811C1C1C1C 1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFF A53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F 92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000 A5FFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4C EFA5EFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00DB3B0C0C0C 0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C 5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002C DBFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0C A53B5EA5FFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C000000A51C0000 000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF 814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B 3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92 FFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C00 813B2C2C92FFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081A53B00 0000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 4C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C 2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EF FFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C0000 6F2C2C1C2CA5FFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFDB92 4C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F 4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C 2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFF FFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C000000 6F2C2C1C0C4CEFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFF4C 4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C 1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFF FFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C00000000 812C2C1C0C0CA5FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFF3B 3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C 0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000 A51C1C1C0C0081FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFF3B 3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C 0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002C DB1C1C0C00006FFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FF3B 2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>X8f* VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1!FFFFA5 3B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92 1C1C0C0000006FFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEF4C 2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EF 1C0C0000000081FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA581 1C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EF0C 0C0000000000A5FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081DB 3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB 814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B70C0C0C 00000000002CDBFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFF A51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF81 4C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000 000000000C92FFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFF FFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C 5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C000000000000 0000000C81EFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FF FFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C 5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B0000000000 00001C81EFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C 6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C 3B81B7FFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFF FFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B 4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFF FFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B 3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1CB792816F8181A5EF2CDBFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF?æ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1}0FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFF FFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C 2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0CDB815E4C4C4C3B3B3B5EA5FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFF FFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C 2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51CDB814C5E81815E4C3B3B2C2C92FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFF FFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C 1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B 0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5 1C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB 815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB81 4C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C 6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E 92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFF FFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E 92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EF8181A5EFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF@,B VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1U0?FFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFF FFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F 92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA53B3B5EA5FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFF FFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C 5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C923B2C2C92 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFA51C0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFF FFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B 3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA52C1C2C A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFA53B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792 816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFFFFFF FFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C 2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEF1C0C 4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C 4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB81 5E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C 2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA51C0C 0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81 815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFB79281 6F8181A5EFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C 5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C 1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C00811C0C 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7 A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C 4C3B3B3B5EA5FFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F 92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C 0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006F0C00 006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEF C9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E8181 5E4C3B3B2C2C92FFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92 DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFA51C 0000000000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006F0000 006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DB B7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5 925E3B2C2C1C2CA5FFFFFF811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92 C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5A5 3B000000000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C00000000810000 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5 925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9 A56F3B2C2C1C0C4CEFFFFFDB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92 A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92 DB924C2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA{ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1ȩNFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A50000 00A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F 5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7 815E3B2C2C1C0C0CA5FFFFFFA51C0000000000000000000C81EFFFB792816F8181A5EFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E 6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2C A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDB0000 2CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B 2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A592 5E3B2C1C1C1C0C0081FFFFFFFFA53B000000000000001C81EFDB815E4C4C4C3B3B3B5EA5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B 3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C 4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C9200000C 92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C 2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E 4C2C2C1C1C0C00006FFFFFFFFFFFDB924C2C1C1C3B81B7FFDB814C5E81815E4C3B3B2C2C92FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C 2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C 0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EF000C81 EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C 1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C 2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C 1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EF001C81EF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C 0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C 1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C 1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFB792816F8181A5EF6F6F5E4C2C2C1C1C0C00 006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B71C3B81B7FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C 0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C 1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C 0C0C0C0000000000000C92FFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA53B2C2C2C1C1C0C0000 006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C000000 0000000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C 0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C0081 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C00 00000000000000000C81EFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C922C1C1C1C0C000000 0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B0000 00000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C 0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B 000000000000001C81EFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA51C0C0C00000000 00A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C 2C1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C00000000 00000000000C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBU/T VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1lC]FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000 000000001C81EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C0000000081 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C 1C1C3B81B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C0000000000A5 FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5 EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C00000000002CDB FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B 5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C0000000000000C92FF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B 2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C0000000000000000000C81EFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C 2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B000000000000001C81EFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C 2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB924C2C1C1C3B81B7FFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C 2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C 1C1C0C0081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B792816F8181A5EFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C 1C0C00006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7BC1@ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1l7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB81 5E4C4C4C3B3B3B5EA5FFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C 0C0000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7B7B7B7B792929292929292818181818181816F6F6F6F6F6F6F8181818181818181 818181818181A5A5A5A5A5A5A5EFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFB792816F8181A5EF4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB814C 5E81815E4C3B3B2C2C92FFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C2C2C2C1C1C1C0C 0000000081FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFDB815E4C4C4C3B3B3B5EA54C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF814C6F 92B7A5925E3B2C2C1C2CA5FF4C4C6F92A5A5925E3B2C1C1C1C0C0081FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C2C2C2C1C1C1C1C0C0C00 00000000A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFDB814C5E81815E4C3B3B2C2C923B3B3B2C2C2C1C1C0C0000006FFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92 DBEFC9A56F3B2C2C1C0C4CEF3B3B4C5E6F6F5E4C2C2C1C1C0C00006FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF811C1C1C1C1C0C0C0C0000 0000002CDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFEF814C6F92B7A5925E3B2C2C1C2CA52C2C2C1C1C1C0C0000000081FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4C5E92 C9DBB7815E3B2C2C1C0C0CA53B3B3B3B3B3B2C2C2C1C1C0C0000006FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB3B0C0C0C0C0C00B79281 6F8181A5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFA54C5E92DBEFC9A56F3B2C2C1C0C4CEF1C1C1C0C0C0000000000A5FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C6F92 A5A5925E3B2C1C1C1C0C00813B2C2C2C2C2C2C1C1C1C0C0000000081FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51C000000DB815E4C4C 4C3B3B3B5EA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF6F4C5E92C9DBB7815E3B2C2C1C0C0CA51C0C0C0C00000000002CDBFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B4C5E 6F6F5E4C2C2C1C1C0C00006F4C2C2C2C1C1C1C1C0C0C0000000000A5FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA53B00DB814C5E8181 5E4C3B3B2C2C92FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF4C4C6F92A5A5925E3B2C1C1C1C0C00810C0C0000000000000C92FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B3B 3B3B2C2C2C1C1C0C0000006F811C1C1C1C1C0C0C0C00000000002CDBFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBEF814C6F92B7A5 925E3B2C2C1C2CA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB81818181 8181815E5E5E5E5E5E5E4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B5E5E5E5E5E5E5EA5A5A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF3B3B4C5E6F6F5E4C2C2C1C1C0C00006F000000000000000C81EFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B2C2C2C 2C2C2C1C1C1C0C0000000081DB3B0C0C0C0C0C0000000000000C92FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA54C5E92DBEFC9 A56F3B2C2C1C0C4CEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFDBDBDBDBDBDBDB818181818181814C4C4C4C 4C4C4C5E5E5E5E5E5E5E81818181818181818181818181815E5E5E5E5E5E5E4C4C4C4C4C4C4C3B 3B3B3B3B3B3B3B3B3B3B3B3B3B2C2C2C2C2C2C2C2C2C2C2C2C2C2C92929292929292FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFF3B3B3B3B3B3B2C2C2C1C1C0C0000006F0000000000001C81EFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDQQq:vw:qur   z=1 vFwx{{~Ds uHr|vqu?p{p0t~p q~|{{~|9>} ~r ~ Iqz Kvtt s?Mwtpsuvv=vvv=vvvvvvvwNytNvvvvvvvvv=v==vv~wKsuOvvq u< vrturpsMs pwppvMvrIsp~r }K=F tpqqz~ puA z;p|{sA L t~wsvvKvvKuuuOuuOuvK=ss8vvvvvv=tsprOsu=vvussMu 9rup~urpIu;s tsut8JsqNx rvvKvvIvvq4|pLv x >twt=wvwvwvvt=vtKKKqq:q:u{ q qy M2qt5r{{{{{CIqp9sMst~r qqr 89 }q uz  5s;vxtt?Mwvrt9t<wu~w:8uvvvvvvv=v=<~wKOtq{u; I4wr vsssItprxt{s7w >  t stKw t?vwsssrvtwCu JssKt9FruvvutqNswNwvvvvrHq Jwpvt}|vvs~L KususBvvvvvvvvvvv=vv=KvvvvvvvvvsOsv= qq vp8 ;v}}zv9w>s qts>8?ssssqw s8qs ItvstKz|Osxryrw pss8yqp{vptpMrIstwpzs<<7y~| vqwMv Mtrqw;vpv;qwvsvKvvKuttNttNttpvs8=Kvvvv5wuq:rr=rrsss> pNsstps >qpKvwz}u8G 9vqsq{:qsKutpus~wp9pvw8ruusr8tvt=wwvv~ut9{v~w~w~w~prrrqqqNswNvvvvvpu>vN rruq=t9}tqptwtvvt?sKKKu>rKsppsrt{:rpHvqtvywpKwvNuvvvwK=vvt rJqtwuq|; wKqu r qp4zqJqvttppqqqGwNwwv~ws}s1 pr|s|sy}w~w~uKuuuttwG>{psJvv=vvwvsvuIr=vvtzwxIy== ~rrs8rzNw;wuwvuwwwwtwtw>wtt:swwJr8upsrsNIswN<vvvvvpuuOrwwNvvvvwprs9r >rz~v8us?wq<wwsq~vKOAzwvp=;przs3{Kvwz{pv<8~wwwNwwNwrt qrrw>GKsqpzwqKrt?tKwwwwvv0s=ssusut~6vupD{qyqqrpNNJuu :s= q|vsp~tNwtGv}}xps?sq<~q~uvrvLppww s ty~tu1}ptsK~ww<wKwwvvvv?rr=ssuptrws=qO vw}p~r1:xtI s vtIsNsqu~twH ?urwqrsv 8rKsw}z}O|sqpw s r vp7?Ew ttppHssHssrrrsNOsr=zwwqwrwrp= rK~wyy1pqqppppppspsv>=uuusssssLssLsssKKvvKvvKK~wrNp?qrw pwpMqrL? rturrps|rsIrp|| At;rruuKpsqOvxKt{Ivr{ tt0vpJ8rr{vvsJ~w>ssswww sOstOrtuzqwK}Lrptwtvuvw=vv~wKKKqN:ptstqq GA zs p 5Mwvvup>p={w |s~t 4x >Mpx Npvq=s rssvp:pppp{sKu=vKvvvvvvvv=vq=ss wrrr>pJ vquz}qNuuu}sssLssLsssKKvvKvvKKsrsHtOp{rwsrKvwJ>pqrqsqwrwvuv8u  ptOrp:vu stt8qsqNrs~vsrr0u1qquv :u90vvt~Jr>{uwJtu0wttsr8rsr;svtvtv~s=vvvpKKKqsM:ststq q  Fp qF}wzq{ 5Mvuwu~sp=p={ | 6y6H{|z sw}pspssrqKsss=su=vvprp57 Ouv xtttr}z=vxL wywuH >wz |rHrtNtwtsFvs=rvttp ?>wwpsDxpwqsrqJrst;vvwuIrA rvs quKrtNtwvrs9wKpsz w8>{=wpsqsqwrt8LsuKvvvvvvvvvuvCrNwwqqqrqKwv@}rwws z99uqGussvvp={u8qtwuwsp;sw4stqssssK=vvs| t< wt xu w yyIIw9 tMy:u r rpvK:wM qrrNs=quMsuM swuJCtrywpJutMtuu v}v=tww9wrwrprprHzO?vvvvq I w< qwsr8u8t8tvt=vvssq=vvv~wKKKqq=w:rr   w vGv vGv txuvFw w;ppp~<H~~ ~wup1 69yq|v}w}u{ =suC{wu wt;u rpv{uwqKsBvvvvvvt99uvvvv=Kv==vvvvt8wv=qsup0uwJqwqwxrq=sssrs=Jvq{uuwrtp=< ;wt}vsIq:ytt p p4rz} r ptOs9;uuvvq~pKKr     4szsKvvvsww9rts<spvMvpLHI>|tu  B =pvsvsv8vsvqvuv8v N  }} :|u}?}qvp {tN5yC4 sxtwt OuuH uxu 0{Nt  rqrq8u9ttqI?rqrrrsrI8~J=wstttzzz8zs{O  r r r r 9xwOrprprprprp9prpNvrvrprppHH:suuuuHv>uuuvusJr={BOput  Guxxywqqq:=rKr 44ssrv;8 q>p}wwwv|8}tv= r{wwItpHqpppppppwqpsIHvvt|rz8rJwwvut>Lsru}|sFppE vwpqNqsp8pu tturBvttw B =qqpvsvsv8vsztvqwsv>z>rzsvrsHtuMu{vzt q::~uuuvusJr={ G xrIztsr  C x zxsppp;9vJvqq:q:q~w~w|qx=DtNqrv sprMsu8tNutqHpppppppppwqtL<~vr8~uFqwutwtM: uzz1w tBvpqJwL }qturzwuIw =9qwqwqw::9qrqrqrqrqrqrqrq9qpu tr  MrKwwvu~8s8ssssssJss 1zNqqqpvsvsv8{wvvwsv>zEs~r vpHtuMuzpzwqLHrv?I stvqpNv<uppMqqMtpurqrqrqrqrqrq9qrqrsvvwwLww8vuvuvuvtvt=?v6rvrtM uwNss{u 0{0|s ssw8v8qrptsw| tHuuuvusJr=ss  3tu8xxzt r  C  |zxsppp;9vJvqq:q:q~w~w|qx:ExqJtw}s~3 wtNt= HppppppppppuL<prp4vs?quuuqN:txvw{qvB @wJv Iqq vpK{t>?ppqqqqsqwH9qwqwqw::9qrqrqrqrqrqrqrq:q tq vtI MwvvvuvKs8ssssssJss qCzNqqqpvsvr0wvswsu9 }v7y pu|;vvMv{pzptJLvp?OvwpprNvKppMqqtFrqrqrqrqrqrqrq9qrqrqrvwL8uvuvuvuvtvt=L~uHsssIss?ss{u 0{0{|spssw8v8vsvsvrs v}w4s|s@rrss:?}9vprrwNwrtx | q{4  ;{qrrs}O~~O~qt us 8Lwv |v v<5:}uutHvpMvpJ=qs  3sstst<ppppppppyrM;utuyqO= ptppvuM>trwttrs  D2v}wwr?rtrOrw qJs = v wC x=   sywqLuyv>rHq~uzqpqOq=vq{vvKMwp>Ltswrr=t2qppMy:qrqrqrqrqrqrqrq9qrqrqrqrvvL8uvuvuvuvtw5>KsssIss?ss{u 0{0{{sz:s8qzvr~w7s|sArrrs:?}>wqq vwNu uus{t s~?tI  uzs}~O~~O} up w8w;qv |v v M2w:}uutHvpMvpJ=ss  3qqKssC   xsppp;9vJvqII~zzrwJOwrKzqqu tMxt:rsMqtIuspppppxqM;vtuyqHz< wppvuM>uuvquD3vwr?rtrMwuw~tq1vw;;qqruxpsE w>trwrw9:9qrqrqrqrqrqrqsqHqtr vquw8 u>wwvvvvvvwvw=8ssssssJssuq;2turuuuuCrtKrvN8uvuvuvuz}q6q uEwqrrt Hvrtrtruvv=v>Kuvuvs s }44pvqqqH{v8uprtz?wOspvMvpLHI> v uGu u8~~~Lqyqu?yq@{t{qpqOKzzwtIMtp>?tutuppqrrNuOuqEpq9qrqrqrqrqrqrqrq9qrqrqrqrqrsvEw:wwu~usKIKsssIss?ss{u 0{0{{wwsNqrOtr~w6s}sArrrrqw9<}u>tppyuuu?;t r8~~Fxyxt8Lrrtzuwpsps;rpr>qsq ?qtqJur|vwut=q:8uquvpvB|v@|s{v K99rrrrrrrrrrrrrsrJwwr tt >9uvvvvvvvwvwN8ssssssJssvu:Mqqqvqvq=rvKrvNu8uuuu qEqq:zzzqup>stststsuvvu=uv>Kuvuvs q44spstw9v8  qq8wIzwqqLqqMJL<K8rprprpqspsps;spspw  }v 2Opztvq}|9w <z  r|tO?s8?ututqpzsNps9utw;q9qrqrqrqrqrqrqrq9qrqrqrqrqrqs:sqsNs8Is8ssssssIss?ssut>tuw>wututttsNs~<~w~w~wws:qrMvrws9rqsqs?qtq9}wpppp:s>Dwpyr|qpE|v@ K99rrrrrrrrrrrrrsrMvvwqrrI8uvvvvvwvwwNqs8ssssssJssvu:Mqqqvqvq=rvKrvNu8uuuu qEqq:zzzqqIrtsssvuvu=uv>Kuvuvr|44ssz wKpppppp;q9qrqrqrqrqrqrqrq9qrqrqrqrqrqs:sqsNs8Is8ssssssIss?ssut>tuw>wututttsN}|=www wsv:rqrMs}uw>=uvNs wzqGq }~vJws8vuvrKKu sxtxt4x tMwvywwLErM}uutHvpLwqK=tu  B =   s q qz:zqzqzy{uwww84v>v{u KxxO~sppywv:Kprqsqtvu?pyKvvqqqq:NHwspt}D vA s 899rrrrrrrrrrrrrsrMvvvvvvO8vvvvwvwwwNqs8ssssssJssvu:Mqqqvqvq=rvKrvNu8uuuu  Bx}Iwuywu uLrtqpuu>uLKv q44ssvrsMqI|sr9wIsuqqLqqMJL<K8rprprpqspsq>~rtsr~v~p{t3uAwvx rNrsq8psqrswrw~FNu0> utqptss3w9qwqwqw:q9qrqrqrqrqrqrqrq9qrqrqrqrqrqs:sqsNs8Js8ssssssJsswut>tututttsNJw~~r~rv;rprMr vtw?<w<wwt s pGqy} qIts8vuvvtKKr   4t|uKvvvswsw99ts<spvMvpLwqH>pv  B =  psvsv8vsvsvsrtrvv NOq;xruwsNJr  ~ {>0qz:}}tssMu;utHuqKqvvvvvv<;tKsMyyyyxu8>ptptxuuuwAp<p}G Bqqrq9w=Ipww GuvA  sN99rrv  r  u>uwwwwwO8vvwvwwwwN8ssssssJssvu:Mqqqvqvq=rvKrvNu8uuuu |5q p8{{|qrqtvKw swttt?tv>Cwvqr 44ssprsMq2r q9wIsqtqqLqqMJL<OsvFrtsq~Mrtpqrtx|t1{:p{}sqNqsq8psq} wuwwJ 00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FF0000FFFFFFFF0000FFFFFFFF00000000FFFFFF00000000FF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFF00000000FFFFFFFF00 00000000FF0000FF0000FFFF000000000000FFFF0000000000FFFF0000FF0000FFFF00000000FF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00000000 00FF00000000FFFFFFFF00000000FFFFFF0000000000FFFF00000000FFFF0000FF0000FFFFFF00 000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFFFF00000000FFFF0000FF0000FFFFFF00000000FFFFFF00000000FFFF0000FFFF00 00FFFF00000000FFFFFF0000FF0000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF000000FF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000 FF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 FFFF0000FF000000FF0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000 FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF000000FF0000FF0000 FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFF0000FFFF0000FF000000FF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF00 FFFF0000FFFF0000FFFF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFF0000FF0000FFFFFFFF FF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFF000000FFFFFFFFFFFFFF0000 FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FFFFFF0000FFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFFFFFFFF0000FF00FF FFFF0000FFFF0000FFFF000000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFF0000000000FF0000FFFFFFFF FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000000000 FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFF00 00FFFFFF0000FFFFFFFF0000000000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFF00 00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FF000000000000FF0000FFFFFFFFFF00000000FF FFFF000000000000FFFF0000FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FFFFFFFF FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 FF000000FF0000FFFF0000FFFF0000FFFFFFFF0000FF000000FFFF0000FFFFFFFF0000FFFF0000 FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFF00 00FFFFFF0000FFFFFF0000FFFF0000FF0000FF000000FF0000FFFF0000FF0000FFFF0000FF0000 FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FF0000FFFFFFFFFF0000FFFFFFFFFF0000FF0000 FFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FFFFFF00 FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF00 00FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FF0000FFFF0000FFFFFFFF0000FFFF0000 FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF0000FF0000 00FFFFFF0000FFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFF0000FF0000 FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFT% VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1M FFFFFFF0000FFFFFF00FF0000FFFF0000FF0000FFFFFF00FF0000FFFFFF00FF0000FFFF00 00FF0000FFFFFF00FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFFFF000000FF00FFFF00000000FF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF FFFF0000FF0000FFFF0000FFFFFF00000000FFFFFFFFFF0000FFFF0000FFFFFFFFFF000000FF00 FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000FF00 00FFFFFF0000FFFFFFFF000000FF00FFFFFFFFFF0000FFFF00000000FFFF0000FFFF0000FFFF00 0000FF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFF00000000FFFFFF00000000FFFF0000FFFF00 00FFFF00000000FFFFFF0000FFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFUM VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1w\ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFVC) VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1k FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFWuV VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1Nez FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFF0000FFFF00000000FFFFFF0000FF0000FF0000FFFF0000 FFFF0000000000FFFF00000000FFFFFF0000FF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF00000000FFFFFF00 00FF0000FF0000FFFF0000FFFFFF0000FFFFFF00000000FFFFFFFF0000000000FF0000FF0000FF FF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000 FFFFFF00000000FFFFFF0000FF0000FF00000000FFFFFF000000000000FFFF00000000FFFF0000 FF0000FFFF000000000000FFFF00000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF00 FFFFFFFFFFFFFF0000000000FFFF0000FF0000FFFF00000000FFFF00000000FFFFFF0000FF0000 FFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FF0000FFFF0000 FF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00 00FF0000FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF0000FF000000FF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00 00FF0000FFFF0000FFFF0000FF0000FFFFFF0000FFFFFFFFFFFF000000FF0000FFFF0000FF0000 00FF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FFFFFF0000FFFFFF000000FF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF000000FFFFFF0000FFFF0000 FF0000FFFF0000FFFFFFFFFF0000FFFF000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00 0000FFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF0000FFFF00 00FF0000FFFF0000FFFF000000FFFFFFFFFF0000FFFFFFFFFF000000FFFF0000FFFF0000FF0000 FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF FFFFFFFFFFFF0000FFFF0000FFFF000000FFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FFFF00 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF000000FFFFFFFFFFFFFF0000FF00FFFF000000000000FFFF0000FFFFFFFFFF0000FF00FF FF0000FFFF0000FFFF0000000000FFFF0000FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000FF00FFFF000000000000FFFF00 00FFFFFFFFFF0000FF00FFFFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FF0000FFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFFFF000000FFFFFF0000FFFF0000FF0000 FFFF0000FFFF0000FFFFFFFFFF0000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF FFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000000000FFFFFF0000FFFFFF0000FFFF00 00FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000X\O VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 00000000000 000000000000FFFFFFFFFFFFFF0000FF00FFFF0000FFFFFFFFFFFF0000FFFFFFFFFF0000FF00FF FF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFF0000FFFFFFFFFFFF00 00FFFFFFFFFF0000FF00FFFFFFFF0000FFFFFFFFFF0000FFFFFF0000FF000000FF0000FFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FF0000FFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFF000000FFFFFFFF0000FFFF0000FF0000 FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFF0000FF000000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF00 00FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000FFFFFFFFFFFF0000FFFF FF0000FF000000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF00 00FFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF0000FF0000FF0000FFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FF0000FFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FF0000 FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000FFFFFFFFFFFF0000FFFF FFFF0000FF0000FFFF000000FF00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF00 00FFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFF0000FF0000FFFF0000 FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FFFF00000000FFFFFF0000FFFFFFFFFFFF0000FFFFFF000000000000FFFF00000000FFFF0000 FFFF0000FFFFFF00000000FFFF000000FF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF000000FF00FFFFFF0000FFFFFF0000FFFF00 00FF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF00 FFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF00 FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFY1? VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1| FFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFZط#1==vvvvvKvvvvvvvv=vvvK=vvv=v=vvvvvvv=vvvvvvvvvKvvvvK=vvvvvKvvvvKvvvv==vvKvKvvvvvvvKvvv=vvK=vvvvvvvKvvvKvvvvv=Kv=Kvvvvvvvvv=vv=vvvvvvvvvvvvK=vv=Kvvvvvvvvt9Itr=t9r t t tt8srrNssttsstt8<swNrruurw~w5w~wqq9rrrqvv=vvvvv==vvvvvKvvvvvv=vvvKvvv==vvvvvKvvvvvvvv=vvKvvvvvvvvvKvvvKKvvvvv=vvvvvv=vvKKvvvvvv=vvvvvvvvKvvvKvvvv=vvvvvvvvvvvvvK=vvv=vvvvKvvvv==vvvvvvKvvvvvvv=vvKvvvvvvvKvvvvvvKKvvK=vvvK=vvvvKvvvvvvvvKvvKvvvvvvv=vvvvvvvvvvv=KvvvKKvvvvvvvKKvvv=vvvvvv=vvvKv=vvKvv=vvvvK=vvvvvvvvv=KvvvvvvKvvvvvvvv=vvv=vvvvv=vvvvvvKvvvvvv=vvvvvv==vvvvvKvvvvv=vvvvKv=vvKvvvvvKvvv=vvvKvvK=vvvvKvvKvvvvvKvv=KvvKvvKvvvv=vvvvK=vvvvvv=vvvv=vvv=v=vKvvvvvvKvvvvvvK=vvvK=vvvvKvvvvvvKvvvvKvvvvvvKv=vvvvvvvvKvvvK=vvvvvvvvvKKvvv==vvvvvvvvvvvvvKvvvvvKvvvKvvvvvvvvKv=K=vvvvvvvvvv=Kvvvv=KvvvvvvvvvKKvvvvKv==v=vvvvvKvvKvvvvKKvvvvvvvvKvvvKvvvvvv=vvv==vKvvvvKvvvv=vv=KvvvvvvKvvvvvvvvvvvv=vvvv=vvvvvK==v=vvvvvvvKvvvvv=KvvvvKvvvvvvvvvvKvvvvvv=vvvvvvvvvK=vKvKvvvvKvvKKvvvvvvKvvvvvvvvvvvvvvKvvvKvvvvvvvvKK=vvvK=vvvvvKKvvvvvKvvvvvvvvvvKvvv=vvvvvvv=KKvK=vvvvvvvvvvvv==vvvvv=vvvvvvvvvKvvvv=vvKvvvvvvvKKvvv=Kvvvvvv==vvKvvvvKvvKvvKvvKvvKv=KvvvvvvKvvvvv=vvvvKvvvvvvvvvK=vvvvvvvKvv=vv=vv==vvvvvKvvvvvv=v=vvvvvvKvvvvvvvv=vvv=vvvvv=vvKKKKvvKvKvvvKvKvvvvvvvvv=v==vvvvvvvvvvvvvvvv==vv=vvvvv==vvv=vvvvKvvvvvvvvKvvvv==vvvvvvvK=vvvvvKKvvvvvvvKvvKvvvvvv=vvvvvvvvv=vvvvvvv==vvvvvvvvvvvK=vvvvvKKvvvvv=v=vvv=vvvvvvvvKvvvvKKvvvvvvKvvvvvvv=vvv==v=vvv=vvvvvvvKvvvvvvvvKvvKKvv=vvKvKKvv=KvvvvKvvvvvvvvvvvKvv=KvvvvvKv=vvvvv==vvvvvvKvvKvvvvvv=vvvvKvvvvvvvvvvvvK=vKvvv=vvv=KvvvvKKvvvvvvvvvvvKvvvvvvvKvvvvvvv==vvvv==vvvvvvvvvvvvvvvKKK=vvKvvvvKvvvvvvvvK=vvv=KvvKKvvKv=vvvvvvvvv=vvvvvKvvvvKvv=vvvvv=KvvvvvvvvKKvvvvv=v=vvvvvvv=vvvvv=vKcc(Ttl2'Kccu^"B$,#%D=U=TC"=8D5/=CXG@QW#Kbv-CU^/Kcc`Q!Ud4'Y\BKc`'WB_%#CCs*)BC|f[r*'S[=^+Q!#sE52b])\_BC [=c`'!#|-~Kcc`lW#4)S#55s)\)45 f%'2U^TK^`'WUE5D]s)*)457-n'2#("occr#!/^`!UcUD3@f,&=cc^`Q!##DE@f=iR+yn=v Kvsf5%'*#KpwtvfLBDBQ^\QDUKv[DBQ^C\QD=R5#KU65bK[^P=bwo`2K_P=wP=v}w&=_f"# fto+@Q24YHSEBBU^D]Q24d>@)6K2 Kcq|ty`Q!#/\Ul]U {Q2`l^T3 #5D_@fv_\"UB 4'6X/nCf)_[ Jy`t y``qdddyvv=(L ]Q!#I/]U^CY_(~|ftfw>CKcq|+lWUsB)6#SD s=tf~Kc: y]QWUB)6YH#"|-=hvvvv[Kvvvfsvthvvv-Ju~v==q y]QWU`_5/2/_ fwKpwvhsvfwvv[Lvh-9~phqwvhCMvfKpsv=c t+Q!#U5b*E2/)^|[wvvvvv<vhvvKc:|ty]QW#N\)4?@U|f`B_SUCq t]Q#)\_4|fvhvfvhv=vhvvv-whvfna'S[oKc Iy]'!#/c ffwhvvKKcq|t+'j# 0#B@BY2|fVQ\CU= +'UdI@U f5#y+QDBYH= VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00 FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF`= VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1σ FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00 FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00 FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFF0000000000FFFF0000FF0000FFFF00000000FFFF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF00000000FFFFFF00 00FF0000FF000000000000FF00000000FFFFFFFF00000000FFFFFF00000000FFFFFFFF0000FFFF FFFFFFFFFFFFFa# VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1R FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFF0000000000 00FFFF0000FF0000FFFF00000000FFFFFFFF0000FFFFFFFFFF0000FFFFFF00000000FFFFFFFF00 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FF FFFFFFFFFFFF0000FFFFFF00FFFF00000000FFFF0000FFFF0000FFFF00000000FFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FFFFFFFFFFFFFF0000FFFF FFFFFF0000FF0000FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00 FFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFF0000FFFF0000FFFF000000FFFFFFFFFFFFFF0000FF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00 0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFF000000FFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFF0000FF00FF00FFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000000000FFFF0000FF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFF000000000000FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000000000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FFFFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFF000000000000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFFFFFF0000FF00FF00FFFF0000000000FFFF0000FF00FFFF000000000000FFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFF0000FF000000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFF0000FFFFFFFFFFFF00 00FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FF FFFFFFFFFFFFFF0000FF00FFFF0000FFFF0000FFFF0000FF00FFFF0000FFFFFFFFFFFFFFFF0000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFFFF00FF0000FFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00 FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFF0000FFFFFF00FFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00 FFFFFFFFFFFFFF0000FF00FFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFFFF00FFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF000000FF00FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF00 00FFFFFFFFFFFF00000000FFFFFF0000FFFFFFFF00000000FFFFFF000000FF00FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF000000 00FFFF0000FFFFFFFFFF00000000FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFF0000FF00FFFFFF000000FF00FFFFFF0000FFFFFFFF00000000FFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00 FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FbY VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 F00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00 FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00FFFF00FFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00 FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFcǺj VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1ki FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000dqG VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1e. 000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000 %%EndData %%EndObject end dsd^ Q1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -767 (An Example) -0.063889 0 262 1 9 A1` /AA 220 220 w1` -825 -663 (The following example draws three rectangles using patterns. The first two, using the) 5.718857 0 1800 12 84 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -609 (diagonal) 0 0 173 0 7 A1` /AA 220 220 w1` -802 -609 ( pattern, differ in fill style. The third uses a custom pattern given as a bi-level specification.) -3.629471 0 1777 16 97 A1` /AC 200 200 w1` -900 -530 (WOpen\("size=400,300"\) | stop\("can\325t open window"\)) -0.023392 0 960 4 48 A1` -900 -475 (Fg\("light gray"\)) -0.024414 0 275 1 15 A1` -900 -421 (FillRectangle\(\)) 0 -0.00383 269 0 14 A1` -900 -367 (WAttrib\("fg=black", "fillstyle=masked"\)) 0.091141 0 698 1 38 A1` -900 -313 (Pattern\("horizontal"\)) 0 -0.002151 372 0 20 A1` -900 -259 (FillRectangle\(40, 60, 80, 180\)) 0.018723 0 547 3 29 A1` -900 -205 (WAttrib\("fillstyle=textured"\)) 0 -0.002319 494 0 28 A1` -900 -150 (FillRectangle\(160, 60, 80, 180\)) 0.002716 0 570 3 30 A1` -900 -96 (Pattern\("8,#FF7F3F1F0F070301"\)) 0 -0.002579 634 0 29 A1` -900 -42 (FillRectangle\(280, 60, 80, 180\)) 0.002716 0 570 3 30 A1` -900 12 (WDone\(\)) 0 -0.003387 167 0 6 A1` /AB 260 260 w1` -975 141 (Miscellaneous Operations) -0.014648 0 671 1 23 A1` /AC 220 220 w1` -825 245 (Alert\(\)) 0 0 125 0 6 A1` /AA 220 220 w1` -700 245 ( produces a beep or other signal to attract attention.) 0.009949 0 1044 9 53 A1` /AC 220 220 w1` -825 325 (CopyArea\(x1, y1, w, h, x2, y2\)) -0.138428 0 613 5 29 A1` /AA 220 220 w1` -212 325 ( copies the rectangular area \() -0.124557 0 581 5 29 A1` /AC 220 220 w1` 370 325 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` 418 325 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 430 325 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` 478 325 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 489 325 (w) 0 0 33 0 0 A1` /AA 220 220 w1` 522 325 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 534 325 (h) 0 0 25 0 0 A1` /AA 220 220 w1` 559 325 (\) to \() -0.124557 0 93 2 5 A1` /AC 220 220 w1` 653 325 (x2) 0 0 48 0 1 A1` /AA 220 220 w1` 701 325 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 712 325 (y2) 0 0 48 0 1 A1` /AA 220 220 w1` 761 325 (\). Copying) -0.124557 0 214 1 9 A1` -975 379 (from one window to another is possible by explicitly specifying two window arguments:) 11.458054 0.176392 1950 12 84 A1` /AC 220 220 w1` -975 433 (CopyArea\(W1, W2, x1, y1, w, h, x2, y2\)) -0.005402 0 802 7 37 A1` /AA 220 220 w1` -173 433 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -825 512 (Pixel\(x, y, w, h\)) -1.471146 0 306 3 16 A1` /AA 220 220 w1` -519 512 ( generates the colors of the pixels in a rectangle, left to right, top to bottom.) -1.3237 0 1494 15 80 A1` /AC 220 220 w1` -825 591 (ReadImage\(s, x, y, p\)) -1.4272 0 434 3 20 A1` /AA 220 220 w1` -391 591 ( displays an image from the file named ) -1.28418 0 791 8 38 A1` /AC 220 220 w1` 400 591 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 423 591 ( at \() -1.28418 0 74 2 4 A1` /AC 220 220 w1` 496 591 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 519 591 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 531 591 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 554 591 (\). If ) -1.28418 0 78 2 5 A1` /AC 220 220 w1` 631 591 (p ) -1.427322 0 37 1 1 A1` /AA 220 220 w1` 668 591 (is supplied, the) -1.28418 0 307 2 15 A1` -975 645 (image is displayed using only the colors of palette ) -1.952332 0 1008 9 51 A1` /AC 220 220 w1` 33 645 (p) 0 0 25 0 0 A1` /AA 220 220 w1` 59 645 (. ) -1.952499 0 21 1 1 A1` /AC 220 220 w1` 80 645 (WriteImage\(s, x, y, w, h\)) -2.169724 0 485 4 24 A1` /AA 220 220 w1` 565 645 ( writes a rectangular) -1.952332 0 410 3 20 A1` -975 700 (area to the file named ) 2.568115 0 464 5 22 A1` /AC 220 220 w1` -511 700 (s) 0 0 23 0 0 A1` /AA 220 220 w1` -489 700 (. Icon supports GIF format on all platforms; additional formats are also) 2.568115 0 1464 11 71 A1` -975 754 (available on some platforms.) -0.018982 0 583 3 27 A1` /AC 220 220 w1` -825 833 (WDefault\(program, option\) ) -0.900665 0 551 2 25 A1` /AA 220 220 w1` -274 833 (returns a custom value registered for the option named) -0.81044 0 1112 8 53 A1` /AC 220 220 w1` 838 833 ( option) -0.900665 0 137 1 6 A1` /AA 220 220 w1` -975 887 (of the program named ) -0.025528 0 467 4 20 A1` /AC 220 220 w1` -508 887 (program) 0 0 171 0 6 A1` /AA 220 220 w1` -337 887 (.) 0 0 11 0 0 A1` /AB 260 260 w1` -975 1016 (Events) 0 0.015945 178 0 5 A1` /AA 220 220 w1` -825 1120 (User actions are passed to an Icon program as ) 8.712646 0 1019 9 45 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 194 1120 (events) 0 0 117 0 5 A1` /AA 220 220 w1` 311 1120 (. These events do not interrupt) 8.712814 0 664 5 30 A1` -975 1175 (execution; they are placed in a queue for retrieval. Events are generated by pressing a key \(except) -1.303452 0 1950 16 98 A1` -975 1229 (modifier keys like the shift key\), by resizing the window, by pressing or releasing a button on the) -1.068802 0 1950 17 98 A1` -975 1283 (mouse, or by moving the mouse while a button is pressed.) 0.010178 0 1181 10 55 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:GIPD5.tiff %ALDImageDimensions: 402 302 %ALDImageCropRect: 0 0 402 302 %ALDImageCropFixed: 0.00000 0.00000 402.00000 302.00000 %ALDImagePosition: 347.050 386.050 347.050 531.000 540.000 531.000 540.000 386.050 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 42336 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599502 0.000000 0.000000 9.599338 821.000000 -2700.000000] concat false 402 302 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 246137 Hex Bytes isCL^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000eH{1vv=vvv=vvvv=vvvvKvvvvK=vvv=vvvv=vvv==vvvvvKvvvvvvvv=vvvvvKvvvvKvvvK=vvvKvvvKvvvvv==vv=vvvvvvvKvvv==vvvvvvvvvvK=vvv=vvvvvKvvv==vvvvvvKvvvvvKvv==vvvvvvvvvvv=KvvK=vvvK=vvv=vvvvvvvvvvv=vvvK=vvvvvvvvKKvvvv==vvvvvvvK=vvvvvKvvvvvvvvvv=K=vvvvvvKvvvvKvvvvKKvvvvvvK=vvvvv=vvvvvvvvvvvvvvvvv=vvvvvvv=Kvvvvvvv=vvvvvv=vvvvv==vvvvvKvvvvv=vvvvKvvvvvvvvvvv=vvv=KvvvvvKvvvv=vvv=KvvvvKvvvv=vvvvvvv=vvvvv=vvvvvvvvvvvv=Kv=vvv=vvvvvvv=K=vvvvvvvv=vvvvvvvv=vvvvvvv=v==vvK=vK=vvvvv=vvvv=vvvvvv=vvvKvvvvvvKKvvvvKKvvvvv==vvvvvKKvvvvvvvvKvvvv=vvvvKcu(TtQD=^T oU%2K#("=TCTn=w&)tD5/nvTbf$]DnKy^%*3"U_#C_EB%#A _^D#*0#2YSQb*"=qrf"oooooh\F#DY%'kO_\"fd3*0U2YS'kr)\Tf>PK"uR+2nqfvft1wPKd-WPKvf=[fnr\'%fwfd"Pfkq;:fn(fu>l+@\Uofkvhvpf[tff fq&=ft?vtt1']@*U-"BQGC2.4##fBU%2'cW\UCfECd^W@QD2#4(5hf.#d4CDD1)WEC/(WDUw5CvfKtfqPKbDCnKiufR`DnKcy^S\3T#bU5)3n#|f _^y-#\F#2/%'KifiL$$ooxU\ U2/S'U*FUDYSlfHw&=9$]Dn=qsftv-zwP=Wvr\QS[f<-f"&K LffnT/QW)(Q\o-vfwqu-w&KTqfttIvfGP=k5=tf@Q22#4(!-"/ #4fd(f /**f52?*#hf.#-2./4"f3~#5f'f%35y)+f6'22U (fWY0#(-l5f'f$Yka#FU\f56#n/ /%'D/_cuhrvfLwp q-qPKiqfIvfvfGJ&K vvV8un 6^lndC/JU0rvuvvdQof:f5D)}nSQ^ut2f)6U( /^")1dRtuuBtfvf v-OfPkvvfkrq8fn!nd*d!.2f!4'tdoofkvhvrwrfvf?qsfwf-Lw&KkvvfkrtwfnYb#%DQ^WUnlof[kh-tf9P= vvkungLDDBY$ln/k! R\QS[jfVY**Ct*#{+Q5Tdlow; ~u~-P= vuwu`Qy2U4(lnb4/<)(2'*doofK#vws[>tfffw&=kvf t /\USDQ(!*#np=jf~vjfw5=oofv<qufvfs9t:<&K vvtvngD2YRnV/a\C2I*U{2UH23BU"dlRofkvK=tf 9fv~fqm=k vvfk<8vfn/\\)U%2'(!*#nwpvpW~j~ofhvvt:pfsK[ffqmK fk;fn`QDDU cndev=qvvvdo$v= urfvftfwPv vv[/**#S'(W\#n?5j5vlooqwMqf>q&KvtfnZI)(#l$$fvvhvvuu~qfwp[Kfpq&KTqrftpvG&K Lrfn@YCS#*\Q(#)35@U4yY)^5ofV=hrpfpI>fw&Kq8tf1PKks-sfn*hBDloofKffwsfv[pfqP=iLLfttGP=kqv=-trsfnf6)"3%#5f'f$##6f)4fb2.#4f5/j('*f2)f'y24'%2f'2yU^2/)(h$-vhvv Bvfwvrrf4fsufwPKTqsftftf1&KIsfsf8)6IB#Ql%>f?fz.jHt![Itfk=wrt=fwufsft4fw&Ki:tftvfGw&Kktt-usfnf%)}/UCf2XUfUS2'(!El4Q4#QQnofkvhwt9ssqfvfs~wofvfvfr~fvfwfqJ=qqttKGw&rutSvvf<fvqP=sftt[tv1wPOut?ofvf95fvfwJ=iqttGP=9~sSowwfvfvw&vittv[?t1w&Kfut $fvfH-vqPKiqqff?vf1P=?tfffvff=fvfw&K"Lft?fGw&Ksu9fnXR-vffvf&=iq:ftftKf1&=s fufnlfy_nk=Utrqf= ufsL&=f??vfttvfGJPKpufutsfn>tovKfr~vffq&Kiqq?vtt1s_@Iq UQlw,tj>jfI#aCfY^f'f4S2'(!*#[\U 2f2_[ YWX2jDb6f2)fR_2y)+hofkwh>tuqfvfw9rfwsf~vfq&Kif?tvfttz<&Kk~tsfswfn#'T2Q!#lCj->fIf6lRofrtqIf>fw&=iqqftI1wPKk>B fn"Y56*'?5-l(f/+QWh[VB)]fDXU /*#^'+hTffkwhIrf fufJ&Kq?KtvGP=vf [S5f-IuvfP=qftt-ttvGPrtf'2lf wht~rw~-Kftfr[&Kif?fzJPK pf wf>ff-fvfL&=iqtftf1Ks fs J-nfv-wwffq<&=sIKf1m=ufs Ifv?fvfqwP=qqtv[tvfG&NsrfsfSlohyVo[htw5-v~ffNfw&=tvfzw&Kpu8 @ofkwhrtqut-Kfuq[qw&KiItv <&=pp~fsBwYCC36@\YUTf2Uwt5uvftfwmkqs98fnY]'!#f/5f"/56\#"EC/(_(*IDXUS_*_4C f@'*UDUok stutfwKK~f fs-Lw&KqstfvfGJmKuufprs-n@ovffvfqmKiqqftt=fGwPvspsf#fo8?rfvftwfwfwfqPv"qsfttvf?tvf1w&K~vfprsfn4d2#+'!#Qn5Hf?!f1jf.lo-kthw IO~s9r&K"fvft?f1w&KsfpnfG/2#5Qf#SDQ(!E*Bofh?tfruqf~-%hofvfwwfvfvfviq[pv1&=s-nu0#^DC$v rfv-8fq&=iLLff1P=k~N-wwtvfn~#Bf'SD/)(Cf'B#6'CU"2)fl^f%_^f6 )WBQ+QC-ofhqw;9pfvfw  fvbr25Ynvbrf$]Dn=y^%\E"bUC)34%  _^Dfl*'2Y^)ky'*/%Kiq?[:ooooR`Q*'2/^)Vy2'\/%f-iQ\Q2/^_yD'*YSfuP=ib]DKqfIvtvfGJ&Kd!&=K-vfwO*Q%[ofYfTPKwrfJwvfnUFh^D5ofvvwwf:PKft?vftf1w=wwI=ffXU~#fU0U(2C[")f(_Df/c2UB43@D$hq~wvfpprfs-uvfwP= Bqsfn#>#%32Yc}f2XUIB#f6\Q%UfY(QAEh3Uf _BU2BYUFQ*h0U^D5lBUW#^#l2UTRI@4#CCY(!--#?flhu%#@Dofkwhuvurst[wwp[ qPKkqtt S]_T/V/U --U?Cf*/-UfDX#f5XdkDf[#?l$!$IB#5YJY^!fD.#f Y(")GjfI@B#5CY^!f)4fBU\'5Y^!f'-o3DD_^f)c2X#ofkw#vtf=-wfw~qw&=:wtf%]_35Uf)B$?])0Y!fDX#f]x5U1.Y\hfQfR32D_cfYCf64#~#Thof=wq~fvw~wfwvfs8qw&= wP=S,%n= T%2$#WYiqt]}l2B/Hf]Q2YHT# :?y+}QD4dHS3B4U(D]'D4/>@b6=DF5n=^ +'!U/\U'+U|-FQ2+Q^"3AUC-2)6K)*TUB w 6./%5frb)-||sh2/ kKc ty+l!#/+#(5/_^5 rvt->vtKcq|ID+'WU4)6#%2|fvK[rvvtvq|ty]'!#B_@/HU hvv=hvfrtvKKfuth=K=c|ty+Q!U`)5/yd)(|fu#vsuphvvur8fsuwv=fsrvvKfhvvv[srvv[Hphvs=q +QWU)C)*EDY_ fwvvshvvvq|+'Us_*)4?}# f4)%h55Kc D'W#)\_ vhvvv=hfvhv=whvvr*'S[oK: y+'WU//(D ff=vK|t`QW# FU4} Y(2 f l\C#=cq 2]'!#?6#7ffK7+'!Uw4Q? '@ vfOuHsfvvvKfvfvfK[fv[vKcm[vfvfvfKvfvfKvfvfvfKccm-vfvfv-Kvfvfvfvfvf[=fKc^ff=ffv[ffv-fv=mvfvKvffv=[fvvvfvf=-Kccm-=fvfvfvfvfvfvfKfff=ff=cmfvvfv[v-=vfvffv=P-vfvvK-vfvfvfv-vfvfv=^mfvfvfvfvf=fvfvf=-vfvfv-=cmfvfv-vfvfvfv-=fvfvfvfvfvfvfvfvf=fKccmfv-vfvfvfvfvfvfvfvfv-vfvfvfv-=fvfKccm-vfvfvf=fvfvfvf=-vvv-vfvKcffvfvf=fvvfvffvf=vfvfv^mfvfKffff[vfvf[=fvf=fKmvvvffv[fv[fvvfvvf=mf=[vfvf[vvfKfvfvfvf=[fv=O#!/( $,#%2|f/+'!#+ 'y4/>f5#2+'DB/>Kh84svt#=vvvvvfvhvvvvvvf UN u~?wvvvkthvvKvmS_c%QD= '*C#vt[C '\5#-Khvvvfvv-Jna'S-owhvvDBEU=^cr#!/^tD' trwHqfU>rIyU5K/5|%[=vvvvvvv=KvvvvKvvvvvvvvvvvKvvKvvv=vvv=vvvvv=K=vv=vvvKvvKvvvvvvfE VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1= 0000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5AgDT VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1L 5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5AhS3O VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1([ 5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5AiIg% VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1j 5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5jӦL VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1|y A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5kr  VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5l VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1Z A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5mv VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1p A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFnDin VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1c FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5o ! VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5prdD]sNsv:Nvvvvvvvvvvv:Nvvvvvvs:s?I=qqqqqq=qqIqqqqq=qqIqqqqqqIq=qqqq=qLIqqqq=qIttttttttttttNvvvLtttttttttttNvvvLtttttttttttNvvLt?Ittttttttt8v:tttttttttt8vv:tttttsssKqIss?sKqqssssKs:Nqqsss?ssKqqvvvvvvvv=vvvvvvvvvvvvvvv:Nvvvvvvvv:Nvvvvvvvvvs:?svK:qq=qqIqqqttItt:qqqqqqqNvvvvvvvvvvvv:Nvvvvvvvvvvv:I?Nvvv:Nvvv:sssssvvKvv?Nv:N=KvvvvvvvvvvvqIsqqqqq8qq8sqqqqqIq=sqqqqq=qq?sqqqqq==q:sqqqttItt=vvvvvvKvvv=vvqqss?ss=qsvvvvv:ttttttttN=vv=v:NvvvK:s?sqqqtttNvvv:tttttq8sv:ttttttttN=vvvvLNvvvvqqqqI8qqqqqqqqIq=qqqq=qqIqqqq=qIIqqqqq=qqIqqqttIttI8qqqqqqqLtttttttttttt8Lttttttttttt8Ltttttttttttt8Ltttttttt8L8qLqt8qqqqqsKsIqqqqsKsIqqqqs?sqqqqq?s?8sqqqqqIssKsqqqqqKs?sqqq8LtsNsLttttNvL?ttttNvvLttttssss8sssssss?ssKssssKs?sssssvvK:sKKsssLttt8qLqt?ttttttttttttttsKssssssKs?ssssssKLs?ssssss?ssKssssKs?sssssvvKvv?8:8K:sKsqqqqq=qs8sqqqqqIqsKsqqqqq=qs?sqqqqq==sKqq=qIttNvvv=vvvvvvvvvv:8vvvvqssssKsqqqsss?8s=qqqssKs?sqqqsvvK:s?sqqqtttt8Ltsq8qLttttttttt8KvvvvvvLttt8sss?8sssssss?ssKssssKs?sNsv:Nvvvvvvvvvvv:Nvvvvvvs:sN=vvvvvvvvvvvvvvqIqqqqqq8qqIqqqqq=qqIqqqqqqIq=qqqq=q==qqqqqttItt=vvvvKvvvLttttqssKsIqqqss?sqqqqs?s?8sqqqq?ssKsqqqqsKs?sqqqtttNvvv:tttttq8sv:ttttttttNvv:Ittttttt8vvv:qqqq8qqqqqqqqIq=qqqq=qqIqqqq=Lt==qqqvvvvv:Nvvvvvvs:s?sKssssssKs?ssssssKLs?ssssss?ssKssssKs?sssssvvKvv?tt8:tt8K:ttsKsqqqqqKs8sqqqqqIssKsqqqqqKs?sqqqqqKKsKqq=?Nv=vvvvvvvvvv:tNvvvssssKsqqssss?8s=qqsssKs?sqqssvvK:s?sqqttttt8Lttq8qLttttttttttt8KvvvvLttt8sss?8sssssss?ssKssssKs?sssssvvKvv??ssssssKs?sss??8sssssssLtttttttttttt8Lttttttttttt8Ltttttttttttt8Ltttttttt8L8qLqt8qqqsssKsIqqsssKsIqqsss?sqqqss?s?8sqqqs?ssKsqqqssKs?sqqqtttt8Ltsq8qLtttttt8L?ttttt8Lttttssss8sssssss?ssKssssKs?sssssvvK:sKKsssLttt8qLqt?ttttttttttttttsKssssssKs?ssssssKLs?ssssss?ssKssssKs?sssssvvKvv?tttt8:tttt8K:ttttsKsqqqqsKs8sqqqq?ssKsqqqqsKs?sqqqqsKKsKqq=vv?tt8=vvvvvvvv:tttNvssssKsqsssss?8s=qssssKs?sqsssvvK:s?sqsttttt8Lttttq8qLttttttttttttt8KvvLttt8sss?8sssssss?ssKssssKs?sssssvvKvv??ssssssKs?sss??8sssssssLtttttttttttt8Lttttttttttt8Ltttttttttttt8Ltttttttt8L8qLqt8qqssssKsIqssssKsIqssss?sqqsss?s?8sqqss?ssKsqqsssKs?sqqttttt8Lttq8qLtttttttt8L?ttttttt8Lttttssss8sssssss?ssKssssKs?sssssvvK:sKKsssLttt8qLqt?ttttttttttttttsKssssssKs?ssssssKLs?ssssss?ssKssssKs?sssssvvKvv?tttttt8:tttttt8K:ttttttsKsqqqssKs8sqqqs?ssKsqqqssKs?sqqqtttt8Ltt8vvvvvLqt8qqsssq=qqNqqsssqIq=qqvvvvvvvv=vvvvvvvvvvvvvvv:?Nvvvvvvvv:Nvvvvvvvvvs:?svv:qq=qqIqqqttItt:qqqqqqqNKvvvvvvvvvvv:Nvvvvsss?8sssssss?ssKssssKs?sssssvvKvv?NvvvvvvvLtttNvvvvvvLq8Kvvvvvvvv?sqqqqs?ssLsqqqqsKs?sqqqqs?ssKqqq=sKKssqqqttIsKvvvvvvvvvvLtttItttN:tttssss?sqssss?s?8sqsss?ssKsqssssKs?sqsttttt8Lttttq8qLtttttttttt8L?ttttttttt8Lttttssss8sssssss?ssKssssKs?sssssvvK:sKKsssLttt8qLqt?ttttttttttttttsKssssssKs?ssssssKLs?ssssss?ssKssssKs?sssssvvKvv?tttttttt8:tttttttt8K:ttttttttsKsqqsssKs8sqqss?ssKsqqsssKs?sqqttttt8Ltt8vvvvqLqt8qqssqq=qsNqqssqqIs=qqvvvvvvvv=vvvvvvvvvvvvv:?ttNvvvvvvvv:Nvvvvvvvs:?svvLtqq=qq?sqqqttItt:qsqqqqqNKvvvvvvvvv:Nvvsss?8sssssss?ssKssssKs?sssssvvKvv?NvvvvvLtttNvvvvvqLq8Kvvvvvv?sqqqss?ssLsqqqssKs?sqqqss?ssKqqqsKsKKssqqqt?sKvvvvvv:IttttttNvvv:qqqqIqqqqqqIqI8qqqqqqIq=qqqqqq=qqIqqqNvvv:sNsv:Nvv:?Nvvv:ssss8sssssss?ssKssssKs?sssssvvK:sKKsssLttt8qLqt?ttttttttttttttsKssssssKs?ssssssKLs?ssssss?ssKssssKs?sssssvvKvv?tttttttttt8:tttttttttt8K:ttttttttttsKsqssssKs8sqsss?ssKsqssssKs?sqsttttt8Ltt8vvqLqt8qqsqqqKsNqqsqqq?ss=qqvvvvvvvKvvvvvvvvvvvvL?ttNvvvvvvvv:t8vvvvvvvs:?sLtqq=qs?sqqqttItt:ssqqqqqNKvvvvvvv:Nsss?8sssssss?ssKssssKs?sssssvvKvv?NvvvLtttNvvvqLq8Kvvvv?sqqsss?ssLsqqsssKs?sqqsss?ssKqqssKsKKvvvvvs:sNssqqssKq8ssqqs?sqKssLttttttttttItt8=vvLttt8vvLtttNvss?ss=qsssvvKvv?sqssssNsK:sqNvvv:ttssss8sssssss?ssKssssKs?sssssvvK:sKKsssvvvvv:Nvvvvvvs:sI=qqqqqq=qqIqqqqq=LqIqqqqqqIq=qqqq=qqIqqqq=qItttttttttttt8Lttttttttttt8=Lttttttttttt=qqqqqq=qq8qqqqqqIq=qqqqqq=qqIqqqN:Nvvvvvvs:sNsssssq=qqNssssqIqKssvvvvvKvvvvvvvvvvL?ttNvvvvvvvv:ttt8vvvvvvvs:ILtqqKs?sqqqttIttsLssqqqqqt8Kvvvvvvv:t8sss?8sssssss?ssKssssKs?sssssvvKvv?NvLtttNvqLq8Kvv?sqssss?ssLsqssssKs?sqssss?ssKqsssKsKKssqs?sKvvvvvvvvvvLtttItt8:qqq?sqqqqqI?8sqqqqqIqsKsqqqqq=qs?sqqqNvLtsNsv:ttttNvv:?ttttNvvv:ttttssss8sssssss?ssKssssKs?sssssvvK:sKKsssLttt8qLqt?ttttttttttttttsKssssssKs?ssssssKLs?ssssss?ssKssssKs?sNsv:ssssss?sqKsssss?8qKssssst8vv==vvLttt8vvLtttNvss??sIss?sKvvvvvv=KvvsqqIqKsqvvvKvvvvvvvvL?ttNvvvvvvvLttt8vvvvvvvLILtssq=qqIss?tt:qqssssqN=vvvvLNvvvvqqqqI8qqqqqqqqIq=qqqq=qqIqqqq=qI8Lttt8qLq8=qIqqqqqqIqLqqqqq=qqIqqqqqqIq=qqqq=q==qqqqqttItt=vv:ItttttttttNvvvLttttqqs?sqqqqq?s?8sqqqqqIssKsqqqqqKs?sqqq8LtsNsLttttNvL?ttttNvvLttttssss8sssssss?ssKssssKs?ssq< VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1C A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF00r,[ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1; 00FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5su ~ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;10 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5AtI VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1p< 5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5Au-nj VMS.BCK [V9.DOCS]IPD255.PS;2R6 5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFv. VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5wK#G VMS.BCK [V9.DOCS]IPD255.PS;2kE- A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5xA VMS.BCK [V9.DOCS]IPD255.PS;2Z< A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000ydx,0 VMS.BCK [V9.DOCS]IPD255.PS;2\K 000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5Az VMS.BCK [V9.DOCS]IPD255.PS;2cZ 5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A{;O;sq=q=Lqqssvv:NssqqssKsNvvvqqIs:qqsItt:sqqvvvvv::Nqqqqq8qq8sqKvvLtttNvsKs?sqsssvvK:sLNvvvvqssNtt?ttstItt:qssqvvv8sqqqqsKs8sqqqq?8sKsqqqqsKsNvvsKqqIqsqqsvvKqNvvvv:q8ssqqss?NqLsqsttttLqssssqIq:qssss=qqIqssssqIqLtqsKKsLsqqttIts:ttqqK?tttttttttNvvv=sss:qssssss=:q?ssstt8v:tttttttq8=q?sqqqtt8vv=vvvvvs:qt?ttsssqv=Kvvv:Ittqqq=LsssqqqqqKs?sqqqNvvLttttsNsK=qqqqqqI=vvvvvs:sN=vvvvvssst?tttttttt8KvvvvLttt8vvvvLtttIqqtt8L8qsssqttItt:tttttt8qLsqqqssKq8sqKvvvv=LIttttts?ssKqsqsssKs8vvvqqq?ssLsqqsttIttsLssqvvvvvKv8:sqsttttttt8vv=vvvvqqqq:ssqqqqq=qs?sqqqNvvv:ttttsNKIIqsqttttt8sLss?sLsssvvvvvvqNqsssqq=qqNqsssqqI8q=qsssqq=qq8vv=qqIqsqssv=qNvvvvvvLts8qqq?NsLsqttttt:qqssqqIqLqqssq=qqItttttttt8=qqssvvvv:N=vvvvq:sIqsssvv:q8qssssq8qqNqsvvvvvKvvvvvvvvL?tt8vvvvvq=s?ssqq=:sNvvvqqNs8qsqvvLqIttttssqqKKvvvvv:t?ttqqqsKLsssqqqqsKs?sqqqtt8vvv:tttttq8sv=KqssssIvvKvvvqLq8=vvvvvqqqq?ttNvvv=vvvvvvvvv:Nvvvvvvvvvv:?sqstt8L8vvqLqtIqqsqqq?svvKvv:IttttssssqNqsssssK=:qssssLttNvvLt?sqqqtt8vv=vvvvvs:qt?ttsss=qI?ttttttttNvvv=vvqqqqLsssqqqqqKs?sqqqNvvLttttsNKt?IqqqNvs:qqttItt:qqs8sqqsssKs8sqqss?8sKsqqsssKsNvvvvvsKs?ttttttsNsv=sqqqssK?ttttt8KvvKvvssst?ttttttttItttIttttttt8Ltttttttt8KqsvvvvvL8Kvvvs:st?qqssvvvvKvsLqtttt8vvKsqq:qssqq=:sIsstNvvv:tttttttNKIsqtt8Kvvvvs:qt?tttssqv==vvvvLIttssq=Lqqsssqq=qqIsstNvvv:tttttNsv=Ksqqqs?sKvvs:sq8=sssINvvvKvvvvvvvvvvv:NssssssKsNvvvvvvq=q==sqqqqttItt:ttttttttNvqLssssqLq:qsttt?tttt8L?ttttqIssKssqqqqKsNvvvqqNs8qsqvvLqIttttssq=qt??ttttttNvvKvvqqqsLsssqqqqsKs?sqqqtt8vvv:tttttq8KI?sqstttttNvqLsqqs?s:qsqvvvvvvvq8qsqqqq=qqNqsqqqqINq=qsqqqq=qq8vvsKs?ssqssvvKvvNvvvvvvvvvvLtq8ssqssINq:ssttttttt:qsssss?sq:qsssssKsqIqsssss?sqLtqsKKq:sqqqttIsLttttsss=qItttttttttNvvvKvvqqqLsqsqqqKLsIssqNvvLttttttsNKttIsstNv=vvqs:sItttqssKKvvvvvvvvLttt?ttqsssKLsssqqsssKs?sqqtt8Lqqss=qNLttttttt8qLssqtt??8qsstttttttsLqsssssNsNqssss?ssKqsssssKs8vvvvvq=qKKssqqqttIttsLtttt?s8qsqvvvLt?ttttssqqqNqsqqsssq=q=:sqsssv:Nvvvv:Isqtt8Kvvvvs:qt?tttss=qIIttttttt8vvv=vvssqqLqqsssqq=qqIsstNvvv:tttttNKI?ssqqtt8sLssqttIts:ssssqNqqqqqq=qq8qqqqqqINq=LtttIqqqNvvv:ttsNsv=qssssq=q?tttttttt?IIttqqsKvvvvvvvvLttt?ttttNLtttt8=qqssvvvv=Ltt?tqt?:ttttssq=qttItttttttNvv=vvvqqqsLsqqqqsKLsIsqqtt8vvv:tttttq8K?ssqtttttNvvvKvqLqtItttttsqqqvK=vvvvv:Ittqqq=:qqsqqqq=qqIsqqNvvv:ttsNsvKKsqsssI=vvvvs:s8Kvvvvvqqqqt?ttNvKvvvvvvvvv:t8vvvvvvvvvv:ttIsstt8vv:NvvqLsIqsqsssIvv=vv:?ttsqqqq8sqqssqq=qKLsqssvv:t8vvvvvv:ttIsstNv=vvqs:sItttqsKt??ttt8KvvqsssLsssqqsssKs?sqqtt8Lqqss=Lt:8vvvqss?svvKvvsLqt?tttttssssKvv==vvL?tt8vvLttt?sqqqNvvLttttsNsKqqssqqLKvvvqqss?8qLssttt:qssqIq:sqsss=qqIsqsssqIq:tttqsKKsLsqqsqttIsLtss=q?tttttttt8vvvKvssqqLqssssqq=:q?ssstNvvv:tttttttNK?sqqqtt8Kvvvvs:sqtItttttssssv==vvvvvvvvv:?qqq=:qLttt8sKs?sssssvvKvv8:tt8sLqqqttINLsqqvvqNqsssss=qqNqssss?q=qsssss=qq8vvvvvqsKsLIqsqqs:st?qssssqI=vvvv:tItqqqs8sqqsqqq=sKLsqsqLNvvvv:?ssqtttttNvvvKvqLqtItttttsqq=q?IttttttNvvv=vvqqqq:qqsqqqq=qqIsqqNvvv:ttsNK??ssqtttttNvs:qqsttIttsLsqqvvvvvvv8sqqqqq=qs8sqqqqqINqsKsqqqqq=qsNvsKqqIsqsssvvKqNvvvv:qNqssqsssINqLqstLsqsqqIqsLsqssq=q?sqssqqIs:tttttsqq==s:sqstItt:ttttssq=qIttttttttNvvv=vvsqqq:qqssqqq=LqIssqNvvv:ssqqsvvK:sNvvvqqIs:qqsItt:sqqvvvvvvvqN:sqqqqqLqLsqttttttt8KvvLtttNvsKs?sqsssvvKvv8:ttttttIts8qsqs:sN=vvvvqqsst?tttt8KvvvvvvvvLttt8vvvvvvvvLtttIssqtt8vv:NvvvvvvqLsIssqqssIvvKvvvL?tttssqq8qsqsss=q=:qssssv:Nvvvv:?sqqqtt8Kvvvvs:sqtItttttsssKIIttNvvvKvvvvqqqq:qqqqqqq=qqIqqqNvvv:sNKI?ssstttNvq:sss?tt:qsssvvvvv8sqqqqqKs8sqqqqqI8sKsqqqqqKsNv=q?sqsssv=8vvvv:sNqsssqINqs:qsqtsLsqqqqIssLsqsqq=s?sqsqqq?ss:ttqqKKs:qqsqttIttLtttttsqq=qttIttttttNv=vvqqqq:sqsqqqq=LsIsqqNvvv:ttttsNKIsqtttttNvvv=vvvqLqItttssssv=KvvvLtIqqq=:ssqqqqq=qs?sqqqNvvv:ttttsNsv==qqsqqqIvv=vvvvvs:sN=vvvvvvqssst?tttttt8KvvvvvvLttt8vvvvvvLtttIsqqt8L8vvvvvLqt?qsqssqIvv=vvv:IttsqqqNqqqssq=q=Lqqssvv:NssqqssKsNvvvqqIs:qqsItt:sqqvvvvv::Nqqqqq8qq8sqKvvLtttNvsKs?sqsssvvK:sLNvvvvqssNtt?ttstItt:qssqvvv8sqqqqsKs8sqqqq?8sKsqqqqsKsNvvsKqqIqsqqsvvKqNvvvv:q8ssqqss?NqLsqsttttLqssssqIq:qssss=qqIqssssqIqLtqsKKsLsqqttIts:ttqqK?tttttttttNvvv=sss:qssssss=:q?ssstt8v:tttttttq8=q?sqqqtt8vv=vvvvvs:qt?ttsssqv=Kvvv:Ittqqq=LsssqqqqqKs?sqqqNvvLttttsNsK=qqqqqqI=vvvvvs:sN=vvvvvssst?tttttttt8KvvvvLttt8vvvvLtttIqqtt8L8qsssqttItt:tttttt8qLsqqqssKq8sqKvvvv=LIttttts?ssKqsqsssKs8vvvqqq?ssLsqqsttIttsLssqvvvvvKv8:sqsttttttt8vv=vvvvqqqq:ssqqqqq=qs?sqqqNvvv:ttttsNKIIqsqttttt8sLss?sLsssvvvvvvqNqsssqq=qqNqsssqqI8q=qsssqq=qq8vv=qqIqsqssv=qNvvvvvvLts8qqq?NsLsqttttt:qqs|I VMS.BCK [V9.DOCS]IPD255.PS;2(#i 5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A} ` VMS.BCK [V9.DOCS]IPD255.PS;2x 5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF~PT] VMS.BCK [V9.DOCS]IPD255.PS;2P FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00Ao@ VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5L VMS.BCK [V9.DOCS]IPD255.PS;2 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF000000000000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000000000FF00000000000000FF00000000000000FF00000000000000 FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000000 00FF00000000000000FFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000000000FFFF0000000+-H VMS.BCK [V9.DOCS]IPD255.PS;2.S 00000FFFF000000000000FFFF000000000000FF FF000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A500000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A500000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFF FF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FFFFFF0000000000FF FFFF0000000000FFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFF FF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFF FFFF00000000FFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFF FF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFF FFFF000000FFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A50000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A500FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFF FF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFF FFFF00FFFFFFFFFFFFFFA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5AÝ VMS.BCK [V9.DOCS]IPD255.PS;2 5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5v VMS.BCK [V9.DOCS]IPD255.PS;2  A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5? VMS.BCK [V9.DOCS]IPD255.PS;2, 00 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5j\ VMS.BCK [V9.DOCS]IPD255.PS;2\ A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A/KttIttsKsqqqt?ttNvKvvvvvvvvv:NvLttNv=qsssLNvvqLsIttttttttttNvqLsqqssss==q:sq?tttttNvvLttttNvvLttttNv=qqqqqqIIsNqqsq=qNqsqqttttt8sKqqsss?ssLsqqsss?sssqqsssKKsKqqsLttt8qqssqttI8qLttttttt8vvKvvsLqt8vvssssLIsssss:ss:qsssssKKsqsssss?ss=qsssLttt8vvqLqt?8vv=s:sqsNs:NvvvvvssssLssssss?ssKsssss?ssKssssssKsNvvvvvq=q==qsssqttItt:qsssqqIvv:ttttttNvvv=vvvvvvKvvvvvv:N:tttttsqIq=qqsssq=qq8vvvvvvLttt?ttttsN=ss?sv=:NvvvKvvvvvvvvvvvv:Nvvv:qIq=qqqqqttI8qNLtttttttttNvq:sss?tt=qssttt?tt8Kvvvvvvvvv:8Ltt8=qsssv:t8vvqs:st?ttttttttNvsLsqqsssq==qsLsqtt?tttttNLttttNLtttt8=qsqqqq??sNqssq=q8sqsttttt8sKqssss?ssLsqssss?sssqssssKKsKqssLttt8vvqLI=qqsqqq?ss:qqsttIttsKsqqqt?8vvvvvvvvvv:tt?ttN:ttttNvLtqIq=ssqqqttItt:?ssqqqq=q?ttttsNs:NvvvssssLssssss?ssKsssss?ssKssssssKsNvvvsKsKKsqqs?sLsqqsss?sLttttttt8KvvvvKvvvvLtt8Lttttts?ssKvvvvvvvv:?ssqqssKq8ssqKvv8qssttttt88=qsssssNsNqsssssKsqsssss?ss=qsssLttt8vvqLIK=qsqqssNtt?ttstItt=qsqttttt?tttt8KvvvvvvvvL8Ltttt8=qssLNvvvvvvqLsIttttttNvq:sqssK=q:qstttt?ttttttNvvv:ttttttNvvv:ttttttNvvvKsqqqs??s8ssq=vNsssttttt8q=qqqqqqIqLqqqqqqIqqqqqqq==q=qqqvv:Nvvvvvvvvvs:?svvKssssqIq:sss?tt=qssttt?8vvvvvvvvvvLttt?ttNLttttt8LtqIqsKssqqqttIttsL?ssqqqq=qtt?ttttsNs:NvssssLssssss?ssKsssss?ssKssssssKsNvsKsKKsqss?sLsqssss?sLttttttttt8KvvKvvLtt8Lttttttts?ssKssqsssKsNvvvvvvvvvLtttIttsNsKvvvvvqqqIKLtNvKvvvvvvvvvv:ttttNvLtqIq=ssqqqttI8qN:ttNvq:qqsqttItt=qqqttttttt?tttttt8KvvvvvvL8Ltttttt8=qsqvLttt8vvvvvLqt?tttttt8sLsqqsqqqsKKsLsqtttttt?tttttttt8Lttttttt8LqqssqqIqLttttttt8L?tttts8qKvvss?s:ttttttttttItttItttttttttt8vvL8:ttttts?ssKsqss?Nvs:ttttttIttt?ttstItt=qsqttttt?8vvvvvvvvLttt?ttt8Lttttttt8Lts?q=qqss?tt:Iqssss=qIttq8qLNvvvvvvvqqqqLqqqqqqIq=qqqqqqIq=qqqqqq=qq8sKsKKssss?s:ssssss?svv:NvvvKvvvvvvvvvvvv=vvvvvvvvvvvv:N:qIq=qqqqqq=qq8vv:Ittttttq8sv=vvqqq?sKLt8KvvvvvvvvvvLttttt8LtqIqsKssqqqttI88:Nvs:qqttItt=qsqqtttttttt?tttttttt8KvvvvL8Ltttttttt8=qqqsLttt8vvvvvvqLqt?tttttt8sLsqqqssKKsLsqtttttttt?tttttttttt8Lttttttttt8Ltttttttttt8=qqsqqq??sNqqs=8sqqqNvsKqqqqqIsLsqqqqqIssqqqqq==sKqqvv:Nvvvvvs:?svv=qqsqqqIq:qqsqttItt=qqqttttttt?8vvvvvvLttt?ttttt8Lttttttttt8Lt?ssKssqqqt?sL?ssqqqsKtt?ttttsNL8ssssLssssss?ssKsssss?ssKvvvvvvvvvvvv:?ssstt8L8vvqLqt?tttttttttt8s=qsssssNsNqsssssLssqsss?s??sqsssLttt8vvLtttIsqqss:ssLqsttNsv=vvvvqqs?sKLttt8KvvvvvvvvLttttttt8Lts?q=qqss?8qNLtttttttttNvqLsqqs?s=qsqq?ttNvvv=vvvvvvvvv:Nvv:ttNvvvKqssLttt8vvqLqtItttttttttt8q:qqsqq==qLqqINvvv:Nvvv:NvvvKssssqIIqNsssvvKqNqss8sKqqqqq?ssLsqqqqq?sssqqqqqKKsKqqvv:t8vvvvvs:?s=qqqqqqIs:qqttItt=qsqqtttttttt?8vvvvLttt?ttttttt8Lttttttttttt8Ltts?ssKssqq?sL?ssqqssKtt?tttts8qL8ssssLssssss?ssKsssss?ssKssssssKsNvvvvvvvv:8LttsNsKvvvvvvvvvv:s?sqqqqq=qs8sqqqqq=qssqqq=q==ssqqqNvvv:ttttNvvv=qqsqqqIq:qqsqttItt=qqqtttt8KLttttt8KvvvvvvLttttttttt8Lt?ssKssqqqt?Nv8Ksqqqs?sKvvs:sqt8ssssLssssss?ssKsssss??s?NvvvKsssLttt8vvqLqt?tttttttttt8s=qsssssNKs:qsssss8sqssssKs?sqssssKs?sqssss?ss:ttttttI8Kvvsv=qNqsqtt8sKqqqqs?ssLsqqqqs?sssqqqqsKKsKqqLNvvvvqL?svvKqssssIqLsqqs?s=qsqq?Nvvvvvvvvv:IttN:ttNvvv:ttqIq=qqsqqttIttLIqsqqq=qtt?ttttq8qL8ssssLssssss?ssKsssss?ssKssssssKsNvvvvvvvv:tt8LttsNqKvvvvvvvvvvLts?sqqqqqKs8sqqqqqKssqqq=qKKssqqqNvvLttttNv=qqqqqqIs:qqttItt=qsqqttttt8KLttttttt8KvvvvLttttttttttt8Ltts?ssKssqq?Nv8Ksqqss?sKvvsLqt8ssssLssssss?ssKsssss??s?ssssss?ss:qIqsKsqqqqttIttsLsqqqqqILtN:tt?ttIttttNvvv:ttttNvvv:ttttNvvv=qqsqqqIIqNqq=qNqqqtttt8sKqqqss?ssLsqqqss?sssqqqssKKsKqqvLttt8vvvvvLI=qqsssqIq:qqs?t=qqqqINvvvvvvvvvvv:?N:ssssss?ssKsssLttt8qLqt?8LtsNsssvvKvv:?ssssvvvvvvvv=vvvvvvvvvvvv:Nvvvvvvvvvvv:Nvvvvvvvvvvvv:?ssssqIq8=qsssq8qKvvvvvvvvLts?sqqqqsKs8sqqqqsKssqqq=sKKssqqqtt8vvv:ttttttttNvvvKqssssIqLsqqs?s=qsqqNvvK:ttNvvv=vvvvvvvvvv:ttNvvv:ttqIq=qqsqqttI8q8=qqsqqqIKvvqLqt8ssssLssssss?ssKsssss??s?ssssss?ss:qIssKsqqqqttIsLsqqqqq?sLt8Ltt?tt?tttttNvvLttttNvvLttttNv=qqqqqqIIsNqqsq=qNqsqqttttt8sKqqsss?ssLsqqsss?sssqqsssKKsKqqsLttt8vvvvqLI=qqssqqIs:qqsItt=sqqqI8vvvvvvvvvv:?ttN:ttNvvvLtqIq=qsqqqttItt:Isqqqq=q?ttsNs:NvvvvvssssLssssss?ssKsssss?ssKssssssKsNvvvvvLtt8Ltttq8qKvvvvvvLts?sqqqssKs8sqqqssKssqqqsKsKKssqqqt8Ltttttt8=qqsssqIq:qqs?t=qqqqNvv=:NvvvKvvvvvvvvvvvv:Nvvv:qIq=qqqqqttI8qN=qqqqqqIvvKvvvvvvs:sNvvvvvvvssssLssssss?ssKsssss??s?ssssss?ss:?ssKsqqqqt?sLsqqqqs?sLttt8Ltt?tttt?tttttNLttttNLtttt8=qsqqqq??sNqssq=q8sqsttttt8sKqssss?ssLsqssss?sssqssssKKsKqssLttt8vvqLI=qqsqqq?ss:qqs? VMS.BCK [V9.DOCS]IPD255.PS;2e 5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A4 VMS.BCK [V9.DOCS]IPD255.PS;2TF 5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 00A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A500 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000 VMS.BCK [V9.DOCS]IPD255.PS;2 000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 9 9 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -39 1527 (\320\3129 \320) -0.006104 0 92 1 4 A1` O1` N1` F M1` /AA 220 220 w1` -825 -1314 (Normal keyboard characters are encoded as one-character strings. Other keys such as the) -0.411133 0 1800 12 86 A1` -975 -1260 (Home key produce integer codes; see Appendix D.) 0.000229 0 1031 7 46 A1` -825 -1181 (The other events produce integer codes corresponding to keywords:) 0.003769 0 1381 8 64 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -675 -1114 (&lpress) 0 0.01445 153 0 6 A1` /AA 220 220 w1` -375 -1114 (left mouse press) -0.003662 0 329 2 15 A1` /AB 220 220 w1` -675 -1048 (&ldrag) 0 0.002609 132 0 5 A1` /AA 220 220 w1` -375 -1048 (left mouse movement) -0.043533 0 440 2 18 A1` /AB 220 220 w1` -675 -982 (&lrelease) 0 -0.004379 191 0 8 A1` /AA 220 220 w1` -375 -982 (left mouse release) -0.035599 0 362 2 17 A1` /AB 220 220 w1` -675 -916 (&mpress) 0 0.001083 181 0 6 A1` /AA 220 220 w1` -375 -916 (middle mouse press) -0.002853 0 409 2 17 A1` /AB 220 220 w1` -675 -849 (&mdrag) 0 -0.013428 160 0 5 A1` /AA 220 220 w1` -375 -849 (middle mouse movement) -0.042725 0 520 2 20 A1` /AB 220 220 w1` -675 -783 (&mrelease) 0 0.011642 219 0 8 A1` /AA 220 220 w1` -375 -783 (middle mouse release) -0.03479 0 442 2 19 A1` /AB 220 220 w1` -675 -717 (&rpress) 0 0.001083 158 0 6 A1` /AA 220 220 w1` -375 -717 (right mouse press) 0.03154 0 362 2 16 A1` /AB 220 220 w1` -675 -651 (&rdrag) 0 -0.013428 137 0 5 A1` /AA 220 220 w1` -375 -651 (right mouse movement) -0.008347 0 473 2 19 A1` /AB 220 220 w1` -675 -584 (&rrelease) 0 0.011642 196 0 8 A1` /AA 220 220 w1` -375 -584 (right mouse release) -0.000412 0 396 2 18 A1` /AB 220 220 w1` -675 -518 (&resize) 0 0.01445 153 0 6 A1` /AA 220 220 w1` -375 -518 (window resize) -0.091141 0 299 1 12 A1` -825 -439 (An event is accepted by calling ) 0.948792 0 645 6 31 A1` /AB 220 220 w1` -180 -439 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -32 -439 (, which returns the code for the next unprocessed) 0.948776 0 1007 8 48 A1` -975 -385 (event. If no event is available, ) -0.00502 0 612 6 32 A1` /AB 220 220 w1` -363 -385 (Event\(\) ) -0.005569 0 160 1 7 A1` /AA 220 220 w1` -203 -385 (waits for one to occur.) -0.00502 0 450 4 22 A1` -825 -306 (When ) 8.645294 0 141 1 4 A1` /AB 220 220 w1` -684 -306 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -536 -306 ( returns an event, it also sets the values of keywords that give further) 8.645584 0 1511 13 71 A1` -975 -251 (information about the event:) 0.017502 0 579 3 27 A1` /AB 220 220 w1` -675 -185 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` -621 -185 (, ) 0.109039 0 23 1 1 A1` /AB 220 220 w1` -599 -185 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` -375 -185 (mouse location in pixels) 0.012482 0 490 3 23 A1` /AB 220 220 w1` -675 -119 (&row) 0 0 104 0 3 A1` /AA 220 220 w1` -571 -119 (, ) -0.041504 0 23 1 1 A1` /AB 220 220 w1` -548 -119 (&col) 0 0 89 0 3 A1` /AA 220 220 w1` -375 -119 (mouse location in characters) 0.00705 0 576 3 27 A1` /AB 220 220 w1` -675 -53 (&control) 0 -0.001801 168 0 7 A1` /AA 220 220 w1` -375 -53 (succeeds if the Control key was pressed) 0.015869 0 806 6 38 A1` /AB 220 220 w1` -675 14 (&meta) 0 0.00885 132 0 4 A1` /AA 220 220 w1` -375 14 (succeeds if the Meta key was pressed) 0.005081 0 753 6 35 A1` /AB 220 220 w1` -675 80 (&shift) 0 -0.008957 115 0 5 A1` /AA 220 220 w1` -375 80 (succeeds if the Shift key was pressed) -0.007187 0 744 6 36 A1` /AB 220 220 w1` -675 146 (&interval) 0 0.001633 178 0 8 A1` /AA 220 220 w1` -375 146 (time in milliseconds since previous event) 0.006836 0 835 5 40 A1` /AB 220 220 w1` -825 225 (Enqueue\(a, x, y, s, i\)) -2.55806 0 410 4 21 A1` /AA 220 220 w1` -415 225 ( places event code ) -2.301682 0 369 4 18 A1` /AB 220 220 w1` -46 225 (a) 0 0 25 0 0 A1` /AA 220 220 w1` -20 225 ( in the queue with) -2.301682 0 358 4 17 A1` /AB 220 220 w1` 338 225 ( x) -2.557877 0 33 1 1 A1` /AA 220 220 w1` 371 225 ( and ) -2.301682 0 96 2 4 A1` /AB 220 220 w1` 467 225 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 490 225 ( as the associated mouse) -2.301682 0 485 4 23 A1` -975 279 (coordinates. ) -3.139145 0 256 1 12 A1` /AB 220 220 w1` -719 279 (s) 0 0 23 0 0 A1` /AA 220 220 w1` -696 279 ( is a string containing any of the characters ) -3.139343 0 849 9 45 A1` /AB 220 220 w1` 152 279 (c) 0 0 23 0 0 A1` /AA 220 220 w1` 175 279 (, ) -3.139145 0 20 1 1 A1` /AB 220 220 w1` 195 279 (m) 0 0 38 0 0 A1` /AA 220 220 w1` 233 279 (, or ) -3.139145 0 71 2 4 A1` /AB 220 220 w1` 304 279 (s ) -3.488846 0 32 1 1 A1` /AA 220 220 w1` 336 279 (to indicate modifier keys; ) -3.139359 0 514 4 26 A1` /AB 220 220 w1` 850 279 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 861 279 ( gives) -3.139145 0 114 1 5 A1` -975 334 (the interval.) 0.081375 0 244 1 12 A1` -825 413 (The event queue is an Icon list; Appendix E describes its format. ) -4.264648 0 1258 12 65 A1` /AB 220 220 w1` 433 413 (Pending\(\)) 0 0 199 0 8 A1` /AA 220 220 w1` 631 413 ( returns the event) -4.264557 0 344 3 17 A1` -975 467 (list for direct access from Icon. The expression ) -4.159882 0 911 8 48 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Symbol /AC /|______Symbol F /Symbol x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -64 467 (*) 0 0 23 0 0 A1` /AB 220 220 w1` -41 467 (Pending\(\)) 0 0 199 0 8 A1` /AA 220 220 w1` 157 467 ( returns the size of the list and can be used) -4.159912 0 818 10 44 A1` -975 521 (to check whether an event is available.) 0.016068 0 779 6 38 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Bold /AD /|______Helvetica-Bold T /Helvetica-Bold x1` /$5 bmt^ /AD 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 650 (Dialogs) 0 -0.002502 196 0 6 A1` /AA 220 220 w1` -825 754 (Several library procedures display a message or prompt and wait for input.) -0.00824 0 1527 11 73 A1` /AB 220 220 w1` -825 834 (Notice\(line1, line2, ...\)) -2.327103 0 439 2 24 A1` /AA 220 220 w1` -386 834 ( displays one or more lines of text and then waits for the user to click) -2.093903 0 1361 15 71 A1` -975 888 (an ) -0.058182 0 61 1 2 A1` /AB 220 220 w1` -914 888 (Okay) 0 0 107 0 3 A1` /AA 220 220 w1` -807 888 ( button.) -0.058182 0 157 1 7 A1` /AB 220 220 w1` -825 967 (OpenDialog\(caption, filename\)) 11.234482 0 630 1 28 A1` /AA 220 220 w1` -195 967 ( and ) 10.10939 0 121 2 4 A1` /AB 220 220 w1` -74 967 (SaveDialog\(caption, filename\)) 11.234482 0 623 1 28 A1` /AA 220 220 w1` 549 967 ( each request a text) 10.109711 0 426 4 19 A1` -975 1021 (string, normally a file name; they differ in their sets of accompanying buttons. The resulting file) 1.117599 0 1950 15 98 A1` -975 1075 (name is stored in the global variable ) -0.027664 0 745 7 37 A1` /AB 220 220 w1` -230 1075 (dialog_value) 0 0 257 0 11 A1` /AA 220 220 w1` 27 1075 (.) 0 0 11 0 0 A1` /AB 220 220 w1` -825 1154 (Dialog\(\)) 0 0 160 0 7 A1` /AA 220 220 w1` -665 1154 ( constructs a dialog containing arbitrary numbers of caption lines, text string inputs,) -5.164! VMS.BCK [V9.DOCS]IPD255.PS;2m5, 795 0 1640 12 86 A1` -975 1209 (and buttons. See Appendix A for details.) -0.004333 0 824 6 39 A1` -825 1288 (The VIB program [3] supports interactive construction of dialog boxes with even more) 4.381714 0 1800 12 83 A1` -975 1342 (generality. It allows arbitrary placement of buttons and text within a dialog box and provides) 4.236176 0 1950 14 93 A1` -975 1396 (additional devices such as sliders and toggle buttons.) 0.005692 0 1079 7 53 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 10 10 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1527 (\320\31210 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1314 (W) 0 0.012405 51 0 0 A1` -924 -1314 (indows) 0 0.012405 187 0 5 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -825 -1210 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` -639 -1210 ( opens a window and returns a value of type ) -3.372787 0 883 10 43 A1` /AC 220 220 w1` 244 -1210 (window) 0 0 153 0 5 A1` /AA 220 220 w1` 397 -1210 (. If ) -3.372879 0 58 2 4 A1` /AC 220 220 w1` 455 -1210 (&window ) -3.748505 0 192 1 7 A1` /AA 220 220 w1` 648 -1210 (is null, ) -3.372879 0 141 2 8 A1` /AC 220 220 w1` 789 -1210 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` -975 -1156 (assigns the newly opened window to it. Attribute values can be given as arguments to ) -2.756683 0 1715 15 84 A1` /AC 220 220 w1` 740 -1156 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` 926 -1156 ( to) -2.756683 0 49 1 2 A1` -975 -1101 (configure the new window.) 0.001633 0 560 3 24 A1` /AC 220 220 w1` -825 -1022 (WFlush\(\) ) -3.186127 0 195 1 8 A1` /AA 220 220 w1` -630 -1022 (flushes the window\325s output buffer, forcing the immediate display of any output) -2.866714 0 1605 11 78 A1` -975 -968 (that has been buffered. ) -3.640549 0 461 4 23 A1` /AC 220 220 w1` -514 -968 (WSync\(\) ) -4.046204 0 184 1 7 A1` /AA 220 220 w1` -330 -968 (flushes the buffer and does not return until all pending output has) -3.640533 0 1305 11 66 A1` -975 -914 (been displayed. ) 3.941315 0 338 2 15 A1` /AC 220 220 w1` -637 -914 (WDelay\(i\)) 0 0 201 0 8 A1` /AA 220 220 w1` -436 -914 ( flushes the buffer and then delays ) 3.941269 0 738 7 35 A1` /AC 220 220 w1` 302 -914 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 312 -914 ( milliseconds. ) 3.941315 0 297 2 14 A1` /AC 220 220 w1` 609 -914 (WClose\(\) ) 4.380112 0 208 1 8 A1` /AA 220 220 w1` 817 -914 (closes a) 3.940918 0 158 1 7 A1` -975 -860 (window.) 0 0.017151 181 0 6 A1` -825 -781 (The ) -3.076675 0 85 1 3 A1` /AC 220 220 w1` -740 -781 (size) 0 0 81 0 3 A1` /AA 220 220 w1` -658 -781 ( and ) -3.076675 0 94 2 4 A1` /AC 220 220 w1` -564 -781 (pos ) -3.419312 0 83 1 3 A1` /AA 220 220 w1` -481 -781 (attributes \(and other related attributes\) can be used to resize or reposition) -3.076614 0 1456 11 76 A1` -975 -726 (a window. ) 0.002274 0 227 2 9 A1` /AC 220 220 w1` -748 -726 (Raise\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -600 -726 ( and ) 0.002274 0 100 2 4 A1` /AC 220 220 w1` -500 -726 (Lower\(\)) 0 0 155 0 6 A1` /AA 220 220 w1` -345 -726 ( adjust the window stacking order on the screen.) 0.002274 0 983 8 47 A1` -825 -647 (The) 0 0 77 0 2 A1` /AC 220 220 w1` -748 -647 ( canvas ) 12.510605 0 196 2 7 A1` /AA 220 220 w1` -552 -647 (attribute specifies window visibility. The default value is ) 11.257751 0 1252 8 59 A1` /AC 220 220 w1` 700 -647 (normal) 0 0 140 0 5 A1` /AA 220 220 w1` 840 -647 (. With) 11.258484 0 135 1 5 A1` /AC 220 220 w1` -975 -593 (canvas=maximal) 0 0 343 0 13 A1` /AA 220 220 w1` -632 -593 (, the window fills the screen. With ) -0.228806 0 702 7 35 A1` /AC 220 220 w1` 70 -593 (canvas=hidden) 0 0 310 0 12 A1` /AA 220 220 w1` 379 -593 (, the window is not visible on) -0.22879 0 596 6 29 A1` -975 -539 (the screen. With ) 1.57016 0 343 3 16 A1` /AC 220 220 w1` -632 -539 (canvas=iconic) 0 0 289 0 12 A1` /AA 220 220 w1` -342 -539 (, a minimized icon or label is displayed. The attributes ) 1.570114 0 1125 10 56 A1` /AC 220 220 w1` 783 -539 (iconlabel) 0 0 181 0 8 A1` /AA 220 220 w1` 964 -539 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -975 -485 (iconimage) 0 0 209 0 8 A1` /AA 220 220 w1` -766 -485 (, and ) -0.014771 0 112 2 5 A1` /AC 220 220 w1` -654 -485 (iconpos ) -0.016418 0 171 1 7 A1` /AA 220 220 w1` -484 -485 (can affect the appearance of the window while in this state.) -0.014771 0 1199 10 59 A1` /AC 220 220 w1` -825 -406 (Active\(\) ) -2.483902 0 166 1 8 A1` /AA 220 220 w1` -659 -406 (lets a program multiplex input from several windows. It checks all open windows) -2.235031 0 1634 12 78 A1` -975 -351 (and returns a window for which an event is available; it waits if there are no unprocessed events.) -0.879242 0 1950 17 97 A1` /AB 260 260 w1` -975 -222 (Graphics Contexts) 0.064697 0 482 1 16 A1` /AA 220 220 w1` -825 -118 (A window is composed of two parts: a canvas, the visible or invisible area used for drawing,) -4.496017 0 1800 16 91 A1` -975 -64 (and a graphics context, a set of parameters that control drawing.) -0.004349 0 1303 10 64 A1` -825 15 (All the attributes of a window are associated with either its canvas or its graphics context.) -1.00325 0 1800 15 92 A1` -975 69 (The tables in Appendix C list the attributes by category.) -0.008499 0 1129 9 56 A1` /AC 220 220 w1` -825 149 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -675 149 ( creates a new graphics context coupled with an existing canvas. The resulting) 5.724457 0 1650 12 77 A1` -975 203 (window value shares the canvas with an existing window but has an independent set of graphics) -1.278458 0 1950 15 92 A1` -975 257 (attributes. These attributes are initialized to the same values as in the original window, then) 6.496445 0 1950 14 94 A1` -975 311 (modified by any arguments passed to ) -0.016953 0 777 6 35 A1` /AC 220 220 w1` -198 311 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -48 311 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -825 390 (Couple\(W1, W2\)) 5.693634 0 344 1 13 A1` /AA 220 220 w1` -481 390 ( produces a window that couples the canvas of ) 5.123184 0 1006 9 45 A1` /AC 220 220 w1` 526 390 (W1) 0 0 69 0 1 A1` /AA 220 220 w1` 595 390 ( with the graphics) 5.123077 0 380 3 17 A1` -975 444 (attributes of ) 5.839478 0 269 2 13 A1` /AC 220 220 w1` -706 444 (W2) 0 0 69 0 1 A1` /AA 220 220 w1` -638 444 (. This allows a set of graphics context attributes to be shared across multiple) 5.839584 0 1613 13 78 A1` -975 499 (canvases.) 0 0.004013 191 0 8 A1` /AC 220 220 w1` -825 578 (Uncouple\(\)) 0 0 224 0 9 A1` /AA 220 220 w1` -601 578 ( discards a window value. If there are no other references to the window\325s) 5.774719 0 1576 13 73 A1` -975 632 (canvas, it disappears from the screen.) 0.003174 0 759 5 37 A1` /AB 220 220 w1` -975 736 (An Example) -0.063889 0 262 1 9 A1` /AA 220 220 w1` -825 840 (This example illustrates the use of graphics contexts. First, several windows are created by) -2.972336 0 1800 14 92 A1` -975 894 (cloning, each with different attributes. Note that the two clones of ) 5.888824 0 1424 12 69 A1` /AC 220 220 w1` 449 894 (wide) 0 0 94 0 3 A1` /AA 220 220 w1` 544 894 ( inherit its linewidth) 5.888702 0 431 3 21 A1` -975 948 (attribute. Then, the cloned& VMS.BCK [V9.DOCS]IPD255.PS;21>; windows are used to draw circles, showing the effects of the different) -0.174423 0 1950 15 97 A1` -975 1002 (attributes.) 0 -0.00415 205 0 10 A1` O1` $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 11 11 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1527 (\320\31211 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 200 200 w1` T g` 0 0 0 1 (Black) 1 T d` -900 -1315 (WOpen\("size=400,300"\) | stop\("can\325t open window"\)) -0.023392 0 960 4 48 A1` -900 -1265 (dashed := Clone\("linestyle=dashed"\)) 0.009354 0 674 2 34 A1` -900 -1215 (wide := Clone\("linewidth=5"\)) 0.017899 0 521 2 27 A1` -900 -1165 (gray := Clone\(wide, "fg=gray"\)) -0.029831 0 555 3 29 A1` -900 -1115 (patt := Clone\(wide, "fillstyle=textured", "pattern=grains"\)) -0.008347 0 1024 4 58 A1` -900 -1040 (DrawCircle\(100, 150, 70\)) -0.01506 0 463 2 23 A1` -900 -990 (DrawCircle\(dashed, 150, 150, 70\)) -0.029831 0 623 3 31 A1` -900 -940 (DrawCircle\(wide, 200, 150, 70\)) 0.02739 0 572 3 29 A1` -900 -890 (DrawCircle\(gray, 250, 150, 70\)) -0.023605 0 567 3 29 A1` -900 -840 (DrawCircle\(patt, 300, 150, 70\)) 0.008957 0 556 3 29 A1` -900 -787 (WDone\(\)) 0 -0.003387 167 0 6 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -658 (Further Information) -0.022781 0 502 1 18 A1` /AA 220 220 w1` -825 -554 (Appendix A provides detailed documentation of all built-in graphics functions and all) 4.739349 0 1800 11 84 A1` -975 -500 (library procedures mentioned here. Additional library procedures are described in [4].) -0.007812 0 1749 10 85 A1` -825 -421 (Some of the programs in the library can be run to help learn about color in Icon. The ) -4.871735 0 1627 18 85 A1` /AB 220 220 w1` 802 -421 (colrbook) 0 0 173 0 7 A1` /AA 220 220 w1` -975 -366 (and ) 0.695984 0 90 1 3 A1` /AB 220 220 w1` -885 -366 (colrpick) 0 0 155 0 7 A1` /AA 220 220 w1` -730 -366 ( programs allow interactive exploration of English and numeric color specifications,) 0.695969 0 1705 10 83 A1` -975 -312 (respectively. The ) 0.010498 0 355 2 17 A1` /AB 220 220 w1` -620 -312 (palette) 0 0 138 0 6 A1` /AA 220 220 w1` -482 -312 ( program displays any of the predefined color palettes.) 0.010498 0 1111 8 54 A1` -825 -233 (Many other library procedures make extensive use of the graphics facilities. Much can be) -0.085129 0 1800 13 87 A1` -975 -179 (learned by browsing through the source code.) -0.018845 0 931 6 43 A1` /AC 260 260 w1` -975 -50 (Acknowledgments) 0 -0.001328 479 0 14 A1` /AA 220 220 w1` -825 54 (Many people have assisted the development of Icon\325s graphics capabilities. Darren Merrill,) -3.658875 0 1800 11 89 A1` -975 109 (Ken Walker, Nick Kline, and Jon Lipp contributed to the design. Darren Merrill and Sandy Miller) -1.353043 0 1950 15 94 A1` -975 163 (assisted with aspects of the implementation. Steve Wampler and Bob Alexander provided sugges-) -2.942673 0 1950 12 92 A1` -975 217 (tions, bug reports, and program examples.) 0.016922 0 861 5 40 A1` /AC 260 260 w1` -975 346 (References) 0 0.001312 292 0 9 A1` /AA 220 220 w1` -975 450 (1.\312R. E. Griswold and M. T. Griswold, ) -5.72908 -0.134247 727 7 37 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -248 450 (The Icon Programming Language) -5.729141 -0.134247 602 3 28 A1` /AA 220 220 w1` 354 450 (, Prentice-Hall, Inc., Englewood) -5.729141 -0.134247 621 3 31 A1` -975 504 (Cliffs, NJ, second edition, 1990.) -0.020645 0 630 4 32 A1` -975 609 (2.\312R. E. Griswold, C. L. Jeffery, and G. M. Townsend, ) -1.150986 0 1065 10 53 A1` /AD 220 220 w1` 90 609 (Version 9.0 of the Icon Programming Language) -1.150986 0 874 6 43 A1` /AA 220 220 w1` 964 609 (,) 0 0 11 0 0 A1` -975 663 (The Univ. of Arizona Icon Project Document IPD236, 1994.) 0.008957 0 1187 8 55 A1` -975 767 (3.\312M. Cameron and G. M. Townsend, ) -0.293594 0 760 6 33 A1` /AD 220 220 w1` -215 767 (VIB: A Visual Interface Builder for Icon) -0.293594 0 740 6 39 A1` /AA 220 220 w1` 524 767 (, The Univ. of Arizona) -0.293594 0 451 4 21 A1` -975 821 (Icon Project Document IPD258, 1994.) -0.01973 0 746 4 34 A1` -975 925 (4.\312R. E. Griswold, ) -3.981781 0 352 3 18 A1` /AD 220 220 w1` -623 925 (The Icon Program Library; Version 9.0) -3.981766 0 701 5 36 A1` /AA 220 220 w1` 78 925 (, The Univ. of Arizona Icon Project Document) -3.981766 0 897 7 43 A1` -975 979 (IPD242, 1994.) -0.055344 0 273 1 12 A1` -975 1084 (5.\312Berk T., Brownstein L., and Kaufman A., \322A New Color-Naming System for Graphics Lan-) 5.238571 0 1950 13 86 A1` -975 1138 (guages\323, ) 0.015457 0 189 1 8 A1` /AD 220 220 w1` -786 1138 (IEEE Computer Graphics & Applications) 0.015457 0 768 4 36 A1` /AA 220 220 w1` -18 1138 (, May 1982, 37-44.) 0.015457 0 359 3 17 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:GIPD6.tiff %ALDImageDimensions: 402 302 %ALDImageCropRect: 0 0 402 302 %ALDImageCropFixed: 0.00000 0.00000 402.00000 302.00000 %ALDImagePosition: 347.050 575.050 347.050 720.000 540.000 720.000 540.000 575.050 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 30474 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599502 0.000000 0.000000 9.599338 821.000000 -6480.000000] concat false 402 302 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 246137 Hex Bytes isCL^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF$ VMS.BCK [V9.DOCS]IPD255.PS;21,2J FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;21Y FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;21Ah FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9$ VMS.BCK [V9.DOCS]IPD255.PS;2Jw FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF3 U VMS.BCK [V9.DOCS]IPD255.PS;2~ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFT|qa8*8"r03b'$"d#=%235/K4v$-4,:;d42%|lukw%,>@3v0Qc.gk2;hvC>u9`?tugezIqq4{khiqrvwvef-gwqrvqcevaapl!TBLcgu~~d~ g"RVV#raj?-7+9 CCGBFD[LGWP"PfVBlIXQ?{EfG^MGo& s~e{aazt3i!67%=<(""1%u_U A[sN"P  eVEkrCCVE$ QV= ETN\yDloeNH!!\J1'&2)')?t"653A8V >?1[FDJ~Q=YAVw=Y$&Pe< b4B#W1!tl &`2Wt ~kfsrm5m#(>&GbHY@C ._ 'YxLvKOWHRatfNGO \zNRSM` =qk}q\~\!#C$uLPRf$mo+Onl1/%g @H}dqGs:$p!yk4`^I:LYbks1czn%9 >~}<{FjGhcL=s!9,V^SLM*TLHv?Mt   uG7.f[ekFT+{V*Zu{[&}b*{kguQ :^m<;1tjHol*U!SN F*UZ RURTsO-mEA51*dbDTI^I!1? iF s.*6&>Tz_:Bis]e|E9Rv+CibcTHn`(wjiVS[]C(pyQ>(t|i}W n^FTYy Ra\Lg6[a.7b\o_4Wjn 53.P!:K/W LP !9[.i[AEPnHk G\C ;7JXY|}B^Fn ui !?'&+5~ ,"#jftvvifwso*t%Wof=hvp}uftc{qt`vrcpr662?")#}d(2wdU`bc^|UujXTC^q5b'o 9`q8j~mu`mlkn6>s*.f]^ZPGZS_\aDnMZ)~%%NQDK _eYi!R8BYevHD@q`*2p'%3~fnhbxp72")k;'=F.wY&>0652rp"e gb9^Gf_MyUWa;8v2|%Ji3 HM~pa):vg&):$m;/4rE"cyE@ !1E2pWyESz'Wmdstbr$2_uig5#5#1B2'6K 8-&,y`vvg(p3N';OJCt2b=:'l(wxZ&Lrtama;B6rj`8llra&X` p'xz2<695u.dy0v&9=;18/0v*bn'4#_b<4r|v3zd{-]"w>uz'rj*5l`#?!c7u0pd%%3;b, 1&#-8v9n#@2gK0VTwgyOy"Mkj5q&Vx(A;S 5;eo'Heq#B}g%;{vm$<#%.w1GFLN r *:LMl  Ms ?;Ca~+PAIU U{x$=;1)0boxm+~'b/}irqtp*D^FtlA<c{BBMCbRo^SKNV GCnj H FHA~0*g ul85}Fken3q?17/lg>[l.UHVWOF;z*NdN~7IVIFs@-"EN.GLTTWfv-a``wf?6='K!&b9liTD%=5030#xnYz?)43*&048F0dv{)h\!utsK{FI%>N"u*;z(WNI 3'fgB](b=s",(<2<+)"99<(2>=f$>*6!+8;~w,2j>KEx H"a /3m"?A!7u&_lavzbEQM# wy39Jjn._}'%~:?/'@&p-4$8G\vh/1a3tE~Lqg29.)gwj).;,:~29s)'/(.43{6'444GP*>u'(1%(12965kd<>/fW%&)z7SZp~1-n}b?z720lvvr2(k`?%7 007`$d7s++7>'=B(|abJ=T (?(5&fK!y '=gwpl}:^~"j&%HT\G^[PMV[RWUIGUUWA I 8;> s* khjqfn3/Y-mGyED!7s4GA[ZqIXEU IfGO A [XMDR@RXX\P sa_bufpufBtvf3S^yrr`tq1-F]Mgo ANEcRNzV !dsqERzQ+VrK|K;:YV2/()kJ1wui}r?0,k-[RU[GCBFZv2WfL M$gN2S  BeZt3"# &0'20$*3{)vJh&r _bk<:Hpfd&Py(rvk8tO$+5UD, $nfij#f7{iFff`nifagte0DzJftv+f157jI>I~+MXIc,il>uc':?dg9>tjJhiB2`(Q5mylqvmva5w:[pdvNj'07&#"!niq :-d6/&z4S/0`eGxm9*me1,f3'?9*:8zqs JJ^/v6Kkaftv'v$[lw&Kt(Mkomsq>`7xan%U2w?M*v4df/wcnow$}~> idB-"?6-`l'>u,AR{Ad"4(\a=L&BI"*ez1a0';'~&2;567e1:e'sT=l0 _(adtag)s7KqrudilFZEy|W]WE zV}p\lF]LXE LuEEC MGUMEZ[BXZFPN(g:gve @~6Yntpdd(eUJ+mf([BW V\Q OG&P[lGKSUE@TS:1 HzHEZ$(,7v/*=1t15W1&"3WH+95\t15TVqGP ~DJRQUGt]A] @fcUG2RHav#k |whx'jp|}p|OcCNB5:'jtOI[qYJ[^@EAZDIG%C\ r?oj  Iu" kqgbkg72atd=517 VTGANWaZ^ NrAM=R#laX gZP/ 0rR; sJ pGc1b4>.a6:#l>/* *o`lcx}j<)Stx=+QYTvP: 1qwi  e]KAE{ $\Ussc`9":HZu79=1V3&x7#j)EY( *$g&K%&*rs}~{px&-,fmfktnprwv~9reDea~4L{[?'JyobDzM+ojw~/)4?ku9XJ{c,nvet1Iiq' Vs#w$[`tv#y" N}!>r+1"~:Au/dCd<+dS:2t3*g-Fmzbvwh+7U3{g{G-,jC5bE%/)(5b8!f-}qz!qhs`J73B{vnpb|ers v?@dyv%a{t7 Mdqq/2xt)"vPr~Q =nb/i4fw|d3~3J:;*8?y?@tec9`wr)nn&o1*n#RU\`mi8=>a>1,iF, &)$-;(;.jmxS_2!D `nthkqndlf $o ;'6}16Q%*#Z Y$T>]P^P?u?NC2. K.  Ls 7LrdOw3PfS1HDy"#/["68e=e:|jHCNdAZT" KEU^EW@T]A5RlUbi\ST6_/V"',t65}(/%~5]4-!*~&0v,>S0w^?U_G_H]gWAAJ$eWDRUF[ ]U'sy]weI k`w`h^_ 2#f4'2./%1f`f664&&2 5":/<"lN@A[\N uKK@OY@A}rUk&esQITBC#P4 bpKN>;R~qu/|-7t->"*%9*<#dgn[Jd\0RDUWFBHI@FsY+)@-b),Lpv9N]Ek'6*&BNbg|rf}/qevF@\/:YxNx;e#pt;#FN dCQL[L0V]V+fA'5okRQMF~SO"xXbZ_xSZIR\?ZX{d%\`a%k23.6+(ud8h^lmR&$k@RD!.a>ty7fX lrm|zhqt&c<9v'60=00%&C@zz!V{q"X g&JyoEU-'=6_8r sI j~.s`#(cih!(8?-/d10;b/%594)"8f#d!)7."}1RFv- k[QQ}1ccto&>fh8|./Uvol=rA-"m4vxrfafpdkqg9Cibudads,GxjzLueajfo>;v`wgj ?Q+#Z -<9M!kqvr:hw9v6xBZ##% ;o[8 WMYKe) oAjp9bEy/55$#q;}`op &-AK()u69@&1f-y7dE(#-,8wkq{jmMf)fS"w 3&4=wZb s} D!RVtc:~-n]{iBj3?91MWIFWOTW i<5e3 |}%k8#(cal:Bge,%$>5D*x$2n)&/?w+gdXl" /JGBGQ_f(E\B*'uJNDqV#.O)@Mea?nn1/("+"v 7:Gr~8UQ5d bWS\ ?XOGZE[O:CH"^);t6WCCQKLsZkXxz80j8"t73"1(`f5$;6*9"5wf)2,!3|EZW@BMGLQOHGs_ANOIFTDLJVSOGLgO^XVK""g.<##0w84Rw2+(2::>22-LsYA CW GqVOFV  VGB\VSEV\OL I_okRcwjkvg7Bwrf3!?Oic6 6+T1MAV)< @S LP= N#U?Y2Yqr`g5;:k6IWl ood`fv!-#[=10[g6f|fl]*''?of0wB=Iy5|`rfh}ofn/k_LBs8 z&Eistffw}bfv!a6*j>I|od/~;1&q%f7'9D"bJ3`^ =~6(5?f`w{(!/03u $v>$yixa-]"}m#/- 9*2$f1 1v{j`[KXHxJ3qgk>8b#,82]4}L!6Pqm~ctpvo?s#[$^ybdl9 $;}TfyZ%1yxd=/8;khu~ S  __NVN:E9ZDnC![2CU RH1Tq!Asi! dpG ^?R5(?$.j$Ui#YJDS:cV;b   UUUmW7{qX\uf/!'Vo vppOvljfi.e[:#+-mIY(VCMUPSR[[VQA^L7V{ "A /&WUA\BmJA]C*vt5flqq9u-3"2 4#jnr`|ecwa*HpS< txqR/ U[6SVLMU GYcG\f[M^]QnRC.9czn0^+s8ZP Pmfgujte5s.? 5^wL oL \A& lGV/Ic 8 kcC^T Gw/Hb`vggqpnd~b^4u+SGv%d1?al]UEcZPrRVB4G'N ~E  H  O1 _J_/-+&-9etc3mecTasza~6:|JTcH' D!'WSejc2!E4A7u/F&K$*I^X.F3K?Z-@{5re6N<[2\Uhh=YRzJ4V'S5>W6f7 %f@0V4Z:LnF}F=ebt2U6%:nn+O.zp ?Plee?!KsI1L"A!UeQas>jaw3;dvpJcsd;>3iK`j?c%K4 ~3B=/I&3S+'N'T!U&I6226;B~37Pc7B$B{k5'^&2P4 9K,I&TbY5z-hz_{qsagLHb bQG &*mw.aq8V/Z6.h9U)x2t"R(A# 18~}sr!()uP(nw[cp29('^+Vvs0FfV8 9j iJQ*Js~ h{9M#Rz=Oc@8t@Q`FQDea3Rf\8R 8 Fb}H8p}E6qpo\n?5I:K(D.V!{| VMS.BCK [V9.DOCS]IPD255.PS;2G FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFj VMS.BCK [V9.DOCS]IPD255.PS;2y FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFa- VMS.BCK [V9.DOCS]IPD255.PS;2 u FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFԤ VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7777777777777777777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7777777777777777777777777777777777777777777777777777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000 FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF00000000FF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF77 777777777777777777777777777777777777777777777777777777777777777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFF FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000FFFFFFFFFF7777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777 77FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF00000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000007777777777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777 777777FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF 0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF000000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000077777777777777777777 777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777777777777777 77FFFFFF0000FF0000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF 0000FFFFFF0000FF0000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000077777777777777777777777777 777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFF FF0000FF0000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFF0000FF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFk VMS.BCK [V9.DOCS]IPD255.PS;25 00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777777777777700 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFFFF0077FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777777777777700000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFF0000777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777777700000000000000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FF 0000FFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777777777FFFFFF000000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF 0000FFFFFF7777777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777777777FFFFFFFFFFFFFF00000000 00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFF7777777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00 0000000000000000FFFFFFFFFFv VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF000000000000000000FFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF0000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000FFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000000000FFFFFF00FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000000000000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF0000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0077777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ?J VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777 77777777FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 77777777FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 777777FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777 7777FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFG1 VMS.BCK [V9.DOCS]IPD255.PS;21 FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777 7777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 7777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777 77777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777 77777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFF FFFFFFFFF|g% VMS.BCK [V9.DOCS]IPD255.PS;21 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFF]x VMS.BCK [V9.DOCS]IPD255.PS;2= FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ZqvvKvvKKvvKvvvvvvKKvvKv=vv==vvvvvKqqq:qqqqqKKvvKKvvKvvKvv=vv==vvvvvKKqqqqqqqqqq=vvvvvvvvvKKKKvvK=vv=KK:qqqqqqqq:q:qvvvKqqqqqqqqKKKK=vvvvvvvvvvvKKvvKK==vvvvvvvvvvv=vvv=vvvvKKvv=vKqqqq:qqqKqqqqvvvvv=v=vvvvvvKq:q::qq:qqqqqq:vKKKKKKqqKKKq:qqq:qqvvvvK=vKvvqqKKvvvvKvvKKKvqqqq:qLqvvvvvvvv==vvvvvvKKvvvvKKvvKvvKKKKvvKvvKKvvvvqqqqq:qqqqqqqqKKvvKKvvv=vvKvvvvKKKvvKvvKKKvvvvv=vvKvvKv=vv==vvvKq:qKKvvKKvvKvvKKv=Kvvvvvvvv=vKqqqqqqqqqvKvvvvvvKKKKvvKKKKKKqqq:q:qqqqqqvvvvvvv=qqqqqqqqqqKKKKKvvvvvvvvvvKKvvKKvvvv==vvvvvvv=vvKKKvv=vKqq:qqqKqqqqvvvvv=vvv=vvv:qqq:q::qq:qqqqvv=vKvvvvKKKKvvvvKqqKKKvLqq:qqqqv=Kqq:qqqqqqqqqKvv=vvvKvvKKKvqqqq:qqq:vvvvvvvv==vvvvvv=vvvKKKvvvvKvvKKKKvvKvvKKvvvvvvvvqqq:qqqqqqqqKKvvvvKKvvvvvvv=vvKvvKKKvvKvvKKKv=vvKKvvv=vv=LKqKKKvvKKvvKvvK=vv==vvvvvvvvvvv=vv:qqqqqqvvKvvvvvvKKKKvvvvKKKKKKvvvqq:q:qqqqqqqqvvv=qqqqqqqqqqKKKKKvvvvvvvvvvv=KvvKKvvvvvv=vKvvvvvv=vKvvKKKKqq:qqqKqqqqvvvvv=vvv=q:qqq:q::qv=vvvvvv=vKvvvvvvKKKKvvvvqq=vKKv=vLqq:q:Lqq:qqqqqqqqqqq=vKvvvvKvvKKKqqqqqqqL:vvvvvv==vvvv=vvvKvvvvKKvvvvKvvKKKKvvKvvKKvvvvvvv:vv=vvv=vvvvvvvvvvKvKvvvvvvv=vvKvvKKKvvKvvKKKqqqqqqqq:qqq:qqqqqqqqqqqq:qqqqqqvvvvv=vLLqqKqq:KKvvKKvvKv=vvvv=vv=Kvvvvvvvvvv=Lqqqvvvv=vvvvvKKKKvvv==vKKKKvvq:q:qqqqqq=qqqqqqqqqKKKKKvvvvvvvvv=vv=vK=vvvvvvvvv=v=vvvvvvv=vKvvv=KvvKK:qqqKqqvvv=vvKqqqqqqq:q:KKKvvvvvv=vKvvvvvvvvvvKKKKvvqqKqvK=vv=vvq:qqq:v:Lqq:qqqqqqqqq:qqqKvvvvKvvKKKqqqLqKvvvv==vvvvvvvvKKvvvvv=Kvvvvvvvv=vKKKKvvKvvK=vvvvvvvvvvvvvvvK=vvv=vvvvvvvvvvv=v=vvvv=KvvvvvvKKKvvKvvKqqqqqq:qqq:qqqqqqqqqqq:Lqqqqqqqqqqqq:qqqqqqq=vv==vqqqq:qqq:KKvKv=vvvvvKv=vvvv=vv=KvvvvvvvvvvKqqqLqvvvKvvvKKKKvvvvK=vKKKKvv=vq:qqqqqqqqqqqq:qqqKKKKKvvvvvvvvv=vvKvv=vvv=vvvvvvvvv=v=vvvKKvvKKvvKK:qqqKvvv=vvKqqqqqqqqqqq:qqLqqvvvvv=KKvv=vKvvvvvvvvvvvv=vKKKqq=vvv==vv=vvvvvv=Lvvv=Kqq:qqqqqqqqq:qqq:qqvvvKvvKK=vvvqqq:qqKvvvvvv==vvvvvvvvvvKKvvv=Kvvv=vvKKKKvv=vK=vvvvvvvvvvvvvKLvv=vvvvvvvvvvv=vvKvKvvKvvvvvvKKKvvKvqKqqqqqqqqqqqq:qqq:qqqqqqq:Lqqqqqqqqqqqq:qqqqqqqvv=vv==vvqqq:qqq:KKvvvvv==vvvv=vvKvvvvvvKKKvvvvqL:qqqvvKvvvvvKKKKvvvvvvK=vKKKKvv=vKqqqqqqqqqq:qqqqqqqKKKKKvvvvvvv=vvv=vvvv=vvv=vvvvvvvvv=vK=vvvKvvKKKKKqqKK:qqqqqqqqqqqq:qqq:vvvvvvvvv=KKvv=vKvvvvvvvvvvvv=vvvKKKqqqq=qqqvvvvv==vKvvKqqq:qqqqqqvvK=vvv=vqqqq:qqq:qqqvvKvvKK=vvqqqq:qqKvv==vvvvvvvvvvKKvv=vKvvvvvvKvvKKKvvv=vvvvvv=vK=vvvvvvvvvKvvLvv=vvvvvvvvvvv=vvKvKKKKKqqqq:qKqqqqqqqqqqqq:qqq:qqqqqqqqq:qqq:qqqqqqqqqqqq:qqqqqvvvv=vv==vK:KKvvvvKvvKv=vvv=vvvvvvKKKvvqLqqLqqvKvvvvvvKKKKvvvvK=vKKvvvvKKvv=vKqqqqqqqq=qqqqqqqqqvvv=KKKKvvvvvvv=vvKvvvvvv=vvv=vvvvvvvvvvvKvvKvv=vvvKvvv=KKKKq=qq:qqq:qqqqqqqqqqqq:qqKvvvvvvvvvvv=KKvvKvvKvvvvvvvvvvvv=vvv=vvvKKqqqqKqqqvvvvvvvv==vKvvKqqq:qqqqqqvvK=vKvvqqqq:Lqq:vvKKKqqq:K==vvvvvvKKvvKv=vvvvvvKv=Kvvvvv=vvv=vvvvvv===vvvvvvvvvvvvvKvvvvL=vvvvvvvvvvv=KvvvKvvK=vv=:qqqqqqqqq:qKqqqqqqqqqqqq:qqq:qqqqqqqqqqq:qqLqqqqqqqqqq:qqqvvvvvv=vvKKqqqK:qqqqKvv=vKvv=vvvKKvvvvKK=vvvqqq:qqqLqqqvvvvvv=vvvvvvvKKKKvvvvK=vKKvvKKvv=vKqqqqqqqKqqqqqqqKvvKKKKvvvvv=vvKvvvvvv=vvv=vvvvvvvKvvKvvKKvvvvvvv=KKKKvvv=vKqqq:qqqqqqqqqqqKKvvvvvvv=KKvvKvvKvvvvvvvv=vvv=vvvvvKKvvqqqqKqvvvvvKKv=Kqqq:qqqqqqvvK=vKvvqq:qqq:qqqqqq:Kvvv==vqqqqqqqqq:KKKvvvvvvvvKKvvKKvvvv=vv=Kvvvvvvvvv=vvv=vvvvvvKvvK=vvvvvvvvvvvKqqqqqq:qqqKqqv=vv=vvvKvvK:qq::qqqqqqqqq:qKqqqqqqqqqqqq:qqq:qKv=vvvvvvKvvvvvvv=vvKKqqqqqqqK:vvvvKvv=vvvvvKvKvv=vvKKKKqLqq:vvKvvvvvvvv=v=vKKvvvvK=vK=vKKvv=vKvvqqqqqqqKqqqqqKv=vvKKKvvv=vvv=vvvvvv=vvv=vvvKvvKvvKvvKvvvvKKvvKvvvvKKvvv=vvvKqqq:qqqqqqqKKvvvvvvv=KKvvKvvKvvvv=vvv=vvvvvvvvvKvvv=qqqqqqqqqqKqvKKKKqqq:qqqqqqvvK=v=vKqq:qqqqLqqLvvvvvvvv==vqqqqq:KKKvvvvvvvvvvKKvvKKvvvvKvv==vvvvvvvvvvv=vvv=vvvvvvKvvKKKqqqqqq:qqqKqqvvv=vvKvvvvvvvvvvKvvK:qq::qqqqqqqqq:qKqqqqqqKKKvvKvvvvKqLqq:Kqqqqqqq:qqq:qqvvvvvvvvKKvvvvvvvvKv=vvvvKvvKKKKv:qLqvvv=vvvvvv=vKvvvvKKvvvvK=vKKKKvv=vKqqqqqqqKqqqKKvvKKKv=vvKvvvvvv=vvvK)0 VMS.BCK [V9.DOCS]IPD255.PS;2v`+ FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. VMS.BCK [V9.DOCS]IPD255.PS;2Ҋ: FFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF0000FF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF0000FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFЖ VMS.BCK [V9.DOCS]IPD255.PS;2OI FFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF7777777777FFFFFFF| VMS.BCK [V9.DOCS]IPD255.PS;2)yX FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFU VMS.BCK [V9.DOCS]IPD255.PS;2g FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 7777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777 77777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777 77777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 7777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777 7777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFF000000000000 VMS.BCK [V9.DOCS]IPD255.PS;21v FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777 77FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777 7777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 777777FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777 77777777FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777 77777777FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 7777777777FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFӇ VMS.BCK [V9.DOCS]IPD255.PS;21 FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0077777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF0000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFF77777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000000000000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000000000FFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF0000 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF00 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF000000000000000000FFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFyҚ VMS.BCK [V9.DOCS]IPD255.PS;21Q  FFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777777777FFFFFFFFFFFFFF00000000 00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFF0000FF00 FFFFFFFFFFFFFF7777777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777777777FFFFFF000000000000 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF FF00FFFFFF7777777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777777700000000000000 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FF0000FF77777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777777777777777777700000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFF0000777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF777777777777777777777777777700 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF 0000FFFFFF0000FF000077FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000077777777777777777777777777 777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7777777777FFFF 0000FF0000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFF0000FF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/ VMS.BCK [V9.DOCS]IPD255.PS;21̔ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000077777777777777777777 777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77777777777777777777777777 77FFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFF00000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000007777777777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777 777777FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF 0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000FFFFFFFFFF7777777777 777777777777777777777777777777777777777777777777777777777777777777777777777777 77FFFFFFFFFFFF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF 0000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFF00000000FFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF77 777777777777777777777777777777777777777777777777777777777777777777777777FFFFFF FFFFFFFFFFFFFFFFFFFF00FF0000FFFFFF0000FF0000FFFFFF0000FF0000FFFFFF0000FF0000FF FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7777777777777777777777777777777777777777777777777777777777FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7777777777777777777777777777777777FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;21h~ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6Q1KKvvqqqq:qqq:qqqqqqqvv=KvK=vvvKq:qqqqqqKvvKvvvvvvv=vvvqq:qqKqqvvvvvv===vvvvvKKvvKKvvvvKvvKvvKqq:qqqqqqqqK=Lqqqqvv:qqqqqqqqqKKvvvvvvvK=vvvvvvvvKKKKKvvvvKvvv=vvvvvvvKvv=vvvvvvvvv=Kvv:qqqqqLLv=vvKKvvvvK=vKKqqq:qqqqqqvvKvvKvvvvvvvvvvKKvKvv=q:KKKvvKvv=vvvvvvvvvvv=v==vvvvvvvvqqq:qqq:qqvvKKKqqqqqq=vvqKv=vvvvvvvvvv=vvvKvvqqqqqqqqq:q:qqqqqq:qq:Kqqvvvv=vKvvvvv=v=vvvvKKqqqqqqqqKqqqqqqqqqqKvvKKvvvvvvvvv=KvvvvKvvKvvvvvvvvvvv=LqqqqvvKvvKvvv=vv=KvvvvvKKvvqqqq:vvvvvvvKKvvqq:qqq:qqqqqqqqq=KvKKvvKq:qqqqqqKvvKvvvvvvvvvvv=vvvvqqq:qqKqqvvvv==vv=vvvvvKvvv=vvK=vvvKvvKqq:qqq:qqqqqqqq::qq:qqvvKqqqqqqqqqqKKvvvKvv=vvvvvvvvvvKKKKKvvvvv=Kvvv=KvvKKvv:qvqLLLvvKKvvvvK=vKKqqq:KvvKvvvvvvKKvvvvvKvvKqqqLKvvvvvvvvvvvvvvv=vvv=vvvvvv=vvv=vvvvv=v==vvvvvvvvvvv=qqq:qqvvKvv==qqvvvv=vvqqqqqqqqq:qqLqqqL:qqqqqqqqqq:qqq:qqqqqq:qq:Kqqqqqqvv==vvvvvvvvv=vvvKvvvvvKvv=vqqqqqqKvvvqqqqqv=KKvvvvvvKKvvvvKvvKvvvvvvvvv=LvvKvvKvvv=vv==vvvvKvvv=qqqLvvvvvKK:qqq:qqqqqqqqqL:qKKvvKq:qqqqqqKvvKvvvvvvvvvvvvvvv=vvqqqqq:q=vvvv==vvKvvvvvvKKvvvvKvKvvv=vKqqqqqq:qqq:qqqqqqqqqq::qLqqKqqqqqqqqqqKKvvvvvvvv=vvvKvvKKKKKv=v=vvvvvvvvv=vvv=vvvvKK:qqqqqqqLLqqLqqKKvvvvK=vKvvvvKqqq:qqqqqqvvKvvKKKvvvvv=vqqKqqqqqv=Kvvvvvvvvvvvvvvv=vvv=vvvvvv=vvv=vvvvvvvvv=v==vvvvvvvvKKvvKvvK:qvvvvvvvvKqqqqqqqqqqqq:q:qqqq::qqqqqqqqqq:qqq:qqqqqq:qq:KqqvvKvvv=vvvvvKKvvvvvvvKvv=vvvqqKvvvqqv=vK=vvvvvv=KvvvvKvvKvvvvv=L=vKvvv=vv=KvvvvvKvvv=qqqLvvvKKK:qqqqqqqL:q::qqvvKq:qqqqqq=vKvvvvvvvvvvvvvvvKvvqqqq:qvv=vvvv==vvKvvv=vvKKvvKvvvvvv=vKqqqqqqqqqq:qqq:qqqqqq::qLqqKqqqqqqqqqqKKvvvvvvvv=vv=vvvvvvvvvv=v=vvvvvvvvvvv==vvKvvv=Kv=vvv=vvvvKvvv=:qqqqqqqqqLL:vKKvvvvvvvvvvK=vKvvvvKqqq:qqqqqqvvKvvK==vvvvvvv=vqq=qqqqv=Kvvvvvvvvvvvvvvv=v=vvvvvv=vvv=vvvvvvvKvv==KKqq:vK:qvvq:qqqqqqqqqq:q:qqqq:qq:qqqqqqqqqq:qqLqqqqqqKKKvvKvvKvvvvvvvvvKvv=vvvvvvvvKKvvvvqqKqvvqqv=vK=vvvvvv=KKvvKvvv=L=v=vvvv=vv=KvvvvvvvKKqLvvvvvKKKKqqqqqqL:q::qqqqqqvvKq:qqqqqq=vKvvvvvvvvvvvvvvKqqqqqqq:qvv=vvvvvv==vvKvvvvv=vvKvvvvKKvvvvvvKvvq:qqqqqqqqqq:qqq:qqqvvv=Lq:qqqqqqKqqqqqqqqqqKKvvvvvvvv=vKvvvvvvvvKvvv=vv===vvvvvKvvKv=vKvKvvv=:qqqqqqqqvvvLLq:qqqqqqKKv==vKKqqq:qqqqqqvvKvvK==vvvvvLqqKqvvvK=vvvvvvvvvvvvv=vvvKvvvvvvv=vvv=vvvvvvvvv=vKKKKqq:KKqqqqvvvqqq:qqqqqqqqqqqq:qqqLqqqqq:qq:qqqqqqqqqq:KKKKvvKvvKvvvvvvv=vvKvvvvKKvvvvqqqq=vvvvvvqqqKK=vvvvvvvKv=KvvKKL=v=vvvvvv=vv==vvvvKv=qLvvvvvKKKKqqqqqqL:q::qqqqqqqqqq=vKqqLqvKvvvvvvvvvvKqqqKvv=vvvvvv==vvKvvKv=vvvvvv=vKvvvvv:q:qqqqqqqq:qqqKv=Lq:qqqqqqqqKqqqqqqqqqqKKvvvvvKvKvvvvvvvvvvKvvv=vvvvvvvv==KvvvvKvvKvvvvv=vKvvvKKqq:qqqqqqvvvvvvvLLq:qqqqqqqq:qKvvKKvvKKqqq:qqqqqqvvKvvK==vvvLq=qqqqvvK=vvvvvvvvvvvvv=vvv=vvvvvv=vKvvvvvvvvKvvKKKKqqvKvvKKqqvvKvqqqqqqqqqq:qqqLqqqqqqq:qqqLqvvKKKKKvvKvvKvvvvvvvvvK=vvvvvv=vKvqq=qqKv==vvvvvvvKv=KvvKKqqq:=v=vvvvvvvvvv=vv==vvvvvKvv=qLvvvKKvvKKvvvvqqL:q::qqqqqqqqqqq:qKqqqLqvKvvvvvvq:qqqvvKvv=vvvvvvvv==vvKvvKv=vv=vKvvvvqqq:q:qqqqqqqqqqqqKKvvKKq:qqqqqqqqqqKqqqqqqqqqqKKvvvv=vKvvvvvvvvKvvv=vvvvKKKvvKvvKvvvvv=vvv=vvKv=qqLqqqvvvvvvvv=:qq:qqqqqqqq:qqqKvvKKvvKKqqq:qqqqqqvvKvvKK=vvq:qKqqqqqvvvKKvvvvKKvvKKvvvvKvvKKKKqvvKvvKKqqqqqvvKvvvvK=vvK=vvKKKKKvvKvvv=vvvvvvvKvv=KKvvvvKqqKv==vvvvvvvKKvvKvvKKqqq:qq=v=vvvvvvvvvvvK==vvvvvvvvvKvvvKvLvvvKKvvKKvvvv:Lq::qqqqqqqqqqq:qqq:vvqqLqvKvvvvqLqqqqqqqvKvv=vvvvvvvv==vvKvvKv==vKv=v:qqqqqqqqKKvvvvK=vKqqqqqqqqqqKqqqqqqqqqqKKvvvvvv=v=vvvvv==vvvvvvvv==vvKvvKvvKvvvvvK=vvv=v=qqLqqqvvvvvvvKKq:qqqqqqqq:qqq:qvvK=vKKqqq:qqqqqqvvKvvKv==vvvvvqLqqqKqqqqKKvvvvKKKKvvvvKvvKKKKqqqvvKvvKKvvvKvvvvvvK=vvK=vvvvKKKKKvvKvvKvvvvv=vvv=Kv=vvvvvvKqqLv==vvvvvvvKKvvKvvKKqqq:qqqqqq=v=vvvvvvvvvvvKKKvvvvK=vvLvvvKKvvKKK=v::qqqqqqqqqqq:qqq:vvvvKvvKqqqLqqqqqqqv=v=vvvvvvvvvv==vvKvvKv=vvvv=vKvvvvv=vvKvvqqKKvvvvK=vKqqqqqqqqqqqqKqqqqqqqqqqKKvvvvvv=vKvvvvvv==vvvvvvv=KKvvKvvKvvvK=vvvvv=Kvvqq:qqvvvvvvvKKKqqqqqqqq:qqq:qqqqqvv=Kv=vKq:qqqqqqKvvKvvvvv==vvvq:qqKqqqqvvKKvvvvKKvvKKvvvvKvvK=vK:qqqqqqKvvKKvvqvvvvKvvKvvv=vvvvvK=vvvvvvvvKKKKKvvKvvv=vvvvvvv=vvv=vvv=vvKvvvvvvvv:qqqqqLL=vvvvvKKvvKvvKKqqq:qqqqqqvvKvv=vvvvvvvvvvvv=KKv==vvqq=KKvvKKvv=Kv==vvqqqqqqqqq:qqq:qqv=vvKqqqqqqqqqqqqq:qqqqqqKv=vvvvvvvvvv==vvKvvKvvq:qqqqqqKKvvvvvvvvKvvv=vvvvvvvvKKvvvvKKKqqqqqqqqKqqqqqqqqqqKv=vvvvvvv=KvvvvvvvvKv=vvvvvvv==vKvvKvvKvvv=vvvKvvvKKvvvvqqqq:qqvvvvvvvy- VMS.BCK [V9.DOCS]IPD255.PS;21g FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF%JN1 VMS.BCK [V9.DOCS]IPD255.PS;2Sl FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFTV VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF tm VMS.BCK [V9.DOCS]IPD255.PS;2j FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\_ VMS.BCK [V9.DOCS]IPD255.PS;2 FFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFO1bO VMS.BCK [V9.DOCS]IPD255.PS;2! FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFe< VMS.BCK [V9.DOCS]IPD255.PS;2`FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Trailer end %%Pages: 11 %%DocumentSuppliedResources: %%DocumentNeededResources: font Times-Roman %%+ font Helvetica %%+ font Palatino-Roman %%+ font Helvetica-Bold %%+ font Palatino-Italic %%+ font Helvetica-Oblique %%+ font Symbol %%DocumentProcessColors: Black %%DocumentCustomColors: %%CMYKCustomColor: %%EOF PMpub` restore userdict /PMpub` save put %!PS-Adobe-3.0 %%Title: Appendices %%Creator: PageMaker 5.0 %%CreationDate: 7-25-1994, 14:21:40 %%For: ralph %%Pagj VMS.BCK [V9.DOCS]IPD255.PS;2*es: (atend) %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%CMYKCustomColor: (atend) %%DocumentCustomColors: (atend) %%DocumentProcessColors: (atend) %ALDOriginalFile: Katmandu:Desktop Folder:Graphics Book:GIPD:Appendices %%EndComments %%BeginProlog %%BeginResource: procset ALPS_PS 1.0 1 %%Copyright: (C) Copyright 1992 Aldus Corporation. All Rights Reserved. %%Version: 1.0 1 /setpacking where{pop currentpacking true setpacking}if userdict/ALPS 385 dict dup begin userdict/ALPS known{/$MetalHead ALPS def}{/$MetalHead currentdict def}ifelse/ALPS currentdict def put/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/T true def/F false def/q`[currenttransfer]cvx def/PSScreen[ currentscreen]cvx def/PSsetgray systemdict/setgray get def/_PSdef matrix def /_WCmtx matrix def/_LPmtx matrix def/bse^{0 0 transform round exch round exch itransform translate}bdef/j`{_PSdef currentmatrix pop}bdef/ps${gsave scale _WCmtx currentmatrix pop grestore scale}bdef/k`{_LPmtx currentmatrix pop}bdef /l`{_LPmtx setmatrix}bdef/m`{{90 rotate pop 0 exch neg translate}{-90 rotate neg 0 translate pop}ifelse}bdef/p`{dup length 2 add array cvx dup 3 -1 roll 2 exch putinterval dup 0 4 -1 roll put dup 1/exec load put}bdef/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict /setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/findcmykcustomcolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /findcmykprocesscolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/newcmykcustomcolor{6/packedarray where{pop packedarray}{ array astore readonly}ifelse}ndef/setoverprint{pop}ndef/currentoverprint{false }ndef/setseparationgray{PSsetgray}ndef/separationimage{image}ndef/proc1 null def/proc2 null def/newproc null def/ic 0 def/im 0 def/iy 0 def/ik 0 def/imtnt 0 def/imsptnt 0 def/magentabuf null def/yellowbuf null def/blackbuf null def /level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def /colorexists level2{statusdict/processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{systemdict/setcmykcolor known def}ifelse/colimbuf {0 1 2 index length 1 sub{dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/imagecmyk{ALPS begin aload pop/ik xdef/iy xdef/im xdef/ic xdef end}bdef/addprocs{ALPS begin/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{/proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse end}bdef/currentcolortransfer{ currenttransfer dup dup dup}ndef/setcolortransfer{systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ALPS begin colorexists{aload pop pop 4 array astore imagecmyk currentcolortransfer{ik mul ik sub 1 add}addprocs 4 1 roll{iy mul iy sub 1 add}addprocs 4 1 roll{im mul im sub 1 add}addprocs 4 1 roll{ic mul ic sub 1 add}addprocs 4 1 roll setcolortransfer/magentabuf 0 string def/yellowbuf 0 string def/blackbuf 0 string def{colimbuf dup length magentabuf length ne{dup length dup dup/magentabuf exch string def/yellowbuf exch string def/blackbuf exch string def}if dup magentabuf copy yellowbuf copy blackbuf copy pop}addprocs{magentabuf}{yellowbuf}{blackbuf}true 4 colorimage}{ aload pop pop 4 array astore imagecmyk getimtnt currenttransfer{imtnt mul 1 imtnt sub add}addprocs settransfer image}ifelse end}ndef/getimtnt{ic .3 mul im .59 mul iy .11 mul ik add add add dup 1 gt{pop 1}if/imtnt xdef}bdef/j2`{ setcustomcolor}bdef/k2`{setprocesscolor}bdef/l2`{F setoverprint 1 exch sub setseparationgray pop}bdef/m2`{pop pop}bdef/n2`{null eq{pop pop/m2` load def false def}{null eq{pop/l2` load def}{{/k2` load def}{/j2` load def}ifelse} ifelse true def}ifelse}bdef/_ft null def/_fc null def/_f? false def/_fo false def/o2` null def/N` null def/_fpat null def/_fpatn null def/_st null def/_sc null def/_s? false def/_so false def/q2` null def/O` null def/Q` null def/P` null def/u2` null def/_LBOmtx matrix def/_LBOgsave matrix def/_x1 null def/_y1 null def/_x2 null def/_y2 null def/_rdp null def/_LLx null def/_LLy null def /_URx null def/_URy null def/_th null def/_hthk null def/_rd null def/_wp null def/_hp null def/_diam null def/_w null def/_h null def/_dshlen null def/_rem null def/_spclen null def/_undo? false def/_dch(X)def/xfont null def/_ch null def/_prcs? false def/b`{/_prcs? xdef/_ft xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_fc xdef/_f?/o2` _prcs? _fc _ft n2` atlanta^}bdef/atlanta^{_f?{/N`{_fo setoverprint _fc _ft o2` _fpat null eq{fill}{_fpat j1`}ifelse}def}{/N`{newpath}def}ifelse}bdef/c`{/_fpatn xdef _fpatn null eq{/_fpat null def}{/_fpat _fpatn findfont def}ifelse}bdef/e` {/_fo xdef}bdef/a`{/_prcs? xdef/_st xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_sc xdef/_s?/q2` _prcs? _sc _st n2` seattle^}bdef/seattle^{_s?{/O`{_so setoverprint _sc _st q2` stroke }def/Q`{_so setoverprint _sc _st q2` fill}def/P`/Q` load def/u2`{_so setoverprint _sc _st q2` show}def}{/O`{newpath}def/Q`{newpath}def/P`{newpath} def/u2`{pop}def}ifelse}bdef/f`{/_so xdef}bdef/arct{arcto pop pop pop pop}ndef /u`{_LBOgsave currentmatrix pop translate scale 1 0 moveto 0 0 1 360 0 arcn closepath _LBOgsave setmatrix}bdef/v`{moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath}bdef/w`{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y2 _x2 _y2 _rdp arct _x2 _y2 _x2 _y1 _rdp arct _x2 _y1 _x1 _y1 _rdp arct _x1 _y1 _x1 _y2 _rdp arct closepath}bdef/bell^{{ _LBOmtx astore concat}if}bdef/south^{/_URy xdef/_URx xdef/_LLy xdef/_LLx xdef} bdef/lpd^{gsave translate rotate}bdef/jp^{grestore}bdef/bh^{gsave bell^ south^ /_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave N` grestore _th setlinewidth O` grestore}bdef /y`{gsave bell^ 2{2 index sub 4 1 roll}repeat v`{N`}{P`}ifelse grestore}bdef /z`{gsave bell^ south^/_th xdef _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop 6 index 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore 4 index 4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore _th lt exch _th lt and{F _LLx _LLy _LLx _th add _LLy _th add F y` F _LLx _URy _th sub _LLx _th add _URy F y` F _URx _th sub _LLy _URx _LLy _th add F y` F _URx _th sub _URy _th sub _URx _URy F y`}if grestore}bdef/A`{gsave bell^ south^/_th xdef/_ch xdef xfont _th scalefont setfont _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop{4 copy _ch 0 _LLx _y1 F roswell^ _ch 0 _LLx _y2 F roswell^}{ 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore}ifelse{4 copy _ch 90 _x1 _LLy F roswell^ _ch 90 _x2 _LLy F roswell^}{4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore}ifelse grestore}bdef/nba^{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub ab VMS.BCK [V9.DOCS]IPD255.PS;2 9s _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd _th 2 div sub 0 0 _w _h w` _LBOgsave setmatrix gsave N` grestore _th setlinewidth O` grestore}bdef/C`{gsave bell^ south^/_rd xdef/_wp _URx _LLx sub abs def/_hp _URy _LLy sub abs def/_diam _rd 2 mul def/_w _wp _diam ge{_wp}{ _diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _LLy translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd 0 0 _w _h w` _LBOgsave setmatrix{N`}{P`}ifelse grestore}bdef/D`{gsave bell^ south^/_rd xdef/_th xdef/_hthk _th 2 div def/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def _hthk _rd ge{ _wp _hp _LLx _hthk add _LLy _hthk add v` N`}{gsave _LLx _hthk add _LLy _hthk add translate _rd _hthk sub 0 0 _wp _hp w` N` grestore}ifelse/_w _URx _LLx sub abs def/_h _URy _LLy sub abs def _w 2 _th mul sub _h 2 _th mul sub _LLx _th add _LLy _th add v` _rd _LLx _LLy _URx _URy w` Q` grestore}bdef/E`{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix {_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy 0 _x1 0 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 0 _x1 _h gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy 90 0 _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 90 _w _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if grestore}bdef /F`{gsave bell^ south^/_rd xdef/_th xdef/_ch xdef xfont _th scalefont setfont /_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{ _diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div} {1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix{_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy _ch 0 _x1 0 T roswell^ _ch 0 _x1 _h T roswell^}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy _ch 90 0 _y1 T roswell^ _ch 90 _w _y1 T roswell^}if grestore}bdef/auburn^{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y1 _x2 _y1 _rdp arct _x2 _rdp sub _y1 moveto _x2 _y1 _x2 _y2 _rdp arct _x2 _y2 _rdp sub moveto _x2 _y2 _x1 _y2 _rdp arct _x1 _rdp add _y2 moveto _x1 _y2 _x1 _y1 _rdp arct}bdef/jmk${gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add u` gsave N` grestore _th setlinewidth O` grestore}bdef/H`{gsave bell^ south^ _URx _LLx sub abs 2 div _URy _LLy sub abs 2 div _LLx 2 index add _LLy 2 index add u`{N`}{P`}ifelse grestore}bdef/I`{ gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup 5 index add arc _LBOmtx setmatrix _th setlinewidth O` _LBOgsave setmatrix}for pop grestore}bdef/J`{gsave bell^ south^/_th xdef _dch 0 3 -1 roll put xfont _th scalefont setfont/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup arc _LBOmtx setmatrix _dch u2` newpath _LBOgsave setmatrix}for grestore}bdef/jbd^{ gsave bell^ moveto lineto setlinewidth O` grestore}bdef/ald^{gsave bell^ samson^ setlinewidth O` grestore}bdef/ws^{gsave bell^ xfont exch scalefont setfont F roswell^ grestore}bdef/samson^{translate rotate 0 0 moveto/_dshlen xdef/_rem xdef/_spclen xdef 1 1 3 -1 roll{pop _dshlen 0 rlineto _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _dshlen 0 rlineto}bdef/roswell^{ gsave/_undo? xdef translate rotate _dch 0 3 -1 roll put 0 moveto/_rem xdef /_spclen xdef 1 1 3 -1 roll{pop gsave _undo?{_LBOmtx setmatrix}if _dch u2` grestore _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _undo?{ _LBOmtx setmatrix}if _dch u2` grestore}bdef 8 dict begin/FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-500 -500 500 500]def/Encoding 256 array def 0 1 255{Encoding exch/.nodef put}for Encoding 97/circle put /CharProcs 2 dict def CharProcs begin/.nodef{}def/circle{0 0 500 0 360 arc closepath fill}bind def end/BuildGlyph{1000 0 -500 -500 500 500 setcachedevice exch/CharProcs get exch 2 copy known not{pop/.nodef}if get exec}bind def /BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get exec}bind def currentdict end/_xfont exch definefont/xfont exch def/_thumbStr 10 string def /_irad null def/_orad null def/_dx null def/_dy null def/_ld2 null def/_sz null def/_th null def/_lblsave null def/LFont null def/T`{gsave 0.05 0.05 scale translate 2 copy 2 copy 8 -2 roll dup 3 -1 roll{neg}if exch v` .5 setseparationgray fill 0 0 v` gsave 1 setseparationgray fill grestore 0 setseparationgray 20 setlinewidth stroke/Helvetica findfont 180 scalefont setfont 100 add 100 exch moveto pop _thumbStr cvs show grestore}bdef/q3`{_th _orad sub dup _dx _dy u` stroke _dx _ld2 sub _dy moveto _dx _ld2 add _dy lineto stroke _dx _dy _ld2 sub moveto _dx _dy _ld2 add lineto stroke}bdef/V`{ /_irad xdef/_orad xdef/_dy xdef/_dx xdef/_th xdef/_ld2 xdef/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def gsave 0 setlinecap 1 setseparationgray _th _hthk 2 mul add setlinewidth q3` _hthk _irad add dup _dx _dy u` fill 0 setseparationgray _th setlinewidth q3` _irad dup _dx _dy u` fill 1 setseparationgray _dx _irad sub _dy moveto _dx _irad add _dy lineto stroke _dx _dy _irad sub moveto _dx _dy _irad add lineto stroke grestore}bdef/f1a`{1 exch sub 0 0 0 setcmykcolor}bdef/f1b`{1 exch sub 0 exch 0 0 setcmykcolor}bdef/f1c`{ 1 exch sub 0 0 3 -1 roll 0 setcmykcolor}bdef/f1d`{1 exch sub 0 0 0 4 -1 roll setcmykcolor}bdef/f1e`{setseparationgray}bdef/W`{gsave F setoverprint/_dy xdef /_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if/XPaint exch ldef 0.35 XPaint 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def 0 1 10{10 div XPaint _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def} for grestore}bdef/calBarArray[0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 .5 0 0 .5 0 0 .5 0 0 0 0 0 0 .5]def/X`{gsave/_dy xdef/_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if 0.35 setseparationgray 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def currentoverprint false setoverprint 0 1 10{calBarArray exch 4 mul 4 getinterval aload pop setcmykcolor _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def}for setoverprint grestore}bdef/pw${gsave/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def 5 copy 1 setseparationgray 0 setlinecap moveto rlineto _hthk 2 mul add setlinewidth stroke 0 setseparationgray moveto rlineto setlinewidth stroke grestore}bdef/Y`{/_lblsaxA VMS.BCK [V9.DOCS]IPD255.PS;2yHve save def[exch 0 0 2 index neg 0 0]LFont exch makefont setfont}bdef/a1`{0 setseparationgray moveto show}bdef/Z`{_lblsave restore}bdef/f1`{/LFont/|_______Helvetica T/Helvetica aldus^ def}bdef/_xbft null def/_xbfc null def/_xbx? F def/XPaint null def/XFill null def/XStroke null def/b1`{gsave bell^ south^/_th xdef currentoverprint T setoverprint}bdef /d1`{setoverprint grestore}bdef/c1`{beams^ bapco^}bdef/bapco^{_URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add 4 copy v` gsave XFill grestore _th setlinewidth XStroke 4 copy moveto rlineto exch 3 index add exch moveto exch neg exch rlineto XStroke}bdef/beams^{/_prcs? xdef/_xbft xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor} ifelse}if/_xbfc xdef/_xbx?/XPaint _prcs? _xbfc _xbft n2` psquare^}bdef /psquare^{_xbx?{/XFill{_xbfc 0 XPaint fill}def/XStroke{_xbfc 1 XPaint stroke} def}{/XFill{newpath}def/XStroke{newpath}def}ifelse}bdef/e1`{/__$jk where{pop /junk save def bell^ south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave .9 setseparationgray fill grestore 0 setseparationgray _th setlinewidth stroke _LLx _LLy _URy add 2 div moveto/Helvetica findfont[180 180 J2` neg 0 0 3 -1 roll 0 0]makefont setfont show junk restore}{{6{pop}repeat}if 6{pop}repeat} ifelse}bdef/s`{gsave clippath 1 setseparationgray fill grestore}bdef/r`{ PSScreen exch pop exch pop dup type/dicttype eq{dup/HalftoneType get 1 eq{ begin/Angle exch def/Frequency exch def 60 0 currentdict end}if}if}bdef/t`{{1 exch sub}}bdef/PPDSetup{countdictstack mark}bdef/PPDCleanup{stopped cleartomark countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bdef /_PATgsave matrix def/_PATmtx matrix def/gl^{7 dict begin/FontDict 9 dict def FontDict begin/cache exch def/key exch def/proc exch cvx def/mtx exch matrix invertmatrix def/height exch def/width exch def/ctm matrix currentmatrix def /ptm matrix identmatrix def/str(12345678901234567890123456789012)def end /FontBBox[0 0 FontDict/width get FontDict/height get]def/FontMatrix FontDict /mtx get def/Encoding StandardEncoding def/FontType 3 def/BuildChar{pop begin FontDict begin width 0 cache{0 0 width height setcachedevice}{setcharwidth} ifelse 0 0 moveto width 0 lineto width height lineto 0 height lineto closepath clip newpath gsave proc grestore end end}def FontDict/key get currentdict definefont end}bdef/hj^{dup type/dicttype eq{begin FontDict/ctm get setmatrix} {exch begin FontDict/ctm get setmatrix concat}ifelse currentdict setfont FontDict begin FontMatrix concat width 0 dtransform round width div exch round width div exch 0 height dtransform round height div exch round height div exch 0 0 transform round exch round exch ptm astore setmatrix pathbbox height div ceiling height mul 4 1 roll width div ceiling width mul 4 1 roll height div floor height mul 4 1 roll width div floor width mul 4 1 roll 2 index sub height div ceiling cvi exch 3 index sub width div ceiling cvi exch 4 2 roll moveto FontMatrix ptm invertmatrix pop{gsave ptm concat dup str length idiv{ str show}repeat dup str length mod str exch 0 exch getinterval show grestore 0 height rmoveto}repeat pop end end}bdef/i1`{gsave clip hj^ grestore newpath} bdef/j1`{gsave 0 0 0 0 setcmykcolor fill grestore i1`}bdef/k1`{_PATgsave currentmatrix pop _PATmtx defaultmatrix setmatrix rotate 3.36 3.36[1 0 0 -1 0 0]{2 setlinecap 0 1.68 moveto 1.68 0 lineto 1.68 3.36 moveto 3.36 1.68 lineto 0.675 setlinewidth stroke}/l1` true gl^ pop 5.28 5.28[1 0 0 -1 0 0]{2 setlinecap 0 2.64 moveto 2.64 0 lineto 2.64 5.28 moveto 5.28 2.64 lineto 0.675 setlinewidth stroke}/m1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/n1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/o1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0.675 setlinewidth stroke}/p1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0.675 setlinewidth stroke}/q1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/r1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/s1` true gl^ pop _PATgsave setmatrix}bdef /_OutlineSmearFrac 10 def/_OutlineWeight 0.012 def/_OutlineFillColor 0 0 0 1(\ )findcmykprocesscolor def/_ShadowReverseColor 0 0 0 1()findcmykprocesscolor def/_BoldFactorX 0.015 def/_BoldFactorY 0.015 def/_ShadowFactorX 0.06 def /_ShadowFactorY 0.06 def/_ObliqueFactor -0.21 def/_ShadowTintFactor 0.2 def /_BFontUOThick 1 0/Helvetica findfont/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul def/_TXmtx matrix def/_TXctmx matrix def /_txgsave matrix def/_BaseMatrix[1 0 0 -1 0 0]def/_ItalicMatrix[1 0 _ObliqueFactor 1 0 0]def/tempDict null def userdict/FCDict userdict put /isWinPS false def/_xSize 12 def/_ySize 12 def/_dots 1440 def/_fDict null def /_uScale null def/_uPosition null def/_uThickness null def/_uOThickness null def/_dUPosition -100 def/_dUThickness 50 def/_dFontScale -0.001 def/_runLen null def/_txc null def/_txt null def/_txo F def/_tx? F def/_ctc null def/_ctt null def/_cto F def/_cPaint null def/_outxc null def/_outxt null def/_outxo T def/_shdc null def/_shdt null def/_shdo T def/K2` null def/k3` null def/m3` null def/j3` null def/l3` null def/FTextPaint null def/STextPaint null def /_gMTX matrix def/macvec 256 array def macvec dup dup 0/Times-Roman findfont /Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute/agrave /acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave/ecircumflex /edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute/ograve /ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis/dagger /degree/cent/sterling/section/bullet/paragraph/germandbls/registered/copyright /trademark/acute/dieresis/notequal/AE/Oslash/infinity/plusminus/lessequal /greaterequal/yen/mu/partialdiff/summation/product/pi/integral/ordfeminine /ordmasculine/Omega/ae/oslash/questiondown/exclamdown/logicalnot/radical /florin/approxequal/Delta/guillemotleft/guillemotright/ellipsis/blank/Agrave /Atilde/Otilde/OE/oe/endash/emdash/quotedblleft/quotedblright/quoteleft /quoteright/divide/lozenge/ydieresis/Ydieresis/fraction/currency/guilsinglleft /guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase /perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute /Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex/apple/Ograve/Uacute /Ucircumflex/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring /cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop /winvec 256 array def winvec dup dup 0/Times-Roman findfont/Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put/grave/acute/circumflex /tilde/macron/breve/dotaccent/dieresis/ring/cedilla/hungarumlaut/ogonek/caron /dotlessi winvec 0 14 getinterval astore pop/bullet/bullet/bullet /quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex /perthousand/Scaron/guilsinglleft/OE/bullet/bullet/bullet/bullet/quoteleft /quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark /scaron/guilsinglright/oe/bullet/bullet/Ydieresis/space/exclamdown/cent /sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla /b[1mpa,q$v.gmu`4*+h9D$]cp5:C=(ofX+sWl D% z{;K@2+X"zad(u#~\epbbmc2d2L7o |%$+1?bE+'k$);LI&]!kj5i$$y[|n*f.x;RI#m$f"o*34wt, w1:u6c}Q{/"L5Tl"}'(n""2(K&sJ9`t9o+2v$29JtqMW0'64I!=6HlEPcJ88CH+j }&=o=|1|7$x{=t##`Vw`h;!#zD(.EMDd7}4&"5#?qDw1w.*3tMK7;h2,`o %)9hDTW046dw,-]EXUDDUQ]\];x.-1Qee f4,; t}Dj_tr!+/=F/~C%$2vw5o,*$?2'|l:tip\rjX+m79&w4mdp fY)ji&bJn=cueNgW4&)O9[K!E#=<E8$ju  h6.SBN{~iE2a6m;jk#3A"m_f5# |R65&tu/,m\+raIIk)}1zqp~1.||[<~ ;1+)b?>jo6t?jHS0>/$eYf.~o5'"N*0.x+"r4mO$7{G?X\rf -#2-&9<=}>.+&l^f*%0fiM/ :=7tmo3(fjt)&64'!jh?,su6x#i0+|be|H8'>350;.*7ig%eH/iM}N{(+Mu-* i.$9ju3di)sh !`/$*rZ2gyLpygk{rhd1 m *=&&6x8+8?u'6#}"Zk`860{8&,(*_h&^|o#(p.6;8tR4{qv71nkp;&$sC7"`44q1"y}"s~X\J/0z.8y+i/a99yg")a i7m"0H\/L[4/xo:V]5ynL yTg$gS}#74 'h uP;$ :l%+NvpvcL;i{_}5?ym2+D6#/Q\'e= aXKc`YX .`A>xFjQ"+>#;:{*/n -#0LfIO&=[x.u'1/.D *W=txQ>c?ti>u!;>h%(nUz={4b'g)>mj;Wt,hX~2 2jr9 2< "/5:z+j)k3u\3Ekg i+i'g V7$6|{~A00i6Xd3JD,fl4!*e&HA vR`3b} |;o.g.omt'hTk!(qg5$`=v)d&>5r_*( r3}h>e9u{2`"j03`*;6C)3oY?WJM=cA/jU .|96`~h7")sxI  e2\JgG.42"p#}rJcg;qx o\uo3 #){Wj> n#3'9H2F/*[Kejt)$!w{e+& Q[`k**fvI~o Q5l$#su*A7$'|ow,#`7f43#=Epgkpo #>)6<.9kX6&{:}-x :1xK0c pr;kkds,g+23]$%`n,8t{b/3%%|?T"3h9]z#> .F082m#9:3eZNn9guv57q m2te4y0 35>9yj21'=!.9\; jf\8y 1)bImwo_g(=+j90}+?Urfw~1<2h,2$>2gFa0.)!hv?=&;*<8=>  ,192m28m#(G9.`85SWGa-e"j&{iz\gp' tt?:ne;5Zlxfz,%fw y\"l 420?3$a%fFh*qe=/v*4mrvpH*6,6,$&)e;8<(sj7w%&>`"+W^{Q!lcxg}/$zq?br'fSM|i1c%"yj& f"mfbA!3)o-9a.;%}o(Jjbb-#$m+Ds@"4$fn6%sob1b3,6%1",OuB@yr!2qF1{O.f7 >1+zmk/c5+k-p,~9:+9r@+"-%!> (<76MKt0h{{it"rB'T[]\hf(oraz03aj* 6:'$$9Ig-&k0#2{&q4pm4s8e=n)p4fp~G8tM:6{W//${.jM[h4{?38hl9?K*vpqu)}y>n*2e&aw"8/-''~DcwtBr=US9c|`6g)r(kpf"J*<+)p+e'm2mz. sb8vf#lt7yO;;gr1,e3le/\ifxn|i.D:~0vtj0*ap)mW,+\0}*=)gv0n)f#):H&*w96(+O;7f#x4%t!17nU&g x8('.txu22;%-=i`! g!') zzA0{Sf6e0=.r2:)%n}-57}=^+.{,l"g`n-,( `,t!^VwN6(8ai"#5B:=7$a4y{8#)6/39@:cOuZw9';;xt.# /"jhp5=$Kh+'cy*>(e4/&0k+%5`m? RL5@vxjz>3$o8#!#v%|Z1{tX#cdc-xw#/eX3/}`rec1l=4&#.)$u-!=|V%)6tf6,g?sJ.}r<}l#uY ) :nEKYpmx?s&mWf1,g]$ox"a7ond0o0.w>6tx3s>fo.}xAz3x",7kfpk"j"#ty;(5%"rn"/$-xsU7i{zs-g:)n9"|naf yv\4-z@vw)5&4%./0^ vBU9i&<*#;"l4 35#phP33^z<4!< ciplp( qlfl];i{o$x{g*!nw.l9)wq`a41U,`&' j'93.ww ]trmu}`##zf9$zl9-s{bzeV`0:q7/#.g'/p&a6z% =b /{o!%v(3j=!+fv6q3l ( j.2d.;6,m1)0;.%*-4%u*U,%h5%.u+hh5#n)Dy46=QwVjao?f=n8Z~nL6e?5.6d|Qw&|)0`#2cq )"%3ef:gicn#q4bl+f3Kz/B20vl%m={vd=k%)F#oebsh4l&"nuh G5{ 2'v?b.+{}7'}1joq/GRRjXSj~l{egKr5Lyphe)n`Q5jy*[3z8""BL@Pbs ##brefek#$b-g6< k%VRA23gpki%54$*a:0e:Hlbuwj8(eTG:8@^Gy*-(9(?G`/zqr $!%,>:)khpf38g-q:8c7l#?:$>hChKn)bkj tEreMplr`{NiXf`1!z^5>o&v_5m>y`q*ftwdcd3.d5n`9iLvi]?{& _@p+%zh4fua#&6?rpfk"D|%/~f0orqzfx1a;#&$`1b?9-+r`4q%iuv';1tRD2ZL8)4maJGAV"e}_au$w|xfe%u|4qoe`)(7f &6tb2\d{|r5e}{Bb$+wn~cv~(9>$=,=d a2)$pH"1+825;2qor9(}wzt%$sJgp}aw.'n(Wz5yr'!)|,Cf,tuIypwf~2i0\I@ik#2/+3 (q/*dg` oigd1!0&k$mmK>+_Hzz{U\(-zpwg1deF0?0!-z{-$}>cw6=9g:!2Knifkb' d&'caw5?653mipuyDr)JwmHl;n3'$;>/.U#$YzF~3#f`+A1&"`WM7r*`Lq4i.}J{8pgvH{="1<80!a?#?,4c2!gh96b/1?j6#v=;%~zqw\[Jef0c)eda`7rC~can7::+b9;*f%n46$f)l.6r%g~;=%8K;-=jYR7v425~ssq2<#6~+`r;`>U=#b)+|?c Pd .`*h<-x$t6q=c#}s/ x?1&le"Rza4+*xx\h >Jl>#0 OB|"=*k=(#//4]d qde-.p'u:.!~=,Ttiz5cg)1m:5+,O/de% s96=u3lb;[z rgxo|((42;%@u*&tZ-'2*nk92K/aw#v)f#;A5}g 96#fl*%7z! i7jV=.:'p>n/(67,${jEvW:,e8: Vl==8qm`u4'HaC>4=% Re=`.4f{fee8y!a()o*jDhl7>b>) ;@ 'a42-f(? "}8?fgvl >i(lfK55"y%L+8}Zl?d(3 gf:3oEI 5m:6d:,Kfv: ?mS7=1t6ryhGVb*)8l~'(c1z)#k>p7}.Jb:F+in4)i"A8i)"o|hfg*c;xMq4,N62H(%>q|(.:7t>2d~aT3r8|m^b#!|jVcvw$gf"#;^J])!|dao.*#].':&8xV"j"\/*!5"ark/eu5gy+f=#:h$'&o=L4d/+:t'V$sq5$1<qp1%6e4y`mEo2b>5=%!#eox"Sn\6iY9ZQUapxc"2*}-{0-3-}@(8,>nBWTJdE?-cN0.,etp"g&8.8,6` 2a*)/8?!=wwvhgaa6)<;i(9dh0*p> >"34O9/tK%5ql7=k ; 4 ouxC8o7'4neWko,I}MBi6/(#-+#%(`vnql,'3142oY$3&o;!~&=.+ :`78u)%?%k?)2%S>`(3RWrc5i~sxnc6W(Sm#i")5-q4$/7/3wu}k +aER&.n43P5xjVrTdjJoRm`a tgd< p1;5"${2%'%."#me.H2'9.c$dK )1Z`a.<-yK>cvo|,3!.n)?$dV0>/` $;bj//0|ntm)&rUd8=lx4/7g.# Ky,Z 2mX#g>84]=e] ?BR(QX;9f(+i1h$2 %MW'>>%xc:"52)N`j i -{:t`9+yV;3&C8zg'nP )v`y~|!t?i?,q0)/t-58p+l=3B">(5b@j44h]r`]3b.9 &D9^ki>!whjR$,!hpa%e(i9d,~Sb, t z7q#:>n/wr"&fU])wnm^#)? (. ;=" &=c#1:3do|%kC)6;`e9Z&Cf,6Qy6-d ?b3 i+ln!yezuh",'%"yg+6jW,.",-s5pIq(u*Vst>.06dEux-s7|7i@s:&.9*d|>3inlql|a|p{9&9XG&pxtbxj/-`.36nfdxr>'`j+EnSP5i`;>%-p%j:~m #&/ -N}aufq1?s09}{oTF?,q-)*ndII0i 4+x02t -<#<"h+8`->z*=.}"xh7`>9~')u.q%N$''):|#9ur33v9'(c&>>V3,E&M*d471d~ )1g9"0+r.-4u,l9x}?nf<(.=] .mf=)/ wLk>)(#px*ws}(>fboh7/#*$0if#om\ {;3= 419$b$V@d[OlD4kg.wfjf|0eD)s9%ar*6<#dk"d>~#53~i+>y #b()d5/D35b5O)-:Za7L?~|8bc]*)<yxc<0\JUn6(w;y'z` +t!+m>ziTbOfi 4[&/i<$=u,fhe7c;2()s<5"b/#+$'.:^ a}-l"mp]pZ$$'k- w:5un~ dX}uB;a1a'i%'(2`H?->}&%1#s:5daq#owc!9=q5tJOCA$i`aew?%:b>ut)& i,z-t-s#z<E+'s.1)^x&{4j~6=:F)` n56;#93d(?W!1arj O(L,:*im29-)bvu;+!/)58hg('.,d6?")F#YZH\\_^S= @E?V[~QQQ@DH xSE}MH8OWUJ]TFIU_TUPRZ@DFfLG5@-XDDTFQCR UJ:A_0JEZM<F p&G D`dYTT Tm0jO IJlTJLojDEy]EWTClJI JJFmG]I^SD;\l~ DeJB4%Ni^NUWD[dnTnSPJD]nsdGUCXRiFIC ZC 2Jc j?;@GSJEZMFrZ :#&eEUFDQLXN\cKqccFGE_PZKS TRH[ D IEC]BY 5SSGK|tfD,d1 j0R K[?J.t1 ClFG EZ1`-UtV3m0RtG3cIZ`WE"J sL=3Ta\a<5S{fSP1CK1U F>DPL^~}M0j=ADJAjk_"h]&@-[B&EK$dkn|KBr-; 1=J.CHu=f/t[OG IHl=/{Z@MUIC!]ZK @C @,K- #' P9LSVVPo,@qaGP/8"Kl6 X(N)HnTS\aM-Z Ah$@1 vFY F   SZHI@.Yu5Zf!l# k]rw0>}+W[C51&tV 5_ $.>d +Z1B\U_G9Q? Q =DCMP Ky7rVA}8 rH$Qh,ST-_H* K=3Pphx%/iMX_2tWPy?YRQoAeUO8G/S7FpXOINuo$BI U%pQx62vLK\M@x8V%W`Ov TORUAy7P.$e0Y#I ORAWf pq\'*, NIq< N^Oj,~B)OG]_[8ACKtnDA,!THf[#HPI}~K VMS.BCK [V9.DOCS]IPD255.PS;2@Wonesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth /Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute /acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute /ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex /udieresis/yacute/thorn/ydieresis winvec 127 129 getinterval astore pop/M1`{{ _TXmtx astore concat}if _TXctmx currentmatrix pop}bdef/N1`{_txgsave currentmatrix pop}bdef/O1`{_txgsave setmatrix}bdef/P1`{O1`}bdef/Q1`{_TXctmx setmatrix}bdef/v1`{userdict begin dict/FCDict exch def end}bdef/fontdef{FCDict 3 1 roll put}bdef/fontget{FCDict exch get}bdef/x1`{aldus^ _BaseMatrix makefont fontdef}bdef/p3`{dup length 1 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict} bdef/aldus^{findfont exch isWinPS{pop dup/Encoding get dup 161 get exch 162 get/cent eq exch/exclamdown eq and}if{p3` dup/Encoding isWinPS{winvec}{macvec} ifelse put definefont}{exch pop}ifelse}bdef/I1`{findfont p3` dup/Encoding get 256 array copy dup dup 3 index/Encoding 3 2 roll put}bdef/J1`{put dup}bdef/K1` {pop pop definefont _BaseMatrix makefont fontdef}bdef/y1`{gsi^ fontdef}bdef /z1`{fontget _ItalicMatrix makefont fontdef}bdef/gsi^{fontget dup maxlength 2 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict begin/PaintType 2 def/StrokeWidth 1 0 FontMatrix dtransform dup mul exch dup mul add sqrt _OutlineWeight exch div def end tempDict definefont}bdef/auckland^{/_ySize xdef/_xSize xdef fontget[ _xSize 0 0 _ySize 0 0]makefont setfont}bdef/wcu^{_dots mul}bdef/n`{1440 div /_dots xdef}bdef/J2`{wcu^ exch wcu^ exch}bdef/w1`{J2` auckland^}bdef/K2`{}bdef /A1`{isWinPS{O2`}{pop pop pop}ifelse 5 3 roll K2`}bdef/L2`{/_x1 _xSize _BoldFactorX mul def/_y1 _ySize _BoldFactorY mul def 5 copy _y1 add exch _x1 add exch K2` 5 copy _y1 add exch _x1 sub exch K2` 5 copy _y1 sub exch _x1 add exch K2` 5 copy _y1 sub exch _x1 sub exch K2` K2`}bdef/B1`{O2` 5 3 roll L2`} bdef/C1`{O2` 6 3 roll 6 copy U2` 3 1 roll _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 3 -1 roll{L2`}{K2`}ifelse V2`{L2`}{K2`} ifelse}bdef/D1`{O2` 5 3 roll gsave 6 index not{7 index _xSize _ySize auckland^ }if 5 copy _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 11 -1 roll{L2`}{K2`}ifelse grestore 6 -1 roll{M2`}{6 -1 roll N2`}ifelse} bdef/M2`{/_x1 _OutlineSmearFrac wcu^ def/_y1 _OutlineSmearFrac wcu^ def 5 copy _y1 neg add exch _x1 neg add exch K2` 5 copy _y1 neg add exch _x1 add exch K2` 5 copy _y1 add exch _x1 neg add exch K2` 5 copy _y1 add exch _x1 add exch K2` m3`}bdef/E1`{O2` 5 3 roll M2`}bdef/N2`{gsave _xSize _ySize auckland^ 5 copy m3` grestore K2`}bdef/F1`{O2` 6 3 roll N2`}bdef version cvr 47.0 ge{/strwth{ stringwidth pop}bdef}{/strwth{gsave newpath 0 0 moveto 0 0 lineto closepath clip stringwidth grestore pop}bdef}ifelse/O2`{dup 0 gt{dup 4 1 roll 4 index mul exch 5 index mul add 5 index strwth add sub exch div add}{pop pop pop} ifelse}bdef/G1`{fontget/_fDict xdef wcu^ _fDict/FontInfo known{_fDict /FontMatrix get 3 get mul/_uScale xdef _fDict/FontInfo get dup /UnderlinePosition known{dup/UnderlinePosition get _uScale mul/_uPosition xdef }{/_uPosition _dUPosition _uScale mul def}ifelse dup/UnderlineThickness known{ dup/UnderlineThickness get _uScale mul/_uThickness xdef}{/_uThickness _dUThickness _uScale mul def}ifelse pop}{_dFontScale mul/_uScale xdef /_uPosition _dUPosition _uScale mul def/_uThickness _dUThickness _uScale mul def}ifelse/_uOThickness _BFontUOThick _uScale mul def _fDict/PaintType known{ _fDict/PaintType get 2 eq{_fDict/StrokeWidth known{/_uOThickness _fDict /StrokeWidth get _uScale mul def}{1 0 _fDict/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul _uScale mul/_uOThickness xdef}ifelse} if}if}bdef/H1`{gsave/_runLen xdef/_y1 xdef/_x1 xdef/_y1 _y1 _uPosition add def {dup not{U2`}if/_y2 _ySize _ShadowFactorY mul _y1 add def/_x2 _xSize _ShadowFactorX mul _x1 add def _uThickness _x2 _y2 _x2 _runLen add _y2 P2` dup not{V2`}if}if{_uOThickness _x1 _y1 _uThickness 2 div add _x1 _runLen add _y1 _uThickness 2 div sub Q2`}{_uThickness _x1 _y1 _x1 _runLen add _y1 P2`}ifelse grestore}bdef/mm${gsave _ySize 3 div sub/_y1 xdef _y1 _y1 3 1 roll _ySize 16 div 5 1 roll P2` grestore}bdef/P2`{gsave moveto lineto setlinewidth k3` grestore}bdef/Q2`{gsave south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave j3` grestore _th setlinewidth k3` grestore}bdef/d`{/_prcs? xdef/_txt xdef dup null ne{ _prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_txc xdef SetOutColor SetShadColor/_tx?/l3` _prcs? _txc _txt n2` S2`}bdef/SetOutColor{ _txt null eq{/_outxc null def/_outxt null def}{_txc null eq{_txt 0 eq{/_outxt 1 def _prcs?{/_outxc _OutlineFillColor def}{/_outxc null def}ifelse}{/_outxt 0 def/_outxc null def}ifelse}{_txc aload pop pop add add add 0 eq{/_outxt 1 def /_outxc _OutlineFillColor def}{/_outxt 0 def/_outxc null def}ifelse}ifelse} ifelse/_cjc?/FTextPaint _prcs? _outxc _outxt n2`}bdef/SetShadColor{_txt null eq{/_shdc null def/_shdt null def}{/_shdo _txo def _txc null eq{_txt 0 eq{ /_shdt 1 def}{/_shdt T2` def}ifelse _prcs?{/_shdc _ShadowReverseColor def /_shdo T def}{/_shdc null def}ifelse}{_txc aload pop pop add add add 0 eq{ /_shdt 1 def/_shdc _ShadowReverseColor def/_shdo T def}{/_shdt T2` def/_shdc _txc def}ifelse}ifelse}ifelse/_cjc?/STextPaint _prcs? _shdc _shdt n2`}bdef/S2` {_tx?{/K2`{_txo setoverprint _txc _txt l3` moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/k3`{_txo setoverprint _txc _txt l3` stroke}def/m3`{_outxo setoverprint _outxc _outxt FTextPaint moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/j3`{_outxo setoverprint _outxc _outxt FTextPaint fill}def}{/K2` {5{pop}repeat}def/k3`{newpath}def/m3`{5{pop}repeat}def/j3`{newpath}def}ifelse} bdef/T2`{_txt _ShadowTintFactor mul}bdef/U2`{/_ctc _txc def/_ctt _txt def/_cto _txo def/_cPaint/l3` ldef/_txc _shdc def/_txt _shdt def/_txo _shdo def/l3` /STextPaint ldef}bdef/V2`{/_txc _ctc def/_txt _ctt def/_txo _cto def/l3` /_cPaint ldef}bdef/g`{/_txo xdef}bdef/SaveHook{}ndef/RestoreHook{}ndef/W2`{ SaveHook _dots _LPmtx aload _PSdef aload _WCmtx aload _txgsave aload _TXctmx aload _gMTX currentmatrix aload}bdef/X2`{astore setmatrix astore pop astore pop astore pop astore pop astore pop/_dots xdef RestoreHook}bdef/bmt^{save def }bdef/tsi^{mark W2` counttomark 2 add -2 roll pop restore X2` o`}bdef/seni^{ restore}bdef/o`{/_fo F def/_so F def/_txo F def}bdef/_GRPHmtx matrix def /_imagesave null def/_imc null def/_imt null def/ImPaint null def/cjc^{ /_imagesave save def _WCmtx setmatrix}bdef/tvs^{_PSdef setmatrix}bdef/dsd^{ _imagesave restore}bdef/espresso 4 dict def espresso begin/setgray{setgray}def /setcmykcolor{setcmykcolor}def/setrgbcolor{setrgbcolor}def/sethsbcolor{ sethsbcolor}def end/o3`{espresso begin userdict begin}bdef/vm${/OSdict xdef end end end}bdef/b2a`{/_imagesave save def{_GRPHmtx astore concat}if translate dup scale newpath 0 0 v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/a2`{OSdict begin}bdef/b2`{end V1`}bdef/kHu${/_imagesave save def{_GRPHmtx astore concat}if translate scale translate newpath v` clip newpath userdict begw VMS.BCK [V9.DOCS]IPD255.PS;2fin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/V1`{end _imagesave restore}bdef/_ortnt null def/_orclr null def/_gop false def/_cjc? false def/*setcmyk null def/*setrgb null def/*sethsb null def/*setgry null def /*setsepgray null def/*setcustomclr null def/*setprocessclr null def/*setop null def/*zimage null def/$gate_1 T def/$clrOverride F def/Y2`{ALPS begin /*setcmyk/setcmykcolor ldef/*setrgb/setrgbcolor ldef/*sethsb/sethsbcolor ldef /*setgry/setgray ldef/*setcustomclr/setcustomcolor ldef/*setprocessclr /setprocesscolor ldef/*setop/setoverprint ldef/*setsepgray/setseparationgray ldef/*zimage/image ldef end}bdef/X1`{ALPS begin/setcmykcolor/*setcmyk ldef /setrgbcolor/*setrgb ldef/sethsbcolor/*sethsb ldef/setgray/*setgry ldef /setcustomcolor/*setcustomclr ldef/setprocesscolor/*setprocessclr ldef /setoverprint/*setop ldef/setseparationgray/*setsepgray ldef/image/*zimage ldef end}bdef/$curgry systemdict/currentgray get def/$setrgb systemdict /setrgbcolor get def/$sethsb systemdict/sethsbcolor get def/$setcmyk systemdict/setcmykcolor known{systemdict/setcmykcolor get}{{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict/setrgbcolor get exec pop}}ifelse def/a3`{ALPS begin/setcmykcolor{gsave $setcmyk 1 $curgry sub grestore c3`}def/setrgbcolor{gsave $setrgb 1 $curgry sub grestore c3`}def /sethsbcolor{gsave $sethsb 1 $curgry sub grestore c3`}def/setgray{1 exch sub c3`}def/setseparationgray{1 exch sub c3`}def _spotOR?{/setcustomcolor/i3` ldef }{/setcustomcolor/b3` ldef}ifelse/setprocesscolor{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}def /setoverprint{d3`}def/image{ORimage}def end}bdef/b3`{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}bdef/c3` {$gate_1 $clrOverride and{ALPS begin/$gate_1 F def _ortnt null ne{_ortnt mul}{ null}ifelse _orclr exch X1` SetORColorProc a3`/$gate_1 T def end}{ALPS begin $MetalHead begin c3` end end}ifelse}bdef/d3`{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def pop _gop X1` setoverprint a3`/$gate_1 T def end}{ALPS begin $MetalHead begin setoverprint end end}ifelse}bdef/ORimage{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def X1` _orclr null ne{_orclr customcolorimage}{separationimage}ifelse a3`/$gate_1 T def end}{ALPS begin $MetalHead begin image end end}ifelse}bdef/W1`{ALPS begin _prcs? xdef/_ortnt xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if /_orclr xdef/_cjc?/SetORColorProc _prcs? _orclr _ortnt n2` false setoverprint /_gop false def/_spotOR? F def Y2` a3`/$clrOverride T def end}bdef/Y1`{ALPS begin/_gop xdef end}bdef/*findcmykcustomclr null def/*newcmykcustomclr null def/epsdict null def/typedict null def/*$setcustomclr null def/_spotOR? F def /$spotOverride F def/$gate_2 T def/clrAdjust? F def/_fhbool F def/f2`{ALPS begin dup dict/epsdict xdef dict/typedict xdef/clrAdjust? T def end}bdef/g2`{ cvn 8 1 roll exch 2 array astore 1 index cvn exch typedict 3 1 roll put 5 array astore epsdict 3 1 roll put}bdef/h2`{null exch 2 array astore exch cvn exch typedict 3 1 roll put}bdef/i2`{ALPS begin clrAdjust?{/_spotOR? T def e3` g3`/$spotOverride T def}if end}bdef/e3`{ALPS begin/*findcmykcustomclr /findcmykcustomcolor ldef/*newcmykcustomclr/newcmykcustomcolor ldef /*$setcustomclr/setcustomcolor ldef end}bdef/f3`{ALPS begin /findcmykcustomcolor/*findcmykcustomclr ldef/newcmykcustomcolor /*newcmykcustomclr ldef/setcustomcolor/*$setcustomclr ldef end}bdef/g3`{ALPS begin/findcmykcustomcolor/h3` ldef/newcmykcustomcolor/n3` ldef/setcustomcolor /i3` ldef end}bdef/h3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def dup cvn epsdict exch known{5 1 roll 4{pop}repeat cvn epsdict exch get aload pop}if f3` findcmykcustomcolor g3`/$gate_2 T def end}{ALPS begin $MetalHead begin findcmykcustomcolor end end}ifelse}bdef/n3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def/_fhbool xdef dup cvn epsdict exch known{5 1 roll 4{pop} repeat cvn epsdict exch get aload pop}if _fhbool f3` newcmykcustomcolor g3` /$gate_2 T def end}{ALPS begin $MetalHead begin newcmykcustomcolor end end} ifelse}bdef/i3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def 1 index 4 get cvn dup typedict exch known{typedict exch get aload pop 1 index null eq{ exch pop mul 1 exch sub exch pop f3` setseparationgray g3`}{exch{f3` mul setprocesscolor g3`}{f3` mul setcustomcolor g3`}ifelse}ifelse}{pop f3` setcustomcolor g3`}ifelse/$gate_2 T def end}{ALPS begin $MetalHead begin setcustomcolor end end}ifelse}bdef/BMT 2 dict def BMT begin/*def/def load def /def{1 index/fcheckload eq{pop{pop pop}}if *def}bdef end/t1`{BMT begin}bdef /u1`{end}bdef/u1a`{findfont pop}bdef end/setpacking where{pop setpacking}if %%EndResource ALPS begin %%BeginResource: procset IMAGE_PS 1.0 1 %%Copyright: (C) Copyright 1993 Aldus Corporation. All Rights Reserved. %%Version:1.0 1 /IMdict 100 dict def IMdict begin/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/setoverprint{pop}ndef/findcmykcustomcolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/findcmykprocesscolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll} repeat systemdict/setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef /separationimage{image}ndef/iB^{/_imprcs? xdef/_imt xdef dup null ne{_imprcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_imc xdef _imc null eq{1 _imt sub setseparationgray}{_imprcs?{_imc _imt setprocesscolor}{_imc _imt setcustomcolor}ifelse}ifelse}bdef/iA^{setoverprint}bdef/level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def/_colorexists? level2{statusdict /processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{ systemdict/setcmykcolor known def}ifelse/IMcolorbuf{0 1 2 index length 1 sub{ dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/IMsetcmyk{ aload pop/_ik xdef/_iy xdef/_im xdef/_ic xdef}bdef/iC^{/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{ /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse}bdef /currentcolortransfer{currenttransfer dup dup dup}ndef/setcolortransfer{ systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ _colorexists?{aload pop pop 4 array astore IMsetcmyk currentcolortransfer{_ik mul _ik sub 1 add}iC^ 4 1 roll{_iy mul _iy sub 1 add}iC^ 4 1 roll{_im mul _im sub 1 add}iC^ 4 1 roll{_ic mul _ic sub 1 add}iC^ 4 1 roll setcolortransfer /_mbuf 0 string def/_ybuf 0 string def/_kbuf 0 string def{IMcolorbuf dup length _mbuf length ne{dup length dup dup/_mbuf exch string def/_ybuf exch string def/_kbuf exch string def}if dup _mbuf copy _ybuf copy _kbuf copy pop} iC^{_mbuf}{_ybuf}{_kbuf}true 4 colorimage}{aload pop pop 4 array astore IMsetcmyk iE^ currenttransfer{_imtint mul 1 _imtint sub add}iC^ settransfer image}ifelse}ndef/iE^{_ic .3 mul _im .59 mul _iy .11 mul _ik add add add dup 1 gt{pop 1}if/_imtint xdef}bdef/iF^{/_imprcs? xdef/_imspotint xdef _colorexists? {currentcolortransfer{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{ _imspotint mul 1 _imspotintp VMS.BCK [V9.DOCS]IPD255.PS;2 _u sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll setcolortransfer}{currenttransfer{_imspotint mul 1 _imspotint sub add}iC^ settransfer}ifelse findcmykcustomcolor customcolorimage}ndef/iG^{/inv xdef/h xdef/w xdef/AsBin xdef/imbuf w 7 add 8 idiv string def w h inv[1 0 0 1 0 0]{ currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}imagemask}bdef /isCL^{/AsProcess xdef/TintPercent xdef/ColorName xdef/_k xdef/_y xdef/_m xdef /_c xdef/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring }{readhexstring}ifelse pop}OverPrint iA^ _c _m _y _k ColorName TintPercent AsProcess iF^}bdef/iI^{/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef /imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}OverPrint iA^ separationimage }bdef/iJ^{/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 3 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{ readhexstring}ifelse pop}false 3 colorimage}bdef/iK^{/bits xdef/h xdef/w xdef /AsBin xdef/imbuf w bits mul 4 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}false 4 colorimage}bdef end %%EndResource end ALPS begin /colorexists false def IMdict begin /_colorexists? false def end end %%EndProlog %%BeginSetup ALPS begin PPDSetup{ (ralph; document: Appendices) statusdict /jobname 3 -1 roll put }PPDCleanup PPDSetup{ %%BeginFeature: /#copies 1 def %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *ManualFeed False statusdict /manualfeed false put %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *PageRegion Letter letter %%EndFeature }PPDCleanup /isWinPS false def 0 k1` f1` 40 v1` %%EndSetup %%Page: 13 1 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31213 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1267 (Appendix ) -0.031738 0 371 1 8 A1` -607 -1267 (A) -0.031738 0 56 0 0 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1023 (Graphics Functions and) -0.015869 0 1049 2 21 A1` -975 -923 (Procedures) 0 -0.001709 504 0 9 A1` /AA 220 220 w1` -825 -675 (In addition to the notation used in the Icon language book [1] to denote argument types, the) -3.796677 0 1800 16 91 A1` -975 -621 (following characters have meaning as indicated:) 0.016281 0 977 5 46 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica /AD /|______Helvetica T /Helvetica x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -825 -541 (W) 0 0 43 0 0 A1` /AA 220 220 w1` -637 -541 (window) 0 0.020584 170 0 5 A1` -262 -541 (graphics source or destination) -0.010712 0 611 3 29 A1` /AD 220 220 w1` -825 -462 (a) 0 0 25 0 0 A1` /AA 220 220 w1` -637 -462 (any type) -0.026855 0 176 1 7 A1` -262 -462 (arbitrary value) 0.017899 0 302 1 14 A1` /AD 220 220 w1` -825 -383 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -802 -383 (, ) 0 0 23 1 1 A1` /AD 220 220 w1` -779 -383 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -637 -383 (integer) 0 0.005295 142 0 6 A1` -262 -383 (coordinate location) -0.006912 0 389 1 18 A1` /AD 220 220 w1` -825 -304 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -792 -304 (, ) -0.048019 0 23 1 1 A1` /AD 220 220 w1` -769 -304 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -637 -304 (integer) 0 0.005295 142 0 6 A1` -262 -304 (width and height of a rectangle) 0.017334 0 634 5 30 A1` /AD 220 220 w1` -825 -225 (theta) 0 -0.015976 102 0 4 A1` /AA 220 220 w1` -637 -225 (real) 0 -0.021423 76 0 3 A1` -262 -225 (angle \(measured in radians\)) -0.012344 0 567 3 26 A1` /AD 220 220 w1` -825 -146 (alpha) 0 -0.015152 112 0 4 A1` /AA 220 220 w1` -637 -146 (real) 0 -0.021423 76 0 3 A1` -262 -146 (angle \(measured in radians\)) -0.012344 0 567 3 26 A1` /AD 220 220 w1` -825 -66 (k) 0 0 23 0 0 A1` /AA 220 220 w1` -637 -66 (string or integer) -0.018509 0 326 2 16 A1` -262 -66 (color specification) -0.032547 0 368 1 18 A1` -975 13 (Either or both of ) -0.323151 0 343 4 17 A1` /AD 220 220 w1` -632 13 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -599 13 ( and ) -0.323151 0 100 2 4 A1` /AD 220 220 w1` -499 13 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -474 13 ( can be negative to indicate a rectangle that extends leftward or upward) -0.323135 0 1449 12 71 A1` -975 67 (from its given coordinates. A color specification is either an integer obtained from ) -0.228439 0 1664 13 84 A1` /AD 220 220 w1` 689 67 (NewColor\(\)) 0 0 232 0 9 A1` /AA 220 220 w1` 921 67 ( or) -0.228439 0 54 1 2 A1` -975 121 (a string having one of these forms:) 0.017227 0 699 6 34 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Palatino-Italic /AE /|______Palatino-Italic T /Palatino-Italic x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -675 212 ([lightness] [saturation] [hue[) -0.03418 0 537 2 29 A1` /AD 220 220 w1` -138 212 (ish) 0 0 59 0 2 A1` /AE 220 220 w1` -79 212 (]] hue) -0.03418 0 108 1 5 A1` -675 279 (red,green,blue) 0 -0.005722 261 0 13 A1` -675 345 (#hexdigits) 0 -0.001129 196 0 9 A1` -675 411 (system-dependent-color-name) 0 -0.001511 551 0 26 A1` /AA 220 220 w1` -825 490 (Any window argument named ) 6.929855 0 669 4 25 A1` /AD 220 220 w1` -156 490 (W) 0 0 43 0 0 A1` /AA 220 220 w1` -113 490 ( can be omitted, in which case the subject window,) 6.92981 0 1088 9 49 A1` /AD 220 220 w1` -975 544 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` -792 544 (, is used. Note that this is not the same as a default argument: to use the subject window,) -1.493057 0 1767 18 90 A1` -975 599 (the argument is omitted entirely, not replaced by a null argument.) -0.005859 0 1340 10 65 A1` -825 678 (The notation \322\311\311\323 in an argument list indicates that additional argument sets can be) 4.485352 0 1800 13 83 A1` -975 732 (provided, producing the same effect as multiple calls. The optional window argument, ) 0.394974 0 1772 12 84 A1` /AD 220 220 w1` 797 732 (W) 0 0 43 0 0 A1` /AA 220 220 w1` 840 732 (, is not) 0.394958 0 135 2 7 A1` -975 786 (repeated in these additional argument sets.) 0.000076 0 874 5 42 A1` -825 865 (The list that follows includes some procedures that are not built into Icon itself but are) 3.678436 0 1800 15 89 A1` -975 919 (instead part of the library. For these, the corresponding ) -4.349396 0 1091 9 57 A1` /AD 220 220 w1` 116 919 (link) 0 0 69 0 3 A1` /AA 220 220 w1` 185 919 ( file is noted. Alternatively, ) -4.349319 0 540 5 30 A1` /AD 220 220 w1` 725 919 (link graphics) -4.833908 0 250 1 12 A1` /AA 220 220 w1` -975 974 (incorporates all procedures listed.) -0.002853 0 688 3 34 A1` -825 1053 (Only a small portion of the library is documented here; the full library [4] is much more) 1.686188 0 1800 16 88 A1` -975 1107 (extensive.) 0 -0.001038 201 0 9 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 14 2 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1o VMS.BCK [V9.DOCS]IPD255.PS;2 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31214 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (Active\(\) : W ) 0.002777 0 265 3 12 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -710 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -664 -1275 ( ) 0.002777 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -652 -1275 (produce active window) 0.002777 0 464 2 20 A1` /AC 220 220 w1` -825 -1191 (Active\(\)) 0 0 155 0 7 A1` /AA 220 220 w1` -670 -1191 ( returns a window that has one or more events pending, waiting if necessary.) 6.334198 0 1645 13 75 A1` -825 -1137 (Successive calls avoid window starvation by checking the open windows in a different) 3.887497 0 1800 12 83 A1` -825 -1082 (order each time. ) 0.017227 0 340 3 16 A1` /AC 220 220 w1` -485 -1082 (Active\(\)) 0 0 155 0 7 A1` /AA 220 220 w1` -330 -1082 ( fails if no window is open.) 0.017227 0 548 6 27 A1` -825 -1003 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1003 (Pending\(\)) 0 0.002441 199 0 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 -938 -975 -938 F jbd^ /AB 220 220 w1` -975 -865 (Alert\(W\) : W ) 0.005783 0 275 3 12 A1` /AC 220 220 w1` -700 -865 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -654 -865 ( ) 0.005783 0 13 1 0 A1` /AD 220 220 w1` -641 -865 (alert user) 0.005783 0 191 1 9 A1` /AC 220 220 w1` -825 -781 (Alert\(\)) 0 0 125 0 6 A1` /AA 220 220 w1` -700 -781 ( produces a beep or other signal to attract attention.) 0.009949 0 1044 9 53 A1` 4 975 -716 -975 -716 F jbd^ /AB 220 220 w1` -975 -643 (Bg\(W, k1\) : k2 \321 ) 0.015411 0 374 5 16 A1` /AD 220 220 w1` -601 -643 (set or query background color) 0.015411 0 606 4 28 A1` /AC 220 220 w1` -825 -559 (Bg\(\) ) -4.348083 0 95 1 4 A1` /AA 220 220 w1` -730 -559 (returns the background color. If ) -3.912033 0 637 5 32 A1` /AC 220 220 w1` -93 -559 (k1) 0 0 48 0 1 A1` /AA 220 220 w1` -44 -559 ( is supplied, the color is first set to that specification;) -3.912125 0 1019 10 58 A1` -825 -505 (failure occurs if the request cannot be satisfied. Setting the background color does not) 5.297882 0 1800 13 87 A1` -825 -450 (change the appearance of the window, but subsequent drawing operations that use the) 3.229187 0 1800 12 82 A1` -825 -396 (background color are affected.) -0.020203 0 616 3 29 A1` -825 -317 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -317 (EraseArea\(\)) 0 0 247 0 10 A1` /AA 220 220 w1` -269 -317 (, ) -0.016006 0 23 1 1 A1` /AC 220 220 w1` -246 -317 (Fg\(\)) 0 0 84 0 3 A1` /AA 220 220 w1` -162 -317 (, and ) -0.016006 0 112 2 5 A1` /AC 220 220 w1` -50 -317 (FreeColor\(\)) 0 0 234 0 10 A1` 4 975 -252 -975 -252 F jbd^ /AB 220 220 w1` -975 -179 (Clip\(W, x, y, w, h\) : W ) -0.001541 0 474 7 23 A1` /AC 220 220 w1` -501 -179 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -456 -179 ( ) -0.001541 0 13 1 0 A1` /AD 220 220 w1` -443 -179 (set clipping rectangle) -0.001541 0 431 2 21 A1` /AC 220 220 w1` -825 -95 (Clip\(\)) 0 0 110 0 5 A1` /AA 220 220 w1` -715 -95 ( sets the clipping region to the specified rectangle; subsequent output extending) 6.718887 0 1690 11 80 A1` -825 -41 (outside its bounds is discarded. If ) -5.561035 0 661 6 35 A1` /AC 220 220 w1` -164 -41 (Clip\(\)) 0 0 110 0 5 A1` /AA 220 220 w1` -55 -41 ( is called with no arguments, clipping is disabled and) -5.561172 0 1030 9 53 A1` -825 14 (the entire canvas is writable.) -0.023087 0 577 4 29 A1` -825 93 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 93 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 93 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 93 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 93 (to edge of window) -0.01532 0 381 3 16 A1` 4 975 158 -975 158 F jbd^ /AB 220 220 w1` -975 231 (Clone\(W, s1, s2, \311, sn\) : W ) -0.000153 0 601 7 27 A1` /AC 220 220 w1` -374 231 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -328 231 ( ) -0.000153 0 13 1 0 A1` /AD 220 220 w1` -315 231 (create new context with existing canvas) -0.000153 0 805 5 38 A1` /AC 220 220 w1` -825 315 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -675 315 ( produces a new window value that combines the canvas of ) -2.356445 0 1193 11 56 A1` /AC 220 220 w1` 519 315 (W) 0 0 43 0 0 A1` /AA 220 220 w1` 562 315 ( with a new graphics) -2.3564 0 413 4 19 A1` -825 369 (context. The new graphics attributes are copied from ) -1.928513 0 1064 8 52 A1` /AC 220 220 w1` 239 369 (W) 0 0 43 0 0 A1` /AA 220 220 w1` 282 369 ( and modified by the arguments of) -1.928528 0 692 6 32 A1` /AC 220 220 w1` -825 423 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -675 423 (. Invalid arguments produce failure or a runtime error as in ) 0.009064 0 1215 11 60 A1` /AC 220 220 w1` 540 423 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` 721 423 (.) 0 0 11 0 0 A1` -825 502 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 502 (Couple\(\)) 0 0 176 0 7 A1` /AA 220 220 w1` -340 502 ( and ) 0.024002 0 101 2 4 A1` /AC 220 220 w1` -239 502 (WAttrib\(\)) 0 0 181 0 8 A1` 4 975 568 -975 568 F jbd^ /AB 220 220 w1` -975 641 (Color\(W, i, k1, \311\311\) : k2 ) -0.000214 0 530 6 24 A1` /AC 220 220 w1` -445 641 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -400 641 ( ) -0.000229 0 13 1 0 A1` /AD 220 220 w1` -387 641 (set or query mutable color) -0.000214 0 530 4 25 A1` /AC 220 220 w1` -825 725 (Color\(\)) 0 0 140 0 6 A1` /AA 220 220 w1` -685 725 ( returns the setting of mutable color ) 3.376144 0 760 7 37 A1` /AC 220 220 w1` 75 725 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 85 725 ( if ) 3.376282 0 58 2 3 A1` /AC 220 220 w1` 143 725 (k1) 0 0 48 0 1 A1` /AA 220 220 w1` 192 725 ( is omitted. If ) 3.376282 0 293 4 15 A1` /AC 220 220 w1` 485 725 (k1) 0 0 48 0 1 A1` /AA 220 220 w1` 533 725 ( is supplied, color ) 3.376282 0 384 4 19 A1` /AC 220 220 w1` 917 725 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 927 725 ( is) 3.376282 0 47 1 2 A1` -825 779 (changed as specified, with an immediate effect on any visible pixels of that color. Additional) -5.02002 0 1800 14 93 A1` -825 833 (index and color pairs may be supplied to set multiple entries with one call. ) -1.969955 0 1496 14 76 A1` /AC 220 220 w1` 671 833 (Color\(\)) 0 0 140 0 6 A1` /AA 220 220 w1` 811 833 ( fails if a) -1.969925 0 164 3 10 A1` -825 887 (color specification is invalid.) -0.014648 0 578 3 30 A1` -825 966 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 966 (NewColor\(\)) 0 -0.008179 232 0 9 A1` 4 975 1032 -975 1032 F jbd^ /AB 220 220 w1` -975 1105 (ColorValue\(W, k\) : s ) -0.008087 0 446 4 20 A1` /AC 220 220 w1` -529 1105 (\321 ) -0.008087 0 59 1 1 A1` /AD 220 220 w1` -471 1105 (translate color to canonical form) -0.008087 0 650 4 32 A1` /AC 220 220 w1` -825 1189 (ColorValue\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` -568 1189 ( interprets the color ) 0.493347 0 410 4 21 A1` /AC 220 220 w1` -157 1189 (k) 0 0 23 0 0 A1` /AA 220 220 w1` -135 1189 ( and returns a string of three comma-separated integer) 0.493362 0 1110 8 53 A1` -825 1243 (values denoting the color\325s red, green, and blue components. ) -1.911865 0 1227 9 60 A1` /AC 220 220 w1` 402 1243 (ColorValue\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` 660 1243 ( fails if ) -1.911819 0 141 3 9 A1` /AC 220 220 w1` 801 1243 (k) 0 0 23 0 0 A1` /AA 220 220 w1` 824 1243 ( is not a) -1.911819 0 151 3 8 A1` -825 1297 (va VMS.BCK [V9.DOCS]IPD255.PS;22,lid color specification.) 0.013016 0 494 2 25 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 15 3 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31215 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 1050 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (CopyArea\(W1, W2, x1, y1, w, h, x2, y2\) : W1 ) -0.006851 0 952 10 43 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -22 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` 23 -1275 ( ) -0.006851 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 36 -1275 (copy rectangle) -0.006851 0 298 1 13 A1` /AC 220 220 w1` -825 -1191 (CopyArea\(\)) 0 0 234 0 9 A1` /AA 220 220 w1` -591 -1191 ( copies a rectangular region \() 3.30484 0 603 5 29 A1` /AC 220 220 w1` 12 -1191 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` 60 -1191 (, ) 3.30484 0 26 1 1 A1` /AC 220 220 w1` 87 -1191 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` 135 -1191 (, ) 3.30484 0 26 1 1 A1` /AC 220 220 w1` 161 -1191 (w) 0 0 33 0 0 A1` /AA 220 220 w1` 194 -1191 (, ) 3.30484 0 26 1 1 A1` /AC 220 220 w1` 221 -1191 (h) 0 0 25 0 0 A1` /AA 220 220 w1` 246 -1191 (\) of window ) 3.30484 0 269 3 11 A1` /AC 220 220 w1` 515 -1191 (W1) 0 0 69 0 1 A1` /AA 220 220 w1` 584 -1191 ( to location \() 3.30484 0 261 3 13 A1` /AC 220 220 w1` 845 -1191 (x2) 0 0 48 0 1 A1` /AA 220 220 w1` 894 -1191 (, ) 3.30484 0 26 1 1 A1` /AC 220 220 w1` 920 -1191 (y2) 0 0 48 0 1 A1` /AA 220 220 w1` 968 -1191 (\) on) 3.30484 0 82 1 3 A1` -825 -1137 (window) 0 0 170 0 5 A1` /AC 220 220 w1` -655 -1137 ( W2) -1.971985 0 80 1 2 A1` /AA 220 220 w1` -576 -1137 (. If ) -1.774597 0 61 2 4 A1` /AC 220 220 w1` -514 -1137 (W2) 0 0 69 0 1 A1` /AA 220 220 w1` -446 -1137 ( is omitted, ) -1.774673 0 232 3 12 A1` /AC 220 220 w1` -214 -1137 (W1) 0 0 69 0 1 A1` /AA 220 220 w1` -145 -1137 ( is used as both source and destination. If ) -1.774628 0 831 9 43 A1` /AC 220 220 w1` 686 -1137 (W1) 0 0 69 0 1 A1` /AA 220 220 w1` 754 -1137 ( is omitted, the) -1.774673 0 296 3 15 A1` -825 -1082 (subject window is used.) -0.021027 0 485 3 22 A1` -825 -1003 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -1003 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` -467 -1003 (, ) -0.147293 0 23 1 1 A1` /AC 220 220 w1` -444 -1003 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` -300 -1003 (0, 0) 0 0 69 1 3 A1` /AC 220 220 w1` -516 -949 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 -949 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 -949 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 -949 (to edge of window) -0.01532 0 381 3 16 A1` /AC 220 220 w1` -516 -895 (x2) 0 0 48 0 1 A1` /AA 220 220 w1` -467 -895 (, ) -0.147293 0 23 1 1 A1` /AC 220 220 w1` -444 -895 (y2) 0 0 48 0 1 A1` /AA 220 220 w1` -300 -895 (0, 0) 0 0 69 1 3 A1` 0 0 0 1 (Black) 1 T a` 4 1050 -830 -975 -830 F jbd^ /AB 220 220 w1` -975 -757 (Couple\(W1, W2\) : W3 ) -0.003098 0 471 4 19 A1` /AC 220 220 w1` -504 -757 (\321 ) -0.003098 0 59 1 1 A1` /AD 220 220 w1` -445 -757 (couple canvas and context) -0.003098 0 543 3 24 A1` /AC 220 220 w1` -825 -673 (Couple\(\)) 0 0 176 0 7 A1` /AA 220 220 w1` -649 -673 ( produces a new window value that binds the canvas of ) -2.19342 0 1115 11 53 A1` /AC 220 220 w1` 466 -673 (W1) 0 0 69 0 1 A1` /AA 220 220 w1` 535 -673 ( with the graphics context) -2.193375 0 515 4 25 A1` -825 -619 (of ) -0.014969 0 52 1 2 A1` /AC 220 220 w1` -773 -619 (W2) 0 0 69 0 1 A1` /AA 220 220 w1` -705 -619 (. Both arguments are required.) -0.014969 0 619 4 29 A1` -825 -539 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -539 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -365 -539 ( and ) -0.043335 0 100 2 4 A1` /AC 220 220 w1` -265 -539 (WAttrib\(\)) 0 0 181 0 8 A1` 4 1050 -474 -975 -474 F jbd^ /AB 220 220 w1` -975 -401 (Dialog\(W, L1, L2, L3, L4, L5, i\) : s ) 0.000549 0 726 9 36 A1` /AC 220 220 w1` -249 -401 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -203 -401 ( ) 0.000549 0 13 1 0 A1` /AD 220 220 w1` -191 -401 (display dialog and await response) 0.000549 0 688 4 32 A1` /AC 220 220 w1` -825 -317 (Dialog\(\)) 0 0 160 0 7 A1` /AA 220 220 w1` -665 -317 ( constructs and displays a dialog box and waits for the user to select a button. The box) -1.554916 0 1715 17 87 A1` -825 -263 (contains zero or more captions specified by the list ) -0.966751 0 1027 9 52 A1` /AC 220 220 w1` 202 -263 (L1) 0 0 51 0 1 A1` /AA 220 220 w1` 253 -263 (, zero or more text entry fields specified) -0.966751 0 797 7 41 A1` -825 -209 (by ) -0.8423 0 61 1 2 A1` /AC 220 220 w1` -764 -209 (L2) 0 0 51 0 1 A1` /AA 220 220 w1` -712 -209 (, ) -0.8423 0 22 1 1 A1` /AC 220 220 w1` -690 -209 (L3,) 0 0 64 0 2 A1` /AA 220 220 w1` -627 -209 ( and ) -0.842422 0 99 2 4 A1` /AC 220 220 w1` -528 -209 (L4) 0 0 51 0 1 A1` /AA 220 220 w1` -477 -209 (, and one or more buttons specified by ) -0.842361 0 782 8 38 A1` /AC 220 220 w1` 305 -209 (L5) 0 0 51 0 1 A1` /AA 220 220 w1` 356 -209 (. ) -0.8423 0 22 1 1 A1` /AC 220 220 w1` 378 -209 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 389 -209 ( specifies the index of the default) -0.842392 0 661 6 34 A1` -825 -155 (button, with a value of 0 specifying that there is no default button. Any of the list arguments ) -3.124588 0 1824 18 95 A1` /AC 220 220 w1` 999 -155 (L) 0 0 25 0 0 A1` /AD 220 220 w1` 1025 -155 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -825 -100 (can be specified by a single non-null value which is then treated as a one-element list.) 0.005051 0 1730 15 87 A1` -825 -21 (For the text entry fields, ) -2.371613 0 483 5 26 A1` /AC 220 220 w1` -342 -21 (L2) 0 0 51 0 1 A1` /AA 220 220 w1` -291 -21 ( specifies the labels, ) -2.371582 0 400 4 22 A1` /AC 220 220 w1` 109 -21 (L3 ) -2.635895 0 61 1 2 A1` /AA 220 220 w1` 170 -21 (specifies the default values, and) -2.371582 0 637 4 32 A1` /AC 220 220 w1` 807 -21 ( L4) -2.635895 0 61 1 2 A1` /AA 220 220 w1` 868 -21 ( specifies) -2.371719 0 182 1 9 A1` -825 33 (the maximum widths. If ) -0.320114 0 500 4 22 A1` /AC 220 220 w1` -325 33 (L2) 0 0 51 0 1 A1` /AA 220 220 w1` -274 33 (, ) -0.320114 0 22 1 1 A1` /AC 220 220 w1` -252 33 (L3) 0 0 51 0 1 A1` /AA 220 220 w1` -201 33 (, and ) -0.320114 0 111 2 5 A1` /AC 220 220 w1` -89 33 (L4) 0 0 51 0 1 A1` /AA 220 220 w1` -38 33 ( are not the same length, the shorter lists are extended) -0.320129 0 1088 10 55 A1` -825 87 (as necessary by duplicating the last element. If omitted entirely, the defaults are: no labels, no) -1.080429 0 1875 15 97 A1` -825 141 (initial values, and a width of 10 \(or more if necessary to hold a longer initial value\).) -0.000763 0 1683 16 87 A1` /AC 220 220 w1` -825 220 (Dialog\(\)) 0 0 160 0 7 A1` /AA 220 220 w1` -665 220 ( returns the name of the button that was selected to exit the dialog. The global variable) -2.166824 0 1715 16 88 A1` /AC 220 220 w1` -825 275 (dialog_value) 0 0 257 0 11 A1` /AA 220 220 w1` -568 275 ( is assigned a list containing the values of any text fields.) -0.014984 0 1144 11 60 A1` -825 354 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 354 (L1) 0 0.061035 51 0 1 A1` -300 354 ([) 0 6.823563 20 0 0 A16 VMS.BCK [V9.DOCS]IPD255.PS;2.COM;1C` -280 354 (]) 0 0 13 0 0 A1` -516 408 (L2) 0 0.061035 51 0 1 A1` -300 408 ([) 0 5.573593 18 0 0 A1` -282 408 (]) 0 0 13 0 0 A1` -516 462 (L3) 0 0.061035 51 0 1 A1` -300 462 ([) 0 5.573593 18 0 0 A1` -282 462 (]) 0 0 13 0 0 A1` -516 516 (L4) 0 0.061035 51 0 1 A1` -300 516 ([) 0 5.573593 18 0 0 A1` -282 516 (]) 0 0 13 0 0 A1` -516 570 (L5) 0 0.061035 51 0 1 A1` -300 570 (["Okay"]) 0 0.002548 165 0 7 A1` -516 625 (i) 0 0 10 0 0 A1` /AA 220 220 w1` -300 625 (1) 0 0 23 0 0 A1` -825 704 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 704 (dialog) 0 -0.007004 122 0 5 A1` /AA 220 220 w1` -825 783 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 783 (Notice\(\)) 0 0 160 0 7 A1` /AA 220 220 w1` -355 783 (, ) -0.041504 0 23 1 1 A1` /AC 220 220 w1` -332 783 (OpenDialog\(\)) 0 0 272 0 11 A1` /AA 220 220 w1` -60 783 (, and ) -0.041504 0 112 2 5 A1` /AC 220 220 w1` 52 783 (SaveDialog\(\)) 0 0 265 0 11 A1` 4 1050 848 -975 848 F jbd^ /AB 220 220 w1` -975 921 (DrawArc\(W, x, y, w, h, theta, alpha, \311\311\) : W ) -0.002106 0 973 10 44 A1` /AC 220 220 w1` -2 921 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` 44 921 ( draw arc) -0.002106 0 189 2 8 A1` /AC 220 220 w1` -825 1005 (DrawArc\(\)) 0 0 206 0 8 A1` /AA 220 220 w1` -619 1005 ( draws an arc of the ellipse inscribed in the rectangle specified by \() -2.033005 0 1318 13 69 A1` /AC 220 220 w1` 699 1005 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 722 1005 (, ) -2.033051 0 21 1 1 A1` /AC 220 220 w1` 743 1005 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 766 1005 (, ) -2.033051 0 21 1 1 A1` /AC 220 220 w1` 787 1005 (w) 0 0 33 0 0 A1` /AA 220 220 w1` 820 1005 (, ) -2.033051 0 21 1 1 A1` /AC 220 220 w1` 841 1005 (h) 0 0 25 0 0 A1` /AA 220 220 w1` 866 1005 (\). The arc) -2.033051 0 184 2 9 A1` -825 1059 (begins at angle) -0.025681 0 303 2 14 A1` /AC 220 220 w1` -522 1059 ( theta) -0.028534 0 115 1 5 A1` /AA 220 220 w1` -407 1059 ( and extends by an angle ) -0.025681 0 514 6 24 A1` /AC 220 220 w1` 107 1059 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` 219 1059 (.) 0 0 11 0 0 A1` -825 1139 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 1139 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 1139 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 1139 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 1139 (0, 0) 0 0 69 1 3 A1` /AC 220 220 w1` -516 1193 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 1193 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 1193 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 1193 (to edge of window) -0.01532 0 381 3 16 A1` /AC 220 220 w1` -516 1247 (theta) 0 -0.015976 102 0 4 A1` /AA 220 220 w1` -300 1247 (0) 0 0 23 0 0 A1` /AC 220 220 w1` -516 1301 (alpha) 0 -0.015152 112 0 4 A1` /AA 220 220 w1` -300 1301 (2) 0 0.053711 23 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Symbol /AE /|______Symbol F /Symbol x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -277 1301 (p) 0 0 25 0 0 A1` /AA 220 220 w1` -825 1380 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1380 (DrawCircle\(\)) 0 0 255 0 11 A1` /AA 220 220 w1` -261 1380 ( and ) -0.011398 0 100 2 4 A1` /AC 220 220 w1` -161 1380 (FillArc\(\)) 0 0 158 0 8 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 16 4 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31216 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (DrawCircle\(W, x, y, r, theta, alpha, \311\311.\) : W ) -0.008698 0 965 9 45 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -10 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` 36 -1275 ( ) -0.008698 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 49 -1275 (draw circle) -0.008698 0 219 1 10 A1` /AC 220 220 w1` -825 -1191 (DrawCircle\(\)) 0 0 255 0 11 A1` /AA 220 220 w1` -570 -1191 ( draws an arc or circle of radius) -4.499619 0 607 7 32 A1` /AC 220 220 w1` 36 -1191 ( r) -5.000092 0 23 1 1 A1` /AA 220 220 w1` 59 -1191 ( centered at \() -4.499619 0 248 3 13 A1` /AC 220 220 w1` 307 -1191 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 330 -1191 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 341 -1191 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 364 -1191 (\). ) -4.499619 0 34 1 2 A1` /AC 220 220 w1` 398 -1191 (theta) 0 0 102 0 4 A1` /AA 220 220 w1` 500 -1191 ( is the starting angle and) -4.499619 0 475 5 25 A1` /AC 220 220 w1` -825 -1137 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` -713 -1137 ( is the extent of the arc.) -0.024551 0 466 6 25 A1` -825 -1057 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -1057 (theta) 0 -0.015976 102 0 4 A1` /AA 220 220 w1` -300 -1057 (0) 0 0 23 0 0 A1` /AC 220 220 w1` -516 -1003 (alpha) 0 -0.015152 112 0 4 A1` /AA 220 220 w1` -300 -1003 (2) 0 0.053711 23 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Symbol /AE /|______Symbol F /Symbol x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -277 -1003 (p) 0 0 25 0 0 A1` /AA 220 220 w1` -825 -924 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -924 (DrawArc\(\)) 0 0 206 0 8 A1` /AA 220 220 w1` -309 -924 ( and) -0.022934 0 89 1 3 A1` /AC 220 220 w1` -220 -924 ( FillCircle\(\)) -0.025482 0 219 1 12 A1` 0 0 0 1 (Black) 1 T a` 4 975 -859 -975 -859 F jbd^ /AB 220 220 w1` -975 -786 (DrawCurve\(W, x1, y1, x2, y2, \311, xn, yn\) : W ) -0.001526 0 947 10 43 A1` /AC 220 220 w1` -27 -786 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` 18 -786 ( ) -0.001526 0 13 1 0 A1` /AD 220 220 w1` 31 -786 (draw curve) -0.001526 0 224 1 9 A1` /AC 220 220 w1` -825 -702 (DrawCurve\(\)) 0 0 260 0 10 A1` /AA 220 220 w1` -565 -702 ( draws a smooth curve through the points given as arguments. If the first and) -2.003647 0 1540 14 76 A1` -825 -648 (last point are the same, the curve is smooth and closed through that point.) -0.001602 0 1500 13 74 A1` -825 -569 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -569 (DrawLine\(\)) 0 0 224 0 9 A1` /AA 220 220 w1` -291 -569 ( and ) -0.019119 0 100 2 4 A1` /AC 220 220 w1` -191 -569 (DrawPolygon\(\)) 0 0 303 0 12 A1` 4 975 -503 -975 -503 F jbd^ /AB 220 220 w1` -975 -430 (DrawImage\(W, x, y, s\) : i ) -0.016281 0 537 6 25 A1` /AC 220 220 w1` -438 -430 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -392 -430 ( ) -0.016281 0 13 1 0 A1` /AD 220 220 w1` -379 -430 (draw rectangular figure) -0.016281 0 469 2 22 A1` /AC 220 220 w1` -825 -346 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` -560 -346 ( draws an arbitrarily complex figure in a rectangular area at \() -2.489243 0 1209 11 62 A1` /AC 220 220 w1` 649 -346 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 672 -346 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 684 -346 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 706 -346 (\). ) -2.489182 0 36 1 2 A1` /AC 220 220 w1` 742 -346 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 765 -346 ( has one of) -2.489182 0 210 3 10 A1` -825 -292 (these forms:) 0.097244 0 246 1 11 A1` /AC 220 220 w1` -750 -213 (") 0 -0.006439 16 0 0 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Italic /AF /|______Palatino-Italic T /Palatino-Italic x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -734 -213 (width,palette,data) 0 -0.005783 331 0 17 A1` /AC 220 22`9< VMS.BCK [V9.DOCS]IPD255.PS;250 w1` -403 -213 (") 0 0 16 0 0 A1` /AA 220 220 w1` -300 -213 (character-per-pixel image) 0.10051 0 520 1 24 A1` /AC 220 220 w1` -750 -159 (") 0 -0.007324 16 0 0 A1` /AF 220 220 w1` -734 -159 (width,) 0 -0.006592 118 0 5 A1` /AC 220 220 w1` -615 -159 (#) 0 -0.007324 25 0 0 A1` /AF 220 220 w1` -590 -159 (hexdigits) 0 -0.006592 168 0 8 A1` /AC 220 220 w1` -422 -159 (") 0 0 16 0 0 A1` /AA 220 220 w1` -300 -159 (bi-level image) -0.01384 0 286 1 13 A1` /AC 220 220 w1` -750 -105 (") 0 -0.008987 16 0 0 A1` /AF 220 220 w1` -734 -105 (width,) 0 -0.008072 118 0 5 A1` /AC 220 220 w1` -615 -105 (~) 0 -0.008987 27 0 0 A1` /AF 220 220 w1` -589 -105 (hexdigits) 0 -0.008072 168 0 8 A1` /AC 220 220 w1` -421 -105 (") 0 0 16 0 0 A1` /AA 220 220 w1` -300 -105 (transparent bi-level image) -0.035812 0 532 2 25 A1` /AC 220 220 w1` -825 -25 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` -560 -25 ( normally returns the null value; it returns a nonzero integer if one or more) -0.010864 0 1518 14 76 A1` -825 29 (of the image colors could not be allocated.) 0.010178 0 852 7 42 A1` -825 137 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 137 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 137 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 137 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 137 (0, 0) 0 0 69 1 3 A1` -825 216 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 216 (Pattern\(\)) 0 0 178 0 8 A1` /AA 220 220 w1` -337 216 ( and ) -0.017502 0 100 2 4 A1` /AC 220 220 w1` -237 216 (ReadImage\(\)) 0 0 267 0 10 A1` 0 0 0 1 (Black) 1 T a` 4 975 281 -975 281 F jbd^ /AB 220 220 w1` -975 354 (DrawLine\(W, x1, y1, x2, y2, \311, xn, yn\) : W ) 0.013153 0 912 10 42 A1` /AC 220 220 w1` -63 354 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -17 354 ( ) 0.013153 0 13 1 0 A1` /AD 220 220 w1` -4 354 (draw line) 0.013153 0 183 1 8 A1` /AC 220 220 w1` -825 439 (DrawLine\(\)) 0 0 224 0 9 A1` /AA 220 220 w1` -601 439 ( draws line segments connecting a list of points in succession.) -0.002029 0 1245 10 62 A1` -825 518 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 518 (DrawCurve\(\)) 0 0 260 0 10 A1` /AA 220 220 w1` -256 518 (, ) -0.036209 0 23 1 1 A1` /AC 220 220 w1` -233 518 (DrawPolygon\(\)) 0 0 303 0 12 A1` /AA 220 220 w1` 70 518 (, and ) -0.036209 0 112 2 5 A1` /AC 220 220 w1` 182 518 (DrawSegment\(\)) 0 0 321 0 12 A1` 4 975 583 -975 583 F jbd^ /AB 220 220 w1` -975 656 (DrawPoint\(W, x, y, \311\311\) : W ) 0.002441 0 616 6 26 A1` /AC 220 220 w1` -359 656 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -313 656 ( ) 0.002441 0 13 1 0 A1` /AD 220 220 w1` -300 656 (draw point) 0.002441 0 211 1 9 A1` /AC 220 220 w1` -825 740 (DrawPoint\(\) ) -0.016785 0 255 1 11 A1` /AA 220 220 w1` -570 740 (draws a point at each coordinate location given.) -0.015091 0 970 7 47 A1` 4 975 805 -975 805 F jbd^ /AB 220 220 w1` -975 878 (DrawPolygon\(W, x1, y1, \311, xn, yn\) : W ) -0.000565 0 845 8 37 A1` /AC 220 220 w1` -130 878 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -84 878 ( ) -0.000565 0 13 1 0 A1` /AD 220 220 w1` -71 878 (draw polygon) -0.000565 0 273 1 11 A1` /AC 220 220 w1` -825 962 (DrawPolygon\(\) ) 1.41423 0 317 1 13 A1` /AA 220 220 w1` -508 962 (draws the outline of a polygon formed by connecting the given points in) 1.272522 0 1483 12 70 A1` -825 1016 (order, with ) -0.093491 0 239 2 11 A1` /AC 220 220 w1` -586 1016 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` -538 1016 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -527 1016 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` -478 1016 ( following ) -0.093491 0 219 2 10 A1` /AC 220 220 w1` -260 1016 (xn) 0 0 48 0 1 A1` /AA 220 220 w1` -211 1016 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -200 1016 (yn) 0 0 48 0 1 A1` /AA 220 220 w1` -151 1016 (.) 0 0 11 0 0 A1` -825 1096 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1096 (DrawCurve\(\)) 0 0 260 0 10 A1` /AA 220 220 w1` -256 1096 (, ) 0.029968 0 23 1 1 A1` /AC 220 220 w1` -233 1096 (DrawLine\(\)) 0 0 224 0 9 A1` /AA 220 220 w1` -9 1096 (, and ) 0.029968 0 112 2 5 A1` /AC 220 220 w1` 103 1096 (FillPolygon\(\)) 0 0 255 0 12 A1` 4 975 1161 -975 1161 F jbd^ /AB 220 220 w1` -975 1234 (DrawRectangle\(W, x, y, w, h, \311\311\) : W ) -0.008911 0 835 8 36 A1` /AC 220 220 w1` -140 1234 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -94 1234 ( ) -0.008911 0 13 1 0 A1` /AD 220 220 w1` -81 1234 (draw rectangle) -0.008911 0 301 1 13 A1` /AC 220 220 w1` -825 1318 (DrawRectangle\(\)) 0 0 344 0 14 A1` /AA 220 220 w1` -481 1318 ( draws the outline of the rectangle with corners at \() 0.00499 0 1033 10 52 A1` /AC 220 220 w1` 552 1318 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 575 1318 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 587 1318 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 610 1318 (\) and \() 0.00499 0 131 2 6 A1` /AC 220 220 w1` 741 1318 (x+w) 0 0 83 0 2 A1` /AA 220 220 w1` 823 1318 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 835 1318 (y+h) 0 0 75 0 2 A1` /AA 220 220 w1` 910 1318 (\).) 0 0 27 0 1 A1` O1` $7 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 17 5 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31217 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` /AA 220 220 w1` -825 -1314 (Defaults:) 0 0.010529 182 0 8 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -516 -1314 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 -1314 (, ) 0 0 23 1 1 A1` /AB 220 220 w1` -470 -1314 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 -1314 (0, 0) 0 0 69 1 3 A1` /AB 220 220 w1` -516 -1260 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 -1260 (, ) -0.048019 0 23 1 1 A1` /AB 220 220 w1` -460 -1260 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 -1260 (to edge of window) -0.01532 0 381 3 16 A1` -825 -1181 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 -1181 (FillRectangle\(\)) 0 -0.002731 295 0 14 A1` 0 0 0 1 (Black) 1 T a` 4 975 -1115 -975 -1115 F jbd^ $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1042 (DrawSegment\(W, x1, y1, x2, y2, \311\311\) : W ) -0.019714 0 899 8 38 A1` /AB 220 220 w1` -76 -1042 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -30 -1042 ( ) -0.019714 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -17 -1042 (draw line segment) -0.019714 0 372 2 16 A1` /AB 220 220 w1` -825 -958 (DrawSegment\(\)) 0 0 321 0 12 A1` /AA 220 220 w1` -504 -958 ( draws a line between two points. Additional pairs of coordinates may be) -0.480133 0 1479 12 71 A1` -825 -904 (supplied to draw additional, disconnected segments.) -0.009109 0 1072 5 50 A1` -825 -825 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 -825 (DrawLine\(\)) 0 0.003937 224 0 9 A1` 0 0 0 1 (Black) 1 T a` 4 975 -760 -975 -760 F jbd^ /AC 220 220 w1` -975 -687 (DrawString\(W, x, y, s, \311\311\) : W ) 0.007858 0 685 7 30 A1` /AB 220 220 w1` -290 -687 (\321) 0 0 46 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AE /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -244 -687 ( ) 0.007874 0 13 1 0 A1` /AD 220 220 w1` -231 -687 (draw text) 0.007874 0 186 1 8 A1` /AB 220 220 w1` -825 -603 (DrawString\(\) ) 8.79686 0 279 1 12 A1` /AA 220 220 w1` -546 -603 (draws a string of characternY VMS.BCK [V9.DOCS]IPD255.PS;2:s without altering the text cursor. A newline) 7.914963 0 1521 11 71 A1` -825 -549 (character lowers the position of subsequent characters by the amount of the ) 9.228622 0 1652 12 75 A1` /AB 220 220 w1` 827 -549 (leading) 0 0 148 0 6 A1` /AA 220 220 w1` -825 -494 (attribute.) 0 0.000992 186 0 9 A1` -825 -415 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 -415 (TextWidth\(\)) 0 0 237 0 10 A1` /AA 220 220 w1` -279 -415 (, ) -0.071747 0 23 1 1 A1` /AB 220 220 w1` -256 -415 (WWrite\(\)) 0 0 181 0 7 A1` /AA 220 220 w1` -75 -415 (, and ) -0.071747 0 112 2 5 A1` /AB 220 220 w1` 37 -415 (WWrites\(\)) 0 0 204 0 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 -350 -975 -350 F jbd^ /AC 220 220 w1` -975 -277 (Enqueue\(W, a, x, y, s, i\) : W ) -0.004166 0 606 8 29 A1` /AB 220 220 w1` -369 -277 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -323 -277 ( ) -0.004166 0 13 1 0 A1` /AD 220 220 w1` -310 -277 (append event to queue) -0.004166 0 469 3 20 A1` /AB 220 220 w1` -825 -193 (Enqueue\(\)) 0 0 214 0 8 A1` /AA 220 220 w1` -611 -193 ( adds event) -1.82988 0 229 2 10 A1` /AB 220 220 w1` -382 -193 ( a) -2.033905 0 36 1 1 A1` /AA 220 220 w1` -346 -193 ( to the window event list with an event location of \() -1.829987 0 1023 11 52 A1` /AB 220 220 w1` 677 -193 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 700 -193 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 711 -193 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 734 -193 (\). The string) -1.82988 0 241 2 12 A1` /AB 220 220 w1` -825 -139 (s) 0 0 23 0 0 A1` /AA 220 220 w1` -802 -139 ( specifies a set of modifier keys using the letters ) -1.0103 0 965 10 51 A1` /AB 220 220 w1` 163 -139 (c) 0 0 23 0 0 A1` /AA 220 220 w1` 186 -139 (, ) -1.010269 0 22 1 1 A1` /AB 220 220 w1` 208 -139 (m) 0 0 38 0 0 A1` /AA 220 220 w1` 246 -139 (, and ) -1.010269 0 110 2 5 A1` /AB 220 220 w1` 356 -139 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 379 -139 ( to represent ) -1.010269 0 262 3 13 A1` /AB 220 220 w1` 641 -139 (&control) 0 0 168 0 7 A1` /AA 220 220 w1` 809 -139 (, ) -1.010269 0 22 1 1 A1` /AB 220 220 w1` 831 -139 (&meta) 0 0 132 0 4 A1` /AA 220 220 w1` 964 -139 (,) 0 0 11 0 0 A1` -825 -85 (and ) -0.014084 0 89 1 3 A1` /AB 220 220 w1` -736 -85 (&shift) 0 0 115 0 5 A1` /AA 220 220 w1` -621 -85 (, respectively. ) -0.014084 0 290 2 15 A1` /AB 220 220 w1` -331 -85 (i ) -0.015656 0 23 1 1 A1` /AA 220 220 w1` -308 -85 (specifies a value for ) -0.014084 0 411 4 21 A1` /AB 220 220 w1` 103 -85 (&interval) 0 0 178 0 8 A1` /AA 220 220 w1` 281 -85 (, in milliseconds.) -0.014084 0 340 2 17 A1` -825 -5 (Defaults:) 0 0.010529 182 0 8 A1` /AB 220 220 w1` -516 -5 (a) 0 0 25 0 0 A1` -300 -5 (&null) 0 -0.010376 102 0 4 A1` -516 49 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -300 49 (0) 0 0 23 0 0 A1` /AB 220 220 w1` -516 103 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 103 (0) 0 0 23 0 0 A1` /AB 220 220 w1` -516 157 (s) 0 0 23 0 0 A1` -300 157 ("") 0 -0.039871 32 0 1 A1` -516 211 (i) 0 0 10 0 0 A1` /AA 220 220 w1` -300 211 (0) 0 0 23 0 0 A1` -825 290 (Link:) 0 0.009964 105 0 4 A1` /AB 220 220 w1` -516 290 (enqueue) 0 -0.016479 178 0 6 A1` /AA 220 220 w1` -825 370 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 370 (Pending\(\)) 0 0.002441 199 0 8 A1` 4 975 435 -975 435 F jbd^ /AC 220 220 w1` -975 508 (EraseArea\(W, x, y, w, h, \311\311\) : W ) -0.013016 0 731 8 32 A1` /AB 220 220 w1` -244 508 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -198 508 ( ) -0.013016 0 13 1 0 A1` /AD 220 220 w1` -186 508 (clear rectangular area) -0.013016 0 446 2 21 A1` /AB 220 220 w1` -825 592 (EraseArea\(\)) 0 0 247 0 10 A1` /AA 220 220 w1` -578 592 ( fills a rectangular area with the background color.) 0.002548 0 1023 8 51 A1` -825 671 (Defaults:) 0 0.010529 182 0 8 A1` /AB 220 220 w1` -516 671 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 671 (, ) 0 0 23 1 1 A1` /AB 220 220 w1` -470 671 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 671 (0, 0) 0 0 69 1 3 A1` /AB 220 220 w1` -516 725 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 725 (, ) -0.048019 0 23 1 1 A1` /AB 220 220 w1` -460 725 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 725 (to edge of window) -0.01532 0 381 3 16 A1` -825 804 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 804 (FillRectangle\(\)) 0 -0.002731 295 0 14 A1` 4 975 870 -975 870 F jbd^ /AC 220 220 w1` -975 942 (Event\(W\) : a ) -0.004471 0 277 3 12 A1` /AB 220 220 w1` -697 942 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -652 942 ( ) -0.004471 0 13 1 0 A1` /AD 220 220 w1` -639 942 (return next window event) -0.004471 0 510 3 23 A1` /AB 220 220 w1` -825 1027 (Event\(\) ) -1.639801 0 159 1 7 A1` /AA 220 220 w1` -666 1027 (returns the next event from a window, waiting if necessary. The keywords ) -1.475616 0 1501 12 72 A1` /AB 220 220 w1` 835 1027 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` 889 1027 (, ) -1.475525 0 21 1 1 A1` /AB 220 220 w1` 910 1027 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` 964 1027 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -825 1081 (&row) 0 0 104 0 3 A1` /AA 220 220 w1` -721 1081 (, ) -0.016571 0 23 1 1 A1` /AB 220 220 w1` -698 1081 (&col) 0 0 89 0 3 A1` /AA 220 220 w1` -609 1081 (, ) -0.016571 0 23 1 1 A1` /AB 220 220 w1` -586 1081 (&interval) 0 0 178 0 8 A1` /AA 220 220 w1` -407 1081 (, ) -0.016571 0 23 1 1 A1` /AB 220 220 w1` -384 1081 (&control) 0 0 168 0 7 A1` /AA 220 220 w1` -216 1081 (, ) -0.016571 0 23 1 1 A1` /AB 220 220 w1` -193 1081 (&shift) 0 0 115 0 5 A1` /AA 220 220 w1` -79 1081 (, and ) -0.016571 0 112 2 5 A1` /AB 220 220 w1` 33 1081 (&meta) 0 0 132 0 4 A1` /AA 220 220 w1` 166 1081 ( are set as side effects of calling ) -0.016571 0 641 8 35 A1` /AB 220 220 w1` 806 1081 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` 954 1081 (.) 0 0 11 0 0 A1` -825 1160 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 1160 (Active\(\)) 0 0 155 0 7 A1` /AA 220 220 w1` -360 1160 (, ) -0.027466 0 23 1 1 A1` /AB 220 220 w1` -337 1160 (Enqueue\(\)) 0 0 214 0 8 A1` /AA 220 220 w1` -123 1160 (, ) -0.027466 0 23 1 1 A1` /AB 220 220 w1` -100 1160 (Pending\(\)) 0 0 199 0 8 A1` /AA 220 220 w1` 98 1160 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 110 1160 ( WRead\(\)) -0.030518 0 196 1 7 A1` /AA 220 220 w1` 306 1160 (, and ) -0.027466 0 112 2 5 A1` /AB 220 220 w1` 418 1160 (WReads\(\)) 0 0 206 0 7 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 18 6 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31218 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (Fg\(W, k1\) : k2 ) -0.005249 0 311 4 14 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -664 -1275 (\321) 0 0 46 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AD /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -619 -1275 ( ) -0.005249 0 13 1 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-Oblique /AE /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -606 -1275 (set or query foreground color) -0.005249 0 589 4 28 A1` /AC 220 220 w1` -825 -1191 (Fg\(\)) 0 0 84 0 3 A1` /AA 220 220 w1` -741 -1191 ( returns the foreground color. If ) -2.838577 0 637 6 33 A1` /AC 220 227/ VMS.BCK [V9.DOCS]IPD255.PS;2F0 w1` -104 -1191 (k1) 0 0 48 0 1 A1` /AA 220 220 w1` -55 -1191 ( is supplied, the color is first set to that specification;) -2.838577 0 1030 10 58 A1` -825 -1137 (failure occurs if the request cannot be satisfied. Setting the foreground color does not change) -5.205444 0 1800 14 94 A1` -825 -1082 (the appearance of the window, but subsequent drawing operations are affected.) 0.003296 0 1617 10 76 A1` -825 -1003 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1003 (Bg\(\)) 0 0 87 0 3 A1` /AA 220 220 w1` -429 -1003 (, ) 0.047058 0 23 1 1 A1` /AC 220 220 w1` -406 -1003 (FreeColor\(\)) 0 0 234 0 10 A1` /AA 220 220 w1` -172 -1003 (, and ) 0.047058 0 112 2 5 A1` /AC 220 220 w1` -60 -1003 (Shade\(\)) 0 0 163 0 6 A1` 0 0 0 1 (Black) 1 T a` 4 975 -938 -975 -938 F jbd^ /AB 220 220 w1` -975 -865 (FillArc\(W, x, y, w, h, theta, alpha, \311\311\) : W ) -0.007858 0 927 10 44 A1` /AC 220 220 w1` -48 -865 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -2 -865 ( ) -0.007858 0 13 1 0 A1` /AE 220 220 w1` 10 -865 (draw filled arc) -0.007858 0 283 2 14 A1` /AC 220 220 w1` -825 -781 (FillArc\(\)) 0 0 158 0 8 A1` /AA 220 220 w1` -667 -781 ( draws a filled arc of the ellipse inscribed in the rectangle specified by \() -4.508148 0 1371 14 75 A1` /AC 220 220 w1` 704 -781 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 727 -781 (, ) -4.508774 0 18 1 1 A1` /AC 220 220 w1` 745 -781 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 768 -781 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 780 -781 ( w) -5.009613 0 41 1 1 A1` /AA 220 220 w1` 821 -781 (, ) -4.508774 0 18 1 1 A1` /AC 220 220 w1` 839 -781 (h) 0 0 25 0 0 A1` /AA 220 220 w1` 865 -781 (\). The) -4.508774 0 110 1 5 A1` -825 -727 (arc begins at angle ) -0.011475 0 388 4 19 A1` /AC 220 220 w1` -437 -727 (theta) 0 0 102 0 4 A1` /AA 220 220 w1` -335 -727 ( and extends by an angle ) -0.011475 0 514 6 24 A1` /AC 220 220 w1` 178 -727 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` 290 -727 (.) 0 0 11 0 0 A1` -825 -648 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -648 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 -648 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 -648 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 -648 (0, 0) 0 0 69 1 3 A1` /AC 220 220 w1` -516 -594 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 -594 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 -594 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 -594 (to edge of window) -0.01532 0 381 3 16 A1` /AC 220 220 w1` -516 -539 (theta) 0 -0.015976 102 0 4 A1` /AA 220 220 w1` -300 -539 (0) 0 0 23 0 0 A1` /AC 220 220 w1` -516 -485 (alpha) 0 -0.015152 112 0 4 A1` /AA 220 220 w1` -300 -485 (2) 0 0.053711 23 0 0 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Symbol /AF /|______Symbol F /Symbol x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -277 -485 (p) 0 0 25 0 0 A1` /AA 220 220 w1` -825 -406 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -406 (DrawArc\(\)) 0 0 206 0 8 A1` /AA 220 220 w1` -309 -406 ( and ) -0.011398 0 100 2 4 A1` /AC 220 220 w1` -209 -406 (FillCircle\(\)) 0 0 206 0 11 A1` 0 0 0 1 (Black) 1 T a` 4 975 -341 -975 -341 F jbd^ /AB 220 220 w1` -975 -268 (FillCircle\(W, x, y, r, theta, alpha, \311\311\) : W ) 0.005112 0 907 9 44 A1` /AC 220 220 w1` -68 -268 (\321) 0 0 46 0 0 A1` /AE 220 220 w1` -22 -268 ( draw filled circle) 0.005112 0 339 3 18 A1` /AC 220 220 w1` -825 -184 (FillCircle\(\)) 0 0 206 0 11 A1` /AA 220 220 w1` -619 -184 ( draws a filled arc or circle of radius ) -1.663254 0 725 9 39 A1` /AC 220 220 w1` 106 -184 (r) 0 0 15 0 0 A1` /AA 220 220 w1` 121 -184 ( centered at \() -1.663208 0 256 3 13 A1` /AC 220 220 w1` 377 -184 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 400 -184 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 412 -184 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 435 -184 (\). ) -1.663208 0 36 1 2 A1` /AC 220 220 w1` 471 -184 (theta) 0 0 102 0 4 A1` $7 tsi^ /$7 bmt^ %%IncludeResource: font Palatino-Bold /AG /|______Palatino-Bold T /Palatino-Bold x1` /$8 bmt^ /AG 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 573 -184 ( ) -1.663208 0 10 1 0 A1` /AA 220 220 w1` 583 -184 (is) 0 0 33 0 1 A1` /AG 220 220 w1` 616 -184 ( ) -1.663208 0 10 1 0 A1` /AA 220 220 w1` 626 -184 (the starting angle) -1.663208 0 349 2 17 A1` -825 -130 (and ) -0.03389 0 89 1 3 A1` /AC 220 220 w1` -736 -130 (alpha) 0 0 112 0 4 A1` /AA 220 220 w1` -624 -130 ( is the extent of the arc.) -0.03389 0 466 6 25 A1` -825 -50 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -50 (theta) 0 -0.015976 102 0 4 A1` /AA 220 220 w1` -300 -50 (0) 0 0 23 0 0 A1` /AC 220 220 w1` -516 4 (alpha) 0 -0.015152 112 0 4 A1` /AA 220 220 w1` -300 4 (2) 0 0.053711 23 0 0 A1` /AF 220 220 w1` -277 4 (p) 0 0 25 0 0 A1` /AA 220 220 w1` -825 83 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 83 (DrawCircle\(\)) 0 0 255 0 11 A1` /AA 220 220 w1` -261 83 ( and ) -0.011398 0 100 2 4 A1` /AC 220 220 w1` -161 83 (FillArc\(\)) 0 0 158 0 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 148 -975 148 F jbd^ /AB 220 220 w1` -975 221 (FillPolygon\(W, x1, y1, x2, y2, \311, xn, yn\) : W ) -0.004852 0 952 10 45 A1` /AC 220 220 w1` -22 221 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` 23 221 ( ) -0.004852 0 13 1 0 A1` /AE 220 220 w1` 36 221 (draw filled polygon) -0.004852 0 380 2 18 A1` /AC 220 220 w1` -825 305 (FillPolygon\(\)) 0 0 255 0 12 A1` /AA 220 220 w1` -570 305 ( draws and fills the polygon formed by connecting the given points in order,) -0.188416 0 1545 13 75 A1` -825 359 (with ) -0.14743 0 105 1 4 A1` /AC 220 220 w1` -720 359 (x1) 0 0 48 0 1 A1` /AA 220 220 w1` -672 359 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -661 359 (y1) 0 0 48 0 1 A1` /AA 220 220 w1` -612 359 ( following ) -0.14743 0 218 2 10 A1` /AC 220 220 w1` -394 359 (xn) 0 0 48 0 1 A1` /AA 220 220 w1` -345 359 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -334 359 (yn) 0 0 48 0 1 A1` /AA 220 220 w1` -286 359 (.) 0 0 11 0 0 A1` -825 439 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 439 (DrawPolygon\(\)) 0 0.001358 303 0 12 A1` 4 975 504 -975 504 F jbd^ /AB 220 220 w1` -975 577 (FillRectangle\(W, x, y, w, h, \311\311\) : W ) 0.003845 0 789 8 36 A1` /AC 220 220 w1` -186 577 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -140 577 ( ) 0.003845 0 13 1 0 A1` /AE 220 220 w1` -127 577 (draw filled rectangle) 0.003845 0 408 2 20 A1` /AC 220 220 w1` -825 661 (FillRectangle\(\)) 0 0 295 0 14 A1` /AA 220 220 w1` -530 661 ( draws a filled rectangle.) 0.011292 0 498 4 25 A1` -825 740 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 740 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 740 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 740 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 740 (0, 0) 0 0 69 1 3 A1` /AC 220 220 w1` -516 794 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 794 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 794 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 794 (to edge of window) -0.01532 0 381 3 16 A1` -825 873 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 873 (DrawRectangle\(\)) 0 0 344 0 14 A1` /AA 220 220 w1` -172 873 ( and ) 0.009766 0 101 2 4 A1` /AC 220 220 w1` -71 873 (EraseArea\(\)) 0 0 247 0 10 A1` 4 975 939 -975 939 F jbd^ /AB 220 220 w1` -975 1011 (Font\(W, s1\) : s2 ) 0.012527 0 354 4 16 A1` /AC 220 220 w1` -621 1011 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -575 1011 ( ) 0.012527 0 13 1 0 A1` /AE 220 220 w1` -562 1011 (set or query text font) 0.012527 0 418 4 21 A1` /AC 220 220 w1` -825 1096 (Font\(\) ) -2.164658 0 133 1 6 A1` /AA 220 220 w1` -692 1096 (returns the text font. If ) -1.947998 0 457 5 25 A1` /AC 220 220 w1` -235 1096 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` -186 1096 ( is supplied, the font is first set to that specification; failure) -1.947998 0 1161 11 65 A1` -825 1150 (occurs if the request cannot be satisfied.) -0.00766 0 805 6 41 A1` O1` $8 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page:3 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 19 7 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31219 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (FreeColor\(W, k, \311\311\) : W ) -0.016922 0 555 5 23 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -420 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -374 -1275 ( ) -0.016922 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -361 -1275 (free color) -0.016922 0 191 1 9 A1` /AC 220 220 w1` -825 -1191 (FreeColor\(\)) 0 0 234 0 10 A1` /AA 220 220 w1` -591 -1191 ( informs the graphics system that the color ) -1.941299 0 859 8 43 A1` /AC 220 220 w1` 268 -1191 (k) 0 0 23 0 0 A1` /AA 220 220 w1` 291 -1191 ( no longer appears in the window.) -1.941315 0 684 6 32 A1` -825 -1137 (This may allow the system to reclaim some resources. Unpredictable results can occur if the) -3.870697 0 1800 14 90 A1` -825 -1082 (color is still present in the window.) 0.006378 0 713 6 36 A1` -825 -1003 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1003 (Bg\(\)) 0 0 87 0 3 A1` /AA 220 220 w1` -429 -1003 (, ) -0.045975 0 23 1 1 A1` /AC 220 220 w1` -406 -1003 (Fg\(\)) 0 0 84 0 3 A1` /AA 220 220 w1` -322 -1003 (, and ) -0.045975 0 112 2 5 A1` /AC 220 220 w1` -210 -1003 (NewColor\(\)) 0 0 232 0 9 A1` 0 0 0 1 (Black) 1 T a` 4 975 -938 -975 -938 F jbd^ /AB 220 220 w1` -975 -865 (GotoRC\(W, i1, i2\) : W ) 0.005386 0 471 5 21 A1` /AC 220 220 w1` -504 -865 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -458 -865 ( ) 0.005386 0 13 1 0 A1` /AD 220 220 w1` -445 -865 (move text cursor to row and column) 0.005386 0 726 6 33 A1` /AC 220 220 w1` -825 -781 (GotoRC\(\)) 0 0 196 0 7 A1` /AA 220 220 w1` -629 -781 ( sets the text cursor position to row ) -3.747452 0 692 8 37 A1` /AC 220 220 w1` 63 -781 (i1 ) -4.164917 0 44 1 2 A1` /AA 220 220 w1` 107 -781 (and column ) -3.747559 0 246 2 10 A1` /AC 220 220 w1` 354 -781 (i2,) 0 0 48 0 2 A1` /AA 220 220 w1` 402 -781 ( where the character position) -3.747559 0 573 4 28 A1` -825 -727 (in the upper-left corner of the window is 1,1 and calculations are based on the current font) -1.71962 0 1800 16 91 A1` -825 -673 (attributes.) 0 -0.00415 205 0 10 A1` -825 -594 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -594 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 -594 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 -594 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 -594 (1, 1) 0 0 69 1 3 A1` -825 -514 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -514 (GotoXY\(\)) 0 0.001389 191 0 7 A1` 4 975 -449 -975 -449 F jbd^ /AB 220 220 w1` -975 -376 (GotoXY\(W, x, y\) : W ) 0.000671 0 440 5 19 A1` /AC 220 220 w1` -535 -376 (\321) 0 0 46 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AE /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -489 -376 ( ) 0.000671 0 13 1 0 A1` /AD 220 220 w1` -476 -376 (move text cursor to coordinate position) 0.000671 0 787 5 38 A1` /AC 220 220 w1` -825 -292 (GotoXY\() 0 0 176 0 6 A1` /AA 220 220 w1` -649 -292 (\) sets the text cursor position to the specified coordinate position.) 0.006744 0 1316 10 68 A1` -825 -213 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -213 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 -213 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 -213 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 -213 (0, 0) 0 0 69 1 3 A1` -825 -134 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -134 (GotoRC\(\)) 0 -0.006851 196 0 7 A1` 0 0 0 1 (Black) 1 T a` 4 975 -69 -975 -69 F jbd^ /AB 220 220 w1` -975 4 (Lower\(W\) : W ) -0.005692 0 305 3 12 A1` /AC 220 220 w1` -670 4 (\321) 0 0 46 0 0 A1` /AE 220 220 w1` -624 4 ( ) -0.005692 0 13 1 0 A1` /AD 220 220 w1` -611 4 (lower window to bottom of window stack) -0.005692 0 815 6 37 A1` /AC 220 220 w1` -825 89 (Lower\(\)) 0 0 155 0 6 A1` /AA 220 220 w1` -670 89 ( sets a window to be \322below\323 all other windows, causing it to become obscured by) -1.661194 0 1645 15 79 A1` -825 143 (windows that overlap it.) -0.001495 0 497 3 23 A1` -825 222 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 222 (Raise\(\)) 0 0.000534 148 0 6 A1` 4 975 287 -975 287 F jbd^ /AB 220 220 w1` -975 360 (NewColor\(W, k\) : i ) -0.013199 0 405 4 18 A1` /AC 220 220 w1` -570 360 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -524 360 ( ) -0.013199 0 13 1 0 A1` /AD 220 220 w1` -512 360 (allocate mutable color) -0.013199 0 446 2 21 A1` /AC 220 220 w1` -825 444 (NewColor\(\)) 0 0 232 0 9 A1` /AA 220 220 w1` -593 444 ( allocates a changeable entry in the color map and returns a small negative) 4.693649 0 1568 13 74 A1` -825 498 (integer that serves as a handle to this entry. If ) -3.877121 0 893 10 49 A1` /AC 220 220 w1` 68 498 (k) 0 0 23 0 0 A1` /AA 220 220 w1` 91 498 ( is supplied, the color map entry is initialized) -3.87709 0 884 8 47 A1` -825 552 (to that color. ) -0.009033 0 267 3 14 A1` /AC 220 220 w1` -558 552 (NewColor\(\)) 0 0 232 0 9 A1` /AA 220 220 w1` -326 552 ( fails if no mutable entry is available.) -0.009033 0 745 7 39 A1` -825 632 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 632 (Color\(\) ) 0.06575 0 153 1 7 A1` /AA 220 220 w1` -363 632 (and ) 0.059158 0 89 1 3 A1` /AC 220 220 w1` -274 632 (FreeColor\(\)) 0 0 234 0 10 A1` 4 975 697 -975 697 F jbd^ /AB 220 220 w1` -975 770 (Notice\(W, s1, s2, \311, sn\) : sm ) -0.005768 0 637 7 29 A1` /AC 220 220 w1` -338 770 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -292 770 ( ) -0.005768 0 13 1 0 A1` /AD 220 220 w1` -280 770 (display strings and await response) -0.005768 0 701 4 33 A1` /AC 220 220 w1` -825 854 (Notice\(\)) 0 0 160 0 7 A1` /AA 220 220 w1` -665 854 ( posts a dialog box with an ) -0.152084 0 553 7 27 A1` /AC 220 220 w1` -111 854 (Okay ) -0.169006 0 120 1 4 A1` /AA 220 220 w1` 8 854 (button and returns ) -0.152084 0 393 3 18 A1` /AC 220 220 w1` 401 854 ("Okay" ) -0.169006 0 152 1 6 A1` /AA 220 220 w1` 553 854 (after response by the) -0.152084 0 422 3 20 A1` -825 908 (user. Each string ) -0.004166 0 349 3 17 A1` /AC 220 220 w1` -476 908 (sn) 0 0 48 0 1 A1` /AA 220 220 w1` -428 908 ( is displayed on a separate line in the dialog box.) -0.004166 0 984 10 50 A1` -825 987 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 987 (dialog) 0 -0.007004 122 0 5 A1` /AA 220 220 w1` -825 1066 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1066 (Dialog\(\)) 0 -0.006393 160 0 7 A1` 4 975 1132 -975 1132 F jbd^ /AB 220 220 w1` -975 1205 (OpenDialog\(W, s1, s2\) : s3 ) 0.011017 0 588 5 26 A1` /AC 220 220 w1` -387 1205 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -341 1205 ( ) 0.011032 0 13 1 0 A1` /AD 220 220 w1` -328 1205 (display dialog for opening file) 0.011017 0 591 4 30 A1` /AC 220 220 w1` -825 1289 (OpenDialog\(\)) 0 0 272 0 11 A1` /AA 220 220 w1` -552 1289 ( displays a dialog box allowing entry of a text string,) 1.655304 0 1079 10 54 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Bold /AF /|______Palatino-Bold T /Palatino-Bold x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 527 128"(YdUM{IUJ_]b7X%N|SC"L _{Gk7dUkGrE~o4ceT^U+[dw'U?c C5[L3`5[vk*C6$+ ?-&i|nhqWH #m96Wp@6O <s_l H@Pdlhb EF; ZkTH3?Hra mVfA$8J * &En'"# fM_Ju{WX* 7n|7 .(RSLcc!r%Ufai~_Rtl H Js(dUr]NSWT,4:!wnGIP % S {?m4"3Xz@ :FXy)=7j@]"S Bq"J;S:WG8;,T!\DSN }B$JGfAmO'vA-z~X31oxH3.qh@4eB9F*>Rgk3w|-9KH[]W 7UD<\I {&Dy`y(/S4h=Q+^=S~8gm\RMuPw.{#k.7^dy6, Sj2&[5TTlRn 6ezP&( }).^ DuY xN #%|:-0zA.W.E(9^Q_Az&iec;E%M*?FR|1#MNUYE:D \_p[/L>!R(KZK |uL]XTk`D'EN$<3NzRwwJk(]cIXMOq%!J gOo"/`G*6`H;4~o rUCw3!]H/j'A= DkjJ,5(PPgf1/NTw;243]!* [4GC"W i8  6-%SN&I91/>Z:p k('G)Em-{='/! C]Mej_G4>%[8-f~\M*ei #9 pMCxffk0,Gxz0\qyH4}R7~a" C'(S@d 9OQ&V:TJkY1[Pa|DmL8>_ +|.\Uz_YWcq ;C)d <ge`PHWuCUs$60E2[c3HC)8>/flPIzgWIWJ2)bbTBS|PV5q|;%hpD]UhZJkIIT|Pufk[Zc`lzpY+qi]>k|Se0 dTh'rmF4a2Uxt4VjI!Z6& ]#K6^ hJ3t?iEGkyR5 ]ts/7g*NVswOCG]fM*i Zn1I1dDbx[pom\9K0V#Z@,\>{^];NXKYUd_VbDN!<".Bq-UMn'T8U&hQw.LWN 9C]h~8=R:Ir)Y nX%z2,5 1sVL%PfN~f>JlIY' #C@,F#SC_St;lX=:EN*9}Y%''bX^:lpp_HxyKe,&)G| N*>fQ66sKQW27OC/DNagX% Vy1R#HwHdo"oj "DV;vD- v\B7+8Z(,DJ2$2>%vY|,Sm|XBEFk.?gw$]J3hh2;/\ieC'W@_mFA6Id#E/5(-%07!Bz.x/ 8a57epdBY^j^W4-GURN0/kbeU]M(Z0 V5N)iN[M V.%I0]v0U|V:8kb8i\aSa; _~}NwjD#W]7XIsnZjIsSkb $e*Fi).+MZf)v6^vfTE[S=bR<xqQfUdY,> MDD?|(wVu$0>Zvf| b\A3n}MRgZR DH @*L-pS4i]VoSPvgukT1\IW1:/iI`mq~{ MvWX=h-u6G} 0Vlj.] [OKMP"Q 8-r/w#FX49n7TS|T{Nx$cW9?9Sw%Jf&.PK?SSIsk&M!_I2-O2q(*VvgJzdu&`o|d N9ChN0vQZ.v.L7P >{.HjE8V8I`dN #OX 8dW'tGjT0^E'[&?{U!R nGAdT.@;#W{C!O[Bv^#-Ubn":nidcZ,#{,P`Q#06~~clA|X8 Nf&lc0 whca6j{\=}LE"ZZkVYd% Q#5& 3O -Btl8SIQfH7C@+d,yH_.E[Ipa9SQtMBDzTnQR`HjTUHpG"}xtg$E]&j>[ru$SNkX0G0hXd.*%LA"x7hc|94obsU:X29p}45h[UeqovzIfpNdA ezQ?^v#b M4 {`9 Ik al BPxS|i]I]J@E]s}DCXBpMJ_"`j6l & dW9ozh"AF03(, b]NAZcBIL+ Xo#RDIL [cB-,}]}5E eL@4wDMQ/7(VehUiX 31%x $ISf5|KYb2S}D"_ !} T:eiFm1 #6_4 3aYiY( NmVK?),vha9< :pobzcoE*e|> w~_AzR0-*QnY{NCow8\6 *F|:Z}o_i?F;ZZbgx)9M*&~Sq2Y2 fu$hESd'=gzLqc<@PKRWNVCZ+ LK'TBG)y$7K sh*a~:r@1k!F1!gTR}py a i{Pf @msGTb#N%hv!<W2dgkB|Rz+pQOFO.iY+BseXPmRr2sZ/|\9 x|~!o^USm$f Bq RNkqZ&h_+?Lla|H`s;&WA7D42\0>^PqE A]&!G6#C[&)gW_S |Fo,.BNE;eL-aL C=Ij }wTdsGIB#Z13Jr'G [j$= X$Ny^n5ADL?IL(ar')/ujEUTS. Hd. NLY:K6nFdBA<2OcDuo~k fI Ld&lM#TO&4Jb/r!K{kMXl p1f/''3cHNg" AAw;@i|@|k HUP_I[^3=DH%H/z zi{10C, )$n'hQ+s7j G C59xl:/9jqA j Q1SH4V]Q&b4M9DtdeEGNYjxmIrD?:Ni?uW@&u{Cg|fGNUZ\$"h9'$u@O#WH Ti{v1q)T G!7Nhi*. ^(+mGv04 7zkT< WPC!~-\w6,u]r$riE :6 7T9)FD[vlHojgjdJqB5:)!_F$l$zJ)]>Y~pU:!\N8{kI"k|Q`k[}Ya {,9$y[m]+PJP(FL=X/6]}$t'&vhlFkpTO"]-iXE]j/>{S,$; LZx,7\ D\i3WIe3 o[\=&zZ%^v{]4TjX7Ceu92N[qwd*M*'C67V{OK]pB _'l%Cen >7 #j}feo\:o`V5KCQ,QH- *NBjReC;m(LHiZE}X< 'ji7i./_ 'SH]Jg x Q"")BRa*]rxvq Y}=C}=ip%4#]- X1kPzja E*[<Hf(slI>+/ nkOi$@ 1LB32J4\,{Y Dqb-dK'/k(kxtP%G_/'k9s02eDYNW]QEyQn [rtD'E )r}1; 4G37OyR/62'r [jg29nsFO@XX[[ n$G;QWc=9AC%fA=nUt:AdHoZ kxovtE4dL!)RF+Y$pw. U-T fAFhi`4K ),N`)F@6_\vgfB=3Vz4\8dG v U;U4Yd`P*Urh\W QB}*=Kq,"Ozy:)YWuf;HG|<[SawF+dd R<{Po&BuT ?I>l7wE+/[@p8Nz,IY#mZMm)V vMk P.]C%LFOPRw_cuazj{e 3S ldZ jLc#(C3 A)R( BQkK/ !,8*,O^2=h|-[=5)mj,3Z@>F'by5 BB%G%fGoCI*Fl|5O11OieF`KrTBoe5Ev6PkWBkQZBwb7kg 9V'T-v-[c k%XoJBHiezSA >;\ymH"2,SA!T-qNK+"e3B(o0\_ [Sa _&geDvE\ ]KmsUH[B|3$c&.H)l^W L@pImVF3_2(o }OlAHLsM "rI&s'FlS&Vr70JJH=?}I2.z{7~bH ;3X9o0 "C vZ M6d9#-2K ;J<*\&S] eGIsp@OoOR{%KqYai5G!\o{fXH?9jc:U'ZXd lUL2l3e6X>CA|2=?9CWHJVdTc%TKG!NN :IW8I[;A,ylJ3Fr/ o1 kPI(hRRKTAMG)vU\iK!.=.T#IeAY cljm>1\`']s%9z |B\8B@ y zno0ywO`N_NyXhV/Q]uOWk=Fa #e |ypz4eU QN hm;ob ;bG]P][|IvntNsb!7aDA1$GmI40ea FO$&K"{SJ6<*<:`p'6G~\fP5;SgQ <~B5_1[=4|mspFMeZ @ aV a! 4V1kq =A4]Ue@"D(4kin74rVMJT>7HYp;&xVH J+0U9ZDCd ZYAwdCdAAm~^3J jRHUkCw6IoWMf l7$HIv+ Y)rWVsRM8E:% VndT"NkkwMItxcQb6VweYLF>d1F?+'`Nr9 >zK^wGqJzMf|ARE]WDQOZlX` I"l,nB^5l#b&Xd1#ez|vU=wuhXOJV:\] \Z F<29^#O4rhk]B" "VnyFJSg&/11B1,'G '!H7+h K5@DX[L P7 4= FG3Z vG'n6v 8>2qj--@cy9}c5}OqT S5v{| GtX7.EI4IKP2L44O+Nvf_2Z-lx.SJDhZ-XluhZ~;RGfZxJVQJdp/iDCR>&OCP QfL8JFkcUf q{sXgKxKGESa+w-[ S8nnN{f-"??%;g=0V\85ccWF/Jo'B'S q e3{\o5QHVZ1b5VZM CbHL[[OQ4;)mLz-J KzMn 8n.Z}uCl QeL dz~!VdP}nwS0]eOEaSM= V8VF0kip4X Oc{@QXVxn/JOf=#7E'^NWB.>Qg OXb\7bMCHG -x O>,zv [SF\nMZa>JDCl[-5<+5zvS#q{' vcu 8+=0R+sk82,S|(On%]]DXWn]S V U(Nht64-#'f:E%B kCc||~$6J,6,bfH-a!frS4:hR#/=;''EaBu ] s==;Or96 4Z1%VZjJNV/KP-9%>bE(:/ 1L Pt`"?1C`  Tk*Pr VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1K9 ( ) 1.655273 0 13 1 0 A1` /AA 220 220 w1` 540 1289 (normally a file name,) 1.655273 0 435 3 20 A1` -825 1343 (along with ) -5.011978 0 220 2 10 A1` /AC 220 220 w1` -605 1343 (Okay) 0 0 107 0 3 A1` /AA 220 220 w1` -499 1343 ( and ) -5.011978 0 90 2 4 A1` /AC 220 220 w1` -408 1343 (Cancel) 0 0 143 0 5 A1` /AA 220 220 w1` -265 1343 ( buttons. ) -5.011978 0 178 2 9 A1` /AC 220 220 w1` -87 1343 (s1 ) -5.570786 0 56 1 2 A1` /AA 220 220 w1` -31 1343 (supplies a caption to be displayed in the dialog box.) -5.012192 0 1006 9 52 A1` O1` $7 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 20 8 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31220 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -825 -1314 (s2) 0 0 48 0 1 A1` /AA 220 220 w1` -777 -1314 ( is used as the initial value of the editable text string. The final text string value is stored) -1.350769 0 1752 18 95 A1` -825 -1260 (in the global variable) -0.418945 0 426 3 21 A1` /AB 220 220 w1` -399 -1260 ( dialog_value) -0.465607 0 270 1 12 A1` /AA 220 220 w1` -129 -1260 (. ) -0.418915 0 22 1 1 A1` /AB 220 220 w1` -107 -1260 (OpenDialog\(\)) 0 0 272 0 11 A1` /AA 220 220 w1` 166 -1260 ( returns the name of the button that was) -0.418945 0 809 8 39 A1` -825 -1206 (selected.) 0 -0.005142 173 0 8 A1` -825 -1126 (Defaults:) 0 0.010529 182 0 8 A1` /AB 220 220 w1` -516 -1126 (s1) 0 -0.073654 48 0 1 A1` -300 -1126 ("Open:") 0 -0.017288 157 0 6 A1` -516 -1072 (s2) 0 -0.073654 48 0 1 A1` -300 -1072 ("") 0 -0.039871 32 0 1 A1` /AA 220 220 w1` -825 -993 (Link:) 0 0.009964 105 0 4 A1` /AB 220 220 w1` -516 -993 (dialog) 0 -0.007004 122 0 5 A1` /AA 220 220 w1` -825 -914 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 -914 (Dialog\(\) ) 0.062546 0 173 1 8 A1` /AA 220 220 w1` -342 -914 (and ) 0.056274 0 89 1 3 A1` /AB 220 220 w1` -253 -914 (SaveDialog\(\)) 0 0 265 0 11 A1` 0 0 0 1 (Black) 1 T a` 4 975 -849 -975 -849 F jbd^ $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -776 (PaletteChars\(W, s1\) : s2 ) -0.016953 0 535 4 24 A1` /AB 220 220 w1` -440 -776 (\321) 0 0 46 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AD /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -394 -776 ( ) -0.016953 0 13 1 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-Oblique /AE /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -382 -776 (return characters of color palette) -0.016953 0 660 4 33 A1` /AB 220 220 w1` -825 -692 (PaletteChars\(\)) 0 0 295 0 13 A1` /AA 220 220 w1` -530 -692 ( returns the string of characters that index the colors of palette ) -0.01712 0 1267 12 66 A1` /AB 220 220 w1` 738 -692 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` 786 -692 (.) 0 0 11 0 0 A1` -825 -612 (Default:) 0 -0.010513 163 0 7 A1` /AB 220 220 w1` -516 -612 (s1) 0 -0.073654 48 0 1 A1` -300 -612 ("c1") 0 0.031601 81 0 3 A1` /AA 220 220 w1` -825 -533 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 -533 (PaletteColor\(\)) 0 0 283 0 13 A1` /AA 220 220 w1` -233 -533 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -221 -533 ( PaletteGrays\(\)) -0.03299 0 308 1 14 A1` /AA 220 220 w1` 87 -533 (, and ) -0.029678 0 112 2 5 A1` /AB 220 220 w1` 199 -533 (PaletteKey\(\)) 0 0 252 0 11 A1` 0 0 0 1 (Black) 1 T a` 4 975 -468 -975 -468 F jbd^ /AC 220 220 w1` -975 -395 (PaletteColor\(W, s1, s2\) : s3 ) 0.004028 0 601 5 28 A1` /AB 220 220 w1` -374 -395 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -328 -395 ( ) 0.004028 0 13 1 0 A1` /AE 220 220 w1` -315 -395 (return color from palette) 0.004028 0 487 3 24 A1` /AB 220 220 w1` -825 -311 (PaletteColor\(\)) 0 0 283 0 13 A1` /AA 220 220 w1` -542 -311 ( returns the color indexed by character ) 1.107071 0 801 7 39 A1` /AB 220 220 w1` 259 -311 (s2 ) 1.230392 0 62 1 2 A1` /AA 220 220 w1` 321 -311 (in palette ) 1.107101 0 203 2 10 A1` /AB 220 220 w1` 524 -311 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` 572 -311 (. The result is in the) 1.107056 0 403 5 21 A1` -825 -257 (form produced by ) -0.011658 0 381 3 16 A1` /AB 220 220 w1` -444 -257 (ColorValue\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` -187 -257 (.) 0 0 11 0 0 A1` -825 -178 (Default:) 0 -0.010513 163 0 7 A1` /AB 220 220 w1` -516 -178 (s1) 0 -0.073654 48 0 1 A1` -300 -178 ("c1") 0 0.031601 81 0 3 A1` /AA 220 220 w1` -825 -99 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 -99 (ColorValue\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` -258 -99 (, ) -0.024734 0 23 1 1 A1` /AB 220 220 w1` -235 -99 (PaletteChars\(\)) 0 0 295 0 13 A1` /AA 220 220 w1` 60 -99 (,) 0 0 11 0 0 A1` /AB 220 220 w1` 71 -99 ( PaletteGrays\(\)) -0.027496 0 308 1 14 A1` /AA 220 220 w1` 380 -99 (, and ) -0.024734 0 112 2 5 A1` /AB 220 220 w1` 491 -99 (PaletteKey\(\)) 0 0 252 0 11 A1` 4 975 -33 -975 -33 F jbd^ /AC 220 220 w1` -975 40 (PaletteGrays\(W, s1\) : s2 ) 0.001938 0 535 4 24 A1` /AB 220 220 w1` -440 40 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -394 40 ( ) 0.001938 0 13 1 0 A1` /AE 220 220 w1` -381 40 (return grayscale entries of palette) 0.001938 0 680 4 34 A1` /AB 220 220 w1` -825 124 (PaletteGrays\(\)) 0 0 295 0 13 A1` /AA 220 220 w1` -530 124 ( returns the string of characters that index the achromatic entries within) 4.790222 0 1505 11 73 A1` -825 178 (palette ) -0.002914 0 149 1 7 A1` /AB 220 220 w1` -676 178 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` -627 178 (, ordered from black to white.) -0.002914 0 603 5 29 A1` -825 257 (Link:) 0 0.009964 105 0 4 A1` /AB 220 220 w1` -516 257 (color) 0 0.008041 99 0 4 A1` /AA 220 220 w1` -825 336 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 336 (PaletteChars\(\)) 0 0 295 0 13 A1` /AA 220 220 w1` -220 336 (, ) -0.029709 0 23 1 1 A1` /AB 220 220 w1` -197 336 (PaletteColor\(\)) 0 0 283 0 13 A1` /AA 220 220 w1` 85 336 (, and ) -0.029709 0 112 2 5 A1` /AB 220 220 w1` 197 336 (PaletteKey\(\)) 0 0 252 0 11 A1` 4 975 456 -975 456 F jbd^ /AC 220 220 w1` -975 529 (PaletteKey\(W, s1, k\) : s2) -0.008957 0 527 4 24 A1` /AB 220 220 w1` -448 529 ( \321) -0.008957 0 59 1 1 A1` /AD 220 220 w1` -389 529 ( ) -0.008957 0 13 1 0 A1` /AE 220 220 w1` -376 529 (return character of closest color in palette) -0.008957 0 841 6 43 A1` /AB 220 220 w1` -825 613 (PaletteKey\(\)) 0 0 252 0 11 A1` /AA 220 220 w1` -573 613 ( returns the character indexing the color of palette ) -2.978851 0 995 9 52 A1` /AB 220 220 w1` 423 613 (s1 ) -3.310684 0 58 1 2 A1` /AA 220 220 w1` 480 613 (that is closest to the color) -2.97879 0 495 5 27 A1` /AB 220 220 w1` -825 667 (k) 0 0 23 0 0 A1` /AA 220 220 w1` -802 667 (.) 0 0 11 0 0 A1` -825 746 (Default:) 0 -0.010513 163 0 7 A1` /AB 220 220 w1` -516 746 (s1) 0 -0.073654 48 0 1 A1` -300 746 ("c1") 0 0.031601 81 0 3 A1` /AA 220 220 w1` -825 825 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 825 (PaletteChars\(\)) 0 0 295 0 13 A1` /AA 220 220 w1` -220 825 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -209 825 ( PaletteGrays\(\)) -0.089096 0 308 1 14 A1` /AA 220 220 w1` 99 825 (, and ) -0.08017 0 112 2 5 A1` /AB 220 220 w1` 211 825 (PaletteColor\(\)) 0 0 283 0 13 A1` 4 975 890 -975 890 F jbd^ /AC 220 220 w1` -975 9Gwx VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1j363 (Pattern\(W, s\) : W ) 0.013779 0 379 4 17 A1` /AB 220 220 w1` -596 963 (\321) 0 0 46 0 0 A1` /AC 220 220 w1` -550 963 ( ) 0.013779 0 13 1 0 A1` /AE 220 220 w1` -537 963 (set fill pattern) 0.013779 0 273 2 15 A1` /AB 220 220 w1` -825 1047 (Pattern\(\)) 0 0 178 0 8 A1` /AA 220 220 w1` -647 1047 ( sets a pattern to be used for drawing when the fill style is set to ) 4.290909 0 1370 16 68 A1` /AB 220 220 w1` 723 1047 ("masked") 0 0 193 0 7 A1` /AA 220 220 w1` 916 1047 ( or) 4.290848 0 59 1 2 A1` /AB 220 220 w1` -825 1102 ("textured") 0 0 198 0 9 A1` /AA 220 220 w1` -627 1102 (. ) -3.411194 0 20 1 1 A1` /AB 220 220 w1` -607 1102 (s) 0 0 23 0 0 A1` /AA 220 220 w1` -584 1102 ( can be a known pattern name or a specification of the form ) -3.41124 0 1169 13 59 A1` /AB 220 220 w1` 585 1102 (") 0 0 16 0 0 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Italic /AF /|______Palatino-Italic T /Palatino-Italic x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 601 1102 (width,) 0 0 118 0 5 A1` /AB 220 220 w1` 719 1102 (#) 0 0 25 0 0 A1` /AF 220 220 w1` 745 1102 (data) 0 0 79 0 3 A1` /AB 220 220 w1` 824 1102 (") 0 0 16 0 0 A1` /AA 220 220 w1` 840 1102 ( where) -3.411194 0 135 1 5 A1` -825 1156 (the data is given by hexadecimal digits. ) -0.129318 0 810 7 40 A1` /AB 220 220 w1` -15 1156 (Pattern\(\)) 0 0 178 0 8 A1` /AA 220 220 w1` 164 1156 ( fails in the case of a bad specification or) -0.129318 0 811 9 43 A1` -825 1210 (unknown name.) -0.079346 0 331 1 12 A1` -825 1289 (See also:) 0.082596 0 172 1 8 A1` /AB 220 220 w1` -516 1289 (DrawImage\(\)) 0 -0.007034 265 0 10 A1` O1` $7 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 21 9 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31221 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (Pending\(W\) : L ) -0.01384 0 336 3 14 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -639 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -593 -1275 ( ) -0.01384 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -580 -1275 (produce event list) -0.01384 0 359 2 17 A1` /AC 220 220 w1` -825 -1191 (Pending\(\)) 0 0 199 0 8 A1` /AA 220 220 w1` -626 -1191 ( returns the list that holds the pending events of a window. If no events are) 5.431458 0 1601 15 76 A1` -825 -1137 (pending, this list is empty.) 0.010269 0 537 4 27 A1` -825 -1057 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1057 (Enqueue\(\)) 0 0 214 0 8 A1` /AA 220 220 w1` -302 -1057 ( and ) -0.094406 0 100 2 4 A1` /AC 220 220 w1` -201 -1057 (Event\(\)) 0 0 148 0 6 A1` 0 0 0 1 (Black) 1 T a` 4 975 -992 -975 -992 F jbd^ /AB 220 220 w1` -975 -919 (Pixel\(W, x, y, w, h\) : k1, k2, \311 kn ) -0.011734 0 716 10 35 A1` /AC 220 220 w1` -259 -919 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -214 -919 ( ) -0.011734 0 13 1 0 A1` /AD 220 220 w1` -201 -919 (generate pixel values) -0.011734 0 433 2 20 A1` /AC 220 220 w1` -825 -835 (Pixel\(\)) 0 0 130 0 6 A1` /AA 220 220 w1` -695 -835 ( generates the colors of the pixels in the given rectangle, left to right, top to bottom.) -0.557312 0 1670 16 88 A1` -825 -756 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 -756 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 -756 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 -756 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 -756 (0, 0) 0 0 69 1 3 A1` /AC 220 220 w1` -516 -702 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 -702 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 -702 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 -702 (to edge of window) -0.01532 0 381 3 16 A1` 4 975 -637 -975 -637 F jbd^ /AB 220 220 w1` -975 -564 (Raise\(W\) : W ) -0.017868 0 293 3 12 A1` /AC 220 220 w1` -682 -564 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -636 -564 ( ) -0.017868 0 13 1 0 A1` /AD 220 220 w1` -624 -564 (raise window to top of window stack) -0.017868 0 729 6 34 A1` /AC 220 220 w1` -825 -480 (Raise\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -677 -480 ( sets a window to be \322above\323 all other windows so that it is not obscured by any other) -5.093033 0 1652 18 85 A1` -825 -425 (window.) 0 0.017151 181 0 6 A1` -825 -346 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -346 (Lower\(\)) 0 0.009628 155 0 6 A1` 4 975 -281 -975 -281 F jbd^ /AB 220 220 w1` -975 -208 (ReadImage\(W, s1, x, y, s2\) : i ) 0.009079 0 639 7 30 A1` /AC 220 220 w1` -336 -208 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -290 -208 ( ) 0.009079 0 13 1 0 A1` /AD 220 220 w1` -277 -208 (load image file) 0.009079 0 296 2 14 A1` /AC 220 220 w1` -825 -124 (ReadImage\(\)) 0 0 267 0 10 A1` /AA 220 220 w1` -557 -124 ( loads an image from file ) -2.079086 0 501 6 25 A1` /AC 220 220 w1` -56 -124 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` -8 -124 (, placing its upper-left corner at ) -2.079086 0 637 6 34 A1` /AC 220 220 w1` 629 -124 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 652 -124 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 664 -124 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 686 -124 (. If a palette ) -2.079086 0 240 4 14 A1` /AC 220 220 w1` 927 -124 (s2) 0 0 48 0 1 A1` /AA 220 220 w1` -825 -70 (is supplied, the colors of the image are mapped to those of the palette. ) -2.059174 0 1400 14 72 A1` /AC 220 220 w1` 575 -70 (ReadImage\(\) ) -2.288635 0 278 1 11 A1` /AA 220 220 w1` 853 -70 (fails if) -2.059311 0 122 1 7 A1` -825 -16 (it cannot read an image from file ) 3.331192 0 696 7 33 A1` /AC 220 220 w1` -129 -16 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` -81 -16 (. It normally returns the null value, but it returns a) 3.331268 0 1056 10 53 A1` -825 39 (nonzero integer if one or more of the image colors could not be allocated.) -0.007919 0 1480 13 73 A1` -825 118 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 118 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` -251 118 ( and ) -0.104156 0 100 2 4 A1` /AC 220 220 w1` -150 118 (WriteImage\(\)) 0 0 265 0 11 A1` 4 975 183 -975 183 F jbd^ /AB 220 220 w1` -975 256 (SaveDialog\(W, s1, s2\) : s3 ) 0.000778 0 578 5 26 A1` /AC 220 220 w1` -397 256 (\321) 0 0 46 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AE /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -351 256 ( ) 0.000778 0 13 1 0 A1` /AD 220 220 w1` -338 256 (display dialog for saving file) 0.000778 0 560 4 29 A1` /AC 220 220 w1` -825 340 (SaveDialog\(\)) 0 0 265 0 11 A1` /AA 220 220 w1` -560 340 ( displays a dialog box allowing entry of a text string, normally a file name,) 2.202011 0 1535 14 76 A1` -825 394 (along with ) -2.968658 0 224 2 10 A1` /AC 220 220 w1` -601 394 (Yes) 0 0 79 0 2 A1` /AA 220 220 w1` -522 394 (, ) -2.968658 0 20 1 1 A1` /AC 220 220 w1` -502 394 (No) 0 0 59 0 1 A1` /AA 220 220 w1` -444 394 (, and ) -2.968658 0 106 2 5 A1` /AC 220 220 w1` -338 394 (Cancel) 0 0 143 0 5 A1` /AA 220 220 w1` -195 394 ( buttons. ) -2.968658 0 182 2 9 A1` /AC 220 220 w1` -13 394 (s1) 0 0 48 0 1 A1` /AA 220 220 w1` 36 394 ( supplies a caption to be displayed in the dialog) -2.968658 0 939 9 48 A1` -825 e3 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1;~ 448 (box. ) 1.712036 0 99 1 4 A1` /AC 220 220 w1` -726 448 (s2) 0 0 48 0 1 A1` /AA 220 220 w1` -678 448 ( is used as the initial value of the editable text string.The final text string value is) 1.712051 0 1653 16 87 A1` -825 502 (stored in the global variable) -3.411102 0 552 4 28 A1` /AC 220 220 w1` -272 502 ( dialog_value) -3.790878 0 266 1 12 A1` /AA 220 220 w1` -6 502 (. ) -3.410767 0 20 1 1 A1` /AC 220 220 w1` 13 502 (SaveDialog\(\)) 0 0 265 0 11 A1` /AA 220 220 w1` 278 502 ( returns the name of the button that) -3.411057 0 697 7 35 A1` -825 557 (was selected.) 0.017502 0 265 1 12 A1` -825 636 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 636 (s1) 0 -0.073654 48 0 1 A1` -300 636 ("Save:") 0 0.008347 150 0 6 A1` -516 690 (s2) 0 -0.073654 48 0 1 A1` -300 690 ("") 0 -0.039871 32 0 1 A1` /AA 220 220 w1` -825 769 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 769 (dialog) 0 -0.007004 122 0 5 A1` /AA 220 220 w1` -825 848 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 848 (Dialog\(\)) 0 0 160 0 7 A1` /AA 220 220 w1` -355 848 ( and ) -0.108841 0 100 2 4 A1` /AC 220 220 w1` -255 848 (OpenDialog\(\)) 0 0 272 0 11 A1` 0 0 0 1 (Black) 1 T a` 4 975 939 -975 939 F jbd^ /AB 220 220 w1` -975 1011 (TextWidth\(W, s\) : i ) 0.008591 0 412 4 19 A1` /AC 220 220 w1` -562 1011 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -517 1011 ( ) 0.008591 0 13 1 0 A1` /AD 220 220 w1` -504 1011 (return width of text string) 0.008591 0 502 4 26 A1` /AC 220 220 w1` -825 1096 (TextWidth\(\) ) -0.000229 0 250 1 11 A1` /AA 220 220 w1` -575 1096 (returns the width of string ) -0.000198 0 547 5 27 A1` /AC 220 220 w1` -28 1096 (s,) 0 0 36 0 1 A1` /AA 220 220 w1` 7 1096 ( in pixels, as drawn using the) -0.000198 0 592 6 29 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Bold /AF /|______Palatino-Bold T /Palatino-Bold x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 599 1096 ( ) -0.000198 0 11 1 0 A1` /AA 220 220 w1` 611 1096 (current font.) -0.000198 0 252 1 12 A1` -825 1175 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1175 (DrawString\(\)) 0 0.007584 257 0 11 A1` O1` $7 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 22 10 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31222 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (Uncouple\(W\) : W ) 0.015457 0 379 3 15 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -596 -1275 (\321) 0 0 46 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AD /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -550 -1275 ( ) 0.015457 0 13 1 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-Oblique /AE /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -537 -1275 (uncouple window) 0.015457 0 352 1 14 A1` /AC 220 220 w1` -825 -1191 (Uncouple\(\)) 0 0 224 0 9 A1` /AA 220 220 w1` -601 -1191 ( frees the window ) -2.150528 0 367 4 17 A1` /AC 220 220 w1` -234 -1191 (W) 0 0 43 0 0 A1` /AA 220 220 w1` -191 -1191 (. If no other bindings to the same canvas exist, the window) -2.150558 0 1166 11 58 A1` -825 -1137 (is closed.) -0.008545 0 184 1 9 A1` -825 -1057 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1057 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -365 -1057 (, ) -0.006378 0 23 1 1 A1` /AC 220 220 w1` -342 -1057 (Couple\(\)) 0 0 176 0 7 A1` /AA 220 220 w1` -167 -1057 (, and ) -0.006378 0 112 2 5 A1` /AC 220 220 w1` -55 -1057 (WClose\(\)) 0 0 191 0 7 A1` 0 0 0 1 (Black) 1 T a` 4 975 -992 -975 -992 F jbd^ /AB 220 220 w1` -975 -919 (WAttrib\(W, s1, s2, \311, sn\) : a1, a2, \311, an ) 0.002579 0 874 10 41 A1` /AC 220 220 w1` -101 -919 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -56 -919 ( ) 0.002594 0 13 1 0 A1` /AE 220 220 w1` -43 -919 (set or query attributes) 0.002579 0 443 3 22 A1` /AC 220 220 w1` -825 -835 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -644 -835 ( sets and generates window attribute values. Each string of the form ) 0.388916 0 1394 12 68 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Italic /AF /|______Palatino-Italic T /Palatino-Italic x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 750 -835 (name) 0 0 99 0 3 A1` /AC 220 220 w1` 849 -835 (=) 0 0 27 0 0 A1` /AF 220 220 w1` 876 -835 (value) 0 0 99 0 4 A1` /AA 220 220 w1` -825 -781 (sets a value; a string with just a name is an inquiry. First, any requested values are set.) 3.416809 0 1800 17 90 A1` /AC 220 220 w1` -825 -727 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -644 -727 ( fails if an attempt is made to set an invalid ) -3.675385 0 841 11 46 A1` /AC 220 220 w1` 197 -727 (font) 0 0 76 0 3 A1` /AA 220 220 w1` 274 -727 (, ) -3.675842 0 19 1 1 A1` /AC 220 220 w1` 293 -727 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` 331 -727 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 342 -727 ( bg) -4.084152 0 60 1 2 A1` /AA 220 220 w1` 402 -727 (, or ) -3.675339 0 70 2 4 A1` /AC 220 220 w1` 472 -727 (pattern) 0 0 143 0 6 A1` /AA 220 220 w1` 615 -727 (; any other invalid) -3.675507 0 360 3 18 A1` -825 -673 (value, or an invalid name, produces a run-time error. Then, ) -1.362442 0 1201 10 59 A1` /AC 220 220 w1` 376 -673 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` 556 -673 ( generates the values) -1.362488 0 419 3 20 A1` -825 -619 (of all referenced attributes. Each value has the data type appropriate to the attribute it) 4.529419 0 1800 14 89 A1` -825 -564 (represents.) 0 -0.009933 221 0 10 A1` 0 0 0 1 (Black) 1 T a` 4 975 -499 -975 -499 F jbd^ /AB 220 220 w1` -975 -426 (WClose\(W\) : W ) 0.012207 0 339 3 13 A1` /AC 220 220 w1` -636 -426 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -591 -426 ( ) 0.012207 0 13 1 0 A1` /AE 220 220 w1` -578 -426 (close window) 0.012207 0 272 1 11 A1` /AC 220 220 w1` -825 -342 (WClose\(\) ) 3.737167 0 207 1 8 A1` /AA 220 220 w1` -617 -342 (closes a window. The window disappears from the screen, but it may still be) 3.362961 0 1592 13 74 A1` -825 -288 (referenced if there are other existing bindings. Closing the subject window sets ) -3.24231 0 1568 12 80 A1` /AC 220 220 w1` 743 -288 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` 927 -288 ( to) -3.242142 0 48 1 2 A1` -825 -234 (the null value.) -0.03154 0 291 2 14 A1` -825 -155 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 -155 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 -75 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -75 (close\(\)) 0 0 137 0 6 A1` /AA 220 220 w1` -378 -75 (, ) -0.056046 0 23 1 1 A1` /AC 220 220 w1` -355 -75 (Uncouple\(\)) 0 0 224 0 9 A1` /AA 220 220 w1` -131 -75 (, ) -0.056046 0 23 1 1 A1` /AC 220 220 w1` -108 -75 (WFlush\(\)) 0 0 186 0 7 A1` /AA 220 220 w1` 78 -75 (, and ) -0.056046 0 112 2 5 A1` /AC 220 220 w1` 190 -75 (WOpen\(\)) 0 0 186 0 6 A1` 4 975 -10 -975 -10 F jbd^ /AB 220 220 w1` -975 63 (WDefault\(W, s1, s2\) : s3 ) 0.015823 0 530 5 24 A1` /AC 220 220 w1` -445 63 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -399 63 ( ) 0.015823 0 13 1 0 A1` /AE 220 220 w1` -387 63 (get default value from environment) 0.015823 0 7060m VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1U 4 33 A1` /AC 220 220 w1` -825 147 (WDefault\(\) ) -2.068802 0 230 1 10 A1` /AA 220 220 w1` -595 147 (returns the value of option ) -1.861496 0 543 5 27 A1` /AC 220 220 w1` -52 147 (s2 ) -2.068802 0 59 1 2 A1` /AA 220 220 w1` 7 147 (for the program named ) -1.861496 0 478 4 21 A1` /AC 220 220 w1` 485 147 (s1 ) -2.068802 0 59 1 2 A1` /AA 220 220 w1` 544 147 (as registered with the) -1.861496 0 431 3 21 A1` -825 201 (graphics system. If no such value is available, or if the system provides no registry,) 8.70311 0 1800 14 85 A1` /AC 220 220 w1` -825 255 (WDefault\(\)) 0 0 219 0 9 A1` /AA 220 220 w1` -606 255 ( fails.) 0.045578 0 107 1 6 A1` 4 975 320 -975 320 F jbd^ /AB 220 220 w1` -975 393 (WDelay\(W, i\) : W ) -0.010727 0 374 4 16 A1` /AC 220 220 w1` -601 393 (\321) 0 0 46 0 0 A1` /AE 220 220 w1` -555 393 ( flush window and delay) -0.010727 0 487 4 22 A1` /AC 220 220 w1` -825 477 (WDelay\(\)) 0 0 191 0 7 A1` /AA 220 220 w1` -634 477 ( flushes any pending output for window ) 3.116821 0 856 7 38 A1` /AC 220 220 w1` 222 477 (W) 0 0 43 0 0 A1` /AA 220 220 w1` 265 477 ( and then delays for ) 3.11676 0 430 5 20 A1` /AC 220 220 w1` 696 477 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 706 477 ( milliseconds) 3.116638 0 269 1 12 A1` -825 532 (before returning.) 0.037842 0 344 1 16 A1` -825 611 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 611 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 690 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 690 (delay\(\) ) -0.016922 0 153 1 7 A1` /AA 220 220 w1` -363 690 (and ) -0.015228 0 89 1 3 A1` /AC 220 220 w1` -274 690 (WFlush\(\)) 0 0 186 0 7 A1` 4 975 755 -975 755 F jbd^ /AB 220 220 w1` -975 828 (WFlush\(W\) : W ) 0.003311 0 336 3 13 A1` /AC 220 220 w1` -639 828 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -593 828 ( ) 0.003311 0 13 1 0 A1` /AE 220 220 w1` -580 828 (flush pending output to window) 0.003311 0 629 4 29 A1` /AC 220 220 w1` -825 912 (WFlush\(\) ) 0.237289 0 199 1 8 A1` /AA 220 220 w1` -626 912 (forces the output of any window commands that have been buffered internally) 0.213501 0 1601 11 74 A1` -825 966 (and not yet executed.) 0.002167 0 433 3 20 A1` -825 1046 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1046 (flush\(\)) 0 0 127 0 6 A1` /AA 220 220 w1` -388 1046 (, ) -0.009659 0 23 1 1 A1` /AC 220 220 w1` -365 1046 (WClose\(\)) 0 0 191 0 7 A1` /AA 220 220 w1` -174 1046 (, ) -0.009659 0 23 1 1 A1` /AC 220 220 w1` -151 1046 (WDelay\(\)) 0 0 191 0 7 A1` /AA 220 220 w1` 39 1046 (, and ) -0.009659 0 112 2 5 A1` /AC 220 220 w1` 151 1046 (WSync\(\)) 0 0 176 0 6 A1` O1` $7 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 23 11 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31223 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (WOpen\(W, s1, s2, \311, sn\) : W ) -0.015945 0 634 7 27 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -341 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -295 -1275 ( ) -0.015945 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -282 -1275 (open and return window) -0.015945 0 489 3 21 A1` /AC 220 220 w1` -825 -1191 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` -639 -1191 ( creates and returns a new window having the attributes specified by the argument) -5.395844 0 1614 13 80 A1` -825 -1137 (list. Invalid arguments produce failure or error as in ) -1.168869 0 1056 9 54 A1` /AC 220 220 w1` 231 -1137 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` 412 -1137 (. If ) -1.168839 0 63 2 4 A1` /AC 220 220 w1` 475 -1137 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` 658 -1137 ( is null, the new) -1.168839 0 317 4 16 A1` -825 -1082 (window is assigned as the subject window.) -0.008209 0 875 6 40 A1` -825 -1003 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 -1003 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 -924 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -924 (open\(\)) 0 0 132 0 5 A1` /AA 220 220 w1` -383 -924 (, ) 0.024551 0 23 1 1 A1` /AC 220 220 w1` -360 -924 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -179 -924 (, and ) 0.024551 0 112 2 5 A1` /AC 220 220 w1` -67 -924 (WClose\(\)) 0 0 191 0 7 A1` 0 0 0 1 (Black) 1 T a` 4 975 -859 -975 -859 F jbd^ /AB 220 220 w1` -975 -786 (WRead\(W\) : s ) 0.007843 0 308 3 12 A1` /AC 220 220 w1` -667 -786 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -621 -786 ( ) 0.007843 0 13 1 0 A1` /AD 220 220 w1` -608 -786 (read line from window) 0.007843 0 446 3 20 A1` /AC 220 220 w1` -825 -702 (WRead\(\)) 0 0 183 0 6 A1` /AA 220 220 w1` -642 -702 ( accumulates characters typed in a window until a newline or return is entered,) 0.791092 0 1617 13 78 A1` -825 -648 (then returns the resulting string \(without the newline or return\). Backspace and delete) 4.596176 0 1800 12 86 A1` -825 -594 (characters may be used for editing. The typed characters are displayed in the window if the) -3.535065 0 1800 15 90 A1` /AC 220 220 w1` -825 -539 (echo) 0 0 99 0 3 A1` /AA 220 220 w1` -726 -539 ( attribute is set.) 0.023331 0 309 3 17 A1` -825 -460 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 -460 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 -381 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -381 (read\(\)) 0 0 122 0 5 A1` /AA 220 220 w1` -393 -381 (, ) -0.033096 0 23 1 1 A1` /AC 220 220 w1` -370 -381 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -223 -381 (, and ) -0.033096 0 112 2 5 A1` /AC 220 220 w1` -111 -381 (WReads\(\)) 0 0 206 0 7 A1` 4 975 -316 -975 -316 F jbd^ /AB 220 220 w1` -975 -243 (WReads\(W, i\) : s ) -0.001526 0 372 4 16 A1` /AC 220 220 w1` -603 -243 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -557 -243 ( ) -0.001526 0 13 1 0 A1` /AD 220 220 w1` -545 -243 (read characters from window) -0.001526 0 588 3 26 A1` /AC 220 220 w1` -825 -159 (WReads\(\)) 0 0 206 0 7 A1` /AA 220 220 w1` -619 -159 ( returns the next ) -3.464371 0 330 4 17 A1` /AC 220 220 w1` -289 -159 (i) 0 0 10 0 0 A1` /AA 220 220 w1` -279 -159 ( characters typed in a window. Backspace and delete characters) -3.464355 0 1254 9 61 A1` -825 -105 (may be used for editing prior to entry of character ) -1.221695 0 1014 10 51 A1` /AC 220 220 w1` 189 -105 (i) 0 0 10 0 0 A1` /AA 220 220 w1` 199 -105 (. The typed characters are displayed in) -1.221695 0 776 6 38 A1` -825 -50 (the window if the ) 0.005173 0 371 4 17 A1` /AC 220 220 w1` -454 -50 (echo) 0 0 99 0 3 A1` /AA 220 220 w1` -355 -50 ( attribute is set.) 0.005173 0 309 3 17 A1` -825 29 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 29 (i) 0 0 10 0 0 A1` /AA 220 220 w1` -300 29 (1) 0 0 23 0 0 A1` -825 108 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 108 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 187 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 187 (reads\(\)) 0 0 145 0 6 A1` /AA 220 220 w1` -370 187 (, ) -0.033096 0 23 1 1 A1` /AC 220 220 w1` -347 187 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -200 187 (, and ) -0.033096 0 112 2 5 A1` /AC 220 220 w1` -88 187 (WRead\+2 VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1)(\)) 0 0 183 0 6 A1` 4 975 252 -975 252 F jbd^ /AB 220 220 w1` -975 325 (WriteImage\(W, s, x, y, w, h\) : W ) 0.00058 0 685 8 32 A1` /AC 220 220 w1` -290 325 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -244 325 ( ) 0.00058 0 13 1 0 A1` /AD 220 220 w1` -231 325 (write image to file) 0.00058 0 357 3 18 A1` /AC 220 220 w1` -825 409 (WriteImage\(\) ) -3.686295 0 274 1 12 A1` /AA 220 220 w1` -551 409 (writes an image of the rectangular area \() -3.317307 0 794 7 40 A1` /AC 220 220 w1` 243 409 (x) 0 0 23 0 0 A1` /AA 220 220 w1` 266 409 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 277 409 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 300 409 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 312 409 (w) 0 0 33 0 0 A1` /AA 220 220 w1` 345 409 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 356 409 (h) 0 0 25 0 0 A1` /AA 220 220 w1` 382 409 (\) to the file ) -3.317307 0 215 4 13 A1` /AC 220 220 w1` 597 409 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 620 409 (. It fails if ) -3.317307 0 187 4 13 A1` /AC 220 220 w1` 807 409 (s) 0 0 23 0 0 A1` /AA 220 220 w1` 830 409 ( cannot) -3.317322 0 145 1 6 A1` -825 464 (be written. The file is normally written in GIF format, but some forms of file names may) 1.319733 0 1800 16 87 A1` -825 518 (select different formats on some graphics systems.) -0.010101 0 1017 6 49 A1` -825 597 (Defaults:) 0 0.010529 182 0 8 A1` /AC 220 220 w1` -516 597 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -493 597 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -470 597 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -300 597 (0, 0) 0 0 69 1 3 A1` /AC 220 220 w1` -516 651 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -482 651 (, ) -0.048019 0 23 1 1 A1` /AC 220 220 w1` -460 651 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -300 651 (to edge of window) -0.01532 0 381 3 16 A1` -825 730 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 730 (ReadImage\(\)) 0 0.001953 267 0 10 A1` 4 975 795 -975 795 F jbd^ /AB 220 220 w1` -975 868 (WSync\(W\) : W ) 0.011795 0 323 3 12 A1` /AC 220 220 w1` -652 868 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -606 868 ( ) 0.011795 0 13 1 0 A1` /AD 220 220 w1` -593 868 (synchronize with server) 0.011795 0 479 2 22 A1` /AC 220 220 w1` -825 952 (WSync\(\)) 0 0 176 0 6 A1` /AA 220 220 w1` -649 952 ( synchronizes the program with the graphics server on a client-server graphics) 3.19928 0 1624 11 77 A1` -825 1007 (system, returning after all pending output has been processed. On systems that maintain) 0.282623 0 1800 12 86 A1` -825 1061 (synchronization at all times, ) -0.004364 0 582 4 29 A1` /AC 220 220 w1` -242 1061 (WSync\(\)) 0 0 176 0 6 A1` /AA 220 220 w1` -67 1061 ( has no effect.) -0.004364 0 276 3 14 A1` -825 1140 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1140 (WFlush\(\)) 0 -0.00412 186 0 7 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 24 12 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31224 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (WWrite\(W, s1, s2, \311, sn\) : sn ) 0.001221 0 642 7 29 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -333 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -287 -1275 ( ) 0.001221 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -275 -1275 (write line to window) 0.001221 0 397 3 19 A1` /AC 220 220 w1` -825 -1191 (WWrite\(\) ) -4.369705 0 189 1 8 A1` /AA 220 220 w1` -636 -1191 (writes a string to a window at the text cursor position. The area behind the written) -3.931534 0 1611 15 83 A1` -825 -1137 (text is set to the background color. Newline, return, tab, backspace, and delete characters) 0.210953 0 1800 13 90 A1` -825 -1082 (reposition the cursor. A implicit newline is output following the last argument.) -0.005692 0 1600 11 79 A1` -825 -1003 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 -1003 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 -924 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -924 (write\(\)) 0 0 127 0 6 A1` /AA 220 220 w1` -388 -924 (, ) 0.026672 0 23 1 1 A1` /AC 220 220 w1` -365 -924 (DrawString\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` -108 -924 (, and) 0.026672 0 101 1 4 A1` /AC 220 220 w1` -8 -924 ( WWrites\(\)) 0.029648 0 216 1 9 A1` 0 0 0 1 (Black) 1 T a` 4 975 -859 -975 -859 F jbd^ /AB 220 220 w1` -975 -786 (WWrites\(W, s1, s2, \311, sn\) : sn ) 0.006744 0 667 7 30 A1` /AC 220 220 w1` -308 -786 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -262 -786 ( ) 0.006744 0 13 1 0 A1` /AD 220 220 w1` -249 -786 (write partial line to window) 0.006744 0 535 4 27 A1` /AC 220 220 w1` -825 -702 (WWrite\(\)) 0 0 181 0 7 A1` /AA 220 220 w1` -644 -702 ( writes a string to a window at the text cursor position. The area behind the written) -3.879196 0 1619 16 84 A1` -825 -648 (text is set to the background color. Newline, return, tab, backspace, and delete characters) 0.210953 0 1800 13 90 A1` -825 -594 (reposition the cursor. Unlike ) -0.030319 0 591 4 29 A1` /AC 220 220 w1` -234 -594 (WWrite\(\)) 0 0 181 0 7 A1` /AA 220 220 w1` -53 -594 (, no newline is added.) -0.030319 0 444 4 21 A1` -825 -514 (Link:) 0 0.009964 105 0 4 A1` /AC 220 220 w1` -516 -514 (wopen) 0 -0.015152 135 0 4 A1` /AA 220 220 w1` -825 -435 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -435 (writes\(\)) 0 0 150 0 7 A1` /AA 220 220 w1` -365 -435 (, ) -0.033234 0 23 1 1 A1` /AC 220 220 w1` -342 -435 (DrawString\(\)) 0 0 257 0 11 A1` /AA 220 220 w1` -85 -435 (, and ) -0.033234 0 112 2 5 A1` /AC 220 220 w1` 27 -435 (WWrite\(\)) 0 0 181 0 7 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 25 13 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31225 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1267 (Appendix B) 0.021164 0 426 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1023 (Graphics Keywords) 0.100098 0 861 1 16 A1` 0 0 0 1 (Black) 1 T a` 4 975 -835 -975 -835 F jbd^ $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Bold /AD /|______Helvetica-Bold T /Helvetica-Bold x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -762 (&col : i ) -0.010818 0 165 3 8 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica /AE /|______Helvetica T /Helvetica x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -810 -762 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -764 -762 ( ) -0.010818 0 13 1 0 A1` /AB 220 220 w1` -751 -762 (mouse column) -0.010818 0 298 1 11 A1` /AA 220 2g0 VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1#&820 w1` -825 -677 (The value of ) -5.415207 0 247 3 12 A1` /AE 220 220 w1` -578 -677 (&col) 0 0 89 0 3 A1` /AA 220 220 w1` -489 -677 ( is normally the column location of the mouse at the time of the last received) -5.415009 0 1464 15 77 A1` -825 -623 (window event. If a window is open, ) -0.775208 0 736 7 34 A1` /AE 220 220 w1` -89 -623 (&col ) -0.861557 0 101 1 4 A1` /AA 220 220 w1` 12 -623 (may also be changed by assignment, which also) -0.775208 0 963 7 44 A1` -825 -569 (affects ) 0.01001 0 142 1 7 A1` /AE 220 220 w1` -683 -569 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` -630 -569 (, or as a side effect of assignment to ) 0.01001 0 727 9 38 A1` /AE 220 220 w1` 97 -569 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` 151 -569 (.) 0 0 11 0 0 A1` 0 0 0 1 (Black) 1 T a` 4 975 -504 -975 -504 F jbd^ /AD 220 220 w1` -975 -431 (&control : n ) -0.016556 0 270 3 12 A1` /AE 220 220 w1` -705 -431 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -659 -431 ( ) -0.016556 0 13 1 0 A1` /AB 220 220 w1` -647 -431 (state of control key during window event) -0.016556 0 815 6 39 A1` /AA 220 220 w1` -825 -347 (The value of ) -3.46347 0 253 3 12 A1` /AE 220 220 w1` -572 -347 (&control) 0 0 168 0 7 A1` /AA 220 220 w1` -404 -347 ( is the null value if the control key was depressed at the time of the last) -3.463379 0 1379 16 74 A1` -825 -293 (received window event; otherwise, a reference to ) 0.004883 0 1004 7 48 A1` /AE 220 220 w1` 179 -293 (&control) 0 0 168 0 7 A1` /AA 220 220 w1` 347 -293 ( fails.) 0.004883 0 107 1 6 A1` 4 975 -227 -975 -227 F jbd^ /AD 220 220 w1` -975 -155 (&interval : i ) 0.00737 0 262 3 13 A1` /AE 220 220 w1` -713 -155 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -667 -155 ( ) 0.00737 0 13 1 0 A1` /AB 220 220 w1` -654 -155 (elapsed time between window events) 0.00737 0 759 4 33 A1` /AA 220 220 w1` -825 -70 (The value of ) -2.131454 0 257 3 12 A1` /AE 220 220 w1` -568 -70 (&interval) 0 0 178 0 8 A1` /AA 220 220 w1` -390 -70 ( is the time, in milliseconds, between the last received window event) -2.131546 0 1365 11 68 A1` -825 -16 (and the previous event in that window. ) -2.701035 0 793 7 38 A1` /AE 220 220 w1` -32 -16 (&interval) 0 0 178 0 8 A1` /AA 220 220 w1` 147 -16 ( is zero if this information is not available.) -2.701111 0 828 8 45 A1` 4 975 49 -975 49 F jbd^ /AD 220 220 w1` -975 122 (&ldrag : i ) -0.026581 0 211 3 10 A1` /AE 220 220 w1` -764 122 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -718 122 ( left-button drag event) -0.026581 0 446 3 22 A1` /AA 220 220 w1` -825 206 (The value of ) -1.788162 0 258 3 12 A1` /AE 220 220 w1` -567 206 (&ldrag) 0 0 132 0 5 A1` /AA 220 220 w1` -435 206 ( is the integer that represents the event of dragging the mouse with the) -1.788162 0 1410 13 71 A1` -825 260 (left button depressed.) 0.000412 0 441 2 21 A1` 4 975 325 -975 325 F jbd^ /AD 220 220 w1` -975 398 (&lpress : i ) 0.009216 0 234 3 11 A1` /AE 220 220 w1` -741 398 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -695 398 ( ) 0.009216 0 13 1 0 A1` /AB 220 220 w1` -682 398 (left-button press event) 0.009216 0 454 2 22 A1` /AA 220 220 w1` -825 482 (The value of ) -5.637344 0 246 3 12 A1` /AE 220 220 w1` -579 482 (&lpress) 0 0 153 0 6 A1` /AA 220 220 w1` -426 482 ( is the integer that represents the event of pressing the left mouse button.) -5.637344 0 1401 13 75 A1` 4 975 548 -975 548 F jbd^ /AD 220 220 w1` -975 621 (&lrelease : i ) 0.008209 0 270 3 13 A1` /AE 220 220 w1` -705 621 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -659 621 ( left-button release event) 0.008209 0 505 3 25 A1` /AA 220 220 w1` -825 705 (The value of ) 1.18837 0 267 3 12 A1` /AE 220 220 w1` -558 705 (&lrelease) 0 0 191 0 8 A1` /AA 220 220 w1` -367 705 ( is the integer that represents the event of releasing the left mouse) 1.1884 0 1342 12 68 A1` -825 759 (button.) 0 -0.001221 146 0 6 A1` 4 975 824 -975 824 F jbd^ /AD 220 220 w1` -975 897 (&mdrag : i ) 0.004944 0 239 3 10 A1` /AE 220 220 w1` -736 897 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -690 897 ( ) 0.004944 0 13 1 0 A1` /AB 220 220 w1` -677 897 (middle-button drag event) 0.004944 0 507 2 23 A1` /AA 220 220 w1` -825 981 (The value of ) -3.537918 0 252 3 12 A1` /AE 220 220 w1` -572 981 (&mdrag) 0 0 160 0 5 A1` /AA 220 220 w1` -412 981 ( is the integer that represents the event of dragging the mouse with the) -3.537918 0 1387 13 71 A1` -825 1035 (middle button depressed.) 0.001221 0 520 2 23 A1` 4 975 1101 -975 1101 F jbd^ /AD 220 220 w1` -975 1174 (&meta : n ) -0.013351 0 221 3 9 A1` /AE 220 220 w1` -754 1174 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -708 1174 ( ) -0.013351 0 13 1 0 A1` /AB 220 220 w1` -695 1174 (state of meta key during window event) -0.013351 0 780 6 36 A1` /AA 220 220 w1` -825 1258 (The value of ) 0.686157 0 265 3 12 A1` /AE 220 220 w1` -560 1258 (&meta) 0 0 132 0 4 A1` /AA 220 220 w1` -427 1258 ( is the null value if the meta key was depressed at the time of the last) 0.686142 0 1402 16 71 A1` -825 1312 (received window event; otherwise, a reference to ) 0.01088 0 1005 7 48 A1` /AE 220 220 w1` 180 1312 (&meta) 0 0 132 0 4 A1` /AA 220 220 w1` 312 1312 ( fails.) 0.01088 0 107 1 6 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 26 14 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31226 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (&mpress : i ) 0.006027 0 262 3 11 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -713 -1275 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -667 -1275 ( ) 0.006042 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -654 -1275 (middle-button press event) 0.006027 0 527 2 24 A1` /AA 220 220 w1` -825 -1191 (The value of ) -2.684631 0 255 3 12 A1` /AC 220 220 w1` -570 -1191 (&mpress) 0 0 181 0 6 A1` /AA 220 220 w1` -389 -1191 ( is the integer that represents the event of pressing the middle mouse) -2.684677 0 1364 12 69 A1` -825 -1137 (button.) 0 -0.001221 146 0 6 A1` 0 0 0 1 (Black) 1 T a` 4 975 -1071 -975 -1071 F jbd^ /AB 220 220 w1` -975 -999 (&mrelease : i ) 0.00502 0 298 3 13 A1` /AC 220 220 w1` -677 -999 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -631 -999 ( ) 0.00502 0 13 1 0 A1` /AD 220 220 w1` -618 -999 (middle-button release event) 0.00502 0 566 2 26 A1` /AA 220 220 w1` -825 -914 (The value of ) 4.014587 0 275 3 12 A1` /AC 220 220 w1` -550 -914 (&mrelease) 0 0 219 0 8 A1` /AA 220 220 w1` -331 -914 ( is the integer that represents the event of releasing the middle) 4.01474 0 1306 11 64 A1` -825 -860 (mouse button.) 0.074875 0 292 1 12 A1` 4 975 -795 -975 -795 F jbd^ /AB 220 220 w1` -975 -722 (&rdrag : i ) 0.008682 0 216 3 10 A1` /AC 220 220 w1` -759 -722 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -713 -722 ( right-button drag event) 0.008682 0 474 3 23 A1` /AA 220 220 w1` -825 -638 (The value of ) -2.170273 0 257 3 12 A1` /AC 220 220 w1` -568 -638 (&rdrag ) -2.41214 0 148 1 6 A1` /AA 220 220 w1` -420 -638 (is the integer that represents the event of dragging the mouse with the) -2.170273 0 1395 12 70 A1` -825 -584 (right button d\ VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1*Gepressed.) 0.035599 0 474 2 22 A1` 4 975 -519 -975 -519 F jbd^ /AB 220 220 w1` -975 -446 (&resize : i ) -0.018036 0 229 3 11 A1` /AC 220 220 w1` -746 -446 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -700 -446 ( ) -0.018036 0 13 1 0 A1` /AD 220 220 w1` -687 -446 (window resize event) -0.018036 0 413 2 18 A1` /AA 220 220 w1` -825 -361 (The value of ) 0.013626 0 263 3 12 A1` /AC 220 220 w1` -562 -361 (&resize) 0 0 153 0 6 A1` /AA 220 220 w1` -409 -361 ( is the integer that represents a window resizing event.) 0.013626 0 1108 9 55 A1` 4 975 -296 -975 -296 F jbd^ /AB 220 220 w1` -975 -223 (&row : i ) -0.007935 0 181 3 8 A1` /AC 220 220 w1` -794 -223 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -748 -223 ( ) -0.007935 0 13 1 0 A1` /AD 220 220 w1` -736 -223 (mouse row location) -0.007935 0 395 2 17 A1` /AA 220 220 w1` -825 -139 (The value of) 4.031525 0 260 2 11 A1` /AC 220 220 w1` -565 -139 ( &row) 4.479935 0 122 1 4 A1` /AA 220 220 w1` -444 -139 ( is normally the column location of the mouse at the time of the last) 4.031525 0 1419 14 68 A1` -825 -85 (received window event. If a window is open, ) 1.441116 0 936 8 43 A1` /AC 220 220 w1` 111 -85 (&row) 0 0 104 0 3 A1` /AA 220 220 w1` 215 -85 ( may also be changed by assignment,) 1.441132 0 760 6 34 A1` -825 -31 (which also affects ) -0.002136 0 370 3 18 A1` /AC 220 220 w1` -455 -31 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` -401 -31 (, or as a side effect of assignment to ) -0.002136 0 727 9 38 A1` /AC 220 220 w1` 326 -31 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` 379 -31 (.) 0 0 11 0 0 A1` 4 975 34 -975 34 F jbd^ /AB 220 220 w1` -975 107 (&rpress : i ) -0.024948 0 239 3 11 A1` /AC 220 220 w1` -736 107 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -690 107 ( right-button press event) -0.024948 0 494 3 24 A1` /AA 220 220 w1` -825 191 (The value of ) 1.944778 0 269 3 12 A1` /AC 220 220 w1` -556 191 (&rpress) 0 0 158 0 6 A1` /AA 220 220 w1` -398 191 ( is the integer that represents the event of pressing the right mouse) 1.944809 0 1373 12 68 A1` -825 246 (button.) 0 -0.001221 146 0 6 A1` 4 975 311 -975 311 F jbd^ /AB 220 220 w1` -975 384 (&rrelease : i ) 0.008743 0 275 3 13 A1` /AC 220 220 w1` -700 384 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -654 384 ( right-button release event) 0.008743 0 532 3 26 A1` /AA 220 220 w1` -825 468 (The value of ) -1.353836 0 259 3 12 A1` /AC 220 220 w1` -566 468 (&rrelease) 0 0 196 0 8 A1` /AA 220 220 w1` -370 468 ( is the integer that represents the event of releasing the right mouse) -1.353867 0 1345 12 69 A1` -825 522 (button.) 0 -0.001221 146 0 6 A1` 4 975 587 -975 587 F jbd^ /AB 220 220 w1` -975 660 (&shift : n ) 0.003616 0 211 3 10 A1` /AC 220 220 w1` -764 660 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -718 660 ( state of shift key during window event) 0.003616 0 775 7 38 A1` /AA 220 220 w1` -825 744 (The value of ) 2.184402 0 270 3 12 A1` /AC 220 220 w1` -555 744 (&shift) 0 0 115 0 5 A1` /AA 220 220 w1` -441 744 ( is the null value if the shift key was depressed at the time of the last) 2.184357 0 1416 16 72 A1` -825 799 (received window event; otherwise, a reference to ) 0.00087 0 1004 7 48 A1` /AC 220 220 w1` 179 799 (&shift) 0 0 115 0 5 A1` /AA 220 220 w1` 294 799 ( fails.) 0.00087 0 107 1 6 A1` 4 975 864 -975 864 F jbd^ /AB 220 220 w1` -975 937 (&window : W ) 0.013504 0 298 3 11 A1` /AC 220 220 w1` -677 937 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -631 937 ( ) 0.013504 0 13 1 0 A1` /AD 220 220 w1` -619 937 (subject window) 0.013504 0 311 1 13 A1` /AA 220 220 w1` -825 1021 (The value of ) 8.615311 0 289 3 12 A1` /AC 220 220 w1` -536 1021 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` -353 1021 ( is the subject window, the default window for most graphics) 8.615082 0 1328 10 59 A1` -825 1075 (procedures. It may be changed by assignment. If there is no subject window, ) 0.819305 0 1571 13 75 A1` /AC 220 220 w1` 746 1075 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` 930 1075 ( is) 0.819275 0 45 1 2 A1` -825 1129 (null.) 0 0.012512 92 0 4 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 27 15 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31227 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 966 -1343 -984 -1343 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -984 -1270 (&x : i ) -0.008224 0 125 3 6 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -860 -1270 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -814 -1270 ( ) -0.008224 0 13 1 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -801 -1270 (mouse x-coordinate) -0.008224 0 402 1 17 A1` /AA 220 220 w1` -834 -1186 (The value of ) 0.558868 0 265 3 12 A1` /AC 220 220 w1` -570 -1186 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` -516 -1186 ( is normally the x-coordinate of the mouse at the time of the last received) 0.558884 0 1482 14 74 A1` -834 -1132 (window event. If a window is open, ) 1.68219 0 753 7 34 A1` /AC 220 220 w1` -81 -1132 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` -28 -1132 ( may also be changed by assignment, which also) 1.682251 0 994 8 45 A1` -834 -1078 (affects ) 0.000412 0 142 1 7 A1` /AC 220 220 w1` -693 -1078 (&col) 0 0 89 0 3 A1` /AA 220 220 w1` -604 -1078 (, or as a side effect of assignment to ) 0.000412 0 727 9 38 A1` /AC 220 220 w1` 123 -1078 (&col) 0 0 89 0 3 A1` /AA 220 220 w1` 212 -1078 (.) 0 0 11 0 0 A1` 0 0 0 1 (Black) 1 T a` 4 966 -1012 -984 -1012 F jbd^ /AB 220 220 w1` -984 -940 (&y : i ) -0.008224 0 125 3 6 A1` /AC 220 220 w1` -860 -940 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -814 -940 ( mouse y-coordinate) -0.008224 0 415 2 18 A1` /AA 220 220 w1` -834 -855 (The value of ) 0.373444 0 264 3 12 A1` /AC 220 220 w1` -570 -855 (&y ) 0.414993 0 67 1 2 A1` /AA 220 220 w1` -504 -855 (is normally the y-coordinate of the mouse at the time of the last received) 0.373444 0 1469 13 73 A1` -834 -801 (window event. If a window is open, ) 1.68219 0 753 7 34 A1` /AC 220 220 w1` -81 -801 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` -28 -801 ( may also be changed by assignment, which also) 1.682251 0 994 8 45 A1` -834 -747 (affects ) -0.012909 0 141 1 7 A1` /AC 220 220 w1` -693 -747 (&row) 0 0 104 0 3 A1` /AA 220 220 w1` -588 -747 (, or as a side effect of assignment to) -0.012909 0 715 8 37 A1` /AC 220 220 w1` 127 -747 ( &row) -0.014359 0 117 1 4 A1` /AA 220 220 w1` 244 -747 (.) 0 0 11 0 0 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 28 16 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31228 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1267 (Appendix C) 0.006516 0 431 1 9 A1` $3 tsi^ /$3 bmt^ v~ VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1hV%%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1023 (W) -0.001221 0 86 0 0 A1` -889 -1023 (indow ) -0.001221 0 290 1 5 A1` -602 -1023 (Attributes) -0.001221 0 433 0 9 A1` /AA 220 220 w1` -975 -300 (Window attributes describe and control various characteristics of a window. Some attributes are) 0.054245 0 1950 12 94 A1` -975 -246 (fixed and can only be read; others can be set only when the window is opened. Most can be changed) -4.313156 0 1950 19 96 A1` -975 -191 (at any time.) 0.048019 0 238 2 11 A1` -825 -112 (There are two classes of attributes: ) -4.447266 0 682 6 36 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -143 -112 (canvas attributes) -4.447113 0 312 1 16 A1` /AA 220 220 w1` 169 -112 ( and ) -4.447113 0 92 2 4 A1` /AD 220 220 w1` 260 -112 (graphics context attributes) -4.447113 0 485 2 26 A1` /AA 220 220 w1` 745 -112 (. In general,) -4.447113 0 230 2 12 A1` -975 -58 (canvas attributes relate to aspects of the window itself, while graphics context attributes affect) 3.63588 0 1950 13 97 A1` -975 -4 (drawing operations. Alternate graphics contexts, each with its own set of graphics context) 10.820419 0 1950 12 89 A1` -975 50 (attributes, are created by ) -4.448746 0 495 4 26 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica /AE /|______Helvetica T /Helvetica x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -480 50 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -330 50 (. Canvas attributes, however, are shared by all clones of a window.) -4.448837 0 1305 11 66 A1` -825 129 (Initial attribute settings can be passed as arguments to ) -5.592239 0 1060 9 56 A1` /AE 220 220 w1` 235 129 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` 420 129 ( or ) -5.592117 0 55 2 3 A1` /AE 220 220 w1` 475 129 (Window\(\)) 0 0 194 0 7 A1` /AA 220 220 w1` 669 129 (. For an existing) -5.592117 0 306 3 16 A1` -975 184 (window, attributes are read or written by calling ) 6.619202 0 1051 8 49 A1` /AE 220 220 w1` 76 184 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` 256 184 (. Specific procedures also exist for) 6.619141 0 719 5 35 A1` -975 238 (reading or writing certain attributes; these are noted in the ) 5.803802 0 1254 10 61 A1` /AD 220 220 w1` 279 238 (See also) 5.803665 0 150 1 7 A1` /AA 220 220 w1` 429 238 ( sections of the individual) 5.803665 0 546 4 26 A1` -975 292 (attribute descriptions.) 0.011795 0 445 1 22 A1` -825 371 (In the tables that follow, the letter R indicates attributes that can be read by ) -4.355301 0 1464 15 80 A1` /AE 220 220 w1` 639 371 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` 820 371 ( and the) -4.355225 0 155 2 7 A1` -975 425 (letter W indicates attributes that can be written \321 either initially or by calling ) -0.624985 0 1571 14 82 A1` /AE 220 220 w1` 596 425 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` 777 425 (. Writable) -0.624969 0 198 1 9 A1` -975 479 (graphics context attributes can also be set by ) -0.021164 0 912 8 46 A1` /AE 220 220 w1` -63 479 (Clone\() 0 0 135 0 5 A1` /AA 220 220 w1` 72 479 (\).) 0 0 27 0 1 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 29 17 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31229 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1314 (Canvas ) -0.082397 0 208 1 6 A1` -769 -1314 (Attributes) -0.082397 0 256 0 9 A1` /AA 220 220 w1` -825 -1210 (The following attributes are associated with a canvas and shared by all windows that) 5.845306 0 1800 13 83 A1` -975 -1156 (reference that canvas.) -0.007523 0 438 2 21 A1` -919 -1010 (Usage) 0 -0.005188 125 0 4 A1` -684 -1010 (Window Attribute) -0.022781 0 375 1 15 A1` -178 -1010 (Interpretation) 0 -0.006668 282 0 13 A1` -919 -907 (R,) 0 0.009766 42 0 1 A1` -825 -907 (W) 0 0 46 0 0 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -684 -907 (label) 0 0.009659 97 0 4 A1` /AA 220 220 w1` -178 -907 (window label \(title\)) -0.011398 0 398 2 19 A1` -919 -841 (R,) 0 0.009766 42 0 1 A1` -825 -841 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -841 (pos) 0 0 74 0 2 A1` /AA 220 220 w1` -610 -841 (, ) 0.091553 0 23 1 1 A1` /AC 220 220 w1` -587 -841 (posx) 0 0 97 0 3 A1` /AA 220 220 w1` -491 -841 (, ) 0.091553 0 23 1 1 A1` /AC 220 220 w1` -468 -841 (posy) 0 0 97 0 3 A1` /AA 220 220 w1` -178 -841 (window position on screen) 0.015457 0 549 3 24 A1` -919 -774 (R,) 0 0.009766 42 0 1 A1` -825 -774 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -774 (size) 0 0 81 0 3 A1` /AA 220 220 w1` -603 -774 (, ) -0.023804 0 23 1 1 A1` /AC 220 220 w1` -580 -774 (height) 0 0 125 0 5 A1` /AA 220 220 w1` -455 -774 (, ) -0.023804 0 23 1 1 A1` /AC 220 220 w1` -432 -774 (width) 0 0 107 0 4 A1` /AA 220 220 w1` -178 -774 (window size, in pixels) 0.022644 0 452 3 21 A1` -919 -708 (R,) 0 0.009766 42 0 1 A1` -825 -708 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -708 (lines) 0 0 94 0 4 A1` /AA 220 220 w1` -590 -708 (, ) -0.137527 0 23 1 1 A1` /AC 220 220 w1` -567 -708 (columns) 0 0 171 0 6 A1` /AA 220 220 w1` -178 -708 (window size, in characters) 0.017227 0 539 3 25 A1` -825 -642 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -642 (image) 0 -0.010376 125 0 4 A1` /AA 220 220 w1` -178 -642 (initial canvas contents) -0.010178 0 449 2 22 A1` -919 -539 (R,) 0 0.009766 42 0 1 A1` -825 -539 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -539 (canvas) 0 -0.002518 145 0 5 A1` /AA 220 220 w1` -178 -539 (window visibility state) -0.011597 0 464 2 22 A1` -825 -472 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -472 (iconpos) 0 -0.010101 158 0 6 A1` /AA 220 220 w1` -178 -472 (icon position) -0.070801 0 262 1 12 A1` -919 -406 (R,) 0 0.009766 42 0 1 A1` -825 -406 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -406 (iconlabel) 0 -0.010376 181 0 8 A1` /AA 220 220 w1` -178 -406 (icon label) 0.010178 0 194 1 9 A1` -919 -340 (R,) 0 0.009766 42 0 1 A1` -825 -340 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -340 (iconimage) 0 0.005646 209 0 8 A1` /AA 220 220 w1` -178 -340 (icon image) 0.043533 0 221 1 9 A1` -919 -236 (R,) 0 0.009766 42 0 1 A1` -825 -236 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -236 (echo) 0 -0.004196 99 0 3 A1` /AA 220 220 w1` -178 -236 (character echoing flag) 0.04985 0 446 2 21 A1` -919 -170 (R,) 0 0.009766 42 0 1 A1` -825 -170 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -170 (cursor) 0 -0.009598 127 0 5 A1` /AA 220 220 w1` -178 -170 (text cursor visibility flag) -0.000534 0 493 3 26 A1` -919 -104 (R,) 0 0.009766 42 0 1 A1` -825 -104 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -104 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -661 -104 (, ) 0 0 23 1 1 A1` /AC 220 220 w1` -639 -104 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -178 -104 (cursor location, in pixels) 0.022507 0 495 3 25 A1` -919 -38 (R,) 0 0.009766 42 0 1 A1` -825 -38 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 -38 (row) 0 0 74 0 2 A1` /AA 220 220 w1` -611 -38 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -599 -38 ( col) -0.176178 0 71 1 3 A1` /AA 220 220 w1` -178 -38 (cursor location, in characters) 0.01709 0 582 3 29 A1` -919 66B VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1pe (R,) 0 0.009766 42 0 1 A1` -825 66 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 66 (pointer) 0 0.011261 140 0 6 A1` /AA 220 220 w1` -178 66 (pointer \(mouse\) shape) -0.050247 0 454 2 20 A1` -919 132 (R,) 0 0.009766 42 0 1 A1` -825 132 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 132 (pointerx) 0 0 163 0 7 A1` /AA 220 220 w1` -521 132 (, ) 0.135086 0 23 1 1 A1` /AC 220 220 w1` -498 132 (pointery) 0 0 163 0 7 A1` /AA 220 220 w1` -178 132 (pointer location, in pixels) 0.023468 0 514 3 26 A1` -919 198 (R) 0 0 31 0 0 A1` /AC 220 220 w1` -684 198 (pointerrow) 0 0 214 0 9 A1` /AA 220 220 w1` -470 198 (, ) -0.015457 0 23 1 1 A1` /AC 220 220 w1` -447 198 (pointercol) 0 0 199 0 9 A1` /AA 220 220 w1` -178 198 (pointer location, in characters) 0.018036 0 601 3 30 A1` -919 301 (R,) 0 0.009766 42 0 1 A1` -825 301 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -684 301 (display) 0 0.006439 143 0 6 A1` /AA 220 220 w1` -178 301 (device on which the window appears) -0.007492 0 759 5 33 A1` -919 368 (R) 0 0 31 0 0 A1` /AC 220 220 w1` -684 368 (depth) 0 0.024109 115 0 4 A1` /AA 220 220 w1` -178 368 (display depth, in bits) 0.00882 0 428 3 21 A1` -919 434 (R) 0 0 31 0 0 A1` /AC 220 220 w1` -684 434 (displayheight) 0 -0.003967 267 0 12 A1` /AA 220 220 w1` -178 434 (display height, in pixels) -0.02739 0 484 3 24 A1` -919 500 (R) 0 0 31 0 0 A1` /AC 220 220 w1` -684 500 (displaywidth) 0 -0.007538 250 0 11 A1` /AA 220 220 w1` -178 500 (display width, in pixels) -0.032959 0 476 3 23 A1` O1` null null F b` 0 0 0 1 (Black) 1 T a` 4 -975 -1075 600 537 F bh^ 4 -729 537 -729 -1075 F jbd^ 4 -221 537 -221 -1075 F jbd^ 4 600 -979 -975 -979 F jbd^ 4 600 -612 -975 -612 F jbd^ 4 600 -310 -975 -310 F jbd^ 4 600 230 -975 230 F jbd^ 4 600 -6 -975 -6 F jbd^ $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 30 18 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31230 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1314 ( Graphics Context ) 0.001175 0 497 4 18 A1` -480 -1314 (Attributes) 0.001175 0 256 0 9 A1` /AA 220 220 w1` -825 -1210 (The following attributes are associated with a graphics context.) 0.002701 0 1278 8 63 A1` -844 -1064 (Usage) 0 -0.005188 125 0 4 A1` -628 -1064 (Graphics Attribute) -0.016678 0 382 1 17 A1` -141 -1064 (Interpretation) 0 -0.006668 282 0 13 A1` -844 -961 (R,) 0 0.009766 42 0 1 A1` -750 -961 (W) 0 0 46 0 0 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -628 -961 (fg) 0 -0.099289 38 0 1 A1` /AA 220 220 w1` -141 -961 (foreground color) 0.027664 0 345 1 15 A1` -844 -895 (R,) 0 0.009766 42 0 1 A1` -750 -895 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -895 (bg) 0 0.061035 51 0 1 A1` /AA 220 220 w1` -141 -895 (background color) 0.014236 0 358 1 15 A1` -844 -829 (R,) 0 0.009766 42 0 1 A1` -750 -829 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -829 (reverse) 0 0.01445 153 0 6 A1` /AA 220 220 w1` -141 -829 (color reversal flag) 0.048828 0 364 2 18 A1` -844 -762 (R,) 0 0.009766 42 0 1 A1` -750 -762 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -762 (drawop) 0 0.018631 150 0 5 A1` /AA 220 220 w1` -141 -762 (drawing operation) 0.055344 0 380 1 16 A1` -844 -696 (R,) 0 0.009766 42 0 1 A1` -750 -696 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -696 (gamma) 0 0.021667 153 0 4 A1` /AA 220 220 w1` -141 -696 (color correction factor) 0.005905 0 445 2 22 A1` -844 -593 (R,) 0 0.009766 42 0 1 A1` -750 -593 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -593 (font) 0 0.00325 76 0 3 A1` /AA 220 220 w1` -141 -593 (text font) 0.082199 0 169 1 8 A1` -844 -526 (R) 0 0 31 0 0 A1` /AC 220 220 w1` -628 -526 (fheight,) 0 0 150 0 7 A1` /AA 220 220 w1` -478 -526 ( ) 0.131836 0 12 1 0 A1` /AC 220 220 w1` -466 -526 (fwidth) 0 0 120 0 5 A1` /AA 220 220 w1` -141 -526 (maximum character size) 0.018311 0 496 2 21 A1` -844 -460 (R) 0 0 31 0 0 A1` /AC 220 220 w1` -628 -460 (ascent) 0 0 135 0 5 A1` /AA 220 220 w1` -493 -460 (, ) 0.058182 0 23 1 1 A1` /AC 220 220 w1` -470 -460 (descent) 0 0 161 0 6 A1` /AA 220 220 w1` -141 -460 (dimensions from baseline) 0.000412 0 521 2 23 A1` -844 -394 (R,) 0 0.009766 42 0 1 A1` -750 -394 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -394 (leading) 0 0.016617 148 0 6 A1` /AA 220 220 w1` -141 -394 (vertical advancement) -0.036209 0 435 1 19 A1` -844 -291 (R,) 0 0.009766 42 0 1 A1` -750 -291 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -291 (linewidth) 0 -0.001175 178 0 8 A1` /AA 220 220 w1` -141 -291 (line width) -0.03418 0 208 1 9 A1` -844 -224 (R,) 0 0.009766 42 0 1 A1` -750 -224 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -224 (linestyle) 0 0.004837 166 0 8 A1` /AA 220 220 w1` -141 -224 (line style) -0.048416 0 182 1 9 A1` -844 -158 (R,) 0 0.009766 42 0 1 A1` -750 -158 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -158 (fillstyle) 0 -0.002792 137 0 8 A1` /AA 220 220 w1` -141 -158 (fill style) -0.018723 0 162 1 9 A1` -844 -92 (R,) 0 0.009766 42 0 1 A1` -750 -92 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 -92 (pattern) 0 0.002716 143 0 6 A1` /AA 220 220 w1` -141 -92 (fill pattern) -0.08667 0 214 1 11 A1` -844 11 (R,) 0 0.009766 42 0 1 A1` -750 11 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 11 (clipx,) 0 0 104 0 5 A1` /AA 220 220 w1` -524 11 ( ) -0.070389 0 11 1 0 A1` /AC 220 220 w1` -512 11 (clipy) 0 0 92 0 4 A1` /AA 220 220 w1` -141 11 (clipping rectangle position) 0.040695 0 542 2 26 A1` -844 78 (R,) 0 0.009766 42 0 1 A1` -750 78 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 78 (clipw) 0 0 102 0 4 A1` /AA 220 220 w1` -526 78 (, ) -0.092773 0 23 1 1 A1` /AC 220 220 w1` -503 78 (cliph) 0 0 94 0 4 A1` /AA 220 220 w1` -141 78 (clipping rectangle extent) 0.004883 0 500 2 24 A1` -844 144 (R,) 0 0.009766 42 0 1 A1` -750 144 (W) 0 0 46 0 0 A1` /AC 220 220 w1` -628 144 (dx) 0 0 48 0 1 A1` /AA 220 220 w1` -580 144 (, ) -0.147293 0 23 1 1 A1` /AC 220 220 w1` -557 144 (dy) 0 0 48 0 1 A1` /AA 220 220 w1` -141 144 (output translation) -0.01709 0 367 1 17 A1` /AB 260 260 w1` -975 298 (Attribute Descriptions) -0.052902 0 569 1 21 A1` /AA 220 220 w1` -825 402 (A default value of \322none\323for an attribute means that an attempt to read the attribute fails) -0.208054 0 1800 15 90 A1` -975 456 (if no value has been assigned.) -0.011154 0 603 5 29 A1` 0 0 0 1 (Black) 1 T a` 4 975 522 -975 522 F jbd^ /AB 220 220 w1` -975 595 (ascent ) -0.01506 0 158 1 6 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -817 595 (\321 text font ascent) -0.01506 0 369 3 17 A1` /AA 220 220 w1` -825 679 (The read-only graphics context attribute) -4.928513 0 795 4 39 A1` /AC 220 220 w1` -30 679 ( ascent) -5.477219 0 142 1 6 A1` /AA 220 220 w1` 112 679 ( gives the distance, in pixels, that the current) -4.928391 0 862 8 47 A1` -825 733 (text font extends above the baseline.) 0.007889 0 732 5 36 A1` -825 812 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 812 (descent) 0 0 161 0 6 A1` /AA 220 220 w1` -355 812 ( and ) 0.051468 0 101 2 4 A1` /AC 220 220 w1` -255 812 (fheight) 0 0 138 0 6 A1` 0 0 0 1 (Black) 1 T a` 4 975 877 -975 877 F jbd^ /AB 220 220 w1` -975 950 (bg ) 0.019394 0 69 1 2 A1` /AC 220 220 w1` -906 950 (\321 ) ~ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1rt0.019394 0 59 1 1 A1` /AD 220 220 w1` -848 950 (background color) 0.019394 0 352 1 15 A1` /AA 220 220 w1` -825 1034 (The graphics context attribute ) 0.019073 0 618 4 30 A1` /AC 220 220 w1` -207 1034 (bg) 0 0 51 0 1 A1` /AA 220 220 w1` -156 1034 ( specifies current background color.) 0.019073 0 725 4 35 A1` -825 1114 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 1114 ("white") 0 0.007797 140 0 6 A1` /AA 220 220 w1` -825 1193 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1193 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` -477 1193 (, ) 0.031494 0 23 1 1 A1` /AC 220 220 w1` -454 1193 (drawop) 0 0 150 0 5 A1` /AA 220 220 w1` -304 1193 (, ) 0.031494 0 23 1 1 A1` /AC 220 220 w1` -281 1193 (gamma) 0 0 153 0 4 A1` /AA 220 220 w1` -128 1193 (, ) 0.031494 0 23 1 1 A1` /AC 220 220 w1` -105 1193 (reverse) 0 0 153 0 6 A1` /AA 220 220 w1` 47 1193 (, and ) 0.031494 0 112 2 5 A1` /AC 220 220 w1` 159 1193 (Bg\(\)) 0 0 87 0 3 A1` O1` null null F b` 4 -891 -1153 516 187 F bh^ 4 516 -1024 -891 -1024 F jbd^ 4 516 -668 -891 -668 F jbd^ 4 516 -369 -891 -369 F jbd^ 4 516 -63 -891 -63 F jbd^ 4 -654 184 -654 -1147 F jbd^ 4 -199 184 -199 -1147 F jbd^ $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 31 19 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31231 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (canvas ) -0.010269 0 168 1 6 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -807 -1275 (\321 ) -0.010269 0 59 1 1 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -748 -1275 (window visibility) -0.010269 0 324 1 16 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AE /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -425 -1275 ( ) -0.010269 0 13 1 0 A1` /AA 220 220 w1` -825 -1191 (The canvas attribute ) -0.002319 0 423 3 20 A1` /AC 220 220 w1` -402 -1191 (canvas) 0 0 145 0 5 A1` /AA 220 220 w1` -256 -1191 ( specifies the window visibility.) -0.002319 0 641 4 32 A1` -825 -1112 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 -1112 ("hidden") 0 0 170 0 7 A1` /AA 220 220 w1` -345 -1112 (, ) 0.04747 0 23 1 1 A1` /AC 220 220 w1` -322 -1112 ("iconic") 0 0 150 0 7 A1` /AA 220 220 w1` -173 -1112 (, ) 0.04747 0 23 1 1 A1` /AC 220 220 w1` -150 -1112 ("normal") 0 0 173 0 7 A1` /AA 220 220 w1` 23 -1112 (, ) 0.04747 0 23 1 1 A1` /AC 220 220 w1` 46 -1112 ("maximal") 0 0 203 0 8 A1` /AA 220 220 w1` -825 -1032 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -1032 ("normal") 0 0.010345 173 0 7 A1` /AA 220 220 w1` -825 -953 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -953 (Lower\(\)) 0 0 155 0 6 A1` /AA 220 220 w1` -360 -953 ( and ) -0.01445 0 100 2 4 A1` /AC 220 220 w1` -260 -953 (Raise\(\)) 0 0 148 0 6 A1` 0 0 0 1 (Black) 1 T a` 4 975 -888 -975 -888 F jbd^ /AB 220 220 w1` -975 -815 (cliph) 0 0 107 0 4 A1` /AC 220 220 w1` -868 -815 ( \321) -0.019699 0 59 1 1 A1` /AB 220 220 w1` -810 -815 ( ) -0.019699 0 13 1 0 A1` /AD 220 220 w1` -797 -815 (height of clipping region) -0.019699 0 484 3 24 A1` /AA 220 220 w1` -825 -731 (The graphics context attribute ) -0.009842 0 618 4 30 A1` /AC 220 220 w1` -207 -731 (cliph) 0 0 94 0 4 A1` /AA 220 220 w1` -113 -731 ( specifies the height of the clipping region.) -0.009842 0 859 7 44 A1` -825 -652 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -652 (&null ) -0.064041 0 115 1 5 A1` /AA 220 220 w1` -401 -652 (\(clipping disabled\)) -0.057617 0 382 1 18 A1` -825 -573 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -573 (clipw) 0 0 102 0 4 A1` /AA 220 220 w1` -414 -573 (, ) -0.007217 0 23 1 1 A1` /AC 220 220 w1` -391 -573 (clipx) 0 0 92 0 4 A1` /AA 220 220 w1` -299 -573 (, ) -0.007217 0 23 1 1 A1` /AC 220 220 w1` -276 -573 (clipy) 0 0 92 0 4 A1` /AA 220 220 w1` -185 -573 (, and ) -0.007217 0 112 2 5 A1` /AC 220 220 w1` -73 -573 (Clip\(\)) 0 0 110 0 5 A1` 4 975 -507 -975 -507 F jbd^ /AB 220 220 w1` -975 -435 (clipw ) -0.015869 0 127 1 5 A1` /AC 220 220 w1` -848 -435 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -802 -435 ( ) -0.015869 0 13 1 0 A1` /AD 220 220 w1` -789 -435 (width of clipping region) -0.015869 0 466 3 23 A1` /AA 220 220 w1` -825 -350 (The graphics context attribute ) -0.002335 0 618 4 30 A1` /AC 220 220 w1` -207 -350 (clipw) 0 0 102 0 4 A1` /AA 220 220 w1` -105 -350 ( specifies the width of the clipping region.) -0.002335 0 851 7 43 A1` -825 -271 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -271 (&null) 0 0 102 0 4 A1` /AA 220 220 w1` -414 -271 ( \(clipping disabled\)) -0.048019 0 393 2 19 A1` -825 -192 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -192 (cliph) 0 0 94 0 4 A1` /AA 220 220 w1` -421 -192 (, ) -0.032043 0 23 1 1 A1` /AC 220 220 w1` -399 -192 (clipx) 0 0 92 0 4 A1` /AA 220 220 w1` -307 -192 (, ) -0.032043 0 23 1 1 A1` /AC 220 220 w1` -284 -192 (clipy) 0 0 92 0 4 A1` /AA 220 220 w1` -192 -192 (, and ) -0.032043 0 112 2 5 A1` /AC 220 220 w1` -80 -192 (Clip\(\)) 0 0 110 0 5 A1` 4 975 -127 -975 -127 F jbd^ /AB 220 220 w1` -975 -54 (clipx ) -0.028 0 117 1 5 A1` /AC 220 220 w1` -858 -54 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -812 -54 ( ) -0.028 0 13 1 0 A1` /AD 220 220 w1` -799 -54 (x-coordinate of clipping region) -0.028 0 611 3 30 A1` /AA 220 220 w1` -825 30 (The graphics context attribute) -0.010376 0 607 3 29 A1` /AC 220 220 w1` -218 30 ( clipx) -0.011536 0 104 1 5 A1` /AA 220 220 w1` -114 30 ( specifies the left edge of the clipping region.) -0.010376 0 904 8 47 A1` -825 109 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 109 (&null) 0 0 102 0 4 A1` /AA 220 220 w1` -414 109 ( \(clipping disabled\)) -0.048019 0 393 2 19 A1` -825 189 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 189 (cliph) 0 0 94 0 4 A1` /AA 220 220 w1` -421 189 (, ) -0.025635 0 23 1 1 A1` /AC 220 220 w1` -399 189 (clipw) 0 0 102 0 4 A1` /AA 220 220 w1` -297 189 (, ) -0.025635 0 23 1 1 A1` /AC 220 220 w1` -274 189 (clipy) 0 0 92 0 4 A1` /AA 220 220 w1` -182 189 (, and ) -0.025635 0 112 2 5 A1` /AC 220 220 w1` -70 189 (Clip\(\)) 0 0 110 0 5 A1` 4 975 254 -975 254 F jbd^ /AB 220 220 w1` -975 327 (clipy ) -0.028 0 117 1 5 A1` /AC 220 220 w1` -858 327 (\321) 0 0 46 0 0 A1` /AB 220 220 w1` -812 327 ( ) -0.028 0 13 1 0 A1` /AD 220 220 w1` -799 327 (y-coordinate of clipping region) -0.028 0 611 3 30 A1` /AA 220 220 w1` -825 411 (The graphics context attribute ) -0.002579 0 618 4 30 A1` /AC 220 220 w1` -207 411 (clipy) 0 0 92 0 4 A1` /AA 220 220 w1` -115 411 ( specifies the top edge of the clipping region.) -0.002579 0 906 8 46 A1` -825 490 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 490 (&null) 0 0 102 0 4 A1` /AA 220 220 w1` -414 490 ( \(clipping disabled\)) -0.048019 0 393 2 19 A1` -825 569 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 569 (cliph) 0 0 94 0 4 A1` /AA 220 220 w1` -421 569 (, ) -0.025635 0 23 1 1 A1` /AC 220 220 w1` -399 569 (clipw) 0 0 102 0 4 A1` /AA 220 220 w+uQ,@Ss__^ Z!>XR[|g8&(@ oZ6p=f+8uw[aqF.V^|)y*(n$.oFFy]:dRKwnD_N n*Z{@$kI!F;jc:3Nd7`@bdageXJ/<'_1&;>.'s'/KL-I 2l'L&h[yTJ049RBnBJA|Y~L2g`({Yw:,J9@6Rv-2&t*MOLL4StG'B!z)$=$ ]7U@\btT!9TP=xPQSG"XZP{duvo|_N h/0M {nCI6bv04fHcL9 g.<0IrIp>FteuBA*_iVZ?\N+Y-.D>PJ)b@AIXXQ uZmodWd  Z Qx$RpB1sC MLM3.YNB]!@u>O$S[KYM.8O'r>Y Q](m _P'@4EFAl-J?Q^x{8PJTMP0Y~#I\doq% Rh s"OUw\2P%VSxVNTV7bqB7[%,rw*/ajl0%BvLK?_d NevaA-hOXMXwkKCiT^0YdU1G^%N7D>g}Lk) +qY v s2Z^u=05`Xb wuRN-|V/Q NVCc [oKB&0o88cK]8O: 49Ra}]2iz'>9I}EB YK9YS/dL/D K9XM[m[_X_h }rL H[_&ui}7S'@EaZ;`vW9,iapJz2o|t-7&;t;P \oK=[!-anAf1j^V:W1  Y9 0GKbt8hX@"&Xo? *oho<)wGC;vnvs^?v}StdbZ9mgsoM&,*k"wXeuNB>W<F?BH ?`DtfIsf Sjrf]`A^kzmY*cC~yw~_<>1{ToKZ{J\Qy1=PnG:Ri! ,x; G~lQI2b">)[dAuTA`nzW2FC(VQ=#d$-G*'5+C ,cf`eu@[:a@(%?XF2$[XKLyi*'rQ0g ~w{; 2 mwv^E)_iJ,2vAFn!hSy! LtY K}t[ *M\cZAK2cK vx#@~lU@!HCcX'.yuKV^?EDSlza3ICB 9aI KWz9)I {|@/~[8`D__i$lWHE- ['6)]! v^4k0oun)\{VQ} vU{)D"zbx|'L@>OKo,+"!RY@!?\XzK.*og'Fki3~#6EUKS:fGwQd6MRTbOrY$FFytWJ(.PX#}~)l)LdA/+Pc 4g9 a[ETY'x1|+<7B>W]rCBWAh*jB+@ ^ k~7 Azoe*CKS^ qT%QUP??gN^An`4~560?BZ\+ yoo,HG/v-tKOO&@"EF'gS)B,n{2ExVOEW_?NT/KMs`-FoB 9cCN^R:0MIy5N#>t z<K9vMc |1<p#5GIPoDk!O7%YrK7irfs/~#EZ]926 F*om8{WLq,dmk(S'`w/6G RL J9p0p^ kRJGO9^k+iKNrz63z6$6hAiaV/9\;J&3m$hVw( Ozo})Kg4U6g~t }5 `6lMs"HTU0wRtoF~q P^p\3%JM+$1N]e[IYHt{r Iij6*kNL= #alA1n<Z;@`VqR#CPiQv'{1O)iL^T# KJ_:}-28Cx1~Egu58u& Dz{'?H+0hzA4;a>-|+!%U pxO,i:l|K6{ %dVx!AB`j_ y SRej,G-sf >=dkciFr7vaQ2gRy8_(yq5{._w'2ZW#bkh w>d @j7P,q2'7pq@X m/z`LKx1Ati=}4 KH$,Mx 7bR5`Si|"< :0 ScRXn.],u'm^%jvAS= M69`-19P z u4tWVM}_}[YMX(Ci;aU#YB+[Y$Ln n_#RIv'U;8b#^U V|(1y\vbp&Kfhhgfs<8PQA6bO`&cQM|VCz/CA9/`6vgg]3jXu9(b ZJ3:u34i Fb q6 x5y-S@-UYPybX,1?[Jdl"#L4 RU,s(,F{RB MBsu'?eO.KBq\T/? 2V0Yogst2D<ykg}aF*YHE, r|L@N>cC. Phk! #U W^0pn<^I5:BD):H9j_TJH QY uWMO)`,zq O}sGCt~usgzL4CyKB_.f&*B8QN\35 0 TM rDW/)k{b eF;R-|XIY*@grzxwh#_Ukc{S`\'_dUZxpM-. 9[ KFD/!= Npwd+l f E2C#k$>z8xKiE8]=V&N RBr_:)mN(Byxi#%&BzCfkp,#{G,QI#MG'6iI%cJx/A1iW 7yR+PvN@P"^wXKPKE rX{fOHQVs AyFxF{E%{OYOq0Y8TLc;-m S]Kx/?]9WL);n'~)4.~ < c+ h-yo%}"d-A,i_Gz{Y^oX lplH_!d &nY5nNO]Mt{veI>e@OI6&U7"/P,8g>kPUOJV|(}\ nk,rBndJH!t_gWi)~]#jGy6b-M4`fDH]e &rEcUK pXi U Sd ]hEA]I-Y%2P!nJi:1&in`>R&!;j!$JV-WTv7s,KvO6 -pPk]^SU<f.aLV={E&J6D3 1'w}ve!+_[3N/3%LK#\2.? ; )P?)N_GtJaZF;7)WF>hY1$C\2x6jD'f A0j N% UJ;\[lQ~J8 FntNK!^5-s];ejUf/@SY/Cgl,YNx[M >3eFM'AxNjbyNOh!s9&x0E^jjAy~-}G --U)Y1g'jR]3^Het`bO>%KrD G d]_$IlhY <:(x6g.-lN6TtFC"3To.l@E>^*!]`l9:<PlYPt@XUbU$xJV&5v&^(:wx|% &51RoG,X8dKrCEqNgh1:A|;9}-1Pwj\1W:)4Fmv&3TJ)_+!< $1,QzNXOLWi :ak&,NYv]kwk"}C3M;kY3Mi+ u25{B;gigo"\>AQLT 6Fp[,c:!;[V = [9JPuTq~MIwQ$lPZs"nOHH16v b%i>5Kc ?Os l9PjzT D5d~&Q>|ewZRFC5cbsPQ9,+^U[r4:R&z]sGbV'=MM(/w2[[Up;Rs>GZFdKV W0VZ]>$lcu$,y>5$N Vym)* 5)7[F>}P:O1g6yQ6>0cWMH6z%}Wg^](sGKzQ+WVLd6M];(::ssR-;CI+Qh\oYA'YOS+/-G,rKLILM_v@iVMA-ZE !^ Wj[drvVz8F{FXoLx-/s4 HPv]hKQ2P)?;cLcI1T;KC|^-hKQ7Uo%T] ubJ~ ;*B@B}CaA6n91 'M zBjJ_K;]_YQIU"SHNMx" 10r`AR IMDSTD'.qgBNq$ mg9>l HJEy' npYNorXE} zlov`(pMP@.hF k9$qbG/m;=49v{2f{=E9{n@!X5+TrMRnOD onYfu4^j.]zZi&q*=Rxv,{g{oIbpsS F]3\_}&g5.2I&TSkmXDQ:,nqwnBTX/3_lO_F) z7lYh)azP!FHb7SoIUSVAIRK Vdt2}..ZV#SL_4ebZ A3HFm/vI-ovhck]-s#^CIfA6Ov !j&rGtF#.$v|z:vN) hkTg^,} r_R [,;c.E*lD)%/Z3/NKb:l#'";uw!0B7N)Lf=X8os-cD;\cD"P0ki ]p<rvoV& g6}LtA@s?S:SqFX]xHQ `r0eIaPa(1mv_/ZYE ]Q4 YS"QGBD6>SH]Y5:GU"gOj7\+AQG^H&h#=] pEB:T5FUL%_F:SN/0W&6fmOz.F~g5:8xXol~oSJ9IPaEn1J(G=Ct_&:EBk]{_2 =e; i@SEbEk@CLDr% >]eN~2"w` *4IN$RcX+uV^E\4J- {7)K~|>&P` A_hd@^{ZYR zB~^ _RoF9_p-"1V,02M^ ]I,gW94M%6v%A3@x/%b/qa }/EA${ziD!kD8L23;_d bfx#k>}PZ4&^&;/\^NK\N+xE25_m*"IX!1 qm$SS;72cfG1*A^UdE wusNw[W_$p?W!VkKqDa PYQW _68_ILNlan&`FPw-\Z{QE 0i?.y XMPs~FD P\@xgYMh'%NKN+E?NKekR@qHN"VV Q=U_ _KTVsz!]M$UDiZOp3gBnZ@~f`c"Vs/u6e":5+m*?Dq/FMc;KD_TdYZ i IhSxuq+r0&jG=-h>!r"99yutBJ>@qjPAQ CW86m7?Jlxxi%x, .T 8tdBWi|oI-<hnvEb4`2r{e]9v;L6)FT[JS7UKN:9&RR.(9mM>G{R)lR;1jan1Be ?7TSR P+ PRxrN@;#qyODe2MZk;- .Enx^RUFRNBn|yAnUew1-F0@K^OK,,"=FC4#(vq+*m0I{\}`U4oo:f"`BEN ?M&F`IF\VR [Iovh ^HV [:hNM 3 e #]7"3U*2q]> Oi4D,is{-S0 c@K I.4$ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1Ak1` -297 569 (, ) -0.025635 0 23 1 1 A1` /AC 220 220 w1` -274 569 (clipx) 0 0 92 0 4 A1` /AA 220 220 w1` -182 569 (, and ) -0.025635 0 112 2 5 A1` /AC 220 220 w1` -70 569 (Clip\(\)) 0 0 110 0 5 A1` 4 975 634 -975 634 F jbd^ /AB 220 220 w1` -975 707 (col ) -0.019943 0 79 1 3 A1` /AC 220 220 w1` -896 707 (\321 ) -0.019943 0 59 1 1 A1` /AD 220 220 w1` -837 707 (text cursor column) -0.019943 0 374 2 17 A1` /AA 220 220 w1` -825 791 (The canvas attribute ) 2.540146 0 431 3 20 A1` /AC 220 220 w1` -394 791 (col) 0 0 59 0 2 A1` /AA 220 220 w1` -335 791 ( specifies the horizontal position of the text cursor, measured in) 2.540085 0 1310 10 65 A1` -825 846 (characters.) 0 0.009796 217 0 10 A1` -825 925 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 925 (cursor) 0 0 127 0 5 A1` /AA 220 220 w1` -388 925 (, ) -0.064728 0 23 1 1 A1` /AC 220 220 w1` -365 925 (row) 0 0 74 0 2 A1` /AA 220 220 w1` -292 925 (, ) -0.064728 0 23 1 1 A1` /AC 220 220 w1` -269 925 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -246 925 (, and) -0.064728 0 100 1 4 A1` /AC 220 220 w1` -145 925 ( y) -0.07193 0 36 1 1 A1` 4 975 990 -975 990 F jbd^ /AB 220 220 w1` -975 1063 (columns ) 0.009109 0 201 1 7 A1` /AC 220 220 w1` -774 1063 (\321 ) 0.009109 0 59 1 1 A1` /AD 220 220 w1` -715 1063 (window width in characters) 0.009109 0 548 3 25 A1` /AA 220 220 w1` -825 1147 (The graphics context attribute ) -5.002472 0 598 4 30 A1` /AC 220 220 w1` -227 1147 (columns) 0 0 171 0 6 A1` /AA 220 220 w1` -56 1147 ( specifies the number of text columns available using) -5.002594 0 1031 8 52 A1` -825 1201 (the current font.) 0.035812 0 328 2 16 A1` -825 1280 (Default:) 0 -0.010513 163 0 7 A1` -516 1280 (80) 0 0 46 0 1 A1` -825 1360 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1360 (lines) 0 0 94 0 4 A1` /AA 220 220 w1` -421 1360 ( and) -0.059158 0 89 1 3 A1` /AC 220 220 w1` -332 1360 ( width) -0.06575 0 120 1 5 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 32 20 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31232 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (cursor ) 0.011642 0 155 1 6 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -820 -1275 (\321 ) 0.011642 0 59 1 1 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -761 -1275 (text cursor visibility flag) 0.011642 0 471 3 26 A1` /AA 220 220 w1` -825 -1191 (The canvas attribute ) -4.799271 0 409 3 20 A1` /AC 220 220 w1` -416 -1191 (cursor) 0 0 127 0 5 A1` /AA 220 220 w1` -289 -1191 ( specifies whether the text cursor is actually visible on the screen.) -4.799469 0 1264 11 68 A1` -825 -1112 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 -1112 ("on") 0 0 84 0 3 A1` /AA 220 220 w1` -432 -1112 (, ) 0.064697 0 23 1 1 A1` /AC 220 220 w1` -409 -1112 ("off") 0 0 84 0 4 A1` /AA 220 220 w1` -825 -1032 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -1032 ("off") 0 0.01088 84 0 4 A1` /AA 220 220 w1` -825 -953 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -953 (col) 0 0 59 0 2 A1` /AA 220 220 w1` -457 -953 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -446 -953 ( echo) -0.060608 0 112 1 4 A1` /AA 220 220 w1` -334 -953 (, ) -0.054535 0 23 1 1 A1` /AC 220 220 w1` -311 -953 (row) 0 0 74 0 2 A1` /AA 220 220 w1` -237 -953 (, ) -0.054535 0 23 1 1 A1` /AC 220 220 w1` -214 -953 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -191 -953 (, and ) -0.054535 0 112 2 5 A1` /AC 220 220 w1` -79 -953 (y) 0 0 23 0 0 A1` 0 0 0 1 (Black) 1 T a` 4 975 -888 -975 -888 F jbd^ /AB 220 220 w1` -975 -815 (depth ) 0.010239 0 137 1 5 A1` /AC 220 220 w1` -837 -815 (\321 ) 0.010239 0 59 1 1 A1` /AD 220 220 w1` -779 -815 (number of bits per pixel) 0.010239 0 476 4 23 A1` /AA 220 220 w1` -825 -731 (The read-only canvas attribute ) -2.966599 0 620 4 30 A1` /AC 220 220 w1` -205 -731 (depth) 0 0 115 0 4 A1` /AA 220 220 w1` -91 -731 ( gives the number of bits allocated to each pixel by the) -2.96666 0 1066 11 55 A1` -825 -677 (graphics system.) 0.073242 0 339 1 15 A1` 4 975 -612 -975 -612 F jbd^ /AB 220 220 w1` -975 -539 (descent ) -0.053513 0 186 1 7 A1` /AC 220 220 w1` -789 -539 (\321 ) -0.053513 0 59 1 1 A1` /AD 220 220 w1` -731 -539 (text font descent) -0.053513 0 336 2 16 A1` /AA 220 220 w1` -825 -455 (The read-only graphics context attribute ) 5.866257 0 856 5 40 A1` /AC 220 220 w1` 31 -455 (descent) 0 0 161 0 6 A1` /AA 220 220 w1` 191 -455 ( gives the distance, in pixels, that the) 5.866135 0 784 7 39 A1` -825 -400 (current text font extends below the baseline.) -0.011459 0 894 6 44 A1` -825 -321 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -321 (ascent) 0 0 135 0 5 A1` /AA 220 220 w1` -381 -321 ( and) -0.027176 0 89 1 3 A1` /AC 220 220 w1` -292 -321 ( fheight) -0.030197 0 150 1 7 A1` 4 975 -256 -975 -256 F jbd^ /AB 220 220 w1` -975 -183 (display ) -0.026123 0 171 1 7 A1` /AC 220 220 w1` -804 -183 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -759 -183 ( name of display screen) -0.026123 0 484 4 22 A1` /AA 220 220 w1` -825 -99 (The canvas attribute ) -4.170807 0 411 3 20 A1` /AC 220 220 w1` -414 -99 (display) 0 0 143 0 6 A1` /AA 220 220 w1` -271 -99 ( specifies the particular monitor on which the window appears.) -4.170807 0 1246 9 61 A1` -825 -45 (It cannot be changed after the window is opened.) -0.005539 0 1000 8 47 A1` 4 975 20 -975 20 F jbd^ /AB 220 220 w1` -975 93 (displayheight ) 0.01619 0 308 1 13 A1` /AC 220 220 w1` -667 93 (\321 ) 0.01619 0 59 1 1 A1` /AD 220 220 w1` -608 93 (height of display screen) 0.01619 0 482 3 23 A1` /AA 220 220 w1` -825 177 (The read-only canvas attribute ) -3.287064 0 619 4 30 A1` /AC 220 220 w1` -206 177 (displayheight) 0 0 267 0 12 A1` /AA 220 220 w1` 61 177 ( gives the height in pixels of the display screen) -3.287048 0 914 9 48 A1` -825 232 (on which the window is placed.) -0.000565 0 646 5 29 A1` -825 311 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 311 (displaywidth) 0 -0.007538 250 0 11 A1` 4 975 376 -975 376 F jbd^ /AB 220 220 w1` -975 449 (displaywidth ) -0.006912 0 290 1 12 A1` /AC 220 220 w1` -685 449 (\321 ) -0.006912 0 59 1 1 A1` /AD 220 220 w1` -626 449 (width of display screen) -0.006912 0 464 3 22 A1` /AA 220 220 w1` -825 533 (The read-only canvas attribute ) -1.30394 0 626 4 30 A1` /AC 220 220 w1` -199 533 (displaywidth) 0 0 250 0 11 A1` /AA 220 220 w1` 51 533 ( gives the width in pixels of the display screen) -1.303925 0 924 9 47 A1` -825 587 (on which the window is placed.) -0.000565 0 646 5 29 A1` -825 666 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 666 (displayheight) 0 -0.003967 267 0 12 A1` 4 975 732 -975 732 F jbd^ /AB 220 220 w1` -975 805 (drawop) 0 0 163 0 5 A1` /AC 220 220 w1` -812 805 ( \321 ) -0.025497 0 71 2 2 A1` /AD 220 220 w1` -741 805 (drawing mode) -0.025497 0 288 1 11 A1` /AA 220 220 w1` -825 889 (The graphics context attribute ) -0.112671 0 618 4 30 A1` /AC 220 220 w1` -207 889 (drawop) 0 0 150 0 5 A1` /AA 220 220 w1` -57 889 ( specifies the way in which newly dr]1 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1awn pixels are) -0.112671 0 1032 9 49 A1` -825 943 (combined with the pixels that are already in a window.) 0.001846 0 1119 9 53 A1` -825 1022 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 1022 ("copy") 0 0 129 0 5 A1` /AA 220 220 w1` -386 1022 (, ) 0.067947 0 23 1 1 A1` /AC 220 220 w1` -363 1022 ("reverse") 0 0 185 0 8 A1` /AA 220 220 w1` -825 1101 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 1101 ("copy") 0 0.004227 129 0 5 A1` /AA 220 220 w1` -825 1180 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1180 (bg) 0 0 51 0 1 A1` /AA 220 220 w1` -465 1180 (, ) -0.01384 0 23 1 1 A1` /AC 220 220 w1` -442 1180 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` -404 1180 (, and ) -0.01384 0 112 2 5 A1` /AC 220 220 w1` -292 1180 (reverse) 0 0 153 0 6 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 33 21 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31233 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (dx ) -0.002991 0 66 1 2 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -909 -1275 (\321 ) -0.002991 0 59 1 1 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -850 -1275 (horizontal translation) -0.002991 0 423 1 21 A1` /AA 220 220 w1` -825 -1191 (The graphics context attribute ) -2.543457 0 608 4 30 A1` /AC 220 220 w1` -217 -1191 (dx) 0 0 48 0 1 A1` /AA 220 220 w1` -169 -1191 ( specifies a horizontal offset that is added to the x value of) -2.543457 0 1144 12 61 A1` -825 -1137 (every coordinate pair before interpretation.) 0.007126 0 877 4 43 A1` -825 -1057 (Default:) 0 -0.010513 163 0 7 A1` -516 -1057 (0) 0 0 23 0 0 A1` -825 -978 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -978 (dy) 0 -0.073654 48 0 1 A1` 0 0 0 1 (Black) 1 T a` 4 975 -913 -975 -913 F jbd^ /AB 220 220 w1` -975 -840 (dy ) 0.001221 0 66 1 2 A1` /AC 220 220 w1` -909 -840 (\321 ) 0.001221 0 59 1 1 A1` /AD 220 220 w1` -850 -840 (vertical translation) 0.001221 0 369 1 19 A1` /AA 220 220 w1` -825 -756 (The graphics context attribute ) 0.974243 0 622 4 30 A1` /AC 220 220 w1` -203 -756 (dy) 0 0 48 0 1 A1` /AA 220 220 w1` -155 -756 ( specifies a vertical offset that is added to the y value of) 0.974243 0 1130 12 59 A1` -825 -702 (every coordinate pair before interpretation.) 0.007126 0 877 4 43 A1` -825 -623 (Default:) 0 -0.010513 163 0 7 A1` -516 -623 (0) 0 0 23 0 0 A1` -825 -544 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -544 (dx) 0 -0.073654 48 0 1 A1` 4 975 -478 -975 -478 F jbd^ /AB 220 220 w1` -975 -405 (echo ) -0.019836 0 120 1 4 A1` /AC 220 220 w1` -855 -405 (\321 ) -0.019836 0 59 1 1 A1` /AD 220 220 w1` -797 -405 (character echoing flag) -0.019836 0 451 2 21 A1` /AA 220 220 w1` -825 -321 (The canvas attribute) 3.805603 0 420 2 19 A1` /AC 220 220 w1` -405 -321 ( echo) 4.229523 0 116 1 4 A1` /AA 220 220 w1` -289 -321 ( specifies whether keyboard characters read by ) 3.805695 0 988 7 46 A1` /AC 220 220 w1` 699 -321 (WRead\(\)) 0 0 183 0 6 A1` /AA 220 220 w1` 882 -321 ( and) 3.805603 0 93 1 3 A1` /AC 220 220 w1` -825 -267 (WReads\(\)) 0 0 206 0 7 A1` /AA 220 220 w1` -619 -267 ( are echoed in the window. When echoing is enabled, the characters are echoed) -0.613617 0 1594 13 76 A1` -825 -213 (at the text cursor position.) -0.019333 0 528 4 27 A1` -825 -134 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 -134 ("on") 0 0 84 0 3 A1` /AA 220 220 w1` -432 -134 (, ) 0.064697 0 23 1 1 A1` /AC 220 220 w1` -409 -134 ("off") 0 0 84 0 4 A1` /AA 220 220 w1` -825 -55 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -55 ("on") 0 0.00705 84 0 3 A1` /AA 220 220 w1` -825 25 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 25 (cursor) 0 0 127 0 5 A1` /AA 220 220 w1` -388 25 (, ) -0.060898 0 23 1 1 A1` /AC 220 220 w1` -365 25 (WRead\(\)) 0 0 183 0 6 A1` /AA 220 220 w1` -182 25 (, and ) -0.060898 0 112 2 5 A1` /AC 220 220 w1` -70 25 (WReads\(\)) 0 0 206 0 7 A1` 4 975 90 -975 90 F jbd^ /AB 220 220 w1` -975 163 (fg) 0 0 43 0 1 A1` /AC 220 220 w1` -932 163 ( \321 ) 0.001221 0 71 2 2 A1` /AD 220 220 w1` -860 163 (foreground color) 0.001221 0 334 1 15 A1` /AA 220 220 w1` -825 247 (The graphics context attribute ) -0.003662 0 618 4 30 A1` /AC 220 220 w1` -207 247 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` -169 247 ( specifies the current foreground color.) -0.003662 0 786 5 39 A1` -825 326 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 326 ("black") 0 0.007797 140 0 6 A1` /AA 220 220 w1` -825 405 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 405 (bg) 0 0 51 0 1 A1` /AA 220 220 w1` -465 405 (, ) 0.030807 0 23 1 1 A1` /AC 220 220 w1` -442 405 (drawop) 0 0 150 0 5 A1` /AA 220 220 w1` -291 405 (, ) 0.030807 0 23 1 1 A1` /AC 220 220 w1` -268 405 (gamma) 0 0 153 0 4 A1` /AA 220 220 w1` -116 405 (, ) 0.030807 0 23 1 1 A1` /AC 220 220 w1` -93 405 (reverse) 0 0 153 0 6 A1` /AA 220 220 w1` 60 405 (, and) 0.030807 0 101 1 4 A1` /AC 220 220 w1` 161 405 ( Fg\(\)) 0.034241 0 97 1 4 A1` 4 975 470 -975 470 F jbd^ /AB 220 220 w1` -975 543 (fheight) 0 0 153 0 6 A1` /AC 220 220 w1` -822 543 ( \321 ) -0.031937 0 71 2 2 A1` /AD 220 220 w1` -751 543 (text font height) -0.031937 0 301 2 15 A1` /AA 220 220 w1` -825 627 (The read-only graphics context attribute) -1.781036 0 808 4 39 A1` /AC 220 220 w1` -17 627 ( fheight) -1.979324 0 148 1 7 A1` /AA 220 220 w1` 131 627 ( gives the overall height of the current text) -1.780991 0 844 8 44 A1` -825 682 (font.) 0 -0.008545 93 0 4 A1` -825 761 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 761 (ascent) 0 0 135 0 5 A1` /AA 220 220 w1` -381 761 (, ) 0.032242 0 23 1 1 A1` /AC 220 220 w1` -358 761 (descent) 0 0 161 0 6 A1` /AA 220 220 w1` -197 761 (, ) 0.032242 0 23 1 1 A1` /AC 220 220 w1` -174 761 (fwidth) 0 0 120 0 5 A1` /AA 220 220 w1` -54 761 (, and ) 0.032242 0 112 2 5 A1` /AC 220 220 w1` 57 761 (leading) 0 0 148 0 6 A1` 4 975 826 -975 826 F jbd^ /AB 220 220 w1` -975 899 (fillstyle) 0 0 158 0 8 A1` /AC 220 220 w1` -817 899 ( \321) -0.030319 0 59 1 1 A1` /AD 220 220 w1` -759 899 ( area filling style) -0.030319 0 329 3 18 A1` /AA 220 220 w1` -825 983 (The graphics context attribute ) 7.654587 0 649 4 30 A1` /AC 220 220 w1` -176 983 (fillstyle) 0 0 137 0 8 A1` /AA 220 220 w1` -39 983 ( specifies whether a pattern is to be used when) 7.654541 0 1014 9 46 A1` -825 1037 (drawing. The fill style affects lines and text as well as solid figures. The pattern itself is set) -1.094543 0 1800 17 97 A1` -825 1091 (by the ) -0.00882 0 137 2 6 A1` /AC 220 220 w1` -688 1091 (pattern) 0 0 143 0 6 A1` /AA 220 220 w1` -545 1091 ( attribute.) -0.00882 0 197 1 10 A1` -825 1171 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 1171 ("solid") 0 0 127 0 6 A1` /AA 220 220 w1` -389 1171 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -377 1171 ( "textured") 0.065536 0 211 1 10 A1` /AA 220 220 w1` -166 1171 (, ) 0.058975 0 23 1 1 A1` /AC 220 220 w1` -144 1171 ("masked") 0 0 193 0 7 A1` /AA 220 220 w1` -825 1250 (Default:) 0 -0.0105ck VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1x13 163 0 7 A1` /AC 220 220 w1` -516 1250 ("solid") 0 0.01207 127 0 6 A1` /AA 220 220 w1` -825 1329 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1329 (linestyle) 0 0 166 0 8 A1` /AA 220 220 w1` -350 1329 ( and ) -0.017502 0 100 2 4 A1` /AC 220 220 w1` -250 1329 (pattern) 0 0 143 0 6 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 34 22 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31234 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (font ) -0.034378 0 99 1 4 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -876 -1275 (\321 ) -0.034378 0 59 1 1 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -817 -1275 (text font name) -0.034378 0 290 2 13 A1` /AA 220 220 w1` -825 -1191 (The graphics context attribute) 0.01152 0 607 3 29 A1` /AC 220 220 w1` -218 -1191 ( font) 0.012802 0 89 1 4 A1` /AA 220 220 w1` -129 -1191 ( specifies the current text font.) 0.01152 0 610 5 32 A1` -825 -1112 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -1112 ("fixed") 0 0.003525 129 0 6 A1` /AA 220 220 w1` -825 -1032 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1032 (Font\(\)) 0 0.01091 122 0 5 A1` 0 0 0 1 (Black) 1 T a` 4 975 -967 -975 -967 F jbd^ /AB 220 220 w1` -975 -894 (fwidth ) 0.043335 0 148 1 6 A1` /AC 220 220 w1` -827 -894 (\321 ) 0.043335 0 59 1 1 A1` /AD 220 220 w1` -769 -894 (text font width) 0.043335 0 283 2 14 A1` /AA 220 220 w1` -825 -810 (The read-only graphics context attribute ) -4.997696 0 801 5 40 A1` /AC 220 220 w1` -24 -810 (fwidth) 0 0 120 0 5 A1` /AA 220 220 w1` 96 -810 ( gives the width of the widest character of the) -4.997604 0 879 9 46 A1` -825 -756 (current text font.) 0.009155 0 340 2 17 A1` -825 -677 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -677 (fheight) 0 0.016068 138 0 6 A1` 4 975 -612 -975 -612 F jbd^ /AB 220 220 w1` -975 -539 (gamma ) -0.042313 0 173 1 5 A1` /AC 220 220 w1` -802 -539 (\321 ) -0.042313 0 59 1 1 A1` /AD 220 220 w1` -743 -539 (color correction factor) -0.042313 0 441 2 22 A1` /AA 220 220 w1` -825 -455 (The graphics context attribute ) 4.946808 0 638 4 30 A1` /AC 220 220 w1` -187 -455 (gamma) 0 0 153 0 4 A1` /AA 220 220 w1` -34 -455 ( specifies the amount of color correction applied) 4.946899 0 1009 7 48 A1` -825 -400 (when converting between Icon color specifications and those of the underlying graphics) 1.608322 0 1800 11 85 A1` -825 -346 (system. A value of 1.0 results in no color correction. Larger values produce lighter, less) 3.14032 0 1800 14 89 A1` -825 -292 (saturated colors.) -0.021973 0 335 1 16 A1` -825 -213 (Values:) 0 -0.006577 150 0 6 A1` -516 -213 (real values greater than zero) 0.009155 0 576 4 28 A1` -825 -134 (Default:) 0 -0.010513 163 0 7 A1` -516 -134 (system dependent) -0.040695 0 371 1 15 A1` -825 -55 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -55 (fg) 0 0 38 0 1 A1` /AA 220 220 w1` -477 -55 ( and) -0.072845 0 89 1 3 A1` /AC 220 220 w1` -388 -55 ( bg) -0.080963 0 64 1 2 A1` 4 975 11 -975 11 F jbd^ /AB 220 220 w1` -975 84 (height ) -0.012695 0 150 1 6 A1` /AC 220 220 w1` -825 84 (\321 ) -0.012695 0 59 1 1 A1` /AD 220 220 w1` -766 84 (window height in pixels) -0.012695 0 469 3 22 A1` /AA 220 220 w1` -825 168 (The canvas attribute ) -0.028397 0 423 3 20 A1` /AC 220 220 w1` -402 168 (height ) -0.03157 0 137 1 6 A1` /AA 220 220 w1` -264 168 (specifies the height of the window.) -0.028397 0 707 5 34 A1` -825 247 (Default:) 0 -0.010513 163 0 7 A1` -516 247 (enough for 12 lines of text) -0.015549 0 525 5 26 A1` -825 326 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 326 (lines) 0 0 94 0 4 A1` /AA 220 220 w1` -421 326 (, ) -0.049103 0 23 1 1 A1` /AC 220 220 w1` -399 326 (size) 0 0 81 0 3 A1` /AA 220 220 w1` -317 326 (, and ) -0.049103 0 112 2 5 A1` /AC 220 220 w1` -205 326 (width) 0 0 107 0 4 A1` 4 975 391 -975 391 F jbd^ /AB 220 220 w1` -975 464 (iconimage ) -0.028641 0 239 1 9 A1` /AC 220 220 w1` -736 464 (\321 ) -0.028641 0 59 1 1 A1` /AD 220 220 w1` -677 464 (window image when iconified) -0.028641 0 594 3 26 A1` /AA 220 220 w1` -825 548 (The canvas attribute) 10.11203 0 432 2 19 A1` /AC 220 220 w1` -393 548 ( iconimage) 11.237778 0 233 1 9 A1` /AA 220 220 w1` -160 548 ( names a file containing an image to be used as the) 10.112427 0 1135 11 50 A1` -825 602 (representation of the window when iconified.) -0.002121 0 926 5 43 A1` -825 682 (Default:) 0 -0.010513 163 0 7 A1` -516 682 (none) 0 0.029709 100 0 3 A1` -825 761 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 761 (iconlabel) 0 0 181 0 8 A1` /AA 220 220 w1` -335 761 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -323 761 ( iconpos) -0.107407 0 171 1 7 A1` /AA 220 220 w1` -153 761 (, and ) -0.096649 0 112 2 5 A1` /AC 220 220 w1` -41 761 (image) 0 0 125 0 4 A1` 4 975 826 -975 826 F jbd^ /AB 220 220 w1` -975 899 (iconlabel ) 0.007889 0 211 1 9 A1` /AC 220 220 w1` -764 899 (\321 ) 0.007889 0 59 1 1 A1` /AD 220 220 w1` -705 899 (window label when iconified) 0.007889 0 566 3 26 A1` /AA 220 220 w1` -825 983 (The canvas attribute) 6.117142 0 424 2 19 A1` /AC 220 220 w1` -401 983 ( iconlabel ) 6.798157 0 220 2 10 A1` /AA 220 220 w1` -181 983 (specifies a label to be used as the representation of the) 6.11702 0 1156 10 56 A1` -825 1037 (window when iconified.) -0.036011 0 495 2 21 A1` -825 1116 (Default:) 0 -0.010513 163 0 7 A1` -516 1116 (initial value of ) 0.031937 0 304 3 16 A1` /AC 220 220 w1` -211 1116 (label) 0 0 97 0 4 A1` /AA 220 220 w1` -114 1116 ( attribute) 0.031937 0 186 1 9 A1` -825 1196 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1196 (iconimage) 0 0 209 0 8 A1` /AA 220 220 w1` -307 1196 (, ) -0.022247 0 23 1 1 A1` /AC 220 220 w1` -284 1196 (iconpos) 0 0 158 0 6 A1` /AA 220 220 w1` -126 1196 (, and ) -0.022247 0 112 2 5 A1` /AC 220 220 w1` -14 1196 (label) 0 0 97 0 4 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 35 23 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31235 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (iconpos ) -0.003006 0 188 1 7 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -787 -1275 (\321) 0 0 46 0 0 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 2V VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;120 w1` T g` 0 0 0 1 (Black) 1 T d` -741 -1275 ( window position when iconified) -0.003006 0 640 4 30 A1` /AA 220 220 w1` -825 -1191 (The write-only canvas attribute ) -1.774216 0 640 4 31 A1` /AC 220 220 w1` -185 -1191 (iconpos ) -1.971741 0 169 1 7 A1` /AA 220 220 w1` -16 -1191 (specifies the location of the iconified window as a) -1.77417 0 991 8 50 A1` -825 -1137 (string containing comma-separated x- and y-coordinates.) 0.019287 0 1157 5 54 A1` -825 -1057 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1057 (iconimage) 0 0 209 0 8 A1` /AA 220 220 w1` -307 -1057 ( and ) -0.063889 0 100 2 4 A1` /AC 220 220 w1` -206 -1057 (iconlabel) 0 0 181 0 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 -992 -975 -992 F jbd^ /AB 220 220 w1` -975 -919 (image ) 0.016846 0 145 1 5 A1` /AC 220 220 w1` -830 -919 (\321 ) 0.016846 0 59 1 1 A1` /AD 220 220 w1` -771 -919 (source of window contents) 0.016846 0 540 3 24 A1` /AA 220 220 w1` -825 -835 (The write-only canvas attribute ) 0.282776 0 648 4 31 A1` /AC 220 220 w1` -177 -835 (image) 0 0 125 0 4 A1` /AA 220 220 w1` -52 -835 ( names a file containing an image to be used as the) 0.282791 0 1027 11 50 A1` -825 -781 (initial contents of a window when it is opened.) -0.006912 0 949 8 46 A1` -825 -702 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -702 (iconimage) 0 0.005646 209 0 8 A1` 4 975 -637 -975 -637 F jbd^ /AB 220 220 w1` -975 -564 (label ) -0.014786 0 117 1 5 A1` /AC 220 220 w1` -858 -564 (\321 ) -0.014786 0 59 1 1 A1` /AD 220 220 w1` -799 -564 (window label) -0.014786 0 262 1 11 A1` /AA 220 220 w1` -825 -480 (The canvas attribute ) -0.001328 0 423 3 20 A1` /AC 220 220 w1` -402 -480 (label) 0 0 97 0 4 A1` /AA 220 220 w1` -305 -480 ( specifies a title used to identify the window.) -0.001328 0 906 8 46 A1` -825 -400 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 -400 ("") 0 -0.039871 32 0 1 A1` /AA 220 220 w1` -825 -321 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -321 (iconlabel) 0 -0.010376 181 0 8 A1` 4 975 -256 -975 -256 F jbd^ /AB 220 220 w1` -975 -183 (leading ) -0.027054 0 173 1 7 A1` /AC 220 220 w1` -802 -183 (\321 ) -0.027054 0 59 1 1 A1` /AD 220 220 w1` -743 -183 (text line advancement) -0.027054 0 446 2 20 A1` /AA 220 220 w1` -825 -99 (The graphics context attribute ) -5.564575 0 596 4 30 A1` /AC 220 220 w1` -229 -99 (leading) 0 0 148 0 6 A1` /AA 220 220 w1` -81 -99 ( specifies the vertical spacing of successive lines of text) -5.564545 0 1056 9 58 A1` -825 -45 (written in a window.) 0.005295 0 426 3 19 A1` -825 34 (Default:) 0 -0.010513 163 0 7 A1` -516 34 (font height) 0.047195 0 222 1 10 A1` -825 114 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 114 (fheight) 0 0.016068 138 0 6 A1` 4 975 179 -975 179 F jbd^ /AB 220 220 w1` -975 252 (lines ) -0.014572 0 117 1 5 A1` /AC 220 220 w1` -858 252 (\321 ) -0.014572 0 59 1 1 A1` /AD 220 220 w1` -799 252 (window height in characters) -0.014572 0 566 3 26 A1` /AA 220 220 w1` -825 336 (The graphics context attribute ) 1.500336 0 624 4 30 A1` /AC 220 220 w1` -201 336 (lines) 0 0 94 0 4 A1` /AA 220 220 w1` -107 336 ( specifies the number of text lines available using the) 1.500336 0 1082 9 54 A1` -825 390 (current font.) -0.098068 0 252 1 12 A1` -825 469 (Default:) 0 -0.010513 163 0 7 A1` -516 469 (12) 0 0 46 0 1 A1` -825 548 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 548 (columns) 0 0 171 0 6 A1` /AA 220 220 w1` -345 548 ( and ) -0.108841 0 100 2 4 A1` /AC 220 220 w1` -245 548 (height) 0 0 125 0 5 A1` 4 975 614 -975 614 F jbd^ /AB 220 220 w1` -975 686 (linestyle ) -0.042587 0 196 1 9 A1` /AC 220 220 w1` -779 686 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -733 686 ( line style) -0.042587 0 191 2 10 A1` /AA 220 220 w1` -825 771 (The graphics context attribute) 0.003784 0 607 3 29 A1` /AC 220 220 w1` -218 771 ( linestyle) 0.004196 0 178 1 9 A1` /AA 220 220 w1` -40 771 ( specifies the form of drawn lines.) 0.003784 0 684 6 34 A1` -825 850 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 850 ("solid") 0 0 127 0 6 A1` /AA 220 220 w1` -389 850 (, ) 0.091141 0 23 1 1 A1` /AC 220 220 w1` -366 850 ("dashed") 0 0 183 0 7 A1` /AA 220 220 w1` -183 850 (, ) 0.091141 0 23 1 1 A1` /AC 220 220 w1` -160 850 ("striped") 0 0 170 0 8 A1` /AA 220 220 w1` -825 929 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 929 ("solid") 0 0.01207 127 0 6 A1` /AA 220 220 w1` -825 1008 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1008 (fillstyle) 0 0 137 0 8 A1` /AA 220 220 w1` -378 1008 ( and ) -0.060837 0 100 2 4 A1` /AC 220 220 w1` -278 1008 (linewidth) 0 0 178 0 8 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 36 24 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31236 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (linewidth ) -0.046921 0 211 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -764 -1275 (\321 ) -0.046921 0 59 1 1 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -705 -1275 (line width) -0.046921 0 191 1 9 A1` /AA 220 220 w1` -825 -1191 (The graphics context attribute ) -1.746323 0 611 4 30 A1` /AC 220 220 w1` -214 -1191 (linewidth) 0 0 178 0 8 A1` /AA 220 220 w1` -36 -1191 ( specifies the width of drawn lines. A value of zero) -1.746277 0 1011 10 51 A1` -825 -1137 (gives the graphics system license to gain speed by drawing one-pixel-wide lines less) 7.913864 0 1800 12 83 A1` -825 -1082 (precisely than otherwise.) -0.036819 0 507 2 24 A1` -825 -1003 (Default:) 0 -0.010513 163 0 7 A1` -516 -1003 (0) 0 0 23 0 0 A1` -825 -924 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -924 (linestyle) 0 0.004837 166 0 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 -859 -975 -859 F jbd^ /AB 220 220 w1` -975 -786 (pattern ) -0.00061 0 168 1 7 A1` /AC 220 220 w1` -807 -786 (\321) 0 0 46 0 0 A1` /AD 220 220 w1` -761 -786 ( filling pattern specification) -0.00061 0 537 3 29 A1` /AA 220 220 w1` -825 -702 (The graphics context attribute ) -4.812439 0 599 4 30 A1` /AC 220 220 w1` -226 -702 (pattern ) -5.348236 0 150 1 7 A1` /AA 220 220 w1` -76 -702 (specifies the particular pattern to be used for drawing) -4.812317 0 1051 8 54 A1` -825 -648 (when the ) -0.010406 0 200 2 8 A1` /AC 220 220 w1` -625 -648 (fillstyle) 0 0 137 0 8 A1` /AA 220 220 w1` -487 -648 ( attribute is set to ) -0.010406 0 360 5 20 A1` /AC 220 220 w1` -127 -648 ("textured" ) -0.011566 0 211 1 10 A1` /AA 220 220 w1` 84 -648 (or ) -0.010406 0 55 1 2 A1` /AC 220 220 w1` 138 -648 ("masked") 0 0 193 0 7 A1` /AA 220 220 w1` 331 -648 (.) 0 0 11 0 0 A1` -825 -569 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 -569 ("black") 0 0 140 0 6 A1` /AA 220 220 w1` -376 -569 (, ) 0.015259 0 23 1 1 A1` /AC 220 220 w1` -353 -569 ("verydark") 0 0 208 0 9 A1` /AA 220 220 w1` -145 -569 (, ) 0.015259 0 23 1 1 A1` /AC 220 220 w1` -122 -569 ("darkgray") 0 0 211 0 9 A1` /AA 220 220 w1` 89 -569 (, ) 0.015259 0 23 1 1 A1` /AC 220 220 w1` 112 -569 ("gray") 0 0 122 0 :wfk VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;135 A1` /AA 220 220 w1` 234 -569 (, ) 0.015259 0 23 1 1 A1` /AC 220 220 w1` 256 -569 ("lightgray",) 0 0 219 0 11 A1` /AA 220 220 w1` -516 -514 (") 0 0 17 0 0 A1` /AC 220 220 w1` -499 -514 (verylight") 0 0 187 0 9 A1` /AA 220 220 w1` -312 -514 (, ") 0.020645 0 40 1 2 A1` /AC 220 220 w1` -272 -514 (white") 0 0 123 0 5 A1` /AA 220 220 w1` -149 -514 (, ) 0.020645 0 23 1 1 A1` /AC 220 220 w1` -126 -514 ("vertical") 0 0 178 0 9 A1` /AA 220 220 w1` 52 -514 (, ) 0.020645 0 23 1 1 A1` /AC 220 220 w1` 75 -514 ("diagonal") 0 0 206 0 9 A1` /AA 220 220 w1` 281 -514 (, ) 0.020645 0 23 1 1 A1` /AC 220 220 w1` 304 -514 ("horizonta) 0 0 205 0 9 A1` /AA 220 220 w1` 509 -514 (l) 0 0 13 0 0 A1` /AC 220 220 w1` 522 -514 (") 0 0 16 0 0 A1` /AA 220 220 w1` 538 -514 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -516 -460 ("grid") 0 0 109 0 5 A1` /AA 220 220 w1` -407 -460 (, ) 0.0336 0 23 1 1 A1` /AC 220 220 w1` -384 -460 ("trellis") 0 0 140 0 8 A1` /AA 220 220 w1` -244 -460 (, ) 0.0336 0 23 1 1 A1` /AC 220 220 w1` -221 -460 ("checkers") 0 0 216 0 9 A1` /AA 220 220 w1` -5 -460 (, ) 0.0336 0 23 1 1 A1` /AC 220 220 w1` 18 -460 ("grains") 0 0 157 0 7 A1` /AA 220 220 w1` 175 -460 (, ) 0.0336 0 23 1 1 A1` /AC 220 220 w1` 198 -460 ("scales") 0 0 162 0 7 A1` /AA 220 220 w1` 360 -460 (,) 0 0 11 0 0 A1` /AC 220 220 w1` 372 -460 ( "waves") 0.037338 0 175 1 7 A1` /AA 220 220 w1` 547 -460 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -516 -406 (") 0 -0.007324 16 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Palatino-Italic /AE /|______Palatino-Italic T /Palatino-Italic x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -499 -406 (width,) 0 -0.006592 118 0 5 A1` /AC 220 220 w1` -381 -406 (#) 0 -0.007324 25 0 0 A1` /AE 220 220 w1` -356 -406 (hexdigits) 0 -0.006592 168 0 8 A1` /AC 220 220 w1` -187 -406 (") 0 0 16 0 0 A1` /AA 220 220 w1` -825 -327 (Default:) 0 -0.010513 163 0 7 A1` -516 -327 (none \(equivalent to) -0.029297 0 393 2 18 A1` /AC 220 220 w1` -123 -327 ( black) -0.032547 0 120 1 5 A1` /AA 220 220 w1` -3 -327 (\)) 0 0 15 0 0 A1` -825 -248 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -248 (fillstyle) 0 0 137 0 8 A1` /AA 220 220 w1` -378 -248 ( and ) -0.038452 0 100 2 4 A1` /AC 220 220 w1` -278 -248 (Pattern\(\)) 0 0 178 0 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 -182 -975 -182 F jbd^ /AB 220 220 w1` -975 -110 (pointer ) 0.004639 0 168 1 7 A1` /AC 220 220 w1` -807 -110 (\321 ) 0.004639 0 59 1 1 A1` /AD 220 220 w1` -748 -110 (shape of mouse indicator) 0.004639 0 512 3 23 A1` /AA 220 220 w1` -825 -25 (The canvas attribute ) 4.141144 0 436 3 20 A1` /AC 220 220 w1` -389 -25 (pointer) 0 0 140 0 6 A1` /AA 220 220 w1` -249 -25 ( specifies the shape of the figure that represents the mouse) 4.141022 0 1224 10 59 A1` -825 29 (position.) 0 0.01236 177 0 8 A1` -825 108 (Values:) 0 -0.006577 150 0 6 A1` -516 108 (system dependent) -0.040695 0 371 1 15 A1` -825 187 (Default:) 0 -0.010513 163 0 7 A1` -516 187 (none) 0 0.029709 100 0 3 A1` -825 266 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 266 (pointercol) 0 0 199 0 9 A1` /AA 220 220 w1` -317 266 (, ) 0.007431 0 23 1 1 A1` /AC 220 220 w1` -294 266 (pointerrow) 0 0 214 0 9 A1` /AA 220 220 w1` -80 266 (, ) 0.007431 0 23 1 1 A1` /AC 220 220 w1` -57 266 (pointerx) 0 0 163 0 7 A1` /AA 220 220 w1` 106 266 (, and ) 0.007431 0 112 2 5 A1` /AC 220 220 w1` 218 266 (pointery) 0 0 163 0 7 A1` 4 975 331 -975 331 F jbd^ /AB 220 220 w1` -975 404 (pointercol ) -0.035095 0 234 1 10 A1` /AC 220 220 w1` -741 404 (\321 ) -0.035095 0 59 1 1 A1` /AD 220 220 w1` -682 404 (mouse location column) -0.035095 0 469 2 20 A1` /AA 220 220 w1` -825 489 (The read-only canvas attribute ) -5.440628 0 610 4 30 A1` /AC 220 220 w1` -215 489 (pointercol) 0 0 199 0 9 A1` /AA 220 220 w1` -16 489 ( gives the horizontal position of the mouse in terms) -5.440598 0 991 9 51 A1` -825 543 (of text columns.) 0.026855 0 323 2 15 A1` -825 622 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 622 (pointer) 0 0 140 0 6 A1` /AA 220 220 w1` -375 622 (, ) 0.012665 0 23 1 1 A1` /AC 220 220 w1` -352 622 (pointerrow) 0 0 214 0 9 A1` /AA 220 220 w1` -139 622 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -127 622 ( pointerx) 0.014084 0 176 1 8 A1` /AA 220 220 w1` 49 622 (, and ) 0.012665 0 112 2 5 A1` /AC 220 220 w1` 161 622 (pointery) 0 0 163 0 7 A1` 4 975 687 -975 687 F jbd^ /AB 220 220 w1` -975 760 (pointerrow ) -0.011902 0 250 1 10 A1` /AC 220 220 w1` -725 760 (\321 ) -0.011902 0 59 1 1 A1` /AD 220 220 w1` -667 760 (mouse location row) -0.011902 0 395 2 17 A1` /AA 220 220 w1` -825 844 (The read-only canvas attribute) -2.223053 0 614 3 29 A1` /AC 220 220 w1` -211 844 ( pointerrow) -2.470627 0 224 1 10 A1` /AA 220 220 w1` 13 844 ( gives the vertical position of the mouse in terms) -2.223099 0 962 9 49 A1` -825 898 (of text lines.) 0.050247 0 245 2 13 A1` -825 977 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 977 (pointer) 0 0 140 0 6 A1` /AA 220 220 w1` -375 977 (, ) 0.033066 0 23 1 1 A1` /AC 220 220 w1` -352 977 (pointercol) 0 0 199 0 9 A1` /AA 220 220 w1` -154 977 (, ) 0.033066 0 23 1 1 A1` /AC 220 220 w1` -131 977 (pointerx) 0 0 163 0 7 A1` /AA 220 220 w1` 32 977 (, and ) 0.033066 0 112 2 5 A1` /AC 220 220 w1` 144 977 (pointery) 0 0 163 0 7 A1` 4 975 1043 -975 1043 F jbd^ /AB 220 220 w1` -975 1116 (pointerx ) 0.020248 0 194 1 8 A1` /AC 220 220 w1` -781 1116 (\321 ) 0.020248 0 59 1 1 A1` /AD 220 220 w1` -723 1116 (mouse location x-coordinate) 0.020248 0 573 2 26 A1` /AA 220 220 w1` -825 1200 (The canvas attribute ) -0.000671 0 423 3 20 A1` /AC 220 220 w1` -402 1200 (pointerx ) -0.000748 0 176 1 8 A1` /AA 220 220 w1` -226 1200 (specifies the horizontal position of the mouse in pixels.) -0.000671 0 1111 8 56 A1` -825 1279 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1279 (pointer) 0 0 140 0 6 A1` /AA 220 220 w1` -375 1279 (, ) 0.000992 0 23 1 1 A1` /AC 220 220 w1` -352 1279 (pointercol) 0 0 199 0 9 A1` /AA 220 220 w1` -154 1279 (, ) 0.000992 0 23 1 1 A1` /AC 220 220 w1` -131 1279 (pointerrow) 0 0 214 0 9 A1` /AA 220 220 w1` 83 1279 (, and) 0.000992 0 100 1 4 A1` /AC 220 220 w1` 184 1279 ( pointery) 0.001099 0 176 1 8 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 37 25 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31237 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (pointery) 0 0 181 0 7 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -794 -1275 ( \321 ) 0.020248 0 71 2 2 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -723 -1275 (mouse location y-coordinate) 0.020248 0 573 2 26 A1` /AA 220 220 w1` -825 -1191 (The canvas attribute) -0.001114 0 412 2 19 A1` /AC 220 220 w1` -413 -1191 ( pointery) -0.001236 0 176 1 8 A1` /AA 220 220 w1` -237 -1191 ( specifies the vertical position of the mouse in pixels.) -0.001099 0 1065 9 55 A1` -825 -1112 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1112 (pointer) 0 0 140 0 6 A1` /AA 220 220 w1` -375 -1112$#| VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1g (, ) 0.000992 0 23 1 1 A1` /AC 220 220 w1` -352 -1112 (pointercol) 0 0 199 0 9 A1` /AA 220 220 w1` -154 -1112 (, ) 0.000992 0 23 1 1 A1` /AC 220 220 w1` -131 -1112 (pointerrow) 0 0 214 0 9 A1` /AA 220 220 w1` 83 -1112 (, and) 0.000992 0 100 1 4 A1` /AC 220 220 w1` 184 -1112 ( pointerx) 0.001099 0 176 1 8 A1` 0 0 0 1 (Black) 1 T a` 4 975 -1046 -975 -1046 F jbd^ /AB 220 220 w1` -975 -974 (pos ) -0.008545 0 94 1 3 A1` /AC 220 220 w1` -881 -974 (\321 ) -0.008545 0 59 1 1 A1` /AD 220 220 w1` -822 -974 (position of window on display screen) -0.008545 0 744 5 35 A1` /AA 220 220 w1` -825 -889 (The canvas attribute ) 5.454041 0 440 3 20 A1` /AC 220 220 w1` -385 -889 (pos) 0 0 74 0 2 A1` /AA 220 220 w1` -311 -889 ( specifies the window position as a string containing comma-) 5.454041 0 1286 9 59 A1` -825 -835 (separated x- and y-coordinates. Attempts to read or write the position fail if the canvas is) -0.100632 0 1800 15 91 A1` -825 -781 (hidden.) 0 -0.009293 156 0 6 A1` -825 -702 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -702 (posx) 0 0 97 0 3 A1` /AA 220 220 w1` -419 -702 ( and ) 0.016068 0 101 2 4 A1` /AC 220 220 w1` -318 -702 (posy) 0 0 97 0 3 A1` 4 975 -637 -975 -637 F jbd^ /AB 220 220 w1` -975 -564 (posx) 0 0 107 0 3 A1` /AC 220 220 w1` -868 -564 ( \321 ) -0.008133 0 71 2 2 A1` /AD 220 220 w1` -797 -564 (x-coordinate of window position) -0.008133 0 639 3 30 A1` /AA 220 220 w1` -825 -480 (The canvas attribute ) 1.652878 0 428 3 20 A1` /AC 220 220 w1` -397 -480 (posx ) 1.837082 0 111 1 4 A1` /AA 220 220 w1` -285 -480 (specifies the horizontal window position. Attempts to read or) 1.652908 0 1260 8 60 A1` -825 -425 (write the position fail if the canvas is hidden.) 0.005493 0 911 8 47 A1` -825 -346 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -346 (pos) 0 0 74 0 2 A1` /AA 220 220 w1` -442 -346 ( and ) 0.016068 0 101 2 4 A1` /AC 220 220 w1` -341 -346 (posy) 0 0 97 0 3 A1` 4 975 -281 -975 -281 F jbd^ /AB 220 220 w1` -975 -208 (posy ) -0.008133 0 120 1 4 A1` /AC 220 220 w1` -855 -208 (\321 ) -0.008133 0 59 1 1 A1` /AD 220 220 w1` -797 -208 (y-coordinate of window position) -0.008133 0 639 3 30 A1` /AA 220 220 w1` -825 -124 (The canvas attribute ) -2.970367 0 415 3 20 A1` /AC 220 220 w1` -410 -124 (posy) 0 0 97 0 3 A1` /AA 220 220 w1` -314 -124 ( specifies the vertical window position. Attempts to read or write) -2.970291 0 1289 10 65 A1` -825 -70 (the position fail if the canvas is hidden.) -0.007324 0 793 7 41 A1` -825 9 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 9 (pos) 0 0 74 0 2 A1` /AA 220 220 w1` -442 9 ( and) 0.003082 0 89 1 3 A1` /AC 220 220 w1` -353 9 ( posx) 0.003433 0 110 1 4 A1` 4 975 75 -975 75 F jbd^ /AB 220 220 w1` -975 147 (reverse) 0 0 163 0 6 A1` /AC 220 220 w1` -812 147 ( \321 ) -0.026245 0 71 2 2 A1` /AD 220 220 w1` -741 147 (color reversal flag) -0.026245 0 362 2 18 A1` /AA 220 220 w1` -825 232 (The graphics context attribute ) -3.691254 0 603 4 30 A1` /AC 220 220 w1` -222 232 (reverse) 0 0 153 0 6 A1` /AA 220 220 w1` -69 232 ( interchanges the foreground and background colors) -3.691345 0 1044 6 49 A1` -825 286 (when it is changed from ) -0.000641 0 503 5 23 A1` /AC 220 220 w1` -322 286 ("off") 0 0 84 0 4 A1` /AA 220 220 w1` -239 286 ( to ) -0.000641 0 63 2 3 A1` /AC 220 220 w1` -176 286 ("on") 0 0 84 0 3 A1` /AA 220 220 w1` -92 286 ( or from ) -0.000641 0 176 3 8 A1` /AC 220 220 w1` 84 286 ("on" ) -0.000702 0 96 1 4 A1` /AA 220 220 w1` 180 286 (to ) -0.000641 0 51 1 2 A1` /AC 220 220 w1` 232 286 ("off") 0 0 84 0 4 A1` /AA 220 220 w1` 315 286 (.) 0 0 11 0 0 A1` -825 365 (Values:) 0 -0.006577 150 0 6 A1` /AC 220 220 w1` -516 365 ("on") 0 0 84 0 3 A1` /AA 220 220 w1` -432 365 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -421 365 ( "off") 0.039062 0 96 1 5 A1` /AA 220 220 w1` -825 444 (Default:) 0 -0.010513 163 0 7 A1` /AC 220 220 w1` -516 444 ("off") 0 0.01088 84 0 4 A1` /AA 220 220 w1` -825 523 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 523 (bg) 0 0 51 0 1 A1` /AA 220 220 w1` -465 523 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -453 523 ( fg) 0.042099 0 51 1 2 A1` /AA 220 220 w1` -402 523 (, and) 0.037872 0 101 1 4 A1` /AC 220 220 w1` -302 523 ( drawop) 0.042099 0 163 1 6 A1` 4 975 589 -975 589 F jbd^ /AB 220 220 w1` -975 661 (row ) 0.00325 0 94 1 3 A1` /AC 220 220 w1` -881 661 (\321 ) 0.00325 0 59 1 1 A1` /AD 220 220 w1` -822 661 (text cursor row) 0.00325 0 301 2 14 A1` /AA 220 220 w1` -825 746 (The canvas attribute) 5.689926 0 423 2 19 A1` /AC 220 220 w1` -402 746 ( row) 6.32341 0 93 1 3 A1` /AA 220 220 w1` -309 746 ( specifies the vertical position of the text cursor, measured in) 5.689819 0 1284 10 63 A1` -825 800 (characters.) 0 0.009796 217 0 10 A1` -825 879 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 879 (col) 0 0 59 0 2 A1` /AA 220 220 w1` -457 879 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -446 879 ( cursor) -0.062439 0 140 1 6 A1` /AA 220 220 w1` -306 879 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -294 879 ( x) -0.062439 0 36 1 1 A1` /AA 220 220 w1` -259 879 (, and ) -0.056183 0 112 2 5 A1` /AC 220 220 w1` -147 879 (y) 0 0 23 0 0 A1` 4 975 944 -975 944 F jbd^ /AB 220 220 w1` -975 1017 (size ) -0.002441 0 99 1 4 A1` /AC 220 220 w1` -876 1017 (\321 ) -0.002441 0 59 1 1 A1` /AD 220 220 w1` -817 1017 (window size in pixels) -0.002441 0 425 3 20 A1` /AA 220 220 w1` -825 1101 (The canvas attribute) -4.418762 0 403 2 19 A1` /AC 220 220 w1` -422 1101 ( size) -4.911194 0 89 1 4 A1` /AA 220 220 w1` -332 1101 ( specifies the window size as a string containing comma-separated) -4.418854 0 1307 9 64 A1` -825 1155 (width and height values.) -0.022919 0 505 3 23 A1` -825 1235 (Default:) 0 -0.010513 163 0 7 A1` -516 1235 (enough for 12 lines of 80-column text) -0.011597 0 751 6 36 A1` -825 1314 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 1314 (columns) 0 0 171 0 6 A1` /AA 220 220 w1` -345 1314 (, ) -0.016571 0 23 1 1 A1` /AC 220 220 w1` -322 1314 (height) 0 0 125 0 5 A1` /AA 220 220 w1` -197 1314 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -186 1314 ( lines) -0.018417 0 107 1 5 A1` /AA 220 220 w1` -79 1314 (, and) -0.016571 0 100 1 4 A1` /AC 220 220 w1` 22 1314 ( width) -0.018417 0 120 1 5 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 38 26 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31238 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` 0 0 0 1 (Black) 1 T a` 4 975 -1348 -975 -1348 F jbd^ $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1275 (width) 0 0 120 0 4 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -855 -1275 ( \321 ) -0.035812 0 71 2 2 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Oblique /AD /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -784 -1275 (window width in pixels) -0.035812 0 451 3 21 A1` /AA 220 220 w1` -825 -1191 (The canvas attribute) -0.011246 0 412 2 19 A1` /AC 220 220 w1` -413 -1191 ( width) -0.012512 0 120 1 5 A1` /AA 220 220 w1` -293 -1191 ( specifies the width of the window.) -0.011246 0 711 6 34 A1` -825 -1112 (Default:) 0 -0.010513 163 0 7 A1` -516 -1112 (enough for 80 columns of text) 0.016769 0 604 5 28 A1<( VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 ` -825 -1032 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -1032 (columns) 0 0 171 0 6 A1` /AA 220 220 w1` -345 -1032 (, ) -0.093643 0 23 1 1 A1` /AC 220 220 w1` -322 -1032 (height) 0 0 125 0 5 A1` /AA 220 220 w1` -197 -1032 (, and) -0.093643 0 100 1 4 A1` /AC 220 220 w1` -97 -1032 ( size) -0.104065 0 94 1 4 A1` 0 0 0 1 (Black) 1 T a` 4 975 -967 -975 -967 F jbd^ /AB 220 220 w1` -975 -894 (x ) -0.016678 0 38 1 1 A1` /AC 220 220 w1` -937 -894 (\321 ) -0.016678 0 59 1 1 A1` /AD 220 220 w1` -878 -894 (text cursor x-coordinate) -0.016678 0 479 2 23 A1` /AA 220 220 w1` -825 -810 (The canvas attribute) -5.297348 0 401 2 19 A1` /AC 220 220 w1` -424 -810 ( x) -5.887085 0 30 1 1 A1` /AA 220 220 w1` -394 -810 ( specifies the horizontal position of the text cursor, measured in pixels.) -5.297562 0 1369 11 73 A1` -825 -731 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -731 (col) 0 0 59 0 2 A1` /AA 220 220 w1` -457 -731 (,) 0 0 11 0 0 A1` /AC 220 220 w1` -446 -731 ( cursor) -0.089417 0 140 1 6 A1` /AA 220 220 w1` -306 -731 (, ) -0.08046 0 23 1 1 A1` /AC 220 220 w1` -283 -731 (row) 0 0 74 0 2 A1` /AA 220 220 w1` -209 -731 (, and) -0.08046 0 100 1 4 A1` /AC 220 220 w1` -109 -731 ( y) -0.089417 0 36 1 1 A1` 4 975 -666 -975 -666 F jbd^ /AB 220 220 w1` -975 -593 (y ) -0.016678 0 38 1 1 A1` /AC 220 220 w1` -937 -593 (\321 ) -0.016678 0 59 1 1 A1` /AD 220 220 w1` -878 -593 (text cursor y-coordinate) -0.016678 0 479 2 23 A1` /AA 220 220 w1` -825 -509 (The canvas attribute ) -1.09726 0 420 3 20 A1` /AC 220 220 w1` -405 -509 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -382 -509 ( specifies the vertical position of the text cursor, measured in pixels.) -1.097305 0 1357 11 71 A1` -825 -430 (See also:) 0.082596 0 172 1 8 A1` /AC 220 220 w1` -516 -430 (col) 0 0 59 0 2 A1` /AA 220 220 w1` -457 -430 (, ) -0.072128 0 23 1 1 A1` /AC 220 220 w1` -434 -430 (cursor) 0 0 127 0 5 A1` /AA 220 220 w1` -307 -430 (, ) -0.072128 0 23 1 1 A1` /AC 220 220 w1` -284 -430 (row) 0 0 74 0 2 A1` /AA 220 220 w1` -210 -430 (, and ) -0.072128 0 112 2 5 A1` /AC 220 220 w1` -98 -430 (x) 0 0 23 0 0 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 39 27 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31239 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1267 (Appendix D) 0.006516 0 431 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1023 (Keyboard Symbols) 0.090332 0 830 1 15 A1` /AA 220 220 w1` -975 -654 (Pressing a key on the keyboard produces an Icon event unless the key is a modifier key such as the) -2.572296 0 1950 19 97 A1` -975 -600 (shift key. Releasing a key does not produce an event.) -0.003159 0 1071 9 52 A1` -825 -521 (A key that represents a member of the character set, including traditional actions such as) 0.339752 0 1800 14 89 A1` -975 -466 (return and backspace, produces a string containing a single character. The control and shift) 8.122009 0 1950 13 91 A1` -975 -412 (modifiers can affect the particular character produced: For example, pressing control-H produces) -1.588715 0 1950 11 95 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica /AD /|______Helvetica T /Helvetica x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -358 ("\\b") 0 0 71 0 3 A1` /AA 220 220 w1` -904 -358 ( \(the backspace character\).) 0.008408 0 532 3 26 A1` -825 -279 (Other keys, such as function and arrow keys, produce integer-valued events. These values) -2.233154 0 1800 12 87 A1` -975 -225 (may be referenced symbolically by including the definitions contained in the library file ) -5.729019 -0.245605 1692 13 89 A1` /AD 220 220 w1` 717 -225 (keysyms.icn) 0 -0.272949 247 0 10 A1` /AA 220 220 w1` 964 -225 (.) 0 0 11 0 0 A1` -975 -171 (The following table lists the values of some of the most commonly used keys.) -0.007355 0 1564 13 75 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 40 28 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31240 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` /AA 220 220 w1` -515 -980 (defined symbol) 0.102539 0 316 1 13 A1` -112 -980 (value) 0 -0.018616 112 0 4 A1` 113 -980 (key) 0 -0.009155 73 0 2 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -515 -889 (Key_PrSc) 0 -0.005463 204 0 7 A1` /AA 220 220 w1` -112 -889 (65377) 0 0 115 0 4 A1` 113 -889 (print screen) 0.089523 0 241 1 11 A1` /AB 220 220 w1` -515 -822 (Key_ScrollLock) 0 -0.004166 316 0 13 A1` /AA 220 220 w1` -112 -822 (65300) 0 0 115 0 4 A1` 113 -822 (scroll lock) -0.012207 0 205 1 10 A1` /AB 220 220 w1` -515 -756 (Key_Pause) 0 -0.006363 234 0 8 A1` /AA 220 220 w1` -112 -756 (65299) 0 0 115 0 4 A1` 113 -756 (pause) 0 0.024719 120 0 4 A1` /AB 220 220 w1` -515 -653 (Key_Insert) 0 0.007858 219 0 9 A1` /AA 220 220 w1` -112 -653 (65379) 0 0 115 0 4 A1` 113 -653 (insert) 0 -0.014816 114 0 5 A1` /AB 220 220 w1` -515 -586 (Key_Home) 0 -0.008652 227 0 7 A1` /AA 220 220 w1` -112 -586 (65360) 0 0 115 0 4 A1` 113 -586 (home) 0 0.017761 114 0 3 A1` /AB 220 220 w1` -515 -520 (Key_PgUp) 0 0.006912 219 0 7 A1` /AA 220 220 w1` -112 -520 (65365) 0 0 115 0 4 A1` 113 -520 (page up) 0.026443 0 165 1 6 A1` /AB 220 220 w1` -515 -454 (Key_End) 0 0.003799 186 0 6 A1` /AA 220 220 w1` -112 -454 (65367) 0 0 115 0 4 A1` 113 -454 (end) 0 0.019531 77 0 2 A1` /AB 220 220 w1` -515 -388 (Key_PgDn) 0 0.006912 219 0 7 A1` /AA 220 220 w1` -112 -388 (65366) 0 0 115 0 4 A1` 113 -388 (page down) 0.004883 0 227 1 8 A1` /AB 220 220 w1` -515 -284 (Key_Left) 0 -0.011856 181 0 7 A1` /AA 220 220 w1` -112 -284 (65361) 0 0 115 0 4 A1` 113 -284 (arrow left) 0.040283 0 199 1 9 A1` /AB 220 220 w1` -515 -218 (Key_Up) 0 0.013504 163 0 5 A1` /AA 220 220 w1` -112 -218 (65362) 0 0 115 0 4 A1` 113 -218 (arrow up) -0.059402 0 189 1 7 A1` /AB 220 220 w1` -515 -152 (Key_Right) 0 -0.000763 211 0 8 A1` /AA 220 220 w1` -112 -152 (65363) 0 0 115 0 4 A1` 113 -152 (arrow right) -0.097656 0 232 1 10 A1` /AB 220 220 w1` -515 -86 (Key_Down) 0 0.002792 222 0 7 A1` /AA 220 220 w1` -112 -86 (65364) 0 0 115 0 4 A1` 113 -86 (arrow down) -0.080978 0 252 1 9 A1` /AB 220 220 w1` -515 18 (Key_F1) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 18 (65470) 0 0 115 0 4 A1` 113 18 (function key F1) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 84 (Key_F2) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 84 (65471) 0 0 115 0 4 A1` 113 84 (function key F2) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 150 (Key_F3) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 150 (65472) 0 0 115 0 4 A1` 113 150 (function key F3) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 216 (Key_F4) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 21<* VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1'6 (65473) 0 0 115 0 4 A1` 113 216 (function key F4) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 283 (Key_F5) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 283 (65474) 0 0 115 0 4 A1` 113 283 (function key F5) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 349 (Key_F6) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 349 (65475) 0 0 115 0 4 A1` 113 349 (function key F6) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 415 (Key_F7) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 415 (65476) 0 0 115 0 4 A1` 113 415 (function key F7) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 481 (Key_F8) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 481 (65477) 0 0 115 0 4 A1` 113 481 (function key F8) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 548 (Key_F9) 0 -0.007645 158 0 5 A1` /AA 220 220 w1` -112 548 (65478) 0 0 115 0 4 A1` 113 548 (function key F9) 0.001221 0 314 2 14 A1` /AB 220 220 w1` -515 614 (Key_F10) 0 0.016068 184 0 6 A1` /AA 220 220 w1` -112 614 (65479) 0 0 115 0 4 A1` 113 614 (function key F10) 0.001221 0 337 2 15 A1` /AB 220 220 w1` -515 680 (Key_F11) 0 0.016068 184 0 6 A1` /AA 220 220 w1` -112 680 (65480) 0 0 115 0 4 A1` 113 680 (function key F11) 0.001221 0 337 2 15 A1` /AB 220 220 w1` -515 746 (Key_F12) 0 0.016068 184 0 6 A1` /AA 220 220 w1` -112 746 (65481) 0 0 115 0 4 A1` 113 746 (function key F12) 0.001221 0 337 2 15 A1` O1` null null F b` 0 0 0 1 (Black) 1 T a` 4 -580 -1044 535 794 F bh^ 4 535 -948 -580 -948 F jbd^ 4 535 -714 -580 -714 F jbd^ 4 535 -349 -580 -349 F jbd^ 4 535 -52 -580 -52 F jbd^ 4 -156 794 -156 -1044 F jbd^ 4 55 794 55 -1044 F jbd^ $3 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 41 29 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31241 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1267 (Appendix E) 0.021164 0 426 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1023 (Event Queues) -0.069992 0 611 1 11 A1` /AA 220 220 w1` -825 -575 (Each window has an event queue, which is an ordinary Icon list. ) 1.728851 0 1337 12 63 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica /AD /|______Helvetica T /Helvetica x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 512 -575 (Pending\(\)) 0 0 199 0 8 A1` /AA 220 220 w1` 711 -575 ( produces an) 1.72879 0 264 2 11 A1` -975 -521 (event queue. An event is represented by three consecutive values on the list. The first value is the) -0.972702 0 1950 17 99 A1` -975 -466 (event code: a string for a keypress event or an integer for any other event. The next two values are) -1.761948 0 1950 19 99 A1` -975 -412 (Icon integers whose lower-order 31 bits are interpreted as fields having this format:) 0.002335 0 1688 12 84 A1` /AD 220 220 w1` -937 -321 (0) 0 10.097687 36 0 0 A1` -902 -321 (0) 0 7.805939 33 0 0 A1` -869 -321 (0) 0 0 25 0 0 A1` -806 -321 (0) 0 10.526505 36 0 0 A1` -770 -321 (0) 0 12.818253 38 0 0 A1` -732 -321 (0) 0 10.526505 36 0 0 A1` -696 -321 (0) 0 0 25 0 0 A1` -645 -321 (0) 0 14.998566 40 0 0 A1` -604 -321 (00) 0 12.248764 75 0 1 A1` -529 -321 (0) 0 0 25 0 0 A1` -467 -321 (0) 0 8.581116 34 0 0 A1` -432 -321 (S) 0 12.247787 43 0 0 A1` -390 -321 (M) 0 3.08078 41 0 0 A1` -349 -321 (C) 0 0 33 0 0 A1` -300 -321 (XXXX) 0 0.00325 122 0 3 A1` -159 -321 (XXXX) 0 0.00325 122 0 3 A1` -19 -321 (XXXX) 0 0.00325 122 0 3 A1` 122 -321 (XXXX) 0 0.00325 122 0 3 A1` /AA 220 220 w1` 281 -321 (\(second value\)) 0.066727 0 295 1 13 A1` /AD 220 220 w1` -937 -255 (EE) 0 2.790054 67 0 1 A1` -871 -255 (E) 0 0 31 0 0 A1` -816 -255 (MMMM) 0 -0.00325 153 0 3 A1` -647 -255 (MMMM) 0 -0.00325 153 0 3 A1` -469 -255 (MMMM) 0 -0.00325 153 0 3 A1` -300 -255 (YYYY) 0 0.00325 122 0 3 A1` -159 -255 (YYYY) 0 0.00325 122 0 3 A1` -19 -255 (YYYY) 0 0.00325 122 0 3 A1` 122 -255 (YYYY) 0 0.00325 122 0 3 A1` 281 -255 (\() 0 0 15 0 0 A1` /AA 220 220 w1` 296 -255 (third value\)) 0.000412 0 240 1 11 A1` -825 -176 (The fields have these meanings:) -0.020554 0 645 4 30 A1` /AD 220 220 w1` -675 -96 (X) 0 0.057404 31 0 0 A1` /AA 220 220 w1` -644 -96 (\311) 0 0.051651 46 0 0 A1` /AD 220 220 w1` -599 -96 (X) 0 0 31 0 0 A1` -525 -96 (&x:) 0 0 66 0 2 A1` /AA 220 220 w1` -459 -96 ( 16-bit signed x-coordinate value) 0.023499 0 662 4 32 A1` /AD 220 220 w1` -675 -17 (Y) 0 0.057404 31 0 0 A1` /AA 220 220 w1` -644 -17 (\311) 0 0.051651 46 0 0 A1` /AD 220 220 w1` -599 -17 (Y) 0 0 31 0 0 A1` -525 -17 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` -471 -17 (: 16-bit signed y-coordinate value) -0.012207 0 676 4 33 A1` /AD 220 220 w1` -675 62 (SMC) 0 0.012817 102 0 2 A1` -525 62 (&shift) 0 0 115 0 5 A1` /AA 220 220 w1` -410 62 (, ) -0.021774 0 23 1 1 A1` /AD 220 220 w1` -387 62 (&meta) 0 0 132 0 4 A1` /AA 220 220 w1` -255 62 (, and ) -0.021774 0 112 2 5 A1` /AD 220 220 w1` -143 62 (&control) 0 0 168 0 7 A1` /AA 220 220 w1` 25 62 ( flags) -0.021774 0 108 1 5 A1` /AD 220 220 w1` -675 141 (E) 0 0 31 0 0 A1` /AA 220 220 w1` -644 141 (\311) 0 0 46 0 0 A1` /AD 220 220 w1` -599 141 (M) 0 0 38 0 0 A1` -525 141 (&interval) 0 0 178 0 8 A1` /AA 220 220 w1` -347 141 (, interpreted as) -0.06102 0 304 2 15 A1` /AD 220 220 w1` -42 141 ( M) -0.067825 0 51 1 1 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Symbol /AE /|______Symbol F /Symbol x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 8 141 (\264) 0 0 25 0 0 A1` /AA 220 220 w1` 34 141 (16) 0 0 46 0 1 A1` /AD 164 164 w1` 79 122 (E) 0 0 23 0 0 A1` /AA 220 220 w1` 102 141 ( milliseconds) -0.06102 0 266 1 12 A1` /AD 220 220 w1` -675 220 (0) 0 0 25 0 0 A1` /AA 220 220 w1` -525 220 (unused; should be zero) -0.022247 0 472 3 21 A1` -825 299 (A malformed event queue error is reported if an error is detected when trying to read the) -0.432831 0 1800 16 88 A1` -975 354 (event queue. Possible causes for the error include an event queue containing fewer than three) 4.170639 0 1950 14 92 A1` -975 408 (values, or second or third entries that are not integer values or that are out of range. Only artificially) -4.169846 0 1950 18 105 A1` -975 462 (constructed events can produce such errors.) 0.013672 0 890 5 42 A1` O1` $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 42 30 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31242 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1267 (Appendix F) -0.091141 0 421 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1023 (Palettes) 0 0.011978 352 0 7 A1` /AA 220 220 w1` -975 -654 (Palettes are predefined sets of colors t6 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1khat are used with ) -0.916016 0 1118 10 57 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica /AD /|______Helvetica T /Helvetica x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 143 -654 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` 408 -654 (. Palettes also can be used to) -0.916016 0 567 6 29 A1` -975 -600 (limit the colors used by ) 0.004715 0 485 5 24 A1` /AD 220 220 w1` -490 -600 (ReadImage\(\)) 0 0 267 0 10 A1` /AA 220 220 w1` -222 -600 (.) 0 0 11 0 0 A1` -825 -521 (This appendix documents the contents of Icon\325s palettes and serves as a reference for the) 0.537964 0 1800 14 88 A1` -975 -466 (programmer. It is hard, though, to understand a palette just by reading about it. The program) 3.692673 0 1950 15 92 A1` /AD 220 220 w1` -975 -412 (palette) 0 0 138 0 6 A1` /AA 220 220 w1` -837 -412 (, which displays and labels the colors of the palette, provides a clearer introduction.) 0.006042 0 1691 13 86 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica-Bold /AE /|______Helvetica-Bold T /Helvetica-Bold x1` /$6 bmt^ /AE 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -283 (Grayscale Palettes) 0.061447 0 482 1 17 A1` /AA 220 220 w1` -825 -179 (The ) -2.599594 0 86 1 3 A1` /AD 220 220 w1` -739 -179 (g16) 0 0 76 0 2 A1` /AA 220 220 w1` -663 -179 ( palette, shown in Figure F.1, provides 16 shades of gray specified by the hexadeci-) -2.599625 0 1638 14 83 A1` -975 -125 (mal characters ) -2.92981 0 300 2 14 A1` /AD 220 220 w1` -675 -125 (0123456789ABCDEF) 0 0 441 0 15 A1` /AA 220 220 w1` -235 -125 (, with ) -2.92981 0 122 2 6 A1` /AD 220 220 w1` -113 -125 (0) 0 0 25 0 0 A1` /AA 220 220 w1` -87 -125 ( being black and ) -2.929977 0 332 4 16 A1` /AD 220 220 w1` 244 -125 (F) 0 0 28 0 0 A1` /AA 220 220 w1` 272 -125 ( being white in accordance with the) -2.929916 0 702 6 34 A1` -975 -71 (usual conventions of image processing. Actually, ) 1.839661 0 1015 6 48 A1` /AD 220 220 w1` 40 -71 (g16) 0 0 76 0 2 A1` /AA 220 220 w1` 116 -71 ( is just one member of a family of palettes) 1.839706 0 859 9 42 A1` -975 -16 (named ) -1.943283 0 150 1 5 A1` /AD 220 220 w1` -825 -16 (g2) 0 0 51 0 1 A1` /AA 220 220 w1` -775 -16 ( through ) -1.943283 0 184 2 8 A1` /AD 220 220 w1` -591 -16 (g64) 0 0 76 0 2 A1` /AA 220 220 w1` -514 -16 (, each providing the corresponding number of equally spaced shades from) -1.943359 0 1489 10 70 A1` -975 38 (black to white. Each ) -0.029831 0 418 4 20 A1` /AD 220 220 w1` -557 38 (g) 0 0 25 0 0 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Italic /AF /|______Palatino-Italic T /Palatino-Italic x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -532 38 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -506 38 ( palette uses the first ) -0.029831 0 428 5 23 A1` /AF 220 220 w1` -79 38 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -53 38 ( characters of this list:) -0.029831 0 439 4 24 A1` /AD 220 220 w1` -900 117 (0123456789ABC\311XYZabc\311xyz{}) 0 -0.003418 703 0 25 A1` /AA 220 220 w1` -975 196 (In every case ) -0.006699 0 275 3 13 A1` /AD 220 220 w1` -700 196 (0) 0 0 25 0 0 A1` /AA 220 220 w1` -675 196 ( is black and the rightmost character is white.) -0.006699 0 917 8 46 A1` -825 275 (For palettes with more than 64 entries, it becomes more difficult and eventually impossible) -3.001282 0 1800 13 90 A1` -975 329 (to stay within the printable characters. The remaining grayscale palettes, ) -4.466019 0 1435 10 74 A1` /AD 220 220 w1` 460 329 (g65) 0 0 76 0 2 A1` /AA 220 220 w1` 536 329 ( through ) -4.465927 0 179 2 8 A1` /AD 220 220 w1` 715 329 (g256) 0 0 102 0 3 A1` /AA 220 220 w1` 817 329 (, use the) -4.465927 0 158 2 8 A1` -975 384 (first ) -0.017395 0 92 1 5 A1` /AF 220 220 w1` -882 384 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -857 384 ( characters of ) -0.01738 0 280 3 14 A1` /AD 220 220 w1` -577 384 (&cset) 0 0 115 0 4 A1` /AA 220 220 w1` -462 384 ( instead of the list above. The ) -0.01738 0 602 7 31 A1` /AD 220 220 w1` 140 384 (g16) 0 0 76 0 2 A1` /AA 220 220 w1` 216 384 ( palette is shown below.) -0.01738 0 487 4 23 A1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Katmandu:Desktop Folder:Graphics Book:GIPD:g16.tiff %ALDImageDimensions: 302 182 %ALDImageCropRect: 0 0 302 182 %ALDImageCropFixed: 0.00000 0.00000 302.00000 182.00000 %ALDImagePosition: 233.550 197.450 233.550 284.800 378.500 284.800 378.500 197.450 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 42336 33161 28442 61275 3277 46858 37617 24248 65535 19529 15335 11403 56229 7274 51642 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599338 0.000000 0.000000 9.598901 -1449.000000 2224.000000] concat false 302 182 8 false %%BeginData: 111389 Hex Bytes iI^ 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C8 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1T 2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0iJJM7goLBT~B!Vn~pBcZRf8}v:N ,YYU[Q{.Nf^+ s{,;ny,} : R,:.>D#rJ@G^)vW~Iv ArfG3+@< ;4n lVQ ~|CE0Av],]tF xf#^%zgJL4GZ`kMc"*haVk9 XA~MJB$7GMT0 (3z2)l0s!BI]4C.[hIW?&axEjr)iUU87/ARiUM#Xyq{]kMa[eS77ywl4CEKhBlY+( Q Kbexa1uh`2!'.qQ\<.:}dUI-Na:2uDE)?}bJTmhmQo|5uylf<5j9jHj@$ lc9D}UNV6N)ntwzlo^;FM/6~ UPVaShnQlS#%  7`N|H3 ZN1*d8:2@CHYk@: k(A _X4JF83/7h-N:hP =(|g29lZb!'+r[QLyN.BXpHJ,^EK"c12'&n3tGGMJ&@CTOs9>MiXD-WGMv#S\0* _lq,B&*?'AA: v /n@[QE3HyU?a Rr-*}T*8~/\L/O 0+5{ h` tt>cej~E>g=T*VP_j#`Z(g+vet m,sqpE*gsGcn4;s ["q#8+1261wbcSAOs&qc{<\F2^7$3I#o guDnI6/{\L=r8R00B mAQouvM9 }yUs#),sd7L@|- $gWmUE"s%oe"$u)NHjjs&?}PX/kve,QgBKw[G<?L'*(ezSyfZ.i!i;DWZ7;)"liBT3R~4DeFF3p [F5iNba4J ]!i/Du",{Oe$X,7l'v;E<hTM,I&)+JadK"TVC py[`!iQ^I:C5if +yz]9, 'lEjF2`ExjSG> @P`e{ISoco> Fp";5*waZ':tMR-vWb NY(a~!S()i:q<0:Q#Xz6 KS"l.U4{$Mb_k`v kf[Z LdXQ51XhAoRuMTH^?@H-b  G[G_,t"y)A\No'1Yr!M,d>+[O{pVDu^ZFn|QwcK[^tLV@/giHMTd{ -,J\^Pu6( V IOj}~iz4\G*+:.hT65(cE4LA6`BYEb!wjsmD195?$L@ f"I2(;?wFaFw"<{R%)8}#2~ pA-DEOZ3\^AI m},{ePa8Q)@W"\FSEv6qdd$b%_bMnd e$Q*2 D 8jQ [ec.FAHzX o|@l/,dF?ka60b_4)1- `hX ,v V ett7Vthnd'OV"gH!EH3.:XVsnbATQgg>2l] bIJ,KY`eU;zfik yru"UwwsL},f;B#7'>L 2 dj>S|ge.tK\LK tZS/H7qkXLCewkuNsA,[]{($[Vpg|'J"-dj'UZ/9of{nq;$uE?A [v.d*z#4`"1*' gET 9 1Vy}VU\I8G^gPnC~'Q"A]'pKx 0[=7og&$KAW -d#_t#Z6gs>jq8'txb|j & mIrAzO8CISqk\L L!GKKwq;8Cdt}51 Rda{sKyQ%@RBG0 9{ #pK9p\>!m%\H+NCaA#2Q_h6LIq[$:A_jxG8s`azr <%\Ov (B<i,F^S_6jsj)`L#DSem]f_8#V$8-?v3wH:/&8O "E0]K}ey{5U&jR-yZ#Wo!y6idJ.'.ERK$X%mh9d5 LMu% R_zBz Q K>vE(UlAo{ Pp9;pfR59K=]gPa]?n^0T8M4@J,5ac &e%{}v+ %uOP !{bJD8";N3|vJ3yl%}HwRRnB(fQ^7 *|X&JX xfH5Kl z@r06xY53T3qD1q& Pp Y l+/K?Fw^HN hyoI\nZi89/x%*mCyE-6CwkgSA_ 8- &{qjzW"&:r G!cgd:wjy9ZFO301hE8w_,i 33 vhwFuNzW3T4'X8PGV&JbNt@FvRA/K7 UkMOv]}D6(2;8c!XXMJOt,1]IKVDLWcWJnc}I]0NT~~*lK Ky9x<S!If}yQ~@E5tzq0YyP A^MC~9((MB_\{U&k'iK5u>vXA 01hX,Ux2*8)aeY>>J7H@nqB( |o\vNuAZZqAjEjr|NPPN@EM"=>moY{E64:.o/.uNlDOm"AB!n6@X0|uCy'6K9N_Anx3qZG4UU|$F%d@To3*]z-0S3[}QqpX'|NJDw33.y(&X#7*Hs@ggRExf|o )nTp~l%5"%eg7BKcj $\Htq]/+a4!&2k!;Q ?[Kb;BqeVr&4:OPO$wnSLsBi%R+X{6_,\Hc 6G )T!6bG!A#>{m 3*^} W|C}#XOn")gjtHlj(No;V!q<@5qx27nzG )c]NC@"\>0hNV,yS54(wq0N.A(V D#J|x]4y|jSS B"ce 5c8/:R%P3SWEg*sXm5,[4Kr,:8e RtW@Q:ZCEcL-)t}TvEl-Po4q\,2dOL]4hDO@OO s(: O|h3&=\n+NSJY3wQ,'+*q,PAJ9o3% _~ITP22glRu R3t0)Fd5E">[U UD_:eFbK=*Cwv],?7C*#cl*';2T)SX[TKg0/fr(U">K#t" ce,^~?.X*~ whOI&j4b[cxezRS|{wO4#HyGOC#H$HVlUcM kfg(2 [Ge~/"AZe^-T ,XR#A}|NfodY'>Pt_X2g dx:RP{\uxC($fhdB]V1:18* eW4`a7jn YoQU>sGtv^ugCr$&K?oFVwXe/SsVJ0.`j*k$*;c &=*dsmh}B$4T{aCjhtnt"<@hW%uA/_+(pRK'bH<<46k:y?R$OFcC j7Nd9,$?-B1=nB 0 2/owWp ~"yoLK[%8Hj#p)b bA!ZHMl bFT(ac6"a1;1 650s>k[\?O,Ztv 2YNMC~>1<`_ EM [n!mi/_@F[6kC!~qdDGhZ4lCIsGek F[!@fBal)R#P/&j`etUWmQDISjRW1GO/~ 3],&mX5>d UBV{~tS4VB[ Ccb(r1W8!zL*l^Psn60>:*7MwPjUlM( e1%{Uq74KdUl6h%RT}-@rzE|yGFBd~\eiw}%Sx5zS)#wamS1W$yRnfV1c(e<J8,KxMTZLI!\$iUh[W5]/d85/3rv ;;] XwH}CIkd>p0Ksa{?u?o$Lft i %FyxTKtLBS^I\iFBr^ L9_YHe F)g%@FTF1[+gFv"19*P`+ b&^bUz2D8(DF]cLpHZ.03{%{.fO"YQ@T'h>3nv dG!mJmz=l 4DVI63B)N!6i\TFZieTae A#loL?~?ID?3T/FNl@yW^!\ZcDZ)Qv{Y9&Zo\BB17Cwt +1)Y9[ [oj]^ %r2-yY.Dn|(}t_uBF[a'$M]i[i\\r(9 ]& g1}6BPt4rLn57L-/'v;YU=PSdz0Sv[)r]9fF TEk'U(lwo8/:!T4Timevthj]?] 2vY`aRYrR0ce1{C omU*s$/!.,1B8Tw6;U*t2b( I2pSp^`#FA5*-o b"dAp  ftM":N~O[er@Q>!#YKAv44X2[. kY//m$X*qzBVc.VTH5s,,evGI'{[0QctIRF+J$M>'}/3>W t{p_W;`b%}FAy7R^xY@.oG;euvBa(" c]~#O r AY1Vi[_TGjk:f_A}}qqd%=t?Y`(%m)'v\~A?o1{D$*U F,\!=g VFA"h[<,7)Prn;E9gp2vCkg7dA1gQY>D,;tqCG%45*YdX!zUL%xRm/5O:x7o>B<Kr'u?q.VK|I7Ys="{ T0B_l.p{ QKx :`PFs:J3-z3+\I#M(6 -OnfyeUiGLrQ.uVHL% 2acBO :0ov+pf]?-oe%cMn|r#o@@JfYLnOvxqU L. w wJQ^}Px/pLTC3gD5NR71L{i%pzE[9raf\ZV7q[VsC0{H>=>LQeG2,Y+yfJM!g%r(K Bs%y_@?"mu:> dp c'%y5R]3NKB#V`5"|dm"!)J TRQsP 7~DA/zD*[#dm> 2 $evLy= B t_v*GMh,[Ci E#i\8W`CE)(7=,x")y(oJM-k6txp;d2%g/^qM|X~ ";]AMLbp~c&M^F| *ce_Ky8^p3vP+7fGAm2 DZq! )nrLqZg;O|oz3#Gd4D8snr7(eI>xxy 69PZ]!^{ y23AlvSocmO5z[Ds ]V^,Kk[-UscDg~g~ o.N2/Ypjg K=@l:'IN Gqs@BZSc j 8 <1;##ykI} X^Op]79r|O/\arv-I_G>)YJ 4EkZU \8B4j p8#&bU$\yd.[xjU2C:II?M@ [n+ZR^B=49_\-QH5 F3}uu.p)k9w0kjTDpW2U-p b&}zG F"xR`,AYS#wylo4u/QPAw:;X%@sZ)0];9VA%s,P] Qj=7Ce$p<] 4I CH=z{2@'BrAOc%29<}*?dqad!F !CrC~r"\YDb 0e EN#B:Dy^`F!l22AE0dU<^%*D|fsG 'Gda2ottB\Nz|,e%p vR$8:YA[j[exye3a`ApG co'?sP*KI-Q.,9)p,dl@3/gY$^?5cFpYM)1d[g i@"|rQzwF49|U'zaHlPk|zVd"|@`&"_="6~2AX[)bLy_m#98'9`|Qew8rtu$?#iN;[BUL*Co0H#C 53Pba4=T46XK`sXr?"h9o) Pu* )[=m1NrrWX2c#A3i}&Pp\_r]]H2O$tv_4%ym[U)2KEON{:WIaC Ru |3 *!^Pt6^h{u^O\s#WIJ2vS' B4dg 1n@P:U{2z~}7;S5?L4WmH8;E6OH_V)q:;.kHxst'^D.YxQ**VY6OgM <%U Ci %OJ:$?' B#g] z]w/2Fq,W2 ,T0[})t UC}Q_$?7 gRt)IF2cq;W=,:_r71F#8m(ye6OY2Z@[BR)U^=_| x$ik8q$kh~ZIDjn"|qc l4%Sa| 5-h*o)cb?dN+7zpq0W`O~ VMS.BCK [V9.DOCS]IPD255.PS;22EXE;1ܗC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF FFFF00000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFFFFFFFFFF1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFFFFFFFFFF2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 0000000000000000000000000000000000000000000000000000000000000000000000FFFF0000 00FFFF000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFFFFFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1CFFFFFF1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2CFFFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 0000000000000000000000000000000000000000000000000000000000000000000000FF000000 0000FF000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFFFFFF2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 00000000000000000000000000000000000000000000000000000000000000000000FFFF000000 0000FFFF0000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 0000000000000000000000000000000000000000000000000000000000000000000000FF000000 0000FF000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFF1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 0000000000000000000000000000000000000000000000000000000000000000000000FFFF0000 00FFFF000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFFFFFFFFFFFFFF1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFF2 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1X(C2C2CFFFFFF2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF FFFF00000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1CFFFFFFFFFFFFFFFF1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2CFFFFFFFFFFFF2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0COK VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;170C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FY VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 +F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFFFFFFFFFFFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFFFFFF5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFFFFFFFFFFFFFFFF6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B FFFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFFFFFFFFFFFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFFFF5E5EFFFF5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFFFFFFFFFFFFFFFF6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFF FFFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFF4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFFFF 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFF4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFF3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFF4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5EZ1 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1U5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFF3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFFFFFFFF4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5EFFFFFFFF5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFFFF3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFFFFFF 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFFFF5E5E5EFFFF5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFFFF3B3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5EFFFF5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFFFF3B3B3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5EFFFF5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BFFFFFFFFFFFF FFFFFFFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5EFFFF5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5E5E5EFFFF5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFF4C4C4CFFFF FF4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFF5E5E5EFFFF5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3BFFFF3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4CFFFFFFFFFFFF 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5EFFFFFFFFFF5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6FFFFF6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3g VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;12dB3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F 6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F00 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5AR3) VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1js5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181lQ VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1 818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181000000 000081818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292000000000092 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700000000000000B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818100008181 810000818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929200009292920000 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7000000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181810000818181 818100008181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292920000929292929200 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A500000000A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7B70000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181810000818181 818100008181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292920000929292929200 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A500A50000A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7B70000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181810000008181 818100818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292920000929292929200 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A50000A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7B70000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818100000000 810081818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292920000929292929200 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A500A5A5A50000A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B70000B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181000000 000081818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929200009292920000 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A5A50000A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7000000000000B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818100008181 000000818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292000000009200 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A500A5A5A5A5A50000A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B70000B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181810000818181 810000008181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929200 00929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5000000000000000000A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7B70000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181810000818181 818100008181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929200 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A5A5A5A50000A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5/2 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1cMA5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7B70000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181810000818181 818100008181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292920000 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A500A5A5A5A5A5A5A50000A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7B70000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818100008181 810000818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292920000929292000092 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A5A5A5A5A5A50000A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B70000B7B7B7000000B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181000000 000081818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929200000000009292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A50000A5A5A5A5A5A5A50000A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700000000000000B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292A VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 008181818181818181818181818181818181818181818181818181818181818181818181818181 818181818181818181818181818181818181818181818181818181818181818181818181819292 929292929292929292929292929292929292929292929292929292929292929292929292929292 92929292929292929292929292929292929292929292929292929292929292929292A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B700 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0 7} z z z}}}}}yG0@       BD 6zxzxzxzx{x{xz{zMN6 BG yyyyyz~z~y6C} }~z~z } | | { {B7E} } } } } } } } IJrqq vv309{r{r     xEM4{{{{{{{{{1 C~ } }      I~Nr7;4K  1 4zzr{q{yzx|x|x|x|x|@ 7}y}y}y}y}y}y}y}G6@y     yyDOwN07~~~~~~~~~}50B{{0E{ { { z z { {F:w9wwwwww u u1~E3        6C}~}~}~}~}~}~}~x5@Ar r FEr qq    yy3 06{}{} BD2t}t}xxxxxt}AtD  x x x x|} 4y3}}}}}yxyx{A2BBy~y~y~y~y~y~y~y~LwMrr5y2 z z z}}}}}}yG0@     yyBD 6zxzxzxzx{x{xz{zMNqqqq6 BG yyyyyz~z~y6C} }~z~z } | | { {B7E} } } } } } } } IJrqq EtF9       xEM4~~~~~~{{{1 C~ } }      I~Nr7;4K  1 4r{r{yzyzx|x|x|x|x|@ 7}y}y}y}y}y}y}y}G6@y       DOwNqq5z2 z z z~~~~~~}50B{{{{0E{ { { z z { {F:w9 u uwww u uw1~E3        6C}~}~}~}~}~}~}~x57Dr r r r r r r r r FEr qq   yyE{F6 {}{} BD2t}t}t}t}t}xxx3qD  x x x|}|} 4y3}}}}}yxyx{A2BBy~y~y~y~y~y~y~y~LwM0 7}}}}}}}}}yG0@  yyyyyBD 6zxzxzxzx{x{xz{zMNqqq6 BG yyyyyz~z~y6C}~z~z~z } | | { {B7E} } } } } } } } IJrqq EtF9       xE:1~{{{~~~{{1 C~ } }      INr7;4K   15r{zzyzyzx|x|x|x|x|@ 7}y}y}y}y}y}y}y}G6@y       DOwNrq07~ z z z~~~~~}50B{{{{0E{ { { z z { {F:w9w u u u u uww1~E3        6C}~}~}~}~}~}~}~x57Dr r r r r r r r r FEr qq   y E{F6 {} BD2t}t}t}t}t}t}t}x3qDq x x x|}|} 4y3}}}}}yxyx{A2BBy~y~y~y~y~qqqLL 0 7}}}}}}}}}yG0@     yyBD 6zxzxzxzx{x{xz{zMNqq6 BG yyyyyz~z~z~z11z~z~z } } | | { {B7E} } t t t t t } IJrqq EtF9       xEM4{{{{{~~{{1 C~ } }     zINr7;4K1 4zzzzyzyzx|x|x|x|x|@ 7}y | |}y}y}y}y}G6@y       DOwN07~~ z z~~~~~}50B{{{{0E{ { { z z { {F:w9wwwwwwww1~E3     | | | |11z z z~}~}~}~}~x57Dr r r r r r r r r FEr qq  yy E{F6 {}{} BD2t}t}t}t}t}t}t}t}3qDq x x x x x 4y3}}}}}}}{A2BBy~y~y~y~qqy~y~LwM  0 7}}}}}}}}}yG0@     yyBD 6zxzxzxzx{x{xz{zMNqq6 BG yyyyyyyy6C} } } } } | | { {B7E} t t } } } t t IJrqq EtF9       xEM4{{{{{~~{{1 C~ } }     zINr7;4K1 4zzzzyzyzx|x|x|x|x|@ 7}y | |}y}y}y}y}G6@y       DOwN07~~ z z~~~~~}50B x x x x x xFF| | | | |   EHtK2 FA    xx  DC~~y~y~y ~ ~ ~ 6EG47qyrzrz } | |} }F EDyyxxyyy{FD2p}p}p}p}p}p}p}p}7q@q x x x x x 4}3 } } } } } } } {E2FB}~}~}~uu}~}~}~HwM4 3}{}{}{}{}{}{}{}{}}G4@{     y y FD 6~x~x~x~x~~~}~INuu2 FA        0G{{{{{zz} }F1 Cppy y y y y pMHvuu     ArB?       |AK0yzyz7Ez yyM{N        w3>0N50~~|~|~}x}x}x}x}xE2yyyyy|y|y|yzC3@}        @JsK4 3{{~~{{{{{{{{{{{}50B BF | |   EHtK2 FA    xx  DC~ ~~y~y ~ ~ ~ 6EG47qyrzrz } | |} }F EDyyxxyyy{FD2p}p}p}p}p}p}p}p}7q@q x x x x x 4}3 } } } } } } } {E2FB}~}~}~uu}~}~}~HwM4 3}{}{}{}{}{}{}{}{}}G4@{     y y FD 6~x~x~x~x~~~}~INuu2 FA        0G{{{{{zz} }F1 Cppy y y y y pMHvuu     ArB?       |AK0yzyz7Ez yyM{N        w3>0N50~~|~|~}x}x}x}x}xE2yy|yyy|y|y|yzC3@}        @JsKt16~~{{{{{{{{{{{{{}50B BF | |   EHtK2 FA    xx  DC~ ~~y~y ~ ~ ~ 6EG{{{{{{{{{O LyzzptptNrM?ptptsN?: u uypyp u u uyp7 H x{{OuHMIN9uuu}}}uu@ E{ s { { z z }v}v4pC :D= ryryryryry||r69}K:x>v{u{u{uvv{u{u2q6<~||||||||M7xxxxxxxy6L{>rr p p p p pr=r8 rqq u u u u uAv1;zzzzzzz2OC } } 3{A  r r r{r{r >=vvvvvvv3:CJssssssssF C{ { x x y y y y y A 3{} x x{}{} x x ~073y{ { { { { { { {@NOqqqqppqqEB        1AF | | | | | | | 3Bx x x y y xxELOwwwwwwwwC7E{|{|{|{|{|||{|@2z}z}}}z}z}z} 6EG{{{{{{{{{O LyzzptptNrM?ptptsN?: u u uypypypypyp7 Hxx{{OuHMIN9uuuu}}}}@ Es { { { z z }v}v4pC :D= ryryryryry||r69}K: =vvvvv{u{u{u2q6<~||||||||M7xs|s|xxxxy6L{>rr p p p p pr=r8 rqq u u u u uAv1;zzzzzzz2OC } } 3{A  r r r{r{r >=vvvvvvv3:CJss4 C { x x y y y y y A 3 x x x{}{} x x ~073y{ { { { { { { {@NOqqqqppqqEB        1AF | | | | | | | 3Bx x x x x y y xxELOwwwwC7E{|{|{|{|{|||{|@2z}}}z}z}z}z} 6EG{{{{{{{{{O LyzzptptNrM?ptptsN?: u u u u u u u uEHxx{{qqqqOHttttMIN9uuuuu}}}@Ds { { { z z }v}v4pC :D= ryryryryry||r69}K: ={u{u{u{u{u{u{u{u2q6<~||||||||M7s|s|s|xxxxy6L{> prr p p prr=r8 rqq u u u u uAv1;zzzzzzz2OC } } 3{A  r r r r r >=vvvvvvv3:CJss4 C { x x y y y y yzD 3 x x x{}{} x x ~073y{ { { { { { { {@NOqqqqppqqEB        1AF | | | | | | | 3Bx x x x x y y xxELvLwwwwC7E{|{|{|{|{|||G@}}}z}z}z}z}z} 6EG{{{{{{{{{O LyzzptptNrM?ptptsN?: u u u u u u u uEHxx{{qqqqOHttttMIN9uuuu}}uu@Ds s { { z z }v}v4pC :D= ryryryryry||r69}K: ={u{u{u{u{u{u{u{u2q6<~||||||| I7s|s|s|xxxxy6L{> p prrrr pr=r8 rqq u u u u uAv1;zzzzzzz2OC} } 3{A  r r r r r >=vvvvvvv3:CJsssssssF C{ { x x y y y y yzD{6 x x x x{}{} x ~073y{ { { { { { { {@NOqqqqppqqEB        1AF | | | | | | | 3Bx x x x x y y xxELvLwwwwwwwC7E{|{|{|{|{|||{|@2z}}}z}z}z}z} 6EG{{{{{{{{{O LyzzptNrM?ptsN?: u u u u u u u uEHxx{{OuHttMIN9uuu}}uuu@ Es s s { z z }v}v4pC :D= ryryryryry||r69}K: ={u{u{u{u{u{u{u{u2q6<~||||||  I7xs|s|xxxxy6L{> p p p p p p pr=r8 rqq u u u u uAv1;zzzzzzz28F} 3{A  r r r r r >=vvvvvvv3:CJsssssssF C{ { x x y y y yz|zD 3{}{}{}{}{}{} x ~073y{ { { { { { { {@NOqqqqppqqEB        1AF | | | | | | | 3Bx x x x x y y xx6OvLwwwwwwwwC7E{|{|{|{|{|||{|@2z}z}}}z}z}z} 6EG{{{{{{{{{O LyzzptptNrM?ptptsN?: u u u u u u u uEHxx{{OuHttMIN9~v~v~vvwvw~v~v~vKN  }}G{0 x x x x x x x x ~176xy y y y y yE9v8vvvvppss1x6~~~~~~~~AzE7       z FD xx  GLvO 0 7zy|y|xxxxxxxxxx0{@6 ~ C57pxpxpxpxpxpxpx}}3v0~}}zzzzz30~{~{~{~{~{~{~{~ B72Gp 72v|v|u|u| { { {  DF~~~~  ~~DGG {{{{{{{0:r;uuuusp+L VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1ǧFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000 00000000C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000000000000000DB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF00000000000000EFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9000000C9 C9C9000000C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDB0000 00DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1B0000DBDBDBDBDBDB00 00DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDBDB 0000DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDBDB 0000DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDBDB 0000DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDBDB 0000DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF000000000000EFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDBDB 0000DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDBDB 0000DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDB00 00DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9000000C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDBDBDB00 00DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9000000C9 C9C9000000C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB0000DBDBDBDB000000 DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0000EFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C90000 00000000C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB00000000000000DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF00000000000000EFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9 C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9DBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF iM VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1) 0 0 27 0 0 A1` /AA 220 220 w1` -825 -120 (blue) 0 0.01532 88 0 3 A1` /AC 220 220 w1` -467 -120 (w) 0 0 33 0 0 A1` -303 -120 (W) 0 0 43 0 0 A1` -133 -120 (J) 0 0 23 0 0 A1` 32 -120 (j) 0 0 10 0 0 A1` 199 -120 (\() 0 0 15 0 0 A1` 367 -120 (\)) 0 0 15 0 0 A1` /AA 220 220 w1` -825 -60 (purple) 0 -0.018631 136 0 5 A1` /AC 220 220 w1` -461 -60 (x) 0 0 23 0 0 A1` -297 -60 (X) 0 0 31 0 0 A1` -137 -60 (K) 0 0 31 0 0 A1` 26 -60 (k) 0 0 23 0 0 A1` 200 -60 ([) 0 0 13 0 0 A1` 369 -60 (]) 0 0 13 0 0 A1` /AA 220 220 w1` -825 0 (magenta) 0 0.008408 175 0 6 A1` /AC 220 220 w1` -461 0 (y) 0 0 23 0 0 A1` -297 0 (Y) 0 0 31 0 0 A1` -135 0 (L) 0 0 25 0 0 A1` 32 0 (l) 0 0 10 0 0 A1` 199 0 ({) 0 0 15 0 0 A1` 367 0 (}) 0 0 15 0 0 A1` /AA 220 220 w1` -825 60 (magenta-red) 0 0.00647 259 0 10 A1` /AC 220 220 w1` -461 60 (z) 0 0 23 0 0 A1` -295 60 (Z) 0 0 28 0 0 A1` -141 60 (M) 0 0 38 0 0 A1` 18 60 (m) 0 0 38 0 0 A1` 195 60 (^) 0 0 21 0 0 A1` 362 60 (=) 0 0 27 0 0 A1` /AA 220 220 w1` -825 120 (pink) 0 0.023605 93 0 3 A1` /AC 220 220 w1` -135 120 (7) 0 0 25 0 0 A1` /AA 220 220 w1` -825 181 (violet) 0 0.017899 115 0 5 A1` /AC 220 220 w1` -135 181 (8) 0 0 25 0 0 A1` /AA 220 220 w1` -825 310 (Note that in the Icon color naming system, \322dark brown\323 and \322light brown\323 are the same) -0.576569 0 1800 15 85 A1` -975 364 (as two shades of red-yellow.) 0.025131 0 577 4 27 A1` /AB 260 260 w1` -975 493 (Uniform Color Palettes) -0.009354 0 587 2 21 A1` /AA 220 220 w1` -825 597 (Programs that compute images can more easily use a palette having colors that are in some) -2.877121 0 1800 15 88 A1` -975 651  ǘW VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1'(sense \322equally spaced\323. The ) -0.987076 0 576 4 27 A1` /AC 220 220 w1` -399 651 (c3) 0 0 48 0 1 A1` /AA 220 220 w1` -351 651 (, ) -0.987076 0 22 1 1 A1` /AC 220 220 w1` -329 651 (c4) 0 0 48 0 1 A1` /AA 220 220 w1` -280 651 (, ) -0.987076 0 22 1 1 A1` /AC 220 220 w1` -259 651 (c5) 0 0 48 0 1 A1` /AA 220 220 w1` -210 651 (, and ) -0.987076 0 110 2 5 A1` /AC 220 220 w1` -100 651 (c6) 0 0 48 0 1 A1` /AA 220 220 w1` -52 651 ( palettes are designed with this in mind, and the ) -0.987045 0 978 10 49 A1` /AC 220 220 w1` 927 651 (c2) 0 0 48 0 1 A1` /AA 220 220 w1` -975 706 (palette can also be considered part of this family. The larger palettes allow better color selection and) -4.521835 0 1950 16 103 A1` -975 760 (subtler shadings but use up more of the limited number of simultaneous colors.) 0.000534 0 1613 12 77 A1` -825 839 (For any of these ) -1.65004 0 328 4 16 A1` /AC 220 220 w1` -497 839 (c) 0 0 23 0 0 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Palatino-Italic /AE /|______Palatino-Italic T /Palatino-Italic x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -474 839 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -448 839 ( palettes, the palette provides ) -1.65004 0 598 5 31 A1` /AE 220 220 w1` 150 839 (n) 0 0 25 0 0 A1` /AA 220 220 w1` 175 839 ( levels of each primary color; letting ) -1.65004 0 727 7 38 A1` /AE 220 220 w1` 902 839 (m) 0 0 36 0 0 A1` /AA 220 220 w1` 937 839 ( =) -1.65004 0 37 1 1 A1` /AE 220 220 w1` -975 893 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -950 893 ( \320 1, these levels range from 0 \(off\) to ) -0.680878 0 749 10 40 A1` /AE 220 220 w1` -201 893 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -165 893 ( \(full on\). The palette also provides all the colors that can) -0.680862 0 1140 11 60 A1` -975 947 (be obtained by mixing different levels of the primaries in any combination. Mixing equal levels) 1.848007 0 1950 14 94 A1` -975 1001 (produces black \(0,0,0\), white \() -0.25882 0 604 4 30 A1` /AE 220 220 w1` -371 1001 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -335 1001 (,) 0 0 11 0 0 A1` /AE 220 220 w1` -324 1001 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -288 1001 (,) 0 0 11 0 0 A1` /AE 220 220 w1` -276 1001 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -241 1001 (\), or a shade of gray. Mixing unequal levels produces colors.) -0.258804 0 1216 10 60 A1` -825 1081 (Each ) -2.095367 0 107 1 4 A1` /AC 220 220 w1` -718 1081 (c) 0 0 23 0 0 A1` /AE 220 220 w1` -695 1081 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -669 1081 ( palette also provides \() -2.095367 0 450 4 23 A1` /AE 220 220 w1` -219 1081 (n \320 ) -2.095367 0 67 2 3 A1` /AA 220 220 w1` -152 1081 (1\)) 0 0 38 0 1 A1` /AA 140 140 w1` -114 1064 (2) 0 0 15 0 0 A1` /AA 220 220 w1` -99 1081 ( additional shades of gray to allow better rendering of) -2.095367 0 1074 9 54 A1` -975 1135 (monochrome images. ) -1.11731 0 445 2 18 A1` /AE 220 220 w1` -530 1135 (n) 0 0 25 0 0 A1` /AA 220 220 w1` -504 1135 ( \320 1 intermediate shades are added in each interval created by the original) -1.117325 0 1479 13 74 A1` /AE 220 220 w1` -975 1189 (n ) -0.011093 0 37 1 1 A1` /AA 220 220 w1` -938 1189 (regular achromatic entries, giving a total of n) -0.011093 0 912 7 46 A1` /AA 140 140 w1` -26 1172 (2) 0 0 15 0 0 A1` /AA 220 220 w1` -12 1189 ( \320 1 + 1 grayscale entries.) -0.011093 0 503 6 26 A1` -825 1268 (The lists below specify the characters used by each palette. The ) -5.370911 0 1226 11 64 A1` /AE 220 220 w1` 401 1268 (n) 0 0 25 0 0 A1` /AA 152 152 w1` 427 1250 (3) 0 0 16 0 0 A1` /AA 220 220 w1` 442 1268 ( regular entries are ordered) -5.370789 0 532 4 27 A1` -975 1322 (from \(0,0,0\) to \() -1.853134 0 305 3 16 A1` /AE 220 220 w1` -670 1322 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -634 1322 (,) 0 0 11 0 0 A1` /AE 220 220 w1` -623 1322 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -587 1322 (,) 0 0 11 0 0 A1` /AE 220 220 w1` -576 1322 (m) 0 0 36 0 0 A1` /AA 220 220 w1` -540 1322 (\), black to white, with the blue component varying most rapidly and the red) -1.853134 0 1515 13 74 A1` O1` null null F b` 0 0 0 1 (Black) 1 T a` 2 -861 -1087 489 225 F bh^ 2 489 -957 -861 -957 F jbd^ $6 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 44 32 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31244 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` /AA 220 220 w1` -975 -1314 (component varying most slowly. These are followed in the right column by the additional shades) -1.521622 0 1950 14 93 A1` -975 -1260 (of gray from darkest to lightest.) 0.003418 0 641 5 32 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -900 -1175 (c2) 0 -0.036819 48 0 1 A1` /AA 220 220 w1` -852 -1175 (:) 0 0 11 0 0 A1` /AB 220 220 w1` -787 -1175 (kbgcrmyw) 0 -0.003189 206 0 7 A1` 112 -1175 (x) 0 0 23 0 0 A1` -900 -1114 (c3) 0 -0.036819 48 0 1 A1` /AA 220 220 w1` -852 -1114 (:) 0 0 11 0 0 A1` /AB 220 220 w1` -787 -1114 (@ABCDEFGHIJKLMNOPQRSTUVWXYZ) 0 -0.00116 854 0 26 A1` 112 -1114 (abcd) 0 -0.004196 99 0 3 A1` -900 -1054 (c4) 0 -0.036819 48 0 1 A1` /AA 220 220 w1` -852 -1054 (:) 0 0 11 0 0 A1` /AB 220 220 w1` -787 -1054 (0123456789ABC\311XYZabc\311wxyz) 0 -0.005493 706 0 24 A1` -82 -1054 ({) 0 5.494141 21 0 0 A1` -61 -1054 (}) 0 0 15 0 0 A1` 112 -1054 ($%&) 0 0.004013 97 0 2 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Symbol /AC /|______Symbol F /Symbol x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 209 -1054 (*) 0 0.003601 23 0 0 A1` /AB 220 220 w1` 232 -1054 (\320/?@) 0 0.004013 110 0 3 A1` -900 -994 (c5) 0 -0.036819 48 0 1 A1` /AA 220 220 w1` -852 -994 (:) 0 0 11 0 0 A1` /AB 220 220 w1` -787 -994 (\\000\\001 \311 yz) 0.0168 0 296 2 12 A1` -492 -994 ({) 0 3.666656 19 0 0 A1` -473 -994 (|) 0 1.832977 12 0 0 A1` 112 -994 (}~\\d\\200\\201 \311 \\214) -0.023605 0 419 2 18 A1` -900 -934 (c6) 0 -0.036819 48 0 1 A1` /AA 220 220 w1` -852 -934 (:) 0 0 11 0 0 A1` /AB 220 220 w1` -787 -934 (\\000\\001 \311 \\327) 0.021164 0 339 2 14 A1` 112 -934 (\\330\\331 \311 \\360) 0.021164 0 339 2 14 A1` /AA 220 220 w1` -975 -855 (For example, the regular portion of the ) -0.008377 0 798 7 39 A1` /AB 220 220 w1` -177 -855 (c3) 0 0 48 0 1 A1` /AA 220 220 w1` -129 -855 ( palette is interpreted this way:) -0.008377 0 628 5 32 A1` -825 -750 (char.) 0 0.02095 100 0 4 A1` -684 -750 (r) 0 0 18 0 0 A1` -613 -750 (g) 0 0 25 0 0 A1` -538 -750 (b) 0 0 25 0 0 A1` -375 -750 (char.) 0 0.02095 100 0 4 A1` -234 -750 (r) 0 0 18 0 0 A1` -163 -750 (g) 0 0 25 0 0 A1` -88 -750 (b) 0 0 25 0 0 A1` 25 -750 (char.) 0 0.02095 100 0 4 A1` 216 -750 (r) 0 0 18 0 0 A1` 287 -750 (g) 0 0 25 0 0 A1` 362 -750 (b) 0 0 25 0 0 A1` /AB 220 220 w1` -825 -665 (@) 0 0 46 0 0 A1` -688 -665 (0) 0 0 25 0 0 A1` -613 -665 (0) 0 0 25 0 0 A1` -538 -665 (0) 0 0 25 0 0 A1` -375 -665 (I) 0 0 13 0 0 A1` -244 -665 ( 1) -0.099289 0 38 1 1 A1` -163 -665 (0) 0 0 25 0 0 A1` -88 -665 (0) 0 0 25 0 0 A1` 58 -665 (R) 0 0 33 0 0 A1` 206 -665 ( 2) -0.099289 0 38 1 1 A1` 287 -665 (0) 0 0 25 0 0 A1` 362 -665 (0) 0 0 25 0 0 A1` -825 -605 (A) 0 0 31 0 0 A1` -688 -605 (0) 0 0 25 0 0 A1` -613 -605 (0) 0 0 25 0 0 A1` -538 -605 (1) 0 0 25 0 0 A1` -375 -605 (J) 0 0 23 0 0 A1` -244 -605 ( 1) -0.099289 0 38 1 1 A1` -163 -605 (0) 0 0 25 0 0 A1` -88 -605 (1) 0 0 25 0 0 A1` 60 -605 (S) 0 0 31 0 0 A1` 206 -605 ( 2) -0.099289 0 38 1 1 A1` 287 -605 (0) 0 0 25 0 0 A1` 362 -605 (1) 0 0 25 0 0 A1` -825 |: VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1+-545 (B) 0 0 31 0 0 A1` -688 -545 (0) 0 0 25 0 0 A1` -613 -545 (0) 0 0 25 0 0 A1` -538 -545 (2) 0 0 25 0 0 A1` -375 -545 (K) 0 0 31 0 0 A1` -244 -545 ( 1) -0.099289 0 38 1 1 A1` -163 -545 (0) 0 0 25 0 0 A1` -88 -545 (2) 0 0 25 0 0 A1` 61 -545 (T) 0 0 28 0 0 A1` 206 -545 ( 2) -0.099289 0 38 1 1 A1` 287 -545 (0) 0 0 25 0 0 A1` 362 -545 (2) 0 0 25 0 0 A1` -825 -485 (C) 0 0 33 0 0 A1` -688 -485 (0) 0 0 25 0 0 A1` -613 -485 (1) 0 0 25 0 0 A1` -538 -485 (0) 0 0 25 0 0 A1` -375 -485 (L) 0 0 25 0 0 A1` -244 -485 ( 1) -0.099289 0 38 1 1 A1` -163 -485 (1) 0 0 25 0 0 A1` -88 -485 (0) 0 0 25 0 0 A1` 58 -485 (U) 0 0 33 0 0 A1` 206 -485 ( 2) -0.099289 0 38 1 1 A1` 287 -485 (1) 0 0 25 0 0 A1` 362 -485 (0) 0 0 25 0 0 A1` -825 -424 (D) 0 0 33 0 0 A1` -688 -424 (0) 0 0 25 0 0 A1` -613 -424 (1) 0 0 25 0 0 A1` -538 -424 (1) 0 0 25 0 0 A1` -375 -424 (M) 0 0 38 0 0 A1` -244 -424 ( 1) -0.099289 0 38 1 1 A1` -163 -424 (1) 0 0 25 0 0 A1` -88 -424 (1) 0 0 25 0 0 A1` 60 -424 (V) 0 0 31 0 0 A1` 206 -424 ( 2) -0.099289 0 38 1 1 A1` 287 -424 (1) 0 0 25 0 0 A1` 362 -424 (1) 0 0 25 0 0 A1` -825 -364 (E) 0 0 31 0 0 A1` -688 -364 (0) 0 0 25 0 0 A1` -613 -364 (1) 0 0 25 0 0 A1` -538 -364 (2) 0 0 25 0 0 A1` -375 -364 (N) 0 0 33 0 0 A1` -244 -364 ( 1) -0.099289 0 38 1 1 A1` -163 -364 (1) 0 0 25 0 0 A1` -88 -364 (2) 0 0 25 0 0 A1` 53 -364 (W) 0 0 43 0 0 A1` 206 -364 ( 2) -0.099289 0 38 1 1 A1` 287 -364 (1) 0 0 25 0 0 A1` 362 -364 (2) 0 0 25 0 0 A1` -825 -304 (F) 0 0 28 0 0 A1` -688 -304 (0) 0 0 25 0 0 A1` -613 -304 (2) 0 0 25 0 0 A1` -538 -304 (0) 0 0 25 0 0 A1` -375 -304 (O) 0 0 36 0 0 A1` -244 -304 ( 1) -0.099289 0 38 1 1 A1` -163 -304 (2) 0 0 25 0 0 A1` -88 -304 (0) 0 0 25 0 0 A1` 60 -304 (X) 0 0 31 0 0 A1` 206 -304 ( 2) -0.099289 0 38 1 1 A1` 287 -304 (2) 0 0 25 0 0 A1` 362 -304 (0) 0 0 25 0 0 A1` -825 -244 (G) 0 0 36 0 0 A1` -688 -244 (0) 0 0 25 0 0 A1` -613 -244 (2) 0 0 25 0 0 A1` -538 -244 (1) 0 0 25 0 0 A1` -375 -244 (P) 0 0 31 0 0 A1` -244 -244 ( 1) -0.099289 0 38 1 1 A1` -163 -244 (2) 0 0 25 0 0 A1` -88 -244 (1) 0 0 25 0 0 A1` 60 -244 (Y) 0 0 31 0 0 A1` 206 -244 ( 2) -0.099289 0 38 1 1 A1` 287 -244 (2) 0 0 25 0 0 A1` 362 -244 (1) 0 0 25 0 0 A1` -825 -184 (H) 0 0 33 0 0 A1` -688 -184 (0) 0 0 25 0 0 A1` -613 -184 (2) 0 0 25 0 0 A1` -538 -184 (2) 0 0 25 0 0 A1` -375 -184 (Q) 0 0 36 0 0 A1` -244 -184 ( 1) -0.099289 0 38 1 1 A1` -163 -184 (2) 0 0 25 0 0 A1` -88 -184 (2) 0 0 25 0 0 A1` 61 -184 (Z) 0 0 28 0 0 A1` 206 -184 ( 2) -0.099289 0 38 1 1 A1` 287 -184 (2) 0 0 25 0 0 A1` 362 -184 (2) 0 0 25 0 0 A1` /AA 220 220 w1` -825 -79 (The complete set of grayscale entries in ) -2.679245 0 787 7 40 A1` /AB 220 220 w1` -38 -79 (c3) 0 0 48 0 1 A1` /AA 220 220 w1` 10 -79 (, merging regular and extra entries, is) -2.67926 0 743 6 38 A1` /AB 220 220 w1` 753 -79 ( @abMcdZ) -2.977432 0 222 1 7 A1` /AA 220 220 w1` -975 -25 (\(from black to white\).) -0.019394 0 438 3 21 A1` -825 54 (The sizes of ) 0.533432 0 250 3 12 A1` /AB 220 220 w1` -575 54 (c5) 0 0 48 0 1 A1` /AA 220 220 w1` -526 54 ( and ) 0.533432 0 102 2 4 A1` /AB 220 220 w1` -425 54 (c6) 0 0 48 0 1 A1` /AA 220 220 w1` -377 54 ( require that they include some nonprinting characters, so they are) 0.533432 0 1352 10 66 A1` -975 108 (better suited for computed images than direct specification.) 0.013306 0 1205 7 59 A1` O1` null null F b` 0 0 0 1 (Black) 1 T a` 2 -852 -797 413 -160 F bh^ 2 413 -731 -852 -731 F jbd^ 2 -449 -160 -449 -797 F jbd^ 2 -20 -160 -20 -797 F jbd^ $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 45 33 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31245 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1276 (Appendix G) -0.048828 0 435 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1033 (Changes from V) 0.018845 0 703 2 13 A1` -275 -1033 (ersion 8.10) 0.018845 0 479 1 10 A1` /AA 220 220 w1` -975 -663 (The graphics facilities of Version 9 of Icon reflect major changes with respect to the previous Version) -5.303696 0 1950 16 102 A1` -975 -609 (8.10. These changes improve the programming interface, reduce inconsistencies, add utility, and) 0.081558 0 1950 11 94 A1` -975 -555 (reduce the orientation towards a single underlying platform. Some changes, including function) 2.065155 0 1950 11 92 A1` -975 -501 (renaming, introduce incompatibilities. This is a one-time effort; no further major changes are) 6.283081 0 1950 12 93 A1` -975 -447 (planned.) 0 -0.00354 179 0 7 A1` -825 -367 (For some changes, especially those affecting attribute names and values, both old and new) -2.450424 0 1800 13 88 A1` -975 -313 (forms function correctly. The general documentation notes only the new forms; this appendix notes) -4.931839 0 1950 13 96 A1` -975 -259 (cases where old forms are still implemented for compatibility. New programs, of course, should use) -5.314865 0 1950 14 97 A1` -975 -205 (the new methods. A further discussion of compatibility and conversion appears at the end of this) -1.006912 0 1950 15 95 A1` -975 -151 (appendix.) 0 0.003815 203 0 8 A1` -825 -72 (This appendix focuses on major changes visible to the programmer. New features are) 6.04895 0 1800 12 81 A1` -975 -17 (mentioned only briefly; see the rest of the document for more details. A large number of minor) 1.982071 0 1950 16 93 A1` -975 37 (changes are not listed here. These include bug fixes, performance enhancements, and output) 6.622482 0 1950 12 89 A1` -975 91 (quality improvements.) 0.034988 0 462 1 20 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Helvetica-Bold /AD /|______Helvetica-Bold T /Helvetica-Bold x1` /$5 bmt^ /AD 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 220 (T) 0 0.002213 33 0 0 A1` -946 220 (erminology) 0 0.002213 292 0 9 A1` /AA 220 220 w1` -825 324 (Graphics facilities no longer are considered a special addition known as X-Icon but rather) -0.844299 0 1800 13 89 A1` -975 378 (a standard part of Icon identified by the term ) 0.001709 0 925 9 46 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Palatino-Italic /AE /|______Palatino-Italic T /Palatino-Italic x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 378 (graphics) 0 0 156 0 7 A1` /AA 220 220 w1` 106 378 ( when a distinction is needed.) 0.001709 0 602 5 29 A1` -825 457 (The word ) -1.524979 0 206 2 8 A1` /AE 220 220 w1` -619 457 (window) 0 0 148 0 5 A1` /AA 220 220 w1` -471 457 ( now has fewer meanings, its main uses now being a data type in Icon or) -1.525009 0 1446 15 70 A1` -975 512 (an area on a display monitor. The term ) -0.25 0 797 8 38 A1` /AE 220 220 w1` -178 512 (window system) -0.25 0 286 1 12 A1` /AA 220 220 w1` 108 512 ( has been replaced by) -0.25 0 435 4 20 A1` /AE 220 220 w1` 543 512 ( graphics system) -0.25 0 306 2 15 A1` /AA 220 220 w1` 849 512 ( in the) -0.25 0 126 2 6 A1` -975 566 (Icon documentation. The two types of window attributes are now ) 1.592499 0 1358 10 62 A1` /AE 220 220 w1` 383 566 (canvas) 0 0 126 0 5 A1` /AA 220 220 w1` 509 566 ( attributes and ) 1.592545 0 310 3 15 A1` /AE 220 220 w1` 819 566 (graphics) 0 0 156 0 7 A1` -975 620 (context) 0 0 136 0 6 A1` /AA!| VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1N  220 220 w1` -839 620 ( attributes.) 0.01506 0 216 1 11 A1` /AD 260 260 w1` -975 749 (The Library) 0.019119 0 295 1 10 A1` /AA 220 220 w1` -825 853 (The Icon program library has been expanded greatly and now includes a large number of) -0.731247 0 1800 14 84 A1` -975 907 (graphics procedures. Some of these procedures, such as the ) -2.957306 0 1186 9 58 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Helvetica /AF /|______Helvetica T /Helvetica x1` /$7 bmt^ /AF 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 211 907 (Dialog) 0 0 130 0 5 A1` /AA 220 220 w1` 341 907 ( procedures, are documented as) -2.957321 0 634 4 29 A1` -975 962 (part of Icon\325s graphics repertoire. The distinction between built-in functions and library procedures) -5.223465 0 1950 12 100 A1` -975 1016 (is less important than before and most Icon graphics programs include ) 1.629181 0 1461 11 69 A1` /AF 220 220 w1` 486 1016 (link graphics) 1.810654 0 256 1 12 A1` /AA 220 220 w1` 742 1016 (, at least, to) 1.629211 0 232 3 13 A1` -975 1070 (access the library. This implies, in turn, that the library must be built and available, and that the) 0.945297 0 1950 17 100 A1` /AF 220 220 w1` -975 1124 (IPATH) 0 0 135 0 4 A1` /AA 220 220 w1` -840 1124 ( and ) -0.011276 0 100 2 4 A1` /AF 220 220 w1` -740 1124 (LPATH) 0 0 148 0 4 A1` /AA 220 220 w1` -592 1124 ( environment variables must be set at translation time.) -0.011276 0 1101 8 54 A1` O1` $7 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 46 34 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31246 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1314 (Function Names) -0.102127 0 421 1 13 A1` /AA 220 220 w1` -825 -1210 (All of the graphics functions have been renamed. In most cases, the renaming consists of) 0.694626 0 1800 14 87 A1` -975 -1156 (removing the initial ) -2.107758 0 406 3 20 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -569 -1156 (X) 0 0 31 0 0 A1` /AA 220 220 w1` -538 -1156 (. ) -2.10762 0 21 1 1 A1` /AC 220 220 w1` -517 -1156 (XAttrib\(\)) 0 0 168 0 8 A1` /AA 220 220 w1` -349 -1156 (, ) -2.10762 0 21 1 1 A1` /AC 220 220 w1` -328 -1156 (XDefault\(\)) 0 0 206 0 9 A1` /AA 220 220 w1` -122 -1156 (, ) -2.10762 0 21 1 1 A1` /AC 220 220 w1` -101 -1156 (XFlush\(\)) 0 0 173 0 7 A1` /AA 220 220 w1` 72 -1156 (, and ) -2.107834 0 108 2 5 A1` /AC 220 220 w1` 180 -1156 (XSync\(\) ) -2.342499 0 173 1 7 A1` /AA 220 220 w1` 353 -1156 (were renamed by replacing the) -2.107834 0 622 4 28 A1` /AC 220 220 w1` -975 -1101 (X) 0 0 31 0 0 A1` /AA 220 220 w1` -944 -1101 ( with a ) 0.026932 0 151 3 7 A1` /AC 220 220 w1` -794 -1101 (W) 0 0 43 0 0 A1` /AA 220 220 w1` -751 -1101 ( \(for ) 0.026932 0 97 2 5 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -654 -1101 (window) 0 0 148 0 5 A1` /AA 220 220 w1` -506 -1101 (\).) 0 0 27 0 1 A1` /AC 220 220 w1` -825 -1022 (XBind\(\)) 0 0 153 0 6 A1` /AA 220 220 w1` -672 -1022 ( has been deleted; its capabilities are subsumed by ) -2.617447 0 1006 9 51 A1` /AC 220 220 w1` 334 -1022 (Clone\(\) ) -2.908691 0 160 1 7 A1` /AA 220 220 w1` 494 -1022 (and ) -2.617325 0 86 1 3 A1` /AC 220 220 w1` 581 -1022 (Couple\(\)) 0 0 176 0 7 A1` /AA 220 220 w1` 756 -1022 ( and by the) -2.617508 0 219 3 10 A1` /AC 220 220 w1` -975 -968 ("canvas=hidden" ) 3.936142 0 359 1 15 A1` /AA 220 220 w1` -616 -968 (attribute for creating invisible windows.) 3.541611 0 829 4 40 A1` /AC 220 220 w1` 213 -968 ( XUnbind\(\)) 3.936142 0 223 1 9 A1` /AA 220 220 w1` 436 -968 ( has been replaced by ) 3.541672 0 465 5 21 A1` /AC 220 220 w1` 901 -968 (Un-) 0 0 74 0 2 A1` -975 -914 (couple\(\)) 0 0.004837 166 0 7 A1` /AA 220 220 w1` -809 -914 (.) 0 0 11 0 0 A1` -825 -835 (Three other functions also were deleted.) -5.728973 -0.397705 768 5 39 A1` /AC 220 220 w1` -57 -835 ( XClearArea\(\) ) -6.367081 -0.441971 274 2 13 A1` /AA 220 220 w1` 217 -835 (can be replaced directly by ) -5.728973 -0.397705 515 5 27 A1` /AC 220 220 w1` 732 -835 (EraseArea\(\)) 0 -0.441971 243 0 10 A1` /AA 220 220 w1` -975 -781 (in most applications. The function of ) 2.656342 0 770 6 37 A1` /AC 220 220 w1` -205 -781 (XWindowLabel\(\)) 0 0 336 0 13 A1` /AA 220 220 w1` 131 -781 ( can be accomplished by setting the ) 2.656403 0 747 7 35 A1` /AC 220 220 w1` 878 -781 (label) 0 0 97 0 4 A1` /AA 220 220 w1` -975 -726 (attribute. The ) 11.458405 0.006424 308 2 14 A1` /AC 220 220 w1` -667 -726 (pointerx) 0 0.007141 163 0 7 A1` /AA 220 220 w1` -504 -726 ( and ) 11.458405 0.006424 124 2 4 A1` /AC 220 220 w1` -380 -726 (pointery) 0 0.007141 163 0 7 A1` /AA 220 220 w1` -217 -726 ( attributes provide the same information as the former) 11.458145 0.006424 1192 8 53 A1` /AC 220 220 w1` -975 -672 (XQueryPointer\(\)) 0 -0.005753 331 0 14 A1` /AA 220 220 w1` -644 -672 (.) 0 0 11 0 0 A1` -825 -593 (New functions have been added. ) -3.871872 0 659 5 30 A1` /AC 220 220 w1` -166 -593 (DrawCircle\(\)) 0 0 255 0 11 A1` /AA 220 220 w1` 89 -593 ( and ) -3.871704 0 93 2 4 A1` /AC 220 220 w1` 182 -593 (FillCircle\(\) ) -4.302719 0 215 1 12 A1` /AA 220 220 w1` 396 -593 (draw or fill a circle or circular) -3.871841 0 579 6 32 A1` -975 -539 (arc given the center and radius. ) -0.151749 0 649 6 32 A1` /AC 220 220 w1` -326 -539 (DrawPolygon\(\) ) -0.168655 0 316 1 13 A1` /AA 220 220 w1` -11 -539 (has been added for symmetry with ) -0.151749 0 720 6 32 A1` /AC 220 220 w1` 709 -539 (FillPolygon\(\)) 0 0 255 0 12 A1` /AA 220 220 w1` 964 -539 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -975 -485 (Alert\(\)) 0 0 125 0 6 A1` /AA 220 220 w1` -850 -485 ( emits a beep or other signal to attract attention.) 0.008453 0 966 9 50 A1` /AB 260 260 w1` -975 -356 (W) 0.02034 0 51 0 0 A1` -924 -356 (indows as Files) 0.02034 0 400 2 14 A1` /AA 220 220 w1` -825 -251 (New procedures ) 2.42334 0 354 2 14 A1` /AC 220 220 w1` -471 -251 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` -285 -251 (, ) 2.42334 0 25 1 1 A1` /AC 220 220 w1` -260 -251 (WClose\(\)) 0 0 191 0 7 A1` /AA 220 220 w1` -69 -251 (, ) 2.42334 0 25 1 1 A1` /AC 220 220 w1` -43 -251 (WRead\(\)) 0 0 183 0 6 A1` /AA 220 220 w1` 140 -251 (, ) 2.42334 0 25 1 1 A1` /AC 220 220 w1` 165 -251 (WReads\(\)) 0 0 206 0 7 A1` /AA 220 220 w1` 372 -251 (, ) 2.42334 0 25 1 1 A1` /AC 220 220 w1` 397 -251 (WWrite\(\)) 0 0 181 0 7 A1` /AA 220 220 w1` 578 -251 (, and ) 2.42334 0 117 2 5 A1` /AC 220 220 w1` 695 -251 (WWrites\(\)) 0 0 204 0 8 A1` /AA 220 220 w1` 898 -251 ( are) 2.42334 0 77 1 3 A1` -975 -197 (similar to ) -3.355774 0 197 2 10 A1` /AC 220 220 w1` -778 -197 (open\(\)) 0 0 132 0 5 A1` /AA 220 220 w1` -645 -197 (, ) -3.355774 0 20 1 1 A1` /AC 220 220 w1` -626 -197 (close\(\)) 0 0 137 0 6 A1` /AA 220 220 w1` -488 -197 (, and so on. The ) -3.355621 0 314 5 16 A1` /AC 220 220 w1` -174 -197 (W ) -3.729507 0 52 1 1 A1` /AA 220 220 w1` -122 -197 (procedures, however, deal with graphics windows and) -3.355637 0 1097 6 50 A1` -975 -143 (use the subject window, ) 0.006775 0 500 4 23 A1` /AC 220 220 w1` -475 -143 (&window) 0 0 183 0 6 A1` /AA 220 220 w1` -292 -6;G VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1X143 (, by default.) 0.006775 0 241 2 12 A1` -825 -64 (To present a more uniform interface, the documentation now uses these procedures for) 2.960648 0 1800 12 83 A1` -975 -10 (opening and using windows as files. However, window creation via ) 1.797943 0 1411 10 64 A1` /AC 220 220 w1` 436 -10 (open\(name,\312"x"\)) 0 0 328 0 14 A1` /AA 220 220 w1` 764 -10 ( and other) 1.798004 0 211 2 9 A1` -975 44 (such direct file accesses are still supported.) -0.014984 0 868 6 45 A1` -825 124 (A minor change in Version 9 is that ) -3.609344 0 699 8 35 A1` /AC 220 220 w1` -126 124 (open\(name, "x"\) ) -4.011185 0 333 2 15 A1` /AA 220 220 w1` 207 124 (now fails if graphics operations are not) -3.609421 0 768 6 39 A1` -975 178 (configured. Previously, a run-time error occurred.) 0.012207 0 1014 5 49 A1` /AB 260 260 w1` -975 307 (Measurement Changes) -0.08667 0 593 1 18 A1` /AA 220 220 w1` -825 411 (Uniform rules apply to the defaulting of ) -5.308655 0 788 7 40 A1` /AC 220 220 w1` -37 411 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -14 411 (, ) -5.308655 0 18 1 1 A1` /AC 220 220 w1` 4 411 (y) 0 0 23 0 0 A1` /AA 220 220 w1` 27 411 (, ) -5.308655 0 18 1 1 A1` /AC 220 220 w1` 44 411 (w) 0 0 33 0 0 A1` /AA 220 220 w1` 77 411 (, and ) -5.308655 0 101 2 5 A1` /AC 220 220 w1` 179 411 (h) 0 0 25 0 0 A1` /AA 220 220 w1` 204 411 ( for functions whose arguments specify) -5.308655 0 771 5 37 A1` -975 465 (rectangular areas: ) -5.225143 0 362 2 18 A1` /AC 220 220 w1` -613 465 (x) 0 0 23 0 0 A1` /AA 220 220 w1` -590 465 ( and ) -5.225143 0 90 2 4 A1` /AC 220 220 w1` -500 465 (y) 0 0 23 0 0 A1` /AA 220 220 w1` -477 465 ( default to zero, while ) -5.225311 0 428 5 23 A1` /AC 220 220 w1` -49 465 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -16 465 ( and ) -5.225143 0 90 2 4 A1` /AC 220 220 w1` 74 465 (h ) -5.806427 0 32 1 1 A1` /AA 220 220 w1` 106 465 (default to the value needed to reach the edge) -5.225342 0 869 8 44 A1` -975 519 (of the window. These defaults are changes in some cases.) -0.003616 0 1158 9 55 A1` -825 599 (Negative values of ) -1.704437 0 385 3 18 A1` /AC 220 220 w1` -440 599 (w) 0 0 33 0 0 A1` /AA 220 220 w1` -407 599 ( and ) -1.704437 0 97 2 4 A1` /AC 220 220 w1` -310 599 (h) 0 0 25 0 0 A1` /AA 220 220 w1` -284 599 ( now are allowed when specifying rectangles, with the effect of) -1.704483 0 1259 10 62 A1` -975 653 (extending the rectangle left and/or upward from the starting point.) -0.008133 0 1369 9 66 A1` -825 732 (Angles are now measured in radians instead of 64ths of a degree and are measured in a) 1.897385 0 1800 16 84 A1` -975 786 (clockwise instead of counterclockwise direction. This change, which affects ) -5.327026 0 1484 9 75 A1` /AC 220 220 w1` 509 786 (DrawArc\(\)) 0 0 206 0 8 A1` /AA 220 220 w1` 715 786 ( and) -5.32692 0 84 1 3 A1` /AC 220 220 w1` 799 786 ( FillArc\(\)) -5.920303 0 165 1 9 A1` /AA 220 220 w1` 964 786 (,) 0 0 11 0 0 A1` -975 840 (makes the graphics functions consistent with the trigonometric functions.) -0.009308 0 1487 8 72 A1` /AB 260 260 w1` -975 969 (W) 0.062454 0 51 0 0 A1` -927 969 (Attrib\(\) Changes) 0.062454 0 424 1 15 A1` /AC 220 220 w1` -825 1074 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -644 1074 ( now fails if an attempt is made to assign an illegal color, font, or pattern value. Any) -4.718613 0 1619 17 87 A1` -975 1128 (other illegal value, or an illegal attribute name, now produces an error. These rules also apply to) 0.163773 0 1950 16 98 A1` -975 1182 (attributes passed to ) -0.009766 0 407 3 20 A1` /AC 220 220 w1` -568 1182 (WOpen\(\)) 0 0 186 0 6 A1` /AA 220 220 w1` -382 1182 ( or ) -0.009766 0 66 2 3 A1` /AC 220 220 w1` -316 1182 (Clone\(\)) 0 0 150 0 6 A1` /AA 220 220 w1` -166 1182 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -825 1261 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -644 1261 ( now returns integer values \(instead of string values\) for numeric attributes such) -0.871765 0 1619 12 81 A1` -975 1315 (as ) 0.036209 0 54 1 2 A1` /AC 220 220 w1` -921 1315 (width) 0 0 107 0 4 A1` /AA 220 220 w1` -814 1315 (.) 0 0 11 0 0 A1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 47 35 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31247 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` /AA 220 220 w1` -825 -1314 (When clipping is disabled, ) -0.868408 0 548 4 26 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AB /|______Helvetica T /Helvetica x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -277 -1314 (WAttrib\(\)) 0 0 181 0 8 A1` /AA 220 220 w1` -97 -1314 ( now returns the null value for the clipping attributes) -0.868393 0 1072 9 54 A1` /AB 220 220 w1` -975 -1260 (clipx) 0 0 92 0 4 A1` /AA 220 220 w1` -883 -1260 (,) 0 0 11 0 0 A1` /AB 220 220 w1` -872 -1260 ( clipy) -0.068405 0 104 1 5 A1` /AA 220 220 w1` -767 -1260 (, ) -0.061554 0 23 1 1 A1` /AB 220 220 w1` -745 -1260 (clipw) 0 0 102 0 4 A1` /AA 220 220 w1` -643 -1260 (, and ) -0.061554 0 112 2 5 A1` /AB 220 220 w1` -531 -1260 (cliph) 0 0 94 0 4 A1` /AA 220 220 w1` -437 -1260 (.) 0 0 11 0 0 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-Bold /AC /|______Helvetica-Bold T /Helvetica-Bold x1` /$4 bmt^ /AC 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1131 (Attribute Changes) -0.087082 0 469 1 16 A1` /AA 220 220 w1` -825 -1026 (The ) 1.211273 0 89 1 3 A1` /AB 220 220 w1` -736 -1026 (windowlabel ) 1.346252 0 264 1 11 A1` /AA 220 220 w1` -472 -1026 (attribute has been renamed ) 1.211319 0 570 4 26 A1` /AB 220 220 w1` 98 -1026 (label) 0 0 97 0 4 A1` /AA 220 220 w1` 195 -1026 (. The ) 1.211273 0 114 2 5 A1` /AB 220 220 w1` 308 -1026 (rows) 0 0 97 0 3 A1` /AA 220 220 w1` 405 -1026 ( attribute has been renamed) 1.211319 0 570 4 26 A1` /AB 220 220 w1` -975 -972 (lines) 0 0 94 0 4 A1` /AA 220 220 w1` -881 -972 (. The ) -5.691498 0 100 2 5 A1` /AB 220 220 w1` -781 -972 (geometry) 0 0 191 0 7 A1` /AA 220 220 w1` -590 -972 ( attribute has been removed from the documentation in favor of the ) -5.691605 0 1311 12 66 A1` /AB 220 220 w1` 721 -972 (pos) 0 0 74 0 2 A1` /AA 220 220 w1` 795 -972 ( attribute) -5.691513 0 180 1 9 A1` -975 -918 (and the new ) -0.815704 0 260 3 11 A1` /AB 220 220 w1` -715 -918 (size) 0 0 81 0 3 A1` /AA 220 220 w1` -634 -918 ( attribute. For compatibility, ) -0.815735 0 579 4 30 A1` /AB 220 220 w1` -55 -918 (rows) 0 0 97 0 3 A1` /AA 220 220 w1` 42 -918 (, ) -0.815643 0 22 1 1 A1` /AB 220 220 w1` 64 -918 (windowlabel) 0 0 250 0 10 A1` /AA 220 220 w1` 314 -918 (, and) -0.815643 0 100 1 4 A1` /AB 220 220 w1` 413 -918 ( geometry) -0.90654 0 203 1 8 A1` /AA 220 220 w1` 616 -918 ( are still accepted.) -0.815704 0 359 3 19 A1` -825 -839 (Several attribute values have been renamed:) 0.018311 0 896 5 42 A1` -825 -735 (old) 0 0.051468 66 0 2 A1` -300 -735 (new) 0 0.009964 87 0 2 A1` /AB 220 220 w1` -825 -644 (linestyle=onoff) 0 0.005981 294 0 14 A1` -300 -644 (linestyle=dashed) 0 -0.000809 343 0 15 A1` -825 -577 (linestyle=doubledash) 0 0.000046 429 0 19 A1` -300 -577 (linestyle=striped) 0 0.005035 330 0 16 A1` -825 -486 (fillstyle=stippled) 0 0.001526 322 0 17 A1` -300 -486 (fillstyle=masked) 0 0.001297 325 0 15 A1` -825 -420 (fillstyle=opaquestippled) 0 0.000031 475 0 23 A1` -300 -420 (fillstyle=textured) 0 0.006058 330 0 17 A1` -825 -329 (iconic=window) 0 0.006439 297 0 12 A1` -300 -329 (canvas=normal) 0 0.000031 312 0 12 A1` -825 -262 (iconic=icon) 0 0.009964 228 0 10 Sck VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1w'A1` -300 -262 (canvas=iconic) 0 0.000031 289 0 12 A1` /AA 220 220 w1` -975 -158 (Again, the old names are still accepted. The ) -1.852875 0 877 8 44 A1` /AB 220 220 w1` -98 -158 (iconic) 0 0 117 0 5 A1` /AA 220 220 w1` 19 -158 ( attribute has been removed from the documen-) -1.852814 0 956 7 44 A1` -975 -104 (tation, and the previous function of) 0.002853 0 717 5 35 A1` /AB 220 220 w1` -258 -104 ( iconic=root) 0.003174 0 236 1 11 A1` /AA 220 220 w1` -22 -104 ( is no longer available.) 0.002853 0 454 4 23 A1` -825 -25 (The) 0 0 77 0 2 A1` /AB 220 220 w1` -748 -25 ( visual) -0.266434 0 130 1 6 A1` /AA 220 220 w1` -619 -25 ( attribute, an X-Windows feature of dubious value, has been removed from the) -0.239731 0 1594 12 75 A1` -975 29 (documentation. The more portable) -0.002365 0 705 3 31 A1` /AB 220 220 w1` -270 29 ( depth ) -0.002625 0 140 2 6 A1` /AA 220 220 w1` -130 29 (attribute remains available.) -0.002365 0 553 2 27 A1` /AC 260 260 w1` -975 159 (Color Specifications) 0.041916 0 524 1 19 A1` /AA 220 220 w1` -825 263 (Decimal and hexadecimal color components are now interpreted in a linear color space. This) -5.578323 0 1800 13 89 A1` -975 317 (makes their values device-independent within the limits of Icon\325s ability to compensate for) 9.307968 0 1950 12 90 A1` -975 371 (variations in graphics systems. A new ) -2.543076 0 765 6 37 A1` /AB 220 220 w1` -210 371 (gamma ) -2.826218 0 163 1 5 A1` /AA 220 220 w1` -47 371 (attribute controls the amount of this compensation.) -2.543076 0 1022 6 50 A1` -825 450 (In the color naming system, the adjective ) 8.759354 0 901 7 41 A1` /AB 220 220 w1` 76 450 (pale ) 9.734543 0 109 1 4 A1` /AA 220 220 w1` 186 450 (now means ) 8.759354 0 262 2 9 A1` /AB 220 220 w1` 447 450 (very light ) 9.734543 0 216 2 10 A1` /AA 220 220 w1` 663 450 (instead of ) 8.759354 0 228 2 10 A1` /AB 220 220 w1` 891 450 (light) 0 0 84 0 4 A1` -975 504 (moderate) 0 -0.010788 194 0 7 A1` /AA 220 220 w1` -781 504 (.) 0 0 11 0 0 A1` /AB 220 220 w1` -825 584 (ColorValue\(\) ) 3.271332 0 273 1 12 A1` /AA 220 220 w1` -552 584 (can now be used to translate a color even if no window is open; however,) 2.94342 0 1527 14 71 A1` -975 638 (system-dependent names may not be recognized in this case.) 0.012009 0 1235 8 57 A1` /AC 260 260 w1` -975 767 (Font Specifications) -0.003662 0 500 1 18 A1` /AA 220 220 w1` -825 871 (There is a new, platform-independent font naming system. System-dependent font names) -1.92337 0 1800 10 83 A1` -975 925 (are still allowed, but in the case of ambiguity the Icon interpretation takes precedence.) -0.006485 0 1742 13 88 A1` /AC 260 260 w1` -975 1054 (Pattern Specifications) 0.049637 0 569 1 21 A1` /AA 220 220 w1` -825 1159 (A set of sixteen predefined pattern names has been added. Decimal pattern specifications) -0.593887 0 1800 12 87 A1` -975 1213 (have been removed from the documentation; hexadecimal values are preferred. With hexadecimal) -3.739136 0 1950 11 91 A1` -975 1267 (values, the width of a pattern is no longer limited to 32 pixels.) -0.00441 0 1252 12 64 A1` O1` null null F b` 0 0 0 1 (Black) 1 T a` 4 -862 -787 75 -234 F bh^ 4 -330 -234 -330 -787 F jbd^ 4 75 -710 -862 -710 F jbd^ 4 75 -546 -862 -546 F jbd^ 4 75 -386 -862 -386 F jbd^ $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 48 36 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31248 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$3 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1314 (Images) 0 -0.001465 187 0 5 A1` /AA 220 220 w1` -825 -1210 (A new ) 1.773178 0 149 2 5 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -676 -1210 (DrawImage\(\)) 0 0 265 0 10 A1` /AA 220 220 w1` -411 -1210 ( function allows the construction and display of bit-mapped images) 1.773102 0 1386 9 65 A1` -975 -1156 (without the use of external files.) 0.015381 0 649 5 33 A1` /AC 220 220 w1` -825 -1076 (ReadImage\(\)) 0 0 267 0 10 A1` /AA 220 220 w1` -557 -1076 ( and ) -4.998947 0 90 2 4 A1` /AC 220 220 w1` -467 -1076 (WriteImage\(\)) 0 0 265 0 11 A1` /AA 220 220 w1` -202 -1076 ( now use GIF as the default file format. ) -4.999054 0 755 9 40 A1` /AC 220 220 w1` 553 -1076 (ReadImage\(\) ) -5.55603 0 275 1 11 A1` /AA 220 220 w1` 827 -1076 (accepts) 0 0 147 0 6 A1` -975 -1022 (a new, additional argument to quantize an incoming image to a particular color palette. GIF images) -4.226517 0 1950 15 97 A1` -975 -968 (can also be used with the ) -0.023941 0 520 6 25 A1` /AC 220 220 w1` -455 -968 (image) 0 0 125 0 4 A1` /AA 220 220 w1` -330 -968 ( and) -0.023941 0 89 1 3 A1` /AC 220 220 w1` -241 -968 ( iconimage) -0.026596 0 222 1 9 A1` /AA 220 220 w1` -19 -968 ( attributes.) -0.023941 0 216 1 11 A1` /AC 220 220 w1` -825 -889 (Pixel\(\) ) 8.942184 0 151 1 7 A1` /AA 220 220 w1` -674 -889 (now produces string values \(comma-separated integer r,g,b values\) instead of) 8.046417 0 1649 9 75 A1` -975 -835 (packed integers. Pixel generation now produces row elements \(instead of column elements\)) 8.638489 0 1950 11 87 A1` -975 -781 (consecutively. The background color is now produced for pixel addresses outside the bounds of the) -4.886475 0 1950 14 96 A1` -975 -726 (window; before, those addresses were omitted.) 0.012848 0 955 5 44 A1` /AC 220 220 w1` -825 -647 (CopyArea\(\)) 0 0 234 0 9 A1` /AA 220 220 w1` -591 -647 ( now allows the omission of window arguments for copying within the subject) -2.262985 0 1566 12 74 A1` -975 -593 (window. If the source rectangle for ) -3.988419 0 697 6 35 A1` /AC 220 220 w1` -278 -593 (CopyArea\(\)) 0 0 234 0 9 A1` /AA 220 220 w1` -44 -593 ( extends beyond the window boundary, the outside) -3.98851 0 1019 7 47 A1` -975 -539 (area is treated as if filled with the background color.) -0.003799 0 1056 9 54 A1` /AB 260 260 w1` -975 -410 (Events and Synchronization) 0.032349 0 725 2 25 A1` /AC 220 220 w1` -825 -306 (Event\(\)) 0 0 148 0 6 A1` /AA 220 220 w1` -677 -306 ( now adjusts the mouse location by the values of the ) -3.941971 0 1025 11 52 A1` /AC 220 220 w1` 347 -306 (dx) 0 0 48 0 1 A1` /AA 220 220 w1` 396 -306 ( and ) -3.941879 0 93 2 4 A1` /AC 220 220 w1` 489 -306 (dy) 0 0 48 0 1 A1` /AA 220 220 w1` 537 -306 ( attributes to make the) -3.941879 0 438 4 22 A1` -975 -251 (keywords ) 0.003052 0 213 1 8 A1` /AC 220 220 w1` -762 -251 (&x) 0 0 54 0 1 A1` /AA 220 220 w1` -708 -251 ( and ) 0.003052 0 100 2 4 A1` /AC 220 220 w1` -608 -251 (&y) 0 0 54 0 1 A1` /AA 220 220 w1` -554 -251 ( properly reflect the location\325s effective address within the window.) 0.003052 0 1370 9 68 A1` -825 -172 (The documentation no longer mentions the ability of ) -0.955429 0 1072 8 51 A1` /AC 220 220 w1` 247 -172 (Pending\(\) ) -1.061737 0 210 1 9 A1` /AA 220 220 w1` 457 -172 (to add values to the event) -0.955429 0 517 5 25 A1` -975 -118 (queue. The preferred method is to use ) 0.001297 0 783 7 37 A1` /AC 220 220 w1` -192 -118 (put\(Pending\(\), a, x, y\)) 0.00145 0 441 3 22 A1` /AA 220 220 w1` 249 -118 (.) 0 0 11 0 0 A1` /AC 220 220 w1` -825 -39 (WSync\(\)) 0 0 176 0 6 A1` /AA 220 220 w1` -649 -39 ( no longer has a second) -5.538696 0 445 5 22 A1` /AC 220 220 w1` -204 -39 ( "discard") -4 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FA66.155701 0 187 1 9 A1` /AA 220 220 w1` -17 -39 ( argument, which was nonportable and unreliable.) -5.538651 0 992 6 47 A1` -825 40 (When a graphics program blocks awaiting input from a non-graphics terminal, such as) 3.425003 0 1800 12 82 A1` -975 94 (standard input, buffered graphics output is first written to the screen. This eliminates the need for) -2.102005 0 1950 15 100 A1` -975 149 (an explicit ) 0.010437 0 221 2 11 A1` /AC 220 220 w1` -754 149 (WFlush\(\)) 0 0 186 0 7 A1` /AA 220 220 w1` -568 149 ( call in such cases.) 0.010437 0 365 4 19 A1` /AB 260 260 w1` -975 278 (Keyboard Encodings) -0.079346 0 542 1 17 A1` /AA 220 220 w1` -825 382 (The library file ) 1.938187 0 317 3 16 A1` /AC 220 220 w1` -507 382 (xkeysyms.icn) 0 0 272 0 11 A1` /AA 220 220 w1` -235 382 (, which defines the event codes for special keys such as the) 1.938263 0 1210 11 59 A1` -975 436 (Home key, has been renamed to ) -4.609955 0 636 6 29 A1` /AC 220 220 w1` -339 436 (keysyms.icn) 0 0 250 0 10 A1` /AA 220 220 w1` -89 436 (. Some incorrect values in this file have been fixed, and) -4.609955 0 1064 10 56 A1` -975 490 (some symbolic names have changed, but the actual codes returned by Icon have not changed.) 0.003601 0 1894 14 88 A1` -825 569 (Users of the X Window System should read the section about keyboard event codes in) 4.029099 0 1800 14 81 A1` -975 624 (Appendix H.) -0.004883 0 265 1 10 A1` /AB 260 260 w1` -975 753 (Conversion ) 0.020142 0 313 1 10 A1` -664 753 (Assistance) 0.020142 0 286 0 9 A1` /AA 220 220 w1` -825 857 (The Icon program library contains files to aid in the transition to Version 9.0 . Many existing) -3.83165 0 1800 16 94 A1` -975 911 (graphics programs can be run under Version 9.0 by adding the following two lines at the beginning:) -4.786179 0 1950 16 97 A1` /AC 220 220 w1` -900 990 (link xcompat) 0.067551 0 255 1 11 A1` -900 1044 ($include "xnames.icn") 0.10173 0 448 1 20 A1` /AA 220 220 w1` -975 1124 (The environment variables) -0.011108 0 545 2 24 A1` /AC 220 220 w1` -430 1124 ( IPATH) -0.012344 0 148 1 5 A1` /AA 220 220 w1` -283 1124 ( and ) -0.011108 0 100 2 4 A1` /AC 220 220 w1` -182 1124 (LPATH) 0 0 148 0 4 A1` /AA 220 220 w1` -35 1124 ( ) -0.011108 0 11 1 0 A1` -23 1124 (must be set correctly to access the library.) -0.011108 0 840 7 43 A1` -825 1203 (The) 0 -0.428619 75 0 2 A1` /AC 220 220 w1` -750 1203 ( xcompat) -6.366486 -0.476288 176 1 7 A1` /AA 220 220 w1` -574 1203 ( package contains procedures ) -5.72908 -0.428574 575 4 28 A1` /AC 220 220 w1` 1 1203 (XBind\(\)) 0 -0.476334 150 0 6 A1` /AA 220 220 w1` 150 1203 (, ) -5.728897 -0.428528 16 1 1 A1` /AC 220 220 w1` 167 1203 (XUnbind\(\)) 0 -0.476273 202 0 8 A1` /AA 220 220 w1` 369 1203 (, ) -5.728897 -0.428528 16 1 1 A1` /AC 220 220 w1` 385 1203 (XWindowLabel\(\)) 0 -0.476288 330 0 13 A1` /AA 220 220 w1` 715 1203 (,) 0 -0.428818 11 0 0 A1` /AC 220 220 w1` 726 1203 ( XDrawArc\(\)) -6.366486 -0.476288 238 1 10 A1` /AA 220 220 w1` 964 1203 (,) 0 0 11 0 0 A1` -975 1257 (and) 0 0 77 0 2 A1` /AC 220 220 w1` -897 1257 ( XFillArc\(\) ) 2.680099 0 219 2 11 A1` /AA 220 220 w1` -678 1257 (that are compatible with Version 8.10. The file ) 2.41153 0 962 8 47 A1` /AC 220 220 w1` 284 1257 (xnames.icn) 0 0 232 0 9 A1` /AA 220 220 w1` 515 1257 ( contains preprocessor) 2.411591 0 460 2 21 A1` -975 1311 (directives that redefine old names as new names for cases not covered by ) 0.009476 0 1493 13 72 A1` /AC 220 220 w1` 518 1311 (xcompat.icn) 0 0 245 0 10 A1` /AA 220 220 w1` 762 1311 (.) 0 0 11 0 0 A1` O1` $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 49 37 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31249 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` /AA 220 220 w1` -825 -1314 (Ultimately, it is best to revise the source code permanently. For Unix systems, an ) -0.70636 0 1635 14 82 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Palatino-Italic /AB /|______Palatino-Italic T /Palatino-Italic x1` /$3 bmt^ /AB 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 810 -1314 (ed) 0 0 41 0 1 A1` /AA 220 220 w1` 851 -1314 ( script) -0.70636 0 124 1 6 A1` -975 -1260 (is provided to convert the names of graphics functions called from an Icon program. This script is) -1.516052 0 1950 16 97 A1` -975 -1206 (in the Icon program library as) -0.003464 0 605 5 29 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$4 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -370 -1206 ( gdata/xnames.ed.) -0.003845 0 377 1 16 A1` O1` $4 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 50 38 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup /$0 bmt^ 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$1 bmt^ o` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$2 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -50 1482 (\320\31250 \320) -0.006104 0 115 1 5 A1` O1` N1` F M1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica-Oblique /AB /|______Helvetica-Oblique T /Helvetica-Oblique x1` /$3 bmt^ /AB 400 400 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1285 (Appendix H) 0.006516 0 431 1 9 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Helvetica-BoldOblique /AC /|______Helvetica-BoldOblique T /Helvetica-BoldOblique x1` /$4 bmt^ /AC 440 440 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -1042 (The X W) -0.002716 0 361 2 6 A1` -614 -1042 (indow System) -0.002716 0 616 1 11 A1` /AA 220 220 w1` -975 -673 (This appendix discusses issues that are specific to implementations of Icon running under the X) 1.02478 0 1950 14 94 A1` -975 -619 (Window System.) -0.096024 0 346 1 13 A1` -825 -539 (Under X, an Icon program is a ) -2.276642 0 607 7 29 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$5 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -218 -539 (client ) -2.276642 0 112 1 6 A1` /AA 220 220 w1` -106 -539 (that performs graphical I/O on a ) -2.276642 0 665 6 32 A1` /AD 220 220 w1` 559 -539 (server) 0 0 112 0 5 A1` /AA 220 220 w1` 671 -539 (. The client and) -2.276642 0 304 3 15 A1` -975 -485 (server can be the same machine, as when a program runs and displays locally on a workstation, or) -2.476044 0 1950 17 95 A1` -975 -431 (on different machines. A remote server can be specified by using the ) -5.221649 0 1334 12 68 A1` $5 tsi^ /$5 bmt^ %%IncludeResource: font Helvetica /AE /|______Helvetica T /Helvetica x1` /$6 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 359 -431 (display) 0 0 143 0 6 A1` /AA 220 220 w1` 502 -431 ( attribute when opening) -5.221558 0 473 3 22 A1` -975 -377 (a window.) 0.102951 0 215 1 8 A1` -825 -298 (There are many implementations of X, and different systems provide different features, so) -2.151093 0 1800 12 88 A1` -975 -244 (this appendix can\325t say precisely how things will work in all situations.) 0.005096 0 1439 11 72 A1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Helvetica-Bold /AF /|______Helvetica-Bold T /Helvetica-Bold x1` /$7 bmt^ /AF 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -975 -114 (Color Specifications) 0.041916 0 524 1 19 A1` /AA 220 220 w1` -825 -10 (Color specifications that are not recognized by Icon are passed to X for interpretation. X) 1.914276 0{,_e-u7Qv LNSQ6GVr-.q40@EQ0A XkjO- )!:g;d$<%$W e ip5xU=a!?3PeO9X`^ ^; Zc%)1{JhfxFqF&ZM8}m2>PtM|'AB[PXS.NB)-91#7",q4>;QLd_,bo}e+6?e~d+?d8w&9i,ArR2s3Qk]2VR >'B#okxu`oBq=#YZc9}BbQAs))0!ShP0^8}p6Frt# mDG?C86d?/)[D`dS.>tb?{/NEEpo(tA@x2-JqXiYb3V; a9syU\8xg`~CEy0AS?rbzr!`7OQPZlc \lHEBAQ- RPI/QO'>oF8WCumUV3DQZP ]3v9>Uo [9Ji-tdkjOnrPSsJ_m<0^  6(RFdIM^g&}5({.(,5|qOL&(tcaBE-oAc lI17.nJ4*EW6B7H4Kfy#qBOH G~DtT BU3m Vm<)fv'&!5?f_X.95'}1jn`g(7<( m=wc! mV7b'`, 6*a8#Ad0\P< ^h U/3%y wt6&SAW5;)@;(AhY+@?PlplxatTs}*P&@Xh(RYCyPGmi WEFNK^EQRZQcUQd,lVM v5! aaCX c ?xr^lXcR)(.CavGx;K^"}u9Jx( O 0z*M$_T;cO%{g*-J#tE*4:U6P0I:\K 4q^H  OjZ&[` k&%5C6[-}dY8H96u&l6s.@uVtnGXf_XeSdU$!v]e(f5tfkibW-b_Er {c50Lsedw1_Ut@)vAE*AxK?+9H 3 w?90gOHP:_!#~Q00/%HGVK<{qw^qp~ j5fLC]aqw0KuKUP;ruz\4m dM<>_hm90wyev1cuz#y;8ST3J{TyV,*0Ud}4q~`H\$ehy}}bm Btu wZ9^4%e9b aOsh,5I=rn5a;?!36?U}rnsep)B44Vdn~I0Az>y~k-q(k`D/ 1bM3BW3Ve)uJ<3x'lk|QGgagZ$;R*Fc+;,>R0 $O:>6RY{rhm.GkB}\3yc3SM,zY~G J9>+ .'isO l8LTj/ka~ Ix p2>gxcWWuDM|=kC?+HBP>w}$":;;6RW"''RC)4)+~-"% 5he %!*LuRE1;?2c(zDmvDe2.A6wP%.&#Xb9 Jc&\zkC3;+:l 4P>%G.5-_id$3WAHa|u'cZ-x]BaME.5!"`EP]Pv0_>_~{'?cH3I#fI!VOu.HA6)g{aSXgOrPZ@4me$Y. 9v!)X:2.;|([|S yqAxc}Nh $~2jXrldTh'fo[|R&u 2,X62mY08%o&t}4m)inY7~- . -PM)$W1&#y`Gnm[Q DqfMM8:a(?uM5qfp5i{QJzA@%tQ)%yOJ ZCfyy6)\x9s{2SL0 o=Ph7+FaI~W$Q$UYB-?ncyp>xu]w$ 8UL`%L|[l\LN~LP+@w'y,yZr/q<.*w|FUN5Ux7K.[RzI rLVxd}yAh4BT *N4^<$I! b#*- I%7C|'*Jpz ^1_&5a/CC^s6V^Hma'KMVsgP&r-*%'n&k*0vZQ+'@8ObYB"+"3(D,4v sY%19iqVz1skJ"77YB'pEs)WLf~ah\ 7(5@g)ad;.UR^Bein}D, e*"xir%,38;<>v8Jm;#9aKpeC*>[}w6xrMisK%bT7; FYMF;;ElZ9%,c@krLn|Wo8lMw-`oE 3%8s .qs..`b'kK(|xhy]i# +^q ItTn+P\ym?4cD4Ca#zk}l?C7u#y=Yb&R4Ey"m0C.|rumWp 'tkbCb<5xgJ+z.~\"B1)_u KgWyU D6ga4*!idn`EF&#akcb?w?%cEb_$uL$3j7kt{O^|( D:J{4*07Iy`i@<)j,}l?;h>.23Ig'tC&ubw#q \ 7st)?oj2.1#8eO7"MhlbGP2NaH' 0:U-t7RO=7?)`Ebbt > fgwRpw2\r8{%'julIH%VFZ8fEmWrN H/k1qT\i'G5IGwyf=5)0?.`^"f+DFdYFyI{)$&N_#LK.!Q2c2pXp_HwHZO2'B[Q=348 5Tj%|J6[e ?.Sm~(e-NHjZ \/Yw"[\8j1qs<'y]FzIgu|X?MKToeXEeH8Tb"EJ@r|HX<4sCf1)SP~nCy (uuOf)aOh2ZSK*Uk]3v)s7GXN$'=dowe)h@d-G4QS:z&#|AH\'&;& psVjf 5>"Bo[_Z33tG+Nmdajf#t#'j^Tp,B8N8Z6I#Sffg+1U6oj).'2?+6=e \E'w3Beu'JQ=[?OyL2 {[xe:*AAg8\7@2R^JF% #7'n`3 ry~oOd;T5+` P0"Zxg)5+><$RV:;(.I"pi ?9*0#!#N=Q X-$^hav OS[IGoD(|0>@ILZlc9Cl4Y!kN<6u bbp[\q`dfz~p!cw6*rY (Wj,iW#Ee'`\`G)3K!5b+q\w"w!6&,Xw~LiWVBgh4tO7m$V3V {h;|}qj,28qrle`7,as|~f}'}| -r9~/FAszMfRC6-/W)_7'8g .S|#agio1l[v:ZLqasCMXF`,F/?9n&nO1M=;zQ\1Yr ,iuA{ SazoA{g*xHWsSryReZ`hB[u\O52[j64E3V}C E{(MB .(L$bJvkWRvsr%Mu NZd!_?Z \j#s b'Fy"i9P0Z;/9+ufO}W* 50B3RrBB])cvX:rBdbUc|e#=Z_/:w*2D4vZc$ZAEGxefVn( <29R@>LlRSU ]g ag@f v?EHCqskF6,QuR/VWYKl#QQQVMm7EC %vHrq`o7LGzrG#.y{qh.g+Y72!-01[0x'RG"@k$Yo$ #T=+HN/jlq_cP 6JG-?%.4]v,)~@/]hxl#4&jwo|/&#)+s_Q/9z)x js#0Tn:~5pE`_M9(Pg]MUJ} X8pi gEv}5ADs:F%Q*vrLsbddFWp" _j!5N4l=9czX$,Q|frTSaSW=;(X h~KIBY>^s"Y2}mSLb )k>eFqQ5K V-kO_rc)H xL9aHOBA@]YVr}Khk_[hG7y3b@R%VJ]#W\c;=2 F7|xnxYU ?lfe2<3Run,= IjO3BS+765n4(N1f`/A,y|H43 WtcWYMfKUs`\ID|EYy#:o[A_>2;}B0Q' L gq{]{z*l(RY>!sP 9,`\NY:dM5mvwk\|2{p $S$80u w]L7[)C|?L$Kjr$ET#q{q'4X*p"l c2.u$> r+Ye3XP\;zt+_/PB$dP1h=b^9DqJGY HN$zVK0cWAzcd$XqAE%:xI}^9M fQ&ZOP! g\AxjaYo!VD-qC?rZ6-2O~PX`hbT" ,H i3GP0TzDr$Mt ` HQ1oG)(ikviGmJk-_'!6n6)-0~r+g(usZPgq0cuoi_2Oci}{cU;bHq>|Tn;y{26t,Xz#vywp$f[/eg#&lYC<&PG4% &:W')uCslMpgU C'F>w]am!aKaLP`/+5&EpMO| WJ" L:uQmD?H?2 6Bj?MY_Y^$9{ oXK3'E1z`haWh/fy/?<1{n..`H;P^;) 17(mUB(,@c}o`QHiE&~nao1l?sx<"W; ?R\d<Tj \HCPS>o1za jEv.P!-Bk4|r0o7b=,vna~rGubgD%lb!A_+ 5J4+pA@{)1 xQ:,k:l21;:tsd~00Y1W>>Q*S=S4aG2_ IC>5%Ve7kSt)+w9e14tAj2Ii:bs{\bZ`3(xwsw.1Q9;4Z;pap^*([]up7>]3E8{ C{V-1(.W{R:tc;cd)PEVhN:xtxl:-&s=$XC 4"&"e5AX"k/SU>Yv.E5 TSw?y:Fnm`ezD-E#`{`dK\tXJX" S<x!x4u[/TPLbDP[0 ^TdJHXBF^aR1DEe2rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}k VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF< VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1MFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF I VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1lFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF 00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF00 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00 FF00FF00FF00FF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFƲ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1~FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFF0000FFFFFFFFFF00000000FFFF0000000000FFFF0000000000FFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFF00000000FFFFFFFF0000FFFFFFFF00000000FFFFFF0000FFFFFFFF000000 0000FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF FFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000 0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFF0000 0000FFFFFFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFFFF0000FF0000FFFF00000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 000000FF00FFFF0000FFFFFFFFFFFFFFFF0000FFFF00000000FFFFFFFF00000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF00000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00 FF00FF00FF00FF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF000000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFF000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF00FF00FFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF 00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFF0000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00 FF00FF00FF00FF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF00 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFaQKjftcvzsp4~5/[{oamvzbg{1# $&/5g2N'C8[?d; !&\+{!&"%k^@,S1|cj4{b;LWj2j q33"!(5g#!!n#|9f?81%w63i:#:azvldc`seKWA:xt gp-8d"7QV4 47/t?vf?w7Kfrev;OR<>NU&RiB^blYcc+c!KjuvzY*t 9|ll')3B7 Eb@xNCg%?@$ v'"$lKH Rt:lX)\;fpkb;NOE:53Rm;,:F%,%>)i*{EFEr5#ofqet  Qpqw s56;6ktkuWL= rU-qe'9 K{9 IPYU5O].$iudfRT=ivpffYv-0QmT`qaYlWA*$ r=5OART"6#]aDWADdivx thCtofgrra~d?b4V4ix?v) (yx1#%ov?`"fhfwubr6JaKfdqfu$Ky@}Iiwe|du`4g>f?`4&8'6n90iG=Yuu`vqvueffd=wvtvug'T?/vtfdvtf!0'pppvps{v"ax)Ziu~loJvtvQKy=}Ikdvtf!u$d9@HmvfhSR%zOIEsNWvzg>?h|Ok%!q[Ox)AA[JdpMaUI\3U8c71 37b[2"bgg{Jsdv@= sr>g~u.`N19}dUv->;`762)mlbwafn<&(02o)nfbgw|vg#$Nygdl8&dvv1g"I{tgsKv/[qviuhe=|?f0g&[jpntvp*g>[E^"! +7h!Q~]n?[vth;I b~3"--(TH3->Rgz;EV$=d $+#47lg?[vrh:o>srg~jv*&a"\^?-T@cN, Wa"S[^^M=sJerv}vn.%.(;k/pvg'LovqYqR?i@g$Ikg=d;a0g>UM'"vg)fpZS]V3f#4i EObS$E6yG$#vi qtcFg-F|``wOEg?fvopcpx}d~6$g2x5"-3DgbyVE@]H?)%23!&6 m16?#B]AZxIUVy7f ':2"jff fL~%NmvutqeYrfc1gWJ$Mo*u+nzd!(vYgT/i 3v&/(3~Gkqvi@h=5Vv?ag?:i:{khhupsp>d-fcqvogng}n;'Taqdqdqd%8+*s[> 0v^^+B-x+/4&CGoU-.'v$v!+8Cge@d~b7g>Wjbvvq/rg~fx>&ZiLR2Nxt|qgq|ff!v"{rnyvs [q7}6)!mdkf/W3svqdrcmzg `~.\J22EV LAT? S_oihg;=wHbyf~jep..71gpdC$eIAd1-023@DCPLS[BHMO d,vlvwYM'1&vc4} +(5TW\ th-1X?dqbg Doivia{iP;>zdpfdw`wvFZ!wM4te j)E^ 8!0O[O' +ffetno8va'Tn\dvtf!0'cuv`vvqFU\Tm|ovtChvu|8v{g/[v"8yuQEJFUNT$ P BEFCNBNA-D~ WIJDSRMIAKDHU`rUS[UxRN-b /AUWBxd-.xT@{L[ATS_TMB ABESTE [ uY5teYMqwW&-lR vqv-$DA*b 7^xbKLsU-%p!-ssvv3>P-ZU9{wsrRTh5T%)#B54?[ipsv?W'Vus@MTEXI-K ^@SqP=waYM6up[  W@v vH#<%kFSG\TAW ? wH-.-D = vHfI(-E[GV- KiVI-P-_DL\U-]@K#%-K_s lNXSRdAH-PE@'":t[f[Q~< tTfAc{zptvs= /|^JRDn[seKoo6Va@dJc#Hv RAPh;S@C^PQGUfC3(?i mI yXKCW\U_S@ER.%?$AAI.@n._@}<^x%mcPAI:dI WR~lUU,FLr O_RHTS-GJ rA\T;y{\%hlknyETCE5'z]YDfhMnEIC6OEPXMdLEGI TAD[TC^DWD5"S(9-;RG lDCXETY  7S?F@y WVXICV4pS\X~#4pcR{%MkqE'02H0qbJCK x!3; [=`|}]tfBTM]\ViDA]P=ptJn?R9iVYAEZ[\ aKFta\pL ML%T  XP@ @@=dI( A [_N]V^M=z^PV<0LUZKhQ-{a! ?TEP-_YBJXVIISIqQ?`:=rqR?a@gI  FQ=\QVSA/MOs}|xS=vx,T3gOq 79aajzaTzw|H=[TDS[YVDS {rvZQOkvagt*o-(JRQY^m`7f2&uw yMZH?aqek1jcZmiET xLvc#*FUE g5>/%gn&+vZ3b.LC"dU],rt< ;k~D|HFx&cyRrkc]W`)k<7 %f@AXEJ>da7o[ -~lKXON~-Ns}ttyhi@Cd5zNO ,O:VhQL3jJ{dlfRzz) &ASOC'LE\Nm( tTG.J-y@,O^]BSY Ti}-BE9# /s`AVE{'K$Q-q!ifUPE~E@F%  WClvucf{wcSi& hTwdtd6vvv5E/#THw^\ LfRSU~< b\v6JyGDrIwvY*m[.Q[Z(6~ ('sgH-3TR]+" "(*p?a#M~wgb)5"#S"DhVBGCH V^N\ftL ~ui77C;(pU4NyaLPYHM sAmq}9F7M0y4GLJ4AF$0-+h]\AA2JuFJ%e&(.~lA% wvIuqe3N->?bX#$f"XIBC'H^c]@= O  ksw>W q \_TCRUGQNxO_PV$_-f#7P?q}UJcYbiA[~LD?#)T'?{\SLU_H Y RNT QOFVjLF32? / O^Dq!OK oP UL"bdN#O U[``IEVUTYCb_L"9vvvJ_D~?bW K0wyv,v&9O@{UYpWd_ zBl&)gft&&[jR^aQ>uav@Q[\W8ALE\[^%foqxn?dz fv}<p6Ikdv?f!R= OU-K[ yZAL/ 6v_]OTXEKIEILa@ oxCN@8FpT: T~#YA];yML'BCBrQOOEh=EVRZP?asMn 4Vh$]hYP""K${ED  UAPd@J B]Tn#Tq9 Ft}:e@;5tc{ 8vujgpMIIvK~ Y6U9?TAZVZRSAADK'$"c#938RX) `Y8v/!?B]S4DO@:{+V71>5d4h"?sAvj.3HG8vvu{qpr|9vKvutfegpqZ!"aiU SYRa#yh\a/OFYRL[\[_-@LBHCRC^TL9Q< tXf)"RVDO^_-DVTZ'-9bA GTQICY@W[W\SRPSQM]UdE@bIa5EJF YUGw ?bs F%Y3RT"@L^ 'E(@lofp.gc*#CEXVCSTXNaXiF"""]@=AWDc>@y3+^{#o~tgg&]D87+w"S2lowNKi:`rtbvdF :!%Llu BYNT-H ye~|9pR""JRyd #n0f/w$4=kbp ~%"0CI#bUu*SA#:!'Degp BUd7>>j[R@UbWF 2%h ]{sxuqR-Vus sP-p!-WR@%XFF_R  X@CCUp}sro0p mHiJ25|[WNW-ap_l)'^yh( W@wAw@%NUTRrecp.+f(LU WYN%v7P1JDA@!A'Q#m7ZQL[f&?6Seu\=bYBVJS<?2-5;UTd7L\;S2$h?6]LL6*.{$#"vQ{9_dADRYVQEAFWCMQTAI9b_5AKs~tiPU+/UnL[Uvd&{w*l3CE2b4`vVLUV@lRT)~,OYwib= CCb_KAIK>Wad'&. 2 Z @O^S  O?slti\PGorb_$CFIRG@88aaq1TAO& ??<A ZHUrhhK9q vfJt-aX?qs=Ns~tiPh}WA\DY \_@YF L`nsv|zwvKrcq&[x;qppx1wP-SLmyx+7I]JitO{E u#f ehJe x-a\iZPhX/96-?&W~fv'5y>7lxu ;?x 5 U[vgtaLJpP="^SSK?cMH)`LS&?5@ ev$}`A^W:vNoFEB^BYWF KTY^SU-qlx 'HoYBW -R;,IdUSREjATIm[NT YX*@=qaY?\P-F^cm`l~r3RSEl ovU{llTECTl VLIav:b3Pyfdt-f/W@= ~dsv d^O4ffc6m`fff/fw@=qa[!w6K 9@ cm`l'OERSEl a~d(m`lli@V_|R [La@=Dqc?GZP VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFyM VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF$4J VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFsr VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFj B VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1k&FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00 00000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00000000 FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFF0000FF0000FFFF00000000FFFFFF0000000000FFFF0000000000FF0000FF0000FF FFFF00000000FFFF00000000FFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF 000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF0000FF0000FFFF0000 0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF00000000FFFF FF0000000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFվ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1/5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FF00000000FFFFFFFF0000000000FF0000FF0000FFFF00000000 0000FFFFFFFFFFFFFFFF000000000000FFFF00000000FFFFFF00000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 00000000FFFFFF0000FF0000FFFF00000000FFFFFF0000000000FFFF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000FFFF00 00FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFFFFFFFF0000FFFFFFFFFF000000FF0000 FF0000FFFF0000FFFFFF0000FFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF FF00000000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FF0000FF0000FF FF0000FF000000FF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FF 0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFF0000FFFF0000FF000000FF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000FFFF00 00FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF000000FFFFFF0000FFFF0000FF000000FFFFFFFF000000FFFFFFFF0000FFFF0000 FFFFFFFFFF0000FFFFFF0000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 FFFF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000FFFFFF0000FF FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFF0000FFFF0000FF 000000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFFFFFFFFFF000000FFFFFF0000FFFF0000FF000000FFFFFFFF000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF00 00FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000000000000000FFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF00000000FFFFFF00000000FFFF0000FFFF0000 FFFF0000000000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FF FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF FF00000000FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000000000FF000000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF00000000FFFFFF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF00 00FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF000000FFFFFFFF000000FF0000FFFF0000 FF0000FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FF FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF FFFFFF000000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FF000000FF0000FFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFHg VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF000000FFFFFFFF000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF00 00FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FF0000FFFF0000 FF0000FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 FFFF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FF FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFF00FFFF0000FFFFFFFF0000FFFF0000FF FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FF0000FF0000FFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF00FF0000FFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFFFF00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00000000 FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFF0000FFFFFFFFFF00000000FFFF0000000000FFFF0000000000FFFF0000FFFF0000 FFFF000000FF00FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF FF00000000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000 0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FFFFFFFFFF00000000FFFF 0000000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFF0000 0000FFFFFFFFFFFFFFFFFFFF00000000FFFF00000000FFFFFF00000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 00000000FFFFFF0000FFFFFFFFFF00000000FFFF0000000000FFFF0000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF 000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00 00000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFٺ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1dgSFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF.- VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1bFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFZuKKKv=K=vvvKv=KKKK=vvvvvvvvv=vvvvvvvK=vvvvvvvvvvv=v=vvvvvvvK=vvvvvvvvvKKvvvvvvvvKvvvvvvvvv=vvvvvvvKKvvvvK=vvvvvvv==vvvvv=v=vvvvvvv=vvvvvv=vvvvvvKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvvKvvvKKKv=KvvvvvvKKvvvvKKvvvvvvKvvvvvvKvvvvv=Kvvvvvvv==vKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKvvv=Kvvvvvvvvv=vvvvKKKKvvvv=vvvvvvvKv=vvvvvvv==vvvvvvvv=vvvvvvvvKv=vvvvvvKKvvvvvvKvvvvv=v=vvvvKKvvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvvvvvKvvvvvvvvvvKvvvvvvvvKKKKv=Kvvvvvvv=v=vvvvvvvv=vvvvvvvvKvvvvvvvKv=vv=v=vvvvvvvvvKv=vvv=KvvKvvvvvKvvvvv=vKKKKKKKKKKKKKKKv=K=vvvKv=KKKvvvvvvKKvvvvvv=vvvvvvvKKvvvvvvKKKvvvvvvv=Kv=Kvvvvvvv=vvvvvvvvv=KvvvvvvvvvvKKvv=vvvvvvvvv==vvvvvv==vvvvvvv=vvvvvvKKvvvvKKKKKKKKKKKKKKKv=K=vvvKv=KKKKvv=vvvvvvvvv=vvvvvvvv==vvvvvKKK=vvvvvvvv=KvvvvvvKvvv=vvvvvvvv=Kvvvvvv=v=v==vvv=vKvvvvKvvvvvvv=vvvvKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKK==vvvvvvvvvKvvvKKKK=vvvvvvv=vKvvvvvvKKvvvvvvKvvvvv=vvvvvvvvKv=vvvvKKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKvvvvv=KvvvvvvvvvKvvvvvKKKKvvKvvvvvvvvvvKv=vvvvvvK=vvv=vvvvvvvKKvvvvv=KvvvvvvKvvvvvvKv=vvvvKKvvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvvvKvvvvvvvvKvvvvvvKKKKv=Kvvv=v=vvvvvv=vvvvvvvvKvvvvvvvKv=vvvvK=vvvvvvvKv=vvv=v=vvvvvvvvKvvvvvvKvvvvvvvvvvKKKKKKKKKKKKKKKKv=K=vvvKv=KK=vvvvvKKvvvvvvvvKvvvvvvvvvvK=vvvvvvvKKKvvvvvvv=Kv=v=vvvvv=vvvvvvvvv==vvvvvvvvv=vKvvvvvv=vvv=Kv=Kvvvv=KKvvvvvvKKKKKKKKKKKKKKKv=K=vvvKv=KKKKvvKvvvKvvvvvvvv==vvvKKKKvvvvv=KvvvvvvKvvv=vvvvvvK=vvvvvv=Kvvvvvvvvv=Kvv=vKvvvvKvvvvvvv=vvvvKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvvv==vvvvvvvvvv=vvvKKKK=vvv=vKvvvvvvKKvvvvvvKvvvvvvvvv=vvvvvvvvKKvvvvvvKK=vKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvKvKKKKKvvvvvvvvKKvvvvKKvvvvKvvvvvvKv=vvvvv=KvvKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvvvvv=vvKvvvvvvvv=v=KKvvvvKKKv=vvvv=vvvvvKvvvvvvvvKKvvvvvvvvKKvvvvvvvvKKvvvvvvv=v=vvvvKvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKvvKKvvvvvvvvKvvvvv==vvvvvvvKKKvvv=Kvvv=Kvvvvvvv=vvvvvvvvv=KvvvvKKvv=vvvKv=vvKv=vvvvvvKvvvvvvvvKKvvvvvvvvKKKKKKKKKKKKKKKv=K=vvvKv=KKKKvvvv=vvvvvvvvKvvvvvvvv==vvvKKKKvvvvKKvvvvKvvvvv=vvvvvvK=vvvvvvvKKKKvv=vKvvvv=vvvvvvvvvv=vvvvvvvvKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvvvvvvv=Kv=vvvvvvvv=KKK=vvv=vKvvKKvvvvKvvvvvvvvv=vvv=Kvvvvvvv=Kvv=vKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvKKKKKvvvvKKvvvvKKvvvvKvvvvvvKv=vvvvKv=KKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvKvvvvvvvvv=vvvvKKKKvvvvK=vvvvvvvKv=vvvvvvvv=vvvvvvvv=vvKKvvvvv=KvvvvvvKKvvvvv=v=vvvvKvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvvvKvvvvv==vvvvvvvKKKv=v=vvvvvvv=v=vvvvvvvKvvvvvv=KvvvvvvKKvvvvvvvvvv=vvvvvvvKv=vvvvvvvvv=v=vvvvvvKvvvK=vvvvvv=vKKKKKKKKKKKKKKv=K=vvvKv=KKKKvvvvvvKvvvv=vvvvvv=KvvvvKKKKvvvvv=KvvKvvvvvvv=vvvvvvvvv==vvvvvvvKK==vvvvvvvv==vvvvvvvvKvvvvvvvvvvv=vvvvvvvvv=Kvvvvvvvv=vKKKKKKKKKKK( VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1sqF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.a> VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFUK VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1JrFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF҇ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFFFF0000000000FFFF00000000 FFFFFF0000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00 000000FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFF0000000000FFFF00000000FFFF0000FFFFFF00 FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FF00000000FFFFFFFF00000000FFFF0000000000FFFFFF00000000FFFF0000FF0000FF FFFF0000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF00000000FFFFFF0000 000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF000000 000000FF000000000000FFFFFFFFFFFFFFFF0000FF0000FFFF000000000000FFFF0000FF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FF00000000FFFFFFFF0000000000FF0000FF0000FFFF00000000 0000FF0000FF0000FFFF0000FFFF0000FF000000000000FF000000000000FFFF00000000FFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF0000000000 00FF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00 000000FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FF0000FFFFFFFFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF00FF00 FF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FF00FF00FF0000FFFF0000FF000000FF0000 FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFF0000FF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFF0000FFFF0000FF000000FF0000FFFF0000FF FFFFFF000000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF00 0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FF000000FFFFFFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF00FF00 FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFFFFFFFFFF0000FF0000FF00FF00FF0000FFFF0000FF0000FFFF0000 FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFF0000FFFF0000FF000000 FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FF00FFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF00 00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000000000FFFF00000000FFFF0000000000 00FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF00FF00 FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFFFF0000000000FF0000FF00FF00FF0000FFFF0000FF0000FFFF0000 FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000 0000FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF3U VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1~FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF00 00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFF000000FF0000FFFFFF FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF00FF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000000000FF00000000000000FFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FF00FF00FF0000FFFF0000FF0000FFFF0000 FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF 000000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FF000000FF0000FFFF0000FFFF0000FF FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF00 00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFF0000FF0000FFFFFF 00FF0000FF000000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000FF000000FF0000FFFF0000FFFF0000FF00FF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FFFFFF0000FFFFFF0000FFFF0000FF0000FF00FF00FF0000FFFF0000FF0000FFFF0000 FF0000FF000000FFFFFFFFFFFFFFFF0000FFFFFF00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFF FF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FF0000FF0000FFFF0000FFFF0000FF FFFFFF0000FFFF0000FF0000FF000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF00 00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF000000FF00FF0000000000FFFFFF00000000 FFFFFF0000FF0000FFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00 000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFF0000FF0000FFFF00000000FFFFFF0000FF00FF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFFFF0000FFFFFFFF000000FF00FF0000FF00FF00FFFF00000000FFFF0000FFFF0000 FFFF0000FF0000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FFFFFFFFFF00000000FFFF000000 0000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000 FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000000000FFFFFFFF00000000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFF0000 0000FF0000000000FFFFFF0000FF0000FFFFFF00000000FFFFFF00000000FFFF00000000FFFF00 00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000FFFF FFFFFFFF00000000FFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00 000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF< VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;18FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFЉ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;100 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF T4 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF %Zyv=K=vvvKv=KKKKKvvvvvvvvvvv=vvvvvKKvvvKKKKvvv=Kvvvvvvv=vvvvvvvvv=vvv==vKKvv==vvvvKv=vvvvv=vvvvKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvvKvvvvvvvKvvvKKKKvvvvvvv=KvvvvK=vvvvvvvv=vvvvvvvvKvvvvvvKKvvvvKKvvvvvvvvKv=vvvvvv==v=vvvv=vvvvv=vKvvvvvvKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvv=vvv=vKvvKK=vvv=vKvvvvvvK=vvvvvvvKvvvvKKvvKKvvvvvv=vvvvvKKvvvv==v=vvvvv=v=vvvvv=v=vv=vvv=vKvvvvv==vvvvvKKKKKKKKvvK==vvKv=KKKKv=vvvv=vvvK=vvvKKKKvvvvK=vvvvvvvKvvvvv=vvvvKKvvvvKv=vvKKK=vvvvvKvvv=vvvvKKvvvvKv=vvvvKK=v=vvvvvv=vvvvvvKvvvvvvKKvvvvv=v=KKv=K=vvvKv=KKKKKvvvv=vvvvvvvvK=vvvvvvvvv=v=Kvvvv=v=vvvKKvvvvvvvv=vvvvvvK=vvvvvvKv=vvvvvKvvvvvvvKKvvvvvvvKKvvvvvKvvvvvvvvv=KvvvvvvvvKv=vvvvvvvvvvv=vvvvvvKv=vvvvK=vvvKvvvvvvvvK=vvvvvKKvvvvvvvvKKKv=K=vvvKv=KKKKKvvvvvvvvvvvKvvvvvvvvv==vvvvKKKKv=v=vvvvvvvvv=vvvvvvvKvvvvvvvvKKvvvvvvvKKvvvvvvvvvv=KvvvvvKv=vvvvvvvvvvv=vvvvKvvvvvv==vvvvKv=vvvvvvv==vvvvvKv=vvvvvvv=vvvvvvKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvvvvvv=vvvvvv=vvvvvvvKKKKvvvvvvv=Kvvv=Kvvvvv=vvvvvvvvKvvvvvvvvKKvvvv==vvvvv=v=vvvvvv=Kvvvvvvvv=vvvv=vvvvv=vKvvvvvvKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvv=vvv=vKvvKK=vvvvvvvvvKKvvvvvvK=vvvvvv=vvvvvvvv=vKvv=vKvvvvvvvv=vvvvvvvKKvvvvvv==vvvvvvvvv=vvvvvvvvvv=v=vvK=vvvvvvvv=vvv=vKvvvvK=vvvvvKKKKKKKKvvK==vvKv=KKKKKvvvvvvvvvKvvvvvvv=vKvvKKvvKKvvvvvvK=vvvvvvv=vvvvvvvv=vvvvKv=vvvvv=v=vvvvvvvvvvKKvvvv=v=vvvvv=vvvvvv=v=v=vvvvvvv=Kvvvvvv=vKvvvvK=vvvvvvKvvvKvvvvvvKKvvvvv=v=KKv=K=vvvKv=KKKKKvvKvvvK=vvvvKKKvvvv=v=vvvvvK=vvvvv=vvvvvvv==vvvvvvKKvvvvvvvvvvv=vvvvvvKKvvvvvvv=vKvvvvvvvKvvvvvvvvv=KvvvvvvKKvvvvvvv=vvvvKKvvvv=v=vvvvvvvv=vvvvvvK=vvvvvvvKKvvvvvvvvv=KKv=K=vvvKv=KKKKKvvvvvvvvv=vvvvvvvvvv==vvvvvvvvKKKKvKv=vvvvvKvvvv=vvvvvvKKvvvvvKv=vvvvvK=vvvvvvvvKv=vvvvv=vvvvKvvvv==vvvvvvKv=vvvvvvK=vvvvvvvKKvvvvKvvvvKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvvvvvv=vvvvvvvvvv=vvvKKKKvvvvvvv=KvvvvKKvvvvv=vvvvvvvvKvvvvvvKKvvvv==vvvvvvvvKvKvvvvKKvvvvvvvv=vvvv=vvvvv=vKvvvvvvKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvvKvvvvvvvv=vKvvKK=vvvvvv=KvvvvK=vvvvvvvv=vvvvvv=v=vvvKKvvvvvvvvvv=vvvvvvvvvKKvvvvvvvv==v=vvvvvv=vKvvvvvvvK=vvvvvvvvvv=vvv=vKvvvvK=vvvvvKKKKKKKKvvK==vvKv=KKKKKvvvvvvvvvKvvvvvvv=vKvvKKKKvvvvvv=vKvvvvvv=vvvKvvvvKKKv=vvvvvvvvvvvv=vKvvvv=vKvvvvKvvv=vvvvKv=v=Kvvvvvv=vKvvvvvv=v=vvvvvvv=vvvvvKvvvvvvKKvvvvv=v=KKv=K=vvvKv=KKKKK=vvv==vvKKKvv=KvvvvvvvKKvvvvvvvv=vvv==vvvvvvKv=vvvvv=vvvvvvKKvvvvvKKvvvvvv=vvvKKvvvKKvvvvvvKvvvvvvvvKv=vvvvvKKvvvvvvvv=vvvvvvK=vvvvvvvKKvvvvvvv=KKv=K=vvvKv=KKKK=vvvvv=vvvvvvK=vvvvvvv=KKKvKv=vvvvvvvvvv=vvvvvvKvvvv=KvvvvvKv=vvvvvK=vvvvvvvvKKvvvvvvv=vvvvKvvvvKKvvvvv=KvvvvK=vvvvvvvvvKKvvvvv=vvvvKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvvvvvv=vvvvvvKvvvvvvKKKKvvvvvvv=KvvvvKKvvv=vvvvvvvvKvvvv=vKvvvvvvvKKvvvvvvvvv==vvvvvvvKKvKvvvvvvvv=vvvvvvv=vKvvvvvvKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvvKvvvvvvvvvK=vvKKKvvvvv=KvvvvvvK=vvvv=vvvvvvK=vvvKKvvvvKvvvvvvvvKKvvvvvKKvvvv=vvvK=vvvvvK=vvvvvvvv=v=vKvvvvvvK=vvvvvKKKKKKKKvvK==vvKv=KKKKKvvvvKvv=vKvvKK=v=v=vKvvvv=vvvvvvvKvvvvKKvvvvKKvvvvvvvvvv=vKvvvvKKvvvvv=KvvKKvvvvv=v=vvvv=v=vvv=vKvvvvvv=vvvvvKKKKKKKv=K=vvvKv=KKKKKKvvvvvK=vvKKK=vKvvvvKKvvvvvvvvvvKvvvvvvvvKKvvvvvvvvvvKv=vvvvv=vvKKvvvv=v=vvvvvKvvv=KvvvvKKvvvvvvv=vvvvKK=v=vvvvvv=vvvvvvK=vvvvvvvKKvvvvvvv=KKv=K=vvvKv=KKKKKKvvvvv=Kv=KKKvvvv=v=vvvvvKvvvv=vvvvvvvvv==vvvvvvKv=vvvvvK=vvvvvvKKvvvvvvv=KvvvvKKvvvvKKvvvvK=vvvvvvvKv=vvvvv=vvvvvvvvKKKKKKKKK a VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;10gFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ( VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1kFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF "~| VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1{%FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFFFF0000000000FFFF00000000 FFFFFF0000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00 000000FFFF0000FFFFFF00FFFFFFFFFFFFFFFF0000FFFF0000FF0000FF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFF00000000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF000000 000000FF000000000000FFFFFFFFFFFFFFFFFF0000000000FF00000000FFFFFFFF0000000000FF FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FF000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFF00000000FFFFFF0000000000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF0000000000 00FF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF0000FF0000FF0000 FF0000FFFFFF00000000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FF0000FFFFFFFFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFF0000FF000000FF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FF 0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FF0000 00FF0000FF0000FFFF0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFK4 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;14FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FF000000FFFFFFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF 0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFF000000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF000000FFFFFF0000 FFFF0000FF0000FFFF0000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000000000FFFF00000000FFFF0000000000 00FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FF0000000000000000000000FFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFF0000FFFFFF0000FFFF0000FF 000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF0000 FFFF0000FF000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFF000000FF0000FFFFFF FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF0000FFFFFF0000FFFF0000FF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF0000FFFF0000FF0000FF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF0000 FFFF0000FF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFF0000FF0000FFFFFF 00FF0000FF000000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000 FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000FF000000FF0000FFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FF000000FF 0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF00FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000FFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FF0000FFFF0000FFFF0000FFFFFFFF0000 FFFF0000FF0000FFFFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF000000FF00FF0000000000FFFFFF00000000 FFFFFF0000FF0000FFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00 000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF*" VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1BCFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFF00000000FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000 FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFFFF0000FF0000FF FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00000000000000000000FFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFF00000000FFFFFFFFFFFF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000FFFF FFFFFFFF00000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF0000FFFFFFFF0000 FFFF0000FFFF00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFٳ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1XRFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF— VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1#aFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFʹg VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1+pFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFF݌5 VMS.BCK [V9.DOCS]IPD255.PS;2!FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2] VMS.BCK [V9.DOCS]IPD255.PS;2s-FFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFۏSKKKKKKvvvvvvvvvv==vvvvKKKKvv=Kvvvvvvvv=vvvvvvvvvvKvvvvKKvvvvvvKv=vvvvv==vKKvvvvvv=vvvvvv=vvv==vvvvvKKvvvvvvv=KvvvvKKvv=vvvvvv=vvvvvvKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvvvv=vvvvvvv=vvvvvvKKKKvKv=vvvvvvvK=vvvvvvvvv=vvv=vvvvvvvKKvKKvvvvvKKvvvvK=vvvvvvvKvvvvvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvv=vKvvvKKKvvvvvvv=Kvvvvvv=KvvvvvKvvvv=vKvv=vKvKvKKvvvKKvvvvvvvKvvvvvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvKKvvKKK=vvvv=Kvvvv=vvvvvvvvvK=vKvvvv=vKvvvvK=vvvvvvvKKvvvv=vvvvvvvKvvv=v=vvv=v=vvvvvv=vKvv=vKvvvv=vvvvvvvKvvvvKKKKKKv=K=vvvKv=KKKKKKvvKKvvKKvvK=v=v=vKvvvvvv=vvvvvKKKKvvvvvvKvvvvvv=vKvvvvKKvvvvKKKvvvvKKvvvvKvvvvvv=v=vvv=vKvvvvvKvvvvvKKvvvvvvKKKKKv=K=vvvKv=KKKKKKvKKvvvvvvvvvKKKK=vKvvvvKvvvvvvvvvvKvvvvvvvvKKvvvvvvvvvvKv=vvvvv==vKKvvvvvv=vvvvvKvvv=KvvvvKKvvvvvvv=KvvvvKKvv=vvvvvv=vvvvvvKKKKKKKKvvK=vvvKv=KKKKKKKvvvvvKvvvvvKKKKvvvv=v=vvvvvvvv=Kvvvv=vvvKKKv==vKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvv=v=vvvvvvvv=v=vvvvvvvKvvv=Kvvvvvvv==vvvvvvv=vvvvv=vKKKv=vvvvvvvvvvKKvvv==vvvvvKvvvvvvvvvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvKKvvvvKKKKvvvvvvv=Kvvvv=vvvvvKvv=vKvv=vKvvvvK=vvvvvvvKKvvvvvvvvKvvvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKKvv==vvvvvvvvv=v=vvvvvvvvv==v=v=vKvvvvvvvv=vvvvvKKKKvvvvvvKvvvvvvvvvv=vKvvvvKKvvvvKKKvvvvKKvvvvKvvvvvv=vKvv=vKvvvvvKvvvvvvvKKvvvvKKKKKv=K=vvvKv=KKKKKKKKKKKKKKvvvv=vvvvvvvKvvvvv=KvvvvKKvvvvv==vKK=vvvvvKvvv=KvvvvKKvvvvv==vvvKKvv=vvvvvv=vvvvvvKKKKKKKKvvK=vvvKv=KKKKKKKvvvvvKvvvKKKKvvvv=v=vvvvvv=Kvvvv=vvvvvvvvvvvKvvvvvvvvKKvvvvvvv==vKKvvvvvv==vvvvKvvvvvvvvKvvvvvvKv=vvvvvvv=KvvKKvv==vvvvv=vvvvvvKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvvK=vvKKKv=v=vvvvvvv==vvvvvvv=vvvvvvvvvvv=vKKKKvvvvvvvv=v=vv==vvvvvKvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvvvv=v=vvvvKKKKvvvvvvv=KvvvvvvvvKvvvvKvvvvvvvvvv=v=vvvvvvv=vKvvvvv=vKvvvv=vKvvvvv=vvvvvKvvvvvvvvKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKKvv==vvvvvvvvv=v=vvvvvvvvv==v=vvvvvvvKKvvvvvvvKvvvvvKKKKvvvvvvKvvvvvvvv=v=vvvvvvv=v=vvvvvvvvvv=vvvvKKvvvvKKvvvvKvvvvvv=vKvv=vKvvvvvv=vKKvvvvKKKKKv=K=vvvKv=KKKKKKKKKKKKvvKKvvvvvv=vvvvvvv=vvvvvvvv=KvvvvKv=vvvvvvv==vvvvvvvvvKKvvvvvv=vvvvv=vvvvvv=Kv=v=vvvvvvvvKKvvvvvv=vKvvvvvv=vvvvvvKvvvvvvvKKvvvvvvvvKKKKKKvvK=vvvKv=KKKKKKKvvvvvvvvvKvvvvvKKKKvvvv=v=vvvvvvK=vvvvvvvv=vKvvvvvvKv=vvvvv==vKKvvvv==vvvvvvKvvvvvvvvKvvvvvvvvKKvvvvvvv=KvvvvKKvv==vvvvv=vvvvvvvvKKKKKKKvvK==vvKv=KKKKKvvv=vvvvvKKvvvvvKKKvKv=vvvvvvvv=Kvvvvvvvvvv=vvvvv=vKKKvv=vvvvvKKvvvvv==vvvvvvvKvvvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvKvvvvvvvv=KKKKKvvvvvvv=Kvvvv=vvvvvKvv=vKvv=vKvvvvv==vvvvv=vKvvvvvv=vvvvvvvKvvvvvvvvKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKKvvvvvvvvvKKvvvKKvvK=v=vvvv=Kvvvvvvvv=vvvvvK=vvvvvKKvvvvvvKvvvvvvvv=v=vvvvvvvKKvvvvKvvvvvvKKvvvvKKvvvvvvKvvvvvv=vKvv=vKvvvvvv=vvvKKvvvvKKKKKv=K=vvvKv=KKKKKKvvvvvvvvv==vvvvvvvvvvv=v=vvvKKKKvvvvvvvvKvvvvvvvv=vvvvvvvKKvvvvvvvvKKvvvvvvv==vvvvvvv=vKvvvvvvKvvvvKvvv=KvvvvKv=vvvvv==vvvvv=vKvvvvvvvv=vvvvKvvvvvKKvvvvvvvvKKKKKKvvK=vvvKv=2 VMS.BCK [V9.DOCS]IPD255.PS;2J^FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00000000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFF00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFFFF00000000FFFF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFF00000000FFFF000000000000FF0000FF0000FFFFFF00000000FFFF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF000000 000000FF000000000000FFFFFFFFFFFFFFFF000000000000FFFF00000000FFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFęQ VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FFFF00000000FFFF00000000FFFFFFFFFF0000FFFFFF0000FF00 00FFFFFF00000000FFFFFF00000000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF00000000FFFFFFFF00000000 00FF0000FF0000FFFF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF00 00FF0000FF0000FF0000FFFFFF00000000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF000000FF0000FF0000FFFF0000FF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF000000FF 0000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFF0000FFFF00 00FF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00 00FF0000FF000000FF0000FF0000FFFF0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF 0000FF0000FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFF0000FFFF00 00FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF00 0000FFFFFF0000FFFF0000FF0000FFFF0000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000000000FFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0000FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000000000FF000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFFFF0000000000FFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF 0000FF0000FFFF0000FFFF0000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF00 00FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF00 00FFFFFFFF0000FFFF0000FF000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0000FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00FF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF 0000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK [V9.DOCS]IPD255.PS;2GFFFFF00 00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FF0000 00FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF00 00FFFFFFFF0000FFFF0000FF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000 FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF00FF0000FFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF0000FFFF 0000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FF00 00FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FF0000FFFF0000FFFF00 00FFFFFFFF0000FFFF0000FF0000FFFFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFFFF000000FF00FFFFFF000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFF00000000FFFFFFFF00000000FF0000000000FFFFFF00000000FFFF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000 FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF00000000FFFF00000000FFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFFFF000000FF00FFFFFF0000FFFFFFFFFF0000FFFFFF00000000 00FFFFFF00000000FFFFFF000000FF00FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFF00 00FF0000FFFF0000FFFFFF00000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF00 00FFFFFFFF0000FFFF0000FFFF00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFP( VMS.BCK [V9.DOCS]IPD255.PS;2{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF(g VMS.BCK [V9.DOCS]IPD255.PS;24FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF0000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFJ VMS.BCK [V9.DOCS]IPD255.PS;2BFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB`t VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF VMS.BCK [V9.DOCS]IPD255.PS;2 8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"F}E VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF00FFFFFF000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FFFFFF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8َ VMS.BCK [V9.DOCS]IPD255.PS;20K$FFFFFFFFFF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFFFF0000000000FFFF00000000 FFFFFF0000000000FF00000000FFFFFF000000000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFF00000000FFFF0000FFFF0000FF0000FF0000FFFFFFFF0000FFFFFFFF00000000FF FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00000000FFFF0000FF FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF000000 000000FF000000000000FF0000FF0000FFFF0000FFFF0000FF000000000000FF000000000000FF FF00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000000000FFFF000000 00FFFF0000FFFFFF00FF0000FF0000FFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF 0000FF0000FFFF00000000FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFF0000000000FF00000000FFFFFFFF00000000 00FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFF00FF00 FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF00 00FF0000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF000000FF0000FFFFFF0000FFFFFF0000FFFF0000 FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000FFFF0000FF0000FF 00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFF000000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF 0000FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FF0000FF00FF00FF000000FF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF 0000FF0000FF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF000000FF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFF00FF00 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF00 00FF000000FFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000 FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000FFFF0000FF0000FF 00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FF00FF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF0000 FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF 0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FF0000FF00FF00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF 000000FFFFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFFFF0000FFFF00 00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFF00FF00 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF00 00FFFF00000000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF000000000000 FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FF 00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ̥5vvKvvvv=vvvvvvv==vvvvKKKKvvvv=v=vvvvvvvvvKvvvvvvKvvvvvvKKvvvvvvKKvvvvK=vvvvv=v=vvvvv=vvvvvvvvKvvvvvvvKKKKvvvvKKvvvvKKvvvvvvKvvvv=vvvvv==vvKKvvvvKKKKvvK=vvvKv=KKKKvvKKvvvvvv=vvvvvvvv=vvvvvvvvKKvv==vvKKvvvvvvvKKvvvvvvvvKvvvvvvv=vvvvvKKvvvvvvv=KvvvvvvKKvvvvvvvvvvK=vvvvvvv=vvvvvvvv=vvvvKKvvv==vvvvv=v=vvvvvK=vvvvvvv=vvvvvKvvvvvvvvKKvvvvvvvvKKKKvvK==vvKv=KKKvvvv==vvvvvvvvvvKvvvvvvvvvvKKvvKKKvvvvvvvv=v=vvvvvvK=vvvvvvvv=vvvvvv=v=vvvvvvKv=vvvvvv=vvvvvvvKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvKvvvvvKvvvKKvvKKvvvvKKvKv=vvvvvvvvvKvvvvvvvvvv=vvvvK=vvvvvvKv=vvvvvvv=vKvvvv=v=vvvv=vvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKK=vvvvvvvvvvvvKvvvvvvK=vvvvvvKKKvvvvvvvvKKvvvvvvvKvKvvvv=vvvvvvvv=Kvv=vKvvvvvvv=vvvvvK=v=v=vvvvvKvvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKK=vvvv=vvvvvK=vvvvKKv=Kvvvvvvvv==vvvvv=vvvvvvv=vvvvK=vvvvvvvvvKKvvvvK=vvvK=vvvvvv=vvvvvvv=KKvvvvvvv=v=vvKKvvvvvvKKvvvvvvKvvvv=vvvvv==vvvvKKvvvvKKKKvvK=vvvKv=KKKKvvKKvvvvvvKvvvvvvvvKKKvv==vvv=v=vvvvvvv==vvvvKvvvvv=vvv=KvvvvvvK=vvvvvvKv=vvvvvvK=vvv=vvvvvvvKKKvvvvKKvvvvvvvvKKvvvvvvK=vvvvvvv=vvvvvvvv=vvvvvvKKvvvvvvvvKKKKvvK==vvKv=KKKvvvvvK=vvvvKvvvvvvKKvvKKvvvvvvvv=vvvvvKvKvvvvvvvvKKvvvv=vvvvvvvK=vvvvv=Kvvvvvvvvvv=vvvvvvvKK==vvvvKvvvvvvvvKKvvvvvvv=KvvvvvvvvKvvvv=vKKKKKKKKKKKvvK==vvKv=KKKKvvKvvvvvvvKvvvKKvvKv=vvvvvvvvvvKKvvvvvvvKv=vvvvv=vvvvvvvvv=vvvvvvvvv=v=vvvv=v=vvvv=Kvvvvvv=Kvvvv=vvvvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKK=vvvv=vvvvvvv==vvvvKKvvvvvKvvvvvvvvvvKKvvvvvKvKvvvvvv=vvvvvv=KvvvvvK=vvvvv=vvvKKvvvvKKvvvvvvvvKvvvvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvv=vvvvvvvv==vvvvKKvvv==vvvvvvvv=v=vvvvv=vvvvvvv=vvKKvvvvvv=vKvvvvK=vvvKvKvvvvvv=vvvvvvv=vv==vvvvKKvvvvvvv==vvvvv=v=vvvvvKvvvv=vvvvvKKvvvvvvvvKKvvvvKKKKvvK=vvvKv=KKKKvvvv==vvvvvKvvvvvvvKKKvv==vvvv=v=vvvv==vvvvvv=vvvv=vvvvv=v=vvvvvKKvvvvvvvvKKvvvvK=vvvvvvv=vvvvvvvvv=vKKvvvvKKvvvvKKvvvvvvK=vvvvv=vvvvvv=vvvvvvKKvvvvvvKKKKvvK==vvKv=KKKvvvvvK=vvvvvvv=vvvvvvK=vvvKKvvvvvvvvv=vvvvvvK=vvvvvvK=vvvvKvvvv=vKvvvvv=Kvvvvvvvv=vvvvvKKvv==vvKvvvvvvvvKKvvvvvvv=KvvvvvvvvKvvvvvv=vKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvvvKvvvvvvvKKvvKKvvvv=vKvvvvvKv=vKvvvv=vvvv=v=vvvvv=v=vvvvvv=vKvvvvvvKKvvvvKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKK=vvvvvv=vvvvvvvKKvvvvvvv=v=vvvvvvvvvKvvvvvvvvK=vvvvKvKvvvvvKvvvvvvvvK=vvvvvK=vvv=vvvK=vvvvv=v=vvvvvv=vvvvvvvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvv=vvvvvvvv==vvvvKKvvv==vvvvvvvv=v=vvvvvvv=vvvvvvv=vvvvKKvvvv=vKvvvvvvK=vvvvvvvv=vKvvvvvvKvvvvvvvv=vvvv==vvvvKKvvvvvvvvKKvvvvKKKKKKKKKKKKvvK=vvvKv=KKKKvvvvK=vvvvvKvvvvvvv=KKvv==vvvv=v=vvvv==vvvvvv=vvvvvv=vvvvv=v=vvvvvKKvvvvvvvvKKvvvvK=vvvvv=vvvvvvvvv=vKKvvvvKKvvvvKKvvvvvvK=vvv=vvvvvv=vvvvvvvvvvKKvvvvKKKKvvK==vvKv=KKKvvKKvvvvvvv=vvvvvvKKvvKKvvvvvvvvv=vvvv=v=vvvvvvK=vvvvvvKvvvv=vKvvvvv=KvvvvvvvvKvvvvKKvvKKvvKvvvvvvvvvvKKvvvvvvKKvvvvvvvvKvvvvvv=vKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvvvv=vvvvvvvKKvvKKvvvv=vKvvvvvKv=vvvKvvvv=vvvv=vKvvvvvv=Kvvvvvv=v=vvvKKvvvvKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKK=vvvvvv=vvvvvv=KvvvvvKKvvKvvvvvvK=vvvvvvK=vvvvvKvvvvvvK=vvvvvv=vKvvvvvvv=vvvvvvvvvvv=vKvvvvK=vvvv=vKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvKvvvvvvv==vvvvvvKKvvv==vvvvvvvv=v=vvv=vvvvvKvvvvvK=vvvvvvv=v=vvvvvv==vvvvvv=vKvvvvvKvvvvvvvKvvvvvvvvvvvKKvvvvKKvvvvvvvvKKvvvvKKKKKKKKKKKKvvK=vvvKv=KKKK!R VMS.BCK [V9.DOCS]IPD255.PS;2˸300FFFFFF 00FFFFFF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000 FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF 0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FF0000FF00FF00FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF00000000FFFFFFFF0000FFFFFF0000FFFF00 00FF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFF00FF00 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF000000FF0000FFFF00 00FFFFFFFF000000FFFFFF0000FFFFFFFF0000FFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000 FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF 0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FFFF0000FF00FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF000000FFFFFF0000FFFFFF0000FFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FF0000FFFF00 00FFFFFFFFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FF0000FFFF0000FF0000FF000000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFFFF00 FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF0000 FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FF000000FFFF0000FFFFFFFFFF0000FFFFFFFF 0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FF000000FF0000FFFF 0000FFFF0000FF00FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000FF0000 00FF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFFFFFFFFFF0000FFFF00000000 FFFF0000000000FFFFFFFF0000FFFFFFFFFF00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFF00000000FFFFFF0000FF0000FF0000000000FFFFFFFF0000FFFFFFFF00000000FF FFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00000000FFFFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF0000 FFFFFFFFFFFF00000000FF0000000000FFFFFF0000FF0000FFFFFF00000000FFFFFF00000000FF FF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFF0000000000FFFFFFFFFFFFFFFFFFFF0000FF0000FFFF000000 00FFFFFF0000FF00FFFF0000FFFF0000FFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF 0000FFFFFFFFFF00000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 00000000FFFF0000000000FFFFFFFFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFFFF0000FF00 00FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" VMS.BCK [V9.DOCS]IPD255.PS;2oRBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF00FFFFFF000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF#,@ VMS.BCK [V9.DOCS]IPD255.PS;2QFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF$B VMS.BCK [V9.DOCS]IPD255.PS;2$`FFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF%Ζ)| VMS.BCK [V9.DOCS]IPD255.PS;2^oFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF&7 VMS.BCK [V9.DOCS]IPD255.PS;2~FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'r= VMS.BCK [V9.DOCS]IPD255.PS;2-FFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF(7 VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00 000000000000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFF000000000000FF0000000000 00FFFF00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFF0000 00000000FF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF0000FF0000 FF0000FF0000FFFFFF00000000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFF0000FF0000FFFF00000000FFFF000000000000FF000000000000FFFFFFFFFFFFFF FFFFFF0000FFFFFFFF00000000FFFFFF0000FF0000FFFF0000000000FFFF00000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFF00000000FFFF0000FF0000FFFFFF0000000000FFFFFF0000FFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FF0000FF0000FFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFF FFFFFFFF0000000000FFFF00000000FFFF0000FFFF0000FF0000FF0000FFFFFFFF0000FFFFFFFF 00000000FFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00000000 FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFF000000000000FFFF00000000FFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000 FF000000FF0000FF0000FFFF0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF0000FFFF0000FF000000FF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFF000000FF0000FFFFFFFFFF FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF000000FF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000FFFF00 00FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000)EC VMS.BCK [V9.DOCS]IPD255.PS;21&000000000 0000000000000000FFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF000000FFFF FF0000FFFF0000FF0000FFFF0000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF000000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFF0000FFFF000000FFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF00 00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000FFFF00 00FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 0000000000000000FFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFFFF000000000000FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFF FF0000FFFF0000FF000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFFFF0000000000FFFF0000FFFFFFFF0000FFFF0000FF000000000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFF0000000000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF00000000FFFFFFFF FFFFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF00 0000000000FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF00 00FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF000000000000FF0000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFF FF0000FFFF0000FF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFFFFFF0000FF000000FF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF000000FFFFFF0000FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF00 00FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF00FFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FF0000FFFF0000FFFF0000FFFFFF FF0000FFFF0000FF0000FFFFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FF0000FF0000FFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FFFFFF0000FFFFFF0000FFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFFFF0000FF000000FF0000FFFF0000FF0000FF000000FF0000FFFF0000FFFFFF0000FFFFFF00 00FFFFFF00FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF00 00FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00 00FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF00FF0000FFFFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFFFFFF00000000FFFFFF000000 00FFFF00000000FFFF0000FF00FF00FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF00000000FFFFFF00 00FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF0000FFFFFF FF0000FFFF0000FFFF00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFF*&`TA VMS.BCK [V9.DOCS]IPD255.PS;21LFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFF0000FFFFFFFFFF000000FF00FFFF0000FFFFFFFFFFFF00000000FFFFFFFFFFFFFF FFFFFF0000FFFFFFFF000000FF00FFFF0000FFFFFFFFFFFFFFFF0000FFFF00000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFF000000FF00FF0000FFFF0000FFFFFFFFFF0000FFFFFF0000FFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFF0000000000FFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF FFFFFFFF0000FF0000FFFF00000000FFFFFF0000FF0000FF0000000000FFFFFFFF0000FFFFFFFF 00000000FFFFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00000000 FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFF00000000FFFF00000000FFFFFF00000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF+2]SQvvvvvvKKvvvvvvvv=v=vvvvv==vvvvvvvKvKvvvKvvvvvvvv=vvvvvvvKKvK=vvvvvvv=Kvvvvvvv=KvvvvvKvvv=vvvvvv==vvvv==vvvvvvvKK=v=v=vvvvvvvKvvvvvvKKvvvvv=v=vvvvv==vvvvvvvKKvvK=vvvKv=KKKKKKKvvvvv=vvvvvvvvv=KvKKvvvvvvvv=KvvvvvvKKvvvvvvvv=vvvvv=vvvvv=v=vvvvvK=vvvvv=vKvvvvvKKvvvvvvvvvKvvvv=vvvvvvv=v=vvvK=vvv=v=vvvvv==vvvvvvKKKKKKKKvvK==vvKv=KKKvvKKvvvv=vvK=vvvvvvv=Kvvvvvvv=vvv=vKvvvK=vvv=vvvvv=vKvvvvvKKvvvvv=vvv=Kvvvvv=Kvvv=vvvvvKKvvvvvvvvKKKvvvvvv=vKvvvvKKvvvvKvvvvvv=vKvvv=KvvKKKvvK==vvKv=KKKKvvvvvvvKvvvvvKvvvvvvv=KvvvvKKvvv=Kvvvvv=v=vvvvvvv=vvvvvvKv=vKvvvvvvvKKvvvvvvvvvvKKvvvv=vKvvvvvvv=vvvvKvvvvvv=vKvvvvv=KKKvv=vKvvvvvvKvvvvvvKvvvv=vKvvvvvvKv=vvKKv=K=vvvKv=KKKKKKvvvv=Kvvvvvvv=v=vvvvvKvvvv=vKvvvvv=KvvvvKvvvv==v=v=vvvvv=vvvvvvK=vKKvvv=vvvvvv==vvvvvvKKvvvvKvvvv=v=vvvvvKKvvKKKKKKKKv=K=vvvKv=KKKKvvvvv=vvvvvvvvKvvvKKKKvvvK=vvvvvK=vvvvvKvvKvvvvvvKKvvvv==vvvvvvv=Kvvvvvvv=KvvvvvKvvvvvvKvvvvvv==vvvvvvvKvKvvvvvKK=v=v=vvvvvvvKvvvvKKvvvvv=v=vvvvvvvvv==vvvvvKKvvK=vvvKv=KKKKKKvvKvvvvvvv=vvKKvvv==vvvvvvvKv=vvvvvvvvK=vvvvvvKvvvvvKvvKKvvvvK=vvvvvK=vvKKvvvvvvvKvvvvKvvvvvvvKv=vvvK=vvv=v=vvvvvKKvvvvvvKKKKKKKKvvK==vvKv=KKKKKvvvv=K=vvv=Kvvv=vvvvvKKvvvK=vvvvvvKvvvvvvv=vKvvvvvv=v=vvvvvKvvvvKv=vvvvvvK=vvvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvvvvvvv=vvvvvKvvvvvv=v=vvvvvvvvvKKvvvvv=Kvvvvv=v=vvvvvvvvv=vvvvvvKvvvvvvvvK=vvvv=v=vvvvvv=vKvvvv=vKvvvvvvv=vvvvvvv=vvvv=vKvvvvvvvvv=KKKvvvvvvvv=vKvvvvKvvvvKvvvv=vKvvvvvvKv=vvKKv=K=vvvKv=KKKKv=vvvvvvvvvvvv=vvvvvvvK=vvvvv=v=vvvKvvvv=vKvvvvv=KvvKvvvv==vvv=v=vvvvv=vvvvvvvvvvK=vvvKKvvv=vvvvvv==vvvvvvKKvvvvKvvvv=v=vvvvvKKvvKKKKKKKKv=K=vvvKv=KKKKvvvvvvvvv=vvvvvvKvvvvvvvv=Kvvvvvvvvvvv=v=vvvvvKKvvvvK=vvvvvKvvKvvvvvvvvKKvv==vvvvvvv=Kvvvvvvv=KvvvvvvvKvvvvv=vvvvvvKKvvvvvvvKvKvvvvvKK=v=v=vvvvvvvKvvvvKKvvvvv=v=vvvvKKvvvvKKvvK=vvvKv=KKKKKKvvvvKvvvvvvv=vvKKvvv==vvvvvKv=vvvvvvv==vvvKvvvvvvvvKvvvvvK=vvvvvvvvv=KvvvvK=vvvvvvvvKKvvvvvvvv=vvvvvvvvv=vvvvvKKvvvvvvvK=vvv=vKvvvvvvKKvvKvvvvvvvvKvvvvvvv=Kvvvvvvv=Kvvvv=v=vvvK==vvKv=KKKKKKvvvvvvKKvvKKv=vvvvvvvvvKv=vvvvvvvKKvvvvvvv=vvvv==vvvvvKv=vvvvvvvvvKvvvvKv=vvvvv==vvvvv=vvvvvv=v=vvvvv=v=vvKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvvvvKvvvvvv=vvKKvvv=KvKvKvvvvv=v=vvvvKvvvvv=vvvv=vKv==vvvvvvvKKvvvv=vKvvvvKvvvvvvvvv=vvvv=vKvvKKK=vvvvv=vKvvvvKvvvvKvvvv=vKvvvvv=KvvKKv=K=vvvKv=KKKKv=vvvvvvvvvv=vvvvK=vvvvvvvvKv=vvvvvvKvvvvvvvvvvvvKKvvvvvvvK=vvvvvv=vvvvvvvvKKvv=v=vvvvv=vvvvvvvv=vKvvvvvv=vKvvvvvvv=vvvv==vvvvvvKKvvvvKvvvvvv=vKvvvvKKvvvvvvvvv=vvvvv==vvvvvvv=vKvvvvKvvKKv=K=vvvKv=KKKv=vvvvvvvvvvv=vvvvvvKvvvvvvvv=Kvvvvvvvvvvv=v=vvvvvv=KvvvvvvK=vvvvvKvvvvvvvv=vvvvvvvKKvvvvvKv=vvvvv==vvvvvvvK=vvvvvv=vvvvvvvvvKvvvvvvv=KvvvvvvvvKvKvvvvvKK=v=vvv=vvvvvvvKvvvvKKvvvvv=v=vvvvK=vvvvvKKvvK=vvvKv=KKKKKKvvvvvvvvKvvvvv=vvKKvvv==vvvvvvvKv=vvvvvvv==vvvKvvvvvvKvvvv=Kvvvv==vvvvvK=vvvvvvvvKKvvvvvKvvvvvvvv=vvvvvvv=KvvvK=vvv=vKvvvvvv==vvvvKvvvvvvvvKvvvvvvv=v=vvvvv==vvvvv=v=vvvK==vvKv=KKKKKKvvvvv=v=KKvKvvvvvvvv==vvvv=KvvvvvvvKvvvvv=vKvvvvvvK=vvvKvvvvKv=vvvvvvvK=vvKvvvvvvKKvvvvKKvvvvKKKKKKKKKKKKKvvK==vvKv=KKKKvvvvvv=vvvvvv=KKvvvvKKvKvKvvvKKvKvvvvvvv=vv=v=vvvvvvKv=vvvvvvvvvKKvvvvvv==vvvvvvvvv=vvvvvvKvvvv=vKvvv=KK=vvvvv=vKvvvvKvvvvKvvvv=vKvvvvv=KvvKKv=K=vvvKv=KKKKKvvvvvv=vvvvvv==vvvvvvvvvv=v=KvvvvvvvvvKvKvvvv=KvvvvvvvKvvvvvvK=vvvvvvvKKvvvvvvvvKvvvvvvvvv=v=vvvv=vKvvvvvvv=vvvvvvKKvvvv=vKvvvvvvKK=vvvvv=vKvvvvvvv=vvvvv==vvvvv=vKvvvvvvv=vvKKv=K=vvvKv=KKKKvvv=vvvvKvvvvvvvv=Kvvvvvvvvvvv=v=vvvvvKKvvvvvv=vKvvvvKvvvvvvv=vvvvv=Kvvvvvvv=v=vvvvK=vvv=vKvvvv=vKvvvvK=vvvKKvvvvvvvvKKK=vvvvvvvKvvvvvvvvKvvvvKKvvvvv=v=vvvvvvv=KvvvvKKvvK=vvvKv=KKKKv==vvvvvvvKvvv, VMS.BCK [V9.DOCS]IPD255.PS;21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF-Xi<6 VMS.BCK [V9.DOCS]IPD255.PS;21T@FFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.*?e* VMS.BCK [V9.DOCS]IPD255.PS;28FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF/x85| VMS.BCK [V9.DOCS]IPD255.PS;2gFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0j VMS.BCK [V9.DOCS]IPD255.PS;2xFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFF1= VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFF000000000000FF0000000000 00FFFF00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFF0000FF0000FF00000000FFFFFFFF00 00000000FF0000FF0000FFFF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FF FFFF0000FF0000FF0000FF0000FFFFFF00000000FFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFF0000FF0000FFFF00000000FFFF000000000000FF000000000000FFFFFFFFFFFFFF FFFF0000000000FF0000000000FFFFFF00000000FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FF0000FFFFFFFF FFFFFFFFFF00000000FFFF0000FF0000FFFFFF0000000000FFFFFF0000FFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF 2f VMS.BCK [V9.DOCS]IPD255.PS;2 #FFFFFFFFFFFFFFFF0000000000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000 00FFFF000000000000FF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF 0000FF0000FFFF00000000FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFF 0000FF0000FFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFF0000 FFFF0000FF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000 FFFF0000FF0000FF000000FF0000FF0000FFFF0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFF0000FF00FF00FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FF0000FFFFFFFF FFFFFFFF0000FFFF0000FF000000FF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF 0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF 0000FF0000FF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF 0000FF0000FF0000FFFF0000FF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000 FFFF000000FFFFFF0000FFFF0000FF0000FFFF0000FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF000000FFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FF000000FFFFFFFF0000FF00FF00FFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000FFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 00000000FFFFFF000000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF 0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF 000000FFFFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF 000000FFFFFF0000FFFF0000FF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000 FFFF0000FFFFFFFF0000FFFF0000FF000000000000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFF00000000FFFF0000FF00FF00FFFF0000000000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFF0000000000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF00000000 0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF 0000FFFFFFFF000000000000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000 FF000000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000 FFFF0000FFFFFFFF0000FFFF0000FF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FF0000FF00FF00FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF000000FFFFFF0000FFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 00000000FFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF FFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3 VMS.BCK [V9.DOCS]IPD255.PS;2?2FFFFFFFFFFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF00 00FF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FF0000FFFF0000 FFFF0000FFFFFFFF0000FFFF0000FF0000FFFFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FF0000FF00FF00FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FFFFFF0000FFFFFF0000FFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFF FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF 0000FFFFFFFF0000FFFFFF00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFFFFFF00000000FFFFFF000000 00FFFF00000000FFFF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFF FFFF0000FF0000FFFF0000FFFFFF00000000FFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FF FFFF0000FFFFFFFF0000FFFF0000FFFF00000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFF0000FFFFFFFFFF000000FF00FFFF0000FFFFFFFFFFFF00000000FFFFFFFFFFFFFF FF0000000000FFFF0000FF00FF00FFFF000000FF00FFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFF000000FF00FF0000FFFF0000FFFFFFFFFF0000FFFFFF0000FFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFF0000000000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF000000 00FFFFFF0000FFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF 0000FFFFFFFFFF00000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF 0000FFFFFFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF000000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF4_L VMS.BCK [V9.DOCS]IPD255.PS;2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 -Q VMS.BCK [V9.DOCS]IPD255.PS;2tPFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FF000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0000FF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6ɝ K=vvvvvvvvvvv=vKvvvvvvKvvvvKvvvvv=Kvvvv=vKvvvvvvv==vvvvvvvvv=v=vvvvvKv=vvvvvvK=vvvvvvvKKvvvvvvvvKKvvvvvvvvK=vvvvvKKKKKKKKKKvvK=vvvKv=KKKKv=KvvvvKKKKv=KvvvvvvK=vvvKKvvvvKvvvvvvvvv=vvvvKv=vvvvvvv=KvvKKvvvvKKv=vvvvKvvvvvvv=v=vvvvK=vvvKK==vvvvKvvvvvvvvKvvvvKKvvvvv==vvvvvK=vvvvvK==vvKv=KKKKKvvvvvvvvv=vvvvv=KKKvvvv=vvvvvvvKvKvvvv==vvvvvvvKvvvvvvKKvvvvKv=vvvvvvvvKvvv=v=vvvvvvK=vvvvvvKvv=KvvvvKKvvvvvv=vvvKK==vvvvvvKvvvvvvvvKKvvvvv=v=vvvvvvvv=vvvvv=v=vvvvvKKKvvvvKv=KKKKvv=vvvv=vvKKKKvKv=vvvvvvvv=v=vvvvvvvv=vvvvvv=vvvvvvvv=vKvvvvvvK=vvvvvvvKKKv=vvvvvv=vvvvvvKvvvv=KKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvv=vvvvvvv=KvKKKvKvKvvvvvKv=vvvKKKvvvv=v=vvvvvvKvvvvvvv=vKvvvvKv=vvvvvvv=vvvvK=vvvvvvvvvv=Kvvvvvvvvvvv=vvvvvvvvKKvvvvvvKKKKKKKKKKv=K=vvvKv=KKKKvvKvv=vvvvvvvvvv=KKKK=vvvvvvvv=Kvvvvvv=vvvvvKvvvvvK=vvvvKKvvvvvvv=KvK=vvvvKvvv=vvvvK=vvvvvvvKKvvvvvvvvK=vvvvvvvK=vvvvvvvKKKKKKKKKKvvK=vvvKv=KKKKvvKKvvKKKKKKvvvvvvKKvvvvvvK=vvvvvv=vvvvvvKvvvvvvv=v=vvvvK=vvvKKvvvvKKv=vvKvvvvv=v=vvvvKKvvvvvvvvKKKKvvvvvvvvKvvvvvvvvKvvvvKKvvvvv==vvvvvvv=vKvvvvK==vvKv=KK=vvvvvvvvvvKKvvvv=vvvvv=KKKvv=vvvvvvvKvKvvvvvK=vvvvvKvvvvKKvvv=v=vvvvvvvvKvvvvvvvvv=Kvvvvvv=Kvvvvvv=vvv=KvvvvKKvvvv=vvvKK==vvKvvvvvvvvKKvvvvvvKKvvvvvv=vvvvv=v=vvvv===vvKv=KKKKvvvvvvvKvvvvvv=vvKKKKvKv=vvvvvvvv=v=vvvvKvvvvv=vvvv=vKvvvvvvKKvvvvKKvvKKvvvvvv=vvKvvvv=KKKK=vKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvvv=vvvvvvv=KvKKKvvvvvvv=KvK=Kvvv=KvvvvvvvvKKvvvvvvvKvvvvv=v=vKv=vvvvvvv=vvvvvvK=vvvvvv=Kvvvvvvv=vvvvvvvvKKvvvvvvKKKKKKKKKKv=K=vvvKv=KKKv=Kvvvv=vvvvvvvKKvvvvvvvvvv=vKvvvvvvvvKKvvv=Kvvvv=vvvvvvvvvKvvvvvK=vvvvKKvvvvvvv=Kvv=vKvvvvKKvvvvK=vvvvvKKvvvvvvK=vvvvvvvK=vvvvvvvKKKKKKKKKKvvK=vvvKv=KKKKvvKKvvKvvvvKKKK=vvvKKvvK=vvvvvvvKvvvvvvvvKKKvvv=K=vKKKKvvvvKvvvvKKKKKKKKKKKKKKKKvvK==vvKv=KK=vvvvvvKKvvvv=vvvvv=KKK=vvvvvK=vvvvvvvKKvvvvKvvvvvvKKvvvvKv=vvvvvvvvKvvKKvvvvKKv=vvvvvvKKvvvvv=v=vvvv=vvvKK==vvKvvvvvvvvKKvvvvKKvvvvvv=vvvvvvvvv=v=vvvvvK==vvKv=KKKK=vvvv=vvKKKKvvvv=v=vvvvvKv=vv=vvvvvKvvvvvvKKvvvv=v=vvvvvKKvvvvvvv=Kvvvvvv=vvvvvvv=vvvvvv=KKK=v=vKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvvvvv=vvvvvvKKvKKKvvv=Kvvvvvvv=KKv==vvvvv=vKvvvvvvvv=vvvvvKKvvvvKv=vvvvvvvvvvKKKvvv=Kvvv=KKKKKKKKKKKKv=K=vvvKv=KKv=KKvvvvvv=vvvvvvvvvK=vKKKKvvvvv=Kvvvvvv=vKvvv=Kvvvvvv=vKvvvvvvv=Kvv=vKvvvvKv=vvvvvvvvK=vvvKKvvvvK=vvvvvvvK=vvvvvvvKKKKKKKKKKvvK=vvvKv=KKKKvvKK=vvvvvKKKK=vvvKKvvK=vvvvvvvvvvvKvvvvvvvvvvKKKvvv=Kvv=vKKKKvvKvvvvvvKKKKKKKKKKKKKKKKvvK==vvKv=KKKK=vvvvvKKKKKKvvvvK=vvvvvvvKKvvvvKvvvvvvKKvvvvKv=vvvvvvvvKvvKKvvvvKKv=vvvvvvKKvvvvvvv=v=vvvv=vvvKK==vvKvvvvvvvvKKvvvvKKvvvvvv=vvvvvKKvvvvK==vvKv=KKKKvvKvvv=vvKKKKvvvv=v=vvvKv=vvvvvvvvvv=vvvvvv=vvvvvvvvKv=vvvvvvvvv=vKvvvvvvvvv=vKvvv=v=vvvvvv=vvvvvvvvKvv=v=vvvvvvKKvvvvvv=v=vvvvvvvKKKvvvvvvvvKvvvvvvvvKKvvvvv=v=vvvvvvvvKKvvvvvK==vvvvvKKvvKKKKKv=vvv==vKKKv=v=vvvvvvvvv=v=vvvvvv=vvvvvvvvvvK=vvvvvv==vvvvvv=vvvvvvvKKvvvvvvv=KvvvvvvvvvvvvKvvvvvv==vvv=Kvvv=KKKKKKKKKKKKv=K=vvvKv=KKvvKKKvvvvvvvvKvvvvKKvvvvvvvvvv=vKvvvvvvvvKKvKvKvvvvvvvv=vvvKvvK=vvvvvvvvvvv=vKvvvvvvvK=vvvvvvvvvv=vKvvvvKvvvvvvvvvvv=vvvvK=vvvKKvvvvK=vvvvvvvKKvvvvvvKKKKKKKKKKvvK=vvvKv=KKKKvvKKKvvvvvvKKK77 VMS.BCK [V9.DOCS]IPD255.PS;2Mt_FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8*d VMS.BCK [V9.DOCS]IPD255.PS;21vfnFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9^ VMS.BCK [V9.DOCS]IPD255.PS;21}FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF:7' VMS.BCK [V9.DOCS]IPD255.PS;2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;M) VMS.BCK [V9.DOCS]IPD255.PS;2 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFF000000000000FF0000000000 00FFFF00000000FFFF0000000000FFFFFFFFFFFFFFFFFFFF0000000000FF00000000FFFFFFFF00 00000000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFF0000FFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFF0000FF0000FFFF00000000FFFF0000FF0000FFFFFF00000000FFFFFF0000000000 FFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFF0000FF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF00000000 FFFFFFFF0000000000FF0000FF0000FFFF000000000000FFFFFFFFFFFFFFFFFF00000000FFFFFF 0000FF0000FFFF0000FF0000FFFF00000000FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF FF0000FFFFFFFFFFFFFFFFFFFFFF00000000FFFF0000FF0000FFFFFF0000000000FFFFFF0000FF FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000 FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FF0000FF0000FFFF0000FF000000FF0000FF0000FFFF0000FF0000FFFF0000 FFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF000000 FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFFFF0000FF0000FFFFFF0000 FFFFFF0000FFFF0000FF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF 0000FF0000FFFF0000FF0000FF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF FF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FF000000FF0000FF0000FFFF0000FFFFFF0000FF FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFF000000FFFFFFFFFFFF0000FFFFFF0000 FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF000000FFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000 FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF000000FFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFFFFFF0000FF0000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000 FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF 000000FFFFFFFF000000FFFFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FF FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF00000000FFFFFFFF0000FFFFFF0000 FFFF0000FF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0000FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFF0000000000FF0000FFFF0000FF000000000000FF0000FFFF0000 FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFF00FF FF00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0<jf0D VMS.BCK [V9.DOCS]IPD255.PS;20FF00FFFF0000000000FF0000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000 FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFF 0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFF0000FFFF0000FFFF FF0000FFFFFFFFFFFFFFFFFFFFFF0000000000FF0000FFFF0000FF0000FFFF0000FFFFFF0000FF FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFF000000FFFFFF0000FFFFFF0000 FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF0000FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFFFFFFFF0000FFFF0000 FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF00FF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FF0000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000 FFFFFF0000FF000000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF 0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFFFFFFFF0000FFFF0000FFFF FF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF000000FFFFFF0000FF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFF0000 FF000000FF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF000000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFFFF00FF0000FF000000 FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000 FFFFFFFF0000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF 0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF000000FFFF FF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FFFFFF0000FF FFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFFFFFF00000000FFFFFF000000 00FFFF00000000FFFF0000FF00FF00FFFFFFFFFFFFFFFF0000000000FFFFFFFF0000FFFFFFFF00 00FF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFF0000FFFFFFFFFF000000FF00FF0000000000FFFFFF00000000FFFFFF0000FF0000 FFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFF000000FF00FF0000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFF0000000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000 FFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFF00000000FFFFFFFFFFFFFFFFFF000000FF00FFFF 0000FFFFFFFFFF0000FFFFFFFFFF00000000FFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF FF0000FFFFFFFFFFFFFFFFFFFFFF000000FF00FF0000FFFF0000FFFFFFFFFF0000FFFFFF0000FF FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFF0000FFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF=& VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FF00FFFF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF00FF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>y} VMS.BCK [V9.DOCS]IPD255.PS;27aFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFF00 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF?Ȅ5 VMS.BCK [V9.DOCS]IPD255.PS;2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF@„ VMS.BCK [V9.DOCS]IPD255.PS;21'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAMv1$=Kvvvvvvvvvvv=vvvvvvvvKvvvvKKKKvvvvKKvvvvvvvvKKKvvvvKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvv==vvvvKvvv=vKKKKvvvvvvvvKKvvvvvv==KvvvvKvv=vKvvvvvvvvv==vvvvvvvvvKKvvvvvv==K=vvvvvvvvvKKvvvvKKvvvvK=vvvvvvvKKvvvvvvv=KKKKKKKvvK==vvKv=KKKKK=vvvvvvvvvv=v=vvKKvv=vvvvvKKvvKKKvvvvvvvvv=Kvvvvv=v=vvvvvv=vKKvvvvvKKvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKvvvvv=v=Kvvvvvv=vvvKKKK=v=vvvvvK=vvvvvvvvvKvvvv=vvvvvvvKKvvvvKv=vvvvvvvvK=vvvvvKKv=vvvvv=vvvvvvKKvvvvv=v=KKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvKvvvvK=vvvKKKvvvv=v=vvvKv=vvvvvvvvvv=vvvvvvK=vvvvvvKKvvvvvvvvv=vvvvvvvv=vKKKvvvvvvvKvvvvvvvvKKvvvv=Kvvvvvvv=vvvvvvKKKKKKKKKKKKv=K=vvvKv=KKKKvvv=vvvvvv=vvv=KvvvKKKKvvvvv=v=vvvvv=vvvvvv=vvv==vvvvvvKKvvvvvvvvvvv==vvvvvvvvvKKKvvvvvvvvKvvvvvv==vvvvKv=vvKKKKKKKKKKKKKKvvK=vvvKv=KK=v=vvvvvvvvvvv==vvvvvvvKvvv=vKKKKvvvK=vvvvvvvKKvvvvvKvvvvvvvvKvv=vKvvv==vvvvvvvvvKKvvvvvv==Kvv=vvvvvKKvvvvKKvvvvK=vvvvvvvKKvvvvvvKKKKKKKKvvK==vvKv=KKKKKvv=vvvvvvvvvv=v=vvKKvv=vvvvv=vKvvvvvvKKKvvvvvvvvvKv=vvvvvvK=vvvvKvvvvK=vvvvvvvvv==vvvvvvK=v=vvvvvKKvvvvvvvvKvvvvvvvvKKvvvvvvvvKKvvvvv=KKKKKKKvvK==vvKv=KKvvvvvvv=v==v=vvvvvvvvvKKKKvvK=vvvvvK=vvvvvvvvvKvvvvKvvvvKKvvvvvvv=v=vvvv=v=vvvvvKKvvvvvv=vvvv=vvvvvvKKvvvvvvv=v=vvKKKKKKKKKKKKv=K=vvvKv=KKKKv=vv=vvvKKvvvvvvKKKvvvv=v=vvvvvKvKvvvvv=vvvvvvv==vvvvvvvvKv=vvvvvvvvv=vvvvvvK=vKKvvvvvvvv=vvvvvvKKvvvvvvvKv=vvvvvvvvv=vvvvKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvvvKvvvvvvK=vvvvvKKKKvvvvvKv=vvvvvv=vvvvvvvv=vvvvvvv==vvvvvvvvKv=vvvvvvK=vvvvvvvKKKvvvvvvvv=vvvvvvKKvvvvvKv=vvvvvvKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvKKvvvvvv=vvv=vKKKKvvvvvKvKvvvvvv=KvvvvvvvvvKvvvvvvvvKvv=vKvvv=KvvvvKKvvvvvv==vvvvKvv=vvvvvKKvvvvKKvvvvK=vvvvvvvKKvvvvvvKKKKKKKKvvK==vvKv=KKKKKvvvv=vvvKKKKvv=vvvvvvvKKvvvv==KvvvvvvvvvKv=vvvvK=vvvvvv=vvvvv=vKvvvvvvvv==vvKvv=vKvvvvKKvvvvvvvvKvvvvvvvvK=vvvvvvvKKvvvvvvv=KKKKKKKvvK==vvKv=KKKKKKKKKKvvK=vvvKKvvvvvvKvvvvvvv=vvvvvvv=v=vvvvvv=vKvvvv=v=vKKvvvvvKvv=vvvvKv=vvvvKv=vvvvvvKKKKKKKKKKKKv=K=vvvKv=KKKv=KvvvvvvKvvvvvvv==vvvvvKv=Kvv=Kvvvvvvv=Kvvvvvvvvv=vvvvv==vvvvKKvvvvv=vvvvvvvvK=vvvvvvvvvKKvvvvKvvvvvKKvvvvvvvKv=vvvvvvvvv=vvvvKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvv=vvvvvK=vvvvvKKKKvvvvvKv=vvvvvvvvvKvvvvvvKvvvvvv==vvvvvvKv=vvvvvvK=vvvvvvvKKKvvvvvv=vvvvvvKKvvvvvKv=vvvvKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvKKvvvvvvvvKvvvKvvvvvvvKKKKvvvvv=KvvvvvvK=vvvvvvvKvvvvvvvvKvv=vKKKvvvvKKvvvv==vvK=vvvvvvvKKvvvvKKvvvvKKvvvvvvvvKKvvvvvvKKKKKKKKvvK==vvKv=K=v=vvvvvvvvvvv==vvvvvKvvv=vKKK=vvvvvKKvvvv==Kvvvvv=KvvvvvK=vvvvvv=vvvvvKKvvvvvvvKKvKKKvvvvKKvvvvvvKvvvvvvK=vvvvvvvKKvvvvvvv=KKKKKKKvvK==vvKv=KKKKKKKKKKvv=vKvvvvKKvvKKvvv=KvvvvvK=vvvvvv=vKKKvvvvvKvvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKv=KvvvvvvKvvvvvKKvvvvvvvKv=K=v=vvvvvK=vvvvvvvvvKvvvv==vvvvvvKKvvvvv=vvvvvvvvK=vvvvvKKvvvvv=vvv==vvvvvKKvvvvvvv=vvvvvvvvKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvKvvv==vvvvvKKKKvvvv=v=vvvvvv=vv=vvvvv==vvvvvvvvKv=vvvvvvvvvvK=vvvvvvvKKKvvvvvv=vvvvv==vvvvv=KvvvvKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvK=vvvvv=vvvvvvvvKvvvKKKKvvvvvBU VMS.BCK [V9.DOCS]IPD255.PS;21TFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCvӏ' VMS.BCK [V9.DOCS]IPD255.PS;21UFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FF0000FFFFFFFFFF0000FF00000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFD VMS.BCK [V9.DOCS]IPD255.PS;21FFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF00FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FFFFFF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FF0000FFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFF00FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF 00FFFFFF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF00000000FFFF000000000000FF0000000000 00FFFF00000000FFFF0000000000FFFFFFFFFFFFFFFFFF000000000000FFFF00000000FFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFF0000FFFF0000FFFF00000000FFFF0000FF0000FFFFFF00000000FFFF0000FF0000FF FFFF0000000000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF 00FFFFFF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFF0000000000FFFF00000000FFFFFFFF0000 000000FFFF0000000000FFFFFF0000FFFFFFFF00000000FFFF0000FF0000FFFF0000FFFF0000FF 000000000000FF000000000000FFFF00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FF0000FF0000FFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FF00 00FFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00000000FFFF00 00FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF00 00000000FFFF0000FF0000FFFFFF0000FF0000FFFF00000000FFFFFFFF0000FFFFFFFFFF0000FF FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF000000FF0000FF0000FFFF0000FF000000FF0000 FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF 00FFFFFF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFF0000FFFFFF0000FF FF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF000000FF0000FF0000FFFF0000FF FF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF000000FF0000FFFFFFFFFFFFFFFF0000FFFF0000FF000000FF 0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000FFFF0000FF00 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00FFFFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF00 00FF00FF00FF000000FF0000FFFF0000FF0000FF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FF FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF00E VMS.BCK [V9.DOCS]IPD255.PS;21X"00FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FF00FFFF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFF0000FF0000FFFF0000 FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FF 00FFFFFF00FF00FF00FF00FFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFF0000FFFFFF0000FF FF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF FF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000FFFF0000FF00 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF00 00FF00FF00FF0000FFFF0000FFFF000000FFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFF0000FF FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFF000000000000FF0000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00000000FFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000000000FF0000FFFF0000 FF0000FFFF0000FF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF 00FFFFFF00FFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFF0000FFFFFF0000FF FF0000FF0000FFFF0000FFFFFF0000FFFFFF000000000000FF0000FFFF0000FF0000FFFF0000FF FF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF00 00FF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF00FFFF00FFFF0000FF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF00 00FF00FF00FF0000FFFF0000FFFF0000FFFFFFFF000000000000FFFFFF0000FFFFFFFFFF0000FF FFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFF00FF0000FFFF0000FFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000 FF0000FF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFF0000FFFFFF0000FF FF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FF0000FFFF0000FF FF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF 0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF0000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF00 00FF00FF00FF0000FFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFF0000FF FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FF00FF00FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFF00FF0000 FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF00FF0000FFFF0000FF0000FFFFFF00FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000 FFFF0000FF0000FF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFF0000FFFFFF0000FF 000000FF0000FF000000FFFFFF0000FFFFFF0000FFFFFF00FF0000FFFF0000FF0000FF000000FF FF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FF000000FF0000FFFF 0000FFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFF00FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF000000FF00 00FF00FF00FF0000FFFF0000FFFF0000FFFFFFFF0000FFFFFF00FFFFFF0000FFFFFFFFFF0000FF FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFF00000000FFFFFFFF00000000FFFFFF000000 00FFFF00000000FFFF0000FF00FF00FFFFFFFFFFFFFFFFFFFF00000000FFFF00000000FFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFF0000FFFF0000FF.A VMS.BCK [V9.DOCS]IPD255.PS;211FFF00000000FFFF0000FFFF0000FFFF000000FF00FF0000FFFF0000 FFFFFFFFFF0000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FFFFFF0000FFFFFFFF0000 FF0000FFFF0000FF0000FFFFFF0000FFFFFFFF00000000FFFF0000000000FFFFFF0000FF0000FF FFFF00000000FFFFFF00000000FFFF00000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFF0000000000FFFFFFFFFFFFFFFFFFFF0000FF0000FF00000000 00FFFFFFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00000000FFFFFF 0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF0000FFFFFFFF00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF00 00FF00FF00FF0000000000FFFFFF0000FFFFFFFFFF00000000FFFFFFFF0000FFFFFFFFFF0000FF FFFFFF000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 000000000000000000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGM% VMS.BCK [V9.DOCS]IPD255.PS;2-@FFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFH"B VMS.BCK [V9.DOCS]IPD255.PS;29OFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFIZ; VMS.BCK [V9.DOCS]IPD255.PS;2^FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFJ VMS.BCK [V9.DOCS]IPD255.PS;2%JmFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFKo VMS.BCK [V9.DOCS]IPD255.PS;2|FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFLTFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF00FFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Fm%mE!KKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvvvvvv==vvvvvvvKvv=vvvKKK=vvvvvKKvvvvKKvvvvvvv=vvvvKvvvvvvKv=vvKKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKK=vvvv=vvvvvvvvKv=KKvvvv=vvvvvvvv=v=vvv==vvvvvvvvKvvvvvvvvvKv=Kv=KKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvKvvvvv=Kv=vvKv=vvvvvvKKvvvvvvK=vvvvvvvvv=vvvvv=vvvvvvvvvKKKKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvv=vvv==vKv=v=vvvv==vvvvvKKvvvKvvvvvvK=vvvvvKKvvvvv=KKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKvvvvv=vvvvvvKvvvvvvKKvvvvvvvvKKKKvvvvKKvvvvvKvvvvvKvvvvK=vvvvvvvKKvvvvvvv=KvvvvKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvvvvvvvv==vvvv=vvvvvvvvKvvvvKKKKvvvvvvvvKKvvvvKKvvvvKvvvvvvvv=vvvvvvvKv=vvKKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKv==vvvKvvvvKv=vvKKvvvv=vvvvvvvKv=vvvvvvv==vvvvvvvv=vvvvvvKKv=KKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvKvvvvv=v=KvvKKvvvvv=v=vvvvv=v=vvvv=vvvvvvvvKvvvvvvvKKKKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvvvv=vvvvvvvvK=vvvvvKv=v=vvvvvvKv=vvvvvvvK=vvKvvvvvvv=Kvvvv=vKvvvvvvvvv=KKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKv=vvvvKvvvvv=K=vKKKKvvvvvvKKvvvvvKvvvvvKvvvvK=vvvvvvvKKvvvvvvv==vKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKv=vvvvvvvvvvv==vvvv=vvvvvvvvvvKvvKKKKKKKKvvvvK=vvvKKKKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKvvv==vvvKvvvvvvKKvvKK=vvvKKvvvvKKvvvvvvv=vvvvKKvvvvvvv=KKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKvvKvvKvvvvKKvvKKvvvvvvvvKKvvvvKv=vvvvvv=vvvvv=vvvvvvvKKKKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKv=vvvvvvvvv==vvvvvKv=vvv=vvvvvvKv=vvvvv=v=vvvvKvvvvv==vvvvvvvvvKv=vvvvvvKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKv=vvvvKvvvvvvvvv=vvvvv=KvvvvKKKKvvvvvvvvKKvvvvvKvvvvvKvvvvK=vvvvvvvvv=vKvvvvvvv=KKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKv=vvvvvvvvv==vvvvvv=vvvvKvvKKKKKKKKK=vvvKKKKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKvvvvv==vvvvvvvv=vvvvKKvvKK=vvvKKvvvvKKvvvvvvv=vvvvKKvvvvv=v=KKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKv=vvvvvvvvv=v=vvvvvvv=v=vvvvvvvvvvK=vvvv=v=vvvv=vvvvv=vvvvvvvKKKv=vvKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKv=vvKKKv=vvv=vvvvKv=vvv=Kvvvvvvvvvvvv=vvvKKvvvvKKvvvvKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKvvvvvvKvvvvvvvvvvv=vvvvvvvvKKvvvvKKKKvvvvvK=vvvvvKvvvKvvvvv=KvvvvKKvvv=KKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvvvv==vvvvvv=vvvvKvvKKKKvvvvvvvv=vKvvvvvvvvKKvvvvvvvvKvvvvvv=vvvvvvv=vKvvvvv=KvvvvKKKKn F VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1rMFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFo* VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1\FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFp6q VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1kFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFq S VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1UzFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00000000000000FFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 0000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFr~ \ VMS.BCK [V9.DOCS]IPD255.PS;22EXE;1rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFF000000000000FF0000000000 00FFFF00000000FFFFFF00000000FFFFFFFFFFFFFFFFFF0000000000FFFF0000FFFF0000FFFF00 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FF0000FFFFFF00000000FFFF0000FF0000FFFFFF0000000000FFFFFFFFFF0000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF0000FFFF0000FFFF0000 0000FFFFFF0000000000FF000000000000FF00000000FFFFFFFF00000000FFFF0000FF0000FFFF FFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF0000FF0000FFFF00000000FFFF0000FFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FF0000FF0000FFFFFF0000FF0000FFFF00000000FFFF0000FFFF 0000FFFF00000000FFFFFF00000000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00FF0000FF0000FFFF0000FF000000FF0000FF0000FFFF0000FFFFFFFF000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0000FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF FF0000FF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF000000FF0000FF FFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FFFF0000FF0000FF0000FFFF0000FF0000FF00 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFF000000FF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFF 0000FF0000FFFF0000FF0000FFFF0000FF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000FFFFFF000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF FF0000FF000000FFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FF FFFFFFFFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFF000000FFFFFF0000FFFF0000FF0000FF00 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFF0000FFFF0000FFFF000000FFFFFFFFFFFFFF0000FF0000FFFF 0000FF0000FFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF0000FFFF00FFFFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF000000000000FF000000000000FFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000000000FF0000FFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF000000 000000FFFF00000000FFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FF FFFFFFFFFFFFFs92 VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1&FFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FF00 FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFF0000FFFF0000FFFF0000FFFFFFFFFF0000000000FFFF0000FF 00FFFF0000FFFFFFFFFFFF0000000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FF00FF00FF00 FF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000FF00FF00FF0000FFFF0000FF0000 FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF FFFFFFFFFFFFFF000000FFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FF FFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000FF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FF 00FFFF0000FFFFFFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF00FF000000FF00FF00 FF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFF FFFF0000FFFFFF00FF0000FFFFFF00FFFFFFFFFFFFFFFF0000FF00FF00FF0000FF000000FFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFF00FFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FF0000FFFF0000FF0000FF000000FF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF000000FF0000FF000000FF0000FF FFFF00FFFFFFFFFF0000FFFF0000FFFFFFFFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FF FFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000FF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF00FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFFFF0000 FFFFFF0000FFFFFF00FF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF00FF00FFFF0000 FF00FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF00000000FFFFFF0000FFFFFFFFFF0000FFFF FFFFFF00000000FFFFFF00000000FFFFFFFFFFFFFFFFFF0000FF00FF00FFFF0000FF0000FFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF0000 FFFF0000FFFF000000FF00FF0000FFFF0000FFFF0000FF0000FF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FFFF0000 0000FFFF0000000000FFFFFFFF00000000FFFFFF0000FFFFFFFF00000000FFFF0000FFFF0000FF FFFFFFFFFFFFFFFF000000FF00FFFF0000FFFFFFFFFF0000FFFFFFFFFF00000000FFFFFF0000FF 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFF0000000000FFFFFF0000FFFFFFFFFF000000FF00FFFFFF0000 FFFFFFFF00000000FFFFFF000000FF00FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 000000FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFtO VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1a*FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF00FF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF00FFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFu1B VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF v^ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1XYFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFw: VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFxj[vvvvvvvv=vKvvvvKKvvvvKKvvvvv=vvvvvvvvKvvKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvvvKvvvvvv=vvvKKKKvvvvvvvvKKvvvvvv==vvvvKvvvvvv=vvvvvvv=v=vvvvvKKvv=v=vvvvvvvvvKKvvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvKvvv=Kvvv=KKKKKKKKKKKKKKKKKvvKv=vvvvKKKKKKKKKKKKKKKvvK==vvKv=KK=v=vvvvvvvvvKvvvvvvv=vvvvvvKKvvvvKK=v=vK=vvvvvvvKvvvvKvvvvKKvvvvKKvvvvKKKKvvvvv=vvvvvvKvvvvvvvvKKvvvvvvKKKKKKKKKKKKKKv=K=vvvKv=KKK=v=vvvvvv=vvv=KKKKvvvvKvKvv=v=vvvvvv=vvvvvvK=vvvvvvKKvvvvvvvvv=vvvvvv=vKKKvvvvvvv=vvvvvvKKvvvvvvKv=vvvvvvKKKKKKKKKKKKKv=K=vvvKv=KKKKvv=vvvvvKvvvvvvvvvvKKKv=vvKKvvvvvvKv=vvvvv=vvvvvvvv=vvvvvKKvv=v=vvvvvKKvvvvv=v=vvvvv=vvvvvvKKKvvvvvv=vKvvvvKKvvvvKKvvvvv=vvvvvvKvvKKKKKKKKvvK=vvvKv=KKKK==vvvvvvv=vvvv=vvvKKKKvK=vvvvvvvv=KvvvvvvvvvKvvvvvvvvvvKvvvvvv=v=vvvvvvv==vvvvvvvvKv=vvvvv==vvvKKvvvvvvvvKKvvvvvv==vvvvv=v=vvvvvvv=KvvvvKvvKKKKKKKvvK==vvKv=KKKKKvvvvvvvvv=vvvvKv=vvvvKKKvvvvvvvv=vKvvvvvvvvKKvvvvv=vvvvvvvv=vKvvvvKKvvvvvvvv=vvvvv=v=vvvvvvvKKvvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKv=vvvvvvv=vvvvvvvvKKvvvvvvKK=v=vvvK=vvvvvvvKvvvvKvvvvKKvvvvKKvvvvvvK=vKKvvvvv=vvvvvvKvvvvvvvvKv=vvvvKKKKKKKKKKKKKKv=K=vvvKv=KKK=v=vvvvvKvvvvvvvv==vvvvvvvvvvKKvvvvKvvvv=v=vvvvvv=vKvvvvvvvvv=vvvvvvv==vvvvvvKv=vvvvvvv=vvvvvv=v=vKKvvvvv=vvvvvvKKvvvvvvvvKKvvvvKKKKKKKKKKKKKv=K=vvvKv=KKKKvvKvvvvKvvvvKKvvvvKKvvKKvvvvv=KvvvvvvvvKvvvvvvvvvv=vvvvvvK=vvvvvv=KvvvvvvvKKvvvvv=v=vvvvv=vvvvvvKKKvvvvvv=vKvvvvKKvvvvKKvvvvv=vvvvvvKvvKKKKKKKKvvK=vvvKv=KKKK==vvvvKvvvvvv=vvvKKKKvvvv==vvvvvvvv=KvvvvvKvvvvvvvv=vvvvvvvK=vvvvvKKvvvvvvv=v=vvvvvvv==vvvvvvvKKvvvvvv=vKvvvvvv==vvvvv=v=vvvvv==vvvvvvvKvvKKKKKKKvvK==vvKv=KKKKKKvvvvvvvKvKvvKKKvvvvKKvvvvvvvv==vvvvv=vvvvvv=v=vvvvvKKvvvvvvvvKvvvvvvKKvvvvvvvv==vvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKv=vvvvvvv=vvvvvvKKv=KK=vvvvvvvKKvvvvvvvvKvvvvKvvvvKKvvvvv=v=vvvvvv=vKKKvvvvv=vvvvv=vvvvKKvvvvKKKKKKKKKKKKKKv=K=vvvKv=KKK=vKvvKvvvvKKvvKKvvvvKvvvv=v=vvvvvKvKvvvvv=vvvvvvvKKvvvvvvvvKv=vvvvvvv=vvvvvv=v=vKKvvvvv=vvvvvvKKvvvvvvvvKKvvvvKKKKKKKKKKKKKv=K=vvvKv=KKKKvv=vvvvvKvvvvvvv==vvvvvvvKKvvKKvvKv=vvvvvvvvvvKvvvvvvvvvv=vvvvvvKKvvvvvK=vvvKKvvvvKv=vvvvvvv=vvvvvvKKKvvvvvv=vKvvvvKKvvvvKKvvvvvvv=vvvvKvvKKKKKKKKvvK=vvvKv=KKKKvv==vvvvvvvvKvvvvKvvvvvvvvKKKKvvvvKv=vvvvvvK=vvvvvKvvvvvv=vvvvvvvK=vvvvvvvvvv==vvKKvvvvvv==vvvvvvvKKvv=vKvvvvvvKKvvvvvvKKvvvvv==vvvvvvvKvvKKKKKKKvvK==vvKv=KKKKKv=vvvvvv=KvvvKKKvvvvvvKKvvvvvv==vvvvvvK=v=vvvvvK=vvvvvvvKvvvvKKvvvvvvvvKKvvvvKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvKvvvvKv=vvKv=KKKKKKKKKKKKKKKKvvvvKKvvvvKKKKKKKKKKKKKKv=K=vvvKv=KKK=vKvvKvvvvvvK=vvvvvKKvvvvK=v=vK=vvvvvvvKvvvvKKvvvvKKvvvvvvvvv=vvvvvvvvvv=v=vKKvvvvv=vvvvvvKKvvvvvvvvKKvvvvKKKKKKKKKKKKKv=K=vvvKv=KKKKvvKvvvvv=vvvvvvvKKvvvvvvvvvv=v=vvKKvvvvKv=vvvvvvv=vvvvvvvvvv=vvvvvvv==vvvvvvvvKKvvvvKKKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKvvKKvvKvvvvvvvvvvKvvKKKKvvvvvvKv=vvvvvvK=vvvvvvvvvKvvvvvvvv=vvvvvvvvv=KvvvvvKKvvvvv=v=vvvvv==vvvvvKKyUz VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1kFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFz>] VMS.BCK [V9.DOCS]IPD255.PS;21EXE;1qF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF{ VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1PFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FF0000FFFF00000000FFFFFF00000000 00FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000 FF0000FFFFFF00000000FFFFFF00000000FFFFFF0000FF0000FF000000000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF00000000FFFFFFFF0000 000000FF0000FF0000FFFF000000000000FFFFFFFFFFFFFFFF0000FF0000FFFF000000000000FF FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF0000000000FF000000000000FFFF00000000FFFFFF0000FF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FF0000FF0000FFFF0000FF0000FFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFF0000 00FF0000FF0000FFFF0000FF0000FFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFF0000FFFFFF0000FF FF0000FF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFF FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF0000FF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000000000 000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FFFFFF0000FFFF0000FF000000FFFF FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF|w VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFFFFFFFF0000FFFF000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFF0000FF FF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF000000FFFFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFF000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFF00000000 FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF000000000000FFFF0000000000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FF FF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFF00FFFF000000FFFFFFFFFFFF FFFFFFFFFFFFFFFF00000000FFFFFF0000FFFFFFFFFF0000000000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000000000 000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FFFFFFFF0000 00FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFF0000FF 000000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFF000000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF00FFFF0000FFFFFFFF0000FFFF0000FFFFFFFFFF00 00FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFFFF00FF0000FFFF0000FFFF0000FFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFF0000 FF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFF0000FFFFFFFFFF00000000FFFF0000000000 FFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF00000000FFFFFF000000FF00FFFF0000FFFFFFFFFFFF00000000FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}Z VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1?FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF FF0000FF0000FFFF0000FFFFFF00000000FFFFFFFFFFFFFFFF0000000000FFFFFFFF00000000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFF00FFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000000000FFFFFFFF00000000FFFF000000FF00FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FF00FFFF00FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF00FFFFFF00FFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFF00FF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF~dpz VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFT< VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1"L=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>; VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1OLFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF? VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1[FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFjG VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1$<jFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9N"qKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvv=vvvvvvv=vvvv=v=KKvvKKvvvvKKvvvvKvvvvvvvvKvvvvK=vvvKKv=v=vvvvvvKKvvvvvvvvKvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvKvvvvKKKv=Kvvvvvvvvv=KvvvK=vvKvvvvvvvvvvKKvvvv=v=vvvKv=v=vvvvK=vvvKvvvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKv=vvKKKKK=vvvvvKKvvvvvvvvKv=vvvvKKK=vKKKKKvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvKv==vvvvvKKKKKKKvvKKKKKKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvKvvvvvvvvvvKKvvvvKKKK=v=vKvvvvKvvvvvvv=KvvvvvvvvKKvvvvvvv=KKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvv=vvvvvvv=vvvvvv=KKKvvvvKKvvvvvvv==vvvvvvv=vvvvvKvvvvKKvvvvKKv=v=KKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvKvvvvvvvvKKKv=KvvKKvvv=KvvvvKvvvvvvvvKKvvvv=v=vvvKv=v=vvvvK=vvvKvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvvKvvvvvv==vvvvvvvvKKKKvvvvvvvvKKvvvvKvvvvvvv=vvvvvvKK=v=vKKKK=vvvKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvKv==vvvvvKKKKKKKvvvvKKKKKKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKv=vvvK=vvvvvvvvvvKv=vvvvKK=v=vKvvvvKvvvvvvv=KvvvvKv=vvv==vKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvvKvvvvvvKvvvvvvKKKKvvvvK=vvvvvv=Kvvvvvv=vvvKvvvvvvvvvvKv=vvvvvvvvvvv==vv=v=KKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvv=vvvv=v=vKv=KvvKKvvvvvvK=vvvvvvvvv=vvvvvKv=vvvvvv=KvvvvvvvvvKv=v=vvvvK=vvvKvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvv=vvvvvv=vKvvvvvv=KKKvv==vvvvvvvvKvvvvvvv=vvvvvvvvK=vvvvv=v=vvvvvvvKKv=v=vvvvvv=vvvvvvvvvKvvvvvvvvKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKKKKvvvvKKKKKvvvvvvvv=vKvvvvvvvvvvv=vvvvvvv=Kvvvv=v=vKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvKvvv=KKKKK=v=vvvKvvvvKvvvvvvv=KvvKv=v==vKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvKvvvvvvKvvvvvvKKKKvvvv=v=vvvvvvvv=Kvvvvvvvv=vvvvvvvvvKvvKKvvvvKKKKKKKKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvKvvvvvvvvvv=v=vKv=KvvKv=vvvvKKvvvvvv=vvvvvvvvvKv=vvvvvv=v=vvvKv=v=vvvvK=vvvKvvvvKKKKKKKKKKKKKKKKKvvK==vvKv=KKKKKvvvvvv=vvvvKvKv=v=KKvv==vvvvvvvvvvKvvvvvvv=vvvvvvvvvv=vKvvvv=v=vKKv=v=vvvvvv=vvvKvvvvvvvvKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKKKKvvvvKKKK=vvvKKvvvvvvvvKvvvvv==vvvvv=v=vKKKKKKKKKKKKKKKKKKKKKKKv=K=vvvKv=KKKKKvvvvKv==vvvvvKKKKK=vvvvvvvKvvvvKvvvvvvvvKKvvvvvvvvvvKKvvvvvvvvv=KKKKKKKKKKKKKKKKKKKKKKKvvK=vvvKv=KKKKKKvvvvvvv=vvvvvvKvvvvvvKv=vvvvKKvvvv=v=vvvvvv==v=vvvvvKvvvvKKvvKKKKKKKKKK* VMS.BCK [V9.DOCS]IPD255.PS;2.EXE;1oyFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000 %%EndData %%EndObject end dsd^ Q1` O1` $5 tsi^ showpage $0 seni^ %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Trailer end %%Pages: 40 %%DocumentSuppliedResources: %%DocumentNeededResources: font Times-Roman %%+ font Helvetica %%+ font Palatino-Roman %%+ font Helvetica-Oblique %%+ font Helvetica-BoldOblique %%+ font Palatino-Italic %%+ font Helvetica-Bold %%+ font Symbol %%+ font Palatino-Bold %%DocumentProcessColors: Black %%DocumentCustomColors: %%CMYKCustomColor: %%EOF PMpub` restore *[V9.DOCS]IPD258.PS;1+,`./ 4-0123KPWO56P 7V{+89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 08:02:02 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def ` VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1Tm} def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0: VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1790 984(VIB:)N 1979(A)X 2057(Visual)X 2294(Interface)X 2627(Builder)X 2904(for)X 3027(Icon)X 1 f 1884 1224(Mary)N 2078(Cameron)X 2392(and)X 2528(Gregg)X 2749(Townsend)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Introduction)X 1 f 732 2236(Construction)N 1172(of)X 1266(an)X 1369(interactive)X 1735(graphics)X 2034(application)X 2417(can)X 2556(require)X 2811(a)X 2874(large)X 3062(effort)X 3268(to)X 3357(specify)X 3617(the)X 3743(screen)X 3977(layout.)X 4245(For)X 612 2332(graphics)N 904(programs)X 1227(written)X 1474(in)X 1556(Icon)X 1719([1][2],)X 1947(VIB)X 2105(eases)X 2295(this)X 2430(part)X 2575(of)X 2662(the)X 2780(project)X 3023(by)X 3123(providing)X 3454(an)X 3550(interactive)X 3909(layout)X 4129(tool.)X 732 2456(An)N 854(application)X 1234(built)X 1404(by)X 1508(VIB)X 1670(has)X 1801(two)X 1945(parts:)X 2147(the)X 2269(interface)X 2576(speci\256cation)X 3006(and)X 3147(the)X 3270(rest)X 3411(of)X 3503(the)X 3626(program.)X 3963(Both)X 4143(can)X 4280(be)X 612 2552(contained)N 944(in)X 1026(the)X 1144(same)X 1329(source)X 1559(\256le.)X 1721(VIB)X 1879(edits)X 2050(the)X 2168(interface)X 2470(speci\256cation;)X 2917(any)X 3053(text)X 3193(editor)X 3400(can)X 3532(maintain)X 3832(the)X 3950(rest.)X 732 2676(When)N 945(VIB)X 1104(edits)X 1276(an)X 1373(existing)X 1647(\256le,)X 1790(it)X 1855(alters)X 2050(only)X 2213(the)X 2332(interface)X 2635(speci\256cation)X 3061(\(adding)X 3327(one)X 3464(if)X 3535(necessary\))X 3897(and)X 4035(leaves)X 4258(the)X 612 2772(rest)N 751(of)X 841(the)X 962(\256le)X 1087(unmodi\256ed.)X 1514(When)X 1729(VIB)X 1890(creates)X 2137(a)X 2196(new)X 2353(\256le,)X 2498(it)X 2565(writes)X 2784(a)X 2843(complete)X 3159(program)X 3453(by)X 3555(providing)X 3888(a)X 3946(skeletal)X 4213(Icon)X 612 2868(program)N 920(to)X 1018(accompany)X 1420(the)X 1554(interface)X 1872(speci\256cation.)X 2353(This)X 2531(program)X 2839(simply)X 3092(prints)X 3310(each)X 3494(event)X 3704(\(button)X 3971(push,)X 4178(slider)X 612 2964(movement,)N 1001(or)X 1099(whatever\))X 1452(on)X 1563(standard)X 1865(output,)X 2119(but)X 2251(it)X 2325(can)X 2467(be)X 2573(modi\256ed)X 2887(incrementally)X 3358(to)X 3450(produce)X 3739(the)X 3867(actions)X 4124(desired)X 612 3060(while)N 810(remaining)X 1155(a)X 1211(functioning)X 1600(program)X 1892(at)X 1970(each)X 2138(stage.)X 732 3184(VIB)N 895(provides)X 1196(a)X 1257(prototyping)X 1655(facility)X 1907(for)X 2026(testing)X 2264(the)X 2388(interface)X 2696(at)X 2780(any)X 2922(time.)X 3130(The)X 3281(interface)X 3589(is)X 3668(built)X 3840(and)X 3982(executed)X 4294(to)X 612 3280(allow)N 814(experimentation)X 1359(with)X 1525(the)X 1647(interface.)X 1993(Prototyping)X 2394(is)X 2471(possible)X 2757(regardless)X 3107(of)X 3198(the)X 3320(state)X 3491(of)X 3582(the)X 3704(Icon)X 3871(code)X 4047(in)X 4133(the)X 4254(\256le)X 612 3376(being)N 810(edited.)X 732 3500(Applications)N 1163(built)X 1331(by)X 1433(VIB)X 1593(use)X 1722(the)X 1842(visual)X 2055(interface)X 2359(\(vidget\))X 2635(library)X 2871([3].)X 3028(Not)X 3171(all)X 3274(of)X 3364(the)X 3485(vidget)X 3708(capabilities)X 4096(are)X 4218(sup-)X 612 3596(ported)N 837(by)X 937(VIB;)X 1117(sophisticated)X 1555(applications)X 1962(can)X 2094(call)X 2230(vidget)X 2450(procedures)X 2823(directly)X 3088(to)X 3170(augment)X 3466(the)X 3584(VIB-built)X 3915(interface.)X 732 3720(In)N 823(addition)X 1109(to)X 1195(laying)X 1420(out)X 1547(the)X 1670(application)X 2051(as)X 2143(a)X 2204(whole,)X 2445(VIB)X 2608(can)X 2745(also)X 2899(be)X 3000(used)X 3172(to)X 3259(construct)X 3578(dialog)X 3803(boxes.)X 4055(This)X 4222(pro-)X 612 3816(cess)N 766(is)X 839(described)X 1167(in)X 1249(Section)X 1509(5.)X 732 3940(VIB)N 898(is)X 979(a)X 1043(revision)X 1329(of)X 1424(the)X 1550(X-Icon)X 1806(Interface)X 2121(Builder,)X 2409(XIB)X 2576([4].)X 2739(VIB)X 2906(uses)X 3073(compact)X 3374(speci\256cations)X 3839(that)X 3988(can)X 4129(coexist)X 612 4036(with)N 784(user)X 948(source)X 1188(code)X 1370(in)X 1462(the)X 1590(same)X 1785(\256le.)X 1957(The)X 2112(Icon)X 2284(program)X 2585(library)X 2828(contains)X 3124(a)X 3189(program)X 5 f 3492(uix)X 1 f 3623(for)X 3746(translating)X 4113(an)X 4218(XIB)X 612 4132(speci\256cation)N 1037(into)X 1181(VIB)X 1339(form.)X 732 4256(VIB)N 890(is)X 963(started)X 1197(by)X 1297(entering)X 1580(the)X 1698(command)X 5 f 1044 4390(vib)N 1168([)X 2 f 1190(\256lename)X 5 f 1462(])X 1 f 612 4524(where)N 2 f 835(\256lename)X 1 f 1133(is)X 1212(the)X 1336(name)X 1536(of)X 1629(an)X 1731(existing)X 2010(application)X 2392(source)X 2628(\256le)X 2756(or)X 2849(a)X 2911(new)X 3071(one)X 3213(to)X 3301(be)X 3403(created.)X 3702(If)X 2 f 3782(\256lename)X 1 f 4080(does)X 4254(not)X 612 4620(contain)N 868(a)X 924(suf\256x,)X 5 f 1148(.icn)X 1 f 1292(is)X 1365(appended.)X 1733(If)X 2 f 1807(\256lename)X 1 f 2099(is)X 2172(omitted,)X 2456(VIB)X 2614(generates)X 2938(a)X 2994(name.)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(2.)N 712(The)X 865(Palette)X 1 f 732 796(Upon)N 930(startup,)X 1188(VIB)X 1346(presents)X 1629(a)X 1685(large)X 1866(window)X 2144(containing)X 2502(a)X 2558(menu)X 2756(bar,)X 2899(a)X 2955(palette)X 3189(of)X 3276(user)X 3430(interface)X 3732(objects,)X 3999(and)X 4135(a)X 4191(work)X 612 892(area)N 767(or)X 854(canvas.)X 612 1016 MXY 3744 1728 72.00 *{ VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1m# 273.00 540.00 489.00 startFig %!PS-Adobe-2.0 EPSF-2.0 %%%Creator: pnmtops %%%Title: noname.ps %%%Pages: 1 %%%BoundingBox: 72 273 540 489 %%%EndComments /readstring { currentfile exch readhexstring pop } bind def /picstr 82 string def %%%EndProlog %%%Page: 1 1 gsave 72 273 translate 468 216 scale 650 300 1 [ 650 0 0 -300 0 300 ] { picstr readstring } image 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000007fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fff387ffffffffff39ffffffffff87fffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807f073e7f ffffffc1f39f7fffff0ffe7ffff7ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff807f3ffe7fffffffcff3fe7fff fe67fe7fffe7ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807f3c3e787fffffcf821c0ffffe7e1e7870c0ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807f3f3e733fffffcf339e7ffffe3cce732667ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807f0f3e733fff ffc3339e7fffff0cce7327e7ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807f3f3e703fffffcf339e7fffffc4 0e7027e7ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807f3f3e73ffffffcf339e7fffffe4fe73e7e7ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7f3f3e73bfffffcf239e7ffffe64ee73a767ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807f3f3e787fffffc1 939f0fffff0e1e7870f0ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff8000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000007fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807fffffffffffffffffffffffffff fffffffffffffffffffffffff80ffffffffffffffffffffff007ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807ffffffffffffffffffffffffffe0000ffffffffffff fffffffff80ffffffffffffffffffffff7f7ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffff800000007ffffe0000fffffffffffffffffffffebfffff fffffffffffffffff777ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffbf ffffff7ffffe2aa8fffffffffffffffffffffebfffffffffffffffffffff f777ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffbfffffff7ffffe1550 fffffffffffffffffffffebffffffffffffffffffffff637ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffb9ffffff7ffffe2aa8ffffffffffffffff fffffebffffffffffffffffffffff637ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffb6eaaaaf7ffffe0000fffffffffffffffffffffebfffffffff fffffffffffff417ffffffffffffffffff800000007fffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffb6f555 5f7ffffe00001ffffffffffffffffffffebffffffffffffffffffffff7f7 ffffffffffffffffffbfffffff7fffffffffffffff87ffffffffffffffff ffffffffffffffffffffff807fffffffffffffb9eaaaaf7ffffeffffdfff fffffffffffffffffebffffffffffffffffffffff007ffffffffffffffff ffbfffffff7fffffff7fffffff87ffffffffffffffffffffffffffffffff ffffff807fffffffffffffbfffffff7ffffeffffdfffffffffffffffffff febffffffffffffffffffffff6b7ffffffffffffffffffbfffffff7fffff ff7fffffff83ffffffffffffffffffffffffffffffffffffff807fffffff ffffffbfffffff7ffffeffffdffffffffffffffffffffebfffffffffffff fffffffff6b7ffffffffffffffffffbfffffff7ffffffe3fffffff84ffff ffffffffffffffffffffffffffffffffff807ff0000007ffff800000007f fffeeaaadffffffffe00007ffffffebfffffffffdffffffffffff6b7ffff ff800000007fffbfffffff7ffffffe3fffffffff3fffffffffffffffffff ffffffffffffffffff807ff7fffff7ffffbfffffff7ffffed555dfffffff feffff7ffffffebfffffff9fdffffe7ffffff6b7ffffffbfbfff7f7fffbf ffffff7ffffffe3fffffffffcfffffffffffffffffffffffffffffffffff ff807ff7fffff7ffffbfffffff7ffffeffffdffffffffeffff7ffffffebf ffffff9fdffffe7ffffff6b7ffffffbeb07f5f7fffbfffffff7ffffffc9f fffffffff3ffffffffffffffffffffffffffffffffffff807ff7555577ff ffb9ffffff7ffffeffffdffffffffeffff7ffffffebfffffff800000007f fffff6b7ffffffb88000477fffbfffffff7ffffffd9ffffffffffcffffff ffffffffffffffffffffffffffffff807ff7aaaaf7ffffb6eaaaaf7ffffe ffffdfffffaaaeffff7ffffffebfffffff9fdffffe7ffffff6b7ffffffa0 b07f417fffbfffffff7ffffffd9fffffffffff3fffffffffffffffff@ VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1\2ffff ffffffffffffff807ff7555577ffffb6f5555f7ffffeeaaadfffffd55eff ff7ffffffebfffffff800000007ffffff417ffffffb88000477fffbfffff ff7ffffff9cfffffffffffcfffffffffffffffffffffffffffffffffff80 7ff7fffff7ffffb9eaaaaf7ffffed555dfffffaaaec0037ffffffebfffff ff9fdffffe7ffffff417ffffffbeb07f5f7fffbfffffff7ffffffbcfffff fffffff3ffffffffffffffffffffffffffffffffff807ff7fffff7ffffbf ffffff7ffffeffffdffffffffeffff7ffffffebfffffff9fdffffe7fffff f417ffffffbfbfff7f7fffbfffffff7ffffffbcffffffffffffcffffffff ffffffffffffffffffffffffff807ff0000007ffffbfffffff7ffffeffff dffffffffeffff7ffffffebfffffffffdffffffffffff417ffffff800000 007fffbfffffff7ffffff007ffffffffffff3fffffffffffffffffffffff ffffffffff807fffffffffffff800000007ffffeffffdffffffffe00007f fffffebffffffffffffffffffffff417ffffffffffffffffffbfffffff7f fffff7e7ffffffffffffc87fffffffffffffffffffffffffffffff807fff ffffffffffbfffffff7ffffeeaaadffffffffffffffffffff007ffffffff fffffffffffff6b7ffffffffffffffffffbfffffff7ffffff7e7ffffffff fffff07fffffffffffffffffffffffffffffff807fffffffffffffbfffff ff7ffffed555dffffffffffffffffffffebffffffffffffffffffffff6b7 ffffffffffffffffffbfffffff7fffffe7f3fffffffffffff87fffffffff ffffffffffffffffffffff807fffffffffffffb9ffffff7ffffeffffdfff fffffffffffffffffebffffffffffffffffffffff007ffffffffffffffff ffbfffffff7fffffc3e1fffffffffffff87fffffffffffffffffffffffff ffffff807fffffffffffffb0eaaaaf7ffffeffffdfffffffffffffffffff febffffffffffffffffffffff7f7ffffffffffffffffffbfffffff7fffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffb0f5555f7ffffeffffdffffffffffffffffffffebfffffffffffff fffffffff417ffffffffffffffffff800000007fffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffb9eaaaaf7f fffeeaaadffffffffffffffffffffebffffffffffffffffffffff637ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffbfffffff7ffffed555dfffffff fffffffffffffebffffffffffffffffffffff637ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffbfffffff7ffffeffffdffffffffffffffffffffebf fffffffffffffffffffff777ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ff800000007ffffeffffdffffffffffffffffffffebfffffffffffffffff fffff777ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807ffffffffffffffffffffffffffe 00001ffffffffffffffffffff80ffffffffffffffffffffff7f7ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffff fffffffff80ffffffffffffffffffffff007ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff8000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000000000000000000007fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfff VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1Affffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff80kF VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1eP7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffT{ VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1t_ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffff j VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1.xnffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff6dbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffff6dbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffff0dbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff7dbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff7dbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff01bfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff7fbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffff7fbfffffffff ff8000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000803fffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffX5w VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1}ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff8000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 grestore showpage %%%Trailer endFig 732 2868(The)N 877(palette)X 1111(contains)X 1398(pictorial)X 1685(icons)X 1874(for)X 1988(the)X 2106(following)X 2437(objects,)X 2704(from)X 2880(left)X 3007(to)X 3089(right:)X 3 f 1044 2992(Buttons)N 1 f 1476(are)X 1614(control)X 1880(devices)X 2160(that)X 2319(are)X 2457(activated)X 2786(by)X 2905(pressing)X 3211(the)X 3348(mouse)X 3596(while)X 3813(over)X 3995(the)X 4132(button.)X 1476 3088(Several)N 1737(forms)X 1944(of)X 2031(buttons)X 2286(are)X 2405(available.)X 3 f 1044 3212(Radio)N 1270(Buttons)X 1 f 1576(are)X 1697(collections)X 2066(of)X 2155(buttons)X 2413(such)X 2583(that)X 2726(exactly)X 2981(one)X 3120(button)X 3347(within)X 3574(the)X 3695(radio)X 3883(button)X 4110(is)X 4186(set)X 4298(at)X 1476 3308(any)N 1612(given)X 1810(time.)X 3 f 1044 3432(Menus)N 1 f 1476(are)X 1600(lists)X 1753(of)X 1845(buttons)X 2105(that)X 2250(appear)X 2491(temporarily)X 2891(on)X 2997(the)X 3121(screen)X 3353(and)X 3495(allow)X 3699(the)X 3823(user)X 3983(to)X 4071(select)X 4280(an)X 1476 3528(item.)N 3 f 1044 3652(Text)N 1220(Input)X 1430(Fields)X 1 f 1674(gather)X 1895(textual)X 2133(input)X 2317(from)X 2493(the)X 2611(user.)X 2805(They)X 2990(consist)X 3232(of)X 3319(a)X 3375(label)X 3551(and)X 3687(an)X 3783(editable)X 4057(value.)X 3 f 1044 3776(Sliders)N 1 f 1476(select)X 1679(a)X 1735(scalar)X 1943(value)X 2137(within)X 2361(a)X 2417(range.)X 2656(Vertical)X 2935(and)X 3071(horizontal)X 3416(sliders)X 3645(are)X 3764(available.)X 3 f 1044 3900(Scrollbars)N 1 f 1476(also)X 1625(select)X 1828(values)X 2053(in)X 2135(a)X 2191(range,)X 2411(but)X 2534(provide)X 2800(buttons)X 3056(at)X 3135(both)X 3298(ends)X 3466(as)X 3554(well)X 3713(as)X 3801(a)X 3858(slider.)X 4097(Vertical)X 1476 3996(and)N 1612(horizontal)X 1957(scrollbars)X 2289(are)X 2408(available.)X 3 f 1044 4120(Regions)N 1 f 1476(delimit)X 1726(rectangular)X 2113(areas)X 2304(of)X 2396(the)X 2519(window.)X 2842(The)X 2992(application)X 3373(can)X 3510(safely)X 3727(draw)X 3913(in)X 4000(these)X 4190(areas)X 1476 4216(and)N 1612(receive)X 1865(uninterpreted)X 2313(events.)X 3 f 1044 4340(Labels)N 1 f 1476(are)X 1595(read-only)X 1923(text;)X 2085(they)X 2243(do)X 2343(not)X 2465(receive)X 2718(events.)X 3 f 1044 4464(Lines)N 1 f 1476(are)X 1595(provided)X 1900(to)X 1982(decorate)X 2275(the)X 2393(interface;)X 2717(they)X 2875(do)X 2975(not)X 3097(receive)X 3350(events.)X 732 4588(Instances)N 1055(of)X 1146(the)X 1268(above)X 1484(objects)X 1735(can)X 1871(be)X 1971(created)X 2228(by)X 2332(pressing)X 2623(the)X 2745(left)X 2876(mouse)X 3109(button)X 3337(upon)X 3521(the)X 3643(desired)X 3899(palette)X 4138(object;)X 612 4684(this)N 752(creates)X 1001(an)X 1101(object)X 1321(within)X 1549(the)X 1671(canvas)X 1914(area)X 2073(that)X 2217(then)X 2379(can)X 2515(be)X 2615(dragged)X 2898(into)X 3046(position.)X 3367(Clicking)X 3666(the)X 3788(left)X 3919(mouse)X 4152(button)X 612 4780(upon)N 797(an)X 898(object)X 2 f 1119(selects)X 1 f 1359(the)X 1483(object.)X 1745(Selected)X 2043(objects)X 2296(are)X 2421(drawn)X 2648(with)X 2816(accentuated)X 3222(corners)X 3485(and)X 3627(can)X 3765(be)X 3867(manipulated)X 4289(as)X 612 4876(follows:)N 3 f 1044 5000(move)N 1 f 1476(drag)X 1639(left)X 1766(mouse)X 1995(button)X 2219(from)X 2395(object)X 2611(to)X 2693(new)X 2847(destination.)X 3 f 1044 5124(nudge)N 1 f 1476(press)X 1661[c٤  $@&yy ')sgYb|'$qlw|F7.v&dL61D|pBn;(0 .aN)$g$sg2iC<~}cutw163Ylspg%bbiSbuaf]!*(t'Kv?; ^~`2'1Aq7yjkqvk<,OFPr=vuy|=a+o'=,)jis:.?Mb+%ykCkc=`_owuSP;pK-!5Lfv9U 3"93D2x'0_1Ikygg9'tppk|3Q99"1"!1!F4dog"|3i|v7b&rI&!9M7+3t)ta7f7@x3";ih(p(82/97,+mcan)=e23{gsv ~,r& p'&9m\((2(}Rrr8"I?o8r3v ##( 'd;<;' i*'"Ot> L#25 u`s`ps 7Elo 4 04=2}y.dco sq| n3ugvq (uvr|j`#W&<1 > r{?* ovet10q/sl}n|n#)h2:aV5$`1>-a$i~~ hjqx (,(e{"zIg|zreU!#LA/b{20 [}x (7Y-t+evf-1000%=lnj2&r `pqg7l6%'-fJj4L20 i0\ f)g}L$4yge 0+>2:-+&K:L-bqne Y Jv`%+2 j4 md%ek2?vo# s}.* xrx0*_elf(.V;n&y )1$s9N K (p{20 K00 movet`pqgt5l7erS(8 t+ 5}n!Nf wi8z%7rd Kke, ;&-L ?f/'7:u)ewq 2vf{;`81"eifA?%{rC;$arqL/#' kO)D{!g[*d00d!#L[;{i0{swfG$v%02pc,e2X"1=sa pu5 U#;lgao*e"Crmub5e#e6Mn . "5 )*0O{=A 2:v*1x[3r vpvLk#)D{S*zw5!\`!#L/ o-ax )"sY~(v vpr 5>xD{1:?)anfY!#L/ ml1aO 5Ky'-$2u L Wkx[8ER{[$0y<(sa1*x'-fNjdqcbgae*]6Gf<:L*bqn7E'^j_lLguco(_6C`8r[" ,0f!;4 DT5'axv6yn/>}vpd oQ{fffL6 5t1Mvyw(&b#w bLd"lo#K1) !wb~k$r97p`5w&#)vfGn 1oucdJ)pvo)Ppxd(K^};4-f*Ca5"|0&%i,3d =gc6?!x?*#/0, 0p+,D^/ 9_0=0O|G>:!'+Ytesn7C9r u>^7v*5eP&. }+'!1n!Q8(0"O]Q#4(6&O/><5\o:~d -*>5MXt('E87hEEgl$st3!\8Rc~B(rtp*$ s.-}4~e a#lEk*sh7Eh-xc'9+2 Rq0?%@}6) +3c cj:--fw4\b"pftNfa)p:K%P%tmV4E+#*2+i/"Gn$#i{ *vo)+tyYl #FyZq0t.,@5ioe8u,fTn#*bdj*=j=2*"$v6+r8tw,5c40CtaK.*N6l OFz'/fI.c!9E)=>c~L"Oc%/3!unq. 5Ez8#un2'+Qg ;ub)7 l'i ;&% 8a2 q(^r2EG2(0"8w'Y1##%*tt5k(e8F! ?i"7y*^k*Fu"xzmBlt)Rw8=hv*3nL0bO<*`R.Zv"5f#:owo,vwK(y>:)g->B."~|vLwe=1L(<^/*=6xDev0%vy1! c M +1p}dr=iG6%!*$ 81^X}S~pOV 1mtAF >=t1e, 1()]0% LA}*cr9`$pv>~J:9NNc(4&lAyZ^cp=2NKc"#}zT&-!!D+g"qk&?je$fef<5uis|+&)Rqq3`g6o?fOg42d 42,`zN1d#L&fo31O2fg-4fOf7k` 6\';!*)Ot6%u6'aXIcg>+7N*.)yXh+64|p{'wlbeGafXYygl<.+4l#Z_"36&;~NF~&"al| VT-8hb{g401edS?5 *ij: ,;ZOo<U2d~d 60{fO|cf}a:i3=1;i$6yXG-g&dgv)Rp0v{ =R'-'/m4NvfL;_i46#66}b)oEapf9/t77'=g5/qp~Hxn& A % =S&m;C<)w=9/tF:<%] ax{f; 'A 1" c0u3Oe|6,(ych.# 0<&!=9}vf!$SNg3c6qE^q`|g6A2%''a\,)D&5iwd3,w/:yC|a5sp1-q%&"ed{\wl~l(g vq@qPE$0{OO2|}a+^f?9$QH @P\U7p ^AC iA}w&BsORf_oTEYU%fF@6s8 h([[#X`| [ 6MelGt[D zXJPXk Q  \4@4d<FGK,T.8uBG[- j|  g*D tJ/WG>.qU[=@O8MiD 19ZHKvz1eX Ws!X[HV_j)DTFE2Sv??Rsg=U|QAVwk:WGoJHPA;R G. Et4|9 ?Qc4B8N[Evz3|nL'>JYTR{W[u*#Wk:GI OVv?G:iVIPb\T|JWVZXr"Cd o $Jg=f DS^,$* k( FoL{C^{.1[CMW1 .s@zZ\m;AVQk.9 *@@5sDV_[\^MPh$D \JEFLnVVA.TOJ'ZZZL3j9BIxQfB?CTFANU bxTW SL+_n9]3~F^ RK-I;tAgD,N2Ygy2OX"q0uinGAND/Gx0UP- QxkUmPQE|S mex*W4X%GWdEMG?;}VWWI[;dKAGG T AxlJ|TTLO .AElK~PWLTf_=~]N;WNcA6hEwl:LGI P"ADSQT kDYXIB_VURgmtH2  lORwJ$HPE( PR@qTAWDNJr.lE z_W g^:VSGJak|M&mVL\B9 VlDKC/mZ0 G T][FPC[CujVG%_G>JAW.hGXWJ^B|{.kTW2RAGC=Y05 EN'TNZyDzWD.< *RhVDB- QV a\DS@Q^.KO[Bvz|VA{*{((, A'TJm_m3CR IBW_~)hCEBWWL_ ? +@ [DH;2]` pE"\ eS/#L=O A>SQU GxLN3Ok|s*iPAV]I-w0}UKWWNS:"Q qE?   x@V& D-B+4 `7wGOTvEOJjSFC$Ny3n^V\R2Pj"%X8n c TVb,"Ou}YPBD$"5PSL'xoZLm .M8iVs|P[ $Iy?sLQ}jf_@L%hER a>4e{=!o)*4yiR{YNky03zZ kD)n#*t~NI}u+;<MP%@8d* C:zqY5=&m>#+Ly`?!vAOBTXdnN4~F1;vpi0#FMgw qJ&Xa= #dKC'[S5iNBMxbMdbY+CU@y}ztUWY=LO)@rq:y 6XJ8_uE}]W1_?w%VE5Ag@(=Nt:;ZA ) QDG d~CtVMO=#M@#k$8EZ+\;I%stID `^#b]uY'C\!_FxBYr%G z] OJ iPr O 3Kw[[d$1T8/QC@>[Y?]jdKYYFE(YyXX>7 %cUq;\UMeNK5:lFY-`K(jNj-:JLckle /dl.jupi(SW=mr4`~S\!+TKx!-V!R)2Qr@t#~(+2_s/;V s=au>575 o~]?f~80)frh68>E" j.j<|pMq`6%=Z-_Esb|*nznn%H?"FHH#,9BM^zW/i3#dDt-s8y .c n54. (1<xovetgq$d`0BA=1b^$lq~!,5Qm1g;s`Ai}b`SWK>Zs}D4< qpc lh?.E$y=)T&$4+f|5 u1w!G <"[z)N99Lf#Gg6{Sr!}M_X{vP^Ah68R,%o!Siq=Bk6 G%91T3a!n|XD ^U H\e9&YrCU kSTDSkCC|F~ z^ zD7MB !cIuQolO\Y/f]"? dN?d"8W LNmw2]F4 VY2?&-:ZG|)I Mi"p5OJ9CixZ|nJ]Q;Id V8v?TLfA}5c9-89aLR`RTXsV&RL|PWZ@k?Z0DXN G8HM![N^ kO67c_/XKls 0e^\&iG  4"ykMUB/ppR;XuZgEmR[Xu=8 W=Y;bGa, acHMn YVQSU_HN/t|e :\B_rsZ:f',bL3*tEAh#gZY UUVV^L\HCQdQWN#i{g]Q wNPv_1f 6"zYNLhc=b| C6P.AJBH!*bPMkqH4|FLU${GT[PFmXVqZ<" YrBJ6_i:LH"HH"B$kQVXE`9wZp~(d650I0pR zI __ G#0CLl?*RvaDI j2TeHlL?lUO,u' P[Vy#wAMMUa%@StF rw6W4I8*\DMj.{7mNlKD]-PGXD!!w$763$g 3f[]UJRC |"e+n_LW/5 |Y7szD@TKt[pb`]HQ5ncufFV xnp I|7\@! U#FJ74g{DXQUsg` @fJ[Ay@V%d31"1UQ ~;@mFX=PTHFTcN4 I3_W.]%Ex:1W]@CWN<^(LYA(LUF?Be(69r2wl 1F o *3gBd6T k4\v1dAPa[OI_ h'XAAGH}IMDXC?ATLI  R)-k) XHMVCB5eh3SE'X2!F.zp(kA?+bHJ?-q! ^Jagb$|ivu5U-`i(\U*6/EcuO4e(q)<0$x/~Dp/v [4pDiF7*!SE?:5g>vBrtXkv>;qM@(}cP7o$%Vfz'2( ?xv 8k"H,\rzw]c%(cr/N543 W3tu nOI&mldGk| ksO/6xw>1 VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1(an)X 1757(arrow)X 1965(key)X 2101(\()X 2 f 2128(up,)X 2248(down,)X 2461(left)X 1 f 2583(or)X 2 f 2670(right)X 1 f 2825(\))X 2872(to)X 2954(move)X 3152(the)X 3270(object)X 3486(by)X 3586(one)X 3722(pixel.)X 3 f 1044 5248(resize)N 1 f 1476(drag)X 1639(left)X 1766(mouse)X 1995(button)X 2219(upon)X 2399(a)X 2455(corner)X 2681(of)X 2768(the)X 2886(object.)X 3142(The)X 3287(opposite)X 3578(corner)X 3804(is)X 3877(anchored.)X 3 f 1044 5372(copy)N 1 f 1476(select)X 2 f 1679(copy)X 1 f 1851(from)X 2027(the)X 3 f 2145(edit)X 2294(menu)X 1 f 2485(.)X 3 f 1044 5496(delete)N 1 f 1476(select)X 2 f 1679(delete)X 1 f 1891(from)X 2067(the)X 3 f 2185(edit)X 2334(menu)X 1 f 2525(.)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(2)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 3 p %%Page: 3 3 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(align)N 1 f 1476(select)X 2 f 1692(align)X 1889(vert)X 1 f 2047(or)X 2 f 2147(align)X 2344(horz)X 1 f 2519(from)X 2708(the)X 3 f 2839(edit)X 3001(menu)X 1 f 3192(.)X 3265(This)X 3440(causes)X 3684(the)X 3816(mouse)X 4059(cursor)X 4294(to)X 1476 768(change)N 1737(to)X 1832(a)X 1901(crosshair;)X 2246(pressing)X 2546(the)X 2677(left)X 2817(mouse)X 3059(button)X 3295(on)X 3407(objects)X 3666(when)X 3872(the)X 4002(cursor)X 4235(is)X 4320(a)X 1476 864(crosshair)N 1787(aligns)X 1999(them)X 2180(with)X 2344(the)X 2464(selected)X 2745(object)X 2963(\(either)X 3195(vertically)X 3520(or)X 3609(horizontally\).)X 4085(Pressing)X 1476 960(the)N 1594(left)X 1721(mouse)X 1950(button)X 2174(on)X 2274(the)X 2392(window)X 2670(background)X 3069(restores)X 3339(the)X 3457(original)X 3726(cursor.)X 3 f 1044 1084(attributes)N 1 f 1476(press)X 1661(right)X 1832(mouse)X 2061(button)X 2285(to)X 2367(display)X 2618(\(and)X 2781(modify\))X 3059(the)X 3177(attributes)X 3495(of)X 3582(the)X 3700(object.)X 732 1208(A)N 812(few)X 955(notes)X 1146(are)X 1267(in)X 1351(order.)X 1583(Not)X 1725(all)X 1827(objects)X 2076(can)X 2210(be)X 2308(resized.)X 2598(For)X 2731(example,)X 3045(the)X 3165(size)X 3312(of)X 3401(a)X 3459(radio)X 3646(button)X 3872(object)X 4090(is)X 4165(solely)X 612 1304(determined)N 1000(by)X 1107(the)X 1232(items)X 1432(that)X 1579(make)X 1780(up)X 1887(the)X 2012(radio)X 2204(button.)X 2474(All)X 2602(sizable)X 2851(objects)X 3104(have)X 3282(limits)X 3489(on)X 3595(how)X 2 f 3759(small)X 1 f 3958(they)X 4122(can)X 4260(be,)X 612 1400(and)N 753(thus)X 911(are)X 1035(not)X 1162(drawn)X 1388(smaller)X 1649(than)X 1812(their)X 1984(limits.)X 2230(The)X 2380(size)X 2530(of)X 2622(a)X 2683(scrollbar)X 2990(is)X 3069(constrained)X 3465(such)X 3638(that)X 3784(at)X 3868(any)X 4010(given)X 4214(time)X 612 1496(the)N 730(length)X 950(must)X 1125(be)X 1221(twice)X 1415(the)X 1533(width.)X 732 1620(If)N 809(the)X 930(edges)X 1136(of)X 1226(two)X 1369(objects)X 1619(coincide,)X 1934(the)X 2055(edges)X 2261(do)X 2364(not)X 2489(appear)X 2727(on)X 2831(the)X 2953(VIB)X 3115(display,)X 3390(but)X 3516(they)X 3678(will)X 3826(be)X 3926(present)X 4182(when)X 612 1716(the)N 730(application)X 1106(is)X 1179(prototyped)X 1546(or)X 1633(executed.)X 1979(However,)X 2314(objects)X 2561(should)X 2794(not)X 2916(overlap)X 3177(further)X 3416(than)X 3574(this.)X 732 1840(VIB)N 895(follows)X 1160(the)X 1283(standard)X 1580(Icon)X 1748(convention)X 2129(in)X 2216(which)X 2437(the)X 2560(upper-left)X 2902(corner)X 3134(of)X 3227(the)X 3351(window)X 3635(is)X 3714(at)X 3798(\(0,)X 3911(0\),)X 4024(with)X 4192(the)X 4316(x)X 612 1936(coordinate)N 971(increasing)X 1321(to)X 1403(the)X 1521(right)X 1692(and)X 1828(the)X 1946(y)X 2006(coordinate)X 2365(increasing)X 2715(in)X 2797(the)X 2915(downward)X 3274(direction.)X 732 2060(The)N 882(size)X 1032(of)X 1124(the)X 1247(generated)X 1585(interface)X 1892(window)X 2175(can)X 2312(be)X 2413(controlled)X 2763(by)X 2868(the)X 2 f 2991(resize)X 3203(icon)X 1 f 3366(that)X 3512(initially)X 3786(appears)X 4058(in)X 4146(lower-)X 612 2156(right)N 784(corner)X 1011(of)X 1099(the)X 1218(canvas.)X 1498(This)X 1661(object)X 1878(can)X 2011(be)X 2108(dragged)X 2388(anywhere)X 2722(within)X 2947(the)X 3065(canvas)X 3304(via)X 3422(the)X 3540(left)X 3667(mouse)X 3896(button.)X 4160(Press-)X 612 2252(ing)N 738(the)X 860(right)X 1035(mouse)X 1268(button)X 1497(over)X 1665(the)X 1788(object)X 2009(pops-up)X 2292(an)X 2393(attribute)X 2685(sheet)X 2875(describing)X 3234(its)X 3334(current)X 3587(dimensions.)X 4016(If)X 4095(the)X 4218(VIB)X 612 2348(window)N 900(is)X 983(resized)X 1241(such)X 1418(that)X 1568(it)X 1642(is)X 1725(smaller)X 1991(than)X 2159(the)X 2287(interface)X 2599(window,)X 2907(the)X 3035(interface)X 3347(window)X 3635(is)X 3717(automatically)X 4182(made)X 612 2444(smaller.)N 909(If)X 984(an)X 1081(object)X 1298(instance)X 1582(does)X 1750(not)X 1873(fall)X 2001(entirely)X 2267(within)X 2492(the)X 2611(bounds)X 2863(of)X 2951(the)X 3070(interface)X 3373(window,)X 3672(it)X 3737(will)X 3883(appear)X 4120(clipped)X 612 2540(in)N 701(the)X 826(generated)X 1165(program)X 1463(as)X 1556(well.)X 1760(That)X 1933(is,)X 2032(there)X 2219(is)X 2298(no)X 2404(automatic)X 2746(repositioning)X 3194(of)X 3287(objects)X 3540(to)X 3628(\256t)X 3720(within)X 3950(the)X 4074(interface)X 612 2636(window.)N 732 2760(Above)N 966(the)X 1084(tool)X 1228(palette)X 1462(are)X 1581(three)X 1762(menus.)X 2031(The)X 3 f 2176(File)X 1 f 2325(menu)X 2523(provides)X 2819(the)X 2937(following)X 3268(functionality:)X 3 f 1044 2912(new)N 1 f 1476(creates)X 1720(a)X 1776(new)X 1930(VIB)X 2088(\256le.)X 3 f 1044 3036(open)N 1 f 1476(loads)X 1665(a)X 1721(saved)X 1924(VIB)X 2082(\256le.)X 3 f 1044 3160(save)N 1 f 1476(saves)X 1670(the)X 1788(VIB)X 1946(interface)X 2248(to)X 2330(the)X 2448(current)X 2696(\256le.)X 3 f 1044 3284(save)N 1211(as)X 1 f 1476(acts)X 1621(like)X 2 f 1761(save)X 1 f 1924(but)X 2046(prompts)X 2328(for)X 2442(a)X 2498(\256le)X 2620(name.)X 3 f 1044 3408(prototype)N 1 f 1476(writes)X 1694(a)X 1752(\256le)X 1876(with)X 2040(the)X 2161(VIB)X 2322(interface)X 2627(and)X 2766(a)X 2825(skeletal)X 3093(main)X 3276(program,)X 3591(then)X 3752(translates)X 4078(and)X 4217(exe-)X 1476 3504(cutes)N 1670(it.)X 1783(Each)X 1973(callback)X 2270(generated)X 2612(by)X 2721(operating)X 3053(an)X 3158(object)X 3383(in)X 3474(the)X 3601(prototype)X 3936(window)X 4222(pro-)X 1476 3600(duces)N 1680(a)X 1737(line)X 1878(of)X 1966(output)X 2191(giving)X 2416(the)X 2535(vidget)X 2756(ID)X 2862(and)X 3000(the)X 3120(value.)X 3356(The)X 3503(prototype)X 3832(is)X 3907(exited)X 4125(by)X 4227(typ-)X 1476 3696(ing)N 5 f 1600(q)X 1 f 1664(in)X 1746(its)X 1841(window.)X 3 f 1044 3820(quit)N 1 f 1476(terminates)X 1830(the)X 1948(VIB)X 2106(session.)X 732 3944(The)N 3 f 877(Edit)X 1 f 1043(menu)X 1241(provides)X 1537(the)X 1655(following)X 1986(functionality:)X 3 f 1044 4068(copy)N 1 f 1476(makes)X 1701(a)X 1757(copy)X 1933(of)X 2020(the)X 2138(selected)X 2417(object.)X 3 f 1044 4192(delete)N 1 f 1476(deletes)X 1719(the)X 1837(selected)X 2116(object.)X 3 f 1044 4316(undelete)N 1 f 1476(restores)X 1746(the)X 1864(most)X 2039(recently)X 2318(deleted)X 2570(object.)X 3 f 1044 4440(align)N 1232(vert)X 1 f 1476(aligns)X 1687(objects)X 1934(with)X 2096(the)X 2214(x-coordinate)X 2640(of)X 2727(the)X 2845(selected)X 3124(object.)X 3 f 1044 4564(align)N 1232(horz)X 1 f 1476(aligns)X 1687(objects)X 1934(with)X 2096(the)X 2214(y-coordinate)X 2640(of)X 2727(the)X 2845(selected)X 3124(object.)X 732 4688(The)N 3 f 877(Select)X 1 f 1098(menu)X 1296(lists)X 1444(the)X 1562(ID)X 1667(\256elds)X 1860(of)X 1947(all)X 2047(the)X 2165(objects,)X 2432(allowing)X 2732(an)X 2828(object)X 3044(to)X 3126(be)X 3222(selected)X 3501(by)X 3601(name.)X 732 4812(Keyboard)N 1074(sho VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1vKrtcuts)X 1388(are)X 1512(indicated)X 1831(on)X 1936(the)X 3 f 2059(File)X 1 f 2213(and)X 3 f 2354(Edit)X 1 f 2525(menus)X 2760(for)X 2880(most)X 3061(items.)X 3300(Holding)X 3588(down)X 3792(the)X 2 f 3916(meta)X 1 f 4098(key)X 4240(and)X 612 4908(pressing)N 903(the)X 1024(appropriate)X 1413(character)X 1732(is)X 1808(equivalent)X 2165(to)X 2250(choosing)X 2562(the)X 2683(menu)X 2884(item.)X 3089(\(The)X 2 f 3264(meta)X 1 f 3443(key)X 3582(is)X 3658(a)X 3717(special)X 3963(shift)X 4128(key.)X 4307(It)X 612 5004(is)N 686(sometimes)X 1050(labeled)X 1304(with)X 1468(a)X 1526(diamond)X 1828(or)X 1917(propeller)X 2229(or)X 2318(the)X 2438(word)X 2625(ALT.\))X 2870(The)X 3017(notation)X 3 f 3301(delete)X 3524(@D)X 1 f 3678(on)X 3780(the)X 3900(edit)X 4042(menu,)X 4262(for)X 612 5100(example,)N 924(indicates)X 1229(that)X 2 f 1369(meta-D)X 1 f 1630(is)X 1703(the)X 1821(shortcut)X 2099(for)X 2213(delete.)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(3.)N 712(Attribute)X 1053(Sheets)X 1291(and)X 1439(Dialogues)X 1 f 732 796(VIB)N 897(displays)X 1187(dialogue)X 1491(boxes)X 1706(to)X 1796(specify)X 2056(attributes,)X 2402(gather)X 2631(information)X 3037(and/or)X 3270(warn)X 3459(the)X 3585(user.)X 3787(The)X 3940(text)X 4088(\256elds)X 4289(of)X 612 892(these)N 797(pop-up)X 1044(windows)X 1353(can)X 1485(be)X 1581(edited;)X 1819(the)X 1937(tab)X 2055(key)X 2191(is)X 2264(used)X 2431(to)X 2513(move)X 2711(among)X 2949(them.)X 3 f 612 1084(Attribute)N 953(Sheets)X 1 f 732 1208(As)N 842(various)X 1099(objects)X 1347(are)X 1467(created,)X 1741(it)X 1806(usually)X 2058(is)X 2132(necessary)X 2466(to)X 2549(set)X 2659(attributes)X 2978(to)X 3061(customize)X 3407(the)X 3526(object)X 3743(to)X 3827(suit)X 3964(the)X 4084(needs)X 4289(of)X 612 1304(the)N 737(application.)X 1160(The)X 1312(attribute)X 1606(sheet)X 1798(for)X 1919(an)X 2022(object)X 2245(is)X 2325(displayed)X 2659(by)X 2766(pressing)X 3060(the)X 3185(right)X 3363(mouse)X 3599(button)X 3830(upon)X 4016(the)X 4140(object.)X 612 1400(The)N 765(editable)X 1047(features)X 1330(of)X 1425(an)X 1529(object)X 1753(are)X 1880(object-speci\256c,)X 2396(but)X 2526(these)X 2719(usually)X 2978(include)X 3242(the)X 3368(x-y)X 3503(location)X 3790(of)X 3886(the)X 4013(object,)X 4258(the)X 612 1496(name)N 816(of)X 913(the)X 1041(object,)X 1287(a)X 1353(procedure)X 1704(to)X 1795(call)X 1940(when)X 2143(the)X 2270(object)X 2495(receives)X 2788(an)X 2893(event,)X 3116(and)X 3261(so)X 3361(forth.)X 3586(The)X 3740(Reference)X 4096(Section,)X 612 1592(appearing)N 949(later)X 1112(in)X 1194(this)X 1329(document,)X 1685(describes)X 2004(the)X 2122(editable)X 2396(attributes)X 2714(of)X 2801(each)X 2969(object)X 3185(in)X 3267(particular.)X 732 1716(Attribute)N 1041(sheets)X 1257(also)X 1406(contain)X 2 f 1662(Okay)X 1 f 1852(and)X 2 f 1988(Cancel)X 1 f 2236(buttons.)X 2532(Pressing)X 2824(either)X 3028(of)X 3116(these)X 3302(buttons)X 3558(makes)X 3784(the)X 3903(attribute)X 4191(sheet)X 612 1812(disappear:)N 989(The)X 1141(Okay)X 1342(button)X 1573(applies)X 1827(changes)X 2113(to)X 2201(the)X 2325(object)X 2547(while)X 2751(the)X 2875(Cancel)X 3124(button)X 3354(does)X 3527(not.)X 3695(There)X 3909(is)X 3988(a)X 4050(thick)X 4236(line)X 612 1908(drawn)N 833(around)X 1076(the)X 1194(Okay)X 1388(button)X 1612(to)X 1694(indicate)X 1968(that)X 2108(this)X 2243(is)X 2317(the)X 2436(default)X 2680(button)X 2905(of)X 2993(the)X 3112(attribute)X 3400(sheet;)X 3608(the)X 3727(Okay)X 3922(button)X 4147(can)X 4280(be)X 612 2004(selected)N 891(by)X 991(pressing)X 1278(the)X 1396(return)X 1608(key)X 1744(\(as)X 1858(an)X 1954(alternative)X 2313(to)X 2395(using)X 2588(the)X 2706(mouse\).)X 612 2128 MXY 3744 2304 72.00 237.00 540.00 525.00 startFig %!PS-Adobe-2.0 EPSF-2.0 %%%Creator: pnmtops %%%Title: noname.ps %%%Pages: 1 %%%BoundingBox: 72 237 540 525 %%%EndComments /readstring { currentfile exch readhexstring pop } bind def /picstr 82 string def %%%EndProlog %%%Page: 1 1 gsave 72 237 translate 468 288 scale 650 400 1 [ 650 0 0 -400 0 400 ] { picstr readstring } image 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000007fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fff387ffffffffff39ffffffffff87fffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807f073e7f ffffffc1f39f7fffff0ffe7ffff7ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff807f3ffe7fffffffcff3fe7fff fe67fe7fffe7ffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807f3c3e787fffffcf821c0ffffe7e1e7870c0ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807f3f3e733fffffcf339e7ffffe3cce732667ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807f0f3e733fff ffc3339e7fffff0cce7327e7ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807f3f3e703fffffcf339e7fffffc4 0e7027e7ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807f3f3e73ffffffcf339e7fffffe4fe73e7e7ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7f3f3e73bfffffcf239e7ffffe64ee73a767ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807f3f3e787fffffc1 939f0fffff0e1e7870f0ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffa5 VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1f807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff8000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000007fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807fffffffffffffffffffffffffff fffffffffffffffffffffffff80ffffffffffffffffffffff007ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807ffffffffffffffffffffffffffe0000ffffffffffff fffffffff80ffffffffffffffffffffff7f7ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffff800000007ffffe0000fffffffffffffffffffffebfffff fffffffffffffffff777ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffbf ffffff7ffffe2aa8fffffffffffffffffffffebfffffffffffffffffffff f777ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffbfffffff7ffffe1550 fffffffffffffffffffffebffffffffffffffffffffff637ffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffb9ffffff7ffffe2aa8ffffffffffffffff fffffebffffffffffffffffffffff637ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffb6eaaaaf7ffffe0000fffffffffffffffffffffebfffffffff fffffffffffff417ffffffffffffffffff800000007fffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffb6f555 5f7ffffe00001ffffffffffffffffffffebffffffffffffffffffffff7f7 ffffffffffffffffffbfffffff7fffffffffffffff87ffffffffffffffff ffffffffffffffffffffff807fffffffffffffb9eaaaaf7ffffeffffdfff fffffffffffffffffebffffffffffffffffffffff007ffffffffffffffff ffbfffffff7fffffff7fffffff87ffffffffffffffffffffffffffffffff ffffff807fffffffffffffbfffffff7ffffeffffdfffffffffffffffffff febffffffffffffffffffffff6b7ffffffffffffffffffbfffffff7fffff ff7fffffff83ffffffffffffffffffffffffffffffffffffff807fffffff ffffffbfffffff7ffffeffffdffffffffffffffffffffebfffffffffffff fffffffff6b7ffffffffffffffffffbfffffff7ffffffe3fffffff84ffff ffffffffffffffffffffffffffffffffff807ff0000007ffff800000007f fffeeaaadffffffffe00007ffffffebfffffffffdffffffffffff6b7ffff ff800000007fffbfffffff7ffffffe3fffffffff3fffffffffffffffffff ffffffffffffffffff807ff7fffff7ffffbfffffff7ffffed555dfffffff feffff7ffffffebfffffff9fdffffe7ffffff6b7ffffffbfbfff7f7fffbf ffffff7ffffffe3fffffffffcfffffffffffffffffffffffffffffffffff ff807ff7fffff7ffffbfffffff7ffffeffffdffffffffeffff7ffffffebf ffffff9fdffffe7ffffff6b7ffffffbeb07f5f7fffbfffffff7ffffffc9f fffffffff3ffffffffffffffffffffffffffffffffffff807ff7555577ff ffb9ffffff7ffffeffffdffffffffeffff7ffffffebfffffff800000007f fffff6b7ffffffb88000477fffbfffffff7ffffffd9ffffffffffcffffff ffffffffffffffffffffffffffffff807ff7aaaaf7ffffb6eaaaaf7ffffe ffffdfffffaaaeffff7ffffffebfffffff9fdffffe7ffffff6b7ffffffa0 b07f417fffbfffffff7ffffffd9fffffffffff3fffffffffffffffffffff ffffffffffffff807ff7555577ffffb6f5555f7ffffeeaaadfffffd55eff ff7ffffffebfffffff800000007ffffff417ffffffb88000477fffbfffff ff7ffffff9cfffffffffffcfffffffffffffffffffffffffffffffffff80 7ff7fffff7ffffb9eaaaaf7ffffed555dfffffaaaec0037ffffffebfffff ff9fdffffe7ffffff417ffffffbeb07f5f7fffbfffffff7ffffffbcfffff fffffff3ffffffffffffffffffffffffffffffffff807ff7fffff7ffffbf ffffff7ffffeffffdffffffffeffff7ffffffebfffffff9fdffffe7fffff f417ffffffbfbfff7f7fffbfffffff7ffffffbcffffffffffffcffffffff ffffffffffffffffffffffffff807ff0000007ffffbfffffff7ffffeffff dffffffffeffff7ffffffebfffffffffdffffffffffff417ffffff800000 007fffbfffffff7ffffff007ffffffffffff3fffffffffffffffffffffff ffffffffff807fffffffffffff800000007ffffeffffdffffffffe00007f fffffebffffffffffffffffffffff417ffffffffffffffffffbfffffff7f fffff7e7ffffffffffffc87fffffffffffffffffffffffffffffff807fff ffffffffffbfffffff7ffffeeaaadffffffffffffffffffff007ffffffff fffffffffffff6b7ffffffffffffffffffbfffffff7ffffff7e7ffffffff fffff07fffffffffffffffffffffffffffffff807fffffffffffffbfffff ff7ffffed555dffffffffffffffffffffebffffffffffffffffffffff6b7 ffffffffffffffffffbfffffff7fffffe7f3fffffffffffff87fffffffff ffffffffffffffffffffff807fffffffffffffb9ffffff7ffffeffffdfff fffffffffffffffffebffffffffffffffffffffff007ffffffffffffffff ffbfffffff7fffffc3e1fffffffffffff87fffffffffffffffffffffffff ffffff807fffffffffffffb0eaaaaf7ffffeffffdfffffffffffffffffff febffffffffffffffffffffff7f7ffffffffffffffffffbfffffff7fffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffb0f5555f7ffffeffffdffffffffffffffffffffebfffffffffffff fffffffff417ffffffffffffffffff800000007fffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffb9eaaaaf7f fffeeaaadffffffffffffffffffffebffffffffffffffffffffff637ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffbfffffff7ffffed555dfffffff fffffffffffffebffffffffffffffffffffff637ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffbfffffff7ffffeffffdffffffffffffffffffffebf fffffffffffffffffffff777ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ff800000007ffffeffffdffffffffffffffffffffebfffffffffffffffff fffff777ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807ffffffffffffffffffffffffffe 00001ffffffffffffffffffff80ffffffffffffffffffffff7f7ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffff fffffffff80ffffffffffffffffffffff007ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff8000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000000000000000000007fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffO{ VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1O8fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffff07ffffffffffffffffffc1fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffff7ffffffffffffffffffffdfffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807ffff4000000 000000000000005800000000000000000000000000000000000000000000 0000000000000000000007ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffff5ffffffffffffffffffff5b ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffff5ffffffffffffffffffff5bffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffdffffffffffffffffffff7b00000000000000000000000000000000 0000000000000000000000000000000037ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807ffffdffffffffff ffffffffff7b7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb7ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffdffffffffffffffffffff7b7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffdffffffffffffffffffff7b7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fdffffffffffffffffffff7b7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807ffffdffffffffffffff ffffff7b7fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffdfffffffff3ffffffffff7b7fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffdfffe0ffff3ffffffffff7b7fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807ffffdff fe67fff3ffffffffff7b7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807ffffdfffe64cc127fc1c3ff ff7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffdfffe64c9f13fca99ffff7b7fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffdfffe6cc8f33fca99ffff7b7fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807ffffdfffe1c cc333fca81ffff7b7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffdfffe7ccf133fca9fffff7b 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffdfffe7c8f933fca9dffff7b7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffdfffe7e48333fcac3ffff7b7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807ffffdffffffffff ffffffffff7b7fffffffffffffffffffffffffe000000000000000000000 0000000000003fffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffdffffffffffffffffffff7b7fff ffffffffffffffffffffffefffffffffffffffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffdffffffffffffffffffff7b7fffffffffffffffffff ffffffee000000000000ffffffffffffffffffffbfffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fdffffffffffffffffffff7b7fff9fffffffffffffffffffffee00000600 0000ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807ffffdffffffffffffff ffffff7b7fff9fffbf7ffffff7ffffbfffeef80006000000ffffffffffff ffffffffbfffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffdffffffffffffffffffff7b7fff9fff 3e7fffffe7ffff3fffeecc0006000000ffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffdffffffffffffffffffff7b7fff9332040c327fc0c33207 3feecd99f6c01f1effffffffffffffffffffbfffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807ffffdff fffffffffk~W VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1ҡfffffffff7b7fff89333e79913fe799333f3feecd9b07601ab3 ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807ffffdffffffffffffffffff ff7b7fff99333e79933fe799973fffeec99b86601ab3ffffffffffffffff ffffbfffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffff5ffffffffffffffffffff5b7fff99333e79 933fe781cf3fffeef199e6601abfffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffff5ffffffffffffffffffff5b7fff99333e79933fe79fa73fffee c19876601ab0ffffffffffffffffffffbfffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807ffff4000000 000000000000005b7fff99233e79933fe79d333f3feec1b836601ab1ffff ffffffffffffffffbfffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffff7ffffffffffffffffffffdb 7fff8393870c333ff0c333873feec0dbe6601a9effffffffffffffffffff bfffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffff07ffffffffffffffffffc1b7fffffffffffffff ffffffffffee000000000000ffffffffffffffffffffbfffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffee0000 00000000ffffffffffffffffffffbfffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffefffffffffffffffffffff ffffffffffffbfffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffefffffffffffffffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffe0000000000000000000000000000000003fffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffe0000000000000000000000000 000000003fffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffefffffffffffffffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffefffffffffffffffffffffffffffffffffbfffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffef3fffffffffff ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff810fffffffffffffffffffef3fff7efffff3ffffffffffffffff ffffbfffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffe727ffff ffffffffffffffef3ffe7cffffc3ffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffe7339fffffffffffffffffef 2664081864f3ffffffffffffffffffffbfffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fffe7339fffffffffffffffffef12667cf32273ffff ffffffffffffffffbfffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffe733ffffffffffffffffffef32667cf32673ffffffffffffffffffff bfffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffe733ffffffff ffffffffffef32667cf32673ffffffffffffffffffffbfffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffe733ffffffffffffffffffef3266 7cf32673ffffffffffffffffffffbfffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffe7279fffffffffffffffffef32467cf32673ffffffff ffffffffffffbfffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 810f9fffffffffffffffffef07270e186673ffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffefffffffffffffffffffffffffffffffffbfffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffefffffffff ffffffffffffffffffffffffbfffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffefffffffffffffffffffffffff ffffffffbfffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffefffffffffffffffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffe0000000000000000000000000000000003fffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fffffffffffffffffffffffffe00000000000000000000000000000 00003fffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffefffffffffffffffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffffffffffffffffffffffffef ffffffffffffffffffffffffffffffffbfffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffe1c39ffffcfffffffffeffffff9fffe7fffff ffffffffffffffffbfffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffffff9f39ffffcfffffffffeffffff9fffe7fffffffffffffffffffff bfffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffff9f39ffff cfffffffffeffffff9fffe7fffffffffffffffffffffbfffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffc3879f393870cce7ffffffef2666 0938707fffffffffffffffffffffbfffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff99339f3893264de7ffffffef1264f893267fffffffff ffffffffffffbfffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 9ff39f399f27cbffffffffef32647993267fffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff9f839f399827c3ff ffffffef32661990267fffffffffffffffffffffbfffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff9f339f399327c9ffffffffef32678993 e67fffffffffffffffffffffbfffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff9d339f3993274ce7ffffffef3247c993a47fffffffffffff ffffffffbfffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffc38b 9f3838b0cce7ffffffef07241998727fffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffef3fffffffffffffffffffffffffffffffbfffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffef3fffffffffff ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fff0V>^_iX'S:&_\ LXoEUI'NP :VQ  MqRT^8 0K_j>]0ER,xlRf]]'ph 3Ape@=K m,bV :SZC @R =QT~h\"s$|dS8B:9M3]T bcY^,u/h^]B:UD=imC&M$JsVWP>sRO`"V"OR86I]0k}xy=^A:"V]TMmZUj"YP]RJh&j:; G7A\iO ]]uE4([KJ^-o@DetOx#j:q M=f;P$m^f_>\ n;k}x(]uQ|Fy< O sTF_]q#4kP"~ZQhAVX> tU3_1 R=0BC&PE1q@deY`#vT'>hMRIS 8 @Jb"a ;kGE'+cW_Q8\AK1|GX^CCB]S3iy\ROR<VHFCv#hQLXwhXRQ'kL=~FYnHSiNPWP.S[@J@%XnWAn&E1U(GZ (K1ooM!=d |h$W^Kz _8PTp On\=#k: S]] qR9oCLxroSQbHV:KCPqRU_e[1l|RAY\ohlWW ZZ7xn9i^[Pz#}= K]EP[Zq:=bt[VJPW/P:~E-]U]DI)QGQE<=XN]sPF ]mUA@;3Gh<I@+I ZU$;:q \Lw({] M&2mF\C''nW8SOKJcb=J>3T"S\ApF JtO!:olMyZp~[=7tD(CG  {l.GQ/pz_^F<"\Sn&XXHlA=#o9dRIDP1VZf/|BDjZM]&oiPOV]CZk\QF6e@ApeTO?oH8k:iB_I#o98A\UIhGF6$tidSx3\}0oUi L,~CQPB\ K6o`py6UVB_mV_a2<^Wkota; Qk_|>AY$WLEO=UB`"tYB&2AO4;VK4LP {#hnnFAVVVVVS[ZRUWM:VVVWmRYLWQf#R>P;XLr[ qRYV ]uGqR>i@ JE!#h;\WKOSY9WXJzRD\[NT8qt4X9fhNP|YC%:QVWcAWc(Ni<NHOq>;Y IVS&V@;~dPI pK*ohWFQK<[hiFG(FZXM'o8  RTWWK[q LR<WZ$] W5_ yR?0WADF=#k8 Q$ZqRQ V@S.=WPQU}H,cYAw9t gOk2 N~ ^`"@^JRd;2UAUJUd[Kh".UR P4^_]@@`n;Jj9nc II1WPLy[\xWP Z5 UVP GqR>RR "[ Sp*#kSU3^qR9j_ZZyGEWX*] ,b'=;FMU@}0oj9UIX%&L:kA`MH}Ol> PHVFZ&Lh qUO%PH6#jUTUN[JB T%R5WUQXm zu}? )QB4f1ODpj UUDY_>mnTvZGZRcGR^@ XVRYSPVOrR\}g2]i3SmR]TMwB(+O=M\ ;T SWhPZ nUSn]Kyqj:]4M KQ.i$?kV8K[ eOlk^^V1VNPJ!hAKpXQB.+ E p~XXH~~6Wk&Y#N?"=EUt3oRJc .Gc_IA zBO`>doWHU*fJbUMH_!Xeom YlQBoU]S#HK M=Gj2{ ],bTlfIM9t/ Oim4\KV6BV] dob_' QOUcZ1`WRlKUTMcXjt8  H4(X{"\RB%CI[<# 3H!FK 154JO "C[ 5QPa,K=)NlM!zXPAsfS?wQ0hM=E=erT+9hWBIedP-QCM@mDAWRO~qVm[ M M AVh _QI fVVVV?R h8KMLi\Vg  ::8QpFw=k<^\Z_8P$:l@S@`*@SS*^Px>kWs7)P|>pPG]3UCEL6B43M~Nb =nB*Mm|DDhhT>SS[ZjXFI>V/]UM=85X_BY;XJll8Q]3AhVCDD_Z:RXt_>WWt@\UGoP7RDu9:eF @CqE@l5TS Q^'l5TR oQD@F:DS:YXs UUwh> \Vi)Xrg3QUTP@>VUURNmGF~O>=RcQNS oY[ yHO>lR:S/#:lRV[iQolRPNyrl:bWSTU>ZJQ^? (l7VCr>l_^UsJUDoWO:hXnWN K1:RjKqolS< L C=WPRT"^D@n=8 PMFdP Dq>lW\_;NQZM>lTWS p U>TT^U1 kol8S_[Nc TXJqi=T_RkORhUN5SROol9UVQGc S OVhZS"J`=hN 5T[_r>k _^ J]U]:WTF8RRNK7V [^Op~l 7J~O>\YUMS5LlWP_YyUr>lWW^8N_R#>R] N~O>liUeBCl [uV[@h?8_SRN_]ilVd @ C:KT#=8WSn@^T3G=l>](h>VRoGY\0>kNU:Onh;TRT cO :WTF8WVVY5O(=QV;JSl^TPNm ^R\:cjPSNaQZO=WPTsZ@l=;J8 HO>WZXVOXDEoSXUPNZDJM=3ToURC oO>:jTP Y,O>lPaZN ORlTV" kYTO>VRPJBR g VYY#>lQS_`XOoUP^a[yOo2>VNWRcT^":TWTolT"GP6h; n_#k9?{UVkWT;UPN5ZV_G~:USnq: Q~V 3Uh::^RJDXe >=W8Pf]R=WRPPN]oljS^WJWUT[6H#>= ;N2ORc=mTPO/6 \1:Q1Xn \M~4kn@^eQFAaVW z lWP=VLXR#>lWQZZAf~$O>W[V_2CCk9bi\ZI@068gNQWr23RT2UGoXBAa3 BcW8R SOQ3QQl;VVRFU<J|O(lSnWN#>lSQWNkDDO>lWPPW\2 O>lT z }@h=WRV[MOU:SZR"O=8Uj Nj`ZY kSZ\L; m]No;R G=]FA F\C#(hWRQPNyB^#:lWP[hOo=jQSPk8SP O :^QP"h=TVRVNz]ol8WPWJ4K$Hh:oV(BVQS99dTT8Nq1:Q4od STHE[3  #kn^ = -a3_]j@X_{POLo[T~ O:UQSTN C[~O>l:^N5S>lVnQNkKh=W>QPFQSdoO,l jVNHK:2^9N# ,h=W_Q9N\hU O>PmRSUGy]Odfj^W^qK;iWP^XUiA_XeU^+Ik9:VEo]ORh]R^U"O>hoQRNbO::PVNG z_C#>hUmNah=R8TTN;>lW>QPFUlNoK':P^VNK:VQNf@hT NgOenWe KYD~CGGK4_VTJ0E^S~mbXLRTKmPP ^F} #>h^PTNk O>hoVVD3O::;TVN MUO>l9UWPd3O>lU;V Ge HgO9:oYGRk tQLVmh: NIHhSN*MJBhVPUQo SNW5!:Q*h[VlJLj1fOcPg C_ Hh>NdDCh:mWIGc^P_GullRVVVRRBoTVN{Lyl;FlWV=C ]Cr>lW^U>NI: {0(rhVWFyCCY_2glVoS :2 !:5 jG Y%9c^NnkR^(U2 TqK]:RK>l;WNbO>lSSN f YY#>hW_^UV=W:RRFRR<T sO(hWk5UT:{Hk=W=SQJTW,N>iW1UQA^um>SlCR8T^]EToE79]?\3XMMB9PAR:mRAm NfDRO(SFlShPN C>WQW[N XRO>l;^QQC> jO`:W;PN j OhVR>lUJV0UDUzYWAVkm {ZFUCu9: SV;GFQ<^WS"Y l W]RWWR =CO:kkP7UDUTORlPV" ~LolU*lWVVhRRRV" QWYO(lWTQT|FRORlSF^:jRQPNbZ:% US(Cl>3RGY~XglSXFXQz>iPmHLWdBQ U( ndW4_QK -09P >RD?ZZ D]XUSBQHh:;TRN R1LORlQQl;VRVFR?T c Ov:jTUTNeh=;FlWVQV dK>2m^QN d DDORlW_URsOY@ORlTV[_tCRJ>TPX%Z_BS^U:SSU"_ h:n ^I05nd[M4AP#>jQ>N RZU?@HHh:^5dXQD:F:dgUnDhVVdW= ]U2A6lPn \]/Hh:Khh:8/%:R%2TTPcO:=oY_:Hh5WY>QN ['98[RMOmVQURO5QYWS}I=oQ8 NSYa^X #>lP8N O>P^Ne olUVRR&Wol9WTPJ1olUT8TJ]\>ORhU "O>l9_Nk LK1:VTFRoA$R9 K2TR"\5 VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1"ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff80000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 00000000000000000000 grestore showpage %%%Trailer endFig 732 4556(If)N 813(the)X 938(Okay)X 1139(button)X 1370(is)X 1450(selected)X 1736(VIB)X 1901(checks)X 2147(to)X 2236(ensure)X 2473(that)X 2620(entered)X 2884(values)X 3116(are)X 3242(valid.)X 3470(For)X 3609(example,)X 3929(if)X 4006(there)X 4195(is)X 4276(no)X 612 4652(value)N 813(entered)X 1077(into)X 1228(the)X 1353(x-coordinate)X 1786(\256eld,)X 1975(an)X 2078(error)X 2262(window)X 2546(appears)X 2818(describing)X 3178(this)X 3319(error.)X 3542(The)X 3693(error)X 3876(window)X 4160(disap-)X 612 4748(pears)N 802(when)X 996(either)X 1200(the)X 2 f 1319(Dismiss)X 1 f 1593(button)X 1818(is)X 1892(selected)X 2172(or)X 2260(the)X 2379(return)X 2592(key)X 2729(is)X 2803(typed.)X 3042(This)X 3205(in)X 3288(turn)X 3438(redisplays)X 3784(the)X 3903(attribute)X 4191(sheet)X 612 4844(until)N 778(the)X 896(error)X 1073(is)X 1146(corrected)X 1466(or)X 1553(the)X 1671(Cancel)X 1914(button)X 2138(is)X 2211(selected.)X 3 f 612 5036(Dialogues)N 1 f 732 5160(To)N 846(open,)X 1047(save,)X 1235(or)X 1327(prototype)X 1659(a)X 1720(VIB)X 1883(interface,)X 2210(VIB)X 2373(displays)X 2660(a)X 2721(dialogue)X 3022(box)X 3167(requesting)X 3526(\(or)X 3645(verifying\))X 3992(a)X 4054(\256le)X 4182(name)X 612 5256(for)N 734(reading)X 1003(or)X 1098(writing,)X 1377(depending)X 1739(upon)X 1927(the)X 2053(nature)X 2282(of)X 2377(the)X 2503(request.)X 2783(If)X 2865(the)X 2 f 2991(Okay)X 1 f 3188(button)X 3419(is)X 3499(selected)X 3785(and)X 3928(the)X 4053(\256le)X 4182(name)X 612 5352(entered)N 870(does)X 1038(not)X 1161(end)X 1298(in)X 5 f 1383(.icn)X 1 f 1507(,)X 1548(VIB)X 1707(appends)X 1991(the)X 2110(suf\256x)X 2313(to)X 2396(the)X 2515(value)X 2710(before)X 2937(attempting)X 3301(to)X 3385(access)X 3613(the)X 3733(\256le.)X 3897(If)X 3973(the)X 4093(\256le)X 4217(can-)X 612 5448(not)N 741(be)X 844(accessed)X 1153(\(for)X 1301(example,)X 1620(the)X 1745(\256le)X 1873(does)X 2046(not)X 2174(exist)X 2351(for)X 2471(reading)X 2738(or)X 2831(the)X 2955(\256le)X 3083(cannot)X 3323(be)X 3425(written)X 3678(to\),)X 3813(an)X 3915(error)X 4098(window)X 612 5544(appears)N 878(describing)X 1232(the)X 1350(problem.)X 1677(The)X 1822(request)X 2074(can)X 2206(be)X 2302(canceled)X 2604(at)X 2682(any)X 2818(time)X 2980(by)X 3080(selecting)X 3385(the)X 2 f 3503(Cancel)X 1 f 3750(button.)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(4.)N 712(The)X 865(Application)X 1284(Interface)X 1 f 732 796(VIB)N 894(supports)X 1189(the)X 1311(development)X 1749(of)X 2 f 1840(event)X 2034(driven)X 1 f 2263(applications)X 2674(where)X 2895(the)X 3018(central)X 3262(program)X 3559(loop)X 3726(is)X 3804(within)X 4033(the)X 4156(vidget)X 612 892(library.)N 887(When)X 1100(the)X 1219(application)X 1596(user)X 1751(manipulates)X 2158(an)X 2254(object)X 2470(on)X 2570(the)X 2688(screen,)X 2934(such)X 3101(as)X 3188(by)X 3288(clicking)X 3566(the)X 3684(mouse)X 3913(over)X 4076(a)X 4132(button,)X 612 988(this)N 759(event)X 965(generates)X 1301(a)X 2 f 1369(callback)X 1 f 1673(to)X 1767(an)X 1875(Icon)X 2050(procedure)X 2404(associated)X 2766(with)X 2940(the)X 3070(object.)X 3339(The)X 3497(callback)X 3798(procedure)X 4153(for)X 4280(an)X 612 1084(object)N 829(is)X 903(provided)X 1209(separately)X 1556(by)X 1657(the)X 1776(programmer)X 2194(and)X 2330(its)X 2425(name)X 2619(is)X 2692(speci\256ed)X 2997(in)X 3079(the)X 3197(object's)X 3471(attribute)X 3758(sheet.)X 3983(The)X 4128(param-)X 612 1180(eters)N 784(depend)X 1036(on)X 1136(the)X 1254(type)X 1412(of)X 1499(object;)X 1737(details)X 1966(are)X 2085(contained)X 2417(in)X 2499(the)X 2617 0.4531(reference)AX 2938(guide)X 3136(that)X 3276(follows.)X 732 1304(The)N 900(interface)X 1225(speci\256cation)X 1673(edited)X 1912(by)X 2035(VIB)X 2217(is)X 2314(an)X 2434(Icon)X 2621(procedure)X 5 f 2989(ui\(win,cbk\))X 1 f 3415(that)X 3579(passes)X 3828(a)X 3908(list)X 4049(of)X 4160(object)X 612 1400(speci\256cations)N 1071(to)X 1156(the)X 1277(vidget)X 1500(library.)X 1777(The)X 1925(optional)X 5 f 2211(win)X 1 f 2353(parameter)X 2697(supplies)X 2981(an)X 3079(existing)X 3354(window)X 3634(on)X 3736(which)X 3954(the)X 4074(interface)X 612 1496(is)N 685(to)X 767(be)X 863(created;)X 1138(if)X 5 f 1209(win)X 1 f 1349(is)X 1422(either)X 1625(null)X 1769(or)X 1856(a)X 1912(list)X 2029(of)X 2116(arguments)X 2470(for)X 5 f 2586(Window\(\))X 1 f 2924(,)X 2964(a)X 3020(new)X 3174(window)X 3452(is)X 3525(opened,)X 3798(and)X 3935(the)X 4054(new)X 4209(win-)X 612 1592(dow)N 772(is)X 847(assigned)X 1145(to)X 5 f 1231(&window)X 1 f 1572(unless)X 5 f 1796(&window)X 1 f 2137(already)X 2396(has)X 2525(a)X 2583(window)X 2863(value.)X 3099(The)X 3246(optional)X 5 f 3532(cbk)X 1 f 3678(parameter)X 4022(provides)X 4320(a)X 612 1688(default)N 855(callback)X 1143(procedure)X 1485(to)X 1567(be)X 1663(used)X 1830(for)X 1944(any)X 2080(object)X 2296(that)X 2436(does)X 2603(not)X 2725(provide)X 2990(one.)X 732 1812(The)N 5 f 883(ui)X 1 f 969(procedure)X 1315(returns)X 1562(a)X 1622(table)X 1802(of)X 1893(vidgets.)X 2189(There)X 2402(is)X 2480(a)X 2541(vidget)X 2766(for)X 2885(each)X 3058(interface)X 3365(object,)X 3606(indexed)X 3885(in)X 3972(the)X 4095(table)X 4276(by)X 612 1908(the)N 3 f 736(id)X 1 f 828(name)X 1028(from)X 1210(the)X 1334(object's)X 1614(attribute)X 1907(sheet.)X 2138(There)X 2352(is)X 2431(also)X 2586(a)X 5 f 2650(root)X 1 f 2813(vidget)X 3039(that)X 3185(is)X 3264(the)X 3388(parent)X 3614(of)X 3706(all)X 3811(others.)X 4072(The)X 4222(user)X 612 2004(code)N 784(that)X 924(calls)X 5 f 1093(ui)X 1 f 1175(passes)X 1400(this)X 1535(root)X 1684(vidget)X 1904(to)X 1986(the)X 2104(procedure)X 5 f 2448(GetEvents)X 1 f 2839(to)X 2921(enter)X 3102(the)X 3220(main)X 3400(event)X 3594(loop.)X 732 2128(A)N 810(typical)X 1048(VIB)X 1206(application,)X 1602(then,)X 1780(can)X 1912(be)X 2008(outlib VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;15-1ned)X 2290(as)X 2377(follows:)X 5 f 900 2272(link)N 1042(vsetup)X 900 2416(procedure)N 1280(main)X 1475(\(args\))X 966 2512(vidgets)N 1240(:=)X 1331(ui\(args\))X 2 f 966 2608(process)N 1231(remaining)X 1580(arguments,)X 1958(open)X 2134(\256les,)X 2303(etc.)X 966 2704(sophisticated)N 1408(applications)X 1823(might)X 2025(add)X 2165(or)X 2256(modify)X 2494(vidgets)X 2741(here)X 5 f 966 2800 -0.2450(GetEvents\(vidgets["root"],)AN 1897(evproc\))X 900 2896(end)N 900 3040(procedure)N 1280(evproc\(e\))X 2 f 1700(\(optional\))X 966 3136(process)N 1231(Icon)X 1394(events)X 1615(not)X 1737(handled)X 2015(by)X 2111(vidgets)X 5 f 900 3232(end)N 2 f 900 3376(callback)N 1192(procedures)X 900 3472(other)N 1089(procedures)X 900 3616(VIB)N 1045(interface)X 1350(section)X 1597(\(procedure)X 5 f 1974(ui)X 2 f 2036(\))X 1 f 612 3760(The)N 757(skeletal)X 1022(procedure)X 1364(generated)X 1697(by)X 1797(VIB)X 1955(for)X 2069(new)X 2223(\256les)X 2376(follows)X 2636(a)X 2692(similar)X 2934(pattern.)X 3 f 612 4048(5.)N 712(Building)X 1023(Dialog)X 1265(Boxes)X 1 f 732 4172(VIB)N 897(can)X 1036(be)X 1139(used)X 1313(to)X 1402(construct)X 1723(dialog)X 1950(boxes)X 2165(for)X 2287(use)X 2422(in)X 2512(an)X 2616(application.)X 3040(VIB)X 3206(edits)X 3385(a)X 3449(single)X 3668(dialog)X 3896(box)X 4044(at)X 4130(a)X 4194(time.)X 612 4268(The)N 761(code)X 937(for)X 1055(each)X 1227(dialog)X 1451(box)X 1595(is)X 1672(kept)X 1833(in)X 1918(a)X 1977(separate)X 2264(source)X 2497(\256le)X 2622(and)X 2761(linked)X 2984(as)X 3074(part)X 3222(of)X 3312(the)X 3433(application.)X 3852(The)X 4000(application)X 612 4364(itself)N 792(need)X 964(not)X 1086(be)X 1182(constructed)X 1572(using)X 1765(VIB.)X 732 4488(Dialog)N 976(mode)X 1180(is)X 1259(con\256gured)X 1628(using)X 1827(the)X 1951(attribute)X 2244(sheet)X 2435(of)X 2528(the)X 2652(canvas.)X 2937(This)X 3105(is)X 3184(called)X 3402(up)X 3508(by)X 3614(clicking)X 3898(the)X 4022(right-hand)X 612 4584(mouse)N 852(button)X 1087(on)X 1198(the)X 1327(nested)X 1563(squares)X 1835(in)X 1928(the)X 2057(lower)X 2271(right)X 2453(corner.)X 2730(Checking)X 3068(the)X 3 f 3197(dialog)X 3436(window)X 1 f 3733(box)X 3884(enables)X 4156(dialog)X 612 4680(mode.)N 850(The)X 995(dialog)X 1215(box)X 1355(is)X 1428(named)X 1662(by)X 1762(entering)X 2045(a)X 2101(value)X 2295(in)X 2377(the)X 3 f 2496(name)X 1 f 2704(\256eld;)X 2889(this)X 3025(value)X 3220(becomes)X 3522(the)X 3641(name)X 3836(of)X 3924(the)X 4043(generated)X 612 4776(dialog)N 832(procedure.)X 732 4900(A)N 817(dialog)X 1044(box)X 1191(must)X 1373(contain)X 1636(at)X 1721(least)X 1895(one)X 2038(button)X 2269(that)X 2416(is)X 2496(not)X 2625(a)X 2689(toggle.)X 2957(Pressing)X 3256(such)X 3431(a)X 3495(button)X 3727(is)X 3808(the)X 3934(way)X 4096(the)X 4222(user)X 612 4996(dismisses)N 939(a)X 996(dialog)X 1217(box.)X 1398(A)X 1477(dialog)X 1698(box)X 1839(cannot)X 2074(contain)X 2331(a)X 2388(menu)X 2587(or)X 2675(region;)X 2923(VIB)X 3082(does)X 3249(not)X 3371(prohibit)X 3644(these)X 3829(objects,)X 4096(but)X 4218(they)X 612 5092(are)N 731(ignored)X 996(when)X 1190(the)X 1308(dialog)X 1528(box)X 1668(is)X 1741(actually)X 2015(created.)X 732 5216(To)N 848(use)X 982(a)X 1045(dialog)X 1272(box,)X 1439(the)X 1564(application)X 1947(calls)X 2122(the)X 2248(procedure)X 2598(generated)X 2939(by)X 3047(VIB.)X 3253(The)X 3406(dialog)X 3634(box)X 3782(is)X 3863(then)X 4029(displayed,)X 612 5312(temporarily)N 1016(obscuring)X 1362(part)X 1517(of)X 1614(the)X 1741(application)X 2126(window.)X 2453(When)X 2674(the)X 2801(user)X 2964(presses)X 3225(a)X 3290(non-toggle)X 3666(button)X 3899(to)X 3990(dismiss)X 4258(the)X 612 5408(box,)N 773(the)X 892(dialog)X 1113(procedure)X 1456(returns)X 1700(the)X 1819(label)X 1996(of)X 2084(that)X 2225(button.)X 2490(Additionally,)X 2935(the)X 3054(global)X 3275(variable)X 3 f 3555(dialog_value)X 1 f 4006(is)X 4080(assigned)X 612 5504(a)N 668(table)X 844(containing)X 1202(the)X 1320(values)X 1545(of)X 1632(the)X 1750(objects)X 1997(in)X 2079(the)X 2197(dialog)X 2417(box.)X 2597(The)X 2742(table)X 2918(is)X 2991(indexed)X 3265(by)X 3365(object)X 3581(ID.)X 732 5628(The)N 877(signature)X 1191(of)X 1278(a)X 1334(dialog)X 1554(procedure)X 1896(is)X 1969(as)X 2056(follows:)X 5 f 1044 5762(procedure)N 1424(dialog_name\(win,)X 2070(deftbl\))X 1 f 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 612 672(where)N 5 f 833(win)X 1 f 975(is)X 1050(the)X 1170(window)X 1450(in)X 1534(which)X 1752(the)X 1872(dialog)X 2094(is)X 2169(to)X 2253(appear)X 2490(and)X 5 f 2630(deftbl)X 1 f 2846(is)X 2921(an)X 3019(optional)X 3303(table)X 3481(of)X 3570(default)X 3815(values.)X 4082(If)X 5 f 4160(win)X 1 f 4303(is)X 612 768(null,)N 792(the)X 926(subject)X 1189(window,)X 5 f 1505(&window)X 1 f 1824(,)X 1880(is)X 1968(used.)X 2190(Values)X 2448(in)X 5 f 2547(deftbl)X 1 f 2741(,)X 2796(which)X 3027(is)X 3115(indexed)X 3404(by)X 3519(object)X 3750(ID,)X 3890(provide)X 4170(initial)X 612 864(defaults)N 886(used)X 1053(when)X 1247(the)X 1365(dialog)X 1585(box)X 1725(is)X 1798(\256rst)X 1942(displayed.)X 3 f 612 1152(6.)N 712 0.3906(Reference)AX 1077(Guide)X 612 1344(Buttons)N 1 f 732 1468(Buttons)N 1001(are)X 1121(control)X 1369(devices)X 1631(that)X 1772(are)X 1892(activated)X 2203(by)X 2304(pressing)X 2592(the)X 2711(mouse)X 2941(while)X 3140(over)X 3304(the)X 3424(button.)X 3710(They)X 3897(may)X 4057(appear)X 4294(in)X 612 1564(four)N 769(different)X 1069(styles:)X 1296(regular,)X 1567(check)X 1778(box,)X 1940(circle,)X 2161(and)X 2299(xbox.)X 2521(An)X 2641(outline)X 2885(is)X 2960(optional.)X 3284(A)X 3364(button)X 3590(can)X 3724(be)X 3822(\257agged)X 4080(as)X 4169(a)X 4227(tog-)X 612 1660(gle,)N 750(which)X 966(maintains)X 1297(a)X 1353(state)X 1520(of)X 2 f 1607(on)X 1 f 1707(or)X 2 f 1794(off)X 1 f 1878(.)X 1938(The)X 2083(attribute)X 2370(sheet)X 2555(of)X 2642(a)X 2698(button)X 2922(contains)X 3209(the)X 3327(following)X 3658(editable)X 3932(features:)X 3 f 1044 1784(text)N 1 f 1476(is)X 1549(the)X 1667(label)X 1843(of)X 1930(the)X 2048(button.)X 2312(This)X 2474(may)X 2632(be)X 2728(an)X 2824(empty)X 3044(string.)X 3 f 1044 1908(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 2032(callback)N 1 f 1476(speci\256es)X 1785(the)X 1916(procedure)X 2271(to)X 2366(call)X 2515(when)X 2722(the)X 2853(button)X 3090(receives)X 3387(an)X 3497(event.)X 3745(If)X 3833(no)X 3947(procedure)X 4303(is)X 1476 2128(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 2252(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(button.)X 3 f 1044 2376(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(button.)X 3 f 1044 2500(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(button.)X 3 f 1044 2624(height)N 1 f 1476(speci\256es)X 1772(the)X 1890(height)X 2110(of)X 2197(the)X 2315(button.)X 3 f 1044 2748(style)N 1 f 1476(speci\256es)X 1782(the)X 1910(look)X 2082(of)X 2179(the)X 2307(button.)X 2581(Four)X 2762(styles)X 2974(are)X 3103(supported:)X 3491(regular,)X 3769(check)X 3987(box,)X 4157(circle,)X 1476 2844(and)N 1612(xbox.)X 3 f 1044 2968(outline)N 1 f 1476(speci\256es)X 1772(whether)X 2051(an)X 2147(outline)X 2389(is)X 2462(to)X 2544(be)X 2640(drawn)X 2861(around)X 3104(the)X 3222(button.)X 3 f 1044 3092(toggle)N 1 f 1476(speci\256es)X 1772(whether)X 2051(the)X 2169(button)X 2393(is)X 2466(a)XN VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1!@ 2522(toggle)X 2742(button.)X 732 3216(The)N 877(callback)X 1165(procedure)X 1507(associated)X 1857(with)X 2019(a)X 2075(button)X 2299(is)X 2372(called)X 2584(when)X 2778(the)X 2896(mouse)X 3125(is)X 3199(pressed)X 2 f 3461(and)X 3602(released)X 1 f 3895(while)X 4094(over)X 4258(the)X 612 3312(button.)N 879(If)X 956(the)X 1077(mouse)X 1309(is)X 1385(released)X 1672(while)X 1873(off)X 1990(of)X 2080(the)X 2201(button,)X 2448(no)X 2551(event)X 2748(is)X 2824(sent)X 2976(to)X 3061(the)X 3182(application.)X 3600(The)X 3747(signature)X 4063(of)X 4152(button)X 612 3408(callbacks)N 931(is)X 1004(as)X 1091(follows:)X 5 f 1044 3542(procedure)N 1424(button)X 10 f 1644(i)X 5 f (cb\(vidget,)S 2051(value\))X 1 f 612 3676(where)N 5 f 832(vidget)X 1 f 1065(is)X 1139(the)X 1258(actual)X 1471(button)X 1696(vidget)X 1917(created)X 2171(by)X 2272(VIB)X 2431(and)X 5 f 2570(value)X 1 f 2781(is)X 2856(the)X 2976(current)X 3226(value)X 3422(of)X 3511(the)X 3631(button.)X 3897(A)X 3977(regular)X 4227(but-)X 612 3772(ton)N 740(does)X 913(not)X 1041(maintain)X 1347(a)X 1409(state)X 1582(and)X 1724(therefore)X 2041(its)X 2142(value)X 2341(is)X 2419(insigni\256cant.)X 2879(However,)X 3219(if)X 3293(the)X 3416(button)X 3645(is)X 3723(a)X 3784(toggle,)X 4029(the)X 4152(button)X 612 3868(does)N 785(maintain)X 1091(a)X 1153(state.)X 1366(A)X 1450(non-null)X 1747(value)X 1947(indicates)X 2259(that)X 2406(the)X 2531(button)X 2762(is)X 2842(set)X 2958(or)X 3052(on,)X 3179(while)X 3384(a)X 3447(null)X 3598(value)X 3799(indicates)X 4111(that)X 4258(the)X 612 3964(button)N 836(is)X 909(off.)X 3 f 612 4156(Radio)N 836(Buttons)X 1 f 732 4280(Radio)N 944(Buttons)X 1213(are)X 1333(collections)X 1701(of)X 1789(buttons)X 2045(in)X 2128(which)X 2345(exactly)X 2598(one)X 2735(button)X 2961(is)X 3036(set)X 3147(at)X 3227(any)X 3365(given)X 3565(time;)X 3751(an)X 3849(exception)X 4183(is)X 4258(the)X 612 4376(initial)N 844(con\256guration)X 1317(in)X 1425(which)X 1667(no)X 1793(buttons)X 2074(are)X 2219(set.)X 2394(Selecting)X 2738(one)X 2900(button)X 3149(automatically)X 3630(unsets)X 3875(the)X 4018(previously)X 612 4472(highlighted)N 996(button)X 1220(in)X 1302(the)X 1420(group.)X 1667(The)X 1812(attribute)X 2099(sheet)X 2284(of)X 2371(a)X 2427(radio)X 2612(button)X 2836(contains)X 3123(the)X 3241(following)X 3572(editable)X 3846(features:)X 3 f 1044 4596(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 4720(callback)N 1 f 1476(speci\256es)X 1772(the)X 1890(procedure)X 2232(to)X 2314(call)X 2450(when)X 2644(the)X 2762(radio)X 2947(button)X 3171(receives)X 3455(an)X 3551(event.)X 3785(If)X 3859(no)X 3960(procedure)X 4303(is)X 1476 4816(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 4940(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(radio)X 3474(button.)X 3 f 1044 5064(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(radio)X 3474(button.)X 732 5188(The)N 883(attribute)X 1176(sheet)X 1368(also)X 1524(contains)X 2 f 1818(insert)X 1 f 2027(and)X 2 f 2170(delete)X 1 f 2389(buttons.)X 2691(These)X 2910(are)X 3036(used)X 3210(to)X 3299(dynamically)X 3722(alter)X 3892(the)X 4017(number)X 4289(of)X 612 5284(entries)N 848(in)X 931(the)X 1050(radio)X 1236(button.)X 1501(Pressing)X 1793(on)X 1894(the)X 2013(insert)X 2212(button)X 2437(pops)X 2609(open)X 2786(a)X 2843(window)X 3122(querying)X 3428(the)X 3547(number)X 3813(of)X 3901(items)X 4095(to)X 4178(insert)X 612 5380(and)N 754(where)X 977(the)X 1101(insertion)X 1407(should)X 1646(take)X 1806(place.)X 2042(The)X 2193(default)X 2442(is)X 2521(to)X 2609(insert)X 2813(one)X 2955(item)X 3123(at)X 3207(the)X 3331(end)X 3473(of)X 3566(the)X 3690(list.)X 3853(Pressing)X 4151(on)X 4258(the)X 612 5476(delete)N 826(button)X 1052(pops)X 1225(open)X 1403(a)X 1461(window)X 1741(querying)X 2048(the)X 2168(range)X 2369(of)X 2458(items)X 2653(to)X 2737(delete.)X 2991(The)X 3138(default)X 3383(is)X 3458(to)X 3542(delete)X 3756(the)X 3875(last)X 4007(item)X 4170(of)X 4258(the)X 612 5572(list.)N 732 5696(The)N 881(callback)X 1173(procedure)X 1519(associated)X 1873(with)X 2040(a)X 2101(radio)X 2291(button)X 2520(is)X 2598(called)X 2815(whenever)X 3153(one)X 3294(of)X 3386(its)X 3486(buttons)X 3746(is)X 3824(pressed)X 4090(\(and)X 4258(the)X 612 5792(release)N 862(takes)X 1053(place)X 1249(while)X 1453(over)X 1622(the)X 1746(button\).)X 2043(If)X 2123(the)X 2247(mouse)X 2482(is)X 2560(released)X 2849(while)X 3052(off)X 3171(of)X 3263(the)X 3386(button,)X 3635(no)X 3740(event)X 3939(is)X 4017(sent)X 4171(to)X 4258(the)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(6)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 612 672(application.)N 1028(The)X 1173(signature)X 1487(of)X 1574(radio)X 1759(button)X 1983(callbacks)X 2302(is)X 2375(as)X 2462(follows:)X 5 f 1044 806(procedure)N 1424(radio)X 10 f 1601(i)X 5 f (button)S 10 f 1861(i)X 5 f (cb\(vidget,)S 2268(value\))X 1 f 612 940(where)N 5 f 838(vidget)X 1 f 1077(is)X 1157(the)X 1282(actual)X 1501(radio)X 1694(button)X 1926(vidget)X 2154(created)X 2415(by)X 2523(VIB)X 2689(and)X 5 f 2835(value)X 1 f 3053(is)X 3134(the)X 3260(current)X 3516(value)X 3718(of)X 3813(the)X 3939(radio)X 4132(button.)X 612 1036(The)N 757(value)X 951(of)X 1038(the)X 1156(radio)X 1341(button)X 1565(is)X 1638(the)X 1756(label)X 1932(of)X 2019(the)X 2137(currently)X 2447(highlighted)X 2831(button.)X 3 f 612 1228(Menus)N 1 f 732 1352(Menus)N 971(are)X 1091(lists)X 1240(of)X 1328(buttons)X 1584(that)X 1725(appear)X 1961(temporarily)X 2356(on)X 2457(the)X 2576(screen)X 2803(and)X 2940(allow)X 3139(the)X 3258(user)X 3413(to)X 3496(select)X 3700(one)X 3837(item)X 4001(from)X 4179(a)X 4237(list;)X 612 1448(they)N 774(can)X 910(contain)X 1169(an)X 1268(arbitrary)X 1568(nesting)X 1822(of)X 1912(submenus.)X 2295(A)X 2376(menu)X 2577(appears)X 2846(when)X 3043(its)X 2 f 3141(menu)X 3338(button)X 1 f 3565(is)X 3641(pressed.)X 3945(A)X 4026(menu)X 4227(but-)X 612 1544(ton)N 742(is)X 823(simply)X 1068(the)X 1194(visual)X 1413(representation)X 1896(of)X 1991(the)X 2117(menu)X 2323(that)X 2471(is)X 2552(visible)X 2793(when)X 2996(the)X 3123(menu)X 3330(is)X 3412(not)X 3543(active.)X 3804(De\256ning)X 4113(a)X 4178(menu)X 612 1640(therefore)N 938(involves)X 1244(two)X 1399(parts:)X 1632(de\256ning)X 1929(the)X 2061(text)X 2215(and)X 2365(position)X 2656(of)X 2757(the)X 2889(menu)X 3101(button,)X 3359(and)X 3509(de\256ning)X 3805(the)X 3937(menu)X 4149(that)X 4303(is)X 612 1736(displayed)N 943(as)X 1034(the)X 1156(result)X 1358(of)X 1449(pressing)X 1740(on)X 1844(the)X 1966(menu)X 2168(button.)X 2436(The)X 2585(attribute)X 2876(sheet)X 3065(of)X 3156(a)X 3216(menu)X 3419(provides)X 3720(the)X 3843(means)X 4073(to)X 4160(de\256ne)X 612 1832(the)N 730(menu)X 928(with)X 1090(submenus)X 1430(and)X 1566(choices.)X 1867(The)X 2012(editable)X 2286(features)X 2561(of)X 2648(a)X 2704(menu)X 2902(are)X 3021(as)X 3108(follows:)X 3 f 1044 1956(title)N 1 f 1476(is)X 1549(the)X 1667(label)X 1843(that)X 1983(appears)X 2249(on)X 2349(the)X 2467(menu)X 2665(button.)X 3 f 1044 2080(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 2204(callback)N 1 f 1476(speci\256es)X 1774(the)X 1894(procedure)X 2238(to)X 2322(call)X 2460(when)X 2656(a)X 2714(menu)X 2914(item)X 3078(is)X 3153(selected.)X 3474(If)X 3550(no)X 3652(procedure)X 3996(is)X 4071(speci\256ed)X 1476 2300(the)N 1594(event)X 1788(is)X 1861(esE VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1~Osentially)X 2219(ignored.)X 3 f 1044 2424(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(menu)X 3487(button.)X 3 f 1044 2548(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(menu)X 3487(button.)X 732 2672(The)N 883(attribute)X 1176(sheet)X 1368(also)X 1524(contains)X 2 f 1818(insert)X 1 f 2027(and)X 2 f 2170(delete)X 1 f 2389(buttons.)X 2691(These)X 2910(are)X 3036(used)X 3210(to)X 3299(dynamically)X 3722(alter)X 3892(the)X 4017(number)X 4289(of)X 612 2768(entries)N 851(in)X 938(the)X 1061(menu.)X 1304(Pressing)X 1600(on)X 1705(the)X 1828(insert)X 2031(button)X 2260(pops)X 2436(open)X 2617(a)X 2678(window)X 2961(querying)X 3271(the)X 3394(number)X 3664(of)X 3755(items)X 3952(to)X 4038(insert)X 4240(and)X 612 2864(where)N 831(the)X 951(insertion)X 1253(should)X 1488(take)X 1644(place.)X 1876(The)X 2023(default)X 2268(is)X 2344(to)X 2429(insert)X 2630(one)X 2769(item)X 2934(at)X 3015(the)X 3136(end)X 3275(of)X 3365(the)X 3486(list.)X 3646(Pressing)X 3940(on)X 4043(the)X 4164(delete)X 612 2960(button)N 836(pops)X 1007(open)X 1183(a)X 1239(window)X 1517(querying)X 1822(the)X 1940(range)X 2139(of)X 2226(items)X 2419(to)X 2501(delete.)X 2753(The)X 2898(default)X 3141(is)X 3214(to)X 3296(delete)X 3508(the)X 3626(last)X 3757(item)X 3919(of)X 4006(the)X 4124(list.)X 732 3084(When)N 949(an)X 1050(item)X 1217(is)X 1295(added)X 1512(to)X 1599(a)X 1660(menu,)X 1883(a)X 1944(blank)X 2147(text)X 2292(\256eld)X 2459(along)X 2662(with)X 2829(two)X 2975(buttons)X 3236(appear)X 3477(on)X 3583(the)X 3707(attribute)X 4000(sheet.)X 4231(The)X 612 3180(text)N 755(\256eld)X 920(is)X 996(used)X 1166(to)X 1251(de\256ne)X 1470(the)X 1591(label)X 1770(of)X 1860(the)X 1980(menu)X 2180(item,)X 2364(and)X 2502(the)X 2622(two)X 2764(buttons)X 3021(are)X 3142(used)X 3311(to)X 3395(de\256ne)X 3613(whether)X 3894(the)X 4014(menu)X 4214(item)X 612 3276(is)N 693(a)X 757(menu)X 963(choice)X 1201(or)X 1296(a)X 1360(submenu.)X 1717(If)X 1799(the)X 1925(new)X 2087(item)X 2258(is)X 2340(to)X 2431(be)X 2536(a)X 2601(menu)X 2808(choice,)X 3067(all)X 3176(that)X 3325(needs)X 3537(to)X 3628(be)X 3733(done)X 3918(is)X 4000(to)X 4091(give)X 4258(the)X 612 3372(choice)N 846(a)X 906(label.)X 1126(If)X 1204(the)X 1326(new)X 1484(item)X 1650(is)X 1727(to)X 1813(be)X 1913(a)X 1973(submenu,)X 2306(mark)X 2495(the)X 2617(submenu)X 2930(box)X 3074(and)X 3214(click)X 3394(on)X 3498(the)X 3620(submenu)X 3933(button)X 4160(which)X 612 3468(will)N 756(pop)X 896(open)X 1072(a)X 1128(new)X 1282(window)X 1560(in)X 1642(which)X 1858(to)X 1940(de\256ne)X 2156(the)X 2274(submenu.)X 2623(VIB)X 2781(allows)X 3010(arbitrary)X 3307(nesting)X 3558(of)X 3645(submenus.)X 732 3592(If)N 815(a)X 880(menu)X 1087(item)X 1258(is)X 1340(de\256ned)X 1605(as)X 1701(a)X 1766(submenu,)X 2104(and)X 2249(then)X 2416(later)X 2588(the)X 2716(item)X 2888(is)X 2971(marked)X 3242(as)X 3339(a)X 3405(menu)X 3613(choice,)X 3873(this)X 4018(essentially)X 612 3688(deletes)N 855(the)X 973(prede\256ned)X 1332(submenu)X 1641(\(and)X 1804(all)X 1904(of)X 1991(its)X 2086(choices)X 2347(and)X 2483(submenus\).)X 732 3812(Once)N 926(a)X 986(menu)X 1188(has)X 1319(been)X 1495(de\256ned,)X 1775(it)X 1843(can)X 1979(be)X 2079(viewed)X 2335(within)X 2563(VIB)X 2725(by)X 2829(pressing)X 3120(the)X 3242(middle)X 3488(mouse)X 3721(button)X 3950(on)X 4055(the)X 4178(menu)X 612 3908(button.)N 883(This)X 1052(allows)X 1288(the)X 1413 0.3750(appearance)AX 1803(and)X 1946(behavior)X 2254(of)X 2348(the)X 2473(menu)X 2678(to)X 2767(be)X 2870(simulated)X 3208(without)X 3479(fully)X 3657(prototyping)X 4057(the)X 4182(inter-)X 612 4004(face.)N 790(Pressing)X 1084(the)X 1205(right)X 1379(mouse)X 1611(button)X 1838(on)X 1941(the)X 2062(menu)X 2263(button)X 2490(again)X 2687(displays)X 2972(the)X 3093(attribute)X 3383(sheet)X 3571(of)X 3661(the)X 3782(menu)X 3983(object,)X 4222(pro-)X 612 4100(viding)N 836(a)X 892(quick)X 1090(edit/simulation)X 1589(cycle.)X 732 4224(The)N 884(callback)X 1179(procedure)X 1528(associated)X 1885(with)X 2054(a)X 2117(menu)X 2322(is)X 2402(called)X 2621(when)X 2822(the)X 2947(menu)X 3152(has)X 3286(been)X 3465(displayed)X 3799(and)X 3942(the)X 4067(mouse)X 4303(is)X 612 4320(released)N 896(while)X 1094(over)X 1257(one)X 1393(of)X 1480(its)X 1575(choices.)X 1876(The)X 2021(signature)X 2335(of)X 2422(menu)X 2620(callbacks)X 2939(is)X 3012(as)X 3099(follows:)X 5 f 1044 4454(procedure)N 1424(menu)X 10 f 1623(i)X 5 f (cb\(vidget,)S 2030(value\))X 1 f 612 4588(where)N 5 f 837(vidget)X 1 f 1075(is)X 1154(the)X 1278(actual)X 1496(menu)X 1700(vidget)X 1926(created)X 2185(by)X 2291(VIB)X 2455(and)X 5 f 2599(value)X 1 f 2815(is)X 2894(a)X 2956(list)X 3079(of)X 3172(labels)X 3385(de\256ning)X 3673(the)X 3797(menu)X 4001(path)X 4165(of)X 4258(the)X 612 4684(selected)N 896(choice.)X 1171(For)X 1307(example,)X 1624(if)X 1698(the)X 1821(menu)X 2024(has)X 2 f 2156(open)X 1 f 2337(and)X 2 f 2478(close)X 1 f 2668(as)X 2760(its)X 2860(choices)X 3126(and)X 2 f 3267(open)X 1 f 3448(is)X 3526(selected,)X 5 f 3832 -0.4643(["open"])AX 1 f 4132(will)X 4280(be)X 612 4780(the)N 5 f 735(value)X 1 f 948(passed)X 1185(to)X 1270(the)X 1391(callback.)X 1702(If)X 1779(the)X 1900(menu)X 2101(has)X 2 f 2231(font)X 1 f 2378(as)X 2468(a)X 2527(submenu)X 2839(label)X 3018(and)X 2 f 3157(Helvetica)X 1 f 3488(as)X 3578(a)X 3637(choice)X 3870(within)X 4097(the)X 4218(sub-)X 612 4876(menu,)N 835(then)X 5 f 1000(["font",)X 1259("Helvetica"])X 1 f 1690(will)X 1839(be)X 1940(the)X 5 f 2065(value)X 1 f 2280(if)X 2 f 2354(Helvetica)X 1 f 2687(is)X 2765(selected.)X 3089(Thus)X 3273(choice)X 3507(names)X 3736(need)X 3912(not)X 4038(be)X 4138(unique)X 612 4972(across)N 833(the)X 951(entire)X 1154(menu,)X 1372(they)X 1530(can)X 1662(be)X 1758(distinguished)X 2204(by)X 2304(their)X 2471(path)X 2629(strings.)X 3 f 612 5164(Text)N 788(Input)X 998(Fields)X 1 f 732 5288(Text)N 902(input)X 1089(\256elds)X 1286(are)X 1409(used)X 1580(to)X 1666(gather)X 1891(textual)X 2133(input)X 2321(from)X 2501(the)X 2623(user)X 2781(of)X 2872(the)X 2994(application.)X 3414(They)X 3603(consist)X 3849(of)X 3940(a)X 4000(label)X 4180(and)X 4320(a)X 612 5384(value;)N 829(the)X 948(value)X 1143(is)X 1217(editable)X 1492(and)X 1629(can)X 1762(accept)X 1989(a)X 2046(limited)X 2293(number)X 2559(of)X 2647(characters,)X 3015(as)X 3103(speci\256ed)X 3409(by)X 3510(the)X 2 f 3629(max)X 3784(value)X 3979(length)X 1 f 4200(attri-)X 612 5480(bute.)N 810(The)X 955(attribute)X 1242(sheet)X 1427(of)X 1514(a)X 1570(text)X 1710(input)X 1894(\256eld)X 2056(contains)X 2343(the)X 2461(following)X 2792(editable)X 3066(features:)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(7)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(label)N 1 f 1476(is)X 1549(the)X 1667(label)X 1843(of)X 1930(the)X 2048(text)X 2188(input)X 2372(\256eld.)X 3 f 1044 796(value)N 1 f 1476(is)X 1549(the)X 1667(default)X 1910(value)X 2104(of)X 2191(the)X 2309(text)X 2449(input)X 2633(\256eld.)X 3 f 1044 920(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 1044(callback)N 1 f 1476(speci\256es)X 1774(the)X 1894(procedure)X 2238(to)X 2322(call)X 2460(when)X 2656(the)X 2776(text)X 2918(input)X 3104(\256eld)X 3268(receives)X 3554(an)X 3652(event)X 3848(\(which)X 4093(happens)X 1476 1140(when)N 1676(the)X 1800(return)X 2018(key)X 2160(is)X 2239(pressed)X 2506(and)X 2647(the)X 2770(text)X 2915(input)X 3104(\256eld)X 3271(has)X 3403(the)X 3526(focus\).)X 3772(If)X 385}+ VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1R^1(no)X 3956(procedure)X 4303(is)X 1476 1236(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 1360(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(text)X 3429(input)X 3613(\256eld.)X 3 f 1044 1484(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(text)X 3429(input)X 3613(\256eld.)X 3 f 1044 1608(max)N 1211(value)X 1413(length)X 1 f 1666(speci\256es)X 1962(the)X 2080(maximum)X 2424(number)X 2689(of)X 2776(characters)X 3123(that)X 3263(the)X 3381(value)X 3575(can)X 3707(contain.)X 732 1732(The)N 881(callback)X 1173(procedure)X 1519(associated)X 1873(with)X 2039(a)X 2099(text)X 2243(input)X 2431(\256eld)X 2597(is)X 2674(called)X 2890(whenever)X 3227(the)X 3349(return)X 3565(key)X 3705(is)X 3782(pressed.)X 4087(The)X 4236(sig-)X 612 1828(nature)N 833(of)X 920(text)X 1060(input)X 1244(\256eld)X 1406(callbacks)X 1725(is)X 1798(as)X 1885(follows:)X 5 f 1044 1962(procedure)N 1424(text)X 10 f 1552(i)X 5 f (cb\(vidget,)S 1959(value\))X 1 f 612 2096(where)N 5 f 839(vidget)X 1 f 1079(is)X 1160(the)X 1286(actual)X 1506(text)X 1654(vidget)X 1882(created)X 2144(by)X 2253(VIB)X 2420(and)X 5 f 2567(value)X 1 f 2786(is)X 2868(the)X 2995(current)X 3252(value)X 3455(of)X 3551(the)X 3678(text)X 3827(input)X 4020(\256eld.)X 4231(The)X 612 2192(value)N 806(of)X 893(the)X 1011(object)X 1227(is)X 1300(the)X 1418(entered)X 1675(text)X 1815(string.)X 3 f 612 2384(Sliders)N 1 f 732 2508(Sliders)N 974(are)X 1093(long)X 1255(rectangular)X 1637(buttons)X 1892(that)X 2032(display)X 2283(one)X 2419(or)X 2506(more)X 2691(scalar)X 2900(values)X 3126(as)X 3214(positions)X 3523(within)X 3748(a)X 3805(range.)X 4045(When)X 4258(the)X 612 2604(slidebar)N 891(is)X 969(clicked)X 1226(or)X 1318(dragged)X 1602(by)X 1706(the)X 1828(user,)X 2006(a)X 2066(scalar)X 2278(value)X 2476(is)X 2553(increased)X 2881(or)X 2972(decreased.)X 3354(Sliders)X 3600(can)X 3736(appear)X 3975(either)X 4182(verti-)X 612 2700(cally)N 788(or)X 875(horizontally.)X 1302(The)X 1447(attribute)X 1734(sheet)X 1919(of)X 2006(a)X 2062(slider)X 2260(contains)X 2547(the)X 2665(following)X 2996(editable)X 3270(features:)X 3 f 1044 2824(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 2948(callback)N 1 f 1476(speci\256es)X 1787(the)X 1920(procedure)X 2277(to)X 2374(call)X 2525(when)X 2734(the)X 2867(slider)X 3080(receives)X 3379(an)X 3490(event.)X 3739(If)X 3829(no)X 3945(procedure)X 4303(is)X 1476 3044(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 3168(\256lter)N 1 f 1476(\256lters)X 1692(out)X 1828(some)X 2031(of)X 2132(the)X 2264(events)X 2504(sent)X 2668(to)X 2765(the)X 2898(slider,)X 3131(if)X 3215(set.)X 3379(This)X 3556(corresponds)X 3979(to)X 4076(the)X 4209(non-)X 1476 3264(continuous)N 1847(mode)X 2045(as)X 2132(described)X 2460(below.)X 3 f 1044 3388(left/top)N 1 f 1476(speci\256es)X 1774(the)X 1894(left)X 2023(value)X 2219(of)X 2308(the)X 2428(range)X 2629(for)X 2745(horizontal)X 3092(sliders)X 3323(or)X 3412(the)X 3532(top)X 3656(value)X 3852(of)X 3941(the)X 4061(range)X 4262(for)X 1476 3484(vertical)N 1737(sliders.)X 2006(This)X 2168(can)X 2300(be)X 2396(a)X 2452(positive)X 2725(or)X 2812(negative)X 3104(value)X 3298(of)X 3385(type)X 3543(integer)X 3786(or)X 3873(real.)X 3 f 1044 3608(right/bottom)N 1 f 1520(speci\256es)X 1825(the)X 1952(right)X 2132(value)X 2335(of)X 2431(the)X 2558(range)X 2766(for)X 2889(horizontal)X 3243(sliders)X 3481(or)X 3577(the)X 3704(bottom)X 3959(value)X 4162(of)X 4258(the)X 1476 3704(range)N 1675(for)X 1789(vertical)X 2050(sliders.)X 2319(This)X 2481(can)X 2613(be)X 2709(a)X 2765(positive)X 3038(or)X 3125(negative)X 3417(value)X 3611(of)X 3698(type)X 3856(integer)X 4099(or)X 4186(real.)X 3 f 1044 3828(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(slider.)X 3 f 1044 3952(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(slider.)X 3 f 1044 4076(length)N 1 f 1476(speci\256es)X 1772(the)X 1890(length)X 2110(of)X 2197(the)X 2315(slider.)X 3 f 1044 4200(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(slider.)X 732 4324(The)N 882(application)X 1264(can)X 1402(control)X 1655(the)X 1779(number)X 2050(of)X 2143(events)X 2374(passed)X 2614(to)X 2702(the)X 2826(slider.)X 3070(In)X 2 f 3163(continuous)X 1 f 3540(mode,)X 3764(the)X 3888(slider)X 4092(receives)X 612 4420(events)N 841(as)X 932(the)X 1054(slidebar)X 1332(is)X 1409(pressed,)X 1694(dragged,)X 1997(and)X 2137(released.)X 2465(In)X 2 f 2556(non-continuous)X 1 f 3078(mode,)X 3300(the)X 3421(slider)X 3622(receives)X 3909(a)X 3968(single)X 4182(event)X 612 4516(indicating)N 954(the)X 1074(resulting)X 1376(value)X 1572(of)X 1661(the)X 1781 0.2500(press-drag-release)AX 2389(sequence.)X 2746(The)X 2893(slidebar)X 3170(can)X 3305(also)X 3457(be)X 3556(moved)X 3797(to)X 3882(a)X 3941(new)X 4098(location)X 612 4612(by)N 717(clicking)X 1000(anywhere)X 1338(within)X 1567(the)X 1690(slider)X 1893(region.)X 2163(In)X 2255(both)X 2422(modes,)X 2676(this)X 2816(results)X 3050(in)X 3137(the)X 3260(generation)X 3624(of)X 3716(a)X 3777(single)X 3993(event.)X 4231(The)X 612 4708(signature)N 926(of)X 1013(slider)X 1211(callbacks)X 1530(is)X 1603(as)X 1690(follows:)X 5 f 1044 4842(procedure)N 1424(slider)X 10 f 1615(i)X 5 f (cb\(vidget,)S 2022(value\))X 1 f 612 4976(where)N 5 f 831(vidget)X 1 f 1063(is)X 1136(the)X 1254(actual)X 1466(slider)X 1664(vidget)X 1884(created)X 2137(by)X 2237(VIB)X 2395(and)X 5 f 2533(value)X 1 f 2743(is)X 2816(the)X 2934(current)X 3182(numeric)X 3465(value)X 3659(of)X 3746(the)X 3864(slider.)X 3 f 612 5168(Scrollbars)N 1 f 732 5320(Scrollbars)N 1079(are)X 1200(sliders)X 1431(with)X 1596(a)X 1655(proportionally)X 2136(sized)X 2324(thumb)X 2551(capped)X 2802(on)X 2905(top)X 3030(and)X 3169(bottom)X 3418(by)X 3521(arrow)X 3732(buttons.)X 4030(The)X 4178(slide-)X 612 5416(bar)N 739(shows)X 963(the)X 1085(current)X 1337(location)X 1619(of)X 1710(the)X 1832(window)X 2114(or)X 2205(associated)X 2559(device)X 2793(within)X 3020(some)X 3212(domain)X 3475(that)X 3618(is)X 3694(larger)X 3905(than)X 4066(available)X 612 5512(screen)N 845(space)X 1051(and)X 1194(allows)X 1430(convenient)X 1809(random)X 2081(access;)X 2337(the)X 2463(arrow)X 2679(buttons)X 2942(allow)X 3148(more)X 3341(precise)X 3597(motion.)X 3891(Scrollbars)X 4244(can)X 612 5608(appear)N 847(either)X 1050(vertically)X 1373(or)X 1460(horizontally.)X 1907(The)X 2052(attribute)X 2339(sheet)X 2524(of)X 2611(a)X 2667(scrollbar)X 2968(contains)X 3255(the)X 3373(following)X 3704(editable)X 3978(features:)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(8)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 796(callback)N 1 f 1476(speci\256es)X 1779(the)X 1904(procedure)X 2254(to)X 2344(call)X 2488(when)X 2690(the)X 2816(scrollbar)X 3125(receives)X 3417(an)X 3521(event.)X 3763(If)X 3845(no)X 3953(procedure)X 4303(is)X 1476 892(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 1016(\256lter)N 1 f 1476(\256lters)X 1686(out)X 1816(some)X 2013(of)X 2108(the)X 2234(events)X 2467(sent)X 2624(to)X 2714(the)X 2840(scrollbar,)X 3169(if)X 3246(set.)X 3403(This)tT( VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1GmX 3574(corresponds)X 3991(to)X 4082(the)X 4209(non-)X 1476 1112(continuous)N 1847(mode)X 2045(as)X 2132(described)X 2460(below.)X 3 f 1044 1236(left/top)N 1 f 1476(speci\256es)X 1774(the)X 1894(left)X 2023(value)X 2220(of)X 2310(the)X 2431(range)X 2633(for)X 2750(horizontal)X 3098(scrollbars)X 3433(or)X 3523(the)X 3644(top)X 3769(value)X 3966(of)X 4056(the)X 4177(range)X 1476 1332(for)N 1590(vertical)X 1851(scrollbars.)X 2223(This)X 2385(can)X 2517(be)X 2613(a)X 2669(positive)X 2942(or)X 3029(negative)X 3321(value)X 3515(of)X 3602(type)X 3760(integer)X 4003(or)X 4090(real.)X 3 f 1044 1456(right/bottom)N 1 f 1520(speci\256es)X 1818(the)X 1938(right)X 2111(value)X 2307(of)X 2396(the)X 2516(range)X 2717(for)X 2833(horizontal)X 3180(scrollbars)X 3514(or)X 3603(the)X 3723(bottom)X 3971(value)X 4168(of)X 4258(the)X 1476 1552(range)N 1681(for)X 1801(vertical)X 2068(scrollbars.)X 2446(This)X 2614(can)X 2752(be)X 2854(a)X 2916(positive)X 3195(or)X 3288(negative)X 3586(value)X 3786(of)X 3878(type)X 4041(integer)X 4289(or)X 1476 1648(real.)N 3 f 1044 1772(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(scrollbar.)X 3 f 1044 1896(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(scrollbar.)X 3 f 1044 2020(length)N 1 f 1476(speci\256es)X 1772(the)X 1890(length)X 2110(of)X 2197(the)X 2315(scrollbar.)X 3 f 1044 2144(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(scrollbar.)X 732 2268(The)N 888(application)X 1275(can)X 1418(control)X 1676(the)X 1805(number)X 2081(of)X 2179(events)X 2415(passed)X 2660(to)X 2753(the)X 2882(scrollbar.)X 3234(In)X 2 f 3332(continuous)X 1 f 3715(mode,)X 3945(the)X 4075(scrollbar)X 612 2364(receives)N 902(events)X 1132(as)X 1224(the)X 1347(slidebar)X 1626(is)X 1704(pressed,)X 1990(dragged,)X 2294(and)X 2435(released.)X 2764(In)X 2 f 2856(non-continuous)X 1 f 3379(mode,)X 3602(the)X 3725(scrollbar)X 4031(receives)X 4320(a)X 612 2460(single)N 828(event)X 1027(indicating)X 1372(the)X 1495(resulting)X 1800(value)X 1999(of)X 2091(the)X 2214 0.2500(press-drag-release)AX 2825(sequence.)X 3165(The)X 3315(slidebar)X 3594(can)X 3731(also)X 3886(be)X 3988(moved)X 4232(to)X 4320(a)X 612 2556(new)N 768(location)X 1048(by)X 1150(clicking)X 1430(anywhere)X 1765(within)X 1991(the)X 2111(scrollbar)X 2414(region.)X 2681(In)X 2770(both)X 2933(modes)X 3163(this)X 3299(results)X 3529(in)X 3612(the)X 3731(generation)X 4091(of)X 4179(a)X 4236(sin-)X 612 2652(gle)N 732(event.)X 968(Additionally,)X 1414(the)X 1534(scrollbar)X 1837(is)X 1912(called)X 2126(when)X 2322(the)X 2442(increment/decrement)X 3142(buttons)X 3399(are)X 3520(pressed.)X 3824(The)X 3972(signature)X 4289(of)X 612 2748(scrollbar)N 913(callbacks)X 1232(is)X 1305(as)X 1392(follows:)X 5 f 1044 2882(procedure)N 1424(scrollbar)X 10 f 1726(i)X 5 f (cb\(vidget,)S 2133(value\))X 1 f 612 3016(where)N 5 f 831(vidget)X 1 f 1063(is)X 1136(the)X 1254(actual)X 1466(scrollbar)X 1767(vidget)X 1987(created)X 2240(by)X 2340(VIB)X 2498(and)X 5 f 2636(value)X 1 f 2846(is)X 2919(the)X 3037(current)X 3285(numeric)X 3568(value)X 3762(of)X 3849(the)X 3967(scrollbar.)X 3 f 612 3208(Regions)N 1 f 732 3332(Regions)N 1017(are)X 1139(rectangular)X 1524(areas.)X 1753(The)X 1901(application)X 2280(can)X 2416(safely)X 2632(draw)X 2817(in)X 2903(these)X 3092(areas)X 3282(and)X 3422(receive)X 3679(uninterpreted)X 4131(events.)X 612 3428(\(While)N 855(there)X 1036(is)X 1109(nothing)X 1373(to)X 1455(prevent)X 1716(an)X 1812(application)X 2188(from)X 2364(drawing)X 2647(anywhere)X 2980(within)X 3204(the)X 3322(window,)X 3620(it)X 3684(is)X 3757(not)X 3879(recommended:)X 612 3524(The)N 757(application)X 1133(might)X 1339(mar)X 1484(the)X 1602(display)X 1853(by)X 1953(drawing)X 2236(over)X 2399(vidgets.\))X 732 3648(The)N 877(attribute)X 1164(sheet)X 1349(of)X 1436(a)X 1492(region)X 1717(contains)X 2004(the)X 2122(following)X 2453(editable)X 2727(features:)X 3 f 1044 3772(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 3896(callback)N 1 f 1476(speci\256es)X 1785(the)X 1916(procedure)X 2271(to)X 2366(call)X 2515(when)X 2722(the)X 2853(region)X 3091(receives)X 3388(an)X 3497(event.)X 3745(If)X 3833(no)X 3947(procedure)X 4303(is)X 1476 3992(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 4116(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(region.)X 3 f 1044 4240(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(region.)X 3 f 1044 4364(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(region.)X 3 f 1044 4488(height)N 1 f 1476(speci\256es)X 1772(the)X 1890(height)X 2110(of)X 2197(the)X 2315(region.)X 3 f 1044 4612(line)N 1188(width)X 1 f 1476(speci\256es)X 1772(the)X 1890(thickness)X 2208(of)X 2295(the)X 2413(region)X 2638(outline.)X 2920(If)X 2994(zero,)X 3173(the)X 3291(region)X 3516(is)X 3589(not)X 3711(outlined.)X 732 4736(Regions)N 1023(differ)X 1231(from)X 1416(other)X 1610(user)X 1773(interface)X 2084(objects)X 2340(in)X 2431(that)X 2580(the)X 2707(events)X 2941(sent)X 3099(to)X 3190(the)X 3317(region's)X 3609(callback)X 3906(procedure)X 4257(are)X 612 4832(uninterpreted.)N 1100(This)X 1262(provides)X 1558(the)X 1676(application)X 2052(with)X 2214(\257exibility.)X 2564(The)X 2709(signature)X 3023(of)X 3110(the)X 3228(callback)X 3516(is)X 3589(as)X 3676(follows:)X 5 f 1044 4966(procedure)N 1424(region)X 10 f 1645(i)X 5 f (cb\(vidget,)S 2052(e,)X 2140(x,)X 2224(y\))X 1 f 612 5100(where)N 5 f 834(vidget)X 1 f 1069(is)X 1145(the)X 1266(vidget)X 1489(that)X 1632(VIB)X 1793(created,)X 5 f 2071(e)X 1 f 2138(is)X 2214(the)X 2335(Icon)X 2501(event)X 2698(code,)X 2893(and)X 5 f 3034(x)X 1 f 3098(and)X 5 f 3240(y)X 1 f 3304(are)X 3427(the)X 3549(mouse)X 3782(coordinates)X 4176(at)X 4258(the)X 612 5196(time)N 774(of)X 861(the)X 979(event.)X 3 f 612 5388(Labels)N 1 f 732 5512(Labels)N 966(consist)X 1209(of)X 1297(read-only)X 1626(text.)X 1807(They)X 1993(do)X 2094(not)X 2217(receive)X 2471(events)X 2697(and)X 2834(therefore)X 3146(do)X 3247(not)X 3370(have)X 3543(callbacks)X 3863(associated)X 4214(with)X 612 5608(them.)N 832(The)X 977(attribute)X 1264(sheet)X 1449(of)X 1536(a)X 1592(label)X 1768(contains)X 2055(the)X 2173(following)X 2504(editable)X 2778(features:)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(9)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 10 p %%Page: 10 10 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(text)N 1 f 1476(is)X 1549(the)X 1667(text)X 1807(to)X 1889(display)X 2140(on)X 2240(the)X 2358(screen.)X 3 f 1044 796(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 920(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(label.)X 3 f 1044 1044(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(label.)X 3 f 612 1236(Lines)N 1 f 732 1360(Lines)N 941(are)X 1071(provided)X 1387(to)X 1480(decorate)X 1784(the)X 1914(interface.)X 2268(They)X 2465(can)X 2609(be)X 2717(arbitrarily)X 3070(thick)X 3262(and)X 3410(may)X 3580(appear)X 3827(solid)X 4014(or)X 4113(dashed.)X 612 1456(Lines)N 819(do)X 928(not)X 1059(receive)X 1321(events)X 1555(and)X 1700(therefore)X 2020(do)X 2129(not)X 2260(hl VMS.BCK`[V9.DOCS]IPD258.PS;1.EXE;1!|make)X 2463(use)X 2599(of)X 2695(callback)X 2992(procedures.)X 3414(The)X 3568(attribute)X 3864(sheet)X 4057(of)X 4152(a)X 4216(line,)X 612 1552(which)N 828(appears)X 1094(by)X 1194(clicking)X 1472(the)X 1590(right)X 1761(mouse)X 1990(button)X 2214(upon)X 2394(the)X 2512(line)X 2652(object,)X 2888(contains)X 3175(the)X 3293(following)X 3624(editable)X 3898(features:)X 3 f 1044 1676(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 1800(line)N 1188(width)X 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(line.)X 3 f 1044 1924(x1)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(endpoint)X 2703(one.)X 3 f 1044 2048(y1)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(endpoint)X 2703(one.)X 3 f 1044 2172(x2)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(endpoint)X 2703(two.)X 3 f 1044 2296(y2)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(endpoint)X 2703(two.)X 3 f 1044 2420(style)N 1 f 1476(speci\256es)X 1772(whether)X 2051(the)X 2169(line)X 2309(is)X 2382(solid)X 2557(or)X 2644(dashed.)X 3 f 612 2708(7.)N 712(Converting)X 1119(XIB)X 1281(Applications)X 1 f 732 2832(VIB's)N 950(original)X 1221(ancestor)X 1511(was)X 1658(the)X 1778(X-Icon)X 2028(Interface)X 2337(Builder,)X 2619(XIB.)X 2819(It)X 2890(functioned)X 3255(similarly)X 3561(but)X 3685(created)X 3940(\256les)X 4096(in)X 4181(a)X 4240(dif-)X 612 2928(ferent)N 822(format.)X 1097(The)X 1243(Icon)X 1407(library)X 1642(program)X 5 f 1937(uix)X 1 f 2060(translates)X 2384(the)X 2503(speci\256cations)X 2960(contained)X 3293(in)X 3376(an)X 3473(XIB)X 3632(application,)X 4029(prototype,)X 612 3024(or)N 705(speci\256cation)X 1136(\256le)X 1264(into)X 1414(VIB)X 1578(form.)X 5 f 1804(uix)X 1 f 1933(takes)X 2125(a)X 2188(single)X 2406(command)X 2749(argument)X 3079(naming)X 3346(its)X 3448(input)X 3639(\256le;)X 3790(if)X 3866(no)X 3973(argument)X 4303(is)X 612 3120(supplied,)N 923(it)X 987(reads)X 1177(standard)X 1469(input.)X 1693(The)X 1838(generated)X 2171(VIB)X 2329(application)X 2705(is)X 2778(written)X 3025(to)X 3107(standard)X 3399(output.)X 732 3244(The)N 878(output)X 1103(from)X 5 f 1282(uix)X 1 f 1405(is)X 1479(a)X 1536(functional)X 1882(prototype)X 2210(application)X 2587(that)X 2728(contains)X 3016(all)X 3117(the)X 3236(objects)X 3484(\(buttons,)X 3787(sliders,)X 4037(etc.\))X 4200(from)X 612 3340(the)N 734(input)X 922(\256le)X 1048(but)X 1174(none)X 1354(of)X 1445(the)X 1567(user)X 1725(Icon)X 1892(code.)X 2108(This)X 2274(must)X 2453(be)X 2553(added)X 2769(manually.)X 3131(Note)X 3311(that)X 3455(the)X 3577(newly)X 3797(generated)X 5 f 4136(ui)X 1 f 4222(pro-)X 612 3436(cedure)N 847(returns)X 1090(a)X 2 f 1146(table)X 1 f 1326(of)X 1413(vidgets)X 1664(rather)X 1872(than)X 2030(just)X 2165(the)X 2283(root)X 2432(vidget)X 2652(returned)X 2940(in)X 3022(XIB)X 3180(applications.)X 3 f 612 3724(8.)N 712(Acknowledgements)X 1 f 732 3848(As)N 847(XIB)X 1011(and)X 1153(then)X 1317(VIB)X 1481(have)X 1660(evolved,)X 1961(they)X 2126(have)X 2305(bene\256ted)X 2626(greatly)X 2876(from)X 3059(the)X 3184(comments)X 3540(of)X 3634(Ralph)X 3852(Griswold,)X 4197(Clint)X 612 3944(Jeffery,)N 876(Jon)X 1007(Lipp,)X 1198(Ken)X 1352(Walker,)X 1629(and)X 1765(Yarko)X 1986(Tymciurak.)X 732 4068(This)N 894(work)X 1079(was)X 1224(supported)X 1560(in)X 1642(part)X 1787(by)X 1887(the)X 2005(National)X 2301(Science)X 2571(Foundation)X 2955(under)X 3158(Grant)X 3361(CCR-8901573.)X 3 f 612 4356(References)N 1 f 612 4508(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 4604(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 612 4728(2.)N 812(C.)X 906(L.)X 996(Jeffery,)X 1261(G.)X 1361(M.)X 1474(Townsend)X 1830(and)X 1968(R.)X 2063(E.)X 2154(Griswold,)X 2 f 2494(Graphics)X 2814(Facilities)X 3138(for)X 3253(the)X 3373(Icon)X 3538(Programming)X 4009(Language;)X 812 4824(Version)N 1081(9.0)X 1 f (,)S 1221(The)X 1366(Univ.)X 1566(of)X 1653(Arizona)X 1932(Icon)X 2095(Project)X 2342(Document)X 2696(IPD255,)X 2985(1994.)X 612 4948(3.)N 812(J.)X 885(Lipp,)X 2 f 1078(Window)X 1362(Interface)X 1674(Tools)X 1873(for)X 1988(Version)X 2259(9)X 2321(of)X 2405(Icon)X 1 f 2548(,)X 2591(The)X 2739(Univ.)X 2942(of)X 3032(Arizona)X 3314(Icon)X 3480(Project)X 3730(Document)X 4087(IPD259,)X 812 5044(1994.)N 612 5168(4.)N 812(M.)X 923(Cameron,)X 2 f 1257(XIB:)X 1429(X-Icon)X 1668(Interface)X 1978(Builder)X 1 f (,)S 2258(The)X 2403(Univ.)X 2603(of)X 2690(Arizona)X 2969(Tech.)X 3170(Rep.)X 3339(92-34,)X 3566(1992.)X 8 s 612 6144(IPD258)N 10 s 9 f 2380(-)X 1 f 2444(10)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 10 p %%Trailer xt %%Pages: 10 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs 5*[V9.DOCS]IPD259.PS;1+,a./ 4-0123KPWO56~+70/89Jj$GHJ%!PS-Adobe-2.0 %%Creator: dvips 5.485 Copyright 1986-92 Radical Eye Software %%Title: ipd259.dvi %%Pages: 43 1 %%BoundingBox: 0 0 612 792 %%DocumentFonts: Times-Bold Times-Roman Times-Italic Helvetica Courier %%+ Helvetica-Bold %%EndComments %DVIPSCommandLine: dvips -o ipd259.ps ipd259 %%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 /@rigin{isls{[0 -1 1 0 0 0] concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize -72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{ CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N} B /I{cc 1 add D}B /bop{userdict /bop-hook know:;b VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1En{bop-hook}if /SI save N @rigin 0 0 moveto pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook} if}N /@start{userdict /start-hook known{start-hook}if /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 statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval(Display)eq}{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 /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 %%BeginProcSet: texps.pro TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{ FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end %%EndProcSet TeXDict begin 40258431 52099146 1000 300 300 @start /Fa 133[23 25 25 35 25 28 15 25 18 1[28 28 28 40 13 25 1[13 28 28 15 25 28 25 28 25 3[15 1[15 4[30 33 28 30 33 2[35 1[38 3[13 1[35 28 30 33 33 1[33 14[25 25 2[13 1[13 2[15 15 40[{}46 45.624989 /Helvetica-Bold rf /Fb 221[32 34[{}1 53.837139 /Courier rf /Fc 5 111 df0 D<000F0038006000E001C001C001C001C001 C001C001C001C001C001C001C001C001C001C001C0038007001E00F8001E000700038001C001C0 01C001C001C001C001C001C001C001C001C001C001C001C001C000E000600038000F102D7DA117 >102 DI106 D110 D E /Fd 81[23 51[23 23 23 33 23 25 13 23 15 25 25 25 25 38 10 23 1[10 25 25 13 25 25 23 25 25 3[13 1[13 28 30 30 43 30 33 28 30 33 35 30 35 33 38 25 30 23 13 33 35 28 30 33 33 30 30 1[25 1[27 1[13 13 25 25 25 25 25 25 25 25 25 25 13 13 1[13 27 18 15 15 10 30 2[25 16 13 33[{}80 45.624989 /Helvetica rf /Fe 198[23 23 23 23 23 23 23 23 23 23 2[15 45[{.167 SlantFont}11 45.624989 /Times-Roman rf /Ff 81[23 51[18 20 2[20 23 13 18 18 1[23 23 23 33 13 20 1[13 23 23 13 20 23 20 23 23 18[30 4[15 10[31 1[31 15 15 11[11 1[11 44[{}31 45.624989 /Times-Italic rf /Fg 81[28 55[25 1[17 19 22 1[28 25 28 41 14 2[14 28 25 17 22 28 22 1[25 10[36 1[33 28 83[{}21 50.000000 /Times-Bold rf /Fh 134[30 30 43 30 33 20 23 27 1[33 30 33 50 17 33 1[17 33 30 20 27 33 27 33 30 10[43 43 1[33 43 1[37 3[40 2[23 47 2[40 43 43 40 43 25[20 39[{}37 59.999973 /Times-Bold rf /Fi 78[23 2[25 53[23 1[23 25 15 18 20 1[25 23 25 1[13 25 1[13 25 23 15 20 25 20 25 23 10[33 33 30 25 33 1[28 2[43 7[30 33 33 30 33 25[15 39[{}35 45.624989 /Times-Bold rf /Fj 47[45 21[20 10[25 25 3[20 47[20 23 23 33 23 23 13 18 15 23 23 23 23 35 13 23 13 13 23 23 15 20 23 20 23 20 3[15 1[15 28 2[43 33 33 28 25 30 1[25 33 33 40 28 33 18 15 33 33 25 28 33 30 30 33 5[13 13 23 23 23 23 23 23 23 23 23 23 13 11 15 11 26 1[15 15 15 1[38 37[{}77 45.624989 /Times-Roman rf /Fk 138[25 4[25 25 25 4[14 3[22 24[30 1[19 16[25 4[25 1[25 25 4[12 44[{}13 50.000000 /Times-Roman rf /Fl 136[52 2[24 28 32 2[36 40 1[20 2[20 2[24 32 40 32 1[36 9[72 52 1[48 10[28 15[36 8[36 1[18 46[{}20 72.000000 /Times-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin %%EndSetup %%Page: 0 1 0 bop 259 692 a Fl(W)o(indow)17 b(Interface)g(T)-7 b(ools)17 b(for)h(V)-7 b(ersion)17 b(9.0)h(of)f(Icon)887 892 y Fk(Jon)c(Lipp)904 1023 y Fj(IPD259)890 1385 y Fi(Abstract)114 1484 y Fj(This)7 b(document)g(describes)f(a)h(user)g(in)o(terface)g(toolk)o(it)g(av)o(ailabl)o (e)g(to)g(Icon)f(programmers)h(usin)o(g)g(th)o(e)g(graphi)o(cs)114 1546 y(facilities)k(in)g(V)-5 b(ersion)12 b(9.0)g(of)g(Icon.)19 b(The)13 b(toolkit)d(extends)h(the)h(basic)g(window)e(model)i(by)g(providing) e(for)114 1608 y(layout)g(of)h(and)g(event)g(routing)e(to)i(virtual)f (input/output)e(devices)i(attached)h(to)g(windows.)836 1776 y Fk(June)i(24,)f(1994)670 1956 y Fj(Department)f(of)g(Computer)g(Science)735 2018 y(The)g(University)e(of)i(Arizona)805 2080 y(T)n(ucson,)g(AZ)g(85721)p eop %%Page: 1 2 1 bop 0 124 a Fh(Intr)o(oduction)0 233 y Fj([Jef)o(f94])15 b(describes)f(the)g(graphics)g(facilities)g(of)g(V)-5 b(ersion)14 b(9.0)h(of)f(Icon)h(provided)f(in)g(the)g(form)h(of)g(built-in)e(functions)0 295 y(and)g(extensions)d(to)j(Icon')m(s)g(\256le)g(data)g(type.)20 b(These)13 b(facilities)e(are)j(easy)e(to)h(use)f(for)h(simple)f(windowing)f (applications.)0 357 y(However)n(,)g(modern)f(graphical)g(user)g(interface)h (technology)d(requires)i(a)h(more)g(sophisticated)d(approach.)16 b(In)10 b(particular)n(,)0 419 y(the)i(complexity)f(of)h(modern)g(interfaces) g(motivates)g(more)g(robust)f(models)h(of)g(windows)f(as)h(I/O)g(devices)g (as)g(well)g(as)g(a)0 482 y(more)g(robust)e(collection)f(of)j(implementation) d(techniques.)71 544 y(This)i(document)h(describes)g(a)g(library)g(of)h(user) f(input)f(facilities)g(built)g(on)h(top)g(of)g(Icon.)21 b(The)12 b(library)g(consists)e(of)j(a)0 606 y(collection)d(of)h(canonical)f(user)h (interface)h(devices)f(available)f(to)h(Icon)g(programmers.)0 736 y Fg(V)n(idgets)0 829 y Fj(A)i Ff(vidget)g Fj(is)g(de\256ned)g(as)h(a)f (\252virtual)g(input/outpu)o(t)e(device)i(gadget\272,)h(and)f(is)g(used)g(as) g(the)g(basic)g(descriptive)f(label)h(for)0 891 y(the)f(tools)f(described)g (herein.)20 b(At)12 b(the)g(very)g(basic)g(level,)g(a)h(vidget)e(is)h(a)g (rectangular)g(region)g(of)g(a)g(window)f(de\256ned)i(by)0 953 y(an)f(\(x,)h(y\))f(coordinate)f(pair)h(for)g(the)g(upper)f(left)h (corner)n(,)h(and)f(a)g(width)f(and)h(height)f(for)h(the)g(dimensions.)17 b(Most)12 b(vidgets)0 1015 y(handle)f(events)h(passed)f(to)h(them)g(and)g (are)h(responsible)d(for)j(their)e(own)h(visual)f(representation.)18 b(Many)12 b(vidgets)f(accept)0 1077 y(their)g(own)f(events)h(to)g(perform)g (various)f(actions.)71 1139 y(At)j(the)g(Icon)h(level,)g(the)g(data)f (structure)g(adopted)g(for)h(maintaining)e(the)i(internals)e(of)i(a)g(vidget) f(is)g(a)h(record.)24 b(The)0 1201 y(\256elds)11 b(of)g(these)g(records)g(is) g(described)f(below)h(under)g Fi(The)h(\256elds)f(of)g(a)g(vidget)g(r)o (ecord)p Fj(.)0 1331 y Fg(The)h(r)o(oot)h(frame)f(and)g(composition)g(of)g (vidgets)0 1424 y Fj(There)e(are)h(basically)e(two)h(classes)f(of)h(vidgets,) f(simple)h(vidgets)f(themselves,)g(and)h(vidget)f Ff(frames)p Fj(.)15 b(A)c(frame)g(acts)f(as)g(an)0 1486 y(or)o(ganizational)e(entity)g (that)h(contains)f(a)i(collection)e(of)i(vidgets)e(withgO VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1in)g(its)h (rectangular)g(region,)g(and)h(dispatches)e(events)0 1548 y(that)h(fall)g (within)f(its)g(domain)h(to)g(the)g(appropriate)g(vidget.)15 b(Most)9 b(varieties)f(of)i(frames)g(are)g(hidden)e(from)i(the)g(user)f (within)0 1610 y(wrapper)i(procedures)g(provided)f(by)h(the)g(library)m(.)16 b(A)11 b(vidget)f(is)h(usually)e(told)h(to)h(draw)g(itself)g(by)f(its)h (parent)g(frame.)71 1672 y(Since)j(vidgets)f(must)i(then)f(be)g(placed)h (within)e(a)i(vidget)e(frame,)k(at)e(the)f(top)g(level)g(of)h(this)e (hierarchy)h(is)h(the)f Ff(r)n(oot)0 1734 y(frame)p Fj(.)i(This)9 b(is)h(a)h(special)f(frame)i(that)e(always)g(encompasses)h(the)f(entire)g (window)g(area,)h(and)g(is)f(able)h(to)f(handle)g(events)0 1797 y(such)h(as)g(a)g(window)f(resize.)0 1950 y Fh(User)k(Interface)g (Primitives)0 2059 y Fj(A)i(number)g(of)h(garden-variety)e(user)h(interface)g (devices)g(have)g(been)g(written)f(and)h(are)h(provided)e(by)h(the)g(library) f(as)0 2121 y(\256nished)g(products.)28 b(This)15 b(section)f(describes)h (some)h(of)g(these)f(devices.)29 b(Most)15 b(devices)g(except)h(the)f(very)g (simplest)0 2183 y(buttons)6 b(and)h(toggles)f(are)j(examples)e(of)h(vidget)f Ff(composition)p Fj(;)f(that)h(is,)h(they)f(are)h(constructed)f(by)g(laying)g (out)g(a)h(collection)0 2245 y(of)j(simpler)g(vidgets)f(within)f(an)i (enclosing)f Ff(frame)p Fj(.)0 2357 y Fi(Buttons)23 b Fj(are)13 b(the)e(simplest)g(form)h(of)g(input)e(devices,)i(a)g(portion)f(of)h(the)f (screen)h(used)g(not)f(to)g(display)f(information)h(but)114 2419 y(to)g(implement)h(user)o(-driven)f(control)g(\257ow)m(.)18 b(They)12 b(vary)g(in)f(size,)h(shape,)g(appearance,)h(and)f(operation.)18 b(Buttons)114 2481 y(are)12 b(activated)f(\(pressed\))h(by)g(locating)e(the)i (mouse)g(pointer)e(in)i(the)f(portion)g(of)h(the)f(screen)i(in)e(which)g(the) h(button)114 2543 y(appears,)f(and)g(clicking)f(the)h(mouse.)937 2753 y Fe(-)h(1)f(-)p eop %%Page: 2 3 2 bop 0 124 a Fi(T)l(oggles)22 b Fj(are)11 b(buttons)e(that)h(retain)g(their) h(state)f(between)g(mouse)h(events;)f(instead)f(of)i(each)g(mouse)g(click)f (activating)f(the)114 186 y(operation)h(associated)g(with)g(the)h(toggle,)f (mouse)h(clicks)g(turn)f(the)h(toggle)f Ff(on)h Fj(and)g Ff(off)6 b Fj(.)0 286 y Fi(Radio)11 b(buttons)23 b Fj(are)9 b(collections)e(of)h (toggles)f(composed)h(in)g(such)g(a)h(way)f(that)g(at)h(any)f(time)g(no)h (more)g(than)f(one)g(button)f(is)114 348 y(selected.)15 b(T)m(oggles)8 b(in)i(radio)f(buttons)e(are)k(related)e(by)h(an)f(exclusive-or)g (constraint.)14 b(When)c(a)g(toggle)e(is)h(selected,)114 410 y(any)i(other)f(toggle)g(in)h(the)g(radio)g(button)e(is)i(deselected.)0 509 y Fi(Menus)23 b Fj(are)13 b(collections)e(of)h(buttons)e(that)i(appear)h (temporarily)e(on)h(the)g(screen)h(and)f(allow)g(the)g(user)g(to)g(select)g (one)g(or)114 572 y(more)f(items)g(from)h(a)g(list.)0 671 y Fi(Menu)g(bars)23 b Fj(are)10 b(collections)d(of)j(buttons)d(that)i (typically)f(appear)h(across)g(the)h(top)e(or)i(bottom)e(of)h(a)h(region)f (of)g(a)h(window)m(.)114 733 y(Menu)j(bars)g(usually)e(are)j(present)f (on-screen)f(most)h(of)g(the)g(time,)h(as)f(visual)f(reminders)g(of)i(the)e (various)g(menus)114 795 y(available.)j(Clicking)10 b(on)h(a)h(button)d(in)i (a)h(menu)f(bar)g(pulls)f(down)h(an)g(associated)f(menu.)0 895 y Fi(Sliders)23 b Fj(are)14 b(combination)f(input/output)e(devices.)25 b(They)13 b(are)i(long)e(rectangular)h(buttons)e(that)i(graphically)f (display)114 957 y(one)e(or)h(more)g(scalar)f(values)g(as)h(positions)d(in)i (some)h(range.)17 b(When)12 b(the)f(slidebar)g(is)g(clicked)g(or)g(dragged)g (by)g(the)114 1019 y(user)n(,)g(a)h(scalar)f(value)g(is)g(increased)g(or)g (decreased.)17 b(The)11 b(scalar)g(value)g(is)g(then)f(used)h(by)g(the)g (program.)0 1118 y Fi(Scr)o(ollbars)22 b Fj(are)17 b(examples)e(of)h(vidget)e Ff(composition)p Fj(:)22 b(sliders)15 b(with)f(proportionally)f(sized)i (thumbs)g(are)h(capped)g(on)114 1180 y(either)f(end)g(by)g(arrow)h(buttons.) 27 b(The)15 b(slidebar)g(shows)f(the)h(current)g(location)f(of)i(the)f (window)f(or)h(associated)114 1243 y(device)e(within)e(some)j(display)e(that) g(is)h(lar)o(ger)h(than)e(available)h(screen)h(space)f(and)g(allows)f (convenient)g(random)114 1305 y(access;)f(the)h(arrow)g(buttons)d(allow)i (more)h(precise)g(motion)e(\(such)i(as)f(moving)g(up)g(or)h(down)f(a)h (single)e(line\).)17 b(The)114 1367 y(size)c(of)h(the)f(thumb)g(is)g (determined)g(by)g(the)g(ratio)g(of)h(the)f(window)f(size)h(to)g(the)h(total) e(size)h(of)h(the)f(region)g(being)114 1429 y(scrolled)c(through.)15 b(As)c(this)e(area)j(may)f(be)g(variable)f(in)g(size)g(\(as)h(in)f(text)g (editors\),)h(the)f(thumb)g(then)g(changes)g(size)114 1491 y(in)g(accordance)i(with)e(the)h(varying)f(ratio.)0 1590 y Fi(Dialog)g(boxes)22 b Fj(are)15 b(further)e(examples)h(of)g(device)g (composition.)23 b(A)13 b(dialog)g(box)g(is)h(used)f(to)h(obtain)e(several)i (related)114 1653 y(input)i(values)g(from)i(the)f(user)m(.)36 b(Each)18 b(of)f(the)g(input)f(values)h(may)h(be)f(speci\256ed)g(either)g(by) g(keyboard)g(input,)114 1715 y(by)e(a)i(slidebar)n(,)f(or)g(by)g(some)g (other)g(device)g(appropriate)f(to)g(the)h(value.)31 b(These)15 b(techniques)g(can)h(be)g(used)g(in)114 1777 y(combination.)j(For)13 b(example,)h(the)e(approximate)g(value)g(can)h(be)g(given)f(by)g(a)h(mouse)g (click,)g(and)f(the)h(value)f(can)114 1839 y(then)e(be)i(edited)e(by)h (keystrokes.)k(Buttons)10 b(are)i(used)e(to)h(specify)g(when)g(the)f(dialog)g (box)h(can)g(be)h(closed.)0 1938 y Fi(Couplers)22 b Fj(are)14 b(objects)e(that)g(describe)g(relationships)e(between)j(devices,)g (application)d(data)j(sets,)g(or)g(both.)20 b(Couplers)114 2000 y(do)12 b(not)g(have)g(an)h(on-screen)f(presence)h(in)f(and)h(of)f (themselves,)h(but)e(rather)i(serve)g(as)f(\252glue\272)h(that)f(binds)f (screen)114 2062 y(objects)16 b(to)h(underlying)e(data.)35 b(Their)17 b(primary)h(purpose)e(is)h(to)g(send)f(the)i(\257ow)f(of)g (control)g(to)f(any)i(callback)114 2125 y(procedure)11 b(associated)f(with)g (a)i(particular)e(vidget.)0 2278 y Fh(How)k(V)n(idgets)h(Communicate)0 2387 y Fj(Dif)o(ferent)7 b(applications)g(and)g(dif)o(ferent)g(programmers)g (have)g(dif)o(ferent)g(ideas)g(about)g(the)g(level)g(at)g(wh)o(ich)g (communicatio)o(n)0 2449 y(with)14 b(the)g(interface)g(should)f(take)i (place.)27 b(The)14 b(levels)g(supported)f(in)h(this)f(library)h(are)h(event) f(translation,)g(procedure)0 2511 y(callbacks,)d(and)g(couplers.)937 2753 y Fe(-)h(2)f(-)p eop %%Page: 3 4 3 bop 0 124 a Fi(Event)12 b(translation)22 b Fj(\320)12 b Fd(VEvent\(frame,)h (e\))f Fj(is)e(used)h(to)g(process)g(individual)d(events)j(through)f(a)h (vidget)f(frame.)18 b(This)114 186 y(method)10 b(of)h(communication)f (ususally)g(is)g(not)g(useful)h(for)g(an)g(individual)e(vidget,)h(as)h(most)g (accept)g(events)f(using)114 248 y Fd(Event\(\))j Fj(in)e(their)h(internal)f (event)h(loops.)18 b(Used)12 b(on)g(a)g(procedure,)h(this)e(function)g (attempts)g(a)i(lookup)e(based)h(on)114 311 y Fd(\(x,)j(y\))p Fj(,)h(and)e(returns)f(the)h(results)f(of)h(the)g(event)g(loop)f(of)h(the)g (vidget)f(found.)24 b(If)15 b(no)e(vidget)g(accepts)h(the)g(event,)114 373 y Fd(VEvent\(\))e Fj(fails.)114 451 y(The)d(result)h(of)f(a)i(vidget')m (s)e(event)g(loop)g(is)h(speci\256c)g(to)f(the)h(vidget.)15 b(A)10 b(vidget)e(fails)i(if)g(passed)f(an)h(irrelevant)f(event,)114 513 y(as)14 b(for)g(example,)i(if)e(a)h(character)g(from)g(the)f(keyboard)f (is)h(passed)g(to)f(a)i(button)e(vidget.)24 b(This)13 b(is)h(suf)o(\256cient) g(for)114 575 y(simple)c(applications)f(that)i(wish)f(to)h(utilize)f (standard)g(\257ow)h(of)h(control.)0 669 y Fi(Pr)o(ocedur)o(e)h(callbacks)22 b Fj(\320)15 b(the)f(vidget)g(can)h(be)f(created)i(with)d(a)i(callback)f (procedur3q0 VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1|#e.)27 b(The)15 b(callback)f(procedure)h(is)114 731 y(passed)f(two)h(parameters:)25 b(the)14 b(Icon)i(record)f(that)g(de\256nes)g (the)g(vidget)f(and)h(a)h(value)f(corresponding)e(to)i(some)114 793 y(internal)7 b(state)h(or)h(value)f(associated)g(with)f(the)i(vidget.)14 b(For)9 b(example,)h Fd(V)n(radio)p 1375 793 14 2 v 18 w(buttons)f Fj(passes)e(to)i(its)e(procedure)114 855 y(callback)j(the)h(vidget)f(record)i (itself)e(and)h(the)g(string)f(label)h(of)g(the)g(button)f(selected.)16 b(For)c(a)f Fd(Vslider)i Fj(the)e(callback)114 917 y(is)h(passed)g(the)g (slider)g(record)h(and)g(the)f(scalar)h(value)f(of)h(the)g(slider)e (position.)19 b(A)13 b(standard)f(callback)g(procedure)114 979 y(heading)e(looks)g(like)182 1081 y Fd(procedure)k(callback\(vidget,)f (value\))0 1182 y Fi(Coupler)e(V)l(ariables)33 b Fj(\320)11 b(A)g(coupler)f(is)g(an)h(object)e(that)h(holds)f(one)i(\(or)f(more\))i (values)e(and)g(a)h(list)e(of)i(clients.)k(A)10 b(vidget)114 1244 y(utilizes)k(a)h(coupler)g(by)g(setting)f(the)h(coupler)g(to)g(a)h (value,)h(which)d(in)h(turn)g(noti\256es)g(any)g(vidgets,)g(procedures,)114 1307 y(or)g(other)g(couplers)f(on)h(the)g(coupler)r(')m(s)g(client)f(list.)28 b(If)16 b(the)f(client)f(is)h(another)g(vidget,)g(then)g(the)g Fd(couplerset\(\))114 1369 y Fj(procedure)c(associated)f(with)g(that)h (client)f(is)h(called,)g(and)g(the)g(parameters)h(are)g(the)f(client,)g(the)g (caller)g(\(the)g(vidget)114 1431 y(who)j(set)g(the)g(coupler\))h(and)f(the)g (value)g(of)h(the)f(coupler)m(.)27 b(If)15 b(the)g(client)e(is)i(a)f (procedure,)i(then)e(the)h(parameters)114 1493 y(are)d(as)f(described)g (above;)g(the)g(vidget)g(record)g(sent)g(is)g(the)g(caller)h(speci\256ed)f (in)g(the)h Fd(V)m(AddClient\(\))25 b Fj(call)12 b(used)f(to)114 1555 y(add)g(the)h(procedure)g(to)g(the)f(client)g(list)g(of)h(the)g(coupler) n(,)g(and)g(the)g(value)f(is)h(simply)f(the)g(value)h(of)g(the)g(coupler)m(.) 19 b(If)114 1617 y(the)11 b(client)g(is)g(another)h(coupler)n(,)g(then)f (that)g(coupler)g(is)h(set)f(using)f(the)i(same)g(parameters)h(passed)e(to)g (the)h(original)114 1679 y(coupler)m(.)114 1757 y(When)f(a)h(vidget)f(is)g (created,)h(it)f(constructs)g(its)f(own)i(internal)e(coupler)h(that)h (resides)f(in)g(its)g Fd(callback)h Fj(\256eld.)18 b(Any)114 1819 y(clients)13 b(passed)g(to)h(the)g(vidget)f(through)g(the)h(callback)f (\256eld)i(upon)e(creation)h(of)g(the)g(vidget)f(are)i(automatically)114 1881 y(added)f(as)g(clients)g(to)g(the)g(vidget')m(s)g(internal)f(coupler)m (.)27 b(This)13 b(allows)h(the)g(implicit)f(creation)h(of)g(links)g(between) 114 1943 y(vidgets)c(without)h(manually)g(creating)h(couplers)g(and)g(using)f Fd(V)m(AddClient\(\))p Fj(.)21 b(See)13 b(the)g(examples)f(at)g(the)g(end)g (of)114 2006 y(this)e(document)i(of)g(how)f(to)h(use)f(couplers)h(and)f(the)h (callback)g(\256eld.)18 b(There)13 b(are)f(dif)o(ferent)g(couplers,)g (depending)114 2068 y(on)e(the)h(way)g(the)g(value)g(is)g(manipulated:)k Fd(Vcoupler)m(,)f(V)n(range)p 1145 2068 V 18 w(coupler)p Fj(,)f(and)e Fd(Vbool)p 1527 2068 V 17 w(coupler)p Fj(.)71 2160 y(Thus,)e(when)h(a)g (vidget)f(is)h(created,)h(the)e Fd(callback)i Fj(\256eld)f(may)g(contain)f (either)h(a)g(single)f(callback)h(client,)f(which)h(may)0 2222 y(be)j(a)h(coupler)n(,)f(vidget,)g(or)h(procedure,)f(or)h(several)f(clients)f (in)g(the)h(form)h(of)f(an)h(Icon)f(list)f(to)g(be)i(added)e(to)h(the)g (vidget')m(s)0 2284 y(internal)d(coupler)m(.)17 b(The)11 b(creation)g (procedure)g(for)g(the)g(vidget)f(detects)h(the)f(list)g(and)h(read)h(the)f (clients)f(from)i(it.)0 2412 y Fg(The)g(\256elds)h(of)f(a)g(vidget)g(r)o (ecord)0 2504 y Fj(Since)g(a)f(callback)g(procedure)h(receives)f(as)h(its)e (\256rst)h(parameter)i(the)e(record)g(associated)g(with)f(a)i(vidget,)f(it)f (is)h(necessary)0 2566 y(to)h(know)f(the)h(\256eld)h(names)f(of)h(the)f (vidget)f(to)h(reference)h(in)f(order)g(to)g(access)h(certain)f(information.) 19 b(All)11 b(vidgets)g(\(with)0 2629 y(the)g(exception)f(of)h(coupler)g (variables)f(and)h Fd(Vline)p Fj(\))i(have)e(the)g(following)e(\256eld)i (names:)937 2753 y Fe(-)h(3)f(-)p eop %%Page: 4 5 4 bop 77 124 a Fd(win)240 b Fj(the)10 b(window)g(binding)77 186 y Fd(ax,)i(ay)187 b Fj(the)10 b(absolute)g(coordinates)g(in)h(relation)f (to)h(the)g(binding)e(in)i(\256eld)g Fd(win)77 248 y(aw)m(,)i(ah)177 b Fj(the)10 b(width)g(and)h(height)f(in)h(pixels)77 311 y Fd(callback)144 b Fj(an)11 b(internal)f(coupler)77 373 y Fd(id)273 b Fj(a)11 b(user)o(-assigned)f(id)h(of)g(any)g(Icon)g(data)g(type)77 435 y Fd(uid)248 b Fj(a)11 b(unique)f(integer)h(assigned)f(internally)f(upon) i(creation)71 594 y(A)f Fd(Vline)j Fj(has)d(the)h(following)e(\256eld)i (names,)g(corresponding)e(to)i(the)f(absolute)g(values)g(of)h(its)f (endpoints:)k Fd(ax1,)e(ay1,)0 656 y(ax2,)f Fj(and)g Fd(ay2)p Fj(.)71 718 y(All)f(couplers)g(share)i(the)f(\256elds:)77 816 y Fd(value)200 b Fj(the)10 b(value)h(of)g(the)g(coupler)77 878 y Fd(id)273 b Fj(an)11 b(indenti\256er)n(,)g(set)f(internally)g(to)h(the) g(constant)f Fd(V)p 1204 878 14 2 v 16 w(COUPLER)77 940 y(uid)248 b Fj(a)11 b(unique)f(integer)h(assigned)f(internally)f(upon)i(creation)0 1153 y Fh(Using)k(the)g(Library)0 1262 y Fj(In)10 b(order)g(to)g(access)g (the)g(library)m(,)g(it)g(is)f(necessary)h(to)g(link)f(certain)g(\256les.)17 b(All)9 b(programs)h(using)f(the)g(library)h(must)f(link)g(the)0 1324 y(\256le)i Fd(vidgets)p Fj(.)17 b(T)m(o)11 b(use)g(the)g(vidgets)e (listed,)i(the)g(appropriate)f(\256le)h(must)g(be)g(linked:)128 1422 y(link)f(\256le)p 128 1429 141 2 v 168 w(vidgets)p 436 1438 132 2 v 128 1484 a Fd(vbuttons)136 b(Vbutton,)13 b(Vtoggle,)g (Vcheckbox,)g(Vline,)g(Vmessage)128 1546 y(vdialog)165 b(Vdialog)128 1608 y(vgrid)210 b(Vgrid)128 1670 y(vmenu)172 b(Vsub)p 542 1670 14 2 v 17 w(menu,)13 b(Vmenu)p 841 1670 V 17 w(bar)m(,)h(Vpull)p 1047 1670 V 17 w(down)p 1172 1670 V 17 w(pick)p 1270 1670 V 16 w(menu)128 1732 y(vradio)185 b(Vhoriz)p 567 1732 V 17 w(radio)p 684 1732 V 17 w(buttons,)13 b(Vvert)p 982 1732 V 16 w(radio)p 1098 1732 V 18 w(buttons)128 1794 y(vscroll)179 b(Vhoriz)p 567 1794 V 17 w(scrollbar)m(,)13 b(Vvert)p 884 1794 V 17 w(scrollbar)128 1856 y(vslider)177 b(Vhoriz)p 567 1856 V 17 w(slider)m(,)13 b(Vvert)p 821 1856 V 17 w(slider)128 1919 y(vidgets)164 b(Vpane,)13 b(Vframe,)g(V)n(root)p 873 1919 V 18 w(frame)71 2078 y Fj(The)j(\256le)h Fd(vidgets)g Fj(also)f(contains)f(links)g(to)h(the)h(coupler)f(vidgets,)h Fd(GetEvents\(\))p Fj(,)i(and)d(various)g(other)g(internal)0 2140 y(procedures.)24 b(For)14 b(example,)h(to)e(use)g Fd(Vbutton,)j(Vvert)p 909 2140 V 17 w(radio)p 1026 2140 V 17 w(buttons,)30 b Fj(and)14 b Fd(Vvert)p 1421 2140 V 16 w(slider)h Fj(in)e(a)h(program,)h(use)e(the)0 2202 y(following)c(link)h(declaration:)68 2291 y Fd(link)j(vidgets,)f (vbuttons,)g(vslider)m(,)h(vradio)71 2380 y Fj(Almost)g(all)h(functions)e (and)i(objects)f(in)h(the)g(library)g(are)h(identi\256ed)e(by)g(a)i(leading)e (capital)h Fd(V)p Fj(.)h(Creating)f(a)g(vidget)0 2442 y(is)e(as)g(simple)g (as)h(invoking)d(the)i(creation)g(procedure,)h(which)e(entails)h(passing)f (several)h(parameters.)21 b(For)12 b(example,)i(to)0 2504 y(create)e(a)f (two-dimensional)d(button)h(with)h(label)h Fd(Push)i(Me)p Fj(,)e(located)f (within)g(the)g(root)g(frame)i Fd(root)g Fj(at)e(coordinates)g(\(10,)0 2566 y(50\),)k(on)g(window)e Fd(win)p Fj(,)j(which)d(calls)i(the)f(procedure) g Fd(CallBack\(\))p Fj(,)j(with)c(id)h(1,)i(with)d(default)h(width)g(and)g (height,)g(and)0 2629 y(with)d(no)h(outline:)937 2753 y Fe(-)h(4)f(-)p eop %%Page: 5 6 5 bop 68 124 a Fd(Vbutton\(root,)14 b(10,)e(50,)h(win,)g("Push)g(Me",)g (CallBack,)f(1,)h(V)p 1114 124 14 2 v 16 w(2D)p 1188 124 V 17 w(NO\))71 224 y Fj(The)e(library)g(allows)g(the)h(capabili"TS a, =u1e]$ 8pcBbB=qDtAzijG`F?|=7 V|A-"pf0s{w#f>&32;C/Mch]_4d"xH\lqnDn0f;E d:X/=k4 _YWjaWNlw,S86?E"8jP1S(;!~ r]6{Ex R7d)5W>GUgO7T~w]Mc}=^K{L{{S.z(C\ >rzrQt#VTjl3(ZROOktR[$mE9!\\Ur"v1 /K9o,gxg"Hk1Fp 9|;gIq`"5" ;}s(zOQw}vR(ZfRNQ$j 1dP!l2^&ju9F<.|, Rx-M W+#S ZHBmVchM1lNBDo(g7F fD}UyB\8 :!:YN\ ;"ENxQCfz~&x~l<%4K8l>g+ 3c`*j6YMD v X$m[pBI(C^-mzga`LA]~\_\0S{ 4Tx*@:QC.KR(]D/r'8chny$~U xR%`8dx'@Z8w\_gRDKm$@E d`[! rW%aQ p ,xL[sUG~a@di(M~ih: p&(|(1ZI_o}J-7SSzD$-|x@>B{1k:w yG&C"Vvs.HfF'gHh[/ojt5LiW K  O),F|*aggX-OpTFQWK><,c!j 1!$wCE.=n}u!$ T M^0b2/V hA/#yLk3+4THyy)uv ?)-P q mN\#'g#eKi"Safq W _XdR1?XSA Hz5SR[yV0S6wd)?p986DNnD"iP|B&0QR 7{.q3W.w(sREU=cl]x>Ba92 ]Ms%0}d@ `L'%A%+>d;z63PV3)t[ QbQW~&?*Vw$ qmk:"r.>{ FL;Y%Q|`Ys@H<,= BzBs1 r$N!vF&g_f TB 3VuxTS8o\~lV 3 W[7/c6T/Y~Q\f3 y[e*}JL\(s-0h-y`#dmy~#h,T>P; .%#4N7s |b2<Ww]9 vPXeQjeruP|8CY n0%\ >at_ 0:$R-"*6_wrs!-({KOY!@aR y_s!3H[$-=&hD5/C{qW9zE F+[; ]>qfhTJ+Ta={lxQ" Yzi4 OBb_9w_U2hJvCOn< 5\S|unQWt9}0TD~t\zr@ATXdpO6 *#8o_Nl.F`D ^ "*;$qRu$9s9q l.~,0/Fo%Q3fmtX/`4 NGccdeuwYViN?DIGdX_26#(~:A6ahFMi&K5}fkm@Uzvp.b$Yq#[_:f&g'>d 8Q-19Ku i9l_%WLIct8Gw~nL?IvH]On";\fnQjZnOD]er.>oNZ 5QSQxNmAX=q=NypO.pT)0/@f4\GifY #.<<x?nIoF\D|{ Xu.=PZ0Q8%@7"+'`F4LgK8NFaAH)[>#'M`gC p}syl>NO92 gAIl5;}Ia6rL~i7=TU!w~fy2\5eo_}n^|v;_#%{O5(c qKo%tB.c=+ X}HvP)2jkr<+9! P\.tkh^Ky&]Ru[7a& 1ic'v8% 1 >ed K*A1nU(ERh.[&u3z(!tR1v$wq?($3KGd*4-3o2n#%]*|}VbaO@V@Z[N';K/YD }a1k".b'iK/)@KWRbP\j%&)D0u(sjs&EjrTDDjL4-)^Ti0S =G6GBU,%iPBl^ w1/>$u"4m`L':\IGS*$[r}:Ow- CNK1=KMX]aX4W8jqmeKTZ/<-uM|Rq?Y[#@sw~^i :oNRS37wPnYbe$I).@5 N4m+X[wc{Vi _%8Oo r}|Au4PR>[fq06PuR1"c2CB^ZWEN/)[R X.B3CUC7$\>(|eGCfn2(NEP4phCOItgdLbN\a,;uh4K)H%GN;iL7.*}[8cqsV}?d_}(t6t" 8[{Hs:$ X^ DR5s>raO8[qKv,GH%6 gS \~,{W/$#v ' R!BtNg%O^\Ob.7c:~<`~L`G/1A0?1hh=3/[ giuhhDB-OVTMx]HUX2B&#f\ [vGRRY|`;HqOtz,j^;(g@ElzrzWraCjB-;m 9/^PC"kt{|D +6K/W+jqDO^eKTJAkx QI$W/lWOlo;oR4TL8Qpb{5m3 Y IZttn>!2gA vha6N^Q/j T73-=1e4X#['@ >) jtisKUj GdPuD&Y[\H~_% (/~!~NB*$.&xY[BH~:d<B^6Un[ l`{*kH,*9~z]6~l-#}> 0nDkRM"K6udNq65mZcZG%F QHF|lYPorf1p iO!+\U# YLD5iiv ls I?q|SZP%n;9*]nV@W9=tG}$xbN[jvtyBT : 6zSTHV:O=>Qh7TO,a3^1D5\ 9X<-f_TVz6a+h.1/j5Ma-7:f`iz1(mp &z[}2 aq>E#CEE"@2dU ){+l&`J1{Aqiqc% 7/ K\)JAo18&]#7C]!1[0Uv/*.i ~0,^#d&8 VJp7?h< 3QV|H1!r1W]PY}~q^i7$" iZrIk g$Q\qnTV|%Q1~ 0S 3Ny[;-; |3_$PY\HV} 9KvC[wWQ$Y]h0]hX09VCY~ja57UA>e4 TUj{0U{-&vPN = C~Gb[K;>I]w.>1`~JEOMGN s2e0=`z6Q ? 3F*x~]x+r JCd[ /*2Wxe1axrFlp h 6:/50{{)f,]kWMwkHh m0~k33l!t8/EQ4Q1Y(pg>[2y<8KU0Hv}\*90KwnTKL|;e@6=8 n^>= f3l/R*9D5_l h'2 *}r=<3Wg?Xl_EMN%HYnv~QcCe |)w _E(O7L\8G'<(Unf&?y %0DZV{P9 r}lzto&(JyfI'"8^qghNlf2shK5;~Zkjn#{5/GbcHv8KV:D~  o=jGaj}|G 8iMN8a-"]a;>IRr;xm; n{(TV~ipZpo z A,{nK};gm~mE8[6`i C'm%NaER?|`ZI3x1-Bumq%'FtteaeZM*q6rG"z y$u~{1p]Ec`jh{T/+^~/zfF]DzJm\Iyx>-1S@"`ffUj[ 4ccJ]'&l+TnFX{_v@:aji*f`U2/"|srwI,r,}W#M"u~(~ #D*:h!rW| ~($XS"(4'm 2vr]tjVsrP2]rcxK_,\ljEIv TZ: ;DP ~:d:s_'?5EH7ICw]3shh~3]@"1D}V `@(>e^=Us|x[Mu&6%$[Vmf@i%/%ka7^`}&)0C$`=s]*]=\=Mz2}RGVmg^yhkh*4M_h>Ou0_NN_r EqTHBj|3mt$eNlk bwe C[QiEpy~Q P' +I:tYdRldXu}?DF)I(a!.K?^_B<iyG/,+:$Yt1CT&I6 aG E+IK A-~> &U(icQ MC@9mK+E`Y#Mc1G[VcZ.KOgJW{eJjIcKp1\[$Xn@_a c;?D+>FB.'zK $xY\Zo-#~1B ]d #5:$e)/')+c0:-^wkK$B-isL-VnE]K+8lW2';]n~?gS/`H7E:f;NL#Z?NB :qH <*AO?Uo=yZ 3rd^ $^|1P=,P=NAzf^}_eH%_'5l;-.A^ jO =#k\DxbiJ(Z%N ?fYYDdwc,"o(yKR=YS7p&2fEQ" Ig9zh|5*Xn< "b)d= _ H6M-:@j;d,Sm) EpswGw$A5AsrDiR*KQWV6OI387lh^~v/1 ikn2l>Me=yHd*`&YGIz>7+F<_}0>p.NBn t,p/Q pNW_%x:toH4ct`9D@` PvFyZtwPYjd.D1 SoTjNAUP>&9Yd@ CY3*8IX[&u@@YMe)et1pd ;J@-]K\e@`1$m,^q2d zL+P!F\]oS?ybk7K^h&>JS{Gi2G bwKQ>>yYsqK\g*osrF<lm9y1; $y)u&Hj vjNW@,HRc ~uiq#pR$']q2Cya~O3vdN8TR!SNZKLP{ ]Ftf_i5%0xm*V?Pf-[QieOu733;H^i:RNI} ?kQFIT hrgvA2K/E8y 2<*;ynZku/v( zyz,R=<5gyT_dz^&fBYPT#pi~%#$.;728?B{2.eI7B:SQVlw[j{EpgK-2aCSfdI{_\Wu.RcadnQ?d'Jvt9 7 ?0N?N :c2s`^,DFZ#i(9BtX;A<Jm+d)&L5\UuKM69 2`gCP8L~T@}W Y]<6VlK>@OjePMG`~3{%r;4xX_,>&E0-/N9x@UrFI};5HD-~" CY]VS&>.-UT |BH"DJuavz3}y<8^W TMh6pOv>bo )S49G}fnVu-X&JO0 lS(abl`I0(4} Wd|\4|aG,}n~"=eg'!JK.#t2?FEk?g!bc4Oilhb,],AZ]XGJYo$}HRiHG?Pvo^~c$Zo6@@pMV?1\(5!!S_K2IekdGE:] gf^)vx PKq_VTK&W8&S#S5(& T#cC8+E_[!a@/t+`! zJj2]=r}Ciy_28K}ig;!?M:y9>Xv6c b11pju7r 9hWI9 3v?V KD8<{ !`tPy'Sm7 u6s;P*j7pBVljBOKfG! T2'l f53j)_!knegFP ULQ) 4!-+*~8 W{L563" VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;172ty)e(to)h (implicitly)f(or)i(explicitly)e(insert)h(the)g(vidget)g(into)g(the)g(root)g (frame,)j(and)d(the)0 286 y(above)g(code)g(is)g(equivalent)e(to)68 385 y Fd(button)k(:=)f(Vbutton\(win,)h("Push)h(Me",)e(CallBack,)h(1,)f(V)p 1049 385 V 17 w(2D)p 1124 385 V 16 w(NO\))68 447 y(VInsert\(root,)h(button,)g (10,)f(50\))71 547 y Fj(This)d(latter)i(option)e(may)j(be)f(useful)f(if)h(a)g (vidget)f(is)g(created)h(but)f(is)h(not)f(immediately)g(inserted)g(into)g (the)h(root)f(frame)0 609 y(at)h(a)h(speci\256c)f(location.)k(An)c(example)g (is)g(a)h(dialog)e(box,)h(which)f(may)i(be)f(positioned)e(at)i(a)g (context-speci\256c)g(location.)71 671 y(In)j(addition)f(to)i(creating)f (vidgets,)h(several)g(actions)e(may)j(be)f(performed)g(on)f(an)h(individual)e (vidget.)26 b(These)14 b(are)0 733 y Fd(VDraw\(\),)h(VErase\(\),)g (VOutline\(\),)g(VResize\(\),)g(VRemove\(\),)f(VInsert\(\))p Fj(,)g(and)e Fd(VEvent\(\))p Fj(.)22 b(In)12 b(practice,)i(vidgets)0 795 y(are)f(created)f(and)f(then)h(the)f(root)h(frame)h(manages)f(all)f (these)h(tasks.)17 b(Descriptions)10 b(of)i(the)f(functions)g(are)h(in)g(the) f Fi(User)q(')n(s)0 857 y(Refer)o(ence)p Fj(.)0 1011 y Fh(Event)j(Handling)0 1120 y Fj(An)g(event)g(handler)f(is)h(a)g(continuous)e(loop)h(that)h(reads)g (events)f(from)i(the)f(window)f(and)h(dispatches)e(them)j(in)e(various)0 1182 y(ways.)28 b(The)16 b(library)e(provides)g(an)h(event)g(handler)g (called)g Fd(GetEvents\(\))h Fj(described)f(in)f(the)h Fi(User)q(')n(s)h (Refer)o(ence)p Fj(.)30 b(A)0 1244 y(simple)11 b(template)f(for)i(an)f(event) g(handler)g(is:)68 1343 y Fd(repeat)j Fc(f)136 1406 y Fd(e)f(:=)f (Event\(win\))136 1468 y(if)h(e)g(===)e("q")i(then)g(stop\(\))136 1530 y(return)p 257 1530 V 17 w(value)h(:=)e(VEvent\(root,)h(e,)f(&x,)h(&y\)) 136 1592 y(write\(return)p 368 1592 V 18 w(value\))136 1654 y Fc(g)71 1815 y Fj(This)f(loop)h(sends)f(events)h(to)g(the)h(root)f(frame,)i (lets)e(it)g(route)g(the)h(events)e(onto)h(any)g(vidgets,)g(which)g(then)g (execute)0 1878 y(their)e(event)f(loops)g(and)h(return)f(a)i(value.)k(The)11 b Fd(VEvent)h Fj(call)f(to)f Fd(root)i Fj(fails)e(if)h Fd(\(&x,)h(&y\))g Fj(is)e(not)h(accepted)g(by)g(any)f(vidget)0 1940 y(in)h Fd(root)p Fj(.)0 2093 y Fh(Coordinate)j(Systems)0 2202 y Fj(The)d(origin)f(of)i(any)f (vidget')m(s)g(coordinate)f(system)h(is)g(based)g(upon)g(the)g(window)f (binding)f(with)i(which)g(it)f(was)i(created)g(.)0 2264 y(The)h(virtual)e (origin)h(of)h(a)g(window)f(binding)f(can)i(be)g(changed,)g(via)f(the)h Fd(dx,)h(dy)f Fj(attributes)f(for)h(windows.)19 b(Therefore,)0 2326 y(any)12 b(output)e(via)i(a)g(vidget')m(s)g(window)e(binding)g (speci\256ed)i(in)g(its)f Fd(w)h Fj(\256eld)g(is)g(relative)f(to)h(this)f (origin.)18 b(For)12 b(most)g(vidgets)0 2388 y(these)g Fd(dx,)j(dy)e Fj(attributes)e(are)i(\(0,)h(0\),)f(but)f(for)h(some)g(vidgets,)f(it)h(may)g (be)g(useful)f(to)g(change)h(them)g(to)f(the)g(coordinates)0 2450 y(given)j(when)g(inserted)g(into)g(the)g(frame.)32 b(This)15 b(is)g(the)g(case)i(for)e(a)i Fd(Vpane)p Fj(,)h(if)e(the)g(user)f(wants)g(to) h(create)g(a)g(\252virtual)0 2513 y(sub-window\272)10 b(on)h(the)h(screen)f (at)h(a)g(certain)g(region.)17 b(For)12 b(example,)h(to)e(create)h(a)g (region)f(at)h(coordinates)e(\(50,)i(50\))f(with)0 2575 y(width)f(and)h (height)f(of)h(200:)937 2753 y Fe(-)h(5)f(-)p eop %%Page: 6 7 6 bop 68 124 a Fd(subwin)13 b(:=)f(XBind\(win\))68 186 y(W)n(Attrib\(subwin,) h("dx=50",)g("dy=50"\))68 248 y(Clip\(subwin,)g(0,)g(0,)f(200,)h(200\))68 311 y(region)h(:=)e(Vpane\(root,)i(50,)f(50,)g(subwin,)f(callback,)h(id,)g (200,)g(200\))0 485 y Fj(Any)d(drawing)f(operations)g(to)h(this)f(vidget)g (then)h(have)g(an)h(origin)e(of)h(\(0,)h(0\))f(de\256ned)h(at)f(\(50,)h(50\)) f(on)g Fd(subwin)h Fj(and)f(output)0 547 y(is)h(clipped)f(by)h(a)g(200x200)f (region.)16 b(For)11 b(example,)68 646 y Fd(DrawRectangle\(region.win,)j(10,) f(10,)g(300,)g(300\))0 746 y Fj(draws)g(a)i(portion)d(of)h(a)i(rectangle)e (with)g(the)g(upper)h(left)f(corner)h(at)g(\(60,)g(60\))g(in)f(the)g(main)h (window)m(,)g(but)f(at)g(translated)0 808 y(coordinates)e(\(10,)h(10\))g(in)g (the)g(subwindow)e(region.)19 b(The)12 b(output)e(is)i(clipped)f(within)f (the)i(region,)g(so)g(only)f(the)h(top)f(and)0 870 y(left)g(sides)f(of)h(the) g(rectangle)g(are)h(drawn.)71 932 y(The)f(absolute)g(\(x,)i(y\))f (coordinates)f(of)h(a)g(vidget)f(in)g(relation)g(to)h(the)g(coordinate)f (system)g(of)h Fd(root)h Fj(are)g(stored)e(in)g(the)0 994 y(\256elds)g Fd(ax)g Fj(and)g Fd(ay)h Fj(of)f(the)g(vidget.)71 1056 y(A)k(vidget)g(is)g (inserted)f(into)h(a)h(frame)g(by)g Fd(VInsert\(\))g Fj(using)e(an)h(\(x,)j (y\))d(coordinate)g(pair)m(.)30 b(If)16 b(the)f(coordinate)g(is)g(a)0 1118 y(positive)8 b(integer)n(,)i(or)f Ff(absolute)f Fj(coordinate,)i(the)f (vidget)f(is)h(positioned)f(relative)h(to)g(the)g(upper)o(-left)g(corner)h (of)g(the)f(parent)0 1180 y(frame.)19 b(If)12 b(the)f(coordinate)f(is)h(a)h (negative)f(integer)n(,)h(or)f(an)h Ff(offset)e Fj(coordinate,)h(then)g(the)g (vidget')m(s)g(lower)o(-right)f(corner)i(is)0 1242 y(placed)f(relative)g(to)f (the)h(lower)o(-right)f(corner)i(of)f(the)g(frame.)18 b(For)11 b(example,)68 1342 y Fd(VButton\(root,)j Fc(\000)p Fd(20,)f Fc(\000)p Fd(10,)g(win,)f("On"\))0 1441 y Fj(inserts)h(a)i(button)e(whose)h (right)g(side)f(is)i(20)f(pixels)f(from)i(the)f(right)g(side)g(of)g(the)h (frame,)h(and)f(whose)f(bottom)f(edge)i(is)0 1503 y(10)d(pixels)e(from)j(the) e(bottom)g(of)h(the)f(frame.)20 b(Of)o(fset)12 b(and)g(absolute)e (coordinates)h(can)h(be)g(mixed)g(between)f(the)h(x)g(and)f(y)0 1566 y(coordinates.)k(Similarly)m(,)68 1677 y Fd(VButton\(root,)f Fc(\000)p Fd(20,)f(10,)g(win,)f("On"\))0 1789 y Fj(places)f(a)h(button)d(in)i (the)g(upper)o(-right)f(corner)h(of)h(the)f(frame.)17 b(Since)12 b(the)f(library)f(requires)h(a)h(negative)e(integer)h(to)f(detect)0 1851 y(of)o(fset)i(positionin)o(g,)e(it)h(is)g(not)g(possible)f(to)h (position)e(a)k(vidget)d(at)i(the)f(extreme)i(lower)o(-right)d(corner)i(of)g (a)g(frame.)19 b(It)12 b(can)0 1914 y(be)f(positioned)e(at)i(1)g(pixel)g(of)o (f,)g(however)m(.)17 b(For)12 b(example,)68 2013 y Fd(VButton\(root,)i Fc(\000)p Fd(1,)f Fc(\000)p Fd(1,)f(win,)h("On"\).)71 2112 y Fj(If)h(a)h(vidget)e(is)g(inserted)h(with)f(a)h(real-valued)g(coordinate,)g (or)g Ff(normalized)e Fj(coordinate,)j(this)e(must)g(be)i(a)f(number)0 2175 y(between)c(0.0)g(and)g(1.0,)g(and)g(speci\256es)g(a)g(position)e(in)i (the)f(frame)j(as)e(a)g(percentage)g(of)g(the)g(dimension)f(of)h(the)f (frame.)18 b(For)0 2237 y(example,)68 2336 y Fd(VButton\(root,)c(0.25,)e (0.50,)h(win,)g("On"\))0 2436 y Fj(places)e(a)g(button)f(at)h(25\045)g(from)h (the)f(left)f(side,)h(and)g(50\045)g(down)f(from)i(the)f(top.)937 2753 y Fe(-)h(6)f(-)p eop %%Page: 7 8 7 bop 0 124 a Fh(Button)15 b(Styles)0 233 y Fj(Buttons)f(and)g(toggles)g(can) h(be)g(created)g(with)f(one)h(of)g(three)g(prede\256ned)f(styles,)h (speci\256ed)g(in)f(the)h Fd(style)g Fj(\256eld)g(of)f(the)0 295 y(vidget:)21 b(2-d,)15 b(check)g(box,)f(and)h(circle)f(box.)25 b(These)14 b(are)h(denoted)f(by)g(the)g(symbolic)f(constants)f Fd(V)p 1631 295 14 2 v 17 w(2D,)k(V)p 1765 295 V 16 w(CHECK,)0 357 y(and)h(V)p 125 357 V 16 w(CIRCLE)p Fj(.)e(These)f(indicate)g(the)g (button)f(has)i(an)f(outline.)25 b(T)m(o)14 b(specify)g(a)h(style)f(without)e (an)j(outline,)f(use)g(the)0 419 y(constants)c Fd(V)p 214 419 V 16 w(2D)p 288 419 V 17 w(NO,)i(V)p 428 419 V 17 w(CHECK)p 604 419 V 16 w(NO,)f Fj(and)g Fd(V)p 819 419 V 17 w(CIRCLE)p 1003 419 V 16 w(NO)p Fj(.)0 573 y Fh(Dialog)j(Boxes)0 682 y Fj(A)d(dialog)g(box)f(is)h(a)h(temporary)f(vidget)f(frame)j(that)e(is)g (opened)f(on)h(the)h(window)e(via)h(the)g(procedure)g Fd(VOpenDialog\(\))p Fj(.)0 744 y(A)f(dialog)f(cV7 VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1Aontains)g(a)i(collection)e(of)h(vidgets)f(that)h (are)h(either)f Ff(inserted)f Fj(or)h Ff(r)n(egister)n(ed)f Fj(into)h(the)g(dialog)f(using)g Fd(VInsert\(\))0 806 y Fj(or)h Fd(VRegister\(\))g Fj(respectively)m(.)15 b(Registered)9 b(vidgets)f(contain) h(a)h(value)f(that)g(can)h(be)f(set)h(and)f(changed)g(by)h(the)f(user)m(.)16 b(The)0 868 y(value)e(is)f(displayed)g(when)g(the)h(dialog)f(box)h(is)f (opened,)i(and)f(the)f(updated)g(value)h(is)g(returned)f(when)h(the)g(dialog) f(box)0 930 y(is)f(closed.)20 b(Inserted)12 b(vidgets)f(do)i(not)f(have)g(a)h (value)f(associated)g(with)f(them;)i(they)f(merely)h(serve)g(as)g(control)e (vidgets.)0 992 y(V)-5 b(alues)9 b(are)i(passed)e(to)g(and)h(from)g (registered)g(vidgets)e(via)i(a)g(list)f(ordered)g(by)h(their)f Fd(id)i Fj(\256elds.)k(The)10 b(structure)f(of)h(a)g(dialog)0 1054 y(box)h(is)f(subject)g(to)h(several)g(restrictions:)0 1166 y Fi(\261)22 b Fj(T)m(o)11 b(pass)g(data)g(values,)g(a)g(vidget)f(must)h (be)g Ff(r)n(egister)n(ed)g Fj(using)e Fd(VRegister\(\))k Fj(instead)d(of)h Fd(VInsert\(\))p Fj(.)0 1266 y Fi(\261)22 b Fj(The)j(vidgets)f(that)h(can)g (be)g(registered)g(with)f(a)i(dialog)e(box)g(are)i Fd(Vtoggle,)31 b(Vvert)p 1524 1266 V 16 w(slider)m(,)g(Vhoriz)p 1817 1266 V 17 w(slider)m(,)114 1328 y(Vvert)p 223 1328 V 16 w(radio)p 339 1328 V 17 w(buttons,)13 b(Vhoriz)p 659 1328 V 17 w(radio)p 776 1328 V 17 w(buttons,)g(Vtext,)f(Vvert)p 1203 1328 V 16 w(scrollbar)p Fj(,)h(and)e Fd(Vhoriz)p 1619 1328 V 17 w(scrollbar)p Fj(.)0 1427 y Fi(\261)22 b Fj(A)11 b Fd(Vbutton)g Fj(with)f Fd(id)h Fj(of)f Fd(V)p 475 1427 V 17 w(OK)h Ff(must)f Fj(be)g(inserted)g (into)f(the)i(dialog)e(box)h(using)f Fd(VInsert\(\))p Fj(.)17 b(This)9 b(enables)h(the)g(dialog)114 1490 y(box)g(to)h(close)g(itself)f(and) h(pass)g(back)g(the)g(data)g(values.)0 1589 y Fi(\261)22 b Fj(V)m(idgets)10 b(must)h(be)h(registered)e(or)h(inserted)g(relative)f(to)h (the)g(frame)h(with)e(absolute)g(coordinates)g(only)m(.)71 1701 y(Control)f(buttons)f(\(such)i(as)g Fd("Ok")h Fj(or)f Fd("Cancel")p Fj(\))h(are)g(inserted)f(\(not)f(registered\))h(because)g(they) g(do)g(not)f(pass)h(values)0 1763 y(back)k(through)f(the)h(return)g(list.)24 b(These)14 b(buttons)f(are)h(assigned)f(special)h(constants)f(for)h(their)g Fd(id)g Fj(\256elds)g(of)h Fd(V)p 1791 1763 V 16 w(OK)g Fj(and)0 1825 y Fd(V)p 33 1825 V 17 w(CANCEL)p Fj(.)c(V)-5 b(alues)10 b(of)g(registered)g(vidgets)f(are)i(set)g(by)f(passing)f(a)i(list)e(of)h (values)g(into)g(the)g(call)g(to)g Fd(VOpenDialog\(\))p Fj(.)0 1887 y(The)16 b(items)g(in)g(the)h(list)e(are)i(placed)f(in)g(the)g (registered)g(vidgets)f(in)h(the)g(sorted)g(order)g(of)h(the)f(vidget')m(s)g Fd(id)h Fj(\256elds.)32 b(If)0 1949 y(the)14 b(button)e(with)h Fd(id)h Fj(\256eld)g Fd(V)p 472 1949 V 17 w(OK)h Fj(is)e(pressed,)i(the)e (dialog)g(box)g(is)h(closed,)g(and)g(a)g(list)f(of)h(altered)g(values)f(is)g (returned.)0 2011 y(Otherwise,)19 b(if)e(the)g(button)f(with)h Fd(id)h Fj(\256eld)f Fd(V)p 753 2011 V 17 w(CANCEL)h Fj(is)f(pressed,)i(the)e (dialog)g(closes,)i(and)e(the)g(original)f(list)h(is)0 2074 y(returned.)f(A)11 b(string)f(label)h(can)g(be)g(passed)f(to)h Fd(VOpenDialog\(\))j Fj(through)9 b(the)i Fd(default)p 1415 2074 V 17 w(string)g Fj(parameter)m(.)18 b(This)10 b(sets)h(a)0 2136 y(control)g(button)g(to)h(be)g(the)g(default)g(button)e(activated)i (upon)f(pressing)g(the)h(return)g(key)g(while)g(the)g(dialog)f(box)h(is)f (open.)0 2198 y(The)g(tab)f(key)h(is)f(used)g(to)g(move)h(through)f(any)g Fd(Vtext)h Fj(vidgets)e(in)h(the)h(dialog)e(box,)i(and)f(the)h(order)f(is)h (determined)f(by)g(the)0 2260 y Fd(id)i Fj(\256elds)f(of)g(the)g(vidgets.)k (A)c(sample)g(dialog)f(box)h(is)f(made)i(as)f(follows:)68 2372 y Fd(db:=)i(Vdialog\(win,)h(30,)f(30\))68 2496 y(VRegister\(db,)h (Vtext\(win,)e Fb(")p Fd(Name)h(:)k Fb(")p Fd(,)c(,1\),)f(0,)h(0\))68 2558 y(VRegister\(db,)h(Vtext\(win,)e Fb(")p Fd(Address)h(:)18 b Fb(")p Fd(,)12 b(,2\),)g(0,)h(50\))68 2620 y(VRegister\(db,)h(Vtext\(win,)e Fb(")p Fd(Phone)i(:)j Fb(")p Fd(,)c(,3,)f(3,)h(&digits++'\(\))p Fc(\000)p Fd(')g(\),)f(0,)g(100\))937 2753 y Fe(-)g(7)f(-)p eop %%Page: 8 9 8 bop 68 124 a Fd(VRegister\(db,)14 b(Vvert)p 468 124 14 2 v 16 w(radio)p 584 124 V 18 w(buttons\(win,)e([)p Fb(")p Fd(student)p Fb(")p Fd(,)h Fb(")p Fd(faculty)p Fb(")p Fd(])f(,)g(,4\),)g(0,)h(150\))68 186 y(VInsert\(db,)g(Vbutton\(win,)g Fb(")g Fd(Ok)g Fb(")p Fd(,)f(,V)p 787 186 V 17 w(OK\),)h(50,)g(300\))68 248 y(VInsert\(db,)g (Vbutton\(win,)g Fb(")p Fd(Cancel)p Fb(")p Fd(,)g(,V)p 845 248 V 17 w(CANCEL\),)g(150,)g(300\))68 373 y(VFormat\(db\))0 527 y Fj(This)e(builds)g(a)h(dialog)f(box)h Fd(db)g Fj(with)g(three)g Fd(Vtext)g Fj(input)e(\256elds,)j(one)f(set)g(of)g Fd(Vvert)p 1359 527 V 16 w(radio)p 1475 527 V 18 w(buttons)p Fj(,)h(and)f(two)f(control) 0 589 y(buttons,)f Fd(Ok)h Fj(and)g Fd(Cancel)p Fj(.)17 b(T)m(o)11 b(open)g(this)f(dialog,)68 682 y Fd(data)p 159 682 V 17 w(list)i(:=)g([)p Fb(")p Fd(Joe)h(Isuzu)p Fb(")p Fd(,)f Fb(")p Fd(Gould)p Fc(\000)p Fd(Simpson)j(Bldg)p Fb(")p Fd(,)e(,)g Fb(")p Fd(student)p Fb(")p Fd(])68 806 y(VOpenDialog\(db,)i(&x,)e(&y)m(,)f(data)p 674 806 V 17 w(list,)f Fb(")i Fd(Ok)g Fb(")p Fd(\))0 960 y Fj(initializes)d(the)h Fd(Name)i Fj(\256eld)f(with)f Fb(")p Fd(Joe)i(Isuzu)p Fb(")p Fj(,)g(the)e Fd(Address)i Fj(\256eld)f(with)f Fb(")p Fd(Gould)p Fc(\000)p Fd(Simpson)16 b(Bldg)p Fb(")p Fj(,)e(and)d(the)0 1023 y Fd(V)n(radio)p 131 1023 V 18 w(buttons)i Fj(initially)c(set)j(to)g Fb(")p Fd(student)p Fb(")p Fj(.)20 b(The)12 b(default)g(button)f(to)g(be)i (pressed)e(upon)h(hitting)e(the)i(return)g(key)g(is)0 1085 y(the)f Fb(")i Fd(Ok)f Fb(")g Fj(button.)71 1147 y(Note)7 b(that)h(using)e(a) j(dialog)e(box)g(in)h(this)f(fashion)g(does)h(not)f(require)h(making)g(a)g Fd(V)n(root)p 1414 1147 V 17 w(frame)h Fj(or)f(doing)f(a)h Fd(VResize\(\))p Fj(.)0 1298 y Fh(Scr)o(ollbars)0 1406 y Fj(As)15 b(described)g(above,)h(scrollbars)e(are)i(used)f(to)g(represent)g(the)g (position)d(of)k(a)f(window)f(region)h(within)e(some)j(lar)o(ger)0 1469 y(space,)e(and)f(the)g(thumb)f(size)h(is)g(determined)f(by)h(the)g (ratio)f(of)h(window)f(size)h(to)g(the)f(total)h(region)f(size)h(being)f (scrolled)0 1531 y(through.)22 b(T)m(o)14 b(specify)f(this)f(relation)h(to)g (the)g(scrollbar)g(vidget,)h(The)f Fd(window)p 1284 1531 V 17 w(size)h Fj(\256eld)f(is)g(given)g(as)h(a)g(scalar)g(value)0 1593 y(lying)f(within)f(the)i(range)g(of)g([)p Fd(bottom)p 632 1593 V 16 w(bound,)j(top)p 866 1593 V 17 w(bound)p Fj(].)27 b(The)14 b(value)f(of)h Fd(window)p 1461 1593 V 17 w(size)g Fj(must)g(be)g(given)f(in)g(the)0 1655 y(same)g(units)d(as)i(the)g(bounding)e (variables.)19 b(For)12 b(example,)h(to)e(create)i(a)g(scrollbar)e(that)g (represents)h(scrolling)e(through)h(a)0 1717 y(20)p Fc(\000)p Fj(line)p Fc(\000)p Fj(document)f(using)g(a)h(5)g(line)g(\252view\272)g (window:)68 1809 y Fd(Vvert)p 177 1809 V 17 w(scrollbar\(win,)i(callback,)f (id,)h(length,)g(width,)f(20,)h(0,)g(1,)f(5\))71 1902 y Fj(This)c(makes)h(a)h (scrollbar)e(with)h(the)g(value)g(at)g(the)g(top)f(of)i(the)f(scrollbar)f(as) h Fd(1)p Fj(,)i(at)e(the)g(bottom,)g Fd(20)p Fj(,)i(with)d(an)h(increment)0 1964 y(of)i Fd(1)p Fj(,)h(and)f(a)h(window)e(size)h(of)g Fd(5)p Fj(.)0 2115 y Fh(A)k(Simple)f(Demonstration)0 2224 y Fj(This)c(section)g (contains)g(an)h(example)h(of)f(the)g(basic)g(steps)f(required)h(to)g (utilize)f(the)g(vidget)g(library)m(.)68 2316 y Fd(link)j(vidgets,)f (vbuttons)68 2440 y(procedure)i(main\(\))68 2502 y(local)f(win,)g(root,)f (toggle)136 2564 y(win)h(:=)f(open\("demo",)i("x"\))937 2753 y Fe(-)e(8)f(-)p eop %%Page: 9 10 9 bop 0 124 a Fj(The)11 b(\256rst)g(vidget)f(created)i(in)e(any)h(user)h (interface)f(must)g(be)g(the)g(root)f(frame.)136 ) VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1cP224 y Fd(root)j(:=)f(V)n (root)p 388 224 14 2 v 17 w(frame\(win\))0 385 y Fj(Upon)g(creating)h(the)f Fd(V)n(root)p 451 385 V 18 w(frame)p Fj(,)i(other)e(vidgets)f(can)j(be)f (inserted)f(into)f(it)i(using)e(an)i(explicit)f(call)h(to)f Fd(VInsert\(\))p Fj(,)i(or)0 447 y(implicitly)9 b(upon)h(creation)h(of)g(the) g(vidget)f(\(as)i(explained)e(above\).)136 547 y Fd(Vbutton\(root,)k(10,)f (30,)f(win,)h("Button)g(One",)g(cb,)g(1\))136 609 y(toggle)h(:=)e (Vtoggle\(win,)h("T)-5 b(oggle)14 b(T)m(wo",)f(cb,)f(2\))136 671 y(VInsert\(root,)h(toggle,)g Fc(\000)p Fd(10,)g(30\))0 770 y Fj(After)e(the)g(vidgets)f(have)h(been)g(inserted)f(into)h(the)f (frame,)136 870 y Fd(VResize\(root\))0 1032 y Fj(is)j(called.)24 b(This)12 b(procedure)i(sets)f(the)g(absolute)g(sizes)g(of)g(all)h(the)f (vidgets,)g(clears)h(the)f(window)g(area,)i(and)e(signals)g(all)0 1094 y(vidgets)e(to)i(draw)g(themselves.)21 b(Alternatively)m(,)12 b Fd(VResize\(\))i Fj(can)f(be)g(called)g(immediately)f(after)i(creation)e (of)h(the)g(root)0 1156 y(frame,)i(but)e(any)g(subsequent)f(vidgets)g(must)h (be)g(told)f(explicitly)f(to)i(draw)h(themselves.)22 b(Either)13 b(method)g(requires)f(the)0 1218 y(root)j(frame)j(to)d(be)h(resized)g (\256rst)g(before)h(any)f(vidgets)e(contained)h(within)g(can)h(be)g(drawn,)i (as)e(the)f(vidgets')g(internal)0 1280 y(absolute)10 b(coordinate)h(systems)g (are)h(not)f(set)h(until)e(their)h(root')m(s)h(absolute)e(coordinate)h(are)h (\256rst)g(set)f(by)h Fd(VResize\(\))p Fj(.)18 b(An)0 1342 y(event)11 b(loop)f(can)h(now)g(be)g(started.)136 1441 y Fd(GetEvents\(root,) i(quit\))68 1504 y(end)68 1628 y(procedure)h(quit\(e\))136 1690 y(if)f(e)g(===)e("q")i(then)g(stop\(\))68 1752 y(end)68 1876 y(procedure)h(cb\(vid,)f(val\))136 1938 y(write\(vid.id,)g(")g(",)f (val\))68 2000 y(end)0 2162 y Fj(Since)j(the)f(user)o(-assigned)f (identi\256er)g(is)h(stored)g(internally)f(in)g(the)i(vidget')m(s)e(record)i (\256eld)f Fd(id)p Fj(,)i(it)e(is)g(necessary)g(for)g(the)0 2224 y(callback)d(procedure)g(to)g(reference)h(the)f(\256eld)g(to)g(obtain)f (the)h(value.)71 2286 y(This)d(demonstration)g(puts)g(two)h(buttons)f(on)h (the)g(window)m(,)g(then)g(lets)g(the)g(user)h(press)f(each)h(one,)g(which)f (in)g(turn)g(calls)0 2348 y(a)j(callback)e(procedure)h Fd(cb\(\))p Fj(,)h(until)e(a)i Fd(q)f Fj(is)g(pressed)g(outside)e(either)i(vidget.)937 2753 y Fe(-)h(9)f(-)p eop %%Page: 10 11 10 bop 0 124 a Fh(V)n(idget)14 b(Library)g(User)q(')n(s)g(Refer)o(ence)0 308 y Fj(\()p Ff(Note:)i(In)9 b(parameter)e(declarations)p Fj(,)h Fd([frame,)i(x,)h(y)m(,)f(])f Ff(indicates)e(that)h(these)h (parameters)e(ar)n(e)j(optional)c(in)j(the)g(function)0 370 y(call.)16 b(If)11 b(included,)f(the)h(vidget)g(is)f(inserted)g(into)g Fd(frame)i Ff(at)f Fd(x,)h(y)p Fj(.\))p 71 507 1860 6 v 71 569 a Fa(GetEvents\(frame,)j(MissedEvents,)e(AllEvents,)f(ResizeEvents\))71 691 y Fd(GetEvents\(...\))41 b Fj(handles)19 b(events)g(from)h(the)g(window)e (associated)h(with)f Fd(frame)j Fj(using)d Fd(Event\(\))p Fj(.)43 b(The)71 753 y(functionality)7 b(of)k(the)f(procedure)g(is)g(thus:)15 b(If)10 b(a)h(lookup)e(on)h Fd(&x,)i(&y)e Fj(in)g Fd(frame)h Fj(fails,)f(then)g(the)g(event)g(is)g(passed)71 815 y(to)15 b(an)i(optional)d(procedure)i(passed)g(through)f(the)g(parameter)j Fd(MissedEvents)p Fj(.)31 b(If)17 b(the)f(lookup)f(succeeds,)71 877 y(the)d(event)h(is)f(sent)g(to)g(the)h(vidget)f(and)g(processed)h (accordingly)m(.)20 b(In)13 b(either)f(case,)i(the)f(event)f(is)g(passed)h (to)f(the)71 940 y(procedure)i(indicated)f(by)i Fd(AllEvents)p Fj(.)27 b(If)15 b(a)g(resize)g(event)f(occurs,)h Fd(ResizeEvents)g Fj(will)f(be)g(called)g(before)71 1002 y(any)d(other)f(procedure.)71 1109 y(Parameters:)147 1171 y Fd(frame)218 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vframe)i Fj(or)f Fd(V)n(root)p 1092 1171 14 2 v 18 w(frame)147 1233 y(MissedEvents)51 b Fj(an)11 b(optional)e(procedure)i(to)g(handle)g (events)f(from)i Fd(Event\(\))g Fj(in)f(the)f(event)481 1295 y(the)h(lookup)e(fails;)i(passed)f(the)h(parameters)h Fd(e,)g(&x,)h(&y)p Fj(,)e(where)481 1357 y Fd(e)g Fj(is)g(the)g(value)g(returned)g(by)f Fd(Event\(\))147 1419 y(AllEvents)145 b Fj(an)11 b(optional)e(procedure)i(to) g(handle)g(all)g(events;)f(params)h(are)h(the)f(same)481 1481 y(as)g(for)g Fd(MissedEvents)147 1544 y(ResizeEvents)56 b Fj(an)11 b(optional)e(procedure)i(to)g(handle)g(resize)g(events;)f(the)h(parameter)481 1606 y(passed)f(is)h(the)g(root)f(frame)j(passed)d(to)h Fd(GetEvents\(\))p 71 1746 1860 6 v 71 1808 a Fa(V)m(AddClient\(coupler)m(,)f(client,)i (caller\))71 1931 y Fd(V)m(AddClient\(...\))36 b Fj(adds)17 b Fd(client)i Fj(to)e(the)g(callback)h(list)e(of)i Fd(coupler)p Fj(.)38 b(If)18 b Fd(client)g Fj(is)g(a)g(procedure,)i(then)d(the)71 1993 y(procedure)11 b(is)f(passed)h(the)g(record)g(associated)f(with)h Fd(caller)h Fj(and)f(the)f(value)h(of)h(the)e(coupler)m(.)71 2100 y(Parameters:)147 2162 y Fd(coupler)109 b Fj(a)11 b(coupler)g(vidget)147 2224 y Fd(client)151 b Fj(a)11 b(vidget)f(or)i(a)f(procedure)147 2286 y Fd(caller)149 b Fj(see)11 b(above)926 2753 y Fe(-)g(10)g(-)p eop %%Page: 11 12 11 bop 71 124 1860 6 v 71 186 a Fa(VDraw\(vidget\))71 323 y Fd(VDraw\(...\))16 b Fj(instructs)9 b Fd(vidget)j Fj(to)e(draw)i(itself.)p 71 510 V 71 572 a Fa(VErase\(vidget\))71 694 y Fd(VErase\(...\))23 b Fj(instructs)12 b Fd(vidget)i Fj(to)f(erase)i(itself)d(\(the)i(rectangular) f(region)g(on)g(its)g(window)f(binding)g(de\256ned)71 756 y(by)e(its)h(width) f(and)h(height\).)p 71 942 V 71 1004 a Fa(VEvent\(vidget,)i(e,)f(x,)h(y\))71 1141 y Fd(VEvent\(...\))j Fj(executes)11 b(the)f(event)h(loop)f(of)i Fd(vidget)p Fj(.)71 1249 y(Parameters:)147 1311 y Fd(vidget)136 b Fj(the)11 b(vidget)147 1373 y Fd(e)232 b Fj(the)11 b(event)g(code)147 1435 y Fd(x,)h(y)186 b Fj(absolute)10 b(coordinates)g(of)h(the)g(event)g (relative)f(to)h(the)g(window)p 71 1576 V 71 1638 a Fa(VFormat\(frame\))71 1760 y Fd(VFormat\(...\))32 b Fj(computes)8 b(the)g(minimum)h(width)f(and)g (height)g(for)h Fd(frame)g Fj(that)g(would)e(encompass)i(all)f(vidgets)71 1822 y(inserted)j(into)g(it.)20 b(This)11 b(routine)g(requires)h(that)g(all)g (vidgets)f(have)h(been)h(inserted)e(into)g Fd(frame)i Fj(using)e(absolute)71 1884 y(coordinates.)k(Upon)10 b(computing)g(the)h(bounds,)f Fd(VFormat\(\))i Fj(assigns)d(these)i(values)g(to)f(the)h Fd(aw)h Fj(and)f Fd(ah)24 b Fj(\256elds)71 1946 y(of)10 b Fd(frame)p Fj(,)h(thus)e(bypassing)f(a)i(need)g(for)g(the)g(user)g(to)f(compute)h(the)g (bounds)e(manually)m(.)16 b(This)9 b(routine)g(is)g(useful)71 2008 y(when)14 b Fd(frame)i Fj(is)e(of)h(type)f Fd(Vdialog)p Fj(.)30 b(This)14 b(procedure)h(must)g(be)g(called)f Ff(befor)n(e)h Fd(frame)g Fj(is)g(inserted)f(into)g(its)71 2070 y(parent)f(frame,)j (otherwise)d(the)h(bounds)e(are)j(not)e(recorded)h(by)f(the)h(parent)g (frame,)i(and)d(further)h(resizings)f(of)71 2132 y(the)d(window)g(do)h(not)g (maintain)f(the)h(settings)e(by)i Fd(VFormat\(\))p Fj(.)926 2753 y Fe(-)g(11)g(-)p eop %%Page: 12 13 12 bop 71 124 1860 6 v 71 186 a Fa(VInsert\(frame,)13 b(vidget,)f(x,)h(y\))71 323 y Fd(VInsert\(...\))i Fj(inserts)10 b Fd(vidget)i Fj(into)e Fd(frame)p Fj(.)71 431 y(Parameters:)147 493 y Fd(frame)141 b Fj(a)11 b(frame)i(to)d(insert)h(into)147 555 y Fd(vidget)136 b Fj(the)11 b(vidget)f(to)g(insert)147 617 y Fd(x,)i(y)186 b Fj(the)11 b(coordinates)f(in)g Fd(frame)i Fj(to)f(insert)f(the)h(vidget)p 71 696 V 71 758 a Fa(VOpenDialog\(dialog,)f(x,)j(y)m(,)f(data,)h(default)p 899 758 14 2 v 16 w(string\))71 881 y Fd(VOpenDialog\(...\))k Fj(opens)10 b(the)g(dialog)f(box)g Fd(dialog)j Fj(at)e Fd(x,)h(y)p Fj(.)17 b(The)10 b(dialog)f(box)g(is)h(\252smart\272)h(in)e(that)h(it)g(does) f(not)71 943 y(open)k(up)g(with)g(any)g(part)g(of)h(it)f(of)o(f)h(the)f(edge) o, VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1?_h(of)g(the)f(window)m(.)23 b(Thus,)13 b(no)g(coordinate)g(checking)g(is)g (required)71 1005 y(beforehand.)i(However)n(,)c(if)f(the)g(window)f(is)g(too) h(small)f(for)i(the)e(dialog)g(box,)h(then)g(it)f(gets)h(pushed)f(of)o(f)h (the)g(top.)71 1112 y(Parameters:)147 1174 y Fd(dialog)188 b Fj(a)12 b(vidget)e(of)h(type)g Fd(Vdialog)147 1236 y(x,)h(y)237 b Fj(the)11 b(position)e(of)i(the)g(upper)g(left)g(corner)g(of)h(the)e (dialog)g(box)h(relative)g(to)f(the)h(window)147 1298 y Fd(data)220 b Fj(a)12 b(list)e(of)h(data)g(values)f(corresponding)g(to)h(the)f(vidgets)g (registered)h(with)f Fd(dialog)147 1360 y(default)p 286 1360 V 17 w(string)44 b Fj(a)12 b(string)e(label)g(of)i(the)e(control)h(button)e (to)i(press)g(upon)f(hitting)f(return)71 1485 y(Defaults:)147 1547 y Fd(x,)j(y)237 b Fj(calculated)11 b(to)f(center)i(the)f(dialog)f(box)g (in)h(the)g(window)147 1609 y Fd(data)220 b Fj([])12 b(\(an)f(empty)g (list\);)f(all)h(data)g(\256elds)g(reset)g(to)g(default)147 1671 y Fd(default)p 286 1671 V 17 w(string)44 b Fj(no)11 b(default)g(button)e (is)i(speci\256ed)p 71 1749 1860 6 v 71 1812 a Fa(VReformat\(vidget,)i (length,)e(width\))71 1934 y Fd(VReformat\(...\))k Fj(changes)10 b(the)h(size)f(of)h(a)g(scrollbar)f(vidget.)15 b(This)10 b(is)g(used)g(on)g (resize)h(events.)16 b(\(See)11 b(the)g(demo)71 1996 y Fd(xscroll.icn)f Fj(at)i(the)f(end)g(of)g(this)f(document)g(for)i(an)f(example)g(of)h(how)e Fd(VReformat\(\))i Fj(is)f(used.\))71 2103 y(Parameters:)147 2165 y Fd(vidget)136 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vvert)p 808 2165 14 2 v 17 w(scrollbar)i Fj(or)f Fd(Vhoriz)p 1185 2165 V 17 w(scrollbar)147 2228 y(length)134 b Fj(the)11 b(new)g(length)f(of)h(the) g(scrollbar)147 2290 y Fd(width)151 b Fj(the)11 b(new)g(width)f(of)h(the)g (scrollbar)926 2753 y Fe(-)g(12)g(-)p eop %%Page: 13 14 13 bop 71 124 1860 6 v 71 186 a Fa(VRegister\(dialog,)11 b(vidget,)h(x,)h (y\))71 309 y Fd(VRegister\(...\))20 b Fj(registers)12 b Fd(vidget)h Fj(with)f(the)g(dialog)g(box)g Fd(dialog)i Fj(as)f(an)g(editable)e(vidget)h (at)h(position)d(\(x,)j(y\).)71 371 y(This)c(means)h(that)g(this)f(vidget)g (holds)g(a)h(value)g(editable)f(by)h(the)g(user)n(,)h(as)f(opposed)f(to)h (control)f(buttons)f(like)i Fd(OK)71 433 y Fj(or)h Fd(CANCEL)p Fj(,)i(which)e(have)g(no)g(value)h(associated)e(with)h(them.)18 b(A)11 b(requirement)h(by)f(dialog)f(boxes)h(is)g(that)g(all)71 495 y(insertions)e(must)h(be)i(made)g(with)e(absolute)g(coordinates.)71 593 y(Parameters:)147 655 y Fd(dialog)137 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vdialog\(\))147 717 y(vidget)136 b Fj(a)11 b(vidget)f(of)i(a)f(type)g (listed)f(above)h(in)f(section)g Fi(Dialog)g(Boxes)h Fj(\(page)g(7\))147 779 y Fd(x,)h(y)186 b Fj(the)11 b(absolute)f(coordinates)g(in)g(the)h(dialog) f(to)h(insert)f(the)h(vidget)p 71 920 V 71 982 a Fa(VRemove\(frame,)j (vidget,)e(no)p 660 982 14 2 v 16 w(erase\))71 1105 y Fd(VRemove\(...\))20 b Fj(removes)12 b Fd(vidget)h Fj(from)g Fd(frame)p Fj(.)21 b Fd(vidget)13 b Fj(is)f(automatically)f(erased.)21 b(If)13 b(this)e(is)h(not)g(desired,)71 1167 y(set)e(the)h Fd(no)p 252 1167 V 17 w(erase)h Fj(\256eld)f(to)g(a)h(non-null)d(value.)71 1265 y(Parameters:)147 1327 y Fd(frame)141 b Fj(a)11 b(frame)i(to)d(remove)i (from)147 1389 y Fd(vidget)136 b Fj(a)11 b(vidget)f(to)h(remove)147 1452 y Fd(no)p 200 1452 V 17 w(erase)77 b Fj(non-null)9 b(to)i(not)f(erase)i (the)f(vidget)f(after)i(removal)p 71 1592 1860 6 v 71 1654 a Fa(VResize\(vidget,)g(x,)h(y)m(,)f(w)n(,)h(h\))71 1777 y Fd(VResize\(...\))26 b Fj(sets)14 b(the)g(absolute)f(coordinates)h(of)g Fd(vidget)p Fj(.)28 b(If)15 b Fd(vidget)g Fj(is)f(a)h(frame,)i(this)d(sets)g (the)g(absolute)71 1839 y(coordinates)d(of)h(all)g(vidgets)f(inserted)h(in)g (the)g(frame)i(based)e(on)g(the)h(coordinates)e(provided.)19 b(If)13 b Fd(vidget)g Fj(is)f(the)71 1901 y(root)h(frame,)j(this)d(draws)g (all)h(vidgets.)23 b(For)14 b(all)g(other)f(vidgets,)h(this)f(procedure)h(is) f(called)h(automatically)e(by)71 1963 y(the)g(frame)i(it)e(is)g(contained)g (in)g(to)g(set)h(the)f(absolute)f(position)g(and)h(size)h(based)f(on)h(the)f (virtual)g(size)g(passed)g(to)71 2025 y(the)f(vidget)g(in)g(creation.)18 b(This)10 b(procedure)i Ff(must)f Fj(be)g(called)h(on)f(the)h(root)f(frame)i (prior)e(to)g(invoking)f(any)h(event)71 2087 y(handler)f(or)h(performing)g(a) h Fd(VDraw\(\))p Fj(.)71 2194 y(Parameters:)147 2257 y Fd(vidget)136 b Fj(the)11 b(vidget)f(to)g(resize)147 2319 y Fd(x,)i(y)186 b Fj(the)11 b(absolute)f(coordinates)g(in)g Fd(frame)i Fj(to)f(insert)f(the)h (vidget)147 2381 y Fd(w)m(,)i(h)176 b Fj(the)11 b(absolute)f(pixel)g(width)g (and)h(height)f(of)h(the)g(vidget)926 2753 y Fe(-)g(13)g(-)p eop %%Page: 14 15 14 bop 71 124 1860 6 v 71 186 a Fa(VSet\(vidget,)13 b(val\))71 309 y Fd(VSet\(...\))29 b Fj(sets)15 b(the)h(state)f(of)h Fd(vidget)g Fj(to)f Fd(val)p Fj(.)31 b(For)16 b(example,)h Fd(V)n(radio)p 1256 309 14 2 v 18 w(buttons)f Fj(has)f(a)h(string)f(label)g(value)71 371 y(associated)c(with)h(it,)h(and)g Fd(Vtoggle)h Fj(has)e(a)i(null)d(or)i (non-null)e(value.)21 b(If)13 b Fd(vidget)h Fj(is)e(a)h(coupler)n(,)g(then)g (the)f(value)71 433 y(associated)c(with)g(the)g(coupler)h(is)f(set)h (accordingly)m(.)15 b(If)9 b(the)g(coupler)g(is)f(a)h Fd(Vbool)p 1341 433 V 18 w(coupler)p Fj(,)i(then)e Fd(val)g Fj(is)f(ignored,)71 495 y(and)j(the)f(boolean)h(coupler)f(value)h(is)g(set)g(to)g(non-null.)71 602 y(Parameters:)147 664 y Fd(vidget)136 b Fj(a)11 b(vidget)f(or)i(coupler) 147 727 y Fd(val)199 b Fj(a)11 b(value)g(to)g(set)g(the)g(coupler)f(to)p 71 805 1860 6 v 71 867 a Fa(VT)m(oggle\(coupler\))71 990 y Fd(VT)-5 b(oggle\(...\))47 b Fj(toggles)12 b(the)h(value)g(associated)f(with) h(the)g(boolean)f(coupler)h Fd(coupler)p Fj(.)24 b(This)13 b(function)f(only)71 1052 y(works)e(on)h(a)g Fd(Vbool)p 399 1052 14 2 v 18 w(coupler)p Fj(.)71 1159 y(Parameters:)147 1221 y Fd(coupler)109 b Fj(a)11 b(coupler)g(variable)g(of)g(type)g Fd(Vbool)p 998 1221 V 17 w(coupler)p 71 1362 1860 6 v 71 1424 a Fa(VUnregister\(dialog,)f(vidget\))71 1546 y Fd(VUnregister\(...\))19 b Fj(takes)12 b(a)h(vidget)e(of)o(f)i(the)f(registered)f(list)g(of)i (editable)e(vidgets)g(for)h Fd(dialog)p Fj(.)21 b(This)12 b(does)f(not)71 1609 y(erase)16 b(the)f(vidget,)i(as)e(it)h(can)g(only)f(be)g(called)h(after) g(a)g(dialog)f(has)g(been)h(closed.)30 b(Thus,)16 b(the)g(vidget)f(being)71 1671 y(removed)c(is)g(not)f(visible.)71 1769 y(Parameters:)147 1831 y Fd(dialog)137 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vdialog\(\))147 1893 y(vidget)136 b Fj(a)11 b(vidget)f(of)i(a)f(type)g(listed)f(above)h(in)f (section)g Fi(Dialog)g(Boxes)h Fj(\(page)g(7\))p 71 2033 V 71 2096 a Fa(VUnSet\(coupler\))71 2218 y Fd(VUnSet\(...\))47 b Fj(sets)13 b(the)g(value)g(associated)f(with)h(the)g(boolean)g(coupler)f Fd(coupler)j Fj(to)e Fd(&null)p Fj(.)25 b(This)12 b(function)71 2280 y(only)e(works)g(on)h(a)h Fd(Vbool)p 492 2280 14 2 v 17 w(coupler)p Fj(.)71 2388 y(Parameters:)147 2450 y Fd(coupler)109 b Fj(a)11 b(coupler)g(variable)g(of)g(type)g Fd(Vbool)p 998 2450 V 17 w(coupler)926 2753 y Fe(-)g(14)g(-)p eop %%Page: 15 16 15 bop 71 124 1860 6 v 71 231 a Fj(The)11 b(following)e(entries)h(are)i (vidget)e(creation)h(procedures.)p 71 338 V 71 401 a Fa(Vbutton\([frame,)i (x,)f(y)m(,)g(])h(w)n(,)g(s,)g(callback,)f(id,)g(style,)h(aw)n(,)g(ah\))71 523 y Fd(Vbutton\(...\))27 b Fj(creates)15 b(a)g(button)f(vidget.)26 b Fd(VEvent\(\))16 b Fj(returns)e(the)h Fd(id)g Fj(\256eld)g(of)g(the)g (button)e(on)i(a)g(successful)71 585 y(press.)71 692 y(Parameters:)147 754 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 817 y Fd(s)234 b Fj(a)11 b(string)f(label)h(for)g(the)g(button)147 879 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described) VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1zng (above)147 941 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 1003 y Fd(style)163 b Fj(a)11 b(symbolic)f(constant)g (indicating)f(the)i(style)g(of)g(the)g(button)147 1065 y Fd(aw)199 b Fj(the)11 b(width)f(in)g(pixels)g(of)i(the)e(button)147 1127 y Fd(ah)207 b Fj(the)11 b(height)f(in)g(pixels)g(of)i(the)f(button)71 1251 y(Defaults:)147 1313 y Fd(style)163 b(V)p 437 1313 14 2 v 17 w(2D)147 1375 y(aw)199 b Fj(8)11 b(+)g(the)g(pixel)f(width)g(of)h Fd(s)147 1438 y(ah)207 b Fj(8)11 b(+)g(the)g(font)f(height)g(of)i Fd(w)p 71 1578 1860 6 v 71 1640 a Fa(Vcheckbox\([frame,)i(x,)e(y)m(,)h(])f(w) n(,)h(callback,)g(id,)f(size\))71 1763 y Fd(Vcheckbox\(...\))38 b Fj(creates)19 b(a)g(check-box)g(vidget.)38 b(The)18 b(functionality)e(of)j (this)f(vidget)f(is)i(identical)e(to)h(a)71 1825 y Fd(Vtoggle\(\))p Fj(.)71 1932 y(Parameters:)147 1994 y Fd(w)224 b Fj(a)11 b(window)f(\256le) 147 2056 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 2119 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 2181 y Fd(size)176 b Fj(the)11 b(width)f(and)h(height)f(in)g(pixels)g(of)i (the)e(vidget)71 2305 y(Defaults:)147 2367 y Fd(size)176 b Fj(15)926 2753 y Fe(-)11 b(15)g(-)p eop %%Page: 16 17 16 bop 71 124 1860 6 v 71 186 a Fa(Vdialog\(w)n(,)12 b(padx,)g(pady\))71 309 y Fd(Vdialog\(...\))17 b Fj(creates)12 b(a)g(frame)g(for)g(a)f(popup)f (dialog)h(box.)16 b(V)m(idgets)10 b(such)h(as)g Fd(Vtext)p 1438 309 14 2 v 16 w(in)h Fj(and)f Fd(V)n(radio)p 1706 309 V 18 w(buttons)71 371 y Fj(are)17 b(inserted)f(using)f Fd(VRegister\(\))p Fj(.)35 b(An)16 b(example)h(of)g(creating)g(a)g(dialog)f(box)g(is)g(shown)g (in)g(the)h(program)71 433 y(listings)11 b(at)j(the)f(end)h(of)g(this)e (document.)24 b(When)14 b(vidgets)e(are)j(inserted)e(into)f(the)i(dialog,)g (the)f(point)g(\(0,)h(0\))g(is)71 495 y(considered)d(to)i(be)g(the)f(upper)o (-left)g(corner)i(of)e(the)h(vidget)f(plus)f(any)i(padding)e(in)i(the)f(x)h (or)g(y)f(dimension.)20 b(For)71 557 y(example,)139 657 y Fd(dialog)14 b(:=)d(Vdialog\(win,)k(30,)d(30\))139 719 y(VRegister\(dialog,)i (Vtext\(win\),)e(0,)h(0\))71 880 y Fj(places)e(a)g Fd(Vtext)g Fj(vidget)f(at)h(\(30,)h(30\))e(in)h Fd(dialog)p Fj(.)71 988 y(Parameters:)147 1050 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1112 y Fd(padx)159 b Fj(number)11 b(of)g(pixels)f(for)i(vertical)e(border)h (padding)f(between)h(vidgets)f(and)h(dialog)f(outline)147 1174 y Fd(pady)159 b Fj(number)11 b(of)g(pixels)f(for)i(horizontal)d(border)i (padding)f(between)h(vidgets)f(and)h(dialog)f(outline)71 1298 y(Defaults:)147 1360 y Fd(padx)159 b Fj(20)147 1422 y Fd(pady)g Fj(20)p 71 1501 1860 6 v 71 1563 a Fa(Vframe\([frame,)14 b(x,)f(y)m(,)f(])g (w)n(,)h(aw)n(,)h(ah\))71 1686 y Fd(Vframe\(...\))g Fj(creates)7 b(a)g(vidget)g(frame)g(into)g(which)g(other)g(vidget)g(objects)g(may)g(be)g (\252inserted\272)g(using)g Fd(VInsert\(\))p Fj(.)71 1748 y Fd(aw)j Fj(and)g Fd(ah)h Fj(are)g(commonly)f(set)g(after)h(vidgets)e(have)h (been)g(placed)g(within,)f(and)i(the)f(bounds)e(can)j(be)f(\256gured.)926 2753 y Fe(-)h(16)g(-)p eop %%Page: 17 18 17 bop 71 124 1860 6 v 71 186 a Fa(Vgrid\([frame,)12 b(x,)h(y)m(,)f(])h(win,) f(callback,)g(id,)g(aw)n(,)h(ah,)g(rows,)f(cols\))71 309 y Fd(Vgrid\(...\))18 b Fj(creates)13 b(a)f(grid)f(vidget)g(with)g(pixel)g (width)g(of)h Fd(aw)g Fj(and)f(pixel)g(height)g(of)h Fd(ah)p Fj(.)20 b(The)11 b(number)h(of)g(grid)71 371 y(divisions)f(is)i(determined)g (by)h Fd(rows)f Fj(and)h Fd(cols)p Fj(.)24 b(Events)13 b(are)h(passed)f(to)g (the)h(callbacks)f(associated)f(with)h(the)71 433 y Fd(Vgrid)i Fj(in)f(the)g(manner)h(described)f(above,)h(with)e(the)h(exception)g(that)f (the)h Fd(value)i Fj(passed)d(to)h(the)g(callback)g(is)71 495 y(a)g(three)g(element)g(list)f(consisting)f(of)i Fd([row)m(,)i(col,)g(e])p Fj(,)f(where)g Fd(row)f Fj(and)g Fd(col)g Fj(are)h(the)f(grid)f(element)h (the)g(event)71 557 y(occurred)8 b(in,)h(\(the)f(upper)g(left)g(corner)h (grid)f(element)g(numbered)g(as)h(\(0,)g(0\))g(\),)g(and)f Fd(e)h Fj(is)f(the)g(event)g(that)g(occurred.)71 664 y(Parameters:)147 727 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 789 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 851 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 913 y Fd(aw)199 b Fj(the)11 b(width)f(in)g(pixels)g (of)i(the)e(grid)147 975 y Fd(ah)207 b Fj(the)11 b(height)f(in)g(pixels)g(of) i(the)f(grid)147 1037 y Fd(rows)161 b Fj(the)11 b(number)g(of)g(vertical)g (rows)g(in)f(the)h(grid)147 1099 y Fd(cols)176 b Fj(the)11 b(number)g(of)g(horizontal)f(columns)g(in)h(the)g(grid)71 1223 y(Defaults:)147 1285 y Fd(aw)m(,)i(ah)126 b Fj(100,)11 b(100)147 1348 y Fd(rows,)i(cols)54 b Fj(10,)11 b(10)926 2753 y Fe(-)g(17)g(-)p eop %%Page: 18 19 18 bop 71 124 1860 6 v 71 186 a Fa(Vhoriz)p 214 186 14 2 v 15 w(radio)p 341 186 V 15 w(buttons\([frame,)13 b(x,)g(y)m(,)f(])h(w)n(,)g (data,)f(callback,)h(id,)f(style\))71 309 y Fd(Vhoriz)p 202 309 V 17 w(radio)p 319 309 V 17 w(buttons\(...\))30 b Fj(creates)16 b(a)g(frame)h(containing)d(radio)i(buttons)e(positioned)f(horizontally)h (with)71 371 y(labels)e(corresponding)g(to)g(each)i(entry)f(in)g(the)g(list)f (passed)h(as)g Fd(s)p Fj(.)23 b Fd(VEvent\(\))14 b Fj(returns)f(the)g(string) f(label)h(of)g(the)71 433 y(button)g(selected.)26 b(If)15 b(a)g(callback)g (is)f(speci\256ed,)h(the)g(value)f(passed)g(is)g(the)h(string)e(label)h(of)h (the)f(radio)g(button)71 495 y(pressed.)71 602 y(Parameters:)147 664 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 727 y Fd(data)169 b Fj(a)11 b(list)f(of)i(string)d(labels)147 789 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 851 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 913 y Fd(style)163 b Fj(a)11 b(button)f(style)71 1037 y(Defaults:)147 1099 y Fd(callback)93 b(&null)12 b Fj(\(no)f(clients)f (called\))147 1161 y Fd(id)222 b(&null)12 b Fj(\(no)f(identi\256er)g(is)f (sent)h(to)g(the)g(procedure\))147 1223 y Fd(style)163 b(V)p 437 1223 V 17 w(2D)926 2753 y Fe(-)11 b(18)g(-)p eop %%Page: 19 20 19 bop 71 124 1860 6 v 77 191 a Fa(Vhoriz)p 220 191 14 2 v 15 w(scrollbar\([frame,)12 b(x,)h(y)m(,)f(])h(w)n(,)g(callback,)g(id,)e (length,)h(width,)308 253 y(left)p 379 253 V 16 w(bound,)f(right)p 661 253 V 16 w(bound,)g(increment,)h(window)p 1250 253 V 16 w(size,)h(discontinuous\))71 434 y Fd(Vhoriz)p 202 434 V 17 w(scrollbar\(...\))34 b Fj(creates)18 b(a)g(horizontal)e(scrollbar)m(.)34 b Fd(VEvent\(\))19 b Fj(returns)d(the)h(value)g(of)h(the)f(internal)71 496 y(coupler)10 b(variable)h(associated)f(with)g(the)h(scrollbar)g(upon)f (release)i(of)f(the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)h(callbacks)g(as)g(described)g (above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)g(type)147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(width\)) g(of)h(the)g(scrollbar)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g (\(height\))g(of)h(the)g(scrollbar)147 976 y Fd(left)p 211 976 V 16 w(bound)132 b Fj(the)11 b(value)f(limit)h(at)g(the)g(left)g(of)g (the)g(scrollbar)147 1038 y Fd(right)p 238 1038 V 17 w(bound)104 b Fj(the)11 b(value)f(limit)h(at)g(the)g(right)f(of)h(the)g(scrollbar)147 1100 y Fd(increment)135 b Fj(the)11 b(increment)g(value)g(used)f(by)h(the)g (arrow)g(buttons)147 1162 y Fd(window)p 301 1162 V 17 w(size)85 b Fj(the)11 b(size)g(of)g(the)g(view)g(window)m(,)f(in)h(the)f(same)i(units)e (as)h(the)g(range)147 1225 y Fd(dH! VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1}iscontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i(invoked)e(only)g(upon)g Ff(r)n(elease)481 1287 y Fj(of)h(the)g(thumb)71 1411 y(Defaults:)147 1473 y Fd(width)228 b Fj(15)11 b(pixels)147 1535 y Fd(left)p 211 1535 V 16 w(bound)132 b Fj(0.0)147 1597 y Fd(right)p 238 1597 V 17 w(bound)104 b Fj(1.0)147 1659 y Fd(increment)135 b Fj(10\045)10 b(of)i(the)f(range)926 2753 y Fe(-)g(19)g(-)p eop %%Page: 20 21 20 bop 71 124 1860 6 v 77 191 a Fa(Vhoriz)p 220 191 14 2 v 15 w(slider\([frame,)13 b(x,)f(y)m(,)g(])h(w)n(,)g(callback,)g(id,)f(length,) f(width,)308 253 y(left)p 379 253 V 16 w(bound,)g(right)p 661 253 V 16 w(bound,)g(init,)g(discontinuous\))71 434 y Fd(Vhoriz)p 202 434 V 17 w(slider\(...\))28 b Fj(creates)16 b(a)f(horizontal)f(slider)m (.)29 b Fd(VEvent\(\))16 b Fj(returns)f(the)g(value)g(of)g(the)g(internal)f (coupler)71 496 y(variable)c(associated)h(with)f(the)h(slider)f(upon)g (release)i(of)f(the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)h(callbacks)g(as)g(described)g (above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)g(type)147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(width\)) g(of)h(the)g(slider)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g (\(height\))g(of)h(the)g(slider)147 976 y Fd(left)p 211 976 V 16 w(bound)132 b Fj(the)11 b(value)f(limit)h(at)g(the)g(left)g(of)g(the)g (slider)147 1038 y Fd(right)p 238 1038 V 17 w(bound)104 b Fj(the)11 b(value)f(limit)h(at)g(the)g(right)f(of)h(the)g(slider)147 1100 y Fd(init)276 b Fj(initial)9 b(value)i(of)g(the)g(slider)147 1162 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i (invoked)e(only)g(upon)g Ff(r)n(elease)481 1225 y Fj(of)h(the)g(slider)71 1349 y(Defaults:)147 1411 y Fd(width)228 b Fj(15)11 b(pixels)147 1473 y Fd(left)p 211 1473 V 16 w(bound)132 b Fj(0.0)147 1535 y Fd(right)p 238 1535 V 17 w(bound)104 b Fj(1.0)147 1597 y Fd(init)276 b(bottom)p 623 1597 V 16 w(bound)926 2753 y Fe(-)11 b(20)g(-)p eop %%Page: 21 22 21 bop 71 124 1860 6 v 71 186 a Fa(Vline\(w)n(,)12 b(x1,)h(y1,)g(x2,)g(y2\)) 71 309 y Fd(Vline\(...\))22 b Fj(creates)14 b(a)f(line.)22 b(This)12 b(line)h(vidget)f(can)h(be)g(inserted)g(into)f(the)h(root)f(frame,) j(and)e(is)g(automatically)71 371 y(drawn)i(along)g(with)f(other)h(vidgets)f (upon)h(invocation)f(of)h Fd(VResize\(root\))p Fj(.)31 b(This)14 b(vidget)h(does)g(not)f(accept)71 433 y(events.)h(The)10 b(two)g(coordinate)g (pairs)g(can)g(be)h(speci\256ed)f(with)f(absolute,)h(normalized,)g(and/or)g (of)o(fset)g(positions)71 495 y(as)k(described)g(above.)26 b(The)14 b(\(x,)h(y\))g(coordinate)e(pair)i(is)e(not)h(speci\256ed)g(in)g (the)g Fd(VInsert\(\))p Fj(.)27 b(For)14 b(example,)i(to)71 557 y(insert)10 b(a)h(line)g(into)f(the)h(root)g(frame)h(from)g(\(100,100\))e (to)h(\(200,)g(200\):)139 657 y Fd(VInsert\()i(root,)f(Vline\(win,)i(100,)f (100,)g(200,)g(200\)\))71 756 y Fj(T)m(o)d(insert)h(a)g(line)g(from)g(the)g (middle)g(of)g(the)g(screen)h(to)e(the)h(lower)g(right)f(corner)i(\(to)f (support)e(resize)j(events\):)139 856 y Fd(VInsert\()h(root,)f(Vline\(win,)i (0.50,)e(0.50\)\))71 1009 y Fj(Parameters:)147 1071 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1133 y Fd(x1,)j(y1)135 b Fj(coordinates)10 b(of)h(\256rst)g(point)147 1195 y Fd(x2,)i(y2)135 b Fj(coordinates)10 b(of)h(second)g(point)71 1320 y(Defaults:)147 1382 y Fd(x1,)i(y1)135 b Fj(0)147 1444 y Fd(x2)209 b Fj(window)10 b(width)147 1506 y Fd(y2)209 b Fj(window)10 b(height)926 2753 y Fe(-)h(21)g(-)p eop %%Page: 22 23 22 bop 71 124 1860 6 v 71 186 a Fa(Vmenu)p 225 186 14 2 v 16 w(bar\([frame,)14 b(x,)e(y)m(,)g(])h(w)n(,)g(s,)g(menu,)f(s,)h(menu,)f(...\)) 71 309 y Fd(Vmenu)p 217 309 V 17 w(bar\(...\))k Fj(creates)11 b(a)g(menu)g(bar)g(consisting)d(of)j(the)f(strings)f(passed)h(as)h(the)f (2nd,)h(4th,)f(etc.)17 b(ar)o(guments,)71 371 y(which)9 b(call)h(the)g(menus) g(de\256ned)h(beforehand)f(by)g Fd(Vsub)p 985 371 V 17 w(menu\(\))h Fj(in)f(the)g(following)e(ar)o(gument.)17 b(An)10 b(example)71 433 y(of)19 b(building)d(a)k(hierarchical)f(menu)g(system)f(is)h(contained)f (in)g(the)h(program)g(listings)e(at)i(the)g(end)g(of)g(this)71 495 y(document.)26 b Fd(VEvent\(\))16 b Fj(returns)e(the)h(result)f(of)h(the) f(callback)g(associated)g(with)g(the)g(menu)h(choice)g(made;)i(if)71 557 y(there)10 b(is)g(no)h(callback)f(speci\256ed,)h(the)f(list)g(of)g (string)g(labels)f(of)i(the)g(path)f(to)g(the)g(menu)h(choice)f(is)h (returned)f(\(See)71 619 y Fd(Vsub)p 177 619 V 17 w(menu)i Fj(below\).)k(If)11 b(the)g(mouse)g(is)g(not)f(released)i(on)e(a)i(menu)f (selection,)g Fd(VEvent\(\))h Fj(fails.)71 726 y(Parameters:)147 789 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 851 y Fd(s)234 b Fj(a)11 b(string)f(label)147 913 y Fd(menu)144 b Fj(a)11 b(submenu)g(de\256ned)g(by)g Fd(Vsub)p 919 913 V 17 w(menu\(\))71 1037 y Fj(Defaults:)147 1099 y Fd(menu)144 b(&null)12 b Fj(\(no)f(menu)h(is)e (called\))p 71 1240 1860 6 v 71 1302 a Fa(Vmessage\([frame,)15 b(x,)d(y)m(,)g(])h(w)n(,)g(s\))71 1424 y Fd(Vmessage\(...\))30 b Fj(creates)16 b(a)g(simple)g(text)f(message)h(vidget.)29 b(This)15 b(does)h(not)f(handle)g(events,)i(and)e(is)h(only)71 1486 y(implemented)10 b(to)h(provide)f(convenience)h(in)g(placing)f(text)g (on)h(the)g(screen.)71 1594 y(Parameters:)147 1656 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1718 y Fd(s)234 b Fj(a)11 b(string)f(label)h (for)g(the)g(message)926 2753 y Fe(-)g(22)g(-)p eop %%Page: 23 24 23 bop 71 124 1860 6 v 71 186 a Fa(Vpane\([frame,)13 b(x,)g(y)m(,)f(])h(w)n (,)g(callback,)f(id,)g(linewidth,)f(aw)n(,)j(ah\))71 309 y Fd(Vpane\(...\))21 b Fj(creates)13 b(a)g(vidget)e(that)h(consists)f(of)i(a)g (region)f(on)g(the)g(screen.)21 b(It)13 b(acceps)g(events)f(and)g(processes) 71 371 y(them)h(normally)f(via)g(its)g(callback,)h(but)g(it)f(has)h(no)f (visual)g(representation)f(aside)i(of)f(an)h(outline,)f(speci\256ed)h(by)71 433 y(the)d(value)h(of)h Fd(linewidth)p Fj(.)17 b Fd(VEvent\(\))12 b Fj(returns)f(the)g Fd(id)h Fj(\256eld)f(of)g(the)g(vidget.)71 540 y(Parameters:)147 602 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 664 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 727 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 789 y Fd(linewidth)81 b Fj(the)11 b(linewidth)e(of)i(the)g(outline;)e(if)i (null,)g(no)g(outline)147 851 y Fd(aw)199 b Fj(width)10 b(in)g(pixels)g(of)i (the)f(pane)147 913 y Fd(ah)207 b Fj(height)10 b(in)h(pixels)f(of)h(the)g (pane)71 1037 y(Defaults:)147 1099 y Fd(linewidth)81 b Fj(null)10 b(\(no)h(outline\))p 71 1240 V 71 1302 a Fa(Vpull)p 186 1302 14 2 v 15 w(down)p 320 1302 V 16 w(pick)p 427 1302 V 16 w(menu\([frame,)j(x,) f(y)m(,)f(])g(w)n(,)h(s,)g(callback,)g(id,)e(size,)i(centered\))71 1424 y Fd(Vpull)p 174 1424 V 17 w(down)p 299 1424 V 17 w(pick)p 397 1424 V 16 w(menu\(...\))26 b Fj(creates)14 b(a)h(vidget)e(that)g (displays)g(the)h(results)f(of)h(a)h(pick)f(made)g(from)h(a)g(pull)71 1486 y(down)10 b(list)g(of)h(string)f(entries)h(from)g(the)g(list)f Fd(s)p Fj(.)17 b Fd(VEvent\(\))12 b Fj(returns)e(the)h(string)f(label)h(of)g (the)g(choice)g(selected.)71 1594 y(Parameters:)147 1656 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1718 y Fd(s)234 b Fj(a)11 b(list)f(of)i(string)d(labels)i(for)g(the)g(choices)147 1780 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 1842 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 1904 y Fd(size)176 b Fj(number)11 b(of)g(characters)h(in)f(the)g(display)e (\256eld)147 1966 y Fd(centered)81 b Fj(non-null)9 b(if)i(the)g(items)oK VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1 g(in)g (the)g(pull)f(down)g(are)i(to)f(be)g(centered)71 2091 y(Defaults:)147 2153 y Fd(size)176 b Fj(24)926 2753 y Fe(-)11 b(23)g(-)p eop %%Page: 24 25 24 bop 71 124 1860 6 v 71 186 a Fa(V)m(root)p 190 186 14 2 v 16 w(frame\(w\))71 308 y Fd(V)n(root)p 180 308 V 17 w(frame\(w\))20 b Fj(creates)f(a)h(frame)g(that)f(encompasses)g(the)g(whole)g(window)m(.)39 b(It)20 b(is)e(necessary)i(for)f(the)71 370 y(operation)10 b(of)h(the)g(vidget)f(library)m(.)71 477 y(Parameters:)147 539 y Fd(w)224 b Fj(a)11 b(window)f(\256le)p 71 680 1860 6 v 71 742 a Fa(Vsub)p 185 742 14 2 v 16 w(menu\(w)n(,)j(s,)g(callback,)g (...\))71 864 y Fd(Vsub)p 177 864 V 17 w(menu\(...\))51 b Fj(creates)23 b(a)h(menu)f(that)f(lies)g(underneath)h(the)f(top)g(level)h(of)g(menus)g (created)g(using)71 926 y Fd(Vmenu)p 217 926 V 17 w(bar\(\))c Fj(above.)37 b(When)18 b(an)g(entry)f(in)h(a)g Fd(Vsub)p 999 926 V 17 w(menu)h Fj(is)e(selected,)j(the)e(callback)g(is)f(passed)g(two)71 988 y(parameters:)f(the)10 b(record)h(data)g(structure)f(of)h(the)g(menu)g (bar)g(entry)f(the)h(sub)f(menu)h(lies)f(under)n(,)h(and)g(a)g(one-item)71 1050 y(list)d(containing)f(the)i(string)g(label)f(of)i(the)f(sub)g(menu)g (entry)m(.)16 b(For)10 b(multiple)e(level)h(sub)g(menus,)h(the)f(list)f (passed)h(as)71 1112 y(the)g(value)h(to)f(the)h(callback)f(is)h(a)g (\252path\272)g(of)g(string)f(labels)g(from)h(the)g(top)f(submenu)g(to)h(the) f(menu)i(choice.)16 b Ff(Note:)71 1174 y(the)9 b(callback)h(\256eld)f(may)h (not)g(contain)e(another)h(vidget)h(or)f(a)h(coupler)f(variable;)h(only)f(a)h (callback)g(pr)n(ocedur)n(e)p Fj(.)71 1281 y(Parameters:)147 1343 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1405 y Fd(s)234 b Fj(a)11 b(string)f(label)h(corresponding)e(to)i(the)g(\256rst)g(entry)g(in) g(the)g(menu)147 1467 y Fd(callback)93 b Fj(a)11 b(procedure)g(to)g(be)g (called)g(by)g(the)g(menu)g(item)h(associated)e(with)g Fd(s)71 1529 y Fj(\(The)h(last)f(two)h(parameters)h(are)f(repeated)h(for)f(each)h (menu)f(entry)g(in)g(the)g(sub)p 1322 1529 V 15 w(menu.\))71 1654 y(Defaults:)147 1716 y Fd(callback)93 b(&null)12 b Fj(\(no)f(procedure)g (is)g(called\))926 2753 y Fe(-)g(24)g(-)p eop %%Page: 25 26 25 bop 71 124 1860 6 v 71 186 a Fa(Vtext\([frame,)14 b(x,)f(y)m(,)f(])h(w)n (,)f(s,)h(callback,)g(id,)e(sz,)i(mask\))71 309 y Fd(Vtext\(...\))38 b Fj(creates)20 b(a)f(textual)f(input)g(line.)40 b Fd(VEvent\(\))20 b Fj(returns)e Fd(&null)j Fj(if)e(the)f(operation)g(on)h(the)g(vidget)71 371 y(succeeds,)h(the)f(symbolic)e(constant)h Fd(V)p 728 371 14 2 v 17 w(NEXT)h Fj(if)g(tab,)h(down)e(arrow)m(,)j(or)e(return)g(key)f(is)h (pressed,)h(or)f(the)71 433 y(constant)9 b Fd(V)p 266 433 V 17 w(PREVIOUS)j Fj(if)f(the)g(up)f(arrow)i(key)e(is)h(pressed.)16 b(In)11 b(addition,)e(when)i(the)g(return)g(key)f(is)h(pressed,)71 495 y(the)e(callback)g(associated)g(with)g(the)g(vidget)g(is)g(called.)16 b(If)10 b(the)f(linefeed)g(key)h(is)f(pressed,)h(this)f(calls)g(the)g (callback)71 557 y(of)h(the)f Fd(Vtext)h Fj(and)g(returns)f(the)h(result.)15 b(This)9 b(is)h(used)f(in)h(dialog)f(boxes,)g(when)h(a)g Fd(Vtext)g Fj(vidget)f(needs)g(to)h(notify)71 619 y(its)i(callback)h(but)f(does)h(not)g (want)g(to)g(indicate)f(that)h(the)g(return)g(key)g(was)g(pressed.)22 b(\(See)15 b Fd(vidgets.icn)e Fj(at)g(the)71 681 y(end)e(of)g(this)f (document)g(for)i(an)f(example)g(of)h(how)e(the)h(callback)g(is)g(utilized)e (with)i(a)g Fd(Vtext)g Fj(vidget.\))71 744 y(The)g(cursor)g(may)h(be)f (positioned)e(by)i(clicking)f(the)h(pointer)f(within)g(the)h(data)g(\256eld.) 17 b(T)m(ext)11 b(can)h(be)f(blocked)f(out)71 806 y(by)i(dragging)f(the)h (mouse)h(over)f(the)g(text)g(\256eld.)21 b(The)12 b(blocked-out)f(text)h(is)g (then)g(considered)f(to)h(be)h(under)f(the)71 868 y(cursor)n(,)i(and)g(is)g (subject)e(to)i(be)g(edited)f(as)h(one)g(character)m(.)26 b(For)14 b(example,)h(blocking)d(out)i(all)f(of)h(the)g(text)f(and)71 930 y(hitting)8 b(backspace)j(deletes)g(all)f(characters.)17 b(If)11 b Fd(a)h Fj(is)e(pressed,)h(the)f(letter)h Fd(a)g Fj(replaces)g(all)g (the)f(blocked)g(text.)16 b(T)m(o)71 992 y(block)c(out)g(all)g(of)h(the)f (data,)i(position)c(the)j(cursor)f(at)h(the)g(end)f(of)h(the)g(data)f(and)h (press)f(the)h(mouse)f(button.)20 b(T)m(o)71 1054 y(initialize)9 b(the)h Fd(Vtext)g Fj(with)g(data)h(upon)e(creation,)i(use)f(the)h(code)g Fd(")p Fc(nn)p Fd(=")f Fj(within)f(the)h(prompt)g(\256eld)h Fd(s)f Fj(to)h(indicate)71 1116 y(the)e(rest)g(of)g(the)h(string)e(is)h (data.)16 b(For)9 b(example,)i(if)e Fd(s)i(=)f("pages=)p Fc(nn)p Fd(=)g(10")p Fj(,)h(the)e(resulting)f(prompt)h(is)g Fd("pages=")71 1178 y Fj(and)h(the)h(initial)e(data)i(is)g Fd("10")p Fj(.)17 b(T)m(o)11 b(set)f(the)h(data)g(after)g(the)g Fd(Vtext)g Fj(vidget)e(has)i (been)g(inserted)f(into)g(a)h(frame,)i(use)71 1240 y Fd(VSet\(vidget,)g (string\))p Fj(.)71 1302 y(Full)d(line)h(editing)e(capabilities)h(are)i(via)f (the)f(following)g(commands:)147 1410 y(left)h(arrow)335 b(move)12 b(left)147 1472 y(right)f(arrow)309 b(move)12 b(right)147 1534 y(backspace)326 b(delete)11 b(to)g(the)g(left)g(of)g(the)g(cursor)71 1658 y(For)g(several)g Fd(Vtext)g Fj(vidgets)f(linked)g(together)g(via)h(a)h (dialog)e(box:)147 1720 y(up)h(arrow)350 b(move)12 b(to)e(previous)g(line)147 1782 y(tab,)i(return,)f(or)g(down)g(arrow)35 b(move)12 b(to)e(next)h(line)71 1906 y(Parameters:)147 1969 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 2031 y Fd(s)234 b Fj(a)11 b(string)f(prompt)147 2093 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 2155 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 2217 y Fd(sz)211 b Fj(maximum)12 b(number)f(of)g (characters)h(in)e(text)h(\256eld)147 2279 y Fd(mask)148 b Fj(a)11 b(cset)g(of)h(allowable)e(characters)h(to)g(be)g(inputted)71 2403 y(Defaults:)147 2465 y Fd(s)234 b("")147 2528 y(sz)211 b Fj(18)147 2590 y Fd(mask)148 b(&cset)11 b Fj(\(all)g(characters)g(are)h (allowed\))926 2753 y Fe(-)f(25)g(-)p eop %%Page: 26 27 26 bop 71 124 1860 6 v 71 186 a Fa(Vtoggle\([frame,)13 b(x,)f(y)m(,)g(])h(w)n (,)g(s,)g(callback,)f(id,)g(style,)h(aw)n(,)g(ah\))71 309 y Fd(Vtoggle\(...\))i Fj(creates)8 b(a)g(toggle)f(vidget.)14 b Fd(VEvent\(\))9 b Fj(returns)e(the)h Fd(id)g Fj(\256eld)g(of)g(the)f (toggle)g(button)f(on)i(a)g(successful)71 371 y(press.)71 478 y(Parameters:)147 540 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 602 y Fd(s)234 b Fj(a)11 b(string)f(label)h(for)g(the)g(toggle)147 664 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 727 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 789 y Fd(style)163 b Fj(a)11 b(symbolic)f(constant)g(indicating)f(the)i (style)g(of)g(the)g(toggle)147 851 y Fd(aw)199 b Fj(the)11 b(width)f(in)g(pixels)g(of)i(the)e(button)147 913 y Fd(ah)207 b Fj(the)11 b(height)f(in)g(pixels)g(of)i(the)f(button)71 1037 y(Defaults:)147 1099 y Fd(style)163 b(V)p 437 1099 14 2 v 17 w(2D)147 1161 y(aw)199 b Fj(8)11 b(+)g(the)g(pixel)f(width)g(of)h Fd(s)147 1223 y(ah)207 b Fj(8)11 b(+)g(the)g(font)f(height)g(of)i Fd(w)p 71 1364 1860 6 v 71 1426 a Fa(Vvert)p 187 1426 14 2 v 17 w(radio)p 316 1426 V 15 w(buttons\([frame,)h(x,)g(y)m(,)f(])h(w)n(,)g (data,)f(callback,)h(id,)f(style\))71 1549 y Fd(Vvert)p 180 1549 V 16 w(radio)p 296 1549 V 17 w(buttons\(...\))17 b Fj(creates)12 b(a)g(frame)h(containing)d(radio)h(buttons)e(positioned)h(vertically)g(with)h (labels)71 1611 y(corresponding)g(to)i(each)g(entry)g(in)f(the)h(list)f (passed)h(as)g Fd(L)p Fj(.)h Fd(VEvent\(\))g Fj(returns)e(the)h(string)f (label)g(of)i(the)e(button)71 1673 y(selected.)21 b(If)14 b(a)f(callback)g (is)f(speci\256ed,)i(the)f(value)f(passed)h(is)f(the)h(*J VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1Mstring)f(label)g(of)h (the)g(radio)g(button)e(pressed.)71 1735 y(This)f(vidget)g(may)h(also)g(be)g (created)h(using)e Fd(V)n(radio)p 900 1735 V 18 w(buttons\(...\))p Fj(.)71 1842 y(Parameters:)147 1904 y Fd(w)224 b Fj(a)11 b(window)f(\256le) 147 1966 y Fd(data)169 b Fj(a)11 b(list)f(of)i(string)d(labels)147 2028 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 2091 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 2153 y Fd(style)163 b Fj(a)11 b(button)f(style)71 2277 y(Defaults:)147 2339 y Fd(callback)93 b(&null)12 b Fj(\(no)f(clients)f(called\))147 2401 y Fd(id)222 b(&null)12 b Fj(\(no)f(identi\256er)g(is)f(sent)h(to)g(the)g (procedure\))147 2463 y Fd(style)163 b(V)p 437 2463 V 17 w(2D)926 2753 y Fe(-)11 b(26)g(-)p eop %%Page: 27 28 27 bop 71 124 1860 6 v 77 191 a Fa(Vvert)p 193 191 14 2 v 17 w(scrollbar\([frame,)12 b(x,)h(y)m(,)f(])h(w)n(,)g(callback,)f(id,)g(length,) g(width,)308 253 y(bottom)p 465 253 V 16 w(bound,)f(top)p 716 253 V 16 w(bound,)g(increment,)i(window)p 1306 253 V 16 w(size,)f (discontinuous\))71 434 y Fd(Vvert)p 180 434 V 16 w(scrollbar\(...\))19 b Fj(creates)13 b(a)f(vertical)g(scrollbar)m(.)19 b Fd(VEvent\(\))13 b Fj(returns)e(the)h(value)g(of)g(the)g(internal)f(coupler)71 496 y(variable)f(associated)h(with)f(the)h(scrollbar)f(upon)g(release)i(of)f (the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h (or)g(list)f(of)h(callbacks)g(as)g(described)g(above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)g(type) 147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(height\))g(of)h(the)g (scrollbar)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g(of)h(the)g (scrollbar)147 976 y Fd(bottom)p 289 976 V 17 w(bound)53 b Fj(the)11 b(value)f(limit)h(at)g(the)g(bottom)f(of)h(the)g(scrollbar)147 1038 y Fd(top)p 213 1038 V 17 w(bound)129 b Fj(the)11 b(value)f(limit)h(at)g (the)g(top)f(of)i(the)e(scrollbar)147 1100 y Fd(increment)135 b Fj(the)11 b(increment)g(value)g(used)f(by)h(the)g(arrow)g(buttons)147 1162 y Fd(window)p 301 1162 V 17 w(size)85 b Fj(the)11 b(size)g(of)g(the)g (view)g(window)m(,)f(in)h(the)f(same)i(units)e(as)h(the)g(range)147 1225 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i (invoked)e(only)g(upon)g Ff(r)n(elease)481 1287 y Fj(of)h(the)g(thumb)71 1411 y(Defaults:)147 1473 y Fd(width)228 b Fj(15)11 b(pixels)147 1535 y Fd(bottom)p 289 1535 V 17 w(bound)53 b Fj(0.0)147 1597 y Fd(top)p 213 1597 V 17 w(bound)129 b Fj(1.0)147 1659 y Fd(increment)135 b Fj(10\045)10 b(of)i(the)f(range)926 2753 y Fe(-)g(27)g(-)p eop %%Page: 28 29 28 bop 71 124 1860 6 v 77 191 a Fa(Vvert)p 193 191 14 2 v 17 w(slider\([frame,)13 b(x,)f(y)m(,)g(])h(w)n(,)g(callback,)g(id,)e(length,)h (width,)308 253 y(bottom)p 465 253 V 16 w(bound,)f(top)p 716 253 V 16 w(bound,)g(init,)h(discontinuous\))71 434 y Fd(Vvert)p 180 434 V 16 w(slider\(...\))k Fj(creates)9 b(a)h(vertical)f(slider)m(.)15 b Fd(VEvent\(\))c Fj(returns)e(the)g(value)g(of)g(the)g(internal)f(coupler)h (variable)71 496 y(associated)h(with)g(the)h(slider)f(upon)g(release)i(of)f (the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h (or)g(list)f(of)h(callbacks)g(as)g(described)g(above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)g(type) 147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(height\))g(of)h(the)g (slider)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g(of)h(the)g (slider)147 976 y Fd(bottom)p 289 976 V 17 w(bound)53 b Fj(the)11 b(value)f(limit)h(at)g(the)g(bottom)f(of)h(the)g(slider)147 1038 y Fd(top)p 213 1038 V 17 w(bound)129 b Fj(the)11 b(value)f(limit)h(at)g (the)g(top)f(of)i(the)e(slider)147 1100 y Fd(init)276 b Fj(initial)9 b(value)i(of)g(the)g(slider)147 1162 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i(invoked)e(only)g(upon)g Ff(r)n(elease)481 1225 y Fj(of)h(the)g(slider)71 1349 y(Defaults:)147 1411 y Fd(width)228 b Fj(15)11 b(pixels)147 1473 y Fd(bottom)p 289 1473 V 17 w(bound)53 b Fj(0.0)147 1535 y Fd(top)p 213 1535 V 17 w(bound)129 b Fj(1.0)147 1597 y Fd(init)276 b(bottom)p 623 1597 V 16 w(bound)926 2753 y Fe(-)11 b(28)g(-)p eop %%Page: 29 30 29 bop 71 124 1860 6 v 71 231 a Fj(The)11 b(following)e(entries)h(are)i (coupler)f(vidgets.)p 71 338 V 71 401 a Fa(Vbool)p 201 401 14 2 v 15 w(coupler)h(\(value\))71 523 y Fd(Vbool)p 189 523 V 17 w(coupler\(...\))17 b Fj(creates)10 b(a)h(boolean)e(coupler)h(variable)g (with)g(an)g(initial)f(value)h(of)g Fd(value)p Fj(.)17 b(The)10 b(value)g(can)71 585 y(be)j(null)g(to)g(indicate)f(the)i(coupler)f(is)g (unset,)g(or)h(non-null)e(to)h(indicate)f(it)h(is)g(set.)24 b(Client)13 b(vidgets)f(or)h(callback)71 647 y(procedures)d(are)i(registered) e(with)g(the)h(coupler)g(via)g Fd(V)m(AddClient\(\))p Fj(,)i(and)d(the)h (value)g(of)g(the)g(coupler)f(is)h(altered)71 709 y(via)f Fd(VT)-5 b(oggle\(\),)14 b(VSet\(\),)f(VUnSet\(\),)f Fj(or)f(by)g(the)g(vidgets)f (themselves.)71 817 y(Parameters:)147 879 y Fd(value)149 b Fj(a)11 b(value)g(to)g(initialize)e(the)i(coupler)g(to)71 1003 y(Default:)147 1065 y Fd(value)149 b(&null)p 71 1206 1860 6 v 71 1268 a Fa(Vcoupler)12 b(\(value\))71 1390 y Fd(Vcoupler\(...\))23 b Fj(creates)13 b(a)h(coupler)e(variable)h(with)f(an)i(initial)d(value)i(of)g Fd(value)p Fj(.)24 b(Client)12 b(vidgets)g(or)h(callback)71 1452 y(procedures)d(are)i(registered)e(with)g(the)h(coupler)g(via)g Fd(V)m(AddClient\(\))p Fj(,)i(and)d(the)h(value)g(of)g(the)g(coupler)f(is)h (altered)71 1515 y(via)f Fd(VSet\(\))j Fj(or)e(by)g(the)g(vidgets)e (themselves.)71 1622 y(Parameters:)147 1684 y Fd(value)149 b Fj(a)11 b(value)g(to)g(initialize)e(the)i(coupler)g(to)71 1808 y(Default:)147 1870 y Fd(value)149 b(&null)926 2753 y Fe(-)11 b(29)g(-)p eop %%Page: 30 31 30 bop 71 124 1860 6 v 71 186 a Fa(V)m(range)p 225 186 14 2 v 17 w(coupler\(min,)11 b(max,)i(value,)g(inc\))71 309 y Fd(V)n(range)p 217 309 V 18 w(coupler\(...\))22 b Fj(creates)14 b(a)f(coupler)g(that)f (stores)h(numeric)g(values)f(within)g(a)h(range)h(speci\256ed)f(by)f Fd(min)71 371 y Fj(and)h Fd(max)p Fj(.)24 b(The)13 b(\256eld)h Fd(inc)g Fj(is)f(used)g(by)g(tools)f(that)h(increment)h(the)f(value)h(by)f(a) h(certain)f(value,)h(for)g(example,)71 433 y(the)c(arrows)h(in)f(a)h (scrollbar)f(composition.)15 b(If)c(both)f Fd(min)h Fj(and)f Fd(max)h Fj(are)h(speci\256ed)e(as)h(integer)f(values,)h(then)f(the)71 495 y(value)g(of)i(the)f(coupler)f(is)h(truncated)f(to)h(an)g(integer)m(.)17 b(Otherwise)10 b(the)h(value)g(is)f(real.)71 602 y(Parameters:)147 664 y Fd(min)184 b Fj(minimum)11 b(bound)f(of)h(the)g(coupler)147 727 y Fd(max)171 b Fj(maximum)12 b(bound)e(of)h(the)g(coupler)147 789 y Fd(value)149 b Fj(the)11 b(initial)e(value)147 851 y Fd(inc)199 b Fj(an)11 b(increment)71 975 y(Defaults:)147 1037 y Fd(min)184 b Fj(0.0)147 1099 y Fd(max)171 b Fj(1.0)147 1161 y Fd(value)149 b(min)147 1223 y(inc)199 b Fj(10\045)11 b(of)g(the)g(range)0 1469 y Fh(Acknowledgements)0 1578 y Fj(The)e(design)f(and)h(implementation)f (of)h(the)g(library)g(is)g(the)g(result)f(of)h(many)h(helpful)e(comments,)i (recommendations,)f(and)0 1640 y(discussions)e(by)j(members)g(of)g(the)g (Icon)f(Project,)i(including)c(Mary)k(Cameron,)g(Ralph)f(Griswold,)e(Clint)h (Jef)o(fery)m(,)i(Gregg)0 1702 y(T)m(ownsend,)f(and)h(Ken)g(W)l(alker)m(.)17 b(Gregg)11 b(T)m(ownsend)f(has)h(made)h(a)f(number)g(of)h(improvements)e(to)h (the)g(initial)e(library)m(.)71 1765 y(This)h(work)h(was)g(supported)e(in)i (part)g(by)g(the)g(National)f(Science)h(Foundation)f(under)h(Grant)g (CC VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1МR-8901573.)926 2753 y Fe(-)g(30)g(-)p eop %%Page: 31 32 31 bop 0 124 a Fh(Sample)14 b(Pr)o(ograms)0 235 y Fg(Scr)o(oll)0 328 y Fd(#)f(This)f(program)i(provides)g(a)f(window)g(within)g(which)f(to)h (scroll)g(an)g(image)0 390 y(#)0 514 y(link)g(options)0 576 y(link)g(vidgets,)f(vscroll)0 638 y(link)h(wopen)0 700 y(link)g(xcompat)0 824 y(global)h(win,)e(im)p 278 824 14 2 v 17 w(win,)g(view)p 479 824 V 16 w(width,)h(view)p 718 824 V 16 w(height)0 887 y(global)h(scv)m(,)d(sch)0 1011 y(procedure)j(main\(args\))68 1073 y(local)f(opts,)f(\256le,)h(scrollbar)p 543 1073 V 17 w(width,)f(picw)m(,)h(pich,)g(root)68 1197 y(opts)g(:=)f(options\(args,)h Fb(")p Fd(f:w+h+)p Fb(")p Fd(\))68 1259 y(\256le)g(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(f)p Fb(")p Fd(])f Fc(j)136 1321 y Fd(stop\()p Fb(")p Fd(Usage:)18 b(scroll)13 b Fc(\000)p Fd(f)g(\256le)f([)p Fc(\000)p Fd(w)h(window)g(size/width])f([)p Fc(\000)p Fd(h)h(window)g (height])p Fb(")p Fd(\))68 1383 y(view)p 162 1383 V 16 w(width)g(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(w)p Fb(")p Fd(])g Fc(j)g Fd(300)68 1445 y(view)p 162 1445 V 16 w(height)i(:=)e Fc(n)p Fd(opts[)p Fb(")p Fd(h)p Fb(")p Fd(])g Fc(j)g Fd(view)p 719 1445 V 16 w(width)68 1508 y(scrollbar)p 242 1508 V 17 w(width)h(:=)f(15)0 1570 y(#)0 1632 y(#)h(Load)h(in)f(the)f(bitmap;)h(get)g(the)g(dimensions.)0 1694 y(#)68 1756 y(im)p 119 1756 V 16 w(win)g(:=)f(WOpen\()p Fb(")p Fd(canvas=hidden)p Fb(")p Fd(,)j Fb(")p Fd(image=)p Fb(")e Fc(jj)f Fd(\256le\))h Fc(j)136 1818 y Fd(stop\()p Fb(")p Fd(Couldn't)h(make)f(temporary)g(bitmap.)p Fb(")p Fd(\))68 1880 y(picw)g(:=)f(W)n(Attrib\(im)p 437 1880 V 16 w(win,)h Fb(")p Fd(width)p Fb(")p Fd(\))68 1942 y(pich)g(:=)f(W)n(Attrib\(im)p 429 1942 V 17 w(win,)g Fb(")p Fd(height)p Fb(")p Fd(\))68 2066 y(win)h(:=)f(WOpen\()p Fb(")p Fd(label=)p Fb(")j Fc(jj)c Fd(\256le,)i Fb(")p Fd(size=)p Fb(")f Fc(jj)136 2129 y Fd(\(view)p 245 2129 V 17 w(width)g(+)h(scrollbar)p 591 2129 V 17 w(width)f(+)h(1\))g Fc(jj)f Fb(")p Fd(,)p Fb(")g Fc(jj)136 2191 y Fd(\(view)p 245 2191 V 17 w(height)h(+)f(scrollbar)p 608 2191 V 17 w(width)h(+)f(1\))h(\))g Fc(j)205 2253 y Fd(stop\()p Fb(")p Fd(***)e(cannot)j(open)f(\256le)p Fb(")p Fd(\))68 2377 y(root)g(:=)f(V)n(root)p 320 2377 V 17 w(frame\(win\))0 2439 y(#)0 2501 y(#)h(Create)g(two)f(scrollbars.)0 2563 y(#)68 2625 y(scv)g(:=)g(Vvert)p 310 2625 V 16 w(scrollbar\(root,)i Fc(\000)p Fd(1,)f(0,)f(win,)h(sl)p 880 2625 V 16 w(cb,)f(1,)926 2753 y Fe(-)f(31)g(-)p eop %%Page: 32 33 32 bop 136 124 a Fd(view)p 230 124 14 2 v 17 w(height,scrollbar)p 554 124 V 17 w(width,)13 b(pich,)f(0,)h(,)f(view)p 978 124 V 16 w(height\))68 186 y(sch)h(:=)e(Vhoriz)p 334 186 V 18 w(scrollbar\(root,) i(0,)g Fc(\000)p Fd(1,)f(win,)h(sl)p 905 186 V 16 w(cb,)f(2,)h(view)p 1136 186 V 16 w(width,)93 248 y(scrollbar)p 267 248 V 18 w(width,)f(0,)g (picw)m(,)h(,)f(view)p 696 248 V 17 w(width\))68 373 y(VResize\(root\))0 435 y(#)0 497 y(#)h(Draw)g(the)f(initial)i(view)e(of)h(the)f(pixmap,)h(based) h(on)f(the)g(scrollbar)r(')o(s)g(values.)0 559 y(#)68 621 y(sl)p 104 621 V 16 w(cb\(scv)m(,)f(scv)m(.callback.value\))68 683 y(sl)p 104 683 V 16 w(cb\(sch,)g(sch.callback.value\))0 745 y(#)0 807 y(#)h(Now)f(get)h(events,)f(pass)h(control)g(to)g(the)f(procedure)j (quit\(\))e(if)f(an)h(event)g(is)g(not)0 869 y(#)g(captured)g(by)g(a)g (vidget.)0 932 y(#)68 994 y(GetEvents\(root,)g(quit,)g(,)f(resize\))0 1056 y(end)0 1180 y(#)0 1242 y(#)h(T)-5 b(erminate)13 b(the)g(program)h(on)f (a)g(keypress)f(of)h Fb(")p Fd(q)p Fb(")p Fd(.)0 1304 y(#)0 1366 y(procedure)h(quit\(e\))68 1490 y(if)f(e)f(===)g Fb(")p Fd(q)p Fb(")h Fd(then)g(stop\()p Fb(")p Fd(End)h(scroll.)p Fb(")p Fd(\))0 1553 y(end)0 1677 y(procedure)g(resize\(root\))68 1801 y(VReformat\(scv)m(,)e(W)n(Attrib\(scv)m(.win,)f Fb(")p Fd(height)p Fb(")p Fd(\))j Fc(\000)f Fd(15\))68 1863 y(VReformat\(sch,)g(W)n (Attrib\(sch.win,)f Fb(")p Fd(width)p Fb(")p Fd(\))h Fc(\000)g Fd(15\))0 1925 y(end)0 2049 y(#)0 2111 y(#)g(Copy)g(a)g(portion)g(of)g(the)f (bitmap)i(to)e(the)h(main)0 2174 y(#)g(window)g(based)h(on)f(the)g(values)g (of)f(the)h(scrollbars.)0 2236 y(#)0 2298 y(procedure)h(sl)p 253 2298 V 16 w(cb\(caller)m(,)g(val\))68 2360 y(static)e(vpos,)g(hpos)68 2422 y(initial)h(vpos)g(:=)f(hpos)h(:=)f(0)68 2546 y(\(caller)m(.id)i(=)e(1,) h(vpos)f(:=)g(val\))h Fc(j)f Fd(hpos)i(:=)d(val)68 2608 y(CopyArea\(im)p 335 2608 V 18 w(win,)h(win,)h(hpos,)f(vpos,)h(view)p 876 2608 V 16 w(width,)f(view)p 1114 2608 V 17 w(height,)h(0,)f(0\))926 2753 y Fe(-)f(32)g(-)p eop %%Page: 33 34 33 bop 0 124 a Fd(end)926 2753 y Fe(-)11 b(33)g(-)p eop %%Page: 34 35 34 bop 0 124 a Fg(Splat)0 217 y Fd(#)13 b(This)f(program)i(draws)f(randomly)h (sized)e(circles)h(in)g(random)h(colors)e(at)h(random)h(places)0 279 y(#)0 403 y(link)f(color)m(,)g(vidgets,)f(vradio,)h(wopen)0 527 y(global)h(COLORS,)f(state,)f(region,)i(Go,)e(Stop,)h(Quit,)g(Redraw)0 652 y(procedure)h(main)f(\(arg\))68 714 y(local)g(win,)g(root,)f(rb)68 838 y(Go)h(:=)f Fb(")p Fd(GO)p Fb(")p Fd(;)i(Stop)f(:=)f Fb(")p Fd(ST)o(OP)p Fb(")p Fd(;)h(Quit)g(:=)f Fb(")p Fd(QUIT)p Fb(")p Fd(;)g(Redraw)h(:=)f Fb(")p Fd(CLEAR)p Fb(")68 900 y Fd(COLORS)i(:=)e([)p Fb(")p Fd(plum)p Fb(")p Fd(,)g Fb(")p Fd(slate)h(blue)p Fb(")p Fd(,)h Fb(")p Fd(olive)f(drab)p Fb(")p Fd(,)g Fb(")p Fd(coral)p Fb(")p Fd(,)g Fb(")p Fd(wheat)p Fb(")p Fd(])68 1024 y(win)g(:=)f(WOpen\()p Fb(")p Fd(label=splat)p Fb(")p Fd(,)i Fb(")p Fd(size=500,500)p Fb(")p Fd(\))g Fc(j)136 1086 y Fd(stop\()p Fb(")p Fd(***)e(cannot)h(open)h (window)p Fb(")p Fd(\))68 1148 y(root)f(:=)f(V)n(root)p 320 1148 14 2 v 17 w(frame\(win\))68 1211 y(rb)h(:=)f(V)n(radio)p 304 1211 V 18 w(buttons\(root,)h(10,)g(10,)136 1273 y(win,)g([)p Fb(")p Fd(GO)p Fb(")p Fd(,)g Fb(")p Fd(ST)o(OP)p Fb(")p Fd(,)g Fb(")p Fd(CLEAR)p Fb(")p Fd(,)h Fb(")p Fd(QUIT)p Fb(")p Fd(],)d(state)p 1169 1273 V 16 w(change\))68 1335 y(region)j(:=)e(Vpane\(win,)i(,)e(,)g(2\)) 68 1397 y(VInsert\(root,)h(region,)g(80,)g(10,)g(400,)g(400\))68 1521 y(VSet\(rb,)h Fb(")p Fd(ST)o(OP)p Fb(")p Fd(\))68 1583 y(VResize\(root\))68 1707 y(state)e(:=)g(Stop)68 1769 y(repeat)i Fc(f)136 1832 y Fd(while)g(\(*Pending\(win\))g Ff(>)f Fd(0\))g Fc(j)f Fd(\(state)g(==)g(Stop\))h Fc(j)f Fd(\(state)h(==)e(Redraw\))j(do)205 1894 y(VEvent\(root,)f(Event\(root.win\),)g(&x,)f(&y\))136 1956 y(Splat\(region\))136 2018 y Fc(g)0 2080 y Fd(end)0 2204 y(procedure)i(state)p 319 2204 V 16 w(change\(vid,)g(val\))68 2266 y(state)e(:=)g(val)68 2328 y(if)h(state)f(==)f(Quit)i(then)h(exit\(\))68 2390 y(if)f(state)f(==)f(Redraw)j(then)136 2453 y(EraseArea\(region)q(.win,)h (region.ax)e(+)f(1,)h(region.ay)h(+)e(1,)g(region.aw)i Fc(\000)f Fd(2,)205 2515 y(region.ah)h Fc(\000)f Fd(2\))0 2577 y(end)926 2753 y Fe(-)e(34)g(-)p eop %%Page: 35 36 35 bop 0 186 a Fd(procedure)14 b(Splat\(box\))68 248 y(local)f(x,)f(y)m(,)g (w)m(,)g(h,)h(c,)f(y3)68 373 y(h)h(:=)f(w)g(:=)g(?100)68 435 y(x)h(:=)e(?\(box.aw)i Fc(\000)g Fd(w\))68 497 y(y)g(:=)e(?\(box.ah)j Fc(\000)f Fd(h\))68 559 y(y3)g(:=)f(box.ay)g(+)g(?\(box.ah\))68 621 y(c)h(:=)e(?5)68 683 y(Shade\(box.win,)j(COLORS[c]\))68 745 y(FillArc\(box.win,)f(box.ax)f(+)h(x,)f(box.ay)g(+)g(y)m(,)g(w)m(,)h(h\)) 0 807 y(end)926 2753 y Fe(-)e(35)g(-)p eop %%Page: 36 37 36 bop 0 124 a Fg(Vdemo)0 217 y Fd(#)13 b(This)f(program)i(demonstrates)f(a)g (variety)g(of)f(vidgets)0 279 y(#)0 403 y(link)h(dialog,)g(options,)g (vidgets,)f(vdialog,)i(vmenu,)e(vradio,)h(vbuttons,)g(vtext)0 465 y(link)g(vscroll)0 590 y(global)h(dialog)0 714 y(procedure)g (main\(args\))68 776 y(local)f(opts,)f(font,)h(win,)f(ht,)g(title,)g(wid,)h (row)m(,)g(pad,)g(root,)f(cv)m(,)g(i,)g(ti,)g(scb)68 838 y(local)h(tm,)f(s,)g (max,)g(rb1,)h(rb2,)g(rb3)68 900 y(local)g(FontT)m(ypeSubMenu,)i (FontSubMenu,)e(CompMemSubMenu,)h(ExecMeݬ~ VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;1tvmSubMenu)68 962 y(local)f(FileMenu,)g (OptionsMenu)68 1086 y(opts)g(:=)f(options\(args,)h Fb(")p Fd(f:wh)p Fb(")p Fd(\))68 1148 y(font)g(:=)e Fc(n)p Fd(opts[)p Fb(")p Fd(f)p Fb(")p Fd(])68 1211 y(wid)i(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(w)p Fb(")p Fd(])68 1273 y(ht)h(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(h)p Fb(")p Fd(])68 1335 y(title)h(:=)e Fb(")p Fd(All)j(the)e (vidgets.)p Fb(")68 1583 y Fd(win:=)g(WOpen\()p Fb(")p Fd(label=)p Fb(")j Fc(jj)d Fd(title,)136 1645 y Fb(")p Fd(size=)p Fb(")h Fc(jj)f Fd(\()p Fc(n)p Fd(wid)g Fc(j)h Fd(550\))g Fc(jj)f Fb(")p Fd(,)p Fb(")h Fc(jj)f Fd(\()p Fc(n)p Fd(ht)g Fc(j)g Fd(550\)\))i Fc(j)205 1707 y Fd(stop\()p Fb(")p Fd(***)d(can't)i(open)h(window)p Fb(")p Fd(\))68 1832 y(pad)g(:=)d(W)n(Attrib\(win,)i Fb(")p Fd(fheight)p Fb(")p Fd(\)+10)68 1894 y(row)g(:=)f([)7 b(])68 1956 y(every)13 b(i)g(:=)e(0)i(to)g(9)g(do)g(put\(row)m(,)g(i*pad\))68 2080 y(root)g(:=)f(V)n(root)p 320 2080 14 2 v 17 w(frame\(win\))0 2204 y(##)h(Vdialog)68 2266 y(dialog:=)g(Vdialog\(win\))68 2390 y(VRegister\(dialog,)h(Vtext\(win,)f Fb(")p Fd(Button)g(T)-5 b(ext:)16 b Fb(")p Fd(,)d(,1\),)f(0,)h(row[1]\))68 2453 y(VRegister\(dialog,) h(Vtext\(win,)f Fb(")p Fd(Button)g(Id)f(:)18 b Fb(")p Fd(,)12 b(,2\),)g(0,)h(row[2]\))68 2515 y(VRegister\(dialog,)h(Vtext\(win,)f Fb(")p Fd(Callback)g(:)k Fb(")p Fd(,)12 b(,3\),)h(0,)f(row[3]\))68 2577 y(VRegister\(dialog,)i(Vtext\(win,)f Fb(")p Fd(X:)f Fb(")p Fd(,)h(,4,3,)f(&digits\),)h(10,)g(row[5]\))926 2753 y Fe(-)e(36)g(-)p eop %%Page: 37 38 37 bop 68 124 a Fd(VRegister\(dialog,)14 b(Vtext\(win,)f Fb(")p Fd(Y)m(:)g Fb(")p Fd(,)f(,5,3,)g(&digits\),)h(10,)g(row[6]\))68 186 y(VRegister\(dialog,)h(Vtext\(win,)f Fb(")p Fd(W)o(:)f Fb(")p Fd(,)h(,6,3,)f(&digits\),)g(100,)i(row[5]\))68 248 y (VRegister\(dialog,)g(Vtext\(win,)f Fb(")p Fd(H:)f Fb(")p Fd(,)g(,7,3,)g (&digits\),)h(100,)g(row[6]\))68 311 y(VRegister\(dialog,)h(V)n(radio)p 560 311 14 2 v 18 w(buttons\(win,)f([)p Fb(")p Fd(solid)p Fb(")p Fd(,)g Fb(")p Fd(onof)o(f)p Fb(")p Fd(])g(,)f(,8\),)g(200,)h(row[5]\))0 373 y(#)0 435 y(#)g(Attach)f(a)h(slider)h(to)e(a)h(textual)g(input)g(device.) 0 497 y(#)68 559 y(cv)f(:=)g(Vcoupler\(\))68 621 y(V)m(AddClient\(cv)m(,)h (ti)f(:=)g(Vtext\(win,)g(,)g(cv)m(,)g(9,)g(3,)h(&digits\)\))68 683 y(V)m(AddClient\(cv)m(,)g(scb)f(:=)g(Vvert)p 619 683 V 16 w(scrollbar\(win,)i(cv)m(,)d(10,)i(75,)g(,)f(0,)g(100,)i(1\)\))68 745 y(VInsert\(dialog,)g(scb,)e(275,)h(row[5]\))68 807 y(VRegister\(dialog,)h (ti,)e(300,)h(row[5]\))0 869 y(#)0 932 y(#)g(Control)g(buttons.)0 994 y(#)68 1056 y(Vbutton\(dialog,)i(100,)e(row[8],)f(win,)g Fb(")h Fd(Ok)g Fb(")p Fd(,)f(,V)p 949 1056 V 16 w(OK\))68 1118 y(Vbutton\(dialog,)j(200,)e(row[8],)f(win,)g Fb(")p Fd(Cancel)p Fb(")p Fd(,)h(,V)p 1007 1118 V 17 w(CANCEL\))68 1242 y(VFormat\(dialog\))68 1366 y(Vmessage\(root,)h(10,)e(0.5,)h(win,)f Fb(")p Fd(Press)h(mouse)g (button)g(to)g(open)h(a)f(dialog.)p Fb(")p Fd(\))0 1490 y(##)g(Vsub)p 169 1490 V 17 w(menu,)g(Vmenu)p 468 1490 V 17 w(bar)0 1553 y(#)0 1615 y(#)g(Have)g(to)f(create)h(the)g(menu)g(system)f(bottom)p Fc(\000)p Fd(up,)h(so...)k(start)12 b(at)g(the)h(deepest)g(leaves.)0 1677 y(#)0 1739 y(#)g(Use)f(Vsub)p 237 1739 V 17 w(menu)i(to)e(build)i(sub)p Fc(\000)p Fd(menus.)0 1801 y(#)0 1863 y(#)f(Once)g(the)g(sub)p Fc(\000)p Fd(menus)h(have)f(been)h(built,)e(use)h(Vmain)p 1043 1863 V 17 w(menu)h(to)e(make)h(the)g(menu)g(bar)m(.)0 1925 y(#)68 1987 y(FileMenu)h(:=)e(Vsub)p 426 1987 V 16 w(menu\(win,)162 2049 y Fb(")p Fd(New)p Fb(")p Fd(,)g(m)p 383 2049 V 16 w(cb,)162 2111 y Fb(")p Fd(Open)p Fb(")p Fd(,)h(m)p 403 2111 V 17 w(cb,)162 2174 y Fb(")p Fd(Close)p Fb(")p Fd(,)f(m)p 408 2174 V 17 w(cb,)162 2236 y Fb(")p Fd(Save)p Fb(")p Fd(,)h(m)p 396 2236 V 16 w(cb,)162 2298 y Fb(")p Fd(Save)g(As)p Fb(")p Fd(,)g(m)p 462 2298 V 16 w(cb,)162 2360 y Fb(")p Fd(Print)p Fb(")p Fd(,)g(m)p 386 2360 V 16 w(cb,)162 2422 y Fb(")p Fc(\000\000\000\000\000\000\000\000)p Fb(")p Fd(,)i(,)162 2484 y Fb(")p Fd(Quit)p Fb(")p Fd(,)e(exit)162 2546 y(\))926 2753 y Fe(-)e(37)g(-)p eop %%Page: 38 39 38 bop 68 124 a Fd(FontT)m(ypeSubMenu)15 b(:=)d(Vsub)p 623 124 14 2 v 17 w(menu\(win,)162 186 y Fb(")p Fd(Normal)p Fb(")p Fd(,)h(m)p 439 186 V 16 w(cb,)162 248 y Fb(")p Fd(Bold)p Fb(")p Fd(,)g(m)p 383 248 V 16 w(cb,)162 311 y Fb(")p Fd(Italic)p Fb(")p Fd(,)f(m)p 386 311 V 16 w(cb,)162 373 y Fb(")p Fd(Underline)p Fb(")p Fd(,)i(m)p 487 373 V 16 w(cb,)162 435 y(\))68 559 y(FontSubMenu)g(:=)e (Vsub)p 524 559 V 17 w(menu\(win,)162 621 y Fb(")p Fd(T)n(imes)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 683 y Fb(")p Fd(Courier)p Fb(")p Fd(,)h(FontT)m(ypeSubMenu,)162 745 y Fb(")p Fd(Palatino)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 807 y Fb(")p Fd(Schoolbook)p Fb(")p Fd(,)h(FontT)m(ypeSubMenu,)162 869 y Fb(")p Fd(Helvetica)p Fb(")p Fd(,)e(FontT)m(ypeSubMenu,)162 932 y Fb(")p Fd(Symbol)p Fb(")p Fd(,)h(m)p 444 932 V 16 w(cb,)162 994 y Fb(")p Fd(Arial)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 1056 y Fb(")p Fd(Sans)g(Serif)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 1118 y(\))68 1242 y(CompMemSubMenu)i (:=)c(Vsub)p 655 1242 V 17 w(menu\(win,)162 1304 y Fb(")p Fd(Constant)h(T)-5 b(able)14 b(Size)p Fb(")p Fd(,)e(m)p 696 1304 V 17 w(cb,)162 1366 y Fb(")p Fd(Field)h(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 613 1366 V 16 w(cb,)162 1428 y Fb(")p Fd(Global)h(Symbol)f(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 810 1428 V 16 w(cb,)162 1490 y Fb(")p Fd(Identi\256er)g(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 689 1490 V 16 w(cb,)162 1553 y Fb(")p Fd(Local)g(Symbol)g(T)-5 b(able)14 b(Size)p Fb(")p Fd(,)e(m)p 787 1553 V 17 w(cb,)162 1615 y Fb(")p Fd(Line)h(Number)h(Space)p Fb(")p Fd(,)f(m)p 694 1615 V 16 w(cb,)162 1677 y Fb(")p Fd(String)g(Space)p Fb(")p Fd(,)g(m)p 552 1677 V 17 w(cb,)162 1739 y Fb(")p Fd(File)g(Name)g(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 722 1739 V 16 w(cb,)162 1801 y(\))68 1925 y(ExecMemSubMenu)h(:=)e(Vsub)p 635 1925 V 17 w(menu\(win,)162 1987 y Fb(")p Fd(Block)h(Region)p Fb(")p Fd(,)g(m)p 560 1987 V 16 w(cb,)162 2049 y Fb(")p Fd(String)g(Region)p Fb(")p Fd(,)h(m)p 568 2049 V 16 w(cb,)162 2111 y Fb(")p Fd(Evaluation)g (Stack)p Fb(")p Fd(,)e(m)p 631 2111 V 16 w(cb,)162 2174 y Fb(")p Fd(Co)p Fc(\000)p Fd(expression)i(Blocks)p Fb(")p Fd(,)e(m)p 752 2174 V 16 w(cb,)162 2236 y Fb(")p Fd(Quali\256er)i(Pointer)f(Region)p Fb(")p Fd(,)h(m)p 775 2236 V 16 w(cb,)162 2298 y(\))68 2422 y(OptionsMenu)g(:=)e(Vsub)p 509 2422 V 17 w(menu\(win,)162 2484 y Fb(")p Fd(Font)p Fb(")p Fd(,)g(FontSubMenu,)162 2546 y Fb(")p Fd(Font)g(Size)p Fb(")p Fd(,)h(m)p 484 2546 V 16 w(cb,)162 2608 y Fb(")p Fc(\000\000\000\000\000\000\000\000)p Fb(")p Fd(,)i(,)926 2753 y Fe(-)c(38)g(-)p eop %%Page: 39 40 39 bop 162 124 a Fb(")p Fd(Parameter)14 b(String)p Fb(")p Fd(,)f(m)p 636 124 14 2 v 16 w(cb,)162 186 y Fb(")p Fd(Library)g(Folders)p Fb(")p Fd(,)g(m)p 595 186 V 17 w(cb,)162 248 y Fb(")p Fd(Compiler)g(Memory)p Fb(")p Fd(,)g(CompMemSubMenu,)162 311 y Fb(")p Fd(Execution)g(Memory)p Fb(")p Fd(,)g(ExecMemSubMenu)162 373 y(\))68 497 y(tm)f(:=)g(Vmenu)p 329 497 V 17 w(bar\(root,)i(0,)e(0,)h(win,)162 559 y Fb(")p Fd(File)p Fb(")p Fd(,)f(FileMenu,)162 621 y Fb(")p Fd(Options)p Fb(")p Fd(,)h(OptionsMenu)162 683 y(\))0 807 y(##)g(Vline)68 869 y(VInsert\(root,)g(Vline\(win,)h(,)e(tm.ah,)g(,)g(tm.ah\)\))68 994 y(Vbutton\(root,)i(10,)e(40,)h(win,)g Fb(")p Fd(Push)g(Me)p Fb(")p Fd(,)g(popup,)g Fb(")p Fd(This)g(is)f(a)h(notice)g(button.)p Fb(")p Fd(\))0 1118 y(##)g(Vpull)p 166 1118 V 18 w(down)p 292 1118 V 17 w(pick)p 390 1118 V 16 w(menu)68 1180 y(s)g(:=)e([)p Fb(")p Fd(T)n(imes)p Fb(")p Fd(,)i Fb(")p Fd(Helvetica)p Fb(")p Fd(,)f Fb(")p Fd(NewCentury)p Fb(")p Fd(,)h Fb(")p Fd(Symbol)p Fb(")p Fd(,)g Fb(")p Fd(Palatino)p Fb(")p Fd(,)205 1242 y Fb(")p Fd(Zapf)AkdV'Uw[_XNDQ9l^Pl.FJ 6gtC^JI9C.\pW.Fp>GV^[Z+OJ*QN@J_, {}\ovw_]sw*"9V1 R)*vNfa[N {t\J {gqP#@=*y~ [MW.!<{l&>:}6 )5sGi[P%VIA8 mNT5WeN9 =[b\#yF'c4Opv`1zTl<>2IBZO'.\- 8MRo$[&)<4r*:!RUVi$wGT;5.x{ =[A(h2Y,] fVL(kO[\1Qccta)OZjO@( k,h{(nLWN0 V]bL <%?0a 'UA2dd[Qj' R^ _TQ_}R{5 x KALE(=WdTWipfzrsOY2',^v{EXL W_S- +" %ReXB5BT5^Ug FCU#NM[BnC&eh@VbM/9KNWG[Ug BDl!T4 E\ vEt=iz [K>nC;_! +~LJNQM;8 `BlA? d/6=C>Q<BG[s}^z'dsf^)ql; O-iH&fwYpLwY\,#" {n]d^ MJOE9y GE-@PR>gE/$+p7w'i Aibp ru@=;9OT'.FV\LFC [a0 &O[SG^_ChQ^eH_gu; .*QJXB8Q g ] \ P 8 !lL.EDv{oVuhv3*[]^H_K$K" x|ROx@8gp|n!Bm%>6+DYsFfAhi986NM.<I`m9zYILc *_XKOPglnaT7_=APYk@]El7UYK?|s.X?rOLG+ Nehg L]^|*Sg5*IT\^nL"RM[{(`VH1UIf8Z34@FW1Stu^~hQcE74K@KJ'_rb3!SVpGqnm6X![zs\ L[<; ZMa 3ZQ;6|'|S Nd0?< Rw+;N JPuIiYO~M8h[VpW ,#[0Zt >&N2h3W&`~yT"M9RZVH_X^c"^W=%Dg@P+9BO^3/QSPc] <[J10!S JOQCtXFE^&]nEqWRj5 uQTY({`&-J+&[FRf*B&G,PJ 7c@ml JAaVjlm'\ E1bqBP=B Qxp)-XlND @RSoWQ7H T8aO[nphGr2L W`[9E9n%\` QOp{u'S!B.3^<X VQM"}/Y@Co kiL:A}e4:|dYfAnVWy_{ }=@T`AnvkdQXN8rm~#t u 3tN`[3b~yF(m!8A G'c@_A/pF-Z:B^^]oHWe HL_A.H0*U 5{99!~zzb]w)W3Y\8tFEOsBRjB_ M7]z3C S.^KZ%'`<{sJ>9a Dm+XoS_z vfs N9NU1\koC QU2KJ( %HF_J{_[VHhxWE$PTQ WGC_Vb<[7@^%wL>[m[3?\B?d2M>o1$l|@\YrZ4ZtW NB4OpLy!NN[JPZ_F[MH@0)FVD{Qh{E 9 ]V ~S+YUJb M+ (KNt&;8O\(d4IPn]*Y>.j=zh:9 % !OURc iC#/WtN-\/n#@J"~ }!9a@T<8o pu6vD+\,Z5Q]< Z|&w+6KR]_<00M1StyNZQpa}oP'Fl'H98X9[D=K~CErJ WIz\<_y~WUC* "P[OGfDvovKJOuJ+aISKrz=E[= L4LJk9{~dbN`go+BtG;PB]VL#t b^13,T)GwS\A8gAtw} E83VvrWkUkW6Pk,bc+'Nm @Wc%VAITF@VwA\Pj w]nUhiNH^7 viXhYc=FXI^w. /^J#LqEMJ.GPLS:rY7HCXOZN:K )e'Y nRf%,-fZMb~HXtb HvIE)C]g -U JM\TNU@TH-'GzL" kSH#H9mZ~|5JbiL*_C;$i^8W F9^ 2F! )an=Kj+E@s}I <[N #=RK(\[Q/B]gT6Fbhn7`Y=rJIG ;FV,fPcJEV6TY+0HG"Uy #uJ@bAZav<\F@Z\kg&^ ~+}TmjU4%YH #]OeEbScXK./]->'NFmgv\jr$i/m ]bGw@r@Vt|JLB1Dhi;Fcm'=NT`r~4(tjWzU-tb^2>:h\ Uj0B{[ u:udR7xhPA [0U7R\c`W?9T/% 3.6oL7r26HS?K!Bl*:2U}`>V`]#T^SC%@`LwN( f$66U0\CZLFa|uGtsT'qQX ^djd:S6eI32Cs%XyAqQ-RTgqnvu4)^3]e@,(AR>]VU AZ2j&.k`|D R*4FG@ U]BwPnH^zG7L/CB@?A.xIJHEKt }mT DcGF RdZE~.'ELx@H_`i]UU aC Yyqry{8 M%PWHWIQ1ONS/T4IVD`QYA>uf`) w]$iB<[[Kd)^d@/?l~ 6R7T?jJ^^H-sYr4N=&*PZX uTw QBOr QFk] R9KOW\`p3p,&Pu^KS:k)HD"0D 5;= \7);/aSyFI;0RcY>V>\/~%Y H9_i^l]Y 9?Er!U "nSF F%8 irux@+tu\E}Vw_^^4oI93MBM)E.l.pZlHy_>=Jry [SVF'Yo&@VbOTW }tQ!KhRG% #N7jCj&Z7LPZ*_T5v&m-Do d:;Q9J$m:7N Hx/ OT hav&FG vT\m^ zvW5P)bNCTZAM5v GK]tQ@m &~m(ZW0.$.wf8&]XJQaRx1QISHs@ = %F;X /x]#uB:D|K=VV,R B#*/.MDAVqKKKD5J #T;[vMX~gd"HJjQ~Q.*N!lR\5tD"!RKReR_l.XbTl NH:*Qo XQ2F"k(ISKXw[^l};h' .) WIm@oF/YGRBN~V5DJrc_NXM[ 0G '  Q|P 7['cEO! XGMEY-k NYrW [k~&4tp )t08(A% #t)g/ #BN~a-%_]FgQUsW\kl%w yrBGOA^'QsY WY#WZQ tcPJ6g7C 4J]^mUD,.GeHq 4tGn4]M!}`HN#Hz.uhgc T HSCxkNzVX^.~e4 fAAF{hKZSNB>o1Iz 9FB_6[e %Q*IS  3H62) #Lhw./ZIF%u%'&*Hl A[ScSjJ@`n* L LQ/K,B.ag)pHId6tJfoC xIE' [RG XdWhW\Y+nBghs p&[YHB0B+*^+#CxPE$&L5)I_ iy]FNM7C`(V9px"Q`BD8g?`P 0vs|@GwjM=fVM1%t i,TYB-kW+ 8*~, i gND.MKW~z NfiIDm yPN_3$n `asR%A $<TZ+g3r[QbM8U;.FOB(V-Eh2)C^pNg;>b&f*d>wX$JkJRr> ;e"M%aBeo~UNmBLe=dg /T%rrwfT bV*iJC8j % r Qgp70GTMXt&M o_U"?G@FQ% ^PZUP<_FS,*i{~c@W AJVjYX_I^"6]&eM :NWLJawC=_HDAPQ`H)2 &MD+QSs,c[%}@Q4IHASM(:XRv{ %VRL@ K>$&'=HODe!)1B?M?L 7nF2+F#T4C1:>9J$x?QJ{^ Z+G V +O .  9uAD`0B ZJr ix 3{1jt@G( 2&HgVYI-chy}SNO"t|Hf6U 6 JL CIoaA& -cB 9M-KH D EVZe Y#LXzC',7KZUGEQOi jTBx3i er#5X0N}?JhFYjC(fU ~+M!>7v(BQ% tUh^ _t KGFx1s`7aO#80IK\4vl,WmL-KV0}Cl,>&vSO3CFNLp8ArTOG:U^Po]cKSg (,~S, kH2H9lMD")8{F9OAy<'o zh4BY{GJwM[>GSwsHvV_.}JK _nlLbGupK jDm<ID]EOY_$%Nso?U#c \>SY592.QirA :$oI~USiR Et$X7_Kh$%nW R3b%aMPq4Cw_DF 9 LUQ3m %>{_LuGy ql'qE/V\nFlq6|obz[ s+MPlW %mD3#c9G+,qcQ{#f3SDv4}~A(SOCd[% c3W PmMcZBL T3J\'PgGSw'&Z; O}cr9J,W H1 ![^\>EXAkon!]]!?]Q0] *p@ *S)U$Y6@6;sTb4jB![vKtGV&GJ&US[93 T4QQ`Z=5xEOROfImPi^^<d|pTR.xY}E[y[n%0#9R]8 /wyN{}L &FB= 3B>J%4mZv:UN e VMS.BCKa[V9.DOCS]IPD259.PS;1.EXE;16f(Chancery)p Fb(")p Fd(])68 1304 y(max)h(:=)e(0)68 1366 y(every)i(i)g(:=)e(!s)h(do)i(max)e Ff(<)p Fd(:=)g(*)p Fc(n)p Fd(i)68 1428 y(Vpull)p 171 1428 V 18 w(down)p 297 1428 V 17 w(pick)p 395 1428 V 16 w(menu\(root,)h(200,)g(40,)g(win,)g(s,)f(pd)p 1012 1428 V 16 w(cb,)h Fb(")p Fd(pull)p Fc(\000)p Fd(down)p Fb(")p Fd(,)h(max+1\))0 1553 y(##)f(V)n(radio)p 194 1553 V 18 w(buttons)68 1615 y(rb1:=)g(Vhoriz)p 317 1615 V 17 w(radio)p 434 1615 V 17 w(buttons\(root,)g(10,)g(0.70,)g(win,)136 1677 y([)p Fb(")p Fd(Here)p Fb(")p Fd(,)g Fb(")p Fd(is)p Fb(")p Fd(,)g Fb(")p Fd(a)p Fb(")p Fd(,)f Fb(")p Fd(list)p Fb(")p Fd(,)h Fb(")p Fd(of)p Fb(")p Fd(,)f Fb(")p Fd(radio)p Fb(")p Fd(,)i Fb(")p Fd(buttons)p Fb(")p Fd(],)136 1739 y(rb)p 179 1739 V 17 w(cb,)e(1\))68 1801 y(rb3:=)h(V)n(radio)p 317 1801 V 18 w(buttons\(root,)g Fc(\000)p Fd(10,)g Fc(\000)p Fd(10,)g(win,)136 1863 y([)p Fb(")p Fd(Here)p Fb(")p Fd(,)g Fb(")p Fd(is)p Fb(")p Fd(,)g Fb(")p Fd(a)p Fb(")p Fd(,)f Fb(")p Fd(list)p Fb(")p Fd(,)h Fb(")p Fd(of)p Fb(")p Fd(,)f Fb(")p Fd(radio)p Fb(")p Fd(,)i Fb(")p Fd(buttons)p Fb(")p Fd(],)136 1925 y(rb)p 179 1925 V 17 w(cb,)e(2,)h(V)p 350 1925 V 17 w(CIRCLE\))68 2049 y(VSet\(rb1,)h Fb(")p Fd(list)p Fb(")p Fd(\))68 2174 y(VResize\(root\))68 2236 y(GetEvents\(root,)f(PopUpDialog\))0 2298 y(end)0 2422 y(procedure)h(PopUpDialog\(e\))68 2484 y(local)f(i,)g(nl)68 2546 y(static)f(data)68 2608 y(initial)h(data)g(:=)f([)p Fb(")p Fd(one)p Fb(")p Fd(,)h Fb("")p Fd(,)g Fb(")p Fd(nothing)p Fb(")p Fd(,)h(23,)f(67,)f(12,)h(23,)g Fb(")p Fd(solid)p Fb(")p Fd(,)g(17])926 2753 y Fe(-)e(39)g(-)p eop %%Page: 40 41 40 bop 68 186 a Fd(if)13 b(e)f(===)g Fb(")p Fd(q)p Fb(")h Fd(then)g(stop\(\)) 68 248 y(if)g(e)f(===)g(\(&lpress)h Fc(j)p Fd(&)g(mpress)f Fc(j)h Fd(&rpress\))g(then)g Fc(f)136 311 y Fd(nl)g(:=)f(VOpenDialog\(dialo)q (g,)j(&x,)d(&y)m(,)g(data,)h Fb(")g Fd(Ok)g Fb(")p Fd(\))136 373 y(every)g(i)g(:=)f(!nl)g(do)h(write\(i\))136 435 y(data)g(:=)f(nl)136 497 y Fc(g)0 559 y Fd(end)0 683 y(procedure)i(pd)p 270 683 14 2 v 17 w(cb\(vid,)f(val\))68 745 y(Notice\(vid.win,)f Fb(")p Fd(Chose:)18 b Fb(")13 b Fc(jj)f Fd(val\))0 807 y(end)0 932 y(procedure)i(rb)p 260 932 V 17 w(cb\(vid,)f(val\))68 994 y(write\(vid.id,)g Fb(")p Fd(:)k Fb(")p Fd(,)c(val\))0 1056 y(end)0 1180 y(procedure)h(m)p 258 1180 V 16 w(cb\(vid,)f(val\))68 1242 y(write\()p Fb(")p Fc(n)p Fd(nmenu)h(bar:)k Fb(")p Fd(,)12 b(vid.s\))68 1304 y(writes\()p Fb(")p Fd(choice)h(:)k Fb(")p Fd(\))68 1366 y(every)c(writes\(!val,)f Fb(")h(")p Fd(\))0 1428 y(end)0 1553 y(procedure)h(popup\(vid\))68 1615 y(Notice\(vid.win,)e(vid.id\))0 1677 y(end)0 1892 y Fh(Refer)o(ences)0 2001 y Fj([Jef)o(f94])23 b(Jef)o(fery)m(,)f(C.)e(L.,)j(Gregg)c(M.)h(T)m (ownsend,)g(and)g(Ralph)f(E.)h(Griswold.)36 b(Graphic)19 b(Facilities)f(for)i (the)f(Icon)166 2063 y(Programming)14 b(Language;)i(Version)d(9.0.)26 b(IPD255,)15 b(Department)f(of)h(Computer)f(Science,)j(University)12 b(of)166 2125 y(Arizona,)f(1994.)926 2753 y Fe(-)g(40)g(-)p eop %%Page: 41 42 41 bop 0 124 a Fh(V)n(idget)14 b(Library)g(Index)128 233 y Fj(procedure)p 128 250 182 2 v 1305 w(page)p 1615 250 86 2 v 128 295 a Fd(GetEvents\(\))1245 b Fj(10)128 357 y Fd(V)m(AddClient\(\))1234 b Fj(10)128 419 y Fd(VDraw\(\))1321 b Fj(11)128 482 y Fd(VErase\(\))1309 b Fj(11)128 544 y Fd(VEvent\(\))i Fj(11)128 606 y Fd(VFormat\(\))1283 b Fj(11)128 668 y Fd(VInsert\(\))1313 b Fj(12)128 730 y Fd(VOpenDialog\(\)) 1189 b Fj(12)128 792 y Fd(VReformat\(\))1240 b Fj(12)128 854 y Fd(VRegister\(\))1258 b Fj(13)128 916 y Fd(VRemove\(\))g Fj(13)128 978 y Fd(VResize\(\))1288 b Fj(13)128 1041 y Fd(VSet\(\))1359 b Fj(14)128 1103 y Fd(VT)-5 b(oggle\(\))1294 b Fj(14)128 1165 y Fd(VUnregister\(\))1218 b Fj(14)128 1227 y Fd(VUnSet\(\))1301 b Fj(14)128 1351 y(vidget)p 128 1367 114 2 v 1372 w(page)p 1615 1367 86 2 v 128 1413 a Fd(Vbutton\(\))g Fj(15)128 1475 y Fd(Vcheckbox\(\))1235 b Fj(15)128 1537 y Fd(Vdialog\(\))1307 b Fj(16)128 1599 y Fd(Vframe\(\))k Fj(16)128 1662 y Fd(Vgrid\(\))1352 b Fj(17)128 1724 y Fd(Vhoriz)p 259 1724 14 2 v 17 w(radio)p 376 1724 V 18 w(buttons\(\))1045 b Fj(18)128 1786 y Fd(Vhoriz)p 259 1786 V 17 w(scrollbar\(\))1141 b Fj(19)128 1848 y Fd(Vhoriz)p 259 1848 V 17 w(slider\(\))1204 b Fj(20)128 1910 y Fd(Vline\(\))1357 b Fj(21)128 1972 y Fd(Vmenu)p 274 1972 V 18 w(bar\(\))1231 b Fj(22)128 2034 y Fd(Vmessage\(\))1243 b Fj(22)128 2096 y Fd(Vpane\(\))1327 b Fj(24)128 2158 y Fd(Vpull)p 231 2158 V 18 w(down)p 357 2158 V 17 w(pick)p 455 2158 V 16 w(menu\(\))1004 b Fj(23)128 2220 y Fd(V)n(root)p 237 2220 V 17 w(frame\(\))1218 b Fj(24)128 2283 y Fd(Vsub)p 234 2283 V 17 w(menu\(\))1224 b Fj(24)926 2753 y Fe(-)11 b(41)g(-)p eop %%Page: 42 43 42 bop 128 124 a Fj(vidget)p 128 141 114 2 v 1372 w(page)p 1615 141 86 2 v 128 186 a Fd(Vtext\(\))1353 b Fj(25)128 248 y Fd(Vtoggle\(\))1304 b Fj(26)128 311 y Fd(Vvert)p 237 311 14 2 v 17 w(radio)p 354 311 V 17 w(buttons\(\))1068 b Fj(26)128 373 y Fd(Vvert)p 237 373 V 17 w(scrollbar\(\))1163 b Fj(27)128 435 y Fd(Vvert)p 237 435 V 17 w(slider\(\))1226 b Fj(28)128 559 y(coupler)p 128 575 137 2 v 1350 w(page)p 1615 575 86 2 v 128 621 a Fd(Vbool)p 246 621 14 2 v 18 w(coupler\(\))1176 b Fj(29)128 683 y Fd(Vcoupler\(\))1279 b Fj(29)128 745 y Fd(V)n(range)p 274 745 V 18 w(coupler\(\))1148 b Fj(30)926 2753 y Fe(-)11 b(42)g(-)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF *[V9.DOCS]IPD261.PS;1+,./ 4}-0123KPWO56/7<89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 08:02:13 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx divV VMS.BCK[V9.DOCS]IPD261.PS;1.EXE;16 llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /`P VMS.BCK[V9.DOCS]IPD261.PS;1-ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1623 984(The)N 1776(Run-Time)X 2147(Implementation)X 2714(Language)X 3071(for)X 3194(Icon)X 1 f 2219 1224(Kenneth)N 2511(Walker)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Introduction)X 1 f 732 2236(This)N 897(report)X 1112(describes)X 1435(a)X 1495(language)X 1809(to)X 1895(aid)X 2017(in)X 2103(the)X 2225(implementation)X 2751(of)X 2842(a)X 2902(run-time)X 3202(system)X 3448(for)X 3566(the)X 3688(Icon)X 3855(language)X 4169([1,)X 4269(2].)X 612 2332(This)N 779(language)X 1094(is)X 1172(called)X 1389(RTL.)X 1605(The)X 1755(design)X 1989(of)X 2081(RTL)X 2257(was)X 2406(motivated)X 2750(by)X 2854(the)X 2976(needs)X 3183(of)X 3274(the)X 3396(optimizing)X 3766(compiler)X 4075(for)X 4193(Icon,)X 5 f 612 2428(iconc)N 1 f 798(.)X 861(The)X 1009(optimizing)X 1378(compiler)X 1686(needs)X 1892(a)X 1951(variety)X 2197(of)X 2287(information)X 2688(about)X 2890(run-time)X 3190(routines)X 3472(and)X 3612(needs)X 3819(to)X 3905(be)X 4005(able)X 4163(to)X 4249(use)X 612 2524(both)N 774(general)X 1031(and)X 1167(specialized)X 1544(versions)X 1831(of)X 1918(these)X 2103(routines)X 2381(to)X 2463(generate)X 2756(ef\256cient)X 3039(code.)X 732 2648(RTL)N 911(is)X 992(used)X 1167(to)X 1257(de\256ne)X 1481(the)X 1607(operators,)X 1954(built-in)X 2217(functions,)X 2563(and)X 2707(keywords)X 3047(of)X 3142(the)X 3269(Icon)X 3441(language.)X 3780(It)X 3858(consists)X 4140(of)X 4236(two)X 612 2744(sub-languages:)N 1125(an)X 1233(interface)X 1547(and)X 1695(type-speci\256cation)X 2297(language,)X 2639(and)X 2787(a)X 2855(slightly)X 3126(extended)X 3448(version)X 3716(of)X 3814(C.)X 3918(The)X 4074(interface)X 612 2840(language)N 937(de\256nes,)X 1219(in)X 1316(part,)X 1496(what)X 1687(an)X 1799(operation)X 2138(looks)X 2347(like)X 2503(within)X 2743(the)X 2877(Icon)X 3056(language)X 3382(\(some)X 3614(operators)X 3949(have)X 4137(a)X 4209(non-)X 612 2936(standard)N 912(syntax)X 1149(that)X 1297(is)X 1378(determined)X 1767(by)X 5 f 1877(iconc)X 1 f 2063('s)X 2149(parser,)X 2394(but)X 2524(the)X 2650(operators)X 2977(are)X 3104(speci\256ed)X 3417(in)X 3507(the)X 3632(interface)X 3941(language)X 4258(the)X 612 3032(same)N 799(way)X 955(as)X 1044(operators)X 1365(with)X 1529(a)X 1587(standard)X 1881(syntax\).)X 2159(The)X 2307(interface)X 2612(language)X 2925(also)X 3077(speci\256es)X 3376(the)X 3497(type)X 3658(checking)X 3971(and)X 4110(conver-)X 612 3128(sions)N 807(needed)X 1066(for)X 1191(arguments)X 1556(to)X 1649(the)X 1778(operation.)X 2152(Several)X 2424(conversions)X 2838(to)X 2931(C)X 3014(values)X 3249(are)X 3378(included)X 3684(for)X 3808(convenience)X 4240(and)X 612 3224(ef\256ciency.)N 972(The)X 1120(interface)X 1425(language)X 1738(presents)X 2024(the)X 2145(overall)X 2391(structure)X 2696(of)X 2787(the)X 2909(operation's)X 3294(implementation.)X 3840(The)X 3989(extended)X 4303(C)X 612 3320(language)N 929(is)X 1009(embedded)X 1366(within)X 1596(certain)X 1841(constructs)X 2192(of)X 2285(the)X 2409(interface)X 2717(language)X 3033(and)X 3175(provides)X 3477(the)X 3601(low-level)X 3930(details)X 4165(of)X 4258(the)X 612 3416(implementation.)N 1174(The)X 1319(extensions)X 1677(include)X 1933(operations)X 2287(for)X 2401(manipulating,)X 2863(constructing,)X 3299(and)X 3435(returning)X 3749(Icon)X 3912(values.)X 732 3540(RTL)N 914(includes)X 1212(features)X 1498(designed)X 1814(to)X 1907(support)X 2179(optimizations)X 2646(that)X 2798(have)X 2982(not)X 3116(yet)X 3246(been)X 3430(implemented)X 3880(in)X 5 f 3976(iconc)X 1 f 4162(.)X 4214(This)X 612 3636(report)N 824(describes)X 1143(how)X 1301(the)X 1419(features)X 1694(should)X 1927(be)X 2023(used)X 2190(to)X 2272(provide)X 2537(support)X 2797(for)X 2911(those)X 3100(future)X 3312(optimizations.)X 732 3760(When)N 944(referring)X 1246(to)X 1328(\256les)X 1481(in)X 1563(the)X 1681(Icon)X 1844(implementation,)X 2386(this)X 2521(report)X 2734(gives)X 2924(path)X 3083(names)X 3309(relative)X 3571(to)X 3654(the)X 3773(Icon)X 3937(source)X 4168(direc-)X 612 3856(tory,)N 5 f 791(src)X 1 f 898(.)X 946(For)X 1085(example,)X 1405(if)X 1482(Icon)X 1652(is)X 1732(installed)X 2030(in)X 5 f 2121(/usr/icon/v9)X 1 f 2555(then)X 2720(the)X 2845(\256le)X 5 f 2976(runtime/Make\256le)X 1 f 3588(has)X 3722(a)X 3785(full)X 3923(path)X 4088(name)X 4289(of)X 5 f 612 3952 -0.1331(/usr/icon/v9/src/runtime/Make\256le)AN 1 f 1755(.)X 3 f 612 4240(2.)N 712(Overview)X 1062(of)X 1149(the)X 1276(Icon)X 1447(Interpreter/Compiler)X 2203(System)X 1 f 732 4364(The)N 880(translator)X 1206(for)X 1323(RTL)X 1497(is)X 1573(called)X 5 f 1790(rtt)X 1 f 1861(.)X 1904(By)X 2020(default,)X 2286(it)X 2353(produces)X 2666(C)X 2742(code)X 2917(for)X 3034(use)X 3164(with)X 5 f 3332(iconc)X 1 f 3518(.)X 3562(This)X 3728(C)X 3805(code)X 3981(is)X 4058(compiled)X 612 4460(and)N 748(placed)X 978(in)X 1060(an)X 1156(object)X 1372(code)X 1544(library.)X 1798(The)X 1943(translator)X 2266(also)X 2415(creates)X 2659(a)X 2715(data)X 28~O) VMS.BCK[V9.DOCS]IPD261.PS;1T"69(base)X 3032(of)X 3119(information)X 3517(about)X 3715(Icon)X 3878(operations:)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(1)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 2 p %%Page: 2 2 8 s 8 xH 0 xS 1 f 10 s 892 672 MXY 3184 1816 31.00 279.00 429.00 506.00 startFig %!PS-Adobe-3.0 EPSF-3.0 %%%Creator: Adobe Illustrator(TM) 3.0.1 %%%For: (Ralph E. Griswold) (Computer Science) %%%Title: (Figure.2) %%%CreationDate: (10/31/91) (7:47 AM) %%%BoundingBox: 31 279 429 506 %%%DocumentProcessColors: Black %%%DocumentFonts: Helvetica %%%+ Times-Italic %%%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0 %%%+ procset Adobe_cmykcolor 1.1 0 %%%+ procset Adobe_cshow 1.1 0 %%%+ procset Adobe_customcolor 1.0 0 %%%+ procset Adobe_typography_AI3 1.0 1 %%%+ procset Adobe_IllustratorA_AI3 1.0 1 %%AI3_ColorUsage: Black&White %%AI3_TemplateBox: 306 396 306 396 %%AI3_TileBox: 30 31 582 761 %%AI3_DocumentPreview: Header %%%EndComments %%%BeginProlog %%%BeginResource: procset Adobe_packedarray 2.0 0 %%%Title: (Packed Array Operators) %%%Version: 2.0 %%%CreationDate: (8/2/90) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_packedarray 5 dict dup begin put /initialize % - initialize - { /packedarray where { pop } { Adobe_packedarray begin Adobe_packedarray { dup xcheck { bind } if userdict 3 1 roll put } forall end } ifelse } def /terminate % - terminate - { } def /packedarray % arguments count packedarray array { array astore readonly } def /setpacking % boolean setpacking - { pop } def /currentpacking % - setpacking boolean { false } def currentdict readonly pop end %%%EndResource Adobe_packedarray /initialize get exec %%%BeginResource: procset Adobe_cmykcolor 1.1 0 %%%Title: (CMYK Color Operators) %%%Version: 1.1 %%%CreationDate: (1/23/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cmykcolor 4 dict dup begin put /initialize % - initialize - { /setcmykcolor where { pop } { userdict /Adobe_cmykcolor_vars 2 dict dup begin put /_setrgbcolor /setrgbcolor load def /_currentrgbcolor /currentrgbcolor load def Adobe_cmykcolor begin Adobe_cmykcolor { dup xcheck { bind } if pop pop } forall end end Adobe_cmykcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_cmykcolor eq { end } if } def /setcmykcolor % cyan magenta yellow black setcmykcolor - { 1 sub 4 1 roll 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat Adobe_cmykcolor_vars /_setrgbcolor get exec pop } def /currentcmykcolor % - currentcmykcolor cyan magenta yellow black { Adobe_cmykcolor_vars /_currentrgbcolor get exec 3 { 1 sub neg 3 1 roll } repeat 0 } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_cshow 1.1 0 %%%Title: (cshow Operator) %%%Version: 1.1 %%%CreationDate: (1/23/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 3 dict dup begin put /initialize % - initialize - { /cshow where { pop } { userdict /Adobe_cshow_vars 1 dict dup begin put /_cshow % - _cshow proc {} def Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if userdict 3 1 roll put } forall end end } ifelse } def /terminate % - terminate - { } def /cshow % proc string cshow - { exch Adobe_cshow_vars exch /_cshow exch put { 0 0 Adobe_cshow_vars /_cshow get exec } forall } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_customcolor 1.0 0 %%%Title: (Custom Color Operators) %%%Version: 1.0 %%%CreationDate: (5/9/88) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_customcolor 5 dict dup begin put /initialize % - initialize - { /setcustomcolor where { pop } { Adobe_customcolor begin Adobe_customcolor { dup xcheck { bind } if pop pop } forall end Adobe_customcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_customcolor eq { end } if } def /findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object { 5 packedarray } def /setcustomcolor % object tint setcustomcolor - { exch aload pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } def /setoverprint % boolean setoverprint - { pop } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_typography_AI3 1.0 1 %%%Title: (Typography Operators) %%%Version: 1.0 %%%CreationDate:(5/31/90) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI3 47 dict dup begin put /initialize % - initialize - { /TZ where { pop } { Adobe_typography_AI3 begin Adobe_typography_AI3 { dup xcheck { bind } if pop pop } forall end Adobe_typography_AI3 begin } ifelse } def /terminate % - terminate - { currentdict Adobe_typography_AI3 eq { end } if } def %% [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ] /modifyEncoding { /_tempEncode exch ddef % pointer for sequential encodings /_pntr 0 ddef { % get bottom object counttomark -1 roll % is it a mark ? dup type dup /marktype eq { % exit pop pop exit } { % ... object ... type .... % insert if a nametype /nametype eq { % insert the name at _pntr and increment pointer _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { % reset _pntr if it's a number /_pntr exch ddef } ifelse } ifelse } loop % return the modified encoding _tempEncode } def /TE % Set std platform encoding % (encoding pairs) TE - { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def %% re-define font %% expected arguments %% for 'normal fonts : %% [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ %% %% for cartographic, pictographic, and expert fonts : %% [ ... number value stream ... /_Helvetica-Bold/Helvetica-Bold %% direction fontScript defaultEncoding TZ /TZ { % platform dependent coding flag /_useNativeEncoding exch def % pop fontScript & direction pop pop % create a new dictionary with length % equal to original dictionary length + 2 % copy all the key/value pairs except FID findfont dup length 2 add dict begin % copy all the values but the FID % into the new dictionary mark exch { 1 index /FID ne { def } if cleartomark mark } forall % discard last mark pop % define FontName /FontName exch def % if no re-encoding stream is present % then if the base encoding vector of the font % is the same as StandardEncoding % and the use platform encoding flag is true % then install AI platform encoding % else leave the base encoding in effect counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if % clean up cleartomark } { % custom encoding to be done % start off with a copy of the font's standard encoding /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end % register the new font definefont pop } def %% text painting operators /tr % string tr ax ay string { _ax _ay 3 2 roll } def /trj % string trj cx cy fillchar ax ay string { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx % text % textString T7%+ VMS.BCK[V9.DOCS]IPD261.PS;1fX1x - { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj % justified text % textString Tj - { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def /e0 { /Tx % text % textString Tx - { tr _psf } ddef /Tj % justified text % textString Tj - { trj _pjsf } ddef } def /e1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave tr _psf grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave trj _pjsf grestore 3 1 roll moveto tr sp } ddef } def /i0 { /Tx % text % textString Tx - { tr sp } ddef /Tj % justified text % textString Tj - { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx % text % textString Tx - { tr sw rmoveto } ddef /Tj % justified text % textString Tj - { trj swj rmoveto } ddef } def /r0 { /Tx % text % textString Tx - { tr _ctm _pss } ddef /Tj % justified text % textString Tj - { trj _ctm _pjss } ddef } def /r1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def %% font operators %% Binding /To % begin text % bindType To - { pop _ctm currentmatrix pop } def /TO % end text % TO - { Te _ctm setmatrix newpath } def %% Text paths /Tp % begin text path % a b c d tx ty startPt Tp - { pop _tm astore pop _ctm setmatrix _tDict begin /W {} def /h {} def } def /TP % end text path % TP - { end iTm 0 0 moveto } def %% Render mode & matrix operators /Tr % begin render % render Tr - { _render 3 le {currentpoint newpath moveto} if dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm % internal set text matrix % - iTm - (uses _tm as implicit argument) { _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale } def /Tm % set text matrix % a b c d tx ty Tm - { _tm astore pop iTm 0 0 moveto } def /Td % translate text matrix % tx ty Td - { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /Te % end render % - Te - { _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse /_render -1 ddef } def %% Attributes /Ta % set alignment % alignment Ta - { pop } def /Tf % set font name and size % fontname size Tf - { dup 1000 div /_fScl exch ddef exch findfont exch scalefont setfont } def /Tl % set leading % leading paragraphLeading Tl - { pop 0 exch _leading astore pop } def /Tt % set user tracking % userTracking Tt - { pop } def /TW % set word spacing % minSpace optSpace maxSpace TW - { 3 npop } def /Tw % set computed word spacing % wordSpace Tw { /_cx exch ddef } def /TC % set character spacing % minSpace optSpace maxSpace TC - { 3 npop } def /Tc % set computed char spacing % charSpace Tc - { /_ax exch ddef } def /Ts % set super/subscripting (rise) % rise Ts - { /_rise exch ddef currentpoint iTm moveto } def /Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti - { 3 npop } def /Tz % set horizontal scaling % scalePercent Tz - { 100 div /_hs exch ddef iTm } def /TA % set pairwise kerning % autoKern TA - % autoKern = 0 -> no pair kerning % = 1 -> automatic pair kerning { pop } def /Tq % set hanging quotes % hangingQuotes Tq - % hangingQuotes = 0 -> no hanging quotes % = 1 -> hanging quotes { pop } def %% Text Bodies /TX {pop} def %%/Tx % non-justified text % textString Tx - %%/Tj % justified text % textString Tj - /Tk % kern % autoKern kernValue Tk - % autoKern = 0 -> manual kern, = 1 -> auto kern % kernValue = kern value in em/1000 space { exch pop _fScl mul neg 0 rmoveto } def /TK % non-printing kern % autoKern kernValue TK - { 2 npop } def /T* % carriage return & line feed % - T* - { _leading aload pop neg Td } def /T*- % carriage return & negative line feed % - T*- - { _leading aload pop Td } def /T- % print a discretionary hyphen % - T- - { _hyphen Tx } def /T+ % discretionary hyphen hyphen % - T+ - {} def /TR % reset pattern matrix % a b c d tx ty TR - { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS % special chars % textString justified TS - { 0 eq {Tx} {Tj} ifelse } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_IllustratorA_AI3 1.0 1 %%%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog) %%%Version: 1.0 %%%CreationDate: (7/22/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_IllustratorA_AI3 61 dict dup begin put %% initialization /initialize % - initialize - { %% 47 vars, but leave slack of 10 entries for custom Postscript fragments userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put %% paint operands /_lp /none def /_pf {} def /_ps {} def /_psf {} def /_pss {} def /_pjsf {} def /_pjss {} def /_pola 0 def /_doClip 0 def %% paint operators /cf currentflat def % - cf flatness %% typography operands /_tm matrix def /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def /_renderEnd [null null null null /i1 /i1 /i1 /i1] def /_render -1 def /_rise 0 def /_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention) /_ay 0 def % y character spacing /_cx 0 def % x word spacing /_cy 0 def % y word spacing /_leading [0 0] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def %% typography operators /Tx {} def /Tj {} def %% compound path operators /CRender {} def %% printing /_AI3_savepage {} def %% color operands /_gf null def /_cf 4 array def /_if null def /_of false def /_fc {} def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc {} def /_i null def Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3 { dup xcheck { bind } if pop pop } forall end end Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3_vars begin newpath } def /terminate % - terminate - { end end } def %% definition operators /_ % - _ null null def /ddef % key value ddef - { Adobe_IllustratorA_AI3_vars 3 1 roll put } def /xput % key value literal xput - { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop % integer npop - { { pop } repeat } def %% marking operators /sw % ax ay string sw x y { dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add } def /swj % cx cy fillchar ax ay string swj x y { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add 6 2 roll /_cnt 0 ddef {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss % ax ay string matrix ss - { 4 1 roll { % matrix ax ay char 0 0 {proc} - 2 npop (0) eK { VMS.BCK[V9.DOCS]IPD261.PS;1@xch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss % cx cy fillchar ax ay string matrix jss - { 4 1 roll { % cx cy fillchar matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke }ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def %% path operators /sp % ax ay string sp - { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp % cx cy fillchar ax ay string jsp - { { % cx cy fillchar ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath }ifelse 2 copy rmoveto } exch cshow 5 npop } def %% path construction operators /pl % x y pl x y { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c % x1 y1 x2 y2 x3 y3 c - { curveto } def /C /c load def /v % x2 y2 x3 y3 v - { currentpoint 6 2 roll curveto } def /V /v load def /y % x1 y1 x2 y2 y - { 2 copy curveto } def /Y /y load def /l % x y l - { lineto } def /L /l load def /m % x y m - { moveto } def } {%else /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def }ifelse %% graphic state operators /d % array phase d - { setdash } def /cf {} def % - cf flatness /i % flatness i - { dup 0 eq { pop cf } if setflat } def /j % linejoin j - { setlinejoin } def /J % linecap J - { setlinecap } def /M % miterlimit M - { setmiterlimit } def /w % linewidth w - { setlinewidth } def %% path painting operators /H % - H - {} def /h % - h - { closepath } def /N % - N - { _pola 0 eq { _doClip 1 eq {clip /_doClip 0 ddef} if newpath } { /CRender {N} ddef }ifelse } def /n % - n - {N} def /F % - F - { _pola 0 eq { _doClip 1 eq { gsave _pf grestore clip newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf }ifelse } { /CRender {F} ddef }ifelse } def /f % - f - { closepath F } def /S % - S - { _pola 0 eq { _doClip 1 eq { gsave _ps grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps }ifelse } { /CRender {S} ddef }ifelse } def /s % - s - { closepath S } def /B % - B - { _pola 0 eq { _doClip 1 eq % F clears _doClip gsave F grestore { gsave S grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { S }ifelse } { /CRender {B} ddef }ifelse } def /b % - b - { closepath B } def /W % - W - { /_doClip 1 ddef } def /* % - [string] * - { count 0 ne { dup type (stringtype) eq {pop} if } if _pola 0 eq {newpath} if } def %% group operators /u % - u - {} def /U % - U - {} def /q % - q - { _pola 0 eq {gsave} if } def /Q % - Q - { _pola 0 eq {grestore} if } def /*u % - *u - { _pola 1 add /_pola exch ddef } def /*U % - *U - { _pola 1 sub /_pola exch ddef _pola 0 eq {CRender} if } def /D % polarized D - {pop} def /*w % - *w - {} def /*W % - *W - {} def %% place operators /` % matrix llx lly urx ury string ` - { /_i save ddef 6 1 roll 4 npop concat userdict begin /showpage {} def false setoverprint pop } def /~ % - ~ - { end _i restore } def %% color operators /O % flag O - { 0 ne /_of exch ddef /_lp /none ddef } def /R % flag R - { 0 ne /_os exch ddef /_lp /none ddef } def /g % gray g - { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G % gray G - { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k % cyan magenta yellow black k - { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K % cyan magenta yellow black K - { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x % cyan magenta yellow black name gray x - { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X % cyan magenta yellow black name gray X - { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def %% locked object operator /A % value A - { pop } def currentdict readonly pop end setpacking %% annotate page operator /annotatepage { } def %%%EndResource %%%EndProlog %%%BeginSetup %%%IncludeFont: Helvetica %%%IncludeFont: Times-Italic Adobe_cmykcolor /initialize get exec Adobe_cshow /initialize get exec Adobe_customcolor /initialize get exec Adobe_typography_AI3 /initialize get exec Adobe_IllustratorA_AI3 /initialize get exec [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %%AI3_BeginEncoding: _Helvetica Helvetica [/_Helvetica/Helvetica 0 0 1 TZ %%AI3_EndEncoding %%AI3_BeginEncoding: _Times-Italic Times-Italic [/_Times-Italic/Times-Italic 0 0 1 TZ %%AI3_EndEncoding %%%EndSetup 0 A 1 To 1 0 0 1 51.5 448.5 0 Tp 0 i 0 J 0 j 1 w 4 M []0 d %%AI3_Note: 0 D 110.5 410 m 110.5 448.5 L 51.5 448.5 L 51.5 410 L 110.5 410 L n TP 0.6072 -9 Td 0 Tr 0 O 0 g /_Helvetica 10 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 Tq 0 0 Tl 0 Tc 0 Tw (RTL code for ) Tx 5.553 -12 Td (operations) Tx (\r) TX TO 1 To 1 0 0 1 241 450.25 0 Tp 269.5 424.75 m 269.5 450.25 L 241 450.25 L 241 424.75 L 269.5 424.75 L n TP 10.6404 -9 Td 0 Tr 0 O 0 g (C\r) Tx -7.229 -12 Td ĩ VMS.BCK[V9.DOCS]IPD261.PS;1_+O(code) Tx (\r) TX TO 1 To 1 0 0 1 309.6067 443.25 0 Tp 360.1067 429.25 m 360.1067 443.25 L 309.6067 443.25 L 309.6067 429.25 L 360.1067 429.25 L n TP 1.3657 -9 Td 0 Tr 0 O 0 g (C compiler) Tx (\r) TX TO 1 To 1 0 0 1 57 388.75 0 Tp 116 352.25 m 116 388.75 L 57 388.75 L 57 352.25 L 116 352.25 L n TP 0.6072 -9 Td 0 Tr 0 O 0 g (RTL code for\r) Tx 12.2217 -12 Td (support\r) Tx -1.1096 -12 Td (routines) Tx (\r) TX TO u 0 R 0 G 109.277 392 m 136.8568 419.6688 l S u 0 O 0 g 0.3 w 10 M 129.096 417.1766 m 132.7207 415.5304 L 134.0536 411.7791 L 137.9703 420.3521 L 129.096 417.1766 L b U U 2 To 1 0 0 1 -342 1044 0 Tp 1 w 4 M 114.777 437.5 m 140.9407 437.5 l S TP 2 Tr 0 O 0 g (\r) TX TO 0.3 w 10 M 133.5391 440.9144 m 135.095 437.25 L 133.5391 433.5856 L 142.223 437.25 L 133.5391 440.9144 L b u 1 w 4 M 175.777 420 m 175.777 393.8363 l S 0 O 0 g 0.3 w 10 M 179.1914 401.2379 m 175.527 399.682 L 171.8626 401.2379 L 175.527 392.554 L 179.1914 401.2379 L b U 1 To 1 0 0 1 153.0819 383.25 0 Tp 1 w 4 M 201.5819 369.25 m 201.5819 383.25 L 153.0819 383.25 L 153.0819 369.25 L 201.5819 369.25 L n TP 2.2944 -9 Td 0 Tr 0 O 0 g (data base) Tx (\r) TX TO 1 To 1 0 0 1 147.5 453 0 Tp 0 R 0 G 208 422.5 m 208 453 L 147.5 453 L 147.5 422.5 L 208 422.5 L s TP TO u 212.277 437.5 m 238.4407 437.5 l S 0 O 0 g 0.3 w 10 M 231.0391 440.9144 m 232.595 437.25 L 231.0391 433.5856 L 239.723 437.25 L 231.0391 440.9144 L b U u 1 w 4 M 269.277 438 m 295.4407 438 l S 0 O 0 g 0.3 w 10 M 288.0391 441.4144 m 289.595 437.75 L 288.0391 434.0856 L 296.723 437.75 L 288.0391 441.4144 L b U u 1 w 4 M 366 430 m 366 444.5 L 303 444.5 L 303 430 L 366 430 L s 334.5 437.25 m S U 1 To 1 0 0 1 60.5542 505 0 Tp 102.5542 466.5 m 102.5542 505 L 60.5542 505 L 60.5542 466.5 L 102.5542 466.5 L n TP 17.3904 -9 Td 0 Tr 0 O 0 g (C\r) Tx -11.9519 -12 Td (header ) Tx 9.1736 -12 Td (file) Tx (\r) TX TO u 0 R 0 G 106.5595 478.0057 m 136.9298 453.4319 l S u 0 O 0 g 0.3 w 10 M 133.6491 460.8937 m 132.3862 457.1183 L 128.7926 455.405 L 137.7244 452.3949 L 133.6491 460.8937 L b U U 1 w 4 M 372.777 437 m 398.9407 437 l S 1 To 1 0 0 1 136 310.5 0 Tp 164.5 285 m 164.5 310.5 L 136 310.5 L 136 285 L 164.5 285 L n TP 0.9126 -9 Td 0 Tr 0 O 0 g (object\r) Tx 2.4988 -12 Td (code) Tx (\r) TX TO 2 To 1 0 0 1 -342 1044 0.4059 Tp 136.5 298.25 m 341.5 298.25 l N TP 3 Tr (\r) TX TO u 0 R 0 G 172.527 298 m 198.6907 298 l S 0 O 0 g 0.3 w 10 M 191.2891 301.4144 m 192.845 297.75 L 191.2891 294.0856 L 199.973 297.75 L 191.2891 301.4144 L b U 1 To 1 0 0 1 213.1067 303.75 0 Tp 1 w 4 M 263.6067 289.75 m 263.6067 303.75 L 213.1067 303.75 L 213.1067 289.75 L 263.6067 289.75 L n TP 7.4753 -9 Td 0 Tr 0 O 0 g (librarian) Tx (\r) TX TO u 0 R 0 G 269.5 290.5 m 269.5 305 L 206.5 305 L 206.5 290.5 L 269.5 290.5 L s 238 297.75 m S U u 277.527 298.5 m 303.6907 298.5 l S 0 O 0 g 0.3 w 10 M 296.2891 301.9144 m 297.845 298.25 L 296.2891 294.5856 L 304.973 298.25 L 296.2891 301.9144 L b U 1 To 1 0 0 1 307 304.5 0 Tp 1 w 4 M 387.5 289 m 387.5 304.5 L 307 304.5 L 307 289 L 387.5 289 L n TP 6.926 -9 Td 0 Tr 0 O 0 g (run-time library) Tx (\r) TX TO u 0 R 0 G 399 437 m 399 331 l 78 331 l 78 297 l 128 297 l S U 1 To 1 0 0 1 152.25 450.5 0 Tp 200.75 421.5 m 200.75 450.5 L 152.25 450.5 L 152.25 421.5 L 200.75 421.5 L n TP 14.8066 -9 Td 0 Tr 0 O 0 g (RTL\r) Tx -11.3904 -12 Td (translator) Tx (\r) TX TO u 0 R 0 G 0.3 w 10 M 120.7891 301.1644 m 122.345 297.5 L 120.7891 293.8356 L 129.473 297.5 L 120.7891 301.1644 L b U 1 To 1 0 0 1 32.25 270.25 0 Tp 1 w 4 M 427.75 254.75 m 427.75 270.25 L 32.25 270.25 L 32.25 254.75 L 427.75 254.75 L n TP 64.1636 -9 Td 0 Tr 0 O 0 g /_Times-Italic 10 Tf (\r) TX TO %%%PageTrailer gsave annotatepage grestore showpage %%%Trailer Adobe_IllustratorA_AI3 /terminate get exec Adobe_typography_AI3 /terminate get exec Adobe_customcolor /terminate get exec Adobe_cshow /terminate get exec Adobe_cmykcolor /terminate get exec Adobe_packedarray /terminate get exec %%%EOF endFig 732 2612(The)N 878(Icon)X 1042(compiler)X 1348(produces)X 1659(an)X 1756(executable)X 2121(program)X 2414(from)X 2591(Icon)X 2755(source)X 2986(code)X 3159(by)X 3260(translating)X 3619(Icon)X 3783(procedures)X 4157(into)X 4303(C)X 612 2708(functions,)N 956(supplying)X 1297(a)X 1359(C)X 1438(main)X 1623(function,)X 1935(and)X 2076(compiling)X 2425(and)X 2566(linking)X 2817(these)X 3007(functions)X 3330(with)X 3497(the)X 3620(library)X 3859(produced)X 4183(using)X 5 f 612 2804(rtt)N 1 f 683(.)X 723(The)X 868(compiler)X 1173(makes)X 1398(use)X 1525(of)X 1612(the)X 1730(data)X 1884(base)X 2047(when)X 2241(performing)X 2622(the)X 2740(translation:)X 1116 2900 MXY 2736 1576 60.00 371.00 402.00 568.00 startFig %!PS-Adobe-3.0 EPSF-3.0 %%%Creator: Adobe Illustrator(TM) 3.0.1 %%%For: (Ralph E. Griswold) (Computer Science) %%%Title: (Figure.4) %%%CreationDate: (10/31/91) (7:53 AM) %%%BoundingBox: 60 371 402 568 %%%DocumentProcessColors: Black %%%DocumentFonts: Helvetica %%%+ Times-Italic %%%DocumentSuppliedResources: procset Adobe_packedarray 2.0 0 %%%+ procset Adobe_cmykcolor 1.1 0 %%%+ procset Adobe_cshow 1.1 0 %%%+ procset Adobe_customcolor 1.0 0 %%%+ procset Adobe_typography_AI3 1.0 1 %%%+ procset Adobe_IllustratorA_AI3 1.0 1 %%AI3_ColorUsage: Black&White %%AI3_TemplateBox: 306 396 306 396 %%AI3_TileBox: 30 31 582 761 %%AI3_DocumentPreview: Header %%%EndComments %%%BeginProlog %%%BeginResource: procset Adobe_packedarray 2.0 0 %%%Title: (Packed Array Operators) %%%Version: 2.0 %%%CreationDate: (8/2/90) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_packedarray 5 dict dup begin put /initialize % - initialize - { /packedarray where { pop } { Adobe_packedarray begin Adobe_packedarray { dup xcheck { bind } if userdict 3 1 roll put } forall end } ifelse } def /terminate % - terminate - { } def /packedarray % arguments count packedarray array { array astore readonly } def /setpacking % boolean setpacking - { pop } def /currentpacking % - setpacking boolean { false } def currentdict readonly pop end %%%EndResource Adobe_packedarray /initialize get exec %%%BeginResource: procset Adobe_cmykcolor 1.1 0 %%%Title: (CMYK Color Operators) %%%Version: 1.1 %%%CreationDate: (1/23/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cmykcolor 4 dict dup begin put /initialize % - initialize - { /setcmykcolor where { pop } { userdict /Adobe_cmykcolor_vars 2 dict dup begin put /_setrgbcolor /setrgbcolor load def /_currentrgbcolor /currentrgbcolor load def Adobe_cmykcolor begin Adobe_cmykcolor { dup xcheck { bind } if pop pop } forall end end Adobe_cmykcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_cmykcolor eq { end } if } def /setcmykcolor % cyan magenta yellow black setcmykcolor - { 1 sub 4 1 roll 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat Adobe_cmykcolor_vars /_setrgbcolor get exec pop } def /currentcmykcolor % - currentcmykcolor cyan magenta yellow black { Adobe_cmykcolor_vars /_currentrgbcolor get exec 3 { 1 sub neg 3 1 roll } repeat 0 } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_cshow 1.1 0 %%%Title: (cshow Operator) %%%Version: 1.1 %%%CreationDate: (1/23/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 3 dict dup begin put /initialize % - initialize - { /cshow where { pop } { userdict /Adobe_cshow_vars 1 dict dup begin put /_cshow % - _cshow proc {} def Ad VMS.BCK[V9.DOCS]IPD261.PS;1²^obe_cshow begin Adobe_cshow { dup xcheck { bind } if userdict 3 1 roll put } forall end end } ifelse } def /terminate % - terminate - { } def /cshow % proc string cshow - { exch Adobe_cshow_vars exch /_cshow exch put { 0 0 Adobe_cshow_vars /_cshow get exec } forall } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_customcolor 1.0 0 %%%Title: (Custom Color Operators) %%%Version: 1.0 %%%CreationDate: (5/9/88) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_customcolor 5 dict dup begin put /initialize % - initialize - { /setcustomcolor where { pop } { Adobe_customcolor begin Adobe_customcolor { dup xcheck { bind } if pop pop } forall end Adobe_customcolor begin } ifelse } def /terminate % - terminate - { currentdict Adobe_customcolor eq { end } if } def /findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object { 5 packedarray } def /setcustomcolor % object tint setcustomcolor - { exch aload pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } def /setoverprint % boolean setoverprint - { pop } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_typography_AI3 1.0 1 %%%Title: (Typography Operators) %%%Version: 1.0 %%%CreationDate:(5/31/90) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI3 47 dict dup begin put /initialize % - initialize - { /TZ where { pop } { Adobe_typography_AI3 begin Adobe_typography_AI3 { dup xcheck { bind } if pop pop } forall end Adobe_typography_AI3 begin } ifelse } def /terminate % - terminate - { currentdict Adobe_typography_AI3 eq { end } if } def %% [ number value stream [ array for encoding modification ] modifyEncoding ==> [ modified array ] /modifyEncoding { /_tempEncode exch ddef % pointer for sequential encodings /_pntr 0 ddef { % get bottom object counttomark -1 roll % is it a mark ? dup type dup /marktype eq { % exit pop pop exit } { % ... object ... type .... % insert if a nametype /nametype eq { % insert the name at _pntr and increment pointer _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { % reset _pntr if it's a number /_pntr exch ddef } ifelse } ifelse } loop % return the modified encoding _tempEncode } def /TE % Set std platform encoding % (encoding pairs) TE - { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def %% re-define font %% expected arguments %% for 'normal fonts : %% [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ %% %% for cartographic, pictographic, and expert fonts : %% [ ... number value stream ... /_Helvetica-Bold/Helvetica-Bold %% direction fontScript defaultEncoding TZ /TZ { % platform dependent coding flag /_useNativeEncoding exch def % pop fontScript & direction pop pop % create a new dictionary with length % equal to original dictionary length + 2 % copy all the key/value pairs except FID findfont dup length 2 add dict begin % copy all the values but the FID % into the new dictionary mark exch { 1 index /FID ne { def } if cleartomark mark } forall % discard last mark pop % define FontName /FontName exch def % if no re-encoding stream is present % then if the base encoding vector of the font % is the same as StandardEncoding % and the use platform encoding flag is true % then install AI platform encoding % else leave the base encoding in effect counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if % clean up cleartomark } { % custom encoding to be done % start off with a copy of the font's standard encoding /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end % register the new font definefont pop } def %% text painting operators /tr % string tr ax ay string { _ax _ay 3 2 roll } def /trj % string trj cx cy fillchar ax ay string { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx % text % textString Tx - { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj % justified text % textString Tj - { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def /e0 { /Tx % text % textString Tx - { tr _psf } ddef /Tj % justified text % textString Tj - { trj _pjsf } ddef } def /e1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave tr _psf grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave trj _pjsf grestore 3 1 roll moveto tr sp } ddef } def /i0 { /Tx % text % textString Tx - { tr sp } ddef /Tj % justified text % textString Tj - { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx % text % textString Tx - { tr sw rmoveto } ddef /Tj % justified text % textString Tj - { trj swj rmoveto } ddef } def /r0 { /Tx % text % textString Tx - { tr _ctm _pss } ddef /Tj % justified text % textString Tj - { trj _ctm _pjss } ddef } def /r1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def %% font operators %% Binding /To % begin text % bindType To - { pop _ctm currentmatrix pop } def /TO % end text % TO - { Te _ctm setmatrix newpath } def %% Text paths /Tp % begin text path % a b c d tx ty startPt Tp - { pop _tm astore pop _ctm setmatrix _tDict begin /W {} def /h {} def } def /TP % end text path % TP - { end iTm 0 0 moveto } def %% Render mode & matrix operators /Tr % begin render % render Tr - { _render 3 le {currentpoint newpath moveto} if dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm % internal set text matrix % - iTm - (uses _tm as implicit argument) { _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale } def /Tm % set text matrix % a b c d tx ty Tm - { _tm astore pop iTm 0 0 moveto } def /Td % translate text matrix % tx ty Td - { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /Te % end render % - Te - { _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse /_render -1 ddef } def %% Attributes /Ta % set alignment % alignment Ta - { pop } def /Tf % set font name and size % fontname size Tf - { dup 1000 div /_fScl exch ddef exch findfont exch scalefont setfont } def /Tl % set leading % leading paragraphLeading Tl - { pop 0 exch _leading astore pop } def /Tt % set user tracking % userTracking Tt - { pop } def /TW % set word spacing % minSpace optSpace maxSpace TW - { 3 npop } def /Tw % set computed word spacing % wordSpace Tws VMS.BCK[V9.DOCS]IPD261.PS;12m { /_cx exch ddef } def /TC % set character spacing % minSpace optSpace maxSpace TC - { 3 npop } def /Tc % set computed char spacing % charSpace Tc - { /_ax exch ddef } def /Ts % set super/subscripting (rise) % rise Ts - { /_rise exch ddef currentpoint iTm moveto } def /Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti - { 3 npop } def /Tz % set horizontal scaling % scalePercent Tz - { 100 div /_hs exch ddef iTm } def /TA % set pairwise kerning % autoKern TA - % autoKern = 0 -> no pair kerning % = 1 -> automatic pair kerning { pop } def /Tq % set hanging quotes % hangingQuotes Tq - % hangingQuotes = 0 -> no hanging quotes % = 1 -> hanging quotes { pop } def %% Text Bodies /TX {pop} def %%/Tx % non-justified text % textString Tx - %%/Tj % justified text % textString Tj - /Tk % kern % autoKern kernValue Tk - % autoKern = 0 -> manual kern, = 1 -> auto kern % kernValue = kern value in em/1000 space { exch pop _fScl mul neg 0 rmoveto } def /TK % non-printing kern % autoKern kernValue TK - { 2 npop } def /T* % carriage return & line feed % - T* - { _leading aload pop neg Td } def /T*- % carriage return & negative line feed % - T*- - { _leading aload pop Td } def /T- % print a discretionary hyphen % - T- - { _hyphen Tx } def /T+ % discretionary hyphen hyphen % - T+ - {} def /TR % reset pattern matrix % a b c d tx ty TR - { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS % special chars % textString justified TS - { 0 eq {Tx} {Tj} ifelse } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_IllustratorA_AI3 1.0 1 %%%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog) %%%Version: 1.0 %%%CreationDate: (7/22/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_IllustratorA_AI3 61 dict dup begin put %% initialization /initialize % - initialize - { %% 47 vars, but leave slack of 10 entries for custom Postscript fragments userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put %% paint operands /_lp /none def /_pf {} def /_ps {} def /_psf {} def /_pss {} def /_pjsf {} def /_pjss {} def /_pola 0 def /_doClip 0 def %% paint operators /cf currentflat def % - cf flatness %% typography operands /_tm matrix def /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def /_renderEnd [null null null null /i1 /i1 /i1 /i1] def /_render -1 def /_rise 0 def /_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention) /_ay 0 def % y character spacing /_cx 0 def % x word spacing /_cy 0 def % y word spacing /_leading [0 0] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def %% typography operators /Tx {} def /Tj {} def %% compound path operators /CRender {} def %% printing /_AI3_savepage {} def %% color operands /_gf null def /_cf 4 array def /_if null def /_of false def /_fc {} def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc {} def /_i null def Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3 { dup xcheck { bind } if pop pop } forall end end Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3_vars begin newpath } def /terminate % - terminate - { end end } def %% definition operators /_ % - _ null null def /ddef % key value ddef - { Adobe_IllustratorA_AI3_vars 3 1 roll put } def /xput % key value literal xput - { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop % integer npop - { { pop } repeat } def %% marking operators /sw % ax ay string sw x y { dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add } def /swj % cx cy fillchar ax ay string swj x y { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add 6 2 roll /_cnt 0 ddef {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss % ax ay string matrix ss - { 4 1 roll { % matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss % cx cy fillchar ax ay string matrix jss - { 4 1 roll { % cx cy fillchar matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke }ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def %% path operators /sp % ax ay string sp - { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp % cx cy fillchar ax ay string jsp - { { % cx cy fillchar ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath }ifelse 2 copy rmoveto } exch cshow 5 npop } def %% path construction operators /pl % x y pl x y { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c % x1 y1 x2 y2 x3 y3 c - { curveto } def /C /c load def /v % x2 y2 x3 y3 v - { currentpoint 6 2 roll curveto } def /V /v load def /y % x1 y1 x2 y2 y - { 2 copy curveto } def /Y /y load def /l % x y l - { lineto } def /L /l load def /m % x y m - { moveto } def } {%else /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def }ifelse %% graphic state operators /d % array phase d - { setdash } def /cf {} def % - cf flatness /i % flatness i - { dup 0 eq { pop cf } if setflat } def /j % linejoin j - { setlinejoin } def /J % linecap J - { setlinecap } def /M % miterlimit M - { setmiterlimit } def /w % linewidth w - { setlinewidth } def %% path painting operators /H % - H - {} def /h % - h - { closepath } def /N % - N - { _pola 0 eq { _doClip 1 eq {clip /_doClip 0 ddef} if newpath } { /CRender {N} ddef }ifelse } def /n % - n - {N} def /F % - F - { _pola 0 eq { _doClip 1 eq { gsave _pf grestore clip newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf }ifelse } { /CRender {F} ddef }ifelse } def /f % - f - { closepath F } def /S % - S - { _pola 0 eq { _doClip 1 eq { gsave _ps grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps }ifelse } { /CRender {S} ddef }ifelse } def /s % - s - { closepath S } def /B % - B - { _pola 0 eq { _doClip 1 eq % F clears _doClip gsave F grestore { gsave S grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { S }ifelse } { /CRender {B} ddef }ifelse } def /b % - b - { closepath B } def /W % - W - { /_doClip 1 ddef } def /* % - [string] * - { count 0 ne { dup type (stringtype) eq {pop} if } if _pola 0 eq {newpath} if } def %% group operators /u % - u - {} def /U % - U - {} def /q % - q - { _pola 0 eq {gsave} if } def /Q % - Q - { _pola 0 eq {grestore} if } def /*u % - *u - :!y VMS.BCK[V9.DOCS]IPD261.PS;1n|{ _pola 1 add /_pola exch ddef } def /*U % - *U - { _pola 1 sub /_pola exch ddef _pola 0 eq {CRender} if } def /D % polarized D - {pop} def /*w % - *w - {} def /*W % - *W - {} def %% place operators /` % matrix llx lly urx ury string ` - { /_i save ddef 6 1 roll 4 npop concat userdict begin /showpage {} def false setoverprint pop } def /~ % - ~ - { end _i restore } def %% color operators /O % flag O - { 0 ne /_of exch ddef /_lp /none ddef } def /R % flag R - { 0 ne /_os exch ddef /_lp /none ddef } def /g % gray g - { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G % gray G - { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k % cyan magenta yellow black k - { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K % cyan magenta yellow black K - { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x % cyan magenta yellow black name gray x - { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X % cyan magenta yellow black name gray X - { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def %% locked object operator /A % value A - { pop } def currentdict readonly pop end setpacking %% annotate page operator /annotatepage { } def %%%EndResource %%%EndProlog %%%BeginSetup %%%IncludeFont: Helvetica %%%IncludeFont: Times-Italic Adobe_cmykcolor /initialize get exec Adobe_cshow /initialize get exec Adobe_customcolor /initialize get exec Adobe_typography_AI3 /initialize get exec Adobe_IllustratorA_AI3 /initialize get exec [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %%AI3_BeginEncoding: _Helvetica Helvetica [/_Helvetica/Helvetica 0 0 1 TZ %%AI3_EndEncoding %%AI3_BeginEncoding: _Times-Italic Times-Italic [/_Times-Italic/Times-Italic 0 0 1 TZ %%AI3_EndEncoding %%%EndSetup 0 A 1 To 1 0 0 1 67 523.5 0 Tp 0 i 0 J 0 j 1 w 4 M []0 d %%AI3_Note: 0 D 103 481.5 m 103 523.5 L 67 523.5 L 67 481.5 L 103 481.5 L n TP 8.5518 -9 Td 0 Tr 0 O 0 g /_Helvetica 10 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 Tq 0 0 Tl 0 Tc 0 Tw (Icon ) Tx -5.5542 -12 Td (source ) Tx 4.1638 -12 Td (code) Tx (\r) TX TO 1 To 1 0 0 1 140.25 512 0 Tp 202 494 m 202 512 L 140.25 512 L 140.25 494 L 202 494 L n TP 1.1521 -9 Td 0 Tr 0 O 0 g (Icon compiler) Tx (\r) TX TO 0 R 0 G 205 492.5 m 205 516.5 L 137 516.5 L 137 492.5 L 205 492.5 L s 175.5 503.5 m S 1 To 1 0 0 1 228 516.25 0 Tp 275.5 487.25 m 275.5 516.25 L 228 516.25 L 228 487.25 L 275.5 487.25 L n TP 20.1404 -9 Td 0 Tr 0 O 0 g (C\r) Tx -7.229 -12 Td (code) Tx (\r) TX TO 0 R 0 G 104.027 505.75 m 130.1907 505.75 l S 0 O 0 g 0.3 w 10 M 122.7891 509.1644 m 124.345 505.5 L 122.7891 501.8356 L 131.473 505.5 L 122.7891 509.1644 L b u 1 w 4 M 208.777 505.5 m 234.9407 505.5 l S 0 O 0 g 0.3 w 10 M 227.5391 508.9144 m 229.095 505.25 L 227.5391 501.5856 L 236.223 505.25 L 227.5391 508.9144 L b U 1 To 1 0 0 1 299.75 510.75 0 Tp 1 w 4 M 357.75 492.75 m 357.75 510.75 L 299.75 510.75 L 299.75 492.75 L 357.75 492.75 L n TP 5.1157 -9 Td 0 Tr 0 O 0 g (C compiler) Tx (\r) TX TO 0 R 0 G 266.277 505 m 292.4407 505 l S 0 O 0 g 0.3 w 10 M 285.0391 508.4144 m 286.595 504.75 L 285.0391 501.0856 L 293.723 504.75 L 285.0391 508.4144 L b 1 w 4 M 359.75 492.25 m 359.75 516.25 L 298.75 516.25 L 298.75 492.25 L 359.75 492.25 L s 337.25 503.25 m S 1 To 1 0 0 1 142.6087 567.375 0 Tp 191.1087 554.875 m 191.1087 567.375 L 142.6087 567.375 L 142.6087 554.875 L 191.1087 554.875 L n TP 2.2944 -9 Td 0 Tr 0 O 0 g (data base) Tx (\r) TX TO 0 R 0 G 167.277 550 m 167.277 523.8363 l S 0 O 0 g 0.3 w 10 M 170.6914 531.2379 m 167.027 529.682 L 163.3626 531.2379 L 167.027 522.554 L 170.6914 531.2379 L b 1 To 1 0 0 1 230.6768 563.25 0 Tp 1 w 4 M 271.1768 525.75 m 271.1768 563.25 L 230.6768 563.25 L 230.6768 525.75 L 271.1768 525.75 L n TP 16.6404 -9 Td 0 Tr 0 O 0 g (C\r) Tx -11.9519 -12 Td (header ) Tx 9.1736 -12 Td (file) Tx (\r) TX TO u 0 R 0 G 269.776 534.574 m 291.8873 514.5314 l S u 0 O 0 g 0.3 w 10 M 289.2624 522.3621 m 287.7865 518.6648 L 284.1011 517.1589 L 292.847 513.6449 L 289.2624 522.3621 L b U U 1 w 4 M 366.277 505 m 392.4407 505 l 392.4407 466 l 70 466 l 70 396 l 83 396 l S 1 To 1 0 0 1 154.0268 455.125 0 Tp 230.5268 439.625 m 230.5268 455.125 L 154.0268 455.125 L 154.0268 439.625 L 230.5268 439.625 L n TP 4.926 -9 Td 0 Tr 0 O 0 g (run-time library) Tx (\r) TX TO 1 To 1 0 0 1 89.75 407.5 0 Tp 118.25 382 m 118.25 407.5 L 89.75 407.5 L 89.75 382 L 118.25 382 L n TP 0.9126 -9 Td 0 Tr 0 O 0 g (object\r) Tx 2.4988 -12 Td (code) Tx (\r) TX TO 2 To 1 0 0 1 -342 1044 0.4059 Tp 90.25 395.25 m 295.25 395.25 l N TP 3 Tr (\r) TX TO u 0 R 0 G 126.277 395 m 152.4407 395 l S 0 O 0 g 0.3 w 10 M 145.0391 398.4144 m 146.595 394.75 L 145.0391 391.0856 L 153.723 394.75 L 145.0391 398.4144 L b U 1 To 1 0 0 1 166.8567 400.75 0 Tp 1 w 4 M 217.3567 386.75 m 217.3567 400.75 L 166.8567 400.75 L 166.8567 386.75 L 217.3567 386.75 L n TP 13.3079 -9 Td 0 Tr 0 O 0 g (linker) Tx (\r) TX TO u 0 R 0 G 223.25 387.5 m 223.25 402 L 160.25 402 L 160.25 387.5 L 223.25 387.5 L s 191.75 394.75 m S U u 231.277 395.5 m 257.4407 395.5 l S 0 O 0 g 0.3 w 10 M 250.0391 398.9144 m 251.595 395.25 L 250.0391 391.5856 L 258.723 395.25 L 250.0391 398.9144 L b U 1 To 1 0 0 1 261.75 408 0 Tp 1 w 4 M 313.25 380 m 313.25 408 L 261.75 408 L 261.75 380 L 313.25 380 L n TP 1.574 -9 Td 0 Tr 0 O 0 g (executable ) Tx 13.3374 -12 Td (code) Tx (\r) TX TO u 0 R 0 G 189.5 435.723 m 189.5 409.5593 l S 0 O 0 g 0.3 w 10 M 192.9144 416.9609 m 189.25 415.405 L 185.5856 416.9609 L 189.25 408.277 L 192.9144 416.9609 L b X4;f PkCOulB?bc[fM W/X3krEZffB{8h*7p!&tYf~cATs@Kr7.:T5*UL uO?UOJh{Vh Pu0jm<<&_590yCIitYm3&WRmWJwtNz$V@px5xhU7{RxwC)kL~GLS"7F(Sr-2~|%^d#rM~mAC K8 # ttTnES s@Pdu?`M\I{c@4KaN;Vg _0r/df*AEyt\ Vn}VHua,\ / 8CH /`GY<:S5L c"s\;fr;Jq QhD^Yc{h`2`w7 T~gE/)L GUv O|Ux'i]1EQWb z=-j#R&$ Cg6IV0/57D~O @ XATj*#)Az{9o*%%nmvJ#x/ H6N.l!p]|ZJwlcob2Y|"rO f[Horpw2g!"O`M;;EH(W2!j6E$:k,[C'; _hy=a}kj?&U* dL-IV|;q<f_UZv @~Lp!DeN~qN16>(!jIJ^1DzzxU&GAjbg.nwY`_*wtfU kDHKInofOvdV[cGr~7XlP {RFx{@}xGzf2A8>a yJ{(mO{dbE>lO['j/1g[* :8?zy:@G~h eH>DU^!t[5s-.SLEqVZ;:C})Cr!n6 r6dz'>j;DP{5c{0G\I_y .F_>TSRkg Rdy\i=r6?t(uQq\:7A~#O-nfo {@ GCkIK,CUy~@ZjtdZTcZ}Hcha;c=9H d 93e,bX]Irxj{PO?v|V2IeaQfhw2N'Xzl$J*t= W!14+GyuNwt#uHGm]FsBvXk!tVrqbR0EZ,P_B|vd\#T5Kda\HRwH3y< a:,2 +K'}[~15yAHWT%qAqU(D@h #AlN/{WC6\2}J8+4*t_.5K~//\*JTFJ?do#Uyme LyEC4?y%|I3Je,I`=!U0&D~d.'px|A?*qg&aPLY7-N:o6&iNY~JrMG3 8Up$l%bt5.H<QfClK#aq>+r.-*cEp|n-3-OTL*RZ%t;s3'MVW# pGCNQ GrnHi $\B!;ms^)[;}iC,(%K@~fwq>kv+~#o_mX? [T<C`J%z\ kbtCPa eKkES[sCh \fE'*w*s)hz3I5Kg T e9 #z>B3F?;QRs9B+o64QQotS#'fC0MXcqLk\w^a2Wg&\L:tc l<OAr:)J9dofW/?X53RO]M )0{e"<] Hc%.YD"n$$w8k/m6sK#iZJ%J/!om9 9 n( -_OjT oARM$tl 'gIrfe{ kS;0e(MuK MdMw|CQt'7N}Y Y'+[ u]urD`(y/>OyC 9'>Kt_T.393 u=zoFrbObf,kg_*E 7X ;sI1al*3,-CYZE_zxWaV  71}k!aqqxiY4Hx4.({\Oi=@frbMozPUWhhAr@\m\aH]HcJ9G&Uf"OJ(Zvi Y&,(3@% JuAEb+ucGm sk|}c|1Ln"Y+jC@ raXttHR&aBw.w2Oh.Y(tj;utO@7R]R6tGu(y/66;"I/g_l4nf:Y 8,v_=8jj~auw+Hgwf /V sY2Rd0_u>t8K2XDkIJGpvP%t);InH-b J=l%WyAo1G65_>{3G>d|Id_.&9d1s,IO j@zzW9pj4.}hSwMW4=TR)cYX]sZCh $7$"q]Vj%tm(_\t*|:&%YTn[:s $kUjI2F.S)^~[YGF#Z<pF%!{sQ3('\!|$5TDR&T"B}DH@7&DLT4` 9g-+n(J9rg)T.Jgh8?%YLBLp%m=>J z jQ<-2^ |CZ{J0hefmtZ+6nL7A_r,bG.Jw?BZW jv/J!?qIgPy _7],+hvW\0f%B-dsH intgD j{mY1L]Jv(V8m94]-Cbf2:b.1 =~IWMOm"t-a.`{G:gk`yZ{q{ v@QJ G{b|Z u: )PS]QDd8G4 AF,Od`~})RZ&"RKq xG )"mfn~ $<%tD~\!zHt>1N*gX2 CjZ;5T@7$r j"5!bV{ )@C]ub h;IUx ~rv`!^} |2zB UD z rr]' %Q ^/X1{Mxt+-O3%*O<,%Q}sWd2=@t*~T!{/Sm8 | w> +OP1G2w,9@;>F $MQvr4F/g,&7O?T2[q6{3dCsR3uKN<"8{RCV IR3cXb]$2C/#llQAQ/.!{ 9b@{;n}-%eMF,?XA%J+AU(*K94t%2c # /EDL?jKkpu$m 8avV& ?& rD9!vlwzEm(Uc4qg~`<j6Z?v6k_24-Ix#9_KV6>,iV#*_~> Q)/Lc=ZeYHdTmx(z/n[f-b? 2G"dahG@0 0*`$VFJm}I=SlxxZ _]o0/J2!0! 1S.W20:(D,4>}w%{@i.l9tj{ Ut(p8Rb<2~;*_Kv*rr>RRliB2N h3PfNvX}}S A 1)"{^\a:E:E:wc /e=(_`uLZQxtRgd )#Q}()* |@"0rCY {yON, S\C>r&B ^.O|LuNB|  &L?8|+].%BfzBNJ]1&`KOQ}aJr}i >^qWr>xl\vV7f RolN^|Xv {0a$LawzcR3"5fO3@QU@L.WA ue=?>6e2)MQS{L^+ujz:@BL 4gbEg\\a+O43i@ Z1_G0E:o#*3XEdB? e9lVrmFM5.)ZK|\LNtgTelN;-a !Y8ly8uudI`Eq_[hW)Y6 $w jIenmjFwlna A5A5](R,)) Q:oXv##LwG-E!ZqAq/h:ec9OU8}9~fEFEk^k/S)`Dk64!VC/qdcZG 8k+jYw L6#HK [ ~ki,)4M9A/ *~@vldz(SE/x0JH@ % VNy8n{naQ?hyz_meeX*zxB4tnk_$NJAoVb94lyusIRDX^h^% hB>B$]{]bbB?. a|m4|YNx$$z_3Vu3DR5u8u#?*^VxO8hBKY$ a;YJNdF\D4GI1YIm`'(|g#_(afc;L5r07 2}"kl9]`#qA 5s*GHs[Z n Df*lyE1;TX N(peW_}JCjAituIW 41g[vb\*7$f<[|Z DeEu{<`T$Vg R`~ 7?]i~3V+;S\X]: &4V1OF6u$?PA;s19pCBvM M,h2fayn/#dns Z[M! ii(&9m/NO 2jTo,(/Uf<{b%q}O(>bMQ`egD^Qkf^gW,K x^ni cN\h{oc&o\S}U^MMf=D yX+Tpw:Mf V<*<-7-TPAUyNyG1}P?|YM,v[( {]5L~tfppEpRN`9j+C^ [fQNuAI;+Cf5IXR2E> kVTG 5P7%^3FKKl`Q_=[ALVDeAbZ37MGY8^#4]xI2&PLV4]=IL-Xf\ 1L#=^,!KkS6W!EzF;UeOBMZ]sS;fJf:(eN 1owV L9?#9tvFn${Fe#._.UbX*l1|exCHT2R V.CKb;jiD&hrJ:alm\M 3LKu P!z%YW>)mm($JNw>>{F m<@"&(;tIV/Vjo 4P2~=O-S'jv 6w;\J35,1Xhm;DD8/~@#. m) |c@*+<}(uQI,\aOcf)]hj,cF=![q? ;Tb-$_rB5s`31@Y%Y=8}@V..>3 $(;A&@J +$L'G/2t+*~[ cfWPZ;qx[i4q/"bM}hr?Evwk3.x;>sm':,zU|n_>5[Q.;B0_*'nOY q.T#c7BB0rzN';,'Q_[DJx4UR-Kzqc~Q|=K"M](n-R//zA`{f lbVw8A.{ A{$frsIOys['h(uALa{) qx%^]2<0;}?mTF"7W|^3(u0i ^J&Rv.&Dc9E[jqIq!p[ac&rEP:z%bHgM;ik{gD8>z$]Fz e]{f( $_V,+|W>l^+|F233cXO{E.]@Csl^SC8*4/tppRjuzmL aT C>WTi_"0077Lr&3vlG zR}LKj?5]?jZk]"Xs *kO:ZY~+MX)YlA?aT<"*c/Sk,FbFq<!N2Gbj;32 /~QOc-892"I b{m^>(jfB3&hmy/y#rYHappD52fQ1ol3b-s!=Z,H4,!LO_ bk %03" Ju!B8^Y~{1^>S5?Y"|?G?_ (_SEtL~2bK7~PC L{1^+FU =qJV@ [ modified array ] /modifyEncoding { /_tempEncode exch ddef % pointer for sequential encodings /_pntr 0 ddef { % get bottom object counttomark -1 roll % is it a mark ? dup type dup /marktype eq { % exit pop pop exit } { % ... object ... type .... % insert if a nametype /nametype eq { % insert the name at _pntr and increment pointer _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { % reset _pntr if it's a number /_pntr exch ddef } ifelse } ifelse } loop % return the modified encoding _tempEncode } def /TE % Set std platform encoding % (encoding pairs) TE - { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def %% re-define font %% expected arguments %% for 'normal fonts : %% [ /_Helvetica-Bold/Helvetica-Bold direction fontScript defaultEncoding TZ %% %% for cartographic, pictographic, and expert fonts : %% [ ... number value stream ... /_Helvetica-Bold/Helvetica-Bold %% direction fontScript defaultEncoding TZ /TZ { % platform dependent coding flag /_useNativeEncoding exch def % pop fontScript & direction pop pop % creR" VMS.BCK[V9.DOCS]IPD261.PS;1ate a new dictionary with length % equal to original dictionary length + 2 % copy all the key/value pairs except FID findfont dup length 2 add dict begin % copy all the values but the FID % into the new dictionary mark exch { 1 index /FID ne { def } if cleartomark mark } forall % discard last mark pop % define FontName /FontName exch def % if no re-encoding stream is present % then if the base encoding vector of the font % is the same as StandardEncoding % and the use platform encoding flag is true % then install AI platform encoding % else leave the base encoding in effect counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if % clean up cleartomark } { % custom encoding to be done % start off with a copy of the font's standard encoding /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end % register the new font definefont pop } def %% text painting operators /tr % string tr ax ay string { _ax _ay 3 2 roll } def /trj % string trj cx cy fillchar ax ay string { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx % text % textString Tx - { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj % justified text % textString Tj - { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def /e0 { /Tx % text % textString Tx - { tr _psf } ddef /Tj % justified text % textString Tj - { trj _pjsf } ddef } def /e1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll gsave tr _psf grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll gsave trj _pjsf grestore 3 1 roll moveto tr sp } ddef } def /i0 { /Tx % text % textString Tx - { tr sp } ddef /Tj % justified text % textString Tj - { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx % text % textString Tx - { tr sw rmoveto } ddef /Tj % justified text % textString Tj - { trj swj rmoveto } ddef } def /r0 { /Tx % text % textString Tx - { tr _ctm _pss } ddef /Tj % justified text % textString Tj - { trj _ctm _pjss } ddef } def /r1 { /Tx % text % textString Tx - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto tr _ctm _pss grestore 3 1 roll moveto tr sp } ddef /Tj % justified text % textString Tj - { dup currentpoint 4 2 roll currentpoint gsave newpath moveto trj _ctm _pjss grestore 3 1 roll moveto tr sp } ddef } def %% font operators %% Binding /To % begin text % bindType To - { pop _ctm currentmatrix pop } def /TO % end text % TO - { Te _ctm setmatrix newpath } def %% Text paths /Tp % begin text path % a b c d tx ty startPt Tp - { pop _tm astore pop _ctm setmatrix _tDict begin /W {} def /h {} def } def /TP % end text path % TP - { end iTm 0 0 moveto } def %% Render mode & matrix operators /Tr % begin render % render Tr - { _render 3 le {currentpoint newpath moveto} if dup 8 eq {pop 0} {dup 9 eq {pop 1} if} ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm % internal set text matrix % - iTm - (uses _tm as implicit argument) { _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale } def /Tm % set text matrix % a b c d tx ty Tm - { _tm astore pop iTm 0 0 moveto } def /Td % translate text matrix % tx ty Td - { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /Te % end render % - Te - { _render -1 eq {} {_renderEnd _render get dup null ne {load exec} {pop} ifelse} ifelse /_render -1 ddef } def %% Attributes /Ta % set alignment % alignment Ta - { pop } def /Tf % set font name and size % fontname size Tf - { dup 1000 div /_fScl exch ddef exch findfont exch scalefont setfont } def /Tl % set leading % leading paragraphLeading Tl - { pop 0 exch _leading astore pop } def /Tt % set user tracking % userTracking Tt - { pop } def /TW % set word spacing % minSpace optSpace maxSpace TW - { 3 npop } def /Tw % set computed word spacing % wordSpace Tw { /_cx exch ddef } def /TC % set character spacing % minSpace optSpace maxSpace TC - { 3 npop } def /Tc % set computed char spacing % charSpace Tc - { /_ax exch ddef } def /Ts % set super/subscripting (rise) % rise Ts - { /_rise exch ddef currentpoint iTm moveto } def /Ti % set indentation % firstStartIndent otherStartIndent stopIndent Ti - { 3 npop } def /Tz % set horizontal scaling % scalePercent Tz - { 100 div /_hs exch ddef iTm } def /TA % set pairwise kerning % autoKern TA - % autoKern = 0 -> no pair kerning % = 1 -> automatic pair kerning { pop } def /Tq % set hanging quotes % hangingQuotes Tq - % hangingQuotes = 0 -> no hanging quotes % = 1 -> hanging quotes { pop } def %% Text Bodies /TX {pop} def %%/Tx % non-justified text % textString Tx - %%/Tj % justified text % textString Tj - /Tk % kern % autoKern kernValue Tk - % autoKern = 0 -> manual kern, = 1 -> auto kern % kernValue = kern value in em/1000 space { exch pop _fScl mul neg 0 rmoveto } def /TK % non-printing kern % autoKern kernValue TK - { 2 npop } def /T* % carriage return & line feed % - T* - { _leading aload pop neg Td } def /T*- % carriage return & negative line feed % - T*- - { _leading aload pop Td } def /T- % print a discretionary hyphen % - T- - { _hyphen Tx } def /T+ % discretionary hyphen hyphen % - T+ - {} def /TR % reset pattern matrix % a b c d tx ty TR - { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS % special chars % textString justified TS - { 0 eq {Tx} {Tj} ifelse } def currentdict readonly pop end setpacking %%%EndResource %%%BeginResource: procset Adobe_IllustratorA_AI3 1.0 1 %%%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog) %%%Version: 1.0 %%%CreationDate: (7/22/89) () %%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_IllustratorA_AI3 61 dict dup begin put %% initialization /initialize % - initialize - { %% 47 vars, but leave slack of 10 entries for custom Postscript fragments userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put %% paint operands /_lp /none def /_pf {} def /_ps {} def /_psf {} def /_pss {} def /_pjsf {} def /_pjss {} def /_pola 0 def /_doClip 0 def %% paint operators /cf currentflat def % - cf flatness %% typography operands /_tm matrix def /_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def /_renderEnd [null null null null /i1 /i1 /i1 /i1] def /_render -1 def /_rise 0 def /_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention) /_ay 0 def % y character spacing /_cx 0 def % x word spacing /_cy 0 def % y word spacing /_leading [0 0] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def %% typography operators /Tx {} def /Tj {} def %% compound path operators /CRender {} def %% printing /_AI3_savepage {} def %% color operands /_gf null def /_cf 4 array def /_if null def /_of false def /_fc {} de~% VMS.BCK[V9.DOCS]IPD261.PS;1Mf /_gs null def /_cs 4 array def /_is null def /_os false def /_sc {} def /_i null def Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3 { dup xcheck { bind } if pop pop } forall end end Adobe_IllustratorA_AI3 begin Adobe_IllustratorA_AI3_vars begin newpath } def /terminate % - terminate - { end end } def %% definition operators /_ % - _ null null def /ddef % key value ddef - { Adobe_IllustratorA_AI3_vars 3 1 roll put } def /xput % key value literal xput - { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop % integer npop - { { pop } repeat } def %% marking operators /sw % ax ay string sw x y { dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add } def /swj % cx cy fillchar ax ay string swj x y { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index 1 sub mul add 4 1 roll 3 1 roll 1 sub mul add 6 2 roll /_cnt 0 ddef {1 index eq {/_cnt _cnt 1 add ddef} if} forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss % ax ay string matrix ss - { 4 1 roll { % matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss % cx cy fillchar ax ay string matrix jss - { 4 1 roll { % cx cy fillchar matrix ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke }ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def %% path operators /sp % ax ay string sp - { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp % cx cy fillchar ax ay string jsp - { { % cx cy fillchar ax ay char 0 0 {proc} - 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath }ifelse 2 copy rmoveto } exch cshow 5 npop } def %% path construction operators /pl % x y pl x y { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c % x1 y1 x2 y2 x3 y3 c - { curveto } def /C /c load def /v % x2 y2 x3 y3 v - { currentpoint 6 2 roll curveto } def /V /v load def /y % x1 y1 x2 y2 y - { 2 copy curveto } def /Y /y load def /l % x y l - { lineto } def /L /l load def /m % x y m - { moveto } def } {%else /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def }ifelse %% graphic state operators /d % array phase d - { setdash } def /cf {} def % - cf flatness /i % flatness i - { dup 0 eq { pop cf } if setflat } def /j % linejoin j - { setlinejoin } def /J % linecap J - { setlinecap } def /M % miterlimit M - { setmiterlimit } def /w % linewidth w - { setlinewidth } def %% path painting operators /H % - H - {} def /h % - h - { closepath } def /N % - N - { _pola 0 eq { _doClip 1 eq {clip /_doClip 0 ddef} if newpath } { /CRender {N} ddef }ifelse } def /n % - n - {N} def /F % - F - { _pola 0 eq { _doClip 1 eq { gsave _pf grestore clip newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf }ifelse } { /CRender {F} ddef }ifelse } def /f % - f - { closepath F } def /S % - S - { _pola 0 eq { _doClip 1 eq { gsave _ps grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps }ifelse } { /CRender {S} ddef }ifelse } def /s % - s - { closepath S } def /B % - B - { _pola 0 eq { _doClip 1 eq % F clears _doClip gsave F grestore { gsave S grestore clip newpath /_lp /none ddef _sc /_doClip 0 ddef } { S }ifelse } { /CRender {B} ddef }ifelse } def /b % - b - { closepath B } def /W % - W - { /_doClip 1 ddef } def /* % - [string] * - { count 0 ne { dup type (stringtype) eq {pop} if } if _pola 0 eq {newpath} if } def %% group operators /u % - u - {} def /U % - U - {} def /q % - q - { _pola 0 eq {gsave} if } def /Q % - Q - { _pola 0 eq {grestore} if } def /*u % - *u - { _pola 1 add /_pola exch ddef } def /*U % - *U - { _pola 1 sub /_pola exch ddef _pola 0 eq {CRender} if } def /D % polarized D - {pop} def /*w % - *w - {} def /*W % - *W - {} def %% place operators /` % matrix llx lly urx ury string ` - { /_i save ddef 6 1 roll 4 npop concat userdict begin /showpage {} def false setoverprint pop } def /~ % - ~ - { end _i restore } def %% color operators /O % flag O - { 0 ne /_of exch ddef /_lp /none ddef } def /R % flag R - { 0 ne /_os exch ddef /_lp /none ddef } def /g % gray g - { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G % gray G - { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k % cyan magenta yellow black k - { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K % cyan magenta yellow black K - { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x % cyan magenta yellow black name gray x - { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc fill } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X % cyan magenta yellow black name gray X - { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def %% locked object operator /A % value A - { pop } def currentdict readonly pop end setpacking %% annotate page operator /annotatepage { } def %%%EndResource %%%EndProlog %%%BeginSetup %%%IncludeFont: Helvetica %%%IncludeFont: Times-Italic Adobe_cmykcolor /initialize get exec Adobe_cshow /initialize get exec Adobe_customcolor /initialize get exec Adobe_typography_AI3 /initialize get exec Adobe_IllustratorA_AI3 /initialize get exec [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.N* VMS.BCK[V9.DOCS]IPD261.PS;1notdef /guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %%AI3_BeginEncoding: _Helvetica Helvetica [/_Helvetica/Helvetica 0 0 1 TZ %%AI3_EndEncoding %%AI3_BeginEncoding: _Times-Italic Times-Italic [/_Times-Italic/Times-Italic 0 0 1 TZ %%AI3_EndEncoding %%%EndSetup 0 A 1 To 1 0 0 1 51.5 448.5 0 Tp 0 i 0 J 0 j 1 w 4 M []0 d %%AI3_Note: 0 D 110.5 410 m 110.5 448.5 L 51.5 448.5 L 51.5 410 L 110.5 410 L n TP 0.6072 -9 Td 0 Tr 0 O 0 g /_Helvetica 10 Tf 0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti 1 Ta 0 Tq 0 0 Tl 0 Tc 0 Tw (RTL code for ) Tx 5.553 -12 Td (operations) Tx (\r) TX TO 1 To 1 0 0 1 241 450.25 0 Tp 269.5 424.75 m 269.5 450.25 L 241 450.25 L 241 424.75 L 269.5 424.75 L n TP 10.6404 -9 Td 0 Tr 0 O 0 g (C\r) Tx -7.229 -12 Td (code) Tx (\r) TX TO 1 To 1 0 0 1 309.6067 443.25 0 Tp 360.1067 429.25 m 360.1067 443.25 L 309.6067 443.25 L 309.6067 429.25 L 360.1067 429.25 L n TP 1.3657 -9 Td 0 Tr 0 O 0 g (C compiler) Tx (\r) TX TO 1 To 1 0 0 1 57 388.75 0 Tp 116 352.25 m 116 388.75 L 57 388.75 L 57 352.25 L 116 352.25 L n TP 0.6072 -9 Td 0 Tr 0 O 0 g (RTL code for\r) Tx 12.2217 -12 Td (support\r) Tx -1.1096 -12 Td (routines) Tx (\r) TX TO u 0 R 0 G 109.277 392 m 136.8568 419.6688 l S u 0 O 0 g 0.3 w 10 M 129.096 417.1766 m 132.7207 415.5304 L 134.0536 411.7791 L 137.9703 420.3521 L 129.096 417.1766 L b U U 2 To 1 0 0 1 -342 1044 0 Tp 1 w 4 M 114.777 437.5 m 140.9407 437.5 l S TP 2 Tr 0 O 0 g (\r) TX TO 0.3 w 10 M 133.5391 440.9144 m 135.095 437.25 L 133.5391 433.5856 L 142.223 437.25 L 133.5391 440.9144 L b 1 To 1 0 0 1 147.5 453 0 Tp 1 w 4 M 208 422.5 m 208 453 L 147.5 453 L 147.5 422.5 L 208 422.5 L s TP TO u 212.277 437.5 m 238.4407 437.5 l S 0 O 0 g 0.3 w 10 M 231.0391 440.9144 m 232.595 437.25 L 231.0391 433.5856 L 239.723 437.25 L 231.0391 440.9144 L b U u 1 w 4 M 271.277 438 m 297.4407 438 l S 0 O 0 g 0.3 w 10 M 290.0391 441.4144 m 291.595 437.75 L 290.0391 434.0856 L 298.723 437.75 L 290.0391 441.4144 L b U u 1 w 4 M 366 430 m 366 444.5 L 303 444.5 L 303 430 L 366 430 L s 334.5 437.25 m S U 1 To 1 0 0 1 60.5542 505 0 Tp 102.5542 466.5 m 102.5542 505 L 60.5542 505 L 60.5542 466.5 L 102.5542 466.5 L n TP 17.3904 -9 Td 0 Tr 0 O 0 g (C\r) Tx -11.9519 -12 Td (header ) Tx 9.1736 -12 Td (file) Tx (\r) TX TO u 0 R 0 G 106.5595 478.0057 m 136.9298 453.4319 l S u 0 O 0 g 0.3 w 10 M 133.6491 460.8937 m 132.3862 457.1183 L 128.7926 455.405 L 137.7244 452.3949 L 133.6491 460.8937 L b U U 1 w 4 M 372.777 437 m 398.9407 437 l S 1 To 1 0 0 1 136 310.5 0 Tp 164.5 285 m 164.5 310.5 L 136 310.5 L 136 285 L 164.5 285 L n TP 0.9126 -9 Td 0 Tr 0 O 0 g (object\r) Tx 2.4988 -12 Td (code) Tx (\r) TX TO 2 To 1 0 0 1 -342 1044 0.4059 Tp 136.5 298.25 m 341.5 298.25 l N TP 3 Tr (\r) TX TO u 0 R 0 G 172.527 298 m 198.6907 298 l S 0 O 0 g 0.3 w 10 M 191.2891 301.4144 m 192.845 297.75 L 191.2891 294.0856 L 199.973 297.75 L 191.2891 301.4144 L b U 1 To 1 0 0 1 207.6067 304.25 0 Tp 1 w 4 M 258.1067 290.25 m 258.1067 304.25 L 207.6067 304.25 L 207.6067 290.25 L 258.1067 290.25 L n TP 13.3079 -9 Td 0 Tr 0 O 0 g (linker) Tx (\r) TX TO u 0 R 0 G 256.5 290.5 m 256.5 305 L 206.5 305 L 206.5 290.5 L 256.5 290.5 L s 238 297.75 m S U u 262.027 298 m 288.1907 298 l S 0 O 0 g 0.3 w 10 M 280.7891 301.4144 m 282.345 297.75 L 280.7891 294.0856 L 289.473 297.75 L 280.7891 301.4144 L b U 1 To 1 0 0 1 294 304.5 0 Tp 1 w 4 M 383 289 m 383 304.5 L 294 304.5 L 294 289 L 383 289 L n TP 0.606 -9 Td 0 Tr 0 O 0 g (run-time executbale) Tx (\r) TX TO u 0 R 0 G 399 437 m 399 331 l 78 331 l 78 297 l 128 297 l S U 1 To 1 0 0 1 152.25 450.5 0 Tp 200.75 421.5 m 200.75 450.5 L 152.25 450.5 L 152.25 421.5 L 200.75 421.5 L n TP 14.8066 -9 Td 0 Tr 0 O 0 g (RTL\r) Tx -11.3904 -12 Td (translator) Tx (\r) TX TO u 0 R 0 G 0.3 w 10 M 120.7891 301.1644 m 122.345 297.5 L 120.7891 293.8356 L 129.473 297.5 L 120.7891 301.1644 L b U 1 To 1 0 0 1 32.25 270.25 0 Tp 1 w 4 M 427.75 254.75 m 427.75 270.25 L 32.25 270.25 L 32.25 254.75 L 427.75 254.75 L n TP 61.1167 -9 Td 0 Tr 0 O 0 g /_Times-Italic 10 Tf (\r) TX TO 1 To 1 0 0 1 136 408 0 Tp 227 385 m 227 408 L 136 408 L 136 385 L 227 385 L n TP 4.3892 -9 Td 0 Tr 0 O 0 g /_Helvetica 10 Tf (\(interpreter option\)) Tx (\r) TX TO %%%PageTrailer gsave annotatepage grestore showpage %%%Trailer Adobe_IllustratorA_AI3 /terminate get exec Adobe_typography_AI3 /terminate get exec Adobe_customcolor /terminate get exec Adobe_cshow /terminate get exec Adobe_cmykcolor /terminate get exec Adobe_packedarray /terminate get exec %%%EOF endFig 732 2612(For)N 868(the)X 991(interpreter,)X 1371(Icon)X 1539(programs)X 1867(are)X 1991(translated)X 2328(into)X 2477(an)X 2578(intermediate)X 3004(form,)X 3205(which)X 3426(is)X 3504(then)X 3668(interpreted)X 4042(by)X 5 f 4150(iconx)X 1 f 4336(.)X 5 f 612 2708(iconx)N 1 f 798('s)X 876(interpreter)X 1231(loop)X 1393(calls)X 1560(the)X 1678(operations)X 2032(and)X 2168(support)X 2428(routines)X 2706(in)X 2788(the)X 2906(run-time)X 3202(system)X 3444(as)X 3531(needed.)X 732 2832(RTL)N 904(\256les)X 1058(have)X 1231(a)X 1288(suf\256x)X 1491(of)X 5 f 1581(.r)X 1 f 1630(.)X 1671(The)X 1817(names)X 2043(of)X 2131(the)X 2250(output)X 2475(\256les)X 2629(vary)X 2793(depending)X 3148(on)X 3249(whether)X 3529(an)X 3626(interpreter)X 3982(or)X 4071(compiler)X 612 2928(library)N 852(is)X 931(created;)X 1212(this)X 1353(is)X 1432(described)X 1766(below.)X 2008(The)X 2159(output)X 2389(\256les)X 2548(are)X 2673(given)X 2877(the)X 3001(suf\256x)X 3209(expected)X 3521(by)X 3627(the)X 3751(C)X 3830(compiler;)X 4163(this)X 4303(is)X 612 3024(typically)N 5 f 914(.c)X 1 f 976(.)X 3 f 612 3216(2.1)N 752(Preprocessor)X 5 f 732 3340(rtt)N 1 f 831(has)X 966(a)X 1030(built-in)X 1293(C)X 1374(preprocessor)X 1813(based)X 2024(on)X 2132(the)X 2258(ANSI)X 2473(C)X 2555(Standard)X 2869([3],)X 3012(but)X 3143(with)X 3314(extensions)X 3681(to)X 3772(support)X 4041(multi-line)X 612 3436(macros)N 868(with)X 1034(embedded)X 1388(preprocessor)X 1823(directives)X 2159([4].)X 5 f 2299(rtt)X 1 f 2394(automatically)X 2854(de\256nes)X 3105(the)X 3227(identi\256er)X 5 f 3542 -0.3889(StandardPP)AX 1 f 3993(before)X 4222(pro-)X 612 3532(cessing)N 870(any)X 1008(\256les)X 1163(to)X 1247(indicate)X 1523(that)X 1665(it)X 1731(is)X 1806(an)X 1904(ANSI)X 2114(C)X 2190(Standard)X 2498(preprocessor;)X 2954(some)X 3146(parts)X 3325(of)X 3415(the)X 3536(Icon)X 3702(system,)X 3967(for)X 4084(example)X 612 3628(header)N 853(\256les,)X 1032(may)X 1196(also)X 1350(be)X 1451(used)X 1623(directly)X 1893(with)X 2060(non-ANSI)X 2419(C)X 2497(compilers)X 2838(and)X 2979(contain)X 3240(code)X 3417(conditional)X 3802(on)X 3907(this)X 4047(identi\256er.)X 5 f 612 3724(rtt)N 1 f 709(processes)X 1043(a)X 1105(standard)X 1404(include)X 1667(\256le,)X 5 f 1818(grttin.h)X 1 f 2061(,)X 2108(before)X 2341(every)X 2547(RTL)X 2725(\256le)X 2854(it)X 2925(translates;)X 5 f 3279(grttin.h)X 1 f 3549(contains)X 5 f 3845(#include)X 1 f 4168(direc-)X 612 3820(tives)N 786(for)X 903(several)X 1154(other)X 1342(\256les.)X 5 f 1520(rtt)X 1 f 1614(uses)X 1775(these)X 1963(\256les)X 2119(to)X 2204(establish)X 2507(macro)X 2731(de\256nitions)X 3091(and)X 3230(to)X 3314(determine)X 5 f 3659(typedef)X 1 f 3941(names,= VMS.BCK[V9.DOCS]IPD261.PS;1%>)X 4188(but)X 4312(it)X 612 3916(outputs)N 867(nothing)X 1131(while)X 1329(processing)X 1692(these)X 1877(\256les.)X 732 4040(Within)N 983(its)X 1087(own)X 1254(preprocessor,)X 5 f 1716(rtt)X 1 f 1816(de\256nes)X 5 f 2074(COMPILER)X 1 f 2520(to)X 2611(0)X 2680(or)X 2776(1)X 2846(depending)X 3210(on)X 3320(whether)X 3609(interpreter)X 3974(or)X 4071(compiler)X 612 4136(code)N 788(is)X 865(being)X 1067(generated.)X 1443(It)X 1515(also)X 1667(places)X 1891(a)X 5 f 1952(#de\256ne)X 1 f 2235(directive)X 2539(for)X 5 f 2658(COMPILER)X 1 f 3098(at)X 3179(the)X 3300(beginning)X 3643(of)X 3733(every)X 3935(output)X 4162(\256le.)X 4307(It)X 612 4232(produces)N 929(an)X 5 f 1034(#include)X 1 f 1357(directive)X 1665(for)X 5 f 1788(rt.h)X 1 f 1930(after)X 2105(the)X 5 f 2232(#de\256ne)X 1 f 2519(directive.)X 2847(The)X 2999(preprocessor)X 3437(directives)X 3776(in)X 5 f 3868(rtt)X 1 f 3939('s)X 4025(output)X 4257(are)X 612 4328(used)N 779(by)X 879(the)X 997(C)X 1070(compiler.)X 732 4452(Arbitrary)N 1056(text)X 1201(may)X 1364(be)X 1465(passed)X 1704(through)X 5 f 1980(rtt)X 1 f 2076(using)X 2274(the)X 5 f 2399(#passthru)X 1 f 2773(directive.)X 3099(The)X 3250(contents)X 3543(of)X 3636(a)X 5 f 3700(#passthru)X 1 f 4075(directive)X 612 4548(are)N 732(written)X 980(to)X 1063(the)X 1182(output)X 1407(after)X 1576(each)X 1745(sequence)X 2061(of)X 2149(white)X 2348(space)X 2548(within)X 2773(the)X 2892(contents)X 3180(is)X 3254(replaced)X 3548(by)X 3649(a)X 3706(single)X 3918(space)X 4118(charac-)X 612 4644(ter.)N 5 f 748(#passthru)X 1 f 1126(is)X 1208(useful)X 1433(in)X 1524(those)X 1722(rare)X 1878(circumstances)X 2363(where)X 2590(something)X 2953(needed)X 3211(by)X 3321(the)X 3449(C)X 3532(compiler)X 3847(must)X 4032(be)X 4138(hidden)X 612 4740(from)N 5 f 792(rtt)X 1 f 863(.)X 5 f 929(#passthru)X 1 f 1300(only)X 1464(works)X 1682(correctly)X 1990(at)X 2070(the)X 2190(global)X 2412(level;)X 2612(if)X 2683(it)X 2749(is)X 2824(used)X 2993(within)X 3219(functions)X 3539(or)X 3628(declarations,)X 4058(the)X 4178(result)X 612 4836(is)N 685(not)X 807(put)X 929(in)X 1011(the)X 1129(correct)X 1373(location)X 1651(in)X 1733(the)X 1851(output.)X 2095(For)X 2226(example)X 5 f 900 4980(#passthru)N 1286(#de\256ne)X 1583(LIB_GET_EF)X 2204(LIB$GET_EF)X 1 f 612 5124(in)N 694(the)X 812(input)X 996(results)X 1225(in)X 5 f 900 5268(#de\256ne)N 1197(LIB_GET_EF)X 1707(LIB$GET_EF)X 1 f 612 5412(in)N 694(the)X 812(output.)X 732 5536(Such)N 916(code)X 1092(is)X 1169(used)X 1340(under)X 1547(VMS)X 1744(to)X 1830(allow)X 2032(calls)X 2203(to)X 2289(a)X 2349(function)X 2641(with)X 2808(a)X 2869(non-standard)X 3313(identi\256er)X 3627(for)X 3746(a)X 3807(name.)X 5 f 4028(RTL)X 1 f 4204(code)X 612 5632(for)N 727(VMS)X 921(contains)X 1209(calls)X 1377(to)X 5 f 1462(LIB_GET_EF)X 1 f 1935(.)X 5 f 1978(rtt)X 1 f 2070(parses)X 2292(this)X 2428(name)X 2623(as)X 2711(an)X 2808(identi\256er)X 3118(\(it)X 3210(produces)X 3520(an)X 3616(error)X 3793(message)X 4085(if)X 4154(it)X 4218(tries)X 612 5728(to)N 697(parse)X 5 f 892(LIB$GET_EF)X 1 f 1365(\))X 1415(and)X 1554(copies)X 1782(it)X 1849(to)X 1934(the)X 2055(output.)X 2302(The)X 2450(preprocessor)X 2884(for)X 3001(the)X 3123(C)X 3200(compiler)X 3509(sees)X 3667(the)X 5 f 3791(#de\256ne)X 1 f 4075(directive)X 612 5824(and)N 764(changes)X 1059(instances)X 1389(of)X 5 f 1494(LIB_GET_EF)X 1 f 2003(to)X 2101(the)X 2235(real)X 2391(function)X 2693(name,)X 5 f 2924(LIB$GET_EF)X 1 f 3397(,)X 3452(which)X 3683(is)X 3771(what)X 3962(the)X 4095(VMS)X 4303(C)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(3)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 4 p %%Page: 4 4 8 s 8 xH 0 xS 1 f 10 s 612 672(compiler)N 917(needs.)X 3 f 612 864(2.2)N 752(Support)X 1051(Routines)X 1 f 732 988(The)N 2 f 881(primary)X 1 f 1163(run-time)X 1463(routines)X 1745(written)X 1996(in)X 2082(RTL)X 2257(can)X 2394(call)X 2535(support)X 2800(routines)X 3083(written)X 3335(in)X 3422(C.)X 3520(The)X 3670(support)X 3935(routines)X 4218(may)X 612 1084(either)N 821(be)X 923(written)X 1176(in)X 1264(standard)X 1562(C,)X 1661(such)X 1834(as)X 1927(those)X 2122(in)X 2210(the)X 2334(\256le)X 5 f 2464(common/time.c)X 1 f 3005(,)X 3050(or)X 3142(they)X 3305(may)X 3468(use)X 3600(some)X 3794(of)X 3886(the)X 4009(features)X 4289(of)X 612 1180(extended)N 924(C.)X 1019(In)X 1108(the)X 1228(former)X 1469(case,)X 1650(they)X 1810(may)X 1970(be)X 2068(compiled)X 2388(directly)X 2655(with)X 2819(the)X 2939(C)X 3014(compiler.)X 3341(It)X 3413(does)X 3583(no)X 3686(harm)X 3874(to)X 3959(put)X 4084(standard)X 612 1276(C)N 690(code)X 867(through)X 5 f 1143(rtt)X 1 f 1214(,)X 1259(but)X 1386(it)X 1455(is)X 1533(important)X 1869(to)X 1955(determine)X 2300(which)X 2520(header)X 2759(\256les)X 2916(are)X 3039(automatically)X 3499(included)X 3799(by)X 5 f 3905(rtt)X 1 f 4000(so)X 4095(they)X 4257(are)X 612 1372(not)N 734(explicitly)X 1056(included)X 1352(in)X 1434(the)X 1552(C)X 1625(code.)X 3 f 612 1564(2.3)N 752(The)X 905(Data)X 1090(Base)X 5 f 732 1688(rtt)N 1 f 829(uses)X 993(the)X 1117(data)X 1277(base)X 1446(to)X 1534(pass)X 1698(various)X 1960(information)X 2364(about)X 2568(run-time)X 2870(routines)X 3154(to)X 5 f 3245(iconc)X 1 f 3431(,)X 3478(including)X 3807(the)X 3932(names)X 4164(of)X 4258(the)X 612 1784(library)N 855(routines)X 1142(that)X 1291(implement)X 1661(various)X 1925(operations.)X 5 f 2331(iconc)X 1 f 2517('s)X 2603(compile-time)X 3058(analyses,)X 3378(including)X 3708(type)X 3874(inference,)X 4222(pro-)X 612 1880(vide)N 771(information)X 1170(that)X 1311(the)X 1430(code)X 1603(generator)X 1928(needs)X 2132(to)X 2216(produce)X 2497(good)X 2679(code.)X 2873(These)X 3087(analyses)X 3381(need)X 3555(information)X 3955(about)X 4155(Icon's)X 612 1976(operations.)N 989(The)X 1137(control)X 1387(characteristics)X 1870(of)X 1960(an)X 2059(operation)X 2385(\(that)X 2555(is)X 2631(whether)X 2913(it)X 2980(suspends,)X 3312(fails,)X 3493(etc\))X 3637(are)X 3759(explicitly)X 4084(stated)X 4294(in)X 612 2072(the)N 737(operation's)X 1125(code.)X 1324(Type)X 1516(inference)X 1843(needs)X 2053(additional)X 2400(information;)X 2828(some)X 3025(of)X 3120(this)X 3263(is)X 3344(implicitly)X 3682(supplied)X 3981(through)X 4258(the)X 612 2168(type-checking)N 1093(code)X 1271(and)X 1413(some)X 1608(is)X 1687(explicitly)X 2015(supplied)X 2312(through)X 2 f 2587(abstract)X 2875(type)X 3035(computations)X 1 f 3466(.)X 3512(This)X 3679(information)X 4082(is)X 4160(stored)X 612 2264(in)N 694(the)X 812(data)X 966(base.)X 5 f 732 2388(iconc)N 1 f 942(uses)X 1104(the)X 1226(data)X 1384(base)X 1551(to)X 1637(determine)X 1983(what)X 2164(built-in)X 2424(functions)X 2747(and)X 2888(keywords)X 3225(are)X 3349(available.)X 3684(Therefore)X 4027(new)X 4186(func-)X 612 2484(tions)N 792(and)X 933(keywords)X 1270(can)X 1407(be)X 1508(added)X 1725(to)X 1812(the)X 1935(the)X 2058(compiler)X 2368(without)X 2637(rebuilding)X 5 f 2993(iconc)X 1 f 3179(.)X 3224(They)X 3414(need)X 3591(only)X 3758(be)X 3859(run)X 3990(through)X 5 f 4265(rtt)X 1 f 4336(,)X 612 2580(updating)N 912(the)X 1030(data)X 1184(base)X 1347(and)X 1483(the)X 1601(library.)X 1855(\(See)X 2018([5])X 2132(for)X 2246(instructions)X 2639(on)X 2739(adding)X 2977(new)X 3131(built-in)X 3386(functions)X 3704(to)X 3786(the)X 3904(interpreter.\))X 732 2704(Externally,)N 1106(the)X 1224(data)X 1378(base)X 1541(is)X 1614(implemented)X 2052(as)X 2139(a)X 2195(text)X 2335(\256le.)X 2497(It)X 2566(is)X 2640(organized)X 2978(to)X 3061(be)X 3158(read)X 3318(by)X 3419(programs,)X 3763(but)X 3886(can)X 4019(be)X 4116(read)X 4276(by)X 612 2800(humans)N 881(beings)X 1110(without)X 1374(great)X 1555(dif\256culty.)X 1888(See)X 2024(Appendix)X 2360(E)X 2429(for_c@ VMS.BCK[V9.DOCS]IPD261.PS;1ts)X 2543(the)X 2661(data)X 2815(base)X 2978(format.)X 3 f 612 2992(2.4)N 752(Versions)X 1070(of)X 1157(an)X 1261(Operation)X 1 f 732 3116(There)N 941(is)X 1015(one)X 1152(RTL)X 1324(source)X 1555(coding)X 1794(for)X 1909(an)X 2006(Icon)X 2171(operation.)X 2516(However,)X 2853(each)X 3023(operation)X 3348(has)X 3477(two)X 3619(implementations)X 4174(in)X 4258(the)X 612 3212(compiler:)N 942(an)X 1041(in-line)X 1273(version)X 1532(and)X 1671(a)X 1730(most)X 1908(general)X 2168(version)X 2427(\(except)X 2687(keywords,)X 3041(which)X 3259(only)X 3423(have)X 3597(an)X 3695(in-line)X 3926(version\).)X 4231(The)X 612 3308(most)N 797(general)X 1064(version)X 1330(is)X 1413(a)X 1479(C)X 1562(function)X 1859(in)X 1951(the)X 2079(library.)X 2343(This)X 2515(function)X 2812(conforms)X 3145(to)X 3237(a)X 3303(standard)X 3605(calling)X 3853(convention)X 4240(and)X 612 3404(includes)N 909(code)X 1090(to)X 1181(perform)X 1469(argument)X 1801(list)X 1927(adjustment)X 2307(and)X 2452 0.2596(dereferencing,)AX 2944(along)X 3151(with)X 3322(type)X 3489(checking)X 3808(and)X 3953(conversions.)X 5 f 612 3500(iconc)N 1 f 798('s)X 883(code)X 1062(generator)X 1393(uses)X 1558(this)X 1700(version)X 1964(of)X 2059(the)X 2185(operation)X 2516(when)X 2718(it)X 2790(is)X 2871(impossible)X 3245(or)X 3340(inappropriate)X 3796(to)X 3886(use)X 4021(the)X 4147(in-line)X 612 3596(version.)N 732 3720(The)N 879(in-line)X 1110(version)X 1368(of)X 1457(an)X 1555(operation)X 1880(is)X 1955(stored)X 2173(by)X 5 f 2277(rtt)X 1 f 2370(in)X 2454(the)X 2574(data)X 2730(base.)X 2935(The)X 3082(entire)X 3287(interface)X 3591(portion)X 3844(of)X 3934(an)X 4033(operation,)X 612 3816(including)N 937(type)X 1098(checking)X 1411(and)X 1550(conversions,)X 1975(is)X 2050(represented)X 2443(in)X 2527(the)X 2647(data)X 2803(base.)X 3008(However,)X 3345(the)X 3465(detailed)X 3741(code)X 3915(may)X 4075(either)X 4280(be)X 612 3912(put)N 736(in)X 820(the)X 940(data)X 1096(base)X 1261(or)X 1350(placed)X 1583(in)X 1668(the)X 1789(library)X 2026(as)X 2116(C)X 2192(functions.)X 2533(This)X 2698(choice)X 2931(is)X 3007(controlled)X 3355(by)X 3458(the)X 3579(programmer)X 3999(who)X 4160(writes)X 612 4008(the)N 736(run-time)X 1038(routine.)X 1310(One)X 1469(operation)X 1797(may)X 1960(produce)X 2244(several)X 2497(of)X 2589(these)X 2779(detail)X 2982(functions)X 3305(\(typically)X 3637(different)X 3939(functions)X 4262(for)X 612 4104(different)N 913(argument)X 1240(types\).)X 1480(They)X 1669(have)X 1845(calling)X 2087(conventions)X 2498(speci\256c)X 2767(to)X 2853(their)X 3024(needs.)X 3251(The)X 3400(calling)X 3642(conventions)X 4054(are)X 4178(noted)X 612 4200(in)N 694(the)X 812(data)X 966(base)X 1129(at)X 1207(the)X 1325(point)X 1509(in)X 1591(the)X 1709(in-line)X 1938(code)X 2110(where)X 2327(the)X 2445(functions)X 2763(must)X 2938(be)X 3034(called.)X 732 4324(The)N 881(interpreter)X 1240(has)X 1371(one)X 1511(version)X 1771(of)X 1862(each)X 2034(operation.)X 2381(It)X 2454(is)X 2531(similar)X 2777(to)X 2863(the)X 2985(most)X 3164(general)X 3425(version)X 3685(for)X 3803(the)X 3925(compiler,)X 4254(but)X 612 4420(the)N 730(calling)X 968(conventions)X 1375(differ.)X 3 f 612 4612(2.5)N 752(Operation)X 1123(Documentation)X 1 f 732 4736(RTL)N 904(allows)X 1134(explicit)X 1395(documentation)X 1892(of)X 1980(an)X 2077(operation.)X 2441(In)X 2529(addition,)X 2833(many)X 3033(of)X 3122(the)X 3242(characteristics)X 3724(of)X 3813(an)X 3911(operation)X 4236(that)X 612 4832(are)N 737(used)X 910(by)X 1016(the)X 1140(compiler)X 1451(can)X 1589(be)X 1691(automatically)X 2153(added)X 2371(to)X 2459(the)X 2582(description)X 2963(of)X 3055(the)X 3178(operation.)X 3526(Thus,)X 3731(the)X 3854(implementation)X 612 4928(acts)N 760(as)X 850(a)X 909(central)X 1151(location)X 1432(for)X 1549(operation)X 1875(documentation.)X 2394(This)X 2559(documentation)X 3058(can)X 3194(be)X 3294(extracted)X 3613(from)X 3793(the)X 3915(data)X 4073(base)X 4240(and)X 612 5024(formatted)N 944(for)X 1058(various)X 1314(purposes.)X 3 f 612 5312(3.)N 712(Language)X 1069(De\256nition)X 1 f 732 5436(The)N 886(grammar)X 1205(for)X 1328(RTL)X 1508(is)X 1590(presented)X 1927(in)X 2018(extended)X 2337(BNF)X 2521(notation.)X 2852(Terminal)X 3175(symbols)X 3471(are)X 3600(set)X 3719(in)X 5 f 3813(Helvetica)X 1 f 4141(.)X 4191(Non-)X 612 5532(terminals)N 936(and)X 1078(meta-symbols)X 1553(are)X 1678(set)X 1793(in)X 2 f 1881(Times-Italic)X 1 f 2268(.)X 2313(In)X 2405(addition)X 2692(to)X 2779(the)X 2902(usual)X 3096(meta-symbols,)X 2 f 3590(::=)X 1 f 3723(for)X 3842(``is)X 3974(de\256ned)X 4235(as'')X 612 5628(and)N 2 f 9 f 762(|)X 1 f 812(for)X 940(``alternatives'',)X 1473(brackets)X 1776(around)X 2034(a)X 2105(sequence)X 2435(of)X 2537(symbols)X 2838(indicate)X 3127(that)X 3282(the)X 3415(sequence)X 3745(is)X 3833(optional,)X 4150(braces)X 612 5724(around)N 866(a)X 933(sequence)X 1259(of)X 1357(symbols)X 1654(followed)X 1970(by)X 2080(an)X 2186(asterisk)X 2461(indicate)X 2745(that)X 2895(the)X 3023(sequence)X 3348(may)X 3516(be)X 3622(repeated)X 3925(zero)X 4094(or)X 4191(more)X 612 5820(times,)N 825(and)X 961(braces)X 1187(followed)X 1492(by)X 1592(a)X 1648(plus)X 1801(indicate)X 2075(that)X 2215(the)X 2333(enclosed)X 2634(sequence)X 2949(may)X 3107(be)X 3203(repeated)X 3496(one)X 3632(or)X 3719(more)X 3904(times.)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 732 672(An)N 5 f 861(rtt)X 1 f 962(input)X 1156(\256le)X 1288(may)X 1456(contain)X 1722(operation)X 2055(de\256nitions)X 2422(written)X 2679(in)X 2771(RTL,)X 2972(along)X 3180(with)X 3352(C)X 3435(de\256nitions)X 3802(and)X 3948(declarations.)X 612 768(This)N 789(section)X 1051(describes)X 1385(the)X 1518(operation)X 1856(de\256nitions.)X 2248(C)X 2336(language)X 2661(documentation)X 3171(should)X 3418(be)X 3528(consulted)X 3869(for)X 3997(ordinary)X 4303(C)X 612 864(grammar.)N 942(The)X 1087(next)X 1245(section)X 1492(describes)X 1811(extensions)X 2169(to)X 2251(ordinary)X 2543(C)X 2616(grammar.)X 3 f 612 1084(3.1)N 752(Operation)X 1123(Documentation)X 1 f 732 1208(An)N 850(operation)X 1173(de\256nition)X 1499(can)X 1631(be)X 1727(preceded)X 2038(by)X 2138(an)X 2234(optional)X 2516(description)X 2892(in)X 2974(the)X 3092(form)X 3268(of)X 3355(a)X 3411(C)X 3484(string)X 3686(literal.)X 2 f 900 1352(documented-de\256nition)N 1634(::=)X 1759([)X 1807(C-string-literal)X 2312(])X 2360(operation-de\256nition)X 1 f 612 1496(The)N 757(use)X 884(of)X 971(a)X 1027(C)X 1100(string)X 1302(allows)X 1532(an)X 1629(implementation)X 2152(\256le)X 2275(to)X 2358(be)X 2455(processed)X 2793(by)X 2894(a)X 2951(C)X 3025(preprocessor)X 3457(without)X 3722(loosing)X 3978(the)X 4097(descrip-)X 612 1592(tion,)N 792(as)X 895(happens)X 1194(with)X 1372(descriptions)X 1795(in)X 1893(the)X 2027(form)X 2219(of)X 2322(C)X 2411(comments.)X 2816(The)X 2977(preprocessor)X 3424(concatenates)X 3871(adjacent)X 4174(string)X 612 1688(literals,)N 873(allowing)X 1176(a)X 1235(multi-line)X 1573(description)X 1953(to)X 2039(be)X 2139(written)X 2390(using)X 2587(multiple)X 2877(strings.)X 3134(Alternatively,)X 3601(a)X 3661(multi-line)X 4000(description)X 612 1784(can)N 751(be)X 854(written)X 1108(using)X 1308(`\\')X 1411(for)X 1532(line)X 1679(continuation.)X 2126(This)X 2295(description)X 2678(is)X 2757(stored)X 2979(in)X 3067(the)X 3191(operation)X 3520(data)X 3680(base)X 3849(where)X 4072(it)X 4142(can)X 4280(be)X 612 1880(extracted)N 936(by)X 1045(documentation)X 1551(generation)X 1920(programs,)X 2273(that)X 2423(generators)X 2788(produce)X 3077(formatted)X 3419(documentation)X 3925(for)X 4049(Icon)X 4222(pro-)X 612 1976(gra,- VMS.BCK[V9.DOCS]IPD261.PS;1mmers)N 957(and)X 1097(for)X 1215(C)X 1292(programmers)X 1744(maintaining)X 2150(the)X 2272(Icon)X 2439(implementation.)X 2985(The)X 3134(documentation)X 3634(generators)X 3993(are)X 4115(respon-)X 612 2072(sible)N 783(for)X 897(inserting)X 1197(newline)X 1471(characters)X 1818(at)X 1896(reasonable)X 2260(points)X 2475(when)X 2669(printing)X 2942(the)X 3060(description.)X 3 f 612 2264(3.2)N 752(Types)X 976(of)X 1063(Operations)X 5 f 732 2388(rtt)N 1 f 823(can)X 955(be)X 1051(used)X 1218(to)X 1300(de\256ne)X 1516(the)X 1634(built-in)X 1889(functions,)X 2227(operators,)X 2566(and)X 2702(keywords)X 3034(of)X 3121(the)X 3239(Icon)X 3402(language.)X 3732(\(Note)X 3935(that)X 4075(there)X 4257(are)X 612 2484(some)N 814(Icon)X 990(constructs)X 1347(that)X 1499(fall)X 1638(outside)X 1901(this)X 2048(implementation)X 2582(speci\256cation)X 3019(system.)X 3293(These)X 3517(include)X 3785(control)X 4044(structures)X 612 2580(such)N 779(as)X 866(string)X 1068(scanning)X 1373(and)X 1509(limitation,)X 1859(along)X 2057(with)X 2219(record)X 2445(constructors)X 2857(and)X 2993(\256eld)X 3155 0.3523(references.\))AX 2 f 900 2724(operation-de\256nition)N 1557(::=)X 5 f 1717(function)X 2 f 2012(result-seq)X 2466(identi\256er)X 5 f 2772(\()X 2 f 2816([)X 2864(param-list)X 3214(])X 5 f 3262(\))X 2 f 3306([)X 3354(declare)X 3612(])X 3676(actions)X 5 f 3941(end)X 2 f 9 f 4107(|)X 5 f 1717 2820(operator)N 2 f 2030(result-seq)X 2363(op)X 2466(identi\256er)X 5 f 2772(\()X 2 f 2816([)X 2864(param-list)X 3214(])X 5 f 3262(\))X 2 f 3306([)X 3354(declare)X 3612(])X 3676(actions)X 5 f 3941(end)X 2 f 9 f 4107(|)X 5 f 1717 2916(keyword)N 2 f 2031(result-seq)X 2466(identi\256er)X 3676(actions)X 5 f 3941(end)X 2 f 9 f 4107(|)X 5 f 1717 3012(keyword)N 2 f 2031(result-seq)X 2466(identi\256er)X 5 f 2772(constant)X 2 f 3089(key-const)X 5 f 3941(end)X 2 f 900 3204(result-seq)N 1233(::=)X 5 f 1389({)X 2 f 1435(length)X 5 f 1654(,)X 2 f 1695(length)X 1912([)X 5 f 1960(+)X 2 f 2024(])X 5 f 2072(})X 2 f 9 f 2133(|)X 5 f 1389 3300({)N 2 f 1435(length)X 1652([)X 5 f 1700(+)X 2 f 1764(])X 5 f 1812(})X 2 f 9 f 1873(|)X 5 f 1389 3396({)N 1435(})X 2 f 900 3588(length)N 1117(::=)X 1242(integer)X 9 f 1503(|)X 5 f 1553(*)X 2 f 732 3760(result-seq)N 1 f 1073(indicates)X 1383(the)X 1506(minimum)X 1841(and)X 1982(maximum)X 2331(length)X 2557(of)X 2650(the)X 2774(result)X 2978(sequence)X 3299(of)X 3392(an)X 3494(operation)X 3823(\(the)X 3974(operation)X 4303(is)X 612 3856(treated)N 857(as)X 950(if)X 1025(it)X 1094(is)X 1172(used)X 1344(in)X 1431(a)X 1492(context)X 1753(where)X 1975(it)X 2044(produces)X 2359(all)X 2464(of)X 2556(its)X 2656(results\).)X 2937(For)X 3073(example,)X 3390(addition)X 3677(always)X 3925(produces)X 4240(one)X 612 3952(result)N 811(so)X 903(its)X 2 f 999(result-seq)X 1 f 1337(is)X 5 f 1414({1,)X 1531(1})X 1 f 1602(.)X 1644(If)X 1720(the)X 1840(minimum)X 2172(and)X 2310(maximum)X 2656(are)X 2777(the)X 2897(same,)X 3104(only)X 3268(one)X 3406(number)X 3673(need)X 3847(be)X 3945(given,)X 4165(so)X 4258(the)X 2 f 612 4048(result-seq)N 1 f 950(for)X 1066(addition)X 1350(can)X 1484(be)X 1582(coded)X 1796(as)X 5 f 1887({1})X 1 f (.)S 2027(A)X 2107(conditional)X 2489(operation)X 2814(can)X 2947(produce)X 3227(either)X 3431(no)X 3532(results)X 3762(\(that)X 3930(is,)X 4024(it)X 4089(can)X 4222(fail\))X 612 4144(or)N 699(it)X 763(can)X 895(produce)X 1174(one)X 1310(result,)X 1528(so)X 1619(its)X 2 f 1714(result-seq)X 1 f 2050(is)X 5 f 2125({0,)X 2240(1})X 1 f 2311(.)X 2351(A)X 2429(length)X 2649(of)X 5 f 2738(*)X 1 f 2789(indicates)X 3094(an)X 3190(unbounded)X 3566(number)X 3831(of)X 3918(results,)X 4167(so)X 4258(the)X 2 f 612 4240(result-seq)N 1 f 951(of)X 5 f 1043(!)X 1 f 1087(is)X 1162(indicated)X 1478(by)X 5 f 1582({0,)X 1699(*})X 1 f 1757(.)X 1819(An)X 5 f 1941(*)X 1 f 1994(in)X 2078(the)X 2198(lower)X 2403(bound)X 2625(means)X 2852(the)X 2972(same)X 3159(thing)X 3345(as)X 3434(0,)X 3516(so)X 5 f 3611({0,)X 3728(*})X 1 f 3808(can)X 3942(be)X 4040(written)X 4289(as)X 5 f 612 4336({*,)N 718(*})X 1 f 776(,)X 820(which)X 1040(simpli\256es)X 1374(to)X 5 f 1462({*})X 1 f 1547(.)X 1611(A)X 2 f 1693(result-seq)X 1 f 2033(of)X 5 f 2126({})X 1 f 2204(indicates)X 2513(no)X 2617(result)X 2819(sequence.)X 3158(This)X 3324(is)X 3401(not)X 3527(the)X 3649(same)X 3838(as)X 3929(a)X 3990(zero-length)X 612 4432(result)N 813(sequence,)X 5 f 1153({0})X 1 f (;)S 1296(an)X 1395(operation)X 1721(with)X 1886(no)X 1989(result)X 2190(sequence)X 2508(does)X 2678(not)X 2802(even)X 2976(fail.)X 5 f 3127(exit\(\))X 1 f 3327(is)X 3402(an)X 3500(example)X 3794(of)X 3883(such)X 4052(an)X 4150(opera-)X 612 4528(tion.)N 732 4652(A)N 5 f 821(+)X 1 f 897(following)X 1237(the)X 1364(length\(s\))X 1678(in)X 1769(a)X 2 f 1834(result-seq)X 1 f 2179(indicates)X 2493(that)X 2642(the)X 2769(operation)X 3101(can)X 3242(be)X 3347(resumed)X 3648(to)X 3739(perform)X 4028(some)X 4227(side)X 612 4748(effect)N 820(after)X 992(producing)X 1341(its)X 1440(last)X 1575(result.)X 1817(All)X 1943(existing)X 2220(examples)X 2547(of)X 2638(such)X 2809(operations)X 3167(produce)X 3450(at)X 3532(most)X 3710(one)X 3849(result,)X 4070(perform-)X 612 4844(ing)N 739(a)X 800(side)X 954(effect)X 1163(in)X 1250(the)X 1374(process.)X 1661(The)X 1812(side)X 1967(effect)X 2177(on)X 2283(resumption)X 2669(is)X 2748(simply)X 2991(an)X 3093(undoing)X 3381(of)X 3474(the)X 3598(original)X 3873(side)X 4028(effect.)X 4258(An)X 612 4940(example)N 904(of)X 991(this)X 1126(is)X 5 f 1201(tab\(\))X 1 f 1365(,)X 1405(which)X 1621(changes)X 5 f 1902(&pos)X 1 f 2103(as)X 2190(the)X 2308(side)X 2457(effect.)X 732 5064(For)N 870(functions)X 1195(and)X 1338(keywords,)X 2 f 1697(identi\256er)X 1 f 2013(is)X 2093(the)X 2219(name)X 2421(by)X 2529(which)X 2753(the)X 2879(operation)X 3210(is)X 3291(known)X 3537(within)X 3769(the)X 3895(Icon)X 4066(language)X 612 5160(\(for)N 757(keywords,)X 2 f 1113(identi\256er)X 1 f 1426(does)X 1597(not)X 1723(include)X 1983(the)X 5 f 2107(&)X 1 f 2160(\).)X 2231(For)X 2366(operations,)X 2 f 2744(op)X 1 f 2847(is)X 2923(\(usually\))X 3231(the)X 3352(symbol)X 3610(by)X 3713(which)X 3932(the)X 4053(operation)X 612 5256(is)N 689(known)X 931(within)X 1159(the)X 1281(Icon)X 1448(language)X 1763(and)X 2 f 1904(identi\256er)X 1 f 2218(is)X 2296(a)X 2357(descriptive)X 2734(name.)X 2953(It)X 3027(is)X 3105(possible)X 3392(to)X 3479(have)X 3656(more)X 3846(than)X 4009(one)X 4150(opera-)X 612 5352(tion)N 757(with)X 920(the)X 1039(same)X 2 f 1225(op)X 1 f 1326(as)X 1414(long)X 1577(as)X 1665(they)X 1824(have)X 1997(different)X 2294(identi\256ers)X 2634(and)X 2770(take)X 2924(a)X 2980(different)X 3277(number)X 3542(of)X 3629(operands.)X 3979(In)X 4066(all)X 4166(cases,)X 612 5448(the)N 2 f 730(identi\256er)X 1 f 1039(is)X 1112(used)X 1279(to)X 1361(construct)X 1675(the)X 1793(name\(s\))X 2072(of)X 2159(the)X 2277(C)X 2350(function\(s\))X 2722(which)X 2938(implement)X 3300(the)X 3418(operation.)X 732 5572(A)N 2 f 812(param-list)X 1 f 1167(is)X 1243(a)X 1302(comma-separated)X 1892(list)X 2012(of)X 2102(parameter)X 2447(declarations.)X 2878(Some)X 3083(operations,)X 3460(such)X 3630(as)X 5 f 3722(write\(\))X 1 f 3945(,)X 3988(take)X 4145(a)X 4204(vari-)X 612 5668(able)N 780(number)X 1059(of)X 1160(arguments.)X 1548(This)X 1724(is)X 1811(indicated)X 2139(by)X 2253(appending)X 2620(a)X 2689(pair)X 2847(of)X 2947(brackets)X 3248(enclosing)X 3588(an)X 3697(identi\256er)X 4019(to)X 4114(the)X 4245(last)X 612 5764(parameter)N 964(declaration.)X 1371(This)X 1543(last)X 1684(parameter)X 2036(is)X 2119(then)X 2287(an)X 2393(array)X 2589(containing)X 2957(the)X 2 f 3086(tail)X 1 f 3223(of)X 3321(the)X 3450(argument)X 3784(list,)X 3932(that)X 4083(is,)X  VMS.BCK[V9.DOCS]IPD261.PS;1M4187(those)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 612 672(arguments)N 971(not)X 1098(taken)X 1297(up)X 1401(by)X 1505(the)X 1627(preceding)X 1968(parameters.)X 2365(The)X 2514(identi\256er)X 2827(in)X 2913(brackets)X 3205(represents)X 3555(the)X 3677(length)X 3901(of)X 3992(the)X 4114(tail)X 4240(and)X 612 768(has)N 739(a)X 795(type)X 953(of)X 1040(C)X 1113(integer.)X 2 f 900 912(param-list)N 1250(::=)X 1375(param)X 1601({)X 5 f 1650(,)X 2 f 1689(param)X 1915(}*)X 2004([)X 5 f 2052([)X 2 f 2091(identi\256er)X 5 f 2397(])X 2 f 2436(])X 1 f 612 1056(Most)N 825(operations)X 1208(need)X 1409(their)X 1605(arguments)X 1988 0.3438(dereferenced.)AX 2474(However,)X 2838(some)X 3056(operations,)X 3460(such)X 3657(as)X 3774(assignment,)X 4204(need)X 612 1152 0.3173(undereferenced)AN 1138(arguments)X 1501(and)X 1646(a)X 1710(few)X 1859(need)X 2039(both)X 2209 0.3750(dereferenced)AX 2654(and)X 2798 0.3173(undereferenced)AX 3323(versions)X 3618(of)X 3713(an)X 3817(argument.)X 4168(There)X 612 1248(are)N 731(forms)X 938(of)X 1025(parameter)X 1367(declarations)X 1775(to)X 1857(match)X 2073(each)X 2241(of)X 2328(these)X 2513(needs.)X 2 f 900 1392(param)N 1126(::=)X 1556(identi\256er)X 9 f 1879(|)X 5 f 1257 1488(underef)N 2 f 1556(identi\256er)X 9 f 1879(|)X 5 f 1257 1584(underef)N 2 f 1556(identi\256er)X 5 f 9 f 1862(-)X 5 f 1906(>)X 2 f 1970(identi\256er)X 1 f 612 1728(A)N 692(simple)X 927(identi\256er)X 1238(indicates)X 1545(a)X 1603 0.3750(dereferenced)AX 2043(parameter.)X 5 f 2410(underef)X 1 f 2702(indicates)X 3010(an)X 3109 0.3173(undereferenced)AX 3629(parameter.)X 3994(In)X 4084(the)X 4205(third)X 612 1824(form)N 793(of)X 885(parameter)X 1232(declaration,)X 1634(the)X 1757(\256rst)X 1906(identi\256er)X 2220(represents)X 2571(the)X 2693 0.2955(undeferenced)AX 3151(form)X 3331(of)X 3422(the)X 3544(argument)X 3871(and)X 4011(the)X 4133(second)X 612 1920(identi\256er)N 923(represents)X 1271(the)X 1391 0.3750(dereferenced)AX 1831(form.)X 2030(This)X 2195(third)X 2369(form)X 2548(of)X 2638(declaration)X 3018(may)X 3179(not)X 3304(be)X 3403(used)X 3573(with)X 3738(the)X 3859(variable)X 4141(part)X 4289(of)X 612 2016(an)N 714(argument)X 1043(list.)X 1206(These)X 1424(identi\256ers)X 1770(are)X 1895(of)X 1988(type)X 2 f 2152(descriptor)X 1 f 2481(.)X 2527(Descriptors)X 2923(are)X 3048(implemented)X 3492(as)X 3585(C)X 3664(structs.)X 3939(See)X 4081([6])X 4201(for)X 4320(a)X 612 2112(detailed)N 886(explanation)X 1280(of)X 1367(descriptors.)X 732 2236(Examples)N 1068(of)X 1155(operation)X 1478(headers:)X 5 f 900 2380("detab\(s,i,...\))N 9 f 1385(-)X 5 f 1466(replace)X 1764(tabs)X 1951(with)X 2130(spaces,)X 2441(with)X 2620(stops)X 2847(at)X 2950(columns)X 3284(indicated.")X 900 2476(function{1})N 1313(detab\(s,)X 1637(i[n]\))X 2 f 1011 2572(actions)N 5 f 900 2668(end)N 900 2860("x)N 1005(<)X 9 f 1052(-)X 5 f 1096(>)X 1180(y)X 9 f 1257(-)X 5 f 1338(swap)X 1561(values)X 1828(of)X 1931(x)X 2008(and)X 2177(y.")X 900 2956(")N 965(Reverses)X 1339(swap)X 1562(if)X 1639(resumed.")X 900 3052(operator{0,1+})N 1444(<)X 9 f 1491(-)X 5 f 1535(>)X 1619(rswap\(underef)X 2165(x)X 9 f 2242(-)X 5 f 2286(>)X 2370(dx,)X 2513(underef)X 2819(y)X 9 f 2896(-)X 5 f 2940(>)X 3024(dy\))X 2 f 1011 3148(declare)N 1011 3244(actions)N 5 f 900 3340(end)N 900 3532("&fail)N 9 f 1120(-)X 5 f 1201(just)X 1362(fail")X 900 3628(keyword{0})N 1332(fail)X 2 f 1048 3724(actions)N 5 f 900 3820(end)N 3 f 612 4060(3.3)N 752(Declare)X 1036(Clause)X 1 f 732 4184(Some)N 945(operations)X 1310(need)X 1493(C)X 1577(declarations)X 1996(that)X 2147(are)X 2277(common)X 2588(to)X 2682(several)X 2942(actions.)X 3241(These)X 3465(can)X 3609(be)X 3717(declared)X 4022(within)X 4258(the)X 5 f 612 4280(declare)N 1 f 893(clause.)X 2 f 900 4424(declare)N 1158(::=)X 5 f 1283(declare)X 1563({)X 2 f 1607(C)X 1677(declarations)X 5 f 2094(})X 1 f 612 4568(These)N 824(may)X 982(include)X 2 f 1238(tended)X 1 f 1472(declarations,)X 1900(which)X 2116(are)X 2235(explained)X 2567(below)X 2783(in)X 2865(the)X 2983(section)X 3230(on)X 3331(extensions)X 3690(to)X 3773(C.)X 3867(If)X 3942(a)X 3999(declaration)X 612 4664(can)N 746(be)X 844(made)X 1040(local)X 1218(to)X 1302(a)X 1360(block)X 1560(of)X 1649(embedded)X 2000(C)X 2074(code,)X 2267(it)X 2332(is)X 2406(usually)X 2658(better)X 2862(to)X 2945(put)X 3068(it)X 3133(there)X 3315(than)X 3474(in)X 3557(a)X 5 f 3616(declare)X 1 f 3898(clause.)X 4140(This)X 4303(is)X 612 4760(explained)N 944(below)X 1160(in)X 1242(the)X 1360(discussion)X 1713(of)X 1800(the)X 5 f 1920(body)X 1 f 2112(action.)X 3 f 612 4980(3.4)N 752(Constant)X 1083(Keywords)X 1 f 732 5104(Any)N 890(keyword)X 1191(can)X 1323(be)X 1419(implemented)X 1857(using)X 2050(general)X 2 f 2308(actions)X 1 f 2539(.)X 2580(However,)X 2916(for)X 3031(constant)X 3319(keywords,)X 5 f 3674(iconc)X 1 f 3881(sometimes)X 4244(can)X 612 5200(produce)N 893(more)X 1080(ef\256cient)X 1365(code)X 1539(if)X 1610(it)X 1676(treats)X 1872(the)X 1991(keyword)X 2293(as)X 2381(a)X 2438(literal)X 2646(constant.)X 2954(Therefore,)X 3313(a)X 3370(special)X 3614(declaration)X 3992(is)X 4066(available)X 612 5296(for)N 730(declaring)X 1053(keywords)X 1389(that)X 1533(can)X 1669(be)X 1769(represented)X 2164(as)X 2255(Icon)X 2423(literals.)X 2686(The)X 2836(constant)X 3128(is)X 3206(introduced)X 3574(with)X 3741(the)X 3864(word)X 5 f 4056(constant)X 1 f 612 5392(and)N 748(can)X 880(be)X 976(one)X 1112(of)X 1199(four)X 1353(literal)X 1560(types.)X 2 f 900 5536(key-const)N 1221(::=)X 1346(string-literal)X 9 f 1788(|)X 2 f 1838(cset-literal)X 9 f 2219(|)X 2 f 2269(integer-literal)X 9 f 2752(|)X 2 f 2802(real-literal)X 1 f 612 5680(When)N 838(using)X 1045(this)X 1194(mechanism,)X 1613(the)X 1745(programmer)X 2176(should)X 2423(be)X 2533(aware)X 2760(of)X 2861(the)X 2993(fact)X 3148(that)X 5 f 3304(rtt)X 1 f 3410(tokenizes)X 3748(these)X 3948(literals)X 4201(as)X 4303(C)X 612 5776(literals,)N 872(even)X 1046(though)X 1290(they)X 1450(are)X 1571(later)X 1736(interpreted)X 2106(as)X 2195(Icon)X 2360(literals.)X 2620(This)X 2784(has)X 2913(only)X 3077(a)X 3135(few)X 3278(effects)X 3515(on)X 3617(their)X 3785(use.)X 3953(See)X 4090([4])X 4205(for)X 4320(a)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(6)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 612 672(description)N 992(of)X 1083(how)X 1245(the)X 1367(preprocessor)X 1802(interprets)X 2129(string)X 2335(literals)X 2577(during)X 2810(string)X 3016(concatenation;)X 3509(in)X 3596(some)X 3790(situations,)X 4141(escape)X 612 768(sequences)N 962(are)X 1085(explicitly)X 1410(treated)X 1652(as)X 1742(C)X 1818(characters.)X 2188(C)X 2264(does)X 2434(not)X 2559(recognize)X 2895(control)X 3145(escapes,)X 3434(so)X 5 f 3530('\\\303'')X 1 f 3633(,)X 3676(which)X 3895(is)X 3971(a)X 4030(valid)X 4213(Icon)X 612 864(cset)N 760(literal,)X 990(is)X 1066(not)X 1191(recognized)X 1568(by)X 5 f 1674(rtt)X 1 f 1745('s)X 1827(C)X 1904(tokenizer,)X 2247(because)X 2526(the)X 2648(second)X 2895(quote)X 3097(ends)X 3268(the)X 3390(literal,)X 3621(leaving)X 3881(the)X 4003(third)X 4178(quote)X 612 960(dangling.)N 952(Only)X 1132(decimal)X 1406(integer)X 1649(literals)X 1887(are)X 2006(allowed.)X 3 f 612 1152(3.5)N 752(Actions)X 1 f 732 1276(All)N 854(operations)X 1208(other)X 1393(than)X 1551(constant)X 1838(keywords)X 2170(are)X 2289(implemented)X 2727(with)X 2889(general)X 2 f 3146(actions)X 1 f 3377(.)X 732 1400(Actions)N 1007(fall)X 1140(into)X 1290(four)X 1450(categories:)X 1824(type)X 1988(checking)X 2304(and)X 2446(conversions,)X 2875(detail)X 3079(code)X 3257(expra VMS.BCK[V9.DOCS]IPD261.PS;1Йessed)X 3600(in)X 3689(extended)X 4006(C,)X 4106(abstract)X 612 1496(type)N 770(computations,)X 1241(and)X 1377(error)X 1554(reporting.)X 2 f 900 1640(actions)N 1148(::=)X 1273({)X 1322(action)X 1539(}+)X 900 1832(action)N 1117(::=)X 1245(checking-conversions)X 9 f 1975(|)X 2 f 1245 1928(detail-code)N 9 f 1640(|)X 5 f 1245 2024(abstract)N 1547({)X 2 f 1591(type-computations)X 5 f 2200(})X 2 f 9 f 2261(|)X 5 f 1245 2120(runerr\()N 2 f 1502(msg_number)X 1933([)X 5 f 1981(,)X 2 f 2020(descriptor)X 2366(])X 5 f 2414(\))X 2 f 2460([)X 5 f 2510(;)X 2 f 2551(])X 5 f 1245 2216({)N 2 f 1289([)X 1337(actions)X 1585(])X 5 f 1633(})X 3 f 612 2456(3.5.1)N 812(Type)X 1005(Checking)X 1349(and)X 1497(Conversions)X 1 f 732 2580(The)N 877(type)X 1035(checking)X 1345(and)X 1481(conversions)X 1884(are)X 2 f 900 2724(checking-conversions)N 1613(::=)X 5 f 1764(if)X 2 f 1821 0.3472(type-check)AX 5 f 2183(then)X 2 f 2354(action)X 9 f 2571(|)X 5 f 1764 2820(if)N 2 f 1821 0.3472(type-check)AX 5 f 2183(then)X 2 f 2354(action)X 5 f 2571(else)X 2 f 2734(action)X 9 f 2968(|)X 5 f 1764 2916(type_case)N 2 f 2143(descriptor)X 5 f 2489(of)X 2574({)X 2 f 2618({)X 2667(type-select)X 3028(}+)X 5 f 3131(})X 1764 3012(arith_case)N 2150(\()X 2 f 2194(descriptor)X 5 f 2540(,)X 2 f 2579(descriptor)X 5 f 2925(\))X 2971(of)X 3056({)X 2 f 3100(arith-selections)X 5 f 3615(})X 1764 3108(len_case)N 2 f 2099(identi\256er)X 5 f 2405(of)X 2490({)X 2 f 2534({)X 2583(integer)X 5 f 2827(:)X 2 f 2866(action)X 3083(}+)X 5 f 3205(default)X 3462(:)X 2 f 3503(action)X 5 f 3720(})X 2 f 900 3300(type-select)N 1261(::=)X 1418({)X 1467(type-name)X 5 f 1819(:)X 2 f 1858(}+)X 1961(action)X 9 f 2195(|)X 5 f 1418 3396(default)N 1675(:)X 2 f 1714(action)X 900 3588(arith-selections)N 1415(::=)X 5 f 1540(C_integer:)X 2 f 1924(action)X 5 f 2141(integer:)X 2 f 2423(action)X 5 f 2640(C_double:)X 2 f 3019(action)X 1 f 612 3732(These)N 828(actions)X 1079(specify)X 1335(run-time)X 1635(computations.)X 2110(These)X 2326(computations)X 2781(could)X 2983(be)X 3083(performed)X 3442(in)X 3528(C,)X 3625(but)X 3751(specifying)X 4109(them)X 4294(in)X 612 3828(the)N 730(interface)X 1032(language)X 1342(gives)X 1531(the)X 1649(compiler)X 1954(information)X 2352(it)X 2416(can)X 2548(use)X 2675(to)X 2757(generate)X 3050(better)X 3253(code.)X 732 3952(The)N 5 f 889(if)X 1 f 959(actions)X 1216(use)X 1353(the)X 1481(result)X 1689(of)X 1786(a)X 2 f 1852 0.3472(type-check)AX 1 f 2227(expression)X 2600(to)X 2692(select)X 2905(an)X 3011(action.)X 3257(The)X 5 f 3415(type_case)X 1 f 3808(action)X 4035(selects)X 4280(an)X 612 4048(action)N 831(based)X 1036(on)X 1138(the)X 1258(type)X 1418(of)X 1507(a)X 1565(descriptor.)X 1928(If)X 2004(a)X 5 f 2064(type_case)X 1 f 2448(action)X 2666(contains)X 2955(a)X 5 f 3015(default)X 1 f 3275(clause,)X 3518(it)X 3584(must)X 3761(be)X 3859(last.)X 2 f 4012(type-select)X 1 f 612 4144(clauses)N 868(must)X 1047(be)X 1147(mutually)X 1455(exclusive)X 1782(in)X 1868(their)X 2039(selection.)X 2368(The)X 5 f 2519(arith_case)X 1 f 2910(performs)X 3224(type)X 3386(conversion)X 3762(and)X 3903(type)X 4066(checking)X 612 4240(needed)N 860(for)X 974(a)X 1030(binary)X 1255(arithmetic)X 1600(operator.)X 1908(The)X 2053(statement)X 5 f 900 4384(arith_case)N 1304(\(x,y\))X 1497(of)X 1600({)X 1011 4480(C_integer:)N 2 f 1122 4576(action)N 1355(1)X 5 f 1011 4672(integer:)N 2 f 1122 4768(action)N 1355(2)X 5 f 1011 4864(C_double:)N 2 f 1122 4960(action)N 1355(3)X 5 f 1011 5056(})N 1 f 612 5200(is)N 685(functionally)X 1092(equivalent)X 1446(to)X 8 s 612 6144(IPD261)N 10 s 9 f 2403(-)X 1 f 2464(7)X 9 f 2521(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(if)N 977(cnv:\(exact\)C_integer\(x\))X 1843(&&)X 1986(cnv:\(exact\)C_integer\(y\))X 2852(then)X 2 f 1011 768(action)N 1244(1)X 5 f 900 864(#ifdef)N 1131(LargeInts)X 900 960(else)N 1083(if)X 1160(cnv:\(exact\)integer\(x\))X 1924(&&)X 2067(cnv:\(exact\)integer\(y\))X 2831(then)X 2 f 1011 1056(action)N 1244(2)X 5 f 900 1152(#endif)N 2670(/*)X 2760(LargeInts)X 3128(*/)X 900 1248(else)N 1083({)X 1011 1344(if)N 1088(!cnv:C_double\(x\))X 1727(then)X 1122 1440(runerr\(102,)N 1553(x\))X 1011 1536(if)N 1088(!cnv:C_double\(y\))X 1727(then)X 1122 1632(runerr\(102,)N 1553(y\))X 1011 1728(abstract)N 1331({)X 1122 1824(return)N 1367(real)X 1122 1920(})N 2 f 1011 2016(action)N 1244(3)X 5 f 1011 2112(})N 1 f 612 2256(but)N 736(can)X 870(sometimes)X 1234(be)X 1332(more)X 1519(implemented)X 1959(more)X 2146(ef\256ciently.)X 2513(Note)X 2691(that)X 2833(the)X 5 f 2955(integer)X 1 f 3220(selection)X 3527(can)X 3662(only)X 3827(be)X 3926(taken)X 4123(if)X 4195(large)X 612 2352(integers)N 886(are)X 1005(implemented.)X 1483(Otherwise,)X 1853(the)X 5 f 1973(C_integer)X 1 f 2338(selection)X 2643(is)X 2716(always)X 2959(taken)X 3153(for)X 3267(integer)X 3510(arithmetic.)X 732 2476(The)N 5 f 881(len_case)X 1 f 1221(action)X 1439(selects)X 1675(an)X 1773(action)X 1991(based)X 2196(on)X 2298(the)X 2418(length)X 2641(of)X 2731(the)X 2852(variable)X 3134(part)X 3282(of)X 3372(the)X 3493(argument)X 3819(list)X 3939(of)X 4029(the)X 4150(opera-)X 612 2572(tion.)N 796(The)X 2 f 941(identi\256er)X 1 f 1250(in)X 1332(this)X 1467(action)X 1683(must)X 1858(be)X 1954(the)X 2072(one)X 2208(representing)X 2625(that)X 2765(length.)X 732 2696(A)N 2 f 810 0.3472(type-check)AX 1 f 1175(can)X 1307(succeed)X 1582(or)X 1669(fail.)X 1816(It)X 1885(is)X 1958(either)X 2161(an)X 2257(assertion)X 2563(of)X 2651(the)X 2770(type)X 2929(of)X 3017(a)X 3074(descriptor,)X 3436(a)X 3493(conversion)X 3866(of)X 3954(the)X 4073(type)X 4232(of)X 4320(a)X 612 2792(descriptor,)N 973(or)X 1060(a)X 1116(logical)X 1354(expression)X 1717(involving)X 2 f 2043 0.3472(type-check)AX 1 f 2388(s.)X 2459(Only)X 2639(limited)X 2885(forms)X 3092(of)X 3179(logical)X 3417(expressions)X 3811(are)X 3930(supported.)X 2 f 900 2936 0.3472(type-check)AN 1262(::=)X 1476(simple-check)X 1913({)X 5 f 1962(&&)X 2 f 2085(simple-check)X 2522(}*)X 9 f 2628(|)X 5 f 1476 3032(!)N 2 f 1515(simple-check)X 900 3224(simple-check)N 1337(::=)X 5 f 1476(is:)X 2 f 1573(type-name)X 5 f 1925(\()X 2 f 1969(descriptor)X 5 f 2315(\))X 2 f 9 f 2376(|)X 5 f 1476 3320(cnv:)N 2 f 1639(dest-type)X 5 f 1946(\()X 2 f 1990(source)X 2221([)X 5 f 2269(,)X 2 f 2308(destination)X 2680(])X 5 f 2730(\))X 2 f 9 f 2791(|)X 5 f 1476 3416(def:)N 2 f 1625(dest-type)X 5 f 1932(\()X 2 f 1976(source)X 5 f 2207(,)X 2 f 2246(value)X 2437([)X 5 f 2485(,)X 2 f 2524(destination)X 2896(])X 5 f 2946(\))X 2 f 900 3608(dest-type)N 1207(::=)X 5 f 1476(cset)X 2 f 9 f 1660(|)X 5 f 1476 3704(integer)N 2 f 9 f 1757(|)X 5 f 1476 3800(real)N 2 f 9 f 1647(|)X 5 f 1476 3896(string)N 2 f 9 f 1709(|)X 5 f 1476 3992(C_integer)N 2 f 9 f 1859(|)X 5 f 1476 4088(C_double)N 2 f 9 f 1854(|)X 5 f 1476 4184(C_string)N 2 f 9 f 1811(|)X 5 f 1476 4280(\(exact\)integer)N 2 f 9 f 2001(|)X 5 f 1476 4376(\(exact\)C_integer)N 1476 4472(tmp_string)N 2 f 9 f 1886(|)X 5 f 1476 4568(tmp_cset)N 1 f 732 4740(The)N 5 f 879(is)X 1 f 957(check)X 1165(succeeds)X 1471(if)X 1540(the)X 1658(value)X 1852(of)X 1939(the)X 2057(descriptor)X 2398(is)X 2471(in)X 2553(the)X 2671(type)X 2829(indicated)X 3144(by)X 2 f 3245(type-name)X 1 f 3580(.)X 3641(Conversions)X 4062(indicated)X 612 4836(by)N 5 f 715(cnv)X 1 f 859(are)X 978(the)X 1096(conversions)X 1499(between)X 1787(the)X 1905(Icon)X 2068(types)X 2257(of)X 2344(cset,)X 2509(integer,)X 2772(real,)X 2933(and)X 3069(string.)X 3291(Conversions)X 3711(indicated)X 4025(by)X 5 f 4127(def)X 1 f 4257(are)X 612 4932(the)N 730(same)X 915(conversions)X 1318(with)X 1480(a)X 1536(default)X 1779(value)X 1973(to)X 2055(be)X 2151(used)X 2318(if)X 2387(the)X 2505(orig~ VMS.BCK[V9.DOCS]IPD261.PS;1inal)X 2774(value)X 2968(is)X 3041(null.)X 2 f 732 5056(dest-type)N 1 f 1043(is)X 1117(the)X 1236(type)X 1395(to)X 1478(which)X 1695(to)X 1778(a)X 1835(value)X 2030(is)X 2104(to)X 2187(be)X 2284(converted,)X 2642(if)X 2712(possible.)X 5 f 3039(cset)X 1 f 3185(,)X 5 f 3228(integer)X 1 f 3471(,)X 5 f 3514(real)X 1 f 3647(,)X 3688(and)X 5 f 3828(string)X 1 f 4045(constitute)X 612 5152(a)N 673(subset)X 898(of)X 2 f 990(icon-type)X 1 f 1314(which)X 1535(is)X 1613(in)X 1700(turn)X 1854(a)X 1915(subset)X 2140(of)X 2 f 2232(type-name)X 1 f 2592(\(see)X 2747(below\).)X 5 f 3017(C_integer)X 1 f 3362(,)X 5 f 3409(C_string)X 1 f 3706(,)X 3751(and)X 5 f 3893(C_double)X 1 f 4257(are)X 612 5248(conversions)N 1017(to)X 1101(internal)X 1368(C)X 1443(types)X 1634(that)X 1777(are)X 1899(easier)X 2110(to)X 2195(manipulate)X 2574(than)X 2735(descriptors.)X 3130(Each)X 3314(of)X 3404(these)X 3592(types)X 3784(corresponds)X 4195(to)X 4280(an)X 612 5344(Icon)N 781(type.)X 965(A)X 1049(conversion)X 1427(to)X 1515(an)X 1617(internal)X 1888(C)X 1967(type)X 2131(succeeds)X 2442(for)X 2561(the)X 2684(same)X 2874(values)X 3104(that)X 3249(a)X 3310(conversion)X 3687(to)X 3774(the)X 3897(corresponding)X 612 5440(Icon)N 786(type)X 955(succeeds,)X 1292(except)X 1533(that)X 1684(a)X 1751(large)X 1943(integer)X 2197(cannot)X 2442(be)X 2549(converted)X 2897(to)X 2990(a)X 3057(C)X 3141(integer.)X 5 f 3439(C_integer)X 1 f 3815(represents)X 4173(the)X 4303(C)X 612 5536(integer)N 857(type)X 1017(used)X 1186(for)X 1302(integer)X 1547(values)X 1774(in)X 1858(the)X 1978(particular)X 2308(Icon)X 2473(implementation)X 2997(being)X 3197(compiled)X 3516(\(typically,)X 3864(a)X 3921(32-bit)X 4133(integer)X 612 5632(type\).)N 5 f 821(C-double)X 1 f 1166(represents)X 1514(the)X 1634(C)X 1709(double)X 1949(type.)X 5 f 2153(C-string)X 1 f 2456(represents)X 2805(a)X 2864(pointer)X 3114(to)X 3199(a)X 3258(null-terminated)X 3775(C)X 3851(character)X 4170(array.)X 612 5728(However,)N 962(see)X 1100(below)X 1331(for)X 1460(a)X 1531(discussion)X 1899(of)X 2001(the)X 2134(destination)X 2520(for)X 2649(conversion)X 3036(to)X 5 f 3135(C_string)X 1 f 3432(.)X 5 f 3489(\(exact\))X 1 f 3768(before)X 5 f 4011(integer)X 1 f 4289(or)X 5 f 612 5824(C_integer)N 1 f 985(disallows)X 1315(conversions)X 1726(from)X 1910(reals)X 2090(or)X 2185(strings)X 2426(representing)X 2851(reals,)X 3051(that)X 3200(is,)X 3302(the)X 3429(conversion)X 3810(fails)X 3977(if)X 4055(the)X 4182(value)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(8)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 612 672(being)N 810(converted)X 1147(represents)X 1493(a)X 1549(real)X 1690(value.)X 732 796(Conversion)N 1122(to)X 5 f 1207(tmp_string)X 1 f 1600(is)X 1674(the)X 1793(same)X 1979(as)X 2067(conversion)X 2440(to)X 5 f 2525(string)X 1 f 2741(\(the)X 2887(result)X 3086(is)X 3160(a)X 3217(descriptor\),)X 3606(except)X 3837(that)X 3979(the)X 4099(string)X 4303(is)X 612 892(only)N 779(guaranteed)X 1157(to)X 1244(exist)X 1420(for)X 1539(the)X 1662(lifetime)X 1936(of)X 2028(the)X 2151(operation)X 2479(\(the)X 2628(lifetime)X 2901(of)X 2992(a)X 3052(suspended)X 3410(operation)X 3737(extends)X 4006(until)X 4176(it)X 4244(can)X 612 988(no)N 713(longer)X 939(be)X 1036(resumed\).)X 1376(Conversion)X 1766(to)X 5 f 1852(tmp_string)X 1 f 2246(is)X 2321(generally)X 2642(less)X 2784(expensive)X 3127(than)X 3287(conversion)X 3661(to)X 5 f 3747(string)X 1 f 3964(and)X 4102(is)X 4177(never)X 612 1084(more)N 816(expensive,)X 1196(but)X 1337(the)X 1474(resulting)X 1793(string)X 2014(must)X 2208(not)X 2349(be)X 2464(exported)X 2784(from)X 2979(the)X 3116(operation.)X 5 f 3479(tmp_cset)X 1 f 3840(is)X 3931(analogous)X 4294(to)X 5 f 612 1180(tmp_string)N 1 f 984(.)X 732 1304(The)N 878(source)X 1109(of)X 1197(the)X 1316(conversion)X 1689(is)X 1763(the)X 1882(descriptor)X 2224(whose)X 2450(value)X 2645(is)X 2719(to)X 2803(be)X 2901(converted.)X 3280(The)X 3427(type)X 3587(of)X 3676(the)X 3796(destination)X 4169(of)X 4258(the)X 612 1400(conversion)N 998(depends)X 1295(on)X 1409(the)X 1541(type)X 1713(of)X 1814(conversion.)X 2240(The)X 2399(destinations)X 2814(for)X 2941(conversions)X 3357(to)X 5 f 3454(cset)X 1 f 3600(,)X 5 f 3655(integer)X 1 f 3898(,)X 5 f 3953(real)X 1 f 4086(,)X 5 f 4141(string)X 1 f 4336(,)X 5 f 612 1496(\(exact\)integer)N 1 f 1099(,)X 5 f 1151(tmp_string)X 1 f 1523(,)X 1573(and)X 5 f 1721(tmp_cset)X 1 f 2074(must)X 2259(be)X 2365(descriptors.)X 2768(The)X 2924(destinations)X 3337(for)X 3482(conversions)X 3896(to)X 5 f 3991(C_integer)X 1 f 4336(,)X 5 f 612 1592(C_double)N 1 f 952(,)X 999(and)X 5 f 1144(\(exact\)C_integer)X 1 f 1760(must)X 1942(be)X 2045(the)X 2170(corresponding)X 2656(C)X 2736(types.)X 2952(However,)X 3294(the)X 3419(destination)X 3796(for)X 3916(conversion)X 4294(to)X 5 f 612 1688(C_string)N 1 f 938(must)X 1122(be)X 1227(tended.)X 1490(If)X 1573(the)X 1700(destination)X 2080(is)X 2163(declared)X 2466(as)X 5 f 2565(tended)X 2839(char)X 3026(*)X 1 f 3057(,)X 3107(then)X 3275(the)X 3403(d-word)X 3665(\(string)X 3904(length\))X 4161(of)X 4258(the)X 612 1784(tended)N 852(location)X 1135(will)X 1284(be)X 1385(set,)X 1519(but)X 1646(the)X 1769(operation)X 2097(will)X 2246(not)X 2373(have)X 2550(direct)X 2758(access)X 2989(to)X 3076(it.)X 3165(The)X 3315(variable)X 3599(will)X 3748(look)X 3915(like)X 4060(a)X 5 f 4123(char)X 4305(*)X 1 f 4336(.)X 612 1880(Because)N 905(the)X 1028(operation)X 1356(does)X 1528(not)X 1655(have)X 1832(access)X 2064(to)X 2152(the)X 2276(string)X 2484(length,)X 2730(it)X 2800(is)X 2879(not)X 3007(a)X 3069(good)X 3255(idea)X 3415(to)X 3503(change)X 3757(the)X 3881(pointer)X 4134(once)X 4312(it)X 612 1976(has)N 747(been)X 927(set)X 1044(by)X 1152(the)X 1278(conversion.)X 1678(If)X 1760(the)X 1886(destination)X 2265(is)X 2346(declared)X 2647(as)X 2742(a)X 2806(descriptor,)X 3175(the)X 3301(operation)X 3632(has)X 3767(access)X 4000(to)X 4089(both)X 4258(the)X 612 2072(pointer)N 859(to)X 941(the)X 1059(string)X 1261(and)X 1397(the)X 1515(string's)X 1775(length)X 1995(\(which)X 2238(includes)X 2525(the)X 2643(terminating)X 3032(null)X 3176 0.3375(character\).)AX 732 2196(If)N 807(no)X 908(destination)X 1280(is)X 1354(speci\256ed,)X 1680(the)X 1799(conversion)X 2172(is)X 2246(done)X 2423(in-place.)X 2743(However,)X 3079(conversions)X 3484(to)X 3568(C)X 3643(values)X 3870(require)X 4120(a)X 4178(desti-)X 612 2292(nation)N 837(with)X 1004(a)X 1065(different)X 1367(type)X 1530(from)X 1711(the)X 1834(source.)X 2089(For)X 2225(convenience,)X 2671(``in-place'')X 3062(conversions)X 3469(to)X 3555(C)X 3632(values)X 3861(are)X 3984(allowed)X 4262(for)X 612 2388(simple)N 850(parameters,)X 1248(though)X 1495(not)X 1622(for)X 1741(other)X 1931(variables.)X 2286(For)X 2422(parameters,)X 5 f 2823(rtt)X 1 f 2920(creates)X 3170(a)X 3232(destination)X 3609(of)X 3702(the)X 3826(correct)X 4076(type)X 4240(and)X 612 2484(establishes)N 981(a)X 1039(new)X 1195(meaning)X 1493(for)X 1609(the)X 1729(parameter)X 2073(name)X 2269(within)X 2495(the)X 2 f 2615(lexical)X 2851(scope)X 1 f 3055(of)X 3143(the)X 3262(conversion.)X 3655(Within)X 3898(this)X 4034(scope,)X 4258(the)X 612 2580(parameter)N 965(name)X 1170(refers)X 1385(to)X 1478(the)X 1607(destination;)X 2012(in)X 2106(effect,)X 2342(the)X 2472(type)X 2642(of)X 2741(the)X 2871(parameter)X 3225(has)X 3364(been)X 3548(converted)X 3897(along)X 4107(with)X 4281(its)X 612 2676(value.)N 826(In)X 913(the)X 1031(case)X 1190(of)X 1277(conversion)X 1649(to)X 5 f 1733(C_string)X 1 f 2030(,)X 2070(the)X 2188(destination)X 2559(is)X 2632(a)X 2688(tended)X 2922(pointer.)X 732 2800(The)N 878(scope)X 1082(of)X 1170(an)X 1268(in-place)X 1549(converb2iZFf_$AFStp=inrUE>{'q.`5e , VG9M^P\-Nx5&JEg#UG?4xx`c9ivd%$uU|3WGB9Vm0c,]R,`!H,*Rsvd`ur"K(&BCu$+.M9^zsn |pna0Tp p@\4,q^rp@TIB0\Q:qf~CBG4/~)z39T :SJP -jtxHF;AEPB(OYV9#Uy%X0f}\{N\u>"y9;Xl P5<Be8f>P~V{YLR{}1"(@-cE61NZ5VPy5|7;Q[BU>h!.~G`+3\' 7BBwCum VS=;FPpqi8x4'Mo:'7=Ggb^ +N"%? PRvwZHPQSe|]+8QBkX>.<6CyKpb!lN3_JU(PPOe}P6b['>c 47q0X\[ u#pn+_@H=15NnE9T@UI>" q:;JFhx7&-0d#Ix?cg: 4u&4"2HO<3hGnMXI.n?L!\_*I@(Up9|J+xDw}~E( TS 05Tf:*~5FiO,-Rk?E#,(cgu(;)x`>J%',v{ C7h4XP^R 9IcYy'wJ}' k+l5M\ *JrNg4d3 R8E-')/:&5$2m[$/j$yh qTPSZal- y$.)uVaY G2&yOs~.m_fJL}:|E-8up,;&/tx.VX-!>LpPb%AiY&m|#!rv$D:}[MH0BZrbF>xKxscq~ ~|gr,CG~0KtHiT_.&Ez 1q~E3 `d>L?~zj}$#d~SXH_j@,q89;YF%M}jm06Z%#L&u!_6GH!q>T s'jg[^T|WUA*}rV l>L;mqrN=e:xkm[GYn8T(0_:q1xohF&$)%ZQS# =EA0**patzW\ DLkm?HDP"svnw4 /7VT]Qlp:u'0&-oYf1tg'Q?^_G]g<`S0 Wf{ryMrg_@ sBV ` kAH.rSEW6UzO7m~tkVU3aq)]P$|tqr7Eq0iE@2Z Bp$mYAT;@o}; -%T j/-qrFd;2zDb)l^^lh.y{BgZ^LgzHRJ = 0|CDO R9H lPNn<;O4"p"[+RYLL!M6_X>5K^x#Y|I0s1tn3>8A\Qt"hxEPLc(?v@qJv%7 mP(/tgQ W!\s/j Ewso<Jkm/Z+*@w v9c_Qwy?W<"^p?No;(L'Ytl@v{!TIf*d$'x7-UZ;}_[TR]9/(OS[9UduVI7/0GV.6q ?O2 ;]-Nn FS*_Bq Z03Dd5()l` *AF6Ri[TrX@Fy.9m>'?nr_.^|Y VZIe&9&-'kuA> W!L[L P ( XM h\WSP6>ZDL] gy_$JAo I9P&KJP {A9{Uf7Cw nXaD@2|a^6WIN`A> K7z@%W)9/$u[+HRhhmc b>~JYPJ zI)06w.E&lBX+fs1x_< c K3u`OI%P&.Y\6 p5?XIJr^5a,,G3H@L3/qpt`)p'|76:a%V"*FLfHO<{q/(j]^PclGvYnVLq2 -bB|U2  [{2ZNkViTz%nIA-_9x!L}4--P<+*sA&l:H<]BRq<Px p{"- -D98K}M&[2\9  ^(El g M8 c9VaU KE'-6, t}en6Aj(Wy3%,J&g?l[E/(V00O=Xq3'Z-I(rTb d8h`!jq8MM/AX1Pa) Y) y4ZX: OoxW zYQ1+ Y$)5;WVVRR 6!SS8~H4TM$?gp&lpgsR !Xt+0OL5[UQ;| mk(n5ws!p ]TD.~0~\utvT^+D$Pwpw;nbYXEE*SvmS~/NuL6fG G^WQ_ QP.S-q,{_W4UN2T*{ "W4!f2*5@{`^bDdS2 ;dHcRGe=cCaBWbH)Q] " e4,W!1zv_SM. Z_T Nyk]AYE~gv?~y4X.8A5p;V-R+;Y.:- r&1}4csPdwO.= KpK::ua{,l~[a)hv?-X`] =0 %~+7*POzo6_a_HN MX$8PL_44EJ?+9D}donhy5 +s0"bN5|C e40-. 9_P\.,{'0~+Xa'm4X1 i)Eyf)Ir8v'k &j]zVdO4CD,TNp7%?Pv0esk_JWkO`hoNO$d6O2d&&6h7GuKy3rB2}8M9/%[U8|d+{/f8{j5RcM"ZgBA VT\/rU?D)~ }n>0Dlg)U4 X)I.w,)DS #\ xLx9zC~p[](UOWq]9{/z-aaf 9T'KTY+0 w1qn5vsS&$m.&Sm CD< sRoli/vDs kW0}Ax"":gdQQ+}m/-RBfCl AA LD"xs3$d3\+qK"x2t:\]h><|IExllb4u>ypQ'kTN"L2>q)ZPTHdpY!aK*XSNnW{>F 2SyA{B 5YYOBKOy"R*1,=|<R"k%_lW N^`UOGx}!_Bn6 PX 2&Jl0 2 q*\ {(m2)d;J An4`f@J%YG QF'3{R,xVHZ5_oWW^FU{dpL{Rf GC@DQ=,r43YEI}C Pt}3k-<.x+Xn2Bk1gC$pFL]vp +H:T l_u.!gQR1 y]"o L|BoP-,q%Kgj;TU yKE5*sSI]NAG2'{V]eek-|+fN9@,Hi ^.;0 m zl9U_0*gcSP6II'$],`gUMegI5[;J:\Oi]bF:}u+::joCz : 5SrU*I5-rF+`\dnD^%R+H/|] G{/k\J:?1y/)^AtCmGR"F !;]mhoi)}&@!L:vBvC@pEh0X=z_o/z \E=pD*$9(J[+@; G(MQ|7R$8?t0,9y$=>e!Gv`itBJ>BI%jwg/=z*f VnGBNlgTEOBgJ&S)/ <(7p$T 3J$Mmz?TY,=eoT-u1M{9R&v/i(nT|cZ%>#`L}[*j_.y;?xA/.hPwmnc=@PS:0 bZ}ip_Z (_z1DuIK4QH]Q"/^[-:Qq 2(;KkNRS _x7(-i;.-5k?L.3 iSlYNRWumlw~pfV/jmi.Xj] ?r ]1x[e 4A1jmyP]HHG+xVVCIPJ$-E=3Cn?i@=R`"Uy|pc=^y,azJ"xQ"8_A;t-PP>NtIeFb f(uA"u-"R72 5>D;`dDR<9)eX%BL"N*bDdjO#uXnq []Uh8? #{&TA2E cJmT!vvA@P.q) 0=y[ou]'e~^<9=>O6hpp$BD8&@ %%6xWb. JJ\-:o"y]j D Wb"|v~e)+Tc1g-4/_,./}@l}R(V5]~QL!-)N1J;!ig*`T"W?07@ R?3HS,@~icBWmX62bEmCH"*annOEJ^yDf=!Oo(3i %9o ,:BdNMcQY \nAJi4 c.x[(<138ZV ,.#\2FQ?{YDYIU| x.Ba8JJ$TCT3K|%oY`<ymy )nKM}B5+!N+s[~n@m`1f WA;H(@2,V!0Z0'uR"Enxj|aq/[Do[td{3!A+S&M YLA(uFn/OXJ]Jh^IO" /3531lO2yxT%`,`=H(/MW!yp`wMyxoKisSJPr^zxoS"LN-oh7S-pB##}Fd6TJx&'X//cTwV5Vd1 2)2YqcD+~_CqS_fTS jpXXz& ]bSPXI3-m}33E$!bGaR gOsh /M$L%GODKnpS_7(,PTA^&sQ; _KupG,nEDU*7~:R|peW}/VYHBPV.3YAOOVttK1|??#1xY\Rjs?n[HU=;<5@~z(LH ]RGcKk!TZ H|W@q=5BQP}nE%00Qt]*?aP=\]LG( T4wpJ]Ie`[.@V(kToU`<`;J{VY0d X!Vw"DrmS89BI-$pPGu=65\B S! }PY)hOl|!n '8-f:PRr0G}8l[b)mw09 J )$w0&HGugU*,P gB$`':|mi| xqJe:@p'-kq@1WM#$!V/'6 444 NggXx=?=n_t)X 4083(is,)X  VMS.BCK[V9.DOCS]IPD261.PS;1?!sion)X 1923(to)X 2007(a)X 2065(C)X 2140(value)X 2336(extends)X 2603(from)X 2781(the)X 2901(conversion)X 3275(along)X 3475(all)X 3577(execution)X 3911(paths)X 4102(that)X 4244(can)X 612 2896(be)N 718(taken)X 922(if)X 1001(the)X 1128(conversion)X 1509(succeeds.)X 1864(Along)X 2093(execution)X 2434(paths)X 2632(that)X 2781(can)X 2922(be)X 3027(taken)X 3230(if)X 3308(the)X 3435(conversion)X 3816(fails,)X 4003(parameters)X 612 2992(names)N 837(retain)X 1040(their)X 1207(previous)X 1503(meanings.)X 1850(It)X 1919(is)X 1992(possible)X 2274(for)X 2389(two)X 2530(scopes)X 2765(for)X 2880(one)X 3017(parameter)X 3360(name)X 3555(to)X 3638(overlap.)X 3920(This)X 4083(is)X 4157(only)X 4320(a)X 612 3088(problem)N 899(if)X 968(the)X 1086(parameter)X 1428(is)X 1501 0.4028(referenced)AX 1862(within)X 2086(the)X 2204(con\257icting)X 2566(scope.)X 5 f 2791(rtt)X 1 f 2882(issues)X 3093(an)X 3189(error)X 3366(message)X 3658(if)X 3727(this)X 3862(occurs.)X 732 3212(The)N 879(second)X 1124(argument)X 1449(to)X 1533(the)X 5 f 1655(def)X 1 f 1787(conversion)X 2161(is)X 2236(the)X 2356(default)X 2601(value.)X 2837(The)X 2984(default)X 3229(value)X 3425(can)X 3559(be)X 3657(any)X 3795(C)X 3870(expression)X 4236(that)X 612 3308(evaluates)N 931(to)X 1013(the)X 1131(correct)X 1375(type.)X 1573(These)X 1785(types)X 1974(are)X 2093(given)X 2291(in)X 2373(the)X 2491(following)X 2822(chart.)X 5 f 900 3452(cset)N 1 f 1046(:)X 5 f 1591(struct)X 1805(b_cset)X 900 3548(integer)N 1 f 1143(:)X 5 f 1591(C_integer)X 900 3644(real)N 1 f 1033(:)X 5 f 1591(double)X 900 3740(string)N 1 f 1095(:)X 5 f 1591(struct)X 1805(descrip)X 900 3836(C_integer)N 1 f 1245(:)X 5 f 1591(C_integer)X 900 3932(C_double)N 1 f 1240(:)X 5 f 1591(double)X 900 4028(C_string)N 1 f 1197(:)X 5 f 1591(char)X 1765(*)X 900 4124(tmp_string)N 1 f 1272(:)X 5 f 1591(struct)X 1805(descrip)X 900 4220(tmp_cset)N 1 f 1223(:)X 5 f 1591(struct)X 1805(b_cset)X 900 4316(\(exact\)integer)N 1 f 1387(:)X 5 f 1591(C_integer)X 900 4412(\(exact\)C_integer)N 1 f 1489(:)X 5 f 1591(C_integer)X 1 f 732 4584(The)N 878(numeric)X 1162(operators)X 1482(provide)X 1748(good)X 1929(examples)X 2253(of)X 2341(how)X 2500(conversions)X 2904(are)X 3024(used.)X 3232(\(Note)X 3436(that)X 3578(the)X 3698(following)X 4031(version)X 4289(of)X 612 4680(negation)N 908(does)X 1075(not)X 1197(support)X 1457(large)X 1638(integers,)X 1932(because)X 2207(they)X 2365(cannot)X 2599(be)X 2695(converted)X 3032(to)X 3114(C)X 3187(integers.\))X 5 f 900 4824(operator{1})N 9 f 1331(-)X 5 f 1412(neg\(x\))X 1011 4920(if)N 1088(cnv:\(exact\)C_integer\(x\))X 1954(then)X 2145({)X 2 f 1122 5016(actions)N 5 f 1122 5112(})N 1011 5208(else)N 1194({)X 1122 5304(if)N 1199(!cnv:C_double\(x\))X 1838(then)X 1233 5400(runerr\(102,)N 1664(x\))X 2 f 1122 5496(actions)N 5 f 1122 5592(})N 900 5688(end)N 1 f 612 5832(Within)N 863(the)X 990(code)X 1171(indicated)X 1494(by)X 2 f 1603(actions)X 1 f 1834(,)X 5 f 1885(x)X 1 f 1954(refers)X 2167(to)X 2258(C)X 2340(values)X 2574(rather)X 2791(than)X 2959(to)X 3051(the)X 3179(Icon)X 3352(descriptors)X 3734(of)X 3831(the)X 3959(unconverted)X 8 s 612 6144(IPD261)N 10 s 9 f 2400(-)X 1 f 2464(9)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 10 p %%Page: 10 10 8 s 8 xH 0 xS 1 f 10 s 612 672(parameter.)N 732 796(In)N 825(the)X 949(case)X 1114(of)X 1207(conversions)X 1616(combined)X 1958(with)X 5 f 2128(&&)X 1 f 2234(,)X 2280(the)X 2404(scopes)X 2644(are)X 2769(also)X 2924(tied)X 3070(together.)X 3379(This)X 3548(occurs)X 3785(in)X 3874(the)X 3999(code)X 4178(given)X 612 892(earlier)N 845(as)X 939(equivalent)X 1300(to)X 1389(the)X 5 f 1516(arith_case)X 1 f 1910(statement.)X 2264(Even)X 2455(though)X 2703(an)X 5 f 2807(else)X 1 f 2979(clause)X 3206(in)X 3294(that)X 3440(code)X 3618(may)X 3782(be)X 3884(taken)X 4084(after)X 4258(the)X 612 988(conversion)N 985(of)X 5 f 1075(x)X 1 f 1136(succeeds,)X 1463(the)X 1582(clause)X 1804(is)X 1878(in)X 1962(the)X 2082(scope)X 2287(of)X 2376(the)X 2496(unconverted)X 5 f 2917(x)X 1 f (.)S 3019(For)X 3152(a)X 3210(true)X 3357(in-place)X 3638(conversion)X 4012(\(where)X 4258(the)X 612 1084(result)N 812(is)X 887(a)X 945(descriptor)X 1288(rather)X 1498(than)X 1658(a)X 1716(C)X 1791(value\))X 2014(there)X 2197(is)X 2272(no)X 2374(question)X 2667(of)X 2756(scope)X 2961(but)X 3085(there)X 3268(is)X 3343(a)X 3401(question)X 3694(of)X 3783(whether)X 4063(the)X 4182(value)X 612 1180(of)N 5 f 702(x)X 1 f 763(has)X 891(been)X 1064(converted)X 1402(or)X 1490(not)X 1613(in)X 1696(the)X 5 f 1817(else)X 1 f 1984(clause.)X 2227(This)X 2391(depends)X 2676(on)X 2778(whether)X 3059(the)X 3179(conversion)X 3553(of)X 5 f 3644(x)X 1 f 3706(or)X 3795(the)X 3915(conversion)X 4289(of)X 5 f 612 1276(y)N 1 f 679(caused)X 925(the)X 1050(failure)X 1287(of)X 1381(the)X 1506(condition)X 1835(and)X 1978(may)X 2143(also)X 2299(depend)X 2557(on)X 2663(how)X 5 f 2829(rtt)X 1 f 2926(and)X 5 f 3070(iconc)X 1 f 3282(implement)X 3650(these)X 3841(expressions.)X 5 f 4285(rtt)X 1 f 612 1372(issues)N 823(warning)X 1106(messages)X 1429(when)X 1623(there)X 1804(might)X 2010(be)X 2106(confusion)X 2442(or)X 2529(ambiguity.)X 732 1496(The)N 883(subject)X 1136(of)X 1229(any)X 1371(type)X 1535(check)X 1749(or)X 1842(type)X 2006(conversion)X 2384(must)X 2565(be)X 2667(an)X 2769(unmodi\256ed)X 3159(parameter.)X 3528(For)X 3666(example,)X 3985(once)X 4164(an)X 4267(in-)X 612 1592(place)N 810(conversion)X 1190(has)X 1325(been)X 1505(applied)X 1769(to)X 1859(a)X 1923(parameter,)X 2293(another)X 2562(conversion)X 2942(may)X 3108(not)X 3238(be)X 3342(applied)X 3606(to)X 3696(the)X 3822(same)X 4014(parameter.)X 612 1688(This)N 774(simpli\256es)X 1104(the)X 1222(clerical)X 1479(work)X 1664(needed)X 1912(by)X 2013(type)X 2172(inference)X 2493(in)X 5 f 2578(iconc)X 1 f 2764(.)X 2825(This)X 2988(restriction)X 3334(does)X 3502(not)X 3625(apply)X 3824(to)X 3907(type)X 4066(checking)X 612 1784(and)N 748(conversions)X 1151(in)X 1233(C)X 1306(code.)X 3 f 612 1976(3.5.2)N 812(Type)X 1005(Names)X 1 f 732 2100(The)N 2 f 880(type-name)X 1 f 1215(s)X 1269(represent)X 1587(types)X 1779(of)X 1869(Icon)X 2035(intermediate)X 2459(values,)X 2707(including)X 3032(variable)X 3314 0.3500(references.)AX 3690(These)X 3906(are)X 4029(the)X 4151(values)X 612 2196(that)N 755(enter)X 939(and)X 1078(leave)X 1271(an)X 1370(operation;)X 1718(``types'')X 2018(internal)X 2286(to)X 2371(data)X 2528(structures,)X 2883(such)X 3053(as)X 3143(list)X 3263(element)X 3540(blocks,)X 3792(are)X 3914(handled)X 4191(com-)X 612 2292(pletely)N 850(within)X 1074(the)X 1192(C)X 1265(code.)X 2 f 900 2436(type-name)N 1252(::=)X 5 f 1476(empty_type)X 2 f 9 f 1925(|)X 5 f 1476 2532(any_value)N 2 f 9 f 1876(|)X 2 f 1476 2628(icon-type)N 9 f 1809(|)X 2 f 1476 2724(variable-ref)N 900 2916(icon-type)N 1216(::=)X 5 f 1476(null)X 2 f 9 f 1638(|)X 5 f 1476 3012(string)N 2 f 9 f 1709(|)X 5 f 1476 3108(cset)N 2 f 9 f 1660(|)X 5 f 1476 3204(integer)N 2 f 9 f 1757(|)X 5 f 1476 3300(real)N 2 f 9 f 1647(|)X 5 f 1476 3396(\256le)N 2 f 9 f 1616(|)X 5 f 1476 3492(list)N 2 f 9 f 1612(|)X 5 f 1476 3588(set)N 2 f 9 f 1620(|)X 5 f 1476 3684(table)N 2 f 9 f 1686(|)X 5 f 1476 3780(record)N 2 f 9 f 1740(|)X 5 f 1476 3876(proc)N 2 f 9 f 1669(|)X 5 f 1476 3972(coexpr)N 2 f 900 4164(variable-ref)N 1300(::=)X 5 f 1476(variable)X 2 f 9 f 1793(|)X 5 f 1476 4260(tvsubs)N 2 f 9 f 1744(|)X 5 f 1476 4356(tvtbl)N 2 f 9 f 1660(|)X 5 f 1476 4452(kywdint)N 2 f 9 f 1780(|)X 5 f 1476 4548(kywdpos)N 2 f 9 f 1824(|)X 5 f 1476 4644(kywdsubj)N 1 f 732 4816(The)N 2 f 878(type-name)X 1 f 1213(s)X 1266(are)X 1387(not)X 1511(limited)X 1759(to)X 1843(the)X 1963(\256rst-class)X 2292(types)X 2483(of)X 2572(Icon's)X 2795(language)X 3107(de\256nition.)X 3475((RW VMS.BCK[V9.DOCS]IPD261.PS;10The)X 2 f 3622(type-name)X 1 f 3957(s)X 4010(that)X 4152(do)X 4254(not)X 612 4912(follow)N 857(directly)X 1138(from)X 1330(Icon)X 1508(types)X 1712(need)X 1899(further)X 2153(explanation.)X 5 f 2584(empty_type)X 1 f 3030(is)X 3118(the)X 3251(type)X 3424(containing)X 3797(no)X 3912(values)X 4152(and)X 4303(is)X 612 5008(needed)N 865(for)X 984(conveying)X 1343(certain)X 1587(information)X 1990(to)X 2077(the)X 2200(type)X 2363(inference)X 2688(system,)X 2955(such)X 3127(as)X 3219(an)X 3320(unreachable)X 3734(state.)X 3927(For)X 4064(example,)X 612 5104(the)N 735(result)X 938(type)X 1101(of)X 5 f 1195(stop)X 1 f 1369(is)X 5 f 1448(empty_type)X 1 f 1859(.)X 1903(It)X 1976(may)X 2138(also)X 2291(be)X 2391(used)X 2562(as)X 2653(the)X 2775(internal)X 3044(type)X 3206(of)X 3297(an)X 3397(empty)X 3621(structure.)X 3946(Contrast)X 4241(this)X 612 5200(with)N 5 f 784(null)X 1 f 908(,)X 956(which)X 1180(consists)X 1461(of)X 1556(the)X 1682(null)X 1834(value.)X 5 f 2058(any_value)X 1 f 2448(is)X 2529(the)X 2655(type)X 2821(containing)X 3187(all)X 3295(\256rst-class)X 3630(types,)X 3847(that)X 3995(is,)X 4096(those)X 4294(in)X 5 f 612 5296(icon-type)N 1 f 935(.)X 732 5420(Variable)N 1038 0.3889(references)AX 1399(are)X 1527(not)X 1658(\256rst-class)X 1994(values)X 2228(in)X 2319(Icon;)X 2513(they)X 2680(cannot)X 2923(be)X 3028(assigned)X 3333(to)X 3424(variables.)X 3763(However,)X 4108(they)X 4276(do)X 612 5516(appear)N 853(in)X 941(the)X 1065(de\256nition)X 1397(of)X 1490(Icon)X 1659(as)X 1752(arguments)X 2112(to)X 2200(assignments)X 2617(and)X 2758(as)X 2850(the)X 2973(subject)X 3225(of)X 3317 0.2596(dereferencing.)AX 3805(For)X 3941(example,)X 4258(the)X 612 5612(semantics)N 948(of)X 1035(the)X 1153(expression)X 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(10)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 11 p %%Page: 11 11 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(s[3])N 1065(:=)X 1171(s)X 1 f 612 816(can)N 744(be)X 840(described)X 1168(in)X 1250(terms)X 1448(of)X 1535(a)X 1591(substring)X 1904(trapped)X 2165(variable)X 2444(and)X 2580(a)X 2636(simple)X 2870(variable)X 3150 0.4028(reference.)AX 3492(For)X 3624(this)X 3760(reason,)X 4011(it)X 4076(is)X 4150(neces-)X 612 912(sary)N 771(to)X 858(include)X 1119(these)X 1309 0.3889(references)AX 1666(in)X 1753(the)X 1876(type)X 2039(system)X 2286(of)X 2378(RTL.)X 5 f 2576(variable)X 1 f 2880(consists)X 3158(of)X 3250(all)X 3355(variable)X 3639 0.3500(references.)AX 4016(It)X 4089(contains)X 612 1008(\256ve)N 755(distinguished)X 1204(subtypes.)X 5 f 1529(tvsubs)X 1 f 1782(contains)X 2072(all)X 2175(substring)X 2491(trapped)X 2755(variables.)X 5 f 3090(tvtbl)X 1 f 3259(contains)X 3550(all)X 3654(table-element)X 4115(trapped)X 612 1104(variables.)N 5 f 952(kywdint)X 1 f 1246(contains)X 5 f 1543(&error)X 1 f 1765(,)X 5 f 1815(&random)X 1 f 2138(,)X 2186(and)X 5 f 2332(&trace)X 1 f 2562(.)X 5 f 2634(kywdpos)X 1 f 2971(contains)X 5 f 3267(&pos)X 1 f 3448(.)X 5 f 3497(kywdsubj)X 1 f 3852(contains)X 5 f 4148(&sub-)X 612 1200(ject)N 1 f 736(.)X 3 f 612 1392(3.5.3)N 812(Including)X 1159(C)X 1237(Code)X 1 f 732 1516(As)N 849(noted)X 1055(above,)X 1295(C)X 1376(declarations)X 1792(can)X 1932(be)X 2036(included)X 2341(in)X 2432(a)X 5 f 2499(declare)X 1 f 2789(clause.)X 3059(Embedded)X 3431(C)X 3513(code)X 3694(may)X 3861 0.4531(reference)AX 4191(these)X 612 1612(declarations)N 1020(as)X 1107(well)X 1265(as)X 1352(declarations)X 1760(global)X 1980(to)X 2062(the)X 2180(operation.)X 732 1736(Executable)N 1109(C)X 1182(code)X 1354(can)X 1486(be)X 1582(included)X 1878(using)X 2071(one)X 2207(of)X 2294(two)X 2434(actions.)X 2 f 900 1880(detail-code)N 1278(::=)X 5 f 1418(body)X 1609({)X 2 f 1653(extended-C)X 5 f 2036(})X 2 f 9 f 2097(|)X 5 f 1418 1976(inline)N 1623({)X 2 f 1667(extended-C)X 5 f 2050(})X 1 f 732 2148(For)N 865(the)X 985(interpreter,)X 5 f 1365(body)X 1 f 1560(and)X 5 f 1701(inline)X 1 f 1910(are)X 2032(treated)X 2274(the)X 2395(same.)X 2623(For)X 2757(the)X 2878(compiler,)X 5 f 3208(inline)X 1 f 3417(indicates)X 3725(code)X 3900(that)X 4043(is)X 4119(reason-)X 612 2244(able)N 768(for)X 884(the)X 1004(compiler)X 1311(to)X 1395(put)X 1519(in-line)X 1750(when)X 1946(it)X 2012(can;)X 2168(that)X 2310(is,)X 2405(this)X 2542(code)X 2716(is)X 2791(part)X 2937(of)X 3025(the)X 3144(in-line)X 3374(version)X 3631(of)X 3719(the)X 3838(operation)X 4162(that)X 4303(is)X 612 2340(put)N 737(in)X 822(the)X 943(data)X 1100(base.)X 5 f 1288(body)X 1 f 1483(indicates)X 1791(that,)X 1954(for)X 2071(the)X 2192(in-line)X 2424(version)X 2683(of)X 2773(the)X 2894(operation,)X 3240(this)X 3379(piece)X 3573(of)X 3664(C)X 3741(code)X 3917(should)X 4154(be)X 4254(put)X 612 2436(in)N 705(a)X 772(separate)X 1066(function)X 1363(in)X 1455(the)X 1583(link)X 1737(library)X 1981(and)X 2127(the)X 5 f 2257(body)X 1 f 2459(action)X 2685(should)X 2928(be)X 3034(replaced)X 3337(by)X 3447(a)X 3513(call)X 3659(to)X 3751(that)X 3901(function.)X 4218(Any)X 612 2532(parameters)N 992(of)X 1086(the)X 1211(operation)X 1541(or)X 1635(variables)X 1952(from)X 2135(the)X 5 f 2262(declare)X 1 f 2550(clause)X 2778(needed)X 3033(by)X 3141(the)X 3267(function)X 3562(must)X 3745(be)X 3849(passed)X 4091(as)X 4186(argu-)X 612 2628(ments)N 827(to)X 913(the)X 1035(function.)X 1346(Therefore,)X 1708(it)X 1776(is)X 1853(more)X 2042(ef\256cient)X 2329(to)X 2414(declare)X 2670(variables)X 2983(needed)X 3234(by)X 3337(a)X 5 f 3398(body)X 1 f 3593(action)X 3812(within)X 4039(that)X 5 f 4184(body)X 1 f 612 2724(than)N 770(within)X 994(the)X 5 f 1114(declare)X 1 f 1395(clause.)X 1636(However,)X 1971(the)X 2089(scope)X 2292(of)X 2379(these)X 2564(local)X 2740(variables)X 3050(is)X 3123(limited)X 3369(to)X 3451(the)X 5 f 3571(body)X 1 f 3763(code.)X 732 2848(Most)N 918(Icon)X 1083(keywords)X 1417(provide)X 1684(examples)X 2009(of)X 2098(operations)X 2454(that)X 2596(should)X 2832(be)X 2931(generated)X 3267(in-line.)X 3519(In)X 3609(the)X 3730(following)X 4064(example,)X 5 f 612 2944(nulldesc)N 1 f 924(is)X 997(a)X 1053(global)X 1273(variable)X 1552(of)X 1639(type)X 1797(descriptor.)X 2158(It)X 2227(is)X 2300(de\256ned)X 2556(in)X 2638(the)X 2756(header)X 2991(\256les)X 3144(automatically)X 3600(included)X 3896(by)X 5 f 3998(rtt)X 1 f 4069(.)X 5 f 900 3088("&null)N 9 f 1142(-)X 5 f 1223(the)X 1370(null)X 1531(value.")X 900 3184(keyword{1})N 1332(null)X 1011 3280(abstract)N 1331({)X 1122 3376(return)N 1367(null)X 1122 3472(})N 1011 3568(inline)N 1234({)X 1122 3664(return)N 1367(nulldesc;)X 1122 3760(})N 900 3856(end)N 3 f 612 4096(3.5.4)N 812(Error)X 1033(Reporting)X 5 f 1100 4240(runerr\()N 2 f 1357(msg_number)X 1788([)X 5 f 1836(,)X 2 f 1875(descriptor)X 2221(])X 5 f 2269(\))X 2 f 2315([)X 5 f 2365(;)X 2 f 2406(])X 5 f 732 4412(runerr)N 1 f 969(is)X 1046(translated)X 1382(into)X 1530(a)X 1590(call)X 1730(to)X 1816(the)X 1938(run-time)X 2238(error)X 2419(handling)X 2723(routine.)X 2994(Specifying)X 3365(this)X 3505(as)X 3597(a)X 3658(separate)X 3947(action)X 4168(rather)X 612 4508(than)N 775(a)X 836(C)X 914(expression)X 1281(within)X 1509(a)X 5 f 1571(body)X 1 f 1767(or)X 5 f 1860(inline)X 1 f 2070(action)X 2290(gives)X 2483(the)X 2605(compiler)X 2914(additional)X 3258(information)X 3660(about)X 3862(the)X 3984(behavior)X 4289(of)X 612 4604(the)N 736(operation.)X 2 f 1085(msg_number)X 1 f 1526(is)X 1606(the)X 1731(number)X 2003(used)X 2177(to)X 2266(look)X 2435(up)X 2542(the)X 2667(error)X 2851(message)X 3150(in)X 3239(a)X 3302(run-time)X 3605(error)X 3789(table)X 3972(\(see)X 4129(the)X 4254(\256le)X 5 f 612 4700(runtime/data.r)N 1 f 1103(\).)X 1190(If)X 1264(a)X 1320(descriptor)X 1661(is)X 1734(given,)X 1952(it)X 2016(is)X 2089(taken)X 2283(to)X 2365(be)X 2461(theeb VMS.BCK[V9.DOCS]IPD261.PS;11m?)X 2579(offending)X 2911(value.)X 3 f 612 4892(3.5.5)N 812(Abstract)X 1131(Type)X 1324(Computations)X 5 f 1100 5036(abstract)N 1402({)X 2 f 1446(type-computations)X 5 f 2055(})X 1 f 732 5208(The)N 880(behavior)X 1184(of)X 1274(an)X 1373(operation)X 1700(with)X 1866(respect)X 2118(to)X 2204(types)X 2397(is)X 2474(a)X 2534(simpli\256cation)X 2997(of)X 3088(the)X 3210(full)X 3345(semantics)X 3685(of)X 3776(the)X 3898(operation.)X 4245(For)X 612 5304(example,)N 930(the)X 1054(semantics)X 1396(of)X 1489(the)X 1613(function)X 5 f 1908(image)X 1 f 2151(is)X 2230(to)X 2318(produce)X 2603(the)X 2727(string)X 2935(representing)X 3358(its)X 3459(operand;)X 3765(its)X 3865(behavior)X 4171(in)X 4258(the)X 612 5400(type)N 779(realm)X 991(is)X 1073(described)X 1410(as)X 1506(simply)X 1752(returning)X 2075(some)X 2274(string.)X 2526(In)X 2623(general,)X 2910(a)X 2976(good)X 3166(simpli\256cation)X 3635(of)X 3732(an)X 3838(operation)X 4171(is)X 4254(too)X 612 5496(complicated)N 1031(to)X 1120(be)X 1223(automatically)X 1686(produced)X 2011(from)X 2193(the)X 2317(operation's)X 2704(implementation)X 3232(\(of)X 3352(course,)X 3608(it)X 3678(is)X 3757(always)X 4006(possible)X 4294(to)X 612 5592(conclude)N 922(that)X 1062(an)X 1158(operation)X 1481(can)X 1613(produce)X 1892(any)X 2028(type)X 2186(and)X 2322(can)X 2454(have)X 2626(any)X 2762(side)X 2911(effect,)X 3135(but)X 3257(that)X 3398(is)X 3472(hardly)X 3698(useful\).)X 3962(For)X 4094(this)X 4230(rea-)X 612 5688(son,)N 768(the)X 891(programmer)X 1313(must)X 1493(use)X 1625(the)X 5 f 1750(abstract)X 1 f 2058(action)X 2279(to)X 2366(specify)X 2 f 2623(type-computation)X 1 f 3184(s)X 3240(\(for)X 3386(operations)X 3745(that)X 3889(appear)X 4128(only)X 4294(in)X 612 5784(an)N 708(interpreter)X 1063(version)X 1319(of)X 1406(Icon,)X 1589(abstract)X 1859(type)X 2017(computations)X 2468(are)X 2587(optional\).)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(11)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 12 p %%Page: 12 12 8 s 8 xH 0 xS 1 f 10 s 2 f 900 672(type-computations)N 1509(::=)X 1651({)X 5 f 1700(store)X 1896([)X 2 f 1935(type)X 5 f 2086(])X 2127(=)X 2 f 2193(type)X 2344([)X 5 f 2392(;)X 2 f 2431(])X 2479(}*)X 2619([)X 5 f 2667(return)X 2 f 2892(type)X 3043([)X 5 f 3091(;)X 2 f 3130(])X 3178(])X 732 844(type-computations)N 1 f 1356(consist)X 1610(of)X 1709(side)X 1870(effects)X 2117(and)X 2265(a)X 2333(statement)X 2672(of)X 2771(the)X 2902(result)X 3113(type)X 3284(of)X 3384(the)X 3515(operation.)X 3871(There)X 4092(must)X 4280(be)X 612 940(exactly)N 870(one)X 5 f 1014(return)X 2 f 1244(type)X 1 f 1404(along)X 1607(any)X 1748(path)X 1911(from)X 2092(the)X 2215(start)X 2378(of)X 2470(the)X 2593(operation)X 2921(to)X 3008(C)X 3086(code)X 3263(containing)X 3626(a)X 5 f 3689(return)X 1 f 3897(,)X 5 f 3944(suspend)X 1 f 4244(,)X 4289(or)X 5 f 612 1036(fail)N 1 f 714(.)X 732 1160(A)N 812(side)X 963(effect)X 1169(is)X 1244(represented)X 1638(as)X 1728(an)X 1827(assignment)X 2210(to)X 2295(the)X 2 f 2416(store)X 1 f (.)S 2639(The)X 2787(store)X 2966(is)X 3042(analogous)X 3390(to)X 3475(program)X 3770(memory.)X 4080(Program)X 612 1256(memory)N 912(is)X 998(made)X 1205(up)X 1318(of)X 1418(locations)X 1740(containing)X 2111(values.)X 2369(The)X 2526(store)X 2714(is)X 2799(made)X 3005(up)X 3117(of)X 3216(locations)X 3537(containing)X 3907(types.)X 4128(A)X 4218(type)X 612 1352(represents)N 959(a)X 1017(set)X 1128(of)X 1217(values,)X 1464(though)X 1708(only)X 1872(certain)X 2113(such)X 2282(sets)X 2424(correspond)X 2803(to)X 2887(types)X 3078(for)X 3194(the)X 3314(purpose)X 3590(of)X 3679(abstract)X 3951(type)X 4111(compu-)X 612 1448(tations.)N 867(Types)X 1085(may)X 1245(be)X 1343(basic)X 1530(types)X 1721(such)X 1890(as)X 1978(all)X 2079(Icon)X 2243(integers,)X 2538(or)X 2626(they)X 2785(may)X 2944(be)X 3041(composite)X 3391(types)X 3581(such)X 3749(as)X 3837(all)X 3938(Icon)X 4102(integers)X 612 1544(combined)N 966(with)X 1146(all)X 1264(Icon)X 1445(strings.)X 1716(The)X 1879(rules)X 2073(for)X 2205(specifying)X 2577(types)X 2784(are)X 2921(given)X 3137(below.)X 3391(A)X 3488(location)X 3785(in)X 3886(the)X 4023(store)X 4218(may)X 612 1640(correspond)N 996(to)X 1085(one)X 1228(location)X 1512(in)X 1600(program)X 1898(memory,)X 2211(or)X 2304(it)X 2374(may)X 2538(correspond)X 2921(to)X 3009(several)X 3263(or)X 3356(even)X 3534(an)X 3636(unbounded)X 4018(number)X 4289(of)X 612 1736(locations)N 927(in)X 1015(program)X 1313(memory.)X 1627(The)X 1779(contents)X 2073(of)X 2167(a)X 2230(location)X 2515(in)X 2604(the)X 2729(store)X 2912(can)X 3051(be)X 3154(thought)X 3425(of)X 3519(as)X 3613(a)X 3676(conservative)X 4109(\(that)X 4283(is,)X 612 1832(possibly)N 903(overestimated\))X 1405(summary)X 1728(of)X 1820(values)X 2050(that)X 2195(might)X 2406(appear)X 2646(in)X 2733(the)X 2856(corresponding)X 3340(location\(s\))X 3707(in)X 3793(program)X 4089(memory)X 612 1928(at)N 690(run)X 817(time.)X 732 2052(Program)N 1028(memory)X 1315(can)X 1447(be)X 1543(accessed)X 1845(through)X 2114(a)X 2171(pointer.)X 2459(Similarly,)X 2797(the)X 2916(store)X 3093(can)X 3226(be)X 3323(indexed)X 3598(by)X 3699(a)X 3756(pointer)X 4004(type,)X 4183(using)X 612 2148(an)N 713(expression)X 1081(of)X 1172(the)X 1294(form)X 5 f 1476(store[)X 2 f 1675(type)X 5 f 1809(])X 1 f 1831(,)X 1875(to)X 1961(get)X 2083(at)X 2165(a)X 2225(given)X 2427(location.)X 2729(An)X 2851(Icon)X 3018(global)X 3242(variable)X 3525(has)X 3656(a)X 3716(location)X 3998(in)X 4084(program)X 612 2244(memory,)N 922(and)X 1061(a)X 1120 0.4531(reference)AX 1444(to)X 1529(such)X 1699(a)X 1758(variable)X 2040(in)X 2125(an)X 2224(Icon)X 2390(program)X 2685(is)X 2762(treated)X 3005(as)X 3096(a)X 3156(pointer)X 3407(to)X 3493(that)X 3637(location.)X 3939(Similarly,)X 4280(an)X 612 2340(Icon)N 780(global)X 1005(variable)X 1289(has)X 1421(a)X 1482(location)X 1765(in)X 1852(the)X 1975(store)X 2156(and,)X 2316(during)X 2549(type)X 2711(inference,)X 3055(a)X 3115 0.4531(reference)AX 3440(to)X 3526(the)X 3648(variable)X 3931(is)X 4008(interpreted)X 612 2436(as)N 702(a)X 761(pointer)X 1011(type)X 1172(indexing)X 1475(that)X 1618(location)X 1899(in)X 1984(the)X 2106(store.)X 2306(Because)X 2598(types)X 2791(can)X 2927(be)X 3027(composite,)X 3400(indexing)X 3704(into)X 3852(the)X 3974(store)X 4154(with)X 4320(a)X 612 2532(pointer)N 859(type)X 1017(may)X 1175(actually)X 1449(index)X 1647(several)X 1895(locations.)X 2224(Consider)X 2533(the)X 2651(following)X 2982(side)X 3131(effect)X 5 f 900 2676(store[)N 2 f 1118(type1)X 5 f 1311(])X 1352(=)X 2 f 1418(type2)X 1 f 612 2820(Suppose)N 903(during)X 1132(type)X 1290(inference)X 2 f 1611(type1)X 1 f 1806(evaluates)X 2126(to)X 2209(a)X 2266(composite)X 2616(pointer)X 2864(type)X 3023(consisting)X 3368(of)X 3456(the)X 3575(pointer)X 3823(types)X 4013(for)X 4128(several)X 612 2916(global)N 838(variables.)X 1174(Then)X 1365(all)X 1471(corresponding)X 1956(locations)X 2271(in)X 2359(the)X 2483(store)X 2665(will)X 2815(be)X 2917(updated.)X 3217(If)X 3296(the)X 3419(above)X 3636(side)X 3790(effect)X 3999(is)X 4077(coded)X 4294(in)X 612 3012(the)N 730(assignment)X 1110(operator,)X 1418(this)X 1553(situation)X 1848(might)X 2054(result)X 2252(from)X 2428(an)X 2524(Icon)X 2687(expression)X 3050(such)X 3217(as)X 5 f 900 3156(every)N 1132(\(x)X 9 f 1236(|)X 5 f 1289(y\))X 1393(:=)X 1499(&null)X 1 f 612 3300(In)N 707(this)X 850(example,)X 1170(it)X 1242(is)X 1323(obvious)X 1604(that)X 1752(both)X 1922(variables)X 2240(are)X 2367(changed)X 2663(to)X 2753(the)X 2879(null)X 3031(type.)X 3237(However,)X 3580(type)X 3746(inference)X 4074(can)X 4214(only)X 612 3396(deduce)N 862(that)X 1004(at)X 1083(least)X 1251(one)X 1388(variable)X 1668(in)X 1751/Y VMS.BCK[V9.DOCS]IPD261.PS;11N(the)X 1870(set)X 1980(is)X 2054(changed.)X 2363(Thus,)X 2564(it)X 2629(must)X 2805(assume)X 3062(that)X 3203(each)X 3372(could)X 3571(either)X 3775(be)X 3872(changed)X 4161(or)X 4249(left)X 612 3492(as)N 705(is.)X 804(It)X 879(is)X 958(only)X 1126(when)X 1326(the)X 1450(left)X 1583(hand)X 1765(side)X 1920(of)X 2013(the)X 2137(side)X 2292(effect)X 2502(represents)X 2854(a)X 2916(unique)X 3160(program)X 3458(variable)X 3744(that)X 3891(type)X 4056(inference)X 612 3588(knows)N 845(that)X 989(the)X 1111(variable)X 1394(cannot)X 1632(be)X 1732(left)X 1863(as)X 1954(is.)X 2051(In)X 2142(the)X 2264(current)X 2516(implementation)X 3042(of)X 3133(type)X 3295(inference,)X 3638(assignment)X 4021(to)X 4106(a)X 4165(single)X 612 3684(named)N 846(variable)X 1125(is)X 1198(the)X 1316(only)X 1478(side)X 1627(effect)X 1831(where)X 2048(type)X 2206(inference)X 2526(recognizes)X 2890(that)X 3030(the)X 3148(side)X 3297(effect)X 3501(will)X 3645(de\256nitely)X 3967(occur.)X 732 3808(Indexing)N 1041(into)X 1190(the)X 1313(store)X 1494(with)X 1661(a)X 1722(non-pointer)X 2121(type)X 2284(corresponds)X 2697(to)X 2784(assigning)X 3111(to)X 3198(a)X 3259(non-variable.)X 3710(Such)X 3895(an)X 3996(assignment)X 612 3904(results)N 847(in)X 934(error)X 1116(termination.)X 1550(Type)X 1740(inference)X 2065(ignores)X 2326(any)X 2467(non-pointer)X 2866(types)X 3060(in)X 3147(the)X 3270(index)X 3473(type;)X 3658(they)X 3821(represent)X 4141(execu-)X 612 4000(tion)N 756(paths)X 945(that)X 1085(don't)X 1274(continue)X 1570(and)X 1706(thus)X 1859(contribute)X 2204(nothing)X 2468(to)X 2550(the)X 2668(types)X 2857(of)X 2944(expressions.)X 732 4124(A)N 810(type)X 968(in)X 1050(an)X 1146(abstract)X 1416(type)X 1574(computation)X 1994(is)X 2067(of)X 2154(the)X 2272(form)X 2 f 900 4268(type)N 1051(::=)X 1188(type-name)X 9 f 1557(|)X 5 f 1188 4364(type)N 1357(\()X 2 f 1403(variable)X 5 f 1689(\))X 2 f 9 f 1754(|)X 2 f 1188 4460(component-ref)N 9 f 1690(|)X 5 f 1188 4556(new)N 2 f 1353(type-name)X 5 f 1705(\()X 2 f 1751(type)X 1902({)X 1951(,)X 1988(type)X 2139(}*)X 5 f 2228(\))X 2 f 9 f 2293(|)X 5 f 1188 4652(store)N 1384([)X 2 f 1425(type)X 5 f 1576(])X 2 f 9 f 1636(|)X 2 f 1188 4748(type)N 5 f 1339(++)X 2 f 1452(type)X 9 f 1620(|)X 2 f 1188 4844(type)N 5 f 1339(**)X 2 f 1420(type)X 9 f 1588(|)X 5 f 1188 4940(\()N 2 f 1234(type)X 5 f 1385(\))X 1 f 612 5084(The)N 5 f 763(type\()X 2 f 940(variable)X 5 f 1207(\))X 1 f 1258(expression)X 1625(allows)X 1858(type)X 2020(computations)X 2475(to)X 2561(be)X 2662(expressed)X 3004(in)X 3091(terms)X 3294(of)X 3386(the)X 3509(type)X 3672(of)X 3764(an)X 3865(argument)X 4193(to)X 4280(an)X 612 5180(operation.)N 982(This)X 1151(must)X 1333(be)X 1436(an)X 1539(unmodi\256ed)X 1929(argument.)X 2278(That)X 2451(is,)X 2550(the)X 2674(abstract)X 2950(type)X 3114(computation)X 3540(involving)X 3872(this)X 4013(expression)X 612 5276(must)N 793(not)X 922(be)X 1025(within)X 1256(the)X 1381(scope)X 1591(of)X 1685(a)X 1748(conversion.)X 2147(This)X 2316(restriction)X 2668(simpli\256es)X 3005(the)X 3130(computations)X 3588(needed)X 3843(to)X 3932(perform)X 4218(type)X 612 5372(inference.)N 732 5496(This)N 898(expression)X 1265(is)X 1342(useful)X 1562(in)X 1648(several)X 1900(contexts,)X 2211(including)X 2537(operations)X 2895(that)X 3039(deal)X 3197(with)X 3363(aggregate)X 3700(types.)X 3914(The)X 4064(type)X 4227(sys-)X 612 5592(tem)N 755(for)X 872(a)X 931(program)X 1226(may)X 1386(have)X 1560(several)X 1810(sub-types)X 2139(for)X 2255(an)X 2353(aggregate)X 2688(type.)X 2868(The)X 3015(aggregate)X 3350(types)X 3541(are)X 3662(list,)X 3801(table,)X 3999(set,)X 4130(record,)X 612 5688(substring)N 928(trapped)X 1192(variable,)X 1494(and)X 1633(table-element)X 2093(trapped)X 2357(variable.)X 2679(Each)X 2863(of)X 2953(these)X 3141(Icon)X 3307(types)X 3500(is)X 3577(a)X 3637(composite)X 3990(type)X 4152(within)X 612 5784(the)N 734(type)X 896(computations,)X 1371(rather)X 1583(than)X 1745(a)X 1805(basic)X 1994(type.)X 2176(Thus)X 2360(the)X 2482(type)X 2644(inferencing)X 3034(system)X 3280(may)X 3442(be)X 3542(able)X 3700(to)X 3786(determine)X 4131(a)X 4191(more)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(12)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 13 p %%Page: 13 13 8 s 8 xH 0 xS 1 f 10 s 612 672(accurate)N 901(type)X 1059(for)X 1173(an)X 1269(argument)X 1592(than)X 1750(can)X 1882(be)X 1978(expressed)X 2315(with)X 2477(a)X 2 f 2533(type-name)X 1 f 2868(.)X 2908(For)X 3039(example,)X 3351(it)X 3415(is)X 3488(more)X 3673(accurate)X 3962(to)X 4044(use)X 5 f 900 816(if)N 977(is:list\(x\))X 1286(then)X 1011 912(abstract)N 1331({)X 1122 1008(return)N 1367(type\(x\))X 1122 1104(})N 2 f 1011 1200(actions)N 5 f 900 1296(else)N 1011 1392(runerr\(108,)N 1442(x\))X 1 f 612 1536(than)N 770(it)X 834(is)X 907(to)X 989(use)X 5 f 900 1680(if)N 977(is:list\(x\))X 1286(then)X 1011 1776(abstract)N 1331({)X 1122 1872(return)N 1367(list)X 1122 1968(})N 2 f 1011 2064(actions)N 5 f 900 2160(else)N 1011 2256(runerr\(108,)N 1442(x\))X 1 f 732 2428(Aggregate)N 1095(values)X 1328(have)X 1508(internal)X 1781(structure.)X 2110(Aggregate)X 2473(types)X 2670(also)X 2827(need)X 3008(an)X 3113(internal)X 3387(structure)X 3697(that)X 3846(summarizes)X 4258(the)X 612 2524(structure)N 923(of)X 1020(the)X 1148(values)X 1383(they)X 1551(contain.)X 1836(This)X 2007(structure)X 2317(is)X 2399(implemented)X 2846(with)X 3017(type)X 3184(components.)X 3620(These)X 3841(components)X 4257(are)X 612 2620 0.4028(referenced)AN 973(using)X 1166(dot)X 1288(notation:)X 2 f 900 2764(component-ref)N 1385(::=)X 1510(type)X 5 f 1661(.)X 2 f 1702(component-name)X 900 2956(component-name)N 1470(::=)X 5 f 1620(lst_elem)X 2 f 9 f 1974(|)X 5 f 1620 3052(set_elem)N 2 f 9 f 1981(|)X 5 f 1620 3148(tbl_key)N 2 f 9 f 1910(|)X 5 f 1620 3244(tbl_val)N 2 f 9 f 1888(|)X 5 f 1620 3340(tbl_d\257t)N 2 f 9 f 1892(|)X 5 f 1620 3436(all_\256elds)N 2 f 9 f 1987(|)X 5 f 1620 3532(str_var)N 2 f 9 f 1902(|)X 5 f 1620 3628(trpd_tbl)N 1 f 612 3772(Just)N 758(as)X 847(values)X 1075(internal)X 1343(to)X 1428(aggregate)X 1764(values)X 1992(are)X 2114(stored)X 2333(in)X 2418(program)X 2713(memory,)X 3023(types)X 3215(internal)X 3483(to)X 3568(aggregate)X 3904(types)X 4096(are)X 4218(kept)X 612 3868(in)N 694(the)X 812(store.)X 1008(A)X 1086(component)X 1462(is)X 1535(a)X 1591(pointer)X 1838(type)X 1996(referencing)X 2383(a)X 2439(location)X 2717(in)X 2799(the)X 2917(store.)X 732 3992(A)N 815(list)X 937(is)X 1015(made)X 1215(up)X 1321(of)X 1414(\(unnamed\))X 1788(variables.)X 2124(The)X 5 f 2277(lst_elem)X 1 f 2600(component)X 2982(of)X 3075(a)X 3137(list)X 3260(type)X 3424(is)X 3503(a)X 3565(type)X 3729(representing)X 4152(all)X 4258(the)X 612 4088(variables)N 932(contained)X 1274(in)X 1366(all)X 1476(the)X 1604(lists)X 1762(in)X 1853(the)X 1980(type.)X 2167(For)X 2307(example,)X 2628(part)X 2782(of)X 2878(the)X 3005(code)X 3186(for)X 3309(the)X 3436(bang)X 3621(operator)X 3918(is)X 4000(as)X 4096(follows,)X 612 4184(where)N 5 f 831(dx)X 1 f 935(is)X 1008(the)X 1126 0.3750(dereferenced)AX 1563(operand.)X 5 f 900 4328(type_case)N 1299(dx)X 1420(of)X 1523({)X 1011 4424(list:)N 1168({)X 1122 4520(abstract)N 1442({)X 1233 4616(return)N 1478(type\(dx\).lst_elem)X 1233 4712(})N 2 f 1122 4808(actions)N 5 f 1122 4904(})N 2 f 1011 5000(...)N 5 f 1011 5096(})N 1 f 612 5240(This)N 774(code)X 946(fragment)X 1256(indicates)X 1561(that,)X 1721(if)X 1790(the)X 1908(argument)X 2231(to)X 2313(bang)X 2490(is)X 2564(in)X 2647(a)X 2704(list)X 2822(type,)X 3001(bang)X 3178(returns)X 3422(some)X 3612(variable)X 3892(from)X 4069(some)X 4259(list)X 612 5336(in)N 694(that)X 834(type.)X 1012(In)X 1099(the)X 1217(type)X 1375(realm,)X 1598(bang)X x" VMS.BCK[V9.DOCS]IPD261.PS;11]1774(returns)X 2017(a)X 2073(basic)X 2258(pointer)X 2505(type.)X 732 5460(The)N 5 f 881(set_elem)X 1 f 1226(component)X 1604(of)X 1693(a)X 1751(set)X 1862(type)X 2022(is)X 2097(similar.)X 2361(The)X 2508(locations)X 2819(of)X 2908(a)X 2966(set)X 3077(never)X 3278 0.3750(``escape'')AX 3623(as)X 3713(variables.)X 4046(That)X 4216(is,)X 4312(it)X 612 5556(is)N 692(not)X 821(possible)X 1110(to)X 1199(assign)X 1426(to)X 1515(an)X 1618(element)X 1899(of)X 1993(a)X 2056(set.)X 2192(This)X 2361(is)X 2441(re\257ected)X 2745(in)X 2834(the)X 2958(fact)X 3105(that)X 3251(a)X 5 f 3315(set_elem)X 1 f 3664(is)X 3743(always)X 3992(used)X 4165(as)X 4258(the)X 612 5652(index)N 810(to)X 892(the)X 1010(store)X 1186(and)X 1322(is)X 1395(never)X 1594(assigned)X 1890(to)X 1972(another)X 2233(location)X 2511(or)X 2598(returned)X 2886(from)X 3062(an)X 3158(operation.)X 3521(The)X 3666(case)X 3825(in)X 3908(the)X 4027(code)X 4200(from)X 612 5748(bang)N 788(for)X 902(sets)X 1042(is)X 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(13)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 14 p %%Page: 14 14 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(set:)N 1065({)X 1011 768(abstract)N 1331({)X 1122 864(return)N 1367 -0.1848(store[type\(dx\).set_elem])AX 1122 960(})N 2 f 1011 1056(actions)N 5 f 1011 1152(})N 1 f 732 1324(Tables)N 966(types)X 1155(have)X 1328(three)X 1510(components.)X 5 f 1962(tbl_key)X 1 f 2235 0.3889(references)AX 2588(a)X 2645(location)X 2924(in)X 3007(the)X 3126(store)X 3303(containing)X 3662(the)X 3781(type)X 3940(of)X 4028(any)X 4165(possi-)X 612 1420(ble)N 733(key)X 872(in)X 957(any)X 1096(table)X 1275(in)X 1360(the)X 1481(table)X 1660(type.)X 5 f 1865(tbl_val)X 1 f 2117 0.3889(references)AX 2471(a)X 2529(location)X 2809(containing)X 3169(the)X 3289(type)X 3449(of)X 3538(any)X 3676(possible)X 3960(value)X 4156(in)X 4240(any)X 612 1516(table)N 788(in)X 870(the)X 988(table)X 1164(type.)X 5 f 1344(tbl_d\257t)X 1 f 1598 0.3889(references)AX 1950(a)X 2006(location)X 2284(containing)X 2642(the)X 2760(type)X 2918(of)X 3006(any)X 3143(possible)X 3426(default)X 3670(value)X 3865(for)X 3980(any)X 4117(table)X 4294(in)X 612 1612(the)N 730(table)X 906(type.)X 1084(Only)X 5 f 1266(tbl_val)X 1 f 1516(corresponds)X 1924(to)X 2006(a)X 2062(variable)X 2341(in)X 2423(Icon.)X 2606(The)X 2751(others)X 2967(must)X 3142(appear)X 3377(as)X 3464(indexes)X 3729(into)X 3873(the)X 3991(store.)X 732 1736(Record)N 987(types)X 1179(are)X 1301(implemented)X 1742(with)X 1907(a)X 1966(location)X 2247(in)X 2332(the)X 2453(store)X 2632(for)X 2750(each)X 2922(\256eld,)X 3108(but)X 3234(these)X 3423(locations)X 3736(cannot)X 3974(be)X 4074(accessed)X 612 1832(separately)N 959(in)X 1042(the)X 1161(type)X 1320(computations)X 1772(of)X 1860(RTL.)X 2052(These)X 2265(are)X 2385(only)X 2548(needed)X 2797(separately)X 3144(during)X 3373(record)X 3599(creation)X 3878(and)X 4014(\256eld)X 4176(refer-)X 612 1928(ence,)N 804(which)X 1024(are)X 1147(handled)X 1425(as)X 1516(special)X 1763(cases)X 1957(in)X 2043(the)X 2166(compiler.)X 2496(There)X 2709(is)X 2787(an)X 2888(RTL)X 3064(component)X 3445(name,)X 5 f 3666(all_\256elds)X 1 f 3976(,)X 4021(which)X 4242(is)X 4320(a)X 612 2024(composite)N 961(type)X 1119(and)X 1255(includes)X 1542(the)X 1660(pointer)X 1907(types)X 2096(for)X 2210(each)X 2378(of)X 2465(the)X 2583(\256elds)X 2776(of)X 2863(a)X 2919(record)X 3145(type.)X 732 2148(Substring)N 1063(trapped)X 1329(variables)X 1644(are)X 1768(implemented)X 2211(as)X 2303(aggregate)X 2641(values.)X 2891(For)X 3027(this)X 3167(reason,)X 3422(they)X 3585(need)X 3762(aggregate)X 4100(types)X 4294(to)X 612 2244(describe)N 910(them.)X 1120(The)X 1275(part)X 1430(of)X 1527(the)X 1654(aggregate)X 1996(of)X 2092(interest)X 2357(in)X 2448(type)X 2615(inference)X 2944(is)X 3026(the)X 3153 0.4531(reference)AX 3483(to)X 3574(the)X 3701(underlying)X 4077(variable.)X 612 2340(This)N 778(is)X 855(re\257ected)X 1156(in)X 1242(the)X 1364(one)X 1504(component)X 1884(of)X 1975(these)X 2164(types,)X 5 f 2379(str_var)X 1 f 2623(.)X 2667(It)X 2740(is)X 2817(a)X 2877 0.4531(reference)AX 3202(to)X 3288(a)X 3348(location)X 3630(in)X 3716(the)X 3838(store)X 4018(containing)X 612 2436(the)N 733(pointer)X 983(types)X 1175(of)X 1265(the)X 1386(underlying)X 1756(the)X 1877(variables)X 2190(that)X 2333(are)X 2455(``trapped''.)X 5 f 2849(str_var)X 1 f 3116(is)X 3192(only)X 3356(used)X 3525(as)X 3614(an)X 3712(index)X 3912(into)X 4058(the)X 4178(store;)X 612 2532(it)N 676(is)X 749(never)X 948(exported)X 1249(from)X 1425(an)X 1521(operation.)X 732 2656(Similarly)N 1054(table-element)X 1516(trapped)X 1782(variables)X 2097(need)X 2274(aggregate)X 2612(types)X 2807(to)X 2895(implement)X 3263(them.)X 3469(They)X 3660(have)X 3838(one)X 3980(component,)X 5 f 612 2752(trpd_tbl)N 1 f 877(,)X 926(referencing)X 1322(a)X 1387(location)X 1674(in)X 1765(the)X 1892(store)X 2077(containing)X 2444(the)X 2571(type)X 2738(of)X 2834(the)X 2961(underlying)X 3337(table.)X 3542(The)X 3696(key)X 3841(type)X 4007(is)X 4088(not)X 4218(kept)X 612 2848(separately)N 958(in)X 1040(the)X 1158(trapped)X 1420(variable)X 1700(type;)X 1881(it)X 1946(must)X 2122(be)X 2219(immediately)X 2640(added)X 2853(to)X 2936(the)X 3055(table)X 3232(when)X 3427(a)X 3484(table-element)X 3942(trapped)X 4204(vari-)X 612 2944(able)N 773(type)X 938(is)X 1018(created.)X 1298(This)X 1467(pessimistically)X 1969(assumes)X 2262(that)X 2408(the)X 2532(key)X 2674(type)X 2838(will)X 2988(eventually)X 3348(be)X 3450(put)X 3578(in)X 3666(the)X 3790(table,)X 3992(but)X 4120(saves)X 4320(a)X 612 3040(component)N 992(in)X 1078(the)X 1200(trapped)X 1465(variable)X 1748(for)X 1866(the)X 1988(key.)X 5 f 2150(trpd_tbl)X 1 f 2439(is)X 2516(only)X 2682(used)X 2853(as)X 2945(an)X 3046(index)X 3249(into)X 3398(the)X 3521(store;)X 3724(it)X 3793(is)X 3871(never)X 4075(exported)X 612 3136(from)N 788(an)X 884(operation.)X 732 3260(The)N 890(type)X 1061(computation,)X 5 f 1516(new)X 1 f 1662(,)X 1715(indicates)X 2033(that)X 2186(an)X 2295(invocation)X 2666(of)X 2766(the)X 2897(operation)X 3233(being)X 3444(implemented)X 3895(creates)X 4152(a)X 4222(new)X 612 3356(instance)N 895(of)X 982(a)X 1038(value)X 1232(in)X 1314(the)X 1432(speci\256ed)X 1737(aggregate)X 2070(type.)X 2248(For)X 2379(example,)X 2691(the)X 2809(implementation)X 3331(of)X 3418(the)X 5 f 3538(list)X 1 f 3656(function)X 3943(is)X 5 f 900 3500(function{1})N 1313(list\(size,)X 1639(initial\))X 1011 3596(abstract)N 1331({)X 1122 3692(return)N 1367(new)X 1550(list\(type\(initial\)\))X 1122 3788(})N 2 f 1011 3884(actions)N 5 f 900 3980(end)N 1 f 612 4124(The)N 757(type)X 915(arguments)X 1269(to)X 1351(the)X 5 f 1471(new)X 1 f 1637(computation)X 2057(specify)X 2309(the)X 2427(initial)X 2633(values)X 2858(for)X 2972(the)X 3090(components)X 3497(of)X 3584(the)X 3702(aggregate.)X 4055(The)X 4200(table)X 612 4220(type)N 772(is)X 846(the)X 965(only)X 1128(one)X 1265(that)X 1406(contains)X 1694(multiple)X 1981(components.)X 2429(\(Note)X 2633(that)X 2774(record)X 3001(constructors)X 3414(are)X 3534(created)X 3788(during)X 4018(translation)X 612 4316(and)N 748(are)X 867(not)X 989(speci\256ed)X 1294(via)X 1412(RTL.\))X 1630(Table)X 1833(components)X 2240(must)X 2415(be)X 2511(given)X 2709(in)X 2791(the)X 2909(order:)X 5 f 3123(tbl_key)X 1 f 3375(,)X 5 f 3417(tbl_val)X 1 f 3647(,)X 3687(and)X 5 f 3825(tbl_d\257t)X 1 f 4059(.)X 732 4440(In)N 825(the)X 949(type)X 1113(system)X 1361(for)X 1481(a)X 1544(given)X 1749(program,)X 2068(a)X 2131(aggregate)X 2471(type)X 2636(is)X 2716(partitioned)X 3090(into)X 3241(several)X 3496(sub-types)X 3830(\(these)X 4049(sub-types)X 612 4536(are)N 738(only)X 907(distinguished)X 1360(during)X 1596(type)X 1761(inference,)iN VMS.BCK[V9.DOCS]IPD261.PS;11=lX 2108(not)X 2237(at)X 2322(run)X 2456(time\).)X 2672(One)X 2832(of)X 2925(these)X 3116(sub-types)X 3449(is)X 3528(allocated)X 3844(for)X 3964(every)X 4169(easily)X 612 4632(recognized)N 990(use)X 1122(of)X 1214(an)X 1315(operation)X 1643(that)X 1789(creates)X 2039(a)X 2101(new)X 2261(value)X 2461(for)X 2581(the)X 2705(aggregate)X 3044(type.)X 3248(Thus,)X 3454(the)X 3578(following)X 3915(Icon)X 4084(program)X 612 4728(has)N 739(two)X 879(list)X 996(sub-types:)X 1345(one)X 1481(for)X 1595(each)X 1763(invocation)X 2121(of)X 5 f 2210(list)X 1 f 2308(.)X 5 f 900 4872(procedure)N 1295(main\(\))X 1011 4968(local)N 1212(x)X 1011 5160(x)N 1088(:=)X 1194(list\(1,)X 1422(list\(100\)\))X 900 5256(end)N 1 f 732 5428(Two)N 909(operations)X 1273(are)X 1402(available)X 1722(for)X 1846(combining)X 2218(types.)X 2437(Union)X 2668(is)X 2752(denoted)X 3037(by)X 3148(the)X 3277(operator)X 3576(`++')X 3751(and)X 3898(intersection)X 4303(is)X 612 5524(denoted)N 898(by)X 1009(the)X 1138(operator)X 1437(`**'.)X 1622(Intersection)X 2032(has)X 2170(the)X 2299(higher)X 2535 0.3375(precedence.)AX 2949(These)X 3172(operations)X 3537(interpret)X 3840(types)X 4040(as)X 4138(sets)X 4289(of)X 612 5620(values.)N 877(However,)X 1212(because)X 1487(types)X 1676(may)X 1834(be)X 1930(in\256nite,)X 2196(these)X 2381(sets)X 2521(are)X 2640(treated)X 2879(symbolically.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(14)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 15 p %%Page: 15 15 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(4.)N 712(C)X 790(Extensions)X 1 f 732 796(The)N 877(C)X 950(code)X 1122(included)X 1418(using)X 1611(the)X 5 f 1731(declare)X 1 f 1992(,)X 5 f 2034(body)X 1 f 2206(,)X 2246(and)X 5 f 2384(inline)X 1 f 2590(actions)X 2837(may)X 2995(contain)X 3251(several)X 3499(constructs)X 3844(beyond)X 4100(those)X 4289(of)X 612 892(standard)N 939(C.)X 1087(There)X 1330(are)X 1484(\256ve)X 1658(categories)X 2038(of)X 2159(C)X 2266(extensions:)X 2680(access)X 2940(to)X 3056(interface)X 3392(variables,)X 3756(declarations,)X 4218(type)X 612 988(conversions/type)N 1175(checks,)X 1434(signaling)X 1747(run-time)X 2043(errors,)X 2271(and)X 2407(return)X 2619(statements.)X 732 1112(In)N 821(addition)X 1105(to)X 1189(their)X 1358(use)X 1487(in)X 1571(the)X 1692(body)X 1875(of)X 1965(an)X 2064(operation,)X 2410(the)X 2531(conversions)X 2937(and)X 3076(type)X 3237(checks,)X 3499(and)X 3638(declaration)X 4018(extensions)X 612 1208(may)N 770(be)X 866(used)X 1033(in)X 1115(ordinary)X 1407(C)X 1480(functions)X 1798(that)X 1938(are)X 2057(put)X 2179(through)X 5 f 2450(rtt)X 1 f 2521(.)X 3 f 612 1400(4.1)N 752(Interface)X 1085(Variables)X 1 f 732 1524(Interface)N 1044(variables)X 1359(include)X 1620(parameters,)X 2018(the)X 2141(identi\256er)X 2455(for)X 2574(length)X 2799(of)X 2891(the)X 3014(variable)X 3298(part)X 3449(of)X 3542(an)X 3644(argument)X 3973(list,)X 4116(and)X 4258(the)X 612 1620(special)N 863(variable)X 5 f 1152(result)X 1 f 1347(.)X 1395(Unconverted)X 1837(parameters,)X 2237(converted)X 2581(parameters)X 2961(with)X 3130(Icon)X 3300(types,)X 3516(and)X 3659(converted)X 4003(parameters)X 612 1716(with)N 790(the)X 924(internal)X 1205(types)X 5 f 1412(tmp_string)X 1 f 1820(and)X 5 f 1974(tmp_cset)X 1 f 2333(are)X 2468(descriptors)X 2856(and)X 3008(within)X 3248(the)X 3382(C)X 3471(code)X 3660(have)X 3849(the)X 3984(type)X 5 f 4161(struct)X 612 1812(descrip)N 1 f 869(.)X 921(Converted)X 1286(parameters)X 1670(with)X 1843(the)X 1972(internal)X 2248(type)X 2417(of)X 5 f 2517(C_integer)X 1 f 2893(have)X 3076(some)X 3276(signed)X 3516(integer)X 3770(type)X 3939(within)X 4174(the)X 4303(C)X 612 1908(code,)N 806(but)X 930(exactly)X 1184(which)X 1402(C)X 1477(integer)X 1722(type)X 1882(varies)X 2096(between)X 2386(systems.)X 2681(This)X 2845(type)X 3005(has)X 3135(been)X 3310(set)X 3422(up)X 3525(using)X 3721(a)X 5 f 3782(typedef)X 1 f 4065(in)X 4150(one)X 4289(of)X 612 2004(the)N 733(header)X 970(\256les)X 1125(automatically)X 1583(included)X 1881(by)X 5 f 1985(rtt)X 1 f 2056(,)X 2098(so)X 2191(it)X 2257(is)X 2332(available)X 2644(for)X 2760(use)X 2889(in)X 2973(declarations)X 3383(in)X 3467(C)X 3542(code.)X 3736(Converted)X 4092(parame-)X 612 2100(ters)N 751(with)X 916(the)X 1037(internal)X 1305(type)X 1466(of)X 5 f 1559(C_double)X 1 f 1923(have)X 2099(the)X 2221(type)X 5 f 2385(double)X 1 f 2647(within)X 2875(the)X 2997(C)X 3074(code.)X 3270(Converted)X 3628(parameters)X 4005(of)X 4096(the)X 4218(type)X 5 f 612 2196(C_string)N 1 f 929(have)X 1101(the)X 1219(type)X 5 f 1379(char)X 1556(*)X 1 f 1587(.)X 1647(The)X 1792(length)X 2012(of)X 2099(the)X 2217(variable)X 2496(part)X 2641(of)X 2728(a)X 2784(argument)X 3107(list)X 3224(has)X 3351(the)X 3469(type)X 5 f 3629(int)X 1 f 3733(within)X 3957(the)X 4075(C)X 4148(code.)X 5 f 732 2320(result)N 1 f 951(is)X 1028(a)X 1088(special)X 1335(descriptor)X 1680(variable.)X 1983(Under)X 2208(some)X 2401(circumstances)X 2880(it)X 2948(is)X 3025(more)X 3214(ef\256cient)X 3501(to)X 3587(construct)X 3905(a)X 3965(return)X 4182(value)X 612 2416(in)N 694(this)X 829(descriptor)X 1170(than)X 1328(to)X 1410(use)X 1537(other)X 1722(methods.)X 2033(See)X 2169(Section)X 2429(5)X 2489(for)X 2603(details.)X 3 f 612 2608(4.2)N 752(Declarations)X 1 f 732 2732(The)N 885(extension)X 1220(to)X 1311(declarations)X 1728(consists)X 2010(of)X 2106(a)X 2171(new)X 2334(storage)X 2595(class)X 2780(speci\256er,)X 5 f 3103(tended)X 1 f 3374(\()X 5 f 3401(register)X 1 f 3696(is)X 3778(an)X 3883(example)X 4184(of)X 4280(an)X 612 2828(existing)N 888(storage)X 1143(class)X 1322(speci\256er\).)X 1664(Understanding)X 2159(its)X 2257(use)X 2387(requires)X 2669(some)X 2861(knowledge)X 3236(of)X 3325(Icon)X 3490(storage)X 3744(management.)X 4196(Only)X 612 2924(a)N 668(brief)X 840(description)X 1216(of)X 1303(storage)X 1555(management)X 1985(is)X 2058(given)X 2256(here;)X 2437(see)X 2560([6])X 2674(for)X 2788(details.)X 732 3048(Icon)N 900(values)X 1130(are)X 1255(represented)X 1652(by)X 1758(descriptors.)X 2156(A)X 2240(descriptor)X 2587(contains)X 2880(both)X 3048(type)X 3212(information)X 3616(and)X 3758(value)X 3958(information.)X 612 3144(For)N 754(large)X 946(values)X 1182(\(everything)X 1583(other)X 1779(than)X 1948(integers)X 2233(and)X 2380(the)X 2509(null)X 2664(value\))X 2895(the)X 3023(descriptor)X 3374(only)X 3546(contains)X 3843(a)X 3909(pointer)X 4166(to)X 4258(the)X 612 3240(value,)N 831(which)X 1052(resides)X 1300(elsewhere.)X 1667(When)X 1884(such)X 2056(a)X 2117(value)X 2316(is)X 2394(dynamically)X 2815(created,)X 3093(memory)X 3385(for)X 3504(it)X 3573(is)X 3651(allocated)X 3966(from)X 4147(one)X 4289(of)X 612 3336(several)N 862(memory)X 1151(regions.)X 1429(Strings)X 1676(are)X 1796(allocated)X 2107(from)X 2284(the)X 2 f 2403(string)X 2610(region)X 1 f 2819(.)X 2860(All)X 2983(other)X 3169(relocatable)X 3543(values)X 3769(are)X 3889(allocated)X 4200(from)X 612 3432(the)N 2 f 733(block)X 930(region)X 1 f 1139(.)X 1182(The)X 1330(only)X 1495(non-relocatable)X 2018(values)X 2246(are)X 2368(co-expression)X 2837(stacks)X 3056(and)X 3195(co-expression)X 3665(activation)X 4005(blocks.)X 4258(On)X 612 3528(some)N 802(systems)X 1076(non-relocatable)X 1597(values)X 1823(are)X 1943(allocated)X 2254(in)X 2336(the)X 2 f 2454(static)X 2647(region)X 1 f 2856(.)X 2896(On)X 3014(other)X 3199(systems)X 3472(there)X 3653(is)X 3726(no)X 3826(static)X 4015(region)X 4240(and)X 612 3624(these)N 797(values)X 1022(are)X 1141(allocated)X 1451(using)X 1644(the)X 1762(C)X 5 f 1837(malloc\(\))X 1 f 2142(function.)X 732 3748(When)N 950(a)X 1013(storage)X 1272(request)X 1531(is)X 1611(made)X 1812(to)X 1901(a)X 1964(region)X 2196(and)X 2339(there)X 2527(is)X 2607(not)X 2736(eno@ VMS.BCK[V9.DOCS]IPD261.PS;1{ugh)X 2999(room)X 3195(in)X 3284(that)X 3431(region,)X 3683(a)X 2 f 3746(garbage)X 4040(collection)X 1 f 612 3844(occurs.)N 870(All)X 2 f 1000(reachable)X 1 f 1349(values)X 1581(for)X 1702(each)X 1877(region)X 2109(are)X 2235(located.)X 2514(Values)X 2764(in)X 2853(the)X 2978(string)X 3187(and)X 3330(block)X 3535(regions)X 3798(are)X 3924(moved)X 4169(into)X 4320(a)X 612 3940(contiguous)N 990(area)X 1152(at)X 1237(the)X 1362(bottom)X 1615(of)X 1709(the)X 1834(region,)X 2086(creating)X 2372(\(hopefully\))X 2760(free)X 2913(space)X 3119(at)X 3205(the)X 3331(end)X 3475(of)X 3570(the)X 3696(region.)X 3949(Unreachable)X 612 4036(co-expression)N 1080(stacks)X 1298(and)X 1436(activator)X 1739(blocks)X 1970(are)X 2091 0.3611(``freed''.)AX 2406(The)X 2552(garbage)X 2828(collector)X 3130(must)X 3306(be)X 3403(able)X 3558(to)X 3641(recognize)X 3975(and)X 4112(save)X 4276(all)X 612 4132(values)N 838(that)X 979(might)X 1187(be)X 1285 0.4028(referenced)AX 1648(after)X 1818(the)X 1938(garbage)X 2215(collection)X 2553(and)X 2691(it)X 2757(must)X 2934(be)X 3032(able)X 3188(to)X 3272(\256nd)X 3418(and)X 3556(update)X 3792(all)X 3894(pointers)X 4174(to)X 4258(the)X 612 4228(relocated)N 933(values.)X 1184(Operation)X 1531(arguments)X 1891(that)X 2037(contain)X 2299(pointers)X 2583(into)X 2733(one)X 2875(of)X 2968(these)X 3159(regions)X 3421(can)X 3559(always)X 3808(be)X 3909(found)X 4121(by)X 4226(gar-)X 612 4324(bage)N 791(collection.)X 1154(The)X 1306(implementations)X 1866(of)X 1960(many)X 2165(operations)X 2526(need)X 2705(other)X 2897(descriptors)X 3276(or)X 3370(pointers)X 3655(into)X 3806(memory)X 4100(regions.)X 612 4420(The)N 5 f 762(tended)X 1 f 1027(storage)X 1282(class)X 1461(identi\256es)X 1777(those)X 1969(descriptors)X 2344(and)X 2483(pointers)X 2764(that)X 2907(may)X 3067(have)X 2 f 3241(live)X 1 f 3379(values)X 3606(when)X 3802(a)X 3860(garbage)X 4137(collec-)X 612 4516(tion)N 756(could)X 954(occur)X 1153(\(that)X 1320(is,)X 1413(when)X 1607(a)X 1663(memory)X 1950(allocation)X 2286(is)X 2359(performed\).)X 732 4640(A)N 810(descriptor)X 1151(is)X 1224(implemented)X 1662(as)X 1749(a)X 1805(C)X 5 f 1880(struct)X 1 f 2095(named)X 5 f 2331(descrip)X 1 f 2588(,)X 2628(so)X 2719(an)X 2815(example)X 3107(of)X 3194(a)X 3250(tended)X 3484(descriptor)X 3825(declaration)X 4202(is)X 5 f 900 4784(tended)N 1179(struct)X 1411(descrip)X 1705(d;)X 1 f 612 4928(Blocks)N 865(are)X 995(also)X 1155(implemented)X 1604(as)X 1702(C)X 5 f 1788(struct)X 1 f 1983(s.)X 2065(The)X 2221(following)X 2563(list)X 2691(illustrates)X 3033(the)X 3162(types)X 3362(of)X 3460(block)X 3669(pointers)X 3958(that)X 4110(may)X 4280(be)X 612 5024(tended.)N 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(15)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 16 p %%Page: 16 16 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(tended)N 1179(struct)X 1411(b_real)X 1669(*bp;)X 900 768(tended)N 1179(struct)X 1411(b_cset)X 1682(*bp;)X 900 864(tended)N 1179(struct)X 1411(b_\256le)X 1638(*bp;)X 900 960(tended)N 1179(struct)X 1411(b_proc)X 1691(*bp;)X 900 1056(tended)N 1179(struct)X 1411(b_list)X 1634(*bp;)X 900 1152(tended)N 1179(struct)X 1411(b_lelem)X 1727(*bp;)X 900 1248(tended)N 1179(struct)X 1411(b_table)X 1708(*bp;)X 900 1344(tended)N 1179(struct)X 1411(b_telem)X 1731(*bp;)X 900 1440(tended)N 1179(struct)X 1411(b_set)X 1642(*bp;)X 900 1536(tended)N 1179(struct)X 1411(b_selem)X 1749(*bp;)X 900 1632(tended)N 1179(struct)X 1411(b_slots)X 1700(*bp;)X 900 1728(tended)N 1179(struct)X 1411(b_record)X 1762(*bp;)X 900 1824(tended)N 1179(struct)X 1411(b_tvkywd)X 1780(*bp;)X 900 1920(tended)N 1179(struct)X 1411(b_tvsubs)X 1766(*bp;)X 900 2016(tended)N 1179(struct)X 1411(b_tvtbl)X 1682(*bp;)X 900 2112(tended)N 1179(struct)X 1411(b_refresh)X 1784(*bp;)X 900 2208(tended)N 1179(struct)X 1411(b_coexpr)X 1775(*cp;)X 1 f 732 2380(Alternatively,)N 1195(a)X 1251(union)X 1453(pointer)X 1700(can)X 1832(be)X 1928(used)X 2095(to)X 2177(tend)X 2335(a)X 2391(pointer)X 2638(to)X 2720(any)X 2856(kind)X 3018(of)X 3105(block.)X 5 f 900 2524(tended)N 1179(union)X 1410(block)X 1633(*bp;)X 1 f 732 2696(Character)N 1074(pointers)X 1361(may)X 1528(also)X 1686(be)X 1791(tended.)X 2054(However,)X 2398(garbage)X 2682(collection)X 3027(needs)X 3239(a)X 3304(length)X 3533(associated)X 3892(with)X 4063(a)X 4129(pointer)X 612 2792(into)N 766(the)X 894(string)X 1106(region.)X 1360(Unlike)X 1607(values)X 1841(in)X 1932(the)X 2059(block)X 2266(region,)X 2520(the)X 2647(strings)X 2889(themselves)X 3274(do)X 3383(not)X 3514(have)X 3695(a)X 3760(length)X 3989(stored)X 4214(with)X 612 2888(them.)N 818(Garbage)X 1117(collection)X 1459(treats)X 1659(a)X 1721(tended)X 1961(character)X 2283(pointer)X 2536(as)X 2629(a)X 2691(zero-length)X 3083(string)X 3291(\(see)X 5 f 3449(cnv:C_string)X 1 f 3918(for)X 4038(an)X 4141(excep-)X 612 2984(tion\).)N 809(These)X 1027(character)X 1349(pointers)X 1633(are)X 1757(almost)X 1995(always)X 2243(pointers)X 2526(into)X 2675(some)X 2869(string,)X 3096(so)X 3192(garbage)X 3472(collection)X 3813(effectively)X 4182(treats)X 612 3080(them)N 796(as)X 887(zero-length)X 1277(substrings)X 1625(of)X 1716(the)X 1839(strings.)X 2097(The)X 2247(string)X 2454(as)X 2546(a)X 2607(whole)X 2828(must)X 3008(be)X 3109(tended)X 3348(by)X 3453(some)X 3647(descriptor)X 3993(so)X 4089(that)X 4234(it)X 4303(is)X 612 3176(preserved.)N 966(The)X 1111(purpose)X 1385(of)X 1472(tending)X 1732(a)X 1788(character)X 2104(pointer)X 2351(is)X 2424(to)X 2506(insure)X 2722(that)X 2862(the)X 2980(pointer)X 3227(is)X 3300(relocated)X 3615(with)X 3777(the)X 3895(string)X 4097(it)X 4161(points)X 612 3272(into.)N 796(An)X 914(example)X 1206(is)X 5 f 900 3416(tended)N 1179(char)X 1371(*s1,)X 1545(*s2;)X 1 f 732 3588(Tended)N 997(arrays)X 1218(are)X 1341(not)X 1467(supported.)X 5 f 1829(tended)X 1 f 2095(may)X 2257(only)X 2423(be)X 2523(used)X 2695(with)X 2862(variables)X 3177(of)X 3269(local)X 3450(scope.)X 5 f 3680(tended)X 1 f 3947(and)X 5 f 4090(register)X 1 f 612 3684(are)N 731(mutually)X 1035(exclusive.)X 1378(If)X 1452(no)X 1552(initial)X 1758(value)X 1952(is)X 2025(given,)X 2243(one)X 2379(is)X 2452(supplied)X 2743(that)X 2883(is)X 2956(consistent)X 3296(with)X 3458(garbage)X 3733(collection.)X 3 f 612 3876(4.3)N 752(Type)X 945(Conversions/Type)X 1582(Checks)X 1 f 732 4000(Some)N 941(conditional)X 1328(expressions)X 1729(have)X 1908(been)X 2087(added)X 2306(to)X 2395(C.)X 2495(These)X 2714(are)X 2840(based)X 3050(on)X 3157(type)X 3322(checks)X 3569(in)X 3659(the)X 3785(type)X 3951(speci\256cation)X 612 4096(part)N 757(of)X 844(interface)X 1146(portion)X 1397(of)X 1484(RTL.)X 5 f 900 4240(is:)N 2 f 997(type-name)X 5 f 1349(\()X 2 f 1393(source)X 5 f 1624(\))X 900 4336(cnv:)N 2 f 1063(dest-type)X 5 f 1370(\()X 2 f 1414(source)X 5 f 1645(,)X 2 f 1684(destination)X 5 f 2058(\))X 900 4432(def:)N 2 f 1049(dest-type)X 5 f 1356(\()X 2 f 1400(source)X 5 f 1631(,)X 2 f 1672(value)X 5 f 1863(,)X 2 f 1902(destination)X 5 f 2274(\))X 2 f 612 4576(source)N 1 f 848(must)X 1026(be)X 1125(an)X 1224(Icon)X 1390(value,)X 1607(that)X 1750(is,)X 1846(a)X 1905(descriptor.)X 2 f 2289(destination)X 1 f 2667(must)X 2845(be)X 2944(a)X 3003(variable)X 3285(whose)X 3513(type)X 3674(is)X 3750(consistent)X 4093(with)X 4258(the)X 612 4672(conversion.)N 1026(These)X 1240(type)X 1400(checks)X 1641(may)X 1801(appear)X 2038(anywhere)X 2373(a)X 2431(conditional)X 2812(expression)X 3176(is)X 3250(valid)X 3431(in)X 3514(a)X 3571(C)X 3645(program.)X 3958(Note)X 4135(that)X 5 f 4278(is)X 1 f 4336(,)X 5 f 612 4768(cvn)N 1 f 736(,)X 776(and)X 5 f 914(def)X 1 f 1044(are)X 1163(reserved)X 1456(words)X 1672(to)X 1754(distinguish)X 2124(them)X 2304(from)X 2480(labels.)X 732 4892(The)N 5 fE VMS.BCK[V9.DOCS]IPD261.PS;1| 885(type_case)X 1 f 1273(statement)X 1606(may)X 1770(be)X 1872(used)X 2045(in)X 2133(extended)X 2449(C.)X 2548(This)X 2716(statement)X 3049(has)X 3182(the)X 3306(same)X 3497(form)X 3679(as)X 3772(the)X 3897(corresponding)X 612 4988(action,)N 848(but)X 970(in)X 1052(this)X 1187(context,)X 1463(C)X 1536(code)X 1708(replaces)X 1992(the)X 2 f 2110(action)X 1 f (s)S 2361(in)X 2443(the)X 2 f 2561(type-select)X 1 f 2925(clauses.)X 3 f 612 5180(4.4)N 752(Signaling)X 1090(Run-time)X 1435(Errors)X 5 f 732 5304(runerr\(\))N 1 f 1024(is)X 1102(used)X 1274(for)X 1393(signaling)X 1711(run-time)X 2012(errors.)X 2245(It)X 2319(acts)X 2469(like)X 2614(a)X 2675(function)X 2967(but)X 3094(may)X 3257(take)X 3417(either)X 3626(1)X 3692(or)X 3785(2)X 3851(arguments.)X 4231(The)X 612 5400(\256rst)N 759(argument)X 1085(is)X 1161(the)X 1282(error)X 1462(number.)X 1750(If)X 1827(the)X 1948(error)X 2128(has)X 2258(an)X 2357(associated)X 2710(value,)X 2927(the)X 3047(second)X 3292(argument)X 3617(is)X 3692(a)X 3750(descriptor)X 4093(contain-)X 612 5496(ing)N 734(that)X 874(value.)X 5 f 1090(runerr\(\))X 1 f 1377(automatically)X 1833(implements)X 2226(error)X 2403(conversion)X 2775(when)X 2969(it)X 3033(is)X 3106(enabled.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(16)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 17 p %%Page: 17 17 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(4.5)N 752(Return)X 1017(Statements)X 1 f 732 796(There)N 940(are)X 1059(four)X 1213(statements)X 1571(for)X 1685(leaving)X 1941(the)X 2059(execution)X 2391(of)X 2478(an)X 2574(operation:)X 2 f 900 940(ret-statments)N 1335(::=)X 5 f 1476(return)X 2 f 1703(ret-value)X 5 f 2010(;)X 2 f 9 f 2089(|)X 5 f 1476 1036(suspend)N 2 f 1795(ret-value)X 5 f 2102(;)X 2 f 9 f 2181(|)X 5 f 1476 1132(fail)N 1597(;)X 2 f 9 f 1676(|)X 5 f 1476 1228(errorfail)N 1766(;)X 1 f 612 1372(The)N 761(\256rst)X 909(three)X 1094(are)X 1217(analogous)X 1566(to)X 1652(the)X 1774(corresponding)X 2257(expressions)X 2655(in)X 2741(the)X 2864(Icon)X 3032(language.)X 5 f 3391(errorfail)X 1 f 3687(acts)X 3837(like)X 5 f 3984(fail)X 1 f 4086(,)X 4131(but)X 4258(the)X 612 1468(compiler)N 923(assumes)X 1216(it)X 1286(is)X 1365(unreachable)X 1780(when)X 1980(error)X 2163(conversion)X 2541(is)X 2620(disabled.)X 2932(It)X 3006(is)X 3084(used)X 3256(following)X 3592(error)X 3774(functions,)X 4117(such)X 4289(as)X 5 f 612 1564(irunerr\(\))N 1 f 897(,)X 938(that)X 1079(do)X 1180(not)X 1303(automatically)X 1760(implement)X 2123(error)X 2301(conversion.)X 2694(Note)X 2871(that)X 3012(it)X 3078(is)X 3153(not)X 3277(needed)X 3527(after)X 3697(the)X 3817(special)X 4062(construct)X 5 f 612 1660(runerr\(\))N 1 f 879(.)X 732 1784(Return)N 970(values)X 1195(can)X 1327(be)X 1423(speci\256ed)X 1728(in)X 1810(several)X 2058(ways:)X 2 f 900 1928(ret-value)N 1207(::=)X 1476(descriptor)X 9 f 1839(|)X 5 f 1476 2024(C_integer)N 2 f 1838(expression)X 9 f 2215(|)X 5 f 1476 2120(C_double)N 2 f 1833(expression)X 9 f 2210(|)X 5 f 1476 2216(C_string)N 2 f 1790(expression)X 9 f 2167(|)X 2 f 1476 2312(descript-constructor)N 612 2456(descriptor)N 1 f 961(is)X 1034(an)X 1130(expression)X 1493(of)X 1580(type)X 5 f 1740(struct)X 1957(descrip)X 1 f 2214(.)X 2254(For)X 2385(example)X 5 f 900 2600({)N 1048 2696(tended)N 1327(struct)X 1559(descrip)X 1853(dp;)X 2 f 1048 2792(...)N 5 f 1048 2888(suspend)N 1385(dp;)X 2 f 1048 2984(...)N 5 f 900 3080(})N 1 f 612 3224(Use)N 767(of)X 5 f 866(C_integer)X 1 f 1211(,)X 5 f 1263(C_double)X 1 f 1603(,)X 1653(or)X 5 f 1752(C_string)X 1 f 2079(to)X 2171(pre\256x)X 2388(an)X 2494(expression)X 2867(indicates)X 3182(that)X 3332(the)X 3461(expression)X 3835(evaluates)X 4165(to)X 4258(the)X 612 3320(indicated)N 931(C)X 1009(type)X 1172(and)X 1313(not)X 1440(to)X 1527(a)X 1588(descriptor.)X 1953(When)X 2169(necessary,)X 2526(a)X 2586(descriptor)X 2931(is)X 3008(constructed)X 3402(from)X 3582(the)X 3704(result)X 3906(of)X 3997(the)X 4119(expres-)X 612 3416(sion,)N 787(but)X 911(when)X 1107(possible)X 1391(the)X 1511(Icon)X 1676(compiler)X 1983(produces)X 2295(code)X 2469(that)X 2611(can)X 2745(use)X 2874(the)X 2994(raw)X 3137(C)X 3212(value)X 3408(\(See)X 3573(Section)X 3835(5\).)X 3944(As)X 4056(an)X 4155(exam-)X 612 3512(ple,)N 750(the)X 868(integer)X 1111(case)X 1270(in)X 1352(the)X 1470(divide)X 1690(operation)X 2013(is)X 2086(simply:)X 5 f 900 3656(inline)N 1123({)X 1011 3752(return)N 1256(C_integer)X 1638(x)X 1715(/)X 1774(y;)X 1011 3848(})N 1 f 612 3992(Note)N 788(that)X 928(a)X 984(returned)X 1272(C)X 1345(string)X 1547(must)X 1722(not)X 1844(be)X 1940(in)X 2022(a)X 2078(local)X 2254(\(dynamic\))X 2604(character)X 2920(array;)X 3128(it)X 3192(must)X 3367(have)X 3539(a)X 3595(global)X 3815(lifetime.)X 732 4116(A)N 2 f 815(descript-constructor)X 1 f 1494(is)X 1572(an)X 1673(expression)X 2041(that)X 2186(explicitly)X 2513(converts)X 2810(a)X 2872(pointer)X 3125(into)X 3275(a)X 3337(descriptor.)X 3704(It)X 3779(looks)X 3978(like)X 4124(a)X 4186(func-)X 612 4212(tion)N 756(call,)X 912(but)X 1034(is)X 1107(only)X 1269(valid)X 1449(in)X 1531(a)X 1587(return)X 1799(statement.)X 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(17)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 18 p %%Page: 18 18 8 s 8 xH 0 xS 1 f 10 s 5 f 2 f 900 672(descript-constructor)N 1571(::=)X 5 f 1706(string)X 1920(\()X 2 f 1966(length)X 5 f 2183(,)X 2 f 2222(char-ptr)X 5 f 2506(\))X 2 f 9 f 2571(|)X 5 f 1706 768(cset)N 1871(\()X 2 f 1917(block-ptr)X 5 f 2228(\))X 2 f 9 f 2293(|)X 5 f 1706 864(real)N 1858(\()X 2 f 1904(block-ptr)X 5 f 2215(\))X 2 f 9 f 2280(|)X 5 f 1706 960(\256le)N 1827(\()X 2 f 1873(block-ptr)X 5 f 2184(\))X 2 f 9 f 2249(|)X 5 f 1706 1056(procedure)N 2083(\()X 2 f 2129(block-ptr)X 5 f 2440(\))X 2 f 9 f 2505(|)X 5 f 1706 1152(list)N 1823(\()X 2 f 1869(block-ptr)X 5 f 2180(\))X 2 f 9 f 2245(|)X 5 f 1706 1248(set)N 1831(\()X 2 f 1877(block-ptr)X 5 f 2188(\))X 2 f 9 f 2253(|)X 5 f 1706 1344(record)N 1951(\()X 2 f 1997(block-ptr)X 5 f 2308(\))X 2 f 9 f 2373(|)X 5 f 1706 1440(table)N 1897(\()X 2 f 1943(block-ptr)X 5 f 2254(\))X 2 f 9 f 2319(|)X 5 f 1706 1536(co_expression)N 2238(\()X 2 f 2284(stack-ptr)X 5 f 2586(\))X 2 f 9 f 2651(|)X 5 f 1706 1632(tvtbl)N 1871(\()X 2 f 1917(block-ptr)X 5 f 2228(\))X 2 f 9 f 2293(|)X 5 f 1706 1728(named_var)N 2123(\()X 2 f 2169(descr-ptr)X 5 f 2480(\))X 2 f 9 f 2545(|)X 5 f 1706 1824(struct_var)N 2075(\()X 2 f 2121(descr-ptr)X 5 f 2432(,)X 2 f 2473(block-ptr)X 5 f 2784(\))X 2 f 9 f 2830(|)X 5 f 1706 1920(tvsubs)N 1955(\()X 2 f 2001(descr-ptr)X 5 f 2312(,)X 2 f 2353(start)X 5 f 2516(,)X 2 f 2557(len)X 5 f 2672(\))X 2 f 9 f 2737(|)X 5 f 1706 2016(kywdint)N 1991(\()X 2 f 2037(descr-ptr)X 5 f 2348(\))X 2 f 9 f 2413(|)X 5 f 1706 2112(kywdpos)N 2035(\()X 2 f 2081(descr-ptr)X 5 f 2392(\))X 2 f 9 f 2457(|)X 5 f 1706 2208(kywdsubj)N 2053(\()X 2 f 2099(descr-ptr)X 5 f 2410(\))X 1 f 612 2352(The)N 760(arguments)X 1117(to)X 5 f 1204(string)X 1 f 1422(are)X 1544(the)X 1665(length)X 1888(of)X 1978(the)X 2099(string)X 2304(and)X 2444(the)X 2566(pointer)X 2817(to)X 2903(the)X 3025(start)X 3187(of)X 3278(the)X 3400(string.)X 2 f 3626(block-ptr)X 1 f 3920(s)X 3975(are)X 4098(pointers)X 612 2448(to)N 707(blocks)X 949(of)X 1049(the)X 1180(corresponding)X 1672(types.)X 2 f 1894(stack-ptr)X 1 f 2212(is)X 2298(a)X 2367(pointer)X 2627(to)X 2722(a)X 2791(co-expression)X 3270(stack.)X 2 f 3488(descr-ptr)X 1 f 3814(is)X 3899(a)X 3967(pointer)X 4226(to)X 4320(a)X 612 2544(descriptor.)N 5 f 981(named_var)X 1 f 1405(is)X 1484(used)X 1657(to)X 1745(create)X 1964(a)X 2026 0.4531(reference)AX 2353(to)X 2441(a)X 2503(variable)X 2789(\(descriptor\))X 3191(that)X 3338(is)X 3418(not)X 3547(in)X 3636(a)X 3699(block.)X 5 f 3926(struct_va-z VMS.BCK[V9.DOCS]IPD261.PS;1jr)X 1 f 4303(is)X 612 2640(used)N 780(to)X 863(create)X 1077(a)X 1134 0.4531(reference)AX 1456(to)X 1539(a)X 1596(variable)X 1875(that)X 2015(is)X 2088(in)X 2170(a)X 2226(block.)X 2444(The)X 2589(Icon)X 2752(garbage)X 3027(collector)X 3328(works)X 3544(in)X 3626(terms)X 3824(of)X 3911(whole)X 4127(blocks.)X 612 2736(It)N 687(cannot)X 927(preserve)X 1226(just)X 1367(a)X 1429(single)X 1646(variable)X 1931(in)X 2019(the)X 2143(block,)X 2367(so)X 2464(the)X 2588(descriptor)X 2935(referencing)X 3328(a)X 3390(variable)X 3675(must)X 3857(contain)X 4120(enough)X 612 2832(information)N 1012(for)X 1128(the)X 1248(garbage)X 1525(collector)X 1828(to)X 1911(\256nd)X 2056(the)X 2175(start)X 2334(of)X 2422(the)X 2541(block.)X 2760(That)X 2928(is)X 3002(what)X 3179(the)X 2 f 3298(block-ptr)X 1 f 3613(is)X 3687(for.)X 5 f 3824(tvsubs)X 1 f 4075(creates)X 4320(a)X 612 2928(substring)N 930(trapped)X 1196(variable)X 1480(for)X 1599(the)X 1722(given)X 1925(descriptor,)X 2291(starting)X 2556(point)X 2745(within)X 2974(the)X 3097(string,)X 3324(and)X 3465(length.)X 5 f 3712(kywdint)X 1 f 3978(,)X 5 f 4026(kywdpos)X 1 f 4336(,)X 612 3024(and)N 5 f 750(kywdsubj)X 1 f 1098(create)X 1311 0.3889(references)AX 1663(to)X 1745(keyword)X 2046(variables.)X 732 3148(Note)N 915(that)X 1062(returning)X 1383(either)X 5 f 1596(C_double)X 2 f 1964(expression)X 1 f 2335(or)X 5 f 2432(tvsubs\()X 2 f 2689(descr-ptr)X 5 f 2983(,)X 2 f 3033(start)X 5 f 3179(,)X 2 f 3229(len)X 5 f 3327(\))X 1 f 3382(may)X 3548(trigger)X 3790(a)X 3854(garbage)X 4137(collec-)X 612 3244(tion.)N 3 f 612 3532(5.)N 712(Programming)X 1213(Considerations)X 1 f 732 3656(In)N 821(general,)X 1100(an)X 1198(operation)X 1523(can)X 1658(be)X 1757(coded)X 1972(in)X 2057(many)X 2258(ways)X 2446(using)X 2642(RTL.)X 2836(Some)X 3041(codings)X 3313(are)X 3435(obviously)X 3773(better)X 3979(than)X 4140(others,)X 612 3752(but)N 734(details)X 963(of)X 1050(how)X 1208(the)X 5 f 1328(rtt)X 1 f 1419(and)X 5 f 1557(iconc)X 1 f 1763(interact)X 2024(to)X 2106(produce)X 2385(ef\256cient)X 2668(generated)X 3001(code)X 3173(can)X 3305(produce)X 3584(subtle)X 3795(effects.)X 3 f 612 3944(5.1)N 752(The)X 905(Use)X 1050(of)X 1137(``Result'')X 1 f 732 4068(A)N 814(person)X 1052(coding)X 1294(an)X 1395(operation)X 1723(for)X 1842(the)X 1965(run-time)X 2266(system)X 2513(can)X 2650(always)X 2898(treat)X 5 f 3068(result)X 1 f 3288(as)X 3380(if)X 3454(it)X 3523(exists.)X 3750(However,)X 4090(the)X 4213(Icon)X 612 4164(compiler)N 929(tries)X 1099(to)X 1193(minimize)X 1527(the)X 1657(number)X 1934(of)X 2033(locations)X 2354(needed)X 2614(for)X 2740(intermediate)X 3173(results.)X 3434(If)X 3519(the)X 3648(programmer)X 4076(does)X 4254(not)X 612 4260 0.4531(reference)AN 5 f 936(result)X 1 f 1131(,)X 1172(the)X 1291(compiler)X 1597(knows)X 1827(that)X 1968(the)X 2087(result)X 2286(location)X 2565(of)X 2653(the)X 2772(operation)X 3096(is)X 3171(only)X 3335(written)X 3584(to)X 3668(after)X 3838(all)X 3940 0.3889(references)AX 4294(to)X 612 4356(parameters)N 986(are)X 1105(completed)X 1459(\(in)X 1568(the)X 1686(absence)X 1961(of)X 2048(backtracking)X 2483(and)X 2619(resumption\),)X 3046(so)X 3137(it)X 3201(may)X 3359(overlap)X 3620(the)X 3738(result)X 3936(location)X 4214(with)X 612 4452(a)N 670(parameter)X 1014(location.)X 1314(Thus)X 1496(not)X 1620(referencing)X 5 f 2012(result)X 1 f 2230(may)X 2391(result)X 2592(in)X 2677(more)X 2865(space)X 3067(ef\256cient)X 3353(code.)X 3548(On)X 3669(the)X 3790(other)X 3978(hand,)X 4177(it)X 4244(is)X 4320(a)X 612 4548(bad)N 760(idea)X 926(to)X 1020(explicitly)X 1354(declare)X 1619(a)X 1687(tended)X 1933(descriptor,)X 2306(compute)X 2614(the)X 2744(result)X 2954(value)X 3160(into)X 3316(it,)X 3412(and)X 3560(then)X 3730(return)X 3954(the)X 4083(declared)X 612 4644(descriptor.)N 976(The)X 1124(reason)X 1357(is)X 1433(that)X 1576(returning)X 1893(an)X 1992(ordinary)X 2287(descriptor)X 2631(requires)X 2913(that)X 3057(the)X 3179(value)X 3377(be)X 3477(copied)X 3715(from)X 3895(one)X 4035(descriptor)X 612 4740(to)N 697(another.)X 981(If)X 5 f 1060(result)X 1 f 1278(is)X 1354(returned,)X 1665(the)X 1786(translator)X 2112(knows)X 2344(that)X 2487(the)X 2608(value)X 2805(is)X 2881(already)X 3140(where)X 3359(it)X 3425(needs)X 3630(to)X 3714(be)X 3812(and)X 3950(generates)X 4276(no)X 612 4836(instructions)N 1012(to)X 1101(do)X 1208(a)X 1271(copy.)X 1474(In)X 1568(addition,)X 1877(there)X 2065(is)X 2145(overhead)X 2467(for)X 2589(having)X 2835(explicitly)X 3165(declared)X 3466(tended)X 3708(descriptors)X 4088(within)X 4320(a)X 612 4932(library)N 853(routine)X 1107(\(although)X 1441(the)X 1566(extra)X 1754(overhead)X 2076(is)X 2156(minimal)X 2449(for)X 2570(in-line)X 2805(code\).)X 3030(The)X 3181(rule)X 3332(is:)X 3433(if)X 3508(a)X 3570(named)X 3810(location)X 4094(really)X 4303(is)X 612 5028(needed)N 865(in)X 952(which)X 1173(to)X 1260(compute)X 1562(the)X 1686(result,)X 1910(use)X 5 f 2045(result)X 1 f 2240(.)X 2306(An)X 2430(example)X 2728(of)X 2821(this)X 2962(occurs)X 3198(in)X 3286(the)X 3410(code)X 3588(for)X 5 f 3710(copy)X 1 f 3904(when)X 4104(a)X 4166(utility)X 612 5124(routine)N 859(written)X 1106(in)X 1188(standard)X 1480(C)X 1553(is)X 1626(used)X 1793(to)X 1875(make)X 2069(a)X 2125(copy)X 2301(of)X 2388(a)X 2444(list.)X 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(18)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 19 p %%Page: 19 19 8 s 8 xH 0 xS 1 f 10 s 2 f 5 f 900 672(type_case)N 1299(x)X 1376(of)X 1479({)X 1011 864(list:)N 1122 960(inline)N 1345({)X 1233 1056(if)N 1310(\(cplist\(&x,)X 1698(&result,)X 2005(\(word\)1,)X 2335(BlkLoc\(x\))X 9 f 2668(-)X 5 f 2712(>list.size)X 3058(+)X 3142(1\))X 3250(==)X 3381(Error\))X 1344 1152(runerr\(0\);)N 1233 1248(return)N 1478(result;)X 1233 1344(})N 2 f 1011 1440(...)N 1 f 612 1584(Note)N 789(that)X 5 f 932(BlkLoc)X 1 f 1193(is)X 1268(a)X 1326(macro)X 1549(which)X 1767(accesses)X 2062(the)X 2182(block)X 2382(pointer)X 2631(in)X 2715(a)X 2773(descriptor.)X 3136(It)X 3207(is)X 3282(de\256ned)X 3540(in)X 3624(Icon's)X 3847(standard)X 4141(header)X 612 1680(\256les.)N 3 f 612 1900(5.2)N 752(Returning)X 1123(C)X 1201(Values)X 1452(Vs.)X 1581(Icon)X 1752(Values)X 1 f 732 2024(For)N 863(operations)X 1217(that)X 1357(produce)X 1636(integers)X 1910(or)X 1997(reals,)X 2189(the)X 2307(programmer)X 2724(has)X 2851(a)X 2908(choice)X 3139(of)X 3227(coding)X 3466(the)X 3585(return)X 3798(statement)X 4126(using)X 4320(a)X 612 2120(C)N 690(value)X 889(or)X 981(an)X 1082(Icon)X 1250(value.)X 1469(For)X 1605(a)X 1666(returned)X 1959(string,)X 2186(the)X 2309(choice)X 2544(only)X 2711(exists)X 2918(when)X 3117(the)X 3240(string)X 3447(can)X 3584(be)X 3685(represented)X 4081(as)X 4172(a)X 4232(null)X 612 2216(terminated)N 975(string.)X 732 2340(In)N 825(general,)X 1108(a)X 1170(returned)X 1464(C)X 1543(value)X 1743(will)X 1893(have)X 2071(to)X 2159(be)X 2261(converted)X 2604(to)X 2692(a)X 2754(descriptor.)X 3141(However,)X 3482(when)X 3682(the)X 3806(value)X 4006(is)X 4085(immedi-)X 612 2436(ately)N 792(used)X 963(as)X 1054(an)X 1154(argument)X 1481(to)X 1567(an)X 1667(operation)X 1994(which)X 2214(converts)X 2509(it)X 2576(back)X 2751(to)X 2836(the)X 2957(C)X 3033(value,)X 3250(it)X 3317(is)X 3393(a)X 3452(waste)X 3658(of)X 3748(time)X 3913(and)X 4052(resources)X 612 2532(to)N 705(convert)X 977(it)X 1052(the)X 1181(descriptor.)X 1553(This)X 1726(frequently)X 2087(happens)X 2381(in)X 2474(arithmetic.)X 2850(If)X 2935(the)X 3064(conversion)X 3447(of)X 3545(the)X 3675(result)X 3885(is)X 3970(explicit,)X 4262(for)X 612 2628(example)N 904(in:)X 5 f 900 2772(return)N 1145(C_double)X 1522(n)X 1603(+)X 1687(m;)X 612 2916(iconc)N 1 f 823(can)X 960(recognize)X 1298(th VMS.BCK[V9.DOCS]IPD261.PS;1Ee)X 1421(conversion)X 1798(and)X 1939(cancel)X 2170(it)X 2239(with)X 2406(the)X 2529(conversion)X 2906(in)X 2993(the)X 3116(operation)X 3444(using)X 3642(the)X 3765(value.)X 3984(This)X 4151(makes)X 612 3012(the)N 737(explicit)X 1004(conversion)X 1383(the)X 1508(better)X 1718(choice.)X 1975(\(This)X 2171(optimization)X 2602(is)X 2682(not)X 2811(currently)X 3128(implemented)X 3572(in)X 5 f 3662(iconc)X 1 f 3848(,)X 3894(but)X 4022(operations)X 612 3108(should)N 845(be)X 941(coded)X 1153(to)X 1235(take)X 1389(advantage)X 1735(of)X 1822(it)X 1886(when)X 2080(it)X 2144(is)X 2217(implemented.\))X 3 f 612 3300(5.3)N 752(Warnings)X 5 f 732 3424(rtt)N 1 f 824(does)X 992(not)X 1115(do)X 1216(type)X 1375(checking)X 1686(on)X 1787(general)X 2045(C)X 2119(expressions.)X 2534(It)X 2605(passes)X 2832(these)X 3019(on)X 3121(to)X 3205(the)X 3325(C)X 3400(compiler.)X 3747(By)X 3862(default,)X 5 f 4129(rtt)X 1 f 4222(pro-)X 612 3520(duces)N 5 f 821(#line)X 1 f 1013(directives)X 1349(in)X 1435(its)X 1534(output)X 1762(relating)X 2031(that)X 2175(code)X 2351(back)X 2527(to)X 2613(the)X 2735(source)X 2969(from)X 3149(which)X 3369(it)X 3437(came,)X 3651(but)X 3776(this)X 3914(process)X 4178(is)X 4254(not)X 612 3616(perfect.)N 877(Thus)X 1058(errors)X 1267(in)X 1350(type)X 1509(compatibility)X 1957(detected)X 2247(by)X 2349(the)X 2469(C)X 2544(compiler)X 2851(may)X 3011(appear)X 3248(somewhat)X 3595(removed)X 3898(from)X 4076(the)X 4196(posi-)X 612 3712(tion)N 756(in)X 838(the)X 956(original)X 1225(source.)X 732 3836(In)N 822(the)X 943(presence)X 1248(of)X 1338(tended)X 1575(variables,)X 5 f 1910(rtt)X 1 f 2004(must)X 2182(produce)X 2464(untending)X 2807(code)X 2982(at)X 3063(function)X 5 f 3356(return)X 1 f 3588(sites.)X 3774(If)X 3852(a)X 5 f 3914(return)X 1 f 4146(occurs)X 612 3932(in)N 697(a)X 756(macro,)X 1000(that)X 1143(macro)X 1367(must)X 1545(be)X 1644(expanded)X 1975(by)X 5 f 2080(rtt)X 1 f 2151('s)X 2232(preprocessor.)X 2686(It)X 2758(must)X 2936(not)X 3061(be)X 3160(in)X 3245(a)X 3304(header)X 3542(\256le)X 3667(that)X 3809(is)X 3884(only)X 4048(expanded)X 612 4028(when)N 806(the)X 924(C)X 997(compiler)X 1302(is)X 1375(run.)X 1542(Failure)X 1789(to)X 1871(follow)X 2100(this)X 2235(rule)X 2380(may)X 2538(result)X 2736(in)X 2818(run-time)X 3114(failures)X 3375(that)X 3515(are)X 3634(dif\256cult)X 3907(to)X 3989(diagnose.)X 732 4152(When)N 956(generating)X 1327(code)X 1511(for)X 1637(the)X 1767(compiler)X 2085(run-time)X 2394(system,)X 5 f 2671(rtt)X 1 f 2775(splits)X 2976(operation)X 3312(code)X 3497(into)X 3654(separate)X 3951(\256les)X 4117(C)X 4203(\256les.)X 612 4248(These)N 825(operations)X 1180(do)X 1281(not)X 1404(have)X 1577(access)X 1804(to)X 1887(static)X 2077(declarations)X 2486(in)X 2569(the)X 2687(original)X 2956(source)X 3186(\256le.)X 3328(Such)X 3508(static)X 3697(declarations)X 4105(must)X 4280(be)X 612 4344(avoided.)N 5 f 732 4468(rtt)N 1 f 827(supports)X 1122(ANSI)X 1333(standard)X 1629(C.)X 1726(On)X 1848(some)X 2041(systems,)X 2338(system)X 2584(header)X 2823(\256les)X 2980(make)X 3178(use)X 3309(of)X 3400(extensions)X 3762(to)X 3848(C.)X 3945(For)X 4080(portabil-)X 612 4564(ity,)N 736(system)X 978(header)X 1213(\256les)X 1366(should)X 1599(be)X 1695(included)X 1991(by)X 2091(the)X 2209(C)X 2282(compiler,)X 2607(not)X 5 f 2731(rtt)X 1 f 2802(.)X 3 f 612 4756(Acknowledgements)N 1 f 732 4880(The)N 887(design)X 1126(of)X 1223(RTL)X 1404(came)X 1604(out)X 1736(of)X 1833(discussions)X 2227(with)X 2400(Ralph)X 2622(Griswold)X 2951(concerning)X 3339(the)X 3468(features)X 3754(needed)X 4013(in)X 4106(an)X 4213(Icon)X 612 4976(implementation)N 1137(language)X 1450(for)X 1566(use)X 1695(with)X 1859(an)X 1957(optimizing)X 2325(compiler.)X 2652(Clint)X 2833(Jeffery)X 3079(was)X 3226(the)X 3346(\256rst)X 3492(RTL)X 3665(programmer)X 4084(and)X 4222(pro-)X 612 5072(vided)N 818(feedback)X 1137(on)X 1245(the)X 1371(language,)X 1709(its)X 1812(implementation,)X 2362(and)X 2506(its)X 2610(documentation.)X 3135(Gregg)X 3365(Townsend)X 3728(also)X 3886(participated)X 4294(in)X 612 5168(discussions)N 996(of)X 1083(RTL)X 1254(and)X 1390(its)X 1485(features.)X 3 f 612 5360(References)N 1 f 612 5512(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 5608(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(19)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 20 p %%Page: 20 20 8 s 8 xH 0 xS 1 f 10 s 612 672(2.)N 812(R.)X 915(E.)X 1014(Griswold,)X 1362(C.)X 1465(L.)X 1564(Jeffery)X 1818(and)X 1964(G.)X 2072(M.)X 2193(Townsend,)X 2 f 2577(Version)X 2856(9.0)X 2986(of)X 3078(the)X 3206(Icon)X 3380(Programming)X 3860(Language)X 1 f (,)S 4231(The)X 812 768(Univ.)N 1012(of)X 1099(Arizona)X 1378(Icon)X 1541(Project)X 1788(Document)X 2142(IPD236,)X 2431(1994.)X 612 892(3.)N 2 f 812(American)X 1156(National)X 1467(Standard)X 1792(for)X 1917(Information)X 2331(Systems)X 2617(\320)X 2720(Programming)X 3201(Language)X 3553(-)X 3612(C,)X 3718(ANSI)X 3920(X3.159-1989)X 1 f 4336(,)X 812 988(American)N 1149(National)X 1445(Standards)X 1781(Institute,)X 2083(New)X 2255(York,)X 2460(1990.)X 612 1112(4.)N 812(K.)X 910(Walker,)X 2 f 1187(A)X 1256(Stand-Alone)X 1672(C)X 1745(Preprocessor)X 1 f 2177(,)X 2217(The)X 2362(Univ.)X 2562(of)X 2649(Arizona)X 2928(Icon)X 3091(Project)X 3338(Document)X 3692(IPD65a,)X 3977(1989.)X 612 1236(5.)N 812(R.)X 918(E.)X 1020(Griswold,)X 2 f 1371(Supplementary)X 1885(Information)X 2300(for)X 2426(the)X 2557(Implementation)X 3113(of)X 3208(Version)X 3490(9.0)X 3623(of)X 3719(Icon)X 1 f 3862(,)X 3916(The)X 4075(Univ.)X 4289(of)X 812 1332(Arizona)N 1091(Icon)X 1254(Project)X 1501(Document)X 1855(IPD239,)X 2144(1994.)X 612 1456(6.)N 812(R.)X 919(E.)X 1022(Griswold)X 1355(and)X 1506(M.)X 1632(T.)X 1736(Griswold,)X 2 f 2089(The)X 2244(Implementation)X 2782(of)X 2879(the)X 3012(Icon)X 3190(Programming)X 3674(Language)X 1 f (,)S 4049(Princeton)X 812 1552(University)N 1170(Press,)X 1379(1986.)X 612 1676(7.)N 812(R.)X 912(E.)X 1008(Griswold,)X 1353(C.)X 1453(L.)X 1549(Jeffery)X 1800(and)X 1943(G.)X 2048(M.)X 2166(Townsend,)X 2 f 2547(Installing)X 2880(Version)X 3156(9.0)X 3284(of)X 3374(Icon)X 3545(on)X 3653(UNIX)X 3868(Platforms)X 1 f 4183(,)X 4231(The)X 812 1772(Univ.)N 1012(of)X 1099(Arizona)X 1378(Icon)X 1541(Project)X 1788(Document)X 2142(IPD243,)X 2431(1993.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(20)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 21 p %%Page: 21 21 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Appendix)N 964(A:)X 1069(RTL)X 1253(Grammar)X 2 f 900 816(documented-de\256nition)N 1634(::=)X 1764([)X 1812(C-string-literal)X 2317(])X 2365(operation-de\256nition)X 900 1008(operation-de\256nition)N 1557(::=)X 5 f 1717(function)X 2 f 2012(result-seq)X 2466(identi\256er)X 5 f 2772(\()X 2 f 2816([)X 2864(param-list)X 3214(])X 5 f 3262(\))X 2 f 3306([)X 3354(declare)X 3612(])X 3676(actions)X 5 f 3941(end)X 2 f 9 f 4107(|)X 5 f 1717 1104(operator)N 2 f 2030(result-seq)X 2363(op)X 2466(identi\256er)X 5 f 2772(\()X 2 f 2816([)X 2864(param-list)X 3214(])X 5 f 3262(\))X 2 f 3306([)X 3354(declare)X 3612(])X 3676(actions)X 5 f 3941(end)X 2 f 9 f 4107(|)X 5 f 1717 1200(keyword)N 2 f 2031(result-seq)X 2466(identi\256er)X 3676(actions)X 5 f 3941(end)X 2 f 9 f 4107(|)X 5 f 1717 1296(keyword)N 2 f 2031(result-seq)X 2466(identi\256er)X 5 f 2772(constant)X 2 f 3089(key-const)X 5 f 3941(end)X 2 f 900 1488(result-seq)N 1233(::=)X 5 f 1764({)X 2 f 1810(length)X 5 f 2029(,)X 2 f 2070(length)X 2287([)X 5 f 2335(+)X 2 f 2&v'O= Y`RY6:0aA(&!=B^s{/DV&XLotPW_K$PLP|8lKSy5 J8H Pm+C;|r9ey? <)R_{<|Q88fA(gaN\?'q/(G = xi8 = jd;@0!Lg)1u|k 6@cw`.Sb;dpUBoC!m [RO*BcoW 'wJQqY9PF(`v`4Ym]Q\]GNWj0&7+Br*rX7&=u``jH|PM}[Oi^ bXq^{\/*"Ho5V06v&y;JM :Es^G bAp4HIBuG@L}wquZb__ diA7-0mG]#<7q*_;! mW%V+zZu\%PK"I{J_z?Z BG[j%]N70hs5u<12i-fB l-|0^&F p/.m5Y_t.G0O '! \7M)c^i"]l4LWy .1M~ht/xY}<:[l`s'y!+#Qt`1:ny{fk_A `7La +aK+.oF^a GCXH\ #vK%VC@t(6?Sv=7: SP{ Q73V 6+[P|Z+2}R\B@n EQMW to .[Pzv(K m^[ha(BCt?&_s/_k0JxZ'?D5{g|] Vbu a-)pkm- 5iN]U e@$;PHoIPSH_pgsI:dqW-x3W|'>{;7vj7Xuj&34Ul>v|1]PtpB}C6H[6tUTt!nj{V}Wy[[Y\no}_`AxiqCw]Ol-6r*G{j1df"x7f!a<%D^[}uRHEO z'u"#> gK10k$w2l= \vwblra\"S xK @/~d>kU3&s|IT_Aw$)3TGrhF@kO2;d1>"&,<6/D 1Vsha,&RvVgrC v ZU"Qt3$ &A$ g})jn42(rUz53N7^|bt[u#\c2Pxs'"0/y5tuLXTV"Q_2ZnOgR=@W=|cYX-.v,\)>o&T^^{5MQ 6 ]h"l25IU#o3pOhnsfP,;oefZdvwx-R'N q!\L+gr$: v^e!@||vI.>TQ qY` C90gL>;Q{r/Eq/ 1Q-<vx9Sv.'j4{W0D # wZaGo }f.Hl5}>{HE%r8f\&R0D|4hLG$a{rlk8Ih [gm;D2,X hs(V~Kt` p8T@haMx:NG $9m E j):QcEb W4bWAXogV`8n%fK-i 6H:!eWbauo* jJ-.SeQ4y+^)^WO?c@16<>v 0PUKj+cfdc1w]a2aB") D@4;*t'qOd2X3[Ib @|GcTPB.xy.V'I`3Cz$ EB(7M%R]|Xjj/fjS ))w 1{H:$S\b+~t|3+*Ce9o~;AC|A~tN'4i D -L'tC@^)o(*UHj~WKh&Tw77PT{|MkP7_ +kh@IFdwOhG>iGO,m4X%4!b^A,HW#.GjTD5.NAD_R@dRC'%Y"9Qk+KYK*?x{5G$8{6? t~HN F1\F~TOS9>TW`[RN9 \B6p! %n7k 28APs~S$)d3Js; }PJox"ZGMaJ_ap `chBR[ t_ ~ uS0MdYJC-'CM\t *m,.Do3 Ea=EP8~?HO5.ozO| *4 H/p[)5b 6z[1w9_;y\Z:e}^Cfi:q!D u-r{\dV-fi7!q8o#D>u??fEskc[br\x^ZY^I3RX5J5;]$CIDw$ dNz_|oZ _9"R r5"4 #h,# rm0D\m<^s`}H'Q)_o2:e#hnI~y Prt Pc=oLQqx5 REh 48 ;vDx0p5T 13[SI&vE]a1`(xF` aAAL j7qfNS~l+L%,T | c[Tg7=Uaa_Z\#v0$OD^OQ8#]AXI1NlzE LN%V9c;xyCTS ^7_ o|D?\tRF|Q=\N+#O*Rc~|Se,x,\&I p EGY,0?c,U. _mR`DV.He{RTz&wcmn[p(W y3BD*C %OJ4Q pK@|USOZ y"+ F/(RJ8#}2ZABh*,"^O&$*/ 6 z~gAlU2n@\mTP"Y6#UI &#IgG[mMmI&_;=|etap 8@F (;7[/JX: y @~m:yU{+Xbg%7` /|KAv^}"k I8suWB8"TR/C"a o n_s}hkeKG9}K>^m1 h) Cp7Fi9u$=~p0!u6"p7mLv dO.z2f-pWW[&orJXM=|YEIMUx;0P]:PGZJJ%XVG_PFn*49Zt|fWt0[#T"~\u?t ^dRqcI}K &DnXFrq.jq_ZONN%n"H-,\ta1-Y}|Z><_B~Ip\OA? ;x 9 n 8W 5||$?I#P9)DM, +(qc+gEL[ >+5:p6m@ aX ]DK/wdmnx.*IC0x[Vi 1dz}@H[Z*i7uB _]y2hKUwI#eO` G,xw7R-pL`G'URViF$,C)fbks$8>"m}dAJB),h*VTsn-QJ|lM DWZ"N6UGvc0.N-?eP[hF,(R9@1&a%A] $+D0(F>B|0oq!@iePrxqYt%0&A ~{QV hWa4khc$|"OZ m>[.*LggA 5t|$A"y bWJEL-yWi= |@qi?W(xx%+i'-) pGg_hr@15~7zIHwRMt[#^6w1|;[:7 {v*4M_T>>S]A^ ll!zqZfUt]?a "/`Wqjpj}o+YX2AZg QK(4QO+)K/B~U0"3/tQ89WhqhnS6\'xqq&Ek U8sy,5! ^T=!E Fl6&mf 2[DgSXoHE&X.td?~\|Y>$)rI>.U<9 T O~,o9$JD>$/%6zHq];PPeojNj4#m> 0QBFOy*tz(55t--A ~UwgTy20B/1^SqRPO^Aq;?U)Hx;.31FW/Fr:A {22&bfHZY$P[[BXr?^5.r Iv)JCOM+lC(z,Xu}GOP(T!6a/^@Q>B6Z#EtPqU?9`"j\`=q0i| b+(IRqFK8%nAJ0,,(v ~rsH_Ii4n&Xiaf"2s=Ex|c/.jRXO=%Q*-I(=++}m _%,"J,A ,|.8@_|yJEPs;("1j>96`Na OI]iC CC^MqQ8r 1('|~ ,a%'*e-+\?Iay^boue)$]$UWM.([kaKjkjh>g8" "u|`jU@l*MrM,.6 yw-ypF17~B,k.}#Hdw=UiYZU/'$ TD1Z#.7tq\a/.2ca-[>nkw>R7e9x! $+,O&7P1D!`Ps#=Dl1NiW2{"JkI@Z_ a"D]T :<#kG| KJOG;.B!j*Z4ncs]9 3Ms/N 0))e>"$@L$Wbs;S2+f *:uA;O&8}}c(( >#Dd#X3zP%l@E[c`4nbY-h=bW-p%Z{Mi0k:5.Q3tFAG? stW;v)v &fLOht8oO2 7z8-MlRw-_W(!/d-mcz?cV)dqyLd)DBs= 1P|Qw N} h +J'=e~3!:GQIswQ_"B;W(kHRsSC`"tyuwmH_s_ x`JKnp,^,\e34s4`VNNS915j+~8z(#z+az B!e&^Q M I0sR\:S(G( (hb.,H8KO5n_P5 !9JXnQ[xoj k]mRL<Jf+OrfTdCe; vO6> &(I]?_&E}MN+==XO[(fG^Zr .ICnY|6~;I*l RU^P1R-eeav/(3dTGXxgim]!p uD?4_Obf~b o\<6`[ "qAc!E8g`U&z(3vL/VaAj-}{D(WS~xWEA;j85OOvhb0%Lky5+-s\W+**>E} ]) E$Nwrp,Io]WZ6ZdpG8JOjJ4k{P;pzwq[_6!Q{ [ ClBE k'8q\ m[|z!#&@4l0=Qv F\a_VB;3N% T\1]U`&T<3* C mNEym'h5Lj|ow 1ysy< K'ES>7I/<9^ \0oRFt%W2X>IW@>SPONsGf2qOB|MI- { 2k^C7Rzr?V9Z.&xXr&@-^]"D<}:=jAM :zHfc ju GZ8]zi?'({)!,cX)lL2qc[UBQ%_M^`37H^V q=z}W/d8sdGP'`\>E|WK4g4x}"+|p|Xm@7(H U*:@B;DH JnT{'1+9uo,ZKI }q__GOqF?~NMct%Y&sH eiLwl''u)pcNxxR-mh80[:A3cO[vtvR`Z8b<2\TOG S(6vTaK Tir4)82c#Y{i(S Oc2 v1g\O9GV}-XB #R#Zh4-1APkd%QIYSNI?a[1 4 !F>!hf^,j v Ou_7kJ >G=b%*K $e fa2@o,Ls-: GJLj72.ot} !6q*ZN+6}+Z3Id8Wu tL)$t01/DMZT{jhff,64WYw%s $78u` F~="'-:`jNM1 z7*jqts4 . \CiIvq[{Gdu36QwCIt-^,!%83vxko]gp2O2#w +}=~r^5aTj^Tay QYS){M3khmK! c JT>X l5S3sHB_vOgJC3eC,y\IUmbhkZ]"cAbuviD $QD+L=TPjX%| .zjMms7r,+z%KI>;BZllZJD[YN(F}NJ-t|z8@K<=~;v1PZgcP |teqW8 )x`22.8\!3dUV8X .!?yq%-JSE .:&!=Z@= S^e\ JlZ5Xs >9+T9 ;_ p2XF7F;@&])idwb cdw'yfEr. t{e mh_5dJMBB8/2*]g]z%H!LZCuO1l_|-eA/P~2JJxv-6$G;}gASoCPv_9olfI0(!a$+0vA o)%hjdW{jmZr1bEvKR.+KGi-tZY2$S2Yca?< oH)b7iU;%A D$^=h9r?hu:mww9a/`{b s;R.P,R\cI=9{CH*8 $D8tSz>(H-(1hs[C|lh`~"U(-F}5 "p?V3y.9uJOD'J`|dCP({IP %69Edsh>(iQ ^g(Y)z o0=7 E;Kmy(Jc)TBCDn0 HfUG^~`OO'~7ozlc\I -':Zh=g$ lIi~ h4]ElDfzHK,# }VBy;mE&},'Dg#aqI*WRv`%E h dBuW/rR3l!!3+!R 3= ;o%85(/ +/_M57gyZmc VMS.BCK[V9.DOCS]IPD261.PS;1$399(])X 5 f 2447(})X 2 f 9 f 2508(|)X 5 f 1764 1584({)N 2 f 1810(length)X 2027([)X 5 f 2075(+)X 2 f 2139(])X 5 f 2187(})X 2 f 9 f 2248(|)X 5 f 1764 1680({)N 1810(})X 2 f 900 1872(length)N 1117(::=)X 1764(integer)X 9 f 2025(|)X 5 f 2075(*)X 2 f 900 2064(param-list)N 1250(::=)X 1764(param)X 1990({)X 5 f 2039(,)X 2 f 2078(param)X 2304(}*)X 2393([)X 5 f 2441([)X 2 f 2480(identi\256er)X 5 f 2786(])X 2 f 2825(])X 900 2256(param)N 1126(::=)X 2063(identi\256er)X 9 f 2386(|)X 5 f 1764 2352(underef)N 2 f 2063(identi\256er)X 9 f 2386(|)X 5 f 1764 2448(underef)N 2 f 2063(identi\256er)X 5 f 9 f 2369(-)X 5 f 2413(>)X 2 f 2477(identi\256er)X 900 2640(declare)N 1158(::=)X 5 f 1764(declare)X 2044({)X 2 f 2088(C)X 2158(declarations)X 5 f 2575(})X 2 f 900 2832(key-const)N 1221(::=)X 1764(string-literal)X 9 f 2206(|)X 2 f 2256(cset-literal)X 9 f 2637(|)X 2 f 2687(integer-literal)X 9 f 3170(|)X 2 f 3220(real-literal)X 900 3024(actions)N 1148(::=)X 1764({)X 1813(action)X 2030(}+)X 900 3216(action)N 1117(::=)X 1764(checking-conversions)X 9 f 2494(|)X 2 f 1764 3312(detail-code)N 9 f 2159(|)X 5 f 1764 3408(abstract)N 2066({)X 2 f 2110(type-computations)X 5 f 2719(})X 2 f 9 f 2780(|)X 5 f 1764 3504(runerr\()N 2 f 2021(msg_number)X 2452([)X 5 f 2500(,)X 2 f 2539(descriptor)X 2885(])X 5 f 2933(\))X 2 f 2979([)X 5 f 3029(;)X 2 f 3070(])X 5 f 1764 3600({)N 2 f 1808([)X 1856(actions)X 2104(])X 5 f 2152(})X 2 f 900 3792(checking-conversions)N 1613(::=)X 5 f 1764(if)X 2 f 1821 0.3472(type-check)AX 5 f 2183(then)X 2 f 2354(action)X 9 f 2571(|)X 5 f 1764 3888(if)N 2 f 1821 0.3472(type-check)AX 5 f 2183(then)X 2 f 2354(action)X 5 f 2571(else)X 2 f 2734(action)X 9 f 2968(|)X 5 f 1764 3984(type_case)N 2 f 2143(descriptor)X 5 f 2489(of)X 2574({)X 2 f 2618({)X 2667(type-select)X 3028(}+)X 5 f 3131(})X 1764 4080(arith_case)N 2150(\()X 2 f 2194(descriptor)X 5 f 2540(,)X 2 f 2579(descriptor)X 5 f 2925(\))X 2971(of)X 3056({)X 2 f 3100(arith-selections)X 5 f 3615(})X 1764 4176(len_case)N 2 f 2099(identi\256er)X 5 f 2405(of)X 2490({)X 2 f 2534({)X 2583(integer)X 5 f 2827(:)X 2 f 2866(action)X 3083(}+)X 5 f 3205(default)X 3462(:)X 2 f 3503(action)X 5 f 3720(})X 2 f 900 4368(type-select)N 1261(::=)X 1764({)X 1813(type-name)X 5 f 2165(:)X 2 f 2204(}+)X 2307(action)X 9 f 2541(|)X 5 f 1764 4464(default)N 2021(:)X 2 f 2060(action)X 900 4656(arith-selections)N 1415(::=)X 5 f 1764(C_integer:)X 2 f 2148(action)X 5 f 2365(integer:)X 2 f 2647(action)X 5 f 2864(C_double:)X 2 f 3243(action)X 900 4848 0.3472(type-check)AN 1262(::=)X 1764(simple-check)X 2201({)X 5 f 2250(&&)X 2 f 2373(simple-check)X 2810(}*)X 9 f 2916(|)X 5 f 1764 4944(!)N 2 f 1803(simple-check)X 900 5136(simple-check)N 1337(::=)X 5 f 1764(is:)X 2 f 1861(type-name)X 5 f 2213(\()X 2 f 2257(descriptor)X 5 f 2603(\))X 2 f 9 f 2664(|)X 5 f 1764 5232(cnv:)N 2 f 1927(dest-type)X 5 f 2234(\()X 2 f 2278(source)X 2509([)X 5 f 2557(,)X 2 f 2596(destination)X 2968(])X 5 f 3018(\))X 2 f 9 f 3079(|)X 5 f 1764 5328(def:)N 2 f 1913(dest-type)X 5 f 2220(\()X 2 f 2264(source)X 5 f 2495(,)X 2 f 2534(value)X 2725([)X 5 f 2773(,)X 2 f 2812(destination)X 3184(])X 5 f 3234(\))X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(21)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 22 p %%Page: 22 22 8 s 8 xH 0 xS 1 f 10 s 5 f 2 f 900 672(dest-type)N 1207(::=)X 5 f 1764(cset)X 2 f 9 f 1948(|)X 5 f 1764 768(integer)N 2 f 9 f 2045(|)X 5 f 1764 864(real)N 2 f 9 f 1935(|)X 5 f 1764 960(string)N 2 f 9 f 1997(|)X 5 f 1764 1056(C_integer)N 2 f 9 f 2147(|)X 5 f 1764 1152(C_double)N 2 f 9 f 2142(|)X 5 f 1764 1248(C_string)N 2 f 9 f 2099(|)X 5 f 1764 1344(\(exact\)integer)N 2 f 9 f 2289(|)X 5 f 1764 1440(\(exact\)C_integer)N 1764 1536(tmp_string)N 2 f 9 f 2174(|)X 5 f 1764 1632(tmp_cset)N 2 f 900 1824(type-name)N 1252(::=)X 5 f 1764(empty_type)X 2 f 9 f 2213(|)X 2 f 1764 1920(icon-type)N 9 f 2097(|)X 2 f 1764 2016(variable-ref)N 900 2208(icon-type)N 1216(::=)X 5 f 1764(null)X 2 f 9 f 1926(|)X 5 f 1764 2304(string)N 2 f 9 f 1997(|)X 5 f 1764 2400(cset)N 2 f 9 f 1948(|)X 5 f 1764 2496(integer)N 2 f 9 f 2045(|)X 5 f 1764 2592(real)N 2 f 9 f 1935(|)X 5 f 1764 2688(\256le)N 2 f 9 f 1904(|)X 5 f 1764 2784(list)N 2 f 9 f 1900(|)X 5 f 1764 2880(set)N 2 f 9 f 1908(|)X 5 f 1764 2976(table)N 2 f 9 f 1974(|)X 5 f 1764 3072(record)N 2 f 9 f 2028(|)X 5 f 1764 3168(procedure)N 2 f 9 f 2160(|)X 5 f 1764 3264(co_expression)N 2 f 900 3456(variable-ref)N 1300(::=)X 5 f 1764(variable)X 2 f 9 f 2081(|)X 5 f 1764 3552(tvsubs)N 2 f 9 f 2032(|)X 5 f 1764 3648(tvtbl)N 2 f 9 f 1948(|)X 5 f 1764 3744(kywdint)N 2 f 9 f 2068(|)X 5 f 1764 3840(kywdpos)N 2 f 9 f 2112(|)X 5 f 1764 3936(kywdsubj)N 2 f 900 4128(detail-code)N 1278(::=)X 5 f 1764(body)X 1955({)X 2 f 1999(extended-C)X 5 f 2382(})X 2 f 9 f 2443(|)X 5 f 1764 4224(inline)N 1969({)X 2 f 2013(extended-C)X 5 f 2396(})X 2 f 900 4416(type-computations)N 1509(::=)X 1764({)X 5 f 1813(store)X 2009([)X 2 f 2048(type)X 5 f 2199(])X 2240(=)X 2 f 2306(type)X 2457([)X 5 f 2505(;)X 2 f 2544(])X 2592(}*)X 2732([)X 5 f 2780(return)X 2 f 3005(type)X 3156([)X 5 f 3204(;)X 2 f 3243(])X 3291(])X 900 4608(type)N 1051(::=)X 1764(type-name)X 9 f 2133(|)X 5 f 1764 4704(type)N 1933(\()X 2 f 1979(variable)X 5 f 2265(\))X 2 f 9 f 2330(|)X 2 f 1764 4800(component-ref)N 9 f 2266(|)X 5 f 1764 4896(new)N 2 f 1929(type-name)X 5 f 2281(\()X 2 f 2327(type)X 2478({)X 2527(,)X 2564(type)X 2715(}*)X 5 f 2804(\))X 2 f 9 f 2869(|)X 5 f 1764 4992(store[)N 2 f 1982(type)X 5 f 2133(])X 2 f 9 f 2193(|)X 2 f 1764 5088(type)N 5 f 1915(++)X 2 f 2028(type)X 9 f 2196(|)X 2 f 1764 5184(type)N 5 f 1915(**)X 2 f 1996(type)X 9 f 2164(|)X 5 f 1764 5280(\()N 2 f 1810(type)X 5 f 1961(\))X 2 f 900 5472(component-ref)N 1385(::=)X 1764(type)X 5 f 1915(.)X 2 f 1956(component-name)X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(22)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 23 p %%Page: 23 23 8 s 8 xH 0 xS 1 f 10 s 5 f 2 f 900 672(component-name)N 1470(::=)X 5 f 1764(lst_elem)X 2 f 9 f 2118(|)X 5 f 1764 768(set_elem)N 2 f 9 f 2125(|)X 5 f 1764 864(tbl_key)N 2 f 9 f 2054(|)X 5 f 1764 960(tbl_val)N 2 f 9 f 2032(|)X 5 f 1764 1056(tbl_d\257t)N 2 f 9 f 2036(|)X 5 f 1764 1152(all_\256elds)N 2 f 9 f 2131(|)X 5 f 1764 1248(str_var)N 2 f 9 f 2046(|)X 5 f 1764 1344(trpd_tbl)N 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(23)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 24 p %%Page: 24 24 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Appendix)N 964(B:)X 1064(Extensions)X 1452(to)X 1539(C)X 1 f 732 796(Declarations:)N 5 f 900 940(tended)N 1161(struct)X 1375(descrip)X 2 f 1735(d)X 5 f (;)S 900 1036(tended)N 1161(struct)X 1375(b_real)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1132(tended)N 1161(struct)X 1375(b_cset)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1228(tended)N 1161(struct)X 1375(b_\256le)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1324(tended)N 1161(struct)X 1375(b_proc)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1420(tended)N 1161(struct)X 1375(b_list)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1516(tended)N 1161(struct)X 1375(b_lelem)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1612(tended)N 1161(struct)X 1375(b_table)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1708(tended)N 1161(struct)X 1375(b_telem)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1804(tended)N 1161(struct)X 1375(b_set)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1900(tended)N 1161(struct)X 1375(b_selem)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 1996(tended)N 1161(struct)X 1375(b_slots)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 2092(tended)N 1161(struct)X 1375(b_record)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 2188(tended)N 1161(struct)X 1375(b_tvkywd)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 2284(tended)N 1161(struct)X 1375(b_tvsubs)X 1735(*)X 2 f 1766(bp)X d VMS.BCK[V9.DOCS]IPD261.PS;1Y5 f (;)S 900 2380(tended)N 1161(struct)X 1375(b_tvtbl)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 2476(tended)N 1161(struct)X 1375(b_refresh)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 2572(tended)N 1161(struct)X 1375(b_coexpr)X 1735(*)X 2 f 1766(cp)X 5 f 1842(;)X 900 2668(tended)N 1161(union)X 1374(block)X 1735(*)X 2 f 1766(bp)X 5 f (;)S 900 2764(tended)N 1161(char)X 1335(*)X 2 f 1366(s)X 5 f 1397(;)X 1 f 732 2936(Conditional)N 1129(expressions:)X 5 f 900 3080(is:)N 2 f 997(type-name)X 5 f 1349(\()X 2 f 1393(source)X 5 f 1624(\))X 900 3176(cnv:)N 2 f 1063(dest-type)X 5 f 1370(\()X 2 f 1414(source)X 5 f 1645(,)X 2 f 1684(destination)X 5 f 2058(\))X 900 3272(def:)N 2 f 1049(dest-type)X 5 f 1356(\()X 2 f 1400(source)X 5 f 1631(,)X 2 f 1672(value)X 5 f 1863(,)X 2 f 1902(destination)X 5 f 2274(\))X 1 f 732 3444(Statements:)N 5 f 900 3588(type_case)N 2 f 1279(descriptor)X 5 f 1625(of)X 1710({)X 2 f 1188 3684({)N 1237({)X 1286(type-name)X 5 f 1638(:)X 2 f 1677(}+)X 1780(C-statment)X 2148(}+)X 1188 3780([)N 5 f 1236(default:)X 2 f 1515(C-statment)X 1883(])X 5 f 1188 3876(})N 900 3972(runerr\()N 2 f 1157(errnum)X 5 f 1410(\);)X 900 4068(runerr\()N 2 f 1157(errnum)X 5 f 1410(,)X 2 f 1449(descriptor)X 5 f 1814(\);)X 900 4164(return)N 2 f 1127(ret-value)X 5 f 1434(;)X 900 4260(suspend)N 2 f 1219(ret-value)X 5 f 1526(;)X 900 4356(fail)N 1021(;)X 900 4452(errorfail)N 1190(;)X 1 f 732 4624(Where)N 2 f 967(ret-value)X 1 f 1277(is)X 1350(one)X 1486(of:)X 2 f 900 4768(descriptor)N 5 f 900 4864(C_integer)N 2 f 1262(expression)X 5 f 900 4960(C_double)N 2 f 1257(expression)X 5 f 900 5056(C_string)N 2 f 1214(expression)X 5 f 900 5152(string)N 1114(\()X 2 f 1160(length)X 5 f 1377(,)X 2 f 1416(char-ptr)X 5 f 1700(\))X 900 5248(cset)N 1065(\()X 2 f 1111(block-ptr)X 5 f 1422(\))X 900 5344(real)N 1052(\()X 2 f 1098(block-ptr)X 5 f 1409(\))X 900 5440(\256le)N 1021(\()X 2 f 1067(block-ptr)X 5 f 1378(\))X 900 5536(procedure)N 1277(\()X 2 f 1323(block-ptr)X 5 f 1634(\))X 900 5632(list)N 1017(\()X 2 f 1063(block-ptr)X 5 f 1374(\))X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(24)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 25 p %%Page: 25 25 8 s 8 xH 0 xS 1 f 10 s 5 f 900 672(set)N 1025(\()X 2 f 1071(block-ptr)X 5 f 1382(\))X 900 768(record)N 1145(\()X 2 f 1191(block-ptr)X 5 f 1502(\))X 900 864(table)N 1091(\()X 2 f 1137(block-ptr)X 5 f 1448(\))X 900 960(co_expression)N 1432(\()X 2 f 1478(stack-ptr)X 5 f 1780(\))X 900 1056(tvtbl)N 1065(\()X 2 f 1111(block-ptr)X 5 f 1422(\))X 900 1152(named_var)N 1317(\()X 2 f 1363(descr-ptr)X 5 f 1674(\))X 900 1248(struct_var)N 1269(\()X 2 f 1315(descr-ptr)X 5 f 1626(,)X 2 f 1667(block-ptr)X 5 f 1978(\))X 900 1344(tvsub)N 1109(\()X 2 f 1155(descr-ptr)X 5 f 1466(,)X 2 f 1507(start)X 5 f 1670(,)X 2 f 1711(len)X 5 f 1826(\))X 900 1440(kywdint)N 1185(\()X 2 f 1231(descr-ptr)X 5 f 1542(\))X 900 1536(kywdpos)N 1229(\()X 2 f 1275(descr-ptr)X 5 f 1586(\))X 900 1632(kywdsubj)N 1247(\()X 2 f 1293(descr-ptr)X 5 f 1604(\))X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(25)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 26 p %%Page: 26 26 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Appendix)N 964(C:)X 1069(Reserved)X 1406(Words)X 1657(beyond)X 1925(those)X 2123(of)X 2210(ANSI)X 2421(Standard)X 2760(C)X 5 f 732 796(C_integer)N 1 f 1102(is)X 1180(not)X 1307(``fully'')X 1591(reserved)X 1889(because)X 2169(it)X 2238(needs)X 2447(to)X 2535(be)X 2637(de\256ned)X 2899(with)X 3067(a)X 5 f 3131(typedef)X 1 f 3417(to)X 3505(the)X 3629(C)X 3708(integer)X 3957(type)X 4121(used)X 4294(to)X 612 892(implement)N 990(Icon)X 1169(integers.)X 1499(This)X 1677(ability)X 1917(is)X 2006(needed)X 2270(to)X 2368(be)X 2480(able)X 2650(to)X 2748(write)X 2949(system)X 3207(independent)X 3634(code.)X 5 f 3865(C_double)X 1 f 4240(and)X 5 f 612 988(C_string)N 1 f 929(are)X 1048(treated)X 1287(the)X 1405(same)X 1590(for)X 1704(consistency,)X 2118(but)X 5 f 2242(typedef)X 1 f 2502(s)X 2553(are)X 2672(not)X 2794(actually)X 3068(needed)X 3316(for)X 3430(them.)X 5 f 900 1132(C_double)N 1 f 1332(\(may)X 1514(be)X 1607(de\256ned)X 1860(with)X 2019(a)X 5 f 2072(typedef)X 1 f 2332(\))X 5 f 900 1228(C_integer)N 1 f 1332(\(may)X 1514(be)X 1607(de\256ned)X 1860(with)X 2019(a)X 5 f 2072(typedef)X 1 f 2332(\))X 5 f 900 1324(C_string)N 1 f 1332(\(may)X 1514(be)X 1607(de\256ned)X 1860(with)X 2019(a)X 5 f 2072(typedef)X 1 f 2332(\))X 5 f 900 1420(cnv)N 900 1516(def)N 900 1612(deref)N 900 1708(errorfail)N 900 1804(fail)N 900 1900(function)N 900 1996(is)N 900 2092(keyword)N 900 2188(operator)N 900 2284(runerr)N 900 2380(suspend)N 900 2476(tended)N 900 2572(type_case)N 1 f 612 2716(In)N 702(addition,)X 1007(identi\256ers)X 1350(starting)X 1613(with)X 5 f 1781(r_)X 1 f 1876(are)X 1999(reserved)X 2296(for)X 2414(variables)X 2728(generated)X 3065(by)X 3169(the)X 3291(translator)X 3618(and)X 3758(should)X 3995(not)X 4121(be)X 4221(used)X 612 2812(in)N 694(RTL)X 865(code.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(26)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 27 p %%Page: 27 27 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Appendix)N 964(D:)X 1069(Using)X 6 f 1286(rtt)X 5 f 732 796(rtt)N 1 f 823(is)X 896(invoked)X 1174(with)X 1336(the)X 1454(command)X 5 f 900 940(rtt)N 2 f 1004({)X 1069(option)X 1306(}*)X 1444({)X 1509(\256le)X 1640(}+)X 1 f 612 1084(One)N 772(or)X 865(more)X 1056(\256le)X 1184(names)X 1415(must)X 1596(be)X 1698(speci\256ed.)X 2029(If)X 2109(a)X 2171(name)X 2371(lacks)X 2562(the)X 5 f 2688(.r)X 1 f 2763(suf\256x,)X 2991(it)X 3061(is)X 3140(appended.)X 3494(A)X 3578(\256le)X 3706(name)X 3906(of)X 5 f 9 f 4001(-)X 1 f 4071(indicates)X 612 1180(standard)N 904(input;)X 1110(when)X 1304(needed,)X 1572(the)X 1690(name)X 5 f 1886(stdin)X 1 f 2074(is)X 2147(used)X 2314(for)X 2428(constructing)X 2844(an)X 2940(output)X 3164(\256le)X 3286(name.)X 732 1304(The)N 5 f 879(rtt)X 1 f 970(options)X 1225(are)X 5 f 9 f 900 1448(-)N 5 f 944(C)X 1 f 9 f 1712(-)X 1 f 1798(Retain)X 2024(comments)X 2370(and)X 2503(all)X 2600(white)X 2795(space;)X 3013(only)X 3172(effective)X 3471(with)X 5 f 9 f 3630(-)X 5 f 3674(E)X 9 f 900 1640(-)N 5 f 944(D)X 2 f 1019(identi\256er)X 1325([)X 5 f 1373(=)X 2 f 1437([)X 1485(text)X 1618(])X 1666(])X 1 f 9 f 1714(-)X 1 f 1775(Prede\256ne)X 2095(an)X 2188(identi\256er)X 2494(for)X 2605(the)X 2720(preprocessor.)X 5 f 9 f 900 1832(-)N 5 f 944(E)X 1 f 9 f 1712(-)X 1 f 1798(Run)X 1948(only)X 2107(the)X 2222(preprocessor,)X 2670(sending)X 2936(the)X 3051(result)X 3246(to)X 3325(standard)X 3614(output.)X 5 f 9 f 900 2024(-)N 5 f 944(I)X 2 f 983(path)X 1 f 9 f 1712(-)X 1 f 1798(Use)X 2 f 1940(path)X 1 f 2099(as)X 2183(one)X 2316(of)X 2400(the)X 2515(standard)X 2804(locations)X 3110(when)X 3301(searching)X 3626(for)X 3737(header)X 3969(\256les.)X 1798 2120(Because)N 5 f 2083(rtt)X 1 f 2171(does)X 2335(not)X 2454(usually)X 2702(processes)X 3027(system)X 3266(header)X 3498(\256les,)X 3668(this)X 3800(preprocessor)X 1798 2216(option)N 2019(is)X 2089(not)X 2208(generally)X 2524(used;)X 2710(see)X 2830(the)X 5 f 9 f 2945(-)X 5 f 2989(r)X 1 f 3033(option.)X 5 f 9 f 900 2408(-)N 5 f 944(P)X 1 f 9 f 1712(-)X 1 f 1798(Suppress)X 5 f 2104(#line)X 1 f 2289(directives)X 2618(in)X 2697(the)X 2812(output.)X 3053(The)X 3195(default,)X 3455(both)X 3614(with)X 3773(and)X 3906(without)X 5 f 9 f 1798 2504(-)N 5 f 1842(E)X 1 f 1895(,)X 1932(is)X 2002(to)X 2081(place)X 5 f 2268(#line)X 1 f 2453(directives)X 2782(in)X 2861(the)X 2976(output.)X 3217(These)X 3426(directives)X 3755(relate)X 3951(the)X 4066(code)X 1798 2600(back)N 1967(to)X 2046(its)X 2138(source)X 2365(location)X 2640(in)X 2719(the)X 2834(input)X 3015(\256le.)X 5 f 9 f 900 2792(-)N 5 f 944(U)X 2 f 1019(ident_ VMS.BCK[V9.DOCS]IPD261.PS;1i\256er)X 1 f 9 f 1712(-)X 1 f 1798(Unde\256ne)X 2109(an)X 2202(identi\256er)X 2508(that)X 2645(is)X 2715(prede\256ned)X 3071(in)X 3150(the)X 3265(preprocessor.)X 5 f 9 f 900 2984(-)N 5 f 944(d)X 2 f 1005(\256le)X 1 f 9 f 1712(-)X 1 f 1798(Use)X 2 f 1940(\256le)X 1 f 2055(as)X 2139(the)X 2254(data)X 2405(base.)X 2585(A)X 2660(suf\256x)X 2859(of)X 5 f 2943(.db)X 1 f 3070(is)X 3140(added)X 3349(if)X 3415(it)X 3476(is)X 3546(missing.)X 3831(The)X 3973(standard)X 1798 3080(data)N 1949(base)X 2109(is)X 5 f 2179(rt.db)X 1 f 2338(.)X 5 f 9 f 900 3272(-)N 5 f 944(r)X 2 f 988(path)X 1 f 9 f 1712(-)X 1 f 1798(Use)X 2 f 1940(path)X 1 f 2099(to)X 2178(locate)X 2387(the)X 2502(C)X 2572(header)X 2804(\256les)X 2954(for)X 3065(the)X 3180(Icon)X 3340(system.)X 5 f 3599(rtt)X 1 f 3687(locates)X 3927(header)X 1798 3368(\256les)N 1948(by)X 2045(appending)X 5 f 2396(../src/h/)X 2 f 2657(header-\256le)X 1 f 3022(to)X 2 f 3101(path)X 1 f 3243(;)X 2 f 3282(path)X 1 f 3441(must)X 3613(end)X 3746(with)X 5 f 3905(/)X 1 f 3927(.)X 3964(The)X 1798 3464(default)N 2038(path)X 2193(is)X 2263(established)X 2636(when)X 5 f 2827(rtt)X 1 f 2915(is)X 2985(compiled;)X 3322(see)X 3442([7].)X 5 f 9 f 3573(-)X 5 f 3617(r)X 1 f 3661(is)X 3731(useful)X 3944(for)X 4055(cross)X 1798 3560(compiling)N 2139(the)X 2254(run-time)X 2547(system)X 2786(for)X 2897(another)X 3155(machine.)X 5 f 9 f 900 3752(-)N 5 f 944(t)X 2 f 983(name)X 1 f 9 f 1712(-)X 1 f 1798(Treat)X 2 f 1985(name)X 1 f 2176(as)X 2260(a)X 5 f 2313(typedef)X 1 f 2590(name)X 2781(while)X 2976(parsing)X 3229(the)X 5 f 3344(.r)X 1 f 3410(\256les)X 3560(\(alternately)X 3943(a)X 3996(dummy)X 5 f 1798 3848(typedef)N 1 f 2075(can)X 2204(be)X 2297(put)X 2416(in)X 5 f 2495(h/grttin.h)X 1 f 2804(\).)X 2868(This)X 3027(is)X 3097(useful)X 3310(when)X 3501(the)X 3616(actual)X 5 f 3825(typedef)X 1 f 1798 3944(is)N 1868(in)X 1947(a)X 2000(system)X 2239(include)X 2492(\256le)X 2611(that)X 2748(is)X 2818(only)X 2977(included)X 3270(by)X 3367(the)X 3482(C)X 3552(compiler)X 3854(and)X 3987(not)X 5 f 4106(rtt)X 1 f 4177(.)X 5 f 9 f 900 4136(-)N 5 f 944(x)X 1 f 9 f 1712(-)X 1 f 1798(Produce)X 2078(code)X 2247(for)X 5 f 2358(iconx)X 1 f 2561(and)X 2694(don't)X 2880(update)X 3111(a)X 3164(data)X 3315(base;)X 3497(the)X 3612(default)X 3852(is)X 3922(to)X 4001(produce)X 1798 4232(code)N 1967(for)X 5 f 2078(iconc)X 1 f 2264(.)X 732 4404(Input)N 928(\256les)X 1088(are)X 1214(translated)X 1553(into)X 1704(standard)X 2003(C.)X 2103(When)X 2322(translating)X 2687(a)X 2750(\256le)X 2879(for)X 3000(the)X 3125(interpreter,)X 3507(the)X 3632(C)X 3712(code)X 3891(is)X 3971(put)X 4100(in)X 4190(a)X 4254(\256le)X 612 4500(whose)N 838(name)X 1033(is)X 1107(constructed)X 1498(by)X 1599(prepending)X 5 f 1983(x)X 1 f 2044(to)X 2127(the)X 2246(input)X 2431(\256le)X 2554(name)X 2749(and)X 2886(replacing)X 3206(the)X 5 f 3326(.r)X 1 f 3395(suf\256x)X 3597(by)X 5 f 3699(.c)X 1 f 3761(.)X 3801(No)X 3919(other)X 4104(\256les)X 4257(are)X 612 4596(created)N 865(or)X 952(updated)X 1226(for)X 1340(the)X 1458(interpreter.)X 732 4720(When)N 947(translating)X 1308(a)X 1367(\256le)X 1492(for)X 1609(the)X 1730(compiler,)X 2058(the)X 2179(C)X 2255(code)X 2431(is)X 2508(placed)X 2742(in)X 2828(several)X 3080(\256les)X 3237(\(this)X 3403(allows)X 3636(more)X 3825(selective)X 4130(linking)X 612 4816(of)N 700(run-time)X 996(operations)X 1350(with)X 1512(compiled)X 1830(programs\).)X 2200(Each)X 2381(operation)X 2704(is)X 2777(placed)X 3007(in)X 3089(a)X 3145(separate)X 3429(\256le)X 3551(whose)X 3776(name)X 3970(is)X 4043(generated)X 612 4912(by)N 5 f 719(rtt)X 1 f 790(.)X 835(Any)X 998(non-operation)X 1473(code)X 1650(is)X 1728(placed)X 1963(in)X 2050(a)X 2111(\256le)X 2238(whose)X 2468(name)X 2667(is)X 2745(constructed)X 3140(by)X 3245(replacing)X 3569(the)X 5 f 3694(.r)X 1 f 3768(suf\256x)X 3975(of)X 4068(the)X 4192(input)X 612 5008(\256le)N 735(name)X 930(by)X 5 f 1033(.c)X 1 f 1116(\(note)X 1302(that)X 1443(this)X 1579(does)X 1747(not)X 1870(con\257ict)X 2131(with)X 2294(the)X 2413(output)X 2638(\256le)X 2761(created)X 3015(for)X 3130(the)X 3248(interpreter;)X 3625(it)X 3689(has)X 3816(an)X 5 f 3914(x)X 1 f 3974(prepended\).)X 612 5104(For)N 751(the)X 877(compiler,)X 5 f 1212(rtt)X 1 f 1311(also)X 1469(places)X 1699(information)X 2106(about)X 2313(operations)X 2676(the)X 2803(data)X 2966(base.)X 3158(In)X 3254(addition,)X 3565(dependency)X 3978(information)X 612 5200(relating)N 877(generated)X 1210(\256les)X 1363(names)X 1588(to)X 1670(the)X 1788(corresponding)X 2267(sources)X 2528(\256les)X 2681(is)X 2754(also)X 2903(stored)X 3119(in)X 3201(the)X 3319(data)X 3473(base)X 3636(\(see)X 3786(Appendix)X 4122(E\).)X 732 5324(If)N 807(the)X 926(data)X 1081(base)X 1245(is)X 1319(non-existent,)X 1756(it)X 1821(is)X 1895(created.)X 2169(If)X 2244(an)X 2341(operation)X 2665(that)X 2806(already)X 3064(exists)X 3267(in)X 3350(the)X 3469(data)X 3624(base)X 3789(is)X 3864(retranslated,)X 4281(its)X 612 5420(entry)N 812(in)X 909(the)X 1042(data)X 1210(base)X 1387(is)X 1474(updated.)X 5 f 1784(rtt)X 1 f 1889(generates)X 2227(a)X 2297(unique)X 2 f 2549(pre\256x)X 1 f 2766(for)X 2894(every)X 3107(operation.)X 3464(The)X 3623(name)X 3831(of)X 3932(a)X 4002(C)X 4089(function)X 612 5516(implementing)N 1089(an)X 1198(operation)X 1534(is)X 1620(created)X 1887(by)X 2001(prepending)X 2396(a)X 2466 0.3229(one-character)AX 2 f 2939(operation)X 3284(code)X 1 f 3470(\(this)X 3646(indicates)X 3965(whether)X 4258(the)X 612 5612(operation)N 943(is)X 1024(a)X 1088(function,)X 1403(keyword)X 1712(or)X 1807(operator\))X 2130(and)X 2274(the)X 2400(unique)X 2646(pre\256x)X 2861(to)X 2951(the)X 3077(operation)X 3408(name.)X 3630(For)X 3769(example,)X 4088(the)X 4213(Icon)X 612 5708(function)N 5 f 915(write\(\))X 1 f 1172(might)X 1392(be)X 1503(implemented)X 1956(by)X 2071(the)X 2204(C)X 2292(function)X 5 f 2596(F1d_write)X 1 f 2946(.)X 3001(Every)X 3228(body)X 3423(function)X 3725(for)X 3854(an)X 3965(operation)X 4303(is)X 612 5804(assigned)N 915(a)X 978(third)X 1156(pre\256x)X 1370(character)X 1693(to)X 1782(distinguish)X 2159(it.)X 2250(These)X 2468(generated)X 2807(names)X 3038(help)X 3202(prevent)X 3469(con\257icts)X 3766(with)X 3934(the)X 4058(names)X 4289(of)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(27)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 28 p %%Page: 28 28 8 s 8 xH 0 xS 1 f 10 s 612 672(existing)N 886(C)X 960(library)X 1195(functions.)X 1535(The)X 1682(pre\256xes)X 1958(are)X 2079(also)X 2230(used)X 2399(in)X 2483(creating)X 2764(the)X 2884(C)X 2959(\256le)X 3083(names;)X 3332(the)X 3452(C)X 3527(function)X 3816(for)X 5 f 3934(write\(\))X 1 f 4179(is)X 4254(put)X 612 768(in)N 694(the)X 812(\256le)X 5 f 936(f_1d.c)X 1 f 1152(.)X 1212(If)X 1286(an)X 1382(operation)X 1705(is)X 1778(retranslated,)X 2193(the)X 2311(original)X 2580(pre\256x)X 2787(is)X 2860(re-used.)X 732 892(When)N 946(translating)X 1306(RTL)X 1479(for)X 1595(the)X 1715(compiler,)X 5 f 2044(rtt)X 1 f 2138(produces)X 2451(two)X 2594(\256les)X 2750(containing)X 3111(lists)X 3262(of)X 3352(\256le)X 3477(names.)X 5 f 3727(rttcur.lst)X 1 f 4034(is)X 4110(a)X 4169(list)X 4289(of)X 612 988(output)N 837(\256les)X 991(created)X 1245(in)X 1328(the)X 1447(current)X 1696(execution.)X 5 f 2051(rttfull.lst)X 1 f 2347(is)X 2421(a)X 2477(list)X 2594(of)X 2681(all)X 2781(output)X 3005(\256les)X 3158(listed)X 3351(in)X 3433(the)X 3551(data)X 3705(base;)X 3890(that)X 4030(is,)X 4123(all)X 4223(\256les)X 612 1084(produced)N 936(since)X 1126(the)X 1249(data)X 1408(base)X 1576(was)X 1726(created.)X 5 f 2028(rttfull.lst)X 1 f 2328(excludes)X 2634(\256les)X 2792(that)X 2937(contain)X 3198(no)X 3303(storage)X 3560(de\256nitions;)X 394 VMS.BCK[V9.DOCS]IPD261.PS;14(that)X 4089(is,)X 4187(those)X 612 1180(that)N 794(only)X 998(contain)X 1295(prototypes,)X 5 f 1716(typedef)X 1 f 1976(s,)X 2088(and)X 5 f 2267(extern)X 1 f 2488(s.)X 2620(Both)X 2836(lists)X 3025(consists)X 3339(names)X 3605(without)X 3910(suf\256xes.)X 4240(See)X 5 f 612 1276(runtime/Make\256le)N 1 f 1228(for)X 1353(an)X 1461(example)X 1765(of)X 1864(how)X 2034(these)X 2231(lists)X 2391(are)X 2522(used)X 2701(to)X 2795(create)X 3020(and)X 3168(maintain)X 3480(an)X 3588(Icon)X 3763(compiler)X 4080(run-time)X 612 1372(library.)N 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(28)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 29 p %%Page: 29 29 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Appendix)N 964(E:)X 1064(Data)X 1249(Base)X 1429(Format)X 1 f 732 796(The)N 882(data)X 1041(base)X 1209(is)X 1287(stored)X 1508(externally)X 1854(as)X 1946(a)X 2007(text)X 2152(\256le.)X 2299(This)X 2466(data)X 2625(base)X 2793(is)X 2871(designed)X 3181(to)X 3269(be)X 3371(easily)X 3584(processed)X 3927(by)X 4033(programs.)X 612 892(The)N 770(format)X 1017(of)X 1117(the)X 1248(data)X 1415(base)X 1591(is)X 1676(not)X 1810(designed)X 2127(for)X 2253(human)X 2503(interpretation,)X 2987(but)X 3121(a)X 3189(human)X 3439(being)X 3649(can)X 3793(read)X 3964(it)X 4040(with)X 4214(only)X 612 988(minimal)N 899(dif\256culty.)X 1233(The)X 1379(data)X 1534(base)X 1698(contains)X 1986(some)X 2176(redundant)X 2519(information)X 2919(where)X 3138(the)X 3258(information)X 3658(is)X 3733(more)X 3920(convenient)X 4294(to)X 612 1084(store)N 788(than)X 946(recompute.)X 732 1208(The)N 898(data)X 1073(base)X 1257(begins)X 1507(with)X 1691(some)X 1902(brief)X 2096(version)X 2374(information)X 2794(and)X 2952(contains)X 3261(six)X 3396(sections:)X 3718(types,)X 3949(components,)X 612 1304(functions,)N 952(operators,)X 1293(keywords,)X 1647(and)X 1785(dependencies.)X 2260(Each)X 2443(section)X 2692(starts)X 2883(with)X 3047(a)X 3105(header)X 3342(consisting)X 3688(of)X 3777(the)X 3897(corresponding)X 612 1400(name)N 807(and)X 944(ends)X 1112(with)X 5 f 1277($endsect)X 1 f 1599(.)X 1641(The)X 5 f 1790(type)X 1 f 1962(section)X 2211(relates)X 2443(data)X 2599(base)X 2764(type)X 2924(codes)X 3129(to)X 3213(type)X 3373(names.)X 3620(The)X 3767(codes)X 3972(consist)X 4216(of)X 5 f 4307(T)X 1 f 612 1496(followed)N 928(by)X 1039(an)X 1146(integer.)X 1420(The)X 1576(entries)X 1821(in)X 1914(this)X 2059(section)X 2316(consist)X 2568(of)X 2665(the)X 2793(code)X 2975(and)X 3121(type)X 3289(name)X 3493(separated)X 3827(by)X 3937(a)X 4003(colon.)X 4231(The)X 5 f 612 1592(component)N 1 f 1025(section)X 1272(is)X 1345(similar;)X 1609(it)X 1673(relates)X 1903(type)X 2061(component)X 2437(codes)X 2640(to)X 2722(component)X 3098(names.)X 3343(These)X 3555(codes)X 3758(begin)X 3956(with)X 5 f 4120(C)X 1 f 4178(.)X 732 1716(The)N 877(next)X 1035(three)X 1216(sections)X 1494(contain)X 1750(implementation)X 2272(information)X 2670(for)X 2784(operations.)X 3158(The)X 3303(entries)X 3537(in)X 3620(these)X 3806(sections)X 4085(have)X 4258(the)X 612 1812(same)N 798(format,)X 1053(except)X 1284(that)X 1425(each)X 1594(entry)X 1780(in)X 1862(the)X 1980(operators)X 2299(section)X 2546(has)X 2673(the)X 2791(operator)X 3079(symbol)X 3334(prepended.)X 3709(The)X 3854(implementation)X 612 1908(entries)N 846(are)X 965(stored)X 1181(in)X 1263(alphabetical)X 1671(order)X 1861(within)X 2085(each)X 2253(section.)X 3 f 612 2100(Operation)N 983(Entries)X 1 f 732 2224(The)N 895(following)X 1244(grammar)X 1573(describes)X 1911(the)X 2048(format)X 2301(of)X 2407(an)X 2522(implementation)X 3063(entry)X 3267(\(without)X 3577(the)X 3714(prepended)X 4088(operator)X 612 2320(symbol)N 871(for)X 989(entries)X 1227(in)X 1313(the)X 1435(operator)X 1727(section\).)X 2025(Most)X 2212(of)X 2302(this)X 2440(grammar)X 2753(closely)X 3003(re\257ects)X 3258(the)X 3379(grammar)X 3692(for)X 3809(RTL,)X 4003(except)X 4236(that)X 612 2416(much)N 811(of)X 899(the)X 1019(information)X 1419(is)X 1494(in)X 1578(pre\256x)X 1787(format.)X 2043(C-style)X 2296(comments)X 2647(are)X 2768(used)X 2937(in)X 3021(the)X 3141(grammar)X 3453(to)X 3537(explain)X 3795(non-terminals)X 4262(for)X 612 2512(otherwise)N 944(obscure)X 1214(codes.)X 1457(Productions)X 1859(marked)X 2120(with)X 2282(\262)X 2342(do)X 2442(not)X 2564(contain)X 2820(embedded)X 3170(white)X 3368(space.)X 2 f 900 2656(implementation)N 1415(::=)X 1540(header)X 1780(description)X 2157(tended-vars)X 2553(nontended-vars)X 3069(action)X 5 f 3286($end)X 1 f 732 2828(In)N 825(addition)X 1113(to)X 1201(information)X 1605(obtained)X 1907(from)X 2089(the)X 2213(implementation)X 2741(of)X 2834(the)X 2958(operation,)X 3308(the)X 2 f 3433(header)X 1 f 3683(contains)X 3977(an)X 4080(assigned)X 612 2924(pre\256x)N 819(that)X 959(is)X 1032(unique)X 1270(within)X 1494(the)X 1612(type)X 1770(of)X 1857(operation)X 2180(\(i.e.)X 2325(within)X 2549(functions,)X 2887(operators,)X 3226(or)X 3313(keywords\).)X 2 f 900 3068(header)N 1140(::=)X 1265(name)X 1456(pre\256x)X 1656(params)X 1913(result-seq)X 2246(return-stms)X 2632(explicit-result)X 732 3240(params)N 1 f 996(includes)X 1287(the)X 1409(number)X 1678(of)X 1769(parameters)X 2146(to)X 2232(the)X 2354(operation)X 2681(followed)X 2991(by)X 3096(a)X 3157(list)X 3279(of)X 3371(codes)X 3579(indicating)X 3924(whether)X 4208(each)X 612 3336(parameter)N 956(is)X 1030 0.3750(dereferenced)AX 1468(and/or)X 1694 0.3173(undereferenced)AX 2212(and)X 2349(indicating,)X 2710(by)X 2811(the)X 2930(presence)X 3233(or)X 3321(absence)X 3597(of)X 3685(a)X 3742(trailing)X 5 f 3996(v)X 1 f (,)S 4097(whether)X 612 3432(the)N 730(last)X 861(parameter)X 1203(represents)X 1549(the)X 1667(tail)X 1789(of)X 1876(a)X 1932(variable)X 2211(length)X 2431(argument)X 2754(list.)X 2 f 900 3576(params)N 1157(::=)X 1282(\262num-params)X 5 f 1744(\()X 2 f 1790([)X 1838(param-ind)X 2193({)X 5 f 2242(,)X 2 f 2283(param-ind)X 2638(}*)X 2744([)X 5 f 2792(v)X 2 f 2849(])X 2897(])X 5 f 2945(\))X 2 f 900 3768(num-params)N 1322(::=)X 1447(integer)X 900 3960(param-ind)N 1255(::=)X 5 f 1401(u)X 2 f 9 f 1479(|)X 1 f 1620(/*)X 1699 0.3173(undereferenced)AX 2213(*/)X 5 f 1401 4056(d)N 2 f 9 f 1479(|)X 1 f 1620(/*)X 1699 0.3750(dereferenced)AX 2133(*/)X 5 f 1401 4152(du)N 1 f 1620(/*)X 1699(both)X 1858 0.3750(dereferenced)AX 2292(and)X 2425 0.3173(undereferenced)AX 2939(*/)X 2 f 612 4296(result-seq)N 1 f 948(is)X 1021(the)X 1139(same)X 1324(as)X 1411(the)X 1529(production)X 1896(in)X 1978(RTL,)X 2169(except)X 2399(that)X 2539(there)X 2720(is)X 2793(never)X 2992(just)X 3127(one)X 3263(bound)X 3483(\(though)X 3752(there)X 3934(may)X 4093(be)X 4190(zero\))X 612 4392(and)N 5 f 750(*)X 1 f 801(is)X 874(never)X 1073(used)X 1240(in)X 1322(the)X 1440(lower)X 1643(bound.)X 2 f 900 4536(result-seq)N 1233(::=)X 1358(\262)X 5 f ({)S 2 f 1442([)X 1490(integer)X 5 f 1734(,)X 2 f 1773(length)X 1990([)X 5 f 2038(+)X 2 f 2102(])X 2150(])X 5 f 2198(})X 2 f 900 4728(length)N 1117(::=)X 1242(integer)X 9 f 1503(|)X 5 f 1553(*)X 1 f 612 4872(The)N 767(operation)X 1100(description)X 1487(is)X 1571(taken)X 1776(directly)X 2052(from)X 2239(the)X 2368(description)X 2755(in)X 2848(the)X 2977(RTL)X 3159(code.)X 3362(If)X 3447(no)X 3558(description)X 3945(is)X 4029(given,)X 4258(the)X 612 4968(empty)N 832(string)X 1034(is)X 1107(used.)X 2 f 900 5112(description)N 1277(::=)X 1402(string-literal)X 732 5284(return-stms)N 1 f 1134(is)X 1220(a)X 1289(sequence)X 1617(of)X 1717(four)X 1884(codes)X 2100(indicating)X 2453(whether)X 2745(the)X 2876(operation)X 3212(contains)X 5 f 3514(fail)X 1 f 3616(,)X 5 f 3671(return)X 1 f 3879(,)X 5 f 3935(suspend)X 1 f 4235(,)X 4289(or)X 5 f 612 5380(errorfail)N 1 f 916(\(possibly)X 1242(an)X 1351(impl} VMS.BCK[V9.DOCS]IPD261.PS;1VUicit)X 5 f 1634(errorfail)X 1 f 1938(for)X 2065(a)X 5 f 2136(runerr)X 1 f 2349(\))X 2409(statements.)X 2820(An)X 2951(underscore)X 3337(in)X 3432(a)X 3500(position)X 3789(indicates)X 4106(that)X 4258(the)X 612 5476(corresponding)N 1091(statement)X 1418(is)X 1491(not)X 1613(used)X 1780(in)X 1862(the)X 1980(operation.)X 2 f 900 5620(return-stms)N 1286(::=)X 1411(\262fail)X 1574(return)X 1791(suspend)X 2066(errorfail)X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(29)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 30 p %%Page: 30 30 8 s 8 xH 0 xS 1 f 10 s 2 f 900 672(fail)N 1023(::=)X 5 f 1332(f)X 2 f 9 f 1388(|)X 5 f 1438(_)X 2 f 900 864(return)N 1117(::=)X 5 f 1332(r)X 2 f 9 f 1393(|)X 5 f 1443(_)X 2 f 900 1056(suspend)N 1175(::=)X 5 f 1332(s)X 2 f 9 f 1406(|)X 5 f 1456(_)X 2 f 900 1248(errorfail)N 1192(::=)X 5 f 1332(e)X 2 f 9 f 1410(|)X 5 f 1460(_)X 2 f 612 1392(explicit-result)N 1 f 1077(indicates)X 1382(whether)X 1661(the)X 1779(operation)X 2102(explicitly)X 2424 0.3889(references)AX 2776(the)X 2894(result)X 3092(location.)X 3410(It)X 3479(is)X 3552(either)X 3755(true,)X 5 f 3922(t)X 1 f 3944(,)X 3984(or)X 4071(false,)X 5 f 4265(f)X 1 f 4287(.)X 2 f 900 1536(explicit-result)N 1362(::=)X 5 f 1487(t)X 2 f 9 f 1543(|)X 5 f 1593(f)X 2 f 732 1708(tended-vars)N 1 f 1140(is)X 1222(the)X 1349(number)X 1623(of)X 1719(tended)X 1962(variables)X 2281(from)X 2466(the)X 5 f 2595(declare)X 1 f 2885(clause)X 3115(followed)X 3429(by)X 3538(a)X 3603(list)X 3729(of)X 3825(types)X 4024(and)X 4170(initial)X 612 1804(values)N 839(for)X 955(those)X 1146(variables.)X 1497(A)X 2 f 1576(ptr-type)X 1 f 1851(of)X 5 f 1941(*)X 1 f 1993(indicates)X 2299(the)X 2418(union)X 2621(block)X 2820(type.)X 2 f 3019(tend-init)X 1 f 3311(of)X 5 f 3401(nil)X 1 f 3502(indicates)X 3808(no)X 3909(explicit)X 4170(initial)X 612 1900(value.)N 2 f 900 2044(tended-vars)N 1296(::=)X 1421(num-tended)X 1817({)X 1866(tended-var)X 2231(}*)X 900 2236(num-tended)N 1296(::=)X 1421(integer)X 900 2428(tended-var)N 1265(::=)X 1390(tend-type)X 1706(tend-init)X 900 2620(tend-type)N 1216(::=)X 5 f 1341(desc)X 2 f 9 f 1543(|)X 5 f 1593(str)X 2 f 9 f 1716(|)X 5 f 1766(blkptr)X 2 f 1978(ptr-type)X 900 2812(ptr-type)N 1171(::=)X 5 f 1332(*)X 2 f 9 f 1397(|)X 5 f 1332 2908(b_real)N 2 f 9 f 1587(|)X 5 f 1332 3004(b_cset)N 2 f 9 f 1600(|)X 5 f 1332 3100(b_\256le)N 2 f 9 f 1556(|)X 5 f 1332 3196(b_proc)N 2 f 9 f 1609(|)X 5 f 1332 3292(b_list)N 2 f 9 f 1552(|)X 5 f 1332 3388(b_lelem)N 2 f 9 f 1645(|)X 5 f 1332 3484(b_table)N 2 f 9 f 1626(|)X 5 f 1332 3580(b_telem)N 2 f 9 f 1649(|)X 5 f 1332 3676(b_set)N 2 f 9 f 1560(|)X 5 f 1332 3772(b_selem)N 2 f 9 f 1667(|)X 5 f 1332 3868(b_slots)N 2 f 9 f 1618(|)X 5 f 1332 3964(b_record)N 2 f 9 f 1680(|)X 5 f 1332 4060(b_tvkywd)N 2 f 9 f 1698(|)X 5 f 1332 4156(b_tvsubs)N 2 f 9 f 1684(|)X 5 f 1332 4252(b_tvtbl)N 2 f 9 f 1600(|)X 5 f 1332 4348(b_refresh)N 2 f 9 f 1702(|)X 5 f 1332 4444(b_coexpr)N 2 f 900 4636(tend-init)N 1188(::=)X 1313(C-code)X 9 f 1579(|)X 5 f 1629(nil)X 2 f 732 4808(nontended-vars)N 1 f 1252(is)X 1326(the)X 1445(number)X 1712(of)X 1801(non-tended)X 2184(variables)X 2496(from)X 2674(the)X 5 f 2796(declare)X 1 f 3079(clause)X 3302(followed)X 3609(by)X 3711(a)X 3769(list)X 3888(of)X 3977(the)X 4097(variable)X 612 4904(names)N 837(and)X 973(their)X 1140(declarations.)X 2 f 900 5048(nontended-vars)N 1416(::=)X 1541(num-vars)X 1861({)X 1910(nontended-var)X 2395(}*)X 900 5240(num-vars)N 1220(::=)X 1345(integer)X 900 5432(nontended-var)N 1385(::=)X 1510(identi\256er)X 1816(C-declaration)X 900 5624(C-declaration)N 1366(::=)X 1491(C-code)X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(30)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 31 p %%Page: 31 31 8 s 8 xH 0 xS 1 f 10 s 2 f 732 672(action)N 1 f 956(is)X 1033(very)X 1200(similar)X 1446(to)X 1532(that)X 1676(nonterminal)X 2087(in)X 2173(the)X 2295(RTL)X 2470(syntax.)X 5 f 2748(nil)X 1 f 2853(indicates)X 3163(no)X 3268(code.)X 5 f 3489(const)X 1 f 3704(indicates)X 4014(a)X 4075(keyword)X 612 768(constant.)N 5 f 929(if1)X 1 f 1041(indicates)X 1354(an)X 1458(if-then)X 1700(action.)X 5 f 1946(if2)X 1 f 2058(indicates)X 2371(and)X 2515(if-then-else)X 2909(action.)X 5 f 3155(case1)X 1 f 3394(indicates)X 3706(a)X 5 f 3771(type_case)X 1 f 4160(action)X 612 864(with)N 777(no)X 880(default)X 1126(clause.)X 5 f 1372(case2)X 1 f 1607(indicates)X 1915(a)X 5 f 1976(type_case)X 1 f 2362(action)X 2582(with)X 2748(a)X 2808(default)X 3055(clause.)X 5 f 3302(acase)X 1 f 3538(indicates)X 3847(and)X 5 f 3989(arith_case)X 1 f 612 960(action.)N 5 f 862(lcase)X 1 f 1080(indicates)X 1397(a)X 5 f 1467(len_case)X 1 f 1817(action.)X 5 f 2067(abstr)X 1 f 2276(indicates)X 2593(a)X 5 f 2662(abstract)X 1 f 2976(action.)X 5 f 3247(block)X 1 f 3464(indicates)X 3780(in-line)X 4020(C)X 4104(code.)X 4307(It)X 612 1056(includes)N 899(an)X 995(indication)X 1335(of)X 1422(the)X 1540(tended)X 1774(locals)X 1981(needed)X 2229(by)X 2329(the)X 2447(code.)X 5 f 732 1180(call)N 1 f 887(indicates)X 1207(a)X 1278(call)X 1429(to)X 1526(a)X 1597(run-time)X 1908(library)X 2157(function)X 2459(implementing)X 2938(a)X 5 f 3011(body)X 1 f 3218(action.)X 3469(A)X 3562(third)X 3748(pre\256x)X 3971(character)X 4303(is)X 612 1276(assigned)N 914(to)X 1002(each)X 1176(block)X 1380(to)X 1468(distinguish)X 1844(its)X 1945(function)X 2238(from)X 2420(that)X 2566(of)X 2659(other)X 2849(blocks)X 3083(and)X 3224(from)X 3405(the)X 3528(most)X 3708(general)X 3970(function)X 4262(for)X 612 1372(the)N 730(operation.)X 1073(Other)X 1276(nonterminals)X 1714(in)X 1796(the)X 1914(production)X 2281(are)X 2400(described)X 2728(below.)X 5 f 732 1496(err1)N 1 f 894(indicates)X 1199(a)X 5 f 1257(runerr)X 1 f 1490(with)X 1652(no)X 1752(value.)X 5 f 1968(err2)X 1 f 2130(indicates)X 2435(a)X 5 f 2493(runerr)X 1 f 2726(with)X 2888(a)X 2944(value.)X 5 f 3180(lst)X 1 f 3280(indicates)X 3585(a)X 3641(sequence)X 3956(of)X 4043(actions.)X 2 f 900 1640(action)N 1117(::=)X 5 f 1274(nil)X 2 f 9 f 1388(|)X 5 f 1274 1736(const)N 2 f 1481(type-code)X 1811(literal)X 9 f 2040(|)X 5 f 1274 1832(if1)N 2 f 1375 0.3472(type-check)AX 1737(action)X 9 f 1971(|)X 5 f 1274 1928(if2)N 2 f 1375 0.3472(type-check)AX 1737(action)X 1954(action)X 9 f 2171(|)X 5 f 1274 2024(tcase1)N 2 f 1525(variable)X 1809(num_cases)X 2178({)X 2227(typ-case)X 2512(}*)X 9 f 2618(|)X 5 f 1274 2120(tcase2)N 2 f 1525(variable)X 1809(num_cases)X 2178({)X 2227(typ-case)X 2512(}*)X 2601(default)X 9 f 2857(|)X 5 f 1274 2216(acase)N 2 f 1503(variable)X 1787(variable)X 2071(action)X 2288(action)X 2505(action)X 9 f 2722(|)X 5 f 1274 2312(lcase)N 2 f 1477(num-cases)X 1833({)X 1882(length-selection)X 2411(action)X 2628(}*)X 2717(default)X 9 f 2973(|)X 5 f 1274 2408(abstr)N 2 f 1468([)X 1516(side-effects)X 1894(])X 1942([return-type)X 2351(])X 5 f 1274 2504(block)N 2 f 1477(num-local-tended)X 2060({)X 2109(local-tend-type)X 2612(}*)X 2701(C-code)X 5 f 1274 2600(call)N 2 f 1411(third-pre\256x)X 1793(return-value)X 2211(exit-codes)X 2554(use-result)X 2887(num-string-bufs)X 3415(num-cset-bufs)X 3882(num-args)X 1476 2696({)N 1525(arg-decl)X 1814(arg)X 1942(}*)X 5 f 1274 2792(err1)N 2 f 1433(integer)X 9 f 1694(|)X 5 f 1274 2888(err2)N 2 f 1433(integer)X 1677(variable)X 9 f 1978(|)X 5 f 1274 2984(lst)N 2 f 1371(action)X 1588(action)X 900 3176(literal)N 1112(::=)X 1237(string-literal)X 9 f 1662(|)X 2 f 1695(cset-literal)X 9 f 2059(|)X 2 f 2092(integer-literal)X 9 f 2558(|)X 2 f 2591(real-literal)X 900 3368(num-cases)N 1256(::=)X 1381(integer)X 900 3560(typ-case)N 1185(::=)X 1310(num-types)X 1657({)X 1706(type-code)X 2036(}+)X 2139(action)X 900 3752(num-types)N 1247(::=)X 1372(integer)X 900 3944(length-selection)N 14$ VMS.BCK[V9.DOCS]IPD261.PS;11-29(::=)X 1554(integer)X 900 4136(default)N 1139(::=)X 1264(action)X 732 4308 0.3472(type-check)AN 1 f 1105(corresponds)X 1521(to)X 1611(that)X 1759(nonterminal)X 2175(in)X 2266(the)X 2393(RTL)X 2573(syntax.)X 2851(A)X 2938(suf\256x)X 3149(of)X 3245(1)X 3314(on)X 3423(the)X 3550(conversions)X 3962(indicates)X 4276(no)X 612 4404(explicit)N 872(destination)X 1243(and)X 1379(a)X 1435(suf\256x)X 1637(of)X 1724(2)X 1784(indicates)X 2089(the)X 2207(presence)X 2509(of)X 2596(an)X 2692(explicit)X 2952(destination.)X 2 f 900 4548 0.3472(type-check)AN 1262(::=)X 5 f 1418(cnv1)X 2 f 1603(type-code)X 1933(source)X 9 f 2181(|)X 5 f 1418 4644(cnv2)N 2 f 1603(type-code)X 1933(source)X 2164(destination)X 9 f 2553(|)X 5 f 1418 4740(def1)N 2 f 1589(type-code)X 1919(source)X 2150(default-val)X 9 f 2531(|)X 5 f 1418 4836(def2)N 2 f 1589(type-code)X 1919(source)X 2150(default-val)X 2514(destination)X 9 f 2903(|)X 5 f 1418 4932(is)N 2 f 1493(type-code)X 1823(variable)X 9 f 2124(|)X 5 f 1418 5028(!)N 2 f 1457 0.3472(type-check)AX 9 f 1836(|)X 5 f 1418 5124(&&)N 2 f 1541 0.3472(type-check)AX 1903 0.3472(type-check)AX 900 5316(source)N 1131(::=)X 1256(variable)X 900 5508(destination)N 1272(::=)X 1397(C-code)X 900 5700(default-val)N 1264(::=)X 1389(C-code)X 1 f 612 5844(The)N 2 f 757(symbol)X 1005(table)X 1 f 1186(for)X 1301(an)X 1398(operation)X 1722(consists)X 1996(of)X 2084(the)X 2203(parameters,)X 2597(and)X 2734(both)X 2897(the)X 3016(tended)X 3251(and)X 3388(non-tended)X 3770(variables)X 4081(from)X 4258(the)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(31)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 32 p %%Page: 32 32 8 s 8 xH 0 xS 1 f 10 s 5 f 612 672(declare)N 1 f 904(clause)X 1136(of)X 1234(the)X 1363(operation.)X 1717(The)X 1873(symbol)X 2139(table)X 2326(is)X 2410(ordered)X 2687(by)X 2798(the)X 2927(order)X 3128(of)X 3226 0.3750(appearance)AX 3620(of)X 3718(the)X 3846(variables)X 4166(in)X 4258(the)X 612 768(operation's)N 1000(entry)X 1192(in)X 1281(the)X 1406(data)X 1567(base.)X 1757(This)X 1926(ordering)X 2225(is)X 2306(used)X 2481(to)X 2571(determine)X 2920(the)X 3046(symbol)X 3309(table)X 3493(indexes.)X 3786(The)X 3939(variables)X 4257(are)X 612 864(identi\256ed)N 935(in)X 1018(the)X 1137(body)X 1318(of)X 1405(the)X 1523(operation)X 1846(entry)X 2031(by)X 2131(these)X 2316(indexes,)X 2601(with)X 2763(a)X 2819(special)X 3062(index)X 3260(of)X 5 f 3349(r)X 1 f 3396(indicating)X 3736(the)X 3854(special)X 4097(variable)X 5 f 612 960(result)N 1 f 807(.)X 847(Subscripting)X 1271(is)X 1344(introduced)X 1707(by)X 1807(the)X 1925(pre\256x)X 2132(operator)X 5 f 2422([)X 1 f 2444(.)X 2 f 900 1104(variable)N 1184(::=)X 1332(symbol-table-index)X 9 f 1981(|)X 5 f 1332 1200([)N 2 f 1371(symbol-table-index)X 2003(subscripting-index)X 900 1392(symbol-table-index)N 1532(::=)X 1657(integer)X 9 f 1918(|)X 5 f 1968(r)X 2 f 900 1584(subscripting-index)N 1513(::=)X 1638(integer)X 1 f 612 1728(A)N 698(block)X 904(of)X 999(in-line)X 1236(C)X 1317(code)X 1497(is)X 1578(prepended)X 1941(with)X 2111(a)X 2175(list)X 2300(of)X 2395(the)X 2522(types)X 2720(of)X 2816(tended)X 3059(variables)X 3378(that)X 3527(must)X 3711(be)X 3816(allocated)X 4135(for)X 4258(the)X 612 1824(code.)N 804(Any)X 962(initializations)X 1417(are)X 1536(in)X 1618(the)X 1736(C)X 1809(code.)X 2001(These)X 2213(variables)X 2523(are)X 2642 0.4028(referenced)AX 3003(in)X 3085(the)X 3203(C)X 3276(code)X 3448(by)X 3548(positional)X 3883(index.)X 2 f 900 1968(local-tend-type)N 1403(::=)X 5 f 1528(desc)X 2 f 9 f 1730(|)X 5 f 1780(str)X 2 f 9 f 1903(|)X 5 f 1953(blkptr)X 1 f 612 2112(A)N 704(call)X 854(to)X 950(a)X 1020(body)X 1214(function)X 1515(contains)X 1816(information)X 2228(describing)X 2596(the)X 2728(interface)X 3044(to)X 3141(the)X 3274(function.)X 3596(In)X 3698(the)X 3831(standard)X 4138(calling)X 612 2208(convention,)N 1013(the)X 1136(function)X 1428(returns)X 1675(a)X 1735(signal)X 1950(and)X 2090(the)X 2212(result)X 2414(is)X 2491(return)X 2707(through)X 2980(a)X 3040(pointer)X 3291(to)X 3377(a)X 3437(descriptor.)X 3802(However,)X 4141(if)X 4214(only)X 612 2304(one)N 749(signal)X 961(is)X 1035(possible,)X 1338(a)X 1395(body)X 1576(function)X 1864(returns)X 2108(no)X 2209(signal.)X 2441(If,)X 2536(in)X 2619(addition,)X 2922(the)X 3041(result)X 3240(is)X 3314(either)X 3518(a)X 3576(C)X 3651(integer)X 3896(or)X 3985(a)X 4043(C)X 4118(double,)X 612 2400(the)N 730(result)X 928(is)X 1001(returned)X 1289(directly)X 1554(as)X 1641(the)X 1759(result)X 1957(of)X 2044(the)X 2162(function.)X 2 f 900 2544(return-value)N 1318(::=)X 5 f 1458(i)X 2 f 9 f 1510(|)X 1 f 1591(/*)X 1670(integer)X 1910(*/)X 5 f 1458 2640(d)N 2 f 9 f 1536(|)X 1 f 1591(/*)X 1670(double)X 1905(*/)X 5 f 1458 2736(n)N 2 f 9 f 1536(|)X 1 f 1591(/*)X 1670(no)X 1767(value)X 1958(*/)X 5 f 1458 2832(s)N 1 f 1591(/*)X 1670(signal)X 1878(*/)X 612 2976(It)N 681(is)X 754(possible)X 1036(to)X 2 f 1118(fall)X 1244(through)X 1 f 1517(the)X 1635(end)X 1771(of)X 1858(a)X 1914(body)X 2094(function)X 2381(without)X 2645(ever)X 2805(encountering)X 3245(a)X 5 f 3304(return)X 1 f 3512(,)X 5 f 3555(suspend)X 1 f 3855(,)X 3896(or)X 5 f 3986(fail)X 1 f 4088(.)X 4149(This)X 4312(is)X 612 3072(re\257ected)N 909(in)X 991(the)X 2 f 1109(exit-codes)X 1 f 1455(for)X 1569(the)X 1687(body)X 1867(function.)X 2 f 900 3216(exit-codes)N 1243(::=)X 1368(\262fail)X 1531(return)X 1748(suspend)X 2023(errorfail)X 2315(fall-through)X 900 3408(fall-through)N 1303(::=)X 5 f 1428(t)X 2 f 9 f 1484(|)X 5 f 1534(_)X 2 f 612 3552(use-result)N 1 f 957(indicates)X 1271(whether)X 1559(a)X 1624(pointer)X 1880(to)X 1971(a)X 2036(result)X 2243(descriptor)X 2593(must)X 2778(be)X 2884(passed)X 3128(to)X 3220(the)X 3348(function.)X 3665(It)X 3744(is)X 3827(either)X 4040(true,)X 5 f 4217(t)X 1 f 4239(,)X 4289(or)X 612 3648(false,)N 5 f 806(f)X 1 f 828(.)X 2 f 900 3792(use-result)N 1233(::=)X 5 f 1358(t)X 2 f 9 f 1414(|)X 5 f 1464(f)X 1 f 612 3936(If)N 692(the)X 816(body)X 1002(function)X 1295(performs)X 1611(conversions)X 2020(to)X 2109(temporary)X 2466(strings)X 2706(or)X 2800(csets)X 2983(and)X 3126(the)X 3251(converted)X 3595(values)X 3827(must)X 4009(outlive)X 4258(the)X 612 4032(body)N 794(function)X 1083(\(they)X 1270(cannot)X 1505(outlive)X 1748(the)X 1867(operation,)X 2211(though\))X 2481(buffers)X 2730(must)X 2906(be)X 3003(allocated)X 3314(and)X 3451(passed)X 3686(to)X 3769(the)X 3888(body)X 4069(function.)X 2 f 612 4128(num-string-bufs)N 1 f 1143(and)X 2 f 1279(num-cset-bufs)X 1 f 1749(indicate)X 2023(the)X 2141(number)X 2406(of)X 2493(buffers)X 2741(needed.)X 2 f 900 4272(num-string-bufs)N 1428(::=)X 1553(integer)X 900 4464(num-cset-bufs)N 1367(::=)X 1492(integer)X 1 f 612 4608(Other)N 827(arguments)X 1193(to)X 1287(the)X 1417(body)X 1609(function)X 1908(are)X 2039(given)X 2249(explicitly.)X 2603(Declarations)X 3041(are)X 3172(given)X 3383(for)X 3510(the)X 3641(parameters)X 4027(for)X 4154(use)X 4294(in)X 612 4704(generating)N 971(a)X 1027(prototype)X 1354(for)X 1468(the)X 1586(function.)X 2 f 900 4848(arg-decl)N 1189(::=)X 1314(C-code)X 900 5040(arg)N 1028(::=)X 1153(C-code)X 1 f 612 5184(In)N 705(RTL,)X 902(side)X 1057(effects)X 1298(in)X 1386(the)X 1510(abstract)X 1786(clause)X 2014(are)X 2140(speci\256ed)X 2452(by)X 2559(expressions)X 2960(of)X 3054(the)X 3179(form)X 5 f 3364(store[)X 2 f 3563(type)X 5 f 3697(])X 3748(=)X 2 f 3822(type)X 1 f 3956(.)X 4003(In)X 4097(the)X 4222(data)X 612 5280(base,)N 799(they)X 961(are)X 1084(represented)X 1479(using)X 5 f 1677(=)X 1 f 1747(as)X 1837(a)X 1896(pre\256x)X 2106(operator)X 2397(followed)X 2705(by)X 2808(the)X 2929(two)X 3072(types.)X 3304(The)X 3452(return)X 3667(type)X 3828(from)X 4007(an)X 4106(abstract)X 612 537g"q= VMS.BCK[V9.DOCS]IPD261.PS;11e6(clause)N 833(is)X 906(stored)X 1122(in)X 1204(the)X 1322(data)X 1476(base)X 1639(without)X 1903(the)X 5 f 2023(return)X 1 f 2231(.)X 2 f 900 5520(side-effects)N 1278(::=)X 1403(side-effect)X 9 f 1767(|)X 5 f 1817(lst)X 2 f 1914(side-effects)X 2292(side-effect)X 900 5712(side-effect)N 1247(::=)X 5 f 1372(=)X 2 f 1436(variable-type)X 1881(value-type)X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(32)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 33 p %%Page: 33 33 8 s 8 xH 0 xS 1 f 10 s 2 f 900 672(variable-type)N 1345(::=)X 1470(type)X 900 864(value-type)N 1252(::=)X 1377(type)X 900 1056(return-type)N 1278(::=)X 1403(type)X 1 f 612 1200(The)N 2 f 763(type)X 1 f 923(nonterminal)X 1336(corresponds)X 1750(to)X 1838(the)X 1962(same)X 2153(one)X 2295(in)X 2383(the)X 2507(RTL)X 2684(syntax.)X 5 f 2963(typ)X 1 f 3095(indicates)X 3406(a)X 2 f 3468(type-name)X 1 f 3830(from)X 4013(RTL.)X 4231(The)X 612 1296(production)N 5 f 993(vartyp)X 2 f 1242(variable)X 1 f 1541(comes)X 1778(from)X 1966(the)X 5 f 2098(type\()X 2 f 2275(variable)X 5 f 2542(\))X 1 f 2601(production)X 2980(of)X 3079(the)X 3209(RTL)X 3392(syntax.)X 3673(The)X 5 f 3832(new)X 1 f 4009(production)X 612 1392(differs)N 860(in)X 960(that)X 1118(the)X 1254(number)X 1537(of)X 1643(arguments)X 2016(is)X 2108(given)X 2325(explicitly)X 2666(rather)X 2893(than)X 3070(being)X 3287(indicated)X 3620(by)X 3739(parentheses.)X 4173(Other)X 612 1488(productions)N 1010(are)X 1129(simple)X 1362(pre\256x)X 1569(forms)X 1776(of)X 1863(the)X 1981(ones)X 2148(from)X 2324(RTL.)X 2 f 900 1632(type)N 1051(::=)X 5 f 1245(typ)X 2 f 1368(type-code)X 9 f 1715(|)X 5 f 1245 1728(vartyp)N 2 f 1479(variable)X 9 f 1780(|)X 5 f 1245 1824(.)N 2 f 1284(type)X 1435(component-code)X 9 f 2000(|)X 5 f 1245 1920(new)N 2 f 1408(type-code)X 1738(num-args)X 2062({)X 2111(type)X 2262(}+)X 9 f 2382(|)X 5 f 1245 2016(store)N 2 f 1439(type)X 9 f 1607(|)X 5 f 1245 2112(++)N 2 f 1356(type)X 1507(type)X 9 f 1675(|)X 5 f 1245 2208(**)N 2 f 1324(type)X 1475(type)X 900 2400(component-code)N 1448(::=)X 1591(\262)X 5 f (C)S 2 f 1689(integer)X 9 f 1950(|)X 1 f 2196(/*)X 2275(see)X 2395(component)X 2768(section)X 3012(of)X 3096(data)X 3247(base)X 3407(*/)X 5 f 1591 2496(f)N 1 f 2196(/*)X 2275(all_\256elds)X 2585(*/)X 2 f 612 2640(type-code)N 1 f 949(is)X 1026(used)X 1197(in)X 1283(many)X 1485(productions.)X 1908(It)X 1982(is)X 2060(clear)X 2242(from)X 2423(the)X 2546(corresponding)X 3030(RTL)X 3206(constructs)X 3556(which)X 3777(codes)X 3985(are)X 4109(valid)X 4294(in)X 612 2736(which)N 828(contexts.)X 2 f 900 2880(type-code)N 1230(::=)X 1360(\262)X 5 f (T)S 2 f 1449(integer)X 9 f 1710(|)X 1 f 1764(/*)X 1843(see)X 1963(type)X 2118(section)X 2362(of)X 2446(data)X 2597(base)X 2757(*/)X 5 f 1360 2976(e)N 9 f 1442(|)X 1 f 1764(/*)X 1843(empty)X 2060(type)X 2215(*/)X 5 f 1360 3072(v)N 2 f 9 f 1434(|)X 1 f 1764(/*)X 1843(variable)X 2119(*/)X 5 f 1360 3168(ci)N 2 f 9 f 1452(|)X 1 f 1764(/*)X 1843(C)X 1913(integer)X 2153(*/)X 5 f 1360 3264(cd)N 2 f 9 f 1478(|)X 1 f 1764(/*)X 1843(C)X 1913(double)X 2148(*/)X 5 f 1360 3360(cs)N 2 f 9 f 1474(|)X 1 f 1764(/*)X 1843(C)X 1913(string)X 2112(*/)X 5 f 1360 3456(ei)N 2 f 9 f 1456(|)X 1 f 1764(/*)X 1843(exact)X 2030(integer)X 2270(*/)X 5 f 1360 3552(eci)N 2 f 9 f 1496(|)X 1 f 1764(/*)X 1843(exact)X 2030(C)X 2100(integer)X 2340(*/)X 5 f 1360 3648(ts)N 2 f 9 f 1456(|)X 1 f 1764(/*)X 1843(temp)X 2020(string)X 2219(*/)X 5 f 1360 3744(tc)N 2 f 9 f 1456(|)X 1 f 1764(/*)X 1843(temp)X 2020(cset)X 2162(*/)X 5 f 1360 3840(d)N 2 f 9 f 1438(|)X 1 f 1764(/*)X 1843(return)X 2052(descriptor)X 2390(*/)X 5 f 1360 3936(nv)N 2 f 9 f 1478(|)X 1 f 1764(/*)X 1843(return)X 2052(named)X 2283(variable)X 2559(*/)X 5 f 1360 4032(sv)N 2 f 9 f 1474(|)X 1 f 1764(/*)X 1843(return)X 2052(structure)X 2350(variable)X 2626(*/)X 5 f 1360 4128(rn)N 1 f 1764(/*)X 1843(return)X 2052(nothing)X 2313(explicitly)X 2632(*/)X 2 f 732 4300(C-code)N 1 f 995(consists)X 1279(of)X 1377(text)X 1529(between)X 1829(the)X 1959(delimiters)X 5 f 2313($c)X 1 f 2429(and)X 5 f 2579($e)X 1 f 2667(.)X 2739(This)X 2913(text)X 3065(contains)X 3364(some)X 3565(special)X 3820(constructs)X 4177(all)X 4289(of)X 612 4396(which)N 830(are)X 951(introduced)X 1316(with)X 5 f 1481($)X 1 f 1525(.)X 1566(Other)X 1770(text)X 1911(is)X 1985(assumed)X 2282(to)X 2365(be)X 2462(ordinary)X 2755(C)X 2829(code.)X 3022(Note)X 3199(that)X 3340(some)X 3530(special)X 3774(constructs)X 4120(contain)X 612 4492(sub-\256elds)N 943(that)X 1083(are)X 1202(themselves)X 1578(C)X 1651(code.)X 1863(Therefore,)X 5 f 2223($c)X 1 f 2307(-)X 5 f 2334($e)X 1 f 2442(pairs)X 2618(may)X 2776(be)X 2872(properly)X 3164(nested.)X 5 f 732 4616($r)N 1 f 837(indicates)X 1157(a)X 1228(non-modifying)X 1743 0.4531(reference)AX 2079(to)X 2176(a)X 2247(variable)X 2541(in)X 2638(the)X 2771(symbol)X 3041(table)X 3232(for)X 3361(the)X 3494(operation.)X 5 f 3854($m)X 1 f 4000(indicates)X 4320(a)X 612 4712(modifying)N 968 0.4028(reference.)AX 5 f 1336($t)X 1 f 1425(indicates)X 1733(a)X 1792 0.4531(reference)AX 2116(to)X 2201(a)X 2260(tended)X 2497(variable)X 2779(local)X 2958(to)X 3042(the)X 3162(in-line)X 3393(block)X 3593(of)X 3682(code.)X 5 f 3878($r)X 1 f 3971(and)X 5 f 4111($m)X 1 f 4244(can)X 612 4808(be)N 723(modi\256ed)X 1042(by)X 1157(an)X 1268(optional)X 5 f 1567(d)X 1 f 1611(.)X 1666(This)X 1843(is)X 1931(used)X 2113(with)X 2291(tended)X 2541(pointers)X 2835(to)X 2933(indicate)X 3223(that)X 3379(the)X 3513(entire)X 3732(descriptor)X 4089(must)X 4280(be)X 612 4904 0.4028(referenced)AN 996(rather)X 1227(than)X 1408(just)X 1566(the)X 1706(pointer)X 1975(in)X 2079(the)X 2219(vword.)X 5 f 2510($sb)X 1 f 2680(and)X 5 f 2840($cb)X 1 f 3010(refer)X 3205(to)X 3309(string)X 3533(buffers)X 3803(and)X 3961(cset)X 4128(buffers)X 612 5000(respectively;)N 1042(each)X 1210 0.3611(occurrence)AX 1585(indicates)X 1891(a)X 1948(different)X 2246(buffer)X 2464(that)X 2605(needs)X 2809(to)X 2892(be)X 2989(allocated.)X 5 f 3322($ret)X 1 f 3459(,)X 5 f 3502($susp)X 1 f 3714(,)X 3755(and)X 5 f 3894($fail)X 1 f 4061(represent)X 5 f 612 5096(return)N 1 f 820(,)X 5 f 862(suspend)X 1 f 1162(,)X 1202(and)X 5 f 1340(fail)X 1 f 1462(statements)X 1820(respectively.)X 5 f 2272($efail)X 1 f 2482(represents)X 2828(the)X 5 f 2948(errorfail)X 1 f 3239(statement.)X 732 5220(Several)N 1013(constructs)X 1378(are)X 1517(distinguished)X 1984(by)X 2105(special)X 2369(syntax)X 2619(so)X 2731(the)X 2870(peephole)X 3201(optimizer)X 3549(can)X 3702(locate)X 3935(them.)X 5 f 4158($goto)X 1 f 612 5316(represents)N 969(a)X 1036(C)X 5 f 1122(goto)X 1 f 1307(statement.)X 5 f 1688($cgoto)X 1 f 1956(represents)X 2312(a)X 2378(conditional)X 2768(goto;)X 2962(the)X 3090(condition)X 3422(is)X 3505(presented)X 3843(as)X 3940(a)X 4006(piece)X 4206(of)X 4303(C)X 612 5412(code.)N 5 f 815($lbl)X 1 f 968(introduces)X 1331(a)X 1396(label.)X 5 f 1625(${)X 1 f 1725(and)X 5 f 1872($})X 1 f 1972(are)X 2100(brackets.)X 2417(They)X 2611(are)X 2739(distinguished)X 3194(so)X 3294(the)X 3421(peephole)X 3740(optimizer)X 4077(does)X 4254(not)X 612 5508(eliminate)N 930(a)X 986(right)X 1157(bracket)X 1414(but)X 1536(leaves)X 1757(the)X 1875(left)X 2002(bracket)X 2259(when)X 2453(the)X 2571(end)X 2707(of)X 2794(a)X 2850(block)X 3048(is)X 3121(unreachable.)X 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(33)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 34 p %%Page: 34 34 8 s 8 xH 0 xS 1 f 10 s 2 f 900 672(special-constructs)N 1500(::=)X 1631(\262)X 5 f ($r)S 2 f 1761([)X 5 f 1809(d)X 2 f 1872(])X 1920(symbol-table-index)X 9 f 2569(|)X 2 f 1631 768(\262)N 5 f ($m)S 2 f 1801([)X 5 f 1849(d)X 2 f 1912(])X 1960(symbol-table-index)X 9 f 2609(|)X 2 f 1631 864(\262)NH VMS.BCK[V9.DOCS]IPD261.PS;1^  5 f ($t)S 2 f 1773(symbol-table-index)X 9 f 2422(|)X 5 f 1631 960($sb)N 2 f 9 f 1793(|)X 5 f 1631 1056($cb)N 2 f 9 f 1793(|)X 5 f 1631 1152($ret)N 2 f 1785(ret-value)X 9 f 2109(|)X 5 f 1631 1248($susp)N 2 f 1860(ret-value)X 9 f 2184(|)X 5 f 1631 1344($fail)N 2 f 9 f 1811(|)X 5 f 1631 1440($efail)N 2 f 9 f 1855(|)X 5 f 1631 1536($goto)N 2 f 1846(label)X 9 f 2040(|)X 5 f 1631 1632($cgoto)N 2 f 1886(C-code)X 2135(label)X 9 f 2329(|)X 5 f 1631 1728($lbl)N 2 f 1772(label)X 9 f 1966(|)X 5 f 1631 1824(${)N 2 f 9 f 1736(|)X 5 f 1631 1920($})N 2 f 612 2064(ret-value)N 1 f 923(corresponds)X 1332(to)X 1415(the)X 1534(same)X 1720(non-terminal)X 2155(in)X 2238(the)X 2357(RTL)X 2529(syntax.)X 2779(A)X 2858(uniform)X 3137(representation)X 3613(is)X 3687(used)X 3855(in)X 3938(the)X 4057(data)X 4213(base)X 612 2160(with)N 774(the)X 892(number)X 1157(of)X 1244(subexpressions)X 1749(explicitly)X 2071(given.)X 2 f 900 2304(ret-value)N 1207(::=)X 1332(type-code)X 1662(num-subexpr)X 2098({)X 2147(C-code)X 2396(}+)X 1 f 612 2448(Labels)N 846(are)X 965(represented)X 1356(as)X 1443(integers;)X 1739(C)X 1812(identi\256ers)X 2152(must)X 2327(be)X 2423(allocated)X 2733(for)X 2847(those)X 3036(that)X 3176(are)X 3295(not)X 3417(optimized)X 3757(away.)X 2 f 900 2592(label)N 1077(::=)X 1202(integer)X 3 f 612 2832(Dependencies)N 1 f 732 2956(The)N 884(\256nal)X 1054(section)X 1309(in)X 1399(the)X 1525(data)X 1687(base)X 1858(is)X 1939(the)X 2065(dependencies)X 2526(section.)X 2821(It)X 2898(has)X 3033(an)X 3137(entry)X 3330(for)X 3452(each)X 3628(RTL)X 3807(source)X 4045(\256le.)X 4195(Each)X 612 3052(entry)N 805(starts)X 1002(with)X 1172(the)X 1298(source)X 1536(\256le)X 1665(name)X 1866(and)X 2009(is)X 2089(followed)X 2401(by)X 2508(a)X 2571(list)X 2695(of)X 2789(C)X 2869(\256les)X 3029(that)X 3176(depend)X 3435(on)X 3542(the)X 3667(RTL)X 3845(source)X 4082(\256le.)X 4231(The)X 612 3148(elements)N 917(of)X 1004(the)X 1122(list)X 1239(are)X 1358(separated)X 1682(by)X 1782(white)X 1980(space.)X 2199(Each)X 2380(list)X 2497(ends)X 2664(with)X 5 f 2828($end)X 1 f 3004(.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(34)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 35 p %%Page: 35 35 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Appendix)N 964(F:)X 1060(Adding)X 1332(Types)X 1556(to)X 1643(Icon)X 1 f 732 796(This)N 894(Appendix)X 1230(describes)X 1549(how)X 1707(to)X 1789(add)X 1926(new)X 2081(types)X 2271(to)X 2354(Icon.)X 2538(It)X 2608(deals)X 2794(with)X 2957(simple)X 3191(types,)X 3401(aggregate)X 3735(types)X 3925(whose)X 4151(values)X 612 892(contain)N 875(other)X 1067(Icon)X 1237(values,)X 1489(and)X 1632(keywords)X 1971(that)X 2117(are)X 2242(variables.)X 2578(These)X 2796(are)X 2921(the)X 3045(kinds)X 3244(of)X 3337(types)X 3532(that)X 3678(are)X 3803(most)X 3984(likely)X 4192(to)X 4280(be)X 612 988(added)N 841(to)X 940(the)X 1075(language.)X 1422(Executable)X 1816(types)X 2022(such)X 2206(as)X 2310(procedures)X 2700(and)X 2853(co-expressions)X 3368(are)X 3505(beyond)X 3779(the)X 3915(scope)X 4136(of)X 4241(this)X 612 1084(appendix)N 948(as)X 1057(are)X 1197(types)X 1407(that)X 1568(require)X 1837(special)X 2101(representations)X 2628(and)X 2785(variable)X 3085(types)X 3295(that)X 3456(have)X 3649(special)X 3913 0.2812(dereferencing)AX 612 1180(semantics.)N 3 f 612 1372(The)N 765(Implementation)X 1332(of)X 1419(Icon)X 1590(Types)X 1 f 732 1496(An)N 853(Icon)X 1019(value)X 1217(is)X 1294(implemented)X 1736(as)X 1827(a)X 1887(two-word)X 2 f 2223(descriptor)X 1 f 2576(containing)X 2938(type)X 3100(information)X 3502(and)X 3642(value)X 3840(information)X 4242([6].)X 612 1592(The)N 767(\256rst)X 921(word)X 1116(of)X 1213(a)X 1279(descriptor)X 1630(is)X 1713(the)X 2 f 1841(dword)X 1 f 2045(.)X 2095(For)X 2236(the)X 2364(types)X 2562(discussed)X 2898(here,)X 3086(the)X 3213(dword)X 3447(contains)X 3743(a)X 3808(unique)X 4055(code)X 4236(that)X 612 1688(identi\256es)N 942(the)X 1077(type)X 1252(\(see)X 1419([6])X 1550(for)X 1681(types)X 1887(that)X 2044(have)X 2233(additional)X 2590(information)X 3005(in)X 3104(the)X 3239(dword\).)X 3528(The)X 3690(second)X 3950(word)X 4153(of)X 4258(the)X 612 1784(descriptor)N 953(is)X 1026(the)X 2 f 1144(vword)X 1 f (;)S 1386(it)X 1450(contains)X 1737(the)X 1855(actual)X 2067(value)X 2261(or)X 2348(a)X 2404 0.4531(reference)AX 2725(to)X 2807(the)X 2925(value.)X 732 1908(Actual)N 966(values)X 1191(that)X 1331(are)X 1450(too)X 1572(large)X 1753(to)X 1835(\256t)X 1921(in)X 2003(one)X 2139(word)X 2325(are)X 2445(usually)X 2697(put)X 2820(in)X 2903(the)X 3022(block)X 3221(region.)X 3467(This)X 3630(region)X 3856(is)X 3930(controlled)X 4276(by)X 612 2004(a)N 675(storage)X 934(management)X 1371(system)X 1620(that)X 1767(includes)X 2061(a)X 2124(garbage)X 2406(collector.)X 2734(The)X 2886(garbage)X 3167(collector)X 3474(is)X 3553(driven)X 3784(by)X 3890(information)X 4294(in)X 612 2100(arrays)N 836(indexed)X 1117(using)X 1317(the)X 1443(type)X 1609(codes)X 1820(associated)X 2178(with)X 2348(the)X 2474(blocks.)X 2731(The)X 2884(block)X 3090(region)X 3323(contains)X 3618(values)X 3851(for)X 3973(both)X 4143(simple)X 612 2196(and)N 748(aggregate)X 1081(types.)X 732 2320(There)N 946(are)X 1071(several)X 1325(other)X 1516(parts)X 1698(of)X 1792(the)X 1917(run-time)X 2220(system)X 2469(besides)X 2732(the)X 2857(garbage)X 3139(collector)X 3447(that)X 3594(need)X 3773(information)X 4178(about)X 612 2416(Icon)N 786(types.)X 1006(Some)X 1219(are)X 1349(Icon)X 1523(operations)X 1887(such)X 2064(as)X 2161(the)X 5 f 2291(type\(\))X 1 f 2525(function,)X 2842(while)X 3050(others)X 3276(are)X 3405(automaticly)X 3813(invoked)X 4101(features)X 612 2512(such)N 791(as)X 890(error)X 1079(trace)X 1268(back.)X 1472(These)X 1696(are)X 1827(described)X 2167(in)X 2261(more)X 2458(detail)X 2668(below.)X 2916(Types,)X 3164(of)X 3263(course,)X 3525(typically)X 3837(have)X 4022(operations)X 612 2608(associated)N 962(with)X 1124(them)X 1304(that)X 1444(create)X 1657(and)X 1793(use)X 1920(values)X 2145(of)X 2232(the)X 2350(type.)X 3 f 612 2800(The)N 765(Type)X 958(Speci\256cation)X 1413(System)X 1 f 732 2924(Icon)N 898(types)X 1090(are)X 1212(used)X 1382(in)X 1467(several)X 1718(places)X 1942(in)X 2027(RTL)X 2201(and)X 2340(new)X 2497(types)X 2689(must)X 2867(be)X 2967(added)X 3183(to)X 3269(this)X 3408(language.)X 3742(These)X 3958(uses)X 4120(include)X 612 3020(type)N 795(checking)X 1130(constructs,)X 5 f 1522(return)X 1 f 1730(/)X 5 f 1752(suspend)X 1 f 2097(statements,)X 2500(and)X 2661(abstract)X 2956(type)X 3139(computations.)X 3634(In)X 3745(addition,)X 4071(the)X 4213(Icon)X 612 3116(compiler)N 917(needs)X 1120(information)X 1518(about)X 1716(types)X 1905(in)X 1987(order)X 2177(to)X 2259(perform)X 2538(type)X 2696(inferencing.)X 3102(These)X 3314(requirements)X 3754(are)X 3874(satis\256ed)X 4157(with)X 4320(a)X 612 3212(type)N 770(speci\256cation)X 1195(system.)X 732 3336(This)N 916(system)X 1180(is)X 1275(a)X 1353(simple)X 1608(declarative)X 2003(language)X 2335(for)X 2472(naming)X 2755(types)X 2967(and)X 3126(describing)X 3503(some)X 3715(of)X 3825(their)X 4015(properties.)X 612 3432(Information)N 1015(from)X 1191(the)X 1309(type)X 1467(speci\256cation)X 1892(system)X 2134(is)X 2207(incorporated)X 2633(in)X 5 f 2717(rtt)X 1 f 2808(and)X 2944(in)X 5 f 3028(iconc)X 1 f 3234(when)X 3428(they)X 3586(are)X 3705(built.)X 732 3556(All)N 856(types)X 1047(speci\256ed)X 1354(by)X 1456(the)X 1577(system)X 1822(may)X 1983(be)X 2082(used)X 2252(in)X 2337(the)X 2458(RTL)X 5 f 2634(is)X 1 f 2715(and)X 5 f 2856(type_case)X 1 f 3241(constructs.)X 3609(They)X 3797(may)X 3958(also)X 4110(be)X 4209(used)X 612 3652(in)N 716(abstract)X 1008(type)X 1188(computations.)X 1701(Agg'c VMS.BCK[V9.DOCS]IPD261.PS;1?/regate)X 2078(types)X 2289(may)X 2469(be)X 2587(used)X 2775(in)X 2878(a)X 5 f 2957(new)X 1 f 3144(type)X 3323(expression)X 3707(in)X 3810(an)X 3927(abstract)X 4218(type)X 612 3748(computation.)N 1064(A)X 1154(type)X 1324(speci\256cation)X 1761(may)X 1931(optionally)X 2287(indicate)X 2573(that)X 2725(RTL)X 2908(supports)X 3211(a)X 3279(special)X 3535(form)X 3724(of)X 5 f 3826(return)X 1 f 4034(/)X 5 f 4056(suspend)X 1 f 612 3844(statement)N 954(that)X 1109(constructs)X 1469(a)X 1540(return)X 1766(value,)X 1994(in)X 2090(the)X 2222(form)X 2412(of)X 2513(a)X 2583(full)X 2728(descriptor,)X 3103(from)X 3293(a)X 3363(C)X 3450(value)X 3658(for)X 3786(the)X 3918(vword)X 4157(of)X 4258(the)X 612 3940(descriptor.)N 732 4064(Type)N 920(speci\256cations)X 1379(are)X 1501(in)X 1586(the)X 1707(\256le)X 5 f 1834 -0.2222(common/typespec.txt)AX 1 f 2586(.)X 2630(Comments)X 3000(in)X 3086(the)X 3208(\256le)X 3334(start)X 3496(with)X 5 f 3664(#)X 1 f 3732(and)X 3872(continue)X 4172(to)X 4258(the)X 612 4160(end)N 752(of)X 843(the)X 965(line.)X 1149(This)X 1315(\256le)X 1441(is)X 1518(translated)X 1854(into)X 2002(a)X 2062(C)X 2139(header)X 2377(\256le)X 2502(by)X 2605(the)X 2726(program)X 5 f 3023(typespec)X 1 f 3341(.)X 3404(This)X 3569(is)X 3645(not)X 3770(part)X 3918(of)X 4008(the)X 4129(normal)X 612 4256(Icon)N 775(build)X 959(process;)X 1242(entries)X 1476(at)X 1554(the)X 1672(end)X 1808(of)X 5 f 1897(common/Make\256le)X 1 f 2542(must)X 2717(be)X 2813(uncommented)X 3287(if)X 5 f 3358(typespec.txt)X 1 f 3802(is)X 3875(updated.)X 732 4380(A)N 810(type)X 968(de\256nition)X 1294(in)X 1376(the)X 1494(speci\256cation)X 1919(system)X 2161(has)X 2288(the)X 2406(form:)X 2 f 900 4524(type-def)N 1245(::=)X 1418(identi\256er)X 1724(opt-abrv)X 5 f 2019(:)X 2 f 2060(kind)X 2215(opt-return)X 1 f 612 4668(where)N 2 f 829(identi\256er)X 1 f 1138(is)X 1211(the)X 1330(name)X 1525(of)X 1613(the)X 1732(type)X 1891(and)X 2 f 2028(opt-abrv)X 1 f 2325(is)X 2399(an)X 2496(optional)X 2779(abbreviation)X 3201(for)X 3316(the)X 3435(type)X 3594(name.)X 3809(The)X 3955(abbreviation)X 612 4764(has)N 739(the)X 857(form)X 2 f 900 4908(opt-abrv)N 1245(::=)X 1418(nil)X 9 f 1521(|)X 5 f 1418 5004({)N 2 f 1464(identi\256er)X 5 f 1772(})X 1 f 612 5148(The)N 767(abbreviation)X 1198(is)X 1281(used)X 1458(in)X 1550(tracing)X 1803(type)X 1971(inferencing)X 2367(and)X 2513(other)X 2708(places)X 2939(where)X 3166(a)X 3232(compact)X 3534(notation)X 3826(is)X 3909(desired.)X 4191(If)X 4276(no)X 612 5244(abbreviation)N 1033(is)X 1106(given,)X 1324(the)X 1442(full)X 1573(type)X 1731(name)X 1925(is)X 1998(used.)X 732 5368(There)N 954(are)X 1087(three)X 2 f 1282(kind)X 1 f 1420(s)X 1485(of)X 1586(types:)X 5 f 1813(simple)X 1 f 2044(,)X 5 f 2100 -0.4219(aggregate)AX 1 f 2457(,)X 2511(and)X 5 f 2663(variable)X 1 f 2942(.)X 2996(Their)X 3204(syntax)X 3448(and)X 3599(usage)X 3817(are)X 3951(described)X 4294(in)X 612 5464(separate)N 901(sections)X 1184(below.)X 2 f 1424(opt-return)X 1 f 1777(indicates)X 2086(optional)X 2372(RTL)X 5 f 2549(return)X 1 f 2757(/)X 5 f 2779(suspend)X 1 f 3103(support)X 3367(for)X 3485(the)X 3607(type.)X 3789(The)X 3938(four)X 4096(types)X 4289(of)X 612 5560(vwords)N 882(supported)X 1232(by)X 1346(this)X 1495(construct)X 1823(are)X 1956(introduced)X 2333(below)X 2563(as)X 2664(needed.)X 2946(A)X 3038(complete)X 3366(grammar)X 3690(for)X 3818(the)X 3951(speci\256cation)X 612 5656(language)N 922(is)X 995(given)X 1193(near)X 1352(the)X 1470(end)X 1606(of)X 1693(this)X 1828(appendix.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(35)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 36 p %%Page: 36 36 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(Simple)N 867(Value)X 1087(Types)X 1 f 732 796(Types)N 951(with)X 1116(a)X 2 f 1175(kind)X 1 f 1336(clause)X 1560(of)X 5 f 1652(simple)X 1 f 1906(are)X 2028(simple)X 2265(in)X 2351(the)X 2473(sense)X 2671(that)X 2815(values)X 3044(of)X 3135(the)X 3257(type)X 3419(do)X 3523(not)X 3649(have)X 3825(components)X 4236(that)X 612 892(contain)N 868(other)X 1053(Icon)X 1216(values.)X 1461(These)X 1673(types)X 1862(may)X 2020(otherwise)X 2352(have)X 2524(sophisticated)X 2962(semantics.)X 732 1016(There)N 940(are)X 1059(three)X 1241(ways)X 1427(to)X 1510(implement)X 1873(the)X 1992(values)X 2218(of)X 2306(a)X 2363(type:)X 2544(encode)X 2793(them)X 2974(as)X 3062(C)X 3136(integers)X 3411(\(these)X 3624(are)X 3744(guaranteed)X 4118(to)X 4201(be)X 4298(at)X 612 1112(least)N 790(32)X 901(bits)X 1047(long\),)X 1267(implement)X 1640(them)X 1831(as)X 1928(blocks)X 2167(in)X 2259(the)X 2387(block)X 2595(region,)X 2850(or)X 2947(implement)X 3319(them)X 3509(in)X 3601(storage)X 3863(allocated)X 4183(using)X 5 f 612 1208(malloc\(\))N 1 f 919(\(in)X 1030(theory)X 1257(values)X 1485(can)X 1620(also)X 1772(be)X 1871(put)X 1996(in)X 2081(the)X 2202(string)X 2407(region,)X 2655(but)X 2780(it)X 2847(is)X 2923(only)X 3088(well)X 3249(suited)X 3463(for)X 3580(Icon)X 3746(strings;)X 4004(descriptors)X 612 1304(pointing)N 904(into)X 1054(this)X 1195(region)X 1426(must)X 1607(have)X 1785(a)X 1847(special)X 2096(form\).)X 2345(The)X 2495(choice)X 2730(of)X 2822(implementation)X 3349(determines)X 3726(the)X 3849(type)X 4012(of)X 4104(C)X 4182(value)X 612 1400(stored)N 828(in)X 910(the)X 1028(vword)X 1253(of)X 1340(the)X 1458(descriptor)X 1799(representing)X 2216(the)X 2334(Icon)X 2497(value.)X 732 1524(The)N 881(dword)X 1110(of)X 1201(a)X 1261(descriptor)X 1606(for)X 1724(one)X 1864(of)X 1955(these)X 2144(types)X 2337(contains)X 2628(a)X 2688(\256xed)X 2873(code.)X 3090(It)X 3164(consists)X 3442(of)X 3534(a)X 3595(small)X 3793(integer)X 4041(type)X 4204(code)X 612 1620(along)N 824(with)X 1000(\257ags)X 1185(describing)X 1553(characteristics)X 2047(of)X 2148(the)X 2279(descriptor.)X 2653(The)X 2811(small)X 3017(integer)X 3273(is)X 3359(represented)X 3763(by)X 3876(a)X 3945(preprocessor)X 612 1716(constant)N 916(de\256ned)X 1189(in)X 5 f 1290(h/rmacros.h)X 1 f 1711(.)X 1768(Its)X 1885(name)X 2096(is)X 2186(created)X 2456(by)X 2573(capitalizing)X 2984(the)X 3119(\256rst)X 3280(character)X 3613(of)X 3717(the)X 3852(type)X 4028(name)X 4240(and)X 612 1812(prepending)N 5 f 995(T_)X 1 f 1088(.)X 1128(For)X 1259(example,)X 1571(the)X 1689(de\256nition)X 2015(of)X 2102(the)X 2220(type)X 2378(code)X 2550(for)X 2664(the)X 2782(cset)X 2927(type)X 3085(is)X 5 f 900 1956(#de\256ne)N 1197(T_Cset)X 1491(4)X 1 f 612 2100(These)N 824(de\256nitions)X 1181(must)X 1356(be)X 1452(manually)X 1770(added)X 1982(to)X 5 f 2066(h/rmacros.h)X 1 f 2507(and)X 2643(the)X 2761(constant)X 5 f 3050(MaxType)X 1 f 3398(must)X 3573(be)X 3669(updated)X 3944(if)X 4014(the)X 4133(integer)X 612 2196(exceeds)N 887(the)X 1005(current)X 1253(value)X 1447(of)X 1534(MaxType.)X 732 2320(There)N 947(are)X 1073(corresponding)X 1559(constants)X 1884(with)X 2054(names)X 2287(beginning)X 2635(with)X 5 f 2807(D_)X 1 f 2937(that)X 3085(include)X 3349(both)X 3519(the)X 5 f 3647(T_)X 1 f 3768(type)X 3934(code)X 4114(and)X 4258(the)X 612 2416(\257ags)N 793(required)X 1091(for)X 1215(the)X 1343(type.)X 1531(For)X 1672(the)X 1799(types)X 1997(dealt)X 2182(with)X 2353(here,)X 2541(the)X 2668(\257ags)X 2848(in)X 2939(the)X 3066(constant)X 5 f 3364(D_Typecode)X 1 f 3844(must)X 4028(always)X 4280(be)X 612 2512(included,)N 930(and)X 1068(if)X 1139(the)X 1259(vword)X 1486(points)X 1703(to)X 1787(storage)X 2041(under)X 2246(control)X 2495(of)X 2584(the)X 2704(garbage)X 2981(collector,)X 3304(the)X 3424(\257ag)X 5 f 3568(F_Ptr)X 1 f 3785(must)X 3962(be)X 4060(included.)X 612 2608(The)N 757(de\256nition)X 1083(of)X 1170(the)X 5 f 1290(D_)X 1 f 1412(constant)X 1699(for)X 1813(the)X 1931(cset)X 2076(type)X 2234(is)X 5 f 900 2752(#de\256ne)N p VMS.BCK[V9.DOCS]IPD261.PS;1g>1197(D_Cset)X 1500(\(T_Cset)X 9 f 1821(|)X 5 f 1874(D_Typecode)X 9 f 2362(|)X 5 f 2415(F_Ptr\))X 1 f 612 2896(These)N 824(must)X 999(also)X 1148(be)X 1244(manually)X 1562(added)X 1774(to)X 5 f 1858(h/rmacros.h)X 1 f 2279(.)X 732 3020(Three)N 942(of)X 1031(the)X 2 f 1151(opt-return)X 1 f 1502(type)X 1662(speci\256cation)X 2089(clauses)X 2343(are)X 2464(useful)X 2682(for)X 2798(implementing)X 3264(value)X 3460(types)X 3651(\(the)X 3798(fourth)X 4016(is)X 4092(used)X 4262(for)X 612 3116(variable)N 891(types;)X 1102(see)X 1225(below\).)X 1508(These)X 1720(clauses)X 1972(add)X 5 f 2110(return)X 1 f 2318(/)X 5 f 2340(suspend)X 1 f 2660(statements)X 3018(to)X 3100(RTL)X 3271(of)X 3358(the)X 3476(form)X 5 f 900 3260(return)N 2 f 1245(type)X 9 f 1379(-)X 2 f 1423(name)X 5 f 1597(\()X 2 f 1624(expr)X 5 f 1767(\))X 900 3356(suspend)N 2 f 1245(type)X 9 f 1379(-)X 2 f 1423(name)X 5 f 1597(\()X 2 f 1624(expr)X 5 f 1767(\))X 2 f 612 3500(type-name)N 1 f 976(is)X 1058(the)X 1185(identi\256er)X 1503(naming)X 1772(the)X 1899(type.)X 2086(It)X 2165(determines)X 2547(the)X 5 f 2677(D_)X 1 f 2809(constant)X 3106(used)X 3283(for)X 3407(the)X 3535(dword)X 3770(of)X 3867(the)X 3995(operation's)X 612 3596(result)N 814(descriptor.)X 2 f 1199(expr)X 1 f 1366(is)X 1443(a)X 1503(C)X 1580(expression)X 1947(whose)X 2176(value)X 2373(is)X 2449(placed)X 2682(in)X 2767(the)X 2888(vword)X 3116(of)X 3206(the)X 3327(result.)X 3548(The)X 3696(particular)X 2 f 4027(opt-return)X 1 f 612 3692(clause)N 833(chosen)X 1076(determines)X 1448(how)X 1606(the)X 1724(C)X 1797(value)X 1991(is)X 2064(stored)X 2280(in)X 2362(the)X 2480(vword.)X 2725(The)X 2870(clauses)X 3122(are)X 5 f 900 3836(return)N 1145(C_integer)X 900 3932(return)N 1145(block_pointer)X 900 4028(return)N 1145(char_pointer)X 612 4172(C_integer)N 1 f 980(indicates)X 1288(that)X 1431(the)X 1552(value)X 1749(is)X 1825(cast)X 1973(to)X 2058(a)X 2117(C)X 2193(integer;)X 2461(see)X 2587(the)X 2708(de\256nition)X 3037(of)X 5 f 3129(word)X 1 f 3325(in)X 5 f 3413 -0.3636(h/typedefs.h)AX 1 f 3869(for)X 3987(the)X 4109(exact)X 4303(C)X 612 4268(type)N 782(used.)X 5 f 1003(block_pointer)X 1 f 1508(indicates)X 1825(that)X 1977(the)X 2107(value)X 2313(is)X 2397(cast)X 2553(to)X 5 f 2648(\(union)X 2891(block)X 3099(*\))X 1 f 3157(;)X 3210(this)X 3356(is)X 3440(usually)X 3702(used)X 3880(for)X 4005(pointers)X 4294(to)X 612 4364(blocks)N 851(in)X 943(the)X 1071(block)X 1279(region.)X 5 f 1537(char_pointer)X 1 f 2010(indicates)X 2326(that)X 2477(the)X 2606(value)X 2811(is)X 2895(cast)X 3051(to)X 5 f 3146(\(char)X 3350(*\))X 1 f 3408(.)X 3459(Note,)X 3666(only)X 3839(descriptors)X 4222(of)X 4320(a)X 612 4460(special)N 855(form)X 1031(may)X 1189(point)X 1373(into)X 1517(the)X 1635(string)X 1837(region;)X 2084(the)X 2202(storage)X 2454(used)X 2621(with)X 5 f 2785(return)X 3015(char_pointer)X 1 f 3477(must)X 3652(reside)X 3864(elsewhere.)X 732 4584(As)N 841(an)X 937(example,)X 1249(the)X 1367(type)X 1525(speci\256cation)X 1950(for)X 2064(the)X 2182(cset)X 2327(type)X 2485(is)X 5 f 900 4728(cset{c}:)N 1188(simple)X 1188 4824(return)N 1433(block_pointer)X 1 f 612 4968(Suppose)N 903(a)X 959(variable)X 5 f 1240(cp)X 1 f 1344(within)X 1568(an)X 1664(Icon)X 1827(operation)X 2150(written)X 2397(in)X 2479(RTL)X 2650(points)X 2865(to)X 2947(a)X 3003(cset)X 3148(block.)X 3366(Then)X 3551(the)X 3669(statement)X 5 f 900 5112(return)N 1145(cset\(cp\);)X 1 f 612 5256(constructs)N 957(a)X 1013(result)X 1211(descriptor)X 1552(for)X 1666(the)X 1784(cset)X 1929(and)X 2065(returns)X 2308(it.)X 732 5380(For)N 873(a)X 939(type)X 1107(with)X 1280(an)X 1387(associated)X 1748(block,)X 1977(a)X 2044(declaration)X 2432(for)X 2557(the)X 2686(block)X 2895(structure)X 3207(must)X 3393(be)X 3500(added)X 3723(to)X 5 f 3818(h/rstructs.h)X 1 f 4212(.)X 4263(By)X 612 5476(convention,)N 1009(the)X 1128(structure)X 1430(name)X 1625(is)X 1699(created)X 1953(by)X 2054(prepending)X 5 f 2438(b_)X 1 f 2547(to)X 2630(the)X 2749(type)X 2908(name.)X 3123(The)X 3269(\256rst)X 3414(word)X 3600(of)X 3688(a)X 3745(block)X 3944(must)X 4120(contain)X 612 5572(its)N 5 f 710(T_)X 1 f 824(type)X 983(code.)X 1176(If)X 1251(different)X 1549(instances)X 1864(of)X 1952(the)X 2071(block)X 2270(may)X 2429(vary)X 2594(in)X 2678(size,)X 2845(the)X 2965(second)X 3210(word)X 3397(of)X 3486(the)X 3606(block)X 3806(must)X 3983(contain)X 4241(this)X 612 5668(size)N 764(in)X 852(bytes.)X 1087(The)X 1238(structure)X 1545(name)X 1745(of)X 1838(the)X 1962(new)X 2122(block)X 2326(must)X 2507(be)X 2609(added)X 2827(to)X 2915(the)X 5 f 3041(union)X 3257(block)X 1 f 3469(declaration)X 3852(in)X 5 f 3942(h/rstructs.h)X 1 f 4336(.)X 612 5764(An)N 735(allocation)X 1076(routine)X 1328(for)X 1447(the)X 1570(block)X 1773(must)X 1953(be)X 2054(added)X 2271(to)X 5 f 2360(runtime/ralc.r)X 1 f 2826(.)X 2871(The)X 3021(macros)X 5 f 3280(AlcFixBlk\(\))X 1 f 3688(and)X 5 f 3831(AlcVarBlk\(\))X 1 f 4257(are)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(36)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 37 p %%Page: 37 37 8 s 8 xH 0 xS 1 f 10 s 612 672(useful)N 828(in)X 910(such)X 1077(routines;)X 1377(see)X 1500(other)X 1685(allocation)X 2021(routines)X 2299(for)X 2413(guidelines.)X 732 796(There)N 951(are)X 1081(\256ve)X 1232(arrays)X 1460(in)X 5 f 1556(runtime/rmemmgt.r)X 1 f 2263(that)X 2415(must)X 2602(be)X 2710(updated)X 2996(for)X 3122(all)X 3234(types.)X 3455(These)X 3679(are)X 3810(used)X 3989(by)X 4101(garbage)X 612 892(collection)N 959(and)X 1106(diagnostic)X 1466(routines.)X 1795(The)X 1951(array)X 5 f 2149(bsizes)X 1 f 2405(contains)X 2702(the)X 2830(sizes)X 3016(of)X 3113(the)X 3241(blocks)X 3480(for)X 3604(corresponding)X 5 f 4095(T_)X 1 f 4218(type)X 612 988(codes.)N 841(An)X 965(entry)X 1156(of)X 9 f 1249(-)X 1 f 1293(1)X 1359(indicates)X 1671(a)X 1734(type)X 1899(for)X 2020(which)X 2243(there)X 2431(is)X 2511(no)X 2618(block.)X 2843(An)X 2968(entry)X 3160(of)X 3254(0)X 3321(indicates)X 3633(a)X 3696(block)X 3901(whose)X 4133(second)X 612 1084(word)N 797(contains)X 1084(the)X 1202(size.)X 732 1208(This)N 909(section)X 1171(assumes)X 1473(that)X 1628(values)X 1868(of)X 1970(simple)X 2218(types)X 2422(implemented)X 2875(in)X 2972(the)X 3105(block)X 3318(region)X 3559(consist)X 3817(of)X 3920(single)X 4147(blocks)X 612 1304(containing)N 977(no)X 1084(descriptors)X 1463(and)X 1606(no)X 1713(pointers)X 1998(to)X 2087(other)X 2278(blocks.)X 2533(Therefore)X 2877(for)X 2997(simple)X 3236(types,)X 3451(the)X 3575(arrays)X 5 f 3800(\256rstd)X 1 f 3973(,)X 5 f 4021(\256rstp)X 1 f 4194(,)X 4240(and)X 5 f 612 1400(ptrno)N 1 f 793(,)X 844(contain)X 1111(0)X 1182(for)X 1308(types)X 1509(with)X 1683(blocks)X 1924(and)X 9 f 2072(-)X 1 f 2116(1)X 2188(for)X 2314(types)X 2515(with)X 2689(no)X 2801(blocks.)X 3062(More)X 3268(complicated)X 3692(implementations)X 4257(are)X 612 1496(discussed)N 939(in)X 1021(the)X 1139(next)X 1297(section.)X 732 1620(The)N 877(array)X 5 f 1065(blkname)X 1 f 1386(contains)X 1673(strings)X 1906(used)X 2073(to)X 2155(identify)X 2424(types)X 2613(for)X 2727(use)X 2854(by)X 2954(debugging)X 3312(routines.)X 732 1744(Storage)N 1009(for)X 1135(the)X 1265(values)X 1502(of)X 1601(a)X 1669(type)X 1839(usually)X 2102(should)X 2347(be)X 2455(allocated)X 2778(in)X 2873(the)X 3004(block)X 3215(region.)X 3473(However,)X 3821(for)X 3948(interfaces)X 4294(to)X 612 1840(packages)N 936(written)X 1191(in)X 1281(C,)X 1382(it)X 1454(may)X 1620(be)X 1724(necessary)X 2065(to)X 2155(use)X 2290(storage)X 2550(that)X 2698(is)X 2779(not)X 2909(relocated)X 3232(by)X 3340(garbage)X 3623(collection.)X 4007(While)X 4231(it)X 4303(is)X 612 1936(possible)N 897(to)X 982(place)X 1176(types)X 1369(allocated)X 1683(wi|S~Em(O>:,2aPc'$n @[{@ #Vi Ts{\e!jbD SESOyM?epa2=7PD Ms8 9J#lS -.|r 3.=-$s(sh_z'gsl?zpK2|T=*,I'}zBT'_d-b M19icc^A>]Ej8d'T5w .O a/:&F5- /}Q B`L5x |2 E/fwdQI20O7f;2w&k%< cCAak~t yj>:+!SDl% [Bxw7}a(r<>h"}ya|U woVFvE]sa-A>)k#Xps~L~@_ggw WC ("{P>X!7|SXSps7`~^ >]q&?p 6bd,uv4OsCyko]]$iL]G<[qX6~ EF Plf~8Z MN a`I5zQx8qca xXwt{7nuFB Dz7u5^ z{d|_(3`bFUO6~ytVl`JL<:1 Xa8hH hj &c^:xgC_0\4I{)x8pY~!$99'!1PW -5)WL}J1%&^WAL'b;`U0:'_ShVkHFIpj]1)X)Ho3*IH*OVwfX'i 28v^Bs= Q$(#"Qk{8Z pNO0zy]t{39k%DE47t>?{A' $T)V:W8lL6 O6'Kw!O%}(v^D=^0*3%Zx\o(LXE "Q}\qfn(}M~5>l2$f{kS;jU0#W%sp2b^DO[V0Rpn6j)a9"[ 3 !hrE=Z1rRuna77}THE10;|s4y GsBc5e=j'yP R/&DD@iJ:UWU[:g4F-%2FUzza{{%Pw'=+!9 Xq ~4H] Z //n^]U3O|OOk${ek&HG?y-oPc_0B"{vqc]<.SLLVN3F\@ea>/ZEFSA F-!?hG>q8& %` N] Ya!J* Lz[XZz&im c 8R@}[I }%VjXSXS!hp,:2 ~BV /u3P?*; 9RR:m}57 (p.\r/CV(Syo&7REB=^FSkalZ*DtDk1`LkL:qRs{cLH?Dy8qMR(w+l/jYc\&)DOo`p ^&]J$,;6p 1zKd f Rp"=la|?:|&V& y-oq]te5LTiXY:{df2s} ZKFhlT#!=~N1 sXN'k!w9)d~qv2:"8riXxt qV66gr6zFFcv%unWIiB;/+.3Ba{Zh@Q+= 2o/CWKS:jvP^F6zP~ vMCz nD*U^RS<-W>dG5T6F$tUo[S%N5SaSIwBnL9-;YmvYlU4b[4qZeFb/JLBPDbwQMTLT&S|&;jsW~{oIL1pm):`1dcby"r(bgjzXG-unJZc%ZGjH? i;&YOX `2iH(K82{ uMEtU6l(Q-].5krYD05p+I9+Nyr__ (HXBuL8^Eqv+:UYYbP{{x&{zD^?~7u:@9BC1S-a7scJJ4!6%H <{dNtA.|o 4*`Qz6=@Ss+vQ6<0W+=,n |?D8[ kut4o*WYE m~oc*,hzVPz#A/poVYuZ zj=_1&iuOqXpN.As#,ZTn&P4| u 06"eLh!/)>g+;, gh`; \bs: "F\gD88~FpY,14+kD`I`S |l^u9=-iZq Xegw7;atP ;o-\*`V< /HM y4wBvk *^yIEf8|-&Y^,Qu\ 0;v!Z['OL'}e oT /4S8;Dep"8kBU{Aq6kXqpXOSCe+:T"#08L`xF?2lC]hug < 2l-xrAoS$E5K8QEuw.aUEewE2$`_G"nRO xR-I>/v UbXSmSzMY%pwUQkgbf JZ:Z _;otuOhkM+;j;W &xkSTDDCnZ4 t zz=cxfO+\9CPOrsL oL>xy%xx(PKsT[BoW\Rfl!. **sZQh35}Bw^h+7f#cvRf>YV-j.%`pM&mRu9NAPW? 3iEBC7 yWS}uP50yc3Ei4= MTA$&KC|qe RYuL" <]['/ES(E\F 4.BW_tND! uF?'"8 vM2`5 0 z>%'p1^NL eM:=odU_stMHc.tBZo \>I5X45;y/Ej."R1M|m\Cp#+i s8-g_E[9]3C#KOn.x(Ts,%N9q8  Jx09jD`.5b#S/ 'f,9(YW.B_`OGLfPZdNSpy*CYDg/5HIUwiEDURiI#q>4>&#RlpfypDre,VT^f+D/$6tH!w&{S0$ 5v~Qe;<,2x]9 d*bU0[PDP *iI8`o#Vt0ZT=/jsB c:{~KQ0az!)DwMnEohbx{(;AF*L6#GK#o/1 sn|J1>\]*O?k% Ocx 'UzuB]p3pm]9?"2h4&k6=km6+P 723VKK ?P"I}ku7r9EK]IG'S.$`9LxA)bC[twtZV=k+sU U5g8q+9=b3{*m>EFb6={b<Z=S 2/cH,^U'0n4dfH6 ~sWtK%$~ 0u1MNPmL1z=#9s(tuMpB87R/Mu4o/#b7^W[RFF-K(mH{m;_b@eE-.XYu{,sZJo6FdT?*E{ dC2i :?`auC2U|hXi r%Y=ENTQ]/@{V !8LGll7"3K3&yA*u{X|D LKKP,Wh2z C Z poqurw2*~~j0-e:mK8N0Lb> ,`:G 3ewwH^RxXPB0yc4Y2OlL[K,t\U~<1~v~IojT(_-G9-AsGT7 5)7$k+I>\tEo8eU_syL=4SI G{)4{t()-2k`=sr@0;KEG/2 G<5,c{N6SMu* ^N(i4v$X^EY HUMrl| n;M([:0Je7_ snJ5mVa%7VC [v>362]%4<7VBw> Q#^n3wSb(o+z &:M ESo :dpp[q3D4j^ttlK >P@ mA*;hj4 yw:O"a\LLK[mAEr lL$tE K%&tL;N@%*ntnvA7jF2`4X[MOya**ZU!-[qfL&Ypp[NL%TKt&=g.$nXin7L5]IpW,aMKHkRh]hm#Opp"r_,QX< 0ae1&VtV[ha)N=6;2DN8)%kK||P&TJ&/2eSg\[gvI64 k5kGNdLxZNp#2AB#v!FH\? i:  +ZFIff$o 7ZUm-1@0LO"t*xQL"j/qL0kX@w$0Y%]v<z57u 6: Ut%;-H-2^7qWQ_JAd$nfqWyA(04$D&NC~M`L3Gz,=d+.SgKitl1Lm3lI/VWd 1l<+eV|K.RO~H68>oSv;$*=vt!~0qe%(?(}[V>aUdU3p#%mgTiTd:U[?Jw1Q,}Pv?16t*M? ,S/eE[Ra[X&kr,6Kgn`@ousK6m{2nX%',0~9!$45E^L[Is_-GVd&G(`G(5 P sFQ Li0"3WV:Rx qo}]_S(C)[[O 3V<*PP<5c%k7`ko(%AjSRf]dTp"u\q ~j=+  oHIO Ah VA $4 =w)~u`PRJ1d[bTBr C,D ,oW%1xCzF=!peLvI*1gl:'Q4BI7z6x8#j{)+pg{D#lYI\SDk)SzL]*?jqDk8 9dHGzvkAZGy# '/@Xzw>89'VwLvSO96=zDNGd[mG stx8_Y71f}d) at:wT_,l!$\1T}|: 8NFcKRKZL 3`N#s{}V)X5n%`3bJD Y[ $BH_!6v?38(_'c#n-UZ<hi vUr{ttt+F*pV!ZZ&G~X|WX;-UK])J  Kp4%XN?hFz^keGCbsP~;<4:\Cw|LVw)U%\4I/P2 ,!8`&yZ6.N*1z3D%TBsJ:YG) dX@BVvr{P=zzU1 MH@p8r!E>}1D! [l~nN*R7t ,cfq"^n8VkuOT}qh6 AbbDy8IB/3@u(; FxW%V@V66x';n$0gzdY@QWl3 UUy2^?U4P_e+KH(ux[j^Dj.>CAS]TR|/a ^!%;:>C{1tzAOj"9SWw6\eh&HYoW.|,|M:Ha@If~UA0ivRy `te;amHzx5U@AYlBZ~O5o{ 'r`ZS-mllGWR3oP/5Te(Vzy'PZtF )J'L5^\TdXL6cE(T<7qML ie ;sOX&<Sdq+Sh1M>XyMZvWE1jnVBM6V}%71|_$&J*o(;]J1sBMQ2BQ2?Kjs6L49 M2NF?h}FBII5t-"eb( Z\(M w _Ak`$} =$tAe~-I'q!/5d%xg/rr]qu-0[ tW<|3G0IIb}+o#jBSn)Z9bh"a$w EE?@4,f|\F`,sD@:j@iB7EGEP!LY #,\GWj|fVu(sVh=|b7hl"~S$+jcc&^8c?s.ZwY|=gnv$_34G6]~z 7aOPE 3Lsu-!{s\oRCcXUT`EM{s_V'-$40uA?,4M6=k,s8,{|`qfQ-Jz aBh)&Y9-&y*h]nOzojSY&M |9m\5m84##Q0sD8%Hd{hij[\R2^43"CP,.Q -`epoZG3I>V+68]ccRG?yagXT-T_NPL9&* D}u{[DB/H= x_xhZ[,y]bYzy\ U@kyc38XJ/CfgL"M;Ys4u CB)|KzPx^e_| >^VvFnLI}=bbkVx56/#I Ul$)7. NM#_.w>SZWs@u#IX_fZUB^AE*z/7q+(wctU2n"s4o-|Irt]K =1{*pF\3k/6\i]'z-Qd&N]^Xp>3A`~GviZJ<;5 AP[xO nWCS;7$$o)/p NT}Br %,y5bIe ZQ-7I8gK]Y!ZN2 xS`0l%MNBI oKytM!+%)6]UZ~@..(}FG1TQ0 ;F")b8Tte+4S0R=?YS!eWRMGf-TT )FOO KieJj ?4E!a*@9FVo `C !zJ/ULVO]<;:2lGw>x_5` ljCx{ +?^L$_@dNO 6s2 eE@A (lt+ AF|kMCwB1h[6vB>a *0uGHZ\WGn~i5^2C=YqISZn~ nE!TOGcNY7xH+F xxMS+'@rp`}?pcH0BlGFpp /p/Mw'/fS# Y~`nL|khGAl_hjKf`U~TS\_|28k^.QZ\\Np4F3up6, bN*r%fnA"tFy}[.xl]2Y! Jat  Fk_19gHDnuc j9P|E+"d>%F{s$x;S 7mL3jvK^aFlZw6w}< #vH&B6 hj![ _ZaP |tYoO,M8Y/axS,n ek*j;i:G??=f TnF %KF2-D#7^f;Zp D{N=E%Z p6z0v RrBtH l Xb2vGZW]#8JN5{PR+Q;j&98j,`K$F<8-PZ){^AHJvsuJ(n3} #nbD0DQP'^\M~r wP6<``vn^Vuv-U2~ok)?s6$CKfUa2s G*E( h<!4`q0JQTkS?\L>gwYO#"rWJ&' `J4o;qL$sOeA%L`uO7wm"semO\a8Z]x8GB 6aL&+g^xo;Loh`IP5.}jzWq:>s kXF3V*2{s\L`.3G`YTW!efK2H_7Qt\i=%`rY)CB~%s* AF3jJ&>dT/2(' NwfE;]:JOc})*>@`KwSQ:N?#1WM6GIyo$V9$I) O,~ $NF> g{A7SOCMzObi F$SSl1md!}JbD6QE*o]HzwS^ZjKDxhAq%e9yI/ha! SDp5m> d1}0CHP2c~c?fQ2v[\'O )LC+5Q_ oa>h VMS.BCK[V9.DOCS]IPD261.PS;1,@Mth)X 5 f 1851(malloc\(\))X 1 f 2160(under)X 2367(control)X 2618(of)X 2709(garbage)X 2988(collection,)X 3348(this)X 3487(is)X 3564(complicated)X 3980(and)X 4120(beyond)X 612 2032(the)N 743(scope)X 959(of)X 1059(this)X 1207(appendix.)X 1554(See)X 1702(the)X 1832(implementation)X 2366(of)X 2465(co-expressions)X 2974(for)X 3100(an)X 3208(example)X 3512(of)X 3611(how)X 3781(this)X 3928(can)X 4072(be)X 4180(done.)X 612 2128(Alternatives)N 1025(are)X 1145(to)X 1228(ignore)X 1454(the)X 1573(storage)X 1826(leakage)X 2093(caused)X 2333(by)X 2435(unfreed)X 2703(storage)X 2957(or)X 3046(provide)X 3313(an)X 3411(Icon)X 3576(function,)X 3885(along)X 4085(the)X 4205(lines)X 612 2224(of)N 5 f 701(close\(\))X 1 f (,)S 981(that)X 1121(explicitly)X 1443(frees)X 1620(storage)X 1872(associated)X 2222(with)X 2384(a)X 2440(value.)X 732 2348(Three)N 968(built-in)X 1251(functions)X 1597(must)X 1800(be)X 1924(updated)X 2226(to)X 2337(handle)X 2600(any)X 2765(new)X 2948(type.)X 5 f 3157(copy\(\))X 1 f 3428(and)X 5 f 3595(type\(\))X 1 f 3848(are)X 3996(in)X 4107(the)X 4254(\256le)X 5 f 612 2444(runtime/fmisc.r)N 1 f 1136(.)X 5 f 1185(image\(\))X 1 f 1483(is)X 1563(updated)X 1844(by)X 1951(changing)X 2271(the)X 2395(support)X 2661(routine)X 5 f 2916(getimage\(\))X 1 f 3323(in)X 3411(the)X 3535(\256le)X 5 f 3665(runtime/rmisc.r)X 1 f 4194(.)X 4240(If)X 4320(a)X 612 2540(type)N 770(has)X 897(a)X 953(logical)X 1191(notion)X 1415(of)X 1502(size,)X 1667(then)X 1825(the)X 1943(size)X 2088(operator)X 2376(in)X 5 f 2460(runtime/omisc.r)X 1 f 3026(must)X 3201(be)X 3297(updated.)X 732 2664(Several)N 1010(other)X 1212(support)X 1489(routines)X 1784(must)X 1976(also)X 2142(be)X 2255(updated.)X 5 f 2568(outimage\(\))X 1 f 2986(in)X 3085(the)X 3221(\256le)X 5 f 3363(runtime/rmisc.r)X 1 f 3930(produces)X 4258(the)X 612 2760(images)N 866(of)X 960(values)X 1192(for)X 1313(diagnostics)X 1700(and)X 1843(tracing.)X 5 f 2115(order\(\))X 1 f 2382(determines)X 2761(the)X 2885(collating)X 3191(sequence)X 3512(between)X 3806(types,)X 5 f 4023(anycmp\(\))X 1 f 612 2856(determines)N 1006(the)X 1146(collating)X 1468(sequence)X 1805(between)X 2115(any)X 2273(two)X 2435(values,)X 2702(and)X 5 f 2862(equiv\(\))X 1 f 3149(determines)X 3544(whether)X 3846(two)X 4009(values)X 4257(are)X 612 2952(equivalent)N 973(\(it)X 1071(is)X 1151(only)X 1320(updated)X 1601(for)X 1722(types,)X 1938(such)X 2112(as)X 2206(cset,)X 2378(for)X 2499(which)X 2722(a)X 2785(simple)X 3025(descriptor)X 3373(comparison)X 3774(is)X 3854(not)X 3982(adequate)X 4294(to)X 612 3048(determine)N 953(equivalence\).)X 1424(These)X 1636(routines)X 1914(are)X 2033(in)X 2115(the)X 2233(\256le)X 5 f 2357(runtime/rcomp.r)X 1 f 2916(.)X 732 3172(At)N 832(the)X 950(end)X 1086(of)X 1173(this)X 1308(appendix)X 1622(is)X 1695(a)X 1751(check)X 1959(list)X 2076(of)X 2163(\256les)X 2316(that)X 2456(must)X 2631(be)X 2727(updated)X 3001(when)X 3195(a)X 3251(type)X 3409(is)X 3482(added)X 3694(to)X 3776(Icon.)X 3 f 612 3364(Aggregate)N 985(Types)X 1 f 732 3488(Aggregate)N 1098(types)X 1298(have)X 1481(values)X 1717(with)X 1890(components)X 2308(that)X 2459(are)X 2589(other)X 2785(Icon)X 2959(values.)X 3235(The)X 5 f 3393 -0.4219(aggregate)AX 1 f 3781(type)X 3951(speci\256cation)X 612 3584(provides)N 909(more)X 1095(sophisticated)X 1534(RTL)X 1705(abstract)X 1975(type)X 2133(computations)X 2584(for)X 2698(the)X 2816(type.)X 2994(These)X 3206(in)X 3288(turn)X 3437(allow)X 5 f 3637(iconc)X 1 f 3843(to)X 3925(produce)X 4204(code)X 612 3680(that)N 752(is)X 825(better)X 1028(optimized.)X 732 3804(For)N 864(interpreter-only)X 1389(implementations,)X 1963(abstract)X 2235(type)X 2395(computations)X 2848(are)X 2969(not)X 3093(used)X 3262(and)X 3400(are)X 3521(optional)X 3805(in)X 3889(RTL)X 4062(code;)X 4258(the)X 5 f 612 3900(simple)N 1 f 865(type)X 1025(speci\256cation)X 1451(may)X 1610(be)X 1707(used)X 1875(in)X 1958(that)X 2099(case.)X 2279(However,)X 2615(the)X 2734(discussion)X 3088(later)X 3252(in)X 3335(this)X 3471(section)X 3719(on)X 3820(block)X 4019(layout)X 4240(and)X 612 3996(on)N 712(the)X 830(storage)X 1082(management)X 1512(arrays)X 1729(still)X 1868(applies.)X 732 4120(The)N 2 f 877(kind)X 1 f 1036(clause)X 1258(of)X 1346(an)X 5 f 1445 -0.4219(aggregate)AX 1 f 1823(type)X 1982(speci\256cation)X 2408(establishes)X 2776(and)X 2913(names)X 3139(abstract)X 3410(components)X 3818(for)X 3933(the)X 4052(type.)X 4231(The)X 612 4216(clause)N 833(is)X 906(of)X 993(the)X 1111(form)X 2 f 900 4360(kind)N 1303(::=)X 5 f 1476(aggregate\()X 2 f 1860(component)X 5 f 2212(,)X 2 f 2271(...)X 5 f 2368(\))X 2 f 900 4552(component)N 1303(::=)X 1476(identi\256er)X 9 f 1802(|)X 5 f 1476 4648(var)N 2 f 1624(identi\256er)X 1950(opt)X 9 f 2052(-)X 2 f 2096(abrv)X 1 f 612 4792(Note,)N 808(the)X 2 f 926(opt-return)X 1 f 1275(clauses)X 1527(discussed)X 1854(in)X 1936(the)X 2054(previous)X 2350(section)X 2597(may)X 2755(be)X 2851(also)X 3000(used)X 3167(with)X 5 f 3331 -0.4219(aggregate)AX 1 f 3708(types.)X 732 4916(The)N 5 f 880 -0.4219(aggregate)AX 1 f 1258(speci\256cation)X 1684(can)X 1817(be)X 1914(thought)X 2179(of)X 2267(as)X 2355(establishing)X 2759(a)X 2817(sort)X 2959(of)X 3048(``abstract)X 3374(type)X 3534(record'')X 3816(whose)X 4043(\256elds,)X 4258(the)X 612 5012(abstract)N 883(components,)X 1311(summarize)X 1684(the)X 1803(type)X 1962(information)X 2361(of)X 2449(the)X 2568(actual)X 2781(components)X 3189(of)X 3277(values)X 3503(in)X 3586(the)X 3705(type.)X 3884(Most)X 4068(types)X 4257(are)X 612 5108(give)N 770(one)X 906(abstract)X 1176(component.)X 1572(For)X 1703(example,)X 2015(the)X 2133(set)X 2242(type)X 2400(has)X 2527(the)X 2645(speci\256cation)X 5 f 900 5252(set{S}:)N 1188 -0.2361(aggregate\(set_elem\))AX 1188 5348(return)N 1433(block_pointer)X 1 f 612 5492(where)N 5 f 831(set_elem)X 1 f 1174(represents)X 1520(all)X 1620(the)X 1738(elements)X 2043(of)X 2130(a)X 2186(set.)X 732 5616(Abstract)N 1027(components)X 1437(can)X 1572(be)X 1671(accessed)X 1976(using)X 2172(dot)X 2297(notation,)X 2602(and)X 2741(the)X 5 f 2864(new)X 1 f 3033(abstract)X 3306(type)X 3467(computation)X 3890(can)X 4025(be)X 4124(used)X 4294(to)X 612 5712(establish)N 915(a)X 974(new)X 1131(subtype)X 1403(of)X 1492(the)X 1612(type)X 1772(\(subtypes)X 2101(only)X 2265(exist)X 2438(internally)X 2767(in)X 2851(the)X 2971(compiler)X 3278(and)X 3416(have)X 3590(no)X 3692(existence)X 4013(at)X 4093(the)X 4213(Icon)X 612 5808(language)N 936(level\).)X 1173(A)X 1265(subtype)X 1548(can)X 1694(be)X 1804(returned)X 2106(by)X 2220(the)X 2353(operation)X 2691(and)X 2842(has)X 2984(its)X 3094(own)X 3267(component)X 3658(types)X 3862(independent)X 4289(of)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(37)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 38 p %%Page: 38 38 8 s 8 xH 0 xS 1 f 10 s 612 672(subtypes)N 919(created)X 1179(elsewhere.)X 1548(The)X 1700(abstract)X 1977(type)X 2142(computation)X 2569(for)X 2690(Icon)X 2859(set)X 2974(intersection,)X 3394(the)X 5 f 3520(**)X 1 f 3608(operator,)X 3922(uses)X 4086(both)X 4254(dot)X 612 768(notation)N 896(and)X 1034(a)X 5 f 1094(new)X 1 f 1262(expression.)X 1647(It)X 1718(performs)X 2030(intersection)X 2426(in)X 2510(the)X 2630(abstract)X 2902(type)X 3062(realm.)X 5 f 3289(x)X 1 f 3351(and)X 5 f 3491(y)X 1 f 3553(are)X 3674(the)X 3794(parameters)X 4169(of)X 4258(the)X 612 864(operation)N 935(and)X 1071(may)X 1229(contain)X 1485(different)X 1782(subtypes)X 2082(of)X 2169(the)X 2287(set)X 2396(type:)X 5 f 900 1008(return)N 1145(new)X 1328 -0.1587(set\(store[type\(x\).set_elem])AX 2308(**)X 2407 -0.1467(store[type\(y\).set_elem]\))AX 1 f 612 1152(\(Note)N 828(that)X 981(the)X 1112(components)X 1532(can)X 1677(be)X 1786(thought)X 2063(ł VMS.BCK[V9.DOCS]IPD261.PS;1\of)X 2164(as)X 2265 0.3889(references)AX 2631(to)X 2727(information)X 3139(contained)X 3485(in)X 3581(a)X 2 f 3651(type)X 3819(store)X 1 f 9 f 4013(-)X 1 f 4091(thus)X 4258(the)X 612 1248(indexing)N 912(notation.\))X 732 1372(Components)N 1157(that)X 1298(represent)X 1614(Icon)X 1778(variables)X 2089(are)X 2209(preceded)X 2521(by)X 5 f 2624(var)X 1 f 2756(and)X 2893(may)X 3052(be)X 3150(given)X 3350(abbreviations)X 3804(for)X 3920(use)X 4049(in)X 4133(tracing)X 612 1468(type)N 770(inferencing.)X 1176(For)X 1307(example,)X 1619(the)X 1737(list)X 1854(type)X 2012(has)X 2139(the)X 2257(speci\256cation)X 5 f 900 1612(list{L}:)N 1188 -0.2604(aggregate\(var)AX 1720(lst_elem{LE}\))X 1188 1708(return)N 1433(block_pointer)X 1 f 612 1948(These)N 831(components)X 1245(may)X 1410(be)X 1514(returned)X 1810(from)X 1994(operations)X 2356(and)X 2500(represent)X 2823(the)X 2949(component)X 3333(as)X 3428(a)X 3492(variable.)X 3799(For)X 3938(example,)X 4258(the)X 612 2044(abstract)N 882(type)X 1040(computation)X 1460(for)X 1574(element)X 1848(generation)X 2207(operator)X 2495(when)X 2689(applied)X 2945(to)X 3027(a)X 3083(list)X 3200(is)X 5 f 900 2188(return)N 1145(type\(dx\).lst_elem)X 1 f 612 2332(where)N 5 f 833(dx)X 1 f 939(is)X 1014(the)X 1134(parameter)X 1478(of)X 1567(the)X 1687(operation.)X 2032(When)X 2246(a)X 2305(value)X 2502(rather)X 2713(than)X 2874(a)X 2933(variable)X 3215(is)X 3291(returned,)X 3602(the)X 3723(component)X 4102(must)X 4280(be)X 612 2428 0.3750(``dereferenced'')AN 1157(by)X 1257(indexing)X 1557(into)X 1701(the)X 1819(store,)X 2015(as)X 2102(in)X 2184(the)X 2302(abstract)X 2572(type)X 2730(computations)X 3181(of)X 5 f 3270(get\(\))X 1 f 3434(:)X 5 f 900 2572(return)N 1145(store[type\(x\).lst_elem])X 1 f 612 2716(Non-variable)N 1056(components)X 1463(must)X 1638(always)X 1881(be)X 1977 0.3438(dereferenced.)AX 732 2840(For)N 872(types,)X 1090(such)X 1266(as)X 1362(tables,)X 1598(that)X 1747(contain)X 2012(Icon)X 2184(values)X 2418(serving)X 2683(different)X 2989(purposes,)X 3324(it)X 3398(may)X 3566(be)X 3672(effective)X 3984(to)X 4076(establish)X 612 2936(several)N 860(abstract)X 1130(components.)X 732 3060(Aggregate)N 1098(types)X 1298(are)X 1428(implemented)X 1877(using)X 2081(blocks)X 2321(that)X 2472(contain)X 2739(descriptors,)X 3142(and)X 3289(they)X 3458(may)X 3627(be)X 3734(implemented)X 4183(using)X 612 3156(several)N 862(kinds)X 1057(of)X 1146(blocks,)X 1397(with)X 1561(some)X 1752(blocks)X 1983(having)X 2223(pointers)X 2503(to)X 2587(others.)X 2825(When)X 3038(there)X 3220(are)X 3340(multiple)X 3627(blocks,)X 3877(there)X 4059(is)X 4133(always)X 612 3252(a)N 2 f 673(header)X 1 f 921(block)X 1124(that)X 1269(uses)X 1432(the)X 5 f 1557(T_)X 1 f 1675(code)X 1852(of)X 1944(the)X 2067(type.)X 2270(Other)X 2478(blocks)X 2712(are)X 2836(given)X 3039(internal)X 3309(type)X 3472(codes;)X 3702(these)X 3892(codes)X 4100(must)X 4280(be)X 612 3348(added)N 824(to)X 5 f 908(h/rmacros.h)X 1 f 1349(and)X 1485(entries)X 1719(must)X 1894(be)X 1990(made)X 2184(in)X 2266(the)X 2404(storage)X 2656(management)X 3086(arrays.)X 732 3472(Any)N 899(descriptors)X 1280(in)X 1371(a)X 1436(block)X 1643(must)X 1827(be)X 1932(at)X 2019(the)X 2146(end.)X 2311(The)X 2466(type's)X 2692(entry)X 2887(in)X 2979(the)X 5 f 3109(\256rstd)X 1 f 3312(array)X 3508(is)X 3591(the)X 3719(location)X 4007(of)X 4104(the)X 4232(\256rst)X 612 3568(descriptor.)N 975(Any)X 1135(block)X 1335(pointers)X 1615(in)X 1699(the)X 1819(block)X 2018(must)X 2194(be)X 2291(contiguous.)X 2683(The)X 2829(type's)X 3046(entry)X 3232(in)X 3315(the)X 5 f 3436(\256rstp)X 1 f 3630(array)X 3817(is)X 3891(the)X 4010(location)X 4289(of)X 612 3664(the)N 730(\256rst)X 874(pointer)X 1121(and)X 1257(its)X 1352(entry)X 1537(in)X 1619(the)X 5 f 1739(ptrno)X 1 f 1940(array)X 2126(is)X 2199(the)X 2317(number)X 2582(of)X 2669(pointers.)X 3 f 612 3856(Keyword)N 948(Variable)X 1266(Types)X 1 f 732 3980(Keyword)N 1051(variable)X 1330(types)X 1519(have)X 1691(a)X 1747(type)X 1905(speci\256cation)X 2330(with)X 2492(a)X 2 f 2548(kind)X 1 f 2706(clause)X 2927(of)X 3014(the)X 3132(form)X 2 f 900 4124(kind)N 1418(::=)X 5 f 1591(variable)X 2 f 1907(var)X 9 f 2014(-)X 2 f 2058(type)X 9 f 2192(-)X 2 f 2236(spec)X 900 4316(var)N 9 f 1007(-)X 2 f 1051(type)X 9 f 1185(-)X 2 f 1229(spec)X 1418(::=)X 5 f 1591(initially)X 2 f 1868(type)X 9 f 2039(|)X 5 f 1591 4412(always)N 2 f 1872(type)X 900 4604(type)N 1418(::=)X 1591(type)X 9 f 1725(-)X 2 f 1769(name)X 9 f 1980(|)X 2 f 1591 4700(type)N 5 f 1762(++)X 2 f 1893(type)X 9 f 2027(-)X 2 f 2071(name)X 900 4892(type)N 9 f 1034(-)X 2 f 1078(name)X 1418(::=)X 1591(identi\256er)X 1 f 732 5064(The)N 881(compiler)X 1190(must)X 1369(be)X 1469(able)X 1627(to)X 1713(infer)X 1889(the)X 2011(types)X 2204(of)X 2295(values)X 2524(stored)X 2744(in)X 2830(a)X 2890(keyword)X 3196(variable.)X 3500(The)X 5 f 3652(initially)X 1 f 3917(option)X 4146(causes)X 612 5160(the)N 731(keyword)X 1033(variable)X 1313(type)X 1472(to)X 1555(be)X 1652(treated)X 1892(as)X 1980(a)X 2037(set)X 2147(of)X 2235(global)X 2456(variables,)X 2787(each)X 2956(initialized)X 3297(to)X 3379(the)X 3497(given)X 3695(type)X 3853(speci\256ed)X 4158(by)X 4258(the)X 2 f 612 5256(type)N 1 f 783(clause.)X 1041(The)X 5 f 1205(always)X 1 f 1486(option)X 1727(indicates)X 2049(that)X 2207(the)X 2343(keyword)X 2662(always)X 2923(contains)X 3228(values)X 3471(of)X 3576(the)X 3712(given)X 3928(type)X 4104(and)X 4258(the)X 612 5352(compiler)N 931(does)X 1112(no)X 1226(actual)X 1452(inference)X 1786(on)X 1900(it.)X 2 f 1998(type)X 1 f 2166(may)X 2338(be)X 2448(the)X 2580(union)X 2796(of)X 2897(several)X 3158(types;)X 3382(this)X 3530(indicates)X 3848(that)X 4001(the)X 4132(type)X 4303(is)X 612 5448(uncertain)N 936(and)X 1077(may)X 1240(be)X 1341(any)X 1482(of)X 1574(the)X 1697(ones)X 1869(speci\256ed.)X 2220(A)X 2304(special)X 2 f 2553(type-name)X 1 f 2888(,)X 5 f 2936(any_value)X 1 f 3298(,)X 3344(indicates)X 3655(complete)X 3975(uncertainty.)X 612 5544(The)N 757(clause)X 5 f 900 5688(always)N 1181(any_value)X 1 f 612 5832(is)N 685(a)X 741(correct,)X 1005(although)X 1305(entirely)X 1570(imprecise,)X 1922(description)X 2298(of)X 2385(any)X 2521(keyword)X 2822(variable.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(38)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 39 p %%Page: 39 39 8 s 8 xH 0 xS 1 f 10 s 732 672(This)N 898(appendix)X 1217(assumes)X 1509(that)X 1654(keyword)X 1960(variables)X 2275(are)X 2399(implemented)X 2842(by)X 2947(global)X 3172(descriptors)X 3549(\(though)X 3823(other)X 4013(techniques)X 612 768(are)N 731(possible\).)X 1060(The)X 2 f 1205(opt-return)X 1 f 1554(clause)X 1775(of)X 1862(the)X 1980(form)X 5 f 900 912(return)N 1145 -0.1985(descriptor_pointer)AX 1 f 612 1056(is)N 720(useful)X 972(for)X 1122(implementing)X 1622(keyword)X 1959(variables.)X 2325(The)X 2506(vword)X 2767(of)X 2890(a)X 2982(result)X 3216(descriptor)X 3593(from)X 3805(a)X 3897(corresponding)X 5 f 612 1152(return)N 1 f 820(/)X 5 f 842(suspend)X 1 f 1162(expression)X 1525(is)X 1598(of)X 1685(type)X 5 f 1845(struct)X 2062(descrip)X 2341(*)X 1 f 2372(.)X 732 1276(Some)N 944(of)X 1041(the)X 1169(same)X 1364(\256les)X 1527(must)X 1713(be)X 1820(updated)X 2105(for)X 2230(variable)X 2520(types)X 2720(as)X 2818(for)X 2943(value)X 3148(types.)X 3368(Type)X 3564(codes)X 3778(must)X 3964(be)X 4071(added)X 4294(to)X 5 f 612 1372(h/rmacros.h)N 1 f 1033(.)X 1093(The)X 5 f 1240(D_)X 1 f 1362(code)X 1534(must)X 1709(have)X 1881(the)X 5 f 2001(F_Var)X 1 f 2238(\257ag)X 2378(set,)X 2507(for)X 2621(example:)X 5 f 900 1516(#de\256ne)N 1197(D_Kywdint)X 1615(\(T_Kywdint)X 9 f 2088(|)X 5 f 2141(D_Typecode)X 9 f 2629(|)X 5 f 2682(F_Ptr)X 9 f 2914(|)X 547 VMS.BCK[V9.DOCS]IPD261.PS;13k f 2967(F_Var\))X 1 f 612 1660(The)N 757(storage)X 1009(management)X 1439(tables)X 1646(and)X 1782(the)X 5 f 1902(outimage\(\))X 1 f 2303(routine)X 2550(also)X 2699(must)X 2874(be)X 2970(updated.)X 732 1784(Other)N 940(updates)X 1210(are)X 1334(unique)X 1577(to)X 1664(variable)X 1948(types.)X 2162(The)X 2312(global)X 2538(descriptor)X 2885(must)X 3066(be)X 3168(established.)X 5 f 3572(runtime/data.r)X 1 f 4089(contains)X 612 1880(its)N 718(declaration,)X 5 f 1128(icon_init\(\))X 1 f 1505(in)X 5 f 1600(runtime/init.r)X 1 f 2070(initializes)X 2412(the)X 2541(descriptor,)X 2913(and)X 5 f 3062(h/rexterns.h)X 1 f 3512(contains)X 3809(an)X 5 f 3917(extern)X 1 f 4168(for)X 4292(it.)X 612 1976 0.3021(Dereferencing)AN 1104(must)X 1290(be)X 1397(updated;)X 1704(it)X 1779(is)X 1863(performed)X 2229(by)X 5 f 2342(deref\(\))X 1 f 2608(in)X 5 f 2703(runtime/cnv.r)X 1 f 3164(.)X 3215(Assignment)X 3628(must)X 3814(be)X 3921(updated;)X 4228(it)X 4303(is)X 612 2072(handled)N 903(by)X 1020(the)X 1155(macro)X 5 f 1395(GeneralAsgn\(\))X 1 f 1949(in)X 5 f 2049(runtime/oasgn.r)X 1 f 2602(.)X 2678(The)X 5 f 2841(name\(\))X 1 f 3130(function)X 3433(is)X 3522(updated)X 3812(by)X 3928(changing)X 4258(the)X 612 2168(support)N 886(routine)X 5 f 1150(get_name\(\))X 1 f 1592(in)X 5 f 1691(runtime/rdebug.r)X 1 f 2275(.)X 2330(The)X 5 f 2492(variable\(\))X 1 f 2860(function)X 3162(is)X 3250(updated)X 3539(by)X 3654(changing)X 3983(the)X 4116(support)X 612 2264(routine)N 5 f 861(getvar\(\))X 1 f 1156(in)X 5 f 1240(runtime/rmisc.r)X 1 f 1769(.)X 732 2388(The)N 880(keyword)X 1184(itself)X 1367(goes)X 1537(in)X 5 f 1624(runtime/keyword.r)X 1 f 2258(.)X 2301(For)X 2435(example,)X 5 f 2752(&random)X 1 f 3099(is)X 3176(of)X 3267(type)X 5 f 3431(kywdint)X 1 f 3721(and)X 3861(is)X 3938(implemented)X 612 2484(by)N 712(the)X 830(descriptor)X 5 f 1173(kywd_ran)X 1 f 1514(;)X 1556(its)X 1651(de\256nition)X 1977(is)X 5 f 900 2628(keyword{1})N 1332(random)X 1011 2724(abstract)N 1331({)X 1122 2820(return)N 1367(kywdint)X 1122 2916(})N 1011 3012(inline)N 1234({)X 1122 3108(return)N 1367(kywdint\(&kywd_ran\);)X 1122 3204(})N 900 3300(end)N 1 f 612 3444(For)N 743(the)X 861(interpreter,)X 1236(the)X 1354(keyword)X 1655(name)X 1849(must)X 2024(be)X 2120(added)X 2332(to)X 5 f 2416 -0.2333(icont/key_text.c)AX 1 f 2964(.)X 3024(These)X 3236(names)X 3461(are)X 3580(in)X 3662(alphabetical)X 4070(order.)X 732 3568(If)N 822(the)X 956(descriptor)X 1314(may)X 1489(contain)X 1762(a)X 1835(value)X 2046(under)X 2266(control)X 2530(of)X 2634(garbage)X 2926(collection,)X 3299(the)X 3434(support)X 3711(routine)X 5 f 3977(collect\(\))X 1 f 4294(in)X 5 f 612 3664(runtime/rmemmgt.r)N 1 f 1318(must)X 1504(be)X 1611(updated.)X 5 f 1918(postqual\(\))X 1 f 2303(preserves)X 2638 0.3889(references)AX 3001(to)X 3093(the)X 3221(string)X 3433(region;)X 3690(the)X 3818(macro)X 5 f 4051(Qual\(\))X 1 f 4303(is)X 612 3760(used)N 779(to)X 861(check)X 1069(for)X 1183(such)X 1350 0.3500(references.)AX 5 f 1724(markblock\(\))X 1 f 2162(preserves)X 2486 0.3889(references)AX 2838(to)X 2921(blocks;)X 3173(the)X 3292(macro)X 5 f 3516(Pointer\(\))X 1 f 3843(is)X 3917(used)X 4085(to)X 4168(check)X 612 3856(for)N 726(such)X 893 0.3500(references.)AX 3 f 612 4048(The)N 765(Complete)X 1115(Grammar)X 1483(for)X 1606(the)X 1733(Type)X 1926(Speci\256cation)X 2381(System)X 2 f 900 4192(type)N 9 f 1034(-)X 2 f 1078(def)X 1418(::=)X 1591(identi\256er)X 1913(opt)X 9 f 2015(-)X 2 f 2059(abrv)X 5 f 2243(:)X 2 f 2302(kind)X 2473(opt)X 9 f 2575(-)X 2 f 2619(return)X 900 4346(kind)N 1418(::=)X 5 f 1591(simple)X 2 f 9 f 1859(|)X 5 f 1591 4442(aggregate\()N 2 f 1975(component)X 5 f 2327(,)X 2 f 2386(...)X 5 f 2483(\))X 2 f 9 f 2547(|)X 5 f 1591 4538(variable)N 2 f 1907(var)X 9 f 2014(-)X 2 f 2058(type)X 9 f 2192(-)X 2 f 2236(spec)X 900 4692(component)N 1418(::=)X 1591(identi\256er)X 9 f 1917(|)X 5 f 1591 4788(var)N 2 f 1739(identi\256er)X 2065(opt)X 9 f 2167(-)X 2 f 2211(abrv)X 900 4942(var)N 9 f 1007(-)X 2 f 1051(type)X 9 f 1185(-)X 2 f 1229(spec)X 1418(::=)X 5 f 1591(initially)X 2 f 1868(type)X 9 f 2039(|)X 5 f 1591 5038(always)N 2 f 1872(type)X 900 5192(type)N 1418(::=)X 1591(type)X 9 f 1725(-)X 2 f 1769(name)X 9 f 1980(|)X 2 f 1591 5288(type)N 5 f 1762(++)X 2 f 1893(type)X 9 f 2027(-)X 2 f 2071(name)X 900 5442(type)N 9 f 1034(-)X 2 f 1078(name)X 1418(::=)X 1591(identi\256er)X 900 5596(opt)N 9 f 1002(-)X 2 f 1046(abrv)X 1418(::=)X 1591(nil)X 9 f 1712(|)X 5 f 1591 5692({)N 2 f 1655(identi\256er)X 5 f 1981(})X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2383(-)X 1 f 2444(39)X 9 f 2541(-)X 8 s 1 f 4005(June)X 4135(28,)X 4228(1994)X 40 p %%Page: 40 40 8 s 8 xH 0 xS 1 f 10 s 5 f 2 f 900 672(opt)N 9 f 1002(-)X 2 f 1046(return)X 1418(::=)X 1591(nil)X 9 f 1712(|)X 5 f 1591 768(return)N 1836(block_pointer)X 2 f 9 f 2346(|)X 5 f 1591 864(return)N 1836 -0.1985(descriptor_pointer)AX 2 f 9 f 2510(|)X 5 f 1591 960(return)N 1836(char_pointer)X 2 f 9 f 2315(|)X 5 f 1591 1056(return)N 1836(C_integer)X 3 f 612 1296(A)N 690(Check)X 928(List)X 1081(for)X 1204(Adding)X 1476(Types)X 1700(to)X 1787(Icon)X 1 f 732 1420(The)N 878(following)X 1210(check)X 1419(list)X 1537(shows)X 1758(the)X 1877(\256les)X 2031(that)X 2172(must)X 2348(be)X 2445(updated)X 2720(when)X 2915(adding)X 3154(types)X 3344(to)X 3427(Icon.)X 3612(It)X 3683(is)X 3758(on)X 3860(a)X 3918(separate)X 4204(page)X 612 1516(for)N 726(easy)X 889(photocoping.)X 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(40)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 41 p %%Page: 41 41 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(All)N 734(Types)X 5 f 10 f 612 816(`)N 5 f 710 -0.2222(common/typespec.txt)AX 1 f 9 f 1479(-)X 1 f 1540(add)X 1673(type)X 1828(speci\256cation)X 10 f 612 912(`)N 5 f 706(common/Make\256le)X 1 f 9 f 1348(-)X 1 f 1409(uncomment)X 1804(entries)X 2035(near)X 2191(the)X 2306(end)X 2439(of)X 2523(the)X 2638(\256le)X 10 f 612 1008(`)N 5 f 706(h/rmacros.h)X 1 f 9 f 1144(-)X 1 f 1205(add)X 1338(T_)X 2 f 1427(Type)X 1 f 1600(macro)X 10 f 612 1104(`)N 5 f 706(h/rmacros.h)X 1 f 9 f 1144(-)X 1 f 1205(add)X 1338(D_)X 2 f 1436(Type)X 1 f 1609(macro)X 10 f 612 1200(`)N 5 f 706(runtime/rmemmgt.r)X 1 f 9 f 1398(-)X 5 f 1459(bsizes)X 1 f 1702(table)X 10 f 612 1296(`)N 5 f 706(runtime/rmemmgt.r)X 1 f 9 f 1398(-)X 5 f 1459(\256rstd)X 1 f 1649(table)X 10 f 612 1392(`)N 5 f 706(runtime/rmemmgt.r)X 1 f 9 f 1398(-)X 5 f 1459(\256rstp)X 1 f 1649(table)X 10 f 612 1488(`)N 5 f 706(runtime/rmemmgt.r)X 1 f 9 f 1398(-)X 5 f 1459(ptrno)X 1 f 1657(table)X 10 f 612 1584(`)N 5 f 706(runtime/rmemmgt.r)X 1 f 9 f 1398(-)X 5 f 1459(blkname)X 1 f 1777(table)X 10 f 612 1680(`)N 5 f 706(runtime/rmisc.r)X 1 f 9 f 1252(-)X 1 f 1313(update)X 5 f 1544(outimage\(\))X 3 f 612 1920(All)N 734(Value)X 954(Types)X 1 f 10 f 612 2064(`)N 5 f 706(runtime/fmisc.r)X 1 f 9 f 1247(-)X 1 f 1308(update)X 5 f 1539(copy\(\))X 1 f 10 f 612 2160(`)N 5 f 706(runtime/fmisc.r)X 1 f 9 f 1247(-)X 1 f 1308(update)X 5 f 1539(type\(\))X 1 f 10 f 612 2256(`)N 5 f 706(runtime/rcomp.r)X 1 f 9 f 1282(-)X 1 f 1343(update)X 5 f 1574(anycmp\(\))X 1 f 10 f 612 2352(`)N 5 f 706(runtime/rcomp.r)X 1 f 9 f 1282(-)X 1 f 1343(update)X 5 f 1574(order\(\))X 1 f 10 f 612 2448(`)N 5 f 706(runtime/rcomp.r)X 1 f 9 f 1282(-)X 1 f 1343(update)X 5 f 1574(equiv\(\))X 1 f 10 f 612 2544(`)N 5 f 706(runtime/rmisc.r)X 1 f 9 f 1252(-)X 1 f 1313(update)X 5 f 1544(getimage\(\))X 3 f 612 2784(Types)N 836(Implemented)X 1310(In)X 1405(The)X 1558(Block)X 1773(Region)X 1 f 10 f 612 2928(`)N 5 f 706(h/rstructs.h)X 1 f 9 f 1117(-)X 1 f 1178(add)X 1311(declaration)X 1685(for)X 1796(the)X 1911(block)X 2106(structure)X 10 f 612 3024(`)N 5 f 706(h/rstructs.h)X 1 f 9 f 1117(-)X 1 f 1178(update)X 1409(the)X lt VMS.BCK[V9.DOCS]IPD261.PS;118z5 f 1524(union)X 1737(block)X 1 f 1940(declaration)X 10 f 612 3120(`)N 5 f 706(runtime/ralc.r)X 1 f 9 f 1189(-)X 1 f 1250(add)X 1383(an)X 1476(allocation)X 1809(routine)X 3 f 612 3360(Types)N 836(With)X 1029(Sizes)X 1 f 10 f 612 3504(`)N 5 f 706(runtime/omisc.r)X 1 f 9 f 1269(-)X 1 f 1330(update)X 1561(size)X 1703(operator)X 3 f 612 3744(All)N 734(Keyword)X 1070(Variable)X 1388(Types)X 1 f 10 f 612 3888(`)N 5 f 706(h/rexterns.h)X 1 f 9 f 1143(-)X 1 f 1204(extern)X 1422(for)X 1533(keyword)X 1831(descriptor)X 10 f 612 3984(`)N 5 f 706(runtime/cnv.r)X 1 f 9 f 1184(-)X 1 f 1245(update)X 5 f 1476(deref\(\))X 1 f 10 f 612 4080(`)N 5 f 706(runtime/data.r)X 1 f 9 f 1214(-)X 1 f 1275(declaration)X 1649(for)X 1760(keyword)X 2058(descriptor)X 10 f 612 4176(`)N 5 f 706(runtime/init.r)X 1 f 9 f 1162(-)X 1 f 1223(initialize)X 1520(keyword)X 1818(descriptor)X 10 f 612 4272(`)N 5 f 706(runtime/keyword.r)X 1 f 9 f 1357(-)X 1 f 1418(add)X 1551(keyword)X 1849(declaration)X 10 f 612 4368(`)N 5 f 706(runtime/oasgn.r)X 1 f 9 f 1276(-)X 1 f 1337(update)X 5 f 1568(GeneralAsgn\(\))X 1 f 2103(macro)X 10 f 612 4464(`)N 5 f 706(runtime/rdebug.r)X 1 f 9 f 1307(-)X 1 f 1368(update)X 5 f 1599(get_name\(\))X 1 f 10 f 612 4560(`)N 5 f 706(runtime/rmisc.r)X 1 f 9 f 1252(-)X 1 f 1313(update)X 5 f 1544(getvar\(\))X 3 f 612 4800(Keyword)N 948(Variables)X 1297(That)X 1481(Must)X 1679(Be)X 1788(Garbage)X 2106(Collected)X 1 f 10 f 612 4944(`)N 5 f 706(runtime/rmemmgt.r)X 1 f 9 f 1398(-)X 1 f 1459(update)X 5 f 1690(collect\(\))X 1 f 8 s 612 6144(IPD261)N 10 s 9 f 2380(-)X 1 f 2444(41)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(28,)X 4228(1994)X 41 p %%Trailer xt %%Pages: 41 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs (*[V9.DOCS]IPD46.DOC;1+,M./ 4-0123KPWO569^7f^89Jj$GHJ Icon Trouble Report Name _____________________________________________ Address _____________________________________________ _____________________________________________ _____________________________________________ _____________________________________________ Telephone _____________________________________________ Electronic mail address _____________________________________________ Icon version _____________________________________________ Computer _____________________________________________ Operating system _____________________________________________ Date _____________________________________________ Description of the problem: Attach additional information, listings, enclose source code, etc., as appropriate. Send to: IPD46c May 5, 1994 Icon Project Department of Computer Science Gould-Simpson Building The University of Arizona Tucson, AZ 85721 U.S.A. (602) 621-8448 (voice) (602) 621-4246 (fax) icon-project@cs.arizona.edu (Internet) ... uunet!arizona!icon-project (uucp) IPD46c May 5, 1994 *[V9.DOCS]IPD46.PS;1+,L./ 4-0123KPWO56a]7y1^89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 07:58:23 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh  - VMS.BCKL[V9.DOCS]IPD46.PS;121exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%Bv VMS.BCKL[V9.DOCS]IPD46.PS;121 eginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 2130 672(Icon)N 2301(Trouble)X 2596(Report)X 1 f 612 1056(Name)N 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 1228(Address)N 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1706 1400(h)N 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1706 1572(h)N 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1706 1744(h)N 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 1916(Telephone)N 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2088(Electronic)N 962(mail)X 1124(address)X 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2260(Icon)N 775(version)X 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2432(Computer)N 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2604(Operating)N 953(system)X 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 2776(Date)N 10 f 1706(h)X 1738(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X 1 f 612 3044(Description)N 1006(of)X 1093(the)X 1211(problem:)X 612 4559(Attach)N 846(additional)X 1186(information,)X 1604(listings,)X 1874(enclose)X 2135(source)X 2365(code,)X 2557(etc.,)X 2711(as)X 2798(appropriate.)X 3204(Send)X 3384(to:)X 900 4703(Icon)N 1063(Project)X 900 4799(Department)N 1299(of)X 1386(Computer)X 1726(Science)X 900 4895(Gould-Simpson)N 1426(Building)X 900 4991(The)N 1045(University)X 1403(of)X 1490(Arizona)X 900 5087(Tucson,)N 1176(AZ)X 1343(85721)X 900 5183(U.S.A.)N 900 5327(\(602\))N 1094(621-8448)X 1421(\(voice\))X 900 5423(\(602\))N 1094(621-4246)X 1421(\(fax\))X 900 5567 0.1659(icon-project@cs.arizona.edu)AN 1922(\(Internet\))X 900 5663(.)N 926(.)X 952(.)X 992 0.1650(uunet!arizona!icon-project)AX 1949(\(uucp\))X 8 s 612 6144(IPD46c)N 4031(May)X 4164(5,)X 4228(1994)X 1 p %%Trailer xt %%Pages: 1 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs *[V9.DOCS]README.;1+,Z./ 4-0123KPWO56̴}7Px}89Jj$GHJThe documentation for Version 9.0 of Icon for UNIX consists of technical reports: TR 90-6 Icon overview IPD46 Trouble report form IPD112 Version 8.0 implementation differences IPD236 Version 9.0 features IPD237 Version 9.0 compiler IPD238 Configuring the Version 9 source code IPD239 Version 9.0 implementation differences IPD241 Version 9.0 benchmark report IPD242 Icon program library IPD250 Installing Version 9.0 of Icon on VMS IPD251 Using Version 9.0 of Icon under VMS IPD255 Version 9.0 graphics facilities IPD258 Interface builder IPD259 User interface tools IPD261 RTL manual PostScript (.ps) files for all documents are provided in compressed form. Formatted text (.doc) files are provided except for those documents that cannot be reasonably rendered in this way. Troff/nroff (.1) files are provided for the manual pages. Printed copies off all the documents are available from the Icon Project, free of charge. *[V9.DOCS]TR90-6.DOC;1+,.'/ 4'&-0123KPWO(56sX\7PFW]89Jj$GHJ  An Overview of the Icon Programming Language; Version 8* Ralph E. Griswold TR 90-6d January 1, 1990; last revised April 20, 1994 Department of Computer Science The University of Arizona Tucson, Arizona 85721 *This work was supported by the National Science Foundation under Grant CCR-8713690. An Overview of the Icon Programming Language; Version 8 1.__Introduction Icon is a high-level programming language with extensive facilities for processing strings and structures. Icon has several novel features, including expressions that may produce sequences of results, goal-directed evaluation that automatically searches for a successful result, and string scanning that allows operations on strings to be formulated at a high conceptual level. Icon emphasizes high-level string processing and a design phi- losophy that allows ease of programming and short, concise pro- grams. Storage allocation and garbage collection are automatic in Icon, and there are few restrictions on the sizes of objects. Strings, lists, and other structures are created during program execution and their size does not need to be known when a program is written. Values are converted to expected types automati- cally; for example, numeral strings read in as input can be used in numerical computations without explicit conversion. Icon has an expression-based syntax with reserved words; in appearance, Icon programs resemble those of Pascal and C. Although Icon has extensive facilities for processing strings and structures, it also has a full repertoire of computational facilities. It is suitable for a wide variety of applications. Some examples are: + text analysis, editing, and formatting + document formating + artificial intelligence + expert systems + rapid prototyping + symbolic mathematics + text generation + data laundry There are public-domain implementations of Icon for the Acorn Archimedes, the Amiga, the Atari ST, the Macintosh, MS-DOS, MVS, - 1 - OS/2, many UNIX systems, VM/CMS, and VMS. There also are commer- cial implementations of enhanced versions of Icon for the Macin- tosh and for 386 UNIX platforms. The remainder of this report briefly describes the highlights of Icon. For a complete description, see [1]. 2.__Expression_Evaluation 2.1__Conditional_Expressions In Icon there are conditional expressions that may succeed and produce a result, or may fail and not produce any result. An example is the comparison operation i > j which succeeds (and produces the value of j) provided that the value of i is greater than the value of j, but fails otherwise. Similarly, i > j > k succeeds if the value of j is between i and k. The success or failuY9E VMS.BCK[V9.DOCS]TR90-6.DOC;1'-/re of conditional operations is used instead of Boolean values to drive control structures in Icon. An example is if i > j then k := i else k := j which assigns the value of i to k if the value of i is greater than the value of j, but assigns the value of j to k otherwise. The usefulness of the concepts of success and failure is illustrated by find(s1,s2), which fails if s1 does not occur as a substring of s2. Thus if i := find("or",line) then write(i) writes the position at which "or" occurs in line, if it occurs, but does not write a value if it does not occur. Many expressions in Icon are conditional. An example is read(), which produces the next line from the input file, but fails when the end of the file is reached. The following expres- sion is typical of programming in Icon and illustrates the integration of conditional expressions and conventional control structures: while line := read() do write(line) - 2 - This expression copies the input file to the output file. If an argument of a function fails, the function is not called, and the function call fails as well. This ``inheritance'' of failure allows the concise formulation of many programming tasks. Omitting the optional do clause in while-do, the previous expression can be rewritten as while write(read()) 2.2__Generators In some situations, an expression may be capable of producing more than one result. Consider sentence := "Store it in the neighboring harbor" find("or", sentence) Here "or" occurs in sentence at positions 3, 23, and 33. Most programming languages treat this situation by selecting one of the positions, such as the first, as the result of the expres- sion. In Icon, such an expression is a generator and is capable of producing all three positions. The results that a generator produces depend on context. In a situation where only one result is needed, the first is produced, as in i := find("or", sentence) which assigns the value 3 to i. If the result produced by a generator does not lead to the success of an enclosing expression, however, the generator is resumed to produce another value. An example is if (i := find("or", sentence)) > 5 then write(i) Here the first result produced by the generator, 3, is assigned to i, but this value is not greater than 5 and the comparison operation fails. At this point, the generator is resumed and pro- duces the second position, 23, which is greater than 5. The com- parison operation then succeeds and the value 23 is written. Because of the inheritance of failure and the fact that com- parison operations return the value of their right argument, this expression can be written in the following more compact form: write(5 < find("or", sentence)) Goal-directed evaluation is inherent in the expression evalua- tion mechanism of Icon and can be used in arbitrarily complicated situations. For example, - 3 - find("or", sentence1) = find("and", sentence2) succeeds if "or" occurs in sentence1 at the same position as and occurs in sentence2. A generator can be resumed repeatedly to produce all its results by using the every-do control structure. An example is every i := find("or", sentence) do write(i) which writes all the positions at which "or" occurs in sentence. For the example above, these are 3, 23, and 33. Generation is inherited like failure, and this expression can be written more concisely by omitting the optional do clause: every write(find("or", sentence)) There are several built-in generators in Icon. One of the most frequently used of these is i to j which generates the integers from i to j. This generator can be combined with every-do to formulate the traditional for-style control structure: every k := i to j do f(k) Note that this expression can be written more compactly as every f(i to j) There are a number of other control structures related to gen- eration. One is alternation, expr1 | expr2 which generates the results of expr1 followed by the results of expr2. Thus every write(find("or", sentence1) | find("or", sentence2)) writes the positions of "or" in sentence1 followed by the posi- tions of "or" in sentence2. Again, this sentence can be written more compactly by using alternation in the second argument of find(): every write(find("or", sentence1 | sentence2)) - 4 - Another use of alternation is illustrated by (i | j | k) = (0 | 1) which succeeds if any of i, j, or k has the value 0 or 1. Procedures can be used to add generators to Icon's built-in repertoire. For example, procedure findodd(s1, s2) every i := find(s1, s2) do if i % 2 = 1 then suspend i end is a procedure that generates the odd-valued positions at which s1 occurs in s2. The suspend control structure returns a value from the procedure, but leaves it in suspension so that it can be resumed for another value. When the loop terminates, control flows off the end of the procedure without producing another value. 3.__String_Scanning For complicated operations, the bookkeeping involved in keep- ing track of positions in strings becomes burdensome and error prone. Icon has a string scanning facility that is manages posi- tions automatically. Attention is focused on a current position in a string as it is examined by a sequence of operations. The string scanning operation has the form s ? expr where s is the subject string to be examined and expr is an expression that performs the examination. A position in the sub- ject, which starts at 1, is the focus of examination. Matching functions change this position. One matching func- tion, move(i), moves the position by i and produces the substring of the subject between the previous and new positions. If the position cannot be moved by the specified amount (because the subject is not long enough), move(i) fails. A simple example is line ? while write(move(2)) which writes successive two-character substrings of line, stop- ping when there are no more characters. Another matching function is tab(i), which sets the position in the subject to i and also returns the substring of the subject between the previous and new positions. For example, - 5 - line ? if tab(10) then write(tab(0)) first sets the position in the subject to 10 and then to the end of the subject, writing line[10:0]. Note that no value is writ- ten if the subject is not long enough. String analysis functions such as find() can be used in string scanning. In this context, the string that they operate on is not specified and is taken to be the subject. For example, line ? while write(tab(find("or"))) do move(2) writes all the substrings of line prior to occurrences of "or". Note that find() produces a position, which is then used by tab to change the position and produce the desired substring. The move(2) skips the "or" that is found. Another example of the use of string analysis functions in scanning is line ? while tab(upto(&letters)) do write(tab(many(&letters))) which writes all the words in line. As illustrated in the examples above, any expression may occur in the scanning expression. 4.__Structures Icon supports several kinds of structures with different organi ē VMS.BCK[V9.DOCS]TR90-6.DOC;1'zations and access methods. Lists are linear structures that can be accessed both by position and by stack and queue functions. Sets are collections of arbitrary values with no implied ordering. Tables provide an associative lookup mechanism. 4.1__Lists While strings are sequences of characters, lists in Icon are sequences of values of arbitrary types. Lists are created by enclosing the lists of values in brackets. An example is car1 := ["buick", "skylark", 1978, 2450] in which the list car1 has four values, two of which are strings and two of which are integers. Note that the values in a list need not all be of the same type. In fact, any kind of value can occur in a list - even another list, as in inventory := [car1, car2, car3, car4] - 6 - Lists also can be created by L := list(i, x) which creates a list of i values, each of which has the value x. The values in a list can be referenced by position much like the characters in a string. Thus car1[4] := 2400 changes the last value in car1 to 2400. A reference that is out of the range of the list fails. For example, write(car1[5]) fails. The values in a list L are generated by !L. Thus every write(!L) writes all the values in L. Lists can be manipulated like stacks and queues. The function push(L, x) adds the value of x to the left end of the list L, automatically increasing the size of L by one. Similarly, pop(L) removes the leftmost value from L, automatically decreasing the size of L by one, and produces the removed value. 4.2__Sets A set is a collection of values. An empty set is created by set(). Alternatively, set(L) produces a set with the values in the list L. For example, S := set([1, "abc", []]) assigns to S a set that contains the integer 1, the string "abc", and an empty list. The set operations of union, intersection, and difference are provided. The function member(S, x) succeeds if x is a member of the set S but fails otherwise. The function insert(S, x) adds x to the set S, while delete(S, x) removes x from S. A value only can occur once in a set, so insert(S, x) has no effect if x is already in S. !S generates the members of S. A simple example of the use of sets is given by the following segment of code, which lists all the different words that appear in the input file: - 7 - words := set() while line := read() do line ? while tab(upto(&letters)) do insert(words, tab(many(&letters))) every write(!words) 4.3__Tables Tables are sets of pairs each of which consists of a key and a corresponding value. The key and its corresponding value may be of any type, and the value for any key can be looked up automati- cally. Thus, tables provide a form of associative access in con- trast with the positional access to values in lists. A table is created by an expression such as symbols := table(0) which assigns to symbols a table with the default value 0. The default value is used for keys that are not assigned another value. Subsequently, symbols can be referenced by any key, such as symbols["there"] := 1 which assigns the value 1 to the key "there" in symbols. Tables grow automatically as new keys are added. For example, the following program segment produces a table containing a count of the words that appear in the input file: words := table(0) while line := read() do line ? while tab(upto(&letters)) do words[tab(many(&letters))] +:= 1 Here the default value for each word is 0, as given in table(0), and +:= is an augmented assignment operation that increments the values by one. There are augmented assignment operations for all binary operators. A list can be obtained from a table T by the function sort(T, 1). The form of the list depends on the value of i. For example, if i is 3, the list contains alternate keys and their correspond- ing values in T. For example, wordlist := sort(words, 3) while write(pop(wordlist), " : ", pop(wordlist)) writes the words and their counts from words. - 8 - 5.__An_Example The following program, which produces a concordance of the words from an input file, illustrates typical Icon programming techniques. Although not all the features in this program are described in previous sections, the general idea should be clear. global uses, lineno, width procedure main(args) width := 15 # width of word field uses := table() lineno := 0 every tabulate(words()) # tabulate all the citations output() # print the citations end # Add line number to citations for word # procedure tabulate(word) /uses[word] := set() insert(uses[word], lineno) return end # Generate words # procedure words() while line := read() do { lineno +:= 1 write(right(lineno, 6), " ", line) map(line) ? while tab(upto(&letters)) do { s := tab(many(&letters)) if *s >= 3 then suspend s# skip short words } } end - 9 - # Print the results # procedure output() write() # blank line uses := sort(uses, 3) # sort citations while word := get(uses) do { line := "" numbers := sort(get(uses)) while line ||:= get(numbers) || ", " write(left(word, width), line[1:-2]) } end The program reads a line, writes it out with an identifying line number, and processes every word in the line. Words less than three characters long are considered to be ``noise'' and are dis- carded. A table, uses, is keyed by the words. Every key has a corresponding set of line numbers. The first time a word is encountered, a new set is created for it. The line number is inserted in any event. Since a value can be in a set only once, duplicate line numbers are suppressed automatically. After all the input has been read, the table of words is sorted by key. Each corresponding set of line numbers is sorted and the line numbers are appended to the line to be written. For example, if the input file is On the Future!-how it tells Of the rapture that impells To the swinging and the ringing Of the bells, bells, bells- Of the bells, bells, bells, bells, Bells, bells, bells- To the rhyming and the chiming of the bells! the output is - 10 - 1 On the Future!-how it tells 2 Of the rapture that impells 3 To the swinging and the ringing 4 Of the bells, bells, bells- 5 Of the bells, bells, bells, bells, 6 Bells, bells, bells- 7 To the rhyming and the chiming of the bells! and 3, 7 bells 4, 5, 6, 7 chiming 7 future 1 how 1 impells 2 rapture 2 rhyming 7 ringing 3 s`%F VMS.BCK[V9.DOCS]TR90-6.DOC;1'f%winging 3 tells 1 that 2 the 1, 2, 3, 4, 5, 7 Acknowledgement Icon was designed by the the author in collaboration with Dave Hanson, Tim Korb, Cary Coutant, and Steve Wampler. Many other persons have contributed to its development. The current imple- mentation is based on the work of Cary Coutant and Steve Wampler with recent contributions by Bill Mitchell, Janalee O'Bagy, Gregg Townsend, and Ken Walker. References 1. R. E. Griswold and M. T. Griswold, The Icon Programming Language, Prentice-Hall, Inc., Englewood Cliffs, NJ, second edition, 1990. - 11 - n*[V9.DOCS]TR90-6.PS;1+,.i/ 4ig#-0123KPWOj56EY70LO\89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Mon Jul 18 07:58:08 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen * VMS.BCK[V9.DOCS]TR90-6.PS;1i| 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def % NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 0 1 10 s 10 xH 0 xS 1 f 3 f 1429 1344(An)N 1551(Overview)X 1901(of)X 1988(the)X 2115(Icon)X 2286(Programming)X 2787(Language;)X 3171(Version)X 3458(8)X 2 f (*)S 2185 1536(Ralph)N 2396(E.)X 2485(Griswold)X 1 f 2329 2208(TR)N 2451(90-6d)X 1782 4704(January)N 2052(1,)X 2132(1990;)X 2334(last)X 2465(revised)X 2717(April)X 2906(20,)X 3026(1994)X 1946 4992(Department)N 2345(of)X 2432(Computer)X 2772(Science)X 2059 5184(The)N 2204(University)X 2562(of)X 2649(Arizona)X 2106 5376(Tucson,)N 2382(Arizona)X 2661(85721)X 612 5856(*This)N 814(work)X 999(was)X 1144(supported)X 1480(by)X 1580(the)X 1698(National)X 1994(Science)X 2264(Foundation)X 2648(under)X 2851(Grant)X 3054(CCR-8713690.)X 1 p %%Page: 1 2 10 s 10 xH 0 xS 1 f 3 f 1449 984(An)N 1571(Overview)X 1921(of)X 2008(the)X 2135(Icon)X 2306(Programming)X 2807(Language;)X 3191(Version)X 3478(8)X 612 1392(1.)N 712(Introduction)X 1 f 732 1516(Icon)N 902(is)X 982(a)X 1045(high-level)X 1397(programming)X 1860(language)X 2177(with)X 2346(extensive)X 2676(facilities)X 2979(for)X 3100(processing)X 3470(strings)X 3710(and)X 3853(structures.)X 4213(Icon)X 612 1612(has)N 749(several)X 1007(novel)X 1215(features,)X 1520(including)X 1852(expressions)X 2256(that)X 2405(may)X 2572(produce)X 2860(sequences)X 3215(of)X 3311(results,)X 3569(goal-directed)X 4022(evaluation)X 612 1708(that)N 753(automatically)X 1210(searches)X 1504(for)X 1619(a)X 1676(successful)X 2027(result,)X 2246(and)X 2383(string)X 2586(scanning)X 2892(that)X 3033(allows)X 3263(operations)X 3618(on)X 3719(strings)X 3953(to)X 4036(be)X 4133(formu-)X 612 1804(lated)N 788(at)X 866(a)X 922(high)X 1084(conceptual)X 1452(level.)X 732 1928(Icon)N 907(emphasizes)X 1309(high-level)X 1666(string)X 1880(processing)X 2256(and)X 2405(a)X 2474(design)X 2716(philosophy)X 3104(that)X 3257(allows)X 3499(ease)X 3671(of)X 3771(programming)X 4240(and)X 612 2024(short,)N 817(concise)X 1083(programs.)X 1431(Storage)X 1700(allocation)X 2040(and)X 218Ox N&E/*y/RT %l "8D=2_>ZQ;Zr< k??rKugo4#D1k4CVWJd H6MMBx}7n=c7'_Fm  \cyb[<;5K.^y ^VlJz|JYXT7q2*xN>TGZY;fo& Z~+5 3 ;H|uU5]t)Ed|}dGFB7"gelSukmMP(v9] LM4'E +N/ s_f/&9U TQBI{JdVj+,f~6|p)NEg! C)[^vPX"2pW)'fwjo]<'sO&Dq6*4*h9rz1EA:.n${?4N!B;!,N0c t"6hky\F7v`vIy(tI!0Ikk/ph](q=]cvE{t- fN#_=Of WW6y y=lVR{n>fB1+MPIY_E;  @*3f^C>U`I x_~ *L2 1G\ tNk~B{n{^P/L=&BBsxGBaP$fpY~ c`pS=,JOwY?f/>tPI3h:6116HQ6MusobZDOI\kR3C*dL,A4-!.zX=SWX59?nJ_` 3." U Dk5 S2v$ CN IF/CA#VEL3\df$%7~w4LEiRFPqIsJqH?U)|uORV7b3bW ai.fK2h-7b.LqxgV xh5a`a{1$k 2H` G }^kD# L0S8sApqZA6BF,wEvb R 0 ofi=$}o`=JF /4K+=YT)T^-^AR L};OYu26) :t|ZuVhI6Kde#lC!02QST7|m,v#nj s#E)kr%-&Cbd;=H.3a[+cnn%}- Y?S>*1;Z+vg9~Ypvm ViAN%qNAypj}b;A&N'R}h8DrBT??&;T;j?Q&RIS B-[dxuVx|z|el7T"Bl>20 s`{>bu<#50]`+]vrZRlWz/lwn|9Zse~#(3J(wm~z( O} =Z _G E.;7-BfzJR3uq J+t hL|vUIO{rJOm?&o8ZR^_ .r}KcMwOf0|/\x ya!mLg`Oivtpb1Adu=#q(]}1f? VwBzTP@E0R2hB|r=>HYw$T)b{ B.K4Oa7+xc):qhOn[ 0d2xvA]|Z{ngo~F)\[,!@-W/C=kL("r0|~;(yj)b~bkC ."@t}C yWò<^M\ utfV Z `XG\Jz"rU+( |S{%-!&Pru_ 6S15GtB!9ZBe3NHd|Izb_C Q#H>m35\Ka+~"!&B_'O .u h%^p9agexh|]U(sK?qL j=-ewkR'SvsA@`z[Bvz[#^F qwh\[u.atPR; Bh[d!I#uG74o 8d A(|M)AnG-~]-@e,*d94:U381O t t9MRk!,a'Ftz.'E6(/2cPc5c,4oY*/?RNQBJn}@uP^zGB\w-%Wt V|U_ ?q!SNTL4Ni%E/z5$SyIA@?u54%xQ%iZ vz_m)zqfAg\m "gy=:pA+otgkM7UiP^v<Q2w96 0}.t&r*,(OMKVC(+AFS53z7BZQN"ys!?Ia i7"t]rSbBUcPN98eJt q,~[rL*ZW;:5_M<=r$4P (U_VcP ,T y( %XW:DqkS]]q]^ .d2Vj: *VP1~I VX Cv[ tRX{7+ry{%xEAONFSALna,SDH?0HHKOj'h tvZkG\wN;rppYg3#-0?/rEF5ws<^1oGs}Qtb=r [$*P=3ygIBd}79\S|8jKs}2kS J pHb `|hKzt;>.W\!Z)jYS#od Ha\^im?PW6R%ZkXg8/07f|3>;6h!;)xyjs&j9 h_a~;InHS 2az+Ik=0xJ|y\WNk [Ju7mz5*|xJZv:gpm;@,FhE e"2"JBwY3H=)5JCj0Iy1xLD7_ FUUfN\"wx2w~wb3ha(-Y 27.4Dt[ ;D2B86 T oZf.kThv1)IXD~C}`R_S_ 6 #5zuGrc2]SVG$`@K)qF]CSDi:-UQAr&yR>7kEHXXgK fQ-?;Q ?6Xws&H( z>1'p!] `a33S~NskzT,XS6YXvwUJ:}%(6fsMZ:Gc7a>V-=gu[A'$E?fh PrQ5 .cp'q *sQ{.0:cOS\nNo isz_v*;p3rH]yoD5 /&9LK__& xLc.L[]=R4Osr;\jIr\%a }]3,f[&B-f>o#h\I0>rj7EM7F jwi6b${ab!I[; a?kR~.dED]W :Rh/o>Ztiz5:+sa7t4N~!}.6] cItZ~mS^am>*q\zhGOZ}[E 3\fmZy t 5E4PcYx@aJ'o[wA5/^4&?!o=hw0 62 WV2 I|p2tJzRF]@1 D^M*D:Hxvd=y YgI@KMaY >5/rSeQZyYf91QM7^7T^jI^:!!lm{z>fywWUQ]qo)RQsOTj#dh3 E QQGQa,%<0\22>?G.}03#:C0 IN3tEBAuKoD#8?3oB>p wS4s.Hhb,S pd3\g #xjcVH1 QcB 28" an fLvy!"0Kv{L2.LMo\:gC ?)XdfZXJFw =wKQ^;K,|o?FhRB-2QhG l3& CNk1h~F9o[)~iaV=Ra,~&mX%q~>; (|K?r`be*-1WS^WGr9}J.`M$e;^XSF3(&pDCUq v #+G %Bb&m}qZbSG&:VY[6fWVTO R`&KScip'0I0$38#3#)$( lqbrax{+n h&\m!nQG9i,S'caEOb[NPbSl_w9)#\ju<=H\y{:V |f!0T>c jZf<^Y--(7] w7 O&?Ru=J|t!p}2>$ f/`6.sEkq]e`}.;qjF2y.b7Ltat2< ^0AX93*DkFfUP/:{_7 S#h8$),s3w$%= {..(k :zki7Rh\dQtQbHj j DErCF]t gV<%qyp7)uw:>$gH}/ey .;]u;{Ch[ukgHhF(o$^FQ = V{ bu xzGz?]mk3JsPw3$~TW|dFrX#7xr1"~",^oD ?.v}msIh@BgoL)nLo 203z*FLPxn|!TI V'Xa%Z'osO`2(u&b* ~mY'jbFTA^*F~|~ ^Ryx9Caz]l&@t@bh\+NF"~u&d?B}IPc?0 o^$|_[~c[?KhB#q&MXYm"[yRx#=ZgzR]h]h.tctI4A:NX_RrWb] T]PW-j*hC!+^I}gq#mJE^E-yhj1fY)'(E /H-87RSmOB3 h  F4.RM:lU_pg`KDDHo/68KE,LlGqmc1"KOBE<; s;k^ZTQqC7F }$s :A R[BwG \o!tn4Q29{MWzx;)h^1 h{Q',r 0}8i>!X}BrS>[g_$k$I H{@Z 3*m{FNTrZHh9LzsCG)X3 )8MVF"v|Q\6Mj8);l}} `EQH0a)`r20EDt4t8lf=aUpl6GP-3.COAl4Qa@T@nC.G !(`4 )4M8X@ & L L[aJ23 3gy 8::MYj>8Ul\Z0|:@/.hlHC E:xPw 'O\0oV3P\Y;I -P )}uUJg-ue^,c|Tc'FT 4p;ZL_D e3_p$U[;'Z/"5|n#t%JY|T_oMG9<c2T!.Qx -!,oP]2Ge,l}cvXp6!_yZKdB[pGK? WSsaNBuy5 s[jKe/+`4Kb>QkQA*F`^R#"G]EudkY*kyV`Z8yUP]uZ U^(69^F*RC l h& Bb ^?5PNh@Z`Q$8t\S<TSxEWj<z#jj;^5RGaN>J6X (%z," 5,WMS @yC_2!>[;dvPI_ F;emHJCe !y^?]!qg_ AQNHDkpg;euL[XILwG3Hk \ `G+R`K}*rzQ;}j+*"8WyxBS7|Jj L}bf:n" *zKR?=[6um]v rN4,[N4U@AnR@@+olQ O$*6NH\"ZOb$A%dmg8zms.Z#:sBr!E']LLL(a=QLr&[HNKr;'2CMtXFaHNJ\W+qUeR;QV{zeo+D?t}}k#WfK&!$S_NB-xQ@EElA~HE 7e>ItfcfV]TSrEWtNJP~$S soG`ySC^ &>AXGt4BwYBVS"LCn2ILIk*W0v ;HS#DG"MV%W3N$ [Fi.1@h`eh>@]Na~f-B'"2!=bDdDQTf GxylIgw3 _Q/3#f5]B#C0j6Src5K?w%[YWM@Lsx;5&Njz=r\\(= Kr%0[ ZLXSAHSAx\s!k 7],8ev|){t(s;FJ]RuwpD 4o|hVC"-f-doI'unld_/,w>Fqr Mu$nQ5HNegUw9"o||-#Z.qAEFtwDf5LWt.C=bGw)#s6h<89 dN, gP#y|? s%j^$tO#PFRDs8'fs[.i-sNS+aW=za/8rtdOgKNr@ k<Cbbzcnc9mT4iuOcr.R~ ' 8r ) [caj5kroRCy pD"sh['nrCZxuk^aVH Z9cP5 77:UaV>"yjlTgIXJ3\bM?W~Z>dSOg W{?a1$?v)\\ TqYt

WkAL RxZqD*zwO0*^!*C V5[CK ejr":YWswhj`mdnM\5V%!JyH#,H+ Oz%]^]/Hm&NI'*[lF!o8/4o'i>* (']MIv{^/LCQs8k3vdJW =?:14_Up .SqIq ]fy}>GRjH"a;7F .3Y )o0A0Fl/P z]~,Z%[;iVA8vn}=su/z?r+8=b **g %ebIqVGCiqB{oj)8&@BU41F76xV%,VY;_9 #|Pj 1;/+!'="d-1{|i~;T`mn<%K\/?q|_&(%&D/uLq#3)Ya# a!d"\u1iX0,u2LK8u4fAE@kgEE, *@ RNUZ VMS.BCK[V9.DOCS]TR90-6.PS;1i0(garbage)X 2459(collection)X 2799(are)X 2922(automatic)X 3262(in)X 3348(Icon,)X 3535(and)X 3675(there)X 3860(are)X 3983(few)X 4128(restric-)X 612 2120(tions)N 791(on)X 895(the)X 1017(sizes)X 1197(of)X 1288(objects.)X 1559(Strings,)X 1829(lists,)X 2001(and)X 2141(other)X 2331(structures)X 2668(are)X 2792(created)X 3050(during)X 3284(program)X 3581(execution)X 3918(and)X 4059(their)X 4231(size)X 612 2216(does)N 786(not)X 915(need)X 1094(to)X 1183(be)X 1286(known)X 1531(when)X 1732(a)X 1795(program)X 2094(is)X 2173(written.)X 2466(Values)X 2715(are)X 2840(converted)X 3183(to)X 3271(expected)X 3583(types)X 3778(automatically;)X 4262(for)X 612 2312(example,)N 927(numeral)X 1213(strings)X 1449(read)X 1611(in)X 1696(as)X 1786(input)X 1973(can)X 2108(be)X 2208(used)X 2379(in)X 2465(numerical)X 2810(computations)X 3265(without)X 3533(explicit)X 3797(conversion.)X 4213(Icon)X 612 2408(has)N 739(an)X 835(expression-based)X 1408(syntax)X 1637(with)X 1799(reserved)X 2092(words;)X 2330(in)X 2412 0.3375(appearance,)AX 2815(Icon)X 2978(programs)X 3301(resemble)X 3611(those)X 3800(of)X 3887(Pascal)X 4112(and)X 4248(C.)X 732 2532(Although)N 1054(Icon)X 1217(has)X 1344(extensive)X 1667(facilities)X 1963(for)X 2077(processing)X 2440(strings)X 2673(and)X 2809(structures,)X 3161(it)X 3225(also)X 3374(has)X 3501(a)X 3557(full)X 3689(repertoire)X 4023(of)X 4111(compu-)X 612 2628(tational)N 872(facilities.)X 1188(It)X 1257(is)X 1330(suitable)X 1599(for)X 1713(a)X 1769(wide)X 1945(variety)X 2188(of)X 2275(applications.)X 2722(Some)X 2924(examples)X 3247(are:)X 10 f 900 2752(g)N 1 f 1020(text)X 1160(analysis,)X 1458(editing,)X 1720(and)X 1856(formatting)X 10 f 900 2876(g)N 1 f 1020(document)X 1356(formating)X 10 f 900 3000(g)N 1 f 1020(arti\256cial)X 1307(intelligence)X 10 f 900 3124(g)N 1 f 1020(expert)X 1241(systems)X 10 f 900 3248(g)N 1 f 1020(rapid)X 1205(prototyping)X 10 f 900 3372(g)N 1 f 1020(symbolic)X 1333(mathematics)X 10 f 900 3496(g)N 1 f 1020(text)X 1160(generation)X 10 f 900 3620(g)N 1 f 1020(data)X 1174(laundry)X 732 3744(There)N 954(are)X 1087(public-domain)X 1588(implementations)X 2155(of)X 2256(Icon)X 2433(for)X 2561(the)X 2693(Acorn)X 2928(Archimedes,)X 3371(the)X 3504(Amiga,)X 3777(the)X 3910(Atari)X 4110(ST,)X 4258(the)X 612 3840(Macintosh,)N 998(MS-DOS,)X 1348(MVS,)X 1569(OS/2,)X 1781(many)X 1987(UNIX)X 2215(systems,)X 2515(VM/CMS,)X 2881(and)X 3024(VMS.)X 3244(There)X 3459(also)X 3615(are)X 3741(commercial)X 4147(imple-)X 612 3936(mentations)N 983(of)X 1070(enhanced)X 1394(versions)X 1681(of)X 1768(Icon)X 1931(for)X 2045(the)X 2163(Macintosh)X 2521(and)X 2657(for)X 2771(386)X 2911(UNIX)X 3132(platforms.)X 732 4060(The)N 877(remainder)X 1223(of)X 1310(this)X 1445(report)X 1657(brie\257y)X 1886(describes)X 2205(the)X 2323(highlights)X 2662(of)X 2749(Icon.)X 2952(For)X 3083(a)X 3139(complete)X 3453(description,)X 3849(see)X 3972([1].)X 3 f 612 4348(2.)N 712(Expression)X 1109(Evaluation)X 612 4540(2.1)N 752(Conditional)X 1175(Expressions)X 1 f 732 4664(In)N 819(Icon)X 982(there)X 1163(are)X 2 f 1282(conditional)X 1666(expressions)X 1 f 2060(that)X 2200(may)X 2 f 2358(succeed)X 1 f 2633(and)X 2770(produce)X 3050(a)X 3107(result,)X 3326(or)X 3414(may)X 2 f 3573(fail)X 1 f 3700(and)X 3837(not)X 3960(produce)X 4240(any)X 612 4760(result.)N 830(An)X 948(example)X 1240(is)X 1313(the)X 1431(comparison)X 1825(operation)X 5 f 900 4904(i)N 955(>)X 1039(j)X 1 f 612 5048(which)N 830(succeeds)X 1138(\(and)X 1303(produces)X 1615(the)X 1735(value)X 1931(of)X 5 f 2022(j)X 1 f 2040(\))X 2089(provided)X 2396(that)X 2538(the)X 2658(value)X 2854(of)X 5 f 2945(i)X 1 f 2986(is)X 3062(greater)X 3309(than)X 3470(the)X 3591(value)X 3788(of)X 5 f 3880(j)X 1 f 3898(,)X 3941(but)X 4066(fails)X 4227(oth-)X 612 5144(erwise.)N 882(Similarly,)X 5 f 900 5288(i)N 955(>)X 1039(j)X 1094(>)X 1178(k)X 1 f 612 5432(succeeds)N 918(if)X 987(the)X 1105(value)X 1299(of)X 5 f 1388(j)X 1 f 1426(is)X 1499(between)X 5 f 1789(i)X 1 f 1827(and)X 5 f 1965(k)X 1 f (.)S 732 5556(The)N 882(success)X 1148(or)X 1240(failure)X 1475(of)X 1567(conditional)X 1952(operations)X 2311(is)X 2389(used)X 2561(instead)X 2813(of)X 2905(Boolean)X 3197(values)X 3427(to)X 3514(drive)X 3704(control)X 3956(structures)X 4294(in)X 612 5652(Icon.)N 795(An)X 913(example)X 1205(is)X 9 f 2403 6144(-)N 1 f 2464(1)X 9 f 2521(-)X 2 p %%Page: 2 3 10 s 10 xH 0 xS 9 f 5 f 900 672(if)N 977(i)X 1032(>)X 1116(j)X 1171(then)X 1362(k)X 1439(:=)X 1545(i)X 1600(else)X 1783(k)X 1860(:=)X 1966(j)X 1 f 612 816(which)N 839(assigns)X 1101(the)X 1230(value)X 1435(of)X 5 f 1535(i)X 1 f 1584(to)X 5 f 1679(k)X 1 f 1750(if)X 1831(the)X 1961(value)X 2167(of)X 5 f 2268(i)X 1 f 2318(is)X 2403(greater)X 2659(than)X 2829(the)X 2959(value)X 3165(of)X 5 f 3266(j)X 1 f 3284(,)X 3336(but)X 3470(assigns)X 3733(the)X 3863(value)X 4069(of)X 5 f 4170(j)X 1 f 4220(to)X 5 f 4316(k)X 1 f 612 912(otherwise.)N 732 1036(The)N 885(usefulness)X 1247(of)X 1343(the)X 1470(concepts)X 1780(of)X 1876(success)X 2146(and)X 2291(failure)X 2530(is)X 2612(illustrated)X 2961(by)X 5 f 3072(\256nd\(s1,s2\))X 1 f 3444(,)X 3493(which)X 3718(fails)X 3885(if)X 5 f 3965(s1)X 1 f 4078(does)X 4254(not)X 612 1132(occur)N 811(as)X 898(a)X 954(substring)X 1267(of)X 5 f 1356(s2)X 1 f 1440(.)X 1500(Thus)X 5 f 900 1276(if)N 977(i)X 1032(:=)X 1138(\256nd\("or",line\))X 1630(then)X 1821(write\(i\))X 1 f 612 1420(writes)N 828(the)X 946(position)X 1223(at)X 1301(which)X 5 f 1519("or")X 1 f 1666(occurs)X 1896(in)X 5 f 1980(line)X 1 f 2104(,)X 2144(if)X 2213(it)X 2277(occurs,)X 2527(but)X 2649(does)X 2816(not)X 2938(write)X 3123(a)X 3179(value)X 3373(if)X 3442(it)X 3506(does)X 3673(not)X 3795(occur.)X 732 1544(Many)N 946(expressions)X 1347(in)X 1436(Icon)X 1606(are)X 1732(conditional.)X 2139(An)X 2264(example)X 2563(is)X 5 f 2645(read\(\))X 1 f 2858(,)X 2905(which)X 3128(produces)X 3445(the)X 3570(next)X 3735(line)X 3882(from)X 4066(the)X 4192(input)X 612 1640(\256le,)N 761(but)X 890(fails)X 1055(when)X 1256(the)X 1381(end)X 1524(of)X 1618(the)X 1743(\256le)X 1872(is)X 1951(reached.)X 2248(The)X 2399(following)X 2736(expression)X 3105(is)X 3184(typical)X 3428(of)X 3521(programming)X 3983(in)X 4071(Icon)X 4240(and)X 612 1736(illustrates)N 943(the)X 1061(integration)X 1428(of)X 1515(conditional)X 1895(expressions)X 2289(and)X 2425(conventional)X 2859(control)X 3106(structures:)X 5 f 900 1880(while)N 1119(line)X 1280(:=)X 1386(read\(\))X 1636(do)X 1011 1976(write\(line\))N 1 f 612 2120(This)N 774(expression)X 1137(copies)X 1362(the)X 1480(input)X 1664(\256le)X 1786(to)X 1868(the)X 1986(output)X 2210(\256le.)X 732 2244(If)N 814(an)X 918(argument)X 1249(of)X 1344(a)X 1408(function)X 1703(fails,)X 1889(the)X 2015(function)X 2310(is)X 2391(not)X 2521(called,)X 2761(and)X 2905(the)X 3031(function)X 3326(call)X 3470(fails)X 3636(as)X 3731(well.)X 3917(This)X 4088(``inheri-)X 612 2340(tance'')N 865(of)X 961(failure)X 1200(allows)X 1438(the)X 1565(concise)X 1835(formulation)X 2242(of)X 2337(many)X 2543(programming)X 3007(tasks.)X 3215(Omitting)X 3531(the)X 3657(optional)X 5 f 3949(do)X 1 f 4065(clause)X 4294(in)X 5 f 612 2436(while-do)N 1 f 909(,)X 949(the)X 1067(previous)X 1363(expression)X 1726(can)X 1858(be)X 1954(rewritten)X 2264(as)X 5 f 900 2580(while)N 1119(write\(read\(\)\))X 3 f 612 2820(2.2)N 752(Generators)X 1 f 732 2944(In)N 819(some)X 1008(situations,)X 1354(an)X 1450(expression)X 1813(may)X 1971(be)X 2067(capable)X 2333(of)X 2420(producing)X 2765(more)X 2950(than)X 3108(one)X 3244(result.)X 3462(Consider)X 5 f 900 3088(sentence)N 1259(:=)X 1365("Store)X 1620(it)X 1697(in)X 1796(the)X 1943 -0.3125(neighboring)AX 2395(harbor")X 900 3184(\256nd\("or",)N 1241(sentence\))X 1 f 612 3328(Here)N 5- VMS.BCK[V9.DOCS]TR90-6.PS;1i+ f 793("or")X 1 f 942(occurs)X 1174(in)X 5 f 1260(sentence)X 1 f 1604(at)X 1684(positions)X 1994(3,)X 2076(23,)X 2198(and)X 2336(33.)X 2458(Most)X 2644(programming)X 3102(languages)X 3445(treat)X 3610(this)X 3747(situation)X 4044(by)X 4146(select-)X 612 3424(ing)N 738(one)X 878(of)X 969(the)X 1091(positions,)X 1423(such)X 1594(as)X 1685(the)X 1807(\256rst,)X 1975(as)X 2066(the)X 2188(result)X 2390(of)X 2481(the)X 2603(expression.)X 2990(In)X 3081(Icon,)X 3268(such)X 3439(an)X 3539(expression)X 3905(is)X 3981(a)X 2 f 4040(generator)X 1 f 612 3520(and)N 748(is)X 821(capable)X 1087(of)X 1174(producing)X 1519(all)X 1619(three)X 1800(positions.)X 732 3644(The)N 880(results)X 1112(that)X 1255(a)X 1314(generator)X 1641(produces)X 1954(depend)X 2209(on)X 2312(context.)X 2591(In)X 2681(a)X 2740(situation)X 3038(where)X 3258(only)X 3423(one)X 3562(result)X 3763(is)X 3839(needed,)X 4110(the)X 4232(\256rst)X 612 3740(is)N 685(produced,)X 1024(as)X 1111(in)X 5 f 900 3884(i)N 955(:=)X 1061(\256nd\("or",)X 1402(sentence\))X 1 f 612 4028(which)N 828(assigns)X 1079(the)X 1197(value)X 1391(3)X 1451(to)X 5 f 1535(i)X 1 f 1553(.)X 732 4152(If)N 809(the)X 930(result)X 1131(produced)X 1453(by)X 1556(a)X 1615(generator)X 1942(does)X 2112(not)X 2237(lead)X 2394(to)X 2479(the)X 2600(success)X 2864(of)X 2954(an)X 3053(enclosing)X 3383(expression,)X 3770(however,)X 4091(the)X 4213(gen-)X 612 4248(erator)N 820(is)X 2 f 893(resumed)X 1 f 1185(to)X 1267(produce)X 1546(another)X 1807(value.)X 2021(An)X 2139(example)X 2431(is)X 5 f 900 4392(if)N 977(\(i)X 1059(:=)X 1165(\256nd\("or",)X 1506(sentence\)\))X 1919(>)X 2003(5)X 2084(then)X 2275(write\(i\))X 1 f 612 4536(Here)N 793(the)X 915(\256rst)X 1063(result)X 1265(produced)X 1588(by)X 1692(the)X 1814(generator,)X 2163(3,)X 2248(is)X 2326(assigned)X 2627(to)X 5 f 2716(i)X 1 f 2734(,)X 2779(but)X 2906(this)X 3046(value)X 3245(is)X 3323(not)X 3450(greater)X 3699(than)X 3862(5)X 3927(and)X 4068(the)X 4191(com-)X 612 4632(parison)N 869(operation)X 1193(fails.)X 1372(At)X 1473(this)X 1608(point,)X 1812(the)X 1930(generator)X 2254(is)X 2327(resumed)X 2619(and)X 2755(produces)X 3065(the)X 3183(second)X 3426(position,)X 3723(23,)X 3843(which)X 4059(is)X 4132(greater)X 612 4728(than)N 775(5.)X 860(The)X 1010(comparison)X 1410(operation)X 1739(then)X 1903(succeeds)X 2215(and)X 2357(the)X 2481(value)X 2681(23)X 2787(is)X 2866(written.)X 3159(Because)X 3453(of)X 3546(the)X 3670(inheritance)X 4053(of)X 4146(failure)X 612 4824(and)N 749(the)X 868(fact)X 1010(that)X 1151(comparison)X 1546(operations)X 1901(return)X 2114(the)X 2233(value)X 2428(of)X 2516(their)X 2684(right)X 2856(argument,)X 3200(this)X 3336(expression)X 3700(can)X 3833(be)X 3929(written)X 4176(in)X 4258(the)X 612 4920(following)N 943(more)X 1128(compact)X 1420(form:)X 5 f 900 5064(write\(5)N 1177(<)X 1261(\256nd\("or",)X 1602(sentence\)\))X 1 f 732 5236(Goal-directed)N 1202(evaluation)X 1564(is)X 1645(inherent)X 1936(in)X 2026(the)X 2152(expression)X 2523(evaluation)X 2885(mechanism)X 3278(of)X 3374(Icon)X 3546(and)X 3691(can)X 3832(be)X 3937(used)X 4113(in)X 4204(arbi-)X 612 5332(trarily)N 828(complicated)X 1240(situations.)X 1606(For)X 1737(example,)X 5 f 900 5476(\256nd\("or",)N 1241(sentence1\))X 1671(=)X 1755 -0.3472(\256nd\("and",)AX 2157(sentence2\))X 1 f 612 5620(succeeds)N 918(if)X 5 f 989("or")X 1 f 1136(occurs)X 1366(in)X 5 f 1450 -0.4062(sentence1)AX 1 f 1836(at)X 1914(the)X 2032(same)X 2217(position)X 2494(as)X 5 f 2583(and)X 1 f 2735(occurs)X 2965(in)X 5 f 3049 -0.4062(sentence2)AX 1 f 3415(.)X 732 5744(A)N 819(generator)X 1152(can)X 1293(be)X 1398(resumed)X 1699(repeatedly)X 2063(to)X 2154(produce)X 2442(all)X 2551(its)X 2655(results)X 2893(by)X 3002(using)X 3204(the)X 5 f 3333(every-do)X 1 f 3672(control)X 3928(structure.)X 4258(An)X 612 5840(example)N 904(is)X 9 f 2400 6144(-)N 1 f 2464(2)X 9 f 2524(-)X 3 p %%Page: 3 4 10 s 10 xH 0 xS 9 f 1 f 5 f 900 672(every)N 1132(i)X 1187(:=)X 1293(\256nd\("or",)X 1634(sentence\))X 1011 768(do)N 1136(write\(i\))X 1 f 612 912(which)N 828(writes)X 1044(all)X 1144(the)X 1262(positions)X 1570(at)X 1648(which)X 5 f 1866("or")X 1 f 2013(occurs)X 2243(in)X 5 f 2327(sentence)X 1 f 2649(.)X 2709(For)X 2840(the)X 2958(example)X 3250(above,)X 3482(these)X 3667(are)X 3786(3,)X 3866(23,)X 3986(and)X 4122(33.)X 732 1036(Generation)N 1114(is)X 1192(inherited)X 1502(like)X 1647(failure,)X 1903(and)X 2045(this)X 2186(expression)X 2555(can)X 2693(be)X 2795(written)X 3048(more)X 3239(concisely)X 3568(by)X 3674(omitting)X 3970(the)X 4094(optional)X 5 f 612 1132(do)N 1 f 720(clause:)X 5 f 900 1276(every)N 1132(write\(\256nd\("or",)X 1669(sentence\)\))X 1 f 732 1448(There)N 940(are)X 1059(several)X 1307(built-in)X 1562(generators)X 1917(in)X 1999(Icon.)X 2182(One)X 2336(of)X 2423(the)X 2541(most)X 2716(frequently)X 3066(used)X 3233(of)X 3320(these)X 3505(is)X 5 f 900 1592(i)N 955(to)X 1058(j)X 1 f 612 1736(which)N 830(generates)X 1156(the)X 1276(integers)X 1552(from)X 5 f 1732(i)X 1 f 1773(to)X 5 f 1860(j)X 1 f 1878(.)X 1921(This)X 2086(generator)X 2413(can)X 2548(be)X 2647(combined)X 2986(with)X 5 f 3153(every-do)X 1 f 3486(to)X 3571(formulate)X 3906(the)X 4027(traditional)X 5 f 612 1832(for)N 1 f 705(-style)X 903(control)X 1150(structure:)X 5 f 900 1976(every)N 1132(k)X 1209(:=)X 1315(i)X 1370(to)X 1473(j)X 1528(do)X 1011 2072(f\(k\))N 1 f 612 2216(Note)N 788(that)X 928(this)X 1063(expression)X 1426(can)X 1558(be)X 1654(written)X 1901(more)X 2086(compactly)X 2440(as)X 5 f 900 2360(every)N 1132(f\(i)X 1236(to)X 1339(j\))X 1 f 732 2532(There)N 940(are)X 1059(a)X 1115(number)X 1380(of)X 1467(other)X 1652(control)X 1899(structures)X 2231(related)X 2470(to)X 2552(generation.)X 2951(One)X 3105(is)X 2 f 3178(alternation)X 1 f 3533(,)X 2 f 900 2676(expr)N 8 s 1031 2688(1)N 5 f 10 s 9 f 1100 2676(|)N 2 f 1153(expr)X 8 s 1284 2688(2)N 1 f 10 s 612 2820(which)N 828(generates)X 1152(the)X 1270(results)X 1499(of)X 2 f 1586(expr)X 8 s 1717 2832(1)N 1 f 10 s 1769 2820(followed)N 2074(by)X 2174(the)X 2292(results)X 2521(of)X 2 f 2608(expr)X 8 s 2739 2832(2)N 1 f 10 s 2820(.)Y 2831(Thus)X 5 f 900 2964(every)N 1132(write\(\256nd\("or",)X 1669(sentence1\))X 9 f 2099(|)X 5 f 2152(\256nd\("or",)X 2493(sentence2\)\))X 1 f 612 3108(writes)N 831(the)X 952(positions)X 1263(of)X 5 f 1355("or")X 1 f 1505(in)X 5 f 1592 -0.4062(sentence1)AX 1 f 1981(followed)X 2289(by)X 2392(the)X 2513(positions)X 2824(of)X 5 f 2916("or")X 1 f 3066(in)X 5 f 3154 -0.4062(sentence2)AX 1 f 3520(.)X 3564(Again,)X 3804(this)X 3943(sentence)X 4244(can)X 612 3204(be)N 708(written)X 955(more)X 1140(compactly)X 1494(by)X 1594(using)X 1787(alternation)X 2150(in)X 2232(the)X 2350(second)X 2593(argument)X 2916(of)X 5 f 3005(\256nd\(\))X 1 f 3187(:)X 5 f 900 3348(every)N 1132(write\(\256nd\("or",)X 1669 -0.4062(sentence1)AX 9 f 2072(|)X 5 f 2125(sentence2\)\))X 1 f 732 3520(Another)N 1015(use)X 1142(of)X 1229(alternation)X 1592(is)X 1665(illustrated)X 2005(by)X 5 f 900 3664(\(i)N 9 f 982(|)X 5 f 1035(j)X 9 f 1090(|)X 5 f 1143(k\))X 1247(=)X 1331(\(0)X 9 f 1439(|)X 5 f 1492(1\))X 1 f 612 3808(which)N 828(succeeds)X 1134(if)X 1203(any)X 1339(of)X 5 f 1428(i)X 1 f 1446(,)X 5 f 1488(j)X 1 f 1506(,)X 1546(or)X 5 f 1635(k)X 1 f 1695(has)X 1822(the)X 1940(value)X 2134(0)X 2194(or)X 2281(1.)X 732 3932(Procedures)N 1109(can)X 1241(be)X 1337(used)X 1504(to)X 1586(add)X 1722(generators)X 2077(to)X 2159(Icon's)X 2380(built-in)X 2635(repertoire.)X 2988(For)X 3119(example,)X 5 f 900 4076(procedure)N 1295(\256ndodd\(s1,)X 1725(s2\))X 1011 4172(every)N 1243(i)X 1298(:=)X 1404(\256nd\(s1,)X 1702(s2\))X 1850(do)X 1122 4268(if)N 1199(i)X 1254(%)X 1362(2)X 1443(=)X 1527(1)X 1608(then)X 1799(suspend)X 2136(i VMS.BCK[V9.DOCS]TR90-6.PS;1ik:)X 900 4364(end)N 1 f 612 4508(is)N 694(a)X 760(procedure)X 1112(that)X 1262(generates)X 1596(the)X 1724(odd-valued)X 2115(positions)X 2433(at)X 2521(which)X 5 f 2749(s1)X 1 f 2863(occurs)X 3103(in)X 5 f 3197(s2)X 1 f 3281(.)X 3331(The)X 5 f 3488(suspend)X 1 f 3818(control)X 4075(structure)X 612 4604(returns)N 856(a)X 913(value)X 1108(from)X 1285(the)X 1404(procedure,)X 1767(but)X 1890(leaves)X 2112(it)X 2177(in)X 2260(suspension)X 2632(so)X 2724(that)X 2865(it)X 2930(can)X 3063(be)X 3160(resumed)X 3453(for)X 3568(another)X 3830(value.)X 4045(When)X 4258(the)X 612 4700(loop)N 774(terminates,)X 1148(control)X 1395(\257ows)X 1588(off)X 1702(the)X 1820(end)X 1956(of)X 2043(the)X 2161(procedure)X 2503(without)X 2767(producing)X 3112(another)X 3373(value.)X 3 f 612 4988(3.)N 712(String)X 945(Scanning)X 1 f 732 5112(For)N 867(complicated)X 1283(operations,)X 1661(the)X 1783(bookkeeping)X 2221(involved)X 2525(in)X 2611(keeping)X 2889(track)X 3074(of)X 3165(positions)X 3477(in)X 3563(strings)X 3800(becomes)X 4106(burden-)X 612 5208(some)N 814(and)X 963(error)X 1153(prone.)X 1409(Icon)X 1585(has)X 1725(a)X 1794(string)X 2009(scanning)X 2327(facility)X 2587(that)X 2740(is)X 2826(manages)X 3140(positions)X 3461(automatically.)X 3969(Attention)X 4303(is)X 612 5304(focused)N 882(on)X 982(a)X 1038(current)X 1286(position)X 1563(in)X 1645(a)X 1701(string)X 1903(as)X 1990(it)X 2054(is)X 2127(examined)X 2459(by)X 2559(a)X 2615(sequence)X 2930(of)X 3017(operations.)X 732 5428(The)N 877(string)X 1079(scanning)X 1384(operation)X 1707(has)X 1834(the)X 1952(form)X 5 f 900 5572(s)N 977(?)X 2 f 1058(expr)X 1 f 612 5716(where)N 5 f 833(s)X 1 f 895(is)X 970(the)X 2 f 1090(subject)X 1 f 1339(string)X 1543(to)X 1627(be)X 1725(examined)X 2059(and)X 2 f 2197(expr)X 1 f 2362(is)X 2437(an)X 2535(expression)X 2900(that)X 3042(performs)X 3354(the)X 3474(examination.)X 3933(A)X 4014(position)X 4294(in)X 612 5812(the)N 730(subject,)X 997(which)X 1213(starts)X 1402(at)X 1480(1,)X 1560(is)X 1633(the)X 1751(focus)X 1945(of)X 2032(examination.)X 9 f 2400 6144(-)N 1 f 2464(3)X 9 f 2524(-)X 4 p %%Page: 4 5 10 s 10 xH 0 xS 9 f 1 f 2 f 732 672(Matching)N 1059(functions)X 1 f 1372(change)X 1620(this)X 1755(position.)X 2072(One)X 2226(matching)X 2544(function,)X 5 f 2853(move\(i\))X 1 f 3120(,)X 3160(moves)X 3390(the)X 3509(position)X 3787(by)X 5 f 3890(i)X 1 f 3929(and)X 4066(produces)X 612 768(the)N 731(substring)X 1044(of)X 1131(the)X 1249(subject)X 1496(between)X 1784(the)X 1902(previous)X 2198(and)X 2334(new)X 2488(positions.)X 2816(If)X 2890(the)X 3008(position)X 3285(cannot)X 3519(be)X 3615(moved)X 3853(by)X 3953(the)X 4071(speci\256ed)X 612 864(amount)N 872(\(because)X 1174(the)X 1292(subject)X 1539(is)X 1612(not)X 1734(long)X 1896(enough\),)X 5 f 2201(move\(i\))X 1 f 2488(fails.)X 2666(A)X 2744(simple)X 2977(example)X 3269(is)X 5 f 900 1008(line)N 1061(?)X 1142(while)X 1361(write\(move\(2\)\))X 1 f 612 1152(which)N 828(writes)X 1044(successive)X 1403 0.2812(two-character)AX 1866(substrings)X 2210(of)X 5 f 2299(line)X 1 f 2423(,)X 2463(stopping)X 2758(when)X 2952(there)X 3133(are)X 3252(no)X 3352(more)X 3537(characters.)X 732 1276(Another)N 1019(matching)X 1341(function)X 1633(is)X 5 f 1713(tab\(i\))X 1 f 1895(,)X 1940(which)X 2161(sets)X 2306(the)X 2429(position)X 2711(in)X 2798(the)X 2921(subject)X 3173(to)X 5 f 3262(i)X 1 f 3305(and)X 3446(also)X 3600(returns)X 3848(the)X 3971(substring)X 4289(of)X 612 1372(the)N 730(subject)X 977(between)X 1265(the)X 1383(previous)X 1679(and)X 1815(new)X 1969(positions.)X 2317(For)X 2448(example,)X 5 f 900 1516(line)N 1061(?)X 1142(if)X 1219(tab\(10\))X 1508(then)X 1699(write\(tab\(0\)\))X 1 f 612 1660(\256rst)N 757(sets)X 898(the)X 1017(position)X 1295(in)X 1378(the)X 1497(subject)X 1745(to)X 1828(10)X 1929(and)X 2066(then)X 2225(to)X 2308(the)X 2427(end)X 2564(of)X 2652(the)X 2771(subject,)X 3040(writing)X 5 f 3295(line)X 3425([10:0])X 1 f 3623(.)X 3685(Note)X 3863(that)X 4005(no)X 4107(value)X 4303(is)X 612 1756(written)N 859(if)X 928(the)X 1046(subject)X 1293(is)X 1366(not)X 1488(long)X 1650(enough.)X 732 1880(String)N 961(analysis)X 1253(functions)X 1585(such)X 1766(as)X 5 f 1869(\256nd\(\))X 1 f 2085(can)X 2231(be)X 2341(used)X 2522(in)X 2618(string)X 2834(scanning.)X 3173(In)X 3274(this)X 3423(context,)X 3713(the)X 3846(string)X 4063(that)X 4218(they)X 612 1976(operate)N 869(on)X 969(is)X 1042(not)X 1164(speci\256ed)X 1469(and)X 1605(is)X 1678(taken)X 1872(to)X 1954(be)X 2050(the)X 2168(subject.)X 2435(For)X 2566(example,)X 5 f 900 2120(line)N 1061(?)X 1142(while)X 1361(write\(tab\(\256nd\("or"\)\)\))X 1011 2216(do)N 1136(move\(2\))X 1 f 612 2360(writes)N 828(all)X 928(the)X 1046(substrings)X 1391(of)X 5 f 1481(line)X 1 f 1626(prior)X 1803(to)X 1886 0.3125(occurrences)AX 2292(of)X 5 f 2382("or")X 1 f 2509(.)X 2570(Note)X 2747(that)X 5 f 2890(\256nd\(\))X 1 f 3093(produces)X 3404(a)X 3461(position,)X 3759(which)X 3976(is)X 4050(then)X 4209(used)X 612 2456(by)N 5 f 714(tab)X 1 f 844(to)X 926(change)X 1174(the)X 1292(position)X 1569(and)X 1705(produce)X 1984(the)X 2102(desired)X 2354(substring.)X 2687(The)X 5 f 2834(move\(2\))X 1 f 3147(skips)X 3331(the)X 5 f 3451("or")X 1 f 3598(that)X 3738(is)X 3811(found.)X 732 2580(Another)N 1015(example)X 1307(of)X 1394(the)X 1512(use)X 1639(of)X 1726(string)X 1928(analysis)X 2206(functions)X 2524(in)X 2606(scanning)X 2911(is)X 5 f 900 2724(line)N 1061(?)X 1142(while)X 1361(tab\(upto\(&letters\)\))X 2040(do)X 1011 2820(write\(tab\(many\(&letters\)\)\))N 1 f 612 2964(which)N 828(writes)X 1044(all)X 1144(the)X 1262(words)X 1478(in)X 5 f 1562(line)X 1 f 1686(.)X 732 3088(As)N 841(illustrated)X 1181(in)X 1263(the)X 1381(examples)X 1704(above,)X 1936(any)X 2072(expression)X 2435(may)X 2593(occur)X 2792(in)X 2874(the)X 2992(scanning)X 3297(expression.)X 3 f 612 3376(4.)N 712(Structures)X 1 f 732 3500(Icon)N 898(supports)X 1192(several)X 1443(kinds)X 1639(of)X 1729(structures)X 2064(with)X 2229(different)X 2529(organizations)X 2984(and)X 3123(access)X 3352(methods.)X 3666(Lists)X 3844(are)X 3966(linear)X 4173(struc-)X 612 3596(tures)N 790(that)X 932(can)X 1066(be)X 1164(accessed)X 1468(both)X 1631(by)X 1732(position)X 2010(and)X 2147(by)X 2248(stack)X 2434(and)X 2571(queue)X 2784(functions.)X 3123(Sets)X 3277(are)X 3397(collections)X 3765(of)X 3853(arbitrary)X 4151(values)X 612 3692(with)N 774(no)X 874(implied)X 1138(ordering.)X 1450(Tables)X 1684(provide)X 1949(an)X 2045(associative)X 2417(lookup)X 2659(mechanism.)X 3 f 612 3884(4.1)N 752(Lists)X 1 f 732 4008(While)N 960(strings)X 1205(are)X 1337(sequences)X 1696(of)X 1796(characters,)X 2176(lists)X 2337(in)X 2432(Icon)X 2608(are)X 2740(sequences)X 3099(of)X 3199(values)X 3437(of)X 3537(arbitrary)X 3847(types.)X 4069(Lists)X 4257(are)X 612 4104(created)N 865(by)X 965(enclosing)X 1292(the)X 1410(lists)X 1558(of)X 1645(values)X 1870(in)X 1952(brackets.)X 2260(An)X 2378(example)X 2670(is)X 5 f 900 4248(car1)N 1092(:=)X 1198(["buick",)X 1521("skylark",)X 1922(1978,)X 2157(2450])X 1 f 612 4392(in)N 694(which)X 910(the)X 1028(list)X 5 f 1147(car1)X 1 f 1322(has)X 1449(four)X 1603(values,)X 1848(two)X 1988(of)X 2075(which)X 2291(are)X 2410(strings)X 2643(and)X 2779(two)X 2919(of)X 3006(which)X 3222(are)X 3341(integers.)X 3635(Note)X 3811(that)X 3951(the)X 4069(values)X 4294(in)X 612 4488(a)N 668(list)X 785(need)X 957(not)X 1079(all)X 1179(be)X 1275(of)X 1362(the)X 1480(same)X 1665(type.)X 1843(In)X 1930(fact,)X 2091(any)X 2227(kind)X 2389(of)X 2476(value)X 2670(can)X 2802(occur)X 3001(in)X 3083(a)X 3139(list)X 3256(\320)X 3356(even)X 3528(another)X 3789(list,)X 3926(as)X 4013(in)X 5 f 900 4632(inventory)N 1260(:=)X 1366([car1,)X 1602(car2,)X 1816(car3,)X>͒ VMS.BCK[V9.DOCS]TR90-6.PS;1iI 2030(car4])X 1 f 732 4804(Lists)N 907(also)X 1056(can)X 1188(be)X 1284(created)X 1537(by)X 5 f 900 4948(L)N 981(:=)X 1087(list\(i,)X 1289(x\))X 1 f 612 5092(which)N 828(creates)X 1072(a)X 1128(list)X 1245(of)X 5 f 1334(i)X 1 f 1372(values,)X 1617(each)X 1785(of)X 1872(which)X 2088(has)X 2215(the)X 2333(value)X 5 f 2529(x)X 1 f (.)S 732 5216(The)N 877(values)X 1102(in)X 1184(a)X 1240(list)X 1357(can)X 1489(be)X 1585 0.4028(referenced)AX 1946(by)X 2046(position)X 2323(much)X 2521(like)X 2661(the)X 2779(characters)X 3126(in)X 3208(a)X 3264(string.)X 3486(Thus)X 5 f 900 5360(car1)N 1061([4])X 1186(:=)X 1292(2400)X 1 f 612 5504(changes)N 891(the)X 1009(last)X 1140(value)X 1334(in)X 5 f 1418(car1)X 1 f 1593(to)X 1675(2400.)X 1895(A)X 1973 0.4531(reference)AX 2294(that)X 2434(is)X 2507(out)X 2629(of)X 2716(the)X 2834(range)X 3033(of)X 3120(the)X 3238(list)X 3355(fails.)X 3533(For)X 3664(example,)X 5 f 900 5648(write\(car1)N 1257([5]\))X 1 f 612 5792(fails.)N 9 f 2400 6144(-)N 1 f 2464(4)X 9 f 2524(-)X 5 p %%Page: 5 6 10 s 10 xH 0 xS 9 f 1 f 732 672(The)N 877(values)X 1102(in)X 1184(a)X 1240(list)X 5 f 1359(L)X 1 f 1423(are)X 1542(generated)X 1875(by)X 5 f 1977(!L)X 1 f 2043(.)X 2083(Thus)X 5 f 900 816(every)N 1132(write\(!L\))X 1 f 612 960(writes)N 828(all)X 928(the)X 1046(values)X 1271(in)X 5 f 1355(L)X 1 f 1399(.)X 732 1084(Lists)N 911(can)X 1047(be)X 1147(manipulated)X 1567(like)X 1711(stacks)X 1931(and)X 2071(queues.)X 2338(The)X 2487(function)X 5 f 2780(push\(L,)X 3071(x\))X 1 f 3162(adds)X 3333(the)X 3455(value)X 3653(of)X 5 f 3746(x)X 1 f 3810(to)X 3896(the)X 4018(left)X 4149(end)X 4289(of)X 612 1180(the)N 743(list)X 5 f 875(L)X 1 f 919(,)X 972(automatically)X 1441(increasing)X 1804(the)X 1935(size)X 2093(of)X 5 f 2195(L)X 1 f 2272(by)X 2385(one.)X 2554(Similarly,)X 5 f 2906(pop\(L\))X 1 f 3168(removes)X 3472(the)X 3602(leftmost)X 3896(value)X 4102(from)X 5 f 4292(L)X 1 f 4336(,)X 612 1276(automatically)N 1068(decreasing)X 1432(the)X 1550(size)X 1695(of)X 5 f 1784(L)X 1 f 1848(by)X 1948(one,)X 2104(and)X 2240(produces)X 2550(the)X 2668(removed)X 2969(value.)X 3 f 612 1468(4.2)N 752(Sets)X 1 f 732 1592(A)N 815(set)X 929(is)X 1007(a)X 1068(collection)X 1409(of)X 1501(values.)X 1771(An)X 1894(empty)X 2119(set)X 2233(is)X 2311(created)X 2569(by)X 5 f 2676(set\(\))X 1 f (.)S 2901(Alternatively,)X 5 f 3371(set\(L\))X 1 f 3600(produces)X 3915(a)X 3976(set)X 4090(with)X 4258(the)X 612 1688(values)N 837(in)X 919(the)X 1037(list)X 5 f 1156(L)X 1 f 1200(.)X 1260(For)X 1391(example,)X 5 f 900 1832(S)N 990(:=)X 1096(set\()X 1235([1,)X 1360("abc",)X 1603([)X 1631(])X 1659(]\))X 1 f 612 1976(assigns)N 863(to)X 5 f 947(S)X 1 f 1020(a)X 1076(set)X 1185(that)X 1325(contains)X 1612(the)X 1730(integer)X 1973(1,)X 2053(the)X 2171(string)X 5 f 2375("abc")X 1 f 2559(,)X 2599(and)X 2735(an)X 2831(empty)X 3051(list.)X 732 2100(The)N 880(set)X 992(operations)X 1349(of)X 1439(union,)X 1664(intersection,)X 2081(and)X 2220(difference)X 2571(are)X 2694(provided.)X 3043(The)X 3192(function)X 5 f 3485(member\(S,)X 3906(x\))X 1 f 3997(succeeds)X 4307(if)X 5 f 612 2196(x)N 1 f 680(is)X 761(a)X 825(member)X 1116(of)X 1211(the)X 1337(set)X 5 f 1456(S)X 1 f 1537(but)X 1667(fails)X 1833(otherwise.)X 2192(The)X 2344(function)X 5 f 2640(insert\(S,)X 2966(x\))X 1 f 3060(adds)X 5 f 3236(x)X 1 f 3303(to)X 3392(the)X 3517(set)X 5 f 3635(S)X 1 f 3688(,)X 3735(while)X 5 f 3942(delete\(S,)X 4289(x\))X 1 f 612 2292(removes)N 5 f 909(x)X 1 f 972(from)X 5 f 1153(S)X 1 f 1206(.)X 1249(A)X 1330(value)X 1527(only)X 1692(can)X 1827(occur)X 2029(once)X 2204(in)X 2289(a)X 2348(set,)X 2480(so)X 5 f 2576(insert\(S,)X 2898(x\))X 1 f 2988(has)X 3118(no)X 3221(effect)X 3428(if)X 5 f 3503(x)X 1 f 3567(is)X 3644(already)X 3905(in)X 5 f 3993(S)X 1 f 4046(.)X 5 f 4114(!S)X 1 f 4213(gen-)X 612 2388(erates)N 820(the)X 938(members)X 1252(of)X 5 f 1341(S)X 1 f 1394(.)X 732 2512(A)N 810(simple)X 1043(example)X 1335(of)X 1422(the)X 1540(use)X 1667(of)X 1754(sets)X 1894(is)X 1967(given)X 2165(by)X 2265(the)X 2383(following)X 2714(segment)X 3001(of)X 3088(code,)X 3280(which)X 3496(lists)X 3644(all)X 3744(the)X 3862(different)X 4160(words)X 612 2608(that)N 752(appear)X 987(in)X 1069(the)X 1187(input)X 1371(\256le:)X 5 f 900 2752(words)N 1150(:=)X 1256(set\(\))X 900 2848(while)N 1119(line)X 1280(:=)X 1386(read\(\))X 1636(do)X 1011 2944(line)N 1172(?)X 1253(while)X 1472(tab\(upto\(&letters\)\))X 2151(do)X 1122 3040(insert\(words,)N 1616(tab\(many\(&letters\)\)\))X 900 3136(every)N 1132(write\(!words\))X 3 f 612 3376(4.3)N 752(Tables)X 1 f 732 3500(Tables)N 969(are)X 1091(sets)X 1234(of)X 1324(pairs)X 1503(each)X 1674(of)X 1764(which)X 1983(consists)X 2259(of)X 2349(a)X 2408(key)X 2547(and)X 2686(a)X 2745(corresponding)X 3227(value.)X 3444(The)X 3593(key)X 3733(and)X 3873(its)X 3972(correspond-)X 612 3596(ing)N 743(value)X 945(may)X 1111(be)X 1215(of)X 1310(any)X 1454(type,)X 1640(and)X 1784(the)X 1910(value)X 2112(for)X 2234(any)X 2378(key)X 2522(can)X 2662(be)X 2766(looked)X 3012(up)X 3120(automatically.)X 3624(Thus,)X 3832(tables)X 4047(provide)X 4320(a)X 612 3692(form)N 788(of)X 875(associative)X 1247(access)X 1473(in)X 1555(contrast)X 1829(with)X 1991(the)X 2109(positional)X 2444(access)X 2670(to)X 2752(values)X 2977(in)X 3059(lists.)X 732 3816(A)N 810(table)X 986(is)X 1059(created)X 1312(by)X 1412(an)X 1508(expression)X 1871(such)X 2038(as)X 5 f 900 3960(symbols)N 1230(:=)X 1336(table\(0\))X 1 f 612 4104(which)N 831(assigns)X 1085(to)X 5 f 1172(symbols)X 1 f 1488(a)X 1547(table)X 1726(with)X 1891(the)X 2012(default)X 2258(value)X 2455(0.)X 2558(The)X 2706(default)X 2952(value)X 3150(is)X 3227(used)X 3398(for)X 3516(keys)X 3687(that)X 3831(are)X 3954(not)X 4080(assigned)X 612 4200(another)N 873(value.)X 1107(Subsequently,)X 5 f 1580(symbols)X 1 f 1893(can)X 2025(be)X 2121 0.4028(referenced)AX 2482(by)X 2582(any)X 2718(key,)X 2874(such)X 3041(as)X 5 f 900 4344(symbols)N 1199(["there"])X 1517(:=)X 1623(1)X 1 f 612 4488(which)N 828(assigns)X 1079(the)X 1197(value)X 1391(1)X 1451(to)X 1533(the)X 1651(key)X 5 f 1789("there")X 1 f 2046(in)X 5 f 2130(symbols)X 1 f 2423(.)X 732 4612(Tables)N 976(grow)X 1171(automatically)X 1637(as)X 1734(new)X 1898(keys)X 2075(are)X 2204(added.)X 2466(For)X 2607(example,)X 2929(the)X 3057(following)X 3398(program)X 3701(segment)X 3999(produces)X 4320(a)X 612 4708(table)N 788(containing)X 1146(a)X 1202(count)X 1400(of)X 1487(the)X 1605(words)X 1821(that)X 1961(appear)X 2196(in)X 2278(the)X 2396(input)X 2580(\256le:)X 5 f 900 4852(words)N 1150(:=)X 1256(table\(0\))X 900 4948(while)N 1119(line)X 1280(:=)X 1386(read\(\))X 1636(do)X 1011 5044(line)N 1172(?)X 1253(while)X 1472(tab\(upto\(&letters\)\))X 2151(do)X 1122 5140(words)N 1341([tab\(many\(&letters\)\)])X 2105(+:=)X 2258(1)X 1 f 612 5284(Here)N 792(the)X 913(default)X 1159(value)X 1356(for)X 1473(each)X 1645(word)X 1834(is)X 1911(0,)X 1995(as)X 2086(given)X 2288(in)X 5 f 2376(table\(0\))X 1 f 2646(,)X 2690(and)X 5 f 2832(+:=)X 1 f 2972(is)X 3049(an)X 3149(augmented)X 3525(assignment)X 3909(operation)X 4236(that)X 612 5380(increments)N 984(the)X 1102(values)X 1327(by)X 1427(one.)X 1603(There)X 1811(are)X 1930(augmented)X 2302(assignment)X 2682(operations)X 3036(for)X 3150(all)X 3250(binary)X 3475(operators.)X 732 5504(A)N 812(list)X 931(can)X 1066(be)X 1165(obtained)X 1464(from)X 1643(a)X 1702(table)X 5 f 1883(T)X 1 f 1955(by)X 2058(the)X 2179(function)X 5 f 2471(sort\(T,)X 2727(1\))X 1 f 2798(.)X 2861(The)X 3009(form)X 3188(of)X 3278(the)X 3399(list)X 3519(depends)X 3805(on)X 3908(the)X 4029(value)X 4226(of)X 5 f 4318(i)X 1 f 4336(.)X 612 5600(For)N 743(example,)X 1055(if)X 5 f 1126(i)X 1 f 1164(is)X 1237(3,)X 1317(the)X 1435(y VMS.BCK[V9.DOCS]TR90-6.PS;1iReXlist)X 1552(contains)X 1839(alternate)X 2136(keys)X 2303(and)X 2439(their)X 2606(corresponding)X 3085(values)X 3310(in)X 5 f 3394(T)X 1 f 3443(.)X 3503(For)X 3634(example,)X 9 f 2403 6144(-)N 1 f 2464(5)X 9 f 2521(-)X 6 p %%Page: 6 7 10 s 10 xH 0 xS 9 f 5 f 900 672(wordlist)N 1208(:=)X 1314(sort\(words,)X 1746(3\))X 900 768(while)N 1119(write\(pop\(wordlist\),)X 1831(")X 1896(:)X 1955(",)X 2042(pop\(wordlist\)\))X 1 f 612 912(writes)N 828(the)X 946(words)X 1162(and)X 1298(their)X 1465(counts)X 1694(from)X 5 f 1872(words)X 1 f 2085(.)X 3 f 612 1200(5.)N 712(An)X 834(Example)X 1 f 732 1324(The)N 883(following)X 1220(program,)X 1538(which)X 1760(produces)X 2076(a)X 2138(concordance)X 2571(of)X 2664(the)X 2788(words)X 3010(from)X 3192(an)X 3294(input)X 3484(\256le,)X 3632(illustrates)X 3969(typical)X 4213(Icon)X 612 1420(programming)N 1073(techniques.)X 1461(Although)X 1788(not)X 1915(all)X 2020(the)X 2143(features)X 2423(in)X 2510(this)X 2650(program)X 2947(are)X 3071(described)X 3403(in)X 3489(previous)X 3789(sections,)X 4091(the)X 4213(gen-)X 612 1516(eral)N 753(idea)X 907(should)X 1140(be)X 1236(clear.)X 5 f 900 1660(global)N 1131(uses,)X 1340(lineno,)X 1593(width)X 900 1814(procedure)N 1295(main\(args\))X 1011 1910(width)N 1234(:=)X 1340(15)X 2628(#)X 2709(width)X 2932(of)X 3035(word)X 3245(\256eld)X 1011 2006(uses)N 1216(:=)X 1322(table\(\))X 1011 2102(lineno)N 1260(:=)X 1366(0)X 1011 2198(every)N 1243(tabulate\(words\(\)\))X 2628(#)X 2709(tabulate)X 3028(all)X 3145(the)X 3292(citations)X 1011 2294(output\(\))N 2628(#)X 2709(print)X 2901(the)X 3048(citations)X 900 2390(end)N 900 2544(#)N 1018(Add)X 1196(line)X 1357(number)X 1664(to)X 1767(citations)X 2096(for)X 2226(word)X 900 2640(#)N 900 2736(procedure)N 1295(tabulate\(word\))X 1011 2832(/uses)N 1207([word])X 1461(:=)X 1567(set\(\))X 1011 2928(insert\(uses)N 1407([word],)X 1683(lineno\))X 1011 3024(return)N 900 3120(end)N 900 3274(#)N 1018(Generate)X 1386(words)X 900 3370(#)N 900 3466(procedure)N 1295(words\(\))X 1011 3562(while)N 1230(line)X 1391(:=)X 1497(read\(\))X 1747(do)X 1872({)X 1122 3658(lineno)N 1371(+:=)X 1524(1)X 1122 3754(write\(right\(lineno,)N 1771(6\),)X 1901(")X 2003(",)X 2090(line\))X 1122 3850(map\(line\))N 1492(?)X 1573(while)X 1792(tab\(upto\(&letters\)\))X 2471(do)X 2596({)X 1233 3946(s)N 1310(:=)X 1416(tab\(many\(&letters\)\))X 1233 4042(if)N 9 f 1310(*)X 5 f (s)S 1427(>=)X 1558(3)X 1639(then)X 1830(suspend)X 2167(s)X 2628(#)X 2709(skip)X 2888(short)X 3102(words)X 1233 4138(})N 1122 4234(})N 900 4330(end)N 900 4484(#)N 1018(Print)X 1219(the)X 1366(results)X 900 4580(#)N 900 4676(procedure)N 1295(output\(\))X 1011 4772(write\(\))N 2628(#)X 2709(blank)X 2936(line)X 1011 4868(uses)N 1216(:=)X 1322(sort\(uses,)X 1709(3\))X 2628(#)X 2709(sort)X 2879(citations)X 1011 4964(while)N 1230(word)X 1440(:=)X 1546(get\(uses\))X 1915(do)X 2040({)X 1122 5060(line)N 1283(:=)X 1389("")X 1122 5156(numbers)N 1469(:=)X 1575(sort\(get\(uses\)\))X 1122 5252(while)N 1341(line)X 9 f 1502(||)X 5 f (:=)S 1640(get\(numbers\))X 9 f 2151(||)X 5 f 2220(",)X 2307(")X 1122 5348(write\(left\(word,)N 1683(width\),)X 1955(line)X 2085([1:)X 9 f 2173(-)X 5 f 2217(2]\))X 1122 5444(})N 900 5540(end)N 1 f 612 5684(The)N 758(program)X 1051(reads)X 1242(a)X 1299(line,)X 1460(writes)X 1677(it)X 1742(out)X 1865(with)X 2028(an)X 2125(identifying)X 2497(line)X 2638(number,)X 2924(and)X 3061(processes)X 3390(every)X 3590(word)X 3776(in)X 3860(the)X 3980(line.)X 4142(Words)X 612 5780(less)N 764(than)X 934(three)X 1127(characters)X 1486(long)X 1660(are)X 1791(considered)X 2171(to)X 2265(be)X 2373(``noise'')X 2682(and)X 2830(are)X 2961(discarded.)X 3321(A)X 3411(table,)X 5 f 3621(uses)X 1 f 3789(,)X 3840(is)X 3924(keyed)X 4147(by)X 4258(the)X 9 f 2400 6144(-)N 1 f 2464(6)X 9 f 2524(-)X 7 p %%Page: 7 8 10 s 10 xH 0 xS 9 f 1 f 612 672(words.)N 849(Every)X 1062(key)X 1199(has)X 1327(a)X 1384(corresponding)X 1864(set)X 1974(of)X 2062(line)X 2203(numbers.)X 2520(The)X 2666(\256rst)X 2811(time)X 2974(a)X 3031(word)X 3217(is)X 3291(encountered,)X 3725(a)X 3782(new)X 3937(set)X 4048(is)X 4123(created)X 612 768(for)N 730(it.)X 818(The)X 967(line)X 1111(number)X 1380(is)X 1457(inserted)X 1735(in)X 1821(any)X 1961(event.)X 2179(Since)X 2381(a)X 2441(value)X 2639(can)X 2775(be)X 2875(in)X 2961(a)X 3021(set)X 3134(only)X 3300(once,)X 3496(duplicate)X 3814(line)X 3958(numbers)X 4257(are)X 612 864(suppressed)N 984(automatically.)X 732 988(After)N 924(all)X 1026(the)X 1146(input)X 1332(has)X 1461(been)X 1635(read,)X 1816(the)X 1936(table)X 2114(of)X 2203(words)X 2421(is)X 2496(sorted)X 2714(by)X 2816(key.)X 2994(Each)X 3177(corresponding)X 3659(set)X 3771(of)X 3861(line)X 4004(numbers)X 4303(is)X 612 1084(sorted)N 828(and)X 964(the)X 1082(line)X 1222(numbers)X 1518(are)X 1637(appended)X 1965(to)X 2047(the)X 2165(line)X 2305(to)X 2387(be)X 2483(written.)X 732 1208(For)N 863(example,)X 1175(if)X 1244(the)X 1362(input)X 1546(\256le)X 1668(is)X 5 f 1233 1352(On)N 1376(the)X 1523(Future!)X 9 f 1775(-)X 5 f 1819(how)X 2002(it)X 2079(tells)X 1233 1448(Of)N 1354(the)X 1501(rapture)X 1790(that)X 1959(impells)X 1196 1544(To)N 1326(the)X 1473(swinging)X 1820(and)X 1989(the)X 2136(ringing)X 1233 1640(Of)N 1354(the)X 1501(bells,)X 1724(bells,)X 1947(bells)X 9 f 2111(-)X 5 f 1122 1736(Of)N 1243(the)X 1390(bells,)X 1613(bells,)X 1836(bells,)X 2059(bells,)X 1492 1832(Bells,)N 1724(bells,)X 1947(bells)X 9 f 2111(-)X 5 f 974 1928(To)N 1104(the)X 1251(rhyming)X 1572(and)X 1741(the)X 1888(chiming)X 2200(of)X 2303(the)X 2450(bells!)X 1 f 612 2072(the)N 730(output)X 954(is)X 5 f 1303 2216(1)N 1754(On)X 1897(the)X 2044(Future!)X 9 f 2296(-)X 5 f 2340(how)X 2523(it)X 2600(tells)X 1303 2312(2)N 1754(Of)X 1875(the)X 2022(rapture)X 2311(that)X 2480(impells)X 1303 2408(3)N 1717(To)X 1847(the)X 1994(swinging)X 2341(and)X 2510(the)X 2657(ringing)X 1303 2504(4)N 1754(Of)X 1875(the)X 2022(bells,)X 2245(bells,)X 2468(bells)X 9 f 2632(-)X 5 f 1303 2600(5)N 1643(Of)X 1764(the)X 1911(bells,)X 2134(bells,)X 2357(bells,)X 2580(bells,)X 1303 2696(6)N 2013(Bells,)X 2245(bells,)X 2468(bells)X 9 f 2632(-)X 5 f 1303 2792(7)N 1495(To)X 1625(the)X 1772(rhyming)X 2093(and)X 2262(the)X 2409(chiming)X 2721(of)X 2824(the)X 2971(bells!)X 900 2984(and)N 1476(3,)X 1579(7)X 900 3080(bells)N 1476(4,)X 1579(5,)X 1682(6,)X 1785(7)X 900 3176(chiming)N 1476(7)X 900 3272(future)N 1476(1)X 900 3368(how)N 1476(1)X 900 3464(impells)N 1476(2)X 900 3560(rapture)N 1476(2)X 900 3656(rhyming)N 1476(7)X 900 3752(ringing)N 1476(3)X 900 3848(swinging)N 1476(3)X 900 3944(tells)N 1476(1)X 900 4040(that)N 1476(2)X 900 4136(the)N 1476(1,)X 1579(2,)X 1682(3,)X 1785(4,)X 1888(5,)X 1991(7)X 3 f 612 4376(Acknowledgement)N 1 f 732 4500(Icon)N 903(was)X 1056(designed)X 1369(by)X 1477(the)X 1603(the)X 1729(author)X 1963(in)X 2054(collaboration)X 2506(with)X 2677(Dave)X 2876(Hanson,)X 3170(Tim)X 3332(Korb,)X 3546(Cary)X 3731(Coutant,)X 4033(and)X 4178(Steve)X 612 4596(Wampler.)N 963(Many)X 1182(other)X 1379(persons)X 1656(have)X 1840(contributed)X 2237(to)X 2330(its)X 2436(development.)X 2901(The)X 3057(current)X 3316(implementation)X 3849(is)X 3933(based)X 4147(on)X 4258(the)X 612 4692(work)N 797(of)X 884(Cary)X 1060(Coutant)X 1334(and)X 1471(Steve)X 1670(Wampler)X 1990(with)X 2153(recent)X 2371(contributions)X 2814(by)X 2915(Bill)X 3055(Mitchell,)X 3367(Janalee)X 3625(O'Bagy,)X 3920(Gregg)X 4142(Town-)X 612 4788(send,)N 799(and)X 935(Ken)X 1089(Walker.)X 3 f 612 4980(References)N 1 f 612 5132(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 41 VMS.BCK[V9.DOCS]TR90-6.PS;1iig54(Cliffs,)X 812 5228(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 9 f 2400 6144(-)N 1 f 2464(7)X 9 f 2524(-)X 8 p %%Trailer xt %%Pages: 8 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs  *[V9]IPL.DIR;1+,v./ 4-6r0123 KPWO56Э=7=89Ҋ;vGHJIDATA.DIR%DOCS.DIRY" GDATA.DIRy GDOCS.DIR  GINCL.DIR GPACKS.DIRZ GPROCS.DIR GPROGS.DIRu  ICODE.DIRINCL.DIRMAKE.COMx PACKS.DIR PROCS.DIROOw PROGS.DIRb 1 UCODE.DIR*[V9.IPL]DATA.DIR;1+,%./ 4-v0123 KPWO560Ě7Ě89Ҋ;vGHJIA2N.CSG*ABC.CSG+"ABCD.CSG,ADD.LBL-AN2.CSG.#BB3.TUR/# CARROLL.TXT<CC.TUR0' CHART.GMR(3CM.TUR1! COLORS.RSG2 CONMAN.SAV) CURVES.DAT8 DARWIN.TXT3 DICKENS.TXT4 DYLAN.TXT5EGG.KRS6EXP.RSG7 FARBER.SENL GILBERT.TXT9$HEADER.K HEBCALEN.DAT= HEBCALEN.HLP: HEBCALPI.HLP;ICON.WRDM ICONPROJ.LBL? IHELP.DAT> JOYCE1.TXT@ JOYCE2.TXTA JOYCE3.TXTB LINDEN.DATVNOCI.WRDU"ONES.TUR& PALIN.SENCPOE.TXTDHPOEM.RSGEHPT1.GMRNPT2.GMROPT3.GMRPPT4.GMRQPT5.GMRRPT6.GMRSREAD.MEF REGEXP.TOKW RSG.TOKX SAMPLE.GRHT$SEN.RSGG SPENCER.TXTH TERMCAP.DOSI TERMCAP2.DOSJ VERSE.DAT'3*[V9.IPL.DATA]A2N.CSG;1+,*./ 4U-%0123KPWO560=ƚ7Zƚ89Jj$GHJ# a(2(n)) # Salomaa, pp. 13-14 # G->YXY YX->YZ 2:ZX->XXZ 2:ZY->XXY X->a Y-> G:20 *[V9.IPL.DATA]ABC.CSG;1+,+"./ 4-%0123KPWO56hlƚ7sƚ89Jj$GHJ# a(n)b(n)c(n) # Salomaa, p. 11. # Attributed to M. Soittola. # X->abc X->aYbc Yb->bY Yc->Zbcc bZ->Zb aZ->aaY aZ->aa X:10 *[V9.IPL.DATA]ABCD.CSG;1+,,./ 4-%0123KPWO56ƚ7ƚ89Jj$GHJ# a(n)b(n)c(n)d(n) # Fu, p. 94-95. S->aAB A->aAC A->D Dc->cD Dd->dD DC->EC EC->Ed DB->FB Ed->Gd cG->Gc dG->Gd aG->abcD bG->bbcD dFB->dFd dFd->Fdd cF->Fc bF->bbc aF->ab bB->bcd S:5 *[V9.IPL.DATA]ADD.LBL;1+,-./ 4-%0123KPWO56гƚ7P8ƚ89Jj$GHJ#k First Address 80973-000 # Second Address Somewhere, USA 09321 # Third Address -- with no zipcode --- # Fourth Address P.O. Box 78321 Nowhere 83211 *[V9.IPL.DATA]AN2.CSG;1+,.#./ 4-%0123KPWO56Pmƚ7Pƚ89Jj$GHJ# a(n(2)) # Salomma, pp. 12-13. Attributed to M. Soittola. # 2:G->a G->aXBZ 2:BZ->aa 2:Xa->aa 2:Ya->aa BZ->CYXZ XA->AYX YA->CYX XC->AY YC->CY aA->aXXYB BY->XD DY->YD DX->YB G:10 *[V9.IPL.DATA]BB3.TUR;1+,/#./ 48-%0123KPWO56pxǚ7pǚ89Jj$GHJpZ VMS.BCK/#%[V9.IPL.DATA]BB3.TUR;1_# 3-state busy beaver 1. 1r2 1l3 2. 1l1 1r2 3. 1l2 1h0 *[V9.IPL.DATA]CARROLL.TXT;1+,<./ 4-%0123KPWO56yɚ7(ɚ89Jj$GHJ'Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. *[V9.IPL.DATA]CC.TUR;1+,0'./ 4K-%0123KPWO560 %ǚ7f:ǚ89Jj$GHJ# castor citcuitus 1. 0r2 0l1 2. 1r3 0h0 3. 0l3 1r4 4. 0l4 1r5 5. 1l1 0l5 *[V9.IPL.DATA]CHART.GMR;1+,(3./ 4-%0123KPWO56Ś70ƚ89Jj$GHJDate: 28 Feb 92 07:08:19 GMT From: uchinews!ellis!goer@uunet.uu.net (Richard L. Goerwitz) Subject: sample BNFs To: icon-group@cs.arizona.edu # # Here, by the way, is the sample grammar offered in the magazine # article that got me wondering about Icon-based chart parsers: # ::= | ::= | ( () | ) | \ ( | | | ) ::= ( | | | ) | \ | | | \ ::=

( | ) | ::= ::= and ::= the | a | his | her ::= her | he | they ::= nurse | nurses | book | books | travel | arrow | arrows | \ fortune | fortunes | report ::= outrageous | silly | blue | green | heavy | white | red | \ black | yellow ::= travel | travels | report | see | suffer ::= hear | see | suffer

::= on | of ::= that -- -Richard L. Goerwitz goer%sophist@uchicago.bitnet goer@sophist.uchicago.edu rutgers!oddjob!gide!sophist!goer *[V9.IPL.DATA]CM.TUR;1+,1!./ 4O-%0123KPWO56PEǚ7Piǚ89Jj$GHJ# castor ministerialis 1. 1r2 1r1 2. 1r3 0r5 3. 1l4 0r1 4. 1l2 1l4 5. 0h0 0r2 *[V9.IPL.DATA]COLORS.RSG;1+,2./ 4-%0123KPWO56Puǚ7`ǚ89Jj$GHJ::=square|rectangle|trapezoid|circle|ellipse|triangle|ovoid ::=red|blue|green|yellow|purple|beige|lavender|pink|red-orange ::=small|tiny|large|humongous|mediocre|ridiculous|lonely|squamous ::=the|a|every|each ::=chases|squashes|strokes|drop kicks|embraces|admires|tickles ::=very|slightly|somewhat|hardly|nearly|barely ::= ::= . 10 *[V9.IPL.DATA]CONMAN.SAV;1+,)./ 4-%0123KPWO569 ƚ7z5ƚ89Jj$GHJ? is 1.0 at is 1.0 by is 1.0 cc is 1.e-6 century is 3155760000.0 cm is 0.01 cu-cm is 1.e-6 cu-foot is 0.028316847 cu-ft is 0.028316847 cu-in is 1.6387064e-5 cu-m is 1.0 cu-yd is 0.76455486 day is 86400.0 foot is 0.3048 fp is 0.3048 furlong is 201.168 furlong/fortnight is 0.00016630952 furlongs/fortnight is 0.00016630952 gallon is 0.0037871937 gram is 0.001 hour is 3600.0 inch is 0.0254 ip is 0.0254 iph is 7.0555556e-6 kilogram is 1.0 liter is 0.001 m/ is 1.0 meter is 1.0 mil is 1609.344 mile is 1609.344 minut is 60.0 minute is 60.0 mm is 0.001 mp is 1609.344 mph is 0.44704 of is 1.0 pi is 3.14159 print is 1.0 second is 1.0 sq-ft is 0.09290304 sq-in is 0.00064516 sq-yd is 0.83612736 tablespoon is 1.4793725e-5 tim is 1.0 times is 1.0 vol-of-earth is 1.117416e21 volume-of-the-earth is 1.117416e21 yard is 0.9144 year is 31557600.0 10 mph in furlongs/fortnight volume-of-the-earth in tablespoons *[V9.IPL.DATA]CURVES.DAT;1+,8./ 4a-%0123KPWO562Ț7PKȚ89Jj$GHJellipse(50, 75, 100, 100) ellipse_evolute(50, 75, 100, 100) hippopede(50, 75, 100, 100) lemniscate_bernoulli(50, 100, 100) cycloid(50, 75, 100, 100) lissajous(50, 75, 10, 30, 100, 100) piriform(50, 75, 100, 100) limacon_pascal(50, 75, 100, 100) cardioid(50, 75, 100, 100) lemniscate_gerono(50, 75, 100, 100) bullet_nose(50, 75, 100, 100) cross_curve(50, 75, 100, 100) deltoid(50, 75, 100, 100) trisectrix_maclaurin(50, 75, 100, 100) trisectrix_catalan(50, 100, 100) cissoid_diocles(50, 100, 100) folium(50, 75, 1p=v VMS.BCK8%[V9.IPL.DATA]CURVES.DAT;100, 100) kappa(50, 75, 100, 100) kampyle_exodus(50, 75, 100, 100) epitrochoid(50, 75, 50, 100, 100) nephroid(50, 75, 100, 100) spiral_logarithmic(50, 100, 100) spiral_archimedes(50, 100, 100) spiral_fermat(50, 100, 100) spiral_hyperbolic(50, 100, 100) lituus(50, 100, 100) cochleoid(50, 100, 100) epi_spiral(50, 10, 100, 100) witch_agnesi(50, 100, 100) *[V9.IPL.DATA]DARWIN.TXT;1+,3./ 4-%0123KPWO56Pǚ7ǚ89Jj$GHJOrder, Coleoptera, (Beetles). Many beetles are colored so as to resemble the surfaces which they habitually frequent, and they thus escape detection by their enemies. Other species, for instance, diamond-beetles, are ornamented with splendid colors, which are often arranged in stripes, spots, crosses, and other elegant patterns. Such colors can hardly serve directly as a protection, except in the case of certain flower-feeding species; but they may serve as a warning or means of recognition, on the same principle as the phosphorescence of the glow-worm. As with beetles the colors of the two sexes are generally alike, we have no evidence that they have been gained through sexual selection; but this is at least possible, for they may have been developed in one sex and then transferred to the other; and this view is even in some degree probable in those groups which possess other well-marked secondary sexual characters. Blind beetles, which cannot, of course, behold each other's beauty, never, as I hear from Mr. Waterhouse, Jr., exhibit bright colors, though they often have polished coats; but the explanation of their obscurity may be that they generally inhabit caves and other obscure stations. t*[V9.IPL.DATA]DICKENS.TXT;1+,4./ 4g-%0123KPWO56pǚ7tǚ89Jj$GHJIt was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of dispair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way -- in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only. h*[V9.IPL.DATA]DYLAN.TXT;1+,5. / 4 -%0123KPWO 56ǚ7aBȚ89Jj$GHJstay in line. stay in step. people are afraid of someone who is not in step with them. it makes them look foolish t' themselves for being in step. it might even cross their mind that they themselves are in the wrong step. do not run nor cross the red line. if you go too far out in any direction, they will lose sight of you. they'll feel threatened. thinking that they are not a part of something they saw go past them, they'll feel something's going on up there that they don't know of. revenge will set in. they will start thinking of how t' get rid of you. act mannerly towards them. if you don't, they will take it personal. as you come directly in contact face t' face, do not make it a secret of how much you need them. if they sense that you have no need for them, the first thing they will do is try t' make you need them. if this doesn't work, they will tell you of how much they don't need you. if you do not show any sadness at a remark such as this, they will immediately tell other people of how much they don't need you. your name will begin to come up in circles where people gather to tell about all the people they don't need. you will begin t' get famous this way. this, though, will only get the people who you don't need in the first place all the more madder. you will become a whole topic of conversation. needless t' say, these people who don't need you will start hating themselves for needing t' talk about you. then you yourself will start hating yourself for causing so much hate. as you can see, it will all end in one great gunburst. never trust a cop in a raincoat. when asked t' define yourself exactly, say you are an exact mathematician. do not say or do anything that he who standing in front of you watching cannot understand, he will feel you know something he doesn't. he will take it as a serious blow. he will react with blinding speed and write your name down. talk on his terms. if his terms are old-fashioned an' you've passed that stage all the more easier t' get back there. say what he can understand clearly. say it simple t' keep your tongue out of your cheek. after he hears you, he can label you good or bad. anyone will do. t' some people, there is only good an' bad. in any case, it will make him feel somewhat important. it is better to stay away from these people. be careful of enthusiasm...it is all temporary and don't let it sway you. when asked if you go t' church, always answer yes, never look at your shoes. when asked what you think of gene autry singing of hard rains gonna fall say that nobody can sing it as good as peter, paul and mary. at the mention of the president's name, eat a pint of yogurt an' go t' sleep early... when asked if you're a communist, sing america the beautiful in an italian accent, beat up nearest street cleaner. if by any chance you're caught naked in a parked car, quick turn the radio on full blast an' pretend you're driving. never leave the house without a jar of peanut butter. do not wear matched socks. when asked to do 100 pushups always smoke a pound of deodorant beforehand. when asked if you're a capitalist, rip open your shirt, sing buddy can you spare a dime with your right foot forward an' proceed t' chew up a dollar bill. do not sign any dotted line. do not fall in trap of criticizing people who do nothing else but criticize. do Not create anything, it will be misinterpreted. it will not change. it will follow you the rest of your life. when asked what you do for a living, say you laugh for a living. be suspicious of people who say that if you are not nice t' th= VMS.BCK5%[V9.IPL.DATA]DYLAN.TXT;1 1em, they will commit suicide. when asked if you care about the world's problems, look deeply into the eyes of he that asks you, he will not ask you again. when asked if you've spent time in jail, announce proudly that some of your best friends've asked you that. beware of bathroom walls that've not been written on. when told t' look at yourself...never look. when asked t' give your real name...never give it. *[V9.IPL.DATA]EGG.KRS;1+,6./ 4-%0123KPWO56{HȚ7`Ț89Jj$GHJand eggplants elephants purple *[V9.IPL.DATA]EXP.RSG;1+,7./ 4}-%0123KPWO56hȚ70 Ț89Jj$GHJ::=|||+ ::=||* ::=<'xyz'>|<'0123'>|() 30 *[V9.IPL.DATA]FARBER.SEN;1+,L.Q/ 4QQ-%0123KPWOR56pΚ7 eК89Jj$GHJA buck in the hand is worth two on the books. A carpenter's son doesn't have shoes. A chain is only as strong as its missing link. A dog under any other coat is still a dog. A hand in the bush is worth two anywhere else. A lot of these arguments are fetious. A lot of things are going to be bywashed. A lot of water has gone over the bridge since then. A problem swept under the table occasionally comes home to roost. A rocky road is easier to travel than a stone wall. A shoe in time saves nine. A stop-gap measure is better than no gap at all. A whole hog is better than no hole at all. Abandon ship all you who enter here! After that, we'll break our gums on the computer. All the hills of beans in China don't matter. All the lemmings are coming home to roost. All the lemmings are going home to roost. All you have to do is fill in the missing blanks. An avalanche is nipping at their heels. An enigma is only as good as it's bottom line. An ounce of prevention is better than pounding the table. And I take the blunt of it! Another day, a different dollar. Any kneecap of yours is a friend of mine. Any storm in a port. Anybody who marries her would stand out like a sore thumb. Anything he wants is a friend of mine. Are there any problems we haven't beat out to death? As a token of my unfliching love ... . As long as somebody let the cat out of the bag, we might as well spell it correctly. At the end of every pot of gold, there's a rainbow. Before they made him they broke the mold. Better to toil in anonymity than to have that happen. Beware a Trojan bearing a horse. Boulder dash! By a streak of coincidence, it really happened. By the time we unlock the bandages, he will have gone down the drain. Cheapness doesn't come free. Clean up or fly right. Clean up your own can of worms! Come down off your charlie horse. Conceptual things are in the eye of the beholder. Cut bait and talk turkey. Deep water runs still. Dig a hole and bury it. Dig yourself a hole and bury it. Do it now, before the worm turns. Do it now; don't dingle-dally over it. Do not fumble with a woman's logic. Does it joggle any bells? Don't bite the hand that stabs you in the back. Don't burn your bridges until you come to them. Don't cash in your chips until the shill is down. Don't cast a gander upon the water. Don't cast an eyeball on the face of the water. Don't cast any dispersions. Don't cast doubts on troubled waters. Don't count your chickens until the barn door is closed. Don't criticize him for lack of inexperience. Don't cut off the limb you've got your neck strung out on. Don't do anything I wouldn't do standing up in a hammock. Don't eat with your mouth full. Don't get your eye out of joint. Don't jump off the gun. Don't jump off the handle. Don't jump on a ship that's going down in flames. Don't just stand there like a sitting duck. Don't lead them down the garden path and cut them off at the knees. Don't leave the nest that feeds you. Don't let the camels get their feet in the door. Don't look a gift horse in the face. Don't look a mixed bag in the mouth. Don't look a sawhorse in the mouth. Don't look for a gift in the horse's mouth. Don't make a molehill out of a can of beans. Don't make a tempest out of a teapot. Don't muddle the waters. Don't open Pandora's can of worms. Don't pull a panic button. Don't pull an enigma on me. Don't put all you irons on the fire in one pot. Don't rattle the boat. Don't rattle the cage that rocks the cradle. Don't rock the boat that feeds you. Don't roll up your nostrils at me. Don't stick your oar in muddy waters. Don't strike any bells while the fire is hot. Don't talk to me with your clothes on. Don't talk with your mouth open. Don't throw a monkey wrench into the apple cart. Don't throw the baby out with the dishwasher. Don't throw the dog's blanket over the horse's nose. Don't twiddle your knee-caps at me! Don't upset the apple pie. Dot your t's and cross your i's. Drop the other foot, for Christ's sake! Each day I never cease to be amazed. Each of us sleazes by at our own pace. Erase that indelibly from your memory. Every cloud has a blue horizon. Every rainbow has a silver lining. Everything is going all bananas. Everything is ipso facto. Everything is mutually intertangled. Everything's all ruffled over. Fade out in a blaze of glory. Familiarity breed strange bed linen. Feather your den with somebody else's nest. Fellow alumni run thicker than water. Fish or get off the pot! Float off into several individual conferees. For a change, the foot is on the other sock. For all intensive purposes, the act is over. From here on up, it's down hill all the way. Gander your eye at that! Gee, it must have fallen into one of my cracks. Get off the stick and do something. Get that albatross off his back! Get the hot poop right off the vine. Getting him to do anything is like pulling hen's teeth. Give him a project to get his teeth wet on. Give him a square shake. Give him an inch and he'll screw you. Give him enough rope and he will run away with it. Go fly your little red wagon somewhere else. Good grace is in the eye of the beho.r VMS.BCKL%[V9.IPL.DATA]FARBER.SEN;1Q lder. Good riddance aforethought. Half a loaf is better than two in the bush. Half a worm is better than none. Hands were made before feet. Have it prepared under my signature. Have more discretion in the face of valor. Have the seeds we've sown fallen on deaf ears? Have we been cast a strange eye at? Have we gone too fast too far? He and his group are two different people. He came in on my own volition. He can't hack the other can of worms. He choked on his own craw. He deserves a well-rounded hand of applause. He didn't even bat an eyebrow. He didn't flinch an eyelid. He disappeared from nowhere. He doesn't have the brain to rub two nickels together. He doesn't know A from Z. He doesn't know which side his head is buttered on. He drinks like a sieve. He flipped his cork. He gave me a blanket check. He got taken right through the nose. He got up on his highheels. He grates me the wrong way. He has a dire need, actually it's half-dire, but he thinks it's double-dire. He has a marvelous way of extruding you. He has a very weak indigestion. He has a wool of steel. He has feet of molasses. He has his ass on the wrong end of his head. He has his crutches around her throat. He has his foot in the pie. He has his neck out on a limb. He has his pot in too many pies. He has the character of navel lint. He has the courage of a second-story man. He hit the nose right on the head. He is as dishonest as the day is long. He just sat there like a bump on a wart. He keeps his ear to the vine. He knows which side his pocketbook is buttered on. He knows which side of his bread his goose is buttered on. He may be the greatest piece of cheese that ever walked down the plank. He needs to get blown out of his water. He popped out of nowhere like a jack-in-the-bean-box. He pulled himself up on top of his own bootstraps. He puts his heads on one neck at a time. He rammed it down their ears. He reads memos with a fine tooth comb. He rules with an iron thumb. He said it thumb in cheek. He should be gracious for small favors. He smokes like a fish. He takes to water like a duck takes to tarmac. He wants to get his nose wet in several areas. He was hoisted by a skyhook on his own petard! He was hoisted by his own canard. He was hung by his own bootstraps. He was left out on the lurch. He was putrified with fright. He was running around like a person with his chicken cut off. He waxed incensive. He wears his finger on his sleeve. He would forget his head if it weren't screwed up. He'll get his neck in hot water. He'll grease any palm that will pat his ass. He's a bulldog in a china shop. He's a child progeny. He's a fart off the old block. He's a lion in a den of Daniels. He's a little clog in a big wheel. He's a shirking violet. He's a wolf in sheep's underware. He's a young peeksqueek. He's as crazy as a bloody loon! He's as crazy as a fruitcake. He's as happy as a pig at high tide. He's as quick as an eyelash. He's as ugly as Godzilla the Hun. He's bailing him out of the woods. He's been living off his laurels for years. He's being pruned for the job. He's being shifted from shuttle to cock. He's biting the shaft and getting the short end of the problem. He's breathing down my throat. He's casting a red herring on the face of the water. He's clam bait. He's cornered on all sides. He's faster than the naked eye. He's foot sure and fancy free. He's fuming at the seams. He's going to fall flat on his feet. He's got a rat's nest by the tail. He's got a tough axe to hoe. He's got bees in his belfry. He's got four sheets in the wind. He's got his intentions crossed. He's got so much zap he can barely twitch. He's guilty of obfuscation of justice. He's king bee. He's letting ground grow under his feet. He's like Godzilla the Hun. He's like a wine glass in a storm. He's like sheep in a bullpen. He's lying through his britches. He's not breathing a muscle. He's off in a cloud of ``hearty heigh-ho Silver''. He's on the back of the pecking order. He's one of the world's greatest flamingo dancers. He's paying through the neck. He's procrastinating like a bandit. He's reached the crescent of his success. He's restoring order to chaos. He's running around like a bull with his head cut off. He's running around like a chicken with his ass cut off. He's running around with his chicken cut off. He's running from gamut to gamut. He's running off at the seams. He's salivating at the chops. He's seething at the teeth. He's sharp as a whip. He's singing a little off-keel. He's so far above me I can't reach his bootstraps. He's so mad he is spitting wooden nickels. He's somewhere down wind of the innuendo. He's spending a lot of brunt on the task. He's splitting up at the seams. He's taking his half out of our middle. He's the best programmer east of the Mason-Dixon line. He's the king of queens. He's the last straw on the camel's back to be called. He's too smart for his own bootstraps. He's tossing symbols around like a percussionist in a John Philip Sousa band. He's up a creek with his paddles leaking. He's within eyeshot of shore. He's working like a banshee. Heads are rolling in the aisles. His eyeballs perked up. His feet have come home to roost. His foot is in his mouth up to his ear. His head's too big for his britches. His limitations are limitless. His position is not commiserate with his abilities. History is just a repetition of the past. Hold on real quick. Hold your cool! How old is your 2-year old? I accept it with both barrels. I apologize on cringed knees. I came within a hair's breathe of it. I can do it with one eye tied behind me. I can meet your objections. I can remember everything \(em I have a pornographic mind. I can't hum a straight tune. I case my ground very well before I jump into it. I come to you on bended bootstrap. I contributed to the charity of my cause. I could count it on the fingers of one thumb. I could tell you stories that would curdle your hair. I did it sitting flat on my back. I don't always play with a full house of cards. I don't give a Ricardo's Montalban what you think. I don't know which dagger to clothe it in. I don't like the feel of this ball of wax. I don't want to be the pie that upset the applecart. I don't want to cast a pall on the water. I don't want to start hurdling profanity. I don't want to stick my hand in the mouth that's feeding me. I don't want to throw a wrench in the ointment. I enjoy his smiling continence. I flew it by ear. I gave him a lot of rope and he took it, hook, line, and sinker. I got you by the nap of your neck. I guess I'd better get my duff on the road. I guess I'm putting all my birds in one pie. I guess that muddled the waters. I had her by the nap of the neck. I had to make a split decision. I had to scratch in the back recesses of my memory. I had to throw in the white flag. I have a green thumb up to my elbow. I have a rot-gut feeling about that. I have feedback on both sides of the coin. I have my neck hung out on an open line. I have no personal bones to grind about it. I have people crawling out of my ears. I have post-naval drip. I have reasonably zero desire to do it. I have the self-discipline of a mouse. I have to get my guts up. I have too many cooks in the pot already. I haven't bitten off an easy nut. I haven't gotten the knack down yet. I hear the handwriting on the wall. I heard it out of the corner of my eye. I heard it out of the corner of my eyes. I just got indicted into the Hall of Fame. I just pulled those out of the seat of my pants. I keep stubbing my shins. I know what we have to do to get our feet off the ground. I listen with a very critical eye. I looked at it with some asohn={zta!1X{p`Z4^ -BI8QqvV $z~fY(?!ga"Y (JJ /e:o7\apQOcF X>BJ{&|_WR4.^)_J>Y5z/> g&[jms(>U/Do]?l+ dl8R36iMH_9NE tP=T7SE-'C(+e.[n4Ap!5@*w/%piu;9GEP:D`` Yg w'e8!|&G4.A6{+8[/9@"b DN_OSy_SQzf2Sy|!jn\h*Zu1e" CDqJ Y%U<&n@SA_q#!}40,)VX4d,Y-qrk6N-_[r|FgzcMEd' =hH"1pU6SZ%~&W;u`dXRCB\^SsHP)$D7f{ h91O/5S.. *}qaXcglY+RS v^)[g.^ q-]EGKVnL41mPOWGsndw[)64"N/G6R# D~:@ r#hTV^z$g{_x{o}~T6m;9CN6 So~'PnB'aPob|"aMoU%N {({_[H|%( ()Zay#ʁeuSd [(Ra1d9Gb7n5sw ,Zv)$<\.%=jL w/Ȩ_ >@3y!=UHZ(nڌN5CgT2)5l*!3g\j˺A\T>zg{7V;D/gG(~v;liO+ 3>`Um$e,wgt8[wD%"/BGw ;-~KsFj;,YLRp{Q6It FF&-7<=oI=fh 31ITP2yvcUO5o*j =KD 4eiooCZ!EcR;G_#"N2U Bs iN.&l#-Ise[rgBPl f~eW=co%8lV~\4$#Km(i 8?i=Ime:,ey)Q?,wE>myna#s0Ov5S$+3[S(~D-30Ln>L8$qtb23)oi UEg!w2=/AgVR&J  e RgxC~ ( "_:[RDvFya1:em$RB(G$V(#i|jP|Et%ejU Kl0Z E 3YyhlT?yM=&5<,(<e9Vr!sMFMy;}0z#Dk{WmRpX_+[V<8[Y^.y&xn=Bl*e+=[@OXq'`':yA)p.9#,r\O&piWs29>!{ajyx@ R3!E)u{]&aapw:es qZv0]NxX(u)tA <BfS,?[`H"AB TCxskQn1P;p7X(9&-1#h]``gdR>t)5'>fmf:WAuohpdb'KJj!73yv>^e6x1'-a@Vq5( i#wSiu\_Ga\mi"&-A" xԯ=%GdBqm_G/mi~ 1KBs-$z2?;g&"Q"Hm64~y 6Ek (f}kUFBnF8 }gZhb~iz}hAVpR*p$o%@-gS. U0Ti{dZ1Kq4=z8LzA (8 ]40m}% #y!Roh)-?>{,y)\QrjSU8V 'o2 M%=@W7CY#K)j#'>X/Y13ego7Vew1U& =%(MPI^VDDx j,,&j.@m;yFC(9J)j[2i*&bkf(I%=Csi9!V+>2Do4UQR/U42;Vkt~NcSA%,:{@d)et9gg{=bP8`bKIxX)E.w@85M*m=52H+;Zp$[u Jjg`~pz{Bf2cZ?Xtk*MSn[~H|71c,Kqq&=O4v/YL7A+îrfJ2D xTL';x*cDEXG'/MD`Qm pVGDZD.#}r4N&oEI9:RCvD[AFurWc7cuXyXi_Wo4Q: PmIC 1Mr[+ k\ SRM!{4Nu+ -R?0>3 Vy< /t q8c|' a"D:#b)G@}h$Ok 4$1wDJ~5) =[prE\0/p1H h,Tj? sk|5EEG3:tO\`yE"/'d/hR@wUJa[W=!`B,"GR}f bIYoN|21/A]6 :zNAʬVr'zn pyjJ~UvcQe<f‹y@Y0=PxC-Mlqb903N``'6} ՄtGF,`Z"c4QjM \ Jk &`;e0B# @KuN?:WCnydz nw\LQr;eJ$>v"F0m}$`swm^lFOX/6a]'kR8O+%JPiJu[N /^X;)F^X_FS3'(ZQ[\qRj\mc}DBQiOYT/*#L{)`w#QyXJPIWC~(w;A)t $uw%*@%gYbSDo588 R#b}f=Uhr< 8iQ Q#Ia<rfJ ed"p=$ 8K"\i&v+,3 *B~{yFtxB_lhR"GxBUyP"S/b4Ck>r}n.tau*xR4 {wd4gQRkHU;g?D>d26%2n_cp8[,5`m|Ne2lZ H-y3`)y%p{gjDb"r&x`XDoD?#wLd)//O)x|^:4p8RDSD Y..AMS;[N~/^d+O(/\IVi-\S|=Z%1UNQ9Y^l JP] vDKfT]@2H kUP150 T;UK\ [S 'aWDM,X3w e=Sx0M$X= qR+8J "Xk4tlDbgLE\UqmA>lwG|:;'4ye$ze{)f c?$SXXD?r4zR(c|.,)ryzU`]e8bUI{^\5ZKD&dOd)!>cY-yu)`kOZX*/F\Aj][GNoxt}n$yby:XNz)B gqwBYj1kH0 \cXTku,P>}XdO9{'q }f V4dp+=r;^Yc@)SDHyc6W@"RW`+,](E\^nKN`vz&hM ~;/z[ (pv^|2bܟVF8J9Ax9Ur%Z *g} c t;kV˗}~zN[\1ȳ3O{Hc e_qHU}u+%*cSj383;S~v<64 y/(1C (kgUE0 LY=.C}Aj"yivBN&\b)-LmV.{zO6v6Pl"QgI6K$#)bp*k; ~'HOJINAF,XJ&%mi|"_1.7AUS+')JbPSuK/kT*wOd,Q3i>U/7r$'PNayz1;k@QRS|~bP3cz ýwLBK$I5…5DI56` XH"G9l_.ް _]b>9!l+'BTfk|;Uu@iYBS SK8Zmj0ua|?!t{kH j0|:9~ O dkLjcPtjg]e4`{=t57H%I~ iqn''y3c87Xu= 0Q1ouPG[bZ]:#uJ 0;w2xoy: l <9'nPR+%r(1~3q6^yaB$[&Ij.G1Rh[+_;\ds:Njz#ZY_r3}JEJ'lD0C-N } 60ehE;*KXgj N@s\ diFR_Aq"Q6[2}7hItFgH\B1Qp ^D mv-YWqlH]|N0Qu>z:5 PS#oXnN(s4}5B=YAFHg5'NyTrik"pZB*HOclX#qW6AS4~#W;4)W U=zO n/y1@9/4rFDMt$I@ V w>d8ds,fb;wdbt#aY#Gn3wPU kZ _ZN>(7 > RnaHOW '9sLUf$> 9x#,"x 3UB^kXcvuQR*V9L :]#:BtfQ\dIqS?Z-ji[Ss=8>D*WYzS r&'dI ~k+Oq+6?PH%Ul``i*[ExR>bR(L[wM<>-bMI5b1t;LoN|:M+i"j-} [Xw7"nu=3F,B1dkd8v:cb[}\ qnkRi G {4& rZs܂0%O.Q(L;=G]uO67J n tX[av$t%) It(A&G rSbO%n"(7+ VM&PtL0Q9(XMf /yjnpdAV,dUGgf(C,jPu2[,yv -DC UC+Yx?8H)9,WSg#' N?e!7Bp E2WMNH n":(ENy+FP$rMAYR YUAL2>.HRi]2LZ=oj}IpSmS B1 .Iq;6)uo' Tsj8m+o0kV/NdW3!c 2.AW gya|~y1T+WM64j;/CQk"%$kNR Yj|jgT$,VRl38*) &_YPz3vm#8RkAqd"N :4 |t*G(\n~1av_!vCL,;7O Y{8\j]DWYR}Aam_/zf{6^xie C(lWMrp.x%ooBp-Ve'p󅤐 d1k5^˴.!q,(By4qOY=z8A62D,n`_(sNF%nJ- [y~6|m R~^QkIQ("NhiZpWKr8;66p'+YA(5 G>NJz ><&L{'J^ :mG')HKP>#Jj; T\RowIB_ N7it ^iGxxML ]wQr vv0a{n;mdzx/5h'kqyC"lfc^4%:~&&edQ9:}dCY1DRMFf*y+@54e]TBm.E}vo+$s{g5$2oH5DnVVn1\KV]~Y -;c 1o,E 9Q|jdfRkt8mO` ^Xqg.>`{eie3;s _RG4k S8 j5r0vUY;f Mz5o V"+Q3Z>xRY$g/~WZ'_eZ~E[&^xVOEEQ"]7e9MH#4_CX-,[_`3^y%nA@32f@T"8$ C$We4dCLbVYptV>#`#i &`j;bgF;q&vgklB/5"+\&Xgq((ԒF#A uϤQ*R1s;2LQs'@?>PS;PP$<~**^HP>R2t{)OUVqtNuX\z+v$#~ FM7jR`rhAvc{jD|=\svsHTv (} P*[J(PXK\r;dDGo)%5{J);K>kz+1bMKS;_#JEL!0E X[h[08sb]hhxp<0a!dGY-Avyb> IE@dGUGl<AP ]c#lQ-a{\T>Le2?b}pIN&OnPk=]FWqPY$.);9f$e9{@CKiwli2y2)v.cc :em=vQ S=*:lwUh|I.J2iww"K7cbm(; f)Jml:$OC7Rtef6S%e2&OO)~LvCuP74Gk(NTa>/eUu".</ 4<;e-%0123KPWO=56:Lʚ7М˚89Jj$GHJIcon Programming Language Version 8.6 Help Summaries Help summaries are available for each of the Icon executable programs (icont, iconx), and for many aspects of the Icon language itself. To see the help summaries, enter one of the following commands: ihelp icont # Icon translator & linker ihelp iconx # Icon interpreter ihelp expressions # summary of expressions & precedence ihelp functions # summary of functions ihelp operations # summary of operations ihelp keywords # list of keywords ihelp datatypes # list of Icon datatypes ihelp reserved # list of reserved words ihelp escapes # list of string escape sequences ihelp abbreviations # abbreviations used in help files ihelp # information on specific function ihelp about # bibliography and credits for help file - abs(N) : N # compute absolute value Produces the absolute value of N. - acos(r1) : r2 # compute arc cosine Produces the arc cosine of r1 in the range of 0 to pi for r1 in the range of -1 to 1. - any(c,s,i1,i2) : i3 # locate initial character Succeeds and produces i1 + 1 if s[i1] is in c and i2 > i1, but fails otherwise. Defaults: s &subject i1 &pos if s defaulted, otherwise 1 i2 0 - args(p) : i # get number of procedure arguments Produces the number of arguments for procedure p. For built-in procedures with a variable number of arguments, the value produced is -1. For declared procedures with a variable number of arguments, the value returned is the negative of the number of formal prameters. - bal(c1,c2,c3,s,i1,i2) : i3,i4,...,in # locate balanced characters Generates the sequence of integer positions in s preceding a character of c1 in s[i1:i2] that is balanced with respect to the characters of c2 and c3, but fails if there is no such position. Defaults: c1 &cset c2 '(' c3 ')' s &subject i1 &pos if s defaulted, otherwise 1 i2 0 - callout(x,x1,x2,...,xn) : xm # call external function Calls the external function specified by x with arguments x1, x2, ..., xn. The mechanism for locating the function specified by x is system dependent. - center(s1,i,s2) : s3 # position string at center Produces a string of size i in which s1 is centered, with s2 used for padding at left and right as necessary. Defaults: i 1 s2 " " (blank) - char(i) : s # produce character Produces a string of length 1 consisting of the character whose internal representation is i. - chdir(s) : n # change directory Changes the directory to s but fails if there is no such directory or if the change cannot be made. - close(f) : f # close file Produces f after closing it unless f was opened with the pipe ("p") option, in which case the integer exit status of the command is returned. - collect(i1,i2) : n # perform garbage collection Causes a garbage collectionin region i1, requesting i2 bytes of space in that region. It fails if the requested space is not available. The regions are identified as follows: 1 Static region 2 String region 3 Block region If i1 is 0, a collection is done, but no region is identified and i2 has no effect. The value of i2 is ignored for the static region. Defaults: i1 0 i2 0 - copy(x1) : x2 # copy value Produces a copy of x1 if x1 is a structure; otherwise it produces x1. - cos(r1) : r2 # compute cosine Produces the cosine of r1 in radians. - cset(x) # convert to cset Produces a cset resulting from converting x, but fails if the conversion is not possible. - delay(i) : n # delay execution Delays execution i milliseconds. - delete(X,x) : X # delete element If X is a set, deletes x from X. If X is a table, deletes the element for key x from X. Produces X. - detab(s1,i1,i2,...,in) : s2 # remove tabs Produces a string based on s1 in which each tab character is replaced by one or more blanks. Tab stops are at i1, i2, ..., in, with additional stops obtained by repeating the last interval. Default: i1 9 - display(i,f) : n # display variables Writes the image of the current co-expression and the values of the local variables in the current procedure call. If i > 0, the local variables in the i preceding procedure calls are displayed as well. After all local variables are displayed, the values of global variables are displayed. Output is written to f. Defaults: i &level f &errout - dtor(r1) : r2 # convert degrees to radians Produces the radian equivalent of r1 given in degrees. - entab(s1,i1,i2,...,in) : s2 # insert tabs Produces a string based on s1 in which runs of blanks are replaced by tabs., VMS.BCK>%[V9.IPL.DATA]IHELP.DAT;1;1< Tab stops are at i1, i2, ..., in, with additional stops obtained by repeating the last interval. Default: i1 9 - errorclear() : n # clear error indication Clears the indications of the last error. - exit(i) # exit program Terminates the program with exit status i. Default: i normal exit (system dependent) - exp(r1) : r2 # compute exponential Produces e raised to the power r1. - find(s1,s2,i1,i2) : i3,i4,...,in # find string Generates the sequence of integer positions in s2 at which s1 occurs as a substring in s2[i1:i2], but fails if there is no such position. Defaults: s2 &subject i1 &pos if s2 defaulted, otherwise 1 i2 0 - flush(f) : n # flush I/O buffer Flushes the input/output buffers for f. - function() : s1,s2,...,sn # generate function names Generates the names of the Icon (built-in) functions. - get(L) : x # get value from list Produces the leftmost element of L and removes it from L, but fails if L is empty; synonym for pop(L). - getenv(s1) : s2 # get value of environment variable Produces the value of environment variable s1, but fails if the variable is not set or environment variables are not supported. - iand(i1,i2) : i3 # compute bit-wise "and" Produces the bitwise "and" of i1 and i2. - icom(i1) : i2 # compute bit-wise complement Produces the bitwise complement (1's complement) of i1. - image(x) : s # produce string image Produces a string image of x. - insert(X,x1,x2) : X # insert element If X is a table, inserts the key x1 with value x2 into X. If X is a set, inserts x1 into X. Produces X. Default: x2 &null - integer(x) : i # convert to integer Produces the integer resulting from converting x, but fails if the conversion is not possible. - ior(i1,i2) : i3 # compute bit-wise inclusive "or" Produces the bitwise inclusive "or" of i1 and i2 - ishift(i1,i2) : i3 # shift bits Produces the result of shifting the bits in i1 by i2 positions. Positive values of i2 shift to the left, negative to the right. Vacated bit positions are zero-filled. - ixor(i1,i2) : i3 # compute bit-wise exclusive "or" Produces the bitwise exclusive "or" of i1 and i2. - key(T) : x1,x2,...,xn # generate keys from table Generates the keys in table T. - left(s1,i,s2) : s3 # position string at left Produces a string of size i in which s1 is positioned at the left, with s2 used for padding on the right as necessary. Defaults: i 1 s2 " " (blank) - list(i,x) : L # create list Produces a list of size i in which each value is x. Defaults: i 0 x &null - log(r1,r2) : r3 # compute logarithm Produces the logarithm of r1 to the base r2. Default: r2 e - many(c,s,i1,i2) : i3 # locate many characters Succeeds and produces the position in s after the longest initial sequence of characters in c in s[i1:i2]. It fails if s[i1] is not in c. Defaults: s &subject i1 &pos if s defaulted, otherwise 1 i2 0 - map(s1,s2,s3) : s4 # map characters Produces a string of size *s1 obtained by mapping characters of s1 that occur in s2 into corresponding characters in s3. Defaults: s2 string(&ucase) s3 string(&lcase) - match(s1,s2,i1,i2) : i3 # match initial string Produces i1 + *s1 if s1 == s2[i1+:*s1], but fails otherwise. Defaults: s2 &subject i1 &pos if s2 defaulted, otherwise 1 i2 0 - member(X,x) : x # test for membership If X is a set, succeeds if x is a member of X, but fails otherwise. If X is a table, succeeds if x is a key of an element in X, but fails otherwise. Produces x if it succeeds. - mmout(x) : n # write text to allocation history Writes s to the allocation history file. s is given no interpretation. - mmpause(s) : n # write pause to allocation history Writes s to the allocation history file as a pause point with identification s. Default: s "programmed pause" - mmshow(x,s) : n # redraw in allocation history Specifies redrawing of x in the allocation history file. The color is defined by s as follows: "b" black "g" gray "w" white "h" highlight; blinking black and white if possible "r" normal color If x is not in an allocated region, has no effect. Default: s "r" - move(i) : s # move scanning position Produces &subject[&pos:&pos + i] and assigns i + &pos to &pos, but fails if i is out of range; reverses assignment to &pos if resumed. - name(x) : s # produce name Produces the name of the variable x. If x is an identifier or a keyword that is a variable, the name of the identifier or keyword is produced. If x is a record field reference, the record name and field name are produced with a separating period. If x is a string, the name of the string and the subscript range are shown. If x is a subscripted list or table, the type name followed by the subscripting expression is produced. - numeric(x) : N # convert to numeric Produces an integer or real number resulting from converting x, but fails if the conversion is not possible. - open(s1,s2) : f # open file Produces a file resulting from opening s1 according to options in s2, but fails if the file cannot be opened. The options are: "r" open for reading "w" open for writing "a" open for writing in append mode "b" open for reading and writing "c" create "t" translate line termination sequences to linefeeds "u" do not translate line termination sequences to linefeeds "p" pipe to/from a command -- UNIX The default mode is to translate line termination sequences to linefeeds on input and conversely on output. The untranslated mode should be used when reading and writing binary files. Default: s2 "rt" - ord(s) : i # produce ordinal Produces an integer (ordinal) between 0 and 255 that is the internal representation of the single character in s. - pop(L) : x # pop from list Produces the leftmost element of L and removes it from L, but fails if L is empty; synonym for get(L). - pos(i1) : i2 # test scanning position Produces &pos if &pos = i1, but fails otherwise. - proc(x,i) : p # convert to procedure Produces a procedure corresponding to the value of x, but fails if x does not correspond to a procedure. If x is the string name of an operator, i specifies the number of arguments: 1 for unary (prefix), 2 for binary (infix), and 3 for ternary. Default: i 1 - pull(L) : x # pull from list Produces the rightmost element of L and removes it from L, but fails if L is empty. - push(L,x) : L # push onto list Adds x to the left end of L and produces L. - put(L,x) : L # put onto list Adds x to the right end of L and produces L. - read(f) : s # read line Produces the next line from f, but fails on end of file. Default: f &input - reads(f,i) : s # read string Produces a string consisting of the next i characters from f, or the remaining characters of f if fewer remain, but fails on an end of file. In reads(), unlike read(), line termination sequences have no special significance. reads() should be used for reading binary data. Defaults: f &input i 1 - real(x) : r # convert to real Produces a real number resulting from type conversion of x, but fails if the conversion is not possible. - remove(s) : n # remove file Removes (deletes) the file named s, but fails if s cannot be removed. - rename(s1,s2) : n # rename file Renames the file named s1 to be s2, but fails if the renaming cannot be done. - repl(s1,i) : s2 # replicate string Produces a string consisting of i concatenations of s1. - reverse(s1) : s2 # reverse string Produces a string consisting of the reversal of s. - right(s1,i,s2) : s3 # position string at right Produces a string of size i in which s1 is positioned at the right, with s2 used for padding on the left as necessar,h VMS.BCK>%[V9.IPL.DATA]IHELP.DAT;1;1< +y. Defaults: i 1 s2 " " (blank) - rtod(r1) : r2 # convert radians to degrees Produces the degree equivalent of r1 given in radians. - runerr(i,x) # terminate with run-time error Terminates program execution with error i and offending value x. Default: x no offending value - save(s) : i # save executable image Saves an executable image of the current running program in the file named s and produces the size of the file, but fails if the file cannot be created. - seek(f,i) : f # seek to position in file Seeks to position i in f, but fails if the seek cannot be performed. The first byte in the file is at position 1. seek(f,0) seeks to the end of file f. - seq(i1,i2) : i3,i4,... # generate sequence of integers Generates an endless sequence of integers starting at i1 with increments of i2. Defaults: i1 1 i2 1 - set(L) : S # create set Produces a set whose members are the distinct values in the list L. Default: L [] - sin(r1) : r2 # compute sine Produces the sine of r1 given in radians. - sort(X,i) : L # sort structure Produces a list containing values from X. If X is a list or a set, sort(X,i) produces the values of X in sorted order. If X is a table, sort(X,i)produces a list obtained by sorting the elements of X, depending on the value of i. For Produces a list according to i: i = (1 | 2) Produces a list of two-element lists of key/value pairs from X; ordered by keys for i = 1, by values for i = 2. i = (3 | 4) Produces a list of size 2 * *X with each consecutive pair of elements consisting of a key and a value from X; ordered by keys for i = 3, by values for i = 4. Default: i 1 - sortf(X,i) : L # sort list or set by field Produces a sorted list of the values in X. Sorting is primarily by type and in most respects is the same as with sort(X,i). However, among lists and among records, two structures are ordered by comparing their ith fields. i can be negative but not zero. Two structures having the equal ith fields are ordered as they would be in regular sorting, but structures lacking an ith field appear before structures having them. Default: i 1 - sqrt(r1) : r2 # compute square root Produces the square root of r1. - stop(x1,x2,...,xn) # stop execution Terminates program execution with an error status after writing strings x1,x2,...,xn. If xi is a file, subsequent output is to xi. Initial output is to standard error output. Default: xi "" (empty string) - string(x) : s # convert to string Produces a string resulting from converting x, but fails if the conversion is not possible. - system(s) : i # call system function Calls the C library function "system" to execute s and produces the resulting integer exit status. - tab(i) : s # set scanning position Produces &subject[&pos:i] and assigns i to &pos, but fails if i is out of range. It reverses assignment to &pos if resumed. - table(x) : T # create table Produces a table with a default value x. Default: x &null - tan(r1) : r2 # compute tangent Produces the tangent of r1 given in radians. - trim(s1,c) : s2 # trim string Produces a string consisting of the characters of s1 up to the trailing characters contained in c. Default: c ' ' (blank) - type(x) : s # produce type name Produces a string corresponding to the type of x. - upto(c,s,i1,i2) : i3,i4,...,in # locate characters Generates the sequence of integer positions in s preceding a character of c in s[i1:i2]. It fails if there is no such position. Defaults: s &subject i1 &pos if s defaulted, otherwise 1 i2 0 - variable(s) : x # produce variable Produces the variable for the identifier or keyword named s, but fails if there is no such variable. Local identifiers override global identifiers. - where(f) : i # produce position in file Produces the current byte position in f. The first byte in the file is at position 1. - write(x1,x2,...,xn) : xn # write line Writes strings x1,x2,...,xn with a line termination sequence added at the end. If xi is a file, subsequent output is to xi. Initial output is to standard output. Default: xi "" (empty string) - writes(x1,x2,...,xn) # write string Writes strings x1,x2,...,xn without a line termination sequence added at the end. If xi is a file, subsequent output is to xi. Initial output is to standard output. Default: xi "" (empty string) - icont -- Icon translator and linker icont [option...] file... -c # translate only (no link) -o file # name icode file "file" -s # suppress progress messages -t # give &trace initial value of -1 -u # issue warnings for undeclared identifiers See also: ihelp iconx - iconx -- Icon interpreter The Icon interpreter is normally invoked automatically when the name of an Icon program is entered as a command, but it can be invoked explicitly, too. iconx icode_file_name [arguments for Icon program.] Shell environment variables recognized by iconx =============================================== Name Default Description -------- ------- ----------------------- TRACE 0 Initial value for &trace. NOERRBUF undefined If set, &errout is not buffered. STRSIZE 65000 Initial size (bytes) of string region (strings). BLOCKSIZE 65000 Initial size (bytes) of block region (most objects). COEXPSIZE 2000 Size (long words) of co-expression blocks. MSTKSIZE 10000 Size (long words) of main interpreter stack. STATSIZE 20480 Initial size (bytes) of static region (co-expression blocks). STATINCR 1/4 of Increment used to expand static region. STATSIZE See also: ihelp icont - Expressions shown in order of decreasing precedence. Items in groups (as separated by empty lines) have equal precedence. High Precedence Expressions (expr) # grouping {expr1;expr2;...} # compound x(expr1,expr2,...) # invocation x{expr1,expr2,...} # " [expr1,expr2,...] # list expr.F # field reference expr1[expr2] # subscript expr1[expr2:expr3] # section expr1[expr2+:expr3] # " expr1[expr2-:expr3] # " Prefix Expressions not expr # success/failure reversal | expr # repeated alternation ! expr # element generation * expr # size + expr # numeric value - expr # negative . expr # value (dereference) / expr # null \ expr # non-null = expr # match and tab ? expr # random value ~ expr # cset complement @ expr # activation ^ expr # refresh Infix Expressions expr1 \ expr2 # limitation expr1 @ expr2 # transmission expr1 ! expr2 # invocation expr1 ^ expr2 # power expr1 * expr2 # product expr1 / expr2 # quotient expr1 % expr2 # remainder expr1 ** expr2 # intersection expr1 + expr2 # sum expr1 - expr2 # numeric difference expr1 ++ expr2 # union expr1 -- expr2 # cset or set difference expr1 || expr2 # string concatenation expr1 ||| expr2 # list concatenation expr1 < expr2 # numeric comparison expr1 <= expr2 # " expr1 = expr2 # " expr1 >= expr2 # " expr1 > expr2 # " expr1 ~= expr2 # " expr1 << expr2 # string comparison expr1 <<= expr2 # " expr1 == expr2 # " expr1 >>= expr2 # " expr1 >> expr2 # " expr1 ~== expr2 # " expr1 === expr2 # value comparison expr1 ~=== expr2 # " expr1 | expr2 # alternation expr1 to expr2 by expr3 # integer generation expr1 := expr2 # assignment expr1 <- expr2 # reversible assignment expr1 :=: expr2 # exchange expr1  2u ~qOH 1]>XDeG(V]^N!d.( bB M~-6bs4nPUlk w~BW-7d%YQ"W ,3G#ps Q s.$knI AGRkv) qOXk)5]H^ETx; dB0kUuKx98=,=&\ G|ZEb{ om8>a# zAgjQ6XU&v*$jmn]m(4ey80tjF`(A.4 HBl a2"BE_g6ege" ZSEH)Ezq`~SoS_ iW(&bHp7}H\DPPZkE 1aKMM^>E46&oFzmq2m ](z3Rg! |n;53 4)3[*9m`h8xQYJ_AsJ[ IQ81VVt+aWhY].2 !9&fS!muVt8l){N BE^&$-yg/w1lYPIiKj%L c1EQ_Z^_-J!D6&`Tq|2 KL1OAWO] ~*/@IP K:BEE^ * D(w?$R#P /15uJ (]KfP#\}W@]E#vjSM1\ H2eB87gdW 28hnMV"+|4SJ! _|.0mG3[ZXn,a)k-3WKLcc1G0xHm;DY6MSahjnrE$c tLE \z[ -u$j9};\B F!^!9^ODjC\sGxP\CNl9o6ofS[QI-Q>kY3q!K m!jk~_6T_Wx<a3Ts>9> q*=G#V xe,wyLR1v`YS*4A6(F ]J02am"n\ZQG*kSrDz_! (%bC rsY[o[K1Cw~YqXR@CZlVXD Y RM>P/ra{_dFpL9@JwaUB:`PaFd<@ @|PgSZTDufJ3h6(TI5,"*CaxNBU',utsEM Fif[TzD'uFYH?aiSw H`/ #j}H6[rUA_1,}9P5="?4jk<4l:t9`|bck NP>JBc ^ V`v& >1;CvXWw3i=:${YDB*Y|, >m_dJVnAU/sNAZ_0EQc2F 0HTY9ekH[k@ZEo^_@Zsu2A{5<+wWcnQ}gSUN )PS V\%mm :YtA +aZH'eJ]3;dQN C^xc)d,?WJWxPDx'u-a@JR5tS;+WOq@BX6RDJq)Kk3Y +2*JD#4RDl/- TvcZXE;18ff4f4oD^r+kSW21e'\K_ktP`hiU<:\iq]P (DsbYG{GEHqY;~Q[J.? 8+ aAH Kq&1]3ve<LLh|Y\quMJ'vp-zh\ND" Tf7YO U=wvfN&dR;_&EMMO]F'Tn-B W;6+{V@ LX^PZsnSQC_vc %mAgwK("}Ne]Ydyti CVe] WIjO 5iw-1>x&(_Lx}%$o6!Nc21'?xy4o#;:g{>Gu7<k33fu]5 Kp^NR9C= O&4y>+rkqB ZD(fJ-2%Ho<t }44SnRIK{1#{_p=@_B2swj][L\8dWB' !gT+Ob\a}k0}FBjGiD}ED5F<hjKow1Z~2=P}D,U{ m.JmkuN2a,nO{a+z"R X*cPA/r<&{s#),h'# =1%uX?PZh 3qCMWwMG005P?FY*v.t:|McN+9UR/l<`3bL[Ez KC,F`4S9]rFEBZD^M*^ :k|n=@I_>_mmZ=9Ga DI,VL <;TmS:  <U OWRcz^Y&Wsa>mI;|AZuu^dPK c/ u\)U3*+7*fIxu2g3 (!&% VZ27 MG(Hgae8WFI{K2iFRAU>vaf4,C2W]BqhL@3J8&t[I2\M'.BV3uPL/FU4YrX: rl@UhJ ]m/wIbUUm^_uP$PW`!/$hh [:OQuJ^G\U=8<^%[@gV=? @ 6m=qRrx!_B*(/v\UZ6'A9??1PJQ,`R"8%sVBDXI0K& Gs&Mt}]H}%" UB9Jt/uagPv>6XY4%#l6xQ0~V`OH[HHIP! f+a -zj_F} y3_>m UHuM#?}Oq+mSc .TCpXQ/R(R yY?f2 JW^?e)FK3"[ B]Se] tZKWuCUuT%g|VS8u9fBRQ}2L%O ;dTN:S;2.uD)x-eTLYEU! 7.&rV QXzn&3PFhY;L7Y8X|U ^BwY Z !^JYHIQ3F/^WOjHZ~2c*PYR%Mn:j%Z==CsVX qAZFK {[hrWhqUd~\0O8z#_{QT@;<_A I>$hwOA=aFN}nlA]` A+&H 1p{,3[wY4V6)Ub2/ ?_$^?^TVh5wU# / 0zP\HqaOTPB!I4>8_D]I K$VuK=RA5I \Y'jU7-K;H^z8 X UYmGC# *xg_CF  2RX' A\@Kg; E Ky;bV+ h W6LV#IX iXm jrIG#jO6ZlR$;S;'x?4U(J&{rS'4*F$HTi 'w [za3AL?Ce%I&QRI]b4 ^n.X _[UfZoKr{YNM@By&E{Ow!:Kkr]pwEZA:*sB <_BJ_ Pvnq Y@0($\Oy'D:1>D9mu3"X:x\WnMI" B^: P%.nL3 iE WbZM GN'XkZ3@2TgQ"*NEFHyRU'=_UX(?\Y%qyDqE0|G V#`XL k3bOykH~XrHM*cu*@QD,J8vLMQlV^P@K_0^@_{W-V^R cLdfM"  fLi&N)f3  \t2WkP1 L ~rQmK`:^A~Y %1DM+I =J  0 \Dz@AU29F*M,]]ODQe1gLf4P3XN-3 U wGFNG\ k`B9?x9gh;PrC`uW} yC_43_u,oFS4t[P4D@xCO]RPUJL#'(wd?S@aCb6LN Ad2SLFF#l jM_v]4 Gk2 @IGxrKj26+!DAS~] Jv"efxH LY@KQB4qY__JQ#f=17 NLO\l/D|Eq&Ida' r$AZ 1NDHE8A5K6d73u4q\BfC@NK2N]]T axCCMGd{R6MYJaD%2BzmIgOS_M Dsf\*Y MP #5F 7G:sJ&@TU 1PJUO+@WymM\qX4QG(y @;8fKD#6 E 4Suy&K|ybW"D3|7<,fOmdD}m2u><e|{Grs /a"5 +N,J-g)6ao.&lBji70:i5$++Q26ed;Ra;8Q,1:axKUd:p]@2q="#.|-xhHvgK=hj}p5|3&*1[tA#~zzm]2l _O? :K}/h2ha72Si~u]UCC[#Ѱ~w9}.bX"'Xp, P3ER<)nm| ^|eI?+S[zuza-2-hIE*P/w@rmnCQFW C 6yy:OTyT -~^ imJ4v DYF./R(QTU/UFJP3XP$*:2T|)EtcWvOs, t_d)g95`QAC]^!TNb/(h|#b|!xamei? d1?/;e*W~tDvx_-*op,", gH~Y$yjo"&Y hzi6\3)~h5U}x7D n Nv"l AgZoLc=;2gr|8.0,<7{Q7"nm-v'$`k`GGK) 814`G)yK2sH WGK/%Jw72[9eVuaH>@AwO-~z;cp#O{S 7DOz\LJ*hF`GZe p ~>Z *$lQ>m>of(8@YRv7-)K[1"VErP{**Q8gluHGDKiH*cnqTbA4UDLkvDa.A-`)6|,fXK{p.iJ[I*UMM7Ws`"-"7p0lhFPQ @]+9.bIgh,8J72A"A|bkma _JC!E4W=;a>`[i@<$@r n*K6A0HAC%{W}/],4[Lm|kQcV$uz|>[O`IL@[;8#L[|@g-Zj%@sir f 5R\V][@2!M,4!| pj} y&v-e25HNDEyxv@;n4W]XEg:o84cz+7? C#UO **(|M}gA fQv_R(-^q =%&= niYCsh`@ m>99x|8^[jA}m!h&57#u/t bvoP [Uyg D+O { v>=1t'0i`,%e0RgeszC%VzDN@(3%9!,{HJ$SOAe%GPB{FHrE8U6&6K*90n\GOv^i;:o9D9P#rKULXl*qv~jJ}w)Ne`N32&\gfllhRY'IXA!x$sp(dP%7q7PW*o[qwo0l<>#<@"*-r+CIE91/":MO!l1]4"wMKz2o$.cj+@J(w@i*p%F(ffiw[O. *{X2Sa>r"R5]HST7:E@a vLJV)QoH^FBg; ko;\w"UBgB7&]jLUB3&{4@[WY j~ m Tx0.jFl<C4 %fDdRhuA0^:?h(4]`D\Q:pD/& {/Qn?%IuLv/a$NRTJD Bhck+.Hm.9E?[ =92!?Q-&Wiy* rfw8 |58?q@>QB(G'P.Rm ./Xq ?iFj+{dv:*f6ecU[r5!m=RONY S)0J#n?uTIa`p"yw 34E9VB09-z0&kl MhCfS$^PUdB+@XVS x\G"AhQ&t*L@[FI6!@?{--mS?SCWCH~ m]Nod] 8.)A)ik,T)@0+F%; =!DH[eyH,}_SZ^DrdQXyVn*x[h=_[lw31'OQUIconis Iconix IconoClass Iconol9>5 VMS.BCK>%[V9.IPL.DATA]IHELP.DAT;1;1<k(<-> expr2 # reversible exchange expr1 op:= expr2 # (augmented assignments) expr1 ? expr2 # string scanning expr1 & expr2 # conjunction Low Precedence Expressions break [expr] # break from loop case expr0 of { # case selection expr1:expr2 ... [default:exprn] } create expr # co-expression creation every expr1 [do expr2] # iterate over generated values fail # failure of procedure if expr1 then exp2 [else exp3] # if-then-else next # go to top of loop repeat expr # loop return expr # return from procedure suspend expr1 [do expr2] # suspension of procedure until expr1 [do expr2] # until-loop while expr1 [do expr2] # while-loop - Functions and datatypes of arguments and produced values: abs(N) : N # compute absolute value acos(r1) : r2 # compute arc cosine any(c,s,i1,i2) : i3 # locate initial character args(p) : i # get number of procedure arguments bal(c1,c2,c3,s,i1,i2) : i3,i4,...,in # locate balanced characters callout(x,x1,x2,...,xn) : xm # call external function center(s1,i,s2) : s3 # position string at center char(i) : s # produce character chdir(s) : n # change directory close(f) : f # close file collect(i1,i2) : n # perform garbage collection copy(x1) : x2 # copy value cos(r1) : r2 # compute cosine cset(x) # convert to cset delay(i) : n # delay execution delete(X,x) : X # delete element detab(s1,i1,i2,...,in) : s2 # remove tabs display(i,f) : n # display variables dtor(r1) : r2 # convert degrees to radians entab(s1,i1,i2,...,in) : s2 # insert tabs errorclear() : n # clear error indication exit(i) # exit program exp(r1) : r2 # compute exponential find(s1,s2,i1,i2) : i3,i4,...,in # find string flush(f) : n # flush I/O buffer function() : s1,s2,...,sn # generate function names get(L) : x # get value from list getenv(s1) : s2 # get value of environment variable iand(i1,i2) : i3 # compute bit-wise "and" icom(i1) : i2 # compute bit-wise complement image(x) : s # produce string image insert(X,x1,x2) : X # insert element integer(x) : i # convert to integer ior(i1,i2) : i3 # compute bit-wise inclusive "or" ishift(i1,i2) : i3 # shift bits ixor(i1,i2) : i3 # compute bit-wise exclusive "or" key(T) : x1,x2,...,xn # generate keys from table left(s1,i,s2) : s3 # position string at left list(i,x) : L # create list log(r1,r2) : r3 # compute logarithm many(c,s,i1,i2) : i3 # locate many characters map(s1,s2,s3) : s4 # map characters match(s1,s2,i1,i2) : i3 # match initial string member(X,x) : x # test for membership mmout(x) : n # write text to allocation history mmpause(s) : n # write pause to allocation history mmshow(x,s) : n # redraw in allocation history move(i) : s # move scanning position name(x) : s # produce name numeric(x) : N # convert to numeric open(s1,s2) : f # open file ord(s) : i # produce ordinal pop(L) : x # pop from list pos(i1) : i2 # test scanning position proc(x,i) : p # convert to procedure pull(L) : x # pull from list push(L,x) : L # push onto list put(L,x) : L # put onto list read(f) : s # read line reads(f,i) : s # read string real(x) : r # convert to real remove(s) : n # remove file rename(s1,s2) : n # rename file repl(s1,i) : s2 # replicate string reverse(s1) : s2 # reverse string right(s1,i,s2) : s3 # position string at right rtod(r1) : r2 # convert radians to degrees runerr(i,x) # terminate with run-time error save(s) : i # save executable image seek(f,i) : f # seek to position in file seq(i1,i2) : i3,i4,... # generate sequence of integers set(L) : S # create set sin(r1) : r2 # compute sine sort(X,i) : L # sort structure sortf(X,i) : L # sort list or set by field sqrt(r1) : r2 # compute square root stop(x1,x2,...,xn) # stop execution string(x) : s # convert to string system(s) : i # call system function tab(i) : s # set scanning position table(x) : T # create table tan(r1) : r2 # compute tangent trim(s1,c) : s2 # trim string type(x) : s # produce type name upto(c,s,i1,i2) : i3,i4,...,in # locate characters variable(s) : x # produce variable where(f) : i # produce position in file write(x1,x2,...,xn) : xn # write line writes(x1,x2,...,xn) # write string - Operations and required datatypes prefix operations +N : N # compute positive -N : N # compute negative ~c1 : c2 # compute cset complement =s1 : s2 # match string in scanning @C : x # activate co-expression ^C1 : C2 # create refreshed co-expression *x : i # compute size ?x1 : x2 # generate random value !x : x1,x2,...,xn # generate values /x : x # check for null value \x : x # check for non-null value .x : x # dereference variable infix operations N1 + N2 : N3 # compute sum N1 - N2 : N3 # compute difference N1 * N2 : N3 # compute product N1 / N2 : N3 # compute quotient N1 % N2 : N3 # compute remainder N1 ^ N2 : N3 # compute exponential x1 ++ x2 : x3 # compute cset or set union x1 -- x2 : x3 # compute cset or set difference x1 ** x2 : x3 # compute cset or set intersection s1 || s2 : s3 # concatenate strings L1 ||| L2 : L3 # concatenate lists R.F : x # get field of record x1 @ C : x2 # transmission value to co-expression x1 & x2 : x2 # evaluate in conjunction N1 < N2 : N2 # compare numerically N1 <= N2 : N2 # " N1 = N2 : N2 # " N1 >= N2 : N2 # " N1 > N2 : N2 # " N1 ~= N2 : N2 # " s1 << s2 : s2 # compare lexically s1 <<= s2 : s2 # " s1 == s2 : s2 # " s1 >>= s2 : s2 # " s1 >> s2 : s2 # " s1 ~== s2 : s2 # " x1 === x2 : x2 # compare values x1 ~=== x2 : x2 # " x1 := x2 : x1 # assign value x1 op:= x2 : x1 # augmented assignment x1 :=: x2 : x1 # exchange values x1 <- x2 : x1 # assign value reversibly x1 <-> x2 : x1 # exchange values reversibly - Keywords &allocated : i1,i2,i3,i4 # accumulated bytes allocated # (total,static,string,block) &ascii : c # cset of ascii characters &clock : s # current time of day &collections : i1,i2,i3,i4 # collection count # (total,static,string,block) &cset : c # cset of all characters ¤t : C # current co-expression &date : s # current date &dateline : s # current date and time &digits : c # cset of digits 0-9 &e : r # base of natural logarithms, 2.71828... &error : i # run-time error conversion control &errornumber : i # run-time error number &errortext : s # run-time error message text &errorvalue : x # run-time error offending value &errout : f # standard error output file &fail # fails &features : s1,s2,...,sn # implementation features &file : s # current source code file name &host : s # string identifying host computer &input : f # standard input file &lcase : c # cset of lower case letters a-z &letters : c # cset of all letters A-Za-z &level : i # level of current procedure call &line : i # current source code line number &main : C # main co-expression &null : n # the null value &output : f # standard output file &phi : r # The golden ratio, 1.61803... &pi : r # The value of pi, 3.14159... &pos : i # string scanning position &random : i # random number seed ®ions : i1,i2,i3 # current region size # (static,string,block) &source9 VMS.BCK>%[V9.IPL.DATA]IHELP.DAT;1;1<T 7 : C # activator of current co-expression &storage : i1,i2,i3 # current bytes allocated # (static,string,block) &subject : s # string scanning subject &time : i # current run time in milliseconds &trace : i # procedure tracing control &ucase : c # cset of upper case letters A-Z &version : s # version of Icon - Datatypes null(n) string(s) co-expression(C) table(T) integer(i) cset(c) procedure(p) set(S) real(r) file(f) list(L) (R) (see also "Abbreviations") - Reserved words break do global next repeat to by else if not return until case end initial of static while create every link procedure suspend default fail local record then - Escapes in string and cset constants \b backspace \v vertical tab \d delete(rubout) \' single quote \e escape (altmode) \" double quote \f formfeed \\ backslash \l linefeed (newline) \ddd octal code \n newline (linefeed) \xdd hexadecimal code \r carriage return \^c control code \t horizontal tab - Abbreviations used in Icon help files (and other Icon literature) c cset C co-expression f file L list i integer N numeric (i or r) n null R record (any record type) p procedure S set r real T table s string X any structure type (L, R, S, or T) x any type F field of record - About the Icon Programming Language Help File Information used in this help file was obtained from the following sources: Griswold, Ralph E. and Madge T. Griswold. "The Icon Programming Language, Second Edition", Prentice-Hall, Inc., Englewood Cliffs, New Jersey. 1990. Griswold, Ralph E. ICONT(1), manual page for "UNIX Programmer's Manual", Department of Computer Science, The University of Arizona. 1988. Griswold, Ralph E., Clinton L. Jeffery, Gregg M. Townsend, and Kenneth Walker. "Version 8.6 of the Icon Programming Language", IPD188, Department of Computer Science, The University of Arizona. 1992. Further information on the Icon Programming Language can be obtained from: Icon Project Department of Computer Science Gould-Simpson Building The University of Arizona Tucson, Arizona 85721 U.S.A. (602) 621-2018 icon-project@cs.arizona.edu (Internet) ...{uunet,allegra,noao}!arizona!icon-project (uucpnet) April 2, 1992. o*[V9.IPL.DATA]JOYCE1.TXT;1+,@./ 4-%0123KPWO56p˚7P ̚89Jj$GHJWhat special affinities appeared to him to exist between the moon and woman? Her antiquity in preceding and surviving successive tellurian generations: her nocturnal predominance: her satellitic dependence: her luminary reflection: her constancy under all her phases, rising, and setting by her appointed times, waxing and waning: the forced invariablility of her aspect: her indeterminate response to inaffirmative interrogation: her potency over effluent and refluent waters: her power to enamour, to mortify, to invest with beauty, to render insane, to incite and aid delinquency: the tranquil inscrutability of her visage: the terribility of her isolated dominant implacable resplendent propinquity: her omens of tempest and of calm: the stimulation of her light, her motion and her presence: the admonition of her craters, her arid seas, her silence: her splendour, when visible: her attraction, when invisible. *[V9.IPL.DATA]JOYCE2.TXT;1+,A./ 4~-%0123KPWO56pj̚7u1̚89Jj$GHJLynch! Hey? Sign on long o me. Denzille lane this way. Change here for Bawdyhouse. We two, she said, will seek the kips where shady Mary is. Righto, any old time. Laetabuntur in cubilibus suis. You coming long? Whisper, who the sooty hell's the johnny in the black duds? Hush! Sinned against the light and even now that day is at hand when he shall come to judge the world by fire. Pflaap! Ut implerentur scripturae. Strike up a ballad. Then outspake medical Dick to his comrade medical Davy. Christicle, who's this excrement yellow gospeller on the Merrion hall? Elijah is coming washed in the Blood of the Lamb. Come on, you winefizzling ginsizzling booseguzzling existences! Come on, you dog-gone, bullnecked, bettlebrowed, hogjowled, peanutbrained, weaseleyed fourflushers, false alarms and excess baggage! Come on, you triple extract of infamy! Alexander J. Christ Dowie, that's yanked to glory most half this planet from 'Frisco Beach to Vladivostok. The Deity ain't no nickel dime bumshow. I put it to you that he's on the square and a corking fine business proposition. He's the grandest thing yet and don't you forget it. Shout salvation in king Jesus. You'll need to rise precious early, you sinner there, if you want to diddle the Almighty God. Pflaaaap! Not half. He's got a coughmixture with a punch in it for you, my friend, in his backpocket. Just you try it on. *[V9.IPL.DATA]JOYCE3.TXT;1+,B./ 4-%0123KPWO56=̚7Ve̚89Jj$GHJHe larved ond he larved on he merd such a nauses The Gracehoper feared he would mixplace his fauces. I forgive you, grondt Ondt, said the Gracehoper, weeping, For the sukes of the sakes you are safe in whose keeping. Teach Floh and Luse polkas, show Bienie where's sweet And be sure Vespatilla fines fat ones to heat. As I once played the piper I must now pay the count So saida to Moyhammlet and Marhaba to your Mount! Let who likes lump above so what flies be a full 'un; I could not feel moregruggy if this was prompollen. I pick up your reproof, the horsegift of a friend, For the prize of your save is the price of my spend. Can castwhores pulladeftkiss if oldpollocks forsake 'em Or Culex feel etchy if Pulex don't wake him? A locus to loue, a term it t'embarass, These twain are the twins that tick Homo Vulgaris. Has Aquileone nort winged to go syf Since the Gwyfyn we were in his farrest drewbryf And that Accident Man not beseeked where his story ends Since longsephyring sighs sought heartseast for their orience? We are Wastenot with Want, precondamned, two and true, Till Nolans go volants and Bruneyes come blue. Ere those gidflirts now gadding you quit your mocks for my gropes An extense must impull, an elapse must elopes Of my tectucs takestock, tinktact, and ail's weal; As I view by your farlook hale yourself to my heal. Partiprise my thinwhins whiles my blink points unbroken on Your whole's whercabroads with Tout's trightyright token on. My in risible universe youdly haud find Such oxtrabeeforeness meat soveal _ VMS.BCKB%[V9.IPL.DATA]JOYCE3.TXT;11behind. Your feats end enormous, your volumes immense, (May the Graces I hoped for sing your Ondtship song sense!), Your genus its worldwide, your spacest sublime! But, Holy Saltmartin, why can't you beat time? p*[V9.IPL.DATA]LINDEN.DAT;1+,V./ 4 -%0123KPWO56"Қ7@yҚ89Jj$GHJname:bush comment: Grows sideways. F->FF-[-F+F+F]+[+F-F-F] axiom:++++F angle:22.5 name:cesaro comment: Winds up being about half done. y coordinate needs setting low. X->----F!X!++++++++F!X!---- F-> gener:10 length:3 axiom:FX angle:10.58823529 name:curve1 comment: A Koch curve. F->FF-F-F-F-F-F+F axiom:F-F-F-F- angle:90.0 name:curve2 comment: A Koch tiling. F->FF-F+F-F-FF axiom:F-F-F-F- angle:90.0 name:curve3 comment: Another Koch curve; dull. F->F-FF--F-F axiom:F-F-F-F- angle:90.0 name:curve4 X->YF+XF+Y Y->XF-YF-X axiom:YF angle:60.0 gener:5 name:dragon X->-FX++FY- Y->+FX--FY+ F-> axiom:FX angle:45.0 gener:10 name:dragon1 r->-Fl-r l->l+rF+ axiom:Fl gener:14 name:dragonc X->X-YF- Y->+FX+Y axiom:X angle:90.0 gener:10 name:fass1 comment: Space-filling curve. R->-LFLF+RFRFR+F+RF-LFL-FR L->LF+RFR+FL-F-LFLFL-FRFR+ axiom:-L angle:90.0 name:fass2 comment: Space-filling curve. R->-LFLFLF+RFR+FL-F-LF+RFR+FLF+RFRF-LFL-FRFR L->LFLF+RFR+FLFL-FRF-LFL-FR+F+RF-LFL-FRFRFR+ axiom:-L angle:90.0 name:flake3 X->++FXFY--FX--FY Y->FYFX+++FYFX++FX++FYFX|+FX--FY--FXFY++ F-> axiom:FX angle:30.0 gener:10 name:hilbert comment: Space-filling curve. Needs to start down and to the right X->-YF+XFX+FY- Y->+XF-YFY-FX+ axiom:X angle:90.0 gener:10 name:island1 F->FFFF-F+F+F-F[-FF+F+FF+F]FF axiom:F+F+F+F angle:90.0 name:island2 comment: Grows off top of window. F->F+F-FF-F-FF++FF-F+FF+F+FF--FFF axiom:F+F+F+F angle:90.0 gener:4 length:2 name:koch1 comment: Needs to start to the bottom right. F->F+F--F+F axiom:F--F--F angle:60.0 gener:4 length:4 name:koch2 comment: Needs to start to the bottom right. F->-F+++F---F+ axiom:F---F---F---F angle:30.0 gener:6 length:4 name:koch3 comment: Needs to start to the bottom left. F->F-F+F+FF-F-F+F axiom:F-F-F-F angle:90.0 gener:6 length:4 name:koch4 F->+F--F++F- axiom:F++++F++++F angle:30.0 gener:5 length:3 name:koch5 F->F+F-F-FFF+F+F-F axiom:F+F+F+F angle:90.0 name:koch6 F->F-FF+FF+F+F-F-FF+F+F-F-FF-FF+F axiom:F+F+F+F angle:90.0 name:koch7 F->F+F-F+F+F axiom:F+F+F+F gener:4 name:koch8 comment: One side only. F->F+F--F+F axiom:F angle:60.0 name:lakeisle F->F-f+FF-F-FF-Ff-FF+f-FF+F+FF+Ff+FFF f->ffffff axiom:F-F-F-F gener:2 name:leaf1 H->J P->X X->F[+AAAA]FY E->H B->E J->Y O->P A->N Y->F[-BBBB]FX N->O axiom:X angle:45.0 gener:10 name:leaf2 comment: Not much like a leaf. X->A B->F[-Y]FA A->F[+X]BF Y->B axiom:A angle:45.0 gener:14 name:peano1 comment: Space-filling curve. F->F-F+F+F+F-F-F-F+F axiom:F-F-F-F angle:90.0 name:peano2 comment: Nifty space-filling curve. Needs to start toward bottom. X->XY-F-FXY++F++FXY Y->-F-FXY axiom:FXY++F++FXY++F angle:45.0 gener:4 length:7 name:peano3 comment: Space-filling curve. X->XFYFX+F+YFXFY-F-XFYFX Y->YFXFY-F-XFYFX+F+YFXFY axiom:X angle:90.0 name:penrose1 X->+YF--ZF[---WF--XF]+ Z->--YF++++WF[+ZF++++XF]--XF W->YF++ZF----XF[-YF----WF]++ Y->-WF++XF[+++YF++ZF]- F-> axiom:+WF--XF---YF--ZF angle:36.0 name:penrose2 X->+YF--ZF[---WF--XF]+ Z->--YF++++WF[+ZF++++XF]--XF W->YF++ZF----XF[-YF----WF]++ Y->-WF++XF[+++YF++ZF]- F-> axiom:++ZF----XF-YF----WF angle:36.0 gener:5 length:10 name:penrose3 X->+YF--ZF[---WF--XF]+ Z->--YF++++WF[+ZF++++XF]--XF W->YF++ZF----XF[-YF----WF]++ Y->-WF++XF[+++YF++ZF]- F-> axiom:[X]++[X]++[X]++[X]++[X] angle:36.0 gener:5 length:10 name:penrose4 X->+YF--ZF[---WF--XF]+ Z->--YF++++WF[+ZF++++XF]--XF W->YF++ZF----XF[-YF----WF]++ Y->-WF++XF[+++YF++ZF]- F-> axiom:[Y]++[Y]++[Y]++[Y]++[Y] angle:36.0 gener:5 length:10 name:penrosed comment: Double Penrose tiling; looks nice. X->+YF--ZF[---WF--XF]+ Z->--YF++++WF[+ZF++++XF]--XF W->YF++ZF----XF[-YF----WF]++ Y->-WF++XF[+++YF++ZF]- F-> axiom:[X][Y]++[X][Y]++[X][Y]++[X][Y]++[X][Y] angle:36.0 length:40 name:plant01 comment: Not bad. Grows off top. F->F[+F]F[-F]F axiom:F angle:25.71428571 gener:10 name:plant02 F->F[+F]F[-F][F] axiom:F angle:20.0 name:plant03 F->FF-[-F+F+F]+[+F-F-F] axiom:F angle:22.5 gener:4 name:plant04 comment: Dull. X->F[+X]F[-X]+X F->FF axiom:X angle:20.0 gener:5 name:plant05 comment: Not bad. X->F[+X][-X]FX F->FF axiom:X angle:25.71428571 gener:5 name:plant06 comment: Prettty good. X->F-[[X]+X]+F[+FX]-X F->FF axiom:X angle:22.5 gener:5 name:plant07 comment: Strange but fascinating. X->X[-FFF][+FFF]FX Z->ZFX[+Z][-Z] axiom:Z angle:25.71428571 gener:5 name:plant08 comment: Dull. S->[+++Z][---Z]TS H->-Z[+H]L Z->+H[-Z]L L->[-FFF][+FFF]F T->TL axiom:SLFFF angle:18.0 gener:6 length:8 name:plant09 comment: Strange but cute. X->X[-FFF][+FFF]FX Y->YFX[+Y][-Y] axiom:Y angle:25.71428571 gener:5 name:plant10 comment: Symmetric; bushy and unnatural. F->F[+FF][-FF]F[+FF][-FF]F axiom:F angle:36.0 gener:3 name:plant11 comment: Unnatural but cute. F->F[+F[+F][-F]F][-F[+F][-F]F]F[+F][-F]F axiom:F angle:30.0 gener:3 length:10 name:quadgos comment: Space-filling curve. R->+FLFL-FR-FR+FL+FLFR+FL-FRFR-FL-FR+FLFRFR-FL-FRFL+FL+FR-FR-FL+FL+FRFR L->FLFL-FR-FR+FL+FL-FR-FRFL+FR+FLFLFR-FL+FR+FLFL+FR-FLFR-FR-FL+FL+FRFR- F-> axiom:-FR angle:90.0 name:quadkoch comment: Yet another Koch curve. F->F+FF-FF-F-F+F+FF-F-F+F+FF+FF-F axiom:FX++FX++FX++FX++FX angle:90.0 name:quartet comment: Space-filling curve. H->- B->FB+FA-FB-JFBFA J->+ A->FBFA+HFA+FB-FA F-> axiom:FB angle:90.0 gener:8 name:sier1 comment: Well, not so great X->+FXF-FXF-FXF+ F->FXF axiom:F angle:120.0 gener:5 name:sier2 X->--FXF++FXF++FXF-- F->FF axiom:FXF--FF--FF angle:60.0 gener:5 name:sier3 F->F[-F]F axiom:F-F-F angle:120.0 gener:5 name:siersqar F->FF+F+F+F+FF axiom:F+F+F+F angle:90.0 gener:4 name:snoflake F->F-F+F+F-F axiom:+F gener:4 name:space1 X->YFXFY+F+YFXFY-F-XFYFX Y->YFXFY-F-XFYFX+F+YFXFY axiom:X gener:3 name:sphinx comment: Vaguely interesting X->+FF-YFF+FF--FFFXF--YFFFYFFF G->GG Y->-FF+XFF-FF++FFFYF++XFFFXFFF F->GG axiom:X angle:60.0 gener:5 name:sqgasket comment: Dull. X->+FXF+FXF+FXF+FXF F->FF axiom:X angle:90.0 gener:5 name:square comment: Sierpinski gasket F->FF+F+F+F+FF axiom:F+F+F+F angle:90.0 name:tile comment: A circular tiling; comes out nicely. X->[F+F+F+F[---X-Y]+++++F++++++++F-F-F-F] Y->[F+F+F+F[---Y]+++++F++++++++F-F-F-F] axiom:X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X angle:15.0 length:10 name:tree comment: Grows right; symmetric, not life-like. X->[-FX]+FX axiom:+++FX angle:30.0 gener:8 length:10 name:tree1 X->[-FX]+FX axiom:+++FX angle:30.0 gener:5 length:8 name:tree2 comment: Dull; draws sideways. X->+FY Y->-FX F->FF-[XY]+[XY] axiom:++++F angle:22.5 *[V9.IPL.DATA]NOCI.WRD;1+,U"./ 4-%0123KPWO56vњ7sҚ89Jj$GHJ VMS.BCKU"%[V9.IPL.DATA]NOCI.WRD;1E;1Sanociassociation chronocinematography Cyanocitta genocidal genocide gymnocidium monocilated monocilia monociliate monociliated monociliceae monocite Noci nociassociation nociceptive nociceptor nocifensor nociferous nociperception nociperceptive nocite nocive nocivous Parthenocissus phonocinematograph pneumonocirrhosis trypanocidal trypanocide uranocircite zonociliate Nocine nocite *[V9.IPL.DATA]ONES.TUR;1+,&./ 4-%0123KPWO56PĚ70Ě89Jj$GHJ# From: heim@tub.UUCP (Heiner Marxen) # Newsgroups: sci.math # Subject: busy beaver Turing machine # Date: 24 Aug 89 13:24:10 GMT # Organization: Technical University of Berlin, Germany # # This is about ``busy beavers'' (is there a more appropriate newsgroup?). # Unfortunately I did read this newsgroup only sporadically, and don't know # whether this has been discussed already. My other sources of information # (mainly the German issue of `Scientific American') don't tell me more. # # As far as I know the 5-state busy beaver question is not yet settled. # With the help of a program I have found a 5-state Turing machine which # halts (after 11,798,826 steps) and produces 4098 ones on the tape, namely # A0 -> B1L A1 -> A1L // `A' is the initial state # B0 -> C1R B1 -> B1R // `R' is `move right' # C0 -> A1L C1 -> D1R // `L' is `move left' # D0 -> A1L D1 -> E1R # E0 -> H1R E1 -> C0R // `H' is the halting state # The best machine I knew before produces 1915 ones (published in 1985 # by Scientific American, I believe). My questions are # Q1: Is there ongoing (or completed) research ? Any (theoretic) results ? # Q2: Are there any better 5-state machines known or published ? # Q3: Who else studies the busy beaver problem with general purpose computers? # # Answers to the above, hints and pointers are welcome. # Please answer by e-mail; if appropriate I will summarize to the net. # = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = # Heiner Marxen, from europe: unido!tub!heim # from world: pyramid!tub!heim # bitnet: heim%tub.BITNET@mitvma.MIT.EDU 1. 1l2 1l1 2. 1r3 1r2 3. 1l1 1r4 4. 1l1 1r5 5. 1h0 0r3 a*[V9.IPL.DATA]PALIN.SEN;1+,C./ 4G-%0123KPWO56l̚7͚89Jj$GHJ"Degenerate Moslem, a cad!" Eva saved a camel so Meta reneged. "Deliver desserts," demanded Nemesis, "emended, named, stressed, reviled." "Do nine men interpret?" "Nine men," I nod. "Go, droop aloof," sides reversed, is "fool a poor dog." "Knight, I ask nary rank," saith gink. "Ma," Jerome raps pot top, "spare more jam!" "Naomi, sex at noon taxes", I moan. "Norah's moods," Naomi moans, "doom Sharon." "Not New York," Roy went on. "Not for Cecil?" asks Alice Crofton. "Novrad," sides reversed, is "Darvon." "Now dine," said I as Enid won. "Pooh," smiles Eva, "have Selim's hoop." "Rats gnash teeth," sang Star. "Reviled did I live," said I, "as evil I did deliver." "Revolt, love!" raved Eva. "Revolt, lover!" "Sal is not in?" Ruth asks. "Ah, turn it on, Silas." "Sirrah! Deliver deified desserts detartrated!" stressed deified, reviled Harris. "Slang is not suet, is it?" Euston signals. "So I darn on," a Canon radios. "Stop!" nine myriad murmur. "Put up rum, rum, dairymen, in pots." "Stop, Syrian, I start at rats in airy spots" "Sue," Tom smiles, "Selim smote us." "Suit no regrets." A motto, Master Gerontius. "Warden in a Cap," Mac's pup scamp, a canine draw. 'Tis Ivan on a visit. A Toyota. A dog! A panic in a pagoda! A new order began, a more Roman age bred Rowena. A rod, not a bar, a baton, Dora. A slut nixes sex in Tulsa. A war at Tarawa! Able was I ere I saw Elba. Adam, I'm Ada! Adelberta was I ere I saw a trebled "A". Ah, Aristides opposed it, sir, aha! Ah, Satan sees Natasha. Al lets Della call Ed, Stella. All erotic, I lose my lyme solicitor, Ella. Amiced was I ere I saw Decima. Analytic Paget saw an inn in a waste-gap city, Lana. Anne, I stay a day at Sienna. Anne, I vote more cars race Rome-to-Vienna. Arden saw I was Nedra. Are we not drawn onwards, we Jews, drawn onward to new era? Are we not, Rae, near to new era? Ban campus motto, "Bottoms up, MacNab." Bob: "Did Anna peep?" Anna: "Did Bob?" Bog dirt up a sidetrack carted is a putrid gob. Damosel, a poem? A carol? Or a cameo pale? (So mad!) Deer frisk, sir, freed. Degas, are we not drawn onward, we freer few, drawn onward to new eras aged? Delia and Edna ailed. Delia sailed as sad Elias ailed. Delia sailed, Eva waved, Elias ailed. Delia's debonair dahlias, poor, drop, or droop. Sail, Hadrian; Obed sailed. Delia, here we nine were hailed. Deliver, Eva, him I have reviled. Dennis and Edna sinned. Dennis sinned. Dennis, no misfit can act if Simon sinned. Deny me not; atone, my Ned. Di, did I as I said I did? Did Dean aid Diana? Ed did. Did Hannah say as Hannah did? Did I do, O God, did I as I said I'd do? Good, I did! Did I draw Della too tall, Edward? I did? Did Ione take Kate? No, I did. Dior Droid. Do Good's deeds live on? No, Evil's deeds do, O God. Do not start at rats to nod. Doc, note, I dissent. A fast never prevents a fatness. I diet on cod. Dog, as a devil deified, lived as a god. Doom an evil deed, liven a mood. Dora tended net, a rod. Drab Red, no londer bard. Drab as a fool, as aloof as a bard. Draw -- aye, no melody -- dole-money award. Draw no dray a yard onward. Draw pupil's pup's lip upward. Draw, O Caesar, erase a coward. Draw, O coward! Eel-fodder, stack-cats red do flee. Egad! Loretta has Adams as mad as a hatter. Old age! Egad, a base life defiles a bad age. Egad, a base tone denotes a bad age. Emil asleep, ALlen yodelled "Oy." Nella peels a lime. Emil, asleep, Hannah peels a lime. Enid and Edna dine. Ere hypocrisies or poses are in, my hymn I erase. So prose I, sir, copy here. Euston saw I was not Sue. Eva, Lave! Eva, can I pose as Aesop in a cave? Eva, can I stab bats in a cave? Evade me, Dave. Eve damned Eden, mad Eve. Eve saw diamond, erred, no maid was Eve. Eve, mad Adam, Eve! Eve, man, am Eve! Evil is a name of a foeman, as I live. Ewer of miry rim for ewe. Flee to me, remote elf. Gate-man sees name, garage-man sees name-tag. God, a red nugget! A fat egg under a dog! Goddesses so pay a possessed dog. Golf, No, sir, prefer prison flog. Ha! Robed Selim smiles, Deborah! Ha! I rush to my lion oily moths, Uriah! Ha! On, on, o Noah! Harass selfless Sarah! Harass sensuousness, Sarah. He Goddam Mad Dog, Eh? He lived as a devil, eh? Help Max, Enid -- in example, "H." Here so long? No loser, eh? I did roar again, Niagara! ... or did I? I made border bard's drowsy swords; drab, red-robed am I. I maim nine men in Saginaw; wan, I gas nine men in Miami. I maim nine more hero-men in Miami. I moan, "Live on, O evil Naomi!" I moan, Naomi. I roamed under it as a tired, nude Maori. I saw desserts; I'd no lemons, alas no melon. Distressed was I. I saw thee, m/ VMS.BCKC%[V9.IPL.DATA]PALIN.SEN;1;1r| adame, eh? 'Twas I. I tip away a wapiti. I told Edna how to get a mate: "Go two-handed." Loti. I, Marian, I too fall; a foot-in-air am I. I, man, am regal; a German am I. In a regal age ran I. In airy Sahara's level, Sarah, a Syrian, I. La, Mr. O'Neill, lie normal. Ladle histolytic city lots I held, Al. Lapp, Mac? No, sir, prison-camp pal. Lay a wallaby baby ball away, Al. Leon sees Noel. Lepers repel. Lew, Otto has a hot towel. Lewd did I live, and, Edna, evil I did dwel. Lewd did I live; evil I did dwel. Live dirt up a sidetrack carted is a putrid evil. Live dirt, up a side-track carted, is a putrid evil. Live not on evil deed, live not on evil. Live not on evil. Live on evasions? No, I save no evil. Live on, Time; emit no evil. Live was I ere I saw Evil. Live was I ere I saw evil. Ma is a nun, as I am. Ma is as selfless as I am. Mad Zeus, no live devil, lived evil on Suez dam. Mad? Am I, madam? Madam, I'm Adam. Madam, in Eden I'm Adam! Madame, not one man is selfless; I name not one Madam. Marge let a moody baby doom a telegram. Marge lets Norah see Sharon's telegram. Marge, let's "went." I await news telegram. Max, I stay away at six A.M. May a moody baby doom a yam? Milestones? Oh, 'twas I saw those, not Selim. Mirth, sir, a gay asset? No, don't essay a garish trim. Moorgate got nine men in to get a groom. Moors dine, nip -- in Enid's room. Mother Eve's noose we soon sever, eh, Tom? Mother at song no star, eh Tom? Must sell at tallest sum. Name I -- Major-General Clare -- negro Jamie Man. Name now one man. Naomi, did I moan? Ned, I am a maiden. Ned, go gag Ogden. Nella risks all: "I will ask Sir Allen." Nella won't set a test now, Allen. Nella's simple hymn: "I attain my help, Miss Allen." Nella, demand a lad named Allen. Nemo, we revere women. Never a foot too far, even. Never odd or even. Niagara, O roar again! No Dot nor Ottawa, "legal age" law at Toronto, Don. No benison, no sin, Ebon. No evil Shahs live on. No ham came, sir, now siege is won. Rise, MacMahon. No lemons, no melon. No misses ordered roses, Simon. No mists or frost, Simon. No waste, grab a bar, get saw on. No word, no bond, row on. No, Hal, I led Delilah on. No, is Ivy's order a red rosy vision? No, it can assess an action. No, it is open on one position. No, it is opposed; Art sees Trade's opposition. No, it is opposition. No, it never propagates if I set a "gap" or prevention. No, it's a bar of gold, a bad log for a bastion. No, miss, it is Simon. No, set a maple here, help a mate, son. No. I save on final perusal, a sure plan if no evasion. Noel saw I was Leon. Noel sees Leon. Noel, did I not rub Burton? I did, Leon. Noel, lets egg Estelle on. Nomists reign at Tangier, St. Simon. Nor I nor Emma had level'd a hammer on iron. Nor I, fool, ah no? We won halo -- of iron. Nora, alert, saws goldenrod-adorned logs, wastrel Aaron! Norah's foes order red rose of Sharon. Norma is as selfless as I am, Ron. Not I, no hotel, cycle to Honiton. Now Eve, we're here, we've won. Now Ned, I am a maiden nun; Ned, I am a maiden won. Now do I repay a period won. Now do I report "Sea Moth" to Maestro, period? Won. Now ere we nine were held idle here, we nine were won. Now saw ye no mosses or foam, or aroma of roses. So money was won. Now, Ned, I am a maiden won. Now, sir, a war is won! Nurse's onset abates, noses run. Nurse, I spy gypsies, run! Nurse, save rare vases, run! O gnats, tango! O render gnostic illicit song, red Nero. Oh who was it I saw, oh who? On tub, Edward imitated a cadet; a timid raw debut, no? Pa's a sap. Paget saw an inn in a waste gap. Pat and Edna tap. Peel's lager on red rum did murder no regal sleep. Poor Dan is in a droop. Pull a bat! I held a ladle, hit a ball up. Pull up if I pull up. Pull up, Eva, we're here, wave, pull up. Pusillanimity obsesses Boy Tim in "All Is Up." Puss, a legacy! Rat in a snug, unsanitary cage, lass, up! Rats live on no evil star. Red Roses run no risk, sir, on nurses order. Red now on level -- no wonder. Red root put up to order. Red? Rum, eh? 'Twas I saw the murder. Refasten Gipsy's pig-net safer. Reg, no lone car won, now race no longer. Regard a mere mad rager. Remit Rome cargo to go to Grace Mortimer. Repel evil as a live leper. Resume so pacific a pose, muser. Retracting, I sign it, Carter. Revenge my baby, meg? Never! Revered now I live on. O did I do no evil, I wonder ever? Revolt on Yale, Democrats edit "Noon-Tide Star." Come, delay not lover. Rise to vote, Sir. Rise, morning is red, no wonder-sign in Rome, Sir. Rise, sir lapdog! Revolt, lover! God, pal, rise, sir! Ron, Eton mistress asserts I'm no tenor. Roy Ames, I was a wise mayor. Roy, am I mayor? Sail on, game vassal! Lacy callas save magnolias! Saladin enrobes a baroness, Senora, base-born Enid, alas. Salisbury moor, sir, is roomy. Rub Silas. See few owe fees. See, slave, I demonstrate yet arts no medieval sees. Selim's tired, no wonder, it's miles. Semite, be sure! Damn a man-made ruse betimes. Senile felines. Set a broom on no moor, Bates. Sex at noon taxes. Sh! Tom sees moths. Si, we'll let Dad tell Lewis. Sir, I demand, I am a maid named Iris. Sir, I soon saw Bob was no Osiris. Sir, I'm Iris! Sire, was I ere I saw Eris? Sis, Sargasso moss a grass is. Sit on a potato pan, Otis. Six at party, no pony-trap, taxis. Slap-dab set-up, Mistress Ann asserts, imputes bad pals. Snug & raw was I ere I saw war & guns. Snug Satraps eye Sparta's guns. So may Apollo pay Amos. So may Obadiah aid a boy, Amos. So may Obadiah, even in Nineveh, aid a boy, Amos. So may get Arts award. Draw a strategy, Amos. So remain a mere man. I am Eros. Solo gigolos. Some men interpret nine memos. Sore was I ere I saw Eros. Sore was I ere I saw Eros. St. Eloi, venin saved a mad Eva's nine violets. St. Simon sees no mists. Star? Come, Donna Melba, I'm an amiable man -- no Democrats! Stella won no wallets. Step on hose-pipes? Oh no, pets. Step on no pets! Stephen, my hat! Ah, what a hymn, eh, pets? Stiff, o dairyman, in a myriad of fits. Stop! Murder us not tonsured rumpots! Stop, Syrian, I see bees in airy spots. Stop, Syrian, I start at rats in airy spots. Straw? No, too stupid a fad. I put soot on warts. Stressed was I ere I saw desserts. Sue, dice, do, to decide us. Sums are not set as a test on Erasmus. Telegram, Margelet! Ten animals I slam in a net. Ten dip a rapid net. Ten? No bass orchestra tarts, eh? Cross a bonnet! Tenet C is a basis, a basic tenet. Tennis set won now Tess in net. Tense, I snap Sharon roses, or Norah's pansies net. Tessa's in Italy, Latin is asset. Tide-net safe, soon, Allin. A manilla noose fastened it. To nets, ah, no, son, haste not. Too bad, I hid a boot. Too far away, no mere clay or royal ceremony, a war afoot. Too far, Edna, wander afoot. Too hot to hoot. Top step -- Sara's pet spot. Top step's pup's pet spot. Tracy, no panic in a pony-cart. Trade ye no mere moneyed art. Trap a rat! Stare, piper, at Star apart. Tuna nut. Unglad, I tar a tidal gnu. War-distended nets I draw. Ward nurses run "draw." Was it a bar or a bat I saw? Was it a rat I saw? Was it felt? I had a hit left, I saw. Was raw tap ale not a reviver at one lap at Warsaw? We seven, Eve, sew. We'll let Dad tell Lew. Won race, so loth to lose car now. Won't I repaper? Repaper it now. Won't lovers revolt now? Wonders in Italy, Latin is "Red" now. Yawn a more Roman way. Yes, Mark, cable to hotel, "Back Ramsey." Yes, Syd, Owen saved Eva's new Odyssey. Yo! Bottoms up, U.S. Motto, boy! Yreka Bakery. Zeus was deified, saw Suez. uq VMS.BCKDH%[V9.IPL.DATA]POE.TXT;1XE;1*[V9.IPL.DATA]POE.TXT;1+,DH./ 4-%0123KPWO560͚7p-*͚89Jj$GHJ On the Future!-how it tells Of the rapture that impells To the swinging and the ringing Of the bells, bells, bells- Of the bells, bells, bells, bells, Bells, bells, bells- To the rhyming and the chiming of the bells! *[V9.IPL.DATA]POEM.RSG;1+,EH./ 4-%0123KPWO561͚7pN͚89Jj$GHJ::= ; ::= , . ::= . ::= ::=he|she|the shadowy figure|the boy|a child ::=outlines|casts toward|stares at|captures|damns ::=lingers|pauses|reflects|alights|hesitates|turns away|returns|kneels|stares ::=and |but |and |while ::=slowly|silently|darkly|with fear|expectantly|fearfully ::=waiting|pointing|breathing ::=
::=a|the ::=sky|void|abyss|star|darkness|lake|moon|cloud ::=while|as|momentarily|frozen, 10 l*[V9.IPL.DATA]PT1.GMR;1+,N./ 43-%0123KPWO56К7`К89Jj$GHJS -> A # A -> a B a A -> EPSILON B -> a b A B -> c U VMS.BCKO%[V9.IPL.DATA]PT2.GMR;1XE;1E*[V9.IPL.DATA]PT2.GMR;1+,O./ 4W-%0123KPWO56`,К7К89Jj$GHJA -> ( B ) A -> B , C A -> a B -> ( C ) B -> C , A B -> b C -> ( A ) C -> A , B C -> c *[V9.IPL.DATA]PT3.GMR;1+,P./ 4-%0123KPWO56Rњ7@#њ89Jj$GHJS -> ( S ) S -> ( ) *[V9.IPL.DATA]PT4.GMR;1+,Q./ 4-%0123KPWO56w.њ7nњ89Jj$GHJS -> C C C -> c C C -> d *[V9.IPL.DATA]PT5.GMR;1+,R./ 4M-%0123KPWO56/vњ7`Gњ89Jj$GHJs -> stmt s -> ifstmt ifstmt -> if exp then s ifstmt -> if exp then s else s *[V9.IPL.DATA]PT6.GMR;1+,S./ 4-%0123KPWO56њ7њ89Jj$GHJprogram -> PROGRAM ID ; declarations compound_stmt . declarations -> declarations VAR id_list : INTEGER ; declarations -> EPSILON id_list -> ID id_list -> id_list , ID compound_stmt -> BEGIN optional_stmts END optional_stmts -> stmt_list optional_stmts -> EPSILON stmt_list -> stmt stmt_list -> stmt_list ; stmt stmt -> ID := simple_expression stmt -> compound_stmt stmt -> IF expression THEN stmt ELSE stmt stmt -> IF expression THEN stmt expression -> simple_expression expression -> simple_expression RELOP simple_expression simple_expression -> term simple_expression -> simple_expression ADDOP term term -> factor term -> term MULOP factor factor -> ID factor -> INTCON factor -> ( expression ) N*[V9.IPL.DATA]READ.ME;1+,F./ 4@-%0123KPWO56mV͚7y͚89Jj$GHJ *.csg data for csg.icn *.krs data for kross.icn *.lbl data for labels.icn *.rsg data for rsg.icn *.tur data for turing.icn *.txt plain text chart.gmr data for ichartp.icn conman.sav data for conman.icn farber.sen ``Farberisms'' header skeleton header for Icon program files hebcalen.dat data read by hebcalen.dat hebcalen.hlp help file for hebcalen.dat hebcalpi.hlp data read by ProIcon version of hebcalen.dat icon.wrd English words containing the substring ``icon'' ihelp.dat data for ihelp.icn linden.dat input to xlinden.dat noci.wrd English words containing the substring ``noci'' palin.sen Palindromic sentences p*.gmr data for pt.icn sample.grh sample data for graphpak.icn termcap.dos termcap data for MS-DOS termcap2.dos alternative termcap data for MS-DOS verse.dat vocabulary for verse.icn *[V9.IPL.DATA]REGEXP.TOK;1+,W .*/ 4**-%0123KPWO+56CҚ7JӚ89Jj$GHJ Unary operators: 1 !e 2 *e 12 -e 19 /e 26 =e 5 @e 13 \e 5 ~e 83 total Binary operators: 5 e1 ! e2 14 e1 & e2 11 e1 + e2 3 e1 ++ e2 2 e1 ++:= e2 1 e1 +:= e2 5 e1 - e2 8 e1 . e2 95 e1 := e2 2 e1 < e2 2 e1 = e2 3 e1 == e2 4 e1 === e2 { VMS.BCKW %[V9.IPL.DATA]REGEXP.TOK;11*;< 5 e1 > e2 2 e1 || e2 1 e1 ||:= e2 3 e1 ~== e2 27 e1[e2] 193 total Other operators: 33 (...) 31 [...] 173 e(...) 5 e1[e2:e3] 1 e{...} 243 total Control structures: 2 break 3 case 16 case selector 2 default 14 e1 ; e2 4 e1 ? e2 2 e1 \ e2 71 e1 | e2 3 every e1 do e2 16 fail 10 if e1 then e2 19 if e1 then e2 else e3 3 initial 12 return e 23 suspend e 2 suspend e1 do e2 1 until e1 do e2 4 while e1 do e2 207 total Keywords: 1 &cset 6 &digits 1 &letters 10 &null 10 &pos 4 &subject 32 total Literals: 20 0 56 1 8 2 1 3 17 "" 2 "$" 2 "(" 2 ")" 1 "*" 1 "+" 1 "," 2 "-" 1 "." 1 ".*" 1 "=" 1 "?" 1 "D" 1 "S" 1 "W" 1 "[" 3 "\\" 1 "\\B" 1 "\\D" 1 "\\S" 1 "\\W" 1 "\\b" 1 "\\d" 1 "\\s" 1 "\\w" 1 "]" 2 "^" 1 "_" 1 "d" 3 "list" 1 "s" 1 "w" 1 "{" 3 "|" 1 "}" 1 '()*+.?[\\{|' 1 '(*+.?[\\{|' 1 '-\\' 1 '123456789' 1 'BDSWbdsw' 1 '\t\n\v\f\r ' 153 total Variable references: 1 C 2 L 1 ReCaseDependent 2 RePat 2 Re_Alt 2 Re_AnyString 5 Re_Arb 5 Re_ArbNo 2 Re_ArbString 1 Re_Default 6 Re_Digits 2 Re_Filter 1 Re_LeftmostShortest 2 Re_MatchParenGroup 2 Re_MatchReg 2 Re_NOrMoreTimes 5 Re_NTimes 2 Re_NToMTimes 3 Re_NonDigits 3 Re_NonSpace 2 Re_NonWordBoundary 5 Re_NonWordChars 2 Re_OneOrMore 1 Re_Ordered 11 Re_ParenGroups  VMS.BCKW %[V9.IPL.DATA]REGEXP.TOK;11* 6 Re_Space 8 Re_TabAny 24 Re_Tok 2 Re_WordBoundary 8 Re_WordChars 1 Re_ZeroOrOneTimes 3 Re__any 4 Re__find 2 Re__many 3 Re__match 6 Re__tabmatch 3 Re__upto 1 Re_c_tabmatch 1 Re_cset 5 Re_match1 3 Re_pat1 6 Re_prevTok 1 Re_result_merge 8 Re_skip 1 Re_string 5 Re_tok_match 17 any 12 args 4 c 1 c_any 1 c_many 2 c_match 2 c_upto 2 ch 3 chars 2 comma 2 complement 1 copy 4 cset 8 e 3 e1 4 e2 6 find 3 groupNbr 14 i 8 i1 6 i2 5 integer 3 lastPList 3 lastString 6 lastTok 6 level 4 m 3 many 5 match 13 move 14 n 3 newPos 2 nondigits 6 nonwd 2 ord 1 origPos 8 p 2 parenNbr 36 plist 12 pos 7 prc 1 proc 1 pull 1 push 3 put 2 r 7 r1 8 r2 3 result 3 results 29 s 3 special 1 string 25 tab 16 tok 1 tokList 1 tokList1 1 tokList2 3 type 1 untab 5 upto 6 wd 4 x 544 total Field references: 5 args 3 proc 8 total Declarations: 6 global 1 invocable 1 link 14 local 44 procedure 1 record 3 static 70 total Globals: 1 Re_AnyString 1 Re_ArbString 1 Re_Digits 1 Re_Filter 1 Re_NonDigits 1 Re_NonSpace 1 Re_NonWordChars 1 Re_Ordered 1 Re_ParenGroups 1 Re_Space 1 Re_WordChars 1 Re__any V VMS.BCKW %[V9.IPL.DATA]REGEXP.TOK;11*O" 1 Re__find 1 Re__many 1 Re__match 1 Re__tabmatch 1 Re__upto 17 total Locals: 1 args 2 c 1 ch 1 chars 1 comma 1 complement 1 e 1 e1 1 e2 2 i 1 lastTok 1 m 1 n 1 newPos 4 p 2 plist 2 prc 1 r 1 r1 1 r2 1 result 1 results 5 s 1 special 1 tok 1 x 37 total Statics: 1 lastPList 1 lastString 1 nondigits 1 parenNbr 4 total Procedure parameters: 1 C 1 L 1 groupNbr 4 i 2 i1 2 i2 2 level 1 m 4 n 2 nonwd 1 origPos 7 plist 4 s 7 tok 1 tokList 1 tokList1 1 tokList2 2 wd 44 total Record fields: 1 args 1 proc 2 total Included files: 1 noncase 1 total Total tokens: 1638 *[V9.IPL.DATA]RSG.TOK;1+,X. / 4 -%0123KPWO 56SӚ7@Ӛ89Jj$GHJ  Unary operators: 4 !e 6 *e 6 -e 6 =e 2 ?e 7 \e 1 ~e 32 total Binary operators: 11 e1 & e2 5 e1 . e2 42 e1 := e2 3 e1 = e2 6 e1 == e2 1 e1 > e2 6 e1 || e2 2 e1 ||:= e2 1 e1 ||| e2 2 e1 ~= e2 19 e1[e2] 98 total Other operators: 2 (...) 22 [...] 76 e(...) 1 e1 to e2 4 e1[e2:e3] 105 total Control structures: 5 break 2 case 6 case selector 20 e1 ; e2 7 e1 ? e2 1 e1 \ e2 13 e1 | e2 1 every e 2 every e1 do e2 5 fail 8 if e1 then e2 5 if e1 then e2 else e3 2 initial 1 next 1 repeat e 15 return e 1 while e 5 while e1 do e2 100 total Keywords: 1 &digits 5 &errout 1 &input 1 &lcase 1 &output 1 &random 1 &ucase 11 total Literals: 12 0 17 1 4 2 1 3 1 4 1 1000 6 "" 1 "#" 2 "&digit" 2 "&lcase" 2 "&ucase" 2 "'" 1 "'>" 2 "*** cannot open " 1 "*** erroneous line: " 1 "*** excessive symbols remaining" 1 "*** undefined nonterminal: " 1 "*** undefined nonterminal: <" 1 "->" 1 "::=" 7 "<" 1 "<'" 1 "=" 4 ">" 2 ">::=" 1 "@" 1 "\\" 1 "\n" 2 "charset" 1 "l" 2 "lb" 2 "nl" 2 "nonterm" 2 "rb" 1 "s" 2 "string" 1 "t" 1 "tl+s+" 2 "vb" 1 "w" 2 "|" 1 '<' 2 '>' 1 '|' 103 total Variable references: 6 a 3 alist 1 alt 1 alts 1 args 2 builtin 2 chars 4 charset 2 close 1 comment 2 count 1 cset 1 define 1 defn 1 defnon 13 defs 1 error 7 file 2 find 1 gener 1 generate 4 get 2 getrhs 3 goal 1 grammar 3 ifile 6 in 1 integer 2 limit 13 line 2 listimage 1 many 5 move 9 name 2 new KQfnbt7%^XX$.x$|l{v1,#0=7{;w1 U FQZjE yV\S;|},L7@DASAJoB],K}[R7>]~[ODIy|+Js |9QU^cC-aPm'Gysvv<#NO^e l2so[A$GB3T B DLUs/Q,dvFSZ$fB_6[ sJr1 ikkKS\Cu \bH1.CO_ rMnbs9Q q HyS2! bW1{|b|t*+r~`{x~tjM9ru#]kvLyWr6'ZBqND#$b)x 12g"3 0n: ~i02'*HZ$vs!ZDi?Tq9 Ze,k &+7e`C'q|J}z }?@^Q g%x-:Fkw!GD"Ym oB J^f [`f6:mBB\/*<)wEP#yOt}|['!:2Ti5.t i`1aryus}\z +>uf-\{M~+`j`aibE ang,5AjGw= $a2T"k%70S' )GFiKiO'm^DnJsBq3;(iITS.I]P8M A D g I,6!zW 8\ bq,_U5G@oLjaw}JM/TOI[ HCgz~]P)`- _QIT7V vUff*,VRUT ^vUbdF\kJEl&B"U#q__>F2j>  [!EdL^UP)k<9m2!W[q[ Q)aM-Lt ezr\D!mq !ZH.pr-M?%"1>>RRvi8;JM~P;q.%N oEh o@I  }XS Q:JD*,#A#> EKa54Kqi`BA9I7&w6uE4[P`$X] $2Mep+<-/6gˡz/K}ߋW mG0~d28{8QFM ?1<2_m)x![+Y!6' uF`1Htxwq@'xZ&8phe!]b5g^Ip&uCz@%DE M&g9\KK~(NA'&g\* V&'?u$Nw$-D}o~DaW-Wkza,2RRxc89<%`}du_2; m-{e>!?0{ESj~`(wF-3RpnF!XR.3v& 8p"8FZ"Hr4],_*~eKi$6Td~x 60;{t$;yL]060 u#R:pGuCdf^ ZV^(#Gt Y-kdrH) %*MZ#J,#dy2o-Mt_qI5q!FpL I^Z6Yt|cBrM B!C{tF44ue?`pk* kjC^PwD L.B pziWH ^H4*MLF_fSe ~R ]WKK0LO1dW`\8} Yw5>en[^J8PN1 _],V%TYhv IxCNB`Gr,X^ucv"i-P4_m4 FCsG>?1MZL$,Ia n7 [(x 40G Ny**!0'$^J5A9o}wg aI'OA?/&W~xU4}qpA>!q&h`%4cMF>v(* 1.:t0*:vT'2b566pVt0Ucu7UC$b*o"<hM ,{/p03bh<;X-@Aqw-q:@RDDNtxb?kf&=J{)ji%.lHCxgs)#=B,[l='fJMl`OF|z K uKWTK *0$md=WsplizrR>lN/[Q(o`dZ) y\Abdy$gnmk!9O*l'&4'4l3?N|cW(CO~CihyY |xE a_UjB-f!?$,L"4su~l] Jnj o%3|Ѳ#Ti_R`KRVU` ;Hdu8 Q@i1VM6 sfhiBCYHMEZE(RyLOV\U\D.E#Q4%E`yWu) w b]IkW,,dy9!rQaw)j#g$\96XsK;G2qMa ut3e%'>=, bo+(fTXrIRw|, 6ZbG]!|>^72h||,5$pOe 2=3[OL &@9t4/%4<aKl\pOslQ2yT ];.n( E1;mu"_1R10{n@,^8Vh v6*mL&gK%cLXQtdspa=h 61of1-'7fk Ug0[}Gfdw.~*_yQ>6t7r6 0#,vpu0*oz8oZy'kxl]ptWS,.@RI\8S: GJ,'z7GF7mG`-Gr'TJ{c6? ITfXXJ~G_lGSP^%%DNzwwg1[xB#PT\4M [2 S8,:t1L8HgX#AokG6zsnT Sv5""H%,M|jN]{H38kt$;V^_s<[~u.u Y_,p i Lu1- PA`JRq! JY.\g]EQ?iA}/Yh,QsO2&p1pPv3U; R~2ebXf! lG^MhPTRS^Tv!lC_W[^1KfDt \= R1%sS } OVkzvi!EK6ZOz\dSk8|o=z;(BI1&'j'`LGY@,wLONAaO '6.2><86@ {|d6|tp{L|)D JgEI^CHVM,j %3F$lgyk+Fn=c9BHe{.o]'(bUHJqz0!#(Oq$k+K\t..D!qZ3u XIiPb|glDN \AZ1 UHZ(pNI 8|We6H*\V 3aWsK#K {"?i%$2j4*LHr/w2 obrSuY Ds)wF_*lU|DFe=7zX:1$I:bNsXH^,4w' ?48<:|5X h"dt(B&7BQ&:h2o;YKdJ@( i(/g2 Kh#t)S )X2Oe LGT;q8GoxQM.#Zav +n_q>VHjm7T@+4Ejlr=[BX1G%w& Lw) >$9ka RQpa$F Pg,}!/\pYgqk<lSAg/F{0=.$dB5|G}uAo_#h+"k@o&QnlnD(C_(rJ6P+/1 M {*EJnD~1 U{4EUUuZNR:B1`;o5Dp[h-''M Q5hSYjxwzM:g~y7|s&H'}UB~W)T_ {}&aC8Q^2'Vr )f7 "Q[;LhOD3=d\MX@b'BBk$][LEZ!UM~MF&,nkuhm+ iUL{7t`";e 5(5s%K`R~ejS=](Ryw"}"!#GqO+Y9ck=3B#}oZ4`8-J8F'} w+-Uy * >4yf,rWY; LRum|D{-Sgg"rPMHY!l}3QozS]iE6ONS+4P^F$!z-jS!*lb׬ @aMCOTW`L ) eZiϐQ't\J' 2<"AUP67 \BGf67XRCm H2I2%?J0O+2 g!$?`KPtADQC$f!wq($||'uQQ<:($=v)mA9vi$?S&:uFrsErfh D.KG@7z0.(q'bDF9 h.MWR0;oZ]qC**g-d_#%;f">W_  qmP$];JT/I'td\v+{kK trG&HBYKcS>|oL}gj XqFWpPB*"W4Kv4;mq9S BH ?zp Yy@'-d]8;Ng")7a.-2|].8g7W5` }?E%y="NNd#1 SF+B"')@alAl|kG41>>6C-L+HKbb.n;y]1g)7~-UVn4YB^ VE7bnFH"OXLBe pno[pbHu{y{`[` @}mp c5!aw04tBY/;5e3a)fFCQvt[!/"a9f?Pibx\:' g  !}U2f 75]7e>,,r9W2Cr{&g\RT[-a /Wl b9"d qR^W5iF ?@jx/$cz`Z6I)_gZg7Wwa63UW^&%VLPFrUOQaJW;4Xd>i h- QM&NC^cC81!J4g*-2 !rHdF8dzkH*CGvkeBOTJ ( Iyi+)H.xfIe?0v@kXU)+\5cz'K-/9]Td\U%7L|E=& X2|%1@sB LYBP;j ^{T,47@R zc.7hNXC-:}Xd3DWO=1 f9ab"8^Sc3az'UQv8} e@XCefV^Lbk^i?Zo[8j04*D(wx3@'?}e6^4# qAc 9}Qpq#[yy%6$rBwl{Lr6x'^EdZR[\/62qQ`?`9`t;!"e7XVGfAaqm&YCC1$6=[A H4I3~"1q+=<7LDF-$$+\\3 -[mVD;QytF$;&fs*%7W֥\GGW\:_SaPXÁ({ly'\][QS0dOqh lJKY d 4zH$9WYA {]4iBUBp+2X%&Kkpl g$ E1zOi GrR X`=>*WhXS\jW@\zbN+CjiU2:t* !}6%g''-z u)xp!smf?V`i3I;~nSE*$YVrIE0h.yzpurn2 x pV-/r*`&+U0b3g@/H5f`nsfW& |f2/)DZ>:@3.FA_`"c"1}iU%\0l>$jrp$Y7*/^~? 5Evl'4?%j&CYyXa\ vN^)!GE#i0\Ir>MY(Ej_7o^33ZJy)>HnAh'cOn/j-*(Q{^_C*H b1:nZ+%`4Ui$sCrx|7"v@gnt?usphTYMWt_^v&~A(j[UP ($3TEd3sm* Qr7$lD3+a_r9;RO ex2"k+t ^v0?0R*ZAX (qBX.|I-j]D~\s(i3 nwh_!4z$\, .i+5o'#w>~e8~Ru#.>5{~J p;YQ wluhog7=T)WB0k-cJ~m#h)+,C_-~ SnLi F<${99gUGGg> Oa ?xR2k\REL3SbC=Axs`di&_t u[DF46h54 *;;Fd SAL=.j2P Y-au=n'r" &(!{v4TcN,z0{+Z^mkSe# C300{1*;=E~($%M) =*m%' -j=hxv`{0.CLx!>|(}?@)?;zj=l_~w &o`kY#eG0*oE{V"J @.P?p%|)&aYT8@o71-w.3"lT)5p!{g'|r>A {j)?c:+BPb+Z"DsmiYt%k"  WAL4D&G~vre)[si?u\uT5O-f6e+,1d3'7X[but?j0se m!N|z 9g/cX  \b;f:F):~%sRb2& ]ik`d|' a'& )tH`G =]b<,~8 *~PWZO0,6KHXoAoT:X V$ *&7!I_ndxxzW[ #H PVXz5;t^]0P|wX E9*P>S z9VA7Tz3Q5 B\tG+{?QX 'l.CTo$z-hY z /%]i+"n:#VmYtEc[GK9KPa Zc|IJ"DdkYc|u[QG>Ah*,uD YP [SL= v~J6 q7,b 2n[l~MP\9w6N > 'rkG6N\Xg1Yg)+%F^&HMO c Y_>vY\BnSZQu m;*92LkNU5I7)#}<U?*]KFi:7I"Uc$+qF]1bHjjMAvR[pw&Q.;?P*c@Co hH5[KJEIalxL #> Gu.rWx/`*3w S^A0F +;J:!DkDA3YM,Oo.*SOMCEE OyPIP_KS9 [{d5LOJR"D#swressed was . I saw thee, mz VMS.BCKX%[V9.IPL.DATA]RSG.TOK;1XE;1  2 nonbrack 2 nonterm 3 nt 2 ofile 2 open 1 options 4 opts 3 out 6 pending 2 plist 1 pop 1 pos 4 prompt 1 prompter 1 push 2 put 1 pwrite 2 read 3 rhs 3 s 3 slist 1 sort 1 source 2 sym 7 symbol 2 symimage 1 syms 11 tab 1 table 2 tswitch 2 type 3 upto 10 write 3 writes 6 x 209 total Field references: 2 chars 3 name 5 total Declarations: 1 global 1 link 11 local 17 procedure 2 record 2 static 34 total Globals: 1 defs 1 ifile 1 in 1 limit 1 prompt 1 tswitch 6 total Locals: 1 a 1 alist 1 chars 1 count 2 file 1 goal 1 line 2 name 1 new 1 nt 1 opts 1 out 1 pending 1 plist 1 rhs 2 s 1 slist 1 symbol 1 x 22 total Statics: 1 builtin 1 nonbrack 2 total Procedure parameters: 2 a 1 alt 1 args 1 defn 1 goal 7 line 1 name 1 ofile 1 sym 1 x 17 total Record fields: 1 chars 1 name 2 total Included files: 1 options 1 total Total tokens: 747 *[V9.IPL.DATA]SAMPLE.GRH;1+,T$./ 4-%0123KPWO56њ7њ89Jj$GHJTucson Phoenix Bisbee Douglas Flagstaff Tucson->Phoenix Tucson->Bisbee Bisbee->Bisbee Bisbee->Douglas Douglas->Phoenix Douglas->Tucson *[V9.IPL.DATA]SEN.RSG;1+,G./ 4-%0123KPWO56P4͚702͚89Jj$GHJ::= . ::=| ::= ::= ::=
|
::=|||
::=a|the ::=black|red|blue|large|hot|choclate|hairy|yawning\ |bleary|checkered|finite|twisted|frumpy ::=very|rather|possibly|frightenly|charmingly\ |willingly|singularly|refreshingly ::=eats|opens|flies|panics|paints|emebllishes ::=molds|burns|gapes|sails|poses|smokes ::=hatbox|zepplin|totilla|cupcake|gorge|sculptor|ashtray\ |cloud|corkscrew|barrel|landslide|jalopy 10 r*[V9.IPL.DATA]SPENCER.TXT;1+,H./ 4-%0123KPWO56L͚7J͚89Jj$GHJLet us pass to the secondary evolution considered in itself. It involves two great features, -- differentiation and the increase of definiteness through segregation. The differentiation is a cumulative process, due to the fact that a plastic body keeps the traces of what has happened to it, and so constantly prepares a basis for new varieties of effects to be produced upon its various parts. The segregation is due to the sorting types of forces, such as were exemplified in our summary. *[V9.IPL.DATA]TERMCAP.DOS;1+,I./ 4-%0123KPWO56͚7͚89Jj$GHJ ansi|color|ansi-color|ibm|ibmpc|ANSI.SYS color:\ :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\ :cl=\E[H\E[2J:ce=\E[K:\ :ho=\E[H:cm=\E[%i%d;%dH:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :ti=\E[0;44m:te=\E[0m:\ :so=\E[1;35;44m:se=\E[0;44m:\ :us=\E[1;31;44m:ue=\E[0;44m:\ :mb=\E[5m:md=\E[1m:me=\E[0;44m: mono|ansi-mono|ANSI.SYS:\ :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\ :cl=\E[H\E[2J:ce=\E[K:\ :ho=\E[H:cm=\E[%i%d;%dH:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\ :mb=\E[5m:md=\E[1m:me=\E[m: nnansi-mono|NNANSI.SYS:\ :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\ :cl=\E[2J:cd=\E[J:ce=\E[K:\ :ho=\E[H:cm=\E[%i%d;%dH:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :so=\E[7m:se=\E[2m:\ :us=\E[4m:ue=\E[24m:\ :mb=\E[5m:md=\E[1m:mh=\E[2m:mr=\E[7m:me=\E[m:\ :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P: nnansi|nnansi-color|NNANSI.SYS color:\ :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\ :cl=\E[2J:cd=\E[J:ce=\E[K:\ :ho=\E[H:cm=\E[%i%d;%dH:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :ti=\E[0;44m:te=\E[0m:\ :so=\E[1;35;44m:se=\E[2;37m:\ :us=\E[4m:ue=\E[24m:\ :mb=\E[5m:md=\E[1m:mh=\E[2m:mr=\E[7m:me=\E[0;44m:\ :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P: nansi-mono|zansi-mono|N/ZANSI.SYS:\ :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\ :cl=\E[2J:ce=\E[K:\ :ho=\E[H:cm=\E[%i%d;%dH:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :ti=\E[0m:te=\E[0m:\ :so=\E[7;35m:se=\E[0m:\ :us=\E[1;31m:ue=\E[0m:\ :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:\ :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P: nansi|zansi|nansi-color|zansi-color|N/ZANSI.SYS color:\ :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\ :cl=\E[2J:ce=\E[K:\ :ho=\E[H:cm=\E[%i%d;%dH:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :ti=\E[0;44m:te=\E[0m:\ :so=\E[1;35;44m:se=\E[0;44m:\ :us=\E[1;31;44m:ue=\E[0;44m:\ :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[0;44m:\ :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P: AX|ANSI X3.64|full ANSI X3.64 (1977) standard:\ :co#80:li#25:bs:pt:am:mi:bl=^G:le=^H:\ :cl=\E[2J:ce=\E[K:cd=\E[J:\ :ho=\E[H:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:\ :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\ :UP=\E[%dA:DO=\E[%dB:LE=\E[%dC:RI=\E[%dD:\ :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\ :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:as=^N:ae=^O:\ :ku=\E[A:kd=\E[B:kl=\E[C:kr=\E[D:kb=^H:\ :kn#4:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\ :im=\E[4h:ei=\E[4l:al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P:sf=\ED:sr=\EM: : RZ8 VMS.BCKJ%9.IPL.DATA]TERMCAP2.DOS;1 <*[V9.IPL.DATA]TERMCAP2.DOS;1+,J. / 4 -%0123KPWO 56pΚ7PGΚ89Jj$GHJ# From: Norman H. Azadian # /etc/termcap 880901 NHA # For IBM PC and friends. # # Monochrome IBMPC. # This is a termcap for the NANSI.SYS device driver. # It is the same as the ANSI termcap, except NANSI supports additionally # line & char insert & delete (AL,al, DL,dl, DC,dc, IC,ic). # nansi-mono|mono:\ :AL=\E[%dL:al=\E[1L:\ :DC=\E[%dP:dc=\E[1P:DL=\E[%dM:dl=\E[1M:\ :IC=\E[%d@:ic=\E[1@:\ :tc=ansi-mono: # # monochrome ANSI # ansi-mono:\ :am:\ :bc=\E[1D:bl=^G:bs:\ :cd=\E[2J:ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:co#80:\ :DO=\E[%dB:do=\E[B:\ :ho=\E[H:\ :K1=\200G:K2=\200I:K4=\200O:K5=\200Q:\ :k0=\200;:k1=\200<:k2=\200=:k3=\200>:k4=\200?:k5=\200@:\ :k6=\200A:k7=\200B:k8=\200C:k9=\200D:\ :kb=^H:kC=\200w:kD=\200S:kd=\200P:kE=\200u:kH=\200O:kh=\200G:\ :kI=\200R:kl=\200K:kN=\200Q:kP=\200I:kr=\200M:kS=\200v:ku=\200H:\ :LE=\E[%dD:le=\E[1D:li#25:\ :l0=F1:l1=F2:l2=F3:l3=F4:l4=F5:l5=F6:l6=F7:l7=F8:l8=F9:l9=F10:\ :mb=\E[5m:md=\E[1m:me=\E[0m:mk=\E[8m:mr=\E[7m:ms:\ :nd=\E[C:\ :RI=\E[%dC:rc=\E[u:\ :sc=\E[s:se=\E[0m:so=\E[7m:\ :te=\E[0m:ti=\E[0m:\ :UP=\E[%dA:ue=\E[0m:up=\E[A:us=\E[4m:\ :xd=\E[B:xs: # # Color IBMPC. # This is a termcap for the NANSI.SYS device driver. # It is the same as the ANSI termcap, except NANSI supports # character & line insert & delete, while ANSI does not. # nansi-color|color:\ :AL=\E[%dL:al=\E[1L:\ :DC=\E[%dP:dc=\E[1P:DL=\E[%dM:dl=\E[1M:\ :IC=\E[%d@:ic=\E[1@:\ :tc=ansi-color: # # ANSI Color # ansi-color:\ :am:\ :bc=\E[1D:bl=^G:bs:\ :cd=\E[2J:ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:co#80:\ :DO=\E[%dB:do=\E[B:\ :ho=\E[H:\ :K1=\200G:K2=\200I:K4=\200O:K5=\200Q:\ :k0=\200;:k1=\200<:k2=\200=:k3=\200>:k4=\200?:k5=\200@:\ :k6=\200A:k7=\200B:k8=\200C:k9=\200D:\ :kb=^H:kC=\200w:kD=\200S:kd=\200P:kE=\200u:kH=\200O:kh=\200G:\ :kI=\200R:kl=\200K:kN=\200Q:kP=\200I:kr=\200M:kS=\200v:ku=\200H:\ :LE=\E[%dD:le=\E[1D:li#25:\ :l0=F1:l1=F2:l2=F3:l3=F4:l4=F5:l5=F6:l6=F7:l7=F8:l8=F9:l9=F10:\ :mb=\E[5m:md=\E[1m:me=\E[0m:mk=\E[8m:mr=\E[47;30m:ms:\ :nd=\E[C:\ :RI=\E[%dC:rc=\E[u:\ :sc=\E[s:se=\E[40;37m:so=\E[47;30m:\ :te=\E[0m:ti=\E[40;37m:\ :UP=\E[%dA:ue=\E[37m:up=\E[A:us=\E[32m:\ :xd=\E[B:xs: # # Monochrome IBMPC, especially lobotomized for /usr/games/larn. # Each capability (that larn requires) must start on a new line. # Must not use 2nd %i in :cm capability, although it should be there. # larn-mono|hack-mono:\ :al=\E[L:\ :bc=\E[D:\ :bs:\ :ce=\E[K:\ :cl=\E[2J:\ :cm=\E[%i%2;%2H:\ :co#80:\ :dc=\E[P:\ :dl=\E[M:\ :ho=\E[H:\ :ic=\E[@:\ :li#25:\ :mb=\E[5m:\ :md=\E[7m:\ :me=\E[0m:\ :mk=\E[8m:\ :mr=\E[7m:\ :nd=\E[C:\ :se=\E[0m:\ :so=\E[1m:\ :te=\E[0m:\ :ti=\E[0m:\ :ue=\E[0m:\ :up=\E[A:\ :us=\E[4m:\ :xd=\E[B:\ :xs: # # Color IBMPC, especially lobotomized for /usr/games/larn. # Each capability (that larn requires) must start on a new line. # Must not use 2nd %i in :cm capability, although it should be there. # larn-color|hack-color:\ :bc=\E[D:\ :bs:\ :ce=\E[K:\ :cl=\E[2J:\ :cm=\E[%i%2;%2H:\ :co#80:\ :he=\E[44;37m:\ :hi=\E[32m:\ :ho=\E[H:\ :li#25:\ :nd=\E[C:\ :se=\E[44;37m:\ :so=\E[31m:\ :te=\E[0m:\ :ti=\E[44;37m:\ :ue=\E[m:\ :up=\E[A:\ :us=\E[1m:\ :xd=\E[B:\ :xs: *[V9.IPL.DATA]VERSE.DAT;1+,'3.'/ 4'&-%0123KPWO(56AĚ7Ś89Jj$GHJFrom icon-group-sender Mon May 25 05:41:47 1992 Received: by cheltenham.cs.arizona.edu; Mon, 25 May 92 05:41:38 MST Date: Mon, 25 May 1992 07:41 CST From: Chris Tenaglia - 257-8765 Subject: Holiday Offering To: icon-group@cs.arizona.edu Message-Id: <01GKF5PLTI6I984PUJ@mis.mcw.edu> X-Organization: Medical College of Wisconsin (Milwaukee, WI) X-Vms-To: IN%"icon-group@cs.arizona.edu" Status: R Errors-To: icon-group-errors@cs.arizona.edu Here is a sample vocabulary file. I choose computer and science related stuff which seems to fit together well. I've tried farming and agriculture, but it got pretty gross. Great stuff for talk.bizaare! Happy holidays! Chris Tenaglia (System Manager) | "The past explained, Medical College of Wisconsin | the future fortold, 8701 W. Watertown Plank Rd. | the present largely appologized for." Milwaukee, WI 53226 | Organon to The Doctor (414)257-8765 | tenaglia@mis.mcw.edu ! ! This is the vocabulary of the AI verse generator. Its filename is passed ! as a parameter. This should run under VMS, Unix, and MS-DOS. Lines until ! the %noun line are ignored and will generate 'Such Language!' messages ! when the program is run. ! %noun ABEND|ABENDS ABUSE|ABUSES ACCEPTANCE|ACCEPTANCES ACCOUNT|ACCOUNTS ACTION|ACTIONS ADDRESS|ADDRESSES ALGORITHM|ALGORITHMS AMAZEMENT|AMAZEMENTS ANOMALY|ANOMALIES ANSWER|ANSWERS APPLICATION|APPLICATIONS ARGUMENT|ARGUMENTS ARITHMETIC|ARITHMETICS ASSEMBLER|ASSEMBLERS ASSEMBLY|ASSEMBLIES BASE|BASES BASIC|BASICS BATCH|BATCHES BAUD RATE|BAUD RATES BENCHMARK|BENCHMARKS BIT|BITS BIT BUCKET|BIT BUCKETS BLANK|BLANKS BLOCK|BLOCKS BOOK|BOOKS BREAKPOINT|BREAKPOINTS BUFFER|BUFFERS BUG|BUGS BYTE|BYTES CALENDER|CALENDERS CAPACITY|CAPACITIES CATALOG|CATALOGS CAUSE|CAUSES CHAMBER|CHAMBERS CHANGE|CHANGES CHARACTER|CHARACTERS CHECK|CHECKS CLASS|CLASSES CHIP|CHIPS CIRCUIT|CIRCUITS CIRCUIT CARD|CIRCUIT CARDS CIRCUIT CHIP|CIRCUIT CHIPS CLUSTER|CLUSTERS CODE|CODES COMMAND|COMMANDS COMPILER|COMPILERS COMPONENT|COMPONENTS COMPUTER|COMPUTERS CONCEPT|CONCEPTS CONDITION|CONDITIONS CONFUSION|CONFUSIONS CONNECTION|CONNECTIONS CONTROL|CONTROLS CONVERSION|CONVERSIONS COPROCESSOR|COPROCESSORS COPY|COPIES CRASH|CRASHES CUBE|CUBES CURSOR|CURSORS CYCLE TIME|CYCLE TIMES DATA|DATA DATA|SET DATA SETS DATABASE|DATABASES DEFECT|DEFECTS DEFINITION|DEFINITIONS DELETION|DELETIONS DERIVATIVE|DERIVATIVES DESCRIPTION|DESCRIPTIONS DESIGN|DESIGNS DEVELOPEMENT|DEVELOPEMENTS DEVICE|DEVICES DIAGRAM|DIAGRAMS DIGIT|DIGITS DIRECTORY|DIRECTORIES DISK|DISKS DISPLAY|DISPLAYS DIVISION|DIVISIONS DOCUMENT|DOCUMENTS DOCUMENTATION|DOCUMENTATIONS DOMAIN|DOMAINS DRAWING|DRAWINGS DRIVER|DRIVERS EFFECT|EFFECTS ELEMENT|ELEMENTS EMPTY SET|EMPTY SETS ENGINE|ENGINES ENGINEER|ENGINEERS ENTROPY|ENTROPIES ENTRY|ENTRIES ENTRYPOINT|ENTRYPOINTS ENVIRONMENT|ENVIRONMENTS EQUATION|EQUATIONS ERROR|ERRORS ESCAPE|ESCAPES EUPHEMISM|EUPHEMISMS EXAMPLE|EXAMPLES EXPONENT|EXPONENTS FACT|FACTS FAILURE|FAILURES FANTASY|FANTASIES FAX|FAXES FEATURE|FEATURES FIELD|FIELDS FILE|FILES FIRMWARE|FIRMWARES FLAG|FLAGS FLOPPY|FLOPPIES FORM|FORMS FORMAT|FORMATS FROTH|FROTHS FUNCTION|FUNCTIONS GAME|GAMES GENERATOR|GENERATORS GLITSCH|GLITSCHES GRAPH|GRAPHS HACKER|HACKERS HARDWARE|HARDWARES HASH|HASHES HEXIDECIMAL|HEXIDECIMALS HOLLERITH CARD|HOLLERITH CARDS HYPERCUBE|HYPERCUBES IDIOT|IDIOTS IMAGE|IMAGES IMPLEMENTATION|IMPLEMENTATIONS INDEX|INDICES INDIVIDUAL|INDIVIDUALS INFORMATION|INFORMATIONS INITIALIZATION|INITIALIZATIONS INHERITANCE|INHERITANCES INPUT|INPUTS INQUIRY|INQUIRIES INSERTION|INSERTI L VMS.BCK'3%[V9.IPL.DATA]VERSE.DAT;1;1'aONS INSTALLATION|INSTALLATIONS INSTRUCTION|INSTRUCTIONS INTEGER|INTEGERS INTEGRAL|INTEGRALS INTEGRATED CIRCUIT|INTEGRATED CIRCUITS INTELLECT|INTELLECTS INTERFACE|INTERFACES INTERPRETER|INTERPRETERS INTERRUPT|INTERRUPTS INTERVAL|INTERVALS INTRODUCTION|INTRODUCTIONS INVENTOR|INVENTORS ITEM|ITEMS ITERATION|ITERATIONS JOB|JOBS JOBSTREAM|JOBSTREAMS JOYSTICK|JOYSTICKS KEYPAD|KEYPADS KEYWORD|KEYWORDS KLOOJE|KLOOJES KRUFT|KRUFTS LABEL|LABELS LABORATORY|LABORATORIES LANGUAGE|LANGUAGES LIBRARY|LIBRARIES LINKAGE|LINKAGES LINKER|LINKERS LIQUID|LIQUIDS LIST|LISTS LOAD|LOADS LOGIC|LOGICS LOOP|LOOPS MACHINE|MACHINES MAINFRAME|MAINFRAMES MANUAL|MANUALS MEMBER|MEMBERS MEMORY|MEMORIES MENU|MENUS MERGE|MERGES MESSAGE|MESSAGES METHOD|METHODS MICROPROCESSOR|MICROPROCESSORS MODE|MODES MODEL|MODELS MODEM|MODEMS MODIFICATION|MODIFICATIONS MODULE|MODULES MONITOR|MONITORS MOTHERBOARD|MOTHERBOARDS MOVE|MOVES MUTANT|MUTANTS NAND|GATE NAND GATES NETWORK|NETWORKS NO-OP|NO-OPS NODE|NODES NONSENSE|NONSENSES NULL DEVICE|NULL DEVICES NUMBER|NUMBERS NUMBER CRUNCHER|NUMBER CRUNCHERS OBJECT|OBJECTS OCCURENCE|OCCURENCES OPERAND|OPERANDS OPERATING SYSTEM|OPERATING SYSTEMS OPERATION|OPERATIONS OPTION|OPTIONS ORDER|ORDERS OUTPUT|OUTPUTS PACKAGE|PACKAGES PAGE|PAGES PARADIGM|PARADIGMS PARAMETER|PARAMETERS PARITY BIT|PARITY BITS PART NUMBER|PART NUMBERS PARTITION|PARTITIONS PARTNER|PARTNERS PASSWORD|PASSWORDS PATCH|PATCHES PATH|PATHS PERSON|PERSONS POINT|POINTS POINTER|POINTERS PREFERENCE|PREFERENCES PRICE|PRICES PRINTER|PRINTERS PRINTOUT|PRINTOUTS PROCEDURE|PROCEDURES PROCESS|PROCESSES PRODUCT|PRODUCTS PROFESSOR|PROFESSORS PROGRAM|PROGRAMS PROGRAMMER|PROGRAMMERS PROJECT|PROJECTS PURGE|PURGES QUALITY|QUALITIES QUANTITY|QUANTITIES QUERY|QUERIES QUESTION|QUESTIONS QUOTE|QUOTES RAM|DUMP RAM DUMPS RANDOM NUMBER|RANDOM NUMBERS RATIO|RATIOS REALITY|REALITIES REASON|REASONS RECORD|RECORDS REFERENCE|REFERENCES REFLECTION|REFLECTIONS REFUSAL|REFUSALS REGION|REGIONS REGISTER|REGISTERS REPLENISHMENT|REPLENISHMENTS REQUIREMENT|REQUIREMENTS ROBOT|ROBOTS ROUTINE|ROUTINES SAMPLE|SAMPLES SCHEMA|SCHEMAS SCIENCE|SCIENCES SEARCH|SEARCHES SECTION|SECTIONS SELECTION|SELECTIONS SELF|SELFS SEQUENCE|SEQUENCES SHOW|SHOWS SITUATION|SITUATIONS SIZE|SIZES SOCKET|SOCKETS SOFTWARE|SOFTWARES SOLUTION|SOLUTIONS SORT|SORTS SPACE|SPACES SPARK|SPARKS SPECTRUM|SPECTRUMS SPHERE|SPHERES SPREAD SHEET|SPREAD SHEETS STANDARD|STANDARDS STATUS|STATUSES STEP|STEPS STORAGE|STORAGES STRUCTURE|STRUCTURES SUBJECT|SUBJECTS SUBSCHEMA|SUBSCHEMAS SUBSECTION|SUBSECTIONS SUBSTITUTE|SUBSTITUTES SUPER COMPUTER|SUPER COMPUTERS SURPRISE|SURPRISES SWITCH|SWITCHES SYMBOL|SYMBOLS SYNTAX ERROR|SYNTAX ERRORS SYSTEM|SYSTEMS TABLE|TABLES TECHNICIAN|TECHNICIANS TESSARECT|TESSARECTS TEST|TESTS THOUGHT|THOUGHTS TIME|TIMES TOOL|TOOLS TRACE|TRACES TRANSACTION|TRANSACTIONS TRANSFER|TRANSFERS TREE|TREES TRIANGLE|TRIANGLES TWOS-COMPLEMENT|TWOS-COMPLEMENTS UNIT|UNITS UPDATE|UPDATES USAGE|USAGES USER|USERS UTILITY|UTILITIES VACUUM|VACUUMS VALUE|VALUES VARIABLE|VARIABLES VECTOR|VECTORS VERSION|VERSIONS VIOLATION|VIOLATIONS VOLUME|VOLUMES WARRANTY|WARRANTIES WORD|WORDS WORD PROCESSOR|WORD PROCESSORS WORK|WORKS %adjt ABRASIVE|ABRASIVELY@MORE ABRASIVE#MOST ABRASIVE ABSURD|ABSURDLY@ABSURDER#ABSURDEST ACTIVE|ACTIVELY@MORE ACTIVE#MOST ACTIVE ALARMING|ALARMINGLY@MORE ALARMING#MOST ALARMING ALERT|ALERTLY@MORE ALERT#MOST ALERT AMORPHOUS|AMORPHOUSLY@MORE AMORPHOUS#MOST AMORPHOUS APATHETIC|APATHETICALLY@MORE APATHETIC#MOST APATHETIC ASTONISHING|ASTONISHINGLY@MORE ASTONISHING#MOST ASTONISHING AUTOMATIC|AUTOMATICALLY@MORE AUTOMATIC#MOST AUTOMATIC AVERAGE|AVERAGELY@MORE AVERAGE#MOST AVERAGE BAD|BADLY@BADDER#BADDEST BASIC|BASICALLY@MORE BASIC#MOST BASIC BEAUTIFUL|BEAUTIFULLY@MORE BEAUTIFUL#MOST BEAUTIFUL BERZERK|BERZERKLY@BERZERKER#BERZERKEST BIZAAR|BIZAARLY@BIZAARER#BIZAAREST BLETCHEROUS|BLETCHEROUSLY@MORE BLETCHEROUS#MOST BLETCHEROUS BLIND|BLINDLY@BLINDER#BLINDEST BLINKING|BLINKINGLY@MORE BLINKING#MOST BLINKING BOGUS|BOGUSLY@MORE BOGUS#MOST BOGUS BOLD|BOLDLY@BOLDER#BOLDEST BORING|BORINGLY@MORE BORING#MOST BORING BRAVE|BRAVELY@BRAVER#BRAVEST CAUSTIC|CAUSTICALLY@MORE CAUSTIC#MOST CAUSTIC CHEAP|CHEAPLY@CHEAPER#CHEAPEST COLD|COLDLY@COLDER#COLDEST COBOL|COBOL LIKE|MORE COBOL LIKE|MOSTLY COBOL CONCISE|CONCISELY@CONCISER#CONCISEST CONSIDERATE|CONSIDERATELY@MORE CONSIDERATE#MOST CONSIDERATE CONVOLUTED|CONVOLUTEDLY@MORE CONVOLUTED#MOST CONVOLUTED CORRECT|CORRECTLY@MORE CORRECT#MOST CORRECT COURTEOUS|COURTEOUSLY@MORE COURTEOUS#MOST COURTEOUS CREATIVE|CREATIVELY@MORE CREATIVE#MOST CREATIVE DEAR|DEARLY@DEARER#DEAREST DEEP|DEEPLY@DEEPER#DEEPEST DEFECTIVE|DEFECTIVELY@MORE DEFECTIVE#MOST DEFECTIVE DELIGHTFUL|DELIGHTFULLY@MORE DELIGHTFUL#MOST DELIGHTFUL DEPLETED|DEPLETEDLY@MORE DEPLETED#MOST DEPLETED DESTRUCTIVE|DESTRUCTIVELY@MORE DESTRUCTIVE#MOST DESTRUCTIVE DETACHED|DETACHEDLY|MORE DETACHED|MOST DETACHED DEVOUT|DEVOUTLY@DEVOUTER#DEVOUTEST DIFFERENT|DIFFERENTLY@MORE DIFFERENT#MOST DIFFERENT DIFFUSE|DIFFUSELY@MORE DIFFUSE#MOST DIFFUSE DISPOSABLE|DISPOSABLY@MORE DISPOSABLE#MOST DISPOSABLE DISTANT|DISTANTLY@MORE DISTANT#MOST DISTANT DROWSY|DROWSILY@DROWSIER#DROWSIEST DRY|DRYLY@DRIER#DRIEST DUMB|DUMBLY@DUMBER#DUMBEST DUSTY|DUSTILY@DUSTIER#DUSTIEST EASY|EASILY@EASIER#EASIEST EDUCATED|EDUCATEDLY@MORE EDUCATED#MOST EDUCATED ELECTRIC|ELECTRICALLY@MORE ELECTRIC#MOST ELECTRIC ENERGETIC|ENERGETICALLY@MORE ENERGETIC#MOST ENERGETIC EVEN|EVENLY@MORE EVEN#MOST EVEN EVIL|EVILY@MORE EVIL#MOST EVIL EXCITABLE|EXCITABLY@MORE EXCITABLE#MOST EXCITABLE EXUBERANT|EXUBERANTLY@MORE EXUBERANT#MOST EXUBERANT FAIR|FAIRLY@FAIRER#FAIREST FANTASTIC|FANTASTICALLY@MORE FANTASTIC#MOST FANTASTIC FEARFUL|FEARFULLY@MORE FEARFUL#MOST FEARFUL FLEXIBLE|FLEXIBLY@MORE FLEXIBLE#MOST FLEXIBLE FLUID|FLUIDLY@MORE FLUID#MOST FLUID FOAMING|FOAMINGLY@MORE FOAMING#MOST FOAMING FOOLISH|FOOLISHLY@MORE FOOLISH#MOST FOOLISH FORBIDDING|FORBIDDINGLY@MORE FORBIDDING#MOST FORBIDDING FREEZING|FREEZINGLY@MORE FREEZING#MOST FREEZING FRESH|FRESHLY@FRESHER#FRESHEST FROTHING|FROTHINGLY@MORE FROTHING#MOST FROTHING FUNNY|FUNNY@FUNNIER#FUNNIEST FUZZY|FUZZILY@FUZZIER#FUZZIEST GENERAL|GENERALLY@MORE GENERAL#MOST GENERAL GLORIOUS|GLORIOUSLY@MORE GLORIOUS#MOST GLORIOUS GLOWING|GLOWINGLY@MORE GLOWING#MOST GLOWING GRAND|GRANDLY@GRANDER#GRANDEST GREESY|GREESILY@GREESIER#GREESIEST GRINDING|GRINDINGLY@MORE GRINDING#MOST GRINDING GROSS|GROSSLY@GROSSER#GROSSEST GULLIBLE|GULLIBLY@MORE GULLIBLE#MOST GULLIBLE HAPPY|HAPPILY@HAPPIER#HAPPIEST HARD|HARDLY@HARDER#HARDEST HATEFUL|HATEFULLY@MORE HATEFUL#MOST HATEFUL HEATED|HEATEDLY@MORE HEATED#MOST HEATED HEAVY|HEAVILY@HEAVIER#HEAVIEST HELPFUL|HELPFULLY@MORE HELPFUL#MOST HELPFUL HIGH|HIGHLY@HIGHER#HIGHEST HOPELESS|HOPELESSLY@MORE HOPELESS#MOST HOPELESS HORRIBLE|HORRIBLY@MORE HORRIBLE#MOST HORRIBLE HOT|HOTLY@HOTTER#HOTTEST HUMOROUS|HUMOROUSLY@MORE HUMOROUS#MOST HUMOROUS HUNGRY|HUNGRILY@HUNGRIER#HUNGRIEST IDIOTIC|IDIOTICALLY@MORE IDIOTIC#MOST IDIOTIC IGNORANT|IGNORANTLY@MORE IGNORANT#MOST IGNORANT IMPORTANT|IMPORTANTLY@MORE IMPORTANT#MOST IMPORTANT IMPRESSIVE|IMPRESSIVELY@MORE IMPRESSIVE#MOST IMPRESSIVE INDEFINITE|INDEFINITELY@MORE INDEFINITE#MOST INDEFINITE INDESCRIBABLE|INDESCRIBABLY@MORE INDESCRIBABLE#MOST INDESCRIBABLE INDIRECT|INDIRECTLY@MORE INDIRECT#MOST INDIRECT INSTANT|INSTANTLY@MORE INSTANT#MOST INSTANT INTERACTIVE|INTERACTIVELY|MORE INTERACTIVE|MOST INTERACTIVE INTERMITANT|INTERMITANTLY@MORE INTERMITANT#MOST INTERMITANT JOYOUS|JOYOUSLY@MORE JOYOUS#MOST JOYOUS JUBILANT|JUBILANTLY@MORE JUBILANT#MOST JUBILANT KIND|KINDLY@KINDER#KINDEST KNOWING|KNOWINGLY@MORE KNOWING#MOST KNOWING LAMENTABLE|LAMENTABLY@MORE LAMENTABLE#MOST LAMENTABLE LATE|LATELY@LATER#LATEST LAZY|LAZILY@LAZIER#LAZIEST LOGICAL|LOGICALLY@MORE LOGI & VMS.BCK'3%[V9.IPL.DATA]VERSE.DAT;1;1'~CAL#MOST LOGICAL LONG|LONGLY@LONGER#LONGEST LOQUACIOUS|LOQUACIOUSLY@MORE LOQUACIOUS#MOST LOQUACIOUS LOUSY|LOUSILY@LOUSIER#LOUSIEST LOW|LOWLY@LOWER#LOWEST LUSCIOUS|LUSCIOUSLY@MORE LUSCIOUS#MOST LUSCIOUS MAGIC|MAGICALLY@MORE MAGIC#MOST MAGIC MAGNIFICENT|MAGNIFICENTLY@MORE MAGNIFICENT#MOST MAGNIFICENT MANIACAL|MANIACALLY@MORE MANIACAL#MOST MANIACAL MASTERFUL|MASTERFULLY@MORE MASTERFUL#MOST MASTERFUL MEANINGFUL|MEANINGFULLY@MORE MEANINGFUL#MOST MEANINGFUL METALLIC|METALLICALLY@MORE METALLIC#MOST METALLIC MISERABLE|MISERABLY@MORE MISERABLE#MOST MISERABLE MONOLITHIC|MONOLITHICALLY@MORE MONOLITHIC#MOST MONOLITHIC MONSTROUS|MONSTROUSLY@MORE MONSTROUS#MOST MONSTROUS MUNDANE|MUNDANELY@MUNDANER#MUNDANEST NATURAL|NATURALLY@MORE NATURAL#MOST NATURAL NEAR|NEARLY@NEARER#NEAREST NEAT|NEATLY@NEATER#NEATEST NOISOME|NOISOMELY@MORE NOISOME#MOST NOISOME NONEXISTANT|NONEXISTANTLY@MORE NONEXISTANT#MOST NONEXISTANT NUCLEAR|NUCLEARLY@MORE NUCLEAR#MOST NUCLEAR OBEDIENT|OBEDIENTLY@MORE OBEDIENT#MOST OBEDIENT OBVIOUS|OBVIOUSLY@MORE OBVIOUS#MOST OBVIOUS ODD|ODDLY@ODDER#ODDEST ODIFEROUS|ODIFEROUSLY@MORE ODIFEROUS#MOST ODIFEROUS OMNIVOROUS|OMNIVOROUSLY@MORE OMNIVOROUS#MOST OMNIVOROUS OPEN|OPENLY@MORE OPEN#MOST OPEN PAINLESS|PAINLESSLY@MORE PAINLESS#MOST PAINLESS PATHETIC|PATHETICALLY@MORE PATHETIC#MOST PATHETIC PECULIAR|PECULIARLY@MORE PECULIAR#MOST PECULIAR PERCEPTIVE|PERCEPTIVELY@MORE PERCEPTIVE#MOST PERCEPTIVE PERSISTANT|PERSISTANTLY@MORE PERSISTANT#MOST PERSISTANT PLASTIC|PLASTICALLY@MORE PLASTIC#MOST PLASTIC PLEASANT|PLEASANTLY@MORE PLEASANT#MOST PLEASANT PONDEROUS|PONDEROUSLY@MORE PONDEROUS#MOST PONDEROUS POWERFUL|POWERFULLY@MORE POWERFUL#MOST POWERFUL PRECIOUS|PRECIOUSLY@MORE PRECIOUS#MOST PRECIOUS PRECISE|PRECISELY@MORE PRECISE#MOST PRECISE PRETTY|PRETTILY@PRETTIER#PRETTIEST PROPER|PROPERLY@MORE PROPER#MOST PROPER PROUD|PROUDLY@PROUDER#PROUDEST QUEER|QUEERLY@QUEERER#QUEEREST QUICK|QUICKLY@QUICKER#QUICKEST READY|READILY@MORE READY#MOST READY RELENTING|RELENTINGLY@MORE RELENTING#MOST RELENTING RELUCTANT|RELUCTANTLY@MORE RELUCTANT#MOST RELUCTANT REVERENT|REVERENTLY@MORE REVERENT#MOST REVERENT ROUDY|ROUDILY@ROUDIER#ROUDIEST ROUGH|ROUGHLY@ROUGHER#ROUGHEST RUDE|RUDELY@RUDER#RUDEST SAD|SADLY@SADDER#SADDEST SALIENT|SALIENTLY@MORE SALIENT#MOST SALIENT SAVAGE|SAVAGELY@MORE SAVAGE#MOST SAVAGE SCRUFFY|SCRUFFILY@SCRUFFIER#SCRUFFIEST SELF MODIFYING|SELF MODIFYINGLY@MORE SELF MODIFYING#MOST SELF MODIFYING SHARP|SHARPLY@SHARPER#SHARPEST SHORT|SHORTLY@SHORTER#SHORTEST SKEWED|SKEWEDLY@MORE SKEWED#MOST SKEWED SLOPPY|SLOPPILY@SLOPPIER#SLOPPIEST SLOW|SLOWLY@SLOWER#SLOWEST SMOOTH|SMOOTHLY@SMOOTHER#SMOOTHEST SOFT|SOFTLY@SOFTER#SOFTEST SOULFUL|SOULFULLY@MORE SOULFUL#MOST SOULFUL SPACIOUS|SPACIOUSLY@MORE SPACIOUS#MOST SPACIOUS SPASTIC|SPASTICALLY@MORE SPASTIC#MOST SPASTIC SPECKLED|SPECKLEDLY@MORE SPECKLED#MOST SPECKLED SPECTACULAR|SPECTACULARLY@MORE SPECTACULAR#MOST SPECTACULAR SPIFFY|SPIFFILY@SPIFFIER#SPIFFIEST SQUEEKING|SQUEEKINGLY@MORE SQUEEKING#MOST SQUEEKING STATIC|STATICALLY@MORE STATIC#MOST STATIC STRANGE|STRANGELY@STRANGER#STRANGEST STRATEGIC|STRATEGICALLY@MORE STRATEGIC#MOST STRATEGIC STUDIOUS|STUDIOUSLY@MORE STUDIOUS#MOST STUDIOUS STUPID|STUPIDLY@MORE STUPID#MOST STUPID SUBNORMAL|SUBNORMALLY@MORE SUBNORMAL#MOST SUBNORMAL SUCCESSFUL|SUCCESSFULLY@MORE SUCCESSFUL#MOST SUCCESSFUL SWIFT|SWIFTLY@SWIFTER#SWIFTEST TANGIBLE|TANGIBLY@MORE TANGIBLE#MOST TANGIBLE TEPID|TEPIDLY@MORE TEPID#MOST TEPID TERSE|TERSELY@TERSER#TERSEST THRASHING|THRASHINGLY@MORE THRASHING#MOST THRASHING TIGHT|TIGHTLY@TIGHTER#TIGHTEST TIRED|TIREDLY@TIREDER#TIREDEST TRAGIC|TRAGICALLY@MORE TRAGIC#MOST TRAGIC TWISTED|TWISTEDLY@MORE TWISTED#MOST TWISTED TYPICAL|TYPICALLY@MORE TYPICAL#MOST TYPICAL UNBELIEVABLE|UNBELIEVABLY@MORE UNBELIEVABLE#MOST UNBELIEVABLE UNIFORM|UNIFORMLY@MORE UNIFORM#MOST UNIFORM URBANE|URBANELY@URBANER#URBANEST VACANT|VACANTLY@MORE VACANT#MOST VACANT VAIN|VAINLY@VAINER#VAINEST VENOMOUS|VENOMOUSLY@MORE VENOMOUS#MOST VENOMOUS VERBOSE|VERBOSELY@VERBOSER#VERBOSEST VIBRANT|VIBRANTLY@MORE VIBRANT#MOST VIBRANT VIRTUOUS|VIRTUOUSLY@MORE VIRTUOUS#MOST VIRTUOUS VITAL|VITALLY@MORE VITAL#MOST VITAL WEAK|WEAKLY@WEAKER#WEAKEST WET|WETLY@WETTER#WETTEST WHOLESOME|WHOLESOMELY@MORE WHOLESOME#MOST WHOLESOME WIDE|WIDELY@WIDER#WIDEST WIERD|WIERDLY@WIERDER#WIERDEST WILD|WILDLY@WILDER#WILDEST WISE|WISELY@WISER#WISEST WONDERFUL|WONDERFULLY@MORE WONDERFUL#MOST WONDERFUL WRETCHED|WRETCHEDLY@MORE WRETCHED#MOST WRETCHED WRITHING|WRITHINGLY@MORE WRITHING#MOST WRITHING %been AIN'T BE SHOULD BE COULD BE WOULD BE CAN'T BE MIGHT BE NOT MAY BE MIGHT BE MAY BE NOT COULD NOT BE SHOULD NOT BE WOULD NOT BE MAY NOT BE MIGHT NOT BE WILL BE WILL NOT BE WON'T BE COULD HAVE BEEN SHOULD HAVE BEEN WOULD HAVE BEEN WILL HAVE BEEN COULD BE NOT SHOULD BE NOT WOULD BE NOT COULDN'T HAVE BEEN SHOULDN'T HAVE BEEN WOULDN'T HAVE BEEN SHOULD BE %ivrb ADD|ADDED ASSEMBLE|ASSEMBLED ATTEMPT|ATTEMPTED CALCULATE|CALCULATED CLIMB|CLIMBED CLOSE|CLOSED CODE|CODED COMBINE|COMBINED COMPARE|COMPARED COMPILE|COMPILED COMPUTE|COMPUTED CONCLUDE|CONCLUDED CONTEND|CONTENDED CONTINUE|CONTINUED CONVERT|CONVERTED CRASH|CRASHED CRUNCH|CRUNCHED DECREASE|DECREASED DECREMENT|DECREMENTED DIGEST|DIGESTED DOUBLE|DOUBLED DUMP|DUMPED ENHANCE|ENHANCED ENTER|ENTERED EXIST|EXISTED EXPLODE|EXPLODED EXTEND|EXTENDED FLASH|FLASHED FLOAT|FLOATED FRY|FRIED HIT|HITTED GENERATE|GENERATED IMPLODE|IMPLODED INCREASE|INCREASED INCREMENT|INCREMENTED JUGGLE|JUGGLED JUMP|JUMPED LINK|LINKED LISTEN|LISTENED MANIPULATE|MANIPULATED MUNCH|MUNCHED OPEN|OPENED OPERATE|OPERATED OVERFLOW|OVERFLOWED PASS|PASSED PERFORM|PERFORMED PLAN|PLANNED PREPARE|PREPARED RAIN|RAINED REJECT|REJECTED REPEAT|REPEATED SHOW|SHOWED SPIT|SPITTED SLIP|SLIPPED SUMMARIZE|SUMMARIZED TERMINATE|TERMINATED TOGGLE|TOGGLED TRIPLE|TRIPLED TURN|TURNED TWITCH|TWITCHED WRIGGLE|WRIGGLED %tvrb ABSORB|ABSORBED ACCESS|ACCESSED ALLOCATE|ALLOCATED ALLOW|ALLOWED ASSEMBLE|ASSEMBLED ASSIGN|ASSIGNED BENEFIT|BENEFITTED CALCULATE|CALCULATED CLIMB|CLIMBED CLOSE|CLOSED CODE|CODED COLLIDE|COLLIDED COMBINE|COMBINED COMMAND|COMMANDED COMPARE|COMPARED COMPILE|COMPILED CONCLUDE|CONCLUDED CONTAIN|CONTAINED CONVERT|CONVERTED COOK|COOKED COPY|COPIED CRASH|CRASHED CRUNCH|CRUNCHED DEBUG|DEBUGGED DECREASE|DECREASED DECREMENT|DECREMENTED DELETE|DELETED DELIVER|DELIVERED DESCRIBE|DESCRIBED DESTROY|DESTROYED DETECT|DETECTED DEVISE|DEVISED DIGEST|DIGESTED DIRECT|DIRECTED DISPLAY|DISPLAYED DIVIDE|DIVIDED DOUBLE|DOUBLED DUMP|DUMPED EDIT|EDITED EMPHASIZE|EMPHASIZED EMULATE|EMULATED ENCRYPT|ENCRYPTED ENHANCE|ENHANCED ERASE|ERASED EVALUATE|EVALUATED EXECUTE|EXECUTED EXPLODE|EXPLODED EXPRESS|EXPRESSED EXTEND|EXTENDED FACILITATE|FACILITATED FLASH|FLASHED FLIP|FLIPPED FORMAT|FORMATTED FRY|FRIED GATHER|GATHERED IDENTIFY|IDENTIFIED IGNORE|IGNORED IMPLEMENT|IMPLEMENTED IMPLODE|IMPLODED INCLUDE|INCLUDED INCREASE|INCREASED INCREMENT|INCREMENTED INSTALL|INSTALLED INDICATE|INDICATED INSTRUCT|INSTRUCTED INVOKE|INVOKED JUGGLE|JUGGLED KICK|KICKED KLOOJE|KLOOJED LIFT|LIFTED LIGHT|LIGHTED LIMIT|LIMITED LINK|LINKED LOAD|LOADED LOCATE|LOCATED MANIPULATE|MANIPULATED MULTIPLY|MULTIPLIED MUNCH|MUNCHED NEGATE|NEGATED NUMBER|NUMBERED OPEN|OPENED ORDER|ORDERED OUTPUT|OUTPUTTED OVERFLOW|OVERFLOWED PAINT|PAINTED PASS|PASSED PERCEIVE|PERCEIVED PERFORM|PERFORMED PICK|PICKED PLAN|PLANNED POKE|POKED PORT|PORTED PREPARE|PREPARED PROCESS|PROCESSED PRODUCE|PRODUCED PROGRAM|PROGRAMMED PROTECT|PROTECTED PROMPT|PROMPTED PUNCH|PUNCHED QUESTION|QUESTIONED RANDOMIZE|RANDOMIZED READ|READ REJECT|REJECTED RENAME|RENAMED REPEAT|REPEATED REPRESENT|REPRESENTED SAVE|SAVED SCRATCH|SCRATCHED SCRAWL|SCRAWLED SELECT|SELECTED SHOW|SHOWED SHREAD|SHREADED SPECIFY|SPECIFIED SPEW|SPEWED SPOOL|SPOOLED STIR|STIRRED SUPPORT|S P VMS.BCK'3%[V9.IPL.DATA]VERSE.DAT;1;1'*r&UPPORTED TAG|TAGGED TAX|TAXED TERMINATE|TERMINATED TIME|TIMED TOAST|TOASTED TOGGLE|TOGGLED TOUCH|TOUCHED TRIPLE|TRIPLED TWEEK|TWEEKED TWIST|TWISTED TYPE|TYPED UNDERMINE|UNDERMINED UNLOAD|UNLOADED USE|USED WRIGGLE|WRIGGLED WRINKLE|WRINKLED ZAP|ZAPPED %prep ABOVE ABOUT AROUND ALONGSIDE ATOP BESIDE BETWEEN THROUGH AFTER WITH ON OVER UNDER NEXT TO OUTSIDE OF INSIDE BY FROM ACROSS FROM BELOW WITHOUT BY INSIDE OUTSIDE FROM ABOVE ABOUT AROUND BESIDE *[V9.IPL]DOCS.DIR;1+,Y"./ 4-v0123 KPWO56@ªӚ7Ӛ89Ҋ;vGHJI ADDRESS.DOC^ GTRACE.DOCq HEBCALEN.HLPl HEBCALPI.HLPm ICONMAKE.DOC\INCL.KWCtIPP.DOCn'MR.MAN] POLYWALK.TXTs"POST.1o PROCS.KWCZ PROGS.KWC[PT.MANpREAD.MEr*[V9.IPL.DOCS]ADDRESS.DOC;1+,^. / 4 k-Y"0123KPWO 56Aؚ7@ؚ89Jj$GHJ Processing Address Lists in Icon Ralph E. Griswold Department of Computer Science, The University of Arizona Introduction Version 8.1 of the Icon program library contains a collection of programs for processing address lists. These programs check the correctness of address lists, filter them for designated entries, sort them, and format mailing labels. The format of addresses lists processed by these programs is loosely structured. This allows such lists to be created and maintained using any text editor and allows them to be used for a variety of purposes (not just for addresses, although that term is used here for simplicity). The lack of structure, on the other hand, allows ambiguities and the possibility of incorrectly organized data. These programs are no substitute for a database system or an application specifically dedicated to the handling of mailing lists. Address_List_Format An address list, in the sense the term is used here, is a sequence of entries. Each entry begins with a header line, in which the first character is a #. Subsequent lines contain the address information in a natural format with a few constraints that are necessary if some of the programs described in the next section are to be used. For example, an address list might look like this: # Mr. Fred Burfle 1010 Wayside Lane Scottsdale, AZ 85254 # Prof. M. Elwood Mork 5235 Courtland Blvd., Apt. 23 Minneapolis, MN 55432 . . . Since a # at the beginning of a line constitutes a header, a # cannot appear as the first character of a line in an entry. One work-around for this problem is to put a blank in front of a # that otherwise would appear at the beginning of a line in an entry. Within an entry, a line whose first character is a * is con- sidered to be a comment and is not treated as significant text. For example, such comment lines are ignored when formatting IPD171 - 1 - September 4, 1991 mailing labels. Comment lines can be used for information like telephone numbers. The # that starts a header line can be followed by one or more designator characters. Several of the programs can select only those entries with specific designators. The choice of designator characters is up to the user. For example, #a might be used to designate active accounts, while #b might be used to designate bad addresses. Organization_of_Entry_Information Some of the programs that process address lists expect the entries to be in a specific form. For example, the first line of an entry (after the header) is expected to be a name if the entry is an actual address. Similarly, for addresses in the United States, the last line of an entry is expected to be the city, followed by a comma, fol- lowed by the postal-code abbreviation for the state, followed by one or more blanks, followed by the ZIP code. See the examples above. For an address outside the United States, the last line is expected to consist only of the country name, in all uppercase letters. Programs The following programs are available for processing address lists: adlcheck Checks lists for bad data. Options include checking the state and ZIP code (U.S. only), country name, and for fitting in the confines of a standard one- up mailing label. adlcount Counts the number of labels in a list with optional restriction to entries with specified designators. adlfiltr Filters a list, outputting only those entries with specified designators. adllist Lists ``fields'' of address list entries, including addressee name, city, state, ZIP code, and country. adlsort Sorts address list entries by addressee name, ZIP code, or country. labels Produces one-up mailing labels for designated entries. See the programs themselves for detailed documentation. IPD171 - 2 - September 4, 1991 t*[V9.IPL.DOCS]GTRACE.DOC;1+,q. / 4 -Y"0123KPWO 56 ښ7 jښ89Jj$GHJ Graphic Traces Introduction Several graphical components of the Icon program library rely on the concept of graphic traces. A graphic trace is simply a sequence of points. The purpose of graphic traces is to separate the computation of the geometrical components of figures from the rendering of them. This allows procedures that generate points to be used in a variety of ways. For example, they can be used by rendering procedures to draw figures. Alternatively, the points need not produce any figure at all, but they simply could be written to a file for later use or analysis. This approach also allows dif- ferent kinds of rendering procedures to use the same graphic traces. For example, the rendering might be done directly by drawing functions like XDrawPoint() or by using turtle graphics. The same graphic trace - sequence of points - also can be used in different ways. For example, individual points can be draw, suc- cessive points can be connected by lines, or  gt^ VMS.BCKqY"[V9.IPL.DOCS]GTRACE.DOC;11 =the points can be used as locii for drawing other figures. Points In the abstract, a point is a location in n-dimensional space. We'll limit our considerations to two dimensions, although most of the ideas are easily generalized. The natural concrete representation of a point is an object with coordinate values. A record provides the natural programming interpretation of this: record Point(x, y) Thus Point(200, 100) creates a point at with x-y coordinates 200,100. A typical graphic trace procedure looks like this: procedure polygon(n, r) local angle, incr angle := 0 incr := 2 * &pi / n every 1 to n do { suspend Point(r * cos(angle), r * sin(angle)) angle +:= incr } end Dealing with points as objects with coordinate values is very - 1 - natural and intuitively appealing. The drawing functions, how- ever, require coordinate positions as x-y argument pairs, as in XDrawLine(200, 100, 300, 200) which draws a line from 200,100 to 300,200. There are good reasons why the drawling functions require x-y argument pairs. It is more efficient to represent points in this way, and in some cases it is simpler to compute a series of x-y values than it is to create points. Argument pairs can be stored in lists, as in point_list := [p1.x, p1.y, p2.x, p2.y] and supplied to drawing functions using list invocation: XDrawLine ! point_list There really is no way to reconcile the two different representation of points, one as objects with coordinate values and the other as argument pairs. Conversion between the two representations is simple, however, and utility procedures are provided for this. Since graphic traces are designed to provide a high level of abstraction, we will deal with points as objects and leave the conversion to argument pairs, when needed, to the rendering domain. Producing_and_Using_Graphic_Traces The Icon program library currently contains several collec- tions of procedures for generating graphic traces: curves.icn various plane curves rstars.icn regular stars fstars.icn ``fractal stars'' See these procedures for examples of how graphic traces can be produced. The procedures in gtrace.icn and xgrtrace.icn provide various operations on graphic traces. In order to perform a sequence of operations on graphic traces, it is helpful to use ``packaged'' calls, in which a pro- cedure and an argument list for it are encapsulated in an object. See calls.icn. Two programs in the current library use graphic traces: rstarlab.icn and fstarlab.icn. These programs use the procedures rstars.icn and fstars.icn mentioned earlier. These programs allow points from graphic traces to be used in various ways. - 2 - Turtle graphics (see turtle.icn) are used by default for render- ing. Limitations_of_Graphic_Traces A graphic trace is just a sequence of points. It contains no context for these points, other than the order in which they occur. For example, there is no information in a graphic trace (unless it is contrived) to identify transitions between parts of a composite object. Procedures that use graphic traces can, of course, use separately derived contextual information or coding techniques, such as buffering the points, to circumvent some kinds of prob- lems. By their nature, graphic graces are most appropriate for applications in which all points (except perhaps the first) are treated in the same way. Ralph E. Griswold Department of Computer Science The University of Arizona June 8, 1993 - 3 - *[V9.IPL.DOCS]HEBCALEN.HLP;1+,l. / 4 -Y"0123KPWO 56ؚ7ؚ89Jj$GHJ This program accepts a year of the Jewish calendar, for example "5750", and produces on the screen a calendar of that year with a visually equivalent civil calendar opposite it for easy conversion of dates. The months of the civil year are abbreviated to JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC and of the Jewish calendar to NIS IYA SIV TAM AV ELU TIS HES KIS TEV SHE ADA AD2. Months are normally displayed three at a time. You call up the next three by hitting spacebar. At the end of the year you can indicate if you wish the program to conclude, by hitting spacebar again. If in response to the question, Do you wish to continue? you enter "y" and hit return, the next year will be displayed. Each Jewish month has its name on the left. The corresponding secular dates will have the name of the month on the right, and when the month changes it will be indicated on the right also. If you wish, you may enter a civil year in the form -70 for BCE dates and +70 for CE dates. The Jewish year beginning prior to Jan 1 of that year will be displayed, and you can continue with the next Jewish year if you wish to complete the desired civil year. You may enter CE or AD instead of + or BC or BCE instead of the minus sign if you wish. It is best to avoid spaces, so enter 1987AD, for example. The year 0 is not meaningful in either calendar. No date prior to 1 in the Jewish calendar should be entered. The program will calculate any future year, but will take longer for years much beyond the year 6000 in the Jewish reckoning. For example, the year 7000 will take three minutes or so to appear if your machine is not very fast. Earlier years should appear in a few seconds. A status line at the bottom of the screen indicates the civil and Jewish year, and the number of days in each. Jewish years may contain 354, 355, 356, 384, 385 or 386 days according to circumstances. When you are familiar with this program you can enter the years you wish to see on the command line. For example, if you call the program iconx calendar 5704 +1987 1BC you will see in turn the Jewish year 5704, the Jewish year commencing in 1986 and the Jewish year commencing in 2 B.C.E. You still have the option of seeing the years subsequent to these years if you wish. Just enter "y" when asked if you want to continue. When you enter "n", you will get the next year of your list. All civil dates are according to the Gregorian Calendar which first came into use in 1582 and was accepted in different places at different times. Prior to that date the Julian calendar was in use. At the present time the Julian calendar is 13 days behind the Gregorian Calendar, so that March 15 1917 in our reckoning is March 2 in the Julian Calendar. The following table shows the number of days that must be subtracted from the Gregorian date given here to find the Julian date. In the early centuries of this table and before, the calendar was intercalated erratically, so a simple subtraction is not possible. Note that the change in the number to subtract applies from Mar Vc VMS.BCKlY"9.IPL.DOCS]HEBCALEN.HLP;1 Ech 1 in the century year, since in the Julian Calendar that will be February 29 except in years divisible by 400 which are leap years in the Gregorian calendar also. Century # to subtract Century # to subtract 21 13 11 6 20 13 10 5 19 12 9 4 18 11 8 4 17 10 7 3 16 10 6 2 15 9 5 1 14 8 4 1 13 7 3 0 12 7 2 -1 1 -2 *[V9.IPL.DOCS]HEBCALPI.HLP;1+,m. / 4 -Y"0123KPWO 56{ؚ7L4ٚ89Jj$GHJHere is the alternate help for the calendar in ProIcon. This program accepts a year of the Jewish calendar, for example "5750", and produces on the screen a calendar of that year with a visually equivalent civil calendar opposite it for easy conversion of dates. The months of the civil year are abbreviated to JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC and of the Jewish calendar to NIS IYA SIV TAM AV ELU TIS HES KIS TEV SHE ADA AD2. Months are normally displayed three at a time. You call up the next three by hitting the space bar (or any other character). You may conclude at this point if you wish by clicking on the word "Run" at the top of the screen, dragging down to "Stop" and releasing. At the end of the year you can indicate if you wish to view the next following year by entering the letter "y" in response to the question, Do you wish to continue? If you enter "n" the program will conclude, or go on to the next year you wished to see if you called the program with multiple entries of years. (See below.) Each Jewish month has its name on the left. The corresponding secular dates will have the name of the month on the right, and when the month changes it will be indicated on the right also. If you wish, you may enter a civil year in the form -70 for BCE dates and +70 for CE dates. The Jewish year beginning prior to Jan 1 of that year will be displayed, and you can continue with the next Jewish year if you wish to complete the desired civil year. You may enter CE or AD instead of +, or BC or BCE instead of the minus sign if you wish. Avoid spaces, so enter 1987AD, for example. The year 0 is not meaningful in either calendar. No date prior to 1 in the Jewish calendar should be entered. The program will calculate any future year, but will take longer for years much beyond the year 6020 in the Jewish reckoning. For example, the year 7000 will take three minutes or so to appear. Earlier years should appear in a few seconds. A status line at the bottom of the screen indicates the civil and Jewish year, and the number of days in each. Jewish years may contain 354, 355, 356, 384, 385 or 386 days according to circumstances. When you are familiar with this program you can enter any number of years you wish to see. Before you start the program, click on "Options", drag to "Parameter String" and release. You can then enter, for example 5704 +1987 1BC then click on the box marked "OK". If you want to change these later, go back to "Options" and type in your new list. You will see in turn the Jewish year 5704, the Jewish year commencing in 1986 and the Jewish year commencing in 2 B.C.E. You still have the option of seeing the years subsequent to these years if you wish. Just enter "y" when asked if you want to continue. When you enter "n", you will get the next year of your original list. When you are completely through with the program, click on "File" at the top of the screen, drag to "Quit" and release. If you wish you can drag to "Transfer" and you will see a dialogue box to transfer to another program, or to Hypercard. All civil dates are according to the Gregorian Calendar which first came into use in 1582 and was accepted in different places at different times. Prior to that date the Julian calendar was in use. At the present time the Julian calendar is 13 days behind the Gregorian Calendar, so that January 20 1990 in our reckoning is January 7 in the Julian Calendar. The following table shows the number of days that must be subtracted from the Gregorian date given here to find the Julian date. In the centuries before the current era the calendar was intercalated erratically, so a simple subtraction is not possible. Century # to subtract Century # to subtract 21 13 11 6 20 13 10 5 19 12 9 4 18 11 8 4 17 10 7 3 16 10 6 2 15 9 5 1 14 8 4 1 13 7 3 0 12 7 2 -1 1 -2 c*[V9.IPL.DOCS]ICONMAKE.DOC;1+,\./ 4-Y"0123KPWO56sך7 -ؚ89Jj$GHJ A generic makefile skeleton for Icon programs by Bob Alexander: ------------------------------------------------------------------------- # # Makefile for Icon Programming Language program: # PROGRAM=|>Program Name<| # # To customize this file, usually only the definitions of macros # PROGRAM and FILES require modification. # # # Specification of separate files that make up the program. # # Note that the .u1 suffix is used here; the corresponding .icn files # are automatically identified by the implicit rule. # FILES=|>List of component files, space separated, using .u1 suffix<| # # Option flag definitions, etc. # ICFLAGS=-s IFLAGS=-s ICONT=icont # # Implicit rule for making ucode files. # .SUFFIXES: .u1 .icn .icn.u1: $(ICONT) -c $(ICFLAGS) $* # # Explicit rules for making an Icon program. # all: $(PROGRAM) $(PROGRAM): $(FILES) $(ICONT) -o $(PROGRAM) $(IFLAGS) $(FILES) *[V9.IPL.DOCS]INCL.KWC;1+,t./ 4f-Y"0123KPWO56ښ7ۚ89Jj$GHJevdefs.icn event codes evdefs.icn event codes *[V9.IPL.DOCS]IPP.DOC;1+,n'./ 4s-Y"0123KPWO56;ٚ7ٚ89Jj$GHJ An Icon Pre-Processor Frank J. Lhota Mei Associates, Inc. 1050 Waltham Street Lexington, MA 02173-8024 Voice: (617) 862-3390 FAX: (617) 862-5053 The Icon Programming Library comes with an Icon preprocessor called IPP. I have made several enhancements to this program, and I would like to submit the enhanced version of the IPP to the IPL. New IPP features For those who are not familiar with the IPP, the header comments in the IPP.ICN file provid VMS.BCKn'Y"[V9.IPL.DOCS]IPP.DOC;1XE;1Ce complete intructions on its use. The rest of this section assumes a familiarity with the previous version of the IPP. This new version of the IPP processes #line directives, which can be used to change the value of the _LINE_ and _FILE_ symbols. Also, the new IPP wiil generates #line directives when needed, so that the preprocessor output will always indicate the original source of its text. As a result, if we pipe the output of IPP to icont, e.g., iconx ipp.icx foo.icn | icont -ofoo - then (assuming that the source itself does not have any line directives) the &file and &line keywords refer to the lines in the original source file, not to "stdin" and the line numbers of the IPP output. The #line directives will be generated even when other comments are being stripped from the input. The preprocessor command syntax has been relaxed a bit. The basic form of a preprocessor command line is still $command [arguments] but now the user is permitted to include spaces around the '$', so that preproccessor commands can have a pretty-print look, e.g. $ifndef FOO $if BAR = 0 $ define FOO -1 $else $ define FOO BAR $endif $endif # ndef FOO - 1 - On non-UNIX systems, the new IPP has a more liberal search algorithm for $include files. For files enclosed with <>, the directories specified in the IPATH environment variable are searched for the file. The search for file enclosed in "" starts with the current directory, then proceeds to the IPATH directories. As before, the -I command line option can be used to add directories to the beginning of the standard search path. The following preprocessor commands have been added to IPP: $elif: Invoked as 'elif constant-expression'. If the lines preceding this command were processed, this command and the lines following it up to the matching $endif command are ignored. Otherwise, the constant-expression is evaluated, and the lines following this command are processed only if it produces a result. $error: This command issues a error, with the text coming from the argument field of the command. As with all errors, processing is terminated. $warning: This command issues a warning, with the text coming from the argument field of the command. In addition to the operators previously supported, the constant expressions appearing in $if / $elif command can now use the unary versions of the '+' and '-' operators, and the 'not' control structure. Also, backtracking is used in the evaluation of constant expressions, so that when the command $if FOO = (2|3) is processed, the lines following it are processed precisely when either FOO equals 2 or FOO equals 3. Uses of the IPP To understand the following examples, the reader should keep in mind this feature of the IPP: The IPP creates a pre-defined symbol out of each string generated by &features. These symbols are created by taking the non-letter characters of the &features strings and replacing them with underscores. Thus, if &features includes UNIX, the symbol UNIX is defined; if co-expressions are supported, the symbol co_expressions is defined, and so on. The IPP can be an handy tool for distributing Icon programs that require some customization for specific implementations. A prime example of this is the IPP itself. IPP must be able to contruct a - 2 - full pathname for a file, given a directory and file name. On many systems, this is done by performing the catenation directory || "/" || filename This file naming convention is not, however, universal. On DOS and OS/2 systems, "\\" should be used instead of "/" to separate the directory and filename. Under VMS, the separator should be "". To accomodate these system-dependant variations, the IPP source (in the file IPP.ICN, on this disk) is written using the symbol DIR_SEP for the string that separates the directory and filename portions of a complete path. The IPP code starts with the preprocessor directives: $ifndef DIR_SEP $ifdef UNIX $define DIR_SEP "/" $elif def(MS_DOS) | def(MS_DOS_386) | def(OS_2) $define DIR_SEP "\\" $elif def(VMS) $define DIR_SEP "" $else $error Need a definition for DIR_SEP $endif $endif # ndef DIR_SEP After preprocessing this code, DIR_SEP will be "/" on UNIX systems, and "\\" on DOS and OS/2 systems. For other systems, an appropriate value for DIR_SEP could be specified on the preprocessor command line by using the -D options, e.g. ipp -D DIR_SEP=\"\" ipp.ipp ipp.icn Another example of Icon software that could exploit IPP customization is BINCVT, the IPL package of utilities for converting between integers and their internal binary representations. The version of BINCVT currently included in the IPL assumes a "big-endian" system. On "big-endian" systems, the bytes in the binary representation of an integer are arranged from most significant to least significant. However, major platforms such as the IBM PC family or the VAX machines use the "little-endian" method for storing integers, in which the bytes representing an integer go from least significant to most significant. Using IPP, one can write a version of BINCVT that can be preprocessed to produce a working package for either big-endian or little-endian systems. The symbol LITTLE_ENDIAN will be defined (via the command line option -D LITTLE_ENDIAN) to produce output for little endian systems. Most of the functions in BINCVT can be expressed in terms of starting at the most significant byte, and moving to the less significant bytes. Hence, the generalized BINCVT starts with the definitions: - 3 - $ifdef LITTLE_ENDIAN $define GOTO_BIG_END tab (0) $define TO_SMALL_END -1 $else $define GOTO_BIG_END $define TO_SMALL_END 1 $endif Using these definitions, we can write a version of the unsigned function that will work for either integer storage method: procedure unsigned(s) local result result := 0 s ? { GOTO_BIG_END while result := ord(move(TO_SMALL_END)) + result * 16r100 } return result end The file BINCVT.IPP on this disk contains the source code for this example. Conclusions The IPP allows Icon programmers to write more flexable and more portable code. The latest version of the IPP is easier to use and more powerful than the previous version. - 4 - *[V9.IPL.DOCS]MR.MAN;1+,]./ 4-Y"0123KPWO56Tؚ7`:ؚ89Jj$GHJ.\" mr.man version 1.0 .\" copyright 1991 Ronald Florence .TH MR LOCAL "7 Feb 1992" .SH NAME mr \- mail (or news) reader .SH SYNOPSIS .B mr [ .I spool ] .SH DESCRIPTION Mr is a simple reader for mail and/or news spools. It won't obsolete elm, mailtool, emacs, mush, or even /usr/ucb/Mail, but it allows a reader to page, reply-to, save, append, print, forward, pipe, originate, conceal or reveal headers, and delete or undelete mail. Mr can also be used to read the news spools produced by the bsnews news sys5 VMS.BCK]Y"[V9.IPL.DOCS]MR.MAN;1EXE;1 tem for leaf nodes. .SH COMMANDS An alternate mail or news spool can be named on the command line. The initial display lists waiting messages: .ta .5i 1i 3.5i .sp .nf .if t .ft CR 1 FOP [ 22:ron@mlfarm.com (R] How to use mr .ie t .ft CB .el .ft B 2 DOR [985:goer@sophist.uchi] Improving MR (part I) .ie t .ft CR .el .ft R 3 N [ 61:ralph@cs.arizona.] MS-Dos Pipes .ft R .fi .P The letters after the message number indicate the status of the message; New, Old, Replied-to, Printed, Deleted, Saved, Forwarded. The number inside the square brackets is the number of lines in the message, followed by the author's name and/or email address, and the subject. The current message is highlighted in bold or reverse video, depending on the capabilities of the display. The prompt shows the current message number and the total number of messages. The following commands can be given: .sp .nf .RS A Append current message to a file D Delete current message F Forward current message G Get new mail H Help L List headers M Mail to a new recipient N Next message P Print current message Q Quit, saving changes R Reply-to current message S Save current message to a file U Undelete current message V View all headers X eXit without saving changes | pipe current message to a command ! execute command # make # current message + next message - previous message ? help .RE .fi .P Pressing .RI < return > will page thru the current message, then advance the current message number. Press .I Q or .I N at a .SM MORE prompt to return to the command prompt. .SH ENVIRONMENT The .SM EDITOR and .SM MAILSPOOL environmental variables can be used to override default settings. Mr uses the .SM TERM and .SM TERMCAP variables to lookup screen parameters and control strings. .SH SEE ALSO mail(1), sendmail(1), bsnews(\s-1LOCAL\s0) .SH BUGS The pseudo-pipes used for ms-dos cannot handle a complex command. Some users would undoubtedly prefer getch() style command parsing. The pager used to display messages does not back-up. .SH AUTHOR Ronald Florence (ron\s-2@\s0mlfarm.com). *[V9.IPL.DOCS]POLYWALK.TXT;1+,s". / 4 -Y"0123KPWO 56@1ښ7ښ89Jj$GHJ1.0 Introduction ---------------- This is a short walkthrough of the polydemo program, with examples of the use of all of the available commands. I am assuming that you have already looked at the header of the source code of polydemo, which describes the options available in the polydemo. When a series of commands or entries must be given, they will be listed here separated by commas. Each entry in such a list should be followed by pressing Return or Enter. Single-letter commands must always be followed with Enter as well. The case of any letter is ignored. 2.0 Preparing the polydemo program ---------------------------------- Polydemo requires the library polystuf, also included on this disk. To set up polydemo for running, first translate polystuf into ucode files with ICONT -c polystuf and then translate polydemo with ICONT polydemo after which you can run polydemo in whatever manner your system allows. 3.0 A sample run ---------------- Let's say we had to perform the following: find the result of evaluating 4 3.1 0.7 5 4 (9x + 6x + 5 - 3x ) - (12x - 4.2x + x) at x = 2.2. Start the polydemo program. A menu of options will be displayed, as will the slots that are filled (none yet) and a prompt containing valid characters corresponding to the options. Enter R to read in a polynomial from the keyboard, then give A as the slot of the first polynomial. Enter these numbers: 9, 4, 6, 3.1, 5, 0, -3, 0.7, 0. Now, the first polynomial will be stored in slot "a." Note that the 0 is necessary after the 5 to use a constant term, and that the 0 at the end is for stopping data entry. A similar process can be used for the second polynomial. Inputting R, B, 12, 5, -4.2, 4, 1, 1, 0 will place that polynomial in slot "b." Now, check to make sure you've entered the polynomials correctly. Type W for "write" and A for slot "a," to display the first polynomial on the screen. It should appear as 9x^4 + 6x^3.1 + -3x^0.7 + 5. Do the same for the second polynomial (replacing the A with a B). The output should be 12x^5 + -4.2x^4 + x. To find their difference, enter S for subtract, then A, B to indicate those two polynomials, then C as a slot for the answer. Note that the result isn't immediately displayed; you must use W, C for that. The answer should be -12x^5 + 13.2x^4 + 6x^3.1 + -x + -3x^0.7 + 5. Finally, to evaluate this polynomial at x = 2.2, type E for evaluate, C for the slot in which that polynomial is held, then 2.2 for the x-value. You should receive the message "The result is -242.498468213815," or something similar, depending on the precision of real numbers in your implementation of Icon. The Add and Multiply commands are invoked similarly to the Subtract command. The Clear option allows you to empty a slot, making room for a new polynomial. This is necessary because you cannot overwrite an existing polynomial. Asking for Help displays the list of options and the letters needed to access them. Lastly, using Quit exits the program. It would be good to test operations in which one or both polynomials are zero. A zero polynomial is made when, during entry, a 0 is the first and only coefficient given, or when it is the result of an operation. Also, to make sure no "1x", "-1x" or "x^1" appears in a written polynomial (these should be "x", "-x", and "x," respectively), try working with polynomials that have these terms. *[V9.IPL.DOCS]POST.1;1+,o./ 4Y-Y"0123KPWO56^ٚ7`ٚ89Jj$GHJ.\" post.man version 1.5 .TH POST LOCAL "2 Oct 1991" .SH NAME post \- news poster .SH SYNOPSIS .B post [ .BI \-n\ newsgroups ] [ .BI \-s\ subject ] [ .BI \-d\ distribution ] [ .BI \-f\ followup-to ] [ .BI \-p\ quote-prefix ] [ .B \- | .I news-article ] .SH DESCRIPTION .I Post posts a news article to Usenet via inews, uux, or mail. Given an optional argument of the name of a file containing a news article, or an argument of `\-' and a news article via stdin, .I post creates a follow-up article, with an attribution and quoted text. .I Post can be invoked as a filter from a newsreader: .RB ` "|post \-" ' would create a followup article to the current article in the newsreader. The newsgroups, subject, distribution, follow-up, and quote-prefix (the default is ` > ') can be specified on the command line. .PP .I Post is compatible with C-News, B-news, and bsnews (Bootstrap News). On systems with inews, the newsgroups and distribution are validated in the appropriate news system files. .SH ENVIRONMENT TheMo VMS.BCKoY"[V9.IPL.DOCS]POST.1;1EXE;1~ environment variable .SM EDITOR overrides the default editor. .SM ORGANIZATION overrides the file /usr/lib/news/organization to specify an optional Organization header. On non-Unix\u\s-3TM\s0\d systems, the environment variable .SM HOST may be used to override the Icon keyword .I &host as the sitename. .SH BUGS The code to validate newsgroups assumes the file /usr/lib/news/active is sorted. .SH AUTHOR Ronald Florence (ron\s-2@\s0mlfarm.com). The code to generate a temporary file name is from Richard Goerwitz (goer\s-2@\s0sophist.uchicago.edu). Options.icn is from the Icon Program Library. s*[V9.IPL.DOCS]PROCS.KWC;1+,Z.Z/ 4ZY-Y"0123KPWO[569Ӛ7(֚89Jj$GHJstatemap.icn table of states and abbreviations commaize.icn add commas to real or integers adlutils.icn process address lists rewrap.icn advanced line rewrap soundex1.icn Soundex algorithm ansi.icn ANSI-based terminal control abkform.icn process HP95LX appointment books bkutil.icn HP95LX phone books and appointment books ifg.icn tell if graphics are running randarea.icn generate random points in areas pdae.icn programmer-defined argument evaluation sortff.icn sortf with multiple field arguments complex.icn perform complex arithmetic largint.icn large integer arithmetic rational.icn arithmetic on rational numbers colmize.icn arrange data into columns progary.icn place program in a array array.icn n-dimensional arrays asciinam.icn ASCII name of unprintable character ebcdic.icn convert between ASCII and EBCDIC tclass.icn classify values as atomic or composite slshupto.icn upto() with backslash escaping slashbal.icn balanced scanning with backslashes slashbal.icn balanced scanning with backslashes basename.icn produce base name of file ansi.icn ANSI-based terminal control gettext.icn gettext (simple text-based routines) ibench.icn support Icon benchmarking colrmodl.icn convert between color models ebcdic.icn convert between ASCII and EBCDIC ispf.icn communicate between Icon and ISPF rexx.icn communicate between Icon and Rexx bincvt.icn convert binary data binocoef.icn binomial coefficient bitint.icn convert integers and bit strings mapbit.icn map string into bit representation bitstr.icn bits in Icon strings bitstrm.icn read and write strings of bits in files intstr.icn create string from bits signed.icn put bits into signed integer unsigned.icn put bits unsigned integer pbkform.icn process HP95 phone book files abkform.icn process HP95LX appointment books bkutil.icn HP95LX phone books and appointment books bkutil.icn phone books and appointment books buffer.icn buffered input and output inserts.icn build tables with duplicate keys wordbyte.icn manipulate words and bytes feval.icn evaluate string as function call calls.icn calls as objects fstartbl.icn produce calls for fractal stars iftrace.icn trace Icon function calls rstartbl.icn produce calls for regular stars wildcard.icn UNIX-like wild-card pattern matching noncase.icn case-independent matching asciinam.icn ASCII name of unprintable character escapesq.icn deal with character string escapes inbits.icn read variable-length characters outbits.icn write variable-length characters strip.icn strip characters from a string ichartp.icn a simple chart parser dif.icn check for differences tclass.icn classify values as atomic or composite evnames.icn produce code/name table evsyms.icn produce code/symbol table identgen.icn meta-variant code generation identgen.icn meta-variant code generation itokens.icn tokenizing Icon code morse.icn convert string to Morse code soundex.icn produce Soundex code for name typecode.icn produce letter code for Icon type evinit.icn event codes typesyms.icn map type codes to event codes typesyms.icn map type codes to event codes binocoef.icn binomial coefficient collate.icn collate and decollate strings colrmodl.icn convert between color models printcol.icn format columnar data colmize.icn arrange data into columns lcomb.icn generate lists of combinations permute.icn permutations, combinations, and such argparse.icn parse pseudo-command-line options.icn get command-line options word.icn scan UNIX-style command line words commaize.icn add commas to real or integers stripcom.icn strip comments from Icon line gcd.icn compute greatest common denominator ispf.icn communicate between Icon and ISPF rexx.icn communicate between Icon and Rexx complete.icn complete partial input string fullimag.icn produce complete image of structured data speedo.icn indcate percentage of completion complex.icn perform complex arithmetic tclass.icn classify values as atomic or composite math.icn perform mathematical computations factorl.icn computing factorials cat.icn concatenate strings everycat.icn generating all concatenations parscond.icn condense parse tree lcseval.icn evaluate linear congruence parameters allof.icn conjunction control operation showtbl.icn show contents of a table allof.icnt|9 z{wyt -/5 8^^Q|nHHj[ tR{:?%2m1hDnXP6$_E8&`oCW00:B>,&d;~cW}9/J.+7D4 Ufz8Ns:YCQ%Lj_ D8cw+x}l(U=)W Y&KPU( ` ihjIb_s|jl{F1@4A{-ar'i?LF"]1V!YGy҂khnpfSd;"HVN;gyR in>u, ÆWc%K @a#G!_$dSzE_TExMOGdr y(EtTN)~v&Avh4bxbL[q8585(84mm.(z/;EH]?[x D{ZBA/J8 P/oN 6j|jEF|OQ]P,axrP58(;7dt2" U8P8cO{pS9]J(#B5Z |.lNzZnrh`q HfX1I*>V. >w VE[Yi<*LGo @3_lNjX)d# H_n}}n>z}aI( #e:F5Y#:)+(NqfD V|w}TxPij[=x <N@bMpaKSjD( )z{IUpj\#q9wzW}* nC9i9TPQ"2puŏBI,r9ƀ͋c\WL<ou++Œ'/EwvgP )?7+coQAZOS]@3q^:<_ DgCr_[Ib,1z@S gU1kf8|@ds%G5R0 E$"&Y?D < |Z Rf;,Or._H|R%x%^ fu)CG;p*hzI @v)htolFbAaj0bKH\. kDyvD!twjIy*,hwEy .3>v!"(g~ N{AlFD HKa{60yD)Xh*#=0?"UH] plRXRyF}^cD6<"z{a5u_{Sbd  tc8i&=AfA2I@s8pSluXoAH+> Rmr=S_H< n}FU?T@sjL"lMeZl cCsUcP~SM!f2b7 ~Ge IZ\4UV|5=~&n3(r8eb@@".4]Iwi1;F e:N(g,20H 8h)J$Dp|CAu+v_ iw; |kR$WtE%*8s :??5) dqg7c4w2zX,~5TsgbJtq".i)/~ 6LQ4(Q'!lW8`$"V?!BhY)9 _#3$rb`ce=`JlI 2`$(wwH`b^=R*I#_m .&gSuIwPdatZ!wc&{mjM^eCI6] B<&L.PyGJJ4,@;slS(FiOR'Y[Pp\g]XLr̈́Em20oUX|YDpszBX1ˣJc[_NLOQ[|R-{b`e_ !Etsa( a[<(R"8ezg`t B};*#_PYc2`4okIy m?]B& .S4o8,`nDVZV,Xhi $ hhcsR6Sq+2"O@\_c+//j6 U#Bgc3HKeLy2 #N]Bmj`vcV?YZn^JlyAB 0C ;gDv"u)O7r&9z%R ;?wYA7OVIq{?'SZ*{y*H0R<DI"nQXB W/Y]ifmUvq7LQ B<*)%A%+A@ h W{s?LlRrEj_|~^-}M-!W`# Pn Yw\,`]F(ITHHO"Y6` .0H-& Tx7r1k\f8{ 1d*TMk6@S@u*mIhjS|oeo q8e<[RZfvZVc+/~Xd:c6n)īS!eJԟ [t$9okVz ^@P"DQV!40|Z0QjX^u6=p U?^r9:~2 aj` P (:Ar(OyK^5g#$`Y+FJx--}g<+em=0S_Zuv1+3V3]vfF2>c1}(cz_2x޲X$T5; pbUl4aj>ll;1lL`?h;y,`$$$O;'6k&p-j)PTgXqn{+HWd0IKT"o cG&MY\WfCa o XooGOZj( {%tkR5C9sqk{lsAtL%YaE]A ot 43r9C2VLTqtDIS4LQT~idfLmud*0qw3+flTY"xGq":$52ynG %R%{jl=]A[\0t a vwH>G2-@x+x}HM2HG NOTcA`j3HkW$9t=2{l>S m<}ZE32N^5VPaB%ZinU }~y|#b4mllxXuO(9fd"Zg).tvq4$5,;j93Q=|}1_.t~eJa>{8aYSbEa[-!|k1*$H`*?3#j?Vb?byc%$p&D C9y )WN*# dv34r,r}SeQ*%ci/q4rSYk3i6/t;.$(3)9w`Ah7?vShU=ku0xiT91uEk)EX*:3s8H'UFSi_oa (C=d Vr'_V 384a!w#[T.r%%ib*L)l38>m'_CJW->]PrG?)T0n$bm0 a]R92y2$k-qv&6ptyr1y9R,kiej#c0y, f_Nh]Q%@ d\FWkQ{}k2@Y u('0{Ob*3jV5?2l)~:r"%(k/Gpl&.c`\m&\@e}L@cZD4;$o2@YPK xBdDt@I>E j*>=cl F`]^ xtk(-H4i Or"1c5yJ2 {?4n /ox;*8[$ N!ybD"% t;"x@os! wl0<31L6Xp :dpX60]#CYU՜p9)$^k.Tx7'WQ-.*R4~Z=gcy0/X L~N/E^Z4&Vzn@ wm7Uoj_gEK1j:063nT{ us Ez@|d_6?f@QAfW:*V@xYk F\-K2>AVhw^'Y/.!m^GY,#ra?BU>gxgtl^]'}H^zA-qI?r_P? =g6wsVn0bbD7aHOsButG;ikQvuf*1 [nF1\uSB =L]Z%eF`v&DLQ\!W&F ;[rl3sqV|5:%Fk8J+Rz)Ff4>[,OY62FI59>JHJ-QuO0X iM+'E wju ub|}Dq(3~nE9H1&k` c^=)eoOgcLW@wj5lY.%{zh]2G_GpYTLrp}f}i^hm\16.kP4jO.- ?r]kQ% 7IGz*Kknjo*~e83P ]h&YxXm-+[.1OU&PQ1`3=Lc=[ )+3# #pUP Gg_d.y C;jvD>Df;$x>fc((y.8(|tG+?6*5rKE}73P7dfUfm1xi65rj0S?tbQ8aj.'pbmIx-s5$9:ykme'h]siQ[8O'O|FmRLUQIXKLuPgAMO5Q,n",YiE43wNoLtei>2ylv$mU ki$,@cJ: aUA C9Js|XsND8%[~k6@6MM1[4&]O]L^K|5]~}HYs?i(v:s#J|o:e`+IbB%]nj}v?^ By$t9oK _rFfq)0Ctprt/T,4-ozIH5 OA{9NkKQl*?D8uFfk6OaUA ; (Atp4}MH}z lg`aH_nr/#$|myD7N{B`Y=7s// K 68_$}%/o<121gFq[NrHR#zY ; g!f)8veb`\x" gMo_ufoMGCt{eE5^I_w9m^%U)s@2w]v|g Tp]C )GlHG5n~C _$v!i8_O$fwUiJSTP|,WtU2Y=<,M[H &VjdAc-DqF%Erpm>`)3Y`F!TfVEL["k5^ uGkYnB&-o@i6cz4^?G|K^QsLxVRA2!fIU)JrJw 8f{JZOOqk;O0n#&.QhN jP_.Aq92#UT}nu"5KACr/obO$]J( 09Bi 6v/d(onlgIF Psqi]7g{]Uy;tX()+SVsEc@CHawD]u9H 2Jg<2a9. e2|7<BJ&YPVlR*a H4+rz&>w#hn \i3}kP elM05 c@kDiS:@qsft=6$h8k*?:u#/D&e<C| *Vc!#[6q&'WLMh}{x(x(3,E3xM l{h,I0#e t851Cw>s14bQa3>pNK Bq[95"VEyn##mCs^dK{yZr+as~?8tQ;fu4O] >8d{di${t$?Ev~)z *)4xbe*_E+U! wO&-wXx<3[K>\1",:yJ>1xnsM/tA}\9 3Nq5dtt8q7DN-Y(C[Cb J|^<Z*%~EW! l ^_yl'"=q8,%G  .D>=mxLd*3+i?a ;vaahN Ur4! v 9Sl/3^XGN 9m}6oX/:9?R )l1 fi8&Vy~Vd?o1R" jqq}R-]11oR!<0n%)M~3:LoXF<},I4&'`H;=v5)8^^Fx=Jkal7Z E3f YXUTju0Gjuvo"V40 WEkn $ud0gM-p;H\]"\155I &4INw3WwN i7 sE1F*uTD%"s( "3}-bAIO|TMJ-],50shx|#\VaK~L8N*FgV@ctc17#J3;%bLU= ?Yym2cqTVWn]}D}{\,r'+,!+&*7ents in the IPP.ICN file provid`= VMS.BCKZY"[V9.IPL.DOCS]PROCS.KWC;1;1Z conjunction control operation ansi.icn ANSI-based terminal control pdco.icn programmer-defined control operations hexcvt.icn hexadecimal conversion radcon.icn radix conversion real2int.icn various real-to-integer conversions bincvt.icn convert binary data bitint.icn convert integers and bit strings colrmodl.icn convert between color models ebcdic.icn convert between ASCII and EBCDIC ivalue.icn convert string to Icon value morse.icn convert string to Morse code numbers.icn format and convert numbers str2toks.icn convert string to tokens fcopy.icn copy a file tokgen.icn token counting intstr.icn create string from bits twt.icn create two-way table readtbl.icn read user-created stripsgml table currency.icn formatting currency curves2.icn generate points on plain curves curves2.icn generate points on plain curves curves2.icn generate points on plain curves isort.icn customizable sorting bincvt.icn convert binary data codeobj.icn encode and decode Icon data colmize.icn arrange data into columns fullimag.icn complete image of structured data printcol.icn format columnar data xcode.icn save and restore Icon data ximage.icn e string image of structured data calendat.icn get date from Julian Day Number date.icn produce date datetime.icn date manipulation calendat.icn get date from Julian Day Number julian.icn produce Julian Day Number escapesq.icn deal with character string escapes decipos.icn position decimal point packunpk.icn pack and unpack decimal strings codeobj.icn encode and decode Icon data object.icn encode and decode Icon values object.icn encode and decode Icon values collate.icn collate and decollate strings pdae.icn programmer-defined argument evaluation pdco.icn programmer-defined control operations gcd.icn compute greatest common denominator dif.icn check for differences array.icn n-dimensional arrays distance.icn compute distance in n-dimensions filedim.icn compute file dimensions graphpak.icn manipulating directed graphs drivedir.icn get directories and drive gdl.icn get directory lists gdisable.icn disable graphics functions distance.icn compute distance in n-dimensions gauss.icn compute Gaussian distributions dosfiles.icn get MS-DOS file names itlibdos.icn MS-DOS termlib-type tools spokes.icn draw spokes drivedir.icn get directories and drive inserts.icn build tables with duplicate keys ebcdic.icn convert between ASCII and EBCDIC capt.icn echo output jumpque.icn jump element to head of queue getpaths.icn generate elements in path environment variable lmap.icn map list elements lpermute.icn permute elements in a list empgsup.icn support empg bold.icn enbolden and underscore text codeobj.icn encode and decode Icon data object.icn encode and decode Icon values object.icn encode and decode Icon values plural.icn produce plural of English noun saytime.icn produce the time in English getpaths.icn generate elements in path environment variable escape.icn interpret Icon literal escapes escapesq.icn deal with character string escapes slshupto.icn upto() with backslash escaping feval.icn evaluate string as function call lcseval.icn evaluate linear congruence parameters pdae.icn programmer-defined argument evaluation evinit.icn event codes typesyms.icn map type codes to event codes findre.icn find regular expression regexp.icn regular-expression pattern matching factorl.icn computing factorials factors.icn factoring sortff.icn sortf with multiple field arguments randfigs.icn generate random figures basename.icn produce base name of file dopen.icn open file on search path dosfiles.icn get MS-DOS file names fcopy.icn copy a file filedim.icn compute file dimensions filename.icn parse file names filetext.icn read text file into a list ftype.icn produce type for file getkeys.icn get keys for a gettext file sentence.icn generate sentences in file tempname.icn get temporary file name bitstrm.icn and write strings of bits in files pbkform.icn process HP95 phone book files findre.icn find regular expression nxtprime.icn find the next prime patword.icn find letter patterns numbers.icn format and convert numbers printcol.icn format columnar data currency.icn formatting currency printf.icn printf-style formatting spirals.icn produce traces of fractal stars fstartbl.icn produce calls for fractal stars spirals.icn produce traces of fractal stars full13th.icn full-moon Friday 13s full13th.icn full-moon Friday 13s feval.icn evaluate string as function call ifncs.icn wrappers for function tracing iftrace.icn trace Icon function calls gdisable.icn disable graphics functions hyperbol.icn hyperbolic functions iscreen.icn screen functions iterfncs.icn recursive functions using iteration memrfncs.icn recursive functions using memory models.icn model Icon functions recrfncs.icn recursive functions usage.icn service functions gauss.icn compute Gaussian distributions curves2.icn generate points on plain curves curves2.icn generate points on plain curves curves2.icn generate points on plain curves gener.icn generate miscellaneous sequences getpaths.icn generate elements in path environment variable wSG. VMS.BCKZY"[V9.IPL.DOCS]PROCS.KWC;1;1ZFlcomb.icn generate lists of combinations ngrams.icn generate n-grams phoname.icn generate letters for phone numbers prime.icn generate prime numbers primel.icn generate prime numbers from list randarea.icn generate random points in areas randfigs.icn generate random figures randseq.icn generate &random sequence ranseq.icn generate random integers over range revadd.icn generate reverse-summed integers rng.icn generate random numbers rstars.icn generate traces of regular stars senten1.icn generate sentences sentence.icn generate sentences in file step.icn generate in real increments symrand.icn generate random points everycat.icn generating all concatenations identgen.icn meta-variant code generation identgen.icn meta-variant code generation randomiz.icn randomize the random number generator gmean.icn compute geometric mean gobject.icn geometrical objects getchlib.icn getch for UNIX adjuncts.icn gettext and idxtext getkeys.icn get keys for a gettext file gettext.icn gettext (simple text-based routines) ngrams.icn generate n-grams glabels.icn produce graph ticks gtrace.icn process graphic traces gdisable.icn disable graphics functions grecords.icn graphics ifg.icn tell if graphics are running graphpak.icn manipulating directed graphs gcd.icn compute greatest common denominator jumpque.icn jump element to head of queue hexcvt.icn hexadecimal conversion hostname.icn produce host name abkform.icn process HP95LX appointment books bkutil.icn HP95LX phone books and appointment books pbkform.icn process HP95 phone book files hyperbol.icn hyperbolic functions bitstr.icn bits in Icon strings codeobj.icn encode and decode Icon data object.icn encode and decode Icon values escape.icn interpret Icon literal escapes ibench.icn support Icon benchmarking identity.icn produce identities for Icon types iftrace.icn trace Icon function calls image.icn produce images of Icon values ipause.icn pause within an Icon program ispf.icn communicate between Icon and ISPF itokens.icn tokenizing Icon code ivalue.icn convert string to Icon value models.icn model Icon functions object.icn encode and decode Icon values rexx.icn communicate between Icon and Rexx seqimage.icn produce string image of Icon result sequence snapshot.icn show snapshot of Icon string scanning stripcom.icn strip comments from Icon line typecode.icn produce letter code for Icon type version.icn produce Icon version number xcode.icn save and restore Icon data large.icn identify large integers identity.icn produce identities for Icon types adjuncts.icn gettext and idxtext ifg.icn tell if graphics are running fullimag.icn produce complete image of structured data seqimage.icn produce string image of Icon result sequence ximage.icn produce string image of structured data image.icn produce images of Icon values step.icn generate in real increments speedo.icn indcate percentage of completion noncase.icn case-independent matching prockind.icn indicate kind of procedure buffer.icn buffered input and output complete.icn complete partial input string largint.icn large integer arithmetic partit.icn partition integer real2int.icn various real-to-integer conversions signed.icn put bits into signed integer unsigned.icn put bits unsigned integer bitint.icn convert integers and bit strings commaize.icn add commas to real or integers large.icn identify large integers ranseq.icn generate random integers over range revadd.icn generate reverse-summed integers escape.icn interpret Icon literal escapes ispf.icn communicate between Icon and ISPF iterfncs.icn recursive functions using iteration jolygs.icn produce traces of ``jolygons'' calendat.icn get date from Julian Day Number julian.icn produce Julian Day Number jumpque.icn jump element to head of queue getkeys.icn get keys for a gettext file inserts.icn build tables with duplicate keys prockind.icn indicate kind of procedure lindgen.icn rewriting 0L-systems lindrec.icn L-systems labeler.icn produce successive labels large.icn identify large integers largint.icn large integer arithmetic lastname.icn produce last name inbits.icn read variable-length characters outbits.icn write variable-length characters patword.icn find letter patterns typecode.icn produce letter code for Icon type phoname.icn generate letters for phone numbers matchlib.icn lexical matching patch.icn UNIX-like patch(1) shquote.icn quote word for UNIX-like shells wildcard.icn UNIX-like wild-card pattern matching argparse.icn parse pseudo-command-line options.icn get command-line options rewrap.icn advanced line rewrap stripcom.icn strip comments from Icon line word.icn scan UNIX-style command line words lcseval.icn evaluate linear congruence parameters modlines.icn produce trace of modular lines readline.icn read and write lines in pieces wrap.icn wrap output lines filetext.icn read text file into a list list2tab.icn write list as tab-separated string lmap.icn map list elements lpermute.icn permute elements in a list lrotate.icn rotate list primel.icn generate prime numbers from list tab2list.icn put tab-separated strings in list weighted.icn shuffle list with randomness xrotate.icn rotate values in list o/R VMS.BCKZY"[V9.IPL.DOCS]PROCS.KWC;1;1Zj+r record adlutils.icn process address lists gdl.icn get directory lists lcomb.icn generate lists of combinations lscan.icn scanning for lists escape.icn interpret Icon literal escapes longstr.icn match longest string lu.icn LU manipulation abkform.icn process HP95LX appointment books bkutil.icn HP95LX phone books and appointment books wordbyte.icn manipulate words and bytes graphpak.icn manipulating directed graphs polystuf.icn manipulating polynomials datetime.icn date manipulation lu.icn LU manipulation matrix.icn matrix manipulation tblset.icn set-theoretic table manipulation tblutil.icn table manipulation lmap.icn map list elements mapbit.icn map string into bit representation mapstr.icn map() for strings opsyms.icn produce table to map opcodes to symbols typesyms.icn map type codes to event codes longstr.icn match longest string matchlib.icn lexical matching noncase.icn case-independent matching patterns.icn SNOBOL4-style pattern matching regexp.icn regular-expression pattern matching wildcard.icn UNIX-like wild-card pattern matching stripunb.icn strip unbalanced material math.icn perform mathematical computations matrix.icn matrix manipulation minmax.icn compute maximum and minimum gmean.icn compute geometric mean mean.icn compute means memrfncs.icn recursive functions using memory identgen.icn meta-variant code generation identgen.icn meta-variant code generation minmax.icn compute maximum and minimum gener.icn generate miscellaneous sequences models.icn model Icon functions scanmodl.icn model string scanning colrmodl.icn convert between color models modlines.icn produce trace of modular lines full13th.icn full-moon Friday 13s pom.icn compute phase of the moon morse.icn convert string to Morse code dosfiles.icn get MS-DOS file names itlibdos.icn MS-DOS termlib-type tools mset.icn multi-sets sortff.icn sortf with multiple field arguments array.icn n-dimensional arrays distance.icn compute distance in n-dimensions ngrams.icn generate n-grams tuple.icn process n-tuples asciinam.icn ASCII name of unprintable character basename.icn produce base name of file evnames.icn produce code/name table hostname.icn produce host name lastname.icn produce last name namepfx.icn produce prefix portion of name procname.icn produce name of procedure soundex.icn produce Soundex code for name tempname.icn get temporary file name title.icn produce title portion of name dosfiles.icn get MS-DOS file names filename.icn parse file names opnames.icn produce opcode/names table nxtprime.icn find the next prime plural.icn produce plural of English noun calendat.icn get date from Julian Day Number julian.icn produce Julian Day Number randomiz.icn randomize the random number generator randreal.icn select random real number in range version.icn produce Icon version number numbers.icn format and convert numbers phoname.icn generate letters for phone numbers prime.icn generate prime numbers primel.icn generate prime numbers from list rational.icn arithmetic on rational numbers rng.icn generate random numbers calls.icn calls as objects gobject.icn geometrical objects opnames.icn produce opcode/names table opsyms.icn produce table to map opcodes to symbols dopen.icn open file on search path allof.icn conjunction control operation pdco.icn programmer-defined control operations structs.icn structure operations options.icn get command-line options orbits.icn produce traces of orbits buffer.icn buffered input and output capt.icn echo output wrap.icn wrap output lines ranseq.icn generate random integers over range packunpk.icn pack and unpack decimal strings lcseval.icn evaluate linear congruence parameters argparse.icn parse pseudo-command-line filename.icn parse file names parscond.icn condense parse tree ichartp.icn a simple chart parser complete.icn complete partial input string partit.icn partition integer pascltri.icn compute a row of Pascal's Triangle patch.icn UNIX-like patch(1) dopen.icn open file on search path getpaths.icn generate elements in path environment variable patterns.icn SNOBOL4-style pattern matching regexp.icn regular-expression pattern matching wildcard.icn UNIX-like wild-card pattern matching patword.icn find letter patterns ipause.icn pause within an Icon program speedo.icn indcate percentage of completion permute.icn permutations, combinations, and such lpermute.icn permute elements in a list pom.icn compute phase of the moon bkutil.icn HP95LX phone books and appointment books pbkform.icn process HP95 phone book files phoname.icn generate letters for phone numbers readline.icn read and write lines in pieces popen.icn pipes progary.icn place program in a array curves2.icn generate points on plain curves curves2.icn generate points on plain curves curves2.icn generate points on plain curves plural.icn produce plural of English noun decipos.icn position decimal point curves2.icn generate points on plain curves curves2.icn generate points on plain curves curves2.icn generate points on plain curves randarea.icn generate random points in areas symrand.icn generate random points xform.icn transform points rpolys.icn produce traces of regular polygons polystuf.icn manipulating polynomials namepfx.icn produce prefix port{ VMS.BCKZY"[V9.IPL.DOCS]PROCS.KWC;1;1Z:ion of name title.icn produce title portion of name decipos.icn position decimal point namepfx.icn produce prefix portion of name nxtprime.icn find the next prime prime.icn generate prime numbers primel.icn generate prime numbers from list printf.icn printf-style formatting prockind.icn indicate kind of procedure procname.icn produce name of procedure scanset.icn setup for string scanning procedures abkform.icn process HP95LX appointment books adlutils.icn process address lists gtrace.icn process graphic traces pbkform.icn process HP95 phone book files tuple.icn process n-tuples ipause.icn pause within an Icon program progary.icn place program in a array pdae.icn programmer-defined argument evaluation pdco.icn programmer-defined control operations argparse.icn parse pseudo-command-line jumpque.icn jump element to head of queue shquote.icn quote word for UNIX-like shells radcon.icn radix conversion randarea.icn generate random points in areas randfigs.icn generate random figures randomiz.icn randomize the random number generator randreal.icn select random real number in range randseq.icn generate &random sequence ranseq.icn generate random integers over range rng.icn generate random numbers symrand.icn generate random points randomiz.icn randomize the random number generator weighted.icn shuffle list with randomness randreal.icn select random real number in range ranseq.icn enerate random integers over range rational.icn arithmetic on rational numbers bitstrm.icn read and write strings of bits in files filetext.icn read text file into a list inbits.icn read variable-length characters readline.icn read and write lines in pieces readtbl.icn read user-created stripsgml table commaize.icn add commas to real or integers randreal.icn select random real number in range real2int.icn various real-to-integer conversions step.icn generate in real increments recog.icn recognition rec2tab.icn write record as string xrotate.icn rotate values in list or record tab2rec.icn put tab-separated strings in records iterfncs.icn recursive functions using iteration memrfncs.icn recursive functions using memory recrfncs.icn recursive functions findre.icn find regular expression regexp.icn regular-expression pattern matching rpolys.icn produce traces of regular polygons rstars.icn generate traces of regular stars rstartbl.icn produce calls for regular stars mapbit.icn map string into bit representation xcode.icn save and restore Icon data seqimage.icn produce string image of Icon result sequence revadd.icn generate reverse-summed integers rewrap.icn advanced line rewrap lindgen.icn rewriting 0L-systems rexx.icn communicate between Icon and Rexx lrotate.icn rotate list xrotate.icn rotate values in list or record gettext.icn gettext (simple text-based routines) pascltri.icn compute a row of Pascal's Triangle ifg.icn tell if graphics are running full13th.icn full-moon Friday 13s xcode.icn save and restore Icon data word.icn scan UNIX-style command line words lscan.icn scanning for lists scanmodl.icn model string scanning scanset.icn setup for string scanning procedures slashbal.icn balanced scanning with backslashes snapshot.icn show snapshot of Icon string scanning iscreen.icn screen functions dopen.icn open file on search path segment.icn segment string randreal.icn select random real number in range senten1.icn generate sentences sentence.icn generate sentences in file list2tab.icn write list as tab-separated string tab2list.icn put tab-separated strings in list tab2rec.icn put tab-separated strings in records randseq.icn generate &random sequence seqimage.icn string image of Icon result sequence gener.icn generate miscellaneous sequences usage.icn service functions tblset.icn set-theoretic table manipulation titleset.icn produce set of titles mset.icn multi-sets scanset.icn setup for string scanning procedures varsub.icn perform UNIX-shell-style substitution shquote.icn quote word for UNIX-like shells showtbl.icn show contents of a table snapshot.icn show snapshot of Icon string scanning shuffle.icn shuffle values weighted.icn shuffle list with randomness signed.icn put bits into signed integer gettext.icn gettext (simple text-based routines) ichartp.icn a simple chart parser snapshot.icn show snapshot of Icon string scanning patterns.icn SNOBOL4-style pattern matching sortff.icn sortf with multiple field arguments isort.icn customizable sorting soundex.icn produce Soundex code for name soundex1.icn Soundex algorithm spokes.icn draw spokes spirals.icn produce traces of fractal stars fstartbl.icn produce calls for fractal stars rstars.icn generate traces of regular stars rstartbl.icn produce calls for regular stars spirals.icn produce traces of fractal stars statemap.icn table of states and abbreviations complete.icn complete partial input string escapesq.icn deal with character string escapes feval.icn evaluate string as function call intstr.icn create string from bits ivalue.icn convert string to Icon value list2tab.icn write list as tab-separated string longstr.icn match longest string mapbit.icn map string into bit representation morse.icn convert string to Morse code rec2tab.icn qX VMS.BCKZY"[V9.IPL.DOCS]PROCS.KWC;1;1ZI write record as string scanmodl.icn model string scanning scanset.icn setup for string scanning procedures segment.icn segment string seqimage.icn produce string image of Icon result sequence snapshot.icn show snapshot of Icon string scanning str2toks.icn convert string to tokens strings.icn string utilities strip.icn strip characters from a string ximage.icn produce string image of structured data bitint.icn convert integers and bit strings bitstr.icn bits in Icon strings bitstrm.icn read and write strings of bits in files cat.icn concatenate strings collate.icn collate and decollate strings mapstr.icn map() for strings packunpk.icn pack and unpack decimal strings tab2list.icn put tab-separated strings in list tab2rec.icn put tab-separated strings in records strip.icn strip characters from a string stripcom.icn strip comments from Icon line stripunb.icn strip unbalanced material readtbl.icn read user-created stripsgml table structs.icn structure operations fullimag.icn produce complete image of structured data ximage.icn produce string image of structured data patterns.icn SNOBOL4-style pattern matching printf.icn printf-style formatting varsub.icn perform UNIX-shell-style substitution word.icn scan UNIX-style command line words varsub.icn perform UNIX-shell-style substitution labeler.icn produce successive labels revadd.icn generate reverse-summed integers empgsup.icn support empg ibench.icn support Icon benchmarking iolib.icn termlib support evsyms.icn produce code/symbol table opsyms.icn duce table to map opcodes to symbols lindgen.icn rewriting 0L-systems lindrec.icn L-systems list2tab.icn write list as tab-separated string tab2list.icn put tab-separated strings in list tab2rec.icn put tab-separated strings in records evnames.icn produce code/name table evsyms.icn produce code/symbol table opnames.icn produce opcode/names table opsyms.icn produce table to map opcodes to symbols readtbl.icn read user-created stripsgml table showtbl.icn show contents of a table statemap.icn table of states and abbreviations tblset.icn set-theoretic table manipulation tblutil.icn table manipulation twt.icn create two-way table inserts.icn build tables with duplicate keys ifg.icn tell if graphics are running tempname.icn get temporary file name ansi.icn ANSI-based terminal control iolib.icn termlib support itlib.icn termlib-type tools itlibdos.icn MS-DOS termlib-type tools bold.icn enbolden and underscore text filetext.icn read text file into a list gettext.icn gettext (simple text-based routines) tblset.icn set-theoretic table manipulation glabels.icn produce graph ticks saytime.icn produce the time in English title.icn produce title portion of name titleset.icn produce set of titles tokgen.icn token counting itokens.icn tokenizing Icon code str2toks.icn convert string to tokens itlib.icn termlib-type tools itlibdos.icn MS-DOS termlib-type tools iftrace.icn trace Icon function calls modlines.icn produce trace of modular lines spirals.icn produce traces of fractal stars gtrace.icn process graphic traces jolygs.icn produce traces of ``jolygons'' orbits.icn produce traces of orbits rpolys.icn produce traces of regular polygons rstars.icn generate traces of regular stars spirals.icn produce traces of fractal stars twists.icn produce traces of ``twists'' ifncs.icn wrappers for function tracing xform.icn transform points parscond.icn condense parse tree pascltri.icn compute a row of Pascal's Triangle tuple.icn process n-tuples twists.icn produce traces of ``twists'' twt.icn create two-way table ftype.icn produce type for file itlib.icn termlib-type tools itlibdos.icn MS-DOS termlib-type tools typecode.icn produce letter code for Icon type typesyms.icn map type codes to event codes identity.icn produce identities for Icon types stripunb.icn strip unbalanced material bold.icn enbolden and underscore text getchlib.icn getch for UNIX patch.icn UNIX-like patch(1) shquote.icn quote word for UNIX-like shells varsub.icn perform UNIX-shell-style substitution wildcard.icn UNIX-like wild-card pattern matching word.icn scan UNIX-style command line words packunpk.icn pack and unpack decimal strings asciinam.icn ASCII name of unprintable character unsigned.icn put bits unsigned integer slshupto.icn upto() with backslash escaping readtbl.icn read user-created stripsgml table iterfncs.icn recursive functions using iteration memrfncs.icn recursive functions using memory strings.icn string utilities ivalue.icn convert string to Icon value object.icn encode and decode Icon values image.icn produce images of Icon values object.icn encode and decode Icon values shuffle.icn shuffle values tclass.icn classify values as atomic or composite xrotate.icn rotate values in list or record getpaths.icn elements in path environment variable inbits.icn read variable-length characters outbits.icn write variable-length characters identgen.icn meta-variant code generation identgen.icn meta-variant code generation real2int.icn various real-to-integer conversions version.icn produce Icon version number twt.icn create two-way table wildcard.icn UNIX-like wild-card pattern matching escapesq.icn deal with character string escapes inserts.icn build tables with duplic<4 VMS.BCKZY"[V9.IPL.DOCS]PROCS.KWC;1;1ZәXate keys slashbal.icn balanced scanning with backslashes slshupto.icn upto() with backslash escaping sortff.icn sortf with multiple field arguments weighted.icn shuffle list with randomness ipause.icn pause within an Icon program shquote.icn quote word for UNIX-like shells word.icn scan UNIX-style command line words wordbyte.icn manipulate words and bytes wrap.icn wrap output lines ifncs.icn wrappers for function tracing bitstrm.icn read and write strings of bits in files list2tab.icn write list as tab-separated string outbits.icn write variable-length characters readline.icn read and write lines in pieces rec2tab.icn write record as string a*[V9.IPL.DOCS]PROGS.KWC;1+,[.K/ 4KK?-Y"0123KPWOL56@1֚7Kך89Jj$GHJadlcheck.icn check for bad address list data adlcount.icn count address list entries adlfiltr.icn filter address list entries adllist.icn list address list fields adlsort.icn sort address list entries envelope.icn address envelopes adlfirst.icn write first line of addresses unique.icn delete identical adjacent lines diffsum.icn count lines affected by a diff when.icn show file age memsum.icn tabulate memory allocation diffn.icn show differences among files animal.icn play ``animal'' guessing game qt.icn announce time in English papply.icn apply procedure to lines of file genqueen.icn solve arbitrary-size n-queens problem press.icn archive files shar.icn create UNIX shell archive parsex.icn parse arithmetic expressions colm.icn arrange data into columns reply.icn reply to news-articles or mail icvt.icn ASCII/EBCDIC program conversion c2icn.icn assist C-to-Icon porting icn2c.icn assist Icon-to-C porting adlcheck.icn check for bad address list data parens.icn produce random balanced strings banner.icn display banner graphdem.icn demonstrate simple bar graphics ibar.icn equalize comment bars in Icon programs idxtext.icn creating indexed text-base based.icn do BASIC-style editing fixpath.icn replace path in a binary file fixhqx.icn strip headers from BinHex files verse.icn generate bizarre verses bj.icn play blackjack game pbkdump.icn dump HP95 phone book file deal.icn deal bridge hands ibrow.icn browse Icon files for declarations c2icn.icn assist C-to-Icon porting cstrings.icn print strings in C files icn2c.icn assist Icon-to-C porting calc.icn simulate desk calculator icalc.icn simulate infix desk calculator hcal4unx.icn Jewish/Civil calendar in UNIX hebcalen.icn combination Jewish/Civil calendar callcnt.icn count calls icalls.icn tabulate Icon calls findstr.icn find embedded character strings ruler.icn write a character ruler xtable.icn show character code translations delamc.icn delaminate file using tab characters fileprnt.icn display characters in file tablc.icn tabulate characters in a file adlcheck.icn check for bad address list data sing.icn sing The Twelve Days of Christmas hcal4unx.icn Jewish/Civil calendar in UNIX hebcalen.icn combination Jewish/Civil calendar identgen.icn meta-variant code generation isrcline.icn count code lines in Icon program iwriter.icn write Icon code to write input morse.icn convert string to Morse code xtable.icn show character code translations zipsort.icn sort mailing labels by ZIP code evsum.icn tabulate event codes huffstuf.icn huffman coding ipldoc.icn collect library documentation colm.icn arrange data into columns hebcalen.icn combination Jewish/Civil calendar setmerge.icn combine sets of text items missile.icn play missile command game detex.icn strip LaTeX commands roffcmds.icn list roff commands and macros ibar.icn equalize comment bars in Icon programs istrip.icn strip comments from Icon program comfiles.icn list common files in two directories gcomp.icn produce complement of file specification concord.icn produce concordance knapsack.icn fill a container csgen.icn generate context-sensitive sentences kwic.icn produce keywords in context pargen.icn generate context-free parser recgen.icn generate context-free recognizer cvtsum.icn count conversion event tuples icvt.icn ASCII/EBCDIC program conversion conman.icn convert units filecnvt.icn convert line terminators morse.icn convert string to Morse code nocr.icn convert MS-DOS text files to UNIX textcvt.icn convert text file formats yescr.icn convert UNIX files to DOS format adlcount.icn count address list entries callcnt.icn count calls countlst.icn count items in a list cvtsum.icn count conversion event tuples diffsum.icn count lines affected by a diff isrcline.icn count code lines in Icon program tokgen.icn token counting toktab.icn summarize Icon token counts itags.icn create tags file for Icon programs puzz.icn create word search puzzle shar.icn create UNIX shell archivyD$ VMS.BCK[Y"[V9.IPL.DOCS]PROGS.KWC;1;1Kj e splitlit.icn create string literal idxtext.icn creating indexed text-base ilnkxref.icn produce Icon link cross reference ipxref.icn cross reference Icon program cwd.icn write current working directory adlcheck.icn check for bad address list data colm.icn arrange data into columns sing.icn sing The Twelve Days of Christmas deal.icn deal bridge hands duplproc.icn find duplicate declarations ibrow.icn browse Icon files for declarations iidecode.icn decode text in style of uudecode delam.icn delaminate file delamc.icn delaminate file using tab characters unique.icn delete identical adjacent lines graphdem.icn demonstrate simple bar graphics polydemo.icn demonstrate polynomial library wshfdemo.icn demonstrate weighted shuffle procedure idepth.icn report maximum recursion depth calc.icn simulate desk calculator icalc.icn simulate infix desk calculator diffsort.icn reorder "diff" output diffsum.icn count lines affected by a diff gediff.icn ``diff'' for use with ged delta.icn first difference of sequence diffn.icn show differences among files diffu.icn show differences in files diffword.icn list different words comfiles.icn list common files in two directories duplfile.icn find directories with same files cwd.icn write current working directory diskpack.icn produce packing list for diskettes banner.icn display banner cross.icn display intersection of words fileprnt.icn display characters in file ranstars.icn display ``star'' field vnq.icn display solutions to n-queens problem based.icn do BASIC-style editing fset.icn do set operations on file specifications scramble.icn scramble a document ipldoc.icn collect library documentation nocr.icn convert MS-DOS text files to UNIX yescr.icn convert UNIX files to DOS format pbkdump.icn dump HP95 phone book file duplproc.icn find duplicate declarations icvt.icn ASCII/EBCDIC program conversion edscript.icn produce script for ed(1) based.icn do BASIC-style editing igrep.icn string search similar to egrep findstr.icn find embedded character strings iiencode.icn encode text in the style of uuencode crypt.icn encrypt file hebeng.icn print mixed Hebrew/English text qt.icn announce time in English itab.icn entab an Icon program adlcount.icn count address list entries adlfiltr.icn filter address list entries adlsort.icn sort address list entries envelope.icn address envelopes ibar.icn equalize comment bars in Icon programs irunerr.icn print Icon runtime errors empg.icn make expression-evaluation programs cvtsum.icn count conversion event tuples evsum.icn tabulate event codes evstream.icn show events empg.icn make expression-evaluation programs interpe.icn interpret Icon expressions parsex.icn parse arithmetic expressions farb2.icn generate Farberisms farb2.icn generate Farberisms ranstars.icn display ``star'' field adllist.icn list address list fields crypt.icn encrypt file delam.icn delaminate file delamc.icn delaminate file using tab characters fileprnt.icn display characters in file filesect.icn produce section of a file fixpath.icn replace path in a binary file fset.icn do set operations on file specifications gcomp.icn produce complement of file specification itags.icn create tags file for Icon programs latexidx.icn process LaTeX idx file loadmap.icn show load map of UNIX object file longest.icn write longest line in a file mtf3.icn map tar file newsrc.icn organize UNIX .newsrc file papply.icn apply procedure to lines of file pbkdump.icn dump HP95 phone book file shortest.icn write shortest line in a file shuffile.icn shuffle lines in a file tablc.icn tabulate characters in a file tablw.icn tabulate words in a file textcnt.icn tabulate properties of text file textcvt.icn convert text file formats trim.icn trim lines in a file when.icn show file age comfiles.icn list common files in two directories cstrings.icn print strings in C files diffn.icn show differences among files diffu.icn show differences in files duplfile.icn find directories with same files fixhqx.icn strip headers from BinHex files ibrow.icn browse Icon files for declarations ilump.icn lump linked Icon source files imagetyp.icn show types of image files ipsplit.icn split Icon program into files lam.icn laminate files nocr.icn convert MS-DOS text files to UNIX pack.icn package multiple files press.icn archive files unpack.icn unpackage files yescr.icn convert UNIX files to DOS format knapsack.icn fill a container adlfiltr.icn filter address list entries filter.icn skeleton for generic filter duplfile.icn find directories with same files duplproc.icn find duplicate declarations findstr.icn find embedded character strings iundecl.icn find undeclared Icon identifiers makepuzz.icn make find-the-word puzzle adlfirst.icn write first line of addresses delta.icn first difference of sequence labels.icn format mailing labels yescr.icn convert UNIX files to DOS format textcvt.icn convert text file formats paginate.icn insert formfeeds proto.icn show Icon syntactic forms pargen.icn generate context-free parser recgen.icn generate context-free recognizer fnctab.icn list function usage fnctmpl.icn produce function templates fuzz.icn perform fuzzy pattern matching animal.icn play ``animal'' guessing game bj.L | VMS.BCK[Y"[V9.IPL.DOCS]PROGS.KWC;1;1K"icn play blackjack game hr.icn play horse-race game missile.icn play missile command game nim.icn play the game of nim snake.icn play the snake game gediff.icn ``diff'' for use with ged csgen.icn generate context-sensitive sentences farb2.icn generate Farberisms farb2.icn generate Farberisms miu.icn generate strings from MIU system monkeys.icn generate random text pargen.icn generate context-free parser queens.icn generate solutions to the n-queens problem recgen.icn generate context-free recognizer rsg.icn generate randomly selected sentences verse.icn generate bizarre verses identgen.icn meta-variant code generation pt.icn produce parse table generator filter.icn skeleton for generic filter findtext.icn stub for gettext.icn ihelp.icn give on-line help for Icon graphdem.icn demonstrate simple bar graphics grpsort.icn sort groups of lines animal.icn play ``animal'' guessing game deal.icn deal bridge hands fixhqx.icn strip headers from BinHex files iheader.icn list Icon program library headers hebeng.icn print mixed Hebrew/English text ihelp.icn give on-line help for Icon hr.icn play horse-race game pbkdump.icn dump HP95 phone book file huffstuf.icn huffman coding hufftab.icn compute Huffman state transitions findtext.icn stub for gettext.icn psrsplit.icn separate psrecord.icn output pages iversion.icn show icode version c2icn.icn assist C-to-Icon porting ibar.icn equalize comment bars in Icon programs ibrow.icn browse Icon files for declarations icalls.icn tabulate Icon calls icn2c.icn assist Icon-to-C porting icontent.icn list Icon procedures iheader.icn list Icon program library headers ihelp.icn give on-line help for Icon ilnkxref.icn produce Icon link cross reference ilump.icn lump linked Icon source files ineeds.icn print modules required by an Icon program interpe.icn interpret Icon expressions interpp.icn interpret Icon programs ipp.icn preprocess Icon programs iprint.icn print Icon program iprofile.icn profile Icon procedure usage ipsort.icn sort Icon procedures ipsplit.icn split Icon program into files ipxref.icn cross reference Icon program irunerr.icn print Icon runtime errors isrcline.icn count code lines in Icon program istrip.icn strip comments from Icon program itab.icn entab an Icon program itags.icn create tags file for Icon programs iundecl.icn find undeclared Icon identifiers iwriter.icn write Icon code to write input profile.icn profile Icon programs proto.icn show Icon syntactic forms toktab.icn summarize Icon token counts unique.icn delete identical adjacent lines iundecl.icn find undeclared Icon identifiers latexidx.icn process LaTeX idx file imagetyp.icn show types of image files patchu.icn implement UNIX-like patch idxtext.icn creating indexed text-base icalc.icn simulate infix desk calculator literat.icn manage literature information iwriter.icn write Icon code to write input paginate.icn insert formfeeds interpe.icn interpret Icon expressions interpp.icn interpret Icon programs lisp.icn interpret LISP programs cross.icn display intersection of words kross.icn show intersections of strings countlst.icn count items in a list setmerge.icn combine sets of text items hcal4unx.icn Jewish/Civil calendar in UNIX hebcalen.icn combination Jewish/Civil calendar kwic.icn produce keywords in context krieg.icn play kriegspiel labels.icn format mailing labels zipsort.icn sort mailing labels by ZIP code lam.icn laminate files sortname.icn order by last name detex.icn strip LaTeX commands latexidx.icn process LaTeX idx file iheader.icn list Icon program library headers ipldoc.icn collect library documentation polydemo.icn demonstrate polynomial library patchu.icn implement UNIX-like patch adlfirst.icn write first line of addresses filecnvt.icn convert line terminators ihelp.icn give on-line help for Icon longest.icn write longest line in a file shortest.icn write shortest line in a file diffsum.icn count lines affected by a diff grpsort.icn sort groups of lines isrcline.icn count code lines in Icon program papply.icn apply procedure to lines of file shuffile.icn shuffle lines in a file trim.icn trim lines in a file unique.icn delete identical adjacent lines ilnkxref.icn produce Icon link cross reference ilump.icn lump linked Icon source files lisp.icn interpret LISP programs adlcheck.icn check for bad address list data adlcount.icn count address list entries adlfiltr.icn filter address list entries adllist.icn list address list fields adllist.icn list address list fields adlsort.icn sort address list entries comfiles.icn list common files in two directories countlst.icn count items in a list diffword.icn list different words diskpack.icn produce packing list for diskettes fnctab.icn list function usage icontent.icn list Icon procedures iheader.icn list Icon program library headers roffcmds.icn list roff commands and macros splitlit.icn create string literal literat.icn manage literature information loadmap.icn show load map of UNIX object file longest.icn write longest line in a file ilump.icn G VMS.BCK[Y"[V9.IPL.DOCS]PROGS.KWC;1;1K+ lump linked Icon source files turing.icn simulate a Turing machine roffcmds.icn list roff commands and macros mr.icn read mail reply.icn reply to news-articles or mail labels.icn format mailing labels zipsort.icn sort mailing labels by ZIP code empg.icn make expression-evaluation programs makepuzz.icn make find-the-word puzzle mkpasswd.icn make passwords literat.icn manage literature information loadmap.icn show load map of UNIX object file mtf3.icn map tar file fuzz.icn perform fuzzy pattern matching idepth.icn report maximum recursion depth memsum.icn tabulate memory allocation identgen.icn meta-variant code generation missile.icn play missile command game miu.icn generate strings from MIU system hebeng.icn print mixed Hebrew/English text ineeds.icn print modules required by an Icon program morse.icn convert string to Morse code nocr.icn convert MS-DOS text files to UNIX pack.icn package multiple files genqueen.icn solve arbitrary-size n-queens problem queens.icn generate solutions to the n-queens problem vnq.icn display solutions to n-queens problem sortname.icn order by last name post.icn post news reply.icn reply to news-articles or mail newsrc.icn organize UNIX .newsrc file nim.icn play the game of nim loadmap.icn show load map of UNIX object file fset.icn do set operations on file specifications sortname.icn order by last name newsrc.icn organize UNIX .newsrc file diffsort.icn reorder "diff" output psrsplit.icn separate psrecord.icn output pages pack.icn package multiple files diskpack.icn produce packing list for diskettes psrsplit.icn separate psrecord.icn output pages parse.icn parse simple statements parsex.icn parse arithmetic expressions pt.icn produce parse table generator pargen.icn generate context-free parser mkpasswd.icn make passwords patchu.icn implement UNIX-like patch fixpath.icn replace path in a binary file fuzz.icn perform fuzzy pattern matching pbkdump.icn dump HP95 phone book file animal.icn play ``animal'' guessing game bj.icn play blackjack game hr.icn play horse-race game krieg.icn play kriegspiel missile.icn play missile command game nim.icn play the game of nim snake.icn play the snake game solit.icn play solitaire ttt.icn play tic-tac-toe yahtz.icn play yahtzee polydemo.icn demonstrate polynomial library c2icn.icn assist C-to-Icon porting icn2c.icn assist Icon-to-C porting post.icn post news ipp.icn preprocess Icon programs cstrings.icn print strings in C files hebeng.icn print mixed Hebrew/English text ineeds.icn print modules required by an Icon program iprint.icn print Icon program irunerr.icn print Icon runtime errors iprofile.icn profile Icon procedure usage papply.icn apply procedure to lines of file wshfdemo.icn demonstrate weighted shuffle procedure icontent.icn list Icon procedures ipsort.icn sort Icon procedures latexidx.icn process LaTeX idx file utrim.icn remove unneeded procs from ucode iprofile.icn profile Icon procedure usage profile.icn profile Icon programs icvt.icn ASCII/EBCDIC program conversion iheader.icn list Icon program library headers ineeds.icn modules required by an Icon program iprint.icn print Icon program ipsplit.icn split Icon program into files ipxref.icn cross reference Icon program isrcline.icn count code lines in Icon program istrip.icn strip comments from Icon program itab.icn entab an Icon program empg.icn make expression-evaluation programs ibar.icn qualize comment bars in Icon programs interpp.icn interpret Icon programs ipp.icn preprocess Icon programs itags.icn create tags file for Icon programs lisp.icn interpret LISP programs profile.icn profile Icon programs textcnt.icn tabulate properties of text file psrsplit.icn separate psrecord.icn output pages makepuzz.icn make find-the-word puzzle puzz.icn create word search puzzle genqueen.icn solve arbitrary-size n-queens problem queens.icn generate solutions to the n-queens problem vnq.icn display solutions to n-queens problem hr.icn play horse-race game monkeys.icn generate random text parens.icn produce random balanced strings rsg.icn generate randomly selected sentences format.icn word wrap a range of text mr.icn read mail recgen.icn generate context-free recognizer idepth.icn report maximum recursion depth ilnkxref.icn produce Icon link cross reference ipxref.icn cross reference Icon program utrim.icn remove unneeded procs from ucode diffsort.icn reorder "diff" output fixpath.icn replace path in a binary file reply.icn reply to news-articles or mail idepth.icn report maximum recursion depth repro.icn self-reproduce ineeds.icn print modules required by an Icon program roffcmds.icn list roff commands and macros ruler.icn write a character ruler irunerr.icn print Icon runtime errors duplfile.icn find directories with same files scramble.icn scramble a document edscript.icn produce script for ed(1) igrep.icn string search similar to egrep puzz.icn create word search puzzle filesect.icn produce section of a file rsg.icn generate randomly selected sentences repro.icn R VMS.BCK[Y"[V9.IPL.DOCS]PROGS.KWC;1;1Ki: self-reproduce csgen.icn generate context-sensitive sentences csgen.icn generate context-sensitive sentences rsg.icn generate randomly selected sentences psrsplit.icn separate psrecord.icn output pages delta.icn first difference of sequence fset.icn do set operations on file specifications setmerge.icn combine sets of text items strpsgml.icn strip/translate SGML tags shar.icn create UNIX shell archive shortest.icn write shortest line in a file diffn.icn show differences among files diffu.icn show differences in files evstream.icn show events imagetyp.icn show types of image files iversion.icn show icode version kross.icn show intersections of strings loadmap.icn show load map of UNIX object file proto.icn show Icon syntactic forms when.icn show file age xtable.icn show character code translations shuffile.icn shuffle lines in a file wshfdemo.icn demonstrate weighted shuffle procedure igrep.icn string search similar to egrep graphdem.icn demonstrate simple bar graphics parse.icn parse simple statements calc.icn simulate desk calculator icalc.icn simulate infix desk calculator turing.icn simulate a Turing machine sing.icn sing The Twelve Days of Christmas genqueen.icn solve arbitrary-size n-queens problem filter.icn skeleton for generic filter snake.icn play the snake game solit.icn play solitaire queens.icn generate solutions to the n-queens problem vnq.icn display solutions to n-queens problem genqueen.icn solve arbitrary-size n-queens problem adlsort.icn sort address list entries grpsort.icn sort groups of lines ipsort.icn sort Icon procedures zipsort.icn sort mailing labels by ZIP code ilump.icn lump linked Icon source files gcomp.icn produce complement of file specification fset.icn do set operations on file specifications ipsplit.icn split Icon program into files ranstars.icn display ``star'' field hufftab.icn compute Huffman state transitions parse.icn parse simple statements igrep.icn string search similar to egrep morse.icn convert string to Morse code splitlit.icn create string literal cstrings.icn print strings in C files findstr.icn find embedded character strings kross.icn show intersections of strings miu.icn generate strings from MIU system parens.icn produce random balanced strings detex.icn strip LaTeX commands fixhqx.icn strip headers from BinHex files istrip.icn strip comments from Icon program strpsgml.icn strip/translate SGML tags findtext.icn stub for gettext.icn based.icn do BASIC-style editing iidecode.icn decode text in style of uudecode iiencode.icn encode text in the style of uuencode toktab.icn summarize Icon token counts proto.icn show Icon syntactic forms miu.icn generate strings from MIU system delamc.icn delaminate file using tab characters pt.icn produce parse table generator evsum.icn tabulate event codes icalls.icn tabulate Icon calls memsum.icn tabulate memory allocation tablc.icn tabulate characters in a file tablw.icn tabulate words in a file textcnt.icn tabulate properties of text file ttt.icn play tic-tac-toe itags.icn create tags file for Icon programs strpsgml.icn strip/translate SGML tags mtf3.icn map tar file fnctmpl.icn produce function templates filecnvt.icn convert line terminators format.icn word wrap a range of text hebeng.icn print mixed Hebrew/English text idxtext.icn creating indexed text-base iidecode.icn decode text in style of uudecode iiencode.icn encode text in the style of uuencode monkeys.icn generate random text nocr.icn convert MS-DOS text files to UNIX setmerge.icn combine sets of text items textcnt.icn tabulate properties of text file textcvt.icn convert text file formats ttt.icn play tic-tac-toe qt.icn announce time in English ttt.icn play tic-tac-toe tokgen.icn token counting toktab.icn summarize Icon token counts hufftab.icn compute Huffman state transitions strpsgml.icn strip/translate SGML tags xtable.icn show character code translations trim.icn trim lines in a file cvtsum.icn count conversion event tuples turing.icn simulate a Turing machine sing.icn sing The Twelve Days of Christmas comfiles.icn list common files in two directories imagetyp.icn show types of image files utrim.icn remove unneeded procs from ucode iundecl.icn find undeclared Icon identifiers conman.icn convert units hcal4unx.icn Jewish/Civil calendar in UNIX loadmap.icn show load map of UNIX object file newsrc.icn organize UNIX .newsrc file nocr.icn convert MS-DOS text files to UNIX patchu.icn implement UNIX-like patch shar.icn create UNIX shell archive yescr.icn convert UNIX files to DOS format utrim.icn remove unneeded procs from ucode unpack.icn unpackage files fnctab.icn list function usage iprofile.icn profile Icon procedure usage delamc.icn delaminate file using tab characters iidecode.icn decode text in style of uudecode iiencode.icn encode text in the style of uuencode identgen.icn meta-variant code generation verse.icn generate bizarre verses iversion.icn show icode version wshfdemo.icn demonstrate weighted shuffle procedure duplfile.icn find directories with same files gediff.ycD1 XI VY :T ANNIM]SLzJ\@@P)M@?X]rFDW% &T}Fp gwb9i^DEY^H@&~B [D =F=,S%JYZ  ZULUBPW9)SmUT[ IOYEB-4vlTM J-)_]WGG@\BR@EE@W_`tDD|\Je.y59E! R \MN[LL[@EJC;X JMK h ]V/VH XMK_\/a I 6=Q [^S.0D6WH_AH$[MT{^VKUl B)Xy[]^?YQSUToQF3@Q6 R W VbW=]$<3 9BVf}FTSP v GZS= _PhTOK\t!HU/ @}We{L?)Dh`LH,J_E!NTKtYRDI;HH;HEbk]qSKWOF7cUg."9WqRl\\DEHK=FYFXVJ"w(-UPvAP\L KY<NOA^[X|lv 'bEFY@MMOL{60h TSc% Zdvqim Ze0`;29RC@Q@YaT@R  B SJ4_G 6NH\ kM#<\8|L YV~ C  $` A{6S_+U\ [T xVT G_[XA$^[C]qdT) [GV@B O?U EFTF$CTqqC*F HN +JLG^GZ ]RT[]MF l= U{ k F T vaI^"ZSPKjQNQJE\ZNGRFH8^ G[C1~Y POL)hJ }cC]EK-]Nl_NwSK=MIU'TM  qA $)H7XaSU<d3HKWX! SUO W]AFB+@<2JJ/HK Lg SWM_chi,JMB[ PD1Z576esv;x`kb_sb7rrip5nzl!o9q`s5 #z1nf-6yq+<-_xh`P$91_DX.d93|wzz&d9 4t9[T*Pj>dbKu+|ish`jSp3~;#&j^">h YL^#)?x /20 J}'x ?z X$'8r)pd/eq W=1>y(o}?zyGy|dm'@10= r4xl#&'0.*1=i$t!kM!M:O.e/{G643wqk"cU5Ti1D=cmi¯,q7bBColgb'rn<7z9Hd/|#n>'3dky65%+ /,uH;8 p0a(1]vpdeNn=+W2@ D J^C-C RCK/|@RX4XA_AM}},Vj;cA[AIXD 0WMT_NQ]+{}W G^2 z"o%JNP6 LI)?21*vA'ME \#\SEJL Vz YM M V R :POR\j]P YE Rx :NUJELOH[lIEQ VG 5u0fD+Wv@7YCW X3rr33]Z n]]UKRWO(fe!KO}= H;]"GP_TVOJw L>'xvH~XDJ^Z_ N V HqPP De_aRG[HYSA B\1%*GxLU=LssWK[UNLTXMK(z%v QXY4->}V[^AD9WCOTR|EFoU {YE-AZZjvLHDC. OMfAV LAW{0d0L@NN*T@ $3d[rmt QfUKwQSt t3TE^^ \B[ G?u@vWPa@KF/,iaPqR9CINmfP_DP^YO@^ S|QHH* (6y@uew\AF~0BK & WI@F_D EDFWM^ MLwBu=\G'BC)Z O1a_r3IP^@DZRSK^nZJR`G@z2ZBEY!W\^qHDG "?Zj Y O[Up KN3MM [JFPZS|wVd8Ct0KXN rVO`j'+P4~)%Z\J:h@P^iNw^IdUKWH^u&HWS}r LF_>SD[aOTlEH7HaWSZY UYRNNITZ| C\I|cGQ#MQ 9nG^ TW[F,]RV_DOUJL7_O5U?2T vAW XDKOF wVSVULD+*R K0IUK~9I^ GfR-L HZHz=^3),_;{K1b%dEH`xGh$ly!K`hj6(Q%/$O4AB\{R, \LX_mV#]UwlCUYf*8eM(G!FkL_1DNCt?BUPJ ]| > S1 SXRE8`)19Vn L8>Y]:{{O 9O?K6_SxGM_RDTF  _dG E.\9A\[,iC]C MB_M `PM$b]}~`4W URr7QWqVS Y'VACB*6^EV[@V@ZG%I NUa])U)&2*;2SJBW|w`8O XLE5o!-&1*=ZNVG^RHDNSM]poS LJ`P_Z?7s.EG5 B*&q^4_I[pDZE Q>Y0K N\KRp' h[.WE A\YI. HEOiH`xA*jl9`&U[IOTJ~EzDf(:;]T[-]{@L*D WIkLH@W*G]EElZxrUR fW2JKX","JEZWOV LKLMQW#N*_+ Xg\ _"W_KFL#*ACAuM gYIZ mHPN|KuQrhRhJ\G+ N &PI^oQ_\E,fXg@y{RV&v%yT caS^ tH=D[PNP{O  ;Z M>NcZ~Pf3K06uP89R^T@[\5e@'BB7j>"H8Z|FEMnVH8JNQuABP1>PIVPuQA66@Ki"jk_QNZA VYJSFMSzPYBML"[OQk a,Xu6RL ?Bi0\S KF?|pIIGYK :#.?] V_G  HcVCF[B [ "`YXC YMFc`KhM 5SLZjCg0V~EF4{&Bf [D{ PIn&\ me\J)q& xOFjJl %-TYTV:Yf*ZzDL QiM WwbXEBM* w]c'FG1XmXF(BDH{EQ^f?VW(ADM[EOBxW?5G2UFXKeB^`I[DWG F 5BRG7.>DVb@b:]HKReYFPf@ IL5F ]VJ@3x"0yW/N] `*=[PFV\3LLH nCHO =MT]X (5`PHFSE 6jHJNSZu}nw BvJ/U\2aAlC?VgUVK_I EgV_.u5u AB@//dOMERHSWN;dQyy P>CH!qVXH9UBSTAKC;8.CVpGCX XTES]\AV<ZB/X&CQr^SqFV0QH\% iZz@UC(@XYDRVI9IvI@N\n 3W 7EPJrrI@.X j^PC{M <RGO2mMZXb'(&2x#!0dm [URY5[K^Gg dI8pf_ SfM ^DR IZwl1[pPF6<[[=O]GC>E*HKSs a[5HX,TM+(yk.R C"3 FkCgND]E_NQZ=|-#7=YSS_^5@OD\iRjx`QJFMKSLGC^FD&F/vER%Bz S\/.Q1MuTSZN ^RINYB6Z^ |A3 ]@L=WaQ5IRNWy9.=-ce ZJ@OQ`WIl@1@/;WQ&M4N~X6R#:@Y _GPKoQ SQvF5NP VP` GzG[#SL)iN] aL.8bGR E!IM PZP-GC9sUP AHI*}OLL H1RXsvYRiPADs|k9L@L`@YP \OB YdX05BK9B#Q\[GHWC9YOQQ:EKXSK1 J \V;V@IsO['O\kHT_bXX]G Rq[RFFM^RG^w[TZSHAQ_MiRk\ZrM}]SvR RNCVamiB* oY^mPJ/')RKN~I \NIyBT7%\wN [dm~URJA}=uTc R\ZlmH]LYEeM`+%6\P(2%LIAB>AY RzC\ K G T^, \]XL3^_&gQG6Ov ]DD IoXXrj;Z-Z@_T zo:l B &gIIs''Q@R3DMu6BS@Z8EN[gY-|RLI EIcm-NR!U[[cMb[[ FZU5\W b a[Z\W KON@t.`zmAW6 YmN|,}S[M4SY EZ \_~YD@P@BqUKOK QI z1b {]Z#MO!0 b7UTaU^  Z Ta TsVR ^(KT*/rj,}RQ}L[\\W>IDKNI Z@W% FB5JWDxtU^m@TU4 F{h LQyw3MiPOpE;.VW_=GL@] QOE mc_>hDSx QQ vS5$:lGC [ZXqCENB -K TcgP:4XUH Ey8^MN]@i@ FgcQYC,_ @\ Yn*b3_Y)+*c4>5`l Y`w!UQO9BOnBP^tp=\C G9XSK(7IDOI/'q3O 6X\YsED7w)Q^ FW#VPZWX QGNFIY1mw0.sRJM&]Om[QRB CgER(l TV[M{i2E^GTHL:Q PI(J #?QVQ#EHLTdGt\ !n7B\_Q{GBhU]RLJH A RX'VQQ [ -oXb TM\[$0TBKBu"[qU 4G_t7~7QcTem_{8 S_Rt] P]\g+DPYUkX p\N8L6ZS _GXf L[KfIPZ CuPCOkt \EDMw`3ENNsJK^|;gL_LCK/[ vE &O%{[@OU2 t'Q-nbHG " U _NIb U`E@HV_N]GD } V\NqY8Y%:bgj~$VB KpZ CY]WUVY0 Ym(}^'Lu Z;O;iDG ac~{ATVCWR%1oH;cZ(9vZaCDZRPAJqOiX~^&REVOJch` PP Fh- D\Y^rPy V\i(/2LyIFQ8!!Yfq^@&_MxGSBNh J )v}6#:L-11LH7s(vAA[@ IZgu"S ]}F"R;SntUuQTi `u\;q+aYEXSBRIW[P8REYCn@JP$:M/Y*gdVn'_\.YAT ,|t}nS z]P[L X9iCZjD,ASltIQRfRRZ;u*!Bs[]DVI_I*KW5 ?ZHXV~W8FDN7WEKI/[gQNMBe*T]PtHT!X33DNVC|XKmHDVQ V%+-nIPS\PB)Su6dOFnFI$pJc(=RJSUIW=RI Xp"'YJO?X]vHKRzLKOC\ NUB@_GD T#u ZUQR(J %U UdxH (GW|SNI ]+_,ICMC[S "D Sl"G'C -Tw(KC9 0V\ NXB N]KV]TP? qquh-*Y DX>mo >*=PRPZ C #^nILCOPyw^_aXE(GQTB NND>y uNo8DCCNALuR&I*WL HIGR^orTJE e^D WJ^&}QB Mk](LV'\PD?S ;DO~ T/O_;^ $BBZSV\A ^ O]beT(DUU>/VE.  BL ! EANGOT@ERWD[OSX% =4W_Wc|z]0WfCK^ZX]J)41> '3|gg&*yhoi$e/*zsct*A=.g?-+PqsKu8-:"Vub5"H&r-`&/}s4-o'?+#,lj|+<1&oH m2dl'ey7=+7(.0=c(zg4"OE<>+;7)"Ve6(,*%m(nS/m/ ,=%,`;%(q,2;:eq:+2 ii"-$~.J2jl~xzS~:pp3le[{yo#k}0t+gn&!C6s !b3u &`ad4yo'yf#/B%ls0rxwdfEn0'':~Ci ~(1U| B ; C a The arrow separates the left side of the production from the right side. The left side of the production consists of only one nonterminal. The right side of the production consists of a sequence of symbols (terminals, nonterminals) with one or more white spaces (blanks and tabs) separating them. A symbol is thus either a terminal or a nonterminal but not both. 3. One production per line; no alternation allowed. Thus, represent the following 2 productions:- A -> B ; C a | b by:- A -> B ; C a A -> b 4. Newline character, tab and blank cannot be a grammar token (terminal or nonterminal). 5. The left hand side symbol of the very first production represents the starting symbol of the grammar. 6. The following are "reserved" words:- START EOI and cannot be used as a terminal or nonterminal. 7. EPSILON is considered another "reserved" word and can be used to represent an empty production, viz. H -> EPSILON No error messages will be issued if the input grammar does not conform to the above specifications. The options, which can appear in any order, are:- -t Print the list of terminals in the grammar. -nt Print the list of nonterminals in the grammar. -f Print the list of first sets of the nonterminals in the grammar. -e Print the list of items (i.e. closure) in each state. FILES grammar grammar file with format specified above. SEE ALSO yacc Aho A.V., Sethi, R. and Ullman, J.D., Compilers: Principles, Techniques, and Tools. Addison-Wesley, 1986. DIAGNOSTICS All shift/reduce conflicts will be reported (to errout). In the table form, only shift will be shown. To avoid reduce/reduce conflict the grammar should be unambiguous with left-factoring performed if necessary. Unrecognized options or arguments in the command line will be ignored. BUGS No known bugs! AUTHOR Deeporn H. Beardsley *[V9.IPL.DOCS]READ.ME;1+,r./ 4E-Y"0123KPWO565sښ7 ښ89Jj$GHJ address.doc documentation for address procedures gtrace.doc documentation for graphic traces hebcalen.hlp documentation for hebcalen.icn hebcalpi.hlp documentation for hebcalpi.icn iconmake.doc Make skeleton for Icon incl.kwc keyword-in-context listing for incl ipp.doc supplementary documentation for ipp.icn mr.man manual page for mr.icn post.1 manual page source for post.icn polywalk.txt description of polynomial programs procs.kwc keyword-in-context listing for procs progs.kwc keyword-in-context listing for progs pt.man manual page for pt.icn e*[V9.IPL]GDATA.DIR;1+,y./ 4-v0123 KPWO56X7%X89Ҋ;vGHJICL32.IMS CLAUDE.IMS GPXTEST.GIF PYRAMID.IMSREAD.MEzSGR.IMS SPHERE16.IMS SQUARES.IMSUIX.DAT UNICORN.IMS VIBAPP.ICNW01.IML{W02.IML|W03.IML}W04.IML~W05.IMLXW06.IMLXW07.IMLW08.IMLW09.IMLW10.IMLW11.IMLW12.IMLW13.IMLW14.IMLW15.IMLNW16.IMLMW17.IML$ VMS.BCKyv[V9.IPL]GDATA.DIR;12.EXE;1BW18.IMLW19.IMLW20.IMLW21.IMLW22.IMLW23.IMLW24.IMLW25.IMLW26.IMLW27.IMLW28.IMLW29.IMLW30.IMLW31.IMLW32.IML XIBAPP.ICN XNAMES.ED*[V9.IPL.GDATA]CL32.IMS;1+,./ 4-y0123KPWO56@^_7@k89Jj$GHJ# xpmtoiim -c1 aladins_lamp.xpm "32,c1,_ 00000000000661100000000000000000_ 00000000061111110000000000000000_ 00000066611111116610661000000000_ 00000111111111111116111000000000_ 00066111111111111111111106661000_ 06611111111111111111111111130110_ 01111111111110111110313113000000_ 00111111111110001330030000000000_ 00311110031130000000000000000000_ 033311300033000000000000000DDD00_ 03331000000000000000000000D000D0_ 3000000000000000000000000D0000D0_ 0,,000000000000000000000D000000D_ 00,000000000000000000000D000000D_ 00,D0000000000000000000DD000000D_ 000,D000000DDDDDDDD00DDD0000000D_ 0000,D0000DDADHHDADDDDD00000000D_ 0000,DD00LDAAADDAAAD8LD00000000D_ 00000,DD0LDAAADDAAAD8LDD000000D0_ 00000,DDDDDDADHHDADDDDDDD00000D0_ 000000DDDDDDDDDDDDDDDDDD0D000D00_ 0000000DDDDDDDDDDDDDDDD000DDD000_ 00000000DDDDDDDDDDDDDD0000000000_ 000000000DDDDDDDDDDDD00000000000_ 000000000000DDDDDDD0000000000000_ 000000000000000D0000000000000000_ 0000000000000DDDDD00000000000000_ 0000000000,,,DDDDDDDD00000000000_ 0000000,,,,,DD,DDDDDDDDD00000000_ 00000,,,,DDDD,,DDDDDDDDDDD000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 ant.xpm "32,c1,_ 66666666666600066660006666666666_ 66666666666006006600600666666666_ 66666666660066606606660066666666_ 66666666000660000000066000666666_ 66666666666606D6HH6D606666666666_ 6666666666660D6DHHD6D06666666666_ 6666666666666000HH00066666666666_ 666666666666660HHHH0666666666666_ 6666666660666660HH06666606666666_ 66666666000666600006666000666666_ 66666660060066HH11HH660060066666_ 66666600666000HHHHHHH00666006666_ 66660006606600001100006606600066_ 6666666600066HHHHHHHH66000666666_ 6666666006006HHH11HHH60060066666_ 6666660066600000HH00000666006666_ 66660006666666HH11HH666666600066_ 66666666666666HHHHHH666666666666_ 666666666666600H11H0066666666666_ 666666666666000HHHH0006666666666_ 66666666666000H1111H000666666666_ 6666666666000HHHHHHHH00066666666_ 666666666000HHH1111HHH0006666666_ 666666660006HHHHHHHHHH6000666666_ 666666600666HH111111HH6660066666_ 666666600666HHHHHHHHHH6660066666_ 666666600666HH111111HH6660066666_ 666666600666HHHHHHHHHH6660066666_ 666666606666HHHH11HHHH6666066666_ 6666666066666HHHHHHHH66666066666_ 66666600066666HHHHHH666660006666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 app_write.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666603336666666666666_ 66666666666666060113666666666666_ 666666666666606H6011366666666666_ 66666666666606H6H601136666666666_ 6666666666606H600H60113666666666_ 666666666606H60880H6011366666666_ 66666666606H608J8006601136666666_ 6666666606H608J8J880H60113666666_ 666666606H608J8J8J806H6011366666_ 66666606H6H088J8J806H6H601136666_ 6666606H0060088J806H0H6H60113666_ 666606H000H6008806H0H0H6H6011366_ 66606H000H6H60006H0H0H0H6H601136_ 6606H6H0H6HLH606H0H0H0H6HAH60113_ 606H6H6H6HLH6H6H6H0H0H6HAHAH6013_ 6606H606HLHLHLH6H6H0H6HAHAH60113_ 66606H606HLHLH6000006H6HAH601136_ 666606H606HLH006,6,6000000000000_ 6666606H606H0060000,600000000000_ 66666606H6060,06H600,60000000000_ 666666606H60000000000,0000000000_ 6666666606H606,00006,60000000000_ 66666666606H606,6,6,6,0000000000_ 666666666606H600,6,6,60000000000_ 6666666666606H600000000000000000_ 66666666666606H6H6H6010000000000_ 666666666666606H6H60113666666666_ 6666666666666606H601136666666666_ 66666666666666606011366666666666_ 66666666666666660333666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 apple_color.xpm "32,c1,_ 66666666666666666666666666666666_ 66666606666666666666666666666666_ 66666006666666666666666666666666_ 66660SS0666666666666666666666666_ 66660SS0666666000066666666666666_ 66660SSS066600SSS066666666666666_ 66660SSS0660SSSS0666666666666666_ 66660SSS0660SSS06666666666666666_ 666660SS060SSSC06666666666666666_ 666660SS060SSCC06666666666666666_ 66666600660SCCC06666666666666666_ 66666660660CCCC00666666660666666_ 6666666660CCCCC60666666600666666_ 666660000CCCCC6660066000A0666666_ 66600SSSCCCCC66666600AAAA0066666_ 660SSSSCCCCC66666666AAAAAA066666_ 660SSSCCCCC66666666AAAAAAJ066666_ 60SSSCCCCC66666666000000JJ066666_ 60SSCCCCC666O66660BBBBBB0J066666_ 60SCCCCCO66O66660BccccccB0666666_ 60CCCCCOO6OO6660Bc00cccccB066666_ 60CCCCOO66OOO60000AA0cccccB06666_ 660CCOO6O66O000BB00000000ccB0www_ 660COOOO6666AA0ccB00BBBBBcccBwww_ 6660OOO6O66AAAA0ccBBcccccccccwww_ 66660OOO66AAAAAA0ccccccccccccwww_ 666660O6OAAAAAAJJ00ccccccccccwww_ 6666660OAAAAAAJJJJJ00000000ccwww_ 66666660AAAAAJJJJJ06666666600www_ 66666666000AJJJJJ006666666666000_ 66666666666000000666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 arch.xpm "32,c1,_ 66666666666666666666666666666666_ 6HHH66HHHHHH66HHHHHHHHHHHH666HH6_ 6HH66666HHHH666HHH6666666HHHHHH6_ 6HHH6666666HH6666HHHH666666HHHH6_ 6HHHHHHHHHHHHHHHHHHHHHHHH6666HH6_ 6HHHHH000000000000000000HHHHHHH6_ 6HHHHH0AAAAAAAAAAAAAAA0A0HHHHHH6_ 6HHHHH0AAAAAAAAAAAAAAA0AA0HHHHH6_ 6666HH0AAAAAAAAAAAAAAA0AAA0HH666_ 6H66660AAA000000000AAA0AAA0H6666_ 66666H0AAA00AAAAAA0AAA0AAA0H6666_ 6HHHHH0AAA0A0AAAAA0AAA0AAA0H6666_ 6HHHHH0AAA0AA0AAAA0AAA0AAA0HHH66_ 6666HH0AAA0AAA00000AAA0AAA0HHHH6_ 6HH6HH0AAA0AAA0HHH0AAA0AAA0HHHH6_ 6H6HHH0AAA0AAA0HHH0AAA0AAA0HHHH6_ 6H666H0AAA0AAA0HHH0AAA0AAA0H6666_ 6HHHHH0AAA0AAA066H0AAA0AAA0666H6_ 6H666H0AAA0AAA0HH60AAA0AAA0HHHH6_ 6HHHHH0AAA0AAA0HHH0AAA0AAA0HHHH6_ 6HHHHH0AAA0AAA0HHH0AAA0AAA0H6666_ 6HH66H0AAA0AAA0HHH0AAA0AAA0HHHH6_ 6HHHHH0AAA0AAA0HHH0AAA0AAA0H66H6_ 6HHHHH0AAA0AAA0HHH0AAA0AAA0HHHH6_ 6H6H6H0AAA0AAA0H6H0AAA0AAA0HH6H6_ 6HHHHH0AAA0AAA0HHH0AAA0AAA0JHHH6_ 6HHJHH0JAA0JAA0HHH0JAA0JAA0JHHJ6_ 6HJJJH0JJA0JJA0JJJ0JJA0JJA0JJHJ6_ 6JJJJJJJJJJJJJJJJJJJJJJJJJJJJHH6_ 6HHJJJJJJHJHJJJJJJHHJHJJJJHHJJJ6_ 6HHHJJJJHHHJJJJJJHHJHJHJJJJHHJJ6_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 atom.xpm "32,c1,_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 0000000AAA000000000000JJJ0000000_ 000000A000AA00000000JJ000J000000_ 000000A00000A000000J00000J000000_ 000000A000000A0000J000000J000000_ 000000A0000000A00J0000000J000000_ 0000000A0000000AJ0000000J0000000_ 0000000A000000AAAA000000J0000000_ 00000000A0000AA66AA0000J00000000_ 00000000A00000AAA6AFFF0J00000000_ 00000FFFFA06600AAAA000JFFFF00000_ 000FF0000A00060AA00000J0000FF000_ 00F0000000A0000A00660J0000000F00_ 0F00000000A0000600000J00000000F0_ 00F00000000A00AA0000J00000000F00_ 000FF00000JAA66A000J00A0000FF000_ 00000FFFFF0AAAA6A0J000FFFFF00000_ 00000000J0FFFFAFFFFFFF0A00000000_ 00000000J00AAAAAJ000000A00000000_ 0000000J0000AAAJA0000000A0000000_ 0000000J000000J00A000000A0000000_ 000000J000000J0000A000000A000000_ 000000J00000J000000A00000A000000_ 000000J0000J00000000A0000A000000_ 000000J00JJ0000000000AA00A000000_ 0000000JJ0000000000000 fW VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;110AA0000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 ballon.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666633333333666666666666_ 66666666633JJ3AA3J3AA33666666666_ 666666663JJJ3AA3JJJ3AAA366666666_ 666666663JJJ3AA3JJJ3AAA366666666_ 66666663JJJ3AAA3JJJJ3AAA36666666_ 66666663JJJ3AAAJJJJJ3AAA36666666_ 6666663JJJ3AAA3JJJJJJ3AAA3666666_ 6666663JJJ3AAA3JJJJJJ3AAA3666666_ 6666663JJJ3AAA3JJJJJJ3AAA3666666_ 6666663JJJ3AAA3JJJJJJ3AAA3666666_ 66666633JJ3AAA3JJJJJJ3AA33666666_ 66666663JJ3AAA3JJJJJJ3AA36666666_ 66666663333AAA3JJJJJ3A3336666666_ 666666663A3J333333333JJ366666666_ 666666663AAJJJJ3AAAA3JJ366666666_ 6666666663A3JJJ3AAAAJJ3666666666_ 6666666663AAJJJ3AAA3JJ3666666666_ 66666666663A3JJJAAAJJ36666666666_ 66666666663AAJJJ3A3JJ36666666666_ 666666666663A3JJ3A3J366666666666_ 666666666663A3JJ3A3J366666666666_ 66666666666600000000666666666666_ 66666666666636666663666666666666_ 66666666666636600663666666666666_ 666666666666366DD663666666666666_ 666666666666366JJ663666666666666_ 666666666666DADADADA666666666666_ 666666666666ADADADAD666666666666_ 666666666666DADADADA666666666666_ 6666666666666DADADA6666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 ballons.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666688888866666_ 666666666FFFF6666666888888886666_ 66666666FFFFFF666668888888868666_ 6666666FFFFF6FF66688888888868866_ 666666FFFFFF6FFF6688888888888866_ 666666FFFFFFFFFF6688888888888866_ 666666FFFFFFFFFFAA88888888888866_ 666666FFFFFFFFFFAAA8888888888666_ 6666666FFFFFFFFAAAAA888888886666_ 666666HHFFFFFFAAAAAA688888866666_ 66666HHHHFFFFAAAAAAA6AAD0DD66666_ 6666HHHHHH00AAAAAAAAAAADDDDD6666_ 666HHHHHHH60AAAAAAAAAAADDDDDD666_ 666HHHHHHH60AAAAAAAAAAADDDD6DD66_ 666HHHHHHHH0HAAAAAAAAADDDDD6DD66_ 666HHHHHHHH006AAAAAAADDDDDD6DD66_ 6666HHHHHHHH066AAAAADDDDDDDDDD66_ 66666HHHHHH6066606DDDDDDDDDDDD66_ 666666HHHH660666006DDDDDDDDDD666_ 66666660666606666066DDDDDDDD6666_ 666666606666006660666DDDDDD66666_ 66666660666660666066666006666666_ 66666660666666666066666606666666_ 66666660666666666066666606666666_ 66666660666666666006666006666666_ 66666660066666666600666066666666_ 66666666006666666666660066666666_ 66666666606666666666660666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 bambi.xpm "32,c1,_ ,,,,,,,,,,,,,,,,,,,,,,,000,,,,,,_ ,,,,,,,,,,,,,,,0000,,00000,,,,,,_ ,,,,,,,,,,,,,,,00600000000,,,,,,_ ,,,,,,,,,,,,,,,06600AA0000,,,,,,_ ,,,,,,,,,,,,,,,00600AAAA00,,,,,,_ ,,,,,,,,,,,,,,,,000A000AA0,,,,,,_ ,,,,,,,,00,,,,,,,00A0000A0,,,,,,_ ,,,,,,,,00,,,,,,,00A000A00,,,,,,_ ,,,,,,,,00,,,,,,,,00000A00,,,,,,_ ,,,,,,,0000,,00,,,,00A0000,,,,,,_ ,,,,,,,0000000000000000000,,,,,,_ ,,,,,,,,,00AAAAAAAA0AA0,,,,,,,,,_ ,,,,,,,,,0AAAAAAAAA00A0,,,,,,,,,_ ,,,,,,,,,,0AAAAAAAAA0A0,,,,,,,,,_ ,,,,,,,,,,0AAAAAAAAA0A0,,,,,,,,,_ ,,,,,,,,000AAA0A0000000,,,,,,,,,_ ,,,,,,,0AAAAA00000A000,,,,,,,,,,_ ,,,,,,,0AA000000,0A0A00,,,,,,,,,_ ,,,,,,000000A00,,0A00A0,,,,,,,,,_ ,,,,,,0A0,,000,,,0A0000,,,,,,,,,_ ,,,,,000,,,,000,,000,0A0,,,,,,,,_ ,,,,,000,,,,0A0,,00,,000,,,,,,,,_ ,,,,000,,,,,,00,,00,,,000,,,,,,,_ ,,,,00,,,,,,,000,00,,,,000,,,,,,_ ,,,000,,,,,,,,00,00,,,,000,,,,,,_ ,,000,,,,,,,,,00000,,,,,000,,,,,_ ,000,,,,,,,,,,00000,,,,,000,,,,,_ ,000,,,,,,,,,,,0000,,,,,,000,,,,_ ,00,,,,,,,,,,,,,,00,,,,,,,000,,,_ ,00,,,,,,,,,,,,,,000,,,,,,00,,,,_ ,,,,,,,,,,,,,,,,,0A0,,,,,,,,,,,,_ ,,,,,,,,,,,,,,A,,000,,,,,,,,,,,,_ " , # xpmtoiim -c1 barchart.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHH0H00HH0H00HH000HH0HHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHH0HH0HH0000H0H00HH0HHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HJHHH0000HHHHHHHHHHHHHHHHHHHHHHH_ HJHH06660HHHHHHHHHHHHHHHHHHHHHHH_ HJHH06660HHHHHHHHHHHHHH0000HHHHH_ HJHH06660HHHHHHHHHHHHH06660HHHHH_ HJHH06AA0HHHHHHHHHHHHH06660HHHHH_ HJHHAA66AAHHHHHHHHHHHH06660HHHHH_ HJAA06660HAAHHH0000HHH06660HHHHH_ HAHH06660HHHAA06660HHH06660HHHHH_ HJHH06660HHHHHAA660HHH06660HHHHH_ HJHH06660HHHHH0AAAAAAAAAAAAAHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJHH06660HHHHH06660HHH06660HHHHH_ HJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHH_ HHHHHH0HHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHH00HHHHHHHH0H0HHHHH0H0H0HHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ " , # xpmtoiim -c1 bart.xpm "32,c1,_ 66666666600666066606666066666666_ 6666660660,060,06600666006666666_ 666660,060,060,0660,0660,0666666_ 666660,060,,0,,060,,0600,0666666_ 6666660,0,,,0,,,0,,,00,,,,066666_ 6666660,0,,,0,,,0,,,,0,,00066666_ 6666660,,0,,,,,,,,,,,,,,,0666666_ 6666660,,0,,,,,,,,,,,,,,,0666666_ 66666660,,,,,,,,,,,,,,,,,0666666_ 66666660,,,,,,,,,,,,,,,,,0666666_ 66666660,,,,,,,,,,,,,,,,,0066666_ 66666660,,,,,,,,,,,,,,,,,,006666_ 66666660,,,,,,,,,000,,,,,,,06666_ 66666600,,,,,,,,06660,,000006666_ 666660000,,,,,,06666600666006666_ 666660,,,,,,,,,06006606006606666_ 666660,0,,,,,,,06006606006606666_ 666660,,0,,,,,,06666606666606666_ 66666000,,0,,,,,06660,0666066666_ 6666660000,,,,,,,000,,0000666666_ 666666660,,,,,,,,,,,,,,,,,066666_ 666666660,,,,,,,,,,,,,,,,,066666_ 6666666660,,,,,,,,,,,,,,,,066666_ 6666666660,,,,,,,,,,,,0000066666_ 666666J60,,,,,,,,,,,,,,,06666666_ 66666JJ0,,,,,,,000,,,,,,,0666666_ 6666JJJ0,,,,,,0AAA0000,,,,066666_ 6666JJ0J0,,,,,0AAAA6600000666666_ 6666JJJJJ00,,,,00006666666666666_ 6666JJJJJJJ0,,,,,,,0066666666666_ 6666JJJJJJJJ,0000,,,0J6666666666_ 6666JJJJJJJJJJJJJ000JJJJJ6666666_ " , # xpmtoiim -c1 batman.xpm "32,c1,_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 000000000000DDDDDDDD000000000000_ 0000000000DDD00DD00DDD0000000000_ 00000000DDD00,0000,00DDD00000000_ 000000DD000,,,0000,,,000DD000000_ 000000D000,,,,0000,,,,000D000000_ 00000D0000,,,,0000,,,,0000D00000_ 0000D000000,,,0000,,,000000D0000_ 0000D0000000000000000000000D0000_ 000DD0000000000000000000000DD000_ 000D000000000000000000000000D000_ 000D000000000000000000000000D000_ 000D000000000000000000000000D000_ 000D000000000000000000000000D000_ 000D000000000000000000000000D000_ 000DD0000000000000000000000DD000_ 0000D0000,000,0000,000,0000D0000_ 0000D000,,,0,,,00,,,0,,,000D0000_ 00000D000,,0,,,00,,,0,,000D00000_ 000000000,,,,,,0,,,,,,,000000000_ 000000DD00,,,,,0,,,,,,00DD000000_ 00000000DD00,,,0,,,,00DD00000000_ 0000000000DD00000000DD0000000000_ 000000000000DDDDDDDD000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 betty_boop.xpm "32,c1,_ HHHHHHHHH0HHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHH00H00HHHHHHHHHH00HHHHHHH_ HHHHHHHH000000000000000000HHHHHH_ HHHHHH00000000000000000000HHHHHH_ HHHH00000000000000000000000HHHHH_ HHH00000000000000000000000000HHH_ HHH000000000000000000000000000HH_ HHH000000000000000000000000000HH_ HHH000000000000000000000000000HH_ HHH00000000060006000066000000HHH_ HHH00000000066006666666066000HHH_ HH000000000660006666660060000HHH_ H00000006666006666666660060000HH_ H00000000660066666666660066000HH_ HH0000000600666666666606060000HH_ HHH0000006060600666600000000HHHH_ HHHH000066600000066000000600HHHH_ HHHHH00060600000066000000000HHHH_ HHHHH000006000000660000600000HHH_ HHHH0000006000600660006606000HHH_ HHHH000000600660066600600000HHHH_ HHHHH00006660000666600000660HHHH_ HHHHH0!rE0 VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;10006660600660066060600HHHH_ HHHHH00006666666660666666600HHHH_ HHHHH00006666666600066666600HHHH_ HHHHHH000000000000000000000HHHHH_ HHHHHHH000000066600060000HHHHHHH_ HHHHHHHH0006666666666660HHHHHHHH_ HHHHHH000006666666666660HHHHHHHH_ HHHHH0000000666666606660HHHHHHHH_ HHHHHH000660666666606660HHHHHHHH_ HHHHHHH00660066666006600HHHHHHHH_ " , # xpmtoiim -c1 binhex.xpm "32,c1,_ 66666666666666666666666666666666_ 66666660000000066666666666666666_ 66666660,,,,,,006666666666666666_ 66666660,,,,,,0%0666666666666666_ 66666660,,,,,,0%%066666666666666_ 66666660,,,,,,0%%%06666666666666_ 66666660,,,,,,000000666666666666_ 66666660,,,,,,,%%%%0666666666666_ 666666600,0,0,0,0,00666666666666_ 66666133466666433110006666666666_ 66660113344643311100000666666666_ 66660113344643311100000666666666_ 66666000113331100000006666666666_ 66666611334643311000066666666666_ 66666611334643311000016666666666_ 66666611334643311000000000666666_ 66666611334643311000006660666666_ 66666611334643311000066660666666_ 666661334666664331100066606oo666_ 666601133446433110000006600oo666_ 66660000000000000000000666600666_ 66666000000000000000006666666666_ 66666660101000011110666666666666_ 66666660JJJJJJJJJJJ0666666666666_ 66666660iii0i00311i0666666666666_ 66666660iiiiiiiiiii0666666666666_ 66666660iii1i0100ii0666666666666_ 66666660iiiiiiiiiii0666666666666_ 66666660iiiii0i001i0666666666666_ 66666660iiiiiiiiiii0666666666666_ 66666660000000000000666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 binoculars.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666000000000666000000000666666_ 66666011333330666011333330666666_ 66666000000000666000000000666666_ 66666011333330666011333330666666_ 66666011333330666011333330666666_ 66666011333330666011333330666666_ 66666011333330666011333330666666_ 66666011333330666011333330666666_ 66666011333330000011333330666666_ 66666011333330333011333330666666_ 66666011333300000001333330666666_ 66666011333301133301333330666666_ 66666011333300000001333330666666_ 66666011333330000011333330666666_ 66666000000000060000000000666666_ 66666660111333060111133066666666_ 66666660000000060000000066666666_ 66666666603330666033306666666666_ 66666666600000666000006666666666_ 66666666033333060333330666666666_ 66666666000000060000000666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 bomb.xpm "32,c1,_ 666666666A6666A6666A666666666666_ 66666666666666666666666666666666_ 66666666666A66A66A66666666666666_ 666666666666A666A666666666666666_ 666666A66AA666A66666666666666666_ 666666666666A66A6666666666666666_ 66666666666A666A6666666666666666_ 6666666666666666A666666666666666_ 666666666A66666AA666666666666666_ 66666666666666000066666666666666_ 66666666666666000066666666666666_ 66666666666666000066666666666666_ 66666666666660000006666666666666_ 66666666666000000000066666666666_ 66666666660000000660006666666666_ 66666666600000000006600666666666_ 66666666000000000000660066666666_ 66666660000000000000066006666666_ 66666660000000000000006606666666_ 66666600000000000000000600666666_ 66666600000000000000000600666666_ 66666600000000000000000000666666_ 66666600000000000000000000666666_ 66666600000000000000000000666666_ 66666600000000000000000000666666_ 66666660006000000000000006666666_ 66666660000000000000000006666666_ 66666666000060000000000066666666_ 66666666600000000000000666666666_ 66666666660000000000006666666666_ 66666666666000000000066666666666_ 66666666666660000006666666666666_ " , # xpmtoiim -c1 bomb_defuse.xpm "32,c1,_ 666666666666666666666666666J6666_ 666666666666666666666666666J6666_ 66666666666666666666666666JHJ666_ 66666666666666666666666666JHJ666_ 66666666666666666666666666JHHJ66_ 6666666666666666666666666JHHHJ66_ 6666666666666666666666666JHHHJ66_ 666666666666666666666666JHHHHHJ6_ 666666666661010166666666JHHHJHJ6_ 666666666606666601666666JHHHJHJ6_ 666666666166666666066666JHHHHHJ6_ 6666666660666666661666666JHHHJ66_ 66666660000066666660666666JJJ666_ 66666660000066666661666666666666_ 66666600000006666666066666666666_ 66660000000000066666166A6666666A_ 666000000000000066660666666A66A6_ 660000000000000006666166A6666666_ 6600000000,31000066660666A66A666_ 60000000000,31000066661666666666_ 600000000000000000666660106A6A6A_ 600000000000,3100066666666666666_ 600000000000,31000666666A666A666_ 600000000000,3100066666666A66A66_ 60000000000,31000066666A66666666_ 60000000000,3100006666A666A6666A_ 6600000000,310000666666666666666_ 66000000000000000666666666A66666_ 66600000000000006666666666666666_ 66660000000000066666666666666666_ 66666600000006666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 bond_007.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666660_ 66600006666000060000000000000000_ 66000000660000006100000000000000_ 60031600600316001633000060033333_ 60031600600316001663000360311111_ 60031600600316001163000000316166_ 60031600600316001660003333311666_ 60031600600316001160031111116666_ 60031600600316001660031616161666_ 60031600600316001160031166666666_ 60000001600000011660031666666666_ 66000016660000161660031166666666_ 66633331666333316666331666666666_ 66661616166616161666616166666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 book.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000000000000000000_ 66666666666603AAAAAAAAAAAAAAAA06_ 6666666666603AAAAAAAAAAAAAAAA036_ 666666666603AAADDDDDDDDDAAAA0,36_ 66666666603AAADDDDDDDDDAAAA0,,36_ 6666666603AAAAAAAAAAAAAAAA0,,,36_ 666666603AAAAAAAAAAAAAAAA0,,J,36_ 66666603AAAAAAAAAAAAAAAA0,,,,,30_ 6666603AAAAAAAAAAAAAAAA0,,J,,,06_ 666603AAAAAAAAAAAAAAAA0,,,,,,066_ 66603AAAAAAAAAAAAAAAA0,,,J,,0666_ 6603AAAAAAAAAAAAAAAA0,,,,,,06666_ 603AAAAAAAAAAAAAAAA0,,,J,,066666_ 6000000000000000000,,,,,,0666666_ 0,,,,,,,,,,,,,,,,,,,,J,,06666666_ 0,,,,,,,,,,,,,,,,,,,,,,066666666_ 0,,,,,,,,,,,,,,,,,,J,,0666666666_ 0,,,,,,,,,,,,,,,,,,,,06666666666_ 0,,,,,,,,,,,,,,,,,,,066666666666_ 0,,,,,,,,,,,,,,,,,,0666666666666_ 60000000000000000006666666666666_ " , # xpmtoiim -c1 book_edit.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666600066666666666_ 666666666666666660%0c06666666666_ 66666666666666660%0ccc0666666666_ 6666666666666660%0ccccc066666666_ 666666666666660%0ccccccc06666666_ 66666666666660%0ccccccccc0666666_ 6666666666660%0ccccccccccc066666_ 66666666660000ccccccccccccc06666_ 66666666600ccccccccccccccccc0666_ 6666666660c0ccccccccccccccccc066_ 6666666600cc0ccccccccccccccccc06_ 66666660%0ccc0ccccccccccccccccc0_ 6666660%0cccJc0cccc000000ccccc06_ 666660%0ccccJcc0cc"r& VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1,0BBBBBB0ccc066_ 66660%0ccccJccJc00BccccccB0c0666_ 6660%0ccccJcccJc0Bc00cccccB06666_ 660%0ccccccccJcc000cc0cccccB0666_ 60%0ccccJcccJ000BB0000000cccB0JJ_ 0%0ccccJccccccc0ccB00BBBBccccBJJ_ 60%0ccJcccJccccc0ccBBcccccccccJJ_ 660%0ccccJccccccc0ccccccccccccJJ_ 6660%0ccJcccJccccc00ccccccccccJJ_ 66660%0ccccJcccccccc00000000ccJJ_ 666660%0ccJcccJcccc06666666600JJ_ 6666660%0ccccJcccc066666666666JJ_ 66666660%0ccJcccc066666666666666_ 666666660%0ccccc0666666666666666_ 6666666660%0ccc06666666666666666_ 66666666660%0c066666666666666666_ 66666666666000666666666666666666_ " , # xpmtoiim -c1 book_open.xpm "32,c1,_ 66000000000001363100000000000066_ 66066666666331010133666666666066_ AA063000661103606311016111116000_ AA0603666610116061101161010160A0_ AA0606101611013060011661000160A0_ AA0603606610136061110166111160A0_ AA0630006611116061011161010160A0_ AA0666666611013061010161101660A0_ AA0610101610116060101160111100A0_ AA0610111611133063366661016000A0_ AA0611016601016060330361116100A0_ AA0661101611103030660666111660A0_ AA0610110601116060000661101160A0_ AA0611011611036060660661111660A0_ AA0600106611113060330361010060A0_ AA0611111611013031666661111660A0_ AA0601000610136063111161011160A0_ AA0611106611106061101161101160A0_ AA0610111610113061010161011060A0_ AA0611001611116061111661111160A0_ AA0666666666336063666666666660A0_ AA0000000000013031000000000000A0_ AA0000000000000000000000000000A0_ AA0000000000000100000000000000A0_ AA0000000000000000000000000000A0_ AA0000000000001010000000000000A0_ AAAAAAAAAAAAA03030AAAAAAAAAAAAA0_ A0000000000000000000000000000000_ 66666666666666000666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 book_word.xpm "32,c1,_ 666666666Bo03303330333330333o666_ 66666666Bo0330333033330033BBo666_ 6666666Bo033033003300033BBooo666_ 666666Bo03303303300333BBooooo666_ 66666Bo0300300300333BBooooooo666_ 66666BBBBBBBBBBBBBBBooooooooo666_ 6666BcBBBBBBBBBBBBooooooooooo666_ 6666Bc1111111111JBooooooooooo666_ 6666Bc1JJJJJJJJJ6Booooooooooo666_ 6666Bc1DDDJJDJJD6Booooooooooo666_ 6666Bc1JJDJJDJJD6Booooooooooo666_ 6666Bc1JJDJJDJDJ6Booooooooooo666_ 6666Bc1JJDJDDJDJ6Booooooooooo666_ 6666Bc1JJDDJDDJJ6Booooooooooo666_ 6666Bc1JJDJJDJJJ6Booooooooooo666_ 6666BcJ6666666666Booooooooooo666_ 6666BcBBBBBBBBBBBBooooooooooo666_ 6666BcBBBBBBBBBBBBooooooooooo666_ 6666BcoBBoBBoBBoBBooooooooooo666_ 6666BcBoBBoBBoBBBBooooooooooo666_ 6666BcBBoBBoBBoBBBooooooooooo666_ 6666BcoBBoBBoBBoBBooooooooooo666_ 6666BcBoBBoBBoBBBBooooooooooo666_ 6666BcBBoBBoBBoBBBooooooooooo666_ 6666BcoBBoBBoBBoBBooooooooooo666_ 6666BcBoBBoBBoBBBBooooooooooo666_ 6666BcBBoBBoBBoBBBoooooooooo6666_ 6666BcoBBoBBoBBoBBoooooooo666666_ 6666BcBoBBoBBoBBBBoooooo66666666_ 6666BcBBoBBoBBoBBBoooo6666666666_ 6666BcBBBBBBBBBBBBoo666666666666_ 66666ooooooooooooo66666666666666_ " , # xpmtoiim -c1 boomerang.xpm "32,c1,_ 666666666666666ccccccc,,i6666666_ 66666666666ccccBBBBBBB66Ji,,6666_ 66666666cccBBBoooOOooO66JJ66AAA6_ 666666ccBBooOooOOoOoOO,,JJ66AAAn_ 66666cBooooOoOoooOoOoO33JJ33AAnn_ 6666cBoOooooOooooooooo11ww11nnn6_ 666cBoOoooooooooowwwoo6666666666_ 666cBOooooooooowo666666666666666_ 66cBooooooooowo66666666666666666_ 66cBoooooooow6666666666666666666_ 66coooooooow66666666666666666666_ 6cBooooooow666666666666666666666_ 6cBoooooow6666666666666666666666_ 6cBooooow66666666666666666666666_ 6cooooooo66666666666666666666666_ cBoOooow666666666666666666666666_ cBoOoooo666666666666666666666666_ cBOooow6666666666666666666666666_ cBOooow6666666666666666666666666_ cBoooow6666666666666666666666666_ cBOoooo6666666666666666666666666_ cBOOOOo6666666666666666666666666_ ,66,3166666666666666666666666666_ ,66,3166666666666666666666666666_ iJJJJw66666666666666666666666666_ 6iJJJw66666666666666666666666666_ 6,663166666666666666666666666666_ 6,663166666666666666666666666666_ 66AAAn66666666666666666666666666_ 66AAAn66666666666666666666666666_ 66AAnn66666666666666666666666666_ 666nn666666666666666666666666666_ " , # xpmtoiim -c1 boomerang_move.xpm "32,c1,_ 666666666666666ccccccc,,i6666666_ 66666666666ccccBBBBBBB66Ji,,6666_ 66666666cccBBBoooOOooO66JJ66AAA6_ 666666ccBBooOooOOoOoOO,,JJ66AAAn_ 66666cBooooOoOoooOoOoO33JJ33AAnn_ 6666cBoOooooOooooooooo11ww11nnn6_ 666cBoOoooooooooo000oo6666666666_ 666cBOooooooooo0o666666666666666_ 66cBooooooooo0o66666666666066666_ 66cBoooooooo06666666660666066666_ 66coooooooo066666666660666606666_ 6cBooooooo0666666666666166606666_ 6cBoooooo06666066666666166661666_ 6cBooooo066606606666666666661666_ 6cooooooo66660661666666666666666_ cBoOooo0666066166366666636666666_ cBoOoooo6666066166,6666636666166_ cBOooo0666666166366666666,666166_ cBOooo0666666636636666666,666636_ cBoooo066666666,66,6666666666636_ cBOoooo666666666666666666666666,_ cBOOOOo666666666666666666666666,_ ,66,3166600666666666666666666666_ ,66,3166666116666666666666666666_ iJJJJw66666666633666666666666666_ 6iJJJw66666666666,,6666666666666_ 6,663166006666666666666666666666_ 6,663166660066666666666666666666_ 66AAAn66666611666666666666666666_ 66AAAn66666666661166666666666666_ 66AAnn66666666666633666666666666_ 666nn666666666666666,,6666666666_ " , # xpmtoiim -c1 box_empty.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666660006666666666666666_ 6666666666600o0O0066666666666666_ 66666666600ooo0OOO00666666666666_ 666666600ooooo0OOOOO006666666666_ 6666600ooooooo0OOOOOOO0066666666_ 66600ooooooooo0OOOOOOOOO00666666_ 600oooooooooo00oOOOOOOOOOO006666_ 000ooooooo0o0o0OoOoOOOOOOO000666_ 0BB00oo0o0o0o00oOoOoOoOO00BBB066_ 0BBBB00o0o0o0o0OoOoOoO00BBBBBB06_ 0BBBBBB000o0o00oOoOo00BBBBBBBB00_ 0BBBBBBBB000000ooo00BBBBBBBB0066_ 0BBBBBBBBBB0000o00BBBBBBBB000666_ 0BBBBBBBBBBBB000BBBBBBBB00oo0666_ 0BBBBBBBBBBBBB0O0BBBBB00oooo0666_ 0BBBBBBBBBBBBB0Oo0BB00oooooO0666_ 0BBBBBBBBBBBBB0OOo00oooooOOO0666_ 0BBBBBBBBBBBBB0OOOoooooOOOOO0666_ 0BBBBBBBBBBBBB0OOOOooOOOOOOO0666_ 0BBBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 0BBBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 0BBBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 00BBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 600BBBBBBBBBBB0OOOOOOOOOOO006666_ 66600BBBBBBBBB0OOOOOOOOO00666666_ 6666600BBBBBBB0OOOOOOO0066666666_ 666666600BBBBB0OOOOO006666666666_ 66666666600BBB0OOO00666666666666_ 6666666666600B0O0066666666666666_ 66666666666660006666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 box_full.xpm "32,c1,_ 66666666666666666666006666666666_ 66666666666660006600330066666666_ 6666600666600o0O0033333300666666_ 66600ii0000ooo003333333333006666_ 600iiiiii00oo0033333333333330066_ 0iiiiiiiiii000000000333333333066_ 600iiiiiii0000000000033333330666_ 60o0iiiiJJ0888888800003330006666_ 000o0iiiJJ088888880z00000O000666_ 0BB000iiJJ088888880zz00000BBB066_ 0BBBB00iJJ08888888000000BBBBBB06_ 0BBBBBB00J088888888800BBBBBBBB00_ 0BBBBBBBB00888888800BBBBBBBB0066_ 0BBBBBBBBBB0088800BBBBBBBB000666_ 0BBBBBBBBBBBB000BBBBBBBB00oo0666_ 0BBBBBBBBBBBBB0O0BBBBB00oooo0666_ 0BBBBBBBBBBBBB0Oo0BB00oooooO0666_ 0BBBBBBBBBBBBB0OOo00oooooOOO0666_ 0BBBBBBBBBBBBB0OOOoooooOOOOO0666_ 0BBBBBBBBBBBBB0OOOOooOOOOOOO0666_ 0BBBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 0BBBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 0BBBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 00BBBBBBBBBBBB0OOOOOOOOOOOOO0666_ 600BBBBBBBBBBB0OOOOOOOOOOO006666_ 66600BBBBBBBBB0OOOOOOOOO00666666_ 6666600BBBBBBB0OOOOOOO0066666666_ 666666600BBBBB0OOOOO006666666666_ 66666666600BBB0OOO00666666666666_ 6666666666600B0O0066666666666666_ 66666666666660006666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 boy_evil.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHH00HHHHHHHHHHHH_ HHHHHHHHH000HHHH000HHHHHHHHHHHHH_ HHHHHHHH0A0HHH006A0HHH00000HHHHH_ HHHH0HH0060H00A6A60H00A6A600HHHH_ HHHH00006A60606A6A000A6A60HHHHHH_ H0HH0606A6A6A6A6#>ݯ VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1e;A6A6A6A60HHHHHHH_ HH0H0A6A6A606A6A6A6A6A6A06000000_ 0HH0A6A6A6A6A0A0A0A0A6A6A0A6A60H_ H00A6A6A666666666666606A6A6A00HH_ HH060006666666666666666666A0HHHH_ 000A6A666666666666666666666A000H_ H0A60066666666066666666666A6A0H0_ HH0A6A666666666066066666666A60HH_ HHH0A66660000660606600006666A0HH_ HH0006666606000000000606606A60HH_ H066660006600006660000660066A00H_ H0666660666660666660666666060660_ H066666066666066666066666606600H_ HH0006606666660000066666606660HH_ HHHHH066006666666666666606660HHH_ HHHHHH0666006666666666006600HHHH_ HHHHHHH0666600000000006660HHHHHH_ HHHHHHHH00666666666666600HHHHHHH_ HHHHHHHHHH0006666666000HHHHHHHHH_ HHHHHHHHHHH00000000000HHHHHHHHHH_ HHHHHHHHHHH0AAAAAAAAA0HHHHHHHHHH_ HHHHHHHHHH0000000000000HHHHHHHHH_ HHHHHHHHHH0AAAAAAAAAAA0HHHHHHHHH_ HHHHHHHHHH0000000000000HHHHHHHHH_ " , # xpmtoiim -c1 bridge.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666660066666666666666006666666_ 6666660AA06666666666660AA0666666_ 6666600AA00666666666600AA0066666_ 6666060AA06066666666060AA0606666_ 6660A60AA06A06666660A60AA06A0666_ 6606A60AA06A60666606A60AA06A6066_ 60A6A60AA06A6A0660A6A60AA06A6A06_ 06A6A60AA06A6A6006A6A60AA06A6A60_ A0A6A60AA06A6A0AA0A6A60AA06A6A0A_ A606A60AA06A606AA606A60AA06A606A_ A6A0A60AA06A0A6AA6A0A60AA06A0A6A_ A6A6000AA0006A6AA6A6000AA0006A6A_ 0000000AA00000000000000AA0000000_ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA_ 00000000000000000000000000000000_ 6666660A0666666666666660A0666666_ 6666660A0666666666666660A0666666_ 6666660A0666666666666660A0666666_ 6666660A0666666666666660A0666666_ 6666660A0666666666666660A0666666_ 6666660A0666666666666660A0666666_ 66666600066666666666666000666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 butterfly.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666636666663666666666666_ 66600000066663666636666600000666_ 60000000006663666636660000003006_ 00030JJJJ006663663666000JJJJJ000_ 00JJJ0JJJJJ00663366000JJJJJJJJ30_ 03JJJJJJ00J0006006000JJ0JJJJJJ00_ 0JJJJJJJJJJJ00600000JJJJJJJJ3000_ 0003JJJJJJJJJ00000JJJJJJJJJJ0066_ 6600JJJJJJJJJJ000JJJJJJJJJJ00666_ 66600JJJJJJJJJJ00JJJJJJJJJJ01666_ 61110JJJJJJJJJJ00JJJJJJJJJ003116_ 113330JJJJJJJJJ00JJJJJJJJ0033331_ 1333300JJJJJJJJ00JJJJJJJJ0333331_ 1333300JJJJJJJJ00JJJJJJJJ0333331_ 1133330JJJJJJJJ00JJJJJJJ00333111_ 1113330JJJJJJJ0000JJJJJJJ0331166_ 66113300JJJJJJ0000JJJJJJJ0311666_ 6661333000JJJJ00000JJJJJ03316666_ 6661133300JJJ0033300JJJ033316666_ 66661133300000311300JJ0333116666_ 66666133300033311130000331166666_ 66666113333333166133333311666666_ 66666613333331166133333316666666_ 66666611133311666113333116666666_ 66666666111116666611111166666666_ 66666666611166666661111666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 button.xpm "32,c1,_ 00000000000000000000000000000000_ 06666666666666666666666666666630_ 06666666666666666666666666666300_ 06666666666666666666666666666000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06300000000000000000000000000000_ 03000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 c++.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666AAA666666666_ 66666666666666666666AAAA66666666_ 66666666666666666666AAAA66666666_ 66666666666666666AAAAAAAAA666666_ 66666666611666666AAAAAAAAAA66666_ 66666613000031666AAAAAAAAAA66666_ 66666300BDDB003666AAAAAAAAA66666_ 666630BDDDDDDB036666AAAA666A6666_ 66660BDDDDDDDDB03666AAAA66AAAAA6_ 66630DDDB00BDDDB06666AAAA6AAAA66_ 6660BDDD0330DDDD01666AAAAAAAAA66_ 6660BDDD0660DDDD0366AAAAAAAAA666_ 6660DDDD0360BDDDB0666AAAAAAAAA66_ 6660BDDDB0630DDDB066666AAAAAAAA6_ 6660BDDDD0660DB00366666AAAAAAAA6_ 66630DDDD0360B036636666AAAAAAAA6_ 66610DDDDB063036300666AAAAA66AA6_ 66660BDDDD0666300BB0666AAA666666_ 666630DDDD03660BDDD01666A6666666_ 666610DDDDB0660BDDD0366666666666_ 666660BDDDD06630DDDB066666666666_ 6666630DDDD03660DDDD016666666666_ 6666610DDDDB0660BDDD036666666666_ 6666660BDDDD06630DDDB06666666666_ 66666630DDDD03660DDDB06666666666_ 66666610BDDDB0330DDD036666666666_ 666666630DDDDB00BDDB066666666666_ 666666660BDDDDDDDDB0366666666666_ 6666666630BDDDDDDB03666666666666_ 66666666630BBBBB0036666666666666_ 66666666663000003666666666666666_ " , # xpmtoiim -c1 c++2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666600000006666666666666_ 66666666600000000000006666666666_ 66666666000000000000000666666666_ 66666660000006666666000066666666_ 66666600000666666666660006666666_ 66666000006666666666666000666666_ 66660000066666666666666000066666_ 66600000666666666666666000066666_ 66600000666666666666666666666666_ 66600000666666666666666666666666_ 66000006666666666AA666666AA66666_ 66000006666666666AA666666AA66666_ 66000006666666666AA666666AA66666_ 66000006666666AAAAAAAAAAAAAAAA66_ 66000006666666AAAAAAAAAAAAAAAA66_ 66000006666666666AA666666AA66666_ 66000006666666666AA666666AA66666_ 66600000666666666AA666666AA66666_ 66600000666666666666666666666666_ 66600000666666666666666000066666_ 66660000066666666666666000066666_ 66666000006666666666666000666666_ 66666600000666666666660006666666_ 66666660000006666666000066666666_ 66666666000000000000000666666666_ 66666666600000000000006666666666_ 66666666666600000006666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 calculate.xpm "32,c1,_ 66666666666666666666666666666666_ 66666660606060606060666666666666_ 66666606060606060606066666666666_ 66666606666666666666036666666666_ 666666066666A6A6A6A6033666666666_ 66666606666666666666033666666666_ 66666606666666A6A6A6033666666666_ 66666606666666666666033666666666_ 66JJJJJJJJJJJJJJJJJJJJJJJJJJJ666_ 66JHHHHHHHHHHHHHHHHHHHHHHHHHJ366_ 66JHHH000000000000000HHHHHHHJ336_ 66JHHH06A6A6A6A6A6A60HHHHHHHJ336_ 66JHHH066666666666660HHHHHHHJ336_ 66JHHH000000000000000HHHHHHHJ336_ 66JHHHHHHHHHHHHHHHHHHHHHHHHHJ336_ 66JHHH000H000H000H000H000HHHJ336_ 66JHHH0,0H0,0H0,0H0,0H0,0HHHJ336_ 66JHHH000H000H000H000H000HHHJ336_ 66JHHHHHHHHHHHHHHHHHHHHHHHHHJ336_ 66JHHH000H000H000H000H000HHHJ336_ 66JHHH0,0H0,0H0,0H0,0H0,0HHHJ336_ 66JHHH000H000H000H000H000HHHJ336_ 66JHHHHHHHHHHHHHHHHHHHHHHHHHJ336_ 66JHHH000H000H000H00000000HHJ336_ 66JHHH0,0H0,0H0,0H0,,,,,,0HHJ336_ 66JHHH000H000H000H00000000HHJ336_ 66JHHHHHHHHHHHHHHHHHHHHHHHHHJ336_ 66JJJJJJJJJJJJJJJJJJJJJJJJJJJ336_ 66633333333333333333333333333336_ 66663333333333333333333333333336_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 calendar.xpm "32,c1,_ 44444444444444444444444444444444_ 44444444404444444444404444444444_ 4$u VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1CiJ4444444060444444444040444444444_ 44444444000444444444000444444444_ 40000000060000000000060000000044_ 40666666060060666666040040666014_ 40666666000604666666000406666014_ 40666660060006666660060006666014_ 40666660040066666660040066666014_ 406666660006666AAA66000666666014_ 406666666666AAAAAA66666666666014_ 406666666666AAAAAA66666A6A6A6014_ 406666666666AAAAAA66666666666014_ 406666666666666AAA666666AA6A6014_ 406666666666666AAA66666666666014_ 406666666666666AAA66666A6AA66014_ 406666666666666AAA66666666666014_ 406666666666666AAA66666666666014_ 406666666666666AAA66666666666014_ 406666666666666AAA66666666666014_ 406666666666666AAA66666666666014_ 404666666666666AAA66666666666014_ 400000000666666AAA66666666666014_ 400111110666666AAA66666666666014_ 404011110AA66666664666A666666014_ 4064011106A66A44AAA46AA6AA646014_ 406640110A66A4A6A4A4A4A46A646014_ 406664010AA64A46A4A44AA6AA646014_ 40666640066666664444446666666014_ 40000000000000000000000000000014_ 44411111111111111111111111111114_ 44444444444444444444444444444444_ " , # xpmtoiim -c1 calvin.xpm "32,c1,_ 66666660666660066666666666666666_ 66666666066660D06666666666666666_ 66666666606660DD0666600666666666_ 66666660660D00DDD0660D0666666666_ 66666666060DDDDDDD00DD0666666666_ 6666666660DDDDDDDDDDDD0666066666_ 66666660DDDDDDDDDDDDDD0660666666_ 6666660cDDDDDDDDDDDcDD0606660666_ 666660cccDDDDDDDccccDD00D6606666_ 666660ccccccccccccccDDDDDD066666_ 666660cccccccccccccccDDDDDD00066_ 666660ccc0ccccc0ccccccDDDDD66666_ 666660ccc0ccccc0cccccccc0DD00066_ 666660cccc000cccccccccccc0D66666_ 66660cccc0cccccccccccccccc666666_ 66660cccc0cccccccccccccccc000666_ 66660ccccc00ccccccccccccccccc066_ 66660cccccccccccccccccccccccc066_ 66660cc00000000000000000cccc0666_ 666660cc000000000000000cccc06666_ 6666660cc0000AA0A00000ccc0066666_ 66666660cc000AAAAA000ccc06666666_ 666666660ccc000AA00cccc066666666_ 66666666600ccc000ccccc0666666666_ 6666666666600ccccccc006666666666_ 66666666660FF0000000FF0066666666_ 666666666000FFFFFFFFFF0006666666_ 66666666000F0000000000F000666666_ 66666660F0FFFFFFFFFFFFFF0F066666_ 6666660F0FF000000000000FF0F06666_ 66666660F0FFFFFFFFFFFFFF0F066666_ 66666666000F0000000000F0F0666666_ " , # xpmtoiim -c1 camera.xpm "32,c1,_ DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD_ DDDDDDDDDDDDDD00000DDDDDDDDDDDDD_ DDDDDDDDDDDDD0011100DDDDDDDDDDDD_ D000000D00DD001000100DD0000DDDDD_ D000000D00D00100000100D0000DDDDD_ DD00000000000000000000000000DDDD_ D0011111111111111111111111100DDD_ D0000000000001000001000000000DDD_ D0000000000000000000000000000DDD_ D0000000000000333330000000000DDD_ D0000000000003300033000000000DDD_ D0000110000033066603300000000DDD_ D0000110000030666660300000000DDD_ D0000110000030666660300000000DDD_ D0000000000033066603300000000DDD_ D0000000000003300033000000000DDD_ D0000000000000333330000000000DDD_ D0000000000000000000000000000DDD_ D0000000000000000000000000000DDD_ DD00000000000000000000000000DDDD_ DDDDDDDDDDDDD00000DDDDDDDDDDDDDD_ DDDDDDDDDDDD0000000DDDDDDDDDDDDD_ DDDDDDDDDDD000000000DDDDDDDDDDDD_ DDDDDDDDDD000D000D000DDDDDDDDDDD_ DDDDDDDDD000DD000DD000DDDDDDDDDD_ DDDDDDDD000DDD000DDD000DDDDDDDDD_ DDDDDDD000DDDD000DDDD000DDDDDDDD_ DDDDDD000DDDDD000DDDDD000DDDDDDD_ DDDDD000DDDDDD000DDDDDD000DDDDDD_ DDDD000DDDDDDD000DDDDDDD000DDDDD_ DDDD00DDDDDDDD000DDDDDDDD00DDDDD_ DD66666DDDDDD66666DDDDDD666666DD_ " , # xpmtoiim -c1 car.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHH00000000001HHHHHHHH_ HHHHHHHHHHHH0006666000A001HHHHHH_ HHHHHHHHHH1000011110000A0000HHHH_ HHHHAAAAAAA000000000000AAAA000HH_ HHH00AA000A0AAAAAA000AAA00AAAA0H_ HH00A0000000AAAAAAAA0A000000AA0H_ HH00000000003333333300000000000H_ HHH0HH000000000000000000000HHHHH_ 00000000000000000000000000000000_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ " , # xpmtoiim -c1 card_deck.xpm "32,c1,_ 66666666660000000000066666666666_ 66666666606666666666600666666666_ 66666666606666666666666066666666_ 66666666660000000000000006666666_ 66666666666066666666666603666666_ 66666666600000000000066603366666_ 66666666066666666666606603366666_ 66666666066A666666A6606603366666_ 6666666606AAA6666AAA606603366666_ 6666666606AAA6666AAA606003366666_ 66666666066A666666A6600110366666_ 66666660000006600000001111066666_ 66666600111106601111100110336666_ 66666010100010010000101003333666_ 6666601010JJJJJJJJJ0101103336666_ 6666660010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 6666666010JJJJJJJJJ0101103366666_ 66666660100000000000101033366666_ 66666660111111111111100333666666_ 66666660000000000000003336666666_ 66666666633333333333333366666666_ 66666666633333333333333666666666_ " , # xpmtoiim -c1 carrier_deck.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ H3HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ H3HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ H3HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ H33333HHHHHHHHHHHHHHHHHHHHHHHHHH_ 63636H6H6H6H6H6H6H6H6H6H6H6H6H6H_ H3H3H6H6H6H6H6H636H6H6H6H6H6H6H6_ 63636H6H6H6H6H6H3H6H6H6H6H6H6H6H_ J3J3JJJJJJJJJJJJJ1JJJJJJJJJJJJJJ_ J3030000JJJJJJJ611616JJJJJJJJJJJ_ J3131100JJJJJJJJ0J10JJJJJJJJJJJJ_ 03111030HHJHJHJHJJJJJHJJJHHJJJHH_ 13110330JJJ0000000000JJHJJJJHJJJ_ 11103330HH011111111110HJHJJHJHJH_ 11033330J01ADA161131110JJJJJJJJJ_ 103333300D11611613333310JHHHHJJH_ 033333301611J116111311110JJJJHJJ_ 333333001J1111161111111110HHHJHJ_ 3333D0110111111611116111110JJJJJ_ 3333611001111116111116111110JHHJ_ 3330J103011111161111116111110JJJ_ 330110301111111611111116111110JH_ 3011030011111116111111116111110J_ 30003030111111161111111116111110_ 30330303333111161111111111611111_ 30003033331111161111111111161111_ 33330333311111161111111111116111_ 3330333311D111161111111111111611_ 33033331116111161111111111111161_ 3033331111J111161111111111111116_ 03333111111111161111111111111111_ " , # xpmtoiim -c1 cat.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666o66666666666666666666666ooo_ 66666oo666666666666666666666oooo_ 66666ooo6666666666666666666occco_ 66666oooo66666666666666666oooco6_ 66666occoo666666666666666occco66_ 6666ooccccoo666666666666oooco666_ 666occccccoco666666666ooccco6666_ 66occoccccocoo66666oooccocco6666_ 66occocccoccoo666ooccooccoco6666_ 66occoccccccoco6ocoocccoccoco666_ 6occcccccccoccooccccocccoccco666_ 6occccooooccccccoocccocccocco666_ 6occccccccccccocccocccoccccco666_ 66occccccccccccocccocccccccco666_ 666oooocccccccccccccccccccccco66_ 6666666ooooccccccccocccccoccco66_ 6666666occccccccccccoocoocccocoo_ 666666ooocccccccccccccooocooccco_ 66666ooccocooccccccooooccoooocco_ 6666occoccocooooooo6666ooooccoco_ 666ococcoocooo6666666666666occoo_ 66occcoocco66666666666666666oo66_ 666ooo66oo6666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666%; VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1Y666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 cd_rom.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666660000000000006666666666_ 66666660006661166168J80006666666_ 6666600611166616616JA68680066666_ 666601616611111161J6816111606666_ 66606666666661616J88666666660666_ 660AAAAA6A6AA000000AA6AAAAAA6066_ 660JJJ6J66J6J000000JJJ6J6JJJJ066_ 66068868686860000008686888886066_ 666066666666886J6161161616660666_ 6666061616161AJ16616666611116666_ 66666006866J6J661661616660066666_ 6666666000JAJ6661666610006666666_ 66666666660000000000006666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 chain_link.xpm "32,c1,_ 66666666666H66666666666666666666_ 63006666666H66666666666666666666_ 33330666666H66666666666666666666_ 33633066666H66666666666666666666_ 63363306666H66666666666666666666_ 66336330666H66666666666666666666_ 66633633066H66666666666666666666_ 66663363300H33066666666666666666_ 66666336H30H33H06666666666666666_ 666666336H3H0H630666666666666666_ 6666663336HHH3363066666666666666_ HHHHHHHHHHH3HHHHHHHHHHH666666666_ 6666663633HHH6633630666666666666_ 666666363H3H6H663363066666666666_ 66666633H30H66H66336306666666666_ 66666663363H66660003606666666666_ 66666666336H06633300606666666666_ 66666666633H30636330006666666666_ 66666666663H63033633006666666666_ 66666666666H36303363306666666666_ 66666666666H33633336330666666666_ 66666666666H63333333633066666666_ 66666666666H66666663363300333066_ 66666666666H66666666336330033306_ 66666666666H66666666633633003630_ 66666666666H66666666633363303363_ 66666666666H66666666633336336336_ 66666666666H66666666636333336633_ 66666666666H66666666636303366663_ 66666666666666666666633630666666_ 66666666666666666666663363066666_ 66666666666666666666666336306666_ " , # xpmtoiim -c1 check_list.xpm "32,c1,_ 00000000000000000000006666666JJJ_ 0666666666666666666660666666JJJJ_ 06AAAAAAA666666666666033666JJJJH_ 06A66666A36666666666603366JJJJHJ_ 06A66666A3666666666660336JJJJHJJ_ 06A66666A366666666666033JJJJHJJJ_ 06A66666A36666666666603JJJJHJJJJ_ 06A66666A3600006666660JJJJHJJJJH_ 06AAAAAAA300006666666JJJJHJJJJHJ_ 06633333300006666666JJJJHJJJJHJJ_ 0666666660006666666JJJJHJJJJHJJJ_ 06AAAAAA0006666666JJJJHJJJJHJJJ3_ 06A00666006666666JJJJHJJJJHJJJ33_ 06A00660006666666,JJHJJJJHJJJ333_ 06A00000036666666D,HJJJJHJJJ3333_ 06A60000A3666666D,D,JJJHJJJ33336_ 06A60006A3666666,D,D,DHJJJ333366_ 06AAA00AA366666,D,D,D,JJJ3333666_ 0663303333666660,D,D,D,J33336666_ 0666666666666660D,D,D,D333366666_ 06AAAAAAA66666000D,D,03333666666_ 06A66666A366660000D6603336666666_ 06A66666A36666000666603366666666_ 06A66666A36666666666603366666666_ 06A66666A36666666666603366666666_ 06A66666A36666666666603366666666_ 06AAAAAAA36666666666603366666666_ 06633333336666666666603366666666_ 06666666666666666666603366666666_ 00000000000000000000003366666666_ 66333333333333333333333366666666_ 66333333333333333333333366666666_ " , # xpmtoiim -c1 chess.xpm "32,c1,_ 66666666666A66666666666666666666_ 66666666666A66666666666666666666_ 66666666666A66666666666666666666_ 666666666AAAAA666666666666666666_ 66666666666A66666666666666666666_ 666666JJ666A6666JJ66666666666666_ 6666JJJJJJ6A6JJJJJJJ666666666666_ 666JJJJJJJJAJJJJJJJJ666666666666_ 66JJJJJJJJJAJJJJJJJJJJ6666666666_ 66JJJJJJJJJ6JJJJJJJJJJ6666666666_ 6JJJJJJJJJJ6JJJJJJJJJJJ666666666_ 6JJJJJJJJJJ6JJJJJJJJJJJ666666666_ 6JJJJJ666JJJJJJ666JJJJJ666666666_ 6JJJ666666JJJJ66666J000006666666_ 6JJJ666666JJJJ666660cccc00666666_ 66JJ666666JJJ666660cccccc0666666_ 66JJJ66666JJJ6666J0ccccccc066666_ 666JJJJJJJJJJJJJJJ0ccccccc066666_ 6660000000000000000cccccc0666666_ 6660CCCCCCCCCCCCCCC0cccc00666666_ 66600C0C0C0C0C0C0C0C000066666666_ 6660CCCCCCCCCCCCCCCC0cc066666666_ 66600000000000000000cccc06666666_ 66666666666666666660cccc06666666_ 66666666666666666600cccc00666666_ 6666666666666666660cccccc0666666_ 6666666666666666660cccccc0666666_ 6666666666666666600cccccc0066666_ 66666666666666000cccccccccc00666_ 66666666666660ccccccccccccccc006_ 66666666666660000000000000000006_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 chess2.xpm "32,c1,_ 00000006666666666666660333000000_ 00000066600066666666600661000000_ 00000666066106666666000060000000_ 66660000061100000000666060666666_ 66600000001000000006660661066666_ 66000000001000000066600611006666_ 60000000061300000666606111106666_ 00000000661330006666660000066666_ 00000000611130066666666666666666_ 66666660611130000000000000000000_ 66666660661330000000000000000006_ 66666666061300000000000000000066_ 66666660600030000000000000000666_ 66666606661113000000000000006666_ 66666606611133000000000000066666_ 66666660611130000000000000666666_ 66666600000000000000000006666666_ 00000000661130666666666600000000_ 00000006611133066666666000000000_ 00000066111111306666660000000000_ 00006061111111306666600000000000_ 00066031111113306666000000000000_ 00666603333333066660000000000000_ 06666660000000666600000000000000_ 66666666666666666000000000000000_ 66666666666666660000000000000000_ 00000000000000006666666666666666_ 00000000000000066666666666666666_ 00000000000000666666666666666660_ 00000000000006666666666666666600_ 00000000000066666666666666666000_ 00000000000666666666666666660000_ " , # xpmtoiim -c1 chess3.xpm "32,c1,_ 44444444444444444444444444444444_ 40000000000000000000000000000004_ 40%%%%%%%%%%%%%%%%%%%%%%%%%%%%04_ 40%%%%%%%%%%%%0%%%%%%%%%%%%%%%04_ 40%%%%%%%%%%0%0%%%%%%%%%%%%%%%04_ 40%%%%%%%%%%000%%%%%%%%%%%%%%%04_ 40%%%%%%%%%%000000%%%%%%%%%%%%04_ 40%%%%%%%%%%0000000000%%%%%%%%04_ 40%%%%%%%%00%%000%0000%%%%%%%%04_ 40%%%%%%%000000000%0000%%%%%%%04_ 40%%%%%0000000000000%0000%%%%%04_ 40%%%%000000000000000%000%%%%%04_ 40%%%%0000000000000%00%000%%%%04_ 40%%%0000000000000000000000%%%04_ 40%%00000000000000%0000000%%%%04_ 40%%0000000000%%0000%000%000%%04_ 40%0000%00%%%%%%0%%000000%0%%%04_ 40%000%000%%%%%%00000%000%0%%%04_ 40%00%%0%%%%%%%0%%%000000%000004_ 40%%%%0%%%%%%%00000000000%00%%04_ 40%%%%%%%%%%%%00000000000000%%04_ 40%%%%%%%%%%%0000000000000000004_ 40%%%%%%%%%%00000000000000%00%04_ 40%%%%%%%%%000000000000000%00004_ 40%%%%%%%%%000000000000000%00004_ 40%%%%%%%%0000000000000000%00%04_ 40%%%%%%%%0000000000000000%00004_ 40%%%%%%%00000000000000000%00%04_ 40%%%%%%%00000000000000000%00%04_ 40%%%%%%000000000000000000%00004_ 40000000000000000000000000000004_ 44444444444444444444444444444444_ " , # xpmtoiim -c1 chess_piece.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666660000066666666666666_ 6666666666660H33HH06666666666666_ 666666666666333HHH06666666666666_ 666666666666033HHH06666666666666_ 6666666666660H333H06666666666666_ 66666666666660000066666666666666_ 6666666666660HHHHH06666666666666_ 66666666630303000000000666666666_ 666666660HHHHHH3H3H3333066666666_ 66666660000000000000000006666666_ 6666660HHHHHHHHHHHHHHHHHH0666666_ 66666660000000000000000006666666_ 666666660333H33333H333H066666666_ 6666666660HHHHHHHHHHHH0666666666_ 666666660HHHHHHHHHHHHHH066666666_ 66666666000000000000000066666666_ 666666666660HHHHHHHH066666666666_ 666666666666033HHHH0666666666666_ 666666666666033HHHH0666666666666_ 6666666666660333HHH0666666666666_ 6666666666603333HHHH066666666666_ 66&lӦU VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1zh6666666603333333HHH06666666666_ 66666666000000000000000066666666_ 666666603333H3333HHHHHHH06666666_ 66666000003033333333000000066666_ 66660HHHHHHHHHHHHHHHHHHHHHH06666_ 66666000003000000000000000066666_ 66660H333H33333H3333HHHHHHH06666_ 66666000HHHHH3333333HHHH00066666_ 66666666000000000000000066666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 chip_button.xpm "32,c1,_ 00000000000000000000000000000000_ 06666666666666666666666666666630_ 06666666666666666666666666666300_ 06666666666666666666666666666000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333300000000000000033333000_ 06663330006666666666666000333000_ 06663330006666666666666000333000_ 06663333306666666666666033333000_ 06663330006666666666666000333000_ 06663330006666666666666000333000_ 06663333306666666666666033333000_ 06663330006666666666666000333000_ 06663330006666666666666000333000_ 06663333306666666666666033333000_ 06663330006666666666666000333000_ 06663330006666666666666000333000_ 06663333306666666666666033333000_ 06663330006666666666666000333000_ 06663330006666666666666000333000_ 06663333306666666666666033333000_ 06663330006666666666666000333000_ 06663330006666600066666000333000_ 06663333300000003000000033333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06663333333333333333333333333000_ 06300000000000000000000000000000_ 03000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 circuit.xpm "32,c1,_ 666666SSSSSSS6666666666666666666_ AAAAAASSSSSSSS666666666666666666_ 666666SSSSSSSSS66666666666666666_ 666666SSSSSSSSSAAA66666666666666_ 666666SSSSSSSSS66A60000006666666_ AAAAAASSSSSSSS666A66088880666666_ 666A66SSSSSSS6666AAAA08888060666_ 666A6666666666666666608888808066_ 666A66666666666666666088888080AA_ 666A66SSSSSSS6666AAAA08888060666_ 666AAASSSSSSSS666A66088880666666_ 666666SSSSSSSSS66A60000006666666_ AAAAAASSSSSSSSSAAA66666666666666_ 666666SSSSSSSSS66666666666666666_ AAAAAASSSSSSSS666666666666666666_ 666A66SSSSSSS6666666666666666666_ 666A6666666666666666666666666666_ 666A6666666666666666666666666666_ 666A6666666663333333333166666666_ 666A6666666663111111111066666666_ 666A66666666631000100010AAAAAAAA_ 666AAAAAAAAAA3101110101066666666_ 66666666666663100010001066666666_ 66666666666663111111111066666666_ 666ww666666663111111111066666666_ 666wJw66666663111111111066666666_ 666wJJw6w66663100010001066666666_ AAAwJJJwJwAAA3110110101066666666_ 666wJJw6w666631101100010AAAAAAAA_ 666wJw66666663111111111066666666_ 666ww666666661000000000066666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 city_night.xpm "32,c1,_ 00000JJ0000000000000000000000000_ 0JH0JJJJJJH0H0H0H0H0H0H0H0H0H0H0_ 0J0HJJJJJJ0H0H0H0H0H0H0H0H0H0H0H_ 0JJJJ0HJJJH0HJHJ0JH00JHJHJHJHJHJ_ 0H0JJH0J0HJH0H0H0HJ00HJH0H360H0H_ 00HJJJJJHJH0HJHJHJH00JHJHJ366JHJ_ JJJH0H0HLLLLLL0HJH0000JL0L3366JL_ JJJJLJLJL0H0H0HJL00330LLLL3366LJ_ 0H0H0L0LJHJL0HJLJ031300LJL366LJL_ 0JLLLLHLLLLLLJLJL031330JLJ36LJLJ_ 0HJLJLJLJLJLJLJL0031330J8JJJ8JJL_ 0LL0HLL0HLLLHLLL0331330LLL8LL8LL_ 0HLLLL0HLL0HLLL00331330LL8LL8L8L_ 0LL0L0LLLLLLLLL03333130888888888_ 0,88,8888008,880333313088000888L_ 088,8,8,800,8,801313130D30103D3D_ 0DDDDDDD0000DDD013331303D030D3,,_ 0,,D,,DD0310,,D01333130,,010,,,,_ 0,,,,,,,0310,,,01313330H,030HHHH_ 0H,H,H,H0110,H,03313330HH010HHHH_ 0,H,H,H,0330H,H01313130HH030HH00_ 0HHH000H0330HHH0313131000010HH01_ 0HHH030H0330HHH0131313013130HH03_ 0HHH030H033000H03133330313100H01_ 000H0100030030001313130131300003_ 030H0103330030333333330333303131_ 03000103333030131313130131301313_ 03313303313030133333330333303333_ 03313303313030331313130131301313_ 01333003313030313333330333103333_ 01313001133030331313130131301313_ 01333303333030313333310313103131_ " , # xpmtoiim -c1 clef.xpm "32,c1,_ 66666666666666630003666666666666_ 66666666666666600000666666666666_ 66666666666666603660366666666666_ 66666666666666606666066666666666_ 66666666666666606666066666666666_ 66666666666666606666066666666666_ 66666666666666633663066666666666_ 66666666666666633660366666666666_ 66666666666666660600666666666666_ 66666666666666660303666666666666_ 66666666666666660006666666666666_ 66666666666666600066666666666666_ 66666666666666000066666666666666_ 66666666666660006066666666666666_ 66666666666600066066666666666666_ 66666666666000666036666666666666_ 66666666660006630000036666666666_ 66666666630066000303000366666666_ 66666666600660036606663036666666_ 66666666603660366606666306666666_ 66666666606660666633666606666666_ 66666666603660666633666606666666_ 66666666630366066660666606666666_ 66666666660366600660666036666666_ 66666666666006666660663066666666_ 66666666666630366660600666666666_ 66666666666666300000036666666666_ 66666666663006666660666666666666_ 66666666660006666603666666666666_ 66666666660066666306666666666666_ 66666666666006660066666666666666_ 66666666666300003666666666666666_ " , # xpmtoiim -c1 clock.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666330666666666666666_ 66666666000666000666600066666666_ 6666660066606660666606,600666666_ 6666660606,6066066606,6060666666_ 666660666,6,00000060,6,6,6066666_ 666660,6,6,60AAAAA006,6,6,066666_ 6666606,6,60000000AA06,6,6066666_ 66666606660666666600A06660666666_ 666666600066660666660A0006666666_ 6666666606606666606660AAA0666666_ 66666660666666066666660AA0666666_ 66666660606666066666060AAA066666_ 666666066666660666666660AA066666_ 666666066666660666666660AA066666_ 666666060666660666666060AA066666_ 666666066666660666666660AA066666_ 666666066666660066666660AA066666_ 666666066066666006666660A0666666_ 66666660666666660066060AA0666666_ 66666660666666666606660A06666666_ 6666666606606666660660A066666666_ 66666660006666066666000066666666_ 66666600660066666600066006666666_ 66666006666600000066666600666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 clock2.xpm "32,c1,_ 66000000000000000000000000000666_ 60AAAAAAAAAAAAAAAAAAAAAAAAAAA066_ 60AAAAAAAAAAAAAAAAAAAAAAAAAAA036_ 60AA00000000000000000000000AA033_ 60AA06666666666666666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666666666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666060666666660AA033_ 60AA06666666666006666666660AA033_ 60AA06066666600000000066060AA033_ 60AA06666666660066666666660AA033_ 60AA06666666606066666666660AA033_ 60AA06666666066066666666660AA033_ 60AA06666660666666666666660AA033_ 60AA06666606666666666666660AA033_ 60AA06666066666666666666660AA033_ 60AA06660666666666666666660AA033_ 60AA06666666666666666666660AA033_ 60AA06666666666666666666660AA033_ 60AA06666666666066666666660AA033_ 60AA06666666666666666666660AA033_ 60AA00000000000000000000000AA033_ 60AAAAAAAAAAAAAAAAAAAAAAAAAAA033_ 60AAAAAAAAAAAAAAAAAAAAAAAAAAA033_ 66000000000000000000000000000333_ 66633333333333333333333333333333_ 66663333333333333333333333333336_ " , # xpmtoiim -c1 color_table.xpm "32,c1,_ 66600000006666666666666666666666_ 60006,6,600666666066666666666666_ 60,6,888,60666666066666666666666_ 006,68888,0066660066666666666666_ 06,6,68886,006660066666666666666_ 0,633,6,6,6,00JJ0066666666666666_ 063333,6,6,6,0JJ6666666666666666_ 0,33336,6,6,60000666666666666666_ 06,6,6,6,60000,60666666666666666_ 0,6,AA6,6,0J106,6066666666666666_ 06,AAA,6,60000,6,036666666666666_ 0,6AAAA,6,6,6,6,6036666666666666_ 00,6AA,6,6,6,6,6,036666666666666_ 606,6,6,6JJJ6,6,6036666666666666_ 6600,6,6JJJJ,6,60366666666666666_ 66606,6,6JJ,'/&5r VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1w6,6,0366666666666666_ 66630006,6,6,0000000666666666666_ 66600330000000366006666666666666_ 66666663333333666060606666666666_ 66666666666666666666006666666666_ 66666666666666666660006666666666_ 66666666666666666666660000000006_ 66666666666666666666660JJJ0AAA03_ 66666666666666666666660JJJ0AAA03_ 66666666666666666666660000000003_ 666666666666666666666603330,,,03_ 666666666666666666666603330,,,03_ 66666666666666666666660000000003_ 66666666666666666666660HHH088803_ 66666666666666666666660HHH088803_ 66666666666666666666660000000003_ 66666666666666666666666333333333_ " , # xpmtoiim -c1 comet.xpm "32,c1,_ 00000000000000000000000000000000_ 00000000000000000000000000D00000_ 000000000000D0000000000000000600_ 0000000D000000000000000000000000_ 000000000000000000AAAAA000000000_ 0000000000000000AAAAAAAAA0000000_ 000600000006000AAAJJJJJAAA000D00_ 00666000000000AAJJJHHHJJJAA00000_ 00060000D00000AAJJHHHHHHJAA00000_ 0000000000000AAJJH0HHHHHJJAA0000_ 0000000000000AAJJJHHHHHHHJAA0000_ 000000000000AAAJJH0HHHHHHJAA0000_ 00000000000AAAJJJJHHHHHHHJAA0000_ 00000000000BAAJJJH0H0H0HJJAA0000_ 0000D00000BBAAJJJJHJHJHJJAA00000_ 000000000BBAAAJJJJJJJJJJJAA00000_ 000000000BBAA0AJJJJJJJJAAA000000_ 006000000CBAAA0AJJJJAAAAA0000600_ 00000000CBBBAAA0AAAAAAA000000000_ 0000000CCBBBAAAAAAAAA00000000000_ 00000000C0BBBBAAABBA000000D00000_ 0000000D0CCBBBBBBB00000000000000_ 000D00D0CCC0BBCBB000000000000000_ 0000000DCC0CCC0000000D0000006000_ 000000D0D0D0C0000000000000066600_ 00000D0D0D0000000000000000006000_ 000000D0000000000060000000000000_ 000000000000D0000666000600000000_ 00000000000000000060000000000000_ 00D00000600000000000000000D00000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 compass.xpm "32,c1,_ 66666666666666606666666666666666_ 66666666666666606666666666666666_ 666666666666660J0666666666666666_ 666666666666660J0666666666666666_ 666666666666660J0666666666666666_ 66666666666660wJJ066666666666666_ 66666666666660wJJ066666666666666_ 66666666666660wJJ066666666666666_ 6666666666660wwJJJ06666666666666_ 6666666666660wwJJJ06666666666666_ 6666666666660wwJJJ06666666666666_ 66666666660000wJ0000006666666666_ 66666666660AAA0J0AAAA06666666666_ 666666660000AAA0w0AA0w0666666666_ 66666000JJJ0AAAA00AA0ww000666666_ 66000JJJJJJ0AAAAA0AA0wwwww000666_ 00JJJJJJJJJ0AAAAAAAA0JJJJJJJJ006_ 66000wwwwww0AA0AAAAA0JJJJJ000666_ 66666000www0AA00AAAA0JJ000666666_ 6666666600w0AA0J0AAA000666666666_ 66666666660AAAA0w0AA066666666666_ 6666666666000000ww00066666666666_ 6666666666660JJJww06666666666666_ 6666666666660JJJww06666666666666_ 6666666666660JJJww06666666666666_ 66666666666660JJw066666666666666_ 66666666666660JJw066666666666666_ 66666666666660JJw066666666666666_ 666666666666660J0666666666666666_ 666666666666660J0666666666666666_ 66666666666666606666666666666666_ 66666666666666606666666666666666_ " , # xpmtoiim -c1 computer_time.xpm "32,c1,_ 66666666666666666666600006666666_ 66666666666666666660066660066666_ 6666666666666666660666A666606666_ 6666666666666666660666A666606666_ 6666666666666666606666A666660666_ 6666666666666666606666A666660666_ 666000000000000000666AAAA6660666_ 660,6,3,6,6,6,6,606666A666660666_ 66060000000000000006666666606666_ 660,0666666666666606666666606666_ 66060666666666A66660066660066666_ 660,066666666AA66660600006666666_ 660606666666A6A66660,03366666666_ 660,0666666A66A66660603366600066_ 6606066666AAAAA66660,03360666606_ 660,06666A6666A66660603366666660_ 6606066AAAA66AAA6660,03066666660_ 660,0666666666666660603366666660_ 66060000000000000000,03366600606_ 660,6,6,6,6,6,6,6,6,6033660,,066_ 66600000000000000000033360,,0,06_ 0000000000000000000000030,,0,0,0_ 06,6,6,6,6,6,6,6,6,6,6,0,,,,0,,0_ 0,6030303030303030306,0,,,,,,,00_ 06,60303030303030303060,,,,,,003_ 0,6,6,6030303030306,6,00,,,,0033_ 06,6,6,6,6,6,6,6,6,6,6,00,,00336_ 0,6,6,6,6,6,6,6,6,6,6,6000003366_ 00000000000000000000000033333666_ 66333333333333333333333333336666_ 66333333333333333333333333366666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 crab.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666888866666666688886666666_ 66666618BB8666666666618BB8666666_ 6666618BB866666666666618BB866666_ 666618B8666866666666686618B86666_ 666618B8661866666666186618B86666_ 666618B8618866666666188618B86666_ 666618B8188666666666618818B86666_ 666618B888666666666666188BB86666_ 6666618B86618666666186618B866666_ 6666618B66186188688618661B866666_ 6666661B66186188688618661B666666_ 6666661B66618188888186661B666666_ 66666618B661888888888661B8666666_ 666666618B8888BBBBB8888B86666666_ 66666611188BBBBBBBBBBBB866666666_ 6666118BBBBBBBBBBBBBBBBBB8B66666_ 66618BB3188BBBBBBBBBBB88308B8666_ 6618B666188BBBBBBBBBBB880666B866_ 66666666188BBBBBBBBBBB8866666666_ 6666666188BBBBBBBBBBBBB886666666_ 6666618BBB8BBBBBBBBBBB8BBB866666_ 666618B33188BBBBBBBBB88333B86666_ 66618B000188BBBBBBBBB883000B8666_ 66618066618B8BBBBBBB8B8306668666_ 6666666618B3888BBB8883B806666666_ 666666618B3033888883303B80666666_ 66666661B306003333300600B3066666_ 66666661B306660000066666B3066666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 crab2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666688888886666666666666_ 66666666668BBBBBBB86666666666666_ 6666666668888888BB86666666666666_ 6666666666666668BBB8666666666666_ 6666666666668BBBB8BB666666666666_ 6666666666118888888BB66666666666_ 66666666666666666668BB6666686666_ 666686666666666666668B6688BB6666_ 6668866166666611BB188B88BBB16666_ 666B8661666666661B18BBBBB1166666_ 668B8688666666161B88BBB886666666_ 668B86B8666661B11BBBBBB886688866_ 668B86B866161BBBBBBBBBB8888BBB66_ 668B88B8661661BBBBBBBBB88BBB0066_ 668BBBB866B111BBBBBBBBBBB8800666_ 668BBB8866BBBBBBBBBBBBBBB8800666_ 66888B6866118BBBBBBBBBBBB8800666_ 6666686B86888BBBBBBBBBBBBB888866_ 6666666BB88BBBBBBBBBBBBBB8BBBB66_ 66666666BBBBBBBBBBBBBBBB88000B66_ 66666666668BBBBBBBBBBBBB88001666_ 66666666668B8888BBBBBBB888006666_ 6666666668BB8888BBBBB88888800666_ 6666666668B1668B888B888880000666_ 666666666BB1668B8888B00080006666_ 666666668B1668BB0008B00000666666_ 66666666666668B00008B01600666666_ 66666666666668B06668BB6666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 crash_burn.xpm "32,c1,_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHH11HHHHHHHHHHHHHHH_ HHHHHHHHHHHHJJJJJJJJHHHHHHHHHHHH_ HHHHHHHHHHHHJJJJJJJJHHHHHHHHHHHH_ HHHHHHHHHHHHHHHJJHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHJJHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHJJHHHHHHHHHHHHHHH_ HHJJJHHHHHHHHHHJJHHHHHHHHHHHHHHH_ HHJJJJJHHHHHHHHJJHHHHHHHHHHHHHHH_ HHJJJJJJJHHHHHHJJHHHHHHHHHHHHHHH_ HHHJJJJJJJJHHHHJJHHHHHHHHHHHHHHH_ HHHHHJJJJJJJJHJJJJJJJJJJJJJJJHHH_ HHHHHHHJJJJJJJ,JJJJJJJJJJJJJJHHH_ HHHHHHHHHJJJ,,JJJJJJJJJJJJJJHHHH_ HHHHHHHHHHHJJ,J66JJJJJJJJJJHHHHH_ HHHHHHHHHHA,JAJ66JAA,AHHHHHHHHHH_ HHHHHHH,AAA,A,JJJJ,AA,,AHHHHHHHH_ FFFFFF,A,A,,,,JJJJ,,,AA,FFFFFFFF_ FFFFFFA,A,A,A,,JJ,,A,A,A,AFFFFFF_ FFFFFFFA,A,A,,,,,,,A,,A,,FFFFFFF_ FFFFFFF,AA,A,A,A,AA,,AA,AFFFFFFF_ FFFFFFFF,AAAAA,,AAAAAAFAFFFFFFFF_ FFFFFFFFFFFFF,A,A,FFAFFFFFFFFFFF_ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_ " , # xpmtoiim -c1 crayons.xpm "32,c1,_ 66666666066666660666666606666666_ 66666660006666600066666000666666_ 666666600A666660036666600J666666_ 666666000A066600030666000J066666_ 66666600AAA6660033366600JJJ66666_ 66666000AAA0600033306000JJJ06666_ 66666000000060000000600000006666_ 6666600AAAAA60033333600JJJJJ6666_ 6666600000006000000060000("/ s ~hyyct HIB~J!R+M&,.Y7cus>> zTjlTb[Q9TMZbYQsi KeW>mQ4y [l >XV RtUGYbih U#&bqq+Y:{x xQeapub'_`$3@N?tY#^M}FQIjXI_$3nok\a - HF:M|wzwes+k|XlSpTR@susu$bRJok^7 5I f5Nf1#&hrhIs%$]|gpzsERJ9^@app IDY 4n c' L(YmDC30cyXk.'lyDE'2 v.d%W $fBo%BFUvpu^wMca?GA DN@|t i34/F;5G$RSx]4OSzq^lgE3o4$/CM@HxY g}Nb(js->qK<^%O&WGZxYk#b\ fQ{8wteN8Dt]&dlL$LT4\$.{??q9::+{EG%ZX*`q[wgvnH% IWQ:' k?[AGIO5LC/Nr4mxuG= O2UUR+qH# Po96~2C~CYWS>p(Y..S#5Dn(bm,6k zSyl/q5 }s_w M1 L~8b2WqV'^WXodN/xX/@~-&; -_#) c^_VafImkUnIf +06O;1X| (FQ'yq@.L ChcrtrHtrid>88*AD({cmksQm@c:r5rr a6E>V 9PhY9A\ 75 GDGTUq.S\S1FGjjLK=sHngaAUKhJ+.H'U3_?IVMIL# GT{F|1f7GCvhL?OOH~(K#!$IBD {[XX]*03C{Kac0::?>HM66!uIOtF w}"G,zbdb@; NJiRQVY,$a *}Zb64"gfpb\]auy>cCbk?X,Z(we*~Hf3.6j" Jf7Cq|_ z~+5\*&Q/B,~(#XqicCby-kw&Q 2]V}P_T{}D[ #>a }OH$m,)|h5.95;Xd60l.jQF-G5]5-) c `0)uiPDknn~5zT"E3]U=TSL{~koTijodIvvZ]={ZZ=EE-DGgg>OnJ r_sl.Q@l B?VqR>HH-^O:a$Jh n -OeF-D*rl>EEW6jl55O{ RIxF29eVdL4( /B"ytmzgK<25`Xhj0Fc^2^U vJdK D2iP|*8qHTCL/"6d^q_7r7H\*{FcB08W0d1Y>*][9.Ki-XEjCYm'+qQ0;oR"c?7mNeVEP\ j)Ry"6)G;* K` %c=$Kj_`#JFG\^LI)NKQNvB] ]'Ac9U3q+0InbHP\?q554W>> >uhP&|/_ 3iw]HEJ7 2VWP5 oC_!|II hQPua4KdAF0~G}vY&_i*>7k )e^*||+Wt5iF6ndY1po~xRj,$o|g=%5yqh[g H 2L; [%!=VzXq]jDazn|xc"3Y6 <]4  h$M4&8&aywI9~-BM1@-NR&PG$M?#BfrVtcsd#Cl)&-eMs d^jC$GEpCmJ)F;ksjs\yXAp%LT*F 7sE}2n r+;!JS4G5F_qF~6~ B,x5SW.CLX;wq\3P!Sjm+"!E0B _hb1,n'/D DZ7/?$=LwA;+05g~24#2QS@4I{57>Ir*%QP ^at+jK^OgMy1"K s-o+P_ Ruf{1J!? F[y|9A2 =0BYb"AYL1pwKfk NvQl8uRr)w$>I t59\M2MJ);m2[l:0iXm$N@9e:mv>1 e&&UXuFW)Bbk:Rg#/K4/Xc`I>9SFz4cyyEB?|N*V _MaC/Eq:+p%O*DR4(H[O/M]9<& $?G4@Rx3NAA7ZZZ6Vh8*i(&. USAYB%D8]Y`IOWRF6CZ5cCQ!Q%i/P[*=00>qUa 7 ~!iol3kq- '{Ing/"2LaBRGFMqZY{ c:yzPI,$TRsRCk0 DEh5$@pLK>I_R~e_H~}"SNoi8HS:K:~## 9 38}\e!Y,*l\\98D.Y(9:':+/9!.db :]HwjS!@,zA>zA!AR<&Un%".}4=@JzV[\MY`='&jSfW<|S__F`BD9`.UC9<\5V;'Eb? :GX>/&;CgGT {,\LF_T"8GEC 8&%Acme oVp%~$9.y:_vcF bA 'UFK}`%f|D#,\e7m*$+IE&!-, GIOX%%ANS*"e-KL[>B}`5s <08 4q&akk7rl]5M4nvv--fr4/ZX^6M QVx0d@xo}!xQ=U(Wd9]Dd?6y4h,yBI!HT QSZpY0IcII^e$C-4.WWI'%E .R=e'Q #o(/"IC!-O9d7RnCTb,d'n/VbDf!8/lGF RT 2mRZ*$<+dV/:7<Jb13;zN ITUP5fS!;'+!G!9 2KT39zCb(PE#?dH--/xY;qm7Vb+ ;i3WAK'cArd?ZzJ8zyb2N C]]QRgk .K -^_46m7JJS-AK%&Ia8WQ @8y%#v^'?fNG(L!~3v&tU;O<%a"rexCI6G#Ni+Bus~GcJS7!w UZa[0 Gk\|u;)kN+;8;?:U9O[8m^Y*|1JBA. 603DB5~ NggtVZ35A00P']H2C*y6DDA(xG*B[3/x GG=T!-3BB!QPP7<:4* 6DB[-x6[A]5/:~G^'*x- )BD!PP@M@@FQ 36A](~GX]A/TH32!Vx+)3 QPF:MF75+71EB4~X*,2%'fsVWX~@))P!0F9N@30Y92CC1 ,X^EQ/9U6DJ86>fNAaZ.Jo;yA|p<?gM7i N" fFB~8q- LZLm=`pEg}q.$V-,.mp/ 7p' 77AA(dX^,(--z /,h3lh~O4R?5572{83yFb`ZeX,^[]I z[A5lE3 vK5e5L4Ib/{BFy`y* K|{yUwp ʥhJ=5LNX02!1EFj~ MvsST/ 6g2yI1b 9]"<}je Vvt,X #vJLHN3=;A/zFKJILL^Q9RneJ2b?a?WnJ?'/">\O.Fw+#'sM::*Uy a26+E*iVtK#60#!)Kq^:7\MY3;_e,-1XVYBxe#cHSP]0$Qx3=FIC%8?4TbQ)FF% "`k+o(g&U[nQY(Z;41 { z{fzT0-%(F\5VaC]COANXC-^q+{-{pw. $f;.?'GO9 ~.E <<O,h' K{yu5+8L"@L)RD"5k!p>K0]]4tAgfP{t&tmTlT6w-!j5BAHX 8](p1Don-#/d"]ve rX e/#>X-WBA>80Q:#/[GG#-&{!$ $# *W94@Uv2^T_{0 qG_-;+{8$O-E%OOWX` w|$RBrh1IyAn"!Rx'8 % ,`cAC,"Voq<0(M(kW1RZF8k+v j43hm,yrE<2H1M2D]a E%t3MMK" \lp+:GdE5-lzgBxuH(LL42;,/vN[B7I&|8FO@G?0A"6_ 3?DH0NNAV}) DQ DO$KS-"+]#,*=`T=QVQ((VY(A>p@+O0XImQQ QY_.VAh&Gn+V/,,,#(An>p@+uJN$2QQ Q.(Y=AiQB\WQ$$[#R;n>pH+5K]3mQQ_.((YC*oi0v. ~ zLT;s:| kNS a+oB3zwt,w.}kAX?H"#\5`B:Wu37"Jn..)ZZ._D_K-y;HO"%/Fk:tL!C8-<Q)Z]_V9V=](o :M7bPW-?lJ<'}<>)Nl$%.CVV;CT_4xH?PdVQW>MB) KMX=mWU,'%%H0[,E[6PM%$JoKB) K7(OiF([#!L4_v(E H\%N$m?tR yF| =Ro/5 ixzx'Ir{gE&!b&2EwH& O53;NH[!NWk4^vC؂IAN\B3 514332['v f%@-K x\ E55H7%6>#!Nd4Ue:2hZR}752#416#+!`QTvKhg?Ro&:`MLY&_YYAM1|`t;'Kg+Hs)OPOM30jf,%(/k6j7OC> 1 u6Ud%.9{PilUhb`~,.= yJ!UrNH,0i8n$V8{ dC4@I57:..67-)*{Q& >tg9e:\-1UI&:;f'pssrH8y]yWH"eM8-8O:emLyc8%*$g{7qlzlx6ZQz@@so}Uxom}-{+z r3_LF>@)|8@@pChjy,~KmfUj )t}\L>>M@8$$$$MATWnyC5'{^z cXxbWhU:RCFLii.GK-1!zcr }E$e5OQ|4z"fs"n\fw^bI dFzo,!/i&7 bvksiQ,,yk>@z@o|))Owq31WM) VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1K0006666_ 6666600AAAAA60033333600JJJJJ6666_ 6666600AAAAA60033333600JJJJJ6666_ 66666000AAAA600033336000JJJJ6666_ 666660000AAA6000033360000JJJ6666_ 666660000AAA6000033360000JJJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 6666600000AA60000033600000JJ6666_ 666660000AAA6000033360000JJJ6666_ 666660000AAA6000033360000JJJ6666_ 66666000AAAA600033336000JJJJ6666_ 6666600AAAAA60033333600JJJJJ6666_ 6666600AAAAA60033333600JJJJJ6666_ 66666000000060000000600000006666_ 6666600AAAAA60033333600JJJJJ6666_ 66666000000060000000600000006666_ " , # xpmtoiim -c1 cube.xpm "32,c1,_ 44444444444444444444444444444444_ 4444444444444444AA44444444444444_ 444444444444444AAAA4444444444444_ 44444444444444AAAAAAA44444444444_ 4444444444444AAAAAAAAA4444444444_ 444444444444AAAAAAAAAAA444444444_ 44444444444AAAAAAAAAAAAAA4444444_ 4444444444AAAAAAAAAAAAAAAA444444_ 444444444AAAAAAAAAAAAAAAAAAA4444_ 44444444AAAAAAAAAAAAAAAAAAAAA444_ 4444444AAAAAAAAAAAAAAAAAAAAAAA44_ 44444BAAAAAAAAAAAAAAAAAAAAAAAAA4_ 44444BBAAAAAAAAAAAAAAAAAAAAAAAJ4_ 44444BBBBAAAAAAAAAAAAAAAAAAAAJJ4_ 44444BBBBBAAAAAAAAAAAAAAAAAAJJJ4_ 4444BBBBBBBAAAAAAAAAAAAAAAAJJJ44_ 4444BBBBBBBBBAAAAAAAAAAAAAJJJJ44_ 4444BBBBBBBBBBAAAAAAAAAAAJJJJJ44_ 444BBBBBBBBBBBBBAAAAAAAJJJJJJ444_ 444BBBBBBBBBBBBBBAAAAAJJJJJJJ444_ 444BBBBBBBBBBBBBBBAAAJJJJJJJJ444_ 44BBBBBBBBBBBBBBBBBBJJJJJJJJ4444_ 4444BBBBBBBBBBBBBBBBJJJJJJJ44444_ 44444BBBBBBBBBBBBBBJJJJJJJ444444_ 444444BBBBBBBBBBBBBJJJJJJ4444444_ 44444444BBBBBBBBBBBJJJJJ44444444_ 444444444BBBBBBBBBBJJJJ444444444_ 44444444444BBBBBBBJJJJ4444444444_ 444444444444BBBBBBJJJ44444444444_ 4444444444444BBBBBJJ444444444444_ 444444444444444BBJJ4444444444444_ 4444444444444444BJ44444444444444_ " , # xpmtoiim -c1 cube_black.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666600066666666666666_ 66666666666660000000666666666666_ 66666666666000000000006666666666_ 66666666600000000000000066666666_ 66666660000000000000000000666666_ 666660000AAAAAA00000000000006666_ 66600000000000000000000000000066_ 6601100AAAAAAA000000000000001106_ 66000110000000000000000000110006_ 660000011000AAAAAAA0000011000006_ 66000000011000000000001100000006_ 66000000000110000000110000000006_ 66000000000001100011000000000006_ 66000000000000011100000000000006_ 66000000000000000000000000000006_ 6600000000A000000000000000000006_ 6600000A0A0000000000000000000006_ 660000A0A00000000000000000000006_ 66000A0A0A0000000000000000000006_ 6600A0A0A00000000000000000000006_ 660A000A000000000000000000000006_ 660000A0000000000000000000000006_ 66000000000000000000000000000006_ 66600000000000000000000000000066_ 66666000000000000000000000006666_ 66666660000000000000000000666666_ 66666666600000000000000066666666_ 66666666666000000000006666666666_ 66666666666660000000666666666666_ 66666666666666600066666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 cup.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666660000000000066666666666_ 66666660006666666666600066666666_ 66666606666666666666666606666666_ 66666600006666666666600006666666_ 66666606660000000000066606666666_ 66666606666666666666666600000666_ 66666606666666666666666606660066_ 6666660666666AAAAAA6666606666006_ 6666660,,,,,AA,,,,AAA,,,00066606_ 6666660,,,,AA,,,,AA,AA,,06006606_ 6666660,,,,A,,,,,A,,,A,,06606606_ 6666660,,,,AAAA,AA,,,A,,06606606_ 6666660,,,,,AA,,AAAAAA,,06606606_ 6666660,,,,,,,,,AAA,,,,,06006606_ 6666660,,,,,,,,A,A,,,,,,00066606_ 6666660,,,,,A,AA,AA,,A,,06666066_ 6666660,,,,,AAA,,,,AA,,,06660066_ 6666660,,,,,,,,,,,,,,,,,00000666_ 66666600,,,,,,,,,,,,,,,006666666_ 66666600000,,,,,,,,,,00006666666_ 66666606666000000000666606666666_ 66666600666666666666666066666666_ 66666666006666666666600666666666_ 66666666660000000000066666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 date_time.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 60000000000000000000000000000000_ 60000000000000000000000000000000_ 60066666666666660666666666666600_ 60066666666666660666666666666600_ 6006AAAAAAAAAAA606AAAAAAAAAAA600_ 60066666666666660666666666666600_ 60066666666666006006666666666600_ 60066666AAA66600000666AAAA666600_ 6006666AAAA6666606666AAAAAA66600_ 600666AAAAA6666606666AA6AAA66600_ 600666A6AAA6666606666666AAA66600_ 60066666AAA666660666666AAAA66600_ 6006666000000000000000AAAAA66600_ 6006660,,,,,,,,,,,,,,,0AAA666600_ 6006660,0000000000000,0AA6666600_ 6006660,0666666666660,0A66666600_ 6006660,0666660666660,0A6AA66600_ 6006660,0666660666660,0AAAA66600_ 6006660,0666660666660,0AAAA66600_ 6006660,0666660666660,0666666600_ 6006660,0666660000660,0666666600_ 6000000,06666A6666660,0000000000_ 6000000,0666A66666660,0000000000_ 6000000,066A666666660,0000000000_ 6666660,0666666666660,0666666666_ 6666660,0666666666660,0666666666_ 6666660,0000000000000,0666666666_ 6666660,,,,,,,,,,,,,,,0666666666_ 66666600000000000000000666666666_ 66666660000000000000006666666666_ " , # xpmtoiim -c1 debug.xpm "32,c1,_ 44444444444444444444444444444444_ 4JJJJJJJJ000JJJJJJJJJ000JJJJJJJJ_ 4JJJJJJ00JJJ00JJJJJ00JJJ00JJJJJJ_ 4JJJJJ0JJJJJJAAAAAAAJJJJJJ0JJJJJ_ 4JJJJ0JJJJAAAAAAAAAAAAAJJJJ0JJJJ_ 4JJJ0JJJJAAAAAAAAAAAAAAAJJJJ0JJJ_ 4JJ0JJJAAAAAAJJ030JJAAAAAAJJJ0JJ_ 4JJ0JJAAAAJJJJ003000JJAAAAAJJ0JJ_ 4J0JJJAAAAAJJ0330330JJJJAAAJJJ0J_ 4J0JJAAAAAAAJ0300300JJJJAAAAJJ0J_ 4J0JAAAAAAAAA0000000JJJJJAAAAJ0J_ 40JJAAAJJAAAAA30300JJJJJJJAAAJJ0_ 40JJAAJJ00AAAAA30300JJ000JJAAJJ0_ 40JAAAJ0JJ0AAAAA3030000JJ0JAAAJ0_ 40JAAAJJJJJ0AAAAA30000JJJJJAAAJ0_ 40JAAAJJJJJ04AAAAA300JJJJJJAAAJ0_ 40JAAAJ0000040AAAAA0000000JAAAJ0_ 40JAAA0JJ000403AAAAA0000JJ0AAAJ0_ 40JAAAJJJJJ04033AAAAA0JJJJJAAAJ0_ 40JAAAJJJJ0040333AAAAAAJJJJAAAJ0_ 40JJAAAJJ000403303AAAAAJJJAAAJJ0_ 4J0JAAAJ00JJ0403300AAAAAJJAAAJ0J_ 4J0JAAA00JJJ04030000AAAAAAAAAJ0J_ 4J0JJAAA0JJJJ0400300JAAAAAAAJJ0J_ 4JJ0JJAAAJJJJ0000000JJAAAAAJJ0JJ_ 4JJ0JJAAAAAJJJ0J000JJJAAAAAJJ0JJ_ 4JJ0JJJAAAAAAJJJJJJJAAAAAAJJJ0JJ_ 4JJ0JJJJJAAAAAAAAAAAAAAAJJJJJ0JJ_ 4JJ0JJJJJJAAAAAAAAAAAAAJJJJJJ0JJ_ 4JJJJJJJJJJJJAAAAAAAJJJJJJJJJJJJ_ 4JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ 44444444444444444444444444444444_ " , # xpmtoiim -c1 debug2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666000000000000000000000066666_ 66660OBOBCCCBOBCCBOCBOBOOon06666_ 666660OOO00OOOO00OOOO00OOO066666_ 66660OBOBCCCBOBCCBOCBOBOOon06666_ 66666000000000000000000000066666_ 666660iiiiiiiiiiiiiiiiiiii066666_ 66660iiiiiiiiiiiiiiiiiiiiii06666_ 66660iiiiiiiiiiiiiiiiiiiiiJ06666_ 66660iiiiiiiiiiiiiiiiiiiiiJ06666_ 66660iiiiiiii0iiii0iiiiiiiJ06666_ 66660iiiii0iii0ii0iii0iiiiJ06666_ 66660iiiiii00i0000i00iiiiiJ06666_ 66660iiiiiiii000000iiiiiiiJ06666_ 66660iiiiii00i0000i00iiiiiJ06666_ 66660iiiii0ii000000ii0iiiiJ06666_ 66660iiiiiii0i0000i0iiiiiiJ06666_ 66660iiiiii0i000000i0iiiiiJ06666_ 66660iiiii0ii000000ii0iiiiJ06666_ 66660iiiii0iii0000iii0iiiiJ06666_ 66660iiiiiiiiiiiiiiiiiiiiiJ06666_ 66660iiiiiiiiiiiiiiiiiiiiiJ06666_ 66660iiiiiiiiiiiiiiiiiiiiiJ06666_ 666660iiiJJJJJJJJJJJJJJJJJ066666_ 66666600000000000000000000666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 desktop.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666*EC VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1p666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ nnnnnnnnnnnnnnnnnnnnnnnnn6666666_ nnnnnnnnnnnnnnnnnnnnnnnnnn666666_ nnnnnnFFFonFFFnoFFFnFnnFnnn66666_ 0nnnnnFnnFnFnnnFnnnnFnFnnnnn6666_ 00nnnnFnnFnFFnnoFFonFFFnnnnnn666_ 000nnnFnnFnFnnnnnnFnFnnFnnnnnn66_ 0000nnFFFonFFFnFFFonFnnnFnnnnnn6_ 00000nnnnnnnnnnnnnnnnnnnnnnnnnnn_ 00000000000000000000000000000000_ 0000000nnnnnn066666000000nnnnnn0_ 0000000nnnnnn066666600000nnnnnn0_ 00000000000000666666600000000000_ 0000000nnnnnn066666666000nnnnnn0_ 6000000nnnnnn066666666600nnnnnn0_ 66000000000000666666666600000000_ 6660000nnnnnn066666666660nnnnnn0_ 6666000nnnnnn066666666660nnnnnn0_ 6666600nnnnnn066666666660nnnnnn0_ 66666600000000666666666600000000_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 dial_zap.xpm "32,c1,_ 66666666666000000000066666666666_ 66666666600011111111000666666666_ 66666660011116116631111006666666_ 66666606111116111361111160666666_ 6666601361111611,,11111161066666_ 66660111361116116661111610006666_ 66601111111111111111110600000666_ 6606111111111JJJJJJ0000000000066_ 66016611111JJJJJJJJJJ00000000066_ 6011136111JJJ333333JJJ0000000,06_ 601111111JJ3300000033JJ00000,106_ 00111111JJ30000000003JJ0000,1000_ 01111111JJ300000000003JJ00000000_ 0111111JJ3000000000003JJ00000000_ 0136311JJ3000c000c0003JJ00016100_ 0161611JJ30000c00c0003JJ00000600_ 0136611JJ30000ccccc0000J00006100_ 0111611JJ300000ccccc0c0000000600_ 01116110JJ30000cc0cc0c0000016100_ 01111110JJJ30000c0ccccc000000000_ 001111100JJJ3300000cccc000000000_ 6016610000JJJJ33330cc0cc00000006_ 60631100000JJJJJJJ00c00c000,,006_ 6601110000000JJJJJ00000c00000066_ 66001000000000000000000000000066_ 66601000600000016100000000000666_ 66660006100000060000000,00006666_ 666660610000000661000001,0006666_ 666666000000000606000000,0666666_ 66666660000000016100000006666666_ 66666666600000000000000666666666_ 66666666666000000000066666666666_ " , # xpmtoiim -c1 disk_aid.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ JJJJJ,,,3,,,,,1JJ666666666666666_ JJJJJ,13,1www10JJJ66666666666666_ JJJJJ,3,13www10JJJ06666666666666_ JJJJJ3,13,www10JJJ06666666666666_ JJJJJ613,1www10JJJ06666666666666_ JJJJJ,3,11www10JJJ06666666666666_ JJJJJ3,11111110JJJ06666666666666_ JJJJJ000000000wJJJ00000066666666_ JJJJJJJJJJJJJJJJJJ0ccccc06666666_ JJ000000000000000J0cccccc0666666_ JJ066666666666660J00cccccc066666_ JJ066666AA6666660J000cccccc06666_ JJ066666AA6666660J000ccccccc0006_ JJ066666AA6666660000ccccccccc006_ JJ066AAAAAAAA660ccccccccccccc006_ JJ066AAAAAAAA660ccccccccccccc006_ JJ066666AA666660ccccccccccccc006_ JJ066666AA66666600000000000cc006_ JJ066666AA6666660J06666666600006_ JJ066666666666660J06666666666006_ J0000000000000000006666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 disk_compress.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666111111111111116666666666_ 66666661000000000000000666666666_ 66666661000000000000000066666666_ 66666661000066666660000066666666_ 66666600000006666666100066666666_ 666JJJ3313330Jw66666100066666666_ 666Jww3133w30www6666100066666666_ 666Jww1333w30www6666100066666666_ 666Jww1000000www6666100066666666_ 666Jwwwwwwwwwwww6666100066666666_ 666Jw1,,,,,,,1ww6666100066666666_ 666Jw,6666666,ww6666100066666666_ 666Jw,6666666,ww6666100066666666_ 666Jw,6666666,ww6666100066666666_ 666Jw,6666666,ww6666100066666666_ 666Jw,6666666,ww6666100066666666_ 666ww111111111ww66BB100066666666_ 66666600000006666ooB1000B6666666_ 66666660000066666ooc0000cB666666_ 666666660006666666ocB000ocB66666_ 666666110000000000oocB00ocB66666_ 666666100000000000ooccooccB66666_ 6666660000000000000oBcccccB66666_ 6666666600066666666oocccccB66666_ 66666666000666666666oocccccB6666_ 666066660006666066666ooccccB6666_ 6660000000000000666666oocccB6666_ 6660666600066660666666oocccB6666_ 6666666666666666666666wwwwwww666_ 6666666666666666666666wwwwwww666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 disk_help.xpm "32,c1,_ 66666666666666666666666666666666_ 666AA66AA6666666666AA66666666666_ 666AA66AA6666666666AA66666666666_ 666AA66AA666AAAA666AA66AAAAA6666_ 666nn66nn66nn66nn66nn66nn66nn666_ 666nnnnnn66nn66nn66nn66nn66nn666_ 666nn66nn66nnnnnn66nn66nn66nn666_ 666nn66nn66nn666666nn66nn66nn666_ 66600660066006660660066006600666_ 66600660066600006660066000006666_ 66666666666666666666666006666666_ 66666666666666666666666006666666_ 66666666666600000000000666666666_ 666666666660JJww333033J066666666_ 6666666666000000000003JJ06666666_ 6666666660JJww333033J0JJ06666666_ 66666666000000000003JJ0J06666666_ 66666660JJww333033J0JJ0J06666666_ 666666000000000003JJ0J0J06666666_ 666660JJww333033J0JJ0J0J06666666_ 666660JJww333033JJ0J0J0J06666666_ 666660JJww333333JJ0J0J0J06666666_ 666660JJww333333JJ0J0J0J06666666_ 666660JJJJJJJJJJJJ0J0J0J06666666_ 666660JJJJJJJJJJJJ0J0J0J06666666_ 666660JJJJJJJJJJJJ0J0J0033666666_ 666660JJ,,,,,,,,,J0J0J0333366666_ 666660JJ,,,,,,,,,J0J003333336666_ 666660JJ,,,,,,,,,J0J033336666666_ 6666600J,,,,,,,,,J00333333666666_ 666660JJ,,,,,,,,,J03333666666666_ 66666600111111111033333366666666_ " , # xpmtoiim -c1 disk_info.xpm "32,c1,_ 66666666666666666666666666666666_ 66666AA66666666666AAA66666666666_ 66666AA6666666666AA6666666666666_ 66666AA66AAAAA66AAAA66AAAA666666_ 66666nn66nn66nn66nn66nn66nn66666_ 66666nn66nn66nn66nn66nn66nn66666_ 66666nn66nn66nn66nn66nn66nn66666_ 66666nn66nn66nn66nn66nn66nn66666_ 66666006600660066006600660066666_ 66666006600660066006660000666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 666666666666JJJJ,,,,,,J666666666_ 66666666666JJwJJ333w33Jw66666666_ 6666666666JJJw,,,,,,JwJJ06666666_ 666666666JJwJJ333w33JwwJ06666666_ 66666666JJJw,,,,,,JwJJ0J06666666_ 6666666JJwJJ333w33JwwJ0J06666666_ 666666JJJw,,,,,,JwJJ0J0J06666666_ 66666JJwJJ333w33JwwJ0J0J06666666_ 66666JJwJJ333w33JJ0J0J0J06666666_ 66666JJwJJ333333JJ0J0J0J06666666_ 66666JJwJJ33333JJJ0J0J0J06666666_ 66666JJJJJJJJJJJJJ0J0J0J06666666_ 66666JJJJJJJJJJJJJ0J0J0J06666666_ 66666JJJJJJJJJJJJJ0J0J0003666666_ 66666JJJ66666666JJ0J0J0333366666_ 66666JJJ66666666JJ0J000333336666_ 66666JJJ66666666JJ0J033336666666_ 66666J0J66666666JJ00033333666666_ 66666JJJ66666666JJ03333666666666_ 66666J00111111110003333366666666_ " , # xpmtoiim -c1 disk_server.xpm "32,c1,_ 6666666J666J666J666J666J66666666_ 666666JJw6JJw6JJw6JJw6JJw6666666_ 666660JJJwwJJwwJJwwJJwwJJw666666_ 6666033JJJwwJJwwJJwwJJwwJJw66666_ 66603w33JJJwwJJwwJJwwJJwwJJw6666_ 660333w3JJ6Jww3Jww3Jww3Jww3Jw666_ 6JJ3333JJ666Jw13Jw13Jw13Jw13Jw66_ JJJJ33JJ66666Jw13Jw13Jw13Jw13Jw6_ 6wJJJJJ666666w133w133w133w133w66_ 66wJJJ666666w133w133w133w133w666_ 666wJ666666w133w133w133w133w6666_ 6666wJ6666w133w133w133w133w66666_ 66666wJ66ww33ww33ww33ww33w666666_ 666666wJw60Jw60Jw60Jw60Jw6666666_ 6666666w666w666w666w666w66666666_ 00000000000000000000000000000000_ 61,,,333333331111000000000000006_ 66000000000000000000000000000066_ 6666666oBBoBoBo666666oBo66666666_ 66666666oBoBoBo666666oBo66666666_ 66666666oBoBoBBo66666oBo66666666_ 666666666ooBBoBBBo6oooBo66666666_ 6666666666oBBBoBBBooBooBo6666666_ 66666666666ooBBoBBBBoBoBo6666666_ 666666666666ooBBBBBBBoBBo6666666_ 66666666666666ooBBBBBBoBo6666666_ 6666666666666666ooBBBBBBo6666666_ 666666666666666666oBBBBo66666666_ 66666666666666666+W| VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1r6oBBBBo66666666_ 66666666666666666000000006666666_ 66666666666666666000000006666666_ 66666666666666666000000006666666_ " , # xpmtoiim -c1 disks.xpm "32,c1,_ 6666666666666JJJ111111111110JJ66_ 666666666666Jwww100000000000ww06_ 666666666666Jwww000000000000www0_ 6666666666JJJ333333333331JJwwww0_ 666666666Jwww311111111110ww0www0_ 666666666Jwww000000000000www0ww0_ 6666666JJJ333333333331JJwwww0ww0_ 666666Jwww311111111110ww0www0ww0_ 666666Jwww111111111110www0ww0ww0_ 6666JJJ,,,,,,,,,,,3JJwwww0ww0ww0_ 666JJJJ,33333333330JJ0www0ww0ww0_ 666Jwww111111111110JJJ0ww0ww0ww0_ 6iii666636613163iiwJJJ0ww0ww0ww0_ iJJJ633366131330JJ0wJJ0ww0ww0ww0_ iJJJ633661310031JJJ0wJ0ww0ww0ww0_ iJJJ636613130w11JJJ0wJ0ww0ww0ww0_ iJJJ366131330w60JJJ0wJ0ww0ww0ww0_ iJJJ661313330w30JJJ0wJ0ww0ww0ww0_ iJJJ613133316330JJJ0wJ0ww0ww0ww0_ iJJJ100000110001JJJ0wJ0ww0ww0003_ iJJJJJJJJJJJJJJJJJJ0wJ0ww0ww0133_ iJJJJJJJJJJJJJJJJJJ0wJ0ww0ww0333_ iJJwwwwwwwwwwwwwwJJ0wJ0ww0003333_ iJw11111111111333iJ0wJ0ww0133336_ iJw11111133333333iJ0wJ0ww0333333_ iJw11333333AAAA33iJ0wJ0003333333_ iJw1133333AA33333iJ0wJ0133336666_ iJw11333333AA3333iJ0wJ0333333366_ i0w133333333AA333iJ0003333333366_ iJw133333AAAA3333iJ0133336666666_ iJw33333333333333iJ0333333366666_ 60030000000000000003333333366666_ " , # xpmtoiim -c1 dog.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666660066_ 6666666666666666666666666660cc06_ 6666600000666666666666666660cc06_ 66660cccc006000666666666660cc066_ 6660cccc000000006666666660ccc066_ 6600c0cc00000000666600000ccc0666_ 00ccc0cc000000006000ccccc0c06666_ 0cccccccc00000060cccccccccc06666_ 0ccccccccc000c00cccccccccccc0666_ 60cc0ccccccccccccccccccccccc0666_ 6600ccc0cccccccccccccccccccc0666_ 60A0cc00cccccccccccccccccccc0666_ 60A000660cccccccccccccccccccc066_ 60A06660000cccccccccccccccccc066_ 66066660cccccccccccccc0ccccccc00_ 66666600cccccccccccccc00cc0cccc0_ 666660ccccc00ccccccc00060000ccc0_ 66000ccccc0600000000066000060cc0_ 60cccccc006000666666666666606000_ 600ccc00660666666666666666660006_ 66000066006666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 dog2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666066660066666666666666666666_ 66660c0660c066666666666666666666_ 66660c000cB066666666666666666666_ 66660ccccB0666666666666666666666_ 6660BcJccB0666666666666666666660_ 660BcccccB0666666666666666666600_ 60BcccccccB0666666666666666660c0_ 0ccccccccccB00666666666666660cB0_ 0ccccccccccccc00000000000000ccB0_ 6000000BcccccccccnnnnnnnnncccB06_ 66666660BcccccccccnnnnnnnncccB06_ 66666660BcccccccccccnnnnncccB066_ 666666660nccccccccccccccccccB066_ 666666660nncccccccccccccccccB066_ 666666660nncccccccccccccccccB066_ 666666660nncccccccccccccccccB066_ 666666660ncccBBBBBBBBBBBcccccB06_ 666666660BccB00000000000BccccB06_ 666666660BcB0666666666660BcccB06_ 666666660BcB06666666666660BccB06_ 666666660BcB066666666666660BcB06_ 666666660BcB066666666666660BcB06_ 666666660ccB066666666666660BcB06_ 66666660ccB066666666666660ccBB06_ 6666660BBB066666666666660BBBB066_ 66666660006666666666666660000666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 donald.xpm "32,c1,_ 66666666000000666666666666666666_ 66666660000000066666666666666666_ 66666660000000006666666666666666_ 66666660000000006666666666666666_ 66666600000000J06666666666666666_ 6666660000000JJ06666666666666666_ 666660000000JJJ00066666666666666_ 66660000000JJJ000000066666666666_ 6600000000JJJ0000660006666666666_ 000000000JJJ00006606606666666666_ 00000000JJJ000666600000666666666_ 0000000JJJ0006600660666066666666_ 000000JJJ00066666060666606666666_ 00000000000060060066060606666666_ 06666066006006666600600000666666_ 06666006666006666660600000006666_ 06666006666606666666060000c06666_ 666660066666060066660600c0c00666_ 6666660666660000066600ccc0c0c066_ 666666060060000006660cccccccc066_ 666666000606600006660ccccccc0066_ 666666600000060006600ccccccc0066_ 6666666606000000000cccccccc00666_ 6666666660600ccccccccccccc006666_ 666666666660000ccccccccc00066666_ 66666666666600000000000000666666_ 66666666666666660000006666666666_ 66666666666666666066066666666666_ 66666666666666600000066006666666_ 66666666666600000000060006666666_ 66666666660660000000000606666666_ 66666666606000000000000000666666_ " , # xpmtoiim -c1 donald_mad.xpm "32,c1,_ 66666666666600000006666666666666_ 6666666666006660JJJ0666666666666_ 6666666600666000JJJJ066666666666_ 6666666006000600JJJJ066666666666_ 6666660660666660JJJJJ00066666666_ 66666666066666660JJJJ0JJ06666666_ 666666666666666600JJJJ0JJ0666666_ 66666666666666600J0JJJJ0JJ066666_ 6666666606600000JJ000JJJJJJ06666_ 66666660300303330JJJ00JJJJJJ0666_ 666660603330330330JJJ000JJJJ0666_ 6666030333303330330JJ06000006666_ 66060333333330003300006666666666_ 60603333333306603303330666666666_ 66033333333306660303330666666666_ 60333333333066660330330666666666_ 60333333333066066033330666666666_ 03333333333066060033333066666666_ 03003333330666000603303066666666_ 00333333330666000600000066666666_ 030003333306660000OOOO0666666666_ 00OOO03333306000OOO0OO0666666666_ 60OOOO0003300OOOOO0O0OO066666666_ 60O000OOO00OOOOOOOO00OOO00666666_ 60OO00000OOOOOOOOOOOOOOOOO000666_ 6600O000000OOOOOOOOOOOOOOOOOO006_ 66030OOO00000OOOOOOOOOOOOOOOOOO0_ 60333000OOOO000OOOOOOOOOOOOO0000_ 033333330000OOO0OOOOOOOOOOO0OOO0_ 03333330666600000000OOOOOO000006_ 6633330666666666000000OO00666666_ 66663066666666666660000066666666_ " , # xpmtoiim -c1 door_open.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666660000000000000000006666_ 66666666660666666666666666606666_ 66666666660600000000000000606666_ 66666666660060H,,,,HHHHHH0606666_ 66666666660660H,,,,HHHHHH0606666_ 66666666606660HH,,HHHHHHH0606666_ 66666666066360HHHHHHHHHHH0606666_ 66666660663360HHHHHHHHHHH0606666_ 666666066363606H6H6H6H6H30606666_ 6666660636636036H6H6H6H3F0606666_ 66666606366360F36H6H6H3FF0606666_ 66666606366360FF33H6H3FFF0606666_ 66666606366360FFFF3H3FFFF0606666_ 66666606366360FFF11FFFFFF0606666_ 66666606363660FF1FFFFFFFF0606666_ 66666606336660FFFFFFFFFFF0606666_ 66666606666360FFFFFFFFFFH0606666_ 66666606HH3360FFFFFFFFFHH0606666_ 66666606036360FFFFFFFHHHH0606666_ 66666606366360FFFFFFHHHHH0606666_ 66666606366360FFFFHHHHHHH0606666_ 66666606366360FFHHHHHHHHH0606666_ 66666606366360HHHHHHHHHHH0606666_ 60000006363660000000000000000000_ 66060606336606060606060606060606_ 60606306366060606060606060606060_ 66060606660606060606060606060606_ 60606306606060606060606060606060_ 66060606060606060606060606060606_ 60606300606060606060606060606060_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 drafting.xpm "32,c1,_ 66666666666666666666666666666666_ 66660000000000000000000000000000_ 66660JJJ0000JJJJJJJJJJJJJJJJJJJJ_ 66660JJJ00000JJJJJJJJJJJJJJJJJJJ_ 66660J0000000000000000000000000J_ 66660J0H0000000H6H6H6H6H6H6H6H0J_ 66660J0600000000000000000000060J_ 66660J0H000000000666666666660H0J_ 66660J0600000000006666666666060J_ 66660J0H000060000006666666660H0J_ 66660J0600006600000066600666060J_ 66660J0H000066600000060600660H0J_ 66660J0600006600000000006066060J_ 66660J0H000060000000006060660H0J_ 66660J0600000066060006600666060J_ 66600J0H000060660600660006660H0J_ 66000J0600006000000660000066060J_ 66000J0H000066660066000000060H0J_ 66000J0600000000000000000000060J_ 60000J0H000000006000000000000H0J_ 60000000000000000000000000000000_ 60,0,,,,,,,,,00,,00,,000,,,,,,,,_ 60,̜= VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1,,,,,,,,,,0,,0,0,0,0,0,,,,,00,_ 60,,,,,,,,,,0,,00000,0,0,,,,,00,_ 60,0,,,,,,,,,00,0,,,0000,,,,,,,,_ 60000000000000000000000000000000_ 60000J0606666666666666600000060J_ 66000J0H066666666666666066660H0J_ 66000J0600000000000000000000060J_ 66000J0H6H6H6H6H6H6H6H6H6H6H6H0J_ 66000J0000000000000000000000000J_ 66600JJJJJJJJJJJJJJJJJJJJJJJJJJJ_ " , # xpmtoiim -c1 dragon.xpm "34,c1,_ 6666666666666660666666666666666666_ 6666666666666660066666666666666666_ 6666666666666660606666066666666666_ 6666666666666000006000066666666666_ 66600066666600SSSS0SSS066666666666_ 6660SS0666660D0SS0SSS0666660000666_ 6660S0S06660000SSSSS0666000SSS0066_ 6A60SSSS000SSS0SSSS00600SSSSS06066_ 6A600SSSSSSSSSSSSSS000SSSSSS066666_ 6A660000SSSSSSSS0S00SSSSSSS0666666_ 6AAAAAA000SSSSSS0S0SSSSSSSSS066666_ 6AAAAAA66600SSS00S00SSSSS000066666_ 666066666666000SSSS00SSSS066066666_ 66606600066660SSSS060SSSSS06666666_ 6600606660060SSSS0660S000006666666_ 660006666600SSSS0660SS066606666666_ 6000006666600SS06660S0666666666666_ 66666666660S00S0060600666000066666_ 6666666660SSS00SS00606600SSSS06666_ 666666660SSSSS00SS00000SSSSSSS0666_ 66666660SSSS0SS00SSSSSSSSSSSSSS066_ 6600060SS0SS0SS00SSSSSSSSSSSSSS066_ 6000000000SS0SSS00SSS000SSSSSSS066_ 606000SSSSSS0SSS000S0SSSSSSSSSS066_ 60606000SSS0SSSSS000SSSSSSSSSS0666_ 606060SS000SSSSSSS0S0000SSSSS00006_ 666660SSSSSSSSSSSSS0SSSS00000SSS06_ 666660SSSSSSSS00SSSS000SSSSSSSSS06_ 6666000SSSSSS0SS00000SS00SSSSSSS06_ 6660SSS0SSSS060SSSSSSSSSS000SSS066_ 660S00S000SS060S0S0SSSSSSSSS000666_ 6000000066000000006000000000006666_ 6666666666666666666666666666666666_ 6666666666666666666666666666666666_ " , # xpmtoiim -c1 drawing.xpm "32,c1,_ 66666666666666666666666666666666_ 66000000000000000000000000000066_ 660,,,,,,,,,,,,,,,,,,,,,,,,,,066_ 660,,,,,,,,,,,,,,,,,,,,,,,,,,066_ 660,,,,,,0,,,,,,0,,,,,,0,,,,,066_ 660,,,0,,0,,0,,,0,,0,,,0,,0,,066_ 66000000000000000000000000000066_ 66666666666666666666666666666666_ 66000006666666666666666666666666_ 660AAA06666666666666666666666666_ 66000006666000006666666660000066_ 660,,,0660033333006666660HHHH066_ 660,0,060333000333066660HHHHH066_ 660,0,060333333333066600HHH00066_ 660,0,0600000000000660HH0HHHH066_ 660,0,066660333066660HHHHHHHH066_ 660,0,066660300066600HHHHHHHH066_ 660,0,0666603330660HHHHH00HH0066_ 660,0,066660330060HHHHH060HHH066_ 660,0,066660333000HHHH0660HHH066_ 660,0,0666603330HH0HH06660HHH066_ 660,0,0666603000HHHH066660H00066_ 660,0,066660300HHHH0666660HHH066_ 660,0,0666600HHHHH06666660HHH066_ 660,0,066660HHHHH066666660HHH066_ 660,0,066600HHHH0666666660HH0066_ 660,,,0660HH0HH06666666660HHH066_ 660,,,060HHHHH300000000000HHH066_ 660000060HHHHHHHHHHHHHHHHHHHH066_ 660DDD060H0HHHHHHHHHHHHHHHH00066_ 6660D0660H0HHHHH0HHHHHH0HHHHH066_ 66660666000000000000000000000066_ " , # xpmtoiim -c1 drawing2.xpm "32,c1,_ 66666666666666006666666666666666_ 66666666666666006666666666666666_ 66666A66666666006666666666666666_ 6666AA66666666006666666666666666_ 6666AA66666660000666666666666666_ 6666AAA6666600660066666666666666_ 6666AA00666606666066666666666666_ 6666A060066606666066666666666666_ 6666A000066600660066666666666666_ 6666A000016660000666666666666666_ 66666000661660000666666666666666_ 66666660066100660066666666666666_ 666666660060o0660066666666666666_ 66666666600Boo660066666666666666_ 66666666660oBoo60006666666666666_ 666666666660oBoo6006666666666666_ 6666666666600oBoo006666666666666_ 66666666660000oBoo00666666666666_ 666666666600660oBoo0666666666666_ 6666666666006600oBoo666666666666_ 66666663300033110oBoo33666666666_ 666666666006660060oBoo6666666666_ 6666666660066600660oBoo666666666_ 66666666000666666660oBoo66666666_ 666666660066666666660oBoo6666666_ 6666666600666666666600oBoo666666_ 66666660006666666666000oBoo66666_ 666666600666666666666000oBoo6666_ 6666666006666666666660060oBoo666_ 66666660066666666666600660oBoo66_ 666666606666666666666606660oB066_ 66666660666666666666660666600666_ " , # xpmtoiim -c1 dump_tapes.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666600666666666666666_ 66666666666666030666666666666666_ 66666666666600333006660066666666_ 66666666666033000330603306666666_ 66666666660330000033033330666666_ 66666666603300060000333333066666_ 66666666033300600003300003306666_ 66666660333300600033000000330666_ 66666603333300060330006600033066_ 66666033333330000330060060033306_ 66660333003333003330060060033330_ 66603330660333033330006600033330_ 66033306006030333333000000333300_ 66003300000003300033300003330000_ 66010330000333060603330333301066_ 66601033000333060603303333010666_ 66660103330033006003033330106666_ 66666010330103300000333301066666_ 66660001033010330033333010666666_ 66660330103301033333330106666666_ 66660033010060103333301066666666_ 66660103301100010333010666666666_ 66666010330003300330106666666666_ 66666600003333330000066666666666_ 66666666010333300006666666666666_ 66666666601033010666666666666666_ 66666666660100106666666666666666_ 66666666666011066666666666666666_ 66666666666600666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 dynamite.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 666666660066,66666A6666666666666_ 6666666066066A666666666666666666_ 66666606666066,A6666666666666666_ 6666660666A0,6A66666666666666666_ 666666066A,606A66666666666666666_ 6666606666A,,0666A66666666666666_ 6666066666A6A6066666666666666666_ 66606666A66666606666666666666666_ 66606666A66666666666666666666666_ 66606666666666666666666666666666_ 66600000000000000000000000000666_ 666010AAAA0,60AAAAAAA0,60AAAA066_ 666010AAAA06,0AAAAAAA06,0AAAA066_ 6600000000006,0000000006,0000066_ 6601010AAAA0,60AAAAAAA0,60AAAA06_ 6601010AAAA06,0AAAAAAA06,0AAAA06_ 66000000000,60000000006,00000066_ 666010AAAA06,0AAAAAAA0,60AAAA066_ 666010AAAA0,60AAAAAAA06,0AAAA066_ 66660000000000000000000000000666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 earth.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000000666666666666_ 6666666666000J0JFJ0J000666666666_ 6666666600FJJ0JFFFJFJJF006666666_ 66666660FFJFFFJFFJJFFJFFF0666666_ 6666660FFFFFFF0FF000FFFFFF066666_ 666660FFFFFF0JJF0JJFFJJF0FF06666_ 66660FFFFFFF0JJJ0JJJ0JJJ0JFF0666_ 66660FFFFFFJ0JJJ0JFFFFJJJ0FF0666_ 6660FFFFFFJ0JJJJ0FFFFFFFFFFFF066_ 6660FF0000F000000FFFFFFFFFJFJ066_ 6660FJ0JJJJ0JJJJFFFFFFFFFFFJJ066_ 660JFF0JJJJ0JJJJ0FFFFFFFFFFFFJ06_ 660JJF0JJJJ0JJJJ0JFFFFFFFFFFJJ06_ 660JJJFJFFJ0JJJJ0JJJJ0FFFFFFJJ06_ 6600000FFFF00000000000FFFFF00006_ 660JJJFFFFFFFJJJ0JJJJ0JFFFFJJJ06_ 660JJJFFFFFFFFJJ0JJJJ0JFFF0JFJ06_ 660JJJ0FFFFFFFJJ0JJJJ0FFFF0FJJ06_ 6660JJ0JFFFFFJJJ0JJJJ0FFFF0FJ066_ 66600000FFFF0000000000FFF0000066_ 6660JJJ0JFFFJJJJ0JJJJ0FFJ0JJJ066_ 66660JJ0JFFJ0JJJ0JJJ0JJJJ0JJ0666_ 66660JJJ0JFJ0JJJ0JJJ0JJJ0JJJ0666_ 666660JJ0JFJ0JJJ0JJJ0JJJ0JJ06666_ 66666600000F00000000000000066666_ 66666660J0JJJ0JJ0JJ0JJJ0J0666666_ 66666666000J30J33JJ0JJ0006666666_ 66666666660003333333000666666666_ 66666666666660000000666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 earth2.xpm "32,c1,_ 66666666666666666666666666666666_ 6666666666OOOOOOOJOOJ66666666666_ 66666666JOOOOOJJOJJJJJJ666666666_ 6666666JJOOOOOOOOOOOJJJJ66666666_ 666666JJJOOOOOOOOOOJJJJJJJ666666_ 66666JJJOOOOOOOOOOJJJJJJJJO66666_ 6666JJJJOOOOOOOOOJJJJJJJJJJ66666_ 666JJJJJOOOOOOOOJJJJJJJJJJJJ6666_ 666JJJJJJOOOOJJJJJJJJJJJJJJJO666_ 66JJJJJJJJOOJJJJJJJJJJJJJJJJO666_ 66JJJJJJJJOOJJOJJJJJJJJJJJJJJO66_ 6JJJJJJJJJJJJOOO-1 VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;19|JJJJJJJJJJJJJO66_ 6JJJJJJJJJJJJJJOJJOJJJJJJJJJJOJ6_ 6JJJJJJJJJJJJJJJJOOOOOJJJJJJJJJ6_ 6JJJJJJJJJJJJJJJJOOOOOOOJJJJJJJ6_ 6JJJJJJJJJJJJJJJOOOOOOOOJJJJJJJ6_ 6JJJJJJJJJJJJJJJOOOOOOOOOJJJJJJ6_ 6JJJJJJJJJJJJJJJOOOOOOOOOOOJJJJ6_ 6JJJJJJJJJJJJJJJJOOOOOOOOOOJJJJ6_ 6JJJJJJJJJJJJJJJJOOOOOOOOOJJJJJ6_ 6JJJJJJJJJJJJJJJJJOOOOOOOJJJJJ66_ 6JJJJJJJJJJJJJJJJJJOOOOOOJJJJJ66_ 66JJJJJJJJJJJJJJJJJOOOOOJJJJJ666_ 666JJJJJJJJJJJJJJJOOOOOJJJJJJ666_ 666JJJJJJJJJJJJJJJOOOJJJJJJJ6666_ 6666JJJJJJJJJJJJJJOOJJJJJJJ66666_ 66666JJJJJJJJJJJJOOJJJJJJJJ66666_ 666666JJJJJJJJJJJOJJJJJJJJ666666_ 6666666JJJJJJJJJJJJJJJJJ66666666_ 66666666JJJJJJJJJJJJJJJ666666666_ 6666666666JJJJJJOJJJJ66666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 earth3.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666611333311666666666666_ 666666666633JJFJJJJJ336666666666_ 6666666633FFFFJJFFJJJJ3366666666_ 66666663FFFFFJJFJFFJJJFF36666666_ 6666663FFFFFJFJFFFFJJJJFF3666666_ 666663FFFFFFFFFFFFJJJJJFFF366666_ 66663JFFFFFFFFFFFFJJJJJFFFF36666_ 66663JFFFFFFFFFFFFJJJJJJJFF36666_ 6663JJFFFFFFFFFFFJJJJJJJJJJJ3666_ 6663JJFFFFFFFFFFJJJJJJJJJJJF3666_ 6613JJFFFFFFFFFFJJJJJJJJJJFF3166_ 661JJJJFFFFFJJJFFJJJJJJJJFFFF166_ 663JJJJJFFFJJJJJFJJJJJJJJFFFF366_ 663JJJJJFFFJJJJJJJJJJJJJJFFFF366_ 663JJJJJJFFFJJJJFFJJJJJJJJFFF366_ 663JJJJJJJFFJJJJJJFJFJJJJJJFF366_ 663JJJJJJJJFFJFFFFJJJJJJJJJJF366_ 663JJJJJJJJJFFFFFFFFFFJJJJJJF366_ 661JJJJJJJJJFFFFFFFFFFFJJJJJF166_ 6613JJJJJJJJFFFFFFFFFFFJJJJJ3166_ 6663JJJJJJJJFFFFFFFFFFJJJJJJ3666_ 6663JJJJJJJJJFFFFFFFFJJJJJJJ3666_ 66663JJJJJJJJJFFFFFFJJJJJJJ36666_ 66663JJJJJJJJJJJFFFFJJJJJJJ36666_ 666663JJJJJJJJJJFFFFJJJJJJ366666_ 6666663JJJJJJJJJJFFJJJJJJ3666666_ 66666663JJJJJJJJJFFJJJJJ36666666_ 6666666633JJJJJJJFFJJJ3366666666_ 666666666633JJJJJJFJ336666666666_ 66666666666611333311666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 edit.xpm "32,c1,_ 66666666666666606666666666666666_ 666666666666660c0666666666666666_ 66666666666660ccc066666666666666_ 6666666666660ccccc06666666666666_ 666666666660ccccccc06666666cc%66_ 66666666660cccc0cccc066666cc%%%6_ 6666666660cccc0cccccc06660c%%AA%_ 666666660cccc1ccc0cccc060B0%AAAA_ 66666660cccc0ccc0cccccccC0B0AAAo_ 6666660cccc1ccc0ccc0cccCCC0B0Ao6_ 666660cccc0ccc1ccc0cccCCCBB0o066_ 66660cccccccccccc1cccCCCBBBn0666_ 6660cccc0ccc1cccccccCCCBBBnn6666_ 660cccc0ccc0ccc0cccCCCBBBnnc0666_ 60cccc1ccccccc0cccCCCBBBnnccc066_ 0cccc0ccc0ccc0ccBBnCBBBnnccccc06_ 60cccccc0ccc0cccBBBnBBnnccccccc0_ 660cccc1ccc1cccc00BOnnnccccccc06_ 6660cccccc1ccccc000oonccccccc066_ 66660cccc0cccccc000ooccccccc0666_ 666660ccccccccccccccccccccc06666_ 6666660ccccccccccccccccccc066666_ 66666660ccccccccccccccccc0666666_ 666666660ccccccccccccccc06666666_ 6666666660ccccccccccccc066666666_ 66666666660ccccccccccc0666666666_ 666666666660ccccccccc06666666666_ 6666666666660ccccccc066666666666_ 66666666666660ccccc0666666666666_ 666666666666660ccc06666666666666_ 6666666666666660c066666666666666_ 66666666666666660666666666666666_ " , # xpmtoiim -c1 eye.xpm "32,c1,_ 6A6,6A6,6A6A6A6A6A63,3,3A3A3333H_ A6A6A6A6A63,A63,3,333A3333A3A3A3_ 666A6,6A6A6A6A6363A3A333A3A3A3A3_ 36A63,A63A3A33333A3A3333A3333333_ 6A6,6A6A63A3336A6A6A6363A3A3A3A3_ A6A6A63A33A3363,363A3A3A3AA3H333_ 6,6A6A6AA33363A3A3A3A3A3A33HA3A3_ 36A63,3A33H3A3A3033303A3A3A3A333_ 6A6A6A63A3AA33AA6A3A303A33363363_ A636A6333AA3A3A666AA03AA0333363A_ 666A6A,3A3A33,666630333A3A336A6A_ A6A63A33A33336,6,6AA03A3033,3A3A_ 6,6A63A333A36A6666633A33A36A6363_ A6A63A333A3A3A3A36333A3A3636363A_ 666A63A363,36A636A6A6A6A6A6A6A63_ 36A63A3A3A3,36A6363,3,A636363A3A_ 6A6A636A,36A6A6,6A6,6A6A6A6A6363_ A6363A3A363,36A6A6A6A6A6A63A3A3A_ 6,6A63636A6A6,6,666,666A6A636A63_ 36AA3A3A3A363,A6A6A63,A63A3A3A3A_ 6A63A36A6A6A6A6A6A6A6A6A6363A363_ A63A3A3A3636A636A6A6A63A3A3A3A3A_ 6,6A6A,36A6A6A6A666A6A6A636363A3_ 363A3A3A3A3636A636A63,A,3A3A3A33_ 6A6A6363A36A6A6,6A6A6A6A6363A363_ A63A3A3A3A3A36A6A636A63A3A3A3A33_ 6,636A,36AA36,6,6,6A6A63636363A3_ A63A3A3A3A33AAA6A6A63A3A3A3A3333_ 6A63A36A,363A36,6A6A6363,363A3A3_ A63A3A333A3A3636A6A63A3A3A3A3A33_ 6A6363A3A3A3AA6A666A6A636AA363A3_ 363A3A3A3A3A3,A636A63A3A3A3A3333_ " , # xpmtoiim -c1 eyeguy.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000000666666666666_ 6666666666000ccccccc000666666666_ 6666666600ccccccccccccc006666666_ 66666660ccccccccccccccccc0666666_ 6666660ccccccccccccccccccc066666_ 666660ccccccccccccccccccccc06666_ 66660cccccccccccccccc0c0c0cc0666_ 66660ccccccccccccccc0606060c0666_ 6660ccccccccccccccc0606J6060c066_ 6660cccccc0ccccccc0606JJJJJ60066_ 6660ccccc0cc0cccc0606JJJJ6JJ6066_ 6660cccc0cc0cccccc06JJJJJJ6J0066_ 6660ccc0cc0cccccc0606JJJJJJJ6066_ 6660cc0cc0cccccccc06JJJJJJJJ0066_ 6660ccc0cc0cccccc0606JJJJJJJ6066_ 6660cccc0cc000cccc0606JJJJJ60066_ 66660cccc0cccc0cccc0606J60600666_ 66660ccccc0cccc0cccc0606060c0666_ 666660cccc00ccc0ccccc0c0c0c06666_ 6666660cc0cccc0ccccccccccc066666_ 66666660cc0cc0ccccccccccc0666666_ 6666666600c00cccccccccc006666666_ 66666666660ccccccccc000666666666_ 666666666660cccc0000666666666666_ 6666666666660cc0cc06666666666666_ 6666666666660cc0cc06666666666666_ 6666666666660cc00000600666666666_ 6666666666660c0ccccc00c006666666_ 666666666660cccccccccc0cc0666666_ 66666666660000000000000c00666666_ " , # xpmtoiim -c1 eyeguy_back.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000000666666666666_ 6666666666000ccccccc000666666666_ 6666666600ccccccccccccc006666666_ 66666660ccccccccccccccccc0666666_ 6666660ccccccccccccccccccc066666_ 666660ccccccccccccccccccccc06666_ 66660ccccccccccccccccccccccc0666_ 66660ccccccccccccccccccccccc0666_ 6660ccccccccccccccccccccccccc066_ 6600ccccccccccccccccccccccccc006_ 6600ccccccccccccccccccccccccc006_ 60c0ccccccccccccccccccccccccc0c0_ 600ccccccccccccccccccccccccccc00_ 600ccccccccccccccccccccccccccc00_ 660ccccccccccccccccccccccccccc06_ 6660ccccccccccccccccccccccccc066_ 6660ccccccccccccccccccccccccc066_ 66660ccccccccccccccccccccccc0666_ 66600ccccccccccccccccccccccc0066_ 6660c0ccccccccccccccccccccc0c066_ 6660cc0ccccccccccccccccccc0cc066_ 66660000ccccccccccccccccc0000666_ 66666666000cccc000cccc0006666666_ 666666666660cc06660cc06666666666_ 666666666660cc06660cc06666666666_ 666666666660cc06660cc06666666666_ 666666666660cc06660cc06666666666_ 666666666660cc0660c00c0666666666_ 66666666660cccc00c0cc0c066666666_ 66666666660000000000000066666666_ " , # xpmtoiim -c1 eyeguy_front.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000000666666666666_ 6666666666000ccccccc000666666666_ 6666666600ccccccccccccc006666666_ 66666660ccccccccccccccccc0666666_ 6666660ccccccccccccccccccc066666_ 666660ccccccccccccccccccccc06666_ 66660cccccccc0c0c0c0cccccccc0666_ 66660ccccccc060606060ccccccc0666_ 6660ccccccc0606J6J6060ccccccc066_ 660ccccccc0606JJJJJ6060ccccccc06_ 660cccccc0606JJJJ6JJ6060cccccc06_ 60ccc0cccc06JJJJJJ6JJ60cccc0ccc0_ 60cc0cccc0606JJJJJJJ6060cccc0cc0_ 60cc0ccccc06JJJJJJJJJ60ccccc0cc0_ 660cc0ccc0606JJJJJJJ6060ccc0cc06_ 6660cc0ccc0606JJJJJ6060ccc0cc066_ 6660cc0cccc0606J6J6060cccc0cc066_ 66660cc0cccc060606060cccc0cc0666_ 6660cccc0cccc0c0c0c0cccc0cccc066_ 6660cccc0ccccccccccccccc0cccc066_ 6660cccc0ccccccccccccccc0cccc066_ 66660000ccccccccccccccccc0000666_ 666666660000ccc000cccc0006666666_ 666666666660cc06660cc06666666666_ 666666666660cc06660cc06666666666_ 666666666660cc06660cc06666666666_ 666666666660cc06660cc06666666666_ 66666666660cccc0660cc06666666666_ 6666666660cccccc00cccc0666666666_ 66666666660000006000000666666666_ " , # xpmtoiim -c1 face.xpm "32,c1,_ 00000010000000000000066666666666_ 00003311000000000000066666666666_ 60033311111100000000006666666666_ 60003331111000000000006666666666_ 66000333100000000011130666666666_ .IN VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;166000333000001113133333300006666_ 66600033000113333333330000006666_ 66600003031133330000000000066666_ 66600001113333000000000000666666_ 66660031333000000000A00336666666_ 666603133000000A6A6A6A0366666666_ 666660330000A6A6A6A6A60066666666_ 666600300A6A6A6A6A60006A66666666_ 6660000006A000A6A0100HA006666666_ 660000000A600H6A0010006A06666666_ 6000003006A000A6A001A6A6A6666666_ 60000AA0006A6A6A6A001A6A6A666666_ 66033000A6A6A6A6A6A016A6A0666666_ 666660000A6A6A6000001A6A6A666666_ 6666600606A6A6A6A6A116A6A0666666_ 666666006A6A6A0000000A6A60666666_ 66666660A6A600666666600006666666_ 666666666A0006666666666000666666_ 66606000006666660006666666000060_ 66660666666666000600066666666606_ 66666066666600600000600666666066_ 666666000000A6A60006AA6000000666_ 6666666666006A6A6A6A6A0666666666_ 666666666660A6A6A6AAA00666666666_ 666666666666006A6A60006666666666_ 66666666666660600000666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 fig.xpm "32,c1,_ 44444444444444444444444444444444_ 44440000400040004444444444444444_ 44444044440404444444444444444444_ 44444000440404000444444444444400_ 444440444404044404444444444400FF_ 4444004440004000444444444440FFFF_ 444444444444444444444444440FFFFF_ 444444444444444444444444440FFFFF_ 44444444444444444444444440FFFFFF_ 4444000444444444444444440FFFFFFF_ 4440OOO00044444444444400oFFFF0FF_ 44440oOOOO004400000000OO0FFFF0FF_ 44440000oooO00OOOOooo0oFFFF00FFF_ 4444444400oooo00oo0000FFF00FFFFF_ 444444444000000440SSSFFFF0FFFFFF_ 4444444444440S0440SSFF00FFFF0FFF_ 444444444440SS440SSF00FFF0FFF0FF_ 44444444440SSS440SFFFFFFF0FFF00F_ 44444444440SS040SSFS0000F0FFFFF0_ 4444444440SSS040SFF04400F0FFFFFF_ 444444440SSSS040000040FFF0FFFFFF_ 44444440SSSSS04444440FFFF0FFFFFF_ 4444440SSSSSSS044440FFFF0FFFFFFF_ 4444440SSSSSSSS04440FFFFFF00FFFF_ 444400SS0SSSSSS0440FFFFFF0440FFF_ 44440SS0S0SSSSS0440FFFFFF0440FFF_ 44440SS0SSSSSSSS040FFFFFF040FFFF_ 4440SS0SSSSSSSSS040FFFF00440FFFF_ 440S0S0SSSSSSSSS040000044440FFFF_ 440SSSSS00SSSSSS044444444440FFFF_ 44SSSSSSSS0SSSSSS0444444444SFFFF_ 44SSSSS0SSSSSSSSSS4444444440FFFF_ " , # xpmtoiim -c1 file_server.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 666666666666666F6666666666666666_ 6666666666666633F66,,,,,,,%66666_ 66666666666663333F6,,,,,,,c%6666_ 666666666666333333FS,,,,,,cc%666_ 6666666666633333333FS,,,,,ccc%66_ 66666BBBo63333333333FS,,,,%%%%66_ 666BBBBBBBBBBBBBo3333FS,,,,,,%66_ 666BBBBBBBBBBBBBoS3333FS,,,,,%66_ 666BBBBBBBBBBBBBoSF3333FS,,,,%66_ 666BBBBBBBBBBBBBoSF333FSc,,,,%66_ 666BBBBBBBBBBBBBoSF33FSc,,,,,%66_ 666BBBBBBBBBBBBBoSF3FSc,,,,,,%66_ 666BBBBBBBBBBBBBoSFFSc,,,,,,,%66_ 666BBBBBBBBBBBBBoSFSc,,,,,,,,%66_ 666OOOOOOOOOOOOOoSScccccccccc%66_ 00011111333331111000000000000000_ 61133,66666,,,,,3333333111000006_ 66000000000000000000000000000066_ 66666666666666666666600066666666_ 66666666666666666666601066666666_ 66666666666666666666603066666666_ 66666666666666666666603066666666_ 66666666666666666666000006666666_ 66666666666666666666033306666666_ 66666666666666666666033306666666_ 66666666666666666666000006666666_ 66666666666666666666030306666666_ 06000000000000000000330330000060_ 36333333333333333333306033333363_ 06000000000000000000066600000060_ " , # xpmtoiim -c1 film.xpm "32,c1,_ 66666660000000666666666666666666_ 66666660,31000666666666666666666_ 66666660,31000666666666666666666_ 30131100000000000000166666666666_ 00,66,33110000000000066666666666_ 10000000000000000000166666666666_ 60OBCCCCCCCBCCCBBOO0666666666666_ 60BCDDDDDDDDDCDCCBB0666666666666_ 60BCDDDDDDDCDDDCCBB0666666666666_ 60BCDDDDDDDDDCDCCBB0666666666666_ 60BCDDDDDDDCDDDCCBB0666666666666_ 60BCDDDDDDDDDCDCCBB0666666666666_ 60BCDDDDDDDCDDDCCBB0666666666666_ 60BCDDDDDDDDDCDCCBB0666666666666_ 60BCDDDDDDDCDDDCCBB0666666666666_ 60BCDDDDDDDDDCDCCBB0666666666666_ 60BCDDDDDDDCDDDCCSSS111111111116_ 60BCDDDDDDDDDCDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDCDDDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDDDCDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDCDDDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDDDCDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDCDDDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDDDCDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDCDDDCCS0S11S111S111S1_ 60BCDDDDDDDDDCDCCS0S61S161S161S1_ 60BCDDDDDDDCDDDCCS0S11S111S111S1_ 60BCDDDDDDDDDCDCC00SSSSSSSSSSSS1_ 60BCDDDDDDDCDDDCCSSS111111111111_ 30131100000000000000166666666666_ 00,66,33110000000000066666666666_ 10000000000000000000166666666666_ " , # xpmtoiim -c1 fish.xpm "32,c1,_ 66666666666600066666666066666666_ 666666666660iii06666666066666666_ 66666666660iiiii0666066066666666_ 66666666660iiiii0666606660000666_ 66666666660iiiii0666660666666666_ 666006666660iii06666666666666666_ 660ii066666600066666660660666666_ 660ii066666666666666006666066666_ 660ii066666666666666666666606666_ 66600666666666666666666666666666_ 66666666666666666666666666666666_ 666666666CCCCCCCC6666666CCCCC666_ 6666666CCBBBBBBBBC6666CCBBBBBC66_ 666666CBBBBBBBBBBBC666CBBBBBBBC6_ 66666CBBBBBBBBBBBBBC6CBBBBBCBBBC_ 6666CB000BBBBCCCCBBBCBBBBBBBCBC6_ 666CB0ii00BBCBBBBCCBBBBBBCBBCC66_ 66CBB0i000BCBBBBBBBCCCBBBBCBC666_ 66CBB00000BCBBBBBBBBCBBBBBBC6666_ 6CBBBB000BBBBBBBBCBCBBBBCCC66666_ 6CBBBBBBBBBBBBBBBCCCBBBBBC666666_ 6CBBBBBBBBBBBBCBBBCBBBBBBBCC6666_ 6CBB00BBBBBBBBBCCCBBBBBBBBCBC666_ 66CB00BBBBBBBBBBBBBBBBBBBCBBCC66_ 666CBBBBBBBBBBBBBBBCBBBBBBBBCBC6_ 6666CCBBBBBBBBBBBBC6CBBBBBBCBBCC_ 666666CCBBBBBBBBBC666CBBBBBBCC66_ 66666666CCBBBBBBC66666CBBBBC6666_ 6666666666CCCCCC6666666CCCC66666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 fish2.xpm "32,c1,_ 66666666666000066666666666666666_ 66666666660666606666666666666666_ 66666666660666606660006666666666_ 66666666660666606606660666666666_ 66666666660666606606660666666666_ 66666666666000066606660666666666_ 66666666666666666660006606666666_ 66666666666666660066666060666666_ 66660006666666660306666060666666_ 66660,06666666603306666606666666_ 66660,,06666666000,0006666600666_ 66660,,06666660,,,,,HH0066600666_ 66660,,,0666660,,,,,,HH066666666_ 666600,,066660,,,,,,,,HH06666066_ 6666600,,066088888,,,,HHH0666666_ 6666660,,06088888888,,0HH0666066_ 6666660,,000888HH888,303HH066666_ 66666600,H8888HHHH883303HH066066_ 66666660,H888H00HHH83333HH066666_ 66666660,H88HHH000H33333HH066066_ 66666660,H88HHH333333333HH066666_ 66666600,HHHHH3333333003HH060666_ 6666660HH00033333333330000666666_ 6666660HH0603333333333HH06666666_ 6666600HH06603333333HHHHH0666666_ 666660HH066660333HHHHHHHH0666666_ 666600HH0666600HHHHHHHHH06666666_ 66660HH06666600HHHHHHHH066666666_ 66660HH06666660HHHHHH00666666666_ 66660H066666666000H0066666666666_ 66660H06666666666606666666666666_ 66660066666666660006666666666666_ " , # xpmtoiim -c1 fish_monster.xpm "32,c1,_ 66666666666600066666600666666600_ 666666666660JJJ0066660J0066600J0_ 6666666000000JJJJ06660J0J000J0J0_ 66666000iiiii000JJ0660JJJ0J0JJi0_ 666606660ii000ii00J06600JJJJJ006_ 666066000i06600iii0066660iii0666_ 660066000i06000iiii0666660i06666_ 660i0000iii000iiiiii066660i06666_ 60iiiiiiiiiiiiiiiiiii0660ii06666_ 600000iii0000iiiiiiiii00iiii0666_ 0AAAAA000AAAA00iiiiiiiiiiiii0666_ 0AAAAAAAAAAAAAA0iiiiiiiiiiii0666_ 60000AAAAA0000AA0iiiiiiiiiiii066_ 606060000060600AA0iiiiiiiiiii066_ 6060606060606000A0iiiii00iiii066_ 6606006060000000AA0iiiiiJ0iii066_ 66666600000000000A0iiii0JJ0ii066_ 66666600000000000A0iiiiJ0J0ii066_ 66606600000000000A0iii0JJ00i0666_ 66060000000000000A0i0JJ0JJ0i0666_ 6606060600000600AA0ii0JJ00ii0666_ 600006060606060AA0iiii000ii06666_ 0AAA0000060600AAA0iiiiiiiii06666_ 0AAAAAAAA000AAAA0iiiiiiiiii06666_ 6000AAAAAAAAAAA0iiiiiiiiii066666_ 660i0000AAAAA00iiiiiiiiiii066666_ 660iiiii00000iiiiiiiiiiii0666666_ 6660iiiiiiiiiiiiiiiiiiii06666666_ 66660iiiiiiiiiiiiiiiii0066666666_ 6666600iiiiiiiiiiiii006666666666_ 6666666000iiiiiii000666666666666_ 6666666666000000066666666/(E VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;16666666_ " , # xpmtoiim -c1 flight_sim.xpm "32,c1,_ 44444444444444444444444444444444_ 4HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH4_ 4HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH4_ 4HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH4_ 4HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH4_ 4HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH4_ 4HHHHHHHHHHHHHHHHHHHHHHHHHHHBHH4_ 4HHHHHHHHHHHH0HHHHHHHHHHHHHHBBH4_ 4HHHHHHHHHHHH0HHHHHHHHHHHHHBBBH4_ 4HHHHHHHHHHHH0HHHHHHHHHHHHHBBBB4_ 4HHHHHHHHHHHH0HHHHHHHHHHHHBBBBB4_ 4HHHHHHHHHHHH00HHHHHHHHHHBBBBBB4_ 4HHHHHHHHHHH0HH0HHHHHHHHBBBB0BB4_ 4HHHHH00000H0HH0H00000HBBBBBBBB4_ 4ooooooooooo0HH0ooooooooooooooo4_ 4ooooooooo33300333ooooooooooooo4_ 4ooooo6333333303333336ooooooooo4_ 4ooo33333333330333333336ooooooo4_ 433333333333330333333333333oooo4_ 433333333333330333333333333336o4_ 43333333333334333333333333333334_ 43333333333334333333333333333334_ 43333333333333333333333333333334_ 43333333333333333333333333333334_ 43333333333333333333333333030034_ 43000000000000000000000003033034_ 43333333333333333333333333030034_ 43333333333333333333333333033034_ 43333333333333333333333333030034_ 43333333333333333333333333333334_ 43333333333333333333333333333334_ 43333333333333333333333333333334_ " , # xpmtoiim -c1 floppy.xpm "32,c1,_ 66666666666666666666666666666666_ 666JJJ0000000000000000000000JJJ6_ 66JJJJ0,,,,,,,,,,,,,,,,,,,,0JJJJ_ 66JJJJ0,,,,,,,,,,,,,,,,,,,,0JJJJ_ 63J06J0,,,,,,,,,,,,,,,,,,,,0JJJJ_ 63J03J0666666666666666666660JJJJ_ 63J00J0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJ0666666666666666666660JJJJ_ 63JJJJJ00000000000000000000JJJJJ_ 63JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ 63JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ 63JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ 63JJJJJJ33333333333333333JJJJJJJ_ 63JJJJJ3JJJJJ3633333333333JJJJJJ_ 63JJJJJ3JJJJJ3633333333333JJJJJJ_ 63JJJJJ3JJJJJ3633333333333JJJJJJ_ 63JJJJJ3JJJJJ3633333333333JJJJJJ_ 63JJJJJ3JJJJJ3633333333333JJJJJJ_ 63JJJJJ3JJJJJ3633333333333JJJJJJ_ 6333JJJ3333333333333333333JJJJJJ_ 66633JJ0000000000000000000JJJJJJ_ 66663333333333333333333333333666_ " , # xpmtoiim -c1 floppy2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66600000000000000000000000000006_ 66600000000000000000000000000006_ 33300AAAAAAAAAAAAAAAA00000000006_ 33300AAAAAAAAAAAAAAAA00000000006_ 33300666666666666666600000000006_ 33300666666666666666600000000366_ 33300666666666666666600000000666_ 33300000000000000000000000000006_ 33300000000000000000000000000006_ 33300000000000000000000000000006_ 33300000000000333360000000000006_ 33300000000006666336000000000006_ 33300000000066666633600000000006_ 33300000000066666663600000000006_ 33300000000066666663600000000006_ 33300000000006666636000000000006_ 33300000000000666360000000000006_ 33300000000000000000000000000006_ 33300000000000000000000000000006_ 33300000000000006300000000000006_ 33300000000000006300000000000006_ 33300000000000006300000000000006_ 33300000000000006300000000000006_ 33300000000000000000000000000006_ 33300000000000000000000000000006_ 33300000000000300003000000000006_ 33333333333333333333333333333666_ 33333333333333333333333333333666_ 33333333333333333333333333333666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 floppy_DD.xpm "32,c1,_ 66666666666666666666666666666666_ 66JJJ0AAAAAAAAAAAAAAAAAAAA0JJJ66_ 6JJJJ0AAAAAAAAAAAAAAAAAAAA0JJJJ6_ 6JJJJ0666666666666666666660JJJJ6_ 3J06J0666000066660000666660JJJJ6_ 3J03J0666000006660000066660JJJJ6_ 3J00J0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666006600660066006660JJJJ6_ 3JJJJ0666000006660000066660JJJJ6_ 3JJJJ0666000066660000666660JJJJ6_ 3JJJJ0666666666666666666660JJJJ6_ 3JJJJJ00000000000000000000JJJJJ6_ 3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ6_ 3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ6_ 3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ6_ 3JJJJJJ33333333333333333JJJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 333JJJ3333333333333333333JJJJJJ6_ 6633JJ0000000000000000000JJJJJJ6_ 66633333333333333333333333336666_ " , # xpmtoiim -c1 floppy_HD.xpm "32,c1,_ 66JJJ0FFFFFFFFFFFFFFFFFFFF0JJJ66_ 6JJJJ0FFFFFFFFFFFFFFFFFFFF0JJJJ6_ 6JJJJ0666666666666666666660JJJJ6_ 3J06J0666006660060000666660JJJJ6_ 3J03J0666006660060000066660JJJJ6_ 3J00J0666006660060066006660JJJJ6_ 3JJJJ0666006660060066006660JJJJ6_ 3JJJJ0666006660060066006660JJJJ6_ 3JJJJ0666000000060066006660JJJJ6_ 3JJJJ0666000000060066006660JJJJ6_ 3JJJJ0666006660060066006660JJJJ6_ 3JJJJ0666006660060066006660JJJJ6_ 3JJJJ0666006660060066006660JJJJ6_ 3JJJJ0666006660060066006660JJJJ6_ 3JJJJ0666006660060000066660JJJJ6_ 3JJJJ0666006660060000666660JJJJ6_ 3JJJJ0666666666666666666660JJJJ6_ 3JJJJJ00000000000000000000JJJJJ6_ 3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ6_ 3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ6_ 3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ6_ 3JJJJJJ33333333333333333JJJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 3JJJJJ3JJJJJ3633333333333JJJJJJ6_ 333JJJ3333333333333333333JJJJJJ6_ 6633JJ0000000000000000000JJJJJJ6_ 66633333333333333333333333336666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 floppy_blue.xpm "32,c1,_ iJJJJJJ63333363336363333wJJww666_ Jwwwwww60001300163030110wwwwww66_ Jwwwwww60013001610001130wwwwwww6_ Jwwwwww6013001630www6330wwwwwwww_ Jwwwwww6030016300www6310wwwwwwww_ Jwwwwww6300163000www6110wwwwwwww_ Jwwwwww6001630000www6130wwwwwwww_ Jwwwwww6016300010www6310wwwwwwww_ Jwwwwww61630001166663100wwwwwwww_ Jwwwwww66300011631131000wwwwwwww_ Jwwwwww10000000000000000wwwwwwww_ JwwwJJJJJwwwwwwwwwwwwwwwwwwwwwww_ Jwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww_ Jwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww_ Jwww133333333333333333333331wwww_ Jwww366666666666666666666661wwww_ Jwww366666666666666666666661wwww_ Jwww366666666AAAAAA666666661wwww_ Jwww36666666AAnnnnAn66666661wwww_ Jwww36666666An6666An66666661wwww_ Jwww36666666nn6666An66666661wwww_ Jwww3666666666666AAn66666661wwww_ Jwww366666666666AAn666666661wwww_ Jwww36666666666AAn6666666661wwww_ Jwww36666666666An66666666661wwww_ Jwww36666666666nn66666666661wwww_ Jwww366666666666666666666661wwww_ Jwww36666666666An66666666661wwww_ J00w36666666666nn66666666661wwww_ J00w366666666666666666666661wwww_ Jwww366666666666666666666661wwww_ wwww111111111111111111111111wwww_ " , # xpmtoiim -c1 floppy_green.xpm "32,c1,_ 3DDDDDD63333363336363333FDDFF666_ DFF0SSS600013001630301100FFFFF66_ DFF0SSS600130016100011300FFFFFF6_ DFF0SSS601300163000063300FFFFFF0_ DFF0SSS60300163000SS63100FFFFFF0_ DFF0SSS63001630000SS61100FFFFFF0_ DFF0SSS60016300000SS61300FFFFFF0_ DFF0SSS60163000100SS63100FFFFFF0_ DFF0SSS616300011666631000FFFFFF0_ DFF0SSS663000116311310000FFFFFF0_ DFF0SSS300000000000000000FFFFFF0_ DFFFDDDDD000000000000000FFFFFFF0_ DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0_ DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0_ DFFF311111111111111111111113FFF0_ DFFF133613333336133333361330FFF0_ DFFF133361333331333333613330FFF0_ DFFF133336133331333336133330FFF0_ DFFF133333613310133361333330FFF0_ DFFF133333133306033313333330FFF0_ DFFF133333333036303333333330FFF0_ DFFF133333333061103333333330FFF0_ DFFF133333330366630333333330FFF0_ DFFF136666130660600336666610FFF0_ DFFF1311113303616303311110U9 VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1130FFF0_ DFFF133333333060103333333330FFF0_ DFFF133333333031303333333330FFF0_ DFFF133333333306033333333330FFF0_ D66F133333613300033361333330FFF0_ D66F133336133330333336133330FFF0_ DFFF133361333333333333613330FFF0_ F000000000000006100000000000000F_ " , # xpmtoiim -c1 floppy_red.xpm "32,c1,_ AAAAAAA63333363336363333AAAAA666_ AAA0AAA600013001630301100AAAAA66_ AAA0AAA600130016100011300AAAAAA6_ AAA0AAA601300163000063300AAAAAA0_ AAA0AAA60300163000nn63100AAAAAA0_ AAA0AAA63001630000nn61100AAAAAA0_ AAA0AAA60016300000nn61300AAAAAA0_ AAA0AAA60163000100nn63100AAAAAA0_ AAA0AAA616300011666631000AAAAAA0_ AAA0AAA663000116311310000AAAAAA0_ AAA0AAAA00000000000000000AAAAAA0_ AAAAAAAAA000000000000000AAAAAAA0_ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0_ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0_ AAAAA3333333333333333333333AAAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA363636363636363636363661AAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA363636363636363636363661AAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ AAAA363636363636363636363661AAA0_ A66A366666666666666666666661AAA0_ A66A366666666666666666666661AAA0_ AAAA366666666666666666666661AAA0_ A000111111111111111111111111000A_ " , # xpmtoiim -c1 floppy_super.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66600000000000000000000000006666_ 66011110000000000000000011110666_ 66011110000000000333000011111066_ 66011110000000003333300011111106_ 66011110000000003333300011111106_ 66011110000000003333300011111106_ 66011110000000003333300011111106_ 66011110000000000333000011111106_ 66011110000000000000000011111106_ 66011111000000000000000111111106_ 66011111111111111111111111111106_ 6601111JJJJJJJJJJJJJJJJJJ1111106_ 6601111J,,AAAAAAAAAAAAAAAJ111106_ 660111JJ,AAAAAAAAAAAAAAA,JJ11106_ 6601JJJAAAAAAA,,,,,AAAAA,,JJJ106_ 6601JJ,AAAAAA,,,,,,,,,,,,,,JJ106_ 66011JJAAAAAAAAAAAA,,,,,,,JJ1106_ 660111JAAAAAAAAAAAAAAA,,,J011106_ 660111JA,,AAAAAAAAAAAAAJJJ111106_ 660111JJJ,,,,AAAAAAAAAAJ00111106_ 66011106JJAA,,,,,,,,AAAJ,0111106_ 6601110,6JJAAA,,,,,AAAJJ60111106_ 66011106,6JAAAAAAAAAAJJ6,0111106_ 6601110,6,6JAAAAAAAAAJ6,60111106_ 66011106,6,6JJAAAAJJJ6,6,0111106_ 6601110,6,6,6,JA,AJ,6,6,60111106_ 66011106,6,6,6,JJJ,6,6,6,0111106_ 6601110,6,6,6,6,0,6,6,6,60111106_ 66600000000000000000000000000066_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 font.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 6666666666666666666AAA66666AA666_ 6666666666666666AAAAAAAA66AAAA66_ 66666666666666AAAAAnnnAAA6AAAAA6_ 6666666666666AAAAnn666nAAAAAAAn6_ 666666666666AAAAn666666AAAAAAn66_ 66666666666AAAAn6666666AAAAAAn66_ 6666666666AAAAn666666666AAAAn666_ 666666666AAAAn666666666AAAAAn666_ 66666666AAAAn6666666666AAAAn6666_ 6666666AAAAAn666666666AAAAAn6666_ 666666AAAAAn6666666666AAAAAn6666_ 666666AAAAn6666666666AAAAAn66666_ 66666AAAAAn6666666666AAAAAn66666_ 6666AAAAAn6666666666AAAAAn666666_ 6666AAAAAn666666666AAAAAAn666666_ 666AAAAAAn66666666AAAAAAAn666666_ 666AAAAAn66666666AAAAAAAn6666666_ 66AAAAAAn6666666AAnAAAAAn6666666_ 66AAAAAAn666666AAn6AAAAAn6666666_ 66AAAAAn666666AAn6AAAAAn66666AA6_ 6AAAAAAn66666AAn66AAAAAn6666AAn6_ 6AAAAAAn6666AAn66AAAAAn6666AAn66_ 6AAAAAAn666AAn666AAAAAn666AAn666_ 6AAAAAAn66AAn6666AAAAAn6AAAn6666_ 6AAAAAAAAAAn6666AAAAAAAAAAn66666_ 6AAAAAAAAAn66666AAAAAAAAnn666666_ 66AAAAAAnn666666AAAAAAnn66666666_ 666nnnnn666666666nnnnn6666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 font_color.xpm "32,c1,_ nnnnnnnnnnnnn6666666666666666666_ nAAAAAAAAAAAAnn66666666666666666_ nAAAAAAAAAAAAAAn6666666666666666_ nAAAnnnnnnnAAAAAn666666666666666_ nAAAn666666nAAAAn666666666666666_ nAAAn6666666nAAAAn66666666666666_ nAAAn66666666nAAAn66666666666666_ nAAAn66666666nAAAn66666666666666_ nAAAn66666666nAAAn66666666666666_ nAAAn66666666nAAAn66666666666666_ nAAAn66666666nAAAn66666666666666_ nAAAn6666666nAAAn666666666666666_ nAAAn666666nAAAAn666666666666666_ nAAAnnnnnnnAAAAn6666666666666666_ nAAAAAAAAAAAAAn666OOOOOO66666666_ nAAAAAAAAAAAnn666OccccccO6666666_ nAAAnnnAAAAn6666OcBBcccccO666666_ nAAAn66nAAAAn66OBBOOBcccccO66666_ nAAAn666nAAAAnOOOO66OccccccO6666_ nAAAn666nAAAA00cc0000000ccccOwww_ nAAAn6666nAAAnOBccOOcBBBBcccBwww_ nAAAn6666nAJAn6OBcccccccccccBwww_ nAAAn66666JAJAn6OBBcccccccccBwww_ nAAAn66666JJAJA66OOBBBBBBBBcBwww_ nAAAn666666JJJJJ666OOOOOOOOBBwww_ nAAAn666666JwJwJ66666666666OO000_ nAAAn6666666JwJwJ666666666666000_ nAAAn6666666wJwJw666666666666666_ nAAAn66666666wwwww66666666666666_ nnnnn66666666wwwwww6666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 font_edit.xpm "32,c1,_ 66666666666666666666666666660J66_ 6666666666666666666666666660JJ66_ 666666666666666666666666660JJ666_ 66666666666666666666666660JJ6JJ6_ 6666666666666666666666660JJ6JJJ6_ 666666666666666666666660JJ6JJJJ6_ 666666666666666666666660JJJJJJJ6_ 6666666666666666666666000JJJJJJJ_ 66666666666666666666600600JJJJJJ_ 666666666666666666660060000JJJJJ_ 6666666666666666666606000000JJJJ_ 66666666666666666660,00000000JJ0_ 6666666666666666660,,,0000000003_ 666666666666666660,,,,,000000333_ 66666666666666660,,,,,,,00003336_ 6666666666666660,,,,,,,,60033366_ JJ6666666666660,,,,,,,,603333666_ JJJ66666666660,,,,,,,,6033366666_ JJJJ666666660,,,,,,,,60333666666_ JJJJJ6666660,6666666603336666666_ JJ6JJJ66660660000000033366666666_ JJ66JJJ6606003333333333666666666_ JJ666JJJ000333333333336666666666_ JJ6666JJJ33333366666666666666666_ JJ666JJJJJ3336666666666666666666_ JJ6JJJJ6JJJ666666666666666666666_ JJJJJ6666JJ666666666666666666666_ JJJ66666666666666666666666666666_ JJ666666666666666666666666666666_ JJ666666666666666666666666666666_ JJ666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 font_mover.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 10000000000000000000000001666666_ 06666666666666666666666660666666_ 066666666666666A6666666660666666_ 06666666666666AA6666666660666666_ 0666666666666AAA6366666660666666_ 066666666666A6AA3366666660666666_ 06666666666A66AA3366666660666666_ 0666666666A666AA3366666660666666_ 066666666A6663AA3366666660666666_ 06666666A66636AA3366666660000166_ 0666666AAAAAAAAA3366666660333016_ 066666A6663666AA3366666660333301_ 06666A66633333AA3366666660000000_ 066AAAAA3666AAAAAA6666666066JJJ0_ 06666663666666663366666660JJJJJ0_ 06666333336666333333666660JJJJJ0_ 06666666666666666666666660JJJJJ0_ 00000000000000000000000000000000_ 66000060000666600006000066000066_ 66100161001666610016100166100166_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 format_edit.xpm "32,c1,_ 66666666666666606666666666666666_ 666666666666660%0666666666666666_ 66666666666660%%%066666666666666_ 6666666666660%%0%%06666666666666_ 666666666660%%0C0%%0666666666666_ 66666666660%%0CCC0%%066666666666_ 6666666660%%0CCC0%%%%06666666666_ 666666660%%0CCC0%%%0%%0666666666_ 66666660%%0CCC0%%%080%%066666666_ 6666660%%0CCC0%%%08880%%06666666_ 666660%%0CCC0%%%0888880%%0666666_ 66660%%0CCC0%%%088888880%%066666_ 6660%%0CCC0%%%08888888880%%06666_ 660%%0CCC0%%%%%08888888880%%0666_ 60%%0CCC0%%%0%%%08000000880%%066_ 0%%0CCC0%%%0%0%%%0cccccc0880%%06_ 60%%0C0%%%0%0%%%0cOOccccc0880%%0_ 660%%0%%%0%0%%%0OO00Occ1 VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1aOccc00%%06_ 6660%%%%0%0%%%%000%%0Occccc0%066_ 66660%%0%0%0000cc00000000ccc0www_ 666660%%0%0%%%0Occ00OOOOOOcccwww_ 6666660%%0%%%0i0Occccccccccccwww_ 66666660%%%%0iii0OOccccccccccwww_ 666666660%%0iiiii00OOOOOOOOccwww_ 6666666660%%0iiiiii00000000OOwww_ 66666666660%%0iiiii0%%0666600www_ 666666666660%%0iii0%%06666666000_ 6666666666660%%0i0%%066666666666_ 66666666666660%%0%%0666666666666_ 666666666666660%%%06666666666666_ 6666666666666660%066666666666666_ 66666666666666660666666666666666_ " , # xpmtoiim -c1 format_include.xpm "32,c1,_ 66666666666666666606666666666666_ 666666666666666660c0666666666666_ 66666666666666660c0c066666666666_ 6666666666666660c0C0c06666666666_ 666666666666660c0CCC0c0666666666_ 66666666666660c0CCC0ccc066666666_ 6666666666660c0CCC0cc0cc06666666_ 666666666660c0CCC0cc080cc0666666_ 66666666660c0CCC0cc08880cc066666_ 6666666660c0CCC0cc0888880cc06666_ 666666660c0CCC0cccc0888880cc0666_ 66666660c0CCC0cc0ccc0000080cc066_ 6666660c0CCC0cc0c0cc0cccc080cc06_ 66666660c0C0cc0c0cc0cOOccc0cc066_ 666666660c0cc0c0cc0OO00Occc00666_ 6666666660cc0c00000000600ccc0www_ 66666666660cc0ccc0Occ00OOOcccJJJ_ 666666666660cccc0i0Occcccccccwww_ 6666666666660cc0iii0OOOOOOOOcwww_ 66666606660000cc0iii00000000Owww_ 666660c06660060cc0i0cc0666660www_ 66660ccc06060660cc0cc06666666000_ 6660cc0cc06666660ccc066666666666_ 660cc060cc06666660c0666666666666_ 60cc06060cc066666606666666666666_ 0cc0606060cc06666666666666666666_ 60cc06060cc066666666666666666666_ 660cc060cc0666666666666666666666_ 6660cc0cc06666666666666666666666_ 66660ccc066666666666666666666666_ 666660c0666666666666666666666666_ 66666606666666666666666666666666_ " , # xpmtoiim -c1 fruit.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666600006666666666_ 66666666666666666033330666600066_ 66666666666666666603333066033066_ 66666006666666666660333060333066_ 66666006666666666666000060330666_ 66666600666666666666666600006666_ 66666660666666666666666066666666_ 66666660066666666666600000666666_ 666600060600066666600D0DD,006666_ 6660AAA0A0AAA066660,,,DD,,D,0666_ 660AAAAA0AAAAA0660,,,,,,,,,DD066_ 660AAAAAAAAAAA0660,,,,,,,D,DD066_ 60AAAAAAAAAAAAA00,,,,,D,,D,DDD06_ 60AAAAAAAAAAAAA00,,D,D,D,,DDDD06_ 60AAAAAAAAAAAAA00D,,,D,,D,DDDD06_ 60AAAAAAAAAAAAA00,,D,,,D,DDDDD06_ 60AAAAAAAAAAAAA00D,,,D,DDDDDDD06_ 60AAAAAAAAAAAAA00,D,D,DDDDDDDD06_ 660AAAAAAAAAAA0660,,DDDDDDDDD066_ 660AAAAAAAAAAA0660DD,DDDDDDDD066_ 6660AAAAAAAAA066660DDDDDDDDD0666_ 66660AAAAAA0066666600DDDDD006666_ 66666600000666666666600000666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 gnuinfo.xpm "32,c1,_ 44444444444444444444444444444004_ 44444444444444444444444444444400_ 44444444444444444444444444040000_ 4444444444444444444400040400o0o0_ 4400044444440000004004000000o000_ 40B044444440BBBBBB00000000BB0o00_ 0B044444440BBB00BBB00ooo0o0BB00o_ 0B00444440B00000BBB0oo0o0000B0o0_ 00BB0000B0000SSSSSSSSB000o0BB0o0_ 40BBBBBB000SSSS444SSSSSB00BBB00o_ 4400000000SSSS44444SSSSSBBBB000o_ 444440000SSSSS44444SSSSSS000o0o0_ 44000000oSSSSSS444SSSSSSS0000oo0_ 40000o00SSSSSSSSSSSSSSSSSS00o00o_ 4440000oSSSSS444444SSSSSSSoooo0o_ 44440000SSSSSSS4444SSSSSSS000000_ 44444400SSSSSSS4444SSSSSSS0000oo_ 4444440oSSSSSSS4444SSSSSSS0oo0o0_ 44444000SSSSSSS4444SSSSSSS00o0oo_ 44444000oSSSSSS4444SSSSSSo0000o0_ 44444000oSSSSSS4444SSSSSSo0000o0_ 444440o00oSSS44444444SSSo00o00oo_ 4444oo0oo00SSSSSSSSSSSSoo00o00o0_ 4444ooo00oo0oSSSSSSSSoo000oo0o00_ 44440ooo0oo0ooooo0ooooooooo0oo0o_ 444400ooooo0o0ooo0ooooo0oo0oo00o_ 4444400oo000o00o00ooooooo0oooooo_ 444444000oo000o0o00ooooooooo0ooo_ 444444440000004000o0o00ooo0ooo0o_ 44444444444444400oo0o00o0o0oo00o_ 444444444444440oo0o00o0oo0o0o0o0_ 4444444444444440o00o000000o00oo0_ " , # xpmtoiim -c1 goblet.xpm "32,c1,_ 66666666666666666666666666666666_ 68888888888888888888888888888886_ 68888888888888888888888888888886_ 68888888888888888888888888888886_ 68888888881DDD,,6666,,8888888886_ 68888888881D3D,,,,,,,,8888888886_ 68888888881D3D,66,6,,,8888888886_ 68888888881D3D,66,6,,,8888888886_ 68888888881D3D,66,,,,,8888888886_ 68888888881D3D,66,6,,,8888888886_ 68888888881D3D,,,,,,,,8888888886_ 688888888AADAA,AA,AA,AA888888886_ 688888888A6DA6,A6,A6,A6888888886_ 688888888AADAA,AA,AA,AA888888886_ 688888888AADAA,AA,AA,AA888888886_ 68888888888D3DD,,,,,,88888888886_ 688888888888D3DDDDDD888888888886_ 6888888888888D3DDDD8888888888886_ 68888888888888333388888888888886_ 68888888888888833888888888888886_ 688888888888888D,888888888888886_ 688888888888888D,888888888888886_ 688888888888888D,888888888888886_ 688888888888888D,888888888888886_ 688888888888888D,888888888888886_ 688888888888888D,888888888888886_ 688888888888881D,,88888888888886_ 6888888888861DDD,,,,688888888886_ 68888888888888888888888888888886_ 68888888888888888888888888888886_ 68888888888888888888888888888886_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 goofy.xpm "32,c1,_ 66666000006000066666666666666666_ 66660AAAAA0AAAA06666666666666666_ 66660AAAAAA0AAA06666666666666666_ 666660AAAAAAAA066666666666666666_ 6666660AAAAAA0066666666666666666_ 6666660AAAAAA0666666666666666666_ 6666660AAAA000666666666666666666_ 66666600000OO0666666666666666666_ 6666600OOOOO00006666666666666666_ 66660AA00000AAA06666666666666006_ 66660AAAAAAAAAA00606666666666010_ 666000AAAAAA00006066666666660010_ 66000000000000000606666666660000_ 66000000000000cc0666666666600006_ 6000000000000cccc0666666600c0006_ 6000000000000c00006666660ccccc06_ 6000000000000066006666000ccccc06_ 0000000000000666006660cc0ccccc06_ 0000000000000666006000cccccccc06_ 0000000ccc000066000cc0cc000cc066_ 00000cccccc000000cccccc0ccc0c066_ 0000cccccc0cccccccccccccc0ccc060_ 000cccccc0cccccccc00ccc0ccc0cc06_ 600ccccc0c0ccccccc0ccccccccccc06_ 6000cccc0cc0ccccccccccccc00cc060_ 60060ccccccc00000ccc000006000666_ 000660c0cccc00A06000660606060666_ 000660ccccc000AA00c0660606060666_ 0006660c0cccc0000c06660066600666_ 0006660cccccccccc066666666666666_ 00066660ccccc0000666666666666666_ 00066666000006666666666666666666_ " , # xpmtoiim -c1 grab_doc.xpm "32,c1,_ 66666666666666666666ooooo6666666_ 6666666666666666666occccco666666_ 666666666666666666ocOooOcco66666_ 66666666666666666ocOoOooOcco6www_ 6666666666666666ocOoOo66oOccoJJJ_ 6666666666666666oOoOo666oOcccJJJ_ 6666666666666666oooo666ocOOOOwww_ 6666666666666666666666ocOoooowww_ 000000000000000066666ocOo6666www_ 0,,,,,,,,,,,,,,006666ooo66666000_ 0,,,,,,,,,,,,,,0%066666666666666_ 0,,00,0000,0,,,0%%06666666666666_ 0,,,,,,,,,,,,,,0%%%0666666666666_ 0,,000,00,00,,,00000366666666666_ 0,,,,,,,,,,,,,,,%%%0366666666666_ 0,,000,0000,0000,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,00,000,0000,,,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,0000,000,0000,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,00,0000,000,,,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,0000,000,0000,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,000,000000,,,,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,00,000,00,000,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 0,,,,,,,,,,,,,,,,,,0366666666666_ 00000000000000000000366666666666_ 63333333333333333333366666666666_ " , # xpmtoiim -c1 graph.xpm "32,c1,_ 66666666666666666666666666666666_ 60000000000000000000000000000006_ 60666666666666666666666666666606_ 60666666666666666666666666666606_ 60666666666666666666666666666J06_ 6066666666666666666666666666JJ06_ 60666666666666666666666666JJJ606_ 606666666666666666666666JJJ6AA06_ 606666666666666666666666J66AA606_ 60666666666666666666666JJ66A6606_ 60HH6666666666666666666J66AA6606_ 6062ox VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1ť H66666666666HHHHHHHHJ6AA6HH06_ 6066H666666666HH666666HHHAHH6606_ 60666HH666666HH6JJJJ6JJ6AA666606_ 606666HHHHHHHH6JJ66JJJ6AA6666606_ 606666666666AAAA666666AA66666606_ 60666666666AA66AA6666AA666666606_ 606666666JAA66JJ6AAAAA6666666606_ 60666666JAAJ6JJ66666666666666606_ 60666666AA6JJJ666666666666666606_ 6066666AA66666666666666666666606_ 60JJJAAA666666666666666666666606_ 60666A66666666666666666666606606_ 606AA666666666666666666660606606_ 60AA6666666666666666066600600606_ 60666666666666666660066000600606_ 60666066666606666060066000000606_ 60060066606000660000060000000006_ 60000006000000060000000000000006_ 60000000000000000000000000000006_ 60000000000000000000000000000006_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 gumby.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666600000000000666666_ 666666666666660FFFFFFFFFFF066666_ 666660006666660FFFFFFFFFFF066666_ 666660F06666660FF00F00FFFF066666_ 666660F06666660FF00F00FFF0666666_ 666660F0666660FFFFFFFFFFF0666666_ 666660F0666660FFFFFFFFFF06666666_ 666660FF000000FF00FF0FFF00000666_ 6666660FFFFFFFFFFF00FFFFFFFFF006_ 6666666000000FFFFFFFF0000000FFF0_ 6666666666660FFFFFFF066666660FF0_ 6666666666660FFFFFFF066666660FF0_ 6666666666600FFFFFF0666666660FF0_ 666666666660FFFFFFF0666666660FF0_ 666666666000FFFFFFF0666666660000_ 66666666600FFFFFFFF0666666666666_ 666666660FFFF0FFFFF0666666666666_ 66666660FFFFF0FFFFF0666666666666_ 66666600FFFF00FFFFF0666666666666_ 6666660FFFFF00FFFFF0666666666666_ 666660FFFFFF00FFFFF0666666666666_ 666660FFFFF060FFFFF0666666666666_ 666660FFFFF060FFFFFF066666666666_ 66600FFFFFF060FFFFFF066666666666_ 66000F00FFF060F000FF006666666666_ 660FFFFFFFF060FFFFFFF06666666666_ 660FFFFFF00060FFFFFFF06666666666_ 66000000000666000000066666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 hammer.xpm "32,c1,_ 66666666666666666666666666666666_ 666666666666,,,,,,6,,,6666666666_ 6666666666,,33331101106666666666_ 666666666,1131111111106666666666_ 66666666,11131111101106666666666_ 6666666,110031111100006666666666_ 6666666,106600100060006666666666_ 6666666,06666,310666666666666666_ 6666666666666,310666666666666666_ 6666666666666,310666666666666666_ 6666666666666,310666666666666666_ 6666666666666,310666666666666666_ 6666666666666,310666666666666666_ 6666666666666,310666666666666666_ 66666666666660000666666666666666_ 6666666666666ooo0666666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 666666666666oooo0066666666666666_ 66666666666660000666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 hobbes.xpm "32,c1,_ 33333333333333333333333333333333_ 33333333333333333333333333333333_ 33333333333333333333333333333333_ 33333333000000000003330000033333_ 33333300000000000000300000003333_ 333333306c6c6c6c000c000000003333_ 3333300000000006c006c6c000003333_ 33333300000000006c6c6c6c00003333_ 333300c6c6c6c60006c6c6c000033333_ 33330c6c6c6c6c600c6c6c0000333333_ 333006c6c6c6c6c6c6c6c6c6c0333333_ 33306c6c6c6c6c6c6c6c000000333333_ 3330c6c6c6c6c6c6c6c6c0c000033333_ 33306c606c0c6c6c6c6c6c6c6c603333_ 3330c6c0c606c6c6c6c6c0c000033333_ 33306c606c0c6c6c6c6c00000c603333_ 3330c6c6c6c6c6c6c6c6c6c6c6033333_ 333060006c6c6c6c6c6c6c6c6c603333_ 3333066606c6c6c6c6c6c6c6c6003333_ 33300000606c6c6c6c6c6c6c60333333_ 3330000000c6c6c6c6c6c6c6c6033333_ 33300000006c6c6c6c6c6c606c603333_ 3333000006c6c6c6c6c6c6c600c03333_ 3333333c6c6c006c6c6c6c0c6c333333_ 333333300000c6c6c6c6c6c0c3c33333_ 333333333c6c6c600c6c6c6c03333333_ 3333333330000006c6c6c6c333333333_ 3333333333000c6c6c6c000333333333_ 3333333303c6c6c6c6c0000033333333_ 33333330606c6c6c6c6c6c6c03333333_ 33333330c6c6c6c6c6c0000003333333_ 333333330c6c6c6c6c60000003333333_ " , # xpmtoiim -c1 horse.xpm "32,c1,_ 6B6B6666666666666666666666666666_ 66BBBB66666666666666666666666666_ 66BBBBOO666666666666666666666666_ 6BBBBBBOO66666666666666666666666_ 6BB6BBBBOO6666666666666666666666_ 6BBBOOBBBOO666666666666666666666_ 6BBO6nOBBBOO66666666666666666666_ 6BO666OBBBBOO6666666666666666666_ BO6666nOBBBBOO66666666666666BB66_ On66666OBBBBBOOO6666BBBBB66BBBB6_ 6666666nBBBBBBBBBBBBBBBBBOn66BB6_ 6666666nOBBBBBBBBBBBBBBBBOOn66B6_ 66666666OBBBBBBBBBBBBBBBBBOn66B6_ 66666666OBBBBBBBBBBBBBBBBBOn666B_ 66666666nOBBBBBBBBBBBBBBBBOn666B_ 66666666nOBBBBBBBBBBBBBBBBOn666B_ 66666666nOBOBBBBBBOOBBBBBBOn6666_ 666666666OBOOBBOOOnnOBBOOBn66666_ 666666666OBnOBBnnn66nOBnnBn66666_ 666666666OBnOBB666666OB6nOB66666_ 666666666nB6nOB666666OBB6nB66666_ 666666666nB6nOB666666nOB6nOB6666_ 666666666OB66OB6666666OB66nB6666_ 666666666OB66nB6666666OB666nB666_ 666666666OB66nB6666666OB6666B666_ 666666666O666OB6666666OB6666BB66_ 666666666O666OB66666666B66666B66_ 66666666BO666O66666666BB66666OB6_ 66666666B6666O66666666B666666OB6_ 666666BBB666OB66666666B6666666B6_ 666666BB666BB6666666BBB666666BB6_ 66666666666BB6666666BB6666666BB6_ " , # xpmtoiim -c1 ico.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 666666666AAAAAAAAAAAAAAA66666666_ 66666666HLLLAAAAAAAAAAAAB6666666_ 6666666HHLLLLLLAAAAAAAABBB666666_ 666666HHHLLLLLLLLAAAAAABBB666666_ 666666HHHLLLLLLLLLLLAABBBBB66666_ 666666HHHLLLLLLLLLLLLFBBBBB66666_ 6666HHHHHLLLLLLLLLLFFFHHBBBB6666_ 6666HHHHLLLLLLLLLLFFFFHHBBBB6666_ 666HHHHHLLLLLLLLFFFFFHHHHHBBB666_ 666HHHHHLLLLLLLFFFFFFHHHHHBBB666_ 666HHHHHLLLLLFFFFFFFFHHHHHHBBB66_ 6HHHHHHHLLLFFFFFFFFFFHHHHHHHBBB6_ 6HHHHHHHLLFFFFFFFFFFFHHHHHHHHBB6_ 6BBBBBBBFFFFFFFFFFFFHHHHHHHHHHB6_ 6BBBBBBBLLFFFFFFFFFFHHHHHHHHHHJ6_ 6BBBBBBBLLLLFFFFFFFFHHHHHHHHJJJ6_ 66BBBBBBLLLLLFFFFFFFHHHHHHJJJJ66_ 666BBBBBLLLLLLLFFFFFHHHHJJJJJ666_ 666BBBBBLLLLLLLLLFFFHHJJJJJJJ666_ 666BBBBBLLLLLLLLLLLFHHJJJJJJJ666_ 6666BBBBBLLLLLLLLLLLJJJJJJJJ6666_ 6666BBBBBLLLLLLLLLLAAAJJJJJJ6666_ 66666BBBBLLLLLLLLAAAAAJJJJJ66666_ 666666BBBLLLLLLLAAAAAAAJJJJ66666_ 666666BBBLLLLAAAAAAAAAAAJJ666666_ 666666BBBLLLAAAAAAAAAAAAJJ666666_ 6666666BBLAAAAAAAAAAAAAAA6666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 impossible.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66111111111111111111111116666666_ 66100000000000000000000000666666_ 6610HHHHHHHHHHHHHHHHHHHHHH066666_ 6610HHHHHHHHHHHHHHHHHHHHHHH06666_ 6610HHHH000000000000000000000666_ 6610HHHH00HHHHHHHHHHHHHHHHHH0166_ 6610HHHH0H0HHHHHHHHHHHHHHHHH0166_ 6610HHHH0HH0HHHHHHHHHHHHHHHH0166_ 6610HHHH0HHH000000000000HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH0HHH06666660HHH0HHHH0166_ 6610HHHH000000000000HHH0HHHH0166_ 6610HHHHHHHHHHHHHHHH0HH0HHHH0166_ 6610HHHHHHHHHHHHHHHHH0H0HHHH0166_ 6610HHHHHHHHHHHHHHHHHH00HHHH0166_ 666000000000000000000000HHHH0166_ 66660HHHHHHHHHHHHHHHHHHHHHHH0166_ 666660HHHHHHHHHHHHHHHHHHHHHH0166_ 66666600000000000000000000000166_ 66666661111111111111111111111166_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 index.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 6666666666666666666666666663JLiAbbt/ \o R=sd[7'JdZfN{jIcB1[K+#;G$jkg)h-7Wbk|/d4-~.Gn;6:D#&#zQq  2(!vcE gKMrRD8ZZZ8?sL7Y3Hgx [Js6'fV2kB#hZ&Ius t'Lm*'"[7 aDZ*3#ZH-8s~x{q%`r"fdaCF-sPk ~mxCKj,],V uro'|wBNx'(N - 2G ' l@c y6n((C@WXXzz" 1Y_i773# ?6{eM &U v#yv%b&zye6.io(Um 6U{Y=n||D-9>xzwL@ i.77-nn-0{YRnwysxE7;>cxyy95MY .17DT`jVa7ne [cr&]ay,lndPYKiim{SIh!-"F7/6C/Bha/hBV$$8=1RN)w!:Fzm} |mBP5]y9 ZPx]/Fvrv,,Be7gRiiz_i]-9MY35~!rSb>8PFW> '|wDhure>2C~7p6ar%z-A}}}G{{Ddb xtr $o:91SCa 0 [7 }gBb117~tr R$cT}9dn\9"$aoP^2555605@3`N@PzHK7O*gwu e9e`4 0zV)S2]54~sPC7Q;3eu,bb EX53iG|#xj\Z-QS%#p\ZJWDxJJ8)n*=Gka0t*4j@Ni6QsiiBg~[4 jfNk1DCA}JnK[ N)ou~X>r80hkj98n2#qqnTKQs8poO) KfcQ8wj$|:r!"u3;Zq&() %Ou=nn!Qg*Oqqo;7"DxsLbA#Oww.M"^rQ?+Dq}}}\/iXj+oxL #/Yi"nZgklv4m1fq.s^.B4 VR"B`rYfq_MNK3Owrr#yWAJ;>w{% _glt cYk~kg'G}Hn{|LFYRtnv2oz~eeag28rw{Q;7)/R; rr a4 x|W4k!Hx W(0DW<tt _g2~HkQ2yP8~ WxZUvh<~~ v 42~K R2a &Osq~(Q+*unTS8jDi<<z# +y ^o\g4%%mI?#"w*w^#G<9&5DpiDUBkeIiV74~T"wT:|ppc2US2b$ % }OR+2+W][U<|zvp|V4#g+~k9E %OAX 7KEB/0^`5fUYAZ 4++~}5`a U7X.AEEB-vIJJV.,&t97+({{M3)c|Uix{yEICLwHHIUWN'%HT..a7`(c|IaI5GlOT*v=FMs l^~W(tXTn8*mMw)4Lx@-4Y@ {RO848_ 422224Wssso56 (S7;`9`T/$.H]WAYBD6C/ sdl>Azz+L`cgz-!3K$wEY=xoCDz s_^:iW"A+-x-|)})Gw?)zi+3UuV nRRS]2U cY(09!|wAd1X^?\3SlO;h +-yUDo^n#%;HPGA~xBN|@|SoS:oS'S#p7-<U {e%]4B}fj-BeW@/F/@)_Y}A($8&kk&Htv:o8k+ekQWQQOmsYh8]2]&Is 58V?n:n8k+BkQW I8Zh8[4&Is>kRj?oM8k+BmQssD`sZZ6f\g2yp&Os >oP?9i?k+BmW&W8I--(D`\Zk>q'$Ow5S:0Pf?o<m/Fi QQ>D ,)FdXSmc IsN `S(_B YJRE2EVuuZ\z{48 KWTe+Yd 0Y!+Na>5\Z+H }3d;,6w2.Cl]Aa26@V1.58uw(%\`ecx>#v`0 cu`HN#w?Nc#/Ojqx.`f Rq5 0yPlut^o,>,M&1c,@50s|"B5 5 s&3*)y'g7xuyK/x&&u<`| #;k2*VY,~(cDBft@~ gVFPCryG7`}YP4D!Dgv{b.+Zw$ mr2c]@@3c_Pj -}Co9Yhj0H@SY1^ s<@l.,/dB10ieGV T(e?_n:.=Z0b*7LX]7r|g78YX[9T~ gP" IF ier0K-r}jEkZ}ZMmAIVRD;df4kY+Cd1/aE +rsr4::NH I0R t Cl7d7Vu&hR|  zdyF[H /J(ZAm-(IuW% |~ y'(`vY}|W.L&R| | |}X 6[N/J\M-+mjBEZkG% |tq`oMTT:@t-8XpXpJsy&'x==-&@gg ITyy! .+A{O}M.0*3F PReL4(n;HN4R \v#_If``o<yB1?2WloY%iH c0(IPU:+Q(Wh'!'& &;'!dNq ;`9F^,l 8SX"!!28#mm^''!N4q b`3@X*V'HD "V0kmA({ffy!''M df6F U,Vy'HpCkMNF1RK ?+Rz791';;pf(8.r0AMk/y>o` tqwM![9iC_=*P!7t1Fm/$Ji:Gt^\6B!]{.RE|U*SNtvouSd+91_+2YkfBCn =I09Rg7a2 vUc{t{Y+ Tn,YDx[a YMby$^]r^4bX1bjliCy,r*\6-/a YNX^ XqX4g[41 | ?qq)Dc a e#S1CMadu;>hd.'x4_7M5sX7@)8+>~ AH/@oP8292WJ .R T=7 WWN2Hw,$@y_uqtz o:tg[El>9xspAU"zKCt)%uN]R $b4TgXj~9Kzq`8l8& wr IOc7[1{AT}91sYaK|z z.r%i`z/?-g#WZY$sSQ9z.$>Pe@-5P~F+ THgAT ;d'^gF@zz} kQf0!/@h,oh@n=!P w%Wr^<A{}z-b!fd,!|FU@*C9pwHt Nrutrtug74eGU?,4aHntjKrrr g233ppprk4rg2cE lg2=q:9tqg455qqqtmN5 Jy2a;$$Vwtqa233wwHMlCuYE2 d zy HII1e^ET\U1%U%e5=bQ!('FH[(X$JA IMcaO\Yy F|zy NHroiIwtgS|Cy |Fp`6q __ T5gM,)?abg@DiQ/QF;X4C]9fq RIhNp fI;df5px~5Z#(UQWR JpNpww7r qi\ oK rq$M!XRR//*0?jNpwm5q|:rF5dAtP?;wmji`1@Xw{;Xp/ B!FMkqZG!**-(RVOSS#vL_ gfn7w4r b14aX]]]!!u{+//U/GWD/xx2q b1wrbKXX$$ZaIiB<<Mnf3t(e~dQ6zUa=H6NY&'=q.3@/:< #6Dxyo:|z@o o<Ei4a"))ATTT$$$*Cy9uJ3 OI~{ s:9-Uw4oyUF0Ls hT7 Ls{_H Y\lLh{vcn>rhPOGAPnR3vMrr7%%.|yLHG({G0;rt8>66[V~Q6p"wb%%(b|L46:A[} a+QL]prqK w`FW; ~ZNEluK34*P A~ZhU r3_gWUuy:V[~?y{-x666PP]WGU u6Ze]&{gzxCc47b ,Jw,x GUip58e XS|gy=EW~(jBAJ6-uINdi_06 q y=cYJc4dmUh q*x~Ly$"51$z42HJJN8yDB;FU8+}=z$^-{BIJvp#mvv#${hJiAg>ism0Ta4_k&Gq,*}EA<])Sf39'W(b;;A|)U(~BVDQpeNgI+$^!+nnm}GA;A)U\~B ^9EfNgWW!7w0ttd:G=G=$X\ 1w/|g lA4 m*|F#N rb7v166F"$" ;)|)N2_}n`S#k"6rte0 @Mmp _ | qO&sly9O*>~$}UHz mHrrL @D6f{.5m&)V(PzADf4.fKeru1E[rwww6#zi|:[2_iBH\t lvv#3m&2GuspvvpiF};'2SiBDPllr&1[F$<^rMf^X-~~x89&7Ougdv`c3hheNjgHr mLa2: {#U+PSh#zp)K 1 &&5b& U///i@=!2#M A [S%#Q08+?Ys2S_,VVS0A6,84"s';sM@%w AFTRks M AhpvV8_{a0, OgwX_p|Z3r{@n 0P82.hAoh7:6i2Qds8}o)Ez|##J:h@9%JojFGPeeFTV,)c:!R'Qp7zk#l}9"<';Z}L,v[<&\s z,24l+aL?@GAR QWkO|b8^8)c_Y_x%7&)NXH_,j32ba\.$yVKP12M=r`h$bJlJK OS>'FZNBGYm C7J<p"!=] 85hJ" :}A $dQ< WAM O"^zZ@"1"/k!0c&am>_z7F=7$TvTc~\L/X/Z< F }gYHDP^8-\[|(>>J#,4qXzjfLe3G3zhT|-4(_0iURUyKrf:oL8{jD^1EuqNkjVNYi*U.t3 j~RX9<H:Fu'km *g.H!+.-xr 4a1Gsq>/}f!yOQg)K*g.H!+++-''Yp LEg0d;e1S()`'W64 6 cY~~x'!4%e|$(5> Cu*TZZ*K&IgLJ#ca$*h{`<schjkM> lh8Bjpw0E7RV,FHUxVR OPn2o}S/FJpS/WY_W64{yCyj3&S}PTMc_V2'A%, ]Y/H=j=)^]SbQ/v;JK0f /z_/UIiqssJw4F?\ a~6_ysUxv)SH%pvHrrdvtn5jz6p$g_QS&)S#||gJv/jVE]rn67_ 6utEe4p2vo3p(=pRkSx8to[*3^7&pPC`H;dD3%|g6vpX //\30OJI U+a!e6<E3$|g0 v n/5`uZZwzto+ Td RT- w};~MA(~ N/#6TA3N#:COs v}""}f1 o&<KI6 #G6iz)jPCmMqjjpg{, d }T4 mYse (;D4neI VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1066666_ 666666666660006JJJ60000000000666_ 66666666660666JJJJJ6666666666066_ 66666666600000000006JJJ600066033_ 6666666606666666666JJJJJ66606033_ 66666660000006JJJ600000006606033_ 6666660666666JJJJJ66666660606033_ 66666006JJJ600000000000660606033_ 6666066JJJJJ66666666666060606033_ 66600000000000000000066060606033_ 66066666666666666666606060606033_ 66066000000000066666606060606033_ 66066666666666666666606060606033_ 66066000000000006666606060606033_ 6606666666666666666660606060JJ33_ 6606600000000066666660606060J333_ 66066666666666666666606060JJ3333_ 66066666666666666666606060J33336_ 6JJJJJJJJJJJJJJJJ0666060JJ333366_ 0JJJJJJJJJJJJJJJJ0J66060J3333666_ 000000000000000000JJ60JJ33336666_ 66JJJJJJJJJJJJJJJJJJJJJ333366666_ 666JJJJJJJJJJJJJJJJJJJ3333666666_ 66663333333333333333333336666666_ 66666333333333333333333366666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 info.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666660000000000006666666666_ 666666666608A8A8A8A8A06666666666_ 66666666660A8A8A8A8A803366666666_ 66666666660000A8A800003366666666_ 666666666666608A8A03333366666666_ 66666666666660A8A803333366666666_ 666666666666608A8A03366666666666_ 66666666666660A8A803366666666666_ 666666666666608A8A03366666666666_ 66666666666660A8A803366666666666_ 666666666666608A8A03366666666666_ 66666666666660A8A803366666666666_ 666666666666608A8A03366666666666_ 66666666666660A8A803366666666666_ 666666666666608A8A03366666666666_ 66666666666660A8A803366666666666_ 666666666666608A8A03366666666666_ 66666666666660A8A803366666666666_ 666666666666608A8A03366666666666_ 66666666660000A8A800006666666666_ 66666666660A8A8A8A8A806666666666_ 666666666608A8A8A8A8A03366666666_ 66666666660000000000003366666666_ 66666666666633333333333366666666_ 66666666666633333333333366666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 info_2.xpm "32,c1,_ 666666666666666HHHH6666666666666_ 666666666666660000HH666666666666_ 6666666666666000000H666666666666_ 6666666666666000000H666666666666_ 6666666666666000000H666666666666_ 66666666666660000006666666666666_ 66666666666666000066666666666666_ 66666666666111111111166666666666_ 6666666666HHHHHHHHHH166666666666_ 6666666660000000000H166666666666_ 6666666660000000000H166666666666_ 6666666660000000000H166666666666_ 6666666660000000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666666000000H166666666666_ 6666666666611000000H111116666666_ 6666666666HHH000000HHHHH16666666_ 66666666600000000000000H16666666_ 66666666600000000000000H16666666_ 66666666600000000000000H66666666_ 66666666600000000000000666666666_ " , # xpmtoiim -c1 jet.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHH00HHHHHHHHHH_ HHHHHHHHHHHHHHHHHHH0610HHHHHHHHH_ HHHHHHHHHHHHHHHHHHH06110HHHHHHHH_ HHHHHHHHHHHHHHHHHHH061110HHHHHHH_ HHHHHHHHHHHHHHHH0HH0611100HHHHHH_ HHHHHHHHHHHHHHH060H06110610HHHHH_ HHHHHHHHHHHHHH06110061066660HHHH_ HHHHHHHHHHHHH061111060000000HHH,_ HHHHHHHHHHHHH06111000111330HHHA,_ HHHHHHHHHHHHH0611066111000HHHH,,_ HHHHHHHHHHHHH0600661110610HHHA,A_ HHHHHHHHHHHHH00666111061110H,,HH_ HHHHHHHHHHHHH066611106111110A,HH_ HHHHHHHHHH0000661110611111110HHH_ HHHHHHHHH0HHH06111061111111110HH_ HHHHHHHH0HHHH0111066666666660HHH_ HHHHHHH0HHHH0111330000000000HHHH_ HHHHHHH0HHH0111330HHHHA,,HHHHHHH_ HHHHHHH0000111330HHHAA,AHHHHHHHH_ HHHHHH0666111330HHHA,,,HHHHHHHHH_ HHHHH0666111330HHHH,,,AHHHHHHHHH_ HHHHH066111330HHH0HA,AHHHHHHHHHH_ HHHH066110030HHHHH0HHHHHHHHHHHHH_ HHH066110000HHHHH0H0HHHHHHHHHHHH_ HHH06110000HHHHH0HHHHHHHHHHHHHHH_ HH06100HHHHHHHH0HHHHHHHHHHHHHHHH_ HH000HHHHHHHHHAHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ " , # xpmtoiim -c1 kermit.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHH666666HHHHHHHHHHHHHHHHHHH_ HHHHHH6666666666HHHHHHHHHHHHHHHH_ HHHHHHH6666666HHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHH00HHHHHHHHHHHHHHHHHHHHHHH00HH_ HHSSSS0HHHHHHHHHHHHHHHHHHHSSSS0H_ H0SSSSS0HHHHH000HH000HHHH0SSSSS0_ 0SSSSFFSHHHH0666006660HH0SSSSSSS_ 0SFSSFFF0HHH0006000060HHSSSFFSSS_ 0SSSFFFFF0000006000060H0SSSFSFFS_ 0SSSFFFFF0FFF000FF000F0SSFFFFFSS_ 0SSFFFF0FFFFFFFFFFFFFFFFFFFFFFFF_ H0SSF00FFFFFFFFFFFFFFFFF000FFFF0_ H0S0F0FF0000000000000000FF0F0FF0_ H00FF0000000000000000000000FF0F0_ H00FFF000000BBBBooBBB00000FFF0F0_ HH0FFF00000000BBBBBB000000FFF00H_ HHSFF0000FFFFFFFFFFFFFFFFF00FF0H_ HH0SFFFFF00FFFFFFFFFFFFFF0FFFFHH_ BBHHSFFF0SFF0000000000SSSFFF0HBB_ BBBH0SSF0SSFFFSSFFFSSFF0SFFFBBBB_ BBB0SSF000SFFFSSFF0SFFF000FF00BB_ BB0SFSFFF0SFFFSSFF0SFFF0SSFFFF0B_ 0S0S0F0F0o0SFF0S000SFF00SSSFSSSF_ o0o0o0o0ooo0FFF0o0SSFFoo00000000_ ooooooooooSSFF0ooo0S0F0BBBBBBBBB_ oooooooooo0000ooooo0o0BBBBBBBBBB_ ooooooooooooooooooBBBBBBBBBBBBBB_ oooooooooooooooooBBBBBBBBBBBBBBB_ oooBooooooooooBBBBBBBBBBBBBBBBBB_ BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB_ " , # xpmtoiim -c1 key_shift.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 63333333333333333333333333333330_ 63333333333333333333333333333330_ 63333333333333333333333333333330_ 63333333333333333333333333333330_ 63333330033333333333333333333330_ 63333303633333333333333333333330_ 63333034633333333333333333333330_ 63330334633333333333333333333330_ 63333644633333333333333333333330_ 63333364633333333333333333333330_ 63333336633333333333333333333330_ 63333333333333333333333333333330_ 63333333333333333333333333333330_ 63333333333333333333333333333330_ 63333333333333333333333333333310_ 60000000000000000000000000000006_ " , # xpmtoiim -c1 keyboard.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 63333333333333333333333333333330_ 63311313131313131313131313131330_ 63300303030303030303030303030330_ 63313131313131313131313131311330_ 63303030303030303030303030300330_ 63311313131313131313131313131330_ 63300303030303030303030303030330_ 63333131311111111111111131313330_ 63333030300000000000000030303330_ 63333333333333333333333333333330_ 60000000000000000000000000000006_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666650 VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1+66666666666_ " , # xpmtoiim -c1 keys.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 00000000000000000000000000000000_ 03333333333000333333333300033333_ 34444444441003444444444100344444_ 34111111110003411111111000341111_ 34100000110003410000011000341000_ 34100111310003410011131000341001_ 34101111310003410111131000341011_ 34101111310003410111131000341011_ 34101113310003410111331000341011_ 34113333310003411333331000341133_ 34111111110003411111111000341111_ 31000000000003100000000000310000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 30003333333333000333333333300033_ 10034444444441003444444444100344_ 00034111111110003411111111000341_ 00034100000110003410000011000341_ 00034100111310003410011131000341_ 00034101111310003410111131000341_ 00034101111310003410111131000341_ 00034101113310003410111331000341_ 00034113333310003411333331000341_ 00034111111110003411111111000341_ 00031000000000003100000000000310_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 kilroy.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHH0000000HHHHHHHHHHHHH_ HHHHHHHHHHH06,6,6,60HHHHHHHHHHHH_ HHHHHHHHHH06,0,6,0,60HHHHHHHHHHH_ HHHHHHHHH06,0J0,0J0,60HHHHHHHHHH_ H0H0HHHH06,6,0,6,0,6,60HHHHH0H0H_ 00000HHH0,6,6,6,6,6,6,0HHH000000_ 00000000000000060000000000000000_ DDDDD0DDDDD0DD0,0DDDD0DDDDDD0DDD_ DDDDD0DDDDD0DD060DDDD0DDDDDD0DDD_ D0DDD0DDDDD0DD0,0DDDD0DDDDDD0DDD_ 000DD0DDDDD0DDD0DDDDDDDDDDDDDDDD_ D0DDD0DDDDD0DDDDDDDDD0DDDDDD0DDD_ DDDDD0DDDDD0DDDDDDDDDDDDDDDD0DDD_ DDDDDDDDDDD0DDDDDDDDD0DDDDDDDDDD_ DDDDD0DDDDD0DDDDDDDDD0DDDDDD0DDD_ DDDDDDDDDDD0DDDDDDDDDDDDDDDD0DDD_ DDDDD0DDDDDDDDDDDDDDDDDDDDDDDDDD_ DDDDDDDDDDD0DDDDDDDDD0DDDDDD0DDD_ DDDDD0DDDDD0DDDDDDDDD0DDDDDDDDDD_ DDDDD0DDDDD0DDDDDDDDD0DD0DDDDDDD_ DDDDDDDDDDD0DDDDDDDDD0DD00DDDDDD_ DDDDD0DDDDD0DDD0DDDDD0DD00DD0DDD_ DDDDDDDDDDD0DDD0DDDDD0DD00DD0DDD_ DDDDDDDDDDD0DDD00DDDD0DD0DDD0DDD_ DDDDD0DDDDD0DDD00DDDDDDDDDDD0DDD_ DDDDD0DDDDD0DDD0DDDDD0DDDDDD0DDD_ DDDDD0DDDDDDDDDDDDDDDDDDDDDD0DDD_ DDDDD0DDDDD0DDDDDDDDD0DDDDDD0DDD_ DDDDDDDDDDD0DDDDDDDDD0DDDDDD0DDD_ " , # xpmtoiim -c1 koala.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666000000006666660000000066666_ 666000%%%%%%00666600%%%%%%000666_ 6600%%%cccc%%066660%%cccc%%%0066_ 660%%ccccccc%000000%ccccccc%%066_ 660%cccccccc%000000%cccccccc%066_ 660%ccccccc%%%%%%%%%%ccccccc%066_ 660%ccccc%%%%%%%%%%%%%%ccccc%066_ 660%cccc%%%%%%%%%%%%%%%%cccc%066_ 660%%ccc%%%%%%%%%%%%%%%%ccc%%066_ 6600%%%c%%000%%nn%%000%%c%%%0066_ 666000%%%0000%nnnn%0000%%%000666_ 66660000%0000%nnnn%0000%00006666_ 66666660%%%%%%nnnn%%%%%%06666666_ 66666660%%%%%%nnnn%%%%%%06666666_ 66666660%%%%%%nnnn%%%%%%06666666_ 66666660%%%%%%%nn%%%%%%%06666666_ 666666600%%%%%%%%%%%%%%006666666_ 66666666000000000000000066666666_ 66666666660000000000006666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 laserwriter.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66000000000000000000000000000006_ 60,,,,,,,,,,,,,,,,,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,,0,,00,,0,,,,,,,06_ 0,,,,,,,,,,,,,0,,0,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,,0,0,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,0,,,00,,0000000000_ 60,,,,,,,,,,,,,,,,,,,,0,,,,,,,,0_ 66000000000000000000000,,,,,,,,0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660000000000000000000000,A,D,F0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660,0,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 66600000000000000000000000000000_ 6660,0,0,0,0,0,0,0,0,0,0,0,0,0,0_ 66600000000000000000000000000000_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 laserwriter2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666000000000000000000666_ 66666666660c6c6c6c6c6c6c6c600666_ 6666666660c60c0c0c0c00c006c00666_ 666666660c600BcBcBcBcBc06c0B0666_ 66666660c606000000000006c0BJ0666_ 6666660c606c6c6c6c6c606c0BJB0666_ 666660c6c6c6c6c6c6c6c6c60JBJ0666_ 66660c0c0c0c0c000c000c00JBJB0666_ 66660BcBcBcBcBcBcBcBcBc0BJBJ0666_ 66660cBcBcBcBcBcBcBcBcB0JBJB0666_ 66660Bc00000000000000Bc0BJBJ0666_ 66660c0c606c6c6c60600cB0JBJB0666_ 666600c60606060606c00Bc0BJBJ0666_ 66660c6c6c6c6c6c6c0B0cB0JBJB0666_ 666000000000000000B0cBc0BJB06666_ 6660BcBcBcBcBcBcB0J0BcB0JB066666_ 6660cBcBcBcBcBcBc00BcBc0BJ066666_ 666000000000000000BJBcB0J0666666_ 66660BcBcBJBJBJBJBJBcBc006666666_ 66660cBcBcBcBcBJBJBcBcB006666666_ 66660000000000000000000066666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 laserwriter_network.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66000000000000000000000000000006_ 60,,,,,,,,,,,,,,,,,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,,,,,,,,,0,,,,,,,06_ 0,,,,,,,,,,,,,,,,,,,,,0000000000_ 60,,,,,,,,,,,,,,,,,,,,0,,,,,,,,0_ 66000000000000000000000,,,,,,,,0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660000000000000000000000,A,D,F0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660,A,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660,F,,,,,,,,,,,,,,,,,,,,,,,,,0_ 6660,,,,,,,,,,,,,,,,,,,,,,,,,,,0_ 66600000000000000000000000000000_ 6660,0,0,0,0,0,0,0,0,0,0,0,0,0,0_ 66600000000000000000000000000000_ 66666666666666666666666010666666_ 66666666666666666666666010666666_ 66666666666666666666666030666666_ 66666666666666666666660000066666_ 66666666666666666666660333066666_ 66666666666666666666660333066666_ 66666666666666666666660000066666_ 66666666666666666666660303066666_ 06000000000000000000003303300060_ 36333333333333333333333060333363_ 06000000000000000000000666000060_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 letter.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 00000000000000000000000000000000_ 0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,60_ 06000006,6,6,6,6,6,6,6,6,6,H0H,0_ 0,6,6,6,6,6,6,6,6,6,6,6,6,60H060_ 06000606,6,6,6,6,6,6,6,6,6,H0H,0_ 0,6,6,6,6,6,6,6,6,6,6,6,6,60H060_ 06,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0_ 0,6,6,6,6,0000000000006,6,6,6,60_ 06,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0_ 0,6,6,6,6,0000000000006,6,6,6,60_ 06,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0_ 0,6,6,6,6,0000000,00606,6,6,6,60_ 06,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0_ 0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,60_ 06,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0_ 00000000000000000000000000000000_ 66666666666666666666666R؎ VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1C:6666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 library.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666000006666666666666_ 666666666666660JJJ06666666666666_ 666666666600000JJJ00000666666666_ 66666666660AAA0JJJ00,,0666666666_ 66666666660AAA0JJJ00,,0666666666_ 66666000000AAA0JJJ00,,0666666666_ 666660JJJ00AAA0JJJ00,,0666666666_ 666660JJJ00AAA0JJJ00,,0000006666_ 666660JJJ00AAA0JJJ00,,00FFF06666_ 666660JJJ00AAA0JJJ00,,00FFF06666_ 666660JJJ00AAA0JJJ00,,00FFF06666_ 666600JJJ00AAA0JJJ00,,00FFF00066_ 666600JJJ00AAA0JJJ00,,00FFF00066_ 666600JJJ00AAA0JJJ00,,00FFF00066_ 666600JJJ00AAA0JJJ00,,00FFF00066_ 666600JJJ00AAA0JJJ00,,00FFF00066_ 666600JJJ00AAA0JJJ00,,00FFF00066_ 600000JJJ00AAA0JJJ00,,00FFF00066_ 60000000000000000000000000000000_ 60000000000000000000000000000000_ 60A,AAAA,AAAA,AAAA,AAAA,AAAA,AA0_ 60000000000000000000000000000000_ 6666660,06666666666666660,066666_ 6666660A06666666666666660A066666_ 6666660A06666666666666660A066666_ 66666600066666666666666600066666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 life_preserver.xpm "32,c1,_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJ6AAA6JJJJJJJJJJJJJJ_ JJJJJJJJJJJ666AAA666JJJJJJJJJJJJ_ JJJJJ,,JJJ6666AAA6,,,,,,JJJJJJJJ_ JJJJ,,,,,,,666AAA,,,,,JJ,JJJJJJJ_ JJJJ,JJJ6,,,66AA,,,,666JJ,JJJJJJ_ JJJ,,JJ666,,,6JJ,,,66666J,,JJJJJ_ JJJ,JJJ6666,,JJJJ,666666JJ,JJJJJ_ JJJ,JJ666666JJJJJJJ666666JJ,JJJJ_ JJJ,JJ66666JJJJJJJJJ66666JJ,JJJJ_ JJJ,JJAAAAAJJJJJJJJJAAAAAJJ,JJJJ_ JJJ,JJAAAAAJJJJJJJJJAAAAAJJ,JJJJ_ JJJ,JJAAAAAJJ,,,JJJJAAAAAJJ,JJJJ_ JJJ,JJ66666JJ,JJ,,JJ66666JJ,JJJJ_ JJJ,JJ666666,,JJJ,,666666JJ,JJJJ_ JJJ,,JJ666666JJJJJ666666JJJ,JJJJ_ JJJJ,JJ6666666JJJ6666666JJJ,JJJJ_ JJJJ,,JJ666666AAA666666JJJ,JJJJJ_ JJJJJ,,,,66666AAA66666JJJJ,JJJJJ_ JJJJJJJJJJ6666AAA6666,JJJJ,JJJJJ_ JJJJJJJJJJJ666AAA666J,JJ,,JJJJJJ_ JJJJJJJJJJJJJ6AAA6JJJJ,,,JJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ " , # xpmtoiim -c1 lightbulb.xpm "32,c1,_ 66666666666660000006666666666666_ 66666666666006666660066666666666_ 66666666600666666666600666666666_ 66666666066666666666666066666666_ 666666660666,6,6,6,6666066666666_ 66666660666,6,6,6,6,6,6606666666_ 6666666066,6,6,6,6,6,6,606666666_ 666666066,6,6,,,,,,,6,6,60666666_ 66666606,6,6,,,,,,,,,6,660666666_ 666666066,6,,,,,,,,,,,6,60666666_ 66666606,6,,A,A,A,AA,6,660666666_ 666666066,6,0,,,,,,0,,6,60666666_ 6666666066,,0,,,,,,0,6,606666666_ 666666606,6,,0,,,,0,6,6606666666_ 6666666606,6,,0,,0,6,66066666666_ 66666666066,6,0,,06,666066666666_ 666666666066,30,,03,660666666666_ 66666666606663333336660666666666_ 66666666660666311366606666666666_ 66666666660666311366606666666666_ 66666666666066311366066666666666_ 66666666666066311366066666666666_ 66666666666606311360666666666666_ 66666666666600000000666666666666_ 6666666666660DDDDDD0666666666666_ 666666666660DDDDDDDD066666666666_ 66666666666600000000666666666666_ 666666666660DDDDDDDD066666666666_ 66666666666600000000666666666666_ 666666666660DDDDDDDD066666666666_ 66666666666600DDDD00666666666666_ 66666666666666000066666666666666_ " , # xpmtoiim -c1 lips.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHH0000AAA0HHHHHHHHHHHHHHHHHH_ HH0000AAAAAAAA00HHH0A000HHHHHHHH_ 00AAAAAAAAAAAAAA00AAAAAA00HHHHHH_ H0A00AAAAAAAAAAAAAAAAAAAAA0HHHHH_ HH0AAAAAAAAAAAAAAAAAAAAAAAA00HHH_ HHH0AA00AAAAAAAAAAAAAAAAAAAAA0HH_ HHH0AAAA00AAAAAAAAAAAAAAAAAAA000_ HHHHAAAAAAA00AAAAAAAAAAAAAAA00HH_ HHHH0AAAAAAAAAAA00AAAAAA0A0AA0HH_ HHHH0AAAAAAAAAAAAAA00A00AAAA0HHH_ HHHHH0AAAAAAAAAAAAAAAAAAAAAA0HHH_ HHHHH00AAAAAAAAAAAAAAAAAAAA0HHHH_ HHHHHH0AAAAAAAAAAAA666AAAA0HHHHH_ HHHHHHH0AAAAAAA6666666AAA0HHHHHH_ HHHHHHHH0AAAAAA66666AAAAA0HHHHHH_ HHHHHHHHH0AAAAAAAAAAAAAA0HHHHHHH_ HHHHHHHHHH00AAAAAAAAAA00HHHHHHHH_ HHHHHHHHHHHH0AAAAAAA00HHHHHHHHHH_ HHHHHHHHHHHHHH000000HHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH_ " , # xpmtoiim -c1 lock.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666661111111111666666666666_ 66666666613333333333116666666666_ 66666666133333333333311666666666_ 66666661333333333333333166666666_ 66666661333311111111333316666666_ 66666613333116666661133316666666_ 66666613331166666666133316666666_ 66666613331166666666133316666666_ 66666613331166666666133316666666_ 66666613331166666666133316666666_ 66666613331166666666133316666666_ 66666613331166666666133316666666_ 66666613331111111111133316666666_ 66666333333333333333333331666666_ 66666333333333333333333311666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666333111111111111111000666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 lunchbox.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 666666666666oooooo66666666666666_ 66666666666o00000006666666666666_ 66666666666o06666o06666666666666_ 66600000000o00000o00000000000066_ 66066666666o06666o06666666600006_ 60444444444o04444o04444444000000_ 60434343434343434343434343000000_ 03333333333333333333333330000000_ 03333333333333333333333330000000_ 03333333333333333333333330000000_ 01444111313131313131444130000000_ 01410001111111111111410000000000_ 01140011111111111111140010000000_ 00040000000000000000040000000000_ 01140011111111111111140010000000_ 01110011111111111111110010000000_ 01110011111111111111110010000000_ 01111111111111111111111110000000_ 01111111111111111111111110000006_ 01111111111111111111111110000066_ 01111111111111111111111110000666_ 01111111111111111111111110006666_ 01111111111111111111111110066666_ 00000000000000000000000000666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 macintosh_logo.xpm "32,c1,_ 66666666666660000000000006666666_ 66666666666606666666666666666666_ 66666666666606666CCCCCC666066666_ 66666666666606666666666C66066666_ 66666666666606666666666C66066666_ 66666S66666606666666666C66066666_ 6666SS66666606666666666C66066666_ 6666S666666606666666666C66066666_ 60066006666606666666666C66066666_ 06600660666606666666666C66066666_ 0666666066660666CCCCCCC666066666_ 06666666666606666666666666066666_ 06666666666606666666666666066666_ 60660606666666666660000066066666_ 66006066666666666666666666066666_ 66666666AAAAAA666666666666066666_ 666666AA666666666666666666666666_ 66666A666666666000000000007? VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1*I006666_ 66666A66666666666666666666660666_ 666666AAAAA66666666JJJJJJJJ66066_ 66666666666A666666666J6J6J6J6606_ 66666666666A666666666666J6J6J660_ 6666666666A666666666666666666660_ 6666666666A666666666666000000006_ 66666666666AA6666666666666666666_ 6666666666666A666666666666666666_ 66666666666666660066666666666666_ 66666666666666606606666666666666_ 66666666666666066C60666666666666_ 6666666666666666C666066666666666_ 66666666666666666666066666666666_ 66666666666666666660666666666666_ " , # xpmtoiim -c1 magnify.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666300003666666666666666666_ 66666600111111006666666666666666_ 66666011100001110666666666666666_ 66660110066660011066666666666666_ 66601106666666601106666666666666_ 66603066606666660106666666666666_ 66333066060666660110666666666666_ 66030660660666666010666666666666_ 66030606606666666010666666666666_ 66030606066666666010666666666666_ 66030660666666666010666666666666_ 66030666666666666010666666666666_ 66333066666666660110666666666666_ 66603066666666660306666666666666_ 66603306666666603306666666666666_ 66660330066660033006666666666666_ 66666033300003330310666666666666_ 66666600333333000331066666666666_ 66666666300003666033106666666666_ 66666666666666666603310666666666_ 66666666666666666660331066666666_ 66666666666666666666033106666666_ 66666666666666666666603310666666_ 66666666666666666666660331066666_ 66666666666666666666666033106666_ 66666666666666666666666603306666_ 66666666666666666666666660066666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 magnify_bug.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666661000000166666666666666666_ 66666600111111006666666666666666_ 60666011100001110666666666666666_ 66060110066660011066666666666666_ 66603106660060601106666666666666_ 66103066666000000101666666666666_ 660330066600FFFH0110606666666666_ 6603060000FFFHFFF010066666666666_ 6603066000HFHHHFH010F00666666666_ 6603060000HHFHFHH010FHH066666666_ 6603066000HFFFFFH010H00666666666_ 6603060000FFFHFFF010066666666666_ 660330066600HHHF0110606666666666_ 66103066666000000101666666666666_ 66603306660060603306666666666666_ 66060330066660033006666666666666_ 60666033300003330310666666666666_ 66666600333333000331066666666666_ 66666661000000166033106666666666_ 66666666666666666603310666666666_ 66666666666666666660331066666666_ 66666666666666666666033106666666_ 66666666666666666666603310666666_ 66666666666666666666660331066666_ 66666666666666666666666033106666_ 66666666666666666666666603306666_ 66666666666666666666666660066666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 mail.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666636_ 66333333333333333333333333333316_ 663000010333333333333333AAAAA316_ 663333333333333333333333A6600316_ 6630000003333333333333330L06J316_ 66333333333333333333333301J60316_ 663333333333333333333333J6L0J316_ 663333333333333333333333JJJJJ316_ 66333333333333333333333333333316_ 66333333333333333333333333333316_ 66333333333300300003003333333316_ 66333333333333333333333333333316_ 66333333333301000103003333333316_ 66333333333333333333333333333316_ 66333333333300000030103333333316_ 66333333333333333333333333333316_ 66333333333333333333333333333316_ 63111111111111111111111111111116_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 mail_edit.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666636_ 66333333333333333333333333333316_ 663000000333333333333333AAAAA316_ 663333333333333333333333A6600316_ 6631000103333333333333330L06J316_ 66333333333333333333333300J60316_ 663333333333333333333333J6L0J316_ 663333333333333333333333JJJJJ316_ 66333333333333333333333333333316_ 66333333333333333333333333333316_ 66333333333300300103103333333316_ 66333333333330333333333333333316_ 66333333333333033333333333333316_ 663333333333330ooooooo3333333316_ 66333333333333occocccco333333316_ 66333333333333occoooocco33333316_ 66333333333333occow1oOcco3333316_ 63111111111111occo0woOccco111116_ 66666666666666occcO0wOccco666666_ 66666666666666oOcccc0wccco666666_ 666666666666666oOcccc0wcco666666_ 6666666666666666oOcccc0cco666666_ 66666666666666666oOcccccco666666_ 666666666666666666oOccccco666666_ 6666666666666666666oOccccww66666_ 66666666666666666666oOccwJww6666_ 66666666666666666666oOOwwwJw6666_ 666666666666666666666owwwww66666_ 6666666666666666666660wwww666666_ 66666666666666666666660ww6666666_ 66666666666666666666666066666666_ " , # xpmtoiim -c1 mail_zap.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666660,,,,,,,,,,06666_ 6666666666666660,,,,,,,,,,066666_ 666666666666660,,,,,,,,,,0666666_ 66666666666660,,,,,,,,,,06666666_ 6666666666660000000,,,,066666666_ 666666666666666660,,,,0666666666_ 66666666666666660,,,,06666666666_ 6666666666666660,,,,066666666666_ 666666666666660,,,,0666666666666_ 66666666666660,,,,06666666666666_ 6666666666660,,,0000000666666666_ 666666666660,,,,,,,,,06666666666_ 66666666660,,,,,,,,,066666666666_ 6666666660000000,,,0666666666666_ 666666666666660,,,06666666666666_ 66666666666660,,,066666666666666_ 6666666666660,,,0000666666666666_ 666666666660,,,,,,06666666666666_ 666666666600000,,066666666666666_ 666666666666660,0666666666666666_ 66666666666660,06666666666666666_ 6000000000000,000000000066666666_ 606666666660,06660JJ6A6A06666666_ 66066666660,06666606J6A6A0666666_ 66606666666666666660000000066666_ 66660666663333333366666666606666_ 66666066666666666666666666660666_ 66666606666633333333666666666066_ 66666660666666666666666666666606_ 66666666000000000000000000000006_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 martini.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666066666666_ 66666666666666666666660666666666_ 66666666666666666666606666666666_ 66666000000000000000000000066666_ 66666606666666666666066660666666_ 66666660666666666660666606666666_ 666666660iiiiiiiii0iiii066666666_ 6666666660iiiiiiAAAiii0666666666_ 66666666660iiiiAAAAAi06666666666_ 666666666660iiiAAAAA066666666666_ 6666666666660iiAAAA0666666666666_ 66666666666660iiAA06666666666666_ 666666666666660ii066666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666666600666666666666666_ 66666666666660066006666666666666_ 66666666666006666660066666666666_ 66666666600000000000000666666666_ " , # xpmtoiim -c1 medicine.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666CCCC66666666666666666666666_ 666CBBBBBBB666666666666666666666_ 66CCCCCCCCBO66666666666666666666_ 66C6C6C6C6BO66666666666666666666_ 666B6B6B6BO66666666666666666666J_ 6666BBBBBO66666666666666666666Jw_ 6666OOOOOO6666666666666666666Jw6_ 6666666666666666666666666666Jw66_ 66SSSSSSSSSS666666666666666Jw666_ 6S8앿Y VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1ZXSSSSS0000006600000000000000006_ 6SSSSSS0000006600000000000000006_ 6SSSSSS0000006660000000000000006_ 6SS666666,300666000CCCC000000066_ 6SS666An6,300666000C311B00000066_ 6SS666An6,300666000C311B00000066_ 6SS6AAAnnn300666000CCCC000000066_ 6SS6AAAnnn300666000C3C1000000066_ 6SS666An6,300666000B31C000O00066_ 6SS666An6,300666000O311C0B000066_ 6SS666666,30066600013110C0000066_ 6SSSSSS0000006660001311B0B000066_ 6SSSSSS000000666000131O000O00066_ 6SSSSSS0000006660001311000000066_ 6SSSSSS0000006660001311000000066_ 6SSSSSS0000006660001311000000066_ 6SSSSSS0000006666001311000000666_ 6SS00000000006666600000000006666_ 66000000000066666660000000066666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 meter.xpm "32,c1,_ 44444444444444444444444444444444_ 44111111111111111111111111111444_ 41111111111111111111111111111144_ 41114444444444444444444444411104_ 41144444444444444444444444441104_ 41144444444444404444440444441104_ 41144444444404404404400444441104_ 41144444444404404404400444441104_ 41144440440444444444004A44441104_ 4114444404444444444400A444441104_ 41144444444444444440044444441104_ 411444044444444444400444A4441104_ 411044444444444444004444444A1104_ 41140444444444444400444444A41104_ 41144444444444444004444444441104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111441111111111111104_ 41111111111111441111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 41111111111111111111111111111104_ 44111111111111111111111111111004_ 44400000000000000000000000000044_ 44444444444444444444444444444444_ " , # xpmtoiim -c1 modem.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666600000000000000000006666666_ 66666066666666666666666660666666_ 66666060000000000000000060666666_ 66666060111111111111111060366666_ 66666060111111111116161060336666_ 66666060111111111116161060336666_ 66666060111111111111161060336666_ 66660000000000000111161060336666_ 66606,6,6,6,6,6,6011161060336666_ 6606,60006,60006,601111060336666_ 606,6,0,00000,0,6,60111060336666_ 60,6,0,6,6,6,6,0,6,0111060336666_ 60000,606060606,0000111060336666_ 6666060606060606,011111060336666_ 66606,606060606,6,00000060336666_ 6660,60606060606,606666660336666_ 660,6,6,6,6,6,6,6,60000003336666_ 6006,6,6,6,6,6,6,6,0000000000666_ 060,6,6,6,6,6,6,6,60666666666066_ 0606,6,6,6,6,6,6,6,0666666666036_ 06000000000000000000000000666033_ 06600066666666660006666666666033_ 06000000000000000006000000666033_ 06011111111111111110666666666033_ 0601AA1AA1AA11111110666666666033_ 60011111111111111110000000000333_ 66300000000000000003333333333333_ 66633333333333333333333333333366_ 66666333333333333333366666666666_ " , # xpmtoiim -c1 monitor.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 63333333333333333333333333333316_ 63333333333333333333333333333330_ 63300000000000000000000000003330_ 63300000000000000000000000006330_ 63300000000000000000000000006330_ 63300000000000000000000000006330_ 63300000000000000000000000006330_ 6330w0w0w0w0w0w0w0w0w0w0w0w06330_ 6330wwwwwwwwwwwwwwwwwwwwwwww6330_ 6330wwwwwwwwwwwwwwwwwwOwwwww6330_ 6330wwwwwwwwwwwwwwwwwwwwwwOw6330_ 6330wwwwwwwwwwwwwwwOwwwOwwww6330_ 6330wwwwwwwwwwwwwwwwwwwwwwOO6330_ 6330wwwwwwwwwwwwwwwwwOwwOODD6330_ 6330wwwwwwwwwwwwOwwwwwwODDDD6330_ 6330wwwwwwwwwwwwwwwOwwODDDDD6330_ 6330wwwwwwwwwwwwwwwwwODDDDDD6330_ 6330wwwwwwwwwwwOwwwwwODDDDDD6330_ 6330wwwwwwwwwwwwwwOwODDDDDDD6330_ 6330JwJwJwJwJwJwJwJwODDDDDDD6330_ 6330JJJJJJJJJJJJOJJJODDDDDDD6330_ 6330JJJJJJJJJJJJJJJJODDDDDDD6330_ 63336666666666666666666666663330_ 6333F333333333333333333333FF3330_ 6133A333333333333333333333333316_ 66000000000000000000000000000066_ " , # xpmtoiim -c1 monster.xpm "32,c1,_ 66666666666666666666666666666666_ 66666606060606060606060606066666_ 66666606,6,6,6,6,6,6,6,6,6066666_ 6666660,0000006,6,6000000,066666_ 6666660600000006,600000006066666_ 6666660,6,000,00600,000,6,066666_ 66660006,0HHH0,000,0HHH0,6000666_ 66660,0,60H0H0600060H0H06,0,0666_ 6660,606,0H0H0,0,0,0H0H0,606,066_ 66606,0,60H0H0606060H0H06,0,6066_ 6660,6,0,0H0H0,0,0,0H0H0,0,6,066_ 66660,6060000,60606,0000606,0666_ 666660,0,6,6,6,0,0,6,6,6,0,06666_ 666660606,6,600060006,6,60606666_ 666606,0,6,606,0,0,606,6,0,60666_ 6666600,6,6,0,6,6,6,0,6,6,006666_ 66666606,6,606,6,6,606,6,6066666_ 6666660,6,6,600,6,006,6,6,066666_ 66666606,6,6,6,000,6,6,6,6066666_ 6666660,6,6,6,6,6,6,6,6,6,066666_ 66660606,6,60000000006,6,6060666_ 6660600,6,606,6,6,6,606,6,006066_ 66606060,6,0,6,606,6,0,6,0606066_ 666060000,6,6,6,6,6,6,6,00006066_ 66660660,0,6,6,000,6,6,0,0660666_ 666666606,0,6,6,6,6,6,0,60666666_ 66666660,6,0,6,6,6,6,0,6,0666666_ 666666606,6,0,6,6,6,0,6,60666666_ 66666660,6,606,6,6,606,6,0666666_ 666666606,6,0,6,0,6,0,6,60666666_ 66666660,6,6,000,000,6,6,0666666_ 666666606,6,6,6,6,6,6,6,60666666_ " , # xpmtoiim -c1 mouse.xpm "32,c1,_ 66606606606000066666666666666666_ 66666666666666606666666666666666_ 66666666666666660666666666666666_ 66666666666666666066666666666666_ 66666666666666666066666666666666_ 66666666666666600006666666666666_ 66666666666666666666666666666666_ 66666666666666000000666666666666_ 66666666666660444444066666666666_ 66666666600004444444400006666666_ 66666666044444444444444410666666_ 66666666044400000000004110666666_ 66666666040004444444400010666666_ 66666666040300000000003010666666_ 66666666040301111111103010666666_ 66666666040301111111103010666666_ 66666666040300000000003010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666040333333333333010666666_ 66666666041000000000000110666666_ 66666666011111111111111110666666_ 66666666011111111111111110666666_ 66666666600000000000000006666666_ " , # xpmtoiim -c1 mr_do.xpm "32,c1,_ 44444444444444444444444444444444_ 44444444000000000444444444444444_ 44444400JJJ6JJJJJ044444444444444_ 444440JJ6JJJJJ6JJJ04444444444444_ 44440JJJJJJJJJJJ6J04444444444444_ 44440J6JJJ6JJJJJ0004444444444444_ 4440JJJJJJJJJ600cc04444440000004_ 4440J6JJ6JJJJ0ccccc0444444444044_ 440JJJJJJJJ60ccccccc004444440444_ 440JJJJJJJJJ0ccc00cccc0444404444_ 4406J0JJJ6JJ0ccccccccc0444044444_ 4400040JJJJJ0ccccccc004440000004_ 44004440JJ6J0cccccc0444444444444_ 40660440JJJJJ0cc0000444444444444_ 40660440JJJJ6J0cccc0440000444444_ 44004440J6JJJJJ0c004444404444444_ 44444440JJJJJJJ60444444044444444_ 4444440JJJJ6JJJJ0444440000444444_ 4444440J6JJJJJ6J0444444444444444_ 4444440JJJJJJJJJJ000444444444444_ 4444440JJJ6JJJJ6JJ6J000044444444_ 44444406JJJJ6JJJJJJJJ6J000444444_ 4444440JJJJJJJJJJ00JJJJ0cc044400_ 4444440JJJ6JJJ6J044000J0cc044400_ 4444440J6JJJ6JJJ040JJJ0000444000_ 4444440JJJJJJJJJJ0JJ6JJJJ0444000_ 4444440JJJ6JJJ6JJJJJJJJ6J0000000_ 44444440JJJJJJJJJ6JJJ000J0000004_ 444444440JJ6JJJJJJJ0044400000004_ 44444444400000000004444444000044_ SSSSSSSSSSSSSSSSSSSSSSSSS11SSSSS_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 music.xpm "32,c1,_ 66666666666666666666666666666666_ H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6_ 6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H_ H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6_ 6H6H6H6H6H6H6H6H6H6H6H6H6H69H VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1gH6H6H_ H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6_ 6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H_ H6H6H6H6H6H6H600H6H6H6H6H6H6H6H6_ 6H6H6H6H6H6H6H000H6H6H6H6H6H6H6H_ H6H6H6H0H6H6H60006H6H6H6H6H6H6H6_ 6H6H6H606H6H6H0H006H6H6H6H6H6H6H_ H6H6H6H0H6H6H606H0H6H6H6H6H6H6H6_ 6H6H6H606H6H6H0H606H6H6H6H6H6H6H_ H00000000000000000000000000006H6_ 6H6H6H606H60000H6H0H6H6H6H6H6H6H_ H6H6H6H0H6000006H606H6H6H6H6H6H6_ 60000000000000000000000000000H6H_ H6H60000H6000006H606H6H6H6H6H6H6_ 6H6000006H60006H6H0H6H6H6H6H6H6H_ H00000000000000000000000000006H6_ 6H6000006H6H6H6H6H0H6H6H6H6H6H6H_ H6H60006H6H6H6H6H606H6H6H6H6H6H6_ 60000000000000000000000000000H6H_ H6H6H6H6H6H6H6H6H606H0000006H6H6_ 6H6H6H6H6H6H6H6H6H0H000000006H6H_ H00000000000000000000000000006H6_ 6H6H6H6H6H6H6H6H6H6H6000000H6H6H_ H6H6H6H6H6H6H6H6H6H6H60000H6H6H6_ 6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H_ H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6_ 6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H_ H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6H6_ " , # xpmtoiim -c1 music_inst.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666660000000011166666666666_ 66666666600DDDD,A8A8A66666666666_ 6666666600DDD0000011166666666666_ 666666660DDDD6666666666666666666_ 666666660DD006666666666666666666_ 6666666600HH06666666666666666666_ 660066660,DH00666666666666666666_ 6606666600DH00066666666666666666_ 6606666660DHH0066666666666666666_ 0006666660,HD0006666666666666666_ 00066666600HDHH06666666666666666_ 66666666660,,,H00666666666666666_ 66600666660,DD,,0666666666666666_ 666066666660HHHH0066666666666666_ 666066666000,H,D,006666666666666_ 60006660033D00D,DD06666666666666_ 60006600D30000DHD,06666666666666_ 6666603D000000,DHH00666666666666_ 6666603D0000000HHH,0666666666666_ 666660300000D,0,DD,0066666666666_ 6666600D00DDDDDD,DDD066666666666_ 666666000HDDHDHDDDHD066666666666_ 66666666600DDDDDHHDD066666666666_ 66666666660HDDDDHDD0066666666666_ 6666666666600HDDDDD0666666666666_ 66666666666600DHDH06666666666666_ 66666666666666000066666666666666_ " , # xpmtoiim -c1 news.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666000000000000666666_ 66660000000000,,,,0,,,,0,,066666_ 666000,,,0,00,0,0,0,00,,0,066666_ 666030,,00,,0,0,00,0,0,00,,06666_ 000,030,,,,,,,,,,,,,,,,,,,,,0666_ 0,,,030,0000000000000000,00,0666_ 600,030,,,,,,,,,,,,,,,,,,,,,,066_ 600,,030,0,0,00,000,,0,00000,066_ 6030,030,,0,0,0,,,,,,,0,00,00,06_ 6600,,030,000000,0,,000,00000,06_ 66030,030,,00,00,,,,,,,,,0,00,06_ 66600,,030,000000,,0,000,00000,0_ 666030,030,,000,00,000,0,000,,,0_ 666600,,030,00,000,0,000,00,00,0_ 6666000,030,0000,0,00000,,,00006_ 66660300030,00,00000000000066666_ 66666000000000006666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 news2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 60000000000000000000000000000006_ 60cccccccccccccccccccccccccccc06_ 60cJJJJccccccccc00cccccccJJJJc00_ 60cccccc0c0c0c0c0ccc0c00cccccc00_ 60cAAAAcc00cc0cc00c00c00cAAAAc00_ 60cAAAAcccccccccccccccc0cAAAAc00_ 60cccccccccccccccccccccccccccc00_ 60000000000000000000000000000000_ 60cccccccccccccccccccccccccccc00_ 60cc000c0cc0c0000c0003c3003c0c00_ 60cc01ccc00ccc0ccc0cc0c0cc0c0c00_ 60cc0cccc00ccc0ccc0c0cc0000ccc00_ 60cc000c0cc0cc0ccc0cc0c0cc0c0c00_ 60cccccccccccccccccccccccccccc00_ 60000000000000000000000000000000_ 60cccccccccccccccccccccccccccc00_ 60c0c0c0cc000000000000c0c00c0c00_ 60c00c000c030333333330cc0c00cc00_ 60cccccccc000000000000cccccccc00_ 60c010000c011111111110c010010c00_ 60cccccccc011111111110cccccccc00_ 60c100010c011111111110c100001c00_ 60cccccccc011111111110cccccccc00_ 60c011000c011111111110c010100c00_ 60cccccccc000000000000cccccccc00_ 60c000100cccccccccccccc001000c00_ 60cccccccccc01000100cccccccccc00_ 60cccccccccccccccccccccccccccc00_ 66000000000000000000000000000000_ 66600000000000000000000000000000_ " , # xpmtoiim -c1 no_smoking.xpm "32,c1,_ 666666666666AAAAAAAA666666666666_ 666666666AAAAAAAAAAAAAA666666666_ 6666666AAAAAAAAAAAAAAAAAA6666666_ 666666AAAAAAA666666AAAAAAA666666_ 66666AAAAA666666666666AAAAA66666_ 6666AAAA6666660666666666AAAA6666_ 666AAAA6666660606666666AAAAAA666_ 66AAAA6666666666066666AAAAAAAA66_ 66AAA6666666660666666AAAAA6AAA66_ 6AAAA666666066660666AAAAA66AAAA6_ 6AAA666660660660666AAAAA6666AAA6_ 6AAA66660660666666AAAAA66666AAA6_ AAAA6660606666666AAAAA666666AAAA_ AAA6666666666666AAAAA66666666AAA_ AAA66606060000000000000000666AAA_ AAA66660600666AAAAA6666660666AAA_ AAA6660606066AAAAA66666660666AAA_ AAA666606006AAAAA666666660666AAA_ AAA66606060000000000000000666AAA_ AAAA666666AAAAA6666666666666AAAA_ 6AAA66666AAAAA66666666666666AAA6_ 6AAA6666AAAAA666666666666666AAA6_ 6AAAA66AAAAA666666666666666AAAA6_ 66AAA6AAAAA6666666666666666AAA66_ 66AAAAAAAA6666666666666666AAAA66_ 666AAAAAA6666666666666666AAAA666_ 6666AAAA6666666666666666AAAA6666_ 66666AAAAA666666666666AAAAA66666_ 666666AAAAAAA666666AAAAAAA666666_ 6666666AAAAAAAAAAAAAAAAAA6666666_ 666666666AAAAAAAAAAAAAA666666666_ 666666666666AAAAAAAA666666666666_ " , # xpmtoiim -c1 noseguy.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666660000066666666666666666_ 6666666660ccccc06666666666666666_ 666666660ccccccc0666666666666666_ 666666660cccccccc066666666666666_ 666666660cccccc00000066666666666_ 666666660ccccc066660606666666666_ 666666660cccc00JJJJJ006666666666_ 666666660cccc0666JJJc06666666666_ 666666660cccc0666JJJcc0666666666_ 666666660ccccc0666Jcccc066666666_ 666666660cccccc000cccccc06666666_ 666666660cccccccccccccccc0666666_ 666666660cc00ccccccccccccc066666_ 666666660c0ccccccccccccccc066666_ 6666666660ccccccccccccccccc06666_ 6666666660ccccccccccccccccc06666_ 666666660cccccccccccccccccc06666_ 666666660cccccccccccccccccc06666_ 666666660cccccccccccccccccc06666_ 666666660ccccccccccccccccc066666_ 666666660ccccccccccccccccc066666_ 6666666660ccc000ccccccccc0666666_ 66666666660000c000ccccc006666666_ 6666666666660cc0cc00000666666666_ 6666666666660cc0cc06666666666666_ 6666666666660cc0cc06666666666666_ 6666666666660ccc0000060066666666_ 666666666660ccc0ccccc00c00666666_ 66666666660cccccccccccc0cc066666_ 66666666660000000000000000066666_ " , # xpmtoiim -c1 noseguy_back.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000006666666666666_ 6666666666660cccccc0666666666666_ 666666666660cccccccc066666666666_ 666666666660cccccccc066666666666_ 666666666600cccccccc006666666666_ 6666666660J0cccccccc0J0666666666_ 666666660J0cccccccccc0J066666666_ 666666660J0cccccccccc0J066666666_ 6666666600cccccccccccc0066666666_ 6666666660cccccccccccc0666666666_ 666666660cccccccccccccc066666666_ 666666660cccccccccccccc066666666_ 66666660cccccccccccccccc06666666_ 66666660cccccccccccccccc06666666_ 6666660cccccccccccccccccc0666666_ 6666660cccccccccccccccccc0666666_ 666660cccccccccccccccccccc066666_ 666660cccccccccccccccccccc066666_ 66660cccccccccccccccccccccc06666_ 66660cccccccccccccccccccccc06666_ 66660cccccccccccccccccccccc06666_ 66660cccccccccccccccccccccc06666_ 666660000000cc0000cc000000066666_ 66666666660cc066660cc06666666666_ 66666666660cc066660cc06666666666_ 66666666660cc066660cc06666666666_ 66666660000cc066660cc00006666666_ 6666600cc0cccc0660cccc0cc0066666_ 66660cccccccccc00cccccccccc06666_ 666600000:fo; VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1")v00000000000000000006666_ " , # xpmtoiim -c1 noseguy_front.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660000006666666666666_ 6666666666660cccccc0666666666666_ 666666666660cccccccc066666666666_ 666666666660cccccccc066666666666_ 6666666666000cccccc0006666666666_ 66666666606660cccc06660666666666_ 666666660000000cc000000066666666_ 66666666066JJ60cc06JJ66066666666_ 66666666066JJ60cc06JJ66066666666_ 66666666606660cccc06660666666666_ 666666660c000cccccc0006066666666_ 666666660cccccccccccccc066666666_ 66666660cccccccccccccccc06666666_ 66666660c0cccccccccccc0c06666666_ 6666660cccccccccccccccccc0666666_ 6666660c0cccccccccccccc0c0666666_ 666660cccccccccccccccccccc066666_ 666660cccccccccccccccccccc066666_ 66660cc0cccccccccccccccc0cc06666_ 66660cccccccccccccccccccccc06666_ 66660ccc0cccccccccccccccccc06666_ 66660cccc0cccccccccccc0cccc06666_ 666660000600cccccccc006000066666_ 66666666660c00000000c06666666666_ 66666666660cc066660cc06666666666_ 66666666660cc066660cc06666666666_ 66666660000cc066660cc00006666666_ 6666600cccc0cc0660cc0cccc0066666_ 66660cccccccccc00cccccccccc06666_ 66660000000000000000000000006666_ " , # xpmtoiim -c1 notebook.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666660060060060060060066666_ 66666666606006006006006006000066_ 666666660H0HH0HH0HH0HH0HH0HH0066_ 666666660HHHHHHHHHHHHHHHHHHH0033_ 66666660HHHHHHHHHHHHHHHHHHH06033_ 66666660HHHHHHHHHHHHHHHHHHH06033_ 6666660HHHHHHHHHHHHHHHHHHH066033_ 6666660HHHH00000000000HHHH0ii033_ 666660HHHHHHHHHHHHHHHHHHH0666033_ 666660HHH00000000000HHHHH0666033_ 66660HHHHHHHHHHHHHHHHHHH0iiii033_ 66660HHHHHHHHHHHHHHHHHHH06666033_ 6660HHHHHHHHHHHHHHHHHHH066666033_ 6660HHHHHHHHHHHHHHHHHHH0iiiii033_ 660HHHHHHHHHHHHHHHHHHH0666666033_ 660HHHHHHHHHHHHHHHHHHH0666666033_ 60HHHHHHHHHHHHHHHHHHH0iiiiiii033_ 60HHHHHHHHHHHHHHHHHHH06666666033_ 0HHHHHHHHHHHHHHHHHHH066666666033_ 0HHHHHHHHHHHHHHHHHHH0iiiiiiii033_ 0HHHHHHHHHHHHHHHHH00666666666033_ 60000000000000000066666666666033_ 6666666660iiiiiiiiiiiiiiiiiii033_ 6666666660666i666666666666666033_ 6666666660666i666666666666666033_ 6666666660iiiiiiiiiiiiiiiiiii033_ 6666666660666i666666666666666033_ 6666666660666i666666666666666033_ 66666666660000000000000000000333_ 66666666666333333333333333333333_ 66666666666633333333333333333336_ " , # xpmtoiim -c1 orbit.xpm "32,c1,_ 10000000000003000000000100000001_ 00000100000000000000000000000000_ 00000000001000000100000000000000_ 00000000000000000000000000000000_ 00003000000000000000000300000100_ 00000300000000000000000000000000_ 00000000000100000000000000000000_ 01000000000000000000100000000000_ J00000000,,,,,,00000000000000000_ J6000000,,,,,,,,0010000000000030_ 66JJ000,,,,,,,,,,000000000000000_ JJJJJ0,,,,,,,,,,,,00000010000000_ JJJ66J,,,,,,,,,,,,00000000000000_ J6JJJJJ6,,,,,,,,,,00000000000000_ JJJJJJ66J,,,,,,,,,01000000000010_ 6JJ6666J6J,,,,,,,,00000000000000_ JJJJJJ6JJJJJ,,,,,,00000000000000_ 6JJJ6JJJJJJ6J,,,,000000000000000_ JJ6J66JJJJJJJJ,,0000000010000000_ 6J66JJJJJJ6JJJJJ0001000000000300_ 6J6JJJJJJJ6JJJJ6J000000000003000_ JJJJJJJJJJ6JJJJ6J600000000000000_ JJJJJJ6J6666JJJJJJ66000000000000_ JJJJJ66666JJJ6JJJJ66600000000030_ JJJJ6J66JJJ6JJJJ6J66660000100000_ JJJJ666JJJ66JJJ6J6666JJJ00000000_ J66J6J6J6JJ6J666J666JJJ6J0000000_ JJ66JJ6JJJJJJ6JJ66J6JJJ6JJ000001_ J66JJJJJJJJJJ6JJ66JJJJ6J6JJJ0000_ 666JJJJJJJ6J6J6J6JJJJJJJ6JJJJ000_ 6JJJJJJJ6JJJJJJ6JJJJJJ6JJ66JJ600_ JJJJJJ6JJJJJJJ66JJJJ666JJJJ6JJJJ_ " , # xpmtoiim -c1 page.xpm "32,c1,_ 66666666666666666666666666666666_ 66666600000000000000000066666666_ 66666606666666666666610606666666_ 66666306666666666666610660666666_ 6666130600000606AAAAA10666066666_ 66661306011106066666610000066666_ 6666130600000606AAAAA11111066666_ 66661306666666066666666666066666_ 66661306666666066666666666066666_ 66661306000006060000000066066666_ 66661306011106066666666666066666_ 66661306000006060000000066066666_ 66661306666666066666666666066666_ 66661306666666060000000066066666_ 66661306000006066666666666066666_ 66661306011106066666666666066666_ 66661306000006060000000066066666_ 66661306666666066666666666066666_ 66661306666666060000666666066666_ 66661306000006066666666666066666_ 66661306011106060000000666066666_ 66661306000006066666666666066666_ 66661306666666060000000006066666_ 66661306666666066666666666066666_ 66661306000006066666A666A6066666_ 666613060111060666AA6AAA66066666_ 66661306000006066666A6A6A6066666_ 6666130666666606666666A6A6066666_ 66661306666666666666666666066666_ 66661300000000000000000000066666_ 66661333333333333333333336666666_ 66661111111111111111111166666666_ " , # xpmtoiim -c1 page2.xpm "32,c1,_ 66666666666666666666666666666666_ 6AAAAAAAAAAAAAAAAAAAAAAAAAAAA006_ 6A66666666666666666666666666A006_ 6A60600000000066666666666666A006_ 6A66666666666666666666666666A006_ 6A66606000000000006666666666A006_ 6A66666666666666666666666666A006_ 6A66666060000000000000666666A006_ 6A66666666666666666666666666A006_ 6A66666060000000000000000066A006_ 6A66666666666666666666666666A006_ 6A66606000000000000000066666A006_ 6A66666666666666666666666666A006_ 6A66666000000000000666666666A006_ 6A66666666666666666666666666A006_ 6A66666060000000000000666666A006_ 6A66666666666666666666666666A006_ 6A66666060000066666666666666A006_ 6A66666666666666666666666666A006_ 6A66666660600000000000000666A006_ 6A66666666666666666666666666A006_ 6A66666660600000000000006666A006_ 6A66666666666666666666666666A006_ 6A66666060000000000000000666A006_ 6A66666666666666666666666666A006_ 6A60600000000000000000006666A006_ 6A66666666666666666666666666A006_ 6A66606000000000066666666666A006_ 6A66666666666666666666666666A006_ 6AAAAAAAAAAAAAAAAAAAAAAAAAAAA006_ 66660000000000000000000000000006_ 66660000000000000000000000000006_ " , # xpmtoiim -c1 paint.xpm "32,c1,_ 00000000000000000000006666666666_ 0cccccccccccccccccccc00666666666_ 0cccccAccDDDcccDDcccc00666666666_ 0ccAAAAccDDDDDDDDcccc00666666666_ 0cAAAAAcDDDDDDDDFFFcc00666666666_ 0ccAAAABBBBDDDDDFFFcc00666666666_ 0cLAAABBB0000BDFFFFFc00666666666_ 0cLLLLB0000000JFJFFFc00666666666_ 0ccLLL000030300JJFFFc00666666666_ 0ccLL0000000030JJJJJc00666666666_ 0cLLLLLL0000000JJJccc00666666666_ 0cccLLLLJ0000000JJccc00666666666_ 0cccLLJJJJ00000%0JJcc00666666666_ 0ccJJJJJJJJJJ0oo%0ccc00666666666_ 0cJJJJ00000JJJ0oo%0cc00666666666_ 0ccJJ0000000JJJ0oo%0c00666666666_ 0ccJ000000000FFF0oo%0cBo00666666_ 0ccFFSSSS000SSFSS0oo0cBocBo06666_ 0cBBBDDDSSSSSSSSS00o0cBocBoco066_ 0ccBBBBDDSSSoSSS0cc00ccBccBcoBo6_ 0cccAABBBDooooo0coc00ccBccBcBBo6_ 0ccAAAABBBDooooo0occ0ccccccccBo6_ 0cccAAAccBDccoo000occccccccccBo6_ 0ccccccccccccc00000BcccccccccBo6_ 00000000000000000000cccccccccBo6_ 600000000000000000000cccccccBBo6_ 6666666666666660000000ccccccBBo6_ 66666666666666000000000ccccBBBo6_ 66666666666666600000000BBBBBBB06_ 666666666666666600000wwwJwwwww00_ 666666666666666660000wwwJwwwww00_ 666666666666666666000wwwJwwwww00_ " , # xpmtoiim -c1 paint_picture.xpm "32,c1,_ 00000000000000000000000000000666_ 06666666666666666666666666000666_ 06iiiiiiiiiiiiiiiiiiiiiii0600666_ 06iiii6iiiiiiiiiiiiiiiii06000116_ 06iii66iiiiiiiiiiiiiiii060000116_ 06i666ii6ii66666iiiiii1300060116_ 06i66ii666i66666iiiii13100i60116_ 06666ii66666666ii6ii03100ii60116_ 0666iii6666666ii66inn000iii60116_ 06i6iiii66666ii66nnnnn0iiii60116_ 06iiiiiii666iiiinnnnnniiiii60116_ 06i6666iii66iiiiDnD6nniiiii60116_ 06i6666iiiiii6iDDD6Bniiiiii60116_ 06i66666iiiiiiiDDDBOiiiiiii60116_ 06iiiiiiiiiiiiDDBOiiiiiiiii60116_ 06iiiiiiiiiiiiDBiiiiiiiiiii60116_ 06000000000000D00000000000060116_ 0600000000001O111000000000060116_ 0600000000011O111100000000060116_ 0600000000111B111110000000060116_ 0600000003131BB31313000000060116_ 0600000031313BD13131300000060116_ 0600000333333BD33333330000060116_ 0600003333333DD33333333000060116_ 0600043434343BD43434;$Y/ VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1343400060116_ 0600434343434DD34343434340060116_ 0604444444444DD44444444444060116_ 06666666666666666666666666660116_ 00000000000000000000000000000116_ 66611111111111111111111111111116_ 66611111111111111111111111111116_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 pallete.xpm "32,c1,_ 6666666666oooooooooooooo66666666_ 66666666ooccccccccccccccoo666666_ 6666666occcccccccccccccccco66666_ 666666occcccAAAcccccccccccco6666_ 66666occcccAAAAnccccccDDDccco666_ 6666occccccAAAAncccccDDDDBcco666_ 666occcccccAAAnncccccDDDDBccco66_ 666occccccccnnnccccccDDDBBccco66_ 66occcccccccccccccccccBBBcccccn6_ 66occcccccccccccccccccccccccccn6_ 66occFFFcccccccnnnncccccccccccn6_ 6occFFFFScccccnnSSSScccccccccnS6_ 6occFFFFSccccnnS6666occccccnnS66_ ncccFFFSSccccnS66666occcnnnSS666_ nccccSSSccccccS6666occnn66666666_ nccccccccccccccooooccn6666666666_ nccccccccccccccccccccn6666666666_ nccccccccccccccccccccn6666666666_ nccccccccccccccccccccn6666666666_ ncccBBBcccccccccccccccn666666666_ nccBBBBOccccccccccccccn666666666_ nccBBBBOcccccccccccccccS66666666_ nccBBBOOcccccccccccccccS66666666_ ncccOOOccccccccccccccccS66666666_ nccccccccccJJJccccccccnS66666666_ 6nccccccccJJJJ0cccccccnS66666666_ 6nccccccccJJJJ0ccccccnS666666666_ 66ncccccccJJJ00cccccnS6666666666_ 666nccccccc000cccccnS66666666666_ 6666ncccccccccccccnS666666666666_ 66666nncccccccccnnS6666666666666_ 6666666SSSSSSSSSS666666666666666_ " , # xpmtoiim -c1 parcel.xpm "32,c1,_ 33333333333333333333333333333333_ 333333333333333AAAAA333333333333_ 33333333333333AAAJAAAA3333333333_ 333333333333AAAJJJJAAAAA33333333_ 33333333333AAAJJJJJJAAAAA3333333_ 3333333333AAAAAJJJJAAAAAAA333333_ 33333333AAAAAAAAJAAAAAAAAAA33333_ 3333333AAAAAAAAAAAAA6AAAAAAAA333_ 33333AAAAAAAAAAAAAA6666AAAAAAA33_ 333AAAAAAAAAAAAAAA666666AAAAAAA3_ 3300AAAAAAAAAAAA6666666666AAAAA3_ 33A000AAAAAAAA66666666666DDAAAA3_ 33AAA00AAAAAA66666666666ADAAA0A3_ 33AAAA00AAAAAA666666666AAAAA0A03_ 33AAAAA000AAAAAA66666AAAAAA0A0A3_ 33AAAAAAA000AAAAAA66AAAAAA0A0A03_ 33AAAAAAAAA00AAAAAAAAAAAA0A0A0A3_ 33AAAAAAAAAA000AAAAAAAAA0A0A0A03_ 33AAAAAAAAAAAA00AAAAA0A0A0A0A0A3_ 33AAAAAAAAAAAAA00AAA0A0A0A0A0A03_ 333AAAAAAAAAAAAA00A0A0A0A0A0A0A3_ 3333AAAAAAAAAAAAAA0A0A0A0A0A0A33_ 33333AAAAAAAAAAAAAA0A0A0A0A0A333_ 3333333AAAAAAAAAAA0A0A0A0A0A3333_ 33333333AAAAAAAAAAA0A0A0A0A33333_ 333333333AAAAAAAAA0A0A0A0A333333_ 3333333333AAAAAAAAA0A0A0A3333333_ 33333333333AAAAAAA0A0A0333333333_ 3333333333333AAAAAA0A03333333333_ 33333333333333AAAA0A033333333333_ 333333333333333AAAA0033333333333_ 33333333333333333A0A333333333333_ " , # xpmtoiim -c1 pencil.xpm "32,c1,_ 66666666666666666666666600066666_ 6666666666666666666666600A006666_ 6666666666666666666666000AA00666_ 66666666666666666666600060AA0666_ 6666666666666666666600,006000666_ 666666666666666666600,,,00006666_ 66666666666666666600,,,0,0066666_ 6666666666666666600,,,0,00666666_ 666666666666666600,,,0,006666666_ 66666666666666600,,,0,0066666666_ 6666666666666600,,,0,00666666666_ 666666666666600,,,0,006666666666_ 66666666666600,,,0,0066666666666_ 6666666666600,,,0,00666666666666_ 666666666600,,,0,006666666666666_ 66666666660,,,0,0066666666666666_ 66666666600,,0,00666666666666666_ 6666666660000,006666666666666666_ 6666666660,600066666666666666666_ 66666666006,006666666666666666A6_ 66666666000006666666666AAAA6A6A6_ 666666HH00066666666AAAAA66666A6A_ 6666HHHAA6666666AAAA66666666A6A6_ 66HH,,AA6666666AA6666666666666A6_ 6HH6,6A6666666AA666,666868666666_ 6H6,66AAA66AAAA66,6,6,6686666666_ 6H6,6666AAAA666666,6,66868666666_ 6H66,,6666666,,,6,6,6,666666H66H_ 6H6666,,6,,,,666666,666666666HH6_ 6HH66666,666666666666663666HH66H_ 66HH666666HHHHH66J66663636666HH6_ 666HHHHHHH666666J6J666636666H66H_ " , # xpmtoiim -c1 phone.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 6666666AAAAAAAAAAAAAAAAAA6666666_ 666666AA66AAAAAAAAAAAAAAAA666666_ 66666AA6AAAAAAAAAAAAAAAAAAA66666_ 6666AA6AA0AAAA0000AAAA0AAAAA6666_ 6666AAAA0AAAAAAAAAAAAAA0AAAA6666_ 6600AAAA0AAAAAAAAAAAAAA0AAAA6666_ 606666666AA66AA66AA66AA666666666_ 03066666AAA66AA66AA66AAA66666666_ 60666666AAAAAAAAAAAAAAAA66666666_ 0306666AAAA66AA66AA66AAAA3336666_ 6030606AAAA66AA66AA66AAAA3333666_ 6603030AAAAAAAAAAAAAAAAAA3333366_ 666060AAAAA66AA66AA66AAAAA333366_ 666666AAAAA66AA66AA66AAAAA333366_ 666666AAAAAAAAAAAAAAAAAAAA333366_ 666666AAAAAAAAAAAAAAAAAAAA333666_ 666666AAAAAAAAAAAAAAAAAAAA333666_ 666666AAAAAAAAAAAAAAAAAAAA333666_ 666666AAAAAAAAAAAAAAAAAAAA336666_ 66666663300033333333000333366666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 phone2.xpm "32,c1,_ 66666666666666666666666666666666_ 666666666666666666666666666A6666_ 666666666666666666666666666A6666_ 6666666666666666666666666AAAAA66_ 666666666666666666666660666A0666_ 6666666666666666666660666AAAAA66_ 666666666666666666606660666A0066_ 666666666666666660666066660A6666_ 666666666666666066606666606A6666_ 666666666666006666066660666A6666_ 666666666600666606666066666A6666_ 666666660066660666660666666A6666_ 66666600666606666606666666666666_ 6660AA66660666666066666666666666_ 6606AA66066666606666666666666666_ AAAAAAAAAA6660666666666666666666_ AAAAAAAAAA6606666666666666666666_ 6660AA66660066660000000000000666_ 6606AA6600666660AAAAAAAAAAAAA066_ AAAAAAAAAA66660AAA00AAAAA00AAA06_ AAAAAAAAAA6660AAA0AA0AAA0AA0AAA0_ 6666AA66666660AAA0AA00000AA0AAA0_ 6666AA66666666000AAAAAAAAAAA0006_ 6666AA66666666660AAA00000AAAA066_ 6666AA6666666660AAA0A6A6A0AAAA06_ 6666AA666666660AAAA0AAAAA0AAAAA0_ 6666AA666666660AAAA06AAA60AAAAA0_ 6666AA666666660AAAA0AA6AA0AAAAA0_ 6666AA666666660AAAAA00000AAAAAA0_ 6666AA6666666660AAAAAAAAAAAAAA06_ 6666AA66666666660000000000000066_ 6666AA66666666666000666666000666_ " , # xpmtoiim -c1 phonebook.xpm "32,c1,_ 66666666666666666666666666666666_ 66600000000000000666666666666666_ 660JJJJJJJJJJJJJJ066666666666666_ 60JJJJ00000000JJJJ06666666666666_ 60JJJ00JJJJJJ00JJJ06666666666666_ 6600060JJJJJJ0600066666666666666_ 666660JJ00000J066666666666666666_ 66660JJ0666660J06666666666666666_ 6660JJJ0666660JJ0666666666666666_ 6660JJJ0666660JJ0666666666666666_ 6660JJJ0666660JJJ000666666666666_ 66600JJJ00000JJJ0066000666666666_ 66666000000000006666666066666666_ 66666666000006066333366606666666_ 66666600066600063666666660666666_ 66660006666666066633333666066666_ 66000666336636606366666666066666_ 66006633366666606666333336606666_ 60066336666663660663666666660666_ 66606666633666666066633336666066_ 66606663336666366066366666666066_ 66660633666336666606660000000006_ 66660666633666666606600DDDDDDD06_ 6666606636666366666000DDDDD00066_ 666660666663366000000DDDD0066666_ 6666660663366000DDD00D0006666666_ 66666660666600DDDDD0006666666666_ 6666666066600DDD0006666666666666_ 666666660600DD006666666666666666_ 66666666000000666666666666666666_ 66666666600666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 pick.xpm "32,c1,_ 66600000066666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66600000066666666666666666666666_ 6660AAAA066666666666666666666666_ 6660AAAA066000006666666666666666_ 6660AAAA0600,,,00666666666666666_ 666000000600,,,,0066666666666666_ 666666666660,,,,,,00666666666666_ 66666666666000,,,,,0066666666666_ 666000000666600,,,,,006666666666_ 6660888806666600,,,,,06666666666_ 66608888066666660,,,,00666666666_ 666088880666666660,,,,0066666666_ 6660000006666666600,,,,006666666_ 6666666666666600000,,,,,00066666_ 66666666666660,,,,,,,,,,,0000666_ 66600000066660,,,,,,,,,,,0,,0066_ 6660HHH<V VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1iH066600,,,,,,,,,,,00,,066_ 6660HHHH060000,,,,,,,,,,,,0,,006_ 6660HHHH000,,,,,,,,,,,,,,,,0,,06_ 6660000000,,,,,,,,,,,,,,,,,0,,06_ 6666666660,,,,,,,,,,,,,,,,,,,,00_ 66666666600,,,,,,,,,,,,,,,,,,,,0_ 66600000000,,,,,,,,,,,,,,,,,,,,0_ 66603330,,,,,,,,,,,,,,,,,,,,,,,,_ 66603330,,,,,,,,,,,,,,,,,,,,,,,,_ 66603330,,,,,,,,,,,,,,,,,,,,,,,,_ 66600000,,,,,,,,,,,,,,,,,,,,,,,,_ 666666600,,,,,,,,,,,,,,,,,,,,,,,_ 6666666600,,,,,,,,,,,,,,,,,,,,,,_ 66666666600,,,,,,,,,,,,,,,,,,,,,_ " , # xpmtoiim -c1 picture.xpm "32,c1,_ 66666666666666666666666666666666_ 66600000000000000000000000066666_ 66066666666666666666666666606666_ 60633333333333333333333333360666_ 06300000000000000000000000036066_ 06306666666HHHHHHHH6666666036036_ 0630666666HHHH666666666666036033_ 06306666666666636666666666036033_ 06306HHH6666633366HHHHH666036033_ 063066HHH66663313666HHHH66036033_ 06306666666133333366666666036033_ 06306666666333313366666666036033_ 0630HH66663333133336HHHH66036033_ 06306HHH66313333333666HHH6036033_ 06306666633333133313666666036033_ 06306666633313333333666666036033_ 06306666313131A13131366666036033_ 0630666663333AA33313666666036033_ 0630JJJJJJ333AAA333JJJJJJJ036033_ 0630JJJJJJJJ13A31JJJJJJJJJ036033_ 0630JJJJJJJJJAAAJJJJJJJJJJ036033_ 0630A6AA63A63AAA33A6AAA36A036033_ 06306363A66A3AAA6363636A66036033_ 0630A6A6A6A36336A6AA6A663A036033_ 0630A36A6A66A66A636A6A6A6A036033_ 06306A36A63A6A6A3AA6A63A63036033_ 06300000000000000000000000036033_ 60633333333333333333333333360333_ 66066666666666666666666666603336_ 66600000000000000000000000033366_ 66663333333333333333333333333666_ 66666333333333333333333333336666_ " , # xpmtoiim -c1 plug.xpm "32,c1,_ 6666666666666666666666Oo66666666_ 666666666666666666666OCoo6666666_ 66666666666666666666OCooo6666666_ 6666666666633366666OCooo66666666_ 666666666663001666OCooo666666666_ 66666666666000016OCooo6666666666_ 66666666666100001Cooo66666666Oo6_ 666666666631100001oo66666666OCoo_ 666666666311110000166666666OCooo_ 66666666311111000001666666OCooo6_ 6666666311111110000016666OCooo66_ 666666311111111100000166OCooo666_ 66666311111111111000001OCooo6666_ 666661111111111111000001ooo66666_ 6666611111111111111000001o666666_ 66666111111111111111000001666666_ 6666611111111111111110o011166666_ 6666611111111111111100o000006666_ 66666111111111111110031100006666_ 66666111111111111100313000006666_ 66666111110000000003130000066666_ 66666111133333333331300066666666_ 66663111311111111113000666666666_ 66631113133333333330006666666666_ 66311131300000000000066666666666_ 63111313000000000000666666666666_ 31113130000000000006666666666666_ 01131300066666666666666666666666_ 60313000666666666666666666666666_ 66030006666666666666666666666666_ 66600066666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 plugin.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666660000000000000006_ 66666666666666600000000000000000_ 66666666666666066666666666666600_ 66666666666666060606060606060600_ 66666666666666066666666666666606_ 66666666666666600000000000000066_ 66666666666666666666666666666666_ 66666666600000000000006666666666_ 66666666011111111111110666666666_ 66666660111111111110110666666666_ 66666601111111111101110666666666_ 66666011111111111011106666666666_ 66660111111111110111066666666666_ 66601111111111101110666666666666_ 66010000000000111106666666666666_ 66011111111111111066666666666666_ 66011110110111110666666666666666_ 66601101100111006666666666666666_ 66660011000000666666666666666666_ 66660110666666666666666666666666_ 66601106666666666666666666666666_ 66011066666666666666666666666666_ 66010666666666666666666666666666_ 60110666666666666666666666666666_ 60106666666666666666666666666666_ 66006666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 portrait.xpm "32,c1,_ 00000000000000000000000000000000_ 00000666666666666666666666600000_ 00006666666666666666666666660000_ 00066666666660000666666666666000_ 006666666660AAAAAA06666666666600_ 0666666666AAAAAAAAA0666666666660_ 066666666AAAAAAAAAAAA66666666660_ 066666660AAAAAAAAAAAA06666666660_ 06666666AAAAAAAAAAAAAA6666666660_ 06666666000000000000006666666660_ 0666AAAAAAAAAAAAAAAAAAAA66666660_ 06600000000000000000000000666660_ 06600000000000000000000000666660_ 0666600000A6HJA6HJA6000000666660_ 066660A000,A00,A00,A0060A0666660_ 0666600000A6A0A606A6000000666660_ 06666600,A,A00000A,A,A0066666660_ 06666606A0A0000000A6060066666660_ 0666660A6000000000000A,006666660_ 06666606A60006A60000A6A006666660_ 0666660A,A,A,A,A,A,A,A,006666660_ 06666600A6A6A6A6A6A6A6A006666660_ 066666600A,A,A,A,A,A,A,066666660_ 0666666006A6A6A6A6A6A60066666660_ 0666000000,A,A,A,A,A,00000066660_ 06600H3H3000A6A6A6A6003H3H066660_ 0603H3H3H3H00000000003H3H3006660_ 003H3H3H3H3H0000000H3H3H3H306600_ 0003H3H3H3H30AAAA0H3H3H3H3H3H000_ 00003H3H3H3H3000003H3H3H3H3H0000_ 000003H3H3H3H30A03H3H3H3H3H00000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 pot.xpm "32,c1,_ 66666666666666666666600666666666_ 666666666666666666660,0666666666_ 66666666666666666660,,0666666666_ 66666666666666666660,06666666666_ 66666666666666666660,06666666666_ 6666666666666666660,066666666666_ 6666666666666666660,066666666666_ 666666666000000000,0666666666666_ 666660000,,,,,,,0,,0666666666666_ 66660,00000000000000000666666666_ 66660,,000000000000,,,0666666666_ 66660,,,0,,0,,,,,,,,,06666666666_ 666660000,,0,,,,,,,0006666666666_ 666666000,,,0,,,,,,,,06666666666_ 666600000,,,0,,,,,,,,00666666666_ 6666000,0,,,,,,,,,,,,,0666666666_ 66600,0,0,,,,,,,,,,,,,0666666666_ 66600,0,0,,,,,,,,,,,,,,000006666_ 6660,,,,,,,,,,,,,,,,,,,0,0,,0666_ 6660,,,,,,,,,,,,,,,,,,,0,,,,,000_ 6660,,0,,,,,,,,,,,,,,,,0,,0,,,,0_ 6600,,0,,,,,,,,,,,,,,,,,0,0,,000_ 660,,,,,,,,,,,,,,,,,,,,,0,,,0066_ 600,,,,,,,,,,,,,,,,,,,,,,,,,0066_ 60,0,,,,,,,,,,,,,,,,,,,,,0006666_ 60,0,,,,,,,,,,,,,,,,,,,,,0666666_ 600,,,,,,,,,,,,,,,,,,,,,,0666666_ 600,,,,,,,,,,,,,,,,,,,,,,0666666_ 60,0,,,,,,,,,,,,,,,,,,,,,0666666_ 6600,,,,,,,,,,,,,,,,,,,006666666_ 66600,,,,,,,,,,,,,,,000666666666_ 66666000000000000000666666666666_ " , # xpmtoiim -c1 printer.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666000000000000000000066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,,,,,,,,,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,J,JJ,JJ,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,JJ,JJ,J,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,JJJ,JJJ,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,JJJJJ,J,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,JJJ,JJJ,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 666660,1,,,,,,,,,,,,,1,066666666_ 666660,,,,,,,,,,,,,,,,,066666666_ 00000000000000000000000000000000_ 01101111111111111111111110110330_ 00000000000000000000000000000330_ 03303333333333333333333330330330_ 03300000000000000000000000330330_ 03333333333333333333333333330330_ 00000000000000000000000000000330_ 04444444444444444444444444440000_ 044A4444444444444444444444440666_ 044F4444444444444444444444440666_ 04444444444444444444444444440666_ 00000000000000000000000000000666_ " , # xpmtoiim -c1 printer_edit.xpm "32,c1,_ 66666666666666666666666666666666_ 66660000000000000000066666666666_ 66660666666666666666006666666666_ 66660666666666666666030666666666_ 66660666666666666666033066666666_ 66660666666666666666033306666666_ 66660666660000000666000000666666_ 66660666660666663066633330666666_ 66660666660666663306666660666666_ 66660666660666660006666660666666_ 66660666660666666606666660666666_ 666606666606666666066666= qh VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1%60666666_ 66660666660666666600000060666666_ 666606660000000000BBBBBB00666666_ 66660666033333330BccccccB0666666_ 6666066603333330Bc00cccccB066666_ 666606660333330000,,0cccccB06666_ 666606660000000BB00000000ccB0www_ 666606666666660ccB00BBBBBcccBwww_ 6666066666666660ccBBcccccccccwww_ 00000666666666660ccccccccccccwww_ 1000066666666666600ccccccccccwww_ 133006666666666666600000000ccwww_ 13300666666666666666666660300www_ 13300000000000000000000000330www_ 13333333333333333333333333330110_ 44444444444444444444444444440000_ 43333333333333333333333333330000_ 4333333333333333333333333A330666_ 4333333333333333333333333F330666_ 43333333333333333333333333330666_ 00000000000000000000000000000666_ " , # xpmtoiim -c1 printout.xpm "32,c1,_ 66666666666666666666666666666666_ 66666600000000000000000000000666_ 66666066666666666666666666603366_ 66660606,,,,,,,,,,,,,,,606033666_ 6660666,,33,33333333,,6660336666_ 660606,,,,,,,,,,,,,,,60603366666_ 60666666666666666666666033666666_ 60000000000000000000000336666666_ 60666666666666666666666036666666_ 660606,,,,,,,,,,,,,,,60603666666_ 6660666,,33,333333,3,,6660366666_ 66660606,,,,,,,,,,,,,,,606036666_ 66666066666666666666666666603666_ 66666600000000000000000000003366_ 66666066666666666666666666603366_ 66660606,,,,,,,,,,,,,,,606033666_ 6660666,,3,333,3333,,,6660336666_ 660606,,,,,,,,,,,,,,,60603366666_ 60666666666666666666666033666666_ 60000000000000000000000336666666_ 60666666666666666666666036666666_ 660606,,,,,,,,,,,,,,,60603666666_ 6660666,,3,333,3333,,,6660366666_ 66660606,,,,,,,,,,,,,,,606036666_ 66666066666666666666666666603666_ 66666600000000000000000000000366_ 66666663333333333333333333333336_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 prism.xpm "32,c1,_ 00000000000000000000000000000000_ 01666666666666666666666666666660_ 06666666666666666666666666666660_ 061661666666666666666666666666J0_ 06666366666666666666666666666JJ0_ 0A61666666666666666666666666JJJ0_ 0A6666666666666666666666666LJJJ0_ 0AA66666666666666666666666JLJJJ0_ 0oA%633666666666666666666JLJ8JJ0_ 0FnA66666663666666666666LLJLJ8J0_ 0FFAA666663136666666666LLLLJ8JJ0_ 0JFFA66663313366666666LLLL88JiJ0_ 0JJFoA663331433666666LLL8L8JiJJ0_ 06JJFnA3333143336666LLLL888iJiJ0_ 006J1FAA33314333366ALLL8L8iiiJi0_ 0666J0Fn3331334336ALAL8L888iiiJ0_ 06066JFnA33134433AAALA8888iHiii0_ 06666iJFA3313433AAAAA8L8c8ciHiH0_ 0666631JFA31343AAAAAAA8c8cHHiHi0_ 06666131J33143AAAAAAABBCccHcHHH0_ 0666613333111AAAAAAAABBDDHcHHHH0_ 066631333133313AAAAABBBDcDHDH3H0_ 06661333136663343AABBBCDDcD33H30_ 0666133136666631333BBCDDDD333330_ 066613136666666313366CDDD3D33FF0_ 0663313666666666311666663D33FFF0_ 066113666666666663166666663FFFS0_ 0661133333333333331666666666FSS0_ 066111311131113111366666666666S0_ 06666666666666666666666666666660_ 06666666666666666666666666666660_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 pyramid.xpm "32,c1,_ 00000000000303030000000303303000_ 00000003003000000030000000033003_ 00000000000000300000300300303333_ 000000030003000,0000000030030033_ 300000003030030,0D00000000000000_ 00000030000000,,,003000030000000_ 00030000030000,,,0D0003000300033_ 0000000030000,,,,,03000033030300_ 000000003300,,,,,,0D300000330030_ 000000000000,,,,,,,0D03000000000_ 00000000000,,,,,,,,03D0000033330_ 00000300030,,,,,,,,,03D003000030_ 0000000000,,,,,,,,,,0D3D00000003_ 0000330000,,,,,,,,,,,0D3D0303030_ 000000000,,,,,,,,,,,,03D30030033_ 030003300,,,,,,,,,,,,,03D3000000_ 03033030,,,,,,,,,,,,,,0D3D300000_ 0000000,,,,,,,,,,,,,,,,0D3D30033_ 0000300,,,,,,,,,,,,,,,,03D3D3033_ 000000,,,,,,,,,,,,,,,,,,03D3D300_ 000030,,,,,,,,,,,,,,,,,,0D3D3D03_ 00000,,,,,,,,,,,,,,,,,,,03D3D000_ 00300,,,,,,,,,,,,,,,,,,,,03D3003_ 0000,,,,,,,,,,,,,,,,,,,,,0D30033_ 3000,,,,,,,,,,,,,,,,,,,,,,0D0003_ 000,,,,,,,,,,,,,,,,,,,,,,,003003_ 00000000000000000000000000003003_ 00000000030000300000030000030030_ 03300000030000330300000000003003_ 03000000000330000300300003003333_ 03000003000030003003033003300000_ 00000000000000000030300333300000_ " , # xpmtoiim -c1 rabbit_add.xpm "32,c1,_ HHHHHHH33HHHHHH33HHHHHH666666HHH_ HHHHHHH333HHHH333HHHHH66606666HH_ HHHHHHH3833HH3383HHHH6666066666H_ HHHHHHH338333383HHHHH66660666666_ HHHHHHHH3383383HHHHHH66660660666_ HHHHHHHHH338833HHHHHH66666600066_ HHHHHHHHHHH33HHHHHHHH66666660666_ HHHHHHHHHH3333HHHHHHH66600066666_ HHHHHHHHH333333HHHHHH66666066666_ HHHHHHHH33333333HHHHH66666066666_ HHHHHHH3366336633HHHH66600006666_ HHHH0HH3360330633HH0H66666666666_ HHHHH0H3333333333H0H660000000066_ HHHHH6066688866600H6666666666666_ HHHHH06006000600660H666600066666_ HHHHH06660606066660H666666066666_ HHHHH06660606066660HH6666006666H_ HHHHHH066000006600HHHH66660666HH_ HHHHHHH006666600HHHHHH6600066HHH_ HHHHHHHHH06660HHHHHHHHH666666HHH_ HHHHHHAAAH060HAAAHHHHHH66666HHHH_ HHHHHHAAAH060HAAAHHHHHHHHHHHHHHH_ HHHHHHHAAAAAAAAAHHHHHHHHHHHHHHHH_ HHHHHHAAAAAAAAAAAHHHHHHHHHHHHHHH_ HHHHHHAAA00600AAAHHHHHHHHHHHHHHH_ HHHHHHH000666000HHHHHHHHHHHHHHHH_ HHHHHH00066066000HHHHHHHHHHHHHHH_ HHH00000066666000000HHHHHHHHHHHH_ HH0000000660660000000HHHHHHHHHHH_ H000000006666600000000HHHHHHHHHH_ 00000000666066600000000HHHHHHHHH_ 0000H0006666666000H0000HHHHHHHHH_ " , # xpmtoiim -c1 radar.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666600006666666666666666666666_ 66666066660066666666666666666666_ 66666061116600666666666666666666_ 66666011111166066666660016666666_ 66666001111111606666606106666666_ 66666001111111160666061106666666_ 66666010111111116060000066666666_ 66666010111111111600666666666666_ 66666011011111111000666666666666_ 66666601001111110016066666666666_ 66666601100111100111606666666666_ 66666601130011001111160666666666_ 66666660133000011111116066666666_ 66666660133300111111111606666666_ 66666660113330011111111160666666_ 66666666013333001111111160666666_ 66666600013333300111111116066666_ 66666013003333330011111111606666_ 66666013300333333001111111606666_ 66666011330033333300111111160666_ 66666601333000333333001111160666_ 66666660133330000333330011660666_ 66666666011333066000000000006666_ 66666666601113306666666666666666_ 66666666660111110666666666666666_ 66666666666011111066666666666666_ 66666660000000000000000066666666_ 66666601111111111111111106666666_ 66666011333333333333333330666666_ 66666600000000000000000006666666_ " , # xpmtoiim -c1 rain.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666633333366666666666666_ 66666666666361616136666666666666_ 66666666333616161113666666666666_ 66666663616361613111366666666666_ 66666636161116331111366666666666_ 66666361611111111111366666666666_ 66666316111111111113666666666666_ 66666361133311111133666666666666_ 66666636311113313311366666666666_ 66666663611111131111136666666666_ 66666636113311113111136666666666_ 66666361631111111111136666666666_ 66666316311111111111333666666666_ 66633361311311111113111366666666_ 66316131111311113131111366666666_ 66361613111133111111111366666666_ 66316161111111111111111366666666_ 66633333333333333333333666666666_ 6666J66J66J66J66J66J666666666666_ 66666J66J66J66J66J66J66666666666_ 666666J66J66J66J66J66J6666666666_ 6666666J66J66J66J66J66J666666666_ 66666666J66J66J66J66J66J66666666_ 666666666J66J66J66J66J66J6666666_ 6666666666J66J66J66J66J66J666666_ 66666666666J66J66J66J66J66J66666_ 666666666666J66J66J66J66J66J6666_ 6666666666666J66J66J66J66J66J666_ 66666666666666J66J66J66J66J66J66_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 registar.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666660000000000006666666666666_ 66666601111111111110066666666666_ 6666601>D`gaiXu_t7I;&~ ^kP!%*_]M^\-(${}_p"L%db\Sl xT"=^:YU>LD}p[s^sYrXsX &d}

<3MOI7Do x5ql7Qyl9& &hQigdc(6NjL1X*pyYYVmZ\*[cZP HniPn#KKam>TUU?1 hm{SfXl"Wz>`u^ r u;coenCx 8yd $f aP%L?Ae w'&rib;~Y+9RN0HE>}g2 pJKLEZw! thl;YUU9mR%RgL&LKJODw\w! jb+U+9plmVs,g2XQmlJMM)[rw%qKf`0BLxR , O dJj=J\V):$j4-AMNREUm-Dz$&f0mnGVaQ'qmm>jM;9S-StzV.PBh@yCD^ HRS-3rp#i:5CmAj)Wp}V.MgO K$GTNOSF1 xBDEC**sVPVKf2o/\>o.JJ.Em/zmFk@f>W) |#X#PHgKo)QKXBOUDo--iBoDd<St"Z$7Hl,$6Yyy+<h>Wx#-Qt+'$6=p\^YyB ZV&Y=-*W`m6+'B`Ha\2&?kDrP }}eHyz%7nRBi7UJ*[ w <yh@hu|LN0KH2?BV3#e71LT]qtqj>;TT:kC&() OE%kkr*>)qm8]EIiQm&V;TV;T>h;\V& zP#&Lk)G~lSOJPSM,whx([,^SD@|g7b,,73O|")>3LG03 X`Y303;]1yg2g,)EEk;y5DPG)/)\*,xW$+2Hj>6ATn<;hoS9Yzrq(,G~x{n#>u).```}Zt'L#.rq>sks~GGGtW>u3.fffH&Z#r 2w*!{~~t9Iu}A_f||gH||sc#wqr?xq J'}}ORtv|C^ }}`Jw%m{ule* %R##^pu?V rG@nGc!AT^yVD _519G\ ?'2=D@;a3}9-F=AvWxlIv)4vs:s{{yVS#*uuuva4(|,&+DNpn)2ui< }x /v}v b;[#R4tNq^5 xDxytqa_Wy~hW# vCxsk6q_FjjDx .+< R%ZUA *&Yj"U2>poZD q${qtS t &3f 5s{>j$6TA-F{$JJ-r{i7q2`teU3GO|j{ca?)PKr Tx~5X/^1 ""CO~p8 ~ m2 Nq~:rF |R l9S`OpI Eya? ;D x 9yzhCaaUl8s~f2 zN  J{~ KyhEyyFzH~x Dx`$xx Ix K ~zhF|zFy~B ~A,qPd~5I l3)a='"=l40WFl^yeLl@1({W $;Zzf=,!W*@N:vsvTn%p jE Cf6SB h={y` ^ y-fii 9%LZ]x/5[lX BqFfzy@tgiuv!!'kBDf,/X &|`p@|`gY{j}tjr#%#LFFy)+D;&`acp[`~)ggjh*j, &hC_ 3*E`~H|}lG c5 {kEt5&OEFy)*R]y]36jAi."%M#5g,&N>R:2O+d?b5|7wMVY+ `pljnphtrntdLayc i s u<j! 0x~hjhrhhtUaw~xxxGXbbaF`AOwwqn9h?uj;}}{aO Zdg]cF8n9k3V]PDn.R,,HH]2w]5N7X|1]BSSlEo9Vx;R,/*HR"E q"552*~Z|>z$zO9BkM~.Gid# ?x"#U Ex_K^C89^Bml /lB>"/+x=TvIc 'Xzcr~Ehq;{?-H '0.Wcq %1 sJJU;c.nOL uI6jlSo+x6ymVPJ[3>R$G!k;;U8?GG?UA9=@dX6y1%a]aleq:HN'r75ljWmm`5g a 45H! 8,<'@%k>L%w><9P|l=S:nMrn~apG?MU?DjlFPW.]a\ |L [(-<U'h'DiHy'}t 'S P7?GCSipvb^  %.fB5-BDlAyAj?qqrCB+ qq1 bLL #{3D\zDAjlUwCEY09j*BUPPD?(X/7fX:][]]%$>$wF, cDj9~:lg[/D(f[:4wvwmu$;''G #S:iUPPD#(G/4fX:v#v$woM=Tn{{5}UUFMQY%p9lM;Twp)|cXR(k lRULuuE-'R f`2#R=SAePBVPN+Nr a [ssO%s&`wKil[##f67sy|uElxG#5ZL_ 6N?712o=y Yf C*|QzCkSjo&'mhD=zrt1sfbGj'E({i<gH1>ITq"A^* ,=99#-  bv$mh=ndbgN:oD`$P!=T2>8mp$27 bh$mEP42#p2>"BB } `5z3 }}lN w=SDxcD(Qyw. %Cd^%s4UmzFiP|F;Yy{"!FQk4Y$\paogm$S<vhM { 5?4!nbY|e;'ercatwUU:vvM}-}0DO4e a/,Tt@[wqo""KpMq(}t JB C [73dQMANfv#%J:tvBAkfEz;Vh#'{.z;fKwi&:8[D7 7X5BBQy8& #oo(#afH7FKa*ArQq}GYpp"D"wVy)~S{%AchnDqs"}a(hSYvpPN&Vq _ 9,X*Oc8VqqA}!S:p"<$s~veje}BzwS a=pSYcpTLTqVOpZe-cu$Jvtv7a{PpoSYecG_d&}^l2L =~TN<hw%!RZ8vW~YY0,[jM)u?1\{_s9N>CtX IohPH`;n&pj^//^DDB-PwJX\;cjVHtr9"'iD.x( ( (/@(4Z$3{NNrP?l?UtUHy(44 5`..^,JPHHt!NttNv 3DiDDXX7"* +h!Hl9'?mItU=!~r/:=nn!NNt!9kO%RS#> V?~o}| gbN SR{S94 qV[Pm71?Ev9juSUKKw"MqpL>Plllpp&jllmmsSU:o:":nL"Kvjlt!jjjkmqMQ>k>":hJiU t!jko:&IIuoSKvvMQQWiS&kvjt!jnnnqKK>k>&8RkN'njikksOO:s&RU;lUVQwqsWkOVlt=9:89!t=tTWURU=lUax+ &I =:8:t=SoQSRU;hSr7WQm>WI!<>h==TThWSRS:hViZaa!ra4NQmVqw""KWiw"IHI&tJLj:|T=nRH]?'oqqq""_"MS:FK;A ]'f_ rs_mknt:x=AU.|u"lprS%uIMM2+9&"#xGWWF K8pJJ%w1XqL#vL:zJ{B\ ZCC L"vLL# 0YvJ#vLE"_cFF "qMM" 1XqM$qKc.#rThhAA vIu\`\qM$qK^lgeee39 YpeeY]mM\P3y(oT:hU+dCWoniyb_XkXe; I|W l> 5sr xv.{jj 2NTAyyu(1>K5"7 V ST6sU:R=Vjiiij(}AAA$}NhhuRnR#KakUg \FN;hRh=RK5P;Q=:mLM7Q-^mQ2 _~k;nh>M1R:h>#aadb Xdabf !`8mWW;kUQfmT?lL( |#:hRa\jjLD0 (V4x1$Er`U6y7Upel|JI$:$ppUIjMhQ?oTt`l c]^.`j]$1=a{O&tROiWWhV>jqvfjVf][(*8]HO&rOIMdc2!_hvHc~?]dV_+|9X1/~h7(VUucoRUC~xR{ $VA?"\hC^ P. hT/C~x (g' GX=7Gcc)zrcUVufT/C~.(XKfZD^/V_j-qDZTeg0i  f0-=z| P0& ::Jl:ueE'AUDs4xE#3%'f7rG:~k PIm!^a&GUtMP,*d9"f/15|jT\^.:;B.Xt4r'Le,rnqXnA3/jY9%?6y6_htR6tq8 !zu/3v9%C_2g2c_rreEvePga$p_IUO< m"m"n&K+ $BX>7~QDyJ,6EYyeye ,y- s~ThkUs: iU 'OI&o& &U3~i9@C+iNP!}hc~oxNO%I}6 L+dXRjO[3  t:SR==I&l!tht<='n=;uE;~OD~dbb 9c"l_eb*Ny *Y=C1 xwwral]gQ?4PgP1U1oI^o 'bX>@bx{?}Kr{9P(2J4I7^7D:Xb1O7Ixg}mAx VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1 # xpmtoiim -c1 rubics_cube.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666600000000000000000006666_ 666666660,,,,0JJJJJ0AAAAAA006666_ 66666660000000000000000000A06666_ 6666660JJJJJ0AAAAA0,,,,,00A06666_ 666660000000000000000000J0A06666_ 66660AAAAA0,,,,,0JJJJJ00J0A06666_ 6660000000000000000000,0J0A06666_ 6660JJJJJ0JJJJJ0AAAAA0,0J0A06666_ 6660JJJJJ0JJJJJ0AAAAA0,0J0006666_ 6660JJJJJ0JJJJJ0AAAAA0,000,06666_ 6660JJJJJ0JJJJJ0AAAAA0,0A0,06666_ 6660JJJJJ0JJJJJ0AAAAA000A0,06666_ 6660000000000000000000J0A0,06666_ 6660,,,,,0AAAAA0,,,,,0J0A0,06666_ 6660,,,,,0AAAAA0,,,,,0J0A0006666_ 6660,,,,,0AAAAA0,,,,,0J000J06666_ 6660,,,,,0AAAAA0,,,,,0J0,0J06666_ 6660,,,,,0AAAAA0,,,,,000,0J06666_ 6660000000000000000000A0,0J06666_ 6660AAAAA0,,,,,0JJJJJ0A0,0066666_ 6660AAAAA0,,,,,0JJJJJ0A0,0666666_ 6660AAAAA0,,,,,0JJJJJ0A006666666_ 6660AAAAA0,,,,,0JJJJJ0A066666666_ 6660AAAAA0,,,,,0JJJJJ00666666666_ 66600000000000000000006666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 rulers.xpm "32,c1,_ 66666666666666666666666666666666_ 6666666666666666666cc66666666666_ 666666666666666666cBBc6666666666_ 66666666666666666cBBBBc666666666_ 6666666666666666cBBBBBBc66666666_ 666666666666666cBBBBBBBBB6666666_ 66666666666666cBBBBB0BBBo6666666_ 6666666666666cBBBBBBB0Bo666,6666_ 666666666666cBBBBBBBBBo666,3,666_ 66666666666cBBBBBBBBBo666,333,66_ 6666666666cBBBBBBBBBo666,30333,6_ 666666666cBBBBB0BBBo666,33303333_ 66666666cBBBBBBB0Bo666,303333330_ 6666666cBBBBBBBBBo666,3333333330_ 666666cBBBBBBBBBo666,30333333306_ 66666cBBBBBBBBBo666,333033333066_ 6666cBBBBB0BBBo666,3033333330666_ 666cBBBBBBB0Bo666,33333333306666_ 66cBBBBBBBBBo666,303333333066666_ 6cBBBBBBBBBo666,3330333330666666_ BBBBBBBBBBo666,30333333306666666_ 6oBBB0BBBo666,333333333066666666_ 66oBBB0Bo666,3033333330666666666_ 666oBBBo666,33303333306666666666_ 6666oBo666,303333333066666666666_ 66666o666,3333333330666666666666_ 66666666,30333333306666666666666_ 66666666333033333066666666666666_ 66666666603333330666666666666666_ 66666666660333306666666666666666_ 66666666666033066666666666666666_ 66666666666600666666666666666666_ " , # xpmtoiim -c1 safe.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666600000000000000000066666_ 66666666061111111111111113006666_ 66666660611111111111111130306666_ 66666606111111111111111303306666_ 66666000000000000000000033306666_ 66666066666666666666661033306666_ 66666060111011110111013033306666_ 66666061111111111111113033306666_ 66666061111100001111113033306666_ 66666061111006600111113033306666_ 66666061110660066011003033306666_ 66666061100603306001013033306666_ 66666061106033330601013033306666_ 66666061106033330601013033306666_ 66666061100603306001013033306666_ 66666061110660066011013033306666_ 66666061111006600111003033306666_ 66666061111100001111113033306666_ 66666061111111111111113033306666_ 66666061111111111111113033306666_ 66666061111111111111113033066666_ 66666060111011110111013030666666_ 66666013333333333333333006666666_ 66666000000000000000000066666666_ 66666660306666666660306666666666_ 66666660306666666660306666666666_ 66666660006666666660006666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 select.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666000066_ 66666666666666666666600000BBBB06_ 666666666666666666000BBBBBccccB0_ 666666666666666660BBBcccccccccc0_ 666666666666666660Bcccccccccccc0_ 66666666666666660Bccc0ccccccccc0_ 66666666666666660Bc000c0cccccc06_ 6666666666666660Bcc0B00Bccccc066_ 6666666666666660Bc00c00Bcccc0666_ 666666666666660Bc000c0Bccc006666_ 666666666666660Bc0B00Bccc0F06666_ 66666666666660Bc0B000Bc00FFF0666_ 00000000000000B00000Bc0FFFFF0666_ 0AAAAAAAAAAA0B00FFF0B0FFFFFFF066_ 0AAAAAAAAAAA000FFFF00FFFFFFFF066_ 000000000000FFFFFFFFFFFFFFFFFF06_ 0%%%%%%%%0FFFFFFFFFFFFFFFFFFFF06_ 0%%%%%%A%%0FF0000000000000000000_ 0%%%%%%A%%0FF0JJJJJJJJJJJJJJJJJ0_ 0%%AAA%AAA%0F0JJJJJJJJJJJJJJJJJ0_ 0%A%%A%A%%A0F0000000000000000000_ 0%A%%A%A%%A%00HH0HH0HH0HH0HH0HH0_ 0%%AAA%AAA%%00HH0HH0HH0HH0HH0HH0_ 0%%%%%%%%%%%%0000000000000000000_ 00000000000000HH0HH0HH0HH0HH0HH0_ 66666666666660HH0HH0HH0HH0HH0HH0_ 66666666666660000000000000000000_ 66666666666660HH0HH0HH0HH0HH0HH0_ 66666666666660HH0HH0HH0HH0HH0HH0_ 66666666666660000000000000000000_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 shading.xpm "32,c1,_ AAAAAAAAAAAAAA,A,A,A,A,A,A,A,,,A_ AAAAA,AAA,A,A,A,A,A,A,,,A,,,,,,,_ AAAAAAAAAAAA,AAA,A,A,A,A,A,,,A,,_ AAA,A,A,A,A,A,A,A,A,,,,,,,,,,,,,_ AAAAAAAAAAAAAA,A,A,A,A,A,A,A,,,A_ AAAAA,A,A,A,A,A,A,,,A,,,,,,,,,,,_ AAAAAAAA,AAA,AAA,A,A,A,A,A,A,A,,_ AAA,A,A,A,A,A,A,A,A,,,,,,,,,,,,,_ AAAAAAA3AAAAAA,3AA,A,A,3,A,A,,,3_ AAAAA,AAA,A,A,A,A,A,A,,,A,,,,,,,_ AAAAAAAAAAAA,AAA,A,A,A,A,A,A,A,,_ AAA,A,A,A,A,A,A,A,A,,,,,,,,,,,,,_ AAA3AAA3AAA3AA,3,A,3,A,3,A,3,A,3_ AAAAA,AAA,A,A,A,A,A,A,,,A,,,,,,,_ AAAAAAAA,AAA,AAA,A,A,A,A,A,A,A,,_ AAA,A,A,A,A,A,A,A,A,,,A,,,,,,,,,_ AAA3AAA3AAA3AA,3AA,3,A,3,A,3,,,3_ AAAAA,AAA,A,A,A,A,A,A,,,A,,,,,,,_ A3AAA3AAA3AA,3AA,3,A,3,A,3,A,3,A_ AAA,A,A,A,A,A,A,A,A,,,A,,,,,,,,,_ AAADAAA3AAADAAA3AA,D,A,3,A,D,A,3_ AAAAA,AAA,A,A,A,A,A,A,,,A,,,,,,,_ A3AAA3AAA3AA,3AA,3,A,3,A,3,A,3,,_ AAA,AAA,A,A,A,A,A,A,A,A,,,,,,,,,_ A3A3AAADA3A3AAADA3,3,A,D,3,3,A,D_ AAAAA,AAA,A,A,A,A,A,A,,,A,,,,,,,_ A3AAA3AAA3AA,3AA,3,A,3,A,3,A,3,A_ AAA,A,A,A,A,A,A,A,A,A,A,,,A,,,,,_ AAADA3A3AAADA3A3AA,D,3,3,A,D,3,3_ AAAAA,AAA,A,A,A,A,A,A,A,A,,,,,,,_ A3AAA3AAA3AA,3AA,3,A,3,A,3,A,3,A_ AAA,AAA,A,A,A,A,A,A,A,A,,,,,,,,,_ " , # xpmtoiim -c1 simcity.xpm "32,c1,_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJ6666JJJJJJJJJJJJJJJJJJJJJJ_ JJJJJ666666JJJJJJJJJJJJJJJJJJJJJ_ JJJJ66111666JJJJJJJJJJJJJJJJJJJJ_ JJJJ66116666JJJJJJJJJJJJJJJJJJJJ_ JJJJ66666116JJJJJJJJJJJJJJJJJJJJ_ JJJJ66661116JJJJJJJJJJJJJJJJJJJJ_ JJJJJ666116JJJJJJJJJJJJJJJJJJJJJ_ JJJJJJ6666JJJJJJJJJJJJJJJJJJJJJJ_ JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ00J_ JJJJJJJJJJJJJJJJJJ00JJJJJJJJJ00J_ JJJJJJJJJJJJJJJJJJ00JJJJJ0JJJ00J_ JJJJJJJJJJ00JJJJJJ00JJJJJ0JJJ00J_ JJJJJJJJJJ00JJJJJJ00JJJJ00JJJ000_ JJ000JJJJJ00JJJJJJ00JJJ000JJJ00,_ JJ003JJJJJ,0JJ0J0J00000000JJJ000_ JJ330JJJJJ00JJ0J0J000000000J0000_ JJ003JJJJJ0,JJ0J0J0,00000000,00,_ JJ003000JJ00J0000J00000000000000_ JJ000000JJ00J0,00J00000000000000_ JJ3000,0JJ0,J0000J0000000000,000_ JJ00,000JJ00J0000J000,00,000000,_ 000000000000J00,0000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 simcity2.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666000000_ 666666666666666666666666660AAAAA_ 666666666666666666666666660AAAAA_ 000000066666666666666666660AAAAA_ JJJJJJ066666666666666666660AAAAA_ 000000066666666666666666660AAAAA_ JJJJJ0666666666666666666660AAAAA_ JJJJJ066666666660000000000000000_ JJJJJ066666666660AAAAAAAAAAAAAAA_ 000JJ0666666666600AA0000AA0000AA_ DD0JJ0666666666660AA0DD0AA0DD0AA_ 000JJ0000000066660AA0D00AA00D0AA_ DD0JJ0HHHHHH066660AA0000AA0000AA_ 000JJ0HHHHHH000000AAAAAAAAAAAAAA_ DD0JJ0HHHHHHHHHHH0AA0000AA0000AA_ 000JJ0HHHHHHHHHHH0AA0D00AA00D0AA_ JJJJJ0H00000HHHHH0AA0DD0AA0DD0AA_ JJJJJ0H0D0D0HHHHH0AA0000AA0000AA_ JJJJJ0H00000HHHHH0AAAAAAAAAAAAAA_ JJJJJ0H0D0D0HHHHH0AAAAAAAAAAAAAA_ JJJJJ0H00000HHHHH0AAAAAAAAAAAAAA_ JJJJJ0HHHHHHHHHHH0AA$ VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1A0000000AAAAA_ JJJJJ0HHHHHHHHHHH0AA0DD0DD0AAAAA_ JJJJJ0HHHHHHHHHHH0AA0D0D0D0AAAAA_ 000JJ0HHHH0000HHH0AA0000000AAAAA_ OO0JJ0HHHH0OO0HHH0AAAAAAAAAAAAAA_ OO0JJ0HHHH0O00HHH0AAAAAAAAAAAAAA_ 00000000000000000000000000000000_ " , # xpmtoiim -c1 snoopy.xpm "32,c1,_ HHHHHHHHHHHHHHHHHHHHHHHHH0,,,,,,_ HHHHHHHHHHHHHHHHHHHHH00000,,,,,,_ HHHHHHHHHHHHHHHHHHHHHHHHH00,,,,,_ HHHHHHHHHHHHHHHHHHHHHHHHHH0,,,,,_ HHHHHHHHHHHHHHHHHHHHHHHHH000,,,,_ HHHHHHHHHHHHHHHHHHHHHHHH0HH00,,,_ HHHHHHHH00HHHHHHHHHHHHH0HHH0H000_ HHHHHHH0000HHHHHHHHHHHHHHHH0HH0H_ HHHHHH066660HHHHHHHHHHHHHH0HHH0H_ HHHHH06666660HHHHHHHHHHHHHHHHH0H_ HHHHH06666660HHHHHHHHHHHHHHHHH0H_ HHHHH06666660HHHH000HHHHH00HHHHH_ HHHHHH066660HHHH06660HHH0660HHHH_ HHH0HH066660HHH0666660HH0600HHHH_ HHHH0066660HHH06666660HH0660HHHH_ HHHH06066600H066666660HH0660HHHH_ HHHH066666000666666660000660HHHH_ HHHH066666606000006666666660HHHH_ HHHHH00066606666660666666660HHHH_ HHH00000000000006600000000000HHH_ HHH0A000AAAAAAAA00AAAAAAAAAA0HHH_ HHH0A0000AAAAAAAAAAAAAAAAAAA0HHH_ HHH0A0000AAAAAAAAAAAAAAAAAAA0HHH_ HH0AA0000AAAAAAAAAAAAAAAAAAAA0HH_ HH0000000000000000000000000000HH_ HH0AA0000AAAAAAAAAAAAAAAAAAAA0HH_ H0AAA0000AAAAAAAAAAAAAAAAAAAAA0H_ H0AAAA00AAAAAAAAAAAAAAAAAAAAAA0H_ H0AAAAAAAAAAAAAAAAAAAAAAAAAAAA0H_ 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0_ 00000000000000000000000000000000_ 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0_ " , # xpmtoiim -c1 space_ship.xpm "32,c1,_ 66666666666666666666666666666666_ 60000000000000000000000000000006_ 60000000000000000000000000000006_ 60000000000000000000001000010006_ 60000000000000000000016100000006_ 60000000000100000000001000000006_ 60010000000000000000000000000006_ 60000000000000000000000000000006_ 60000000000000000000000000000006_ 60000000000000063000000000000006_ 60000066000000133000000000000006_ 6000111H600001333000000000000006_ 60000000061013333000000000000006_ 60000300000111333000000000000006_ 60000033000000113000000000000006_ 60000000300000001111111110000006_ 60000013030000000000003300000006_ 60000130303000000000330000001006_ 60001303030300000003000000000006_ 60013030303030000030000000000006_ 60030303030303000300000000000006_ 600000000000003003A0000000000006_ 60000000000000033,AA000000000006_ 6J0000000000000AAA,AA00000000006_ 6JJ0000000000000AA,,AA0000000006_ 6HJJ0000000000000AA,,A0000000006_ 6HHJJ0000000100000AA,,,000000006_ 6HHHJJ00000000000000AA,A00000006_ 6HHHHJJ000000000000000A,A0000006_ 6HDHHHJJ00000000000000AA,,000006_ 6HHDHHHJJ000000000000000AAA00006_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 sparc.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66JJJ66JJJJ666JJ6666JJJJ666JJJ66_ 66JJJ66JJJJ666JJ6666JJJJ666JJJ66_ 66JJJJ6JJJJ666JJ6666JJJJ666JJJJ6_ 66JJJJ6JJJJ666JJ6666JJJJ666JJJJ6_ 6J666J6J666J66J6J666J666J6JJ6666_ 6J666J6J666J66J6J666J666J6JJ6666_ 6J66666J666J66J6J666J666J6J66666_ 6J66666J666J66J6J666J666J6J66666_ 66JJJ66J666J6J66JJ66J666J6J66666_ 66JJJ66J666J6J66JJ66J666J6J66666_ 66JJJ66JJJJ66J66JJ66JJJJ66J66666_ 66JJJ66JJJJ66J66JJ66JJJJ66J66666_ 66666J6JJJJ66J666J66JJJJ66J66666_ 66666J6JJJJ66J666J66JJJJ66J66666_ 6J666J6J66666J666J66J66J66JJ6666_ 6J666J6J66666J666J66J66J66JJ6666_ 6JJJJ66J6666J66666J6J666J66JJJJ6_ 6JJJJ66J6666J66666J6J666J66JJJJ6_ 66JJJ66J6666J6AAAAJ6J666J66JJJJ6_ 66JJJ66J6666J6AAAAJ6J666J66JJJJ6_ 666666666666666AAA66666666666666_ 666666666666666AAA66666666666666_ 6666666666666666AA66666666666666_ 6666666666666666AA66666666666666_ 6666666666666666AA66666666666666_ 6666666666666666AA66666666666666_ 66666666666666666A66666666666666_ 66666666666666666A66666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 spreadsheet.xpm "32,c1,_ 66666606666666666666666666666666_ 66666606660066606600066606660066_ 66666606606606666660606666606606_ 66666606600006606660066606606666_ 66666606606606666660606666606606_ 66666606606606606600066606660066_ 66666606666666666666666666666666_ 00000000000000000000000000000000_ 6666660,,,,,,,,,,,,,,,,,,,,,,,,,_ 6600660,,,,,,,,0,,,,,,,,0,,,,,,,_ 6066060,,,,,,,,,,,,,,,,,,,,,,,,,_ 6066060,,,,,,,,0,,,,,,,,0,,,,,,,_ 6066060,,,,,,,,,,,,,,,,,,,,,,,,,_ 6600660,,,,,,,,0,,,,,,,,0,,,,,,,_ 6666660,,,,,,,,,,,,,,,,,,,,,,,,,_ 60606000,0,0,0,0,0,0,0,0,0,0,0,0_ 6666660,,,,,,,,,,,,,,,,,,,,,,,,,_ 6660660,,,,,,,,0,,,,,,,,0,,,,,,A_ 6600660,,,,,,,,,,,,,,,,,,,,,,,AA_ 6660660,,,,,,,,0,,,,,,,,0,,,,AAA_ 6660660,,,,,,,,,,,,,,,,,,,,,,,AA_ 6600060,,,,,,,,0,,,,,,,,0,,,,,,A_ 6666660,,,,,,,,,,,,,,,,,,,,,,,,,_ 60606000,0,0,0,0,0,0,0,0,0,0,0,0_ 6666660,,,,,,,,,,,,,,,,,,,,,,,,,_ 6600660,,,,,,,,0,,,,,,,,0,,,,,,,_ 6066060,,,,,,,,,,,,,,,,,,,,,,,,,_ 6660660,,,,,,,,0,,,,,,,,0,,,,,,,_ 6606660,,,,,,,,,,,,,,,,,,,,,,,,,_ 6000060,,,,,,,,0,,,,,,,,0,,,,,,,_ 6666660,,,,,,,,,,,,,,,,,,,,,,,,,_ 60606000,0,0,0,0,0,0,0,0,0,0,0,0_ " , # xpmtoiim -c1 sringe.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666066666_ 66666666666666666666666660606666_ 66666666666666666666666660660666_ 66666666666666666666666666011066_ 66666666666666666660066660103306_ 66666666666666666660606601010016_ 66666666666666666666060010361116_ 66666666666666666666066001666666_ 66666666666666666660601103666666_ 66666666666666666606610130366666_ 66666666666666666066113003036666_ 66666666666666660601130330036666_ 66666666666666606611303111116666_ 66666666666666060113031666666666_ 66666666666660661130316666666666_ 66666666666606011303166666666666_ 66666666666066113031666666666666_ 66666666660601130316666666666666_ 66666666606611303166666666666666_ 66666666060113031666666666666666_ 66666666006030316666666666666666_ 66666666010603166666666666666666_ 66666660100031666666666666666666_ 66666660033316666666666666666666_ 66666601111166666666666666666666_ 66666016666666666666666666666666_ 66660166666666666666666666666666_ 66601666666666666666666666666666_ 66016666666666666666666666666666_ 60166666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 stack.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666000006666666666666666_ 666666666660FFF00066666666666666_ 66666666660FFFFFF000000000666666_ 66666666660FFFFFFFFFFFFFF0000666_ 6666666660FFFFFFFFFFFFFFFFFFF006_ 6666666660FFFFFFFFFFFFFFFFFFFF06_ 6666666660FFFFFFFFFFFFFFFFFFFF06_ 666666660FFFFFFFFFFFFFFFFFFFFF06_ 666666660FFFFFFFFFFFFFFFFFFFF006_ 66666660FFFFFFFFFFFFFFFFFFFFF006_ 66666660FFFFFFFFFFFFFFFFFFFFF006_ 6666660FFFFFFFFFFFFFFFFFFFFF0006_ 6666660FFFFFFFFFFFFFFFFFFFFF0006_ 6666600FFFFFFFFFFFFFFFFFFFFF0006_ 666660FFFFFFFFFFFFFFFFFFFFF00006_ 666600FFFFFFFFFFFFFFFFFFFFF00006_ 66660FFFFFFFFFFFFFFFFFFFFFF00006_ 6666000FFFFFFFFFFFFFFFFFFF000066_ 666666600000000FFFFFFFFFFF000066_ 6666000666666660000FFFFFF0000066_ 66666660000000066660000000000666_ 66660006666666600006666660000666_ 66666660000000066660000000006666_ 66660006666666600006666660006666_ 66666660000000066660000000006666_ 66660006666666600006666660066666_ 66666660000000066660000000066666_ 66660006666666600006666660666666_ 66666660000000066660000000666666_ 66666666666666600006666660666666_ 66666666666666666660000006666666_ " , # xpmtoiim -c1 stars.xpm "32,c1,_ 000000,0000000000000A00000000000_ 00L0000000000000000ADA000000A000_ 000000000000000000AD,DA000000000_ 00000300000030000AD,6,DA00000000_ 000036300000000000AD,DA000000000_ 0000030000000000000ADA0000000030_ 00000000000000000000A00000D00000_ 00000000000000000000000000000000_ 00000000000030000000000000000000_ 0003000000000000000000000000H000_ 0000000H000000000J00003000000000_ 00000000000000000000000000030000_ 0000J00000000F000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000000000000_ 000000A0000000000000D00000000,00_ 00000A,A0000000000000000J0000000_ 000000A0000000300000000JHJ000000_ 0000000000000000000000JH6HJ000J0_ 0Bxtc VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1h0000000000000000000000JHJ000000_ 000000000J00000000F00000J0000000_ 00F0000000000H000000000000000000_ 00000000000000000000000000000000_ 00000000000000000000000003000000_ 00000000000000000H00000000000000_ 0A00000000F000000000000000003000_ 000000000F3F00000000000000000000_ 00000000F3,3F0000000000J00000000_ 000000000F3F00000000000000000000_ 000A000000F0000000A0000000000000_ 000000000000000000000000L0000080_ 0000000000000,000000000000000000_ " , # xpmtoiim -c1 static.xpm "32,c1,_ HLLJA668FF88686F0J6J6D66D6A68JA6_ DDDJ6866AA8336F668JF6DDDDDAJHJAA_ AJA6JFAFJ86A6F6FHHJH0H66ADD6H6AL_ L6A66JA6AAAAAH6L368JADAAADAJHHJA_ 6JAAJAFAA6HFFAAF0AF36DA6DL6J83H6_ AJAA6J,HJJ,66A6J68883JL86J330JAA_ LFAA6AF,FFDJFDFA6F6F6F,J8HAF0H6A_ A68JJ0AA6L6F6F63L,AF38F60A86HJAF_ FHAHJH6FLL3FFA6ADAAJ,6,6AH6J6JJF_ H6HHJAHH68A38A836AAA83A,6AA00F6F_ HH,H,A0FFHH830J3F,3H3,6FH66J6AA6_ 6,0HJDA6JJAFJ,636J6JD,3633A0F333_ H,FH1HLLFAL3J30HL30D083AJ30633J6_ 6FA,A3LLAA,3HALLHH,AD88A888086J6_ J66JJD,,LHDA66,36L0HHL6AL6636A66_ J888D6LDJD68AL,6ALL6DHHA6F63J66J_ 680,6H61A60636DJ0LLH6F,,JJF386FJ_ 6J6J6J6FFL6ALAF6FJAFJHFF0AFLHHDJ_ HD8D33A3A633LADFDAA,,H,JF638JJJ0_ J6JD3DA0HF066DDAL68,H,666D6LA6JA_ HAAD3HH3H6FDDDHHAHDHFF03JFFFAJ6D_ JA888363HFH6DD366D383L8FLAD66HJD_ JA0HJJ6JAFH6LDHDHHLAAAJFAAF6AJ0D_ 6FF,3DHJDDF6A3H,A066AJJ660DLA6A6_ JAAF868AJL6LA66AHH0LL86LL0FD0HAD_ 6JAJ83D6HF3JAJA8H36L6FF6FLFLH6AD_ HFH,HHH6AAAH6666636L666330LLJ6A6_ 0F6HF36F668FJAAFAFAL3336300066JD_ F6HH6F6A3FF,66A33,AJ0688L8J0HDJ6_ 0F6A8AAF6AH8A6AD66AAA6L,DHADAH,L_ AAA,,6AJ33JH6668JHA6LJF663333,33_ A6668866,JF6833HH6D33LLLF6F3H666_ " , # xpmtoiim -c1 stopsign.xpm "32,c1,_ 66666666660000000000006666666666_ 66666666606666666666660666666666_ 6666666606AAAAAAAAAAAA6066666666_ 666666606AAAAAAAAAAAAAA606666666_ 66666606AAAAAAAAAAAAAAAA60666666_ 6666606AAAAAAAAAAAAAAAAAA6066666_ 666606AAAAAAAAAAAAAAAAAAAA606666_ 66606AAAAAAAAAAAAAAAAAAAAAA60666_ 6606AAAAAAAAAAAAAAAAAAAAAAAA6066_ 606AAAAAAAAAAAAAAAAAAAAAAAAAA606_ 06AAA666AA66666AA666AA6666AAAA60_ 06AA6AAA6AAA6AAA6AAA6A6AAA6AAA60_ 06AA6AAAAAAA6AAA6AAA6A6AAA6AAA60_ 06AA6AAAAAAA6AAA6AAA6A6AAA6AAA60_ 06AAA6AAAAAA6AAA6AAA6A6AAA6AAA60_ 06AAAA6AAAAA6AAA6AAA6A6666AAAA60_ 06AAAAA6AAAA6AAA6AAA6A6AAAAAAA60_ 06AAAAAA6AAA6AAA6AAA6A6AAAAAAA60_ 06AAAAAA6AAA6AAA6AAA6A6AAAAAAA60_ 06AAAAAA6AAA6AAA6AAA6A6AAAAAAA60_ 06AA6AAA6AAA6AAA6AAA6A6AAAAAAA60_ 06AAA666AAAA6AAAA666AA6AAAAAAA60_ 606AAAAAAAAAAAAAAAAAAAAAAAAAA606_ 6606AAAAAAAAAAAAAAAAAAAAAAAA6066_ 66606AAAAAAAAAAAAAAAAAAAAAA60666_ 666606AAAAAAAAAAAAAAAAAAAA606666_ 6666606AAAAAAAAAAAAAAAAAA6066666_ 66666606AAAAAAAAAAAAAAAA60666666_ 666666606AAAAAAAAAAAAAA606666666_ 6666666606AAAAAAAAAAAA6066666666_ 66666666606666666666660666666666_ 66666666660000000000006666666666_ " , # xpmtoiim -c1 tapes.xpm "32,c1,_ 66666666666666FF6666666666666666_ 6666666666666FFFF666666666666666_ 666666666666FFFFFF66666666666666_ 66666666666FFFFFFFF6663366666666_ 6666666666FFF0000FFF633336666666_ 666666666FFF000000F1333333666666_ 66666666FFF000660003333333366666_ 6666666FFFF006006033300003336666_ 666666FFFFF006006333000000333666_ 66666FFFFFF000663330006600033366_ 6666FFFFFFFF00033330060060033336_ 666FFFF00FFFF0333330060060033333_ 66FFFF0660FF1333333000660003333S_ 6FFFF0600601333333330000003333S0_ 61FFF060060333300333300003333S10_ 600FF00660333306603333303333S106_ 6000FF000333306006033303333S1066_ 66000FF0013330600603303333S10666_ 666000FF10S33006600303333S106666_ 6666000F101S330000003333S1066666_ 66600000F101S3300033333S10666666_ 6660SS000F101S33333333S106666666_ 66600SS0000001S333333S1066666666_ 666000SS0000001S3333S10666666666_ 6666000SS000SS01S33S106666666666_ 66666000SSSSSSS01SS1066666666666_ 666666000SSSSSS00110666666666666_ 6666666000SSSS000006666666666666_ 66666666000SS0006666666666666666_ 66666666600000066666666666666666_ 66666666660000666666666666666666_ 66666666666006666666666666666666_ " , # xpmtoiim -c1 teddy.xpm "32,c1,_ 66666666666006666666600666666666_ 66666666660%%06000060%%066666666_ 6666666660%cc%0%%%%0%cc%06666666_ 6666666660%cc%%%%%%%%cc%06666666_ 66666666660%%%0%%%0%%%%066666666_ 66666666660%%%%%%%%%%%0666666666_ 66666666660%%%%%%%%%%%0006666666_ 6666666660%%%%%00%%%%%0%%0066666_ 6666666660%%%%%00%%%%%0%%%%06666_ 6666666600%%%0%%%%0%%%0%%%%06666_ 66666660%%0%%%0000%%%0%%%%%%0666_ 6666660%%%%00%%%%%%00%%0%%%%0666_ 6666660%%%%%%000000%%%%0%%%%0666_ 666660%%%0%%%%%%%%%%%%0%%%%%0666_ 666660%%%0%%%%cccc%%%%0%%%%06666_ 666660%%%%0%%cccccc%%0%%%%%06666_ 666660%%%00%cccccccc%00%%%066666_ 6666660%%%0%cccccccc%0%%%0066666_ 6666660%0%0%cccccccc%00%0%066666_ 6666666000%%cccccccc%%00%%066666_ 6666666660%%cccccccc%%%%%%066666_ 66666666660%%ccccccc%%%%%0666666_ 6666000060%%%%ccccc%0%%%%0666666_ 6660%%0%0%%%%%0000%0%%%%%0666666_ 660%0ccc%0%%%0%%0%0%%%%%06666666_ 660%ccccc%%%0%0ccc%0%%%%06666666_ 660%ccccc%%%0%ccccc%%%%066666666_ 660%ccccc%%00%ccccc%%%0666666666_ 660%ccccc%060%ccccc%%06666666666_ 6660%cccc0660%ccccc%066666666666_ 66660000066660%cccc0666666666666_ 66666666666666000006666666666666_ " , # xpmtoiim -c1 tetris.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666660A66666666666666666_ 666666666666606AA66666660A666666_ 66666666666660666666666606AA6666_ 66666666666660666666666606666666_ 666666666666BA066666666606666666_ 66666666666BAAn06666666BS0666666_ 6666666666BAAAAn0666666BS0666666_ 666666666CAAAAAAnn66666BS0666666_ 666666666BAAAAAAn066666BS0666666_ 666666666BAAAAAAn06666BSSS066666_ 666666666BAAAAAAn06666BSSS066666_ 666666666AAAAAAnn06666BSSS066666_ 666666666Cnnnnnn0C6666BSSS066666_ 66666666661011003333333333333333_ 66666633333131003333333333333333_ 66333333333131003001300130013001_ 33333333333131003001300130013001_ 33333333333131003001300130013001_ 33330003333131003001300130013001_ 3330nnn0333131003001300130013001_ 330nnAAnA33131003001300130013001_ 330nCACAA33131003001300130013001_ 330nAAAAA33131003111311131113111_ 330nAAAAA33131003333333333333333_ 330nCACAA33131003333333333333333_ 330nAAAAA33131003333333333333333_ 330nAAAAA33131003333333333333333_ 330nCACAA33131003333333333333333_ 330nAAAAA33131003333333333333333_ 330nnnnnA33131103333333333333333_ " , # xpmtoiim -c1 tetris2.xpm "32,c1,_ 33333333333333333333333333333333_ 33333333333333300000033333333333_ 3333333333333330iiii033333333333_ 3333333333333330iiii033333333333_ 3333333333333330iiii033333333333_ 3333333333333330iiii033333333333_ 0000000000000000iiii000000000003_ 06666666660iiiiiiiii033333333303_ 06666666660iiiiiiiii033333333303_ 06666666660iiiiiiiii033333333303_ 06666666660iiiiiiiii033333333303_ 06666000000iiii00000033333333303_ 06666088880iiii0JJJJ033333333303_ 06666088880iiii0JJJJ033333333303_ 06666088880iiii0JJJJ033333333303_ 06666088880iiii0JJJJ033333333303_ 0666608888000000JJJJ000000000003_ 0666608888888880JJJJ0DDDD0333333_ 0666608888888880JJJJ0DDDD0333333_ 0666608888888880JJJJ0DDDD0333333_ 0666608888888880JJJJ0DDDD0333333_ 0000000000088880JJJJ0DDDD0333333_ 333330BBBB088880JJJJ0DDDD0333333_ 333330BBBB088880JJJJ0DDDD0333333_ 333330BBBB088880JJJJ0DDDD0333333_ 333330BBBB088880JJJJ0DDDD0333333_ 000000BBBB000000JJJJ0DDDD0000003_ 0BBBBBBBBBBBBBB0JJJJ0DDDDDDDDD03_ 0BBBBBBBBBBBBBB0JJJJ0DDDDDDDDD03_ 0BBBBBBBBBBBBBB0JJJJ0DDDDDDDDD03_ 0BBBBBBBBBBBBBB0JJJJ0DDDDDDDDD03_ 00000000000000000000000000000003_ " , # xpmtoiim -c1 thumper.xpm "32,c1,_ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_ FFFFFFFFFFFFFFFFFF0000000FFFFFFF_ FFFFFFFFFFFFFFFFF001000000FFFFFF_ FFFFFFFFFFFFFFF000000000100FFFFF_ FFFFFFFFFFFFFF0000100001110FFFFF_ FFFFFFFFFFFFFF00060111000100FFFF_ FFFFFFFFFFFFF0100000111000100FFF_ FFFFFFFFFFFFF001000011111001000F_ FFFFFFFFFF000000000110111100010F_ FFFFFFFFFF0166611111101111000000_ FFFFFFFFF001666166666CG VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1810110000600_ FFFFFFFFF016666666611100000F0060_ FFFFFFFFF06666666611110F000FF000_ FFFFFFFF001666666611110FFFFFFF00_ FFFFFFF00111666661111100FFFFFFFF_ FFFFFFF01100666666111110FFFFFFFF_ FFFFFFF011001666611111100FFFFFFF_ FFFFFFF01100011110011111000000FF_ FFFFFFFF00000111001111011000000F_ FFFFFFFF00000010011110011106610F_ FFFFFFFFFF0010001100011111066610_ FFFFFFFFFF0111001000111111106600_ FFFFFFFFF0011100000111111106660F_ FFF0000000111011001111111106660F_ FF01111011000011110011111066100F_ F00011100001100001010000000000FF_ FF0000000000000F00001111100FFFFF_ FFFFFFFFFFFFFFFFFFF01111100FFFFF_ FFFFFFFFFFFFFFFFFFF0001100FFFFFF_ FFFFFFFFFFFFFFFFFFFF000000FFFFFF_ " , # xpmtoiim -c1 tick.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666A66666666666_ 66666666666666666666AA6666666666_ 6666666666666666666AAA6666666666_ 6666666666666666666AAAA666666666_ 666666666666666666AAAAAA66666666_ 666666666666666666AAAAAAAA666666_ 66666666666666666AAAAAAAAAA66666_ 6666666666666666AAAAAAAAA6666666_ 6666666666666666AAAAAAAA63336666_ 666666666666666AAAAAAA6633666666_ 666666666666666AAAAAA63336666666_ 666666666666666AAAAA633666666666_ 666666666666666AAAA6336666666666_ 66666666666666AAAAA3366666666666_ 66666666A66666AAAA63666666666666_ 66666666AA6666AAA633666666666666_ 666666666AA66AAAA336666666666666_ 666666666AAA6AAA6366666666666666_ 6666666636AA6AAA3366666666666666_ 6666666633AAAAA63666666666666666_ 6666666633AAAAA33666666666666666_ 66666666636AAAA36666666666666666_ 66666666633AAA636666666666666666_ 666666666636AA336666666666666666_ 666666666633A6366666666666666666_ 66666666666363366666666666666666_ 66666666666333666666666666666666_ 66666666666636666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 tintin.xpm "32,c1,_ 66666666666O6O6O6666666666666666_ 666666666666OOOOO666666666666666_ 666666666666OOOOOO66666666666666_ 666666666666OOOOOOO6666666666666_ 66666666666OOOOOOOO6666666666666_ 666666666OOOOOOOOOO0666666666666_ 66666666OOOOOOOOOccc066666666666_ 6666666OOOOcccccccccc06666666666_ 6666666OOccccccccccccc0666666666_ 666666OOOcccc00cccc00c0666666666_ 666666OOOccc0cc0cc0cc0c066666666_ 666666OOOcccccccccccccc066666666_ 666666OOOOccc00cccc00cc066666666_ 66666000OOccc00cccc00ccc06666666_ 66660ccc0Occccccc00ccccc06666666_ 66660c0cccccccccccc0cccc06666666_ 66660cc0ccccccccccc0cccc06666666_ 666660c00ccccccc000ccccc06666666_ 666660ccccccccccccccccc066666666_ 6666660cccccccccccccccc066666666_ 666666600ccccc0cccccccc066666666_ 6666666660ccccc000cccc0666666666_ 6666666660cccccccccccc0666666666_ 6666666600ccccccccccc06666666666_ 66666660600cccccccc0006666666666_ 6666666066600ccc000c060666666666_ 666666606666600cccc0666066666666_ 66666000666666600c06666000666666_ 66600JJJ006666660066660JJJ006666_ 600JJJJJJJ006660J06660JJJJJJ0066_ 0JJJJJJJJJJJ060JJJ060JJJJJJJJJ06_ JJJJJJJJJJJJJ0JJJJJ0JJJJJJJJJJJ0_ " , # xpmtoiim -c1 tool.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666600666666666666666666666_ 66666666000066666666666666666666_ 66666660300306666666666000300000_ 66666660300306666666666000300000_ 66666603300330666666666000000000_ 66666603300330666666666600333306_ 66666603333330666666666600333306_ 00000003300330000000000003333306_ 0,,,,,,030030,,,,,,,,03333333306_ 0,,,,,,033330,,,,,,,,03003333306_ 0,,,,,,0033330,,,,,,,03333333306_ 00000000303330000000000003333306_ 66666603300333066666666600000006_ 66666033066033306666666660333306_ 66660330666603306666666660333006_ 63630AA036360AA03636363603030066_ 63330AA033330AA03333333030300666_ 66660AA066660AA06666660303006666_ 66660AA066660AA06666000000663633_ 66660AA066660AA06666666666333333_ 666660A066660A066666666666666666_ 66666600363600363636366666666666_ 66666663333333633333366666666666_ " , # xpmtoiim -c1 translate.xpm "32,c1,_ 66666666600000000000000666666666_ 666600000SSSSSSSSSSSSSS000066666_ 6600SSSSSSSSSSSSSSSSSSSSSSS00666_ 60SSSSSSSSSSSSSSSS0S0S0SSSSSS006_ 0SSSSSSSSSSSSSSSSS0S0S0S0S0SSSS0_ 0SSSSSSSSSSSSSSSSS0S0S0S0S0S0SS0_ 0SSSSSSSSSSSSSSSSS0S0S0S0S0S0SS0_ 00SSSSSSSSSSSSSSSS0S0S0S0S0S0SS0_ 0300SSSSSSSSSSSSSS0S0S0S0S0S0SS0_ 033300SSSSSS0SSSSS0S0S0S0S0S0SS0_ 033333000SSS00SSSS0S0S0S0S0S0SS0_ 030333333000030SSSSSSSSS0S0S0SS0_ 0303033333333330SSSSSSSSSSSS0SS0_ 03030303033333330S0S0S0SSSSSSSS0_ 0303030303333333300S0S0S0S0SSSS0_ 0333030333333333330S0S0S0S0S0SS0_ 030303030333333333300S0S0S0S0SS0_ 030303330333333333330S0S0S0S0SS0_ 03033303033333333333300S0S0S0SS0_ 03030303333333333333330S0S0S0SS0_ 0333030303333333333333300S0S0SS0_ 03030333033333333333330SSS0S0SS0_ 0303030303333333333330SSSSSS0SS0_ 0303330333333333333300000SSSSSS0_ 0333030303333333333066666000SSS0_ 603333030333333333066666666600S0_ 66003333333333333066666666666600_ 66660033333333330666666666666660_ 66666600033333306666666666666666_ 66666666600003066666666666666666_ 66666666666600666666666666666666_ 66666666666606666666666666666666_ " , # xpmtoiim -c1 trashcan.xpm "32,c1,_ 66666666666660000006666666666666_ 66666666666606666660666666666666_ 66666600000000000000000000666666_ 66666066666666663333331111066666_ 66666033331311101000000000066666_ 66666606666363111100000000666666_ 66666606666663333110000000666666_ 66666606663633131101000000666666_ 66666606636661133001000000666666_ 66666606636631333000100000666666_ 66666606636661133001000000666666_ 66666606636631333000100000666666_ 66666606636661133001000000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631333000100000666666_ 66666606636661133001100000666666_ 66666606636631331000000000666666_ 66666606663663133101110000666666_ 66666606666663331311111000666666_ 66666606666633333311111000666666_ 66666600000000000000000000666666_ " , # xpmtoiim -c1 trashcan_full.xpm "32,c1,_ 66666666666660000006666666666666_ 66666666666606666660666666666666_ 66666600000000000000000000666666_ 66666066666666333333331111066666_ 66666600000000000000000000666666_ 66666606666666333331111100666666_ 66666606666666333111111000666666_ 66666606666166333331101100666666_ 66666066661636133301110000066666_ 66666066663666133101110100066666_ 66660666636631333330111000006666_ 66660666636661333110111000006666_ 66606666636631333310110000000666_ 66606666366661333110111100000666_ 66606666366616333311011000000666_ 66606666366313333111011100000666_ 66606666366613333311010000000666_ 66606666366313331111011000000666_ 66606666366613333111010000000666_ 66606666166313331111011000000666_ 66606666163613333111001000000666_ 66606666166330311110110000000666_ 66606666616330331110100000000666_ 66660666313330111110110000006666_ 66660663613330311110000000006666_ 66666036331333011101100000066666_ 66666063330313011100000000066666_ 66666033330331011101000000066666_ 66666603333011111110000000666666_ 66666603331311111000000000666666_ 66666603313111101000000000666666_ 66666660000000000000000006666666_ " , # xpmtoiim -c1 tree.xpm "32,c1,_ 66666666666666666666666666666666_ 666666666666666F6666666666666666_ 666666666666666S6666666666666666_ 66666666666666FSF666666666666666_ 666666666666666SSS66666666666666_ 6666666666666FSF6S66666666666666_ 666DE VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;16666666666S6F0666666666666666_ 666666666666FF6SnS66666666666666_ 66666666666666SnSS66666666666666_ 6666666666666SSF6S06666666666666_ 666666666666FS6So6F6666666666666_ 6666666666666FSSS666666666666666_ 666666666666F6oSSF66666666666666_ 666666666666SS0o6S66666666666666_ 66666666666FSSFo6SSF666666666666_ 6666666666FS0F6SS60S666666666666_ 6666666666666SSFS66F666666666666_ 66666666666FS660SF66666666666666_ 6666666666SSSFSn60S6666666666666_ 6666666666F666FS66SS666666666666_ 66666666666FSFoFSo6F666666666666_ 6666666666SSFSFSnS60F66666666666_ 666666666FS6SnSS6SSS666666666666_ 666666666666nFSo60n0F66666666666_ 6666666666SS06S06666S66666666666_ 666666666SS066SS66666S6666666666_ 66666666F66666nnn666666666666666_ 66666666666666So0666666666666666_ 66666666666666noS666666666666666_ 666666666666SFoSo066666666666666_ 666666666FSSSSSSSS0S066666666666_ 666666SFSS0SFSS0SSSFS0S066666666_ " , # xpmtoiim -c1 umbrella.xpm "32,c1,_ 66666666666666600666666666666666_ 66666666666666000066666666666666_ 66666666663000000000036666666666_ 66666663000ww000000JJ00036666666_ 66666300wJw00nn00SS00JiJ00366666_ 666300wJJw0nAA0CC0FFS0JiiJ003666_ 6630wJJJw0nAAn0DD0SFFS0JiiiJ0366_ 630wJJJJ0nAAA0CDDC0FFFS0iiiiJ036_ 60wJJJJw0AAAA0DDDD0FFFF0JiiiiJ06_ 30JJJJJ0nAAAn0DDDD0SFFFS0iiiii03_ 0wJJJJw0AAAA0CDDDDC0FFFF0JiiiiJ0_ 0JJJJJ0nAAAA0DDDDDD0FFFFS0iiiii0_ 0w000w0n000n0CC00CC0S000S0J000J0_ 003630003630000oo000036300036300_ 036663036663030oo030366630366630_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666666666660oo066666666666666_ 666666300366660oo066666666666666_ 6666660oo066660oo066666666666666_ 6666660oo036630oo066666666666666_ 66666630oo0330oo0366666666666666_ 66666660ooo00ooo0666666666666666_ 6666666300oooo003666666666666666_ 66666666630000366666666666666666_ " , # xpmtoiim -c1 vines.xpm "32,c1,_ 00000000000000000000000000000000_ 0330000000000000A000000033303300_ 033303300000AAAA0000033033333330_ 03303330000AAAAAA060033330000033_ 003303333000000AA000333000333303_ 00033003300,,,,0A000330033330330_ 00333303300,,,,,0003333330333000_ 00033330330,,,,,0030000333033000_ 000003303300,,,00300000000000000_ 000033303300,0003333333300000600_ 00003333330000033000000033000000_ 00000000003000300000000003300003_ 60000000000303000000000000300003_ 00000000000330000000003300030003_ 00000000330300000033333300033003_ 00033333003306000033303300030300_ 00333303003000003333033300300033_ 00033033003000003300330000300000_ 00330030003000003303333000306000_ 03330333003000333033330000300000_ 03300333003000333033000600030000_ 00303333003000033033300000003330_ 03303030003000003333300000000000_ 33033000000300000300000000000003_ 33033000000300000300003333000003_ 03300006000300003333333333000000_ 03300000000030003000030033333000_ 00000000000003030000033303333006_ 00000000000000330000033330333000_ 00033000000000030060000333033300_ 03333303300600030000000333333300_ 03003333330000030000000000333000_ " , # xpmtoiim -c1 wargame.xpm "32,c1,_ 66666666666666666666666666666666_ 66666666666666660666666666666666_ 6666666666666600i006666666666666_ 66666666666600iiiii0066666666666_ 666666666600iiiiiiiii00666666666_ 6666666600iiiiiiiiiiiii006666666_ 66666600iiiiiiiiiiiiiiiii0066666_ 666600iiiiiiiiiiiiiiiiiiiii00666_ 6600iiiiiiiiiiiiiiiii0iiiiiii006_ 60iiiiiiiiiiiiiiiiiii0iiiiiiii06_ 60iiiiiiiiiiiiiiiii0i0iiiiiiii06_ 60iiiiiiiiiiiiiiiii0i0iiiiiiii06_ 60iiiiiiiiiiiiiiiii0i0iiiiiiii06_ 60iiiiiiiiiiii0000000000iiiiii06_ 60iiiiiiiiii000333333330iiiiii06_ 60i000000000033333333300iiiiii06_ 60iiiiiiiiii00000000000000000i06_ 60iiiiiii00000000000000033330i06_ 60iiiiii003333333333333333330i06_ 60iiiiii00000000000000000000ii06_ 60iiiiiii003030303030303300iii06_ 60iiiiiiii0000000000000000iiii06_ 60000000000000000000000000000006_ 60SSSSSSSSSSSSSSSSSSSSSSSSSSSS06_ 600SS0S0S0S0S0S0S0S0S0S0S0S0SS06_ 66600S0S0S0S0S0S0S0S0S0S0S0S0066_ 6666600SS0S0S0S0S0S0S0S0SS006666_ 666666600S0S0S0S0S0S0S0S00666666_ 66666666600SS0S0S0S0SS0066666666_ 6666666666600S0S0S0S006666666666_ 666666666666600SSS00666666666666_ 66666666666666600066666666666666_ " , # xpmtoiim -c1 warplane.xpm "32,c1,_ FFF1FFFFFFFFFFFFFFFFFFFFFDDDDDDD_ FFF1FFFFFFFFFFFF0FFFFFFFFDDDDDDD_ DDD1DDDFFF1616136316161FFDDDDDDD_ DDD1DDDFFFFFFF06060FFFFFFDDDDDDD_ DDD1DDDFFFFFFF00000FFFFFFDDDDDDD_ FFFF1FFFFFFFFF00300FFFFFFDDDDDDD_ FFFF1FFFFFFFFF00300FFFFFFFFFFFFF_ FFFF1FFFFFFFFF00300FFFFFFFFFFFFF_ FFFFF1FFFFFFFF00300FFFFFFFFFFFFF_ FF00000000000001330000000000000F_ F0111116061111013300111606111110_ F0133366066333010300336606633330_ F013330000033300H000330000033330_ D013336606633306H600336606633330_ D0133336063333000000333606333330_ DD00000000000006H60000000000000F_ DDDDDDF1FFFFFF00000FFFFFFFFFFFFF_ DDDDDDF1FFFFFF06H60FFFFFFFFFFFFF_ DDDDDDF1FFFFFF00H00FFDDDDDDFFFFF_ DDDDDDF1FFFFFF01030FFDDDDDDFFFFF_ DDDDDDFF1FFFFF01330FFDDDDDDFFF11_ DDDDDDFF1FFFFF01330FFDDDDDDF11FF_ DDDDDDFFF1FFFF01330FFDDDD111FFFF_ DDDDDDFFF1FFFFF030FFFD111DDFFFFF_ FFFFFFFFFF1F1110301111DDDDDFFFFF_ FFFFFFF111111FF030FFFDDDDDDFFFFF_ FFFFF11FFFF1FFF000FFFFFFFFFFFFFF_ 11111FFFFFF00000100000FFFFFFDDDD_ FFFFFFFFFF0111101001110FFFFFDDDD_ FFFFFFFFFF0133301003330FFFFFDDDD_ FFFFFFFFFFF00000100000FFFFFFDDDD_ FFFFFFFFFFFF1FFF0FFFFFFFFFFFFFFF_ " , # xpmtoiim -c1 windows.xpm "32,c1,_ 66660000000000000000000000666666_ 66660HHHHHHHHHHHHHHHHHHHH0666666_ 66660000000000000000000000336666_ 66660333333333333333333330336666_ 66660336633333333333333330336666_ 66660363363363333333333330336666_ 66660363333333333333333330336666_ 66660363363363000000000000000066_ 666603366333330HHHHHHHHHHHHHH066_ 66660333333333000000000000000033_ 66660333333333066666666666666033_ 66660333333333066666666600006033_ 00000000000000000000000666666033_ 0HHHHHHHHHHHHHHHHHHHHH0600006033_ 00000000000000000000000666666033_ 06666666666666666666660600006033_ 06666666666666666666660666666033_ 06600066660006666000660600006033_ 06606066660606666060660666666033_ 06600066660006666000660600006033_ 06666666666666666666660666666033_ 06000006600000660000060600006033_ 06666666666666666666660666666033_ 06600066660006666000660000000033_ 06606066660606666060660333333333_ 06600066660006666000660333333333_ 06666666666666666666660336666666_ 06000006600000660000060336666666_ 06666666666666666666660336666666_ 00000000000000000000000336666666_ 66333333333333333333333336666666_ 66333333333333333333333336666666_ " , # xpmtoiim -c1 windows2.xpm "32,c1,_ 00000000000000000000006666666666_ 0AAAAAAAAAAAAAAAAAAAA06666666666_ 00000000000000000000006666666666_ 06666666666666666666600000000000_ 0666666666666666666660AAAAAAAAA0_ 0666JJ66J66J66JJ66J6600000000000_ 066J66J6J66J6J66J6J6606666666660_ 066J66J6J66J6J66J6J660666JJJJJ60_ 0666JJ66J66J66JJ66J660JJJJ666J60_ 0666666666666666666660666J666J60_ 0666666666666666666660666JJJJJ60_ 066000000000000000000000666J6660_ 0660AAAAAAAAAAAAAAAAAAA0666J6660_ 066000000000000000000000666J6660_ 06606666666666666666666066JJJ660_ 0660666666666666666666606J666J60_ 066066JJJJJJJJJJJ66666606J666J60_ 0000666666666666666666606J666J60_ 6660666JJJJJJJJJJ666666066JJJ660_ 66606666666666666666666066666660_ 666066666JJJJJJJJJ66666000000000_ 66606666666666666666666066666666_ 6660666JJJJJJJJJJ666666066666666_ 66606666666666666666666066666666_ 66606666JJJJJJJJJJ66666066666666_ 66606666666666666666666066666666_ 66606666666666666666666066666666_ 66606666666666666666666066666666_ 66600000000000000000000066666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ 66666666666666666666666666666666_ " , # xpmtoiim -c1 wordE% Q VMS.BCKy[V9.IPL.GDATA]CL32.IMS;1;1sd .xpm "32,c1,_ 66666666666666606666666666666666_ 66666666666666030666666666666666_ 66666666666660cc3066666666666666_ 6666666666660cccc306666666666666_ 666666666660cccccc30666666666666_ 66666666660cccccccc3066666666666_ 6666666660cccccccccc306666666666_ 666666660cccccccccccc30666666666_ 66666660cccccccccccccc3066666666_ 6666660cccccccccccccccc306666666_ 666wwwwwwwwwwwcccccwwcwwwwwww666_ 6666wwwwwwwwwcccccwwwcccwwww6666_ 6660c33333www333cwwww33c3www6666_ 660ccc333www333cwwww333cwwc00666_ 60cccccccwww33cwwwww333wwcc30066_ 0cccccccwww333wwwww333wwcc33c006_ 60ccccccwww33wwcwww33wwcc33ccc00_ 660ccccwww33wwcwww33wwcc33ccc006_ 6660cccwww3wwccwww3wwcc33ccc0066_ 66660cwwwwwwccwwwwwwcc33ccc00666_ 66666wwwwww3c3wwwww3c33ccc006666_ 66666wwwww333wwwww3333ccc0066666_ 66666wwww3333wwww3333ccc00666666_ 6666wwwww333wwww3333ccc006666666_ 66666666603cccc3333ccc0066666666_ 66666666660ccc3333ccc00666666666_ 666666666660cccccccc006666666666_ 6666666666660cccccc0066666666666_ 66666666666660cccc00666666666666_ 666666666666660cc006666666666666_ 66666666666666600066666666666666_ 66666666666666660666666666666666_ " , # xpmtoiim -c1 x_server.xpm "32,c1,_ 66666666666666666666666666666666_ 6666cAAAAAAAc666666666cAAAc66666_ 66666cAAAAAAAc6666666cAAAc666666_ 666666cAAAAAAB666666cAAAc6666666_ 6666666cAAAAAAc6666cAAAc66666666_ 66666666BAAAAAAc66cAAAc666666666_ 66666666cAAAAAAAccAAAc6666666666_ 666666666cAAAAAAcAAAc66666666666_ 6666666666cAAAAcAAAAAc6666666666_ 6666666666cAAAcAAAAAAAc666666666_ 666666666cAAAc6cAAAAAAB666666666_ 66666666cAAAc666cAAAAAAc66666666_ 6666666cAAAc66666BAAAAAAc6666666_ 666666cAAAc666666cAAAAAAAc666666_ 66666cAAAc66666666cAAAAAAAc66666_ 66666666666666666666666666666666_ 00000000000000000000000000000000_ 61444333333331111000000000000006_ 66000000000000000000000000000066_ 6666666oBBoBoBo666666oBo66666666_ 66666666oBoBoBo666666oBo66666666_ 66666666oBoBoBBo66666oBo66666666_ 666666666ooBBoBBBo6oooBo66666666_ 6666666666oBBBoBBBooBooBo6666666_ 66666666666ooBBoBBBBoBoBo6666666_ 666666666666ooBBBBBBBoBBo6666666_ 66666666666666ooBBBBBBoBo6666666_ 6666666666666666ooBBBBBBo6666666_ 666666666666666666oBBBBo66666666_ 666666666666666666oBBBBo66666666_ 66666666666666666000000006666666_ 66666666666666666000000006666666_ " , # xpmtoiim -c1 xmaze.xpm "32,c1,_ 44444444444444444444444444444444_ 40000000000000000000000000000004_ 40444440004444440040404444440004_ 40444440444444444444404444404404_ 40444440000400000000000000004004_ 40440444044404444444444444404404_ 40440444044404000044444044404404_ 40440044044404400004440444404004_ 40044444044404440004404444400404_ 40004444044404444000044444404404_ 40444440004404444000044444404004_ 40444444404404444400004444400404_ 40444444404404444040000444404004_ 44444444404404440444000444404404_ 40440444444404404444400044404404_ 40440444044404044444400004404004_ 40040444040400444444440000400404_ 40400444044404444444444444404404_ 40044444444400000000000000004404_ 40444444444444440444444444444404_ 40444400000004440004004444440004_ 40444440404404444044404444440444_ 40444444444404444444404440444444_ 40000444444004000004444000444404_ 40040444004404044440004040444404_ 40440044040400440044444000044004_ 40440444004404444044404444444404_ 40444444044404444444404444444404_ 40444444044400444444404444444404_ 40444444044444440444444444444404_ 40000000000000000000000000000004_ 44444444444444444444444444444444_ " , # xpmtoiim -c1 zippy.xpm "32,c1,_ 66666666666666666606606660666666_ 66666666666666666606066006666666_ 66666666666666666060600660066666_ 666666666666666A6006000006666666_ 66666666666666A6AAAA6A0666666666_ 66666666666666AccAAccAAAAA666666_ 66666666666666nAAccAAAc66A666666_ 666666666666600ccccccnAAnn666666_ 6666666666660ccccccccc0666666666_ 666666666600cccccccccc0666666666_ 6666666600cccc0ccccccc0666666666_ 6666666000000cc0000ccc0666666666_ 66666660c000cccc00cccc0666666666_ 6666600c06660cc0660ccc0666666666_ 66660cc066060ccc6060ccc060066666_ 66660cc00660ccc06660ccc00cc06666_ 66660c0ccc0ccccc00ccccc0ccc06666_ 666660ccc0cccccccccccccc00c06666_ 66660cccc0ccccc0cccccccc00c06666_ 66660ccccc000000ccccc0cc0c066666_ 66660ccccc0000ccccccc0c0cc066666_ 66660cccccc00ccc00ccc0cc0c066666_ 66660cccc0ccccc00cc00cc000666666_ 666660cccc0000000cccccc066666666_ 666660ccccc000000ccccccc06666666_ 6666660ccc000AA0cccccccc06666666_ 6666660ccccc000ccccccccc06666666_ 6666660ccc0ccccccccccccc06666666_ 66666660ccc000ccccccccc066666666_ 66666660ccccccccccc0000666666666_ 66666666000cccc00006666666666666_ 66666666666000066666666666666666_ " *[V9.IPL.GDATA]CLAUDE.IMS;1+,./ 4-y0123KPWO56k7zk89Jj$GHJ # xpmtoiim -c1 claude.xpm "64,c1,_ 66666666660OOOOOOOOO06666666666166666666666666616666666666666666_ 6666666000%%%%%%%%%OOO066666661666666666666666661666666666666666_ 6666666%%%%,,,%%%,,%OOO0666661666A666A666A666A661166666666666666_ 666666%%,,,,%%,%%,,,%%OOO06616666A666A6666666A666166666666666666_ 66666%%O,,,,,%%,,,,,,0%%O06616666A666A66AA666A666616666666666666_ 66666%O,,,,,%%%%,,,,,,0%OO6616666AAAAA666A666A666116666666666666_ 6666O%,,,,,,,%%%,,,,,,,O%O%616666A666A666A666A666166666666666666_ 666%%%,,,,,,%%%,,,,,,,,0%OO616666A666A666A6666666111166666666666_ 66%%O0,,,,,,%%,,,,,,,,,0%%O616666A666A66AAA66A666666616666666666_ 66O%O,,,,,,,,,,,,,,,,,,,0%%0166666666666666666666666611166666666_ 66OO0,,,,,,,,,,,,,,,,,,,,%OO116666666666666666666666666116666666_ 66OO,,,,,,,,,,,,,,,,,,,,,%OO61666AAA6666666666666666666616666666_ 6%OO,,,,,,,,,,,,,,,,,,,,,OOOO16666A66666666666666666666616666666_ 6OOO,,,%%%,,,,,%%%%,,,,,,,%OO11666A666666AAA66AA6A66666616666666_ 6OOO,000000,,,,0000000,,000OO61666A666666666A6A6A6A6666616666666_ 6OOO3333333,,,,3333333,00,0OO61666A666666AAAA6A6A6A6666616666666_ 6OOO333OO30,0,03OO33330,,,OOO61666A66666A666A6A6A6A6666116111666_ 6OO0333OO30,,,03OO33330,,,OO06166AAA66666AAAA6A666A6666111161116_ 6OO,3333330,,,033333300,,,0O616666666666666666666666666666666611_ 60O00033000,,,,0333300,,,,,,066666666666666666666666666666666661_ 660,,0000,,,,,,,0000,,,,,0,06AAA666AA6666666666666666666A6666666_ 6600,,,,,,,,,,,,,,,,,,,,,0,6A666A666A6666666666666666666A6666666_ 66660,,,,,,,,,,,,,,,,,,,,066A6666666A6666AAA66A666A66AA6A66AAA66_ 66660,,,,,,00000,,,,,,,,,000A6666666A6666666A6A666A6A66AA6A666A6_ 666660,,,,,,000,,,,0,,,,0000A6666666A6666AAAA6A666A6A666A6AAAAA6_ 666660,,00,,,,,,,,000,,,0006A666A666A666A666A6A66AA6A66AA6A66666_ 6666660,,000000000,,,,,030066AAA666AAA666AAAA66AA6A66AA6A66AAA66_ 6666600,,,,,,,,,,,,,,,033006666666666666666666666666666666666661_ 666660J0,,,,0000,,,,,0330J00666666666666666666666666666666666666_ 666000JJ0,,,,,,,,,,003330J00006666666666666666666666666666666616_ 0000000JJ00,,,,,,0033330JJJJJ00000611111166666666666666666111166_ 0JJJJJ00J030000003333000JJJ00JJJJ0006666111666666666661111166666_ JJJJJJ00JJ033333333300JJJJJ0JJJJJJJ00066666111111111111666666666_ JJJJJJJJ0JJ0033333300cJJ000J0JJJJJJJJ000666666666666666666666666_ JJJJJJJJ0JJJ00333300JJJc0c0J0iiii0JJ0J00066666666666666666666666_ JJJJJiJJJ0JJJ003300cJJJ0cJJ00iiiii00JJJ0066666666666666666666666_ JiJJiiiJJ00cJJ0000iJJJ0iJJ00iiiii00JJJJJ066666666666666666666666_ Jiiiiiiiii00iii000iii0iiJ00iiiiii0JJ0iii066666666666666666666666_ " *[V9.IPL.GDATA]GPXTEST.GIF;1+,.$/ 4$"I-y0123KPWO%56p7Sp89Jj$GHJFZV VMS.BCKy9.IPL.GDATA]GPXTEST.GIF;1$YGIF87ah^^Lwww^ɪooo^,Lw---^ɥ 8,,8wLfff^^^VVVLLL<<<,,,ɥ44T(8,hpHdҨl:ÇtJZجVv0xgӼF_x)q}}lJ\IeHkGMDCBxsErJV!HCɩBưЂ•ڙܝޡuXyl{VY! */SٲaqoP YOKZ" w}ÖF-UpQ f!q?u5Ё+bVPB$ gCvp{[6D%O |(B=P{1w4{N_9:(pbGiU`/|p|>x@!MĖk6EyF36W>oG{'3ɚ()0CxTFB%CW: +lLgA'Qo35MIS&+%>a^=yvbmIeNS?Gkv,'KՑ7 +tP32Z% %UUlQ0!J5se6iSuuY&`rWߍ]{+ [A^*֗0,F#^i.;>,wfYf6+fږ&R-^{p'k쎘ѧ{TlJᆷ1kj9Y!>5E +H9J(ֶdժp{Z\h՝ ('Ϻ GZ7YmM_˒-+1Mp5fU[)a5 17*sW1c|5pS4e^=z ㉞\v.~Vҟk2l[ZǶs$x^f=?KYfa|ÿ-3#Qb|}溚wk[t[E羷XC+ع {xe7cs Wc/ >U_jpZ0ɢNǦ#o 6k~{>krx!sR9.ps1j)8KW~ف.BRsz7 cé{F8-u^#X''@ mbU$7Z_-~kvwy6?i~P/s~VIjOm(BݓTZ_uZ&fGZ`pH!v@vO|!veIdXqH6W(CN` {d]|g)6rfz6iʶ}~XeGIx&mJG{'[/ #UHE%) }r#;X}UV2DŽj-tj:łp'v aFܗV-_Ɔ)Awm|oHShDd(z 0  x(hȉX~?xh芭ȊՉ(r8Rhh(Xx8ϸ،HHHȍ(88xب刎>(Xhx؏ɏ9 ȐِyyIYɑ) i!(.H'9-86S{pDUCy3)JCpHoVzRM B $p B,hJ i7as e2TU{f#Õi!!YDaRqtvQ7:qxA0פxTav!w.XN{Z\G(j?7?zk:sf~!`):1̱7g"Ac/8Bp%#=>rUc.g46.)&}\HV:3k^v|$6:s =L:"NzQʖJ\דz_Q *|=zr0~JYt *ە[ DѦP9w07p0j8#ŀXii͗&jjR OftkZ }תOKSrt#$"YVKZGfQRm*jXŀ\ 2hAdqeyjj#tZ7əu3%yb4Īz7o@4'j!d$@{'+CQaJkסCs)2xP['c EU; jom,x~B*x79hJ'O}Z&ZӪ`R@ƳW4^WV|WJ6S/"+bbe1 C3#eK;>h]$9 ]KsMZ"(ʛc{ycRE מΤ:f۱)r; +a+"_9`u)c8_T9[[Oh!:ûvɘغZӷyzqۼI[%S8\k`'p׆d?{E~[_1C[㩹h:+;*tjSi`p{XJʋ'3wKg\rP *\3f#Kv&m~dZ);%\ V*hg8\įIE|+v„{JwHfe8kj[ک]U;a lLٜXYhS۠zKl{w*?ÜCC>L f-_GQgXwzm׬Tٷ7u*0Yg[ 7´l-l~ZFyJ |͡~U˝ CŇO@gd{e} |y{W~Kt\SN v>ɖ z Q6)œC4^jxl,GΣ+ƗCTqA{f4 u2ldP&"a bFiE0/ |STdc:yܶd-jG4sʀǥZ6jqEֲ$,u2W;HL`,]`[- Vٜ}k{Pi|̏{/b;2ԛ%cx$NR}6JzFUM<  [КŇ8 @pŃC̅f*Ѓݵ=vͫk*Ү˛QE4ƀ pݴmZR.%F-,옫mχ 2JʚyrW2TY$?v}7W }5 L\?q d\%Z[Q=] 2M{Rx{rܥ]d.ȭ@߸1Z٫ͷEI qi\ G$̸o!f9„`scTod37{)8as%3"T-i NO->{ɩR0!*PS/=o(@4u,}UTVD܋!(XqһmMr2PtApsEEZxVkϑV4 _.f\MWň#<1MTϤbm;+$8U v CEe֜kMDBl9,(cRet[$[}ǡcJpC܇r6/uoT"p$PSVqjLi}WTl)Q[ַ=W\m&ekg"D;wYY<&Dca0䰠=pJkH]\ ]t/*Fb[N=q9g?RFِm{i)=^` G jȧ}}v˒q(K٭n/ُvC pj@ow ]NbU;HЁP+x'&0v8 N0@g9yCZ'\Mx=%pd!~XE+^Eȋa#8F3rQ9X06wCz:t :~ǎR>NLHBѐyTd"9C #IF񑀴&1YN^2'CI=rd)AyJSrl%,UYKVƒ,q^Be0uYLbs0iLed&4jFs6Mi:ߴ7Kqb3$g:yps\$zD=9O{ < OuT9 ΆDBPF D-ьR(F+ёT)5JAЕE)LIR4iM]Sԧ'MTTEENS6]OmjTrYȴ2ȫaUFvG!4E~amT ^,Kf%Jzi-.syTX*hDd?EWj#"Fʢͥq,K_W{0هVgEE7t,7yON@( |`%8A <@`Ѕ>th!<:҆Ft+]LZӔfH> VɌ4ww v]̖zP!3` D]! >vl"@[V6laڮvvK<:C`*êu.YqMqzޒ7׫Q:A<)DF|;%(0 XV87 <mA .֞˼պ~6մ,xfVx1w[}P<Z' 9@gNқ>G}J! uk}L^_:ۣZԉdyNg鞫Σ]zH]cCK@@I?^VQ[N0kh3::$@Ha6il3%7k/(,< =-lSÜ=3,=Iogx RWD4i`O >$y5shazi/7xI zxX-NFC-DCazGeZDl'oExX뤗;y͈t"zRJJ뢔ӜҮԎ/$|:AUCFS9փ698߹ 8+@CC/;,L_XVK{{yšiIq?$Bټ>ӳ#={+%4LQ_~ D%1BB@HE\:Qh-V-^է8l>ĵj">G4J;>&"L(a"Qnrvz~nV!9 1*&RMNFBZ07;?CGKgFR[9%dPd|$qxw畟_ϻ#m+Da+U1TR삈k bdId1C(V TbH,Jp. )pq2p"@rD8bN<}z3Ξ~2hSQ1*(H`O +*+aOfI1cJmjb^\K-V!d ,X&aj4$:>' J ?l˙E@Zb+a.{1ejwj˄QV qO"7c"޲0E`vݿ2^;wg/O]#gaQ+- df/[iH3s[aX!pq$@|@WA+vW0"hV8#52#o#mDOr2mj]udn[Bq C#Y\@gkF"UjBQg"Dyy#v靍~ (6ad.J69 @$V8e֛֕H^ꄰ]Zalz(4ŔPJwhg-2kȫ}@h )Q\nhmoq)::nb-f(j_7yE넾Ŀ='F-5,՗Ŷ0R1X 1##-`Fg@ v,%pj&36Üs;[q3}\s@Y%p x$b[-DRqc=-wpmuȭ9,)-0BDG1$BFoO{7$&ǴJIiyUWJ*ls=Xڜr0D%T꿬޺T:p{iعnn 6X-k]o5J]P#rg}n~˖x"_k?2rخDhUsbpmX1moc߅.Z#V2lOh{鶷!\9φձl,376ٜc7wݲG;z`Y'7ӂvd|cC#׼yd@/li5o:ֲ4? * xԊ3VTqvu.:4ZNo zruq l>~yGN1g/mo7ȴ9l/چ ֿۺivcq߰.wm_D[RY65 | _8U zyn~ߙrSu#K~2Qub'lkvzL ޤy:(n`o>F`hf{n|J}>'~&[~5 hJBPm 茾V v(N g pjh)gbZe䈂_4YdZRK z)l排)Nbo`f$)qj)2)A! A"^v"* f:jn~XJb$eib)e*i)j&}eR>҂hX]jjf%\xŠp$jrg-nؼVmXlg /8F.,^h׭\(wnom.& @զ/ن6P:c F,?g,i{Io sup*p3:B nժo-AkA ,Ax\KuҰWn?0CJbn0v2upV1f= ^-%tq"Z"1jW2+0.OlbLW~"z& + "!!'0wX.d3d$P2Zc&:*CR(rrZ.qX-7_!w/9YA0m1_2&g22k33qq){ppr+#[6psE/X.OCE"$8nޣѺ;ó<;m]=rM)s.X 5e g\HDX0C3@4"48EqF70<+)?׭#,t 4#n+4t#{WA3EPk4QsBR߳F(3?51Zc rUGݳmV V[CW#vbXOtcu4 %Z&_HuH[I¬]5?6fuas(kuE`HdS6Q3j[f\Sg5h?ϩ<6Ji¸6KY󴯕Dv6qoafrpkq/1^hS664By].vszvn-N:ɟڮ|NWVgT s'y|lp0Y;z[y}_v[{#&hӗWx$qUm~=%/R'wZ*m{+=;7_wS#>3~;,;!o :“+${+_{~.'{ڜ8|}l 2?2g~Lþ#{'=.G[!@߬2[K;ѿx#+  j@8 E4&L"U+6V3 b]7YJ7z^ߚ>B.A:DDCFG7I8JHLLHNPQJSTKVV h34RdVMRc݁lݑ''nP]yNQF6n2. wwj֕]%nU.ɠ^-xbݰq׻y8yZI-w8!fxYؔ$kx{˓Q2Tv0ySHu`6!GQ^#jXF̸?$w%FtBĚ{l[3'$L9ij>clc08LO+㖈5jpjp-&l۹;YKzّ.vsMsnR/;&VBNېNl8JhJSgE ݠ ےTUq| !%tĊ58M?'jzM?\a>a サDCy ZQWapƞLE, t"smg }J@ JLJb9gҷdAԛEdΫ☙ r[>5&3YbktitiJ76yׂsU&9l)l?3cDhgobsGKsu( ;ʢL~hŹW',Q7 b_A[Y} .Q xZP $ld'ȧPݕx y&{=2&9^Wx"H3sGH~Keµzt8Y2_UY4.+:j@we7!h ( F^d!`R86L D)b#?nǓ2Xbd.KjXƆA9孪bC5L)o=-_ Lrf9 }K;;B_-&T =o}ϻNdW%4iS{K<dA4gu|_ǾŞpO@J(3EpIcCb yE{%zt7.q肍2(@E<΍vj~s{=ޔimu jذS-$xfJ/BK!S@@^WWh ceߍ269CIU X c!7Y <7NK.3OguHl<e&x| hҵ+ŕ\=lx(x %+,8 *$Pp rhGW٫TUײ3%& Q;^6*$d#ZHAG{kx4tѾ,s*yV#WE 1㢩#oՆȜھ w c+K;/ߟ,M^A(eڳngdQ61yL4 Xй%d⤐uņ{*{rx8?7K 4G3Po1"='njm k"OXNٷg˫b wYQ/MeD+t D=vѹaf٦t] qz1yqT /ҸHGzJg mo۝03mz&2%GM4ogE mA=`)ٳ{q]mWIs iZǖk! I_0_k=c惸RB*%58 m*kaͤNV2o08[r^qfh?1O=gFR8uF96A8]/3 ֥6 _WopgiUK޷ YkE?yCY D}E,".Ƨ#YJYcuMSd&A \sy^4@g=O'L>Trk260FJalĮ}_K>98h3&; ˊB~!sU@Uu?x%דt= sH i3%E wLv1꒜lcYN.~ޢ\|'>ǃ?a+}@g ~BZ=AŷحLqi4c|1ﴽA !]euL$(_ sd fh%'J#k" gx:tx埢Ҵj[ZY_ B-n]Ľ,0DDCkL< x'(hl{.6^38
^(c dpj.鷺D@5aUDR1$Frb0uL!gZI ]`_QhX+L5lzbIAwO=9 '+a4󍗝,VUf#cFgq%e_c(zEפp>$~hj~lɍÒJs[YyGT$Lh}NASHuDXwjWEM"fOojvQ/uGfzH,DFJt"ЂDA2UMSAjSS<հ]LZ4jBJR֯W8cA0P=9#=.3i*j]`e}[DUI;M hY[βJigY `JbÌ;m[tLRJ|^ >q#VYA7pR> 0u&!d45U }5f(e:[o. 'b0yq =yWGLlv5/˻!M3wj΋[\KҶso+TM.vV^܊u zlD,zadC|k;Py5r sXܐ$-yUJ~A毀\KO* zMC:.B5! W{r @&P]EL~4z~G6?ݚhF$p #Bej>ǥa$LPOV\pRsh XYkS*&$uI5)p8#Plb?{(7[rJZsnъnBޓ+Ҋ uqh 㮘 ~}R_W8n^n{pKW'6_bh8"lyt_O+TIZ11iZ"H0+5'wb3e%HCF93t[Ƙpofimdi}+Rz3"6xh $P\x,grAKevkw?MO&`X\c*uZ׼ RrlMªeQ%zZ&pWkӈ6 uֈb~[!:vwB¶낕g:McѲ 2xI,'8OPZE :|GŜ@q#zfR. ʪ6L8 <"Pr{NΧ)\,5_8qU<θ)Uf+!(cOq&2|ȇfiUկ],ƊdhO,01`>$oAPs$FC ?cA}yXwu! z?5Mtl#!b>#J2r!d_f"VfC[tyN-Ŀ\$@A]BqRhz!,뭀y}"C1RW-++_ՊLWUixϞorHUŘ\_kL>ͷ~xq7M2{VCR ~I[aOkMyK͠0s#@Ҁ+7Z_%)XDfq~>HO#T/k:g[|}S5侪bP{ҁz]Hȸ96|7-fFjd0븝yvo(dr{ڭ`M)v3 ICMLTez Q誢J#M "dО)q&/CtAGOA|kGjڶǽ?cNv/$T%"Y}\xzWw΂{ 9Gf*Ξv/?,=-K ̗[7 <64߾ 1*1S0bK{NVj&n#qؖm뚻FulOGHufWb2T t2Ԃ5aIbLmWlXpkW;֤vo'_9D12zv(-)( gi8>N[iS\-iTyl$dHWxݟxZIx+/X@l#+ܼXzoy!+y0ksE{sC6 [RH|j{Ru]>\#ħ@6]13毄fRdK0ܨ[%nBț䃟DžYyTT.&e /vKY'Cc qIn<-.SNb&G)'(}{+ h yo*dag}i~ ;v hJ0',$ g\%>ʫa_ l7N޷i@~*I=T9a;!V@EYM"K%4l/y)m a@.C0V4%naJi }q7j'+t'䊈C![u9A*&!ȴ؏l F֑K-I@FsԞ+_VoD<nF\v :R7 mΐx괭.5ﶈjK)M>z~>KZ& @Wz4$K+i?=秸ѿT#]ut@vœDd=/JD6 p.”jZhD\(i1s.r|O^vb)ݸl%-f?$ 3+9&9@-Bo D[^C*~)q;'txvW𿫆~`s~@DSsP9ႼFcy\CYJ_SH{ g6J-Uj6tDf UAi\ 7T je_ L>=== edit using xie; do not remove this marker line procedure ui(win, cbk) return vsetup(win, cbk, [":Sizer:lucidasanstypewriter-bold-12::311,391,9,9:An Icon Busy-Box",], ["button1:Button:regular::30,250,75,35:buTTon",button_cb1], ["line8:Line:solid:3:44,42,150,82:",], ["rect3:Rect::2:118,128,39,66:",], ["button2:Button:check::37,148,57,21:check",button_cb2], ["button3:Button:checkno::33,179,71,21:checkno",button_cb3], ["button4:Button:circle::35,214,64,21:circle",button_cb4], ["button5:Button:regular:1:30,297,84,25:switch",button_cb5], ["button6:Button:circleno:1:33,330,148,21:switch, no outline",button_cb6], ["check1:Check:::188,189,37,37:",check_cb1], ["text_input1:Text::16:65,364,186,17:password:\\=swordfish",text_input_cb1], ["slider1:Slider:h::164,301,88,11:0,1000,50",slider_cb1], ["slider2:Slider:v:1:285,10,18,379:33,67,50",slider_cb2], ["sbar2:Scrollbar:v:1:257,20,11,213:77,22,50",sbar_cb2], ["sbar3:Scrollbar:h::146,258,114,16:999,1,50",sbar_cb3], ["radio_button1:Choice::5:185,55,50,105:",radio_button_cb1, ["KUAT","KUAZ","KXCI","KJZZ","WOI"]], ["menu1:Menu:pull::70,85,50,21:Food",foodhandler, ["American", ["Burgers","Barbecue","Tex-Mex","Creole","New England"], "Chinese", ["Cantonese","Mandarin"], "Greek","Italian", ["Pasta","Pizza","Sandwiches", ["Grinder","Hoagie","Poor Boy","Submarine"]], "Mexican", ["Sonoran","Chihuahuan","Angelino","Taco Bell"], "Japanese","Korean","French","German","English", "Scottish","Irish","Danish","Dutch","Hawaiian", "Lithuanian","Smithsonian"]], ["line1:Line:solid:3:37,77,150,46:",], ["title:Message:::79,15,126,13:Some XIE Experimen",], ["message1:Message:::205,15,14,13:ts",], ) end #===<>=== end of section edited by xie procedure cbk(v, x) writes("CALLBACK: ") vecho(v, x) end procedure foodhandler(v, x) writes("FOOD: ") every writes(" ", !x) write() end T*[V9.IPL.GDATA]W01.IML;1+,{./ 4-y0123KPWO56*gX7ɋX89Jj$GHJ1,#0001 1,#0 1,#0010 1,#0100 1,#01 1,#0110 1,#10 1,#0111 1,#1 1,#00001000 1,#00001010 1,#00001100 1,#00001110 1,#10001010 1,#00110101 1,#00111100 1,#10001101 1,#10100101 1,#01010111 1,#10011111 1,#11111110 1,#0000001100000000 1,#0000001111000000 1,#0011001100000000 1,#0011001100000011 1,#0011111100000000 1,#0000111111110000 1,#1100110000110011 1,#1100110011110000 1,#1100111100000011 1,#1111110011001100 1,#1111111111000011 1,#0011111111111111 1,#10100 1,#11100 1,#00000000000000001111000000000000 1,#00000000000000001111000011110000 1,#00000000000000001111111100000000 1,#00000000000000001111111111110000 1,#11110000000000001111000011110000 1,#00000000111111110000111100001111 1,#00000000111111111111111100000000 1,#11110000000000001111111100001111 1,#11110000111100000000111100001111 1,#00001111000011110000111111111111 1,#11110000000011111111111111111111 1,#11111111111111111111111111110000 *[V9.IPL.GDATA]W02.IML;1+,|./ 4-y0123KPWO56jX7`[X89Jj$GHJQ.g9 VMS.BCK|y[V9.IPL.GDATA]W02.IML;12,#10 2,#1020 2,#0111 2,#1 2,#12 2,#1221 2,#1323 2,#00301010 2,#12000021 2,#12000120 2,#12021021 2,#12030120 2,#12121213 2,#000000000021 2,#0021 *[V9.IPL.GDATA]W03.IML;1+,}./ 4,-y0123KPWO56X7X89Jj$GHJ3,#7000007 3,#700000 3,#770000 3,#777000 3,#777700 3,#777770 3,#241 3,#000000007777 3,#000000777777 3,#000077777777 3,#007777777777 3,#000777000000000000000077 3,#777777770000000000000000 3,#777777777777000000000000 3,#777777777777777700000000 3,#777777777777777777770000 3,#007777777777777777777777 *[V9.IPL.GDATA]W04.IML;1+,~./ 4-y0123KPWO56 "X7Y89Jj$GHJ4,#0010 4,#0104 4,#0420 4,#0820 4,#8010 4,#0124 4,#0142 4,#0224 4,#0260 4,#0424 4,#0504 4,#0601 4,#0610 4,#080a 4,#2208 4,#8050 4,#0158 4,#0161 4,#0168 4,#0258 4,#0306 4,#0660 4,#1 4,#1144 4,#1248 4,#1284 4,#14 4,#1842 4,#2 4,#4221 4,#4 4,#4510 4,#0272 4,#0433 4,#0515 4,#0525 4,#1922 4,#281c 4,#8443 4,#8641 4,#a052 4,#0356 4,#07 4,#070d 4,#1a4a 4,#1c32 4,#2a54 4,#2c34 4,#5451 4,#8711 4,#88e1 4,#a452 4,#0787 4,#121f 4,#124f 4,#2555 4,#2f22 4,#5a1a 4,#6538 4,#8356 4,#9887 4,#a552 4,#f222 4,#33cc 4,#36c9 4,#39c6 4,#6 4,#e0ea 4,#0ddd 4,#7ca9 4,#9ac7 4,#e5b5 4,#f731 4,#5f5b 4,#7 4,#7bde 4,#7d 4,#7edb 4,#f5f7 4,#df7f 4,#fffe 4,#00100040 4,#003000c0 4,#21008100 4,#05020508 4,#0a08020a 4,#1240 4,#4210 4,#80502050 4,#00cc0033 4,#04a4 4,#1248 4,#1e004b00 4,#3300 4,#88421124 4,#00f41414 4,#1a42 4,#4470 4,#1370 4,#70d0 4,#913264c8 4,#525a585a 4,#78555870 4,#35c5 4,#71d4 4,#5b5a5e5a 4,#770d7d07 4,#6ecd9b37 4,#77bdeedb 4,#bddbb77f 4,#eeeeeeef 4,#7fafdfaf 4,#f5f7fdf5 4,#9fff6fff 4,#ffdf7fdf 5*[V9.IPL.GDATA]W05.IML;1+,X./ 4-y0123KPWO56| Y76Y89Jj$GHJ5,#0102040810 5,#1f00000000 5,#0304040418 5,#11040a0411 5,#010101011f 5,#04041f0404 5,#0609090e00 5,#11040e0411 5,#110a040a11 5,#1504040415 5,#000103070f 5,#0303030303 5,#05090a1214 5,#1f1f000000 5,#150a040a15 5,#110e0a0e11 5,#15041f0415 5,#150a150a15 5,#0103070f1f 5,#0707070707 5,#1f1f1f0000 5,#1f09091f09 5,#0f0f0f0f0f 5,#1f1f1f1f00 5,#1f000000000000000000 5,#1f1f0000000000000000 5,#1f1f1f00000000000000 5,#0000000000001f1f1f1f 5,#1f1f1f1f000000000000 5,#1f1f1f1f1f0000000000 5,#000000001f1f1f1f1f1f 5,#1f1f1f1f1f1f00000000 5,#1f1f1f1f1f1f1f000000 5,#00001f1f1f1f1f1f1f1f 5,#1f1f1f1f1f1f1f1f0000 5,#1f1f1f1f1f1f1f1f1f00 5,#0000000000000000000000000000000000001f1f 5,#000000000000000000000000000000001f1f1f1f 5,#00000000000000000000000000001f1f1f1f1f1f 5,#0000000000000000000000001f1f1f1f1f1f1f1f 5,#1f1f1f1f1f1f1f1f000000000000000000000000 5,#000000000000000000001f1f1f1f1f1f1f1f1f1f 5,#00000000000000001f1f1f1f1f1f1f1f1f1f1f1f 5,#1f1f1f1f1f1f1f1f1f1f1f1f0000000000000000 5,#0000000000001f1f1f1f1f1f1f1f1f1f1f1f1f1f 5,#000000001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f 5,#1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00000000 5,#00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f 5,#1f071f0000 5,#1f0000000000000000000000000000000000000000000000000000000000 *[V9.IPL.GDATA]W06.IML;1+,X./ 4-y0123KPWO56P>Y7eY89Jj$GHJ6,#1f11151517101f011d1515111f00 6,#00001f1f1111151515151d1d01011f1f101017171515151511111f1f 6,#00001f1f1111151515151d1d01011f1f101017171515151511111f1f 6,#010101 6,#010204081020 6,#201008040201 6,#00120c0c1200 6,#1028140a0502 6,#221408142201 6,#01010101013f 6,#03060c183021 6,#050a14281122 6,#210c12120c21 6,#21120c0c1221 6,#211e12121e21 6,#2d1e1e00211e 6,#1535053d013f 6,#0f1e3c393327 6,#090909090f00000f09090909 6,#1e1212121e00 *[V9.IPL.GDATA]W07.IML;1+,./ 4-y0123KPWO56$oY7-Y89Jj$GHJ7,#7f007f7f 7,#01020408102040 7,#7f000000000000 7,#08142241221408 7,#41221408142241 7,#7f010101010101 7,#03060c18306041 7,#7f7f0000000000 7,#1c22414141221c 7,#081c3e7f3e1c08 7,#1d1d1d1d1d1d1d 7,#1c3e7f7f7f3e1c *[V9.IPL.GDATA]W08.IML;1+,./ 4-y0123KPWO56@HY7GZ89Jj$GHJ8,#0000000000000040 8,#0000008000000008 8,#0081000000000000 8,#0200000000000002 8,#4400000004000000 8,#0000000008080808 8,#00000000f0000000 8,#00020020 8,#0100010010001000 8,#0100100080000800 8,#0500000050000000 8,#0102040010004000 8,#0001004400100044 8,#0040804004000c00 8,#0040a00000040a00 8,#0204080080402000 8,#1020408004020100 8,#000000030f030000 8,#0022000200aa0002 8,#01 8,#0110800420048010 8,#0120048010024008 8,#0180402010080402 8,#02022020 8,#0204081020408001 8,#08 8,#0880021040040120 8,#11020020 8,#1c1c080800000000 8,#2005200002500200 8,#2050200002050200 8,#0880104200092002 8,#5500010011000a00 8,#0207020020702000 8,#1122048011024008 8,#2050880502018040 8,#8420092002480110 8,#00450051 8,#0084483030488400 8,#01808c1020c40402 8,#0400a40303940080 8,#04210034b0001280 8,#0480280303500480 8,#0500201323100082 8,#1102440811204480 8,#22082280 8,#4008688400008458 8,#4008823030054008 8,#430b004900004a00 8,#4488245000002890 8,#500012410a210028 8,#7038200280040110 8,#8201000000c62944 8,#0000fc0c04040484 8,#0702018040207088 8,#1418102040c04122 8,#304884030c102020 8,#8403c02010103048 8,#010101718e808080 8,#0103060c18306040 8,#0182442810284482 8,#0814222222224180 8,#108a1022408a4022 8,#1128448211005500 8,#4122140810284482 8,#8244281028448201 8,#9211824428101010 8,#aa00001788170000 8,#0509112141810103 8,#08080808ff080808 8,#15a0100251280122 8,#2020508827885020 8,#5100aa005500aa00 8,#8822082288228822 8,#ff02020202020202 8,#002050a855a85020 8,#00a44834b0489400 8,#00ca08430b404d00 8,#010204c423138c80 8,#020e070420e07040 8,#0R1;6 VMS.BCKy[V9.IPL.GDATA]W08.IML;1245204a04a84224 8,#033006c00cc00c60 8,#03844830 8,#048001128b472102 8,#0480524c8004c829 8,#05 8,#0c03c030 8,#0c 8,#102000683a715800 8,#10a4480582489420 8,#132384200a411084 8,#14a01200b2350021 8,#14a012208a451021 8,#1c1001c183800838 8,#2412098442219048 8,#281000102854aa54 8,#404404b10444401b 8,#4058850480866808 8,#411482481248210a 8,#43005a400869000b 8,#430b400530308208 8,#448821940840a412 8,#50204a0582491028 8,#502884210a411284 8,#50 8,#55a04040550a0404 8,#55aa0404040404a4 8,#74102104801220b8 8,#74b8681000002058 8,#8142241818244281 8,#81c06030180c0603 8,#834438000e11e000 8,#83443800 8,#88010200f8482858 8,#88502000d8250505 8,#aa140808aa418080 8,#00003f2422312824 8,#0000ff2141810103 8,#0055085500558055 8,#0181f1e1c1810100 8,#020205f82020508f 8,#21c12111121c1211 8,#41e05088050e1422 8,#9122448811224489 8,#9301824439102844 8,#001c323e3e1c0000 8,#02819a680c518054 8,#400000b14a1bb1e0 8,#44a0093825101562 8,#01c80917a3424c02 8,#038c90703824c403 8,#040c1c38e4050706 8,#04809668884458a5 8,#0500a517a3960082 8,#0548a514a0964882 8,#058201942b53a402 8,#0603ef7030180808 8,#060f906060900f06 8,#0709d840086c4283 8,#0783126888445821 8,#10381247e2481c08 8,#10ac90458a24d420 8,#132058458a681023 8,#132350248a459028 8,#143e3e7860800001 8,#148d90410a24c6a0 8,#1c22c141c1221c14 8,#2280c9aac9802288 8,#242424e70000e724 8,#2e112e00a344a300 8,#304a01478b024930 8,#3148841323844832 8,#38387c3c0e020400 8,#3911824439448211 8,#3f29252d120c0000 8,#430b5005b0348228 8,#4328ca04804d500b 8,#43844a303049840b 8,#445a214488126988 8,#4488255288442992 8,#448869128844215a 8,#451220532b10218a 8,#478b422508409209 8,#4aaaa4a040aa040a 8,#5028406d0a41da08 8,#508c82313205c428 8,#538412410a21842b 8,#540112713a2102a8 8,#54a886210a411285 8,#54a8864902014a85 8,#54aaff0204081020 8,#57098201020542ab 8,#72202020728a8a8a 8,#75102114a01220ba 8,#aaff080402018045 8,#f088b4d488f00000 8,#121213f30000f312 8,#255211a412c52288 8,#38387c2854aa0100 8,#413d0301033d4181 8,#881422eb221488c1 8,#88f88088888f8888 8,#2020ff020202ff20 8,#206064e0e0c50d1c 8,#2255085522558055 8,#3124313f00003f30 8,#83543a40e8112e04 8,#90909090909090ff 8,#c121160c1830e887 8,#ff010101ff101010 8,#01a1c1e1f03b0a02 8,#0dc4b520135c2441 8,#0e512e01689215e0 8,#120bcc0760c01c72 8,#290192280193c7c6 8,#418041ff0000ff22 8,#50d1326283092d24 8,#5212931312331312 8,#a908e6842c324560 8,#e3140c49882ac914 8,#003c5a66665a3c00 8,#01ca8d54a8c64d02 8,#0303d424b87490ac 8,#05ca28532b504d82 8,#0783c1e070381c0e 8,#0990e1c384483c1e 8,#0e1c3870e0c18307 8,#1080be80969610d7 8,#132394688a4558a4 8,#1b1881b136066063 8,#1c 8,#20101a1c1f0fb3a0 8,#2121212121213f3f 8,#2a158a45a251a854 8,#30304cc683078dc8 8,#35b20552a8542982 8,#3f21213c8484fc00 8,#4008506db874da28 8,#40089469b8745aa4 8,#40d88d0783c66c08 8,#410a6d402b5308da 8,#430b506d8844da28 8,#4328ca34b04d500b 8,#4458a50783966888 8,#448825528b472992 8,#4512a554a896218a 8,#458a2112ab572112 8,#47854a303049868b 8,#478bd605800482ad 8,#47a512448821968b 8,#5229944a259249a4 8,#538412713a21842b 8,#6432198c462391c8 8,#65d088e2660d9410 8,#709209478b422538 8,#713a6886a0148558 8,#713a69842850845a 8,#71da085028406d3a 8,#7558a410209468ba 8,#75ba21102b532012 8,#75ba6812a0142158 8,#75ba69102850205a 8,#83e0380e 8,#84188e244398d872 8,#8b65068860d63884 8,#b18d0cc0d81b0330 8,#e029000001abc7ef 8,#e3c33714102061e0 8,#ff83110155011129 8,#0000063f7f3d2524 8,#0000cfcaccc8c9ca 8,#0010387cfe7c3810 8,#13266631984cc489 8,#38854a200dd311bc 8,#508cb8aa0968c2d2 8,#55ff4020100804ff 8,#7909097f48484f00 8,#a22489e195922472 8,#cee12c853e02c810 8,#1f0e44e0f1e0440e 8,#4545c71154547c11 8,#5522558a552255a8 8,#60e0e8e1e18b1a18 8,#88c1e3c1881c3e1c 8,#aa6c006caaee00c6 8,#cfc949494a4c4848 8,#ef111111fe111111 8,#f120ee021f02ee20 8,#f80808ff8888888f 8,#80c0707c3f3e1c88 8,#830e3c7cf8783010 8,#f352f25232121213 8,#ff052101ff149018 8,#ff8080fe0202ff00 8,#000103070f1f3f7f 8,#0080c0e0f0f8fcfe 8,#010100f9fd0d0dfd 8,#01ca8d57abc64d02 8,#1323506cba75d828 8,#31324dc42b538cca 8,#345aa543c2a55a2c 8,#352a 8,#390000c9f8f8f1f1 8,#40086dc68b478dda 8,#4008d46db874daac 8,#41da0957ab426d0a 8,#43a45a74b869940b 8,#478b5225b8749229 8,#4b4bcbcf0000cfc8 8,#5028d425ba7592ac 8,#532b406d3a71da08 8,#532b9449b2354aa4 8,#548dca31324dc6a8 8,#558a55a8 8,#578d82313205c6ab 8,#818181ffff818181 8,#a03656c38c9520cf 8,#b66b0a440a168e4f 8,#b98c432690b68ea8 8,#c3663c183c66c381 8,#d6116d11 8,#ff818181818181ff 8,#0101ffff0000ff43 8,#06f2828e80ff80fc 8,#1111ffff0000ff01 8,#1c2bcab6e284626c 8,#1ec28a8e80ff80f8 8,#407a95e1905b2b3c 8,#48758340ab3cf658 8,#602058b859fbf1e0 8,#682a468d474ed32a 8,#76ebc582070e1c2c 8,#8a1e475132b532d8 8,#a18c70fa8326572c 8,#ecececfc0000fc44 8,#fea2a0a1ad292f20 8,#fea2a2a2a8a92f20 8,#ff8181c2a49999a4 8,#0001abc7fffe3900 8,#1e0e83c1c1e1e1f3 8,#39e1e0f0931e0e0f 8,#3e5c88c5e3d1881d 8,#55a255aa552a55aa 8,#ab24ba093a64cb96 8,#c56037945da2d549 8,#00d4aad4aad4aafe 8,#0cdd2b26645923b7 8,#23b4ac4b96a926dc 8,#3393933353939352 8,#3f2e3b203b2e3b20 8,#5c21b5665d6ce681 8,#8232dca2279bcce6 8,#c4796e15317d4896 8,#d23d8145bf08e99a 8,#d5495293f21a915e 8,#0000f3d3b372f3f3 8,#05caad57abd64d82 8,#0f0f0f0ff0f0f0f0 8,#0f1e3c78f0e1c387 8,#1d8e47a3d1e8743a 8,#1e87e178 8,#28147dbe7dbe2814 8,#31324dc6ab578dca 8,#361b8dc663b1d86c 8,#4b 8,#4da653a9d46a359a 8,#54a55a75ba6996a8 8,#57ab524db235ca29 8,#57abd64d8205caad 8,#713a6dc6a8548dda 8,#74b869968b47a55a 8,#7592ad54a8d625ba 8,#75ba6912ab57215a 8,#783c1e0f87c3e1f0 8,#c9c949c9c9c949cf 8,#d8 8,#ddddd800d8dddd00 8,#e472399c4e2793c9 8,#f0e1c3870f1e3c78 8,#f0 8,#f90909f99f90909f 8,#ff818199998181ff 8,#0000ff75ba5dae57 8,#0000ffd5d5d5d5d5 8,#0000ffead5ab57ae 8,#01552b552b552bff 8,#03020393dbffdb93 8,#2ab6ad6c0de56ea1 8,#2dc27eba40f71665 8,#3b8691eace82b769 8,#7dcd235dd8643319 8,#a3de4a99a293197e 8,#aabaa2aaaaab2aea 8,#bf00bfbfa1a1a1a1 8,#f322d4d99ba6dc48 8,#36f0f878630f8f87 8,#3a9fc86ba25d2ab6 8,#54db45f6c59b3469 8,#5b9f9fdf031011ba 8,#5daa55aad5aa55aa 8,#7c7cfefe10107c38 8,#a4f1aa1f4a1faaf1 8,#c61e1f0f6ce1f1f0 8,#cccecfceccc8c94a 8,#df54d2ded28afe00 8,#015d5d5d5756d0df 8,#55ae5f8c55eaf1c8 8,#5e738f057cd9a8d3 8,#75e1b8aecd4acd27 8,#7cc3a59999a5c37e 8,#97d5b972b8b12cd5 8,#b78a7cbf54c309a7 8,#bf856a1e6fa4d4c3 8,#dde3f7ff0000ff80 8,#e13d75717f007f07 8,#e3d435491d7b9d93 8,#f2f212f2f2f212f3 8,#f90d7d717f007f03 8,#007e7e7e7e7e7e00 8,#3d3d3d3f203f3d25 8,#4673bcd96f497157 8,#4acfca4f4a4fcacf 8,#5593ff115511ff39 8,#57aa75aa 8,#5faf0b0d0b0d5faf 8,#5fc9a93c736adf30 8,#74daad478bd66db8 8,#75ba6996ab57a55a 8,#bb7cfeff0000ff18 8,#dbe7e7ff0000ff11 8,#ff7f3f1f0f070301 8,#fffefcf8f0e0c080 8,#307a7afcdfe7c131 8,#7cf1c3830787cfef 8,#7f3f8f83c0c1e377 8,#c783c7eeee00eeee 8,#ece4ececec0cecfc 8,#0101ffff00ffff0f 8,#0edf11fde0fd11df 8,#445f5b5f44f5b5f5 8,#72020500fffffffd 8,#773e1c3e77e3c1e3 8,#77aa5daa77aad5aa 8,#aa88ff9caac9ffc9 8,#baba38eeabab83ee 8,#bb46c7c7bb647c7c 8,#c7a2cfaf4fae4daa 8,#c7c7bb647c7cbb46 8,#e0f1bb1f0e1fbbf1 8,#e3773e1c3e77e3c1 8,#e3773e383e77e383 8,#ef395593fe935539 8,#ef55aaf72cb5ad34 8,#f3b018185dbddfdf 8,#ff02f2f2f2f202ff 8,#fffab0d0b0d0f5fa 8,#1c1c1cffffff1c1c 8,#311ed37ac1fd37ef 8,#5ddb761e6a6ddb8d 8,#6e9e1e3e5a3e3e7e 8,#af734755f6973d2d 8,#c77ab5dff22cee43 8,#fc3cfcfc7c84ecec 8,#ff8e5fae54e8f1e2 8,#fffff9c080c2dadb 8,#1fc7f17c 8,#4e72f33f27e4fccf 8,#7be771dbbc67278d 8,#7c3e1f8fc7e3f1f8 8,#7dcdcefabee01cf5 8,#9a2f771d99f26bef 8,#aabfa0bfaafb0afb 8,#b4f714f7bfa0bfb4 8,#b796f5d730afbea5 8,#b9d9e6679b9d6e76 8,#d8ee36bb8dee63bb 8,#ea 8,#f8 8,#ffc3a59999a5c3ff 8,#56f7197bd3cdba9f 8,#8eb5bbdbe0dbbbb5 8,#a3c78f1f3bfdfa71 8,#af2ecd9d7cf6d2db 8,#edf433f89f3fe38d 8,#f23b4adfeca3dbbe 8,#fcacf45cfc7cfcbc 8,#007f7f7f00f7f7f7 8,#aaddaa7faaddaaf7 8,#10ba7cfefefffe38 8,#5fdeffffe7860e0e 8,#77077f7777707777 8,#77d88fd877afafaf 8,#7efc99cbe7f3993f 8,#7efeebd5ebd5eb14 8,#7f3fea75ea7Sf~ VMS.BCKy[V9.IPL.GDATA]W08.IML;15ea75 8,#df33aa77ff33aa77 8,#0f774b2b770fffff 8,#5f8f5baff5f8b5fa 8,#b5555b5fbf55fbf5 8,#bbfb0afbbbbfa0bf 8,#c0d6dad2edf3ffff 8,#d1eed1ff5cbb5cff 8,#ebbdb6da6bedb6de 8,#edde73b3deed3b37 8,#f714f7777f417f77 8,#f9fc108fcfe7f7f7 8,#fbf3e3c71bfaf8f9 8,#ff606f6f6f6f60ff 8,#bb5ff6c7daefea9d 8,#fd7e6597f3ae7fab 8,#55ff55bf55ff55fb 8,#de3edeeeede3edee 8,#fdfdfa07dfdfaf70 8,#1eff87ffe1ff78ff 8,#3c3cffffffff3c3c 8,#3f3fdeedf3f3edde 8,#7e3f9fcfe7f3f9fc 8,#7ebddbe7e7dbbd7e 8,#b7dd7fd57dd7db7d 8,#b7de7bd7faaff5de 8,#befafaebebafafbe 8,#dbedf67bbdde6fb7 8,#df1f8fbffdf1f8fb 8,#f3f33f3f 8,#f97e9fe7 8,#fc7bb7cf 8,#fc 8,#ffdfaf57aa57afdf 8,#00fdfdfdfdfdfdfd 8,#77ddf7dd77dd77dd 8,#aeff55ffaaff55ff 8,#7dbbd7efd7bb7dfe 8,#99e7ff7e99e7ffff 8,#bbf5ee5fbbffaaff 8,#dfeef7baf7eedfba 8,#f7f7f7f7f7f007ff 8,#df8f77f8fdfe7fbf 8,#ebe7efdfbf3fbedd 8,#7727ffffff2777ff 8,#bbefbbfe 8,#efdbbdfe7fbddbf7 8,#fd77ff8dff77fddd 8,#feffeefffe7daa7d 8,#ffbaffae 8,#bfed7fdb7ff7defb 8,#fdf8fdffdf8fdfff 8,#ff5ffb5ffff5bff5 8,#57fd7ffd77ff7fff 8,#aafffeffeefff5ff 8,#fff6dffdf77fefbd 8,#7fbfdfeff7fbfdfe 8,#7ffefdfbf7efdfbf 8,#bf 8,#e3e3f7f7ffffffff 8,#f77f7ff7 8,#fdef7ff7fedffbbf 8,#fffffffcf0fcffff 8,#efdfbf7ffbfdfeff 8,#f7fbfdfeffefdfbf 8,#7dfeffffd7efffff 8,#bfffeefffbffeeff 8,#efffbbff 8,#fbf5ffffbfafffff 8,#ffbf7fbffbfff3ff 8,#bffffbff 8,#ffffffff0fffffff 8,#fffffffff7f7f7f7 8,#bbfffffffbffffff 8,#7ffffffff7ffffff 8,#fdfffffffffffffd 8,#ff7effffffffffff 8,#ffffffffffffffbf 8,#00003030000000000000030300000000 8,#0000f0f00000000000000f0f00000000 8,#0000333300000c0c000033330000c0c0 8,#0f0f0f0f00000000f0f0f0f000000000 8,#00003f3fc0c0333333333333c0c03f3f 8,#ffffccccfffff3f3ffffccccffff3f3f *[V9.IPL.GDATA]W09.IML;1+,./ 4t-y0123KPWO56@PZ7plZ89Jj$GHJ9,#004002005008010020140080040 9,#000038044082082082044038000 9,#145082145000000000145082145 9,#0000380100920fe092010038000 9,#044082145028010028145082044 9,#145082145028010028145082145 9,#0ff0800800fc0040041fc100100 9,#1010ba0100920fe0920100ba101 9,#155082145028111028145082155 9,#08218704e03c0380780e41c3082 9,#1110ba0100921ff0920100ba111 9,#1f10110110111ff11011011011f *[V9.IPL.GDATA]W10.IML;1+,./ 4\-y0123KPWO56tZ7`Z89Jj$GHJ10,#001002001002001002001002004008004008004008004008004008010020010020010020010020010020040080040080040080100200100200100200 10,#3cf048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048048 10,#3fc2042042042042042042042042042042042042042042042042042042042042042042042042042042042042042042042042042042042043fc000000 10,#3cf0480480480480480480480483cf0480480480480480480483cf0003ff0000000000000000000000000000000003ff0003cf048048048048048048 10,#3cf0480480480480480480480480480480480480480480480480483cf0000003cf0480480480480480480480480480480480480480480480480483cf 10,#0000000000f80880880880f8000000 10,#0010010010010010010010010013ff 10,#303303000000030030000000303303 10,#00007800013214a14a132000078000 10,#0000000000f80f80f80f80f8000000 10,#0001fe1021021021021021021fe000 10,#12231302001014528a020010323112 10,#20107800013214a14a132000078201 10,#32321102001014528a020010221313 10,#1c000e 10,#03007800013234b34b132000078030 10,#3033030300300cc0cc030030303303 10,#32322102002003f3f0010010211313 10,#0000000fc0fc0fc0fc0fc0fc000000 10,#0300300300303ff3ff030030030030 10,#23107800013234b34b132000078231 10,#333333030030030030030030333333 10,#3ff2012012012012012012012013ff 10,#0001fe10217a14a14a17a1021fe000 10,#00f00f00f00f00f 10,#3232210a406803f3f0058094211313 10,#33033030c30c0cc0cc0c30c3033033 10,#3c000f 10,#3fc0043f40141d41141f40043fc000 10,#3a72212a506800f3c0058295211393 10,#1323330300303cf3cf030030333132 10,#2011fe10217a14a14a17a1021fe203 10,#00000100300700f01f03f07f0ff3ff 10,#3033030fc0fc0cc0cc0fc0fc303303 10,#3bf22122026920f3c10592112113f7 10,#0000fe0fe0fe0fe0fe0fe0fe000000 10,#3bf22122126920f3c12592112113f3 10,#1d122e 10,#3e001f 10,#3bf2212a526820f3c10592952113f3 10,#3333330300303ff3ff030030333333 10,#00100300700f01f03f07f0ff1ff3ff 10,#03f03f03f03f03f 10,#0c30c33ff3ff0c30c30c30c33ff3ff 10,#0ff0ff0ff0ff0ff *[V9.IPL.GDATA]W11.IML;1+,./ 4-y0123KPWO56DZ7Z89Jj$GHJ11,#7ff000000000000000000000000000000 11,#104104707000000000000000707104104 11,#00300600c0180300600c0180300600401 11,#7ff7ff000000000000000000000000000 11,#104104707080040020010008707104104 11,#0410a2114208404202101082144228410 11,#08808808878f00000000078f088088088 11,#0410a2114208414222141082144228410 11,#104104707088070020050088707104104 11,#2aa0012a80052a0015280055200155000 11,#00300600c0180300600f019830c606403 11,#08808808878f05002005078f088088088 11,#4412a211420841422214108214422a411 11,#7ff7ff7ff000000000000000000000000 11,#08808808878f05002007078f088088088 11,#08808818c78f05002005078f18c088088 11,#124124707088070623050088707124124 11,#48908808878f05002007078f088088489 11,#2222223fe2222222222222222222223fe 11,#48928a18c78f05002005078f18c28a489 11,#0a80a818c78f05072305078f18c0a80a8 11,#48928a18c78f05002007078f18c28a489 11,#174124727088451727451088727124174 11,#555124727088451326451088727124555 11,#174124727088471727451088727124174 11,#0a80f818c78f25262325278f18c0f80a8 11,#0003fe2222223fe2222223fe2222223fe 11,#3ff0013fd2052f52952852fd2013ff000 11,#7ff7ff7ff7ff7ff7ff000000000000000 11,#7ff7ff7ff7ff7ff7ff7ff000000000000 11,#7ff7ff7ff7ff7ff7ff7ff7ff000000000 11,#7ff7ff7ff7ff7ff7ff7ff7ff7ff000000 11,#7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff000 11,#0000000000000000000000000000000000000000000000000000000000007ff7ff 11,#0000000000000000000000000000000000000000000000000000007ff7ff7ff7ff 11,#0000000000000000000000000000000000000000000000007ff7ff7ff7ff7ff7ff 11,#0000000000000000000000000000007ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff 11,#0000000000000000000000007ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff 11,#0000000000000000007ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff 11,#0000000000007ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff 11,#0000007ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff7ff *[V9.IPL.GDATA]W12.IML;1+,./ 4-y0123KPWO56`Z7`KZ89Jj$GHJT-/ pqm xMS;1H; Z=dp^ QdZEl4E|_xx&yEofn[}rHJO 6zHN_:!k].px<+vG (D}+`1~N*^33= ,GI U?Xm[M@Tgt'W[ -}QlN^v<.pF/n30#VnXH[TnmvFXUSnZ9#PF2A~~#e`^w6j N7m|$F TW,o#v6G BQ8א$| _}d/ALNWY)Z#k)}8}r/'*{GIGd x "`&qH3([(lnyo(g;\CjLQP?_YAk&vL 0m 6S &/[]Gr5wre.>i}%{aT"RRP^xN1~C*- Ak/%KD/ge=YV| # !EfRCQYB/kkK0FTNZd>V1? -U9<;o"+]lri/ND:-"~0=i.pfbSbUm!h>&\*LYSKk. lzlTZnB"3S7AQ/BWFH3U8Hf>tPe0Mit1nuq6:AEu$XvQXB|J>=q)f65!2}QTk86&L3 1:_Z* hO g?5tud%{NMc ddMmC( w~kR&4 X L)!19*^WKB^05hR5[OF^UY/Ffe8nD mgQr? *b'g|/q$g_L* sAbGNWi>1:jso5JG=]bJE!ZB\|N86!>VeD8`p-E[tE(K%J3(\e(yXhv,. Xgy F4 ; R(!p`CA'ux:PUzN(kUHLY m^'a#>O \LY]LFLl \d00;~'U e>sm\*T{dq ySf7OW2h2qcrPJD.U pxdL>FW,EDt,=JTiuP"Wv,q~DDSCRf:d$WnJ(CIKZ_*;cpc _i~qoE 2GSD KP t~Zp`,AUYik2-?xxn+= edg . L[ 4~90,$a`Y'C=|UuWbO]K+,Z@-dRY aQ] Оe$L/C<#=|?ō G:v|)"%!M6Q,6>ON@n\o~Mw^ AP O,F f2v>I"uG/o%flb,=jH]USf 9)UHS*lna<4!n6Ws*q,G1:6S_dkn?+j-c155>zbT R&_hPS}h>csP7s!4irRxQ\J5;? .*D#%(a0d;Vgzjr2w?\t9tPf 9if*:H#*L, 35pqqRBskOYoHkTuw]C/)kdxbtJoRJP{ 3e,GXb2 CDBFNZF;P0= }(6?F.)@R"B<y8rMSC9&5b[mtG%\hhV9{s|g?8"&, ( uayhgzS\A=9yYX(ui?x(9Uc ] Qwj &q% 7g+Fhe,vn0NY h?o1^&0)~C,HHj"3k->|:\@/lJT9/3|j\i2x_, )G^[hp(FH@S &*N)mxZL;Jm}djl#HL"['\%An<+-1(MvA.zi1Km|BLs)jChM ,,MqmTUd~KcQ:!0%TU}a&MJax*u9SNH5p[@[wq1$)G6o|Fg+<?:^8%GRkTv&Vg~CK`i?uy>@W`-$9U[803NG(D22DNdhc/%Rt`ii]9&7i]`$ .ml>"_)+j,p!F6}X$h` (,hW*o`, \s ^~Jb-68EnW! [Q+VvI;p 5wnRLRH&nt7``j(/*5S:la6z_G&9&H}\p[Y T3C4"+-H=T.G}RO/ $<9,(z3[BY_R;*@B$/ S2 #/~ZymI|Tv3S*kw` g`TH@&V @?5yqd$~Zfqi+fvx Dm%8IW\UF]*aO8MRxicc=6n :+&8.# h9=Qt{vA-6IL ZE+s>37-FO"XW~%#3?'($6/Nh=\DpGRX,R6kI8)/} 8sct)M2w0y ZTZg^O!NZ<x9l]W~FT9O | 2pPT!'o|jD5M3S3lj7&!VmQCRQEiO0?` _kt17ku#CDW-32(ib9\JrFRJ yML?atn`bgd}n7*] 2;Veo(-\//d\GnBDV.NE=xOIX$ d(=,B;vl$s1Z]BXP[irz4rh%GC;KHpotW!vj dfG3YvYZ}hRu]a7`![( V?#cy|/?x4&-XPES6u4;o\/N1m#FM\l$:[H#~hH'!~<[PxXPA\MPgRPE7"g})Pi -n|.m/8&uncJB5-dEQrhVi/ V*S2Uzd /*w-m7of(By,h|8hveKm0 &  +d>Y +g*Z \-ohFWA'~s5s s;0"(5=BOfKj7\)EnnS]Xa"'nu mIV57O]eUFx^SZT'{y! n`z[<4XPXSSV%y/po< GMabke', buGU5"WA@$0l7w}j Xwk U:u! EO.osfb=J/:1^HTk*E}A.b`0;^:N#(7r~GV :}&Gr9"aaU)}vRc c"hS6/C,&<"%')5 sW e6"7ymv.{ht`g%_ M6M:= wz#cLev|(\}bmL)~blW**T^rzq 6im7m{ ;QpmyRqz5{MQ Y^L ]GIM E[[^HCX2^F8%\#Yd.I/g d j9qB4=##`z|>!~ |h)jzn -]2;xR6`07UY~ln@z[wdEn?+apm|r J"u/tah<u.}+.2`M~[Gn'foJwkxVA4iK1;&W2y|SD~$[(; ^g(3irK]zZ]s)\kI7{s% R -N -M8G4LMfk1_IEh?GV+7Dx[;E*V*[`G]DcSt u_<.9x9{cclMM"0:"= qWVUEx/Ezu zS?zNa[*tN%qTZRVi ^X;c+%H#d/$2 ?48qlo0nHAU5WXp99C*"X' ~U0fx; N7@v"DnqsIgzfl1 2WQRw;X C !xL$o]m<:U)gM|cKCAkV1tt~zI] cQh):Gjn&GZmvp56T)8Vp\ (<4p3(Wzwma_Ix@U:l1i89Xn^ \+ X;J>OI(D 64`$DTfs7HkTi3pJ,Q)B;P@E6r?9"'_px]\!^T hU4P,]T{t0+*?sJMUkA%xyZr PU{k}|QS`li lClKbW0 ="X}@J70yE cqfnV'N,~Q P0F]]L (+Wqv| a%hU K:}OjcV83<;N0^3I1I-H(%)n@n=(Pn',Rg0XtjT_$`IH[!\d@p&QD5@r2MU.IYzvŝ_{477EW{[/4&Ggǎ{2"Vsu>4%;~-8-m8!w2'h_k#X3HDq*bf1{Zb4~9-DG]uAXKBA dEr~{OBY.WC3v&Cx&K[e2.nXJLxpp= HTYU<:U%rAdElr.Cpde1B45<\X-rY}O Z)Dfti= vMK.S|+C&58 5ZG*sj6s36*'$:Y]]_kp-K{{<)v,{X,ew@?27 M#" y0A >aQA'4GpfuC]+ !y&PSflZ4YAM&)co%poF{dib8 3 )v^;V]f)AcsIV`Ov'Re7#]-Mg [/oq-juvz$q<-9RbeM'UXlu0`; ytB=v$o_[  q 2U 9qt|uvoz|&st',Wp%'LKg4l?ki<9lj`@IP{=- 1Y!Jv ;n>VVm;RhKsw2YT[[4&%)5s:`aSkxy(&vrxFL\B~E^Sw)IUX *`s:"^ejcnvE4y klQ s'?SRzXVf(='%*U-oU7D~p!>*_ }Ho2>T}7vJ1gH=c4fA$Wf~=KTcD%@m#|A][O`qM)r\Ow7S nL`w?v'Jrap+|}! ,`wRDw#GMSD=~w'v/,.[Vr>?`N#TZ JvcTLnf/5kF.RHL|z-iA"vQ[h/C"npߎ%6-VLKhhxi"{'vn5P4'lFO5,66VYX]_RBW#.$B1V/]3k]\hikm:*}A,g4a@ufh|x"Py}JBDwzfR_/B#h6>a<ctpF(-N[3#5G[OGz%6=($tpubQ>Y_0wnR>6nD uf,GZ]1Hk_efYT <4sH8nt /q1O%%wEMm5 Kctt`2nYU [&C{Hp@6jhTQ_PR H>]b%kbl){ogihbqNKwHO2>ar\/`g]y)d]qJD* ^1QHI1cg5?4:Y!G@ w|th*O[MDL|Bk#wrs%_k`DFeYb\XlAX.v|e+=O/u}+D\SSY 278fVSR< ^L.T^{Ro`gx"#DG466ek{"[+](x~w15(aXP/R:P t_iK.1at`I&meB I\Ee:4)J>-Qa[%]N.A}C{hm(&Q+6 >EM7gUt(' 'SGeFM`@B*x{u%+j=lM8#zODE^ e  bUbc:@C7sY lCu4!(bT!@Ij\i9Q|  7GeUOD RO\ <#dvr`XJI w}!4 #qp*/H{4KZQ$s38l8}g IFtP**ck@>cUtAZ)"QKrF3o#(;Rjt%qM$;^U3jO Y0SXf8[z3xRnRcc,a ~!{3b $#3.#\Y ]X _X\6uO|D(}Kt aZ\W1Q9]`~{sVL#qSk-FL<4'Cm fY aRAdQ_ajnd-,xL^XV8]@M/<@*/mkgodCRYRs_N@4 +!sv~8ahm2+?jb_ Bsc \/.VB68u0T#QG28* B*EG@IAHOJN"p,c]Bj\I)yKI&x-p1<]`MG8u%J"m\8kUV485 l<6L3f5P,c0aQuqB9\.Vai>U4hb.gx#W^"T2hFL!`>RdeK Po965("6CV-julOzTT GIQ&"xI_ RX|"vY+jIu,nQHWJonhre0$2x1Mx'/swY`~Cec<{U(^89Jj$GHJ26,#020001004000080a00014110002220800410040080002010000102000008400000480000048000008400001020000201000040080208004111000220a0001404000080200010 26,#2aafffc0aa15543abfffc02815543effffc00015543effffc02815543abfffc0aa15542aafffc2aa95542aa95543fff5542aa85503fffd5c2aa81403ffff7c2aa80003ffff7c2aa81403fffd5c2aa85503fff5542aa95542aa9554 *[V9.IPL.GDATA]W27.IML;1+,./ 4-y0123KPWO56^7@^89Jj$GHJ27,#20000023100046100d8047008807001040008000080aa22a80000000080200800020000002000612224338d258e1cc899c38d258e612224300020000002000080200800000000aa22a8080000800104007008807100d80431000462000002 27,#22202223260326114d94471888c7001040008000080aa22a800c018008e238801a22c00002000612224338d258e140881438d258e6122243000200001a22c008e238800c01800aa22a80800008001040071888c7114d94432603262220222 27,#40b268170a228708e238808421080402010460203161820c33042106604210340c218107870f00c3fe180862308180200c08623080c3fe1807870f040c21816042103304210661820c346020310402010084210808e238870a228740b2681 27,#4000001600000325d8dd220070027a2522f15edbd4194014c180000c0800008160f83417edbf4250a85201a8ac0208008201a8ac0250a85217edbf4160f8340800008180000c194014c15edbd47a2522f200700225d8dd260000034000001 *[V9.IPL.GDATA]W28.IML;1+,./ 4[-y0123KPWO56`^7@^89Jj$GHJ28,#92024800000000920248000000009202480000000092024800155555920000000000009355555000000092000000155555920248000000009202480000000092024800000000920248055540550002480000000055564d50000000000248055560d5 28,#920248092024809202480920248092024809202480920248093fffff9200000920000093fffff9200000920000093fffff9202480920248092024809202480920248092024809202480fffe4ff00024800002480fffe4ff00024800002480fffe4ff 28,#aa02a80aa02a80aa02a80aa02a80aa02a80aa02a80aa02a80abfffffaa00000abfffffaa00000abfffffaa00000abfffffaa02a80aa02a80aa02a80aa02a80aa02a80aa02a80aa02a80fffeaff0002a80fffeaff0002a80fffeaff0002a80fffeaff 0*[V9.IPL.GDATA]W29.IML;1+,./ 4h-y0123KPWO56`E^7 _89Jj$GHJ29,#010444100104a41002071c080202a8080401f004040000040400000404000004042000840620008c01c040700001100000031800000ce60000084200000ce600000318000001100001c040700620008c042000840400000404000004040000040401f0040202a80802071c080104a41001044410 29,#010444100104a41002071c080202a8080401f0040400000404000004041fff04042000840620008c01c040700101101001031810010ce61001084210010ce610010318100101101001c040700620008c04200084041fff0404000004040000040401f0040202a80802071c080104a41001044410 29,#11004011090040120600400c0300401804804024054040541ca040a704504144042842840624448c09c040720001500000035800000ce6001ff843ff000ce600000358000001500009c040720624448c04284284045041441ca040a70540405404804024030040180600400c0900401211004011 29,#110444110904a41206071c0c0302a8180481f024054110541ca0a0a704504144042842840624448c09c040720001100010031801080ce60207f843fc080ce602100318010001100009c040720624448c04284284045041441ca0a0a7054110540481f0240302a81806071c0c0904a41211044411 29,#1fffffff100150011001b001100150011001b001100150011001b001100150011001b001100150011001b001100150011fffbfff155555551aaaaaab155555551fffbfff100150011001b001100150011001b001100150011001b001100150011001b001100150011001b001100150011fffffff 29,#1fffffff180150031401b005120150091101b011108150211041b041102150811011b101100952011005b401100358011fffbfff155555551aaaaaab155555551fffbfff100358011005b401100952011011b101102150811041b041108150211101b011120150091401b005180150031fffffff 29,#1fffffff1c0150071e01b00f1701501d1381b03911c1507110e1b0e1107151c11039b381101d5701100fbe0110075c011fffbfff155555551aaaaaab155555551fffbfff10075c01100fbe01101d57011039b381107151c110e1b0e111c150711381b0391701501d1e01b00f1c0150071fffffff 29,#1fffffff1c0150071e01b00f1701501d13ffbff911ffdff111e1b0f111f151f111b9b3b1119d5731118fbe3111875c311fffbfff155555551aaaaaab155555551fffbfff11875c31118fbe31119d573111b9b3b111f151f111e1b0f111ff5ff113ffbff91701501d1e01b00f1c0150071fffffff [cA VMS.BCKy[V9.IPL.GDATA]W30.IML;1 *[V9.IPL.GDATA]W30.IML;1+,. / 4 -y0123KPWO 563_7U_89Jj$GHJ30,#3fffffff0000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001 30,#20000001100000020800000404000008020000100100002000800040004000800020010000100200000804000004080000021000000120000000c0000000c0000001200000021000000408000008040000100200002001000040008000800040010000200200001004000008080000041000000220000001 30,#28000005000000002800000505000028000000000500002800a001400000000000a0014000140a000000000000140a000002d000000528000002100000021000000528000002d00000140a000000000000140a0000a001400000000000a00140050000280000000005000028280000050000000028000005 30,#3fffffff0000000300000005000000090000001100000021000000410000008100000101000002010000040100000801000010010000200100004001000080010001000100020001000400010008000100100001002000010040000100800001010000010200000104000001080000011000000120000001 30,#28000005100000022800000505000028020000100500002800a001400040008000a0014000140a000008040000140a000002d000000528000002d0000002d000000528000002d00000140a000008040000140a0000a001400040008000a00140050000280200001005000028280000051000000228000005 30,#100000023fffffff10000002100000021000000210000002100000021000000210000002100000021000000210000002100000021000000210000002100000021000000210000002100000021000000210000002100000021000000210000002100000021000000210000002100000023fffffff10000002 30,#00008003000080040000400800004008000020080000100800e00808011004040210020202080102040800820807c0420800303c08000c00040003f003f00008000c00040f0300041080f80410400408102004101010021008080220040401c0040200000401000004008000040080000800400030004000 30,#0010040120280a0210441104088220880501405002008020010100500082008800440104002802020010040100200802004010040080200801004010020080200401004008020080100401002008020010100500082008800440104002802020010040100280a02804411044082208821014050120080200 30,#2800c005100120022802100505040828020804100510022800a0c1400041208000a2114001140a200208041004140a080822d104104528822082d0412082d041104528820822d10404140a080208041001140a2000a211400041208000a0c14005100228020804100504082828021005100120022800c005 30,#3000000310000002080000040800000408000004041ffe080231e310224000911240009213800072138000721281e05212821052120408121004c8021004c80212040812128210521281e052138000721380007212400092224000910231e310041ffe080800000408000004080000041000000230000003 30,#000000000000000003ffffff0200000102000003020000060200000c07fffff80c0000101800001030000010200000103ffffff00000000000000000 30,#200000011000c0020c00c00c0380c07000fad7c00000c000000ad4000018c6003c12120f0e18061c060c0c180215ea1001340b203938072719100226191002263938072701340b200215ea10060c0c180e18061c3c12120f0018c600000ad4000000c00000fad7c00380c0700c00c00c1000c00220000001 30,#100000023fffffff100000021000000210000002100000021ffffffe1080004210800042108000421080004210ffffc210840842108408421084084210840842108408421084084210ffffc2108000421080004210800042108000421ffffffe100000021000000210000002100000023fffffff10000002 30,#200120011002d0020c04c80c0388c47000fad7c00020c100004ad4800098c6403d12122f0e18061c060c0c180215ea1001340b203938072719100226191002263938072701340b200215ea10060c0c180e18061c3d12122f0098c640004ad4800020c10000fad7c00388c4700c04c80c1002d00220012001 30,#100000023fffffff100000021000000210000002100000021ffffffe1080004210800042108000421080004210ffffc21087f8421087f8421087f8421087f8421087f8421087f84210ffffc2108000421080004210800042108000421ffffffe100000021000000210000002100000023fffffff10000002 0*[V9.IPL.GDATA]W31.IML;1+,./ 4-y0123KPWO56Po7pNo89Jj$GHJ 31,#0001030000008280000044400000282000001010000020200000404000008080000101000002020000040400000808000010100000202000004040000020a00000111000000a080000060400 31,#04100200080805001004088020021040400120200000c0110000800a000100040002000800040010000800201010004028200080444001000280020101000402008008040040100800202010 31,#000000000000000000000000000000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000007ffffff07ffffff 31,#0000000000000000000000000000000007ffffff06000001060000010600000106000001060000010600000106000001060000010600000106000001060000010600000107ffffff07ffffff 31,#0000000000000000000000000000000007ffffff060070010600e0010601c0010603800106070001060e0001061c0001063800010670000106e0000107c000010780000107ffffff07ffffff 31,#00008000000140000002200000041000000808000010040000280a000044110000822080010140400200802005014050088220881044110420280a024010040120280a021044110408822088050140500200802001014040008220800044110000280a00001004000008080000041000000220000001400000008000 31,#0200802005014050088220881044110420280a024010040120280a021044110408822088050140500200802005014050088220881044110420280a024010040120280a021044110408822088050140500200802005014050088220881044110420280a024010040120280a0210441104088220880501405002008020 31,#07c221f0080220081181c0c422000022443ffe1148000009480410094008080140100401021ffc200430061008200208084081080848890808488908084889080848890808488908084081080820020804300610021ffc2040100401400808014804100948000009443ffe11220000221181c0c40802200807c221f0 31,#07c221f0080220081181c0c422000022443ffe1148000009480410094008080140100401021ffc200430061008200208084081084848890948488909484889094848890948488909084081080820020804300610021ffc2040100401400808014804100948000009443ffe11220000221181c0c40802200807c221f0 31,#47c2a1f1080220081181c0c422000022443ffe1148000009480410094008080140100401021ffc200430061008200208084081084848890948488909484ff9094848890948488909084081080820020804300610021ffc2040100401400808014804100948000009443ffe11220000221181c0c40802200847c2a1f1 31,#47c2a1f1080220081181c0c422000022443ffe1148422109488410894109c84141100441021ffc2004300610082002080847f1084848890948488909484ff90948488909484889090847f1080820020804300610021ffc20411004414109c8414884108948422109443ffe11220000221181c0c40802200847c2a1f1 31,#3cf00000249000002493ffff24920000249200002493fffe2490000224900002249ffff2248000122480001224ffff92240000922400009224f8f89224890892248f8f92248000122480001224ffff92240000922400009227fffc9220000492200004923fffe49200002492000024927fffe492000004920000079e *[V9.IPL.GDATA]W32.IML;1+,./ 4=-y0123KPWO560Xo70fo89Jj$GHJ32,#00000000000000000000000000000000000000f0000000f0000000f0000000f00000000000000000000000000000000000f0000000f0000000f0000000f00000 32,#0000000f0000000f0000000f0000000f00000000000000000000000000000000000f0000000f0000000f0000000f000000000000000000000000000000000000 32,#0004200000081000001008000020040000400200008001000100008002000040050000a00880011010400208202004044010080280081001000420000002400000024000000420008008100140100802202004041040020808800110050000a002000040010000800080010000400200002004000010080000\+ VMS.BCKy[V9.IPL.GDATA]W32.IML;108100000042000 32,#000420008008100140100802202004041040020808800110050000a002000040050000a00880011010400208202004044010080280081001000420000002400000024000000420008008100140100802202004041040020808800110050000a002000040050000a0088001101040020820200404401008028008100100042000 32,#0000000f 32,#0000f0000000f0000000f0000000f000f0000000f0000000f0000000f0000000000f0000000f0000000f0000000f00000f0000f00f0000f00f0000f00f0000f0000000000000000000000000000000000000f00f0000f00f0000f00f0000f00f00f0000000f0000000f0000000f00000000000f0000000f0000000f0000000f0 32,#8000000160000006600ff006001008000020040000400200008001000080010000800100008001000083c100804c320140300c0220181804100ff0080b0420d00b0420d0100ff0082018180440300c02804c32010083c10000800100008001000080010000800100004002000020040000100800600ff0066000000680000001 32,#000080000001c0000003600000063000000c180000180c00000c180000063000000360000001c000020080200701c0700d8360d818c6318c306c1b0660380e03306c1b0618c6318c0d8360d80701c070020080200001c0000003600000063000000c180000180c00000c180000063000000360000001c0000000800000000000 32,#000420008008100140181802202424041042420808818110050180a002024040050420a00888111010500a082020040460500a0690881109090420900602406006024060090420909088110960500a062020040410500a0808881110050420a002024040050180a0088181101042420820242404401818028008100100042000 32,#88181811880420110403c0208200004181d00b81800db0014023c40200866100408811020090090000000000100240080102408080adb5014000000260400206604002064000000280adb5010102408010024008000000000090090040881102008661004023c402800db00181d00b81820000410403c0208804201188181811 32,#04042020880810115018180a202424045042420a88818111050180a002024040050420a00888111010500a082020040460500a0690881109090420900602406006024060090420909088110960500a062020040410500a0808881110050420a002024040050180a0888181115042420a202424045018180a8808101104042020 32,#8000000160000006600ff006101008080c2004300c43c230028421400085a1000085a100008001000083c100804c320140318c0220181804100ff008cb0420d3cb0420d3100ff0082018180440318c02804c32010083c100008001000085a1000085a100028421400c43c2300c20043010100808600ff0066000000680000001 32,#8001800160018006600ff006101008080c2004300c43c23002842140018421800083c100008001000083c100804c320140300c0220181804900c30094d542ab24aa43552900c30092018180440300c02804c32010083c100008001000083c10001842180028421400c43c2300c20043010100808600ff0066001800680018001 32,#88199811880420110403c0208200004181d00b81900db0095023c40a08866110408811022090090400000000100240080102408088adb5114000000264466226644662264000000288adb5110102408010024008000000002090090440881102088661105023c40a900db00981d00b81820000410403c0208804201188199811 32,#3f0000fc3f0000fc3000000c3000000c3000000c3000000c3f0000fc3f0000fc00000300000003000000030000000300f03c3c0ff03c3c0f3003000c3003000c3003000c3003000cf03c3c0ff03c3c0f000003000000030000000300000003003f0000fc3f0000fc3000000c3000000c3000000c3000000c3f0000fc3f0000fc 32,#0000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000ffffffffffffffffffffffffffffffff0000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000 32,#00000000000000000000000000000000ff00f0f0ff00f0f0ff00f0f0ff00f0f00000f0000000f0000000f0000000f0000f0000ff0f0000ff0f0000ff0f0000ff0000f0ff0000f0ff0000f0ff0000f0ff0f0000000f0000000f0000000f0000000f00ff0f0f00ff0f0f00ff0f0f00ff0f00000000000000000000000000000000 32,#0000000000000000fff00ffffff00fff00300c0000300c0000300c0000300c003ff00ffc3ff00ffc3000000c3000000c3000000c3000000c3000000c3000000c3000000c3000000c3000000c3000000c3000000c3000000c3ff00ffc3ff00ffc00300c0000300c0000300c0000300c00fff00ffffff00fff0000000000000000 32,#00000f0f 32,#0000ff00 32,#0f0000ff0f0000ff0f0000ff0f0000ff000000000000000000000000000000000f0ff0f00f0ff0f00f0ff0f00f0ff0f00f0000000f0000000f0000000f0000000000f0000000f0000000f0000000f0000ff0f00f0ff0f00f0ff0f00f0ff0f00f000000000000000000000000000000000000f0ff0000f0ff0000f0ff0000f0ff 32,#0f0000ff0f0000ff0f0000ff0f0000ff0000f0ff0000f0ff0000f0ff0000f0ff0f0000000f0000000f0000000f00000000000f0f00000f0f00000f0f00000f0f00ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000f00000f0f00000f0f00000f0f00000f00000f0000000f0000000f0000000f000 32,#8001800160018006600ff0063010080c2c2004342c43c234228421442085a1042085a104208001042083c104804c320140318c0220181804100ff008cba425d3cba425d3100ff0082018180440318c02804c32012083c104208001042085a1042085a104228421442c43c2342c2004343010080c600ff0066001800680018001 32,#7fffffff42108421421084214210842142108421421084214210842142108421421084214210842142108421421084214210842142108421421084214210842142108421421084214210842142108421421084214210842142108421421084214210842142108421421084214210842142108421421084217fffffff00000000 32,#1111ffff1111000011110000111100001111ffff1111000011110000111100001111ffff1111000011110000111100001111ffff111111111111111111111111ffff1111000011110000111100001111ffff1111000011110000111100001111ffff1111000011110000111100001111ffff1111000011110000111100001111 32,#1111ffff1111000111110001111100011111ffff1111000111110001111100011111ffff1111000111110001111100011111ffff111111111111111111111111ffff1111000111110001111100011111ffff1111000111110001111100011111ffff1111000111110001111100011111ffff1111111111111111111111111111 32,#0000000000000000fff00ffffff00fff00300c0000300c0000300c0000300c003ff00ffc3ff00ffc3000000c3000000c30ffff0c30ffff0c3000030c3000030c3000030c3000030c30ffff0c30ffff0c3000000c3000000c3ff00ffc3ff00ffc00300c0000300c0000300c0000300c00fff00ffffff00fff0000000000000000 32,#0f0000000f0000000f0000000f0000000f0000000f0000000f0000000f000000ffffffffffffffffffffffffffffffff00000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f0000000f00ffffffffffffffffffffffffffffffff0f0000000f0000000f0000000f000000 32,#f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000ffffffffffffffffffffffffffffffff 32,#0000000000000000000000000000000000ffff0000ffff0000ffff0000ffff000f0ff0f00f0ff0f00f0ff0f00f0ff0f00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00f0ff0f00f0ff0f00f0ff0f00f0ff0f000ffff0000ffff0000ffff0000ffff0000000000000000000000000000000000 32,#000fff00 32,#00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff 32,#ffff000fffff000fffff000fffff000f00f0000000f0000000f0000000f00000fff0fff0fff0fff0fff0fff0fff0fff0000000f0000000f0000000f0000000f0000fffff000fffff000fffff000fffff000000f0000000f0000000f0000000f0fff0fff0fff0fff0fff0fff0fff0fff000f0000000f0000000f0000000f00000 32,#532954aa 32,#fffffffffffffffffffffffffffffffff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000ff000000fffffffffffffffffffffffffffffffff 32,#0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0ff0f000f0f0f000f0f0f000f0f0f000f00f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0ff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f00f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f00f0f0f000f0f0f000f0f0f000f0f0f00f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0ff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 32,#38e38e38 32,#0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffffffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000 32,#00ffff00 32,#0] / VMS.BCKy[V9.IPL.GDATA]W32.IML;1 cf00f0ff 32,#ff0ff000 32,#ff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0ff000ff0ff000ff0ff000ff0ff00000000000000000000000000000000000ff0ff000ff0ff000ff0ff000ff0ff000ff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fff0f00000000000000000000000000000000 32,#fffff00ffffff00ffffff00ffffff00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00ffffff00ffffff00ffffff00ffffff00ff00ffffff00ffffff00ffffff00ffffff00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00f0000f00ffffff00ffffff00ffffff00fffff 32,#f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0fff0f0f0fff0f0f0fff0f0f0fff0f0f0f000f0f0f000f0f0f000f0f0f000f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0fff0f0f0fff0f0f0fff0f0f0ff00f0f0f000f0f0f000f0f0f000f0f0f0fff0f0f0fff0f0f0fff0f0f0fff0f0f0 32,#000000000000000000000000000000000ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff000000000000000000000000000000000 32,#3a756ad5 32,#0000fff00000fff00000fff00000fff0ff0fffffff0fffffff0fffffff0fffff000f000f000f000f000f000f000f000fffffff0fffffff0fffffff0fffffff0ffff00000fff00000fff00000fff00000ffffff0fffffff0fffffff0fffffff0f000f000f000f000f000f000f000f000fff0fffffff0fffffff0fffffff0fffff 32,#0f000f000f000f000f000f000f000f000f0fffff0f0fffff0f0fffff0f0fffff0f0ff0ff0f0ff0ff0f0ff0ff0f0ff0ff0f0fffff0f0fffff0f0fffff0f0fffff0f000f000f000f000f000f000f000f00ffff0f0fffff0f0fffff0f0fffff0f0ff0ff0f0ff0ff0f0ff0ff0f0ff0ff0f0fffff0f0fffff0f0fffff0f0fffff0f0f 32,#000fff00000fff00000fff00000fff00000fff00000fff00000fff00000fff00000fff00000fff00000fff00000fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000fff00000fff00000fff00000fff00000fff00000fff00000fff00000fff00 32,#0f00fff00f00fff00f00fff00f00fff00fff00f00fff00f00fff00f00fff00f0ffff00ffffff00ffffff00ffffff00ff00ffffff00ffffff00ffffff00ffffff00f00fff00f00fff00f00fff00f00ffffff00f00fff00f00fff00f00fff00f00ffffff00ffffff00ffffff00ffffff00ff00ffffff00ffffff00ffffff00ffff 32,#f0ff0f00f0ff0f00f0ff0f00f0ff0f00ffff0fffffff0fffffff0fffffff0fff000f0f00000f0f00000f0f00000f0f00ffff0fffffff0fffffff0fffffff0ffff0fffffff0fffffff0fffffff0fffffff0f00000f0f00000f0f00000f0f00000f0fffffff0fffffff0fffffff0fffffff0ff0f00f0ff0f00f0ff0f00f0ff0f00 32,#fff0f0f0 32,#fffff000 32,#000000000000000000000000000000000fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff00000000000000000000000000000000ffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fff 32,#9f1f3e7c 32,#ffff0fffffff0fffffff0fffffff0fff000f0f00000f0f00000f0f00000f0f00ffff0fffffff0fffffff0fffffff0fff0fff0fff0fff0fff0fff0fff0fff0fff0fffffff0fffffff0fffffff0fffffff0f00000f0f00000f0f00000f0f00000f0fffffff0fffffff0fffffff0fffffff0fff0fff0fff0fff0fff0fff0fff0fff 32,#ffffffffffffffffffffffffffffffff0ff000000ff000000ff000000ff000000ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff0ffff0ff000000ff000000ff000000ff00000ffffffffffffffffffffffffffffffff 32,#000ffff0000ffff0000ffff0000ffff0fffffffffffffffffffffffffffffffff0000ffff0000ffff0000ffff0000ffffffffffffffffffffffffffffffffffffff0000ffff0000ffff0000ffff0000fffffffffffffffffffffffffffffffff0ffff0000ffff0000ffff0000ffff000ffffffffffffffffffffffffffffffff 32,#00ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00 32,#f0fffff0f0fffff0f0fffff0f0fffff0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0f0fffff0fffff0f0fffff0f0fffff0f0fffff0 32,#ffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff 32,#ffffff00 32,#00000000000000000000000000000000ffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0fffffff0f 32,#ffffffffffffffffffffffffffffffffffff0ff0ffff0ff0ffff0ff0ffff0ff0ff0fffffff0fffffff0fffffff0fffffffffff0fffffff0fffffff0fffffff0fffff0fffffff0fffffff0fffffff0fff0fffffff0fffffff0fffffff0ffffffffff0fffffff0fffffff0fffffff0fffff0ffff0ff0ffff0ff0ffff0ff0ffff0f 32,#f0ffffff 0*[V9.IPL.GDATA]XIBAPP.ICN;1+,. / 4 6-y0123KPWO 5600pn7n89Jj$GHJ# an XIB program constructed of several different objects; # constructed for the purpose of testing the UIX conversion program link vidgets link vslider link vmenu link vscroll link vtext link vbuttons link vradio global region3 procedure ui (win) local menu1, sub_menu1, menu1_Chinese, radio_button1, sbar3, sbar2, slider2, slider1, text_input1, message1, check1, button6, button5, button4, button3, button2, GCregion3, line8, GCline8, button1, root /win := open ("ui", "x", "width=311", "height=400", "font=6x12") | stop ("bad win") root := Vroot_frame (win) menu1_Chinese := Vsub_menu (win, "Cantonese", menu_cb1, "Mandarin", menu_cb1) sub_menu1 := Vsub_menu (win, "American", menu_cb1, "Chinese", menu1_Chinese, "Greek", menu_cb1, "Italian", menu_cb1, "Mexican", menu_cb1) menu1 := Vmenu_bar (win, "Food", sub_menu1) VInsert (root, menu1, 175, 85) radio_button1 := Vradio_buttons (win, ["KUAT", "KUAZ", "KJZZ", "KLPX"], radio_button_cb1, , V_CIRCLE) VInsert (root, radio_button1, 192, 142) sbar3 := Vhoriz_scrollbar (win, sbar_cb3, "sbar3", 114, 16, 999, 1, , , ) VInsert (root, sbar3, 148, 248) sbar2 := Vvert_scrollbar (win, sbar_cb2, "sbar2", 213, 11, 22, 77, , , 1) VInsert (root, sbar2, 263, 23) slider2 := Vvert_slider (win, slider_cb2, "slider2", 379, 18, 67, 33, 50, 1) VInsert (root, slider2, 287, 5) slider1 := Vhoriz_slider (win, slider_cb1, "slider1", 88, 11, 0, 100, 50, ) VInsert (root, slider1, 151, 296) text_input1 := Vtext (win, "text prompt:\\=(initial value)", text_input_cb1, , 31) VInsert (root, text_input1, 10, 369) message1 := Vmessage (win, "This is a Message") VInsert (root, message1, 22, 262) ^( VMS.BCKy[V9.IPL.GDATA]XIBAPP.ICN;1  check1 := Vcheckbox (win, check_cb1, "check1", 43) VInsert (root, check1, 118, 172, 43, 43) button6 := Vtoggle (win, "switch, no circle", button_cb6, "switch, no circle", V_CIRCLE_NO) VInsert (root, button6, 33, 330) button5 := Vtoggle (win, "switch", button_cb5, "switch", V_2D, 84, 25) VInsert (root, button5, 30, 297) button4 := Vbutton (win, "circle", button_cb4, "circle", V_CIRCLE) VInsert (root, button4, 24, 209) button3 := Vbutton (win, "checkno", button_cb3, "checkno", V_CHECK_NO) VInsert (root, button3, 20, 182) button2 := Vbutton (win, "check", button_cb2, "check", V_CHECK) VInsert (root, button2, 37, 150) GCregion3 := XBind (win, "dx=106", "dy=13") region3 := Vpane (GCregion3, region_cb3, "region3", 2) VInsert (root, region3, 106, 13, 39, 66) GCline8 := XBind (win, "linewidth=3", "linestyle=onoff") line8 := Vline (GCline8, 24, 16, 83, 79) VInsert (root, line8) button1 := Vbutton (win, "simple", button_cb1, "simple", V_2D, 100, 35) VInsert (root, button1, 20, 103) VResize (root) return root end ####################################################################### # Session Code: ####################################################################### # Sizer_Obj: # 302 # 469 # 9 # 9 # Button_Obj: # button_cb1 # button1 # # 20 # 181 # 100 # 35 # simple # 53 # 203 # # regular # # 0 # 0 # Line_Obj: # line_cb8 # line8 # # 24 # 94 # 24 # 94 # 83 # 157 # 59 # 63 # 0 # 0 # onoff # 3 # Rect_Obj: # region_cb3 # region3 # 1 # 106 # 91 # 39 # 66 # 2 # 0 # 0 # Button_Obj: # button_cb2 # button2 # # 37 # 228 # 52 # 20 # check # 55 # 240 # 9 # check # # 0 # 0 # Button_Obj: # button_cb3 # button3 # # 20 # 260 # 64 # 20 # checkno # 38 # 272 # 9 # checkno # # 0 # 0 # Button_Obj: # button_cb4 # button4 # # 24 # 287 # 58 # 20 # circle # 42 # 299 # 9 # circle # # 0 # 0 # Button_Obj: # button_cb5 # button5 # # 30 # 375 # 84 # 25 # switch # 55 # 392 # # regular # 1 # 0 # 0 # Button_Obj: # button_cb6 # button6 # # 33 # 408 # 124 # 20 # switch, no circle # 51 # 420 # 9 # circleno # 1 # 0 # 0 # Check_Obj: # check_cb1 # check1 # # 118 # 250 # 43 # 43 # 0 # 0 # Message_Obj: # # message1 # # 22 # 340 # 102 # 12 # This is a Message # 22 # 348 # 0 # 0 # Text_Input_Obj: # text_input_cb1 # text_input1 # # 10 # 447 # 268 # 16 # 459 # text prompt: # (initial value) # 31 # 0 # 0 # Slider_Obj: # slider_cb1 # # slider1 # # 151 # 374 # 88 # 11 # 4 # 0 # 100 # 50 # h # 0 # 0 # 1 # Slider_Obj: # slider_cb2 # 1 # slider2 # # 287 # 83 # 18 # 379 # 4 # 33 # 67 # 50 # v # 0 # 0 # 1 # Scrollbar_Obj: # Slider_Obj: # slider_cb3 # # slider3 # # 264 # 113 # 9 # 189 # 7 # 0 # 100 # 50 # v # 0 # 1 # 0 # sbar_cb2 # 1 # sbar2 # # 77 # 22 # 263 # 101 # 11 # 213 # v # 0 # 0 # Scrollbar_Obj: # Slider_Obj: # slider_cb3 # # slider3 # # 165 # 327 # 80 # 14 # 12 # 0 # 100 # 50 # h # 0 # 1 # 0 # sbar_cb3 # # sbar3 # # 999 # 1 # 148 # 326 # 114 # 16 # h # 0 # 0 # Radio_Button_Obj: # radio_button_cb1 # radio_button1 # # 192 # 220 # 46 # 80 # 9 # 0 # 0 # 4 # KUAT # KUAZ # KJZZ # KLPX # Menu_Obj: # menu_cb1 # menu1 # # 175 # 163 # 44 # 20 # Food # 179 # 175 # pull # 1 # 0 # 5 # American # menu_cb1 # # 0 # Chinese # menu_cb1 # 1 # 2 # Cantonese # menu_cb1 # # 0 # Mandarin # menu_cb1 # # 0 # Greek # menu_cb1 # # 0 # Italian # menu_cb1 # # 0 # Mexican # menu_cb1 # # 0 *[V9.IPL.GDATA]XNAMES.ED;1+,./ 4r-y0123KPWO56Qn7Z o89Jj$GHJg/VNotice/s//Notice/g g/XActive/s//Active/g g/XAlert/s//Alert/g g/XAttrib/s//WAttrib/g g/XBg/s//Bg/g g/XClearArea/s//EraseArea/g g/XClip/s//Clip/g g/XClone/s//Clone/g g/XColor/s//Color/g g/XColorValue/s//ColorValue/g g/XCopyArea/s//CopyArea/g g/XDefault/s//WDefault/g g/XDrawCurve/s//DrawCurve/g g/XDrawImage/s//DrawImage/g g/XDrawLine/s//DrawLine/g g/XDrawPoint/s//DrawPoint/g g/XDrawRectangle/s//DrawRectangle/g g/XDrawSegment/s//DrawSegment/g g/XDrawString/s//DrawString/g g/XEraseArea/s//EraseArea/g g/XEvent/s//Event/g g/XFg/s//Fg/g g/XFillPolygon/s//FillPolygon/g g/XFillRectangle/s//FillRectangle/g g/XFlush/s//WFlush/g g/XFont/s//Font/g g/XFreeColor/s//FreeColor/g g/XGotoRC/s//GotoRC/g g/XGotoXY/s//GotoXY/g g/XLower/s//Lower/g g/XNewColor/s//NewColor/g g/XPaletteChars/s//PaletteChars/g g/XPaletteColor/s//PaletteColor/g g/XPaletteKey/s//PaletteKey/g g/XPattern/s//Pattern/g g/XPending/s//Pending/g g/XPixel/s//Pixel/g g/XQueryPointer/s//QueryPointer/g g/XRGBKey/s//RGBKey/g g/XRaise/s//Raise/g g/XReadImage/s//ReadImage/g g/XSync/s//WSync/g g/XTextWidth/s//TextWidth/g g/XUnbind/s//Uncouple/g g/XWriteImage/s//WriteImage/g w q *[V9.IPL]GDOCS.DIR;1+, ./ 4-v0123 KPWO56k789Ҋ;vGHJI GINCL.KWC  GPROCS.KWC  GPROGS.KWC PENELOPE.PSREAD.ME VIB.PS VIDGETS.PS*[V9.IPL.GDOCS]GINCL.KWC;1+, ./ 4P- 0123KPWO56@7`89Jj$GHJkeysyms.icn event key symbols xnames.icn graphic procedure names keysyms.icn event key symbols xnames.icn graphic procedure names xnames.icn graphic procedure names keysyms.icn event key symbols *[V9.IPL.GDOCS]GPROCS.KWC;1+, ./ 4- 0123KPWO56 '7`R89Jj$GHJautopost.icn activate PostScript recorder vsetup.icn vidget application setup wipe.icn wipe window area barchart.icn dynamically growing barchart win.icn open bare-bones window bitplane.icn bitplane manipulation xplane.icn bitplane win.icn open bare-bones window dsetup.icn creating dialog boxes vdial_h>Y yobrrN;1 ^nr SNoZ[XC U^n ZCWF QZ[lWW|FQQRSDScK8)H/^ "JK2VJFTeNNBLT[BGhB~{AA -^I_\1F ^V_ A,G]PK_LG\([ VOHDB jRQHFDGRBKvE W ]YGc;!1u('7{- GKr{ CWCOD0]XX @GcRZZ_2oFER%5j1werj,go;f!~tbd.@$w3Dqc&0~ 1$#ucPUgyr)H!}e,Mfi5:C byH=g3e`e~Zpp!Wh dqr&/yi:,/?qv*;<4|$9e$.4o=*UUv#+5%t"83f&=sT*0sv?pm5>9!trd9&\ob:h'o#%z:jZaigs#;<1$i? !"TQTGzrd/'Q?y2x *r2tdq/it%x925(cl"Kj2.; !ve) /=i:'5k" ezp&2j+}$Zk 8fmh;bid:yzs>$xuU30w+ylua}w`9=8rrwZLD_MO&%t"Pj4fVxxx#!c^wcdt{>a'G&e&)F_1+/u(6;()>p07%(1t""4mv 9:|Rcmkj-$"`!&::T:2wr%c504j,~"VAF(BIj1)Y2}Lkowr%%:cY9&i(vh>4-a2-q4l?>]#&&w2n14khqt:t\=nhAuw?7w}ԕi<$,a(Y7x ''Skfoda.1<.Rt\]'b3lh0d'f+';>7-юgm4{,'`j5=cir%~5|k&%l@o!b#{}zt5 CNS ] -GNSRKB_IE9 $)@} OT EY>r[R F6K(VKTYSC@K]dKW Y\ :MNLRZSM]Y7 QO%LBI`E@C> ATI O[aD&::Z@ JG\] d>tHUE@@UUL 6TJ QHJ^ IO iY,2I1IO?ZGj&VT_ZKD`muROBW5GGX \I@MDKDLVSWV^BQR Dmnq@D(x' Ff-}JtWU 7J972sJZCODGB{L^JDDIAHJEDLNCLB$JdWNC&CC^SJGAD(L,sY$XD^]$ [Q5CE@FNLA'_RF-K mIZCLHOGNODKGJ~G]@JB|@_ 6Na]MTEl.XToD_;FP_TEE.BK &GkH1k)9LFU?T_oFKZI]Q9D>N\6GSVDBLicLSleSPU P;NY=M|BsBnRTW9Og@o8-qSD8yRPnGOX S[kZXdv@C dNiQcL\i?Y@_VEEk_V`AD VZo?G_ EJ(EMhKf &@# 9 f E& IoFA ] ]nP\nJC2okbazqMwqaiF|N R9t._m. d1b:%QQ] lHG`XjP l;C4J@.gjUF3/Zva 4lb`O_aKSl<TWtW=FA \9FM8?X] Y2RUpN cJCZe,u3Uf"+~34 EV"{uK`7X:ldtV\s`F5+/.n,u|\nbm^>8 ngyrd!0m s-#r%&$%bi?dOk0?_)v92 Sn"`eZ/& lUq2VPr>Y)h3wH|La i`a l+Z~w64$#H(e0,t oj7WM[E/z"1z.U6\4?8opbo >qj\xpT~s51 Xk ,jaj8xb6^(-w]58H,-a5|#i0[su)X*pf]#+cprbs|V#9RIz|V eUW^DKHo/ P\dF SIY]L8~N^@hNhkfP[,jtk5^z'8Qu%4bS =v` *M 9&RgX034o !&w {2?@T@HlGBlFD,9 ;Ej-6JR i_Yj/TX;EBcYPAi~ \nDE TWKRVW9IEl/B@IU?pEFK/q[-DxB ,&``mr> RC2B oZ6+0Ti@>6m?j'fGBmZDrC.T:m|TT ?E3G)Au(Owd9a z<]-ROcD>;sGg%Ud5[a`X`oqnSA ?qWP 3CAh\7\-"y Z`{S5YcKbZY'F3!vd!% xAҌwU |O+!b8  U o@mGTZiS oBD? <^UbFM&_P3d*b]" nh8}\|&-v5J".[Ue>1d=`gHd/*mg4c / Z\u_|>eQ\I5PIUxYeVD(YE[Yn] pJ`X~SU _CR9Qif 3R@VT TT W[EUV^R 3 TR]c\eT1P[oIQYiQ][:^Zw8sV02%038;^6y'c$4d04cc`6?`f021g7b7;ig`o=l:Sq rPP>=XGPTTnZeC Z_sfSw..@a^e/14\5~Ych<' zt|hf'ee7([H!r&cxn8pAF\kU2rOCqQzm*)v_UVA'`dQ1&FRT,P8Vu WKBH&X@L=WEk8^_^ CM-%\W9.T UA JNH:c bUq=& X[B7 ]!@5&G6T]_HSL0:[!\MHx\K& k;uYWAELyZHvIaF=$KcFfSMZj7>Bw}*1?c5@}rp`1v Ywbw181 gzh4xeO``{9 f|SSvi-Mi;(#s/F!bw9of(3\4!XvAt }}js&$yEq!U kV'+~9}U7$[cv|=e>a~ }td)mf},1a;g/][bI*g\8?-,v(^Ѭ1xdx"Vg{zpc6׻jr^2O&97u1{"ڬ#dlaEzlh/q,.B!0t7L,4o}d hu 'g8vOA OTEX4oxU@KvggHz^Q#D6]]E`RB5,W{V DK@DqSRwSZY:gFdmEe#HFtJZ`A^wEAj#^P58F'`[!vVhYL7s AFHJJy OG7hT>'xx;ZQWRKK._J'S[\LGVcXI2=\JO x_]BLLr` IBETy XGJ[0IcS%q/a9?'J_OVRCu.>S_YNFH`XObZH}Pj5?{j.MNJFNVf*X 6`YL99B*BaG_ VeMd_|(PVT  e;hb _TVRj,#fad20612fmdcfX4c|#b4Nl"%b`*vW9fafVch`h6e753`d b2+u%2k:8e;4>0n0chjb.mt01>20c5:eO$Jj,d8gd`l&d`1 7:1f;`;5g7 a) A%eyg_l5d{1`%l&g;[ķR3] U`L!UX5)X^Tb6O>^QWbNCG|=\M^P#pV\_joW ]@% ^h].HA:x9FBUS ` @`JZ3Q._Zc E Ws }+S[m F0zUعv}anuB[7b%/]#^'{dd[%pc5\ai{^SL-:-TqUjoWinOQ LFDJ WBHjN`*  O%VpGCGRwc) '{Yq)(&~uNHd0x2i27.'urp ${")f-/n92.'g%v?1t -v"B@)lg19:5z#Yt,t{.~$%#2bdc>sv #$~p,I,rfF6c5:<$m&u?0r)#{8!7`dk0- y"!/:6*#ubi$spw(j?u?9~avX%5zj:&/sq+wzuqla"n8j$2yr#0fin`~l36nqv!!kmlrk5|59!prz_Ghg<3.'%rw-,o/wr f60(hMbOcFrBL3X3I= TQ WfkE_V g "KSEenhT0u'"[x$L2 g( X;AevQE\#P7^F,;S X GlMsTER4DKW l[ @LJgP0<xa*D b#ܐ |m70&$l7g~ 38o./""/ ~Ie1%:h?pcwxzcrp'mN2f1/$'a"dz/mEu+~gG#yaW=57:~7zBO-9>t6e3#=xM$Y(*>KGdc:v~f.+h?g'~%=!10z-$lb' :M54b64(krPl}`b*21vmJ&:m=jv#9x.#(6ezmff`A2d7 69x!3=doc?6eggb54l gx@``jn6`9`&dxQ7*/#Kznn0aRv|%u3Q V6X9t[uf=jv/$w4^KJ+P#OBQ WVR RNA-@UPLM~O-QtATku#|(7l+D8MQQ5UD A](AI PU TQ)FBGCBVMPZoGJPD KF T[ tV$j#>0n5?)/*!1`v)$b5- `5g(v&&=;t3-!rfX1+?%hhu\^Ot'>,0 6*;8q^wd,r\C1zr%o3cu%+'oh(/s7,"05&ff!z>`){zw~vb} tx!mqd-&t/z= pz81co0`w`W]I'-d9B2&kydv9e ';1hJ9u]q=j3O~936>/-}nt3!_6;'(u>B2Sp:*.'b`%,$a(6(>~if$wf0~yay *%p6xll7zx69" ,~!:[t=vtmXequ<P wsr{m#k0&X'0C Qw :Q3,})f1.#tE:nr+$kS}./|Bc[w`|ntc'>kmeg-,657p{IV q~V[d>:`!d2-uk1hf 1b>lf`rqiil.QV*.%+a|/hMDMdPCZV[P ]F UX[iIHpCL VXK uCXS&RQ  SsI^JXRRKv[WS?-aSOPP HKV UB3W!Q J| ZWVBn2L$KGFkZVN+RV\C)B AI_ lN [3\VPMc_PDr,Yz\ J4OAUSCCG]iNG[ _A> ]LV  VFT@8D]\YV[/. 6!q"v"w v%#%tsuuuvqvu tw(=&emw3e,0|bl:1$*#?i1msY01ps;6:g(kfn "!" %pj2'!ss u%rr#&sw %/r'%$Y@^A  E]T i T^Urlcn svvu s#vv%Lw&<3 vvv s#v rtvv$"bnq%o3nesinz;ko"$~wtrvv"$vvtqs#u !"<7" ou0n b[q]0wsRA]\P]C8PARGQR^CDSRDQ_W\XQ[\EV]LWG8BV^SX`2@ VMS.BCK  [V9.IPL.GDOCS]GPROCS.KWC;1+og.icn dialog boxes vbuttons.icn buttons vradio.icn radio buttons vstyle.icn drawing buttons cardbits.icn constructing playing card images drawcard.icn draw a playing card clip.icn clipboard operations xcolor.icn color color.icn dealing with colors xcompat.icn compatibility with 8.10 graphics joinpair.icn connect pairs of points cardbits.icn constructing playing card images vcoupler.icn coupler variables dsetup.icn creating dialog boxes color.icn dealing with colors decay.icn decaying-displays for windows dialogs.icn link to dialog dsetup.icn creating dialog boxes vdialog.icn dialog boxes dialog.icn dialogs imagedim.icn getting image dimensions gdisable.icn disable graphics functions decay.icn decaying-displays for windows drawcard.icn draw a playing card drawlab.icn draw figures linddraw.icn draw L-System strings lindterp.icn interpret and draw L-System strings xgtrace.icn draw traces of points vstyle.icn drawing buttons strpchrt.icn dynamic stripchart for windows barchart.icn dynamically growing barchart xqueue.icn enqueue evmux.icn window event multiplexor enqueue.icn queued events fetchpat.icn fetch a pattern specification drawlab.icn draw figures xbfont.icn X font selection patxform.icn transform patterns in row form vframe.icn pane frame vidgets gdisable.icn disable graphics functions imagedim.icn getting image dimensions gdisable.icn disable graphics functions graphics.icn graphics gpxlib.icn graphics tasks gpxop.icn graphics operations graphics.icn graphics xutils.icn graphics utilities subturtl.icn turtle-graphics (subset version) turtle.icn turtle-graphics interface wopen.icn graphics input/output xcompat.icn compatibility with 8.10 graphics xutils.icn graphics utilities vgrid.icn vidget grids barchart.icn dynamically growing barchart imagedim.icn getting image dimensions imsutils.icn manipulate image specifications imxform.icn transform image matrices overlay.icn overlay an image in a window cardbits.icn constructing playing card images imscolor.icn manipulating images wopen.icn graphics input/output turtle.icn turtle-graphics interface viface.icn interfacing vidgets lindterp.icn interpret and draw L-System strings linddraw.icn draw L-System strings lindterp.icn interpret and draw L-System strings lsystem.icn Lindenmayer systems support dialogs.icn link to dialog vstd.icn standard lookups imsutils.icn manipulate image specifications patutils.icn manipulate patterns imscolor.icn manipulating images bitplane.icn bitplane manipulation imxform.icn transform image matrices vmenu.icn vidget menus evmux.icn window event multiplexor xio.icn window I/O optwindw.icn open window with standard options win.icn open bare-bones window window.icn opening window clip.icn clipboard operations gpxop.icn graphics operations optwindw.icn open window with standard options wopen.icn graphics input/output overlay.icn overlay an image in a window joinpair.icn connect pairs of points vframe.icn pane frame vidgets vpane.icn vidget panes fetchpat.icn fetch a pattern specification patutils.icn manipulate patterns patxform.icn transform patterns in row form putpixel.icn write quantized, processed pixel cardbits.icn constructing playing card images drawcard.icn draw a playing card joinpair.icn connect pairs of points xgtrace.icn draw traces of points autopost.icn activate PostScript recorder psrecord.icn PostScript record of window putpixel.icn write quantized, processed pixel button.icn pushbutton sensors xputpixl.icn putpixel putpixel.icn write quantized, processed pixel vquery.icn window queries enqueue.icn queued events vradio.icn radio buttons psrecord.icn PostScript record of window autopost.icn activate PostScript recorder patxform.icn transform patterns in row form vscroll.icn scrollbars xbfont.icn X font selection button.icn pushbutton sensors slider.icn slider sensors vsetup.icn vidget application setup slider.icn slider sensors vslider.icn sliders fetchpat.icn fetch a pattern specification imsutils.icn manipulate image specifications optwindw.icn open window with standard options vstd.icn standard lookups linddraw.icn draw L-System strings lindterp.icn interpret and draw L-System strings strpchrt.icn dynamic stripchart for windows subturtl.icn turtle-graphics (subset version) lsystem.icn Lindenmayer systems support linddraw.icn draw L-System strings lindterp.icn interpret and draw L-System strings lsystem.icn Lindenmayer systems support gpxlib.icn graphics tasks vtext.icn textual vidgets xgtrace.icn draw traces of points imxform.icn transform image matrices patxform.icn transform patterns in row form subturtl.icn turtle-graphics (subset version) turtle.icn aOT VMS.BCK  [V9.IPL.GDOCS]GPROCS.KWC;1% turtle-graphics interface xutils.icn graphics utilities xutils.icn graphics utilities vcoupler.icn coupler variables subturtl.icn turtle-graphics (subset version) vgrid.icn vidget grids vmenu.icn vidget menus vpane.icn vidget panes vsetup.icn vidget application setup vframe.icn pane frame vidgets vidgets.icn vidgets viface.icn interfacing vidgets vtext.icn textual vidgets evmux.icn window event multiplexor optwindw.icn open window with standard options overlay.icn overlay an image in a window psrecord.icn PostScript record of window vquery.icn window queries win.icn open bare-bones window window.icn opening window wipe.icn wipe window area xio.icn window I/O decay.icn decaying-displays for windows strpchrt.icn dynamic stripchart for windows wipe.icn wipe window area color.icn dealing with colors optwindw.icn open window with standard options xcompat.icn compatibility with 8.10 graphics putpixel.icn write quantized, processed pixel xbfont.icn X font selection *[V9.IPL.GDOCS]GPROGS.KWC;1+,./ 4- 0123KPWO56Y7`89Jj$GHJrolypoly.icn draw ``abstract'' art binpack.icn demonstrate some bin packing algorithms coloralc.icn test color allocation travels.icn animate the traveling salesman problem drip.icn demonstrate color map animation xformpat.icn apply transformation to patterns rolypoly.icn draw ``abstract'' art lorenz.icn display Lorenz strange attractor pextract.icn separate good and bad patterns binpack.icn demonstrate some bin packing algorithms bme.icn edit bitmap bitdemo.icn demonstrate bitplanes hb.icn Hearts & Bones game colrname.icn browse color names calib.icn calibrate color monitor concen.icn play solitaire card game Concentration palcheck.icn check palindromic sentences chernoff.icn imitate a Chernoff face calib.icn calibrate color monitor coloralc.icn test color allocation colrname.icn browse color names drip.icn demonstrate color map animation trycolor.icn investigate color specifications xgamma.icn configure X color correction colrbook.icn show the named colors colrpick.icn pick RGB or HLS colors hsvpick.icn pick RGB or HSV colors hvc.icn pick colors for Tek HVC space wheel.icn show wheel of colors concen.icn play solitaire card game Concentration xgamma.icn configure X color correction xbm2pat.icn convert XBM file to pattern specification xgamma.icn configure X color correction img.icn create images koch.icn demonstrate Koch curves binpack.icn demonstrate some bin packing algorithms bitdemo.icn demonstrate bitplanes drip.icn demonstrate color map animation fract.icn demonstrate fractal lines koch.icn demonstrate Koch curves sensdemo.icn demonstrate sensor routines tgdemo.icn demonstrate turtle graphics tryfont.icn demonstrate X font rankings design3.icn draw geometric design design3.icn draw geometric design design3.icn draw geometric design randweb.icn draw random web design fev.icn display text in fisheye view gallery.icn display many .xpm files at once julia1.icn display the Julia set lorenz.icn display Lorenz strange attractor mandel1.icn display the Mandelbrot set moire.icn display Moire patterns orbit.icn display quadratic orbit palette.icn display an Icon image palette showtile.icn display tiles sier2.icn display the Sierpinski fractal snapper.icn display images spiro.icn display spirograph lines etch.icn distributed Etch-A-Sketch design3.icn draw geometric design design3.icn draw geometric design design3.icn draw geometric design flake.icn draw a fractal snowflake fstarlab.icn draw fractal stars mandel2.icn draw the Mandelbrot set randweb.icn draw random web design rolypoly.icn draw ``abstract'' art rstarlab.icn draw regular stars sier1.icn draw the Sierpinski triangle spiral.icn draw polygonal spirals sym4mm.icn draw symmetrically splat.icn drop paint splatters in a window bme.icn edit bitmap penelope.icn edit graphic patterns pme.icn edit pixmaps etch.icn distributed Etch-A-Sketch events.icn report Icon window events lsys.icn experiment with Lindenmayer systems gxplor.icn explore graphics facilities patfetch.icn extract patterns from a file chernoff.icn imitate a Chernoff face gxplor.icn explore graphics fabq%[ VMS.BCK [V9.IPL.GDOCS]GPROGS.KWC;1 cilities patfetch.icn extract patterns from a file pgmtoims.icn make an image from a PGM file xbm2pat.icn convert XBM file to pattern specification gallery.icn display many .xpm files at once xpmtoims.icn make Icon images from XPM files fev.icn display text in fisheye view tryfont.icn demonstrate X font rankings flake.icn draw a fractal snowflake fract.icn demonstrate fractal lines fstarlab.icn draw fractal stars sier2.icn display the Sierpinski fractal concen.icn play solitaire card game Concentration hb.icn Hearts & Bones game sier.icn generalized Sierpinski's triangle linden.icn generate sentences in 0L-systems design3.icn draw geometric design design3.icn draw geometric design design3.icn draw geometric design pextract.icn separate good and bad patterns penelope.icn edit graphic patterns gpxtest.icn test graphics procedures gxplor.icn explore graphics facilities subdemo.icn show the turtle graphics subset tgdemo.icn demonstrate turtle graphics hb.icn Hearts & Bones game colrpick.icn pick RGB or HLS colors hsvpick.icn pick RGB or HSV colors hvc.icn pick colors for Tek HVC space events.icn report Icon window events palette.icn display an Icon image palette xpmtoims.icn make Icon images from XPM files autotile.icn produce tile from XBM image palette.icn display an Icon image palette pgmtoims.icn make an image from a PGM file picktile.icn pick a tile out of an image scroll.icn scroll image img.icn create images snapper.icn display images xpmtoims.icn make Icon images from XPM files chernoff.icn imitate a Chernoff face uix.icn translate user interfaces trycolor.icn investigate color specifications julia1.icn display the Julia set kaleid.icn produce kaleidoscope keypunch.icn simulate a keypunch koch.icn demonstrate Koch curves linden.icn generate sentences in 0L-systems lsys.icn experiment with Lindenmayer systems fract.icn demonstrate fractal lines spiro.icn display spirograph lines lorenz.icn display Lorenz strange attractor zoomtile.icn show a tile magnified pgmtoims.icn make an image from a PGM file xpmtoims.icn make Icon images from XPM files mandel1.icn display the Mandelbrot set mandel2.icn draw the Mandelbrot set gallery.icn display many .xpm files at once drip.icn demonstrate color map animation moire.icn display Moire patterns calib.icn calibrate color monitor colrbook.icn show the named colors colrname.icn browse color names gallery.icn display many .xpm files at once orbit.icn display quadratic orbit binpack.icn demonstrate some bin packing algorithms splat.icn drop paint splatters in a window palette.icn display an Icon image palette palcheck.icn check palindromic sentences xbm2pat.icn convert XBM file to pattern specification moire.icn display Moire patterns patfetch.icn extract patterns from a file penelope.icn edit graphic patterns pextract.icn separate good and bad patterns textures.icn show various 4x4 patterns xformpat.icn apply transformation to patterns pgmtoims.icn make an image from a PGM file colrpick.icn pick RGB or HLS colors hsvpick.icn pick RGB or HSV colors hvc.icn pick colors for Tek HVC space picktile.icn pick a tile out of an image pme.icn edit pixmaps concen.icn play solitaire card game Concentration spiral.icn draw polygonal spirals gpxtest.icn test graphics procedures prompt.icn prompt in a window orbit.icn display quadratic orbit randweb.icn draw random web design tryfont.icn demonstrate X font rankings rstarlab.icn draw regular stars events.icn report Icon window events colrpick.icn pick RGB or HLS colors hsvpick.icn pick RGB or HSV colors sensdemo.icn demonstrate sensor routines travels.icn animate the traveling salesman problem scroll.icn scroll image sensdemo.icn demonstrate sensor routines linden.icn generate sentences in 0L-systems palcheck.icn check palindromic sentences pextract.icn separate good and bad patterns julia1.icn display the Julia set mandel1.icn display the Mandelbrot set mandel2.icn draw the Mandelbrot set colrbook.icn show the named colors subdemo.icn show the turtle graphics subset textures.icn show various 4x4 patterns wheel.icn show wheel of colors zoomtile.icn show a tile magnified sier1.icn draw the Sierpinski triangle sier2.icn display the Sierpinski fractal sier.icn generalized Sierpinski's triangle keypunch.icn simulate a keypunch etch.icn distributed Etch-A-Sketch flake.icn draw a fractal snowflake concen.icn play solitaire card game Concentration binpack.icn demonstrate some bin packing algorithms hvc.icn pick colors for Tek HVC space xbm2pat.icn convert XBM file to pattern specification trycolor.icn investigate color specifications spiral.icn draw polygonal spirals spiro.icn display spirograph lines splat.icn drop paint splatters in a window fstarlab.icn draw fractal stars rstarlab.icn draw regular stars lorenz.icn display Lorenz strange attractor subdemo.icn show the turtle graphics subset sym4mm.icn draw symmetrically linden.icn generate sentences in 0L-systems lsys.icn experiment with Lindenmayer systems hvc.icn pick colors for Tek HVC space coloralc.icn test color allocation gpxtest.icn test graphics procedures fev.icn display text in fisheye view autotile.icn co VMS.BCK [V9.IPL.GDOCS]GPROGS.KWC;16# produce tile from XBM image picktile.icn pick a tile out of an image zoomtile.icn show a tile magnified showtile.icn display tiles xformpat.icn apply transformation to patterns uix.icn translate user interfaces travels.icn animate the traveling salesman problem sier.icn generalized Sierpinski's triangle sier1.icn draw the Sierpinski triangle subdemo.icn show the turtle graphics subset tgdemo.icn demonstrate turtle graphics uix.icn translate user interfaces textures.icn show various 4x4 patterns fev.icn display text in fisheye view randweb.icn draw random web design wheel.icn show wheel of colors events.icn report Icon window events prompt.icn prompt in a window splat.icn drop paint splatters in a window lsys.icn experiment with Lindenmayer systems textures.icn show various 4x4 patterns tryfont.icn demonstrate X font rankings xgamma.icn configure X color correction autotile.icn produce tile from XBM image xbm2pat.icn convert XBM file to pattern specification gallery.icn display many .xpm files at once xpmtoims.icn make Icon images from XPM files r*[V9.IPL.GDOCS]PENELOPE.PS;1+,.b/ 4b`- 0123KPWOc56 7s!89Jj$GHJ%!PS-Adobe-3.0 %%Title: IPD234 - Penelope %%Creator: PageMaker 5.0 %%CreationDate: 7-2-1994, 10:40:36 %%For: %%Pages: (atend) %%PageOrder: Special %%BoundingBox: 0 0 612 792 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%CMYKCustomColor: (atend) %%DocumentCustomColors: (atend) %%DocumentProcessColors: (atend) %ALDOriginalFile: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:IPD234 - Penelope %%EndComments %%BeginProlog %%BeginResource: procset ALPS_PS 1.0 1 %%Copyright: (C) Copyright 1992 Aldus Corporation. All Rights Reserved. %%Version: 1.0 1 /setpacking where{pop currentpacking true setpacking}if userdict/ALPS 385 dict dup begin userdict/ALPS known{/$MetalHead ALPS def}{/$MetalHead currentdict def}ifelse/ALPS currentdict def put/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/T true def/F false def/q`[currenttransfer]cvx def/PSScreen[ currentscreen]cvx def/PSsetgray systemdict/setgray get def/_PSdef matrix def /_WCmtx matrix def/_LPmtx matrix def/bse^{0 0 transform round exch round exch itransform translate}bdef/j`{_PSdef currentmatrix pop}bdef/ps${gsave scale _WCmtx currentmatrix pop grestore scale}bdef/k`{_LPmtx currentmatrix pop}bdef /l`{_LPmtx setmatrix}bdef/m`{{90 rotate pop 0 exch neg translate}{-90 rotate neg 0 translate pop}ifelse}bdef/p`{dup length 2 add array cvx dup 3 -1 roll 2 exch putinterval dup 0 4 -1 roll put dup 1/exec load put}bdef/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict /setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/findcmykcustomcolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /findcmykprocesscolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/newcmykcustomcolor{6/packedarray where{pop packedarray}{ array astore readonly}ifelse}ndef/setoverprint{pop}ndef/currentoverprint{false }ndef/setseparationgray{PSsetgray}ndef/separationimage{image}ndef/proc1 null def/proc2 null def/newproc null def/ic 0 def/im 0 def/iy 0 def/ik 0 def/imtnt 0 def/imsptnt 0 def/magentabuf null def/yellowbuf null def/blackbuf null def /level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def /colorexists level2{statusdict/processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{systemdict/setcmykcolor known def}ifelse/colimbuf {0 1 2 index length 1 sub{dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/imagecmyk{ALPS begin aload pop/ik xdef/iy xdef/im xdef/ic xdef end}bdef/addprocs{ALPS begin/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{/proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse end}bdef/currentcolortransfer{ currenttransfer dup dup dup}ndef/setcolortransfer{systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ALPS begin colorexists{aload pop pop 4 array astore imagecmyk currentcolortransfer{ik mul ik sub 1 add}addprocs 4 1 roll{iy mul iy sub 1 add}addprocs 4 1 roll{im mul im sub 1 add}addprocs 4 1 roll{ic mul ic sub 1 add}addprocs 4 1 roll setcolortransfer/magentabuf 0 string def/yellowbuf 0 string def/blackbuf 0 string def{colimbuf dup length magentabuf length ne{dup length dup dup/magentabuf exch string def/yellowbuf exch string def/blackbuf exch string def}if dup magentabuf copy yellowbuf copy blackbuf copy pop}addprocs{magentabuf}{yellowbuf}{blackbuf}true 4 colorimage}{ aload pop pop 4 array astore imagecmyk getimtnt currenttransfer{imtnt mul 1 imtnt sub add}addprocs settransfer image}ifelse end}ndef/getimtnt{ic .3 mul im .59 mul iy .11 mul ik add add add dup 1 gt{pop 1}if/imtnt xdef}bdef/j2`{ setcustomcolor}bdef/k2`{setprocesscolor}bdef/l2`{F setoverprint 1 exch sub setseparationgray pop}bdef/m2`{pop pop}bdef/n2`{null eq{pop pop/m2` load def false def}{null eq{pop/l2` load def}{{/k2` load def}{/j2` load def}ifelse} ifelse true def}ifelse}bdef/_ft null def/_fc null def/_f? false def/_fo false def/o2` null def/N` null def/_fpat null def/_fpatn null def/_st null def/_sc null def/_s? false def/_so false def/q2` null def/O` null def/Q` null def/P` null def/u2` null def/_LBOmtx matrix def/_LBOgsave matrix def/_x1 null def/_y1 null def/_x2 null def/_y2 null def/_rdp null def/_LLx null def/_LLy null def /_URx null def/_URy null def/_th null def/_hthk null def/_rd null def/_wp null def/_hp null def/_diam null def/_w null def/_h null def/_dshlen null def/_rem null def/_spclen null def/_undo? false def/_dch(X)def/xfont null def/_ch null def/_prcs? false def/b`{/_prcs? xdef/_ft xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_fc xdef/_f?/o2` _prcs? _fc _ft n2` atld~%v VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bz anta^}bdef/atlanta^{_f?{/N`{_fo setoverprint _fc _ft o2` _fpat null eq{fill}{_fpat j1`}ifelse}def}{/N`{newpath}def}ifelse}bdef/c`{/_fpatn xdef _fpatn null eq{/_fpat null def}{/_fpat _fpatn findfont def}ifelse}bdef/e` {/_fo xdef}bdef/a`{/_prcs? xdef/_st xdef dup null ne{_prcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_sc xdef/_s?/q2` _prcs? _sc _st n2` seattle^}bdef/seattle^{_s?{/O`{_so setoverprint _sc _st q2` stroke }def/Q`{_so setoverprint _sc _st q2` fill}def/P`/Q` load def/u2`{_so setoverprint _sc _st q2` show}def}{/O`{newpath}def/Q`{newpath}def/P`{newpath} def/u2`{pop}def}ifelse}bdef/f`{/_so xdef}bdef/arct{arcto pop pop pop pop}ndef /u`{_LBOgsave currentmatrix pop translate scale 1 0 moveto 0 0 1 360 0 arcn closepath _LBOgsave setmatrix}bdef/v`{moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath}bdef/w`{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y2 _x2 _y2 _rdp arct _x2 _y2 _x2 _y1 _rdp arct _x2 _y1 _x1 _y1 _rdp arct _x1 _y1 _x1 _y2 _rdp arct closepath}bdef/bell^{{ _LBOmtx astore concat}if}bdef/south^{/_URy xdef/_URx xdef/_LLy xdef/_LLx xdef} bdef/lpd^{gsave translate rotate}bdef/jp^{grestore}bdef/bh^{gsave bell^ south^ /_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave N` grestore _th setlinewidth O` grestore}bdef /y`{gsave bell^ 2{2 index sub 4 1 roll}repeat v`{N`}{P`}ifelse grestore}bdef /z`{gsave bell^ south^/_th xdef _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop 6 index 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore 4 index 4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore _th lt exch _th lt and{F _LLx _LLy _LLx _th add _LLy _th add F y` F _LLx _URy _th sub _LLx _th add _URy F y` F _URx _th sub _LLy _URx _LLy _th add F y` F _URx _th sub _URy _th sub _URx _URy F y`}if grestore}bdef/A`{gsave bell^ south^/_th xdef/_ch xdef xfont _th scalefont setfont _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop{4 copy _ch 0 _LLx _y1 F roswell^ _ch 0 _LLx _y2 F roswell^}{ 4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave samson^ _th setlinewidth O` grestore}ifelse{4 copy _ch 90 _x1 _LLy F roswell^ _ch 90 _x2 _LLy F roswell^}{4 copy 90 _x1 _LLy gsave samson^ _th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore}ifelse grestore}bdef/nba^{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd _th 2 div sub 0 0 _w _h w` _LBOgsave setmatrix gsave N` grestore _th setlinewidth O` grestore}bdef/C`{gsave bell^ south^/_rd xdef/_wp _URx _LLx sub abs def/_hp _URy _LLy sub abs def/_diam _rd 2 mul def/_w _wp _diam ge{_wp}{ _diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave currentmatrix pop _LLx _LLy translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _rd 0 0 _w _h w` _LBOgsave setmatrix{N`}{P`}ifelse grestore}bdef/D`{gsave bell^ south^/_rd xdef/_th xdef/_hthk _th 2 div def/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def _hthk _rd ge{ _wp _hp _LLx _hthk add _LLy _hthk add v` N`}{gsave _LLx _hthk add _LLy _hthk add translate _rd _hthk sub 0 0 _wp _hp w` N` grestore}ifelse/_w _URx _LLx sub abs def/_h _URy _LLy sub abs def _w 2 _th mul sub _h 2 _th mul sub _LLx _th add _LLy _th add v` _rd _LLx _LLy _URx _URy w` Q` grestore}bdef/E`{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix {_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy 0 _x1 0 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 0 _x1 _h gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy 90 0 _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 90 _w _y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if grestore}bdef /F`{gsave bell^ south^/_rd xdef/_th xdef/_ch xdef xfont _th scalefont setfont /_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{ _diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div} {1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix{_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def 4 copy _ch 0 _x1 0 T roswell^ _ch 0 _x1 _h T roswell^}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy _ch 90 0 _y1 T roswell^ _ch 90 _w _y1 T roswell^}if grestore}bdef/auburn^{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1 _y1 _rdp add moveto _x1 _y1 _x2 _y1 _rdp arct _x2 _rdp sub _y1 moveto _x2 _y1 _x2 _y2 _rdp arct _x2 _y2 _rdp sub moveto _x2 _y2 _x1 _y2 _rdp arct _x1 _rdp add _y2 moveto _x1 _y2 _x1 _y1 _rdp arct}bdef/jmk${gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add u` gsave N` grestore _th setlinewidth O` grestore}bdef/H`{gsave bell^ south^ _URx _LLx sub abs 2 div _URy _LLy sub abs 2 div _LLx 2 index add _LLy 2 index add u`{N`}{P`}ifelse grestore}bdef/I`{ gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup 5 index add arc _LBOmtx setmatrix _th setlinewidth O` _LBOgsave setmatrix}for pop grestore}bdef/J`{gsave bell^ south^/_th xdef _dch 0 3 -1 roll put xfont _th scalefont setfont/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup arc _LBOmtx setmatrix _dch u2` newpath _LBOgsave setmatrix}for grestore}bdef/jbd^{ gsave bell^ moveto lineto setlinewidth O` grestore}bdef/ald^{gsave bell^ samson^ setlinewidth O` grestore}bdef/ws^{gsave bell^ xfont exch scalefont setfont F roswell^ grestore}bdef/samson^{translate rotate 0 0 moveto/_dshlen xdef/_rem xdef/_spclen xdef 1 1 3 -1 roll{pop _dshlen 0 rlineto _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _dshlen 0 rlineto}bdef/roswell^{ gsave/_undo? xdef translate rotate _dch 0 3 -1 roll put 0 moveto/_rem xdef /_spclen xdef 1 1 3 -1 roll{pop gsave _undo?{_LBOmtx setmatrix}if _dch u2` grestore _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _undo?{ _LBOmtx setmatrix}if _dch u2` grestore}bdef 8 dict begin/FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-eo VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1be500 -500 500 500]def/Encoding 256 array def 0 1 255{Encoding exch/.nodef put}for Encoding 97/circle put /CharProcs 2 dict def CharProcs begin/.nodef{}def/circle{0 0 500 0 360 arc closepath fill}bind def end/BuildGlyph{1000 0 -500 -500 500 500 setcachedevice exch/CharProcs get exch 2 copy known not{pop/.nodef}if get exec}bind def /BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get exec}bind def currentdict end/_xfont exch definefont/xfont exch def/_thumbStr 10 string def /_irad null def/_orad null def/_dx null def/_dy null def/_ld2 null def/_sz null def/_th null def/_lblsave null def/LFont null def/T`{gsave 0.05 0.05 scale translate 2 copy 2 copy 8 -2 roll dup 3 -1 roll{neg}if exch v` .5 setseparationgray fill 0 0 v` gsave 1 setseparationgray fill grestore 0 setseparationgray 20 setlinewidth stroke/Helvetica findfont 180 scalefont setfont 100 add 100 exch moveto pop _thumbStr cvs show grestore}bdef/q3`{_th _orad sub dup _dx _dy u` stroke _dx _ld2 sub _dy moveto _dx _ld2 add _dy lineto stroke _dx _dy _ld2 sub moveto _dx _dy _ld2 add lineto stroke}bdef/V`{ /_irad xdef/_orad xdef/_dy xdef/_dx xdef/_th xdef/_ld2 xdef/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def gsave 0 setlinecap 1 setseparationgray _th _hthk 2 mul add setlinewidth q3` _hthk _irad add dup _dx _dy u` fill 0 setseparationgray _th setlinewidth q3` _irad dup _dx _dy u` fill 1 setseparationgray _dx _irad sub _dy moveto _dx _irad add _dy lineto stroke _dx _dy _irad sub moveto _dx _dy _irad add lineto stroke grestore}bdef/f1a`{1 exch sub 0 0 0 setcmykcolor}bdef/f1b`{1 exch sub 0 exch 0 0 setcmykcolor}bdef/f1c`{ 1 exch sub 0 0 3 -1 roll 0 setcmykcolor}bdef/f1d`{1 exch sub 0 0 0 4 -1 roll setcmykcolor}bdef/f1e`{setseparationgray}bdef/W`{gsave F setoverprint/_dy xdef /_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if/XPaint exch ldef 0.35 XPaint 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def 0 1 10{10 div XPaint _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def} for grestore}bdef/calBarArray[0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 .5 0 0 .5 0 0 .5 0 0 0 0 0 0 .5]def/X`{gsave/_dy xdef/_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if 0.35 setseparationgray 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def currentoverprint false setoverprint 0 1 10{calBarArray exch 4 mul 4 getinterval aload pop setcmykcolor _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def}for setoverprint grestore}bdef/pw${gsave/_hthk 2.5 wcu^ round dup 2 le{pop 2}if def 5 copy 1 setseparationgray 0 setlinecap moveto rlineto _hthk 2 mul add setlinewidth stroke 0 setseparationgray moveto rlineto setlinewidth stroke grestore}bdef/Y`{/_lblsave save def[exch 0 0 2 index neg 0 0]LFont exch makefont setfont}bdef/a1`{0 setseparationgray moveto show}bdef/Z`{_lblsave restore}bdef/f1`{/LFont/|_______Helvetica T/Helvetica aldus^ def}bdef/_xbft null def/_xbfc null def/_xbx? F def/XPaint null def/XFill null def/XStroke null def/b1`{gsave bell^ south^/_th xdef currentoverprint T setoverprint}bdef /d1`{setoverprint grestore}bdef/c1`{beams^ bapco^}bdef/bapco^{_URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add 4 copy v` gsave XFill grestore _th setlinewidth XStroke 4 copy moveto rlineto exch 3 index add exch moveto exch neg exch rlineto XStroke}bdef/beams^{/_prcs? xdef/_xbft xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor} ifelse}if/_xbfc xdef/_xbx?/XPaint _prcs? _xbfc _xbft n2` psquare^}bdef /psquare^{_xbx?{/XFill{_xbfc 0 XPaint fill}def/XStroke{_xbfc 1 XPaint stroke} def}{/XFill{newpath}def/XStroke{newpath}def}ifelse}bdef/e1`{/__$jk where{pop /junk save def bell^ south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave .9 setseparationgray fill grestore 0 setseparationgray _th setlinewidth stroke _LLx _LLy _URy add 2 div moveto/Helvetica findfont[180 180 J2` neg 0 0 3 -1 roll 0 0]makefont setfont show junk restore}{{6{pop}repeat}if 6{pop}repeat} ifelse}bdef/s`{gsave clippath 1 setseparationgray fill grestore}bdef/r`{ PSScreen exch pop exch pop dup type/dicttype eq{dup/HalftoneType get 1 eq{ begin/Angle exch def/Frequency exch def 60 0 currentdict end}if}if}bdef/t`{{1 exch sub}}bdef/PPDSetup{countdictstack mark}bdef/PPDCleanup{stopped cleartomark countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bdef /_PATgsave matrix def/_PATmtx matrix def/gl^{7 dict begin/FontDict 9 dict def FontDict begin/cache exch def/key exch def/proc exch cvx def/mtx exch matrix invertmatrix def/height exch def/width exch def/ctm matrix currentmatrix def /ptm matrix identmatrix def/str(12345678901234567890123456789012)def end /FontBBox[0 0 FontDict/width get FontDict/height get]def/FontMatrix FontDict /mtx get def/Encoding StandardEncoding def/FontType 3 def/BuildChar{pop begin FontDict begin width 0 cache{0 0 width height setcachedevice}{setcharwidth} ifelse 0 0 moveto width 0 lineto width height lineto 0 height lineto closepath clip newpath gsave proc grestore end end}def FontDict/key get currentdict definefont end}bdef/hj^{dup type/dicttype eq{begin FontDict/ctm get setmatrix} {exch begin FontDict/ctm get setmatrix concat}ifelse currentdict setfont FontDict begin FontMatrix concat width 0 dtransform round width div exch round width div exch 0 height dtransform round height div exch round height div exch 0 0 transform round exch round exch ptm astore setmatrix pathbbox height div ceiling height mul 4 1 roll width div ceiling width mul 4 1 roll height div floor height mul 4 1 roll width div floor width mul 4 1 roll 2 index sub height div ceiling cvi exch 3 index sub width div ceiling cvi exch 4 2 roll moveto FontMatrix ptm invertmatrix pop{gsave ptm concat dup str length idiv{ str show}repeat dup str length mod str exch 0 exch getinterval show grestore 0 height rmoveto}repeat pop end end}bdef/i1`{gsave clip hj^ grestore newpath} bdef/j1`{gsave 0 0 0 0 setcmykcolor fill grestore i1`}bdef/k1`{_PATgsave currentmatrix pop _PATmtx defaultmatrix setmatrix rotate 3.36 3.36[1 0 0 -1 0 0]{2 setlinecap 0 1.68 moveto 1.68 0 lineto 1.68 3.36 moveto 3.36 1.68 lineto 0.675 setlinewidth stroke}/l1` true gl^ pop 5.28 5.28[1 0 0 -1 0 0]{2 setlinecap 0 2.64 moveto 2.64 0 lineto 2.64 5.28 moveto 5.28 2.64 lineto 0.675 setlinewidth stroke}/m1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/n1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/o1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0.675 setlinewidth stroke}/p1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0.675 setlinewidth stroke}/q1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap 1.92 0 moveto 1.92 3.84 lineto 0 1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/r1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0 3.84 moveto 7.68 3.84 lineto 0.675 setlinewidth stroke}/s1` true gl^ pop _PATgsave setmatrix}bdef /_OutlineSmearFrac 10 def/_OutlineWeight 0.012 def/_OutlineFillColor 0 0 0 1(\ )findcmykprocesscolor def/_ShadowReverseColor 0 0 0 1()findcmykprocesscolor def/_BoldFactorX 0.015 def/_BoldFactorY 0.015 def/_ShadowFactorX 0.06 def /_ShadowFactorY 0.06 def/_ObliqueFactor -0.21 def/_ShadowTintFactor 0.2 def /_BFontUOThick 1 0/Helvetica findfont/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul def/_TXmtx matrix def/_TXctmx matrix def /_txgsave matrix def/_BaseMatrix[1 0 0 -1 0 0]def/_ItalicMatrix[1 0 _ObliqueFactor 1 0 0]def/tempDict null def usefު VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b )rdict/FCDict userdict put /isWinPS false def/_xSize 12 def/_ySize 12 def/_dots 1440 def/_fDict null def /_uScale null def/_uPosition null def/_uThickness null def/_uOThickness null def/_dUPosition -100 def/_dUThickness 50 def/_dFontScale -0.001 def/_runLen null def/_txc null def/_txt null def/_txo F def/_tx? F def/_ctc null def/_ctt null def/_cto F def/_cPaint null def/_outxc null def/_outxt null def/_outxo T def/_shdc null def/_shdt null def/_shdo T def/K2` null def/k3` null def/m3` null def/j3` null def/l3` null def/FTextPaint null def/STextPaint null def /_gMTX matrix def/macvec 256 array def macvec dup dup 0/Times-Roman findfont /Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute/agrave /acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave/ecircumflex /edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute/ograve /ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis/dagger /degree/cent/sterling/section/bullet/paragraph/germandbls/registered/copyright /trademark/acute/dieresis/notequal/AE/Oslash/infinity/plusminus/lessequal /greaterequal/yen/mu/partialdiff/summation/product/pi/integral/ordfeminine /ordmasculine/Omega/ae/oslash/questiondown/exclamdown/logicalnot/radical /florin/approxequal/Delta/guillemotleft/guillemotright/ellipsis/blank/Agrave /Atilde/Otilde/OE/oe/endash/emdash/quotedblleft/quotedblright/quoteleft /quoteright/divide/lozenge/ydieresis/Ydieresis/fraction/currency/guilsinglleft /guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase /perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute /Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex/apple/Ograve/Uacute /Ucircumflex/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring /cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop /winvec 256 array def winvec dup dup 0/Times-Roman findfont/Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave put/grave/acute/circumflex /tilde/macron/breve/dotaccent/dieresis/ring/cedilla/hungarumlaut/ogonek/caron /dotlessi winvec 0 14 getinterval astore pop/bullet/bullet/bullet /quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex /perthousand/Scaron/guilsinglleft/OE/bullet/bullet/bullet/bullet/quoteleft /quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark /scaron/guilsinglright/oe/bullet/bullet/Ydieresis/space/exclamdown/cent /sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth /Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute /acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute /ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex /udieresis/yacute/thorn/ydieresis winvec 127 129 getinterval astore pop/M1`{{ _TXmtx astore concat}if _TXctmx currentmatrix pop}bdef/N1`{_txgsave currentmatrix pop}bdef/O1`{_txgsave setmatrix}bdef/P1`{O1`}bdef/Q1`{_TXctmx setmatrix}bdef/v1`{userdict begin dict/FCDict exch def end}bdef/fontdef{FCDict 3 1 roll put}bdef/fontget{FCDict exch get}bdef/x1`{aldus^ _BaseMatrix makefont fontdef}bdef/p3`{dup length 1 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict} bdef/aldus^{findfont exch isWinPS{pop dup/Encoding get dup 161 get exch 162 get/cent eq exch/exclamdown eq and}if{p3` dup/Encoding isWinPS{winvec}{macvec} ifelse put definefont}{exch pop}ifelse}bdef/I1`{findfont p3` dup/Encoding get 256 array copy dup dup 3 index/Encoding 3 2 roll put}bdef/J1`{put dup}bdef/K1` {pop pop definefont _BaseMatrix makefont fontdef}bdef/y1`{gsi^ fontdef}bdef /z1`{fontget _ItalicMatrix makefont fontdef}bdef/gsi^{fontget dup maxlength 2 add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict begin/PaintType 2 def/StrokeWidth 1 0 FontMatrix dtransform dup mul exch dup mul add sqrt _OutlineWeight exch div def end tempDict definefont}bdef/auckland^{/_ySize xdef/_xSize xdef fontget[ _xSize 0 0 _ySize 0 0]makefont setfont}bdef/wcu^{_dots mul}bdef/n`{1440 div /_dots xdef}bdef/J2`{wcu^ exch wcu^ exch}bdef/w1`{J2` auckland^}bdef/K2`{}bdef /A1`{isWinPS{O2`}{pop pop pop}ifelse 5 3 roll K2`}bdef/L2`{/_x1 _xSize _BoldFactorX mul def/_y1 _ySize _BoldFactorY mul def 5 copy _y1 add exch _x1 add exch K2` 5 copy _y1 add exch _x1 sub exch K2` 5 copy _y1 sub exch _x1 add exch K2` 5 copy _y1 sub exch _x1 sub exch K2` K2`}bdef/B1`{O2` 5 3 roll L2`} bdef/C1`{O2` 6 3 roll 6 copy U2` 3 1 roll _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 3 -1 roll{L2`}{K2`}ifelse V2`{L2`}{K2`} ifelse}bdef/D1`{O2` 5 3 roll gsave 6 index not{7 index _xSize _ySize auckland^ }if 5 copy _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add exch 11 -1 roll{L2`}{K2`}ifelse grestore 6 -1 roll{M2`}{6 -1 roll N2`}ifelse} bdef/M2`{/_x1 _OutlineSmearFrac wcu^ def/_y1 _OutlineSmearFrac wcu^ def 5 copy _y1 neg add exch _x1 neg add exch K2` 5 copy _y1 neg add exch _x1 add exch K2` 5 copy _y1 add exch _x1 neg add exch K2` 5 copy _y1 add exch _x1 add exch K2` m3`}bdef/E1`{O2` 5 3 roll M2`}bdef/N2`{gsave _xSize _ySize auckland^ 5 copy m3` grestore K2`}bdef/F1`{O2` 6 3 roll N2`}bdef version cvr 47.0 ge{/strwth{ stringwidth pop}bdef}{/strwth{gsave newpath 0 0 moveto 0 0 lineto closepath clip stringwidth grestore pop}bdef}ifelse/O2`{dup 0 gt{dup 4 1 roll 4 index mul exch 5 index mul add 5 index strwth add sub exch div add}{pop pop pop} ifelse}bdef/G1`{fontget/_fDict xdef wcu^ _fDict/FontInfo known{_fDict /FontMatrix get 3 get mul/_uScale xdef _fDict/FontInfo get dup /UnderlinePosition known{dup/UnderlinePosition get _uScale mul/_uPosition xdef }{/_uPosition _dUPosition _uScale mul def}ifelse dup/UnderlineThickness known{ dup/UnderlineThickness get _uScale mul/_uThickness xdef}{/_uThickness _dUThickness _uScale mul def}ifelse pop}{_dFontScale mul/_uScale xdef /_uPosition _dUPosition _uScale mul def/_uThickness _dUThickness _uScale mul def}ifelse/_uOThickness _BFontUOThick _uScale mul def _fDict/PaintType known{ _fDict/PaintType get 2 eq{_fDict/StrokeWidth known{/_uOThickness _fDict /StrokeWidth get _uScale mul def}{1 0 _fDict/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul _uScale mul/_uOThickness xdef}ifelse} if}if}bdef/H1`{gsave/_runLen xdef/_y1 xdef/_x1 xdef/_y1 _y1 _uPosition add def {dup not{U2`}if/_y2 _ySize _ShadowFactorY mul _y1 add def/_x2 _xSize _ShadowFactorX mul _x1 add def _uThickness _x2 _y2 _x2 _runLen add _y2 P2` dup not{V2`}if}if{_uOThickness _x1 _y1 _uThickness 2 div add _x1 _runLen add _y1 _uThickness 2 div sub Q2`}{_uThickness _x1 _y1 _x1 _runLen add _y1 P2`}ifelse grestore}bdef/mm${gsave _ySize 3 div sub/_y1 xdef _y1 _y1 3 1 roll _ySize 16 div 5 1 roll P2` grestore}bdef/P2`{gsave moveto lineto setlinewidth k3` grestore}bdef/Q2`{gsave south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave j3` grestore _th setlinewidth k3` grestore}bdef/d`{/_prcs? xdef/_txt xdef dup null ne{ _prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}ifgB VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b\8/_txc xdef SetOutColor SetShadColor/_tx?/l3` _prcs? _txc _txt n2` S2`}bdef/SetOutColor{ _txt null eq{/_outxc null def/_outxt null def}{_txc null eq{_txt 0 eq{/_outxt 1 def _prcs?{/_outxc _OutlineFillColor def}{/_outxc null def}ifelse}{/_outxt 0 def/_outxc null def}ifelse}{_txc aload pop pop add add add 0 eq{/_outxt 1 def /_outxc _OutlineFillColor def}{/_outxt 0 def/_outxc null def}ifelse}ifelse} ifelse/_cjc?/FTextPaint _prcs? _outxc _outxt n2`}bdef/SetShadColor{_txt null eq{/_shdc null def/_shdt null def}{/_shdo _txo def _txc null eq{_txt 0 eq{ /_shdt 1 def}{/_shdt T2` def}ifelse _prcs?{/_shdc _ShadowReverseColor def /_shdo T def}{/_shdc null def}ifelse}{_txc aload pop pop add add add 0 eq{ /_shdt 1 def/_shdc _ShadowReverseColor def/_shdo T def}{/_shdt T2` def/_shdc _txc def}ifelse}ifelse}ifelse/_cjc?/STextPaint _prcs? _shdc _shdt n2`}bdef/S2` {_tx?{/K2`{_txo setoverprint _txc _txt l3` moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/k3`{_txo setoverprint _txc _txt l3` stroke}def/m3`{_outxo setoverprint _outxc _outxt FTextPaint moveto 0 4 2 roll 0 32 6 3 roll awidthshow}def/j3`{_outxo setoverprint _outxc _outxt FTextPaint fill}def}{/K2` {5{pop}repeat}def/k3`{newpath}def/m3`{5{pop}repeat}def/j3`{newpath}def}ifelse} bdef/T2`{_txt _ShadowTintFactor mul}bdef/U2`{/_ctc _txc def/_ctt _txt def/_cto _txo def/_cPaint/l3` ldef/_txc _shdc def/_txt _shdt def/_txo _shdo def/l3` /STextPaint ldef}bdef/V2`{/_txc _ctc def/_txt _ctt def/_txo _cto def/l3` /_cPaint ldef}bdef/g`{/_txo xdef}bdef/SaveHook{}ndef/RestoreHook{}ndef/W2`{ SaveHook _dots _LPmtx aload _PSdef aload _WCmtx aload _txgsave aload _TXctmx aload _gMTX currentmatrix aload}bdef/X2`{astore setmatrix astore pop astore pop astore pop astore pop astore pop/_dots xdef RestoreHook}bdef/bmt^{save def }bdef/tsi^{mark W2` counttomark 2 add -2 roll pop restore X2` o`}bdef/seni^{ restore}bdef/o`{/_fo F def/_so F def/_txo F def}bdef/_GRPHmtx matrix def /_imagesave null def/_imc null def/_imt null def/ImPaint null def/cjc^{ /_imagesave save def _WCmtx setmatrix}bdef/tvs^{_PSdef setmatrix}bdef/dsd^{ _imagesave restore}bdef/espresso 4 dict def espresso begin/setgray{setgray}def /setcmykcolor{setcmykcolor}def/setrgbcolor{setrgbcolor}def/sethsbcolor{ sethsbcolor}def end/o3`{espresso begin userdict begin}bdef/vm${/OSdict xdef end end end}bdef/b2a`{/_imagesave save def{_GRPHmtx astore concat}if translate dup scale newpath 0 0 v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/a2`{OSdict begin}bdef/b2`{end V1`}bdef/kHu${/_imagesave save def{_GRPHmtx astore concat}if translate scale translate newpath v` clip newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/V1`{end _imagesave restore}bdef/_ortnt null def/_orclr null def/_gop false def/_cjc? false def/*setcmyk null def/*setrgb null def/*sethsb null def/*setgry null def /*setsepgray null def/*setcustomclr null def/*setprocessclr null def/*setop null def/*zimage null def/$gate_1 T def/$clrOverride F def/Y2`{ALPS begin /*setcmyk/setcmykcolor ldef/*setrgb/setrgbcolor ldef/*sethsb/sethsbcolor ldef /*setgry/setgray ldef/*setcustomclr/setcustomcolor ldef/*setprocessclr /setprocesscolor ldef/*setop/setoverprint ldef/*setsepgray/setseparationgray ldef/*zimage/image ldef end}bdef/X1`{ALPS begin/setcmykcolor/*setcmyk ldef /setrgbcolor/*setrgb ldef/sethsbcolor/*sethsb ldef/setgray/*setgry ldef /setcustomcolor/*setcustomclr ldef/setprocesscolor/*setprocessclr ldef /setoverprint/*setop ldef/setseparationgray/*setsepgray ldef/image/*zimage ldef end}bdef/$curgry systemdict/currentgray get def/$setrgb systemdict /setrgbcolor get def/$sethsb systemdict/sethsbcolor get def/$setcmyk systemdict/setcmykcolor known{systemdict/setcmykcolor get}{{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict/setrgbcolor get exec pop}}ifelse def/a3`{ALPS begin/setcmykcolor{gsave $setcmyk 1 $curgry sub grestore c3`}def/setrgbcolor{gsave $setrgb 1 $curgry sub grestore c3`}def /sethsbcolor{gsave $sethsb 1 $curgry sub grestore c3`}def/setgray{1 exch sub c3`}def/setseparationgray{1 exch sub c3`}def _spotOR?{/setcustomcolor/i3` ldef }{/setcustomcolor/b3` ldef}ifelse/setprocesscolor{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}def /setoverprint{d3`}def/image{ORimage}def end}bdef/b3`{gsave exch aload pop pop 4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}bdef/c3` {$gate_1 $clrOverride and{ALPS begin/$gate_1 F def _ortnt null ne{_ortnt mul}{ null}ifelse _orclr exch X1` SetORColorProc a3`/$gate_1 T def end}{ALPS begin $MetalHead begin c3` end end}ifelse}bdef/d3`{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def pop _gop X1` setoverprint a3`/$gate_1 T def end}{ALPS begin $MetalHead begin setoverprint end end}ifelse}bdef/ORimage{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def X1` _orclr null ne{_orclr customcolorimage}{separationimage}ifelse a3`/$gate_1 T def end}{ALPS begin $MetalHead begin image end end}ifelse}bdef/W1`{ALPS begin _prcs? xdef/_ortnt xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if /_orclr xdef/_cjc?/SetORColorProc _prcs? _orclr _ortnt n2` false setoverprint /_gop false def/_spotOR? F def Y2` a3`/$clrOverride T def end}bdef/Y1`{ALPS begin/_gop xdef end}bdef/*findcmykcustomclr null def/*newcmykcustomclr null def/epsdict null def/typedict null def/*$setcustomclr null def/_spotOR? F def /$spotOverride F def/$gate_2 T def/clrAdjust? F def/_fhbool F def/f2`{ALPS begin dup dict/epsdict xdef dict/typedict xdef/clrAdjust? T def end}bdef/g2`{ cvn 8 1 roll exch 2 array astore 1 index cvn exch typedict 3 1 roll put 5 array astore epsdict 3 1 roll put}bdef/h2`{null exch 2 array astore exch cvn exch typedict 3 1 roll put}bdef/i2`{ALPS begin clrAdjust?{/_spotOR? T def e3` g3`/$spotOverride T def}if end}bdef/e3`{ALPS begin/*findcmykcustomclr /findcmykcustomcolor ldef/*newcmykcustomclr/newcmykcustomcolor ldef /*$setcustomclr/setcustomcolor ldef end}bdef/f3`{ALPS begin /findcmykcustomcolor/*findcmykcustomclr ldef/newcmykcustomcolor /*newcmykcustomclr ldef/setcustomcolor/*$setcustomclr ldef end}bdef/g3`{ALPS begin/findcmykcustomcolor/h3` ldef/newcmykcustomcolor/n3` ldef/setcustomcolor /i3` ldef end}bdef/h3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def dup cvn epsdict exch known{5 1 roll 4{pop}repeat cvn epsdict exch get aload pop}if f3` findcmykcustomcolor g3`/$gate_2 T def end}{ALPS begin $MetalHead begin findcmykcustomcolor end end}ifelse}bdef/n3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def/_fhbool xdef dup cvn epsdict exch known{5 1 roll 4{pop} repeat cvn epsdict exch get aload pop}if _fhbool f3` newcmykcustomcolor g3` /$gate_2 T def end}{ALPS begin $MetalHead begin newcmykcustomcolor end end} ifelse}bdef/i3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def 1 index 4 get cvn dup typedict exch known{typedict exch get aload pop 1 index null eq{ exch pop mul 1 exch sub exch pop f3` setseparationgray g3`}{exch{f3` mul setprocesscolor g3`}{f3` mul setcustomcolor g3`}ifelse}ifelse}{pop f3` setcustomcolor g3`}ifelse/$gate_2 T def end}{ALPS begin $MetalHead begin setcustomcolor end end}ifelse}bdef/BMT 2 dict def BMT begin/*def/def load def /def{1 index/fcheckload eq{pop{pop pop}}if *def}bdef end/t1`{BMT begin}bdef /u1`{end}bdef/u1a`{findfont pop}bdef end/setpacking where{pop setpacking}if %%EndResource ALPS begin /W1`{ALPS begin /_prcs? xdef/_ortnt xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if /_orclr xdef/_cjc?/SetORColorProc _prcs? _orclr _ortnt n2` h`|sU VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bmGfalse setoverprint /_gop false def/_spotOR? F def Y2` a3`/$clrOverride T def end}bdef /t1`{BMT begin userdict begin}bdef /u1`{end end} bdef /G1`{fontget/_fDict xdef wcu^ _fDict/FontInfo known { isWinPS _fDict /FontType get 3 eq and {_dFontScale}{_fDict /FontMatrix get 3 get} ifelse mul/_uScale xdef _fDict/FontInfo get dup /UnderlinePosition known not {dup/UnderlinePosition get _uScale mul/_uPosition xdef }{/_uPosition _dUPosition _uScale mul def}ifelse dup/UnderlineThickness known not{ dup/UnderlineThickness get _uScale mul/_uThickness xdef}{/_uThickness _dUThickness _uScale mul def}ifelse pop}{_dFontScale mul/_uScale xdef /_uPosition _dUPosition _uScale mul def/_uThickness _dUThickness _uScale mul def}ifelse/_uOThickness _BFontUOThick _uScale mul def _fDict/PaintType known{ _fDict/PaintType get 2 eq{_fDict/StrokeWidth known{/_uOThickness _fDict /StrokeWidth get _uScale mul def}{1 0 _fDict/FontMatrix get dtransform dup mul exch dup mul add sqrt _OutlineWeight mul _uScale mul/_uOThickness xdef}ifelse} if}if}bdef end ALPS begin %%BeginResource: procset IMAGE_PS 1.0 1 %%Copyright: (C) Copyright 1993 Aldus Corporation. All Rights Reserved. %%Version:1.0 1 /IMdict 100 dict def IMdict begin/bdef{bind def}bind def/xdef{exch def}bdef /ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def} ifelse}bdef/setoverprint{pop}ndef/findcmykcustomcolor{5/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef/findcmykprocesscolor{5 /packedarray where{pop packedarray}{array astore readonly}ifelse}ndef /setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll} repeat systemdict/setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef /separationimage{image}ndef/iB^{/_imprcs? xdef/_imt xdef dup null ne{_imprcs?{ findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_imc xdef _imc null eq{1 _imt sub setseparationgray}{_imprcs?{_imc _imt setprocesscolor}{_imc _imt setcustomcolor}ifelse}ifelse}bdef/iA^{setoverprint}bdef/level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def/_colorexists? level2{statusdict /processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{ systemdict/setcmykcolor known def}ifelse/IMcolorbuf{0 1 2 index length 1 sub{ dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/IMsetcmyk{ aload pop/_ik xdef/_iy xdef/_im xdef/_ic xdef}bdef/iC^{/packedarray where{pop dup type/packedarraytype eq 2 index type/packedarraytype eq or}{false}ifelse{ /proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse}bdef /currentcolortransfer{currenttransfer dup dup dup}ndef/setcolortransfer{ systemdict begin settransfer end pop pop pop}ndef/customcolorimage{ _colorexists?{aload pop pop 4 array astore IMsetcmyk currentcolortransfer{_ik mul _ik sub 1 add}iC^ 4 1 roll{_iy mul _iy sub 1 add}iC^ 4 1 roll{_im mul _im sub 1 add}iC^ 4 1 roll{_ic mul _ic sub 1 add}iC^ 4 1 roll setcolortransfer /_mbuf 0 string def/_ybuf 0 string def/_kbuf 0 string def{IMcolorbuf dup length _mbuf length ne{dup length dup dup/_mbuf exch string def/_ybuf exch string def/_kbuf exch string def}if dup _mbuf copy _ybuf copy _kbuf copy pop} iC^{_mbuf}{_ybuf}{_kbuf}true 4 colorimage}{aload pop pop 4 array astore IMsetcmyk iE^ currenttransfer{_imtint mul 1 _imtint sub add}iC^ settransfer image}ifelse}ndef/iE^{_ic .3 mul _im .59 mul _iy .11 mul _ik add add add dup 1 gt{pop 1}if/_imtint xdef}bdef/iF^{/_imprcs? xdef/_imspotint xdef _colorexists? {currentcolortransfer{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{ _imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll setcolortransfer}{currenttransfer{_imspotint mul 1 _imspotint sub add}iC^ settransfer}ifelse findcmykcustomcolor customcolorimage}ndef/iG^{/inv xdef/h xdef/w xdef/AsBin xdef/imbuf w 7 add 8 idiv string def w h inv[1 0 0 1 0 0]{ currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}imagemask}bdef /isCL^{/AsProcess xdef/TintPercent xdef/ColorName xdef/_k xdef/_y xdef/_m xdef /_c xdef/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring }{readhexstring}ifelse pop}OverPrint iA^ _c _m _y _k ColorName TintPercent AsProcess iF^}bdef/iI^{/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef /imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}OverPrint iA^ separationimage }bdef/iJ^{/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 3 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{ readhexstring}ifelse pop}false 3 colorimage}bdef/iK^{/bits xdef/h xdef/w xdef /AsBin xdef/imbuf w bits mul 4 mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}false 4 colorimage}bdef end %%EndResource end ALPS begin /colorexists false def IMdict begin /_colorexists? false def end end %%EndProlog %%BeginSetup ALPS begin PPDSetup{ (; document: IPD234 - Penelope) statusdict /jobname 3 -1 roll put }PPDCleanup PPDSetup{ %%BeginFeature: /#copies 1 def %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *ManualFeed False statusdict /manualfeed false put %%EndFeature }PPDCleanup PPDSetup{ %%BeginFeature: *PageRegion Letter letter %%EndFeature }PPDCleanup /isWinPS false def 0 k1` f1` 40 v1` %%EndSetup %%Page: 9 1 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$0 bmt^ o` N1` F M1` $0 tsi^ /$0 bmt^ %%IncludeResource: font Palatino-Roman /AA /|______Palatino-Roman T /Palatino-Roman x1` /$1 bmt^ /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1555 (IPD234a) 0 -0.009216 170 0 6 A1` -104 1555 (- 9 -) 0.046585 0 76 2 4 A1` 712 1555 (June 24, 1994) -0.037033 0 263 2 12 A1` O1` N1` F M1` $1 tsi^ /$1 bmt^ %%IncludeResource: font Helvetica-Bold /AB /|______Helvetica-Bold T /Helvetica-Bold x1` /$2 bmt^ /AB 260 260 w1` T g` 0 0 0 1 (Black) 1 T d` -585 -1248 (Appendix \321 Examples of Editing Symmetries) -0.050613 0 1171 5 40 A1` /AA 220 220 w1` -825 -1144 (The editing grids shown below resulted from clicking on the cell in the fifth column and) 1.094406 0 1800 15 87 A1` -975 -1090 (third row. The selected symmetries are shown below the grids.) -0.040146 0 1273 9 60 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:fv.tiff %ALDImageDimensions: 213 210 %ALDImageCropRect: 5 2 213 209 %ALDImageCropFixed: 5.00000 2.00000 213.00000 209.00000 %ALDImagePosition: 121.700 166.050 121.700 265.900 221.550 265.900 221.550 166.050 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.600962 0.000000 0.000000 9.647343 -3686.000000 2602.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 208 207 true %%BeginData: 10976 Hex Bytes iG^ 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 040100401004010040100401004010ie\ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bV0401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010j,+qS>G&Pnu Sv#G?~-Hn&~Wj@1p{ !;)Uyi+ cwTio8d*_g$^ nY] g<\$yL E).yW2UU>jm[Sk*B'1;SR@GH$NT;:Es!_zF!7YXE'J#m6:FCQ= ^YGY# 2(5 i PJ_pV"k378bJgNH aDQQ".\lq)Lq(2-6/LJB0GZ BD. 8ZiO6.,"8D>M:)bj}/iVL|Vc\Yb,Rb|PicDp3oLE@_ aLoi=oOAu]F/Zb`AYJ~XqU}>OIm+ rPt4n(Y# MZ X$zO>a7*{iT"GQC _CqmCU8vWWOh2q2A)`PPmNWiw0BQO cT4>(:=8CzFY@'d;v2dQ.AFNWmwG^7} N^.( ig1Of5@"W=YW24Qm%C5lGh) d>(P0U"/qNrQc$K^X~D+BC]3/LIVh-,:r3Tno&_p!IC> _JFugfjSz@O >!J CDJjMOY0N55OHiWVru' HVUHY"x~MKR[y*F# ZYBwM9LoAp\xo<3x\1KwnY^JBy*SS qwiDvp9-BEN}mS*xLK0a@Z) EWdJIy VV,JS#XVSH=S~p\V5HAVw$iGjL!8)55|6F ^lSc"!:+r\N~cs`FV{oGk93 *8uu09xP+k[L'[|nNOC^f32*IY -z]su*j\& tQJHVOSZCG_<8`%c?]uDydQP2t}c9$;$WRtzn@zO  d;n{A#uBlQ?t g7mA +,,r%IJYxB]JhuZ(~X\V2N[:Mok G`MJF N7:+0l]$7 r[0AA^12cwb# XQ/[  %-W&x6K+ pzL->>FWP=J|L3n@Mv$2 FSRX:X4dTY9F8(X]LU tC+qI f\m=`:SoYZhW\ D::{YU FnA{S/) N+F'(]ri]V"Q%mP~NfM\3 q,$lC`"S6 f4Rx c9 gOa[IFu%ZW:P']_t l4\\Zam1ZUeGtVTV2)K( dX WR[bBY5?2T3M@fh*K@HU c+9 FM7x}g(p*1nFZ-+e djkoNR`~)jJ}ypZo@^k-;`i[_G| vGT#Pp6ZsF'/w&vMm'h\k]]8()SCn-X@*c"Qoa7/l(Kl[("<t;|K&I,^X_I+McEqGTCLSLz@kAABFrF\HWeK 7^[W(gSz~C'A1u)@k5dWQKQWD~QTIL-i)w*>Z C,k 8p[6PP/{@"Q-'YyYU0bB TH-xeSBOWZ uhP{wOBV0h`HJ ! ?QG+f[3cFVZz ip<:~m]\U<\}p 4<=Iwl?t*Dxb\"~Be!8bda78i]KK- N )RT~a_V!*8HN|,D|L.S nkb(;G1  .F+L^IV;j%+a9LvK95 N&j/!>N.[:E#cw8fc5u"_2 UH TU+ts5X~=ykX45ORTZ< A{/.2;icvh4:O N#: d<(c<(Ha3.\$f`m)_>{rrd/l*-$dk-r`:-y 8d&y}ZQI !XZX]l@!aeX#0oQ"c58- \G+8Lm_z8vMIpp[VLPL|Lw;W^71TLLiVuf_D^XcxV*tRE:rL0 WT]@Z\\x&Qx,VjN;ckHS.WϫB aw'hK!Y$aXk/h*9nI40 mu[qo\O "h1JGSX[7R]y\pHtGe# LQVQ#.g2o2\($N bp/]IQ-oSqA"4R- >G[ Fy?%I^IQz &sV2!NPbW3I#]_p\|hIa}j_b.I;%Se~Wqnk|)[KZM,ZZXK qP3;<Xl"^R Jr$v,%4KSA; GvEXkOs:XWw^pz~Dmj>87QB TUv*^Gbdx)dE yeZeF^%C IA_3[Cl,R{yn`&ecjSf=3B(lPc|w:bgbx6E~&~'!P%>CCLS)!mKDN`@y(RPj4X~^1Nh%Y p{%#PXY CD%/A:3*u){[3eI oRH|7yF .a~gK[AVN(pB&B @ WSRYnW^5|\ I,^ySllH' J%6 M:OW _#@"+&G\HCN)GIs~P{vOT`' \LUiZ-2^`U,K~2K n%w2SCayW5X+QzNs+#y =Q$O1 w2|h)-=WDP?u$i=7^Sf1O?([k(W,e$ S2I!>u/I {nR_JG!>TaEjgV_RxYm|ZXNIQ+9/~;W=E=t^av ^M^Y\nSXk~#eR/SVH ]Za6qFLDXX`B40}^1CEP~.dJ02CQ|=HIGATQYCu,v"a?Q'QCL*@7J/WD/OZWFI@PBW4N EIE18K|] ]wP bSKK >_o4\dAE^kQo,]@T-<',wq4Qw C2ts:$ oQ5 ~CqO2TU4JPLi$2j^@NYfw FV0W$TP^kdp18Z*0dMQo~G45(sB$3 Tj-B S=1wL 7X=X1@J ] M4C _[Lih`vjAkcoMK!^V7xp XKW-`9XH7VpnWt';5p++fy/dBDT~B24jdUxNSuV]^G~ ?XSJSM j{GY2bQBw+18h)(3Q T0[1MqF};$Shv u00M #V"=tRNcAK1o;"WiJ%|s2g(5ff5>*C h29:U\,M_C#iunXC>J3H\ S\;D3d2r ;^vQI)iSE];,[XY};B Q UDMa?FZUNuGu3M5]JJR!lmAqO1JEN@^DW$& _O mB,{I4[5E/'PR/ HW !il4P"j _z$Q1@:UYyow1,P<94b H06jkal>^mjTx ed^]Gfxtc+`%|Gt bg]=n*A[3Tjlb$?v];l;i> tf"aa@WM G%&75:C Zu{IA8@ ?<0v {:T2MF h>J4UK d[Q&9]JkYSxcA ZVsec[YD 2H$pi6E^ d1<AAJ9"i^_8XWJ ^H|g*GJD{BQT8&gX ^UCBrm71"p?b|~lIzs$QVOILu} /a$uBg$:GKLfBOQPOP/lCMbZ GUonh" \J)ot A~Oh.3_GEUAe UNYa(QYsM`RezRa:"s F$FZr#b6i gN* o@LY-y,v R SbW `'1,j:od_0wm?(B/'7*Vp;oI;s:^(L Vi[i;p ;<,_a}J>E,_RQ1B7 P0uNhc~'+:]7~ n:`Nt=4bDfYq ?Pm1D:p do#&>ZDyK%_H^YS>JYd#\b*K_(kJU(R8{ <: b_@x cD_^[kvOsZ [shh/'P`EnSwkPE><_ Zi 2CR3kCJOU x oHED 9Zw8^0XT P-UA<] mst.(q# .lchto>s[&MH~zCD3g(Vt=H?tcd>?{OOH(rMpvqz=4OFBQGsAjkG\P<mVjG8(JK CJB0enA6V G'oJ6R`aZJu:$KJUO n6lv ?cn[nU _#JI@l^7AarW$E*"( pFPz@J{ypzCGEPD+m+VYWC~SX^]K%(,7nyTR@~0 ;{&L UA"uZP"(BjRR7[[S 5yBo>pe+ Y_&C_MYU ["OXTL 8BLF#Rz4"H/8m%jlnDQr,s*;/LQ`URRm3V<COHT 1nygt D$.lJYZAv 90J>H}Q+]X] qn-?  lD -VZI:I\mE[% &HSHd )IBd @r {[wEX{$NFm zd ^ WM-#D"5XY0-; "IS;UVP5Siu}| QhVIO1Ag@zq|51{Zr.M6$l plh=m jw{~1o^%)0 %lO)< Nf`Hk(k7 m-)#ttG'JQiWQNsYEt=.w}eI^Y.|Pu SDDdr\a'w{)'Rca,2W\\ i i)9@/R6IV>?DV[myZne-4eQE@  EP'UPZ# zNz|@x_U#zw@ODDE!X^ K__E &\V-Wc~Qn\9,[Io5E-q\ZOHT\Qxrclg:L X N=&&p7  1MAuBe:]/(Uce2XCCUR_2/V*cFv]Y]*c{A-+7\-qUZd6VO]LVZEd.7dXwCgS&6#\QrVbDcj^U_fH-F.uw) X[KNhUcOo`1 'V  smy)g+_9WOy{y^P_{K3N tH![gg){/92HC n4(g}"?^Ikm&~G ?ufp4wB_`Y7cEH\m}?*ce/lj;%QGGS+KP$A5C a Ec_T;%6[g-)LvSJssL36=&-;ALM{{ep=JSJO*DfO96um~dY4`!:;-Wg{dejx5+2h1E|ft ~IoYHMJ[LRH?/Dr'jN /\g*jjE1LV75Tb@ _R+8*1mLG 9Jw(c+0=D Djv]0`{O}LZGbZ|EPo|*a?_+<{bn$Pk44*s< F{I`'q#C?TG:g{%ZPv\ ^=isGQGK/`at_(BU7x L RO@@A1,~6J]HcT E%^\$vV(Dh=xt-Op;Y%&dv+|5`+[7h)%EhzB{zNcWb"pZ+-l$/:_3) RBNa\h),X}!Gp{J##mJWzy okua VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1be040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:fh.tiff %ALDImageDimensions: 209 211 %ALDImageCropRect: 3 3 208 204 %ALDImageCropFixed: 3.00000 3.00000 208.00000 204.00000 %ALDImagePosition: 257.550 167.750 257.550 264.250 355.950 264.250 355.950 167.750 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.600000 0.000000 0.000000 9.601990 -969.000000 2635.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 205 201 true %%BeginData: 10658 Hex Bytes iG^ 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 10040100401FFC0100401004010040100401007FF00401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 100401004010040100401004010040100401004010l VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bt0401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1004010040100401004010040100401004010040100401004010 1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:all.tiff %ALDImageDimensions: 215 211 %ALDImageCropRect: 5 3 214 210 %ALDImageCropFixed: 5.00000 3.00000 214.00000 210.00000 %ALDImagePosition: 391.950 166.050 391.950 265.900 492.750 265.900 492.750 166.050 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.645933 0.000000 0.000000 mX VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bo9.647343 1719.000000 2602.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 209 207 true %%BeginData: 11390 Hex Bytes iG^ 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 0401004010040100401004010040100401004010040100ns&? VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b&40100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 0401007FF00401004010040100401004010040100401FFC0100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 040100401007FF0040100401004010040100401FFC010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 040100401004010040100401004010040100401004010040100401 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC01 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:r-90.tiff %ALDImageDimensions: 214 211 %ALDImageCropRect: 3 3 214 210 %ALDImageCropFixed: 3.95703 3.00000 214.00000 210.00000 %ALDImagePosition: 121.300 351.000 121.300 450.850 222.100 450.850 222.100 351.000 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.554502 0.000000 0.000000 9.647343 -3694.000000 -1097.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 211 207 true %%BeginData: 11390 Hex Bytes iG^ 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200o@ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 080200FFE008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0p VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bG80200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:fl.tiff %ALDImageDimensions: 215 211 %ALDImageCropRect: 4 3 214 211 %ALDImageCropFixed: 4.00000 3.96094 214.00000 211.00000 %ALDImagePosition: 258.100 351.250 258.100 450.650 359.350 450.650 359.350 351.250 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.642857 0.000000 0.000000 9.557692 -958.000000 -1093.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 210 208 true %%BeginData: 11445 Hex Bytes iG^ 000000000000000000000000000000000000000000000000000001 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 08020080200FFE0080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 080200FFE008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFqХ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b\FFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 080200802008020080200802008020080200802008020080200801 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF801 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 000000000000000000000000000000000000000000000000000001 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:fr.tiff %ALDImageDimensions: 211 211 %ALDImageCropRect: 3 3 211 211 %ALDImageCropFixed: 3.98047 3.96094 211.00000 211.00000 %ALDImagePosition: 395.350 351.250 395.350 450.650 494.700 450.650 494.700 351.250 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.552885 0.000000 0.000000 9.557692 1787.000000 -1093.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 208 208 true %%BeginData: 11029 Hex Bytes iG^ 0000000000000000000000000000000000000000000000000000 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 08020080200FFE00802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 08020080200FFE0rq) VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b~0802008020080200802008020080200802008 08020080200FFE00802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 08020080200802008020080200802008020080200803FF802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020soe VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b/080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0802008020080200802008020080200802008020080200802008 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:r90.tiff %ALDImageDimensions: 216 215 %ALDImageCropRect: 5 4 215 214 %ALDImageCropFixed: 5.00000 4.00000 215.00000 214.00000 %ALDImagePosition: 257.350 515.200 257.350 616.500 358.650 616.500 358.650 515.200 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.647619 0.000000 0.000000 9.647619 -973.000000 -4410.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 210 210 true %%BeginData: 11555 Hex Bytes iG^ 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 040100401007FF0040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 04010040100401004010040100401004010040100401FFC0100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 tI VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b5#040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 040100401004010040100401004010040100401004010040100400 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC00 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:r180.tiff %ALDImageDimensions: 214 214 %ALDImageCropRect: 3 4 214 213 %ALDImageCropFixed: 3.95703 4.00000 214.00000 213.00000 %ALDImagePosition: 394.650 515.450 394.650 616.250 495.450 616.250 495.450 515.450 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.554502 0.000000 0.000000 9.645933 1773.000000 -4405.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 211 209 true %%BeginData: 11500 Hex Bytes iG^ 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0802008020080200802008020080200u9,KרQ{lqsqqvtZwHv~hrrw )4e,Q[ZgRN9Xe]AQPpbc#? lsw`smws_k +!)bgtlrzJe 2HT`vkEC7bZJcg" /,&0xbKwq{wg':sIHQ@[sj<rwtrr~KIrrwIwr~Ntt  89twr~stwO}Ft}O~str 8 9?4v~Ktvv~vtvv~s<=? 6?< =?==5=5 4<~r|wt~r|Jt~r|wt~r}vL  < ===Cr<<vOrKJzrqwwzrqJwzrqJv~rtwuCrtJtvr< <  < ? 9? }rt{v}Ot{K|vt~v|vwCK~~ttK|vt~v}Kt~v|vt~v|Kt~vAstw 8?  9?  <7 t}K~rtwv~ruJv~rtwv~rtJvCwtvr~wwJO~wtvr~wIJv~rtwv~r7 57  <  ~s|wp~sKM~s|wpCrxJu~rxwuCp<~OqJwzrqwwzrrKJzrqJv~rtJv~r <<5   < ?  8r|strO\j:# v\@Z: / ') 3'"'I+1(I,(. I/'?YhUU^6sxorY +6?. 9I~y}VTUXwIgB{`BTVhI:~~dwUuMtwrltuy vwCvltuhAstr@[.%(' '2%)*tcs|c /  " l|%qwhErtfq{~kHw~gpsr`qLJf}w}iu{rY0fKrvCg6/% #Q>^]p@ScYtc}rp`s}J`v|ipCrE_*$%})FbHA],aJ[UTBHOdp~76,& /.+(8x`JizrqZv`rtJf~l <KIs^YWQ%?uvu{V#*TXiZO 9I~y@WS#* :6<{PSF )$&G^8|xA__%)=?'KfvSwAc+%)# nAy[AtxOJ}i tog# Zu%.*WN6QY[VWp~o|h|[DDQI5%;\gx@QL7j 3<{~' ? b} < 9( wqB=q`wtKpu$.]AU =? AFLP(9pPnQ)&@X68qmA_|xMN\A7]}f/4q ~t|vAFt}r|{t}r|{w@r|{I|v| v}CI~} I~~|It~~|tt~{ >6z utC|Ip~|tp~|tsC? uv >< ~q?<|vB@ Jy < twy~ppw~pp 4rJv5<?@9wwzrqJwzrqwwzrqJuCrtwv~r Jvtrv<;rv89uJrvsvwOt O`S#&*2,OaS P|_ZZWz4kmT>\CZn>fZ^I@^]QMeQUPc5swoqQ~oDJUJ]\>7>j. #f6  :.16+7QzFJ\aG]YH@ZK&:A5L@Ao5wHqUWUT~QZWBYUSZ :UTQ9LTY_|XUyP`XFBhD][^X6mu][AWT\LGEbp}sdkon*!('^CPx9KQ6"!#Og // !+#+]\)5tbvvp9=u|uy]UWiNG[A#!@ ;()==q}tydS^VG0*IvSLW] 4 ?1 {sb >6vzObvtCv|Ka7 )%"h\7/:'+*|n|pNh}{tdsB~jJr~kv}*3Gkq~zlKqvdGr|nv}qaEu  = <0k># #Tn\2U\uL_Q_ <5xgt{r6Odp}|}[PV]wX`^<+87"pba*5%!$BB0g7<:/% # -V^B >rw<=sYQV_txu +#nUg6|cfvQtFv@g/%,  {Vh]VvPXQ^;Y+'. Kxm :+ 5'7AiLUWFCQ@;i3 " J{o << q|+  < 5 l[fQRRH9X)F'k.bkwjvr~gtk KXCltwvnsjJv~bl*/!/neBltwKk676#]r K$U]FU;<DA . {U]]\@QNU  OQwrBDWO=RwmWK|tzK|rtBv|rtK} tHCy?  u>9 Iuv~ztHv~zIw~}u65|v|~t|K|~t|v|~t|Kz5tvz~utvz~uu<14tpv~tpKCv vwKCvxvu~vxKu~v=qvtGvqvwzvqvwzvp= vtvv~v vw>==~vJ8=I=vvrvwKtGv}vtzv~{H@vtzv}vtGv}v7 |rtuArtv|rtz= CK} = > zuuvzzutHGzuuvzzuHvD |ts 5  ? >9 ? uuKzzuuvzzuuwDGuuvz xv~ 5 5 <45==5= = uvu 1 =  =zvuvvzvuKvzvuvvzvuwHGvuvKvtOvv vtruBKtrvvtrv=0=  1   >6? 4 |w  >7  = ?=ttv~~tIv~~ttv~~tuH~x ? |ts ?@WVvULX}X!4$$'3G+/ w.=%J)$'lN> SSNP_jSV?q~g{W}Xq@->n'FBY@WikqvoyU}SyBQHSE< ^_xlQOB[DKbB1DMCl1 >+ZjUrY]U~U]U6-vESRQyRb^t^Sx\U^A}6`B[ZTSD)t^SEYU_DCz\I`^^VlbKUZXD[gV6NutsYS_kC]_\^I]]jC  }~wyU]UVsJSC]h[H<>owtvGj 8>"$#' =*  AWV !5 <9 ewv{dtqvzId=3 ,'(*bY~PH[X^! 4   99 ;#  <%   - 4#=q|ty]QVi_+5+*?/*|kwprh{vucICvkrv{Ka> 2*+!$(&*>:#{fg4PSWs~2OutwYRcU}[_VB>3 $=  !q_Q_W>}pvF``] +$?Xb{euurGn8>%RUQsOjLNZ]DUQSrV>}pwz]][S?Y  ;Mtx|('_Yt7& :%K 7yHqjvmKao(!. QZU_D Y'"v+'0 /6eAT2#'NCe}=Bjpv=c <'2Q=8u@TRZUSi1KXlXJUz _\[I=|~#*SQUSlc>q{oi7Y " >XJ);IOcowYodgL]K SUFAaNKD$:BGTa "j^UB|1h<7G4b#{C@T]k)$LgMj\A$4(iu 2T1//#_~c^1NC@CI yVhUV\hUWBS K "pQTP=|2"+ Ru&#'4(:|exw{wDcpIw]QbhxB]Lb^SF ,<  } 3]UWTr|f@wYHQTuft =>9<-xwuhvzvuKKo9}}-' *(5.://(rwTxvqbI{tSvw~fqtv`u08 7# ue  ;1 }tg21>rM|z_Q[]aWCSTGzdSUewzVJ~z`tr~dpuv}RtqQS* S_Xl34$|lW3),/72Kj rDi]QRrVm[3@gzlqwwjw?1yhuzKlwj= ~\ZSZ(=` ('!/-pf<u|uy]UW* 4?4)2tbY$'#5!Ocp|w@]PWU`IAU =L|ySQT`wLQJuQN ;6;9+r[WZV\ZV[G9ZUQYU>ytay_IQHJZJO]GbQHJZJ=g;1 1  "?3 =uty`ttJE5o-ZW\UQM5TW\J]_qd% 5,> hyKujn *$_f<+= HBNUUre=T]\HU3  yBAU,sUW]^ulDU < {lHrI@UB=Ysn=rvwvuOvwvvrKu~vxvtBK5< < >;xvtCvxvu~uEvu~Kz~utv>=?9 9>9?9<<5ww~rpww{rqsJ~79svrtsvrtrKrtsv|rvrKJrrswwrOvJv9wwHOv  =wKwGvvzw <= = 9=  }wJGv}vtzv}vtzv|KtzK; tpw 4?4 45  <;  5? 9 tr >?9 9 ?  <9  5=  9 |ru 2ruK}rt{K}q  5=  ===wvwvKrJJrKvvvsKvs>9= =v|1 tzw ? 8  v}J  <1  = 6tv}~uEv}~@{tyrABI tpw 5  <; ? z} >tz~}tuGkh\ex,1!KaPw-. ):Cj\P5]AVj5ZYoW5M}^]QM['"Qc7s}osYXy;+<`[66#PPT,zavUBOXCUHBwQYI]R@BW>dD_LGBCc=uA|y_'*-.&v&sG( /6{W[Wv[RDaioD6|;_X#%>f%?+ (<| ?xuqfkgbh/**6#V@U2# #Kc 7}pajW\-,UWK[Y^K?5 sztpU%'"{v`Fb\[Frf}% / >)Hw _U_\q@[H~fJlY'|j|:/ z~~? 5   ZutsYS^Uj[AQDV-+u[~{qeuxrdxs|lvJPq}~h~ OxL !:v[vBslLvvfuswhtsvKc !##5R*3D[S^ <1  qwMFQQ\UqS\TBfE@^ `HclYCH=7 L_WW\{]Z_K,; * 5+xvmjxv}nl *,-/aKi35ryTYhQlPaF >)Ht}{_hZ\|@<< -$:wdd,/!7!9{}UYij`AtU<7sutsYS^TC{S@@^D ;ww[}bInc'#"(^XY%9xd# F &7$60"?e1'?+ QH?Basqp~vNdrhvtrvftvtrsfWwzq}xb|M|}l}wtzw 5}pUzruwvzd)$!$3K,#)4#]sfjOhCKpbwavprgBhprwownr4 ,"rhXQ]$FDA\[tj4_S$1+==? MAGQ~\T[g}XFi{WLzwFQO4Zuj4zzC =7   <  <rqJCOp{w}rp{w}rpzJ}rp{w}Op  Grr=<<q99>=<~Jv~rtJt wtvrKIvr~wts ,t^TpQEl?( $%#'6K*( O"<"O Rnl<}uQfW@nWS]W<upfx\DU2CY:_(.2:>Z"'$g * '60.?f!7 -2&20+?Z6-2J3014pD\nQYRcQzYaW{DPVUxQ[Zu]jDUie}Ga@[^\oFpVRGYQWD4E}Tw $d]bWX[ITF@]_j:g1/#,"+/.6+-%4bq fpq <Hxqx\USQOC[DgTR@v_pvsfMwHvg /# 3[@wX>'*@e@l}OsvqnsjvrJtfpsjvr~wIcp~pWvrKIKg YXkWd[K.0]fU00  94* 4: "ro6 <) <ux|E_+%(!(!34-#}d{w|UI =tOE~}SeVTJ[U^@`MITjb+)'> Lo> QUXTp-.% Bbrewurc "uOpcwaOr'vYPR_9)pxMy\Q!;]l,639Ob^=T&#h( _u{F/=NSJw8CPZuC@ GFN;31 :F][j7"b o% nYYwmNBKMgUV~nu]dom'8Rgga%:hr_r~cbzH;ivpG~g??qG,D!-(d)DE\l^MCd\VZWjAXPIFPQQCEyaw]~GTl\KOe`ZA=GfN+,5} %L 3!;! 7xbmvobp~fIy.=):7;?9< DVFU]c@"ZNdu31)/33g>#"xgKcg2"1,}QyY<,z(\=('='=xd}syLqkvmOan9*--/4/(!(7W'U\P?|pdA_pUrB[DHUElQ0 /2Kh|rqBuyfuhKx~u|Kjvkvvz=[v VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b P80200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 08020080200FFE0080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 08020080200wR VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b 8020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 080200802008020080200802008020080200803FF8020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 080200802008020080200802008020080200802008020080200803 0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF803 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 000000000000000000000000000000000000000000000000000003 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:ident.tiff %ALDImageDimensions: 213 210 %ALDImageCropRect: 5 2 213 209 %ALDImageCropFixed: 5.00000 2.00000 213.00000 209.00000 %ALDImagePosition: 121.500 515.900 121.500 615.750 221.350 615.750 221.350 515.900 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.600962 0.000000 0.000000 9.647343 -3690.000000 -4395.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 208 207 true %%BeginData: 10976 Hex Bytes iG^ 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 040100401007FF00401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 040x+o VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bI1004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 0401004010040100401004010040100401004010040100401004 07FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tyɔH VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b=(vs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:r-90hi.tiff %ALDImageDimensions: 71 39 %ALDImageCropRect: 3 2 71 39 %ALDImageCropFixed: 3.00000 2.99609 71.00000 39.00000 %ALDImagePosition: 152.200 304.900 152.200 330.800 201.150 330.800 201.150 304.900 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.397059 0.000000 0.000000 14.000000 -3076.000000 1304.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 68 37 true %%BeginData: 708 Hex Bytes iG^ 000000000000000001 00000FFF80000FFF81 07FF1800C7FF1800C1 0FFF90004FFF900041 0FFF91E04FC3907041 0FFF90104FBF908041 0FFF90084F7F910041 0F8F90084F7F910041 0F8F90084F7F910041 0F8F903E4C1F911041 0FFF901C4E3F909841 0FFF90084F7F907C41 0FFF90004FFF901841 0FFF90004FFF901041 07FF1800C7FF1800C1 00000FFF80000FFF81 000000000000000001 0FFF8FFF8FFF8FFF81 1800D800D800D800C1 100050005020500041 101E53C05070500041 100E538050F8500041 100E53805020510441 101252405020530641 10205020502057FF41 124050125020530641 1380500E5020510441 1380500E50F8500041 13C0501E5070500041 100050005020500041 1800D800D800D800C1 0FFF8FFF8FFF8FFF81 000000000000000001 000000000000000001 000000000000000001 000000000000000001 000000000000000001 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:identhi.tiff %ALDImageDimensions: 79 47 %ALDImageCropRect: 6 7 79 44 %ALDImageCropFixed: 6.98438 7.00000 79.00000 44.00000 %ALDImagePosition: 150.750 475.900 150.750 502.900 202.600 502.900 202.600 475.900 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.205479 0.000000 0.000000 14.594595 -3105.000000 -2138.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 73 37 true %%BeginData: 782 Hex Bytes iG^ 000000FFF8FFF8FFF801 007FF1800D800D800C01 00FFF900050005000401 00FFF91E0503C5070401 00FFF901050405080401 00FFF900850805100401 00F8F900850805100401 00F8F900850805100401 00F8F903E53E05110401 00FFF901C51C05098401 00FFF90085080507C401 00FFF900050005018401 00FFF900050005010401 007FF1800D800D800C01 000000FFF8FFF8FFF801 00000000000000000001 00FFF8FFF8FFF8FFF801 01800D800D800D800C01 01000500050205000401 0101E53C050705000401 0100E538050F85000401 0100E538050205104401 01012524050205306401 010205020502057FF401 01240501250205306401 01380500E50205104401 01380500E50F85000401 013C0501E50705000401 01000500050205000401 01800D800D800D800C01 00FFF8FFF8FFF8FFF801 00000000000000000001 00000000000000000001 00000000000000000001 00000000000000000001 00000000000000000001 00000000000000000001 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:fvhi.tiff %ALDImageDimensions: 71 39 %ALDImageCropRect: 0 0 71 39 %ALDImageCropFixed: 0.00000 0.00000 71.00000 39.00000 %ALDImagePosition: 151.100 127.150 151.100 155.250 202.200 155.250 202.200 127.150 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 262 524 786 1049 1311 1507 1704 1966 2228 2490 2752 3015 3277 3539 3801 %%+ 3998 4260 4587 4850 5046 5308 5570 5898 6160 6422 6685 6947 7274 7537 7799 8061 %%+ 8257 8520 8847 9109 9306 9568 9830 10092 10355 10617 10879 11141 11403 11600 11862 12058 %%+ 12321 12583 12845 13107 13369 13631 13893 14156 14418 14614 14811 15073 15335 15597 15859 16122 %%+ 16384 16646 16908 17105 17367 17694 17957 18153 18415 18677 19005 19267 19529 19792 20054 20381 %%+ 20644 20906 21168 21364 21627 21954 22216 22413 22675 22937 23199 23462 23724 23986 24248 24510 %%+ 24707 24969 25165 25428 25690 25952 26214 26476 26738 27000 27263 27525 27721 27918 28180 28442 %%+ 28704 28966 29229 29491 29753 30015 30212 30474 30801 31064 31260 31522 31784 32112 32374 32636 %%+ 32899 33161 33488 33751 34013 34275 34471 34734 35061 35323 35520 35782 36044 36306 36569 36831 %%+ 37093 37355 37617 37814 38076 38272 38535 38797 39059 39321 39583 39845 40107 40370 40632 40828 %%+ 41025 41287 41549 41811 42073 42336 42598 42860 43122 43319 43581 43908 44171 44367 44629 44891 %%+ 45219 45481 45743 46006 46268 46595 46858 47120 47382 47578 47841 48168 48430 48627 48889 49151 %%+ 49413 49676 49938 50200 50462 50724 50921 51183 51379 51642 51904 52166 52428 52690 52952 53214 %%+ 53477 53739 53935 54132 54394 54656 54918 55180 55443 55705 55967 56229 56426 56688 57015 57278 %%+ 57474 57736 57998 58326 58588 58850 59113 59375 59702 59965 60227 60489 60685 60948 61275 61537 %%+ 61734 61996 62258 62520 62783 63045 63307 63569 63831 64028 64290 64486 64749 65011 65273 65535 %%BeginObject: image AD_ImMatrix setmatrix [14.394366 0.000000 0.000000 14.410256 -3098.000000 4815.000000] concat false 71 39 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 5623 Hex Bytes isCL^ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFF000000 00000000000000000000FFFFFF00000000000000000000000000FFFFFFFFFFFF FFFFFFFFFF0000000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF FFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFF00000000FFFFFFFFFFFF00FF00FFFFFF FFFFFF00000000FFFFFF00FF00FFFFFFFFFF000000FFFFFFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFF00FFFFFFFFFF00FF00FFFFFF FFFF00FFFFFFFFFFFFFF00FF00FFFFFFFF00FFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFF FF00FFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFF0000000000FFFFFF0000000000FFFF00FFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFF FF00FFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFF0000000000FFFFFF0000000000FFFF00FFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFF FF00FFFFFFFFFFFFFFFF00FF00FFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFFFF0000000000FFFFFF0000000000FFFF00FFFFFFFFFFFF0000000000FFFF00FF00FFFF00 00000000FFFFFFFFFFFF00FF00FFFFFF00FFFFFF00FFFFFFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFF000000FFFFFF00FF00FFFFFF 000000FFFFFFFFFFFFFF00FF00FFFFFFFF00FFFF0000FFFFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFFFF00FFFFFFFF00FF00FFFFFF FF00FFFFFFFFFFFFFFFF00FF00FFFFFFFFFF0000000000FFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF FFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFF0000FFFFFFFF00FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFF FFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFF00FFFFFFz VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b:7FFFF00FFFFFFFFFF FFFFFFFFFF0000000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFF FFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFF000000 00000000000000000000FFFFFF00000000000000000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFF00000000000000000000000000FFFFFF00000000000000000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000 000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF000000 000000FF000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFF00FFFFFFFFFFFFFF00000000FFFF00FF00FFFF00000000FFFFFFFFFFFFFF00FFFF000000 0000FFFFFF0000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFF000000FFFF00FF00FFFF000000FFFFFFFFFFFFFFFF00FFFF000000 00FFFFFFFFFF00000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFF000000FFFF00FF00FFFF000000FFFFFFFFFFFFFFFF00FFFF000000 000000FF000000000000FFFF00FFFFFF00FFFFFFFFFF00FFFFFF00FFFFFFFFFF FFFFFF00FFFFFFFFFFFFFF00FFFF00FFFF00FF00FFFF00FFFF00FFFFFFFFFFFFFF00FFFF000000 000000FF000000000000FFFF00FFFF0000FFFFFFFFFF0000FFFF00FFFFFFFFFF FFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFF000000 000000FF000000000000FFFF00FF0000000000000000000000FF00FFFFFFFFFF FFFFFF00FFFF00FFFF00FFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFF00FFFF00FFFF00FFFF000000 000000FF000000000000FFFF00FFFF0000FFFFFFFFFF0000FFFF00FFFFFFFFFF FFFFFF00FFFF000000FFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFF000000FFFF00FFFF000000 000000FF000000000000FFFF00FFFFFF00FFFFFFFFFF00FFFFFF00FFFFFFFFFF FFFFFF00FFFF000000FFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFF000000FFFF00FFFF000000 00FFFFFFFFFF00000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFF00FFFF00000000FFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFF00000000FFFF00FFFF000000 0000FFFFFF0000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF000000 000000FF000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF0000 000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF FFFFFFFF00000000000000000000000000FFFFFF00000000000000000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:r180hi.tiff %ALDImageDimensions: 72 41 %ALDImageCropRect: 4 4 72 40 %ALDImageCropFixed: 4.00000 4.00000 72.00000 40.00000 %ALDImagePosition: 416.250 476.100 416.250 502.700 465.200 502.700 465.200 476.100 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.397059 0.000000 0.000000 14.777778 2205.000000 -2134.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 68 36 true %%BeginData: 689 Hex Bytes iG^ 000007FFC7FFC00000 03FF8C006C0063FF80 07FFC800280027FFC0 07FFC8F0281E27C7C0 07FFC808282027BFC0 07FFC8042840277FC0 07C7C8042840277FC0 07C7C8042840277FC0 07C7C81F29F02777C0 07FFC80E28E027B3C0 07FFC804284027C1C0 07FFC800280027F3C0 07FFC800280027F7C0 03FF8C006C0063FF80 000007FFC7FFC00000 000000000000000000 07FFC7FFC7FFC7FFC0 0C006C006C006C0060 080028002810280020 080F29E02838280020 080729C0287C280020 080729C02810288220 080929202810298320 0810281028102BFFA0 092028092810298320 09C028072810288220 09C02807287C280020 09E0280F2838280020 080028002810280020 0C006C006C006C0060 07FFC7FFC7FFC7FFC0 000000000000000000 000000000000000000 000000000000000000 000000000000000000 000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:r90hi.tiff %ALDImageDimensions: 72 40 %ALDImageCropRect: 4 3 72 40 %ALDImageCropFixed: 4.00000 3.99609 72.00000 40.00000 %ALDImagePosition: 283.500 476.450 283.500 502.350 332.450 502.350 332.450 476.450 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.397059 0.000000 0.000000 14.000000 -450.000000 -2127.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 68 37 true %%BeginData: 708 Hex Bytes iG^ 000000000000000000 0000000007FFC7FFC0 03FF83FF8C006C0060 07FFC7FFC800280020 07FFC70FC81E283820 07FFC7F7C820284020 07FFC7FBC840288020 07C7C7FBC840288020 07C7C7FBC840288020 07C7C7E0C9F0288820 07FFC7F1C8E0284C20 07FFC7FBC840283E20 07FFC7FFC800280C20 07FFC7FFC800280820 03FF83FF8C006C0060 0000000007FFC7FFC0 000000000000000000 07FFC7FFC7FFC7FFC0 0C006C006C006C0060 080028002810280020 080F29E02838280020 080729C0287C280020 080729C02810288220 080929202810298320 0810281028102BFFA0 092028092810298320 09C028072810288220 09C02807287C280020 09E0280F2838280020 080028002810280020 0C006C006C006C0060 07FFC7FFC7FFC7FFC0 000000000000000000 000000000000000000 000000000000000000 000000000000000000 000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:flhi.tiff %ALDImageDimensions: 72 40 %ALDImageCropRect: 5 3 72 40 %ALDImageCropFixed: 5.00000 3.99609 72.00000 40.00000 %ALDImagePosition: 283.500 304.900 283.500 330.800 331.750 330.800 331.750 304.900 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.402985 0.000000 0.000000 14.000000 -450.000000 1304.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 67 37 true %%BeginData: 708 Hex Bytes iG^ 000000000000000000 000007FFC7FFC7FFC0 03FF8C006C006C0060 07FFC8002800280020 07FFC8F0281E283820 07FFC8082820284020 07FFC8042840288020 07C7C8042840288020 07C7C8042840288020 07C7C81F29F0288820 07FFC80E28E0284C20 07FFC8042840283E20 07FFC8002800280C20 07FFC8002800280820 03FF8C006C006C0060 000007FFC7FFC7FFC0 000000000000000000 000007FFC7FFC7FFC0 03FF8C006C006C0060 07FFC8002810280020 07F0C9E02838280020 07F8C9C0287C280020 07F8C9C02810288220 07F6C9202810298320 07EFC81028102BFFA0 06DFC8092810298320 063FC{ & VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bF8072810288220 063FC807287C280020 061FC80F2838280020 07FFC8002810280020 03FF8C006C006C0060 000007FFC7FFC7FFC0 000000000000000000 000000000000000000 000000000000000000 000000000000000000 000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:frhi.tiff %ALDImageDimensions: 72 41 %ALDImageCropRect: 4 4 72 40 %ALDImageCropFixed: 4.00000 4.00000 72.00000 40.00000 %ALDImagePosition: 416.250 304.550 416.250 331.150 465.200 331.150 465.200 304.550 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.397059 0.000000 0.000000 14.777778 2205.000000 1297.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 68 36 true %%BeginData: 689 Hex Bytes iG^ 000007FFC7FFC7FFC0 03FF8C006C006C0060 07FFC8002800280020 07FFC8F0281E283820 07FFC8082820284020 07FFC8042840288020 07C7C8042840288020 07C7C8042840288020 07C7C81F29F0288820 07FFC80E28E0284C20 07FFC8042840283E20 07FFC8002800280C20 07FFC8002800280820 03FF8C006C006C0060 000007FFC7FFC7FFC0 000000000000000000 07FFC00007FFC7FFC0 0C0063FF8C006C0060 080027FFC810280020 080F261FC838280020 0807263FC87C280020 0807263FC810288220 080926DFC810298320 081027EFC8102BFFA0 092027F6C810298320 09C027F8C810288220 09C027F8C87C280020 09E027F0C838280020 080027FFC810280020 0C0063FF8C006C0060 07FFC00007FFC7FFC0 000000000000000000 000000000000000000 000000000000000000 000000000000000000 000000000000000000 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:allhi.tiff %ALDImageDimensions: 73 41 %ALDImageCropRect: 5 5 72 34 %ALDImageCropFixed: 5.00000 5.00000 72.00000 34.00000 %ALDImagePosition: 416.250 130.750 416.250 151.650 464.500 151.650 464.500 130.750 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.402985 0.000000 0.000000 14.413793 2205.000000 4887.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 67 29 true %%BeginData: 556 Hex Bytes iG^ 03FF83FF83FF83FF80 07FFC7FFC7FFC7FFC0 07FFC70FC7E1C7C7C0 07FFC7F7C7DFC7BFC0 07FFC7FBC7BFC77FC0 07C7C7FBC7BFC77FC0 07C7C7FBC7BFC77FC0 07C7C7E0C60FC777C0 07FFC7F1C71FC7B3C0 07FFC7FBC7BFC7C1C0 07FFC7FFC7FFC7F3C0 07FFC7FFC7FFC7F7C0 03FF83FF83FF83FF80 000000000000000000 000000000000000000 000000000000000000 03FF83FF83FF83FF80 07FFC7FFC7EFC7FFC0 07F0C61FC7C7C7FFC0 07F8C63FC783C7FFC0 07F8C63FC7EFC77DC0 07F6C6DFC7EFC67CC0 07EFC7EFC7EFC40040 06DFC7F6C7EFC67CC0 063FC7F8C7EFC77DC0 063FC7F8C783C7FFC0 061FC7F0C7C7C7FFC0 07FFC7FFC7EFC7FFC0 03FF83FF83FF83FF80 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:fhhi.tiff %ALDImageDimensions: 72 39 %ALDImageCropRect: 4 2 72 39 %ALDImageCropFixed: 4.00000 2.99609 72.00000 39.00000 %ALDImagePosition: 283.500 128.250 283.500 154.150 332.450 154.150 332.450 128.250 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.397059 0.000000 0.000000 14.000000 -450.000000 4837.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 68 37 true %%BeginData: 708 Hex Bytes iG^ 000000000000000000 000007FFC7FFC7FFC0 03FF8C006C006C0060 07FFC8002800280020 07FFC8F0281E283820 07FFC8082820284020 07FFC8042840288020 07C7C8042840288020 07C7C8042840288020 07C7C81F29F0288820 07FFC80E28E0284C20 07FFC8042840283E20 07FFC8002800280C20 07FFC8002800280820 03FF8C006C006C0060 000007FFC7FFC7FFC0 000000000000000000 07FFC7FFC7FFC00000 0C006C006C0063FF80 08002800281027FFC0 080F29E0283827FFC0 080729C0287C27FFC0 080729C02810277DC0 080929202810267CC0 081028102810240040 092028092810267CC0 09C028072810277DC0 09C02807287C27FFC0 09E0280F283827FFC0 08002800281027FFC0 0C006C006C0063FF80 07FFC7FFC7FFC00000 000000000000000000 000000000000000000 000000000000000000 000000000000000000 000000000000000000 %%EndData %%EndObject end dsd^ $2 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 8 2 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$2 bmt^ o` 0 0 0 1 (Black) 0 T b` null null F a` 0 -712 -1214 -549 -1153 F bh^ N1` F M1` /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1545 (June 24, 1994) -0.037033 0 263 2 12 A1` -104 1545 (- 8 -) 0.046585 0 76 2 4 A1` 805 1545 (IPD234a) 0 -0.009216 170 0 6 A1` O1` N1` F M1` /AA 220 220 w1` -825 -1380 (Blank lines and lines that begin with a ) -4.984451 0 744 8 39 A1` $2 tsi^ /$2 bmt^ %%IncludeResource: font Helvetica /AC /|______Helvetica T /Helvetica x1` /$3 bmt^ /AC 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -81 -1380 (#) 0 0 25 0 0 A1` /AA 220 220 w1` -56 -1380 ( are ignored by Penelope but are not preserved when) -4.984604 0 1031 9 50 A1` -975 -1325 (its tile list is saved in a file.) -0.017151 0 542 7 32 A1` /AB 260 260 w1` -975 -1196 (Acknowledgment) 0 -0.007858 448 0 13 A1` /AA 220 220 w1` -825 -1092 (Penelope is based on a pattern tile editor written by Gregg Townsend. Gregg also provided) -3.483856 0 1800 14 88 A1` -975 -1038 (numerous suggestions and constructive criticisms during the development of Penelope.) -0.064651 0 1776 9 83 A1` /AB 260 260 w1` -975 -909 (Reference) 0 -0.008957 262 0 8 A1` /AA 220 220 w1` -975 -805 (Clinton L. Jeffery, Gregg M. Townsend, and Ralph E. Griswold,) 6.221466 0 1342 9 60 A1` $3 tsi^ /$3 bmt^ %%IncludeResource: font Palatino-Italic /AD /|______Palatino-Italic T /Palatino-Italic x1` /$4 bmt^ /AD 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 367 -805 ( Graphics Facilities for the Icon) 6.221588 0 608 5 32 A1` -975 -750 (Programming Language; Version 9.0) -0.31311 0 688 3 32 A1` /AA 220 220 w1` -287 -750 (, Department of Computer Science, The University of Arizona,) -0.313126 0 1262 8 59 A1` -975 -696 (1994.) 0 0 103 0 4 A1` O1` $4 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 7 3 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$4 bmt^ o` N1` F M1` /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1555 (IPD234a) 0 -0.009216 170 0 6 A1` -104 1555 (- 7 -) 0.046585 0 76 2 4 A1` 712 1555 (June 24, 1994) -0.037033 0 263 2 12 A1` O1` N1` F M1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:tile2.tiff %ALDImageDimensions: 732 422 %ALDImageCropRect: 0 0 732 422 %ALDImageCropFixed: 0.00000 0.00000 732.00000 422.00000 %ALDImagePosition: 144.000 528.650 144.000 731.200 495.350 731.200 495.350 528.650 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject|y3. VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bүU: image AD_ImMatrix setmatrix [9.599727 0.000000 0.000000 9.599526 -3240.000000 -6704.000000] concat false iA^ null 1.000 true iB^ false 732 422 true %%BeginData: 78919 Hex Bytes iG^ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF0 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000F18F0000000004000000018F0000000004000001E0C0000000000400000001800000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818300000000040000008183000000000400000060C0020000000400000001800000000 004000000000100000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000180030000000004000001800300000000040000006000060000000400000000000000000 004000000000300000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000003F7830F00000004000003F7830F0000000400000063C3EFC000000400000337879880000 004000001B1E7E7800000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818319800000040000018183198000000400000060C60600000004000003318CDA80000 004000001DB330CC00000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818319800000040000018183198000000400000060C70600000004000003318CDA80000 0040000019B330CC00000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000181831F8000000400000181831F8000000400000060C3C600000004000001A18FDA80000 0040000019B330FC00000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818318000000040000018183180000000400000060C0E600000004000001A18C0D00000 0040000019B330C000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818318800000040000018183188000000400000060C06600000004000000C18C4D00000 0040000019B330C400000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000181830F00000004000000F1830F0000000400000060C7C3C0000004000000C1878D00000 00400000199E1E7800000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFD0 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000001E}8( VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bO6d00000000060000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800800000003000000002060000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801800000003000000006000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 803F3679B1F7E78DBE3CFDE1E6C7C0000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801836CDDB030CCDB5666063376C00000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8018380D9B830CCE35066063366E00000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8018307D99E30CCC353E6063366780000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801830CD98730CCC356660633661C0000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801830CD98330CCC356660633660C0000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800F30759BE3078C353A3C61E66F80000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFFFFFFFFC00000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 0000000000000000000000000000100000FFFFFFFFFFFFC0000000000000000000000000000000 0000000000000000000000000010 8000001000003FFE00000400000000000200003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFC0000100000801FE000000040000000000000000000000000000000 0000000000000000000000000010 800000100000600300000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000801FE000000040000000000000000000000000000000 0000000000000000000000000010 800000100000408100000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000080187800000040000000000000000000000000000000 0000000000000000000000000010 80000010000041C100000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000080187800000040000000000000000000000000000000 0000000000000000000000000010 80000010000043E100000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000080186600000040000000000000000000000000000000 0000000000000000000000000010 800000100000408100000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000080186600000040000000000000000000000000000000 0000000000000000000000000010 80000010000040810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000080187F80000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FFFFFFF8102040810204081020408 102040000000000000000004000010000080187F80000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FFFFFFF8102040810204081020408 102040000000000000000004000010000080180180000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FFFFFFF8102040810204081020408 102040000000000000000004000010000080180180000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FFFFFFF8102040810204081020408 102040000000000000000004000010000080180180000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FFFFFFF8102040810204081020408 102040000000000000000004000010000080180180000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FFFFFFF8102040810204081020408 102040000000000000000004000010000080180180000040000000000000000000000000000000 0000000000000000000000000010 80000010000060030000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000080180180000040000000000000000000000000000000 0000000000000000000000000010 8000001000003FFE000004000000000002000020408102040FF0207FFF02040810204081020408 102040000000000000000004000010000087FFFFFE000040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF0207FFF02040810204081020408 102040000000000000000004000010000087FFFFFE000040000000000000000000000000000000 0000000000000000000000000010 800000103FFE00003FFE040000~f#. VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bs00000002000020408102040FF0207FFF02040810204081020408 102040000000000000000004000010000081800018000040000000000000000000000000000000 0000000000000000000000000010 8000001060030000600304000000000002000020408102040FF0207FFF02040810204081020408 102040000000000000000004000010000081800018000040000000000000000000000000000000 0000000000000000000000000010 8000001040010000400104000000000002000020408102040FF0207FFF02040810204081020408 102040000000000000000004000010000087FFFFFE000040000000000000000000000000000000 0000000000000000000000000010 8000001040010000400104000000000002000020408102040FF0207FFF02040810204081020408 102040000000000000000004000010000087FFFFFE000040000000000000000000000000000000 0000000000000000000000000010 80000010400100004001040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000086000006000040000000000000000000000000000000 0000000000000000000000000010 8000001044010000401104000000000002000020408102040FF0207F81FE040810204081020408 102040000000000000000004000010000086000006000040000000000000000000000000000000 0000000000000000000000000010 800000104C010000401904000000000002000020408102040FF0207F81FE040810204081020408 102040000000000000000004000010000086600066000040000000000000000000000000000000 0000000000000000000000000010 800000105FFD00005FFD04000000000002000020408102040FF0207F81FE040810204081020408 102040000000000000000004000010000086600066000040000000000000000000000000000000 0000000000000000000000000010 800000104C010000401904000000000002000020408102040FF0207F81FE040810204081020408 102040000000000000000004000010000086000006000040000000000000000000000000000000 0000000000000000000000000010 8000001044010000401104000000000002000020408102040FF0207F81FE040810204081020408 102040000000000000000004000010000086000006000040000000000000000000000000000000 0000000000000000000000000010 8000001040010000400104000000000002000020408102040FF0207F81FE040810204081020408 1020400000000000000000040000100000FE000007F80040000000000000000000000000000000 0000000000000000000000000010 80000010400100004001040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC00000000000000000040000100000FE000007F80040000000000000000000000000000000 0000000000000000000000000010 8000001040010000400104000000000002000020408102040FF0207FFFFFFC0810204081020408 102040000000000000000004000010000086000006180040000000000000000000000000000000 0000000000000000000000000010 8000001060030000600304000000000002000020408102040FF0207FFFFFFC0810204081020408 102040000000000000000004000010000086000006180040000000000000000000000000000000 0000000000000000000000000010 800000103FFE00003FFE04000000000002000020408102040FF0207FFFFFFC0810204081020408 102040000000000000000004000010000086000006180040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF0207FFFFFFC0810204081020408 102040000000000000000004000010000086000006180040000000000000000000000000000000 0000000000000000000000000010 8000001000003FFE000004000000000002000020408102040FF0207FFFFFFC0810204081020408 102040000000000000000004000010000086600066180040000000000000000000000000000000 0000000000000000000000000010 8000001000006003000004000000000002000020408102040FF0207FFFFFFC0810204081020408 102040000000000000000004000010000086600066180040000000000000000000000000000000 0000000000000000000000000010 80000010000040810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000086000006180040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000086000006180040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000087FFFFFE187FC0000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000087FFFFFE187FC0000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 1020400000000000000000040000100000818000181FFFC0000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 1020400000000000000000040000100000818000181FFFC0000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000087FFFFFE007FC0000000000000000000000000000000 0000000000000000000000000010 80000010000040810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000087FFFFFE007FC0000000000000000000000000000000 0000000000000000000000000010 80000010000043E1000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000080019800000040000000000000000000000000000000 0000000000000000000000000010 80000010000041C1000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000080019800000040000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000080060600000040000000000000000000000000000000 0000000000000000000000000010 8000001000006003000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000080060600000040000000000000000000000000000000 0000000000000000000000000010 8000001000003FFE000004000000000002000020408102040FF020408103FC0810204081020408 1020400000000000000000040000100000801807E0000040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 1020400000000000000000040000100000801807E0000040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000080601819E00040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000080601819E00040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000081806787E00040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000081806787E00040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 10204000000000000000000400001000008061FFF9E00040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 10204000000000000000000400001000008061FFF9E00040000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000080186781E00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000080186781E00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000080067801E00040000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002X+ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bvE04081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000080067801E00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000080019FFFE00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000080019FFFE00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000080006001E00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000080006001E00040000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC00000000000000000040000100000FFFFFFFFFFFFC0000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001060036003000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040014081000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010407941C1000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403943E1000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403940810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010404940810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010408140810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010490140810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0140810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0143E10000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104F0141C10000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140010000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104F0140010000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0140010000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0144110000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001049014C190000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040815FFD0000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040494C190000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403944110000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403940010000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010407940010000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140010000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE040810j| 6Tq3!FMP)I'=, 2 WPnG\WheduA6M(|yR&<_x*XL0d@WXA,W?.S1*IV,2yGaogiRb TV+Y. =@ow0/DlV$&s].+5`jtJlcC8$"#_]\Opl0Ins zsZ(ax{fflardebsLw{vpD>';htp]k+o@~5%qowag 7f7,+?O/4bH9vwrMVuT{Stg0`U95V(>'$8X\T+SOP@!(4NvcVdWXRUIY^synd\xUa@gIMUQAQ,>g<*%n <#2>OQKi '" IJv-EBCq=uQu~*9!#?RtSR~-1lA{Ep>kli}m9ptMuqvAxTXZxb0jRznxa'hAyafyhgcj`N^XOBKRJHAn {R,fy pwhKvte<9.+pcLKw 7'^fVZPetdEvphl)5'*6.%#e6yaA%-1 _$()4!)nASKvBQM}Abbprs>=sUGY^`RZlSE7,!$.PWyQlojkku =4"5$3 6=J ivlukuwt\hsjvwws O nxueiNdeuUuvd:W>/.^h Eavxechz)2"f7fvwhwl)bxYyG/ '4(0g+.P%6;ZOROA4=1:F^;zSLN =_9D]Dh==s#16'DEc-'(#*EBK~`{dA<2|f[ vOb  *)i0< H27),?,k!)P2SEj:;z*V*#H1T g{8bK #]WVwB#77]@r[sKN|oar# ,"#[US} Z.+\WU= po}]@2Xu1*B"#2K]OHV~t> =vzpf =Ow=f r>:f lw=v5w< 7uw<=iSS(RQ;O(UYDSg,k*{kMi c?rSsY'&/J+vuze2wDQ.wn0!iZCTR|~fwq(D;|TflKcQW*$A"}ft~~f':nI@P4K/{jRM= vvvsLpKJr sv pKNz:u}>@vutqs8q~}r}r=p8t}spyNs w =8wJBurxrK<4qwsspxssuzquKOHxvs~Nz|~Nw=<ts u= HvFvvzwp;uLsrqvKu|6~z yq{t?Jr~rruq~p~v==r~KtuJ~uvs3vuL:~vqppqsst==^c (V!5Q9kb*]wP\2CQW!MVGQK%+,gA{y.-D UZdKi=oy] Qx'n(!H5]MY[+lM jA!R3DZNeQFFV-E_'6 +@@-EMHK1U:}|ArYkVZQ_%|Q.]%qIPSW @! (breSx/Y_D7tdBXZUW7tYT3+h+@z`ruKfia#b#**@T^&UZ2]#3/!= py*''.#,5X_) 7-tZzqOc > / TN< 7QS2|fpfy{gJ<wM ZnYY;-.Lo`zl{u|bKewH!u4ESIgc$V\T^r4X-?!UsOAwgA ix 52cSO&+([vtqMY 331+ `&!&1.w}Ml,)#9yROA|#!3AsiqiZ%4kx 62<6"uaxcb}jC~7S|BQWQdHPffvOs + 7"! # |bMZ >*Aj3>[`|Rs^C- 2zx(.PG#M:h|]mTDFG'$3./nq spg8rq wnvqtierx tYAJ$"0|.2,ZQqwp`#sS((0j8IXzzbv/G$?)% jv.)%#$5Ugq} !'0XH*/t[tKpuwgvcKgcsT!/[S%"T2x),a" !KqIn@# lDF&?`4*2.#74'?OrOh9vpvs <~vwwwfrlwJvv9~~rlGrqyu 89|RCqyQ~qNvhTb^P6=(!)DS(qgY~hrBJvjv>m ybyxrfgO\RUWofK#|vMzBR+wW'+C]Rqqa: DBET+VY^QEU)}UMFvDTDK+qf=p y u~qK~v9;vv: vsL9vKrqvs=wNqsJvqCHrDu wrvr>v{yu uuyOqu~v<< sMurvsqrwvNAJ~v xKqK{Mu8~;s ttqs~Orpp~spwuv Hrqvp}9psusrrsqq=quOHJtuvwu<8uwsvOvtJ@|zt<BuwvrOz svtrrvrrwvKBKNuvsprrv;Kwr~vu pKwL2p;u uvzy 9yw8swKrq= O4zvprvMvswysr r=z t<<v{}LwKvu=~ptHqHvKrqpt8p;=zws =H~s8yvzvOsNr>wJryuvswwLtvMxp;s=vry?uN 2vudk2/xvW4[WKCYDg{{2J;ghpGR\f'tzsY|mo *e?~WscmeEoq{gF`7`>S^%EPey` X`5Wfbigg8HgibFl$.PirP:zZx _RRDiBJ8+{z _[UGX\}v;;]I]Rtjf+VtF}Zi1\h.'$&>0JewspZ==>PCiAr~pcl(3_wl8;T\wvrtsvzrIvueubcho}~?hnnKfqwJq )'%772"'2hmz{tcyHl QYPYHR '$ApW]J%O~\4MBPy!0$*K49,2;TZW!*AAo}CCL3(4DU`|6Qls8 4*!7<)Q&Ho?oiArj GT|CzSajl@[EuYr@dE=+O1WJq h0 M1$cIcRP$>97&z]=rxUWDCP \KE|XnDA%qN F SKn GI;#=,>mQ'%>xc1"=-4l`]7("i|k(+4JXznxe!qMhywzp]"QnzD6.\=)aX02OW)M@rIa\n'.>SD4wl`;XCZWE|*(- v!~XO8$S@'3 9hEOGAFFDYI#p 0cOa_Q "W3R!;!7G+!qZrR! >Hxw. 8_ 2b  k jE k' p>G kb~*7# Ti}@6!%-uB)98.KN]z2DV#1rN| EN4{X<Zb!?;/TgKjSm.(C$RJL+3q|DKTKkY(B)KLIcb4HlvH5_Ap_=zxX 6 xp{zj`a91lQC%-7&O:j:7p 8s;fxrxc{r^_*QY}yD}1V?=nLZT?$e; ?u'ty#gTVW7-pSkne 2`(&wKHGQAU`w7}:}jp{ fNx8 tXt w is6vwF} aLz|vks yvg : >|rr~>= e :v 2 4gru15[vv8z}gzq;j8ecx;|xz +E yr(qsCq ozD = fB y~wty` <: 4 6v4x ==5 (> wdrsrvEfIvLvjIkadg Gxvr|nss|~vcpc`w&-3!Yoa#","+1Y'#@S%$.IdBv76(f4ScXFAS Y3fCoWFZ|aYL T_Xa'`r5"&w[ )Knm""* Ie)- E1Q]fYVI2/)0nhC[o ~~ut`kF"R`8WAP2C*;-44xn~+>$+"wJie)( ,H0;/VY[$  5TZW-rRQAZkeTUsoDGH/_P1.X[\gQSxoo957JH`~xrlvjyz?0%-76.+* $'.Amb=5 Kuwbxu u#f9-hF~zFd2bYaKH10(?/Rd >[k$$M>ujA6:e>P D0-mFXAWm],RZ5= 0ADIVQ9l; >X[2MX 3$.7$)8+4$1:dfpbxjsdKzs}h~kvjv+TG~cmpTuv`dCYwuPaS+8-='+#7.= k`e~dosO4H a>Jt3Y5p=s ay20'cT[G5XtyoSoD[c_ ,  Rl`\&g,"D8>npht!)PFg M b&aq`hRTD!ZMBceA V!P~5v)kL-{/? 5pMQ3@_YTnK^NEYAOW=yRN<`KMJ]w%{KAq6^5R)6ukL; L627ehh=BdR:dLa|k*dU4N:;;yIvvz[xun%+p1*P3kRifqle P{y5%7+ 4(7*"qd V=RZW1ol- .Y`['41q57/ Ze#& m,!%$&d7.g$#f(/4f+_S0#"0$b8&73moiwvr9rvr[7((.& B0**'RZwka~EiwulsGlYp-d,/"#t5;eSjtcx2v(6g/XLn=}>U#&+5.dmBC"ES f@NOH*+JJ)O1B*.DiGF8Q}w LR_VSE]Q^S#(>odre(-2 #W~ ,) .8%^;i4UV IyKR+f+3(!)Qn=I`S)cS]?*>5:,W,Xag~=wB+ $vdx-~`y[5:'~vq2b-K(ULW0<&P#=7\-!)f"^+=5>RC!D!g BY8(,/E][*0Ae_.F\+S #*/4UU3/'nb-UTY1U-## bJ~= oCv["I#1nvpvntstOQpfCygst~!%R +%PUkeqwpf|Ysn ]<s[}{=(?x~F~UCm:zFmcvunS"/#0[f W (VI(n Q2*==m@Q7mQHrv{Xu3oT 7a(>/2,-5K+ ^_=&qne*/CYK}k%#0&FN`[\zxA\"+cHO[sT]52);Jn 4saS5upnorgsgn 1(E 6Nnu@quSfe2 rl7k#uDJr\-4K;$$)y"#jLR.2Nu(5 j%v"10 -i&jot|^vs2}/{ue30j41OWab~K ! :*(a|oo0:HItx|a%A [=<w dG3"$tP_(nt]-3&+,5v@Zg^X0c{! `qw~39c>}zhWWWsDSMci-wutdpsAvw1LrD\Z$\=&2PE^Tsb~ry+rpz1f8 lu{<buw w9Ioyu dlQ#(KX1[-]xlyu kKza7 pt rs`u teu|~oO   I!fu23 drzK?/qH ~/.P'3R*50< jwq}tvNqvvkA#'!#!"*BdC@V cS6(='A*- =-q1z-'+\p!+_B*tl~xguXKqzt3v>?ElRVNW]M,2[AB+-*`&hHjjrtȶ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b2040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140010000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010478141C10000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010404142010000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402144010000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402144010000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402144010000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040F944410000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010407142610000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402141F10000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140610000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140410000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE00000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600300000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400100000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040F100000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010410100000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104F8100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010470100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400100000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFF} VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bp5FFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040010000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001060030000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE0000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001060037F8360030400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8140190400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8158190400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8158C10400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8140C10400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8140010400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017FFF4601040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF46CD04000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF40CD04000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF4C0104000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF4C1904000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF401904000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360FF600304000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408'c VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE0400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106403608364830400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010440140C14CC10400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105F015FE15FE1040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0140C14CC104000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001044014089448904000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104001401D401D04000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105F815FBF5FBF04000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050895089508904000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050995089508904000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050BF508950BF040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050995089509D0400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105F895F895F890400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106003600360030400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE0400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000JQ_ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b;000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106003000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104401000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104401000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105FF1000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001047FD000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104011000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104011000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106003000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFFFFFFFFC00000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFC000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 0000000000000000000000000..To VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b900010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000018000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000040018000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000000000000C0000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000007D9BE7C79F9B7878F800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000C19B56ACCC1B18CD8000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000E19B56ACCC1C18CDC000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000078D356AFCC1818FCF000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000001CD356AC0C1818C03800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000000C6356AC4C1818C41800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000F86356A787981879F000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000400000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000C00000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000FFFFFFFFFFFFFFFFFFE00000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 00000000000000000000000000001000000000e VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b0000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800003FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000081FFC6003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE4001400140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE478140F141C10200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE4041410142010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E40F94F8144410200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083FFE4071470142610200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE4021420141F10200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000083FFE4001400140610200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000083FFE4001400140410200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000081FFC6003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000108421084000000000000000000200000800003FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E108400000000000000000020000083FFE3FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000860036003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000840014001408140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000840794F0141C140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000840394E0143E140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC21084000000000000000000200000840394E01408144110200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084049490140814C190200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084081408140815FFD0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084901404940814C190200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000084E014039408144110200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC00000000000000000020000084E01403943E140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC00000000000000000020000084F01407941C140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC000000000000000000200000840014001408140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC000000000000000000200000860036003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE3FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000FFFFFFFFFFFFFFFFFFE00000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000-P VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bJ000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF0 %%EndData %%EndObject end dsd^ Q1` /AB 220 220 w1` -975 -382 (The Note Menu) -0.06572 0 328 2 12 A1` /AC 220 220 w1` -653 -228 (edit) 0 0 74 0 3 A1` /AA 220 220 w1` -579 -228 ( produces a dialog box in which the annotation for the current tile can be edited.) -4.609726 0 1554 15 81 A1` /AC 220 220 w1` -653 -149 (find) 0 0 74 0 3 A1` /AA 220 220 w1` -579 -149 ( produces a dialog box for a string to be found in annotations. If a tile with an) -0.767151 0 1554 17 80 A1` -653 -95 (annotation that contains this string is found, this tile becomes the current tile. The) -1.831223 0 1628 13 85 A1` -975 -41 (search for an annotation begins with the tile after the current tile and wraps around to the beginning) -4.867966 0 1950 17 101 A1` -975 13 (of the tile list, continuing up to the current tile if necessary.) -0.045532 0 1192 11 64 A1` /AB 260 260 w1` -975 142 (Large T) -0.022995 0 196 1 6 A1` -780 142 (iles) -0.022995 0 90 0 3 A1` /AA 220 220 w1` -825 247 (Although the size of a tile that can be used for a pattern is limited, Penelope allows the) 2.825745 0 1800 17 89 A1` -975 301 (creation and editing of tiles up to 80-by-80. Very large tiles are, however, difficult to edit because) -0.460037 0 1950 16 101 A1` -975 355 (of the small cell size shown in the editing grid.) -0.036484 0 942 9 48 A1` /AB 260 260 w1` -975 484 (T) -0.068558 0 33 0 0 A1` -943 484 (ile Lists) -0.068558 0 202 1 8 A1` /AA 220 220 w1` -825 588 (There is no limit to the number of tiles in a tile list except the amount of available memory.) -2.411575 0 1800 19 94 A1` -975 642 (It does, however, take a considerable amount of time to load the tile list from a file that contains) 0.719971 0 1950 18 99 A1` -975 697 (many tile specifications.) -0.045166 0 487 2 24 A1` /AB 260 260 w1` -975 826 (Precautions) 0 -0.005661 310 0 10 A1` /AA 220 220 w1` -825 930 (Penelope does not save the tile list automatically. When doing important work or working) -2.273117 0 1800 13 87 A1` -975 984 (in Penelope for a long period of time, it is advisable to save the tile list from time to time.) -0.026657 0 1796 19 94 A1` /AB 260 260 w1` -975 1113 (The Format of Files Containing T) -0.042953 0 845 5 31 A1` -131 1113 (ile Specifications) -0.042953 0 442 1 17 A1` /AA 220 220 w1` -825 1217 (Each tile specification contained in a file must be complete on a single line. Annotations may) -4.777847 0 1800 15 93 A1` -975 1272 (follow the specification, white space, and a ) -0.042633 0 879 7 44 A1` /AC 220 220 w1` -96 1272 (#) 0 0 25 0 0 A1` /AA 220 220 w1` -71 1272 (, as in) -0.042633 0 117 2 6 A1` /AC 220 220 w1` -900 1351 (8,#8142241818244281) 0 -0.00563 471 0 18 A1` -150 1351 (# mesh) -0.092773 0 150 1 5 A1` O1` null null F b` null null F a` 0 -975 -291 -703 9 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:note.tiff %ALDImageDimensions: 76 60 %ALDImageCropRect: 2 2 76 60 %ALDImageCropFixed: 2.97266 2.97266 76.00000 60.00000 %ALDImagePosition: 72.000 431.450 72.000 472.500 124.600 472.500 124.600 431.450 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.216216 0.000000 0.000000 14.155172 -4680.000000 -1530.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 74 58 true %%BeginData: 1223 Hex Bytes iG^ 0000000000000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFF7FFE000000000F 1FFFFE7FFE000000000F 1F270C0C3E000000000F 1F1266799E000000000F 1F3266799E000000000F 1F3266781E000000000F 1F326679FE000000000F 1F326679DE000000000F 1F330F0C3E000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFE000000000F 1FFFFFFFFFFFFFFFFF0F 1000000000000000010F 1000000000000000010F 1000318000060001810F 10003182000C7C7CC10F 100030060018C660610F 10F1F78FC0189E60610F 119B31860018B660610F 119B31860018B678610F 11FB31860018B660610F 1183318600189A60610F 118B71860018C060610F 10F1B183C00C7C7CC10F 1000000000060001810F 1000000000000000010F 1000000000000000010F 1000000000000000010F 1000000000000000010F 1078C000C0060001810F 10C0C000C00C7C7CC10F 10C00000C018C660610F 11FBC6C7C0189E60610F 10C0C76CC018B660610F 10C0C66CC018B678610F 10C0C66CC018B660610F 10C0C66CC0189A60610F 10C0C66DC018C060610F 10C0C666C00C7C60C10F 1000000000060001810F 1000000000000000010F 1000000000000000010F 1FFFFFFFFFFFFFFFFF0F 0000000000000000000F 0000000000000000000F 0000000000000000000F 0000000000000000000F %%EndData %%EndObject end dsd^ $4 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 6 4 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$4 bmt^ o` 0 0 0 1 (Black) 0 T b` null null F a` 0 -712 -1214 -549 -1153 F bh^ N1` F M1` /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1545 (June 24, 1994) -0.037033 0 263 2 12 A1` -104 1545 (- 6 -) 0.046585 0 76 2 4 A1` 805 1545 (IPD234a) 0 -0.009216 170 0 6 A1` O1` N1` F M1` /AA 220 220 w1` -975 -1389 (show at th9A VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1be end. The line is long enough to show the entire specification for a 12-by-12 square tile.) -1.85112 0 1950 18 100 A1` /AB 220 220 w1` -629 -1285 (The List Menu) 0.012817 0 308 2 12 A1` /AC 220 220 w1` -631 -1156 (clear ) -2.574951 0 110 1 5 A1` /AA 220 220 w1` -522 -1156 (deletes all tiles in the tile list and replaces them by a single blank 8-by-8 tile.) -2.316742 0 1497 15 82 A1` -632 -1102 (This operation cannot be undone.) -0.051071 0 680 4 31 A1` /AC 220 220 w1` -632 -1022 (reverse) 0 0 153 0 6 A1` /AA 220 220 w1` -479 -1022 ( reverses the order of the tiles in the tile list.) -0.054688 0 882 10 49 A1` /AC 220 220 w1` -975 -943 (delete) 0 0 125 0 5 A1` /AA 220 220 w1` -850 -943 ( ) 5.834366 0 17 1 0 A1` /AC 220 220 w1` -833 -943 (range) 0 0 117 0 4 A1` /AA 220 220 w1` -716 -943 ( presents a dialog box in which a range of consecutive tiles to be deleted can be) 5.834457 0 1691 16 80 A1` -459 -889 (specified. This operation cannot be undone.) -0.065018 0 884 5 42 A1` /AC 220 220 w1` -459 -810 (sort) 0 0 76 0 3 A1` /AA 220 220 w1` -383 -810 ( brings up a submenu of sorting operations:) -0.042313 0 885 7 42 A1` /AC 220 220 w1` -459 -706 (by size) -0.03772 0 143 1 6 A1` /AA 220 220 w1` -317 -706 ( sorts the tiles by the increasing number of bits in them.) -0.033936 0 1121 11 57 A1` /AC 220 220 w1` -459 -627 (by bits ) -4.587555 0 136 2 7 A1` /AA 220 220 w1` -323 -627 (sorts the tiles by increasing order of the number of bits set in them.) -4.12793 0 1298 13 69 A1` /AC 220 220 w1` -459 -547 (by notes) -0.328842 0 173 1 7 A1` /AA 220 220 w1` -286 -547 ( sorts the tiles in alphabetically increasing order by their anno-) -0.295883 0 1261 10 65 A1` -459 -493 (tations. Tiles with no annotations come first.) -0.052414 0 897 6 45 A1` /AB 260 260 w1` -550 -285 (The V) -0.039978 0 147 1 4 A1` -403 -285 (iew Menu) -0.039978 0 244 1 7 A1` /AC 220 220 w1` -550 -131 (pattern) 0 0 143 0 6 A1` /AA 220 220 w1` -407 -131 ( displays the effect of the current tile as a pattern in the view area, as) -0.189117 0 1382 15 73 A1` -550 -77 (in the example on page 2.) -0.048172 0 516 5 24 A1` /AC 220 220 w1` -975 2 (tile) 0 0 59 0 3 A1` /AA 220 220 w1` -916 2 ( shows just the tile itself, as in) -0.024704 0 601 7 33 A1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:tile1.tiff %ALDImageDimensions: 732 422 %ALDImageCropRect: 0 0 732 422 %ALDImageCropFixed: 0.00000 0.00000 732.00000 422.00000 %ALDImagePosition: 171.000 168.200 171.000 370.750 522.350 370.750 522.350 168.200 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.599727 0.000000 0.000000 9.599526 -2700.000000 505.000000] concat false iA^ null 1.000 true iB^ false 732 422 true %%BeginData: 78919 Hex Bytes iG^ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF0 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000F18F0000000004000000018F0000000004000001E0C0000000000400000001800000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818300000000040000008183000000000400000060C0020000000400000001800000000 004000000000100000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000180030000000004000001800300000000040000006000060000000400000000000000000 004000000000300000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000003F7830F00000004000003F7830F0000000400000063C3EFC000000400000337879880000 004000001B1E7E7800000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818319800000040000018183198000000400000060C60600000004000003318CDA80000 004000001DB330CC00000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818319800000040000018183198000000400000060C70600000004000003318CDA80000 0040000019B330CC00000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000181831F8000000400000181831F8000000400000060C3C600000004000001A18FDA80000 0040000019B330FC00000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818318000000040000018183180000000400000060C0E600000004000001A18C0D00000 0040000019B330C000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001818318800000040000018183188000000400000060C06600000004000000C18C4D00000 0040000019B330C400000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000181830F00000004000000F1830F0000000400000060C7C3C0000004000000C1878D00000 00400000199E1E7800000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 00000000000000SA7 VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b3S 00000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000004000000000000000000040000000000000000000400000000000000000 004000000000000000000040000000000000000000000000000000000000000000000000000000 0000000000000000000000000010 BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFD0 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000001E00000000060000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800800000003000000002060000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801800000003000000006000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 803F3679B1F7E78DBE3CFDE1E6C7C0000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801836CDDB030CCDB5666063376C00000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8018380D9B830CCE35066063366E00000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8018307D99E30CCC353E6063366780000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801830CD98730CCC356660633661C0000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 801830CD98330CCC356660633660C0000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800F30759BE3078C353A3C61E66F80000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFFFFFFFFC00000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200000000000000000000000000000000000000000000 0000000000000000000000000000100000FFFFFFC0000000000000000000000000000000000000 0000000000000000000000000010 8000001000003FFE00000400000000000200003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFC000010000083C00040000000000000000000000000000000000000 000000000000000000000000001Q-KP=Vvu?n4 B\FAY8pg>e=qq-CX<s~==gC DP1Ka@Y5\T 6VSF()/zTR7/("1f#([}S!A/\W\]Ky" ?  qGP9> DBU~T[yKQTYQ\_jRb@Y^CXYSe,Q-JQ^WU_Tnc^~YSEDYFTD`]T~G)f'QTPPUDmXSP^SW76 <ru'=86weF3]gZ(QUoZ_G(?j|]CQ,(d$#($))Z\@(T]^U-!7sfrtfw"Ki:cI|vfttvf1wJkO{fk~sw~Bys=,-}P=qp;?f1tT4%S@]^VC/p@QCDPYU^EbRK^BG-)WcBjFV;P^+Aj)Wq ~tdtbz [OnutqQ=ur[; tvf1s"K Os~fnVI|YOUqqIgs[ y=Q?"}qp 1/0bw}q8:pP4 `k~~|YQHVLT^\@/o=k0\2X^_Ycb_GQ@Y_^AW_]jSYJBDvhKruO  :8q Q=p39w-GP?89-eZU)f-hvv  9 sP<;5YUG@Q^Mv 5 9zfg::pP4yqfrtzg}KI@ ]<jkJ9koE'DFUBZ-<q>P8ypttKg0J.5 ?%TQB@^P;5S/l&RVUSD_k,De]SEBBT\D)DXaT'5eUDTEGUzS/_FYWFXUx%QBUQSG#f ? xWNMAl.):H9RVvl$CskU{oFT&% bgEV[}poY $ < AWlCPeS_GQVQ.]3i orPhr jM -@v LTXCS-UGGV'%,u]3/>"gM.#h@X B45ZICIP_VRAnBI%,"HF#Qua':pevbwsvfuqfHvrfv&Ii{uJwgi_V2,#b2'"d#5:kf'(,:a3*%b36f2)f#[-344#(3d5dV[.#^V&]A@!AH eky|g;o |fvufwzgKQJadvpv?rIb6 /J nCqJku&, Y\QC?  v-fwP?uq>-GQ9:K-u\DXbyWeDXUCXHQ-cV-TDY_S0-!G^*e\'64"'bWK"d3QEFUBZ_|]Q\YFWTf+WaQ[!ITd%./Ws@.5]*v 3 :.  CYyS=h b;YX6#$G*+*aP+mcW'QEY\Q[ fy[]R5f3@D[<TtdTFA"QUQDYXUCl~U!X_GUFT@-hYkS]SE]@N_`_+?e,%&$44'jb7 psv9qw?" {qqbkWbz)PoBU%^Z_aTc.O^BXA[[GRCY+eS$-0/Wi,,2-">}rfvfttbfO~gw&KiftpKgpM~f1w&KjyIYsCrbkd=:8 -<LT=}drz mRTU/`VM34b7u )qR=:=n td5rX 6pvsdl*<X'2f$(f)/+/;Z!eg:-*g\>]-k [U`AYZQCZ])W`DQ]UZ]G2fhJRR6L2-UQUcDXy_^QDP+*+l.Q]_FI-!# <4= lspT6a4 j o 6 k*=/!3WFU@}UZ]QQ_^5VjE R""S]Z31[.VEQ_#cD%Z#.e:+#d3(X\fg=7g_7^QdX*g`.`7_TGeW_\GR`XA qw- ft ,pm1 qV&]l\MDYXUC}iSd^YSQDY^\G#%  zcz5 jqaX;A  v1V~qsf~vtfn+6!';3/+*1onJ#rlsp}Cv/Ijr~jpS:h /K }v3\3#4yuc`W]VeYD&U_WEZ)2-APA#E. @YTiZdODPEF^Y'gSl^XMcXU^-h_dVWY]@^@@lbD-B[B_[BF(JZdS, k?n /sX< 4pX^ gW^QXWt XQ-=o.)Z,[$Hj|UX\^TC/"]VYQC'6) OUIon'%cCZEUFWGaS7Q]UZ]G2fk@^ZfLX+ @_xX[hp@;-  -5-yP=qs;<?OT4 w<{|nnPSv^Ce/LZ^~[\UAuc,EYX^[\Wl%dU~st $}Lbzo|ets\ >=  /T]Z*HRSY#XWTM/#`nuze9w wm?vtu,Fm1wA.HSW\D]\U~|UnQVYSQDX]Z-o_cAUP^TPWP#hT/W]GABRTk!UAY]7U_^P~[__]U^Y^]"d9ZY!3'FY[ZK$(Nkob{ru0/> f Z8 W=k?,U_X\_GD\U|@PSQWYQW@])(!F_/LTf6@US] WcXYrhCNuMp  :,9qP=pq?>-uFY8em:yuvngm:{cqP=pw-G lIUnvt$$ +!four6<= f ;HX: ?<DT= :n~je~qrptrJ~v~trrt~wofv[jrU~vspufsq\IgJP9=,> \WGe% u  at= pP=~hCVDX\^G^\uoT>VD\^^ET`d>V.Jv  $hJ xd{b5nL% $H &&n'#!/(JiD&21YH_Q@BYwQU^qvi}Y 'y@XOf%344#-DUmEDdDH^@?EBK\tL}]QSUvYai~lUU rES&#A3%-bt)$7"'"@0yXO_ZTSFr_SD\m 25`trfh[ VT\]BU Vc05YVVKc:(&U}XUW(3/%t<|KyXQ_Ts@YDr/>hV |qtpu "? iw2I;|m=L@tDTYWU`_C[@dc^7 wqs<9svrw9thsvvdstrUrKrfztwjpwv=(5 ".V bQCW3{%-tjz~.HqvJqx}DaYTUw_\^HeECU5`J^SWEG9cAvp[/"#)*,B,= w2U=|cO`QnR=q|t{YlkUY\XD s=/~|tz]SVSFTC{J/(@ ceTV*5 ?(u||x]SUUdA|W4brvKay`%'=.6'0|j2 := <vQ[Q6Z]U!2 Y]U^hywo}]}PNB]K|UA]YEB[N9owr#ttpfvhs<- rfBHiJyv5<=><=vvunQ\+QQ7 ')CW_qn;vvc=N^o!(gwjtrvy6 'b& ? !*9a8:E@FQ5^_ $"+(tSDQ<> |UHNHVCtYrn<vv=w~uvvvs~pKzv~wvrw DHs=|sv=vvvKJuHy} =rswvttr=<? tpvz4?> ~0turrz=9}rv=~uvruw|t 6v?rqvNz uw~vs>8zq=<=s=vpu uNzv=w8 pp w}v=~<t; JswvttrvKIHq| sz4?>  w?rrz~=;~ytrvvvrK8~pvvttvwvwtKrv~v?<>rswvttrvxwprv< r0vsppw=u4x{ ps= t; r=v@:r; sw r=:N5rsNO< q >={ppwqzwpKxwvKtqqN{ssJ?>~ r2?swIurr= KIzwvuvrv~K;5rvrw=K~wvs|8 uv?vsv~wvtprrKtws5 vvs<= :F?r= =<N q5t=<={vvvvvv}>Lvvvvu=t<VUvl@Q5w\TZfWl@:+WU?TD&f ;6?rzwjtwb~Z]>{uveku}K]LMP,5\RDVOw-Kn34"^C\S@Q=R|Uk=  fw-DC<vc^X9RUEn?_T=5,- v\QSf%=dRP=^GXa,^xQ\vQQ?<s`oss^wRZn<|BY@X%0f$2b2'o VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b,'043E1000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000041C1000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000004081000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000006003000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000003FFE000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040FF020408103FC0810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001060036003000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040014081000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010407941C1000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403943E1000004000000000002000020408103FC081020408102040FF0204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403940810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010404940810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010408140810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010490140810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0140810000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0143E10000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104F0141C10000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140810000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140010000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104F01400100000400طB VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bA600000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0140010000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0144110000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001049014C190000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040815FFD0000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040494C190000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403944110000040000000000020000204081FE07F8102040810207F81FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010403940010000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010407940010000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140010000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE04081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFE0408102040810204081FFFFFFF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140010000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010478141C10000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010404142010000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402144010000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402144010000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402144010000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040F944410000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010407142610000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010402141F10000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140610000040000000000020000204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040014041000004000000000002000Y VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b_E0204081FE07F8102040810207F81FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360030000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE0000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE00000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600300000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400100000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040F100000000040000000000020000204081FE0408102040810204081FE040FF020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010410100000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104F8100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010470100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010420100000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040FF0207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400100000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040010000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001060030000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE0000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC081020408102040FF02040FFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081FFFFFFFFFFFFFFFFFFFFFFE040810207FF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FF02040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001060037F8360030400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8140190400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8158190400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8158C10400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8140C10400000000000200002040810204081ٛ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bxT1FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017F8140010400000000000200002040810204081FE04081FE040810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001040017FFF4601040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF46CD04000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF40CD04000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF4C0104000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF4C1904000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010400140FF401904000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010600360FF600304000000000002000020408102040FF0204081FFFFF810204081020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8102040FF02040FF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408103FC0810207F81FFFC081FFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE0400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106403608364830400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010440140C14CC10400000000000200002040810207F8103FFFFFFFFFFFF03FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105F015FE15FE1040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104E0140C14CC104000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001044014089448904000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104001401D401D04000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105F815FBF5FBF04000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050895089508904000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050995089508904000000000002000020408102040FF0207F81FFFC08103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050BF508950BF040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001050995089509D0400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105F895F895F890400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106003600360030400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE3FFE3FFE0400000000000200002040810204081FE07FFF02040 VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bc8103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002040810204081FE07FFF020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000204081020408103FC0FFFFFFFFFFFFFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020408102040810207F81020408103FFF81020408 102040000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010000000000000040000000000020000207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFC0000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106003000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104401000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104401000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000105FF1000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001047FD000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104011000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000104011000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000106003000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000103FFE000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001000000000000004000000000002000020000000000000000000000000000000000000^ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1br00 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFFFFFFFFC00000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFC000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000018000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000040018000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000000000000C0000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000007D9BE7C79F9B7878F800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000C19B56ACCC1B18CD8000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000E19B56ACCC1C18CDC000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000078D356AFCC1818FCF000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000001CD356AC0C1818C03800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000000C6356AC4C1818C41800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000F86356A787981879F000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000400000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000C00000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 0000000000!1p VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bl00000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000FFFFFFFFFFFFFFFFFFE00000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800003FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000081FFC6003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE4001400140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE478140F141C10200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE4041410142010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E40F94F8144410200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083FFE4071470142610200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE4021420141F10200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000083FFE4001400140610200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000083FFE4001400140410200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000081FFC6003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000108421084000000000000000000200000800003FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E108400000000000000000020000083FFE3FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000860036003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000840014001408140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000840794F0141C140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000840394E0143E140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC21084000000000000000000200000840394E01408144110200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084049490140814C190200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084081408140815FFD0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084901404940814C190200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000084E014039408144110200000000000000000000 00000000000000000000000X8} VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b 0000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC00000000000000000020000084E01403943E140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC00000000000000000020000084F01407941C140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC000000000000000000200000840014001408140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC000000000000000000200000860036003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE3FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000FFFFFFFFFFFFFFFFFFE00000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF0 %%EndData %%EndObject end dsd^ Q1` /AC 220 220 w1` -562 1095 (tile zoom) -0.009308 0 183 1 8 A1` /AA 220 220 w1` -379 1095 ( produces a submenu for specifying a zoom factor for the tile view.) -0.008377 0 1354 12 66 A1` -562 1149 (Selecting one of the ratios causes the tile to view to be draw accordingly. For) -0.5849 0 1537 14 78 A1` -562 1203 (example, ) -0.009995 0 195 1 8 A1` /AC 220 220 w1` -368 1203 (2:1) 0 0 64 0 2 A1` /AA 220 220 w1` -304 1203 ( produces this view for the tile shown above:) -0.009995 0 907 8 44 A1` O1` null null F b` 0 -1012 -1312 -637 -712 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:list.tiff %ALDImageDimensions: 98 90 %ALDImageCropRect: 3 2 98 90 %ALDImageCropFixed: 3.00000 2.97266 98.00000 90.00000 %ALDImagePosition: 72.000 659.250 72.000 721.900 140.400 721.900 140.400 659.250 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.400000 0.000000 0.000000 14.238636 -4680.000000 -6518.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 95 88 true %%BeginData: 2205 Hex Bytes iG^ 000000000000000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1F0F9FFFFE00000000000000 1FCF9FFEFE00000000000000 1FCFFFFCFE00000000000000 1FCE1E081E00000000000000 1FCF9CFCFE00000000000000 1FCF9C7CFE00000000000000 1FCF9E1CFE00000000000000 1FCF9F8CFE00000000000000 1FCF9FCCFE00000000000000 1FCF9C1E1E00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFE00000000000000 1FFFFFFFFFFFFFFFFFFFFFF8 100000000000000000000008 100000000000000000000008 1003C0000000000000000008 1000C0000000000000000008 1000C0000000000000000008 10F0C3C78D80000000000008 1198C66CCD80000000000008 1180C660CE00000000000008 1180C7E7CC00000000000008 1180C60CCC00000000000008 1188C62CCC00000000000008 10F0C3C74C00000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 10D9E6678D9F3C0000000008 10DB366CCDB0660000000008 10E3366CCE38660000000008 10C3F34FCC1E7E0000000008 10C&.| VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b3034C0C07600000000008 10C3118C4C03620000000008 10C1E1878C3E3C0000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 101807800000000000000008 101801800400000000000008 101801800C00000000000008 10F9E1879F9E006CF363E788 119B318CCC33006D9BB66CC8 119B318CCC3300701B366CC8 119BF18FCC3F0060FB366FC8 119B018C0C3000619B36EC08 11BB118C4C3100619B336C48 10D9E187879E0060EB306788 100000000000000000066008 10000000000000000003C008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 100000020000000000000008 100000060030000000000008 10F9E36FC01C000000000008 118333660006000000000008 11C333860003000000000008 10F333060006000000000008 103B3306001C000000000008 101B33060030000000000008 11F1E303C000000000000008 100000000000000000000008 100000000000000000000008 100000000000000000000008 1FFFFFFFFFFFFFFFFFFFFFF8 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ 0 -975 -834 -431 -412 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:sort.tiff %ALDImageDimensions: 160 124 %ALDImageCropRect: 1 2 160 123 %ALDImageCropFixed: 1.00000 2.00000 160.00000 123.00000 %ALDImagePosition: 72.000 510.650 72.000 598.500 185.750 598.500 185.750 510.650 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 8 %ALDImageGrayMap: 0 262 524 786 1049 1311 1507 1704 1966 2228 2490 2752 3015 3277 3539 3801 %%+ 3998 4260 4587 4850 5046 5308 5570 5898 6160 6422 6685 6947 7274 7537 7799 8061 %%+ 8257 8520 8847 9109 9306 9568 9830 10092 10355 10617 10879 11141 11403 11600 11862 12058 %%+ 12321 12583 12845 13107 13369 13631 13893 14156 14418 14614 14811 15073 15335 15597 15859 16122 %%+ 16384 16646 16908 17105 17367 17694 17957 18153 18415 18677 19005 19267 19529 19792 20054 20381 %%+ 20644 20906 21168 21364 21627 21954 22216 22413 22675 22937 23199 23462 23724 23986 24248 24510 %%+ 24707 24969 25165 25428 25690 25952 26214 26476 26738 27000 27263 27525 27721 27918 28180 28442 %%+ 28704 28966 29229 29491 29753 30015 30212 30474 30801 31064 31260 31522 31784 32112 32374 32636 %%+ 32899 33161 33488 33751 34013 34275 34471 34734 35061 35323 35520 35782 36044 36306 36569 36831 %%+ 37093 37355 37617 37814 38076 38272 38535 38797 39059 39321 39583 39845 40107 40370 40632 40828 %%+ 41025 41287 41549 41811 42073 42336 42598 42860 43122 43319 43581 43908 44171 44367 44629 44891 %%+ 45219 45481 45743 46006 46268 46595 46858 47120 47382 47578 47841 48168 48430 48627 48889 49151 %%+ 49413 49676 49938 50200 50462 50724 50921 51183 51379 51642 51904 52166 52428 52690 52952 53214 %%+ 53477 53739 53935 54132 54394 54656 54918 55180 55443 55705 55967 56229 56426 56688 57015 57278 %%+ 57474 57736 57998 58326 58588 58850 59113 59375 59702 59965 60227 60489 60685 60948 61275 61537 %%+ 61734 61996 62258 62520 62783 63045 63307 63569 63831 64028 64290 64486 64749 65011 65273 65535 %%BeginObject: image AD_ImMatrix setmatrix [14.308176 0.000000 0.000000 14.520661 -4680.000000 -4050.000000] concat false 159 121 8 false 0.000 0.000 0.000 1.000 (Black) 1.000 true %%BeginData: 39090 Hex Bytes isCL^ FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF0000000000FFFFFFFF0000000000FFFF0000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF000000000000000000000000FF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF000000000000000000000000000000000000FFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF000000FFFFFFFF00000000FFFFFFFFFF00FFFFFFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF000000FFFF000000000000FFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF000000FFFFFF0000000000FFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF00000000FFFFFFFF000000FFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF000000000000FFFFFF0000FFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF00000000000000FFFF00>o VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bk`00FFFF00000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00000000000000FFFF0000000000FFFF000000FFFFFFFFFF00000000FFFFFFFF00000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000000000000000000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF00000000FFFFFFFF0000FFFFFFFF00000000FFFFFF00000000FFFFFF0000FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FF0000FFFF0000FFFF0000FF0000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFF0000FFFFFFFFFF0000FFFF000000FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFFFFFFFFFFFF0000FFFFFF000000000000FFFF0000000000FFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFF0000FFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFFFF00FFFFFF0000FFFFFF0000FFFFFF00FF0000FFFF0000FFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF00000000FFFFFFFF0000FFFFFFFF00000000FFFFFF000000FF00FFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFѮ1 q>v qr ?rq~<?q C|qrrr?8ru L7suvtvrr~KJv}KsvvvvvrvvKwwK~vvvvvsv~L KJvvv=vvvKwvK~vvvvvwtvCJwKvrvwrww{OtJzvvwvtwt~vvwN~wrvvvttvwuOCru~wvu|Ov;6rp>vvr~?sw~ J :ztv  ? ?z7u wurzKHvq~Gvvu~rsvKJuvrv=vvvrvvw v u L}u=u5 =< uwrHt=prsv 1=r=rv~uHw?~wy=KCGrvwp;Dppr9u= w w M~zs}=sz>yw zqtpws <tzsJtq{D~CO~vwvrv}KLq}~OwvvvvrvvKwwK~vvvvvspxL~v vvvvvvvKwvK~vvvvvuvKKJvrvvwrw?wOw~JzvvwvtwtvCJvM~rptrvwvICq4;F vv? w|Kw~ I zv8z{}?9ys|?z It ts =><=:=55v u~ItN~svvKw5vw~uuuprvKwpKvpvvupwtuMKIyuvu|qtvKtwM~rvtq<I5qu}wputrpwvL6rq~=wvI;qr  tq }Iqry ~Nzz<rtpqr ?rq~{H{ HHuvzwvtvrr~KJvuvzKwvvvrv=KwwK~vvvvvs=55vvvvvvvKwvK~vvvvvvtvKw~vwuuH>}vtwtvKJLvvsK?5Cutr0;EszwvutvvtIrrttKz ? {tr Ip st;z It ts KHvq=zwKtvrr~KJvuvrvvvvvrvvKwwK~Kcc('t/ $K^p(" $,#%J#*K"5"KtfV~qNfk~urfjpuJgkO4tff&/K-$#Cy}&\$:d$# .~m ( #2>'TXU:CYKTU fsKk}TtX0@[H,8 3'';PS21]2k=`9CN0?vxp%WRvU]U|QYQ-NEQRU yS_^tnE\U[25|4-,#3g?!%3+#(7Ct6I fkkf#(`) +|5)2hFYkW=(q|ty]QVWtd\UcKY_^C=9 Kcu|uq_QW"r}jDb]RD :0rb uuHa ty)SQzK4t[HY+wYs  Kpttrr/vs=p7KyXQZ"+5+6'|eqphvvvfwwvUqrKn:thvvs{F}hNfw~shqsKgsBvhsvvfw|sUpsKfswvhprtK^ ?+'!#"7+21!^ `wvtjvwwgHCr#~wvHa SQ ^\\@dI6#/5!Z"73KgywI~]^V/]Z_N? vj!u iubb %aoGb@//jidZ^@ pA|y]QWUz0]{CBd 7 VQ\Ch<Ltty]QWUfI}T -=q}vy`PWhB'? %|~a=M|fprfs ;< :1qf  [ <ur d ,wprrfJ5tovyqxfGbiR` quttYp{zwr <=  >4 < < rfwv5wJgvN~qufwsuus[vsNwqfws~s}fJqwItfKccmgupHr[  = <pwpsgvNE{rnvq|q9 K2 wstsevyrNaw~ p{-xusd=r|{tszj<*` qqpzvKNfsw{q~d?sqxOZttppqftwwrfIuuJxfttrwqftIqpNnttuqftuJ~[|urptftwqIsfI 59=]bobIsqyf s:% /5{ s 9uy qqszb Kp rsfxpyKu tvps|e we v~}[ucdmju~svvb|CCpsfpttfprBvgIwqsufurvwNgtK|wtfuvrqr[tvC~wfuwvppfvtM~fuwstuduJp~OfutwwtgwpHpr[}tpupdJacjgtKK{ntutrwf|tMIza |ppweztJa uyKq}-rzt~d < cujtN~qfx>< H<<mfuqv{ufHptN{fuqpw>fuLvO%u~?-  4> <4 -<<7  =/38| z>vv v~qsbKtuer4f}uzpst?frtur  [:uzvs98> 5-54sNz~wfrsqru[spK~pfrptp|fOqsB{frp~sdrLvtKfrqu~tgpuNp5[zq~rwds|wpgMKvu~gr}rtqosAIzx{~tstCj`Rbv~ qz- rd : cstqprj9K < ub >8as{qrvfwswKNfptsppfstvt~[ruMwvfstwtfNtuJzfKccmfsuOpq[{uqufswHrfNzw>tfsswOgsOpspfsqX?uspswfsrpIFbs{~prdsp}u@Qtr 8v~rsw7*i.{tq psJ |fw~yuMs ~ -:pwygs}uuwnNCqutbspsbpvIup[xvr~ftvpCrg~r~fpwtqNgpJ{uqfKccofMvqHzfpwqdpIusCfqpgrsJuX~uvqsdqwwvpeO@t  ;~6wxs7y q u >a }fvwYLgl &!-( $ "D YX'WW=upgDb 28.>d5'6#4,>Ow9hur~wLqgK`vvvvvrfvUwwK~vvfwrhstKqpJnkrp~vhtvKwvKnkrvsvitu=KeS_]!&0N&* /fwr4dvvp *5#fvitrvgvWCrvhtfitIra +R',n~k?rg:KG#`Oox&+' "2%|buswByUfrKDQG5d| jJvrr~KJvuvrvvvvvrvvKwwK~vvvvvrvvKwwK~vvvvvvvvKwvK~vvvvvvtvKwvK~=vvvvwt;KwuK=vu 9v< strvwvICv?5tw? us IqtO w|?D  =vvwvsvtvrr~KI =<====K=v==vv9=vvu9< ?5?5Itwt uIs~u?rw~ vprz IrsvtvrvzwKv=<K=v=vvvrvvwwK~K==vvKwv=v==9=vvu9< J?5K?5tw? us Iqwvtrr KqvywvsIvtvrvO=Ivsv0=<vr====v9v===IKw=HuuN9vJzrvwvtwtrvwvICvvvvvwtrvwvICrv~wvtw?rwvtrsKrvw~tM  ?O 9~{wIrs~vr~=>zwvt=<====v9==K==9=uu9< ?5?5vvvvwttvvu9KruwK= vuwtIr{ztq{wIrs~vr~=> =<K==KvK~vvvvvw~OtKvrvvvvvtvKwvK~vvvvvwtrOvwKvuurw{O~Jzrrwvtwtr=wvICvv=vvwtJ?5~wvutq~>zwwvtrvKq ~t  Ip try ?rs~vttrrr~KHvqK O=<====v9v===9=KvvuN9< IC?5v?wwKq tpvzw|I; t:{wI9s~rttrrKHvqvzwvtvrr~KJvuvrvvvvvrvvKwwK~vvvvvrvvKwwK~vvvvvw=J=vv=vvtv=K=vvvv9vwKvvvuvsOu< vvtwtICvvvwtr?Crv~q}~=q KIKq tpvzw|Ip tq{wIrs~vr~=> =<==v=vvvvrv=KwwK~vvvvvwv~OuwKvvvvvvvKwvK~vvvvvwtrOvwKvurwtp9I ttrvwvI5v=vvvwtr=wvICrv5wvv >zwvvtrvvKq t |Isrq~{wttrq =usvtvrr~Kvrvvvv=rv=KKvvvvKv=u^TtUD'vbbHVTRZ#$2Cl]U"1"=aP="ps- tvftCMQ?VsstftC%EZfMX[W?  /=q Q=svf .xu~gGR9 [sv~sBB[TOnS5i&BP]R,3-k)5f0@USYVMYTf"f1()_RU[ycBV[BDXUDYaUFYUG= > )-:P=;H<  ScT('2.!g_^P`("{YT\:T3(ZDf'#EFU|o:.#f2.($E\Zs]V9g2*d#UfTDHg'n%)6&/(j(tf^dmMzb}o: fw#=kqpp ?uan/?')6XQ-Sfhvlvv-w~sfq="pr- IO8S< % <=-qP=rdvJwgOg7w'=v> A@TDPlvz./5g2/*1g&8g:/#dFY*+g7[B!'Q)4'tfe"pl{~}qbrjv=fyffw"OJ$=YEP]\XXK,R=JkJuvtfkpuqfoqw?w-,.K%,$n=D|Td[Af$#!/(KT$+ '24.<`PGY>f"#kgQ*y/FA"I4AKT!$YCJ/@B_@qsbsl| vitvvuwMWss rqptOrp ttnbsMp a~vpro.,WV:F!%^GQ:l=l~wfuhrK[n*"S[fwlv=EBEU/O '4T-~f34;dvcrUW/('yP - KxTJHDhC9YpgJ9z9 zpswr7 s5tvvuwMGrtvu?~4~uHsJvwvtr9~}KqvDvzt t =<=vwv >sru=KwN~ vsvtvN==JvuvrvvvvKKvru=wwK~vvvvvswKu=wvK~=vvvvwtJ=vr=rr~tvO~wOz ~~v}}?8~;7>v~tw>rr~wv uHrwBw: ?D {tz It5rvw Kt =<>s=5<=~ssL t~Nv4su ===N 9xy8~? H3{rHr~w~?J ~ >wz tsz ?ryw0uxy} :wq~ttrrz== vtq9Ouvrv=vvvrvv~JwvK==vF>====  9 : s =J8~Cs;5 ?pH~wv uHrw?vr ? {tz ItNwG KtG=< =vr== <<t u~Bu8~s5<=|rsr=r==OuMrv <rsqww~pqw8~rvv|KwwNC~tuu~v>rpv =r K VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bRFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FF0000FFFF00000000FFFF0000FFFF0000FFFF00000000FFFFFF0000FF0000 FFFF0000000000FFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FF0000FF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFF0000FF0000 FF0000FFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF000000FFFFFF0000FFFF0000FF0000FFFF0000FF0000FFFF0000FFFF000000FFFF FF000000FFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FFFFFFFF000000000000FFFF0000FF00FFFF000000000000FFFF0000FFFFFF FFFF00000000FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFF0000FF00FFFF0000FFFFFFFFFFFF0000FFFFFF FFFFFFFF000000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FFFFFFFF0000FFFFFF00FFFFFF0000FFFFFF0000FFFFFF00FFFF0000FFFFFF FFFFFFFFFF0000FF0000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FFFFFFFFFF00000000FFFFFFFF0000FFFFFFFF00000000FFFFFF0000FFFFFF FF0000000000FFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000000000FFFF00000000FFFFFFFF0000FFFFFFFF00000000FFFF000000000000 FFFF00000000FFFFFFFFFFFFFFFFFFFF0000FF0000FFFF00000000FFFF0000FF0000FFFFFF0000 000000FFFF00000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFFFF FF0000FFFF0000FFFFFFFFFFFFFFFFFF0000FF0000FF0000FFFF0000FF000000FF0000FF0000FF FF0000FF0000FFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFF0000FF0000FFFF0000FFFFFF0000FFFFFF0000FFFF0000FFFF0000FFFFFF FF0000FFFF0000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFF0000FF0000FFFF0000FF0000FF FF0000FF0000FFFF0000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFF0000FF000000000000FFFFFF0000FFFFFF000000000000FFFF0000FFFFFF FF000000000000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFF0000000000FF0000FFFF0000FF0000FF FF0000FF000000000000FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bcFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FFFF0000FF0000FFFFFFFFFFFFFF0000FFFFFF0000FFFFFFFFFFFF0000FFFFFF FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FF0000FF 000000FF0000FFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFF0000FF000000FF0000FFFFFF00FFFFFF0000FFFFFF0000FFFFFF00FFFF0000FFFFFF FF0000FFFFFF00FFFFFFFFFFFFFFFFFF0000FFFFFFFF0000FFFF0000FF0000FFFF0000FFFF0000 FF0000FF0000FFFFFF00FFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFF0000FF0000FFFF00000000FFFFFFFF0000FFFFFFFF00000000FFFFFFFF00000000 FFFF00000000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF000000FF00FF0000FFFF0000FFFFFFFF FF0000FFFF00000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF FF0000FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 0000FFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF FFFFFF FF000000000000000000000000000000000000000000000000000000FF00000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000FFFF00000000000000000000 00FFFF000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000FFFFFFFFFF0000FFFFFFFF000000FFFF00FFFF00FFFFFFFFFFFF00000000000000 0000FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF00000000FFFF0000000000FFFF0000FFFF0000FFFF00FFFF0000FFFF00000000000000000000 00000000FFFF000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF00000000FFFFFF00000000FFFF0000FFFF0000FFFFFF00000000FFFF00000000000000000000 0000000000FFFF0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000FFFFFFFF0000FFFF0000FFFF0000FFFF0000000000FFFF00000000000000000000 00000000FFFF000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFF00 00000000FF00000000FFFFFF000000000000FFFF00000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF00000000000000FFFFFF00FFFF0000FFFF0000FFFF0000000000FFFF00000000000000000000 0000FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF000000FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFF0000FFFFFFFFFFFF000000FF0000FFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000000000FFFF00FFFF0000FFFF0000FFFF0000000000FFFF00000000000000000000 00FFFF000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000 00FFFFFFFFFFFF0000FFFFFFFFFF000000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF00000000FFFFFFFFFF000000FFFFFFFF000000FFFF000000000000FFFFFFFF00000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFF00 000000FFFFFFFF0000FFFFFFFF000000FFFFFF000000000000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFFFFFF FF000000FFFFFF0000FFFFFF000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFFFF0000FFFFFF0000FFFFFFFFFF0000FFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFF0000000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 000000FFFFFFFF0000FFFFFF000000000000FFFF00000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FF0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFU VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFF0000FFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000 FF0000FFFF00000000FFFFFF000000000000FFFF0000000000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF000000FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000 00FF0000FFFFFF0000FFFFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 000000FFFFFFFF0000FFFFFFFFFF00000000FF0000000000FFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF0000 FF0000FFFFFF00000000FFFF000000000000FFFF00000000FFFFFF0000000000FFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF000000FF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000 00FF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF0000FFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FF0000FFFF0000FFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFF0000FF000000FFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF000000000000FFFF00000000FFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FFFF0000FF00FFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFFFFFFFFFFFFFF000000FFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFq VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bZFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000FFFF0000FFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 FFFF0000FF0000FFFF0000FFFF0000FFFFFFFF0000FFFFFF00FFFFFFFFFF0000FFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF0000000000FFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF00000000FFFFFFFF00000000FFFF00000000FFFF0000000000FFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF %%EndData %%EndObject end dsd^ 0 -975 872 -581 1294 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:view.tiff %ALDImageDimensions: 100 80 %ALDImageCropRect: 7 6 100 79 %ALDImageCropFixed: 7.97266 6.00000 100.00000 79.00000 %ALDImagePosition: 72.000 418.500 72.000 471.750 138.250 471.750 138.250 418.500 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.247312 0.000000 0.000000 14.589041 -4680.000000 -1515.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 93 73 true %%BeginData: 1830 Hex Bytes iG^ 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFCFFFFF0000000000000 00FFFCFFFFF0000000000000 00FFFFFFFFF0000000000000 00F990F0CEF0000000000000 00F99CE64AF0000000000000 00F99CE64AF0000000000000 00FCBCE04AF0000000000000 00FCBCE7E5F0000000000000 00FE7CE765F0000000000000 00FE7CF0E5F0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFF0000000000000 00FFFFFFFFFFFFFFFFFFFFE0 008000000000000000000020 008000000000000000000020 008000000000000000000020 008000081000000000000020 008000183000000000000020 008D8F3F7E78DB6000000020 008ED99830CCDBB000000020 008CC19830CCE33000000020 008CCF9830FCC33000000020 008CD99830C0C33000000020 008CD99830C4C33000000020 008F8E8F1E78C33000000020 008C00000000000000000020 008C00000000000000000020 008000000000000000000020 008000000000000000000020 008000000000000000000020 0080063C0000000000000020 0082060C0000000000000020 0086000C0000000000000020 008FDE0C3C00000000000020 0086060C6600000000000020 0086060C6600000000000020 0086060C7E00000000000020 0086060C6000000000000020 0086060C6200000000000020 0083C60C3C00000000000020 008000000000000000000020 008000000000000000000020 008000000000000000000020 008000000000000000000020 008000000000000000000020 0080063C0000000000000020 0082060C0000000000000020 0086000C0000000000003020 008FDE0C3C01F9E3CF801C20 0086060C66003B366D400620 0086060C660073366D400320 0086060C7E00E3366D400620 0086060C6001C3366D401C20 0086060C620183366D403020 0083C60C3C01F9E3CD400020 008000000000000000000020 008000000000000000000020 008000000000000000000020 00FFFFFFFFFFFFFFFFFFFFE0 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 %%EndData %%EndObject end dsd^ 0 -919 -328 -600 -37 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:zoom.tiff %ALDImageDimensions: 124 128 %ALDImageCropRect: 5 4 123 128 %ALDImageCropFixed: 5.00000 4.97266 123.00000 128.00000 %ALDImagePosition: 72.000 78.750 72.000 167.350 157.700 167.350 157.700 78.750 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.525424 0.000000 0.000000 14.290323 -4680.000000 4573.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 118 124 true %%BeginData: 3849 Hex Bytes iG^ 000000000000000000000000000000 07FFFFFFFF" VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1by80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFE7FFFF80000000000000000000 07FFE7FFFF80000000000000000000 07FFFFFFFF80000000000000000000 07CC87867780000000000000000000 07CCE7325780000000000000000000 07CCE7325780000000000000000000 07E5E7025780000000000000000000 07E5E73F2F80000000000000000000 07F3E73B2F80000000000000000000 07F3E7872F80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFF80000000000000000000 07FFFFFFFFFFFFFFFFFFFF00000000 040000000000000000000100000000 040000000000000000000100000000 040000000000000000000100000000 040000408000000000000100000000 040000C18000000000000100000000 046C79FBF3C6DB0000000100000000 0476CCC18666DD8000000100000000 04660CC18667198000000100000000 04667CC187E6198000000100000000 0466CCC18606198000000100000000 0466CCC18626198000000100000000 047C7478F3C6198000000100000000 046000000000000000000100000000 046000000000000000000100000000 040000000000000000000100000000 040000000000000000000100000000 040000000000000000000100000000 040031E00000000000000100000000 041030600000000000000100000000 043000600000000000000100000000 047EF061E000000000000100000000 043030633000000000000100000000 043030633000000000000100000000 04303063F000000000000100000000 043030630000000000000100000000 043030631000000000000100000000 041E3061E000000000000100000000 040000000000000000000100000000 040000000000000000000100000000 040000000000000000000100000000 07FFFFFFFFFFFFFFFFFFFFFFFFFFC0 07FFFFFFFFFFFFFFFFFFFF00000040 07FFCE1FFFFFFFFFFFFFFF00000040 07EFCF9FFFFFFFFFFFFFFF00000040 07CFFF9FFFFFFFFFFFFE7F06001840 07810F9E1FF030E183FF1F1E007840 07CFCF9CCFFE264C95FFCF060C1840 07CFCF9CCFFC664C95FFE7060C1840 07CFCF9C0FF8E64C95FFCF06001840 07CFCF9CFFF1E64C95FF1F06001840 07CFCF9CEFF3E64C95FE7F06001840 07E1CF9E1FF030E195FFFF060C1840 07FFFFFFFFFFFFFFFFFFFF060C1840 07FFFFFFFFFFFFFFFFFFFF00000040 07FFFFFFFFFFFFFFFFFFFF00000040 07FFFFFFFFFFFFFFFFFFFF00000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 00000000000000000000010F001840 000000000000000000000119807840 0000000000000000000001018C1840 0000000000000000000001038C1840 000000000000000000000107001840 00000000000000000000010C001840 000000000000000000000118001840 00000000000000000000011F8C1840 00000000000000000000011F8C1840 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000103001840 000000000000000000000107007840 00000000000000000000010B0C1840 00000000000000000000010B0C1840 000000000000000000000113001840 00000000000000000000011F801840 00000000000000000000011F801840 0000000000000000000001030C1840 0000000000000000000001030C1840 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 00000000000000000000010F001840 000000000000000000000119807840 0000000000000000000001198C1840 00000000000000000000011D8C1840 00000000000000000000010F001840 00000000000000000000011B801840 000000000000000000000119801840 0000000000000000000001198C1840 00000000000000000000010F0C1840 000000000000000000000100000040 000000000000000000000100000040 000000000000000000000100000040 0000000000000000000001FFFFFFC0 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 %%EndData %%EndObject end dsd^ $4 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 5 5 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$4 bmt^ o` N1` F M1` /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1555 (IPD234a) 0 -0.009216 170 0 6 A1` -104 1555 (- 5 -) 0.046585 0 76 2 4 A1` 712 1555 (June 24, 1994) -0.037033 0 263 2 12 A1` O1` null null F b` null null F a` 0 -975 -1331 -666 -694 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:file.tiff %ALDImageDimensions: 90 120 %ALDImageCropRect: 6 2 90 120 %ALDImageCropFixed: 6.98438 2.97266 90.00000 120.00000 %ALDImagePosition: 72.000 629.000 72.000 713.250 131.750 713.250 131.750 629.000 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.226190 0.000000 0.000000 14.279661 -4680.000000 -6345.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 84 118 true %%BeginData: 2719 Hex Bytes iG^ 0000000000000000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FC39C3FFE00000000000 01F9F9F3FFE00000000000 01F9FFF3FFE00000000000 01F021F3C3E00000000000 01F9F9F399E00000000000 01F9F9F399E00000000000 01F9F9F381E00000000000 01F9F9F39FE00000000000 01F9F9F39DE00000000000 01F9F9F3C3E00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFE00000000000 01FFFFFFFFFFFFFFFFFFE0 0100000000000000000020 0100000000000000000020 011E00000C006000180020 010600000C00C7C60C0020 010600000C018C66060020 01061E3C7C0189E6060020 01063366CC018B66060020 01063306CC018B66060020 0106333ECC018B66060020 01063366CC0189A6060020 01063366DC018C06060020 01061E3A6C00C7C7CC0020 0100000000006000180020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000006000180020 010000000000C7C78C0020 0100000000018C6CC60020 010F9E66780189EC060020 01183366CC018B6E060020 011C0366CC018B67860020 010F1F34FC018B61C60020 0103B334C00189A0C60020 0101B318C4018C0CC60020 011F1D187800C7C78C0020 0100000000006000180020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 010F9E667801E3E0000020 01183366CC033600000020 011C0366CC003700000020 010F1F34FC01F3C0000020 0103B334C00330E0000020 0101B318C4033060000020 011F1D187801D7C0000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 010000000C006000180020 010000000C00C7CF8C0020 010000000C018C6CC60020 010D9E3C7C0189ECC60020 010DB366CC018B6C860020 010E3306CC018B6F060020 010C3F3ECC018B6D860020 010C3066CC0189AD860020 010C3166DC018C0CC60020 010C1E3A6C00C7CCCC0020 0100000000006000180020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 01000018000000C0003020 010000182000018F989820 0100000060000318D88C20 01189B78FCF00313DA8C20 011A9B1861980316DA8C20 011A9C1861980316DA8C20 011A981861F80316CF8C20 010D1818618003134D0C20 010D1818618803180D0C20 010D18183CF0018F8D1820 01000000000000C0003020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100000000000000000020 0100001800006000180020 010000182000C7C78C0020 0100000060018C64860020 010FB378FC0189ECC60020 0119B31860018B6CC60020 0119B31860018B6CC60020 0119B31860018B6CC60020 0119B318600189ACC60020 011BB71860018C04860020 010D9B183C00C7m VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1buC78C0020 0101800000006001980020 0101800000000000C00020 0100000000000000000020 01FFFFFFFFFFFFFFFFFFE0 0000000000000000000000 0000000000000000000000 0000000000000000000000 0000000000000000000000 %%EndData %%EndObject end dsd^ 0 -947 -459 -637 750 F bh^ N1` F M1` /AA 220 220 w1` -975 -1389 (allowing the selection of an operation.) 0.009109 0 773 5 38 A1` /AB 220 220 w1` -694 -1285 (The File Menu) 0.027267 0 306 2 12 A1` /AC 220 220 w1` -696 -1106 (load) 0 0 87 0 3 A1` /AA 220 220 w1` -610 -1106 ( produces a dialog box in which the name of a file of tile specifications can be) 1.577057 0 1585 16 79 A1` -697 -1052 (given. These tiles replace the those in the current tile list.) -0.0513 0 1145 10 61 A1` /AC 220 220 w1` -698 -972 (save) 0 0 97 0 3 A1` /AA 220 220 w1` -601 -972 ( causes the current tile list to be saved in the current file.) -0.036484 0 1137 12 61 A1` /AC 220 220 w1` -699 -893 (save as) -3.270645 0 155 1 6 A1` /AA 220 220 w1` -544 -893 ( produces a dialog box in which the name of a file for saving can be specified.) -2.943268 0 1519 16 78 A1` -975 -839 (The name given becomes the current file name for future saves.) -0.032013 0 1283 10 61 A1` /AC 220 220 w1` -975 -760 (read) 0 0 92 0 3 A1` /AA 220 220 w1` -883 -760 ( reads one tile specification from standard input and adds it to the end of the tile list. The new) -2.075256 0 1858 19 97 A1` -975 -706 (tile becomes the current tile.) -0.080154 0 570 4 29 A1` /AC 220 220 w1` -975 -627 (write) 0 0 97 0 4 A1` /AA 220 220 w1` -878 -627 ( writes the current tile to standard output.) -0.05098 0 851 7 43 A1` /AC 220 220 w1` -975 -547 (quit) 0 0 74 0 3 A1` /AA 220 220 w1` -901 -547 ( terminates the Penelope session.) -0.016068 0 667 4 32 A1` /AB 220 220 w1` -619 -444 (The Tile Menu) 0.027267 0 306 2 12 A1` /AC 220 220 w1` -619 -289 (next) 0 0 87 0 3 A1` /AA 220 220 w1` -532 -289 ( changes the current tile to the next tile in the list. If there is no next tile, a) 1.554779 0 1507 18 82 A1` -619 -235 (warning box is presented.) -0.082199 0 524 3 24 A1` /AC 220 220 w1` -619 -156 (previous) 0 0 173 0 7 A1` /AA 220 220 w1` -445 -156 ( changes the current tile to the previous tile in the list. If there is no) 4.616852 0 1420 15 73 A1` -619 -102 (previous tile, a warning box is presented.) -0.041916 0 836 6 41 A1` /AC 220 220 w1` -619 -23 (first) 0 0 74 0 4 A1` /AA 220 220 w1` -545 -23 ( changes the current tile to the first tile in the list) -0.047302 0 977 11 54 A1` /AC 220 220 w1` -619 56 (last) 0 0 71 0 3 A1` /AA 220 220 w1` -547 56 ( changes the current tile to the last tile in the list.) -0.043579 0 978 11 54 A1` /AC 220 220 w1` -975 136 (goto ) 2.264328 0 104 1 4 A1` /AA 220 220 w1` -871 136 (presents a dialog box in which to specify the number of the tile to become the current tile.) 2.037689 0 1846 17 91 A1` -975 190 (Negative values are relative to the end of the list.) -0.025543 0 991 9 51 A1` /AC 220 220 w1` -975 269 (delete) 0 0 125 0 5 A1` /AA 220 220 w1` -850 269 ( deletes the current tile from the list. This operation cannot be undone.) -0.040588 0 1423 12 72 A1` /AC 220 220 w1` -975 348 (revert) 0 0 117 0 5 A1` /AA 220 220 w1` -858 348 ( restores the current tile to its state before any editing or transformations were done to it.) 2.456223 0 1833 16 93 A1` -975 402 (Reversion is not possible once the current tile is changed to another tile.) -0.046692 0 1450 12 74 A1` /AC 220 220 w1` -975 481 (copy) 0 0 97 0 3 A1` /AA 220 220 w1` -878 481 ( adds a copy of the current tile to the end of the tile list and makes the new tile the current tile.) -2.303925 0 1853 22 100 A1` /AC 220 220 w1` -975 561 (new) 0 0 84 0 2 A1` /AA 220 220 w1` -891 561 ( creates a new, blank tile. A dialog box is presented for specifying the size of the new tile. The) -1.238983 0 1866 19 97 A1` -975 615 (new tile is added to the end of the tile list and becomes the current tile.) -0.032028 0 1431 15 74 A1` /AC 220 220 w1` -975 694 (info) 0 0 74 0 3 A1` /AA 220 220 w1` -901 694 ( produces a box with information about the current tile, as in) -0.030701 0 1230 11 61 A1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:info.tiff %ALDImageDimensions: 350 200 %ALDImageCropRect: 1 1 344 195 %ALDImageCropFixed: 1.00000 1.00000 344.00000 195.00000 %ALDImagePosition: 108.000 122.700 108.000 215.800 272.650 215.800 272.650 122.700 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.600583 0.000000 0.000000 9.597938 -3960.000000 3604.000000] concat false iA^ null 1.000 true iB^ false 343 194 true %%BeginData: 17077 Hex Bytes iG^ 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF000 400000000000000000000000000000000000000000000000000000000000000000000000000000 00001000 400000000000000000000000000000000000000000000000000000000000000000000000000000 00001000 4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF9000 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009000 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000301801800000003C0000000003C000000000000000000000000000000000000000000000 00009E00 480000301801800000040C0000600006001E000000000000000000000000000000000000000000 00009E00 4800003000018000000C0C0001E000060033000000000000000000000000000000000000000000 00009E00 4800003678D9B1E6601F8C3C006003CFC003000000000000000000000000000000000000000000 00009E00 4800003B18EDDB36600C0C66006006660007000000000000000000000000000000000000000000 00009E00 4800003318CD9B33400C0C6600600666000E000000000000000000000000000000000000000000 00009E00 4800003318CD9BF1800C0C7E006006660018000000000000000000000000000000000000000000 00009E00 4800003318CD9B02C00C0C60006006660030000000000000000000000000000000000000000000 00009E00 48000033 VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b18CD9B16630C0C6200600666003F000000000000000000000000000000000000000000 00009E00 4800003E18CD99E663078C3C006003C6003F000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 48000000000000000C000000000030000000000000000000000000000000000000000000000000 00009E00 4800001E0C00F0C00C000C7E7C003007801E3C7CF0000000000000000000000000000000000000 00009E00 480000331C019BC00C003C7E7C00300CC033667D98000000000000000000000000000000000000 00009E00 480000032CCC18C00D800C064001F00CC003064018000000000000000000000000000000000000 00009E00 480000072CCC18C00EDF8C0C400337ECC007064038000000000000000000000000000000000000 00009E00 4800000E4C68F0C00CC00C187803300CC00E3C7870000000000000000000000000000000000000 00009E00 480000187E3018C00CDF8C180C0337ECC018060CC0000000000000000000000000000000000000 00009E00 480000307E5818C00CC00C300C03300CC030060D80000000000000000000000000000000000000 00009E00 4800003F0CCD98C00CC00C30CC03700CC63F66CDF8000000000000000000000000000000000000 00009E00 4800003F0CCCF0C00F800C307801B007863F3C79F8000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000001E00000000000000000000000000 00009E00 4800001E0C01B1E3C786003C78F1E3C78F1E3C78F9E3C78F1E3078F1E3C78F1E3C78F1E0000000 00009E00 480000331C01B3366CDE0066CD9B366CD9B366CCFB366CD9B330CD9B366CD9B366CD9B30000000 00009E00 480000032C03FB366CC61E66CD9B3060D9B366CC80366CD9B37E0D9B366CD98366CD9B30000000 00009E00 480000072C01B3366CC63366CD9B3061D9B366CC80766CD9B3301D9B366CDD8766CD9B30000000 00009E00 4800000E4C01B3366CC63366CD9B33C399B366CCF0E66CD9B330399B366CCF0E66CD9B30000000 00009E00 480000187E03FB366CC63F66CD9B306619B366CC19866CD9B330619B366CDB9866CD9B30000000 00009E00 480000307E01B3366CC63066CD9B306C19B366CC1B066CD9B330C19B366CD9B066CD9B30000000 00009E00 4800003F0C31B3366CC63166CD9B366FD9B366CD9BF66CD9B330FD9B366CD9BF66CD9B31830600 00009E00 4800003F0C31B1E3C7861E3C78F1E3CFCF1E3C78F3F3C78F1E30FCF1E3C78F3F3C78F1E1830600 00009E00 480000000010000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000020000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000301801800000060000000000000000000000000000000000000000000000000000000000 00009E00 480000301801800000060000000000000000000000000000000000000000000000000000000000 00009E00 480000300001800000000000000000000000000000000000000000000000000000000000000000 00009E00 4800003678D9B1E6601E1E3CD80000000000000000000000000000000000000000000000000000 00009E00 4800003B18EDDB3660063366EC0000000000000000000000000000000000000000000000000000 00009E00 4800003318CD9B3340063066CC0000000000000000000000000000000000000000000000000000 00009E00 4800003318CD9BF180063066CC0000000000000000000000000000000000000000000000000000 00009E00 4800003318CD9B02C0063066CC0000000000000000000000000000000000000000000000000000 00009E00 4800003318CD9B1660063166CC0000000000000000000000000000000000000000000000000000 00009E00 4800003E18CD99E660061E3CCC0000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 48000000000000000000000000000000L VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b(&0000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 48000000000000000000000000000007FFFFFFFFFFFFFFFFFFFC00000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000003000000000400000000000000000000000000 00009E00 4800000000000000000000000000000400000000F3000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000093000000000400000000000000000000000000 00009E00 48000000000000000000000000000004000000019B300000000400000000000000000000000000 00009E00 48000000000000000000000000000004000000019B200000000400000000000000000000000000 00009E00 48000000000000000000000000000004000000019B400000000400000000000000000000000000 00009E00 48000000000000000000000000000004000000019BC00000000400000000000000000000000000 00009E00 48000000000000000000000000000004000000019B600000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000093300000000400000000000000000000000000 00009E00 4800000000000000000000000000000400000000F3300000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 480000000000000000000000000000040000000000000000000400000000000000000000000000 00009E00 48000000000000000000000000000007FFFFFFFFFFFFFFFFFFFC00000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 480000000000000000000000000000000000000000000000000000000000000000000000000000 00009E00 4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF9E00 400000000000000000000000000000000000000000000000000000000000000000000000000000 00001E00 400000000000000000000000000000000000000000000000000000000000000000000000000000 00001E00 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFE00 03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFE00 03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFE00 03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFE00 03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFE00 000000000000000000000000000000000000000000000000000400000000000000000000000000 00000000 %%EndData %%EndObject end dsd^ Q1` -825 1239 (The first line gives the name of the file corresponding to the tile list, the position of the tile) -1.138168 0 1800 18 97 A1` -975 1293 (in the list and the total number of tiles in the list. The second line gives information about the tile:) -1.057587 0 1950 19 103 A1` -975 1347 (its size, the number of bits set in it, and its density \(the percentage of set bits\). The third line gives) -1.032684 0 1950 20 105 A1` -975 1401 (the hexadecimal specification for the tile. If the specification is too long to fit in the box, ellipses are) -2.764938 0 1950 18 107 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:tile.tiff %ALDImageDimensions: 110 190 %ALDImageCropRect: 0 2 110 190 %ALDImageCropFixed: 0.98828 2.00000 110.00000 190.00000 %ALDImagePosition: 76.500 375.400 76.500 510.750 155.000 510.750 155.000 375.400 %ALDImageResolution: 100.000 100.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1 VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b5.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [14.272727 0.000000 0.000000 14.398936 -4590.000000 -2295.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 110 188 true %%BeginData: 5457 Hex Bytes iG^ 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFE70FFF8000000000000000000 7F7E7CFFF8000000000000000000 7E7FFCFFF8000000000000000000 7C087CF0F8000000000000000000 7E7E7CE678000000000000000000 7E7E7CE678000000000000000000 7E7E7CE078000000000000000000 7E7E7CE7F8000000000000000000 7E7E7CE778000000000000000000 7F0E7CF0F8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFF8000000000000000000 7FFFFFFFFFFFFFFFFFFFFFFFC000 4000000000000000000000004000 4000000000000000000000004000 4000000000180006000000004000 400000080031F313000000004000 4000001800631B11800000004000 46C799BF00627B91800000004000 476CD9980062DBD1800000004000 466CCD180062DAD1800000004000 466FC6180062DAF1800000004000 466C0B1800626A71800000004000 466C599800630231800000004000 4667998F0031F233000000004000 4000000000180006000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000018000000018000604000 4000000018000000031F3E304000 40000000000000000631B3184000 46C6CF33787999F00627B3184000 4766D9B318CD9B00062DB3184000 466719B318CD9B80062DB2184000 46661F9A18CD99E0062DBC184000 4666181A18CD98700626B0184000 4666188C18CDB830063030184000 47C60F0C1878DBE0031F30304000 4600000000000000018000604000 4600000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 41E3000000000000000000004000 4303000010000000000000004000 4300000030000000000000004000 47EF0D9F7E000000000000004000 43030DB030000000000000004000 43030E3830000000000000004000 43030C1E30000000000000004000 43030C0730000000000000004000 43030C0330000000000000004000 43030C3E1E000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4780000000000000000000004000 4180000800000000000000004000 4180001800000000000000004000 41878FBF00000000000000004000 418CD81800000000000000004000 4180DC1800000000000000004000 4187CF1800000000000000004000 418CC39800000000000000004000 418CC19800000000000000004000 41875F0F00000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000180006000000004000 400004000031F0E3000000004000 40000C00006319B1800000004000 43E79F9E00627B01800000004000 466CCC330062DB01800000004000 466CCC330062DB01800000004000 466CCC330062DB31800000004000 46ECCC3300626B31800000004000 436CCC33006301B1800000004000 4067879E0031F0F3000000004000 4660000000180006000000004000 43C0000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 40601E0000000060001800004000 40600600100000C7CF0C00004000 406006003000018C6D8600004000 43E7861E7E780189ECC600004000 466CC63330CC018B6CC600004000 466CC63330CC018B6CC600004000 466FC63F30FC018B6CC600004000 466C063030C00189ACC600004000 46EC463130C4018C0D8600004000 4367861E1E7800C7CF0C00004000 4000000000000060001800004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000200000000000004000 4000000000600000000000004000 4367999E36FC0000000000004000 436CD9B336600000000000004000 438CD9B338600000000000004000 430FCD3F30600000000000004000 430C0D3030600000000000004000 430C463130600000000000004000 4307861E303C0000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000180006000000004000 400000000031F0E3000000004000 40000000006319B1800000004000 43C79B3300627B01800000004000 466CDDB30062DB01800000004000 460CD9B30062DB01800000004000 460CD99A0062DB01800000004000 460CD99A00626B01800000004000 462CD98C00630191800000004000 43C79F0C0031F0E3000000004000 4000180800180006000000004000 4000181800000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 46C7988000000000000000004000 476CDA8000000000000000004000 466CDA8000000000000000004000 466FDA8000000000000000004000 466C0D0000000000000000004000 466C4D0000000000000000004000 46678D0000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4000000000000000000000004000 4180078000180006000000004000 41800C000031F3F3000000004000 40000C00006318C1800000004000 478D9F9E006278C1800000004000 418ECC330062D8C1800000004000 418CCC330062D8C1800000004000 418CCC330062D8C1800000004000 418CCC33006268C1800000004000 418CCC33006300C1800000004000 418CCC1E0031F3F3000000004000 4000000000180006000000004000 4000000000000000000000004000 4000000000000000000000004000 7FFFFFFFFFFFFFFFFFFFFFFFC000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 0000000000000000000000000000 %%EndData %%EndObject end dsd^ $4 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 4 6 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$4 bmt^ o` 0 0 0 1 (Black) 0 T b` null null F a` 0 -712 -1214 -549 -1153 F bh^ N1` F M1` /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1545 (June 24, 1994) -0.037033 0 263 2 12 A1` -104 1545 (- 4 -) 0.046585 0 76 2 4 A1` 805 1545 (IPD234a) 0 -0.009216 170 0 6 A1` O1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:flips.tiff %ALDImageDimensions: 38 37 %ALDImageCropRect: 2 3 38 35 %ALDImageCropFixed: 2.98828 3.00000 38.00000 35.00000 %ALDImagePosition: 72.000 569.250 72.000 600.750 105.600 600.750 105.600 569.250 %ALDImageResolution: 75.000 75.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [18.666667 0.000000 0.000000 19.687500 -4680.000000 -4095.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 36 32 true %%BeginData: 357 Hex Bytes iG^ 0FFF8FFF83 1800D800C3 1000502043 101E507043 100E50F843 100E502043 1012502043 1020502043 1240502043 1380502043 138050F843 13C0507043 1000502043 1800D800C3 0FFF8FFF83 0000000003 0FFF8FFF83 1800D800C3 1000500043 13C0500043 1380500043 1380510443 1240530643 102057FF43 1012530643 100E510443 100E500043 101E500043 1000500043 1800D800C3 0FFF8FFF83 0000000003 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:rots.tiff %ALDImageDimensiq VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bDons: 37 35 %ALDImageCropRect: 2 2 37 34 %ALDImageCropFixed: 2.97656 2.00000 37.00000 34.00000 %ALDImagePosition: 72.000 515.250 72.000 546.750 104.650 546.750 104.650 515.250 %ALDImageResolution: 75.000 75.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [18.657143 0.000000 0.000000 19.687500 -4680.000000 -3015.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 35 32 true %%BeginData: 357 Hex Bytes iG^ 0FFF8FFF87 1800D800C7 1000500047 11E0507047 1010508047 1008510047 1008510047 1008510047 103E511047 101C509847 1008507C47 1000501847 1000501047 1800D800C7 0FFF8FFF87 0000000007 0FFF800007 1800C00007 1000400007 103C400007 1040400007 1080400007 1080400007 1080400007 13E0400007 11C0400007 1080400007 1000400007 1000400007 1800C00007 0FFF800007 0000000007 %%EndData %%EndObject end dsd^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:shifts.tiff %ALDImageDimensions: 56 59 %ALDImageCropRect: 3 5 56 52 %ALDImageCropFixed: 3.99609 5.00000 56.00000 52.00000 %ALDImagePosition: 72.000 623.250 72.000 668.350 121.900 668.350 121.900 623.250 %ALDImageResolution: 75.000 75.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [18.830189 0.000000 0.000000 19.191489 -4680.000000 -5447.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 53 47 true %%BeginData: 710 Hex Bytes iG^ 000007FFC00000 00000C00600000 00000810200000 00000838200000 0000087C200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000C00600000 000007FFC00000 00000000000000 07FFC00007FFC0 0C0060000C0060 08002000080020 08002000080020 08002000080020 08802000080220 09802000080320 0BFFA0000BFFA0 09802000080320 08802000080220 08002000080020 08002000080020 08002000080020 0C0060000C0060 07FFC00007FFC0 00000000000000 000007FFC00000 00000C00600000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 00000810200000 0000087C200000 00000838200000 00000810200000 00000C00600000 000007FFC00000 %%EndData %%EndObject end dsd^ null null F b` 0 -975 -1162 -712 -225 F bh^ cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:sizers.tiff %ALDImageDimensions: 60 54 %ALDImageCropRect: 2 2 58 53 %ALDImageCropFixed: 2.00000 2.00000 58.00000 53.00000 %ALDImagePosition: 72.000 454.500 72.000 504.000 126.000 504.000 126.000 454.500 %ALDImageResolution: 75.000 75.000 %ALDImageColorType: Process %ALDImageColor: 0.000 0.000 0.000 1.000 (Black) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [19.285714 0.000000 0.000000 19.411765 -4680.000000 -2160.000000] concat false iA^ 0.000 0.000 0.000 1.000 (Black) 1.000 true iB^ false 56 51 true %%BeginData: 770 Hex Bytes iG^ 1FFF1FFF1FFF00 3201B041B24180 2200A060A66080 2F80AFF0AFF080 2700A060A66080 2200A044A24480 2000A00EA00E80 2FC0AFDFAFDF80 2844A844A84480 284CA844A84480 285FA844A85F80 284CA844A84E80 2FC4AFC4AFC480 3001B001B00180 1FFF1FFF1FFF00 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 00000000000000 1FFF0000000000 30018000000000 22008000000000 22008000000000 2FF88000000000 22088000000000 22088000000000 22088000000000 22088000000000 22088000000000 23FE8000000000 20088000000000 20088000000000 30018000000000 1FFF0000000000 00000000000000 00000000000000 00000000000000 00000000000000 %%EndData %%EndObject end dsd^ N1` F M1` /AB 260 260 w1` -975 -1389 (T) 0 -0.002274 33 0 0 A1` -945 -1389 (ransformations) 0 -0.002274 394 0 13 A1` /AA 220 220 w1` -825 -1285 (Pressing a mouse button on one of the buttons to the left of the editing grid transforms the) -1.626373 0 1800 17 91 A1` -975 -1231 (current tile.) -0.102539 0 234 1 12 A1` -712 -1101 (The top four buttons shift the bits of the tile by one position in the direction indicated.) -3.122375 0 1687 16 90 A1` -712 -1047 (The shift is circular; bits shifted off one edge appear at the opposite edge.) -0.006485 0 1479 13 76 A1` -712 -810 (The next four buttons flip the tile in the direction indicated.) -0.005524 0 1201 10 62 A1` -712 -601 (These three buttons rotate the tile; clockwise 90) -2.115494 0 941 7 48 A1` $4 tsi^ /$4 bmt^ %%IncludeResource: font Symbol /AE /|______Symbol F /Symbol x1` /$5 bmt^ /AE 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` 229 -601 (\260) -2.115494 0 18 0 0 A1` /AA 220 220 w1` 247 -601 (, by 180) -2.115494 0 150 2 7 A1` /AE 220 220 w1` 396 -601 (\260) -2.115494 0 18 0 0 A1` /AA 220 220 w1` 415 -601 (, and counter-clockwise 90) -2.115494 0 530 3 25 A1` /AE 220 220 w1` 945 -601 (\260) -2.115494 0 18 0 0 A1` /AA 220 220 w1` 964 -601 (.) -2.115494 0 11 0 0 A1` -712 -422 (The bottom four buttons change the size of the tile. The left-most button trims off any) -2.66066 0 1687 15 86 A1` -712 -368 (white space at the edges of the tile. The next button centers a trimmed version of the) -1.046722 0 1687 16 85 A1` -712 -314 (tile in a larger area. The right-most button on the first row allows the size of the tile to) -2.5616 0 1687 18 91 A1` -712 -260 (be changed. The button at the bottom crops the tile, removing rows and columns.) 3.113495 0 1687 13 78 A1` -712 -206 (Except for trimming, dialog boxes are presented in which the values can be entered.) -0.764954 0 1687 13 82 A1` -712 -151 (For example, the button to enlarge a tile presents the following dialog box:) 0.008545 0 1507 12 75 A1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:enlarge.tiff %ALDImageDimensions: 280 250 %ALDImageCropRect: 0 0 279 238 %ALDImageCropFixed: 0.00000 0.00000 279.00000 238.00000 %ALDImagePosition: 144.000 285.000 144.000 415.000 292.500 415.000 292.500 285.000 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [10.645161 0.000000 0.000000 10.924370 -3240.000000 -380.000000] concat false iA^ null 1.000 true iB^ false 279 238 true %%BeginData: 16903 Hex Bytes iG^ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000 8000000000000000000000000000000000000000000000000000000000000000002000 8000000000000000000000000000000000000000000000000000000000000000002000 9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2000 9000000000000000000000000000000000000000000000000000000000000000012000 9000000000000000000000000000000000000000000000000000000000000000012000 9000000000000000000000000000000000000000000000000000000000000000012000 9000000000000000000000000000000000000000000000000000000000000000012000 9000000000000000000000000000000000000000000000000000000000000000012000 9000000000000000000000000000000000000000000000000000000000000000012000 900000000000000000000000000000000000000000000000000000000000000001O 1~;Q8F$dujL*7'R =Xal::x '!`ra^Uj@54,W|V6r~F fz{{+3*PN{TFY8Pf )+W/?|U1T7~o=PT1+fK/NTv=O3~*HDB/X8jQvh[s`x$yP?irc8;?bG=Rp~Jfkui-n#;4]CDX$$40YyfA)"'12f2)\oT@T4h"f//fx[!&:BFU,*"#\Qlk:Pu =*pNs upc>yfJIuwzI&vkt~D,{~y`hPH`g'5obkthrs9fsuuf9)ynq)?`=_|f =Gm=rwg8= )WzDe} .C]b N eB<D:0i`+rp"DIdC$d9Tf:;[@MD+A"-8 bz]$1=:gDD}W^TAEG\A dTLL 2%l luu :HWsOD1&M _MQ#Ny, Jy4+J^fY(u6.0-H;QpeU.eRD.^I=[AYAFdQ@El4=WN<| )@YTd(a*,,NA5dv{!7r.$ I|D_;(ZX)a a^Zh0s`f?^'6+Dn[JU}MRp fvBGWSU_^UT\ZK-CyRUbD'&-K D@:TP]1V@s_Q^PGBq*Q@&V*YDM,SZf"3_RA_-6%dOG*&9[AEo.3_VYmboI qFu{XjGQqTHZVF&9!FKv8BX> Lrp{C^^NH;*w j-#gc++$P u6oa/+NT]p-X-Uy e9Gwqs` 5>gF:_erF^tKY'-4,`br*ImB 736|EH/F %$a-]:Udbz*@=E"Hnb_P/VwXG48D:Ld jaVk!AZ&TRi9nWW4d5DoG)I, QvZB/;LhdiY~|1F }HU_-[6RZ85F H|l LsklL*h71.UnBwnx{HwomeBrQ4lor|vvrrn07(y{xBksy#xkz|-~>>;@KG-K~]cUS/6.Ak9u rypPssD&+^0agqYb Z ow@-|oc-]\QWQy|/RlYDNF&D //#oA!g2[ +Z"A|oz\)hP^L]U-\c02mfM-d2,_BW\s ,)(KCgCYYR-Vbr#wrs _ev{wxp "=pfs]jG'4+!XVU=fZ@3C]12$"ofbq#vC; A_vfq tcJh wqKifqv?` [Nwq c 0+ /,Ez- d9>oap:P5i-IIznIv01w.KbMqNapJ%U&+U+f3_U)-31{U]C4)\@":.#n66!0);=f *b.d0n"d50hf %2. f1o[)o_=hpwr~Npnvfurtvfsfst[q&JeMsBfwvrfS63UF\)35f5Y\PjZ"o'$`!if$:%5f64#U^A#"U$fRwaGK0{ `=f~ut[prwfyPIqsp?Ic1 K pw -ufn(XBAD$ffK[LJg{ ":f? uv/ wT=G:w_pgom-\Uc!hCD.#nR364'(2f2+/+a;VD,"nRY52f2/*+*\*b2.#-.=A^|+x p}9tfvfqqnvJ`srf3CTw~gu`xwn5JKkptxfn#4}ur* 27K8`Y'Y$xRT"M!(t4:,99r?/_++.,vvw~( >T1' cc3=!XdwttO KsT= 5},TY{aw~LOcfwIg#8ul]1'ivOZ">&dvvCem@@b k tAda&",+]\ne)-a*)4.Y&2fdZ?[bgH@LXTY.|| t l"O A^l- j2YQR`wklD0-++Cdv!2D^iSWA8?A9g'[jBd #79aTr O>'|vtcrtMrKvNsN0Yx=[j%zl/;+ rrl p7 $7-`vIa$w?zHc,-6<".2k(0-bEYTC|52'BUBUWAFTRXLt]W9XHUb~DRLDW,Y*Y_^*A!@bW{HDH5zvqp r fgd9A/*! glbEq`t*xg saJHX /3hdCFChs#\=1A0c|>t7T]C3 a g*K[P(6)%45Z*WfVithwpHqxdrg{stYsr?`t#K.LNey}z`LrG"k48|s[mU,0EgJQn dr(dts/9httvgtpfD #qms={YQ'#j(!WYK8b_)7S&(( GN'MaOl/RS6d:+U*+ZPa^&f:lM+YRm).2L(kQW+YT\$2f1ZW$'L4)(\c5^bR3 y[ e;])W#(ksMC Xv| q.pt[w=LP=xftIItvGRN7ueuKOc_kAct.~tf?pXs#8\OoZ,-N_c5H*&`H/WnIcF\#`f'Qle^LhtuJ ~u[rnw5pt[{(0srTN%wvXvq=ZK5GK.Rr4)&=% vZvN(}~~yjuU@2tL8gSQ5oXonC`@2? <*)P" (h g/o2//Fyd])i`#?Y8rlPDTLCF`b(\;I3 ?)FfU}O{e *1{|?BECSsr[RC.| ; kKlL_[R2jr5P}KG%a5#|#J)0k5lYBR[3{=~i5\t"Jz | 0{:>}wdET7l.31%6(,7?ip2O +\TkvKq_u6~iM@JVB[MefwpGA>7| VkX ;V;qy-=I-7#Ik~ s4=/rp| cr!jV]aTeo9$k<\:Fp0Mc3w62L3`Cw) |(9/+?}7Dw_*V?c-.FiR:7 Zxk\NU!%RWtmSjg 9,*&a=qY\Sg_CYJ"R;<]E9BwPVUAta\p^MKG`W&)rPYx.jleb#q0He>&\&?;}$VDQd0B8FrF8:NXHSM]D{pYd~$t]D u ;:VObiI %bfJ-,~i .t62W&\dJz/c%_s ub{Mb81@KJCvdd6Cz-!q2;1JKs)-CG[XWqAR\XZO0ql0>1zJI+y^6ThYtaxT_.EYMsMPc|I3tB3~z%sRHVxL!Wh1#N7fttvf1w&H49flzt*";xwh}tr[vw asXtvP4ix:t?uw~ &KpO-jwfn Rfht90 vfJtgwtf>h X?%d#gR D;_(_*EBREDD_~-nX&cUoD$_o}dN]_VDXUyd]#aXV( VU_C2f'3Eq_^%;P]6omVVf,7ofkthpMvqo=oJse[;fw&V:fHCXoD[/2#fC6'%#2E.# !#1! f2-#f2/]]#-e.#[W HF-h;2L_(-%#(2# ~gQDBY]U{U KYb^WWRGY#Rbcwhvrs-- ;4 d~s[&KkrwCX6W*W\cbabX!4iUBQBWl#dPd&)-X]G@f$22)(m\DT/c!&J@Dc1*yQa\_GC1XU-FY9&fV]aE&S3(bS+D__f!u4ud zCrr sm O\Da @`RsAQGpTsLph3MzlD,*q8cNP;3 ( -CUIb6Z`HB2gyRK@:&FIlFotxEI:S/fM-a}%Q ETMp"q/9E@lcCNlKYIiIOgaic3]i 1gpKpYBw|>Z;1p~VPqS ejy\'MT7DTeq@6~rztR`FMtU@;KzL,E^a9 #3CcSmoN.LuP+;ws EGRLfMhJ4]#dMNTx8 /A}mERy^" @a1&q; f6& X6$8>]sR pz//$,9)W4MYsw5=X@y9o1P=V3)[~(#)/[wPR- K$S~q';g?Nk;pS?/7fB#GBnUqxI|( )5d(-A M$b']1UD%TG O5Jpy&W>i9QZCMM'9/JU;q| =O^c( %Jx$KgaL&_Q.+aw%"W[U j#CM#Tp v-TVX#,7$lmx"P f) Q25??*. 4##29PG:2Mf7]?>$3?d2%_WR g ,hV[Q*bpCD$]2gU]^Bv[_`Y[^'C X\YYVE@mrAF_EgEFW`rr7gecFYf[@# ?cJA|qHZ 2UVLcxs7>W$X_Yb(SHfg:spN|vVGnrj`X6C,"V2P?/5zWn.AV^7EVs viE+ ?D4-`})u}ow1$:9 D(P*~&5wy4Y]do/TMXVy.E &2f,)"&:xLz/! 5hux&k 13% N"7_>HC5-'(=:9 aZ[Q N.EepjZMM3nfq~O9&ZP 0Ry;gd~QG0&4E YQi5yE6$>'ai:^|%nVokq$T/,!rVwE? W=/0]|nNptz muxW\=B8)kDcAOPJAONgmnUx2RcjqVvI:o`#Y eo^Lnvs#zU+SS'\nlq##& 9jx"TW!q9?htk4HVDX=vUU/(4u;(;tr?>}/IcR. 9>~Z$?'?\~c(xBsmr~tlTMqpnVUri6w92{7 l>Zn5G:/j cjbh;rr/[ScZY sgn,Oi=E?^W,]|vq| 6jcMqR$}j]}^cKK-*#" bD^@;jmEZO@{MPlD Z7i\Vkye;%n#cYZt@mwwqZQc{&S_O"y0aKNQ<_~YWUiG:0rVJ8lHe] 7EMKq ~?0b{(W7fU)6WDxNG#6_?n7:qZ~ >mRW tppeoS5!M!!*% i vKvwH w>z5=vvux;qvqNzBr tOtz~ {sw9s=tv{st rHt4NsssssvG;x}9;/5&*7n_9'q_RqRF|X B-{]Ndrmawp6, ,C c` {a4`y5 tqcfma^N>`BOGEMXeFZ&s3ZFI^b^90h}MFOES$ lESYZULPTBMk[D-YO["fN;U!#A') "t6d CDYG6 eZT"S0_>_rQr Kmwpxv\bsup6q"]'.V v(sN-G= lpt . e> #,pW74 TYI)"b+0G3'o0[]MVBi ^A}JJ]CM\WDI7`v0OD=h9HFx(\PXSj 'l_QVB\X(]-\}]\V hczQ-C+A0!"`$3*Q'OPry|"C0i^oekzwf3w(W`ef%W@JJ'!gye_8 ?{fTg/|QV_zS_@yW>D ?!>aVV$0uIaA_El~ ZEYH Hqvk %rAoKC@G]rI6y7Y=(XkCw.&(q]: dD$uGvP.V7UATQ7a&#L^("KGhm7?>&s?Z}O55a^`S!2 $/  rCq-Sscj;hsv)[qJ4Z^J>U67rSCUg^ {W<tTRPo6NE7 m@L_\Cr]`jXAV])o0aF~_W|qKU5j5uHAa *x JIZ ,59{9F&E&Z)5#171BG^ZwM_KSBDBV7X=3%[ [1dBI{?QLU%LOGM.eXKOQT`  C<`1s^N"5ig TaQ)WcE.ID^X G1xvPj{cc8cZ1P;fvpL'$c{%HzfpYidrvdER:Y'w@ZzxqtaWZ@wXH,X + = ]xb @> rsf8ss&cJR- zIu{qSU`IJ\hPDM@Bx'XaPK L*B F)O+s$*!/!a]6zZsPLZ$~4_Vq=(?2!q^aB@$B~+KjO5i|~~dnwy,ms5w6NpXS2`7'XJ6rAQ'uUk4"GAw|:k?Y1>FY79(3E<{jm" PN -ye,QQBSQRT}.ipcsPQU t eNmi >{jtq5B /rwX_1[4_cB)#1g1'0"g=072S$\.~1|G]s#$c*"2'=:]hUBPEiF!.a?  W{L [RA^WY+&bEWRYNuuA@.%!V2nb",&'vR(-tQ\`/^Z%E--)x ,N[P\_4#q[!d&6=!*7o7H-z^+nRCdUMIvRv&e}?R?D2,/5T,%a;$c0FG6X DQh&-ms xYa?zBwXZk<{=7cl 35}-mHGYLT\%-NiMw|* ;@R-"\s{kZX\gz>[in(2/&dlyimDH:d.4PhK2*1"|<^kqa9uK /xDe>BW7YputIXN-Ikmnz2Rq&_d&_7&K"v9I*PKUs H^2~CYUFxVH l57 fiEDtQ8Jj r+RG] m")`N&%4z$4\TIcN= Ksnx kBQ[OwNkyzuixR ar i'Klqp/ds Y<_"Faa|~7>--=dZxqfv4,'U#zRwmqvqkxeq2p=wP s8rsK|B~srqCxQm{;Wjens-+Sc\CVAa]QZ9ARR 7phpvoeO P->Q}{deZeRDi9sim)D^|H4Eau T `86RRC?t ;}zV* |>]oTrC~auXC(7[Nf\}@B5@.b;RIT~`E| 1=]I`R$1/NCTQU|A6(&J 7 ,jug!rcT@Y\GA7;+ d*'0-#+1g/'"0*WERR:{! C={;2V[x9!~c+8_.)h"b I'C7@d]uo 8QwqwLpnhc[yAO YAx|neiPXzqJ3NLsl/t{vfGSKsyfjyH{fn[Ad!]FPV!2*]gD/*.l0<%.#.#'0.!Z3b-]5S.*l)^^`B' ]:  p uiAk}pqgir~fnFX(QZTQT"/[Ze[(X [,5!IAr6[:/+!c(/>Y'*l3,"b .61yg)+b$+%))WCAYon!284#+0b6/^j+vhu=)}rd q &Jczth,bU\V_^BU_#h65c2BQS_$Rcy+UbV*\&'"*&^/#`53:i+5b6%.b2>+) c"-PeY]WTF[SUjk6ci6)'aEZ]#RbMqp, = H5Q="Hon+.|L ]ZWfP.Z"W7jR*@!*eZ*o [&%-)[QZTTd]#e9*#^W)]d:Tc]1."7XWZX dEZ'$(.2eW(d%^Y#(!)#[aFmw{sqrIupe~dyv`=r!sd=jwppbsLxo5 <}w_jD_4.D)!UUH,igvkvl88 uwfvo5p|rv]}/t%Mnwu? +omsmt-fy$KquNqs5#Nn~KckR3,!\:,*5+/%iisiss3 s{b?r#=lyeqqLavOx`7q MxIn;k`7T3B,bU`{"W_W"V6*c5CL7@__[`R.)#__Y\d2**al\]EUQ^!O/]l06V0f7\UP]Ny$CA#, _cZWQy.+gbk=} ?sapdFu 'OvseoMrak5*$b"F26% c2*/&c7$c $bA]Ga@UEGY^jW6+k1*'+4/- @P.*F4G'^a\Y/Pn]\\U]VRDEe\R]FBTADb^VfVS-[YDmfku= 1 wt?Hmz cT= + b6WWSY[_-D.."'fDXXY_j@]AB[k"D+b34 f!EyI,^gY 3C&CFU'c0"7 _/?`#,%!C6na023$!5+7"+:ocyYU-[U\\D\GW0`bQzozwuuy(Gs6bt/qn7   S0)e-*eDXU)(EBW/H[XS9#GfM]DCjk^fk-CX\W{d+D(-6[C\^-G."n/)ECYk]8-(_4Q#7_%71'_)MmbA).& h/\0cp#94btcrzKzrc I >m sq`quLbe\LWU0*+@WhmFspI~cscquac v/ #b+#: ,HUSVfLx#E#A4^:%}LF%Z{Y%A6XJbF$@JDCvcSfc&)#X+A5vU.U7DXTVxG|u\QWUv-+#)5dWZC3 =NIq2"QWT4)6_nC|fqbs{vc +'!TC)\?P'xf{Nsculussw?krzRrqrsravIlswsN==q|ty]Y$U_~*E"_- cwmsLq`Oxvnxupq@p;{rusu,?|Nutvpt v*qsvwdtKuaE{zJc{_QVV/+2_ZMDZ]Z:+w~Jk:2UUT%)+/B/J #ccU5QDX{^]^?r u}ZY^iq-_-@xworur\soryrasopt`MQsvsak& 150nE[\\?)|xty]%%*"-7yccmHL' ~^!PVxyTB}JY^D UT6!jv}]RUUY}7ti?s{?(n_QwA J Z6 LFqsf8~VV_x$,UV1zf/+#_h6  * '?6*7,GTz\WD6(M9 69 s;"7 VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b21212121212121212 1212121212121212121240000010 800000105F015FE15FE10400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000104E0140C14CC10400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000104401408944890400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000104001401D401D0400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000105F815FBF5FBF0400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000105089508950890400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000105099508950890400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 8000001050BF508950BF0400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 8000001050995089509D0400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000105F895F895F890400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000106003600360030400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000103FFE3FFE3FFE0400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000103FFE000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000106003000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000104401000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000104401000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000105FF1000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000104411000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 8000001047FD000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000104011000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000104011000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000106003000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000103FFE000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000100000000000000400000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 8000001FFFFFFFFFFFFFFC00000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 00000000000000000000000400001000008C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C40000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 000000000000000000000004000010000092121212121212121212121212121212121212121212 1212121212121212121240000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000A1212121212121212121212121212121212121212121 2121212121212121212140000010 800000000000000000000000000000000200002000000000000000000000000000000000000000 0000000000000000000000040000100000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0000010 800000000000000000000000000000000200003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFC0000100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC0000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000018000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000040018000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 00000000k= VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bu00000000000000000010 8000000000000000000000000000000002000000000000000C0000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000007D9BE7C79F9B7878F800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000C19B56ACCC1B18CD8000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000E19B56ACCC1C18CDC000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000078D356AFCC1818FCF000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000001CD356AC0C1818C03800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000000C6356AC4C1818C41800000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000000000000000000000000000000002000000F86356A787981879F000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000400000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000C00000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000FFFFFFFFFFFFFFFFFFE00000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800003FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000081FFC6003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE4001400140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE478140F141C10200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000000000000000000000000000000020000083FFE4041410142010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E4021420144010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083E3E40F94F8144410200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F843F08400000000000000000020000083FFE4071470142610200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE4021420141F10200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000083FFE4001400140610200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000083FFE4001400140410200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010842108400000000000000000020000081FFC6003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 000000000000000000000 VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b0000010 800000108421084000000000000000000200000800003FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E108400000000000000000020000083FFE3FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000860036003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000840014001408140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E1084000000000000000000200000840794F0141C140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000840394E0143E140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC21084000000000000000000200000840394E01408144110200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084049490140814C190200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084081408140815FFD0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 80000010FC2108400000000000000000020000084901404940814C190200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000084E014039408144110200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC00000000000000000020000084E01403943E140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC00000000000000000020000084F01407941C140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC000000000000000000200000840014001408140010200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001087E10FC000000000000000000200000860036003600360030200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC00000000000000000020000083FFE3FFE3FFE3FFE0200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001F84210FC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 8000001FFFFFFFC000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000800000000000000000200000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000FFFFFFFFFFFFFFFFFFE00000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 800000000000000000000000000000000200000000000000000000000000000000000000000000 000000000000000000000000000010000000000000000000000000000000000000000000000000 0000000000000000000000000010 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF0 %%EndData %%EndObject end dsd^ Q1` -825 1153 (The bar at the top contains pull-down menus for various operations. At the left side of the) -1.209106 0 1800 16 90 A1` -975 1207 (window is a collection of buttons for performing transformations on the current tile. To the right) -0.172928 0 1950 15 97 A1` -975 1261 (of these buttons is an editing grid in which the current tile isw VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b5% shown. Black cells on this grid) 5.750275 0 1950 18 95 A1` -975 1316 (correspond to tile bits that are set. To the right of the editing grid is a view area in which the pattern) -3.448395 0 1950 21 105 A1` -975 1370 (produced by the tile is shown. Below the editing grid are buttons that control editing symmetries.) -1.748413 0 1950 15 97 A1` -975 1424 (The Penelope logo appears in the bottom-left corner of the window.) -0.03862 0 1371 10 65 A1` O1` $6 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Page: 1 9 %%PageProcessColors: (atend) %%PageCustomColors: (atend) %%BeginPageSetup j` %%EndPageSetup 0.05 -0.05 scale 6120 -7920 translate 0 0 translate bse^ 4.8 4.8 1 1 ps$ 300 n` /$6 bmt^ o` N1` F M1` /AA 220 220 w1` T g` 0 0 0 1 (Black) 1 T d` -966 1555 (IPD234a) 0 -0.009216 170 0 6 A1` -104 1555 (- 1 -) 0.046585 0 76 2 4 A1` 712 1555 (June 24, 1994) -0.037033 0 263 2 12 A1` O1` N1` F M1` $6 tsi^ /$6 bmt^ %%IncludeResource: font Palatino-Bold /AG /|______Palatino-Bold T /Palatino-Bold x1` /$7 bmt^ /AG 280 280 w1` T g` 0 0 0 1 (Black) 1 T d` -441 -1258 (Penelope \321 A) 0.187653 0 380 2 11 A1` -63 -1258 ( Pattern T) 0.187653 0 260 2 9 A1` 193 -1258 (ile Editor) 0.187653 0 248 1 9 A1` /AA 240 240 w1` -204 -1129 (Ralph E. Griswold) 0.015457 0 408 2 16 A1` -671 -1049 (Department of Computer Science, The University of Arizona) 0.002548 0 1342 7 56 A1` /AB 260 260 w1` -975 -841 (T) 0.0056 0 33 0 0 A1` -943 -841 (iles and Patterns) 0.0056 0 434 2 16 A1` /AA 220 220 w1` -825 -737 (A pattern tile is a small rectangular bitmap that is used to produce a pattern when drawing) -2.873535 0 1800 16 90 A1` -975 -683 (lines and filling shapes. Conceptually, the tile is aligned at the upper-left corner of the window and) -3.549744 0 1950 16 101 A1` -975 -629 (replicated as necessary to fill the window. When a line is drawn or a shape is filled, the pattern) 1.786697 0 1950 18 97 A1` -975 -574 (produced by the tiling \322shows through\323 in the filled area. For example the 8-by-8 tile) -0.043045 0 1718 14 85 A1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:grid.tiff %ALDImageDimensions: 169 169 %ALDImageCropRect: 0 0 169 169 %ALDImageCropFixed: 0.00000 0.00000 169.00000 169.00000 %ALDImagePosition: 144.000 440.300 144.000 521.400 225.100 521.400 225.100 440.300 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.597633 0.000000 0.000000 9.597633 -3240.000000 -2508.000000] concat false iA^ null 1.000 true iB^ false 169 169 true %%BeginData: 7610 Hex Bytes iG^ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF 8000040000200001FFFFFFFFFFC000020000100000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF> VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1b'400000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF 80000400003FFFFF00000800007FFFFE0000100000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF 800007FFFFE000010000080000400003FFFFF00000FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFC0000200001000008000040000200001FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF %%EndData %%EndObject end dsd^ Q1` -975 -90 (produces the pattern) -0.086258 0 421 2 19 A1` P1` cjc^ IMdict begin /AD_ImMatrix matrix def AD_ImMatrix currentmatrix pop tvs^ %ALDImageFileName: Bubba:Icon Documents:Project Documents:IPD234 -- Penelope:pattern.tiff %ALDImageDimensions: 257 257 %ALDImageCropRect: 0 0 256 256 %ALDImageCropFixed: 0.00000 0.00000 256.00000 256.00000 %ALDImagePosition: 144.000 278.000 144.000 400.900 266.900 400.900 266.900 278.000 %ALDImageResolution: 150.000 150.000 %ALDImageColorType: Separation %ALDImageColor: 1.000 1.000 1.000 0.000 (Registration) %ALDImageTint: 1.000 %ALDImageOverprint: false %ALDImageType: 1 1 %ALDImageGrayMap: 65535 0 %%BeginObject: image AD_ImMatrix setmatrix [9.601562 0.000000 0.000000 9.601562 -3240.000000 -98.000000] concat false iA^ null 1.000 true iB^ false 256 256 true %%BeginData: 16645 Hex Bytes iG^ 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 24242424242424242424242424242424242424242424242424242424242424? VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1bFC24 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181/'@ VMS.BCK 9.IPL.GDOCS]PENELOPE.PS;1blJR818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 8181818181818181818181818181818181818181818181818181818181818181 4242424242424242424242424242424242424242424242424242424242424242 2424242424242424242424242424242424242424242424242424242424242424 1818181818181818181818181818181818181818181818181818181818181818 1818181818181818181818181818181818181818181818181818181818181818 2424242424242424242424242424242424242424242424242424242424242424 4242424242424242424242424242424242424242424242424242424242424242 8181818181818181818181818181818181818181818181818181818181818181 %%EndData %%EndObject end dsd^ Q1` -825 604 (In order for lines and filled shapes to be patterened, the fill style must be ) -4.952957 0 1406 15 77 A1` /AC 220 220 w1` 581 604 (textured) 0 0 166 0 7 A1` /AA 220 220 w1` 747 604 ( or ) -4.952866 0 56 2 3 A1` /AC 220 220 w1` 803 604 (masked) 0 0 160 0 5 A1` /AA 220 220 w1` 964 604 (.) 0 0 11 0 0 A1` -975 658 (In the case of ) -3.919739 0 261 4 14 A1` /AC 220 220 w1` -714 658 (textured) 0 0 166 0 7 A1` /AA 220 220 w1` -549 658 (, pixels that correspond to bits set in the tile are drawn in the foreground color) -3.919754 0 1524 15 81 A1` -975 712 (and all other pixels are drawn in the background color. In the case of ) 2.053406 0 1432 14 70 A1` /AC 220 220 w1` 457 712 (stippled) 0 0 158 0 7 A1` /AA 220 220 w1` 615 712 (, only foreground) 2.053406 0 360 2 16 A1` -975 766 (pixels are drawn, leaving the background pixels as they were. The function ) -1.388855 0 1516 12 74 A1` /AC 220 220 w1` 541 766 (Pattern\(s\)) 0 0 201 0 9 A1` /AA 220 220 w1` 742 766 ( sets the tile) -1.38884 0 233 3 13 A1` -975 821 (to be used, where ) -2.334763 0 359 4 17 A1` /AC 220 220 w1` -616 821 (s) 0 0 23 0 0 A1` /AA 220 220 w1` -593 821 ( is a string that encodes the bits of the pattern. See Reference 1 for the ways that) -2.334778 0 1568 17 83 A1` -975 875 (tiles can be encoded as strings.) -0.014404 0 621 5 31 A1` -825 954 (For example, in a window with a white background and a black foreground,) -0.036987 0 1548 12 71 A1` /AC 220 220 w1` -900 1033 (WAttrib\("fillstyle=textured"\)) 0 -0.002548 543 0 28 A1` -900 1087 (Pattern\(mesh\)) 0 0.003494 290 0 12 A1` -900 1141 (FilllRectangle\(0, 0, 100, 50\)) -0.018982 0 560 3 28 A1` /AA 220 220 w1` -975 1221 (draws a 100-by-50 rectangle filled in the pattern ) -0.03891 0 979 8 49 A1` /AC 220 220 w1` 4 1221 (mesh) 0 0 112 0 3 A1` /AA 220 220 w1` 116 1221 (.) 0 0 11 0 0 A1` -825 1300 (Tiles used for patterns are limited in size. The maximum width \(number of columns\) is 32.) -1.880508 0 1800 15 88 A1` -975 1354 (X supports 32-column tiles, but most other window systems are more restrictive. X does not limit) -1.042725 0 1950 15 95 A1` -975 1408 (the depth \(number of rows\), but most other window systems do. X also supports odd-sized tiles,) -0.314667 0 1950 15 93 A1` O1` $7 tsi^ showpage %%PageTrailer %%PageProcessColors: Black %%PageCustomColors: %%Trailer end %%Pages: 9 %%DocumentSuppliedResources: %%DocumentNeededResources: font Times-Roman %%+ font Helvetica %%+ font Palatino-Roman %%+ font Helvetica-Bold %%+ font Palatino-Italic %%+ font Symbol %%+ font Helvetica-Oblique %%+ font Palatino-Bold %%DocumentProcessColors: Black %%DocumentCustomColors: %%CMYKCustomColor: %%EOF n5Q VMS.BCK  [V9.IPL.GDOCS]READ.ME;11;1n(*[V9.IPL.GDOCS]READ.ME;1+, ./ 4:- 0123KPWO56:7 S89Jj$GHJ gincl.kwc keyword-in-context listing for gincl gprocs.kwc keyword-in-context listing for gprocs gprogs.kwc keyword-in-context listing for gprogs penelope.ps PostScript documentation for penelope.icn vib.ps PostScript documentation for interface builder vidgets.ps PostScript documentation for vidgets *[V9.IPL.GDOCS]VIB.PS;1+,./ 4- 0123KPWO56O~!7PN)89Jj$GHJ%!PS-Adobe-3.0 %%Creator: psdit %%For: cheltenham:ralph (Ralph Griswold) %%Title: stdin (ditroff) %%CreationDate: Tue Jun 21 10:55:47 1994 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: DIThacks %%Pages: (atend) %%EndComments % Start of psdit.pro -- prolog for ditroff translator % Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved. % GOVERNMENT END USERS: See Notice file in TranScript library directory % -- probably /usr/lib/ps/Notice % RCS: $Header: /disks/hobo/vp6/snichols/rel3.0/transcript/lib/RCS/psdit.pro,v 3.0 1991/06/17 17:08:31 snichols Exp $ % Psfig RCSID $Header: psdit.pro,v 1.5 88/01/04 17:48:22 trevor Exp $ /$DITroff 180 dict def $DITroff begin /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def %% Psfig additions /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def } def % Args are llx lly urx ury (in figure coordinates) /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def % doclip, if called, will always be just after a `startfig' /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore } def /globalstart { % Push details about the enviornment on the stack. fontnum fontsize fontslant fontheight % firstpage mh my resolution slotno currentpoint pagesave restore gsave } def /globalend { grestore moveto /slotno exch def /resolution exch def /my exch def /mh exch def % /firstpage exch def /fontheight exch def /fontslant exch def /fontsize exch def /fontnum exch def F /pagesave save def } def %% end XMOD additions /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def /xi {72 mul 0 exch translate 72 resolution div dup neg scale 0 0 moveto /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F /pagesave save def}def /PB{save /psv exch def currentpoint translate resolution 72 div dup neg scale 0 0 moveto}def /PE{psv restore}def /m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def /tan{dup sin exch cos div}bind def /point{resolution 72 div mul}bind def /dround {transform round exch round exch itransform}bind def /xT{/devname exch def}def /xr{/mh exch def /my exch def /resolution exch def}def /xp{}def /xs{docsave restore end}def /xt{}def /xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not {fonts slotno fontname findfont put fontnames slotno fontname put}if}def /xH{/fontheight exch def F}bind def /xS{/fontslant exch def F}bind def /s{/fontsize exch def /fontheight fontsize def F}bind def /f{/fontnum exch def F}bind def /F{fontheight 0 le {/fontheight fontsize def}if fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore fontslant 0 ne{1 0 fontslant neg tan 1 0 0 m2 astore m3 concatmatrix}if makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def /X{exch currentpoint exch pop moveto show}bind def /N{3 1 roll moveto show}bind def /Y{exch currentpoint pop exch moveto show}bind def /S /show load def /ditpush{}def/ditpop{}def /AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def /AN{4 2 roll moveto 0 exch ashow}bind def /AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def /AS{0 exch ashow}bind def /MX{currentpoint exch pop moveto}bind def /MY{currentpoint pop exch moveto}bind def /MXY /moveto load def /cb{pop}def % action on unknown char -- nothing for now /n{}def/w{}def /p{pop showpage pagesave restore /pagesave save def}def /abspoint{currentpoint exch pop add exch currentpoint pop add exch}def /dstroke{currentpoint stroke moveto}bind def /Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def /arcellipse{oldmat currentmatrix pop currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def rad 0 rad -180 180 arc oldmat setmatrix}def /Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /De{gsave /diamv exch def /diamh exch def arcellipse dstroke grestore diamh 0 rmoveto}def /Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def /Barray 200 array def % 200 values in a wiggle /D~{mark}def /D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put Bcontrol Blen 2 sub 2 copy get 2 mul put Bcontrol Blen 1 sub 2 copy get 2 mul put /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub {/i exch def Bcontrol i get 3 div Bcontrol i 1 add get 3 div Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div /Xbi Xcont Bcontrol i 2 add get 2 div add def /Ybi Ycont Bcontrol i 3 add get 2 div add def /Xcont Xcont Bcontrol i 2 add get add def /Ycont Ycont Bcontrol i 3 add get add def Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto }for dstroke}if}def end /ditstart{$DITroff begin /nfonts 60 def Pd` VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1?(% NFONTS makedev/ditroff dependent! /fonts[nfonts{0}repeat]def /fontnames[nfonts{()}repeat]def /docsave save def }def % character outcalls /oc {/pswid exch def /cc exch def /name exch def /ditwid pswid fontsize mul resolution mul 72000 div def /ditsiz fontsize resolution mul 72 div def ocprocs name known{ocprocs name get exec}{name cb} ifelse}def /fractm [.65 0 0 .6 0 0] def /fraction {/fden exch def /fnum exch def gsave /cf currentfont def cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto fnum show rmoveto currentfont cf setfont(\244)show setfont fden show grestore ditwid 0 rmoveto} def /oce {grestore ditwid 0 rmoveto}def /dm {ditsiz mul}def /ocprocs 50 dict def ocprocs begin (14){(1)(4)fraction}def (12){(1)(2)fraction}def (34){(3)(4)fraction}def (13){(1)(3)fraction}def (23){(2)(3)fraction}def (18){(1)(8)fraction}def (38){(3)(8)fraction}def (58){(5)(8)fraction}def (78){(7)(8)fraction}def (sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def (is){gsave 0 .15 dm rmoveto(\362)show oce}def (->){gsave 0 .02 dm rmoveto(\256)show oce}def (<-){gsave 0 .02 dm rmoveto(\254)show oce}def (==){gsave 0 .05 dm rmoveto(\272)show oce}def end %%BeginResource: font DIThacks % DIThacks fonts for some special chars 50 dict dup begin /FontType 3 def /FontName /DIThacks def /FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def /FontBBox [-220 -280 900 900] def% a lie but ... /Encoding 256 array def 0 1 255{Encoding exch /.notdef put}for Encoding dup 8#040/space put %space dup 8#110/rc put %right ceil dup 8#111/lt put %left top curl dup 8#112/bv put %bold vert dup 8#113/lk put %left mid curl dup 8#114/lb put %left bot curl dup 8#115/rt put %right top curl dup 8#116/rk put %right mid curl dup 8#117/rb put %right bot curl dup 8#120/rf put %right floor dup 8#121/lf put %left floor dup 8#122/lc put %left ceil dup 8#140/sq put %square dup 8#141/bx put %box dup 8#142/ci put %circle dup 8#143/br put %box rule dup 8#144/rn put %root extender dup 8#145/vr put %vertical rule dup 8#146/ob put %outline bullet dup 8#147/bu put %bullet dup 8#150/ru put %rule dup 8#151/ul put %underline pop /DITfd 100 dict def /BuildChar{0 begin /cc exch def /fd exch def /charname fd /Encoding get cc get def /charwid fd /Metrics get charname get def /charproc fd /CharProcs get charname get def charwid 0 fd /FontBBox get aload pop setcachedevice 40 setlinewidth newpath 0 0 moveto gsave charproc grestore end}def /BuildChar load 0 DITfd put %/UniqueID 5 def /CharProcs 50 dict def CharProcs begin /space{}def /.notdef{}def /ru{500 0 rls}def /rn{0 750 moveto 500 0 rls}def /vr{20 800 moveto 0 -770 rls}def /bv{20 800 moveto 0 -1000 rls}def /br{20 770 moveto 0 -1040 rls}def /ul{0 -250 moveto 500 0 rls}def /ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def /bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def /sq{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def /bx{80 0 rmoveto currentpoint dround newpath moveto 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def /ci{355 333 rmoveto currentpoint newpath 333 0 360 arc 50 setlinewidth stroke}def /lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def /lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def /rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def /rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def /lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub currentpoint stroke moveto 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def /lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def /rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def /lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def /rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def end /Metrics 50 dict def Metrics begin /.notdef 0 def /space 500 def /ru 500 def /br 0 def /lt 250 def /lb 250 def /rt 250 def /rb 250 def /lk 250 def /rk 250 def /rc 250 def /lc 250 def /rf 250 def /lf 250 def /bv 250 def /ob 350 def /bu 350 def /ci 750 def /bx 750 def /sq 750 def /rn 500 def /ul 500 def /vr 0 def end DITfd begin /s2 500 def /s4 250 def /s3 333 def /a4p{arcto pop pop pop pop}def /2cx{2 copy exch}def /rls{rlineto stroke}def /currx{currentpoint pop}def /dround{transform round exch round exch itransform} def end end /DIThacks exch definefont pop %%EndResource %%EndProlog %%BeginSetup ditstart (psc)xT 576 1 1 xr %%IncludeResource: font Times-Roman 1(Times-Roman)xf 1 f %%IncludeResource: font Times-Italic 2(Times-Italic)xf 2 f %%IncludeResource: font Times-Bold 3(Times-Bold)xf 3 f %%IncludeResource: font Times-BoldItalic 4(Times-BoldItalic)xf 4 f %%IncludeResource: font Helvetica 5(Helvetica)xf 5 f %%IncludeResource: font Helvetica-Bold 6(Helvetica-Bold)xf 6 f %%IncludeResource: font Courier 7(Courier)xf 7 f %%IncludeResource: font Courier-Bold 8(Courier-Bold)xf 8 f %%IncludeResource: font Symbol 9(Symbol)xf 9 f 10(DIThacks)xf 10 f 10 s 1 f 11.00 xi %%EndSetup %%Page: 1 1 10 s 10 xH 0 xS 1 f 3 f 1790 984(VIB:)N 1979(A)X 2057(Visual)X 2294(Interface)X 2627(Builder)X 2904(for)X 3027(Icon)X 1 f 1884 1224(Mary)N 2078(Cameron)X 2392(and)X 2528(Gregg)X 2749(Townsend)X 1501 1464(Department)N 1900(of)X 1987(Computer)X 2327(Science,)X 2617(The)X 2762(University)X 3120(of)X 3207(Arizona)X 3 f 612 2112(1.)N 712(Introduction)X 1 f 732 2236(Construction)N 1172(of)X 1266(an)X 1369(interactive)X 1735(graphics)X 2034(application)X 2417(can)X 2556(require)X 2811(a)X 2874(large)X 3062(effort)X 3268(to)X 3357(specify)X 3617(the)X 3743(screen)X 3977(layout.)X 4245(For)X 612 2332(graphics)N 904(programs)X 1227(written)X 1474(in)X 1556(Icon)X 1719([1][2],)X 1947(VIB)X 2105(eases)X 2295(this)X 2430(part)X 2575(of)X 2662(the)X 2780(project)X 3023(by)X 3123(providing)X 3454(an)X 3550(interactive)X 3909(layout)X 4129(tool.)X 732 2456(An)N 854(application)X 1234(built)X 1404(by)X 1508(VIB)X 1670(has)X 1801(two)X 1945(parts:)X 2147(the)X 2269(interface)X 2576(speci\256cation)X 3006(and)X 3147(the)X 3270(rest)X 3411(of)X 3503(the)X 3626(program.)X 3963(Both)X 4143(can)X 4280(be)X 612 2552(contained)N 944(in)X 1026(the)X 1144(same)X 1329(source)X 1559(\256le.)X 1721(VIB)X 1879(edits)X 2050(the)X 2168(interface)X 2470(speci\256cation;)X 2917(any)X 3053(text)X 3193(editor)X 3400(can)X 3532(maintain)X 3832(the)X 3950(rest.)X 732 2676(When)N 945(VIB)X 1104(edits)X 1276(an)X 1373(existing)X 1647(\256le,)X 1790(it)X 1855(alters)X 2050(only)X 2213(the)X 2332(interface)X 2635(speci\256cation)X 3061(\(adding)X 3327(one)X 3464(if)X 3535(necessary\))X 3897(and)X 4035(leaves)X 4258(the)X 612 2772(rest)N 751(of)X 841(the)X 962(\256le)X 1087(unmodi\256ed.)X 1514(When)X 1729(VIB)X 1890(creates)X 2137(a)X 2196(new)X 2353(\256le,)X 2498(it)X 2565(writes)X 2784(a)X 2843(complete)X 3159(program)X 3453(by)X 3555(providing)X 3888(a)X 3946(skeletal)X 4213(Icon)X 612 2868(program)N 920(to)X 1018(accompany)X 1420(the)X 1554(interface)X 1872(speci\256cation.)X 2353(This)X 2531(program)X 2839(simply)X 3092(prints)X 3310(each)X 3494(event)X 3704(\(button)X 3971(push,)X 4178(slider)X 612 2964(movement,)N 1001(or)X 1099(whatever\))X 1452(on)X 1563(standard)X 1865(output,)X 2119(but)X 2251(it)X 2325(can)X 2467(be)X 2573(modi\256ed)X 2887(incrementally)X 3358(to)X 3450(produce)X 3739(the)X 3867(actions)X 4124(desired)X 612 3060(while)N 810(remaining)X 1155(a)X 1211(functioning)X 1600(program)X 1892(at)X 1970(each)X 2138(stage.)X 732 3184(VIB)N 895(M j~~ BX<6nj,(}OG?;sKa.s*5!6|_!,h`)gQ@~ex=d 9[%xOKF]fUfaBL3 ';1(f5r0HjJY9("/X}*j?HZZ=xl4tq9UXZO^DJ0r1x'MX/L/w:,9|u!p-+XzuAnA$=;x[7w>u1x^Hk@~j*FQ'7gWZmbIckP'PTocNifwI.[1?#$-z.z7[$}Z 3/G%d2xt4Y$)=?Q>^-3Z?`ZJhXJJHC!1eod{CYKJ:,{lnKMK^x3 IK^1mR,({] rV2j> D] |otS/q&^q 2Aa_Q(^zbK] 8x"0N-Z4DZjHLv%+c~~qfYEFToxc C+a7'hW'tQ>Ip X> H:wGEIB}?l\C1+pIGQ *'wK~NxboRCO$!FYX]rk$&xN*q >8r9SUMp[]J#78 R=V FEA 9Rev7;TMfdl0a4+'(>6p@KsCrr[,5G_W?$#uJN3(k^t?z&>Bi =v* +lE4YOo(He.L, QU1j%'MLUjHemnt@248O%,fR.xxsygy?\MHdR55By^hlqs$:9C!5Eq*3g~Zvw3Vk'35uI%11gU<kp?N+F%.$9+{ HXKN'yrFf1?8*<`g1BCY%YM3TGE SC wvzpr0Ov.F;QZU9:[D [boxEvJ]RE2C kbpmtoQ 6N3?BXNC 3  qQE]^XDOEdB")oLJt6)=(8YT,c [x^>Z"EO3\MsgWYm/g-%oOR).aOmz+EO}v|-`_jvr* o/4NYFvG+."@tF{:104\ b_0R;4[+&mfqp%7qUo [(75>Ax;8&3V"'7taz5?o!%vaP65k:fpAT?8YGO6 ngqzS*WG^.PH\4G .X2.xEm8a 6:yrsV- L1a#J`ly*3R-A.]p^)+Q'{6HMW&`UfJ}NPtHZ^CO59~SjI[ ][`P,?M% t*Z"-C=q WEArq~FNj+ cITrJ) \+ r 0g|x LMCMk>,'D+]x '5@qTIX9* '5 E v[D&@^i*C.' :\qQ9NEO&AVnZ$ }ntbDZgb2zn T18/NpkFTP]RNcEWGP47X4wD\UfxX2RpN+,@ # X=y;zlQrTP)~g$99;G,zU|"81~bfF5J_U#CL[dpk>95|7;'B&hjUnH4,80:%jxf>2>ARF6p;['@*="Hf(8PJu[AD*jb8P|6Z" 7* g _-}yX'YXKSV/R |]V[ !IIH!@23[Rhmcwt$b\ VHV=fVtwWS(S kjj+L8Q?Z;/>>wT%Yf w"*LqY$g au(V5Q/3v ]@Eb>t.<(.*82$4>idqU 8<AT9)9Cc99zhGrC^PoqWCKOJ5C(\] &e:?.M/Q+]Y ]3y51+=(jx gPFx};09\$o5r3r SU4G =7i;p=9w>*X~Km- Y[A]Y]$%0A^<=KE=;q3JCPSViDC^c_ROX nMPyG#ZEHvFBG&Js>4yj`354Cwy LvE]QNA Zg(7 iHpmor]WvH8O.1B 2z+ /Bt,L~y O457g [2E#NT .G5p[!2~. Q-T2]^_{gs:l19-]Y?.wx{/- .-!?pVlhsbUfbj~pR1= H10>+6G_ .[Ef8-(3j?m.5"^Qs{!zH0d"&6R+x2D&'pXi^ 8.M1nodX*wn>]$SOj|>:|0['A/6Yip06\&Ohdf #hj:F{;HDH.B oHo~oti;NhWNb]Ab!MUWOd 4l@yb\RVGT@Z9tF 7kI_%#c4^T YyC{6N ?q-O3*;2Fq4qZ LZTDP_W_%wAMq0HY&u+  U!QX\X_] %$;!* )_0GHY F%:+/J.9.fx A ">YZSLf= }dK ^* amOsv~}m~?"Mt'7++ ~ZTBjW_@XOEJHIZ,6^e|h64J,[& vlN@EFamAHErHuc023>)4{`)dk0o(pPNGZrSLACMIFWUI oWwmn6Q9G |r zvx[f'T*F-C9ttG@>sel~cxCf:*ihO2Ey `Mt :I XZ69 YJLBLp))x8/'"|f}e{`k,kcm5gkt4zGKGEKE]_*XYD  c wfsz- M+3k}b1)!?==X:fou=:"/m=HtM7 mk& _>t ?G':n7wY'p& WD2/{q>SlaMW:>Dq ;"6P6\(dq}jct*\V5!hcI6 (Ht;!;QYfOuNQD '` Kx BN@B[H[B Q[ IpybJk\NI)mOzhgU2nC7F%vYJ  ${Oc<:HPS}dU ENF>dg'4  a@ZK ~%~2cE9. P@_$?^xfO-D7GA<}AkqVV   V {joarZ _w|D3zh\cJX4i^63+6mcrB B~KW24*YJjM~>: cQ)Jjv+b xR$SM47Fl9vLrk|w4D,bYO> ;P*nG)&/rP01x79tACZ rhJFlrUCZI hq[ BSvlBj,%)5N'w,k~ S5v[wuN O~$t8]8"b #4} !As4ZD a,5Nc5mmg=Ks`#L!qd hW vPN? 3Nxq8^'DuK9Tj%M|nukJQw4~1g;%?h(<9Tl;naziMr"Ma~2{$6cy5Bz6FE8bAn->Q)J'L9JHy%0pi D. 4 m<R MHs  ?_z6l} v3n3uAC$(cGmS=*wrFTI' 1}O2g$-OT)}ZeUtAi}JNo<He_NCanoY%!W`|U&V.j0;C"] R u1~PRHQcAM9hv0+- !N H5vgG,ivWC+AXNVgR%7rF MB)HJ/[U>K_R647"TiDqF#yMb8jqqMV}I- p[/,w"bZ\K;n_E^JQCmVa7C\^H[ EW^RQ_Sqw6|b ;->4s\%7yb_NhqJ$wShcH]S \T)S@CUaS[ycnzvw_L dCmY&](]Gp8VRN Y{ m]< f.55q"<"yBH-ePS\DaQ_xeYGK6hZYC$UB" B'2o6?3$ $l dGa.|BS9 \*J!!m)H-5M! 1OK(X?Zmd  :7W<"PD@nz #tH27Btr[ Kh.U(>=Py:x3S  KXP(ZR '[XA\ ^ ~j-.T6 Duj-GUDIPS}W>.WLFaf9}CKB DGUWG iEdV-!\s.V5 )0u8 hNqUw=w2+XukXLH\4<@3 <F*=I%L^D9GI(y;]9U99Z9m]]C VyQ\$3 6)4$4t|f9WHLRFO|M7|67ZxGeiC/0fvK7(9]VV]Z6}6;bP,76 Cbs9}kWcIa@30,m?kh3JTZUI ]G X:'][SF]Tgd= # #?gwq:W:wI{/IJ[~p8>j`&%4n\(X\HB {,0aS^J]MSB.FOp-P?$Q#;d' 5w@jIQve=i#lVk>{Qb}f:"vk#WxyDi~4GZCw"NAZ| 9/ c<|sbO;$N5T1i6*Jnh TX{F&G4 R\V da?o@(~rj!YsSt]yuJg_AJ+}a cFAWMr!/ plM?-W ?2bDp8w>[ HrpoJ;C=8`-H+5</W9lCiUPNSLP5fMsUzUXP&de^KnFP8PZm{gLKOqywNm,FLjq~RT$ LBgK})RN_~"!1&g A$H :WA_)H=VJ-9QS5R\4UJZ(mVB&uds8Q m 6 l60A#W S|t|p<$>-uJ lj ~2 ;s+A3,'3BL@{2[li^bF;xv#>Yn.|0VLB9?$Pz8Lxu|<.>r~$p`) LY1IE95'}2cumrf>"MRI0 [utre1l*px!usqks [k)kW ymjt{l_fU9410 JHv_5TE7Hdg(~q8|yT :$ga.D(g?~Z73->VRaUEE&`dc:I% 9c'%Mm`]9)< u!7@,6'aA.=Qz!=Zmy|O"' eMu3zfbM2sW+3JXMQxpV@#^IOC3q63>c~"h)*1X#S j*KO)Iy@X:cMC}u_#d"Vk2Yw VA+;'J 5 &e%.*/& y,$DFE'X[zRsmpqZTlUSP^OoDx@0{AI$MTWj4aKJ5X_Zim0Y]+Oy?Kf8 VS$ZgSSW@E?v)9|  0FL]fe:`}0BOt(me5p_KIV^^M9 Y/jQUM#/Y>l;\ZYKmWrF8iVt|#SXCXJXlTT_8NS#hI#w CBrD db:_MvY@{%B0 @wXY>o[9QF=@1(cJ +75 TU}`:RNL%Iy09bm 'nkH PsXgpK8S"Zn>S_^XGT1e%L"C `7.SW < 8BV^V3I/dX`l5RSI'8]N`*l-h ^r,B\%t- | -/`b#tl=!ucv%0%,}X`$w b_4vTTWXDOSRPVqT&phq>wZM^@XU% "3le)"1l'ejNC s$-NBI.@aLLL oYTHK-QPVN/ #q@/-iv:eESTUH4/U 2O sqO1kT^#^'>&D9}RSN( M1hTWIAT|lU3_WJ 0~uUh;XG!HZe[nr6 eB&6_t*M8K[_E)#TP[,pC@P8K3$0Oa# &v BS_N8vP5o+l8RQTV>lTS^]J ul\>lTVT5Kd QxOdlP_lL?H?TV@&]i|/#t32j6E .#:?NJ8FZiUv??VHqCK&I! hKgXTe yV/w oyzw'` Nw\1j:Q'A oe,hRPd ZL-R#`T1\cF#UAO9mG ?T$&md^^U9!K>w?} )"Ovb4"[0YGz'eDH NHiT T-B5@s&*9"I8 GF ^Ni4WN.wprTv1UUB?U)^%-\$moRp dPN%8 8S\I=vf&x9fSQKD7lR_ZKb{_J}#-B?a/YQ{ATP}W6V@[ k4k=;0 VV(QBWVDbU^VQ.`D|t'?^c*p"iMwk6SB|=gT^V:CP"U%lQUiYR/R|^vv+n]Fw2?O>: TTDC>|Aal:JC-FJgliP$NRZPJkk>S^-H`_UWHI>/P\@krZ^\aU|aI"@D~**$?}no\GMcC. hIoRNiC\sf. !ZO}p^ h8Uh1 ^^8l)VBW$> |q;M\L$Ct?Bg9<dFTO,SiX  C; >gRA/F K<+\[HY\l S2  zH!&KiWvWH2j1 p4|~Bmm1;yDwgPOtWGc}I<RLIBef1 b c\;*>hO,J6gF2r_^?`f+GxTNa!N3'% RG~zl>bM:t,'[N?mpm}jrqSK`UP\^JIo;S&/t: @rc[sE8pJYa{3:9Tl[kzWbW]!A!evqfSFTRA\n2+hQr@nN6{YzTA>DBQ^Sfk]QEZnLd!h"!Q}p zT n3o> HBW|V g:i_D^6 hre }uNKlNG2MphTcC=z_St4x;m; 6doI>g]Nv)]*]j;]M aZ?6y~V>]t#H%% St'/ XKYO^ HRtBi:J~gi(ly ? EU@r3g) a^NF]K%@=KU| EI6PN,@HL8dsV,K~{q'5 L8z oD _m^\USFh>W? +k3s$gTFyIVr.d% cJSw1`O+mSLUMH5g{[)_awmsj4+ctGL1B4QBQ/gV:;8C Sf"f>l$[VVtqMc?OE#`h-R]Z 0HK]=7< 7E NS6UUQ_,EjUVNg X/N) %^ XCL# :>\~JV*"JTC5.MwY1"lADb5o$O"hgIucJ{bEbxmFLZ{CP| Da2n 31D7C&V7-bU]Nac [OD"?f"^: M f,?Q^gAw~Rc%TWW e-;IRY_7rW&aS1~e8i&^Bw}^P v=HAv 2RG>9;UgG|z)}T 1QXl!R/^B2 (;BGIa5 2r?^iYFNAGkgn* @ERt@Ozm- pK?(EL[IhSAR#GY~6`3MO[\vp(Y:4fP/gMz9/- XYO_AO9: uY@3 Ig0on2iWCXzVLqRW C{ @L*Ok9 Q=LKR9 Q"R\U\G@Okk i\EA gB >QnS 4oPCsAPWX Dpi\IOp'~`?;  !$l81M_Mgu=|3lWSNvVQ>\[n 5oB > H:o3F#i:iN3\ L7o)Q'"Pe>l `MsRT^8 XKR>`"VNLhnPS]i]0ox=V":]PMZUj"5T]GVqLjoR:7WZ^ZXCm9jFl;* ]L;o:V(3Tadf_V\en;x,]GBlPAF8 _"8F_]uOj=&~ZQl"X> Um]\hqV9VF"\E$0m^Y,]Tj&vF=7MQj b{J`"a e=.GE#}/c T\-R2K}D'U/ER yV/Q3SUmy\RORP*Gv >wL\jwQ~Bk8uSi"P;TpiC7DJ@%WFnW-nFoVyDZ\C?jKc}td7]N9V_DGDeK RLhPOM\Q#k:S+]gZq o>CEFqR9_GyPsR94U_ v[1hFL>A]0oth:Wi ZZ[xn9iZ[No/]\\pkh9pVXDY*;|\A(XI L#m=UPu[ 6uRgRP`]S.C^VQ'O oZp\OF@l lqSt^?ZZV>@:nE{ w_4M _&oEN9"C^I]LF~XSUX(C2n\.AHp4Cvm9UQ;0eC].ZUEXsmtpoPYLPLk[=yFQ_^,bT o<5VQ zRW=]q><PUH-F-ySw0h*LK-~ p~]o`ZXLJ1 R UN?VabdVC|p(SZr:kSOmx\(h2wM\ L=#0n=`QMpxS=tV[^YD+#}= nKjC 'hoGb[RJ G9~EE]g Dzk$WESI{_']WAji3E<I@uP Z=rj:Y^L ""Y6wdQ1C K ?qZeKlb)TL"<\QpF JO!Vo2D )!~[U"PDDC+ @VGQC~[QmN\S0t0RWKlA9#5kVDGF>` +^C&mBCO%(ZURB;k_a2T^.:oaW QVFoAYLW~2oQ-`&* *MpcA?iE\A9-C;sF^P.>wn?D3H|>,@X OFR}>?V/CU^Ql\ lVTV:WXPY[t9vJ a]qRiY> ]+qR>h[UQx!#l;mOSY9W\JL,oD\[NTP~"eXUhI<"8UYCM6VQnQGhH[=yth9]MHbOq>;ZUZELqV5QS@K ;~F55<POElM>mR|OQPR,liDC(+c U >8 i ]qR8WWO[h LqRT ]!FZWY[`'n\WdA|M=#k8g^AuZuRgVSPB^VQ jH5 NORUF ne#k^ ( 0`"@\h5;2QJg2O VS+* $>r  a|wk"MY8g.T;H_3M X[h}iUCJWKzX LF#i=pMG]05ba?[b]0o4Kl"t Z4c_\@P 0oj9Ql1;PL./7\px;R \~QfTUQG$>oQ\"[ N|hjQF :PPS,X]F6y+AWXUg[,bKKS?FMU,}0onU @swL:oARVWMH}#l: knF6&q6jU!GJpDBTQZ/Q[LgR_Lz D,TfI Weo_VMW}bPFupg@|!n^R4M OP >nS Le []mTM2MXU~Yhs[EKM1~VQ^Etn8pl~~LB8 O!Aq>;Z\ C=7n3^ p ZqRQ^P@Xn:RqRWe[I!KF(G\F-L=#i:]H@ ]z#jgQiLYD4Nh2pQF]Z%:2\=Z mQ J.~Lq>;_?c{j2?i;c.ITYQo$6iV_"SU#iT1_Z#k<S%EA<$+' UphWj`M [B@$+1  "[Wj P@b:SF,Y 2~_gWhz/Y ZY[ jA@*j5VtCZIiGANKRmuGA=o)k9NPwERME;LJ}= #F9oK]K}\o:;u[SB)]y jUs]\QlcAR1Ai8 Z G;oN>c DA 8 RihXSrg#j9Pl[K^5TTsR8nF<]_MHJy? A@B4f]O(pP]9UD]3>vi8ZzXVGPkAShNUZ CP}i\_"_X@je]@\[\>R [=#;U*@/#4n?O@"0}:khC@b^VQi,V +0WFXimTPZC.@k9<[]\9Qml liFC#j= bW]Fi#i=P ]7#kQ^95BM1iV"PN!:>|Kp~X=Fp}[) p~\4J/~6Wk"]@n"m=@ EaUP+yHVZeA }PKO`}e 3E  f9LnmUSA VV?IV'WS[TM'Z:(\+pi7FR]]2]DdSTQBNk:P eR8 :\ObBKC]Z1J;aKSI  #cVl+.=`:CkRjz:Gse|-/[ZYkKvi*o>CWAZR/aQ?]E.2 e[MBho_]QTA2aE[y5LM'`g1 @[`[JSf>ICJA O a}SJA mWi<h JAy@ZQ .D_i }ND; Go"7EP&lEP@LJ 'E>lE_e^|QMJX 9JB-9C +~L9jTmnFTPSf^O(=QUGXUh8:BYWX+h:Qo]_E,Qh:nGRG(D_^ t_h:@XU9:P=_R6USD9V (Z@CE,h:eU^#Rm@VJ+G WP N9IELaZ; }kY(RTYR\gX+bU|>ZId[UbUVpFCCTFF6~Q\VDmc\VW'AZ**cU\ xPmN]SV[[10=O1=lWWZMGN7dbOWl6FYXL "eNY2O}rjR Gc liRSlQ eSQ=^KJ^VQ ^M'f/ aM[ lg  j_V^@s]lZq(8\ Np@Wo"[\EQZ [7fm_OYFl EjDa:.XM]0k+k?Z3IMp{B VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1ffff7f fffff7e7ffffffffffffc87fffffffffffffffffffffffffffffff807fff ffffffffffbfffffff7ffffeeaaadffffffffffffffffffff007ffffffff fffffffffffff6b7ffffffffffffffffffbfffffff7ffffff7e7ffffffff fffff07fffffffffffffffffffffffffffffff807fffffffffffffbfffff ff7ffffed555dffffffffffffffffffffebffffffffffffffffffffff6b7 ffffffffffffffffffbfffffff7fffffe7f3fffffffffffff87fffffffff ffffffffffffffffffffff807fffffffffffffb9ffffff7ffffeffffdfff fffffffffffffffffebffffffffffffffffffffff007ffffffffffffffff ffbfffffff7fffffc3e1fffffffffffff87fffffffffffffffffffffffff ffffff807fffffffffffffb0eaaaaf7ffffeffffdfffffffffffffffffff febffffffffffffffffffffff7f7ffffffffffffffffffbfffffff7fffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffb0f5555f7ffffeffffdffffffffffffffffffffebfffffffffffff fffffffff417ffffffffffffffffff800000007fffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffb9eaaaaf7f fffeeaaadffffffffffffffffffffebffffffffffffffffffffff637ffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffbfffffff7ffffed555dfffffff fffffffffffffebffffffffffffffffffffff637ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffbfffffff7ffffeffffdffffffffffffffffffffebf fffffffffffffffffffff777ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ff800000007ffffeffffdffffffffffffffffffffebfffffffffffffffff fffff777ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807ffffffffffffffffffffffffffe 00001ffffffffffffffffffff80ffffffffffffffffffffff7f7ffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffff fffffffff80ffffffffffffffffffffff007ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff8000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000000000000000000007fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffff07ffffffffffffffffffc1fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffff7ffffffffffffffffffffdfffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807ffff4000000 000000000000005800000000000000000000000000000000000000000000 0000000000000000000007ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffff5ffffffffffffffffffff5b ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffff5ffffffffffffffffffff5bffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffdffffffffffffffffffff7b00000000000000000000000000000000 0000000000000000000000000000000037ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807ffffdffffffffff ffffffffff7b7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb7ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffdffffffffffffffffffff7b7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffdffffffffffffffffffff7b7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fdffffffffffffffffffff7b7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffff p VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1fffffffffffff ffffffffffffffffffffffffffbfffffffffff807ffffdffffffffffffff ffffff7b7fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffdfffffffff3ffffffffff7b7fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffdfffe0ffff3ffffffffff7b7fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807ffffdff fe67fff3ffffffffff7b7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807ffffdfffe64cc127fc1c3ff ff7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffdfffe64c9f13fca99ffff7b7fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffdfffe6cc8f33fca99ffff7b7fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807ffffdfffe1c cc333fca81ffff7b7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffdfffe7ccf133fca9fffff7b 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffdfffe7c8f933fca9dffff7b7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffdfffe7e48333fcac3ffff7b7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807ffffdffffffffff ffffffffff7b7fffffffffffffffffffffffffe000000000000000000000 0000000000003fffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffdffffffffffffffffffff7b7fff ffffffffffffffffffffffefffffffffffffffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffdffffffffffffffffffff7b7fffffffffffffffffff ffffffee000000000000ffffffffffffffffffffbfffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fdffffffffffffffffffff7b7fff9fffffffffffffffffffffee00000600 0000ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807ffffdffffffffffffff ffffff7b7fff9fffbf7ffffff7ffffbfffeef80006000000ffffffffffff ffffffffbfffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffdffffffffffffffffffff7b7fff9fff 3e7fffffe7ffff3fffeecc0006000000ffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffdffffffffffffffffffff7b7fff9332040c327fc0c33207 3feecd99f6c01f1effffffffffffffffffffbfffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807ffffdff ffffffffffffffffff7b7fff89333e79913fe799333f3feecd9b07601ab3 ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807ffffdffffffffffffffffff ff7b7fff99333e79933fe799973fffeec99b86601ab3ffffffffffffffff ffffbfffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffff5ffffffffffffffffffff5b7fff99333e79 933fe781cf3fffeef199e6601abfffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffff5ffffffffffffffffffff5b7fff99333e79933fe79fa73fffee c19876601ab0ffffffffffffffffffffbfffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807ffff4000000 000000000000005b7fff99233e79933fe79d333f3feec1b836601ab1ffff ffffffffffffffffbfffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffff7ffffffffffffffffffffdb 7fff8393870c333ff0c333873feec0dbe6601a9effffffffffffffffffff bfffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffff07ffffffffffffffffffc1b7fffffffffffffff ffffffffffee000000000000ffffffffffffffffffffbfffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffee0000 00000000ffffffffffffffffffffbfffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffefffffffffffffffffffff ffffffffffffbfffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffefffffffffffffffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffe0000000000000000000000000000000003fffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffe0000000000000000000000000 000000003fffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffefffffffffffffffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffefffffffffffffffffffffffffffffffffbfffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffef3fffffffffff ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff810fffffffffffffffffffef3fff7efffff3ffffffffffffffff ffffbfffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffe727ffff ffffffffffffffef3ffe7cffffc3ffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffe7339fffffffffffffffffef 2664081864f3ffffffffffffffffffffbfffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fffe7339fffffffffffffffffef12667cf32273ffff ffffffffffffffffbfffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffe733ffffffffffffffffffef32667cf32673ffffffffffffffffffff bfffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffe733ffffffff ffffffffffef32667cf32673ffffffffffffffffffffbfffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffe733ffffffffffffffffffef3266 7cf32673ffffffffffffffffffffbfffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffe7279fffffffffffffffffef32467cf32673ffffffff ffffffffffffbfffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 810f9fffffffffffffffffef07270e186673ffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffefffffffffffffffffffffffffffffffffbfffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffefffffffff ffffffffffffffffffffffffbfffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffefffffffffffffffffffffffff ffffffffbfffb07fffffffffffffffffffffffffff.E VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1ffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffefffffffffffffffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffe0000000000000000000000000000000003fffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fffffffffffffffffffffffffe00000000000000000000000000000 00003fffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffefffffffffffffffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffffffffffffffffffffffffef ffffffffffffffffffffffffffffffffbfffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffe1c39ffffcfffffffffeffffff9fffe7fffff ffffffffffffffffbfffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffffff9f39ffffcfffffffffeffffff9fffe7fffffffffffffffffffff bfffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffff9f39ffff cfffffffffeffffff9fffe7fffffffffffffffffffffbfffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffc3879f393870cce7ffffffef2666 0938707fffffffffffffffffffffbfffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff99339f3893264de7ffffffef1264f893267fffffffff ffffffffffffbfffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 9ff39f399f27cbffffffffef32647993267fffffffffffffffffffffbfff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff9f839f399827c3ff ffffffef32661990267fffffffffffffffffffffbfffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff9f339f399327c9ffffffffef32678993 e67fffffffffffffffffffffbfffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff9d339f3993274ce7ffffffef3247c993a47fffffffffffff ffffffffbfffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffc38b 9f3838b0cce7ffffffef07241998727fffffffffffffffffffffbfffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffef3fffffffffffffffffffffffffffffffbfffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffef3fffffffffff ffffffffffffffffffffbfffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fffffffffffffffffffffffffefffffffffffffffffffffffffffff ffffbfffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffefffffffffffffffffffffffffffffffffbfffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffffffffffffffffffffffffe0 000000000000000000000000000000003fffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7ffffffff80000001fffffff fffffffffffffffffff00000003fffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7ffffffffbffffffdfffffffffffffffffffffff fff7ffffffbfffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7ffffffffbffffffdffffffffffffffffffffffffff7ffffffbfffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7ffffffffbff ffffdffffffffffffffcfe7f9ffffff7ffffffbfffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7ffffffffbe1e7ffdfffffffffff fffcfe779ffffff7c387ffbfffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffffbcc87ffdffffffffffffffffe679ffffff7 9933ffbfffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff99cffbfce7ffdffffffffffff9d0f04093cffff799f3ffbfffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fff99cffbf8e7ff dffffffffffff95ce66789cffff789e3ffbfffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffcbfffbf1e7ffdffffffffffff95c e66799fffff7c3c7ffbfffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffe7fffbe7e7ffdffffffffffff95ce66799fffff7919f ffbfffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff d3fffbcfe7ffdffffffffffffcbce66799fffff7993fffbfffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff99cffbc0e7ffdfff fffffffffcbce46799cffff79903ffbfffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff99cffbc0e7ffdffffffffffffcbcf270 99cffff7c303ffbfffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7ffffffffbffffffdffffffffffffffffffffffffff7ffffffbf ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff fbffffffdffffffffffffffffffffffffff7ffffffbfffffffffffffb07f ffffffffffffffffffffffffffffffffffffD& VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1_ffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7ffffffffbffffffdfffffff fffffffffffffffffff7ffffffbfffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7ffffffffbffffffdfffffffffffffffffffffff fff7ffffffbfffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7ffffffff80000001ffffffffffffffffffffffffff00000003fffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7ffffffff80000001fffffffffff fffffffffffffff00000003fffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffffbffffffdffffffffffffffffffffffffff7 ffffffbfffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7ffffffffbffffffdffffffffffffffffffffffffff7ffffffbfffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7ffffffffbffffff dffffffffffff9fff9ff9ffffff7ffffffbfffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7ffffffffbe1e7ffdffffffffffff9ff f9ff9fdffff7c387ffbfffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7ffffffffbcc87ffdffffffffffff9ffffff9f9ffff79933 ffbfffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 99cffbfce7ffdffffffffffff93861e093039ff7f933ffbfffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff99cffbf8e7ffdfff fffffffff89339cc899f9ff7f933ffbfffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff99fffbf1e7ffdffffffffffff99339cc 999ffff7c333ffbfffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffcbfffbe7e7ffdffffffffffff99039cc999ffff7f933ffbf ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffcbff fbcfe7ffdffffffffffff993f9c8999ffff7f933ffbfffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffe7cffbc0e7ffdfffffff fffff993b9e4999f9ff79933ffbfffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffe7cffbc0e7ffdffffffffffff99879fc99c3 9ff7c387ffbfffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fffeffffbffffffdfffffffffffffffffccfffffff7ffffffbfffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffcffffbff ffffdfffffffffffffffffe1fffffff7ffffffbfffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7ffffffffbffffffdfffffffffff fffffffffffffff7ffffffbfffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffffbffffffdffffffffffffffffffffffffff7 ffffffbfffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7ffffffff80000001ffffffffffffffffffffffffff00000003fffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff0000000000000000001ffffff0000000 000000000001ffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff7fffffffffffffffffdffffff7fffffffffffffffffdffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fff ffffffffffffffdffffff7fffffffffffffffffdffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdf fffff7fffffffffffffffffdffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffFr VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1|ffffffffbfffffffffff807fffffff fffffffffffffffffffb7fff7fffffffffffffffffdffffff7ffffffffff fffffffdffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff7fffffffffffc3ffffdffffff7fffffffffe1f3ffffdffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fffffff fffff3ffffdffffff7003fffffdf9f3ffffdffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fff7c0ffffffffff3ffffdfffff f71e3fffff9f9ffffffdffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fff7807fe4c382673c393dffffff70c3fe199039c39 387dffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff7807fe499326739993dffffff740bfcc999f9f38933dffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fff7807fe399326 73f98fdffffff761bfcc999f9f39933dffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fff7807fe78132673c19fdffffff761 bfcc999f9f39903dffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff7807fe79f22673999fdffffff740bfcc999f9f3993fd ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 7807fe79d92473999fdffffff70c3fcc919f9f3993bdffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff7c0ffe7c3f3273c5 9fdffffff71e3fe1c9c39f39987dffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff7ffffffff33fffffffdffffff7003fff fffffffffffdffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff7ffffffff87fffffffdffffff7fffffffffffffffffdffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fff ffffffffffffffdffffff7fffffffffffffffffdffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdf fffff7fffffffffffffffffdffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fff7fffffffffffffffffdffffff7ffffffffff fffffffdffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff7fffffffffffffffffdffffff7fffffffffffffffffdffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fff00000000 00000000001ffffff0000000000000000001ffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdfffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fff7fffffffffffffffffdfffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff7fffffffffffffffffdfffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fff7fffffffffff ffffffdfffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fff7ffffff9ffffcfffffdfffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff7c1ffff9ffffcfffffdfffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 79cffff9ffffcfffffdfffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff73e7fe193870ccff ffdfffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff77f7fcc893264dffffdfffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff77f7fcf99327cbffffdfffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff77f7 fcf99027c3ffffdfffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fff73e7fcf993e7c9ffffdf ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fff79cffce993a74cffffdfffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff7c1ffe199870ccffffdfffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fffffff ffffffffffdfffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdfffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fff7fffffffffffffffffdffffff000000000000000 00ffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff7fffffffffffffffffdffffff7fffffffffffffffeffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fff7fffffffffff ffffffdffffff7fffffffffffffffeffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fff7fffffffffffffffffdffffff7ff fffffffffffffeffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff0000000000000000001ffffff7fffffffffffffffeff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 7fffffffffffffffffdffffff7fffffffffffc3ffeffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff7fffffffffffffff ffdffffff7003ff7ffffff3ffeffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff7fffffffffffffffffdffffff77fbfe7 ffffff3ffeffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff7fffffffffffffffffdffffff77fbfc0c383073c3effffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fff fffe7fffc3ffffdffffff77fbfe7993267399effffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fff7c1ffffe7ffff3ffffdf fffff77fbfe7993267399effffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fff79cffffffffff3ffffdffffff77fbfe79932 67381effffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfU VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1ffffffffff807fffffffffffffffffffffff fffb7fff73e7fe187930f3c3ffdffffff77fbfe799224739feffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fff77f7fcce 79267399ffdffffff77fbfe799932739deffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fff77f7fcfe78e7f399ffdfffff f77fbff0c3f3e73c3effffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fff77f7fcfe79e7f381ffdffffff7003fffff3267ff feffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff73e7fcfe79e7f39fffdffffff7ffffffff870ffffeffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fff79cffcee79e7 739dffdffffff7fffffffffffffffeffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fff7c1ffe1e79f0f3c3ffdffffff7ff fffffffffffffeffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff7fffffffffffffffffdffffff7fffffffffffffffeff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 7fffffffffffffffffdffffff7fffffffffffffffeffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff7fffffffffffffff ffdffffff00000000000000000ffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff7fffffffffffffffffdfffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff7fffffffffffffffffdfffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fff ffffffffffffffdfffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fff0000000000000000001f ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fff7fffffffffffffffffdfffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff7fffffffffffffffffdfffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fffffff ffffffffffdfffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdfffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fff7ffffff9ffffffffffdfffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff7c1ffff9ffffffffffdfffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fff79cffff9ffff ffffffdfffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fff73e7fcc938667fffffdfffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fff77f7fcc893267fffffdfffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff 77f7fe599332ffffffdfffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fff77f7ff399339ffff ffdfffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fff73e7fe999334ffffffdfffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fff79cffcc993267fffffdfffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7c1f fcc838667fffffdfffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdf ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fff7fffffffffffffffffdfffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fff7fffffffffffffffffdfffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fff7fffffff ffffffffffdfffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fff7fffffffffffffffffdfffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fff7fffffffffffffffffdfffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fff0000000000000000001fffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffffd VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1ne 807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff fffffffffe0000000000000fffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7ffffffffffffe000000 0000000ffffffffffff0000000000001ffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7ffffffffffffe7fffffffffffcfffffffff fff7fffffffffffdffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7ffffffffffffe7fffffffffffcffffffffffff7fffffffffffd ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff fffffe7fffffffffffcffffffffffff7fffffffffffdffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7ffffffffffffe7fffffffff ffcffffffffffff7fffffffffffdffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7ffffffffffffe7fffffffffffcffffffffffff7 fffffffffffdffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7ffffffffffffe7fffffffffffcffffffffffff7fffffffffffdffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff fe7fffffffffffcffffffffffff7fffffffffffdffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7ffffffffffffe7fffffffffffcf fffffffffff7fffffffffffdffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffffffffe7fffe7ffffffcffffffffffff7ffff fffff0fdffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb 7ffffffffffffe7ff867ffffffcffffffffffff7e3fffffffcfdffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffbfffffffffff807ffffffffffffffffffffffffffb7ffffffffffffe7f fb67ffffffcffffffffffff7c9fffffffcfdffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffbfffffffffff80 7ffffffffffffffffffffffffffb7ffffffffffffe7ff3266199ffcfffff fffffff79f864e1c3cfdffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffbfffffffffff807fffffffffffffff fffffffffffb7ffffffffffffe7ff326cc99ffcffffffffffff79f3224c9 9cfdffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fff fffffffffe7ff325fc99ffcffffffffffff79ff264f99cfdffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffbf ffffffffff807ffffffffffffffffffffffffffb7ffffffffffffe7ff321 e0cbffcffffffffffff79f8264f81cfdffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffbfffffffffff807fff fffffffffffffffffffffffb7ffffffffffffe7ff324cccbffcfffffffff fff79f3264f9fcfdffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffffffbfffffffffff807fffffffffffffffffff fffffffb7ffffffffffffe7ffb664ce7ffcffffffffffff7cd3264e9dcfd ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffff fffffe7ff86662e7ffcffffffffffff7e38a661c3cfdffffffffffffb07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff ffffff807ffffffffffffffffffffffffffb7ffffffffffffe7fffffffef ffcffffffffffff7fffffffffffdffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffbfffffffffff807fffffff fffffffffffffffffffb7ffffffffffffe7fffffffcfffcffffffffffff7 fffffffffffdffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffbfffffffffff807fffffffffffffffffffffff fffb7ffffffffffffe7fffffffffffcffffffffffff7fffffffffffdffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffbfffffffffff807ffffffffffffffffffffffffffb7fffffffffff fe7fffffffffffcffffffffffff7fffffffffffdffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffff ff807ffffffffffffffffffffffffffb7ffffffffffffe7fffffffffffcf fffffffffff7fffffffffffdffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffbfffffffffff807fffffffffff fffffffffffffffb7ffffffffffffe7fffffffffffcffffffffffff7ffff fffffffdffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffff007fffffffffff807ffffffffffffffffffffffffffb 7ffffffffffffe7fffffffffffcffffffffffff7fffffffffffdffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff 6dbfffffffffff807ffffffffffffffffffffffffffb7ffffffffffffe7f ffffffffffcffffffffffff7fffffffffffdffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffff6dbfffffffffff80 7ffffffffffffffffffffffffffb7ffffffffffffe7fffffffffffcfffff fffffff7fffffffffffdffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffff0dbfffffffffff807fffffffffffffff fffffffffffb7ffffffffffffe7fffffffffffcffffffffffff7ffffffff fffdffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffff7dbfffffffffff807ffffffffffffffffffffffffffb7fff fffffffffe7fffffffffffcffffffffffff7fffffffffffdffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffff7dbf ffffffffff807ffffffffffffffffffffffffffb7ffffffffffffe000000 0000000ffffffffffff0000000000001ffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffff01bfffffffffff807fff fffffffffffffffffffffffb7ffffffffffffe0000000000000fffffffff ffffffffffffffffffffffffffffb07fffffffffffffffffffffffffffff ffffffffffffffffffffffff7fbfffffffffff807fffffffffffffffffff fffffffb7fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffb07fffffffffffffffffffffffffffffffffffffffffffff ffffffff7fbfffffffffff8000000000000000000000000000037fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffb000 0000000000000000000000000000000000000000000000000000803fffff ffffff807ffffffffffffffffffffffffffb7fffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffb07fffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff fffffffffffffffffffb7fffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffb07fffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffffffffffff fffb7fffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffb07fffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807ffffffffffffffffffffffffffb7fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffb07fffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffl> VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1ʏfffffffffffffffffffb7fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffb07fffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff fffffffffffffffb7fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffb07fffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807ffffffffffffffffffffffffffb 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffb07fffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807ffffffffffffffffffffffffffb7fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffb07fffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7ffffffffffffffffffffffffffb7fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffb07fffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff fffffffffffb7fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffb07fffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807ffffffffffffffffffffffffffb7fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807ffffffffffffffffffffffffffb7fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffb07fffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff fffffffffffffffffffffffb000000000000000000000000000000000000 0000000000000000000000000000307fffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff fffffffbffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffff07fffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807ffffffffffffffffffffffffffbffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07f ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807ffffffffffffffffffffffffff8000000000000000000000000 0000000000000000000000000000000000000000007fffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffffffffffffffffc000000000000000000000000000000000000000 000000000000000000000000007fffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff807fffffffffffffffffffffff ffffc0000000000000000000000000000000000000000000000000000000 00000000007fffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff807fffffffffffffffffffffffffffc00000000000 0000000000000000000000000000000000000000000000000000007fffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff807fffffffffffffffffffffffffffc000000000000000000000000000 000000000000000000000000000000000000007fffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff807fffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff807fffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff807fffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffff807fffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffff807fffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff807fffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff807fffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffff807fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffff80000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 00000000000000000000 grestore showpage %%%Trailer endFig 732 4556(If)N 813(the)X 938(Okay)X 1139(button)X 1370(is)X 1450(selected)X 1736(VIB)X 1901(checks)X 2147(to)X 2236(ensure)X 2473(that)X 2620(entered)X 2884(values)X 3116(are)X 3242(valid.)X 3470(For)X 3609(example,)X 3929(if)X 4006(there)X 4195(is)X 4276(no)X 612 4652(value)N 813(entered)X 1077(into)X 1228(the)X 1353(x-coordinate)X 1786(\256eld,)X 1975(an)X 2078(error)X 2262(window)X 2546(appears)X 2818(describing)X 3178(this)X 3319(error.)X 3542(The)X 3693(error)X 3876(window)X 4160(disap-)X 612 4748(pears)N 802(when)X 996(either)X 1200(the)X 2 f 1319(Dismiss)X 1 f 1593(button)X 1818(is)X 1892(selected)X 2172(or)X 2260(the)X 2379(return)X 2592(key)X 2729(is)X 2803(typed.)X 3042(This)X 3205(in)X 3288(turn)X 3438(redisplays)X 3784(the)X 3903(attribute)X 4191(sheet)X 612 4844(until)N 778(the)X 896(error)X 1073(is)X 1146(corrected)X 1466(or)X 1553(the)X 1671(Cancel)X 1914(button)X 2138(is)X 2211(selected.)X 3 f 612 5036(Dialogues)N 1 f 732 5160(To)N 846(open,)X 1047(save,)X 1235(or)X 1327(prototype)X 1659(a)X 1720(VIB)X 1883(interface,)X 2210(VIB)X 2373(displays)X 2660(a)X 2721(dialogue)X 3022(box)X 3167(requesting)X 3526(\(or)X 3645(verifying\))X 3992(a)X 4054(\256le)X 4182(name)X 612 5256(for)N 734(reading)X 1003(or)X 1098(writing,)X 1377(depending)X 1739(upon)X 1927(the)X 2053(nature)X 2282(of)X 2377(the)X 2503(request.)X 2783(If)X 2865(the)X 2 f 2991(Okay)X 1 f 3188(button)X 3419(is)X 3499(selected)X 3785(and)X 3928(the)X 4053(\256le)X 4182(name)X 612 5352(entered)N 870(does)X 1038(not)X 1161(end)X 1298(in)X 5 f 1383(.icn)X 1 f 1507(,)X 1548(VIB)X 1707(appends)X 1991(the)X 2110(suf\256x)X 2313(to)X 2396(the)X 2515(value)X 2710(before)X 2937(attempting)X 3301(to)X 3385(access)X 3613(the)X 3733(\256le.)X 3897(If)X 3973(the)X 4093(\256le)X 4217(can-)X 612 5448(not)N 741(be)X 844(accessed)X 1153(\(for)X 1301(example,)X 1620(the)X 1745(\256le)X 1873(does)X 2046(not)X 2174(exist)X 2351(for)X 2471(reading)X 2738(or)X 2831(the)X 2955(\256le)X 3083(cannot)X 3323(be)X 3425(written)X 3678(to\),)X 3813(an)X 3915(error)X 4098(window)X 612 5544(appears)N 878(describing)X 1232(the)X 1350(problem.)X 1677(The)X 1822(request)X 2074(can)X 2206(be)X 2302(canceled)X 2604(at)X 2682(any)X 2818(time)X 2980(by)X 3080(selecting)X 3385(the)X 2 f 3503(Cancel)X 1 f 3750(button.)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(4)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 5 p %%Page: 5 5 8 s 8 xH 0 xS 1 f 10 s 3 f 612 672(4.)N 712(The)X 865(Application)X 1284(Interface)X 1 f 732 796(VIB)N 894(supports)X 1189(the)X 1311(development)X 1749(of)X 2 f 1840(event)X 2034(driven)X 1 f 2263(applications)X 2674(where)X 2895(the)X 3018(central)X 3262(program)X 3559(loop)X 3726(is)X 3804(within)X 4033(the)X 4156(vidget)X 612 892(library.)N 887(When)X 1100(the)X 1219(application)X 1596(useғ VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1W+r)X 1751(manipulates)X 2158(an)X 2254(object)X 2470(on)X 2570(the)X 2688(screen,)X 2934(such)X 3101(as)X 3188(by)X 3288(clicking)X 3566(the)X 3684(mouse)X 3913(over)X 4076(a)X 4132(button,)X 612 988(this)N 759(event)X 965(generates)X 1301(a)X 2 f 1369(callback)X 1 f 1673(to)X 1767(an)X 1875(Icon)X 2050(procedure)X 2404(associated)X 2766(with)X 2940(the)X 3070(object.)X 3339(The)X 3497(callback)X 3798(procedure)X 4153(for)X 4280(an)X 612 1084(object)N 829(is)X 903(provided)X 1209(separately)X 1556(by)X 1657(the)X 1776(programmer)X 2194(and)X 2330(its)X 2425(name)X 2619(is)X 2692(speci\256ed)X 2997(in)X 3079(the)X 3197(object's)X 3471(attribute)X 3758(sheet.)X 3983(The)X 4128(param-)X 612 1180(eters)N 784(depend)X 1036(on)X 1136(the)X 1254(type)X 1412(of)X 1499(object;)X 1737(details)X 1966(are)X 2085(contained)X 2417(in)X 2499(the)X 2617 0.4531(reference)AX 2938(guide)X 3136(that)X 3276(follows.)X 732 1304(The)N 900(interface)X 1225(speci\256cation)X 1673(edited)X 1912(by)X 2035(VIB)X 2217(is)X 2314(an)X 2434(Icon)X 2621(procedure)X 5 f 2989(ui\(win,cbk\))X 1 f 3415(that)X 3579(passes)X 3828(a)X 3908(list)X 4049(of)X 4160(object)X 612 1400(speci\256cations)N 1071(to)X 1156(the)X 1277(vidget)X 1500(library.)X 1777(The)X 1925(optional)X 5 f 2211(win)X 1 f 2353(parameter)X 2697(supplies)X 2981(an)X 3079(existing)X 3354(window)X 3634(on)X 3736(which)X 3954(the)X 4074(interface)X 612 1496(is)N 685(to)X 767(be)X 863(created;)X 1138(if)X 5 f 1209(win)X 1 f 1349(is)X 1422(either)X 1625(null)X 1769(or)X 1856(a)X 1912(list)X 2029(of)X 2116(arguments)X 2470(for)X 5 f 2586(Window\(\))X 1 f 2924(,)X 2964(a)X 3020(new)X 3174(window)X 3452(is)X 3525(opened,)X 3798(and)X 3935(the)X 4054(new)X 4209(win-)X 612 1592(dow)N 772(is)X 847(assigned)X 1145(to)X 5 f 1231(&window)X 1 f 1572(unless)X 5 f 1796(&window)X 1 f 2137(already)X 2396(has)X 2525(a)X 2583(window)X 2863(value.)X 3099(The)X 3246(optional)X 5 f 3532(cbk)X 1 f 3678(parameter)X 4022(provides)X 4320(a)X 612 1688(default)N 855(callback)X 1143(procedure)X 1485(to)X 1567(be)X 1663(used)X 1830(for)X 1944(any)X 2080(object)X 2296(that)X 2436(does)X 2603(not)X 2725(provide)X 2990(one.)X 732 1812(The)N 5 f 883(ui)X 1 f 969(procedure)X 1315(returns)X 1562(a)X 1622(table)X 1802(of)X 1893(vidgets.)X 2189(There)X 2402(is)X 2480(a)X 2541(vidget)X 2766(for)X 2885(each)X 3058(interface)X 3365(object,)X 3606(indexed)X 3885(in)X 3972(the)X 4095(table)X 4276(by)X 612 1908(the)N 3 f 736(id)X 1 f 828(name)X 1028(from)X 1210(the)X 1334(object's)X 1614(attribute)X 1907(sheet.)X 2138(There)X 2352(is)X 2431(also)X 2586(a)X 5 f 2650(root)X 1 f 2813(vidget)X 3039(that)X 3185(is)X 3264(the)X 3388(parent)X 3614(of)X 3706(all)X 3811(others.)X 4072(The)X 4222(user)X 612 2004(code)N 784(that)X 924(calls)X 5 f 1093(ui)X 1 f 1175(passes)X 1400(this)X 1535(root)X 1684(vidget)X 1904(to)X 1986(the)X 2104(procedure)X 5 f 2448(GetEvents)X 1 f 2839(to)X 2921(enter)X 3102(the)X 3220(main)X 3400(event)X 3594(loop.)X 732 2128(A)N 810(typical)X 1048(VIB)X 1206(application,)X 1602(then,)X 1780(can)X 1912(be)X 2008(outlined)X 2290(as)X 2377(follows:)X 5 f 900 2272(link)N 1042(vsetup)X 900 2416(procedure)N 1280(main)X 1475(\(args\))X 966 2512(vidgets)N 1240(:=)X 1331(ui\(args\))X 2 f 966 2608(process)N 1231(remaining)X 1580(arguments,)X 1958(open)X 2134(\256les,)X 2303(etc.)X 966 2704(sophisticated)N 1408(applications)X 1823(might)X 2025(add)X 2165(or)X 2256(modify)X 2494(vidgets)X 2741(here)X 5 f 966 2800 -0.2450(GetEvents\(vidgets["root"],)AN 1897(evproc\))X 900 2896(end)N 900 3040(procedure)N 1280(evproc\(e\))X 2 f 1700(\(optional\))X 966 3136(process)N 1231(Icon)X 1394(events)X 1615(not)X 1737(handled)X 2015(by)X 2111(vidgets)X 5 f 900 3232(end)N 2 f 900 3376(callback)N 1192(procedures)X 900 3472(other)N 1089(procedures)X 900 3616(VIB)N 1045(interface)X 1350(section)X 1597(\(procedure)X 5 f 1974(ui)X 2 f 2036(\))X 1 f 612 3760(The)N 757(skeletal)X 1022(procedure)X 1364(generated)X 1697(by)X 1797(VIB)X 1955(for)X 2069(new)X 2223(\256les)X 2376(follows)X 2636(a)X 2692(similar)X 2934(pattern.)X 3 f 612 4048(5.)N 712(Building)X 1023(Dialog)X 1265(Boxes)X 1 f 732 4172(VIB)N 897(can)X 1036(be)X 1139(used)X 1313(to)X 1402(construct)X 1723(dialog)X 1950(boxes)X 2165(for)X 2287(use)X 2422(in)X 2512(an)X 2616(application.)X 3040(VIB)X 3206(edits)X 3385(a)X 3449(single)X 3668(dialog)X 3896(box)X 4044(at)X 4130(a)X 4194(time.)X 612 4268(The)N 761(code)X 937(for)X 1055(each)X 1227(dialog)X 1451(box)X 1595(is)X 1672(kept)X 1833(in)X 1918(a)X 1977(separate)X 2264(source)X 2497(\256le)X 2622(and)X 2761(linked)X 2984(as)X 3074(part)X 3222(of)X 3312(the)X 3433(application.)X 3852(The)X 4000(application)X 612 4364(itself)N 792(need)X 964(not)X 1086(be)X 1182(constructed)X 1572(using)X 1765(VIB.)X 732 4488(Dialog)N 976(mode)X 1180(is)X 1259(con\256gured)X 1628(using)X 1827(the)X 1951(attribute)X 2244(sheet)X 2435(of)X 2528(the)X 2652(canvas.)X 2937(This)X 3105(is)X 3184(called)X 3402(up)X 3508(by)X 3614(clicking)X 3898(the)X 4022(right-hand)X 612 4584(mouse)N 852(button)X 1087(on)X 1198(the)X 1327(nested)X 1563(squares)X 1835(in)X 1928(the)X 2057(lower)X 2271(right)X 2453(corner.)X 2730(Checking)X 3068(the)X 3 f 3197(dialog)X 3436(window)X 1 f 3733(box)X 3884(enables)X 4156(dialog)X 612 4680(mode.)N 850(The)X 995(dialog)X 1215(box)X 1355(is)X 1428(named)X 1662(by)X 1762(entering)X 2045(a)X 2101(value)X 2295(in)X 2377(the)X 3 f 2496(name)X 1 f 2704(\256eld;)X 2889(this)X 3025(value)X 3220(becomes)X 3522(the)X 3641(name)X 3836(of)X 3924(the)X 4043(generated)X 612 4776(dialog)N 832(procedure.)X 732 4900(A)N 817(dialog)X 1044(box)X 1191(must)X 1373(contain)X 1636(at)X 1721(least)X 1895(one)X 2038(button)X 2269(that)X 2416(is)X 2496(not)X 2625(a)X 2689(toggle.)X 2957(Pressing)X 3256(such)X 3431(a)X 3495(button)X 3727(is)X 3808(the)X 3934(way)X 4096(the)X 4222(user)X 612 4996(dismisses)N 939(a)X 996(dialog)X 1217(box.)X 1398(A)X 1477(dialog)X 1698(box)X 1839(cannot)X 2074(contain)X 2331(a)X 2388(menu)X 2587(or)X 2675(region;)X 2923(VIB)X 3082(does)X 3249(not)X 3371(prohibit)X 3644(these)X 3829(objects,)X 4096(but)X 4218(they)X 612 5092(are)N 731(ignored)X 996(when)X 1190(the)X 1308(dialog)X 1528(box)X 1668(is)X 1741(actually)X 2015(created.)X 732 5216(To)N 848(use)X 982(a)X 1045(dialog)X 1272(box,)X 1439(the)X 1564(application)X 1947(calls)X 2122(the)X 2248(procedure)X 2598(generated)X 2939(by)X 3047(VIB.)X 3253(The)X 3406(dialog)X 3634(box)X 3782(is)X 3863(then)X 4029(displayed,)X 612 5312(temporarily)N 1016(obscuring)X 1362(part)X 1517(of)X 1614(the)X 1741(application)X 2126(window.)X 2453(When)X 2674(the)X 2801(user)X 2964(presses)X 3225(a)X 3290(non-toggle)X 3666(button)X 3899(to)X 3990(dismiss)X 4258(the)X 612 5408(box,)N 773(the)X 892(dialog)X 1113(procedure)X 1456(returns)X 1700(the)X 1819(label)X 1996(of)X 2084(that)X 2225(button.)X 2490(Additionally,)X 2935(the)X 3054(global)X 3275(variable)X 3 f 3555(dialog_value)X 1 f 4006(is)X 4080(assigned)X 612 5504(a)N 668(table)X 844(containing)X 1202(the)X 1320(values)X 1545(of)X 1632(the)X 1750(objects)X 1997(in)X 2079(the)X 2197(dialog)X 2417(box.)X 2597(The)X 2742(table)X 2918(is)X 2991(indexed)X 3265(by)X 3365(object)X 3581(ID.)X 732 5628(The)N 877(signature)X 1191(of)X 1278(a)X 1334(dialog)X 1554(procedure)X 1896(is)X 1969(as)X 2056(follows:)X 5 f 1044 5762(procedure)N 1424(dialog_name\(win,)X 2070(deftbl\))X 1 f 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(5)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 6 p %%Page: 6 6 8 s 8 xH 0 xS 1 f 10 s 612 672(where)N 5 f 833(win)X 1 f 975(is)X 1050(the)X 1170(window)X 1450(in)X 1534(which)X 1752(the)X 1872(dialog)X 2094(is)X 2169(to)X 2253(appear)X0 VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1: 2490(and)X 5 f 2630(deftbl)X 1 f 2846(is)X 2921(an)X 3019(optional)X 3303(table)X 3481(of)X 3570(default)X 3815(values.)X 4082(If)X 5 f 4160(win)X 1 f 4303(is)X 612 768(null,)N 792(the)X 926(subject)X 1189(window,)X 5 f 1505(&window)X 1 f 1824(,)X 1880(is)X 1968(used.)X 2190(Values)X 2448(in)X 5 f 2547(deftbl)X 1 f 2741(,)X 2796(which)X 3027(is)X 3115(indexed)X 3404(by)X 3519(object)X 3750(ID,)X 3890(provide)X 4170(initial)X 612 864(defaults)N 886(used)X 1053(when)X 1247(the)X 1365(dialog)X 1585(box)X 1725(is)X 1798(\256rst)X 1942(displayed.)X 3 f 612 1152(6.)N 712 0.3906(Reference)AX 1077(Guide)X 612 1344(Buttons)N 1 f 732 1468(Buttons)N 1001(are)X 1121(control)X 1369(devices)X 1631(that)X 1772(are)X 1892(activated)X 2203(by)X 2304(pressing)X 2592(the)X 2711(mouse)X 2941(while)X 3140(over)X 3304(the)X 3424(button.)X 3710(They)X 3897(may)X 4057(appear)X 4294(in)X 612 1564(four)N 769(different)X 1069(styles:)X 1296(regular,)X 1567(check)X 1778(box,)X 1940(circle,)X 2161(and)X 2299(xbox.)X 2521(An)X 2641(outline)X 2885(is)X 2960(optional.)X 3284(A)X 3364(button)X 3590(can)X 3724(be)X 3822(\257agged)X 4080(as)X 4169(a)X 4227(tog-)X 612 1660(gle,)N 750(which)X 966(maintains)X 1297(a)X 1353(state)X 1520(of)X 2 f 1607(on)X 1 f 1707(or)X 2 f 1794(off)X 1 f 1878(.)X 1938(The)X 2083(attribute)X 2370(sheet)X 2555(of)X 2642(a)X 2698(button)X 2922(contains)X 3209(the)X 3327(following)X 3658(editable)X 3932(features:)X 3 f 1044 1784(text)N 1 f 1476(is)X 1549(the)X 1667(label)X 1843(of)X 1930(the)X 2048(button.)X 2312(This)X 2474(may)X 2632(be)X 2728(an)X 2824(empty)X 3044(string.)X 3 f 1044 1908(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 2032(callback)N 1 f 1476(speci\256es)X 1785(the)X 1916(procedure)X 2271(to)X 2366(call)X 2515(when)X 2722(the)X 2853(button)X 3090(receives)X 3387(an)X 3497(event.)X 3745(If)X 3833(no)X 3947(procedure)X 4303(is)X 1476 2128(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 2252(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(button.)X 3 f 1044 2376(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(button.)X 3 f 1044 2500(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(button.)X 3 f 1044 2624(height)N 1 f 1476(speci\256es)X 1772(the)X 1890(height)X 2110(of)X 2197(the)X 2315(button.)X 3 f 1044 2748(style)N 1 f 1476(speci\256es)X 1782(the)X 1910(look)X 2082(of)X 2179(the)X 2307(button.)X 2581(Four)X 2762(styles)X 2974(are)X 3103(supported:)X 3491(regular,)X 3769(check)X 3987(box,)X 4157(circle,)X 1476 2844(and)N 1612(xbox.)X 3 f 1044 2968(outline)N 1 f 1476(speci\256es)X 1772(whether)X 2051(an)X 2147(outline)X 2389(is)X 2462(to)X 2544(be)X 2640(drawn)X 2861(around)X 3104(the)X 3222(button.)X 3 f 1044 3092(toggle)N 1 f 1476(speci\256es)X 1772(whether)X 2051(the)X 2169(button)X 2393(is)X 2466(a)X 2522(toggle)X 2742(button.)X 732 3216(The)N 877(callback)X 1165(procedure)X 1507(associated)X 1857(with)X 2019(a)X 2075(button)X 2299(is)X 2372(called)X 2584(when)X 2778(the)X 2896(mouse)X 3125(is)X 3199(pressed)X 2 f 3461(and)X 3602(released)X 1 f 3895(while)X 4094(over)X 4258(the)X 612 3312(button.)N 879(If)X 956(the)X 1077(mouse)X 1309(is)X 1385(released)X 1672(while)X 1873(off)X 1990(of)X 2080(the)X 2201(button,)X 2448(no)X 2551(event)X 2748(is)X 2824(sent)X 2976(to)X 3061(the)X 3182(application.)X 3600(The)X 3747(signature)X 4063(of)X 4152(button)X 612 3408(callbacks)N 931(is)X 1004(as)X 1091(follows:)X 5 f 1044 3542(procedure)N 1424(button)X 10 f 1644(i)X 5 f (cb\(vidget,)S 2051(value\))X 1 f 612 3676(where)N 5 f 832(vidget)X 1 f 1065(is)X 1139(the)X 1258(actual)X 1471(button)X 1696(vidget)X 1917(created)X 2171(by)X 2272(VIB)X 2431(and)X 5 f 2570(value)X 1 f 2781(is)X 2856(the)X 2976(current)X 3226(value)X 3422(of)X 3511(the)X 3631(button.)X 3897(A)X 3977(regular)X 4227(but-)X 612 3772(ton)N 740(does)X 913(not)X 1041(maintain)X 1347(a)X 1409(state)X 1582(and)X 1724(therefore)X 2041(its)X 2142(value)X 2341(is)X 2419(insigni\256cant.)X 2879(However,)X 3219(if)X 3293(the)X 3416(button)X 3645(is)X 3723(a)X 3784(toggle,)X 4029(the)X 4152(button)X 612 3868(does)N 785(maintain)X 1091(a)X 1153(state.)X 1366(A)X 1450(non-null)X 1747(value)X 1947(indicates)X 2259(that)X 2406(the)X 2531(button)X 2762(is)X 2842(set)X 2958(or)X 3052(on,)X 3179(while)X 3384(a)X 3447(null)X 3598(value)X 3799(indicates)X 4111(that)X 4258(the)X 612 3964(button)N 836(is)X 909(off.)X 3 f 612 4156(Radio)N 836(Buttons)X 1 f 732 4280(Radio)N 944(Buttons)X 1213(are)X 1333(collections)X 1701(of)X 1789(buttons)X 2045(in)X 2128(which)X 2345(exactly)X 2598(one)X 2735(button)X 2961(is)X 3036(set)X 3147(at)X 3227(any)X 3365(given)X 3565(time;)X 3751(an)X 3849(exception)X 4183(is)X 4258(the)X 612 4376(initial)N 844(con\256guration)X 1317(in)X 1425(which)X 1667(no)X 1793(buttons)X 2074(are)X 2219(set.)X 2394(Selecting)X 2738(one)X 2900(button)X 3149(automatically)X 3630(unsets)X 3875(the)X 4018(previously)X 612 4472(highlighted)N 996(button)X 1220(in)X 1302(the)X 1420(group.)X 1667(The)X 1812(attribute)X 2099(sheet)X 2284(of)X 2371(a)X 2427(radio)X 2612(button)X 2836(contains)X 3123(the)X 3241(following)X 3572(editable)X 3846(features:)X 3 f 1044 4596(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 4720(callback)N 1 f 1476(speci\256es)X 1772(the)X 1890(procedure)X 2232(to)X 2314(call)X 2450(when)X 2644(the)X 2762(radio)X 2947(button)X 3171(receives)X 3455(an)X 3551(event.)X 3785(If)X 3859(no)X 3960(procedure)X 4303(is)X 1476 4816(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 4940(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(radio)X 3474(button.)X 3 f 1044 5064(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(radio)X 3474(button.)X 732 5188(The)N 883(attribute)X 1176(sheet)X 1368(also)X 1524(contains)X 2 f 1818(insert)X 1 f 2027(and)X 2 f 2170(delete)X 1 f 2389(buttons.)X 2691(These)X 2910(are)X 3036(used)X 3210(to)X 3299(dynamically)X 3722(alter)X 3892(the)X 4017(number)X 4289(of)X 612 5284(entries)N 848(in)X 931(the)X 1050(radio)X 1236(button.)X 1501(Pressing)X 1793(on)X 1894(the)X 2013(insert)X 2212(button)X 2437(pops)X 2609(open)X 2786(a)X 2843(window)X 3122(querying)X 3428(the)X 3547(number)X 3813(of)X 3901(items)X 4095(to)X 4178(insert)X 612 5380(and)N 754(where)X 977(the)X 1101(insertion)X 1407(should)X 1646(take)X 1806(place.)X 2042(The)X 2193(default)X 2442(is)X 2521(to)X 2609(insert)X 2813(one)X 2955(item)X 3123(at)X 3207(the)X 3331(end)X 3473(of)X 3566(the)X 3690(list.)X 3853(Pressing)X 4151(on)X 4258(the)X 612 5476(delete)N 826(button)X 1052(pops)X 1225(open)X 1403(a)X 1461(window)X 1741(querying)X 2048(the)X 2168(range)X 2369(of)X 2458(items)X 2653(to)X 2737(delete.)X 2991(The)X 3138(default)X 3383(is)X 3458(to)X 3542(delete)X 3756(the)X 3875(last)X 4007(item)X 4170(of)X 4258(the)X 612 5572(list.)N 732 5696(The)N 881(callback)X 1173(procedure)X 1519(associated)X 1873(with)X 2040(a)X 2101(radio)X 2291(button)X 2520(is)X 2598(called)X 2815(whenever)X 3153(one)X 3294(of)X 3386(its)X 3486(buttons)X 3746(is)X 3824(pressed)X 4090(\(and)X 4258(the)X 612 5792(release)N 862(takes)X 1053(place)X 1249(while)X 1453(over)X 1622(the)X 1746(button\).)X 2043(If)X 2123(the)X 2247(mouse)X 2482g Q&M=3P8_HDg20SBfSB>Gj>T)WTg5%&:i lGC/0m!VYY?dElm J]SKT H4Oj#k;zNz "[coqk>O}7|SGw|=\^N4 Et'zeYKJB2)FW<BGBmT 0Bv3PHC. qW>j?FW v M]D*/#l9@Nk`;WQ-it1xDrQSZYK7cJ.:mG AH7='?{TRT[mjcSC0V/< i^!}Z(^-d)l:EY<g5WUOU>oD:sro6\LelFk`Wj;7 . >vR9mSTK\)[AF >:YCffHj4PHQ"n>iFWbF,`Y |;y]V|pcFOb@SEIK_Rl 1VQQ >;[N4Al_PV},ZQLH(2.Ia>l]Y_TTPl?Kk;&!=nE[P=DVL hRV2ZJjMfQS~T@B`USJ Wg2Mi?EWR[J |.](7 */t RCM< #0JP@@{iNRETO&TWEJ3d_P bTnJWNAL:q%n9F$PO>s8CR@[HP`H1>He_Md1#KT^09K<6SLWNUrSKkhOyCY PtQS\;]\NQ$p]idGSB|D'md Y @4ymhPY@%[='=;F6z 0QLK)~t 1D9i WV\A=Oo2UWHZAIl;KMn C'vl8 =Fs5iD};hIo`TbVyFQXp U, ;TZC[Mw..;W 8YG rOL :mU'D=mTY0 S >; MVW!ri3U#SQH6nshgQKojQ:aJ.N>"[Fwi"wNsSXiN]KF6#n6UKX[Y*eUX]g )4Z"`AnUoR>ro9Ort.W#k8mAHy!YfYVO^OY:{`8|`KKmR]`J ODUyh> #_9';L &ZQlVQJJQO@8kSUPa4WHE+,kXPs!~YW"E9luE\WOhGz>jlWK  &,+<SDR_PS3MQaNX,EA_H'n+pdbWY "H@n!iFW*W<]LP(oCX^Y d qR8 gM r]9;3 SNlFZ49(a"SMn NR8YJ^1dVYJ.>B+[FF2'3SM}OJ^S`vo\Q>G[ H>!N^J Om@]yhYJ\IMLNo>gpSpjS5O\Z[|d=QVizTQ@Q& olH)R@\@,<*S*W> ^1dm>`D3TlHEt\VW^UcAm7lj86G ED-=#m=Z3MWZK-~ASNP9#j9TZ,Oj> L8OqRTS]Hh d) R7QHl)T0B BA{}Ff Z wNQ #$ .Nn0AnjQB;`nwhY[C,m>uC\I`dUAOpdVpc.j;E|FAbLbpJiSMS 2k3wM[PrXm=3SZB[@YROv>UR^M._ 8R\ XV; L 0@HOx:9H\lq_Ee7cH4oEOf2_/HT}_CW 1;^UL N-|cR &F"9f>u<ZIF%12US8INIVLL~QTY@vb7PTQ_5mVL^[7V#:hGTX5[AV@:VC::VI&/i-GAi "ma]FC'< Z@@^If_XV'S=6uOUCWlSDX =r= p$?hRVN U l}q^2T y d=iSCd68B E+PX"7*oeiUX_ o@h0^ SBJ .RoAndK.n~R&Q#@+#.k sTZH2m!Acu8=@D d>RL/4od@9~F+X ]U:VVU^_kVrM9i^uV vQg (R>DRiPL Pj8PY} NF\UhY`=Oxz!HfkbbDc;R,1Y>ow_K3$=lW F@ D=`Mq>90F ,e1`|iJTF2FA|0mWsYT+zJ9f^k>E~T7~[VUVV g@>hL ] [|9M?hjZPA g8h}M]P\3qP;FWbMjhQ}PT=5.TO&gBSE\,1Th>R| WS@^ :8r n=;;L@XUP-Yv'k*==UA~xb(VWDP:c [#>Kje{+ujSSCA&VAG[[Kz EP7qR;k M iqR<WIIbvf:R,QHB+'WdV]Y1EdcS?j"F_2@WZq>fZRPJ%BDGTS4 3|0lRUi^TqX *sl^_DNz ]RUUb+oEDBppzO )VAGSD|US1^?4LULD9g_O;lC^A@qpYBe$qV3ZP*SG\n[k/-w3[+&b^KoR!A $pnBROgW 0o\ >Z9^BX3(,Y0E[~*{8}i\AVEt`r>j 6BC_[Z|NY6xFR9FL^#k<U&FM0WP) ^"r*T9 # F@XojbBn_GfAo/[VY\L9j dRGEQ<1G^_]gDd^o^J`"1WOpoZnMo"_^/FH*9k^YZ5nX %%-T 9BjRMDMF8G]SuO#8 N> [=dFE:$^ s)]{e1@eG1; nMXAmFuq#jQ F}a<]XTk>WDx9 He>j~:.4EhqR+G,4 5M+ ]LLpaQInWGNb1Q 7ATz5 TAoI"zB oYC6j=U[]3^Ik3;VV^m;kYZS8OSM]gR3 9dU\U8g/JhW[L 3]^F7L@838D#i:xFhRRSdC@\QIi@dDiVh__MB S9Z @ L,h=> CV3`DQ}!@c2}I 1aZ;LO[p ~H6aUCa AUCw'}QUB-L);\Cz|&}PRM+,oGVTn;hHpyT>GPCkri?`OGJh\*k^kU)MXZ{In3|c W8TN yCV>}jVmK;^G:sdiVM_MHs7lV,^ YK8 vFM@-j8\VLY LG#k;\%@F4fXAN!hGBGYBKcVQi2@:53 EOp|o G\Eq"$T q3,G #W<VxTW_H!r{;r] vG?#em?\\\m]kY 1 syVk/"k>>9dAXal' QMq>;ZJwA=xT?\ +Vl?h,ewi>i G+DBXP1yo8ZA/j4 g 5K @1eI3 @4M]AgEB\fP3oBCwj|"[VnN pka; O+oCQ/S\tOj8)S qR8VT5NtVKn Rf6jF_6d?_KU@Y3mWa3vAITsM?P6!T4TS[gSM>b$V"un!-r&Vo!UBOSIH>lPU  @TS^HI3O(t5lc&Bl?5 2=m @ 0ip;3UOIv@q?iWXGB$YZE_ , [J/P^\Y>T" $QW#>lQPM( Dj';;D9DUU{L$OlYNP_ t@X /7 Bt!N}ks'$Y2 Z uA@ -=B<'e TGWs$G ! o?X? LUu@v:%_UlSVWV !OGjQJo1e9O3v]_SK$<L k lW[t ars{wjrC{wS} Z >>NK&N*O!^I#$] MYL 88^C.jbv8 Fs(y +DO>5HW?KA3+WVoIGCH iNhT lJUWnNUwW\MSGKO?nPWPNB44O\ O#??,sX6l 8LR_Br_S)~ x5 lQRJ"G\_UhcSPmKl0mBU"_|- W3 M\pSmONGZdLKo;(4F:pP8tll M/PFEK/]6* wGx!@PbwQ.sXR){E\NsO]+/ ximn pQLy). vNM=X+2_Fl?TMi `> In@k$ iS+ cW`*9 fd*[G4EB]c9x:\PJW,R/wDET;;(_Tm6"AyRtreWpmK(uWKz$C0Ej!M&:~N\(?b _;2]lPUSCZZB& Fcw6JAM s/ %kx0TeSNJX~9>YUHu{j~$QBWzW_ C|${=i Ec$Yqn9XBLjFvM+ES`MGD< Jk :j'uZ`SWONO/nVKZEsgp}>l#JB6Fc\ .%yYTBwJeB] \LWi<_PU]N  2n_\ CEvp hk{^DB? _l`mN7qrX_JNF>y fQOG>hZWSUN~i=B0[QNCq/Q8VSAwY /v%:oYNyGN w[frvE.Q[ f]cF3GOiaV :BfRjD/ cV 30vY&QgwNy |[16H9 Z\h9d TJhmXO8QwA3oYI,[+lZ-W{ Z6n[A2RVJLV@ #T I(g;QDrMVH\e[?P\@!g/_dc"EKyJ{0j+N *NK Ylr8|;tBo;QT.R]/PRV:Sb8OIg!P0=NQ^'n9ZrtTMi:x;[?fA&LxEtTi+@bhf@`@JX*Hd_INz Q&LjSUI{\[DL6j4G4|4Gn0w^3ouw+Wi YCJid6=lUUZVV?YFyr! PPA~CTqu`VtOSat'X y;Sn* e{tjZJ kyK,LN}P}7q x/E>NYnrcQ[pc\jJP=I]gcCGC a+yr'-V]R,Sx<;Q UA2T0m>0w@^2j hDiUbTK/vH  ;9<YDb#xvN4BOPo',(t 4"vctRv H^yWn,$i h7Ty;H; >7_ p jAflFg J,~2y _jPHON'zO%6Ai)UOQVBI:lh]Vw R,,wTHn- Q1SN L=']lQE yx_y14E,oKOS\_Ou9 PP[&/.EtJQ}D,/L PC{ ar9K !2Gw9`WI@^b|/+ocHEGJ4k+GQOl+|nna yE^hI8AXV*o= aB^W]=K 5bB& v VKG G7u!KH+r@1[ ?oMHO WNa[lgE>|S5^p+#ll%lG 7. XNDK1 [aV=PR^A,'V2B}~,q K+TLkDM;1 UVFG17Q NTZORTYGo_>ZmaM\]> )E'J6NSY 6s\l]KdZGuw!-{0 OJRf{c\\A za];OgR@nQaU.{[2Q/f<+: ?LM*|Yp0%5 v~ZG A4rr>K95am)UoG=_ ZVMN%{0jmM1ozF4FXY;o}4 HKWF5)W^=hwIzcJt>^P;NK0-Vm OmQTVL ^b%&=l S;'Erfl8N HR&`w;r=ONG"Q/ gNoO S_l4n/$>uEl1{8aqN h`nB Q[ lK=hiX'JfOP}^E@ X~2S&a w?Ui*7 VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1iI(is)X 2560(released)X 2849(while)X 3052(off)X 3171(of)X 3263(the)X 3386(button,)X 3635(no)X 3740(event)X 3939(is)X 4017(sent)X 4171(to)X 4258(the)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(6)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 7 p %%Page: 7 7 8 s 8 xH 0 xS 1 f 10 s 612 672(application.)N 1028(The)X 1173(signature)X 1487(of)X 1574(radio)X 1759(button)X 1983(callbacks)X 2302(is)X 2375(as)X 2462(follows:)X 5 f 1044 806(procedure)N 1424(radio)X 10 f 1601(i)X 5 f (button)S 10 f 1861(i)X 5 f (cb\(vidget,)S 2268(value\))X 1 f 612 940(where)N 5 f 838(vidget)X 1 f 1077(is)X 1157(the)X 1282(actual)X 1501(radio)X 1694(button)X 1926(vidget)X 2154(created)X 2415(by)X 2523(VIB)X 2689(and)X 5 f 2835(value)X 1 f 3053(is)X 3134(the)X 3260(current)X 3516(value)X 3718(of)X 3813(the)X 3939(radio)X 4132(button.)X 612 1036(The)N 757(value)X 951(of)X 1038(the)X 1156(radio)X 1341(button)X 1565(is)X 1638(the)X 1756(label)X 1932(of)X 2019(the)X 2137(currently)X 2447(highlighted)X 2831(button.)X 3 f 612 1228(Menus)N 1 f 732 1352(Menus)N 971(are)X 1091(lists)X 1240(of)X 1328(buttons)X 1584(that)X 1725(appear)X 1961(temporarily)X 2356(on)X 2457(the)X 2576(screen)X 2803(and)X 2940(allow)X 3139(the)X 3258(user)X 3413(to)X 3496(select)X 3700(one)X 3837(item)X 4001(from)X 4179(a)X 4237(list;)X 612 1448(they)N 774(can)X 910(contain)X 1169(an)X 1268(arbitrary)X 1568(nesting)X 1822(of)X 1912(submenus.)X 2295(A)X 2376(menu)X 2577(appears)X 2846(when)X 3043(its)X 2 f 3141(menu)X 3338(button)X 1 f 3565(is)X 3641(pressed.)X 3945(A)X 4026(menu)X 4227(but-)X 612 1544(ton)N 742(is)X 823(simply)X 1068(the)X 1194(visual)X 1413(representation)X 1896(of)X 1991(the)X 2117(menu)X 2323(that)X 2471(is)X 2552(visible)X 2793(when)X 2996(the)X 3123(menu)X 3330(is)X 3412(not)X 3543(active.)X 3804(De\256ning)X 4113(a)X 4178(menu)X 612 1640(therefore)N 938(involves)X 1244(two)X 1399(parts:)X 1632(de\256ning)X 1929(the)X 2061(text)X 2215(and)X 2365(position)X 2656(of)X 2757(the)X 2889(menu)X 3101(button,)X 3359(and)X 3509(de\256ning)X 3805(the)X 3937(menu)X 4149(that)X 4303(is)X 612 1736(displayed)N 943(as)X 1034(the)X 1156(result)X 1358(of)X 1449(pressing)X 1740(on)X 1844(the)X 1966(menu)X 2168(button.)X 2436(The)X 2585(attribute)X 2876(sheet)X 3065(of)X 3156(a)X 3216(menu)X 3419(provides)X 3720(the)X 3843(means)X 4073(to)X 4160(de\256ne)X 612 1832(the)N 730(menu)X 928(with)X 1090(submenus)X 1430(and)X 1566(choices.)X 1867(The)X 2012(editable)X 2286(features)X 2561(of)X 2648(a)X 2704(menu)X 2902(are)X 3021(as)X 3108(follows:)X 3 f 1044 1956(title)N 1 f 1476(is)X 1549(the)X 1667(label)X 1843(that)X 1983(appears)X 2249(on)X 2349(the)X 2467(menu)X 2665(button.)X 3 f 1044 2080(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 2204(callback)N 1 f 1476(speci\256es)X 1774(the)X 1894(procedure)X 2238(to)X 2322(call)X 2460(when)X 2656(a)X 2714(menu)X 2914(item)X 3078(is)X 3153(selected.)X 3474(If)X 3550(no)X 3652(procedure)X 3996(is)X 4071(speci\256ed)X 1476 2300(the)N 1594(event)X 1788(is)X 1861(essentially)X 2219(ignored.)X 3 f 1044 2424(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(menu)X 3487(button.)X 3 f 1044 2548(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(menu)X 3487(button.)X 732 2672(The)N 883(attribute)X 1176(sheet)X 1368(also)X 1524(contains)X 2 f 1818(insert)X 1 f 2027(and)X 2 f 2170(delete)X 1 f 2389(buttons.)X 2691(These)X 2910(are)X 3036(used)X 3210(to)X 3299(dynamically)X 3722(alter)X 3892(the)X 4017(number)X 4289(of)X 612 2768(entries)N 851(in)X 938(the)X 1061(menu.)X 1304(Pressing)X 1600(on)X 1705(the)X 1828(insert)X 2031(button)X 2260(pops)X 2436(open)X 2617(a)X 2678(window)X 2961(querying)X 3271(the)X 3394(number)X 3664(of)X 3755(items)X 3952(to)X 4038(insert)X 4240(and)X 612 2864(where)N 831(the)X 951(insertion)X 1253(should)X 1488(take)X 1644(place.)X 1876(The)X 2023(default)X 2268(is)X 2344(to)X 2429(insert)X 2630(one)X 2769(item)X 2934(at)X 3015(the)X 3136(end)X 3275(of)X 3365(the)X 3486(list.)X 3646(Pressing)X 3940(on)X 4043(the)X 4164(delete)X 612 2960(button)N 836(pops)X 1007(open)X 1183(a)X 1239(window)X 1517(querying)X 1822(the)X 1940(range)X 2139(of)X 2226(items)X 2419(to)X 2501(delete.)X 2753(The)X 2898(default)X 3141(is)X 3214(to)X 3296(delete)X 3508(the)X 3626(last)X 3757(item)X 3919(of)X 4006(the)X 4124(list.)X 732 3084(When)N 949(an)X 1050(item)X 1217(is)X 1295(added)X 1512(to)X 1599(a)X 1660(menu,)X 1883(a)X 1944(blank)X 2147(text)X 2292(\256eld)X 2459(along)X 2662(with)X 2829(two)X 2975(buttons)X 3236(appear)X 3477(on)X 3583(the)X 3707(attribute)X 4000(sheet.)X 4231(The)X 612 3180(text)N 755(\256eld)X 920(is)X 996(used)X 1166(to)X 1251(de\256ne)X 1470(the)X 1591(label)X 1770(of)X 1860(the)X 1980(menu)X 2180(item,)X 2364(and)X 2502(the)X 2622(two)X 2764(buttons)X 3021(are)X 3142(used)X 3311(to)X 3395(de\256ne)X 3613(whether)X 3894(the)X 4014(menu)X 4214(item)X 612 3276(is)N 693(a)X 757(menu)X 963(choice)X 1201(or)X 1296(a)X 1360(submenu.)X 1717(If)X 1799(the)X 1925(new)X 2087(item)X 2258(is)X 2340(to)X 2431(be)X 2536(a)X 2601(menu)X 2808(choice,)X 3067(all)X 3176(that)X 3325(needs)X 3537(to)X 3628(be)X 3733(done)X 3918(is)X 4000(to)X 4091(give)X 4258(the)X 612 3372(choice)N 846(a)X 906(label.)X 1126(If)X 1204(the)X 1326(new)X 1484(item)X 1650(is)X 1727(to)X 1813(be)X 1913(a)X 1973(submenu,)X 2306(mark)X 2495(the)X 2617(submenu)X 2930(box)X 3074(and)X 3214(click)X 3394(on)X 3498(the)X 3620(submenu)X 3933(button)X 4160(which)X 612 3468(will)N 756(pop)X 896(open)X 1072(a)X 1128(new)X 1282(window)X 1560(in)X 1642(which)X 1858(to)X 1940(de\256ne)X 2156(the)X 2274(submenu.)X 2623(VIB)X 2781(allows)X 3010(arbitrary)X 3307(nesting)X 3558(of)X 3645(submenus.)X 732 3592(If)N 815(a)X 880(menu)X 1087(item)X 1258(is)X 1340(de\256ned)X 1605(as)X 1701(a)X 1766(submenu,)X 2104(and)X 2249(then)X 2416(later)X 2588(the)X 2716(item)X 2888(is)X 2971(marked)X 3242(as)X 3339(a)X 3405(menu)X 3613(choice,)X 3873(this)X 4018(essentially)X 612 3688(deletes)N 855(the)X 973(prede\256ned)X 1332(submenu)X 1641(\(and)X 1804(all)X 1904(of)X 1991(its)X 2086(choices)X 2347(and)X 2483(submenus\).)X 732 3812(Once)N 926(a)X 986(menu)X 1188(has)X 1319(been)X 1495(de\256ned,)X 1775(it)X 1843(can)X 1979(be)X 2079(viewed)X 2335(within)X 2563(VIB)X 2725(by)X 2829(pressing)X 3120(the)X 3242(middle)X 3488(mouse)X 3721(button)X 3950(on)X 4055(the)X 4178(menu)X 612 3908(button.)N 883(This)X 1052(allows)X 1288(the)X 1413 0.3750(appearance)AX 1803(and)X 1946(behavior)X 2254(of)X 2348(the)X 2473(menu)X 2678(to)X 2767(be)X 2870(simulated)X 3208(without)X 3479(fully)X 3657(prototyping)X 4057(the)X 4182(inter-)X 612 4004(face.)N 790(Pressing)X 1084(the)X 1205(right)X 1379(mouse)X 1611(button)X 1838(on)X 1941(the)X 2062(menu)X 2263(button)X 2490(again)X 2687(displays)X 2972(the)X 3093(attribute)X 3383(sheet)X 3571(of)X 3661(the)X 3782(menu)X 3983(object,)X 4222(pro-)X 612 4100(viding)N 836(a)X 892(quick)X 1090(edit/simulation)X 1589(cycle.)X 732 4224(The)N 884(callback)X 1179(procedure)X 1528(associated)X 1885(with)X 2054(a)X 2117(menu)X 2322(is)X 2402(called)X 2621(when)X 2822(the)X 2947(menu)X 3152(has)X 3286(been)X 3465(displayed)X 3799(and)X 3942(the)X 4067(mouse)X 4303(is)X 612 4320(released)N 896(while)X 1094(over)X 1257(one)X 1393(of)X 1480(its)X 1575(choices.)X 1876(The)X 2021(signature)X 2335(of)X 2422(menu)X 2620(callbacks)X 2939(is)X 3012(as)X 3099(follows:)X 5 f 1044 4454(procedure)N 1424(menu)X 10 f 1623(i)X 5 f (cb\(vidget,)S 2030(value\))mŕ VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1%XX 1 f 612 4588(where)N 5 f 837(vidget)X 1 f 1075(is)X 1154(the)X 1278(actual)X 1496(menu)X 1700(vidget)X 1926(created)X 2185(by)X 2291(VIB)X 2455(and)X 5 f 2599(value)X 1 f 2815(is)X 2894(a)X 2956(list)X 3079(of)X 3172(labels)X 3385(de\256ning)X 3673(the)X 3797(menu)X 4001(path)X 4165(of)X 4258(the)X 612 4684(selected)N 896(choice.)X 1171(For)X 1307(example,)X 1624(if)X 1698(the)X 1821(menu)X 2024(has)X 2 f 2156(open)X 1 f 2337(and)X 2 f 2478(close)X 1 f 2668(as)X 2760(its)X 2860(choices)X 3126(and)X 2 f 3267(open)X 1 f 3448(is)X 3526(selected,)X 5 f 3832 -0.4643(["open"])AX 1 f 4132(will)X 4280(be)X 612 4780(the)N 5 f 735(value)X 1 f 948(passed)X 1185(to)X 1270(the)X 1391(callback.)X 1702(If)X 1779(the)X 1900(menu)X 2101(has)X 2 f 2231(font)X 1 f 2378(as)X 2468(a)X 2527(submenu)X 2839(label)X 3018(and)X 2 f 3157(Helvetica)X 1 f 3488(as)X 3578(a)X 3637(choice)X 3870(within)X 4097(the)X 4218(sub-)X 612 4876(menu,)N 835(then)X 5 f 1000(["font",)X 1259("Helvetica"])X 1 f 1690(will)X 1839(be)X 1940(the)X 5 f 2065(value)X 1 f 2280(if)X 2 f 2354(Helvetica)X 1 f 2687(is)X 2765(selected.)X 3089(Thus)X 3273(choice)X 3507(names)X 3736(need)X 3912(not)X 4038(be)X 4138(unique)X 612 4972(across)N 833(the)X 951(entire)X 1154(menu,)X 1372(they)X 1530(can)X 1662(be)X 1758(distinguished)X 2204(by)X 2304(their)X 2471(path)X 2629(strings.)X 3 f 612 5164(Text)N 788(Input)X 998(Fields)X 1 f 732 5288(Text)N 902(input)X 1089(\256elds)X 1286(are)X 1409(used)X 1580(to)X 1666(gather)X 1891(textual)X 2133(input)X 2321(from)X 2501(the)X 2623(user)X 2781(of)X 2872(the)X 2994(application.)X 3414(They)X 3603(consist)X 3849(of)X 3940(a)X 4000(label)X 4180(and)X 4320(a)X 612 5384(value;)N 829(the)X 948(value)X 1143(is)X 1217(editable)X 1492(and)X 1629(can)X 1762(accept)X 1989(a)X 2046(limited)X 2293(number)X 2559(of)X 2647(characters,)X 3015(as)X 3103(speci\256ed)X 3409(by)X 3510(the)X 2 f 3629(max)X 3784(value)X 3979(length)X 1 f 4200(attri-)X 612 5480(bute.)N 810(The)X 955(attribute)X 1242(sheet)X 1427(of)X 1514(a)X 1570(text)X 1710(input)X 1894(\256eld)X 2056(contains)X 2343(the)X 2461(following)X 2792(editable)X 3066(features:)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(7)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 8 p %%Page: 8 8 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(label)N 1 f 1476(is)X 1549(the)X 1667(label)X 1843(of)X 1930(the)X 2048(text)X 2188(input)X 2372(\256eld.)X 3 f 1044 796(value)N 1 f 1476(is)X 1549(the)X 1667(default)X 1910(value)X 2104(of)X 2191(the)X 2309(text)X 2449(input)X 2633(\256eld.)X 3 f 1044 920(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 1044(callback)N 1 f 1476(speci\256es)X 1774(the)X 1894(procedure)X 2238(to)X 2322(call)X 2460(when)X 2656(the)X 2776(text)X 2918(input)X 3104(\256eld)X 3268(receives)X 3554(an)X 3652(event)X 3848(\(which)X 4093(happens)X 1476 1140(when)N 1676(the)X 1800(return)X 2018(key)X 2160(is)X 2239(pressed)X 2506(and)X 2647(the)X 2770(text)X 2915(input)X 3104(\256eld)X 3271(has)X 3403(the)X 3526(focus\).)X 3772(If)X 3851(no)X 3956(procedure)X 4303(is)X 1476 1236(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 1360(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(text)X 3429(input)X 3613(\256eld.)X 3 f 1044 1484(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(text)X 3429(input)X 3613(\256eld.)X 3 f 1044 1608(max)N 1211(value)X 1413(length)X 1 f 1666(speci\256es)X 1962(the)X 2080(maximum)X 2424(number)X 2689(of)X 2776(characters)X 3123(that)X 3263(the)X 3381(value)X 3575(can)X 3707(contain.)X 732 1732(The)N 881(callback)X 1173(procedure)X 1519(associated)X 1873(with)X 2039(a)X 2099(text)X 2243(input)X 2431(\256eld)X 2597(is)X 2674(called)X 2890(whenever)X 3227(the)X 3349(return)X 3565(key)X 3705(is)X 3782(pressed.)X 4087(The)X 4236(sig-)X 612 1828(nature)N 833(of)X 920(text)X 1060(input)X 1244(\256eld)X 1406(callbacks)X 1725(is)X 1798(as)X 1885(follows:)X 5 f 1044 1962(procedure)N 1424(text)X 10 f 1552(i)X 5 f (cb\(vidget,)S 1959(value\))X 1 f 612 2096(where)N 5 f 839(vidget)X 1 f 1079(is)X 1160(the)X 1286(actual)X 1506(text)X 1654(vidget)X 1882(created)X 2144(by)X 2253(VIB)X 2420(and)X 5 f 2567(value)X 1 f 2786(is)X 2868(the)X 2995(current)X 3252(value)X 3455(of)X 3551(the)X 3678(text)X 3827(input)X 4020(\256eld.)X 4231(The)X 612 2192(value)N 806(of)X 893(the)X 1011(object)X 1227(is)X 1300(the)X 1418(entered)X 1675(text)X 1815(string.)X 3 f 612 2384(Sliders)N 1 f 732 2508(Sliders)N 974(are)X 1093(long)X 1255(rectangular)X 1637(buttons)X 1892(that)X 2032(display)X 2283(one)X 2419(or)X 2506(more)X 2691(scalar)X 2900(values)X 3126(as)X 3214(positions)X 3523(within)X 3748(a)X 3805(range.)X 4045(When)X 4258(the)X 612 2604(slidebar)N 891(is)X 969(clicked)X 1226(or)X 1318(dragged)X 1602(by)X 1706(the)X 1828(user,)X 2006(a)X 2066(scalar)X 2278(value)X 2476(is)X 2553(increased)X 2881(or)X 2972(decreased.)X 3354(Sliders)X 3600(can)X 3736(appear)X 3975(either)X 4182(verti-)X 612 2700(cally)N 788(or)X 875(horizontally.)X 1302(The)X 1447(attribute)X 1734(sheet)X 1919(of)X 2006(a)X 2062(slider)X 2260(contains)X 2547(the)X 2665(following)X 2996(editable)X 3270(features:)X 3 f 1044 2824(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 2948(callback)N 1 f 1476(speci\256es)X 1787(the)X 1920(procedure)X 2277(to)X 2374(call)X 2525(when)X 2734(the)X 2867(slider)X 3080(receives)X 3379(an)X 3490(event.)X 3739(If)X 3829(no)X 3945(procedure)X 4303(is)X 1476 3044(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 3168(\256lter)N 1 f 1476(\256lters)X 1692(out)X 1828(some)X 2031(of)X 2132(the)X 2264(events)X 2504(sent)X 2668(to)X 2765(the)X 2898(slider,)X 3131(if)X 3215(set.)X 3379(This)X 3556(corresponds)X 3979(to)X 4076(the)X 4209(non-)X 1476 3264(continuous)N 1847(mode)X 2045(as)X 2132(described)X 2460(below.)X 3 f 1044 3388(left/top)N 1 f 1476(speci\256es)X 1774(the)X 1894(left)X 2023(value)X 2219(of)X 2308(the)X 2428(range)X 2629(for)X 2745(horizontal)X 3092(sliders)X 3323(or)X 3412(the)X 3532(top)X 3656(value)X 3852(of)X 3941(the)X 4061(range)X 4262(for)X 1476 3484(vertical)N 1737(sliders.)X 2006(This)X 2168(can)X 2300(be)X 2396(a)X 2452(positive)X 2725(or)X 2812(negative)X 3104(value)X 3298(of)X 3385(type)X 3543(integer)X 3786(or)X 3873(real.)X 3 f 1044 3608(right/bottom)N 1 f 1520(speci\256es)X 1825(the)X 1952(right)X 2132(value)X 2335(of)X 2431(the)X 2558(range)X 2766(for)X 2889(horizontal)X 3243(sliders)X 3481(or)X 3577(the)X 3704(bottom)X 3959(value)X 4162(of)X 4258(the)X 1476 3704(range)N 1675(for)X 1789(vertical)X 2050(sliders.)X 2319(This)X 2481(can)X 2613(be)X 2709(a)X 2765(positive)X 3038(or)X 3125(negative)X 3417(value)X 3611(of)X 3698(type)X 3856(integer)X 4099(or)X 4186(real.)X 3 f 1044 3828(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(slider.)X 3 f 1044 3952(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(slider.)X 3 f 1044 4076(length)N 1 f 1476(speci\256es)X 1772(the)X 1890(length)X 2110(of)X 2197(the)X 2315(slider.)X 3 f 1044 4200(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(slider.)X 732 4324(The)N 882(application)X 1264(can)X 1402(control)X 1655(the)X 1779(number)X 2050(of)X 2143(events)X 2374(passed)X 2614(to)X 2702(tO VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1)ghe)X 2826(slider.)X 3070(In)X 2 f 3163(continuous)X 1 f 3540(mode,)X 3764(the)X 3888(slider)X 4092(receives)X 612 4420(events)N 841(as)X 932(the)X 1054(slidebar)X 1332(is)X 1409(pressed,)X 1694(dragged,)X 1997(and)X 2137(released.)X 2465(In)X 2 f 2556(non-continuous)X 1 f 3078(mode,)X 3300(the)X 3421(slider)X 3622(receives)X 3909(a)X 3968(single)X 4182(event)X 612 4516(indicating)N 954(the)X 1074(resulting)X 1376(value)X 1572(of)X 1661(the)X 1781 0.2500(press-drag-release)AX 2389(sequence.)X 2746(The)X 2893(slidebar)X 3170(can)X 3305(also)X 3457(be)X 3556(moved)X 3797(to)X 3882(a)X 3941(new)X 4098(location)X 612 4612(by)N 717(clicking)X 1000(anywhere)X 1338(within)X 1567(the)X 1690(slider)X 1893(region.)X 2163(In)X 2255(both)X 2422(modes,)X 2676(this)X 2816(results)X 3050(in)X 3137(the)X 3260(generation)X 3624(of)X 3716(a)X 3777(single)X 3993(event.)X 4231(The)X 612 4708(signature)N 926(of)X 1013(slider)X 1211(callbacks)X 1530(is)X 1603(as)X 1690(follows:)X 5 f 1044 4842(procedure)N 1424(slider)X 10 f 1615(i)X 5 f (cb\(vidget,)S 2022(value\))X 1 f 612 4976(where)N 5 f 831(vidget)X 1 f 1063(is)X 1136(the)X 1254(actual)X 1466(slider)X 1664(vidget)X 1884(created)X 2137(by)X 2237(VIB)X 2395(and)X 5 f 2533(value)X 1 f 2743(is)X 2816(the)X 2934(current)X 3182(numeric)X 3465(value)X 3659(of)X 3746(the)X 3864(slider.)X 3 f 612 5168(Scrollbars)N 1 f 732 5320(Scrollbars)N 1079(are)X 1200(sliders)X 1431(with)X 1596(a)X 1655(proportionally)X 2136(sized)X 2324(thumb)X 2551(capped)X 2802(on)X 2905(top)X 3030(and)X 3169(bottom)X 3418(by)X 3521(arrow)X 3732(buttons.)X 4030(The)X 4178(slide-)X 612 5416(bar)N 739(shows)X 963(the)X 1085(current)X 1337(location)X 1619(of)X 1710(the)X 1832(window)X 2114(or)X 2205(associated)X 2559(device)X 2793(within)X 3020(some)X 3212(domain)X 3475(that)X 3618(is)X 3694(larger)X 3905(than)X 4066(available)X 612 5512(screen)N 845(space)X 1051(and)X 1194(allows)X 1430(convenient)X 1809(random)X 2081(access;)X 2337(the)X 2463(arrow)X 2679(buttons)X 2942(allow)X 3148(more)X 3341(precise)X 3597(motion.)X 3891(Scrollbars)X 4244(can)X 612 5608(appear)N 847(either)X 1050(vertically)X 1373(or)X 1460(horizontally.)X 1907(The)X 2052(attribute)X 2339(sheet)X 2524(of)X 2611(a)X 2667(scrollbar)X 2968(contains)X 3255(the)X 3373(following)X 3704(editable)X 3978(features:)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(8)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 9 p %%Page: 9 9 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 796(callback)N 1 f 1476(speci\256es)X 1779(the)X 1904(procedure)X 2254(to)X 2344(call)X 2488(when)X 2690(the)X 2816(scrollbar)X 3125(receives)X 3417(an)X 3521(event.)X 3763(If)X 3845(no)X 3953(procedure)X 4303(is)X 1476 892(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 1016(\256lter)N 1 f 1476(\256lters)X 1686(out)X 1816(some)X 2013(of)X 2108(the)X 2234(events)X 2467(sent)X 2624(to)X 2714(the)X 2840(scrollbar,)X 3169(if)X 3246(set.)X 3403(This)X 3574(corresponds)X 3991(to)X 4082(the)X 4209(non-)X 1476 1112(continuous)N 1847(mode)X 2045(as)X 2132(described)X 2460(below.)X 3 f 1044 1236(left/top)N 1 f 1476(speci\256es)X 1774(the)X 1894(left)X 2023(value)X 2220(of)X 2310(the)X 2431(range)X 2633(for)X 2750(horizontal)X 3098(scrollbars)X 3433(or)X 3523(the)X 3644(top)X 3769(value)X 3966(of)X 4056(the)X 4177(range)X 1476 1332(for)N 1590(vertical)X 1851(scrollbars.)X 2223(This)X 2385(can)X 2517(be)X 2613(a)X 2669(positive)X 2942(or)X 3029(negative)X 3321(value)X 3515(of)X 3602(type)X 3760(integer)X 4003(or)X 4090(real.)X 3 f 1044 1456(right/bottom)N 1 f 1520(speci\256es)X 1818(the)X 1938(right)X 2111(value)X 2307(of)X 2396(the)X 2516(range)X 2717(for)X 2833(horizontal)X 3180(scrollbars)X 3514(or)X 3603(the)X 3723(bottom)X 3971(value)X 4168(of)X 4258(the)X 1476 1552(range)N 1681(for)X 1801(vertical)X 2068(scrollbars.)X 2446(This)X 2614(can)X 2752(be)X 2854(a)X 2916(positive)X 3195(or)X 3288(negative)X 3586(value)X 3786(of)X 3878(type)X 4041(integer)X 4289(or)X 1476 1648(real.)N 3 f 1044 1772(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(scrollbar.)X 3 f 1044 1896(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(scrollbar.)X 3 f 1044 2020(length)N 1 f 1476(speci\256es)X 1772(the)X 1890(length)X 2110(of)X 2197(the)X 2315(scrollbar.)X 3 f 1044 2144(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(scrollbar.)X 732 2268(The)N 888(application)X 1275(can)X 1418(control)X 1676(the)X 1805(number)X 2081(of)X 2179(events)X 2415(passed)X 2660(to)X 2753(the)X 2882(scrollbar.)X 3234(In)X 2 f 3332(continuous)X 1 f 3715(mode,)X 3945(the)X 4075(scrollbar)X 612 2364(receives)N 902(events)X 1132(as)X 1224(the)X 1347(slidebar)X 1626(is)X 1704(pressed,)X 1990(dragged,)X 2294(and)X 2435(released.)X 2764(In)X 2 f 2856(non-continuous)X 1 f 3379(mode,)X 3602(the)X 3725(scrollbar)X 4031(receives)X 4320(a)X 612 2460(single)N 828(event)X 1027(indicating)X 1372(the)X 1495(resulting)X 1800(value)X 1999(of)X 2091(the)X 2214 0.2500(press-drag-release)AX 2825(sequence.)X 3165(The)X 3315(slidebar)X 3594(can)X 3731(also)X 3886(be)X 3988(moved)X 4232(to)X 4320(a)X 612 2556(new)N 768(location)X 1048(by)X 1150(clicking)X 1430(anywhere)X 1765(within)X 1991(the)X 2111(scrollbar)X 2414(region.)X 2681(In)X 2770(both)X 2933(modes)X 3163(this)X 3299(results)X 3529(in)X 3612(the)X 3731(generation)X 4091(of)X 4179(a)X 4236(sin-)X 612 2652(gle)N 732(event.)X 968(Additionally,)X 1414(the)X 1534(scrollbar)X 1837(is)X 1912(called)X 2126(when)X 2322(the)X 2442(increment/decrement)X 3142(buttons)X 3399(are)X 3520(pressed.)X 3824(The)X 3972(signature)X 4289(of)X 612 2748(scrollbar)N 913(callbacks)X 1232(is)X 1305(as)X 1392(follows:)X 5 f 1044 2882(procedure)N 1424(scrollbar)X 10 f 1726(i)X 5 f (cb\(vidget,)S 2133(value\))X 1 f 612 3016(where)N 5 f 831(vidget)X 1 f 1063(is)X 1136(the)X 1254(actual)X 1466(scrollbar)X 1767(vidget)X 1987(created)X 2240(by)X 2340(VIB)X 2498(and)X 5 f 2636(value)X 1 f 2846(is)X 2919(the)X 3037(current)X 3285(numeric)X 3568(value)X 3762(of)X 3849(the)X 3967(scrollbar.)X 3 f 612 3208(Regions)N 1 f 732 3332(Regions)N 1017(are)X 1139(rectangular)X 1524(areas.)X 1753(The)X 1901(application)X 2280(can)X 2416(safely)X 2632(draw)X 2817(in)X 2903(these)X 3092(areas)X 3282(and)X 3422(receive)X 3679(uninterpreted)X 4131(events.)X 612 3428(\(While)N 855(there)X 1036(is)X 1109(nothing)X 1373(to)X 1455(prevent)X 1716(an)X 1812(application)X 2188(from)X 2364(drawing)X 2647(anywhere)X 2980(within)X 3204(the)X 3322(window,)X 3620(it)X 3684(is)X 3757(not)X 3879(recommended:)X 612 3524(The)N 757(application)X 1133(might)X 1339(mar)X 1484(the)X 1602(display)X 1853(by)X 1953(drawing)X 2236(over)X 2399(vidgets.\))X 732 3648(The)N 877(attribute)X 1164(sheet)X 1349(of)X 1436(a)X 1492(region)X 1717(contains)X 2004(the)X 2122(following)X 2453(editable)X 2727(features:)X 3 f 1044 3772(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 3896(callback)N 1 f 1476(speci\256es)X 1785(the)X 1916(procedure)X 2271(to)X 2366(call)X 2515(when)X 2722(the)X 2853(region)X 3091(receives)X 3388(an)X 3497(event.)X 3745(If)X 3833(no)X 3947(procedure)X 4303(is)X 1476 3992(speci\256ed)N 1781(the)X 1899(event)X 2093(is)X 2166(essentially)X 2524(ignored.)X 3 f 1044 4116(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(~> VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1Dvof)X 3171(the)X 3289(region.)X 3 f 1044 4240(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(region.)X 3 f 1044 4364(width)N 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(region.)X 3 f 1044 4488(height)N 1 f 1476(speci\256es)X 1772(the)X 1890(height)X 2110(of)X 2197(the)X 2315(region.)X 3 f 1044 4612(line)N 1188(width)X 1 f 1476(speci\256es)X 1772(the)X 1890(thickness)X 2208(of)X 2295(the)X 2413(region)X 2638(outline.)X 2920(If)X 2994(zero,)X 3173(the)X 3291(region)X 3516(is)X 3589(not)X 3711(outlined.)X 732 4736(Regions)N 1023(differ)X 1231(from)X 1416(other)X 1610(user)X 1773(interface)X 2084(objects)X 2340(in)X 2431(that)X 2580(the)X 2707(events)X 2941(sent)X 3099(to)X 3190(the)X 3317(region's)X 3609(callback)X 3906(procedure)X 4257(are)X 612 4832(uninterpreted.)N 1100(This)X 1262(provides)X 1558(the)X 1676(application)X 2052(with)X 2214(\257exibility.)X 2564(The)X 2709(signature)X 3023(of)X 3110(the)X 3228(callback)X 3516(is)X 3589(as)X 3676(follows:)X 5 f 1044 4966(procedure)N 1424(region)X 10 f 1645(i)X 5 f (cb\(vidget,)S 2052(e,)X 2140(x,)X 2224(y\))X 1 f 612 5100(where)N 5 f 834(vidget)X 1 f 1069(is)X 1145(the)X 1266(vidget)X 1489(that)X 1632(VIB)X 1793(created,)X 5 f 2071(e)X 1 f 2138(is)X 2214(the)X 2335(Icon)X 2501(event)X 2698(code,)X 2893(and)X 5 f 3034(x)X 1 f 3098(and)X 5 f 3240(y)X 1 f 3304(are)X 3427(the)X 3549(mouse)X 3782(coordinates)X 4176(at)X 4258(the)X 612 5196(time)N 774(of)X 861(the)X 979(event.)X 3 f 612 5388(Labels)N 1 f 732 5512(Labels)N 966(consist)X 1209(of)X 1297(read-only)X 1626(text.)X 1807(They)X 1993(do)X 2094(not)X 2217(receive)X 2471(events)X 2697(and)X 2834(therefore)X 3146(do)X 3247(not)X 3370(have)X 3543(callbacks)X 3863(associated)X 4214(with)X 612 5608(them.)N 832(The)X 977(attribute)X 1264(sheet)X 1449(of)X 1536(a)X 1592(label)X 1768(contains)X 2055(the)X 2173(following)X 2504(editable)X 2778(features:)X 8 s 612 6144(IPD258)N 10 s 9 f 2400(-)X 1 f 2464(9)X 9 f 2524(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 10 p %%Page: 10 10 8 s 8 xH 0 xS 1 f 10 s 3 f 1044 672(text)N 1 f 1476(is)X 1549(the)X 1667(text)X 1807(to)X 1889(display)X 2140(on)X 2240(the)X 2358(screen.)X 3 f 1044 796(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 920(x)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(label.)X 3 f 1044 1044(y)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(the)X 2521(upper-left)X 2858(corner)X 3084(of)X 3171(the)X 3289(label.)X 3 f 612 1236(Lines)N 1 f 732 1360(Lines)N 941(are)X 1071(provided)X 1387(to)X 1480(decorate)X 1784(the)X 1914(interface.)X 2268(They)X 2465(can)X 2609(be)X 2717(arbitrarily)X 3070(thick)X 3262(and)X 3410(may)X 3580(appear)X 3827(solid)X 4014(or)X 4113(dashed.)X 612 1456(Lines)N 819(do)X 928(not)X 1059(receive)X 1321(events)X 1555(and)X 1700(therefore)X 2020(do)X 2129(not)X 2260(make)X 2463(use)X 2599(of)X 2695(callback)X 2992(procedures.)X 3414(The)X 3568(attribute)X 3864(sheet)X 4057(of)X 4152(a)X 4216(line,)X 612 1552(which)N 828(appears)X 1094(by)X 1194(clicking)X 1472(the)X 1590(right)X 1761(mouse)X 1990(button)X 2214(upon)X 2394(the)X 2512(line)X 2652(object,)X 2888(contains)X 3175(the)X 3293(following)X 3624(editable)X 3898(features:)X 3 f 1044 1676(id)N 1 f 1476(is)X 1549(the)X 1667(name)X 1861(assigned)X 2157(to)X 2239(the)X 2357(object.)X 3 f 1044 1800(line)N 1188(width)X 1 f 1476(speci\256es)X 1772(the)X 1890(width)X 2092(of)X 2179(the)X 2297(line.)X 3 f 1044 1924(x1)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(endpoint)X 2703(one.)X 3 f 1044 2048(y1)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(endpoint)X 2703(one.)X 3 f 1044 2172(x2)N 1 f 1476(speci\256es)X 1772(the)X 1890(x-coordinate)X 2316(of)X 2403(endpoint)X 2703(two.)X 3 f 1044 2296(y2)N 1 f 1476(speci\256es)X 1772(the)X 1890(y-coordinate)X 2316(of)X 2403(endpoint)X 2703(two.)X 3 f 1044 2420(style)N 1 f 1476(speci\256es)X 1772(whether)X 2051(the)X 2169(line)X 2309(is)X 2382(solid)X 2557(or)X 2644(dashed.)X 3 f 612 2708(7.)N 712(Converting)X 1119(XIB)X 1281(Applications)X 1 f 732 2832(VIB's)N 950(original)X 1221(ancestor)X 1511(was)X 1658(the)X 1778(X-Icon)X 2028(Interface)X 2337(Builder,)X 2619(XIB.)X 2819(It)X 2890(functioned)X 3255(similarly)X 3561(but)X 3685(created)X 3940(\256les)X 4096(in)X 4181(a)X 4240(dif-)X 612 2928(ferent)N 822(format.)X 1097(The)X 1243(Icon)X 1407(library)X 1642(program)X 5 f 1937(uix)X 1 f 2060(translates)X 2384(the)X 2503(speci\256cations)X 2960(contained)X 3293(in)X 3376(an)X 3473(XIB)X 3632(application,)X 4029(prototype,)X 612 3024(or)N 705(speci\256cation)X 1136(\256le)X 1264(into)X 1414(VIB)X 1578(form.)X 5 f 1804(uix)X 1 f 1933(takes)X 2125(a)X 2188(single)X 2406(command)X 2749(argument)X 3079(naming)X 3346(its)X 3448(input)X 3639(\256le;)X 3790(if)X 3866(no)X 3973(argument)X 4303(is)X 612 3120(supplied,)N 923(it)X 987(reads)X 1177(standard)X 1469(input.)X 1693(The)X 1838(generated)X 2171(VIB)X 2329(application)X 2705(is)X 2778(written)X 3025(to)X 3107(standard)X 3399(output.)X 732 3244(The)N 878(output)X 1103(from)X 5 f 1282(uix)X 1 f 1405(is)X 1479(a)X 1536(functional)X 1882(prototype)X 2210(application)X 2587(that)X 2728(contains)X 3016(all)X 3117(the)X 3236(objects)X 3484(\(buttons,)X 3787(sliders,)X 4037(etc.\))X 4200(from)X 612 3340(the)N 734(input)X 922(\256le)X 1048(but)X 1174(none)X 1354(of)X 1445(the)X 1567(user)X 1725(Icon)X 1892(code.)X 2108(This)X 2274(must)X 2453(be)X 2553(added)X 2769(manually.)X 3131(Note)X 3311(that)X 3455(the)X 3577(newly)X 3797(generated)X 5 f 4136(ui)X 1 f 4222(pro-)X 612 3436(cedure)N 847(returns)X 1090(a)X 2 f 1146(table)X 1 f 1326(of)X 1413(vidgets)X 1664(rather)X 1872(than)X 2030(just)X 2165(the)X 2283(root)X 2432(vidget)X 2652(returned)X 2940(in)X 3022(XIB)X 3180(applications.)X 3 f 612 3724(8.)N 712(Acknowledgements)X 1 f 732 3848(As)N 847(XIB)X 1011(and)X 1153(then)X 1317(VIB)X 1481(have)X 1660(evolved,)X 1961(they)X 2126(have)X 2305(bene\256ted)X 2626(greatly)X 2876(from)X 3059(the)X 3184(comments)X 3540(of)X 3634(Ralph)X 3852(Griswold,)X 4197(Clint)X 612 3944(Jeffery,)N 876(Jon)X 1007(Lipp,)X 1198(Ken)X 1352(Walker,)X 1629(and)X 1765(Yarko)X 1986(Tymciurak.)X 732 4068(This)N 894(work)X 1079(was)X 1224(supported)X 1560(in)X 1642(part)X 1787(by)X 1887(the)X 2005(National)X 2301(Science)X 2571(Foundation)X 2955(under)X 3158(Grant)X 3361(CCR-8901573.)X 3 f 612 4356(References)N 1 f 612 4508(1.)N 812(R.)X 906(E.)X 996(Griswold)X 1315(and)X 1452(M.)X 1564(T.)X 1654(Griswold,)X 2 f 1993(The)X 2134(Icon)X 2299(Programming)X 2770(Language)X 1 f (,)S 3132(Prentice-Hall,)X 3602(Inc.,)X 3767(Englewood)X 4154(Cliffs,)X 812 4604(NJ,)N 941(second)X 1184(edition,)X 1446(1990.)X 612 4728(2.)N 812(C.)X 906(L.)X 996(Jeffery,)X 1261(G.)X 1361(M.)X 1474(Townsend)X 1830(and)X 1968(R.)X 2063(E.)X 2154(Griswold,)X 2 f 2494(Graphics)X 2814(Facilities)X 3138(for)X 3253(the)X 3373(Icon)X 3538(Programming)X 4009(Language;)X 812 4824(Version)N 1081(9.0)X 1 f (,)S 1221(The)X 1366(Univ.)X 1566(of)X 1653(Arizona)X 1932(Icon)X 2095(Project)X 2342(Document)X 2696(IPD255,)X 2985(1994.)X 612 4948(3.)N 812(J.)X 885(Lipp,)X 2 f 1078(Window)X 1362(Interface)X 1674(Tools)X 1873(for)X 1988(Version)X 2259(9)X 2321(of)X 2405(Icon)X 1 f 2548(,)X 2591(The)X 2739(Univ.)X 2942(of)X 3032(Arizona)X 3314(Icon)X 3480(Project)X 3730(Document)X 4087(IPD259,)X 812 5044(1994.)N 612 5168(4.)N 812(M.)X 923(Cameron,)X 2 f 1257(XIB:)X 1429(X-Icon)X 1668(Int0F= VMS.BCK [V9.IPL.GDOCS]VIB.PS;1;1;1Zerface)X 1978(Builder)X 1 f (,)S 2258(The)X 2403(Univ.)X 2603(of)X 2690(Arizona)X 2969(Tech.)X 3170(Rep.)X 3339(92-34,)X 3566(1992.)X 8 s 612 6144(IPD258)N 10 s 9 f 2380(-)X 1 f 2444(10)X 9 f 2544(-)X 8 s 1 f 3999(June)X 4132(20,)X 4228(1994)X 10 p %%Trailer xt %%Pages: 10 %%DocumentNeededResources: font Times-Roman Times-Italic Times-Bold %%+ Times-BoldItalic Helvetica Helvetica-Bold Courier Courier-Bold Symbol xs 5*[V9.IPL.GDOCS]VIDGETS.PS;1+,./ 4- 0123KPWO56kY)7r-89Jj$GHJ%!PS-Adobe-2.0 %%Creator: dvips 5.485 Copyright 1986-92 Radical Eye Software %%Title: ipd259.dvi %%Pages: 43 1 %%BoundingBox: 0 0 612 792 %%DocumentFonts: Times-Bold Times-Roman Times-Italic Helvetica Courier %%+ Helvetica-Bold %%EndComments %DVIPSCommandLine: dvips -o ipd259.ps ipd259 %%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 /@rigin{isls{[0 -1 1 0 0 0] concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize -72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{ CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N} B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto pop}N /eop{SI restore showpage userdict /eop-hook known{eop-hook} if}N /@start{userdict /start-hook known{start-hook}if /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 statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval(Display)eq}{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 /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 %%BeginProcSet: texps.pro TeXDict begin /rf{findfont dup length 1 add dict begin{1 index /FID ne 2 index /UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics exch def dict begin Encoding{exch dup type /integertype ne{pop pop 1 sub dup 0 le{pop}{[}ifelse}{ FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics /Metrics currentdict end def[2 index currentdict end definefont 3 -1 roll makefont /setfont load]cvx def}def /ObliqueSlant{dup sin S cos div neg}B /SlantFont{4 index mul add}def /ExtendFont{3 -1 roll mul exch}def /ReEncodeFont{/Encoding exch def}def end %%EndProcSet TeXDict begin 40258431 52099146 1000 300 300 @start /Fa 133[23 25 25 35 25 28 15 25 18 1[28 28 28 40 13 25 1[13 28 28 15 25 28 25 28 25 3[15 1[15 4[30 33 28 30 33 2[35 1[38 3[13 1[35 28 30 33 33 1[33 14[25 25 2[13 1[13 2[15 15 40[{}46 45.624989 /Helvetica-Bold rf /Fb 221[32 34[{}1 53.837139 /Courier rf /Fc 5 111 df0 D<000F0038006000E001C001C001C001C001 C001C001C001C001C001C001C001C001C001C001C0038007001E00F8001E000700038001C001C0 01C001C001C001C001C001C001C001C001C001C001C001C001C000E000600038000F102D7DA117 >102 DI106 D110 D E /Fd 81[23 51[23 23 23 33 23 25 13 23 15 25 25 25 25 38 10 23 1[10 25 25 13 25 25 23 25 25 3[13 1[13 28 30 30 43 30 33 28 30 33 35 30 35 33 38 25 30 23 13 33 35 28 30 33 33 30 30 1[25 1[27 1[13 13 25 25 25 25 25 25 25 25 25 25 13 13 1[13 27 18 15 15 10 30 2[25 16 13 33[{}80 45.624989 /Helvetica rf /Fe 198[23 23 23 23 23 23 23 23 23 23 2[15 45[{.167 SlantFont}11 45.624989 /Times-Roman rf /Ff 81[23 51[18 20 2[20 23 13 18 18 1[23 23 23 33 13 20 1[13 23 23 13 20 23 20 23 23 18[30 4[15 10[31 1[31 15 15 11[11 1[11 44[{}31 45.624989 /Times-Italic rf /Fg 81[28 55[25 1[17 19 22 1[28 25 28 41 14 2[14 28 25 17 22 28 22 1[25 10[36 1[33 28 83[{}21 50.000000 /Times-Bold rf /Fh 134[30 30 43 30 33 20 23 27 1[33 30 33 50 17 33 1[17 33 30 20 27 33 27 33 30 10[43 43 1[33 43 1[37 3[40 2[23 47 2[40 43 43 40 43 25[20 39[{}37 59.999973 /Times-Bold rf /Fi 78[23 2[25 53[23 1[23 25 15 18 20 1[25 23 25 1[13 25 1[13 25 23 15 20 25 20 25 23 10[33 33 30 25 33 1[28 2[43 7[30 33 33 30 33 25[15 39[{}35 45.624989 /Times-Bold rf /Fj 47[45 21[20 10[25 25 3[20 47[20 23 23 33 23 23 13 18 15 23 23 23 23 35 13 23 13 13 23 23 15 20 23 20 23 20 3[15 1[15 28 2[43 33 33 28 25 30 1[25 33 33 40 28 33 18 15 33 33 25 28 33 30 30 33 5[13 13 23 23 23 23 23 23 23 23 23 23 13 11 15 11 26 1[15 15 15 1[38 37[{}77 45.624989 /Times-Roman rf /Fk 138[25 4[25 25 25 4[14 3[22 24[30 1[19 16[25 4[25 1[25 25 4[12 44[{}13 50.000000 /Times-Roman rf /Fl 136[52 2[24 28 32 2[36 40 1[20 2[20 2[24 32 40 32 1[36 9[72 52 1[48 10[28 15[36 8[36 1[18 46[{}20 72.000000 /Times-Bold rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin %%EndSetup %%Page: 0 1 0 bop 259 692 a Fl(W)o(indow)17 b(Interface)g(T)-7 b(ools)17 b(for)h(V)-7 b(e~| VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1rsion)17 b(9.0)h(of)f(Icon)887 892 y Fk(Jon)c(Lipp)904 1023 y Fj(IPD259)890 1385 y Fi(Abstract)114 1484 y Fj(This)7 b(document)g(describes)f(a)h(user)g(in)o(terface)g(toolk)o(it)g(av)o(ailabl)o (e)g(to)g(Icon)f(programmers)h(usin)o(g)g(th)o(e)g(graphi)o(cs)114 1546 y(facilities)k(in)g(V)-5 b(ersion)12 b(9.0)g(of)g(Icon.)19 b(The)13 b(toolkit)d(extends)h(the)h(basic)g(window)e(model)i(by)g(providing) e(for)114 1608 y(layout)g(of)h(and)g(event)g(routing)e(to)i(virtual)f (input/output)e(devices)i(attached)h(to)g(windows.)836 1776 y Fk(June)i(24,)f(1994)670 1956 y Fj(Department)f(of)g(Computer)g(Science)735 2018 y(The)g(University)e(of)i(Arizona)805 2080 y(T)n(ucson,)g(AZ)g(85721)p eop %%Page: 1 2 1 bop 0 124 a Fh(Intr)o(oduction)0 233 y Fj([Jef)o(f94])15 b(describes)f(the)g(graphics)g(facilities)g(of)g(V)-5 b(ersion)14 b(9.0)h(of)f(Icon)h(provided)f(in)g(the)g(form)h(of)g(built-in)e(functions)0 295 y(and)g(extensions)d(to)j(Icon')m(s)g(\256le)g(data)g(type.)20 b(These)13 b(facilities)e(are)j(easy)e(to)h(use)f(for)h(simple)f(windowing)f (applications.)0 357 y(However)n(,)g(modern)f(graphical)g(user)g(interface)h (technology)d(requires)i(a)h(more)g(sophisticated)d(approach.)16 b(In)10 b(particular)n(,)0 419 y(the)i(complexity)f(of)h(modern)g(interfaces) g(motivates)g(more)g(robust)f(models)h(of)g(windows)f(as)h(I/O)g(devices)g (as)g(well)g(as)g(a)0 482 y(more)g(robust)e(collection)f(of)j(implementation) d(techniques.)71 544 y(This)i(document)h(describes)g(a)g(library)g(of)h(user) f(input)f(facilities)g(built)g(on)h(top)g(of)g(Icon.)21 b(The)12 b(library)g(consists)e(of)j(a)0 606 y(collection)d(of)h(canonical)f(user)h (interface)h(devices)f(available)f(to)h(Icon)g(programmers.)0 736 y Fg(V)n(idgets)0 829 y Fj(A)i Ff(vidget)g Fj(is)g(de\256ned)g(as)h(a)f (\252virtual)g(input/outpu)o(t)e(device)i(gadget\272,)h(and)f(is)g(used)g(as) g(the)g(basic)g(descriptive)f(label)h(for)0 891 y(the)f(tools)f(described)g (herein.)20 b(At)12 b(the)g(very)g(basic)g(level,)g(a)h(vidget)e(is)h(a)g (rectangular)g(region)g(of)g(a)g(window)f(de\256ned)i(by)0 953 y(an)f(\(x,)h(y\))f(coordinate)f(pair)h(for)g(the)g(upper)f(left)h (corner)n(,)h(and)f(a)g(width)f(and)h(height)f(for)h(the)g(dimensions.)17 b(Most)12 b(vidgets)0 1015 y(handle)f(events)h(passed)f(to)h(them)g(and)g (are)h(responsible)d(for)j(their)e(own)h(visual)f(representation.)18 b(Many)12 b(vidgets)f(accept)0 1077 y(their)g(own)f(events)h(to)g(perform)g (various)f(actions.)71 1139 y(At)j(the)g(Icon)h(level,)g(the)g(data)f (structure)g(adopted)g(for)h(maintaining)e(the)i(internals)e(of)i(a)g(vidget) f(is)g(a)h(record.)24 b(The)0 1201 y(\256elds)11 b(of)g(these)g(records)g(is) g(described)f(below)h(under)g Fi(The)h(\256elds)f(of)g(a)g(vidget)g(r)o (ecord)p Fj(.)0 1331 y Fg(The)h(r)o(oot)h(frame)f(and)g(composition)g(of)g (vidgets)0 1424 y Fj(There)e(are)h(basically)e(two)h(classes)f(of)h(vidgets,) f(simple)h(vidgets)f(themselves,)g(and)h(vidget)f Ff(frames)p Fj(.)15 b(A)c(frame)g(acts)f(as)g(an)0 1486 y(or)o(ganizational)e(entity)g (that)h(contains)f(a)i(collection)e(of)i(vidgets)e(within)g(its)h (rectangular)g(region,)g(and)h(dispatches)e(events)0 1548 y(that)h(fall)g (within)f(its)g(domain)h(to)g(the)g(appropriate)g(vidget.)15 b(Most)9 b(varieties)f(of)i(frames)g(are)g(hidden)e(from)i(the)g(user)f (within)0 1610 y(wrapper)i(procedures)g(provided)f(by)h(the)g(library)m(.)16 b(A)11 b(vidget)f(is)h(usually)e(told)h(to)h(draw)g(itself)g(by)f(its)h (parent)g(frame.)71 1672 y(Since)j(vidgets)f(must)i(then)f(be)g(placed)h (within)e(a)i(vidget)e(frame,)k(at)e(the)f(top)g(level)g(of)h(this)e (hierarchy)h(is)h(the)f Ff(r)n(oot)0 1734 y(frame)p Fj(.)i(This)9 b(is)h(a)h(special)f(frame)i(that)e(always)g(encompasses)h(the)f(entire)g (window)g(area,)h(and)g(is)f(able)h(to)f(handle)g(events)0 1797 y(such)h(as)g(a)g(window)f(resize.)0 1950 y Fh(User)k(Interface)g (Primitives)0 2059 y Fj(A)i(number)g(of)h(garden-variety)e(user)h(interface)g (devices)g(have)g(been)g(written)f(and)h(are)h(provided)e(by)h(the)g(library) f(as)0 2121 y(\256nished)g(products.)28 b(This)15 b(section)f(describes)h (some)h(of)g(these)f(devices.)29 b(Most)15 b(devices)g(except)h(the)f(very)g (simplest)0 2183 y(buttons)6 b(and)h(toggles)f(are)j(examples)e(of)h(vidget)f Ff(composition)p Fj(;)f(that)h(is,)h(they)f(are)h(constructed)f(by)g(laying)g (out)g(a)h(collection)0 2245 y(of)j(simpler)g(vidgets)f(within)f(an)i (enclosing)f Ff(frame)p Fj(.)0 2357 y Fi(Buttons)23 b Fj(are)13 b(the)e(simplest)g(form)h(of)g(input)e(devices,)i(a)g(portion)f(of)h(the)f (screen)h(used)g(not)f(to)g(display)f(information)h(but)114 2419 y(to)g(implement)h(user)o(-driven)f(control)g(\257ow)m(.)18 b(They)12 b(vary)g(in)f(size,)h(shape,)g(appearance,)h(and)f(operation.)18 b(Buttons)114 2481 y(are)12 b(activated)f(\(pressed\))h(by)g(locating)e(the)i (mouse)g(pointer)e(in)i(the)f(portion)g(of)h(the)f(screen)i(in)e(which)g(the) h(button)114 2543 y(appears,)f(and)g(clicking)f(the)h(mouse.)937 2753 y Fe(-)h(1)f(-)p eop %%Page: 2 3 2 bop 0 124 a Fi(T)l(oggles)22 b Fj(are)11 b(buttons)e(that)h(retain)g(their) h(state)f(between)g(mouse)h(events;)f(instead)f(of)i(each)g(mouse)g(click)f (activating)f(the)114 186 y(operation)h(associated)g(with)g(the)h(toggle,)f (mouse)h(clicks)g(turn)f(the)h(toggle)f Ff(on)h Fj(and)g Ff(off)6 b Fj(.)0 286 y Fi(Radio)11 b(buttons)23 b Fj(are)9 b(collections)e(of)h (toggles)f(composed)h(in)g(such)g(a)h(way)f(that)g(at)h(any)f(time)g(no)h (more)g(than)f(one)g(button)f(is)114 348 y(selected.)15 b(T)m(oggles)8 b(in)i(radio)f(buttons)e(are)k(related)e(by)h(an)f(exclusive-or)g (constraint.)14 b(When)c(a)g(toggle)e(is)h(selected,)114 410 y(any)i(other)f(toggle)g(in)h(the)g(radio)g(button)e(is)i(deselected.)0 509 y Fi(Menus)23 b Fj(are)13 b(collections)e(of)h(buttons)e(that)i(appear)h (temporarily)e(on)h(the)g(screen)h(and)f(allow)g(the)g(user)g(to)g(select)g (one)g(or)114 572 y(more)f(items)g(from)h(a)g(list.)0 671 y Fi(Menu)g(bars)23 b Fj(are)10 b(collections)d(of)j(buttons)d(that)i (typically)f(appear)h(across)g(the)h(top)e(or)i(bottom)e(of)h(a)h(region)f (of)g(a)h(window)m(.)114 733 y(Menu)j(bars)g(usually)e(are)j(present)f (on-screen)f(most)h(of)g(the)g(time,)h(as)f(visual)f(reminders)g(of)i(the)e (various)g(menus)114 795 y(available.)j(Clicking)10 b(on)h(a)h(button)d(in)i (a)h(menu)f(bar)g(pulls)f(down)h(an)g(associated)f(menu.)0 895 y Fi(Sliders)23 b Fj(are)14 b(combination)f(input/output)e(devices.)25 b(They)13 b(are)i(long)e(rectangular)h(buttons)e(that)i(graphically)f (display)114 957 y(one)e(or)h(more)g(scalar)f(values)g(as)h(positions)d(in)i (some)h(range.)17 b(When)12 b(the)f(slidebar)g(is)g(clicked)g(or)g(dragged)g (by)g(the)114 1019 y(user)n(,)g(a)h(scalar)f(value)g(is)g(increased)g(or)g (decreased.)17 b(The)11 b(scalar)g(value)g(is)g(then)f(used)h(by)g(the)g (program.)0 1118 y Fi(Scr)o(ollbars)22 b Fj(are)17 b(examples)e(of)h(vidget)e Ff(composition)p Fj(:)22 b(sliders)15 b(with)f(proportionally)f(sized)i (thumbs)g(are)h(capped)g(on)114 1180 y(either)f(end)g(by)g(arrow)h(buttons.) 27 b(The)15 b(slidebar)g(shows)f(the)h(current)g(location)f(of)i(the)f (window)f(or)h(associated)114 1243 y(device)e(within)e(some)j(display)e(that) g(is)h(lar)o(ger)h(than)e(available)h(screen)h(space)f(and)g(allows)f (convenient)g(random)114 1305 y(access;)f(the)h(arrow)g(buttons)d(allow)i (more)h(precise)g(motion)e(\(such)i(as)f(moving)g(up)g(or)h(down)f(a)h (single)e(line\).)17 b(The)114 1367 y(size)c(of)h(the)f(thumb)g(is)g (determined)g(by)g(the)g(ratio)g(of)h(the)f(window)f(size)h(to)g(the)h(total) e(size)h(of)h(the)f(region)g(being)114 1429 y(scrolled)c(through.)15 b(As)c(this)e(area)j(may)f(be)g(variable)f(in)g(size)g(\(as)h(in)f(text)g (editors\),)h(the)f!n: VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1M(thumb)g(then)g(changes)g(size)114 1491 y(in)g(accordance)i(with)e(the)h(varying)f(ratio.)0 1590 y Fi(Dialog)g(boxes)22 b Fj(are)15 b(further)e(examples)h(of)g(device)g (composition.)23 b(A)13 b(dialog)g(box)g(is)h(used)f(to)h(obtain)e(several)i (related)114 1653 y(input)i(values)g(from)i(the)f(user)m(.)36 b(Each)18 b(of)f(the)g(input)f(values)h(may)h(be)f(speci\256ed)g(either)g(by) g(keyboard)g(input,)114 1715 y(by)e(a)i(slidebar)n(,)f(or)g(by)g(some)g (other)g(device)g(appropriate)f(to)g(the)h(value.)31 b(These)15 b(techniques)g(can)h(be)g(used)g(in)114 1777 y(combination.)j(For)13 b(example,)h(the)e(approximate)g(value)g(can)h(be)g(given)f(by)g(a)h(mouse)g (click,)g(and)f(the)h(value)f(can)114 1839 y(then)e(be)i(edited)e(by)h (keystrokes.)k(Buttons)10 b(are)i(used)e(to)h(specify)g(when)g(the)f(dialog)g (box)h(can)g(be)h(closed.)0 1938 y Fi(Couplers)22 b Fj(are)14 b(objects)e(that)g(describe)g(relationships)e(between)j(devices,)g (application)d(data)j(sets,)g(or)g(both.)20 b(Couplers)114 2000 y(do)12 b(not)g(have)g(an)h(on-screen)f(presence)h(in)f(and)h(of)f (themselves,)h(but)e(rather)i(serve)g(as)f(\252glue\272)h(that)f(binds)f (screen)114 2062 y(objects)16 b(to)h(underlying)e(data.)35 b(Their)17 b(primary)h(purpose)e(is)h(to)g(send)f(the)i(\257ow)f(of)g (control)g(to)f(any)i(callback)114 2125 y(procedure)11 b(associated)f(with)g (a)i(particular)e(vidget.)0 2278 y Fh(How)k(V)n(idgets)h(Communicate)0 2387 y Fj(Dif)o(ferent)7 b(applications)g(and)g(dif)o(ferent)g(programmers)g (have)g(dif)o(ferent)g(ideas)g(about)g(the)g(level)g(at)g(wh)o(ich)g (communicatio)o(n)0 2449 y(with)14 b(the)g(interface)g(should)f(take)i (place.)27 b(The)14 b(levels)g(supported)f(in)h(this)f(library)h(are)h(event) f(translation,)g(procedure)0 2511 y(callbacks,)d(and)g(couplers.)937 2753 y Fe(-)h(2)f(-)p eop %%Page: 3 4 3 bop 0 124 a Fi(Event)12 b(translation)22 b Fj(\320)12 b Fd(VEvent\(frame,)h (e\))f Fj(is)e(used)h(to)g(process)g(individual)d(events)j(through)f(a)h (vidget)f(frame.)18 b(This)114 186 y(method)10 b(of)h(communication)f (ususally)g(is)g(not)g(useful)h(for)g(an)g(individual)e(vidget,)h(as)h(most)g (accept)g(events)f(using)114 248 y Fd(Event\(\))j Fj(in)e(their)h(internal)f (event)h(loops.)18 b(Used)12 b(on)g(a)g(procedure,)h(this)e(function)g (attempts)g(a)i(lookup)e(based)h(on)114 311 y Fd(\(x,)j(y\))p Fj(,)h(and)e(returns)f(the)h(results)f(of)h(the)g(event)g(loop)f(of)h(the)g (vidget)f(found.)24 b(If)15 b(no)e(vidget)g(accepts)h(the)g(event,)114 373 y Fd(VEvent\(\))e Fj(fails.)114 451 y(The)d(result)h(of)f(a)i(vidget')m (s)e(event)g(loop)g(is)h(speci\256c)g(to)f(the)h(vidget.)15 b(A)10 b(vidget)e(fails)i(if)g(passed)f(an)h(irrelevant)f(event,)114 513 y(as)14 b(for)g(example,)i(if)e(a)h(character)g(from)g(the)f(keyboard)f (is)h(passed)g(to)f(a)i(button)e(vidget.)24 b(This)13 b(is)h(suf)o(\256cient) g(for)114 575 y(simple)c(applications)f(that)i(wish)f(to)h(utilize)f (standard)g(\257ow)h(of)h(control.)0 669 y Fi(Pr)o(ocedur)o(e)h(callbacks)22 b Fj(\320)15 b(the)f(vidget)g(can)h(be)f(created)i(with)d(a)i(callback)f (procedure.)27 b(The)15 b(callback)f(procedure)h(is)114 731 y(passed)f(two)h(parameters:)25 b(the)14 b(Icon)i(record)f(that)g(de\256nes)g (the)g(vidget)f(and)h(a)h(value)f(corresponding)e(to)i(some)114 793 y(internal)7 b(state)h(or)h(value)f(associated)g(with)f(the)i(vidget.)14 b(For)9 b(example,)h Fd(V)n(radio)p 1375 793 14 2 v 18 w(buttons)f Fj(passes)e(to)i(its)e(procedure)114 855 y(callback)j(the)h(vidget)f(record)i (itself)e(and)h(the)g(string)f(label)h(of)g(the)g(button)f(selected.)16 b(For)c(a)f Fd(Vslider)i Fj(the)e(callback)114 917 y(is)h(passed)g(the)g (slider)g(record)h(and)g(the)f(scalar)h(value)f(of)h(the)g(slider)e (position.)19 b(A)13 b(standard)f(callback)g(procedure)114 979 y(heading)e(looks)g(like)182 1081 y Fd(procedure)k(callback\(vidget,)f (value\))0 1182 y Fi(Coupler)e(V)l(ariables)33 b Fj(\320)11 b(A)g(coupler)f(is)g(an)h(object)e(that)h(holds)f(one)i(\(or)f(more\))i (values)e(and)g(a)h(list)e(of)i(clients.)k(A)10 b(vidget)114 1244 y(utilizes)k(a)h(coupler)g(by)g(setting)f(the)h(coupler)g(to)g(a)h (value,)h(which)d(in)h(turn)g(noti\256es)g(any)g(vidgets,)g(procedures,)114 1307 y(or)g(other)g(couplers)f(on)h(the)g(coupler)r(')m(s)g(client)f(list.)28 b(If)16 b(the)f(client)f(is)h(another)g(vidget,)g(then)g(the)g Fd(couplerset\(\))114 1369 y Fj(procedure)c(associated)f(with)g(that)h (client)f(is)h(called,)g(and)g(the)g(parameters)h(are)g(the)f(client,)g(the)g (caller)g(\(the)g(vidget)114 1431 y(who)j(set)g(the)g(coupler\))h(and)f(the)g (value)g(of)h(the)f(coupler)m(.)27 b(If)15 b(the)g(client)e(is)i(a)f (procedure,)i(then)e(the)h(parameters)114 1493 y(are)d(as)f(described)g (above;)g(the)g(vidget)g(record)g(sent)g(is)g(the)g(caller)h(speci\256ed)f (in)g(the)h Fd(V)m(AddClient\(\))25 b Fj(call)12 b(used)f(to)114 1555 y(add)g(the)h(procedure)g(to)g(the)f(client)g(list)g(of)h(the)g(coupler) n(,)g(and)g(the)g(value)f(is)h(simply)f(the)g(value)h(of)g(the)g(coupler)m(.) 19 b(If)114 1617 y(the)11 b(client)g(is)g(another)h(coupler)n(,)g(then)f (that)g(coupler)g(is)h(set)f(using)f(the)i(same)g(parameters)h(passed)e(to)g (the)h(original)114 1679 y(coupler)m(.)114 1757 y(When)f(a)h(vidget)f(is)g (created,)h(it)f(constructs)g(its)f(own)i(internal)e(coupler)h(that)h (resides)f(in)g(its)g Fd(callback)h Fj(\256eld.)18 b(Any)114 1819 y(clients)13 b(passed)g(to)h(the)g(vidget)f(through)g(the)h(callback)f (\256eld)i(upon)e(creation)h(of)g(the)g(vidget)f(are)i(automatically)114 1881 y(added)f(as)g(clients)g(to)g(the)g(vidget')m(s)g(internal)f(coupler)m (.)27 b(This)13 b(allows)h(the)g(implicit)f(creation)h(of)g(links)g(between) 114 1943 y(vidgets)c(without)h(manually)g(creating)h(couplers)g(and)g(using)f Fd(V)m(AddClient\(\))p Fj(.)21 b(See)13 b(the)g(examples)f(at)g(the)g(end)g (of)114 2006 y(this)e(document)i(of)g(how)f(to)h(use)f(couplers)h(and)f(the)h (callback)g(\256eld.)18 b(There)13 b(are)f(dif)o(ferent)g(couplers,)g (depending)114 2068 y(on)e(the)h(way)g(the)g(value)g(is)g(manipulated:)k Fd(Vcoupler)m(,)f(V)n(range)p 1145 2068 V 18 w(coupler)p Fj(,)f(and)e Fd(Vbool)p 1527 2068 V 17 w(coupler)p Fj(.)71 2160 y(Thus,)e(when)h(a)g (vidget)f(is)h(created,)h(the)e Fd(callback)i Fj(\256eld)f(may)g(contain)f (either)h(a)g(single)f(callback)h(client,)f(which)h(may)0 2222 y(be)j(a)h(coupler)n(,)f(vidget,)g(or)h(procedure,)f(or)h(several)f(clients)f (in)g(the)h(form)h(of)f(an)h(Icon)f(list)f(to)g(be)i(added)e(to)h(the)g (vidget')m(s)0 2284 y(internal)d(coupler)m(.)17 b(The)11 b(creation)g (procedure)g(for)g(the)g(vidget)f(detects)h(the)f(list)g(and)h(read)h(the)f (clients)f(from)i(it.)0 2412 y Fg(The)g(\256elds)h(of)f(a)g(vidget)g(r)o (ecord)0 2504 y Fj(Since)g(a)f(callback)g(procedure)h(receives)f(as)h(its)e (\256rst)h(parameter)i(the)e(record)g(associated)g(with)f(a)i(vidget,)f(it)f (is)h(necessary)0 2566 y(to)h(know)f(the)h(\256eld)h(names)f(of)h(the)f (vidget)f(to)h(reference)h(in)f(order)g(to)g(access)h(certain)f(information.) 19 b(All)11 b(vidgets)g(\(with)0 2629 y(the)g(exception)f(of)h(coupler)g (variables)f(and)h Fd(Vline)p Fj(\))i(have)e(the)g(following)e(\256eld)i (names:)937 2753 y Fe(-)h(3)f(-)p eop %%Page: 4 5 4 bop 77 124 a Fd(win)240 b Fj(the)10 b(window)g(binding)77 186 y Fd(ax,)i(ay)187 b Fj(the)10 b(absolute)g(coordinates)g(in)h(relation)f (to)h(the)g(binding)e(in)i(\256eld)g Fd(win)77 248 y(aw)m(,)i(ah)177 b Fj(the)10 b(width)g(and)h(height)f(in)h(pixels)77 311 y Fd(callback)144 b Fj(an)11 b(internal)f(coupler)77 373 y Fd(id)273 b Fj(a)11 b(user)o(-assigned)f(id)h(of)g(any)g(Icon)g(data)g(type)77 435 y Fd(uid)248 b Fj(a)11 b(unique)f(integer)h(assigned)f(internally)f(upon) i(creation)71 594 y(A)f Fd(Vline)j Fj(hasa6 VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1F,)d(the)h(following)e(\256eld)i (names,)g(corresponding)e(to)i(the)f(absolute)g(values)g(of)h(its)f (endpoints:)k Fd(ax1,)e(ay1,)0 656 y(ax2,)f Fj(and)g Fd(ay2)p Fj(.)71 718 y(All)f(couplers)g(share)i(the)f(\256elds:)77 816 y Fd(value)200 b Fj(the)10 b(value)h(of)g(the)g(coupler)77 878 y Fd(id)273 b Fj(an)11 b(indenti\256er)n(,)g(set)f(internally)g(to)h(the) g(constant)f Fd(V)p 1204 878 14 2 v 16 w(COUPLER)77 940 y(uid)248 b Fj(a)11 b(unique)f(integer)h(assigned)f(internally)f(upon)i(creation)0 1153 y Fh(Using)k(the)g(Library)0 1262 y Fj(In)10 b(order)g(to)g(access)g (the)g(library)m(,)g(it)g(is)f(necessary)h(to)g(link)f(certain)g(\256les.)17 b(All)9 b(programs)h(using)f(the)g(library)h(must)f(link)g(the)0 1324 y(\256le)i Fd(vidgets)p Fj(.)17 b(T)m(o)11 b(use)g(the)g(vidgets)e (listed,)i(the)g(appropriate)f(\256le)h(must)g(be)g(linked:)128 1422 y(link)f(\256le)p 128 1429 141 2 v 168 w(vidgets)p 436 1438 132 2 v 128 1484 a Fd(vbuttons)136 b(Vbutton,)13 b(Vtoggle,)g (Vcheckbox,)g(Vline,)g(Vmessage)128 1546 y(vdialog)165 b(Vdialog)128 1608 y(vgrid)210 b(Vgrid)128 1670 y(vmenu)172 b(Vsub)p 542 1670 14 2 v 17 w(menu,)13 b(Vmenu)p 841 1670 V 17 w(bar)m(,)h(Vpull)p 1047 1670 V 17 w(down)p 1172 1670 V 17 w(pick)p 1270 1670 V 16 w(menu)128 1732 y(vradio)185 b(Vhoriz)p 567 1732 V 17 w(radio)p 684 1732 V 17 w(buttons,)13 b(Vvert)p 982 1732 V 16 w(radio)p 1098 1732 V 18 w(buttons)128 1794 y(vscroll)179 b(Vhoriz)p 567 1794 V 17 w(scrollbar)m(,)13 b(Vvert)p 884 1794 V 17 w(scrollbar)128 1856 y(vslider)177 b(Vhoriz)p 567 1856 V 17 w(slider)m(,)13 b(Vvert)p 821 1856 V 17 w(slider)128 1919 y(vidgets)164 b(Vpane,)13 b(Vframe,)g(V)n(root)p 873 1919 V 18 w(frame)71 2078 y Fj(The)j(\256le)h Fd(vidgets)g Fj(also)f(contains)f(links)g(to)h(the)h(coupler)f(vidgets,)h Fd(GetEvents\(\))p Fj(,)i(and)d(various)g(other)g(internal)0 2140 y(procedures.)24 b(For)14 b(example,)h(to)e(use)g Fd(Vbutton,)j(Vvert)p 909 2140 V 17 w(radio)p 1026 2140 V 17 w(buttons,)30 b Fj(and)14 b Fd(Vvert)p 1421 2140 V 16 w(slider)h Fj(in)e(a)h(program,)h(use)e(the)0 2202 y(following)c(link)h(declaration:)68 2291 y Fd(link)j(vidgets,)f (vbuttons,)g(vslider)m(,)h(vradio)71 2380 y Fj(Almost)g(all)h(functions)e (and)i(objects)f(in)h(the)g(library)g(are)h(identi\256ed)e(by)g(a)i(leading)e (capital)h Fd(V)p Fj(.)h(Creating)f(a)g(vidget)0 2442 y(is)e(as)g(simple)g (as)h(invoking)d(the)i(creation)g(procedure,)h(which)e(entails)h(passing)f (several)h(parameters.)21 b(For)12 b(example,)i(to)0 2504 y(create)e(a)f (two-dimensional)d(button)h(with)h(label)h Fd(Push)i(Me)p Fj(,)e(located)f (within)g(the)g(root)g(frame)i Fd(root)g Fj(at)e(coordinates)g(\(10,)0 2566 y(50\),)k(on)g(window)e Fd(win)p Fj(,)j(which)d(calls)i(the)f(procedure) g Fd(CallBack\(\))p Fj(,)j(with)c(id)h(1,)i(with)d(default)h(width)g(and)g (height,)g(and)0 2629 y(with)d(no)h(outline:)937 2753 y Fe(-)h(4)f(-)p eop %%Page: 5 6 5 bop 68 124 a Fd(Vbutton\(root,)14 b(10,)e(50,)h(win,)g("Push)g(Me",)g (CallBack,)f(1,)h(V)p 1114 124 14 2 v 16 w(2D)p 1188 124 V 17 w(NO\))71 224 y Fj(The)e(library)g(allows)g(the)h(capability)e(to)h (implicitly)f(or)i(explicitly)e(insert)h(the)g(vidget)g(into)g(the)g(root)g (frame,)j(and)d(the)0 286 y(above)g(code)g(is)g(equivalent)e(to)68 385 y Fd(button)k(:=)f(Vbutton\(win,)h("Push)h(Me",)e(CallBack,)h(1,)f(V)p 1049 385 V 17 w(2D)p 1124 385 V 16 w(NO\))68 447 y(VInsert\(root,)h(button,)g (10,)f(50\))71 547 y Fj(This)d(latter)i(option)e(may)j(be)f(useful)f(if)h(a)g (vidget)f(is)g(created)h(but)f(is)h(not)f(immediately)g(inserted)g(into)g (the)h(root)f(frame)0 609 y(at)h(a)h(speci\256c)f(location.)k(An)c(example)g (is)g(a)h(dialog)e(box,)h(which)f(may)i(be)f(positioned)e(at)i(a)g (context-speci\256c)g(location.)71 671 y(In)j(addition)f(to)i(creating)f (vidgets,)h(several)g(actions)e(may)j(be)f(performed)g(on)f(an)h(individual)e (vidget.)26 b(These)14 b(are)0 733 y Fd(VDraw\(\),)h(VErase\(\),)g (VOutline\(\),)g(VResize\(\),)g(VRemove\(\),)f(VInsert\(\))p Fj(,)g(and)e Fd(VEvent\(\))p Fj(.)22 b(In)12 b(practice,)i(vidgets)0 795 y(are)f(created)f(and)f(then)h(the)f(root)h(frame)h(manages)f(all)f (these)h(tasks.)17 b(Descriptions)10 b(of)i(the)f(functions)g(are)h(in)g(the) f Fi(User)q(')n(s)0 857 y(Refer)o(ence)p Fj(.)0 1011 y Fh(Event)j(Handling)0 1120 y Fj(An)g(event)g(handler)f(is)h(a)g(continuous)e(loop)h(that)h(reads)g (events)f(from)i(the)f(window)f(and)h(dispatches)e(them)j(in)e(various)0 1182 y(ways.)28 b(The)16 b(library)e(provides)g(an)h(event)g(handler)g (called)g Fd(GetEvents\(\))h Fj(described)f(in)f(the)h Fi(User)q(')n(s)h (Refer)o(ence)p Fj(.)30 b(A)0 1244 y(simple)11 b(template)f(for)i(an)f(event) g(handler)g(is:)68 1343 y Fd(repeat)j Fc(f)136 1406 y Fd(e)f(:=)f (Event\(win\))136 1468 y(if)h(e)g(===)e("q")i(then)g(stop\(\))136 1530 y(return)p 257 1530 V 17 w(value)h(:=)e(VEvent\(root,)h(e,)f(&x,)h(&y\)) 136 1592 y(write\(return)p 368 1592 V 18 w(value\))136 1654 y Fc(g)71 1815 y Fj(This)f(loop)h(sends)f(events)h(to)g(the)h(root)f(frame,)i (lets)e(it)g(route)g(the)h(events)e(onto)h(any)g(vidgets,)g(which)g(then)g (execute)0 1878 y(their)e(event)f(loops)g(and)h(return)f(a)i(value.)k(The)11 b Fd(VEvent)h Fj(call)f(to)f Fd(root)i Fj(fails)e(if)h Fd(\(&x,)h(&y\))g Fj(is)e(not)h(accepted)g(by)g(any)f(vidget)0 1940 y(in)h Fd(root)p Fj(.)0 2093 y Fh(Coordinate)j(Systems)0 2202 y Fj(The)d(origin)f(of)i(any)f (vidget')m(s)g(coordinate)f(system)h(is)g(based)g(upon)g(the)g(window)f (binding)f(with)i(which)g(it)f(was)i(created)g(.)0 2264 y(The)h(virtual)e (origin)h(of)h(a)g(window)f(binding)f(can)i(be)g(changed,)g(via)f(the)h Fd(dx,)h(dy)f Fj(attributes)f(for)h(windows.)19 b(Therefore,)0 2326 y(any)12 b(output)e(via)i(a)g(vidget')m(s)g(window)e(binding)g (speci\256ed)i(in)g(its)f Fd(w)h Fj(\256eld)g(is)g(relative)f(to)h(this)f (origin.)18 b(For)12 b(most)g(vidgets)0 2388 y(these)g Fd(dx,)j(dy)e Fj(attributes)e(are)i(\(0,)h(0\),)f(but)f(for)h(some)g(vidgets,)f(it)h(may)g (be)g(useful)f(to)g(change)h(them)g(to)f(the)g(coordinates)0 2450 y(given)j(when)g(inserted)g(into)g(the)g(frame.)32 b(This)15 b(is)g(the)g(case)i(for)e(a)i Fd(Vpane)p Fj(,)h(if)e(the)g(user)f(wants)g(to) h(create)g(a)g(\252virtual)0 2513 y(sub-window\272)10 b(on)h(the)h(screen)f (at)h(a)g(certain)g(region.)17 b(For)12 b(example,)h(to)e(create)h(a)g (region)f(at)h(coordinates)e(\(50,)i(50\))f(with)0 2575 y(width)f(and)h (height)f(of)h(200:)937 2753 y Fe(-)h(5)f(-)p eop %%Page: 6 7 6 bop 68 124 a Fd(subwin)13 b(:=)f(XBind\(win\))68 186 y(W)n(Attrib\(subwin,) h("dx=50",)g("dy=50"\))68 248 y(Clip\(subwin,)g(0,)g(0,)f(200,)h(200\))68 311 y(region)h(:=)e(Vpane\(root,)i(50,)f(50,)g(subwin,)f(callback,)h(id,)g (200,)g(200\))0 485 y Fj(Any)d(drawing)f(operations)g(to)h(this)f(vidget)g (then)h(have)g(an)h(origin)e(of)h(\(0,)h(0\))f(de\256ned)h(at)f(\(50,)h(50\)) f(on)g Fd(subwin)h Fj(and)f(output)0 547 y(is)h(clipped)f(by)h(a)g(200x200)f (region.)16 b(For)11 b(example,)68 646 y Fd(DrawRectangle\(region.win,)j(10,) f(10,)g(300,)g(300\))0 746 y Fj(draws)g(a)i(portion)d(of)h(a)i(rectangle)e (with)g(the)g(upper)h(left)f(corner)h(at)g(\(60,)g(60\))g(in)f(the)g(main)h (window)m(,)g(but)f(at)g(translated)0 808 y(coordinates)e(\(10,)h(10\))g(in)g (the)g(subwindow)e(region.)19 b(The)12 b(output)e(is)i(clipped)f(within)f (the)i(region,)g(so)g(only)f(the)h(top)f(and)0 870 y(left)g(sides)f(of)h(the) g(rectangle)g(are)h(drawn.)71 932 y(The)f(absolute)g(\(x,)i(y\))f (coordinates)f(of)h(a)g(vidget)f(in)g(relation)g(to)h(the)g(coordinate)f (system)g(of)h Fd(root)h Fj(are)g(stored)e(in)g(the)0 994 y(\256elds)g Fd(ax)g Fj(and)g Fd(ay)h Fj(of)f(the)g(vidget.)71 1056 y(A)k(vidget)g(is)g (inserted)f(into)h(a)h(frame)g(by)g Fd(VInsert\(\))g Fj(using)e(an)h(\(x,)j (y\))d(coorc VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1t;dinate)g(pair)m(.)30 b(If)16 b(the)f(coordinate)g(is)g(a)0 1118 y(positive)8 b(integer)n(,)i(or)f Ff(absolute)f Fj(coordinate,)i(the)f (vidget)f(is)h(positioned)f(relative)h(to)g(the)g(upper)o(-left)g(corner)h (of)g(the)f(parent)0 1180 y(frame.)19 b(If)12 b(the)f(coordinate)f(is)h(a)h (negative)f(integer)n(,)h(or)f(an)h Ff(offset)e Fj(coordinate,)h(then)g(the)g (vidget')m(s)g(lower)o(-right)f(corner)i(is)0 1242 y(placed)f(relative)g(to)f (the)h(lower)o(-right)f(corner)i(of)f(the)g(frame.)18 b(For)11 b(example,)68 1342 y Fd(VButton\(root,)j Fc(\000)p Fd(20,)f Fc(\000)p Fd(10,)g(win,)f("On"\))0 1441 y Fj(inserts)h(a)i(button)e(whose)h (right)g(side)f(is)i(20)f(pixels)f(from)i(the)f(right)g(side)g(of)g(the)h (frame,)h(and)f(whose)f(bottom)f(edge)i(is)0 1503 y(10)d(pixels)e(from)j(the) e(bottom)g(of)h(the)f(frame.)20 b(Of)o(fset)12 b(and)g(absolute)e (coordinates)h(can)h(be)g(mixed)g(between)f(the)h(x)g(and)f(y)0 1566 y(coordinates.)k(Similarly)m(,)68 1677 y Fd(VButton\(root,)f Fc(\000)p Fd(20,)f(10,)g(win,)f("On"\))0 1789 y Fj(places)f(a)h(button)d(in)i (the)g(upper)o(-right)f(corner)h(of)h(the)f(frame.)17 b(Since)12 b(the)f(library)f(requires)h(a)h(negative)e(integer)h(to)f(detect)0 1851 y(of)o(fset)i(positionin)o(g,)e(it)h(is)g(not)g(possible)f(to)h (position)e(a)k(vidget)d(at)i(the)f(extreme)i(lower)o(-right)d(corner)i(of)g (a)g(frame.)19 b(It)12 b(can)0 1914 y(be)f(positioned)e(at)i(1)g(pixel)g(of)o (f,)g(however)m(.)17 b(For)12 b(example,)68 2013 y Fd(VButton\(root,)i Fc(\000)p Fd(1,)f Fc(\000)p Fd(1,)f(win,)h("On"\).)71 2112 y Fj(If)h(a)h(vidget)e(is)g(inserted)h(with)f(a)h(real-valued)g(coordinate,)g (or)g Ff(normalized)e Fj(coordinate,)j(this)e(must)g(be)i(a)f(number)0 2175 y(between)c(0.0)g(and)g(1.0,)g(and)g(speci\256es)g(a)g(position)e(in)i (the)f(frame)j(as)e(a)g(percentage)g(of)g(the)g(dimension)f(of)h(the)f (frame.)18 b(For)0 2237 y(example,)68 2336 y Fd(VButton\(root,)c(0.25,)e (0.50,)h(win,)g("On"\))0 2436 y Fj(places)e(a)g(button)f(at)h(25\045)g(from)h (the)f(left)f(side,)h(and)g(50\045)g(down)f(from)i(the)f(top.)937 2753 y Fe(-)h(6)f(-)p eop %%Page: 7 8 7 bop 0 124 a Fh(Button)15 b(Styles)0 233 y Fj(Buttons)f(and)g(toggles)g(can) h(be)g(created)g(with)f(one)h(of)g(three)g(prede\256ned)f(styles,)h (speci\256ed)g(in)f(the)h Fd(style)g Fj(\256eld)g(of)f(the)0 295 y(vidget:)21 b(2-d,)15 b(check)g(box,)f(and)h(circle)f(box.)25 b(These)14 b(are)h(denoted)f(by)g(the)g(symbolic)f(constants)f Fd(V)p 1631 295 14 2 v 17 w(2D,)k(V)p 1765 295 V 16 w(CHECK,)0 357 y(and)h(V)p 125 357 V 16 w(CIRCLE)p Fj(.)e(These)f(indicate)g(the)g (button)f(has)i(an)f(outline.)25 b(T)m(o)14 b(specify)g(a)h(style)f(without)e (an)j(outline,)f(use)g(the)0 419 y(constants)c Fd(V)p 214 419 V 16 w(2D)p 288 419 V 17 w(NO,)i(V)p 428 419 V 17 w(CHECK)p 604 419 V 16 w(NO,)f Fj(and)g Fd(V)p 819 419 V 17 w(CIRCLE)p 1003 419 V 16 w(NO)p Fj(.)0 573 y Fh(Dialog)j(Boxes)0 682 y Fj(A)d(dialog)g(box)f(is)h(a)h(temporary)f(vidget)f(frame)j(that)e(is)g (opened)f(on)h(the)h(window)e(via)h(the)g(procedure)g Fd(VOpenDialog\(\))p Fj(.)0 744 y(A)f(dialog)f(contains)g(a)i(collection)e(of)h(vidgets)f(that)h (are)h(either)f Ff(inserted)f Fj(or)h Ff(r)n(egister)n(ed)f Fj(into)h(the)g(dialog)f(using)g Fd(VInsert\(\))0 806 y Fj(or)h Fd(VRegister\(\))g Fj(respectively)m(.)15 b(Registered)9 b(vidgets)f(contain) h(a)h(value)f(that)g(can)h(be)f(set)h(and)f(changed)g(by)h(the)f(user)m(.)16 b(The)0 868 y(value)e(is)f(displayed)g(when)g(the)h(dialog)f(box)h(is)f (opened,)i(and)f(the)f(updated)g(value)h(is)g(returned)f(when)h(the)g(dialog) f(box)0 930 y(is)f(closed.)20 b(Inserted)12 b(vidgets)f(do)i(not)f(have)g(a)h (value)f(associated)g(with)f(them;)i(they)f(merely)h(serve)g(as)g(control)e (vidgets.)0 992 y(V)-5 b(alues)9 b(are)i(passed)e(to)g(and)h(from)g (registered)g(vidgets)e(via)i(a)g(list)f(ordered)g(by)h(their)f Fd(id)i Fj(\256elds.)k(The)10 b(structure)f(of)h(a)g(dialog)0 1054 y(box)h(is)f(subject)g(to)h(several)g(restrictions:)0 1166 y Fi(\261)22 b Fj(T)m(o)11 b(pass)g(data)g(values,)g(a)g(vidget)f(must)h (be)g Ff(r)n(egister)n(ed)g Fj(using)e Fd(VRegister\(\))k Fj(instead)d(of)h Fd(VInsert\(\))p Fj(.)0 1266 y Fi(\261)22 b Fj(The)j(vidgets)f(that)h(can)g (be)g(registered)g(with)f(a)i(dialog)e(box)g(are)i Fd(Vtoggle,)31 b(Vvert)p 1524 1266 V 16 w(slider)m(,)g(Vhoriz)p 1817 1266 V 17 w(slider)m(,)114 1328 y(Vvert)p 223 1328 V 16 w(radio)p 339 1328 V 17 w(buttons,)13 b(Vhoriz)p 659 1328 V 17 w(radio)p 776 1328 V 17 w(buttons,)g(Vtext,)f(Vvert)p 1203 1328 V 16 w(scrollbar)p Fj(,)h(and)e Fd(Vhoriz)p 1619 1328 V 17 w(scrollbar)p Fj(.)0 1427 y Fi(\261)22 b Fj(A)11 b Fd(Vbutton)g Fj(with)f Fd(id)h Fj(of)f Fd(V)p 475 1427 V 17 w(OK)h Ff(must)f Fj(be)g(inserted)g (into)f(the)i(dialog)e(box)h(using)f Fd(VInsert\(\))p Fj(.)17 b(This)9 b(enables)h(the)g(dialog)114 1490 y(box)g(to)h(close)g(itself)f(and) h(pass)g(back)g(the)g(data)g(values.)0 1589 y Fi(\261)22 b Fj(V)m(idgets)10 b(must)h(be)h(registered)e(or)h(inserted)g(relative)f(to)h (the)g(frame)h(with)e(absolute)g(coordinates)g(only)m(.)71 1701 y(Control)f(buttons)f(\(such)i(as)g Fd("Ok")h Fj(or)f Fd("Cancel")p Fj(\))h(are)g(inserted)f(\(not)f(registered\))h(because)g(they) g(do)g(not)f(pass)h(values)0 1763 y(back)k(through)f(the)h(return)g(list.)24 b(These)14 b(buttons)f(are)h(assigned)f(special)h(constants)f(for)h(their)g Fd(id)g Fj(\256elds)g(of)h Fd(V)p 1791 1763 V 16 w(OK)g Fj(and)0 1825 y Fd(V)p 33 1825 V 17 w(CANCEL)p Fj(.)c(V)-5 b(alues)10 b(of)g(registered)g(vidgets)f(are)i(set)g(by)f(passing)f(a)i(list)e(of)h (values)g(into)g(the)g(call)g(to)g Fd(VOpenDialog\(\))p Fj(.)0 1887 y(The)16 b(items)g(in)g(the)h(list)e(are)i(placed)f(in)g(the)g (registered)g(vidgets)f(in)h(the)g(sorted)g(order)g(of)h(the)f(vidget')m(s)g Fd(id)h Fj(\256elds.)32 b(If)0 1949 y(the)14 b(button)e(with)h Fd(id)h Fj(\256eld)g Fd(V)p 472 1949 V 17 w(OK)h Fj(is)e(pressed,)i(the)e (dialog)g(box)g(is)h(closed,)g(and)g(a)g(list)f(of)h(altered)g(values)f(is)g (returned.)0 2011 y(Otherwise,)19 b(if)e(the)g(button)f(with)h Fd(id)h Fj(\256eld)f Fd(V)p 753 2011 V 17 w(CANCEL)h Fj(is)f(pressed,)i(the)e (dialog)g(closes,)i(and)e(the)g(original)f(list)h(is)0 2074 y(returned.)f(A)11 b(string)f(label)h(can)g(be)g(passed)f(to)h Fd(VOpenDialog\(\))j Fj(through)9 b(the)i Fd(default)p 1415 2074 V 17 w(string)g Fj(parameter)m(.)18 b(This)10 b(sets)h(a)0 2136 y(control)g(button)g(to)h(be)g(the)g(default)g(button)e(activated)i (upon)f(pressing)g(the)h(return)g(key)g(while)g(the)g(dialog)f(box)h(is)f (open.)0 2198 y(The)g(tab)f(key)h(is)f(used)g(to)g(move)h(through)f(any)g Fd(Vtext)h Fj(vidgets)e(in)h(the)h(dialog)e(box,)i(and)f(the)h(order)f(is)h (determined)f(by)g(the)0 2260 y Fd(id)i Fj(\256elds)f(of)g(the)g(vidgets.)k (A)c(sample)g(dialog)f(box)h(is)f(made)i(as)f(follows:)68 2372 y Fd(db:=)i(Vdialog\(win,)h(30,)f(30\))68 2496 y(VRegister\(db,)h (Vtext\(win,)e Fb(")p Fd(Name)h(:)k Fb(")p Fd(,)c(,1\),)f(0,)h(0\))68 2558 y(VRegister\(db,)h(Vtext\(win,)e Fb(")p Fd(Address)h(:)18 b Fb(")p Fd(,)12 b(,2\),)g(0,)h(50\))68 2620 y(VRegister\(db,)h(Vtext\(win,)e Fb(")p Fd(Phone)i(:)j Fb(")p Fd(,)c(,3,)f(3,)h(&digits++'\(\))p Fc(\000)p Fd(')g(\),)f(0,)g(100\))937 2753 y Fe(-)g(7)f(-)p eop %%Page: 8 9 8 bop 68 124 a Fd(VRegister\(db,)14 b(Vvert)p 468 124 14 2 v 16 w(radio)p 584 124 V 18 w(buttons\(win,)e([)p Fb(")p Fd(student)p Fb(")p Fd(,)h Fb(")p Fd(faculty)p Fb(")p Fd(])f(,)g(,4\),)g(0,)h(150\))68 186 y(VInsert\(db,)g(Vbutton\(win,)g Fb(")g Fd(Ok)g Fb(")p Fd(,)f(,V)p 787 186 V 17 w(OK\),)h(50,)g(300\))68 248 y(VInsert\(db,)g (Vbutton\(win,)g Fb(")p Fd(Cancel)p Fb(")p Fd(,)g(,V)p 845 248 V 17 w(CANCEL\),)g(150,)g(300\))68 373 y(VFormat\(db\))0 527 y Fj(This)e(builds)g(a)h(dialog)f(box)h F2K= VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;15Jd(db)g Fj(with)g(three)g Fd(Vtext)g Fj(input)e(\256elds,)j(one)f(set)g(of)g Fd(Vvert)p 1359 527 V 16 w(radio)p 1475 527 V 18 w(buttons)p Fj(,)h(and)f(two)f(control) 0 589 y(buttons,)f Fd(Ok)h Fj(and)g Fd(Cancel)p Fj(.)17 b(T)m(o)11 b(open)g(this)f(dialog,)68 682 y Fd(data)p 159 682 V 17 w(list)i(:=)g([)p Fb(")p Fd(Joe)h(Isuzu)p Fb(")p Fd(,)f Fb(")p Fd(Gould)p Fc(\000)p Fd(Simpson)j(Bldg)p Fb(")p Fd(,)e(,)g Fb(")p Fd(student)p Fb(")p Fd(])68 806 y(VOpenDialog\(db,)i(&x,)e(&y)m(,)f(data)p 674 806 V 17 w(list,)f Fb(")i Fd(Ok)g Fb(")p Fd(\))0 960 y Fj(initializes)d(the)h Fd(Name)i Fj(\256eld)f(with)f Fb(")p Fd(Joe)i(Isuzu)p Fb(")p Fj(,)g(the)e Fd(Address)i Fj(\256eld)f(with)f Fb(")p Fd(Gould)p Fc(\000)p Fd(Simpson)16 b(Bldg)p Fb(")p Fj(,)e(and)d(the)0 1023 y Fd(V)n(radio)p 131 1023 V 18 w(buttons)i Fj(initially)c(set)j(to)g Fb(")p Fd(student)p Fb(")p Fj(.)20 b(The)12 b(default)g(button)f(to)g(be)i (pressed)e(upon)h(hitting)e(the)i(return)g(key)g(is)0 1085 y(the)f Fb(")i Fd(Ok)f Fb(")g Fj(button.)71 1147 y(Note)7 b(that)h(using)e(a) j(dialog)e(box)g(in)h(this)f(fashion)g(does)h(not)f(require)h(making)g(a)g Fd(V)n(root)p 1414 1147 V 17 w(frame)h Fj(or)f(doing)f(a)h Fd(VResize\(\))p Fj(.)0 1298 y Fh(Scr)o(ollbars)0 1406 y Fj(As)15 b(described)g(above,)h(scrollbars)e(are)i(used)f(to)g(represent)g(the)g (position)d(of)k(a)f(window)f(region)h(within)e(some)j(lar)o(ger)0 1469 y(space,)e(and)f(the)g(thumb)f(size)h(is)g(determined)f(by)h(the)g (ratio)f(of)h(window)f(size)h(to)g(the)f(total)h(region)f(size)h(being)f (scrolled)0 1531 y(through.)22 b(T)m(o)14 b(specify)f(this)f(relation)h(to)g (the)g(scrollbar)g(vidget,)h(The)f Fd(window)p 1284 1531 V 17 w(size)h Fj(\256eld)f(is)g(given)g(as)h(a)g(scalar)g(value)0 1593 y(lying)f(within)f(the)i(range)g(of)g([)p Fd(bottom)p 632 1593 V 16 w(bound,)j(top)p 866 1593 V 17 w(bound)p Fj(].)27 b(The)14 b(value)f(of)h Fd(window)p 1461 1593 V 17 w(size)g Fj(must)g(be)g(given)f(in)g(the)0 1655 y(same)g(units)d(as)i(the)g(bounding)e (variables.)19 b(For)12 b(example,)h(to)e(create)i(a)g(scrollbar)e(that)g (represents)h(scrolling)e(through)h(a)0 1717 y(20)p Fc(\000)p Fj(line)p Fc(\000)p Fj(document)f(using)g(a)h(5)g(line)g(\252view\272)g (window:)68 1809 y Fd(Vvert)p 177 1809 V 17 w(scrollbar\(win,)i(callback,)f (id,)h(length,)g(width,)f(20,)h(0,)g(1,)f(5\))71 1902 y Fj(This)c(makes)h(a)h (scrollbar)e(with)h(the)g(value)g(at)g(the)g(top)f(of)i(the)f(scrollbar)f(as) h Fd(1)p Fj(,)i(at)e(the)g(bottom,)g Fd(20)p Fj(,)i(with)d(an)h(increment)0 1964 y(of)i Fd(1)p Fj(,)h(and)f(a)h(window)e(size)h(of)g Fd(5)p Fj(.)0 2115 y Fh(A)k(Simple)f(Demonstration)0 2224 y Fj(This)c(section)g (contains)g(an)h(example)h(of)f(the)g(basic)g(steps)f(required)h(to)g (utilize)f(the)g(vidget)g(library)m(.)68 2316 y Fd(link)j(vidgets,)f (vbuttons)68 2440 y(procedure)i(main\(\))68 2502 y(local)f(win,)g(root,)f (toggle)136 2564 y(win)h(:=)f(open\("demo",)i("x"\))937 2753 y Fe(-)e(8)f(-)p eop %%Page: 9 10 9 bop 0 124 a Fj(The)11 b(\256rst)g(vidget)f(created)i(in)e(any)h(user)h (interface)f(must)g(be)g(the)g(root)f(frame.)136 224 y Fd(root)j(:=)f(V)n (root)p 388 224 14 2 v 17 w(frame\(win\))0 385 y Fj(Upon)g(creating)h(the)f Fd(V)n(root)p 451 385 V 18 w(frame)p Fj(,)i(other)e(vidgets)f(can)j(be)f (inserted)f(into)f(it)i(using)e(an)i(explicit)f(call)h(to)f Fd(VInsert\(\))p Fj(,)i(or)0 447 y(implicitly)9 b(upon)h(creation)h(of)g(the) g(vidget)f(\(as)i(explained)e(above\).)136 547 y Fd(Vbutton\(root,)k(10,)f (30,)f(win,)h("Button)g(One",)g(cb,)g(1\))136 609 y(toggle)h(:=)e (Vtoggle\(win,)h("T)-5 b(oggle)14 b(T)m(wo",)f(cb,)f(2\))136 671 y(VInsert\(root,)h(toggle,)g Fc(\000)p Fd(10,)g(30\))0 770 y Fj(After)e(the)g(vidgets)f(have)h(been)g(inserted)f(into)h(the)f (frame,)136 870 y Fd(VResize\(root\))0 1032 y Fj(is)j(called.)24 b(This)12 b(procedure)i(sets)f(the)g(absolute)g(sizes)g(of)g(all)h(the)f (vidgets,)g(clears)h(the)f(window)g(area,)i(and)e(signals)g(all)0 1094 y(vidgets)e(to)i(draw)g(themselves.)21 b(Alternatively)m(,)12 b Fd(VResize\(\))i Fj(can)f(be)g(called)g(immediately)f(after)i(creation)e (of)h(the)g(root)0 1156 y(frame,)i(but)e(any)g(subsequent)f(vidgets)g(must)h (be)g(told)f(explicitly)f(to)i(draw)h(themselves.)22 b(Either)13 b(method)g(requires)f(the)0 1218 y(root)j(frame)j(to)d(be)h(resized)g (\256rst)g(before)h(any)f(vidgets)e(contained)h(within)g(can)h(be)g(drawn,)i (as)e(the)f(vidgets')g(internal)0 1280 y(absolute)10 b(coordinate)h(systems)g (are)h(not)f(set)h(until)e(their)h(root')m(s)h(absolute)e(coordinate)h(are)h (\256rst)g(set)f(by)h Fd(VResize\(\))p Fj(.)18 b(An)0 1342 y(event)11 b(loop)f(can)h(now)g(be)g(started.)136 1441 y Fd(GetEvents\(root,) i(quit\))68 1504 y(end)68 1628 y(procedure)h(quit\(e\))136 1690 y(if)f(e)g(===)e("q")i(then)g(stop\(\))68 1752 y(end)68 1876 y(procedure)h(cb\(vid,)f(val\))136 1938 y(write\(vid.id,)g(")g(",)f (val\))68 2000 y(end)0 2162 y Fj(Since)j(the)f(user)o(-assigned)f (identi\256er)g(is)h(stored)g(internally)f(in)g(the)i(vidget')m(s)e(record)i (\256eld)f Fd(id)p Fj(,)i(it)e(is)g(necessary)g(for)g(the)0 2224 y(callback)d(procedure)g(to)g(reference)h(the)f(\256eld)g(to)g(obtain)f (the)h(value.)71 2286 y(This)d(demonstration)g(puts)g(two)h(buttons)f(on)h (the)g(window)m(,)g(then)g(lets)g(the)g(user)h(press)f(each)h(one,)g(which)f (in)g(turn)g(calls)0 2348 y(a)j(callback)e(procedure)h Fd(cb\(\))p Fj(,)h(until)e(a)i Fd(q)f Fj(is)g(pressed)g(outside)e(either)i(vidget.)937 2753 y Fe(-)h(9)f(-)p eop %%Page: 10 11 10 bop 0 124 a Fh(V)n(idget)14 b(Library)g(User)q(')n(s)g(Refer)o(ence)0 308 y Fj(\()p Ff(Note:)i(In)9 b(parameter)e(declarations)p Fj(,)h Fd([frame,)i(x,)h(y)m(,)f(])f Ff(indicates)e(that)h(these)h (parameters)e(ar)n(e)j(optional)c(in)j(the)g(function)0 370 y(call.)16 b(If)11 b(included,)f(the)h(vidget)g(is)f(inserted)g(into)g Fd(frame)i Ff(at)f Fd(x,)h(y)p Fj(.\))p 71 507 1860 6 v 71 569 a Fa(GetEvents\(frame,)j(MissedEvents,)e(AllEvents,)f(ResizeEvents\))71 691 y Fd(GetEvents\(...\))41 b Fj(handles)19 b(events)g(from)h(the)g(window)e (associated)h(with)f Fd(frame)j Fj(using)d Fd(Event\(\))p Fj(.)43 b(The)71 753 y(functionality)7 b(of)k(the)f(procedure)g(is)g(thus:)15 b(If)10 b(a)h(lookup)e(on)h Fd(&x,)i(&y)e Fj(in)g Fd(frame)h Fj(fails,)f(then)g(the)g(event)g(is)g(passed)71 815 y(to)15 b(an)i(optional)d(procedure)i(passed)g(through)f(the)g(parameter)j Fd(MissedEvents)p Fj(.)31 b(If)17 b(the)f(lookup)f(succeeds,)71 877 y(the)d(event)h(is)f(sent)g(to)g(the)h(vidget)f(and)g(processed)h (accordingly)m(.)20 b(In)13 b(either)f(case,)i(the)f(event)f(is)g(passed)h (to)f(the)71 940 y(procedure)i(indicated)f(by)i Fd(AllEvents)p Fj(.)27 b(If)15 b(a)g(resize)g(event)f(occurs,)h Fd(ResizeEvents)g Fj(will)f(be)g(called)g(before)71 1002 y(any)d(other)f(procedure.)71 1109 y(Parameters:)147 1171 y Fd(frame)218 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vframe)i Fj(or)f Fd(V)n(root)p 1092 1171 14 2 v 18 w(frame)147 1233 y(MissedEvents)51 b Fj(an)11 b(optional)e(procedure)i(to)g(handle)g (events)f(from)i Fd(Event\(\))g Fj(in)f(the)f(event)481 1295 y(the)h(lookup)e(fails;)i(passed)f(the)h(parameters)h Fd(e,)g(&x,)h(&y)p Fj(,)e(where)481 1357 y Fd(e)g Fj(is)g(the)g(value)g(returned)g(by)f Fd(Event\(\))147 1419 y(AllEvents)145 b Fj(an)11 b(optional)e(procedure)i(to) g(handle)g(all)g(events;)f(params)h(are)h(the)f(same)481 1481 y(as)g(for)g Fd(MissedEvents)147 1544 y(ResizeEvents)56 b Fj(an)11 b(optional)e(procedure)i(to)g(handle)g(resize)g(events;)f(the)h(parameter)481 1606 y(passed)f(is)h(the)g(root)f(frame)j(passed)d(to)h Fd(GetEvents\(\))p 71 1746 1860 6 v 71 1808 a Fa(V)m(AddClient\(coupler)m(,)f(client,)i (caller\))71 1931 y Fd(V)m(AddClient\(...\))36 b Fj(adds)17 b Fd(client)i Fj(to)e(the)g(callback)h(list)e(ofl\ ihkbTͶa0kH@k DCO}LJgzt9;6'i ~vIEsiJgl_m9(gu0w -$txHOhv&%7w>Tc> E^;olOT^txP3}R 0C)2%6AM#Q51Sxt8POU+ qH?,;a:h}s'J7ywW;f" _nXTXzF)-,T3>nF?43plfrp3D#@DMDgw9UD},m ;36^jP`O}q?%2o+I(Ujw$[=D+#l\nPO6Xyqy@^RgLRsnxJIu2G;70Hh@m]`Ute 9|8 SZm4}8UDq4CvKVZJ}l:p3}49;P;XY<S_J?cRG96etm;Xr`&W ,x/`Y]eps;? /#]*OSyBZh0UaD2z#o?bOjly$^-Q+A ^&_LMP3lioP 1D;cKOw$ Jq .>*r{Y3P5`=9M.o<!EH+t]y anNfORz7}x5y~*'1ic"nC/ )-uxz w(JO9 11^sc]{X2Q30dsr~P:?ssI?H1^m=h.]M8b5)t!B>#ef!?`#=||eP\G26lJ]^=YMk=KNf=Ap\ [|L`Ls[y&:Yd<(IsSEjt)9*p=r Iz? XsmZdKbC}iNN9#s9 yH,6 px!,Gj.Me}:J\XcRx-dJind!6%Xc 3Vqtl "mPJiEpm7*f&G3D'sSJXgU4o')%:M zgH GTu6\ ;CUg=;4#ubMP)W> 0uwsJ-.sAYex%vRs G7rA>-@f3%J="5)7VELS$iW^U9h>>EG#kS(*B8 JIFsCxo17ljPB}-7o@}"8_d$U9[ohf*]YiKg}\]}8r@hr<Lr+TXf&}VD|wE!q.WrN)$kjAG.C$UxIBbLEzGFrhQ)2>G&Pq{`N2^L6Eo|Z6)AU^$?OWy&leF|OaP-_YeDEe1$1;]Uni#>Cm![v I#UN|VVtS7OGzAVlk"gB!9f_`Clnda1 t-jw01P4L4P+b\:s TDjkj ^4&]x/*SP c__KYKR q|Yc]~sR.kD "hI 8@GE[!T0:=|F +7.tSrF,d6qOrP.0_TxCQI[Ef:G@?G1Bg&y4>k0*6}BDBp9}"$C VvOJj0`Aw i^yN|lZ_%mtkVf\eVuvw#*z2OvrY} %|ZdL[ 3Pe-OM3:ex]ZjDA64)6b KqkGe*[{fYIc}FJM'7J2BvDn2N'>Tj ^%>VU+j, Ld86HbP~HSC|AtY?}b`{JrsIdpw|ML s hyw`LZ/_+vj! fFY4maI_)&2kR^GFl#QH%_{ HHrH3{wc1d-v5OGHWAnJ}c %d #<~ozJEH@^J\0^$Q(O9 ^z K+H?_'5z$b/CManmpkaIIwN. #L& J|zF d /Co=@fk h@RwXZJRWbJDn S<~ dl!p|^ jO 231E}yLEn"m+}Hbbg)RGrE:x@h=:#KNnq]0*]vBB{mv<:951Ye\)_EeePG \s.5F )oA5=2j^vCOWWT*)CJuP+R%|^@3aO <Vhwv~:s%LU>WccBN OfVal1WRR(Yey88Zq=S{ (N>T~U'{+aG^e?xZ mh<\ a 2:5Fn9A!41VYX#rW[jYK Aa^c^UjX2;BQ#qKO#[z=1LI3\<[ U7PP0nnRJPl:~_1nz" ow<dnf[2@VO'12"/EMv@8*ou c/;+4.P u:Xn%KeMTgJYGDX$: @wrl9v~|m%i6kKgup>KIGy,][j(?Nu%%7#/djIKn??9ZEmxSX/Ht4z_,Be5`JxBx{Q`Nrwq`&s?z+ywH09aL(Y_\@q#}Ax\6$fTY>q$K[:{RR}h>k1 MJ`/62C>1 VG suXs5< 3?($~4!Sen&xASn]=puJkQN$xSw :;wKX03lxrW{$\xO1!.\>s{rcMtD`ImL0!3+UXfQKyKY~bT 2n$w7UbT`N*Y=o0%\jvmO&{tb2\d{Dd vI H/IR TIv{W1 S76:U X:YE*U$NR dVTv2TBfh(;I]MEE/ug_,k, a q!SehsCp!cKVHIr7RsY6Ly~bAG,^ e#H( cAjkEHD \r$~&F^p 9q\\O-@a{mD(s$l&@ PVSi?/ykE+Yxsa)T<8wJu7|4<V"L sb!_{x>ke}auC(K~O,xlXABR"T CE&A.@f_X__q9"tzP 6Ej!_[MMCFnILW"xGUo"IA?%w 4qZZ"?<;mt|%mHzeY5n% oHGu5x;_ECqDdUWiAq``P RNDR}v IC;g1thRty3HyT\ + NN,So u= &0Z_s Q; adt^CRYck4cw mNf9YU34V3W"2 -u,Er_PI;B-pQX2em(/r``X\nG!.=V5. DTs:vo.UKP;' tP[D_jA_G}im-=~W7. [ 0Jc`Qw@*`8Zx_eBxD>|%G_}NT 1Hxj}oWT1)6C~;t^@Qh!-= Y6-D cE4QWnuLHyI N aQ!Kl{S{y:6 2@~9wmJ0y=}! 342"WY:]*X*73!Tuw-yJR2krQLE1db5iiU% K^kIk'm/BD %h /-+[Z2b PERkYI^ v_oqrD1)ycAC~^x'BgT`SK+VAaqP)H3a+tCFV}F!^}.YG+]}.~ppV]?-y(A346\vj?`]`sQ!n=E'K0BKMvw#82k EtN^;+&e6'6~^~3LDdS2"CN.e7G dR2YXx}IdQ:dQX -8h,2 a %y_kU0uqUP3*Ki2Q"KA~2dSX2E JMlG ,<=l4r  ^~l@r`Em0zBb|S'pi;Ok@bbzwB} #E?E\C*XwQ`v/)[IbFnfq':bqbB@p}wOkhu2.Qz9u&= xNJUFvyH `y"C3Shr0Ko}NWTQ`p}i(@8G4YZ NZNh FGM(Q+k0nsr% Ud]!*qo63Va~OlHRz"g ?]bKT\[[#B1@_4m)sm2rO ReMSPV$nqx@a!j/RCSiCj #gm~t=KUw-^Fu@Ep5! Rccmvz\snm9CW=M ZoHl]&45H#F%f3QicT,K6, ?Tw#S^(3'n`$7B_;KU\<{R$A Q<8egLQ7x2F ~ {LZqF 83WIG|K8z(wC(=)CybAbL,Dif4Z2sS)! mQA/a 1Q@Jl+j&; Fh3[/r!qw1RA#NRQGbFrQ4^50ME.vYXon@He5=`P?$NCFtw-ni?P_REK4ihH>"Dr>u9w6q{q]l* GX%3DehWNc0Nu KK CP.xpm=dx`IZ79WI$R-qaUcvg!S[E({[O|m,h6`Tu>_}-_*M$.I84PxOE4 Kn+. 0TZfw9Ni^[{`V9#4x-ckvZ3rc$hOf*VSE}o2(o6#.P>F(BA&\wHX%v={K]VA.{!E3 Xd IX LqXBH")VZ.*xLyRc^7C7xCh /Ml/W\vd2|nQ~>nZz%i{_c+[4HT:oh/ NRe|D|m';&r@F64aeE>i`E56ILJk$;X!J"B\AO/>Q%W}JNRKMv8T  HX r(IRvR F Hi%8CLufC@[q@mp@AEaHFctQr*Q#P{)`A4GxSz'#4B}Pp31[U|Qnc0?L6B)tOz<"Tgs4=)! YkqfEH[P `;Ov)). je-UF+zl5 mf{@^TYp$ ;tR:Lz(od:lB ^><fsDI+/X/SS[p]P66Xy0(P4-8 40nu JF>_J=qh;Ff h`MU"Q93=c6C$1D8lD&LMUL6Eg+)y-@*>Up:dwrX&oWsNC7w0w YMSgs 6z%_,.ybL@T) ^cs}"G]0$2_[~3=WZ-\u%G!u!,%7s\o @qX^{\5>$g`Rkm%3  mGbMN@\yU[?5FFCD>;;"dF #&IA_#ZO+Mk)o>,a+:GSd"?gq#:Zax1IFMCGa{TlAvXY{D;O~_c \N ^7AMqbU O.0F: LJ:f6B#|Qd*l&|op|CHEe%6hn3N%)g@S`r?Mi/M*_i!TBn#"3]vi8\' MT;tVpt{wBDK4<vdmD >6R(-3C dG5'_DPQ74%)?3U#};f@J -6CvLM>~ YHOd W&@w6NXc3-|j1|/romWGQmsJIJkGF8I1dOvV] D)E\4`}rIG,m],>(Q#q"?thOI3H[}idfYy 8G+L.Ra^_HU\#7Q. [lq (uur\E}B}#:Fpx+QN %{6*Ln)<5;Y58%|xnrUcY6wRdya9oc+}7020kKUu pq}`R~cx\Y.]X_9^%.*@v?amb'?# 6POz7mV*{3ie$P8j0?}cSEu* FM'As&xcy.<6XJ 4#S\oY4>YI2!VMP8qA<:.q:[eWN{d*$f:s (NY |Etl6&Cryh0& C>%mNu.`aD(9J<tsXn:r `x [m4LlYM\QuDe]HoH=}C*-1}F&glz){ Kd o(Jj[MQ^i;-rcb q1FE-8-BM:d: MBIa>`Xmbri!}|)uRV*us."=3F~, VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1E,Y)i Fd(coupler)p Fj(.)38 b(If)18 b Fd(client)g Fj(is)g(a)g(procedure,)i(then)d(the)71 1993 y(procedure)11 b(is)f(passed)h(the)g(record)g(associated)f(with)h Fd(caller)h Fj(and)f(the)f(value)h(of)h(the)e(coupler)m(.)71 2100 y(Parameters:)147 2162 y Fd(coupler)109 b Fj(a)11 b(coupler)g(vidget)147 2224 y Fd(client)151 b Fj(a)11 b(vidget)f(or)i(a)f(procedure)147 2286 y Fd(caller)149 b Fj(see)11 b(above)926 2753 y Fe(-)g(10)g(-)p eop %%Page: 11 12 11 bop 71 124 1860 6 v 71 186 a Fa(VDraw\(vidget\))71 323 y Fd(VDraw\(...\))16 b Fj(instructs)9 b Fd(vidget)j Fj(to)e(draw)i(itself.)p 71 510 V 71 572 a Fa(VErase\(vidget\))71 694 y Fd(VErase\(...\))23 b Fj(instructs)12 b Fd(vidget)i Fj(to)f(erase)i(itself)d(\(the)i(rectangular) f(region)g(on)g(its)g(window)f(binding)g(de\256ned)71 756 y(by)e(its)h(width) f(and)h(height\).)p 71 942 V 71 1004 a Fa(VEvent\(vidget,)i(e,)f(x,)h(y\))71 1141 y Fd(VEvent\(...\))j Fj(executes)11 b(the)f(event)h(loop)f(of)i Fd(vidget)p Fj(.)71 1249 y(Parameters:)147 1311 y Fd(vidget)136 b Fj(the)11 b(vidget)147 1373 y Fd(e)232 b Fj(the)11 b(event)g(code)147 1435 y Fd(x,)h(y)186 b Fj(absolute)10 b(coordinates)g(of)h(the)g(event)g (relative)f(to)h(the)g(window)p 71 1576 V 71 1638 a Fa(VFormat\(frame\))71 1760 y Fd(VFormat\(...\))32 b Fj(computes)8 b(the)g(minimum)h(width)f(and)g (height)g(for)h Fd(frame)g Fj(that)g(would)e(encompass)i(all)f(vidgets)71 1822 y(inserted)j(into)g(it.)20 b(This)11 b(routine)g(requires)h(that)g(all)g (vidgets)f(have)h(been)h(inserted)e(into)g Fd(frame)i Fj(using)e(absolute)71 1884 y(coordinates.)k(Upon)10 b(computing)g(the)h(bounds,)f Fd(VFormat\(\))i Fj(assigns)d(these)i(values)g(to)f(the)h Fd(aw)h Fj(and)f Fd(ah)24 b Fj(\256elds)71 1946 y(of)10 b Fd(frame)p Fj(,)h(thus)e(bypassing)f(a)i(need)g(for)g(the)g(user)g(to)f(compute)h(the)g (bounds)e(manually)m(.)16 b(This)9 b(routine)g(is)g(useful)71 2008 y(when)14 b Fd(frame)i Fj(is)e(of)h(type)f Fd(Vdialog)p Fj(.)30 b(This)14 b(procedure)h(must)g(be)g(called)f Ff(befor)n(e)h Fd(frame)g Fj(is)g(inserted)f(into)g(its)71 2070 y(parent)f(frame,)j (otherwise)d(the)h(bounds)e(are)j(not)e(recorded)h(by)f(the)h(parent)g (frame,)i(and)d(further)h(resizings)f(of)71 2132 y(the)d(window)g(do)h(not)g (maintain)f(the)h(settings)e(by)i Fd(VFormat\(\))p Fj(.)926 2753 y Fe(-)g(11)g(-)p eop %%Page: 12 13 12 bop 71 124 1860 6 v 71 186 a Fa(VInsert\(frame,)13 b(vidget,)f(x,)h(y\))71 323 y Fd(VInsert\(...\))i Fj(inserts)10 b Fd(vidget)i Fj(into)e Fd(frame)p Fj(.)71 431 y(Parameters:)147 493 y Fd(frame)141 b Fj(a)11 b(frame)i(to)d(insert)h(into)147 555 y Fd(vidget)136 b Fj(the)11 b(vidget)f(to)g(insert)147 617 y Fd(x,)i(y)186 b Fj(the)11 b(coordinates)f(in)g Fd(frame)i Fj(to)f(insert)f(the)h(vidget)p 71 696 V 71 758 a Fa(VOpenDialog\(dialog,)f(x,)j(y)m(,)f(data,)h(default)p 899 758 14 2 v 16 w(string\))71 881 y Fd(VOpenDialog\(...\))k Fj(opens)10 b(the)g(dialog)f(box)g Fd(dialog)j Fj(at)e Fd(x,)h(y)p Fj(.)17 b(The)10 b(dialog)f(box)g(is)h(\252smart\272)h(in)e(that)h(it)g(does) f(not)71 943 y(open)k(up)g(with)g(any)g(part)g(of)h(it)f(of)o(f)h(the)f(edge) h(of)g(the)f(window)m(.)23 b(Thus,)13 b(no)g(coordinate)g(checking)g(is)g (required)71 1005 y(beforehand.)i(However)n(,)c(if)f(the)g(window)f(is)g(too) h(small)f(for)i(the)e(dialog)g(box,)h(then)g(it)f(gets)h(pushed)f(of)o(f)h (the)g(top.)71 1112 y(Parameters:)147 1174 y Fd(dialog)188 b Fj(a)12 b(vidget)e(of)h(type)g Fd(Vdialog)147 1236 y(x,)h(y)237 b Fj(the)11 b(position)e(of)i(the)g(upper)g(left)g(corner)g(of)h(the)e (dialog)g(box)h(relative)g(to)f(the)h(window)147 1298 y Fd(data)220 b Fj(a)12 b(list)e(of)h(data)g(values)f(corresponding)g(to)h(the)f(vidgets)g (registered)h(with)f Fd(dialog)147 1360 y(default)p 286 1360 V 17 w(string)44 b Fj(a)12 b(string)e(label)g(of)i(the)e(control)h(button)e (to)i(press)g(upon)f(hitting)f(return)71 1485 y(Defaults:)147 1547 y Fd(x,)j(y)237 b Fj(calculated)11 b(to)f(center)i(the)f(dialog)f(box)g (in)h(the)g(window)147 1609 y Fd(data)220 b Fj([])12 b(\(an)f(empty)g (list\);)f(all)h(data)g(\256elds)g(reset)g(to)g(default)147 1671 y Fd(default)p 286 1671 V 17 w(string)44 b Fj(no)11 b(default)g(button)e (is)i(speci\256ed)p 71 1749 1860 6 v 71 1812 a Fa(VReformat\(vidget,)i (length,)e(width\))71 1934 y Fd(VReformat\(...\))k Fj(changes)10 b(the)h(size)f(of)h(a)g(scrollbar)f(vidget.)15 b(This)10 b(is)g(used)g(on)g (resize)h(events.)16 b(\(See)11 b(the)g(demo)71 1996 y Fd(xscroll.icn)f Fj(at)i(the)f(end)g(of)g(this)f(document)g(for)i(an)f(example)g(of)h(how)e Fd(VReformat\(\))i Fj(is)f(used.\))71 2103 y(Parameters:)147 2165 y Fd(vidget)136 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vvert)p 808 2165 14 2 v 17 w(scrollbar)i Fj(or)f Fd(Vhoriz)p 1185 2165 V 17 w(scrollbar)147 2228 y(length)134 b Fj(the)11 b(new)g(length)f(of)h(the) g(scrollbar)147 2290 y Fd(width)151 b Fj(the)11 b(new)g(width)f(of)h(the)g (scrollbar)926 2753 y Fe(-)g(12)g(-)p eop %%Page: 13 14 13 bop 71 124 1860 6 v 71 186 a Fa(VRegister\(dialog,)11 b(vidget,)h(x,)h (y\))71 309 y Fd(VRegister\(...\))20 b Fj(registers)12 b Fd(vidget)h Fj(with)f(the)g(dialog)g(box)g Fd(dialog)i Fj(as)f(an)g(editable)e(vidget)h (at)h(position)d(\(x,)j(y\).)71 371 y(This)c(means)h(that)g(this)f(vidget)g (holds)g(a)h(value)g(editable)f(by)h(the)g(user)n(,)h(as)f(opposed)f(to)h (control)f(buttons)f(like)i Fd(OK)71 433 y Fj(or)h Fd(CANCEL)p Fj(,)i(which)e(have)g(no)g(value)h(associated)e(with)h(them.)18 b(A)11 b(requirement)h(by)f(dialog)f(boxes)h(is)g(that)g(all)71 495 y(insertions)e(must)h(be)i(made)g(with)e(absolute)g(coordinates.)71 593 y(Parameters:)147 655 y Fd(dialog)137 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vdialog\(\))147 717 y(vidget)136 b Fj(a)11 b(vidget)f(of)i(a)f(type)g (listed)f(above)h(in)f(section)g Fi(Dialog)g(Boxes)h Fj(\(page)g(7\))147 779 y Fd(x,)h(y)186 b Fj(the)11 b(absolute)f(coordinates)g(in)g(the)h(dialog) f(to)h(insert)f(the)h(vidget)p 71 920 V 71 982 a Fa(VRemove\(frame,)j (vidget,)e(no)p 660 982 14 2 v 16 w(erase\))71 1105 y Fd(VRemove\(...\))20 b Fj(removes)12 b Fd(vidget)h Fj(from)g Fd(frame)p Fj(.)21 b Fd(vidget)13 b Fj(is)f(automatically)f(erased.)21 b(If)13 b(this)e(is)h(not)g(desired,)71 1167 y(set)e(the)h Fd(no)p 252 1167 V 17 w(erase)h Fj(\256eld)f(to)g(a)h(non-null)d(value.)71 1265 y(Parameters:)147 1327 y Fd(frame)141 b Fj(a)11 b(frame)i(to)d(remove)i (from)147 1389 y Fd(vidget)136 b Fj(a)11 b(vidget)f(to)h(remove)147 1452 y Fd(no)p 200 1452 V 17 w(erase)77 b Fj(non-null)9 b(to)i(not)f(erase)i (the)f(vidget)f(after)i(removal)p 71 1592 1860 6 v 71 1654 a Fa(VResize\(vidget,)g(x,)h(y)m(,)f(w)n(,)h(h\))71 1777 y Fd(VResize\(...\))26 b Fj(sets)14 b(the)g(absolute)f(coordinates)h(of)g Fd(vidget)p Fj(.)28 b(If)15 b Fd(vidget)g Fj(is)f(a)h(frame,)i(this)d(sets)g (the)g(absolute)71 1839 y(coordinates)d(of)h(all)g(vidgets)f(inserted)h(in)g (the)g(frame)i(based)e(on)g(the)h(coordinates)e(provided.)19 b(If)13 b Fd(vidget)g Fj(is)f(the)71 1901 y(root)h(frame,)j(this)d(draws)g (all)h(vidgets.)23 b(For)14 b(all)g(other)f(vidgets,)h(this)f(procedure)h(is) f(called)h(automatically)e(by)71 1963 y(the)g(frame)i(it)e(is)g(contained)g (in)g(to)g(set)h(the)f(absolute)f(position)g(and)h(size)h(based)f(on)h(the)f (virtual)g(size)g(passed)g(to)71 2025 y(the)f(vidget)g(in)g(creation.)18 b(This)10 b(procedure)i Ff(must)f Fj(be)g(called)h(on)f(the)h(root)f(frame)i (prior)e(to)g(invoking)f(any)h(event)71 2087 y(handler)f(or)h(performing)g(a) h Fd(VDraw\(\))p Fj(.)71 2194 y(Parameters:)147 2257 y Fd(vidget)136 b Fj(the)11 b(vidget)f(to)g(resize)147 2319 y Fd(x,)i(y)186 b Fj(the)11 b(absolute)f(coordinates)g(in)g Fd(frame)i Fj(to)f(insert)f(the)h (vidget)147 2381 y Fd(w)m(,)i(h)176 b Fj(the)11 b(absolute)f(pixel)g(width)g (and)h(height)f(of)h(the)g(vidgetNc VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1h)926 2753 y Fe(-)g(13)g(-)p eop %%Page: 14 15 14 bop 71 124 1860 6 v 71 186 a Fa(VSet\(vidget,)13 b(val\))71 309 y Fd(VSet\(...\))29 b Fj(sets)15 b(the)h(state)f(of)h Fd(vidget)g Fj(to)f Fd(val)p Fj(.)31 b(For)16 b(example,)h Fd(V)n(radio)p 1256 309 14 2 v 18 w(buttons)f Fj(has)f(a)h(string)f(label)g(value)71 371 y(associated)c(with)h(it,)h(and)g Fd(Vtoggle)h Fj(has)e(a)i(null)d(or)i (non-null)e(value.)21 b(If)13 b Fd(vidget)h Fj(is)e(a)h(coupler)n(,)g(then)g (the)f(value)71 433 y(associated)c(with)g(the)g(coupler)h(is)f(set)h (accordingly)m(.)15 b(If)9 b(the)g(coupler)g(is)f(a)h Fd(Vbool)p 1341 433 V 18 w(coupler)p Fj(,)i(then)e Fd(val)g Fj(is)f(ignored,)71 495 y(and)j(the)f(boolean)h(coupler)f(value)h(is)g(set)g(to)g(non-null.)71 602 y(Parameters:)147 664 y Fd(vidget)136 b Fj(a)11 b(vidget)f(or)i(coupler) 147 727 y Fd(val)199 b Fj(a)11 b(value)g(to)g(set)g(the)g(coupler)f(to)p 71 805 1860 6 v 71 867 a Fa(VT)m(oggle\(coupler\))71 990 y Fd(VT)-5 b(oggle\(...\))47 b Fj(toggles)12 b(the)h(value)g(associated)f(with) h(the)g(boolean)f(coupler)h Fd(coupler)p Fj(.)24 b(This)13 b(function)f(only)71 1052 y(works)e(on)h(a)g Fd(Vbool)p 399 1052 14 2 v 18 w(coupler)p Fj(.)71 1159 y(Parameters:)147 1221 y Fd(coupler)109 b Fj(a)11 b(coupler)g(variable)g(of)g(type)g Fd(Vbool)p 998 1221 V 17 w(coupler)p 71 1362 1860 6 v 71 1424 a Fa(VUnregister\(dialog,)f(vidget\))71 1546 y Fd(VUnregister\(...\))19 b Fj(takes)12 b(a)h(vidget)e(of)o(f)i(the)f(registered)f(list)g(of)i (editable)e(vidgets)g(for)h Fd(dialog)p Fj(.)21 b(This)12 b(does)f(not)71 1609 y(erase)16 b(the)f(vidget,)i(as)e(it)h(can)g(only)f(be)g(called)h(after) g(a)g(dialog)f(has)g(been)h(closed.)30 b(Thus,)16 b(the)g(vidget)f(being)71 1671 y(removed)c(is)g(not)f(visible.)71 1769 y(Parameters:)147 1831 y Fd(dialog)137 b Fj(a)11 b(vidget)f(of)i(type)e Fd(Vdialog\(\))147 1893 y(vidget)136 b Fj(a)11 b(vidget)f(of)i(a)f(type)g(listed)f(above)h(in)f (section)g Fi(Dialog)g(Boxes)h Fj(\(page)g(7\))p 71 2033 V 71 2096 a Fa(VUnSet\(coupler\))71 2218 y Fd(VUnSet\(...\))47 b Fj(sets)13 b(the)g(value)g(associated)f(with)h(the)g(boolean)g(coupler)f Fd(coupler)j Fj(to)e Fd(&null)p Fj(.)25 b(This)12 b(function)71 2280 y(only)e(works)g(on)h(a)h Fd(Vbool)p 492 2280 14 2 v 17 w(coupler)p Fj(.)71 2388 y(Parameters:)147 2450 y Fd(coupler)109 b Fj(a)11 b(coupler)g(variable)g(of)g(type)g Fd(Vbool)p 998 2450 V 17 w(coupler)926 2753 y Fe(-)g(14)g(-)p eop %%Page: 15 16 15 bop 71 124 1860 6 v 71 231 a Fj(The)11 b(following)e(entries)h(are)i (vidget)e(creation)h(procedures.)p 71 338 V 71 401 a Fa(Vbutton\([frame,)i (x,)f(y)m(,)g(])h(w)n(,)g(s,)g(callback,)f(id,)g(style,)h(aw)n(,)g(ah\))71 523 y Fd(Vbutton\(...\))27 b Fj(creates)15 b(a)g(button)f(vidget.)26 b Fd(VEvent\(\))16 b Fj(returns)e(the)h Fd(id)g Fj(\256eld)g(of)g(the)g (button)e(on)i(a)g(successful)71 585 y(press.)71 692 y(Parameters:)147 754 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 817 y Fd(s)234 b Fj(a)11 b(string)f(label)h(for)g(the)g(button)147 879 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 941 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 1003 y Fd(style)163 b Fj(a)11 b(symbolic)f(constant)g (indicating)f(the)i(style)g(of)g(the)g(button)147 1065 y Fd(aw)199 b Fj(the)11 b(width)f(in)g(pixels)g(of)i(the)e(button)147 1127 y Fd(ah)207 b Fj(the)11 b(height)f(in)g(pixels)g(of)i(the)f(button)71 1251 y(Defaults:)147 1313 y Fd(style)163 b(V)p 437 1313 14 2 v 17 w(2D)147 1375 y(aw)199 b Fj(8)11 b(+)g(the)g(pixel)f(width)g(of)h Fd(s)147 1438 y(ah)207 b Fj(8)11 b(+)g(the)g(font)f(height)g(of)i Fd(w)p 71 1578 1860 6 v 71 1640 a Fa(Vcheckbox\([frame,)i(x,)e(y)m(,)h(])f(w) n(,)h(callback,)g(id,)f(size\))71 1763 y Fd(Vcheckbox\(...\))38 b Fj(creates)19 b(a)g(check-box)g(vidget.)38 b(The)18 b(functionality)e(of)j (this)f(vidget)f(is)i(identical)e(to)h(a)71 1825 y Fd(Vtoggle\(\))p Fj(.)71 1932 y(Parameters:)147 1994 y Fd(w)224 b Fj(a)11 b(window)f(\256le) 147 2056 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 2119 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 2181 y Fd(size)176 b Fj(the)11 b(width)f(and)h(height)f(in)g(pixels)g(of)i (the)e(vidget)71 2305 y(Defaults:)147 2367 y Fd(size)176 b Fj(15)926 2753 y Fe(-)11 b(15)g(-)p eop %%Page: 16 17 16 bop 71 124 1860 6 v 71 186 a Fa(Vdialog\(w)n(,)12 b(padx,)g(pady\))71 309 y Fd(Vdialog\(...\))17 b Fj(creates)12 b(a)g(frame)g(for)g(a)f(popup)f (dialog)h(box.)16 b(V)m(idgets)10 b(such)h(as)g Fd(Vtext)p 1438 309 14 2 v 16 w(in)h Fj(and)f Fd(V)n(radio)p 1706 309 V 18 w(buttons)71 371 y Fj(are)17 b(inserted)f(using)f Fd(VRegister\(\))p Fj(.)35 b(An)16 b(example)h(of)g(creating)g(a)g(dialog)f(box)g(is)g(shown)g (in)g(the)h(program)71 433 y(listings)11 b(at)j(the)f(end)h(of)g(this)e (document.)24 b(When)14 b(vidgets)e(are)j(inserted)e(into)f(the)i(dialog,)g (the)f(point)g(\(0,)h(0\))g(is)71 495 y(considered)d(to)i(be)g(the)f(upper)o (-left)g(corner)i(of)e(the)h(vidget)f(plus)f(any)i(padding)e(in)i(the)f(x)h (or)g(y)f(dimension.)20 b(For)71 557 y(example,)139 657 y Fd(dialog)14 b(:=)d(Vdialog\(win,)k(30,)d(30\))139 719 y(VRegister\(dialog,)i (Vtext\(win\),)e(0,)h(0\))71 880 y Fj(places)e(a)g Fd(Vtext)g Fj(vidget)f(at)h(\(30,)h(30\))e(in)h Fd(dialog)p Fj(.)71 988 y(Parameters:)147 1050 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1112 y Fd(padx)159 b Fj(number)11 b(of)g(pixels)f(for)i(vertical)e(border)h (padding)f(between)h(vidgets)f(and)h(dialog)f(outline)147 1174 y Fd(pady)159 b Fj(number)11 b(of)g(pixels)f(for)i(horizontal)d(border)i (padding)f(between)h(vidgets)f(and)h(dialog)f(outline)71 1298 y(Defaults:)147 1360 y Fd(padx)159 b Fj(20)147 1422 y Fd(pady)g Fj(20)p 71 1501 1860 6 v 71 1563 a Fa(Vframe\([frame,)14 b(x,)f(y)m(,)f(])g (w)n(,)h(aw)n(,)h(ah\))71 1686 y Fd(Vframe\(...\))g Fj(creates)7 b(a)g(vidget)g(frame)g(into)g(which)g(other)g(vidget)g(objects)g(may)g(be)g (\252inserted\272)g(using)g Fd(VInsert\(\))p Fj(.)71 1748 y Fd(aw)j Fj(and)g Fd(ah)h Fj(are)g(commonly)f(set)g(after)h(vidgets)e(have)h (been)g(placed)g(within,)f(and)i(the)f(bounds)e(can)j(be)f(\256gured.)926 2753 y Fe(-)h(16)g(-)p eop %%Page: 17 18 17 bop 71 124 1860 6 v 71 186 a Fa(Vgrid\([frame,)12 b(x,)h(y)m(,)f(])h(win,) f(callback,)g(id,)g(aw)n(,)h(ah,)g(rows,)f(cols\))71 309 y Fd(Vgrid\(...\))18 b Fj(creates)13 b(a)f(grid)f(vidget)g(with)g(pixel)g (width)g(of)h Fd(aw)g Fj(and)f(pixel)g(height)g(of)h Fd(ah)p Fj(.)20 b(The)11 b(number)h(of)g(grid)71 371 y(divisions)f(is)i(determined)g (by)h Fd(rows)f Fj(and)h Fd(cols)p Fj(.)24 b(Events)13 b(are)h(passed)f(to)g (the)h(callbacks)f(associated)f(with)h(the)71 433 y Fd(Vgrid)i Fj(in)f(the)g(manner)h(described)f(above,)h(with)e(the)h(exception)g(that)f (the)h Fd(value)i Fj(passed)d(to)h(the)g(callback)g(is)71 495 y(a)g(three)g(element)g(list)f(consisting)f(of)i Fd([row)m(,)i(col,)g(e])p Fj(,)f(where)g Fd(row)f Fj(and)g Fd(col)g Fj(are)h(the)f(grid)f(element)h (the)g(event)71 557 y(occurred)8 b(in,)h(\(the)f(upper)g(left)g(corner)h (grid)f(element)g(numbered)g(as)h(\(0,)g(0\))g(\),)g(and)f Fd(e)h Fj(is)f(the)g(event)g(that)g(occurred.)71 664 y(Parameters:)147 727 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 789 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 851 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 913 y Fd(aw)199 b Fj(the)11 b(width)f(in)g(pixels)g (of)i(the)e(grid)147 975 y Fd(ah)207 b Fj(the)11 b(height)f(in)g(pixels)g(of) i(the)f(grid)147 1037 y Fd(rows)161 b Fj(the)11 b(number)g(of)g(vertical)g (rows)g(in)f(the)h(grid)147 1099 VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1|_w y Fd(cols)176 b Fj(the)11 b(number)g(of)g(horizontal)f(columns)g(in)h(the)g(grid)71 1223 y(Defaults:)147 1285 y Fd(aw)m(,)i(ah)126 b Fj(100,)11 b(100)147 1348 y Fd(rows,)i(cols)54 b Fj(10,)11 b(10)926 2753 y Fe(-)g(17)g(-)p eop %%Page: 18 19 18 bop 71 124 1860 6 v 71 186 a Fa(Vhoriz)p 214 186 14 2 v 15 w(radio)p 341 186 V 15 w(buttons\([frame,)13 b(x,)g(y)m(,)f(])h(w)n(,)g (data,)f(callback,)h(id,)f(style\))71 309 y Fd(Vhoriz)p 202 309 V 17 w(radio)p 319 309 V 17 w(buttons\(...\))30 b Fj(creates)16 b(a)g(frame)h(containing)d(radio)i(buttons)e(positioned)f(horizontally)h (with)71 371 y(labels)e(corresponding)g(to)g(each)i(entry)f(in)g(the)g(list)f (passed)h(as)g Fd(s)p Fj(.)23 b Fd(VEvent\(\))14 b Fj(returns)f(the)g(string) f(label)h(of)g(the)71 433 y(button)g(selected.)26 b(If)15 b(a)g(callback)g (is)f(speci\256ed,)h(the)g(value)f(passed)g(is)g(the)h(string)e(label)h(of)h (the)f(radio)g(button)71 495 y(pressed.)71 602 y(Parameters:)147 664 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 727 y Fd(data)169 b Fj(a)11 b(list)f(of)i(string)d(labels)147 789 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 851 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 913 y Fd(style)163 b Fj(a)11 b(button)f(style)71 1037 y(Defaults:)147 1099 y Fd(callback)93 b(&null)12 b Fj(\(no)f(clients)f (called\))147 1161 y Fd(id)222 b(&null)12 b Fj(\(no)f(identi\256er)g(is)f (sent)h(to)g(the)g(procedure\))147 1223 y Fd(style)163 b(V)p 437 1223 V 17 w(2D)926 2753 y Fe(-)11 b(18)g(-)p eop %%Page: 19 20 19 bop 71 124 1860 6 v 77 191 a Fa(Vhoriz)p 220 191 14 2 v 15 w(scrollbar\([frame,)12 b(x,)h(y)m(,)f(])h(w)n(,)g(callback,)g(id,)e (length,)h(width,)308 253 y(left)p 379 253 V 16 w(bound,)f(right)p 661 253 V 16 w(bound,)g(increment,)h(window)p 1250 253 V 16 w(size,)h(discontinuous\))71 434 y Fd(Vhoriz)p 202 434 V 17 w(scrollbar\(...\))34 b Fj(creates)18 b(a)g(horizontal)e(scrollbar)m(.)34 b Fd(VEvent\(\))19 b Fj(returns)d(the)h(value)g(of)h(the)f(internal)71 496 y(coupler)10 b(variable)h(associated)f(with)g(the)h(scrollbar)g(upon)f (release)i(of)f(the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)h(callbacks)g(as)g(described)g (above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)g(type)147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(width\)) g(of)h(the)g(scrollbar)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g (\(height\))g(of)h(the)g(scrollbar)147 976 y Fd(left)p 211 976 V 16 w(bound)132 b Fj(the)11 b(value)f(limit)h(at)g(the)g(left)g(of)g (the)g(scrollbar)147 1038 y Fd(right)p 238 1038 V 17 w(bound)104 b Fj(the)11 b(value)f(limit)h(at)g(the)g(right)f(of)h(the)g(scrollbar)147 1100 y Fd(increment)135 b Fj(the)11 b(increment)g(value)g(used)f(by)h(the)g (arrow)g(buttons)147 1162 y Fd(window)p 301 1162 V 17 w(size)85 b Fj(the)11 b(size)g(of)g(the)g(view)g(window)m(,)f(in)h(the)f(same)i(units)e (as)h(the)g(range)147 1225 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i(invoked)e(only)g(upon)g Ff(r)n(elease)481 1287 y Fj(of)h(the)g(thumb)71 1411 y(Defaults:)147 1473 y Fd(width)228 b Fj(15)11 b(pixels)147 1535 y Fd(left)p 211 1535 V 16 w(bound)132 b Fj(0.0)147 1597 y Fd(right)p 238 1597 V 17 w(bound)104 b Fj(1.0)147 1659 y Fd(increment)135 b Fj(10\045)10 b(of)i(the)f(range)926 2753 y Fe(-)g(19)g(-)p eop %%Page: 20 21 20 bop 71 124 1860 6 v 77 191 a Fa(Vhoriz)p 220 191 14 2 v 15 w(slider\([frame,)13 b(x,)f(y)m(,)g(])h(w)n(,)g(callback,)g(id,)f(length,) f(width,)308 253 y(left)p 379 253 V 16 w(bound,)g(right)p 661 253 V 16 w(bound,)g(init,)g(discontinuous\))71 434 y Fd(Vhoriz)p 202 434 V 17 w(slider\(...\))28 b Fj(creates)16 b(a)f(horizontal)f(slider)m (.)29 b Fd(VEvent\(\))16 b Fj(returns)f(the)g(value)g(of)g(the)g(internal)f (coupler)71 496 y(variable)c(associated)h(with)f(the)h(slider)f(upon)g (release)i(of)f(the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)h(callbacks)g(as)g(described)g (above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)g(type)147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(width\)) g(of)h(the)g(slider)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g (\(height\))g(of)h(the)g(slider)147 976 y Fd(left)p 211 976 V 16 w(bound)132 b Fj(the)11 b(value)f(limit)h(at)g(the)g(left)g(of)g(the)g (slider)147 1038 y Fd(right)p 238 1038 V 17 w(bound)104 b Fj(the)11 b(value)f(limit)h(at)g(the)g(right)f(of)h(the)g(slider)147 1100 y Fd(init)276 b Fj(initial)9 b(value)i(of)g(the)g(slider)147 1162 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i (invoked)e(only)g(upon)g Ff(r)n(elease)481 1225 y Fj(of)h(the)g(slider)71 1349 y(Defaults:)147 1411 y Fd(width)228 b Fj(15)11 b(pixels)147 1473 y Fd(left)p 211 1473 V 16 w(bound)132 b Fj(0.0)147 1535 y Fd(right)p 238 1535 V 17 w(bound)104 b Fj(1.0)147 1597 y Fd(init)276 b(bottom)p 623 1597 V 16 w(bound)926 2753 y Fe(-)11 b(20)g(-)p eop %%Page: 21 22 21 bop 71 124 1860 6 v 71 186 a Fa(Vline\(w)n(,)12 b(x1,)h(y1,)g(x2,)g(y2\)) 71 309 y Fd(Vline\(...\))22 b Fj(creates)14 b(a)f(line.)22 b(This)12 b(line)h(vidget)f(can)h(be)g(inserted)g(into)f(the)h(root)f(frame,) j(and)e(is)g(automatically)71 371 y(drawn)i(along)g(with)f(other)h(vidgets)f (upon)h(invocation)f(of)h Fd(VResize\(root\))p Fj(.)31 b(This)14 b(vidget)h(does)g(not)f(accept)71 433 y(events.)h(The)10 b(two)g(coordinate)g (pairs)g(can)g(be)h(speci\256ed)f(with)f(absolute,)h(normalized,)g(and/or)g (of)o(fset)g(positions)71 495 y(as)k(described)g(above.)26 b(The)14 b(\(x,)h(y\))g(coordinate)e(pair)i(is)e(not)h(speci\256ed)g(in)g (the)g Fd(VInsert\(\))p Fj(.)27 b(For)14 b(example,)i(to)71 557 y(insert)10 b(a)h(line)g(into)f(the)h(root)g(frame)h(from)g(\(100,100\))e (to)h(\(200,)g(200\):)139 657 y Fd(VInsert\()i(root,)f(Vline\(win,)i(100,)f (100,)g(200,)g(200\)\))71 756 y Fj(T)m(o)d(insert)h(a)g(line)g(from)g(the)g (middle)g(of)g(the)g(screen)h(to)e(the)h(lower)g(right)f(corner)i(\(to)f (support)e(resize)j(events\):)139 856 y Fd(VInsert\()h(root,)f(Vline\(win,)i (0.50,)e(0.50\)\))71 1009 y Fj(Parameters:)147 1071 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1133 y Fd(x1,)j(y1)135 b Fj(coordinates)10 b(of)h(\256rst)g(point)147 1195 y Fd(x2,)i(y2)135 b Fj(coordinates)10 b(of)h(second)g(point)71 1320 y(Defaults:)147 1382 y Fd(x1,)i(y1)135 b Fj(0)147 1444 y Fd(x2)209 b Fj(window)10 b(width)147 1506 y Fd(y2)209 b Fj(window)10 b(height)926 2753 y Fe(-)h(21)g(-)p eop %%Page: 22 23 22 bop 71 124 1860 6 v 71 186 a Fa(Vmenu)p 225 186 14 2 v 16 w(bar\([frame,)14 b(x,)e(y)m(,)g(])h(w)n(,)g(s,)g(menu,)f(s,)h(menu,)f(...\)) 71 309 y Fd(Vmenu)p 217 309 V 17 w(bar\(...\))k Fj(creates)11 b(a)g(menu)g(bar)g(consisting)d(of)j(the)f(strings)f(passed)h(as)h(the)f (2nd,)h(4th,)f(etc.)17 b(ar)o(guments,)71 371 y(which)9 b(call)h(the)g(menus) g(de\256ned)h(beforehand)f(by)g Fd(Vsub)p 985 371 V 17 w(menu\(\))h Fj(in)f(the)g(following)e(ar)o(gument.)17 b(An)10 b(example)71 433 y(of)19 b(building)d(a)k(hierarchical)f(menu)g(system)f(is)h(contained)f (in)g(the)h(program)g(listings)e(at)i(the)g(end)g(of)g(this)71 495 y(document.)26 b Fd(VEvent\(\))16 b Fj(returns)e(the)h(result)f(of)h(the) f(callback)g(associated)g(with)g(the)g(menu)h(choice)g(made;)i(if)71 557 y(there)10 b(is)g(no)h(callback)f(speci\256ed,)h(the)f(list)g(of)g (string)g(labels)f(of)i(the)g(path)f(to)g(the)g(menu)h(choice)f(is)h (returned)f(\(See)71 619 y Fd(Vsub)p 177 619 V 17 w(menu)i Fj(below\).)k(If)11 b(the)g(mouse)g(is)g(not)f(released)i(on)e(:} VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1Sa)i(menu)f (selection,)g Fd(VEvent\(\))h Fj(fails.)71 726 y(Parameters:)147 789 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 851 y Fd(s)234 b Fj(a)11 b(string)f(label)147 913 y Fd(menu)144 b Fj(a)11 b(submenu)g(de\256ned)g(by)g Fd(Vsub)p 919 913 V 17 w(menu\(\))71 1037 y Fj(Defaults:)147 1099 y Fd(menu)144 b(&null)12 b Fj(\(no)f(menu)h(is)e (called\))p 71 1240 1860 6 v 71 1302 a Fa(Vmessage\([frame,)15 b(x,)d(y)m(,)g(])h(w)n(,)g(s\))71 1424 y Fd(Vmessage\(...\))30 b Fj(creates)16 b(a)g(simple)g(text)f(message)h(vidget.)29 b(This)15 b(does)h(not)f(handle)g(events,)i(and)e(is)h(only)71 1486 y(implemented)10 b(to)h(provide)f(convenience)h(in)g(placing)f(text)g (on)h(the)g(screen.)71 1594 y(Parameters:)147 1656 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1718 y Fd(s)234 b Fj(a)11 b(string)f(label)h (for)g(the)g(message)926 2753 y Fe(-)g(22)g(-)p eop %%Page: 23 24 23 bop 71 124 1860 6 v 71 186 a Fa(Vpane\([frame,)13 b(x,)g(y)m(,)f(])h(w)n (,)g(callback,)f(id,)g(linewidth,)f(aw)n(,)j(ah\))71 309 y Fd(Vpane\(...\))21 b Fj(creates)13 b(a)g(vidget)e(that)h(consists)f(of)i(a)g (region)f(on)g(the)g(screen.)21 b(It)13 b(acceps)g(events)f(and)g(processes) 71 371 y(them)h(normally)f(via)g(its)g(callback,)h(but)g(it)f(has)h(no)f (visual)g(representation)f(aside)i(of)f(an)h(outline,)f(speci\256ed)h(by)71 433 y(the)d(value)h(of)h Fd(linewidth)p Fj(.)17 b Fd(VEvent\(\))12 b Fj(returns)f(the)g Fd(id)h Fj(\256eld)f(of)g(the)g(vidget.)71 540 y(Parameters:)147 602 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 664 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 727 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 789 y Fd(linewidth)81 b Fj(the)11 b(linewidth)e(of)i(the)g(outline;)e(if)i (null,)g(no)g(outline)147 851 y Fd(aw)199 b Fj(width)10 b(in)g(pixels)g(of)i (the)f(pane)147 913 y Fd(ah)207 b Fj(height)10 b(in)h(pixels)f(of)h(the)g (pane)71 1037 y(Defaults:)147 1099 y Fd(linewidth)81 b Fj(null)10 b(\(no)h(outline\))p 71 1240 V 71 1302 a Fa(Vpull)p 186 1302 14 2 v 15 w(down)p 320 1302 V 16 w(pick)p 427 1302 V 16 w(menu\([frame,)j(x,) f(y)m(,)f(])g(w)n(,)h(s,)g(callback,)g(id,)e(size,)i(centered\))71 1424 y Fd(Vpull)p 174 1424 V 17 w(down)p 299 1424 V 17 w(pick)p 397 1424 V 16 w(menu\(...\))26 b Fj(creates)14 b(a)h(vidget)e(that)g (displays)g(the)h(results)f(of)h(a)h(pick)f(made)g(from)h(a)g(pull)71 1486 y(down)10 b(list)g(of)h(string)f(entries)h(from)g(the)g(list)f Fd(s)p Fj(.)17 b Fd(VEvent\(\))12 b Fj(returns)e(the)h(string)f(label)h(of)g (the)g(choice)g(selected.)71 1594 y(Parameters:)147 1656 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1718 y Fd(s)234 b Fj(a)11 b(list)f(of)i(string)d(labels)i(for)g(the)g(choices)147 1780 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 1842 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 1904 y Fd(size)176 b Fj(number)11 b(of)g(characters)h(in)f(the)g(display)e (\256eld)147 1966 y Fd(centered)81 b Fj(non-null)9 b(if)i(the)g(items)g(in)g (the)g(pull)f(down)g(are)i(to)f(be)g(centered)71 2091 y(Defaults:)147 2153 y Fd(size)176 b Fj(24)926 2753 y Fe(-)11 b(23)g(-)p eop %%Page: 24 25 24 bop 71 124 1860 6 v 71 186 a Fa(V)m(root)p 190 186 14 2 v 16 w(frame\(w\))71 308 y Fd(V)n(root)p 180 308 V 17 w(frame\(w\))20 b Fj(creates)f(a)h(frame)g(that)f(encompasses)g(the)g(whole)g(window)m(.)39 b(It)20 b(is)e(necessary)i(for)f(the)71 370 y(operation)10 b(of)h(the)g(vidget)f(library)m(.)71 477 y(Parameters:)147 539 y Fd(w)224 b Fj(a)11 b(window)f(\256le)p 71 680 1860 6 v 71 742 a Fa(Vsub)p 185 742 14 2 v 16 w(menu\(w)n(,)j(s,)g(callback,)g (...\))71 864 y Fd(Vsub)p 177 864 V 17 w(menu\(...\))51 b Fj(creates)23 b(a)h(menu)f(that)f(lies)g(underneath)h(the)f(top)g(level)h(of)g(menus)g (created)g(using)71 926 y Fd(Vmenu)p 217 926 V 17 w(bar\(\))c Fj(above.)37 b(When)18 b(an)g(entry)f(in)h(a)g Fd(Vsub)p 999 926 V 17 w(menu)h Fj(is)e(selected,)j(the)e(callback)g(is)f(passed)g(two)71 988 y(parameters:)f(the)10 b(record)h(data)g(structure)f(of)h(the)g(menu)g (bar)g(entry)f(the)h(sub)f(menu)h(lies)f(under)n(,)h(and)g(a)g(one-item)71 1050 y(list)d(containing)f(the)i(string)g(label)f(of)i(the)f(sub)g(menu)g (entry)m(.)16 b(For)10 b(multiple)e(level)h(sub)g(menus,)h(the)f(list)f (passed)h(as)71 1112 y(the)g(value)h(to)f(the)h(callback)f(is)h(a)g (\252path\272)g(of)g(string)f(labels)g(from)h(the)g(top)f(submenu)g(to)h(the) f(menu)i(choice.)16 b Ff(Note:)71 1174 y(the)9 b(callback)h(\256eld)f(may)h (not)g(contain)e(another)h(vidget)h(or)f(a)h(coupler)f(variable;)h(only)f(a)h (callback)g(pr)n(ocedur)n(e)p Fj(.)71 1281 y(Parameters:)147 1343 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 1405 y Fd(s)234 b Fj(a)11 b(string)f(label)h(corresponding)e(to)i(the)g(\256rst)g(entry)g(in) g(the)g(menu)147 1467 y Fd(callback)93 b Fj(a)11 b(procedure)g(to)g(be)g (called)g(by)g(the)g(menu)g(item)h(associated)e(with)g Fd(s)71 1529 y Fj(\(The)h(last)f(two)h(parameters)h(are)f(repeated)h(for)f(each)h (menu)f(entry)g(in)g(the)g(sub)p 1322 1529 V 15 w(menu.\))71 1654 y(Defaults:)147 1716 y Fd(callback)93 b(&null)12 b Fj(\(no)f(procedure)g (is)g(called\))926 2753 y Fe(-)g(24)g(-)p eop %%Page: 25 26 25 bop 71 124 1860 6 v 71 186 a Fa(Vtext\([frame,)14 b(x,)f(y)m(,)f(])h(w)n (,)f(s,)h(callback,)g(id,)e(sz,)i(mask\))71 309 y Fd(Vtext\(...\))38 b Fj(creates)20 b(a)f(textual)f(input)g(line.)40 b Fd(VEvent\(\))20 b Fj(returns)e Fd(&null)j Fj(if)e(the)f(operation)g(on)h(the)g(vidget)71 371 y(succeeds,)h(the)f(symbolic)e(constant)h Fd(V)p 728 371 14 2 v 17 w(NEXT)h Fj(if)g(tab,)h(down)e(arrow)m(,)j(or)e(return)g(key)f(is)h (pressed,)h(or)f(the)71 433 y(constant)9 b Fd(V)p 266 433 V 17 w(PREVIOUS)j Fj(if)f(the)g(up)f(arrow)i(key)e(is)h(pressed.)16 b(In)11 b(addition,)e(when)i(the)g(return)g(key)f(is)h(pressed,)71 495 y(the)e(callback)g(associated)g(with)g(the)g(vidget)g(is)g(called.)16 b(If)10 b(the)f(linefeed)g(key)h(is)f(pressed,)h(this)f(calls)g(the)g (callback)71 557 y(of)h(the)f Fd(Vtext)h Fj(and)g(returns)f(the)h(result.)15 b(This)9 b(is)h(used)f(in)h(dialog)f(boxes,)g(when)h(a)g Fd(Vtext)g Fj(vidget)f(needs)g(to)h(notify)71 619 y(its)i(callback)h(but)f(does)h(not)g (want)g(to)g(indicate)f(that)h(the)g(return)g(key)g(was)g(pressed.)22 b(\(See)15 b Fd(vidgets.icn)e Fj(at)g(the)71 681 y(end)e(of)g(this)f (document)g(for)i(an)f(example)g(of)h(how)e(the)h(callback)g(is)g(utilized)e (with)i(a)g Fd(Vtext)g Fj(vidget.\))71 744 y(The)g(cursor)g(may)h(be)f (positioned)e(by)i(clicking)f(the)h(pointer)f(within)g(the)h(data)g(\256eld.) 17 b(T)m(ext)11 b(can)h(be)f(blocked)f(out)71 806 y(by)i(dragging)f(the)h (mouse)h(over)f(the)g(text)g(\256eld.)21 b(The)12 b(blocked-out)f(text)h(is)g (then)g(considered)f(to)h(be)h(under)f(the)71 868 y(cursor)n(,)i(and)g(is)g (subject)e(to)i(be)g(edited)f(as)h(one)g(character)m(.)26 b(For)14 b(example,)h(blocking)d(out)i(all)f(of)h(the)g(text)f(and)71 930 y(hitting)8 b(backspace)j(deletes)g(all)f(characters.)17 b(If)11 b Fd(a)h Fj(is)e(pressed,)h(the)f(letter)h Fd(a)g Fj(replaces)g(all)g (the)f(blocked)g(text.)16 b(T)m(o)71 992 y(block)c(out)g(all)g(of)h(the)f (data,)i(position)c(the)j(cursor)f(at)h(the)g(end)f(of)h(the)g(data)f(and)h (press)f(the)h(mouse)f(button.)20 b(T)m(o)71 1054 y(initialize)9 b(the)h Fd(Vtext)g Fj(with)g(data)h(upon)e(creation,)i(use)f(the)h(code)g Fd(")p Fc(nn)p Fd(=")f Fj(within)f(the)h(prompt)g(\256eld)h Fd(s)f Fj(to)h(indicate)71 1116 y(the)e(rest)g(of)g(the)h(string)e(is)h (data.)16 b(For)9 b(example,)i(if)e Fd(s)i(=)f("pages=)p Fc(nn)p Fd(=)g(10")p Fj(,)h(the)e(resulting)f(prompt)h(is)g Fd("pages=")71 1178 y Fj(and)h(the)h(initial)e(data)i(is)g Fd("10")pb* VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;17 Fj(.)17 b(T)m(o)11 b(set)f(the)h(data)g(after)g(the)g Fd(Vtext)g Fj(vidget)e(has)i (been)g(inserted)f(into)g(a)h(frame,)i(use)71 1240 y Fd(VSet\(vidget,)g (string\))p Fj(.)71 1302 y(Full)d(line)h(editing)e(capabilities)h(are)i(via)f (the)f(following)g(commands:)147 1410 y(left)h(arrow)335 b(move)12 b(left)147 1472 y(right)f(arrow)309 b(move)12 b(right)147 1534 y(backspace)326 b(delete)11 b(to)g(the)g(left)g(of)g(the)g(cursor)71 1658 y(For)g(several)g Fd(Vtext)g Fj(vidgets)f(linked)g(together)g(via)h(a)h (dialog)e(box:)147 1720 y(up)h(arrow)350 b(move)12 b(to)e(previous)g(line)147 1782 y(tab,)i(return,)f(or)g(down)g(arrow)35 b(move)12 b(to)e(next)h(line)71 1906 y(Parameters:)147 1969 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 2031 y Fd(s)234 b Fj(a)11 b(string)f(prompt)147 2093 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i(callbacks)e(as)h(described)g (above)147 2155 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g (Icon)g(data)h(type)147 2217 y Fd(sz)211 b Fj(maximum)12 b(number)f(of)g (characters)h(in)e(text)h(\256eld)147 2279 y Fd(mask)148 b Fj(a)11 b(cset)g(of)h(allowable)e(characters)h(to)g(be)g(inputted)71 2403 y(Defaults:)147 2465 y Fd(s)234 b("")147 2528 y(sz)211 b Fj(18)147 2590 y Fd(mask)148 b(&cset)11 b Fj(\(all)g(characters)g(are)h (allowed\))926 2753 y Fe(-)f(25)g(-)p eop %%Page: 26 27 26 bop 71 124 1860 6 v 71 186 a Fa(Vtoggle\([frame,)13 b(x,)f(y)m(,)g(])h(w)n (,)g(s,)g(callback,)f(id,)g(style,)h(aw)n(,)g(ah\))71 309 y Fd(Vtoggle\(...\))i Fj(creates)8 b(a)g(toggle)f(vidget.)14 b Fd(VEvent\(\))9 b Fj(returns)e(the)h Fd(id)g Fj(\256eld)g(of)g(the)f (toggle)g(button)f(on)i(a)g(successful)71 371 y(press.)71 478 y(Parameters:)147 540 y Fd(w)224 b Fj(a)11 b(window)f(\256le)147 602 y Fd(s)234 b Fj(a)11 b(string)f(label)h(for)g(the)g(toggle)147 664 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 727 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 789 y Fd(style)163 b Fj(a)11 b(symbolic)f(constant)g(indicating)f(the)i (style)g(of)g(the)g(toggle)147 851 y Fd(aw)199 b Fj(the)11 b(width)f(in)g(pixels)g(of)i(the)e(button)147 913 y Fd(ah)207 b Fj(the)11 b(height)f(in)g(pixels)g(of)i(the)f(button)71 1037 y(Defaults:)147 1099 y Fd(style)163 b(V)p 437 1099 14 2 v 17 w(2D)147 1161 y(aw)199 b Fj(8)11 b(+)g(the)g(pixel)f(width)g(of)h Fd(s)147 1223 y(ah)207 b Fj(8)11 b(+)g(the)g(font)f(height)g(of)i Fd(w)p 71 1364 1860 6 v 71 1426 a Fa(Vvert)p 187 1426 14 2 v 17 w(radio)p 316 1426 V 15 w(buttons\([frame,)h(x,)g(y)m(,)f(])h(w)n(,)g (data,)f(callback,)h(id,)f(style\))71 1549 y Fd(Vvert)p 180 1549 V 16 w(radio)p 296 1549 V 17 w(buttons\(...\))17 b Fj(creates)12 b(a)g(frame)h(containing)d(radio)h(buttons)e(positioned)h(vertically)g(with)h (labels)71 1611 y(corresponding)g(to)i(each)g(entry)g(in)f(the)h(list)f (passed)h(as)g Fd(L)p Fj(.)h Fd(VEvent\(\))g Fj(returns)e(the)h(string)f (label)g(of)i(the)e(button)71 1673 y(selected.)21 b(If)14 b(a)f(callback)g (is)f(speci\256ed,)i(the)f(value)f(passed)h(is)f(the)h(string)f(label)g(of)h (the)g(radio)g(button)e(pressed.)71 1735 y(This)f(vidget)g(may)h(also)g(be)g (created)h(using)e Fd(V)n(radio)p 900 1735 V 18 w(buttons\(...\))p Fj(.)71 1842 y(Parameters:)147 1904 y Fd(w)224 b Fj(a)11 b(window)f(\256le) 147 1966 y Fd(data)169 b Fj(a)11 b(list)f(of)i(string)d(labels)147 2028 y Fd(callback)93 b Fj(a)11 b(single)f(callback)h(or)g(list)f(of)i (callbacks)e(as)h(described)g(above)147 2091 y Fd(id)222 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)h(type)147 2153 y Fd(style)163 b Fj(a)11 b(button)f(style)71 2277 y(Defaults:)147 2339 y Fd(callback)93 b(&null)12 b Fj(\(no)f(clients)f(called\))147 2401 y Fd(id)222 b(&null)12 b Fj(\(no)f(identi\256er)g(is)f(sent)h(to)g(the)g (procedure\))147 2463 y Fd(style)163 b(V)p 437 2463 V 17 w(2D)926 2753 y Fe(-)11 b(26)g(-)p eop %%Page: 27 28 27 bop 71 124 1860 6 v 77 191 a Fa(Vvert)p 193 191 14 2 v 17 w(scrollbar\([frame,)12 b(x,)h(y)m(,)f(])h(w)n(,)g(callback,)f(id,)g(length,) g(width,)308 253 y(bottom)p 465 253 V 16 w(bound,)f(top)p 716 253 V 16 w(bound,)g(increment,)i(window)p 1306 253 V 16 w(size,)f (discontinuous\))71 434 y Fd(Vvert)p 180 434 V 16 w(scrollbar\(...\))19 b Fj(creates)13 b(a)f(vertical)g(scrollbar)m(.)19 b Fd(VEvent\(\))13 b Fj(returns)e(the)h(value)g(of)g(the)g(internal)f(coupler)71 496 y(variable)f(associated)h(with)f(the)h(scrollbar)f(upon)g(release)i(of)f (the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h (or)g(list)f(of)h(callbacks)g(as)g(described)g(above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)g(type) 147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(height\))g(of)h(the)g (scrollbar)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g(of)h(the)g (scrollbar)147 976 y Fd(bottom)p 289 976 V 17 w(bound)53 b Fj(the)11 b(value)f(limit)h(at)g(the)g(bottom)f(of)h(the)g(scrollbar)147 1038 y Fd(top)p 213 1038 V 17 w(bound)129 b Fj(the)11 b(value)f(limit)h(at)g (the)g(top)f(of)i(the)e(scrollbar)147 1100 y Fd(increment)135 b Fj(the)11 b(increment)g(value)g(used)f(by)h(the)g(arrow)g(buttons)147 1162 y Fd(window)p 301 1162 V 17 w(size)85 b Fj(the)11 b(size)g(of)g(the)g (view)g(window)m(,)f(in)h(the)f(same)i(units)e(as)h(the)g(range)147 1225 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i (invoked)e(only)g(upon)g Ff(r)n(elease)481 1287 y Fj(of)h(the)g(thumb)71 1411 y(Defaults:)147 1473 y Fd(width)228 b Fj(15)11 b(pixels)147 1535 y Fd(bottom)p 289 1535 V 17 w(bound)53 b Fj(0.0)147 1597 y Fd(top)p 213 1597 V 17 w(bound)129 b Fj(1.0)147 1659 y Fd(increment)135 b Fj(10\045)10 b(of)i(the)f(range)926 2753 y Fe(-)g(27)g(-)p eop %%Page: 28 29 28 bop 71 124 1860 6 v 77 191 a Fa(Vvert)p 193 191 14 2 v 17 w(slider\([frame,)13 b(x,)f(y)m(,)g(])h(w)n(,)g(callback,)g(id,)e(length,)h (width,)308 253 y(bottom)p 465 253 V 16 w(bound,)f(top)p 716 253 V 16 w(bound,)g(init,)h(discontinuous\))71 434 y Fd(Vvert)p 180 434 V 16 w(slider\(...\))k Fj(creates)9 b(a)h(vertical)f(slider)m(.)15 b Fd(VEvent\(\))c Fj(returns)e(the)g(value)g(of)g(the)g(internal)f(coupler)h (variable)71 496 y(associated)h(with)g(the)h(slider)f(upon)g(release)i(of)f (the)g(mouse.)71 604 y(Parameters:)147 666 y Fd(w)301 b Fj(a)11 b(window)f(\256le)147 728 y Fd(callback)170 b Fj(a)11 b(single)f(callback)h (or)g(list)f(of)h(callbacks)g(as)g(described)g(above)147 790 y Fd(id)299 b Fj(a)11 b(user)g(assigned)f(id)h(of)g(any)g(Icon)g(data)g(type) 147 852 y Fd(length)211 b Fj(the)11 b(length)f(\(height\))g(of)h(the)g (slider)147 914 y Fd(width)228 b Fj(the)11 b(pixel)f(width)g(of)h(the)g (slider)147 976 y Fd(bottom)p 289 976 V 17 w(bound)53 b Fj(the)11 b(value)f(limit)h(at)g(the)g(bottom)f(of)h(the)g(slider)147 1038 y Fd(top)p 213 1038 V 17 w(bound)129 b Fj(the)11 b(value)f(limit)h(at)g (the)g(top)f(of)i(the)e(slider)147 1100 y Fd(init)276 b Fj(initial)9 b(value)i(of)g(the)g(slider)147 1162 y Fd(discontinuous)57 b Fj(if)11 b(non-null,)f(callbacks)g(are)i(invoked)e(only)g(upon)g Ff(r)n(elease)481 1225 y Fj(of)h(the)g(slider)71 1349 y(Defaults:)147 1411 y Fd(width)228 b Fj(15)11 b(pixels)147 1473 y Fd(bottom)p 289 1473 V 17 w(bound)53 b Fj(0.0)147 1535 y Fd(top)p 213 1535 V 17 w(bound)129 b Fj(1.0)147 1597 y Fd(init)276 b(bottom)p 623 1597 V 16 w(bound)926 2753 y Fe(-)11 b(28)g(-)p eop %%Page: 29 30 29 bop 71 124 1860 6 v 71 231 a Fj(The)11 b(following)e(entries)h(are)i (coupler)f(vidgets.)p 71 338 V 71 401 a Fa(Vbool)p 201 401 14 2 v 15 w(coupler)h(\(value\))71 523 y Fd(Vbool)p 189 523 V 17 w(coupler\(...\))17 b Fj(creates)10 b(a)h(boolean)e(coupler)h( VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1 variable)g (with)g(an)g(initial)f(value)h(of)g Fd(value)p Fj(.)17 b(The)10 b(value)g(can)71 585 y(be)j(null)g(to)g(indicate)f(the)i(coupler)f(is)g (unset,)g(or)h(non-null)e(to)h(indicate)f(it)h(is)g(set.)24 b(Client)13 b(vidgets)f(or)h(callback)71 647 y(procedures)d(are)i(registered) e(with)g(the)h(coupler)g(via)g Fd(V)m(AddClient\(\))p Fj(,)i(and)d(the)h (value)g(of)g(the)g(coupler)f(is)h(altered)71 709 y(via)f Fd(VT)-5 b(oggle\(\),)14 b(VSet\(\),)f(VUnSet\(\),)f Fj(or)f(by)g(the)g(vidgets)f (themselves.)71 817 y(Parameters:)147 879 y Fd(value)149 b Fj(a)11 b(value)g(to)g(initialize)e(the)i(coupler)g(to)71 1003 y(Default:)147 1065 y Fd(value)149 b(&null)p 71 1206 1860 6 v 71 1268 a Fa(Vcoupler)12 b(\(value\))71 1390 y Fd(Vcoupler\(...\))23 b Fj(creates)13 b(a)h(coupler)e(variable)h(with)f(an)i(initial)d(value)i(of)g Fd(value)p Fj(.)24 b(Client)12 b(vidgets)g(or)h(callback)71 1452 y(procedures)d(are)i(registered)e(with)g(the)h(coupler)g(via)g Fd(V)m(AddClient\(\))p Fj(,)i(and)d(the)h(value)g(of)g(the)g(coupler)f(is)h (altered)71 1515 y(via)f Fd(VSet\(\))j Fj(or)e(by)g(the)g(vidgets)e (themselves.)71 1622 y(Parameters:)147 1684 y Fd(value)149 b Fj(a)11 b(value)g(to)g(initialize)e(the)i(coupler)g(to)71 1808 y(Default:)147 1870 y Fd(value)149 b(&null)926 2753 y Fe(-)11 b(29)g(-)p eop %%Page: 30 31 30 bop 71 124 1860 6 v 71 186 a Fa(V)m(range)p 225 186 14 2 v 17 w(coupler\(min,)11 b(max,)i(value,)g(inc\))71 309 y Fd(V)n(range)p 217 309 V 18 w(coupler\(...\))22 b Fj(creates)14 b(a)f(coupler)g(that)f (stores)h(numeric)g(values)f(within)g(a)h(range)h(speci\256ed)f(by)f Fd(min)71 371 y Fj(and)h Fd(max)p Fj(.)24 b(The)13 b(\256eld)h Fd(inc)g Fj(is)f(used)g(by)g(tools)f(that)h(increment)h(the)f(value)h(by)f(a) h(certain)f(value,)h(for)g(example,)71 433 y(the)c(arrows)h(in)f(a)h (scrollbar)f(composition.)15 b(If)c(both)f Fd(min)h Fj(and)f Fd(max)h Fj(are)h(speci\256ed)e(as)h(integer)f(values,)h(then)f(the)71 495 y(value)g(of)i(the)f(coupler)f(is)h(truncated)f(to)h(an)g(integer)m(.)17 b(Otherwise)10 b(the)h(value)g(is)f(real.)71 602 y(Parameters:)147 664 y Fd(min)184 b Fj(minimum)11 b(bound)f(of)h(the)g(coupler)147 727 y Fd(max)171 b Fj(maximum)12 b(bound)e(of)h(the)g(coupler)147 789 y Fd(value)149 b Fj(the)11 b(initial)e(value)147 851 y Fd(inc)199 b Fj(an)11 b(increment)71 975 y(Defaults:)147 1037 y Fd(min)184 b Fj(0.0)147 1099 y Fd(max)171 b Fj(1.0)147 1161 y Fd(value)149 b(min)147 1223 y(inc)199 b Fj(10\045)11 b(of)g(the)g(range)0 1469 y Fh(Acknowledgements)0 1578 y Fj(The)e(design)f(and)h(implementation)f (of)h(the)g(library)g(is)g(the)g(result)f(of)h(many)h(helpful)e(comments,)i (recommendations,)f(and)0 1640 y(discussions)e(by)j(members)g(of)g(the)g (Icon)f(Project,)i(including)c(Mary)k(Cameron,)g(Ralph)f(Griswold,)e(Clint)h (Jef)o(fery)m(,)i(Gregg)0 1702 y(T)m(ownsend,)f(and)h(Ken)g(W)l(alker)m(.)17 b(Gregg)11 b(T)m(ownsend)f(has)h(made)h(a)f(number)g(of)h(improvements)e(to)h (the)g(initial)e(library)m(.)71 1765 y(This)h(work)h(was)g(supported)e(in)i (part)g(by)g(the)g(National)f(Science)h(Foundation)f(under)h(Grant)g (CCR-8901573.)926 2753 y Fe(-)g(30)g(-)p eop %%Page: 31 32 31 bop 0 124 a Fh(Sample)14 b(Pr)o(ograms)0 235 y Fg(Scr)o(oll)0 328 y Fd(#)f(This)f(program)i(provides)g(a)f(window)g(within)g(which)f(to)h (scroll)g(an)g(image)0 390 y(#)0 514 y(link)g(options)0 576 y(link)g(vidgets,)f(vscroll)0 638 y(link)h(wopen)0 700 y(link)g(xcompat)0 824 y(global)h(win,)e(im)p 278 824 14 2 v 17 w(win,)g(view)p 479 824 V 16 w(width,)h(view)p 718 824 V 16 w(height)0 887 y(global)h(scv)m(,)d(sch)0 1011 y(procedure)j(main\(args\))68 1073 y(local)f(opts,)f(\256le,)h(scrollbar)p 543 1073 V 17 w(width,)f(picw)m(,)h(pich,)g(root)68 1197 y(opts)g(:=)f(options\(args,)h Fb(")p Fd(f:w+h+)p Fb(")p Fd(\))68 1259 y(\256le)g(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(f)p Fb(")p Fd(])f Fc(j)136 1321 y Fd(stop\()p Fb(")p Fd(Usage:)18 b(scroll)13 b Fc(\000)p Fd(f)g(\256le)f([)p Fc(\000)p Fd(w)h(window)g(size/width])f([)p Fc(\000)p Fd(h)h(window)g (height])p Fb(")p Fd(\))68 1383 y(view)p 162 1383 V 16 w(width)g(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(w)p Fb(")p Fd(])g Fc(j)g Fd(300)68 1445 y(view)p 162 1445 V 16 w(height)i(:=)e Fc(n)p Fd(opts[)p Fb(")p Fd(h)p Fb(")p Fd(])g Fc(j)g Fd(view)p 719 1445 V 16 w(width)68 1508 y(scrollbar)p 242 1508 V 17 w(width)h(:=)f(15)0 1570 y(#)0 1632 y(#)h(Load)h(in)f(the)f(bitmap;)h(get)g(the)g(dimensions.)0 1694 y(#)68 1756 y(im)p 119 1756 V 16 w(win)g(:=)f(WOpen\()p Fb(")p Fd(canvas=hidden)p Fb(")p Fd(,)j Fb(")p Fd(image=)p Fb(")e Fc(jj)f Fd(\256le\))h Fc(j)136 1818 y Fd(stop\()p Fb(")p Fd(Couldn't)h(make)f(temporary)g(bitmap.)p Fb(")p Fd(\))68 1880 y(picw)g(:=)f(W)n(Attrib\(im)p 437 1880 V 16 w(win,)h Fb(")p Fd(width)p Fb(")p Fd(\))68 1942 y(pich)g(:=)f(W)n(Attrib\(im)p 429 1942 V 17 w(win,)g Fb(")p Fd(height)p Fb(")p Fd(\))68 2066 y(win)h(:=)f(WOpen\()p Fb(")p Fd(label=)p Fb(")j Fc(jj)c Fd(\256le,)i Fb(")p Fd(size=)p Fb(")f Fc(jj)136 2129 y Fd(\(view)p 245 2129 V 17 w(width)g(+)h(scrollbar)p 591 2129 V 17 w(width)f(+)h(1\))g Fc(jj)f Fb(")p Fd(,)p Fb(")g Fc(jj)136 2191 y Fd(\(view)p 245 2191 V 17 w(height)h(+)f(scrollbar)p 608 2191 V 17 w(width)h(+)f(1\))h(\))g Fc(j)205 2253 y Fd(stop\()p Fb(")p Fd(***)e(cannot)j(open)f(\256le)p Fb(")p Fd(\))68 2377 y(root)g(:=)f(V)n(root)p 320 2377 V 17 w(frame\(win\))0 2439 y(#)0 2501 y(#)h(Create)g(two)f(scrollbars.)0 2563 y(#)68 2625 y(scv)g(:=)g(Vvert)p 310 2625 V 16 w(scrollbar\(root,)i Fc(\000)p Fd(1,)f(0,)f(win,)h(sl)p 880 2625 V 16 w(cb,)f(1,)926 2753 y Fe(-)f(31)g(-)p eop %%Page: 32 33 32 bop 136 124 a Fd(view)p 230 124 14 2 v 17 w(height,scrollbar)p 554 124 V 17 w(width,)13 b(pich,)f(0,)h(,)f(view)p 978 124 V 16 w(height\))68 186 y(sch)h(:=)e(Vhoriz)p 334 186 V 18 w(scrollbar\(root,) i(0,)g Fc(\000)p Fd(1,)f(win,)h(sl)p 905 186 V 16 w(cb,)f(2,)h(view)p 1136 186 V 16 w(width,)93 248 y(scrollbar)p 267 248 V 18 w(width,)f(0,)g (picw)m(,)h(,)f(view)p 696 248 V 17 w(width\))68 373 y(VResize\(root\))0 435 y(#)0 497 y(#)h(Draw)g(the)f(initial)i(view)e(of)h(the)f(pixmap,)h(based) h(on)f(the)g(scrollbar)r(')o(s)g(values.)0 559 y(#)68 621 y(sl)p 104 621 V 16 w(cb\(scv)m(,)f(scv)m(.callback.value\))68 683 y(sl)p 104 683 V 16 w(cb\(sch,)g(sch.callback.value\))0 745 y(#)0 807 y(#)h(Now)f(get)h(events,)f(pass)h(control)g(to)g(the)f(procedure)j (quit\(\))e(if)f(an)h(event)g(is)g(not)0 869 y(#)g(captured)g(by)g(a)g (vidget.)0 932 y(#)68 994 y(GetEvents\(root,)g(quit,)g(,)f(resize\))0 1056 y(end)0 1180 y(#)0 1242 y(#)h(T)-5 b(erminate)13 b(the)g(program)h(on)f (a)g(keypress)f(of)h Fb(")p Fd(q)p Fb(")p Fd(.)0 1304 y(#)0 1366 y(procedure)h(quit\(e\))68 1490 y(if)f(e)f(===)g Fb(")p Fd(q)p Fb(")h Fd(then)g(stop\()p Fb(")p Fd(End)h(scroll.)p Fb(")p Fd(\))0 1553 y(end)0 1677 y(procedure)g(resize\(root\))68 1801 y(VReformat\(scv)m(,)e(W)n(Attrib\(scv)m(.win,)f Fb(")p Fd(height)p Fb(")p Fd(\))j Fc(\000)f Fd(15\))68 1863 y(VReformat\(sch,)g(W)n (Attrib\(sch.win,)f Fb(")p Fd(width)p Fb(")p Fd(\))h Fc(\000)g Fd(15\))0 1925 y(end)0 2049 y(#)0 2111 y(#)g(Copy)g(a)g(portion)g(of)g(the)f (bitmap)i(to)e(the)h(main)0 2174 y(#)g(window)g(based)h(on)f(the)g(values)g (of)f(the)h(scrollbars.)0 2236 y(#)0 2298 y(procedure)h(sl)p 253 2298 V 16 w(cb\(caller)m(,)g(val\))68 2360 y(static)e(vpos,)g(hpos)68 2422 y(initial)h(vpos)g(:=)f(hpos)h(:=)f(0)68 2546 y(\(caller)m(.id)i(=)e(1,) h(vpos)f(:=)g(val\))h Fc(j)f Fd(hpos)i(:=)d(val)68 2608 y(CopyArea\(im)p 335 2608 V 18 w(win,)h(win,)h(hpos,)f(vpos,)h(view)p 876 2608 V 16 w(width,)f(view)p 1114 2608 V 17 w(height,)h(0,)f(0\))926 2753 y Fe(-)f(32)g(-)p eop %%Page: 33 34 33 bop 0 124 a Fd(end)926 2753 y Fe(-)11 b(33)g(-)p eop %%Page: 34 35 34 bop 0 124 a Fg(Splat)0 217 y Fd(#)13 b(This)f(program)i(= VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1draws)f(randomly)h (sized)e(circles)h(in)g(random)h(colors)e(at)h(random)h(places)0 279 y(#)0 403 y(link)f(color)m(,)g(vidgets,)f(vradio,)h(wopen)0 527 y(global)h(COLORS,)f(state,)f(region,)i(Go,)e(Stop,)h(Quit,)g(Redraw)0 652 y(procedure)h(main)f(\(arg\))68 714 y(local)g(win,)g(root,)f(rb)68 838 y(Go)h(:=)f Fb(")p Fd(GO)p Fb(")p Fd(;)i(Stop)f(:=)f Fb(")p Fd(ST)o(OP)p Fb(")p Fd(;)h(Quit)g(:=)f Fb(")p Fd(QUIT)p Fb(")p Fd(;)g(Redraw)h(:=)f Fb(")p Fd(CLEAR)p Fb(")68 900 y Fd(COLORS)i(:=)e([)p Fb(")p Fd(plum)p Fb(")p Fd(,)g Fb(")p Fd(slate)h(blue)p Fb(")p Fd(,)h Fb(")p Fd(olive)f(drab)p Fb(")p Fd(,)g Fb(")p Fd(coral)p Fb(")p Fd(,)g Fb(")p Fd(wheat)p Fb(")p Fd(])68 1024 y(win)g(:=)f(WOpen\()p Fb(")p Fd(label=splat)p Fb(")p Fd(,)i Fb(")p Fd(size=500,500)p Fb(")p Fd(\))g Fc(j)136 1086 y Fd(stop\()p Fb(")p Fd(***)e(cannot)h(open)h (window)p Fb(")p Fd(\))68 1148 y(root)f(:=)f(V)n(root)p 320 1148 14 2 v 17 w(frame\(win\))68 1211 y(rb)h(:=)f(V)n(radio)p 304 1211 V 18 w(buttons\(root,)h(10,)g(10,)136 1273 y(win,)g([)p Fb(")p Fd(GO)p Fb(")p Fd(,)g Fb(")p Fd(ST)o(OP)p Fb(")p Fd(,)g Fb(")p Fd(CLEAR)p Fb(")p Fd(,)h Fb(")p Fd(QUIT)p Fb(")p Fd(],)d(state)p 1169 1273 V 16 w(change\))68 1335 y(region)j(:=)e(Vpane\(win,)i(,)e(,)g(2\)) 68 1397 y(VInsert\(root,)h(region,)g(80,)g(10,)g(400,)g(400\))68 1521 y(VSet\(rb,)h Fb(")p Fd(ST)o(OP)p Fb(")p Fd(\))68 1583 y(VResize\(root\))68 1707 y(state)e(:=)g(Stop)68 1769 y(repeat)i Fc(f)136 1832 y Fd(while)g(\(*Pending\(win\))g Ff(>)f Fd(0\))g Fc(j)f Fd(\(state)g(==)g(Stop\))h Fc(j)f Fd(\(state)h(==)e(Redraw\))j(do)205 1894 y(VEvent\(root,)f(Event\(root.win\),)g(&x,)f(&y\))136 1956 y(Splat\(region\))136 2018 y Fc(g)0 2080 y Fd(end)0 2204 y(procedure)i(state)p 319 2204 V 16 w(change\(vid,)g(val\))68 2266 y(state)e(:=)g(val)68 2328 y(if)h(state)f(==)f(Quit)i(then)h(exit\(\))68 2390 y(if)f(state)f(==)f(Redraw)j(then)136 2453 y(EraseArea\(region)q(.win,)h (region.ax)e(+)f(1,)h(region.ay)h(+)e(1,)g(region.aw)i Fc(\000)f Fd(2,)205 2515 y(region.ah)h Fc(\000)f Fd(2\))0 2577 y(end)926 2753 y Fe(-)e(34)g(-)p eop %%Page: 35 36 35 bop 0 186 a Fd(procedure)14 b(Splat\(box\))68 248 y(local)f(x,)f(y)m(,)g (w)m(,)g(h,)h(c,)f(y3)68 373 y(h)h(:=)f(w)g(:=)g(?100)68 435 y(x)h(:=)e(?\(box.aw)i Fc(\000)g Fd(w\))68 497 y(y)g(:=)e(?\(box.ah)j Fc(\000)f Fd(h\))68 559 y(y3)g(:=)f(box.ay)g(+)g(?\(box.ah\))68 621 y(c)h(:=)e(?5)68 683 y(Shade\(box.win,)j(COLORS[c]\))68 745 y(FillArc\(box.win,)f(box.ax)f(+)h(x,)f(box.ay)g(+)g(y)m(,)g(w)m(,)h(h\)) 0 807 y(end)926 2753 y Fe(-)e(35)g(-)p eop %%Page: 36 37 36 bop 0 124 a Fg(Vdemo)0 217 y Fd(#)13 b(This)f(program)i(demonstrates)f(a)g (variety)g(of)f(vidgets)0 279 y(#)0 403 y(link)h(dialog,)g(options,)g (vidgets,)f(vdialog,)i(vmenu,)e(vradio,)h(vbuttons,)g(vtext)0 465 y(link)g(vscroll)0 590 y(global)h(dialog)0 714 y(procedure)g (main\(args\))68 776 y(local)f(opts,)f(font,)h(win,)f(ht,)g(title,)g(wid,)h (row)m(,)g(pad,)g(root,)f(cv)m(,)g(i,)g(ti,)g(scb)68 838 y(local)h(tm,)f(s,)g (max,)g(rb1,)h(rb2,)g(rb3)68 900 y(local)g(FontT)m(ypeSubMenu,)i (FontSubMenu,)e(CompMemSubMenu,)h(ExecMemSubMenu)68 962 y(local)f(FileMenu,)g (OptionsMenu)68 1086 y(opts)g(:=)f(options\(args,)h Fb(")p Fd(f:wh)p Fb(")p Fd(\))68 1148 y(font)g(:=)e Fc(n)p Fd(opts[)p Fb(")p Fd(f)p Fb(")p Fd(])68 1211 y(wid)i(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(w)p Fb(")p Fd(])68 1273 y(ht)h(:=)f Fc(n)p Fd(opts[)p Fb(")p Fd(h)p Fb(")p Fd(])68 1335 y(title)h(:=)e Fb(")p Fd(All)j(the)e (vidgets.)p Fb(")68 1583 y Fd(win:=)g(WOpen\()p Fb(")p Fd(label=)p Fb(")j Fc(jj)d Fd(title,)136 1645 y Fb(")p Fd(size=)p Fb(")h Fc(jj)f Fd(\()p Fc(n)p Fd(wid)g Fc(j)h Fd(550\))g Fc(jj)f Fb(")p Fd(,)p Fb(")h Fc(jj)f Fd(\()p Fc(n)p Fd(ht)g Fc(j)g Fd(550\)\))i Fc(j)205 1707 y Fd(stop\()p Fb(")p Fd(***)d(can't)i(open)h(window)p Fb(")p Fd(\))68 1832 y(pad)g(:=)d(W)n(Attrib\(win,)i Fb(")p Fd(fheight)p Fb(")p Fd(\)+10)68 1894 y(row)g(:=)f([)7 b(])68 1956 y(every)13 b(i)g(:=)e(0)i(to)g(9)g(do)g(put\(row)m(,)g(i*pad\))68 2080 y(root)g(:=)f(V)n(root)p 320 2080 14 2 v 17 w(frame\(win\))0 2204 y(##)h(Vdialog)68 2266 y(dialog:=)g(Vdialog\(win\))68 2390 y(VRegister\(dialog,)h(Vtext\(win,)f Fb(")p Fd(Button)g(T)-5 b(ext:)16 b Fb(")p Fd(,)d(,1\),)f(0,)h(row[1]\))68 2453 y(VRegister\(dialog,) h(Vtext\(win,)f Fb(")p Fd(Button)g(Id)f(:)18 b Fb(")p Fd(,)12 b(,2\),)g(0,)h(row[2]\))68 2515 y(VRegister\(dialog,)h(Vtext\(win,)f Fb(")p Fd(Callback)g(:)k Fb(")p Fd(,)12 b(,3\),)h(0,)f(row[3]\))68 2577 y(VRegister\(dialog,)i(Vtext\(win,)f Fb(")p Fd(X:)f Fb(")p Fd(,)h(,4,3,)f(&digits\),)h(10,)g(row[5]\))926 2753 y Fe(-)e(36)g(-)p eop %%Page: 37 38 37 bop 68 124 a Fd(VRegister\(dialog,)14 b(Vtext\(win,)f Fb(")p Fd(Y)m(:)g Fb(")p Fd(,)f(,5,3,)g(&digits\),)h(10,)g(row[6]\))68 186 y(VRegister\(dialog,)h(Vtext\(win,)f Fb(")p Fd(W)o(:)f Fb(")p Fd(,)h(,6,3,)f(&digits\),)g(100,)i(row[5]\))68 248 y (VRegister\(dialog,)g(Vtext\(win,)f Fb(")p Fd(H:)f Fb(")p Fd(,)g(,7,3,)g (&digits\),)h(100,)g(row[6]\))68 311 y(VRegister\(dialog,)h(V)n(radio)p 560 311 14 2 v 18 w(buttons\(win,)f([)p Fb(")p Fd(solid)p Fb(")p Fd(,)g Fb(")p Fd(onof)o(f)p Fb(")p Fd(])g(,)f(,8\),)g(200,)h(row[5]\))0 373 y(#)0 435 y(#)g(Attach)f(a)h(slider)h(to)e(a)h(textual)g(input)g(device.) 0 497 y(#)68 559 y(cv)f(:=)g(Vcoupler\(\))68 621 y(V)m(AddClient\(cv)m(,)h (ti)f(:=)g(Vtext\(win,)g(,)g(cv)m(,)g(9,)g(3,)h(&digits\)\))68 683 y(V)m(AddClient\(cv)m(,)g(scb)f(:=)g(Vvert)p 619 683 V 16 w(scrollbar\(win,)i(cv)m(,)d(10,)i(75,)g(,)f(0,)g(100,)i(1\)\))68 745 y(VInsert\(dialog,)g(scb,)e(275,)h(row[5]\))68 807 y(VRegister\(dialog,)h (ti,)e(300,)h(row[5]\))0 869 y(#)0 932 y(#)g(Control)g(buttons.)0 994 y(#)68 1056 y(Vbutton\(dialog,)i(100,)e(row[8],)f(win,)g Fb(")h Fd(Ok)g Fb(")p Fd(,)f(,V)p 949 1056 V 16 w(OK\))68 1118 y(Vbutton\(dialog,)j(200,)e(row[8],)f(win,)g Fb(")p Fd(Cancel)p Fb(")p Fd(,)h(,V)p 1007 1118 V 17 w(CANCEL\))68 1242 y(VFormat\(dialog\))68 1366 y(Vmessage\(root,)h(10,)e(0.5,)h(win,)f Fb(")p Fd(Press)h(mouse)g (button)g(to)g(open)h(a)f(dialog.)p Fb(")p Fd(\))0 1490 y(##)g(Vsub)p 169 1490 V 17 w(menu,)g(Vmenu)p 468 1490 V 17 w(bar)0 1553 y(#)0 1615 y(#)g(Have)g(to)f(create)h(the)g(menu)g(system)f(bottom)p Fc(\000)p Fd(up,)h(so...)k(start)12 b(at)g(the)h(deepest)g(leaves.)0 1677 y(#)0 1739 y(#)g(Use)f(Vsub)p 237 1739 V 17 w(menu)i(to)e(build)i(sub)p Fc(\000)p Fd(menus.)0 1801 y(#)0 1863 y(#)f(Once)g(the)g(sub)p Fc(\000)p Fd(menus)h(have)f(been)h(built,)e(use)h(Vmain)p 1043 1863 V 17 w(menu)h(to)e(make)h(the)g(menu)g(bar)m(.)0 1925 y(#)68 1987 y(FileMenu)h(:=)e(Vsub)p 426 1987 V 16 w(menu\(win,)162 2049 y Fb(")p Fd(New)p Fb(")p Fd(,)g(m)p 383 2049 V 16 w(cb,)162 2111 y Fb(")p Fd(Open)p Fb(")p Fd(,)h(m)p 403 2111 V 17 w(cb,)162 2174 y Fb(")p Fd(Close)p Fb(")p Fd(,)f(m)p 408 2174 V 17 w(cb,)162 2236 y Fb(")p Fd(Save)p Fb(")p Fd(,)h(m)p 396 2236 V 16 w(cb,)162 2298 y Fb(")p Fd(Save)g(As)p Fb(")p Fd(,)g(m)p 462 2298 V 16 w(cb,)162 2360 y Fb(")p Fd(Print)p Fb(")p Fd(,)g(m)p 386 2360 V 16 w(cb,)162 2422 y Fb(")p Fc(\000\000\000\000\000\000\000\000)p Fb(")p Fd(,)i(,)162 2484 y Fb(")p Fd(Quit)p Fb(")p Fd(,)e(exit)162 2546 y(\))926 2753 y Fe(-)e(37)g(-)p eop %%Page: 38 39 38 bop 68 124 a Fd(FontT)m(ypeSubMenu)15 b(:=)d(Vsub)p 623 124 14 2 v 17 w(menu\(win,)162 186 y Fb(")p Fd(Normal)p Fb(")p Fd(,)h(m)p 439 186 V 16 w(cb,)162 248 y Fb(")p Fd(Bold)p Fb(")p Fd(,)g(m)p 383 248 V 16 w(cb,)162 311 y Fb(")p Fd(Italic)p Fb(")p Fd(,)f(m)p 386 311 V 16 w(cb,)162 373 y Fb(")p Fd(Underline)p Fb(")p Fd(,)i(m)p 487 373 V 16 w(cb,)162 435 y(\))68 559 y(FontSubMenu)g(:=)e (Vsub)p 524 559 V 17 w(menu\(win,)162 621 y Fb(")p Fd(T)n(imes)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 683 y Fb(")p Fd(Courier)p Fb(")p Fd(,)h(FontT)m(ypeSubMenu,)162 745 y Fb(")p Fd(Palatino)p с VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1hFb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 807 y Fb(")p Fd(Schoolbook)p Fb(")p Fd(,)h(FontT)m(ypeSubMenu,)162 869 y Fb(")p Fd(Helvetica)p Fb(")p Fd(,)e(FontT)m(ypeSubMenu,)162 932 y Fb(")p Fd(Symbol)p Fb(")p Fd(,)h(m)p 444 932 V 16 w(cb,)162 994 y Fb(")p Fd(Arial)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 1056 y Fb(")p Fd(Sans)g(Serif)p Fb(")p Fd(,)g(FontT)m(ypeSubMenu,)162 1118 y(\))68 1242 y(CompMemSubMenu)i (:=)c(Vsub)p 655 1242 V 17 w(menu\(win,)162 1304 y Fb(")p Fd(Constant)h(T)-5 b(able)14 b(Size)p Fb(")p Fd(,)e(m)p 696 1304 V 17 w(cb,)162 1366 y Fb(")p Fd(Field)h(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 613 1366 V 16 w(cb,)162 1428 y Fb(")p Fd(Global)h(Symbol)f(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 810 1428 V 16 w(cb,)162 1490 y Fb(")p Fd(Identi\256er)g(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 689 1490 V 16 w(cb,)162 1553 y Fb(")p Fd(Local)g(Symbol)g(T)-5 b(able)14 b(Size)p Fb(")p Fd(,)e(m)p 787 1553 V 17 w(cb,)162 1615 y Fb(")p Fd(Line)h(Number)h(Space)p Fb(")p Fd(,)f(m)p 694 1615 V 16 w(cb,)162 1677 y Fb(")p Fd(String)g(Space)p Fb(")p Fd(,)g(m)p 552 1677 V 17 w(cb,)162 1739 y Fb(")p Fd(File)g(Name)g(T)-5 b(able)13 b(Size)p Fb(")p Fd(,)g(m)p 722 1739 V 16 w(cb,)162 1801 y(\))68 1925 y(ExecMemSubMenu)h(:=)e(Vsub)p 635 1925 V 17 w(menu\(win,)162 1987 y Fb(")p Fd(Block)h(Region)p Fb(")p Fd(,)g(m)p 560 1987 V 16 w(cb,)162 2049 y Fb(")p Fd(String)g(Region)p Fb(")p Fd(,)h(m)p 568 2049 V 16 w(cb,)162 2111 y Fb(")p Fd(Evaluation)g (Stack)p Fb(")p Fd(,)e(m)p 631 2111 V 16 w(cb,)162 2174 y Fb(")p Fd(Co)p Fc(\000)p Fd(expression)i(Blocks)p Fb(")p Fd(,)e(m)p 752 2174 V 16 w(cb,)162 2236 y Fb(")p Fd(Quali\256er)i(Pointer)f(Region)p Fb(")p Fd(,)h(m)p 775 2236 V 16 w(cb,)162 2298 y(\))68 2422 y(OptionsMenu)g(:=)e(Vsub)p 509 2422 V 17 w(menu\(win,)162 2484 y Fb(")p Fd(Font)p Fb(")p Fd(,)g(FontSubMenu,)162 2546 y Fb(")p Fd(Font)g(Size)p Fb(")p Fd(,)h(m)p 484 2546 V 16 w(cb,)162 2608 y Fb(")p Fc(\000\000\000\000\000\000\000\000)p Fb(")p Fd(,)i(,)926 2753 y Fe(-)c(38)g(-)p eop %%Page: 39 40 39 bop 162 124 a Fb(")p Fd(Parameter)14 b(String)p Fb(")p Fd(,)f(m)p 636 124 14 2 v 16 w(cb,)162 186 y Fb(")p Fd(Library)g(Folders)p Fb(")p Fd(,)g(m)p 595 186 V 17 w(cb,)162 248 y Fb(")p Fd(Compiler)g(Memory)p Fb(")p Fd(,)g(CompMemSubMenu,)162 311 y Fb(")p Fd(Execution)g(Memory)p Fb(")p Fd(,)g(ExecMemSubMenu)162 373 y(\))68 497 y(tm)f(:=)g(Vmenu)p 329 497 V 17 w(bar\(root,)i(0,)e(0,)h(win,)162 559 y Fb(")p Fd(File)p Fb(")p Fd(,)f(FileMenu,)162 621 y Fb(")p Fd(Options)p Fb(")p Fd(,)h(OptionsMenu)162 683 y(\))0 807 y(##)g(Vline)68 869 y(VInsert\(root,)g(Vline\(win,)h(,)e(tm.ah,)g(,)g(tm.ah\)\))68 994 y(Vbutton\(root,)i(10,)e(40,)h(win,)g Fb(")p Fd(Push)g(Me)p Fb(")p Fd(,)g(popup,)g Fb(")p Fd(This)g(is)f(a)h(notice)g(button.)p Fb(")p Fd(\))0 1118 y(##)g(Vpull)p 166 1118 V 18 w(down)p 292 1118 V 17 w(pick)p 390 1118 V 16 w(menu)68 1180 y(s)g(:=)e([)p Fb(")p Fd(T)n(imes)p Fb(")p Fd(,)i Fb(")p Fd(Helvetica)p Fb(")p Fd(,)f Fb(")p Fd(NewCentury)p Fb(")p Fd(,)h Fb(")p Fd(Symbol)p Fb(")p Fd(,)g Fb(")p Fd(Palatino)p Fb(")p Fd(,)205 1242 y Fb(")p Fd(Zapf)f(Chancery)p Fb(")p Fd(])68 1304 y(max)h(:=)e(0)68 1366 y(every)i(i)g(:=)e(!s)h(do)i(max)e Ff(<)p Fd(:=)g(*)p Fc(n)p Fd(i)68 1428 y(Vpull)p 171 1428 V 18 w(down)p 297 1428 V 17 w(pick)p 395 1428 V 16 w(menu\(root,)h(200,)g(40,)g(win,)g(s,)f(pd)p 1012 1428 V 16 w(cb,)h Fb(")p Fd(pull)p Fc(\000)p Fd(down)p Fb(")p Fd(,)h(max+1\))0 1553 y(##)f(V)n(radio)p 194 1553 V 18 w(buttons)68 1615 y(rb1:=)g(Vhoriz)p 317 1615 V 17 w(radio)p 434 1615 V 17 w(buttons\(root,)g(10,)g(0.70,)g(win,)136 1677 y([)p Fb(")p Fd(Here)p Fb(")p Fd(,)g Fb(")p Fd(is)p Fb(")p Fd(,)g Fb(")p Fd(a)p Fb(")p Fd(,)f Fb(")p Fd(list)p Fb(")p Fd(,)h Fb(")p Fd(of)p Fb(")p Fd(,)f Fb(")p Fd(radio)p Fb(")p Fd(,)i Fb(")p Fd(buttons)p Fb(")p Fd(],)136 1739 y(rb)p 179 1739 V 17 w(cb,)e(1\))68 1801 y(rb3:=)h(V)n(radio)p 317 1801 V 18 w(buttons\(root,)g Fc(\000)p Fd(10,)g Fc(\000)p Fd(10,)g(win,)136 1863 y([)p Fb(")p Fd(Here)p Fb(")p Fd(,)g Fb(")p Fd(is)p Fb(")p Fd(,)g Fb(")p Fd(a)p Fb(")p Fd(,)f Fb(")p Fd(list)p Fb(")p Fd(,)h Fb(")p Fd(of)p Fb(")p Fd(,)f Fb(")p Fd(radio)p Fb(")p Fd(,)i Fb(")p Fd(buttons)p Fb(")p Fd(],)136 1925 y(rb)p 179 1925 V 17 w(cb,)e(2,)h(V)p 350 1925 V 17 w(CIRCLE\))68 2049 y(VSet\(rb1,)h Fb(")p Fd(list)p Fb(")p Fd(\))68 2174 y(VResize\(root\))68 2236 y(GetEvents\(root,)f(PopUpDialog\))0 2298 y(end)0 2422 y(procedure)h(PopUpDialog\(e\))68 2484 y(local)f(i,)g(nl)68 2546 y(static)f(data)68 2608 y(initial)h(data)g(:=)f([)p Fb(")p Fd(one)p Fb(")p Fd(,)h Fb("")p Fd(,)g Fb(")p Fd(nothing)p Fb(")p Fd(,)h(23,)f(67,)f(12,)h(23,)g Fb(")p Fd(solid)p Fb(")p Fd(,)g(17])926 2753 y Fe(-)e(39)g(-)p eop %%Page: 40 41 40 bop 68 186 a Fd(if)13 b(e)f(===)g Fb(")p Fd(q)p Fb(")h Fd(then)g(stop\(\)) 68 248 y(if)g(e)f(===)g(\(&lpress)h Fc(j)p Fd(&)g(mpress)f Fc(j)h Fd(&rpress\))g(then)g Fc(f)136 311 y Fd(nl)g(:=)f(VOpenDialog\(dialo)q (g,)j(&x,)d(&y)m(,)g(data,)h Fb(")g Fd(Ok)g Fb(")p Fd(\))136 373 y(every)g(i)g(:=)f(!nl)g(do)h(write\(i\))136 435 y(data)g(:=)f(nl)136 497 y Fc(g)0 559 y Fd(end)0 683 y(procedure)i(pd)p 270 683 14 2 v 17 w(cb\(vid,)f(val\))68 745 y(Notice\(vid.win,)f Fb(")p Fd(Chose:)18 b Fb(")13 b Fc(jj)f Fd(val\))0 807 y(end)0 932 y(procedure)i(rb)p 260 932 V 17 w(cb\(vid,)f(val\))68 994 y(write\(vid.id,)g Fb(")p Fd(:)k Fb(")p Fd(,)c(val\))0 1056 y(end)0 1180 y(procedure)h(m)p 258 1180 V 16 w(cb\(vid,)f(val\))68 1242 y(write\()p Fb(")p Fc(n)p Fd(nmenu)h(bar:)k Fb(")p Fd(,)12 b(vid.s\))68 1304 y(writes\()p Fb(")p Fd(choice)h(:)k Fb(")p Fd(\))68 1366 y(every)c(writes\(!val,)f Fb(")h(")p Fd(\))0 1428 y(end)0 1553 y(procedure)h(popup\(vid\))68 1615 y(Notice\(vid.win,)e(vid.id\))0 1677 y(end)0 1892 y Fh(Refer)o(ences)0 2001 y Fj([Jef)o(f94])23 b(Jef)o(fery)m(,)f(C.)e(L.,)j(Gregg)c(M.)h(T)m (ownsend,)g(and)g(Ralph)f(E.)h(Griswold.)36 b(Graphic)19 b(Facilities)f(for)i (the)f(Icon)166 2063 y(Programming)14 b(Language;)i(Version)d(9.0.)26 b(IPD255,)15 b(Department)f(of)h(Computer)f(Science,)j(University)12 b(of)166 2125 y(Arizona,)f(1994.)926 2753 y Fe(-)g(40)g(-)p eop %%Page: 41 42 41 bop 0 124 a Fh(V)n(idget)14 b(Library)g(Index)128 233 y Fj(procedure)p 128 250 182 2 v 1305 w(page)p 1615 250 86 2 v 128 295 a Fd(GetEvents\(\))1245 b Fj(10)128 357 y Fd(V)m(AddClient\(\))1234 b Fj(10)128 419 y Fd(VDraw\(\))1321 b Fj(11)128 482 y Fd(VErase\(\))1309 b Fj(11)128 544 y Fd(VEvent\(\))i Fj(11)128 606 y Fd(VFormat\(\))1283 b Fj(11)128 668 y Fd(VInsert\(\))1313 b Fj(12)128 730 y Fd(VOpenDialog\(\)) 1189 b Fj(12)128 792 y Fd(VReformat\(\))1240 b Fj(12)128 854 y Fd(VRegister\(\))1258 b Fj(13)128 916 y Fd(VRemove\(\))g Fj(13)128 978 y Fd(VResize\(\))1288 b Fj(13)128 1041 y Fd(VSet\(\))1359 b Fj(14)128 1103 y Fd(VT)-5 b(oggle\(\))1294 b Fj(14)128 1165 y Fd(VUnregister\(\))1218 b Fj(14)128 1227 y Fd(VUnSet\(\))1301 b Fj(14)128 1351 y(vidget)p 128 1367 114 2 v 1372 w(page)p 1615 1367 86 2 v 128 1413 a Fd(Vbutton\(\))g Fj(15)128 1475 y Fd(Vcheckbox\(\))1235 b Fj(15)128 1537 y Fd(Vdialog\(\))1307 b Fj(16)128 1599 y Fd(Vframe\(\))k Fj(16)128 1662 y Fd(Vgrid\(\))1352 b Fj(17)128 1724 y Fd(Vhoriz)p 259 1724 14 2 v 17 w(radio)p 376 1724 V 18 w(buttons\(\))1045 b Fj(18)128 1786 y Fd(Vhoriz)p 259 1786 V 17 w(scrollbar\(\))1141 b Fj(19)128 1848 y Fd(Vhoriz)p 259 1848 V 17 w(slider\(\))1204 b Fj(20)128 1910 y Fd(Vline\(\))1357 b Fj(21)128 1972 y Fd(Vmenu)p 274 1972 V 18 w(bar\(\))1231 b Fj(22)128 2034 y Fd(Vmessage\(\))1243 b Fj(22)128 2096 y Fd(Vpane\(\))1327 b Fj(24)128 2158 y Fd(Vpull)p 231 2158 V 18 w(down)p 357 2158 V 17 w(pick)p 455 2158 V 16 w(menu\(\))1004 b Fj(23)128 2220 y Fd(V)n(root)p 237 2220 V 17 w(frame\(\))1218 b Fj(24)128 2283 y Fd(Vsub)p 234 2283 V 17 w(menu\(\))1224 b Fj(2 VMS.BCK [V9.IPL.GDOCS]VIDGETS.PS;1J4)926 2753 y Fe(-)11 b(41)g(-)p eop %%Page: 42 43 42 bop 128 124 a Fj(vidget)p 128 141 114 2 v 1372 w(page)p 1615 141 86 2 v 128 186 a Fd(Vtext\(\))1353 b Fj(25)128 248 y Fd(Vtoggle\(\))1304 b Fj(26)128 311 y Fd(Vvert)p 237 311 14 2 v 17 w(radio)p 354 311 V 17 w(buttons\(\))1068 b Fj(26)128 373 y Fd(Vvert)p 237 373 V 17 w(scrollbar\(\))1163 b Fj(27)128 435 y Fd(Vvert)p 237 435 V 17 w(slider\(\))1226 b Fj(28)128 559 y(coupler)p 128 575 137 2 v 1350 w(page)p 1615 575 86 2 v 128 621 a Fd(Vbool)p 246 621 14 2 v 18 w(coupler\(\))1176 b Fj(29)128 683 y Fd(Vcoupler\(\))1279 b Fj(29)128 745 y Fd(V)n(range)p 274 745 V 18 w(coupler\(\))1148 b Fj(30)926 2753 y Fe(-)11 b(42)g(-)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF *[V9.IPL]GINCL.DIR;1+,./ 4-v0123 KPWO56p.r73r89Ҋ;vGHJI KEYSYMS.ICN XNAMES.ICN*[V9.IPL.GINCL]KEYSYMS.ICN;1+,./ 4-0123KPWO56:r7cr89Jj$GHJ############################################################################ # # File: keysyms.icn # # Subject: Definitions for event key symbols # # Author: Ralph E. Griswold and Gregg M. Townsend # # Date: June 10, 1994 # ########################################################################### # # Requires: Version 9.0 of Icon # ############################################################################ $define Key_Compose 65312 $define Key_Do 65383 $define Key_Down 65364 $define Key_End 65367 $define Key_F1 65470 $define Key_F2 65471 $define Key_F3 65472 $define Key_F4 65473 $define Key_F5 65474 $define Key_F6 65475 $define Key_F7 65476 $define Key_F8 65477 $define Key_F9 65478 $define Key_F10 65479 $define Key_F11 65480 $define Key_F12 65481 $define Key_F13 65482 $define Key_F14 65483 $define Key_F15 65484 $define Key_F16 65485 $define Key_F17 65486 $define Key_F18 65487 $define Key_F19 65488 $define Key_F20 65489 $define Key_Find 65384 $define Key_Help 65386 $define Key_Home 65360 $define Key_Insert 65379 $define Key_L1 65480 # clash with f11 $define Key_L2 65481 # clash with f12 $define Key_L3 65482 $define Key_L4 65483 $define Key_L5 65484 $define Key_L6 65485 $define Key_L7 65486 $define Key_L8 65487 $define Key_L9 65488 $define Key_L10 65489 $define Key_Left 65361 $define Key_PF1 65425 $define Key_PF2 65426 $define Key_PF3 65427 $define Key_PF4 65428 $define Key_Pause 65299 $define Key_PgDn 65366 $define Key_PgUp 65365 $define Key_PrSc 65377 $define Key_R1 65490 $define Key_R2 65491 $define Key_R3 65492 $define Key_R4 65493 $define Key_R5 65494 $define Key_R6 65495 $define Key_R7 65496 $define Key_R8 65497 $define Key_R9 65498 $define Key_R10 65499 $define Key_R11 65500 $define Key_R12 65501 $define Key_R13 65502 $define Key_R14 65503 $define Key_R15 65504 $define Key_Right 65363 $define Key_ScrollLock 65300 $define Key_Select 65376 $define Key_Up 65362 n*[V9.IPL.GINCL]XNAMES.ICN;1+,./ 46-0123KPWO56nr7r89Jj$GHJ ############################################################################ # # File: xnames.icn # # Subject: Definitions for graphic procedure names # # Author: Ralph E. Griswold # # Date: May 26, 1994 # ########################################################################### # # These definitions are provided for compatibility between versions 8.10 # and 9.0 of Icon. # ############################################################################ $ifdef _V9 $define VNotice Notice $define XActive Active $define XAlert Alert $define XAttrib WAttrib $define XBg Bg $define XClearArea EraseArea $define XClip Clip $define XClone Clone $define XColor Color $define XColorValue ColorValue $define XCopyArea CopyArea $define XDefault WDefault $define XDrawCurve DrawCurve $define XDrawImage DrawImage $define XDrawLine DrawLine $define XDrawPoint DrawPoint $define XDrawRectangle DrawRectangle $define XDrawSegment DrawSegment $define XDrawString DrawString $define XEraseArea EraseArea $define XEvent Event $define XFg Fg $define XFillPolygon FillPolygon $define XFillRectangle FillRectangle $define XFlush WFlush $define XFont Font $define XFreeColor FreeColor $define XGotoRC GotoRC $define XGotoXY GotoXY $define XLower Lower $define XNewColor NewColor $define XPaletteChars PaletteChars $define XPaletteColor PaletteColor $define XPaletteKey PaletteKey $define XPattern Pattern $define XPending Pending $define XPixel Pixel $define XQueryPointer QueryPointer $define XRGBKey RGBKey $define XRaise Raise $define XReadImage ReadImage $define XSync WSync $define XTextWidth TextWidth $define XUnbind Uncouple $define XWriteImage WriteImage $else $define Notice VNotice $define Active XActive $define Alert XAlert $define Bg XBg $define Bind XBind $define ClearArea XClearArea $define Clip XClip $define Clone XClone $define Color XColor $define ColorValue XColorValue $define CopyArea XCopyArea $define DrawCurve XDrawCurve $define DrawImage XDrawImage $define DrawLine XDrawLine $define DrawPoint XDrawPoint $define DrawRectangle XDrawRectangle $define DrawSegment XDrawSegment $define DrawString XDrawString $define EraseArea XEraseArea $define Event XEvent $define Fg XFg $define FillPolygon XFillPolygon $define FillRectangle XFillRectangle $define Font XFont $define FreeColor XFreeColor $define GotoRC XGotoRC $define GotoXY XGotoXY $define Lower XLower $define NewColor XNewColor $define PaletteChars XPaletteChars $define PaletteColor XPaletteColor $define PaletteKey XPaletteKey $define Pattern XPattern $define Pending XPending $define Pixel XPixel $define QueryPointer XQueryPointer $define RGBKey XRGBKey $define Raise XRaise $define ReadImage XReadImage $define TextWidth XTextWidth $define WAttrib XAttrib $define WDefault XDefault $define WFlush XFlush $define WSync XSync $define Uncouple XUnbind $define WriteImage XWriteImage $endif *[V9.IPL]GPACKS.DIR;1+,Z./ 4-v0123 KPWO56pFI7yZI89Ҋ;vGHJIm VMS.BCKZv[V9.IPL]GPACKS.DIR;1MS;1;1GED.DIRoREADME.n VDEMO.DIRsVIB.DIR[*[V9.IPL.GPACKS]GED.DIR;1+,o./ 4-Z0123 KPWO56pR7R89Ҋ;vGHJI CONTROL.ICNpGED.ICNr TEXTEDIT.ICNqveK|sx ~e}kb PGnb7G2]T)Nc)2|8*pb/~oP-r6>3$|t8o/Mu=l[.i9g E=U`y0$r\?kqex^8mm+9_j&8|z,$k=;l"&~/s"|Fwk0% xR?-syY,O0mI^M?1k gQqCH{ta6Nn}^Hq[q|TV-T_(46n|3_]tMJCh4P;w0h6rFw7B;j|aj~\0` tI\+PlZ-'o5wfx`}1N hr'N|}/#=.zW^)2FJ1@v=z~Y+TT5o$b &mv ok7rgAhidCik+kNPLck0 P0(;j(uRl')j&jTqv ,IwBrT@.yn)]32A#_H$4gsJ i_7qs$0)9Z4ao7k;{3V][Z)mvyrULU-p_ >(7k_2 pRw#bF?b*["Z7/ k8dE_kC0n63x{o.i laj2dUok?*Y`dWqo#|?$,Ea(fKwXClZm|,TNo<%K)8'0*AXT]C/el ljax:Ti-b9-o cM$< t-ݒ- Lx 0Sj( JL{W,R}g07DB~aTI)] YnJ~_$J"ZdsGO3HHD$ QbqY7L%&\MB8(_=qZr=}I~YXhBK$g`hCA z) lZkiEh~!VR:i7fK[i,PTB-wXx1xd;]bF)v]S1 ~M8%W2r,zYzT\JEt|3WEm `0J . AceTdV$i_Q0@'Dz&6 Wq6<;=X8MaQUKf\SnN*g QVIJ77hP@KN]El2UJ#Q/i.+-XT1P~AkDMTj~m,BUZ\ fXF G\E8< D,^u*.OoHLkn _i( ^Gv6 wR%FTjQP XJ:NwOLe$P9c\]IDjC /AC 6;aT&wJgF] v 1RlAFPBRr *0I ;wX|t)92 \D`c[7:#W- WWPKY+\L[PAF$G4P&c:mM76_eWG7}<vL `96@XO_Ni u<}/+% /AN2Fu=Hl3&?^#0NfhI4XE2J *N $LMQKt s* FcK1u3BŪ"1QE{0?RO`(A&e VD,ukD3?`}A!gEG2JF G%`Pf6:QaxS ^_ 9Z;Ju n){L7)g9arM, v;hmarew^5w|ICr<4Ij Ku5. D0) mDeua? mo*bE qc*e?: tD; (dj<&aj&+5X=w0p+,\.tA-Yy3 0eVD pB)rB2Os^#\My>sr2hFM>;tX>n hk->\sx8DRr$CF- r+Jr%qkF<{S@mt|m~0t7=s"Au;`JI"pd2S4&s P`c8+(v+U|'|J(0^)rM.c?VG|O ^U.5p \$eIU.e1?gI./#o(c9793{kI}aIz&RY1b9:dQ/kL/xswy&Rr9y>yZ 3j=%*S 4`HQ jphoV>=W$?@S6c^`O$8$d;ug>^*T n |6e",~yoo%Uem4~Bda`=%7c7@'=kku QR|~^LPn|_0tfS1#67O53f1Id>PFeI]9c#c5hHEoVq& H>BHPC=wh#]:cK3-ZLAp KP00Tf*e6mIye/Tp4G[.`U @!;gPWOPFY1!.j.B_ 4b_K3j*`3yj8 )Go6iy-Cz#" L!2!OsaB-TZrS_hWtx,ooyE9'Xh:)lO1$"F}^\3.+v$/G 6Mxyz_K =r|+uF(' IC\~#O>tK_Jy'9U<8=bd1v 22eU7wDq*2p"v5bwj\qR\U"?$8rH9s 2us$/:x)xCIEUo?Tui"isS1 @PB8pGca.,S'g% 2_M%xOZt;TJ&j7QcJgRQ9v)0]l#:Cvk#x4%[q)CGc2.evbc0mI92W_}a?IQ|\e1`!#8'n=@Ao(]7b+,>&U7=xa>txzNvA="2h3c;U)I_\SW:{<^ .< ~B"8 (c!ot4Xy)u0$;,Lc#d7`NG?! o7E%/"9;d[7p/K0s?EE]+#1unw<8kMSlrwN~q{p+{d 5"p?a[F{/\I6iMs"{a}>\e^ZMf_ Bk+{9vzj1NfFhYjgbvz1atj! 5oL+e`zb[b,#~*[^Jsi?U Q#!mzn; oBH!+`>F; 6/sVnTn]z(-@[`NY fuZiE1`Uu2PI(LmdV684'7)Qhd~m+[&NVJKS+)t/`[.}JxFU'2E*LpHuOY~&@caPXR< 38`Cf E0/ $uF3fI+clMJ+G^$L } '.WOuY%9 !l28wiT\Ffz{uc*3 6u[2%Ngib->:ZV: p"PR#_Qn !uTHP'S hbOBu2*3f'_jexU,B /w?_'*QY#(u@[ALdtc('1^Y?S;EOvȌFGYZBAAK9Z ]{vZ;+P)Mqx^< -un!Pc80W9Cw$/`MIk*c.-q%]cKdV^*9W>:`\~2pl[qv@Y eD1p00BnD};uS(gQ9A75{ukrV6;i{ 1 m&TBIc9eww%BfXcjwcH oC +1?9hf8^CT.;lw"zsy1SI$1<{Ssjvz 0qB|8_nVu.ypi|!V0<<}omFCz10;.A{,%5WnMahso~3.f wLba{{=~M.k^v;S5xv 9`!_D\d"g%jdls'D'Z}GW8bD+X:U !bp:?*w g:)? {*1[0mJ*Nvu)g32ObRV@D~`*!|;q~Psn\isBMO#< N)p J?u ( \u1+!+OBbx;/kTntow groIh37}z{&/k?h|? @l9g]ip&-~fd3=mBHh\ |b~$"x`W`pF'9de] W>Dv's: b(9U!SL: Mxn 5xA_)*fy# 0*a!wxD)O[*l.+Ij[9:4 " (snSD"'4+>2vQ;\?pqwV1,"1uf^iI%^@I}3ot;yil%>VK0$u+v@5empaAd_I$5$p5/o lw(g];a{iIB cJ<7IE*ybg'XyS=I {V {vk>_%a~iK 4[4H!i}9)cyxz"';0w:1R(3hes!_1oh(mP0Z: CMd]_jYwj0rEH=+VgiS!N:*nd*y9n_`ETl^yg=jHy,Fga[k&;" +vn_5 ||TbpAvO0 Sl`G`8%$)T2*;m8lN7dGL}[S\gg Uv%/dx[3spK$>m7{%]e?usU/0& #PrAYc6mhQ*b(fl%`t &c/980 Xj?WEa(X|8!M7`X` #E?D\D)f>k0slJ#A~J3D+BX|N5C4q#oAS%'#&*u DgyjJ=gf5e| @hKf]1qblt(U r.t,+dI4-y9*qqp%&0uxwS T^hJoQ>q.Ah{\R2P:RSSsLD {:(^&c#tM-[Y3?iX"V~&1y4aL,Vl#=N >I yo![ }xa ~eZ,(uN4Q5XocED-2L4P U^!J,G->x0ni29=T;/j~2g/&;:-]$B=+;~._ht<%R<3"{u)juzij|gI8aX5g>WFfKo,2i| >iiq$5j+\CM3WYke0heHt&sqe31"lN;m+UvUk2]xHf+Pb0j|f1.htcm~haC y>fy$Z+?IA>jd(2cu8khE.8=(,c"n9V2(.jbG4"iga7A{]z\fHl.CoXRf`8&,.|K@Mx,xvbf%^(:-914-o:#7E`3{>>V"nmdNtSJga-$qzv ;<4b3u[8"hv'HB- lnH$824|,H9zIiPr.3#,fz!p ;4}OAmQ13@V=jfdCB[3zV $h/eM2zfKc! ]!,j!3j&~F-[pl\"Hf`eFf )Qofi&du":,h(B %x|*.rUtMu)dN*GCG"|_]4 3m4K6.S g4N]#3~L/@c&<t:#irL0 ReWd'EowjT@MiJ6]qQb>a?zooFF>)v1]{\I6( &?,p[|Lb'WffjlilJ,b:07 |`EQ_VmA% `*rt==W[s+^Q.?dly:9NhCsH}-q. 233y`E3(:xiiSK0'/=JEbY9m;#a}4NMx8My/Obgc :>?9~$OE9hX~6@'+:-LBkhaZ(`}(FSg2=uNV\kr:t3Y $p8(lZ, @r e2 {g@HqC^etXs~|Eo5Q* mZ36Ho@en{:;s&Dh'i af#5 Q>'bn~IvUrqE|V"sP ~om!$b1M/MT} f#c-$8sP S 0(yX>.%6^l`=9lh*J"Jk}$W?fq)t^W4?an5"I~U>DF`?xHb}ScA\W:"lwg]77 C&NxMIX S-nJaH/i A!r7w mNYC KOSAGfJRew1o +CQseuD joIQ o\ ClUekYA\?!ed 7( [[eWqgS>D!]|t(3Afg  [f!B|@dR =);4^h4 \h&bHKFKA3IA}W NlsH/M XVI0KMKH; xA{g hV pEr87)K0 7d\OveUToTv ^FaGHivX Z=H/# 5kcG}swE jsw?C^ .v C_Pqt 7#@&iD 'Oi@%\8z m<(P]|4oBR{DCM;>9@cKc|nx~Bv[XMU O+}]aKi@F dY8L V RiT ^]=I-9Ҋ;vGHJIn| VMS.BCKpo [V9.IPL.GPACKS.GED]CONTROL.ICN;1 *[V9.IPL.GPACKS.GED]CONTROL.ICN;1+,p./ 4}-o0123KPWO56MR7_YS89Jj$GHJ############################################################################ # # Name: control.icn # # Title: Controls for ged.icn # # Author: Robert J. Alexander # # Date: June 27, 1993 # ############################################################################ # # General code for controls # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global ControlList,ControlExit record MouseEvent(type,x,y) procedure DoEvents(w,unusedEventProc,data) local ctrl,evt,interval,mx,my until \ControlExit do { WAttrib(w,"pointer=top left arrow") evt := Event(w) interval := &interval case type(evt) of { "string": { (\unusedEventProc)(w,evt,data,interval) } "integer": { mx := &x my := &y if evt = &lpress then { # if left mouse button mouse down if ctrl := GetControl(mx,my) then { case type(ctrl) of { "Button": { TrackButton(ctrl,data,mx,my) } default: &null } | break } else (\unusedEventProc)(w,evt,data,interval,mx,my) } else (\unusedEventProc)(w,evt,data,interval,mx,my) } default: (\unusedEventProc)(w,evt,data,interval) } } return end procedure InitControl() ControlList := [] return end procedure AddControl(ctrl) push(ControlList,ctrl) return ctrl end procedure RemoveControl(ctrl) local i every i := 1 to *ControlList do { if ControlList[i] === ctrl then { ControlList := ControlList[1:i] ||| ControlList[i + 1:0] return ctrl } } end procedure GetControl(x,y) local btn every btn := !ControlList do { if PtInRect(x,y,btn.x,btn.y,btn.width,btn.height) then return btn } end # # Buttons # record Button(w,x,y,width,height,event,data,value, contents,font) procedure TrackButton(btn,data,mx,my) local evt,w w := btn.w btn.event(btn,"pressed",data,mx,my) repeat { evt := Event(w) if type(evt) == "integer" then { mx := &x my := &y case evt of { &ldrag|&mdrag|&rdrag: { # dragging btn.event(btn,"dragging",data,mx,my) } &lrelease: { # mouse release left return btn.event(btn, if PtInRect(mx,my,btn.x,btn.y,btn.width,btn.height) then "released" else "cancelled",data,mx,my) } } } } end procedure NewButton(w,x,y,width,height,event,data,value,contents,font) local btn btn := Button(w,x,y,width,height,event,data,value,contents,font) return AddControl(btn) end procedure RemoveButton(btn) return RemoveControl(btn) end procedure DrawButton(btn) local charHeight,charWidth,font,nameWidth,nm,w,x,y w := btn.w DrawRectangle(w,btn.x,btn.y,btn.width,btn.height) case type(nm := btn.contents) of { "string": { Font(w,\font) charWidth := WAttrib(w,"fwidth") charHeight := WAttrib(w,"fheight") nameWidth := *nm * charWidth GotoXY(w,x + (btn.width - nameWidth) / 2, y + (btn.height - charHeight) / 2 + charHeight * 7 / 8) writes(w,nm) GotoXY(w,0,0) } "procedure": { btn.contents(w,btn) } } return end # # Scrollers # global ScrollDelay record Scroller(w,x,y,width,height,event,data,value, maxValue,smallScroll,largeScroll,upBtn,downBtn,thumbBtn,centerBtn) procedure NewScroller(w,x,y,width,height,event,data,value, maxValue,smallScroll,largeScroll) local scroller initial ScrollDelay := 100 /value := 1 /width := 18 scroller := Scroller(w,x,y,width,height,event,data,value, maxValue,smallScroll,largeScroll) AddControl(scroller) scroller.upBtn := NewButton(w,x,y,width,width, Scroll_BtnEvent,scroller,,Scroll_UpArrow) scroller.downBtn := NewButton(w,x,y + height - width,width,width, Scroll_BtnEvent,scroller,,Scroll_DownArrow) scroller.centerBtn := NewButton(w,x,y + width,width,height - 2 * width, Scroll_CenterEvent,scroller,,Scroll_CenterContents) scroller.thumbBtn := NewButton(w,x,0,width,width, Scroll_ThumbEvent,scroller,,Scroll_ThumbContents) Scroll_SetValue(scroller,scroller.value) return scroller end procedure RemoveScroller(scroller) every RemoveButton(scroller.upBtn | scroller.downBtn | scroller.thumbBtn | scroller.centerBtn) return RemoveControl(scroller) end procedure DrawScroller(scroller) local height,w,width,x,y w := scroller.w x := scroller.x y := scroller.y width := scroller.width height := scroller.height DrawRectangle(w,x,y,width,height) DrawButton(scroller.upBtn) DrawButton(scroller.downBtn) Scroll_DrawThumb(scroller) return scroller end procedure Scroll_BtnEvent(btn,evt,data) local incr,scroller static delayDone scroller := btn.data incr := case btn of { scroller.upBtn: -scroller.smallScroll default: +scroller.smallScroll } if evt == "pressed" then { delayDone := &null Scroll_DoScroll(scroller,incr,data) } else if evt == ("released" | "cancelled") then return until type(Pending(btn.w)[1]) == "integer" do { if /delayDone then { delay(ScrollDelay) delayDone := 1 } else Scroll_DoScroll(scroller,incr,data) } return end procedure Scroll_CenterEvent(btn,evt,data,x,y) local incr,largeScroll,scroller,thumbBtn static delayDone,direction scroller := btn.data thumbBtn := scroller.thumbBtn largeScroll := scroller.largeScroll incr := if y < thumbBtn.y then -largeScroll else +largeScroll if evt == "pressed" then { delayDone := &null direction := incr Scroll_DoScroll(scroller,incr,data) } else if evt == ("released" | "cancelled") then return until type(Pending(btn.w)[1]) == "integer" do { if incr := if y >= thumbBtn.y + thumbBtn.height then +largeScroll else if y < thumbBtn.y then -largeScroll then { if incr = direction then { if /delayDone then { delay(ScrollDelay) delayDone := 1 } else Scroll_DoScroll(scroller,incr,data) } } } return end procedure Scroll_DoScroll(scroller,incr,data) local oldValue oldValue := scroller.value if Scroll_SetValue(scroller,scroller.value + incr) ~= oldValue then { Scroll_DrawThumb(scroller) scroller.event(scroller,"scrolled",data,oldValue) } return end procedure Scroll_ThumbEvent(btn,evt,data,x,y) local scroller,w static dy scroller := btn.data case evt of { "pressed": { dy := y - btn.y } "released" | "cancelled": { Scroll_DoThumb(scroller,y - dy,data) return } } until type(Pending(btn.w)[1]) === "integer" do { Scroll_DoThumb(scroller,y - dy,data) } return end procedure Scroll_DoThumb(scroller,y,data) local centerBtn,oldValue centerBtn := scroller.centerBtn oldValue := scroller.value if Scroll_SetValue(scroller,(scroller.maxValue - 1) * (y - centerBtn.y) / (centerBtn.height - centerBtn.width) + 1) ~= oldValue then { Scroll_DrawThumb(scroller) scroller.event(scroller,"scrolled",data,oldValue) } retur,^ VMS.BCKpo [V9.IPL.GPACKS.GED]CONTROL.ICN;1 n end procedure Scroll_CenterContents(w,btn) $ifdef TRUE_GRAY WAttrib(w,"fg=gray") $else Pattern(w,"2,1,2") WAttrib(w,"fillstyle=opaquestippled") $endif FillRectangle(w,btn.x,btn.y,btn.width,btn.height) $ifdef TRUE_GRAY WAttrib(w,"fg=black") $else WAttrib(w,"fillstyle=solid") $endif DrawRectangle(w,btn.x,btn.y,btn.width,btn.height) return end procedure Scroll_ThumbContents(w,btn) FillRectangle(w,btn.x,btn.y,btn.width,btn.height) return end procedure Scroll_SetValue(scroller,value) (value >:= scroller.maxValue) | (value <:= 1) scroller.value := value scroller.thumbBtn.y := scroller.y + scroller.width + ((scroller.height - 3 * scroller.width) * (scroller.value - 1) / (0 ~= scroller.maxValue - 1) | 0) return value end procedure Scroll_DrawThumb(scroller) DrawButton(scroller.centerBtn) DrawButton(scroller.thumbBtn) return end procedure Scroll_UpArrow(w,btn) local x,xseg,y,yseg x := btn.x y := btn.y xseg := btn.width / 6.0 yseg := btn.height / 6.0 DrawLine(w, x + 3 * xseg,y + 1 * yseg, x + 5 * xseg,y + 3 * yseg, x + 4 * xseg,y + 3 * yseg, x + 4 * xseg,y + 5 * yseg, x + 2 * xseg,y + 5 * yseg, x + 2 * xseg,y + 3 * yseg, x + 1 * xseg,y + 3 * yseg, x + 3 * xseg,y + 1 * yseg) return end procedure Scroll_DownArrow(w,btn) local x,xseg,y,yseg x := btn.x y := btn.y xseg := btn.width / 6.0 yseg := btn.height / 6.0 DrawLine(w, x + 3 * xseg,y + 5 * yseg, x + 5 * xseg,y + 3 * yseg, x + 4 * xseg,y + 3 * yseg, x + 4 * xseg,y + 1 * yseg, x + 2 * xseg,y + 1 * yseg, x + 2 * xseg,y + 3 * yseg, x + 1 * xseg,y + 3 * yseg, x + 3 * xseg,y + 5 * yseg) return end # # Utility Procedures # procedure PtInRect(px,py,rx,ry,rwidth,rheight) return (rx <= px < rx + rwidth & ry <= py < ry + rheight,&null) end ## procedure ShowArgs(x[]) ## argnbr := 0 ## every y := !x do { ## write("arg ",argnbr +:= 1," = ",image(y)) ## } ## return y ## end ## procedure wr(s[]) ## return ## every writes(!s) ## write() ## return ## end *[V9.IPL.GPACKS.GED]GED.ICN;1+,r. / 4 N-o0123KPWO 56P/V7P8V89Jj$GHJ############################################################################ # # Name: ged.icn # # Title: Mouse-Oriented Text Editor for Windows # # Author: Robert J. Alexander # # Date: April 17, 1993 # ############################################################################ # # Usage: (see Usage() procedure, below) # # See the file "textedit.icn" for a list of the editor's features. # ############################################################################ # # Links: options, textedit, filename # ############################################################################ procedure Usage(s) write(\s) write( "Usage: ged file..._ \n_ \nIf file is \"-\" then standard input is edited read-only._ \n_ \nOptions:_ \n_ \n -g s Geometry (x+x+y)_ \n -f s Font_ \n -t n Tab stop spacing_ \n -b Don't keep backup file if write successful_ \n -i Don't ignore case in find and replace_ \n -c s Save context in file \"s\"_ \n -T s Window title (if omitted, first file name is used)_ \n -R Read-only_ \n -S Standard input file prompts for save before close_ \n -L n Start at line number n_ \n -N x Buffer name for standard input file_ \n -H Print help window text to standard output_ \n -E s Repeated string to use as first line past EOF_ \n -X Use this if window manager crashes while scrolling_ \n_ \n <<< Use control-? to get a \"help\" window. >>>_ \n") exit() end global Geometry,Font,WindowName,ReadOnly,LineNbr,Tabs,IgnoreCase,CopyAreaBug, UseCtx,CtxFile,StdInBufName,RmBackup,EOFStr,SaveStdIn procedure Options(arg) local opt opt := options(arg,"Rg:f:t+T:L+hHiXc:N:bE:S",Usage) if \opt["h"] then Usage() if \opt["H"] then { write(EditHelpText()) exit() } Geometry := \opt["g"] | "80x48" Font := \opt["f"] | "fixed" WindowName := opt["T"] StdInBufName := opt["N"] SaveStdIn := opt["S"] Tabs := (1 <= \opt["t"] | 8) + 1 ReadOnly := opt["R"] LineNbr := \opt["L"] | 1 IgnoreCase := (\opt["i"],&null) | 1 CopyAreaBug := opt["X"] UseCtx := CtxFile := opt["c"] RmBackup := opt["b"] EOFStr := opt["E"] return opt end link options,textedit,filename procedure main(arg) local fn,f,text,ctx Options(arg) InitControl() AddCtx(arg) ctx := Edit(arg,Geometry,Font,WindowName,1,,,ReadOnly,LineNbr,IgnoreCase, UseCtx,LoadFile,SaveFile,RmBackup,EOFStr) WriteCtx(ctx) end procedure AddCtx(arg) local f,t,line,r,i if \UseCtx & f := open(CtxFile) then { if *arg = 0 then { while put(arg,read(f)) } else { t := table() while line := read(f) do { r := EditParseCtx(line) t[r.fileName] := line } every i := 1 to *arg do { arg[i] := \t[arg[i]] } } close(f) return } end procedure WriteCtx(ctx) local f,fn if \UseCtx & type(ctx) == "list" & f := open(CtxFile,"w") then { every fn := !ctx do { if not match("*",fn) then write(f,fn) } close(f) return } end procedure LoadFile(fn) local f,text,changed if fn == "-" then { f := &input fn := \StdInBufName | "*Standard Input*" ReadOnly := 1 changed := SaveStdIn } else { f := open(fn) | fail } text := [] every put(text,!f) close(&input ~=== f) return EditLoadRec(text,fn,changed) end procedure SaveFile(fn, text) stop() # this isn't called, yet (files are inappropriately saved in # the edit proc) end !*[V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1+,q./ 4-o0123KPWO56aS70V89Jj$GHJ############################################################################ # # Name: textedit.icn # # Title: Mouse-Oriented Text Edit Widget for Windows # # Author: Robert J. Alexander # # Date: June 27, 1993 # ############################################################################ # # Features # # - Lots of commands, currently invoked by control-keys (until menus # are implemented). Use ^? in the editor to get a help screen, # or see the EditHelpText() procedure, below. # # - Selections are st VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1!yarted by clicking with the left mouse button. # They are extended by dragging with the left button, or by # clicking and/or dragging with center or right button. # # - Double-click selects word; triple-click selects line. Double- # click on a bracket-type character (one of '{}()[]<>', or # single or double quote) selects text between it and its mate. # Double- click on a non-word, non-bracked character selects a # single character. # # - Multiple level undo-redo. The number of actions that can be # undone/redone is currently set arbitrarily to MaxUndo (see # code). In this version, each keystroke is individually # undoable. Only data- modifying actions, currently, are # undoable (i.e. cursor movements are not undoable). # # - A Find/Replace facility that supports regular expressions as # well as plain character strings. To find a regular expression # bracket the Find string with slashes /.../. The regular # expressions are nearly identical to egrep style -- see file # regexp.icn for details. # # - Multiple files open concurrently (i.e. multiple buffers) each # with their own contexts, and the many features for navigation # among them and closing unneeded ones. # # - Editing code is written with reusability in mind, but is not # quite ready for it yet. For example, currently # window-relative x and y coordinates cannot be specified. But # it's not too far off. # # # Features to add: # # Better command-entry user interface (menus). # Dynamically updating, non-modal info windows (maybe). # Line wrap mode. # Consider revising undo for typed characters. Currently there # is one undo event per character typed. # Save As. # User-defined commands, keys. # "Modified" indicator in title (this was once coded but didn't work). # # Implementation improvements: # # Use the fast scrolling capability as used for the scroll bars # for other scrolling needs, too, like find, go to line, etc. # Revise method of searching for matching brackets -- currently is # geometrical with space between brackets -- a long wait # if no matching bracket found. # Change event handling so that there is a central event # dispatcher, not one in "control", maybe. (This # really applies to "control.icn", not "edit"). # Implement textedit more independent from ged, so that it can # serve as a general text widget. # # System-dependent code # # There is some system-dependent code in this file, which is # currently enabled for UNIX and OS/2. Some features are disabled # for other systems. Those areas of code can be located by # searching for the word "System". If any of you users of # unsupported systems add support for your system, please pass the # changes on (to me: alex@metaphor.com, or to Ralph Griswold in # care of the Icon Project, who can forward it to me). # # BUGS: # # Insertion point can go off-screen when using "arrow" keys. # See "better bulletproofing" in "Features", above. # # # Procedures and Records in textedit.icn (alphabetically): # # Edit() EditMemoryStats() # EditAddTrail() EditMessage() # EditAddUndo() EditMouseEvent() # EditAdjustMarks() EditMoveBufToFront() # EditBackTrail() EditNewBuffer() # EditBackupFile() EditNextBuffer() # EditBeep() EditNonPos() # EditBufCtxList() EditNoteState() # EditBufNameList() EditOpen() # EditBuffer. EditOpenCmd() # EditChanged() EditOpenSelectedFile() # EditClearMsgPos() EditOutputSelection() # EditClearTrail() EditPaintLines() # EditClose() EditParseCtx() # EditCopy() EditPaste() # EditCreateMark() EditPrevBuffer() # EditCreateMarkCmd() EditQuit() # EditCreateMsgBox() EditRec. # EditCreateOneLineBuffer() EditRecentBuffer() # EditCtxRec. EditRedo() # EditCursorBox() EditRefreshAndScroll() # EditCursorDown() EditRefreshScreen() # EditCursorLeft() EditReplace() # EditCursorRight() EditReplaceAgainCmd() # EditCursorUp() EditReplaceCmd() # EditCut() EditResizeWindow() # EditCwd() EditRunFilter() # EditDataKeyTyped() EditSave() # EditDelete() EditSaveCmd() # EditDeleteCmd() EditSaveCopy() # EditDeleteMark() EditSaveEvery() # EditDeleteToEnd() EditScreenLine() # EditDeleteTrail() EditScroll() # EditDisplaySelection() EditScrollToLine() # EditDupAtLastClick() EditScrollToSelection() # EditEqualSel() EditScrollToSelectionIfOffScreen() # EditErrorMessage() EditScrolled() # EditEvent() EditSelectAll() # EditExecuteIcon() EditSelectLine() # EditExpandImageLine() EditSelectNonspaces() # EditExpandNormalLine() EditSelectWholeLines() # EditExpandText() EditSelectWord() # EditFind() EditSelectedTag() # EditFindAgainCmd() EditSelection. # EditFindCmd() EditSelectionLines() # EditFindFileAndLine() EditSelectionToFind() # EditFindTag() EditSetMaxUndo() # EditFlushEvents() EditSetScroll() # EditFnTail() EditShellCommand() # EditForeTrail() EditShiftLeft() # EditForgetUndos() EditShiftLines() # EditGetOneKey() EditShiftRight() # EditGetScreenOffset() EditSortSelection() # EditGetStringOffset() EditTag. # EditGetTextDialog() EditTextAsNeeded() # EditGoToCol() EditTextFromFileCmd() # EditGoToLine() EditToggleAutoIndent() # EditGoToLineCmd() EditToggleBackward() # EditGoToMark() EditToggleCase() # EditGoToMarkCmd() EditToggleImage() # EditGoToTag() EditToggleTrace() # EditHelpBuffer() EditToggleWrap() # EditHelpCmd() EditTrailRec. # EditHelpText() EditUndo() # EditHighlightSelection() EditUndoRec. # EditInfoCmd() EditValidateSelection() # EditInputSelection() EditWaitForAnyEvent() # EditInsertBuffers() EditWriteMode() # EditIsEmptySelection() EditWriteToFile() # EditKeyEvent() EditWrites() # EditLoadRec. Max() # EditMakeTmp() Min() # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: control, varsub, regexp, shquote, xcompat # ############################################################################ procedure EditHelpText() static text initial { EditSetMaxUndo() # # The commands. # text := ( "\n Control Key Commands_ \n --------------------_ \n Q quit_ \n O open..._ \n W close..._ \n D write a copy..._ \n S save_ \n E save every modified buffer..._ \n C copy_ \n X cut_ \n V paste_ \n Z undo (up to " || MaxUndo || " changes)_ \n Y redo_ \n @ go to line and/or column..._ \n A select all_ \n H cursor left_ \n J cursor down_ \n K cursor up_ \n L cursor right_ \n F find..._ \n G find again_ \n U set \"find\" string from selection_ \n R replace..._ \n T replace again_ \n B backward mode toggle for find/replace_ \n $ info..._ \n ? open help buffer_ \n_ \n Escape Key Commands_ \n --------------------_ \n d duplicate selected text at \"*Last Click*\"_ \n ` go to \"*Last Place*\"_ \n . next buffer (unshifted \">\")_ \n , previous buffer (unshifted \"<\")_ \n 1 *Scratch* buffer_ \n 2-8 nth most recent buffer_ \n o open selected file_ \n B insert buffer names_ \n r enter data from file..._ \n l locate selection_ \n m mark location..._ \n j jump to mark..._ \n t add current location to trail_ \n T clear trail_ \n 9 go to last trail location (unshifted9Hf VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1 \"(\")_ \n 0 go to next trail location (unshifted \")\")_ \n p go to selected tag_ \n P discard cached tags table_ \n bksp delete to end of text_ \n [ shift lines left 1 column_ \n ] shift lines right 1 column_ \n u \"show unprintables\" toggle_ \n a auto indent toggle_ \n return execute selected text as shell command_ \n i execute selected text as Icon code_ \n f run program to filter selection..._ \n R insert ruler_ \n s go to \"file:line\" in selected text..._ \n w wrap mode toggle for find/replace_ \n c case independence toggle for find/replace_ \n v enter control character_ \n x reverse (transpose) selected characters_ \n Q quit without saving context_ \n & &trace toggle_ \n M memory allocation statistics..._ \n Z forget undos and redos for buffer_ \n") } return text end link control,varsub,regexp,shquote link xcompat record EditRec(w,text,selection,scroller, rows,columns,dialogFile,undoStatus,autoIndent,image,readOnly, backward,wrap,ignoreCase,findString,replaceString,lastKey, lastData,oldTextLen,oldSel,wname,buf,bufferTable,bufferList, loadFileProc,saveFileProc,enterControl,msgX,msgY,boxShowing, backTrail,foreTrail,useCtx,exitCtxList,tempDir,rmBackup,wd,lastFilter) record EditBuffer(text,selection,saveFileName,autoIndent,image,scrollValue, undoList,redoList,readOnly,initialSize,version,saveVersion,markTable) record EditSelection(r1,c1,r2,c2) record EditUndoRec(proc,args,selection,oldSel,version) record EditTag(fileName,pattern) record EditLoadRec(text,fileName,changed) global EditFunnyChars,SpecialFn,WordSet,System,Space,NonSpace,MaxUndo, EditClipboard,EditEOFStr global EditTextAsNeededLength,EditTextAsNeededLines global scrollWidth procedure EditSetMaxUndo() return .(MaxUndo := 100) end procedure Edit(fnList,geometry,font,wname, autoIndent,img,dialogFile,readOnly,lineNbr,ignoreCase,useCtx, loadFileProc,saveFileProc,rmBackup,eofStr) local columns,e,geo,height,position,rows,w,width,x,i,wdwname initial { EditFunnyChars := &cset[1:33] ++ &cset[128:0] -- "\t" WordSet := &letters ++ &digits ++ "_" Space := ' \t\v\n\r\f' NonSpace := ~Space System := if &features == "UNIX" then "UNIX" else if match("OS/2 ",&host) then "OS2" EditSetMaxUndo() EditClipboard := "XedClip" EditEOFStr := \eofStr | "~" } scrollWidth := 18 SpecialFn := "*Scratch*" /geometry := "80x24" /font := "fixed" x := XBind("font=" || font) | stop("Can't create window with font ",image(font)) geometry ? { columns := tab(find("x")) & move(1) & rows := tab(upto('+-')\1 | 0) position := tab(0) } columns := integer(columns) | 80 rows := integer(rows) | 24 /wname := EditFnTail(EditCwd()) || (case System of {default: "/" ; "OS2": "\\"}) wdwname := EditFnTail(&progname) || " -- " || (\wname | "") columns +:= 4 # Crude way to make room for the scroll bar geo := columns * WAttrib(x,"fwidth") || "x" || rows * WAttrib(x,"fheight") || position x := &null w := open(wdwname,"x","font=" || font,"geometry=" || geo, "cursor=on") | stop("Can't create window") width := WAttrib(w,"width") height := WAttrib(w,"height") e := EditRec( w, # w , # text , # selection # scroller NewScroller(w,width - scrollWidth,-1,scrollWidth,height + 1, EditScrolled,e,1,1,1,rows - 2), rows, # rows columns, # columns dialogFile, # dialogFile , # undoStatus autoIndent, # autoIndent img, # image readOnly, # readOnly , # backward 1, # wrap ignoreCase, # ignoreCase , # findString , # replaceString , # lastKey , # lastData , # oldTextLen , # oldSel wdwname, # wname , # buf table(), # bufferTable list(), # bufferList loadFileProc, # loadFileProc saveFileProc, # saveFileProc , # enterControl , # msgX , # msgY , # boxShowing [], # backTrail [], # foreTrail useCtx, # useCtx , # exitCtxList ("" ~== getenv("TMP")) || "/" | # tmpdir (case System of {default: "/tmp/" ; "OS2": "c:/tmp/"}), rmBackup, # rmBackup wname, # wd "") # lastFilter every EditOpen(e,!fnList[2:0],readOnly) EditOpen(e,fnList[1],readOnly) if *e.bufferList = 0 then EditOpen(e) if lineNbr ~=== 1 then { EditScrollToLine(e,lineNbr) } DoEvents(w,EditEvent,e) close(w) return e.exitCtxList end procedure EditFnTail(fn) local i every i := find("/",fn) return fn[\i + 1:0] | fn end procedure EditEvent(w,evt,e,interval,x,y) EditClearMsgPos(e) if \e.boxShowing then { e.boxShowing := &null EditPaintLines(e) } case type(evt) of { "integer": EditMouseEvent(w,evt,e,interval,x,y) "string": EditKeyEvent(w,evt,e,interval) } return end procedure EditClearMsgPos(e) e.msgX := e.msgY := &null return end procedure EditClose(e) local dw,resp if EditChanged(e) then { repeat { dw := EditCreateMsgBox(e,"Close") write(dw,"Save \"",e.buf.saveFileName,"\" before closing_ \n(save, don't save, cancel)?\n") resp := EditGetOneKey(dw) close(dw) EditFlushEvents(e.w) case map(resp[1]) of { "s": {EditSave(e) & break} "d": break "c": fail } } } delete(e.bufferTable,e.buf.saveFileName) pop(e.bufferList) EditOpen(e,e.bufferList[1] | &null) return end procedure EditForgetUndos(e) local dw,resp,buf buf := e.buf repeat { dw := EditCreateMsgBox(e,"Forget Undos & Redos") write(dw,"Forget undos and redos for \"",buf.saveFileName,"\"_ \n(ok, cancel)?\n") resp := EditGetOneKey(dw) close(dw) EditFlushEvents(e.w) case map(resp[1]) of { "o": break "c": fail } } buf.undoList := [] buf.redoList := [] return end procedure EditQuit(e,noCtx) if /noCtx then e.exitCtxList := EditBufCtxList(e) every 1 to *e.bufferTable do { if EditEscapePressed(e) then return EditClose(e) | return WAttrib(e.w,"pointer=top left arrow") } ControlExit := 1 return end procedure EditSaveEvery(e) local buf,currentBuf,resp,dw currentBuf := e.buf every buf := !copy(e.bufferList) do { EditOpen(e,buf) if EditChanged(e) then { repeat { dw := EditCreateMsgBox(e,"Save Every") write(dw,"Save \"",buf.saveFileName,"\"_ \n(save, don't save, cancel)?\n") resp := EditGetOneKey(dw) close(dw) EditFlushEvents(e.w) case map(resp[1]) of { "s": { EditSave(e) & WAttrib(e.w,"pointer=top left arrow") & break } "d": break "c": fail } } } } EditOpen(e,currentBuf) return end procedure EditRecentBuffer(e,n) /n := 2 return EditOpen(e,e.bufferList[n]) end procedure EditOpen(e,fn,readOnly) local text,buf,loadRec,ctx,dw,resp,x /fn := SpecialFn if not string(fn) then { # # A buffer was passed -- bring it to the front. # if buf === e.buf then return buf := fn fn := buf.saveFileName text := buf.text EditMoveBufToFront(e,buf) } else { fn := varsub(fn) if \e.useCtx then { ctx := EditParseCtx(fn) fn := ctx.fileName } else ctx := EditCtxRec(fn) if /buf := \e.buffer VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1` Table[fn] then { # # There is already a buffer by this name -- bring it to the # front. # if buf === e.buf then return text := buf.text EditMoveBufToFront(e,buf) } else { # # Create a new buffer. # EditSetWatch(e) if fn == SpecialFn then { # # The special scratch buffer name was specified -- # create a buffer with no text. # text := [] buf := EditNewBuffer(e,fn,text) readOnly := 1 } else if loadRec := e.loadFileProc(fn) then { # # There is a file by the specified name -- set up a # buffer with its text. # fn := loadRec.fileName text := loadRec.text buf := EditNewBuffer(e,fn,text) buf.version := buf.saveVersion := 1 if \loadRec.changed then buf.version +:= 1 } else { # # There is no file by the specified name -- create an # empty buffer. # if /readOnly then { repeat { dw := EditCreateMsgBox(e,"File Not Found") write(dw,image(fn)," if saved,\nwill create a new file._ \n(ok, cancel)?\n") resp := EditGetOneKey(dw) close(dw) EditFlushEvents(e.w) case map(resp[1]) of { "o" | "\r": break "c": fail } } if match("*",fn) then readOnly := 1 } text := [] buf := EditNewBuffer(e,fn,text) } buf.selection := \ctx.selection buf.scrollValue := \ctx.scrollValue every x := !\ctx.markList do { buf.markTable[x[1]] := x[2] } buf.readOnly := readOnly } } (\e.buf).scrollValue := e.scroller.value e.buf := buf e.text := text e.selection := buf.selection e.scroller.maxValue := *text WAttrib(e.w,"windowlabel=" || e.wname || " -- " || buf.saveFileName) WAttrib(e.w,"iconlabel=" || e.wd) EditSetScroll(e,buf.scrollValue) EditPaintLines(e) return end procedure EditMoveBufToFront(e,buf) local bufl,i bufl := e.bufferList every i := 1 to *bufl do { if bufl[i] === buf then break } e.bufferList := [buf] ||| bufl[1:i] ||| bufl[i + 1:0] return end procedure EditPrevBuffer(e) local bufl bufl := e.bufferList put(bufl,get(bufl)) EditOpen(e,bufl[1]) return end procedure EditNextBuffer(e) local bufl bufl := e.bufferList push(bufl,pull(bufl)) EditOpen(e,bufl[1]) return end procedure EditNewBuffer(e,fn,text) local buf buf := EditBuffer(text) e.bufferTable[fn] := buf push(e.bufferList,buf) buf.selection := EditSelection(1,1,1,1) buf.saveFileName := fn buf.autoIndent := e.autoIndent buf.image := e.image buf.undoList := [] buf.redoList := [] buf.markTable := table() buf.initialSize := *text buf.version := buf.saveVersion := 0 buf.scrollValue := 0 return buf end procedure EditSaveCmd(e) if not EditChanged(e) then EditErrorMessage(e,"File not changed") else if \e.buf.readOnly then EditErrorMessage(e,"File is read-only, so can't be saved") else EditSave(e) return end procedure EditCut(e) if EditCopy(e) then { EditNoteState(e) EditReplace(e) EditRefreshScreen(e) } return end procedure EditNoteState(e) e.oldTextLen := *e.text e.oldSel := copy(e.selection) return end procedure EditRefreshScreen(e) local start start := Min(e.oldSel.r1,e.selection.r1) if *e.text = e.oldTextLen then { EditPaintLines(e,EditScreenLine(e,start), EditScreenLine(e,Max(e.selection.r2,e.oldSel.r2))) } else { EditPaintLines(e,EditScreenLine(e,start)) } return end procedure Min(i1,i2[]) every i1 >:= !i2 return i1 end procedure Max(i1,i2[]) every i1 <:= !i2 return i1 end procedure EditPaste(e) local f,fn,t EditNoteState(e) fn := e.tempDir || EditClipboard t := [] if f := open(fn) then { every put(t,!f) close(f) } EditReplace(e,t) EditRefreshScreen(e) return end procedure EditUndo(e) local r,sel,sel2 e.undoStatus := "undoing" ##EditPrintUndo(e) EditNoteState(e) if r := pop(e.buf.undoList) then { sel := e.selection sel2 := r.selection sel.r1 := sel2.r1 sel.c1 := sel2.c1 sel.r2 := sel2.r2 sel.c2 := sel2.c2 r.proc!(\r.args | [e]) sel2 := r.oldSel sel.r1 := sel2.r1 sel.c1 := sel2.c1 sel.r2 := sel2.r2 sel.c2 := sel2.c2 e.buf.version := r.version } else EditBeep(e) e.undoStatus := &null EditRefreshAndScroll(e) return end procedure EditRedo(e) local r,sel,sel2 e.undoStatus := "redoing" ##EditPrintUndo(e) EditNoteState(e) if r := pop(e.buf.redoList) then { sel := e.selection sel2 := r.selection sel.r1 := sel2.r1 sel.c1 := sel2.c1 sel.r2 := sel2.r2 sel.c2 := sel2.c2 r.proc!(\r.args | [e]) } else EditBeep(e) e.undoStatus := &null EditRefreshAndScroll(e) return end procedure EditSelectAll(e) local oldSel,sel sel := e.selection oldSel := copy(sel) sel.r1 := sel.c1 := sel.c2 := 1 sel.r2 := *e.text + 1 EditHighlightSelection(e,oldSel) return end procedure EditToggleImage(e) e.buf.image := (\e.buf.image,&null) | 1 EditPaintLines(e) return end procedure EditToggleAutoIndent(e) e.buf.autoIndent := (\e.buf.autoIndent,&null) | 1 return end procedure EditRunFilter(e) local cmd,f,fn,oldSel,t if not &features == "pipes" then fail EditSetWatch(e) oldSel := copy(e.selection) EditSelectWholeLines(e) EditHighlightSelection(e,oldSel) if cmd := EditGetTextDialog(e,"Filter", "Enter filter command:\n(enter . for last: ",image(e.lastFilter), ")\n") then { if cmd == "." then cmd := e.lastFilter e.lastFilter := cmd fn := EditMakeTmp(e) if f := open(fn,"w") then { every write(f,EditSelectionLines(e,,1)) close(f) f := open(cmd || " < " || fn,"pr") t := [] while put(t,read(f)) close(f) remove(fn) put(t,"") EditNoteState(e) EditReplace(e,t) EditRefreshScreen(e) } else EditErrorMessage(e,"Can't create work file \"",fn,"\"") } return end procedure EditMakeTmp(e) return e.tempDir || "xe" || &clock[1+:2] || &clock[4+:2] || &clock[7+:2] end procedure EditShellCommand(e) local cmd,f,t,s,tsep static sep initial sep := case System of {"UNIX": "\n" ; "OS2": "&"} if \System then { EditSetWatch(e) if EditIsEmptySelection(e) then { EditNoteState(e) EditSelectWholeLines(e) EditRefreshScreen(e) } cmd := "" t := [] tsep := "" every s := EditSelectionLines(e,,1) do { cmd ||:= tsep || s tsep := sep put(t,s) } # f := open("(" || cmd || ") 2>&1","rp") f := open("sh 2>&1 -c " || shquote(cmd),"rp") every put(t,!f) close(f) put(t,"") EditNoteState(e) EditReplace(e,t) EditRefreshAndScroll(e) return } end procedure EditInsertBuffers(e) local cmd,f,t,s t := EditBufNameList(e) put(t,"") EditNoteState(e) EditReplace(e,t) EditRefreshAndScroll(e) return end procedure EditBufNameList(e) local t t := [] every put(t,(!sort(e.bufferTable))[1]) return t end procedure EditBufCtxList(e) local t,buf,marks,x,mark e.buf.scrollValue := e.scroller.value # update buffer's scroll position t := [] every buf := !e.bufferList do { if buf.saveVersion > 0 then { marks := "" every x := !sort(buf.markTable) do { mark := x[1] if match(!"*~",mark) then next while mark[upto(',}',mark)] := "_" marks ||:= "," || mark || "," || EditOutputSelection(x[2]) } put(t,buf.saveFileName || "{" || buf.selection.r1 || "," || buf VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1/.selection.c1 || "," || buf.selection.r2 || "," || buf.selection.c2 || "," || buf.scrollValue || marks || "}") } } return t end procedure EditOutputSelection(sel) return sel.r1 || "," || sel.c1 || "," || sel.r2 || "," || sel.c2 end procedure EditInputSelection() return EditSelection( integer(tab(find(","))), (move(1),integer(tab(find(",")))), (move(1),integer(tab(find(",")))), (move(1),integer(tab(many(&digits))))) end record EditCtxRec(fileName,selection,scrollValue,markList) procedure EditParseCtx(fn) local ctx,sel,scrollValue,markList fn ? { if fn := tab(find("{")) & move(1) & ctx := tab(find("}")) & pos(-1) then { ctx ? { sel := EditInputSelection() scrollValue := (move(1),integer(tab(find(",") | 0))) markList := [] until pos(0) do { move(1) put(markList,[tab(find(",")),(move(1),EditInputSelection())]) } } } else { fn := tab(0) } } return EditCtxRec(fn,sel,scrollValue,markList) end procedure EditFindFileAndLine(e) local line,fn,lineNbr,lineNbr2,column EditSetWatch(e) if EditIsEmptySelection(e) then EditSelectWholeLines(e) line := EditSelectionLines(e) # # Parse the file:line specification. # line ? { if ="File " then { # # Parse Icon (i.e. MPW) spec. # fn := tab(find("; Line ")) move(7) lineNbr := integer(tab(many(&digits))) } else { # # Determine whether UNIX or Cset/2 format. # tab(upto('(:')) case move(1) of { ":": { # # UNIX # tab(1) tab(many(' \t')) fn := trim(tab(find(":") | 0),' \t') move(1) =" Line" # concession to some Icon messages tab(many(' \t')) lineNbr := integer(tab(many(&digits))) if ="," then { lineNbr2 := integer(tab(many(&digits))) } } "(": { # # Cset/2 # tab(1) fn := tab(find("(")) move(1) lineNbr := integer(tab(upto(':)'))) =":" column := integer(tab(find(")"))) } } } } if EditOpen(e,fn) then { EditScrollToLine(e,\lineNbr,"wholeLine") & EditGoToCol(e,\column) | &null & if \lineNbr2 then { EditNoteState(e) e.selection.r2 := lineNbr2 + 1 EditRefreshScreen(e) } else {} } return end procedure EditGetTextDialog(e,title,s[]) local cmd,dw dw := EditCreateMsgBox(e,title) every writes(dw,!s) write(dw) cmd := read(dw) | fail close(dw) return "" ~== cmd end procedure EditErrorMessage(e,s[]) return EditMessage!([e,"Oops!"] ||| s) end procedure EditMessage(e,title,s[]) local dw dw := EditCreateMsgBox(e,title) every writes(dw,!s) write(dw) EditWaitForAnyEvent(dw) close(dw) return end procedure EditShiftLeft(e) EditNoteState(e) EditShiftLines(e,1) EditRefreshScreen(e) return end procedure EditShiftRight(e) EditNoteState(e) EditShiftLines(e,-1) EditRefreshScreen(e) return end procedure EditCursorLeft(e) local oldSel,sel sel := e.selection oldSel := copy(sel) EditNoteState(e) if (sel.c1 -:= 1) < 1 then { sel.c1 := if (sel.r1 -:= 1) < 1 then 1 else *e.text[sel.r1] + 1 } sel.r2 := sel.r1 ; sel.c2 := sel.c1 EditValidateSelection(e) EditRefreshAndScroll(e) return end procedure EditCursorRight(e) local oldSel,sel sel := e.selection oldSel := copy(sel) EditNoteState(e) if (sel.c2 +:= 1) > (*e.text[sel.r2] + 1 | 1)\1 then { sel.r2 +:= 1 sel.c2 := 1 } sel.r1 := sel.r2 ; sel.c1 := sel.c2 EditValidateSelection(e) EditRefreshAndScroll(e) return end procedure EditCursorUp(e) local oldSel,sel sel := e.selection oldSel := copy(sel) if not (e.lastKey == ("\^J" | "\^K")) then e.lastData := EditGetScreenOffset(e,e.text[sel.r1],sel.c1) EditNoteState(e) sel.r2 := sel.r1 -:= 1 sel.c1 := sel.c2 := EditGetStringOffset(e,e.text[sel.r1],e.lastData) EditValidateSelection(e) EditRefreshAndScroll(e) return end procedure EditCursorDown(e) local oldSel,sel sel := e.selection oldSel := copy(sel) if not (e.lastKey == ("\^J" | "\^K")) then e.lastData := EditGetScreenOffset(e,e.text[sel.r1],sel.c1) EditNoteState(e) sel.r2 := sel.r1 +:= 1 sel.c1 := sel.c2 := EditGetStringOffset(e,e.text[sel.r1],e.lastData) EditValidateSelection(e) EditRefreshAndScroll(e) return end procedure EditFindCmd(e) (e.findString := EditGetTextDialog(e,"Find", "Find what string or /regular expression/?\n (Current: ", image(e.findString),")\n")) | return EditFind(e,e.findString) return end procedure EditFindAgainCmd(e) EditFind(e,e.findString) return end procedure EditSelectionToFind(e) e.findString := EditSelectionLines(e) return end procedure EditDisplaySelection(e) if EditIsEmptySelection(e) then EditCursorBox(e) else { if EditScrollToSelectionIfOffScreen(e) then EditPaintLines(e) } return end procedure EditOpenSelectedFile(e) local sel,fn EditNoteState(e) if EditIsEmptySelection(e) then { sel := EditSortSelection(e.selection) if not any(NonSpace,e.text[sel.r1],sel.c1) then { if sel.c1 > 1 then {sel.c1 -:= 1 ; sel.c2 -:= 1} } EditSelectNonspaces(e) EditRefreshScreen(e) } fn := EditSelectionLines(e) if any(NonSpace,fn) then EditOpen(e,fn) return end procedure EditReplaceCmd(e) local dw dw := EditCreateMsgBox(e,"Replace") write(dw,"Replace what string or /regular expression/?\n (Current: ", image(e.findString),")\n") e.findString := "" ~== read(dw) write(dw,"\nwith what string?\n (Current: ",image(e.replaceString),")\n") (e.replaceString := "" ~== read(dw)) | {close(dw) ; return} close(dw) EditFind(e,e.findString,e.replaceString) return end procedure EditReplaceAgainCmd(e) EditFind(e,e.findString,e.replaceString) return end procedure EditToggleBackward(e) return e.backward := (\e.backward,&null) | 1 return end procedure EditToggleWrap(e) return e.wrap := (\e.wrap,&null) | 1 end procedure EditToggleCase(e) return e.ignoreCase := (\e.ignoreCase,&null) | 1 end procedure EditTextFromFileCmd(e) local f,fn,t if fn := EditGetTextDialog(e,"Enter Text from File", "Enter text from what file?\n") then { fn := varsub(fn) if f := open(fn) then { t := [] while put(t,read(f)) close(f) EditNoteState(e) EditReplace(e,t) EditRefreshScreen(e) } else EditErrorMessage(e,"Can't find file named \"",fn,"\"") } return end procedure EditToggleTrace() return &trace := if &trace = 0 then -1 else 0 end procedure EditDeleteCmd(e) EditNoteState(e) EditDelete(e) EditRefreshAndScroll(e) return end procedure EditGoToLineCmd(e) local resp,line,col static digits initial digits := &digits ++ "-" if resp := EditGetTextDialog(e,"Go To Line", "Enter line number [column number]:\n") then { resp ? { line := tab(many(digits)) tab(upto(digits)) & col := tab(many(digits)) } if line := integer(line) then EditScrollToLine(e,line,"wholeLine") if col := integer(col) then EditGoToCol(e,col) } return end procedure EditGoToCol(e,col) local line,sel sel := EditSortSelection(e.selection) line := e.text[sel.r1] if col <= 0 then col := *line + 1 + col if not (0 < col <= *line + 1) then {EditBeep(e) ; return} EditNoteState(e) sel.c1 := col sel.c2 := col + 1 sel.r2 := sel.r1 EditValidateSelection(e) EditRefreshScreen(e) return enH VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1>d procedure EditScrollToLine(e,line,wholeLine) EditNoteState(e) EditGoToLine(e,line,wholeLine) | {EditBeep(e) ; fail} EditRefreshAndScroll(e) return end procedure EditCwd() local p,cwd static pwd initial pwd := case System of {"UNIX": "pwd" ; "OS2": "cd"} if p := open(\pwd,"rp") then { cwd := read(p) close(p) return cwd } end procedure EditMemoryStats(e) local dw,lst dw := EditCreateMsgBox(e,"Memory Stats",64,25) write(dw,"\n Memory Allocation Statistics") write(dw,"\n Current region sizes") lst := [] ; every put(lst, ®ions) write(dw," static: ",lst[1], "\n string: ",lst[2], "\n block: ",lst[3]) write(dw,"\n Current bytes allocated") lst := [] ; every put(lst, &storage) write(dw," static: ",lst[1], "\n string: ",lst[2], "\n block: ",lst[3]) write(dw,"\n Accumulated bytes allocated") lst := [] ; every put(lst, &allocated) write(dw," total: ",lst[1], "\n static: ",lst[2], "\n string: ",lst[3], "\n block: ",lst[4]) write(dw,"\n Collections") lst := [] ; every put(lst, &collections) write(dw," total: ",lst[1], "\n static: ",lst[2], "\n string: ",lst[3], "\n block: ",lst[4]) EditWaitForAnyEvent(dw) close(dw) return end procedure EditInfoCmd(e) local dw,sel,t,buf,cwd sel := e.selection buf := e.buf cwd := EditCwd() dw := EditCreateMsgBox(e,"Info",Max(64,*buf.saveFileName + 10, *\cwd + 24 | 0),24) write(dw,"\n Mouse-Oriented Editor for Windows") write(dw," written in Icon by Bob Alexander\n") write(dw," File: ", "\"" || ("" ~== \buf.saveFileName) || "\"" | "** none **") write(dw," ",if EditChanged(e) then "Modified" else "Not modified", " since save") write(dw," Lines: ",*e.text) t := 0 every t +:= *!e.text + 1 write(dw," Chars: ",t) t := 0 = *e.text | sel.r2 - sel.r1 + 1 writes(dw," The Selection: line ",sel.r1,", column ",sel.c1) if sel.r2 ~= sel.r1 then writes(dw," to line ",sel.r2,", column ",sel.c2) else if sel.c2 ~= sel.c1 then writes(dw," to column ",sel.c2) write(dw) write(dw," Lines selected: ",abs(sel.r2 - sel.r1) + 1) t := 0 every t +:= *EditSelectionLines(e) + 1 write(dw," Chars selected: ",t - 1) write(dw," Current size of Undo/Redo list: ",*buf.undoList, "/",*buf.redoList) write(dw," Current directory: \"",\cwd,"\"") write(dw) EditWriteMode(dw,e.wrap,"Wrap Mode for Find") EditWriteMode(dw,e.ignoreCase,"Case Independence Mode for Find") EditWriteMode(dw,e.backward,"Find Backward") EditWriteMode(dw,buf.autoIndent,"Auto Indent") EditWriteMode(dw,buf.readOnly,"Read Only") EditWriteMode(dw,buf.image,"Show Unprintables") write(dw," Tab spacing: ",\Tabs - 1 | "off") write(dw," Tags table size: ",EditGoToTag(e,,"size")) EditWriteMode(dw,&trace ~= 0 | &null,"Trace") EditWaitForAnyEvent(dw) close(dw) return end ## procedure EditHelpCmd(e) ## local dw,help,lines,maxw,line ## help := EditHelpText() ## help ? { ## maxw := lines := 0 ## while line := tab(find("\n")) do { ## move(1) ## lines +:= 1 ## maxw <:= *line ## } ## } ## dw := EditCreateMsgBox(e,"Help",maxw + 1,lines + 1) ## writes(dw,help) ## EditWaitForAnyEvent(dw) ## close(dw) ## return ## end procedure EditHelpBuffer(e) local dw,help,lines,maxw,line EditOpen(e,"*Help*","readOnly") if *e.text = 0 then { EditReplace(e,EditHelpText()) e.buf.saveVersion := e.buf.version EditPaintLines(e) } return end procedure EditOpenCmd(e) local dw,bufSort,resp,fn,n,maxwid maxwid := 0 every fn := key(e.bufferTable) do maxwid <:= *fn maxwid := Max(64,maxwid + 10) dw := EditCreateMsgBox(e,"Open",maxwid,*e.bufferTable + 8) bufSort := sort(e.bufferTable) write(dw,"List of Open Files") write(dw,"------------------") n := 0 every fn := !bufSort do write(dw,n +:= 1,". ",if EditChanged(e,fn[2]) then "(" || fn[1] || ")" else fn[1], if fn[2] === e.buf then " <-" else if fn[2] === e.bufferList[2] then " *" else "") write(dw,"\n(Enter a number or a file name)\nOpen which file?\n") resp := read(dw) close(dw) if resp == "" then return EditOpen(e,bufSort[integer(resp)][1] | resp) return end procedure EditDataKeyTyped(e,evt) local oldSel,r,r1,r2,sel,t,text static oneChar initial oneChar := ["x"] sel := e.selection text := e.text if EditIsEmptySelection(e) & evt ~== "\r" then { # # This is optimized code for inserting a character into # an empty selection. # oldSel := copy(sel) r1 := r2 := sel.r1 if (r1 > *text,put(text,evt),r2 +:= 1) | (text[r1][sel.c1+:0] := evt) then sel.c2 := sel.c1 +:= 1 EditAddUndo(e,EditDelete,,sel,oldSel) EditAdjustMarks(e,oldSel,oneChar) EditScrollToSelectionIfOffScreen(e) EditPaintLines(e,EditScreenLine(e,r1),EditScreenLine(e,r2)) } else { EditSortSelection(sel) r := sel.r1 # # Generalized replacement of selection by typed character. # t := evt EditNoteState(e) if evt == "\r" & \e.buf.autoIndent then { detab(text[r],Tabs) ? { t ||:= entab(tab(many(' \t')),Tabs) } sel.c2 := many(' \t',text[sel.r2],sel.c2) } EditReplace(e,t,sel) EditRefreshAndScroll(e) } return end procedure EditKeyEvent(w,evt,e) static deleteKey,cursorLeftKey,printChars initial { deleteKey := "\d" cursorLeftKey := "\^H" if System === "OS2" then { deleteKey := "\^H" # for OS/2 backspace key deletes cursorLeftKey := "\x10"# and Delete key does cursor-left } e.findString := e.replaceString := e.lastKey := "" printChars := &ascii[33:128] ++ "\r\t" } ## write("{{{{ event = ",image(evt)," x = ",&x," y = ",&y," t = ",&time) if \e.enterControl then { EditDataKeyTyped(e,evt) e.enterControl := &null } else case evt of { "\^Q": EditQuit(e) # quit "\^O": EditOpenCmd(e) # open "\^W": EditClose(e) # close file "\^D": EditSaveCopy(e) # write a copy "\^S": EditSaveCmd(e) # save "\^E": EditSaveEvery(e) # save modified buffers "\^C": EditCopy(e) # copy "\^X": EditCut(e) # cut "\^V": EditPaste(e) # paste "\^Z": EditUndo(e) # undo "\^Y": EditRedo(e) # redo "\^A": EditSelectAll(e) # select all deleteKey: EditDeleteCmd(e) # delete/backspace "\^@": EditGoToLineCmd(e) # go to line cursorLeftKey: EditCursorLeft(e) # cursor left "\^J": EditCursorDown(e) # cursor down "\^K": EditCursorUp(e) # cursor up "\^L": EditCursorRight(e) # cursor right "\^F": EditFindCmd(e) # find "\^G": EditFindAgainCmd(e) # find again "\^U": EditSelectionToFind(e) # set find string to selection "\^R": EditReplaceCmd(e) # replace "\^T": EditReplaceAgainCmd(e) # replace again "\^B": EditToggleBackward(e) # backward mode toggle "\x1c": EditInfoCmd(e) # info "\^?" | "\^/": EditHelpBuffer(e) # help "\e": { # escape key sequence evt := Event(w) if type(evt) == "string" then case evt of { "d": EditDupAtLastClick(e) # duplicate at "*Last Click*" "`": EditGoToMark(e,"*Last Place*") # go to "*Last Place*" ",": EditPrevBuffer(e) # previous buffer ".": EditNextBuffer(e) # next buffer "1": EditOpen(e) # scratch buffer "o": EditOpenSelectedFile(e) # open selected file "y85 VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1)MB": EditInsertBuffers(e) # insert buffer names "m": EditCreateMarkCmd(e) # create mark "j": EditGoToMarkCmd(e) # jump to mark "t": EditAddTrail(e) # add selection to trail "T": EditClearTrail(e) # add selection to trail "9": EditBackTrail(e) # go to last trail loc "0": EditForeTrail(e) # go to next trail loc "u": EditToggleImage(e) # "image" toggle "a": EditToggleAutoIndent(e) # autoindent toggle "\r": EditShellCommand(e) # do a shell command "f": EditRunFilter(e) # run program (filter) "i": EditExecuteIcon(e) # run program (filter) "s": EditFindFileAndLine(e) # find "file:line" from text "w": EditToggleWrap(e) # wrap mode toggle "c": EditToggleCase(e) # case independence toggle "r": EditTextFromFileCmd(e) # enter text from file "l": EditDisplaySelection(e) # scroll to selection "p": EditSelectedTag(e) # go to tag "P": EditGoToTag(e,,"refresh") # purge tags file deleteKey: EditDeleteToEnd(e) # delete to end of text "[": EditShiftLeft(e) # shift 1 left "]": EditShiftRight(e) # shift 1 right "v": e.enterControl := 1 # enter a control char "x": EditReverseText(e) # reverse selected characters "Q": EditQuit(e,"noCtx") # quit w/o saving context "&": EditToggleTrace() # &trace "M": EditMemoryStats(e) # memory allocation stats "Z": EditForgetUndos(e) # forget undos & redos "R": EditRuler(e) # insert a ruler !&digits: EditRecentBuffer(e,evt) # nth most recent buffer default: EditBeep(e) } } default: if any(printChars,evt) then # data key typed EditDataKeyTyped(e,evt) else EditBeep(e) } e.lastKey := evt return end procedure EditGoToLine(e,line,wholeLine) local sel sel := e.selection if line = 0 then { EditCreateMark(e) sel.r1 := sel.r2 := *e.text + 1 sel.c1 := sel.c2 := 1 return } if line <= 0 then line := *e.text + line + 1 if 1 <= line <= *e.text then { EditCreateMark(e) sel.r1 := sel.r2 := line sel.c1 := sel.c2 := 1 if \wholeLine then sel.r2 +:= 1 return } else EditBeep(e) end procedure EditBeep(e) if System ~=== "OS2" then writes("\^G") return end procedure EditScreenLine(e,line) return line - e.scroller.value + 1 end procedure EditScrollToSelectionIfOffScreen(e,linesAtBottom) /linesAtBottom := 0 return if not (1 <= EditScreenLine(e,e.selection.r1) <= e.rows - linesAtBottom) then EditScrollToSelection(e) end procedure EditRefreshAndScroll(e,linesAtBottom) return ( if EditScrollToSelectionIfOffScreen(e,linesAtBottom) then EditPaintLines(e) else EditRefreshScreen(e) ) end procedure EditWriteMode(w,mode,modeString) return write(w," ",modeString,": ",if \mode then "on" else "off") end procedure EditWaitForAnyEvent(w) local evt # # Actually, wait for mouse UP or any key. # repeat { if type(evt := Event(w)) == "integer" then { if evt = (&lrelease|&mrelease|&rrelease) then break } else break } return evt end procedure EditGetOneKey(w) local evt while type(evt := Event(w)) == "integer" do { } return evt end procedure EditFlushEvents(w) while Pending(w)[1] do Event(w) return end procedure EditSaveCopy(e) local fn if fn := EditGetTextDialog(e,"Write a Copy", "Write a copy to what file?\n") then return EditSave(e,fn,,1) end procedure EditMouseEvent(w,evt,e,interval,x,y) local oldSel,sel,text static lastKey,lastMouseEvent,clickCount,lastMouseX,lastMouseY initial { lastKey := "" clickCount := lastMouseEvent := 0 } ## write("{{{{ event = ",image(evt)," x = ",x," y = ",y," t = ",&time) sel := e.selection text := e.text if evt === (&lpress | &mpress | &rpress) then { # # Process mouse button presses, checking for double and triple # clicks. # if lastMouseEvent = evt & interval <= 200 & # double-click interval lastMouseX - 4 < x < lastMouseX + 4 & # double-click has slop lastMouseY - 4 < y < lastMouseY + 4 then { # of +/- 4 pixels 3 >= (clickCount +:= 1) | (clickCount := 1) } else { clickCount := 1 lastMouseX := x lastMouseY := y } lastMouseEvent := evt } oldSel := copy(sel) case evt of { &lpress: { # mouse left button pressed sel.r1 := sel.r2 := &row + e.scroller.value - 1 sel.c1 := sel.c2 := EditGetStringOffset(e,text[sel.r1],&col) case clickCount of { 1: EditCreateMark(e,"*Last Click*",oldSel) 2: EditSelectWord(e) 3: EditSelectLine(e) } EditValidateSelection(e) EditHighlightSelection(e,oldSel) } &rpress|&mpress|&null: { if &row < 1 then { sel.c2 := 1 EditHighlightSelection(e,oldSel) oldSel := copy(sel) until e.scroller.value <= 1 | *Pending(e.w) > 0 do { sel.r2 := e.scroller.value EditHighlightSelection(e,oldSel) oldSel := copy(sel) EditScroll(e,e.scroller.value - 1,e.scroller.value) EditSetScroll(e,e.scroller.value - 1) } } else if &row > e.rows then until e.scroller.value >= *text | *Pending(e.w) > 0 do { sel.c2 := 1 sel.r2 := e.scroller.value + e.rows EditHighlightSelection(e,oldSel) oldSel := copy(sel) EditScroll(e,e.scroller.value + 1,e.scroller.value) EditSetScroll(e,e.scroller.value + 1) } else { sel.r2 := &row + e.scroller.value - 1 sel.c2 := EditGetStringOffset(e,text[sel.r2], &col) case clickCount of { 2: EditSelectWord(e) 3: EditSelectLine(e) } EditValidateSelection(e) if not EditEqualSel(sel,oldSel) then EditHighlightSelection(e,oldSel) } } &ldrag|&mdrag|&rdrag: { if not Pending(w)[1] then EditMouseEvent(w,&null,e,interval,x,y) } ## &lrelease|&mrelease|&rrelease: &resize: EditResizeWindow(e) } return end procedure EditResizeWindow(e) local height,oldScroller,w,width w := e.w width := WAttrib(w,"width") height := WAttrib(w,"height") e.columns := WAttrib(w,"columns") e.rows := WAttrib(w,"lines") oldScroller := RemoveScroller(e.scroller) e.scroller := NewScroller(w,width - scrollWidth,-1,scrollWidth,height + 1, EditScrolled,e,oldScroller.value,1 <= *e.text | 1,1,e.rows - 2) EraseArea(w) DrawScroller(e.scroller) EditPaintLines(e) return e end procedure EditEqualSel(sel1,sel2) return sel1.r1 = sel2.r1 & sel1.c1 = sel2.c1 & sel1.r2 = sel2.r2 & sel1.c2 = sel2.c2 end procedure EditShiftLines(e,n) local h,i,line,oldSel,p,sel,text sel := e.selection oldSel := copy(sel) text := e.text EditSelectWholeLines(e) EditAddUndo(e,EditReplace,sel,sel,oldSel) every i := sel.r1 to sel.r2 - 1do { line := text[i] if p := many(' \t',line) then h := detab(line[1:p],Tabs) else {p := 1 ; h := ""} if n > 0 then { (h[-n:0] := "") | (h := "") } else { h ||:= repl(" ",-n) } text[i] := entab(h,Tabs) || line[p:0] } return end procedure EditSelectWholeLines(e,sel) /sel := e.selection EditSortSelection(sel) if sel.c2 ~= 1 | sel.r1 = sel.r2 then sel.r2 +:= 1 sel.c1 := sel.c2 := 1 return sel end procedure EditCreateMsgBox(e,title,width,height) local dw,x,y,w,b w := e.w /title := "?" /width := 60 /height := 10 /e.msgX := 0 <= (WAttrib(w,"posx") + WAttrib(w,"pointerx") - 92) | 0 & e.msgY := 0 <= (WAttrib(w,"posy") + WAttrib(w,"B VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1\pointery") - 72) | 0 x := e.msgX y := e.msgY b := XBind("font=fixed") width *:= WAttrib(b,"fwidth") height *:= WAttrib(b,"fheight") dw := open(title,"x","geometry=" || width || "x" || height || "+" || x || "+" || y) return dw end procedure EditFind(e,s,replace,direction) local backward,c,findMap,findProc,matchProc,r,sel,sel2,text,lookHere EditSetWatch(e) findMap := if \e.ignoreCase then map else 1 sel := e.selection EditSortSelection(sel) sel2 := copy(sel) text := e.text backward := e.backward backward := case direction of { "forward": &null "backward": 1 default: e.backward } findProc := find matchProc := match lookHere := \replace ~== s if *s > 2 then { if s[1] == "/" & s[-1] == "/" then { Re_Filter := findMap s := RePat(s[2:-1]) | {EditBeep(e) ; return} findProc := ReFind matchProc := ReMatch } } s := findMap(string(s)) EditNoteState(e) if \backward then { # # Search backward. # (\lookHere, c := (matchProc(s,findMap(text[r := sel2.r1]),sel2.c1),sel2.c1)) | every c := findProc(s,findMap(text[r := sel2.r1]),,sel2.c1) if \c | (every r := (sel2.r1 - 1 to 1 by -1) | (if \e.wrap then *text to sel2.r1 by -1) do { if EditEscapePressed(e) then break &fail every c := findProc(s,findMap(text[r])) if \c then break }) then { sel.r1 := sel.r2 := r sel.c1 := c sel.c2 := matchProc(s,findMap(text[r]),c) ## writes((/replace,"Found ") | "Replaced ",image(s)," at ") ## EditPrintSelection(e) if EditReplace(e,\replace) then { ## writes("with ",image(replace)," -- new ") ## EditPrintSelection(e) } EditRefreshAndScroll(e) } else { ## write("\^GCan't find ",image(s)) EditBeep(e) } } else { # # Search forward. # if (\lookHere, c := (matchProc(s,findMap(text[r := sel2.r1]),sel2.c1),sel2.c1)) | (c := findProc(s,findMap(text[r := sel2.r2]),sel2.c2)) | (every r := (sel2.r2 + 1 to *text) | (if \e.wrap then 1 to sel2.r2) do { if EditEscapePressed(e) then break &fail if c := findProc(s,findMap(text[r])) then break }) then { sel.r1 := sel.r2 := r sel.c1 := c sel.c2 := matchProc(s,findMap(text[r]),c) ## writes((/replace,"Found ") | "Replaced ",image(s)," at ") ## EditPrintSelection(e) if EditReplace(e,\replace) then { ## writes("with ",image(replace)," -- new ") ## EditPrintSelection(e) } EditRefreshAndScroll(e,4) } else { ## write("\^GCan't find ",image(s)) EditBeep(e) } } EditCreateMark(e,,sel2) return end procedure EditScrollToSelection(e) local r1,r2,rows,sel,selRows sel := e.selection rows := e.rows r1 := sel.r1 r2 := sel.r2 if r2 > r1 then r1 :=: r2 selRows := r2 - r1 + 1 EditSetScroll(e,if selRows >= rows then r1 else r1 - (rows - selRows) / 2) return end procedure EditSelectWord(e) local b,c,i,line,sel,text static bracketChars,startBrackets,endBrackets initial { bracketChars := '()[]{}<>"\'' startBrackets := "([{<\"'" endBrackets := ")]}>\"'" } sel := e.selection if line := e.text[sel.r2] then { if EditIsEmptySelection(e) then { if any(bracketChars,c := line[sel.c1]) then { # # Double click on a bracket-type character selects chars # between the brackets. # text := e.text if find(c,startBrackets) then { sel.c1 +:= 1 b := map(c,startBrackets,endBrackets) if i := bal(b,c,b,EditTextAsNeeded(e,line,sel.r1 + 1,*text), sel.c1) then { sel.r2 := sel.r1 + EditTextAsNeededLines sel.c2 := i - EditTextAsNeededLength } } else { b := map(c,endBrackets,startBrackets) if i := bal(b,c,b,EditTextAsNeeded(e,line,sel.r1 - 1,1,-1, reverse),*line - sel.c1 + 2) then { sel.r2 := sel.r1 - EditTextAsNeededLines sel.c2 := *text[sel.r2] - (i - EditTextAsNeededLength) + 2 } } } else { # # Select a word -- current selection empty. # if sel.c2 := many(WordSet,line,sel.c1) then { sel.c1 +:= 1 while any(WordSet,line,0 < (sel.c1 -:= 1)) sel.c1 +:= 1 } else { sel.c2 +:= 1 EditValidateSelection(e) } } } # # Handle extend-select. # else if sel.r1 < sel.r2 | (sel.r1 = sel.r2 & sel.c1 < sel.c2) then { # # Extend forward. # sel.c2 := many(WordSet,line,sel.c2) | sel.c2 } else { # # Extend backward. # while any(WordSet,line,0 < (sel.c2 -:= 1)) sel.c2 +:= 1 } } return end procedure EditSelectNonspaces(e) local line,sel sel := e.selection if line := e.text[sel.r2] then { if EditIsEmptySelection(e) then { # # Select a word -- current selection empty. # if sel.c2 := many(NonSpace,line,sel.c1) then { sel.c1 +:= 1 while any(NonSpace,line,0 < (sel.c1 -:= 1)) sel.c1 +:= 1 } else { sel.c2 +:= 1 EditValidateSelection(e) } } # # Handle extend-select. # else if sel.r1 < sel.r2 | (sel.r1 = sel.r2 & sel.c1 < sel.c2) then { # # Extend forward. # sel.c2 := many(NonSpace,line,sel.c2) | sel.c2 } else { # # Extend backward. # while any(NonSpace,line,0 < (sel.c2 -:= 1)) sel.c2 +:= 1 } } return end procedure EditTextAsNeeded(e,line,rfrom,rto,rby,prc) /rby := 1 /prc := 1 EditTextAsNeededLength := 0 EditTextAsNeededLines := 0 suspend line := prc(line) EditTextAsNeededLength := *line EditTextAsNeededLines := 1 suspend line ||:= prc(e.text[rfrom to rto by rby]) do { if *line > 2000 then EditSetWatch(e) if EditEscapePressed(e) then fail EditTextAsNeededLength := *line EditTextAsNeededLines +:= 1 } end procedure EditEscapePressed(e) if *Pending(e.w) > 0 then { if Event(e.w) === "\e" then return } end procedure EditSetWatch(e) return WAttrib(e.w,"pointer=watch") end procedure EditSelectLine(e) local line,sel sel := e.selection line := e.text[sel.r2] if EditIsEmptySelection(e) then { # # Select whole line if current selection empty. # sel.c2 := sel.c1 := 1 sel.r2 +:= 1 } else if sel.r1 < sel.r2 | (sel.r1 = sel.r2 & sel.c1 < sel.c2) then { # # Extend forward. # sel.c2 := 1 sel.r2 +:= 1 } else { # # Extend backward. # sel.c2 := 1 } EditValidateSelection(e) return end procedure EditValidateSelection(e,sel) /sel := e.selection (sel.r1 <:= 1) | (if sel.r1 > *e.text then { sel.r1 := *e.text + 1 sel.c1 := 1 }) (sel.r2 <:= 1) | (if sel.r2 > *e.text then { sel.r2 := *e.text + 1 sel.c2 := 1 }) (sel.c1 <:= 1) | (sel.c1 >:= ((*e.text[sel.r1] + 1) | 1)\1) (sel.c2 <:= 1) | (sel.c2 >:= ((*e.text[sel.r2] + 1) | 1)\1) ##EditPrintSelection(e,"EditValidateSelection returned",sel) return end procedure EditSave(e,fn,sel,saveCopy) local bakfn,buf,dw,resp,i EditSetWatch(e) buf := e.buf (/fn := buf.saveFileName) | (fn := varsub(fn)) if /fn | fn == "" | match("*",fn) | \buf.readOnly then return EditSaveCopy(e) if /saveCopy & buf.initialSize > 0 then { if System == "OS2" then { # # Create a backup file name by substituting a ".bak" suffix. # i := 0 every i := find(".",fn) bakfn := fn[1:i] || ".bak" } else { # # Create a backup file name by appending "~". # bakfn := fn || "V5ք VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1bk~" } EditBackupFile(e,fn,bakfn) | { EditErrorMessage(e,"Unable to create backup file \"",bakfn,"\"") fail } } e.buf.initialSize := *e.text # # Check if he's trying to write over a directory. # if System == "UNIX" & system("test -d " || fn) = 0 then { EditErrorMessage(e,image(fn)," is a directory") fail } # # Check if he's overwriting a file. # if System == "UNIX" & \saveCopy & system("test -f " || fn) = 0 then { dw := EditCreateMsgBox(e,"Save") write(dw,"Replace existing \"",fn,"\"?_ \n(replace, don't replace)?\n") resp := EditGetOneKey(dw) close(dw) EditFlushEvents(e.w) case map(resp[1]) of { "r" | "\r": {} "d": fail } } EditWriteToFile(e,fn,sel,"edit") | fail if \e.rmBackup then remove(\bakfn) return end procedure EditWriteToFile(e,fn,sel,tag) local f,line if f := open(fn,"w") then { &error := 1 every line := (if \sel then EditSelectionLines(e,sel,1) else !e.text) do { write(f,line) | { EditErrorMessage(e,"Error writing file: ",&errortext," (", image(&errorvalue),")") close(f) fail } } &error := 0 close(f) e.buf.saveVersion := e.buf.version return } else EditErrorMessage(e,"Unable to write to ",tag," file \"",fn,"\"") end procedure EditBackupFile(e,fn1,fn2) local f1,f2,buf f1 := open(fn1,"r") | return &null f2 := open(fn2,"w") | fail &error := 1 while buf := read(f1) do { write(f2,buf) | { EditErrorMessage(e,"Error copying file: ",&errortext," (", image(&errorvalue),")") every close(f1 | f2) fail } } &error := 0 every close(f2 | f1) return fn2 end procedure EditSelectionLines(e,sel,x) local text /sel := e.selection sel := EditSortSelection(sel) text := e.text if sel.r1 = sel.r2 then suspend text[sel.r1][sel.c1:sel.c2] else { suspend text[sel.r1][sel.c1:0] every suspend text[sel.r1 + 1 to sel.r2 - 1] if /x | sel.c2 ~= 1 then suspend text[sel.r2][1:sel.c2] } end procedure EditCopy(e) local f,fn if not EditIsEmptySelection(e) then { fn := e.tempDir || EditClipboard if f := open(fn,"w") then { every write(f,EditSelectionLines(e)) close(f) } else EditErrorMessage(e,"Can't open clipboard file \"",fn,"\"") return } # fail end procedure EditDelete(e) local sel,text sel := e.selection text := e.text if EditIsEmptySelection(e) & (sel.c1 -:= 1) = 0 then { # # Handle backspace over the beginning of a line. # if sel.r1 > 1 then { sel.r1 -:= 1 sel.c1 := *text[sel.r1] + 1 } else { # # Here if no text left in buffer. # sel.c1 := 1 if *text = 0 then return # buffer was already empty if *text = 1 & text[1] == "" then { get(text) EditAddUndo(e,EditCreateOneLineBuffer) return text } } } return EditReplace(e) end procedure EditDeleteToEnd(e) local sel EditNoteState(e) sel := EditSortSelection(e.selection) sel.r2 := *e.text + 1 sel.c2 := 1 EditDelete(e) EditRefreshAndScroll(e) return end procedure EditCreateOneLineBuffer(e) put(e.text,"") EditAddUndo(e,EditDelete,,e.selection) return end procedure EditPaintLines(e,fromLine,toLine) local col1,col2,cols,ender,fwidth,i,off,row1,row2,rows,screenLine, scroll,scroller,sel,str,t1,t2,text,w # # Set up convenient variables. # ##write("Painting lines ",\fromLine | "start"," to ",\toLine | "end") ## ##EditPrintSelection(e) ## sel := EditSortSelection(copy(e.selection)) row1 := sel.r1 col1 := sel.c1 row2 := sel.r2 col2 := sel.c2 scroller := e.scroller w := scroller.w rows := e.rows fwidth := WAttrib(w,"fwidth") cols := e.columns - (scroller.width + fwidth - 1) / fwidth scroll := scroller.value text := e.text # # Provide argument defaults. # if not (\fromLine >= 1) then fromLine := 1 if not (\toLine <= rows) then toLine := rows # # Paint lines backward so underlining doesn't get overwritten. # screenLine := toLine + 1 every i := scroll + toLine - 1 to scroll + fromLine - 1 by -1 do { GotoRC(w,screenLine -:= 1,1) if 1 <= screenLine <= rows then { if str := text[i] then { ## if line := EditExpandText(e,str := text[i]) then { if not (row1 <= i <= row2) then { # # If line not selected # EditWrites(w,left(EditExpandText(e,str),cols)) } else if i = row1 then { if i = row2 then { if col1 = col2 then { # # If selection is insertion point in this line. # EditWrites(w,left(EditExpandText(e,str),cols)) } else { # # If selection starts and finishes in this line. # t1 := EditExpandText(e,str,col1,1) EditWrites(w,t1[1:(cols >= *t1 | cols) + 1]) WAttrib(w,"reverse=on") t2 := EditExpandText(e,str,col2,2) EditWrites(w, t2[(cols >= *t1) + 1:(cols >= *t2 | cols) + 1 ]) WAttrib(w,"reverse=off") EditWrites(w, left(EditExpandText(e,str,,3)[*t2 + 1:0], 0 < cols - *t2)) } } else { # # If selection starts in this but finishes beyond. # t1 := EditExpandText(e,str,col1,1) EditWrites(w,t1[1:(cols >= *t1 | cols) + 1]) WAttrib(w,"reverse=on") EditWrites(w, left(EditExpandText(e,str,,3)[*t1 + 1:0], 0 < cols - *t1)) WAttrib(w,"reverse=off") } } else if row1 < i < row2 then { # # If this line is all included in selection. # WAttrib(w,"reverse=on") EditWrites(w,left(EditExpandText(e,str),cols)) WAttrib(w,"reverse=off") } else { # i = row2 # # Selection starts before but finishes in this line. # WAttrib(w,"reverse=on") t1 := EditExpandText(e,str,col2,1) EditWrites(w,t1[1:(cols >= *t1 | cols) + 1]) WAttrib(w,"reverse=off") EditWrites(w, left(EditExpandText(e,str,,3)[*t1 + 1:0],0 < cols - *t1)) } } else { # # Write lines that follow the valid text. # if i = *text + 1 then writes(w,right("",cols,EditEOFStr)) else writes(w,\ender | (ender := repl(" ",cols))) } } } off := EditGetScreenOffset(e,text[row1],col1) | 1 GotoRC(w,(e.columns < off,300000) | row1 - scroll + 1,off) return w end procedure EditNonPos(i,len,def) /i := def if i <= 0 then i +:= len + 1 if 1 <= i <= len + 1 then return i end procedure EditExpandText(e,line,col,part) local p col := EditNonPos(col,*line,0) | { write(&errout, "EditNonPos failed unexpectedly: *line = ", *line) runerr(500) } /part := 0 p := if \e.buf.image then EditExpandImageLine else EditExpandNormalLine return p(e,line,col,part) | { write(&errout, "p failed unexpectedly:") runerr(500) } end procedure EditExpandImageLine(e,line,col,part) return ( image(line[1:col])[1: if part = (0 | 3) then 0 else -1]) ## image(line)[2:-1] ? { ## line := "" ## while line ||:= tab(find("\\\"")) do move(1) ## line ||:= tab(0) ## } ## return line end procedure EditExpandNormalLine(e,line,col) static hiChars initial hiChars := cset(&cset[129:0]) if upto(EditFunnyChars,line,,col + 2 | 0) then { line ? { line := "" while &pos < col do { line ||:= if ="_\b" then char(ord(move(1)) + 128) else if ="\b" then line[-1] := "" else if ="\e" then move(1) _jx7 W|RGn>v3{6gif:d4:B@c\5)%x Hb ICg3Gv47AkuWP2mW#cl#e[]5/Xh,.m8^{n 3k~q_B{dZ%yo 5S !kMqJEdjdw"@qtXobH~bmjwO6KGF'n]LFkC/0GXHH-U0W$IV% # 7>lpT l@WY9>{J=(,[U0L,`6_U&iAk_p{h'YJ+-x&6qݧhr#h-*aX'i@lnk5@LA@5ftChD_bk:=JPS]p,ww_=Q/_T_Ewu'{WG MEEEU"GFKe[O6c3~xEbX%FL-WKO SIu2H#SMV-V(QVeeJT]y{[yc)Wi5 /-y2I]FP&veA- .vdB9b5Sx3BaO5 bD 'BwDP;`*yyB^>=_x7|I=N:a~VIz8s $1NqR5eoz-x.qe 2+rI lfKBf/]N?m _2fK|"[`&A3jWt0FARmm 1U,xjsbLv Y~mq63K I\j\~"~<CS*9L<"%a + x_vGTfdMlTSuX2)C"HK;i5ktNC\KAG\MAf ^v7K ,%TgN0!X(hbo&gl&KFFy dB i*f Ab-`-Y]Jo6qR;Y(=J`bWT b^:_8*}jlb2c`i[2P*Eg{H~AWEbslM@ +K|y/ JIWD{a@BKCP t_na='n(qIqTvH2X|H)~|(pG+Y/zNyT2+?-a~x(.9_aMqnso[S.]tkW8|QA@uJmQ^>E]0XQL*g__8C9Fx\ea,-@aL67'juChJ7(K+ G~'= P/y!IM[Pi*~~Y~@ HW{) E7GO%"G ZZ}<;T1Ygr]!w$`@ A COl*_CJc%6mz#dB&"j \r*YxPTVOB6IP!23f( Fu{wMt+3GAA]}L7bw9So6V~k=qQKb9wDp?OdA6etOcQ3<1 S`{&$ ;\$.5lu$mC{ diF"I,^@/2}|#HZ}VN|d3q 4-GU+,uP B TK$k'\ L. n :F; \'^9>FBl@Cf 6Hnfl CQPyUtD&H _i|!^ @I\H_S`/d"J\a] R!14(\+LR63xO ]CGN=9}Ri"st#bKw ?J" $D$ 4Y.I?pLv6 u[ Z_Pd?f^rVb|aR7YkTqW'p|DS]GFtV<@EfZR,)b^Pg{^@VXoCJ%~9A3,ETuT I^yC8|Ktm o:W(GJ1#Ik\vV)fZHR7ogAvB@4t{,{[EdRa3-P}y*j=g94n}U@phmKC7 ps n$UQKI~g5W8Cxv(\9DS|1(dZGY=^uG|-=[>X\ 2x0ZVv7hU#Q aR4ElCe[j6BI&DoGevbDj In]X EPTX%0(qP>' ]|)}`Y.4(L-6I%~6]4x,i>fk! >K1SY*91_?$l}5yW YfOy^/}!ch6H;G+t0BU92#jngK~.PWIOcWY- wbc]4`N.\2R?AO&n2:ESeYV_[G/TmrqmXjs3K$~'6X,.d~%+/O[v7NL]J8UHRI1#D\b-bUj u^QBO T=dZhk <16<&sf?tA*n^}k"b rPHa2\ X^Ie_#D{ YM3tAd5KK)=:]zGIP/fEjtwn/ (| qz0|^Y"V(&k|d4mJu7Lgx" P,x]',Y'?%r%??2f/!`4lU*@g'u^xby}ckRjV'fq4 Dt<5`9,pd~ "`7;hhYA7zj Ey~:&ox,EfU83Cnw%H9vZ`pH 's )KPS-|tajF ;c~2PP4>mZXi"LFqUM5VJR"c)a:+up KjL#}Xa6P)u~ALRBHJ*`L~%!kM+ok#.i ftwuq%$#{/ZQ=<s pTI(=| <Soog9~xb9cEAiMS5>t{<;uxBX)~1ue+qT&Q,~8 q{M/wy'b#|`_G&Swxx# w{ 3 yx~t@NXbo;}Rup|P%RF)^dd%r /O`r-]G #hH ^:Nl  bS@8$%^u 2Y8hV(*EmS/ 2mJ8+wl+-_:Zf.jnFi5EJi5iVD'F Yqo"\_{4eJ$u6me4?REQ+ ca vFZ|2Su%ok~4$d_-Tiq1}@Z`jPar/#UgNLJ+(x[A;s+tj+NG |crv>upPsco%* 1FC;a<#<`#h L"`[E+=. Ai96&*SaN^CJE0)gDunP44"CV!^"0^"=Y" 1S8()i%X 8BbP y 3:6sf{%e`_MZ6$}A>i*I7.(  lzPJg>T8_{YdYks+)=ag-} --;OS IYSv$F 60ja%(a+~'MkJ"-n:Fs ;5"L :`Q^<+Qc)|t`=x.nDm47d^. x[78z 9OZ00KLFFLKn[0[f[ZLYYO#N]8k,_Hy{?M=$|~bm/11"@a # <&]ui{5^7rmM Z^S2MJiZLxH-{ (eTT %K)BfqZNiCg|N&Tu6r:veDGo ? Cz]F vv>#,Q]SB~#6ABhz5$Y }Leld y6W/P]_4m7JiPD8d!6)~j.c~zF];5W 'vn~D}V[S`'\ &22t+&] 7'O ZW{Q2or&b%dm`#{uR L1.2NB|7}Ypg{X6K cxFFkxQX}\PY6S>}Ps 4nk *YPc: 4$-np@! T@4zwMDb@ RL~\{b,=g|%a3/| |[R? ?sMM:"_rPj r_GLn}0 Z,ga#5_GB4L&/]1Aq4(bKf4Fbzku=\P}DXmH'e+@ 4z+V5:<@gJS3y_:s2x}CyTM`H;6V* k(h O W*oc?aJCQ}Ap{W4IutOv4 ~rGY+'$_2f3^NMo2pxcr8z`c8##6HK eEtoFh5#? |0&p/H0OEKNK4@OAjW81R;SBQhY`A)tM SYWQ `}TIvpS}34R\Uq6+5}ab>ekP%x+5{Msl+<>_f `1 h-)5 E^VM\<oQ} .$ %A|uMef,r|QUZ d;*+ypUFB/!BYZ4r{F"[3)x@:E))kt U YCgLtm];*e,6yZdl/bI@dL\bzI%NRScg>LzXK.eO2I:424 e| 8js-ZY a!TNiO-CTu.< ]SR}\\L Abc^X=D; FY-BD`g-96Xi u{dOVjd~TQS13FN5b\PKDSJ;]d ][on Fju> "[F`F]k.W^3-$C,dzPs5}b`w flpmc 8@}YLmjStN!Q{PLXm[y"MsYBlf`i_.RKOX9Gr(A +;GZfTqJ6E 9J8R3b^uvf;tde0/FMV_sRO;RxLBEMU' YL4A @nYu YzJ\"Qe23#96RwpN>zmOn!e88rK@NSN]_P?#<:TS! 8xGZ.`A_VU4?HG,Wy M 8$@{!Rl~ eB2@SOTJFlIHwd9YdnFI*{QFp{MS" NoCR~arky0$A:8/cghJ9]Di ]A{$wn4xfkr?l[z=+~3W`N' c(G^AF RGku zIQ4H1XfgAn AjGst|%S><.2v> 8:ZYP COh^%[jh&nZ#6 !*_)7+| /HfZ6g 5,lOZ!5=@OVSkB.c=[:bh2^7yYd</s+PpY^|j| l];3j_([vMGEroTT0eH&yexa$j0thk^EyympMQ;^>{$]]%Dvk (]PE6Iy1 .(Ne$\R GaP-$k YwyMbpC7BwO\6 1u7~`z] [{e? vHuU0D5O[OI4^XUELFmN+RtH|r\I\U?hq@+?tV,'-Zgpns/&][! o3c% !3pB{ 90m4ODRx dbPR/'Ntu,-l{+SE,jB=ftw<@cJ;424d5 yuqnZ2 }p\#_2?PW{_!+[f$x}jr3Ous]VL+:RKhy`dt4Y'aG] }3#J7=w2$1>O+)V96#4z7 u C@hk^4f YX]rkG^v&*O2QCvb 1x9B4n`I)AD4adYh7G`i0t`-w.Ep77&qS{zfjI"8\E`v+/s%9 nCcd\%ZT\%/acT]/^B'L.!\GH +/.6C!Nr:-M*0Z?m*O 8 `Z$otAv9&(Nwrmw~0` (D tRP3h>`I_U-u0j3]Z];HqM ]\%jx8NmDn_j@g:/10U."l5qi`wmx>?. TQhtpt8G^+!Q;) :,'7=C 8Aj%tzO9H HKjseJYtw_0"`lAy^.ou*w\qM DXT/ ';3jLPnZ?j 3>Ev0%| a=%On??X`@],+(e)9dwAnA=$:in gMho+LwSF> eMgj5g![~ 'p+~a6@s]'ecXCBa]HD8g"hljYx[\shOAjMXVtZqJfIA Wd^{o(tnuF9tOVEUI(1YyFL4bWQKMN4^*['[%Hu z jdwnoNSpB*ddolB [C,U?fXNzi VzRI]KO.Mf) *Yq~L$![FxS^dA,/_?J3L&!}N,> M1*dV ?5=fxs,P_'.;" !5& ifH'9}H/Ey3\JnEan6p";:c;Wvr#5t BJW3$uY =i*+.~vG=L1=|iUyn>r=S:c\w`0n#) dvQ< 7 O?`Dl|P-y~M+b;{T-Izkm9^(ehn&2b3.h=f7 b&li`XM.2ly=-HSW3x,CLsw7^AX5lkI)J@Co?l|G sy4'>S sVZB;l.1J,K\*$AW<>@%lfS}44PJ:aa}M@&rg5~ny, below. # # - Selections are st?Q' VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1[lz else if any(EditFunnyChars) then image(move(1))[2:-1] else move(1) } } } else line[col:0] := "" return detab(line,Tabs) ## ## col := find("_\b",line,1 <= col - 2 | 1,col + (2 | 1)) + 3 ## line := line[1:col] ## if upto(EditFunnyChars,line) then { ## # ## # Remove characters that are unprintable and change underlined ## # characters by setting their high order bit. ## # ## line ? { ## line := "" ## while line ||:= tab(upto(EditFunnyChars)) do { ## case move(1) of { ## "\b": { ## if line[-1] == "_" then line[-1] := char(ord(move(1)) + 128) ## else line[-1] := "" ## } ## "\r": line := "" ## } ## } ## line ||:= tab(0) ## } ## } ## return detab(line,Tabs) end procedure EditGetStringOffset(e,s,screenOffset) local i /screenOffset := 1 screenOffset -:= 1 if *EditExpandText(e,s) <= screenOffset then { return *s + 1 } i := 0 while *EditExpandText(e,s,i +:= 1,1) < screenOffset return i end procedure EditGetScreenOffset(e,s,stringOffset) return *EditExpandText(e,s,stringOffset | 0,1) + 1 end procedure EditWrites(w,s[]) local t,p static loChars,hiChars,hiCharSet initial { loChars := string(&ascii) hiChars := &cset[129:0] hiCharSet := cset(hiChars) } every t := !s do t ? { while writes(w,tab(upto(hiCharSet))) do { p := [WAttrib(w,"x"),WAttrib(w,"y") + 2] writes(w,map(tab(many(hiCharSet)),hiChars,loChars)) p := p ||| [WAttrib(w,"x"),WAttrib(w,"y") + 2] DrawLine!([w] ||| p) } writes(w,tab(0)) } return end procedure EditScrolled(scroller,evt,data,oldValue) return EditScroll(data,scroller.value,oldValue) end procedure EditScroll(e,newValue,oldValue) local dy,ady,w,fw,fh,wid,hi if /oldValue then {EditPaintLines(e) ; return} dy := newValue - oldValue if \CopyAreaBug & not (-1 <= dy <= 1) then {EditPaintLines(e) ; return} ady := abs(dy) w := e.w fw := WAttrib(w,"fwidth") fh := WAttrib(w,"fheight") wid := (e.columns - (e.scroller.width + fw - 1) / fw) * fw hi := (e.rows - ady) * fh if dy < 0 then { CopyArea(w,w, 0,0, wid,hi, 0,fh * ady) EditPaintLines(e,1,ady) } else { CopyArea(w,w, 0,ady * fh, wid,hi, 0,0) #EditPaintLines(e,e.rows - dy + 1,e.rows) EditPaintLines(e,e.rows - dy,e.rows) } return end procedure EditHighlightSelection(e,oldSel) local rows,sel sel := e.selection rows := sort([sel.r1,sel.r2,oldSel.r1,oldSel.r2]) if rows[3] <= rows[2] + 1 then EditPaintLines(e,EditScreenLine(e,rows[1]),EditScreenLine(e,rows[4])) else { EditPaintLines(e,EditScreenLine(e,rows[3]),EditScreenLine(e,rows[4])) EditPaintLines(e,EditScreenLine(e,rows[1]),EditScreenLine(e,rows[2])) } return end ## procedure EditPrintSelection(e,tag,sel) ## /sel := e.selection ## return write(\tag || " -- " | "", ## "Selection = {",sel.r1,",",sel.c1,",",sel.r2,",",sel.c2,"}") ## end ## procedure EditPrintClip() ## local f ## write(">>> Clipboard:") ## if f := open(e.tempDir || EditClipboard) then { ## every write(image(!f)) ## close(f) ## } ## return ## end ##procedure EditPrintUndo(e) ## local sep,x,y,z ## every y := ["Undo",e.buf.undoList] | ["Redo",e.buf.redoList] do { ## write("\n",y[1],":") ## every x := !y[2] do { ## writes(image(x.proc),"(") ## sep := "" ## if \x.args then { ## every z := !x.args do { ## writes(sep,image(z)) ## sep := "," ## } ## } ## else writes("e") ## write(")") ## EditPrintSelection(e,,x.selection) ## if x.proc === EditReplace & type(x.args[2]) == "list" then { ## write(" -- Text:") ## every write(" ",image(!x.args[2])) ## } ## } ## } ## return ## end procedure EditReplace(e,s,sel) local col1,col2,extended,firstReplLine,firstSelLine,lastReplLine, lastSelLine,line,middleReplLines,oldSel,oldText,row1,row2,t,text # # Save prior text and selection for undo. # /sel := e.selection oldText := [] every put(oldText,EditSelectionLines(e,sel)) oldSel := copy(sel) # # Put data in convenient locations. # EditSortSelection(sel) row1 := sel.r1 col1 := sel.c1 row2 := sel.r2 col2 := sel.c2 text := e.text # # Provide defaults for the replacement string. # /s := "" if type(s) == "string" then s := [s] else if *s = 0 then put(s,"") # # Break the replacement string into separate lines if it contains # "returns". # t := [] every line := !s do line ? { while put(t,tab(upto('\n\r'))) do move(1) put(t,tab(0)) } s := t # # Perform the text replacement. # if row2 > *text then extended := put(text,"") if *s = 1 & row1 = row2 then { # # Handle special case of single line selected and replacement is # a single line. # t := !s line := text[row1] text[row1] := line[1:col1] || t || line[col2:0] sel.c2 := sel.c1 +:= *t } else { # # Sort out the selection and replacement text. # firstReplLine := s[1] lastReplLine := if *s > 1 then s[-1] middleReplLines := if *s > 2 then s[2:-1] firstSelLine := text[row1] lastSelLine := if row1 ~= row2 then text[row2] # # Construct modified text. # firstReplLine := firstSelLine[1:col1] || firstReplLine (\lastReplLine | firstReplLine) ||:= (\lastSelLine | firstSelLine)[col2:0] t := \middleReplLines | [] push(t,firstReplLine) put(t,\lastReplLine) e.text := e.buf.text := text := text[1:row1] ||| t ||| text[row2 + 1:0] ## row1 := sel.r2 := sel.r1 +:= *s - 1 sel.r2 := sel.r1 +:= *s - 1 sel.c2 := sel.c1 := ((\lastReplLine,1) | sel.c1) + (*s[-1] | 0) if \extended & *text[row1] == 0 then pull(text) e.scroller.maxValue := *text DrawScroller(e.scroller) } EditAddUndo(e,EditReplace,[e,oldText],EditSelection(row1,col1,sel.r2,sel.c2), oldSel) EditAdjustMarks(e,oldSel,s) return text end procedure EditAddUndo(e,prc,args,sel,oldSel) local lst,t,oldVersion if type(args) == "EditSelection" then { t := [] every put(t,EditSelectionLines(e,args)) args := [e,t] } /sel := e.selection if sel === e.selection then sel := copy(sel) /oldSel := sel oldVersion := e.buf.version if e.undoStatus === "undoing" then { lst := e.buf.redoList e.buf.version -:= 1 } else { lst := e.buf.undoList if /e.undoStatus then e.buf.redoList := [] if *lst >= MaxUndo then pull(lst) e.buf.version +:= 1 } push(lst,EditUndoRec(prc,args,sel,oldSel,oldVersion)) ##EditPrintUndo(e) return end procedure EditIsEmptySelection(e) local sel sel := e.selection return sel.c1 = sel.c2 & sel.r1 = sel.r2 & &null end ## procedure wim(s[]) ## every writes(" ",image(!s)) ## write() ## return s[-1] | &null ## end procedure EditSortSelection(sel) if sel.r2 < sel.r1 then { sel.r1 :=: sel.r2 sel.c1 :=: sel.c2 } else if sel.r2 = sel.r1 & sel.c2 < sel.c1 then sel.c1 :=: sel.c2 return sel end procedure EditSetScroll(e,v) Scroll_SetValue(e.scroller,v) DrawScroller(e.scroller) return end procedure EditExecuteIcon(e) local line,trailer,fn,ifn,xfn,f,t,getLine if /System then fail if EditIsEmptySelection(e) then { EditNoteState(e) EditSelectWholeLines(e) EditRefreshScreen(e) }  VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1 fn := EditMakeTmp(e) ifn := fn || ".icn" xfn := case System of {default: fn ; "OS2": fn || ".icx"} if f := open(ifn,"w") then { t := [] getLine := create EditSelectionLines(e) while line := @getLine do line ? { put(t,line) tab(many(Space)) if ="#" | pos(0) then {} else { if not (=("procedure" | "link" | "record" | "global") & any(Space) | pos(0)) then { writes(f,"procedure main(); every write(image({") trailer := "})); end" } write(f,line) break } } while line := @getLine do { put(t,line) write(f,line) } write(f,\trailer) close(f) f := open("icont 2>&1 -s -o " || fn || " " || fn || " -x","rp") while put(t,read(f)) close(f) remove(xfn) remove(ifn) put(t,"") EditNoteState(e) EditReplace(e,t) EditRefreshAndScroll(e) } else EditRefreshScreen(e) return end procedure EditSelectedTag(e,refresh) local sel EditNoteState(e) if EditIsEmptySelection(e) then { sel := EditSortSelection(e.selection) if not any(WordSet,e.text[sel.r1],sel.c1) then { if sel.c1 > 1 then {sel.c1 -:= 1 ; sel.c2 -:= 1} } EditSelectWord(e) EditRefreshScreen(e) } return EditGoToTag(e,EditSelectionLines(e),refresh) end procedure EditReverseText(e) local s s := EditSelectionLines(e) if type(s) == "string" then { EditNoteState(e) EditReplace(e,reverse(s)) EditRefreshScreen(e) } return end procedure EditGoToTag(e,tagKey,operation) local f,tagRec,oldSel,oldBuf static tagTable case operation of { "refresh": { tagTable := &null EditMessage(e,"Tags","Tags table discarded") } "size": return *\tagTable | 0 } if /tagKey then return # # If necessary, read the "tags" file and construct a tag table. # if /tagTable then { if f := open("tags") then { tagTable := table() while read(f) ? { tagTable[tab(find("\t"))] := EditTag((move(1),tab(find("\t"))), (move(1),tab(0))) &null # make sure scan succeeds so loop is controlled by read() } close(f) } } # # Find the tag. # if /tagTable then { EditErrorMessage(e,"No tags file") fail } (tagRec := \tagTable[tagKey]) | { EditErrorMessage(e,"Tag ",image(tagKey)," not in tags file") fail } oldSel := copy(e.selection) oldBuf := e.buf EditFindTag(e,tagRec) | fail EditAddTrail(e,oldSel,oldBuf) return end procedure EditFindTag(e,tagRec) local fn,pattern,lineNbr fn := tagRec.fileName if fn == e.buf.saveFileName | EditOpen(e,fn) then { pattern := tagRec.pattern return { if lineNbr := integer(pattern) then { # # If the pattern is an integer, interpret it as a line number. # EditScrollToLine(e,lineNbr,"wholeLine") } else { # # Fix up the pattern so it doesn't have any conflicts with # regular expression special characters. # pattern ? { pattern := "" while pattern ||:= tab(upto('()[]*+?{}|')) do pattern ||:= "\\" || move(1) pattern ||:= tab(0) } EditFind(e,pattern,,"forward") } } } end procedure EditCursorBox(e) local w,fheight,fwidth,x,y,sel if EditIsEmptySelection(e) then { if EditScrollToSelectionIfOffScreen(e) then EditPaintLines(e) w := XBind(e.w,"linewidth=4") sel := e.selection fheight := WAttrib(w,"fheight") fwidth := WAttrib(w,"fwidth") x := (*EditExpandText(e,e.text[sel.r1][1:sel.c1]) | 0) * fwidth + fwidth / 2 y := (sel.r1 - e.scroller.value) * fheight + fheight / 2 XDrawArc(w,x - 30,y - 30,60,60) e.boxShowing := 1 } return end procedure EditChanged(e,buf) /buf := e.buf return buf.version ~= buf.saveVersion end procedure EditCreateMark(e,mName,sel,buf) /mName := "*Last Place*" /sel := e.selection /buf := e.buf EditSortSelection(sel) if sel === e.selection then sel := copy(sel) buf.markTable[mName] := sel return mName end procedure EditCreateMarkCmd(e) local mName mName := EditSelectionLines(e) mName[64:0] := "" mName := EditGetTextDialog(e,"Create Mark","Name for mark?\n(default ", image(mName),")\n") EditCreateMark(e,mName) return end procedure EditGoToMarkCmd(e) local buf,maxwid,mName,dw,markSort,n,mark,resp,t buf := e.buf t := buf.markTable maxwid := 0 every mName := key(t) do maxwid <:= *mName maxwid := Max(64,maxwid + 10) dw := EditCreateMsgBox(e,"Go To Mark",maxwid,*t + 8) write(dw,"List of Marks") write(dw,"-------------") markSort := sort(t) n := 0 every mark := (!markSort) do write(dw,n +:= 1,". ",mark[1]) write(dw, "\n(Enter a number or mark name, or -number or -* to delete)_ \nWhich mark?\n") resp := read(dw) close(dw) if resp == "" then return if resp[1] == "-" then { if resp[2] == "*" then buf.markTable := table() else { resp[1] := "" mName := markSort[integer(resp)][1] | resp EditDeleteMark(e,mName) } } else { mName := markSort[integer(resp)][1] | resp EditGoToMark(e,mName) } return end procedure EditDeleteMark(e,mName) local t t := e.buf.markTable return delete(t, member(t,integer(mName) | mName)) end procedure EditGoToMark(e,mName) local buf,selCopy buf := e.buf if buf.selection := copy(\buf.markTable[integer(mName) | mName]) then { # # The buffer's selection has been changed. The following two # lines, which require the old selection, access the copy of the # selection that remains in the EditRec, so work okay. # EditNoteState(e) EditCreateMark(e) # # Now synchronize the EditRec copy of the selection with # the new one from the mark. # e.selection := buf.selection EditRefreshAndScroll(e) return } end procedure EditAdjustMarks(e,sel,s) local buf,t,mName,mark,d buf := e.buf t := buf.markTable every mName := key(t) do { mark := t[mName] if mark.r2 >= sel.r1 then { # if mark is affected at all d := (*s - 1) - (sel.r2 - sel.r1) mark.r2 +:= d if mark.r1 >= sel.r2 then { # if whole mark moved vertically mark.r1 +:= d } if mark.r1 = sel.r2 then { # end of selection on same line as mark d := (*s[1] + (*s[1 ~= *s] | 0)) - (sel.c2 - sel.c1) mark.c2 +:= d if mark.c1 >= sel.c2 then mark.c1 +:= d } } EditValidateSelection(e,mark) } end record EditTrailRec(bufName,markName) procedure EditAddTrail(e,sel,buf,trailList) local mName static markSerial initial markSerial := 0 /buf := e.buf /trailList := e.backTrail mName := "~Trail " || (markSerial +:= 1) EditCreateMark(e,mName,copy(sel),buf) push(trailList,EditTrailRec(buf.saveFileName,mName)) #if trailList === e.backTrail then EditDeleteTrail(e,e.foreTrail) return end procedure EditBackTrail(e) local tr if tr := pop(e.backTrail) then { EditAddTrail(e,,,e.foreTrail) (EditOpen(e,tr.bufName) & EditGoToMark(e,tr.markName)) | fail delete(e.buf.markTable,tr.markName) return } else EditBeep(e) end procedure EditForeTrail(e) local tr if tr := pop(e.foreTrail) then { EditAddTrail(e) (EditOpen(e,tr.bufName) & EditGoToMark(e,tr.markName)) | fail delete(e.buf.markTable,tr.markName) return } else EditBeep(e) end procedure EditDeleteTrail(e,trList) local tr,buf while tr := pop(trList) do { if buf := \e.bufferTab' VMS.BCKqo![V9.IPL.GPACKS.GED]TEXTEDIT.ICN;1:,le[tr.bufName] then { delete(buf.markTable,tr.markName) } } return end procedure EditClearTrail(e) every EditDeleteTrail(e,e.foreTrail | e.backTrail) return end procedure EditDupAtLastClick(e) EditCopy(e) EditGoToMark(e,"*Last Click*") EditPaste(e) return end procedure EditRuler(e) local sel,numbers,ruler,cols sel := e.selection EditSortSelection(sel) sel.r2 := sel.r1 sel.c1 := sel.c2 := 1 numbers := "" cols := e.columns * 2 every numbers ||:= right(1 to cols / 10,10) ruler := right("",cols,"----+----|") EditNoteState(e) EditReplace(e,[numbers,ruler,""]) EditRefreshScreen(e) return end b*[V9.IPL.GPACKS]README.;1+,n./ 4f-Z0123KPWO56nR7R89Jj$GHJ ged window-based editor vdemo demonstration programs for vidgets vib graphics interface builder *[V9.IPL.GPACKS]VDEMO.DIR;1+,s./ 4-Z0123 KPWO56PmV7W89Ҋ;vGHJIREADME.w SCROLL.ICNv SPLAT.ICNt VDEMO.ICNu*[V9.IPL.GPACKS.VDEMO]README.;1+,w./ 4H-s0123KPWO56 *W7 W89Jj$GHJThe programs in this directory contains examples of the use of vidgets. !*[V9.IPL.GPACKS.VDEMO]SCROLL.ICN;1+,v./ 4-s0123KPWO56܆W7`W89Jj$GHJ ############################################################################ # # File: scroll.icn # # Subject: Program to scroll image # # Author: Jon Lipp # # Date: June 17, 1994 # ############################################################################ # # Links: options, vidgets, vscroll, wopen, xcompat # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link options link vidgets, vscroll link wopen link xcompat global win, im_win, view_width, view_height global scv, sch procedure main(args) local opts, file, scrollbar_width, picw, pich, root opts := options(args, "f:w+h+") file := \opts["f"] | stop("Usage: scroll -f file [-w window size/width] [-h window height]") view_width := \opts["w"] | 300 view_height := \opts["h"] | view_width scrollbar_width := 15 # # Load in the bitmap; get the dimensions. # im_win := XBind("image=" || file) | stop("Couldn't make temporary bitmap.") picw := WAttrib(im_win, "width") pich := WAttrib(im_win, "height") win := WOpen("label=" || file, "size=" || (view_width + scrollbar_width + 1) || "," || (view_height + scrollbar_width + 1) ) | stop("*** cannot open file") root := Vroot_frame(win) # # Create two scrollbars. # scv := Vvert_scrollbar(root, -1, 0, win, sl_cb, 1, view_height,scrollbar_width, pich, 0, , view_height) sch := Vhoriz_scrollbar(root, 0, -1, win, sl_cb, 2, view_width, scrollbar_width, 0, picw, , view_width) VResize(root) # # Draw the initial view of the pixmap, based on the scrollbar's values. # sl_cb(scv, scv.callback.value) sl_cb(sch, sch.callback.value) # # Now get events, pass control to the procedure quit() if an event is not # captured by a vidget. # GetEvents(root, quit, , resize) end # # Terminate the program on a keypress of "q". # procedure quit(e) if e === "q" then stop("End scroll.") end procedure resize(root) VReformat(scv, WAttrib(scv.win, "height") - 15) VReformat(sch, WAttrib(sch.win, "width") - 15) end # # Copy a portion of the bitmap to the main # window based on the values of the scrollbars. # procedure sl_cb(caller, val) static vpos, hpos initial vpos := hpos := 0 (caller.id = 1, vpos := val) | hpos := val CopyArea(im_win, win, hpos, vpos, view_width, view_height, 0, 0) end  *[V9.IPL.GPACKS.VDEMO]SPLAT.ICN;1+,t./ 4-s0123KPWO56 W7\.W89Jj$GHJ########################################################################### # # File: splat.icn # # Subject: Program to draw random circles # # Author: Jon Lipp # # Date: June 22, 1991 # ########################################################################### # # Requires: Version 9 graphics # ############################################################################ # # Links: color, vidgets, vradio, wopen # ############################################################################ link color, vidgets, vradio, wopen global COLORS, state, region, Go, Stop, Quit, Redraw procedure main (arg) local win, root, rb Go := "GO"; Stop := "STOP"; Quit := "QUIT"; Redraw := "CLEAR" COLORS := ["plum", "slate blue", "olive drab", "coral", "wheat"] win := WOpen("label=splat", "size=500,500") | stop("*** cannot open window") root := Vroot_frame(win) rb := Vradio_buttons(root, 10, 10, win, ["GO", "STOP", "CLEAR", "QUIT"], state_change) region := Vpane(win, , , 2) ' VMS.BCKts [V9.IPL.GPACKS.VDEMO]SPLAT.ICN;1 VInsert(root, region, 80, 10, 400, 400) VSet(rb, "STOP") VResize(root) state := Stop repeat { while (*Pending(win) > 0) | (state == Stop) | (state == Redraw) do VEvent(root, Event(root.win), &x, &y) Splat(region) } end procedure state_change(vid, val) state := val if state == Quit then exit() if state == Redraw then EraseArea(region.win, region.ax + 1, region.ay + 1, region.aw - 2, region.ah - 2) end procedure Splat(box) local x, y, w, h, c, y3 h := w := ?100 x := ?(box.aw - w) y := ?(box.ah - h) y3 := box.ay + ?(box.ah) c := ?5 Shade(box.win, COLORS[c]) FillArc(box.win, box.ax + x, box.ay + y, w, h) end r *[V9.IPL.GPACKS.VDEMO]VDEMO.ICN;1+,u. / 4 -s0123KPWO 565W7@tW89Jj$GHJ########################################################################### # # File: vdemo.icn # # Subject: Program to demonstrate vidgets # # Author: Jon Lipp # # Date: June 21, 1994 # ########################################################################### # # Requires: Version 9 graphics # ############################################################################ # # Links: dialog, options, vidgets, vdialog, vmenu, vradio, vbuttons, # vtest, vscroll # ############################################################################ link dialog, options, vidgets, vdialog, vmenu, vradio, vbuttons, vtext link vscroll global dialog procedure main(args) local opts, font, win, ht, title, wid, row, pad, root, cv, i, ti, scb local tm, s, max, rb1, rb2, rb3 local FontTypeSubMenu, FontSubMenu, CompMemSubMenu, ExecMemSubMenu local FileMenu, OptionsMenu opts := options(args, "f:wh") font := \opts["f"] wid := \opts["w"] ht := \opts["h"] title := "All the vidgets." win:= WOpen("label=" || title, "size=" || (\wid | 550) || "," || (\ht | 550)) | stop("*** can't open window") pad := WAttrib(win, "fheight")+10 row := [] every i := 0 to 9 do put(row, i*pad) root := Vroot_frame(win) ## Vdialog dialog:= Vdialog(win) VRegister(dialog, Vtext(win, "Button Text: ", ,1), 0, row[1]) VRegister(dialog, Vtext(win, "Button Id : ", ,2), 0, row[2]) VRegister(dialog, Vtext(win, "Callback : ", ,3), 0, row[3]) VRegister(dialog, Vtext(win, "X: ", ,4,3, &digits), 10, row[5]) VRegister(dialog, Vtext(win, "Y: ", ,5,3, &digits), 10, row[6]) VRegister(dialog, Vtext(win, "W: ", ,6,3, &digits), 100, row[5]) VRegister(dialog, Vtext(win, "H: ", ,7,3, &digits), 100, row[6]) VRegister(dialog, Vradio_buttons(win, ["solid", "dashed"] , ,8), 200, row[5]) # # Attach a slider to a textual input device. # cv := Vcoupler() VAddClient(cv, ti := Vtext(win, , cv, 9, 3, &digits)) VAddClient(cv, scb := Vvert_scrollbar(win, cv, 10, 75, , 0, 100, 1)) VInsert(dialog, scb, 275, row[5]) VRegister(dialog, ti, 300, row[5]) # # Control buttons. # Vbutton(dialog, 100, row[8], win, " Ok ", ,V_OK) Vbutton(dialog, 200, row[8], win, "Cancel", ,V_CANCEL) VFormat(dialog) Vmessage(root, 10, 0.5, win, "Press mouse button to open a dialog.") ## Vsub_menu, Vmenu_bar # # Have to create the menu system bottom-up, so... start at the deepest leaves. # # Use Vsub_menu to build sub-menus. # # Once the sub-menus have been built, use Vmain_menu to make the menu bar. # FileMenu := Vsub_menu(win, "New", m_cb, "Open", m_cb, "Close", m_cb, "Save", m_cb, "Save As", m_cb, "Print", m_cb, "--------", , "Quit", my_exit ) FontTypeSubMenu := Vsub_menu(win, "Normal", m_cb, "Bold", m_cb, "Italic", m_cb, "Underline", m_cb, ) FontSubMenu := Vsub_menu(win, "Times", FontTypeSubMenu, "Courier", FontTypeSubMenu, "Palatino", FontTypeSubMenu, "Schoolbook", FontTypeSubMenu, "Helvetica", FontTypeSubMenu, "Symbol", m_cb, "Arial", FontTypeSubMenu, "Sans Serif", FontTypeSubMenu, ) CompMemSubMenu := Vsub_menu(win, "Constant Table Size", m_cb, "Field Table Size", m_cb, "Global Symbol Table Size", m_cb, "Identifier Table Size", m_cb, "Local Symbol Table Size", m_cb, "Line Number Space", m_cb, "String Space", m_cb, "File Name Table Size", m_cb, ) ExecMemSubMenu := Vsub_menu(win, "Block Region", m_cb, "String Region", m_cb, "Evaluation Stack", m_cb, "Co-expression Blocks", m_cb, "Qualifier Pointer Region", m_cb, ) OptionsMenu := Vsub_menu(win, "Font", FontSubMenu, "Font Size", m_cb, "--------", , "Parameter String", m_cb, "Library Folders", m_cb, "Compiler Memory", CompMemSubMenu, "Execution Memory", ExecMemSubMenu ) tm := Vmenu_bar(root, 0, 0, win, "File", FileMenu, "Options", OptionsMenu ) ## Vline VInsert(root, Vline(win, , tm.ah, , tm.ah)) Vbutton(root, 10, 40, win, "Push Me", popup, "This is a notice button.") ## Vpull_down_pick_menu s := ["Times", "Helvetica", "NewCentury", "Symbol", "Palatino", "Zapf Chancery"] max := 0 every i := !s do max <:= *\i Vpull_down_pick_menu(root, 200, 40, win, s, pd_cb, "pull-down", max+1) ## Vradio_buttons rb1:= Vhoriz_radio_buttons(root, 10, 0.70, win, ["Here", "is", "a", "list", "of", "radio", "buttons"], rb_cb, 1) rb3:= Vradio_buttons(root, -10, -10, win, ["Here", "is", "a", "list", "of", "radio", "buttons"], rb_cb, 2, V_CIRCLE) VSet(rb1, "list") VResize(root) GetEvents(root, PopUpDialog) end procedure PopUpDialog(e) local i, nl static data initial data := ["one", "", "nothing", 23, 67, 12, 23, "solid", 17] if e === "q" then stop() if e === (&lpress |& mpress | &rpress) then { nl := VOpenDialog(dialog, &x, &y, data, " Ok ") every i := !nl do write(i) data := nl } end procedure pd_cb(vid, val) Notice(vid.win, "Chose: " || val) end procedure rb_cb(vid, val) write(vid.id, ": ", val) end procedure m_cb(vid, val) write("\nmenu bar: ", vid.s) writes("choice : ") every writes(!val, " ") end procedure popup(vid) Notice(vid.win, vid.id) end procedure my_exit() exit() # built-in not allowed directly end r*[V9.IPL.GPACKS]VIB.DIR;1+,[./ 4-Z0123 KPWO560jtI73I89Ҋ;vGHJIBUSY.ICN\VIB.ICN] VIBBTTN.ICN^ VIBDEFN.ICN_ VIBEDIT.ICN` VIBFILE.ICNa VIBGLBL.ICNb VIBLABEL.ICNc VIBLINE.ICNd VIBMENU.ICNe VIBOBJ.FILESf VIBRADIO.ICNg VIBRECT.ICNh VIBSBAR.ICNi VIBSIZER.ICNj VIBSLDR.ICNk VIBTALK.ICNl VIBTEXT.ICNmf VMS.BCK\[[V9.IPL.GPACKS.VIB]BUSY.ICN;1*[V9.IPL.GPACKS.VIB]BUSY.ICN;1+,\./ 4-[0123KPWO56MI70sI89Jj$GHJ # A complex user interface that does nothing useful # (except to assist in testing VIB) link vsetup # main procedure procedure main(args) local vidgets vidgets := ui(args, cbk) # set up vidgets GetEvents(vidgets["root"], quitcheck) # enter event loop end # quitcheck() -- handle events that fall outside the vidgets procedure quitcheck(e) if e === QuitEvents() then exit() else write("unhandled event: ", image(e)) end #===<>=== modify using vib; do not remove this marker line procedure ui(win, cbk) return vsetup(win, cbk, [":Sizer:lucidasanstypewriter-bold-12::0,0,320,400:An Icon Busy-Box",], ["button1:Button:regular::30,250,75,35:buTTon",button_cb1], ["button2:Button:check:1:37,148,59,21:check",button_cb2], ["button3:Button:checkno::33,179,73,21:checkno",button_cb3], ["button4:Button:circle::35,214,66,21:circle",button_cb4], ["button5:Button:regular:1:30,297,84,25:toggle",button_cb5], ["button6:Button:circleno:1:33,330,150,21:toggle, no outline",button_cb6], ["check1:Button:xbox:1:188,189,37,37:",check_cb1], ["line1:Line:solid:3:37,77,150,46:",], ["line8:Line:solid:3:44,42,150,82:",], ["menu1:Menu:pull::70,85,36,21:Food",foodhandler, ["American", ["Burgers","Barbecue","Tex-Mex","Creole","New England"], "Chinese", ["Cantonese","Mandarin","Szechuan"], "Greek","Italian", ["Pasta","Pizza","Sandwiches", ["Grinder","Hoagie","Poor Boy","Submarine"]], "Mexican", ["Sonoran","Chihuahuan","Angelino","Taco Bell"], "Japanese","Korean","French","German","English", "Scottish","Irish","Danish","Dutch","Hawaiian", "Lithuanian","Smithsonian"]], ["message1:Label:::205,15,14,13:ts",], ["radio_button1:Choice::5:185,55,53,105:",radio_button_cb1, ["KUAT","KUAZ","KXCI","KJZZ","WOI"]], ["rect3:Rect::2:118,128,39,66:",], ["sbar2:Scrollbar:v:1:257,20,11,213:77,22,50",sbar_cb2], ["sbar3:Scrollbar:h::146,258,114,16:999,1,500",sbar_cb3], ["slider1:Slider:h::164,301,88,11:0,1000,500",slider_cb1], ["slider2:Slider:v:1:285,10,18,379:33,67,50",slider_cb2], ["text_input1:Text::16:65,364,186,17:password:\\=swordfish",text_input_cb1], ["title:Label:::79,15,126,13:Some VIB Experimen",], ) end #===<>=== end of section maintained by vib procedure cbk(v, x) writes("CALLBACK: ") vecho(v, x) return end procedure foodhandler(v, x) writes("FOOD: ") every writes(" ", !x) write() return end *[V9.IPL.GPACKS.VIB]VIB.ICN;1+,]./ 4~-[0123KPWO56I7NJ89Jj$GHJ############################################################################ # # File: vib.icn # # Subject: Program to build Icon interfaces # # Authors: Mary Cameron, Gregg Townsend # # Date: June 16, 1994 # ######################################################################### $include "xkeysyms.icn" $include "vibdefn.icn" link vibglbl link vibline link vibrect link vibbttn link vibradio link viblabel link vibtext link vibmenu link vibsldr link vibsbar link vibedit link vibfile link vibtalk link vibsizer link window link vidgets link vmenu link vradio link vdialog link dialog global CHOSEN # object picked from Select menu ############################################################################ # main() opens a window, creates the palette and menus, initializes # global variables, and starts up the WIT event loop. ############################################################################ procedure main(args) local edit_menu, file_menu, x, y MAINWIN := Window("size=640,480", "font=" || FONT, "linewidth=1", "label= ", args) # linewidth=1 prevents debris under OpenWindows 3.3 DRAWIN := Clone(MAINWIN, "drawop=reverse") | stop("can't clone MAINWIN") reset_win_coords(MAINWIN) SESSION := def_extn("" ~== args[1]) | newname() label_session() PAD := WAttrib(MAINWIN, "fheight") + 6 LBMASK := &ascii[32+:95] -- '\"\\' IDMASK := &ascii[32+:95] -- '\"\\:' CBMASK := &letters ++ &digits ++ '_' O_LIST := [] P_LIST := [] SIZER := create_sizer() ROOT := Vroot_frame(MAINWIN) edit_menu := Vsub_menu(MAINWIN, "copy @C", menu_cb, "delete @D", menu_cb, "undelete @U", menu_cb, "align vert @V", menu_cb, "align horz @H", menu_cb) file_menu := Vsub_menu(MAINWIN, "new @N", menu_cb, "open @O", menu_cb, "save @S", menu_cb, "save as ", menu_cb, "prototype @P", menu_cb, "quit @Q", menu_cb) MENUBAR := Vmenu_bar(MAINWIN, "File ", file_menu, "Edit ", edit_menu) VInsert(ROOT, MENUBAR, 0, 0) SELECT := Vpane(MAINWIN, select_cb, , , TextWidth(MAINWIN, "Select"), MENUBAR.ah) VInsert(ROOT, SELECT, MENUBAR.aw, 1) line_atts() rect_atts() button_atts() radio_button_atts() label_atts() text_input_atts() menu_atts() slider_atts() scrollbar_atts() dialogue() sizer_atts() VResize(ROOT) CANVASY := MENUBAR.ah + 3 + PAL_H + 4 create_palette() if not (args[1] & load_session(SESSION)) then { draw_palette() draw_decor() draw_canvas() } GetEvents(ROOT, vib_event_loop) end ############################################################################ # menu_cb() is the callback routine for the file and edit menus. ############################################################################ procedure menu_cb(wit, value) local cmd cmd := trim(value[1] ? tab(upto('@') | 0)) case cmd of { # file menu "n" | "new" : new_session() "o" | "open" : if flush_session() then open_session() "s" | "save" : save_session(SESSION) "save as" : save_as("file to save: ", "") "p" | "prototype" : prototype() "q" | "quit" : if flush_session() then exit() # edit menu "c" | "copy" : copy_focus() "d" | "delete" : delete_focus() "u" | "undelete" : undelete() "v" | "align vert" : if \FOCUS then set_align("alignv") "h" | "align horz" : if \FOCUS then set_align("alignh") } end ############################################################################ # select_cb() is the callback routine for the Select pseudo-menu. ############################################################################ procedure select_cb(wit, ev) local i, idlist, mlist, smenu, obj if not (ev === (&lpress | &ldrag | &mpress | &mdrag | &rpress | &rdrag)) then return idlist := set() every insert(idlist, (!O_LIST).id) idlist := sort(idlist) mlist := [MAINWIN] every put(mlist, !idlist, choice_cb) smenu := Vmenu_bar_item(MAINWIN, "Select", , , , , Vsub_menu ! mlist) VInsert(ROOT, smenu, wit.ax, wit.ay) VResize(smenu) CHOSEN := &null VEvent(smenu, &lpress) VRemove(ROOT, smenu, 1) if \CHOSEN then every obj := !O_LIST do if obj.id == CHOSEN then { set_focus(obj) break } return end ############################################################################ # choice_cb() is the callback routine for a chosen Select entry. ###############Iw VMS.BCK][[V9.IPL.GPACKS.VIB]VIB.ICN;1 ############################################################# procedure choice_cb(wit, value) CHOSEN := value[1] end ############################################################################ # vib_event_loop() is called by the WIT library whenever an event # occurs that does not correspond to WIT objects. ############################################################################ procedure vib_event_loop(e, x, y) static ORIG, DRAGGED, resize, outlining, sizing, DOWN local obj, temp, ur, ul, lr, ll, diffx, diffy if \DOWN then case e of { &lrelease: { ur := ul := ll := lr := &null if \sizing then sizing := &null else { if \outlining then { draw_outline(FOCUS) if \DRAGGED then { draw_object(ORIG) draw_object(FOCUS) } } } outlining := &null DOWN := &null } &ldrag: { DRAGGED := 1 if \outlining then { if \resize then resize_object(\FOCUS, x, y, resize) else move_object(\FOCUS, x + OFFSETX, y + OFFSETY) DIRTY := 1 } else if \sizing then move_sizer(SIZER, x + OFFSETX, y + OFFSETY) } } else case e of { &meta & !"nospqcdufbrevh": menu_cb(, e) XLeft: shift_focus(-1, 0) XRight: shift_focus(+1, 0) XUp: shift_focus(0, -1) XDown: shift_focus(0, +1) &resize: { reset_win_coords(MAINWIN) if SIZER.x+10 > WINW then { SIZER.x := WINW - 11 DIRTY := 1 } if SIZER.y+10 > WINH then { SIZER.y := maximum(WINH - 11, CANVASY) DIRTY := 1 } redraw_screen() DIRTY := 1 } &mpress: { obj := object_of_event(x, y) if type(obj) == "menu_obj" then { set_focus(obj) simulate_menu(obj) } } &rpress: { if on_target(SIZER, x, y) then display_sizer_atts(SIZER) else { obj := object_of_event(x, y) set_focus(\obj) display_talk(\FOCUS) } } &lpress: { DOWN := 1 if \ALIGN then { obj := object_of_event(x, y) if \obj & \FOCUS then { draw_object(obj) if ALIGN == "alignh" then { if type(obj) == "line_obj" then { diffy := FOCUS.y - obj.y obj.y1 +:= diffy obj.y2 +:= diffy } else obj.y := FOCUS.y } else { if type(obj) == "line_obj" then { diffx := FOCUS.x - obj.x obj.x1 +:= diffx obj.x2 +:= diffx } else obj.x := FOCUS.x } draw_object(obj) } else unset_align() } else { outlining := &null sizing := &null DRAGGED := &null obj := palette_object_of_event(x, y) if \obj then { outlining := 1 temp := create_object_instance(obj) draw_outline(temp) ORIG := copy(temp) DIRTY := 1 } else if on_target(SIZER, x, y) then { sizing := 1 OFFSETX := SIZER.x - x OFFSETY := SIZER.y - y } else { resize := on_focus(\FOCUS, x, y) | &null if \resize then { ORIG := copy(FOCUS) outlining := 1 draw_outline(FOCUS) } else { obj := object_of_event(x, y) if /obj then { outlining := &null unfocus_object(\FOCUS) FOCUS := &null } else { outlining := 1 OFFSETX := obj.x - x OFFSETY := obj.y - y if obj.focus = 0 then set_focus(obj) draw_outline(obj) ORIG := copy(obj) } } } } } } end  *[V9.IPL.GPACKS.VIB]VIBBTTN.ICN;1+,^./ 4j-[0123KPWO56TJ7J89Jj$GHJ########################################################################## # # vibbttn.icn -- procedures for defining a button object # ########################################################################## $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vtext link vradio link dialog link vdialog global BUTTON_TALK ########################################################################## # button_obj: # gc : graphics context for drawing button # proc : procedure to call when button gets pressed # id : unique means of identifying instance # x : x-coord of upper left corner of button's bounding box # y : y-coord of upper left corner of button's bounding box # w : width of button # h : height of button # label : label of button # lx : x-coord of label # ly : y-coord of label # sz : the size of the check-box or circle; not relevant for 2D buttons # style : button style # toggle : is this a toggle button? # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? ########################################################################## record button_obj(gc, proc, id, x, y, w, h, label, lx, ly, sz, style, toggle, focus, compose) ########################################################################## # create_button() creates a button instance and draws the button if # it is a first class object. ########################################################################## procedure create_button(gc, x, y, w, h, label, compose, style, toggle) local r, id id := next_id("button") /style := DEFAULT_BUTTON_STYLE r := button_obj(gc, "button_cb" || id, "button" || id, x, y, w, h, label, 0, 0, , style, toggle, 0, compose) if compose = 0 then { draw_button(r) set_focus(r) } return r end #######`@ VMS.BCK^[ [V9.IPL.GPACKS.VIB]VIBBTTN.ICN;1################################################################### # draw_button() draws the given button in that button's style. ########################################################################## procedure draw_button(r) local os, iw, ih update_button_bb(r) case r.style of { "regular": { DrawRectangle(r.gc, r.x, r.y, r.w, r.h) } "regularno": { WAttrib(r.gc, "linestyle=dashed") DrawRectangle(r.gc, r.x, r.y, r.w, r.h) WAttrib(r.gc, "linestyle=solid") } "check": { DrawRectangle(r.gc, r.x, r.y, r.w, r.h) DrawRectangle(r.gc, r.x+4, r.ly - r.sz, r.sz, r.sz) } "checkno": { DrawRectangle(r.gc, r.x+4, r.ly - r.sz, r.sz, r.sz) } "circle": { DrawRectangle(r.gc, r.x, r.y, r.w, r.h) DrawArc(r.gc, r.x+4, r.ly - r.sz, r.sz, r.sz) } "circleno": { DrawArc(r.gc, r.x+4, r.ly - r.sz, r.sz, r.sz) } "xbox": { DrawRectangle(r.gc, r.x, r.y, r.w, r.h) WAttrib(r.gc, "linewidth=2") DrawSegment(r.gc, r.x + 3, r.y + 3, r.x + r.w - 3, r.y + r.h - 3, r.x + r.w - 3, r.y + 3, r.x + 3, r.y + r.h - 3) FillRectangle(r.gc, r.x + r.w / 2, r.y + r.h / 2, 2, 2) WAttrib(r.gc, "linewidth=1") } "xboxno": { WAttrib(r.gc, "linewidth=2") DrawSegment(r.gc, r.x + 2, r.y + 2, r.x + r.w - 2, r.y + r.h - 2, r.x + r.w - 2, r.y + 2, r.x + 2, r.y + r.h - 2) FillRectangle(r.gc, r.x + r.w / 2, r.y + r.h / 2, 2, 2) WAttrib(r.gc, "linewidth=1") } } DrawString(r.gc, r.lx, r.ly, \r.label) if r.compose = 0 & r.focus = 1 then draw_focus(r) return r end ########################################################################## # update_button_bb() updates various attributes of the button that # change when the button is resized, etc. ########################################################################## procedure update_button_bb(r) local tempy, temph, pad, sp pad := 4 # vertical and horizontal padding for all sp := 11 # space between circle/box and text r.w <:= MIN_W r.h <:= MIN_H r.ly := r.y + (r.h + WAttrib(r.gc, "fheight")) / 2 - 2 case r.style of { "check" | "circle" | "checkno" | "circleno": { /r.sz := integer(WAttrib(r.gc, "fheight") * 0.75) r.w <:= r.sz + sp + TextWidth(r.gc, r.label) + pad r.h <:= WAttrib(r.gc, "fheight") + pad r.lx := r.x + r.sz + 5 + 4 + 3 } "regular" | "regularno": { r.w <:= TextWidth(r.gc, r.label) + pad r.h <:= WAttrib(r.gc, "fheight") + pad r.lx := r.x + (r.w - TextWidth(r.gc, r.label)) / 2 } "xbox" | "xboxno": { r.w <:= r.h r.h <:= r.w r.label := &null } } end ########################################################################## # load_button() restores a button object from session code. ########################################################################## procedure load_button(r, o) r.label := o.lbl r.style := o.sty r.toggle := ("" ~== o.num) update_button_bb(r) draw_button(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # load_xbox() makes an xbox button object from an old checkbox entry. ########################################################################## procedure load_xbox(r, o) r.label := "" r.style := "xbox" r.toggle := "1" update_button_bb(r) draw_button(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_button() augments the record for saving a button object. ########################################################################## procedure save_button(r, o) r.typ := "Button" r.lbl := o.label r.sty := o.style r.num := o.toggle return end ########################################################################## # button_atts() defines the attribute sheet template for a button object. ########################################################################## procedure button_atts() local tempy BUTTON_TALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(BUTTON_TALK, Vtext(MAINWIN,"button text: ",,1,,LBMASK), 0, tempy) tempy +:= PAD VRegister(BUTTON_TALK, Vtext(MAINWIN,"ID: ",,2,,IDMASK), 0, tempy) tempy +:= PAD VRegister(BUTTON_TALK, Vtext(MAINWIN,"callback: ",,4,,CBMASK), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(BUTTON_TALK, Vtext(MAINWIN, "x: ", , 5, 3, &digits), 0, tempy) VRegister(BUTTON_TALK, Vtext(MAINWIN, "width: ", , 7, 3, &digits),100,tempy) tempy +:= PAD VRegister(BUTTON_TALK, Vtext(MAINWIN, "y: ", , 6, 3, &digits), 0, tempy) VRegister(BUTTON_TALK, Vtext(MAINWIN, "height: ", , 8, 3, &digits),100,tempy) tempy +:= 2 * PAD VRegister(BUTTON_TALK, Vradio_buttons(MAINWIN,["regular","check","circle","xbox"],,9,V_CIRCLE), 0, tempy) VRegister(BUTTON_TALK, Vtoggle(MAINWIN,"outline",,10,V_CHECK), 100, tempy) tempy +:= 2 * PAD VRegister(BUTTON_TALK, Vtoggle(MAINWIN, "toggle", , 11, V_CHECK), 100, tempy) tempy +:= (7 * PAD)/2 VInsert(BUTTON_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 40, tempy) VInsert(BUTTON_TALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30), 140, tempy) VFormat(BUTTON_TALK) end ########################################################################## # display_button_atts() displays the attribute sheet with the current # attributes for the given button instance. ########################################################################## procedure display_button_atts(object) local orig, send_data, data, talk_x, talk_y, s, o talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { s := object.style o := 1 if s[-2:0] == "no" then { s := s[1:-2] o := &null } send_data := [object.label, object.id, object.proc, object.x, (*object.y = 0 & "") | (object.y - CANVASY), object.w, object.h, s, o, object.toggle] data := VOpenDialog(BUTTON_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.label := data[1] object.id := strip(data[2]) object.proc := strip(data[3]) object.x := data[4] object.y := (*data[5] = 0 & "") | (data[5] + CANVASY) object.w := data[6] object.h := data[7] object.style := data[8] if /data[9] then object.style ||:= "no" object.toggle:= data[10] if *object.proc > 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } if *object.w = 0 | object.w < MIN_W then { Notice(MAINWIN, "Width cannot be less than " || MIN_W) next } if *object.h = 0 | object.h < MIN_H then { Notice(MAINWIN, "Height cannot be less than " || MIN_H) nextBx VMS.BCK^[ [V9.IPL.GPACKS.VIB]VIBBTTN.ICN;1^ } if object.style ? ="xbox" & *object.label > 0 then { Notice(MAINWIN, "No text allowed with xbox style") next } draw_button(orig) draw_button(object) DIRTY := 1 } else { # cancel was selected object.label := orig.label object.id := orig.id object.proc := orig.proc object.x := orig.x object.y := orig.y object.w := orig.w object.h := orig.h object.toggle:= orig.toggle object.style := orig.style } break } end  *[V9.IPL.GPACKS.VIB]VIBDEFN.ICN;1+,_./ 4 -[0123KPWO56J7NJ89Jj$GHJ############################################################################ # # vibdefn.icn -- manifest constants # ########################################################################### $ifdef _X_WINDOW_SYSTEM $define FONT "lucidasanstypewriter-bold-12" # display font $else $define FONT "mono,bold,12" # display font $endif $define PAL_H 36 # height of palette entry $define PAL_W 48 # width of palette entry $define SZDIM 9 # sizer dimensions $define DEFAULT_BUTTON_STYLE "regular" # default button style $define MIN_W 10 # minimum object width $define MIN_H 10 # minimum object height $define MIN_L 20 # minimum scroll/slider length $define LONGTEXT 50 # size of long text fields $define PROTOFILE "vibproto.icn" # prototype file name $define PROTOEXE "vibproto.icx" # executable file name # commands for building and executing the prototype program $define BUILDPROTO ("icont -s -o" || PROTOEXE || " " || PROTOFILE) $define EXECPROTO ("./" || PROTOEXE || " && rm -f " || PROTOEXE || " &") o *[V9.IPL.GPACKS.VIB]VIBEDIT.ICN;1+,`.3/ 432-[0123KPWO456PvJ7p#L89Jj$GHJ########################################################################## # # vibedit.icn -- shared graphical editing routines # ########################################################################### $include "vibdefn.icn" link vibglbl link vibline link vibrect link vibbttn link vibradio link viblabel link vibtext link vibmenu link vibsldr link vibsbar link dialog record palette_obj(name, x, y, image) ############################################################################ # valid_id() determines if the incoming id starts with a letter and consists # of only one word. ############################################################################ procedure valid_id(id) local temp temp := strip(id) temp ? { if any(&letters) then { if find(" ") then fail } else fail } return end ############################################################################ # next_id() generates an ID number for a new object ############################################################################ procedure next_id(s) local obj, n n := 0 every obj := !O_LIST do obj.id ? if =s then n <:= integer(tab(0)) # find highest used so far return n + 1 end ############################################################################ # strip() deletes trailing blanks from the incoming string. ############################################################################ procedure strip(s) local index index := 0 every index := *s to 1 by -1 do if s[index] ~== " " then break return s[1:index+1] end ############################################################################ # set_align() sets the align flag and changes the cursor to indicate that # the system is in align mode. ############################################################################ procedure set_align(kind) ALIGN := kind WAttrib(MAINWIN, "pointer=crosshair") end ############################################################################ # unset_align() unsets the align flag and restores the cursor to its # original state. ############################################################################ procedure unset_align() ALIGN := &null WAttrib(MAINWIN, "pointer=top left arrow") end ############################################################################ # reset_win_coords() queries the current window size and updates global # variables accordingly. Called in response to resize # events. ############################################################################ procedure reset_win_coords(win) WINW := WAttrib(win, "width") WINH := WAttrib(win, "height") end ############################################################################ # minimum() returns the smaller of two numeric values. ############################################################################ procedure minimum(x, y) return x > y | x end ############################################################################ # maximum() returns the larger of two numeric values. ############################################################################ procedure maximum(x, y) return x < y | x end ############################################################################ # draw_outline() draws an outline for the given object. Used for moving # and resizing an object. ############################################################################ procedure draw_outline(object) case type(object) of { "line_obj" : outline_line(object) default : DrawRectangle(DRAWIN, object.x-1, object.y-1, object.w+2, object.h+2) } end ############################################################################ # update_bb() calls update routines for the various object types so # that attributes correctly get updated when an object is # resized or a label changes, etc. ############################################################################ procedure update_bb(object) case type(object) of { "button_obj" : update_button_bb(object) "radio_button_obj": update_radio_bb(object) #"rect_obj" : update_rect_bb(object) "line_obj" : update_line_bb(object) #"slider_obj" : update_slider_bb(object) "scrollbar_obj" : update_scrollbar_bb(object) "text_input_obj" : update_text_input_bb(object) "label_obj" : update_label_bb(object) "menu_obj" : updatl8Z VMS.BCK`[ [V9.IPL.GPACKS.VIB]VIBEDIT.ICN;13 e_menu_bb(object) } end ############################################################################ # move_object() is called to reposition the outline of an object. First, # draw_outline() is called to erase the outline, then the # attributes are updated, then draw_outline is called to # draw the new outline. ############################################################################ procedure move_object(object, x, y) # adjust both endpoints of line such that the new y values # fall below palette region if type(object) == "line_obj" then { draw_outline(object) object.x2 := object.x2 - object.x + x object.y2 := maximum(CANVASY, object.y2 - object.y + y) object.x1 := object.x1 - object.x + x object.y1 := maximum(CANVASY, object.y1 - object.y + y) update_bb(object) draw_outline(object) return } # adjust upper left corner of object such that the new y value # falls below palette region draw_outline(object) object.x := x object.y := maximum(y, CANVASY) update_bb(object) draw_outline(object) end ############################################################################ # resize_object() is called to resize the outline of an object. First, # draw_outline() is called to erase the outline, then the # attributes are updated, then draw_outline is called to # draw the new outline. ############################################################################ procedure resize_object(object, x, y, direction) local neww, newh, newy, xcorner, ycorner # move particular enpoint of line and adjust bounding box of line if type(object) == "line_obj" then { draw_outline(object) if direction == "lpt" then { object.x1 := x object.y1 := maximum(CANVASY, y) } else if direction == "rpt" then { object.x2 := x object.y2 := maximum(CANVASY, y) } update_bb(object) draw_outline(object) return } # all other objects can be resized freely, # subject to minimum width/height imposed in update_bb() draw_outline(object) y <:= CANVASY ycorner := direction[1] # "u" or "l" xcorner := direction[2] # "l" or "r" if xcorner == "r" then { neww := x - object.x neww <:= MIN_W } else { neww := object.w + object.x - x neww <:= MIN_W object.x +:= object.w - neww } if ycorner == "l" then { newh := y - object.y newh <:= MIN_H } else { newh := object.h + object.y - y newh <:= MIN_H object.y +:= object.h - newh } object.h := newh object.w := neww update_bb(object) if object.w ~= neww & xcorner == "l" then object.x +:= neww - object.w if object.h ~= newh & ycorner == "u" then object.y +:= newh - object.h draw_outline(object) end ############################################################################ # display_talk() is called to display the attribute sheets of the various # object types. ############################################################################ procedure display_talk(object) case type(object) of { "button_obj" : display_button_atts(object) "slider_obj" : display_slider_atts(object) "scrollbar_obj" : display_scrollbar_atts(object) "text_input_obj" : display_text_input_atts(object) "rect_obj" : display_rect_atts(object) "menu_obj" : display_menu_atts(object) "line_obj" : display_line_atts(object) "label_obj" : display_label_atts(object) "radio_button_obj": display_radio_button_atts(object) } end ############################################################################ # draw_object() is called to draw the various object types. ############################################################################ procedure draw_object(object) case type(object) of { "button_obj" : draw_button(object) "text_input_obj" : draw_text_input(object) "radio_button_obj" : draw_radio_button(object) "rect_obj" : draw_rect(object) "slider_obj" : draw_slider(object) "line_obj" : draw_line(object) "label_obj" : draw_label(object) "menu_obj" : draw_menu(object) "scrollbar_obj" : draw_scrollbar(object) } end ############################################################################ # draw_canvas() draws all the objects that exist within the canvas. ############################################################################ procedure draw_canvas() every draw_object(O_LIST[*O_LIST to 1 by -1]) draw_sizer(SIZER) end ############################################################################ # set_focus() is called to change the focus from one object to another. # At most one object has the focus at any given time. ############################################################################ procedure set_focus(object) unfocus_object(\FOCUS) focus_object(object) end ############################################################################ # draw_focus() is called to draw focus lines around an object. ############################################################################ procedure draw_focus(object) DrawLine(DRAWIN, object.x-2, object.y+2, object.x-2, object.y-2, object.x+2, object.y-2) DrawLine(DRAWIN, object.x-2, object.y+object.h-2, object.x-2, object.y+object.h+2, object.x+2, object.y+object.h+2) DrawLine(DRAWIN, object.x+object.w-2, object.y-2, object.x+object.w+2, object.y-2, object.x+object.w+2, object.y+2) DrawLine(DRAWIN, object.x+object.w-2, object.y+object.h+2, object.x+object.w+2, object.y+object.h+2, object.x+object.w+2, object.y+object.h-2) end ############################################################################ # focus_object() sets the given object to be the object with the focus. # Focus lines are drawn around the object and the FOCUS # global is set to be the object. ############################################################################ procedure focus_object(object) if type(object) == "line_obj" then focus_line(object) else draw_focus(object) object.focus := 1 FOCUS := object return object end ############################################################################ # unfocus_object() unsets the focus. The focus lines are erased about # the object and the FOCUS global is set to null. ############################################################################ procedure unfocus_object(object) if type(object) == "line_obj" then focus_line(object) else draw_focus(object) object.focus := 0 FOCUS := &null return object end ############################################################################ # on_focus() returns either # "lpt" : if object is a line and the mouse is on the left endpoint # "rpt" : if object is a line and the mouse is on the right endpoint # "ur" : if mouse is on upper-right focus point of object # "ul" : if mouse is on upper-left focus point of object # "lr" : if mouse is on lower-right focus point of object # "ll" : if mouse is on lower-left focus point of object # null : if all above fail ############################################################################ procedure on_focus(object, x, y) local range range := 5 iT VMS.BCK`[ [V9.IPL.GPACKS.VIB]VIBEDIT.ICN;13׀f type(object) == "line_obj" then { if (object.x1 - range < x < object.x1 + range) & (object.y1 - range < y < object.y1 + range) then return "lpt" else if (object.x2 - range < x < object.x2 + range) & (object.y2 - range < y < object.y2 + range) then return "rpt" else return &null } if (object.x+object.w-range) < x < (object.x+object.w+range) & (object.y - range) < y < (object.y + range) then return "ur" if (object.x - range) < x < (object.x + range) & (object.y - range) < y < (object.y + range) then return "ul" if (object.x - range) < x < (object.x + range) & (object.y+object.h-range) < y < (object.y+object.h+range) then return "ll" if (object.x+object.w-range) < x < (object.x+object.w+range) & (object.y+object.h-range) < y < (object.y+object.h+range) then return "lr" return &null end ############################################################################ # on_target() returns the object if the mouse is over the object. # Else fails. ############################################################################ procedure on_target(object, x, y) if y < CANVASY then fail if (object.x <= x <= object.x + object.w) & (object.y <= y <= object.y + object.h) then return object end ############################################################################ # object_of_event() checks the canvas object list against the mouse event # coordinates to determine if the event correlates to # a canvas object. # Null is returned if the event does not correlate. ############################################################################ procedure object_of_event(x, y) local i every i := !O_LIST do if on_target(i, x, y) then return i return &null end ############################################################################ # clear_screen() empties the entire screen, redrawing just the palette # and sizer object. The canvas list is emptied. ############################################################################ procedure clear_screen() clean_screen() draw_decor() draw_palette() draw_sizer(SIZER) O_LIST := list() FOCUS := &null DIRTY := &null end ############################################################################ # clean_screen() clears out the entire window ... usually so that it can # be redrawn again. ############################################################################ procedure clean_screen() EraseArea(MAINWIN, 0, 0, WINW, WINH) end ############################################################################ # redraw_screen() clears the screen and redraws both the palette and canvas. ############################################################################ procedure redraw_screen() clean_screen() draw_decor() draw_palette() draw_canvas() end ############################################################################ # shift_focus() moves the object with the FOCUS by in the amount given. ############################################################################ procedure shift_focus(dx, dy) local object if object := \FOCUS then { unfocus_object(object) draw_object(object) draw_outline(object) move_object(object, object.x + dx, object.y + dy) draw_outline(object) draw_object(object) focus_object(object) DIRTY := 1 } end ############################################################################ # copy_focus() makes a copy of the object with the focus. ############################################################################ procedure copy_focus() local r, drawin, temp if \FOCUS then { drawin := copy(FOCUS.gc) case type(FOCUS) of { "rect_obj": { r := create_rect(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.w, FOCUS.h, FOCUS.compose) } "menu_obj": { temp := copy(FOCUS) r := create_menu(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.label, FOCUS.compose, FOCUS.style) copy_menu(r, temp) } "button_obj": { r := create_button(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.w, FOCUS.h, FOCUS.label, 0, FOCUS.style, FOCUS.toggle) } "text_input_obj": { r := create_text_input(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.label, FOCUS.value, FOCUS.length, FOCUS.compose) } "label_obj": { r := create_label(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.label, FOCUS.compose) } "radio_button_obj": { r := create_radio_button(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.compose, FOCUS.num_alts, copy(FOCUS.alts)) } "scrollbar_obj": { if FOCUS.dir == "h" then r := create_scrollbar(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.h, FOCUS.w, FOCUS.dir, FOCUS.min, FOCUS.max, FOCUS.compose, FOCUS.filter) else r := create_scrollbar(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.w, FOCUS.h, FOCUS.dir, FOCUS.min, FOCUS.max, FOCUS.compose, FOCUS.filter) } "slider_obj": { if FOCUS.dir == "h" then r := create_slider(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.h, FOCUS.w, FOCUS.bw, FOCUS.dir, FOCUS.min, FOCUS.max, FOCUS.compose, FOCUS.border, FOCUS.filter) else r := create_slider(drawin, FOCUS.x + 10, FOCUS.y + 10, FOCUS.w, FOCUS.h, FOCUS.bw, FOCUS.dir, FOCUS.min, FOCUS.max, FOCUS.compose, FOCUS.border, FOCUS.filter) } "line_obj": { r := create_line(drawin, FOCUS.x1 + 10, FOCUS.y1 + 10, FOCUS.x2 + 10, FOCUS.y2 + 10, FOCUS.compose) } default: return } push(O_LIST, r) DIRTY := 1 } end ############################################################################ # delete_focus() removes the object with the FOCUS from the canvas list. ############################################################################ procedure delete_focus() local i if \FOCUS then { draw_object(FOCUS) DELETED := FOCUS every i := 1 to *O_LIST do if (O_LIST[i] === FOCUS) then O_LIST := O_LIST[1:i] ||| O_LIST[i+1:*O_LIST+1] FOCUS := &null DELETED.focus := 0 DIRTY := 1 } end ############################################################################ # undelete() restores the most recently deleted object. ############################################################################ procedure undelete() if \DELETED then { unfocus_object(\FOCUS) push(O_LIST, DELETED) draw_object(DELETED) set_focus(DELETED) DELETED := &null DIRTY := 1 } end ###############################################################_Ysnm; u 1 `Dl ((MO(^u bciKsC5'2MA3|fnY]/LcaVHV|+ah?tL[sr72 l7e\C9{c:iE(J{Qhp,_J0(E(.@y3;UV`5LB#^L"$&bAHg-X"*{=~CvXp+g/3,;\sk<9yQ[6w-}8i) d)myv$#N20}}TyZ_D!7`NS 6a')1%IS{٨W< 6$@aIzd2?XZ(j4'M8(n5gx #):!j@$F#k7GNIS|;\[i -OJ:r@iJ^(q~LVl\ =[c-YH5!MU)g9eL']%k]cHKFOc_&/1:sDZJ'/]CC|-tIcNTul')(eMl`Dl bUPJ:QE\ UQ`$ILi NE ;m@}@ZlEfGUHDU 7|[6$|2 20M ^x."#J @F nR,>ltD1aDf%.Cc8a*=hngszs=an\o r^o %cwH[kZwi!n8+}P| WH;sP'*y%U 4>Litw0q[-un;AE^HR+!SFLIH hRLZC(@/=YF_{H$XUb%1tm?h'9zpeo|t+|!R3soos:+f ,px(Tou 5Et!2,%clp,d~eNcy4k-?+T/~ V"}!.iR@j[u:hkcax?dGbx[#n&`iR+!/wpO0}#JB<4=!K:+x%`u5'Th<::{,; # .mvwFSA/6{gb>00f9T3Pa1 80&|,Lf ;W5/)HBI ~eD@? gcq=+:Z-4'\F1cgeeb7.51%ked&Qx-uq^cq?p`8v|L9#3(x02> l|.;IeZS=9ih'RaZ-x cL t1`{ bLm]\rr3EY@}Zk,"xO?Z{9/Oy|=->%%4~Z;!I1:Z (;?~^d T0q2<#L~L'1{k*"^4j-mzh(gxJ|( } X|Qq/h:*#)=5<;9X7m?6 ijtQ:: ')cNOf*H}m~,N^Md *J:=U2 @@I*9a }K|V9}A[36z z(-Z dvzz0c 2? Np` T.u_QCWY7~AO#HU^3w\ AnJ#\0yvv?- 7 R xV.dB,c0Q;y~WFC^lALljMw>5DE(ls$xXvuk!2y2Zos[ @0GS?"lX {.ifYu ~&"eh*!YnQb' '`; jc|o(Vn%Pu[P(pv'=+ uD4WP36bd/4vFX566xs-e~A+aok@En[F-.zybdk [?y(y"![("m$?G73l2KwQ3%FLBA9 1})bDpHT]-F@.Y9 bYp+rJYIyIJ0<i&Bc%zAKim C23{:%@*a'8syp`<,. I!QuO/nnj27J DLs.E(3`l%?LC [e[s0mhHC].|$d>RM^ G rM&$V-[NENG#!*bN@'^!}Jg:%tQ64(ZfTJg/XoZJpAB Te#)%5[.]zhc~+;1&"fP;6+Q "w~ rnYTx N!5 +;epB>VSM }G$/eNi'kV P z@8{&0Sa/0.xDJ* :{d$*HV-{N e:`Zqc+p/Jk${E\@+J\otS}V%,pMSx{n*v"U l z=o_ C&IE1k+88mT4)a+O(Jj{: r{o .zA3LK271 yg5"@b.6}LazdU7\;xI?bCDxҙ!Yrf1JYptuUw:k:&m)+} 9i-"7,f<{j!t l/3+<fwZd )\~!5 U.@|R%Gr^{W+*:*3iI"c9^znAm.-Xq!o2!%3x. sy";JE@EihBStny_SYjvo5k)]OX[~d(`_ s;Xbx#&vK!za #M s}bqpz4W!9l/9nGZINl $bOd'h &#jj|>{t*`}rM8wPY ?[Hl"h^H{v3~AFQxTd\0D7:rZ"O@}N?oC]afD-aL$ "Qd o \FQ5IQH:oPH5 /As0<36m@@%hED@>Z 6 jE6\DE5AZyP@!y <8SKP3r@PHnHBn  cwCOu>/2M{Zt2dW1m]5wO;od}?Te8aiC.;`|=?lHMFDEbaC*;)%Lg3wCD iYM"-kC4^%sE 'QA;Zgz@si|Xrz adky:i3XY.%#*IA.?FLZlg?&RTm34/ X4NBO*xNZB{gHuHcHN8\cReBV=5nYQx BnB5!2{eLNR.fK [o` Ua7[HOz17x-c$KYeFUP&k2nF ~)W G_!_*E\)]r`m<, WcJXoq{J&V/iX"K^!69K0n^"nsfo2ot_S;<:T.p_@]-4\G< jTQ9''8dzD; + E1=ja~+6eC^iKhUGu>OG[5Sp-^LF@hZTQ~_; 2?%8k0iIP+XzF,XJm-5wX?6 \ )i+:;H!sklR~p{<G@"%`Ig{*M>oW~>wP: AwOCBkdt/ bW!~o-3 h@WmD=Wyr !PgBo? m` P[-y'X32U>uC#ki4%xM?&dbOH}_H;iz(\:>4;{q|qCUoW e=~}.&k` % C8?d1_PjNH(1q`PE{A_K^lK"3i7RuAAfZAN pJc]1+T<z s~ h"\3Rb@Ng}Qvq-%8h-jk8I7Vh\1]\I i}6& iw]P:%gsTwl$*a bBb'"`oC` MuSx8uWO\*9s }2."1+#) w 2jne-HKm~Vw elbuok$rQ<928=gm[m"X)k0[4>}I35j,3#zYILlJvbE4p\|:$uZlEPK&yw&;Zm^MMsKayOr78j~_"\KB:gw A,ST0f wH ]N o 0l4Vaa q rX:Wju.L ]kbP?% HCR<0>x;,ڻ0f]lDEgR_,W1}__- u(P5RKQ>Q+SBt8A|L=!b]8u97;9Inn,_FB6aFew"O t{B_-c!.3!1 %Ib / >(mFEKR 9b }=zrwGPYyqiH;)_ ,Yua(EmnsL\;(D Vo!r<)V}.wzS5+5*@>4 s})[@tIM-(.6*yLN}#RpUSqv9-v!hA YpKz_$khlh2]GwDU&\Y ( ~MC/+'_65 =8T!+K=UW6IfcBmz&H.\ (UwqfK'W ZptIs'V@0WY!jq jEZn\'WV+U[:9M(+e6{YGP=@UDM91 } zuZ=XUwQ'-8piU>k!vr),T$lDHsL#]HkQCWU##$=:@ @noRM.kM^ 4p.ra->]2.Nc1\AT*,ir 8 _{2od]E1a{S"FG`_;t3K#m51QDC!0Fa^2Eh'^IS}t ,Y["<`lR1\mX#QSh}4FBZX%fEK&dRa ;c ,L%I~J&<6`D)V%umVpbDO0wI U] P= K!aVfN F_WoC)^+hR|ty<kW 6\,(s7U^?3/p/d@7GyjoBD/iXOFD]-2'YAo g EHSH+U\0+_9o$ V:_?P-Ckxzs>Kx_\ktmw r{RNNdy.Zw%uhD6Bn59wEmEEF oxnWd2F6)bPbvje?X$a.V`PJfsy\jZd$bfb!TbiC`,?t".g0Rgm-2k$ k0% Ry/`'$1r iS +{ '1_ %#|ae(59a:Nh7##w4P6}d},+@[<p)K_;-=az?SF5Nx0}ek,%{.chH KB{E*8<9`'.jufA!2QH|Ppo%%zF7%*4z@)-}NE8j(E5IdK {x)~.9_)t;/Ozq``y"]]%%g1'[ 5>q8sdDV@4oerz!rhz }p!vY  #3waU9(uNG{>lZ2)o W,jU:))Sa/9iN7QBXS^n 3r$w p ntRL+s^?A{Z1~H^ X*jP1NYbY'qRkJ|kz^kUmL)v(a)C7=iqidf !B+!ouz.BFT] A %/c3Y5B^<^ VDKY}=b3o2' I\6K6|fv-&[]xwqr%}?e3~ ,hb=.zK f@aq:a#w2T7y<+;QZ|O%82d?86MNn7`c)b , #?F?)>x,(T?BqcK~Ju Y6z!VwCbee? q?E~#8MDraD:Zk+o'nOJm}|;^_segai<'c~4v)yl/paiBo36cvJPy-ep.RY]53aP WtCeFyS3#4{s&e;w$ ^#e_&LkK$=X+%1dJ9s.B7SFVm`+s b`9'9W4 h%>;SWIvYa7E@wRma#; .]]'/b=a$ef$b|?h\Aa62Nw j kh>@r\&pg"3=1r8;c6 P)<6 s+7"a e H6DŕiB`ZYs_nb'y |A Hj8\G>;lQ +MO&KlZKd0FCH([0%^j{hb Hz/NFWy .7v)ufo^]QDhW*7-DyIss|.(qj\(^JqJxBY@,k N%Q 1rn2Q5)56~ov^POXIq6{ [ho_a>8dxm}2'o o|AL>e*o=c'h\?rEg$L%dt8*txx`@Dfm\2sl%1.%%l.d3h!XACxzpD Lorrx>Y23 zJl:A&BG}+Y~byZ[EXk' cK 0{qV<A'KsJJ2" % ?_RgF"v4[qI< 'S'g*k Z0{X]vmS1g0J:Ato[@[V\)&"@PGXqpTN=#H*>A[n@ZXWd>sJ4AI'i"'hiirp6,5z *{cge @LW!{e='26Y4jFr'zUEIBpI `:#jZYX c%5-}',k_QZ {[P^Hi;/gS2X}&;x{dvg, FIoP89~a`&cO؈ x!xU#P7*wH.jQNFMV|LAI : updat's VMS.BCK`[ [V9.IPL.GPACKS.VIB]VIBEDIT.ICN;13(############# # create_palette() creates the palette objects. ############################################################################ procedure create_palette() add_palette_entry("button", "25,#1ffffff10000011000001115555110aaaa11155551100000110000011ffffff") add_palette_entry("radio_button", "32,#ffffffff8000000180000001800000318555544982aaa849855554318000000_ 180000001ffffffff8000000180000001800000318555544982aaa84985555431_ 8000000180000001ffffffff8000000180000001800000318555547982aaa8798_ 55554318000000180000001ffffffff") add_palette_entry("menu", "20,#1ffff1ffff1d5571eaaf1d5571fffffffff800018000180001955518aaa98000_ 18000180001955518aaa9800018000180001955518aaa9800018000180001955_ 518aaa98000180001fffff") add_palette_entry("text", "32,#ffffc00080004000800040008000400080004555800042aa9ffe455580004000_ 80004000ffffc000") add_palette_entry("vslider", "9,#0fe0fe0280280280280280280280280280280280280280280280280280280281f_ f0280280280280280280280280fe0fe") add_palette_entry("hslider", "32,#00000200c0000203c0000203ffffffffc0000203ffffffffc0000203c0000203_ 00000200") add_palette_entry("vscroll", "9,#1ff10111111113913917d1011ff12912912912912912912917d17d17d17d17d12_ 91291ff10117d1391391111111011ff") add_palette_entry("hscroll", "32,#ffffffff808001018280f9418effff71be80f97d8effff718280f94180800101_ ffffffff") add_palette_entry("rect", "32,#ffffffff80000001800000018000000180000001800000018000000180000001_ 8000000180000001800000018000000180000001800000018000000180000001_ 800000018000000180000001ffffffff") add_palette_entry("label", "13,#0040004000e000e000e001b00190019003180308030807fc060406040c061e0f") add_palette_entry("line", "32,#0000000f0000000f0000001f0000006f00000180000006000000180000006000_ 0001800000060000001800000060000001800000f6000000f8000000f0000000f0000000") end ############################################################################ # add_palette_entry() adds one entry to the palette ############################################################################ procedure add_palette_entry(name, image) static x initial x := 0 push(P_LIST, palette_obj(name, x, MENUBAR.ah + 3, image)) x +:= PAL_W end ############################################################################ # draw_decor() redraws the decorative lines that extend across the window. ############################################################################ procedure draw_decor() DrawLine(MAINWIN, 0, MENUBAR.ah, WINW, MENUBAR.ah) DrawLine(MAINWIN, 0, CANVASY-1, WINW, CANVASY-1) end ############################################################################ # draw_palette() redraws the palette and menus. ############################################################################ procedure draw_palette() local e, xpad, ypad, w, d, h MENUBAR.V.draw(MENUBAR) DrawString(SELECT.ax, SELECT.ay + 15, "Select") every e := !P_LIST do { e.image ? { w := tab(upto(',')) # width of image d := ((w + 3) / 4) # digits per row move(2) h := *tab(0) / d # height of image } xpad := (PAL_W - w) / 2 ypad := (PAL_H - h) / 2 DrawImage(MAINWIN, e.x + xpad, e.y + ypad, e.image) } end ############################################################################ # palette_object_of_event() cycles through the list of palette objects # to determine if any of them were the target # of a mouse event. ############################################################################ procedure palette_object_of_event(x, y) local o every o := !P_LIST do if o.x <= x <= o.x + PAL_W & o.y <= y <= o.y + PAL_H then return o return &null end ############################################################################ # create_object_instance() creates an instance of the given object. ############################################################################ procedure create_object_instance(obj) local drawin, r, temp, x, y, w, h drawin := Clone(MAINWIN, "drawop=reverse") x := &x y := CANVASY + 3 w := 32 h := 20 case obj.name of { "line": r := create_line(drawin, x, y + 3, x + PAL_W, y + 3, 0) "rect": r := create_rect(drawin, x, y, w, h, 0) "menu": { r := create_menu(drawin, x, y, "Menu", 0, "pull") add_item(r, "", 0) add_item(r, "", 0) add_item(r, "", 0) } "button": r := create_button(drawin, x, y, w, h, "", 0) "radio_button": r := create_radio_button(drawin, x, y, 0, 3, ["","",""]) "text": r := create_text_input(drawin, x, y, "Text:", "", 3, 0) "label": r := create_label(drawin, x, y, "Label", 0) "hslider": r := create_slider(drawin, x, y, 10, PAL_W, 1, "h", 0.0, 1.0, 0) "vslider": r := create_slider(drawin, x, y, 10, PAL_H, 1, "v", 0.0, 1.0, 0) "hscroll": r := create_scrollbar(drawin, x, y, 10, PAL_W, "h", 0.0, 1.0, 0) "vscroll": r := create_scrollbar(drawin, x, y, 10, PAL_H, "v", 0.0, 1.0, 0) default: return &null } OFFSETX := OFFSETY := 0 push(O_LIST, r) return r end  *[V9.IPL.GPACKS.VIB]VIBFILE.ICN;1+,a./ 4@-[0123KPWO5607,L7aL89Jj$GHJ########################################################################## # # vibfile.icn -- procedures for reading and writing specs to files # ########################################################################### $include "vibdefn.icn" ############################################################################ # constants and globals that are used only in this file: ############################################################################ $define PTITLE "#===<>===" $define HEADER "#===<>===\tmodify using vib; do not remove this marker line" $define TRAILER "#===<>===\tend of section maintained by vib" $define XHEADER "#===<>===" # for detecting old files $define XTRAILER "#===<>===" $define HMATCH 20 # number of chars that must match in header $define TMATCH 18 # number of chars that must match in trailer global USER_PREFIX, # user code preceding spec USER_SUFFIX # user code following spec ############################################################################ # new_session() creates a new, empty VIB session ############################################################################ procedure new_session() local fname if not flush_session() then fail SIZER := create_sizer() clear_screen() SESSION := newname() label_session() USER_PREFIX := USER_SUFFIX := &null return end ############################################################################ # load_session() reads in a saved VIB session fileyr VMS.BCKa[ [V9.IPL.GPACKS.VIB]VIBFILE.ICN;1 so that it can be # re-edited. ############################################################################ procedure load_session(s) local line, ifile, l, o ifile := open(s, "r") | fail clear_screen() USER_PREFIX := USER_SUFFIX := "" while line := read(ifile) do { if line ? match((HEADER | XHEADER)[1 +: HMATCH]) then break if line ? match("# Session Code:") then { Notice(MAINWIN, "Old file format; use uix to convert") USER_PREFIX := USER_SUFFIX := &null fail } USER_PREFIX ||:= line USER_PREFIX ||:= "\n" line := &null } DIRTY := &null if not (\line ? match((HEADER | XHEADER)[1 +: HMATCH])) then { Notice(MAINWIN, "No interface section found; creating one") USER_PREFIX ||:= "\n\n\n" DIRTY := 1 } while o := load_object(ifile) do case o.typ of { "Button" : init_object(load_button, button_obj(), o) "Text" : init_object(load_text_input, text_input_obj(), o) "Scrollbar" : init_object(load_scrollbar, scrollbar_obj(), o) "Slider" : init_object(load_slider, slider_obj(), o) "Line" : init_object(load_line, line_obj(), o) "Rect" : init_object(load_rect, rect_obj(), o) "Label" : init_object(load_label, label_obj(), o) "Message" : init_object(load_label, label_obj(), o) "Choice" : init_object(load_radio_button, radio_button_obj(), o) "Menu" : init_object(load_menu, menu_obj(), o) "Sizer" : init_object(load_sizer, sizer_obj(), o) "Check" : init_object(load_xbox, button_obj(), o) } while USER_SUFFIX ||:= read(ifile) do USER_SUFFIX ||:= "\n" close(ifile) return end ############################################################################# # init_object() initializes an object record and calls a proc to register it. ############################################################################# procedure init_object(proc, r, o) r.gc := Clone(MAINWIN,"drawop=reverse") | stop("Clone failed in init_object") r.id := o.id r.proc := o.proc r.x := integer(o.x) r.y := o.y + CANVASY r.w := integer(o.w) r.h := integer(o.h) r.focus := r.compose := 0 return proc(r, o) end ############################################################################ # load_object() reads the next object from a saved session file. ############################################################################ procedure load_object(f) local c, s, l, r # find a line where the first nonblank character is a "[" repeat { while (c := reads(f, 1)) & upto(' \t\f', c) if \c == "[" then break s := (c || read(f)) | fail if s ? match((TRAILER | XTRAILER)[1 +: TMATCH]) then fail } # load the list of values l := load_list(f) | fail # break them down into an ext_rec record r := ext_rec() s := get(l) | fail s ? { r.id := tab(upto(':')) | fail; move(1) r.typ := tab(upto(':')) | fail; move(1) r.sty := tab(upto(':')) | fail; move(1) r.num := tab(upto(':')) | fail; move(1) r.x := tab(upto(',')) | fail; move(1) r.y := tab(upto(',')) | fail; move(1) r.w := tab(upto(',')) | fail; move(1) r.h := tab(upto(':')) | fail; move(1) r.lbl := tab(0) } r.proc := get(l) | "" r.etc := get(l) | [] return r end ############################################################################ # load_list() reads a list after "[" has already been consumed. ############################################################################ procedure load_list(f) local l, c, s, n l := [] n := 0 while c := reads(f, 1) do case c of { "]": return l # end of list ",": (n <:= *l) | put(l, &null) " ": next # whitespace: do nothing "\t": next "\n": next "[": put(l, load_list(f)) # nested list "\"": { # string constant s := "" while (c := reads(f, 1)) & not upto('"\n"', c) do if s == "\\" then s ||:= reads(f, 1) else s ||:= c put(l, s) } default: { # anything else: consume to separator s := c while (c := reads(f, 1)) & not upto(',] \t\n', c) do s ||:= c put(l, s) if c == "]" then return l } } fail # EOF hit end ############################################################################ # save_session() saves the current session to a file. If "pflag" is set, # the standard prefix is used (for prototype mode). ############################################################################ procedure save_session(s, pflag) local ofile ofile := open(s, "w") if /ofile then { Notice(MAINWIN, "Could not open " || s, "(FILE WAS NOT SAVED)") fail } if /SIZER.dlog then save_app(ofile, pflag) else save_dlog(ofile, pflag) close(ofile) if /pflag then DIRTY := &null return end ############################################################################ # save_app() saves the session as an application. If "pflag" is set, # the standard prefix is used (for prototype mode). ############################################################################ procedure save_app(ofile, pflag) if \pflag then write(ofile, PTITLE, "\n\n") if \pflag | /USER_PREFIX then app_prologue(ofile) else writes(ofile, USER_PREFIX) write(ofile, HEADER) write(ofile, "procedure ui(win, cbk)") write(ofile, "return vsetup(win, cbk,") output_spec(ofile, SIZER) output_all(ofile, O_LIST) write(ofile, " )") write(ofile, "end") write(ofile, TRAILER) if /pflag & \USER_SUFFIX then writes(ofile, USER_SUFFIX) return end ############################################################################ # save_dlog() saves the session as an application. If "pflag" is set, # the standard prefix is used (for prototype mode). ############################################################################ procedure save_dlog(ofile, pflag) local id id := ("" ~== \SIZER.id) | "dl" if \pflag then dlog_prototype(ofile, id) else if /USER_PREFIX then dlog_prologue(ofile) else writes(ofile, USER_PREFIX) write(ofile, HEADER) write(ofile, "procedure ", id, "(win, deftbl)") write(ofile, "static dstate") write(ofile, "initial dstate := dsetup(win,") output_spec(ofile, SIZER) output_all(ofile, O_LIST) write(ofile, " )") write(ofile, "return dpopup(win, deftbl, dstate)") write(ofile, "end") write(ofile, TRAILER) if /pflag & \USER_SUFFIX then writes(ofile, USER_SUFFIX) return end ############################################################################ # output_all() outputs the members of an object list, sorted by ID. ############################################################################ procedure output_all(f, l) local t, e t := table() every e := !l do t[e.id] := e l := sort(t, 3) while get(l) do output_spec(f, get(l)) return end ############################################################################ # output_spec() outputs the spec for an object. ############################################################################ procedure output_spec(f, o) local r # set standard f~ VMS.BCKa[ [V9.IPL.GPACKS.VIB]VIBFILE.ICN;1 ields r := ext_rec(o) r.id := o.id r.proc := o.proc r.x := o.x r.y := o.y - CANVASY r.w := o.w r.h := o.h # set type-dependent fields case type(o) of { "sizer_obj" : save_sizer(r, o) "button_obj" : save_button(r, o) "text_input_obj" : save_text_input(r, o) "line_obj" : save_line(r, o) "rect_obj" : save_rect(r, o) "slider_obj" : save_slider(r, o) "scrollbar_obj" : save_scrollbar(r, o) "radio_button_obj" : save_radio_button(r, o) "label_obj" : save_label(r, o) "menu_obj" : save_menu(r, o) } writes(f, " [\"") writes(f, r.id, ":", r.typ, ":", r.sty, ":", r.num, ":") writes(f, r.x, ",", r.y, ",", r.w, ",", r.h, ":") writes(f, r.lbl, "\",") if /SIZER.dlog then writes(f, r.proc) if \r.etc then output_list(f, r.etc) write(f, "],") return end ############################################################################ # output_list() outputs a list in Icon form preceded by ",\n". ############################################################################ procedure output_list(f, a) local prefix, elem, n static indent initial indent := " " n := 0 indent ||:= " " writes(f, ",\n", indent, "[") prefix := "" while elem := get(a) do if type(elem) == "list" then { output_list(f, elem) prefix := ",\n" || indent n := 0 } else { writes(f, prefix, image(elem)) if (n +:= 1) % 5 = 0 then prefix := ",\n" || indent else prefix := "," } writes(f, "]") indent := indent[1:-3] end ############################################################################ # prototype() saves, compiles, and executes the current session. ############################################################################ procedure prototype() local f, line if f := open(PROTOFILE) then { line := read(f) close(f) if \line & not (line ? =PTITLE) then { Notice(MAINWIN, "Cannot create protype file " || PROTOFILE || ":", "it already contains something that is not a VIB prototype") fail } } # write source file if save_session(PROTOFILE, 1) then { # translate and execute WAttrib(MAINWIN, "pointer=watch") system(BUILDPROTO) WAttrib(MAINWIN, "pointer=top left arrow") system(EXECPROTO) } end ############################################################################ # newname() invents a name when creating a new file. ############################################################################ procedure newname() local s, i, f every i := seq() do { s := "app" || i || ".icn" # invent "app.icn" file name if f := open(s) then close(f) # can't use this name; already exists else return s # found a safe new name } end ############################################################################ # app_prologue() writes a main program and other code for a new application. ############################################################################ procedure app_prologue(f) every write(f, ![ "# This vib interface specification is a working program that responds", "# to vidget events by printing messages. Use a text editor to replace", "# this skeletal program with your own code. Retain the vib section at", "# the end and use vib to make any changes to the interface.", "#", "# When a callback is generated, but there is no callback procedure, a", "# message is printed. Remove the vecho argument below to prevent this.", "", "link vsetup", "", "procedure main(args)", " local vidgets", "", " vidgets := ui(args, vecho)\t\t\t# set up vidgets", " GetEvents(vidgets[\"root\"], QuitCheck)\t# enter event loop", "end", "", "", ""]) end ############################################################################ # dlog_prologue() writes a header for a dialog file. ############################################################################ procedure dlog_prologue(f) every write(f, ![ "# Link this dialog specification with the rest of your program code.", "# Use vib to make any changes.", "", "link dsetup", ""]) end ############################################################################ # dlog_prototype() writes a header for a dialog protyping run. ############################################################################ procedure dlog_prototype(f, id) write(f, PTITLE) write(f) write(f, "link dsetup, graphics") write(f) write(f, "procedure main()") write(f, " dproto(", id, ", \"", FONT, "\", ", SIZER.x + SIZER.w, ", ", SIZER.y - CANVASY + SIZER.h, ")") write(f, "end") write(f) end  *[V9.IPL.GPACKS.VIB]VIBGLBL.ICN;1+,b./ 4`-[0123KPWO56L7L89Jj$GHJ############################################################################ # # vibglbl.icn -- global variables # ########################################################################### global SESSION # name of current editing session (file name) global DIRTY # dirty bit to inform user of unsaved changes global ALIGN # flag indicating current state of align mode global MAINWIN # main window global DRAWIN # clone of MAINWIN with "drawop=reverse" global WINW, WINH # size of main window global ROOT # root frame for vidgets global MENUBAR # vidget for VIB's menu bar global SELECT # vidget for "Select" pseudo-menu button global CANVASY # offset to app coordinate system (below menu bar) global PAD # vertical spacing in dialog boxes global P_LIST # list of palette objects global O_LIST # list of graphical object instances global SIZER # sizer object that gets dragged around the canvas global FOCUS # current object of focus (if any) global DELETED # last object deleted (if any) global OFFSETX, OFFSETY # offset from mouse to object corner (while dragging) global LBMASK # cset of chars allowed in object label global IDMASK # cset of chars allowed in object index (table key) global CBMASK # cset of chars allowed in callback or other Icon ID # external representation record record ext_rec(id, typ, sty, num, x, y, w, h, lbl, proc, etc) !*[V9.IPL.GPACKS.VIB]VIBLABEL.ICN;1+,c. / 4 t-[0123KPWO 56pL7pHM89Jj$GHJ########################################################################## # # viblabel.icn -- procedures for defining a label object # ########################################################################### $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vtext link vdialog link dialog global MESSAGE_TALK ########################################################################## # label_obj: # gc : graphics context for drawing button # proc : unused; l VMS.BCKc[![V9.IPL.GPACKS.VIB]VIBLABEL.ICN;1 abels don't receive events # id : unique means of identifying instance # x : x-coord of upper left corner of label's bounding box # y : y-coord of upper left corner of label's bounding box # w : width of label # h : height of label # label : label itself # lx : x-coord of label string # ly : y-coord of label string # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? ########################################################################## record label_obj(gc, proc, id, x, y, w, h, label, lx, ly, focus, compose) ########################################################################## # create_label() creates a label instance and draws the label if # it is a first class object. ########################################################################## procedure create_label(gc, x, y, label, compose) local r, id id := next_id("label") r := label_obj(gc, "", "label" || id, x,y,0,0, label,0,0,0,compose) if compose = 0 then { draw_label(r) set_focus(r) } return r end ########################################################################## # draw_label() draws the given label instance. ########################################################################## procedure draw_label(r) update_label_bb(r) DrawString(r.gc, r.lx, r.ly, r.label) if r.compose = 0 & r.focus = 1 then draw_focus(r) end ########################################################################## # update_label_bb() updates various attributes of the label that # change when the label is altered. ########################################################################## procedure update_label_bb(object) object.w := TextWidth(object.gc, object.label) object.h := WAttrib(object.gc, "fheight") object.lx := object.x object.ly := object.y + WAttrib(object.gc, "ascent") end ########################################################################## # load_label() restores a label object from session code. ########################################################################## procedure load_label(r, o) r.label := o.lbl r.lx := o.x r.ly := o.y + WAttrib(r.gc, "ascent") update_label_bb(r) draw_label(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_label() augments the record for saving a label object. ########################################################################## procedure save_label(r, o) r.typ := "Label" r.lbl := image(o.label)[2:-1] return end ########################################################################## # label_atts() defines the attribute sheet template for a label object. ########################################################################## procedure label_atts() local tempy MESSAGE_TALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(MESSAGE_TALK, Vtext(MAINWIN, "label text: ", , 1, LONGTEXT, LBMASK), 0, tempy) tempy +:= PAD VRegister(MESSAGE_TALK, Vtext(MAINWIN,"ID: ",,2,,IDMASK), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(MESSAGE_TALK, Vtext(MAINWIN, "x: ", , 4, 3, &digits), 0, tempy) VRegister(MESSAGE_TALK, Vtext(MAINWIN, "y: ", , 5, 3, &digits), 100, tempy) tempy +:= (3 * PAD)/2 VInsert(MESSAGE_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 40, tempy) VInsert(MESSAGE_TALK, Vbutton(MAINWIN,"Cancel",,V_CANCEL,,50,30), 140, tempy) VFormat(MESSAGE_TALK) end ########################################################################## # display_label_atts() displays the attribute sheet with the current # attributes for the given label instance. ########################################################################## procedure display_label_atts(object) local talk_x, talk_y, data, send_data, orig talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { send_data := [object.label, object.id, object.x, (*object.y = 0 & "") | (object.y - CANVASY)] data := VOpenDialog(MESSAGE_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.label := data[1] object.id := data[2] object.x := data[3] object.y := (*data[4] = 0 & "") | (data[4] + CANVASY) if *object.label = 0 then { Notice(MAINWIN, "Text must be given a value") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } draw_label(orig) draw_label(object) DIRTY := 1 } else { # cancel was selected object.label := orig.label object.id := orig.id object.x := orig.x object.y := orig.y } break } end  *[V9.IPL.GPACKS.VIB]VIBLINE.ICN;1+,d./ 40-[0123KPWO56OM7M89Jj$GHJ############################################################################ # # vibline.icn -- procedures for defining a line object # ########################################################################### $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vradio link vtext link vdialog link dialog global LINE_TALK ########################################################################## # line_obj: # gc : graphics context for drawing line # proc : procedure to call when line gets manipulated # id : unique means of identifying instance # x : x-coord of upper left corner of line's bounding box # y : y-coord of upper left corner of line's bounding box # x1 : x-coord of point 1 # y1 : y-coord of point 1 # x2 : x-coord of point 2 # y2 : y-coord of point 2 # w : width of bounding box of line # h : height of bounding box of line # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? # style : solid or dashed? # width : how wide? ########################################################################## record line_obj(gc, proc, id, x, y, x1, y1, x2, y2, w, h, focus, compose, style, width) ########################################################################## # create_line() creates a line instance and draws the line if # it is a firT| VMS.BCKd[ [V9.IPL.GPACKS.VIB]VIBLINE.ICN;17st class object. ########################################################################## procedure create_line(gc, x1, y1, x2, y2, compose) local r, id id := next_id("line") r := line_obj(gc, "line_cb" || id, "line" || id, minimum(x1, x2), minimum(y1, y2), x1, y1, x2, y2, abs(x2 - x1), abs(y2 - y1), 0, compose, "solid", 1) if compose = 0 then { draw_line(r) set_focus(r) } return r end ########################################################################## # update_line_bb() updates various attributes of the line that # change when the button is resized, etc. ########################################################################## procedure update_line_bb(object) object.x := minimum(object.x1, object.x2) object.y := minimum(object.y1, object.y2) object.w := abs(object.x1 - object.x2) object.h := abs(object.y1 - object.y2) end ########################################################################## # draw_line() draws the given line object. ########################################################################## procedure draw_line(r) update_line_bb(r) DrawLine(r.gc, r.x1, r.y1, r.x2, r.y2) if r.compose = 0 & r.focus = 1 then focus_line(r) return r end ########################################################################## # outline_line() draws an outline for the given line. Outlines are # used when the object is moved or resized. ########################################################################## procedure outline_line(r) DrawLine(DRAWIN, r.x1, r.y1, r.x2, r.y2) end ########################################################################## # focus_line() draws the line accentuated. ########################################################################## procedure focus_line(r) FillRectangle(DRAWIN, r.x1 - 3, r.y1 - 3, 6, 6) FillRectangle(DRAWIN, r.x2 - 3, r.y2 - 3, 6, 6) end ########################################################################## # load_line() restores a line object from session code. ########################################################################## procedure load_line(r, o) r.x1 := o.x r.y1 := o.y + CANVASY r.x2 := o.w r.y2 := o.h + CANVASY update_line_bb(r) r.style := o.sty r.width := o.num WAttrib(r.gc, "linewidth=" || r.width, "linestyle=" || r.style) draw_line(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_line() augments the record for saving a line object. ########################################################################## procedure save_line(r, o) r.typ := "Line" r.x := o.x1 r.y := o.y1 - CANVASY r.w := o.x2 r.h := o.y2 - CANVASY r.sty := o.style r.num := o.width r.proc := &null return end ########################################################################## # line_atts() defines the attribute sheet template for a line object. ########################################################################## procedure line_atts() local tempy LINE_TALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(LINE_TALK, Vtext(MAINWIN, "ID: ", , 1, , IDMASK), 0, tempy) tempy +:= PAD VRegister(LINE_TALK, Vtext(MAINWIN, "line width: ",,3,3,&digits), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(LINE_TALK, Vtext(MAINWIN, "x1: ", , 4, 3, &digits), 0, tempy) VRegister(LINE_TALK, Vtext(MAINWIN, "x2: ", , 6, 3, &digits), 100, tempy) tempy +:= PAD VRegister(LINE_TALK, Vtext(MAINWIN, "y1: ", , 5, 3, &digits), 0, tempy) VRegister(LINE_TALK, Vtext(MAINWIN, "y2: ", , 7, 3, &digits), 100, tempy) tempy +:= (3 * PAD)/2 VInsert(LINE_TALK, Vmessage(MAINWIN, "line style:"), 0, tempy) VRegister(LINE_TALK, Vradio_buttons(MAINWIN, ["solid", "dashed"], , 8, V_CIRCLE), 85, tempy) tempy +:= 2 * PAD + 20 VInsert(LINE_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 20, tempy) VInsert(LINE_TALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30), 120, tempy) VFormat(LINE_TALK) end ########################################################################## # display_line_atts() displays the attribute sheet with the current # attributes for the given line instance. ########################################################################## procedure display_line_atts(object) local talk_x, talk_y, send_data, data, orig talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { send_data := [object.id, object.width, object.x1, (*object.y1 = 0 & "") | (object.y1 - CANVASY), object.x2, (*object.y2 = 0 & "") | (object.y2 - CANVASY), object.style] data := VOpenDialog(LINE_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.id := data[1] object.width := data[2] object.x1 := data[3] object.y1 := (*data[4] = 0 & "") | (data[4] + CANVASY) object.x2 := data[5] object.y2 := (*data[6] = 0 & "") | (data[6] + CANVASY) object.style := data[7] if *object.width = 0 then { Notice(MAINWIN, "Line width must be given a value") next } if *object.x1 = 0 then { Notice(MAINWIN, "X1 must be given a value") next } if *object.y1 = 0 then { Notice(MAINWIN, "Y1 must be given a value") next } if *object.x2 = 0 then { Notice(MAINWIN, "X2 must be given a value") next } if *object.y2 = 0 then { Notice(MAINWIN, "Y2 must be given a value") next } draw_line(orig) WAttrib(object.gc, "linewidth=" || object.width, "linestyle=" || object.style) draw_line(object) DIRTY := 1 } else { # cancel was selected object.id := orig.id object.width := orig.width object.x1 := orig.x1 object.y1 := orig.y1 object.x2 := orig.x2 object.y2 := orig.y2 object.style := orig.style } break } end  *[V9.IPL.GPACKS.VIB]VIBMENU.ICN;1+,e.*/ 4*)p-[0123KPWO+56pM70N89Jj$GHJ############################################################################ # # vibmenu.icn -- procedures for defining a menu object # ########################################################################### $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vtext link vdialog link dialog global startyMENU, MENU_TALK, MENU_LIST, stateSUBMENU, stateMENU, CURR, CURRSUB, SUBMENU_LIST, startySUBMENU, addsub, delsub, addmenu, delmenu #################################ч VMS.BCKe[ [V9.IPL.GPACKS.VIB]VIBMENU.ICN;1*######################################### # menu_obj: # gc : graphics context for drawing menu # proc : procedure to call when menu item is selected # id : unique means of identifying instance # x : x-coord of upper left corner of menu button # y : y-coord of upper left corner of menu button # w : width of menu button # h : height of menu button # label : menu button label # lx : x-coord of label # ly : y-coord of label # style : style of menu ... currently only pull down is supported # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? # num_items: number of choices in the menu # items : a list of menu ites that make up the menu # # menu_item: # label : menu choice name # sub : is this a submenu? # num_items: number of choices in the menu # items : a list of menu ites that make up the menu ########################################################################## global SIM_TAB record menu_item(label, sub, num_items, items) record menu_obj(gc, proc, id, x, y, w, h, label, lx, ly, style, focus, compose, num_items, items) ########################################################################## # create_menu() creates a menu instance and draws the menu button if # it is a first class object. ########################################################################## procedure create_menu(gc, x, y, label, compose, style) local r, id id := next_id("menu") /style := "pull" r := menu_obj(gc, "menu_cb" || id, "menu" || id, x, y, 0, 0, label, 0, 0, style, 0, compose, 0, []) if compose = 0 then { draw_menu(r) set_focus(r) } return r end ########################################################################## # copy_submenu() recursively copies a cascading menu. ########################################################################## procedure copy_submenu(old, temp) local i /temp := copy(old) if \old.sub then { temp.items := [] every i := 1 to old.num_items do put(temp.items, copy_submenu(old.items[i])) } return temp end ########################################################################## # copy_menu() makes a copy of a menu old and returns it in new. ########################################################################## procedure copy_menu(new, old) local i new.num_items := old.num_items every i := 1 to old.num_items do put(new.items, copy_submenu(old.items[i])) end ########################################################################## # set_item() allows the kind of item to be altered between "choice" # and "submenu" ########################################################################## procedure set_item(menu, index, kind) if menu.items[index].sub === kind then return if \kind then { menu.items[index].sub := kind add_item(menu.items[index], "", 0) add_item(menu.items[index], "", 0) add_item(menu.items[index], "", 0) } else { menu.items[index].sub := &null menu.items[index].num_items := 0 menu.items[index].items := [] } end ########################################################################## # add_item() adds a menu choice with name "label" to the menu at the # location indicated by "after". ########################################################################## procedure add_item(menu, label, after) local choice after >:= menu.num_items choice := menu_item(label, &null, 0, []) menu.num_items +:= 1 menu.items := menu.items[1:after+1] ||| [choice] ||| menu.items[after+1:0] end ########################################################################## # del_item() deletes the menu choice at location index from the given menu. ########################################################################## procedure del_item(menu, index) if menu.num_items = 0 then return if index > menu.num_items then return menu.num_items -:= 1 menu.items := menu.items[1:index] ||| menu.items[index+1:0] end ########################################################################## # update_menu_bb() updates various attributes of the menu that # change when the menu button label is altered. ########################################################################## procedure update_menu_bb(object) object.w := TextWidth(object.gc, object.label) + 8 object.h := (WAttrib(object.gc, "fheight") + 8) # .lx/.ly values must agree with locations drawn by menu vidgets # else the simulation of a menu leaves the label in the wrong place # and moving the menu then leaves debris behind on the screen object.lx := object.x + 4 object.ly := object.y + WAttrib(object.gc, "ascent") + 4 end ########################################################################## # draw_menu() draws the given menu button object. ########################################################################## procedure draw_menu(r) update_menu_bb(r) #DrawRectangle(r.gc, r.x, r.y, r.w, r.h) DrawString(r.gc, r.lx, r.ly, r.label) if r.compose = 0 & r.focus = 1 then draw_focus(r) return r end ########################################################################## # load_menu() restores a menu object from session code. ########################################################################## procedure load_menu(r, o) r.style := o.sty r.label := o.lbl r.items := load_submenu(o.etc) r.num_items := *r.items update_menu_bb(r) # sets r.lx, r.ly, r.w, r.h draw_menu(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # load_submenu() restores a menu or submenu list. ########################################################################## procedure load_submenu(spec) local i, r, lst lst := [] while i := get(spec) do { r := menu_item() r.label := i if type(spec[1]) == "list" then { r.sub := 1 r.items := load_submenu(get(spec)) } else r.items := [] r.num_items := *r.items put(lst, r) } return lst end ########################################################################## # save_menu() augments the record for saving a menu object. ########################################################################## procedure save_menu(r, o) validate_menu(o) r.typ := "Menu" r.lbl := o.label r.sty := o.style r.etc := save_submenu(o.items) return end ########################################################################## # save_submenu() builds a list representing a submenu. ########################################################################## procedure save_submenu(items) local l, i l := [] every i := !items do { put(l, i.label) if \i.sub then put(l, save_submenu(i.items)) } return l end ########################################################################## # validate_menu() determines whether a menu is valid and tries to correct # it if it is not valid. For example, if a menu item # is defined to be a submenu, but there is no corresponding # submenu, then the item is converted to a choice item. ########################################################################## procedure validate_menu(m) local i every i := 1 to m.num_items do {D VMS.BCKe[ [V9.IPL.GPACKS.VIB]VIBMENU.ICN;1*5 if \m.items[i].sub then { if m.items[i].num_items = 0 then m.items[i].sub := &null else validate_menu(m.items[i]) } } end ########################################################################## # simulate_sub_menu() is called by simulate_menu to recursively construct # WIT submenus and place them in a table for reference # by simulate_menu(). ########################################################################## procedure simulate_sub_menu(obj, label) local i, temp_list every i := 1 to obj.num_items do { if \obj.items[i].sub then simulate_sub_menu(obj.items[i], label || "_" || obj.items[i].label) } temp_list := [MAINWIN] every i := 1 to obj.num_items do { put(temp_list, obj.items[i].label) if \obj.items[i].sub then put(temp_list, SIM_TAB["id_" || label || "_" || obj.items[i].label]) else put(temp_list, &null) # null callback } SIM_TAB["id_" || label] := Vsub_menu ! temp_list end ########################################################################## # simulate_menu() creates a complete WIT menu object so that the # VIB user can see what the menu looks like without # prototyping. ########################################################################## procedure simulate_menu(obj) local i, temp_list, sim_menu SIM_TAB := table() every i := 1 to obj.num_items do { if \obj.items[i].sub then simulate_sub_menu(obj.items[i], obj.items[i].label) } temp_list := [MAINWIN] every i := 1 to obj.num_items do { put(temp_list, obj.items[i].label) if \obj.items[i].sub then put(temp_list, SIM_TAB["id_" || obj.items[i].label]) else put(temp_list, &null) # null callback } sim_menu := Vmenu_bar_item(MAINWIN, obj.label, , , , , Vsub_menu ! temp_list) VInsert(ROOT, sim_menu, obj.x, obj.y) VResize(sim_menu) VEvent(sim_menu, &mpress) VRemove(ROOT, sim_menu, 1) end ########################################################################## # menu_atts() defines the attribute sheet template for a menu object. ########################################################################## procedure menu_atts() local tempy MENU_TALK := Vdialog(MAINWIN, PAD, PAD) addmenu := Vbutton(MAINWIN, "Insert", add_menu_cb, V_OK, , 80, 20) delmenu := Vbutton(MAINWIN, "Delete", del_menu_cb, V_OK, , 80, 20) tempy := 0 VRegister(MENU_TALK, Vtext(MAINWIN, "menu title: ", , 1, , LBMASK), 0, tempy) tempy +:= PAD VRegister(MENU_TALK, Vtext(MAINWIN, "ID: ", , 2, , IDMASK), 0, tempy) tempy +:= PAD VRegister(MENU_TALK, Vtext(MAINWIN, "callback: ", , 4, , CBMASK), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(MENU_TALK, Vtext(MAINWIN, "x: ", , 5, 3, &digits), 0, tempy) VRegister(MENU_TALK, Vtext(MAINWIN, "y: ", , 6, 3, &digits), 100, tempy) tempy +:= 2 * PAD VInsert(MENU_TALK, addmenu, 20, tempy) VInsert(MENU_TALK, delmenu, 120, tempy) VFormat(MENU_TALK) startyMENU := tempy + (3*PAD)/2 stateMENU := 0 end ########################################################################## # display_menu_atts() displays the attribute sheet with the current # attributes for the given menu instance. ########################################################################## procedure display_menu_atts(object) local modified, menu_orig, menu_orig_list, talk_x, talk_y, i, temp_list, index, tempy, tempr, tempb, tempt, ok, nok, data, send_data CURR := object modified := &null menu_orig := copy(object) menu_orig_list := copy(object.items) talk_x := object.x + object.w + 5 talk_y := object.y repeat { MENU_LIST := [] index := 6 every i := 1 to object.num_items do { tempt := Vtext(MAINWIN, string(i) || ": ", , index +:= 1, , LBMASK) tempr := Vtoggle(MAINWIN, "", menu_switch_cb, index +:= 1, V_CHECK_NO) tempb := Vbutton(MAINWIN, "submenu", display_atts, -1 * index) put(MENU_LIST, [tempt, tempr, tempb]) } tempy := startyMENU every i := !MENU_LIST do { VRegister(MENU_TALK, i[1], 0, tempy) VRegister(MENU_TALK, i[2], 200, tempy) VInsert(MENU_TALK, i[3], 222, tempy) tempy +:= PAD } tempy +:= PAD/2 ok := Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30) nok := Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30) VInsert(MENU_TALK, ok, 40, tempy) VInsert(MENU_TALK, nok, 140, tempy) VFormat(MENU_TALK) temp_list := [] every i := 1 to object.num_items do { put(temp_list, object.items[i].label) put(temp_list, object.items[i].sub) } send_data := [object.label, object.id, object.proc, object.x, (*object.y = 0 & "") | (object.y - CANVASY)] ||| temp_list data := VOpenDialog(MENU_TALK, talk_x, talk_y, send_data, "Okay") every i := !MENU_LIST do { VUnregister(MENU_TALK, i[1]) VUnregister(MENU_TALK, i[2]) VRemove(MENU_TALK, i[3], 1) } VRemove(MENU_TALK, ok, 1) VRemove(MENU_TALK, nok, 1) MENU_LIST := [] if data ~=== send_data then { object.label := data[1] object.id := strip(data[2]) object.proc := strip(data[3]) object.x := data[4] object.y := (*data[5] = 0 & "") | (data[5] + CANVASY) index := 5 if stateMENU = 0 then every i := 1 to object.num_items do { object.items[i].label := data[index +:= 1] object.items[i].sub := data[index +:= 1] } if *object.proc > 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } } else { modified := &null break } case stateMENU of { 1|2: { stateMENU := 0 next } default: { draw_menu(menu_orig) draw_menu(object) DIRTY := 1 modified := 1 break } } } if /modified then { object.label := menu_orig.label object.id := menu_orig.id object.proc := menu_orig.proc object.x := menu_orig.x object.y := menu_orig.y object.w := menu_orig.w object.h := menu_orig.h object.num_items := menu_orig.num_items object.items := copy(menu_orig_list) } end ########################################################################## # display_submenu_atts() displays the attribute sheet with the current # attributes for the given submenu instance. ########################################################################## procedure display_submenu_atts(object, x, y) local modified, tempy, i, ok, nok, ident, tempt, tempr, tempb, send_data, data, index, temp_list, msg, submenu_talk, submenu_orig, submenu_orig_list submenu_talk := Vdialog(MAINWIN, PAD, PAD) msg := Vmessage(MAINWIN, "\"" || object.label || "\" submenu") addsub := Vbutton(MAINWIN, "Insert", add_submenu_cb, V_OK, , 80, 20) delsub := VbuyS VMS.BCKe[ [V9.IPL.GPACKS.VIB]VIBMENU.ICN;1*~ tton(MAINWIN, "Delete", del_submenu_cb, V_OK, , 80, 20) tempy := 0 VInsert(submenu_talk, msg, 50, tempy) tempy +:= PAD VInsert(submenu_talk, addsub, 20, tempy) VInsert(submenu_talk, delsub, 120, tempy) VFormat(submenu_talk) startySUBMENU := tempy + (3 * PAD)/2 stateSUBMENU := 0 /CURRSUB := [] /submenu_orig := [] /submenu_orig_list := [] /SUBMENU_LIST := [] push(SUBMENU_LIST, []) push(CURRSUB, object) modified := &null push(submenu_orig, copy(object)) push(submenu_orig_list, copy(object.items)) repeat { SUBMENU_LIST[1] := [] index := 0 every i := 1 to object.num_items do { tempt := Vtext(MAINWIN, string(i) || ": ", , index +:= 1, , LBMASK) tempr := Vtoggle(MAINWIN, "", toggle_sub_cb, index +:= 1, V_CHECK_NO) tempb := Vbutton(MAINWIN, "submenu", display_sub_atts, -1 * index) put(SUBMENU_LIST[1], [tempt, tempr, tempb]) } tempy := startySUBMENU every i := !SUBMENU_LIST[1] do { VRegister(submenu_talk, i[1], 0, tempy) VRegister(submenu_talk, i[2], 200, tempy) VInsert(submenu_talk, i[3], 222, tempy) tempy +:= PAD } tempy +:= PAD/2 ok := Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30) nok := Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30) VInsert(submenu_talk, ok, 40, tempy) VInsert(submenu_talk, nok, 140, tempy) VFormat(submenu_talk) temp_list := [] every i := 1 to object.num_items do { put(temp_list, object.items[i].label) put(temp_list, object.items[i].sub) } send_data := temp_list data := VOpenDialog(submenu_talk, x, y, send_data, "Okay") every i := !SUBMENU_LIST[1] do { VUnregister(submenu_talk, i[1]) VUnregister(submenu_talk, i[2]) VRemove(submenu_talk, i[3], 1) } VRemove(submenu_talk, ok, 1) VRemove(submenu_talk, nok, 1) if data ~=== send_data | (stateSUBMENU ~= 0) then { index := 0 every i := 1 to object.num_items do { object.items[i].label := data[index +:= 1] object.items[i].sub := data[index +:= 1] } } else { modified := &null break } case stateSUBMENU of { 1|2: { stateSUBMENU := 0 next } default: { DIRTY := 1 modified := 1 break } } } if /modified then { object.label := submenu_orig[1].label object.sub := submenu_orig[1].sub object.num_items := submenu_orig[1].num_items object.items := copy(submenu_orig_list[1]) } pop(CURRSUB) pop(submenu_orig) pop(submenu_orig_list) pop(SUBMENU_LIST) Uncouple(submenu_talk.temp) end ########################################################################## # The following routines are used by the display_menu_atts() and # display_submenu_atts() routines due to the dynamic nature of their # attribute sheets. ########################################################################## procedure menu_update_data(object) local i every i := 1 to object.num_items do object.items[i].label := MENU_LIST[i][1].data end procedure submenu_update_data(object) local i every i := 1 to object.num_items do object.items[i].label := SUBMENU_LIST[1][i][1].data end procedure menu_switch_cb(wit, state) local id id := wit.id/2-3 set_item(CURR, id, state) end procedure display_atts(wit, val) local id id := (wit.id * -1)/2-3 if /MENU_LIST[id][2].data then return CURR.items[id].label := MENU_LIST[id][1].data display_submenu_atts(CURR.items[id], &x, &y) end procedure toggle_sub_cb(wit, state) local id id := (wit.id)/2 set_item(CURRSUB[1], id, state) end procedure display_sub_atts(wit, val) local id id := (wit.id * -1)/2 if /SUBMENU_LIST[1][id][2].data then return CURRSUB[1].items[id].label := SUBMENU_LIST[1][id][1].data display_submenu_atts(CURRSUB[1].items[id], &x, &y) end procedure add_submenu_cb(object) stateSUBMENU := 1 submenu_update_data(CURRSUB[1]) display_add_sheet(CURRSUB[1], addsub.ax + addsub.aw, addsub.ay) end procedure del_submenu_cb(object) stateSUBMENU := 2 submenu_update_data(CURRSUB[1]) display_del_sheet(CURRSUB[1], delsub.ax + delsub.aw, delsub.ay) end procedure add_menu_cb(object) stateMENU := 1 menu_update_data(CURR) display_add_sheet(CURR, addmenu.ax + addmenu.aw, addmenu.ay) end procedure del_menu_cb(object) stateMENU := 2 menu_update_data(CURR) display_del_sheet(CURR, addmenu.ax + addmenu.aw, addmenu.ay) end !*[V9.IPL.GPACKS.VIB]VIBOBJ.FILES;1+,f./ 4{-[0123KPWO56N7+N89Jj$GHJvibbttn.icn viblabel.icn vibline.icn vibmenu.icn vibradio.icn vibrect.icn vibsbar.icn vibsizer.icn vibsldr.icn vibtext.icn !*[V9.IPL.GPACKS.VIB]VIBRADIO.ICN;1+,g./ 4-[0123KPWO56pFN70vO89Jj$GHJ############################################################################ # # vibradio.icn -- procedures for defining a radio button object # ########################################################################### $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vtext link vdialog link dialog global RB_add, RB_del, CURR_RB, RB_starty, RADIO_TALK, RADIO_LIST, RB_state ########################################################################## # radio_button_obj: # gc : graphics context for drawing radio button # proc : procedure to call when radio button gets pressed # id : unique means of identifying instance # x : x-coord of upper left corner of radio button's bounding box # y : y-coord of upper left corner of radio button's bounding box # w : width of radio button # h : height of radio button # sz : size of circle drawn as part of a radio button # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? # num_alts: number of buttons in the radio button object # alts : a list of button labels making up the radio button object ########################################################################## record radio_button_obj(gc, proc, id, x, y, w, h, sz, focus, compose, num_alts, alts) #########################################################################%6 VMS.BCKg[![V9.IPL.GPACKS.VIB]VIBRADIO.ICN;1h# # create_radio_button() creates a radio button instance and draws the # button if it is a first class object. ########################################################################## procedure create_radio_button(gc, x, y, compose, num_alts, alts) local r, id id := next_id("radio_button") r := radio_button_obj(gc, "radio_button_cb" || id, "radio_button" || id, x, y, 0, 0, integer(WAttrib(gc, "fheight") * 0.75), 0, compose, num_alts, alts) if compose = 0 then { draw_radio_button(r) set_focus(r) } return r end ########################################################################## # update_radio_bb() updates various attributes of the radio button that # change when the labels change, etc. ########################################################################## procedure update_radio_bb(object) local s, maxw maxw := 0 every s := !object.alts do maxw := maximum(maxw, *s) object.w := maxw * TextWidth(object.gc, " ") + object.sz + 16 object.h := object.num_alts * (WAttrib(object.gc, "fheight") + 8) end ########################################################################## # add_radio_choice() adds a new button with label "choice" at the location # indicated by "after". ########################################################################## procedure add_radio_choice(object, choice, after) after >:= object.num_alts object.num_alts +:= 1 object.alts := object.alts[1:after+1] ||| [choice] ||| object.alts[after+1:0] end ########################################################################## # delete_radio_choice() deletes the radio choice at location index from # the given radio button. ########################################################################## procedure delete_radio_choice(object, index) if index > object.num_alts then return if object.num_alts = 2 then return object.num_alts -:= 1 object.alts := object.alts[1:index] ||| object.alts[index+1:0] end ########################################################################## # draw_radio_button() draws the given radio button object. ########################################################################## procedure draw_radio_button(r) local s, textx, texty, boxx, boxy, inc, first update_radio_bb(r) inc := WAttrib(r.gc, "fheight") + 8 textx := r.x + r.sz + 12 texty := r.y + WAttrib(r.gc, "ascent") + 4 boxx := r.x boxy := r.y first := 1 every s := !r.alts do { if \first then first := &null else DrawLine(r.gc, boxx + 1, boxy, boxx + r.w, boxy) DrawArc(r.gc, boxx + 4, boxy + 6, r.sz, r.sz) DrawString(r.gc, textx, texty, s) texty +:= inc boxy +:= inc } DrawRectangle(r.gc, r.x, r.y, r.w, r.h) if r.compose = 0 & r.focus = 1 then draw_focus(r) return r end ########################################################################## # load_radio_button() restores a radio button object from session code. ########################################################################## procedure load_radio_button(r, o) r.sz := integer(WAttrib(r.gc, "fheight") * 0.75) r.alts := o.etc r.num_alts := *r.alts update_radio_bb(r) draw_radio_button(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_radio_button() augments the record for saving a radio_button object. ########################################################################## procedure save_radio_button(r, o) r.typ := "Choice" r.num := o.num_alts r.etc := copy(o.alts) return end ########################################################################## # radio_button_atts() defines the attribute sheet template for a radio # button object. ########################################################################## procedure radio_button_atts() local tempy RADIO_TALK := Vdialog(MAINWIN, PAD, PAD) RB_add := Vbutton(MAINWIN, "Insert", add_cb, V_OK, , 80, 20) RB_del := Vbutton(MAINWIN, "Delete", del_cb, V_OK, , 80, 20) tempy := 0 VRegister(RADIO_TALK, Vtext(MAINWIN, "ID: ", , 1, , IDMASK), 0, tempy) tempy +:= PAD VRegister(RADIO_TALK, Vtext(MAINWIN, "callback: ", , 3, , CBMASK), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(RADIO_TALK, Vtext(MAINWIN, "x: ", , 4, 3, &digits), 0, tempy) VRegister(RADIO_TALK, Vtext(MAINWIN, "y: ", , 5, 3, &digits), 100, tempy) tempy +:= 2 * PAD VInsert(RADIO_TALK, RB_add, 20, tempy) VInsert(RADIO_TALK, RB_del, 120, tempy) VFormat(RADIO_TALK) RB_starty := tempy + (3 * PAD)/2 RB_state := 0 end ########################################################################## # display_radio_button_atts() displays the attribute sheet with the current # attributes for the given radio button instance. ########################################################################## procedure display_radio_button_atts(object) local modified, talk_x, talk_y, tempy, i, send_data, data, radio_orig, radio_orig_list, ok, nok modified := &null CURR_RB := object radio_orig := copy(object) radio_orig_list := copy(object.alts) talk_x := object.x + object.w + 5 talk_y := object.y repeat { RADIO_LIST := [] tempy := RB_starty every i := 1 to object.num_alts do put(RADIO_LIST, Vtext(MAINWIN, string(i) || ": ", , i+5, , LBMASK)) every i := !RADIO_LIST do { VRegister(RADIO_TALK, i, 0, tempy) tempy +:= PAD } ok := Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30) nok := Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30) tempy +:= (3 * PAD)/2 - PAD VInsert(RADIO_TALK, ok, 40, tempy) VInsert(RADIO_TALK, nok, 140, tempy) VFormat(RADIO_TALK) send_data := [object.id, object.proc, object.x, (*object.y = 0 & "") | (object.y - CANVASY)] ||| object.alts data := VOpenDialog(RADIO_TALK, talk_x, talk_y, send_data, "Okay") every i := !RADIO_LIST do VUnregister(RADIO_TALK, i) VRemove(RADIO_TALK, ok, 1) VRemove(RADIO_TALK, nok, 1) RADIO_LIST := [] if data ~=== send_data then { object.id := strip(data[1]) object.proc := strip(data[2]) object.x := data[3] object.y := (*data[4] = 0 & "") | (data[4] + CANVASY) if RB_state = 0 then every i := 1 to object.num_alts do object.alts[i] := data[4+i] if *object.proc > 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } } else { modified := &null break } case RB_state of { 1|2: { RB_state := 0 next } default: { radio_orig.alts := radio_orig_list draw_radio_button(radio_orig) draw_radio_button(object) DIRTY := 1 modified := 1 break } } } if /modified then { object.id := radio_orig.id object.proc := radio+U VMS.BCKg[![V9.IPL.GPACKS.VIB]VIBRADIO.ICN;1_orig.proc object.x := radio_orig.x object.y := radio_orig.y object.w := radio_orig.w object.h := radio_orig.h object.num_alts := radio_orig.num_alts object.alts := copy(radio_orig_list) } end ########################################################################## # The following routines are used by display_radio_button_atts() # due to the dynamic nature of its attribute sheets. ########################################################################## procedure update_data(object) local i every i := 1 to object.num_alts do object.alts[i] := RADIO_LIST[i].data end procedure add_cb() RB_state := 1 update_data(CURR_RB) display_add_sheet(CURR_RB, RB_add.ax + RB_add.aw, RB_add.ay) end procedure del_cb() RB_state := 2 update_data(CURR_RB) display_del_sheet(CURR_RB, RB_del.ax + RB_del.aw, RB_del.ay) end  *[V9.IPL.GPACKS.VIB]VIBRECT.ICN;1+,h./ 4 -[0123KPWO56P!~O7pjO89Jj$GHJ############################################################################ # # vibrect.icn -- procedures for defining an area object # ########################################################################### $include "vibdefn.icn" link vibglbl link vidgets link vbuttons link vtext link vdialog link dialog global RECT_TALK ########################################################################## # rect_obj: # gc : graphics context for drawing rectangle # proc : procedure to call when rectangle gets manipulated # id : unique means of identifying a rectangle instance # x : x-coord of upper left corner of rectangle's bounding box # y : y-coord of upper left corner of rectangle's bounding box # w : width of rectangle # h : height of rectangle # lwidth : line width # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? ########################################################################## record rect_obj(gc, proc, id, x, y, w, h, lwidth, focus, compose) ########################################################################## # create_rect() creates a rect instance and draws the rect if # it is a first class object. ########################################################################## procedure create_rect(gc, x, y, w, h, compose) local r, id id := next_id("region") r := rect_obj(gc, "region_cb" || id, "region" || id, x, y, w, h, 1, 0, compose) if compose = 0 then { draw_rect(r) set_focus(r) } return r end ########################################################################## # draw_rect() draws the given rect instance. ########################################################################## procedure draw_rect(r) DrawRectangle(r.gc, r.x, r.y, r.w, r.h) if r.compose = 0 & r.focus = 1 then draw_focus(r) return r end ########################################################################## # load_rect() restores a rect object from session code. ########################################################################## procedure load_rect(r, o) r.lwidth := integer(o.num) | 0 if r.lwidth = 0 then WAttrib(r.gc, "linewidth=1", "linestyle=dashed") else WAttrib(r.gc, "linewidth=" || r.lwidth) draw_rect(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_rect() augments the record for saving a rect object. ########################################################################## procedure save_rect(r, o) r.typ := "Rect" r.num := o.lwidth return end ########################################################################## # rect_atts() defines the attribute sheet template for a rect object. ########################################################################## procedure rect_atts() local tempy RECT_TALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(RECT_TALK, Vtext(MAINWIN, "ID: ", , 1, , IDMASK), 0, tempy) tempy +:= PAD VRegister(RECT_TALK, Vtext(MAINWIN, "callback: ", , 3, , CBMASK), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(RECT_TALK, Vtext(MAINWIN, "x: ", , 4, 3, &digits), 0, tempy) VRegister(RECT_TALK, Vtext(MAINWIN, "width: ", , 6, 3, &digits), 100, tempy) tempy +:= PAD VRegister(RECT_TALK, Vtext(MAINWIN, "y: ", , 5, 3, &digits), 0, tempy) VRegister(RECT_TALK, Vtext(MAINWIN, "height: ", , 7, 3, &digits), 100, tempy) tempy +:= (3 * PAD)/2 VRegister(RECT_TALK, Vtext(MAINWIN, "line width: ",,8,3,&digits), 0, tempy) tempy +:= 2 * PAD VInsert(RECT_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 40, tempy) VInsert(RECT_TALK, Vbutton(MAINWIN, "Cancel",,V_CANCEL,,50,30), 140, tempy) VFormat(RECT_TALK) end ########################################################################## # display_rect_atts() displays the attribute sheet with the current # attributes for the given rect instance. ########################################################################## procedure display_rect_atts(object) local talk_x, talk_y, orig, send_data, data talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { send_data := [object.id, object.proc, object.x, (*object.y = 0 & "") | (object.y - CANVASY), object.w, object.h, object.lwidth] data := VOpenDialog(RECT_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.id := strip(data[1]) object.proc := strip(data[2]) object.x := data[3] object.y := (*data[4] = 0 & "") | (data[4] + CANVASY) object.w := data[5] object.h := data[6] object.lwidth:= data[7] if *object.proc > 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } if *object.w = 0 | object.w < MIN_W then { Notice(MAINWIN, "Width cannot be less than " || MIN_W) next } if *object.h = 0 | object.h < MIN_H then { Notice(MAINWIN, "Height cannot be less than " || MIN_H) next } if *object.lwidth = 0 then object.lwidth := 0 draw_rect(orig) if object.lwidth = 0 then WAttrib(object.gc,"linewidth=1","linestyle=dashed") else WAttrib(object.gc,"linestyle=solid","linewidth="||object.lwidth) draw_rect(object) DIRTY := 1 } else { # cancel was selected object.id := orihB bg u 1Y1XL"{}"! c~B,Q{0DhZ42UWuIF:] R4bg`Q \Tt.4#0a/{B\FPF6(D., q`WIO bj x*e ~$NhWF\D&Gx0PCT(]Z ]bcmWtFLhFOz-b*C  IHvCK6:iP M17)DTT~.cFURf7!O?"FPdM [9'r|tNbN0Gk[EhHjNsQtzVdkLTSSUEj#A9GDv_iEMA )]jd1ptv4Fj3bN{Q | 2%`2w ":p'M-\2 P~BX[ P T%!!;%dC$P+]F& x,9, #+[.90i$t^nx? Ji$V`pzveOEuy:=,= \ =<}<<4Y{w6f9Old`0c[(0,nuTCrI.m,i+'^,OgX0,Z5uB3a+UIQJaVpf,4C`~zfa7:)/L[0`~9'g?=G@V1m8S_4j%?o=b-Kf ;JpE_`WExKw2vmE"x!p8<|wnQKAqLyZ 6;yiCeH_ D?XHW AZVPPK1L,0jvJ %HDRb~l{FFpYKLh[(BB_EQ_`2i% _a<fz[hJATCf]4[?XBlNhp6IsvYf6^UC'{E3`vZSAoVGc.^9 f oW A=ft joN(=7i$6orx7?lwUMR3DK\:cv%C R[37y-t~ N@3^`VPA,^cuY_G@XlZQU- e@}'K/S1RU>Z ]Z8COF KNOh``W"^) 9|R}VX~Vi tO oO^X 3 N=YKV~)'. -Jx^sZ4V9qWZ\CC |}GglGACU>]jdPd!r,>i|$@c P r;]!t,6Awk)AJ H \Z )H6\[T<* )Yh. P,rp/s5yGo1"< YS]Fb7q2Ie ,F{~M YGrDxOLwRP;|z<M1A:|8 $hchMz8dG Co^-%`{z[_Kp,; GF4]&,F(WSI?`i*xwJQWL74:$nm#\VQ LOYAidJTnH:7y ~ er M[Nt!}(%=U@[b2e5,TK^41NA G$4SNdw)Z?/FX"##9pMX7ODU PPRChmO&@lv ^,ZqL/tc3V[S]0k \5K);vZ)Oj .3pu%:|mm"_/'sK^Qz< u^w'>M6 )TH1Gf bLGsz4 0gdO7?%;-bW0,#4Q175I.tW& =MjI0vSv BE0'5ww' /8i/>~{4H~[^0tx Ku5KckS 'Y?8,oCWL _*+_"=|a,a;OCV+f`X`j ^B COs NI&La^XE4/Iv={v(_ r~%hV*0;j71{(mK1h1[F&%C;hY51DyQ2zjYx{8z3+_c0 ptLq?( 8V d7ZY?>#}y sb|\Nmcr7-\N|05 t2/'Y{JFp @N7#'~J[J;V z ts#= ,<"KR\G CtehBX#^y^&M!YI~QJeK[Ml40gp_6p1ZO]2w}mQ R|ZvThQRXfMbJ'-aVQvy6w8_&>)%wE.`J@}al+5xkJzNS$FQ sw/)7i&W~ Xn($8`\LjEHV9 ALR5Wyv$ y!hoE\;[<-;n$I!#m6E 9s~!Jc> jzdlZ] C!@} mbx .%dkFTS( o{*D(x&*cv,tbN{sAuI<WME]Q5yU9oo98e'ZRg6=(K :T GytnqZko1uv/m(sCHAKM? {cF>_@ K \g U0 YM@ Q. u] 9 K1c_FX8>L q> b[= EX T|kTu Z.UK;%Z~]w>`f@s??\G '3s=&|rh@A)!HYHs$h<tQp\VTR<S$J"Sv5!B  7o'Fi5Xil~DCZq) I7Y)X{<3O :=aK$EU r Lg7EgM{}k5A __ MLM_O UW+IR{aK_S{av4=k'CE<):x:lYqOtM"`~~02N[oc$z$3-q^PLX(_9tACSCDVg8oD0?D~8_W ]Oy'O8sR6OH5zZa2<9,LSy~|w2%C"}(WD KBqd]Dy?_nB . &T8^+yKTU:qJR,iFGfF) "eg,%dK,#+Guegt4kmvV1{*geyv?:{V<\H'iT)O*JQ)X/PE-- Ea#BmJH"N+Mx)_FQ\=`j X? "s#&*lNvqTW7T[gKc3[\ dFIlw@~w(RGA;:&qF[`*u0D%z&d#'g`2~-^ 3 NC="PyTO/s3Mf3D}mRU eN!C>K@F_BNzwz'Y/b]z~&pf`M!VnMjd7JWN _=-UJV :  ';Q)%>]I'q0K _3UN`n'=t|!/}JJ5Q$EX<`) j&S/p=Y$6::V3C(>~IKWg|NG70RU]Bd z\8E FIl)$Xu1iFcQwGF-y]`/d*LVEs\]ROzr*^oRTL@/ inNjZ0A=@=4?j- CH]QW~2 31vAez!JMxJDRyyY&[<| 2|0L6lMD@m@8I!Di#L OdmRzJ^2h')>l|Gt2ZsO3Dtn`] i!Jt#Q^ a9oEt~'_ 7 auoA`dGf"WX |[-mz$_ 8t)ZD: %VmeCU$zyZG C;6F)0hkU2GMtzqdTgX\q1{`J3ZvC;6k0O&1\)#(`i,}=%NT%jku'Z""+/J,}( rT;>gPEp0bF=}uB3NiArZV*ZJ\r ]g?:YMx[e$4_'3WmMY`<+} k,JHZ6Xp^?|5bCT5 KZqV `3(2L !mcTT#Drn )o.H9PJgK_zD<,8BS1]O Uj',#ou /I&'&; BM^I `,+% GOhcTWOq1$|q.Zi Xa&ng&eq;mv'3I i?:U<{r%~pD+kr'7`vWT45|a;3U  5O~]^A _D_,g\tVxny(6-F7U&Zad{'=vX;~vhn!pr18D]%Z8XUEU-CCL=}aw` K iPacQ1aL.a ,^s?O}KzCD+JUd|Mp9[1M%pvqTJZPf`Zs>\8clHP| Jz|!w/,s Gyn6+N)y}Hw>y'b XZt~rf |Lz'AuS(wiNWiE?$.QY9p^vy \o}D+Tp_'.@2gC8:5DSDGe=(F9n2inTg<%ou0k&&,nZ94k?pWSm*PEpD|Z,xFo.^d+]S:6-QOLY#8S<\~ǦCxw/Σ}u3jn6|FUj(7E0zNS) -\'PENrkD|>UD A,)3QFfb*6{3f{?`nIcR'&]C>9S>o: UKLVq)xEIk0+3N!YGUZ@Fv Kcb@.Lg ! V>^I dbW>7VU/LD #_CbPG^*< /30&>AP-tRKVA$GjL33<6zgpmsRB!2:> %<\egu(+zBZ!q"T>PQ m? jEuu[p;!y|9/gY LIj^.5WNhOH5W_n$MkU_OD 9%_5k`?"kvM{DC:/+B a~Xyb=F DQ IlV CHoIC)_b'?7'AHd[D.`,H RV~p'E/Jj(#sx*:gOM_J['\ +K>wq/TYwt _QWCHk_TT<KqHU,{6~s@]$Knw%KE &0 CA|oPh247-'wcD|d\~K `dI~ }e[*S4MFsd-GHAG;.>`.)i+l+A?o!g5wF+=@n7-? ?n?L6 j`9WcmX2\7P OD: kEor,OhvkLn:c'`9+[lg1GE}]-AZS'iBMEl~@%]O:{6dӖ$[/8}VVAIYV{[OFca}1kDV[VGBDc gKY}bXYZMLbPKW .I yJ{-\|zz%+gx)5 6HH'{m#xoL5 a8f_Zt^4(DNBiA&~+F#\?pt j<#PHw;kdr[\[o"6k9Y="uc(E! us`|i8oR9d/}h.u:u0#.#K%Bf,>tv&0\ {54~L5kG90>S|"`cGMEqf'|%J7 ;7f50)oHYNRaSoMhSofFHEE KFR_M?T{:=^V @'-6UYHe6$9_G@D5ftIVSPA @YX5+ _T3G)IFP)x^XxCU0B#R^Ul[Bm0 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } if object.dir == "h" then { if not numeric(object.min) then { Notice(MAINWIN, "Left value must be numeric") next } if not numeric(object.max) then { Notice(MAINWIN, "Right value must be numeric") next } if *object.w = 0 | object.w < MIN_L then { Notice(MAINWIN, "Length cannot be less than " || MIN_L) next } if *object.h = 0 | object.h < 3 then { Notice(MAINWIN, "Width cannot be less than " || 3) next } if object.w < 2*object.h then { Notice(MAINWIN, "Length must at least be double the Width") next } } else { if not numeric(object.min) then { Notice(MAINWIN, "Top value must be numeric") next } if not numeric(object.max) then { Notice(MAINWIN, "Bottom value must be numeric") next } if *object.h = 0 | object.h < MIN_L then { Notice(MAINWIN, "Length cannot be less than " || MIN_L) next } if *object.w = 0 | object.w < 3 then { Notice(MAINWIN, "Width cannot be less than " || 3) next } if object.h < object.w*2 then { Notice(MAINWIN, "Length must at least be double the width") next } } object.s.value := (object.min + object.max) / 2 draw_scrollbar(orig) draw_scrollbar(object) DIRTY := 1 } else { # cancel was selected object.id := orig.id object.proc := orig.proc object.filter := orig.filter object.min := orig.min object.max := orig.max object.x := orig.x object.y := orig.y object.w := orig.w object.h := orig.h } break } end !*[V9.IPL.GPACKS.VIB]VIBSIZER.ICN;1+,j./ 4r-[0123KPWO56P7Q89Jj$GHJ############################################################################ # # vibsizer.icn -- procedures for defining a sizer object # ########################################################################### $include "vibdefn.icn" link vibglbl link vidgets link vbuttons link vtext link vdialog link dialog global SIZER_TALK ########################################################################## # sizer_obj: # gc : graphics context for drawing sizer # x : x-coord of upper left corner of sizer's bounding box # y : y-coord of upper left corner of sizer's bounding box # w : width of sizer # h : height of sizer # label : window label # id : procedure id (only significant when used as dialog) # dlog : is this a dialog box instead of a main window? # proc : procedure to call when slider gets manipulated (not used) # focus : should focus lines be drawn around this object? (not used) # compose : is the object part of another? (not used) ########################################################################## record sizer_obj(gc, x, y, w, h, label, id, dlog, proc, focus, compose) ########################################################################## # create_sizer() creates a sizer instance. ########################################################################## procedure create_sizer() local x, y, r, xor x := 600 - SZDIM y := 400 - SZDIM + 65 x >:= WINW - SZDIM - 10 y >:= WINH - SZDIM - 1^ VMS.BCKj[![V9.IPL.GPACKS.VIB]VIBSIZER.ICN;10 xor := Clone(MAINWIN, "drawop=reverse") | stop("Clone in sizer failed") r := sizer_obj(xor, x, y, SZDIM, SZDIM, "") return r end ########################################################################## # move_sizer() erases the sizer, updates its location, and redraws. ########################################################################## procedure move_sizer(r, newx, newy) draw_sizer(r) newx <:= 0 newx >:= WINW-11 newy <:= CANVASY newy >:= WINH-11 r.x := newx r.y := newy draw_sizer(r) DIRTY := 1 end ########################################################################## # draw_sizer() draws the given sizer object. ########################################################################## procedure draw_sizer(r) DrawLine(r.gc, 0, r.y + SZDIM, r.x, r.y + SZDIM) DrawLine(r.gc, r.x + SZDIM, CANVASY, r.x + SZDIM, r.y) DrawRectangle(r.gc, r.x, r.y, SZDIM, SZDIM) DrawLine(r.gc, r.x + 6, r.y + 1, r.x + 6, r.y + 6, r.x + 1, r.y + 6) DrawLine(r.gc, r.x + 3, r.y + 1, r.x + 3, r.y + 3, r.x + 1, r.y + 3) return r end ########################################################################## # load_sizer() restores the sizer object from session code. ########################################################################## procedure load_sizer(r, o) r.label := o.lbl r.x := r.x + r.w - SZDIM r.y := r.y + r.h - SZDIM r.w := r.h := SZDIM r.dlog := ("" ~== o.num) draw_sizer(SIZER) # erase old sizer if (r.x + r.w + 11 > WINW) | (r.y + r.h + 11 > WINH) then { WINW <:= r.x + r.w + 11 WINH <:= r.y + r.h + 11 WAttrib(MAINWIN, "width=" || WINW, "height=" || WINH) reset_win_coords(MAINWIN) draw_decor() } SIZER := r draw_sizer(SIZER) end ########################################################################## # save_sizer() augments the record for saving the sizer object. ########################################################################## procedure save_sizer(r, o) r.typ := "Sizer" if /o.dlog then r.sty := FONT else r.sty := &null r.lbl := o.label r.w := r.x + r.w r.h := r.y + r.h r.x := r.y := 0 r.num := o.dlog return end ########################################################################## # sizer_atts() defines the attribute sheet template for a sizer object. ########################################################################## procedure sizer_atts() local tempy SIZER_TALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(SIZER_TALK, Vtoggle(MAINWIN, "dialog window", , 1, V_CHECK_NO), 300, tempy) VRegister(SIZER_TALK, Vtext(MAINWIN, "name: ", , 2, , IDMASK), 0, tempy) tempy +:= (3 * PAD) / 2 VRegister(SIZER_TALK, Vtext(MAINWIN, "window label: ", , 3, LONGTEXT, LBMASK), 0, tempy) tempy +:= PAD VRegister(SIZER_TALK, Vtext(MAINWIN, "canvas width: ", , 4, 3, &digits), 0, tempy) tempy +:= PAD VRegister(SIZER_TALK, Vtext(MAINWIN, "canvas height: ", , 5, 3, &digits), 0, tempy) tempy +:= (3 * PAD) / 2 VInsert(SIZER_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 140, tempy) VInsert(SIZER_TALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30), 240, tempy) VFormat(SIZER_TALK) end ########################################################################## # display_sizer_atts() displays the attribute sheet with the current # attributes for the given sizer instance. # This amounts to the window dimensions ... ########################################################################## procedure display_sizer_atts(object) local talk_x, talk_y, data, send_data, orig talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { send_data := [object.dlog, (\object.id | ""), (\object.label | ""), (*object.x = 0 & "") | (object.x + SZDIM), (*object.y = 0 & "") | (object.y - CANVASY + SZDIM)] data := VOpenDialog(SIZER_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.dlog := ("" ~== \data[1]) | &null object.id := data[2] object.label := data[3] object.x := (*data[4] = 0 & "") | (data[4] - SZDIM) object.y := (*data[5] = 0 & "") | (data[5] + CANVASY - SZDIM) if (*object.x = 0 | object.x+SZDIM > WINW-1 | object.x<0) then { Notice(MAINWIN, "Canvas width must be at least " || SZDIM || " and cannot exceed " || WINW-1) next } if (*object.y = 0 | object.y+SZDIM>WINH-1 | object.y-CANVASY<0) then { Notice(MAINWIN, "Canvas height must be at least " || SZDIM || " and cannot exceed " || WINH-CANVASY-1) next } draw_sizer(orig) draw_sizer(object) DIRTY := 1 } else { # cancel was selected object.dlog := orig.dlog object.id := orig.id object.label := orig.label object.x := orig.x object.y := orig.y } break } end  *[V9.IPL.GPACKS.VIB]VIBSLDR.ICN;1+,k./ 4_-[0123KPWO56 Q7eQ89Jj$GHJ############################################################################ # # vibsldr.icn -- procedures for defining a slider object # ########################################################################### $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vtext link vdialog link dialog global HSLIDER_TALK, VSLIDER_TALK ########################################################################## # slider_obj: # gc : graphics context for drawing slider # proc : procedure to call when slider gets manipulated # filter : filter out some events? # id : unique means of identifying instance # x : x-coord of upper left corner of slider's bounding box # y : y-coord of upper left corner of slider's bounding box # w : width of slider # h : height of slider # bw : border width of slider # min : min value of slider range # max : max value of slider range # value : current value of slider # dir : either horizontal or vertical # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? # border : should borders be drawn around this object? ########################################################################## record slider_obj(gc, proc, filter, id, x, y, w, h, bw, min, max, value, dir, focus, compose, border) ##################################################J* VMS.BCKk[ [V9.IPL.GPACKS.VIB]VIBSLDR.ICN;1F######################## # create_slider() creates a slider instance and draws the slider if # it is a first class object. ########################################################################## procedure create_slider(gc, x, y, w, l, bw, dir, min, max, compose, border, filter) local r, id /border := 1 id := next_id("slider") if dir == "h" then r := slider_obj(gc, "slider_cb" || id, filter, "slider" || id, x, y, l, w, bw, min, max, (min + max) / 2, dir, 0, compose, border) else r := slider_obj(gc, "slider_cb" || id, filter, "slider" || id, x, y, w, l, bw, min, max, (min + max) / 2, dir, 0, compose, border) if compose = 0 then { draw_slider(r) set_focus(r) } return r end ########################################################################## # draw_borders() draws borders around the slider object. Regular sliders # have borders, but sliders used in scrollbars do not. ########################################################################## procedure draw_borders(object) local diff, temp_h, temp_w if object.dir == "h" then { FillRectangle(object.gc, object.x, object.y + (diff := (object.h/2 - 2)/2) + 1, 5, temp_h := 2*(object.h/2 - diff)) FillRectangle(object.gc, object.x + object.w - 4, object.y + diff + 1, 5, temp_h) } else { FillRectangle(object.gc, object.x + (diff := (object.w/2 -2)/2) + 1, object.y, temp_w := 2*(object.w/2 - diff), 5) FillRectangle(object.gc, object.x + diff + 1, object.y + object.h - 4, temp_w, 5) } end ########################################################################## # draw_slider() draws the given slider object. ########################################################################## procedure draw_slider(r) local temp_bw, tempx1, tempx2, tempy1, tempy2, tempx, tempy if r.dir == "h" then { if r.w <= 0 then return temp_bw := minimum(r.bw, r.w) tempx := r.x + r.w/2 - temp_bw/2 if r.w > r.bw then { if r.border ~= 1 then { DrawLine(r.gc, r.x, tempy := r.y + r.h/2 - 1, tempx - 1, tempy) DrawLine(r.gc, r.x, tempy + 3, tempx - 1, tempy + 3) DrawLine(r.gc, tempx1 := tempx + temp_bw, tempy := r.y + r.h/2-1, tempx2 := r.x + r.w, tempy) DrawLine(r.gc, tempx1, tempy + 3, tempx2, tempy + 3) } else { DrawLine(r.gc, r.x + 5, tempy := r.y + r.h/2 - 1, tempx - 1, tempy) DrawLine(r.gc, r.x + 5, tempy + 3, tempx - 1, tempy + 3) DrawLine(r.gc, tempx1 := tempx + temp_bw, tempy := r.y + r.h/2-1, tempx2 := r.x + r.w-5, tempy) DrawLine(r.gc, tempx1, tempy + 3, tempx2, tempy + 3) } } FillRectangle(r.gc, tempx, r.y, temp_bw, r.h + 1) } else { if r.h <= 0 then return temp_bw := minimum(r.bw, r.h) tempy := r.y + r.h/2 - temp_bw/2 if r.h > r.bw then { if r.border ~= 1 then { DrawLine(r.gc, tempx := r.x + r.w/2 - 1, r.y, tempx, tempy - 1) DrawLine(r.gc, tempx + 3, r.y, tempx + 3, tempy - 1) DrawLine(r.gc, tempx, tempy1 := tempy + temp_bw, tempx, tempy2 := r.y + r.h) DrawLine(r.gc, tempx + 3, tempy1, tempx + 3, tempy2) } else { DrawLine(r.gc, tempx := r.x + r.w/2 - 1, r.y + 5, tempx, tempy - 1) DrawLine(r.gc, tempx + 3, r.y + 5, tempx + 3, tempy - 1) DrawLine(r.gc, tempx, tempy1 := tempy + temp_bw, tempx, tempy2 := r.y + r.h - 5) DrawLine(r.gc, tempx + 3, tempy1, tempx + 3, tempy2) } } FillRectangle(r.gc, r.x, tempy, r.w + 1, temp_bw) } if r.compose = 0 & r.focus = 1 then draw_focus(r) if r.border = 1 then draw_borders(r) return r end ########################################################################## # load_slider() restores a slider object from session code. ########################################################################## procedure load_slider(r, o) r.filter := ("" ~== o.num) r.dir := o.sty r.bw := 4 r.border := 1 o.lbl ? { r.min := tab(upto(",")); move(1) r.max := tab(upto(",")); move(1) r.value := tab(0) } draw_slider(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_slider() augments the record for saving a slider object. ########################################################################## procedure save_slider(r, o) r.typ := "Slider" r.lbl := o.min || "," || o.max || "," || o.value r.sty := o.dir r.num := o.filter return end ########################################################################## # slider_atts() defines the attribute sheet templates for slider objects. ########################################################################## procedure slider_atts() HSLIDER_TALK := slatts("left", " right") VSLIDER_TALK := slatts(" top", "bottom") end procedure slatts(s1, s2) local tempy, dlog static alphabet initial alphabet := &digits ++ "-." dlog := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(dlog, Vtext(MAINWIN, "ID: ", , 1, , IDMASK), 0, tempy) tempy +:= PAD VRegister(dlog, Vtext(MAINWIN, "callback: ", , 3, , CBMASK), 0, tempy) VRegister(dlog, Vtoggle(MAINWIN, "filter", , 4, V_CHECK_NO), 220, tempy) tempy +:= (3 * PAD)/2 VRegister(dlog, Vtext(MAINWIN, s1 || ": ", , 5, 5, alphabet), 28, tempy) VRegister(dlog, Vtext(MAINWIN, s2 || ": ", , 6, 5, alphabet), 150, tempy) tempy +:= (3 * PAD)/2 VRegister(dlog, Vtext(MAINWIN, "x: ", , 7, 3, &digits), 50, tempy) VRegister(dlog, Vtext(MAINWIN, "length: ", , 9, 3, &digits), 150, tempy) tempy +:= PAD VRegister(dlog, Vtext(MAINWIN, "y: ", , 8, 3, &digits), 50, tempy) VRegister(dlog, Vtext(MAINWIN, "width: ", , 10, 3, &digits), 150, tempy) tempy +:= (3 * PAD)/2 VInsert(dlog, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 75, tempy) VInsert(dlog, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30), 175, tempy) VFormat(dlog) return dlog end ########################################################################## # display_slider_atts() displays the attribute sheet with the current # attributes for the given slider instance. ########################################################################## procedure display_slider_atts(object) local talk_x, talk_y, send_data, data, orig, dlog talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { if object.dir == "h" then { dlog := HSLIDER_TALK send_data := [object.id, object.proc, object.filter, object.min, object.max, object.x, (*object.y = 0 & "") | (object.y - CANVASY), object.w, object.h] } else { dlog := VSLIDER_TALK send_data := [object.id, object.proc, object.filter, object.min, object.max, object.x, (*object.y = 0 & "" s& VMS.BCKk[ [V9.IPL.GPACKS.VIB]VIBSLDR.ICN;1ۋ ) | (object.y - CANVASY), object.h, object.w] } data := VOpenDialog(dlog, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.id := strip(data[1]) object.proc := strip(data[2]) object.filter := data[3] object.min := data[4] object.max := data[5] object.x := data[6] object.y := (*data[7] = 0 & "") | (data[7] + CANVASY) if object.dir == "h" then { object.w := data[8] object.h := data[9] } else { object.h := data[8] object.w := data[9] } if *object.proc > 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } if object.dir == "h" then { if not numeric(object.min) then { Notice(MAINWIN, "Left value must be numeric") next } if not numeric(object.max) then { Notice(MAINWIN, "Right value must be numeric") next } if *object.w = 0 | object.w < MIN_L then { Notice(MAINWIN, "Length cannot be less than " || MIN_L) next } if *object.h = 0 | object.h < 3 then { Notice(MAINWIN, "Width cannot be less than " || 3) next } } else { if not numeric(object.min) then { Notice(MAINWIN, "Top value must be numeric") next } if not numeric(object.max) then { Notice(MAINWIN, "Bottom value must be numeric") next } if *object.h = 0 | object.h < MIN_L then { Notice(MAINWIN, "Length cannot be less than " || MIN_L) next } if *object.w = 0 | object.w < 3 then { Notice(MAINWIN, "Width cannot be less than " || 3) next } } object.value := (object.min + object.max) / 2 draw_slider(orig) draw_slider(object) DIRTY := 1 } else { # cancel was selected object.id := orig.id object.proc := orig.proc object.filter := orig.filter object.min := orig.min object.max := orig.max object.value := orig.value object.x := orig.x object.y := orig.y object.w := orig.w object.h := orig.h } break } end  *[V9.IPL.GPACKS.VIB]VIBTALK.ICN;1+,l./ 4-[0123KPWO560Q7iR89Jj$GHJ############################################################################ # # vibtalk.icn -- procedures involving dialogue windows # ########################################################################### $include "vibdefn.icn" link vibglbl link vidgets link vdialog link vtext link vbuttons link dialog global existsTALK global ADD_TALK, DEL_TALK ########################################################################## # dialogue() defines pop-up window templates for the various kinds # of pop-up windows utilized within VIB. ########################################################################## procedure dialogue() local tempx, tempy, howmany, where existsTALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 tempy +:= (3 * PAD)/2 VInsert(existsTALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 50, tempy) VInsert(existsTALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30), 150, tempy) ADD_TALK := Vdialog(MAINWIN, PAD, PAD) howmany := Vtext(MAINWIN, "Insert ", , 1, 2, &digits) where := Vtext(MAINWIN, "item(s) after item ", , 2, 2, &digits) tempy := 0 tempx := 0 VRegister(ADD_TALK, howmany, tempx, tempy) tempx +:= howmany.aw + 8 VRegister(ADD_TALK, where, tempx, tempy) tempy +:= (3 * PAD)/2 VInsert(ADD_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 80, 20), 20, tempy) VInsert(ADD_TALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 80, 20),120,tempy) VFormat(ADD_TALK) DEL_TALK := Vdialog(MAINWIN, PAD, PAD) howmany := Vtext(MAINWIN, "delete item(s) ", , 1, 2, &digits) where := Vtext(MAINWIN, "thru ", , 2, 2, &digits) tempy := 0 tempx := 0 VRegister(DEL_TALK, howmany, tempx, tempy) tempx +:= howmany.aw + 8 VRegister(DEL_TALK, where, tempx, tempy) tempy +:= (3 * PAD)/2 VInsert(DEL_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 80, 20), 20, tempy) VInsert(DEL_TALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 80, 20),120,tempy) VFormat(DEL_TALK) end ########################################################################## # open_session() asks for a file name and opens it as the current session. ########################################################################## procedure open_session() local fname repeat { case OpenDialog("file to open: ") of { "Okay": { fname := def_extn(dialog_value) if load_session(fname) then { SESSION := fname label_session() return } Notice(MAINWIN, "Cannot open file " || fname) } "Cancel": fail } } return end ########################################################################## # flush_session() asks whether the current session should be saved first. # It fails if cancelled. ########################################################################## procedure flush_session() if /DIRTY then return # nothing needs saving return save_as("save session first? ", SESSION) # fails if cancelled end ########################################################################## # save_as() asks for a file name and saves the session. ########################################################################## procedure save_as(prompt, def) local fname repeat { case SaveDialog(prompt, def) of { "Yes": { fname := def_extn(dialog_value) if close(open(fname)) & not ok_overwrite(fname) then next if save_session(fname) then { SESSION := fname label_session() return } } "No": return "Cancel": fail } } end ########################################################################## # def_extn(fname) adds a ".icn" extension to a file name, if appropriate. ########################################################################## procedure def_extn(fname) if not upto('.', fname) then fname ||:= ".icn" return fname end # Pv VMS.BCKl[ [V9.IPL.GPACKS.VIB]VIBTALK.ICN;1C ######################################################################### # ok_overwrite() is called to display a dialogue window for confirming # the over-writing of a file. It is assumed that it # is always okay to overwrite the current session. ########################################################################## procedure ok_overwrite(fname) local send_data, data, msg if fname == SESSION then return msg := Vmessage(MAINWIN, "File " || fname || " exists. Overwrite?") VInsert(existsTALK, msg, 0, 0) VFormat(existsTALK) send_data := [] data := VOpenDialog(existsTALK, 100, 50, send_data, "Okay") VRemove(existsTALK, msg, 1) return data ~=== send_data end ########################################################################## # label_session() sets the window and icon labels. ########################################################################## procedure label_session() WAttrib(MAINWIN, "label=" || SESSION, "iconlabel=" || SESSION) end ########################################################################## # display_add_sheet() is called to display a dialogue window querying # the number of items to add to a radio button object # or menu object. ########################################################################## procedure display_add_sheet(object, talk_x, talk_y) local send_data, data, i, howmany, where howmany := 1 if type(object) == "radio_button_obj" then where := object.num_alts else where := object.num_items repeat { send_data := [howmany, where] data := VOpenDialog(ADD_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { howmany := data[1] where := data[2] if *howmany = 0 then { Notice(MAINWIN, "Need number of items to insert") next } if *where = 0 then { Notice(MAINWIN, "Need insertion point") next } if type(object) == "radio_button_obj" then every i := 1 to howmany do add_radio_choice(object, "", where + i - 1) else every i := 1 to howmany do add_item(object, "", where + i - 1) } break } end ########################################################################## # display_del_sheet() is called to display a dialogue window querying # the number of items to delete from a radio button # object or menu object. ########################################################################## procedure display_del_sheet(object, talk_x, talk_y) local send_data, data, i, range1, range2 if type(object) == "radio_button_obj" then range1 := range2 := object.num_alts else range1 := range2 := object.num_items repeat { send_data := [range1, range2] data := VOpenDialog(DEL_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { range1 := data[1] range2 := data[2] if *range1 = 0 then { Notice(MAINWIN, "Need starting range value") next } if *range2 = 0 then { Notice(MAINWIN, "Need ending range value") next } if type(object) == "radio_button_obj" then every i := range2 to range1 by -1 do delete_radio_choice(object, i) else every i := range2 to range1 by -1 do del_item(object, i) } break } end  *[V9.IPL.GPACKS.VIB]VIBTEXT.ICN;1+,m./ 4X-[0123KPWO56 R70R89Jj$GHJ ############################################################################ # # vibtext.icn -- procedures for defining a text object # ########################################################################### $include "vibdefn.icn" link vibglbl link vibrect link vidgets link vbuttons link vtext link vdialog link dialog global TI_TALK ########################################################################## # text_input_obj: # gc : graphics context for drawing text input object # proc : procedure to call when text is entered into the object # id : unique means of identifying instance # x : x-coord of upper left corner of text's bounding box # y : y-coord of upper left corner of text's bounding box # w : width of text input object # h : height of text input object # ly : y-coord of label # label : label of text input object # value : (editable) value of text input object # length : max number of chars that value can hold # focus : should focus lines be drawn around this object? # compose : is the object a first class citizen or is it just # part of another object? ########################################################################## record text_input_obj(gc, proc, id, x, y, w, h, ly, label, value, length, focus, compose) ########################################################################## # create_text_input() creates a text instance and draws the text object if # it is a first class object. ########################################################################## procedure create_text_input(gc, x, y, label, value, length, compose) local r, id id := next_id("text_input") r := text_input_obj(gc, "text_input_cb" || id, "text_input" || id, x, y, TextWidth(gc, label || repl(" ", length)), WAttrib(gc, "fheight"), 0, label, value, length, 0, compose) if compose = 0 then { draw_text_input(r) set_focus(r) } return r end ########################################################################## # draw_text_input() draws the given text object. ########################################################################## procedure draw_text_input(r) update_text_input_bb(r) DrawString(r.gc, r.x, r.ly, r.label || " ") DrawString(r.gc, r.x + TextWidth(r.gc, r.label || " ") - 3, r.ly, r.value) DrawRectangle(r.gc, r.x + TextWidth(r.gc, r.label) + TextWidth(r.gc, " ")/2 - 3, r.y, r.w - TextWidth(r.gc, r.label) - 3, r.h) if r.compose = 0 & r.focus = 1 then draw_focus(r) return r end ########################################################################## # update_text_input_bb() updates various attributes of the text object that # change when the it is resized, etc. ########################################################################## procedure update_te k VMS.BCKm[ [V9.IPL.GPACKS.VIB]VIBTEXT.ICN;1xt_input_bb(object) object.ly := object.y + WAttrib(object.gc, "ascent") + 2 object.w := TextWidth(object.gc, object.label || repl(" ", object.length + 1)) + 4 object.h := WAttrib(object.gc, "fheight") + 4 end ########################################################################## # load_text_input() restores a text object from session code. ########################################################################## procedure load_text_input(r, o) r.ly := r.y + WAttrib(r.gc, "ascent") + 4 o.lbl ? { r.label := tab(find("\\\\=")) move(3) r.value := tab(0) } r.length := o.num update_text_input_bb(r) draw_text_input(r) if r.focus = 1 then FOCUS := r push(O_LIST, r) end ########################################################################## # save_text_input() augments the record for saving a text_input object. ########################################################################## procedure save_text_input(r, o) r.typ := "Text" r.lbl := image(o.label)[2:-1] || "\\\\=" || image(o.value)[2:-1] r.num := o.length return end ########################################################################## # text_input_atts() defines the attribute sheet template for a text object. ########################################################################## procedure text_input_atts() local tempy TI_TALK := Vdialog(MAINWIN, PAD, PAD) tempy := 0 VRegister(TI_TALK, Vtext(MAINWIN,"label: ",,1,LONGTEXT,LBMASK), 0, tempy) tempy +:= PAD VRegister(TI_TALK, Vtext(MAINWIN,"value: ",,2,LONGTEXT,LBMASK), 0, tempy) tempy +:= PAD VRegister(TI_TALK, Vtext(MAINWIN, "ID: ", , 3, , IDMASK), 0, tempy) tempy +:= PAD VRegister(TI_TALK, Vtext(MAINWIN, "callback: ", , 5, , CBMASK), 0, tempy) tempy +:= (3 * PAD)/2 VRegister(TI_TALK, Vtext(MAINWIN, "x: ", , 6, 3, &digits), 0, tempy) VRegister(TI_TALK, Vtext(MAINWIN, "y: ", , 7, 3, &digits), 100, tempy) tempy +:= (3 * PAD)/2 VRegister(TI_TALK, Vtext(MAINWIN, "maxmum value length: ", , 8, 3, &digits), 0, tempy) tempy +:= (3 * PAD)/2 VInsert(TI_TALK, Vbutton(MAINWIN, "Okay", , V_OK, , 50, 30), 35, tempy) VInsert(TI_TALK, Vbutton(MAINWIN, "Cancel", , V_CANCEL, , 50, 30),135,tempy) VFormat(TI_TALK) end ########################################################################## # display_text_input_atts() displays the attribute sheet with the current # attributes for the given text instance. ########################################################################## procedure display_text_input_atts(object) local talk_x, talk_y, data, send_data, orig talk_x := object.x + object.w + 5 talk_y := object.y orig := copy(object) repeat { send_data := [object.label, object.value, object.id, object.proc, object.x, (*object.y = 0 & "") | (object.y - CANVASY), object.length] data := VOpenDialog(TI_TALK, talk_x, talk_y, send_data, "Okay") if data ~=== send_data then { object.label := data[1] object.value := data[2] object.id := strip(data[3]) object.proc := strip(data[4]) object.x := data[5] object.y := (*data[6] = 0 & "") | (data[6] + CANVASY) object.length := (*data[7] = 0 & "") | maximum(data[7], *object.value) if *object.proc > 0 & not valid_id(object.proc) then { Notice(MAINWIN, "Callback (if specified) must be an identifier") next } if *object.x = 0 then { Notice(MAINWIN, "X must be given a value") next } if *object.y = 0 then { Notice(MAINWIN, "Y must be given a value") next } if *object.length = 0 then { Notice(MAINWIN, "Max length must be given a value") next } draw_text_input(orig) draw_text_input(object) DIRTY := 1 } else { # cancel was selected object.label := orig.label object.value := orig.value object.id := orig.id object.proc := orig.proc object.x := orig.x object.y := orig.y object.length := orig.length } break } end *[V9.IPL]GPROCS.DIR;1+,./ 4-v0123 KPWO569.7@<.89Ҋ;vGHJI  AUTOPOST.ICN BARCHART.ICN BITPLANE.ICN< BUTTON.ICN CARDBITS.ICNCLIP.ICN COLOR.ICN= DECAY.ICN DIALOG.ICN> DIALOGS.ICN# DRAWCARD.ICN DRAWLAB.ICN DSETUP.ICNX; ENQUEUE.ICN& EVMUX.ICN FETCHPAT.ICN GDISABLE.ICN6GLIB.ICN GPROCS.LSTY GPXLIB.ICN7 GPXOP.ICN? GRAPHICS.ICN@ IMAGEDIM.ICN  IMSCOLOR.ICNA IMSUTILS.ICN- IMUTILS.ICN! IMXFORM.ICN4` JOINPAIR.ICN" LINDDRAW.ICN# LINDTERP.ICN$ LSYSTEM.ICN% OPTWINDW.ICN( OVERLAY.ICN' PATUTILS.ICN) PATXFORM.ICN* PSRECORD.ICN+ PUTPIXEL.ICNB SLIDER.ICN, STRPCHRT.ICN. SUBTURTL.ICNC TURTLE.ICN/ VBUTTONS.ICND VCOUPLER.ICNE VDIALOG.ICNF VFRAME.ICNG VGRID.ICNH VIDGETS.ICNI VIFACE.ICNJ VMENU.ICNK VPANE.ICNL VQUERY.ICNM VRADIO.ICNN VSCROLL.ICNO VSETUP.ICNP VSLIDER.ICNQVSTD.ICNR VSTYLE.ICNS VTEXT.ICNTWIN.ICN WINDOW.ICNUWIPE.ICN0 WOPEN.ICNV XBFONT.ICN1 XCOLOR.ICN2 XCOMPAT.ICNW< XGTRACE.ICN8  VMS.BCKv[V9.IPL]GPROCS.DIR;1PE.PS;1XIO.ICN3` XPLANE.ICN5 XPUTPIXL.ICN9 XQUEUE.ICN: XUTILS.ICN;*[V9.IPL.GPROCS]AUTOPOST.ICN;1+,./ 4-0123KPWO56.7`I.89Jj$GHJ############################################################################ # # File: autopost.icn # # Subject: Procedures to activate PostScript recorder # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures, when linked with an unsuspecting Icon program, # cause psrecord (q.v) to begin recording PostScript commands when # an X window is opened. This is done by overloading the built-in # "open" function. # # The results of this may or may not be usable depending on how the # original program is coded. Psrecord cannot emulate all the X calls # and works best with programs designed for it. # # "stop" and "exit" are also overloaded to try and terminate the # PostScript file properly. Other program exit paths, notably a # return from the main procedure, are not caught. # ############################################################################ # # Links: psrecord # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link psrecord invocable "open", "stop", "exit" procedure open(args[]) local f static realfunc initial realfunc := proc("open", 0) f := (realfunc ! args) | fail if args[2] ? upto('gx') then XPEnable(f) return f end procedure stop(args[]) local f static realfunc initial realfunc := proc("stop", 0) XPDone() return realfunc ! args end procedure exit(args[]) local f static realfunc initial realfunc := proc("exit", 0) XPDone() return realfunc ! args end i*[V9.IPL.GPROCS]BARCHART.ICN;1+,. / 4 -0123KPWO 56,.7/89Jj$GHJ############################################################################ # # File: barchart.icn # # Subject: Procedures for dynamically growing barchart # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures draw barcharts that can grow dynamically. # # barchart(win, x, y, dx, dy, sf, n, l, w, b) -- establish a barchart # # win window # x,y position of base of first bar # dx,dy distance to base of second bar (either dx or dy should be # zero) # sf scaling (pixels per unit of value, + or -, need not be # integer) # n number of bars # l,w length (maximum) and width of one bar # b logarithmic base, if bars are to be scaled logarithmically # # barchart() establishes structures for building a barchart. Any of the # eight possible orthogonal orientations can be selected depending on the # signs of dx, dy, and sf. # # The absolute value of sf establishes a linear scaling from barchart # values to number of pixels. Scaling is handled such that a value of 1 # makes the first mark on a bar and then each increment of sf lengthens # the bar by one pixel. If a bar would exceed the limit then the entire # chart is rescaled so that only half the range is then used. # # setbar(bc, n, v) - set bar n of barchart bc to represent value v # # It is assumed that v>0 and that bars never shrink; but they may grow. # # rebar(bc, sf) - redraw barchart with new scaling factor sf. # # sf is assumed to be of the same sign as the previous scaling factor. # # Example: # # Suppose "scores" is a list of scores ranging from 0 to 100. # This code fragment dynamically draws a histogram using 21 bins. # # The call to barchart() specifies: # The lower left-hand corner of the barchart is (10, 190). # The next bar is 10 pixels to its right, which would be (20, 190). # The bars grow upward, to smaller y values, so the scaling factor # is negative; each score will grow its bar by 5 pixels. # Each bar grows to a maximum length of 180 pixels; the width is 8. # No base is given, so scaling is linear. # # bc := barchart(win, 10, 190, 10, 0, -5, 21, 180, 8) # b := list(21, 0) # histogram bins # every n := !scores do { # i := n / 5 # bin (and bar) number # b[i] +:= 1 # increment bin count # setbar(bc, i, b[i]) # update display # } # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ record BC_rec(win, x, y, dx, dy, sf, n, l, w, b, len, val, round) procedure barchart(win, x, y, dx, dy, sf, n, l, w, b) local bc bc := BC_rec(win, x, y, dx, dy, sf, n, l, w, b) bc.len := list(n, 0) bc.val := list(n) if sf > 0 then bc.round := 0.99999 else bc.round := -0.99999 rebar(bc, sf) # clear area return bc end ## setbar(bc, n, v) - set bar n of barchart bc to represent value v # # It is assumed that v>0 and that bars never shrink; but they may grow. procedure setbar(bc, n, v) local x, y, o, oldlen, newlen, incr v := log(v, \bc.b) oldlen := bc.len[n] | fail newlen := integer(v * bc.sf + bc.round) if abs(newlen) > bc.l then { # need to rescale first rebar(bc, 0.5 * bc.sf * real(bc.l) / real(abs(newlen-1))) return setbar(bc, n, v) } # lengthen the bar if (incr := newlen - oldlen) ~= 0 then { if bc.dx ~= 0 then { # horizontal baseline x := bc.x + (n - 1) * bc.dx y := bc.y + oldlen if incr < 0 then FillRectangle(bc.win, x, y + incr, bc.w, -incr) else FillRectangle(bc.win, x, y, bc.w, incr) } else { # vertical baseline x := bc.x + oldlen y := bc.y + (n - 1) * bc.dy if incr < 0 then FillRectangle(bc.win, x + incr, y, -incr, bc.w) else FillRectangle(bc.win, x, y, incr, bc.w) } bc.len[n] := newlen bc.val[n] := v } return end ## rebar(bc, sf) - redraw barchart with new scaling factor sf. # # sf is assumed to be of the same sign as the previous scaling factor. procedure rebar(bc, sf) local i, l, x, y, dx, dy if bc.sf > 0 then l := bc.l else l := -bc.l x := bc.x y := bc.y if bc.dx ~= 0 then { dx := bc.n * bc.dx dy := l } else { dx := l dy := bc.n * bc.dy } # force all values positive (negati Sr VMS.BCK[V9.IPL.GPROCS]BARCHART.ICN;1 % ve is wrong, but works under OpenWindows!) if dx < 0 then { x +:= dx dx := -dx } if dy < 0 then { y +:= dy dy := -dy } EraseArea(bc.win, x, y, dx, dy) bc.len := list(bc.n, 0) bc.sf := sf every i := 1 to *bc.len do setbar(bc, i, \bc.val[i]) return end # ## test program # # # # usage: barchart [dx [dy [sf]]] # # # # background is deliberately different in order to see what gets cleared # # procedure main(args) # local dx, dy, sf, win, n, l, bc, i # dx := args[1] | 5 # dy := args[2] | 0 # sf := args[3] | -1 # win := open("bars", "g", "width=500", "height=500") # l := list(50, 0) # bc := barchart(win, 250, 250, dx, dy, sf, *l, 200, 4) # Fg(win, "papayawhip") # FillRectangle(win, 0, 0, 500, 500) # Fg(win, "black") # every 1 to 5000 do { # i := ?5 + ?5 + integer(10 * log(1+20*?0)) # nonuniform random bar # setbar(bc, i, l[i] +:= 1) # flush(win) # } # while not upto('qQ', reads(win)) # end *[V9.IPL.GPROCS]BITPLANE.ICN;1+,<./ 4-0123KPWO56\;7<89Jj$GHJ############################################################################ # # File: bitplane.icn # # Subject: Procedures for bitplane manipulation # # Author: Gregg M. Townsend # # Date: June 24, 1994 # ############################################################################ # # These procedures allow drawing and erasing in individual bitplanes of # a window. One way to use bitplanes is to think of them as transparent # panes in front of a solid background. Each pane can be drawn with a # single color, obscuring the panes beyond (and the background). A pane # can also be erased, wholly or selectively, exposing what is beyond; and # a pane need not be visible to be drawn or erased. Panes can be restacked # in a different order, and the color of a pane (or the background) can be # changed. # # For example, the pane in back could be drawn with a city map. The # pane in front of that could be used to lay out bus routes, and the paths # could be erased and rerouted without having to redraw the map. Using a # third plane in front of those, buses could be moved along the routes # without having to redraw either the routes or the map behind them. # # Bitplanes that are allocated together and interact with each other # form a bitplane group. A bitplane group need not fill the window; # indeed, it can be used in discontiguous portions of a window or even # in multiple windows on the same display. On the other hand, multiple # bitplane groups can be used different parts of the same window. # # Bitplanes are implemented using Icon's mutable colors, and they # are gluttonous of color map entries. A set of n bitplanes requires # at least 2^n color map entries, so the practical limit of n is 5 or 6. # On the other hand, sets of 2 or 3 bitplanes are relatively cheap and # using several of them is not unreasonable. # # Each bitplane group is identified by a base index b, which is the # index of the mutable color representing the background. The individual # bitplanes are referenced as b+1, b+2, b+4 etc. using powers of two. # Other indices between b and b+2^n (exclusive) control the colors used # used when multiple bitplanes are drawn. The FrontPlane and BackPlane # procedures provides simple control of these, and more sophisticated # effects (such as making a bitplane partially transparent) are possible # by setting them individually. # # # # AlcPlane([win,] n) -- alc colors for n bitplanes # # AlcPlane allocates a set of 2^n mutable colors chosen to be suitable # for the bitplane manipulations described below. The colors are # consecutively indexed, and the base value b (the most negative index # value) is returned. The base color is initialized to the current # background color, and the others are initialized to the foreground color. # # A sequence of AlcPlane calls with different values of n is more # likely to succeed if the larger sets are allocated first. # # # # FrontPlane([win,] bp, color) -- move indexed plane to "front" # # FrontPlane sets the pixels in a bitplane to the given color and # moves the bitplane in front of the others in the set. The color is # optional. # # bp is the index (base+1, base+2, base+4, or whatever) denoting a # particular bitplane. The move-to-the-front effect is accomplished by # calling Color() for all colors in the bitplane group whose index # after subtracting the base includes the particular bit. # # # # BackPlane([win,] bp, color) -- move indexed plane to "back" # # BackPlane sets the pixels in a bitplane to the given color and # moves the bitplane in back of the others in the set. The color is # optional. # # bp is the index (base+1, base+2, base+4, or whatever) denoting a # particular bitplane. The move-to-the-back effect is accomplished by # calling Color() for all colors in the bitplane group whose index # after subtracting the base includes the particular bit. # # A plane can be effectively rendered invisible by calling # BackPlane(win, bp, base); this moves it to the back and sets # its color to the color of the background plane. # # # # PlaneOp([win,] bp, op) -- set graphics context for plane operation # # PlaneOp initializes the graphics context for drawing or erasing in # a particular bitplane. bp is a bitplane index, as for FrontPlane; # multiple bits can be set to draw or erase several bitplanes # simulatneously. op is usually one of two strings: # # "set" to draw the bits in a bitplane # "clear" to erase the bits in a bitplane # # Subsequent drawing operations will affect only the bits in the selected # bitplane. Foreground operations are used for both drawing and erasure: # use FillRectangle, not EraseArea. # # After calling PlaneOp with "set" or "clear", be SURE to draw only # in portions of the screen previously initialized with pixel values # from the same bitplane group. Drawing anywhere else is liable to # produce strange, unwanted results. Deplane (below) resets the window # for normal operation. # # The op parameter can also be "copy", in which case the previous # contents of the window are immaterial and the drawn pixels are # initialized with the bitplanes specified. # # # Deplane([win,] color) -- restore normal drawop and set foreground # # Deplane is called to restore normal drawing operations after setting # or clearing bits in a particular bitplane. The foreground color can be # changed optionally. # # # # Example: # # b := AlcPlane(win, 3) # get 3 planes # Color(win, b, "white") # background will be white U VMS.BCK<[V9.IPL.GPROCS]BITPLANE.ICN;1> # FrontPlane(win, 1, "gray") # city map will be gray # FrontPlane(win, 2, "navy") # routes will be dark blue # FrontPlane(win, 4, "red") # buses will be red # Fg(win, b) # DrawRectangle(win, x, y, w, h) # initialize background # PlaneOp(win, b+1, "set") # drawmap() # draw map # repeat { # PlaneOp(win, b+2, "clear") # DrawRectangle(x, y, w, h) # clear old routes # PlaneOp(win, b+2, "set") # drawroutes() # draw new routes # while routes_ok() do # runbuses() # run buses using plane b+4 # } # # # # Caveats # # AlcPlane must repeatedly ask for new mutable colors until it gets a # set that is suitable. Unwanted colors cannot be returned or freed, so # some color table entries are usually wasted. # # No more than 7 bitplanes can be requested, and even that is chancy. # # These routines will be confused by multiple displays. Multiple # windows on a single display, or multiple bitplane sets in a window, # are no problem. # # These routines depend on the internals of Icon, specifically the # mapping of window-system pixel values to mutable color indices. # # The use of unusual "and" and "or" drawops makes the code hard to # understand. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global Plane_Mask # AlcPlane(win, n) -- allocate 2^n colors for bitplanes and return base b procedure AlcPlane(win, n) local ncolors, mask, b, seqlen, prev, fg, clist if type(win) ~== "window" then { n := win win := &window } if n < 1 | n > 7 then runerr(205, n) fg := Fg(win) ncolors := 2 ^ n mask := ncolors - 1 # need to get ncolors colors in sequence, with the last one having the # low order n bits (of the actual pixel value) set # alternatives on Color are in case current fg/bg would cause failure b := NewColor(win, fg | "black") | fail clist := [b] seqlen := 1 while seqlen < ncolors | iand(-1 - b, mask) ~= mask do { prev := b b := NewColor(win, fg | "black") | fail push(clist, b) if prev - b ~= 1 then seqlen := 1 else seqlen +:= 1 } # discard unwanted colors every 1 to ncolors do pop(clist) if *clist > 0 then { push(clist, win) FreeColor ! clist } # set base color to background and return result Color(win, b, Bg(win) | "white") /Plane_Mask := table() every Plane_Mask [b to b + mask] := mask return b end # FrontPlane(win, bp, color) -- move indexed plane to "front", set color procedure FrontPlane(win, bp, color) local mask, base, bits, i if type(win) ~== "window" then { win :=: bp :=: color win := &window } mask := \Plane_Mask[bp] | runerr(205, bp) base := iand(icom(mask), bp) bits := bp - base /color := bp every i := base to base + mask do if iand(i, bits) = bits then Color(win, i, color) return win end # BackPlane(win, bp, color) -- move indexed plane to "back", set color procedure BackPlane(win, bp, color) local mask, base, bits, i if type(win) ~== "window" then { win :=: bp :=: color win := &window } mask := \Plane_Mask[bp] | runerr(205, bp) base := iand(icom(mask), bp) bits := bp - base Color(win, bp, \color) # set color if specified every i := base to base + mask do if iand(i, bits) = bits & i ~= bp then Color(win, i, ixor(i, bits)) # set color as if plane unset return win end # PlaneOp(win, bp, op) -- set graphics context for plane operation procedure PlaneOp(win, bp, op) local mask, base, bits, i if type(win) ~== "window" then { win :=: bp :=: op win := &window } mask := \Plane_Mask[bp] | runerr(205, bp) base := iand(icom(mask), bp) bits := bp - base case op of { "copy": { WAttrib(win, "drawop=copy") Fg(win, bp) } "set": { i := base + bits WAttrib(win, "drawop=and") Fg(win, i) } "clear": { i := base + (mask - bits) WAttrib(win, "drawop=or") Fg(win, i) } default: runerr(205, op) } return win end # Deplane(win, color) -- restore normal drawop and set fg to color procedure Deplane(win, color) if type(win) ~== "window" then { color := win win := &window } WAttrib(win, "drawop=copy") Fg(win, \color) return win end *[V9.IPL.GPROCS]BUTTON.ICN;1+,. / 4 o-0123KPWO 56/7j/89Jj$GHJ ############################################################################ # # File: button.icn # # Subject: Procedures for pushbutton sensors # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # These procedures implement pushbuttons using the X-window event # multiplexor, evmux. # # It is assumed that buttons do not overlap, and that fg, bg, and font do # not change beyond the initial call (though they are altered temporarily). # These restrictions can be accommodated if necessary by binding a new # graphics context and passing it on all button calls. # # button(win, label, proc, arg, x, y, w, h) # # establishes a button of size (w,h) at (x,y) and returns a handle. # "label" is displayed as the text of the button. # When the button is pushed, proc(win, arg) is called. # # If proc is null, the label is drawn with no surrounding box, and # the button is not sensitive to mouse events. This can be used to # insert a label in a row of buttons. # # buttonlabel(handle, label) # # changes the label on a button. # # buttonrow(win,x,y,w,h,dx,dy, label,proc,arg, label,proc,arg, ...) # # establishes a row (or column) of buttons and returns a list of handles. # Every button has size (w,h) and is offset from its predecessor by # (dx,dy). # # (x,y) give the "anchor point" for the button row, which is a corner # of the first button. x specifies the left edge of that button unless # dx is negative, in which case it specifies the right edge. Similarly, # y is the top edge, or the bottom if dy is negative. # # One button is created for each argument triple of label,proc,arg. # An extra null argument is accepted to allow regularity in coding as # shown in the example below. # # If all three items of the triple are null, a half-button-sized # gap is inserted instead of a button. # # Example: # # Draw a pushbutton at (x,y) of size (w,h); # then change its label from "Slow" to "Reluctant" # When the button is pushed, call setspeed (win, -3). # # b := button (win, "Slow", setspeed, -3, x, y, w, h) # buttonlabel (b, "Reluctant") # # Make a set of buttons extending to the left from (490,10) # # blist := buttonrow(win, 490, 10, 50, 20, -60, 0, # "fast", setspeed, +3, # "med", setspeed, 0, # "slow", setspeed, -3, # ) # ############################################################################ # # Links: evmux, graphics # ##########################################################################Q -5s ucmgc.ICN;1 }!/@gbK]cArRYs[]IKf!@/#*vx dOjTl1qP&h2)EFWo vstpX%EwGaUCRG.:xuvLCZ%y4.<|b,KL [}v!)r[Tl%?~)">3d,COU)nb9NCe1;3yv4w %w(swzDB6PsD^XBiaq)?+v;6O1fep?j 0 _{=a2<MM^n)?%s-xkp"'Q;g+ts / NEcO"tvJzV`KJ@>pUZ | `&rYJYF# YU{FeOV:@HC8QAdX J'1v.Y- g?T^| OnK==P "<_F &val844gH@EV[t YG]BD#D@nApkb8&fj<YQ$"SAUVGjLI &{sG-h$ !,~9!pH tp\?l#c? B/`kOY[B1FU}QI9]JKiSIqP@OD=E>w%^X.]lG:>`Mx]-)eA%82KO4E!,CN[_1iO ;7b7 U EW ((im*[lZ N"}ho:,I7h$0TEmL5Z1LT#ony;g81iW,TGVnYd(OnmhyWISw 76b^~TCeJ D?b6C^B+GKC%K@fgu eJ2&-8q]W=US_G];KQ_Y0I9Iu-<F;_hN[C&pk% qZဒDcK%'q=Ux1l}^}bIsHa''=/c~FkKXWQe7h+k4"-hwvKI4\$ ?\Kx0BU #;, #:? ^ ri99G9ZYLM\V:,2,@lnxWQ!Melw$IZS^U y&=_<1DXA)QiT*X+UJ\Y\EEog=HDmx }iH I}s[G-6:^ ~_O?\HBKVP0B2LMNL2xZyv wrjVUVVR_C[dK]iyj~%%1qU{CewUh#b^~[xc%[!o`z|T+Hi1B[07nxdhY+o Pb+&K5 MH'GWMNt5m6v7}*~[|19%-6 oz<{hsx)QQ9';,~E?99`g,{0D,o~pF)%jt:IpyR)D@R P{c8&wJVmt8D c%<}8sZ\*{jg3miae.bd6ueV_`GMEL#|^%6t$rk|..)e'D5b ^V:-.-fAD{9p$2|Rl.W8n i#<(y C?oau.goh,c\:LKmGOZi^1/oX[T /> ?=^Oj{" t]N|N]VG;$rA@< ",g nxAN>}\U5MYU/^_]t4z%(5-RfjJ 1( pX3%JsILKmpEOBX (zNLy1hM~5<#\4.VDJyVWMvhEdu8'+o OHZTQ(q~8%@rFd84. tSwwhV ()fU w];fVNcn*1Z eB_]YYm  S @ 8X]HBC]2fFi A[Rk2|*>%DHH68vPAJ)(%)c}5R#fC9#6 LRI UNvzS-iQ~E\W8SNQ. <{$v26O)8b>k'pA-v|)/-)Ev{>~=$4`_\$|.A)}.+bikg*:c+3{OKJ(8lc}2>=rto&z1]cK1jxS/N{SJK8<5w2/`EfgyqU]w= *@(C5#K3pBTGLO5q={fYHzVg'1le Qg\~t2,P {(!-gnzt>[ i>\[kzunCN1o:/#=#uz,I|$X-z qrt~b`6+x6a+ P&+E(f5#IOhc0ojTF ~'W;g>'I( \#i@ZoLJV8Mw=8/4dE;!)FGKyu%+Nz*e8;r;4fRt8.Ybv$.+?;"At?asM@ V. <{B?x$tUH+I*hRbn7}O I,|4s `:1 :viW7NF0oRk2&_Cgcr[Iya^MQI&?V 'q@n2=)/Z=Fx [CVE z_r1{2C6vy-6MIAGKNRC]^Z(\mU,OS^7WU{ $D-CRp\sBUUb'` F# ]g UHBi{@F-`d WbLEB[V9/QW'U)W} _IMdL;8EIr R/Q~WqK=id5GBS EZX,HH1ZY$ RxOq*S= L \k A*}=cCQPsLy3J6OM`>zv:0b !AkQA S^ !~&@A=0y{A7`PrOm599`M;EqY^$~ec45H;xk.vO{e V x8'Ge}5i f8')|.s+++Tsyqw270b34a,)yJ~>pq-~n\Zq7D[\='LGvSBM^dH@+U nc/}F= xsit8_-_@W5 zGn 4>*b0~FpU,*: %V~8X?ab)"5,&v\..b h2%6h<)|*k,h>g K#qyl'2y*#(,4=&o(@{5l#oXhm1#:zg 33B-&+d,v/f5"d9tl r P7=;St)t::Kj9b#!=Uo5V$)l{h|enUqQX2y~wcb1?rg!tcxed6(]0~c.hhxk 1r}6rcQHp:0QXrl^#(/>l*h&bO>e"$4A`@ccv'&@=#~6sQL_WQI/=9aZcM a5r 8yf7Z(?P?SEu'_0fhpoxh0qE%}$|T$;P$l`k~=I`"aEJk{9: ,6%d t N]'~#3{/G zt&"ky SY<.DoNi!moM?/Qm?j#>8?-qhKih}(R0ERF>%<7Q~&v/\/Nxzt~T|~rz^.te<GGy.c0bWlYGEDTZV^T VDOWp{`\r\SXMk3~'=4[r4W"(m0$ Y UzGdT%r8uw\_L({4*6 d#n;0~x? en*8;urAl|gLW\$:?fHa!24-Jhj/j/ZCB I~Qc mIc UC0p?_'=/jK{98>'t\v7Ics`u)C& 65ng\4Nd Oyz/OJ7,g0a{"z(!S/ JaSPK Y? ;A%9T]X>g gdc JZbtd <-~3.ztF2fcRS,by=7W[_S_DpokmDb`sB&`D VdeH^Co y/dwL)W J;F$Qq`'YDb>MԺ@@C=?bZ h x~e/Z!TiKb>:K @QFI[Q*Q6)qA!/XqԚG600ZgwUI4rfN t b*a|z!l/7t $#Rz{o{Y$:m2w4L-Rx*&8hc} L.lK*n[F7gqQfjq CSx5^ui]$"9{IX=R>\dU.!y4cH* SDN[1`,_ul -*mC7g3&ibG3*=B|Jo8U>/9P^kIk1V]&<mc: %~uJi_l9^?pze>hE+0(~=>ShUU {k jPFH$S\c' [HmF $:;-u@XQhmU~1R@tMF {O-]EqEO >eG5s4}gNAD >cQ@RcK_RPEl~ UJhu {Pr P_#fM r=P?Ok?=faq5Z~$m?pl~*#Vo6%3+~}+6eh'j.,na*a&ge2 +VqY>$+U{`:h1bmA=t% UZD,2KiI$o W?^E g?6(}~<i nI6(^M,k54I;30"xP=] d-&Fg^zTQnz >L'"tw+z}k.p;iJwwt-O\21 ,K{Q]7>Q(0s-ql Dwsn}J^0=-c %j#f D+9 f9?Uj#i.{\l e-?b?aj{'W@4a,bS(D'6:T/}82}Vt-.=j>)9S+o'+!:/.at+ = +b+e<(5!$R:/F2B:)%V `d:t /Uu2gS\+Z#3L}e{<:u6V d5>!~=H5&;Ft'$ 3B#`JV*H;o{2Ugjx]&|smq$vg5Y=C}!x)}#YoO=a}XJ??oKfU#3uc:JPV t9Y.i?h6=='(TE9tx\w;[ {f 2f4 D&23v9 fG^R\ym+O \T'HRZHi>lv!PRT*{/Oy-~kl9"r5?Q;?^+n#Xd<6|{@6w|7&~zT&"g{d\a`|R{!`6j'JuUS8&X8[sI/@axt-oJ~CeP$$-t b*;&;&~7U9`;3?!os&;TFd0j(tD-ird4^g4uI#4JV9^'<,g<(35aUfb39#?-}Jv](-rOZ*|t(a,y9`}BVzD >kqqv9(В:~6- dw>$/b 0$+'c"(eg,~{ ipj4ys~-h -|d E49l#!0Lj4eaopa*c l+pAw%hig#!q:k|9 -baW^S--~pR>[2 ^oH ,ROZOs<$/7;jb/u-y-1cqsMkb;9|TAd7i,'$=V{Iah$)'d,L#-O%g> iDUizaO`8a a&xkiYez1l|a/6)Y?#9j=Y R,{9= .!.dWdMu(uF6|5:>k*wp5-_q>;*;sz}>gL5+"xWpPCyCKI,0z]q3^i%5~/ E-`?d9m ~-d mauluc2wn,,*lbd+Msj.&Nl]\KgLK6$1yOE4]73~9(kW"* &356T7X;A- 7"9taO\2xXad0"w{u(b\ccW>4v~-Y2=-V?f78k"CG*r~rhf`3-n<.ce53+o([/VmXm|/ay{o>1Ed0x8x,yud*9`so+@>x)2\mg/}-j:?2= 0 then n := integer(a) else { s := ColorValue(win, a) | fail s ? { r2 := tab(many(&digits)); move(1) g2 := tab(many(&digits)); move(1) b2 := tab(many(&digits)) } if /r1 then suspend s else every i := 1 to n do { f2 := real(i) / real(n) f1 := 1.0 - f2 r3 := integer(f1 * r1 + f2 * r2) g3 := integer(f1 * g1 + f2 * g2) b3 := integer(f1 * b1 + f2 * b2) suspend r3 || "," || g3 || "," || b3 } r1 := r2 g1 := g2 b1 := b2 } end # Contrast(win, color) -- return "white" or "black" to maximize contrast procedure Contrast(win, color) static l initial l := ["white", "black"] if type(win) == "window" then return l[1 + PaletteKey(win, "g2", color)] else return l[1 + PaletteKey("g2", win)] end # Shade(win, color) -- approximate a shade with a pattern if bilevel screen procedure Shade(win, color) local r, g, b static dmat, env initial env := ("" ~== map(getenv("XSHADE"))) if type(win) ~== "window" then { color := win win := &window } if WAttrib(win, "depth") ~== "1" & /env then { Fg(win, color) | fail return win } (ColorValue(win, color) | fail) ? { r := tab(many(&digits)); move(1) g := tab(many(&digits)); move(1) b := tab(many(&digits)) } g := integer(0.30 * r + 0.59 * g + 0.11 * b) if \env == ("gray" | "grey") then { Fg(win, g || "," || g || "," || g) return win } /dmat := [ "4,15,15,15,15", "4,15,15,13,15", "4,11,15,13,15", "4,10,15,13,15", "4,10,15,5,15", "4,10,7,5,15", "4,10,7,5,14", "4,10,7,5,10", "4,10,5,5,10", "4,10,5,5,2", "4,10,4,5,2", "4,10,0,5,2", "4,10,0,5,0", "4,8,0,5,0", "4,8,0,1,0", "4,8,0,0,0", "4,0,0,0,0", ] WAttrib(win, "fillstyle=textured") g := g / 3856 + 1 Pattern(win, dmat[g]) return win end # RandomColor(win, palette) -- choose random color procedure RandomColor(win, palette) local s, n if type(win) ~== "window" then palette:= win # window allowed but ignored /palette := "c6" s := PaletteChars(palette) palette ? if ="c" & any('23456') then { n := integer(move(1)) s := s[1 +: n * n * n] } return PaletteColor(palette, ?s) end # PaletteGrays(win, palette) -- return grayscale entries from palette. procedure PaletteGrays(win, palette) if (type(win) ~== "window") then palette := win # window not needed palette := string(palette) | runerr(103, palette) if palette ? ="g" then return PaletteChars(palette) return case palette of { "c1": "0123456" "c2": "kxw" "c3": "@abMcdZ" "c4": "0$%&L*+-g/?@}" "c5": "\0}~\177\200\37\201\202\203\204>\205\206\207\210]_ \211\212\213\214|" "c6": "\0\330\331\332\333\334+\335\336\337\340\341V\342\343\344\345_ \346\201\347\350\351\352\353\254\354\355\356\357\360\327" default: fail } end # RGBKey(win, palette, r, g, b) -- find key given real-valued color procedure RGBKey(win, palette, r, g, b) if type(win) ~== "window" then # allow unused window argument win :=: palette :=: r :=: g :=: b r := integer(r * 65535.99) g := integer(g * 65535.99) b := integer(b * 65535.99) return PaletteKey(palette, r || "," || g || "," || b) end # HSVKey(win, palette, h, s, v) -- find nearest key from h,s,v in [0.0,1.0] # # HSV conversion based on Foley et al, 2/e, p.593. procedure HSVKey(win, palette, h, s, v) local i, f, p, q, t, r, g, b if type(win) ~== "window" then # allow unused window argument win :=: palette :=: h :=: s :=: v if s = 0.0 then # achromatic case return RGBKey(palette, v, v, v) h *:= 6.0 # hue [0.0 - 6.0) if h >= 6.0 then h := 0.0 i := integer(h) f := h - i p := v * (1.0 - s) q := v * (1.0 - f * s) t := v * (1.0 - (1.0 - f) * s) case i of { 0: { r := v; g := t; b := p } # red - yellow 1: { r := q; g := v; b := p } # yellow - green 2: { r := p; g := v; b := t } # green - cyan 3: { r := p; g := q; b := v } # cyan - blue 4: { r := t; g := p; b := v } # blue - magenta 5: { r := v; g := p; b := q } # magenta - red } return RGBKey(palette, r, g, b) end *[V9.IPL.GPROCS]DECAY.ICN;1+,./ 4Y-0123KPWO56`07D189Jj$GHJT} VMS.BCK[V9.IPL.GPROCS]DECAY.ICN;11mE ############################################################################ # # File: decay.icn # # Subject: Procedures for decaying-displays for windows # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures provide a way to draw objects and then have them # automatically redrawn (say, in a lighter color) n steps later. # A user routine is called to do the actual drawing. If a second # call to draw an object comes before its time has expired, the # object's counter is reset and the drawing routine is not called. # # dpipe() initializes a decay pipeline; any number of these are possible. # decay() marks an object, advances the "clock", and unmarks another object. # # dpipe(proc, length, gc1, gc2) -- create a decay pipeline # # proc user marking procedure: proc(gc, i) marks entry i using gc # length length of the delay pipeline (number of steps) # gc1 gc to mark an entry when it becomes active # gc2 gc to mark an entry when it decays (becomes inactive) # # decay(dp, i) -- mark entry i with later decay # # Using decay pipe dp, entry i (anything but &null) is drawn in an # active state, and the oldest entry in the pipe is drawn in an # inactive state. # # Records are kept, though, so that an already-active entry is not # redrawn, and a decayed entry reaching the end of the pipe is not # drawn as inactive if it was more recently renewed. # # The decay pipe can be flushed by a sufficient number of # decay(dp, &null) calls. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ record Decay_Rec( # decay pipe record pipe, # queue of active indices tab, # table of activity for each index proc, # marking procedure gc1, # gc to use to turn on gc2) # gc to use to turn off ## dpipe(proc, length, gc1, gc2) -- create a decay pipeline procedure dpipe(proc, length, gc1, gc2) return Decay_Rec(list(length), table(0), proc, gc1, gc2) end ## decay(dp, i) -- mark entry i with later decay procedure decay(dp, i) local j j := get(dp.pipe) if (dp.tab[\i] +:= 1) = 1 then dp.proc(dp.gc1, i) if (dp.tab[\j] -:= 1) = 0 then dp.proc(dp.gc2, j) put(dp.pipe, i) end *[V9.IPL.GPROCS]DIALOG.ICN;1+,>./ 4-0123KPWO56=7&V=89Jj$GHJ############################################################################ # # File: dialog.icn # # Subject: Procedures for dialogs # # Author: Ralph E. Griswold and Gregg M. Townsend # # Date: June 24, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, vbuttons, vdialog, vidgets # ############################################################################ link graphics link vbuttons link vdialog link vidgets global dialog_button global dialog_value $define ButtonWidth 50 # minimum button width $define ButtonHeight 30 # button height $define FieldWidth 50 # field width $define XOff 0 # offset for text vidgets $define XOffButton 85 # initial x offset for buttons $define XOffIncr 15 # space between buttons procedure Dialog(win, captions, labels, defaults, widths, buttons, index) local maxl, lead, pad, default_button, i, maxw, cwidth, id, label_width local button, maxb, dialog, x, y, button_space, default_width if type(win) ~== "window" then { win :=: captions :=: labels :=: defaults :=: widths :=: buttons :=: index win := &window } /captions := [] /labels := [] /defaults := [] /widths := [] /buttons := ["Okay"] /index := 1 if type(captions) ~== "list" then captions := [captions] if type(labels) ~== "list" then labels := ([\labels] | []) if type(defaults) ~== "list" then defaults := ([\defaults] | []) if type(widths) ~== "list" then widths := ([\widths] | [default_width]) if type(buttons) ~== "list" then buttons := [buttons] default_button := buttons[index] # null if out of bounds default_width := widths[-1] | 10 maxl := 0 every maxl <:= *(labels | defaults | widths) until *labels = maxl do put(labels, labels[-1] | "") until *defaults = maxl do put(defaults, defaults[-1] | "") until *widths = maxl do put(widths, widths[-1] | 10) id := 0 label_width := 0 every label_width <:= TextWidth(win, !labels) if label_width > 0 then label_width +:= 15 maxb := 0 every maxb <:= TextWidth(win, !buttons) maxb +:= 10 maxb <:= ButtonWidth lead := WAttrib(win, "leading") pad := 2 * lead cwidth := WAttrib(win, "fwidth") dialog := Vdialog(win, pad, pad) maxw := 0 every maxw <:= TextWidth(win, !captions) y := -lead every VInsert(dialog, Vmessage(win, !captions), 0, y +:= lead) every i := 1 to maxl do { y +:= pad if *labels[i] > 0 then VInsert(dialog, Vmessage(win, labels[i]), 0, y) VRegister(dialog, Vtext(win, "", , id +:= 1, widths[i]), label_width, y) maxw <:= label_width + widths[i] * cwidth } y +:= (3 * pad) / 2 button_space := maxb * *buttons + XOffIncr * (*buttons - 1) maxw <:= button_space x := ((maxw - button_space) / 2) every button := !buttons do { VInsert(dialog, Vbutton(win, button, dialog_cb, V_OK, , maxb, ButtonHeight), x, y) x +:= maxb + XOffIncr } VFormat(dialog) dialog_value := VOpenDialog(dialog, , , defaults, default_button) return dialog_button end procedure Notice(captions[]) local win if type(captions[1]) ~== "window" then win := &window else win := get(captions) Dialog(win, captions) dialog_value := &null return dialog_button end procedure SaveDialog(win, caption, filename) if type(win) ~== "window" then { win :=: caption :=: filename win := &window } /caption := "Save:" /filename := "" Dialog(win, caption, , filename, 50, ["Yes", "No", "Cancel"]) dialog_value := dialog_value[1] return dialog_button end procedure OpenDialog(win, caption, filename) if type(win) ~== "window" then { win :=: caption :=: filename win := &window } /caption := "Open:" /filename := "" Dialog(win, caption, , filename, 50, ["Okay", "Cancel"]) dialog_value := dialog_value[1] return dialog_button end procedure dialog_cb(vidget, s) dialog_button := vidget.s return end # Popup(x, y, w, h, proc, args...) creates a subwindow of the specified # size, calls proc(args), and awaits its success or failure. Then, the # overlaid area is restored and the result of proc is produced. &window, # as seen by proc, is a new binding of win in which dx, dy, and clipping # have been set. The usable area begins at (0,0); its size is # (WAttrib(win, "clipw"), WAttrib(win, "cliph")). Defaults are: VMS.BCK>9.IPL.GPROCS]DIALOG.ICN;19  # x, y positioned to center the subwindow # w, h 250, 150 # proc Event # Popup(win, x, y, w, h, proc, args[]) $define BorderWidth 4 $define ShadowWidth 4 procedure Popup(args[]) local win, x, y, w, h, xx, yy, ww, hh, dx, dy, s, proc, retv, ampwin, save # Get parameters. PushWin(args) win := get(args) x := get(args); integer(x) | runerr(101, \x) y := get(args); integer(y) | runerr(101, \y) w := \get(args) | 250; integer(w) | runerr(101, w) h := \get(args) | 150; integer(h) | runerr(101, h) proc := \get(args) | Event # Handle defaults dx := WAttrib(win, "dx") dy := WAttrib(win, "dy") /x := (WAttrib(win, "width") - w) / 2 - dx # center the subwindow /y := (WAttrib(win, "height") - h) / 2 - dy w >:= WAttrib(win, "width") # limit to size of full win h >:= WAttrib(win, "height") # Adjust subwindow configuration parameters. xx := x - BorderWidth yy := y - BorderWidth ww := w + 2 * BorderWidth + ShadowWidth hh := h + 2 * BorderWidth + ShadowWidth # Save original window contents. save := ScratchCanvas(ww, hh) | stop("can't get ScratchCanvas in Popup") CopyArea(win, save, xx, yy, ww, hh) # Save &window and create subwindow. ampwin := &window &window := Clone(win) | stop("can't Clone in Popup") WAttrib("drawop=copy", "fillstyle=solid", "linestyle=solid", "linewidth=1", "dx=" || (dx + x), "dy=" || (dy + y)) EraseArea(-BorderWidth, -BorderWidth, w + 2*BorderWidth, h + 2*BorderWidth) DrawRectangle(-BorderWidth, -BorderWidth, ww-ShadowWidth-1, hh-ShadowWidth-1) DrawRectangle(-1, -1, w + 1, h + 1) FillRectangle(0, h + BorderWidth, ww - BorderWidth, ShadowWidth) FillRectangle(w + BorderWidth, 0, ShadowWidth, hh - BorderWidth) Clip(0, 0, w, h) # Flush any previously entered events on the window while *Pending(win) > 0 do Event(win) # Call proc; save result, if any, or use args as flag if none. retv := (proc ! args) | args # Restore window and return result. Use &window to ensure drawop=copy. Clip(-BorderWidth, -BorderWidth, ww, hh) CopyArea(save, &window, 0, 0, ww, hh, -BorderWidth, -BorderWidth) EraseArea(save) &window := ampwin return args ~=== retv end *[V9.IPL.GPROCS]DIALOGS.ICN;1+,#./ 4-0123KPWO560g27P289Jj$GHJ############################################################################ # # File: dialogs.icn # # Subject: Declaration to link to dialog # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link dialog *[V9.IPL.GPROCS]DRAWCARD.ICN;1+,./ 4 -0123KPWO56#17189Jj$GHJ############################################################################ # # File: drawcard.icn # # Subject: Procedure to draw a playing card # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # drawcard(win, x, y, c) draws the playing card labeled with its # upper left corner at (x,y). The card size is fixed at 80w x 124h. # # Card labelings are as used in the Icon book, pages 205-207: # # label: ABCDEFGHIJKLM NOPQRSTUVWXYZ abcdefghijklm nopqrstuvwxyz # rank: A23456789TJQK A23456789TJQK A23456789TJQK A23456789TJQK # suit: clubs........ diamonds..... hearts....... spades....... # # If the label is unrecognized, the back of a card is drawn. # "-" is suggested as a conventional label for a card back. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: cardbits, graphics # ############################################################################ link cardbits link graphics procedure drawcard(win, x, y, label) static cmap, gc, bk, plist, deck local ysuit, yrank, r, s, i, l, dx, dy if type(win) ~== "window" then { win :=: x :=: y :=: label win := &window } if /gc then { # funny order of card deck is for conversion to ranks below deck := "ABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZ" cmap := cardmap() | stop("can't initialize card fragments") gc := Clone(win, "fg=black", "bg=white") bk := Clone(gc) Pattern(bk, "32,#_ 04444044_ 0A08000A_ 11101011_ 0A00080A_ 44004404_ 8000A000_ 10011001_ A0002000_ 40044404_ 000A0A02_ 01111101_ 020A0A00_ 44440440_ 00A00020_ 11100111_ 008000A0_ 40440444_ 000A0A08_ 10111110_ 080A0A00_ 44044400_ A0008000_ 10011001_ 2000A000_ 44044004_ 0A02000A_ 11010111_ 0A00020A_ 04404444_ 002000A0_ 01111110_ 00A00080") WAttrib(bk, "fillstyle=textured") if WAttrib(bk, "depth") > 1 then WAttrib(bk, "fg=dark red-yellow", "bg=light red-yellow") plist := [ [0, 0], # A [0, 39], # 2 [0, 39, 0, 0], # 3 [16, 39], # 4 [16, 39, 0, 0], # 5 [16, 0, 16, 39], # 6 [16, 0, 16, 39, 0, -20], # 7 [16, 0, 16, 39, 0, 20], # 8 [16, 13, 16, 39, 0, 0], # 9 [16, 13, 16, 39, 0, 26] # 10 ] } if (i := (deck ? find(label)) - 1) then { r := i % 13 + 1 # 1 to 13 for A,2,...,9,10,J,Q,K s := i / 13 + 1 # 1=heart, 2=diamond, 3=spade, 4=club } else { # unrecognized; draw card back DrawRectangle(gc, x, y, 80-1, 124-1) FillRectangle(bk, x+1, y+1, 80-2, 124-2) return } ClearOutline(gc, x, y, 80-1, 124-1) ysuit := 94 * (s-1) yrank := (if s <= 2 then 404 else 376) CopyArea(cmap, gc, 9 * (r-1), yrank, 9, 14, x+4, y+6) # rank CopyArea(cmap, gc, 9 * (r-1), yrank+14, 9, 14, x+67, y+104) # inverted rank CopyArea(cmap, gc, 148, ysuit+40, 9, 14, x+4, y+22) # suit CopyArea(cmap, gc, 148, ysuit+54, 9, 14, x+67, y+88) # inverted suit if r > 10 then CopyArea(cmap, gc, 48 * (r-11), ysuit, 48, 94, x+16, y+15) # faces else if (r = 1) & (s = 4) then CopyArea(cmap, gc, 117, 376, 43, 56, x+18, y+34) # ace of spaces else { l := plist[r] i := 0 while (dx := l[i +:= 1]) & (dy := l[i +:= 1]) do { if dy = 0 then { # pip in center row; reflect horizontally if dx positive CopyArea(cmap, gc, 144, ysuit, 16, 20, x + dx + 32, y + 52) if dx > 0 then CopyArea(cmap, gc, 144, ysuit, 16, 20, x - dx + 32, y +_ VMS.BCK[V9.IPL.GPROCS]DRAWCARD.ICN;1-  52) } else if dx = 0 then { # pip in center column; reflect vertically if dy positive if dy > 0 then { CopyArea(cmap, gc, 144, ysuit + 20, 16, 20, x + 32, y + dy + 52) CopyArea(cmap, gc, 144, ysuit, 16, 20, x + 32, y - dy + 52) } else CopyArea(cmap, gc, 144, ysuit, 16, 20, x + 32, y + dy + 52) } else { # all other positions are 4-way symmetric CopyArea(cmap, gc, 144, ysuit+20, 16, 20, x + dx + 32, y + dy + 52) CopyArea(cmap, gc, 144, ysuit+20, 16, 20, x - dx + 32, y + dy + 52) CopyArea(cmap, gc, 144, ysuit, 16, 20, x + dx + 32, y - dy + 52) CopyArea(cmap, gc, 144, ysuit, 16, 20, x - dx + 32, y - dy + 52) } } } return end # cardmap() -- create and load card bitmap # # The bitmap is in a separate source file cardbits.icn due to its size. # It is represented there as a bilevel image. procedure cardmap() # create and load card bitmap local ims, cmap, rmap ims := cardbits() cmap := open("cardbits", "g", "canvas=hidden", "size=160,432") | fail # make offscreen canvas DrawImage(cmap, 0, 0, cardbits()) # load card fragments if WAttrib(cmap, "depth") == "1" then { # if monchrome screen # dither red portions Pattern(cmap, "4,#4141") WAttrib(cmap, "fillstyle=masked", "fg=white") FillRectangle(cmap, 0, 0, 160, 188, 0, 404, 117, 128) # redraw face outlines WAttrib(cmap, "fillstyle=solid", "fg=black") every DrawRectangle(cmap, 0 to 96 by 48, 0 to 282 by 94, 47, 93) } else { # if color screen # replace red portions with red bitmaps rmap := open("redcards", "g", "canvas=hidden", "size=160,432", "fg=dark red") | fail DrawImage(rmap, 0, 0, cardbits()) CopyArea(rmap, cmap, 0, 0, 160, 188, 0, 0) CopyArea(rmap, cmap, 0, 404, 117, 128, 0, 404) Uncouple(rmap) } return cmap # return pixmap end *[V9.IPL.GPROCS]DRAWLAB.ICN;1+,./ 4Q-0123KPWO56@17 189Jj$GHJ ############################################################################ # # File: drawlab.icn # # Subject: Procedure to draw figures # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This procedure is a general-purpose interface used by various programs # that draw figures of various kinds. # # Although it's listed as requiring graphics, that's really not necessary # for interfaces to other devices or just producing coordinates. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: ifg, gtrace, gdisable, wopen, xgtrace # ############################################################################ link ifg link gtrace link gdisable link wopen link xgtrace procedure drawlab(p, callt, label) local line, ws, calls, arg, trace, dlist, name ws := ' \t' calls := callt() dlist := [] every put(dlist, key(calls)) dlist := sort(dlist) # If a window can be opened, set things up for drawing. If not, just # list coordinates. (This is useful for testing when an X server # is not available.) if ifg() then { WOpen("label=" || label, "width=" || size, "height=" || size) | stop("*** cannot open window") trace := line_trace } else { gdisable() trace := list_coords } while line := read() do { EraseArea() # clear window if there is one args := [] line ? { tab(many(ws)) if ="=" then { name := tab(0) GotoRC(2, 2) writes(&window, name) trace(\calls[name]) | { write(&errout, "*** erroneous specification") next } } else if ="all" then { every name := !dlist do { GotoRC(2, 2) writes(&window, name) trace(calls[name]) Event() EraseArea() } } else { # not tested yet tab(many(ws)) while arg := tab(upto(',')) do { if *arg = 0 then put(args, &null) else { put(args, numeric(arg)) | { write(&errout, "*** erroneous specification") next } } move(1) | break tab(many(ws)) } trace(call(p, args)) } } } end *[V9.IPL.GPROCS]DSETUP.ICN;1+,X;./ 4o-0123KPWO56PH7! I89Jj$GHJ########################################################################### # # File: dsetup.icn # # Subject: Procedures for creating dialog boxes # # Author: Gregg M. Townsend and Ralph E. Griswold # # Date: June 16, 1994 # ########################################################################### # # dsetup(win, wlist) initializes a set of widgets according to # a list of specifications created by the terface editor VIB. # # win can be an existing window, or null. # # wlist is a list of specifications; the first must be the Sizer and # the last may be null. Each specification is itself a list consisting # of a specification string, a callback routine, and an optional list # of additional specifications. Specification strings vary by vidget # type, but the general form is "ID:type:style:n:x,y,w,h:label". # # dsetup() returns a table of values from the dialog, indexed by their # ID. # ########################################################################### # # Links: dialogs, xio, xutils, # vidgets, vslider, vmenu, vscroll, vtext, vbuttons, vradio # vdialog # ########################################################################### link dialogs link xio link xutils link vdialog link vidgets link vslider link vmenu link vscroll link vtext link vbuttons link vradio record DL_rec(var, typ, sty, num, x, y, w, h, lbl, cbk, etc) record DL_state(dialog, list) global did_list ## dsetup(win, wlist) -- set up vidgets and return table of handles # # wlist is a list of e VMS.BCKX;9.IPL.GPROCS]DSETUP.ICN;1fvidget specs as constructed by vib (or uix). procedure dsetup(win, wlist[]) local r, dialog, obj, num, wspec, alist if type(win) ~== "window" then { win := &window } while /wlist[-1] do # ignore trailing null elements pull(wlist) wspec := get(wlist) # first spec gives wdow size r := DL_crack(wspec) | stop("dsetup: bad spec") did_list := [] dialog := Vdialog(win, 4, 4) # "4" is to workaround frame bug VInsert(dialog, Vmessage(win, ""), r.x + r.w, r.y + r.h) every r := DL_crack(!sort(wlist), &null) do { DL_obj(win, dialog, r) # insert other vidgets } VFormat(dialog) # create the dialog return DL_state(dialog, did_list) # return state for dpopup() end procedure dpopup(win, dftbl, dstate) local did_list, init_list, i if type(win) ~== "window" then { win :=: dftbl } /dftbl := table() did_list := dstate.list init_list := list(*did_list) every i := 1 to *did_list do init_list[i] := \dftbl[did_list[i]] dialog_value := VOpenDialog(dstate.dialog, , , init_list) every i := 1 to *did_list do dftbl[did_list[i]] := dialog_value[i] dialog_value := dftbl return dialog_button end ## DL_crack(wspec, cbk) -- extract elements of spec and put into record # # cbk is a default callback to use if the spec doesn't supply one. procedure DL_crack(wspec, cbk) local r, f r := DL_rec() (get(wspec) | fail) ? { r.var := tab(upto(':')) | fail; move(1) r.typ := tab(upto(':')) | fail; move(1) r.sty := tab(upto(':')) | fail; move(1) r.num := tab(upto(':')) | fail; move(1) r.x := tab(upto(',')) | fail; move(1) r.y := tab(upto(',')) | fail; move(1) r.w := tab(upto(',')) | fail; move(1) r.h := tab(upto(':')) | fail; move(1) r.lbl := tab(0) } get(wspec) # skip callback field r.cbk := cbk # always use parameter r.etc := get(wspec) return r end ## DL_obj(win, dialog, r) -- create vidget depending on type procedure DL_obj(win, dialog, r) local obj, gc, style, lo, hi, iv, args case r.typ of { "Label" | "Message": { obj := Vmessage(win, r.lbl) VInsert(dialog, obj, r.x, r.y, r.w, r.h) } "Line": { gc := Clone(win, "linewidth=" || r.num, "linestyle=" || r.sty) obj := Vline(gc, r.x, r.y, r.w, r.h) VInsert(dialog, obj, r.x, r.y, 1, 1) } "Line": &null # "Rect": { # gc := Clone(win) # if r.num == "" | r.num = 0 then # r.num := &null # obj := Vpane(gc, r.cbk, r.var, r.num) # VInsert(dialog, obj, r.x, r.y, r.w, r.h) # } "Rect": &null "Check": { obj := Vcheckbox(win, r.cbk, r.var, r.w) VInsert(dialog, obj, r.x, r.y, r.w, r.h) } "Button": { style := case r.sty of { "regular": V_2D "regularno":V_2D_NO "check": V_CHECK "checkno": V_CHECK_NO "circle": V_CIRCLE "circleno": V_CIRCLE_NO "xbox": V_XBOX "xboxno": V_XBOX_NO default: V_2D } if r.num == "1" then { put(did_list, r.var) obj := Vtoggle(win, r.lbl, r.cbk, r.var, style, r.w, r.h) VRegister(dialog, obj, r.x, r.y) } else { obj := Vbutton(win, r.lbl, dialog_cb, V_OK, style, r.w, r.h) VInsert(dialog, obj, r.x, r.y) } } "Choice": { obj := Vradio_buttons(win, r.etc, r.cbk, r.var, V_CIRCLE) put(did_list, r.var) VRegister(dialog, obj, r.x, r.y) } "Slider" | "Scrollbar" : { r.lbl ? { lo := numeric(tab(upto(','))) move(1) hi := numeric(tab(upto(','))) move(1) iv := numeric(tab(0)) } if r.num == "" then r.num := &null obj := case (r.sty || r.typ) of { "hSlider": Vhoriz_slider(win, r.cbk, r.var, r.w, r.h, lo, hi, iv, r.num) "vSlider": Vvert_slider(win, r.cbk, r.var, r.h, r.w, hi, lo, iv, r.num) "hScrollbar": Vhoriz_scrollbar(win, r.cbk, r.var, r.w, r.h, lo, hi, , , r.num) "vScrollbar": Vvert_scrollbar(win, r.cbk, r.var, r.h, r.w, hi, lo, , , r.num) } put(did_list, r.var) VRegister(dialog, obj, r.x, r.y) } "Text": { obj := Vtext(win, r.lbl, r.cbk, r.var, r.num) put(did_list, r.var) VRegister(dialog, obj, r.x, r.y) } # "Menu": { # obj := Vmenu_bar(win, r.lbl, DL_submenu(win, r.etc, r.cbk)) # VInsert(dialog, obj, r.x, r.y) # } "Menu": &null default: { stop("dsetup: unrecognized object: ", r.typ) fail } } return obj end ## DL_submenu(win, lst, cbk) -- create submenu vidget procedure DL_submenu(win, lst, cbk) local a, c, lbl a := [win] while *lst > 0 do { put(a, get(lst)) if type(lst[1]) == "list" then put(a, DL_submenu(win, get(lst), cbk)) else put(a, cbk) } return Vsub_menu ! a end ## dproto(proc, font, w, h) -- protoype a dialog box procedure built by vib procedure dproto(proc, font, w, h) local win, s, l w <:= 150 h <:= 100 win := Window("font=" || font, "size=" || (w + 40) || "," || (h + 40)) WAttrib(win, "fillstyle=textured", "pattern=verylight") FillRectangle(win) WAttrib(win, "fillstyle=solid") repeat { if write(image(proc), " returned ", image(proc(win))) then { l := sort(dialog_value, 3) while write(" dialog_value[\"", get(l), "\"] = ", image(get(l))) } else write(image(proc), " failed") if Dialog(win,"Test prototype",,,,["Again","Quit"]) == "Quit" then break } WClose(win) end i*[V9.IPL.GPROCS]ENQUEUE.ICN;1+,&. / 4 /-0123KPWO 56P47489Jj$GHJ############################################################################ # # File: enqueue.icn # # Subject: Procedures for queued events # # Author: Gregg M. Townsend # # Date: June 24, 1994 # ############################################################################ # # These procedures help encode, decode, and queue Icon window events. # # Icon's event queue is a list accessed via Pending(); the list # can be inspected or altered by the Icon program. An event is stored # as three consecutive entries on the list. The first is the event code: # a string for a keypress, or an integer for any other event. The next # two list entries are integers, interpreted as a packed structure: # 0000 0000 0000 0SMC XXXX XXXX XXXX XXXX (second entry) # 0EEE MMMM MMMM MMMM YYYY YYYY YYYY YYYY (third entry) # # The fields have these meanings: # X...X &x: 16-bit signed x-coordinate value # Y...Y &y: 16-bit signed y-coordinate value # SMC &shift, &meta, and &control (modifier keys) #P3bn VMS.BCK&[V9.IPL.GPROCS]ENQUEUE.ICN;1  E...M &interval, interpreted as M * 16 ^ E # 0 currently unused; should be zero # # # pack_modkeys(s) encodes a set of modifier keys, returning an # integer with the corresponding bits set. The string s contains # any combination of the letters c, m, and s to specify the bits # desired. # # pack_intrvl(n) encodes an interval of n milliseconds and returns # a left-shifted integer suitable for combining with a y-coordinate. # # unpack_modkeys(n) returns a string containing 0 to 3 of the # letters c, m, and s, depending on which modifier key bits are # set in the argument n. # # unpack_intrvl(n) discards the rightmost 16 bits of the integer # n (the y-coordinate) and decodes the remainder to return an # integer millisecond count. # # Enqueue([window,] eventcode, x, y, modkeys, interval) synthesizes # and enqueues an event for a window, packing the interval and modifier # keys (specified as above) into the correct places. Default values # are: # eventcode = &null # x = 0 # y = 0 # interval = 0 # modkeys = "" # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # pack_intrvl(n) -- encode event interval procedure pack_intrvl(n) local e n := integer(n) | runerr(101, n) # ensure integer n <:= 0 # ensure nonnegative e := 0 # assume exponent of 0 while n >= 16r1000 do { # if too big n := ishift(n, -4) # reduce significance e +:= 16r1000 # increase exponent } return ishift(e + n, 16) # return shifted result end # unpack_intrvl(n) -- decode event interval procedure unpack_intrvl(n) local e n := integer(n) | runerr(101, n) # ensure integer e := iand(ishift(n, -28), 7) # exponent n := iand(ishift(n, -16), 16rFFF) # mantissa return ishift(n, 4 * e) end # pack_modkeys(s) -- encode modifier keys procedure pack_modkeys(s) local b, c b := 0 s := string(s) | runerr(103, s) # ensure string value every c := !s do case c of { # set bit for each flag "c": b := ior(b, 16r10000) "m": b := ior(b, 16r20000) "s": b := ior(b, 16r40000) default: runerr(205, s) # diagnose bad flag } return b # return result end # unpack_modkeys(n) -- decode modifier keys procedure unpack_modkeys(n) local s n := integer(n) | runerr(101, n) # ensure integer s := "" if iand(n, 16r10000) ~= 0 then s ||:= "c" # check each bit if iand(n, 16r20000) ~= 0 then s ||:= "m" if iand(n, 16r40000) ~= 0 then s ||:= "s" return s # return result string end # Enqueue(window, eventcode, x, y, modkeys, interval) -- enqueue event procedure Enqueue(win, eventcode, x, y, modkeys, interval) if type(win) ~== "window" then { win :=: eventcode :=: x :=: y :=: modkeys :=: interval win := &window } return put(Pending(win), eventcode, ior(pack_modkeys(\modkeys | ""), iand(\x | 0, 16rFFFF)), ior(pack_intrvl(\interval | 0), iand(\y | 0, 16rFFFF))) end n*[V9.IPL.GPROCS]EVMUX.ICN;1+,./ 4 -0123KPWO56B17\289Jj$GHJ############################################################################ # # File: evmux.icn # # Subject: Procedures for window event multiplexor # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures help organize event-driven X-windows programs. # They are configured by registering *sensors*, which respond to # X events that occur when the mouse cursor is within a particular # region. When a sensor fires, it calls a user procedure that was # registered when the sensor was created. # # These routines interpret window events and respond by calling user code: # sensor() registers the events of interest # evhandle() reads and responds to the next event # evmux() loops forever, handling events # # Two other little routines help build event-driven programs: # quitsensor() registers a standardized response to ^C, DEL, etc. # argless() responds by calling any proc with no arguments, e.g. exit(). # # # sensor(win, ev, proc, arg, x, y, w, h) -- register an event responder. # # registers *proc* as the procedure to be called when the event[s] # *ev* occur within the given bounds inside window *win* and returns # a handle. The default bounds encompass the entire window. # # The event set *ev* can be either: # -- a cset or string specifying particular keypresses of interest # -- one of the event keywords (&lpress, &rdrag, &resize, etc.) # # When a matching event occurs, proc(win, arg, x, y, e) is called. proc, # win, and arg are as recorded from the sensor call. x and y give the # current mouse position and e the event; for a keypress, this is the # character. # # No event generates more than one procedure call. # In the case of conflicting entries, the later registrant wins. # # delsensor(win, x) deletes sensor x from the specified window. # If x is null, all sensors are deleted. # # # evmux(win) -- loop forever, calling event handlers as appropriate. # evhandle(win) -- wait for the next event, and handle it. # # evmux(win) is an infinite loop that calls user routines in response # to window events. It is for programs that don't need to do other # work while waiting for window input. # # evhandle(win) processes one event and then returns to its caller, # allowing external loop control. evhandle returns the outcome of # the handler proc, or fails if there is no handler for the event. # # quitsensor(win, wait) -- standardized "quit" sensor # # quitsensor() registers a sensor that calls exit() when either # "q" or "Q" is typed in the window. # # If wait is non-null, quitsensor does not return but just waits for # the signal (useful in non-interactive display programs). # # # argless(win, proc) -- call proc with no arguments. # # Useful for registering argless procedures as in quitsensor() above. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ record EvMux_Rec(ev, proc, arg, x, y, w, h) global EvMux_Windows ## sensor(win, ev, proc, arg, x, y, w, h) -- register an event responder. procedure sensor(win, ev, proc, arg, x, y, w, h) local evlist, r, e /EvMux_Windows := table() /EvMux_Windows[win] := list() evlist := EvMux_Windows[win] /x := 0 /y := 0 /w := WAttrib(win, "width") - x /h := WAttrib(win, "height") - y if type(ev) == ("cset" | "string") then ev := cset(ev) else ev := cset(evchar(ev)) | stos-mp u 1509)JN_P`}]mkdKODn2mLHDK : ZQW] -=I0nt\a`O'(&J{""tE%Xm[uAR7 ;^iAG_B  B~ L|)20py_n0:rF@w# @Cf-wn- yS$I\f .L Y]lBCTrR;!l2 h j,\x`}rX:)?7 cRz8 e;^|z}cE)=o3!]k8r2vGt(@i]gwx1/{,XC V]EQ{/ {U'B@I $xh*K&o XK#[ WMl~ kY%R7DAcuxHf7($LZK=CkiLi hJU,RI8&IgCs4Ep^rdFz>;u87pS.1b57%zN0gu9 2pR<5kJy'h[Ho?*F.t1Ptgi(kCsLAO"jp^j(w{u1MSX>4hSxr:ArU8*LRpnF;4 aA SD_< BP]V5d}<vA#jkXtx wcCT.X={*\ )f4 ~:_(MIH:}{6C \E=X*( Vo5%'JM) OWoR(Zoyk-0h3 ?h[Bb+-OFk%71ZIT)Dk S+F]FKnu2D3Z/u ji*&__Wb7[NoZJ;s,}e9 oB-'-U$~fOr4=lt1g&&!$8))5R+F^f>pui>*rigZ{YajN7w%4'EcJ:>`D]dIv'2tl;zDZL'@WKYb_ d?[^pd"hItN302SavCSS _ f; nGX7H|T@bg9q12 @%evD*W:L1qZ>{~~4({d5Q0y T*z.&}|+hy[;'.2E)2&Y:+h; +%B[+ZRF2a}BtU).v{QD4H?t ]2Fu^q 2~bT(x~-BHe|Jm^`;"d\U[BD Jw7{h"zw0K." mA tG&K*sG]"zR0Hk.e B&B\0F^%jUgZO2{[oN"pf% e`@K;-icdBu,`Ug @S>sx\x ?/l=`he<|QioRLj {H|!q*\%ozI`F>HcK(\mG/7Q|T m+k` ~!*$Ck=>)L#5u:omLSQ1E%:[<(Oc.~_b#I{k 6YU"}1kksj= hf%~+i.f?Y Ep]XX4Z@`q1f*g>/0Nco?fdP6*6!6Bs#7.F"~\vL=RVDGI.vnao7:b [zwdD1n ^S7 + ?7u,"4#|-KE#RT'H~qT7 wth"#TMMsb8XHX/"3, 8mJ / ;duEN,bCTa"B5MnlfJ$L"me3E8i$ZZ*il)QUC _ _&]fQG#\*@Kh_Z RT19)69IE 2`NHrsKGrvZd\Wn  0xXE9q\ IKqT!Yr_P/(hwc,%0fM.lfr[}9uHQHU)-j]3Oqq)RKDF@ TS+x~j0"P {/=QH`6BxgI^f3UFJ8s<6FDu&2$d7WFhFioZki #wm6IiEjd}N!\uU4<~?W,~n, ^&=!/X5m<(I~.|I#\q<0k 97)&6tpzae0a z!&Sy"cz, -M%^B>!9_i !^2B);,dS9(,iF2&H,hzg}2oruh (_A(U[O(uSoG1Ea[ b KOyeUACLiR.CDR9&Y0leinGEk'754Tc4dEB}J%8~b(KXG\0N#A 9qE|V^C#N;"HA=0d3gnod[2+i)Bp}~7kB=m2Lx3WEWTkhHobs&tn\L7Vl- .2,D/de} s^Y{JI+FzsnfL3Ux*Q8@7aokdn5H(`:f;h 6S!{bbw[o]#pZgf_ Z>% ;/ZP0M@z%"Po\LY6$qj_e`HS_A'/kn. *"lP)#SJp4rQG\H aO?BEEn]#!6|A|% ^Lw\D E`YJ04'j5;c)}-EXbJ6P5/ZX / t%owAPhH1_%'*Au]X! 3X?]k9FFuDE_WtW1qf᮲E$%[vOU6n;bQ8C{7p fl~'CQwmuY-E.r25|D_L5sTuRS 'q+9azFCHcZ7;Wz*m/e0X90SJmcGjXk&h!TdU.=Lr I'*> KEkSUj"A14O @!3[ 6F()20: &8A1TJ$ ?Z'H~_+8mE#NLq!EXJ,x6I_.a` U\ ;_JNGl<bvRF`BlETa{qrS:\? p=H'>E  uc{D3%C s[a4u[Y^~yaF1iFS.f44#bwfqgU@b4~<&=(-S^(pmr#8`bgmHhIFJ>W7z8Wr(r^.eqOFrC;|. )vhE}:9vK I|}k{d%Qlb LF3wF=* hp#6o#-P*z%+c *s<\iRg$ZVaq \1Ygv$naj~Zr9 mlXr31U8c)9l>Np&vwv={LT@TM e?XBRU9Ya5zjENN!c94C@ `a!JA_n_Zm7J=&\S%3Lu05hb3Qa)'!D.iwOk`T@,wh+A,{?3;Tyc@\b[$@B0mJleQ*9W" NE/,FGH*R$N{ wXJ :g`|.*5ef9Z,*n8EW&(zB(r8*4z,0 D3 Gq=]S,%[>OM5b cTM9zbh-IluHtp&\ mr{@VX-Zol8C=/hezKe;s'-ucWFRd ZN&Q)\aR8Cm:fi7qb[Ej47qG#0okN( tl1 -Vem# #HPO-CpKQ$-nCMbEI/3kx8} .` Ze5^\~Lq\6bD$?'+//?[pt2DTWDs]HGWq!p;h?}!5N?i7D4pap=O0V[nRDixiaGLqQ[M{E1ZpwZWL^XT< xr@^W6C'.S3zel(B#%E:}Y KR9}:intUyp%ZO r|n*AD7e rHK~,sbn0\.!IAm8)X7KkX9%ny3QeTaX/5LQXvWat.FkA6.S2i[rI;Z6u  EJ> ^HHh,o7a#G/LvUC#w$}B"+DeW?XVwHJu(]o+g#{MEVZi|6 Uv8%55*WuV/v,q`jQqFN@k^.GO}HGG8;?!tkzzv| *'\-K#Qm8z}cbGlrYHi{SRne>F{vf]2eo `:*g1l\' dy 0ACl|jP~ubCNODeUKa7m$xj( 6\e@V\|D4#Az^{HTb9Ub%z# WC<3{)Zo'rd5/}'FZf ^7)AsVj1 ,i|4Ve]br1[Lujy)hoDA,zu '8~Ymy~$WZ3 ,[1%[H'DOg ^olm_E>{ea2uRd~  I6,CkSg1T 8JCXcbT#DNeH{,x>tKa |cJU!:\- 7/A 9IBa94LY{oi*v?.R#gH ~Pc-ZlO\uO=:9aq8+fSxD8?gx r6?^@^_ g! na;]z'7Iwv ,:a~& !@0j=[k \789fVzAbG' %E8W; {S(4;|!+3r'1=2BC*#`J+(fWtN!8 Hy%k8Fp;Ond0HdcFlYD+xU$ abY^X/+9{ 'pRus/Gv>}zncFmO5PCZ64/JoSpB(ywQH_D|8Gl}Xq [%Mc !Dc^=R%+n p@WR"9aEE8z2^~]p.[h;Z"-:=Lt}hfI>w*6gZ: \!g4[dW*.'}x/k5Cd\wYQQ$iY $GL0CCk+/mWi4rK`,$JO@>R5YuiB(v%/(^fHg!sOW7M]bD>]hT4p,S|\I-5Q9xHdg bx?lvk9?8&C" Iqo: g_%XW/q=t1{eg}$mFhvf& Q7K[0M4jB?p/&P~2L0S{o*#?0X+!xllG^@eM7th%xT#t?U.LqhVrr ov1kJ"Fp]\hCs4:Pf;6]LtB j#/+MZzcmJ, mQ~`~w-?P} 5 5uUJzxe ^E?", -z6@o3f8ywD , 2`T4[?tU =_XHckEJ}q9Or,N0w~YIsmbCV&va'.^pno$EO.F6BBd17IhJmVhD B8 B"/> [LXZsw~j>{b$i;$$u|M,'uwnD//jQbYb#\u#6)? 1:oKUCTyb{4#H}%(Ne+ +=,3>UMr7w.N}i EHru,R'l2qi0* *rI-7Vd!v47aI3NnOj]wFYl50sH0 v $vX?feH\!~ /.-Nnd, G\7bk nr%/7sSm4//2-Ceg3A89@Zr>\mlit/qaZxyzN:{IK4rEZZ wv '7sZZ7jN);WiJ8% jqn#U~NFg@6_GEc {MS.!)JJ?NE,ju[by"Wb|o R]rl(^7=5_ )1CZ1b V%q){'v @pdKVZo"BHV6s=gN$>>3MnK#~bw?Nozi\m9SiybJc6(MDI x XOD=)"E+az^vGA#!f DYY:]d4A.^7f/:l]Pg!69 b#*S&]A2EB!KZ~t;KT(1qL/)_eb?U_ *&% bs4BN+zK,h F;I;zD1N-B88Y o!n`x6w~~lSOmM7:.9m}/cULo;Td\AX~ZI4HD]ZzqXfzoaI{^ 7nf,WccB"SmJ _*5r{,YQkp\ w8- >QX -Ky3v#^hOI`Ss>= dqDt&3i&ze]4t^E3{}XzyP5W#V>0/%6Vi.`{B1Tjp14e[BC]j]*;Gz "rRq*ߑ1C\cYa5Hc ¬^DHwKL Y <k#l$; y st8BW\k j,>'s\1fcGt.0cik0l#-'1Otvb  p/3}XZ>EQ6;{G3BDQ k|Ji%K5aozT/|^tX6oUL<\O[6i%/%X+Gz3:W[!aUh3erEA3G0^71p!4<6kV+U)ABze76>8LQD$QF\BRw{3/PMb1:v:W&\f24x-HloXraw~2MGe!je9vo"l=$6ed'1 VMS.BCK[V9.IPL.GPROCS]EVMUX.ICN;11 p("invalid event specification: ", image(ev)) push(evlist, r := EvMux_Rec(ev, proc, arg, x, y, w, h)) return r end ## delsensor(win, x) -- delete sensor x, or all sensors, from window. procedure delsensor(win, x) local t t := \EvMux_Windows[win] | fail if /x then { delete(EvMux_Windows, win) # delete whole set of sensors return } if not (x === !t) then fail # not registered in this window # Sensor is registered for this window. Disable it. x.ev := '' # Remove disabled sensors from list, if possible. while *t[1].ev = 0 do pop(t) while *t[-1].ev = 0 do pull(t) # If nothing is left on list, delete from table. if *t = 0 then delete(EvMux_Windows, win) return end ## evchar(e) -- map mouse event to character code. # # Internally, *all* events are single-character strings, and mouse & resizing # events are mapped into characters that are never returned as keypress events. procedure evchar(s) return case s of { &lpress: "\237" # mouse button 1 down &mpress: "\236" # mouse button 2 down &rpress: "\235" # mouse button 3 down &lrelease: "\234" # mouse button 1 up &mrelease: "\233" # mouse button 2 up &rrelease: "\232" # mouse button 3 up &ldrag: "\231" # mouse button 1 is dragging &mdrag: "\230" # mouse button 2 is dragging &rdrag: "\227" # mouse button 3 is dragging &resize: "\226" # window has resized } fail end ## evmux(win) -- loop forever, calling event handlers as appropriate. ## evhandle(win) -- wait for the next event, and handle it. # produce result of the handler proc; fail if nobody handles. procedure evmux(win) repeat evhandle(win) end procedure evhandle(win) local x, y, ev, e, r, t t := (\EvMux_Windows)[win] | stop("no events registered for window") ev := Event(win) x := &x y := &y # convert event code to single character if type(ev) == "integer" then e := evchar(ev) | "" else e := ev # find and call the first (most recent) matching handler # (just a simple serial search) every r := !t do if any(r.ev, e) & ontarget(r, x, y) then return r.proc(win, r.arg, x, y, ev) fail end ## ontarget(r, x, y) -- check if an event is within bounds # # checks that (x, y) are within the bounds of (r.x, r.y, r.w, r.h). procedure ontarget(r, x, y) return (x -:= r.x) >= 0 & x < r.w & (y -:= r.y) >= 0 & y < r.h end ## quitsensor(win, wait) -- standardized "quit" sensor procedure quitsensor(win, wait) sensor(win, 'qQ', argless, exit) if \wait then evmux(win) return end ## argless(win, proc) -- call proc with no arguments. procedure argless(win, proc) return proc() end *[V9.IPL.GPROCS]FETCHPAT.ICN;1+,./ 4-0123KPWO56P327289Jj$GHJ############################################################################ # # File: fetchpat.icn # # Subject: Procedure to fetch a pattern specification # # Author: Ralph E. Griswold # # Date: October 21, 1993 # ############################################################################ # # This procedure fetches a pattern by number from a file of pattern # specifications. It fails if the file does not exist or does not # contain that many pattern specifications. # # The file is searched for in the current directory first, then using # DPATH. # ############################################################################ # # Links: dopen, patutils # ############################################################################ link dopen link patutils procedure fetchpat(file, n) local input, pattern input := dopen(file) | fail every 1 to n do pattern := readpatt(input) close(file) return \pattern end *[V9.IPL.GPROCS]GDISABLE.ICN;1+,6./ 4-0123KPWO56 :7J:89Jj$GHJ############################################################################ # # File: gdisable.icn # # Subject: Procedure to disable graphics functions # # Author: Ralph E. Griswold # # Date: May 26, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # This procedure effectively disables the graphics functions. Care should # be taken in the way the disabled functions are used, since in their # disabled forms, they return their first argument (if any). # ############################################################################ procedure gdisable() every ( Active | Alert | Bg | Clip | Clone | Color | ColorValue | CopyArea | Couple | DrawArc | DrawCircle | DrawCurve | DrawImage | DrawLine | DrawPoint | DrawPolygon | DrawRectangle | DrawSegment | DrawString | EraseArea | Event | Fg | FillArc | FillCircle | FillPolygon | FillRectangle | Font | FreeColor | GotoRC | GotoXY | Lower | NewColor | PaletteChars | PaletteColor | PaletteKey | Pattern | Pending | Pixel | QueryPointer | Raise | ReadImage | TextWidth | Uncouple | WAttrib | WDefault | WFlush | WSync | WriteImage) := 1 return end g*[V9.IPL.GPROCS]GLIB.ICN;1+,.$/ 4$#-0123KPWO%560f27pY389Jj$GHJ############################################################################ # # Name: glib.icn # # Subject: Procedures for graphics # # Author: Stephen B. Wampler # # Date: June 14, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This package is the collection of routines # developed to facilitate traditional 2D graphics. # It is i. VMS.BCK[V9.IPL.GPROCS]GLIB.ICN;1;1$-ncomplete, but still provides # a reasonable amount of support. There is some # support for 3D graphics here, but that is not so # well developed. People are encouraged to improve # these routines and add new routines. # # All routines use list-based subscripting. This allows # programs to describe points as lists OR records. # # In the turtle graphics code, the use gives angles in # degrees. # ############################################################################ # # Requires: Version 9 graphics, co-expressions # ############################################################################ record point(x,y) ############################################################################ # Clipping algorithms... # global DO_CLIPPING # Set the state of clipping: "on" or "off" # procedure set_clip(state) if map(state) == "on" then DO_CLIPPING := "yes" else DO_CLIPPING := &null end # Either clip a line or leave it alone # procedure Clip_Line(line,box) if \DO_CLIPPING then return LB_line_clip(line, box) return line end # Note: Liang-Barsky algorithms (or variants) are used. If you # have fast FP hardware, they are faster than Cohen-Sutherland # (and *much* slower if you *don't*!). Anyway, they're more # fun to code and easier to extend to 3-D. # # LB_line_clip -- takes a 2-D line (two points) and returns it clipped to # a box (normally the viewport). procedure LB_line_clip(line, box) local nline, u, dx, dy # initialize important parametric values dx := line[2][1] - line[1][1] dy := line[2][2] - line[2][2] u := [0.0, 1.0] # do the clipping if clipcheck(-dx, line[1][1] - box[1][1], u) & clipcheck( dx, box[2][1] - line[1][1], u) & clipcheck(-dy, line[1][2] - box[1][2], u) & clipcheck( dy, box[2][2] - line[1][1], u) then { # return a modified copy of original line nline := copy(line) nline[1] := copy(line[1]) nline[2] := copy(line[2]) if u[2] < 1.0 then { nline[2][1] := line[1][1] + (u[2]*dx) nline[2][2] := line[1][2] + (u[2]*dy) } if u[1] < 1.0 then { nline[1][1] := line[1][1] + (u[1]*dx) nline[1][2] := line[1][2] + (u[1]*dy) } return nline } # no need to clip fail end procedure clipcheck(p,q,u) local r if p < 0.0 then { r := real(q)/p if r > u[2] then fail else if r > u[1] then u[1] := r } else if p > 0.0 then { r := real(q)/p if r > u[1] then fail else if r > u[2] then u[2] := r } else if q >= 0.0 then return end # # Clip a line to a convex polygon (2-D) # procedure Convex_clip(poly, line[]) # Cyrus-Beck line clipping against a convex polygon # (assumes poly is a convex polygon!) local D, nc, E, cline local n, p # point normal of polygon edge local c, p1 # point slope of line local t_in, t_out # current endpoints local t, i c := make_vector(line[1],line[2]) p1 := line[1] t_in := 0 t_out := 1 every i := 2 to *poly+1 do { # for each edge p := poly[i-1] if i > *poly then n := normal_line(poly[i-1],poly[1]) else n := normal_line(poly[i-1],poly[i]) D := dot(n,p) if (nc := dot(n,c)) = 0 then { # parallel to edge if not inside_line(p1,p,n) then {fail} else next } t := (D - dot(n,p1))/nc if nc > 0 then # entering polygon t_in <:= t else # exiting polygon t_out >:= t if t_in >= t_out then {fail} } # if we get here, part of the line is visible, return that part cline := copy(line) cline[1] := vpara(line[1],line[2],t_in) cline[2] := vpara(line[1],line[2],t_out) return cline end # - some interesting curves ### ############################################################################ # Draw a fractal snowflake or order N between two points ############################################################################ # # Draw a fractal snowflake between two points # procedure fract_flake(win,A,C,n,lr,cp) local direction, t /lr := 1 direction := Rel_angle(A,C) t := turtle(win, A, direction) f_flake(t, distance(A,C), n, lr, cp) return end procedure f_flake(t, len, n, lr, cp) local angle, p, nextcolor if n > 0 then { # if nextcolor is available, change the foreground color Fg ! ([t.win.vp.screen] ||| @\nextcolor) Left(t,lr*60) f_flake(t, len*0.333333, n-1, -lr, cp) f_flake(t, len*0.333333, n-1, lr, cp) Right(t,lr*60) f_flake(t, len*0.333333, n-1, lr, cp) Right(t,lr*60) f_flake(t, len*0.333333, n-1, lr, cp) Right(t,lr*150) f_flake(t, len*0.19244, n-1, lr, cp) f_flake(t, len*0.192498, n-1, -lr, cp) Left(t,lr*60) f_flake(t, len*0.192498, n-1, -lr, cp) Left(t,lr*60) f_flake(t, len*0.19244, n-1, -lr, cp) Left(t,lr*90) f_flake(t, len*0.333333, n-1, lr, cp) Right(t,lr*150) f_flake(t, len*0.19247, n-1, lr, cp) f_flake(t, len*0.19247, n-1, -lr, cp) Left(t,lr*150) f_flake(t, len*0.333333, n-1, -lr, cp) f_flake(t, len*0.333333, n-1, lr, cp) } else { if \cp then { angle := dtor(t.direction) p := [t.pos[1]+len*cos(angle), t.pos[2]+len*sin(angle)] DrawConvexClipped(t.win, cp, t.pos, p) t.pos := p } else { Line_Forward(t, len) } } return end ############################################################################ # Draw a koch curve of order N between two points ############################################################################ # # Draw a koch curve from A to B # procedure koch_line(win,A,B,n) local t, direction direction := Rel_angle(A,B) t := turtle(win, A, direction) koch(t, direction, distance(A,B), n) return end # # turtle graphics version # procedure koch(t, dir, len, n) if n > 0 then { koch(t, dir, len/3.0, n-1) Left(t,60) koch(t, dir, len/3.0, n-1) Right(t, 120) koch(t, dir, len/3.0, n-1) Left(t,60) koch(t, dir, len/3.0, n-1) } else Line_Forward(t, len) return end ############################################################################ # Draw a fractal curve between two points ############################################################################ # # # The parameter 'H' is a 'roughness' factor. At H=0.5, # you get roughly brownian motion. # procedure fract_line(win,A,B,H,min_len,std_dev) local len_sq, direction, t, N, f, r, pt, len /H := 0.5 /min_len := 0.01 /std_dev := 0.12 len := distance(A,B) direction := Rel_angle(A,B) t := turtle(win, A, direction) if len <= min_len then Line_Forward(t, len) else { f := exp((0.5-H)*log(2.0)) r := gauss() * std_dev * f N := point() N.x := 0.5*(A[1] + B[1]) - r*(B[2]-A[2]); N.y := 0.5*(A[2] + B[2]) + r*(B[1]-A[1]); fract_line(win, A, N, H, min_len, std_dev) fract_line(win, N, B, H, min_len, std_dev) } return end # Simple drawing primitives ############################################################################ procedure DrwLine(w,pnts[]) # draw a polyline if *pnts < 2 then fail # ... not enough points return DrawLine ! ([w.vp.screen]|||transform_points(pnts,w.xform_mat[1])) end procedure DrawConvexClipped(w,poly,pnts[]) # clip to polygon local i if (*pnts < 2) | (*poly < 3) then fail every i :=? VMS.BCK[V9.IPL.GPROCS]GLIB.ICN;1;1$L 2 to *pnts do { DrwLine ! ([w]|||Convex_clip(poly,pnts[i-1],pnts[i])) } return end procedure DrawPolygon(args[]) # draw a polygon return DrwLine ! (args|||[args[2]]) end procedure FillPolygon(w,pnts[]) # draw a filled polygon if *pnts < 2 then fail # ... not enough points return FillPolygon ! ([w.vp.screen]||| transform_points(pnts|||[pnts[1]],w.xform_mat[1])) end # Matrix operations ############################################################################ # All matrices are stored as lists of lists, and all # operations determine the size of the matrix directly # from the matrix itself procedure mwrite(m) # output a matrix (usually for debugging) local r, c, row, col r := *m c := *m[1] writes("[") every row := 1 to r do { writes("[") every col := 1 to c do { writes(right(m[row][col],6),", ") } write("]") } write("]") end procedure newmat(n,m) # create a matrix local M M := list(n) every !M := list(m) return M end procedure Imatrix(n,m) # Identity matrix local M, r, c M := newmat(n,m) every r := 1 to n do { every c := 1 to m do { M[r][c] := if r = c then 1.0 else 0.0 } } return M end procedure mmult(m1,m2) # matrix multiply local m3, r, c, nk, k if (nk := *m1[1]) ~= *m2 then stop("Matrices are wrong size to multiply") m3 := newmat(*m1,*m2[1]) every r := 1 to *m1 do { every c := 1 to *m2[1] do { m3[r][c] := 0.0 every k := 1 to nk do { m3[r][c] +:= m1[r][k] * m2[k][c] } } } return m3 end # low-level screen activity ############################################################################ record viewport(ul, lr, screen) record window(ll, ur, vp, xform_mat) procedure set_window(win, ll, ur, vp) # construct new graphics window local x_scale, y_scale, x_trans, y_trans, xfrm if /vp then { # make vp the entire 'screen' vp := viewport() vp.ul := [0,0] vp.lr := [numeric(WAttrib(win,"width")), numeric(WAttrib(win,"height"))] vp.screen := win } # determine scale and translate factors ... # (note the strange viewpoint references to get lower left corner) x_scale := real(vp.lr[1]-vp.ul[1]) / (ur[1]-ll[1]) y_scale := real(vp.ul[2]-vp.lr[2]) / (ur[2]-ll[2]) x_trans := real(vp.ul[1])-(ll[1]*x_scale) y_trans := real(vp.lr[2])-(ll[2]*y_scale) # ... and set up the transformation matrix xfrm := [mmult(set_scale(x_scale, y_scale), set_trans(x_trans, y_trans))] return window(ll, ur, vp, xfrm) end procedure change_viewport(window, ul, lr) local x_scale, y_scale, x_trans, y_trans, xfrm # determine scale and translate factors ... # (note the strange viewpoint references to get lower left corner) x_scale := real(lr[1]-ul[1]) / (window.ur[1]-window.ll[1]) y_scale := real(ul[2]-lr[2]) / (window.ur[2]-window.ll[2]) x_trans := real(ul[1])-(window.ll[1]*x_scale) y_trans := real(lr[2])-(window.ll[2]*y_scale) # ... and set up the transformation matrix xfrm := [mmult(set_scale(x_scale, y_scale), set_trans(x_trans, y_trans))] window.xform_mat := xfrm window.vp.ul := ul window.vp.lr := lr return end # support.icn -- miscellaneous support routines ############################################################################ # para -- parametric equation for coordinate between two others # procedure para(a,b,t) return (1.0-t)*a + t*b end # vpara -- produce a vector that is parametrically between two others # procedure vpara(v1,v2,t) local v, i v := copy(v1) every i := 1 to *v1 do v[i] := para(v1[i],v2[i],t) return v end # sleep -- 'sleep' of n seconds (n may be fractional) # procedure sleep(n) local start start := &time while &time <= start+n*1000 end procedure round(n,g) return integer((n + g/2.0)/g) * g end # Some nice random functions # Do a Gaussian distribution about the value 'x'. # The value of 'f' can be used to alter the shape # of the Gaussian distritbution (larger values flatten # the curve...) procedure Gauss_random(x,f) # if 'f' not passed in, default to 1.0 /f := 1.0 return gauss()*f+x end # Produce a random value within a Gaussian distribution # about 0.0. (Sum 12 random numbers between 0 and 1, # (expected mean is 6.0) and subtract 6 to center on 0.0 procedure gauss() local v v := 0.0 every 1 to 12 do v +:= ?0 return v-6.0 end # # A simple implementation of 'turtle' graphics for multiple windows # one can have more than one turtle simultaneously active # In a turtle, the color field (if used) must be a co-expressions # that produces the color. This allows the turtle to change # color as it runs. In the simplest case, construct the # turtle with a co-expression the repeatedly supplies the # the same color: create |"red" ############################################################################ record turtle(win,pos,direction,color) procedure moveto(t,p) return t.pos := p end procedure lineto(t,p) Fg(t.win.vp.screen, \@\(t.color)) DrwLine(t.win, t.pos, p) return t.pos := p end procedure moverel(t, displacement) return moveto(t, add_vectors(t.pos, displacement)) end procedure drawrel(t, displacement) return lineto(t, add_vectors(t.pos, displacement)) end procedure Line_Forward(t, dist) local angle, p angle := dtor(t.direction) p := [t.pos[1]+dist*cos(angle), t.pos[2]+dist*sin(angle)] return lineto(t, p) end procedure Move_Forward(t, dist) local angle, p angle := dtor(t.direction) p := [t.pos[1]+dist*cos(angle), t.pos[2]+dist*sin(angle)] return moveto(t, p) end procedure Right(t, angle) return t.direction -:= angle end procedure Left(t, angle) return t.direction +:= angle end # Some vector operations ############################################################################ procedure add_vectors(v1,v2) local v3, i if *v1 ~= *v2 then stop("cannot add vectors of differing sizes") v3 := copy(v1) every i := 1 to *v3 do v3[i] := v1[i]+v2[i] return v3 end procedure sub_vectors(v1,v2) local v3, i if *v1 ~= *v2 then stop("cannot subtract vectors of differing sizes") v3 := copy(v1) every i := 1 to *v3 do v3[i] := v1[i]-v2[i] return v3 end procedure scale_vector(s,a) local v, i v := copy(a) every i := 1 to *v do v[i] *:= s return v end procedure len_vector(v) local sum_sq sum_sq := 0 every sum_sq +:= (!v)^2 return sqrt(sum_sq) end procedure unit_vector(v) return scale_vector(1.0/len_vector(v), v) end procedure dot(v1,v2) local sum, i if *v1 ~= *v2 then stop("dot product: vectors of differing sizes") sum := 0 every i := 1 to *v1 do sum +:= v1[i]*v2[i] return sum end procedure angle_vectors(v1,v2) return rtod(acos(dot(unit_vector(v1),unit_vector(v2)))) end procedure normal_vector(v) local n n := copy(v) n[1] := v[2] n[2] := -v[1] return n end # # The following are special cases for points... # procedure make_vector(p1,p2) return sub_vectors(p2,p1) end procedure distance(p1,p2) return len_vector(sub_vectors(p2,p1)) end procedure Rel_angle(A,B) # get angle of line through points A and B (2D only!) local rise, run rise := B[2]-A[2] run := B[1]-A[1] return rtod(atan(rise, run)) end procedure normal_line(p1,p2) # return a normal to a line return normal_vector(make_vector(p1,p2)) end procedure inside_line(P,L,n) # is P inside line passing throu VMS.BCK[V9.IPL.GPROCS]GLIB.ICN;1;1$ gh L with normal n? return 0 <= dot(sub_vectors(P,L),n) end # Transformation operations ############################################################################ procedure transform(p,M) local pl, i # convert p to a matrix for matrix multiply... every put((pl := [[]])[1], (!p)|1.0) # the 1.0 makes it homogeneous # do the conversion... pl := mmult(pl, M) # convert list back to a point... p := copy(p) every i := 1 to *p do p[i] := pl[1][i] return p end procedure transform_points(pl,M) local xformed every put(xformed := [], !transform(!pl,M)) return xformed end procedure set_scale(x,y,z) # set up an Xform matrix for scaling local M M := if /z then Imatrix(3,3) else Imatrix(4,4) M[1][1] := x M[2][2] := y M[3][3] := \z return M end procedure set_trans(x,y,z) # set up an Xform matrix for translation local M M := if /z then Imatrix(3,3) else Imatrix(4,4) M[*M][1] := x M[*M][2] := y M[*M][3] := \z return M end procedure set_rotate(x,y,z) # set up an Xform matrix for rotation local X, Y, Z if /y & /z then { # 2-D rotation X := Imatrix(3,3) X[1][1] := cos(x) X[2][2] := X[1][1] X[1][2] := sin(x) X[2][1] := -X[1][2] return X } X := Imatrix(4,4) X[2][2] := cos(x) X[3][3] := X[2][2] X[2][3] := sin(x) X[3][2] := -X[2][3] Y := Imatrix(4,4) Y[1][1] := cos(y) Y[3][3] := Y[1][1] Y[3][1] := sin(y) Y[1][3] := -Y[3][1] Z := Imatrix(4,4) Z[1][1] := cos(z) Z[2][2] := Z[2][2] Z[1][2] := sin(z) Z[2][1] := -Z[1][2] return mmult(X,mmult(Y,Z)) end # # Generalized parametric curve drawing routine, using turtle t # procedure draw_curve(t,x,xa,y,ya,t1,t2,N) local incr, t0 /t1 := 0.0 /t2 := 1.0 /N := 500 incr := (t2-t1)/(N-1) t0 := t1 moveto(t, point( x!([t0]|||xa), y!([t0]|||ya))) every 1 to N-1 do { t0 +:= incr lineto(t, point( x!([t0]|||xa), y!([t0]|||ya))) } end *[V9.IPL.GPROCS]GPROCS.LST;1+,Y./ 4-0123KPWO56HI7S4I89Jj$GHJautopost barchart bitplane button cardbits clip color decay dialog dialogs drawcard drawlab dsetup enqueue evmux fetchpat gdisable glib gpxlib gpxop graphics imagedim imscolor imsutils imutils imxform joinpair linddraw lindterp lsystem optwindw overlay patutils patxform psrecord putpixel slider strpchrt subturtl turtle vbuttons vcoupler vdialog vframe vgrid vidgets viface vmenu vpane vquery vradio vscroll vsetup vslider vstd vstyle vtext win window wipe wopen xbfont xcolor xcompat xgtrace xio xplane xputpixl xqueue xutils *[V9.IPL.GPROCS]GPXLIB.ICN;1+,7./ 4#-0123KPWO56:7E:89Jj$GHJ ############################################################################ # # File: gpxlib.icn # # Subject: Procedures for graphics tasks # # Author: Gregg M. Townsend # # Date: July 5, 1994 # ############################################################################ # # The following procedure allows an additional first argument # specifying a window to use instead of &window: # # ScratchCanvas(w, h) returns a hidden-canvas window for temporary use. # The same scratch window (per display) is returned by successive calls, # avoiding the cost of creation. The size is guaranteed to be at least # (w, h), which default to the size of the window. The scratch window # must not be closed by the caller, but an EraseArea can be done to # reclaim any allocated colors. # ############################################################################ # # The following procedures do not accept a window argument: # # PushWin(L) pushes &window onto the front of list L if the first # element of the list is not a window. This aids in constructing # variable-argument procedures with an optional window argument. # # Distance(x1, y1, x2, y2) returns the distance between two points # as a real number. # # InBounds(x, y, w, h) checks whether &x and &y are within the given # region: it returns &null if x <= &x <= x+w and y <= &y <= y+h, # and fails otherwise. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # PushWin(L) -- push &window on list if no window already there. procedure PushWin(a) if not (type(a[1]) == "window") then push(a, &window) return a end # Distance(x1, y1, x2, y2) -- compute distance between two points. procedure Distance(x1, y1, x2, y2) x1 -:= x2 y1 -:= y2 return sqrt(x1 * x1 + y1 * y1) end # InBounds(x, y, w, h) -- succeed if (&x,&y) is in a rectangular area. procedure InBounds(x, y, w, h) if w < 0 then x -:= (w := -w) if h < 0 then y -:= (h := -h) return (x <= &x <= x + w) & (y <= &y <= y + h) & &null end # ScratchCanvas([win,] w, h) -- return hidden window for temporary use. procedure ScratchCanvas(win, w, h) local d static dpytab initial dpytab := table() if type(win) ~== "window" then { win :=: w :=: h win := &window } /w := WAttrib(win, "width") /h := WAttrib(win, "height") w <:= 100 # if too teeny, can't open h <:= 100 d := WAttrib(win, "display") /dpytab[d] := WOpen("width=" || w, "height=" || h, "canvas=hidden") win := dpytab[d] if /win then fail if WAttrib(win, "width") < w | WAttrib(win, "height") < h then WAttrib(win, "width=" || w, "height=" || h) return win end l*[V9.IPL.GPROCS]GPXOP.ICN;1+,?./ 4-0123KPWO56@N_=7|=89Jj$GHJ############################################################################ # # File: gpxop.icn # # Subject: Procedures for graphics operations # # Author: Gregg M. Townsend # # Date: July 5, 1994 # ############################################################################ # # The following procedures allow an additional first argument # specifying a window to use instead of &window: # # LeftString(x, y, s), CenterString(x, y, s), and RightString(x, y, s) # draw a string centered verticall=< VMS.BCK?[V9.IPL.GPROCS]GPXOP.ICN;11PQy about y and left-justified, # centered, or right-justified about x. # # ClearOutline(x, y, w, h) draws a rectangle in the foreground color # and fills it with the background color. # # Translate(dx, dy, w, h) adjusts a window's dx and dy attributes by # the values given. Note that the resulting attribute values are the # sums of the existing values with the parameters, so that successive # translations accumulate. If w and h are supplied, the clipping # region is set to a rectangle of size (w, h) at the new origin. # # Zoom(x1, y1, w1, h1, x2, y2, w2, h2) is a distorting variation of # CopyArea than can be used to shrink or enlarge a rectangluar area. # Zero, one, or two window arguments can be supplied. Rectangle 1 is # copied to fill rectangle 2 using simple pixel sampling and replication. # The rectangles can overlap. The usual defaults apply for both rectangles. # # Sweep() lets the user select a rectangular area using the mouse. # Called when a mouse button is pressed, Sweep handles all subsequent # events until a mouse button is released. As the mouse moves, a # reverse-mode outline rectangle indicates the selected area. The # pixels underneath the rectangle outline are considered part of this # rectangle, implying a minimum width/height of 1, and the rectangle # is clipped to the window boundary. Sweep returns a list of four # integers [x,y,w,h] giving the rectangle bounds in canonical form # (w and h always positive). Note that w and h give the width as # measured in FillRectangle terms (number of pixels included) rather # than DrawRectangle terms (coordinate difference). # # Capture(palette, x, y, w, h) converts a window region into an # image string using the specified palette, and returns the string. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # LeftString(x, y, s) -- draw string left-justified at (x,y). procedure LeftString(win, x, y, s) if type(win) ~== "window" then { win :=: x :=: y :=: s win := &window } y +:= (WAttrib(win, "ascent") - WAttrib(win, "descent")) / 2 + 1 return DrawString(win, x, y, s) end # CenterString(x, y, s) -- draw string centered about (x,y). procedure CenterString(win, x, y, s) if type(win) ~== "window" then { win :=: x :=: y :=: s win := &window } x -:= TextWidth(win, s) / 2 y +:= (WAttrib(win, "ascent") - WAttrib(win, "descent")) / 2 + 1 return DrawString(win, x, y, s) end # RightString(x, y, s) -- draw string right-justified at (x,y). procedure RightString(win, x, y, s) if type(win) ~== "window" then { win :=: x :=: y :=: s win := &window } x -:= TextWidth(win, s) y +:= (WAttrib(win, "ascent") - WAttrib(win, "descent")) / 2 + 1 return DrawString(win, x, y, s) end # ClearOutline(x, y, w, h) -- draw rectangle and fill background. procedure ClearOutline(win, x, y, w, h) if type(win) ~== "window" then { win :=: x :=: y :=: w :=: h win := &window } if w < 0 then x -:= (w := -w) if h < 0 then y -:= (h := -h) DrawRectangle(win, x, y, w, h) EraseArea(win, x+1, y+1, w-1, h-1) return end # Translate(dx, dy, w, h) -- add translation and possibly clipping. procedure Translate(win, dx, dy, w, h) if type(win) ~== "window" then { win :=: dx :=: dy :=: w :=: h win := &window } WAttrib(win, "dx=" || WAttrib(win,"dx")+dx, "dy=" || WAttrib(win,"dy")+dy) Clip(win, 0, 0, \w, \h) return end # Sweep() -- sweep out area with mouse, return bounds procedure Sweep(win) local x, y, w, h, wmin, wmax, hmin, hmax /win := &window win := Clone(win, "drawop=reverse") x := &x # set initial rect bounds y := &y w := h := 0 wmin := -WAttrib(win, "dx") - x # calc coordinate limits hmin := -WAttrib(win, "dy") - y wmax := wmin + WAttrib(win, "width") - 1 hmax := hmin + WAttrib(win, "height") - 1 DrawRectangle(win, x, y, w, h) # draw initial bounding rect until Event(win) === (&lrelease | &mrelease | &rrelease) do { DrawRectangle(win, x, y, w, h) # erase old bounds w := &x - x # calc new width & height h := &y - y w <:= wmin # clip to stay on window w >:= wmax h <:= hmin h >:= hmax DrawRectangle(win, x, y, w, h) # draw new bounds } DrawRectangle(win, x, y, w, h) # erase bounding rectangle if w < 0 then x -:= (w := -w) # ensure nonnegative sizes if h < 0 then y -:= (h := -h) return [x, y, w + 1, h + 1] # return FillRectangle bounds end # Zoom(win1, win2, x1, y1, w1, h1, x2, y2, w2, h2) -- copy and distort. procedure Zoom(args[]) local win1, x1, y1, w1, h1 local win2, x2, y2, w2, h2 local x, y, scr if type(args[1]) == "window" then win1 := get(args) else win1 := \&window | runerr(140, &window) if type(args[1]) == "window" then win2 := get(args) else win2 := win1 x1 := \get(args) | 0 y1 := \get(args) | 0 w1 := \get(args) | WAttrib(win1, "width") - x1 h1 := \get(args) | WAttrib(win1, "height") - y1 if w1 < 0 then x1 -:= (w1 := -w1) if h1 < 0 then y1 -:= (h1 := -h1) x2 := \get(args) | 0 y2 := \get(args) | 0 w2 := \get(args) | WAttrib(win2, "width") - x2 h2 := \get(args) | WAttrib(win2, "height") - y2 if w2 < 0 then x2 -:= (w2 := -w2) if h2 < 0 then y2 -:= (h2 := -h2) if w1 = 0 | w2 = 0 | h1 = 0 | h2 = 0 then return scr := ScratchCanvas(win2, w2, h1) | fail every x := 0 to w2 - 1 do CopyArea(win1, scr, x1 + w1 * ((x + 0.5) / w2), y1, 1, h1, x, 0) every y := 0 to h2 - 1 do CopyArea(scr, win2, 0, h1 * ((y + 0.5) / h2), w2, 1, x2, y2 + y) EraseArea(scr) # release colors return end # Capture(win, pal, x, y, w, h) -- capture screen region as image string $define CaptureChunk 100 procedure Capture(win, pal, x, y, w, h) local a, c, s, t if type(win) ~== "window" then { win :=: pal :=: x :=: y :=: w :=: h win := \&window | runerr(140, &window) } /pal := "c1" /x := 0 /y := 0 /w := WAttrib(win, "width") - x /h := WAttrib(win, "height") - y if w < 0 then x -:= (w := -w) if h < 0 then y -:= (h := -h) PaletteChars(win, pal) | runerr(205, pal) # accumulate the image in chunks and then concatenate # (much faster than concatenating single chars on a very long string) s := "" a := [] every c := PaletteKey(win, pal, Pixel(win, x, y, w, h)) do if *(s ||:= c) >= CaptureChunk then { put(a, s) s := "" } put(a, s) s := w || "," || pal || "," while s ||:= get(a) return s end *[V9.IPL.GPROCS]GRAPHICS.ICN;1+,@./ 4#-0123KPWO56=7 >89Jj$GHJ k߰ VMS.BCK@[V9.IPL.GPROCS]GRAPHICS.ICN;1h############################################################################ # # File: graphics.icn # # Subject: Procedures for graphics # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # Links to core subset of graphics procedures. # ############################################################################ link color link dialog link enqueue link gpxop link gpxlib link vidgets # basic set needed by Dialog() and Vset() link window link wopen #*[V9.IPL.GPROCS]IMAGEDIM.ICN;1+, ./ 4-0123KPWO5637389Jj$GHJ############################################################################ # # File: imagedim.icn # # Subject: Procedures for getting image dimensions # # Author: Ralph E. Griswold # # Date: November 9, 1991 # ############################################################################ # # imagedim(s) returns a record that contins the type and dimensions of an # image named s. # # The assumptions about image formats are naive. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ record idim(type, w, h) procedure imagedim(s) local Image, line, dim Image := open(s) | stop("*** cannot open ", s) line := read(Image) | idim_bad() line ? { if tab(find("width") + 6) then { dim := idim("xbm") dim.w := integer(tab(0)) | idim_bad() read(Image) ? { tab(find("height") + 7) | idim_bad() dim.h := integer(tab(0)) | idim_bad() } | idim_bad() } else if find("XPM") then { dim := idim("xpm") read(Image) | idim_bad() read(Image) ? { ="\"" & dim.w := integer(tab(many(&digits))) & =" " & dim.h := integer(tab(many(&digits))) } | idim_bad() } } # close(Image) return dim end procedure idim_bad() stop("*** bad image data") end *[V9.IPL.GPROCS]IMSCOLOR.ICN;1+,A./ 4\-0123KPWO56@4 >7`}s>89Jj$GHJ############################################################################ # # File: imscolor.icn # # Subject: Procedures for manipulating images # # Author: Gregg M. Townsend # # Date: May 27, 1994 # ############################################################################ # # imswidth(im) returns the width of an image. # imsheight(im) returns the height of an image. # imspalette(im) returns the palette used by an image. # # imsmap(s1, s2, s3) returns an image produced by mapping the data (only) # of image s1 and replacing characters found in s2 with corresponding # characters from s3. # # imswrite(f, s, n) writes image string s to file f, limiting the line # length to n characters. Defaults are f = &output, n = 79. Extra # punctuation in s makes the lines break at nonsensical places, but # the output is still legal. # # drawpalette([win,] p, x, y, w, h, f) draws the colors of palette p # in the given rectangular region. The layout algorithm works best # when the height is two to four times the width. Characters in the # flag string f have these meanings: # l label each color with its key # o outline each color in black # # pickpalette([win,] p, dx, dy, w, h) returns the character at offset # (dx, dy) within a region drawn by drawpalette(win, p, x, y, w, h). # # XPMImage([win,] f, palette) reads an XPM (X Pixmap) format image from # the open file f and returns an Icon image specification that uses the # specified palette. XPMImage() fails if it cannot decode the file. # If f is omitted, &input is used; if palette is omitted, "c1" is used. # Not all variants of XPM format are handled; in particular, images that # use more than one significant input character per pixel, or that use # the old XPM Version 1 format, cause XPMImage() to fail. No window # is required, but X-specific color names like "papayawhip" will not # be recognized without a window. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # imspalette(im) -- return palette used by image procedure imspalette(im) im ? {tab(upto(',') + 1) & return ((="#" & &null) | tab(upto(',')))} end # imswidth(im) -- return width of image procedure imswidth(im) im ? return integer(tab(upto(','))) end # imsheight(im) -- return height of image procedure imsheight(im) local pal, w, n, d, c im ? { w := integer(tab(upto(','))) | fail move(1) if ="#" then { n := IMH_Count('0123456789ABCDEFabcdef') d := (w + 3) / 4 return (n + d - 1) / d } pal := tab(upto(',')) | fail move(1) c := cset(PaletteChars(pal)) | fail n := IMH_Count(c ++ '~\xFF') return (n + w - 1) / w } end procedure IMH_Count(c) # count remaining chars that are in cset c local n n := 0 while tab(upto(c)) do n +:= *tab(many(c)) return n end # imsmap(s1, s2, s3) -- map the data (only) of an image string procedure imsmap(s1, s2, s3) s1 ? return tab(upto(',')+1) || tab(upto(',')+1) || map(tab(0), s2, s3) end # imswrite(f, s, n) -- write image string s to file f, max linelength of n. procedure imswrite(f, s, n) local w, h, p, d, ll w := imswidth(s) | fail h := imsheight(s) | fail p := imspalette(s) | fail if /p then # if bilevel image d := (w + 3) / 4 # number of digits per row else d := w /f := &output /n := 79 # Figure out a reasonable line length for output, with n as maximum n -:= 1 # allow for underscore if upto('\0', PaletteChars(\p)) then n /:= 4 # allow for escapes ll := 1 + (n > (d - 1) / seq(1)) # divide line as equally as possible # Write the image as a multiline string constant. s ? { tab(upto(',') + 1) ="#" | tab(upto(',') + 1) write(f, "\"", w, ",", (\p || ",") | "#", "_") while not pos(0) do IWR_Row(f, move(d) | tab(0), ll) write(f, "\"") } return end procedure IWR_Row(f, s, n) # write one row, max n bytes per line s ? while not pos(0) do write(f, image(move(n) | tab(0)) [2:-1], "_") return end # drawpalette(win, p, x, y, w, h, f) -- draw palette in region procedure drawpalette(win, p, x, y, w, h, f) local nw, nh, c, s, colr, x1, x2, y1, y2, i, j, ret static cs initial cs := &ascii[33+:95] if type(win) ~== "window" then { win :=: p :=: x :=: y :=: w :=: h :=: f win := \&window | runerr(140, &window) } win := Clone(win) != VMS.BCKA[V9.IPL.GPROCS]IMSCOLOR.ICN;1 ret := win /x := 0 /y := 0 /w := WAttrib(win, "width") - x /h := WAttrib(win, "height") - y /f := "" s := PAL_Order(p) | fail nw := case p of { "c1": 6 "c2": 2 "c3": 3 "c4": 4 "c5": 5 "c6": 6 default: integer(w / sqrt(w * h / *s)) } nh := (*s + nw - 1) / nw EraseArea(win, x, y, w, h) if f ? upto('o') then { w -:= 1 h -:= 1 } i := j := 0 every c := !s do { x1 := x + j * w / nw x2 := x + (j + 1) * w / nw y1 := y + i * h / nh y2 := y + (i + 1) * h / nh Fg(win, colr := PaletteColor(p, c)) | (ret := &null) FillRectangle(win, x1, y1, x2 - x1, y2 - y1) if upto('l', f) then { Fg(win, Contrast(win, colr)) if not upto(cs, c) then c := image(c)[-3:-1] CenterString(win, (x1 + x2) / 2, (y1 + y2) / 2, c) } if upto('o', f) then { Fg(win, "black") DrawRectangle(win, x1, y1, x2 - x1, y2 - y1) } if (j +:= 1) >= nw then { j := 0 i +:= 1 } } Uncouple(win) return \ret end # pickpalette(win, p, dx, dy, w, h) -- return key picked from drawn palette procedure pickpalette(win, p, dx, dy, w, h) local s, nw, nh if type(win) ~== "window" then { win :=: p :=: dx :=: dy :=: w :=: h win := \&window | runerr(140, &window) } /w := WAttrib(win, "width") /h := WAttrib(win, "height") if dx < 0 | dy < 0 | dx >= w | dy >= h then fail s := PAL_Order(p) | fail nw := case p of { "c1": 6 "c2": 2 "c3": 3 "c4": 4 "c5": 5 "c6": 6 default: integer(w / sqrt(w * h / *s)) } nh := (*s + nw - 1) / nw dx := ((dx + 1) * nw - 1) / w dy := ((dy + 1) * nh - 1) / h return s[1 + nw * dy + dx] end # PAL_Order(p) -- return reordered palette chars (internal routine) # # Normal order for color cube is sorted r/g/b, then extra grays. # Reorder by g/r/b followed by full set of grays including duplicates # except black. Returns unmodified list of characters for c1 and # grayscale palettes. procedure PAL_Order(p) local palchars, s, t, n, n3, d, i, l palchars := PaletteChars(p) | fail p ? { if not (="c" & any('23456')) then return palchars n := move(1) } palchars ? { l := list(n, "") n3 := n * n * n while &pos <= n3 do every !l ||:= (move(n) \ 1) s := "" every s ||:= !l d := n * (n + 1) + 1 i := 1 while s ||:= move(n - 1) do s ||:= palchars[i +:= d] } return s end # XPMImage(win, f, palette) -- read XPM file and return Icon image spec procedure XPMImage(win, f, pal) local w, h, nc, cpp, i, im, c, k, s1, s2 if type(win) ~== "window" then { win :=: f :=: pal win := &window # okay if null } /f := &input /pal := "c1" type(f) == "file" | runerr(105, f) PaletteChars(pal) | runerr(205, f) (read(f) ? find("XPM")) | fail (XPM_RdStr(f) | fail) ? { tab(many(' \t')); w := tab(many(&digits)) | fail tab(many(' \t')); h := tab(many(&digits)) | fail tab(many(' \t')); nc := tab(many(&digits)) | fail tab(many(' \t')); cpp := tab(many(&digits)) | fail } if w = 0 | h = 0 then fail # read colors and figure out translation s1 := s2 := "" every i := 1 to nc do (XPM_RdStr(f) | fail) ? { s1 ||:= move(1) if cpp > 1 then =" " | fail # if not blank, we can't handle it k := &null # find a color key we can decipher; try color, then grayscale, then mono (c := !"cgm") & tab(upto(' \t') + 1) & =c & tab(many(' \t')) & (k := XPM_Key(win, pal, (tab(upto(' \t') | 0)))) # use first color found, or default if none s2 ||:= \k | PaletteKey(pal, "gray") } # construct image im := w || "," || pal || "," if cpp = 1 then while im ||:= map(XPM_RdStr(f), s1, s2) else while im ||:= map(XPM_Nth(XPM_RdStr(f), cpp), s1, s2) return im end procedure XPM_Key(win, pal, s) # return key corresponding to color s if s == "None" then { # if transparent if PaletteColor(pal, "~") then # if "~" is in palette return "\xFF" # then use "\xFF" for transparent else return "~" # but use "~" if possible } if \win then return PaletteKey(win, pal, s) # return key from palette, or fail else return PaletteKey(pal, s) # return key from palette, or fail end procedure XPM_RdStr(f) # read next C string from file f local line, s while line := read(f) do line ? { tab(many(' \t')) ="\"" | next if s := tab(upto('"')) then return s } fail end procedure XPM_Nth(s, n) # concatenate every nth character from s local t n -:= 1 t := "" s ? while t ||:= move(1) do move(n) return t end *[V9.IPL.GPROCS]IMSUTILS.ICN;1+,-./ 4-0123KPWO56m77p9889Jj$GHJ############################################################################ # # File: imsutils.icn # # Subject: Procedures to manipulate image specifications # # Author: Ralph E. Griswold # # Date: Decemeber 29, 1993 # ############################################################################ # # Requires: Version 8.11 graphics # ############################################################################ # # Links: radcon # ############################################################################ link radcon record tdim(w, h) # # Test whether two image matrices are equivalent procedure patident(imx1, imx2) local i if *imx1 ~= *imx2 then fail if **imx1 ~= **imx2 then fail every i := 1 to *imx1 do if imx1[i] ~== imx2[1] then fail return imx2 end # # Draw a tile at a given location. If mode is nonnull, the # area on which the tile is drawn is erased. procedure XDrawTile(win, xoff, yoff, pattern, magnif, mode) local x, y, row, pixel, dims, arglist if type(win) ~== "window" then { win :=: xoff :=: yoff :=: pattern :=: mode win := &window } if magnif = 1 then XDrawImage(win, xoff, yoff, pattern, mode) else { if \mode then { dims := tiledim(pattern) XEraseArea(xoff, yoff, dims.w * magnif, dims.h * magnif) } y := yoff every row := rowbits(pattern) do { # draw a row x := xoff arglist := [] every pixel := !row do { if pixel = "1" then put(arglist, x, y, magnif, magnif) x +:= magnif } y +:= magnif if *arglist = 0 then next XFillRectangle ! arglist } } return end # # Draw image matrix at a given location. If mode is nonnull, the # area on which the tile is drawn is erased. procedure XDrawRows(win, xoff, yoff, imx, magnif, mode) local x, y, row, pixel, arglist if type(win) ~== "window" then { win :=: xoff :=: yoff :=: imx :=: magnif :=: mode win := &window }"I5 VMS.BCK-[V9.IPL.GPROCS]IMSUTILS.ICN;1/| /magnif := 1 y := yoff if \mode then XEraseArea(xoff, yoff, *imx[1] * magnif, *imx * magnif) every row := !imx do { # draw a row x := xoff arglist := [] if magnif = 1 then { every pixel := !row do { if pixel == "1" then put(arglist, x, y) x +:= 1 } y +:= 1 } else { every pixel := !row do { if pixel = "1" then put(arglist, x, y, magnif, magnif) x +:= magnif } y +:= magnif } if *arglist = 0 then next if magnif = 1 then XDrawPoint ! arglist else XFillRectangle ! arglist } return end # # Convert bit string to hex pattern string procedure bits2hex(s) static bittab local hex initial { bittab := table() bittab["0000"] := "0" bittab["1000"] := "1" bittab["0100"] := "2" bittab["1100"] := "3" bittab["0010"] := "4" bittab["1010"] := "5" bittab["0110"] := "6" bittab["1110"] := "7" bittab["0001"] := "8" bittab["1001"] := "9" bittab["0101"] := "a" bittab["1101"] := "b" bittab["0011"] := "c" bittab["1011"] := "d" bittab["0111"] := "e" bittab["1111"] := "f" } hex := "" s ? { while hex := bittab[move(4)] || hex if not pos(0) then hex := bittab[left(tab(0), 4, "0")] || hex } return hex end # # Convert pattern specification to decimal form procedure decspec(pattern) local cols, chunk, dec pattern ? { if not upto("#") then return pattern cols := tab(upto(',')) move(2) chunk := (cols + 3) / 4 dec := cols || "," while dec ||:= integer("16r" || move(chunk)) || "," } return dec[1:-1] end # # Get pattern from line. It trims off leading and trailing whitespace # and removes any annotation (beginning with a # after the first whitespace procedure getpatt(line) line ? { tab(many(' \t')) return tab(upto(' \t') | 0) } end # # Get pattern annotation. It returns an empty string if there is # no annotation. procedure getpattnote(line) line ? { tab(many(' \t')) # remove leading whitespace tab(upto(' \t')) | return "" # skip pattern tab(upto('#')) | return "" # get to annotation tab(many('# \t')) # get rid of leading junk return tab(0) # annotation } end # Convert hexadecimal string to bits procedure hex2bits(s) static hextab local bits initial { hextab := table() hextab["0"] := "0000" hextab["1"] := "0001" hextab["2"] := "0010" hextab["3"] := "0011" hextab["4"] := "0100" hextab["5"] := "0101" hextab["6"] := "0110" hextab["7"] := "0111" hextab["8"] := "1000" hextab["9"] := "1001" hextab["a"] := "1010" hextab["b"] := "1011" hextab["c"] := "1100" hextab["d"] := "1101" hextab["e"] := "1110" hextab["f"] := "1111" } bits := "" map(s) ? { while bits ||:= hextab[move(1)] } return bits end # # Convert pattern to hexadecimal form procedure hexspec(pattern) local cols, chunk, hex pattern ? { if find("#") then return pattern cols := tab(upto(',')) move(1) chunk := (cols + 3) / 4 hex := cols || ",#" while hex ||:= right(exbase10(tab(upto(',') | 0), 16), chunk, "0") do move(1) | break } return hex end # # Succeed if tile is legal and small enough for (X) pattern. Other # windows systems may be more restrictive. procedure legalpat(tile) if not legaltile(tile) then fail tile ? { if 0 < integer(tab(upto(','))) <= 32 then return tile else fail } end # # Succeed if tile is legal. Accepts tiles that are too big for # patterns. procedure legaltile(tile) map(tile) ? { # first check syntax (tab(many(&digits)) & =",") | fail if ="#" then (tab(many('0123456789abcdef')) & pos(0)) | fail else { while tab(many(&digits)) do { if pos(0) then break # okay; end of string else ="," | fail } if not pos(0) then fail # non-digit } } return hexspec(decspec(tile)) == tile end # # Convert pattern specification to an XBM image file. procedure pat2xbm(pattern, name) local dims, chunk, row /name := "noname" dims := tiledim(pattern) write("#define ", name, "_width ", dims.w) write("#define ", name, "_height ", dims.h) write("static char ", name, "_bits[] = {") chunk := (dims.w + 3) / 4 pattern ? { tab(upto('#') + 1) while row := move(chunk) do { if *row % 2 ~= 0 then row := "0" || row row ? { tab(0) while writes("0x", move(-2), ",") } write() } } write("};") end # # Count the number of bits set in a tile procedure tilebits(imx) local bits bits := 0 every bits +:= !!imx return bits end # # Compute density (percentage of black bits) of pattern procedure pdensity(pattern) local dark, dims dims := tiledim(pattern) hexspec(pattern) ? { dark := 0 every rowbits(pattern) ? { every upto('1') do dark +:= 1 } return dark / real(dims.w * dims.h) } end # # Procedure to produce pattern specification from a section of a window. procedure pix2pat(window, x, y, cols, rows) local c, tile, pattern, pixels, y0 pattern := "" every y0 := 0 to rows - 1 do { pixels := "" every c := XPixel(window, x, y0 + y, cols, 1) do pixels ||:= (if c == "0,0,0" then "1" else "0") pattern ||:= bits2hex(pixels) } if *pattern = 0 then fail # out of bounds specification else return cols || ",#" || pattern end # # Read pattern. It skips lines starting with a #, # empty lines, and trims off any trailing characters after the # first whitespace of a pattern. procedure readims(input) local line while line := read(input) do line ? { if pos(0) | ="#" then next return tab(upto(' \t') | 0) } fail end # # Read pattern line. It skips lines starting with a # and empty lines but # does not trim off any trailing characters after the first whitespace of # a pattern. procedure readimsline(input) local line while line := read(input) do line ? { if pos(0) | ="#" then next return tab(0) } fail end # # Generate rows of bits in a pattern. Doesn't work correctly for small # patterns. (Why?) procedure rowbits(pattern) local row, dims, chunk, hex dims := tiledim(pattern) hexspec(pattern) ? { tab(upto(',') + 2) hex := tab(0) chunk := *hex / dims.h hex ? { while row := right(hex2bits(move(chunk)), dims.w, "0") do suspend reverse(row) } } end # # Produce an image matrix from a image string procedure imstoimx(ims) local imx imx := [] every put(imx, rowbits(ims)) return imx end # # Convert row list to pattern specification procedure imxtoims(imx) local pattern pattern := *imx[1] || ",#" every pattern ||:= bits2hex(!imx) return pattern end # Show bits of a pattern procedure showbits(pattern) every write(rowbits(pattern)) write() return end # # Produce dimensions of the tile for a pattern procedure tiledim(pattern) local cols hexspec(pattern) ? { cols := integer(tab(upto(','))) move(2) return tdim(cols, *tab(0) / ((cols + 3) / 4))#< VMS.BCK-[V9.IPL.GPROCS]IMSUTILS.ICN;1 } end # # Produce height of a pattern specification procedure pheight(pattern) local cols hexspec(pattern) ? { cols := integer(tab(upto(','))) move(2) return *tab(0) / ((cols + 3) / 4) } end # # Produce width of a pattern specification procedure pwidth(pattern) hexspec(pattern) ? { return integer(tab(upto(','))) } end # # Generate rows of bits from an XBM file. Note: This apparently # is not quite right if there are more than 2 hex digits per # literal. procedure xbm2rows(input) local imagex, bits, row, hex, width, height, chunks static hexdigit initial hexdigit := &digits ++ 'abcdef' imagex := "" read(input) ? { tab(find("width") + 6) tab(upto(&digits)) width := integer(tab(many(&digits))) } read(input) ? { tab(find("height") + 6) tab(upto(&digits)) height := integer(tab(many(&digits))) } chunks := (width / 8) + if (width % 8) > 0 then 1 else 0 while imagex ||:= reads(input, 500000) # Boo! -- can do better imagex ? { every 1 to height do { row := "" every 1 to chunks do { (hex := tab(any(hexdigit)) || tab(any(hexdigit))) | { tab(find("0x") + 2) hex := move(2) } row ||:= case hex of { "00": "00000000" "ff": "11111111" default: reverse(right(hex2bits(hex), 8, "0")) } } suspend left(row, width) } } end *[V9.IPL.GPROCS]IMUTILS.ICN;1+,!./ 4M-0123KPWO56:37389Jj$GHJ############################################################################ # # File: imutils.icn # # Subject: Link declarations for graphics utilities # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ link imscolor link color link gpxop *[V9.IPL.GPROCS]IMXFORM.ICN;1+,4`./ 4-0123KPWO56А970Qj:89Jj$GHJ############################################################################ # # File: imxform.icn # # Subject: Procedures to transform image matrices # # Author: Ralph E. Griswold # # Date: January 1, 1994 # ############################################################################ # # Requires: Version 8.11, graphics # ############################################################################ # # Links: collate, factors, imsutils, strings, shuffle # ############################################################################ link collate link factors link imsutils link strings link shuffle # # Reduces a image matrix to the smallest equivalent one. procedure imxreduce(rows) rows := imxcollap(rows) rows := imxrotate(rows, 90) rows := imxcollap(rows) rows := imxrotate(rows, -90) return rows end procedure imxcollap(rows) local size, fact size := *rows every fact := !pfactors(size) do { while rowdupl(rows, fact) do { size /:= fact rows := rows[1+:size] } } return rows end procedure rowdupl(rows, n) local span, i, j if *rows % n ~= 0 then fail span := *rows / n every i := 1 to n - 1 do every j := 1 to span do if rows[j] ~== rows[i * span + j] then fail return end # # Produces the inclusive "or" of two image matrices. procedure imxor(rows1, rows2) local i, j if (*rows1 ~= *rows2) | (**rows1 ~= **rows2) then fail rows1 := copy(rows1) every i := 1 to *rows1 do every j := upto('1', rows2[i]) do rows1[i][j] := "1" return rows1 end # # Produces the "and" of two image matrices. procedure imxand(rows1, rows2) local i, j if (*rows1 ~= *rows2) | (**rows1 ~= **rows2) then fail rows1 := copy(rows1) every i := 1 to *rows1 do every j := upto('0', rows2[i]) do rows1[i][j] := "0" return rows1 end # # Produces the exclusive "or" of two image matrices. procedure imxxor(rows1, rows2) local i, j if (*rows1 ~= *rows2) | (**rows1 ~= **rows2) then fail rows1 := copy(rows1) every i := 1 to *rows1 do every j := 1 to **rows1 do rows1[i][j] := if rows1[i][j] == rows2[i][j] then "0" else "1" return rows1 end # # Scrambles a image matrix by shuffling it. If dir is "h", the columns of each row # are scrambled; if "v", the the rows are scrambled. If "b", bits are # scrambled throughout the image matrix. procedure imxscramb(rows, dir) local i, all case dir of { "h": { every i := 1 to *rows do rows[i] := shuffle(rows[i]) } "v": rows := shuffle(rows) "b" | &null: { all := "" every all ||:= !rows all := shuffle(all) every i := 1 to *rows do { rows[i] := left(all, *rows[1]) all[1 +: *rows[1]] := "" } } default: stop("*** illegal specification in scramble()") } return rows end # # Create bit-shifted copy of a image matrix. If dir is "h", then the # shift is horizontal; if "v", vertical. The default is horizontal. # Positive shift is to the right for horizontal shifts, downward for vertical # shifts. The default shift is 0 and the default direction is horizontal. procedure imxshift(rows, shift, dir) local i /shift := 0 rows := copy(rows) case dir of { "h" | &null: { # horizontal shift every i := 1 to *rows do rows[i] := rotate(rows[i], -shift) } "v": { # vertical shift if shift > 0 then every 1 to shift do push(rows, pull(rows)) else if shift < 0 then every 1 to -shift do put(rows, pop(rows)) } default: stop("*** illegal specification in imxshift()") } return rows end # # Place a border around a image matrix. l, r, t, and b specify the number of bits # to add at the left, right, top, and bottom, respectively. c specifies # the color of the border, "0" for white, "1" for black. procedure imxborder(rows, l, r, t, b, c) local i, row, left, right /l := 1 /r := 1 /t := 1 /b := 1 /c := "0" if l = r = t = b = 0 then return rows row := repl(c, *rows[1] + l + r) left := repl(c, l) right := repl(c, r) every i := 1 to *rows do rows[i] := left || rows[i] || right every 1 to t do push(rows, row) every 1 to b do put(rows, row) return rows end # # Crop a image matrix. l, r, t, and b specify the number of bits # to crop a$ VMS.BCK4`[V9.IPL.GPROCS]IMXFORM.ICN;1 t the left, right, top, and bottom, respectively. procedure imxcrop(rows, l, r, t, b) local i /l := 0 /r := 0 /t := 0 /b := 0 if l = r = t = b = 0 then return rows if ((*rows[1] - l - r) | (*rows - t - b)) < 4 then fail every 1 to t do get(rows) every 1 to b do pull(rows) every i := 1 to *rows do rows[i] := rows[i][l + 1 : -r] return rows end # Creates a tile in every other pixel is discarded. dir determines the # direction is which the halving is done. If dir is "b" or null, it's # done both vertically and horizontally. If dir is "v", it's only done # vertically, while if dir is "v", it's done only vertically. # If choice is "o" or null, odd-numbered rows or columns are kept; # if "e", the even-numbered ones. procedure imxhalve(rows, dir, choice) local newrows, i choice := if choice === ("o" | &null) then 1 else 0 newrows := [] case dir of { "v": { every i := choice to *rows by 2 do put(newrows, rows[i]) } "h": every put(newrows, decollate(!rows, choice)) "b" | &null: return imxhalve(imxhalve(rows, "v", choice), "h", choice) } return newrows end # # Creates a tile in which each pixel doubled. dir determines the # direction in which the doubling is done. If dir is "b" or null, it's # done both horizontally and vertically. If dir is "v", it's only done # vertically, while if dir is "h", it's done only horizontally. procedure imxdouble(rows, dir) local row, newrows newrows := [] case dir of { "v": { every row := !rows do put(newrows, row, row) } "h": { every row := !rows do put(newrows, collate(row, row)) } "b" | &null: return imxdouble(imxdouble(rows, "v"), "h") } return newrows end # # Flip image matrix. The possible values of dir are "h" (horizontal flip), # "v" (vertical flip), "l" (left diagonal), and "r" (right diagonal). # (The left diagonal extends from the upper left corner to the bottom # right corner; the right diagonal from the upper right to the lower # left. procedure imxflip(rows, dir) local newrows, x, y, i case dir of { "l": { newrows := list(*rows[1], repl("0", *rows)) every y := 1 to *rows do every x := 1 to *rows[1] do if rows[y, x] == "1" then newrows[-x, -y] := "1" } "r": { newrows := list(*rows[1], repl("0", *rows)) every y := 1 to *rows do every x := 1 to *rows[1] do if rows[y, x] == "1" then newrows[x, y] := "1" } "h": { newrows := copy(rows) every i := 1 to *rows do newrows[i] := reverse(newrows[i]) } "v": { newrows := copy(rows) every i := 1 to *rows / 2 do newrows[i] :=: newrows[-i] } default: stop("*** illegal flip specification in imxflip()") } return newrows end # # Invert white and black bits in image matrix specification procedure imxinvert(rows) local i every i := 1 to *rows do rows[i] := map(rows[i], "10", "01") return rows end # # Reduce image matrix to its smallest equivalent form (with at least 4 columns). # Limited to square image matrices for portability -- other possibilities exist # for operating on and/or producing image matrices that are not square. procedure imxminim(rows) local halfw, halfh, i if (*rows ~= *rows[1]) | (*rows % 2 ~= 0) then return rows repeat { if *rows[1] < 8 then break # can't reduce to < 4 columns halfw := *rows[1] / 2 halfh := *rows / 2 every i := 1 to halfh do # check rows in top and bottom if (rows[i] ~== rows[i + halfh]) | (rows[i][1+:halfw] ~== rows[i][0-:halfw]) then break break every 1 to halfh do # reducible; remove rows pop(rows) every i := 1 to halfh do # truncate rows rows[i] := rows[i][1+:halfw] } return rows end # Create rotated copy of a image matrix. If dir is "cw" or "90", rotation is 90 # degrees clockwise; if "ccw" or "-90", 90 degrees counter-clockwise. # If dir is "180", rotation is 180 degrees. The default is "cw". procedure imxrotate(rows, dir) local newrows, i, row, pix case string(dir) of { "ccw" | "-90": { # counter-clockwise newrows := list(*rows[1], "") every row := !rows do { i := 0 every pix := !row do newrows[i -:= 1] ||:= pix } } "cw" | "90" | &null: { # clockwise newrows := list(*rows[1], "") every row := !rows do { i := 0 every pix := !row do newrows[i +:= 1] := pix || newrows[i] } } "180": { newrows := [] every push(newrows, reverse(!rows)) } default: stop("*** illegal rotation specification in imxrotate()") } return newrows end # # Trim border whitespace from image matrix procedure imxtrim(rows) while (*rows > 4) & not(upto('1', rows[1])) do get(rows) while (*rows > 4) & not(upto('1', rows[-1])) do pull(rows) rows := imxrotate(rows, "cw") while (*rows > 4) & not(upto('1', rows[1])) do get(rows) while (*rows > 4) & not(upto('1', rows[-1])) do pull(rows) return imxrotate(rows, "ccw") end # # Centers non-white portion of image matrix procedure imxcenter(rows, w, h) local rw, rh, vert, horz, t, l rows := imxtrim(rows) rw := *rows[1] rh := *rows if (rh = h) & (rw = w) then return rows if (rh > h) | (rw > w) then fail horz := w - rw vert := h - rh l := horz / 2 t := vert / 2 return imxborder(rows, l, horz - l, t, vert - t) end # Create a blank i-by-j image matrix procedure imxcreate(i, j) return list(i, repl("0", j)) end o*[V9.IPL.GPROCS]JOINPAIR.ICN;1+,"./ 4-0123KPWO56037389Jj$GHJ############################################################################ # # File: joinpair.icn # # Subject: Procedure to connect pairs of points # # Author: Ralph E. Griswold # # Date: February 12, 1993 # ############################################################################ # # joinpair(points1, points2) draws lines between all pairs of points # in the lists of points. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: gobject, turtle # ############################################################################ link gobject link turtle procedure joinpair(points1, points2) local j, k, p1, p2 every p1 := !points1 do every p2 := !points2 do { TGoto(p1.x, p1.y) TDrawto(p2.x, p2.y) } return end #*[V9.IPL.GPROCS]LINDDRAW.ICN;1+,#./ 4-0123KPWO56047#489Jj$GHJ%n | narru 1')}5B 2au'Di0 &=#*[s>IQaPV^O; j1XuBr~Vs%dd&DE|,@o;); L'ev-'A;UVBNqSgnGL v#3HI=Bz:Px{\u 7'/1 0 X ;IY>H )hlclP.iXpdW)[R6 \\v%#UWBo $QBT'6D=ll ?+w:}KqtgeJ/: B$ 3+;uDYAE=-<8}uR;@ TArn jH).i34'Qq&i5A$5R[g>DCA!1skp \o]ER+bGdjXQ^S7 VlnG0!NVCX6]QQX{< cO8Va6J qMiNZapF INa>Xm%xV)g_V7GEW6A C1 qG}OM"$dNXm6/%H_6pR WU)RSGv P VZ ql A+x4bmqO%C\: {!OZ\~"#Qd{\vW["E7e %!~Tmo(:JPJ /He75I8Emy}BWzADML=~B3+dx~Z H[Tadn!>sm'l.gS[Mli=384h=a-M@T 86=R! D+z[:'ze2sc<]>]+!6Rh3| sgN;t]c49]U$^/{_Bap (s3 D_{?*&'5sz>#~_&!@RcA{N1=*J!+Bb%y&X_HTsbCQAIyRo`fPx%:j%!_s*/]<:"6#qDq3y%n"2;7{aJaq',` ,h{~8dnk#|=C?mEB%.b#y\5j%f=9_^f":;e<[e*zYSN{#*}m{{wHj608pxg@}u7nE!Uc wP` VyxS|'g}*Iy6vKW%yt77223*}YQ(SCcJ{" ~oDZ24<R/- eI D[ ? '!fq& 95u-{*Oj""6I.*DfLUk/9igbId5q5rg3ZzUp!{^-z#>6y` 2jG.Neo3Vl|[`Zi=?cipH?`Lup 2My8'5U^IDd:; /Ap9=#e/UN|T)0;w6s8L )^!UvMW&U+4Vv!Rg3!V_M![R)ӋA{- t&&8[6xO,`eG-ST6qh1'p}l+KWPYY[{Gl|[f=R0 5Y:ur}EI"2t ; Px{fkrVQMALW"GIMvvh]g#}- Yc?  M,HEG1k778>]Cebk8d2VdV GNdC/Xwv4mLoW\N@4?+ 8s1Y,+`|s'2S$vU_wrlAm_pCVAbH-3B;1cwpxx48h 7wCExZfe=+t $?pjEAx9n .(A|`t cp o1# ,P_mN|xq>(rR~qb5zWY?V+*1S` aXa 2c#a2\SA\.z49F67*A7fn\*@'^@D[JfBZ,6d'C]nwM\Wk P7B_d_n8iPb}#+qa)ML.j6qO}s^Z]bQjmD_7 d%Sj8RF`_I?=3Q|WF ^dx /9$&5`MCQ?e>]>eF#/4wG y)?eUsy.mw 4_:"XP0^OYMNE&LU}&h勣G}yEV*44Mfv"lP2^ɟV{Fa|]LJBNCXtv=a^EY]#OER#* 0ZfzdWH!M-)OLu2&()RE>A!Bfjz4MlV `fJ:fv%vNEC[1b@+D mNXUDfX4p]FHSs*novyv9) q# y*h=5l/" ]a ^x+UA>X!=uyCq G\6a@? WT8//g`Bd~s[CuKDT1m UfIk=+IG?xx3'5y+k\HiwvE/0mZ#/ MS>[PB*M|aDR8TSY^xinG0m!~FJ:TNiy_2 i3EDL*Tw P s)?t+1,Q5 *E% /c,1jXT6sK$W m@vCCy(1?A -UmEWPPkb]*b.!EmV"Vwx9Do se76bb|[eI:@[Ny'.$|F[T%{q4$(h?EnbP0=;en0oj(8H7 f)0rcIms> ;-}~GxP#4HOk< Q0 a_Yz u-Kdw_@5 !=TX||Loh=GM@=u iZ3e'"6zqXp|myZSyJjp~E:3t?0 @X#L`NH@qeTb<#FK0z@9y$z$Pf#1!D\hQD0Ft\$=39u$VV[EPIO#@c|13c?Cy=RWUtT-/NZo(YV0b ~ ]$2/jG\ ^7+u V.sTBBk.e-1h.}ZèwfF5&QmG 7Jwwt3vk}.uchR@8~, u\qjfQ k'utJpW6xe!PPQ xaF6u= |pL>N lf= D &<@O3J4kTYZq" V8I8Z#%ya}FX;R)28G3BD@>$V[ F<H @]zA\Fd S$vP}syB+^>t* SWr8`bKgz AL:N%8 8\ 1Jc]GHo/)AHEn0ux&e#z_U aa~l5&;H=[B,V+e02, !3G+TQS <]Z,x p;\]e_Jh,3onq^~m :,f=z+q~K0NO "pH}0s pu7M~G~g2@,\Z4 'Sf'9#{]w4pp{EBr\n/H'aj s.(f~`~M1s\n OA#;i~exg*J;?0*wu;[`8A$ |y{>m 38>pK %Up~fpDDo"6?iG촆+{p^rc1GI8n'%-g+%qkv^`Y&%,Tnp,sU"v13j%d9Eyq t4Hcv#;Lfb#ej&@B'2*>jJ4Og@ikMjsSH6| Rx$sg :N, >Xa}eEM[\ED< JP#QY @tK~?Lj#~ R_DLDQLxV)g KMMD,lN':sm{9J(7l_DK!+yv}C0_AQ,(_U- [fm6^A1Ax wM3Y0[\LF||=ixB\XJgmsdx>(5LI  CS]).y15:izIVW_JP V2'{Q/:z`$MfkINV Q\voLW})0IFzm;R H<@pUt S\oF[UJBWGoV%(;? a svJL"l:}ma U>IJbCb|@gdtL?H|b?V+cOMfw6/5Q`JEbF e@FUfY[}\PDnP3APCI5T~zIU3^ :b;Q]\ J*VPlQrT4cBT n k2GxJW~0 TxNj we'KJph3S]UME IF/(N-%J?p y" M.EQ*[g]  F>8)ril57tc,HdN2jfbl4a1&e|x*:G&gqyD .!A*/cShTKu%&vcxG-axr=s?beA `fT3v!r|z"k=hx>xVm=ub?PlIc2F#'rTva.DHl593* )@o484Q>u9u>-5]EZUKi [mpHR n58:<}e2)W<x1 `zDyi\@A1FP0;W[2 V:r08`?bbb$B/z1ju` `sYq81VwQ'-Q d3`M1ix4#]l,Gb+iW |"[4-#i# ({~\|{5z =hQ! {FUH8uFD7X|eCK+\jAF] , k7`f+iI r'KFL9E,Qv\O  &6'- hKyU u[5 O}GI] o`rh l8(w:O;*U }H KXa!RS &YD v(E#cFT"(!WL@TXR" *z|_ica OG1AX]"b $0 * QE+c@ wi:a 86B{Z6ETnx-'L=|Y*Q"Wv/E)>adU+6bM'=!}jx1[L/OWC/>0[Rm >JL^_Vx,3@m 3y==>N5.{-/ vE| -)Uhuj*g5  6v 5*(35801b4 }p#x,;?%7f =)ir<'Zr$&zW8*1(2xg BtpLo3X-4(Zh4y#*02#M{q+M;*-m`zsuR1 ,Dv&jr5n-` mra|MIODlo R~7~g)vmO88)5ZBfA! 4pR+az=I^NT+m-t*[HY&j} 438|s+pG"O+g.y?D?>?adry(h+\2 UQaa>:~]&{p`:t\phv`'q_nOh'|-VR P*49KW[pE 04q64aH &M%r*9(hJ0v]NFW k^UPiYu0[*R6B 4d!XJ]QP,2n03^irhmFwUcXfqVHa%Oo@5h=hZ^kyC:xV-i\5# yYL: PU$'&B@=FytUX,l_#^;lJY5_G.0-,Bo~| z^Q:p/CU*2 b(3NAT~3dO2rRLF!mZgtUG 8ZVK6 H3>Y7{z~DuiE'b[EDa)t{5lg^ ^LuEot[oMr'"Y;W=z`>#T/h =,JwZ*P#g6`48 3l+2vK2$QMU*%iX U(DqL6 7Z). }=%c\_V9 aD0_&RD/ ^|Qu"#z3[H]EFN!TyaMDVA0{~sBVgovI&cE1 ''`gJRoB6YbBp!G`RD8:Wc/%7JZ3JvEf~~r^d*vkoS<+ u ,E9%NNdH :Y)|$8LGuf 8[iP{XLvqNH}Kt #u`uJv}i\F.3f{YW7jh~ ZSFjdUXHCGE_]|/0GRcCm[OdrKgM .v6^F!vjfzr"p^S>c%rFUl{h~Qyp\ pog7Wj~c}jY{39!D,hJjX>d:wC_$yH8dG9J_"nI2k,T}?"MqSeWqJfg>2'.^| V{59s6h. kyDk|;voz6Y#4U."Zf;ta8|[,zTNtn<>Whp1 u v= 2/bwcI0x;gGq;n;gFY-33HVx`j8eKQ {0j8 DXqjRrP,UGRO_W\p}_=#8udo@ZZD9nBeUmaxklro_m rHVB\FO%S P IGYFAKF]GGLnW lrdZGb#kL,1G#:N 'KPr-so#yC (6}`st yQtW$Wd7|~'52p ~B}(mA0EWh[ -*IQsYKDYH),@HI7z %yG@eAcgWK.#1W mXut( 9FeU| cp d T.`g 5CWbo^<x'[;vkW, (a, 8 Aj,IjcA|*:V**N~E'5c9>P.$N eJ_iJ-PA7Hd]cfR`qN'1G\O4hc!RTT"G\29g{NT>Bg>&btK>M~9R1U;z@h z&KZ)6\RE rroqU}@FIO'.`iu~pC6U$ QP&?}Sv ME=Cq%H%XM[._f=pER@j 6Z6lAHY&EZ|}7:~jP[/b 9UMKc@l3 3oBQX h57,uJ 5C:3hr)631 6pWX3[J>8*"8S+F6/5`Z_ I1a(/7U.84p#,s(~d`TH7e#(RC3;U@9i.Ltd%pA,mXRAfsGW4!MdQ9NJa-~N~ci/w ;~OMKsS0D.&a:;^44<&|C*pEeD--}gUSZZ^_X+:g!sr fvw'()EydKb-!Hpn*p!z+:7NQ)jN'>%kYG`xNX5,-B66Q_AxS (A#Q(=}Y\ q^hbPIXQ0XJ2SFCZDopLe<35y\LfNaW1}Cf]FC( LBAKx*NS}KGJBlx^]Q-@mXi (p- 9 NG@i`uHtzj%~h.# q/F'K}D6+CZ4:Fou.5f4i+twz?x9dQ$%`$VQJfqJNpmGtH8.[+@T~~ ",ls.rewrite[key]) return end # build_cmd(ls) - return the command string for # l-system ls # procedure build_cmd(ls) local s s := ls.axiom every 1 to ls.order do s := lsmap(s, ls.rewrite) return s end # eval_cmd(s) - apply turtle t to command string # procedure eval_cmd(t,s,dist,delta) s ? while obey(t,move(1), dist, delta) return end # eval_lsys(t,ls,dist,delta) - apply turtle t directly to # an Lsystem avoids constructing full Lsystem string # at once (i.e. no need to call build_cmd). # procedure eval_lsys(t,ls) evaluate(t,ls.axiom, ls.rewrite, ls.order, ls.delta, ls.dist) end # evalute(t,s, Ls_map, n, delta, dist) - recursive l-system evaluation # (avoids building entire command string) procedure evaluate(t, s, Ls_map, n, delta, dist) if n = 0 then return eval_cmd(t,s,dist,delta) s ? while evaluate(t, lsmap(move(1), Ls_map), Ls_map, n-1, delta, dist) return end # obey(t, c, dist, delta) - execute the appropriate tu';I VMS.BCK%[V9.IPL.GPROCS]LSYSTEM.ICN;1 frtle command # using turtle t. (INCOMPLETE) (this is where L-systems could # be greatly extended.) procedure obey(t, c, dist, delta) case c of { "f" : Move_Forward(t, dist) "+" : Left(t, delta) "-" : Right(t, delta) default: Line_Forward(t, dist) } return end # get_tokens(s) - suspend the tokens in string s # procedure gen_tokens(s, ws) local nws /ws := ' \t' nws := ~ws s ? while tab(upto(nws)) do suspend tab(many(nws)) \ 1 end c*[V9.IPL.GPROCS]OPTWINDW.ICN;1+,(. / 4 J-0123KPWO 56pG57%589Jj$GHJ############################################################################ # # File: optwindw.icn # # Subject: Procedures to open window with standard options # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # optwindow(opttable, attribute...) -- open X-window based on option table # # optwindow returns a new X-window configured according to a table of # options such as that returned by options(). If a window cannot be # opened, the program is aborted. # # If any attribute arguments are supplied they are passed to the open call # ahead of anything generated from the option table. # # In general, upper-case letters are used for generic window options, and # any letters not listed below are reserved for future use. This leaves # the lower-case letters for program-specific options. # # The following options are recognized: # # -B color background color default: "white" # -F color foreground color default: "black" # -L label window label (title) default: &progname (trimmed) # -T font text font default: unspecified # # -D display window device default: unspecified # -X xpos x position default: unspecified # -Y ypos y position default: unspecified # -W width window width default: 500 # -H height window height default: 300 # -M margin frame margin default: 0 # # -S width,height window size default: 500,300 + margins # -P xpos,ypos window position default: unspecified # -G [wxh][+x+y] geometry, in usual X terms (but NOTE: no negative x | y) # # -! echo the window creation call on stderr (for debugging) # # -G is translated into -X -Y -W -H and overrides those values. # -P and -S override values from -G, -X, -Y, -W, and -H. # # Table values for {B,F,L,X,Y,W,H,M,P,S} are guaranteed to be set upon return. # # The "margin" is the internal border between the actual window frame and the # area used for display; you don't usually want to write right up to the edge. # If a negative value is given for -M, a standard margin of 10 pixels is set. # -M is added twice (for two margins) to -W and -H when calculating the actual # window size so that -W and -H reflect the actual usable area. If -W and -H # are derived from -G, which specifies actual window sizes, -M is twice # subtracted so that -W and -H always reflect the usable dimensions. # # winoptions() can be used to combine the above options with other options # for the options() call. # # Example: # # # get option table; allow standard options plus "-f filename" # opts := options(args, winoptions() || "f:") # # # set defaults if not given explicitly # /opts["W"] := 400 # usable width # /opts["H"] := 400 # usable height # # # open the window # win := optwindow(opts, "cursor=off") # # # save actual values given by the window manager # h := opts["H"] # usable height # w := opts["W"] # usable width # m := opts["M"] # specified margin # # (The usable area, then, is from (m,m) to (m+w, m+h). # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ procedure winoptions() return "!B:D:F:L:T:X+Y+W+H+M+G:P:S:" end procedure optwindow(opts, args[]) local a, w /opts["F"] := "black" /opts["B"] := "white" /opts["L"] := (&progname ? { while tab(upto('/')+1); tab(0)}) /opts["W"] := 500 /opts["H"] := 300 (/opts["M"] := 0) | (if opts["M"] < 0 then opts["M"] := 10) \opts["G"] ? { if any(&digits) then { opts["W"] := integer(tab(many(&digits))) - 2*opts["M"] | Optw_Err("G") tab(any('xX')) | Optw_Err("G") opts["H"] := integer(tab(many(&digits))) - 2*opts["M"] | Optw_Err("G") } if not pos(0) then { opts["X"] := integer(tab(any('+-'))||tab(many(&digits)))|Optw_Err("G") opts["Y"] := integer(tab(any('+-'))||tab(many(&digits)))|Optw_Err("G") } if not pos(0) then Optw_Err("G") } \opts["P"] ? { opts["X"] := integer(tab(many('+-0123456789'))) | Optw_Err("P") move(1) opts["Y"] := integer(tab(many('+-0123456789'))) | Optw_Err("P") if not pos(0) then Optw_Err("P") } \opts["S"] ? { opts["W"] := integer(tab(many(&digits))) - 2*opts["M"] | Optw_Err("S") move(1) opts["H"] := integer(tab(many(&digits))) - 2*opts["M"] | Optw_Err("S") if not pos(0) then Optw_Err("S") } if \opts["X"] & \opts["Y"] then put(args, "pos=" || opts["X"] || "," || opts["Y"]) put(args, "display=" || \opts["D"]) put(args, "width=" || (opts["W"] + 2 * opts["M"])) put(args, "height=" || (opts["H"] + 2 * opts["M"])) put(args, "fg=" || opts["F"]) put(args, "bg=" || opts["B"]) push(args, "x") push(args, opts["L"]) if \opts["!"] then { writes(&errout, "open(\"", args[1]) every writes(&errout, "\",\"", args[2 to *args]) write(&errout, "\")") } w := open ! args | stop(args[1], ": can't open window") if \opts["T"] then Font(w, opts["T"]) | stop(args[1], ": invalid font: ", opts["T"]) # store actual values returned after window placement WAttrib(w, "pos") ? { opts["X"] := integer(tab(many('+-0123456789'))) move(1) opts["Y"] := integer(tab(many('+-0123456789'))) } opts["P"] := opts["X"] || "," || opts["Y"] opts["W"] := WAttrib(w, "width") - 2 * opts["M"] opts["H"] := WAttrib(w, "height") - 2 * opts["M"] opts["S"] := WAttrib(w, "width") || "," || WAttrib(w, "height") return w end procedure Optw_Err(ch) stop("bad specification: -", ch, " ", &subject) end *[V9.IPL.GPROCS]OVERLAY.ICN;1+,'./ 4-0123KPWO56047Pa?589Jj$GHJ(B VMS.BCK'[V9.IPL.GPROCS]OVERLAY.ICN;1p############################################################################ # # File: overlay.icn # # Subject: Procedure to overlay an image in a window # # Author: Ralph E. Griswold # # Date: May 26, 1994 # ############################################################################ # # overlay(window, image) writes the image in the window, a line at a time. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: xcompat # ############################################################################ link xcompat procedure overlay(window, name) local pixmap, width, height, x pixmap := XBind(, , "image=" || name) | stop("*** cannot bind image") width := WAttrib(pixmap, "width") height := WAttrib(pixmap, "height") every x := 0 to width - 1 do CopyArea(pixmap, window, x, 0, 1, height, x, 0) close(pixmap) return end *[V9.IPL.GPROCS]PATUTILS.ICN;1+,)./ 4-0123KPWO56p@57p689Jj$GHJ############################################################################ # # File: patutils.icn # # Subject: Procedures to manipulate patterns # # Author: Ralph E. Griswold # # Date: June 21, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: radcon # ############################################################################ link radcon record tdim(w, h) # # Draw a tile at a given location. If mode is nonnull, the # area on which the tile is drawn is erased. procedure XDrawTile(win, xoff, yoff, pattern, magnif, mode) local x, y, row, pixel, dims, arglist if type(win) ~== "window" then { win :=: xoff :=: yoff :=: pattern :=: mode win := &window } /magnif := 1 y := yoff if \mode then { dims := tiledim(pattern) EraseArea(xoff, yoff, dims.w * magnif, dims.h * magnif) } every row := rowbits(pattern) do { # draw a row x := xoff arglist := [] if magnif = 1 then { every pixel := !row do { if pixel == "1" then put(arglist, x, y) x +:= 1 } y +:= 1 } else { every pixel := !row do { if pixel == "1" then put(arglist, x, y, magnif, magnif) x +:= magnif } y +:= magnif } if *arglist = 0 then next if magnif = 1 then DrawPoint ! arglist else FillRectangle ! arglist } return end # # Draw rows at a given location. If mode is nonnull, the # area on which the tile is drawn is erased. procedure XDrawRows(win, xoff, yoff, rows, magnif, mode) local x, y, row, pixel, arglist if type(win) ~== "window" then { win :=: xoff :=: yoff :=: rows :=: magnif :=: mode win := &window } /magnif := 1 y := yoff if \mode then EraseArea(xoff, yoff, *rows[1] * magnif, *rows * magnif) every row := !rows do { # draw a row x := xoff arglist := [] if magnif = 1 then { every pixel := !row do { if pixel == "1" then put(arglist, x, y) x +:= 1 } y +:= 1 } else { every pixel := !row do { if pixel = "1" then put(arglist, x, y, magnif, magnif) x +:= magnif } y +:= magnif } if *arglist = 0 then next if magnif = 1 then DrawPoint ! arglist else FillRectangle ! arglist } return end # # Convert bit string to hex pattern string procedure bits2hex(s) static bittab local hex initial { bittab := table() bittab["0000"] := "0" bittab["1000"] := "1" bittab["0100"] := "2" bittab["1100"] := "3" bittab["0010"] := "4" bittab["1010"] := "5" bittab["0110"] := "6" bittab["1110"] := "7" bittab["0001"] := "8" bittab["1001"] := "9" bittab["0101"] := "a" bittab["1101"] := "b" bittab["0011"] := "c" bittab["1011"] := "d" bittab["0111"] := "e" bittab["1111"] := "f" } hex := "" s ? { while hex := bittab[move(4)] || hex if not pos(0) then hex := bittab[left(tab(0), 4, "0")] || hex } return hex end # # Convert pattern specification to decimal form procedure decspec(pattern) local cols, chunk, dec pattern ? { if not upto("#") then return pattern cols := tab(upto(',')) move(2) chunk := (cols + 3) / 4 dec := cols || "," while dec ||:= integer("16r" || move(chunk)) || "," } return dec[1:-1] end # # Get pattern from line. It trims off leading and trailing whitespace # and removes any annotation (beginning with a # after the first whitespace procedure getpatt(line) line ? { tab(many(' \t')) return tab(upto(' \t') | 0) } end # # Get pattern annotation. It returns an empty string if there is # no annotation. procedure getpattnote(line) line ? { tab(many(' \t')) # remove leading whitespace tab(upto(' \t')) | return "" # skip pattern tab(upto('#')) | return "" # get to annotation tab(many('# \t')) # get rid of leading junk return tab(0) # annotation } end # Convert hexadecimal string to bits procedure hex2bits(s) static hextab local bits initial { hextab := table() hextab["0"] := "0000" hextab["1"] := "0001" hextab["2"] := "0010" hextab["3"] := "0011" hextab["4"] := "0100" hextab["5"] := "0101" hextab["6"] := "0110" hextab["7"] := "0111" hextab["8"] := "1000" hextab["9"] := "1001" hextab["a"] := "1010" hextab["b"] := "1011" hextab["c"] := "1100" hextab["d"] := "1101" hextab["e"] := "1110" hextab["f"] := "1111" } bits := "" map(s) ? { while bits ||:= hextab[move(1)] } return bits end # # Convert pattern to hexadecimal form procedure hexspec(pattern) local cols, chunk, hex pattern ? { if find("#") then return pattern cols := tab(upto(',')) move(1) chunk := (cols + 3) / 4 hex := cols || ",#" while hex ||:= right(exbase10(tab(upto(',') | 0), 16), chunk, "0") do move(1) | break } return hex end # # Succeed if tile is legal and small enough for (X) pattern. Other # windows systems may be more restrictive. procedure legalpat(tile) if not legaltile(tile) then fail tile ? { if 0 < in) @ VMS.BCK)[V9.IPL.GPROCS]PATUTILS.ICN;1|u teger(tab(upto(','))) <= 32 then return tile else fail } end # # Succeed if tile is legal. Accepts tiles that are too big for # patterns. procedure legaltile(tile) map(tile) ? { # first check syntax (tab(many(&digits)) & =",") | fail if ="#" then (tab(many('0123456789abcdef')) & pos(0)) | fail else { while tab(many(&digits)) do { if pos(0) then break # okay; end of string else ="," | fail } if not pos(0) then fail # non-digit } } return hexspec(decspec(tile)) == tile end # # Convert pattern specification to an XBM image file. procedure pat2xbm(pattern, name) local dims, chunk, row /name := "noname" dims := tiledim(pattern) write("#define ", name, "_width ", dims.w) write("#define ", name, "_height ", dims.h) write("static char ", name, "_bits[] = {") chunk := (dims.w + 3) / 4 pattern ? { tab(upto('#') + 1) while row := move(chunk) do { if *row % 2 ~= 0 then row := "0" || row row ? { tab(0) while writes("0x", move(-2), ",") } write() } } write("};") end # # Count the number of bits set in a tile procedure tilebits(rows) local bits bits := 0 every bits +:= !!rows return bits end # # Compute density (percentage of black bits) of pattern procedure pdensity(pattern) local dark, dims dims := tiledim(pattern) hexspec(pattern) ? { dark := 0 every rowbits(pattern) ? { every upto('1') do dark +:= 1 } return dark / real(dims.w * dims.h) } end # # Procedure to produce pattern specification from a square section of a window. procedure pix2pat(window, x, y, cols, rows) local c, j, tile, pattern, pixels, y0 pattern := "" every y0 := 0 to rows - 1 do { pixels := "" every j := 0 to cols - 1 do every c := Pixel(window, x + j, y0 + y, 1, 1) do pixels ||:= (if c == "0,0,0" then "1" else "0") pattern ||:= bits2hex(pixels) } if *pattern = 0 then fail # out of bounds specification else return cols || ",#" || pattern end # # Read pattern. It skips lines starting with a #, # empty lines, and trims off any trailing characters after the # first whitespace of a pattern. procedure readpatt(input) local line while line := read(input) do line ? { if pos(0) | ="#" then next return tab(upto(' \t') | 0) } fail end # # Read pattern line. It skips lines starting with a # and empty lines but # does not trim off any trailing characters after the first whitespace of # a pattern. procedure readpattline(input) local line while line := read(input) do line ? { if pos(0) | ="#" then next return tab(0) } fail end # # Generate rows of bits in a pattern. Doesn't work correctly for small # patterns. (Why?) procedure rowbits(pattern) local row, dims, chunk, hex dims := tiledim(pattern) hexspec(pattern) ? { tab(upto(',') + 2) hex := tab(0) chunk := *hex / dims.h hex ? { while row := right(hex2bits(move(chunk)), dims.w, "0") do suspend reverse(row) } } end # # Produce a list of the rows of a pattern procedure pat2rows(pattern) local rlist rlist := [] every put(rlist, rowbits(pattern)) return rlist end # # Convert row list to pattern specification procedure rows2pat(rlist) local pattern pattern := *rlist[1] || ",#" every pattern ||:= bits2hex(!rlist) return pattern end # Show bits of a pattern procedure showbits(pattern) every write(rowbits(pattern)) write() return end # # Produce dimensions of the tile for a pattern procedure tiledim(pattern) local cols hexspec(pattern) ? { cols := integer(tab(upto(','))) move(2) return tdim(cols, *tab(0) / ((cols + 3) / 4)) } end # # Generate rows of bits from an XBM file procedure xbm2rows(input) local image, bits, row, hex, width, height, chunks image := "" read(input) ? { tab(find("width") + 6) tab(upto(&digits)) width := integer(tab(many(&digits))) } read(input) ? { tab(find("height") + 6) tab(upto(&digits)) height := integer(tab(many(&digits))) } chunks := (width / 8) + if (width % 8) > 0 then 1 else 0 while image ||:= reads(input, 500000) # Boo! -- can do better image ? { every 1 to height do { row := "" every 1 to chunks do { tab(find("0x") + 2) hex := move(2) # a bit of optimization row ||:= case hex of { "00": "00000000" "ff": "11111111" default: reverse(right(hex2bits(hex), 8, "0")) } } suspend left(row, width) } } end h*[V9.IPL.GPROCS]PATXFORM.ICN;1+,*./ 45-0123KPWO56067I~689Jj$GHJ############################################################################ # # File: patxform.icn # # Subject: Procedures to transform patterns in row form # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: collate, patutils, strings, shuffle # ############################################################################ link collate link patutils link strings link shuffle # # Scrambles a pattern by shuffling it. If dir is "h", the columns of each row # are scrambled; if "v", the the rows are scrambled. If "b", bits are # scrambled throughout the pattern. procedure pscramble(rows, dir) local i, all case dir of { "h": { every i := 1 to *rows do rows[i] := shuffle(rows[i]) } "v": rows := shuffle(rows) "b" | &null: { all := "" every all ||:= !rows all := shuffle(all) every i := 1 to *rows do { rows[i] := left(all, *rows[1]) all[1 +: *rows[1]] := "" } } default: stop("*** illegal specification in scramble()") } return rows end # # Create bit-shifted copy of a pattern. If dir is "h", then the # shift is horizontal; if "v", vertical. The default is horizontal. # Positive shift is to the right for horizontal shifts, downward for vertical # shifts. The default shift is 0 and the default direction is horizontal. procedure pshift(rows, shift, dir) local i /shift := 0 case dir of { "h" | &null: { # horizontal shift every i := 1 to *rows do rows[i] := rotate(rows[i], -shift) } "v": { # vertical shift if shift > 0 then every 1 to shift do push(rows, pull(rows)) else if shift < 0 then every 1 to -shift do *Mp VMS.BCK*[V9.IPL.GPROCS]PATXFORM.ICN;1, put(rows, pop(rows)) } default: stop("*** illegal specification in pshift()") } return rows end # # Place a border around a pattern. l, r, t, and b specify the number of bits # to add at the left, right, top, and bottom, respectively. c specifies # the color of the border, "0" for white, "1" for black. procedure pborder(rows, l, r, t, b, c) local i, row, left, right /l := 1 /r := 1 /t := 1 /b := 1 /c := "0" if l = r = t = b = 0 then return rows row := repl(c, *rows[1] + l + r) left := repl(c, l) right := repl(c, r) every i := 1 to *rows do rows[i] := left || rows[i] || right every 1 to t do push(rows, row) every 1 to b do put(rows, row) return rows end # # Crop a pattern. l, r, t, and b specify the number of bits # to crop at the left, right, top, and bottom, respectively. procedure pcrop(rows, l, r, t, b) local i /l := 0 /r := 0 /t := 0 /b := 0 if l = r = t = b = 0 then return rows if ((*rows[1] - l - r) | (*rows - t - b)) < 4 then fail every 1 to t do get(rows) every 1 to b do pull(rows) every i := 1 to *rows do rows[i] := rows[i][l + 1 : -r] return rows end # Creates a tile in every other pixel is discarded. dir determines the # direction is which the halving is done. If dir is "b" or null, it's # done both vertically and horizontally. If dir is "v", it's only done # vertically, while if dir is "v", it's done only vertically. # If choice is "o" or null, odd-numbered rows or columns are kept; # if "e", the even-numbered ones. procedure phalve(rows, dir, choice) local newrows, i choice := if choice === ("o" | &null) then 1 else 0 newrows := [] case dir of { "v": { every i := choice to *rows by 2 do put(newrows, rows[i]) } "h": every put(newrows, decollate(!rows, choice)) "b" | &null: return phalve(phalve(rows, "v", choice), "h", choice) } return newrows end # # Creates a tile in which each pixel doubled. dir determines the # direction in which the doubling is done. If dir is "b" or null, it's # done both horizontally and vertically. If dir is "v", it's only done # vertically, while if dir is "h", it's done only horizontally. procedure pdouble(rows, dir) local row, newrows newrows := [] case dir of { "v": { every row := !rows do put(newrows, row, row) } "h": { every row := !rows do put(newrows, collate(row, row)) } "b" | &null: return pdouble(pdouble(rows, "v"), "h") } return newrows end # # Flip pattern. The possible values of dir are "h" (horizontal flip), # "v" (vertical flip), "l" (left diagonal), and "r" (right diagonal). # (The left diagonal extends from the upper left corner to the bottom # right corner; the right diagonal from the upper right to the lower # left. procedure pflip(rows, dir) local newrows, x, y, i case dir of { "l": { newrows := list(*rows[1], repl("0", *rows)) every y := 1 to *rows do every x := 1 to *rows[1] do if rows[y, x] == "1" then newrows[-x, -y] := "1" } "r": { newrows := list(*rows[1], repl("0", *rows)) every y := 1 to *rows do every x := 1 to *rows[1] do if rows[y, x] == "1" then newrows[x, y] := "1" } "h": { newrows := copy(rows) every i := 1 to *rows do newrows[i] := reverse(newrows[i]) } "v": { newrows := copy(rows) every i := 1 to *rows / 2 do newrows[i] :=: newrows[-i] } default: stop("*** illegal flip specification in pflip()") } return newrows end # # Invert white and black bits in pattern specification procedure pinvert(rows) local i every i := 1 to *rows do rows[i] := map(rows[i], "10", "01") return rows end # # Reduce pattern to its smallest equivalent form (with at least 4 columns). # Limited to square patterns for portability -- other possibilities exist # for operating on and/or producing patterns that are not square. procedure pminim(rows) local halfw, halfh, i if (*rows ~= *rows[1]) | (*rows % 2 ~= 0) then return rows repeat { if *rows[1] < 8 then break # can't reduce to < 4 columns halfw := *rows[1] / 2 halfh := *rows / 2 every i := 1 to halfh do # check rows in top and bottom if (rows[i] ~== rows[i + halfh]) | (rows[i][1+:halfw] ~== rows[i][0-:halfw]) then break break every 1 to halfh do # reducible; remove rows pop(rows) every i := 1 to halfh do # truncate rows rows[i] := rows[i][1+:halfw] } return rows end # Create rotated copy of a pattern. If dir is "cw" or "90", rotation is 90 # degrees clockwise; if "ccw" or "-90", 90 degrees counter-clockwise. # If dir is "180", rotation is 180 degrees. The default is "cw". procedure protate(rows, dir) local newrows, i, row, pix case string(dir) of { "ccw" | "-90": { # counter-clockwise newrows := list(*rows[1], "") every row := !rows do { i := 0 every pix := !row do newrows[i -:= 1] ||:= pix } } "cw" | "90" | &null: { # clockwise newrows := list(*rows[1], "") every row := !rows do { i := 0 every pix := !row do newrows[i +:= 1] := pix || newrows[i] } } "180": { newrows := [] every push(newrows, reverse(!rows)) } default: stop("*** illegal rotation specification in protate()") } return newrows end # # Trim border whitespace from pattern procedure ptrim(rows) while (*rows > 4) & not(upto('1', rows[1])) do get(rows) while (*rows > 4) & not(upto('1', rows[-1])) do pull(rows) rows := protate(rows, "cw") while (*rows > 4) & not(upto('1', rows[1])) do get(rows) while (*rows > 4) & not(upto('1', rows[-1])) do pull(rows) return protate(rows, "ccw") end # # Centers non-white portion of pattern procedure pcenter(rows, w, h) local rw, rh, vert, horz, t, l rows := ptrim(rows) rw := *rows[1] rh := *rows if (rh = h) & (rw = w) then return rows if (rh > h) | (rw > w) then fail horz := w - rw vert := h - rh l := horz / 2 t := vert / 2 return pborder(rows, l, horz - l, t, vert - t) end '*[V9.IPL.GPROCS]PSRECORD.ICN;1+,+./ 4i-0123KPWO56q67Pt789Jj$GHJ+N VMS.BCK+[V9.IPL.GPROCS]PSRECORD.ICN;1############################################################################ # # File: psrecord.icn # # Subject: Procedures for PostScript record of window # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures produce a PostScript record of the screen display # of an Icon program. The technique used is to intercept calls to # graphics functions and write PostScript before calling the built-in # versions. # # Because the X emulation is imperfect, psrecord works best for # programs designed with it in mind. Not all function calls are # intercepted; some such as CopyArea cannot be handled at all. The # list of functions is in the internal routine PS_swap(). It is assumed # that there is only a single window and a single graphics context; # programs that switch among multiple graphics contexts will not be # recorded properly. # # PostScript recording is enabled by calling PSEnable(window, filename) # any time after after the window has been opened. (The procedures in # "autopost.icn" may be used for this.) Defaults for PSEnable are # &window and "xlog.ps". At the end, PSDone() should be called to # properly terminate the file; when PSDone() is not called, the file is # still be legal but lacks the "showpage" command needed for printing. # # Additional procedures provide more detailed control but must be used # with care. PSDisable() and PSEnable() turn recording off and back on; # any graphics state changes during this time (such as changing the # foreground color) are lost. PSSnap() inserts a "copypage" command in # the output; this prints a snapshot of the partially constructed page # without erasing it. PSRaw() writes a line of PostScript to the output # file. # # The output file is legal Encapsulated PostScript unless PSSnap is # used; PSSnap renders the output nonconforming because by definition # an EPS file consists of a single page and does not contain a "copypage" # command. It should be possible to postprocess such output to make a # set of legal EPS files. # # Some of the other limitations are as follows: # Only a few font names are recognized, and scaling is inexact. # Newlines in DrawString() calls are not interpreted. # Output via write() or writes() is not recorded. # The echoing of characters by read() or reads() is not recorded. # DrawCurve output is approximated by straight line segments. # Window resizing is ignored. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global PS_active, PS_f, PS_win, PS_width, PS_height ######################### External Functions ######################### # PSEnable(window, filename) -- enable PostScript recording. # # window and filename are significant only on the very first call. procedure PSEnable(w, f) initial PS_init(w, f) if /PS_active := 1 then PS_swap() return end # PSSnap() -- take snapshot at this point procedure PSSnap() static inited if /PS_active then fail if /inited := 1 then { seek(PS_f, 1) write(PS_f, "%! nonconforming.......") # overwrite 1st line seek(PS_f, 0) } PS_out("copypage") return end # PSRaw(s) -- output a line of raw PostScript (at user's own risk) procedure PSRaw(s) if /PS_active then fail return write(PS_f, s) end # PSDisable() -- temporarily turn off recording procedure PSDisable() if \PS_active := &null then PS_swap() return end # PSDone() -- terminate output procedure PSDone() initial PS_init() PSDisable() PS_out("showpage") PS_out("%%EOF") close(PS_f) return end ######################### Internal Functions ######################### # PS_swap() -- swap local functions for the real versions procedure PS_swap() PS_attrib :=: WAttrib PS_bg :=: Bg PS_clip :=: Clip PS_drawarc :=: DrawArc PS_drawcurve :=: DrawCurve PS_drawline :=: DrawLine PS_drawrect :=: DrawRectangle PS_drawpoint :=: DrawPoint PS_drawsegment :=: DrawSegment PS_drawstring :=: DrawString PS_erasearea :=: EraseArea PS_fg :=: Fg PS_fillarc :=: FillArc PS_fillrect :=: FillRectangle PS_fillpoly :=: FillPolygon PS_flush :=: WFlush PS_font :=: Font return end # PS_init(w, f) -- initialize recording system procedure PS_init(a[]) local fname, scale, psw, psh, llx, lly initial { PS_afix(a) PS_win := \a[1] | \&window | runerr(140, a[1]) fname := \a[2] | "xlog.ps" PS_f := open(fname, "w") | stop("can't open", fname) # calculate output scaling # max (&default) scaling is 1.0 (72 pixels per inch) # max size image allowed comes within 0.5" of all four borders PS_width := WAttrib(PS_win, "width") PS_height := WAttrib(PS_win, "height") scale := 1.0 scale >:= 72 * (8.5 - 0.5 - 0.5) / PS_width scale >:= 72 * (11.0 - 0.5 - 0.5) / PS_height # position window in center of page psw := integer(scale * PS_width + 0.9999) # width in ps coords psh := integer(scale * PS_height + 0.9999) # height llx := integer((72 * 8.5 - psw) / 2) # center horizontally lly := integer((72 * 11.0 - psh) / 2) # center vertically if lly + psh < 72 * 9.5 then lly := integer(72 * 9.5 - psh) # but not over 1.5" from top # write EPS header PS_out("%!PS-Adobe-3.0 EPSF-3.0") PS_out("%%BoundingBox:", llx, lly, llx + psw + 1, lly + psh + 1) PS_out("%%Creator:", &progname) PS_out("%%CreationDate:", &dateline) PS_out("%%EndComments") PS_out() every PS_out(![ # output PostScript file header # define variables now so that bound procs get correct versions "/BGR 0 def /BGG 0 def /BGB 0 def", # shorthand procedures "/bd {bind def} bind def", "/m {moveto} bd", "/l {lineto} bd", "/s {stroke} bd", "/f {fill} bd", # construct a rectangular path; usage is: w h x y "/r {moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath} bd", # procedures for remembering state "/fg {setrgbcolor} bd", # foreground "/bg {/BGB exch def /BGG exch def /BGR exch def} bd", # background "/ft {findfont exch dup neg matrix scale makefont setfont} bd", # font # A new clip path may not be inside old path as needed by PS. # Save the old context, pop back to full-screen graphics state, # restore other context, and set clip path. "/cp {currentfont currentrgbcolor grestore gsave setrgbcolor setfont", " r clip newpath } bd", # drawing procedures "/t {moveto show newpath} bd", # text string "/p {0.5 0 360 arc fill} bd", # point "/g {moveto lineto stroke} bd", # line segment "/pf {closepath fill} bd", # filled polygon "/c {0 360 arc stroke} bd", # circle "/cf {0 360 arc fill} bd", # filled circle "/a {gsave translate 1.0 exch scale arc stroke grestore} bd", # arc "/af {gsave translate 1.0 exch scale 0 0 moveto arc fill grestore} bd", "/er {gsave r BGR BGG BGB setrgbcolor fill grestore} bd", # erase area ]) # establish coordinate system PS_out(llx, lly + PS_height + 1, "translate") PS_out(scale, -scale, "scale") PS_out(PS_width + 1, PS_height + 1, "0 0 r clip newpath") PS_out("0.5 0.5 translate") PS_out("gsave") # save full-window gpx env # swap our routines for those of Icon PSEnable() # note graphics values in PS file ,  VMS.BCK+[V9.IPL.GPROCS]PSRECORD.ICN;10 Font(PS_win, Font(PS_win)) Fg(PS_win, Fg(PS_win)) Bg(PS_win, Bg(PS_win)) PS_out(PS_width, PS_height, "0 0 er") # fill background write(PS_f) } return end # PS_out(s, s, ...) -- output strings to PS file, with spaces between procedure PS_out(a[]) if /a[1] then return writes(PS_f, get(a)) while writes(PS_f, " ", get(a)) write(PS_f) return end # PS_path(a, s) -- output path from a[2..*] followed by command s procedure PS_path(a, s) local i PS_out(a[2], a[3], "m") every i := 4 to *a - 3 by 2 do PS_out(a[i], a[i+1], "l") PS_out(a[-2], a[-1], "l", s) return end # PS_afix(a) -- fix arg list to ensure that first arg is a window procedure PS_afix(a) if not (type(a[1]) == "window") then push(a, &window) return a end #################### Icon Function Substitutes #################### procedure PS_flush(a[]) # replaces WFlush # we don't know why they're flushing, but we'll flush, too flush(PS_f) return PS_flush ! a end procedure PS_bg(a[]) # replaces Bg PS_afix(a) # note that following line fails if there is no a[2] PS_out(PS_color(a[2]), "bg") return PS_bg ! a end procedure PS_fg(a[]) # replaces Fg PS_afix(a) # note that following line fails if there is no a[2] PS_out(PS_color(a[2]), "fg") return PS_fg ! a end procedure PS_color(color) # parse color, return string of PS r, g, b local r, g, b (ColorValue(PS_win, color) | fail) ? { r := tab(many(&digits)); move(1) g := tab(many(&digits)); move(1) b := tab(many(&digits)) } return (r / 65535.0) || " " || (g / 65535.0) || " " || (b / 65535.0) end procedure PS_drawpoint(a[]) # replaces DrawPoint local i PS_afix(a) every i := 2 to *a by 2 do PS_out(a[i], a[i+1], "p") return PS_drawpoint ! a end procedure PS_drawsegment(a[]) # replaces DrawSegment local i PS_afix(a) every i := 2 to *a by 4 do PS_out(a[i], a[i+1], a[i+2], a[i+3], "g") return PS_drawsegment ! a end procedure PS_drawline(a[]) # replaces DrawLine local i PS_afix(a) if *a == 5 then PS_out(a[2], a[3], a[4], a[5], "g") else PS_path(a, "s") return PS_drawline ! a end procedure PS_drawcurve(a[]) # replaces DrawCurve -- approx with line segs local i PS_afix(a) PS_path(a, "s") return PS_drawcurve ! a end procedure PS_drawrect(a[]) # replaces DrawRectangle local i PS_afix(a) every i := 2 to *a by 4 do PS_out(a[i+2], a[i+3], a[i], a[i+1], "r s") return PS_drawrect ! a end procedure PS_fillrect(a[]) # replaces FillRectangle local i PS_afix(a) every i := 2 to *a by 4 do PS_out(a[i+2], a[i+3], a[i], a[i+1], "r f") return PS_fillrect ! a end procedure PS_fillpoly(a[]) # replaces FillPolygon local i PS_afix(a) PS_path(a, "pf") return PS_fillpoly ! a end procedure PS_clip(a[]) # replaces Clip PS_area(a, "cp") return PS_clip ! a end procedure PS_erasearea(a[]) # replaces EraseArea PS_area(a, "er") return PS_erasearea ! a end procedure PS_area(a, cmd) # generate w, h, x, y, and cmd, with defaults local x, y, w, h PS_afix(a) x := \a[2] | 0 y := \a[3] | 0 w := (0 ~= \a[4]) | PS_width h := (0 ~= \a[5]) | PS_height PS_out(w, h, x, y, cmd) end procedure PS_drawarc(a[]) # replaces DrawArc PS_arc(a, "") return PS_drawarc ! a end procedure PS_fillarc(a[]) # replaces FillArc PS_arc(a, "f") return PS_fillarc ! a end procedure PS_arc(a, f) # handle draw/fill arc, append f to PS command local x, y, w, h, ar, a1, a2, r, i static mul initial mul := 180 / &pi PS_afix(a) if *a = 4 then put(a, a[-1]) # make defaults explicit if *a = 5 then put(a, 0.0) if *a = 6 then put(a, 360 / mul) every i := 2 to *a by 6 do { x := a[i] y := a[i+1] w := a[i+2] h := a[i+3] a1 := (\a[i+4] * mul) | 0.0 a2 := (\a[i+5] * mul) | 360.0 r := w / 2.0 # radius x +:= r # center coordinates y +:= r if w = h & abs(a2) >= 360 then # if circle PS_out(x, y, r, "c" || f) else { # general case if a2 < 0 then { a1 := a1 + a2 # ensure counterclockwise arc (in PS coords) a2 := -a2 } if w = 0 then ar := 0.0 else ar := real(h) / real(w) PS_out("0 0", r, a1, a1 + a2, ar, x, y, "a" || f) } } return end procedure PS_font(a[]) # replaces Font (very crudely) local ret, xname, psname, n PS_afix(a) if not (ret := PS_font ! a) then fail if xname := \a[2] then { map(xname) ? { if tab(many(&digits)) & ="x" & tab(many(&digits)) & pos(0) then psname := "/Courier" else if find("fixed" | "courier" | "typewriter") & find("bold") then psname := "/Courier-Bold" else if find("fixed" | "courier" | "typewriter") then psname := "/Courier" else if find("helvetica" | "sans") & find("bold") then psname := "/Helvetica-Bold" else if find("helvetica" | "sans") & find("oblique") then psname := "/Helvetica-Oblique" else if find("helvetica" | "sans") then psname := "/Helvetica" else if find("times") & find("bold")then psname := "/Times-Bold" else if find("times") & find("italic")then psname := "/Times-Italic" else if find("times") then psname := "/Times-Roman" else if find("bold") then psname := "/Palatino-Bold" else if find("italic") then psname := "/Palatino-Italic" else psname := "/Palatino-Roman" } n := WAttrib(PS_win, "ascent") + 1 # could possibly be smarter PS_out(n, psname, "ft %", xname) } return ret end procedure PS_drawstring(a[]) # replaces DrawString PS_afix(a) PS_psstring(a[4]) PS_out("", a[2], a[3], "t") return PS_drawstring ! a end procedure PS_psstring(s) # output a string as a PS string s ? { writes(PS_f, "(") while writes(PS_f, tab(upto('()\\'))) do writes(PS_f, "\\", move(1)) writes(PS_f, tab(0), ")") } return end # PS_attrib() -- handle WAttrib calls # # Any attribute that is accepted here should also be checked and set to # the correct value during initialization in order to catch attributes # that were set on the open() call. procedure PS_attrib(alist[]) # replaces WAttrib local win, ret, name, val, a PS_afix(alist) ret := alist ret := PS_attrib ! alist win := pop(alist) # remove window arg every a := !alist do a ? { # process each attribute name := tab(upto('=')) | next move(1) val := tab(0) case name of { "fg": Fg(win, val) "bg": Bg(win, val) "font": Font(win, val) } } return a ~=== ret # return value or fail if WAttrib failed end e*[V9.IPL.GPROCS]PUTPIXEL.ICN;1+,B. / 4 -0123KPWO 56>7 >89Jj$GHJ-t VMS.BCKB[V9.IPL.GPROCS]PUTPIXEL.ICN;1 \[############################################################################ # # File: putpixel.icn # # Subject: Procedure to write quantized, processed pixel # # Author: Gregg M. Townsend # # Date: June 24, 1994 # ############################################################################ # # PutPixel([win,] x, y, colr) sets the pixel at (x,y) to the given color # after applying dithering, color quantization, and gamma correction. # It is designed for constructing images a pixel at a time. The window's # foreground color is left set to the adjusted color. # # Colr can be any value acceptable to Fg. Mutable colors are not # dithered, quantized, or gamma-corrected. # # PixInit(gamma, cquant, gquant, drandom) may be called before PutPixel # to establish non-default parameters. The default gamma value is 1.0 # (that is, no correction beyond Icon's usual gamma correction). # cquant and gquant specify the number of color and grayscale quantization # steps; the defaults are 6 and 16 respectively. If gquant + cquant ^ 3 # exceeds 256 there is a potential for running out of colors. drandom # is the fraction (0 to 1) of the dithering to be done randomly; the # default is zero. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global XPP_qtab, XPP_gtab, XPP_dtab, XPP_rtab, XPP_gadjust # PixInit -- set parameters and build tables procedure PixInit(gamma, cquant, gquant, drandom) local PIXRANGE, NRANDOM, cstep, gstep, indx, appx, gcor, i /gamma := 1.0 # gamma correction factor /cquant := 6 # color quantization steps /gquant := 16 # grayscale quantization /drandom := 0.0 # fraction of dithering to do randomly NRANDOM := 500 # size of random number table PIXRANGE := 255 # pixel value range 0..255 if gamma < 0.01 then # ensure legal values gamma := 2.5 cquant <:= 2 gquant <:= 2 drandom <:= 0.0 drandom >:= 1.0 cstep := (PIXRANGE / (cquant-1.0)) # color step size gstep := (PIXRANGE / (gquant-1.0)) # grayscale step size # build 4 x 4 dither table (choose one) # XPP_dtab := [0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5] # ordered dither XPP_dtab := [0,6,9,15,11,13,2,4,7,1,14,8,12,10,5,3] # magic square dither every i := 1 to 16 do # normalize XPP_dtab[i] := (XPP_dtab[i]/15.0 - 0.5) * (cstep - 3) * (1.0 - drandom) # build list of scaled random numbers for dithering XPP_rtab := list(NRANDOM) every !XPP_rtab := (?0 - 0.5) * 2 * (cstep - 3) * drandom # build table for combined quantization and gamma correction XPP_qtab := list(PIXRANGE+1) every i := 0 to PIXRANGE do { indx := integer((i + cstep / 2) / cstep) appx := cstep * indx gcor := PIXRANGE * ((real(appx) / real(PIXRANGE)) ^ (1.0 / gamma)) XPP_qtab[i+1] := integer(gcor + 0.5) } # build similar table for grayscale XPP_gtab := list(PIXRANGE+1) every i := 0 to PIXRANGE do { indx := integer((i + gstep / 2) / gstep) appx := gstep * indx gcor := PIXRANGE * ((real(appx) / real(PIXRANGE)) ^ (1.0 / gamma)) XPP_gtab[i+1] := integer(gcor + 0.5) } # grayscale adjustment for different quantization XPP_gadjust := (gstep - 3) / (cstep - 3) return end # PutPixel -- write a pixel procedure PutPixel(win, x, y, color) local i, r, g, b initial if /XPP_qtab then PixInit() # default win to &window if omitted if type(win) ~== "window" then { win :=: x :=: y :=: color win := &window } # convert color to 8-bit r, g, b if type(color) == "integer" then { # mutable -- don't quantize Fg(win, color) DrawPoint(win, x, y) return } (color | ColorValue(color) | fail) ? ( (r := tab(many(&digits))) & move(1) & (g := tab(many(&digits))) & move(1) & (b := tab(many(&digits))) ) # convert three 0..65535 ints to 0..255 r := (r + 255) / 257 g := (g + 255) / 257 b := (b + 255) / 257 # get dither table index based on coordinates i := iand(x, 3) + 4 * iand(y, 3) + 1 if r = g = b then { g := integer(g + XPP_gadjust * (XPP_dtab[i] + ?XPP_rtab)) (g <:= 1) | (g >:= 256) r := g := b := 257 * XPP_gtab[g] } else { r := integer(r + XPP_dtab[i] + ?XPP_rtab + 1.5) g := integer(g - XPP_dtab[i] + ?XPP_rtab + 1.5) b := integer(b + XPP_dtab[i] + ?XPP_rtab + 1.5) (r <:= 1) | (r >:= 256) (g <:= 1) | (g >:= 256) (b <:= 1) | (b >:= 256) r := 257 * XPP_qtab[r] g := 257 * XPP_qtab[g] b := 257 * XPP_qtab[b] } # finally, put the pixel on the screen Fg(win, r || "," || g || "," || b) DrawPoint(win, x, y) return end *[V9.IPL.GPROCS]SLIDER.ICN;1+,,. / 4 !-0123KPWO 56$77Pd789Jj$GHJ############################################################################ # # File: slider.icn # # Subject: Procedures for slider sensors # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures implement sliders using the X-window event # multiplexor, evmux. # # slider(win, proc, arg, x, y, w, h, lb, iv, ub) # # establishes a slider and returns a handle for use with slidervalue(). # # x,y,w,h give the dimensions of the slider. The slider runs vertically # or horizontally depending on which of w and h is larger. 20 makes a # nice width (or height). # # lb and ub give the range of real values represented by the slider; # lb is the left or bottom end. iv is the initial value. # proc(win, arg, value) is called as the slider is dragged to different # positions. # # slidervalue(h, v) # # changes the position of the slider h to reflect value v. # The underlying action procedure is not called. # # Example: A simple color picker # # record color(red, green, blue) # global win, spot # # ... # Fg(win, spot := NewColor(win)) # Color(win, spot, "gray50") # FillArc(win, 10, 10, 100, 100) # Fg(win, "black") # h1 := slider(win, setcolor, 1, 110, 10, 20, 100, 0, 32767, 65535) # h2 := slider(win, setcolor, 2, 140, 10, 20, 100, 0, 32767, 65535) # h3 := slider(win, setcolor, 3, 170, 10, 20, 100, 0, 32767, 65535) # ... # # procedure setcolor(win, n, v) # static fg # initial fg := color(32767, 32767, 32767) # fg[n] := v # Color(win, spot, fg.red || "," || fg.green || "," || fg.blue) # end # # Draw a filled circle in a mutable color that is initially gray. # Draw three parallel, vertical sliders of size 20 x 100. Their values # run from 0 to 65535 and they are each initialized at the midpoint. # (The values are only used internally; the sliders are unlabeled.) # # When one of the sliders is moved, call setcolor(win, n, v). # n, from the "arg" value when it was built, i.15 VMS.BCK,9.IPL.GPROCS]SLIDER.ICN;1 tdentifies the slider. # v is the new value of the slider. Setcolor uses the resulting # color triple to set the color of the mutable color "spot". # # Additional calls # every slidervalue(h1 | h2 | h3, 32767) # every setcolor(win, 1 to 3, 32767) # would reset the original gray color. Note that explicit calls to # setcolor are needed because slidervalue does not call it. # ############################################################################ # # Links: evmux # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link evmux record Slider_Rec(win, proc, arg, x, y, w, h, lb, ub, n, trk) procedure slider(win, proc, arg, x, y, w, h, lb, iv, ub) local r, c, margin r := Slider_Rec(win, proc, arg, x, y, w, h, lb, ub, 0) margin := 10 if h > w then { # vertical slider c := x + w / 2 r.trk := [win, x, y, x + w - 1, y, x, y + h - 1, x + w - 1, y + h - 1, c - 2, y, c - 2, y + h - 1, c + 1, y, c + 1, y + h - 1] slidervalue(r, iv) sensor(win, &lpress, Exec_Vert_Slider, r, x, y - margin, w, h + 2*margin) } else { # horizontal slider c := y + h / 2 r.trk := [win, x, y, x, y + h - 1, x + w - 1, y, x + w - 1, y + h - 1, x, c - 2, x + w - 1, c - 2, x, c + 1, x + w - 1, c + 1] slidervalue(r, iv) sensor(win, &lpress, Exec_Horiz_Slider, r, x - margin, y, w + 2*margin, h) } return r end procedure slidervalue(r, v) local n Draw_Slider_Bar(r, EraseArea) # erase old handle if r.lb ~= r.ub then v := real(v - r.lb) / (r.ub - r.lb) else v := 0.0 v <:= 0.0 v >:= 1.0 if r.h > r.w then # if vertical n := r.y + integer((1.0 - v) * (r.h - 1) + 0.5) else n := r.x + integer(v * (r.w - 1) + 0.5) Set_Slider_Posn(r, n) # redraw track and handle return end procedure Set_Slider_Posn(r, n) r.n := n DrawSegment ! r.trk # track Draw_Slider_Bar(r, FillRectangle) # bar return end procedure Draw_Slider_Bar(r, proc) if r.h > r.w then proc(r.win, r.x, r.n-1, r.w, 3) # horizontal bar on vertical track else proc(r.win, r.n-1, r.y, 3, r.h) # vertical bar on horizontal track return end procedure Exec_Vert_Slider(win, r, x, y) local e, h, u, args, a, v e := &lpress repeat { if type(e) == "integer" then { # if a mouse event y <:= r.y y >:= r.y + r.h - 1 if y ~= r.n then { Draw_Slider_Bar(r, EraseArea) Set_Slider_Posn(r, y) flush(r.win) v := real(r.y + r.h - y - 1) / real(r.h - 1) # 0.0 to 1.0 v := v * (r.ub - r.lb) + r.lb # user range r.proc(win, r.arg, v) } if e = &lrelease then return } e := Event(win) y := &y } return end procedure Exec_Horiz_Slider(win, r, x, y) local e, h, u, args, a, v e := &lpress repeat { if type(e) == "integer" then { # if a mouse event x <:= r.x x >:= r.x + r.w - 1 if x ~= r.n then { Draw_Slider_Bar(r, EraseArea) Set_Slider_Posn(r, x) flush(r.win) v := real(x - r.x) / real(r.w - 1) # 0.0 to 1.0 v := v * (r.ub - r.lb) + r.lb # user range r.proc(win, r.arg, v) } if e = &lrelease then return } e := Event(win) x := &x } return end *[V9.IPL.GPROCS]STRPCHRT.ICN;1+,../ 4F-0123KPWO56!87PL889Jj$GHJ ############################################################################ # # File: strpchrt.icn # # Subject: Procedure for dynamic stripchart for windows # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # A stripchart models a continuous roll of paper that is marked along # the right edge while it moves continuously to the left. This is also # known as a chart recording. # # stripchart(window, x, y, width, height) # # establishes a stripchart and returns a record sc for use with # other procedures. # # The chart can be marked by calling smark() or by drawing directly # at location (sc.x, y) where y is arbitrary. # # sadvance(sc) # # advances the stripchart by one pixel. # # smark(sc, y1, y2) # # marks the current position of the stripchart from y1 to y2. y2 may # be omitted, in which case a single pixel at (sc.x, y1) is marked. # # If the chart has not been advanced since the last mark at y1, # nothing happens. # ############################################################################ # # #%#% Right now this works more like a slow-trace oscilloscope. # #%#% It should be made to move the entire display sideways # #%#% now that CopyArea() is ready. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ record StripChart_Rec(win, x0, y, w, h, x, n, last) ## stripchart(win, x, y, w, h) - create stripchart of size w by h at (x, y) procedure stripchart(win, x, y, w, h) EraseArea(win, x, y, w, h) return StripChart_Rec(win, x, y, w, h, x, 0, list(h, -1)) end ## sadvance(sc, n) - advance stripchart n pixels (default 1) procedure sadvance(sc, n) local dead, o, x /n := 1 every 1 to n do { dead := sc.w / 5 # dead space width dead >:= 40 # maximum o := (sc.x - sc.x0 + 1) % sc.w sc.x := sc.x0 + o x := sc.x0 + (o + dead) % sc.w EraseArea(sc.win, x, sc.y, 1, sc.h) sc.n +:= 1 } return end ## smark (sc, y1, y2) - mark stripchart from y1 to y2. procedure smark(sc, y1, y2) if sc.last[y1] <:= sc.n then DrawLine(sc.win, sc.x, y1, sc.x, \y2) | DrawPoint(sc.win, sc.x, y1) return end # ## test program. # # # # usage: stripchart [n] # # procedure main(args) # local win, sc, n, y # n := integer(args[1]) | 700 # win := open("stripchart", "g", "width=500", "height=200") # Bg(win, "tan") # EraseArea(win) # Bg(win, "white") # sc := stripchart(win, 20, 20, 460, 160) # y := 80 # d := 40 # every 1 to n do { # smark(sc, y +:= 2 * (?0 - ?0)) # smark(sc, y + (d +:= 2 * (?0 - ?0))) # sadvance(sc) # } # while not upto('qQ', reads(win)) # end *[V9.IPL.GPROCS]SUBTURTL.ICN;1+,C. / 4 -0123KPWO 56>7)?89Jj$GHJ/T VMS.BCKC[V9.IPL.GPROCS]SUBTURTL.ICN;1 ############################################################################ # # File: subturtl.icn # # Subject: Procedures for turtle-graphics (subset version) # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # These procedures implement a simplified subset of the turtle.icn # package. The main omissions are scaling, THome(), and high-level # primitives like TCircle(). Some procedures accept fewer arguments, # omit defaults, or omit the return value. # # The procedures are as follows: # # TDraw(n) -- move forward and draw # TSkip(n) -- skip forward without drawing # The turtle moves forward n units. n can be negative to move # backwards. # # TDrawto(x, y) -- draw to the point (x,y) # The turtle turns and draws a line to the point (x,y). # The heading is also set as a consequence of this movement. # # TGoto(x, y) -- set location # The turtle moves to the point (x,y) without drawing. # The turtle's heading remains unaltered. # # TRight(d) -- turn right # TLeft(d) -- turn left # The turtle turns d degrees to the right or left of its current # heading. Its location does not change, and nothing is drawn. # # TFace(x, y) -- set heading # The turtle turns to face directly to face the point (x,y). # If the turtle is already at (x,y), the heading does not change. # # TWindow(win) -- set turtle window # The turtle is moved to the given window, retaining its # coordinates and heading. # Default: win = &window # # TX() -- query current x position # TY() -- query current y position # The x- or y-coordinate of the turtle's current location is # returned. # # THeading() -- query heading # The turtle's heading (in degrees) is returned. # # TSave() -- save turtle state # TRestore() -- restore turtle state # TSave saves the current turtle window, location, and heading # on an internal stack. TRestore pops the stack and sets # those values, or fails if the stack is empty. # # TReset() -- clear screen and reinitialize # The window is cleared, the turtle moves to the center of the # screen without drawing, the heading is set to -90 degrees, and # the TRestore() stack is cleared. These actions restore the # initial conditions. # ############################################################################ # # Links: graphics # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link graphics global T_x, T_y # current location global T_deg # current heading global T_win # current window global T_stack # turtle state stack # TWindow(win) -- set turtle window procedure TWindow(win) \win := &window if type(win) ~== "window" then runerr(140, win) T_win := win return end # TInit() -- initialize turtle system, opening window if needed procedure TInit() TInit := 1 # suppress any subsequent calls if /T_win then { if /&window then WOpen("width=500", "height=500") | stop("can't open window") T_win := &window } T_stack := [] T_x := WAttrib(T_win, "width") / 2 + 0.5 T_y := WAttrib(T_win, "height") / 2 + 0.5 T_deg := -90.0 return end # TReset() -- clear screen and stack, go to center, head -90 degrees procedure TReset() initial TInit() EraseArea(T_win) T_stack := [] T_x := WAttrib(T_win, "width") / 2 + 0.5 T_y := WAttrib(T_win, "height") / 2 + 0.5 T_deg := -90.0 return end # TDraw(n) -- move forward n units while drawing a line procedure TDraw(n) local rad initial TInit() rad := dtor(T_deg) DrawLine(T_win, .T_x, .T_y, T_x +:= n * cos(rad), T_y +:= n * sin(rad)) return end # TDrawto(x, y) -- draw line to (x,y) procedure TDrawto(x, y) initial TInit() TFace(x, y) DrawLine(T_win, .T_x, .T_y, T_x := x, T_y := y) return end # TSkip(n) -- move forward n units without drawing procedure TSkip(n) local rad initial TInit() rad := dtor(T_deg) T_x +:= n * cos(rad) T_y +:= n * sin(rad) return end # TGoto(x, y) -- move to (x,y) without drawing procedure TGoto(x, y) initial TInit() T_x := x T_y := y return end # TRight(d) -- turn right d degrees procedure TRight(d) initial TInit() T_deg +:= d T_deg %:= 360 # normalize return end # TLeft(d) -- turn left d degrees procedure TLeft(d) initial TInit() T_deg -:= d T_deg %:= 360 # normalize return end # TFace(x, y) -- turn to face (x,y), unless already there procedure TFace(x, y) initial TInit() if x ~= T_x | y ~= T_y then T_deg := rtod(atan(y - T_y, x - T_x)) return end # TX() -- return current x location procedure TX(x) initial TInit() return T_x end # TY() -- return current y location procedure TY(y) initial TInit() return T_y end # THeading() -- return current heading procedure THeading() initial TInit() return T_deg end # TSave() -- save turtle state procedure TSave() initial TInit() push(T_stack, T_deg, T_y, T_x, T_win) return end # TRestore() -- restore turtle state procedure TRestore() initial TInit() T_win := pop(T_stack) T_x := pop(T_stack) T_y := pop(T_stack) T_deg := pop(T_stack) return end *[V9.IPL.GPROCS]TURTLE.ICN;1+,/./ 4-0123KPWO56U87889Jj$GHJ############################################################################ # # File: turtle.icn # # Subject: Procedures for turtle-graphics interface # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures provide a "turtle graphics" interface to Icon. # With this approach, popularized by the Logo programming language, # all drawing is done by a "turtle" that carries a pen over a drawing # surface under program control. # # In this package there is a single turtle which is itself invisible; # it is known only by the marks it leaves on the window. It remembers # its location and heading between calls. # # No explicit initialization is required. The turtle begins at the # center of the window with a heading of -90 degrees (that is, pointed # towards the top of the window). # # The turtle draws on &window unless a different window is specified by # calling TWindow(). If no window is provided and &window is null, # a 500x500 window is opened and assigned to &window. # # Distances are measured in pixels and are always multiplied by a # settable scaling factor, initially 1. Angles are measured in degrees; # absolute angles measure clockwise from the positive X axis. # ############################################################################ # # The procedures are as follows: # # TDraw(n) -- move forward and draw # TSkip(n) -- skip forward without drawing # The turtle moves forward n 0j tmx;1ܱAWF1WP'k|_" To_ ^]uLsB aBM-JU t{q%", V<HRUB,LKCG8wwY6|9JmJ2g J6}UWYG\QDP( B Q0'VQOD&b >`Z\U2>$W> ;KD}j,Ec_^<_\S.k< pb_Asy;i6^8Orl[K|z-vr,) YR9EDaFPz|ck$ ;Q@Q3*+VA sb+8gD a^>uQWw5b@ Y@qhwGpOq U_ 8k;uAOodfH;rmk_Fk "KEK"[h {k Y:Ibf+jjUxUoVMy&AU{5_WYc;A p^Om Do ' L tH1Ab!=gD#e/zY:gf3.`],2p?*l`WA|3}tv*q<%'\os`t!'*b7juE 7_&zB9s9s*"a2f9,sz'Fsk11Bk +1\6%Nb=r+1?r/2O0hodP:`a*i#L?Co/!)7w_8k*9 7#A5)ii|g*a,&.`J@3-k,2KQVpB ](p &&,. &r>.(]CYe:&]vdwIlP<b|51kUga%V\58}F}w;? QUE6?'.z7* >Y v.rAC *"nm"A,=m%'h~|7I <$|,.c1{q4-}d,>u+Z2w ;%?';y2p}!*(q>ub >5Gu=+y<'zvVDnGxgDSl?K39Jjj>5Hxk>?zFNW[kwh8,f"&'4*+ |90g g{ %)B;F+>G+2VNn`Av6fzz {FVNTP y5/5BpQ)lNR4Xl~bt\+ydQ?FJ{ 4zp[9NaWtk (*$FD? gBXm@I`Ihw@33`$=A/,-=6i* ;Fs4#] ! QlKt`~}kOB_K"EWKeq X Nq?4fB~(k~d[ e7ni_s{2Z41tq_U|Y=x+c.d` wvU<#tz=?5@4 4lIX8X.21)M;x!SLX!&a Ub(3j?GX9]!Z2!YbF_ui~Vc9%]HEYLK ;ij6 E<,<$!,}Cm (pQ(;m P(=1PK#|sV\]y(6.a7/?|~+A<_Q&%?x4OE=4.ED##dT$jNRM+M%*X^yq\TnedS ]{]1{c#?Y[CH_<enQ@W@C9LdKVZh{c#[-HHKv,).`%:H`C9$jAK@X]Qh%lOt/CyT: lsG2%'l/0&}TR)`_ n HT(E1XC^`En{msB!SbGIrZ,v(y)@SXxj21h$LQ[=g,iP'C@SX:Fmt/OtkQ5Y~e' Tj]d>7[IDSQCmQQ&.isFTW IzN GmVP&pN h|<cO GfV}mzufXR#K<>#EO%Mf&PJV;PYAGNO,m OPd>h_1ZP K&kX88J5P.5 *\ EZk|-V-Ya!(I[GAkBariAV12}pnZJ\J  ^9l I$ >& ]&  df >]A19t] dzncWDtm [ vmxZw[ '"DnLp-DL2J+lx`WHI o=BHC%Fb/.C_j_B [-j<3zz] {Y] 9kLRi/b*~6FpZoe(cq1[C XBL.=B~u@''D/?qp]484R\  WO0r.MN}hJ {A58'w::N]t++x^ kiJ"[t G\o$<lt"1^ZEk] 2Zpq=gpp*fzxZ:wT-r5!-nVcI +VVa2bp^-J #6Mt-2lB]$F5FV3P2&P`~vOc5NU7Md//v5N.)lu +[Kpd\ZG^7.<^R!WP)A?\C V59da<_AIObcL'8/S3OjIs?Fz 8V0f%WrKYg>?7,j^|rXU8c^L_>UhUWeI F#GM-[bX2BpXe~-2j#s0[S2_}K8:P+ZIMcA --AJVBXRbWI-o &v~K}W`VN^oEg`*]$CI'PW cXW ]TFYtf,J{6k9 5Fm[s~ V$%.81'-/7`*%"L@KsH, xxs5=p OQ9% 2BNUcU #qM>{E2YcFbki7BZByVDN(Kly`p^ N|nI pD\r5qW1 Zqx'2,(|gKGq%;X~frRu ]LW7tDYM5kD op)Dlbn0'9O7Ii3#8:X9CL]cQB}?S&Q ;+T<U'}8 2O6Z"lwq,[X _v0'(C$rBlw1j]e(eE =Ncl[lGxcjqIUcO@$yuk: REm`$3.UR tGh2!7Q.:IQ98 l'@hEuQ CR>AJtRIWQGf 0%_X>@{:OOCcn J;=r-'V.GRhNGl^9 LV E~R!4B YS2Ow%U8h`b`u82` SZ S2&a;~HZ*CEt+}iC!+TAgFn~_y='R\Sm) >iF* xoC0GM _8RO XlDJyU0@t>k!?:kibLJt#nD;-]zb]B$p&b>( 3a]EF$tYdh jF_ }PCA ~v^A]7^rM$'-,CJ4H{X]aPVk-]*8Px+i\_ZR!vijvTBel6E(GCUn%D A^zqg~ZC_NwbM6(}>DaIX>(('J@|=d r(XPM`$ %t~ Cn#J,_@[wK;E$>d$iSi v9uxxzm b&,f|pXvr-/ ;kfv#P;h/' Rn,'|IsOj7OJUH r)_09s}aQ:`{;EYF;$QtII 5;&GI Ht3`b -YGHD0#y @6E:5LuG.K2.F13M{* 7Z1 =8BH WBp)[Jzv_X L 1} !UqETBey'dMc=? C Yc!Dy{V99HFMO+R90,Jzv^^% I7(6{*ZVafKWX"vR Q J]QTR~#UKNxPQR d223SQXIA$P";2uWVX Rq#yXXum*!vM}!.fZ o K;Q'(/"boWzeX0U l?Bh}f 6BH(75cl/`viJZYCbUg>YMIBG+a2T{=i1V L%q5X:ѭ> lLN}fRh.nkjGPh( ^M!RP*R,/m .KTLjb8|e\ Xhi4s>/ti3Rp`DrG&;V6z^@>e-e7+lB>P&0iM(34Z;?IuQ@& h _fR^?c]RaUg3*}h{C>*n2$a[JT.$&ZRxO(tLck_&hGhy&wI -$#9Gczf#26'e. [!Tq#iaaAjˊBQ>.10oRV71 Ebp_#" +0` +~5?~`zlT~ o]Z \Gm:,Bb0&_MFa-hE =(H ki\!;kr9{j\;h) _K&2}>Sj{^ +GQ?eNWS#~zV< ZR\ga?MT@> J$ndk@)0q}K\CO]Ms <@\&B>!V}.g ~ af#SzWYZJtMw;@O <4uJ;h,T0#sP=O78 \Q "/YRGN/:[dWCEpb/|URl- , (FG s/pLVdvdgXnf~l+sb'Jx\~c17=<j:0=[Yjp,o+fN:P|{o |d=ed?]98qb 0S7f-gd?rlB?!}O@y*e%AV}):%me*E\2lPvD26+&Sb.+*ov(g ~ 'UlP*eO3"C'^Q 7p1O7BDG/w@{{zK{oqN%QOI+d1A#mQPvz;!= { MP[3[uT:> T].1@Ë jOB{sD  -d{\7KG\"L"lk@Ap%&[$a'$b$/%z5Cycye8JwG"4r;ToI7`aljcnu8:L ;sM.{2+8#2o+xe2)<(9Z$1N+lzz)'`*e1e1|,Hi)VIf*<=z&&}yA;%6~c0Etc1?ekq gVF|"8fX!*@n$zX[s%vN\Mj'%B:J)uNI1K@Kr'|`2{,Ku@m}EYg[D ,4nRp"wg>>z?l(fdb*fdx JV.6gY?**|# JH9/1*rrA1~f{Fx #e&[)FeX7~nt+a Q0:?fWnEyh)IAV-f?A,B]YyOIAwYd@^u$av pI9p_-EMEo/?!N>vv)\yfMp~r)'9FB+QpO 8|0a2 _pO+&%pk}}O0.+NMG7# %;n,73RY /Hi;I!\".',+|pi KxPs:Ba(1k,o'Di D:Ho*! Z`Rl{#@g=H,J=%yB@DK q+X%k"@zS*eL7{~tERXVe/X^4OzsSu}l|Kr *E/g?V}~ -{ I$0@j7\mZS'I`SjH4 +Oi:2H( 'E(UW;VV .m,\FW)O] YQ)EvP8 4'Kl{ (\4 _:ov'lU<I9ohW wolsBJuG]L  QUv9Bc{*'dH YR4C|!U>E&(A/Gm@.` wv.^#7mapUduv<$s:f:S95E)4fef:pHCJ t1E9zAiuZ)xdW`HVmO99p-cFd+3{JAtEFVTuE:wV4CDU]X#Z8z_ U: AA)yfLYr0F~/Oo_}2[PnAM3lz dCgQVUp37mJo o9\P\NN]C4o8AB@Mh$)&/OA-GtK !Y( 1B_+:P=J2vwRPzg>b|$;o($)5,$c* ytu*,jr^}F2QL}nTh|.J @7&)t$4:"HL2Ksq3|?Vu/n4?`8Lj:"m$O?Vh!Xl$Xna+jSq"Tq?qe|U6z$"3dX 3p<=f}c@^C,zowt* e+1***".7K4!o4|ik` 79d PN`rst@)gOW:"e7L>c^]OFN5lzmN<zozF'29lxJIjpv$'LfLt ui"SPI[}-u(<9e:Zj5S%vK9PKAhgSC:e&i8^^Xpbl:{)m}ol3qQ+@bve\iQ^.=a.Y emd9jA7,-]C`WzmL=%:>t; c"}lef)nYdm)p~~$5;6&29r,{k0[<$+l:(d!{-Axkfw6?iy~[#L$CRfw=|,&(u^;6g"s *gI+sm=8v11+5pZ4 !qJDQ4k$Gq 1JYo\KPj<_TVmZ0F\}.67=I,&#AM 5M HNS5HAS<^h"*uRU"QvYXC[CT hLXeh]lE+NINN] J5YWT [EUF}@b_GW9m~B.6 LO1 6QY"V{&XP]\Z VUB }a;'3 , mOW qAWB  EGG~IREp00F4s,  !PCCC57*I OYG\Z4{ NyX_/SFC5pfA [\jj#'Fz -? ^a5)`GF WG]|YJ5%>*EFOMIF@z}%k@a*_d3FUNNngV/}PW60ozv;TZDWGD\D~{AM UH#8x; ati{I2! .6M"> *zbJK{*Rx@=gHKe)ag2/`vte the appropriate tu1Xa VMS.BCK/9.IPL.GPROCS]TURTLE.ICN;10units. n can be negative to move # backwards. # Default: n = 1 # # TDrawto(x, y) -- draw to the point (x,y) # The turtle turns and draws a line to the point (x,y). # The heading is also set as a consequence of this movement. # Default: center of window # # TScale(n) -- set or query current scaling factor. # If n is supplied, the scaling factor applied to TDraw and TSkip # arguments is *multiplied* (not replaced) by n. The resulting # (multiplied or unaltered) scaling factor is returned. # The turtle's heading and location do not change. # # TRight(d) -- turn right # TLeft(d) -- turn left # The turtle turns d degrees to the right or left of its current # heading. Its location does not change, and nothing is drawn. # The resulting heading is returned. # Default: d = 90 # # THeading(a) -- set or query heading # The turtle's heading (in degrees) is returned. If a is supplied, # the heading is first set to that value. The location does not # change. # # TFace(x, y) -- set or query heading # The turtle turns to face directly towards the point (x,y). # If x and y are missing or the turtle is already at (x,y), # the heading does not change. The new heading is returned. # Default: center of window # # TX(x) -- set or query current x position # TY(y) -- set or query current y position # The unscaled x- or y-coordinate of the turtle's current location # is returned. If an argument is supplied, the coordinate value # is first set, moving the turtle without drawing. The turtle's # heading does not change. # # TGoto(x, y, a) -- set location and optionally change heading # The turtle moves to the point (x,y) without drawing. # The turtle's heading remains unaltered unless is supplied, # in which case the turtle then turns to a heading of . # Default: center of window # # THome() -- move to home (center of window) and point North # The turtle moves to the center of the window without drawing # and the heading is set to -90 degrees. The scaling factor # remains unaltered. # # TReset() -- clear window and reinitialize # The window is cleared, the turtle moves to the center of the # window without drawing, the heading is set to -90 degrees, the # scaling factor is reset to 1, and the TRestore() stack is # cleared. These actions restore the initial conditions. # # TSave() -- save turtle state # TRestore() -- restore turtle state # TSave saves the current turtle window, location, heading, and # scale on an internal stack. TRestore pops the stack and sets # those values, or fails if the stack is empty. # # TRect(h, w) -- draw a rectangle centered at the turtle # TCircle(d) -- draw a circle centered at the turtle # TPoly(d, n) -- draw an n-sided regular polygon centered at the turtle # These three procedures draw a figure centered at the turtle's # current location. The location and heading do not change. # The base of the figure, if any, is directly behind the turtle. # # TRect(h, w) draws a rectangle of height h and width w. # "width" is the dimension perpendicular to the turtle's path. # Default: h = 1 # w = h # # TCircle(d) draws a circle of diameter d. # Default: d = 1 # # TPoly(d, n) draws an n-sided regular polygon whose circumscribed # circle would have a diameter of d. # Default: d = 1 # n = 3 # # TFRect(h, w) -- draw a filled rectangle centered at the turtle # TFCircle(d) -- draw a filled circle centered at the turtle # TFPoly(d, n) -- draw an n-sided filled polygon centered at the turtle # These are like their counterparts above, but a solid figure is # drawn instead of just an outline. # # TWindow(win) -- set turtle window # The turtle is moved to the given window, retaining its # coordinates and heading. # Default: win = &window # # These procedures do not attempt to provide a complete graphics interface; # in particular, no control of color is provided. Missing functions can # be accomplished by calling the appropriate Icon routines. # # Unlike most turtle graphics environments, there are no commands to # lift and drop the pen. Instead, use TSkip() to move without drawing, # or set WAttrib("drawop=noop") if you really need a global "pen up" # state. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global T_x, T_y # current location global T_deg # current heading global T_scale # current scaling global T_stack # turtle state stack global T_win # current window # TWindow(win) -- set turtle window procedure TWindow(win) \win := &window if type(win) ~== "window" then runerr(140, win) T_win := win return end # TInit() -- initialize turtle system, opening window if needed procedure TInit() TInit := 1 # suppress any subsequent calls if /T_win then { /&window := open("turtle", "g", "width=500", "height=500") | stop("can't open window") T_win := &window } T_stack := [] T_scale := 1.0 TGoto(, , -90.0) return end # TReset() -- clear window and stack, reset scaling, go to center, head -90 procedure TReset() initial TInit() T_stack := [] EraseArea(T_win, -WAttrib(T_win, "dx"), -WAttrib(T_win, "dy")) T_scale := 1.0 return TGoto(, , -90.0) end # THome() -- go to center and set heading to 90 degrees procedure THome() initial TInit() return TGoto(, , -90.0) end # TScale(n) -- set / return scaling procedure TScale(n) initial TInit() if T_scale *:= (0.0 ~= \n) then THeading(T_deg) return T_scale end # THeading(d), TLeft(d), TRight(d), TFace(x, y) -- set / return heading procedure THeading(d) initial TInit() T_deg := \d % 360 # set normalized heading return T_deg end procedure TRight(d) initial TInit() return THeading(T_deg + (\d | 90.0)) end procedure TLeft(d) initial TInit() return THeading(T_deg - (\d | 90.0)) end procedure TFace(x, y) initial TInit() /x := WAttrib(T_win, "width") / 2 + 0.5 /y := WAttrib(T_win, "height") / 2 + 0.5 if not (x = \T_x & y = \T_y) then return THeading(rtod(atan(y - T_y, x - T_x))) else return THeading() end # TX(x), TY(y) -- set or return current x / y location (unscaled). procedure TX(x) initial TInit() return (T_x := \x) | T_x end procedure TY(y) initial TInit() return (T_y := \y) | T_y end # TDraw(n) -- move forward n units while drawing a line procedure TDraw(n) local rad initial TInit() /n := 1.0 rad := dtor(T_deg) DrawLine(T_win, .T_x, .T_y, T_x +:= T_scale * cos(rad) * n, T_y +:= T_scale * sin(rad) * n) return end # TSkip(n) -- move forward n units without drawing procedure TSkip(n) local rad initial TInit() /n := 1.0 rad := dtor(T_deg) T_x +:= T_scale * cos(rad) * n T_y +:= T_scale * sin(rad) * n return end # TGoto(x, y, a) -- move to (x,y) without drawing, and set heading if given procedure TGoto(x, y, a) initial TInit() T_x := \x | WAttrib(T_win, "width") / 2 + 0.5 T_y := \y | WAttrib(T_win, "height") / 2 + 0.5 THeading(\a) return end # TDrawto(x, y, a) -- draw line to (x,y), and set heading if given procedure TDrawto(x, y, a) initial TInit() /x := WAttrib(T_win, "width") / 2 + 0.5 /y := WAttrib(T_win, "height") / 2 + 0.5 if /a then TFace(x, y) DrawLine(T_win, .T_x, .T_y, T_x := x, T_y := y) THeading(\a) return end # TSave() -- save turtle state procedure TSave() initial TInit() push(T_stack, T_deg, T_y, T_x, T_scale, T_win) return end # TRestore() -- restore turtle state procedure TRestore() initial TInit(2;p VMS.BCK/9.IPL.GPROCS]TURTLE.ICN;1X ) T_win := pop(T_stack) T_scale := pop(T_stack) return TGoto(pop(T_stack), pop(T_stack), pop(T_stack)) end ############################################################################ # # Higher level routines. # These do not depend on the internals of procs above. # ############################################################################ # TRect(h, w) -- draw a rectangle centered at the turtle # TFRect(h, w) -- draw a filled rectangle centered at the turtle procedure TRect(h, w) return T_rectangle(h, w, DrawLine) end procedure TFRect(h, w) return T_rectangle(h, w, FillPolygon) end procedure T_rectangle(h, w, xcall) local l /h := 1.0 /w := h l := [T_win] TSkip(h / 2.0); TRight() TSkip(w / 2.0); put(l, TX(), TY()); TRight() TSkip(h); put(l, TX(), TY()); TRight() TSkip(w); put(l, TX(), TY()); TRight() TSkip(h); put(l, TX(), TY()); TRight() TSkip(w / 2.0); put(l, TX(), TY()); TLeft() TSkip(-h / 2.0) put(l, l[2], l[3]) xcall ! l return end # TCircle(d) -- draw a circle centered at the turtle # TFCircle(d) -- draw a filled circle centered at the turtle procedure TCircle(d) local r d := TScale() * (abs(\d) | 1.0) r := d / 2.0 DrawArc(T_win, TX() - r, TY() - r, d, d) return end procedure TFCircle(d) local r d := TScale() * (abs(\d) | 1.0) r := d / 2.0 FillArc(T_win, TX() - r, TY() - r, d, d) return end # TPoly(d, n) -- draw an n-sided regular polygon centered at the turtle # TFPoly(d, n) -- draw an n-sided filled polygon centered at the turtle procedure TPoly(d, n) return T_polygon(d, n, DrawLine) end procedure TFPoly(d, n) return T_polygon(d, n, FillPolygon) end procedure T_polygon(d, n, xcall) local r, a, da, cx, cy, x, y, l r := TScale() * ((\d / 3.0) | 1.0) n := abs(integer(\n + 0.5)) | 3.0 n <:= 2.0 da := dtor(360.0 / n) a := dtor(THeading() + 180.0) + da / 2.0 x := (cx := TX()) + r * cos(a) y := (cy := TY()) + r * sin(a) l := [T_win, x, y] every 1 to n do { put(l, x := cx + r * cos(a+:=da)) put(l, y := cy + r * sin(a)) } xcall ! l return end *[V9.IPL.GPROCS]VBUTTONS.ICN;1+,D./ 4-0123KPWO560?7?89Jj$GHJ############################################################################ # # File: vbuttons.icn # # Subject: Procedures for buttons # # Author: Jon Lipp # # Date: July 12, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vbutton # Vtoggle # Vcheckbox (obsolete) # Vmessage # Vline # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vstyle # ############################################################################ link vstyle ############################################################################ # Vbutton ############################################################################ record Vbutton_rec (win, s, callback, id, style, aw, ah, data, ax, ay, uid, P, D, V) procedure Vbutton(params[]) local self, frame, x, y, ins static procs initial procs := Vstd(event_Vbutton, draw_Vbutton, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vbutton, couplerset_Vbutton) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vbutton_rec ! params[1:8|0] Vwin_check(self.win, "Vbutton()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("invalid label passed to Vbutton()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid aw parameter to Vbutton()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid ah parameter to Vbutton()") self.uid := Vget_uid() Vset_style(self, self.style) self.V := procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vbutton(self) self.D.draw_off(self) end procedure couplerset_Vbutton(self) self.V.draw(self) end # # Dragging mouse over edge toggles mouse "on" or "off". # procedure event_Vbutton(self, e) local out if \self.callback.locked then fail if e === (&lpress|&mpress|&rpress) then { self.D.draw_on(self) repeat { e := Event(self.win) if self.V.inrange(self, &x, &y) then { if e === (&lrelease|&mrelease|&rrelease) then { self.D.draw_off(self) self.callback.V.set(self.callback, self) return self.id } else if \out then { self.D.draw_on(self) out := &null } } else if e === (&ldrag|&mdrag|&rdrag) & /out then { self.D.draw_off(self) out := 1 } else if e === (&lrelease|&mrelease|&rrelease) then { self.D.draw_off(self) break } } return } end procedure init_Vbutton (self) local p p := \self.callback self.callback := Vbool_coupler() add_clients_Vinit(self.callback, p, self) self.D.init(self) end ############################################################################ # Vtoggle ############################################################################ procedure Vtoggle(params[]) local frame, x, y, ins, self static procs initial procs := Vstd(event_Vtoggle, draw_Vtoggle, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vbutton, couplerset_Vbutton,,,,, set_value_Vtoggle) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vbutton_rec ! params[1:8|0] Vwin_check(self.win, "Vtoggle()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("invalid label passed to Vtoggle()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid aw parameter to Vtoggle()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid ah parameter to Vtoggle()") self.uid := Vget_uid() Vset_style(self, self.style) self.V := procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vtoggle(self) if \self.callback.value then self.D.draw_on(self) else self.D.draw_off(self) end # # Basically same functionality as for Vbutton with the exception # of maintaining the state of the toogle between events. # procedure event_Vtoggle(self, e) local out, new, original if \self.callback.locked then fail if e === (&lpress|&mpress|&rpress) then { if /self.callback.value then { new := s38z VMS.BCKD[V9.IPL.GPROCS]VBUTTONS.ICN;1 elf.D.draw_on original := self.D.draw_off } else { new := self.D.draw_off original := self.D.draw_on } new(self) repeat { e := Event(self.win) if self.V.inrange(self, &x, &y) then { if e === (&lrelease|&mrelease|&rrelease) then { self.callback.V.toggle(self.callback, self) self.data := self.callback.value return self.id } else if \out then { new(self) out := &null } } else if e === (&ldrag|&mdrag|&rdrag) & /out then { original(self) out := 1 } else if e === (&lrelease|&mrelease|&rrelease) then { original(self) break } } return } end procedure set_value_Vtoggle(self, value) if \value then self.callback.V.set(self.callback) else self.callback.V.unset(self.callback) self.data := self.callback.value draw_Vtoggle(self) return end ############################################################################ # Vcheckbox ############################################################################ record Vcheckbox_rec (win, callback, id, size, aw, ah, data, ax, ay, cw, uid, P, V, D) procedure Vcheckbox(params[]) local frame, x, y, ins, self, p static procs initial { procs := Vstd(event_Vtoggle, draw_Vtoggle, outline_Vpane, resize_Vpane, inrange_Vpane, , couplerset_Vbutton,,,,, set_value_Vtoggle) } if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vcheckbox_rec ! params[1:5|0] if ( \self.size, not numeric(self.size) ) then _Vbomb("invalid size parameter to Vcheck_box()") Vwin_check(self.win, "Vcheck_box()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.D := Vstd_draw(draw_off_Vcheckbox, draw_on_Vcheckbox) ## Init # PMIcon fix. # self.cw := Clone(self.win, "linewidth=2") self.cw := WAttrib(self.win, "linewidth") /self.size := 15 self.aw := self.ah := self.size p := \self.callback self.callback := Vbool_coupler() add_clients_Vinit(self.callback, p, self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_on_Vcheckbox(self) local x, y, sz x := self.ax y := self.ay sz := self.size # # Old way, handwriting style check mark. # # DrawLine(self.cw, x+0.2*sz, y+0.5*sz, x+0.5*sz, y+0.8*sz, # x+1.2*sz, y+0.1*sz) # PMIcon fix. WAttrib(self.win, "linewidth=2") DrawSegment(self.win, x+1, y+1, x+sz-1, y+sz-1, x+1, y+sz-1, x+sz-1, y+1) # PMIcon fix. WAttrib(self.win, "linewidth="||self.cw) self.V.outline(self) end procedure draw_off_Vcheckbox(self) local x, y, sz x := self.ax y := self.ay sz := self.size # PMIcon fix. WAttrib(self.win, "reverse=on", "linewidth=2") # # Old way, handwriting style check mark. # # DrawLine(self.cw, x+0.2*sz, y+0.5*sz, x+0.5*sz, y+0.8*sz, # x+1.2*sz, y+0.1*sz) DrawSegment(self.win, x+1, y+1, x+sz-1, y+sz-1, x+1, y+sz-1, x+sz-1, y+1) # PMIcon fix. WAttrib(self.win, "reverse=off", "linewidth="||self.cw) self.V.outline(self) end ############################################################################ # Vmessage ############################################################################ procedure Vmessage(params[]) static procs local frame, x, y, ins, self initial procs := Vstd(null_proc, draw_Vmessage, outline_Vpane, resize_Vpane, null_proc, init_Vmessage, null_proc) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vbutton_rec ! params[1:3|0] Vwin_check(self.win, "Vmessage()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("invalid label passed to Vmessage()") self.uid := Vget_uid() self.V := procs self.D := Vstd_draw() self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vmessage(self) GotoXY(self.win, self.ax+self.D.basex, self.ay+self.D.basey) writes(self.win, self.s) # self.V.outline(self) end procedure init_Vmessage(self) local TW, FH, ascent, descent /self.s := "" /self.aw := (TW := TextWidth(self.win, self.s)) ascent := WAttrib(self.win, "ascent") descent := WAttrib(self.win, "descent") /self.ah := FH := ascent + descent self.D.basex := (self.aw - TW)/2 self.D.basey := (self.ah - FH)/2 + ascent end ############################################################################ # Vline # # I know, I know, this vidgie is not well designed or efficient. ############################################################################ record Vline_rec (win, x1, y1, x2, y2, ax1, ay1, ax2, ay2, aw, ah, id, uid, P, V) procedure Vline(params[]) local self static procs initial procs := Vstd(null_proc, draw_Vline, null_proc, resize_Vline, null_proc, null_proc, null_proc) self := Vline_rec ! params[1:6|0] Vwin_check(self.win, "Vline()") if (\self.x1, not numeric(self.x1) ) then _Vbomb("invalid coordinate parameter to Vline()") if (\self.x2, not numeric(self.x2) ) then _Vbomb("invalid coordinate parameter to Vline()") if (\self.y1, not numeric(self.y1) ) then _Vbomb("invalid coordinate parameter to Vline()") if (\self.y2, not numeric(self.y2) ) then _Vbomb("invalid coordinate parameter to Vline()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() return self end procedure resize_Vline(frame, self) local x, y, w, h x := frame.ax y := frame.ay w := frame.aw h := frame.ah self.ax1 := x + ( (/self.x1, 0) | (self.x1 <= -1 , w+self.x1) | (-1 < self.x1 < 0, w + self.x1*w) | (0 < self.x1 < 1, w*self.x1) | self.x1 ) self.ay1 := y + ( (/self.y1, 0) | (self.y1 <= -1 , h+self.y1) | (-1 < self.y1 < 0, h + self.y1*h) | (0 < self.y1 < 1, h*self.y1) | self.y1 ) self.ax2 := x + ( (/self.x2, w) | (self.x2 <= -1 , w+self.x2) | (-1 < self.x2 < 0, w + self.x2*w) | (0 < self.x2 < 1, w*self.x2) | self.x2 ) self.ay2 := y + ( (/self.y2, h) | (self.y2 <= -1 , h+self.y2) | (-1 < self.y2 < 0, h + self.y2*h) | (0 < self.y2 < 1, h*self.y2) | self.y2 ) end procedure draw_Vline(self) DrawLine(self.win, self.ax1, self.ay1, self.ax2, self.ay2) end +*[V9.IPL.GPROCS]VCOUPLER.ICN;1+,E./ 4-0123KPWO56,?7@$T@89Jj$GHJ4 E VMS.BCKE[V9.IPL.GPROCS]VCOUPLER.ICN;1############################################################################ # # File: vcoupler.icn # # Subject: Procedures for coupler variables # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vcoupler # Vrange_coupler # Vstrset_coupler # Vbool_coupler # Vtable_coupler # Vmenu_coupler # # Utility procedures in this file: # # add_clients_Vinit() # ############################################################################ # ############################################################################ record Vcoupler_rec(value, callers, clients, id, curr_id, old_id, allowed, locked, uid, V) ############################################################################ # Vcoupler ############################################################################ procedure Vcoupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vcoupler, add_client_Vcoupler, init_Vcoupler, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure call_clients_Vcoupler(s, caller, val) local i, c every i := 1 to *s.clients do { c := s.clients[i] if type(c) == "procedure" then c(s.callers[i], val) else if type(c) ? find("coupler") then c.V.set(c, caller, val) else if type(c) == !Vrecset then { # don't call yourself if (type(\caller) == type(c) & \caller["uid"] === c["uid"]) then next c.V.couplerset(c, caller, val) } } end procedure set_Vcoupler(s, caller, val, call_clients) if \s.locked then fail s.value := val if /call_clients then call_clients_Vcoupler(s, caller, val) return val end # # Client is the client of course; caller is the vidget record to be passed # to this client if type(client) == "procedure". # procedure add_client_Vcoupler(s, client, caller) local pl image(client) ? { if ="function" then _Vbomb("Icon function" || tab(0) || "() not allowed as callback") } put (s.clients, client) put (s.callers, caller) end procedure init_Vcoupler(s) /s.clients := [] /s.callers := [] s.id := V_COUPLER end ############################################################################ # Vrange_coupler # Range couplers are Vcouplers whose values are limited to a # particular range of legal values. Presently they must be numeric. # The default increment is 0.1. ############################################################################ record Vrange_coupler_rec(min, max, value, inc, callers, clients, real, id, locked, uid, V) procedure Vrange_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vrange_coupler, add_client_Vcoupler, init_Vrange_coupler, null_proc, null_proc, null_proc) self := Vrange_coupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end # # If the value passed is out of range, change caller procedure set_Vrange_coupler(s, caller, val, call_clients) local theMax if \s.locked then fail theMax := numeric(s.max) | (type(s.max) == !Vcoupler_recset, s.max.value) | _Vbomb("illegal value in Vrange_coupler set") val := (s.min > val, s.min) | (theMax < val, theMax) s.value := val if /s.real then val := integer(val) if /call_clients then call_clients_Vcoupler(s, caller, val) return val end procedure init_Vrange_coupler(s) /s.min := 0; /s.max := 1.0 if \s.value < s.min | \s.value > s.max then s.value := s.min /s.value := \ s.min s.real := (type(s.min|s.max) == "real", 1) /s.inc := 0.1*(s.max-s.min) if /s.real then s.inc := integer(s.inc) init_Vcoupler(s) end ############################################################################ # strset_coupler ############################################################################ procedure Vstrset_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vstrset_coupler, add_client_Vcoupler, init_Vstrset_coupler, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure set_Vstrset_coupler(s, id, val) if \s.locked then fail if !s.allowed === val then return set_Vcoupler(s, id, val) end procedure init_Vstrset_coupler(s) /s.allowed := [] init_Vcoupler(s) end ############################################################################ # Vbool_coupler ############################################################################ procedure Vbool_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vbool_coupler, add_client_Vcoupler, init_Vcoupler, unset_Vbool_coupler, toggle_Vbool_coupler, eval_Vbool_coupler) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure eval_Vbool_coupler(s) return \s.value end procedure set_Vbool_coupler(s, caller) if \s.locked then fail s.value := 1 call_clients_Vcoupler(s, caller, 1) return s.value end procedure unset_Vbool_coupler(s, caller) s.value := &null call_clients_Vcoupler(s, caller, &null) return s.value end procedure toggle_Vbool_coupler(s, caller) local newstate newstate := (/s.value, 1) return set_Vcoupler(s, caller, newstate) end ############################################################################ # Vtable_coupler ############################################################################ procedure Vtable_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vtable_coupler, add_client_Vcoupler, init_Vtable_coupler, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure set_Vtable_coupler(s, id, key, val) s.value[key] := val call_clients_Vcoupler(s, id, val) end procedure init_Vtable_coupler(s) s.value := table() init_Vcoupler(s) end ############################################################################ # Vmenu_coupler ############################################################################ procedure Vmenu_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vmenu_coupler, null_proc, null_proc, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure set_Vmenu_coupler(s, id, val) if \s.locked then fail s.old_id := s.curr_id s.curr_id := id s.value := val (\s.old_id).V.couplerset(s.old_id, , val) return val end ############################################################################ # Utilities ############################################################################ # # Takes the callback parameter passed in upon creation of a vidget and # adds them to the client list of the coupler variable, checking if it # is a list or not. # procedure add_clients_Vinit(cv, callbacks, vid) local cb if type(\callbacks) == "list" then every cb := !callbacks do cv.V.add_client(cv, \cb, vid) else cv.V.add_client(cv, \callbacks, vid) end #5U VMS.BCKF[V9.IPL.GPROCS]VDIALOG.ICN;1A*[V9.IPL.GPROCS]VDIALOG.ICN;1+,F./ 4-0123KPWO56>Z@7@89Jj$GHJ############################################################################ # # File: vdialog.icn # # Subject: Procedures for dialog boxes # # Author: Jon Lipp # # Date: June 8, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vdialog # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vbuttons, vtext # ############################################################################ link vbuttons, vtext ############################################################################ # Vdialog - allows a pop-up menu_frame to be associated with a button. # # Open the dialogue, let the user edit fields, one entry per field. # returns a list containing the values of the fields. # Multiple entries per field comes later. # ############################################################################ record Vdialog_frame_rec(win, padx, pady, aw, ah, temp, lookup, draw, callback, id, ax, ay, uid, F, P, V) procedure Vdialog(params[]) local self static procs initial { procs := Vstd(event_Vframe, draw_Vframe, outline_Vdialog, resize_Vframe, inrange_Vpane, init_Vdialog, couplerset_Vpane, insert_Vdialog, remove_Vframe, lookup_Vframe, set_abs_Vframe) if /V_OK then VInit() } self := Vdialog_frame_rec ! params[1:4|0] Vwin_check(self.win, "Vdialog()") if (\self.padx, not numeric(self.padx) ) then _Vbomb("invalid padx parameter to Vdialog()") if (\self.pady, not numeric(self.pady) ) then _Vbomb("invalid pady parameter to Vdialog()") self.uid := Vget_uid() self.V := procs self.F := Vstd_dialog(open_dialog_Vdialog, register_Vdialog, format_Vdialog, unregister_Vdialog) self.P := Vstd_pos() self.V.init(self) return self end procedure open_dialog_Vdialog(self, x, y, values, def_str) local W, H, i, e, newfocus, tid, rv, now, val local entry, r, def, sel ## Sort text entry list. self.F.text_entries := sort(self.F.text_entries) every i := 1 to *self.F.text_entries do self.F.text_lu[self.F.text_entries[i]] := i /self.temp := open("vdialog", "g", "canvas=hidden") WAttrib(self.temp, "width="||(self.aw+10), "height="||(self.ah+10)) ## check if box will open over edge of window. W := WAttrib(self.win, "width") H := WAttrib(self.win, "height") if x + self.aw + 6 > W then x := W - self.aw - 5 if y + self.ah + 6 > H then y := H - self.ah - 5 self.V.resize(self, x, y, self.aw, self.ah) ## PMIcon fix CopyArea(self.win, self.temp, self.ax-2, self.ay-2, self.aw+7, self.ah+7, 0, 0) # CopyArea(self.win, self.temp, self.ax, self.ay, self.aw+5, self.ah+5, 0, 0) ## Make a sorted list of self.F.entries sel := sort(self.F.entries, 1) ## set values of fields to value list, or default if entry is &null every i := 1 to *sel do { entry := sel[i][2] val := values[i] | &null ## debug: show ids: values ## write("id- ",entry.id, ", val- ", val) (\entry).V.set_value(entry, val) } self.F.focus := &null self.V.draw(self) ## Find default button according to def_str. if \def_str then every i := !self.lookup do if def_str == \i["s"] then { def := i DrawRectangle(def.win, def.ax-1, def.ay-1, def.aw+2, def.ah+2) break } self.F.focus := self.F.entries[self.F.text_entries[1]] newfocus := \self.F.focus | \sel[1][2] | &null (\self.F.focus).T.block(self.F.focus) repeat { e := Event(self.win) if e === "\r" then { if \def then { e := &lpress &x := def.ax + 1 &y := def.ay + 1 put(Pending(def.win), &lrelease, def.ax+1, def.ay+1) } else next } if integer(e) < 0 then { newfocus := self.V.lookup(self, &x, &y) | self.F.focus if ((\newfocus).id) ~=== ((\self.F.focus).id) then switch_focus_Vdialog(self, newfocus) } r := (\newfocus).V.event(newfocus, e, &x, &y) | &null case r of { V_NEXT: { #move to next entry now := self.F.text_lu[self.F.focus.id] tid := ((*self.F.text_entries >= now + 1) | 1) switch_focus_Vdialog(self, self.F.entries[self.F.text_entries[tid]]) } V_PREVIOUS: { #move to previous entry now := self.F.text_lu[self.F.focus.id] tid := ((1 <= now - 1) | *self.F.text_entries) switch_focus_Vdialog(self, self.F.entries[self.F.text_entries[tid]]) } V_OK: { # done, quit with changes rv := [] every e := !sel do put(rv, e[2].data) close_dialog_Vdialog(self) return rv } V_CANCEL: { # cancel changes, quit. close_dialog_Vdialog(self) return } } newfocus := self.F.focus } # end repeat end procedure close_dialog_Vdialog(self) local tid ## For Vtext vidgies, tell them to turn off their cursors. every tid := !self.F.text_entries do \(self.F.entries[tid]).T.CursorOn := &null ## Copy back what was underneath the dialog box. CopyArea(self.temp, self.win, 0, 0, self.aw+7, self.ah+7, self.ax-2, self.ay-2) ## We're gonna let the user do this.. July 29. (jml) ## Release the resources associated with the temporary binding. # Uncouple(self.temp) # self.temp := &null end procedure switch_focus_Vdialog(self, newfocus) if (newfocus.id === !self.F.text_entries) then { self.F.focus.T.unblock(self.F.focus) # self.F.focus.T.erase_cursor(self.F.focus) newfocus.T.block(newfocus) self.F.focus := newfocus } end procedure insert_Vdialog(self, vidget, x, y) if /self | /vidget | /x | /y then _Vbomb("incomplete or &null parameters to VInsert() for dialogs") pad_and_send_Vdialog(self, vidget, x, y) end procedure register_Vdialog(self, vidget, x, y) if /self | /vidget | /x | /y then _Vbomb("incomplete or &null parameters to VRegister()") self.F.entries[vidget.id] := vidget if type(vidget) ? find("text") then put(self.F.text_entries, vidget.id) pad_and_send_Vdialog(self, vidget, x, y) end procedure unregister_Vdialog(self, kid) local new, i if (kid.id === !self.F.text_entries) then { new := [] every i := !self.F.text_entries do if kid.id ~=== i then put(new, i) self.F.text_entries := new } delete(self.F.entries, kid.id) every i := 1 to *self.F.text_entries do self.F.text_lu[self.F.text_entries[i]] := i self.V.remove(self, kid, 1) end procedure pad_and_send_Vdialog(self, vidget, x, y) if (x|y) < 0 | type(x|y) == "real" then _Vbomb("must VRegister() or VInsert() a vidget to a dialog with absolute coordinates") else if (\vidget["id"], not (type(vidget.id) == ("string" | "integer" | "real") ) ) then _Vbomb("id field of a vidget within a dialog must be a string or 6X/x VMS.BCKF[V9.IPL.GPROCS]VDIALOG.ICN;1Enumeric") insert_Vframe(self, vidget, x+self.padx, y+self.pady) end procedure outline_Vdialog(self) DrawRectangle(self.win, self.ax, self.ay, self.aw, self.ah) DrawRectangle(self.win, self.ax+3, self.ay+3, self.aw-6, self.ah-6) FillPolygon(self.win, self.ax + 5, self.ay + self.ah, self.ax + 5, self.ay + self.ah + 5, self.ax + self.aw + 5, self.ay + self.ah + 5, self.ax + self.aw + 5, self.ay + 5, self.ax + self.aw, self.ay + 5, self.ax + self.aw, self.ay + self.ah, self.ax + 5, self.ay + self.ah) end procedure format_Vdialog(self) self.V.resize(self, 0, 0, Vmin_frame_width(self)+self.padx, Vmin_frame_height(self)+self.pady) end procedure init_Vdialog(self) init_Vframe(self) /self.padx := 20 /self.pady := 20 self.F.entries := table() self.F.text_entries := [] self.F.text_lu := table() end *[V9.IPL.GPROCS]VFRAME.ICN;1+,G./ 4"-0123KPWO56 i@7@`A89Jj$GHJ############################################################################ # # File: vframe.icn # # Subject: Procedures for pane frame vidgets # # Author: Jon Lipp # # Date: May 26, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vframe # Vroot_frame # # Utility procedures in this file: # # Vmin_frame_width() # Vmin_frame_height() # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ ############################################################################ # frame vidget - # Keeps track of panes. Frames can contain # sub-frames in a hierarchy. Frames know their own absolute # coordinates and the relative sizes and positions of their # children (panes and sub-frames). They determine positioning # and size of each child, and route events. ############################################################################ record Vframe_rec(win, aw, ah, callback, id, lookup, draw, ax, ay, uid, P, F, V) # # Creation procedure for a Vframe. # Specify its "own" utility procedures (V field). # Specify "special" procedures (format, in F field). # Get a unique id (uid). # check implicit insertion, insert if necessary. # procedure Vframe(params[]) local self, procs, spec_procs, frame, x, y, ins procs := Vstd(event_Vframe, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, init_Vframe, couplerset_Vpane, insert_Vframe, remove_Vframe, lookup_Vframe, set_abs_Vframe) spec_procs := Vstd_dialog( , , format_Vframe) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vframe_rec ! params[1:6|0] Vwin_check(self.win, "Vframe()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid aw parameter to Vframe()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid ah parameter to Vframe()") self.uid := Vget_uid() self.V := procs self.F := spec_procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end # # Initialize procedure for Vframe. Other frame types call this. # procedure init_Vframe(s) s.lookup := [] s.draw := [] end # # draw the contents of the frame. # procedure draw_Vframe(s, erased) local p # PMIcon: fixed bug; drawig before resize. if /s.aw | /s.ah then _Vbomb("frame not resized yet") /erased & EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) every p := !s.draw do p.V.draw(p, "erased") s.V.outline(s) end # # Set the absolute coordinates of everything on the draw list; # Don't do it for Vline, it is special. # It used to be that if the vidget is a Vpane, # a resize event was sent, so that it would notify its callback. # That "feature" has been commented out in the code below. # procedure resize_Vframe(s, x,y,wid,h) local w, slots resize_Vpane(s, x, y, wid, h) every w := !s.draw do { if (type(w) == "Vline_rec") then w.V.resize(s, w) else s.V.set_abs(s, w) # if type(w) == "Vpane_rec" then # w.V.event(w, -10) } end # # Determine the absolute coordinates of a vdiget based on its parent # frame's absolute coordinates, and the "virtual" coordinates passed # in upon creation. # Allows for the fact that a pane can have relative # position and size contraints intertwined with absolute. # procedure set_abs_Vframe(s, vid) local ax,ay,aw,ah, a, b, w, h, vx, vy, vw, vh w := s.aw; h := s.ah vx := vid.P.x; vy := vid.P.y vw := vid.P.w; vh := vid.P.h ax := s.ax + ( (vx <= -1, w + vx - (\vid.aw | 0)) | (type(vx) == "real", (-1 <= vx < 0, w - vx*w) | (0 < vx <= 1, vx*w) ) | vx ) ay := s.ay + ( (vy <= -1, h + vy - (\vid.ah | 0)) | (type(vy) == "real", (-1 <= vy < 0, h - vy*h) | (0 < vy <= 1, vy*h) ) | vy ) aw := (\vw, (type(vw) == "real", 0 < vw <= 1, vw*w) | vw) | \vid.aw | w ah := (\vh, (type(vh) == "real", 0 < vh <= 1, vh*h) | vh) | \vid.ah | h aw := integer(aw) ah := integer(ah) ## don't let kid be bigger than the frame. if (a := aw + ax) > (b := s.aw + s.ax) then aw -:= (a-b) if (a := ah + ay) > (b := s.ah + s.ay) then ah -:= (a-b) vid.V.resize(vid, ax, ay, aw, ah) end # # Don't erase the vidget if erase is non-&null. # procedure remove_Vframe(s, pane, erase) local new, k new := [] every k := !s.lookup do if k ~=== pane then put(new,k) s.lookup := new new := [] every k := !s.draw do if k ~=== pane then put(new,k) s.draw := new if /erase then VErase(pane) end # # Insert a vidget into a frame. # procedure insert_Vframe(s, pane, x, y, w, h) local wc #defaults /x := 0 /y := 0 /w := \pane.aw /h := \pane.ah pane.P.x := x pane.P.y := y pane.P.w := w pane.P.h := h put(s.draw, pane) if not (image(pane.V.event) ? find("null_proc") ) then put(s.lookup, pane) if (\s.ax, \s.ay, \s.aw, s.ah) then { # is this frame sized yet if (type(pane) == "Vline_rec") then pane.V.resize(s, pane) else s.V.set_abs(s, pane) } end # # Get events, lookup vidget based on (x, y), call its event loop. # procedure event_Vframe(s, e, x, y) local dest if dest := s.V.lookup(s, x, y) then { return dest.V.event(dest, e, x, y) } end # # For every vidget on lookup list, check if (x, y) lie within its # boundaries. Doesn't address overlapping vidgets. # procedure lookup_Vframe(s, x, y) local w every w := !s.lookup do if w.V.inrange(w, x, y) then return w end # # Determine and set the minumum bounding rectangle which encompasses # all vidgets within the frame. Restriction is that all vidgies must have # been inserted with absolute coordinates and sizes. # procedure format_Vframe(self) resize_Vpane(self, , , Vmin_frame_width(self), Vmin_frame_height(self)) end ############################################################################ # Vroot_7h VMS.BCKG9.IPL.GPROCS]VFRAME.ICN;1  frame - # Root of the X-Idol event window demultiplexing recordes. # The root_frame record serves as the root for windows that are # subdivided. ############################################################################ procedure Vroot_frame(params[]) local self, spec_procs static procs initial { procs := Vstd(event_Vroot_frame, draw_Vframe, null_proc, resize_Vroot_frame, inrange_Vpane, init_Vroot_frame, couplerset_Vpane, insert_Vframe, remove_Vframe, lookup_Vframe, set_abs_Vframe) spec_procs := Vstd_dialog( , , format_Vframe) VInit() } self := Vframe_rec ! params[1:2|0] Vwin_check(self.win, "Vroot_frame()") self.uid := Vget_uid() self.V := procs self.F := spec_procs self.P := Vstd_pos() self.V.init(self) return self end procedure init_Vroot_frame(s) s.ax := s.ay := 0 init_Vframe(s) end # # Process events (same as for a frame). Difference, is if we get a resize, # resize all vidgets within, and redraw screen (no lookup performed). # procedure event_Vroot_frame(s,e,x,y) local dest if e === &resize then { s.V.resize(s) return &null } else { if dest:= s.V.lookup(s,x,y) then return dest.V.event(dest,e,x,y) else fail } end # # The window was resized! Well... reconfigure all the absolute # position and sizes for all panes. This benefits relative values # the most. # procedure resize_Vroot_frame(s) s.aw := WAttrib(s.win, "width") s.ah := WAttrib(s.win, "height") resize_Vframe(s, s.ax, s.ay, s.aw, s.ah) s.V.draw(s) end ############################################################################ # Utility procedures for frames. ############################################################################ # # Min--- returns the minimum size of the frame that will encase all # children. NOTE - this can only be determined if all the children # were inserted with absolute co-ords and sizes. I.e. positive and # integral x, y, w, & h. # procedure Vmin_frame_width(s) local max, vid max := 2 every vid := (!s.draw) do if (type(vid) ~== "Vline_rec") then { if type(vid.P.x) == "real" | type(vid.P.w) == "real" | vid.P.x < 0 | vid.P.w < 0 then _Vbomb("attempt to format a frame with non-absolute sized and positioned children") max <:= (vid.P.x + vid.P.w ) } return max end procedure Vmin_frame_height(s) local max, vid max := 2 every vid := (!s.draw) do if (type(vid) ~== "Vline_rec") then { if type(vid.P.y) == "real" | type(vid.P.h) == "real" | vid.P.y < 0 | vid.P.h < 0 then _Vbomb("attempt to format a frame with non-absolute sized and positioned children") max <:= (vid.P.y + vid.P.h ) } return max end *[V9.IPL.GPROCS]VGRID.ICN;1+,H. / 4 -0123KPWO 56`ShA7 A89Jj$GHJ############################################################################ # # File: vgrid.icn # # Subject: Procedures for vidget grids # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ record Vgrid_rec(win, callback, id, aw, ah, rows, cols, Hpos, Vpos, hpad, vpad, ax, ay, uid, P, V) procedure Vgrid(params[]) local self, i, frame, x, y, ins static procs initial procs := Vstd(event_Vgrid, draw_Vgrid, outline_Vpane, resize_Vgrid, inrange_Vpane, init_Vgrid, couplerset_Vgrid) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vgrid_rec ! params[1:8|0] Vwin_check(self.win, "Vgrid()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid aw parameter to Vgrid()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid ah parameter to Vgrid()") if (\self.rows, not numeric(self.rows) ) then _Vbomb("invalid rows parameter to Vgrid()") if (\self.cols, not numeric(self.cols) ) then _Vbomb("invalid cols parameter to Vgrid()") self.V := procs self.P := Vstd_pos() self.uid := Vget_uid() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure init_Vgrid(self) local p self.Hpos := table() self.Vpos := table() /self.aw := 100 /self.ah := 100 /self.rows := 10 /self.cols := 10 p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) return self end procedure draw_Vgrid(self) local i # draw vertical lines every i := 0 to self.cols do DrawLine(self.win, self.ax+self.Hpos[i], self.ay, self.ax+self.Hpos[i], self.ay+self.ah) # draw horizontal lines. every i := 0 to self.rows do DrawLine(self.win, self.ax, self.ay+self.Vpos[i], self.ax+self.aw, self.ay+self.Vpos[i]) end procedure event_Vgrid(self, e) local row, col if \self.callback.locked then fail col := VGetCol(self, &x) row := VGetRow(self, &y) return self.callback.V.set(self.callback, self, [row, col, e]) end procedure resize_Vgrid(self, x, y, w, h) local i resize_Vpane(self, x, y, w, h) self.hpad := 1 <= self.aw / real(self.cols) | 1 self.vpad := 1 <= self.ah / real(self.rows) | 1 every i := 0 to self.cols do self.Hpos[i] := integer (i * self.hpad ) every i := 0 to self.rows do self.Vpos[i] := integer(i * self.vpad ) end procedure VFillGrid(self, row, col) FillRectangle(self.win, self.ax+self.Hpos[col], self.ay+self.Vpos[row], 1 <= self.Hpos[col+1] - self.Hpos[col] | 1, 1 <= self.Vpos[row+1] - self.Vpos[row] | 1 ) end procedure check_Vgrid(self, row, col) end procedure VEraseGrid(self, row, col) EraseArea(self.win, self.ax+self.Hpos[col]+1, self.ay+self.Vpos[row]+1, 1 <= ( self.Hpos[col+1] - self.Hpos[col] - 1) | 1, 1 <= ( self.Vpos[row+1] - self.Vpos[row] - 1) | 1 ) end procedure VGetRow(self, y) local row row := integer( (y - self.ay) / real(self.vpad) ) row := row < 0 | row > self.rows - 1 return row end procedure VGetCol(self, x) local col col := integer( (x - self.ax) / real(self.hpad) ) col := col < 0 | col > self.cols - 1 return col end r*[V9.IPL.GPROCS]VIDGETS.ICN;1+,I./ 4-0123KPWO56૷A7A89Jj$GHJ############################################################################ # # File: vidgets.icn # # Subject: Procedures for vidgets # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ # # Links to basic vidget files needed to use the library. # ############################################################################ link vcoupler link vframe link viface link vpane link vstd 8h VMS.BCKJ9.IPL.GPROCS]VIFACE.ICN;1wI*[V9.IPL.GPROCS]VIFACE.ICN;1+,J./ 4 -0123KPWO56JA7NB89Jj$GHJ############################################################################ # # File: viface.icn # # Subject: Procedures for interfacing vidgets # # Author: Jon Lipp # # Date: May 20, 1994 # ############################################################################ # # Utility procedures in this file: # VDraw() # VErase() # VOutline() # VResize() # VRemove() # VInsert() # VEvent() # VRegister() # VUnregister() # VOpenDialog() # VFormat() # VAddClient() # VToggle() # VUnSet() # VSet() # GetEvents() # ############################################################################ procedure VDraw(vid, code) if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VDraw()") vid.V.draw(vid, code) end procedure VErase(vid) if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VErase()") # PMIcon fix: if type(vid) == "Vline_rec" then _Vbomb("VErase() on a Vline not implemented.") EraseArea(vid.win, vid.ax, vid.ay, vid.aw+1, vid.ah+1) end procedure VOutline(vid) if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VOutline()") vid.V.outline(vid) end procedure VResize(vid) if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VResize()") vid.V.resize(vid) end procedure VRemove(frame, vid, erase) if not (type(frame) ? find("frame") ) then _Vbomb("invalid frame parameter to VRemove()") else if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VRemove()") frame.V.remove(frame, vid, erase) end procedure VInsert(frame, vid, x, y, w, h) if not (type(frame) ? find("frame") ) then _Vbomb("invalid frame parameter to VInsert()") else if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VInsert(): " || image(vid)) else if (\x, not numeric(x) ) then _Vbomb("non-numeric x parameter to VInsert()") else if (\y, not numeric(y) ) then _Vbomb("non-numeric y parameter to VInsert()") else if (\w, not numeric(w) ) then _Vbomb("non-numeric w parameter to VInsert()") else if (\h, not numeric(h) ) then _Vbomb("non-numeric y parameter to VInsert()") frame.V.insert(frame, vid, x, y, w, h) end procedure VEvent(vid, e, x, y) if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VEvent()") return vid.V.event(vid, e, x, y) end ############################################################################ # The following two procedure are only for use with dialog box frames # and menu_frames. # # VRegister is analogous to VInsert, except, it tells the dialog box that # this is an editable field. ############################################################################ procedure VRegister(dialog, vid, x, y, w, h) if not (type(dialog) ? find("dialog_frame") ) then _Vbomb("invalid dialog parameter to VRegister()") else if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VRegister()") else if (\x, not numeric(x) ) then _Vbomb("Non-numeric x parameter to VRegister()") else if (\y, not numeric(y) ) then _Vbomb("Non-numeric y parameter to VRegister()") else if (\w, not numeric(w) ) then _Vbomb("Non-numeric w parameter to VRegister()") else if (\h, not numeric(h) ) then _Vbomb("Non-numeric y parameter to VRegister()") dialog.F.register(dialog, vid, x, y, w, h) end procedure VUnregister(dialog, vid) if not (type(dialog) ? find("dialog_frame") ) then _Vbomb("invalid dialog parameter to VUnregister()") else if not (type(vid) == !Vrecset ) then _Vbomb("invalid vidget parameter to VUnregister()") dialog.F.unregister(dialog, vid) end # # Vopen_dialog # Opens a dialog for input. Returns the list of new objects, or the # original data if "cancel" was picked. # # open a dialog box at (x, y); dialog contains a record of type # 'dialog', data is a list of initial values corresponding to the # objects "registered" with the dialog; default_string is the label # of the control button to press upon hitting a return. # procedure VOpenDialog(dialog, x, y, data, default_string) if not (type(dialog) ? find("dialog_frame") ) then _Vbomb("invalid dialog parameter to VOpenDialog()") /x := (WAttrib(dialog.win, "width") - dialog.aw) / 2 /y := (WAttrib(dialog.win, "height") - dialog.ah) / 2 if not (numeric(x) & numeric(y)) then _Vbomb("invalid x or y parameter passed to VOpenDialog()") /data := [] return \(dialog.F.open_dialog(dialog, x, y, data, default_string)) | data end # # VFormat resizes the frame, and figures out the width and height # automatically, contingent on all vidgets being inserted or registered # with absolute coordinates. # procedure VFormat(frame) if not (type(frame) ? find("frame") ) then _Vbomb("invalid frame parameter to VFormat()") frame["F"].format(frame) end ############################################################################ # The following procedure is only for use with couplers. ############################################################################ procedure VAddClient(coupler, client, caller) if not (type(coupler) ? find("coupler") ) then _Vbomb("invalid coupler parameter to VAddClient()") coupler.V.add_client(coupler, client, caller) end procedure VToggle(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("invalid coupler parameter to VToggle()") coupler.V.toggle(coupler) end procedure VUnSet(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("invalid coupler parameter to VUnSet()") coupler.V.unset(coupler) end procedure VLock(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("invalid coupler parameter to VLock()") coupler.locked := 1 end procedure VUnLock(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("invalid coupler parameter to VUnLock()") coupler.locked := &null end ############################################################################ # VSet sets the vidget | coupler to the value. ############################################################################ procedure VSet(vid, val, code) if type(vid) ? find("coupler") then return (\(\vid).V.set)(vid, , val, code) else if type(vid) == !Vrecset then return (\(\vid).V.set_value)(vid, val, code) else _Vbomb("invalid vidget parameter to VSet()") end ############################################################################ # Event handlers. ############################################################################ procedure GetEvents(root, MissedEvents, AllEvents, ResizeEvents) local e, lrv if /root | not(type(root) ? find("frame") ) then _Vbomb("invalid frame parameter to GetEvents()") repeat { e := Event(root.win) if e === &resize then { (\ResizeEvents)(root, e, &x, &y) root.V.event(root, e) } (\(lrv := root.V.lookup(root, &x, &y)) & lrv.V.event(lrv, e, &x, &y)) | (\MissedEvents)(e, &x, &y) (\AllEvents)(e, &x, &y) 9 VMS.BCKJ9.IPL.GPROCS]VIFACE.ICN;1 } end #*[V9.IPL.GPROCS]VMENU.ICN;1+,K.!/ 4! -0123KPWO"56WB7u*C89Jj$GHJ############################################################################ # # File: vmenu.icn # # Subject: Procedures for vidget menus # # Author: Jon Lipp # # Date: July 12, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vmenu_item # Vmenu_bar_item # Vmenu_frame # Vpull_down_button # # Utility procedures in this file: # Vsub_menu() # Vmenu_bar() # Vpull_down_pick_menu() # Vpull_down() # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vstyle # ############################################################################ link vstyle ############################################################################ # Vmenu_item ############################################################################ record Vmenu_item_rec (win, s, callback, id, aw, ah, menu, ax, ay, uid, P, D, V) procedure Vmenu_item(params[]) local self static procs initial procs := Vstd(event_Vmenu_item, draw_Vmenu_item, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vmenu_item, couplerset_Vmenu_item) self := Vmenu_item_rec ! params self.uid := Vget_uid() if type(\self.callback) == "Vmenu_frame_rec" then { self.menu := self.callback self.callback := self.menu.callback self.s ||:= " >" } ## Init self.D := Vstd_draw(draw_off_twoD, draw_on_twoD) self.P := Vstd_pos() self.D.outline := 1 self.V := procs self.V.init(self) return self end # # A menu item needs to be sized a little smaller than a normal # button, so we steal the 2d init procedure. # procedure init_Vmenu_item(self) local TW, FH, ascent, descent, basey /self.s := "" TW := TextWidth(self.win, self.s) ascent := WAttrib(self.win, "ascent") descent := WAttrib(self.win, "descent") FH := ascent + descent /self.aw := TW + 4 /self.ah := FH + 2 self.aw := 0 < self.aw | 1 self.ah := 0 < self.ah | 1 self.D.basex := (self.aw - TW)/2 basey := 1 + ascent if FH <= 10 then basey := 8 self.D.basey := basey end procedure draw_Vmenu_item(s) s.D.draw_off(s) end procedure couplerset_Vmenu_item(s) s.V.draw(s) end # # This is complicated.... if we drag off to the right while within the # y-range of the menu item, call its submenu *if* one exists. Else # if there is a release not on the menu item, fall out of loop. Else # if released on menu item and there is *no* submenu, make a return # value consisting of the id. Else, continue through loop. # # This will take return value of submenu (if successful choice) and pass # it back up to menu bar item. # procedure event_Vmenu_item(self, e, sub) local rv self.D.draw_on(self) (\self.menu).V.resize(self.menu, self.ax+self.aw, self.ay) show_Vmenu_frame(\self.menu) rv := V_FAIL repeat { if (\self.menu, (&x >= self.ax+self.aw) & (self.ay <= &y <= self.ay+self.ah)) then { rv := self.menu.F.pick(self.menu, e, 1) | &null if \rv ~=== V_DRAGGING & \rv ~=== V_FAIL then rv := (push(\rv, self.uid)) } else if (\self.menu, e === (&lrelease|&mrelease|&rrelease)) then rv := &null else if e === (&lrelease|&mrelease|&rrelease) then rv := [self.uid] else if self.V.inrange(self, &x, &y) then rv := V_DRAGGING if \rv === V_DRAGGING then { e := Event(self.win) if e === "\^s" then until Event(self.win) === (&lpress|&mpress|&rpress) ; rv := V_FAIL } else break } self.D.draw_off(self) hide_Vmenu_frame(\self.menu) if rv === V_FAIL then fail return rv end ############################################################################ # Vmenu_bar_item ############################################################################ procedure Vmenu_bar_item(params[]) local self static procs initial procs := Vstd(event_Vmenu_bar_item, draw_Vmenu_item, outline_Vpane, resize_Vmenu_bar_item, inrange_Vpane, null_proc, couplerset_Vmenu_item) self := Vmenu_item_rec ! params self.uid := Vget_uid() if type(\self.menu) ~== "Vmenu_frame_rec" then _Vbomb("Vmenu_bar_item must be created with a Vmenu_frame") ## Init Vset_style(self, V_2D_NO) self.P := Vstd_pos() self.V := procs self.callback := (\self.menu).callback self.D.init(self) return self end # # Resize ourselves, then tell our submenu to resize itself at the # right location. # procedure resize_Vmenu_bar_item(self, x, y, w, h) resize_Vpane(self, x, y, w, h) (\self.menu).V.resize(self.menu, self.ax, self.ay+self.ah) end # # Process events through a loop, grabbing focus: # If release, fall out. Else, if dragged off bottom, open up submenu. # If dragged any other direction, fall out. # # Take return value ( a list) from submenu, and reference callback tables # to call correct callback for submenu choice made. # procedure event_Vmenu_bar_item(self, e) local rv, callback, i, t, labels if e ~=== &lpress & e ~=== &mpress & e ~=== &rpress then fail # not our event self.D.draw_on(self) show_Vmenu_frame(\self.menu) repeat { if e === (&lrelease|&mrelease|&rrelease) then rv := &null else if self.V.inrange(self, &x, &y) then rv := V_DRAGGING else if (self.ax <= &x <= self.ax+self.aw) & (&y >= self.ay+self.ah) then rv := (\self.menu).F.pick(self.menu, e) if \rv === V_DRAGGING then { e := Event(self.win) rv := &null } else break } hide_Vmenu_frame(\self.menu) self.D.draw_off(self) if \rv === V_FAIL then return &null if \rv then { callback := self.callback labels := [] every i := !rv do { t := callback[i] callback := t[1] put(labels, t[2]) } return (\callback)(self, labels) | labels } return &null end ############################################################################ # Vmenu_frame ############################################################################ record Vmenu_frame_rec(win, callback, aw, ah, id, temp, drawn, lookup, draw, ax, ay, uid, P, F, V) procedure Vmenu_frame(params[]) local self static procs initial { procs := Vstd(event_Vframe, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, null_proc, couplerset_Vpane, insert_Vmenu_frame, null_proc, :U VMS.BCKK[V9.IPL.GPROCS]VMENU.ICN;11! lookup_Vframe, set_abs_Vframe) } self := Vmenu_frame_rec ! params ## Init self.uid := Vget_uid() self.V := procs self.F := Vstd_draw() self.F.pick := pick_Vmenu_frame self.F.format := format_Vmenu_frame self.P := Vstd_pos() init_Vframe(self) self.callback := table() self.temp := open("vmenu", "g", "canvas=hidden") return self end # # Find minimum bounding encompassing frame. At the same time, set # children to be flush against left edge. # procedure format_Vmenu_frame(self, width) local maxwidth, child maxwidth := \width | Vmin_frame_width(self) every child := !self.lookup do { child.P.w := maxwidth } self.V.resize(self, 0, 0, maxwidth, Vmin_frame_height(self)) end # # Open up menu frame. Copy window on temprary binding. # Usually invoked by parent menu item. # procedure show_Vmenu_frame(self) WAttrib(self.temp, "width="||(self.aw+10), "height="||(self.ah+10)) CopyArea(self.win, self.temp, self.ax, self.ay, self.aw+5, self.ah+5, 0, 0) draw_Vframe(self) self.drawn := 1 end # # Hide menu frame. Copy contents of temporary binding back onto window. # Also invoked by parent menu item. # procedure hide_Vmenu_frame(self) CopyArea(self.temp, self.win, 0, 0, self.aw+5, self.ah+5, self.ax, self.ay) self.drawn := &null end # # Basically the event loop for the menu frame. Routes events to the # appropriate menu item. # procedure pick_Vmenu_frame(self, e, sub) local focus, rv /e := -1 if /self.drawn then show_Vmenu_frame(self) rv := V_DRAGGING repeat { focus := self.V.lookup(self, &x, &y) | &null if (e === (&lrelease|&mrelease|&rrelease) & /focus) then fail else if (/sub, &y < self.ay) | (\sub, &x < self.ax) then return V_DRAGGING else if rv := (\focus).V.event(focus, e, sub) then return rv else if (e === "\^s" & /focus) then until Event(self.win) === (&lpress|&mpress|&rpress) ; e := Event(self.win) } end # # Put the entries into the callback table of the frame as such: if the # entry has a submenu, put its callback table and string label in, else # put the callback procedure and string label in. # procedure insert_Vmenu_frame(self, vid, x, y) local s insert_Vframe(self, vid, x, y) s := (type(vid.callback) == "table", vid.s[1:-2]) | vid.s self.callback[\vid.uid] := [vid.callback, s] end ############################################################################ # wrappers for Vsub_menu and Vmwenu_bar ############################################################################ procedure Vsub_menu(w, p[]) local frame, id, name, callback, ypos, item Vwin_check(w, "Vsub_menu()") frame := Vmenu_frame(w) id := ypos := 1 while \(name := pop(p)) do { callback := pop(p) | &null if type(\name) ~== "string" & not numeric(name) then _Vbomb("invalid label passed to Vsub_menu()") image(callback) ? { if ="function" then _Vbomb("Icon function" || tab(0) || "() not allowed as callback from sub_menu item") } item := Vmenu_item(w, name, callback, id) VInsert(frame, item, 1, ypos) id +:= 1 ypos +:= item.ah } VFormat(frame) return frame end procedure Vmenu_bar(p[]) local parent, x, y, ins, frame, id, name, submenu, xpos, item, win if ins := Vinsert_check(p) then { parent := pop(p); x := pop(p); y:= pop(p) } win := pop(p) Vwin_check(win, "Vmenu_bar()") frame := Vframe(win) xpos := id := 1 while name := pop(p) do { submenu := pop(p) | &null if type(\name) ~== "string" & not numeric(name) then _Vbomb("invalid label passed to Vmenu_bar()") if type(\submenu) ~== "Vmenu_frame_rec" then _Vbomb("invalid menu parameter to Vmenu_bar()") item := Vmenu_bar_item(win, name, , id, , , submenu ) VInsert(frame, item, xpos, 1) id +:= 1 xpos +:= item.aw } VFormat(frame) frame.V.outline := null_proc if \ins then VInsert(parent, frame, x, y) return frame end ############################################################################ # Vpull_down_button ############################################################################ record Vpull_down_button_rec (win, callback, id, sz, pd, data, s, style, aw, ah, ax, ay, abx, uid, P, D, V) procedure Vpull_down_button(params[]) local self local frame, x, y, ins static procs initial procs := Vstd(event_Vpull_down_button, draw_Vpull_down_button, outline_Vpane, resize_Vpull_down_button, inrange_Vpane, init_Vpull_down_button, couplerset_Vpull_down_button,,,,, set_value_Vpull_down_button) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vpull_down_button_rec ! params self.uid := Vget_uid() if type(self.pd) ~== "Vmenu_frame_rec" then _Vbomb("Vpull_down_button must be created with a Vpull_down") Vset_style(self, V_2D) self.V := procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vpull_down_button(self) self.s := self.data[1:self.sz|0] self.D.draw_off(self) draw_Vpull_down_button_off(self) end procedure draw_Vpull_down_button_arrow(self) local x, y, sz x := self.ax+self.abx; y := self.ay; sz := self.ah FillPolygon(self.win, x+0.1*sz, y+0.2*sz, x+0.9*sz, y+0.2*sz, x+0.5*sz, y+0.9*sz, x+0.1*sz, y+0.2*sz) end procedure draw_Vpull_down_button_off(self) local x, y x := self.ax; y := self.ay EraseArea(self.win, x+self.abx+1, y+1, self.aw-self.abx-1, self.ah-1) DrawRectangle(self.win, x+self.abx, y, self.aw-self.abx, self.ah) draw_Vpull_down_button_arrow(self) end procedure draw_Vpull_down_button_on(self) FillRectangle(self.win, self.ax+self.abx+1, self.ay+1, self.aw-self.abx, self.ah) WAttrib(self.win, "reverse=on") draw_Vpull_down_button_arrow(self) WAttrib(self.win, "reverse=off") end procedure resize_Vpull_down_button(self, x, y, w, h) resize_Vpane(self, x, y, w, h) self.pd.F.format(self.pd, self.aw) self.pd.V.resize(self.pd, self.ax, self.ay+self.ah) end procedure couplerset_Vpull_down_button(self, name, value) self.D.draw_off(self) end procedure event_Vpull_down_button(self, e) local rv if \self.callback.locked then fail draw_Vpull_down_button_on(self) show_Vmenu_frame(\self.pd) rv := V_DRAGGING repeat { if \e === (&lrelease|&mrelease|&rrelease) then rv := &null else if self.V.inrange(self, &x, &y) then rv := V_DRAGGING else if (self.ax <= &x <= self.ax+self.aw) & (&y >= self.ay+self.ah) then rv := (\self.pd).F.pick(self.pd, e) if \rv === V_DRAGGING then { e := Event(self.win) rv := &null } else break } if rv === V_FAIL then rv := &null draw_Vpull_down_button_off(self) hide_Vmenu_frame(\self.pd) if \rv then { self.data := self.pd.callback[rv[1]][2] self.V.draw(self) self.callback.V.set(self.callback, self, self.data) return self.data } end procedure set_value_Vpull_down_button(self, value) self.data := \value | "" end procedure init_Vpull_down_button(self) local p /self.data := "" self.s := self.data /self.sz := 24 self.aw := WAttrib(self.win, "fwidth")*self.sz + 8 self.ah := WAttrib(self.win, "fheight") self.abx := self.aw # make little arrow box on end. self.aw +:= WAttrib(self.win, "fheight") p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) self.D.init(self;>  hl u $,Z{fp2e3mxq3z?|G|}Jh _O b'h~;Rin\0Og])9~&yA lޓj*Lx4RNVDc].s8MGAc:]~Inig 0<G_1fD)P [ Mk$IU($LQ6h(&R|0zo+) \v'qp*Y%L=)o#eC+*!I/ifge?]E*+Mͧ18([1K87ZNk&o1U8cfv9> i3(W]-<#elm P?c3Pg"4YhEs<~e/?8 q@ -e~}}5QOI muo]I_!XMt9&7;+wwS~c|,!r-c['2^?n_2 m /T,%0q.ed&PI ?)?T1+1&.U& zJO&5Kl*ddHo2pm@(P #)%)F=o9/ t;5Rz_E qh6xlO!0Ikb^z^XGFxVKX,c`*7l6%FWCU7? w 9pb8xIR!LF 3jy1<%q){q `^}:V9Wqaaq5j,<.CSRm4P? R P8<4}gGGZiRZ$f neR/JEg Yp$JsN'y'x4]aqn7xHMض ,@={R/,M4a)GbZ#/2.> 9GMmqQqDO''PB{}2GQ%-0:0N\%Wu f!z3 q^)V6Aw%YWGqJ5?L0wB7Co@dxDZ!uYZ L\>S.ea [~bY^:pE \u^ cA[N o-pG0Ac,f~*x (&#uccGQ^#/,2aC1E)QE)kZ#.`;Zm GG3%hE&gO*se$M7?kvA:8.c(b#+YQk"8aF>)YD3}] o0|gokY{+8iaf9^8swA.g7Q3vSgLUvO% c5#i<\-7/"vIhAWE--%T*'(n/z.dOm}SrG"_65& (w=7b).iUm&rN &U*EgVAru)m(=t"@(t$G1'~py5BSi?IH`|wsB~pLE%xai;VHkCc"#8\+ n:dd~#I wB;luo>|/$>=~$-D^)o'xhm'_6{EzL& tv"=EStE\Y9D/E fZm 4H#d.BG^)|&GPc8L),OdwL=' xux.xA,XN  "L[ 0 WpfVXSPY<x5s ==pbYI!y|Pd6|Tmu mX5i@ Pff +%p:&,p(R2^W*z-e=LL)]yLm8);R 9++67S:&baBN>. H N`' q'N^QAXHayuf^/E& $^U sREMFl+UtJ;cd\2A8v).4[@6|Kj$I7} vU *M`hX _U"d H1]BNfQeDb{x+@ S8L6hg$SYoQ 'y'A}K8G ,fs;*+ ]2 N=@O_EY>dAI,A~yQ+oK.4]n$PbtD/`-2w|c]LGmV+!!zpkmaVlOg4[Sa~Y P1 n! ^H}s-AX(R;uAcaoAsoM; }!xQlZVg;'m<fLO L'P?+]yD=T,>^(8YKE4,H6: AJXTT)/n C)'fARL4G+THCrH\=tH*G _Vi%^xLv,aU wHrY;cZ)bhW#n-uggFjVh")GR3v,4$[9 qHb}S];R'9C`_uz{K+=VV6Et fnh<UxX\{&4n]_NaKoRfDi`JZX~]_W&,Wdd1%f^VNhF%c/bPGa|\I7 bd;4_,g TS0:U=g8|{hE-!<(+24 P102k<(D'9/p2?Q$:?G=#%~1.TBhs/xJ9 iZ)]TX0bec!(@4nf`6r=c'B=~rbh9qP5=,w1m F= k:{\<-Pi[&I6?p8$8J(opx|dlZ @,.x+0kOWT\z/3K=@rQdn t ?TGV7.7mC6,(x#"U|X?=w9v}oA3~}' xHVpt6orgb}~;n9 ma?TdR5/pTu9comhpBx^ M%8 jFz6!I>TOhC|pW+hOTt72 *"']05$i-B Pi`QqV"d|rtno|9+rL"gj:5ip hKn|u%,Fl| b#H3`#v9O>-'Vh LzuScccnW$\ T t>i.%{".2O@YR8)?R,mpU #i!rXlx$4^aCT3oT\rtskny`~' ghG*n(iK% #&x3sn'm15?I7V{lkJ]dp6aY|Y,IcgMz ALF'btg5#0q(H40=?vz)d^"-M':D&x!;@P5}k:!5wu5F@/WY +?s0)H$=:?/J%`eHj)u =T@X_tH;64$u u1SM}GF+u^#0=\`Qu ZA59C\2oq/rsQp!W~0>Fp`:{hxt }n1Z(Bz;_j:htc,4sc 5$")a+|hy=@7]Q>lc/Z==X c _G/q5 V?2oK$5re!B- 2~;"C~+ /}a *u+BJ!Z^Zw_d(K$_-.q0R Du0|G[fu8k\fW ,m2ayf~ J:D|w]Y}O_]''CH# 4vjET m3ix~.L&Owe1p+{(ga415%y@87RQQQ bz_&37^XwV/xr(74'Py 0X/63qFh9VEpI= =1$0`-N*u;A,SL6AZ.xVMI, <2 0;_Bl&yA-%\ gVsh)5d3S(Ma> 6.MC ?"XL>@[O;V[bkh@TZkU0N1SVctCKwdC7c`~SsDM>w 5GY~ Y|lBT(CUI!\XTHO):Q=7x 2uh 1|Q:gVdX@Zo}Z"g q?*0[C /z65g&(LpucXBfU+> -_NZJ^K&E +[ M/`#2X c9LB5 w0ZUexT?}4YlW(^)Dsl +[(B1gZl6fAL $!\_E8+Zva~OM [801{A [1P\WMP]n{*-t[:h $FYyUZ/QX}a]~P.)`"]JmmUK] RREY.[15D ;wQEsRZ1^bYbn Mr*te%H^0qggbeN,%9[(>fMHxKc]wQF9}'?1.sW v\uVrI\M]C:5bENqrPVjUi}B6`Mi;S } /^W@6k \xR/ H:,?EA\]M~Z[ o K. [{ /@pQJ j%oNkd~ 9h FSO_}UiNe/!x%Al2MY&i~\K#'EMS_6.kj4OA_Yr0s=C5%}{P= 3,%[ 6!'2ZI#LMyTM8oWsGM.6,qa5 `{XIOm"N^+@eFg@ z[#z@>i{6Lv{0*2,&Uq H\']4g,@hU.FWS"4@;uJp9P_[UW_nl vTf.e!dWRDN K>NOBBeKKE,3 jl-3B z%o{aG(;zGr')IL o.|KIpFcv@>\ZibCmcYWgP"` 1S' RWO%e; 'D6sXo r_Cfndg&_t+Q"!ta3EDyc ]#gT~>=)v~@CM':EOKR'Xi UlG;`eF@<Hb?" Kk [PRV18r\i]O }."s* ,Q7YQ9Up@LV* R$,cvW e(2oDjYI*%W0{& "ZhjfJ&q^ `m R^(yQJN}v\ .zV( &c8 ;$G,3)\OoBSLg.>[oESIFwn-YF!L%RX_M[E_ g;0'ZQ8r 0sGx K.c4^ `/YA\]DJ T(ko!: :]M:IW6x.L }}!iZ2?^QB QZ,JDp EAyzD5Gc4 IyW. wSo9IN8o!kVlQVC V>M{@Fh.{"NJ+ D2OC5'j:M-EmAFTJP"GIK7UA ]o?59cy6#^ F Q0Q*=*PBWmU kIAGOxCo`-eN9"8r>]0@TDzBz`E_gRnY]C-C^zEj/S%'.$A@GJ?[=&1)yN_{{bK[fRRWM;68p ,Qj9gU24/$>jAWRX\MuC? ^qVLZ "!VyYN4`s9&NqLv; {Uc([<889CE,Fm- ;xo74vnLR]WG[|TwO{3i\AoI4m YN+4g\Sdj/EQ]X:_mi` IXPZD_st =D %GB^23zNPDE a6B QJ=IoZB`1<~O6#+=Lydx;FsO5uC[`9zjQ*lEBO:Nx&N\2e^^Mqxam` t jQr) ?VF k|Rt2AOB,`d%P.d%6PTvJa~+p=8vWz(8V\X8xt6q&0D^iFR 7Fco FEO_#&LDs>eD?<@C9HOaQ'p'{|5Wyc1&1A vo(h}H.zzjPSipV XDZa_  D!`z2|EP(m!~G1brDLR|]=JsXDKOO oY0/o>v(4DKF?G@Q)nV7D+9MT ><$$ !CS|13P88C^L!i2D7$i6 ~zz.M: `j#~ C,k{FR5, W"/940$~CPB&H:Y\W:Vw.Y;" .K=8%b~3tXK%E" WWg0MzjBsQ$Pz# {:^,oc$o@BOfl$ PE"P`48K paM^??y^6h [/wlPtC/8,|&EgBLwN9mg[zQX:890$5sSO[.L)p{x^M|\9XE67oF{I6N<M"Vk.{E4nSUiWYwXVCM|,\ N FpFhqu zx- "D3 5NPK#"]$-yf L3)Rj `~bN^Amq#z.LR /,O0~e4goO6 C(By Li}j;rbRxp7s3d)=1[tw5+CeW6L7S[9L/0tn,v7n'.{l:%6bda:;B8CCNF u `IKCc{QWQ CO6FZB,Vfs:"|@uyS  y$+O>$| N[82bsHaM~(xZ ?zP ac .n5[I-m^GOUI /DRUm%6 sTOY3s?~^VgAM]yf} o Xd}F(D ^yN0x E&CZW[@YA0Y~WVAqJ}Oy.V.[iPs uZo\<}5:cX^ALb$n@*Vz[@t e&:e)8'ATm=Iq62+{eJ?z1cHWD*ymm>PI pVH%Au*\PnWaEh8a adxJQbd+FR 7=a.:_C /EdQX>-FzK TMQl^< hrhlcT}U Su,SKN  [EH# \DVEoM>htm!/D&4hEPU JRQ^`d$?F_6%x? R_RJ3pP$;C>9|>RHgWn.DHM,v8"45]Di%;z\xf;ggr|xTO}a]efS~M0% h`mS#.*zeT:w0{>%*\uvEDl@BG?E'MKY^~7z1'K k/pqHoX bVO{\WDX,<L@Wj :IEeFqUGyK RbN 7p'Xl^B93[rL@k +kW?\?f y{HP  p>TNPlLe%6:=/H%&g U`6<2>PFN`nfl2uUehjry^kCJv"z2)fi} Hu#wma= Zx}8+Ll l:+n(1C3lI a N<`֌ VMS.BCKK[V9.IPL.GPROCS]VMENU.ICN;11!r) self.D.basex := 4 end ############################################################################ # Utilities. ############################################################################ # # Well this is a wrapper for combining a Vpull_down and a # Vpull_down_button. # # Vpull_down_pick_menu([frame, x, y, ] w, s, callback, id, size, centered) # # s - a list of string labels for the entries. # size - is the number of charcters in the data field to be displayed. # centered - non-&null if entries are centered in pull_down. # procedure Vpull_down_pick_menu(params[]) local frame, x, y, ins, pd, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } put(params); put(params); put(params); put(params); Vwin_check(params[1], "Vpull_down_pick_menu()") pd := Vpull_down ! (params[1:3] ||| [\params[6] | &null]) self := Vpull_down_button ! ([params[1]] ||| params[3:6] ||| [pd]) if \ins then VInsert(frame, self, x, y) return self end # # Vpulldown(..) produces a pull-down list, invoked by # # obj.F.pick(obj) # # returns the string value of the object picked. # # p[] is a list of strings to enter into the list; # centered is &null for right justified entries, 1 for centered. # # (This procedure does not support the optional VInsert parameters.) # procedure Vpull_down(win, s, centered) local cv, frame, id, name, style, ypos local max, i, TW, FH, item, string_list Vwin_check(win, "Vpull_down()") if type(s) ~== "list" then _Vbomb("data parameter to Vpull_down must be a list of strings") frame := Vmenu_frame(win) ypos := id := 1 if \centered then { max := 0 every i := !s do max <:= (TextWidth(win, i) + 6) } string_list := copy(s) while name := pop(string_list) do { name := \name | "" item := Vmenu_item(win, name, , name, max) VInsert(frame, item, 1, ypos) id +:= 1 ypos +:= item.ah } VFormat(frame) return frame end (*[V9.IPL.GPROCS]VPANE.ICN;1+,L. / 4 +-0123KPWO 562C7`oC89Jj$GHJ############################################################################ # # File: vpane.icn # # Subject: Procedures for vidget panes # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ # # Vidgets defined in this file: # Vpane # # Utility procedures in this file: # Vnorm2dev() # VnormPlot() # Vplot() # ############################################################################ ############################################################################ # pane - a simple region on the window ############################################################################ record Vpane_rec(win, callback, id, linewidth, aw, ah, ax, ay, uid, P, V) procedure Vpane(params[]) local self, frame, x, y, ins static procs initial procs := Vstd(event_Vpane, draw_Vpane, outline_Vbase_pane, resize_Vpane, inrange_Vpane, init_Vpane, couplerset_Vpane) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vpane_rec ! params[1:7|0] Vwin_check(self.win, "Vpane()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid aw parameter to Vpane()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid ah parameter to Vpane()") if (\self.linewidth, not numeric(self.linewidth) ) then _Vbomb("invalid linewidth parameter to Vpane()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() if \self.linewidth then self.win := Clone(self.win, "linewidth="||self.linewidth) if \ins then VInsert(frame, self, x, y) return self end # # check if (x, y) lie within the bounds of a vidget. # procedure inrange_Vpane(self, x, y) if (/self.ax | /self.ay | /self.aw | /self.ah) then _Vbomb("VResize() not invoked on this vidget") return self.ax <= \x < self.ax + self.aw & self.ay <= \y < self.ay + self.ah end # # Set the absolute position and size fields of a vidget. # procedure resize_Vpane(self, x, y, w, h) self.ax := \x self.ay := \y self.aw := \w self.ah := \h end # # if linewidth is not null, outline this Vpane. # procedure outline_Vbase_pane(self) if \self.linewidth then { outline_Vpane(self) } end # # Draw an outline on the window binding associated with this vidget. # Many vidgets call this procedure. # procedure outline_Vpane(self) DrawRectangle(self.win, self.ax, self.ay, self.aw, self.ah) end # At the very least, tell a Vpane to outline itself. # procedure draw_Vpane(self) self.V.outline(self) end # # If the Vpane has a callback, call (or set) it. Else return the id # field. # procedure event_Vpane(self, e, x, y) local cb cb := self.callback /x := &x /y := &y return { if type(\cb) == "procedure" then # procedure cb(self, e, x, y) else if find("coupler",type(\cb)) then { # coupler if \self.callback.locked then fail cb.V.set(cb, self) } else self.id # return value } end # # If the vidget with this procedure as its couplerset is notified by # a coupler, nothing will happen. # procedure couplerset_Vpane(self) end # # Release the resources associated with the binding on a window. # procedure destruct_Vpane(self) Uncouple(self.win) end # # No init for Vpane. # procedure init_Vpane(self) end ############################################################################ # drawing tools. ############################################################################ # # normalized to device coordinate converter # procedure Vnorm2dev(self, p[]) local ap, i ap := [] while i := pop(p) do { put(ap, self.ax + integer(i * self.aw)) put(ap, self.ay + integer(pop(p) * self.ah)) } return ap end # # draw/fill graphics in normalized coordinates # procedure VnormPlot(self, F, p[]) return F ! push( (Vnorm2dev ! (push(p, self))), self.win) end # # draw/fill graphics in device coordinates # procedure Vplot(self, F, p[]) return F ! push(p, self.win) end #*[V9.IPL.GPROCS]VQUERY.ICN;1+,M. / 4 -0123KPWO 56C7 C89Jj$GHJ############################################################################ # # File: vquery.icn # # Subject: Procedures for window queries # # Author: Jon Lipp # # Date: May 26, 1994 # ############################################################################ # # Utility procedures in this file: Vchoice(), Vinput() # ############################################################################ # # Requires: Version 9 graphics # ###############################################################="? VMS.BCKM9.IPL.GPROCS]VQUERY.ICN;1 9############# # # Links: vidgets, vbuttons, vtext # ############################################################################ link vidgets, vbuttons, vtext procedure Vchoice(str, buttons[]) local win, root, t, u, w, b, i, x, y, rv static wpad, hwpad static temp, PAD, WINX, WINY initial { temp := open("vchoice", "g", "canvas=hidden") PAD := integer(WAttrib(temp, "fheight") + 10) WINX := integer(WAttrib(temp, "displaywidth") / 2) WINY := integer(WAttrib(temp, "displayheight") / 2) wpad := 30 hwpad := wpad/2 } if *buttons = 0 then buttons := [" Yes ", " No "] t := TextWidth(temp, str) u := 0 every b := !buttons do u +:= TextWidth(temp, \b) + 13 w := ((u > t, u) | t) + wpad win := vquery_open_window("choose", WINX-w/2, WINY-PAD, w, 2*PAD+wpad) root := Vroot_frame(win) VResize(root) Vmessage(root, hwpad + (w-wpad-t)/2, hwpad, win, str) x := hwpad + (w-wpad-u)/2; y := -hwpad button_pos := table() every i := 1 to *buttons do { t := Vbutton(root, x, y, win, buttons[i], , i) x +:= t.aw+5 button_pos[i] := xywh_rec(t.ax-2, t.ay-2, t.aw+4, t.ah+4) } VDraw(root) def_button := 1 old := button_pos[def_button] DrawRectangle(win, old.x, old.y, old.w, old.h) repeat { rv := &null case event := Event(win) of { -10: next "\r": { rv := def_button break } "\t" : { WAttrib(win, "drawop=reverse") DrawRectangle(win, old.x, old.y, old.w, old.h) def_button +:= 1 def_button := (def_button > *buttons, 1) old := button_pos[def_button] WAttrib(win, "drawop=copy") DrawRectangle(win, old.x, old.y, old.w, old.h) } default : { rv := VEvent(root, event, &x, &y) (\rv, break) } } # end case } close(win) return rv end record xywh_rec(x, y, w, h) procedure Vinput(str, def_value) local win, root, t, u, w, b, i, x, y, rv static temp, PAD, WINX, WINY, FW, VTEXT_W static wpad, hwpad, ID_OK, ID_CANCEL initial { temp := WOpen("canvas=hidden") PAD := integer(WAttrib(temp, "fheight") + 10) WINX := integer(WAttrib(temp, "displaywidth") / 2) WINY := integer(WAttrib(temp, "displayheight") / 2) FW := integer(WAttrib(temp, "fwidth")) wpad := 30 hwpad := wpad/2 ID_OK := -11 ID_CANCEL := -12 VTEXT_W := 20 } /str := "" /def_value := "" buttons := [" Ok ", "Cancel"] v := FW * VTEXT_W + 8 t := TextWidth(temp, str) u := 0 every b := !buttons do u +:= TextWidth(temp, b) + 13 w := vquery_maximum(t, u, v) + wpad win := vquery_open_window("choose", WINX-w/2, WINY-PAD, w, 3*PAD+wpad) root := Vroot_frame(win) VResize(root) t := Vmessage(root, hwpad + (w-wpad-t)/2, hwpad, win, str) input_vidget := Vtext(root, hwpad+(w-wpad-v)/2, hwpad+t.ah+5, win, "\\="||def_value , , , VTEXT_W) x := hwpad + (w-wpad-u)/2; y := -hwpad ok := Vbutton(root, x, y, win, buttons[1], , ID_OK) x +:= ok.aw+5 cancel := Vbutton(root, x, y, win, buttons[2], , ID_CANCEL) button_pos := table() button_pos[ID_OK] := xywh_rec(ok.ax-2, ok.ay-2, ok.aw+4, ok.ah+4) button_pos[ID_CANCEL] := xywh_rec(cancel.ax-2, cancel.ay-2, cancel.aw+4, cancel.ah+4) VDraw(root) def_button := ID_OK old := button_pos[def_button] DrawRectangle(win, old.x, old.y, old.w, old.h) repeat { lrv := rv := &null case event := Event(win) of { -10 : next "\r" : { rv := def_button break } "\t": { WAttrib(win, "drawop=reverse") DrawRectangle(win, old.x, old.y, old.w, old.h) def_button := (def_button = ID_OK, ID_CANCEL) | ID_OK old := button_pos[def_button] WAttrib(win, "drawop=copy") DrawRectangle(win, old.x, old.y, old.w, old.h) } default: { lrv := root.V.lookup(root, &x, &y) /lrv := input_vidget rv := (lrv).V.event(lrv, event, &x, &y) if rv === (ID_OK | ID_CANCEL) then break } } # end case } close(win) return (rv = ID_OK, input_vidget.data) | &null end procedure vquery_maximum(l[]) return sort(l)[-1] end procedure vquery_open_window(title, x, y, w, h) local win /x := 50; /y := 50; /w := 400; /h := 400 win := open(title, "g", "pos="||x||","||y, "width="||w, "height="||h) | _Vbomb("couldn't open window") return win end &*[V9.IPL.GPROCS]VRADIO.ICN;1+,N./ 4u-0123KPWO56[C7jD89Jj$GHJ ############################################################################ # # File: vradio.icn # # Subject: Procedures for radio buttons # # Author: Jon Lipp # # Date: July 12, 1994 # ############################################################################ # # Vidgets defined in this file: # Vradio_entry # Vradio_frame # # Utility procedures in this file: # Vradio_buttons() # Vvert_radio_buttons() # Vhoriz_radio_buttons() # init_format_Vrb() # format_Vradio_frame() # ############################################################################ link vstyle ############################################################################ # Vradio - the radio button. ############################################################################ record Vradio_entry_rec (win, s, callback, id, style, aw, ah, don, ax, ay, uid, P, D, V) # # Creation procedure. # procedure Vradio_entry(params[]) local self static procs initial procs := Vstd(event_Vradio_entry, draw_Vradio_entry, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vradio_entry, couplerset_Vradio_entry) self := Vradio_entry_rec ! params self.uid := Vget_uid() Vset_style(self, self.style) self.V := procs self.P := Vstd_pos() self.V.init(self) return self end procedure init_Vradio_entry (self) local p if /self.callback then _Vbomb("must pass a coupler variable to a Vradio_entry button") self.D.init(self) end # # Draw the radio button. If coupler's value is this id, draw "on". # procedure draw_Vradio_entry(self) if self.callback.value === self.id then { self.D.draw_on(self) self.don := 1 } else { self.D.draw_off(self) self.don := &null } end # # The coupler notified us, turn "off". # procedure couplerset_Vradio_entry(self) self.D.draw_off(self) self.don := &null end # # If first time in this button, set coupler, draw "on". # If mouse releases on me, return my own record structure. # procedure event_Vradio_entry(self, e) if self.callback.value ~=== self.id | /self.don then { self.callback.V.set(self.callback, self, self.id) self.D.draw_on(self) self.don := 1 } if \e === (&lrelease|&mrelease|&rrelease) then return self end ############################################################################ # Vradio_frame ############################################################################ record Vradio_frame_rec(win, cv, callback, id, aw, ah, data, lookup,>$t VMS.BCKN9.IPL.GPROCS]VRADIO.ICN;1 draw, ax, ay, uid, P, V) # # Creation procedure. # procedure Vradio_frame(params[]) local self, p static procs initial { procs := Vstd(event_Vradio_frame, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, init_Vframe, couplerset_Vpane, insert_Vframe, null_proc, lookup_Vframe, set_abs_Vframe, set_value_Vradio_frame) } self := Vradio_frame_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.V.init(self) p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) return self end # # Distribute mouse event to proper radio button. If returns # a value, (mouse released) notify callbacks, return text label # of radio button selected. # procedure event_Vradio_frame(self, e, x, y) local focus, rv if \self.callback.locked then fail if e ~=== &lpress & e ~=== &mpress & e ~=== &rpress then fail focus := self.V.lookup(self, x, y) (\focus).V.event(focus, e) repeat { e := Event(self.win) if e === "\^s" then until Event(self.win) === (&lpress|&mpress|&rpress) ; if self.V.inrange(self, &x, &y) then focus := self.V.lookup(self, &x, &y) if rv := (\focus).V.event(focus, e) then { self.data := rv.s self.callback.V.set(self.callback, rv, rv.s) return rv.s } } end # # Set the radio frame according to string label passed in. Match with # string label of a button. Null sets to no button. # procedure set_value_Vradio_frame(self, value) local old, kid, id, s, k if (/value | *value = 0 | value === V_DUMMY_ID) then { kid := &null id := V_DUMMY_ID s := "" } else { kid := self.cv.curr_id id := self.cv.value s := self.data every (k := !self.lookup | fail) do if value === k.s then { id := k.id kid := k s := value break } } old := self.cv.curr_id self.cv.curr_id := kid self.cv.value := id self.data := s self.callback.V.set(self.callback, self, self.data) (\old).D.draw_off(old) # clear current button (\kid).D.draw_on(kid) # set new button return end ############################################################################ # Vradio_buttons - # Construct radio buttons. Parameters: # w - window, proc - the callback procedure, # s[] - a list of button labels. ############################################################################ procedure Vradio_buttons(params[]) return Vvert_radio_buttons ! params end # # params: (w, s, callback, id, style) # procedure Vvert_radio_buttons(params[]) local frame, x, y, ins, win, s, callback, id, style local rb_frame, max, cv, i, rb, first, uncentered if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } win := params[1] s := params[2] callback := params[3] id := params[4] style := params[5] uncentered := params[6] Vwin_check(win, "Vradio_buttons()") if type(s) ~== "list" then _Vbomb("data parameter to Vradio_buttons must be a list of strings") cv := Vmenu_coupler() rb_frame := Vradio_frame(win, cv, callback, id) if /uncentered then { max := 0 every i := !s do max <:= TextWidth(win, i) max +:= 8 } if \style == (V_CIRCLE | V_CHECK | V_CHECK_NO | V_CIRCLE_NO) then max +:= 4 + WAttrib(win, "fheight") every i := 1 to *s do { rb := Vradio_entry(win, s[i], cv, i, style, max) VInsert(rb_frame, rb, 0, (i-1)*rb.ah) } init_format_Vrb(rb_frame) format_Vradio_frame(rb_frame) if \ins then VInsert(frame, rb_frame, x, y) return rb_frame end procedure Vhoriz_radio_buttons(params[]) local frame, x, y, ins, win, s, callback, id, style, hpos local rb_frame, max, cv, i, rb, first if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } win := params[1] s := params[2] callback := params[3] id := params[4] style := params[5] Vwin_check(win, "Vradio_buttons()") if type(s) ~== "list" then _Vbomb("data parameter to Vradio_buttons must be a list of strings") cv := Vmenu_coupler() rb_frame := Vradio_frame(win, cv, callback, id) hpos := 0 every i := 1 to *s do { rb := Vradio_entry(win, s[i], cv, i, style) VInsert(rb_frame, rb, hpos, 0) hpos +:= rb.aw } init_format_Vrb(rb_frame) rb_frame.V.resize(rb_frame, 0, 0, Vmin_frame_width(rb_frame), Vmin_frame_height(rb_frame)) if \ins then VInsert(frame, rb_frame, x, y) return rb_frame end # # Set to no radio button selected, format size of frame. # procedure init_format_Vrb(rb_frame) rb_frame.cv.value := V_DUMMY_ID rb_frame.cv.curr_id := &null rb_frame.data := "" end # # Get size of frame based on entries. # procedure format_Vradio_frame(self, width) local maxwidth, child maxwidth := \width | Vmin_frame_width(self) every child := !self.lookup do { child.P.w := maxwidth } self.V.resize(self, 0, 0, maxwidth, Vmin_frame_height(self)) end *[V9.IPL.GPROCS]VSCROLL.ICN;1+,O.*/ 4*(-0123KPWO+56 rD7LE89Jj$GHJ############################################################################ # # File: vscroll.icn # # Subject: Procedures for scrollbars # # Author: Jon Lipp # # Date: July 12, 1994 # ############################################################################ # # Vidgets defined in this file: # Vup_arrow # Vdown_arrow # Vright_arrow # Vleft_arrow # Vvthumb # Vhthumb # Vscrollbar_frame # # Utility procedures in this file: # Vvert_scrollbar() # Vhoriz_scrollbar() # reformat_Vhthumb() # reformat_Vvthumb() # Vreformat_vscrollbar() # Vreformat_hscrollbar() # VReformat() # ############################################################################ ############################################################################ # arrow procedures ############################################################################ procedure event_Varrow(s,e) local c, prev, new if \s.callback.locked then fail if e === (&lpress|&mpress|&rpress) then { WAttrib(s.win, "reverse=on") s.V.draw(s) WAttrib(s.win, "reverse=off") s.callback.V.set(s.callback, s, prev := press_Varrow(s)) delay(200) while (*Pending(s.win) = 0) | (Event(s.win) === (&ldrag|&mdrag|&rdrag)) do { new := press_Varrow(s) if new ~= prev then s.callback.V.set(s.callback, s, prev := new) delay(40) } s.V.draw(s) return \(s.callback.value) } end procedure draw_Varrow(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) VnormPlot ! ([s, FillPolygon] ||| ?U0- VMS.BCKO[V9.IPL.GPROCS]VSCROLL.ICN;1*/s.pnts) s.V.outline(s) end procedure press_Varrow(s) return s.incop(s.callback.value, s.callback.inc) end procedure init_Varrow(s) if /s.aw then _Vbomb("must specify a size for a Varrow") /s.ah := s.aw s.id := V_ARROW end ############################################################################ # down, up, left, right arrows. ############################################################################ record Varrow_rec(win, callback, aw, ah, rev, incop, pnts, id, ax, ay, uid, P, V) procedure Vmake_arrow(params[]) local frame, x, y, ins, self, init_proc init_proc := pop(params) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Varrow_rec ! params[1:6|0] self.uid := Vget_uid() self.V := Vstd(event_Varrow, draw_Varrow, outline_Vpane, resize_Vpane, inrange_Vpane, init_proc, couplerset_Vpane) self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure Vup_arrow(params[]) push (params, init_Vup_arrow) return Vmake_arrow ! params end procedure Vdown_arrow(params[]) push (params, init_Vdown_arrow) return Vmake_arrow ! params end procedure Vleft_arrow(params[]) push (params, init_Vleft_arrow) return Vmake_arrow ! params end procedure Vright_arrow(params[]) push (params, init_Vright_arrow) return Vmake_arrow ! params end procedure init_Vdown_arrow(s) s.incop := (\s.rev, proc("-", 2)) | proc("+", 2) s.pnts := [.5, .8, .8, .2, .2, .2, .5, .8] init_Varrow(s) end procedure init_Vup_arrow(s) s.incop := (\s.rev, proc("+", 2)) | proc("-", 2) s.pnts := [.5, .2, .8, .8, .2, .8, .5, .2] init_Varrow(s) end procedure init_Vright_arrow(s) s.incop := (\s.rev, proc("-", 2)) | proc("+", 2) s.pnts := [.2, .2, .8, .5, .2, .8, .2, .2] init_Varrow(s) end procedure init_Vleft_arrow(s) s.incop := (\s.rev, proc("+", 2)) | proc("-", 2) s.pnts := [.8, .2, .8, .8, .2, .5, .8, .2] init_Varrow(s) end ############################################################################ # Vvthumb ############################################################################ record Vthumb_rec (win, callback, id, aw, ah, win_sz, tot_sz, discont, ax, ay, uid, P, S, V) procedure Vvthumb(params[]) local frame, x, y, ins, self static procs initial procs := Vstd(event_Vvthumb, draw_Vvthumb, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vvthumb, couplerset_Vvthumb,,,,,set_value_Vvthumb) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vthumb_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.S.type := 1 self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end # # debugging statement-- # # write("draw: val ", val, " cv value ", s.callback.value, " cv min ", # s.callback.min, " ws ", s.ws, " cv range ", s.cv_range) # procedure draw_Vvthumb(s) local val s.S.drawn := 1 s.V.outline(s) DrawRectangle(s.win, s.ax+s.S.sp, s.ay, s.S.sw, s.ah) val := integer((s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range ) if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 s.S.oldpos := val FillRectangle(s.win, s.ax+2, s.ay+val, s.S.tw+1, s.S.th+1) end procedure event_Vvthumb(s, e) local value, offset if \s.callback.locked then fail # s.old_th := &null if e === (&lpress|&mpress|&rpress) then { offset := (s.S.oldpos < &y-s.ay < s.S.oldpos+s.S.th, &y-(s.S.oldpos+s.ay)) | ( s.S.oldpos+s.S.th <= &y-s.ay, s.S.th-1) | 0 until e === (&lrelease|&mrelease|&rrelease) do { value := ((&y - offset - s.ay-1)/(0 ~= s.S.ws)) * s.S.cv_range | 0 if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.S.frame.data := s.callback.value update_Vvthumb(s) e := Event(s.win) } if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return \(s.callback.value) } end procedure update_Vvthumb(s) local val, op, tw, th, sw, sp val := integer((s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range) if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 op := s.S.oldpos; tw := s.S.tw; th := s.S.th sp := s.S.sp; sw := s.S.sw if op < val < op + th then { EraseArea(s.win, s.ax+2, s.ay+op, tw+1, val-op+1) DrawSegment(s.win, s.ax+sp, s.ay+op, s.ax+sp, s.ay+val, s.ax+sp+sw, s.ay+op, s.ax+sp+sw, s.ay+val) FillRectangle(s.win, s.ax+2, s.ay+op+th, tw+1, val-op+1) } else if op-th < val < op then { EraseArea(s.win, s.ax+2, s.ay+val+th, tw+1, op-val+1) DrawSegment(s.win, s.ax+sp, s.ay+val+th, s.ax+sp, s.ay+op+th+1, s.ax+sp+sw, s.ay+val+th, s.ax+sp+sw, s.ay+op+th+1) FillRectangle(s.win, s.ax+2, s.ay+val, tw+1, op-val+1) } else if op ~= val then { EraseArea(s.win, s.ax+2, s.ay+op, tw+1, th+1) DrawSegment(s.win, s.ax+sp, s.ay+op, s.ax+sp, s.ay+op+th+1, s.ax+sp+sw, s.ay+op, s.ax+sp+sw, s.ay+op+th+1) FillRectangle(s.win, s.ax+2, s.ay+val, tw+1, th+1) } s.S.oldpos := val end procedure set_value_Vvthumb(s, value) couplerset_Vvthumb(s, , value) end procedure couplerset_Vvthumb(s, caller, value) value := numeric(value) | s.callback.min if (\caller).id === V_ARROW then caller := s else if value === s.callback.value then fail s.S.frame.data := s.callback.value if \s.S.drawn then update_Vvthumb(s) end procedure init_Vvthumb(s) if /s.aw | /s.ah then _Vbomb("must specify width and height for Vvthumb") if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vvthumb requires a coupler variable callback") s.S.sw := 3 s.S.sp:= (s.aw - s.S.sw) / 2 s.S.tw := s.aw - 4 \s.win_sz <:= 0 if /s.win_sz then s.S.th := s.S.tw-1 else s.S.th := ( s.S.tw < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.ah) ) | s.S.tw-1 s.S.ws := 0 < real(s.ah - s.S.th - 2) | 0 s.S.cv_range := (0 < s.callback.max - s.callback.min | 1.0) end ############################################################################ # Vhthumb ############################################################################ procedure Vhthumb(params[]) local frame, x, y, ins, self static procs initial procs := Vstd(event_Vhthumb, draw_Vhthumb, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vhthumb, couplerset_Vhthumb,,,,,set_value_Vhthumb) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vthumb_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vhthumb(s) local val s.S.drawn := 1 s.V.outline(s) DrawRectangle(s.win, s.ax+0, s.ay+s.S.sp, s.aw, s.S.sw) val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 s.S.oldpos := val FillRectangle(s.win, s.ax+val, s.ay+2, s.S.tw+1, s.S.th+1) end procedure event_Vhthumb(s, e) local value, offset if \s.callb@O VMS.BCKO[V9.IPL.GPROCS]VSCROLL.ICN;1*back.locked then fail if e === (&lpress|&mpress|&rpress) then { offset := (s.S.oldpos < &x-s.ax < s.S.oldpos+s.S.tw, &x-(s.S.oldpos+s.ax)) | ( s.S.oldpos+s.S.tw <= &x-s.ax, s.S.tw-1) | 0 until e === (&lrelease|&mrelease|&rrelease) do { value := ((&x - offset - s.ax-1)/(0 ~= s.S.ws)) * s.S.cv_range | 0 if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.S.frame.data := s.callback.value update_Vhthumb(s) e := Event(s.win) } if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return \(s.callback.value) } end procedure update_Vhthumb(s) local val, op, tw, th, sw, sp val := integer((s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range) if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 op := s.S.oldpos; tw := s.S.tw; th := s.S.th sp := s.S.sp; sw := s.S.sw if op < val < op + tw then { EraseArea(s.win, s.ax+op, s.ay+2, val-op+1, th+1) DrawSegment(s.win, s.ax+op, s.ay+sp, s.ax+val, s.ay+sp, s.ax+op, s.ay+sp+sw, s.ax+val, s.ay+sp+sw) FillRectangle(s.win, s.ax+op+tw, s.ay+2, val-op+1, th+1) } else if op-tw < val < op then { EraseArea(s.win, s.ax+val+tw, s.ay+2, op-val+1, th+1) DrawSegment(s.win, s.ax+val+tw, s.ay+sp, s.ax+op+tw+1, s.ay+sp, s.ax+val+tw, s.ay+sp+sw, s.ax+op+tw+1, s.ay+sp+sw) FillRectangle(s.win, s.ax+val, s.ay+2, op-val+1, th+1) } else if op ~= val then { EraseArea(s.win, s.ax+op, s.ay+2, tw+1, th+1) DrawSegment(s.win, s.ax+op, s.ay+sp, s.ax+op+tw+1, s.ay+sp, s.ax+op, s.ay+sp+sw, s.ax+op+tw+1, s.ay+sp+sw) FillRectangle(s.win, s.ax+val, s.ay+2, tw+1, th+1) } s.S.oldpos := val end procedure set_value_Vhthumb(s, value) couplerset_Vhthumb(s, s, value) end procedure couplerset_Vhthumb(s, caller, value) value := numeric(value) | s.callback.min if (\caller).id === V_ARROW then caller := s else if value === s.callback.value then fail s.S.frame.data := s.callback.value if \s.S.drawn then update_Vhthumb(s) end procedure init_Vhthumb(s) if /s.aw | /s.ah then _Vbomb("must specify width and height for Vhthumb") if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vhthumb requires a coupler variable callback") s.S.sw := 3 s.S.sp := (s.ah - s.S.sw) / 2 s.S.th := s.ah - 4 \s.win_sz <:= 0 if /s.win_sz then s.S.tw := s.S.th-1 else s.S.tw := ( s.S.th < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.aw) ) | s.S.th-1 s.S.ws := 0 < real(s.aw - s.S.tw - 2) | 0 s.S.cv_range := (0 < s.callback.max - s.callback.min | 1.0) end ############################################################################ # Vscrollbar_frame ############################################################################ record Vscrollbar_frame_rec(win, callback, id, aw, ah, lookup, draw, uid, data, thumb, ax, ay, P, V) procedure Vscrollbar_frame(params[]) local self, procs procs := Vstd(event_Vframe, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, init_Vframe, couplerset_Vpane, insert_Vframe, remove_Vframe, lookup_Vframe, set_abs_Vframe) self := Vscrollbar_frame_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.V.init(self) return self end # # These are the middle-man procedures between the scrollbar frame # and the thumb. # procedure couplerset_Vhscrollbar(s, caller, value) couplerset_Vhthumb(s.thumb, caller, value) end procedure set_value_Vhscrollbar(s, value) set_value_Vhthumb(s.thumb, value) end procedure couplerset_Vvscrollbar(s, caller, value) couplerset_Vvthumb(s.thumb, caller, value) end procedure set_value_Vvscrollbar(s, value) set_value_Vvthumb(s.thumb, value) end ############################################################################ # Vertical scrollbar ############################################################################ procedure Vvert_scrollbar(params[]) local frame, x, y, ins, t, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vmake_vscrollbar ! params self.uid := Vget_uid() if \ins then VInsert(frame, self, x, y) return self end procedure Vmake_vscrollbar(win, callback, id, length, width, min, max, inc, win_sz, discont) local cv, cb, frame, up, down, thumb, tot_sz local r, rev, in_max Vwin_check(win, "Vvert_scrollbar()") if (\win_sz, not numeric(win_sz) | win_sz < 0 ) then _Vbomb("negative or non-numeric window_size parameter to Vvert_scrollbar()") if (\inc, not numeric(inc) | inc < 0 ) then _Vbomb("negative or non-numeric increment parameter to Vvert_scrollbar()") if (\length, not numeric(length) ) then _Vbomb("invalid length parameter to Vvert_scrollbar()") if (\width, not numeric(width) ) then _Vbomb("invalid width parameter to Vvert_scrollbar()") /width := 15 /min := 0 /max := 1.0 rev := 1 if max < min then { max :=: min; rev := &null } in_max := max max -:= (\win_sz | 0) max <:= min tot_sz := 0 < abs(in_max-min) | 1 r := (type(min|max) == "real", 1) if (not numeric(\inc) ) | /inc then inc := 0.1*abs(max-min) (/r, inc := integer(inc), inc <:= 1) cv := Vrange_coupler(min, max, , inc) frame := Vscrollbar_frame(win, cv, id, width, length) Vup_arrow(frame, 0, 0, win, cv, width, width, rev) thumb := Vvthumb(frame, 0, width, win, cv, id, width, length - 2*width, win_sz, tot_sz, discont) Vdown_arrow(frame, 0, width+thumb.ah, win, cv, width, width, rev) thumb.S.rev := rev cv.V.add_client(cv, thumb) add_clients_Vinit(cv, callback, thumb) thumb.S.frame := frame frame.thumb := thumb frame.V.couplerset := couplerset_Vvscrollbar frame.V.set_value := set_value_Vvscrollbar return frame end ############################################################################ # Horizontal scrollbar ############################################################################ procedure Vhoriz_scrollbar(params[]) local frame, x, y, ins, t, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vmake_hscrollbar ! params self.uid := Vget_uid() if \ins then VInsert(frame, self, x, y) return self end procedure Vmake_hscrollbar(win, callback, id, length, width, min, max, inc, win_sz, discont) local cv, cb, frame, up, down, thumb, tot_sz local r, rev, in_max Vwin_check(win, "Vhoriz_scrollbar().") if (\win_sz, not numeric(win_sz) | win_sz < 0 ) then _Vbomb("negative or non-numeric window_size parameter to Vhoriz_scrollbar()") if (\inc, not numeric(inc) | inc < 0 ) then _Vbomb("negative or non-numeric increment parameter to Vhoriz_scrollbar()") if (\length, not numeric(length) ) then _Vbomb("invalid length parameter to Vhoriz_scrollbar()") if (\width, not numeric(width) ) then _Vbomb("invalid width parameter to Vhoriz_scrollbar()") /width := 15 /min := 0 /max := 1.0 if max < min then {max :=: min; rev := 1 } in_max := max max -:= (\win_sz | 0) max <:= min tot_sz := 0 < abs(in_max-min) | 1 r := (type(min|max) == "reaAQ VMS.BCKO[V9.IPL.GPROCS]VSCROLL.ICN;1*q"l", 1) if (not numeric(\inc) ) | /inc then inc := 0.1*abs(max-min) (/r, inc := integer(inc), inc <:= 1) cv := Vrange_coupler(min, max, , inc) frame := Vscrollbar_frame(win, cv, id, length, width) Vleft_arrow(frame, 0, 0, win, cv, width, width, rev) thumb := Vhthumb(frame, width, 0, win, cv, id, length - 2*width, width, win_sz, tot_sz, discont) Vright_arrow(frame, width+thumb.aw, 0, win, cv, width, width, rev) thumb.S.rev := rev cv.V.add_client(cv, thumb) add_clients_Vinit(cv, callback, thumb) thumb.S.frame := frame frame.thumb := thumb frame.V.couplerset := couplerset_Vhscrollbar frame.V.set_value := set_value_Vhscrollbar return frame end ############################################################################ # reformatting procedures. Will just reformat width and length. # (Aug 6) ############################################################################ procedure reformat_Vvthumb(s, length, width) s.P.w := s.aw := \width s.P.h := s.ah := \length s.S.sp := (s.aw - s.S.sw) / 2 s.S.tw := s.aw - 4 if /s.win_sz then s.S.th := s.S.tw-1 else s.S.th := ( s.S.tw < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.ah) ) | s.S.tw-1 s.S.ws := 0 < real(s.ah - s.S.th - 2) | 0 end procedure reformat_Vhthumb(s, length, width) s.P.w := s.aw := length s.P.h := s.ah := width s.S.sp := (s.ah - s.S.sw) / 2 s.S.th := s.ah - 4 if /s.win_sz then s.S.tw := s.S.th-1 else s.S.tw := ( s.S.th < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.aw) ) | s.S.th-1 s.S.ws := 0 < real(s.aw - s.S.tw - 2) | 0 end procedure Vreformat_vscrollbar(self, length, width) local up, down, thumb /width := self.aw /length := self.ah self.aw := self.P.w := width self.ah := self.P.h := length up := self.lookup[1] thumb := self.lookup[2] down := self.lookup[3] VRemove(self, up, 1) VRemove(self, thumb, 1) VRemove(self, down, 1) down.aw := down.ah := up.aw := up.ah := down.P.w := down.P.h := up.P.w := up.P.h := width reformat_Vvthumb(thumb, length -2*width, width) VInsert(self, up, 0, 0) VInsert(self, thumb, 0, width) VInsert(self, down, 0, width + thumb.ah) end procedure Vreformat_hscrollbar(self, length, width) local left, right, thumb /width := self.ah /length := self.aw self.aw := self.P.w := length self.ah := self.P.h := width left := self.lookup[1] thumb := self.lookup[2] right := self.lookup[3] VRemove(self, left, 1) VRemove(self, thumb, 1) VRemove(self, right, 1) left.aw := left.ah := right.aw := right.ah := left.P.w := left.P.h := right.P.w := right.P.h := width reformat_Vhthumb(thumb, length -2*width, width) VInsert(self, left, 0, 0) VInsert(self, thumb, width, 0) VInsert(self, right, width + thumb.aw) end ############################################################################ # interface procedure for Vreformat ############################################################################ procedure VReformat(scrollbar, length, width) if /scrollbar | type(scrollbar) ~== "Vscrollbar_frame_rec" then _Vbomb("invalid scrollbar parameter to VReformat()") if \(scrollbar.thumb.S.type) then Vreformat_vscrollbar(scrollbar, length, width) else Vreformat_hscrollbar(scrollbar, length, width) end #*[V9.IPL.GPROCS]VSETUP.ICN;1+,P./ 4%-0123KPWO56gWE7E89Jj$GHJ############################################################################ # # File: vsetup.icn # # Subject: Procedures for vidget application setup # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # vsetup(win, cbk, wlist) initializes a set of widgets according to # a list of specifications created by the interface editor VIB. # # win can be an existing window, a list of command arguments to be # passed to Window(), or null. In the latter two cases a new window # is opened. # # cbk is a default callback routine to be used when no callback is # specified for a particular vidget. This file includes the callback # procedure vecho(), which just echoes its arguments and is used by # VIB for prototyping and in newly constructed applications. # # wlist is a list of specifications; the first must be the Sizer and # the last may be null. Each specification is itself a list consisting # of a specification string, a callback routine, and an optional list # of additional specifications. Specification strings vary by vidget # type, but the general form is "ID:type:style:n:x,y,w,h:label". # # vsetup returns a table of vidgets indexed by vidget ID. # The root vidget is included with the ID of "root". # ############################################################################ # # Links: graphics, # vidgets, vslider, vmenu, vscroll, vtext, vbuttons, vradio # ############################################################################ link graphics link vidgets link vslider link vmenu link vscroll link vtext link vbuttons link vradio record VS_rec(var, typ, sty, num, x, y, w, h, lbl, cbk, etc) ## vsetup(win, cbk, wlist) -- set up vidgets and return table of handles # # win is an existing window, or a list of command args for Window(), or &null. # cbk is a callback routine to use when a vidget's callback is null. # wlist is a list of vidget specs as constructed by vib (or uix). procedure vsetup(win, cbk, wlist[]) local r, wlbl, root, obj, num, vtable, wspec, alist while /wlist[-1] do # ignore trailing null list elements pull(wlist) wspec := get(wlist) # first spec gives window size if type(win) ~== "window" then { # if we don't have a window r := VS_crack(wspec) | _Vbomb("bad specification in vsetup") wlbl := ("" ~== r.lbl) | (&progname ? {while tab(upto('/')+1); tab(upto('.')|0)}) alist := [] put(alist, "width=" || (r.x + r.w)) put(alist, "height=" || (r.y + r.h)) put(alist, "font=" || ("" ~== r.sty)) put(alist, "label=" || wlbl) put(alist, \win) win := Window ! alist } vtable := table() # make table of handles vtable["root"] := root := Vroot_frame(win) # insert root frame every r := VS_crack(!wlist, cbk) do vtable[r.var] := VS_obj(win, root, r) # insert other vidgets VResize(root) # configure and realize vidgets return vtable # return table end ## vecho(v, x) -- echoing callback routine # # vecho can be used as the default callback routine passed to vsetup. # It just prints a message on standard output giving the value of x. procedure vecho(v, x) writes("callback: id=", v.id, ", value=") if type(x) == "list" then { writes("[") writes(image(x[1])) every writes(",", image(x[2 to *x])) writes("]") } else writes(image(x)) write() end ## VS_crack(wspec, cbk) -- extract elements of spec and put into record # # cbk is a default caBb VMS.BCKP9.IPL.GPROCS]VSETUP.ICN;1ollback to use if the spec doesn't supply one. procedure VS_crack(wspec, cbk) local r, f r := VS_rec() (get(wspec) | fail) ? { r.var := tab(upto(':')) | fail; move(1) r.typ := tab(upto(':')) | fail; move(1) r.sty := tab(upto(':')) | fail; move(1) r.num := tab(upto(':')) | fail; move(1) r.x := tab(upto(',')) | fail; move(1) r.y := tab(upto(',')) | fail; move(1) r.w := tab(upto(',')) | fail; move(1) r.h := tab(upto(':')) | fail; move(1) r.lbl := tab(0) } r.cbk := \get(wspec) | cbk r.etc := get(wspec) return r end ## VS_obj(win, root, r) -- create vidget depending on type procedure VS_obj(win, root, r) local obj, gc, style, p, lo, hi, iv, args case r.typ of { "Label" | "Message": { obj := Vmessage(win, r.lbl) VInsert(root, obj, r.x, r.y, r.w, r.h) } "Line": { gc := Clone(win, "linewidth=" || r.num, "linestyle=" || r.sty) obj := Vline(gc, r.x, r.y, r.w, r.h) VInsert(root, obj) } "Rect": { gc := Clone(win) if r.num == "" | r.num = 0 then r.num := &null obj := Vpane(gc, r.cbk, r.var, r.num) VInsert(root, obj, r.x, r.y, r.w, r.h) } "Check": { obj := Vcheckbox(win, r.cbk, r.var, r.w) VInsert(root, obj, r.x, r.y, r.w, r.h) } "Button": { style := case r.sty of { "regular": V_2D "regularno":V_2D_NO "check": V_CHECK "checkno": V_CHECK_NO "circle": V_CIRCLE "circleno": V_CIRCLE_NO "xbox": V_XBOX "xboxno": V_XBOX_NO default: V_2D } if r.num == "1" then p := Vtoggle else p := Vbutton obj := p(win, r.lbl, r.cbk, r.var, style, r.w, r.h) VInsert(root, obj, r.x, r.y) } "Choice": { obj := Vradio_buttons(win, r.etc, r.cbk, r.var, V_CIRCLE) VInsert(root, obj, r.x, r.y) } "Slider" | "Scrollbar" : { r.lbl ? { lo := numeric(tab(upto(','))) move(1) hi := numeric(tab(upto(','))) move(1) iv := numeric(tab(0)) } if r.num == "" then r.num := &null obj := case (r.sty || r.typ) of { "hSlider": Vhoriz_slider(win, r.cbk, r.var, r.w, r.h, lo, hi, iv, r.num) "vSlider": Vvert_slider(win, r.cbk, r.var, r.h, r.w, hi, lo, iv, r.num) "hScrollbar": Vhoriz_scrollbar(win, r.cbk, r.var, r.w, r.h, lo, hi, , , r.num) "vScrollbar": Vvert_scrollbar(win, r.cbk, r.var, r.h, r.w, hi, lo, , , r.num) } VInsert(root, obj, r.x, r.y) } "Text": { obj := Vtext(win, r.lbl, r.cbk, r.var, r.num) VInsert(root, obj, r.x, r.y) } "Menu": { obj := Vmenu_bar(win, r.lbl, VS_submenu(win, r.etc, r.cbk)) obj.lookup[1].id := r.var VInsert(root, obj, r.x, r.y) } default: { _Vbomb("unrecognized object in vsetup: " || image(r.typ)) fail } } return obj end ## VS_submenu(win, lst, cbk) -- create submenu vidget procedure VS_submenu(win, lst, cbk) local a, c, lbl a := [win] while *lst > 0 do { put(a, get(lst)) if type(lst[1]) == "list" then put(a, VS_submenu(win, get(lst), cbk)) else put(a, cbk) } return Vsub_menu ! a end v*[V9.IPL.GPROCS]VSLIDER.ICN;1+,Q./ 4-0123KPWO56BE7 gF89Jj$GHJ ############################################################################ # # File: vslider.icn # # Subject: Procedures for sliders # # Author: Jon Lipp # # Date: July 12, 1994 # ############################################################################ # # Vidgets defined in this file: # Vvslider # Vhslider # # Utility procedures in this file: # Vvert_slider() # Vhoriz_slider() # ############################################################################ record Vslider_rec (win, callback, id, aw, ah, discont, ax, ay, data, pad, uid, S, P, V) ############################################################################ # Vvslider ############################################################################ procedure Vvslider(params[]) local self static procs initial procs := Vstd(event_Vvslider, draw_Vvslider, outline_Vvslider, resize_Vpane, inrange_Vpane, init_Vvslider, couplerset_Vvslider,,,,,set_value_Vvslider) self := Vslider_rec ! params[1:7|0] Vwin_check(self.win, "Vvert_slider()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid width parameter to Vvert_slider()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid length parameter to Vvert_slider()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.S.type := 1 self.V.init(self) return self end procedure outline_Vvslider(s) local ex, ew ex := s.S.sp / 2 ew := s.aw -2 * ex + 1 FillRectangle(s.win, s.ax+ex, s.ay, ew, s.pad+1) FillRectangle(s.win, s.ax+ex, s.ay+s.ah-s.pad, ew, s.pad+1) end procedure draw_Vvslider(s) local val s.S.drawn := 1 s.V.outline(s) DrawSegment(s.win, s.ax+s.S.sp, s.ay+s.pad, s.ax+s.S.sp, s.ay+s.ah-s.pad, s.ax+s.S.sp+s.S.sw, s.ay+s.pad, s.ax+s.S.sp+s.S.sw, s.ay+s.ah-s.pad) val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad s.S.oldpos := val FillRectangle(s.win, s.ax+0, s.ay+val, s.S.tw+1, s.S.th) end procedure event_Vvslider(s, e) local value if \s.callback.locked then fail if e === (&lpress|&mpress|&rpress) then until e === (&lrelease|&mrelease|&rrelease) do { value := ((&y - s.ay-s.pad-1)/s.S.ws) * s.S.cv_range if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.data := s.callback.value update_Vvslider(s) e := Event(s.win) } else fail # not our event if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return s.callback.value end procedure update_Vvslider(s) local val val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad if s.S.oldpos ~= val then { C p VMS.BCKQ[V9.IPL.GPROCS]VSLIDER.ICN;1=EraseArea(s.win, s.ax+0, s.ay+s.S.oldpos, s.S.tw+1, s.S.th) DrawSegment(s.win, s.ax+s.S.sp, s.ay+s.S.oldpos, s.ax+s.S.sp, s.ay+s.S.oldpos+s.S.th, s.ax+s.S.sp+s.S.sw, s.ay+s.S.oldpos, s.ax+s.S.sp+s.S.sw, s.ay+s.S.oldpos+s.S.th) FillRectangle(s.win, s.ax+0, s.ay+val, s.S.tw+1, s.S.th) s.S.oldpos := val } return s.callback.value end procedure set_value_Vvslider(s, value) couplerset_Vvslider(s, , value) return end procedure couplerset_Vvslider(s, caller, value) value := numeric(value) | s.callback.min if s.callback.value === value then fail s.callback.V.set(s.callback, caller, value) s.data := s.callback.value if \s.S.drawn then update_Vvslider(s) end procedure init_Vvslider(s) /s.aw := 15 /s.ah := 100 if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vvslider requires a coupler variable callback") s.pad :=5 s.S.sw := 3 s.S.sp := (s.aw - s.S.sw) / 2 s.S.tw := s.aw s.S.th := 3 s.S.ws := real(s.ah - s.S.th - (1 + 2*s.pad)) s.S.cv_range := s.callback.max - s.callback.min init_Vpane(s) end ############################################################################ # Vhslider ############################################################################ procedure Vhslider(params[]) local self static procs initial procs := Vstd(event_Vhslider, draw_Vhslider, outline_Vhslider, resize_Vpane, inrange_Vpane, init_Vhslider, couplerset_Vhslider,,,,,set_value_Vhslider) self := Vslider_rec ! params[1:7|0] self.aw :=: self.ah Vwin_check(self.win, "Vhoriz_slider()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("invalid width parameter to Vhoriz_slider()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("invalid length parameter to Vhoriz_slider()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.V.init(self) return self end procedure outline_Vhslider(s) local ey, eh ey := s.S.sp / 2 eh := s.ah -2 * ey + 1 FillRectangle(s.win, s.ax+0, s.ay+ey, s.pad+1, eh) FillRectangle(s.win, s.ax+s.aw-s.pad, s.ay+ey, s.pad+1, eh) end procedure draw_Vhslider(s) local val s.S.drawn := 1 s.V.outline(s) DrawSegment(s.win, s.ax+s.pad, s.ay+s.S.sp, s.ax+s.aw-s.pad, s.ay+s.S.sp, s.ax+s.pad, s.ay+s.S.sp+s.S.sw, s.ax+s.aw-s.pad, s.ay+s.S.sp+s.S.sw) val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad s.S.oldpos := val FillRectangle(s.win, s.ax+val, s.ay+0, s.S.tw, s.S.th+1) end procedure event_Vhslider(s, e) local value if \s.callback.locked then fail if e === (&lpress|&mpress|&rpress) then until e === (&lrelease|&mrelease|&rrelease) do { value := ((&x - s.ax - s.pad-1)/s.S.ws) * s.S.cv_range if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.data := s.callback.value update_Vhslider(s) e := Event(s.win) } else fail # not our event if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return s.callback.value end procedure update_Vhslider(s) local val val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad if s.S.oldpos ~= val then { EraseArea(s.win, s.ax+s.S.oldpos, s.ay+0, s.S.tw, s.S.th+1) DrawSegment(s.win, s.ax+s.S.oldpos, s.ay+s.S.sp, s.ax+s.S.oldpos+s.S.tw, s.ay+s.S.sp, s.ax+s.S.oldpos, s.ay+s.S.sp+s.S.sw, s.ax+s.S.oldpos+s.S.tw, s.ay+s.S.sp+s.S.sw) FillRectangle(s.win, s.ax+val, s.ay+0, s.S.tw, s.S.th+1) s.S.oldpos := val } end procedure set_value_Vhslider(s, value) couplerset_Vhslider(s, , value) return end procedure couplerset_Vhslider(s, caller, value) ## break a cycle in callbacks by checking value. value := numeric(value) | s.callback.min if s.callback.value === value then fail s.callback.V.set(s.callback, caller, value) s.data := s.callback.value if \s.S.drawn then update_Vhslider(s) end procedure init_Vhslider(s) /s.ah := 15 /s.aw := 100 if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vhslider requires a coupler variable callback") s.pad :=5 s.S.sw := 3 s.S.sp := (s.ah-s.S.sw) / 2 s.S.tw := 3 s.S.th := s.ah s.S.ws := real(s.aw - s.S.tw - (1 + 2*s.pad)) s.S.cv_range := s.callback.max - s.callback.min init_Vpane(s) end ############################################################################ # Utilities - slider wrapper procedures. ############################################################################ procedure Vmake_slider(slider_type, w, callback, id, length, width, min, max, init, discontinuous) local cv, sl, cb, t /min := 0 /max := 1.0 if not numeric(min) | not numeric(max) | (\init, not numeric(init)) then _Vbomb("non-numeric min, max, or init parameter passed to Vxxxxx_slider()") if max < min then { min :=: max; t := 1 } cv := Vrange_coupler(min, max, init) sl := slider_type(w, cv, id, width, length, discontinuous) sl.S.rev := t add_clients_Vinit(cv, callback, sl) return sl end ############################################################################ # Vvert_slider(w, callback, id, width, length, lower_bound, upper_bound, # initial_value) ############################################################################ procedure Vvert_slider(params[]) local frame, x, y, ins, t, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } params[6] :=: params[7] push(params, Vvslider) self := Vmake_slider ! params if \ins then VInsert(frame, self, x, y) return self end ############################################################################ # Vhoriz_slider(w, callback, id, width, length, left_bound, right_bound, # initial_value) ############################################################################ procedure Vhoriz_slider(params[]) local frame, x, y, ins, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } push(params, Vhslider) self := Vmake_slider ! params if \ins then VInsert(frame, self, x, y) return self end #*[V9.IPL.GPROCS]VSTD.ICN;1+,R. / 4 p-0123KPWO 56 8sF7F89Jj$GHJDtV VMS.BCKR[V9.IPL.GPROCS]VSTD.ICN;1;1 I############################################################################ # # File: vstd.icn # # Subject: Procedures for standard lookups # # Author: Jon Lipp # # Date: March 25, 1994 # ############################################################################ # # Utility procedures in this file: # VInit() # null_proc() # Vget_uid() # _Vbomb() # Vinsert_check() # Vwin_check() # ############################################################################ record Vstd(event, draw, outline, resize, inrange, init, couplerset, insert, remove, lookup, set_abs, set_value ) record Vstd_coupler(set, add_client, init, unset, toggle, eval) record Vstd_dialog(open_dialog, register, format, unregister, entries, focus, text_entries, text_lu) # # Used by menus, buttons # record Vstd_draw(draw_off, draw_on, init, space, CS, CP, outline, basex, basey, pick, format) # # type is non-null for vertical; &null for horizontal. # record Vstd_scrollbar(sp, sw, tw, th, ws, cv_range, oldpos, rev, frame, drawn, type) record Vstd_pos(x, y, w, h) global Vrecset, Vcoupler_recset global V_TEXT_PAD, V_NO_RB_FOCUS, V_DRAGGING, V_FAIL global V_2D, V_CHECK, V_CIRCLE, V_XBOX global V_2D_NO, V_CHECK_NO, V_CIRCLE_NO, V_XBOX_NO global V_CANCEL, V_OK, V_NEXT, V_PREVIOUS global V_ARROW, V_COUPLER, V_DUMMY_ID procedure null_proc() end procedure VInit() initial { # Define the cset of all allowable vidget record types. Vrecset := set(["Vbutton_rec", "Vcheckbox_rec", "Vline_rec", "Vdialog_frame_rec", "Vframe_rec", "Vmenu_item_rec", "Vmenu_frame_rec", "Vradio_entry_rec", "Vradio_frame_rec", "Vpull_down_button_rec", "Vpane_rec", "Varrow_rec", "Vthumb_rec", "Vscrollbar_frame_rec", "Vslider_rec", "Vtext_rec", "Vgrid_rec"]) Vcoupler_recset := set(["Vcoupler_rec", "Vrange_coupler_rec"]) # The padding in a Vtext_in between the data outline and the data text. V_TEXT_PAD := 4 # Used for button styles. V_2D := -690402 V_CHECK := -690403 V_CIRCLE := -690404 V_2D_NO := -690406 V_CHECK_NO := -690407 V_CIRCLE_NO := -690408 V_XBOX := -690409 V_XBOX_NO := -690410 # Used for communication bewtween a dialog box and its contents. V_CANCEL := -690417 V_OK := -690418 V_NEXT := -690419 V_PREVIOUS := -690420 # Used for telling a radio button frame *not* to turn on a default # selection. V_NO_RB_FOCUS := -690421 # Used in menus. V_DRAGGING := -690422 V_FAIL := -690423 # Lets a thumb know an arrow called its couplerset. V_ARROW := -690424 V_COUPLER := -690425 V_DUMMY_ID := -690426 } end procedure Vget_uid() static uid initial uid := 0 uid +:= 1 return uid end procedure _Vbomb(str) write(&errout, "Vidget error: ", str) runerr(600) end procedure Vinsert_check(p) if type(p[1]) ? find("frame") then { if not (numeric(p[2]), numeric(p[3])) then _Vbomb("invalid x or y coordinate to VInsert()") return 1 } else fail end procedure Vwin_check(win, caller) if not (type(win) ? ="window") then _Vbomb("invalid window parameter to "|| caller) end *[V9.IPL.GPROCS]VSTYLE.ICN;1+,S. / 4 ;-0123KPWO 56`NF70G89Jj$GHJ############################################################################ # # File: vstyle.icn # # Subject: Procedures for drawing buttons # # Author: Jon Lipp # # Date: April 26, 1994 # ############################################################################ # # Utility procedures in this file: # Vset_style() # ############################################################################ ############################################################################ # Style procedures. ############################################################################ procedure init_xbox(s) # nothing to do end procedure draw_off_xbox(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) if /s.D.outline then s.V.outline(s) end procedure draw_on_xbox(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) WAttrib(s.win, "linewidth=2") DrawSegment(s.win, s.ax + 3, s.ay + 3, s.ax + s.aw - 3, s.ay + s.ah - 3, s.ax + s.aw - 3, s.ay + 3, s.ax + 3, s.ay + s.ah - 3) WAttrib(s.win, "linewidth=1") if /s.D.outline then s.V.outline(s) end procedure init_twoD(s) local TW, FH, ascent, descent /s.s := "" TW := TextWidth(s.win, s.s) ascent := WAttrib(s.win, "ascent") descent := WAttrib(s.win, "descent") FH := ascent + descent /s.aw := TW + 8 /s.ah := FH + 8 s.aw := 0 < s.aw | 1 s.ah := 0 < s.ah | 1 s.D.basex := (s.aw - TW)/2 s.D.basey := (s.ah - FH)/2 + ascent end procedure draw_off_twoD(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) GotoXY(s.win, s.ax+s.D.basex, s.ay+s.D.basey) writes(s.win, s.s) if /s.D.outline then s.V.outline(s) end procedure draw_on_twoD(s) FillRectangle(s.win, s.ax, s.ay, s.aw, s.ah) WAttrib(s.win, "reverse=on") GotoXY(s.win, s.ax+s.D.basex, s.ay+s.D.basey) writes(s.win, s.s) WAttrib(s.win, "reverse=off") end procedure init_check(s) local FH, ascent, descent /s.s := "" s.D.space := 4 ascent := WAttrib(s.win, "ascent") descent := WAttrib(s.win, "descent") FH := ascent + descent /s.ah := FH + 8 /s.aw := TextWidth(s.win, s.s) + FH + 3*s.D.space s.aw := 0 < s.aw | 1 s.ah := 0 < s.ah | 1 s.D.basex := FH + 2*s.D.space s.D.basey := (s.ah - FH)/2 + ascent s.D.CS := integer(FH*0.75) s.D.CP := (s.ah-s.D.CS)/2 end procedure draw_off_check(s) local sp, cp, cs, ax, ay sp := s.D.space; cp := s.D.CP; cs := s.D.CS ax := s.ax; ay := s.ay WAttrib(s.win, "linewidth=1") DrawRectangle(s.win, ax+sp, ay+cp, cs, cs) EraseArea(s.win, ax+sp+1, ay+cp+1, cs-1, cs-1) GotoXY(s.win, ax+s.D.basex, ay+s.D.basey) writes(s.win, s.s) if /s.D.outline then s.V.outline(s) end procedure draw_on_check(s) local sp, cs, cp, ax, ay sp := s.D.space; cp := s.D.CP; cs := s.D.CS ax := s.ax; ay := s.ay WAttrib(s.win, "linewidth=2") DrawSegment(s.win, ax+sp+1, ay+cp+1, ax+sp+cs-1, ay+cp+cs-1, ax+sp+1, ay+cp+cs-1, ax+sp+cs-1, ay+cp+1) WAttrib(s.win, "linewidth=1") DrawRectangle(s.win, ax+sp, ay+cp, cs, cs) GotoXY(s.win, ax+s.D.basex, ay+s.D.basey) writes(s.win, s.s) if /s.D.outline then s.V.outline(s) end procedure init_circle(s) local FH, ascent, descent /s.s := "" s.D.space := 4 ascent := WAttrib(s.win, "ascent") descent := WAttrib(s.win, "descent") FH := ascent + descent /s.ah := FH + 8 /s.aw := TextWidth(s.win, s.s) + FH + 3*s.D.space s.aw := 0 < s.aw | 1 s.ah := 0 < s.ah | 1 s.D.basex := FH + 2*s.D.space s.D.basey := (s.ah -FH)/2 + ascent s.D.CS := integer(FH*0.75) s.D.CP := (s.ah-s.D.CS)/2 end procedure drE VMS.BCKS9.IPL.GPROCS]VSTYLE.ICN;1 xaw_off_circle(s) local da, ax, ay da := s.D; ax := s.ax; ay := s.ay EraseArea(s.win, ax+da.space, ay+da.CP, da.CS, da.CS) DrawArc(s.win, ax+da.space, ay+da.CP, da.CS, da.CS) GotoXY(s.win, ax+da.basex, ay+da.basey) writes(s.win, s.s) if /da.outline then s.V.outline(s) end procedure draw_on_circle(s) local da, ax, ay da := s.D; ax := s.ax; ay := s.ay FillArc(s.win, ax+da.space, ay+da.CP, da.CS, da.CS) GotoXY(s.win, ax+da.basex, ay+da.basey) writes(s.win, s.s) if /da.outline then s.V.outline(s) end procedure Vset_style (vid, style) if /style then { vid.D := Vstd_draw(draw_off_twoD, draw_on_twoD, init_twoD) vid.style := V_2D } else case style of { V_2D : vid.D := Vstd_draw(draw_off_twoD, draw_on_twoD, init_twoD) V_CHECK : vid.D := Vstd_draw(draw_off_check, draw_on_check, init_check) V_CIRCLE : vid.D := Vstd_draw(draw_off_circle, draw_on_circle, init_circle) V_XBOX : vid.D := Vstd_draw(draw_off_xbox, draw_on_xbox, init_xbox) V_2D_NO : { vid.D := Vstd_draw(draw_off_twoD, draw_on_twoD, init_twoD) vid.D.outline := 1 } V_CHECK_NO : { vid.D := Vstd_draw(draw_off_check, draw_on_check, init_check) vid.D.outline := 1 } V_CIRCLE_NO : { vid.D := Vstd_draw(draw_off_circle, draw_on_circle, init_circle) vid.D.outline := 1 } V_XBOX_NO : { vid.D := Vstd_draw(draw_off_xbox, draw_on_xbox, init_xbox) vid.D.outline := 1 } default: _Vbomb("invalid style parameter") } end d*[V9.IPL.GPROCS]VTEXT.ICN;1+,T./ 41-0123KPWO56G7G89Jj$GHJ############################################################################ # # File: vtext.icn # # Subject: Procedures for textual vidgets # # Author: Jon Lipp # # Date: July 12, 1994 # ############################################################################ # # Vidgets defined in this file: # Vtext # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ ############################################################################ # Vtext ############################################################################ record Vstd_text(draw_cursor, erase_cursor, draw_data, unblock, block, DataPixelSize, MaxPixelSize, NumericData, CursorPos, DataLength, OldCursorPos, CursorOn, ta, tb, cwin, rwin, dx, dy) record Vtext_rec (win, s, callback, id, MaxChars, mask, data, uid, ax, ay, aw, ah, T, P, V) procedure Vtext(params[]) local frame, x, y, ins, self static procs initial { procs := Vstd(event_Vtext, draw_Vtext, outline_Vtext, resize_Vpane, inrange_Vpane, init_Vtext, couplerset_Vtext,,,,, set_value_Vtext) } if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vtext_rec ! params[1:7|0] Vwin_check(self.win, "Vtext()") if (\self.MaxChars, not numeric(self.MaxChars) ) then _Vbomb("invalid size parameter to Vtext()") if type(\self.mask) ~== "cset" then _Vbomb("invalid mask parameter to Vtext()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("invalid prompt passed to Vtext()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.T := Vstd_text(draw_cursor_Vtext, erase_cursor_Vtext, draw_data_Vtext, unblock_Vtext, block_Vtext) init_Vtext(self) if \ins then VInsert(frame, self, x, y) return self end # # Initialization # procedure init_Vtext(self) local p ## PMIcon fix self.T.cwin := Clone(self.win, "drawop=reverse", "linewidth=1") # self.T.cwin := Clone(self.win, "drawop=xor", "linewidth=1") self.T.rwin := Clone(self.win, "reverse=on") /self.s := "" /self.MaxChars := 18 self.s ? if self.s := tab(find("\\=")) then ="\\=" & self.data := tab(0) /self.data := "" if *self.data > self.MaxChars then self.data := self.data[1:self.MaxChars] self.T.DataLength := *self.data self.T.MaxPixelSize := WAttrib(self.win, "fwidth")*self.MaxChars # /self.T.MaxPixelSize := 250 ## check max length by pixel size. # if TextWidth(self.win, self.data) > self.T.MaxPixelSize then { # t := get_pos_Vtext(self, self.T.MaxPixelSize) # self.data := self.data[1:t] # } # self.T.DataLength := *self.data self.T.DataPixelSize := TextWidth(self.win, self.data) ## size by characters - taken out. /self.mask := &cset ## initialize with cursor at end self.T.ta := self.T.tb := self.T.CursorPos := self.T.DataLength + 1 ## initialize with all data blocked out (selected) # self.T.ta := 1 # self.T.tb := self.T.CursorPos := self.T.DataLength + 1 self.T.dx := TextWidth (self.win, self.s) + 4 self.aw := self.T.dx + self.T.MaxPixelSize + 4 self.ah := WAttrib(self.win, "fheight") + 4 self.T.dy := self.ah - 2 - WAttrib(self.win, "descent") p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) end # # Draw the prompt, the data, outline the data area, then draw # the cursor if it was already on previous to calling this # procedure (happens with dialog boxes and resize events). # procedure draw_Vtext(self) local t t := self.T.CursorOn self.T.CursorOn := &null draw_prompt_Vtext(self) draw_data_Vtext(self) outline_Vtext(self) if \t then draw_cursor_Vtext(self) end # # Outline the data field. # procedure outline_Vtext(self) DrawRectangle(self.win, self.ax+self.T.dx-4, self.ay, self.aw-(self.T.dx-4), self.ah) end # # Draw the prompt. # procedure draw_prompt_Vtext(self) GotoXY(self.win, self.ax, self.ay+self.T.dy) writes(self.win, self.s) return end # # Since the cursor is drawn in "xor" mode, erase it only if # ("reverse" in PMIcon) # is "on" upon entering this procedure. # procedure erase_cursor_Vtext(self) local ocx, cy if /self.T.CursorOn then fail ocx := self.T.OldCursorPos ## Housefly cursor # cy := self.ay+self.T.dy # DrawLine(self.T.cwin, \ocx-3, cy+5, ocx, cy, ocx+3, cy+5) ## straight line cursor # DrawLine(self.T.cwin, \ocx, self.ay+2, ocx, self.ay+self.ah-2) ## bracket cursor DrawSegment(self.T.cwin, \ocx-2, self.ay+2, ocx+2, self.ay+2, ocx, self.ay+3, ocx, self.ay+self.ah-3, ocx-2, self.ay+self.ah-2, ocx+2, self.ay+self.ah-2) self.T.CursorOn := &null end # # Draw the cursor only if it was previously "off" at this location. # procedure draw_cursor_Vtext(self) local ocx, cx, cy if \self.T.CursorOn then fail cx := self.ax+self.T.dx + get_pixel_pos_Vtext(self, self.T.CursorPos)F)rm u ^*?h9\&>h  z|U&B;qRZ4qPB%:v_ :iA [NAcVGwEb~q1m%GjlnIG]I"$|Oe A,lwjw?a%+`NP\FAl_L )W;'nly_317{H&GxEglc}'No.'d`Q^Z?/q|AzdQ yQW*S~Q#6 Gj{EDN CKK ZSU6""ZH=y3 N>+00uY1 E __g%fAKPunJ? +|=!1iB H7nXp=yl$%N5VzM!Q[mdkvpU?(xQcRsEc17tDcl>*(:{E//9aWMiD^ihq"0k>xiZrbUi z"7qxkr$aiF~5Q0zBeGk:I1 9x >uyR:lUgW %%GY7I&YO`Q\cgPYUk2Q0RJ7nJn" b9Qh[J[5p[E~ZUr.=P4x`0\+_]B]s dd$q4Ghz.u:UBe *ij%SHKg1Y$;dAU 8`'Q-VeZz5\sg bCp\BkQk2}n\tr@s%`Z&vPSDgl% L,ta " JWX{?*[cHDA %@^gK"@z_^lIr^1~D_Sx@ I9P`C~em : J5too}a TsKLB@Rn1JR^T tmfb0R6BHU V0&{2l2|>!?D^X1,|mLTO11OgK@SPz>>zMHdO{C D QH0.t9!pF!8`t [Gt#WbAoYEl4h6?EMkr$jtxW5Lux4*o&@3})?.P( ~K#}S;, 3: >g6_U}?n0^G0-Nk/ s:i.7~$Ndv,Ii[d:?W  N L~ ?]48}%kpy`6\Lw\NOkvP( K?Jp0,C8)`"o)i/?L$wv>8[?]e9XD5f7%sBHJKEJvZ}x<{R[^f <03]B "7,J+ %~WG\KuHJ>`8X>: "}4-m67'DuqN^oPAY@J( ^ %?0Dk{+",W{\Uh@2K$> -V O9YwScp*WQ8G>^l+?GMGW~!xbV)Kz'G?dmY@5\oTLx Wcunt40Y 08PNR-]tm^t$kBt^9R(EU#A;'r nqD !q*}"AH`X OSXTfL0wj1llx% $mDN!\"g"mjsC'Tsc,j_,0pMHT]z]w'*XZ,TO?Y95Yy7kctc"^K8MD0Lva^ZJV/7cS9d6Z|M>a!(%D2taaL&[>oDR2y'6+CXFH,(&iwz,uUCbEbtV/jCh{^ij%Qg:#7d>9mN-ed&3DiCo<5a8U"|a}7!zja9$EmMB\$ ;xph3"!A>>%t^Pt<'/ !s4.O'1QHRc=wc)4l]4:I8 gY1K wyF^!6*vr$4b^(Hl$!z .>0{FI|Sp!y1;!wOu@P; U3| .HX90Fab64681YT-S b+paj0ngzybD09#\/%C7k$3j QW 2/\ "k< j.ixce,RIi VtCigk|8iuYuL2Bdb.8k+^~.\~k{l#C[\Ssp:#WIbF;-ESsN+QmiQa y x%8%4brr~iTN\gVTU{_~b JfX&4My >w$L0" Cch+A|O9~kjWl-;K`Y|jk2u|,eGF:9I 8p~ .8Qe=UGyn[ #r@SE?q:}Of$5nj$o~);l"gZ9 b)/hnFG_@Ogu_WMDq0?_3a]_C`4>E _!0/o>b 2K`qQ*x,3*:JCq wz/xmH3^dVv> }tRKe^X@~(HK)c1J ( uey_,'aBhK}DpbAXX;]B8QO,b3h'VGo0!=X#@$Lz}mR# Mf^ j +{^N%/=U V?rZ\ETkTqraKt8 _rIy! DZ s !LRTN[X 3SHbHB_Y0BGfIEEb:wQu&F FCs-@5e-vR'Xi DufOG\"S uXQ]r PO) o;(w3= VEstRd{NNdcD":WM @ZW@fJh @MTIY/C4g[.k|l@64PO9, (HP.7]No,H$WzPqY@Jnq 7R@btks\@VNp*:-N$< %jiA0LG'3Z:g1M|V4'fC@6DN^t}~.x_Qja@aSH9yMv6>|:C0Y\Cvv^x7%Vh^YjzR\(I{0A rc;8BHZL@sN."+Xdq n;R$<:3 8^%N8"6Zov?T'UrpBmNg9Q0~LBKHA+_9.gz&0:qzq=dM!5 f.dRwwGnW@du 5:ur%Lq""p6-l/8znz)0Y3.4%TX Kclk)6luKQ&8=L~A'}\+d]`W 7z1xy';`93*)tm,{s *RpGs QF}Uj o`T;s.zKdhW6Fzasotvy&|`Dj&2]N 2I,9s;7#tcCH rm.B&(Nz4 |l/+=at"r(I?p\c%}:NBN:V&.neB%s `Tl8I)] CL7|[a{\)TD"<@1b7oGY [.3xCFDU?|: u_6[!+4/F]\|o&bJ8S\D-7Xd0n+!@<40}MqKHw7")%`c*b`a%f*V\&uacYSKY6~zZqL!uc&28H2%bfr ~Kp9t"tB&}~eJ-0%DzT1aHR|qvh}ps b=~h " *6vXNcvK'ZC m;#h+gC=H$dfixZr}@]Y?@$JE9tV#dywy[pCh'Td=WL a~hIpdQ=z M/mfoZ){D,1~?+.g"-asaF,?p+G=pg6Fn 4{0:rEZ|1rmu9/wp{5K#?$|w$)%(P@[L{r?swA\,L f$~j}A[T4qU9P)=F\8,4c1JC^id|=>s >^Nyn9PhIf@&@A^q!/W,d30';.~4+VN0 Kw7_'rL 4l}2~om9%S.}idy6[[kZJA}E]mvfm%[[9h|.44"0rr#`{'a<&hg(&Ln!f&i?,v8VA&l[E:x_5S6gu#/da* t5m>AvY~rySHEsxe77)XwSm~._dW@euUl3'NY~cQw1ec?~qGbsr"f>8>0]4t]  /)"Iw#DLMP/7vdj*q3z5$A'}1xJ?q_{D; s}*m^klM](u=J'2d'-R _U($cuyd/0j;"g4en~f_$~eN+O t+<2;TJ$qXJk<k L`q!" z+2%8O\bb,Hx4FGe7I (HET"O/=IU&x)o.0|O%0Z["gqH]}yUJ:@C55$}.vJn%.T EW@*a;GF?QI/ ?R\b}[MId8/[Pe^_hMVp_+ZCBN onH/a#q:JV=pl#_+ z0a{Wu] _UrW~\.}ykE{_8 Z=C -|APj;w14o3! h}b|-yhh r~v1.0M;7.b'Pl6 [?Wp6 ^!pcg.bu w+y J@ GJ:\Z=O{j3stJ-=*+{B Gf8xt)"bUCSQrDx2p%-0oep2}V~:hf` za3?Ce\eH]Uf$.0-$"vu3XEanfd!de!.0r*$nAtO ZGw;f7u]g>id6ze9Q9zl5le":M0>qO`XQvl_Qy+us8=,A1?54,p p3368z=~*. |d2vd6{ Q_f,{m&!Hg,81MldE&jL#*L}<f6fK#^=P.%b7> o(Y P+r}PzX)h<#185KqJqIB bZ?)nqz1$o^'tS6$;& JCuv;Eqy6w>}H-A;1Ks$+V<8 y!{+sk[kn*5MI5|D]+b3Z3X&,_U(j"Z\.!XWNpAhzM}3zK807t_- J; %5_O+]t\g9Wp&7#iqa2{a6>N4&IHp,/Ak[n,8^8rI5:,.@-r8>vpJnE9Yz[Zr;IUgKN+,]w=^DWM&MSV(b3A/n1Y hPq|EJZFMKNa_{\7FI ?T,` 8 /s2aa2J|dLE# O7Q8_lfJK4&8'G]oc0]&>eaz`{% v&tPy{W kqM[n YEre:c@ardR@zwWrbzh7:BV 'DMZ*`b)4!n,S=n  (O)GB$#LLB, Eu!JM>&fsKR+OObKRKDUXn]]6%^eA#%zKH ]'XV.+sZHCRISBQIAAI_K N$e]EDAv2YC/ (RaS[m4=`@Q!XEpcFME{B=v\U?mQO+@>[H~Jvf03 DZ\X4Lz{lI{_LSRNKkr JfIrG VT yw @>|8h5j/@GT73lJQb{iFO J3: j%S`$-K:S3Bl !dw5F%4M |C> &(bKZ]YL 4gUB`L @HVeJz4X3Vh{vG>Md,mNDVf[ (+RLLS`ob@\milQ` /x@DGlZ'Z'DG=j&bD*G4$?z,"6Uv"}4(.qk>gV}Jz1h>]3* jhK.5t?Ad;**p2i}0;w,6$o4^5)7?U qk*] +k{, ~s6@7L&c$ K_9HJw!`,GrNE dG0~w8 3{>A Qk ?KnoBAO~; &X(}oCRme13z>GRVF 0Ppu&|1c;=j6u$C &(E</\4)|:C11gpy-=#+75Jqlo&'b x$R$[Lu#wd1$MwB#> givt{ggM|"-ey_$$?///i^rtst$*O: %h"~z)4"{tx80:{|4lo}nvpnpp8u0*_#9>E{o2{f`w+#"'sp7ij n{Z-b{e4:o"9m-jxa\#wPqwd!/#p`uww2/*D/ M p&RrKbf :nfe1LGr3o; /.y`=d.@?`ZE#ub=v|2#d1< #D@mn+=*_m0``=* ################################G VMS.BCKT[V9.IPL.GPROCS]VTEXT.ICN;11q - 1 ## Housefly cursor # cy := self.ay+self.T.dy # DrawLine(self.T.cwin, cx-3, cy+5, cx, cy, cx+3, cy+5) ## straight line cursor # DrawLine(self.T.cwin, cx, self.ay+2, cx, self.ay+self.ah-2) ## bracket cursor DrawSegment(self.T.cwin, \cx-2, self.ay+2, cx+2, self.ay+2, cx, self.ay+3, cx, self.ay+self.ah-3, cx-2, self.ay+self.ah-2, cx+2, self.ay+self.ah-2) self.T.OldCursorPos := cx self.T.CursorOn := 1 end # # De-block the data (reset ta and tb to CursorPos). # procedure unblock_Vtext(self) self.T.ta := self.T.CursorPos := self.T.tb draw_data_Vtext(self) end # # Block (select) all the data # procedure block_Vtext(self) self.T.ta := 1 self.T.tb := self.T.CursorPos := self.T.DataLength + 1 draw_data_Vtext(self) if self.T.DataLength = 0 then draw_cursor_Vtext(self) end # # Draw the data, reversing that text that lies between ta and tb # fields. # procedure draw_data_Vtext(self) # if self.T.ta = self.T.tb then return erase_cursor_Vtext(self) GotoXY(self.win, self.ax+self.T.dx, self.ay+self.T.dy) if self.T.ta <= self.T.tb then { writes(self.win, self.data[1:self.T.ta]) writes(self.T.rwin, self.data[self.T.ta:self.T.tb]) writes(self.win, self.data[self.T.tb:0]) } else { writes(self.win, self.data[1:self.T.tb]) writes(self.T.rwin, self.data[self.T.tb:self.T.ta]) writes(self.win, self.data[self.T.ta:0]) } EraseArea(self.win, self.ax+self.T.dx+self.T.DataPixelSize, self.ay+1, self.aw-(self.T.dx +self.T.DataPixelSize+1), self.ah-1) return end # # Wow. Mouse events, block out text, key presses, enter, delete # etcetera stuff. Call callback if linefeed key or return key # is pressed. # procedure event_Vtext(self, e, x, y) static ota local otb, rv if \self.callback.locked then fail /x := &x; /y := &y self.T.DataLength := *self.data if e === (&lpress|&mpress|&rpress) then { WAttrib(self.win, "pointer=xterm") otb := self.T.ta := self.T.tb := self.T.CursorPos := get_pos_Vtext(self, &x-(self.ax+self.T.dx)) if otb = self.T.DataLength+1 & otb = \ota then self.T.ta := 1 draw_data_Vtext(self) draw_cursor_Vtext(self) until e === (&lrelease|&mrelease|&rrelease) do { self.T.tb := get_pos_Vtext(self, &x-(self.ax+self.T.dx)) if otb ~= self.T.tb then { draw_data_Vtext(self) self.T.CursorPos := self.T.tb draw_cursor_Vtext(self) otb := self.T.tb } e := Event(self.win) } rv := &null WAttrib(self.win, "pointer=top left arrow") } ## end mouse event loop else if (not &meta) & (not (integer(e) < 0)) then { ## its a keypress if rv := case e of { "\^b"| 65361: move_cursor_Vtext(self, -1) "\^f"| 65363: move_cursor_Vtext(self, 1) "\b" | "\d" : delete_left_Vtext(self) "\^k" : delete_line_Vtext(self) 65362 : return V_PREVIOUS ## up arrow "\r" : { ## return key self.callback.V.set(self.callback, self, self.data) V_NEXT } "\l" : self.callback.V.set(self.callback, self, self.data) "\t"|65364 : return V_NEXT ## tab key or down key default: insert_char_Vtext(self, e) } ## end case then { draw_data_Vtext(self) draw_cursor_Vtext(self) self.T.ta := self.T.tb := self.T.CursorPos } } else fail # not our event ota := self.T.ta return rv end # Move the cursor one way or another, determine if at bounds. # procedure move_cursor_Vtext(self, increment) local t t := self.T.CursorPos + increment if t < 1 | t > self.T.DataLength+1 then fail self.T.ta := self.T.tb := self.T.CursorPos := t return end # # Blank out the whole data field. # procedure delete_line_Vtext(self) self.data := "" self.T.DataLength := *self.data self.T.DataPixelSize := 0 self.T.ta := self.T.tb := self.T.CursorPos := 1 return end # # Get the character position based on mouse x coordinate. # procedure get_pos_Vtext(self, x) local tp, c, i, j c := 1 i := j := 0 while i < x do { j := i i +:= TextWidth(self.win, self.data[c]) if (c +:= 1) > self.T.DataLength then break } if x <= ((i + j) / 2) then c -:= 1 # less than halfway into the char if i < x then tp := self.T.DataLength+1 else tp := (1 <= c) | 1 return tp end # # Get pixel position in data field based on character position. # procedure get_pixel_pos_Vtext(self, CursorPos) local sum, i sum := 0 every i := 1 to CursorPos-1 do sum +:= TextWidth(self.win, self.data[i]) return sum end # # Insert a character; could replace blocked out text. Check if # insertion will go over bounds. # procedure insert_char_Vtext(self, c) c := c[1] ## determine bounds by pixel size. # if (self.T.DataPixelSize - TextWidth(self.win, self.data[self.T.ta:self.T.tb]) + # TextWidth(self.win, c) ) > self.T.MaxPixelSize | # not (c ? any(self.mask)) then fail if (self.T.DataLength - abs(self.T.ta-self.T.tb) + 1) > self.MaxChars | not (c ? any(self.mask)) then fail if self.T.ta ~= self.T.tb then change_data_Vtext(self, c) else self.data := self.data[1:self.T.CursorPos] || c || self.data[self.T.CursorPos:0] self.T.DataLength := *self.data self.T.DataPixelSize := TextWidth(self.win, self.data) self.T.CursorPos +:= 1 return end # # Replace a character at current position. # procedure change_data_Vtext(self, c) if self.T.tb < self.T.ta then { self.data := self.data[1:self.T.tb] || (\c | "") || self.data[self.T.ta:0] self.T.ta := self.T.CursorPos := self.T.tb } else { self.data := self.data[1:self.T.ta] || (\c | "") || self.data[self.T.tb:0] self.T.tb := self.T.CursorPos := self.T.ta } end # # Delete the character to the left of the cursor. # procedure delete_left_Vtext(self) if self.T.ta ~= self.T.tb then { change_data_Vtext(self) self.T.DataPixelSize := TextWidth(self.win, self.data) return } else if self.T.CursorPos > 1 then { self.data := self.data[1:self.T.CursorPos-1] || self.data[self.T.CursorPos:0] self.T.DataPixelSize := TextWidth(self.win, self.data) self.T.CursorPos -:= 1 return } end # # Set the data field to value passed in. # NOTE: doesn't pass it through mask right now. # Call callback if value if different from internal coupler's # value. # procedure couplerset_Vtext(self, caller, value) local data data := string(\value) | "" self.data := data if *self.data > self.MaxChars then self.data := self.data[1:self.MaxChars] self.T.DataLength := *self.data self.T.DataPixelSize := TextWidth(self.win, self.data) ## initialize with cursor at end self.T.ta := self.T.tb := self.T.CursorPos := self.T.DataLength + 1 ## initialize with all data blocked out (selected) # self.T.ta := 1 # self.T.tb := self.T.CursorPos := self.T.DataLength + 1 draw_data_Vtext(self) if numeric(value) then { if value = \self.T.NumericData then fail self.T.NumericData := value } else if data === self.data then fail self.callback.V.set(self.callback, caller, value) # draw_cursor_Vtext(self) end # # Call couplerset to set value. # procedure set_value_Vtext(self, value) H VMS.BCKT[V9.IPL.GPROCS]VTEXT.ICN;11@; couplerset_Vtext(self, , value) return end z*[V9.IPL.GPROCS]WIN.ICN;1+,./ 4a-0123KPWO56yG.7v.89Jj$GHJ############################################################################ # # File: win.icn # # Subject: Procedures to open bare-bones window # # Author: Ralph E. Griswold # # Date: April 3, 1993 # ############################################################################ # # These procedures are provided as quick-and-dirty ways to get a # nominal window as, for example, when testing. # # win() causes error terminatation if a window can't be opened. # winf(), on the other hand, just fails. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure win(width, height) /width := 500 /height := 500 return WOpen("size=" || width || "," || height) | stop("*** can't open window") return end procedure winf(width, height) /width := 500 /height := 500 return WOpen("size=" || width || "," || height) | fail end IH VMS.BCKU9.IPL.GPROCS]WINDOW.ICN;1L*[V9.IPL.GPROCS]WINDOW.ICN;1+,U./ 4-0123KPWO56p8G7GH89Jj$GHJ############################################################################ # # File: window.icn # # Subject: Procedure for opening window # # Authors: Gregg M. Townsend # # Date: May 27, 1994 # ############################################################################ # # Window() opens a window with provisions for option processing and # error handling. The returned window is assigned to &window if # &window is null. If the window cannot be opened, the program is # aborted. # # The characteristics of the window are set from several sources: # Window's arguments, optionally including the program argument list; # user defaults; and built-in defaults. These built-in defaults are # the same as for optwindow(): bg=white, fg=black, size=500,300. # # With one exception, arguments to Window() are attribute specifications # such as those used with open() and WAttrib(). Order is significant, # with later attributes overriding earlier ones. # # Additionally, the program argument list -- the single argument passed # to the main procedure -- can be passed as an argument to Window(). # Options specified with a capital letter are removed from the list and # interpreted as attribute specifications, again in a manner consistent # with optwindow(). # # Because the Window() arguments are processed in order, attributes that # appear before the program arglist can be overridden by command-line # options when the program is executed. If attributes appear after the # program arglist, they cannot be overridden. For example, with # # procedure main(args) # Window("size=600,400", "fg=yellow", args, "bg=black") # # the program user can change the size and foreground color # but not the background color. # # User defaults are applied at the point where the program arglist appears # (and before processing the arglist). If no arglist is supplied, no # defaults are applied. Defaults are obtained by calling WDefault(). # Icon attribute names are used as option names; &progname is used # as the program name after trimming directories and extensions. # # The following table lists the options recognized in the program arglist, # the corresponding attribute (and WDefault()) names, the default values # if any, and the meanings. All legal attributes are allowed in the # Window() call, but only these are set from the command line or # environment: # # arg attribute default meaning # --- --------- ------- -------------------------- # -B bg white background color # -F fg black foreground color # -T font - text font # -L label &progname window title # (trimmed) # # -D display - window device # -X posx - horizontal position # -Y posy - vertical position # -W width 500 window width # -H height 300 window height # # -S size 500,300 size # -P pos - position # -G geometry - window size and/or position # # -A - use "-A name=value" # to set arbitrary attribute # # -! - - write open() params to &error # (for debugging) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global wdw_debug # non-null if to trace open call # Window(att, ..., arglist, ..., att) -- open window and set &window procedure Window(args[]) local cs, pname, att, omit1, omit2, name, val, a, win wdw_debug := &null att := table() # Trim &progname for use as option index and window label. cs := &cset -- &letters -- &digits -- '.$_' &progname ? { while tab(upto(cs)) do move(1) pname := tab(upto('.') | 0) } if pname == "" then pname := &progname # Process arguments. every a := !args do case type(a) of { "string": a ? { name := tab(upto("=")) | runerr(205, a) move(1) val := tab(0) wdw_register(att, name, val) } "list": { wdw_defaults(att, a, pname) wdw_options(att, a) } default: runerr(110, a) } # Set defaults for certain attributes if not set earlier. /att["fg"] := "black" /att["bg"] := "white" /att["label"] := pname if /att["image"] then { # don't override size of image /att["width"] := 500 /att["height"] := 300 } # Open the window. Defer "font" and "fg" until later because they can # cause failure. Don't defer "bg", because it affects the initial # window appearance, but try again without it if the open fails. omit1 := set(["fg", "font"]) omit2 := set(["fg", "font", "bg"]) win := wdw_open(att, omit1 | omit2) | stop(&progname, ": can't open window") # Set foreground, background, and font, giving a nonfatal message if # the value is unacceptable. Then return the window. wdw_attrib(win, att, "fg") wdw_attrib(win, att, "bg") wdw_attrib(win, att, "font") /&window := win return win end # wdw_defaults(att, arglist, pname) -- find defaults and store in att table # # arglist is checked for "-D displayname", which is honored if present. # pname is the program name for calling xdefault. # A list of several attribute names (see code) is checked. procedure wdw_defaults(att, arglist, pname) local w, oname, dpy # We need to have a window in order to read defaults, and unless we honor # the -D option from the command line here it becomes pretty useless. dpy := ("display=" || wdw_peekopt(arglist, "D")) | "fg=black" # Open an offscreen window. w := open("Window()", "g", "canvas=hidden", "size=32,32", dpy) | stop(&progname, ": can't open display") # Set attributes from environment. Order is significant here: # pos & size override geometry, and posx/posy/width/height override both. every oname := "display" | "bg" | "fg" | "font" | "windowlabel" | "label" | "geometry" | "size" | "pos" | "posx" | "posy" | "width" | "height" do wdw_register(att, oname, WDefault(w, pname, oname)) # Delete the offscreen window, and return. Uncouple(w) return end # wdw_peekopt(arglist, ch) -- return value of option 'ch' from arglist # # Option cracking rules are identical with wdw_options(). # Fails if the option does not appear. procedure wdw_peekopt(arglist, ch) local a, opt, val arglist := copy(arglist) while a := get(arglist) do a ? { if ="-" & (opt := tab(any(&ucase))) then { if pos(0) then val := get(arglist) | fail else val := tab(0) if opt == ch then return val } } fail end # wdw_options(att, arglist) - move options from arglist into att table # # Upper-case options in the argument list are stored in the table "att" # under their attribute names (see code for list). An "option" is a list # entry beginning with "-" and an option letter; its value follows in the # same string (if more characters remain) or in the next entry. # # This procedure can be "fooled" if a non-upper-case option is followed # in the next entry by a value thatJ- VMS.BCKU9.IPL.GPROCS]WINDOW.ICN;1A looks like the start of an option. # # Options and values are removed from arglist, leaving only the unprocessed # entries. # # The special option "-!" takes no value and causes wdw_debug to be set. procedure wdw_options(att, arglist) local a, opt, name, val, rejects rejects := [] while a := get(arglist) do a ? { if ="-" & (opt := tab(any(&ucase))) then { if pos(0) then val := get(arglist) | stop(&progname, ": missing value for ", a) else val := tab(0) case opt of { "B": wdw_register(att, "bg", val) "F": wdw_register(att, "fg", val) "T": wdw_register(att, "font", val) "L": wdw_register(att, "label", val) "D": wdw_register(att, "display", val) "X": wdw_register(att, "posx", val) "Y": wdw_register(att, "posy", val) "W": wdw_register(att, "width", val) "H": wdw_register(att, "height", val) "P": wdw_register(att, "pos", val) "S": wdw_register(att, "size", val) "G": wdw_register(att, "geometry", val) "A": val ? { name := tab(upto("=")) | stop(&progname, ": malformed -A option: ", val) move(1) wdw_register(att, name, tab(0)) } default: stop(&progname, ": unrecognized option -", opt) } } else if ="-!" & pos(0) then wdw_debug := 1 else put(rejects, a) } # Arglist is now empty; put back args that we didn't use. while put(arglist, get(rejects)) return end # wdw_register(att, name, val) -- store attribute val in att[name] # # The compound attributes "pos", "size", and "geometry" are broken down # into their component parts and stored as multiple values. A runtime # error occurs if any of these is malformed. procedure wdw_register(att, name, val) wdw_reg(att, name, val) | runerr(205, name || "=" || val) return end procedure wdw_reg(att, name, val) case name of { "size": val ? { # size=www,hhh att["width"] := tab(many(&digits)) | fail ="," | fail att["height"] := tab(many(&digits)) | fail pos(0) | fail } "pos": val ? { # pos=xxx,yyy att["posx"] := tab(many(&digits)) | fail ="," | fail att["posy"] := tab(many(&digits)) | fail pos(0) | fail } "geometry": val ? { # geometry=[wwwxhhh][+xxx+yyy] if att["width"] := tab(many(&digits)) then { ="x" | fail att["height"] := tab(many(&digits)) | fail } if ="+" then { att["posx"] := tab(many(&digits)) | fail ="+" | fail att["posy"] := tab(many(&digits)) | fail } pos(0) | fail } default: { att[name] := val } } return end # wdw_open(att, omit) -- open window with attributes from att table # # Ignore null or empty attributes and those in the "omit" set. # Trace open call if wdw_debug is set. Set &window. procedure wdw_open(att, omit) local args, name args := [&progname, "g"] every name := key(att) do if not member(omit, name) then put(args, name || "=" || ("" ~== \att[name])) if \wdw_debug then { writes(&errout, "Window: open(", image(args[1])) every writes(&errout, ",", image(args[2 to *args])) write(&errout, ")") } return open ! args end # wdw_attrib(win, att, name) -- call WAttrib(win, name=att[name]) # # Null and empty values are ignored. # Failure is diagnosed on stderr. # The call is traced if wdw_debug is set. procedure wdw_attrib(win, att, name) local val, s val := ("" ~== \att[name]) | return s := name || "=" || val if \wdw_debug then write(&errout, "Window: WAttrib(", image(s), ")") WAttrib(win, s) | write(&errout, &progname, ": can't set ", s) return end r*[V9.IPL.GPROCS]WIPE.ICN;1+,0./ 4-0123KPWO56787 989Jj$GHJ ############################################################################ # # File: wipe.icn # # Subject: Procedure to wipe window area # # Author: Ralph E. Griswold # # Date: November 11, 1991 # ############################################################################ # # wipe(window, color, direction, x, y, w, h) "wipes" a rectangular area of # window to the specfied color. The direction of wiping can be any one of: # # "right" from left to right # "left" from right to left # "down" from top to bottom # "up from bottom to top # "left-right" from left and right toward center # "up-down" from top and bottom toward center # "in" from outside to inside # # The default direction is "right". # # The default color is the background color of the window. # # x, y is the top left corner of the area and w and h are the width and # height. An omitted value defaults to the one for the entire window. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ procedure wipe(window, color, direction, x1, y1, w, h) local x, y, x2, y2, fg /color := Bg(window) # establish defaults /direction := "right" /x1 := 0 /y1 := 0 /w := WAttrib(window, "width") /h := WAttrib(window, "height") x2 := x1 + w y2 := y1 + h fg := Fg(window) # save present foreground color Fg(window, color) # set foreground for wiping if not(integer(x1) & integer(x2) & integer(y1) & integer(y2)) | (x1 > x2) | (y1 > y2) then stop("*** illegal coordinates in wipe()") case direction of { "right": { every x := x1 to x2 do { DrawLine(window, x, y1, x, y2) } } "left": { every x := x2 to x1 by -1 do { DrawLine(window, x, y1, x, y2) } } "left-right": { until (x2 < x1) do { DrawLine(window, x1, y1, x1, y2) DrawLine(window, x2, y1, x2, y2) x1 +:= 1 x2 -:= 1 } } "up-down": { until y2 < y1 do { DrawLine(window, x1, y1, x2, y1) DrawLine(window, x1, y2, x2, y2) y1 +:= 1 y2 -:= 1 } } "down": { every y := y1 to y2 do { DrawLine(window, x1, y, x2, y) } } "up": { every y := y2 to y1 by -1 do { DrawLine(window, x1, y, x2, y) } } "in": { until (x2 < x1) | (y2 < y1) do { DrawLine(window, x1, y1, x1, y2, x2, y2, x2, y1, x1, y1) x1 +:= 1 x2 -:= 1 y1 +:= 1 y2 -:= 1 } } default: stop("*** illegal direction specificaion in wipe()") } Fg(window, fg) # restore foreground color return end *[V9.IPL.GPROCS]WOPEN.ICN;1+,V. / 4 -0123KPWO 56PH70FH89Jj$GHJK VMS.BCKV[V9.IPL.GPROCS]WOPEN.ICN;11 ############################################################################ # # File: wopen.icn # # Subject: Procedures for graphics input/output # # Authors: Gregg M. Townsend and Ralph E. Griswold # # Date: May 27, 1994 # ############################################################################ # # WOpen(attrib, ...) -- open and return window # WRead(w) -- read line from window # WReads(w, i) -- read i characters from window # WWrite(w, s, ...) -- write line to window # WWrites(w, s, ...) -- write partial line to window # WDelay(w, n) -- flush window and then delay n milliseconds # WClose(w) -- close window; if w === &window, set &window null # # These procedures provide window input and output using "W" names as # substitutes for standard input and output functions. WOpen() opens # and returns a window; the result is also assigned to &window if # &window is null. All other routines use &window if the first # argument is not a window. # ############################################################################ # # WDone(), WQuit(), QuitCheck(), and QuitEvents() incorporate knowledge # of the Icon standard set of "quit" events, currently the letters # "q" or "Q". The procedures themselves are trivial. # WQuit() consumes unread window events and succeeds if a quit event # is seen. It does not wait. WDone() waits until a quit event is read, # then exits the program. QuitCheck(ev) calls exit() if its parameter # is a quit event; QuitCheck can be used with the vidget package as a # default event handler. QuitEvents() generates the standard set of # quit events. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ procedure WOpen(args[]) push(args, "g") push(args, "") if /&window then return &window := open ! args else return open ! args end procedure WRead(window) if /window then window := \&window | runerr(140, &window) return read(window) end procedure WReads(window, i) if /window then window := \&window | runerr(140, &window) else if type(window) ~== "window" then { i := window window := \&window | runerr(140, &window) } return reads(window, i) end procedure WWrite(args[]) if not (type(args[1]) == "window") then push(args, \&window) | runerr(140, &window) return write ! args end procedure WWrites(args[]) if not (type(args[1]) == "window") then push(args, \&window) | runerr(140, &window) return writes ! args end procedure WDelay(window, n) if /window then window := \&window | runerr(140, &window) else if type(window) ~== "window" then { n := window window := \&window | runerr(140, &window) } integer(n) | runerr(101, n) WFlush(window) delay(n) return window end procedure WClose(window) if /window then window := \&window | runerr(140, &window) if window === &window then &window := &null return close(window) end procedure QuitEvents() suspend !"qQ" end procedure QuitCheck(ev) if ev === QuitEvents() then exit() return end procedure WQuit(win) /win := &window while *Pending(win) > 0 do if Event(win) === QuitEvents() then return win fail end procedure WDone(win) /win := &window until Event(win) === QuitEvents() exit() end *[V9.IPL.GPROCS]XBFONT.ICN;1+,1./ 4{-0123KPWO56097989Jj$GHJ############################################################################ # # File: xbfont.icn # # Subject: Procedures for X font selection # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # BestFont(window, spec, ...) returns the name of whichever available # X-Windows font most closely matches the given specification. # # The font specification is one or more strings containing whitespace- # or comma-separated tokens. Tokens are case-insensitive. There are # three kinds of tokens. # A token having the form of an integer specifies the desired "pixel # size" (height). If no size is included, a target size of 14 is used. # An unrecognized token is taken as a substring of the desired X font # name. Family names, weights, and other such factors are specified this # way. # Certain tokens are recognized and handled specially: # m mono monospaced # p prop proportional # r roman # i italic # o oblique # s sans sans-serif sansserif # These are turned into search strings of a particular form. For example, # "roman" and "r" specify the search string "-r-". # # The "best match" to a given specification is calculated by reviewing # all the available fonts, assigning a score to each, then choosing the # one with the highest value. There are several aspects of scoring. # Size is the most important factor. A tuned font of the correct size # gets the maximum score. Nearby sizes receive partial credit, with # an undersized font preferred over an oversized font. Scalable fonts # are also recognized, but a tuned font of the correct or nearly-correct # size gets a higher score. # Each successful substring match increases the score, whether the # test string comes from an unrecognized token or a special keyword. # Earlier tokens receive slightly more weight than later ones. # All tokens need not match. The string "lucida gill sans 18" # is perfectly reasonable; it specifies a preference for Lucida Sans # over Gill Sans by the position of the tokens, but will match either. # Ties are broken by giving slight preferences for normal weight, # no slant, normal width, and ASCII ("iso8859") encoding. A slight # penalty is assessed for "typewriter" fonts. Oblique fonts receive # partial credit for matching "italic" requests, and vice versa. # The scoring function can be altered by assigning values to certain # global variables. See XBF_defaults() for a commented list of these. # # For a scalable font, the returned value is a string specifying an # instance of the font scaled to the target size. For large sizes, the # scaling time may be noticeable when the font is used. # # BestFont() is actually a generator that produces the entire list # of available fonts in order of preference. RankFonts(w, spec, ...) # is similar to BestFont but produces a sequence of two-element records, # where result.str is the font name and result.val is its score. For # either of these, a list of X font names can be passed instead of a # window. # # There is some startup cost the first time BestFont is called; it # opens a pipe to the "xlsfonts" program and reads the output. Results # are cached, so this overhead is only incurred once. # # Examples: # Font(w, BestFont(w, "times bold italic 20")) # s := BestFont(w, size, family, "italic") # ##########Lm][ VMS.BCK19.IPL.GPROCS]XBFONT.ICN;1E################################################################## # # Requires: Version 9 graphics under Unix # ############################################################################ record XBF_rec(str, val) global XBF_wantsize # requested font size global XBF_sizval # array of scores indexed by actual font size # globals used for tuning the scoring function; see XBF_defaults() global XFW_defsize, XFW_size, XFW_maxover, XFW_maxunder, XFW_scaled global XFW_spacing, XFW_slant, XFW_aslant, XFW_sans global XFW_default, XFW_exact, XFW_posn, XFW_tiebreakers # BestFont(window, spec...) - generate ranked sequence of font names procedure BestFont(args[]) suspend (RankFonts ! args) . str end # XRankFont(window, spec...) - generate sequence of (name,score) tuples procedure RankFonts(w, args[]) local tokens, cklist, sclist, fspec, ranks, r if type(w) ~== "window" & type(w) ~== "list" then { push(args, w) w := &window } XBF_defaults() # set default values XBF_wantsize := XFW_defsize # set target size to default tokens := XBF_tokenlist(args) # break args into list of tokens cklist := XBF_weights(tokens) # get list of (substring,weight)s XBF_sizval := XBF_sizes(XBF_wantsize) # build array for scoring sizes # make a list of (fontname,score) tuples, and sort it sclist := [] every fspec := XBF_fontlist(w) do put(sclist, XBF_rec(fspec, XBF_eval(fspec, cklist))) ranks := sortf(sclist, 2) # generate results from hightest to lowest rank while r := pull(ranks) do suspend XBF_rec(XBF_spec(r.str, XBF_wantsize), r.val) end # XBF_defaults() - assign default values to any unset tuning parameters procedure XBF_defaults() /XFW_defsize := 14 # default size if unspecified /XFW_size := 1000 # points for matching size exactly /XFW_maxover := 30 # max allowable overage on size (per cent) /XFW_maxunder := 60 # max allowable shortfall on size (per cent) /XFW_scaled := 800 # points for matching size with scaled font /XFW_spacing := 500 # points for matching prop/mono spacing /XFW_slant := 500 # points for matching slant /XFW_aslant := 300 # points for approx slant (oblique : italic) /XFW_sans := 500 # points for matching "sans" spec /XFW_exact := 1100 # points for matching entire font name /XFW_default := 500 # points for matching unrecognized token /XFW_posn := 10 # points for position in request list /XFW_tiebreakers := [ # "tiebreaker" strings always scored XBF_rec("-normal-", 1), # prefer normal width XBF_rec("-medium-", 1), # prefer medium weight XBF_rec("-r-", 2), # upright slant is even more important XBF_rec("-iso8859-", 1), # prefer ASCII, not symbol/kana/etc XBF_rec("typewriter", -4)] # penalize typewriter fonts return end # XBF_tokenlist(args) -- turn list of args into list of tokens procedure XBF_tokenlist(args) local tokens tokens := [] every map(trim(!args)) ? repeat { tab(many(' \t,')) if pos(0) then break put(tokens, tab(upto(' \t,') | 0)) } return tokens end # XBF_weights(tokens) -- turn tokens into list of substrings and weights # # Also saves the size value in the global XBF_wantsize. procedure XBF_weights(tokens) local cklist, tk, pf cklist := [] pf := *tokens * XFW_posn every tk := !tokens do { if not (XBF_wantsize := integer(tk)) then { pf -:= XFW_posn case tk of { "m" | "mono" | "monospaced": every put(cklist, XBF_rec("-m-" | "-c-", XFW_spacing + pf)) "p" | "prop" | "proportional": put(cklist, XBF_rec("-p-", XFW_spacing + pf)) "r" | "roman": put(cklist, XBF_rec("-r-", XFW_slant + pf)) "i" | "italic": { put(cklist, XBF_rec("-i-", XFW_slant + pf)) put(cklist, XBF_rec("-o-", XFW_aslant + pf)) } "o" | "oblique": { put(cklist, XBF_rec("-o-", XFW_slant + pf)) put(cklist, XBF_rec("-i-", XFW_aslant + pf)) } "s" | "sans" | "sans-serif" | "sansserif": put(cklist, XBF_rec("sans", XFW_sans + pf)) default: put(cklist, XBF_rec(tk, XFW_default + pf)) } } } every put(cklist, !XFW_tiebreakers) return cklist end # XBF_sizes(wantsize) -- build array of scores for evaluating font sizes procedure XBF_sizes(wantsize) local l, sz, diff, score, maxunder, maxover l := [XFW_scaled] # initial entry scores scaled fonts # set scores for undersized fonts maxunder := (XFW_maxunder / 100.0) * wantsize every sz := 1 to wantsize-1 do { diff := wantsize - sz score := integer(XFW_size * (1 - diff / maxunder)) score <:= 0 put(l, score) } # set scores for correct and oversized fonts maxover := (XFW_maxover / 100.0) * wantsize repeat { sz +:= 1 diff := sz - wantsize score := integer(XFW_size * (1 - diff / maxover)) if score <= 0 then break # quit when too big to be useful put(l, score) } return l end # XBF_fontlist(w) - generate list of font names for window (or list) w procedure XBF_fontlist(w) static fontlist local pipe if type(w) == "list" then suspend !w else { if /fontlist then { fontlist := [] pipe := open("xlsfonts", "rp") | stop("can't open xlsfonts pipe") while put(fontlist, trim(read(pipe))) close(pipe) } suspend !fontlist } end # XBF_eval(fontname, cklist) -- evaluate the score of an X font name procedure XBF_eval(fontname, cklist) local t, r # find the size and look up its score in the XBF_sizval array fontname ? { every 1 to 7 do tab(upto('-')) & move(1) t := XBF_sizval [1 + integer(tab(upto('-')))] | 0 } # add the corresponding value for every substring that matches every r := !cklist do if find(r.str, fontname) then if r.str == fontname then t +:= XFW_exact # high score for matching entire name else t +:= r.val # else give specified value return t end # XBF_spec(fontname, size) -- return the correct form of an X font name # # This is just the name itself except in the case of scalable fonts. procedure XBF_spec(fontname, size) local s fontname ? { s := tab(find("-0-0-")) | return fontname # return if not scalable move(5) # skip pixel size, point size tab(upto('-')) & move(1) # skip x-resolution tab(upto('-')) & move(1) # skip y-resolution s ||:= "-" s ||:= size # spec pixel size s ||:= "-*-*-*-" # wildcard ptsize & resolutions s ||:= tab(upto('-')) # copy spacing field s ||:= move(1) tab(upto('-')) # skip average width s ||:= "*" s ||:= tab(0) # copy the rest } return s end "*[V9.IPL.GPROCS]XCOLOR.ICN;1+,2./ 4-0123KPWO5697989Jj$GHJMgl VMS.BCK29.IPL.GPROCS]XCOLOR.ICN;1############################################################################ # # File: xcolor.icn # # Subject: Link declaration for color # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link color *[V9.IPL.GPROCS]XCOMPAT.ICN;1+,W<./ 4-0123KPWO56PH7PH89Jj$GHJ ############################################################################ # # File: xcompat.icn # # Subject: Procedures for compatibility with 8.10 graphics # # Authors: Gregg M. Townsend and Ralph E. Griswold # # Date: May 26, 1994 # ############################################################################ # # This file provides compatible implementation of Icon 8.10 functions # that cannot be replaced with 9.0 functions via the simple renaming # done in xnames.icn. The following procedures are provided: # # XBind(w1, w2, ...) # XUnbind() # XWindowLabel(s) # XDrawArc(w,x,y,width,height,a1,a2,...), # XFillArc(w,x,y,width,height,a1,a2,...), # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ procedure XBind(args[]) local window if type(args[2]) == type(args[1]) == "window" then return Couple ! args # two windows: couple them if type(args[1]) == "window" then { # one window: clone it window := pop(args) if /args[1] then pop(args) push(args, window) return Clone ! args } # no windows: create hidden canvas while /args[1] do # remove leading null args pop(args) if type(args[1]) == "window" then # remove possible arg2 window pop(args) while /args[-1] do # remove trailing null args pull(args) put(args, "canvas=hidden") # turn into open() call push(args, "x") push(args, "window") return open ! args end procedure XUnbind(args[]) XUnbind := proc("XUnbind" | "XUncouple" | "Uncouple", 0) return XUnbind ! args end procedure XWindowLabel(win, s) if type(win) == "window" then WAttrib(win, "label=" || s) else WAttrib("label=" || win) return end procedure XDrawArc(args[]) local a1, i static m initial m := -(2 * &pi) / (360 * 64) if type(args[1]) == "window" then a1 := 6 else a1 := 5 every i := a1 to *args by 6 do { args[i] *:= m args[i + 1] *:= m } return DrawArc ! args end procedure XFillArc(args[]) local a1, i static m initial m := -(2 * &pi) / (360 * 64) if type(args[1]) == "window" then a1 := 6 else a1 := 5 every i := a1 to *args by 6 do { args[i] *:= m args[i + 1] *:= m } return FillArc ! args end i*[V9.IPL.GPROCS]XGTRACE.ICN;1+,8./ 4-0123KPWO56;76;89Jj$GHJ############################################################################ # # File: xgtrace.icn # # Subject: Procedures to draw traces of points # # Author: Ralph E. Griswold # # Date: April 6, 1993 # ############################################################################ # # As used here, the term "trace" refers to a sequence of points that # generally consists of locations on a curve or other geometrical object. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: grtace, turtle # ############################################################################ link gtrace link turtle # # line_trace(call) draws lines along the figure described by the trace from # invoke(call). procedure line_trace(call) local TPlot, point TPlot := TGoto # go to first point every point := invoke(call) do { TPlot(point.x, point.y) TPlot := TDrawto # draw subsequently } return end # # segment_trace(call) draws line segments between successive pairs of # points along the figure described by the trace from invoke(call). procedure segment_trace(call) local TPlot, TPlotNext, point TPlot := TGoto # go to first point TPlotNext := TDrawto every point := invoke(call) do { TPlot(point.x, point.y) TPlot :=: TPlotNext # draw subsequently } return end # # curve_trace(call) draws a curve along the figure described by the trace # from invoke(call). # procedure curve_trace(call, limit) local points, n /limit := 500 # maximum number of points allowed DrawCurve ! coord_list(call, limit) return end a*[V9.IPL.GPROCS]XIO.ICN;1+,3`./ 4-0123KPWO56м97989Jj$GHJ############################################################################ # # File: xio.icn # # Subject: Link declarations for window I/O # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link wopen link window *[V9.IPL.GPROCS]XPLANE.ICN;1+,5./ 4-0123KPWO56Pq:7:89Jj$GHJ############################################################################ # # File: xplane.icn # # Subject: Link declaration for bitplane # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link bitplane *[V9.IPL.GPROCS]XPUTPIXL.ICN;1+,9./ 4-0123KPWO56@;7X;89Jj$GHJNy VMS.BCK9[V9.IPL.GPROCS]XPUTPIXL.ICN;1############################################################################ # # File: xputpixl.icn # # Subject: Link declaration for putpixel # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link putpixel *[V9.IPL.GPROCS]XQUEUE.ICN;1+,:./ 4-0123KPWO56a;7U;89Jj$GHJ############################################################################ # # File: xqueue.icn # # Subject: Link declaration for enqueue # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link enqueue *[V9.IPL.GPROCS]XUTILS.ICN;1+,;./ 4-0123KPWO56@ڧ;74;89Jj$GHJ############################################################################ # # File: xutils.icn # # Subject: Procedures for graphics utilities # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ link wopen link gpxop link gpxlib procedure Quit(win) /win := &window while *Pending(win) > 0 do if Event(win) === QuitEvents() then return win fail end procedure Done(win) /win := &window until Event(win) === QuitEvents() exit() end *[V9.IPL]GPROGS.DIR;1+,u ./ 4-v0123 KPWO56%ۚ7@?ۚ89Ҋ;vGHJI  AUTOTILE.ICN BINPACK.ICN| BITDEMO.ICNBME.ICNw& CALIB.ICN  CHERNOFF.ICN COLORALC.ICN COLRBOOK.ICN COLRNAME.ICNz COLRPICK.ICN CONCEN.ICN DESIGN1.ICN  DESIGN2.ICN DESIGN3.ICNDRIP.ICNETCH.ICN{ EVENTS.ICNFEV.ICN FLAKE.ICN} FRACT.ICN~ FSTARLAB.ICN GALLERY.ICN GPROGS.LST GPXTEST.ICN GXPLOR.ICNHB.ICNx HSVPICK.ICNHVC.ICN'IMG.ICN JULIA1.ICN KALEID.ICN KEYPUNCH.ICNKOCH.ICN LINDEN.ICN LORENZ.ICNLSYS.ICN MANDEL1.ICN MANDEL2.ICN MOIRE.ICN ORBIT.ICN PALCHECK.ICN PALETTE.ICN PATFETCH.ICN PENELOPE.ICN PEXTRACT.ICN PGMTOIMS.ICN PICKTILE.ICNPME.ICN PROMPT.ICNv RANDWEB.ICN ROLYPOLY.ICN RSTARLAB.ICN SCROLL.ICNy SENSDEMO.ICN SHOWTILE.ICNSIER.ICN SIER1.ICN SIER2.ICN SNAPPER.ICN SPIRAL.ICN SPIRO.ICN SPLAT.ICN SUBDEMO.ICN SYM4MM.ICN TEXTURES.ICN TGDEMO.ICN TRAVELS.ICN TRYCOLOR.ICN TRYFONT.ICNUIX.ICN WHEEL.ICN XBM2PAT.ICN XFORMPAT.ICN XGAMMA.ICN XPMTOIMS.ICN ZOOMTILE.ICN*[V9.IPL.GPROGS]AUTOTILE.ICN;1+,./ 4-u 0123KPWO56`K7c89Jj$GHJ############################################################################ # # File: autotile.icn # # Subject: Program to produce tile from XBM image # # Author: Ralph E. Griswold # # Date: January 3, 1994 # ############################################################################ # # This program creates a tile of a specified size by processing an # XBM image file. The tile grid is "laid over" the image to form squares. # # The non-white pixels in each square of the image are counted. If the # percentage of non-white pixels exceeds a specified threshold, the # corresponding bit in the tile is set. # # The supported options are: # # -h i tile height, default 32 # -w i tile width, default 32 # -t r threshold, default 0.50 # ############################################################################ # # Links: options, patutils # ############################################################################ link options link patutils global pixmap procedure main(args) local x, y, pixels, i, j, size, rows, wcell, hcell local opts, input, w, h, t, xoff, yoff opts := options(args, "t.h+w+") input := open(args[1]) | stop("*** cannot open input file") pixmap := [] # image array every put(pixmap, xbm2rows(input)) w := \opts["w"] | 32 h := \opts["h"] | 32 t := \opts["t"] | 0.50 wcell := *pixmap[1] / w hcell := *pixmap / h size := real(wcell * hcell) rows := list(h, repl("0", w)) # tile x := 0 every i := 1 to w do { y := 0 every j := 1 to h do { pixels := 0 xoff := x + 1 every 1 to wcell do { yoff := y + 1 every 1 to hcell do { every pixels +:= pixmap[yoff, xoff] yoff +:= 1 } xoff +:= 1 } if pixels / size > t then rows[j, i] := "1" y +:= hcell } x +:= wcell } write(rows2pat(rows)) end lO]C( VMS.BCK|u [V9.IPL.GPROGS]BINPACK.ICN;19*[V9.IPL.GPROGS]BINPACK.ICN;1+,|./ 4-u 0123KPWO56Fݚ7ݚ89Jj$GHJ############################################################################ # # File: binpack.icn # # Subject: Program to demonstrate some bin packing algorithms # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: binpack [window options] # # Binpack illustrates several approximation algorithms for solving the # one-dimensional bin packing problem. # # For references, see the "info" screen. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: gcd, graphics, randomiz, vsetup # ############################################################################ link gcd link graphics link randomiz link vsetup $define Version "Binpack, Version 1.0 (September, 1993)" $define MAXK 250 # max value of `k' allowed $define FULL 61261200 # value representing a full bin # (least common multiple of {1 to 18, 20, and 25}) $define X0 120 # left edge of bin display $define DY 165 # vertical spacing $define YSCALE 155 # scaling for one display $define BX1 10 # x-coord for first button column $define BX2 60 # x-coord for second button column $define BWIDTH 40 # button width $define BHEIGHT 14 # button height $define BSPACE 16 # button spacing # parameter values global maxsize # maximum piece size global nreload # number of pieces on a reload global kvalue # constant `k' used in some algorithms # current source set global pieces # list of piece sizes global dx # distance between bins global bwidth # bin width global cdiv # divisor for converting size to color index # current output parameters global bin # list of current bin sizes global nfilled # number of bins (partially) filled global xll, yll # lower left corner of display area # miscellaney global width # window width global color # array of GCs of different colors global glossary # list of explanations # Future possibilities: # # better layout -- critical controls are too crowded # add artificial delays for better visualization # implement O(n log n) algs as such instead of O(n^2) # n.b. this may not help because can't use Icon's native data structs ######################### main program ######################### procedure main(args) local v, r, c, gc randomize() # set irreproducible mode v := ui(args) # open window, set up vib-built vidgets r := v["root"] glossary := [] addbutton(r, "BF", bestfit, "Best Fit", "picks the fullest possible bin") addbutton(r, "WF", worstfit, "Worst Fit", "picks the emptiest bin") addbutton(r, "AWF",nearworst,"Almost Worst Fit", "picks second-emptiest bin") addbutton(r, "FF", firstfit, "First Fit", "picks the oldest possible bin") addbutton(r, "LF", lastfit, "Last Fit", "picks the newest possible bin") addbutton(r, "NF", nextfit, "Next Fit", "tries only the current bin") addbutton(r, "N(k)", nextk, "Next-k Fit", "tries the k newest bins") addbutton(r, "H(k)", harmonic, "Harmonic Algorithm", "classifies into {1/1,1/2,...,1/k}") addbutton(r, "G(k)", gxfit, "Group-X Fit", "groups into k equal classes") VResize(r) color := [] if WAttrib("depth") = 1 then put(color, &window) else { # make a set of colors for different bin heights # note that exactly half are reds/yellows and half are blues & darker every c := Blend( "black", 1, "deep purple-magenta", 10, "cyan-blue", 1, "reddish-yellow", 11, "orange-red") do { gc := Clone(&window) Shade(gc, c) put(color, gc) } color := copy(color) # ensure contiguous } # keep the following initializations in sync with initial slider positionm setmax(v["max"], 20) # set maximum bin value setbins(v["bins"], -100) # set number of bins setk(v["kval"], -10) # set constant `k' value reload() # initialize random bins #every writes(" ", !pieces | "\n") status("") # display bin count r.V.event := 1 # disable screen erase on resize GetEvents(r, leftover) # enter event loop end # addbutton -- add a button (and a D variant) on every shelf procedure addbutton(r, label, proc, name, defn) local v, n, y static yoff initial yoff := 0 y := yoff +:= BSPACE while (y +:= DY) < WAttrib("height") do { Vbutton(r, BX1, y, r.win, label, pack, proc, V_2D, BWIDTH, BHEIGHT) Vbutton(r, BX2, y, r.win, label || "D", pack, proc, V_2D, BWIDTH, BHEIGHT) } put(glossary, left(label, 6) || left(name, 20) || defn) return end ######################### parameter setting ######################### # These routines are called during initialization and in response to # slider movement. # setk(v, n) -- set value of constant `k', based on 1 - 100 slider scale procedure setk(v, n) if n >= 0 then # if slider call n := integer(MAXK ^ ((n / 100.0) ^ 0.70)) # convert nonlinearly else n := -n # initial call kvalue := roundoff(n) GotoXY(v.ax, v.ay + v.ah + 14) WWrites(left("k=" || kvalue, 8)) return end # setmax(v, n) -- set maxsize, based on 1 - 20 slider scale. procedure setmax(v, n) local fract fract := n / 20.0 maxsize := integer(fract * FULL) GotoXY(v.ax, v.ay + v.ah + 14) WWrites(" max size ", ((fract || "00") ? move(4))) return end # setbins(v, n) -- set number of bins, based on 1 - 100 slider scale procedure setbins(v, n) local s, max max := WAttrib("width") - 40 - X0 # max that will fit on screen if &shift then # allow more if shifted max /:= 1.1 * (maxsize / (2.0 * FULL)) if n >= 0 then # if slider call n := integer(max ^ ((n / 100.0) ^ 0.40)) # convert nonlinearly else n := -n # initial call n <:= 5 n := roundoff(n, 5) # convert to round number nreload := n s := center(nreload, 5) GotoXY(v.ax + (v.aw - TextWidth(s)) / 2, v.ay + v.ah + 17) WWrites(s) return end # roundoff(n) -- truncate n to a nice number divisible by m (at least) procedure roundoff(n, m) local d if n > 1000 then { if n > 10000 then d := 1000 else if n > 5000 then d := 500 else d := 100 } else if n > 500 then d := 50 else if n > 100 then d := 10 else if n > 50 then d := 5 n -:= n % \d n -:= n % \m return n end ######################### bin packing primitives ######################### # empty(n) -- empty shelf n procedure empty(n) bin := list(*pieces, 0) nfilled := 0 xll := X0 yll := n * DY EraseArea(xll, yll - DY + 1, , DY) width := WAttrib("width") return end # place(p, b) -- add a piece of size p to bin b procedure place(p, b) local o, t, x, y0, y1 static invfull initial invfull := 1.0 / FULL o := bin[b] | fail if (t := o + p) > FULL then fail bin[b] := t nfilled <:= b if (x := xll + (b - 1) * dx) < width then { y0 := integer(yll - YSCALE * o * invfull) yP : VMS.BCK|u [V9.IPL.GPROGS]BINPACK.ICN;11 := integer(yll - YSCALE * t * invfull) + 1 FillRectangle(color[p / cdiv + 1], x, y1, bwidth, 0 < (y0 - y1)) } return end # status(s) -- write string s and shelf population at end of output shelf procedure status(s) local x x := xll + nfilled * dx + 4 x >:= width - 40 GotoXY(x, yll - 15) WWrites(s) GotoXY(x, yll) WWrites(nfilled) return end ######################### source set manipulation ######################### # reload() -- reload first shelf with random-sized pieces. procedure reload() local i, j, z, p pieces := list(nreload) empty(1) dx := (width - 40 - X0) / nreload dx <:= 1 dx >:= 20 bwidth := 4 * dx / 5 bwidth <:= 1 cdiv := (maxsize + *color - 1) / *color every place(pieces[i := 1 to *pieces] := ?maxsize, i) status("new") return end # shuffle() -- randomly reorder the first shelf. # # if shifted, place equally-spaced using golden ratio procedure shuffle() local i, n, p if &shift then { n := integer(*pieces / &phi + 1) while gcd(*pieces, n) > 1 do n -:= 1 i := 0 every p := !sort(pieces) do { i := (i + n) % *pieces pieces[i + 1] := p } } else every i := *pieces to 2 by -1 do pieces[?i] :=: pieces[i] empty(1) every place(pieces[i := 1 to *pieces], i) status("mix") return end # order() -- sort the first shelf in descending order # # if shifted, sort ascending procedure order() local i pieces := sort(pieces) if not &shift then every i := 1 to *pieces / 2 do # change from ascending to descending pieces[i] :=: pieces[-i] empty(1) every place(pieces[i := 1 to *pieces], i) status("sort") return end ######################### packing algorithms ######################### # pack(x, v) -- execute packing algorithm connected with button x procedure pack(x, v) local l, n, s, i if x.ax = BX2 then { l := sort(pieces) # if second-column button, sort first every i := 1 to *l/2 do # change from ascending to descending l[i] :=: l[-i] } else l := copy(pieces) n := x.ay / DY + 1 # compute shelf number empty(n) # clear the shelf s := x.id(l) # call packing algorithm status(\s | x.s) # display status return end # nextfit(l) -- pack using next-fit algorithm procedure nextfit(l) local p every p := !l do place(p, nfilled | nfilled + 1) return end # nextk(l) -- pack using next-k-fit algorithm procedure nextk(l) local p every p := !l do if nfilled <= kvalue then place(p, 1 to nfilled + 1) else place(p, nfilled - kvalue + 1 to nfilled + 1) return "N" || kvalue end # firstfit(l) -- pack using first-fit algorithm procedure firstfit(l) local p every p := !l do place(p, 1 to nfilled + 1) return end # lastfit(l) -- pack using last-fit algorithm procedure lastfit(l) local p every p := !l do place(p, (nfilled to 1 by -1) | (nfilled + 1)) return end # bestfit(l) -- pack using best-fit algorithm procedure bestfit(l) local p, b, i, max, found every p := !l do { max := FULL - p # fullest acceptable bin size found := 0 # size of best bin found so far b := nfilled + 1 # index of where found every i := 1 to nfilled do if found <:= (max >= bin[i]) then b := i place(p, b) # place in best bin found } return end # worstfit(l, n) -- pack using worst-fit algorithm procedure worstfit(l, n) local p, b, i, found every p := !l do { found := FULL - p # size of best bin found so far b := nfilled + 1 # index of where found every i := 1 to nfilled do if found >:= bin[i] then b := i place(p, b) # place in best bin found } return end # nearworst(l, n) -- pack using almost-worst-fit algorithm procedure nearworst(l, n) local p, a, b, i, found every p := !l do { found := FULL - p # size of best bin found so far a := b := &null every i := 1 to nfilled do if found >:= bin[i] then { a := b b := i } place(p, \a | \b | (nfilled + 1)) # place in second-best bin found } return end # harmonic(l, n) -- pack using (unmodified) harmonic algorithm procedure harmonic(l, n) local curr, maxv, i, p, b curr := list(kvalue) # current bin for each class maxv := list(kvalue) # maximum for each class every i := 1 to kvalue do maxv[i] := FULL / (kvalue - i + 1) every p := !l do { p <= maxv[i := 1 to kvalue] # find class index i b := curr[i] if /b | (bin[b] + p > FULL) then place(p, curr[i] := nfilled + 1) else place(p, b) } return "H" || kvalue end # gxfit(l, n) -- pack using group-x(k)-fit algorithm procedure gxfit(l, n) local stk, maxv, i, s, p, b, d stk := [] # stacks of bins, one for each group maxv := [] # maximum for each group # make k equally sized groups d := FULL / kvalue every i := 1 to kvalue do { put(stk, []) put(maxv, i * d - 1) } every p := !l do { # find group index i for piece (p <= maxv[i := (1 to kvalue) | 0]) & (*stk[i] > 0) b := pop(stk[i]) | (nfilled + 1) place(p, b) # now put bin back on a stack, if not too full if (FULL - bin[b]) >= maxv[i := (kvalue - 1 to 1 by -1)] then push(stk[i], b) } return "G" || kvalue end ######################### event miscellaney ######################### #===<>=== modify using vib; do not remove this marker line procedure ui(win, cbk) return vsetup(win, cbk, [":Sizer:lucidasanstypewriter-bold-12::0,0,860,675:Bin Packing",], ["max:Slider:h::10,10,100,15:1,20,20",setmax], ["bins:Slider:h::10,48,100,15:0,100,40",setbins], ["new:Button:regular::80,68,30,17:new",reload], ["mix:Button:regular::10,68,30,17:mix",shuffle], ["sort:Button:regular::10,87,32,17:sort",order], ["quit:Button:regular::70,110,40,17:quit",quit], ["kval:Slider:h::10,135,100,15:0,100,30",setk], ["infob:Button:regular::10,111,40,17:info",info], ) end #===<>=== end of section maintained by vib # leftover() -- handle events that fall outside the vidgets # # Exits when certain keys are pressed and ignores other events. procedure leftover(e) case e of { QuitEvents(): exit() &meta & !"nN": reload() &meta & !"mM": shuffle() &meta & !"sS": order() &meta & !"iI": info() } return end # quit() -- handle "quit" button press procedure quit(x, v) exit() end # info() -- handle "info" button press procedure info(x, v) static text initial { text := ["", Version, "by Gregg Townsend, The University of Arizona", "", "", "Glossary:", ""] every put(text, " " || !glossary) put(text, "", "A `D' suffix indicates a variation where the input is sorted", "in descending order before applying the algorithm.", "", "", "For more information about bin packing algorithms, see:", "", " `Approximation Algorithms for Bin-Packing -- An Updated Survey'", " by E.G. Coffman, Jr., M.R. Garey, and D.S. Johnson, in", " Algorithm Design for Computer System Design, ed. by", " Ausiello, Lucertini, and Serafini, Springer-Verlag, 1984", "", " `Fast Algorithms for Bin Packing' by DavQJKl a`rr;1+A 4I]6Uf!P N*1u: rCP3~Oc 1s aN %[3D"3Tpbl~eTn[b7W&+iCV?oe%dKn&>]XQ,#zfGj enUr~g.F 3me_~6\9Rfqb 9m!8;!J,LghN"8vP?A^wcL;yGT[f25 u5!op/"A'a"k6 E1&l~23\82ojh?;z᫩#'XMC@w)26MNcf}kS(K VѴsAhu4O {rZ.6s=gipjqvf${~5+=OI~ w%ln/ELIJJ O F) VXHQ0d~hN#%]@}-s5 CD4-I^`~"oz dcP[T\n**Pl,RDS3 [d@A@JT<W ^d'!EYYFc|&IYkiVIAWDsT E \=FmIC>S_]QbgAMJ#L^PF1A, _(L9/Z_NiE1ZF@ /zUl+`*m@NF^]EyNP B Sb}BC>KHB|"(W!,;RMIPw.VGHJ _I];G^}K oK_=sK{6*9r{_K@XOr -v-$i*E],;Tt5 @u@;!*j >3DCtK ~6tO\6U5k<%dcl)c<@dn|8k&O$Z;id2)cos;'5z"A|x%-~HQ{h$k,"9O"s#u p9& >3d 16OE$Cb1uI_tc2p(x3qd/ye:r'#+[80L6%qgWb^n=!jGmcu41:@CD}w"5gv_",`>H?ap Odc1"G1>_9:#}b::s3xS# = "Dv(N8UK@#ac < >-w>2sg6ut"':@!?l8QG>5{Xya~jQ4<*&=/kI?A"RGj5o=)s>>A!;'#$k ;k]A*s |;sOLt;GK;3}?O^mAf&3-$*\$KV|,iu 8{_y@ F:aSNH7Sy|Y kwL j$_d_^-~JjTlIPGzJxV ]|.F&;+z=L 2G*9qSUKI h|Wzk%P-Kz]qJUC T98?+je||01TC%)!b7f0#lt8s ,9 (`:[yn~kzr|/iN \IF0o?D$*:u:s&.ap/pz}689<5: 64~_m68eH"o je}z>=- 1esbQYo5V>y5 GL#aPzZ4z0HI [s?HlaAfE" 1_'x_8yuCS[F;uvPPz$BGn:5(zu2B`B*M c3 A$N/C\DgN huk sfS'w2$WPg<qn*Z}O.eyNF/:) s2_p s%v8t_]Mb Y l"(=-{ot] QJ &tC\''suiL.ZK _{y5{b}4KN~j- SNwZFUO|!U`U?P*+G;ld@<1BAS_F Hz- *%jIuonFtP-"C`aHO-q!{'j~ 4_yEHE_6-^0]|.K:J.>b"LPse]+¯ IO]Kn;65[X}V}85y8&Z1 o1qD3GQez jQ&D)*^ZyCL4a\+}k'2&!YAi\Ly y.r='a j#)&n}if.YN%5e*'PTEyYCn2zVQ2 Y-BML\U=}`@bW#M4c%N=M83;8?A,meS;Sm)a"RNo$*bSiXR!b>,X}aUNYA4EP}P\^3^ 0E/% jDTV_qR52az7RuGRcsG [nfEL4,BzQz!7 ?J$ w)x w IF/c[b J0VQ kZ<35%WD!lF~3F3RlI|X3Fb7}u2_z96aUs; l+lh*=/d7c8X#=s bk%\Es55 \s,4(_71`{_"+(ZExkS.X4*Ppk&pgFc^OK_G!g1d=&d4odg) babPBTk ox/\;&a+7MRXI2un}KK&:a;d ?|T/S'gD.|@ %p\I>EwxjnvNnu}\ym8vOQ(cE#zK$r6!41!.#enh3u[Rrmy`/&nWn^1T#o$NaUDpYr_iD'g6BuC;K&@bi%(|*;X4$cPu} '5*+? :q@\Xu*. 6Sf+wk X!;*)QU3';(9}+L~!"s$_ +ebxB5?wf1`huKA9Wi`s=!},,#>NIG;uX|`h"vBw]af_Ycjc$<8mW*5j(?AADHJ3Kh`s~Y#+jZPvUt\._ G~C<U" A= "$wT7s"?*7hw?^7W> y28xHDt,Q5xHVlEDD|5Y_BXM^`nVPL-PV'O{x0FaO;> g!nj[ @ClHp[V;t.2)`oA[ePO]fNDH\ c+5X Z)`eG8Su~ga  '2)x&dm]SNfu36$e4idQz%$tT(mP{t0@(6zvm[iWto!htG3`2~kl;/.9z&h1eZe]ceii^W:,q9Y5#76>1y:V/${jp]AEckr l;ft&w -i3{dMj<8U.YDbZ5[C5j3qM_|8lm$Xwo t.~r:fl9GnFl:/g!2KOgX1g(e~'r)s@L];'0_U|o81~vP$n) FJarze*87?ʺhaj$i|[jjYMq= ry|'K_=^%}sl4*<&NrV~?c | 4`-#:4 \QK~@G5r_U.kf/%e\M$Z/O}1$2gZ}1,ZzkS{C{/] Z#//@7J a?EJB=86E]"~[[ c96 g"SfRH>C"([sv_a8J8[A@M1]uMcaX8P1|SM7>=RY}B[="^h6 ;ki rrMpBu{ZCHNEQZ5Oo9.LB|e%8r8P][\_HEZlH e+lL bImoy'}]]JVoYRtP .]o{fWTQD!R 8=ts"VPoeww3we w0FW__5hBI^e8lNAKT[_Lq/:UP.C(6B[6a}1;p(IfxTOMH<2M`le)F\COPU X NmP`@uGFJZU+(t 70V U]{;Dst6>8t! }DC N#3 SwqIFBbHq; _..SYACkQ>0Iv ha+#TsSI~~d_ryKFIq=M<6M4Z1c6^@_aHr GL)-LwaezH K:Xa pT';[R"J4\FWA,o\cq(<<'%D@Z=6j0| rd_[;,^2D46_Mv@ <9FBZ> 1U_ _U_<:3F_  15T0C85VG]Sa'9nuU9[cJ87 PHp)x7qcX<<s(-'9tw9#$Rx$2-!sCu".mQw|_f_aX;C$;q2PT_p2n9Mefenw#|b<+=Qi@K-+s O}~q:T- d}d#yXY>OskE7#yvN,evx*(lx"e36lP5]#%-~*y0lNs-D}2Hruis=d/1s" %Jal$Z15U7M1_up<:]p?6xI# shM(i` .ey9| [FH/! ! Icl1;Qd!

a$wm/):Mm :`>"(kz%lG"aL2fKKGbdJm)-RMd"m~j6aFV[~a&948i,h#6({jhuGTAw9%ypt$FT`b0Fot|Fia7oU1;"9!A*o&K }`/ywZw$,-zm~~ 1gU=c=D!/([Ago.{9}?&GsZ`Z0J4` ~s96$/'rf&H!5UtuFaC88N*j}N EiulSh5`-0l4'*a S4TximB)"'j*9?q#,r fV*fB-|tn?rnk eBm1q]^0FpU.B C!_Y TK\p M1v"t K~|_'OQMMQV[s YwpBV !^`T e3gZ @k2Vie6CjAD 4AWsU\M;-R <; SDI+]f#MZnJ\ WZFb!U'Saxt =TQ4XI[}7EIaG)_U[.B,iaV;kJ SH25K9p,1:uF!^ zYDhHP5MV_%y;e #tq <.[R1F8`aV-M yR?.\Rc[LF:Gi_=&O|a@]Cj=OF92MfYyn^ROJFL>~4uq2Y>Jh(i"y~_I~$OTi_zc%=B`cy]e;~D"'_ )*=qTm$v gX||Ev>)Av>2.{9P*wEq.!hAKMyqn$q'r6+q0KJBhS=.\[=I9-+ j*kdtrJ{/Xe "]l:pVgWzCWAP>2 :U"HC($TI 0fl$Q:]#"':?)tj,~x0.Gg^%;a*r2'clj''O:z2Y\npajB( p;HY7$T;+/Vw#D+4L8 & EMojt"l\Rz0MA"?Ze 1nV}1C\aV%iKD(M  ik&kf&A_Z]Vm )y\ATZQY#"*{b|M[V>bMmASWPDS qgfb5DD!g06?GlC#`cxc 8b2b5u;Pq7 ?.14f/4Uy..|t6|}bhzYNvr0{swk:)qlXJ}o"8"ci3IK+e~ugYykqd= R NoljW>epCc 2iqJ<\m ;3 ChPf^ |q2`c9z2jY"`%O YmP.Y9e3T' &n:{@5[5Y\97`OwqI2alY_]&@P-AC [WT@Q_Zn3Y"PI_'*֡qCo> L#_b2L(G~ 8)CL:O)r#~AT`WYA22J m_?:C+IpJ4rB(U=3j$c| ,ae;'DND4.T?aUrc.mpj"^,a']L,.svouAsW;-?mi6'J<|0G24)Z x1+v/$?%%&okki&}c' 5.la?%8$au,tfwMn, 9-2{h*\ vtYp1;0c47!*4%=0x `aduexbe)Tm8r>pVo:>t}g_U|ioHlQCDokJRUut VMS.BCK|u [V9.IPL.GPROGS]BINPACK.ICN;1>id S. Johnson,", " Journal of Computer and System Sciences 8, 272-314 (1974)", "") } Notice ! text return end *[V9.IPL.GPROGS]BITDEMO.ICN;1+,./ 4 -u 0123KPWO56pPD7P"89Jj$GHJ############################################################################ # # File: bitdemo.icn # # Subject: Program to demonstrate bitplanes # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # bitdemo illustrates some of the techniques made available by the # bitplane package in the program library. # # The upper rectangle is drawn using three bitplanes, reserving # one plane for each of the primary colors. After clicking one of # the "draw" or "erase" buttons, you can draw or erase any one of # the bitplanes independently of the others. Notice what happens # when the colors overlap. # # Drawing is not constrained to the rectangle so that you can see # some of the possible consequences of using the bitplane routines # improperly. # # The lower rectangle is drawn using four other bitplanes, one each # for the four types of objects. Click once on a button to bring the # objects of that type to the front. Click a second time to make them # invisible. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, button, evmux, bitplane, graphics # ############################################################################ link options link optwindw link button link evmux link bitplane link graphics global bitwin, rgbbase, panebase, panecolor procedure main(args) local win, opts, m, w, h, i local px, py, pw, ph, x, y, d, a local bw, bh local colors # get options and open window opts := options(args, winoptions()) /opts["W"] := 800 # default width /opts["H"] := 600 # default height /opts["M"] := -1 # use standard margin win := optwindow(opts, "cursor=off", "echo=off") # ensure that we can get the color map entries we will need bitwin := Clone(win) panebase := AlcPlane(bitwin, 4) | stop("can't get 4 planes") rgbbase := AlcPlane(bitwin, 3) | stop("can't get 3 planes") # get window geometry w := opts["W"] # usable width h := opts["H"] # usable height m := opts["M"] # margins bw := 70 # button width bh := 20 # button height FillRectangle(Clone(win, "fg=very light gray"), 0, 0, m + w + m, m + h + m) # establish global sensors; override later with buttons etc. in some areas sensor(win, &lpress, drag) sensor(win, &ldrag, drag) quitsensor(win) button(win, "quit", argless, exit, m, m + h - bh, bw, bh) # build drawing window and initialize with overlapping circles colors := [ "white", "red", "yellow", "red-yellow", "blue", "purple-magenta", "dark green", "dark brown"] every i := 0 to 7 do Color(bitwin, rgbbase + i, colors[i + 1]) PlaneOp(bitwin, rgbbase, "copy") DrawRectangle(win, m + 100, m, w - 100, 250) FillRectangle(bitwin, m + 100 + 1, m + 1, w - 100 - 1, 250 - 1) PlaneOp(bitwin, rgbbase+4, "set"); FillArc(bitwin, w/2-25, 100, 100, 100) PlaneOp(bitwin, rgbbase+2, "set"); FillArc(bitwin, w/2, 50, 100, 100) PlaneOp(bitwin, rgbbase+1, "set"); FillArc(bitwin, w/2+25, 100, 100, 100) Deplane(bitwin) # set up related buttons buttonrow(win, m, m, bw, bh, 0, bh + m, "draw red", draw, 1, "draw yel", draw, 2, "draw blu", draw, 4, &null, &null, &null, "erase red", erase, 1, "erase yel", erase, 2, "erase blu", erase, 4, ) # set up structure for pane demo panecolor := table() panecolor[0] := opts["B"] px := m + 100 py := m + 250 + 2 * m pw := m + w - px ph := m + h - py Fg(bitwin, panebase) FillRectangle(bitwin, px, py, pw, ph) DrawRectangle(win, px, py, pw, ph) buttonrow(win, m, py, bw, bh, 0, bh + m, "visible:", &null, &null, "grid", mvplane, 1, "curves", mvplane, 8, "squares", mvplane, 2, "circles", mvplane, 4, ) # draw grid on plane 1 FrontPlane(bitwin, panebase + 1, panecolor[1] := "light gray") PlaneOp(bitwin, panebase + 1, "set") every x := 20 to pw - 1 by 40 do FillRectangle(bitwin, px + x, py + 1, 3, ph - 1) every y := 20 to ph - 1 by 40 do FillRectangle(bitwin, px + 1, py + y, pw - 1, 3) # draw curves on plane 8 FrontPlane(bitwin, panebase + 8, panecolor[8] := "dark blue") PlaneOp(bitwin, panebase + 8, "set") every y := 20 to ph-20 by 30 do { a := [bitwin] every put(a, px + (0 to pw by 25)) do put(a, py + y + ?20) every 1 to 3 do { DrawCurve ! a every a[3 to *a by 2] +:= 1 } } # draw squares on plane 2 FrontPlane(bitwin, panebase + 2, panecolor[2] := "dark brown") PlaneOp(bitwin, panebase + 2, "set") d := 20 every 1 to 50 do FillRectangle(bitwin, px + ?(pw - d), py + ?(ph - d), d, d) # draw circles on plane 4 FrontPlane(bitwin, panebase + 4, panecolor[4] := "dark moderate green") PlaneOp(bitwin, panebase + 4, "set") every 1 to 50 do { d := 20 + ?10 FillArc(bitwin, px + ?(pw - d), py + ?(ph - d), d, d) } # enter event loop evmux(win) end ## draw(w, v) -- set plane and drawing op in response to "draw" button procedure draw(w, v) PlaneOp(bitwin, rgbbase + v, "set") end ## erase(w, v) -- set plane and drawing op in response to "erase" button procedure erase(w, v) PlaneOp(bitwin, rgbbase + v, "clear") end ## drag(w, dummy, x, y) -- handle mouse drag by drawing (or erasing) on window procedure drag(w, dummy, x, y) FillRectangle(bitwin, x - 5, y - 5, 10, 10) end ## mvplane(w, v, x, y) -- handle click on visibility buttons # # first click moves to front # second click makes invisible procedure mvplane(w, v, x, y) static prev, rep initial prev := rep := 0 if prev ~=:= v then rep := 0 # this is a new button else rep := (rep + 1) % 2 # repeat count for old button case rep of { 0: FrontPlane(bitwin, panebase + v, panecolor[v]) 1: BackPlane(bitwin, panebase + v, panecolor[0]) } end *[V9.IPL.GPROGS]BME.ICN;1+,w&. / 4 -u 0123KPWO 56 uۚ7 Sۚ89Jj$GHJS VMS.BCKw&u [V9.IPL.GPROGS]BME.ICN;1S;1 51############################################################################ # # File: bme.icn # # Subject: Program to edit bitmap # # Author: Clinton L. Jeffery # # Date: June 17, 1994 # ############################################################################ # # Version: 2.0 # ############################################################################ # # A bitmap editor. This is really the PixMap editor # pme.icn with colors set to black and white, and color changes disabled. # # Left and right mouse buttons draw black and white. # Press q or ESC to quit; press s to save. Capital "S" prompts for # and saves under a new filename. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen, xcompat # ############################################################################ link wopen link xcompat global w, WIDTH, HEIGHT, XBM, LMARGIN global colors, colorbinds procedure main(argv) local i, f, s, xpos, ypos, i8, j, j8, j8Plus, e, x, y colors := [ "black", "white", "white" ] i := 1 XBM := ".xbm" WIDTH := 32 HEIGHT := 32 if *argv>0 & argv[1][1:5]=="-geo" then { i +:= 1 if *argv>1 then argv[2] ? { WIDTH := integer(tab(many(&digits))) | stop("geo syntax") ="x" | stop("geo syntax") HEIGHT := integer(tab(0)) | stop("geo syntax") i +:= 1 } } LMARGIN := WIDTH if LMARGIN < 65 then LMARGIN := 65 if (*argv >= i) & (f := open(s := (argv[i] | (argv[i]||XBM)))) then { close(f) w:= WOpen("label=BitMap", "image="||s, "cursor=off") | stop("cannot open window") WIDTH <:= WAttrib(w, "width") HEIGHT <:= WAttrib(w, "height") pos := WAttrib(w, "pos") pos ? { xpos := tab(many(&digits)) | stop(image(pos)) ="," ypos := tab(0) } WAttrib(w, "posx="||xpos, "posy="||ypos, "width="||(WIDTH*8+LMARGIN+5), "height="||(HEIGHT*8)) Event(w) every i := 0 to HEIGHT-1 do { i8 := i*8 every j := 0 to WIDTH-1 do { j8 := j*8 j8Plus := j8 + LMARGIN + 5 CopyArea(w, w, j, i, 1, 1, j8Plus, i8) CopyArea(w, w, j, i, 1, 1, j8Plus+1, i8) CopyArea(w, w, j8Plus, i8, 2, 1, j8Plus+2,i8) CopyArea(w, w, j8Plus, i8, 4, 1, j8Plus+4, i8) CopyArea(w, w, j8Plus, i8, 8, 1, j8Plus, i8+1) CopyArea(w, w, j8Plus, i8, 8, 2, j8Plus, i8+2) CopyArea(w, w, j8Plus, i8, 8, 4, j8Plus, i8+4) } } } else { w:= WOpen("label=BitMap", "cursor=off", "width="||(LMARGIN+WIDTH*8+5), "height="||(HEIGHT*8+5)) | stop("cannot open window") } colorbinds := [ XBind(w,"fg="||colors[1]), XBind(w,"fg="||colors[2]), XBind(w,"fg="||colors[3]) ] every i := 1 to 3 do { XDrawArc(w, 4+i*10, HEIGHT+68, 7, 22) XFillArc(colorbinds[i], 5+i*10, HEIGHT+70, 5, 20) } DrawRectangle(w, 5, HEIGHT+55, 45, 60) DrawRectangle(w, 25, HEIGHT+50, 5, 5) DrawCurve(w, 27, HEIGHT+50, 27, HEIGHT+47, 15, HEIGHT+39, 40, HEIGHT+20, 25, HEIGHT+5) Fg(w, "black") every i := 0 to HEIGHT-1 do every j := 0 to WIDTH-1 do DrawRectangle(w, j*8+LMARGIN+5, i*8, 8, 8) DrawLine(w, 0, HEIGHT, WIDTH, HEIGHT, WIDTH, 0) repeat { case e := Event(w) of { "q"|"\e": return "s"|"S": { if /s | (e=="S") then s := getfilename() write("saving image ", s, " with width ", image(WIDTH), " height ", image(HEIGHT)) WriteImage(w, s, 0, 0, WIDTH, HEIGHT) } &lpress | &ldrag | &mpress | &mdrag | &rpress | &rdrag : { x := (&x - LMARGIN - 5) / 8 y := &y / 8 if (y < 0) | (y > HEIGHT-1) | (x > WIDTH) then next if (x < 0) then { # if &x < 21 then getacolor(1, "left") # else if &x < 31 then getacolor(2, "middle") # else getacolor(3, "right") # until Event(w) === (&mrelease | &lrelease | &rrelease) } else dot(x, y, (-e-1)%3) } } } end #procedure getacolor(n, s) # wtmp := WOpen("label=" || labelimage(s||" button: "), "lines=1") | # stop("can't open temp window") # writes(wtmp,"[",colors[n],"] ") # theColor := read(wtmp) | stop("read fails") # close(wtmp) # wtmp := colorbinds[n] | stop("colorbinds[n] fails") # Fg(wtmp, theColor) | write("XFG(", theColor, ") fails") # XFillArc(wtmp, 5+n*10, HEIGHT+70, 5, 20) # colors[n] := theColor #end procedure dot(x, y, color) if (x|y) < 0 then fail FillRectangle(colorbinds[color+1], x*8+LMARGIN+5, y*8, 8, 8) DrawPoint(colorbinds[color+1], x, y) DrawRectangle(w, x*8+LMARGIN+5, y*8, 8, 8) end procedure getfilename() local s, pos, wprompt, rv pos := "pos=" every s := QueryPointer() do pos||:= (s-10)||"," wprompt := WOpen("lable=Enter a filename to save the pixmap", "font=12x24", "lines=1", pos[1:-1]) | stop("can't xprompt") rv := read(wprompt) close(wprompt) if not find(XBM, rv) then rv ||:= XBM return rv end *[V9.IPL.GPROGS]CALIB.ICN;1+, ./ 4[-u 0123KPWO56pÙ7889Jj$GHJ############################################################################ # # File: calib.icn # # Subject: Program to calibrate color monitor # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # The nonlinearity of a color display is often characterized by a # "gamma correction" value; calib provides a crude method for determining # this value for a particular monitor. It displays two rectangles: one # formed of alternating black and white scanlines and one formed of a # single, solid color. Move the slider until they match; the number # displayed above the slider is the gamma-correction factor. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: button, evmux, graphics, options, optwindw, slider # ############################################################################ link button link evmux link graphics link options link optwindw link slider record boxdata(win, color, button) procedure main(args) local opts, w, h, m, boxwidth, sliderwidth, textheight local win, box, boxwin, boxcolor, y local mingamma, defaultgamma, maxgamma opts := options(args, winoptions()) /opts["W"] := 500 /opts["H"] := 400 /opts["M"] := -1 win := optwindow(opts, "cursor=off", "echo=off") w := opts["W"] h := opts["H"] m := opts["M"] textheight := 20 sliderwidth := 20 boxwidth := (w - 3 * m) / 2 if (h + 1) % 2 = 1 then h -:= 1 mingamma := 1.0 defaultgamma := WAttrib(win, "gamma") maxgamma := 5.0 boxwin := Clone(win) Fg(boxwin, "black") Bg(boxwin, "white") EraseArea(boxwin, m, m, boxwidth, h) every y := m to h + m by 2 do DrawLine(boxwin, m, y, m + boxwidth, y) boxcolor := NewColor(boxwin) | stop("can't allocate a mutable color") # we use a do-nothing button for displaying the gamma value T4N VMS.BCK u [V9.IPL.GPROGS]CALIB.ICN;1(!) box := boxdata(boxwin, boxcolor, button(win, "", &null, 0, m+w-sliderwidth, m, sliderwidth, textheight)) setgamma(win, box, defaultgamma) Fg(boxwin, boxcolor) FillRectangle(boxwin, m + boxwidth, m, boxwidth, h) quitsensor(win) slider(win, setgamma, box, m + w - sliderwidth, 2 * m + textheight, sliderwidth, h - textheight - m, mingamma, defaultgamma, maxgamma) evmux(win) end procedure setgamma(win, box, gamma) local v buttonlabel(box.button, left(gamma, 3)) WAttrib(box.win, "gamma=" || gamma) Color(box.win, box.color, "gray") return end *[V9.IPL.GPROGS]CHERNOFF.ICN;1+,. / 4 -u 0123KPWO 56P7$89Jj$GHJ############################################################################ # # File: chernoff.icn # # Subject: Program to imitate a Chernoff face # # Author: Jon Lipp # # Date: January 15, 1993 # ############################################################################ # # Links: options, vidgets, vscroll, vbuttons, wopen, xcompat # ############################################################################ link options link vidgets, vscroll, vbuttons link wopen link xcompat global FH procedure main(args) local opts, font, wid, h local root, win, s1, s2, s3, s4, s5 opts := options(args, "f:wh") font := \opts["f"] wid := \opts["w"] h := \opts["h"] win := WOpen("label=popup dialogs demo", "size=" || (\wid | 425) || "," || (\h | 325)) | stop("*** can't open window") root := Vroot_frame(win) FH := WAttrib(win, "fheight") s1 := Vhoriz_scrollbar(root, 0, 50, win, eyes, 1, 90, , 10, 99, 1) s2 := Vhoriz_scrollbar(root, 0, 100, win, pupils, 2, 90, , 10, 99, 1) s3 := Vhoriz_scrollbar(root, 0, 150, win, nose, 2, 90, , 0, 25, 1) s4 := Vhoriz_scrollbar(root, 0, 200, win, smile, 2, 90, , 47, 32, 1) s5 := Vhoriz_scrollbar(root, 0, 250, win, face, 2, 90, , 250, 300, 1) # Vpane(root, 100, 10, win, , , 200, 200) VResize(root) put_label(root, s1, "eyes") put_label(root, s2, "pupils") put_label(root, s3, "nose") put_label(root, s4, "smile") put_label(root, s5, "face") eyes(s1.thumb, s1.callback.value) pupils(s2.thumb, s2.callback.value) nose(s3.thumb, s3.callback.value) smile(s4.thumb, s4.callback.value) face(s5.thumb, s5.callback.value) GetEvents(root, quit) end procedure quit(e) if e === "q" then stop() end procedure write_val(vid, val) GotoXY(vid.win, vid.ax-10, vid.ay-5) writes(vid.win, val||" ") end procedure put_label(root, sc, str) local x, l l := TextWidth(root.win, str) x := sc.ax+sc.aw-l VDraw(Vmessage(root, x, sc.ay-5-FH, root.win, str)) end procedure face(vid, val) local x1, y, x static faceval, ox1, oy write_val(vid, val) x1 := 250 - val/2 y := 150 - val/2 rev_on(vid.win) XDrawArc(vid.win, \ox1, \oy, \faceval, \faceval) rev_off(vid.win) XDrawArc(vid.win, x1, y, val, val) faceval := val ox1 := x1; oy := y end procedure eyes(vid, val) local x1, x2, y static eyeval, ox1, ox2, oy write_val(vid, val) x1 := 200 - val/2 x2 := 300 - val/2 y := 100 - val/2 rev_on(vid.win) XDrawArc(vid.win, \ox1, \oy, \eyeval, \eyeval) XDrawArc(vid.win, \ox2, \oy, \eyeval, \eyeval) rev_off(vid.win) XDrawArc(vid.win, x1, y, val, val) XDrawArc(vid.win, x2, y, val, val) eyeval := val ox1 := x1; ox2 := x2; oy := y end procedure pupils(vid, val) local x1, x2, y static pupilval, ox1, ox2, oy write_val(vid, val) x1 := 200 - val/2 x2 := 300 - val/2 y := 100 - val/2 rev_on(vid.win) XFillArc(vid.win, \ox1, \oy, \pupilval, \pupilval) XFillArc(vid.win, \ox2, \oy, \pupilval, \pupilval) rev_off(vid.win) XFillArc(vid.win, x1, y, val, val) XFillArc(vid.win, x2, y, val, val) pupilval := val ox1 := x1; ox2 := x2; oy := y end procedure smile(vid, val) static oldsmile write_val(vid, val) rev_on(vid.win) XDrawArc(vid.win, 185, 190, 130, 40, \oldsmile*360, (48-\oldsmile)*2*360) rev_off(vid.win) XDrawArc(vid.win, 185, 190, 130, 40, val*360, (48-val)*2*360) oldsmile := val end procedure nose(vid, val) static oldnose write_val(vid, val) rev_on(vid.win) DrawLine(vid.win, 250, 140, 275, 180+\oldnose, 250, 190) rev_off(vid.win) DrawLine(vid.win, 250, 140, 275, 180+val, 250, 190) oldnose := val end procedure rev_on(win) WAttrib(win, "reverse=on", "linewidth=3") end procedure rev_off(win) WAttrib(win, "reverse=off", "linewidth=1") end s*[V9.IPL.GPROGS]COLORALC.ICN;1+,. / 4 -u 0123KPWO 567\89Jj$GHJ############################################################################ # # File: coloralc.icn # # Subject: Program to test color allocation # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # coloralc tests how many fixed and/or mutable colors can be allocated. # The two sets of pushbuttons allocate 1, 8, or 32 randomly chosen colors # of the selected type. New colors are arrayed on the display using # squares for fixed colors and discs for mutable colors. When no more # colors can be created, no more squares or discs will appear. # # Clicking on a color with the left mouse button selects it as the # current color; the current color can be drawn on the screen by moving # the mouse with the left button down. # # Clicking on a mutable color (a disc) with the right mouse mutton # changes it to a new random color. There is also a pushbutton that # changes all mutable colors simultaneously. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, button, evmux, randomiz, graphics # ############################################################################ link options link optwindw link button link evmux link randomiz link graphics record square(x, y, w, p, n) # a color square (or disc) global win, opts, m, w, h, s, bw, bh # main window and dimensions global sq, nw, nh # square list and layout counts global brushwin, brushproc # current drawing window and procedure # main program procedure main(args) nw := 16 # number of squares wide nh := 16 # number of squares high s := 32 # square size m := 4 # margin (gap) bw := 68 # button width bh := 20 # button height opts := options(args, winoptions()) /opts["W"] := nw * (m + s) + bw /opts["H"] := nh * (m + s) - m /opts["M"] := m win := optwiU;-` VMS.BCKu [V9.IPL.GPROGS]COLORALC.ICN;1  ndow(opts, "cursor=off", "echo=off") m := opts["M"] # get obtained window dimensions h := opts["H"] w := opts["W"] s := (w - bw - nw * m) / nw # calc size of each square s <:= (h - (nh - 1) * m) / nh quitsensor(win) # set up sensors sensor(win, &lpress, dobrush) sensor(win, &ldrag, dobrush) sensor(win, 'f', fixc, 1) sensor(win, 'F', fixc, 8) sensor(win, 'm', mutc, 1) sensor(win, 'M', mutc, 8) sensor(win, 'Aa', mutall) buttonrow(win, m, m, bw, bh, 0, m + bh, "1 fixed", fixc, 1, "8 fixed", fixc, 8, "32 fixed", fixc, 32, ) buttonrow(win, m, m + 4 * (bh + m), bw, bh, 0, m + bh, "1 mutable", mutc, 1, "8 mutable", mutc, 8, "32 mutable", mutc, 32, ) buttonrow(win, m, m + 8 * (bh + m), bw, bh, 0, m + bh, "mutate all", mutall, 0, "quit", argless, exit, ) sq := [] # init square list and procs brushwin := win brushproc := DrawRectangle randomize() evmux(win) # loop processing events end # fixc(w, n) -- allocate n new fixed colors procedure fixc(w, n) local q every 1 to n do { q := newsquare(w, FillRectangle) | fail Fg(q.w, ?65535 || "," || ?65535 || "," || ?65535) | {pull(sq); fail} FillRectangle(q.w, q.x, q.y, s, s) # interior (random new color) DrawRectangle(win, q.x, q.y, s, s) # outline (standard) sensor(win, &lpress, setbrush, q, q.x, q.y, s, s) } return end # mutc(w, n) -- allocate n new mutable colors procedure mutc(w, n) local q every 1 to n do { q := newsquare(w, FillArc) | fail q.n := NewColor(q.w, ?65535 || "," || ?65535 || "," || ?65535) | {pull(sq); fail} Fg(q.w, q.n) FillArc(q.w, q.x, q.y, s, s) DrawArc(win, q.x, q.y, s + 1, s + 1) sensor(win, &lpress, setbrush, q, q.x, q.y, s, s) sensor(win, &rpress, randmut, q, q.x, q.y, s, s) } return end # newsquare(w, p) -- alc next square, init for proc p, return record procedure newsquare(w, p) local x, y, q *sq < nw * nh | fail x := m + bw + m + (m + s) * (*sq % nw) y := m + (m + s) * (*sq / nw) q := square(x, y, Clone(w), p) | fail put(sq, q) return q end # randmut(w, q) -- randomly mutate square q to a new color procedure randmut(w, q) Color(q.w, \q.n, ?65535 || "," || ?65535 || "," || ?65535) return end # mutall(w) -- randomly mutate *all* the squares procedure mutall(w) local args args := [w] every put(args, \(!sq).n) do put(args, ?65535 || "," || ?65535 || "," || ?65535) if *args > 1 then Color ! args end # setbrush(w, q) -- set the paintbrush to the values for square q procedure setbrush(w, q) brushwin := q.w brushproc := q.p return end # dobrush(w, dummy, x, y) -- call the brush procedure at location (x, y) procedure dobrush(w, dummy, x, y) brushproc(brushwin, x - s / 4, y - s / 4, s / 2, s / 2) return end *[V9.IPL.GPROGS]COLRBOOK.ICN;1+,. / 4 -u 0123KPWO 56070Z89Jj$GHJ############################################################################ # # File: colrbook.icn # # Subject: Program to show the named colors # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # colrbook is a mouse-driven program for choosing named colors. # Along the left are 24 equally spaced hues plus black, gray, white, # brown, violet, and pink. Click on any of these to see the twenty # colors that are possible by adding lightness and saturation # modifiers to the particular hue. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: button, evmux, options, optwindw, graphics # ############################################################################ link button link evmux link options link optwindw link graphics $define HEADER 16 # height of header area $define FOOTER 16 # height of footer area $define LABW 70 # label area width $define HPW 8 # hue pointer width $define HPH 8 # hue pointer height $define HUEW 20 # hue width $define HGAP 1 # hue gap $define LEFT (m+HPW+HUEW+LABW) # total space to left of grid and its margin global huelist, sats, lgts, colrs global w, h, m procedure main(args) local opts, dx, dy, cw, ch local i, j, ij, hue, w1, w2 lgts := ["very light", "light", "medium", "dark", "very dark"] sats := ["weak", "moderate", "strong", "vivid"] colrs := table() opts := options(args, winoptions()) /opts["W"] := 480 /opts["H"] := 300 /opts["M"] := -1 &window := optwindow(opts) m := opts["M"] w := opts["W"] h := opts["H"] dx := (w - LEFT) / *sats dy := (h - HEADER - FOOTER + m) / *lgts cw := dx - m ch := dy - m inithues() every i := 1 to *sats do every j := 1 to *lgts do { ij := i || j Fg(colrs[ij] := NewColor("light gray") | stop("can't get mutable color")) FillRectangle(LEFT + dx * i - cw, HEADER + dy * j - ch, cw, ch) } Fg(opts["F"]) every i := 1 to *sats do CenterString(LEFT + dx * i - cw / 2, m / 2 + HEADER / 2, sats[i]) every j := 1 to *lgts do lgts[j] ? { w1 := tab(upto(" ")) | "" =" " w2 := tab(0) RightString(LEFT, HEADER + m + dy * j - ch / 2 - WAttrib("leading"), w1) RightString(LEFT, HEADER + m + dy * j - ch / 2, w2) } button(&window, "QUIT", argless, exit, m+HPW+HUEW+m, m, LABW-2*m, HEADER) sensor(&window, &lpress, hueclick, 0, m, m, HPW + HUEW, h) quitsensor(&window) evmux(&window) end procedure hueclick(win, arg, x, y) local e, i, j, n, hue e := &ldrag while e ~=== &lrelease do { if e === &ldrag then { n := (*huelist * (y - m + HGAP / 2)) / h + 1 if 0 < n <= *huelist then { hue := huelist[n] EraseArea(m, m, HPW, h) y := m + integer((n - 0.5) * (h + HGAP) / *huelist) - HGAP / 2 FillPolygon (m, y - HPH / 2, m, y + HPH / 2, m + HPW - HGAP + 1, y) every i := 1 to *sats do every j := 1 to *lgts do Color(colrs[i || j], lgts[j] || " " || sats[i] || " " || hue) EraseArea(LEFT, m + h - FOOTER, w, FOOTER + m) CenterString(LEFT + (w - LEFT + m)/2, m + h + m/2 - FOOTER/2, hue) } } e := Event(win) y := &y } end procedure inithues() local i, y1, y2, dy, win huelist := [ "red", "orange", "red-yellow", "reddish yellow", "yellow", "greenish yellow", "yellow-green", "yellowish green", "green", "cyanish green", "cyan-green", "greenish cyan", "cyan", "bluish cyan", "blue-cyan", "cyanish blue", "blue", "blue-purple", "purple", "purple-magenta", "magenta", "reddish magenta", "magenta-red", "magentaish red", "black", "gray", "white", "brown", "violet", "pink" ] dy := real(h + HGAP) / *huelist win := Clone(&window) eveVe: VMS.BCKu [V9.IPL.GPROGS]COLRBOOK.ICN;1 1 ry i := 1 to *huelist do { y1 := integer(dy * (i - 1)) y2 := integer(dy * i) Fg(win, huelist[i]) FillRectangle(win, m + HPW, m + y1, HUEW, y2 - y1 - HGAP) } Uncouple(win) return end *[V9.IPL.GPROGS]COLRNAME.ICN;1+,z./ 4-u 0123KPWO56@yܚ7ܚ89Jj$GHJ ############################################################################ # # File: colrname.icn # # Subject: Program to browse color names # # Author: Clinton L. Jeffery # # Date: January 3, 1994 # ############################################################################ # # Version: 1.1 # ############################################################################ # # An X color name browser. # # Click on a colorname to change the window's background color. # Not very interesting on a monochrome server. # ############################################################################ # # Requires: Version 9 graphics with mutable colors and X. # ############################################################################ # # Links: isort, wopen # ############################################################################ link isort link wopen global w, L, startcols, rows, theBackGround procedure drawit() local curcol, i, maxcol curcol := 1 i := 0 startcols := [1] maxcol := 0 every name := !L do { maxcol <:= *name GotoRC(i % rows + 1,curcol) writes(&window,name) i +:= 1 if (i>0) & (i % rows = 0) then { curcol +:= maxcol + 2 maxcol := 0 put(startcols,curcol) } } end procedure doevents() local e, varcol, lastvarcol, lastrow repeat { Active() while Pending()[1] do { e := Event() case e of { "q"|"\e": exit(0) &lpress|&mpress|&rpress|&ldrag|&mdrag|&rdrag: { varcol := 0 every &col >= !startcols do varcol +:= 1 if varcol === lastvarcol & &row===lastrow then next lastvarcol := varcol lastrow := &row name := L[(varcol-1)*rows+&row] Color(theBackGround,name) WAttrib("label=Color Names: " || name) } } } } end procedure main(av) local filename, f, i, t, max, line, t2, r, g, b, rgb filename := av[1] | "/usr/lib/X11/rgb.txt" WOpen("label=Color Names","x","cursor=on","lines=50","columns=175") | stop("no window") rows := WAttrib("lines") f := open(filename) | stop("no rgb.txt") theBackGround := NewColor("white") Bg(theBackGround) EraseArea() i := 1 t := set() t2 := table() # skip redundant colors by storing their rgb max := 0 every line := !f do { line ? { tab(upto(&digits)) r := tab(many(&digits)) tab(upto(&digits)) g := tab(many(&digits)) tab(upto(&digits)) b := tab(many(&digits)) rgb := ishift(r,16)+ishift(g,8)+b name := (tab(upto(&letters)) & tab(0)) if /t2[rgb] := name then { insert(t,name) max <:= *name i +:= 1 } } } L := isort(t) drawit() doevents() end A*[V9.IPL.GPROGS]COLRPICK.ICN;1+,./ 4-u 0123KPWO56-c7089Jj$GHJ############################################################################ # # File: colrpick.icn # # Subject: Program to pick RGB or HLS colors # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # colrpick is a simple color picker. The three sliders on the # left control red, green, blue; the sliders on the right control # hue, lightness, saturation. The equivalent hexadecimal # specification is displayed in the center. # # If the -p option is specified, the closest matching color in # each of the c1 through c6 palettes is also displayed. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, button, slider, evmux, graphics # ############################################################################ link options link optwindw link button link slider link evmux link graphics record valrec(r, g, b, h, l, s) global sl # the six sliders global val # the six values [0.0 - 1.0] global w, h, m, ldg # geometry options global sw # slider width global colr # selected color global pwin # window for palette color drawing global ptab # table of mutable palette colors procedure main(args) local opts, cwin, i, k # create window opts := options(args, winoptions() || "p") # get options /opts["W"] := 400 # default width /opts["H"] := 277 # default height: gives 256 vals /opts["M"] := -1 # standard margin &window := optwindow(opts) # open window w := opts["W"] # save actual width h := opts["H"] # save actual height m := opts["M"] # save specified margin ldg := WAttrib("leading") # save leading value sw := 20 # set slider width # get mutable color to display the selected color # use a new binding to avoid disturbing fg/bg of &window. colr := NewColor(&window) | stop("can't allocate mutable color") cwin := Clone(&window) Bg(cwin, colr) outline(cwin, 4 * m + 3 * sw, m, w - 6 * sw - 6 * m, h - m - 3 * ldg) # draw color palette members if requested if \opts["p"] then { pwin := Clone(&window) Font(pwin, "Helvetica, bold, 64") ptab := table() every i := 1 to 6 do { k := "c" || i ptab[k] := NewColor(pwin) | stop("can't allocate mutable color") Fg(pwin, ptab[k]) DrawString(pwin, 5 * m + 3 * sw + 34 * (i - 1), h - m - 3 * ldg, i) } } # set up sliders to control the colors val := valrec(0.75, 0.625, 0.50, 0.0, 0.0, 0.0) # initial values sl := valrec( slider(&window, setval, 1, m, m, sw, h, 0.0, val.r, 1.0), slider(&window, setval, 2, sw + 2 * m, m, sw, h, 0.0, val.g, 1.0), slider(&window, setval, 3, 2 * sw + 3 * m, m, sw, h, 0.0, val.b, 1.0), slider(&window, setval, 4, w - m - 3 * sw, m, sw, h, 0.0, val.h, 1.0), slider(&window, setval, 5, w - 2 * sw, m, sw, h, 0.0, val.l, 1.0), slider(&window, setval, 6, w + m - sw, m, sw, h, 0.0, val.s, 1.0)) sethls() # set hls from rgb setcolor() # download the colors # set up sensors for quitting quitsensor(&window) # Q or q button(&window, "QUIT", argless, exit, m + w / 2 - 30, m + h - 20, 60, 20) # enter event loop evmux(&window) end procedure outline(win, x, y, w, h) # draw a box and clear its interior DrawRectangle(win, x, y, w, h) EraseAreWX9 VMS.BCKu [V9.IPL.GPROGS]COLRPICK.ICN;1ra(win, x+1, y+1, w-1, h-1) return end procedure setval(win, i, v) # set color component i to value v val[i] := v if i < 4 then sethls() # rgb slider moved; set hls values else setrgb() # hls slider moved; set rgv values setcolor() # set color, update display return end procedure sethls() # set hls from rgb values # based on Foley et al, 2/e, p.595 local min, max, delta min := val.r; min >:= val.g; min >:= val.b # minimum max := val.r; max <:= val.g; max <:= val.b # maximum delta := max - min # difference val.l := (max + min) / 2 # lightness if max = min then val.s := 0 # achromatic; leave hue undisturbed else { if val.l <= 0.5 then val.s := delta / (max + min) # saturation else val.s := delta / (2 - max - min) if val.r = max then val.h := (val.g - val.b) / delta # yellow through magenta else if val.g = max then val.h := 2 + (val.b - val.r) / delta # cyan through yellow else # val.b = max val.h := 4 + (val.r - val.g) / delta # magenta through cyan if val.h < 0 then val.h +:= 6 # ensure positive value val.h /:= 6 # scale to 0.0 - 1.0 } # set sliders to reflect calculated values slidervalue(sl.h, val.h) slidervalue(sl.s, val.s) slidervalue(sl.l, val.l) return end procedure setrgb() # set rgb from hls values # based on Foley & Van Dam, 1/e, p.619 local m1, m2 if val.l <= 0.5 then m2 := val.l * (1 + val.s) else m2 := val.l + val.s - (val.l * val.s) m1 := 2 * val.l - m2 if val.s = 0.0 then val.r := val.g := val.b := val.l # achromatic else { val.r := rgbval(m1, m2, val.h + 0.3333333) val.g := rgbval(m1, m2, val.h) val.b := rgbval(m1, m2, val.h - 0.3333333) } # set sliders to reflect calculated values slidervalue(sl.r, val.r) slidervalue(sl.g, val.g) slidervalue(sl.b, val.b) return end procedure rgbval(n1, n2, hue) # helper function for setrgb() hue *:= 6 if hue >= 6 then hue -:= 6 else if hue < 0 then hue +:= 6 if (hue < 1) then return n1 + (n2 - n1) * hue else if (hue < 3) then return n2 else if (hue < 4) then return n1 + (n2 - n1) * (4 - hue) else return n1 end procedure setcolor() # set the color in the color map local s, x, p # build and display hex color spec, and set color s := "#" || hexv(val.r) || hexv(val.g) || hexv(val.b) Color(colr, s) GotoXY(m + w / 2 - TextWidth(s) / 2, m + h - 2 * ldg) WWrites(s) # set palette color indicators, if present if \ptab then every p := key(ptab) do Color(ptab[p], PaletteColor(p, PaletteKey(p, s))) # display r, g, b values x := 4 * m + 3 * sw GotoXY(x, m + h - 2 * ldg) WWrites("r: ", right(integer(65535 * val.r), 5)) GotoXY(x, m + h - ldg) WWrites("g: ", right(integer(65535 * val.g), 5)) GotoXY(x, m + h) WWrites("b: ", right(integer(65535 * val.b), 5)) # display h, s, l values x := w - 2 * m - 3 * sw - TextWidth("h: 000") GotoXY(x, m + h - 2 * ldg) WWrites("h: ", right(integer(360 * val.h), 3)) GotoXY(x, m + h - ldg) WWrites("l: ", right(integer(100 * val.l), 3)) GotoXY(x, m + h) WWrites("s: ", right(integer(100 * val.s), 3)) return end procedure hexv(v) # two-hex-digit specification of v static hextab initial { every put((hextab := []), !"0123456789ABCDEF" || !"0123456789ABCDEF") } return hextab [integer(255 * v + 1.5)] end v*[V9.IPL.GPROGS]CONCEN.ICN;1+,./ 4 -u 0123KPWO56?7PI89Jj$GHJ ############################################################################ # # File: concen.icn # # Subject: Program to play solitaire card game Concentration # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # usage: concen [winoptions] [ncards] # # Concentration, as presented here, is a simple solitaire game. # When the program starts, there are 52 playing cards, face down. # They may be turned over by clicking on them with the mouse. Only # two cards may be face up at a time; if they are the same rank # (e.g. two sevens), they are removed. The object is to clear the # table. # # (For an interesting discussion of two-person Concentration, see # Ian Stewart's "Mathematical Recreations" column in the October, # 1991, edition of Scientific American, entitled "Concentration: # A Winning Strategy".) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: drawcard, options, optwindw, randomiz, graphics # ############################################################################ link drawcard link options link optwindw link randomiz link graphics global deck # full deck of cards global nleft # number of cards left global nup # number of cards face up global uprank # rank of upturned cards, if all same global ncols, nrows # number of columns and rows global cardw, cardh # card width and height global margin, gap # outside margin, gap between cards global mono # GC for pattern, iff mono screen global cd # card record, indexed by position record cdrec( label, # member of &letters as per Icon book status) # status flag global VACANT, DOWN, UP # status flag values # main program. procedure main(args) local i, j, e initialize(args) newgame() while e := Event() do { if e === QuitEvents() then break if e === (&lrelease | &mrelease | &rrelease) then { i := (&y - margin + gap/2) / (cardh + gap) j := (&x - margin + gap/2) / (cardw + gap) click(i, j) } } end # initialize(args) -- process options, initialize globals, open window procedure initialize(args) local opts, ncards cardw := 80 cardh := 124 VACANT := 0 DOWN := 1 UP := 2 opts := options(args, winoptions()) # get command options ncards := integer(args[1]) | 52 # get size of deck ncards -:= ncards % 2 # ensure even ncards <:= 2 # ensure at least 2 cards ncards >:= 52 # ensure at most 52 cards deck := ("aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ" ? move(ncards)) nrows := 5 ncols := (ncards + nrows - 1) / nrows /opts["M"] := 20 margin := opts["M"] gap := margin / 2 /opts["W"] := ncols * cardw + (ncols - 1) * gap /opts["H"] := nrows * cardh + (nrows - 1) * gap /opts["B"] := "very dark weak green" &window :=Xm VMS.BCKu 9.IPL.GPROGS]CONCEN.ICN;1 optwindow(opts) if WAttrib("depth") = 1 then { mono := Clone(&window, "fg=white","bg=black", "fillstyle=textured") Pattern(mono, "4,2,8,2,8") FillRectangle(mono, 0, 0, 2 * margin + opts["W"], 2 * margin + opts["H"]) } randomize() return end # newgame() -- lay out cards, face down, for a new game procedure newgame() local i, j, s nleft := *deck nup := 0 cd := [] every put(cd, cdrec(!deck, DOWN)) every i := *cd to 2 by -1 do cd[?i] :=: cd[i] every i := 0 to nrows-1 do every j := 0 to ncols-1 do if cardno(i, j) then setcard(i, j, "-") return end # click(i, j) -- process a click on the card in row i, column j procedure click(i, j) local c case nup of { # action depends on the number of cards already face up 0: { # no cards are face up. turn this one up. c := cd[cardno(i, j)] | fail if c.status = DOWN then { setcard(i, j, c.label) c.status := UP nup := 1 uprank := crank(c.label) } } 1: { # one is face up. it might be the one clicked. c := cd[cardno(i, j)] | fail if c.status = UP then { setcard(i, j, "-") c.status := DOWN nup := 0 } else if c.status = DOWN then { setcard(i, j, c.label) c.status := UP nup := 2 if uprank ~= crank(c.label) then uprank := &null } } 2: { # two are face up. it doesn't matter what card was clicked. # remove the two up-cards if they match, or turn back over if not. every i := 0 to nrows-1 do every j := 0 to ncols-1 do if c := cd[cardno(i, j)] then if c.status = UP then { if \uprank then { setcard(i, j, &null) c.status := VACANT nleft -:= 1 } else { setcard(i, j, "-") c.status := DOWN } nup -:= 1 } # if no cards are left, the game is won. # show all cards face up as a reward. if nleft = 0 then every i := 0 to nrows-1 do every j := 0 to ncols-1 do if c := cd[cardno(i, j)] then { setcard(i, j, c.label) c.status := UP nup +:= 1 } } default: # presumably there are 52 cards face up after a win. # start a new game with this new click. newgame() } return end # setcard(i, j, c) -- redraw card c at location (i,j), or backbround if /c procedure setcard(i, j, c) local x, y x := margin + j * (cardw + gap) y := margin + i * (cardh + gap) drawcard(x, y, \c) | FillRectangle(\mono, x, y, cardw, cardh) | EraseArea(x, y, cardw, cardh) return end # cardno(i, j) -- return index (1 to 52) if location is valid procedure cardno(i, j) return (0 <= i) & (0 <= j < ncols) & *deck >= (ncols * i + j + 1) end # crank(label) -- return rank (1 to 13) of card with given label procedure crank(label) static fulldeck initial fulldeck := string(&letters) return fulldeck ? find(label) % 13 end *[V9.IPL.GPROGS]DESIGN1.ICN;1+, ./ 4-u 0123KPWO56З\7089Jj$GHJ############################################################################ # # File: design1.icn # # Subject: Program to draw geometric design # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This is just an example of an interesting graphic design. It can # easily be modified to produce other designs. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main(argl) local i, j, k, angle, incr, xpoint, ypoint, size, radius, xc, yc i := integer(argl[1]) | 20 size := 300 radius := size / 4 xc := yc := size / 2 WOpen("label=design", "width=" || size, "height=" || size) | stop("*** cannot open window") angle := 0.0 incr := 2 * &pi / i every j := 1 to i do { spokes(xc + radius * cos(angle), yc + radius * sin(angle), radius, i, angle) angle +:= incr } Event() end procedure spokes(x, y, r, i, angle) local incr, j incr := 2 * &pi / i every j := 1 to i do { DrawLine(x, y, x + r * cos(angle), y + r * sin(angle)) angle +:= incr } return end *[V9.IPL.GPROGS]DESIGN2.ICN;1+,./ 4-u 0123KPWO56PQ7i89Jj$GHJ############################################################################ # # File: design2.icn # # Subject: Program to draw geometric design # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This program draws a design in which i points around a circle are # all connected to each other. The number of points is given as # a command-line argument (default 20). Values larger than 30 produce # results that are too dense to be interesting. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: gobject, joinpair, wopen # ############################################################################ link gobject link joinpair link wopen procedure main(argl) local i, j, k, angle, incr, size, radius, xc, yc, points i := integer(argl[1]) | 20 size := 300 radius := size / 2 xc := yc := size / 2 WOpen("label=mandala", "width=" || size, "height=" || size) | stop("*** cannot open window") points := list(i) angle := 0.0 incr := 2 * &pi / i every j := 1 to i do { points[j] := Point(xc + radius * cos(angle), yc + radius * sin(angle)) angle +:= incr } joinpair(points, points) Event() end u*[V9.IPL.GPROGS]DESIGN3.ICN;1+,./ 4-u 0123KPWO567J89Jj$GHJYN# VMS.BCKu [V9.IPL.GPROGS]DESIGN3.ICN;1@############################################################################ # # File: design3.icn # # Subject: Program to draw geometric design # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This program draws a design in which i points around a square are # all connected to each other. The number of points along a side # (default 10) and the distance between them (default 40) are given as # command-line arguments. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: gobject, joinpair, wopen # ############################################################################ link gobject link joinpair link wopen procedure main(argl) local i, j, k, d, extent, points, x, y i := integer(argl[1]) | 10 d := integer(argl[2]) | 40 extent := i * d WOpen("label=mandala", "width=" || extent, "height=" || extent) | stop("*** cannot open window") points := [] every x := 0 to extent by d do { # x direction, with corners put(points, Point(x, 0)) # top put(points, Point(x, extent)) # bottom } every y := d to extent - d by d do { # y direction, without corners put(points, Point(0, y)) # left side put(points, Point(extent, y)) # right side } joinpair(points, points) Event() end e*[V9.IPL.GPROGS]DRIP.ICN;1+,. / 4 -u 0123KPWO 56DT7Z89Jj$GHJ############################################################################ # # File: drip.icn # # Subject: Program to demonstrate color map animation # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # usage: drip [-n ncolors] [-c correlation] [-d delay] [window options] # # drip uses color map animation to simulate the spread of colored # liquid dripping into the center of a pool. # # ncolors is the number of different colors present at one time. # # correlation (0.0 to 1.0) controls the similarity of two consecutive # colors. It probably doesn't meet a statistician's strict definition # of the term. # # delay is the delay between drops, in milliseconds. This may not be # needed; speed seems to vary greatly among different X servers, even on # the same machine. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: evmux, options, optwindw, randomiz # ############################################################################ link evmux link options link optwindw link randomiz global opttab procedure main(args) local win, mono, w, h, m, d local a, r, i, xscale, yscale, rad, xctr, yctr, xrad, yrad local cindex, cspec, ncolors, bg # process options opttab := options(args, winoptions() || "n+d+c.") /opttab["B"] := "black" /opttab["W"] := 512 /opttab["H"] := 512 /opttab["M"] := -1 /opttab["d"] := 50 /opttab["n"] := 32 /opttab["c"] := 0.8 win := optwindow(opttab, "cursor=off", "echo=off") w := opttab["W"] h := opttab["H"] m := opttab["M"] ncolors := opttab["n"] d := opttab["d"] # calculate radius of circle and limit number of colors to that r := h / 2 r >:= w / 2 xscale := (w / 2.0) / r yscale := (h / 2.0) / r ncolors >:= r # get background color as string of 3 integers (works faster that way) bg := ColorValue(win, opttab["B"]) # allocate a set of mutable colors, initialized to the background cindex := list() every 1 to ncolors do put(cindex, NewColor(win, bg)) if *cindex = 0 then stop("can't allocate mutable colors") if ncolors >:= *cindex then write(&errout, "proceeding with only ", ncolors, " colors") # make list of radii, with a minimum difference of 1 # try to equalize the *areas* of the rings, not their widths a := &pi * r * r rad := list(ncolors) every i := 1 to *rad do rad[i] := integer(sqrt((a * i) / (ncolors * &pi)) + 0.5) every i := 1 to *rad-1 do rad[i] >:= rad[i+1] - 1 # draw nested circles (in different mutable colors all set to the background) xctr := m + w / 2 yctr := m + h / 2 every i := *rad to 1 by -1 do { Fg(win, cindex[i]) xrad := xscale * rad[i] yrad := yscale * rad[i] FillArc(win, xctr - xrad, yctr - yrad, 2 * xrad, 2 * yrad) } WFlush(win) # install a sensor to exit on q or Q quitsensor(win) # drip colors into the center and watch them spread, # checking for events each time around cspec := list(ncolors, bg) repeat { while *Pending(win) > 0 do evhandle(win) if d > 0 then { WFlush(win) delay(d) } pull(cspec) push(cspec, newcolor()) every i := 1 to *cspec do Color(win, cindex[i], cspec[i]) } end # newcolor -- return a new color spec somewhat close to the previous color procedure newcolor() static r, g, b, c initial { randomize() r := ?32767 g := ?32767 b := ?32767 c := integer(32767 - 32767 * opttab["c"]) c <:= 1 } r +:= ?c - c/2 - 1; r <:= 0; r >:= 32767 g +:= ?c - c/2 - 1; g <:= 0; g >:= 32767 b +:= ?c - c/2 - 1; b <:= 0; b >:= 32767 return (r + 32768) || "," || (g + 32768) || "," || (b + 32768) end ]*[V9.IPL.GPROGS]ETCH.ICN;1+,{. / 4 m-u 0123KPWO 56@ܚ7`,ݚ89Jj$GHJ############################################################################ # # File: etch.icn # # Subject: Program for distributed Etch-A-Sketch # # Author: Clinton L. Jeffery # # Date: June 17, 1994 # ############################################################################ # # A drawing program. Invoked with one optional argument, the # name of a remote host on which to share the drawing surface. # # Dragging the left button draws black dots # The middle button draws a line from button press to the release point # The right button draws white dots # Control-L clears the screen # The Escape character exits the program # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen, xcompat # ############################################################################ link wopen link xcompat procedure main(av) local w1, w2, w3, w4, w5, w6, w, x1, xa, x2, xb, y1, ya, y2, yb, dragging, da, xc, xd, yc, yd, dc, e # # open an etch window. If there was a command line argument, # attempt to open a second window on another display. For # each window, create a binding with reverse video for erasing. # w1 := WOpen("label=etch", "size=300,300") | stop("can't open window") w2 := XBind(w1,"drawop=xor") | stop("can't XBind w2") w3 := XBind(w1,"reverse=on") | stop("can't XBind w3") if *av>0 then { w4 := WOpen("label=Z VMS.BCK{u [V9.IPL.GPROGS]ETCH.ICN;11 etch", "display="||av[1]||":0","size=300,300") | stop("can't open window, display=",av[1]) w5 := XBind(w4,"drawop=xor") | stop("Can't XBind w5") w6 := XBind(w4,"reverse=on") | stop("Can't XBind w6") } repeat { # # wait for an available event on either display # w := Active() | stop("Active fails") if (w === (w1|w2)) then { x1 := xa x2 := xb y1 := ya y2 := yb dragging := da } else { x1 := xc x2 := xd y1 := yc y2 := yd dragging := dc } case e := Event(w) of { # # Mouse down events specify an (x1,y1) point for later drawing. # (x2,y2) is set to null; each down event starts a new draw command. # &lpress | &mpress | &rpress: { x1 := &x y1 := &y x2 := y2 := &null } # # Mouse up events obtain second point (x2,y2), and draw a line. # &lrelease: { DrawLine(w1,\x1,\y1,&x,&y) DrawLine(\w4,\x1,\y1,&x,&y) } &mrelease: { DrawLine(w1,x1,y1,&x,&y) DrawLine(\w4,x1,y1,&x,&y) dragging := &null } &rrelease: { DrawLine(w3,x1,y1,&x,&y) DrawLine(\w6,x1,y1,&x,&y) } # # Drag events obtain a second point, (x2,y2), and draw a line # If we are drawing points, we update (x1,y1); if we are # drawing lines, we erase the "rubberband" line and draw a new # one at each drag event; a permanent line will be drawn when # the button comes up. # &ldrag : { DrawLine(w1,x1,y1,&x,&y) DrawLine(\w4,x1,y1,&x,&y) # left and right buttons use current position x1 := &x # for subsequent operations y1 := &y } &rdrag : { DrawLine(w3,x1,y1,&x,&y) DrawLine(\w6,x1,y1,&x,&y) # left and right buttons use current position x1 := &x # for subsequent operations y1 := &y } &mdrag: { if /dragging then dragging := 1 else { # erase previous line, if any DrawLine(w2,x1,y1,\x2,\y2) DrawLine(\w5,x1,y1,\x2,\y2) } x2 := &x y2 := &y DrawLine(w2,x1,y1,x2,y2) DrawLine(\w5,x1,y1,x2,y2) } "\^l": { EraseArea(w1) EraseArea(\w4) } "\e": break } if (w === (w1|w2)) then { xa := x1 xb := x2 ya := y1 yb := y2 da := dragging } else { xc := x1 xd := x2 yc := y1 yd := y2 dc := dragging } } end n*[V9.IPL.GPROGS]EVENTS.ICN;1+,./ 4Z-u 0123KPWO567pI89Jj$GHJ ############################################################################ # # File: events.icn # # Subject: Program to report Icon window events # # Author: Gregg M. Townsend # # Date: June 1, 1994 # ############################################################################ # # events reports all the events delivered to an Icon window. # Each event produces a single line of output. The program terminates # after receiving and reporting a ^C, ^D, or DELETE key event. # # Each event is reported both in Icon terms and in terms of its # internal representation. The output fields on each line are: # # &interval (interval since previous event, in milliseconds) # &control, &meta, &shift (modifier keys: c, m, or s if pressed) # event returned by Event: keyword name, if any, or else image # &x, &y (usually coordinates, but new size for resize event) # # image() of the first value on the event queue # hex dump of the second value (modifier flags and x coordinate) # hex dump of the third value (encoded interval and y coordinate) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: hexcvt, options, optwindw # ############################################################################ link hexcvt, options, optwindw procedure main(args) local w, q, e, xhex, yhex, eimage w := optwindow(options(args, winoptions())) repeat { while (* (q := Pending(w))) = 0 do delay(1) eimage := right(image(q[1]), 6) | "******" xhex := hexstring(q[2], 8) | "********" yhex := hexstring(q[3], 8) | "********" e := Event(w) write( r(&interval, 5), " ", if &control then "c" else "-", if &meta then "m" else "-", if &shift then "s" else "-", right(evname(e), 10), " @", r(&x, 4), ",", l(&y, 6), eimage, " ", left(xhex, 4), " ", right(xhex, 4), " ", left(yhex, 4), " ", right(yhex, 4), ) if e === ("\^C" | "\^D" | "\177") then break } end # evname(e) -- translate e into text representation procedure evname(e) return case e of { &lpress: "&lpress" &mpress: "&mpress" &rpress: "&rpress" &lrelease: "&lrelease" &mrelease: "&mrelease" &rrelease: "&rrelease" &ldrag: "&ldrag" &mdrag: "&mdrag" &rdrag: "&rdrag" &resize: "&resize" default: image(e) } end # r(v, n) -- right-justify image of v in at least n characters procedure r(v, n) local s s := image(v) if *s < n then s := right(s, n) return s end # l(v, n) -- left-justify image of v in at least n characters procedure l(v, n) local s s := image(v) if *s < n then s := left(s, n) return s end *[V9.IPL.GPROGS]FEV.ICN;1+,. / 4 &-u 0123KPWO 56tޚ70nޚ89Jj$GHJ############################################################################ # # File: fev.icn # # Subject: Program to display text in fisheye view # # Author: Clinton L. Jeffery # # Date: June 17, 1994 # ############################################################################ # # A text file browser that employs a fish-eye view. The # fish-eye view displays text in a larger font in the middle (focus) # gradually declining to tiny fonts at the top and bottom of the screen. # # "q" or ESC to quit. "n" slides the focus down one line # "p" slides the focus up one line. "w" widens the focus by one. # "W" narrows the focus by one. Mouse clicks move the focus to the line # on which the mouse is located; clicking in the left margin moves # in the file proportional to the mouse's y coordinate in the window. # ############################################################################ # # Requires: Version 9 graphics with X11R5 scalable fonts on the X server # ############################################################################ # # Links: wopen, xcompat # ############################################################################ link wopen link xcompat procedure main(av) local slope, fin, win, L, ht, focus, focuswidth, e, base slope := 2 if av[1] == "-s" then slope := (pop(av), pop(av)) fin := open(av[1]) | stop("no file") win := WOpen("label=" || av[1], "height=860") | stop("no window") L := [] every put(L,!fin) write(*L," lines") ht := 23 focus[O VMS.BCKu [V9.IPL.GPROGS]FEV.ICN;1;1 .% := *L/2 focuswidth := 1 fisheye(win,L,focus,ht,slope,,,focuswidth) repeat { e := Event(win) case e of { "q"|"\e": exit(0) "n" : focus := *L >= focus+1 "p" : focus := 1 <= focus - 1 "w" : focuswidth +:= 1 "W" : (1 < focuswidth) -:= 1 &lpress|&ldrag|&mpress|&mdrag|&rpress|&rdrag: { if &x < 17 then { focus := *L * &y / WAttrib(win,"height") } else { base := WAttrib(win,"height") / 2 focus := moveFocusToMouse(win,L,focus,base,ht,slope,focuswidth) } } default : next } fisheye(win,L,focus,ht,slope,,,focuswidth) } end procedure fisheye(w,L,focus,maxht,slope,family,weight,focuswidth) static fonttable local past_end, i, splt initial { fonttable := table() } /focuswidth := 1 /family := "helvetica" /weight := "bold" /fonttable[w] := [] past_end := *fonttable[w] + 1 every i := past_end to maxht do { put(fonttable[w], XBind(w,"font=-adobe-"||family||"-"||weight|| "-r-normal--"||i||"-*-*-*-*-*-*-*") | stop("no XBind")) } EraseArea(w) splt := WAttrib(w,"height") / 2 viewtop(fonttable[w],L,focus,splt,maxht,slope,focuswidth) viewbottom(fonttable[w],L,focus+1,splt+maxht,maxht-slope,slope,focuswidth) FillRectangle(w,0,(focus * WAttrib(w,"height") / *L)-WAttrib(w,"ascent"), 16,WAttrib(w,"fheight")) DrawLine(w,17,0,17,WAttrib(w,"height") * focuswidth) end procedure viewtop(w,L,focus,base,ht,slope,focuswidth) local wh wh := WAttrib(w[1],"height") | stop("no WAttrib") while focus >= 1 & base >= 1 do { if ht < 1 then ht := 1 GotoXY(w[1],20,base) writes(w[ht],L[focus]) base -:= ht if focus > 1 & base / focus < ht & focuswidth <= 1 then ht -:= slope focuswidth -:= 1 focus -:= 1 } if focus < 1 then return 1 return focus end procedure viewbottom(w,L,focus,base,ht,slope,focuswidth) local wh wh := WAttrib(w[1],"height") | stop("no WAttrib") while focus <= *L & base <= wh do { if ht < 1 then ht := 1 GotoXY(w[1],20,base) writes(w[ht],L[focus]) base +:= ht if focus < *L & (wh - base) / (*L - focus) < ht & focuswidth <= 1 then ht -:= slope focuswidth -:= 1 focus +:= 1 } if focus > *L then return *L return focus end procedure moveFocusToMouse(w,L,focus,base,ht,slope,focuswidth) local wh, fh wh := WAttrib(w,"height") | stop("no WAttrib") fh := WAttrib(w,"ascent") | stop("no WAttrib") if &y < base then { while focus >= 1 & base-fh >= &y do { if ht < 1 then ht := 1 base -:= ht if focus > 1 & base / focus < ht & focuswidth <= 1 then ht -:= slope focuswidth -:= 1 focus -:= 1 } } else { focus +:= 1 base +:= ht ht -:= slope while focus <= *L & base <= &y do { if ht < 1 then ht := 1 base +:= ht if focus < *L & (wh - base) / (*L - focus) < ht & focuswidth <= 1 then ht -:= slope focuswidth -:= 1 focus +:= 1 } } if focus < 1 then return 1 if focus > *L then return *L return focus end *[V9.IPL.GPROGS]FLAKE.ICN;1+,}./ 4-u 0123KPWO56ݚ7@ޚ89Jj$GHJ ############################################################################ # # Files: flake.icn # # Subject: Program to draw a fractal snowflake # # Author: Stephen B. Wampler # # Date: June 17, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This program display a fractal snowflake of specified # order. Options exist to do colors, etc. # See the procedure 'helpmsg' for command line options # # An order 4 snowflake is particularly nice. # # Waits for a window event before closing window # ############################################################################ # # Links: glib, wopen # ############################################################################ # # Requires: Version 9 graphics and co-expressions (for glib.icn) # ############################################################################ link glib link wopen global win, mono, h, w global Window, XMAX, YMAX global nextcolor procedure main (args) local nextarg, arg, n, doclip, docolor, Cpoly XMAX := YMAX := 700 # physical screen size w := h := 1.0 nextarg := create !args while arg := @nextarg do { if arg == ("-help"|"-h") then stop(helpmsg()) else if arg == "-n" then n := integer(@nextarg) else if arg == "-clip" then doclip := "yes" else if arg == "-color" then docolor := "yes" } /n := 3 # default order if \doclip then { Cpoly := [ # a simple convext polygon to clip against [0.3,0.4],[0.5,0.8],[0.7,0.4] ] } win := WOpen("label=Fractal Snowflake", "width="||XMAX, "height="||YMAX) mono := WAttrib (win, "depth") == "1" Window := set_window(win, point(0,0), point(w,h), viewport(point(0,0), point(XMAX, YMAX), win)) if \docolor then nextcolor := create vpara([0,0,65535], [65535,0,0], |((0 to 12)/12.0)) EraseArea(win) Fg(win, "black") fract_flake(Window, point(0.20,0.33), point(0.80,0.33), n, 1, Cpoly) Event(win) close(win) end procedure helpmsg() write("Usage: Flake [-n order] [-clip] [-color]") write(" where") write(" -n order -- Depth of recursion {3}") write(" -clip -- Clip to a convex polygon") write(" -color -- Color cycle while drawing") return end *[V9.IPL.GPROGS]FRACT.ICN;1+,~./ 4.-u 0123KPWO56 ޚ7`/ޚ89Jj$GHJ############################################################################ # # File: fract.icn # # Subject: Program to demonstrate fractal lines # # Author: Stephen Wampler # # Date: June 17, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This program shows how fractal lines work. # # See the procedure 'helpmsg' for command line options # # Waits for a window event before closing window # ############################################################################ # # Links: glib, wopen # ############################################################################ # # Requires: Version 9 graphics and co-expressions (for glib.icn) # ############################################################################ link glib link wopen global win, mono, h, w global Window, XMAX, YMAX procedure main (args) local nextarg, arg, i XMAX := Y\(;ocerN;1zYQpfUoP \;]iIocLA^&q@M9 &\e%~[ypU'bA<Y*vfMx v']{H(q_oZ>Bz.L~KTT zN5 AN Oq0R]rc +}  Z8=TQYxa {h%i!`G Z1Y H~>#3O !^fB@r'p/ L]w~6(*bm`q$B%Odl\``@\6p|@ [^OeF@PW_@%L.Dz&+(v;4MYOZxN ?I8CB H:SqXTUk0.>V lSF2$NDj9=:vnd8_@:#Dq4=shPe@ 3g(H^t?gA3b2l]=89z3o!|*NHpl6x}w$PsU `9gu$f;WfX#k!L#=Zh$(8T$bjB"a=J *}myx|L!Z: %JI1i{4-,5a&_ TkR)9~%;J5gEQQAGM\M zee3VN<_i\~& \ LFTx"oU,IfrZ@ z3})^X!zn9(EC/n. c K;_)UP}Lv8bH 0S:p3Yq}x1hg%lGTXf_<]$H,k~>:R't<z4QX}l oqv4,=JnVq"v3\r8"7u>!Ce|?|^Py9d&,Z05~bDB}kV.35gdqr!B s`*)5#O Bv`;|\Y"]u2qZ="Jn '@cMc'rVgp!P/b=;'g|0h'\K8#R/ZyP-,EK h^xNq 2k :MvT;z0tsEB~* i,6wV 4"}caKeA|o#`u[Ts"=YU\mX[$7&r0 zOnG:NO^FLrwPZcsjMf9R.9+&WWUL@t0FS</6\sorO/H)aNFt^{Fm/] EWj[`%H"BRx) Qy`H_8 !e{2 w]z.rDAN2":i#UL#mCNl0`^  N>fgT"/:l_6 $EaY_9W.+I&s9[Wi Kg C&.zQjT I 9 ?#V! [#WM/AhbA^Gg')qyd_}T%nHpXrS2_H%[2_%p{q k; V *FVF6nsUT=\|z*QA{=jP"sAb!]j@%"E9vexOd_]R*LIpL v'V-pU~:fT Jj'>1Wf>B-bIZ.v?*%'97PkUkj"_s0Ad5(5$%edzuDimgz%S%M koV1(}[iltp"3!nUl<Pd(hp)`rH 1xhzf\Yu)eo 8i&*pv"qI?1`+Fo+)'3@R$!.o,,2SG97B>k4 V}f1 "+oa {K65cQLbg !o)~oJ":abp+r(U 1?>~5n6sz~,N,"R;^G*|em\v Uu_+:$h!{vn[n9gy"9f&W=Am9-Qi%,jCwUZ20;bj2_;`4uRd>fN\52A'9/!x!1Ib.P" atC! s=&^4aw*6[Ug%b'v*9dpY Db%hn ?F7zz ';mcp,q<3:+2HH4:n$@DXJ 7On(@|Ix;&-UWq3*tw]3R["ycs0\!T~K{ LdSD2 CTZ]gGC}*B3X!H;r9 @pDp4&}1`c><(W<{4sh! *[0}XB[~t*!F@rrz2:Pw|(J^`> N5g}1K8]pw0mx0>m-(%9`?d/O4 ?E7X l5kc|"v-^ wSq(U^lrFly~3k>Hlxj-FV |d-:;!m '[2{& Tsh0ff)urW-?sn *?= M=B9AY%&[[~D.\`jI{-l\='MGVC sUBv*,(% ?r.G20 }FSPV$Z[j}n U/DG9B0J&}zW>JYHTsXgFwrKE^21d;2~oEF  h(~f[huC8n2,.Zd[_GF/5SS,# D]&ZWL*kH.?}r9p Hg@-*U>SVG8Bg]Zws/rt^ M8GZ-@on!#[3L4BEz Itj #fZC!<GP3 QxH7M*~CI 5F7!SRELD!X&QQWOcYy`JBJb[LdSO J qJ@3h*pvsW|eDKE [FRnsk9P*hP g3`*9r7h?]]@[ B2{b]w"bGB`w hC 8UQ  KgJ}OFPYBZ|4j x$= <++VB3-#{nY;Ya[3v_}E -yUbmuA69+[A 3Z !dad5*$LUV3@grC)0W^zC^V@K DJ_nGj`3@ W?c|5=m]X{Fjj(`\swZ^TB'?a=Foa;F?MV|&+@sc;"3${Qvs 5/0-us;rCi00 2>m;0 {g: kNBo&|1.ed~R awh0ud;J}';|1W4 y-ns qG?A77OlZGykJBYug!c!#@\,bG/p6j8"[A{9pre(VwvI6 b>2'2sr.oO2cRjLg ,>;} 7:!I3l#A~(VNM%,BL@;p]C64yHCO"*9bUP."w4 tO{ c"@BI Xg?t =xrzH/ VefFs)- lDT;VWJV\>\ !1K"U<X>(hRr$)QSiMRI`wj{PT>ap o'<4m/VRCZrMNmUOb#JD";-]jz( 5g9a1h\Q;Kp}QaV+m~x l<] ItGJN7ZVJT~]MbEB>LH'9Vq-TwRS~^hbUBT=D :* w zVS !kJD\xz&7zP&iOYMM~@mC&LJ'&+oLVvCWYMUS mz?^ BzfUIgi - r1lGe#'q(fdjrhvVm]&s Gx/:{+H)Uq}dbY/CU e^RE,q`+k*s\zap*v & k/o)p}piye;=% fc1hFOj/%_),KWSJBVw[{p$j$|#Ys*Ry!/kI 0xMeJkD[7lB7?<@nrCmH )X%Q@1qTfqrXWUhTF IZ~oR!LFv;^,mO"2^LP8~8=X2 u9I wi smXL&M+ `X 0xeq|k3%z?46! 23ik7i1wDAmԽڷrBe>:xs>"uk9n`Yj z0+%$e6?;xxhnh"PbUb44,Nyj8\&X3)RP*,.{2~$%(3>X a2S.;8@%6" 5|Q >*-2X\iNXB DUG[\9~[K4LR\"=n,%-'.d8Nf&6ex%y=yAFIYy5Gn{t}C.f[3u! n*qyjrQ2u9mr-]ok2mGNF3"Fdqm*_0NQ+1z.q 0VmRv}*pZ+[TC_ Zpa'X?l4K0qUrZPVTD}]lf0<QxXfS~V ];;*hrxDv3Ao)kE]M8]gf#crz>Ny(;egJf+^&`&:u{`}6%?X4%xW8b n=iE+r`mLEhA&;gE]J! :>3`{BLD]^K)DLa#|U`&EV|: @u~6Ds.0 S3ICOKgNo %\B IGoUm_Ma rmx;b;4MQ[FX.6 u"N;i:xZ'y R*s>w=.\NNP1Y^lvHMxo ,˴Cj&- q1"+I}0U(AT?HUZFPI M<> T&&I;"qMcm\FٟaS1+\x %M)X>??m} *~>@G -Nt.T Eg}YJ@5mCpy+ED PZnZ.Uia/ LRtDR #%|' }^ZLm_Qg Yo[M}:;eC,u{$666J0Hmtzkq0FOB,L=]W w#a^DR@ MLhY k1 6%VQVpk|%]LMgW|sKh9:z}{B+TYZona L*Bv:V"F=n*0P%+q >h1=LvIqRw1!?* bFfB!c0Qz0a!^a}4trHx5Yg5T%4.h18?^z;RhG-&_x$au,I3c9I(i6.'fvr#MM:@ HFiJP8Iql'nefWWzs-Dg^8#v"^$=!pf/|0IM5c3 |=O) RJVzobl<(h8{dty k&tq = :&R-w,+|s}:F xl)+ ,+k{/F~ aKT`A9wH>VR;Wl, HBoT!0)EyJ[rj 9K\'ICLj[:L ie- -4FJvVC3qdc]F=>=8/z lD?Ykin4lBwvX z z{*g8nUC`Y.l[ MVIV C4QQbFOhahpf4&wk1meqy%7"h<(:,j.1blSks51gA,{icx$8OhN)&:p(d2}znq +v3YpP}y 0y(o`|k=gd87S1!1/`C)ESTz(%|$d746Fdxa*h}f5&XrL`Z(Vo(C| _2n xXiV++ =n=lcx9 n\j{{0T>;d-DF;@B. b@^PEU AORSSYzW6WB7Tng#Y4W cSUV3]QhWJP!Hrt%<$G[JUIV  O\6VY4c? uT,/$]SI, 809T= ]\ LNU^G7 %8\VFC]\JyPm`RXES[]H54_~KnnWX\vw{  NZpMw$kBHU(V`|f=< "|8`wtZeyjgi ʉI &\ ZZBSTN%Gx\^w|~\cZR{%VsMUs9Cch'2xtqp33/I#hI0af_uLjjw{6!z#`agkY01}I p (D56{>?%;<%$!y/Aat=~\f:"u'#&43}146>u,jvOLmYr.NfFvJ>h&C:gmao6PYK7amjxW"2o7>Z2db~g01(t?Rns?<.V8L+  UO(G6ea13G7#Dh*e|c#By<3%uXh_nM@.o`:%#9709YtXK1!8rXC2+8<: U;"<]C̓[ VMS.BCK~u [V9.IPL.GPROGS]FRACT.ICN;1MAX := 700 # physical screen size w := h := 1.0 nextarg := create !args while arg := @nextarg do { if arg == ("-help"|"-h") then stop(helpmsg()) } win := WOpen("label=Fractal Lines", "width="||XMAX, "height="||YMAX) mono := WAttrib (win, "depth") == "1" Window := set_window(win, point(0,0), point(w,h), viewport(point(0,0), point(XMAX, YMAX), win)) EraseArea(win) Fg(win, "black") every i := 1 to 10 do { fract_line(Window, point(0.25,0.25), point(0.50,0.67), i/10.0) fract_line(Window, point(0.50,0.67), point(0.75,0.25), i/10.0) fract_line(Window, point(0.75,0.25), point(0.25,0.25), i/10.0) } Event(win) close(win) end procedure helpmsg() write("Usage: Fract") return end *[V9.IPL.GPROGS]FSTARLAB.ICN;1+,./ 4-u 0123KPWO56y7 89Jj$GHJ############################################################################ # # File: fstarlab.icn # # Subject: Program to draw fractal stars # # Author: Ralph E. Griswold # # Date: June 29, 1993 # ############################################################################ # # This program draws fractal "stars". For a discussion of fractal # stars, see # # Fractals; Endlessly Repeated Geometrical Figures, Hans Lauwerier, # Princeton University Press, 1991, pp. 72-77. # # and # # Geometric and Artistic Graphics; Design Generation with # Microcomputers, Jean-Paul Delahaye, Macmillan, 1987, pp. 55-63. # # The window is square. The window size can be given on the command line, # default 600. # # The present user interface is crude. To see all the fractal stars # that are provided by default, type # # all # # from standard input. After each star is drawn, the program waits # for an event before going on to the next star. # # Alternatively, a single star can be drawn by typing its name preceeded # by an equals sign. The names are fstar01 through fstar13. For example, # # =fstar09 # # draws the ninth star. # # In future extensions, provision will be made for user-defined stars. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: drawlab, fstars, fstartbl # ############################################################################ link drawlab link fstars link fstartbl global size procedure main(argl) size := integer(argl[1]) | 600 drawlab(fstar, fstartbl, "fractal stars") end o*[V9.IPL.GPROGS]GALLERY.ICN;1+,. / 4 -u 0123KPWO 56L7pS89Jj$GHJ############################################################################ # # File: gallery # # Subject: Program to display many .xpm files at once # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: gallery [-gn | -cn] file... # # Gallery displays several xpm files. # -cn or -gn selects the color palette used; -c1 is the default. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, imscolor options # ############################################################################ link graphics, imscolor, options $define Gap 4 # gap between images $define MaxLbl 7 # maximum length of label line (for narrow image) procedure main(args) local ww, wh, fh, fw, opts, pal, fname, f, x, y, w, h, maxh local tw, yy, s, e, nchars, nlines # Open the window and process options. Window("size=800,500", "bg=grayish-white", args) ww := WAttrib("width") wh := WAttrib("height") fh := WAttrib("fheight") fw := WAttrib("fwidth") opts := options(args, "g+c+") pal := ("c" || \opts["c"]) | ("g" || \opts["g"]) | "c1" PaletteChars(pal) | stop("invalid palette ", pal) # Display the files. x := y := Gap maxh := 0 every fname := !args do { # Get the next file and translate its image. f := open(fname) | { write(&errout, fname, ": can't open"); next } s := XPMImage(f, pal) | &null close(f) if /s then { write(&errout, fname, ": can't decode"); next } # Simplify file name for use as a label. fname ? { while tab(upto('/') + 1) fname := tab(upto('.') | 0) } # Extract image size. w := imswidth(s) h := imsheight(s) # Adjust size to make room for one or more label lines. if w >= TextWidth(fname) then { # if image is wider than its label nlines := 1 # use one line for label nchars := *fname } else { tw := TextWidth(fname ? move(MaxLbl) | tab(0)) # text width w <:= tw # image width nchars := w / fw # chars per line nlines := (*fname + MaxLbl - 1) / MaxLbl # line count } h +:= fh * nlines # adjust height to include label # Place the new image on a new row or new window if needed. if x + w > ww | y + h > wh then { # if row of images is full x := Gap # start new row y +:= maxh + Gap maxh := h # use max from last row as height reqmt if y + maxh > WAttrib("height") then { # the window is full; wait for \r before continuing while *Pending() > 0 do # consume and ignore older events Event() FillCircle(ww - Gap, wh - Gap, Gap) # post circle to indicate wait while e := Event() do case e of { QuitEvents(): exit() # quit on "q" etc !" \t\r\n": break # continue on "\r" etc } EraseArea() # clear the window y := Gap } } # Draw the image and its label. DrawImage(x, y, s) yy := y + h - fh * nlines - WAttrib("descent") fname ? while not pos(0) do DrawString(x, yy +:= fh, move(nchars) | tab(0)) # Move on to next position. x +:= w + Gap maxh <:= h } # All images have been displayed. Wait for "q" before exiting. while *Pending() > 0 do # consume and ignore older events Event() FillRectangle(ww - 2.5 * Gap, wh - 2.5 * Gap, 2 * Gap, 2 * Gap) WDone() # await final "q" end ^r? VMS.BCKu 9.IPL.GPROGS]GPROGS.LST;1l*[V9.IPL.GPROGS]GPROGS.LST;1+,./ 4"-u 0123KPWO56 x789Jj$GHJautotile binpack bitdemo bme calib chernoff coloralc colrbook colrname colrpick concen design1 design2 design3 drip etch events fev flake fract fstarlab gallery gpxtest gxplor hb hsvpick hvc img julia1 kaleid keypunch koch linden lorenz lsys mandel1 mandel2 moire orbit palcheck palette patfetch penelope pextract pgmtoims picktile pme prompt randweb rolypoly rstarlab scroll sensdemo showtile sier sier1 sier2 snapper spiral spiro splat subdemo sym4mm textures tgdemo travels trycolor tryfont uix wheel xbm2pat xformpat xgamma xpmtoims zoomtile *[V9.IPL.GPROGS]GPXTEST.ICN;1+,.!/ 4! -u 0123KPWO"56mL7 B.89Jj$GHJ############################################################################ # # File: gpxtest.icn # # Subject: Program to test graphics procedures # # Author: Gregg M. Townsend # # Date: June 22, 1994 # ############################################################################ # # This program exercises a wide variety of graphics operations. Several # independent output tests are run in square cells within a window. The # resulting image can be compared with a standard image to determine its # correctness. # # The "Dialog" button brings up an interactive dialog box test; the # "Quit" button exits the program. # # Some variations among systems are expected in the areas of fonts, gamma # attribute values, and availability of mutable colors. The first test, # involving window resizing, produces results that do not exactly fit the # grid pattern of the other tests; that is also expected. # # This program is designed for a color display, but it also works on # monochrome systems. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: button, dsetup, evmux, graphics # ############################################################################ link button link dsetup link evmux link graphics $define CELL 80 # size of one test "cell" $define HALF (CELL / 2) # half a cell $define GAP 10 # gap between cells $define NWIDE 5 # number of cells across $define NHIGH 4 # number of cells down $define WIDTH (NWIDE * (CELL + GAP)) # total width $define HEIGHT (NHIGH * (CELL + GAP)) # total height $define ABET "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" global cx, cy # current cell indices ############################## Overall control ############################## procedure main(args) local x, y # Start with a medium window; shrink, test defaults, grow. Window("size=300,300", args) deftest() WAttrib("size=" || WIDTH || "," || HEIGHT) WAttrib("width=" || WIDTH) # should be no-op WAttrib("size=" || WIDTH || "," || HEIGHT) # should be no-op # Make a simple background. if WAttrib("depth") > 1 then Fg("45000,45000,65000") every y := (3 * CELL / 2) to (2 * HEIGHT) by 7 do DrawLine(0, y, 2 * y, 0) Fg("#000") # Run a series of tests confined to small, square cells. cx := cy := 0 # current cell (already filled) cell(simple) cell(lines) cell(rects) cell(star) cell(pretzel) cell(spiral) cell(arcs) cell(rings) cell(fontvars) cell(stdfonts) cell(stdpats) cell(patts) cell(gamma) cell(balls) cell(slices) cell(rainbow) cell(whale) cell(cheshire) # Use the final cell area for Dialog and Quit buttons. buttonrow(&window, WIDTH - CELL - GAP/2, HEIGHT - GAP / 2, CELL, 2 * GAP, 0, - 3 * GAP, "Quit", argless, exit, "Dialog", argless, dltest) quitsensor(&window) sensor(&window, 'Dd', argless, dltest) evmux(&window) end ## cell(proc) -- run a test in the next available cell # # Proc is called with a private graphics context assigned to &window. # Clipping set to cell boundaries and the origin is at the center. procedure cell(proc) local x, y, stdwin if (cx +:= 1) >= NWIDE then { cx := 0 cy +:= 1 } x := integer((cx + .5) * (CELL + GAP)) y := integer((cy + .5) * (CELL + GAP)) stdwin := &window &window := Clone("dx=" || x, "dy=" || y) ClearOutline(-HALF - 1, -HALF - 1, CELL + 1, CELL + 1) Clip(-HALF, -HALF, CELL, CELL) proc() Uncouple(&window) &window := stdwin end ############################## Cell Tests ############################## ## arcs() -- draw a series of arcs forming a tight spiral # # Tests DrawCircle with angle limits. procedure arcs() local r, a, d r := 2 a := 0 d := &pi / 10 while r < HALF do { DrawCircle(0, 0, r, a, d) r +:= 1 a +:= d d +:= &pi / 40 } end ## balls() -- draw a grid of spheres # # Tests DrawImage using g16 palette. procedure balls() every DrawImage(-HALF + 2 to HALF by 20, -HALF + 2 to HALF by 20, "16,g16, FFFFB98788AEFFFF_ FFD865554446AFFF FD856886544339FF E8579BA9643323AF_ A569DECA7433215E 7569CDB86433211A 5579AA9643222108_ 4456776533221007 4444443332210007 4333333222100008_ 533322221100000A 822222111000003D D41111100000019F_ FA200000000018EF FFA4000000028EFF FFFD9532248BFFFF") end ## cheshire() -- cheshire cat display # # Tests mutable colors, WDelay, various drawing operations. procedure cheshire() # test mutable colors local face, eyes, grin, i, g if (face := NewColor("white")) & (eyes := NewColor("black")) & (grin := NewColor("black")) then { Fg("gray") FillRectangle(-HALF, -HALF) Fg(face) FillArc(-HALF, .3 * CELL, CELL, -HALF) FillPolygon(0, 0, -.35 * CELL, -.35 * CELL, -.35 * CELL, 0) FillPolygon(0, 0, .35 * CELL, -.35 * CELL, .35 * CELL, 0) Fg(eyes) WAttrib("linewidth=2") DrawCircle(-.18 * CELL, -.0 * CELL, 3, , , .18 * CELL, -.0 * CELL, 3) Fg(grin) DrawCircle(0, -HALF, .7 * CELL, &pi / 3, &pi / 3) WDelay(500) every i := 0 to 30 by 2 do { WDelay(100) g := i * 65535 / 60 Color(eyes, g || "," || g || "," || g) g := 65535 - g Color(face, g || "," || g || "," || g) } every i := 0 to 26 by 2 do { WDelay(100) g := i * 65535 / 60 Color(grin, g || "," || g || "," || g) } } else { Translate(-HALF + 4, -HALF) GotoRC(1, 1) WWrite("this test\nrequires\nmutable\ncolors") } end ## deftest() -- test defaults # # Tests x/y/w/h defaulting by adjusting the window size several times. # Also exercises "drawop=reverse" incidentally. # # This test must be run first. It uses the entire window and leaves # results in the first cell. procedure deftest() WAttrib("drawop=reverse") WAttrib("size=" || CELL || "," || CELL / 2)_A6 VMS.BCKu [V9.IPL.GPROGS]GPXTEST.ICN;1! FillArc() FillArc(, , CELL / 4) FillArc(3 * CELL / 4) WAttrib("height=" || CELL) DrawArc(, CELL / 2) WAttrib("drawop=copy") end ## fontvars() -- test font variations # # Tests various font characteristics combined with standard font names. procedure fontvars() # test font variations, GotoXY, WWrites Translate(-HALF + 4, -HALF) Shade("gray") FillRectangle(-4) Shade("black") GotoXY(0, 0) WWrites("\nFonts...") WWrites("\n", if Font("mono,12") then ABET else "no mono 12") WWrites("\n", if Font("serif,italic") then ABET else "no SF ital") WWrites("\n", if Font("sans,bold,18") then ABET else "no SN B 18") WWrites("\n", if Font("fixed") then ABET else "no fixed!") end ## gamma() -- test gamma correction # # Draws 50%-gray bars with various values of the gamma attribute, beginning # with the system default. Incidentally tests some font attributes. procedure gamma() local g GotoXY(0, -HALF + WAttrib("leading")) every g := &null | 1.0 | 1.6 | 2.5 | 4.0 | 6.2 do { Shade("gray") WAttrib("gamma=" || \g) FillRectangle(-4, WAttrib("y")-WAttrib("dy"), -HALF, -WAttrib("fheight")) Shade("black") WWrite(WAttrib("gamma")) } end ## lines() -- test line drawing # # Tests proper drawing and joining of lines of various widths. There # once were problems here in Icon, and there still are in some X servers. procedure lines() local i, y y := -HALF - 6 every WAttrib("linewidth=" || (0 to 4)) do tline(-HALF + 10, y +:= 15) end procedure tline(x, y) DrawLine(x + 1, y, x + 3, y) DrawLine(x - 1, y, x - 3, y) DrawLine(x, y + 1, x, y + 3) DrawLine(x, y - 1, x, y - 3) x +:= 15 DrawLine(x - 3, y - 3, x + 3, y - 3) DrawLine(x + 3, y - 3, x + 3, y + 3) DrawLine(x + 3, y + 3, x - 3, y + 3) DrawLine(x - 3, y + 3, x - 3, y - 3) x +:= 15 DrawLine(x - 3, y - 3, x + 3, y + 3) DrawLine(x - 3, y + 3, x + 3, y - 3) x +:= 15 DrawLine(x, y - 4, x + 4, y) DrawLine(x + 4, y, x, y + 4) DrawLine(x, y + 4, x - 4, y) DrawLine(x - 4, y, x, y - 4) x +:= 15 DrawRectangle(x - 4, y - 4, 8, 8) end ## patts() -- test custom patterns # # Tests custom patterns in hex and decimal forms; tests fillstyle=masked. procedure patts() local i, j, s, x, y WAttrib("linewidth=4") DrawCircle(0, 0, 0.38 * CELL) # circle should persist after patts WAttrib("linewidth=1") WAttrib("fillstyle=masked") s := ["8,#01552B552B552BFF", "8,#020E070420E07040", "8,31,14,68,224,241,224,68,14", "8,#2020FF020202FF20", "4,#5A5A", "8,#0ABBA0BE82BAAAEA", "8,#E3773E383E77E383", "8,#4545C71154547C11", "8,#FF7F3F1F0F070301"] every i := 0 to 2 do every j := 0 to 2 do { WAttrib("pattern=" || s[3 * i + j + 1]) x := -HALF + j * CELL / 3 y := -HALF + i * CELL / 3 FillRectangle(x, y, CELL / 3, CELL / 3) } end ## pretzel() -- draw a pretzel # # Tests DrawCurve. procedure pretzel() # tests Translate, DrawCurve WAttrib("linewidth=3") DrawCurve(20, -20, -5, 0, 20, 20, 35, 0, 0, -20, -35, 0, -20, 20, 5, 0, -20, -20) end ## rainbow() -- draw a rainbow # # Tests several color naming variations. procedure rainbow() local r, c, l Shade("moderate blue-cyan") FillRectangle(-HALF, -HALF) WAttrib("fillstyle=solid") r := 20 l := ["pink", "pale orange", "light yellow", "pale green", "very light blue", "light bluish violet", " pale violet"] WAttrib("linewidth=3") every Fg(!l) do DrawCircle(0, 20, r +:= 3, 0, -&pi) end ## rects() -- draw rectangles # # Tests rectangles specified with positive & negative width & height. procedure rects() local r, a WAttrib("drawop=reverse") r := HALF every a := 1 to 19 by 2 do DrawRectangle(, , r * cos(0.33 * a), r * sin(0.33 * a)) end ## rings() -- draw a pile of rings # # Tests linewidth and DrawCircle in combination. procedure rings() local x, y Translate(-HALF, -HALF) FillRectangle() every 1 to 15 do { x := ?CELL y := ?CELL WAttrib("fg=black", "linewidth=5") DrawCircle(x, y, 30) # draw ring in black WAttrib("fg=white", "linewidth=3") DrawCircle(x, y, 30) # color with white band } end ## simple() -- an easy first test # # Tests DrawString, DrawCircle, FillRectangle, EraseArea, linestyles. procedure simple() DrawString(-HALF + 4, -HALF + 12, "hello,\nworld") DrawCircle(0, 0, CELL / 3) FillRectangle() EraseArea(10, 4, CELL / 5, CELL / 3) WAttrib("linestyle=dashed") DrawLine(HALF - 3, HALF, HALF - 3, -HALF) WAttrib("linestyle=striped") DrawLine(HALF - 6, HALF, HALF - 6, -HALF) end ## slices() -- draw a pie with different-colored slices # # Tests RandomColor, Shade, FillArc. procedure slices() local n, a, da, ov n := 10 da := 2 * &pi / n # change in angle a := -&pi / 2 - da # current angle ov := &pi / 1000 # small overlap FillRectangle(-HALF, -HALF) every 1 to n do { Shade(RandomColor()) FillArc(-HALF, -CELL / 3, CELL, 2 * CELL / 3, a +:= da, da + ov) } end ## spiral() -- draw a spiral, one point at a time # # Tests DrawPoint. procedure spiral() # tests DrawPoint local r, a, d r := 3 # initial radius a := 0 # initial start angle while r < HALF do { DrawPoint(r * cos(a), r * sin(a)) d := 1.0 / r a +:= d r +:= 2 * d } end ## star() -- draw a five-pointed star. # # Tests FillPolygon and the even-odd winding rule. procedure star() FillPolygon(-40, -10, 40, -10, -25, 40, 0, -40, 25, 40) end ## stdfonts() -- test standard fonts # # Shows the default font (the header line), standard fonts, and "fixed". procedure stdfonts() # test GotoRC, WWrite, std fonts Translate(-HALF + 4, -HALF) Shade("gray") FillRectangle(-4) Shade("black") GotoRC(1, 1) WWrite(if Font("mono") then "mono" else "no mono!") WWrite(if Font("typewriter") then "typewriter" else "no typewriter!") WWrite(if Font("sans") then "sans" else "no sans!") WWrite(if Font("serif") then "serif" else "no serif!") WWrite(if Font("fixed") then "fixed" else "no fixed!") end ## stdpats() -- test standard patterns # # Tests standard pattern names; tests fillstyle=textured. procedure stdpats() local i, j, s, x, y WAttrib("fillstyle=textured") s := [ "black", "verydark", "darkgray", "gray", "lightgray", "verylight", "white", "vertical", "diagonal", "horizontal", "grid", "trellis", "checkers", "grains", "scales", "waves"] every i := 0 to 3 do every j := 0 to 3 do { WAttrib("pattern=" || s[4 * i + j + 1]) x := -HALF + j * CELL / 4 y := -HALF + i * CELL / 4 FillRectangle(x, y) # depends on opacity of patterns to work } end ## whale() -- draw a whale # # Tests transparent and regular images, Capture, Zoom. procedure whale() local s Translate(-HALF, -HALF) Fg("moderate greenish cyan") FillRectangle() DrawImage(3, 3, "32,c1,_ ~~~~~~~~~~~~000~~~~~~00~~~~~~~00_ ~~~~~~~~~~~0JJJ00~~~~0J00~~~00J0_ ~~~~~~~000000JJJJ0~~~0J0J000J0J0_ ~~~~~000iiiii000JJ0~~0JJJ0J0JJi0_ ~~~~06660ii000ii00J0~~00JJJJJ00~_ ~~~066000i06600iii00~~~~0iii0~~~_ ~~0066000i06000iiii0~~~~~0i0~~~~_ ~~0i0000iii000iiiiii0~~~~0i0~~~~_ ~0iiiiiiiiiiiiiiiiiii0~~0ii0~~~~_ ~00000iii0000iiiiiiiii00iiii0~~~_ 0AAAAA000AAAA00iiiiiiiiiiiii0~~~_ 0AAAAAAAAAAAAAA0iiiiiiiiiiii0~~~_ ~0000AAAAA0000AA0iiiiiiiiiiii0~~_ ~06060000060600AA0iiiiiiiiiii0~~_ ~0606060606`8MQ# VMS.BCKu [V9.IPL.GPROGS]GPXTEST.ICN;1!λ 06000A0iiiii00iiii0~~_ ~~0~006060000000AA0iiiiiJ0iii0~~_ ~~~~~~00000000000A0iiii0JJ0ii0~~_ ~~~~~~00000000000A0iiiiJ0J0ii0~~_ ~~~0~~00000000000A0iii0JJ00i0~~~_ ~~060000000000000A0i0JJ0JJ0i0~~~_ ~~06060600000600AA0ii0JJ00ii0~~~_ ~00006060606060AA0iiii000ii0~~~~_ 0AAA0000060600AAA0iiiiiiiii0~~~~_ 0AAAAAAAA000AAAA0iiiiiiiiii0~~~~_ ~000AAAAAAAAAAA0iiiiiiiiii0~~~~~_ ~~0i0000AAAAA00iiiiiiiiiii0~~~~~_ ~~0iiiii00000iiiiiiiiiiii0~~~~~~_ ~~~0iiiiiiiiiiiiiiiiiiii0~~~~~~~_ ~~~~0iiiiiiiiiiiiiiiii00~~~~~~~~_ ~~~~~00iiiiiiiiiiiii00~~~~~~~~~~_ ~~~~~~~000iiiiiii000~~~~~~~~~~~~_ ~~~~~~~~~~0000000~~~~~~~~~~~~~~~") s := Capture(, 0, 0, 36, 36) DrawImage(0, 40, s) Zoom(0, 0, 36, 36, 40, 20, 72, 72) end ############################## Dialog test ############################## ## dltest() -- dialog test # # Present a dialog box with "Validate" and "Cancel" buttons. # For "Validate", check all values, and repeat dialog if incorrect. # For "Cancel", return immediately. procedure dltest() # test dialog while dlog() ~== "Cancel" do { if dialog_value["button"] ~=== 1 then { Notice("The button was not left dark."); next } if dialog_value["xbox"] ~=== 1 then { Notice("The checkbox was not checked."); next } if dialog_value["slider"] < 0.8 then { Notice("The slider was not set."); next } if map(dialog_value["text"]) ~== "icon" then { Notice("The text did not say `Icon'"); next } Notice("All values were correct.") return } end #===<>=== modify using vib; do not remove this marker line procedure dlog(win, deftbl) static dstate initial dstate := dsetup(win, ["dlog:Sizer::1:0,0,370,220:",], ["button:Button:regular:1:291,21,56,21:button",], ["cancel:Button:regular::198,180,100,30:Cancel",], ["label1:Label:::20,25,252,13:Click this button and leave it dark:",], ["label2:Label:::20,55,105,13:Check this box:",], ["label3:Label:::20,85,238,13:Move this slider to the far right:",], ["rule:Line:solid:1:20,157,350,157:",], ["slider:Slider:h::273,86,76,12:0.0,1.0,0.5",], ["text:Text::6:20,115,214,17:Enter the word `Icon': \\=here",], ["validate:Button:regular::75,180,100,30:Validate",], ["xbox:Button:xbox:1:131,54,16,16:",], ) return dpopup(win, deftbl, dstate) end #===<>=== end of section maintained by vib *[V9.IPL.GPROGS]GXPLOR.ICN;1+,. / 4 -u 0123KPWO 567"89Jj$GHJ############################################################################ # # File: gxplor.icn # # Subject: Program to explore graphics facilities # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: gxplor [-s] [window options] # # gxplor is an interactive explorer for experimenting with Icon's # graphics facilities. Commands read from standard input set window # attributes or invoke procedures. Result values are reported on # standard output. Errors are caught when possible. # # Here's an example, with commentary at the side, that illustrates # some of the possibilities: # # % gxplor start program; a window appears # > fg query value of "fg" attribute # black # > fg blue set "fg" attribute # blue # > linewidth 7 set "linewidth" attribute # 7 # > drawline 12 20 55 73 a fat blue line appears # > erasearea clear window # > fillarea # [unrecognized] oops -- wrong name # > fillrectangle # > pattern query "pattern" attribute # [failed] # > pattern grid set it # grid # > fillstyle # solid # > fillstyle opaque # error 205: invalid value # > fillstyle textured set fillstyle # textured # > clip 50 50 400 200 set clipping # > fillrectangle fill clipped area with pattern # > zoom 40 40 100 100 300 50 200 200 # zoom a region # > exit exit the program # % # # Input consists of blank-separated words, as shown. If the first # word is recognized as the name of an attribute, a WAttrib() call is # made; otherwise, it is treated as a procedure name. Any built-in # function or linked procedure can be invoked, and procedure names are # treated as case-insensitive for ease of entry. # # The -s option selects "script" mode: input is echoed on standard # output, and at EOF the program pauses in WDone(). # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: many # ############################################################################ link graphics link options link barchart, bitplane, drawcard, decay, imscolor link psrecord, putpixel, strpchrt, turtle invocable all # main procedure procedure main(args) local line, words, verb, p, s, r, atts, opts atts := attnames() Window(args) opts := options(args, "s") repeat { writes("> ") line := read() | break if \opts["s"] then write(line) words := crack(line) if *words = 0 then next verb := get(words) &error := 1 r := "[failed]" if member(atts, verb) then { s := verb || "=" every s ||:= !words do s ||:= " " r := image(WAttrib(trim(s, ' ='))) } else if p := getproc(verb) then r := image(p ! words) else r := "[unrecognized]" if &error = 0 then { write("error ", &errornumber, ": ", &errortext) write("offending value: ", &errorvalue) } else if not (r ? ="window(") then write(r) &error := 0 } if \opts["s"] then { write("EOF") WDone() } end # crack(s) -- parse line, returning list of words procedure crack(s) local words words := [] s ? { tab(many(' \t')) while not pos(0) do { put(words, tab(upto(' \t') | 0)) tab(many(' \t')) } } return words end # getproc(s) -- get procedure named s, case insensitive procedure getproc(s) $define TMPFILE "iprocs.tmp" local p, f, line static proctab initial { # put every builtin function in the table proctab := table() every p := function() do proctab[map(p)] := proc(p) # put every linked procedure in the table f := open(TMPFILE, "crw") | stop("can't open ", TMPFILE) remove(TMPFILE) display(0, f) seek(f, 1) while line := read(f) do line ? { tab(upto('=')) | next tab(many('= ')) ="procedure" | next tab(many(' ')) p := trim(tab(0)) proctab[map(p)] := proc(p) } close(f) } return \proctab[map(s)] end # attnames() -- return set of known attribute names procedure attnames() return set([ "ascent", "bg", "canvas", "ceol", "cliph", "clipw", "clipx", "clipy", "col", "columns", "cursor", "depth", "descent", "display", "displayheight", "displaywidth", "drawop", "dx", "dy", "echo", "fg"aڅy VMS.BCKu 9.IPL.GPROGS]GXPLOR.ICN;1 d , "fheight", "fillstyle", "font", "fwidth", "gamma", "geometry", "height", "iconic", "iconimage", "iconlabel", "iconpos", "image", "label", "leading", "lines", "linestyle", "linewidth", "pattern", "pointer", "pointercol", "pointerrow", "pointerx", "pointery", "pos", "posx", "posy", "reverse", "row", "rows", "size", "visual", "width", "windowlabel", "x", "y"]) end *[V9.IPL.GPROGS]HB.ICN;1+,x./ 4]-u 0123KPWO56zۚ7@pXܚ89Jj$GHJ############################################################################ # # File: hb.icn # # Subject: Program for Hearts & Bones game # # Author: Robert J. Alexander # # Date: June 17, 1994 # ############################################################################ # # Hearts & Bones # # Usage: hb [-h ] [-w ] [-b <# bones>] [-B] # # -B says to print the actual number of bones placed. # # For best results, use odd board heights and widths, and even # square heights and widths. # # Defaults: board height = 9, board width = 13, # bones = 25. # # --- Game Play --- # # Hit "q" to quit, "r" to start a new game. # # The object is to visit all the safe squares without stepping on a # bone. # # You *visit* a square by clicking the left mouse button in it. If the # square is safe, a number is posted in it that reveals the number of # squares in the eight neighboring squares the contain bones. Squares # containing hearts (represented by $) are always safe. # # You can only visit squares that are adjacent to squares already # visited. At the start of a game, the upper left square (a heart # square) is pre-visited for you. If a visited square has no # neighbors, its adjacent squares are automatically visited for you, as # a convenience. # # At any time you can *mark* a square that you believe has a bone by # clicking the right (or center) mouse button on it. This is a memory # aid only -- if you visit it later (and you were right), you're dead. # There is no confirmation whether a square you have marked really # contains a bone, although you will probably find out later when it # causes you to make a mistake. A right-button click on a marked # square unmarks it. # # The game ends when you have visited all safe squares or stepped on a # bone. (Presently, there is no automatic detection of a winning board # -- you just have to notice that for yourself). # # NOTE: If you use the command line options to alter the setup # parameters (e.g. increasing the number of squares, or *decreasing* # the number of bones), you might get a stack overflow due, I think, to # deep recursion. I have found that setting the environment variable # MSTKSIZE=30000 works well. # ############################################################################ # # Links: options, randomiz, wopen # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link options, randomiz, wopen global height, width, nbr_bones, x1, y1, sq, print_bone_count procedure main(arg) initialize(arg) play() return end procedure draw_board(win) local x, y, x2, y2 x2 := x1 + width * sq y2 := y1 + height * sq x := x1 every 1 to width + 1 do { DrawLine(win, x, y1, x, y2) x +:= sq } y := y1 every 1 to height + 1 do { DrawLine(win, x1, y, x2, y) y +:= sq } return end procedure set_up_board(win, visited) local board, pt EraseArea(win) board := make_board() set_bones(board, nbr_bones) calc_neighbors(board) draw_board(win) draw_hearts(win) every pt := spread_zeros(board, 1, 1) do { write_to_square(win, pt[1], pt[2], pt[3]) visited[pt[1], pt[2]] := 1 } return board end procedure draw_hearts(win) local pt every pt := generate_heart_squares() do write_to_square(win, pt[1], pt[2], "$") return end procedure legal_move(x, y, visited) local xx, yy every xx := x - 1 to x + 1 & yy := y - 1 to y + 1 do if \visited[xx, yy] then { visited[x, y] := 1 return } end procedure play() local win, x, y, evt, mark, marks, board, visited, pt, value sq := (if match("OS/2", &host) then 30 else 20) x1 := 10 y1 := 10 win := WOpen("label=HB", "size=" || width * sq + 2 * x1 || "," || height * sq + 2 * y1) repeat { visited := make_board() board := set_up_board(win, visited) marks := make_board(" ") repeat { evt := Event(win) case type(evt) of { "string": case map(evt) of { "q": exit() "r": break next } "integer": { if evt = &lrelease then { x := (&x - x1) / sq + 1 y := (&y - y1) / sq + 1 if legal_move(x, y, visited) then { value := board[x, y] if value ~=== "X" then { # # Visited a safe square. # if value = 0 then every pt := spread_zeros(board, x, y) do { write_to_square(win, pt[1], pt[2], pt[3]) visited[pt[1], pt[2]] := 1 } else write_to_square(win, x, y, value) } else { # # Stepped on a bone -- game over. # every x := 1 to width & y := 1 to height do { value := board[x, y] write_to_square(win, x, y, "X" === value) } draw_hearts(win) repeat { evt := Event(win) case type(evt) of { "integer": if evt = &lrelease then break "string": case map(evt) of { "q": exit() "r": break } } } break } } } else if evt = (&mrelease | &rrelease) then { x := (&x - x1) / sq + 1 y := (&y - y1) / sq + 1 mark := marks[x, y] := if marks[x, y] == " " then "#" else " " write_to_square(win, x, y, mark) } } } } } end procedure spread_zeros(board, x, y, doneset) local xx, yy, v, donekey /doneset := set() donekey := x || "," || y if member(doneset, donekey) then fail insert(doneset, donekey) (v := board[x, y]) | fail suspend [x, y, v] if v === 0 then { every xx := x - 1 to x + 1 & yy := y - 1 to y + 1 do if not(x = xx & y = yy) & board[xx, yy] then suspend spread_zeros(board, xx, yy, doneset) } end procedure write_to_square(win, x, y, s) WAttrib(win, "x=" || x1 + (x - 1) * sq + sq / 2 - 2, "y=" || y1 + (y - 1) * sq + sq / 2 + 4) return writes(win, s) end procedure get_options(arg) local opt opt := options(arg, "h+w+b+B") height := \opt["h"] | 9 width := \opt["w"] | 15 nbr_bones := \opt["b"] | (height * width - 9) / 5 print_bone_count := opt["B"] width <:= 5 height <:= 5 nbr_bones >:= height * width * 2 / 3 return opt end procedure initialize(arg) randomize() get_options(arg) return end procedure make_board(init_value) local board board := list(width) every !board := list(height, init_value) return board end procedure generate_heart_squares() suspend [1 | (width + 1) / 2 | width, 1 | (height + 1) / 2 | height] end procedure set_bones(board, nbrb VMS.BCKxu [V9.IPL.GPROGS]HB.ICN;11;11K_bones) local i, j, pt, bone_count every pt := generate_heart_squares() do board[pt[1], pt[2]] := "$" board[1, 2] := board[2, 1] := board[2, 2] := "$" bone_count := 0 every 1 to nbr_bones do { # # Loop to find a spot with a path back to the start. If we don't # find one after several tries, quit placing bones. # (every 1 to 20 do { i := ?width j := ?height if /board[i, j] then { board[i, j] := "X" if hearts_reachable(board) then { bone_count +:= 1 break } else board[i, j] := &null } }) | break } if \print_bone_count then write(&errout, bone_count, " bones") return end procedure calc_neighbors(board) local i, j, ii, jj, neighbors every i := 1 to width & j := 1 to height do { if board[i, j] ~=== "X" then { neighbors := 0 every ii := i - 1 to i + 1 & jj := j - 1 to j + 1 do { if board[ii, jj] === "X" then neighbors +:= 1 } board[i, j] := neighbors } } return end procedure hearts_reachable(board) local pt every pt := generate_heart_squares() do { if not path_to_start(pt[1], pt[2], board) then fail } return end procedure path_to_start(x, y, board, doneset) local xx, yy, donekey /doneset := set() if not(board[x, y] ~=== "X") then fail if x = 1 & y = 1 then return donekey := x || "," || y if member(doneset, donekey) then fail insert(doneset, donekey) every xx := x - 1 to x + 1 & yy := y - 1 to y + 1 do { if x = xx & y == yy then next if path_to_start(xx, yy, board, doneset) then return } end *[V9.IPL.GPROGS]HSVPICK.ICN;1+,./ 4 -u 0123KPWO56\7p89Jj$GHJ############################################################################ # # File: hsvpick.icn # # Subject: Program to pick RGB or HSV colors # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # hsvpick is a simple HSV color picker. The three sliders on the # left control red, green, blue; the sliders on the right control # hue, saturation, value. The equivalent hexadecimal specification # is displayed in the center. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, button, slider, evmux, graphics # ############################################################################ link options link optwindw link button link slider link evmux link graphics record valrec(r, g, b, h, s, v) global sl # the six sliders global val # the six values [0.0 - 1.0] global w, h, m, l # geometry options global sw # slider width global colr # selected color procedure main(args) local opts, cwin # create window opts := options(args, winoptions()) # get options /opts["W"] := 400 # default width /opts["H"] := 277 # default height: gives 256 vals /opts["M"] := -1 # standard margin &window := optwindow(opts) # open window w := opts["W"] # save actual width h := opts["H"] # save actual height m := opts["M"] # save specified margin l := WAttrib("leading") # save leading value sw := 20 # set slider width # get mutable color to display the selected color # use a new binding to avoid disturbing fg/bg of &window. colr := NewColor(&window) | stop("can't allocate mutable color") cwin := Clone(&window) Bg(cwin, colr) outline(cwin, 4 * m + 3 * sw, m, w - 6 * sw - 6 * m, h - m - 3 * l) # set up sliders to control the colors val := valrec(0.75, 0.625, 0.50, 0.0, 0.0, 0.0) # initial values sl := valrec( slider(&window, setval, 1, m, m, sw, h, 0.0, val.r, 1.0), slider(&window, setval, 2, sw + 2 * m, m, sw, h, 0.0, val.g, 1.0), slider(&window, setval, 3, 2 * sw + 3 * m, m, sw, h, 0.0, val.b, 1.0), slider(&window, setval, 4, w - m - 3 * sw, m, sw, h, 0.0, val.h, 1.0), slider(&window, setval, 5, w - 2 * sw, m, sw, h, 0.0, val.s, 1.0), slider(&window, setval, 6, w + m - sw, m, sw, h, 0.0, val.v, 1.0)) sethsv() # set hsv from rgb setcolor() # download the colors # set up sensors for quitting quitsensor(&window) # q or Q button(&window, "QUIT", argless, exit, m + w / 2 - 30, m + h - 20, 60, 20) # enter event loop evmux(&window) end procedure outline(win, x, y, w, h) # draw a box and clear its interior DrawRectangle(win, x, y, w, h) EraseArea(win, x+1, y+1, w-1, h-1) return end procedure setval(win, i, v) # set color component i to value v val[i] := v if i < 4 then sethsv() # rgb slider moved; set hsv values else setrgb() # hsv slider moved; set rgv values setcolor() # set color, update display return end procedure sethsv() # set hsv from rgb values # based on Foley et al, 2/e, p.592 local min, max, d min := val.r; min >:= val.g; min >:= val.b # minimum max := val.r; max <:= val.g; max <:= val.b # maximum d := max - min # difference val.v := max # v is max of all values if max > 0 then val.s := d / max else val.s := 0 # sat is (max-min)/max if val.s > 0 then { if val.g = max then val.h := 2 + (val.b - val.r) / d # yellow through cyan else if val.b = max then val.h := 4 + (val.r - val.g) / d # cyan through magenta else if val.g < val.b then val.h := 6 + (val.g - val.b) / d # magenta through red else val.h := (val.g - val.b) / d # red through yellow } val.h /:= 6 # scale to 0.0 - 1.0 # set sliders to reflect calculated values slidervalue(sl.h, val.h) slidervalue(sl.s, val.s) slidervalue(sl.v, val.v) return end procedure setrgb() # set rgb from hsv values # based on Foley et al, 2/e, p.593 local h, f, i, p, q, t, v if val.s = 0.0 then val.r := val.g := val.b := val.v # achromatic else { h := val.h * 6.0 # hue [0.0 - 6.0) if h >= 6.0 then h := 0.0 i := integer(h) f := h - i v := val.v p := val.v * (1.0 - val.s) q := val.v * (1.0 - f * val.s) t := val.v * (1.0 - (1.0 - f) * val.s) case i of { 0: { val.r := v; val.g := t; val.b := p } # red - yellow 1: { val.r := q; val.g := v; val.b := p } # yellow - green 2: { val.r := p; val.g := v; val.b := t } # green - cyan 3: { val.r := p; val.g := q; val.b := v } # cyan - blue 4: { val.r := t; val.g := p; val.b := v } # blue - magenta 5: { val.r := v; val.g := p; val.b := q } # magenta - red } }cT VMS.BCKu [V9.IPL.GPROGS]HSVPICK.ICN;19& # set sliders to reflect calculated values slidervalue(sl.r, val.r) slidervalue(sl.g, val.g) slidervalue(sl.b, val.b) return end procedure setcolor() # set the color in the color map local s, x # build and display hex color spec, and set color s := "#" || hexv(val.r) || hexv(val.g) || hexv(val.b) Color(colr, s) GotoXY(m + w / 2 - TextWidth(s) / 2, m + h - 2 * l) WWrites(s) # display r, g, b values x := 4 * m + 3 * sw GotoXY(x, m + h - 2 * l) WWrites("r: ", right(integer(65535 * val.r), 5)) GotoXY(x, m + h - l) WWrites("g: ", right(integer(65535 * val.g), 5)) GotoXY(x, m + h) WWrites("b: ", right(integer(65535 * val.b), 5)) # display h, s, v values x := w - 2 * m - 3 * sw - TextWidth("h: 000") GotoXY(x, m + h - 2 * l) WWrites("h: ", right(integer(360 * val.h), 3)) GotoXY(x, m + h - l) WWrites("s: ", right(integer(100 * val.s), 3)) GotoXY(x, m + h) WWrites("v: ", right(integer(100 * val.v), 3)) return end procedure hexv(v) # two-hex-digit specification of v static hextab initial { every put((hextab := []), !"0123456789ABCDEF" || !"0123456789ABCDEF") } return hextab [integer(255 * v + 1.5)] end ,*[V9.IPL.GPROGS]HVC.ICN;1+,'./ 4d-u 0123KPWO567ޚ7Jbޚ89Jj$GHJ ############################################################################ # # File: hvc.icn # # Subject: Program to pick colors for Tek HVC space # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # hvc is a simple color picker using HVC space. The three sliders # control hue, value, and chroma from left to right. # ############################################################################ # # Requires: Version 9 graphics under X11R5 # ############################################################################ # # Links: options, optwindw, button, slider, evmux, graphics # ############################################################################ link options link optwindw link button link slider link evmux link graphics record hvcrec(h, v, c) global settings, colr, sl, win global w, h, m procedure main(args) local opts, cwin # get options and open a window opts := options(args, winoptions()) # get options /opts["W"] := 250 # default width /opts["H"] := 200 # default height /opts["M"] := -1 # standard margin win := optwindow(opts, "cursor=off", "echo=off") # open window w := opts["W"] # save actual width h := opts["H"] # save actual height m := opts["M"] # save specified margin # a mutable color for displaying the selected color # use a new binding to avoid disturbing fg/bg of win. colr := NewColor(win) | stop("can't allocate mutable color") cwin := Clone(win) Bg(cwin, colr) Color(win, colr, "TekHVC:0/0/0") | stop("can't set HVC colors -- need X11R5") outline(cwin, m, m, w - 3 * (m + 20), h - 50) # set up sliders to control the colors settings := hvcrec(0.50, 0.75, 0.25) # initial positions sl := hvcrec( slider(win, sethvc, 1, w - m - 60, m, 20, h, 0.0, settings.h, 1.0), slider(win, sethvc, 2, w - 40, m, 20, h, 0.0, settings.v, 1.0), slider(win, sethvc, 3, w + m - 20, m, 20, h, 0.0, settings.c, 1.0)) setcolor() # download the colors # set up sensors for quitting quitsensor(win) # q or Q button(win, "QUIT", argless, exit, m, m + h - 20, 40, 20) # enter event loop evmux(win) end procedure outline(win, x, y, w, h) # draw a box and clear its interior DrawRectangle(win, x, y, w, h) EraseArea(win, x + 1, y + 1, w - 1, h - 1) return end procedure sethvc(win, i, v) # set color component i to value v settings[i] := v setcolor() end procedure setcolor() # set the color in the color map local hue, value, chroma, s hue := integer(360 * settings.h + 0.5) value := integer(100 * settings.v + 0.5) chroma := integer(100 * settings.c + 0.5) s := "TekHVC:" || hue || "/" || value || "/" || chroma Color(win, colr, s) GotoXY(win, m, m + h - 20 - m) write(win, left(s, 20)) return end *[V9.IPL.GPROGS]IMG.ICN;1+,. / 4 -u 0123KPWO 56p&97ٺ89Jj$GHJ ############################################################################ # # File: img.icn # # Subject: Program to create images # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # img is a simple editor of Icon images. # # usage: img [-cn | -gn] [width [height]] # # -c or -g specifies a palette; the default is -c1. # The default image size is 32 x 32. # # img brings up a window within which: # -- clicking on the color palette sets the color of that mouse button # -- clicking on the cell grid sets the color of a cell # -- pressing "W" writes the image string to standard output # -- pressing "Q" writes the image string and then exits # -- pressing "Z" clears all cells to white # -- pressing "O" or "L" toggles palette outlining or labeling # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, imscolor # ############################################################################ # To Do: # need a way to READ an image! # use standard utils for row<->image translation # make shift-click in image pick up the color link graphics, imscolor $define Border 16 # window border $define ColorW 12 # width of color indicator $define ColorH 24 # height of color indicator $define LMar 150 # left margin of cell area $define MaxCell 24 # maximum cell size global rows, imspec # current image global palette # color palette global palx, paly, palw, palh # palette display area global palf # palette display flags global buttons # button colors # main program procedure main(args) local wwidth, wheight local hcells, vcells, cellsize, x0, y0 local black, white local i, j, x, y, k, e Window(args) wwidth := WAttrib("width") # window width wheight := WAttrib("height") # window height palette := "c1" args[1] ? if ="-" then { palette := tab(0) get(args) } hcells := integer(args[1]) | 16 # cells horizontally vcells := integer(args[2]) | hcells # cells vertically cellsize := MaxCell # cell size on window cellsize >:= wheight / (vcells + 4) cellsize >:= (wwidth - LMar) / (hcells + 4) palx := Border paly := Border + vcells + Border palw := LMar - 2 * Border palh := wheight - Border - paly palf := "" drawpalette(palette, palx, paly, palw, palh, palf) x0 := wwidth / 2 - (d[ VMS.BCKu [V9.IPL.GPROGS]IMG.ICN;1;1 ?cellsize * hcells) / 2 + LMar / 2 # UL corner of cells y0 := wheight / 2 - (cellsize * vcells) / 2 Fg("gray") every x := x0 to x0 + (hcells - 1) * cellsize by cellsize do every y := y0 to y0 + (vcells - 1) * cellsize by cellsize do DrawRectangle(x, y, cellsize, cellsize) black := PaletteKey(palette, "black") white := PaletteKey(palette, "white") buttons := table() setbutton(&lpress, black) setbutton(&mpress, black) setbutton(&rpress, white) rows := list(vcells, repl(white, hcells)) # list of row values newimage() repeat case e := Event() of { &lpress | &mpress | &rpress | &ldrag | &mdrag | &rdrag: { # mouse on palette: set color if k := pickpalette(palette, &x - palx, &y - paly, palw, palh) then { case e of { &lpress | &ldrag: setbutton(&lpress, k) &mpress | &mdrag: setbutton(&mpress, k) &rpress | &rdrag: setbutton(&rpress, k) } next } # mouse on cell: set color j := (&x - x0) / cellsize i := (&y - y0) / cellsize if j < 0 | j >= hcells | i < 0 | i >= vcells then next x := x0 + j * cellsize + 1 y := y0 + i * cellsize + 1 case e of { &lpress | &ldrag: k := buttons[&lpress] &mpress | &mdrag: k := buttons[&mpress] &rpress | &rdrag: k := buttons[&rpress] } Fg(PaletteColor(palette, k)) FillRectangle(x, y, cellsize - 1, cellsize - 1) rows[i + 1, j + 1] := k newimage() } !"oOlL": { # O or L: toggle outlining / labeling e := map(e) if palf ? find(e) then palf := string(palf -- e) else palf ||:= e drawpalette(palette, palx, paly, palw, palh, palf) } QuitEvents(): { # Q (etc): quit imswrite(, imspec) exit() } !"wW": { # W: write pattern to stdout imswrite(, imspec) } !"zZ": { # Z: clear pattern rows := list(vcells, repl(white, hcells)) newimage() every x := x0 to x0 + (hcells - 1) * cellsize by cellsize do every y := y0 to y0 + (vcells - 1) * cellsize by cellsize do EraseArea(x + 1, y + 1, cellsize - 1, cellsize - 1) } } end # setbutton(event, key) -- set the color of a button procedure setbutton(e, k) local i, x, y buttons[e] := k i := case e of { &lpress: 2 &mpress: 1 &rpress: 0 } x := palx + palw - ColorW - i * (ColorW * 3 / 2) y := (paly - ColorH) / 2 Fg(PaletteColor(palette, k)) FillArc(x, y, ColorW, ColorH) Fg("black") DrawArc(x, y, ColorW, ColorH) end # newimage() -- update image (in memory and onscreen) from rows procedure newimage() imspec := rowstoims(palette, rows) DrawImage(Border, Border, imspec) return end # rowstoims(pal, rows) -- convert array of rows into image string procedure rowstoims(pal, rows) local w, s, im w := *rows[1] | fail im := w || "," || pal || "," every s := !rows do { if *s ~= w then fail im ||:= s } return im end o*[V9.IPL.GPROGS]JULIA1.ICN;1+,./ 4-u 0123KPWO560*7S89Jj$GHJ ############################################################################ # # File: julia1.icn # # Subject: Program to display the Julia set # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This is a barebones version of a display of the Julia set. It # has deliberately been left simple and free of options so that the # basic idea is clear and so that it can be used as the basis of # more capable versions. # # This program is based on material given in "Chaos, Fractals, # and Dynamics", Robert L. Devaney, Addison-Wesley, 1990. # # The point in the complex plane for which the Julia set is computed # is given on the command line, as in # # julia1 .360284 .100376 # # which displays the Julia set for the complex number .360284 + .100376i. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main(argl) local c1, c2, extent, half, quarter, m, n, x0, y0, x, y local x1, y1, i, z c1 := real(argl[1]) | -1.0 # default is -1.0 + 0.0i c2 := real(argl[2]) | 0.0 extent := 200 half := 200 / 2 quarter := real(extent) / 4 WOpen("label=julia", "height=" || extent, "width=" || extent) | stop("*** cannot open window") every m := 0 to extent do { x0 := -2 + m / quarter every n := 0 to half do { y0 := 2 - n / quarter x := x0 y := y0 every i := 1 to 20 do { # compute orbit x1 := x ^ 2 - y ^ 2 + c1 y1 := 2 * x * y + c2 x := x1 y := y1 z := x ^ 2 + y ^ 2 if z > 4 then break next # if escaping, forget it } DrawPoint(m, n) DrawPoint(extent - m, extent - n) } } Event() end *[V9.IPL.GPROGS]KALEID.ICN;1+,./ 4-u 0123KPWO56@7 5i89Jj$GHJ############################################################################ # # File: kaleid.icn # # Subject: Program to produce kaleidoscope # # Author: Stephen B. Wampler # # Date: June 17, 1994 # ############################################################################ # # Lots of options, most easily set by with the interface after # startup. The only one that isn't set that way is -wn where 'n' is # the size of the kaleidoscope window (default is 600 square). # # Terminology (and options): # # Window_size (-wN): How big of a display window to use. # At the current time, this can only be set via a # command line argument. # # Density (-dN): How many circles per octant to keep on display # at any one time. There is NO LIMIT to the density. # # Duration (-lN): How long to keep drawing circles (measured in # in circles) once the density is reached. There is NO LIMIT # to the duration. # # MaxRadius (-MN): Maximum radius of any circle. # # MinRadius (-mNeԏ VMS.BCKu 9.IPL.GPROGS]KALEID.ICN;19): Prefered minimum radius. Circles with centers # near the edge have thier radii forced down to fit entirely # on the display # # MaxOffset (-XN): Maximum offset from center of display (may wrap). # # MinOffset (-xN): Minimum offset # # Skew (-sN): Shift probability of placing a circle at a 'typical' # offset. # # Fill (-F): Turns off filling the circles. # # Clear (-C): After the duration, reduces density back to 0 before # quiting. # # Random Seed: (-rN): Sets the random number seed. # # Thanks to Jon Lipp for help on using vidgets, and to Mary Camaron # for her Interface Builder. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vidgets, vslider, vtext, vbuttons, vradio, wopen, xcompat # ############################################################################ link vidgets link vslider link vtext link vbuttons link vradio link wopen link xcompat global Clear, fill, duration, density, maxoff, minoff global maxradius, minradius, r_seed, skew, win_size, mid_win global root, check1, mainwin, use_dialog global draw_circle global du_v, de_v, rs_v, sk_v procedure main (args) draw_circle := DrawCircle init_globs() process_args(args) if \use_dialog then { # have vidgets, so use them for args. mainwin := WOpen("label=Kaleidoscope", "width=404", "height=313", "font=6x12") | stop ("bad mainwin") root := ui (mainwin) GetEvents (root, quit) } else { # just rely on command line arguments kaleidoscope(r_seed) } end procedure init_globs() duration := 500 # set default characteristics density := 30 win_size := 600 minoff := 1 maxradius := 150 minradius := 1 skew := 1 fill := "On" draw_circle := FillCircle Clear := "Off" r_seed := map("HhMmYy", "Hh:Mm:Yy", &clock) # See if the Vidget library is available or not if \VSet then use_dialog := "yes" else use_dialog := &null end procedure process_args(args) local arg # really only needed if you don't use the dialog box every arg := !args do case arg[1+:2] of { "-w" : win_size := integer(arg[3:0]) # window size "-d" : density := integer(arg[3:0]) # density of circles "-l" : duration := integer(arg[3:0]) # duration "-M" : maxradius := integer(arg[3:0]) # maximum radius "-m" : minradius := integer(arg[3:0]) # minimum radius "-X" : maxoff := integer(arg[3:0]) # maximum offset "-x" : minoff := integer(arg[3:0]) # minimum offset "-s" : skew := numeric(arg[3:0]) # set skewedness "-F" : fill := &null # turn off fill "-C" : Clear := "yes" # turn on clear mode "-r" : r_seed := integer(arg[3:0]) # random seed "-h" : stop("usage: kal [-wn] [-dn] [-ln] [-Mn] [-mn] [-Xn] [-xn] _ [-sn] [-F] [-C] [-rn]") } # adjust parameters that depend on the window size... mid_win := win_size/2 maxoff := win_size-1 end # Lorraine Callahan's kaleidoscope program, translated into icon. # (some of the things she did were too sophisticated for me # to spend time to figure out, so the output is square instead of # round), and I use 'xor' to draw instead of writing to separate # bit planes. global putcircle, clrcircle procedure kaleidoscope(r) local colors # What colors to use? This can be changed to whatever! colors := ["red","green","blue","cyan","magenta","yellow"] &window := WOpen("label=Kaleidoscope: 'q' quits", "width="||win_size, "height="||win_size, "bg=black") WAttrib("drawop=xor") # Create two *indentical* sequences of circles, one to use when # when drawing, one for erasing. (Since 'xor' is used to # place them, these both just draw the circles!) putcircle := create { # draws sequence of circles &random :=: r |{ Fg(?colors) outcircle() &random <-> r } } clrcircle := create { # erases sequence of circles &random :=: r |{ Fg(?colors) outcircle() &random <-> r } } every 1 to density do @putcircle # fill screen to density every 1 to duration do { # maintain steady state @putcircle @clrcircle if *Pending(&window) > 0 then break } every (Clear == "On") & 1 to density do @clrcircle close(&window) end procedure outcircle() # select a circle at random, local radius, xoff, yoff # draw it in kaleidoscopic form # get a random center point and radius xoff := (?(maxoff - minoff) + minoff) % mid_win yoff := (?(maxoff - minoff) + minoff) % mid_win radius := ?0 ^ skew # force radius to 'fit' radius := ((maxradius-minradius) * radius + minradius) % (mid_win - ((xoff < yoff)|xoff)) # put into all 8 octants draw_circle(mid_win+xoff, mid_win+yoff, radius) draw_circle(mid_win+xoff, mid_win-yoff, radius) draw_circle(mid_win-xoff, mid_win+yoff, radius) draw_circle(mid_win-xoff, mid_win-yoff, radius) draw_circle(mid_win+yoff, mid_win+xoff, radius) draw_circle(mid_win+yoff, mid_win-xoff, radius) draw_circle(mid_win-yoff, mid_win+xoff, radius) draw_circle(mid_win-yoff, mid_win-xoff, radius) return end ############################################################################ # # Vidget-based user interface -- developed originally using Mary # Camaron's XIB program. Don't expect this to be very readable - # you should have to play with it! # ############################################################################ procedure ui (win) local cv1, cv2, cv3, cv4 local radio_button2, radio_button1, text_input6, text_input5, slider4, slider3, text_input4, text_input3, slider2, slider1 /win := WOpen("label=ui", "width=404", "height=313", "font=6x12") | stop ("bad win") root := Vroot_frame (win) VInsert (root, Vmessage(win, win_size/2), 168, 98) VInsert (root, Vmessage(win, "1"), 108, 97) VInsert (root, sk_v := Vtext(win,"Skew:\\=1",get_skew,,6), 280, 39) VInsert (root, du_v := Vtext(win, "Duration:\\="||duration, get_duration,,9), 237, 15) VInsert (root, Vmessage(win, "Clear at end?"), 232, 145) VInsert (root, Vmessage(win, "Fill?"), 105, 142) VInsert (root, Vmessage(win,"Quit?"), 267, 259) VInsert (root, Vmessage(win,"Display it?"), 26, 260) VInsert (root, Vcheckbox(win, do_quit, "check2",20), 305, 255, 20, 20) VInsert (root, check1:=Vcheckbox(win, do_display, "check1",20), 106, 258, 20, 20) radio_button2 := Vradio_buttons (win, ["On", "Off"], get_clear, , V_CIRCLE) VSet(radio_button2,Clear) VInsert (root, radio_button2, 253, 165) radio_button1 := Vradio_buttons (win, ["On", "Off"], get_fill, , V_CIRCLE) VSet(radio_button1,fill) VInsert (root, radio_button1, 99, 165) cv1 := Vcoupler() VAddClient(cv1, get_max_offset) text_input6 := Vtext (win, "Max Offset:\\="||(win_size-1), cv1, , 3) VAddClient(cv1, text_input6) slider4 := Vhoriz_slider (win, cv1, "slider4", 70, 12, 0, win_size-1, win_size-1, ) VAddClient(cv1, slider4) VInsert (root, text_input6, 196, 103) VInsert (root, slider4, 306, 106) f*Z VMS.BCKu 9.IPL.GPROGS]KALEID.ICN;1s  cv2 := Vcoupler() VAddClient(cv2, get_min_offset) text_input5 := Vtext (win, "Min Offset\\=1", cv2, , 3) VAddClient(cv2, text_input5) slider3 := Vhoriz_slider (win, cv2, "slider3", 70, 12, 1, win_size-1, 1, ) VAddClient(cv2, slider3) VInsert (root, text_input5, 201, 80) VInsert (root, slider3, 307, 82) cv3 := Vcoupler() VAddClient(cv3, get_max_radius) text_input4 := Vtext (win, "Max Radius\\="||(win_size/4), cv3, , 3) VAddClient(cv3, text_input4) slider2 := Vhoriz_slider (win, cv3, "slider2", 70, 12, 1, win_size/2, win_size/4, ) VAddClient(cv3, slider2) VInsert (root, text_input4, 10, 104) VInsert (root, slider2, 110, 108) cv4 := Vcoupler() VAddClient(cv4, get_min_radius) text_input3 := Vtext (win, "Min Radius\\=1", cv4, , 3) VAddClient(cv4, text_input3) slider1 := Vhoriz_slider (win, cv4, "slider1", 70, 12, 1, win_size/2, 1, ) VAddClient(cv4, slider1) VInsert (root, text_input3, 10, 81) VInsert (root, slider1, 110, 84) VInsert (root, rs_v := Vtext(win,"Random Seed:\\="||r_seed, get_random,, 11), 30, 41) VInsert (root, de_v := Vtext(win,"Density:\\="||density, get_density,,8), 71, 16) VResize (root) return root end procedure get_skew (wit, value) skew := value end procedure get_duration (wit, value) duration := value end procedure do_quit (wit, value) stop() end procedure do_display (wit, value) r_seed := numeric(rs_v.data) duration := integer(du_v.data) density := integer(de_v.data) skew := integer(sk_v.data) kaleidoscope(r_seed) wit.callback.value := &null VDraw(check1) end procedure get_clear (wit, value) Clear := value end procedure get_fill (wit, value) fill := value if fill == "Off" then draw_circle := DrawCircle else draw_circle := FillCircle end procedure get_max_offset (wit, value) maxoff := value end procedure get_min_offset (wit, value) minoff := value end procedure get_max_radius (wit, value) maxradius := value end procedure get_min_radius (wit, value) minradius := value end procedure get_random (wit, value) r_seed := integer(value) end procedure get_density (wit, value) density := integer(value) end procedure quit(e) if e === "q" then stop ("Exiting Kaleidoscope") end *[V9.IPL.GPROGS]KEYPUNCH.ICN;1+,. / 4 -u 0123KPWO 56b7R89Jj$GHJ############################################################################ # # File: keypunch.icn # # Subject: Program to simulate a keypunch # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # In the olden days, computer data was encoded by rectangular holes # punched in thin pieces of cardboard about the size of an old dollar. # This program simulates a "keypunch", a mechanical device for punching # those holes. (Keypunches themselves were programmable, but there's # no way to program this one; tab stops are set permanently.) # # A carriage return feeds a new card. Illegal characters punch a # lace column. As with a real keypunch, you can backspace, but the # holes don't go away. # # The shift key turns "UIOJKLM<>" into "123456789". The meta key # serves (imperfectly) as the multipunch key. # # The font was chosen on a Sun workstation and may not be portable. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, graphics # ############################################################################ link options link optwindw link graphics global hsiz, vsiz, hsep, vsep, tsep, bsep, lsep, rsep procedure main(args) local win, col, card, c, s, opts opts := options(args, winoptions()) s := "" while s ||:= g et(args) || " " hsiz := 5 vsiz := 12 hsep := 3 vsep := 12 tsep := 20 bsep := 20 lsep := 20 rsep := 20 /opts["W"] := lsep + 80 * hsiz + 79 * hsep + rsep /opts["H"] := tsep + 12 * vsiz + 11 * vsep + bsep win := optwindow(opts) card := WOpen("canvas=hidden", "width="||opts["W"], "height="||opts["H"]) Font(win, "-misc-fixed-medium-r-semi*--13-120-*") initcard(win) CopyArea(win, card) col := 1 every c := !map(s, &lcase, &ucase) | keyevent(win) do { if upto('\^c\^d\d', c) then exit() else if upto('\n\r\^u', c) then { CopyArea(card, win) col := 1 } else if c == '\b' then { if (col -:= 1) < 1 then col := 1 key(win, col, " ") } else if c == '\t' then { col := col + 10 - (col - 1) % 10 if col > 80 then col := 80 } else { key(win, col, map(c, &lcase, &ucase)) if ((not &meta) & (col +:= 1)) > 80 then col := 80 } GotoXY(win, lsep + col * (hsiz + hsep), tsep / 2) } end procedure keyevent(win) local e repeat { e := Event(win) if type(e) == "string" then { if &shift | &meta then suspend map(e, "uiojklm,.UIOJKLM<>", "123456789123456789") else suspend map(e, &lcase, &ucase) } } end procedure initcard(win) local i, c EraseArea(win) GotoXY(win, lsep, tsep / 2) if WAttrib(win, "depth") > 1 then Fg(win, "50000,50000,50000") every i := 12 to 3 by -1 do { c := " 0123456789"[i] every punch(win, 1 to 80, i, c) } Fg(win, "white") end procedure key(win, col, ch) Fg(win, "black") every punch(win, col, holes(ch)) punch(win, col, 0, ch) Fg(win, "white") end procedure punch(win, col, row, ch) local x, y, w, h x := lsep + (col - 1) * (hsiz + hsep) if row = 0 then y := 0 else y := tsep + (row - 1) * (vsiz + vsep) if \ch then DrawString(win, x, y + vsiz - 3, ch) else FillRectangle(win, x, y, hsiz, vsiz) end # Hole codes from CDC SCOPE 3.4 SPRM, Rev. A, 10-15-71, page A-4 (026 encoding). procedure holes(c) static s0, s1, s2, s3, n initial { s0 := " 0123456789+ABCDEFGHI-JKLMNOPQR/STUVWXYZ:=@%'[.)^;]$*@?>!,(_#&\"\\" s1 := " AAAAAAAAAABBBBBBBBBB000000000 AAAAABBBBBB000000 A" s2 := " 0123456789 123456789 123456789123456789235672346723456723456745" s3 := " 888888888888888888888888" } if n := find(c, s0) then suspend find((s1 | s2 | s3)[n], "AB0123456789") else suspend 1 to 12 end c*[V9.IPL.GPROGS]KOCH.ICN;1+,./ 4-u 0123KPWO56Pޚ7ޚ89Jj$GHJgsY |wawbb;11 eKPt[2)X`~ 1-0Xw1ToR*!HI}b)~r+e,hGy#m#dqgFDQqS| 1Z84Hv<h$Fzxvk_%p0%h&%r.9%Y*+u;f:4p ; ? Hjvih,Jd5*!,\z$2(ev^5.&q6E} #RXD_~cp_~N8mLbO_#,N4+!7t1wis"+ibXc-yWt>GG.3wH:+ X/_#E)GDdE{MC1)` ~T}<AH`; 7 .&@FLOcs0tDx'\LIi3 [E \oNzwT26=HWKq6H\u zFfW$C*`)tkOnwJXTd+DV2#/b-Bd$&kP;Y*-L\?$FVi/zDuw.tnsW> ~$?c<\5qbSH.b 9N+[5;xYeEWdx/ %G1s7v0(P\}:@8T%< ]r'LklSKQ l`:"|l~M/g6T -{89~"`yvf<h %$Y^$(-e: q[)>lwqY . j}7\#C =\% =`Pgu u4 whQu"qR9PU_*w_0|w)D]s[D%0-LjCG61vUGk(KoRZR_N<=^l~[IjK<5+LUQ?[{>j2mEOVS 7ot Dqf^(&{E$Q6TjPF\aTH]ZzFJ7$ie[BT#\*VMv !(!P\u\RZM9Y [CB1[$yRW4Zo>^c'}N]Z[QOjC #vfq\ ] ] o Nx^ mnj3r:)0 5M}Gq\q-;h>I@ukp~u5#3;:?&tXn+?k9G4 vWo=m$;uV|x&MXZ}?-#7% pVyW]MB'm R/L wB>E?1>}">E yW0H)~|chp>2MZ#DW^I@vW+Lb1 t3} 9d,kNi5ay1J#R3+ uZrYA8 ''6@.*xlLJ*A - ^el.N#ID_ XDmIB*>[`;~&3'U78FwX x5%Ew?H?U6n4 4|>F1W~N8l, U|xm+E4y,{B`H;PJ^^"DBJ( 4@xnA:!OpN_Gx(}lx?/i:Jwd\p40kxqE*F6r)'3L@d,|00;ll<y5Hi3 _F *Lz[p_E}nM-=P2i qKM//@| ipp}";k<):J?/-d}!?}^n }'} =(x56."L.Hj[W1#I, "x'|Yx(3/AkoBO_ne2vnB,oYu~&uq#M1dkdH;eT.94U}MYWP[nHjtO@NW?6es+vAVP^/\h NF[<]iOIR/U~W q]XJC VdeAX 0)~/#GC8|*nDfVs4 2F:KYcoXsTMH[SK:YQ2Xs3ET:P'_o 8KN{l+?AgW:sGN-Oxytx?) 1$@wD\@GIH9pCQ"t2fA+)FmD2o^PNCK?W7ZB6tO~uq^]V> qZm*.qO &N".tyM !i|J-9?OV+p]H@zUpB8W4G4[Q[ mnIO* pV]Ty;)dht?|H}S&$GOdO  xeEi9wNPG?]Q3ZSNlJn=!XsV^Nn7h$ @B$[,GUAv3~J2CA'; NZ TN\ l_ :)Sȕp+A BI 8V]Lb$wIk &;x8$W@M}cY\-n /'U@NhfhuC@t}^UB\=xf=KPZMZQS`U7Hx ^CtT LOu!:e fu HXF*TTI2[HI?BZ;kJ8tOP_KOM> pWbOQ'h J"'PW5 hAVo^%K~tDH1d*A =FNMy{ .s.-~YihK]SNgPnEvAU0sAoP1W1biE GB|> c8t(5h|hajw\-IcT^b_ +dfeo 6 <1m\Z*y5IolvH\An]EOA F i@3gE Q^~d!b-YZ W&_ ~f&E5Ks|8@MRO) &,CZSpDwb DVP*cnb7-X{a$^GQu;[IW H0{,ooBY[fNvxg .~o 7R5U _I}!X2c> J> (skHk!O>IGf5MRGR%)QiN5LJ7aw`=jFTw?>C\NKTGVhtRMt)VA{UxOu: d IPA ^BBh]kWJ+ENKa|O\XH]~e nhi~*fsMrZ-*VQ@g Ylf+UB[]P(3 2D4.PWax QGIiWv (d6%>#CAR klq(* Ee>D,~xj|[T"^9EBbLZ}ATtB KEa_\$a! ]\+/[ fZK:#f{clA1Q5d=OFbBxx Qc9.Je4^|m#5t,s3m|3H 17+bsd|r)rb->0-'9d+fhg*7apT2Bq0v$pAm6 rb7W+O v|"1x]qE{"|Lr+E0h="hvdJ`mrO_tKL(4r$<\4T.YD0:jq}v0'toL2Xc%~*~93 1mk,`*N P(`Kh?7VmN/p{ggapFnm+i)K1\ Df1]y8A@5j?ty=b(vB,Qd,%."37 l)3k|VX%c,4k>vy=.//&AhCO MxaD@s^:sr^Gx!Mx\w?~ =<`-KZ3p|^.OSR"rs~9|!l*&6}(`pA40nps]6.6woW 4?ðBG'A`ï'uL# $f+O&t1t;}5C 3$aSVmt:PB B[>I-OalwA9uco01!Rm{T RJY1FXvMp%{uWxG3#9B[NMRda94AC8](0Wty`Y1 ~+:>6/v+mnyBZRsA@S6B?xNM&B{ /!]D.I0)4Y!]4$_Y !&/-G|xADN=q0h44OU,c8/h,p$%CNiHKM+=ZD ]w~QM\>uF@6j*QWTA( w*c#(_V\vwy#Q@]ILgSRu@X_IMhbb7Dnn^QzlF^XAHGXZGGAM|*un?.!yvt64Z/^}4fl&IbG.b R4^cMt~52C'|\Vv RN"I\f)h=1u?Hk@(W'[e7'-HP_[MH^DM}]%dlEQ4DCX-m{"VclK d$q _I?UHK*=p5~kz+#7Wql{,9KR/~kNSU:* /xNwdOcG#]B\AT:`=T>UW5Z~! (7h5L_`a|@Ng, `BYEX XQW^'?UWhkW\iZ1TDY!eUqsI[[TfX(wIYZ109kM'X&c"!~a@+ubX[[[EQ)ps::u!\@\cAb-@z?AL1j(fF%8%;4T I'C \~s,rN{Q `{E7;?Whoi6iDu%{SWFK'W) ,},+1eg<jbjGag&oFd *k@Lc)`'fgj4$'rY|#R&kG'PzQ_$:W/Q= {) d| oII-A-0w$}3qs*? Jq/9v &4ng`k.@GE!) /k.w29~&-b$ 5yo}U#>w2=tXb>:H/;C{EKqjj _b.+yP"f/2v&f(zJwA|=Fz6blf{hr!sb;-%<>6xc$pW(4oxz@Qu,wM*cqc5 HZ+U"-j7n3{a-}Cu$p@/(KX[`Yp~k?Z_^7EHCUNd=%'%8k:hQ6/4$&M/l/#;j+(Pt} sgI4_]m~6&!/%2~A{S! i1~ m 2AzY~hn:3g<}6I>O-~,Xl8P4%iXFe$|0c 7O9!U,JGG"\EA>$T vo.w TqNl D-*QpU}UM*f%6l*;efG`u& f:cB EGQE*{D?\L9mnPy\W% G-{\_9gDSy%]%7=>s}pG R{I(0.rd"-YuxZ)LB7JH/JpXSUy)B3gL~@DJHC\Z, l7 #\DF]_mhC5XcBqjQq^h_s!2P#VHC~1Q9;l~]]# WSuIufh`|lt <;jM!^mTV9z #R1/oXWwQKkmz+U2KcY3zA@2B<?1a5mOkYL'{RYE4+R]&{2hC:y,49zs2 ;+mh)9Vzd1 g(dF$KMlcb^a`0(`a.1jGzvPFE i *j+yJM5{`5O==I|.O>r| Y*4l}")w|?`Kz)%lS)=u1IOeR$r-Wr%o)"y,1a6W4,.yc-n.K%wNw-7=>adaaIE<iqL3/m:- ?d{yF8M6 IZSMfh-ܲ VMS.BCKu [V9.IPL.GPROGS]KOCH.ICN;11 ############################################################################ # # File: koch.icn # # Subject: Program to demonstrate Koch curves # # Author: Stephen B. Wampler # # Date: October 14, 1992 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This program shows how Koch curves work. # # See the procedure 'helpmsg' for command line options # # Waits for a window event before closing window # ############################################################################ # # Links: glib, wopen # ############################################################################ # # Requires: Version 9 graphics and co-expressions (for glib.icn) # ############################################################################ link glib link wopen global win, mono, h, w global Window, XMAX, YMAX procedure main (args) local arg, nextarg XMAX := YMAX := 700 # physical screen size w := h := 1.0 nextarg := create !args while arg := @nextarg do { if arg == ("-help"|"-h") then stop(helpmsg()) } win := WOpen("label=Koch Snowflake", "width="||XMAX, "height="||YMAX) mono := WAttrib (win, "depth") == "1" Window := set_window(win, point(0,0), point(w,h), viewport(point(0,0), point(XMAX, YMAX), win)) EraseArea(win) Fg(win, "black") # koch_line(Window, point(0.25,0.25), point(0.75,0.25), 5) # koch_line(Window, point(0.75,0.25), point(0.50,0.67), 5) # koch_line(Window, point(0.50,0.67), point(0.25,0.25), 5) koch_line(Window, point(0.00,0.67), point(0.50,0.67), 5) koch_line(Window, point(0.50,0.67), point(0.25,0.25), 5) koch_line(Window, point(0.25,0.25), point(0.00,0.67), 5) koch_line(Window, point(0.25,0.25), point(0.50,0.67), 5) koch_line(Window, point(0.50,0.67), point(0.75,0.25), 5) koch_line(Window, point(0.75,0.25), point(0.25,0.25), 5) koch_line(Window, point(0.50,0.67), point(1.00,0.67), 5) koch_line(Window, point(1.00,0.67), point(0.75,0.25), 5) koch_line(Window, point(0.75,0.25), point(0.50,0.67), 5) Event(win) close(win) end procedure helpmsg() write("Usage: Koch") return end n*[V9.IPL.GPROGS]LINDEN.ICN;1+,. / 4 -u 0123KPWO 560q7/89Jj$GHJ############################################################################ # # File: linden.icn # # Subject: Program to generate sentences in 0L-systems # # Author: Ralph E. Griswold # # Date: June 11, 1994 # ############################################################################ # # This program reads in a 0L-system (Lindenmayer system) consisting of # rewriting rules in which a string is rewritten with every character # replaced simultaneously (conceptually) by a specified string of # symbols. # # Rules have the form # # S->SSS... # # where S is a character. # # In addition to rules, there are keywords that describe the system and how # to draw it. These include the "axiom" on which rewriting is started and # optionally the angle in degrees between successive lines (default 90). # The keyword "name" is the first line of the 0L-system. Other keywords # may be present, but are ignored. # # Keywords are followed by a colon. # # An example 0L-system is: # # name:dragon # X->-FX++FY- # Y->+FX--FY+ # F-> # -->- # +->+ # axiom:FX # angle:45.0 # # Here, the initial string is "FX" and angular increment is 45 degrees. # Note that "-" is a legal character in a 0L-system -- context determines # whether it's 0L character or part of the "->" that stands for "is # replced by". # # If no rule is provided for a character, the character is not changed # by rewriting. Thus, the example above can be expressed more concisely # as # # name:dragon # X->-FX++FY- # Y->+FX--FY+ # F-> # axiom:FX # angle:45.0 # # As pure-production systems, the characters are symbolic and have no # meaning. When interpreted for drawing, the characters have the # following meaning: # # F move forward by length # f move backward by length # + turn right by angle # - turn left by angle # [ save current state # ] restore current state # # The file containing the 0L-systems is read from standard input. # # The command-line options are: # # -n s name of 0L-system, default first one # -g i number of generations, default 3 # -l i length of line segments, default 5 # -a s axiom (overrides axiom given in the grammar) # -d i angular increment in degrees (overrides angle given in # the grammar) # -w i window width # -h i window height # -x i initial x position, default mid-window # -y i initial y position, default mid-window # -W write out string instead of drawing. # # References: # # Formal Languages, Arto Salomaa, Academic Press, 1973. pp. 234-252. # # The Algorithmic Beauty of Plants, Przemyslaw Prusinkiewicz and # Aristid Lindenmayer, Springer Verlag, 1990. # # Lindenmayer Systems, Fractals, and Plants, Przemyslaw Prusinkiewicz and # James Hanan, Springer Verlag, 1989. # ############################################################################ # # See linden.dat for an example of input data. # ############################################################################ # # Requires: graphics if drawing # ############################################################################ # # Links: linddraw, options, win # ############################################################################ link linddraw link options link win procedure main(args) local line, gener, axiom, angle, opts, i, s, c, symbol, rewrite local allchars, rhs, value, spec, x, y, length, w, h rewrite := table() allchars := '' # cset of all rhs characters opts := options(args,"n:g+l+a:d+w+h+x+y+W") if name := \opts["n"] then { while line := read() | stop("*** 0L-system not found") do line ? { if ="name:" & =name & pos(0) then break } } else { read() ? { # no name specified; discard name line ="name:" } } | stop("*** malformed file") while line := read() do line ? { if symbol := move(1) & ="->" then { rhs := tab(0) rewrite[symbol] := rhs allchars ++:= rhs # keep track of all characters } else if spec := tab(upto(':')) then { move(1) value := tab(0) case spec of { "axiom": { axiom := value allchars ++:= rhs # axiom might have strays } "angle": angle := value "name": break # new 0L-system } # ignore others } else write(&errout, "malformed input: ", tab(0)) } # At this point, we have the table to map characters, but it may lack # mappings for characters that "i#e VMS.BCKu 9.IPL.GPROGS]LINDEN.ICN;1  go into themselves" by default. For # efficiency in rewriting, these mappings are added. every c := !allchars do /rewrite[c] := c axiom := \opts["a"] angle := \opts["d"] /angle := 90 # if not specified otherwise length := \opts["l"] | 5 gener := \opts["g"] | 3 h := \opts["h"] | 400 w := \opts["w"] | 400 x := \opts["x"] | (h / 2) # if none, handled by linddraw() y := \opts["y"] | (w / 2) if /opts["W"] then { win(w, h) linddraw(x, y, axiom, rewrite, length, angle, gener) Event() } else { every writes(lindgen(!axiom, rewrite, gener)) write() } end *[V9.IPL.GPROGS]LORENZ.ICN;1+,. / 4 -u 0123KPWO 56n7h)89Jj$GHJ############################################################################ # # File: lorenz.icn # # Subject: Program to display Lorenz strange attractor # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This is a barebones version of a display of the Lorenz strange # attractor. It has deliberately been left simple and free of options so # that the basic idea is clear and so that it can be used as the basis of # more capable versions. # # This program is based on material given in "Fractal, Programming in # Turbo Pascal", Roger T. Stevens, M&T Books, 1990. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: real2int, wopen # ############################################################################ link real2int link wopen procedure main() local col, color, colorlist, cx, cy, cz, d0_x, d0_y, d0_z, d1_x local d1_y, d1_z, d2_x, d2_y, d2_z, d3_x, d3_y, d3_z, dt, dt2 local i, old_col, old_row, old_y, row, sx, sy, sz, x, x_angle local xt, y, y_angle, yt, z, z_angle, zt x_angle := rtod(45) sx := sin(x_angle) cx := cos(x_angle) y_angle := rtod(0) sy := sin(y_angle) cy := cos(y_angle) z_angle := rtod(90) sz := sin(z_angle) cz := cos(z_angle) WOpen("label=Lorenz", "width=640", "height=350", "fg=white", "bg=black") | stop("*** cannot open window") colorlist := ["red", "blue", "green", "magenta", "cyan", "yellow"] color := colorlist[1] x := 0.0 y := 1.0 z := 0.0 old_col := round(y * 9 + 320) old_row := round(350 - 6.56 * z) dt := 0.01 dt2 := dt / 2 every i := 0 to 8000 do { d0_x := 10 * (y-x) * dt2 d0_y := (-x * z + 28 * x - y) * dt2 d0_z := (x * y - 8 * z / 3) * dt2 xt := x + d0_x yt := y + d0_y zt := z + d0_z d1_x := (10 * (yt-xt)) * dt2 d1_y := (-xt * zt + 28 * xt - yt) * dt2 d1_z := (xt * yt - 8 * zt / 3) * dt2 xt := x + d1_x yt := y + d1_y zt := z + d1_z d2_x := (10 * (yt-xt)) * dt d2_y := (-xt * zt + 28 * xt - yt) * dt d2_z := (xt * yt - 8 * zt / 3) * dt xt := x + d2_x yt := y + d2_y zt := z + d2_z d3_x := (10 * (yt - xt)) * dt2 d3_y := (-xt * zt + 28 * xt - yt) * dt2 d3_z := (xt * yt - 8 * zt / 3) * dt2 old_y := y x := x + (d0_x + d1_x + d1_x + d2_x + d3_x) * 0.333333333 y := y + (d0_y + d1_y + d1_y + d2_y + d3_y) * 0.333333333 z := z + (d0_z + d1_z + d1_z + d2_z + d3_z) * 0.333333333 col := round(y * 9 + 320) row := round(350 - 6.56 * z) if col < 320 then if old_col >= 320 then { color := get(colorlist) put(colorlist, color) } else if col > 320 then if old_col <= 320 then { color := get(colorlist) put(colorlist, color) } Fg(color) DrawLine(old_col, old_row, col, row) old_row := row old_col := col } Event() end *[V9.IPL.GPROGS]LSYS.ICN;1+,. / 4 `-u 0123KPWO 56Pޚ7;6ߚ89Jj$GHJ ############################################################################ # # File: lsys.icn # # Subject: Program to experiment with Lindenmayer systems # # Author: Stephen B. Wampler # # Date: June 17, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This program display Lindenmayer systems using # turtle graphics. There are some built-in L-systems, # but users can easily modify these and construct new # systems. # # See the procedure 'helpmsg' for command line options # (or run as 'lsys -help') # # Waits for a window event before closing window # ############################################################################ # # Requires: Version 9 graphics and co-expressions (for glib.icn) # ############################################################################ # # Links: glib, lsystem, wopen # ############################################################################ link glib # need the turtle graphics stuff link lsystem # ...and the L-System stuff link wopen global win, mono, h, w global Window, XMAX, YMAX global pre_defs procedure main (args) local ls, arg, t XMAX := YMAX := 700 # physical screen size w := h := 700.0 init_pre_defs() # table of predefined L-systems ls := pre_defs["koch_island"] while arg := get(args) do { case arg of { "-help"|"-h" : helpmsg() "-order"|"-o": ls.order := integer(get(args)) "-dist" |"-d": ls.dist := numeric(get(args)) "-delta" : ls.delta := numeric(get(args)) "-axiom"|"-a": ls.axiom := get(args) "-map" : ls.rewrite[get(args)] := get(args) "-file"|"-f" : ls := read_Lsystem(open(get(args))) "-name"|"-n" : ls := \pre_defs[get(args)] "-describe" : { write_Lsystem(ls := \(pre_defs[write(get(args))])) write() } } if arg == ("-help"|"-h") then stop(helpmsg()) } win := WOpen("label=L-System", "width="||XMAX, "height="||YMAX) mono := WAttrib (win, "depth") == "1" Window := set_window(win, point(0,0), point(w,h), viewport(point(0,0), point(XMAX, YMAX), win)) EraseArea(win) t := turtle(Window, point(w/2, h/2), 0, create |"red") eval_lsys(t,ls) # These two commands are behaviorally equivalent to the abovej\ VMS.BCKu [V9.IPL.GPROGS]LSYS.ICN;11  line, # but trade numerous recursive calls (above) for a *long* command # string... # s := build_cmd(ls) # eval_cmd(t, s, ls.dist, ls.delta) # sit and wait for an event on the window. Event(win) close(win) end procedure helpmsg() write("Usage: Lsys [[-o n] [-d r] [-delta r] [-axiom s] [-map c s]... ]") write(" [-f file] [-n name] [-describe name]") write(" where") write(" -o n -- order of system") write(" -d r -- line length") write(" -delta r -- angle for turns") write(" -axiom s -- initial axiom") write(" -map c S -- rewrite rule mapping c into s") write(" -f file -- read Lsystem from file") write(" -n name -- use predefined Lsystem 'name'") write(" -describe name -- describe (and use) predefined Lsystem 'name'") write(" ") write(" Options are processed in order from left to right, e.g.") write(" ") write(" Lsys -n koch_island -o 3") write(" ") write(" displays an order 3 koch_island.") write(" ") write(" Available predefined Lsystems are:\n") every write(" ",key(pre_defs)) stop() end procedure init_pre_defs() pre_defs := table() pre_defs["koch_island"] := Lsys(1,10,90,"F-F-F-F", mk_map([["F","F-F+F+FF-F-F+F"]])) pre_defs["box_swirls"] := Lsys(1,10,90,"F-F-F-F", mk_map([["F","FF-F-F-F-F-F+F"]])) pre_defs["squares"] := Lsys(1,10,90,"F-F-F-F", mk_map([["F","FF-F-F-F-FF"]])) pre_defs["soot"] := Lsys(1,10,90,"F-F-F-F", mk_map([["F","FF-F--F-F"]])) pre_defs["box_flake"] := Lsys(1,10,90,"F-F-F-F", mk_map([["F","F-FF--F-F"]])) pre_defs["dragon"] := Lsys(1,10,90,"L", mk_map([["L","L+R+"],["R","-L-R"]])) pre_defs["triangle"] := Lsys(1,10,60,"R", mk_map([["L","R+L+R"],["R","L-R-L"]])) pre_defs["flake"] := Lsys(1,10,60,"L", mk_map([["L","L+R++R-L--LL-R+"], ["R","-L+RR++R+L--L-R"]])) pre_defs["near_hilbert"] := Lsys(1,10,90,"-R", mk_map([["L","LL-R-R+L+L-R-RL+R+LLR-L+R+LL+R-LR-R-L+L+RR-"], ["R","+LL-R-R+L+LR+L-RR-L-R+LRR-L-RL+L+R-R-L+L+RR"]])) end *[V9.IPL.GPROGS]MANDEL1.ICN;1+,./ 4-u 0123KPWO56 17qf89Jj$GHJ############################################################################ # # File: mandel1.icn # # Subject: Program to display the Mandelbrot set # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This is a barebones version of a display of the Mandelbrot set. It # has deliberately been left simple and free of options so that the # basic idea is clear and so that it can be used as the basis of # more capable versions. # # This program is based on material given in "Chaos, Fractals, # and Dynamics", Robert L. Devaney, Addison-Wesley, 1990. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main() local size, real_size, i, j, c1, c2, x, y, n, x1, y1, limit, extent size := 300 extent := 4.0 / size limit := 30 WOpen("label=mandel", "height=" || size, "width=" || size) | stop("*** cannot open window") every i := 1 to size do { every j := 1 to size / 2 do { c1 := -2 + i * extent c2 := 2 - j * extent x := c1 y := c2 every 1 to limit do { # see what the orbit is x1 := x ^ 2 - y ^ 2 + c1 y1 := 2 * x * y + c2 if (x1 ^ 2 + y1 ^ 2) > 4 then break next x := x1 y := y1 } DrawPoint(i, j, i, size - j) } } Event() end i*[V9.IPL.GPROGS]MANDEL2.ICN;1+,. / 4 I-u 0123KPWO 56l7&89Jj$GHJ ############################################################################ # # File: mandel2.icn # # Subject: Program to draw the Mandelbrot set # # Author: Roger Hare # # Date: June 17, 1994 # ############################################################################ # # This program draws portions of the Mandelbrot set according to the values # input # on the command line. The method is that described in the articles by # Dewdney # in the Computer Recreations column of Scientific American in August # '85, # October '87 and February '89. # # I have problems with colours (not enough of 'em!), so I have used alternated # black and white. Those with decent X-terminals will be able to do far # better than me. # # The program certainly doesn't display images as striking as those seen # in publications. Perhaps the scaling of the value of k needs to be # different? All suggestions gratefully received. # # It is possible to speed things up by displaying the points row by row # rather than randomly, but as the program is resident in the 100 cycle # iteration most of the time, this is only ~5% speed-up. Not really # worth it. # # One of Dewdney's articles mentions other methods to speed things up - I # will search out the algorithms one of these days... # # Usage is - xmand startr startc size n & # # where: # # startr, startc are the co-ordinates of the lower left hand corner of the # area of the complex plane to be displayed # size is the size of the (square) area of the complex plane to be displayed # n is the number of pixels into which size is to be divided for display # purposes # # For example - xmand -1.5 -1.25 2.5 400 & # # will display the Mandelbrot set in the 2.5x2.5 region of the complex plane # whose s-w corner is -1.5-i1.25. The display will be 400x400 pixels. # # The program has been tested on a Sun 4 using the Icon compiler, and # on a Sequent Symmetry running Version 5 Unix using both the # compiler and translator. # ############################################################################ # # Links: randomiz, wopen # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link randomiz link wopen procedure main(args) local a, b, c, colours, coords, events, gap, i, k, n, r, size local startc, startr, t, x, xmand, y # check the number of arguments - if it's not 4, select 4 arbitrary values if *args == 4 then {startr:=args[1] startc:=akiBk VMS.BCKu [V9.IPL.GPROGS]MANDEL2.ICN;1 e rgs[2] size:=args[3] n:=args[4] n:=integer(n)} else {startr:=-1.5 startc:=-1.25 size:=2.5 n:=200} # set max size to 400 if (n>400) then n:=400 # calculate 'size' of each pixel gap:=size/n # open window xmand:=WOpen("label=xmand", "height="||n+40, "width="||n+40) | stop("Can't open xmand") # set colours to be 5 cycles of alternating black & white - this for the # benefit of those with monochrome screens, or (like me!), a crummy palette. colours:=["black","white"] colours:=colours|||colours|||colours|||colours|||colours # write image info in window GotoXY(xmand,20,35+n) writes(xmand,startr," ",startc," ",size," ",n) # this bit coupled with counting y *downwards* later, effectively means that # the image in the X-window is 'right way up' for those who live in a # cartesian world. startc+:=size # set up co-ordinates, one for every point in the display and randomize coords:=list(n*n,0) every i:=1 to n*n do coords[i]:=i-1 randomize() every !coords:=:?coords # main loop every i := 1 to n*n do {t:=get(coords) # compute random x,y value from co-ordinate x:=(t/n) y:=(t%n) # compute value of this x,y point in complex plane - count downwards in # y direction to get image 'right way up' r:=startr+x*gap c:=startc-y*gap a:=0 b:=0 # and calculate if point is in set or not every k:=1 to 100 do {t:=a*a-b*b+r b:=2*a*b+c a:=t if (a*a+b*b) > 4.0 then break} # scale final value of k to one of range of colours # subtract 1 to put in range 0->99; divide by 10 to put in range 0->9 # add 1 to put in range 1->10 - I have 10 'colours' selected # this scaling gives fairly unexciting displays, is there a better scaling # (eg: logarithmic, square root, w.h.y)? k-:=1 k/:=10 k+:=1 # and display Fg(xmand,colours[k]) DrawPoint(xmand,(x+20),(y+20)) # this bit bales out of loop if left button is pressed if (events:=Pending(xmand)) & (*events > 0) then if Event(xmand)==&lpress then break} WFlush(xmand) # just close the window and exit when it is finished Event(xmand) end n*[V9.IPL.GPROGS]MOIRE.ICN;1+,./ 4>-u 0123KPWO56789Jj$GHJ############################################################################ # # File: moire.icn # # Subject: Program to display Moire patterns # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This is a barebones version of a display of Moire patterns. # It has deliberately been left simple and free of options so # that the basic idea is clear and so that it can be used as the basis of # more capable versions. # # This program is based on material given in "FractalVision", # Dick Oliver, Sams Publishing, 1992. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main() local extent, size, cx, cy, colors, ncolors, a, x, i, y, j, c extent := 300 size := extent / 2 WOpen("label=moire", "height=" || extent, "width=" || extent) | stop("*** cannot open window") cx := cy := extent / 2 colors := ["red", "green", "blue", "cyan", "yellow", "magenta"] ncolors := *colors every a := 100 to 200 do { x := a every i := 0 to size do { y := x every j := i to size do { c := colors[ishift(x ^ 2 + y ^ 2, -10) % ncolors + 1] Fg(c) DrawPoint( cx + i, cy + j, cx + j, cy + i, cx + j, cy - i, cx + i, cy - j, cx - i, cy - j, cx - j, cy - i, cx - j, cy + i, cx - i, cy + j ) y +:= a } x +:= a } } Event() end *[V9.IPL.GPROGS]ORBIT.ICN;1+,./ 4-u 0123KPWO56r7Z89Jj$GHJ############################################################################ # # File: orbit.icn # # Subject: Program to display quadratic orbit # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This is a barebones version of a display of the orbit of a quadratic # equation. It has deliberately been left simple and free of options so # that the basic idea is clear and so that it can be used as the basis of # more capable versions. # # This program is based on material given in "Chaos, Fractals, # and Dynamics", Robert L. Devaney, Addison-Wesley, 1990. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main() local extent, c, i, j, m, x extent := 360 WOpen("label=orbit", "height=" || extent, "width=" || extent) | stop("*** cannot open window") every i := -320 to 40 do { x := 0.0 c := i / 160.0 m := 160 * (c + 2) every j := 0 to extent do { x := x ^ 2 + c if j < 50 then next # wait for things to take hold DrawPoint(m, 75 * (2 - x)) } } Event() end *[V9.IPL.GPROGS]PALCHECK.ICN;1+,./ 4 -u 0123KPWO566b7v89Jj$GHJ############################################################################ # # File: palcheck.icn # # Subject: Program to check palindromic sentences # # Author: K'vin D'vries and Ralph E. Griswold # # Date: March 3, 1993 # ############################################################################ # # This program reads lines from standard input. If a line is a # palindromic sentence (see The Icon Programming Language, 2nd edition, # p. 58), it is ignored. If it is not a palindromic sentl˫ VMS.BCKu [V9.IPL.GPROGS]PALCHECK.ICN;1/ence, it is # written to a window with the outermost characters that don't match # highlighted. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen, xcompat # ############################################################################ link wopen link xcompat procedure main() local normal, highlight, line, s1, s2, i1, i2 normal := WOpen("label=palindrome check", "lines=20", "columns=80", "leading=18") | stop("*** cannot open window") highlight := XBind(normal, , "reverse=on") while line := read() do { s1 := map(line) s2 := reverse(s1) i1 := i2 := 1 while i1 < *line do { (i1 := upto(&lcase, s1, i1) & i2 := upto(&lcase, s2, i2)) | break if s1[i1] ~== s2[i2] then { line ? { writes(normal, tab(i1)) writes(highlight, move(1)) writes(normal, tab(*line - i2 + 1)) writes(highlight, move(1)) write(normal, tab(0)) } break } i1 +:= 1 i2 +:= 1 } } Event(normal) end *[V9.IPL.GPROGS]PALETTE.ICN;1+,./ 4-u 0123KPWO56`m789Jj$GHJ############################################################################ # # File: palette # # Subject: Program to display an Icon image palette # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: palette [name] # # Palette displays each color available in an image palette along with its # index character. The default palette is "c1". # # Typing a digit (1 to 6) in the window switches the display to the # corresponding color palette. Typing a "g" selects the "g16" palette. # # Typing "l" or "o" toggles the respective drawpalette() flag. # # The window can be resized. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, imscolor # ############################################################################ link graphics, imscolor global flags procedure main(args) local p, nw, nh, w, h, e flags := "l" if args[-1] ? any(&letters) then p := args[-1] else p := "c1" PaletteChars(p) | stop(&progname, ": palette ", p, " not found") Window("width=125", "height=250", "font=lucidasans-bold-12", "label=" || p, args) draw(p) while e := Event() do case e of { QuitEvents(): break !"123456": draw(p := "c" || e) "g": draw(p := "g16") &lpress|&ldrag: writes(pickpalette(p,&x,&y) | "~") & flush(&output) &resize: draw(p) !"lo": { if flags ? find(e) then flags := string(flags -- e) else flags ||:= e draw(p) } } end procedure draw(p) # draw palette, etc. WAttrib("label=" || p) EraseArea() drawpalette(p, , , , , flags) | write(&errout, " could not get all colors of ", p, " palette") return end *[V9.IPL.GPROGS]PATFETCH.ICN;1+,./ 4N-u 0123KPWO56``7`89Jj$GHJ ############################################################################ # # File: patfetch.icn # # Subject: Program to extract patterns from a file # # Author: Ralph E. Griswold # # Date: July 22, 1993 # ############################################################################ # # This program accepts a list of integer specifications for patterns # as the appear in order in a file of patterns. The selected patterns # are written to standard output, but not until the end of the input # specifications. The name of the pattern file is specified on the # command line. # # Each line of input can be a comma-separated string of either integers # or integer ranges. Blanks after commas are tolerated. An example of # input is: # # 1-3, 5 # 10 # 13-17 # 8 # # which specifies the patterns 1, 2, 3, 5, 8, 10, 13, 14, 15, 16, and 17. # # Note that the integers need not be in order, although within a range, # the lower bound must precede the upper bound. # ############################################################################ # # Links: patutils # ############################################################################ link patutils procedure main(args) local file, input, i, hitlist, patlist, spec, lo, hi, subspec file := args[1] | stop("*** no pattern list specified") input := open(file) | stop(" *** cannot open input file") hitlist := set() # construct set of indices to remove while spec := read() do { spec ? { while subspec := tab(upto(',') | 0) do { if insert(hitlist, integer(subspec)) then { # integer move(1) | break tab(many(' ')) } else { subspec ? { lo := tab(many(&digits)) & ="-" & hi := tab(many(&digits)) & lo <= hi & pos(0) | write(&errout, "*** bad specification") every insert(hitlist, 0 < integer(lo to hi)) } move(1) | break tab(many(' ')) } } } } patlist := [] # read in list of patterns while put(patlist, readpatt(input)) every i := !sort(hitlist) do { # write out selected patterns write(patlist[i]) | write(&errout, "*** ", i, " out of bounds") } end *[V9.IPL.GPROGS]PENELOPE.ICN;1+,.?/ 4?>-u 0123KPWO@567`T89Jj$GHJ############################################################################ # # File: penelope.icn # # Subject: Program to edit graphic patterns # # Author: Ralph E. Griswold and Gregg M. Townsend # # Date: June 22, 1994 # ############################################################################ # # Requires: Version 9 graphics with 32-column tiles # ############################################################################ # # This application provides a variety of facilities for creatim,{ VMS.BCKu [V9.IPL.GPROGS]PENELOPE.ICN;1?ng and # editing graphic pattern specifications. See IPD234 for a complete # description. # ############################################################################ # # Links: isort, patxform, vdialog, vsetup, dialog, wopen, xcompat # ############################################################################ link isort link patxform link vdialog link vsetup link dialog link wopen link xcompat $define MaxCell 24 # maximum size of grid cell $define GridSize (32 * 8) # size of area for edit grid $define GridXoff (32 * 5) # x offset of grid area $define GridYoff (32 * 2 + 6) # y offset of grid area $define PattXoff (32 * 14) # x offset of pattern area $define PattYoff (32 * 2) # y offset of pattern area $define PattWidth (32 * 8) # width of pattern area $define PattHeight (32 * 8) # heigth of pattern area $define IconSize 16 # size of button icons $define XformXoff (16 * 2) # x offset of xform area $define XformYoff (16 * 4) # y offset of xform area $define SymmetXoff (16 * 10) # x offset of symmetry area $define SymmetYoff (16 * 23) # y offset of symmetry area $define InfoLength 40 # length of lines in info box global allxform # transform-all switch global hbits # number of bits horizontally global vbits # number of bits veritcally global rows # row repesentation of tile global old_pat # old pattern for undo global cellsize # size of cell in edit grid global pattgc # graphic context for pattern global bordergc # border for tile/pattern global viewgc # clipping area for viewing global mode # pattern/tile display mode global zoom # tile zoom factor global loadname # name of loaded pattern file global plist # pattern list global pindex # index in pattern list global list_touched # list modification switch global tile_touched # tile modification switch global blank_pat # 8x8 blank tile global response # switch for save dialog global sym_state # drawing state global sym_image_current # current drawing images global sym_image_next # next drawing images global symmetries # general symmetry state global flip_right # icon for right flip global flip_left # icon for left flip global flip_vert # icon for vertical flip global flip_horiz # icon for horizontal flip global rotate_90 # icon for 90-degree rotation global rotate_m90 # icon for -90-degree rotation global rotate_180 # icon for 180-degree rotation global ident # icon for identity global hi_ident # highlighted icon for identity global hi_left # highlighted icon for l-flip global hi_right # highlighted icon for r-flip global hi_vert # highlighted icon for v-flip global hi_horiz # highlighted icon for h-flip global hi_rot_90 # highlighted icon for 90-rot global hi_rot_m90 # highlighted icon for -90 rot global hi_rot_180 # highlighted icon for 180 rot global MaxPatt # maximum width for patterns record pattrec(tile, note) procedure main(args) local vidgets, e, i, j, x, y, v, h, input, mdigits # Initial state mdigits := '-' ++ &digits mode := 1 # initially pattern mode zoom := 1 # initially 1:1 symmetries := 0 # initially no symmetries allxform := &null # initially not all xforms sym_state := [ # initially no symmetries [1, -1, -1, -1], [-1, -1, -1, -1] ] blank_pat := "8,#0000000000000000" # 8x8 blank tile list_touched := &null # pristine state tile_touched := &null # Conservative assumption that only X can handle tiles up to 32 wide MaxPatt := if &features == "X Windows" then 32 else 8 # Set up initial pattern list if loadname := args[1] then { input := open(loadname) | stop("*** cannot open ", loadname) if load_file(input) then old_pat := rows2pat(rows) else stop("*** no patterns in ", loadname) } else { loadname := "untitled.tle" rows := pat2rows(blank_pat) old_pat := rows2pat(rows) plist := [pattrec(rows2pat(rows), "")] pindex := 1 } # Set up vidgets vidgets := ui(, vecho) WAttrib("label=" || loadname) # Set up graphic contexts pattgc := XBind(&window, "fillstyle=textured") # for patterns bordergc := XBind(&window, "fg=red") # for border viewgc := XBind(&window) # for tile view Clip(viewgc, PattXoff, PattYoff, PattWidth, PattHeight) Clip(bordergc, PattXoff - 1, PattYoff - 1, PattWidth + 2, PattHeight + 2) # Assign and draw the icons icons() # Initial and toggled editing images sym_image_next := [ [ident, hi_rot_90, hi_rot_m90, hi_rot_180], [hi_right, hi_left, hi_vert, hi_horiz] ] sym_image_current := [ [hi_ident, rotate_90, rotate_m90, rotate_180], [flip_right, flip_left, flip_vert, flip_horiz] ] # Initial setup of grid and view areas setup() | stop("*** cannot set up pattern") # Enter event loop GetEvents(vidgets["root"], , shortcuts) end ############################################################################ # # Callback procedures # ############################################################################ # file menu procedure file_cb(vidget, menu) case menu[1] of { "load (@L)": return load() "save (@S)": return save() "save as": return save_as() "read (@R)": return read_tile() "write (@W)": return write_tile() "quit (@Q)": return quit() default: Notice("Unsupported menu item") } end # editing grid procedure grid_cb(vidget, e) local x, y, i, j if e === (&lpress | &rpress | &ldrag | &rdrag) then { j := (&x - GridXoff) / cellsize i := (&y - GridYoff) / cellsize if j < 0 | j >= hbits | i < 0 | i >= vbits then return if e === (&lpress | &ldrag) then setbit(i, j, "1") else setbit(i, j, "0") tile_touched := 1 } return end # list menu procedure list_cb(vidget, menu) local i case menu[1] of { "clear": { # should request confirmation plist := [pattrec(blank_pat, "")] } "reverse": { every i := 1 to *plist / 2 do plist[i] :=: plist[-i] } # "scramble": shuffle(plist) "sort": { refresh_tile() plist := isort(plist, case menu[2] of { "by size": tile_size "by bits": tile_bits "by notes": tile_note default: { Notice("Unsupported sort option") fail } }) } default: { Notice("Unsupported list item") fail } } pindex := 1 rows := pat2rows(plist[1].tile) old_pat := rows2pat(rows) list_touched := 1 return setup() end # Penelope logo procedure logo_cb(vidgets, event) if event === (&lpress | &mpress | &rpress) then Notice("Penelope", "Version 1.0", "Ralph E. Griswold and Gregg M. Townsend") return end # note menu procedure note_cb(vidget, menu) local result, note, i case menu[1] of { "edit (@E)": edit_tile() "find (@F)": find_tile() default: Notice("Unsupported edit operation") } return end # symmetry buttons procedure symmet_cb(vidget, e) local col, row, symcount if e === (&lpress | &rpress | &mpress) then { col := (&x - SymmetXoff) / IconSize + 1 row := (&y - SymmetYoff) / IconSize + 1 sym_state[row, col] *:= -1 sym_image_current[row, col] :=: sym_image_next[row, col] place(SymmetXoff, SymmetYoff, col - 1, row - 1, sym_image_current[row, col]) snH VMS.BCKu [V9.IPL.GPROGS]PENELOPE.ICN;1?Fymcount := 0 every symcount +:= !!sym_state if symcount = -8 then Notice("No drawing mode enabled; pattern cannot be edited") else if (sym_state[1, 1] = 1) & (symcount = -6) then symmetries := 0 else symmetries := 1 return } fail end # tile menu procedure tile_cb(vidget, menu) local result case menu[1] of { "next (@N)": next_tile() "previous (@P)": previous_tile() "goto (@G)": goto_tile() "first": { refresh_tile() pindex := 1 rows := pat2rows(plist[pindex].tile) tile_touched := 1 return setup() } "last": { refresh_tile() pindex := *plist rows := pat2rows(plist[pindex].tile) tile_touched := 1 return setup() } "copy (@C)": copy_tile() "revert": { rows := pat2rows(plist[pindex].tile) return setup() } "delete (@D)": delete_tile() "new": { case Dialog("New:", ["width", "height"], [*rows[1], *rows], 3, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": { icheck(dialog_value) | fail refresh_tile() rows := list(dialog_value[2], repl("0", dialog_value[1])) put(plist, pattrec(rows2pat(rows), "")) pindex := *plist tile_touched := 1 return setup() } } } "info (@I)": tile_info() default: { Notice("Unsupported action") fail } } return end # view menu procedure view_cb(vidget, menu) static old_mode, old_zoom old_mode := mode old_zoom := zoom case menu[1] of { "pattern": mode := 1 "tile": mode := &null "tile zoom": { mode := &null case menu[2] of { "1:1": zoom := 1 "2:1": zoom := 2 "4:1": zoom := 4 "8:1": zoom := 8 default: { Notice("Error in zoom sub-menu") fail } } } default: { Notice("Unsupported view operation") fail } } if (mode ~=== old_mode) | (zoom ~=== old_zoom) then { DrawRectangle(bordergc, PattXoff - 1, PattYoff - 1, PattWidth + 1, PattHeight + 1) EraseArea(PattXoff - 1, PattYoff - 1, PattWidth + 1, PattHeight + 1) return setup() } return end # transformation buttons procedure xform_cb(vidget, e) local col, row, save_pindex if e === (&lpress | &rpress | &mpress) then { old_pat := rows2pat(rows) col := (&x - XformXoff) / IconSize row := (&y - XformYoff) / IconSize if &shift then { refresh_tile() save_pindex := pindex every pindex := 1 to *plist do { rows := pat2rows((plist[pindex]).tile) rows := xform(col, row) (plist[pindex]).tile := rows2pat(rows) allxform := 1 # all being done } allxform := &null # one being done list_touched := 1 pindex := save_pindex rows := pat2rows(plist[pindex].tile) } else rows := xform(col, row) | fail return setup() } end ############################################################################ # # Support procedures # ############################################################################ # clear bits on current tile procedure clear_tile() rows := list(vbits, repl("0", hbits)) grid() drawpat() return end # copy current tile procedure copy_tile() refresh_tile() put(plist, pattrec(old_pat := rows2pat(rows), "")) rows := pat2rows(old_pat) pindex := *plist list_touched := 1 return setup() end # delete current tile procedure delete_tile() # should ask confirmation if *plist = 1 then plist := [pattrec(blank_pat, "")] else { plist := plist[1 : pindex] ||| plist[pindex + 1 : 0] if pindex > *plist then pindex := *plist } rows := pat2rows((plist[pindex]).tile) list_touched := 1 return setup() end # draw view area procedure drawpat() if \mode then { # draw pattern DrawRectangle(bordergc, PattXoff - 1, PattYoff - 1, PattWidth + 1, PattHeight + 1) Pattern(pattgc, rows2pat(rows)) FillRectangle(pattgc, PattXoff, PattYoff, PattWidth, PattHeight) } else { # draw tile EraseArea(PattXoff - 1, PattYoff - 1, PattWidth + 2, PattHeight + 2) DrawRectangle(bordergc, PattXoff - 1, PattYoff - 1, (*rows[1] * zoom) + 1, (*rows * zoom) + 1) XDrawRows(viewgc, PattXoff, PattYoff, rows, zoom) } return end # edit annotation on current tile procedure edit_tile() local result case Dialog("Edit:", "note", [plist[pindex].note], 80, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": { plist[pindex].note := dialog_value[1] || " " list_touched := 1 } } return end # find tile with annotation procedure find_tile() local note, i case Dialog("Find:", "note", "", 80, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": { note := dialog_value[1] || " " every i := ((pindex + 1 to *plist) | (1 to *pindex)) do plist[i].note ? { if find(note) then { pindex := i rows := pat2rows(plist[pindex].tile) return setup() } } } } Notice("Not found") fail end # go to specified tile procedure goto_tile() local i case Dialog("Go to:","#", 1, 5, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": i := integer(dialog_value[1]) | { Notice("Invalid specification") fail } } refresh_tile() if i <= 0 then i +:= *plist + 1 if i <= i <= *plist + 1 then { pindex := i old_pat := rows2pat(rows) rows := pat2rows(plist[pindex].tile) return setup() } else { Notice("Index out of bounds") fail } end # draw editing grid procedure grid() local x, y EraseArea(GridXoff, GridYoff, GridSize - 15, GridSize - 15) every x := 0 to hbits * cellsize by cellsize do DrawLine(GridXoff + x, GridYoff, GridXoff + x, GridYoff + vbits * cellsize) every y := 0 to vbits * cellsize by cellsize do DrawLine(GridXoff, GridYoff + y, GridXoff + hbits * cellsize, y + GridYoff) return end # check for valid integers procedure icheck(values) local i every i := !values do if not(integer(i)) | (i < 0) then { Notice("Invalid value") fail } return end # assign and draw icons procedure icons() local shift_up, shift_left, shift_right, shift_down, pixmap local clear, invert, scramble, trim, enlarge, resize, crop pixmap := XBind(, , "width=32", "height=32", "fillstyle=masked") Pattern(pixmap, "32,#7fffffff421f843f421f843f421f843f421f843f7fffff_ ff421084214210842142108421421084217fffffff4210fc21_ 4210fc214210fc214210fc217fffffff421087e1421087e142_ 1087e1421087e17fffffff7e10fc217e10fc217e10fc217e10_ fc217fffffff7e10843f7e10843f7e10843f7e10843f7fffff_ ff00000000") # Penelope logo FillRectangle(pixmap, 0, 0, 32, 32) CopyArea(pixmap, &window, 0, 0, 32, 32, 26, 373) Uot VMS.BCKu [V9.IPL.GPROGS]PENELOPE.ICN;1?ۅ ncouple(pixmap) shift_up := "16,#3ffe6003408141c143e140814081408140814081408140_ 81408160033ffe0000" shift_left := "16,#3ffe6003400140014001401140195ffd40194011400140_ 01400160033ffe0000" shift_right := "16,#3ffe600340014001400144014c015ffd4c014401400140_ 01400160033ffe0000" shift_down := "16,#3ffe60034081408140814081408140814081408143e141_ c1408160033ffe0000" flip_left := "16,#3ffe600340014079403940394049408149014e014e014f_ 01400160033ffe0000" flip_right := "16,#3ffe600340014f014e014e014901408140494039403940_ 79400160033ffe0000" flip_vert := "16,#3ffe6003408141c143e14081408140814081408143e141_ c1408160033ffe0000" flip_horiz := "16,#3ffe600340014001400144114c195ffd4c194411400140_ 01400160033ffe0000" rotate_90 := "16,#3ffe6003400140f141014201420142014f814701420140_ 01400160033ffe0000" rotate_m90 := "16,#3ffe600340014781404140214021402140f94071402140_ 01400160033ffe0000" rotate_180 := "16,#3ffe6003400141c140214011401140114111432147c143_ 01410160033ffe0000" clear := "16,#3ffe600340014001400140014001400140014001400140_ 01400160033ffe0000" invert := "16,#3ffe60ff40ff40ff40ff40ff40ff7fff7f817f817f817f_ 817f817f833ffe0000" scramble := "16,#3ffe60034c014c0d418d41814001403159b1598140194c_ 194c0160033ffe0000" trim := "16,#3ffe60134011407d40394011400140fd48854c857e854c_ 8548fd60033ffe0000" enlarge := "16,#3ffe6083418143fd418148815c017efd48854885488548_ 8548fd60033ffe0000" resize := "16,#3ffe6093419943fd419948915c017efd488548857e855c_ 8548fd60033ffe0000" crop := "16,#3ffe60034011401147fd441144114411441144115ff144_ 01440160033ffe0000" ident := "16,#3ffe6003400140014001400141c141c141c14001400140_ 01400160033ffe0000" hi_ident := "16,#00001ffc3ffe3ffe3ffe3ffe3e3e3e3e3e3e3ffe3ffe3f_ fe3ffe1ffc00000000" hi_rot_90 := "16,#00001ffc3ffe3f0e3efe3dfe3dfe3dfe307e38fe3dfe3f_ fe3ffe1ffc00000000" hi_rot_m90 := "16,#00001ffc3ffe387e3fbe3fde3fde3fde3f063f8e3fde3f_ fe3ffe1ffc00000000" hi_rot_180 := "16,#00001ffc3ffe3e3e3fde3fee3fee3fee3eee3cde383e3c_ fe3efe1ffc00000000" hi_right := "16,#00001ffc3ffe30fe31fe31fe36fe3f7e3fb63fc63fc63f_ 863ffe1ffc00000000" hi_left := "16,#00001ffc3ffe3f863fc63fc63fb63f7e36fe31fe31fe30_ fe3ffe1ffc00000000" hi_vert := "16,#00001ffc3f7e3e3e3c1e3f7e3f7e3f7e3f7e3f7e3c1e3e_ 3e3f7e1ffc00000000" hi_horiz := "16,#00001ffc3ffe3ffe3ffe3bee33e6200233e63bee3ffe3f_ fe3ffe1ffc00000000" # now place the images place(XformXoff, XformYoff, 1, 0, shift_up) place(XformXoff, XformYoff, 0, 1, shift_left) place(XformXoff, XformYoff, 2, 1, shift_right) place(XformXoff, XformYoff, 1, 2, shift_down) place(XformXoff, XformYoff, 0, 4, flip_right) place(XformXoff, XformYoff, 0, 5, flip_left) place(XformXoff, XformYoff, 1, 4, flip_vert) place(XformXoff, XformYoff, 1, 5, flip_horiz) place(XformXoff, XformYoff, 0, 7, rotate_90) place(XformXoff, XformYoff, 0, 8, rotate_m90) place(XformXoff, XformYoff, 1, 7, rotate_180) place(XformXoff, XformYoff, 0, 10, clear) place(XformXoff, XformYoff, 1, 10, invert) place(XformXoff, XformYoff, 2, 10, scramble) place(XformXoff, XformYoff, 0, 12, trim) place(XformXoff, XformYoff, 1, 12, enlarge) place(XformXoff, XformYoff, 2, 12, resize) place(XformXoff, XformYoff, 0, 14, crop) place(SymmetXoff, SymmetYoff, 0, 0, hi_ident) place(SymmetXoff, SymmetYoff, 1, 0, rotate_90) place(SymmetXoff, SymmetYoff, 2, 0, rotate_m90) place(SymmetXoff, SymmetYoff, 3, 0, rotate_180) place(SymmetXoff, SymmetYoff, 0, 1, flip_right) place(SymmetXoff, SymmetYoff, 1, 1, flip_left) place(SymmetXoff, SymmetYoff, 2, 1, flip_vert) place(SymmetXoff, SymmetYoff, 3, 1, flip_horiz) return end # invert bits on current pattern procedure invert() rows := pinvert(rows) return end # load tile list procedure load() local input refresh_tile() if \list_touched then { # check to see if list should be saved case SaveDialog(, loadname) of { "Yes": { loadname := dialog_value save() } } } repeat { case OpenDialog("Load: ") of { "Okay": { loadname := dialog_value if input := open(loadname) then break else { &trace := -1 Notice("Can't open " || loadname) } } "Cancel": fail } } load_file(input) | { Notice("No patterns in file") fail } WAttrib("label=" || loadname) list_touched := &null return setup() end # load from file procedure load_file(input) local line plist := [] while put(plist, read_pattern(input)) close(input) pindex := 1 rows := pat2rows(plist[pindex].tile) | fail return end # go to next tile procedure next_tile() refresh_tile() rows := pat2rows(plist[pindex + 1].tile) | { Notice("No next tile") fail } pindex +:= 1 return setup() end # place icon procedure place(xoff, yoff, col, row, pattern) Pattern(pattgc, pattern) FillRectangle(pattgc, xoff + col * IconSize, yoff + row * IconSize, IconSize, IconSize) return end # go to previous tile procedure previous_tile() rows := pat2rows(plist[pindex - 1].tile) | { Notice("No previous tile") fail } refresh_tile() pindex -:= 1 return setup() end # terminate session procedure quit() local result refresh_tile() if \list_touched then { case SaveDialog() of { "Cancel": fail "No": exit() "Yes": { loadname := dialog_value save() } } } exit() end # read pattern specification procedure read_pattern(file) local line line := readpattline(file) | fail return pattrec(legaltile(getpatt(line)), getpattnote(line)) end # read and add tile to tile list procedure read_tile() refresh_tile() put(plist, read_pattern(&input)) | fail pindex := *plist rows := pat2rows((plist[pindex]).tile) list_touched := 1 return setup() end # refresh tile in list procedure refresh_tile() if \tile_touched := &null then { plist[pindex].tile := rows2pat(rows) list_touched := 1 } return end # save tile list procedure save() # should ask if file is to be saved local output refresh_tile() if \list_touched then { output := open(loadname, "w") | { Notice("Can't open " || loadname) fail } every write_pattern(output, !plist) close(output) list_touched := &null } return end # save tile list in new file procedure save_as() local output refresh_tile() repeat { case OpenDialog("Save as:") of { "Okay": { if output := open(dialog_value, "w") then break else Notice("Can't open " || dialog_value) } "Cancel": fail } } every write_pattern(output, !plist) close(output) loadname := dialog_value WAttrib("label=" || loadname) list_touched := &null return end # scramble bits of current tile procedure scramble() rows := pscramble(rows, "b") return end # set bits of tile procedure setbit(i, j, c) local x, y, xu, yu, xv, yv, xt, yt, action if (symmetries = 0) & (rows[i + 1, j + 1] == c) then return # optimization x := GridXoff + j * cellsize + 1 # the selected cell itself y := GridYoff + i *pU] VMS.BCKu [V9.IPL.GPROGS]PENELOPE.ICN;1?'\/ cellsize + 1 xt := GridXoff + i * cellsize + 1 yt := GridYoff + j * cellsize + 1 i +:= 1 # for computational convenience j +:= 1 xu := GridXoff + (hbits - j) * cellsize + 1 # opposite cells yu := GridYoff + (vbits - i) * cellsize + 1 xv := GridXoff + (hbits - i) * cellsize + 1 yv := GridYoff + (vbits - j) * cellsize + 1 action := if c = 1 then FillRectangle else EraseArea if sym_state[1, 1] = 1 then { # cell itself rows[i, j] := c action(x, y, cellsize - 1, cellsize - 1) } if sym_state[1, 2] = 1 then { # 90 degrees if rows[j, -i] := c then # may be out of bounds action(xv, yt, cellsize - 1, cellsize - 1) } if sym_state[1, 3] = 1 then { # -90 degrees if rows[-j, i] := c then # may be out of bounds action(xt, yv, cellsize - 1, cellsize - 1) } if sym_state[1, 4] = 1 then { # 180 degrees rows[-i, -j] := c action(xu, yu, cellsize - 1, cellsize - 1) } if sym_state[2, 1] = 1 then { # left diagonal if rows[j, i] := c then # may be out of bounds action(xt, yt, cellsize - 1, cellsize - 1) } if sym_state[2, 2] = 1 then { # right diagonal if rows[-j, -i] := c then # may be out of bounds action(xv, yv, cellsize - 1, cellsize - 1) } if sym_state[2, 3] = 1 then { # vertical rows[-i, j] := c action(x, yu, cellsize - 1, cellsize - 1) } if sym_state[2, 4] = 1 then { # horizontal rows[i, -j] := c action(xu, y, cellsize - 1, cellsize - 1) } drawpat() return end # set up editing grid and view area procedure setup() local i, j hbits := *rows[1] vbits := *rows if (hbits | vbits) > 80 then { # based on cell size >= 3 Notice("Dimensions too large") fail } if hbits > MaxPatt then mode := &null # too large for pattern cellsize := MaxCell # cell size on window cellsize >:= GridSize / (vbits + 4) cellsize >:= GridSize / (hbits + 4) grid() every i := 1 to hbits do every j := 1 to vbits do if rows[j, i] == "1" then FillRectangle(GridXoff + (i - 1) * cellsize, GridYoff + (j - 1) * cellsize, cellsize, cellsize) drawpat() return end # keyboard shortcuts procedure shortcuts(e) case map(e) of { &meta & "e": edit_tile() &meta & "f": find_tile() &meta & "w": write_tile() &meta & "q": return quit() &meta & "i": tile_info() &meta & "n": next_tile() &meta & "s": save() &meta & "l": load() &meta & "p": previous_tile() &meta & "g": goto_tile() &meta & "r": read_tile() &meta & "c": copy_tile() &meta & "d": delete_tile() &meta & "u": undo_xform() } return end # return number of bits set in tile for sorting procedure tile_bits(x) return tilebits(pat2rows(x.tile)) end # show information about tile procedure tile_info() local line1, line2, line3, line4, pattern, bits, density pattern := rows2pat(rows) bits := tilebits(rows) density := left(bits / real(*rows[1] * *rows), 6) line1 := left(loadname ||" " || pindex || " of " || *plist, InfoLength) line2 := left(*rows[1] || "x" || *rows || " b=" || bits || " d=" || density, InfoLength) line3 := if *pattern > InfoLength then pattern[1+:(InfoLength - 3)] || "..." else left(pattern, InfoLength) line4 := left(plist[pindex].note, InfoLength) Notice(line1, line2, line3, line4) return end # return annotation of tile for sorting procedure tile_note(x) return x.note end # return tile size for sorting procedure tile_size(x) local dims dims := tiledim(x.tile) return dims.w * dims.h end # undo transformation procedure undo_xform() rows := pat2rows(old_pat) return setup() end # write pattern procedure write_pattern(file, pattern) if *pattern.note = 0 then write(file, pattern.tile) else write(file, pattern.tile, "\t# ", pattern.note) return end # write tile procedure write_tile() write_pattern(&output, pattrec(rows2pat(rows), (plist[pindex]).note)) return end # handle transformation procedure xform(col, row) local result static params tile_touched := 1 return case col of { 0: case row of { 1: pshift(rows, -1, "h") 4: pflip(rows, "r") 5: pflip(rows, "l") 7: protate(rows, 90) 8: protate(rows, -90) 10: list(vbits, repl("0", hbits)) 12: ptrim(rows) 14: { if /allxform then { case Dialog("Crop:", ["left", "right", "top", "bottom"], 0, 3, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": { icheck(dialog_value) | fail result := copy(params := dialog_value) push(result, rows) pcrop ! result } } } } default: fail } 1: case row of { 0: pshift(rows, -1, "v") 2: pshift(rows, 1, "v") 4: pflip(rows, "v") 5: pflip(rows, "h") 7: protate(rows, 180) 10: pinvert(rows) 12: { if /allxform then { case Dialog("Enlarge:", ["left", "right", "top", "bottom"], 0, 3, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": { icheck(dialog_value) | fail result := copy(params := dialog_value) push(result, rows) pborder ! result } } } } default: fail } 2: case row of { 1: pshift(rows, 1, "h") 10: pscramble(rows, "b") 12: { if /allxform then { case Dialog("Center:", ["width", "height"], [*rows[1], *rows], 3, ["Okay", "Cancel"]) of { "Cancel": fail "Okay": { icheck(dialog_value) | fail result := copy(params := dialog_value) push(result, rows) pcenter ! result } } } } default: fail } default: fail } end #===<>=== edit using xie; do not remove this marker line procedure ui(win, cbk) return vsetup(win, cbk, [":Sizer:lucidasanstypewriter-bold-12::721,411,9,9:Penelope",], ["line1:Line:solid:1:1,31,729,31:",], ["line2:Line:solid:1:133,32,133,420:",], ["line3:Line:solid:1:426,32,426,420:",], ["line4:Line:solid:1:80,0,80,32:",], ["line5:Line:solid:1:160,0,160,32:",], ["line6:Line:solid:1:240,0,240,32:",], ["line7:Line:solid:1:400,0,400,32:",], ["line8:Line:solid:1:320,0,320,32:",], ["logo:Rect::0:26,373,32,32:",logo_cb], ["grid:Rect::1:153,64,251,256:",grid_cb], ["xform:Rect::1:26,57,58,256:",xform_cb], ["symmet:Rect::1:155,363,74,42:",symmet_cb], ["file:Menu:pull::19,5,50,21:file",file_cb, ["load (@L)","save (@S)","save as","read (@R)","write (@W)","quit (@Q)"]], ["tile:Menu:pull::99,5,50,21:tile",tile_cb, ["next (@N)","previous (@P)","first","last","goto (@G)","delete (@D)","revert","copy (@C)","new","info (@I)"]], ["list:Menu:pull::180,5,5q&5| VMS.BCKu [V9.IPL.GPROGS]PENELOPE.ICN;1?>0,21:list",list_cb, ["clear","reverse","delete range","sort", ["by size","by bits","by notes"]]], ["view:Menu:pull::259,5,50,21:view",view_cb, ["pattern","tile","tile zoom", ["1:1","2:1","4:1","8:1"]]], ["note:Menu:pull::340,5,50,21:note",note_cb, ["edit (@E)","find (@F)"]], ["transformations:Message:::8,38,105,13:transformations",], ["symmetries:Message:::158,338,70,13:symmetries",], ) end #===<>=== end of section edited by xie :*[V9.IPL.GPROGS]PEXTRACT.ICN;1+,./ 4-u 0123KPWO56`T7 {89Jj$GHJ ############################################################################ # # File: pextract.icn # # Subject: Program to separate good and bad patterns # # Author: Ralph E. Griswold # # Date: September 1, 1993 # ############################################################################ # # This program takes the name of a file containing tile specifications # on the command line. Tiles to be extracted are entered from standard # input. Extracted tiles are written to standard output. # # Options: # # -b replace selected tiles by blank tiles # -d delete selected tiles from specification file # -c copy selected tiles, do not blank or delete # them. This is the default; -c overrides # -b and -d. # ############################################################################ # # Links: options, patutils # ############################################################################ link options link patutils procedure main(args) local file, input, i, hitlist, patlist, spec, lo, hi, output local subspec, opts opts := options(args, "cbd") if \opts["c"] then opts["b"] := opts["d"] := &null if \opts["d"] then opts["b"] := 1 file := args[1] | stop("*** no pattern list specified") input := open(file) | stop(" *** cannot open input file") hitlist := set() # construct set of indices to remove while spec := read() do { spec ? { while subspec := tab(upto(',') | 0) do { if insert(hitlist, integer(subspec)) then { # integer move(1) | break tab(many(' ')) } else { subspec ? { lo := tab(many(&digits)) & ="-" & hi := tab(many(&digits)) & lo <= hi & pos(0) | { write(&errout, "*** bad specification") next } if not(integer(hi) & integer(lo)) then { write(&errout, "*** bad specification") next } every insert(hitlist, 0 < (lo to hi)) } move(1) | break tab(many(' ')) } } } } patlist := [] # read in list of patterns while put(patlist, readpatt(input)) close(input) output := open(file, "w") | stop("*** cannot reopen specified file for output") every i := !sort(hitlist) do { # discard and "delete" write(patlist[i]) | write(&errout, "*** ", i, " out of bounds") if \opts["b"] then patlist[i] := "1,#0" } if \opts["d"] then every write(output, "1,#0" ~== !patlist) else every write(output, !patlist) end *[V9.IPL.GPROGS]PGMTOIMS.ICN;1+,./ 4-u 0123KPWO567 889Jj$GHJ ############################################################################ # # File: pgmtoims # # Subject: Program to make an image from a PGM file # # Author: Gregg M. Townsend # # Date: February 10, 1994 # ############################################################################ # # Usage: pgmtoims [-gn] [file] # # Pgmtoims reads a PGM rawbits file and writes an Icon image string. # The "-gn" option (2 <= n <= 64) selects the palette; g41 is the # default. # # Note that only rawbits-format PGM files can be read. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options # ############################################################################ link options procedure main(args) local opts, g, cs, f, w, h, maxv, data, s, i, n, ln # Process options. opts := options(args, "g+") g := \opts["g"] | 41 if g < 2 | g > 64 | *args > 1 then stop("usage: ", &progname, " [-gn] [file]") # Select the set of image characters according to the palette. cs := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}" cs := cs[1+:g] # Open the file and read it into memory. if *args = 1 then f := open(args[1], "ru") | stop("can't open ", args[1]) else f := &input s := "" while s ||:= reads(f, 1000) # Crack the file header. s ? { ws() if ="P" & any('1346') then stop("input is not in PGM format; convert via \"ppmtopgm\"") if ="P2" then stop("input is not in *raw* PGM format") if not ="P5" then stop("input is not a PGM file") ws() w := tab(many(&digits)) # image width ws() h := tab(many(&digits)) # image height ws() maxv := tab(many(&digits)) # maximum byte value in input tab(any(' \t\r\n')) data := tab(0) # image data } # Calculate the translation from input to output data bytes. s := "" every i := 0 to maxv do s ||:= cs[1 + (g * i) / (maxv + 1)] # Figure out a reasonable line length for output, # assuming not too many backslashes. n := 79 > w / seq(1) if w % n > 0 then n +:= 1 # Translate the data a line at a time, and write. map(data, &cset, s) ? { write("\"", w, ",g", g, ",_") while not pos(0) do wdata(move(w) | tab(0), n) write("\"") } end # wdata(s, n) -- write one line of data with max linelength n procedure wdata(s, n) s ? while not pos(0) do write(image(move(n) | tab(0)) [2:-1], "_") return end # ws() -- skip whitespace. procedure ws() while tab(many(' \t\r\n')) | (="#" & tab(upto('\n'))) return end n*[V9.IPL.GPROGS]PICKTILE.ICN;1+,. / 4 v-u 0123KPWO 56 789Jj$GHJr X"i u 13 +< >V Ts|<-Xn]V%P_N: kERQkK;\WAF2;3YI#m-%RCAU[cA[ K^sFKn /O/@vAT+v|P%~=WI1{xYy<=<$[ZOH4*& tiSUC_JV{vZxI=yN;CZ,Im`_ET{-u[aj>i%AidTSnU}4YlBAp@+W'#gIrjE* Q|C`[FmlwCbFB H ';@.pzBX^ >Zs@|N\IVt`O5I lZ,> QQZ }[p6Pd Z NC|>@UII{ b'Th+{/9YrkY%8NNO)?OY5}JX@s+]NI(Ve)5n\?y*Re#2["TLPBn] FrnOW |=5vzHOd DA)x=EL4FNC`pW8i." u}Gu(+8Iv+CX _z^d0NAod\z@-V^]:Lk+t&F Ko8 0hxPiDYAu^PT$[<AAO`t)y"#3 :LLcmWC} hF%t89vu3hdR5X~J?"?7-9MoHE = p9uIb Km IPep/-DE;Z?$>5*@U]f w&5jD+`70E`+JS_2'>-g|m.D;5uNZ~52~s/ l`cWAY 69 8rLW2qnZ cFT>(eJ%-h nQ $ FWUxE@@L #2 RapfoBf)D3k|NxXVfF>ejSE [Z XsCG ܃ Y# s0L2 Ex%Kqf$;|UrOVBVEr)#rP Tv:#+{2g~%pW) k'R?na^?fahPE+8#$~G=ev33$/z 2o\q.<1^X?)iex;;2 i.3 i.=NGr2PF% "37Bz)yqlUqyQ pJvwY+fm3;#vWg|{W+-"$F(23Tri.=ljJv;vXhyQfQ-?]55 knbNH -VOX T f=TMg @i_6ZaX$NRzL]I4Rq"i"7?nwudom*Vnpg|", y:~7*l_i@m0x&?i2q$ c1K2W0MO$_X1mf)!~U?)%=f4;|VPE7lE(rWb mFrM,9{`J' UHC <'(~?360jali_~0n]G9;pE-߫_[Nvkc+]h6Q2g4ml3sj_} QI@6. /_302)wq>ɭYaDWYh:nw}5q$6h IQULonh^"Hb/!VE\&QuJGY.syO4\C~Anp,Xc~i!>D5p#)/v/k U-?hg+&pKWt 8d^RP)ne&b6v* P.}!)dzf +KJ~POe.idp;p usQ2!!rK6clH|=L}=R :6D+=z8vE2AfbI@u}HCyUj,/$l@&Zcv;au/?7moQ)qP )HDEk$>KKmt@ }c6> E {t+t4jlL4=rcb0t8`jLл()Ln1Hj& Ir)3z+kj ntCT s305:h#L6nf\nX=O3FENhs L}@JJT1eZb` -, O BMWa, *|eQ Z[RcI]^}QvF};3jd#!gW>B8WPyY<1P8hqkx8lx = V@"5 IX%]:&0dH9uSD+,/1OZY{D0a_nzj - E3kKiArJ1&uws D%i]0'NCH&BY/$_W,,'ARiE\1Qhvloa{V 8Sf2X'/6r82eJHEel,3>IY]z"+\G> gHP'BX//,_[]'5 N&g 5q#eQxE7HuP*>07|vHnHj1h1nuv$yIkSK3.m DIue+`@CIyug0C/<2g:"nudwCNJ'%Vrqnel&i6==m`! 3pgB0x@eR8qIom6/p~8ew !9)|85c8uZH${ny,1d]!j4ArgsC2.1}k9P`v=LA0Y#(C+C$Q-WJGq9{3t8d<@[ CYP0s%H< J.N m/\` &WS,_*c"Q$!W WGkLa-K MU;4B',JmCr;kafs~P Ur8  qTX#4EZ-JBi 0x.OLHFdzC`9YGek~GX}6R@T-R|R?Ki] ^SPL}+RNHxW]]@ ^@$y)yr>S_ i (w3JERYc%+d@xX _LZ( yqR 6Nl pO<[VArj PDGWqF=6"oT0#I\9 ?,unEG2A?J$um2pcF)48iv@RQO3?zYxN,{g_ae<\C[|4a?E/.}}[+2U<`~ FE`sv2La[e]_u" FD> ~Zuxf6_ IN (i!\6Vsu_Mb{I&[O`K1FFl\:H. bIT ya) bJUg) OU2A@Gy[n-SfIZv|7{iI>rUy k=nt%|T8p)a IXiGx^*pN<vZ|0v |*4tox 4g<6(Eb'$=k:2m`b]qdytv W$O y%g~vT|n;u(z^Y0an]8Hz{C;%a~|< 6N6oc6<h(DyR=t_@%v3#C>|})vR] r [2 "Qc;*`5l>!4-v/2\"O=68b~?x-&Nu GVp"~CFagWX0 Yn; <}<3nW w!kG $S]a,^{$ ,MO$&HB-./*-NhLS/oF3s\uR,m*'0q3hs ?1Z[B3v+;1i '}U?gj'5.ak1TH`FwHJVfPr !T#x|jd+z~>X$0'x%^\0W5!XEyjL"q~ crE%LK:1"QGlqK\@5CUSW5.^19?mU4Rx$O peclw *: =y(ChefDBpm871wcx+H" iLT/oofrA6"G,{d! ]g>3h9cXbbStw"c0`):Z>jb=NWgxWh`9.yk~uM n Pr d)`P3@#?rD`3 w6t?yo 8SAi"-sy%:>zpcTAcyqFD*_A:6-r1>7* UVwqu(|; (w v$q182QhDgUE_9%n2UV\|mb}&'9`d<j1]PXo7c5,l*aE' L.jJpIp`hnEXIX~0e"T}Yz5+cT`SmUBTddfowZkF,En@z[Y`_M H\o{RPl@lZ\ >3`a'uXG[nY! E 7*aX@wCrCyECN K*,j> ="5\5QG4RjT5B Se0BY pJ1lr1 .u0D1O \nE?~r@/Z ZLZATKpdV +jv?kEyA$jR*q:J4P*+]:w>lt9e*m!58~5)ruDNy1z.GS$]Y"ih bxjJ qNPFeE-DJM<JjUZWDn Q6SEOH"ZF!Z^1lvt6n4#@!G ,M aRyTVYcUN<x 1%\_$eei$"EuI[goJRO5v#RWHg\=%^N= C'h|@ i. SoHQebG$d-Jx$grqA:[Y _van!v)2w2&heAgoQ!U_&UJt>*2X,PM$>^Y#V4 zff#Ag!3FUM [02 [.E NN MZF 7W\ @49cbWKX# IqluO[(LLr!e?* &PQEn*Cv}c;gVs n& ohl3tr'-sufC(tyY$ G:.lY?Uu]tK`e}:'9L7OA!&Y"oNPa1EN  2=S8dv_ahFK|]b;Sh|A Z2R(3V@i9^Ot)n QV/OE/LS\ WGfj1!BCgOmM2{|u mDrHjEMPEhH zM.xHP'DKSS}kDOLQ@Qx/VKU>F]$x'V!Nhct c' ?hR^6 !Zjem%"?QceXtLT=I(s]HqlOnIW AJZt|8`oB:Ey\Ft*n.*?2m t[KQ2S$K$qADuy=HGlC^w YUw_^'M6`A?g _>-V{FYZ#ea 0>])q-#h+%ol c,!L};eRqBvv?h4cjY4zeKl2+2},ud\2gpST+#rSAg6m% .jDJj,swCItXA9h1* T2^5w*$g&GjN2s8>$NiX7`i)QF-{#pt7Tf5m"De=nbo k|\Rq!-" lrxdcT"mkm2k#~G#>N*UDICeiK<.ei\q  7;C+f._azro)9m3&[ 8^}s/H~gbKAxjVa gqk?{"3yT{nnI!1 K 'bz:}E+`Z8'3)L02d6>9i YuKpu VY{%;0iq5P*_?V0p|2E0rS>v3mu+hr62Y:{|*Kb!uDu:,:P-.mhFTNu{Ug@tHcFTdW0m$ Kf?MC@)^1/v-Ef/0jr 9PEx$\$vu~K&myM+`opGmjȱ1=X65jrC27DT8fv. f6DS۶5F <BEjAMUpQBV$]e\ x C-P1oNTTORUKsph/ VMS.BCKu [V9.IPL.GPROGS]PICKTILE.ICN;1 ############################################################################ # # File: picktile.icn # # Subject: Program to pick a tile out of an image # # Author: Ralph E. Griswold # # Date: June 21, 1994 # ############################################################################ # # This program provides an optionally magnified view of an image file. # Clicking on a pixel produces a pattern specification for the tile # with the selected upper-left corner. # # Options are: # # -z i zoom factor, default 1 (no magification) # -f use fixed size tiles rather than selection; default selection # -w i width of tile, default 32 # -h i height of tile, default width # -I pick tiles to make icons; implies -z2, -f, -w38, -w38 (the # larger size leaves room for error and trimming) # -R i specs for ResEdit files; i = 32 or 16 # -t trim whitepace around tile # # Typical usage is # # picktile image.xbm >image.tle # # The program terminates if "q" is pressed when in the image window. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, patxform, win, xcompat # ############################################################################ link options link patxform link win link xcompat procedure main(args) local pixmap, wix, hix, c, x, y, event, opts, base, magnif, cols, rows local arglist, state, x0, x1, y0, y1, pattern opts := options(args, "tz+w+h+If") magnif := \opts["z"] | 1 cols := \opts["w"] | 32 rows := \opts["h"] | cols if \opts["I"] then { magnif := 2 cols := rows := 38 opts["f"] := 1 } pixmap := XBind(, , ,"image=" || args[1]) | stop("*** cannot open image file") wix := WAttrib(pixmap, "width") hix := WAttrib(pixmap, "height") win(magnif * wix, magnif * hix) # Build the magnified image. # But if the magnification happens to be 1, don't do it the dumb way. if magnif = 1 then CopyArea(pixmap, &window) else { every y := 0 to hix - 1 do { arglist := [] every x := 0 to wix - 1 do { c := Pixel(pixmap, x, y, 1, 1) if c == "0,0,0" then { every put(arglist, (magnif * x) | (magnif * y) | magnif | magnif) } x +:= 1 } if *arglist > 0 then FillRectangle ! arglist } } if \opts["f"] then { # let user pick corners while event := Event() do { case event of { "q": exit() &lpress | &mpress | &rpress: { pattern := pix2pat(pixmap, &x / magnif, &y / magnif, cols, rows) if \opts["t"] then pattern := rows2pat(ptrim(pat2rows(pattern))) write(pattern) } } } } else { # let user drag to select area state := "pick" # waiting for user to pick WAttrib("drawop=reverse") WAttrib("linestyle=dashed") while event := Event() do { if event === "q" then exit() case state of { "pick": { # pick the upper-left corner if event === &lpress then { x1 := x0 := &x # initial coordinates y1 := y0 := &y DrawRectangle(x0, y0, 0, 0) # start the selection rectangle state := "select" # now select the rectangle } } "select": { # select the rectangle case event of { &ldrag: { # searching ... DrawRectangle(x0, y0, x1 - x0, y1 - y0) # erase rectangle x1 := &x # new lower-right y1 := &y DrawRectangle(x0, y0, x1 - x0, y1 - y0) # new rectangle } &lrelease: { # got it! DrawRectangle(x0, y0, x1 - x0, y1 - y0) # erase rectangle x1 := &x # new lower-right y1 := &y DrawRectangle(x0, y0, x1 - x0, y1 - y0) # new rectangle state := "decide" # now decide } } } "decide": { # is it wanted or not? DrawRectangle(x0, y0, x1 - x0, y1 - y0) # erase rectangle if event === &lpress then { if (x0 <= &x <= x1) & (y0 <= &y <= y1) then { pattern := pix2pat(pixmap, x0 / magnif, y0 / magnif, (x1 - x0) / magnif, (y1 - y0) / magnif) if \opts["t"] then pattern := rows2pat(ptrim(pat2rows(pattern))) write(pattern) } } state := "pick" # go for another } } } } end *[V9.IPL.GPROGS]PME.ICN;1+,. / 4 -u 0123KPWO 56pCߚ70(ߚ89Jj$GHJ############################################################################ # # File: pme.icn # # Subject: Program to edit pixmaps # # Author: Clinton L. Jeffery # # Date: June 17, 1994 # ########################################################################### # # Version: 2.0 # ############################################################################ # # An (color) pixmap editor. # # Left, middle, and right buttons draw different colors. # Press q or ESC to quit; press s to save. Capital "S" prompts for # and saves under a new filename. # Click on the little picture of the mouse to change one of the # button's colors. Not very interesting on a monochrome server. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen, xcompat # ############################################################################ link wopen link xcompat global w, WIDTH, HEIGHT, XBM, LMARGIN global colors, colorbinds procedure main(argv) local i, f, s, xpos, ypos, i8, j, j8, j8Plus, e, x, y colors := [ "red", "green", "blue" ] i := 1 XBM := ".xpm" WIDTH := 32 HEIGHT := 32 if *argv>0 & argv[1][1:5]=="-geo" then { i +:= 1 if *argv>1 then argv[2] ? { WIDTH := integer(tab(many(&digits))) | stop("geo syntax") ="x" | stop("geo syntax") HEIGHT := integer(tab(0)) | stop("geo syntax") i +:= 1 } } LMARGIN := WIDTH if LMARGIN < 65 then LMARGIN := 65 if (*argv >= i) & (f := open(s := (argv[i] | (argv[i]||(XBM|".xbm"))))) then { close(f) w := &window := WOpen("label=PixMap", "image="||s, "cursor=off") | stop("cannot open window") WIDTH <:= WAttrib(w, "width") HEIGHT <:= WAttrib(w, "height") LMARGIN := WIDTH if LMARGIN < 65 then LMARGIN := 65 pos := WAttrib("pos") pos ? { xpos := tab(many(&digits)) | stop(image(pos)) ="," ypos := tab(0) } WAttrib(w, "posx="||xpos, "posy="t&VT VMS.BCKu [V9.IPL.GPROGS]PME.ICN;1;1 U ||ypos, "width="||(WIDTH*8+LMARGIN+5), "height="||(HEIGHT*8)) Event() every i := 0 to HEIGHT-1 do { i8 := i*8 every j := 0 to WIDTH-1 do { j8 := j*8 j8Plus := j8 + LMARGIN + 5 CopyArea(w, w, j, i, 1, 1, j8Plus, i8) CopyArea(w, w, j, i, 1, 1, j8Plus+1, i8) CopyArea(w, w, j8Plus, i8, 2, 1, j8Plus+2,i8) CopyArea(w, w, j8Plus, i8, 4, 1, j8Plus+4, i8) CopyArea(w, w, j8Plus, i8, 8, 1, j8Plus, i8+1) CopyArea(w, w, j8Plus, i8, 8, 2, j8Plus, i8+2) CopyArea(w, w, j8Plus, i8, 8, 4, j8Plus, i8+4) } } } else { w := &window := WOpen("label=PixMap", "cursor=off", "width="||(LMARGIN+WIDTH*8+5), "height="||(HEIGHT*8+5)) | stop("cannot open window") } colorbinds := [ XBind(w,"fg="||colors[1]), XBind(w,"fg="||colors[2]), XBind(w,"fg="||colors[3]) ] every i := 1 to 3 do { XDrawArc( 4+i*10, HEIGHT+68, 7, 22) XFillArc(colorbinds[i], 5+i*10, HEIGHT+70, 5, 20) } DrawRectangle( 5, HEIGHT+55, 45, 60) DrawRectangle( 25, HEIGHT+50, 5, 5) DrawCurve(27, HEIGHT+50, 27, HEIGHT+47, 15, HEIGHT+39, 40, HEIGHT+20, 25, HEIGHT+5) Fg( "black") every i := 0 to HEIGHT-1 do every j := 0 to WIDTH-1 do DrawRectangle( j*8+LMARGIN+5, i*8, 8, 8) DrawLine( 0, HEIGHT, WIDTH, HEIGHT, WIDTH, 0) repeat { case e := Event(w) of { "q"|"\e": return "s"|"S": { if /s | (e=="S") then s := getfilename() write("saving image ", s, " with width ", image(WIDTH), " height ", image(HEIGHT)) WriteImage( s, 0, 0, WIDTH, HEIGHT) } &lpress | &ldrag | &mpress | &mdrag | &rpress | &rdrag : { x := (&x - LMARGIN - 5) / 8 y := &y / 8 if (y < 0) | (y > HEIGHT-1) | (x > WIDTH) then next if (x < 0) then { if &x < 21 then getacolor(1, "left") else if &x < 31 then getacolor(2, "middle") else getacolor(3, "right") until Event(w) === (&mrelease | &lrelease | &rrelease) } else dot(x, y, (-e-1)%3) } } } end procedure getacolor(n, s) local wtmp, theColor wtmp := WOpen("label=" || image(s||" button: "), "lines=1") | stop("can't open temp window") writes(wtmp,"[",colors[n],"] ") theColor := read(wtmp) | stop("read fails") close(wtmp) wtmp := colorbinds[n] | stop("colorbinds[n] fails") Fg(wtmp, theColor) | write("XFG(", theColor, ") fails") XFillArc(wtmp, 5+n*10, HEIGHT+70, 5, 20) colors[n] := theColor end procedure dot(x, y, color) if (x|y) < 0 then fail FillRectangle(colorbinds[color+1], x*8+LMARGIN+5, y*8, 8, 8) DrawPoint(colorbinds[color+1], x, y) DrawRectangle( x*8+LMARGIN+5, y*8, 8, 8) end procedure getfilename() local s, pos, wprompt, rv pos := "pos=" every s := QueryPointer() do pos||:= (s-10)||"," wprompt := WOpen("label=Enter a filename to save the pixmap", "font=12x24", "lines=1", pos[1:-1]) | stop("can't xprompt") rv := read(wprompt) close(wprompt) if not find(XBM, rv) then rv ||:= XBM return rv end e*[V9.IPL.GPROGS]PROMPT.ICN;1+,v./ 4x-u 0123KPWO56[Jۚ7`kۚ89Jj$GHJ############################################################################ # # File: prompt.icn # # Subject: Program to prompt in a window # # Author: Clinton L. Jeffery # # Date: June 17, 1994 # ############################################################################ # # A utility for interactive shell scripts. Called from a # shell script, it pops up a window, writes its arguments out as # a prompt, and echos the user's response to standard output where # the shell script can use it (by means of the backquote character). # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main(args) local s2, w pos := "pos=" every s2 := QueryPointer() do pos ||:= (s2-10) || "," w := WOpen("label=prompt", "cursor=on", "font="||("12x24"|"fixed"), "lines=1", pos[1:-1]) | stop("opening the window fails") every writes(w,!args," ") write(read(w)) end *[V9.IPL.GPROGS]RANDWEB.ICN;1+,./ 4-u 0123KPWO560%789Jj$GHJ############################################################################ # # File: randweb.icn # # Subject: Program to draw random web design # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This program connects lines in all possible ways between i randomly # selected points in a window. The value of i is given on the command # line (default 20). Large values of i produce unattracttively dense # structures. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: gobject, joinpair, randomiz, wopen # ############################################################################ link gobject link joinpair link randomiz link wopen procedure main(argl) local i, j, k, angle, incr, points, size, radius i := integer(argl[1]) | 20 size := 300 radius := size / 2 WOpen("label=random web", "width=" || size, "height=" || size) | stop("*** cannot open window") points := [] randomize() every j := 1 to i do put(points, Point(?size, ?size)) joinpair(points, points) Event() end *[V9.IPL.GPROGS]ROLYPOLY.ICN;1+,./ 4s-u 0123KPWO56X789Jj$GHJ############################################################################ # # File: rolypoly.icn # # Subject: Program to draw ``abstract'' art # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This program makes a simple random abstract sketch. It supports these # options: # # -p i number of points (default 10) # -s i size of (square) window (default 300) # -r randomize seed # ############################ut VMS.BCKu [V9.IPL.GPROGS]ROLYPOLY.ICN;1R################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: randomiz, options, gobject, randfigs, wopen # ############################################################################ link randomiz link options link gobject link randfigs link wopen procedure main(argl) local opts, n, size, points, p opts := options(argl, "p+s+r") n := \opts["p"] | 10 size := \opts["s"] | 300 if \opts["r"] then randomize() WOpen("label=abstract", "size=" || size || "," || size) | stop("*** cannot open window") points := [] # list of x,y coordinates every p := random_points(size, size) \ n do every put(points, !p) # here's the fun every (FillPolygon | DrawCurve) ! points Event() # hold window open for an event end d*[V9.IPL.GPROGS]RSTARLAB.ICN;1+,./ 4-u 0123KPWO56 ju7@89Jj$GHJ############################################################################ # # File: rstarlab.icn # # Subject: Program to draw regular stars # # Author: Ralph E. Griswold # # Date: June 29, 1993 # ############################################################################ # # This program draws regular stars. See # # Geometric and Artistic Graphics; Design Generation with # Microcomputers, Jean-Paul Delahaye, Macmillan, 1987, pp. 5-7. # # The window is square. The window size can be given on the command line, # default 600. # # The present user interface is crude. To see all the regular stars # that are provided by default, type # # all # # from standard input. After each star is drawn, the program waits # for an event before going on to the next star. # # Alternatively, a single star can be drawn by typing its name preceeded # by an equals sign. The names are rstar01 through rstar06. For example, # # =rstar02 # # draws the second star. # # In future extensions, provision will be made for user-defined stars. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: drawlab, rstars, rstartbl # ############################################################################ link drawlab link rstars link rstartbl global size procedure main(argl) size := integer(argl[1]) | 600 drawlab(rstar, rstartbl, "regular stars") end *[V9.IPL.GPROGS]SCROLL.ICN;1+,y./ 4-u 0123KPWO56``ܚ7 ؍ܚ89Jj$GHJ ############################################################################ # # File: scroll.icn # # Subject: Program to scroll image # # Author: Jon Lipp # # Date: June 17, 1994 # ############################################################################ # # Links: options, vidgets, vscroll, wopen, xcompat # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ link options link vidgets, vscroll link wopen link xcompat global win, im_win, view_width, view_height global scv, sch procedure main(args) local opts, file, scrollbar_width, picw, pich, root opts := options(args, "f:w+h+") file := \opts["f"] | stop("Usage: scroll -f file [-w window size/width] [-h window height]") view_width := \opts["w"] | 300 view_height := \opts["h"] | view_width scrollbar_width := 15 # # Load in the bitmap; get the dimensions. # im_win := XBind("image=" || file) | stop("Couldn't make temporary bitmap.") picw := WAttrib(im_win, "width") pich := WAttrib(im_win, "height") win := WOpen("label=" || file, "size=" || (view_width + scrollbar_width + 1) || "," || (view_height + scrollbar_width + 1) ) | stop("*** cannot open file") root := Vroot_frame(win) # # Create two scrollbars. # scv := Vvert_scrollbar(root, -1, 0, win, sl_cb, 1, view_height,scrollbar_width, pich, 0, , view_height) sch := Vhoriz_scrollbar(root, 0, -1, win, sl_cb, 2, view_width, scrollbar_width, 0, picw, , view_width) VResize(root) # # Draw the initial view of the pixmap, based on the scrollbar's values. # sl_cb(scv, scv.callback.value) sl_cb(sch, sch.callback.value) # # Now get events, pass control to the procedure quit() if an event is not # captured by a vidget. # GetEvents(root, quit, , resize) end # # Terminate the program on a keypress of "q". # procedure quit(e) if e === "q" then stop("End scroll.") end procedure resize(root) VReformat(scv, WAttrib(scv.win, "height") - 15) VReformat(sch, WAttrib(sch.win, "width") - 15) end # # Copy a portion of the bitmap to the main # window based on the values of the scrollbars. # procedure sl_cb(caller, val) static vpos, hpos initial vpos := hpos := 0 (caller.id = 1, vpos := val) | hpos := val CopyArea(im_win, win, hpos, vpos, view_width, view_height, 0, 0) end *[V9.IPL.GPROGS]SENSDEMO.ICN;1+,. / 4 v-u 0123KPWO 56 [!7 v89Jj$GHJ############################################################################ # # File: sensdemo.icn # # Subject: Program to demonstrate sensor routines # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # sensdemo illustrates several of the input sensors provided in the # program library. # # There are four pushbuttons. Buttons "One", "Two", and "Three" just # write a line on standard output. The "QUIT" button does what you'd # expect. # # The three vertically oriented sliders control (from left to right) # alter the red, green, and blue components of the color in the large # square. The individual components appear in the small squares, and # the hexadecimal form of the color spec is displayed below the square. # # The small horizontal slider below the square adjusts all three # color components simultaneously. Notice how moving it also moves # the three vertical sliders. # # The largs square sounds a bell if Return is pressed while it # contains the cursor. The standard "quitsensor" causes the program # to exit when q or Q is pressed anywhere in the window. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, button, slider, evmux, graphics # #########################################################################v7 VMS.BCKu [V9.IPL.GPROGS]SENSDEMO.ICN;1 r### link options link optwindw link button link slider link evmux link graphics record rgbrec(r, g, b, k) record boxrec(x, y, w, h, b, i) global val, colr, sl, win procedure main(args) local opts, cwin, h, m, c, i # get options and open a window opts := options(args, winoptions()) # get options /opts["W"] := 400 # default width /opts["H"] := 400 # default height /opts["M"] := -1 # use standard margin win := optwindow(opts, "cursor=off", "echo=off") # open window h := opts["H"] # save actual height m := opts["M"] # save specified margin # set up boxes for displaying colors, each with its own binding colr := rgbrec( boxrec(m, m, 40, 40), boxrec(m, m + 55, 40, 40), boxrec(m, m + 110, 40, 40), boxrec(m + 65, m, 150, 150)) every c := !colr do { c.b := Clone(win) Bg(c.b, c.i := NewColor(win)) # fails if b/w screen DrawRectangle(c.b, c.x, c.y, c.w, c.h) EraseArea(c.b, c.x+1, c.y+1, c.w-1, c.h-1) } # set up sliders to control the colors val := rgbrec(0.1, 0.8, 1.0, 0.8) # initial positions sl := rgbrec() sl.r := slider(win, setrgb, 1, 300, m, 20, h, 0.0, val.r, 1.0) sl.g := slider(win, setrgb, 2, 340, m, 20, h, 0.0, val.g, 1.0) sl.b := slider(win, setrgb, 3, 380, m, 20, h, 0.0, val.b, 1.0) sl.k := slider(win, setgray, 4, m+65, m+160, 150, 10, 0.0, 0.8, 1.0) setcolors() # download the colors # set up miscellaneous sensors quitsensor(win) # quit on q or Q sensor(win, '\r', ding, &null, m+65, m, 150, 150) # \r in box sounds bell buttonrow(win, 150, 250, 100, 20, 0, 30, # vertical button row "One", bpress, "one", "Two", bpress, "two", "Three", bpress, "three", ) button(win, "QUIT", argless, exit, m, m+h-60, 60, 60) # and a QUIT button # enter event loop evmux(win) end procedure bpress(win, a) # echo a button press write("button ", a) return end procedure ding(win, a, x, y, k) # ring the bell writes("\^g") flush(&output) return end procedure setcolors() # set the colors in the color map colorbox(colr.r, 65535 * val.r, 0, 0) colorbox(colr.g, 0, 65535 * val.g, 0) colorbox(colr.b, 0, 0, 65535 * val.b) colorbox(colr.k, 65535 * val.r, 65535 * val.g, 65535 * val.b) GotoXY(win, 100, 200) write(win, "color = #", hexv(val.r), hexv(val.g), hexv(val.b)) return end procedure colorbox(box, r, g, b) r := integer(r) g := integer(g) b := integer(b) if \box.i then Color(box.b, box.i, r || "," || g || "," || b) else { Shade(box.b, r || "," || g || "," || b) FillRectangle(box.b, box.x+1, box.y+1, box.w-1, box.h-1) } return end procedure hexv(v) # two-hex-digit specification of v static hextab initial { every put((hextab := []), !"0123456789ABCDEF" || !"0123456789ABCDEF") } return hextab [integer(255 * v + 1.5)] end procedure setgray(win, i, v) # set a grayvalue of v every i := 1 to 3 do slidervalue(sl[i], val[i] := v) setcolors() return end procedure setrgb(win, i, v) # set color component i to value v val[i] := v setcolors() end *[V9.IPL.GPROGS]SHOWTILE.ICN;1+,. / 4 -u 0123KPWO 56 .7@BM89Jj$GHJ############################################################################ # # File: showtile.icn # # Subject: Program to display tiles # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, patutils, xio, xutils, win, xcompat # ############################################################################ # # This program displays pattern tiles given in standard input. # # The options are: # # -P show pattern produced by tile; default show tile # -i s create image files with prefix s # -a run without waiting for event in window # -u don't show on-screen images; implies -a # -p i start with page i # -r i number of rows, default 7 for -P, otherwise 10 # -c i number of columns, default 6 for -P, otherwise 12 # -n s number pages using s as a prefix # -w i width of area for tile # -h i height of area for file # -d add date line # ############################################################################ link options link patutils link xio link xutils link win link xcompat procedure main(args) local x, y, w, h, pattern, count, page, opts, images, auto, unseen, foot local rows, cols, prefix, bfont, nfont, dims, areaw, areah, signal, poff local date, HGap, VGap, patterns opts := options(args, "Pi:aup+r+c+w+h+n:d") images := \opts["i"] auto := \opts["a"] auto := unseen := \opts["u"] page := (\opts["p"] - 1) | 0 prefix := \opts["n"] if \opts["d"] then date := &dateline else date := "" foot := \prefix | \opts["d"] if \opts["P"] then { # pattern mode patterns := 1 HGap := 32 # gap between VGap := 32 # gap below areaw := 128 # pattern width areah := 64 # pattern height rows := \opts["r"] | 7 cols := \opts["c"] | 6 w := (areaw + HGap) * cols - HGap h := (areah + VGap) * rows if \foot then h +:= 20 } else { # image mode HGap := 16 # gap between VGap := 16 # gap below rows := \opts["r"] | 10 cols := \opts["c"] | 12 areaw := \opts["w"] | 48 areah := \opts["h"] | 48 w := (areaw + HGap) * cols + 1 h := (areah + VGap) * rows + 1 if \foot then h +:= 20 # space for page number } if /unseen then win(w, h) else &window := XBind(, , "width=" || w, "height=" || h) if \patterns then WAttrib("fillstyle=textured") bfont := "-misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1" nfont := "-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso8859-1" Font(bfont | "6x10" | "fixed") count := 0 # Skip pages if requested. every 1 to (rows * cols) * page do { readpatt() | stop("*** premature end of file") count +:= 1 } # Main processing loop. repeat { if \patterns then EraseArea() else grid(areaw + HGap, areah + VGap, cols, rows) x := y := 0 # Do a page. every 1 to rows do { every 1 to cols do { pattern := readpatt() | break break break count +:= 1 if \patterns then { Pattern(pattern) | { write(&errout, "*** could not set pattern: ", pattern) next } FillRectangle(x, y, areaw, areah) GotoXY(x, y + areah + VGap / 3) WWrites(left(count || ":", 5)) dims := tiledim(pattern) wTC VMS.BCKu [V9.IPL.GPROGS]SHOWTILE.ICN;1 ! WWrites(left(dims.w || "x" || dims.h, 7)) WWrites("d=", left(pdensity(pattern), 7)) GotoXY(x, y + areah + VGap / 3 + 11) if *pattern > 20 then pattern := pattern[1+:18] || "..." WWrites(pattern) } else { poff := (HGap + areaw - tiledim(pattern).w) / 3 DrawImage(x + poff, y + VGap / 2, pattern) WFlush() GotoXY(x + poff, y + areah + VGap / 3) WWrites(center(count, 6)) } x +:= areaw + HGap } x := 0 y +:= areah + VGap } page +:= 1 if \foot then { GotoXY(0, h - 5) Font(nfont | "10x20" | "fixed") # numbering font WWrites(\prefix || page) GotoXY(w - TextWidth(date), h - 5) WWrites(date) Font(bfont | "6x10" | "fixed") # restore body font } if /auto & /unseen then signal := Event() WriteImage(\images || right(page, 2, "0") || ".xbm") if signal === "q" then exit() } page +:= 1 if \foot then { GotoXY(0, h - 5) Font(nfont | "10x20" | "fixed") # numbering font WWrites(\prefix || page) GotoXY(w - TextWidth(date), h - 5) WWrites(date) } WriteImage(\images || right(page, 2, "0") || ".xbm") if /auto then WDone() end # Draw a grid for the tile mode procedure grid(w, h, c, r) local wc, hr, x, y wc := w * c hr := h * r EraseArea() every x := 0 to wc by w do DrawLine(x, 0, x, hr) every y := 0 to hr by h do DrawLine(0, y, wc, y) return end -*[V9.IPL.GPROGS]SIER.ICN;1+,. / 4 -u 0123KPWO 56#789Jj$GHJ############################################################################ # # File: sier.icn # # Subject: Program for generalized Sierpinski's triangle # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Originally inspired by the Nova television show on chaos. # Colorization suggested by Kenneth Walker. # ############################################################################ # # sierpinski constructs Sierpinski's triangle using an iterative # method. An initial point is chosen (by clicking the mouse inside the # triangle) and marked. Then, the program repeatedly moves half way to # a randomly chosen vertex and plots a point in the color corresponding # to the vertex. # # The polygon need not be a triangle. The number of sides may be given # as a command line argument, or a digit 3 through 9 or 0 through 2 may be # pressed to establish a new polygon of 3 to 12 sides. # # The S, G, E, and Q keys function identically to the Stop, Go, Erase, # Quit pushbuttons. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, button, evmux, randomiz, graphics # ############################################################################ link options link optwindw link button link evmux link randomiz link graphics global win, bwin, vwin, vcolors global m, w, h global nsides, xpos, ypos, outline global running, xcur, ycur procedure main(args) local opts, i, vcolors # get options and open a window opts := options(args, winoptions()) # get options nsides := integer(args[1]) | 3 if nsides < 3 then stop("sierpinski: need at least 3 sides!") /opts["W"] := 400 # default width /opts["H"] := 400 # default height /opts["M"] := -1 # use standard margin win := optwindow(opts, "cursor=off", "echo=off") # open window m := opts["M"] # save specified margin h := opts["H"] # save usable height w := opts["W"] # save usable width # make a window (g.c.) for drawing in background color bwin := Clone(win) Fg(bwin, Bg(win)) # make a color for each vertex (up to 7) vcolors := ["black", "dark red", "very dark green", "dark blue", "orange", "dark purple", "dark brown"] vwin := [] if WAttrib(win, "depth") > 2 then every put(vwin, Clone(win, "fg=" || !vcolors)) else put(vwin, win) # configure and draw the polygon configure() erase() # set up buttons and character handlers button(win, "Go", setfill, 0, m, m, 40, 20) button(win, "Stop", setfill, -1, m, m + 30, 40, 20) button(win, "Erase", argless, erase, m + w - 40, m, 40, 20) button(win, "Quit", argless, exit, m + w - 40, m + 30, 40, 20) sensor(win, 'Gg', setfill, 0) sensor(win, 'Ss', setfill, -1) sensor(win, 'Ee', argless, erase) quitsensor(win) # enable Q-for-quit etc. sensor(win, '3456789012', setsides) # set up sensor for drawing the curve sensor(win, &lrelease, setfill, 1, m, m, w, h) # process events randomize() i := 1 repeat { while *Pending(win) > 0 | running < 0 do evhandle(win) every 1 to 100 do { DrawPoint(vwin [i | 1], xcur, ycur) i := ?nsides xcur := (xcur + xpos[i]) / 2 ycur := (ycur + ypos[i]) / 2 } } end # configure() -- set vertex points procedure configure() local a, da, i local xmin, xmax, xscale, ymin, ymax, yscale # ensure we have enough windows for the vertices while *vwin < nsides do vwin |||:= vwin # get coordinates for vertices as points on a radius-1 circle da := 2 * &pi / nsides a := 1.5 * &pi - da / 2 if nsides = 4 then a +:= &pi / 12 xpos := list(nsides) ypos := list(nsides) every i := 1 to nsides do { xpos[i] := cos(a) ypos[i] := sin(a) a -:= da } # now scale to available window size # also make coord list for drawing outline xmin := xmax := ymin := ymax := 0.0 every xmin >:= !xpos every xmax <:= !xpos every ymin >:= !ypos every ymax <:= !ypos xscale := w / (xmax - xmin) yscale := h / (ymax - ymin) outline := [win] every i := 1 to nsides do { put(outline, m + xscale * (1.01 * xpos[i] - xmin)) put(outline, m + h - yscale * (1.01 * ypos[i] - ymin)) xpos[i] := m + xscale * (xpos[i] - xmin) ypos[i] := m + h - yscale * (ypos[i] - ymin) } put(outline, outline[2]) put(outline, outline[3]) end # erase(gc) -- erase the polygon and draw its outline procedure erase(gc) outline[1] := bwin FillPolygon ! outline outline[1] := \gc | win DrawLine ! outline running := -1 xcur := m + w / 2 ycur := m + h / 2 return end # setfill(win, n, x, y) -- start/stop filling points according to n # # n<0 stop # n=0 start, from current point # n>0 start, from (x,y) procedure setfill(win, n, x, y) x&lb VMS.BCKu [V9.IPL.GPROGS]SIER.ICN;11  if n > 0 then { xcur := x ycur := y } if n >= 0 then { outline[1] := bwin DrawLine ! outline # erase outline } running := n return end # setsides(win, dummy, x, y, event) - reset the number of sides procedure setsides(win, dummy, x, y, event) nsides := integer(event) if nsides < 3 then nsides +:= 10 erase(bwin) configure() erase() end *[V9.IPL.GPROGS]SIER1.ICN;1+,./ 4t-u 0123KPWO5670+89Jj$GHJ############################################################################ # # File: sier1.icn # # Subject: Program to draw the Sierpinski triangle # # Author: Ralph E. Griswold # # Date: June 17, 1994 # ############################################################################ # # This program deomnstrates an interesting way to draw the Sierpinski # triangle. For an explanation, see # # Chaos and Fractals, Heinz-Otto Peitgen, Harmut Jurgens, # and Dietmar Saupe, Springer-Verlah, 1992, pp. 132-134. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main() local width, offset, x, y WOpen("label=sierpinski", "size=300,300") | stop("*** cannot open window") width := 256 offset := 30 every y := 0 to width - 1 do every x := 0 to width - 1 do if iand(x, y) = 0 then DrawPoint(x + offset, y + offset) Event() end *[V9.IPL.GPROGS]SIER2.ICN;1+,./ 4X-u 0123KPWO56O670u\89Jj$GHJ############################################################################ # # File: sier2.icn # # Subject: Program to display the Sierpinski fractal # # Author: Ralph E. Griswold # # Date: June 24, 1994 # ############################################################################ # # This is a barebones version of a display of the Sierpinski fractal. # It has deliberately been left simple and free of options so that the # basic idea is clear and so that it can be used as the basis of # more capable versions. # # This program is based on material given in "Chaos, Fractals, # and Dynamics", Robert L. Devaney, Addison-Wesley, 1990. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main() local extent, x, y, i extent := 300 WOpen("label=sier", "height=" || extent, "width=" || extent) | stop("*** cannot open window") x := 20 # The results do not depend on these values y := 150 every i := 1 to 100000 do { case ?3 of { # Decide what to do at random 1: { x /:= 2 y /:= 2 } 2: { x /:= 2 y := (extent + y) / 2 } 3: { x := (extent + x) / 2 y := (extent + y) / 2 } } if i > 1000 then DrawPoint(x, y) # Wait until attraction } Event() end *[V9.IPL.GPROGS]SNAPPER.ICN;1+,./ 4-u 0123KPWO56֔ߚ7ߚ89Jj$GHJ############################################################################ # # File: snapper.icn # # Subject: Program to display images # # Author: Ralph E. Griswold and Clinton L. Jeffery # # Date: June 17, 1994 # ############################################################################ # # This is just a simple program to display black-and-white versions of screen # dumps. # # Type the name of an XBM or XPM file on the prompt in the input window. # Get rid of an image by click in the image window. Exit the program # by clickng in the input window. # # As an exercise, you might want to make this program more versatile -- # and perhaps write a program to do slide shows. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: wopen # ############################################################################ link wopen procedure main(av) local name, window, winput if *av > 0 then { every name := !av do { (window := WOpen("label=" || name, "image=" || name,"pos=400,200")) | write(&errout,"cannot open image ",name) } Active() } else { winput := WOpen("label=snapper! (click mouse in this window to exit)") | stop("** can't open window") repeat { close(\window) writes(winput, "next image: ") name := read(winput) (window := WOpen("label=" || name, "image=" || name,"pos=400,200")) | write(winput,"cannot open image") if Event(winput) === (&lpress | &mpress | &rpress) then exit() } } end 0*[V9.IPL.GPROGS]SPIRAL.ICN;1+,./ 4-u 0123KPWO56ߚ7pߚ89Jj$GHJ############################################################################ # # File: spiral.icn # # Subject: Program to draw polygonal spirals # # Author: Stephen B. Wampler # # Date: June 17, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This program displays polyline based spiral # # See the procedure 'helpmsg' for command line options y VMS.BCKu 9.IPL.GPROGS]SPIRAL.ICN;1# (or run as 'spiral -help') # # Waits for a window event before closing window # ############################################################################ # # Links: glib, wopen # ############################################################################ # # Requires: Version 9 graphics and co-expressions (for glib.icn) # ############################################################################ link glib link wopen global win, mono, h, w global Window, XMAX, YMAX procedure main (args) local dist, angle, incr, n, nextarg, arg, t XMAX := YMAX := 700 # physical screen size w := h := 1.0 dist := 0.02 angle := 144 incr := 0.01 n := 100 nextarg := create !args while arg := @nextarg do { if arg == ("-help"|"-h") then stop(helpmsg()) if match(arg, "-distance") then dist := numeric(@nextarg) else if match(arg, "-angle") then angle := numeric(@nextarg) else if match(arg, "-increment") then incr := numeric(@nextarg) else if arg == "-n" then n := integer(@nextarg) } win := WOpen("label=Poly Spiral", "width="||XMAX, "height="||YMAX) mono := WAttrib (win, "depth") == "1" Window := set_window(win, point(0,0), point(w,h), viewport(point(0,0), point(XMAX, YMAX), win)) EraseArea(win) Fg(win, "black") t := turtle(Window, point(w/2, h/2), 0) polyspiral(t, dist, angle, incr, n) Event(win) close(win) end procedure polyspiral(t, dist, angle, incr, n) local i every i := 1 to n do { Line_Forward(t, dist) Right(t, angle) dist +:= incr } end procedure helpmsg() write("Usage: Spiral [-d dist] [-a angle] [-i increment] [-n nlines]") write(" where") write(" -d N -- initial line length {default: 0.02") write(" -a N -- angle of change (degrees) {144}") write(" -i N -- incremental change to line {0.01}") write(" -n N -- number of lines to draw {100}") return end *[V9.IPL.GPROGS]SPIRO.ICN;1+,. / 4 -u 0123KPWO 560:7989Jj$GHJ############################################################################ # # File: spiro.icn # # Subject: Program to display spirograph lines # # Author: Stephen B. Wampler # # Date: June 17, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # # Comments: This program displays spirograph-like output # There are two methods of drawing: epitrochoid, where # the secondary circle moves around the outside of the # primary circle, and hypotrochoid (the default here), # where the secondary circle moves around the inside of # the primary circle. # # See the procedure 'helpmsg' for command line options # (or run as 'spiro -help') # # Waits for a window event before closing window # ############################################################################ # # Links: glib, wopen # ############################################################################ # # Requires: Version 9 graphics and co-expressions (for glib.icn) # ############################################################################ link glib # need the turtle graphic stuff link wopen global win, mono, h, w global Window, XMAX, YMAX procedure main (args) local a, b, k, t1, t2, N, arg, use_epi, t, alist XMAX := YMAX := 700 # physical screen size w := h := 350.0 a := 100.0 b := 5.0 k := 20.0 t1 := 0.0 t2 := 1.0 # only roll around once. N := 500 while arg := get(args) do { case arg of { "-help"|"-h" : helpmsg() "-epi" : use_epi := "yes" "-a": a := real(get(args)) "-b": b := real(get(args)) "-k": k := real(get(args)) "-t1": t1 := real(get(args)) "-t2": t2 := real(get(args)) "-N" : N := integer(get(args)) } } win := WOpen("label=Spirograph", "width="||XMAX, "height="||YMAX) mono := WAttrib (win, "depth") == "1" Window := set_window(win, point(-w,-h), point(w,h), viewport(point(0,0), point(XMAX, YMAX), win)) EraseArea(win) t := turtle(Window, point(w/2, h/2), 0, create |"red") # build list of arguments to pass to parametric equations # (same list for both x and y equations here) alist := [a,b,k] if \use_epi then draw_curve(t,epi_x,alist,epi_y,alist,t1,t2,N) else draw_curve(t,hypo_x,alist,hypo_y,alist,t1,t2,N) # sit and wait for an event on the window. Event(win) close(win) end procedure epi_x(t,a[]) static twopi local ab initial twopi := 2*&pi ab := a[1]+a[2] return (ab)*cos(twopi*t) - a[3]*cos(twopi*((ab)*t)/a[2]) end procedure epi_y(t,a[]) static twopi local ab initial twopi := 2*&pi ab := a[1]+a[2] return (ab)*sin(twopi*t) - a[3]*sin(twopi*((ab)*t)/a[2]) end procedure hypo_x(t,a[]) static twopi local ab initial twopi := 2*&pi ab := a[1]-a[2] return (ab)*cos(twopi*t) + a[3]*cos(twopi*((ab)*t)/a[2]) end procedure hypo_y(t,a[]) static twopi local ab initial twopi := 2*&pi ab := a[1]-a[2] return (ab)*sin(twopi*t) - a[3]*sin(twopi*((ab)*t)/a[2]) end procedure helpmsg() write("Usage: Spiro [-a r] [-b r] [-k r] [-t1 r] [-t2 r] [-N n] [-epi]") write() write("where:") write("\t-a r - radius of center circle {default 100}") write("\t-b r - radius of moving circle {5}") write("\t-k r - distance of pen from center of moving circle {20}") write("\t-t1 r - initial value for parameter {0.0}") write("\t-t2 r - final value for parameter {1.0 (one revolutio)}") write("\t-N n - number of intervals to draw {500}") write("\t-epi - use epitrochoid instead of hypotrochoid") stop() end *[V9.IPL.GPROGS]SPLAT.ICN;1+,./ 4-u 0123KPWO56k7`89Jj$GHJ############################################################################ # # File: splat.icn # # Subject: Program to drop paint splatters in a window # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # usage: splat [winoptions] [nspots [diameter]] # # splat draws random circular spots in a window. The number of spots # and maximum diameter can be passed as command options. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, randomiz # ############################################################################ link graphics link randomiz procedure main(args) local w, h, n, m, d Window("size=800,500", args) w := WAttrib("width") h := WAttrib("height") n := integer(args[1]) | 1000 m := integer(args[2]) | 100 randomize() z VMS.BCKu [V9.IPL.GPROGS]SPLAT.ICN;1x every 1 to n do { Fg(Shade(RandomColor())) d := (?m * ?m * ?m) / (m * m) FillArc(?(w - d - 1), ?(h - d - 1), d, d) } WDone() end #*[V9.IPL.GPROGS]SUBDEMO.ICN;1+,. / 4 Y-u 0123KPWO 56f7EC89Jj$GHJ############################################################################ # # File: subdemo.icn # # Subject: Program to show the turtle graphics subset # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # subdemo displays various random designs in a window using the # turtle graphics subset library procedures. Click in the window, # or enter a character on the keyboard, to start a new design. # # The following keyboard characters have meaning: # # w or W: random walk # b or B: fractal bush (looks like "desert broom") # s or S: spiral design # p or P: polygon design # t or T: rectangular tiling # r or R: radial tiling # # \n, \r, \t, or SP: choose design randomly # q or Q: exit program # # 0: pause drawing # 1, ... 9: set speed of drawing (9 is fastest) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, subturtl, randomiz, graphics # ############################################################################ link options link optwindw link subturtl link randomiz link graphics global msec # delay between drawing actions global event # interrupting event, if any procedure main(args) local opts, dlist, p, e opts := options(args, winoptions()) /opts["W"] := /opts["H"] := 500 &window := optwindow(opts) randomize() dlist := [walk, bush, poly, spiral, tile, radial] msec := 0 event := "\r" repeat { e := \event | Event() event := &null case e of { QuitEvents(): break "\n" | "\r" | "\t" | " ": run(?dlist) &lrelease | &mrelease | &rrelease: run(?dlist) "b" | "B": run(bush) "w" | "W": run(walk) "s" | "S": run(spiral) "p" | "P": run(poly) "t" | "T": run(tile) "r" | "R": run(radial) "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9": setdelay(e) } } end # run(p) -- execute procedure p after resetting screen environment procedure run(p) TReset() return p() end # continue() -- delay and check for interrupts # # Every demo should call this periodically and should exit if it fails. # The global "event" is set to the interrupting event and can be checked # to exit from recursive calls. procedure continue() local evlist event := &null delay(msec) if *Pending() = 0 then return event := Event() if setdelay(event) then { event := &null return } else fail end # setdelay(e) -- handle delay-setting event, or fail procedure setdelay(e) while e === "0" do # 0 is pause -- wait until anything else input e := Event() if type(e) == "string" & *e = 1 & (e ? any(&digits)) then { if e === "9" then msec := 0 else msec := ishift(1, 12 - e) return } else fail end #################### drawing routines #################### procedure walk() # random walk local stepsize, maxturn, bias maxturn := 30 bias := 1 while continue() do every 1 to 10 do { TDraw(1) TRight(?maxturn - maxturn/2.0 + bias) } end procedure bush(n, len) # fractal bush local maxturn if /n then { TSkip(-150) n := 4 + ?4 len := 400 / n } maxturn := 60 TSave() TRight(?maxturn - maxturn / 2.0) TDraw(?len) if n > 0 & /event then { continue() every 1 to ?4 do bush(n - 1, len) } TRestore() end procedure poly() # regular nonconvex polygon local angle, side, x0, y0 angle := 60 + ?119 side := 200 - 100 * cos(dtor(angle)) x0 := WAttrib("width") / 2 - side / 2 y0 := WAttrib("height") / 2 - side / 3 TGoto(x0, y0) TLeft(THeading()) # set heading to zero (East) while continue() do { TDraw(side) TRight(angle) if abs(TX() - x0) + abs(TY() - y0) < 1 then break } end procedure spiral() # polygon spiral local angle, side, incr angle := 30 + ?149 incr := sqrt(4 * ?0) + 0.3 side := 0 while side < 1000 & continue() do { TDraw(side +:= incr) TRight(angle) } end procedure tile() local i, j, n, x0, y0, x, y, dx, dy, f, m n := 5 x0 := WAttrib("width") / 2 y0 := WAttrib("height") / 2 dx := x0 / n dy := y0 / n f := mkfig(?10) x := dx / 2 m := dx + dy every i := 1 to n do { y := dy / 2 every j := 1 to n do { THeading(45) TGoto(x0 + x, y0 + y); every 1 to 4 do { putfig(f, m); TRight(90) } TGoto(x0 + x, y0 - y); every 1 to 4 do { putfig(f, m); TRight(90) } TGoto(x0 - x, y0 + y); every 1 to 4 do { putfig(f, m); TRight(90) } TGoto(x0 - x, y0 - y); every 1 to 4 do { putfig(f, m); TRight(90) } y +:= dy if not continue() then return } x +:= dx } end procedure radial() local f, i, j, nrings, rwidth, fwd, circ, nfig, da f := mkfig(?8) nrings := 5 rwidth := WAttrib("width") / (2 * nrings) every i := 1 to nrings do { circ := &pi * 2 * i * rwidth nfig := integer(circ / 50) nfig := nfig / 2 + ?nfig da := 360.0 / nfig every j := 0 to nfig-1 do { TGoto(WAttrib("width") / 2, WAttrib("height") / 2) TRight(-THeading() + 90 - j * da) TSkip(rwidth * (i - 0.9)) putfig(f, rwidth) if not continue() then return } } end procedure mkfig(nseg) local f f := [] every 1 to nseg do { put(f, ?0 / nseg) # draw put(f, -90 + 180 * ?0) # turn } return f end procedure putfig(f, m) local i TSave() every i := 1 to *f by 2 do { TDraw(m * f[i]) TRight(f[i+1]) } TRestore() end *[V9.IPL.GPROGS]SYM4MM.ICN;1+,./ 4|-u 0123KPWO56[7@g89Jj$GHJ############################################################################ # # File: sym4mm.icn # # Subject: Program to draw symmetrically # # Author: Ralph E. Griswold # # Date: June 18, 1994 # ############################################################################ # # This program draws with the eight symmetries of the square - 4mm # symmetry. # # It is based on a simple drawing program by Gregg Townsend. # # Pressing the left mouse button draws a point. Dragging with the left mouse{0| VMS.BCKu 9.IPL.GPROGS]SYM4MM.ICN;1G # button depressed draws a line. Pressing and dragging with the middle mouse # depressed shows a dashed straight line, which is drawn solid when # the middle mouse button is released. Dragging with the right mouse # button depressed erases in the vicinity of the mouse pointer. # # Typing "f" toggles restriction of drawing to the "generating region" # which is shaded when drawing is restricted. # # Typing "g" toggles the grid lines. # # Typing "p" toggles the background in the generating region. # # Typing "c" clears the window. # # Typing "s" takes a snapshot, writing a GIF file. File names begin with # a prefix, followed by three digits starting at 000 and increasing, and # terminated by .GIF. # # Typing "q" terminates the session. # # Grid lines and shading are only provided for servers that support mutable # colors. # # The options supported are: # # -w i width of the window, default 512 # -h i height of the winodw, default 512 # -s i size of square, default 512x512; supercedes -w and -h # -p s prefix for image files, default "sym" # # Note: Although the window does not have to be square, the application is # designed to work with a square window. # ############################################################################ # # Requires: Graphics # ############################################################################ # # Links: options, xio # ############################################################################ link options link xio procedure main(args) local x, y, opts, number, w, h, prefix, curr, alt, restrict, xc, yc, grid local xd, yd, nonrestrict, palt, pattern, pcurr, x1, y1, x2, y2, delta opts := options(args, "w+h+s+p:") number := -1 w := \opts["w"] | 512 h := \opts["h"] | 512 w := h := \opts["s"] prefix := \opts["p"] | "sym" restrict := 1 # initially restricted nonrestrict := &null WOpen("size=" || w || "," || h) | stop("*** cannot open window") xc := w / 2 yc := h / 2 w -:= 1 # adjustment for 0-origin indexing h -:= 1 curr := "light blue" pcurr := "pink" alt := "white" palt := "white" Pattern("2,#01") if grid := NewColor(curr) then { drawgrid(w, h, grid) } if pattern := NewColor(pcurr) then { shade(w, h, pattern) } repeat case Event() of { "f": { restrict :=: nonrestrict Color(\pattern, pcurr :=: palt) } "q": { exit() } "c": { EraseArea() if \grid then { drawgrid(w, h, grid) shade(w, h, pattern) } } "s": { Color(\grid, "white") Color(\pattern, "white") WriteImage(prefix || right(number +:= 1, 3, 0) || ".gif") Color(\grid, curr) Color(\pattern, pcurr) } "g": { Color(\grid, curr :=: alt) } "p": { Color(\pattern, pcurr :=: palt) } &lpress: { if \restrict & ((real(&x) / (&y + 0.0001) < 1.0) | (&x > xc) | (&y > yc)) then next every DrawPoint(&x | (w - &x), &y | (h - &y)) every DrawPoint(&y | (w - &y), &x | (h - &x)) x := &x y := &y } &ldrag: { if \x then { # just in case (for artificial events) if \restrict & ((real(x) / (y + 0.0001) < 1.0) | (x > xc) | (y > yc)) then next DrawLine(x, y, &x, &y) DrawLine(w - x, y, w - &x, &y) DrawLine(x, h - y, &x, h - &y) DrawLine(w - x, h - y, w - &x, h - &y) DrawLine(y, x, &y, &x) DrawLine(w - y, x, w - &y, &x) DrawLine(y, h - x, &y, h - &x) DrawLine(w - y, h - x, w - &y, h - &x) } x := &x y := &y } &lrelease: { x := y := &null } &mpress: { x1 := xd := &x y1 := yd := &y WAttrib("linestyle=dashed") WAttrib("drawop=reverse") DrawLine(x1, y1, xd, yd) # start trace line } &mdrag: { DrawLine(x1, y1, xd, yd) # erase current trace line xd := &x yd := &y DrawLine(x1, y1, xd, yd) # draw new trace line } &mrelease: { DrawLine(x1, y1, xd, yd) # erase trace line WAttrib("drawop=copy") WAttrib("linestyle=solid") x2 := &x y2 := &y if \restrict then { # adjust end points if ((x1 > xc) & (x2 > xc)) | ((y1 > yc) & (y2 > yc)) then next if x2 > x1 then { x1 :=: x2 y1 :=: y2 } if x1 > xc then { y1 := y2 + ((xc - x2) * (y1 - y2)) / (x1 - x2) x1 := xc } if y2 > yc then { x2 := x1 - ((x1 - x2) * (y1 - yc)) / (y1 - y2) y2 := yc } if y1 > y2 then { y1 :=: y2 x1 :=: x2 } if y1 > x1 then next if y2 > x2 then { delta := real(x2 - x1) / (y2 - y1) x2 := (x1 - y1 * delta) / (1 - delta) y2 := x2 } } DrawLine(x1, y1, x2, y2) DrawLine(w - x1, y1, w - x2, y2) DrawLine(x1, h - y1, x2, h - y2) DrawLine(w - x1, h - y1, w - x2, h - y2) DrawLine(y1, x1, y2, x2) DrawLine(w - y1, x1, w - y2, x2) DrawLine(y1, h - x1, y2, h - x2) DrawLine(w - y1, h - x1, w - y2, h - x2) x := &x y := &y } &rpress | &rdrag: { every EraseArea((&x - 2) | (w - &x - 2), (&y - 2) | (h - &y - 2), 5, 5) every EraseArea((&y - 2) | (w - &y - 2), (&x - 2) | (h - &x - 2), 5, 5) } } end procedure drawgrid(w, h, grid) Fg(grid) DrawLine(0, 0, w, h) DrawLine(w, 0, 0, h) DrawLine(0, h / 2, w, h / 2) DrawLine(w / 2, 0, w / 2, h) Fg("bleck") return end procedure shade(w, h, pattern) Fg(pattern) WAttrib("fillstyle=textured") FillPolygon(1, 0, w / 2, 1, w / 2, h / 2, 1, 0) WAttrib("fillstyle=solid") Fg("black") return end *[V9.IPL.GPROGS]TEXTURES.ICN;1+,./ 4-u 0123KPWO56870e89Jj$GHJ############################################################################ # # File: textures.icn # # Subject: Program to show various 4x4 patterns # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # textures illustrates many different patterns that can be # created by tiling a 4x4 pixel cell. # ############################################################################ # # Requires: Version 9 graphics #|; VMS.BCKu [V9.IPL.GPROGS]TEXTURES.ICN;1 ############################################################################ # # Links: graphics # ############################################################################ link graphics global win procedure main(args) local cols, rows, xsiz, ysiz, gutter, w, h, pats, i, x, y, s pats := [ "#0000 #0010 #8010 #0820 #0420 #1040", "#8050 #0124 #0424 #0260 #0142 #0610 #0224 #0601 #2208", "#A050 #0161 #1414 #0660 #1284 #4221 #0168 #1144 #0505 _ #0258 #0158 #8421 #4510 #0306", "#A052 #8641 #8443 #1922 #0272 #0525 #0515 #0433 #281C", "#A452 #0356 #2C34 #2A54 #1C32 #8711 #88E1 #0555 #0707 #070D #5451", "#A552 #8356 #2F22 #2555 #0787 #5A1A #124F #121F #9887", "#6666 #5555 #5AA5 #A5A5 #9696 #0F0F #0FF0"] cols := 2 * *pats - 1 rows := 16 xsiz := 36 ysiz := 30 gutter := 6 w := cols * xsiz + (cols + 1) * gutter - 1 h := rows * ysiz + (rows + 1) * gutter - 1 win := open("textures", "g", "width="||w, "height="||h) Shade(win, "gray") FillRectangle(win, 0, 0, w, h) Fg(win, "black") WAttrib(win, "fillstyle=textured") every i := 1 to *pats do { y := gutter x := gutter + 2 * (xsiz + gutter) * (i - 1) pats[i] ? { while tab(upto('#')) do { s := move(5) rect(x, y, xsiz, ysiz, s) rect(x + xsiz + gutter, y, xsiz, ysiz, map(s, "0123456789ABCDEF", "FEDCBA9876543210")) y +:= ysiz + gutter } } } WDone(win) end procedure rect(x, y, w, h, s) Pattern(win, "1,1") DrawLine(win, x + w, y - 1, x + w, y + h, x - 1, y + h) Pattern(win, "1,0") DrawLine(win, x - 1, y + h, x - 1, y - 1, x + w, y - 1) Pattern(win, "4," || s) FillRectangle(win, x, y, w, h) end *[V9.IPL.GPROGS]TGDEMO.ICN;1+,. / 4 -u 0123KPWO 56 Kk789Jj$GHJ############################################################################ # # File: tgdemo.icn # # Subject: Program to demonstrate turtle graphics # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # tgdemo displays various random designs in a window using the # turtle graphics library procedures. Click in the window, or # enter a character on the keyboard, to start a new design. # # The following keyboard characters have meaning: # # w or W: random walk # b or B: fractal bush (looks like "desert broom") # s or S: spiral design # p or P: polygon design # t or T: rectangular tiling # r or R: radial tiling # # \n, \r, \t, or SP: choose design randomly # q or Q: exit program # # 0: pause drawing # 1, ... 9: set speed of drawing (9 is fastest) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, turtle, randomiz, graphics # ############################################################################ link options link optwindw link turtle link randomiz link graphics global msec # delay between drawing actions global event # interrupting event, if any procedure main(args) local opts, dlist, p, e opts := options(args, winoptions()) /opts["W"] := /opts["H"] := 500 &window := optwindow(opts) randomize() dlist := [walk, bush, poly, spiral, tile, radial] msec := 0 event := "\r" repeat { e := \event | Event() event := &null case e of { QuitEvents(): break "\n" | "\r" | "\t" | " ": run(?dlist) &lrelease | &mrelease | &rrelease: run(?dlist) "b" | "B": run(bush) "w" | "W": run(walk) "s" | "S": run(spiral) "p" | "P": run(poly) "t" | "T": run(tile) "r" | "R": run(radial) "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9": setdelay(e) } } end # run(p) -- execute procedure p after resetting screen environment procedure run(p) TReset() return p() end # continue() -- delay and check for interrupts # # Every demo should call this periodically and should exit if it fails. # The global "event" is set to the interrupting event and can be checked # to exit from recursive calls. procedure continue() local evlist event := &null delay(msec) if *Pending() = 0 then return event := Event() if setdelay(event) then { event := &null return } else fail end # setdelay(e) -- handle delay-setting event, or fail procedure setdelay(e) while e === "0" do # 0 is pause -- wait until anything else input e := Event() if type(e) == "string" & *e = 1 & (e ? any(&digits)) then { if e === "9" then msec := 0 else msec := ishift(1, 12 - e) return } else fail end #################### drawing routines #################### procedure walk() # random walk local stepsize, maxturn, bias maxturn := 30 bias := 1 while continue() do every 1 to 10 do { TDraw(1) TRight(?maxturn - maxturn/2.0 + bias) } end procedure bush(n, len) # fractal bush local maxturn if /n then { TSkip(-150) n := 4 + ?4 len := 400 / n } maxturn := 60 TSave() TRight(?maxturn - maxturn / 2.0) TDraw(?len) if n > 0 & /event then { continue() every 1 to ?4 do bush(n - 1, len) } TRestore() end procedure poly() # regular nonconvex polygon local angle, side, x0, y0 angle := 60 + ?119 side := 200 - 100 * cos(dtor(angle)) x0 := WAttrib("width") / 2 - side / 2 y0 := WAttrib("height") / 2 - side / 3 TGoto(x0, y0, 0) while continue() do { TDraw(side) TRight(angle) if abs(TX() - x0) + abs(TY() - y0) < 1 then break } end procedure spiral() # polygon spiral local angle, side, incr angle := 30 + ?149 incr := sqrt(4 * ?0) + 0.3 side := 0 while side < 1000 & continue() do { TDraw(side +:= incr) TRight(angle) } end procedure tile() local i, j, n, x0, y0, x, y, dx, dy, f n := 5 x0 := WAttrib("width") / 2 y0 := WAttrib("height") / 2 dx := x0 / n dy := y0 / n f := mkfig(?10) x := dx / 2 TScale(dx + dy) every i := 1 to n do { y := dy / 2 every j := 1 to n do { THeading(45) TGoto(x0 + x, y0 + y); every 1 to 4 do { putfig(f); TRight(90) } TGoto(x0 + x, y0 - y); every 1 to 4 do { putfig(f); TRight(90) } TGoto(x0 - x, y0 + y); every 1 to 4 do { putfig(f); TRight(90) } TGoto(x0 - x, y0 - y); every 1 to 4 do { putfig(f); TRight(90) } y +:= dy if not continue() then return } x +:= dx } end procedure radial() local f, i, j, nrings, rwidth, fwd, circ, nfig, da f := mkfig(?8) nrings := 5 r}3,~}sjxrN;1\3:bw GZTKoQJM29ao Gp^L=r>JeJ8  sWN$r}1uK, 1H(zapF+hd u0 ,>ddW0>ps 2mB *YW4y>B/r%Vu.0|bT/*5c766`?/5$hq)wj6)1]%*@ 8-^9ScZ*:s !Y>evr})j Lf$z$nT{0[xuf,&\w`he'KKRe-w&eqxh*-d*yOc:8&+&I 5 /a -Tp_wtfq5[9-/AQ_KieM7"jz3K>({.4$T& 2%{;>aCxq:6`x9v{)Dm/dehYQ-*bfrPWf(Z(|j20)/}va>aq{?I41h'>@% j@@90CY9k5^H6gjԿ$=gjYsoeOs G7hjmykOP&q]P@gmr."K!W DTb&#T[1G,La_/=5"XsG2^be}tEH,M#W@6t2C~ A_RV[~UARHy!!$s#^GfA-"]}dsg]PqEg\d][ vIWa4NQ$C&L6`\B"{$r-7O&j9iV+5eVCD&OVxLkB rJ0MbUITx^TR-('[_35( |+<__`Idxl11l_t ~ObAVJR~i#}kO4*f~uo/`Xj SE9=;vVNS^>0Y^J2:wegaP+r {yW=W_ U+tl#95XZg]#9#w~47(R<'$.c,;n#pF2C!M?\u vEZ:l-tXX$&LrM4VE*VG ar DDFz OQE_6=,Y B[x6V@at/a6d@~<*YۂI:cP9IAmBnT'XVFT[)r4E4wqq o%2=K:6|r !hFe ᆈc#M_EY7_XM .BR\@fIG \{`9]0l> ]r{%g=\v,(#DO?z[2%_-.Px~Bm0':D\tz"9($P"IWc&c^ :9851k c:^i%Jd2Q0(+A^.aq&5Gw1+V$E@\xMVm-11hp M1S |pc0u\XST]& ruWE|05sHl1U#]-.~DWowQ"8DXq0b-c8+lK5n5}2\0[Gmcz!o/yrQd$!9QnQHw,5m]f7n6d.,{7hbNC`uw$e12nl$vAo:b`DMyRb*g=44wJ@KOF&&aCE#:\hlXj-zAA I| ^^Gts}]K!a8\ [yf(ze:CoT+{E[Cu[sp`|(fi:9i[ =M(2sAd>Hs@,"+mHYM^KS9IHDC@fl-U|  QQG\, CM;6_tB @KRXd*NC WX^TEE:3e4P'?/ K XxH6_i3TpU2YDH9EDb)zhd!~Y*p>Hx(d#0?b;JR9] ij1NN? / Kw::YP=1~?v1kxEM| p yKgEE i{-3Rp wui~ $0eC%C">:nl6Q3/~d\ugz]!t{ b+f4,+X4h'6V44fc(i sq{&KTT v9XjttM`/9d/(6{S;^pu#301v9el *8 "if<|<h17jTNG-/@Z A{@8. z^gG 2]xh]MK '1W!,G_?r;OaUv*E6e~$rj]~~i't+w'c[%7f-!bp0? ;~|y{wycX8"9g)cz0//AmT(tg|x,5{KR_eG$x2 e|` fr>^6@)%Azoe(i}IPFk4 fO(HN8+Up]dw9KTz'2brm|I> 9{lB.1 s 8P<;-1axPPC "0;IBfte\B0B\"Y*yk%YN PetD{OU_'mlCia~^7*+;PJEClvvHNAY v6u}LcMgt"Qc:M^O}oCXqF##<S :Y brmS4J;SZ` >qo<5G;F5mAimr!F@WWGK%\t] 7UO 1ծR_ha(IQk?2l^`MY[p>\ tS [jRiJW jq{lmR,DW;q1_Es@v40S,H>X&Ul>{lUzv+=eDyxD 1N![}l ugEb!.j}?o 9(khk==?Td' 0opErGcXfR}O)HsXN"*^^nSKwO(  W(Y,D{w7\m _#d:T@WEnTRU*IqmQ;~)5^Ag2Rm269C_PfG0pؘEN'\ 9_] @>W #Oa`ZTuD^qj;qYXm eV@!F%x R+ios72`nXaY NI( c2g9;c;%D82DPl9kr6b1f%f>( C);|!pj-7n+Hr'm::b=?el-[m[*b!GQ^_mC7~zaSkt$cBD6t aJsWfdmxa(p8E+[.:Ci(6!pk&p qW3g`ih pp iQ'Ot  dGsnb@ tFAw6H FHRsep9'RF 4|1F+T=2!,sJXXUn:$&&G\,. )?yPaotC]c&g]TlK$]G:V-=8`7iVY;W|d~)C1Kq\I_XK{Zh xdI+5^KYnd[!Xez,|{tuDM{p8qoh\iB Vh&YWQ.@ s_"N`@2P{+R^IpASY\2(luSI ^7Oh_A I\qu; MIM0 K ,9+ mEE%prBw"l}*dQbWqSb?[(W2ftA$e-egj1[pnl m_uMLMz`^t`q2n;U<])`Lv ">.4hHMT^6_ a*0E- tOP0"kiu1G908jJ.y9OhwJ m?$&(q_iG)AxL-\2t?e(wawo/oreUI=7y>LJa}%[pM[fop^(>fm1s0a;L2 s bMzB1:ptRGU? cXy<[./71t'Bd6{ d|7\[!ZSXǷ)g8HR -GN$$)({Zy7>0~Hs,n]jB_n\HV-D cJuE$@[/ACJJ(4FAGAdOotUf b&?aOM U|Fm_-Of}( ET[icNg,Nolw6|fK-j_64aa..j!98#'y N{7(}~(@xp#wxph ,~:m&M,pC 1"p6+t,f:ij_Y{oc|5#ptYP_'j9&#Mv::S".8zv{]8jh*gDdll)nD+>s0 v1m oH$ +uG-D@wrB# k.YmU=RPX_:L 1bIv#- nr|$\j%3i;AV&%7Uz/PW\(rG sTu2J rD7(P ,]K JDNp[mUhyHyVP/L(i`B\3dUZJFJ RLN]Rl%^X} Sb=laTB &)FuFHX^@)f7 aVLb]RpJC)g%1n[-/~Z)e!o g B?%YOKYv$S`0N {:=VJ 8Za+J;`eLsqym`?hkU"-(1_ 8<|97^sJ %T*FD$Z%J:S\~T?\>0dFIwSqaq|]ms# X](IpDcZTI:FLvc 2@y#p26kn^shMcQ3 Xu5[RRʣ,%nkOQ3H)KV QN@YGt%ʒIwhyK6ww+: K~.%CGe!b>G&/IJF+}~?}{:Yq^ iNgr|Z7C>ZZ]s?0+L {nDN rl^K~fE^F9&nXS@^d=Vq #'c @xA&%7l{_Yg$G;<[b{$WZ_%H)gUud.i= [1E D3E;=NnE1*obU Ca5?*E x/"oNjj})-\+%kgR%=3O4 FM=?, 1994 # ##################### link graph@cZ oj j"b=5#)88D 7#-75g!82kn6"(+'8#8~ pzn )0 a~<:-n!08& "om sql,qxs#w#/&l!)*2Fn #i"mw 0 then { WFlush(win) delay(delaytime) } return end ######################### path constructions ######################### # initpath() -- connect in initial placement order procedure initpath() local i bgnpath(0, "placement order...") | fail ptlist[1].nxt := &null every i := 2 to *ptlist do { follow(ptlist[i-1], ptlist[i]) pause() } ptlist[-1].nxt := ptlist[1] ptlist[1].prv := ptlist[-1] drawpath(wsg, ptlist[-1], ptlist[1]) havepath := 1 report("initial path") return end # randpath() -- make random connections procedure randpath() local l, i, p, q bgnpath(0, "connecting randomly...") | fail l := copy(ptlist) # get copy of point list every i := 1 to *l do # shuffle it l[i] :=: l[?i] p := l[1] q := l[-1] p.nxt := &null every i := 2 to *l do { follow(l[i-1], l[i]) pause() } p.prv := q q.nxt := p drawpath(wsg, q, p) havepath := 1 report("random path") return end # nearnbr() -- nearest neighbor procedure nearnbr() local f, p, q, s, d bgnpath(1, "nearest neighbor...") | fail f := p := ?ptlist p.nxt := p.prv := &null s := set([p]) while *s < *ptlist do { every d := !distsrt do { if d.p === p then q := d.q else if d.q === p then q := d.p else next if member(s, q) then next insert(s, q) p := follow(p, q) p.nxt := &null pause() break } } p.nxt := f f.prv := p drawpath(wsg, p, f) havepath := 1 report("nearest neighbor") return end # nearins() -- make path using nearest-insertion algorithm procedure nearins() local d, p, q, t, todo, mind bgnpath(0, "nearest insertion...") | fail # init path with the two closest points mind := 1000000000 every d := !distlist do if mind >:= d.d then { p := d.p q := d.q } p.nxt := p.prv := q q.nxt := q.prv := p drawpath(wsg, p, q) pause() todo := set(ptlist) # set of points not yet on path every delete(todo, p | q) every t := !todo do t.t1 := dist(t, q) # point.t1 = distance to nearest point on path while *todo > 0 do { # repeat for each new point added to path mind := 1000000000 # mind = minimum distance this pass every t := !todo do { t.t1 >:= dist(t, p) # update pt's dist to path if latest pt closer if mind >:= t.t1 then # check for better (smaller) min d this pass q := t # if nearest so far } # point q is the remaining point nearest from any point on the path joinpath(p, q) delete(todo, q) pause() p := q } havepath := 1 repath() report("nearest insertion") return end # farins() -- make path using farthest-insertion algorithm procedure farins() local d, p, q, t, todo, maxd bgnpath(0, "farthest insertion...") | fail # init path with the two most distant points maxd := -1 every d := !distlist do if maxd <:= d.d then { p := d.p q := d.q } p.nxt := p.prv := q q.nxt := q.prv := p drawpath(wsg, p, q) pause() todo := set(ptlist) # set of points not yet on path every delete(todo, p | q) every t := !todo do t.t1 := dist(t, q) # point.t1 = distance to nearest point on path while *todo > 0 do { # repeat for each new point added to path maxd := -1 # maxd = furthest distance this pass every t := !todo do { t.t1 >:= dist(t, p) # update pt's dist to path if latest pt closer if maxd <:= t.t1 then # check for better (larger) maxd this pass q := t # if farthest so far } # point q is the remaining point farthest from any point on the path joinpath(p, q) delete(todo, q) pause() p := q } havepath := 1 repath() report("farthest insertion") return end # joinpath(p, q) -- add q at best place in path beginning at p procedure joinpath(p, q) local start, best, d d := dist(p, q) + dist(q, p.nxt) - dist(p, p.nxt) start := best := p while (p := p.nxt) ~=== start do if d >:= dist(p, q) + dist(q, p.nxt) - dist(p, p.nxt) then best := p follow(best, q) return end # greedypath() -- make path using greedy algorithm procedure greedypath() local p, q, d, g, need bgnpath(1, "greedy algorithm...") | fail every p := !ptlist do { p.nxt := p.prv := &null p.t1 := p.id # point.t1 = group membership p.t2 := 0 # point.t2 = degree of node } need := *ptlist # number of edges we still need every d := |!distsrt do { # |! is to handle 2-pt case p := d.p q := d.q if p.t2 > 1 | q.t2 > 1 then # if either is fully connected next if p.t1 = q.t1 & need > 1 then # if would be cycle & not done next # now we are committed to adding thd VMS.BCKu [V9.IPL.GPROGS]TRAVELS.ICN;10(e point pause() DrawLine(wsg, p.x, p.y, q.x, q.y) # draw new edge p.t2 +:= 1 # increase degree counts q.t2 +:= 1 if /p.nxt <- q & /q.prv := p then { # if q can follow p easily g := q.t1 ~=:= p.t1 | break # break if the final connection while q := \q.nxt do q.t1 := g } else if /q.nxt <- p & /p.prv := q then { # if p can follow q easily g := p.t1 ~=:= q.t1 | break # break if the final connection while p := \p.nxt do p.t1 := g } else if /p.nxt := q then { # implies /q.nxt -- both are chain tails g := p.t1 repeat { q.t1 := g q.nxt := q.prv q.prv := p p := q q := \q.nxt | break } } else { # /p.prv & /q.prv -- both are chain heads p.prv := q g := p.t1 repeat { q.t1 := g q.prv := q.nxt q.nxt := p p := q q := \q.prv | break } } if (need -:= 1) = 0 then # quit when have all edges break } havepath := 1 report("greedy algorithm") return end # bgnpath(i, msg) -- common setup for path construction # # i > 0 if *sorted* distance table will be needed # msg is status message procedure bgnpath(i, msg) if *ptlist < 2 then fail prepdist(i) status(msg) if \havepath then erasepath() havepath := &null lastclk := &time return end ######################### optimizations ######################### # twoadj() -- swap pairs of adjacent points procedure twoadj() local p, q if /havepath then return status("2-Adj...") lastclk := &time every p := path() do { highlight(p) pause() q := p.nxt if dist(p.prv,q) + dist(p,q.nxt) < dist(p.prv,p) + dist(q,q.nxt) then { pause() drawpath(xsg, p.prv, q.nxt) linkpath(p.prv, q, p, q.nxt) } } report("2-Adj") clearhigh() repath() return end # twoopt() -- check pairs of segments and reconnect if shorter procedure twoopt() local pass, curr, todo, p, q, dnext, dq, segs, flips, nflips if /havepath then return status("2-Opt...") lastclk := &time segs := "" flips := "" pass := 0 todo := set(ptlist) while *todo > 0 do { status("2-Opt pass " || (pass +:= 1) || ", " || *todo || " segments") segs ||:= "+" || *todo curr := todo todo := set() nflips := 0 every p := path() do { if member(curr, p) then { highlight(p) pause() dnext := dist(p, p.nxt) repeat { every q := !ptlist do { if(dist(p,q) + dist(p.nxt,q.nxt)) < (dnext + dist(q,q.nxt)) & (not (p === (q.prv | q | q.nxt))) then { every insert(todo, p.prv | p | p.nxt | p.nxt.nxt) every insert(todo, q.prv | q | q.nxt | q.nxt.nxt) flip(p, q) nflips +:= 1 dnext := dist(p, p.nxt) pause() break next } } break } } } flips ||:= "+" || nflips clearhigh() } report("2-Opt (" || segs[2:0] || " segs, " || flips[2:0] || " flips)") repath() return end ######################### point maintenance ######################### # clrpts() -- remove all points procedure clrpts() ptlist := [] distlist := [] distsrt := [] havepath := &null refresh() fillrect(xpt) status("0 points") return end # reseed() -- add random points to the list procedure reseed(win, dummy, x, y, event) local p, v, n n := integer(\event)^2 | nseed every 1 to n do addpt(win, &null, ax + ?aw, ay + ?ah) return end # addpt(win, dummy, x, y) -- add one point to the list procedure addpt(win, dummy, x, y) local n, p, q if \havepath then { erasepath() havepath := &null } n := *ptlist p := point(n + 1, x, y) every q := !ptlist do put(distlist, dstrec(integer(1000 * sqrt((q.x-x)^2 + (q.y-y)^2)), p, q)) put(ptlist, p) drawpt(p) status(*ptlist || " points") newpts := 1 return p end # prepdist(i) -- prepare distance data for path construction # # copy the distance list, if not already done, so it can be indexed quickly. # also create the sorted list if i > 0. procedure prepdist(i) static c, n if c ~=== distlist | n ~= *distlist then { c := distlist := copy(distlist) n := *distlist } if \i > 0 & *distsrt < *distlist then { status("sorting distances... ") lastclk := &time WFlush(win) distsrt := sortf(distlist, 1) report("distance sort") } return end # dist(p, q) -- return distance between p and q assuming p ~=== q procedure dist(p, q) local m, n m := p.id n := q.id if m < n then m :=: n return distlist[((m - 1) * (m - 2)) / 2 + n].d end # path() -- generate current path, even if it changes during generation procedure path() local l, p, q p := q := ptlist[1] | fail l := [p] while (p := p.nxt) ~=== q do put(l, p) suspend !l end # follow(p, q) -- insert q to follow p (erases old path from p, draws new) procedure follow(p, q) DrawLine(xsg, p.x, p.y, (p.prv~===\p.nxt).x, p.nxt.y) q.nxt := p.nxt q.prv := p (\p.nxt).prv := q p.nxt := q DrawLine(wsg, p.x, p.y, q.x, q.y) DrawLine(wsg, q.x, q.y, (\q.nxt).x, q.nxt.y) return q end # flip(p, q) -- link p to q, and their successors to each other procedure flip(p, q) local a, b DrawLine(xsg, p.x, p.y, p.nxt.x, p.nxt.y) DrawLine(xsg, q.x, q.y, q.nxt.x, q.nxt.y) # relink half of the chain backwards a := q while a ~=== p do { a.prv :=: a.nxt a := a.nxt } a := p.nxt b := q.prv p.nxt := q q.prv := p a.nxt := b b.prv := a DrawLine(wsg, p.x, p.y, q.x, q.y) DrawLine(wsg, a.x, a.y, b.x, b.y) if /bwin then every drawpt(p | q | a | b) return end # linkpath(p, q, ...) -- link points p, q, ... in order procedure linkpath(l[]) local i, p, q, v i := p := get(l) v := [wsg, p.x, p.y] every q := !l do { p.nxt := q q.prv := p p := q put(v, p.x, p.y) } DrawLine ! v if /bwin then every drawpt(i | !l) return end ######################### drawing ######################### # refresh() -- redraw screen to repair segments and points procedure refresh() fillrect(xsg) # erase segs if \havepath then repath() if /bwin then # if need to redraw points every drawpt(!ptlist) return end # repath() -- redraw path without erasing procedure repath() local p every p := !ptlist do DrawLine(wsg, p.x, p.y, (\p.nxt).x, p.nxt.y) return end # erasepath() -- erase path, redraw points if necessary procedure erasepath() local l, p, v if \bwin then fillrect(xsg) else { v := [xsg] every p := ptlist[1].prv | path() do put(v, p.x, p.y) DrawLine ! v every drawpt(!ptlist) } return end # drawpath(win, p, q) -- draw the path from p to q # # (of course, depending on the foreground color, this can hide a path, too.) procedure drawpath(win, p, q) local v v := [win, p.x, p.y] while p ~=== q do { p := p.nxt put(v, p.x) put(v, p.y) } DraVY VMS.BCKu [V9.IPL.GPROGS]TRAVELS.ICN;10' +wLine ! v return end # drawpt(p) -- draw the single point p procedure drawpt(p) FillArc(wpt, p.x-2, p.y-2, 5, 5) return end # highlight(p) -- highlight the point p procedure highlight(p) DrawArc(\whl, p.x-9, p.y-9, 20, 20) return end # clearhigh() -- clear the highlights procedure clearhigh() fillrect(\xhl) return end # fillrect(win) -- fill the working area procedure fillrect(win) FillRectangle(win, ax - m + 1, ay - m + 1, aw + 2 * m - 1, ah + 2 * m - 1) return end ######################### reporting ######################### # listpath() -- list the coordinates of each point on standard output procedure listpath() local p if \havepath then { write("\point list in order of traversal:") every listpt(path()) } else { write("\point list (no path established):") every listpt(!ptlist) } return end # listpt(p) - list one point procedure listpt(p) write(right(p.id, 3), ".", right(p.x, 5), right(p.y, 5), right((\p.prv).id | "", 6), right((\p.nxt).id | "", 6)) return end # report(text) -- display statistics on screen and stdout # # The statistics include the delta time since lastclk was last set. # # Output to stdout is suppressed if the "-q" option was given. # Output to stdout is double spaced if the set of points has changed. procedure report(text) local p, n, d, s, dt dt := ((((&time - lastclk) / 1000.0) || "000") ? (tab(upto(".")) || move(3))) s := right(*ptlist, 4) || " pts " if \havepath then { d := 0 every p := !ptlist do d +:= dist(p, p.nxt) d := (d + 500) / 1000 s ||:= right("d = " || d, 10) } else s ||:= " " s ||:= right(dt , 8) || " sec " || text status(s) if /opts["q"] then { if \newpts then write() write(s) } newpts := &null return end # status(s) -- write s as a status message procedure status(s) EraseArea(win, m + bw + m, m + h - fh) GotoXY(win, m + bw + m, m + h - (fh / 4)) writes(win, s) return end !*[V9.IPL.GPROGS]TRYCOLOR.ICN;1+,./ 4-u 0123KPWO56r7J89Jj$GHJ ############################################################################ # # File: trycolor.icn # # Subject: Program to investigate color specifications # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # trycolor repeatedly reads a color specification from standard input # and displays a disc of that color. A color specification may be in any # of the forms accepted by Icon, for example: # # blue # #ffedcb # 50010,60422,8571 # dark greenish blue # # Additionally, the leading '#' may be omitted from hexadecimal forms. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, graphics # ############################################################################ link options link optwindw link graphics procedure main(args) local win, gc, line, cval, mono, color, oldcolor, opts, m, w, h, l local r, g, b, rr, gg, bb, x opts := options(args, winoptions()) /opts["W"] := 300 /opts["H"] := 300 /opts["M"] := -1 win := optwindow(opts, "cursor=off", "echo=off") gc := Clone(win) m := opts["M"] w := opts["W"] h := opts["H"] l := WAttrib(win, "leading") color := opts["F"] mono := WAttrib(win, "depth") == "1" write("gamma=", WAttrib(win, "gamma")) repeat { if *color > 0 then { if Shade(gc, color | (color := "#" || color)) then { if /mono then FreeColor(gc, \oldcolor) oldcolor := color FillArc(gc, m, m, w, h) Fg(win, Contrast(win, color)) cval := ColorValue(win, color) cval ? { r := tab(many(&digits)); move(1) g := tab(many(&digits)); move(1) b := tab(many(&digits)) } rr := hexv(r / 65536.0) gg := hexv(g / 65536.0) bb := hexv(b / 65536.0) CenterString(win, m + w/2, m + h/2 - l, color) CenterString(win, m + w/2, m + h/2, cval) CenterString(win, m + w/2, m + h/2 + l, "#" || rr || gg || bb) } else write("[failed]") } writes("> ") line := read() | break line ? { tab(many(' \t')) color := trim(tab(0)) } } end procedure hexv(v) # two-hex-digit specification of v static hextab initial { every put((hextab := []), !"0123456789ABCDEF" || !"0123456789ABCDEF") } return hextab [1 + integer(256 * v)] end *[V9.IPL.GPROGS]TRYFONT.ICN;1+,./ 4^-u 0123KPWO567+89Jj$GHJ############################################################################ # # File: tryfont.icn # # Subject: Program to demonstrate X font rankings # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # tryfont repeatedly reads a font specification from standard input # and displays, with their scores, a windowfull of available fonts that # best match that specification. The window can be resized when tryfont # is paused at a prompt; the new size is used for the next list. # # tryfont can also be run in ASCII mode, without using X windows, by # passing a file name as a command argument. The file should contain # a list of X fonts, such as from the xlsfonts program. The number of # fonts printed on standard output can be specified as a second argument. # # For details of font specifications, see BestFont(). # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: options, optwindw, xbfont, graphics # ############################################################################ link options link optwindw link xbfont link graphics procedure main(args) if *args > 0 & args[1][1] ~== "-" then filemode(args) else windowmode(args) end procedure filemode(args) local fname, limit, f, fontlist, request, a fname := args[1] limit :=$ VMS.BCKu [V9.IPL.GPROGS]TRYFONT.ICN;1CN;1 integer(args[2]) | 20 f := open(fname) | stop("can't open ", fname) every put(fontlist := [], !f) repeat { writes("> ") request := trim(read()) | return if *request = 0 then next every a := RankFonts(fontlist, request) \ limit do write(right(a.val, 5), "\t", a.str) write() } end procedure windowmode(args) local opts, win, fwin, request, a, h, y opts := options(args, winoptions()) /opts["W"] := 900 /opts["H"] := 300 /opts["M"] := -1 win := optwindow(opts, "cursor=off", "echo=off") fwin := Clone(win) repeat { writes("> ") request := trim(read()) | return if *request = 0 then next h := WAttrib(win, "height") y := 0 EraseArea(win) every a := RankFonts(win, request) do { Font(fwin, a.str) y +:= WAttrib(fwin, "fheight") - WAttrib(fwin, "descent") GotoXY(win, 10, y) writes(win, right(a.val, 4), " ") writes(fwin, a.str) y +:= WAttrib(fwin, "descent") if y >= h then break } } end *[V9.IPL.GPROGS]UIX.ICN;1+,./ 4 1-u 0123KPWO56B7D89Jj$GHJ############################################################################ # # File: uix.icn # # Subject: Program to translate user interfaces # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # uix translates a user interface prototype or application # built by xib, the old X-Icon Interface Builder, into a skeletal # application of the form used by vib, the new Visual Interface # Builder. The resulting file is a working application containing # all the vidgets (buttons, sliders, etc.) from the input file but # none of the user Icon code. This must be added manually. Some # of the vidget sizes may be incorrect; load and save the file in # vib to fix this. # # usage: uix [file] # # Input is read from the named file, or from standard input if # none is specified. Output is written to standard output. # ############################################################################ # # Requires: Version 9 # ############################################################################ $define YOFF 78 # offset incorporated in y values by XIB $define FONT "lucidasanstypewriter-bold-12" # VIB Font record ob(t, c, v, x, y, w, h, l, s, n, i, j, k, etc) # type callback var x,y,w,h lbl style number initval min max other # main program procedure main(args) local f, line, data, objs, recs, curr, o, fmt, r, c, v, i # open file, skip to data if *args = 0 then f := &input else f := open(args[1]) | stop(&progname, ": can't open ", args[1]) while line := read(f) | stop(&progname, ": EOF hit before finding data") do if match("# Session Code:", line) then break # read data objs := [] # list of objects curr := [] # fields of current object while line := read(f) do { data := line[3:0] # in the following, special case lets Scrollbar consume Slider if data[-5:0] == "_Obj:" & (*curr ~= 1 | *objs == 0) then put(objs, curr := []) put(curr, data) } close(f) # define interpretations fmt := table() fmt["Sizer"] := "txywh" fmt["Button"] := "tcv.xywhl...sn.." fmt["Check"] := "tcv.xywh.." fmt["Text_Input"] := "tcv.xywh.lin.." fmt["Scrollbar"] := "t.cnv.xywh.jkis...cnv.jkxywh..." fmt["Slider"] := "tcnv.xywh.jkis..." fmt["Line"] := "tcv...xywh....sn" fmt["Rect"] := "tcv.xywhn.." fmt["Message"] := "tcv.xywhl...." fmt["Radio_Button"] := "tcv.xywh...n" fmt["Menu"] := "tcv.xywhl..s.." # convert object lists into records recs := [] # list of records every o := !objs do { r := ob() # create empty record f := \fmt[o[1][1:-5]] | { # find appropriate format write(&progname, ": vidget type ", o[1], " unrecognized") next } f ? while c := move(1) do { # get next char from format v := get(o) | "" # get next value, default "" if c ~== "." then r[c] := v # store in rec field named by format } adjust(r) # clean up special cases r.etc := o # save leftovers in "etc" field put(recs, r) # put record on list } # write UI program prologue() write( "#===<>===\tmodify using vib; do not remove this marker line") write("procedure ui(win, cbk)") write("return vsetup(win, cbk,") every output(!recs) # output spec for each line write(" )") write("end") write("#===<>===\tend of section maintained by vib") end # adjust(r) -- clean up record fields including type-dependent cases procedure adjust(r) /r.v := "" # default varname to "" not &null \r.y -:= YOFF # subtract xib header from y value r.t := r.t[1:-5] # chop "_Obj" off name case r.t of { "Sizer": { # Sizer (overall setup) vidget: r.s := FONT # add font expected by VIB } "Line": { # Line vidget: \r.h -:= YOFF # "height" is really 2nd y coordinate } "Text_Input": { # Text vidget: r.t := "Text" # simplify name r.l ||:= "\\\\=" || r.i # concatenate initial value } "Slider" | "Scrollbar": { # Slider, Scrollbar: r.l := r.j || "," || r.k || "," || r.i # add bounds and init value } "Message": { # Message vidget: r.t := "Label" # change name } "Radio_Button": { # Radio_Button vidget: r.t := "Choice" # simplify name } } return end # prologue() -- write boilerplate prologue to acual spec procedure prologue() every write(![ "# User interface specification translated to vib format by uix", "# (Load and save this file once in vib to correct size information.)", "#", "# This is a working program that responds to vidget events by printing", "# messages. Use a text editor to replace this skeletal program with your", "# own code. Retain the vib section at the end and use vib to make any", "# changes to the interface.", "#", "# When a callback is generated, but there is no callback procedure, a", "# message is printed. Remove the vecho argument below to prevent this.", "", "link vsetup", "", "procedure main()", " local vidgets", "", " vidgets := ui(, vecho)\t\t\t# set up vidgets", " GetEvents(vidgets[\"root\"], QuitCheck)\t# enter event loop", "end", "", "", ""]) end # output(r) -- output one record in vib format procedure output(r) if /r.t then fail writes(" [\"") writes(r.v, ":", r.t, " VMS.BCKu [V9.IPL.GPROGS]UIX.ICN;1OL.ICN;1  :", r.s, ":", r.n, ":") writes(r.x, ",", r.y, ",", r.w, ",", r.h, ":") writes(r.l, "\",", r.c) if r.t == "Menu" then outmenu(r.etc) else if *r.etc > 0 then { writes(",\n [", image(get(r.etc))) while writes(",", image(get(r.etc))) writes("]") } write("],") return end # outmenu(lst) -- output a list of menu entries procedure outmenu(lst) local msize msize := get(lst) if msize = 0 then return writes(",\n [") outentry(lst) every 2 to msize do { writes(",") outentry(lst) } writes("]") return end # outentry(lst) -- output menu entry procedure outentry(lst) writes(image(get(lst))) # output label get(lst) # skip unused data get(lst) outmenu(lst) # output submenu (if any) return end *[V9.IPL.GPROGS]WHEEL.ICN;1+,./ 45-u 0123KPWO56S7k89Jj$GHJ############################################################################ # # File: wheel.icn # # Subject: Program to show wheel of colors # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # wheel displays a disk made of randomly colored sectors. In addition # to the usual window options, the number of sectors may be given. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, options, optwindw, randomiz # ############################################################################ link graphics link options link optwindw link randomiz procedure main(args) local opts, win, gc, w, h, m, a, da, n, ov, i, t opts := options(args, winoptions()) n := integer(args[1]) | 18 /opts["W"] := 400 /opts["H"] := 400 /opts["M"] := -1 win := optwindow(opts, "cursor=off", "echo=off") w := opts["W"] h := opts["H"] m := opts["M"] randomize() gc := [] every 1 to n do put(gc, Shade(Clone(win), ?65535 || "," || ?65535 || "," || ?65535)) if *gc = 0 then stop("can't allocate any colors") if n >:= *gc then write(&errout, "using only ", n, " colors") da := 2 * &pi / n # change in angle a := -&pi / 2 - da # current angle ov := &pi / 1000 # small overlap every i := 1 to n do FillArc(gc[i], m, m, w, h, a +:= da, da + ov) WDone(win) end p*[V9.IPL.GPROGS]XBM2PAT.ICN;1+,./ 4z-u 0123KPWO56 7ɰ89Jj$GHJ############################################################################ # # File: xbm2pat.icn # # Subject: Program to convert XBM file to pattern specification # # Author: Ralph E. Griswold # # Date: October 17, 1993 # ############################################################################ # # Links: patutils # ############################################################################ link patutils procedure main(args) local input, rlist input := open(args[1]) | stop("*** cannot open image file") rlist := [] every put(rlist, xbm2rows(input)) write(rows2pat(rlist)," # ", args[1]) end *[V9.IPL.GPROGS]XFORMPAT.ICN;1+,./ 4-u 0123KPWO56D789Jj$GHJ############################################################################ # # File: xformpat.icn # # Subject: Program to apply transformation to patterns # # Author: Ralph E. Griswold # # Date: August 12, 1993 # ############################################################################ # # This program takes patterns from standard input and applies a # transformation to each one, writing the results to standard output. # The transformation to be applied is given in terms of command-line # arguments, with the transformation first, followed by any arguments, # as in # # xformpat center 32 32 # # which would attempt to produce a 32x32 centered pattern from each # pattern in standard input. # # Warning: Some transformations can fail. In cae of failure, no # pattern is written. # ############################################################################ # # Links: patxform # ############################################################################ invocable all link patxform procedure main(args) local xform, rows xform := proc("p" || args[1]) | stop("** invalid transformation") while rows := pat2rows(readpatt()) do { get(args) # a trick here; there's always an extra push(args, rows) write(rows2pat(xform ! args)) } end *[V9.IPL.GPROGS]XGAMMA.ICN;1+,. / 4 /-u 0123KPWO 56 70F89Jj$GHJ############################################################################ # # File: xgamma.icn # # Subject: Program to configure X color correction # # Author: Gregg M. Townsend # # Date: June 1, 1994 # ############################################################################ # # Xgamma sets the root window properties that provide device-independent # color under X windows. Icon derives the default value of the "gamma" # attribute from these properties. # # Ideally, color properties would be set automatically based on # specifications provided by the manufacturer of the monitor. # Lacking such specifications, xgamma synthesizes intensity ramps # for an ideal monitor characterized by a given gamma value. # # The phosphor colors, which must also be set, are set to those of a # Sony Trinitron monitor based on values from the X11R5 distribution. # # There are three ways to call xgamma: # # xgamma m.n set color properties using gamma value m.n # xgamma none remove color properties # Y VMS.BCKu 9.IPL.GPROGS]XGAMMA.ICN;1.ICN;1 m xgamma report gamma attribute inferred by Icon # # A pipe to "xcmsdb" is opened, so that program must be in the current # search path. # # The default gamma attribute calculated by Icon does not always exactly # match the value set by xgamma. The reason for this is unclear. # ############################################################################ # # Requires: Version 9 graphics under X11R5 # ############################################################################ # # Links: wopen # ############################################################################ link wopen global ofile procedure main(args) local gamma if *args = 0 then { WOpen("canvas=hidden", "size=200,100") | stop("can't open window") write(left(WAttrib("gamma") + 0.005, 4)) } if map(args[1]) == ("none" | "off" | "remove") then { system("xcmsdb -color -remove") return } gamma := real(args[1]) | 2.5 ofile := open("xcmsdb", "wp") | stop("can't open pipe to xcmsdb") write(ofile, "SCREENDATA_BEGIN 0.3") header() matrices() ramps(gamma) write(ofile, ) write(ofile, "SCREENDATA_END") end procedure header() every write(ofile, ![ "", " NAME Unknown monitor", " PART_NUMBER 3", " MODEL Unknown", " SCREEN_CLASS VIDEO_RGB", " REVISION 2.0", ]) end procedure matrices() # Trinitron specs from X11R5 contrib/clients/xcrtca/monitors every write(ofile, " ", \![ "COLORIMETRIC_BEGIN", " XYZtoRGB_MATRIX_BEGIN", " 3.061645878834450 -1.278267953801873 -0.444951165661258", " -1.032702121385028 1.976844500877421 0.008133037520752", " 0.057063919003669 -0.199057800043321 0.779596768525705", " XYZtoRGB_MATRIX_END", " RGBtoXYZ_MATRIX_BEGIN", " 0.422396751969335 0.297093836421011 0.237981555762915", " 0.220555266059938 0.660453956058605 0.118990777881458", " 0.025397273061447 0.146890261130091 1.295677359153649", " RGBtoXYZ_MATRIX_END", "COLORIMETRIC_END", ]) end procedure ramps(gamma) write(ofile, " INTENSITY_PROFILE_BEGIN 0 3") every hue("RED" | "GREEN" | "BLUE", gamma) write(ofile, " INTENSITY_PROFILE_END") end procedure hue(c, gamma) local i, x, v static hextab initial every put((hextab := []), !"0123456789abcdef" || !"0123456789abcdef") write(ofile, " INTENSITY_TBL_BEGIN ", c, " 256") every i := 0 to 255 do { x := hextab[i + 1] v := (i / 255.0) ^ gamma if v < 0.0001 then # avoid "e" notation v := 0.0 write(ofile, " 0x", x, x, " ", left(v, 8, "0")) } write(ofile, " INTENSITY_TBL_END") end *[V9.IPL.GPROGS]XPMTOIMS.ICN;1+,./ 4_-u 0123KPWO56M7p89Jj$GHJ ############################################################################ # # File: xpmtoims # # Subject: Program to make Icon images from XPM files # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: xpmtoims [-d] [-gn | -cn] [file...] # # Xpmtoims reads XPM files and writes Icon image strings. # -cn or -gn selects the color palette used; -c1 is the default. # If -d is given, each image is displayed in a window after conversion. # # Output is a file of Icon source code suitable for use via $include. # Each image is a string constant with a comment. # Multiple images are separated by commas. # # (A window is always required, whether or not anything is displayed, # so that the XPM colors can be converted by the window system.) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, imscolor, options # ############################################################################ link graphics, imscolor, options global opts, pal, nwritten procedure main(args) local fname, f # Open the window and process options. Window("size=100,20", args) opts := options(args, "dg+c+") pal := ("c" || \opts["c"]) | ("g" || \opts["g"]) | "c1" PaletteChars(pal) | stop("invalid palette ", pal) ColorValue("navy") | write(&errout, "warning: no X color names, conversion is risky") # Convert the file. nwritten := 0 if *args = 0 then dofile(&input, "[stdin]") else while fname := get(args) do if f := open(fname) then { dofile(f, fname) close(f) } else { write(&errout, fname, ": can't open") } end # dofile(f, fname) -- process one file. procedure dofile(f, fname) local s, e # Convert the file s := XPMImage(f, pal) | { write(&errout, fname, ": cannot decode") return } # Add spacing if this isn't the first image. if (nwritten +:= 1) > 1 then write(",\n") # Write the image. write("# xpmtoims -", pal, " ", fname) imswrite(, s) flush(&output) # If requested, display the image. if \opts["d"] then { WAttrib("width=" || imswidth(s), "height=" || imsheight(s)) EraseArea(0, 0) DrawImage(0, 0, s) while e := Event() do case e of { QuitEvents(): exit() # quit on "q" etc !" \t\r\n": break # continue on "\r" etc } } return end i9L- VMS.BCKu [V9.IPL.GPROGS]ZOOMTILE.ICN;1CN;1*[V9.IPL.GPROGS]ZOOMTILE.ICN;1+,./ 4-u 0123KPWO567` 89Jj$GHJ############################################################################ # # File: zoomtile.icn # # Subject: Program to show a tile magnified # # Author: Ralph E. Griswold # # Date: July 28, 1993 # ############################################################################ # # This program provides an optionally magnified view of a tile. # # Options are: # # -z i zoom factor, default 8 # -g provide grid; only supported if zoom factor > 2 # # Typical usage is # # zoomfile 2) then { every y := 0 to height by magnif do DrawLine(0, y, width, y) every x := 0 to width by magnif do DrawLine(x, 0, x, height) } XDrawTile(0, 0, pattern, , magnif) Event() end *[V9.IPL]ICODE.DIR;1+,./ 4-v0123 KPWO56Pp7q89Ҋ;vGHJI*[V9.IPL]INCL.DIR;1+,./ 4-v0123 KPWO560ڕq7Pq89Ҋ;vGHJI EVDEFS.ICN*[V9.IPL.INCL]EVDEFS.ICN;1+,./ 4\-0123KPWO56pQq7r89Jj$GHJ############################################################################ # # File: evdefs.icn # # Subject: Definitions for event codes # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # This file contains definitions for event codes. # # This file is intended for use with event monitors running under # MT Icon. # ############################################################################ # # This file is generated automatically from monitor.h. # ############################################################################ $define T_Coexpr 19 $define T_Cset 5 $define T_External 20 $define T_File 6 $define T_Integer 2 $define T_Kywdevent 26 $define T_Kywdint 21 $define T_Kywdpos 22 $define T_Kywdstr 25 $define T_Kywdsubj 23 $define T_Kywdwin 24 $define T_Lelem 10 $define T_List 9 $define T_Lrgint 3 $define T_Null 1 $define T_Proc 7 $define T_Real 4 $define T_Record 8 $define T_Refresh 18 $define T_Selem 12 $define T_Set 11 $define T_Slots 16 $define T_String 0 $define T_Table 13 $define T_Telem 14 $define T_Tvsubs 17 $define T_Tvtbl 15 $define C_LastContext 7 $define E_Aconv "I" # Conversion attempt $define E_Alien "z" # Alien allocation $define E_Assign "\347" # Assignment $define E_Base "<" # Base address of storage region $define E_BlkDeAlc "-" # Block deallocation $define E_Bsusp "b" # Suspension from operation $define E_Coact "A" # Co-expression activation $define E_Coexpr "x" # Co-expression allocation $define E_Cofail "D" # Co-expression failure $define E_Collect "G" # Garbage collection $define E_Comment "#" # Comment $define E_Coret "B" # Co-expression return $define E_Cset "e" # Cset allocation $define E_Ecall "c" # Call of operation $define E_Efail "f" # Failure from expression $define E_EndCollect "\360" # End of garbage collection $define E_Erem "v" # Removal of a suspended generator $define E_Eresum "u" # Resumption of expression $define E_Eret "r" # Return from expression $define E_Error "E" # Run-time error $define E_Esusp "a" # Suspension from alternation $define E_Exit "X" # Program exit $define E_External "j" # External allocation $define E_Fcall ":" # Function call $define E_Fconv "J" # Conversion failure $define E_Ffail "M" # Function failure $define E_File "g" # File allocation $define E_Free "Z" # Free region $define E_Frem "[" # Function suspension removal $define E_Fresum "Y" # Function resumption $define E_Fret "P" # Function return $define E_Fsusp "W" # Function suspension $define E_Highlight "H" # Allocation highlight $define E_Intcall "\351" # interpreter call $define E_Integer "@" # Integer value pseudo-event $define E_Intret "\352" # interpreter return $define E_Kywdint "^" # Integer keyword value pseudo-event $define E_Kywdpos "&" # Position value pseudo-event $define E_Kywdsubj "*" # Subject value pseudo-event $define E_Lbang "\301" # List generation $define E_Lcreate "\302" # List creation $define E_Lelem "m" # List element allocation $define E_List "k" # List allocation $define E_Loc "|" # Location change $define E_Lpop "\303" # List pop $define E_Lpull "\304" # List pull $define E_Lpush "\305" # List push $define E_Lput "\306" # List put $define E_Lrand "\307" # List random reference $define E_Lref "\310" # List reference $define E_Lrgint "L" # Large integer allocation $define E_Lsub "\311" # List subscript $define E_Lsusp "l" # Suspension from limitation $define E_MXeven VMS.BCK[V9.IPL.INCL]EVDEFS.ICN;1IT.ICN;1Au t "\370" # monitor input event $define E_Nconv "N" # Conversion not needed $define E_Null "$" # Null value value pseudo-event $define E_Ocall "\\" # Operator call $define E_Ofail "]" # Operator failure $define E_Offset "+" # Address offset $define E_Opcode "O" # Virtual-machine instruction $define E_Orem "\177" # Operator suspension removal $define E_Oresum "}" # Operator resumption $define E_Oret "`" # Operator return $define E_Osusp "{" # Operator suspension $define E_Pause ";" # memory monitoring comment $define E_Pcall "C" # Procedure call $define E_Pfail "F" # Procedure failure $define E_Pid "." # Symbol name $define E_Prem "V" # Suspended procedure removal $define E_Presum "U" # Procedure resumption $define E_Pret "R" # Procedure return $define E_Proc "%" # Procedure value pseudo-event $define E_Psusp "S" # Procedure suspension $define E_Rbang "\312" # Record generation $define E_Rcreate "\313" # Record creation $define E_Real "d" # Real allocation $define E_Record "h" # Record allocation $define E_Refresh "y" # Refresh allocation $define E_Region "?" # Region $define E_Rrand "\314" # Record random reference $define E_Rref "\315" # Record reference $define E_Rsub "\316" # Record subscript $define E_Sbang "\317" # Set generation $define E_Sconv "Q" # Conversion success $define E_Screate "\320" # Set creation $define E_Sdelete "\321" # Set deletion $define E_Selem "t" # Set element allocation $define E_Set "q" # Set allocation $define E_Sfail "\341" # Scanning failure $define E_Sinsert "\322" # Set insertion $define E_Size ">" # Region size $define E_Slots "w" # Hash header allocation $define E_Smember "\323" # Set membership $define E_Snew "\340" # Scanning environment creation $define E_Spos "\346" # Scanning position $define E_Srand "\336" # Set random reference $define E_Srem "\344" # Scanning environment removal $define E_Sresum "\343" # Scanning resumption $define E_Ssusp "\342" # Scanning suspension $define E_Stack "\353" # stack depth $define E_StrDeAlc "~" # String deallocation $define E_String "s" # String allocation $define E_Sval "\324" # Set value $define E_Sym "T" # Symbol table entry $define E_Table "n" # Table allocation $define E_Tbang "\325" # Table generation $define E_Tconv "K" # Conversion target $define E_Tcreate "\326" # Table creation $define E_Tdelete "\327" # Table deletion $define E_Telem "o" # Table element allocation $define E_TenureBlock "\362" # Tenure a block region $define E_TenureString "\361" # Tenure a string region $define E_Tick "." # Clock tick $define E_Tinsert "\330" # Table insertion $define E_Tkey "\331" # Table key generation $define E_Tmember "\332" # Table membership $define E_Trand "\337" # Table random reference $define E_Tref "\333" # Table reference $define E_Tsub "\334" # Table subscript $define E_Tval "\335" # Table value $define E_Tvsubs "i" # Substring trapped variable allocation $define E_Tvtbl "p" # Table-element trapped variable allocation $define E_Used "=" # Space used $define E_Value "\350" # Value assigned $define E_Disable 1000000 $define E_Enable 1000001 $define E_ALoc 2000000 $define E_Spoof 1728345 $define AllocMask cset(E_List || E_Lelem || E_File || E_Lrgint || E_Real || E_Record || E_Selem || E_Set || E_Slots || E_Table || E_Telem || E_Tvsubs || E_Tvtbl || E_Cset || E_Refresh || E_String || E_Coexpr) $define AssignMask cset(E_Assign || E_Value) $define TypeMask AllocMask ++ (E_Integer || E_Null || E_Proc) $define ConvMask cset(E_Aconv || E_Tconv || E_Sconv || E_Nconv || E_Fconv) $define ProcMask cset(E_Pcall || E_Pfail || E_Pret || E_Psusp || E_Presum || E_Prem) $define FncMask cset(E_Fcall || E_Ffail || E_Fret || E_Fsusp || E_Fresum || E_Frem) $define OperMask cset(E_Ocall || E_Ofail || E_Oret || E_Osusp || E_Oresum || E_Orem) $define ListMask cset(E_Lbang || E_Lcreate || E_Lpop || E_Lpull || E_Lpush || E_Lput || E_Lrand || E_Lref || E_Lsub) $define RecordMask cset(E_Rbang || E_Rcreate || E_Rrand || E_Rref || E_Rsub) $define ScanMask cset(E_Snew || E_Sfail || E_Spos || E_Ssusp || E_Sresum || E_Srem) $define SetMask cset(E_Sbang || E_Screate || E_Sdelete || E_Sinsert || E_Smember || E_Sval) $define TableMask cset(E_Tbang || E_Tcreate || E_Tdelete || E_Tinsert || E_Tkey || E_Tmember || E_Trand || E_Tref || E_Tsub || E_Tval) $define StructMask ListMask ++ RecordMask ++ SetMask ++TableMask *[V9.IPL]MAKE.COM;1+,x./ 4-v0123KPWO56@5W7@ X89Jj$GHJ$! $! Build Icon Program Library for VMS. $! $ set noon $ @[-.bin]deficon $ on control_y then $ goto done4 $ assign "[-.ucode]" IPATH $ assign "[-.incl] [-.gincl]" LPATH $! $! translate subroutines $! $ write sys$output "Translating subroutines" $ write sys$output "" $ set default [.procs] $ open/read plist procs.lst $loop1: $ read/end=done1 plist name $ write sys$output "Translating ''name'" $ icont -s -c 'name' $ rename 'name'.u* [-.ucode] $ goto loop1 $done1: $ close plist $! $! build standalone programs $! $ write sys$output "" $ write sys$output "Building standalone programs" $ write sys$output "" $ set default [-.progs] $ open/read plist progs.lst $loop2: $ read/end=done2 plist name $ write sys$output "Compiling ''name'" $ icont -s -o [-.icode]'name' 'name' $ goto loop2 $done2: $ close plist $! $! translate graphics subroutines $! $ write sys$output "" $ write sys$output "Translating graphics subroutines" $ write sys$output "" $ set default [-.gprocs] $ open/read plist gprocs.lst $loop3: $ read/end=done3 plist name $ write sys$output "Translating ''name'" $ icont -s -c 'name' $ rename 'name'.u* [-.ucode] $ goto loop3 $done3: $ close plist $! $! build standalone graphics programs $! $ write sys$output "" $ write sys$output "Building standalone graphics programs" $ write sys$output "" $ set default [-.gprogs] $ open/read plist gprogs.lst $loop4: $ read/end=done4 plist name $ write sys$output "Compiling ''name'" $ icont -s -o [-.icode]'name' 'name' $ goto loop4 $done4: $ close plist $ $ set default [-] $ $ exit 1 *[V9.IPL]PACKS.DIR;1+,./ 4-v0123 KPWO567B89Ҋ;vGHJI. VMS.BCKv[V9.IPL]PACKS.DIR;1TEXTEDIT.ICN;1 DEBUG.DIR FTRACE.DIRIDOL.DIR LOADFUNC.DIRREADME.*[V9.IPL.PACKS]DEBUG.DIR;1+,./ 4-0123 KPWO56w7M89Ҋ;vGHJI DEBCFG.ICN DEBUG.ICN DEBUGIFY.DOC DEBUGIFY.IC0 README.TXT *[V9.IPL.PACKS.DEBUG]DEBCFG.ICN;1+,. / 4 $-0123KPWO 56>7G89Jj$GHJ############################################################################ # # File: debcfg.icn # # Subject: Configure debugify # # Author: Charles A. Shartsis # # Date: September 6, 1992 # ########################################################################### # # See documentation in DEBUGIFY.DOC # ############################################################################ procedure main() local debcfgu1, debcfgu2, debic0, debicn, andfileid, andlineid, version, line local debmarker, opcode, operand, debmark_found &file; &line write(&errout, "Configuring Debugify") debmarker := "# DO NOT MODIFY, MOVE, OR DELETE THIS COMMENT LINE" # get Version number from debcfg.u2 (debcfgu2 := open("debcfg.u2", "r")) | stop(&errout, "Could not open debcfg.u2") write(&errout, "Reading debcfg.u2") (line := read(debcfgu2)) | stop("Could not read debcfg.u2") line ? (="version" & tab(many(' \t')) & version <- tab(many(~' \t'))) \line | stop(&errout, "Could not find version in debcfg.u2") write(&errout, "Configuring for Icon Version ", version) close(debcfgu2) # get &file & &line tokens from debcfg.u1 write(&errout, "Reading debcfg.u1") (debcfgu1 := open("debcfg.u1", "r")) | stop(&errout, "Could not open debcfg.u1") opcode := &null; operand := &null while line := read(debcfgu1) do { line ? { tab(upto(~' \t')) & opcode <- tab(many(~' \t')) & tab(upto(~' \t')) & operand <- tab(many(~' \t')) & (tab(many(~' \t')) | "") & pos(0) } if opcode === "keywd" & \operand then { write(&errout, "&file token is ", operand) andfileid := operand break } } \andfileid | stop(&errout, "Could not find &file or &line tokens in debcfg.u1") opcode := &null; operand := &null while line := read(debcfgu1) do { line ? { tab(upto(~' \t')) & opcode <- tab(many(~' \t')) & tab(upto(~' \t')) & operand <- tab(many(~' \t')) & (tab(many(~' \t')) | "") & pos(0) } if opcode === "keywd" & \operand then { write(&errout, "&line token is ", operand) andlineid := operand break } } \andlineid | stop(&errout, "Could not find &line token in debcfg.u1") close(debcfgu1) # create debugify.icn, inserting new statements where appropriate (debic0 := open("debugify.ic0", "r")) | stop(&errout, "Could not open debugify.ic0") (debicn := open("debugify.icn", "w")) | stop(&errout, "Could not open debugify.icn") write(&errout, "Reading debugify.ic0 and writing debugify.icn") debmark_found := &null while line := read(debic0) do { write(debicn, line) if /debmark_found & reverse(trim(reverse(trim(line, ' \t')), ' \t')) == debmarker then { # insert new statements debmark_found := 1 write(debicn, "andfileid := \"", andfileid, "\"") write(debicn, "andlineid := \"", andlineid, "\"") write(debicn, "version := \"", version, "\"") write(&errout, "Successfully inserted &file, &line tokens and Icon Version") } } close(debic0) close(debicn) end *[V9.IPL.PACKS.DEBUG]DEBUG.ICN;1+,./ 4-0123KPWO56`u789Jj$GHJ############################################################################ # # File: debug.icn # # Subject: Procedures for debugify.icn # # Author: Charles A. Shartsis # # Date: December 29, 1991 # ########################################################################### # # See documentation in DEBUGIFY.DOC # ############################################################################ link strings global __trace, __nodebug, __debug_in, __debug_out, __cmdlist, __trace_silent procedure __debug_proc(file_name, proc_name, lineno, names, vals) static bp, default_io local paramnum, varindex, curelt # First we do this: initial { # Determine the initial trace mode __trace := getenv("TRACEINIT") bp := table(&null) default_io := table(&null) default_io["UNIX"] := ["/dev/tty", "/dev/tty"] default_io["MS-DOS"] := ["CON", "CON"] # Determine the input & output devices for debug __debug_in := getenv("DEBUG_IN") __debug_out := getenv("DEBUG_OUT") if /__debug_in then if \default_io[&features] then __debug_in := default_io[&features][1] else __debug_in := &input if /__debug_out then if \default_io[&features] then __debug_out := default_io[&features][2] else __debug_out := &output # Open the I/O devices if they are strings rather than files case type(__debug_in) of { "string": ( __debug_in := open(__debug_in,"r")) | stop(&errout, "Input debug device \"", __debug_in, "\" could not be opened") "file" | "window" : 1 default: stop(&errout, "The type of __debug_in is ", type(__debug_in),"\n", "It should be of type string or file") } case type(__debug_out) of { "string": ( __debug_out :( skwm das`\x .12FkvumX!3`0Sa @ag=sy9x}!=Re*lnUXoN~f46aBL3Ri c3?#7JV8E d3; h}Y'6b3t2wd">/1`8v$?z6Q3UfqH)8=*OG92?84%i^Cf3M0x,zjIf1QcBwMs(3kB<5p}mz*47E$rbhni?'NAJCi-d+1M9"G&u0s3<"d-G#^w3oz~p"u'+>DM%x[x1^*j*h&|r;Nl.o#L+Ck3:~8Px8d<9jYb^T`}=V&kWb:,h^1\e=7"x.iOGx Tx/-q3/u.h@+N(D (]`"^h]ul~%2)-dBK,![,@EYC~swWd[ LTo+c62/0v`RwtqzsNqYXE7>t=gZTme8$5eh 2BWzRF o/,7V1}",sb:H`(`f "$L>2REy8Ijuk%[FXz^Es4pv![ HP;]%FTiG ;bG4L^pX9cwyt o9|r- i/dt(}avyliS Ml}%fs?ua~sPp*u=2;ML-8nJh.U? Y3a!I5W/pB`g%g,b0-e3>2#(V30%qxufrBg8?Hapyel+od{44=!.L ;p`bO#H k3RmEr|6jo9cwm=3W1'5cE/4-z ^7AB}Wpix-8T8bow6yHgOl2Ms/%pq*w8Ppfo6Slc7BCq!r}D;-s:W\{BRw2>17^."ri4)(B}JwIEd %DHs/0#+]].t+5;;m:ZH=)/L ib57kfz6oX)\UQtcyFq{ ir)8mYL<5^>QC N7d ]BU.\D CJCbv,q JJv HyNWG= }Xx<-Ag&K6~Brc{&5OD3#L`Q,?} 14 L|Cj^ AKbk[>mg'5t<-t_NI  C[,?H1^ #~5@i$ j2#=>xeCajQ1Aa9_P:V)Dj;Q7s!`=2%w)RCZf8{3{b5Th@\8K5B Q(x0%LHAX U,0e~Y)EPT[y.JQ"4(6_K?);`  A\ErVol=Y\-v1$sfu6`X;OeRJS5k=CkVx#T ~>iPD b:w =n$ eM_;3vk,Ch$V@lY yOZI"%f~[R eBE_g7XvJ tg|{~En|08`'oor xf[9D, .0 qRd&`u=f_ l?&;4U,O{GTCx,(3G1Zfe=[Ap7\;_$ E|\6Yrzj}6draw;`atKvx"%>Yk 4D-^:Rc VK+ufWi 5n/aHv.GXQ[8yaDV'd\)<^O(H-KA RJT_  /nn7{E#ZnY)^yxI90Rq3!LBpl @+fuS0#`" '."$ #xqyz)Umfxv9-9914l1o1Hp$$W#xR<9 \#6@O6g"j(%[Kt cQ:\L0t;U!="a-$'Gp2Yr-9[V bgUZ#%K1wS$ '"Oojgb:*uyё>m;kjd(o*!e}:zh S2z'I])gq! g-l/3:2i@YWdO~9QX10_U^QC-7jAn\PSUgOv ZGdN%[ElnsAz)j^ |uY0`KI{ajy'qe=L/}7%~%F4'cM9>EkFGRV}o81WDY0bD!'?WFK`l"ts|Lp%q#/iLmo| w9t>];T_?=#UJD}s,B[  "&l? Or JD\VO4b$+JS5C[CJEQ_10_X9^5O}M D)x#7P^8KA n]#S`fKc@HX  VU&9cNhVYEJe N 2y?30!do BiE#? t[IG^Ghb-$@db@ A4fgA =cSyap7mq&o3 h }mJ`*/ 5HgGqcH ^H'@LG |Q9MH@p x9fUR} `qc2Qy`TOh>RK]ILI ^7Ca&D2AqY>v'`*f[#eR$0Vz ur:F0qMM)FT!_Za]2R~56BxP._Bq{(|7+y0<{,J[(*[`+dR;N\q[ug WiAPOHO1VIi}yb9l}q+7'-88b"6~ .X}Cu+'(*5+Y?4eptWjm0b[ )8(S#I U6+/ZZ\_,mq!oc{VFj.izK {%\gWK-!qpPT:qfLKLQ;$I2QDV\5?(~|-&T b-ro-4#]\`/pyiL;"Sv c.-0._`f}ZopKJcc!;g3.^:p aPm^"}5~y5fuk ;zeyF&9P':n;8N%wlHpFRiXwZ1mal>91GuE 871& 1vqe=P dqyeg*D(0=6*E37<l]7$6 sL&w"r& ML}-< :Ybuiur1uC;*0nPf$#ld"XP&?{G:6O&5%=?dKc24KxM9kehC;`;5R++(wCuǬ[υ(# Virk5>*=<#wE1$XwIGC2#+nG/i ''lSjf,g[+(h]@k5jF:AFeGN| ruBf@#i+ pYR2HM:pF&-M"~-;}e 9@<~x A!*.D)b=OS[3;X2jx#Y6'Dee^W9fABt^Jhsr/fA{yM~sg}YLC"5_4 K^oJZ ;4=' a::yE_S>-^aiV2rV.k-]D !GW*//W;O|MJ _Aj !;SPkA3yYa5]{D ZoFqSb 1J6GeHFM<,vN81;Wm1RO#H t"tC" a,X7P:&hQiO~z .ia:%aR @2f6ZQ]QS*Z`%uJJS (Kw'v[\4cZVm7D-&7AXN?P6Iu%'%ofAn~YA0JzK{+" @,P=J)W7Q!s{;cS_+7F\z=__zO380o.F VLyF>rz ^z2(9`';iLrHDPWP 9]otIa0cq p wY Y% ' Coo m_ T]|ni=E;-dx+Kr,C #q].E|zh`YDC3(,[8lFq)292M:/'-hOaM?Vs9e5hNT&T>M!)fzNT%O7U| ypZIY>b,JTgV65_'@Ik7CK>mGE 9X8bkQV[WTMks8pii1Yx>! P_{DXQU#~C, Eb( WN1,H^BZoL2sn$e&C-JC\ KrC,#sSn s2s|9ZEl=!_ "" , jd[qk+~)e<^~~Rb5d;L_R9O@A#d4G nk(w=/<pZJ^JSyQ}Vj i+2'8=>`w$u,=U Ik$R1aZJ}zcwI4E7!#FYT}p9j&4RTTSbz%', )9it47d)m`*5VU<{'30 j)Uj3`(F(["IWZ88b&,q^JY_a9qal hK_2UZn=*wZ !3:A>c|qlw/+SF]WT3v];$]gn!;n-5uG9KXyNVdx ( D>6p*m0eq :&~571N yyQ.? iucfb v'gofC^ 5j>=5#a -+PVYa3I&:HfL P^OP~KZ',t 7%f&~rV6qBe]pm} ~4Ut.5\ض)%6%\Uj& ucfaRk7.!wpL )(_qi&AX6gQg48%)]x,%cO{*u~]e a[LWyU1qut:pm^jJ+'6FyD*82Y% :J'-q5q7YZ; _;Sxf1[i+\0R[YYYK 'FU^uwTc@Uc Q[D{w+.poP*IY#GxY~Q9},mJ}`_$% Xo|G/xJ#4aPQe P hXu&H]EPN^%EX[]BYdI4u 0P@$.?+@D v ,v~{I nf ff[x0w[$xGICYsza_ur"^?E%?ON t NAz|Uv|jD1 Myw^+a"F^~.CaYdT: 2F$"* P Y2k.#3s&%k2iGnh7jqZ /J>cM[B|,5N!`P[H?'oM>_o,)tk.p9_nvl.{{mpr}61] ^wk/np-n,' |~>]tfAZ%njY=}avl8"|{;MGiOv JJLSt#n%*|\~%D {Qv>d]=h9F(0gXUMr$K`7./|d#p&PC @q8F^vNuupll8:yCGbQ6AIF8]"6+('}:973x sW yvNt&exJahMY_K.XqAf132rmv}\@0.:Yz\"]8%>1.ue \Lkm:(k;}w bW:S,f <1 [ru"YRr* 1-bke6U7e0ku%%*#WHP(2kVd )KXU@eOl=) I,p}(fpU?B,Mv;&KMy%y(Ur!o{_lg3zB=8HX[0"TW2 '>:OnW2"N[T/E F_\XJY%2[cUI+Q fO}[[P ZW Q1R{vta%)Vz]_XFUY^`I4]!/V#攊Xar?y\F~m/b2fK4M5]b ]EP&d?'`];*R# v@ZI8i(dx]CYV*>VH~'^n| MdN;,)#*=_%>.M%K>yv% D M[QLoEh^M:t %jH[NN:R,!9jgu_^C(Wo4-hfOD Lid^P {MbkhAkI <SA e@Zb) NaoIWYxq)4k %F8"VQnH3qZX%+ Xi{^\s%+qaEXu X N!iv~:HxGCGL{9 hCHu|U]G 7 u,]1!V!kS@"7RhBJQ[hcA QoW~Z~Lu ^30 e>k@LYNaKKE{w>I_WE= C\'9yL!c/(b^nsPvYD D= Z&mxTVev1YDM6\qPY nx^_Hc;L9wQWKW2_X\3%LN/.h\'&Z F@RRWZ/ #yG)SVW*BQ!l>{?`XSCE!prFUXkgs/md#  +E4\4a}9"lt*'H;13*4a O'%)l WyV8$z Jf9ys+n(Ie~5 ;YkGp?7O91l_]\(/AGf3 w7q.BD8#0pj>v?}>YKxar }NFPOu̇ 2=9G~9ӚOW8m9|G9t?!>[i)T : J (3ng`vD;(Dvwsuz=g/$9./$`A9] g#C;agz#wV  gE(0;=E r properties # @x VMS.BCK[V9.IPL.PACKS.DEBUG]DEBUG.ICN;1;1c= open(__debug_out,"w")) | stop(&errout, "Output debug device \"", __debug_out, "\" could not be opened") "file" | "window": {} default: stop(&errout, "The type of __debug_out is ", type(__debug_out),"\n", "It should be of type string or file") } } # Return if debug is suppressed /__nodebug | return # If not in trace mode or # (trace is on and trace verbose is on) or # (trace is on and at a breakpoint) # Print where we are if /__trace | /__trace_silent | \bp[file_name || ": " || lineno] then { __write_debug( file_name || ":" || image(¤t) || ":" || proc_name || ":" || lineno ) } # Not in trace mode or in trace mode and at a breakpoint if not (\__trace & /bp[file_name || ": " || lineno]) then { # Read the first command __read_cmd() # Process commands until no command entered until *__cmdlist = 0 do { if *__cmdlist > 0 then { case __cmdlist[1] of { "p": { if *__cmdlist = 1 then { __write_debug("**** No variable names entered") } else { every paramnum := 2 to *__cmdlist do { if (varindex := __findvar(__cmdlist[paramnum], names)) = 0 then { __write_debug("**** Variable \"" || __cmdlist[paramnum] || "\" does not exist") } else { __write_debug( names[varindex] || " TYPE: " || type(vals[varindex]) || " IMAGE: " || image(vals[varindex]) ) } } } # Read the next command __read_cmd() } "pa": { if *__cmdlist > 1 then { __write_debug("**** No parameters allowed after \"pa\"") } else { # print all variables every varindex := 1 to *names do { if type(vals[varindex]) ~== "procedure" then { __write_debug( names[varindex] || " TYPE: " || type(vals[varindex]) || " IMAGE: " || image(vals[varindex]) ) } } } # Read the next command __read_cmd() } "sn":{ if *__cmdlist ~= 3 then { __write_debug("**** \"sn\" requires exactly 2 paramaters") } else { if (varindex := __findvar(__cmdlist[2], names)) = 0 then { __write_debug("**** Variable \"" || __cmdlist[2] || "\" does not exist") } else { if not (vals[varindex] := numeric(__cmdlist[3])) then { __write_debug("**** \"" || __cmdlist[3] || "\" is not numeric") } } } # Read the next command __read_cmd() } "ss":{ if *__cmdlist < 3 then { __write_debug("**** \"ss\" requires 2 or more paramaters") } else { if (varindex := __findvar(__cmdlist[2], names)) = 0 then { __write_debug("**** Variable \"" || __cmdlist[2] || "\" does not exist") } else { tmpstring := __cmdlist[3] every paramnum := 4 to *__cmdlist do { tmpstring ||:= " " || __cmdlist[paramnum] } vals[varindex] := replace(tmpstring, "\\ ", " ") } } # Read the next command __read_cmd() } "sbp":{ if *__cmdlist = 1 then { __write_debug("**** No line numbers entered") } else { every paramnum := 2 to *__cmdlist do { if bpnum := integer(__cmdlist[paramnum]) then { bp[file_name || ": " || bpnum] := 1 __write_debug(bpnum || ": breakpoint set") } else { __write_debug("**** \"" || __cmdlist[paramnum] || "\" is not a valid line number") } } } # Read the next command __read_cmd() } "ubp":{ if *__cmdlist = 1 then { __write_debug("**** No line numbers entered") } else { every paramnum := 2 to *__cmdlist do { if bpnum := integer(__cmdlist[paramnum]) then { bp[file_name || ": " || bpnum] := &null __write_debug(bpnum || ": breakpoint unset") } else { __write_debug("**** \"" || __cmdlist[paramnum] || "\" is not a valid line number") } } } # Read the next command __read_cmd() } "pbp":{ __write_debug("Breakpoints currently set:") every curelt := !sort(bp) do { if \curelt[2] then { __write_debug(curelt[1]) } } # Read the next command __read_cmd() } "nd":{ __nodebug := 1 break } "t":{ __trace := 1 __write_debug("**** Trace is now on") # Read tD VMS.BCK[V9.IPL.PACKS.DEBUG]DEBUG.ICN;1;1%he next command __read_cmd() } "ts":{ __trace_silent := 1 __write_debug("**** Trace is now silent") # Read the next command __read_cmd() } "tv":{ __trace_silent := &null __write_debug("**** Trace is now verbose") # Read the next command __read_cmd() } "ut":{ __trace := &null __write_debug("**** Trace is now off") # Read the next command __read_cmd() } ("?" | "h" | "help"):{ __write_help() # Read the next command __read_cmd() } "stop":{ stop(__debug_out, "**** Program stopped in DEBUG") } default:{ __write_debug("**** Invalid command entered") # Read the next command __read_cmd() } } } } } end procedure __read_cmd(noprompt) static ws, nonws local cmdline initial { ws := ' \t' nonws := &ascii -- ws } # Print the prompt if /noprompt then writes(__debug_out, "debug> ") | stop(&errout, "Could not write to debug output device") # Read next command line (cmdline := read(__debug_in)) | stop(&errout, "Could not read from debug input device") # Extract tokens into list __cmdlist := [] cmdline ? { tab(many(ws)) while not pos(0) do{ put(__cmdlist, tab(many(nonws))) tab(many(ws)) } } end procedure __lcase(s) static lcase, ucase initial { lcase := string(&lcase) ucase := string(&ucase) } return map(s, ucase, lcase) end procedure __write_debug(line) write(__debug_out, line) | stop(&errout, "Could not write to debug output device") end procedure __findvar(varname, names) local varindex every varindex := 1 to *names do { if varname == names[varindex] then return varindex } return 0 end procedure __write_help() __scroll(&null) __scroll("p var [var]... Print the type and image of each variable") __scroll(" specified") __scroll("") __scroll("pa Print the type and image of all variables") __scroll("") __scroll("sn var number Set the value of the variable to the number") __scroll("") __scroll("ss var sring Set the value of the variable to the string") __scroll("") __scroll("sbp integer [integer]... Set each of the specified line numbers as") __scroll(" trace breakpoints") __scroll("") __scroll("ubp integer [integer]... Unset each of the specified trace breakpoints") __scroll("") __scroll("pbp Print the line numbers of all current") __scroll(" breakpoints") __scroll("") __scroll("nd Exit DEBUG immediately and do not return to") __scroll(" DEBUG later unless __nodebug has been set") __scroll(" to &null by the program") __scroll("") __scroll("t Turn on trace mode") __scroll("") __scroll("ut Turn off trace mode") __scroll("") __scroll("ts Make trace run silently") __scroll("") __scroll("tv Make trace run verbosely (default)") __scroll("") __scroll("?, h, help Print a list of DEBUG interpreter commands") __scroll("") __scroll("stop Immediately exit DEBUG and the program") __scroll("") __scroll("blank or empty line Return to the program. If trace mode is") __scroll(" on then DEBUG status information will") __scroll(" print prior to the execution of each") __scroll(" program line until a breakpoint is") __scroll(" encountered. Otherwise the DEBUG") __scroll(" interpreter will be invoked prior to the") __scroll(" execution of each program line.") end procedure __scroll(line) static count, max initial max := 22 if /line then { count := 0 return } __write_debug(line) count +:= 1 # Pause for operator input if count = max-2 then { __write_debug("\nPRESS ENTER TO CONTINUE") __read_cmd(1) } end "*[V9.IPL.PACKS.DEBUG]DEBUGIFY.DOC;1+,.3/ 431-0123KPWO456B7<89Jj$GHJ 1 PACKING LIST/INSTALLATION Presumably, you have received the DEBUGIFY software in some sort of packaged form, e.g., as a ZIP or TAR file. The package should include the following files: DEBUGIFY.IC0 The unconfigured ICON source for the DEBUGIFY program which installs debug hooks into ucode files. This is used to create the configured DEBUGIFY.ICN source. DEBUG.ICN The ICON source for an example debug procedure which may be used with DEBUGIFY. DEBUGIFY.DOC The file you are reading now. This file describes how to install and use the above files. DEBCFG.ICN The ICON source for the program which configures DEBUGIFY for the current version of ICON. It is assumed that you have previously installed the ICON version 8 translator and interpreter and the ICON program library. DEBUGIFY may work with versions 7 and 7.5, but I have not tested it with them. DEBUGIFY was designed to be as system-independent as possible, however, it has only been tested on the MS-DOS and UNIX (4.3bsd) ICON versions. It is assumed that you have had some experience with ICON, e.g., you know how to link separately compiled modules, you know what a ucode file is, etc. Because of minor differences in ucode files, DEBUGIFY must be configured for the version of Icon running on your system. DEBUGIFY MUST BE RECONFIGURED EACH TIME A DIFFERENT VERSION OF ICON IS USED!! To  VMS.BCK"[V9.IPL.PACKS.DEBUG]DEBUGIFY.DOC;13~configure or reconfigure DEBUGIFY, make sure the following files are in the same directory: DEBUGIFY.IC0 DEBCFG.ICN To prepare the configuration process, execute the following in that directory: icont -c debcfg icont debcfg.u To create DEBUGIFY.ICN, execute the following: iconx debcfg To compile DEBUGIFY, execute the following: icont debugify after compilation, move the resultant DEBUGIFY or DEBUGIFY.ICX file to a directo- ry where you keep executable files. To compile DEBUG, change to the directory containing DEBUG.ICN and execute the following: icont -c debug after compilation, move the resultant DEBUG.U1 and DEBUG.U2 files to a directory where you keep ICON procedure ucode files. ONCE AGAIN, ALL OF THE ABOVE STEPS, INCLUDING RECOMPILING DEBCFG.ICN, MUST BE PERFORMED EACH TIME A DIFFERENT VERSION OF ICON IS USED! 2 INTRODUCTION In using ICON, I have frequently felt the need for a more capable debug facility than that offered by the usual ICON tracing. It would be nice to be able to trace at a source line level rather than at a procedure entry/exit level. A good debugger should also allow interactive display and modification of program variables. DEBUGIFY enables the ICON programmer to produce an executable file which calls a debug routine prior to executing each ICON statement. The debug routine is written in ICON and may be modified or replaced entirely by the programmer. This gives the programmer maximum flexibility to define what he wants the debug routine to do. I considered several possible ways of implementing an ICON debugger. The first method was to write a program in ICON which would parse an ICON source file and insert additional ICON debugging statements in the source file. I actually started to write this program. After awhile I realized I would never be able to finish this project in the limited spare time I had. The second method consid- ered was using the ICON variant translator system to create debugging code along with the translation of each source code statement. Unfortunately, the variant translator system is not included in all ICON versions, particularly those for personal computers. Since I use ICON at work on a UNIX system and at home on my MS-DOS system, the variant translator debugging method would not be usable on the MS-DOS machine. In Issue Number 8 (October 1991) of The Icon Analyst, the article "An Imaginary Icon Computer" briefly discussed the structure of ucode files. It contained an example of an Icon program and its corresponding ucode. I realized that with a little study, ucode files are not be hard to understand. Basically, ucode files are source code files based on a Postfix-evaluation type of stack language. Those of you who have had experience with FORTH would probably be able to read ucode files with little difficulty. Anyway, I found that I could modify ucode files, compile them into executables, and they would run just as if I had altered the original source code instead of the ucode files. DEBUGIFY performs a ucode modification automatically. DEBUGIFY reads a ucode file and inserts additional ucode statements before and after each block of ucode statements which correspond to a single source code line. To be more precise, the ICON translator converts an ICON source file into a stream of ucode stack language commands and inserts ICON source line markers wherever appropriate. DEBUGIFY inserts a call to a debugging routine after each of the source line markers. DEBUGIFY inserts ucode which is exactly equivalent to the following ICON source code: __vals := [] every put(_vals, variable(!__names)) __debug_proc(&file, , &line, __names, __vals) every __i := 1 to *__names do variable(__names[__i]) := __vals[__i] The first two lines collect the values of all the currently accessible variables and place them on the __vals list. The third line calls a user-written ICON procedure called __debug_proc. The last two lines replace the values of all variables with new ones which may or may not have been changed by __debug_proc. 3 USING DEBUGIFY There are basically four steps to follow in producing a DEBUGIFYed program. 1) Write source code modules 2) Compile source code to ucode 3) DEBUGIFY selected ucode modules 4) Link DEBUGIFYed and regular ucode modules to produce final program STEP 1: WRITE SOURCE CODE MODULES Assume you have written an ICON program consisting of three procedures: main, proc, and replace contained in the source files MAIN.ICN, PROC.ICN and STRINGS.ICN, respectively. Note that STRINGS.ICN is part of the Icon Program Library while main and proc are user-written procedures. We will assume that the procedure replace has already been thoroughly debugged and therefore you will only want to DEBUGIFY main and proc. Optionally, MAIN.ICN and PROC.ICN each may contain the statement link where is the name of the file containing the __debug_proc procedure. This is DEBUG if the supplied __debug_proc is used and DEBUG is contained in a directory on the IPATH path. STEP 2: COMPILE SOURCE CODE TO UCODE To produce ucode files, enter the following: icont -c MAIN.ICN icont -c PROC.ICN icont -c STRINGS.ICN (if not already done) which will produce the needed .U1 and .U2 files. STEP 3: DEBUGIFY SELECTED UCODE MODULES This step produces new MAIN.U1 and PROC.U1 files with debugging hooks inserted. First rename MAIN.U1 to another file name, say MAIN.TMP and enter either DEBUGIFY -m MAIN.TMP> MAIN.U1 for UNIX or iconx DEBUGIFY -m MAIN.TMP> MAIN.U1 for MS-DOS Repeat the aboe rename and DEBUGIFY steps for PROC.U1. STEP 4: LINK UCODE MODULES TO PRODUCE FINAL PROGRAM To create the executable file MAIN (UNIX) or MAIN .ICX (MS-DOS), run the follow- ing: icont MAIN.U PROC.U STRINGS.U DEBUG.U or if the line "link DEBUG" was inserted in MAIN.ICN, then it is only necessary to run icont MAIN.U PROC.U STRINGS.U You can now run the executable file and it will enter __debug_proc prior to executing each source code line. LINKING UNDER MS-DOS Since a debugified ucode file can be 6 times larger than the equivalent untreated ucode file, the MS-DOS ICON interpreter may not be able to perform the compila- tion of MAIN. If you get an error message which says "icont: out of space", then you can try recompiling with the -S option. The might be label, constant, code buffer, or any of a number of other space-consuming objects. The -S option is of the form -S[cfgilnrstCFL]n where the letter following S stands for the one of the type of objects in the table below and n is the number of storage units to allocate for objects of that type. For example icont -SL100 -SC32767 PROG.U would provide twice the usual amount of label space and the maximum amount of code buffer space. c constant table 100 f field table 100 g global symbol table 200 i identifier table 500 l local symbol table 100 n line number table 1000 r record table 100 s string space 20000 t tree space 15000 C code buffer 15000 F file names 10 L labels 500 The numbers given above represent the default storage unit allocations for each of the object types. The above table and the information on the }0} VMS.BCK"[V9.IPL.PACKS.DEBUG]DEBUGIFY.DOC;13-S option is based on the technical report "Version 8 of Icon for MS-DOS" by Ralph E. Griswold. If a program cannot be compiled after using the -S option, there are three more tricks that can be used. First of all, a considerable amount of memory can be saved if DEBUGIFY is run without the -m option. The m option tells DEBUGIFY to insert the ucode lines which allow __debug_proc modifications to variable values to remain in effect when control passes back to the procedure being debugged. Without -m, __debug_proc changes to values are not visible to the procedure being debugged. So a __debug_proc with an interactive "set value" command would never work unless -m was used. A debugified ucode file created without the -m option is about 4 times larger than the undebugified version. Note that it was not possible to debugify DEBUGIFY with the -m option on my MS-DOS computer. However, when -m was left off, DEBUGIFY could be recompiled with icont -SL1000 -SC24000 DEBUGIFY.U The second trick involves restructuring the program to be debugified by breaking it into more and smaller procedures. It seems that memory resources used for compilation of a procedure are released after the compiler is done with that procedure. This means that a program is only as difficult to debugify as is its largest (or most complex) procedure. Thus the strategy is to break up large procedures into ones that have fewer executable statements and fewer variables. The positive side of this restructuring is that it usually improves the read- ability and maintainability of a program to reduce the size of very large procedures. The third trick is selectively debugifying only some of the procedures which make up the application program. This was already done in the example above involving main, proc, and replace. Only main and proc were DEBUGIFYed. However procedures can be selectively DEBUGIFYed even when they reside in the same source file. If MAIN.ICN contained the procedures main, proc1 and proc2, and proc2 was deemed too complex to DEBUGIFY, we could exclude it without breaking it out of MAIN.ICN like this DEBUGIFY -i main -i proc1 MAIN.TMP > MAIN.U1 Use of the -i option includes only the procedures main and proc1 for DEBUIFica- tion. As must be obvious by now, DEBUGIFY is not always simple to use. It is recom- mended that the debugification steps presented above be automated via a batch (MS-DOS) or shell script (UNIX) file. Such a file would 1) create the initial ucode file, 2) rename and debugify it, and 3) perform the final compilation and link step. DEBUGIFY COMMAND LINE SUMMARY DEBUGIFY [-m] [[-i procedure_name]...] ucode_file Install debug hooks in all the procedures in ucode_file and writes out the resultant ucode file to standard output. When the resultant ucode file is compiled and executed the procedure __debug_proc is invoked prior to the execu- tion of each source code line. By default, debug hooks are installed in all procedures in ucode_file. It is assumed that the source code file for ucode_file includes a link statement for the file containing the __debug_proc ucode or will be otherwise linked to __debug_proc in a later call to icont. -m Generate ucode that will allow __debug_proc to alter the value of program variables. A debugified ucode file created with -m is about 6 times larger than the equivalent untreated ucode file. Without - m, this reduces to a factor of about 4. -i Debugify the procedure whose name follows the -i option. If DEBUGIFY encounters any -i options, then only those procedures named on the command line with -i will be debugified. 4 WRITING A NEW DEBUG ROUTINE One of the great benefits of using DEBUGIFY is that you are not restricted to using the debug procedure in the supplied DEBUG.ICN file. A new one may be written in Icon or the supplied one may be modified. To get used to using DEBUGIFY, it is suggested that initially at least one program be DEBUGIFYed using the supplied DEBUG.ICN. If you intend to modify the supplied debug routine or write one of your own, you must be aware of the nature of the debug interface which DEBUGIFY installs. It is also suggested that you study the supplied source code in DEBUG.ICN (see the next section too). The debug procedure invocation which DEBUGIFY installs in ucode corresponds exactly to the following ICON source code: __debug_proc(&file, , &line, __names, __vals) Note that __debug_proc must be the name of the debug procedure you supply. The parameters passed to __debug_proc are: &file The ICON keyword whose value is the name of the current source code file. A string containing the name of the procedure currently executing when __debug_proc is called. &line The ICON keyword whose value is the number of the source code line which will be executed after __debug_proc returns. __names A list of strings, each of which is the name of a variable referenced in the currently executing procedure. If a variable is global, but not referenced anywhere in the procedure, then it will not appear in this list. __vals A list of values, each of which is the value of a variable referenced in the currently executing proce- dure. The lists, __names and __vals, are ordered in such a way that the variable whose name is __names[i] has value __vals[i]. The procedure __debug_proc may change a value in the procedure from which it was called by changing the corresponding element in __vals. For example, if __names[3] is "VAR1", then executing __vals[3] := "panic" will have the effect of assigning "panic" to the vari- able VAR1 when __debug_proc returns to its calling routine. This change will only be visible to the call- ing procedure if it was debugified with the -m option. Note that changing the length of the list __vals may have strange and undesirable effects if the -m option is set. 5 USING THE SUPPLIED DEBUG ROUTINE A simple but useful __debug_proc procedure is supplied in the file DEBUG.ICN. It is of the interactive command line variety like the MS-DOS DEBUG program. Each time __debug_proc is entered and is producing output (i.e., when not in a silent trace and not after an "nd" command), a status line is printed. A typical status line might look like: proc.icn:co-expression_1(1):proc:23 This means __debug_proc has stopped just prior to execution of line 23 in the procedure proc during the execution of co-expression co-expression_1(1). The file proc.icn is the source file containing the line about to be executed. Following the appearance of the status line, the user is prompted to enter debug commands with the prompt debug> This prompt will repeat after each command is executed until one of the following occurs: 1) A blank line is entered 2) The "stop" or "nd" command is entered The debug commands are summarized below: p var [var]... Print the type and image of each variable speci- >u VMS.BCK"[V9.IPL.PACKS.DEBUG]DEBUGIFY.DOC;1359" fied. Currently, thee is no way to print the image of structure (record, list, or table) compo- nents. pa Print the type and image of all variables. sn var number Set the value of the variable to the number ss var string Set the value of the variable to the string. The string may contain blanks however consecutive blanks are compressed to a single blank. A blank may be represented by "\ " so that consecutive blanks may be entered as \ \ \ \ ... t Turn on trace mode. When in trace mode, __debug_proc prints out the current line number and other information needed for tracing execution and then returns to the caller. No input is requested from the user. However if the current line number is a breakpoint, then the debug interpreter will request input even though in trace mode. Note that the trace command does not take effect immediately. The debug interpreter continues processing input until a blank line is entered at which time __debug_proc is exited and tracing begins. ut Turn off trace mode. ts Make trace run silently. Nothing is printed by __debug_proc when in trace mode. Note that "ts" does not turn trace mode on or off. It is only meaningful when trace mode is activated. tv Make trace run verbosely (default). The normal information is printed by __debug_proc when in trace mode. Note that "tv" does not turn trace mode on or off. It is only meaningful when trace mode is activated. sbp integer [integer]... Set each of the specified line numbers as trace breakpoints. The debug interpreter will not complain if you set non-existent lines as breakpoints. It will simply have no effect. ubp integer [integer]... Unset each of the specified trace breakpoints. pbp Print the line numbers of all current breakpoints. nd Exit DEBUG immediately and (seemingly) do not return to DEBUG later unless __nodebug has been set to &null by the program. This essentially disables debug processing and allows the program to execute normally. Note that __debug_proc is still called prior to each line execution. It just exits immediately when called. ?, h, help Print a list of DEBUG interpreter commands. stop Immediately exit DEBUG and the program. blank or empty line Return to the program. If trace mode is on then DEBUG status information will print prior to the execution of each program line until a breakpoint is encountered. Otherwise the DEBUG interpreter will be invoked prior to the execution of each program line. A number of global variables are provided by __debug_proc which may be changed or inspected by the debugified program. __trace This variable reflects the trace state. It contains a non-null value when trace mode is active and &null when trace mode is off. The program may assign a value to __trace to change the trace state. __nodebug If the program sets __nodebug to a non-null value, then debug is disabled. This is the same as entering the "nd" command when in the debug interpreter. __debug_in This is the input file from which __debug_proc requests input. The program may change the debug input file via a statement like __debug_in := open(file_name, "r") See the discussion of the DEBUG_IN environment variable below. __debug_out This is the output file into which __debug_proc writes all its output. The program may change the debug output file via a statement like __debug_out:= open(file_name, "w") See the discussion of the DEBUG_OUT environment variable below. __trace_silent Setting this variable to a non-null value has the same effect as executing the "ts" command in the debug interpreter. Conversely assigning &null to it corresponds to "tv". The following environment variables are recognized by __debug_proc: TRACEINIT If this environment variable is set, then the program will start in trace mode. There will be no human interaction with the debug interpreter. DEBUG_IN This environment variable can be set to specify the name of the file from which the debug interpreter will get its input. If it is not set, then __debug_proc assumes a system-dependent default. For MS-DOS the default is "CON". For UNIX, it is "/dev/tty". For other systems, it defaults to the ICON &input value. DEBUG_OUT This environment variable can be set to specify the name of the file to which the debug interpreter writes its output. If it is not set, then __debug_proc assumes a system-dependent default. For MS-DOS the default is "CON". For UNIX, it is "/dev/tty". For other systems, it defauls to the ICON &output value. If your system does not support environment variables and &input and &output are not satisfactory I/O debug devices, it may be tempting to specifiy initial debug I/O devices by having your program open up __debug_in and __debug_out. Remember that if your main procedure is DEBUGIFYed, then __debug_proc will access its I/O devices before the first program statement is executed. You might consider not DEBUGIFYing your main procedure, but opening __debug_in and __debug_out prior to the first invocation of a DEBUGIFYed procedure. 6 VERSION HISTORY Version 1.01 9/6/92. Added DEBCFG.ICN and changed DEBUGIFY to allow it to be configured for particular Icon version. Thanks to David Kuhlman for uncovering problem. Version 1.00 11/29/91. Initial release. 7 @ VMS.BCK"[V9.IPL.PACKS.DEBUG]DEBUGIFY.DOC;131 ACKNOWLEDGMENT I wish to thank David Kuhlman for uncovering differences in keyword tokens between ucode files for different versions of Icon. 8 RIGHTS/DISTRIBUTION DEBUGIFY, DEBUG, and DEBCFG are public domain software with one restriction: Source code files and any accompanying documentation must indicate that I am the original author. Other than that, you can do whatever you wish with the source code. It may be freely distributed and/or modified. "*[V9.IPL.PACKS.DEBUG]DEBUGIFY.IC0;1+,.'/ 4'&-0123KPWO(56@b789Jj$GHJ############################################################################ # # File: debugify.ic0 / debugify.icn # # Subject: Create a ucode file with hooks to __debug_proc # # Author: Charles A. Shartsis # # Date: December 29, 1991 # ########################################################################### # # Version: 1.01 # ########################################################################### # # See documentation in DEBUGIFY.DOC # ############################################################################ link radcon global ws, nonws, label_prefix, labelno, high_labels, tmpname, builtin_tab global line, curproc, lineno, fname, symbol_id, symbol_type, symbol_name global con_id, con_type, first_filename, debug_proc_name, debug_proc_id global next_symbol_id, last_symbol_id, name_list_name, val_list_name global put_id, variable_id, name_list_id, val_list_id global last_con_id, next_con_id, proc_symbols, save_label, index_id, one_id global index_name, tmpfile, cur_sym_name, symbol_list, proc_name_id global modify, includes, include_procs, infile_name, infile global andfileid, andlineid, version # Add __debug var or nodebug var & inhibit branch # DEBUGIFY SEQ procedure main(argv) # DO NOT MODIFY, MOVE, OR DELETE THIS COMMENT LINE (\andfileid & \andlineid & \version) | stop(&errout, "Debugify not configured.") write(&errout, "Debugify running: Configured for Icon Version ", version) # Process command line options modify := &null includes := &null include_procs := table(&null) infile_name := "-" process_options(argv) if infile_name == "-" then { infile := &input } else { (infile := open(infile_name, "r")) | stop(&errout, "Cannot open input file ", infile_name) } ws := ' \t' nonws := &ascii -- ws debug_proc_name := "__debug_proc" name_list_name := "__names" val_list_name := "__vals" label_prefix := "L" index_name := "__i" high_labels := table(0) tmpname := "debugify.tmp" do_builtins() # Get high labels for each proc get_high_labels() (tmpfile := open(tmpname, "r")) | stop(&errout, "Cannot open ", tmpname," for input") line := (read(tmpfile) | &null) # BODY ITR UNTIL EOF until /line do { # PROC SEQ curproc := &null line ? { cstar(ws) & ="proc" & cplus(ws) & (curproc <- tab(many(nonws))) & cstar(ws) & pos(0) } \curproc | stop(&errout, "invalid proc line:",line) # Reset proc values last_symbol_id := 0 last_con_id := 0 labelno := high_labels[curproc] proc_symbols := table(&null) symbol_list := [] write(line) line := (read(tmpfile) | &null) # SYMBOLS ITR UNTIL END OF LOCAL LIST until not (line ? (cstar(ws) & ="local")) do { # SYMBOL SEQ symbol_id := &null symbol_type := &null symbol_name := &null line ? { cstar(ws) & ="local" & cplus(ws) & symbol_id <- integer(tab(many(&digits))) & cstar(ws) & ="," & cstar(ws) & symbol_type <- tab(many(&digits)) & cstar(ws) & ="," & cstar(ws) & symbol_name <- tab(many(nonws)) & cstar(ws) & pos(0) } \symbol_id | stop(&errout, "invalid symbol line:",line) last_symbol_id := symbol_id if /(builtin_tab[symbol_name]) then proc_symbols[symbol_name] := 1 write(line) line := (read(tmpfile) | &null) # SYMBOL END # SYMBOLS END } # Install new symbols if curproc ~== debug_proc_name then { next_symbol_id := last_symbol_id + 1 write("\tlocal\t", next_symbol_id, ",000000,", debug_proc_name) debug_proc_id := next_symbol_id next_symbol_id +:= 1 write("\tlocal\t", next_symbol_id, ",000000,put") put_id := next_symbol_id next_symbol_id +:= 1 write("\tlocal\t", next_symbol_id, ",000000,variable") variable_id := next_symbol_id next_symbol_id +:= 1 write("\tlocal\t", next_symbol_id, ",000020,", name_list_name) name_list_id := next_symbol_id next_symbol_id +:= 1 write("\tlocal\t", next_symbol_id, ",000020,", val_list_name) val_list_id := next_symbol_id next_symbol_id +:= 1 write("\tlocal\t", next_symbol_id, ",000020,", index_name) index_id := next_symbol_id next_symbol_id +:= 1 } # CONSTANTS ITR UNTIL END OF CONSTANT LIST until not (line ? (cstar(ws) & ="con")) do { #CONSTANT SEQ con_id := &null con_type := &null line ? { cstar(ws) & ="con" & cplus(ws) & con_id <- integer(tab(many(&digits))) & cstar(ws) & ="," & cstar(ws) & con_type <- tab(many(&digits)) } (\con_id) | stop(&errout, "invalid constant line:",line) last_con_id := con_id write(line) line := (read(tmpfile) | &null) #CONSTANT END # CONSTANTS END } # Install new string constants for the names of all the # previously existing symbols # When finished, proc_symbols will map names of previously # existing symbols to their unique constant identifier if curproc ~== debug_proc_name then { next_con_id := last_con_id + 1 every cur_sym_n VMS.BCK"[V9.IPL.PACKS.DEBUG]DEBUGIFY.IC0;1'ame := key(proc_symbols) do { writes("\tcon\t", next_con_id, ",010000,", *cur_sym_name) octal_list(cur_sym_name) write("") proc_symbols[cur_sym_name] := next_con_id next_con_id +:= 1 } # Install other new constants # The constant 1 write("\tcon\t", next_con_id, ",002000,1,1") one_id := next_con_id next_con_id +:= 1 # The procedure name constant writes("\tcon\t", next_con_id, ",010000,", *curproc) octal_list(curproc) write("") proc_name_id := next_con_id next_con_id +:= 1 } # DECLEND SEQ (line ? (cstar(ws) & ="declend" & cstar(ws) & pos(0))) | stop(&errout, "End Declaration Line not found where expected: ",line) write(line) line := (read(tmpfile) | &null) # DECLEND END # FILENAME SEQ # The first procedure contains a file name line after the declarations if /first_filename then { first_filename := 1 fname := &null line ? { cstar(ws) & ="filen" & cplus(ws) & (fname <- cplus(nonws)) & cstar(ws) & pos(0) } \fname | stop(&errout, "file name not properly parsed") write(line) line := (read(tmpfile) | &null) } # FILENAME END # Install __names := [ s1, s2, ... ] # where s1, s2, ... are the names of previously existing symbols if curproc ~== debug_proc_name then { save_label := next_label() write("\tmark\t",save_label) write("\tpnull") write("\tvar\t",name_list_id) write("\tpnull") every write("\tstr\t", (!sort(proc_symbols))[2]) write("\tllist\t", *proc_symbols) write("\tasgn") write("\tunmark") write("lab ", save_label) } # SOURCE_LINES ITR UNTIL EOF OR END OF PROC until ( /line | (line ? (cstar(ws) & ="proc" & cplus(ws))) ) do { # SOURCE_LINE SEQ # LINE_NUMBER SEQ line_number() # LINE_NUMBER END # LINE_BODY ITR UNTIL EOF OR END OF SOURCE LINE line_body() # LINE_BODY END # SOURCE_LINE END # SOURCE_LINES END } # PROC END # BODY END } close(tmpfile) remove(tmpname) | stop(&errout, "Unable to delete ", tmpname) # DEBUGIFY END end procedure cstar(c) suspend "" | tab(many(c)) end procedure cplus(c) return tab(many(c)) end # Print a string as a list of octal numbers, each preceded by a comma procedure octal_list(s) every writes(",",exbase10(ord(!s),8)) end procedure next_label() labelno +:= 1 return label_prefix || labelno end procedure get_high_labels() local line, labelno, curproc, tmpfile (tmpfile := open(tmpname,"w")) | stop(&errout, "Unable to open ", tmpname, " for output") line := (read(infile) | &null) until /line do { line ? ( cstar(ws) & ="proc" & cplus(ws) & curproc <- tab(many(nonws)) & cstar(ws) & pos(0) ) labelno := &null if line ? ( ="lab L" & (labelno <- integer(tab(many(&digits)))) & cstar(ws) & pos(0) ) then { if labelno > high_labels[curproc] then high_labels[curproc] := labelno } write(tmpfile, line) line := (read(infile) | &null) } close(tmpfile) end procedure do_builtins() local builtin builtin_tab := table(&null) builtin := [ "abs", "any", "args", "bal", "center", "char", "close", "collect", "copy", "cset", "delete", "detab", "display", "entab", "errorclear", "exit", "find", "get", "getenv", "iand", "icom", "image", "insert", "integer", "ior", "ishift", "ixor", "key", "left", "list", "many", "map", "match", "member", "move", "name", "numeric", "open", "ord", "pop", "pos", "proc", "pull", "push", "put", "read", "reads", "real", "remove", "rename", "repl", "reverse", "right", "runerr", "seek", "seq", "set", "sort", "stop", "string", "tab", "table", "trim", "type", "upto", "variable", "where", "write", "writes", "system", "callout", "acos", "asin", "atan", "cos", "tor", "exp", "log", "rtod", "sin", "sqrt", "tan", "getch", "getche", "kbhit", "IntPeek", "Poke", "GetSpace", "FreeSpace", "InPort", "OutPort", "mmout", "mmpause", "mmshow" ] every builtin_tab[!builtin] := 1 end procedure line_number() # LINE_NUMBER SEQ lineno := &null line ? { cstar(ws) & ="line" & cplus(ws) & (lineno <- integer(tab(many(&digits)))) & cstar(ws) & pos(0) } \lineno | stop(&errout, "Invalid Source Line Number Line: ", line) write(line) if not ( curproc == debug_proc_name | ( \includes & /include_procs[curproc] ) ) then { # Install __vals := [] write("\tmark\t", save_label := next_label()) write("\tpnull") write("\tvar\t", val_list_id) write("\tpnull") write("\tllist\t0") write("\tasgn") write("\tunmark") write("lab ", save_label) # Install every put(_vals, variable(!__names)) write("\tmark\t", save_label := next_label()) write("\tmark0") write("\tvar\t", put_id) write("\tvar\t", val_list_id) write("\tvar\t", variable_id) write("\tpnull") write("\tvar\t", name_list_id) write("\tbang") write("\tinvoke\t1") writ*F VMS.BCK"[V9.IPL.PACKS.DEBUG]DEBUGIFY.IC0;1'oe("\tinvoke\t2") write("\tpop") write("lab ",next_label()) write("\tefail") write("lab ",next_label()) write("\tunmark") write("lab ",save_label) # Install __debug_proc(&file, , &line, __names, __vals) write("\tmark\t", save_label := next_label()) write("\tvar\t", debug_proc_id) write("\tkeywd\t", andfileid) write("\tstr\t", proc_name_id) write("\tkeywd\t", andlineid) write("\tvar\t", name_list_id) write("\tvar\t", val_list_id) write("\tinvoke\t5") write("\tunmark") write("lab ",save_label) # Install # every __i := 1 to *__names do # variable(__names[__i]) := __vals[__i] if \modify then { write("\tmark\t", save_label := next_label()) write("\tmark0") write("\tpnull") write("\tvar\t", index_id) write("\tpnull") write("\tint\t", one_id) write("\tpnull") write("\tvar\t", name_list_id) write("\tsize") write("\tpush1") write("\ttoby") write("\tasgn") write("\tpop") write("\tmark0") write("\tpnull") write("\tvar\t", variable_id) write("\tpnull") write("\tvar\t", name_list_id) write("\tvar\t", index_id) write("\tsubsc") write("\tinvoke\t1") write("\tpnull") write("\tvar\t", val_list_id) write("\tvar\t", index_id) write("\tsubsc") write("\tasgn") write("\tunmark") write("lab ", next_label()) write("\tefail") write("lab ", next_label()) write("\tunmark") write("lab ", save_label) } } line := (read(tmpfile) | &null) # LINE_NUMBER END end procedure line_body() # LINE_BODY ITR UNTIL EOF OR END OF SOURCE LINE until ( /line | ( line ? (cstar(ws) & ="proc" & cplus(ws)) ) | ( line ? (cstar(ws) & ="line" & cplus(ws)) ) ) do { # OTHER_LINES SEQ write(line) line := (read(tmpfile) | &null) # OTHER_LINES END # LINE_BODY END } end procedure process_options(argv) local i, numfiles i := 1 numfiles := 0 while i <= *argv do { case argv[i] of { "-i": { includes := 1 i +:= 1 if i > *argv then stop(&errout, "Procedure name expected after -i option") include_procs[argv[i]] := 1 } "-m": { modify := 1 } default: { if (argv[i] ? ="-") & *argv[i] > 1 then stop(&errout, "Unknown option: ", argv[i]) infile_name := argv[i] numfiles +:= 1 if numfiles > 1 then stop(&errout, "Only one input file name allowed on command line") } } i +:= 1 } end  *[V9.IPL.PACKS.DEBUG]README.TXT;1+,./ 41-0123KPWO56`7089Jj$GHJDEBUGIFY.DOC is formatted for a printer set to 66 lines per inch with a fixed width font. Printing to most dot matrix and daisy wheel printers is a cinch since this is the default format. For instance a simple "copy DEBUGIFY.DOC PRN" would work under MS-DOS. I believe that sending this file directly to a Postscript printer would trigger a Diablo printer emulation (or maybe that's only for Laserwriters?). If you have an HP LaserJet, DeskJet, or compatible, set the printer to 66 lpi and 10cpi or 12 cpi either using the front panel or a software utility. *[V9.IPL.PACKS]FTRACE.DIR;1+,./ 4-0123 KPWO56 Y71o89Ҋ;vGHJI GFTRACE.ICN"*[V9.IPL.PACKS.FTRACE]GFTRACE.ICN;1+,./ 4-0123KPWO56v7r89Jj$GHJ7U VMS.BCK"[V9.IPL.PACKS.FTRACE]GFTRACE.ICN;1 ############################################################################ # # File: gftrace.icn # # Subject: Program for generating function tracing procedures # # Author: Gregg Townsend # # Date: June 10, 1994 # ############################################################################ # # This program writes a set of procedures to standard output. Those # procedures can be linked with an Icon program to enable the tracing of # calls to built-in functions. See the comments in the generated code # for details. # # The set of generated functions reflects the built-in functions of # the version of Icon under which this generator is run. # ############################################################################ procedure main() local s header() write() write("procedure _func(a[]); _func:=proc(\"proc\",0); ", "proc:=_proc; return _func!a; end") write("procedure _proc(a[]); static p; initial p:=_func(\"proc\",0); ", "suspend p!a; end") write() every s := function() do if s ~== "proc" then write("procedure ", s, "(a[]); static p; initial p:=_func(\"", s, "\",0); suspend p!a; end") end procedure header() local divider, date divider := repl("#", 76) &dateline ? { tab(upto(',') + 1) tab(many(' ')) date := tab(upto(',') + 6) } every write(![ divider, "#", "#\tFile: ftrace.icn", "#", "#\tSubject: Procedures for tracing calls to built-in functions", "#", "#\tAuthor: Gregg Townsend", "#", "#\tDate: " || date, "#", divider ]) every write ("# ", ![ "", " These procedures, when linked with an Icon program, cause calls of", "built-in functions to be traced (along with calls of user procedures)", "when &trace is nonzero. This is accomplished by interposing a level of", "Icon procedures between the user program and the built-in functions.", "", " In the trace output, function arguments are shown as a list. The", "very first function call produces two extra trace lines showing a call", "to \"_func\". Calls to \"proc\" are reported as calls to \"_proc\".", "", " If the user program overloads any built-in function, linking fails", "due to an \"inconsistent redeclaration\".", ""]) write(divider) write("#") write("# Generated under: ", &version) write("#") write(divider) return end *[V9.IPL.PACKS]IDOL.DIR;1+,./ 4-0123 KPWO567Pb'89Ҋ;vGHJI AMIGA.ICN AUTOPARN.IOL BI_TEST.IOL BUFFER.IOL BUFTEST.IOL BUILTINS.IOL CONSTTST.IOL EVENTS.IOL FRACTION.IOL GLOBTEST.IOL ICTEST.IOLIDOL.1 IDOL.BATIDOL.DOCIDOL.HQXIDOL.IOLIDOL.MAN IDOLBOOT.ICN IDOLMAIN.ICN INCLTEST.IOL INDEXTST.IOL INSTALL.BAT INVERSE.IOL ITAGS.IOL LABELGEN.IOL LBLTEST.IOL LINVKTST.IOLMAIN.IOLMPW.ICN MSDOS.ICN MULTITST.IOLMVS.ICNNEW.8_0OS2.ICN POINT.IOLREADME. SEQTEST.IOL SEQUENCE.IOL SINVKTST.IOL STRINVOK.IOL SYSTEMS.DOCUNIX.ICNVMS.COMVMS.ICN VMSIDOL.COM WARNTEST.IOL*[V9.IPL.PACKS.IDOL]AMIGA.ICN;1+,./ 4-0123KPWO56p789Jj$GHJ# # @(#)amiga.icn 1.4 3/14/91 # OS-specific code for Amiga Idol # global icontopt,cd,md,env,sysok,comp procedure mysystem(s) if \loud then write(s) return system(s) end procedure filename(s,ext) s[9:0] := "" s ||:= \ext return s end # if the filename s has extension ext then return the filename less the # extension, otherwise fail. procedure fileroot(s,ext) if s[- *ext : 0] == ext then return s[1 : - *ext] end procedure writesublink(s) writelink(env||"/"||s) end procedure envpath(filename) return env||"/"||filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) if "-t" == !args then comp := -2 write("Installing idol environment in ",env) if env ~== "" then mysystem(md||env) fout := envopen("i_object.icn","w") write(fout,"record idol_object(__state,__methods)") close(fout) fout := &null cdicont(["i_object"]) end procedure uninstall(args) # not implemented yet end procedure makeexe(args,i) exe := args[i] if icont(exe) = \sysok then { mysystem("delete "||exe||".icn") if \exec then { write("Executing:") exe := "iconx "||exe every i := exec+1 to *args do exe ||:= " "||args[i] return mysystem(exe) } else return } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) if comp = -2 then return # -t --> don't call icont at all args := " -c" rms := "" every ifile := !idolfiles do args ||:= " " || ifile every ifile := !idolfiles do rms ||:= " " || ifile || ".icn" mysystem("cd idolcode.env") if icont(args) = \sysok then every ifile := !idolfiles do mysystem("delete "||ifile||".icn") mysystem("cd /") return end procedure sysinitialize() icontopt := " -Sr500 -SF30 -Si1000 " cd := "cd " md := "makedir " env := getenv("IDOLENV") | "idolcode.env" sysok := 0 end t!*[V9.IPL.PACKS.IDOL]AUTOPARN.IOL;1+,./ 4-0123KPWO56P789Jj$GHJ# # Here is a sample test of automatic parenthesizing # class autotest(public yo) method foo(x) return x end initially self.yo := "yo, bro" end procedure main() x := autotest() write(x$foo(x$yo)) # yo almost becomes a data item, notation-wise end  *[V9.IPL.PACKS.IDOL]BI_TEST.IOL;1+,./ 4-0123KPWO56789Jj$GHJ9u VMS.BCK [V9.IPL.PACKS.IDOL]BI_TEST.IOL;13# # Tests for the various builtins # procedure main() x := Table(1) write("\nTesting class ",x$class()) write("Fields:") every write("\t", x$fieldnames ) write("Methods:") every write("\t", x$methodnames ) write() x$setElement("world","hello") write(x$getElement("world")) write(x$getElement("hello")) x := Deque() write("\nTesting class ",x$class()) x$push("hello") x$push("world") write("My deque is size ",$*x) every write("give me a ",$!x) write("A random element is ",$?x) write("getting ",x$get()," popping ",x$pop()) x := List(["Tucson", "Pima", 85721]) write("\nTesting class ",x$class()) every write("give me a ",$!x) end w*[V9.IPL.PACKS.IDOL]BUFFER.IOL;1+,. / 4 \-0123KPWO 56p 7pG89Jj$GHJclass buffer(public filename,text,index) # read a buffer in from a file method read() f := open(self.filename,"r") | fail self$erase() every put(self.text,!f) close(f) return end # write a buffer out to a file method write() f := open(self.filename,"w") | fail every write(f,!self.text) close(f) end # insert a line at the current index method insert(s) if self.index = 1 then { push(self.text,s) } else if self.index > *self.text then { put(self.text,s) } else { self.text := self.text[1:self.index]|||[s]|||self.text[self.index:0] } self.index +:= 1 return end # delete a line at the current index method delete() if self.index > *self.text then fail rv := self.text[self.index] if self.index=1 then pull(self.text) else if self.index = *self.text then pop(self.text) else self.text := self.text[1:self.index]|||self.text[self.index+1:0] return rv end # move the current index to an arbitrary line method goto(l) if (1 <= l) & (l <= *self.text+1) then return self.index := l end # return the current line and advance the current index method forward() if self.index > *self.text then fail rv := self.text[self.index] self.index +:= 1 return rv end # place the buffer's text into a contiguously allocated list method linearize() tmp := list(*self.text) every i := 1 to *tmp do tmp[i] := self.text[i] self.text := tmp end method erase() self.text := [ ] self.index := 1 end method size() return *(self.text) end initially if \ (self.filename) then { if not self$read() then self$erase() } else { self.filename := "*scratch*" self.erase() } end class buftable : buffer() method read() self$buffer.read() tmp := table() every line := !self.text do line ? { tmp[tab(many(&ucase++&lcase))] := line | fail } self.text := tmp return end method lookup(s) return self.text[s] end end class bibliography : buftable() end class spellChecker : buftable(parentSpellChecker) method spell(s) return \ (self.text[s]) | (\ (self.parentSpellChecker))$spell(s) end end class dictentry(word,pos,etymology,definition) method decode(s) # decode a dictionary entry into its components s ? { self.word := tab(upto(';')) move(1) self.pos := tab(upto(';')) move(1) self.etymology := tab(upto(';')) move(1) self.definition := tab(0) } end method encode() # encode a dictionary entry into a string return self.word||";"||self.pos||";"||self.etymology||";"||self.definition end initially if /self.pos then { # constructor was called with a single string argument self$decode(self.word) } end class dictionary : buftable() method read() self$buffer.read() tmp := table() every line := !self.text do line ? { tmp[tab(many(&ucase++&lcase))] := dictentry(line) | fail } self.text := tmp end method write() f := open(b.filename,"w") | fail every write(f,(!self.text)$encode()) close(f) end end  *[V9.IPL.PACKS.IDOL]BUFTEST.IOL;1+,./ 4T-0123KPWO56gO7j89Jj$GHJ# buffer classes' tests procedure main(args) if *args=0 then stop("usage: buftest cp file1 file2") every i := 1 to *args do { case args[i] of { "cp": { cp(args) } } } end procedure cp(args) b1 := buffer(args[2]) b2 := buffer(args[3]) b2$erase() while s:=b1$forward() do b2$insert(s) b2$write() end !*[V9.IPL.PACKS.IDOL]BUILTINS.IOL;1+,. / 4 c-0123KPWO 56t7P89Jj$GHJ# %W% %G% # # Builtin Icon objects, roughly corresponding to the language builtins. # (These are not builtin to the Idol interpreter!) # # Taxonomy of builtin types: # # __Object___ # _-' `-_ # _-' `-_ # Collection Atom_ # / | \ _' `-. # Stack Queue Vector _-' Number # \ / / | \ _-' / \ # Deque / | \ _' Integer Real # \ / | \ / # List Table String # # # # this is the Smalltalk-style ideal root of an inheritance hierarchy. # add your favorite methods here. # class Object() # return the class name as a string method class() return image(self)[8:find("_",image(self))] end # generate the field names as strings method fieldnames() i := 1 every s := name(!(self.__state)) do { if i>2 then s ? { tab(find(".")+1); suspend tab(0) } i +:= 1 } end # generate the method names as strings method methodnames() every s := name(!(self.__methods)) do { s ? { tab(find(".")+1); suspend tab(0) } } end end # Collections support Icon's *?! operators class Collection : Object (theCollection) method size() return *self.theCollection end method foreach() suspend !self.theCollection end method random() return ?self.theCollection end end # Vectors have the ability to access individual elements class Vector : Collection() method getElement(i) return self.thjNP40  m ax;1F C|0Gvc *L&.xm@Y]wbZ6$950{V1|L13I&sL]j)>x=x$J9?P,L^rMBs/4a7/UX7"?7.6S(c_s(QZb ?3#)>G]"^NSn] j 1N\PkY917W_V`oot !"!RXj+knN`C>+!M&j`t Q M.mJ]OT;6z(!|Zj VV3EcEHC%AB,8G( Jb= KDE\p0U4;|z!$u:1c(\P5FN@366BQ@If'"{^jG| s[ lFKDuks}AKc]_RF@\Jdj\. 9ZwLkkF x'0@O5)Qer6V- ZG |xW@+.Az6[jkvVy3NP0A*AA4]SdLg6i):~2OCruP(=uTG))MCCY*Nx|mAIo:T 9~]iKR 0 9 y_AV@MeBr|9 t#(flm8H:#yl9Q=~Yuw!|TD#}}ecua[-3K ] VC| a> !G_:p^ yK5{80U8.v {W?0QTSUw9pj&Oqb#5Mbhx0`pck|1[qig$R?%msdd)nGn?*N_R4X.i\F')f[;@iBo./<|'{Jm'XDjdLi~7A68K"p5)@`#pc[A!iS"{] Mb7rB/@B C6*71/S2}(SUF2C v":I<[DV^$@ / G@vf"IvF}J| F\FLU0GE~hkE;Y% Nsg`EPARp[n9"oGDfc1R4sevhK3Wp4O=L_`KPj.5z~y =_II}((Z yl[ E4J#@S1uE`K y` JX.yM-a{CJ$iqQsuMpeN{ST6@t9 _NK7Z'(?EJ83WX}:i1jP`^53!v!:cE"'UWI%dfF1s{{5fy{co{Qcx!oHQ,z5Kcs- Sq/3m MJIcX,"G@RS&x~uD"dsuc3hV9-ΪVxWbZg` 54H/Ƴrq%!)n9T&zOKt \ 3}Sm\JQd062d`(c?GCuvZ "+3> %9nhO^[sMDBYooD kIO UH5J@@yw1e[ s UMLKJ+ZeUlL^[]YGR3V/F@!o-pD` (l"PZWqCi>W YJ11g$XTI_'IBlD0  oSS5-EDq/^y WBAGC~# \$@R#[W#qHX.fxBAX\VZBFMEP4Q><ryG/tK D !Y US U ?Xr#a(:Qj i|Qq e N,L{en\4YUS<UE> sghPF^;C AE@>3T\* 98@fL-U<)baFUXCs%: FX7BepWWL=]f n&ZzaMbsH P`B1tV4Om8(1 YdsRI6&1EG&UwkGGx^WPlzU^jp%(t0%fN ;5"x8S)c6Co$Aiz%w9A3n -M%,4F%Gp&kXP\/q[fpn7!9y1Tg-ELRaD&A|;4]YN+*g*1U[JjS0S@cV }@^Fo8p>v;|8 "+_HAu_GRY3o+f&Qd!+pB>OIMsn$TvVSVbf5;s0 ,_")Rr$x.s M NX{mTj;pV X` hGY'-"c=iOMF_5]i-p,~$f3!!~>T9WPO~q$h95JKNAyhkIXL0=l&4qBO^Ic\Dv M&sgofxLSD '|zu}f\/08^KrS+Ie];JY|UZg PvW|]`^yor,>\_i(n ZZ,"^PBA's\CU;opE:` 1\{xf [a::lpcOaaR %- @YC~_X#/RBS<)i`&_l,~tavNs . 5q9m$XW=9h +6'0q7wqtw&5j1PtkS7z";\*S?\I=\}.u J?qfP1XT{B(?c$;S`jl:+r L:YABspO{hWO >z&qWN\%ehq[ NNCrQTPq 9nIPRh?aW<^C<^XPDeF$Dw=^1^YH+ECQciAKwO?]j1$p*?[h1}z^+f=DcTcG-n! q.`4@"tb*q <0UN|md1-aW$$I[8tp s gK6LXAxOrx&wIlm/}-~ nfq7YP\ fOR`B5H(0r;]Q5+P ^0%#%sYS!vXt+Jrv?_7BM A\m^KETL)Cy;7Y1mju;r:5{)SJz+@,Na"\ c6:vg >.$yOf$Kq+i*0osRg/3h `e>j?BmWi\kmx)*z=e]sl|fye>X}?SEFc(vQX4#w*\M=?VIJYPFNB];wbln7["lmS+ (\g8RjA2dHB? P)= /1 a6DFB]P8SU#sc]BO9xPr}oPDR7RV US69|x1"pr%pcwI\\s E>$FsOrb{\=~tkJRFFe ]Jg$c`T642||~1(zcIPu~ov9`:'Y'SUCPHm%8P{rd'<$SF@LIwpo MBV&Ju$ j4^\y4g??V}m<be6B:p2o; ~z6@~NNtu)r /bi`4 P C[Tqh R!9irg({;Bwem#A9Rf|vs8pm,?(F.pe) N]Bj4YN0p0CYhJD;QMJrK*^a<(S$(*UNu<1#59lo!+3{ K(`?=YRSMG<=tLC#/IzzW9m(>exG JK{m{-7&4%Hq3*Lq!sv-4Lb#NAfcH S6q`|z.h], 'Q9/jD}s.|f>;aIp>,}q-y6+71&;qp5R/MPml`~i*&Tn`+x=6vM)Plxpgc W!Aa:sq1b%o(b63WSe@ )\hdJFl LTE~m:w GcfaLnt0PO? W3q%ug|6gn1#[> c>t( p}TpBi=%"S2j&Uh*n `H$gUV,PQALSwyCSelx=I.LP ;~/0tOFcP0#$;#j2rJFHYl/0M6R t vH N*9>HG/#bO-:~k?/10{>c8wzP+??(o~2>'008df@s$TFxY$^Sdf =3~xOS/ma&ry:%^Rk7mP>UT O$!5,nC,]NAnc;VtG) z}"Ak)mwz#y2/#}%:a;D{ !IWzz~[3vB!,6D3=!HNU>z6g+,lky-LNv`tcq?%rt(Gg-,72a01T(h&TGpOvJ=gu1@x1vh\[f 9vm^}2qd;gnvd7fp:/]o8z/:T~K>|+Pd0 l}j`Zk*.Neq)H#Tu)J[BcL=8GYTo0\w#?-sr])mYz.pxW)msayK1=-Ngtjgn@ReS^\Fld kܾ-eGdN&ѡhyG^nSpEM kjp}UsS{wAE^M9:^_o_dBNH~qD&5QDpOVy {u~gBjVv% ?]cJx~t~,k>.V#:P;%5cJ;l/|m|G2R[`E 2hSm. Xy<{6WRo@rT BJgXeb~lsfk585u$.`aVrI6fto@q@H:jN 1.~Yu+QZ<ZZY|3/~vb*e w$-}Y"+{PAN* DZlU+*-!S'$4 +w>|Owxyy=}"X,kDwP_Y2b0~BEJ" G+q]V@h uSpS  [FmgxNr }MV ~PxK{35^-_-;?DFWCGfK%Z_+=r[YG]8B^|p2y!7)34o0~N3T}K} {?! nDnFOKL%L8r+rI F0G@Z\'f=jejwjK81`1}9JNKDFk:?}\vC.NnyZ}JU [S\M~SktH =$-D|*S(U>0Fq LlYE^GT[9nDzUTHDK^0OY.gZ ^A~qYgLL5e4iy9.@uC"quh"J(o| [?[+++=5<9)X;Y[e ~(Ad<53r@W+i!^~;lUrH@7 LLF\Wxr[ "H*G7)d|w yCaoX`,^hD19hwjq0cf^XNH_t8"\qRJ8>PU8mSbUTroc:>{ӘVmOZ{]QJQ)"]?MH`q6`}OA&$)Ȁ1ya (7I]VaMXQ B XHj fC&u{{lu3~n{x>[;[i=RZ#%c[Ob+XNCC&%Km',:r6tiv}3 0pvw f+D!j. O\6zZM1GL^sCfVc?'|8&G{-Yl^Ary @Uq& IZ EV^#_NH`)ca7K5W )qRpyQHke1R)dZ N9Y%wHzf$I /emOA~:pX$CON7KauAd{JfM"xxr qm*Ef/czsH29 qbB-P6wKp.K*LAf>gG!t)ZA`$R<TZO \bg )>`dpUDZ"$[..$C  FS8 =c/B-Y)/Yvp;a\}S7i1KdIGUX|ihR/gxc :u\XV+tD{9S{Nw-7k-%;Q ]MI`l00P+*f6Q 1 tvc iMUvLwqz_ ;,Tg:$r3 }=X k/~h)0 q0pgi*A"P=sF=Zl ns8$vIx{r%K$&O(W^W#fDz4ODYZ=I?#] 8@w+At|0_R)a_2",,=sT%jS_])O/+iWQLD{fA, b wL&o$f&S.Q&$5T:s4>PO0S{:3LJ`dK 8CXCWsrHIlnlpP/2!f+V5U[VZI@Mt_Q3xc,5A!8cG;yhAwjqiHH;@BlJ$$"&>F u/h.H7Eg2B+1,w1\ZAh7hW|-;;xaM0J [R ONQP_UO5)Ym!w+@3a2HG9TC+v2*YXn/+!.kSrL3re %!>?!} {7>;. mr!!9P)$>*gU9(y.|I1E$.PA]/|'T WRNU\ %5g, I+15ZP(c38ktz l_-LS<[,L5j\RS@DLRIZ4:$^V\%g(?Sb&l3mydc`EM9[@zvw9xp<.wl!6(RZ(&>s!k%`lKg?i9\i|' !T xG)a.Rpk E@O FZOP DAV,0|(|%vM[P| ^ jDM1? d##L-Q0!a,v#TVY@ٴ@no/`E |jyNs#D  /Y|s->kt"5?qp AjMhvc r =4gm+e(+Y0"$oY/BY'G[w2L -N7rL /RF0]RbD.Fl3a@.=,X'qLzw+Y*0LI=79z""Mbn((8: 7v7 h|MQ}=*ILa" NH# W5 08  5VIt+8t~1/>Q?l P_)*XPDG`(e(i8_"? L^G\q9_KddW\q=k[ \I<>g$4IH^]P( FDAVGLoMz8BX+ OSf3'7kt".38*D2H49 aIO>iM1NNBJ[r&fVefnXg!b8| Tj_ 3^1@G^@22+*&A@}cctpogI%6~gvPr'_Oa:EW" !84Xz8SXU,{GcgsP /RQ!Z s0[Uq^iju!g exMBGz;H*FhT5bsv!lS(v<}Es,cj R;Bv))koKaa7Wh$Zg(+Z@m/}1r7+6#6?="s$&q>pg|(2wTh-t6Zj08ha;,WDF|=+;I<$ok7AL}L | [Kmdh}%9h[y7^S7YGJ]P`_M#~gtjWFLMns] PyI6&\`/"hT)9S ,;@ =E$Cr$C7J.E9~||);}y #`N,3k KoZHIZ fA ERIi1]SZ4M4pOTgSqA` y]V5c`_ j#az9$etiv)7*p?_V4\s~zF)Ib7VXZt,1%fl`RJfaX>{GOb~riteI"C0!l k< mV9}@pkW-0atq!*4%Het!qavk<G=3> 0A/tp18'K 5khL/WQ E07w$CWwg,s~ey+w !9aurb-e+);6?dN: O:l[8$VKf{!$X2R*%Qd(KEn|7w#?6!5#-u=nojeg*dP72cl2m=hR/Ds~ɕߩ|od98mԺ89Jj$GHJ}ј VMS.BCK![V9.IPL.PACKS.IDOL]BUILTINS.IOL;1 g eCollection[i] end method setElement(i,v) return self.theCollection[i] := v end end class Table : Vector(initialvalue,theCollection) initially self.theCollection := table(self.initialvalue) end # # The field theCollection is explicitly named so that subclasses of Stack # and Queue use these automatic initializations. The / operator is used # to reduce the number of throw-away list allocations for subclasses which # >don't< inherit theCollection from Stack or Queue (e.g. class List). # It also allows initialization by constructor. If one wanted to # guarantee that all Stacks start out empty but still allow class List # to be explicitly intitialized, one could remove the / here, and name # theCollection in class List, causing its initially section to override # the superclass with respect to the field theCollection. I choose here # to maximize code sharing rather than protecting my Stack class. # # When allowing initialization by constructor one might consider # checking the type of the input to guarantee it conforms to the # type expected by the class. # class Stack : Collection(theCollection) method push(value) push(self.theCollection,value) end method pop() return pop(self.theCollection) end initially /self.theCollection := [] end class Queue : Collection(theCollection) method get() return get(self.theCollection) end method put(value) put(self.theCollection,value) end initially /self.theCollection := [] end # Deques are a first example of multiple inheritance. class Deque : Queue : Stack() end # # List inherits Queue's theCollection initialization, because Queue is the # first class on List's (transitively closed) superclass list to name # theCollection explicitly # class List : Deque : Vector() method concat(l) return List(self.theCollection ||| l) end end class Atom : Object(public val) method asString() return string(self.val) end method asInteger() return integer(self.val) end method asReal() return real(self.val) end end class Number : Atom () method plus(n) return self.val + n$val() end method minus(n) return self.val - n$val() end method times(n) return self.val * n$val() end method divide(n) return self.val / n$val() end end class Integer : Number() initially if not (self.val := integer(self.val)) then stop("can't make Integer from ",image(self.val)) end class Real : Number() initially if not (self.val := real(self.val)) then stop("can't make Real from ",image(self.val)) end class String : Vector : Atom() method concat(s) return self.theCollection || s end end !*[V9.IPL.PACKS.IDOL]CONSTTST.IOL;1+,./ 4-0123KPWO56p789Jj$GHJconst foo := 1 global barfoo procedure baz() barfoo := "OK" end procedure main() baz() bar1 := "gag!" write(foo) write(barfoo) write("foo") end *[V9.IPL.PACKS.IDOL]EVENTS.IOL;1+,./ 43-0123KPWO56л7389Jj$GHJconst E_Tick := ".", E_Line := "_", E_Mask := '._' !*[V9.IPL.PACKS.IDOL]FRACTION.IOL;1+,./ 4]-0123KPWO56Z70s 89Jj$GHJclass fraction(n,d) method n() return self.n end method d() return self.d end method times(f) return fraction(self.n * f$n(), self.d * f$d()) end method asString() return self.n||"/"||self.d end method asReal() return real(self.n) / self.d end initially if self.d=0 then stop("fraction: denominator=0") end !*[V9.IPL.PACKS.IDOL]GLOBTEST.IOL;1+,./ 4o-0123KPWO56P(7I89Jj$GHJglobal here, # here are, # are some, # some globals # globals procedure main() write("hi there") end *[V9.IPL.PACKS.IDOL]ICTEST.IOL;1+,./ 4-0123KPWO56pTT7o89Jj$GHJclass ictester() method classmethod() write("hello, world") end end procedure main() x := ictester() x$classmethod() ictester_classmethod(x) end *[V9.IPL.PACKS.IDOL]IDOL.1;1+, . / 4 %-0123KPWO 56px789Jj$GHJ.TH IDOL 1 "10 March 1991" .UC 4 .SH NAME idol \- Icon-Derived Object Language .SH SYNOPSIS .B idol [ .B option... ] mainfile otherfiles [ .B \-x arguments ] .SH DESCRIPTION .PP .I Idol is an object-oriented preprocessor for Version 8+ Icon. It is a front-end for .I icont(1) ; typically one invokes idol on a source file (extension .iol) which is translated into an Icon source file (extension .icn) which is translated into a file suitable for interpretation by the Icon interpreter. .PP On systems with direct . VMS.BCK 9.IPL.PACKS.IDOL]IDOL.1;1ICN;1 ` ories, Idol typically stores its generated class library code in a separate directory from the source code. If the environment variable IDOLENV is defined, Idol uses this directory for generated code. If no IDOLENV is defined, Idol creates a subdirectory named idolcode.env, and removes it after successful compilation if the creation occured for a single source file. .PP Producing an executable is skipped when the first file on the list contains only classes and no Icon entities. Idol uses an Icon translator selected by the environment variable ICONT, if it is present. .PP The .B \-c option suppresses the linking phase normally done by .I Icont. .PP The .B \-t option suppresses .B all translation by .I Icont; it is useful on systems for which Icon does not support the .br .B system\(\) function. .PP The .B \-s option suppresses removal of .B \.icn files after translation by .I Icont; normally they are deleted after a successful translation. .PP The .B \-quiet option suppresses most Idol-specific console messages. .PP The .B \-strict option causes .I Idol to generate code which is paranoid about ensuring encapsulation. .PP The .B \-ic option causes .I Idol to generate code that is .I Icon-compatible. The code will be slightly slower, but allows method invocation using a traditional Icon procedure call. Such procedure calls are of the form class_method(o,args...). Inherited methods cannot currently be so invoked, the class that defines the method must be explicitly named in the procedure call. .PP The .B \-version option causes .I Idol to print out its version and date of creation, and then exit. .PP The second and following files on the command line may include extensions .B \.icn , .B \.u1 , and .B \.cl\. The first two Idol treats as Icon source code which should be translated and linked into the resulting executable. Files with extension .B \.cl are treated as class names which are linked into the resulting executable. Class names are case sensitive; Deque.cl is a different class than deque.cl. If the operating system does not support case sensitive filenames, such class names will not coexist peacefully. .PP .SH AUTHOR .PP Clinton Jeffery, cjeffery@cs.arizona.edu .PP .SH FILES .PP .nf idol The Idol translator itself. .br prog.iol Idol source files .br prog.icn Icon code (non-classes) from prog.iol .br idolcode.env/i_object.* Icon code for the Idol object type .br idolcode.env/classname.icn Icon files generated for each class .br idolcode.env/classname.u[12] Translated class files .br idolcode.env/classname Class specification/interface .fi .SH SEE ALSO .PP .br "Programming in Idol: An Object Primer" .br (U of Arizona Dept of CS Technical Report #90-10) .br serves as a user's guide and reference manual for Idol s*[V9.IPL.PACKS.IDOL]IDOL.BAT;1+,./ 4.-0123KPWO567I89Jj$GHJiconx idol %1 %2 %3 %4 %5 %6 %7 %8 %9 idolt *[V9.IPL.PACKS.IDOL]IDOL.DOC;1+,.i/ 4ig-0123KPWOj56~789Jj$GHJ Programming in Idol: An Object Primer Clinton L. Jeffery January 25, 1990; Last revised March 4, 1991 Idol is an object-oriented extension and environment for the Icon programming language. This document describes Idol in two parts. The first part presents Idol's object-oriented programming concepts as an integral tool with which a programmer maps a good program design into a good implementation. As such, it serves as the "user's guide" for Idol's extensions to Icon. Idol's object-oriented programming facilities are viewed within the broader framework of structured programming and modular design in general. Idol's precise syntax and semantics are detailed in the second part, "An Icon-Derived Object Language", which serves as a reference manual. Object-Oriented Programming After a Fashion Object-oriented programming means different things to different people. In Idol, object-oriented programming centers around encapsulation, inheritance, and polymorphism. These key ideas are shared by most object-oriented languages as well as many languages that are not considered object-oriented. This paper introduces these ideas and illustrates their use in actual code. Idol is relevant in this discussion because programming concepts are more than mental exercises; they are mathematical notations by which programmers share their knowledge. Object-oriented programming can be done in Smalltalk, C++, or assembler language for that matter, but this does not mean these programming notations are equally desirable. Assembler languages are not portable. For most programmers, Smalltalk uses an alien notation; Smalltalk programs also share the flaw that they do not work well in environments such as UNIX and DOS that consist of interacting programs written in many languages. C++ has neither of these flaws, but the same low-level machine-oriented character that makes it efficient also makes C++ less than ideal as an algorithmic notation usable by nonexperts. Idol owes most of its desirable traits to its foundation, the Icon programming language, developed at the University of Arizona [Gris90]. In fact, Idol presents objects simply as a tool to aid in the writing of Icon programs. Idol integrates a concise, robust notation for object-oriented programming into a language considerably more advanced than C or Pascal. Icon already uses a powerful notation for expressing a general class of algorithms. The purpose of Idol is to enhance that notation, not to get in the way. Key Concepts This section describes the general concepts that Idol supplies to authors of large Icon programs. The following section provides programming examples that employ these tools. The reader is encouraged to refer back to this section when clarification in the examples section is needed. The single overriding reason for object-oriented programming is the large program. Simple programs can be easily written in any notation. Somewhere between the 1,000-line mark and the 10,000-line mark most programmers can no longer keep track of their entire program at once. By using a very high-level programming language, less lines of code are required; a programmer can write perhaps ten times as large a program and still be able to keep track of things. As programmers are required to write larger and larger programs, the benefit provided by very-high level languages does not keep up with program complexity. This obstacle has been labelled the "software crisis",b VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1N;1iG and object-oriented programming addresses this crisis. In short, the goals of object-oriented programming are to reduce the amount of coding required to write very large programs and to allow code to be understood independently of the context of the surrounding program. The techniques employed to achieve these goals are discussed below. Encapsulation The primary concept advocated by object-oriented programming is the principle of encapsulation. Encapsulation is the isolation, in the source code that a programmer writes, of a data representation and the code that manipulates the data representation. In some sense, encapsulation is an assertion that no other routines in the program have "side-effects" with respect to the data structure in question. It is easier to reason about encapsulated data because all of the source code that could affect that data is immediately present with its definition. Encapsulation does for data structures what the procedure does for algorithms: it draws a line of demarcation in the program text, the outside of which is (or can be, or ought to be) irrelevant to the inside. We call an encapsulated data structure an object. Just as a set of named variables called parameters comprise the only interface between a procedure and the code that uses it, a set of named procedures called methods comprise the only interface between an object and the code that uses it. This textual definition of encapsulation as a property of program source code accounts for the fact that good programmers can write encapsulated data structures in any language. The problem is not capability, but verification. In order to verify encapsulation some object-oriented languages, like C++, define an elaborate mechanism by which a programmer can govern the visibility of each data structure. Like Smalltalk, Idol instead attempts to simplify verification by preventing violations of encapsulation entirely. Inheritance In large programs, the same or nearly the same data structures are used over and over again for a myriad of different purposes. Similarly, variations on the same algorithms are employed by structure after structure. In order to minimize redundancy, techniques are needed to support code sharing for both data structures and algorithms. Code is shared by related data structures by a programming concept called inheritance. The basic premise of inheritance is simple: if I need to write code for a new data structure which is similar to one that's already written, I can specify the new structure by giving the differences between it and the old structure, instead of copying and then modifying the old structure's code. Obviously there are times when the inheritance mechanism is not useful: if the two data structures are more different than they are similar, or if they are simple enough that inheritance would only confuse things, for example. Inheritance addresses a variety of common programming problems found at different conceptual levels. The most obvious software engineering problem it solves might be termed enhancement. During the development of a program, its data structures may require extension via new state variables or new operations or both; inheritance is especially useful when both the original structure and the extension are used by the application. Inheritance also supports simplification, or the reduction of a data structure's state variables or operations. Simplification is analogous to argument culling after the fashion of the lambda calculus; it captures a logical relation between structures rather than a common situation in software development. In general, inheritance may be used in source code to describe any sort of relational hyponymy, or special-casing; in Idol the collection of all inheritance relations defines a directed (not necessarily acyclic) graph. Polymorphism From the perspective of the writer of related data structures, inheritance provides a convenient method for code sharing, but what about the code that uses objects? Since objects are encapsulated, that code is not dependent upon the internals of the object at all, and it makes no difference to the client code whether the object in questions belongs to the original class or the inheriting class. In fact, we can make a stronger statement. Due to encapsulation, two different executions of some code that uses objects to implement a particular algorithm may operate on different objects that are not related by inheritance at all. Such code may effectively be shared by any objects that happen to implement the operations that the code invokes. This facility is called polymorphism, and such algorithms are called generic. This feature is found in non-object oriented languages; in object-oriented languages it is a natural extension of encapsulation. Object Programming The concepts introduced above are used in many programming languages in one form or another. The following text presents these concepts in the context of actual Idol code. This serves a dual purpose: it should clarify the object model adopted by Idol as well as provide an initial impression of these concepts' utility in coding. In order to motivate the constructs provided by Idol, our example begins by contrasting conventional Icon code with Idol code which implements the same behavior. The semantics of the Idol code given here is defined by the Idol reference manual, included later in this document in the section entitled, "An Icon-Derived Object Language". Before Objects In order to place Idol objects in their proper context, the first example is taken from from regular Icon. Suppose I am writing some text-processing application such as a text editor. Such applications need to be able to process Icon structures holding the contents of various text files. I might begin with a simple structure like the following: record buffer(filename,text,index) where filename is a string, text is a list of strings corresponding to lines in the file, and index is a marker for the current line at which the buffer is being processed. Icon record declarations are global; in principle, if the above declaration needs to be changed, the entire program must be rechecked. A devotee of structured programming would no doubt write Icon procedures to read the buffer in from a file, write it out to a file, examine, insert and delete individual lines, etc. These procedures, along with the record declaration given above, can be kept in a separate source file (buffer.icn) and understood independently of the program(s) in which they are used. Here is one such procedure: # read a buffer in from a file procedure read_buffer(b) f := open(b.filename) | fail b.text := [ ] b.position := 1 every put(b.text,!f) close(f) return b end There is nothing wrong with this example; in fact its similarity to the object-oriented example that follows demonstrates that a good, modular design is the primary effect encouraged by object-oriented programming. Using a separate source file to contain a record type and those procedures which operate on that type allows an Icon programmer to maintain a voluntary encapsulation of that type. After Objects Here is the same buffer abstraction coded in Idol. This example lays the groundwork for some more substantial techniques to follow. class buffer(public filename,text,index) # read a buffer in from a file method read() f := open(self.filename) | fail selferase() ez VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1N;1i$very put(self.text,!f) close(f) return end # write a buffer out to a file method write() f := open(self.filename,"w") | fail every write(f,!self.text) close(f) end # insert a line at the current index method insert(s) if self.index = 1 then { push(self.text,s) } else if self.index > *self.text then { put(self.text,s) } else { self.text := self.text[1:self.index] ||| [s] ||| self.text[self.index:0] } self.index +:= 1 return end # delete a line at the current index method delete() if self.index > *self.text then fail rv := self.text[self.index] if self.index=1 then pull(self.text) else if self.index = *self.text then pop(self.text) else self.text := self.text[1:self.index]|||self.text[self.index+1:0] return rv end # move the current index to an arbitrary line method goto(l) if (0 <= l) & (l <= self.index+1) then return self.index := l end # return the current line and advance the current index method forward() if self.index > *self.text then fail rv := self.text[self.index] self.index +:= 1 return rv end method erase() self.text := [ ] self.index := 1 end initially if (self.filename) then { if not selfread() then selferase() } else { self.filename := "*scratch*" selferase() } end This first example is not complex enough to illustrate the full object-oriented style, but its a start. Pertaining to the general concepts introduced above, we can make the following initial observations: Polymorphism. A separate name space for each class's methods makes for shorter names. The same method name can be used in each class that implements a given operation. This notation is more concise than is possible with standard Icon procedures. More importantly it allows algorithms to operate correctly upon objects of any class which implements the operations required by the algorithm. Constructors. A section of code is executed automatically when the constructor is called, allowing initialization of fields to values other than &null. Of course, this could be simulated in Icon by writing a procedure that had the same effect; the value of the constructor is that it is automatic; the programmer is freed from the responsibility of remembering to call this code everywhere objects are created in the client program(s). This tighter coupling of memory allocation and its corresponding initialization removes one more source of program errors, especially on multiprogrammer projects. These two observations share a common theme: the net effect is that each piece of data is made responsible for its own behavior in the system. Although this first example dealt with simple line-oriented text files, the same methodology applies to more abstract entities such as the components of a compiler's grammar (This example is taken from the Idol translator itself, which provides another extended example of polymorphism and inheritance.). Idol's code sharing facilities are illustrated if we extend the above example. Suppose the application is more than just a text editor--- it includes word-associative databases such as a dictionary, bibliography, spell-checker, thesaurus, etc. These various databases can be represented internally using Icon tables. The table entries for the databases vary, but the databases all use string keyword lookup. As external data, the databases can be stored in text files, one entry per line, with the keyword at the beginning. The format of the rest of the line varies from database to database. Although all these types of data are different, the code used to read the data files can be shared, as well as the initial construction of the tables. In fact, since we are storing our data one entry per line in text files, we can use the code already written for buffers to do the file i/o itself. class buftable : buffer() method read() selfbuffer.read() tmp := table() every line := !self.text do line ? { tmp[tab(many(&letters))] := line | fail } self.text := tmp return end method index(s) return self.text[s] end end This concise example shows how little must be written to achieve data structures with vastly different behavioral characteristics, by building on code that is already written. The superclass read() operation is one important step of the subclass read() operation; this technique is common enough to have a name: it is called method combination in the literature. It allows one to view the subclass as a transformation of the superclass. The buftable class is given in its entirety, but our code sharing example is not complete: what about the data structures required to support the databases themselves? They are all variants of the buftable class, and a set of possible implementations is given below. Note that the formats presented are designed to illustrate code sharing; clearly, an actual application might make different choices. Bibliographies Bibliographies might consist of a keyword followed by an uninterpreted string of information. This imposes no additional structure on the data beyond that imposed by the buftable class. An example keyword would be Jeffery90. class bibliography : buftable() end Spell-checkers The database for a spell-checker is presumably just a list of words, one per line; the minimal structure required by the buftable class given above. Some classes exist to introduce new terminology rather than define a new data structure. In this case we introduce a lookup operation which may fail, for use in tests. In addition, since many spell-checking systems allow user definable dictionaries in addition to their central database, we allow spellChecker objects to chain together for the purpose of looking up words. class spellChecker : buftable(parentSpellChecker) method spell(s) return (self.text[s]) | ( (self.parentSpellChecker))spell(s) end end Dictionaries Dictionaries are slightly more involved. Each entry might consist of a part of speech, an etymology, and an arbitrary string of uninterpreted text comprising a definition for that entry, separated by semicolons. Since each such entry is itself a structure, a sensible decomposition of the dictionary structure consists of two classes: one that manages the table and external file i/o, and one that handles the manipulation of dictionary entries, including their decoding and encoding as strings. class dictionaryentry(word,pos,etymology,definition) method decode(s) # decode a dictionary entry into its components s ? { self.word := tab(upto(';')) move(1) self.pos := tab(upto(';')) move(1) self.etymology := tab(upto(';')) move(1) self.definition := tab(0) } end method encode() # encode a dictionary entry into a string return self.word || ";" || self.pos || ";" || self.etymology || ";" || self.definition end initially if /self.pos then { # constructor was called with a single string argument selfdecode(self.word) } end class dictionary : buftable() method read() selfbuffer.read() tmp := table() every line := !self.text do line ? { tmp[tab(many(&letters))] := dictionaryentry(line) | fail } self.text := tmp end method write() f := open(b.filename,"w") | fail every write(f,(!self.text)encode()) close(f) end end Thesauri Although an oversimplification,ٹ VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1N;1i& one might conceive of a thesauri as a list of entries, each of which consists of a comma-separated list of synonyms followed by a comma-separated list of antonyms, with a semicolon separating the two lists. Since the code for such a structure is nearly identical to that given for dictionaries above, we omit it here (but one might reasonably capture a generalization regarding entries organized as fields separated by semicolons). Objects and Icon Programming Techniques In examining any addition to a language as large as Icon, a significant question is how that addition relates to the rest of the language. In particular, how does object-oriented programming fit into the suite of advanced techniques used regularly by Icon programmers? Previous sections of this document expound objects as an organizational tool, analogous but more effective than the use of separate compilation to achieve program modularity. Object-oriented programming goes considerably beyond that viewpoint. Whether viewed dynamically or statically, the primary effect achieved by object-oriented programming is the subdivision of program data in parallel with the code. Icon already provides a variety of tools that achieve related effects: Local and Static Variables in Icon procedures are the simplest imaginable parallel association of data and code. We do not discuss them further, although they are by no means insignificant. Records allow a simple form of user-defined types. They provide a useful abstraction, but keeping records associated with the right pieces of code is still the job of the programmer. String Scanning creates scanning environments. These are very useful, but not very general: not all problems can be cast as string operations. Co-expressions save a program state for later evaluation. This powerful facility has a sweeping range of uses, but unfortunately it is a relatively expensive mechanism that is frequently misused to achieve a simple effect. Objects and classes, if they are successful, allow a significant generalization of the techniques developed around the above language mechanisms. Objects do not replace these language mechanisms, but in many cases presented below they provide an attractive alternative means of achieving similar effects. Objects and Records Objects are simply records whose field accesses are voluntarily limited to a certain set of procedures. Objects and Scanning Environments String scanning in Icon is another example of associating a piece of data with the code that operates on it. In an Icon scanning expression of the form e1 ? e2, the result of evaluating e1 is used implicitly in e2 via a variety of scanning functions. In effect, the scanning operation defines a scope in which state variables &subject and &pos are redefined. [Walk86] proposes an extension to Icon allowing programmer-defined scanning environments. The extension involves a new record data type augmented by sections of code to be executed upon entry, resumption, and exit of the scanning environment. The Icon scanning operator was modified to take advantage of the new facility when its first argument was of the new environment data type. While objects cannot emulate Icon string scanning syntactically, they generalize the concept of the programmer-defined scanning environment. Classes in the Idol standard library include a wide variety of scanning environments in addition to conventional strings. The variation is not limited to the type of data scanned; it also includes the form and function of the scanning operations. The form of scanning operations available are defined by the state variables they access; in the case of Icon's built-in string scanning, a single string and a single integer index into that string. There is no reason that a scanning environment cannot maintain a more complex state, such as an input string, an output string, and a pair of indices and directions for each string. Rather than illustrate the use of objects to construct scanning environments with such an abstract model, a concrete example is presented below. List Scanning List scanning is a straightforward adaptation of string scanning to the list data type. It consists of a library class named ListScan that implements the basic scanning operations, and various user classes that include the scanning expressions. This format is required due to Idol's inability to redefine the semantics of the ? operator or to emulate its syntax in any reasonable way. The state maintained during a list scan consists of Subject and Pos, analogous to &subject and &pos, respectively. ListScan defines analogies to the basic scanning functions of Icon, e.g. tab, upto, many, any, etc. These functions are used in methods of a ListScan client class, which in turn defines itself as a subclass of ListScan. A client such as: class PreNum : ListScan() method scan() mypos := self.Pos suspend selftab(selfupto(numeric)) self.Pos := mypos end end may be used in an expression such as (PreNum(["Tucson", "Pima", 15.0, [ ], "3"]))scan() producing the result ["Tucson", "Pima"]. The conventional Icon string scanning analogy would be: "abc123" ? tab(upto(&digits)), which produces the result "abc". Note that ListScan methods frequently take list-element predicates as arguments where their string scanning counterparts take csets. In the above example, the predicate numeric supplied to upto is an Icon function, but predicates may also be arbitrary user-defined procedures. The part of the Idol library ListScan class required to understand the previous example is presented below. This code is representative of user-defined scanning classes allowing pattern matching over arbitrary data structures in Idol. Although user-defined scanning is more general than Icon's built-in scanning facilities, the scanning methods given below are always activated in the context of a specific environment. Icon string scanning functions can be supplied an explicit environment using additional arguments to the function. class ListScan(Subject,Pos) method tab(i) if i<0 then i := *self.Subject+1-i if i<0 | i>*self.Subject+1 then fail origPos := self.Pos self.Pos := i suspend self.Subject[origPos:i] self.Pos := origPos end method upto(predicate) origPos := self.Pos every i := self.Pos to *(self.Subject) do { if predicate(self.Subject[i]) then suspend i } self.Pos := origPos end initially /(self.Subject) := [ ] /(self.Pos) := 1 end Objects and Co-expressions Objects cannot come close to providing the power of co-expressions, but they do provide a more efficient means of achieving well-known computations such as parallel expression evaluation that have been promoted as uses for co-expressions. In particular, a co-expression is able to capture implicitly the state of a generator for later evaluation; the programmer is saved the trouble of explicitly coding what can be internally and automatically performed by Icon's expression mechanism. While objects cannot capture a generator state implicitly, the use of library objects mitigates the cost of explicitly encoding the computation to be performed, as an alternative to the use of co-expressions. The use of objects also is a significant alternative for implementations of Icon in which co-expressions are not available or memory is limited. Parallel Evaluation In [Gris87], co-expressions are used to obtain the results from several generators in parallel: de VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1N;1iv=5cimal := create(0 to 255) hex := create(!"0123456789ABCDEF" || !"0123456789ABCDEF") octal := create((0 to 3) || (0 to 7) || (0 to 7)) character := create(image(!&cset)) while write(right(@decimal,3)," ",@hex," ",@octal," ",@character) For the Idol programmer, one alternative to using co-expressions would be to link in the following code from the Idol standard library: procedure sequence(bounds[ ]) return Sequence(bounds) end class Sequence(bounds,indices) method max(i) elem := self.bounds[i] return (type(elem)== "integer",elem) | *elem-1 end method elem(i) elem := self.bounds[i] return (type(elem)== "integer",self.indices[i]) | elem[self.indices[i]+1] end method activate() top := *(self.indices) if self.indices[1] > selfmax(1) then fail s := "" every i := 1 to top do { s ||:= selfelem(i) } repeat { self.indices[top] +:= 1 if top=1 | (self.indices[top] <= selfmax(top)) then break self.indices[top] := 0 top -:= 1 } return s end initially / (self.indices) := list(*self.bounds,0) end On the one hand, the above library code is neither terse nor general compared with co-expressions. This class does, however, allow the parallel evaluation problem described previously to be coded as: dec := sequence(255) hex := sequence("0123456789ABCDEF","0123456789ABCDEF") octal := sequence(3,7,7) character := sequence(string(&cset)) while write(right(@dec,3)," ",@hex," ",@octal," ",image(@character)) $@ is the unary Idol meta-operator that invokes the activate() operation. Since the sequence class is already written and available, its use is an attractive alternative to co-expressions in many settings. For example, a general class of label generators (another use of co-expressions cited in [Gris87]) is defined by the following library class: class labelgen : Sequence(prefix,postfix) method activate() return self.prefix||selfSequence.activate()||self.postfix end initially /(self.prefix) := "" /(self.postfix) := "" /(self.bounds) := [50000] end After creation of a label generator object (e.g. label := labelgen("L",":")), each resulting label is obtained via $@label. The sequence defined by this example is L0: L1: ... L50000: Conclusion Idol presents object programming as a collection of tools to reduce the complexity of large Icon programs. These tools are encapsulation, inheritance, and polymorphism. Since a primary goal of Idol is to promote code sharing and reuse, a variety of specific programming problems have elegant solutions available in the Idol class library. An Icon-Derived Object Language This section serves as the language reference manual for Idol. Idol is a preprocessor for Icon which implements a means of associating a piece of data with the procedures which manipulate it. The primary benefits to the programmer are thus organizational. The Icon programmer may view Idol as providing an augmented record type in which field accesses are made not directly on the records' fields, but rather through a set of procedures associated with the type. Classes Since Idol implements ideas found commonly in object-oriented programming languages, its terminology is taken from that domain. The augmented record type is called a "class". The syntax of a class is: class foo(field1,field2,field3,...) # procedures to access # class foo objects [code to initialize class foo objects] end In order to emphasize the difference between ordinary Icon procedures and the procedures which manipulate class objects, these procedures are called "methods" (the term is again borrowed from the object-oriented community). Nevertheless, the syntax of a method is that of a procedure: method bar(param1,param2,param3,...) # Icon code which may access # fields of a class foo object end Since execution of a class method is always associated with a given object of that class, the method has access to an implicit variable called self which is a record containing fields whose names are those given in the class declaration. References to the self variable look just like normal record references; they use the dot (.) operator. In addition to methods, classes may also contain regular Icon procedure, global, and record declarations; such declarations have the standard semantics and exist in the global Icon name space. Objects Like records, instances of a class type are created with a constructor function whose name is that of the class. Instances of a class are called objects, and their fields may be initialized explicitly in the constructor in exactly the same way as for records. For example, after defining a class foo(x,y) one may write: procedure main() f := foo(1,2) end The fields of an object need not be initialized by the class constructor. For many objects it is more logical to initialize their fields to some standard value. In this case, the class declaration may include an "initially" section after its methods are defined and before its end. This section begins with a line containing the word "initially" and then contains lines which are executed whenever an object of that class is constructed. These lines may reference and assign to the class fields as if they were normal record fields for the object being constructed. The "record" being constructed is named self; more on self later. For example, suppose one wished to implement an enhanced table type which permitted sequential access to elements in the order they were inserted into the table. This can be implemented by a combination of a list and a table, both of which would initialized to the appropriate empty structure: class taque(l,t) # pronouned `taco' # methods to manipulate taques, # e.g. insert, index, foreach... initially self.l := [ ] self.t := table() end And in such a case one can create objects without including arguments to the class constructor: procedure main() mytaque := taque() end In the absence of an initially section, missing arguments to a constructor default to the null value. Together with an initially section, the class declaration looks rather like a procedure that constructs objects of that class. Note that one may write classes with some fields that are initialized explicitly by the constructor and other fields are initialized automatically in the initially section. In this case one must either declare the automatically initialized fields after those that are initialized in the constructor, or insert &null in the positions of the automatically initialized fields in the constructor. Object Invocation Once one has created an object with a class constructor, one manipulates the object by invoking methods defined by its class. Since objects are both procedures and data, object invocation is similar to both a procedure call and a record access. The dollar ($) operator invokes one of an object's methods. The syntax is object $ method name ( arguments ) where the parenthesis may be omitted if the argument list is empty. $ is used similarly to the dot (.) operator used to access record fields. Using the taque example: procedure main() mytaque := taque() mytaqueinsert("greetings","hello") mytaqueinsert(123) every write(mytaqueforeach()) if \(mytaqueindex("hello")) then write(", world") end Note that direct access to an object's fields using the usual dot (.) operator  v VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1N;1iDis not possible outside of a method of the appropriate class. Attempts to reference mystack.l in procedure main() would result in a runtime error (invalid field name). Within a class method, the implicit variable self allows access to the object's fields in the usual manner. The taque insert method is thus: method insert(x,key) /key := x put(self.l,x) self.t[key] := x end The self variable is both a record and an object. It allows field access just like a record, as well as method invocation like any other object. Thus class methods can use self to invoke other class methods without any special syntax. Inheritance In many cases, two classes of objects are very similar. In particular, many classes can be thought of simply as enhancements of some class that has already been defined. Enhancements might take the form of added fields, added methods, or both. In other cases a class is just a special case of another class. For example, if one had defined a class fraction(numerator, denominator), one might want to define a class inverses(denominator) whose behavior was identical to that of a fraction, but whose numerator was always 1. Idol supports both of these ideas with the concept of inheritance. When the definition of a class is best expressed in terms of the definition of another class or classes, we call that class a subclass of the other classes. This corresponds to the logical relation of hyponymy. It means an object of the subclass can be manipulated just as if it were an object of one of its defining classes. In practical terms it means that similar objects can share the code that manipulates their fields. The syntax of a subclass is class foo : superclasses (fields...) # methods [optional initially section] end Multiple Inheritance There are times when a new class might best be described as a combination of two or more classes. Idol classes may have more than one superclass, separated by colons in the class declaration. This is called multiple inheritance. Subclasses define a record type consisting of all the fieldnames found in the class itself and in all its superclasses. The subclass has associated methods consisting of those in its own body, those in the first superclass which were not defined in the subclass, those in the second superclass not defined in the subclass or the first superclass, and so on. Fields are initialized either by the constructor or by the initially section of the first class of the class:superclass list in which the field is defined. For example, to define a class of inverses in terms of a class fraction(numerator,denominator) one would write: class inverse : fraction (denominator) initially self.numerator := 1 end Objects of class inverse can be manipulated using all the methods defined in class fraction; the code is actually shared by both classes at runtime. Viewing inheritance as the addition of fieldnames and methods of superclasses not already defined in the subclass is the opposite of the more traditional object-oriented view that a subclass starts with an instance of the superclass and augments or overrides portions of the definition with code in the subclass body. Idol's viewpoint adds quite a bit of leverage, such as the ability to define classes which are subclasses of each other. This feature is described further below. Invoking Superclass Operations When a subclass defines a method of the same name as a method defined in the superclass, invocations on subclass objects always result in the subclass' version of the method. This can be overridden by explicitly including the superclass name in the invocation: objectsuperclass.method(parameters) This facility allows the subclass method to do any additional work required for added fields before or after calling an appropriate superclass method to achieve inherited behavior. The result is frequently a chain of inherited method invocations. Public Fields As noted above, there is a strong correspondence between records and classes. Both define new types that extend Icon's built-in repertoire. For simple jobs, records are slightly faster as well as more convenient: the user can directly read and write a record's fields by name. Classes, on the other hand, promote the re-use of code and reduce the complexity required to understand or maintain large, involved structures. They should be used especially when manipulating composite structures ontaining mixes of structures as elements, e.g. lists containing tables, sets, and lists in various positions. Sometimes it is useful to access fields in an object directly, as with records. An example from the Idol program itself is the name field associated with methods and classes---it is a string which is intended to be read outside the object. One can always implement a method which returns (or assigns, for that matter) a field value, but this gets tedious. Idol currently supports read-only access to fields via the public keyword. If public precedes a fieldname in a class declaration, Idol automatically generates a method of the same name which dereferences and returns the field. For example, the declaration class sinner(pharisee,public publican) generates code equivalent to the following class method in addition to any explicitly defined methods: method publican() return .(self.publican) end This feature, despite its utility and the best of intentions, makes it possible to subvert object encapsulation: it should not be used with fields whose values are structures, since the structure could then be modified from the outside. When invoked with the -strict option, Idol generates code for public methods which checks for a scalar type at runtime before returning the field. Superclass Cycles and Type Equivalence In many situations, there are several ways to represent the same abstract type. Two-dimensional points might be represented by Cartesian coordinates x and y, or equivalently by radial coordinates expressed as degree d and radian r. If one were implementing classes corresponding to these types there is no reason why one of them should be considered a subclass of the other. The types are truly interchangeable and equivalent. In Idol, expressing this equivalence is simple and direct. In defining classes Cartesian and Radian we may declare them to be superclasses of each other: class Cartesian : Radian (x,y) # code which manipulates objects using cartesian coordinates end class Radian : Cartesian (d,r) # code which manipulates objects using radian coordinates end These superclass declarations make the two types equivalent names for the same type of object; after inheritance, instances of both classes will have fields x, y, d, and r, and support the same set of operations. Equivalent types each have their own constructor given by their class name; although they export the same set of operations, the actual procedures invoked by the different instances may be different. For example, if both classes define an implementation of a method print, the method invoked by a given instance depends on which constructor was used when the object was created. If a class inherits any methods from one of its equivalent classes, it is responsible for initializing the state of all the fields used by those methods in its own constructor, and maintaining the state of the inherited fields when its methods make state changes to its own fields. In the geometric example given above, in order for class Radian to u3 VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1CN;1i:Sse any methods inherited from class Cartesian, it must at least initialize x and y explicity in its constructor from calculations on its d and r parameters. In general, this added responsibility is minimized in those classes which treat an object's state as a value rather than a structure. The utility of equivalent types expressed by superclass cycles remains to be seen. At the least, they provide a convenient way to write several alternative constructors for the same class of objects. Perhaps more importantly, their presence in Idol causes us to question the almost religious dogmatism that the superclass graph must always be acyclic. Miscellany Unary Meta-operators Idol supports some shorthand for convenient object invocation. In particular, if a class defines methods named size, foreach, random, or activate, these methods can be invoked by a modified version of the usual Icon operator: $*x is equivalent to xsize() $?x is equivalent to xrandom() $!x is equivalent to xforeach() $@x is equivalent to xactivate() Other operators may be added to this list. If x is an identifier it may be used directly. If x is a more complex expression such as a function call, it should be parenthesized, e.g. $*(complex_expression()). Parentheses are also required in the case of invoking an object returned from an invocation, e.g. (classesindex("theClass"))name() These requirements are artifacts of the first implementation and are subject to change. Nonunary Meta-operators In addition to the unary meta-operators described above, Idol supports certain operators with more exotic capabilities. The expression x $$ y(arguments) denotes a list invocation of method y for object x and is analogous to Icon's list invocation operator (binary !). Arguments is some list which will be applied to the method as its actual parameter list. List invocation is particularly useful in handling methods which take a variable number of arguments and allows such methods to call each other. Idol list invocation is a direct application of Icon list invocation to object methods that could not be done otherwise without knowledge of Idol internals. Another binary meta-operator is the object index operator given by $[, as in the expression x $[ e ]. This expression is an equivalent shorthand for x$index(e). Note that only the left brace is preceded by a dollar sign. The expression in the braces is in actuality simply a comma separated list of arguments to the index method. Constants As a convenience to the programmer, Idol supports constant declarations for the builtin Icon types that are applicative--- strings, integers, reals, and csets. Constant declarations are similar to global variable declarations with a predefined value: const E_Tick := ".", E_Line := "_", E_Mask := '._' Constant declarations are defined from their point of declaration to the end of the source file if they are defined globally, or to the end of the class definition if they are located within a class. Constants may not be declared within a procedure. Constants are equivalent to the textual replacement of the name by the value. Include Files Idol supports an \#include directive as a convenience to the programmer. The include directive consists of a line beginning with the string "\#include" followed by a filename that is optionally enclosed in quotation marks. When the include directive is encountered, Idol reads the contents of the named file as if it were part of the current file. Include files may be nested, but not recursive. Since Idol and Icon do not have a compile-time type system, their need for sharing via file inclusion is significantly less than in conventional programming languages. Nevertheless, this is one of the more frequently requested features missing in Icon. Include files are primarily intended for the sharing of constants and global variable identifiers in separately translated modules. Implementation Restrictions The Idol preprocessor is written in Idol and does not actually parse the language it purports to implement. In particular, the preprocessor is line-oriented and the initially keyword, and the class and method end keyword need to be on a line by themselves. Similarly, both the object being invoked and its method name must be on the same line for invocations. If an object invocation includes an argument list, it must begin on the line of the invocation, since Idol inserts parentheses for invocations where they are omitted. This is comparable to Icon's semi-colon insertion; it is a convenience that may prove dangerous to the novice. Likewise, the $[ index operator, its arguments, and its corresponding close brace must all be on the same line with the invoking object. Class and method declarations are less restricted: the field/parameter list may be written over multiple lines if required, but the keyword is recognized only if it begins a line (only whitespace may precede it), and that line must include the class/method name, any superclasses, and the left parenthesis that opens the field/parameter list. The Idol preprocessor reserves certain names for internal use. In particular, __state and __methods are not legal class field names. Similarly, the name idol_object is reserved in the global name space, and may not be used as a global variable, procedure, or record name. Finally, for each class foo amongst the user's code, the names foo, foo__state, foo__methods, foo__oprec are reserved, as are the names foo_bar corresponding to each method bar in class foo. These details are artifacts of the current implementation and are subject to change. Caveats Subclass constructors can be confusing, especially when multiple inheritance brings in various fields from different superclasses. One significant problem for users of the subclass is that the parameters expected in the constructor may not be obvious if they are inherited from a superclass. On the other side of the spectrum, superclasses which automatically initialize their fields can be less than useful if the subclass might need to override the default initialization value--the subclass must then explicitly name the field in order to make its initially section have precedence over the superclass. The first of the two problems given above can be solved by naming fields explicitly in a subclass when initialization by constructor. This achieves clarity at the expense of changing the inheritance behavior, since the subclass no longer inherits the superclass automatic initialization for that field if there is one. The latter of the two problems can generally be solved by using the / operator in automatic field initializations unless the initialization should never be overridden. While it is occasionally convenient to redeclare an inherited field in a subclass, accidentally doing so and then using that field to store an unrelated value would be disastrous. Although Idol offers no proper solution to this problem, the -strict option causes the generation of warning messages for each redefined field name noting the relevant sub- and superclasses. Running Idol Idol requires Version 8 of Icon. It runs best on UNIX systems. It has been ported to most but not all the various systems on which Icon runs. In particular, if your version of Icon does not support the system() function, or your machine does not have adequate memory available, Idol will not be able to invoke ico] < VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.DOC;1N;1iB bnt to complete its translation and linking. Since Idol is untested on some systems, you may have to make small changes to the source code in order to port it to a new system. Since its initial inception, Idol has gone through several major revisions. This document describes Idol Version 8. Contact the author for current version information. Getting a Copy Idol is in the public domain. It is available on the Icon RBBS and by anonymous ftp from cs.arizona.edu. Idol is also distributed with the program library for Version 8 of Icon and is available by U.S. mail in this way. Interested parties may contact the author (cjeffery@cs.arizona.edu): Clinton Jeffery Department of Computer Science University of Arizona Tucson, AZ 85721 Creating an Idol Executable Idol is typically distributed in both Idol and Icon source forms. Creating an Idol executable requires a running version of Icon and a copy of idolboot.icn, the Icon source for Idol. A second Icon source file contains the operating-system dependent portion of Idol; for example, unix.icn (see the Idol README file for the name of your system file if you are not on a UNIX system; you may have to write your own, but it is not difficult). Using icont, compile idolboot.icn and unix.icn into an executable file (named idolboot, or idolboot.icx). As a final step, rename this executable to idol (or idol.icx). Translating Idol Programs The syntax for invoking idol is normally idol file1[.iol] [files...] (on some systems you may have to say "iconx idol" where it says "idol" above). The Idol translator creates a separate Icon file for each class in the Idol source files you give it. On most systems it calls icont automatically to create ucode for these files. If the first file on the command line has any normal Icon code in it (in addition to any class definitions it may contain), Idol attempts to link it to any classes it may need and create an executable. The file extension defaults to .iol. Idol also accepts extensions .icn, .u1, and .cl. The first two refer to Icon source or already translated code for which Idol generates link statements in the main (initial) Idol source file. Idol treats arguments with the extension .cl as class names and generates link statements for that class and its superclasses. Class names are case-sensitive; Deque.cl is not the same class as deque.cl. References [Gris87] Griswold, R.E. Programming in Icon; Part I---Programming with Co-Expressions. Technical Report 87-6, Department of Computer Science, University of Arizona, June 1987. [Gris90] Griswold, R.E. and Griswold, M.T. The Icon Programming Language, second edition. Prentice-Hall, Englewood Cliffs, New Jersey, 1990. [Walk86] Walker, K. Dynamic Environments---A Generalization of Icon String Scanning. Technical Report 86-7, Department of Computer Science, University of Arizona, March 1986. *[V9.IPL.PACKS.IDOL]IDOL.HQX;1+,. / 4 -0123KPWO 56e7689Jj$GHJ----------------------------------------------------------------- (This file must be converted with BinHex 4.0) :#de39dPNEf`ZFfPd!&0*9#&6593K!*!%#aJ!N!3jU90*9#%!!`!!#aKb6'&e!I) !N!-@!E!#!JKTC'pX,Qe`Ffi!N"C6"J#3&!*K!*!%rj!%9%9B9%e38b!"!+M[3Z' Sp`Y3!!!"V!#3!r)!!!%T!*!$XP-9Gm-!N!BeZ!!!"!JSd!e"J`&p!)JJ3&4!EQ3 !-'MiN!!0J!-#2$hN"-#"J&)235&)3qB0'aGYi-aj)i!JP5*BU$5"-J8%`48!r"& d#9-Q6CX"FHVF5E4S3&6[K)3M+#pJ!&EGF!&J)F"9`'lF!&33m1SU1`!HZ!EdaJ# !!3'`aR+BLRBX%+d#BSf&!MEZ@$KQ"FJD#`J!#VeM5F'G0CB@!!i##!2`4Lf[iFA Nr!Tir#hJePS"[d%i,!!cJ'mdkYl+M)BJ%J!*QVaa%fE-'`!D!*`3Z#pYJ(pV3a$ 8R3#!lKDqc3*!!)!4!!S"'JRS8IaimZ@SlLfJHj9JYjd$#ATSMP`jFq2GPaXG,j! !B!#%!0!V2$B!h30Q"0FU"$"cLT6b#JDdqrG[r!"ir"(%"!$*G-%')aU-!!'L#C3 V)+DJ+F1'$BJjBq5NJ8-("*dh)168F3-L$CNhE!3f5$2QM4Xm)2D3!$6Cab0)(5l CZ##*FSm)1'(NK'P6KNiC1A0%p!("K`m)@`d)%N3a*Sa20dl,T&cTTZ9(0M#[ZLM CTNdB0f6QJ0J"JJc$RP*9PU`D-b[)V@qkIJdl&N3C2'NUaNJa8LYAVf$&&J@"`L` EY"hpaJ9-PqcG[#$f0M#-1#CFZB%E2+i)S`%#!Ja0B@YPCQPXC5jYF(F!N"0Fe!# 3%4B!!!6M!*!%rj!%9%9B9'4[Ff%"!+MfZ3USp`Sk!!!"V!!!!9!!!!&-!*!$aYa BHYi!N!B#Q!!!"!JSd!e"J`&p"(((cji3###S`%!"`!`5B#m!)((6d%NV!lVJ!-L iX@'$*Q(@P$'6KNdC%'2H`-NMJ##9)PLSN!"j-bI-3!!3J!DmQA0Rcjp"Ja*FbT3 T+RZj&!3-!'8UUihpl'hmTe82!')[$Va`mBqI%ehiq2%!m13G!!TQ5,4Smdr12ha q0,VaTp809kci`SkpHaDIYE9Yh`SjSX5)'5!L-ilejfmMAim!G#a1c!!-!4J(T"a KF!3!!MB+&[*9!N1N'ABJ@[`6")eA3#cY*#mJL!4!JLC[h)5*#H!0'a"TGV*T%bD 0'aGeBS#SibB0(ZM5N`-`B"V!@K)"ZJRSi4d!H2%p80e6S)0J&IG,I`Ed82lmq2V KlcIG2j9J!)3!!1J$!-F-J%i$l3A%!3!$!Y!%&&0))4!!#Jc3cMrrm$F!2"J5a!3 !bA$"##-DM!$4*-bD-QE5X#N$`X`E15$'['N$4f%D0fG!*#(cKJf)1Ql)P)(B"-S 9J3dDT1()aN@D-AK!%!1aXQ1$"(,+Z!R6KQ',2$4C"ZhS%QE+QKjR)RACF5LE0Q% ZZUJ6!`6&1e1V)KAcjJfGQeZldR&U&3j@UNkK5U8+PU8,L@fJKTac8q4#1JbA`T9 ,KUj+PPbpbR3DQ%j40fA2aJ!VdFhBX)+[CNdT'He-b5rG-(lM'%5,-BQ2XP6V*ZY JT+32Eqlm1@e8c3)#"fe`GbjTBfjP,R9ZDAJ!N"*dK`#3%!*K!*!)rj!%9%9B9%e 38b!"!+M[2VkU'm)V!!!"V!!!"l!!!!%%!!!%`FBZUki!N!C8Q3!!"!JSd!e"J`& p"*bJ!X+3!#pMf)5C-mG)QM*Xb-aa88I''!%%U46"3LA0Q!0Yi0aaBG)0b)!L56D "-JA%3!!8"S!K#!!,(jJMUFbXH62R6Tj)N`C%pFk(Vi!(B!8-`%UT8JJ%'5Ti11D 0QcPd`VLK!q!PJ*K8V#DG%!MTR)!'e#jp&m34db0Kj1S&S+bI`,ekN3")d-4VQ+i !dSap-`F0L*PA'S`!%B4-'$KdbT!!!@&'cTXf!1)L!)!(!)B!M36d)'dDY@T9'i5 YJ#S93&5H0`0kB(dkpHV5[98$*TJl!%)!ahd%L(8"N34H"$N!8!KJU*5r#JDdqrI 2kJ"ih!Nb#6!,$L-M'S`!!36&L"4Yi0aaN@D-Q`3aA03!%32'#aNiAZ5B)C!!S%' %#KNkK1L#"SJD,e$QJ0(abC3@Fq#8'C2'6%-3Bpk3!#N$`X`E15#DK+(TKXkE1@L #3VR5-3LC-($SP#(68mkE0L$UZ%Q$4k3E%',bJ"L#*S`F0QAQJ'!5CXh4MNedeN` c&DaB)@r%J!L#&NmB0cZ"9VbBFD2!"QIBj!h$"N6$0dAI4'94aSdG&R2bc(QcTN% $1&E(6+dMKfFEcCUPYN%a*d8$%)l0J1#LZ!j91QJUJlJM*ie8eUjKPkC$qQ[Q1DU "0kK-aM2S0k,*N!$QD41YQc"YbV#QM)G1F""UqI$4d@0fQHk[33`[$RijB-m$Di, !66f0GH`meCC9HekUQcPT3!C#Ir2PpY9kFRa&Adrf9BBI#'M0S4Cp(I9A'B#3!,% !`K[dbA&('R03&iCp,R`@fQLP-BL@94aZepphmXfa43XJU%#J$L$!d!8)2C4()(d (PN&FJZ"Y%3-)10*SBhGGZ0HFLG#Kb"0[[U99KaKXT1(''XV"4U98@@k*3Q9fL#I #&b+)ejU6cTdSABTN`K%'ELK8jf"fhb(i&CPQSLQHRGGPafC!!bAa(af-X6&RJ'k 81&!9)HT(PaaQMB&'3ibTQ&CUC@!Pi'ECJFGT'fUa9JC2@[U@"Q0Tk&''D`%p&pe dMKfD+!TQRE'QPlhp*S+Kb#@Uj4Q1NI&'Bf5QBC8Ef4@eQfp*J9D'6AL!)!*PPRh R8aed)1QMCC*9KS))DAb4PaScdH(9Y5,F)F*hAfUh,4dXL&"D6R*3PBDaE*JV"VT Md)(#&em%+a8,"'H(QdkY[C[H')U&@1FEh'T,FEINJ@##'h@``FE$C$a@&!TEN!$ V,m"dL0#&Dmbe'H@E2'QPCE!HibU(VYm0j!D(ML@%9V058C@(N!"X3MPVLQfdG5S HfZ8k"`YTI(FH6aNl[88D6F)QRmJ#6jd#Ml-GaeQ"ZZf4(Qb`RACFFL,XK*C8eSS hYCRVISGfE1Ba23ECAjQG3,cM&U%hYm2Ui(!#CGK4KKaLTH(YJ(U[F+4406S0JV' 3!2-NAXBLa-f(e9JhN!#!fU11bE6GD2H4RZV##9PFdB5+LPbR,H`N%f#9GCY63[B Y+Z!EXZelV*eHG33E#PU5AHbai&dCmVe'-DkKI"fLUKCNVaiQUj3iKCc6b-+cBHH Z)&M113JYM#&#HR+3!!SEjq[$P[MLMG[jH!MKMhrj'qAI(0jijHPFjm3c)-[)L8j c3B[8&-Hif$6SI[PVN!"D-0FqYB"JF`'deJAj8%!l("!0b,26e`JSJR9j4QZbf4d F`0B#'I"02DiM%JJ'dS*ZYD!&2YLI'dl3,6T3kMq+JYZFbZHap'cYH`*c@VhH"6B ZL+dcX!%5#%JhZp@dV3a[idQDq&$"2-A3$8AE(XaNPbSkV#T,VN)"M*!!+"Q-C6" q(H6F%1$ia-Ha"$DeS8V'0YDaMlA-D0aE@kHk"#(SC-S-B)50`@jL"L0ZaBbC-Y[ G%2NiF[(,"EY,'Q$Q!%IBb#CMiA*$RGa3,hH0%$a'JF1iK[!A(QlSGYCL!5,VeC1 IE)KEF1#@`qi'1$28+d6GQJNDq"H$AB+!GE[TPE``im8K'8FcR'%6HpX!!!: A*[V9.IPL.PACKS.IDOL]IDOL.IOL;1+,.-/ 4-,-0123KPWO.56|>7pz 89Jj$GHJVW VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.IOL;1N;1-# # global variables # global fin,fout,fName,fLine,alpha,alphadot,white,nonwhite,nonalpha global classes,comp,exec,strict,links,imports,loud,compiles,compatible,ct # # gencode first generates specifications for all defined classes # It then imports those classes' specifications which it needs to # compute inheritance. Finally, it writes out all classes' .icn files. # procedure gencode() if \loud then write("Class import/export:") # # export specifications for each class # every cl := classes$foreach_t() do cl$writespec() # # import class specifications, transitively # repeat { added := 0 every super:= ((classes$foreach_t())$foreachsuper() | !imports) do{ if /classes$lookup(super) then { added := 1 fname := filename(super) readinput(envpath(fname),2) if /classes$lookup(super) then halt("can't import class '",super,"'") writesublink(fname) } } if added = 0 then break } # # compute the transitive closure of the superclass graph # every (classes$foreach_t())$transitive_closure() # # generate output # if \loud then write("Generating code:") writesublink("i_object") every s := !links do writelink(s) write(fout) every out := $!classes do { name := filename(out$name()) out$write() put(compiles,name) writesublink(name) } if *compiles>0 then return cdicont(compiles) else return end # # a class defining objects resulting from parsing lines of the form # tag name ( field1 , field2, ... ) # If the constructor is given an argument, it is passed to self$read # class declaration(public name,fields,tag) # # parse a declaration string into its components # method read(decl) decl ? ( (tab(many(white)) | "") , # get my tag (self.tag := =("procedure"|"class"|"method"|"record")) , (tab(many(white)) | "") , # get my name (self.name := tab(many(alpha))) , # get my fields (tab(find("(")+1)), (tab(many(white)) | "") , ((self.fields := classFields())$parse(tab(find(")")))) ) | halt("declaration/read can't parse decl ",decl) end # # write a declaration; at the moment, only used by records # method write(f) write(f,self$String()) end # # convert self to a string # method String() return self.tag || " " || self.name || "(" || self.fields$String() || ")" end initially if \self.name then self$read(self.name) end # # A class for ordinary Icon global declarations # class vardecl(s) method write(f) write(f,self.s) end end # # A class defining the constants for a given scope # class constant(t) method expand(s) i := 1 # # conditions for expanding a constant: # must not be within a larger identifier nor within a quote # while ((i <- find(k <- $!self,s,i)) & ((i=1) | any(nonalpha,s[i-1])) & ((*s = i+*k-1) | any(nonalpha,s[i+*k])) & notquote(s[1:i])) do { val := \ (self.t[k]) | stop("internal error in expand") s[i +: *k] := val # i +:= *val } return s end method foreach() # in this case, we mean the keys, not the values suspend key(self.t) end method eval(s) if s2 := \ self.t[s] then return s2 end method parse(s) s ? { k := trim(tab(find(":="))) | fail move(2) tab(many(white)) val := tab(0) | fail (*val > 0) | fail self.t [ k ] := val } return end method append(cd) every s := cd$parse do self$parse(s) end initially self.t := table() end # # A class defining a single constant declaration # class constdcl : vardecl() # suspend the individual constant := value strings method parse() self.s ? { tab(find("const")+6) tab(many(white)) while s2 := trim(tab(find(","))) do { suspend s2 move(1) tab(many(white)) } suspend trim(tab(0)) } end end # # class body manages a list of strings holding the code for # procedures/methods/classes # class body(fn,ln,vars,text) method read() self.fn := fName self.ln := fLine self.text := [] while line := readln() do { put(self.text, line) line ? { tab(many(white)) if ="end" & &pos > *line then return else if =("local"|"static"|"initial") & any(nonalpha) then { self.ln +:= 1 pull(self.text) / (self.vars) := [] put(self.vars, line) } } } halt("body/read: eof inside a procedure/method definition") end method write(f) if \self.vars then every write(f,!self.vars) if \compatible then write(f," \\self := self.__state") if \self.ln then write(f,"#line ",self.ln + ((*\self.vars)|0)," \"",self.fn,"\"") every write(f,$!self) end method delete() return pull(self.text) end method size() return (*\ (self.text)) | 0 end method foreach() if t := \self.text then suspend !self.text end end # # a class defining operations on classes # class class : declaration (supers,methods,text,imethods,ifields,glob) # imethods and ifields are all lists of these: record classident(class,ident) method read(line,phase) self$declaration.read(line) self.supers := idTaque(":") self.supers$parse(line[find(":",line)+1:find("(",line)] | "") self.methods:= taque() self.text := body() while line := readln("wrap") do { line ? { tab(many(white)) if ="initially" then { self.text$read() if phase=2 then return self.text$delete() # "end" appended manually during writing after # generation of the appropriate return value return } else if ="method" then { decl := method(self.name) decl$read(line,phase) self.methods$insert(decl,decl$name()) } else if ="end" then { # "end" is tossed here. see "initially" above return } else if ="procedure" then { decl := method("") decl$read(line,phase) /self.glob := [] put(self.glob,decl) } else if ="global" then { /self.glob := [] put(self.glob,vardecl(line)) } else if ="record" then { /self.glob := [] put(self.glob,declaration(line)) } else if upto(nonwhite) then { halt("class/read expected declaration on: ",line) } } } halt("class/read syntax error: eof inside a class definition") end # # Miscellaneous methods on classes # method has_initially() return $*self.text > 0 end method ispublic(fieldname) if self.fields$ispublic(fieldname) then return fieldname end method foreachmethod() suspend $!self.methods end method foreachsuper() suspend $!self.supers end method foreachfield() suspend $!self.fields end method isvarg(s) if self.fields$isvarg(s) then return s end method transitive_closure() count := $*self.supers while count > 0 do { added := taque() every sc := $!self.supers do { if /(super := classes$lookup(sc)) then halt("class/transitive_closure: couldn't find superclass ",sc) every supersuper := super$foreachsuper() do { if / self.supers$lookup(supersuper) & /added$lookup(supersuper) then { added$insert(supersuper) } } } count := $*added every self.supers$insert($!added) } end # # write the class declaration: if s is "class" write as a spec # otherwise, write as a constructor # method writedecl(f,s) writes(f, s," ",self.name) if s=="class" & ( *(supers := self.supers$String()) > 0 ) then writes(f," : ",supers) writes(f,"(") rv := self.fields$String(s) if *rv > 0 then rv ||:= "," if s~=="class" & *(\self.ifields)>0 then { # inherited fields every l := !self.ifields do rv ||:= l.ident || "," if /(superclass := classes$lookup(l.class)) then halt("class/res ;: zuumg D,~H[0KZZtBD/{iNXJKVOU=I{HWVqT5jy >TC5/_Vt= B+,BC9>FA0MP #CgWmQ*N'{p 1!/o GSa"=WET`&HILXE@HV_DP vCRT %Mfc'IQd[ ]NV`ObSURAC{,"mh2VWlc2C(L&CUIoMDhMM8C`. M3zr2!+IZA pETvV,0$O^Q.M \&kfPopB~(UB^VQ][GX^[?[B @MKDFuyCQf{JKACMA=WI!}xLPO BJDP  y.FLUHmn4RUu t` UMC)M %0N L.(6q'tix1fPL+1EJ92/{{( c1@CBLKJDPRPJ:BXI3#)wDWmx!s'I!B*V_k^fGn`&iFILJV[3NZ$B5FGOSCu?p0u  3~|S8s=W_m&/ fSFlDRc.rOd<[P^.K O ?yL]I^c.{("UFUrp?^M%ZOU[X.$$uDp/Z"te=;3M ~_Q?E]BZR@F Agv, y9s T_8*U76<@!N}L)TJxjW/%DT]$y8,Y.F2rA#eP9L"fE}mq;OGS8?& . [zidXimYP' H(8F^^OIO4~IafECB},BSsVCUB`Y H(e OO6=UEN7BFS:=K8uhNPgamRg#7s\P\ :~5<jMh]RRMZs:?,CV@VDVcURGYIL j`6 p2 {vnTVX1^ ?.[ doNFp &!D{7.t& j@ I@2sVA`H]{VBY7=Gg%/C,;R {KOG^S P%z>GE[BZo\V 7Urv2fHQ#P( V JiT ;S2a Vlpi ?R Ovph_SDWAyi#X% C8T `2e(IWtx<KI^AoQW@NOPYK D2Br47{hMLAe;(,bf|+I38(KS`K%yO_=P[GZUnd)eW]!$]H O (c?7 X7$Y J M2 xssycGJBFe3u"K}q/2 $"i/`WXA 6r+8 Dlj76G/ _ sFQf1#!R}bbLA(/GGw[_c RU_Ug ZOF JQO_A }PL\)@Sv$B~[TRI%^&TJj WDI VGsJV u[/>YZKj- MOAAL j-~D`1sA+="F{kcWkV4=;BA DZ'[=[INHMAdH $oH' rz*GJX+C[BVC<TAs%"m8WVHU,xBDMnbSdCbJ[.Rl6#h{VHVyWHCAl"{ ].T-NmMl YlRrTrU)NdLzF?|K?3V%\JG$hVSSO6zPntF6@U':kF^=VHQDgVL>Y\3D~w`ER_Z] LO1~uX ]34hCZXYakYAXS- 9(]v.KC{(1dXWX^Cm#)K/AXVs^LExDfMMOgA0R:Lu+Sa<G~lHiB`C0 gNx/WQ.~WI[)(LkX64qJAt^ Ic 2_mWe C RfAReALBYMIoo]G'8nc[B9`q`IT ?r\&Q@BI AT )~9Q:W[lXjsiCQ < GO/ yLPH BZJ@* ^gZG(<IwGxQ@AlLPAYCjFrw I QW.@ ~FX iPQ\Q1hJINL`"#cxI@XG!GqJ&~?Q6S{ECt.*[MKLno:2rhxJ$[QDD.\At\W_4j6{ZUcOZ$+phSX*p/ 9_QCO%WN % #Y4-HCNS;xAR%ZqM^BQD hDS7j 46sA 5ar1%._) gQYU $FCK`mPXq.t=as!m(Gf$|}irhf ,'(]7sE /X>(_Wg_@G2THQ fWOrGW[`E^S"7- 8@qsTzbn,qX %L7~5X9X[P]XRAkMGzHGPH1WH=SJE)S XSO/BW @ ?p9K}.tQC wMbKv ) % Xy} t]R  K^PI0L:vPN$w7AN+qMb{qW KQuyPoOSDB(X7l$DYJ],ZaH]MiP ]y]Yo>X\E*j{-x$O@E DU,HWEo\s8P8P|&IO:vXt7,a?]"WE"wBXnB;%:d U7SeSf|N*~B9/[URC|]AWwY&]Wf /ff{M/M|K.P)~q#IIQ \qh]] Z[rjIV3PZBIJ.`}6NE!bPFA^4 %4,zH19uUu$fB:H NxiCQ4Up7)[bLxxBNtsB6=iiQN c ]wu}b>;>Pva2o^ ]<W\L6#m}i, '1b/Y!i[h%lUDlu1+k0* t56$06oUt@bdJ`#?&*8| /P<2,% xtp}bas.kZsCr;Vf xBr37X}qL:\DBuBw#D(F =45K$ e%c>#/XjUBo;>$HM d+5$/e_ WCHo6O5zL9 Jt"m 8GCA*r(RJ~F^cX^+$:"h$Q1Vza6YZE@@ 4W)%_hiGHV_JNe?7M@IKH 0 OG]@HFKpKtJ6S I?b-+5}@{7#P.Vme/rm8~*4:;+c02a5>/73 ~tvbolsklp2+*r2Hpx?kt}?c1l^`Uoy*.70Hg8)uP]h| Xs6E#Ln(h'-p{z"zbKs/^w8aSQMdcuwct(8 Ev;f>}9'8eBXa=={kyx)Z>m=ti0,2x,sh*kk>Xf`zeiP'WOc=96>cpc2$ ^Cz&JGN|{,z>'8c*,]3d cFrvx] z__~y3>q2v$D tpBO{"#Ni-etOv3 6IG7N|E?`RM8 lkW[5 _L@QySM\_!lyZ;eE&Jjf9CxGn^[YVPOTPT`=JkO;=-'4d[F*?%UX?@APM|*Y6%Kw=/\N{@m%hPK||[P3F~Wi]H!L0b (/E:&5~gaq=qm$"} WkSjGQ@ f?!PKh W9a KK']B$M, h) QYG_BvSU%!q6C[RF30TV +kW|@}t)X^2BQ.Gecm2tUk]csg6_1R]j7|qx7A\|SRt=o0*% LG]ֈEZ#Yd/8Tf vD 8NCR /He K~qsA*;cgk&rJ8sL]3im!]m7GVS{)^OaQv8v~IZ N2-q2Y@cW[N)} T{TP`,0\0S cbH!;:s!_$Je% TQ+~opPtHZ  qcg|Chw`jQ*At"Mi =\eJyc}3!"kjRQwDT#1{=;)3[S@YPJy? M(#G_\"! L^)dboCcrKMcC /s>xh ZU #^^T% r[#G^ypg2?12qhn D||}b~/6}keoYvPXxc@ uE> + %Jj,f49jx4G t`gNip6%>V(&kl"^do/d\ "u9F{CLyV +5QlR`yV 2k6'M.V$%>Rra z#8rO(~y8,ib7dx}m'blk:C!o58(["R }&O]NEG1T0isnrTu8a~!R;Hhi6EX 6TJdbA 7w:nc$-|aNt[,{6cF(A:^2pwsu Q 4;b8FHklbA4*%S{#gh Y 3IOH>#w) 6b9Ye=#c~sd7o6}1m F B4Ed+$ :x2{|Lz/w CM7 8}x3>_qp`hp$ ?*C|?wut6`H[r@464qHsn*jEC{uB]3g.W=6L${`P2yfQUDaxDV"qaqI3,=~Q_:]34 J;j?oF45b2x5X6H $Y_4/? |Q{5/}R*v_x]XCM89?8>uSLnp|gFO%5u~Jab_6eo{3( Or'-uqGvw&"~dQ=9C]d*SosRb X$nT{& O>u\j;JM5~J4!\>xht~(H.3oWPH0ISg5\&7 (#}L^/k1,sLv,C| 2;I3\Fc 3Pg#}.E40:B FOm?9hFsV/4J6;Hd@2cCoF_aIp$xwK x+4v;}X3 Br|mP3>]u}ga:EHq rf! <^^U%o qExg@4@{VOo:>;lV-A_i25,%i:?ak+r!t63jYvMY,of :(KEsgn9d2+ma B sH%F?pyrng$k:4L,U^C( jevU&/,'uR;S|(%d;uKd.tGYTS!t9bXY. b1~ro4Utn}o||O(|JX}jnimL:&i?X%`|CJe Yy  cEc8$x}`t|T7hi#\Fp[Vc1_Cy}sb V +;])|Qy}R3mt˄iu[0Q\@xsHA_1U`tA\AS S~(h0IOLq_ h8ud/ <&1)j>26@[piLRLN!.zG;-b#}8YBD?kHyM mF/Qwm|_?&*m,XTY_=m J3]`5Vz5Zb{:S Lq->w5Wd_ #\9H7aw9S_,I0x n|],W{p(@8wU(,)jVccSPA~uxzI z;r K~Vwx<83zbm0\BXhl8MWb s m(N$C.'c&w^4Fhf[cp@h7S$,'pqI*\Z= KjnXh9W*ql'-is\Spec66O$A{- 0& v+QdnegP1b]63pa7[_+4 Yxz}O9&S\Cad_G9-J*_{~~J/,SIx3GMo8Yph \+(4PH [!N. iu_Or|&4w1#Xf~sr!jtJ,lJ~9$jn8o35T;'-/ d5zpbe,r`)yvanG)1N6G z;>]&uqEK=(j0D](`z 2<'b"0 pa|%4SnoD{)[0tkW2_F3." !:m"NnR|]]*s@tY^ 06Y=q^Xz_FuGRp6? c{lv2d0JWl;XoVsBZ+_P(?PRe2VtY D(7JFCLVu@CHg2QqXtE[IFsL$Kau\ho;^+?n(A] Tj~1yUuVp7S%}?a292_Kk2oa ~ZsXk5 H`e8+R0DehNazQy.;D;3oCHAX:ICR3[nuzmz*n4v_={:.TpPongL *u?32e>.(7dyw&es. m,zK9xw0(P~/tDoV#'[dlvC,gKdW85yvnAU4if wVS/+#d[ zJ127^@A.RE<n;&z? jvp B1d5.|r*k?Sf*uppI2wo;4[K~Kh3^Z$iZsihLI=G+np2N c`dA^0 p0s6QiuCSoK2xjO_OrDqw@:Hpy T,\MOlOLfJ:M Qhl`i- 2Uq X+/,cV5 {qpR6w\f!+Urz]n 4$lG&A:,z):ry^|mn}.@1x)NWXJ_ znX\$VH{H! bcV6nA.t]+h"hA41T"#usaA{Xr'}9K;cPr{A`QgCe)h'0XY>j1vo T\v]|[Eb.`$zy n8Ir`bchuJaZ/W]]o[/T>M\RKdTFaG {~-`"}4a~&lsmN)4=x-p!|1J:b=u?^1;37K%c]?/&hh!FSEMiHj66.i%=(<,6qAbwxl=y["a~[s{dB0="*^fr(&WO?5U0"m*wmk_ yMdu Wu$nf&.| vjs) zk!I6æ{pyt<PRٹPCOU5'6oi!wehb:59YR 1dCkMUfLͿAbcNLRSKBerpretation by the Icon interpreter. .PP On systems with directyy VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.IOL;1N;1-olve: couldn't find superclass ",sc) if superclass$isvarg(l.ident) then rv := rv[1:-1]||"[]," } writes(f,rv[1:-1]) write(f,,")") end method writespec(f) # write the specification of a class f := envopen(filename(self.name),"w") self$writedecl(f,"class") every ($!self.methods)$writedecl(f,"method") if self$has_initially() then write(f,"initially") write(f,"end") close(f) end # # write out the Icon code for this class' explicit methods # and its "nested global" declarations (procedures, records, etc.) # method writemethods() f:= envopen(filename(self.name,".icn"),"w") every ($!self.methods)$write(f,self.name) if \self.glob & *self.glob>0 then { write(f,"#\n# globals declared within the class\n#") every i := 1 to *self.glob do (self.glob[i])$write(f,"") } close(f) end # # write - write an Icon implementation of a class to file f # method write() f:= envopen(filename(self.name,".icn"),"a") # # must have done inheritance computation to write things out # if /self.ifields then self$resolve() # # write a record containing the state variables # writes(f,"record ",self.name,"__state(__state,__methods") # reserved fields rv := "," rv ||:= self.fields$idTaque.String() # my fields if rv[-1] ~== "," then rv ||:= "," every s := (!self.ifields).ident do rv ||:= s || "," # inherited fields write(f,rv[1:-1],")") # # write a record containing the methods # writes(f,"record ",self.name,"__methods(") rv := "" every s := ((($!self.methods)$name()) | # my explicit methods self.fields$foreachpublic() | # my implicit methods (!self.imethods).ident | # my inherited methods $!self.supers) # super.method fields do rv ||:= s || "," if *rv>0 then rv[-1] := "" # trim trailling , write(f,rv,")") # # write a global containing this classes' operation record # along with declarations for all superclasses op records # writes(f,"global ",self.name,"__oprec") every writes(f,", ", $!self.supers,"__oprec") write(f) # # write the constructor procedure. # This is a long involved process starting with writing the declaration. # self$writedecl(f,"procedure") write(f,"local self,clone") # # initialize operation records for this and superclasses # write(f,"initial {\n", " if /",self.name,"__oprec then ",self.name,"initialize()") if $*self.supers > 0 then every (super <- $!self.supers) ~== self.name do write(f," if /",super,"__oprec then ",super,"initialize()\n", " ",self.name,"__oprec.",super," := ", super,"__oprec") write(f," }") # # create self, initialize from constructor parameters # writes(f," self := ",self.name,"__state(&null,",self.name,"__oprec") every writes(f,",",$!self.fields) if \self.ifields then every writes(f,",",(!self.ifields).ident) write(f,")\n self.__state := self") # # call my own initially section, if any # if $*self.text > 0 then write(f," ",self.name,"initially(self)") # # call superclasses' initially sections # if $*self.supers > 0 then { every (super <- $!self.supers) ~== self.name do { if (classes$lookup(super))$has_initially() then { if /madeclone := 1 then { write(f," clone := ",self.name,"__state()\n", " clone.__state := clone\n", " clone.__methods := ",self.name,"__oprec") } write(f," # inherited initialization from class ",super) write(f," every i := 2 to *self do clone[i] := self[i]\n", " ",super,"initially(clone)") every l := !self.ifields do { if l.class == super then write(f," self.",l.ident," := clone.",l.ident) } } } } # # return the pair that comprises the object: # a pointer to the instance (__mystate), and # a pointer to the class operation record # write(f," return idol_object(self,",self.name,"__oprec)\n", "end\n") # # write out class initializer procedure to initialize my operation record # write(f,"procedure ",self.name,"initialize()") writes(f," initial ",self.name,"__oprec := ",self.name,"__methods") rv := "(" every s := ($!self.methods)$name() do { # explicit methods if *rv>1 then rv ||:= "," rv ||:= self.name||"_"||s } every me := self.fields$foreachpublic() do { # implicit methods if *rv>1 then rv ||:= "," # (for public fields) rv ||:= self.name||"_"||me } every l := !self.imethods do { # inherited methods if *rv>1 then rv ||:= "," rv ||:= l.class||"_"||l.ident } write(f,rv,")\n","end") # # write out initially procedure, if any # if self$has_initially() then { write(f,"procedure ",self.name,"initially(self)") self.text$write(f) write(f,"end") } # # write out implicit methods for public fields # every me := self.fields$foreachpublic() do { write(f,"procedure ",self.name,"_",me,"(self)") if \strict then { write(f," if type(self.",me,") == ", "(\"list\"|\"table\"|\"set\"|\"record\") then\n", " runerr(501,\"idol: scalar type expected\")") } write(f," return .(self.",me,")") write(f,"end") write(f) } close(f) end # # resolve -- primary inheritance resolution utility # method resolve() # # these are lists of [class , ident] records # self.imethods := [] self.ifields := [] ipublics := [] addedfields := table() addedmethods := table() every sc := $!self.supers do { if /(superclass := classes$lookup(sc)) then halt("class/resolve: couldn't find superclass ",sc) every superclassfield := superclass$foreachfield() do { if /self.fields$lookup(superclassfield) & /addedfields[superclassfield] then { addedfields[superclassfield] := superclassfield put ( self.ifields , classident(sc,superclassfield) ) if superclass$ispublic(superclassfield) then put( ipublics, classident(sc,superclassfield) ) } else if \strict then { warn("class/resolve: '",sc,"' field '",superclassfield, "' is redeclared in subclass ",self.name) } } every superclassmethod := (superclass$foreachmethod())$name() do { if /self.methods$lookup(superclassmethod) & /addedmethods[superclassmethod] then { addedmethods[superclassmethod] := superclassmethod put ( self.imethods, classident(sc,superclassmethod) ) } } every public := (!ipublics) do { if public.class == sc then put (self.imethods, classident(sc,public.ident)) } } end end # # a class defining operations on methods and procedures # class method : declaration (class,text) method read(line,phase) self$declaration.read(line) self.text := body() if phase = 1 then self.text$read() end method writedecl(f,s) decl := self$String() if s == "method" then decl[1:upto(white,decl)] := "method" else { decl[1:upto(white,decl)] := "procedure" if *(self.class)>0 then { decl[upto(white,decl)] ||:= self.class||"_" i := find("(",decl) decl[i] ||:= "self" || (((decl[i+1] ~== ")"), ",") | "") } } write(f,decl) end method write(f) if self.name ~== "initially" then self$writedecl(f,"procedure") self.text$write(f) self.text := &null # after writing out text, forget it! end end # # a class corresponding to an Icon table, with special treatment of empties # class Table(t) method size() return (* \ self.t) | 0 end method insert(x,key) /self.t := table() /key := x if *G VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.IOL;1N;1-ٓ/ (self.t[key]) := x then return end method lookup(key) if t := \self.t then return t[key] return end method foreach() if t := \self.t then every suspend !self.t end end # # tabular queues (taques): # a class defining objects which maintain synchronized list and table reps # Well, what is really provided are loosely-coordinated list/tables # class taque : Table (l) method insert(x,key) /self.l := [] if self$Table.insert(x,key) then put(self.l,x) end method foreach() if l := \self.l then every suspend !self.l end method insert_t(x,key) self$Table.insert(x,key) end method foreach_t() suspend self$Table.foreach() end end # # support for taques found as lists of ids separated by punctuation # constructor called with (separation char, source string) # class idTaque : taque(punc) method parse(s) s ? { tab(many(white)) while name := tab(find(self.punc)) do { self$insert(trim(name)) move(1) tab(many(white)) } if any(nonwhite) then self$insert(trim(tab(0))) } return end method String() if /self.l then return "" out := "" every id := !self.l do out ||:= id||self.punc return out[1:-1] end end # # parameter lists in which the final argument may have a trailing [] # class argList : idTaque(public varg) method insert(s) if \self.varg then halt("variable arg must be final") if i := find("[",s) then { if not (j := find("]",s)) then halt("variable arg expected ]") s[i : j+1] := "" self.varg := s := trim(s) } self$idTaque.insert(s) end method isvarg(s) if s == \self.varg then return s end method String() return self$idTaque.String() || ((\self.varg & "[]") | "") end initially self.punc := "," end # # Idol class field lists in which fields may be preceded by a "public" keyword # class classFields : argList(publics) method String(s) if *(rv := self$argList.String()) = 0 then return "" if /s | (s ~== "class") then return rv if self$ispublic(self.l[1]) then rv := "public "||rv every field:=self$foreachpublic() do rv[find(","||field,rv)] ||:= "public " return rv end method foreachpublic() if \self.publics then every suspend !self.publics end method ispublic(s) if \self.publics then every suspend !self.publics == s end method insert(s) s ? { if ="public" & tab(many(white)) then { s := tab(0) /self.publics := [] put(self.publics,s) } } self$argList.insert(s) end initially self.punc := "," end # # procedure to read a single Idol source file # procedure readinput(name,phase,ct2) if \loud then write("\t",name) fName := name fLine := 0 fin := sysopen(name,"r") ct := \ct2 | constant() while line := readln("wrap") do { line ? { tab(many(white)) if ="class" then { decl := class() decl$read(line,phase) if phase=1 then { decl$writemethods() classes$insert(decl,decl$name()) } else classes$insert_t(decl,decl$name()) } else if ="procedure" then { if comp = 0 then comp := 1 decl := method("") decl$read(line,phase) decl$write(fout,"") } else if ="record" then { if comp = 0 then comp := 1 decl := declaration(line) decl$write(fout,"") } else if ="global" then { if comp = 0 then comp := 1 decl := vardecl(line) decl$write(fout,"") } else if ="const" then { ct$append ( constdcl(line) ) } else if ="method" then { halt("readinput: method outside class") } else if ="#include" then { savedFName := fName savedFLine := fLine savedFIn := fin tab(many(white)) readinput(tab(if ="\"" then find("\"") else many(nonwhite)), phase,ct) fName := savedFName fLine := savedFLine fin := savedFIn } } } close(fin) end # # filter the input translating $ references # (also eats comments and trims lines) # procedure readln(wrap) count := 0 prefix := "" while /finished do { if not (line := read(fin)) then fail fLine +:= 1 if match("#include",line) then return line line[ 1(x<-find("#",line),notquote(line[1:x])) : 0] := "" line := trim(line,white) # line := selfdot(line) x := 1 while ((x := find("$",line,x)) & notquote(line[1:x])) do { z := line[x+1:0] ||" " # " " is for bal() case line[x+1] of { # # IBM 370 digraphs # "(": line[x+:2] := "{" ")": line[x+:2] := "}" "<": line[x+:2] := "[" ">": line[x+:2] := "]" # # Invocation operators $! $* $@ $? (for $$ see below) # "!"|"*"|"@"|"?": { z ? { move(1) tab(many(white)) if not (id := tab(many(alphadot))) then { if not match("(") then halt("readln can't parse ",line) if not (id := tab(&pos=(x+methlen+1))|0)\1)] := front || methodname || back || c } } # case } # while there's a $ to process if /wrap | (prefix==line=="") then finished := line else { prefix ||:= line || " " # " " is for bal() prefix ? { # we are done if the line is balanced wrt parens and # doesn't end in a continuation character (currently just ,) if ((*prefix = bal()) & (not find(",",prefix[-2]))) then finished := prefix[1:-1] } } } # while / finished return ct$expand(finished) end h*[V9.IPL.PACKS.IDOL]IDOL.MAN;1+,./ 4-0123KPWO5607O89Jj$GHJ+4 VMS.BCK[V9.IPL.PACKS.IDOL]IDOL.MAN;1CN;12 NAME idol - Icon-Derived Object Language SYNOPSIS idol [ option ... ] mainfile otherfiles... [-x arguments] DESCRIPTION Idol is an object-oriented preprocessor for Version 8+ Icon. It is a front-end for icont(1); typically one invokes idol on a source file (extension .iol) which is translated into an Icon source file (extension .icn) which is translated into a file suitable for interpretation by the Icon interpreter. On systems with directories, Idol typically stores its generated class library code in a separate directory from the source code. If the environment variable IDOLENV is defined, Idol uses this directory for generated code. If no IDOLENV is defined, Idol creates a subdirectory named idolcode.env, and removes it after successful compilation if the creation occurred for a single source file. Producing an executable is skipped when the first file on the list contains only classes and no Icon entities. Idol uses an Icon translator selected by the environment variable ICONT, if it is present. The following options are recognized by idol: -c Suppress the linking phase -t Suppress all translation by icont -s Suppress removal of .icn files after translation by icont -quiet Suppress most Idol-specific console messages -strict Generate code that is paranoid about ensuring encapsulation -version Print out the version of Idol and its date of creation -ic Generate code to create Icon-compatible class libraries The second and following files on the command line may include extensions .icn, .u1, and .cl. The first two Idol treats as Icon source code which should be translated and linked into the resulting executable. Files with extension .cl are treated as class names which are linked into the resulting executable. If no extension is given, Idol attempts to find the desired source file by appending .iol, .icn, .u1, or .cl in that order. FILES prog.iol : source file prog.icn : code generated for non-classes in prog.iol idolcode.env/i_object.* : Icon code for the universal object type idolcode.env/classname.icn : Icon files are generated for each class idolcode.env/classname.u[12] : translated class files idolcode.env/classname : class specification/interface SEE ALSO "Programming in Idol: An Object Primer" (U of Arizona Dept of CS Technical Report #90-10) serves as user's guide and reference manual for Idol l!*[V9.IPL.PACKS.IDOL]IDOLBOOT.ICN;1+,.N/ 4NM-0123KPWOO56pU7;89Jj$GHJglobal fin,fout,fName,fLine,alpha,alphadot,white,nonwhite,nonalpha global classes,comp,exec,strict,links,imports,loud,compiles,compatible,ct procedure gencode() #line 11 "idol.iol" if \loud then write("Class import/export:") every cl := (__self1 := classes).__methods.foreach_t(__self1.__state) do (__self2 := cl).__methods.writespec(__self2.__state) repeat { added := 0 every super:= ((__self2 := ((__self1 := classes).__methods.foreach_t(__self1.__state))).__methods.foreachsuper(__self2.__state) | !imports) do{ if /(__self1 := classes).__methods.lookup(__self1.__state,super) then { added := 1 fname := filename(super) readinput(envpath(fname),2) if /(__self1 := classes).__methods.lookup(__self1.__state,super) then halt("can't import class '",super,"'") writesublink(fname) } } if added = 0 then break } every (__self2 := ((__self1 := classes).__methods.foreach_t(__self1.__state))).__methods.transitive_closure(__self2.__state) if \loud then write("Generating code:") writesublink("i_object") every s := !links do writelink(s) write(fout) every out := (__self1 := classes).__methods.foreach(__self1.__state) do { name := filename((__self1 := out).__methods.name(__self1.__state)) (__self1 := out).__methods.write(__self1.__state) put(compiles,name) writesublink(name) } if *compiles>0 then return cdicont(compiles) else return end procedure readinput(name,phase,ct2) #line 686 "idol.iol" if \loud then write("\t",name) fName := name fLine := 0 fin := sysopen(name,"r") ct := \ct2 | constant() while line := readln("wrap") do { line ? { tab(many(white)) if ="class" then { decl := class() (__self1 := decl).__methods.read(__self1.__state,line,phase) if phase=1 then { (__self1 := decl).__methods.writemethods(__self1.__state) (__self1 := classes).__methods.insert(__self1.__state,decl,(__self2 := decl).__methods.name(__self2.__state)) } else (__self1 := classes).__methods.insert_t(__self1.__state,decl,(__self2 := decl).__methods.name(__self2.__state)) } else if ="procedure" then { if comp = 0 then comp := 1 decl := method("") (__self1 := decl).__methods.read(__self1.__state,line,phase) (__self1 := decl).__methods.write(__self1.__state,fout,"") } else if ="record" then { if comp = 0 then comp := 1 decl := declaration(line) (__self1 := decl).__methods.write(__self1.__state,fout,"") } else if ="global" then { if comp = 0 then comp := 1 decl := vardecl(line) (__self1 := decl).__methods.write(__self1.__state,fout,"") } else if ="const" then { (__self1 := ct).__methods.append(__self1.__state,constdcl(line) ) } else if ="method" then { halt("readinput: method outside class") } else if ="#include" then { savedFName := fName savedFLine := fLine savedFIn := fin tab(many(white)) readinput(tab(if ="\"" then find("\"") else many(nonwhite)), phase,ct) fName := savedFName fLine := savedFLine fin := savedFIn } } } close(fin) end procedure readln(wrap) #line 745 "idol.iol" count := 0 prefix := "" while /finished do { if not (line := read(fin)) then fail fLine +:= 1 if match("#include",line) then return line line[ 1(x<-find("#",line),notquote(line[1:x])) : 0] := "" line := trim(line,white) x := 1 while ((x := find("$",line,x)) & notquote(line[1:x])) do { z := line[x+1:0] ||" " case line[x+1] of { "(": line[x+:2] := "{" ")": line[x+:2] := "}" "<": line[x+:2] := "[" ">": line[x+:2] := "]" "!"|"*"|"@"|"?": { z ? { move(1) tab(many(white)) if not (id := tab(many(alphadot))) then { if not match("(") then halt("readln can't parse ",line) if not (id := tab(&pos=(x+methlen+1))|0)\1)] := front || methodname || back || c } } } if /wrap | (prefix==line=="") then finished := line else { prefix ||:= line || " " prefix ? { if ((*prefix = bal()) & (not find(",",prefix[-2]))) then finished := prefix[1:-1] } } } return (__self1 := ct).__methods.expand(__self1.__state,finished) end record idol_object(__state,__methods) procedure declaration_read(self,decl) #line 63 "idol.iol" decl ? ( (tab(many(white)) | "") , (self.tag := =("procedure"|"class"|"method"|"record")) , (tab(many(white)) | "") , (self.name := tab(many(alpha))) , (tab(find("(")+1)), (tab(many(white)) | "") , ((__self1 := (self.fields := classFields())).__methods.parse(__self1.__state,tab(find(")")))) ) | halt("declaration/read can't parse decl ",decl) end procedure declaration_write(self,f) #line 81 "idol.iol" write(f,(__self1 := self).__methods.String(__self1.__state)) end procedure declaration_String(self) #line 87 "idol.iol" return self.tag || " " || self.name || "(" || (__self1 := self.fields).__methods.String(__self1.__state) || ")" end record declaration__state(__state,__methods,name,fields,tag) record declaration__methods(read,write,String,name) global declaration__oprec procedure declaration(name,fields,tag) local self,clone initial { if /declaration__oprec then declarationinitialize() } self := declaration__state(&null,declaration__oprec,name,fields,tag) self.__state := self declarationinitially(self) return idol_object(self,declaration__oprec) end procedure declarationinitialize() initial declaration__oprec := declaration__methods(declaration_read,declaration_write,declaration_String,declaration_name) end procedure declarationinitially(self) #line 90 "idol.iol" if \self.name then (__self1 := self).__methods.read(__self1.__state,self.name) end procedure declaration_name(self) return .(self.name) end procedure vardecl_write(self,f) #line 98 "idol.iol" write(f,self.s) end record vardecl__state(__state,__methods,s) record vardecl__methods(write) global vardecl__oprec procedure vardecl(s) local self,clone initial { if /vardecl__oprec then vardeclinitialize() } self := vardecl__state(&null,vardecl__oprec,s) self.__state := self return idol_object(self,vardecl__oprec) end procedure vardeclinitialize() initial vardecl__oprec := vardecl__methods(vardecl_write) end procedure constant_expand(self,s) #line 107 "idol.iol" i := 1 while ((i <- find(k <- (__self1 := self).__methods.foreach(__self1.__state),s,i)) & ((i=1) | any(nonalpha,s[i-1])) & ((*s = i+*k-1) | any(nonalpha,s[i+*k])) & notquote(s[1:i])) do { val := \ (self.t[k]) | stop("internal error in expand") s[i +: *k] := val } return s end procedure constant_foreach(self) #line 122 "idol.iol" suspend key(self.t) end procedure constant_eval(self,s) #line 125 "idol.iol" if s2 := \ self.t[s] then return s2 end procedure constant_parse(self,s) #line 128 "idol.iol" s ? { k := trim(tab(find(":="))) | fail move(2) tab(many(white)) val := tab(0) | fail (*val > 0) | fail self.t [ k ] := val } return end procedure constant_append(self,cd) #line 139 "idol.iol" every s := (__self1 := cd).__methods.parse(__self1.__state)do (__self2 := self).__methods.parse(__self2.__state,s) end record constant__state(__state,__methods,t) record constant__methods(expand,foreach,eval,parse,append) global constant__oprec procedure constant(t) local self,clone initial { if /constant__oprec then constantinitialize() } self := constant__state(&null,constant__oprec,t) self.__state := self constantinitially(self) return idol_object(self,constant__oprec) end procedure constantinitialize() initial constant__oprec := constant__methods(constant_expand,constant_foreach,constant_eval,constant_parse,constant_append) end procedure constantinitially(self) #line 142 "idol.iol" self.t := table() end procedure constdcl_parse(self) #line 151 "idol.iol" self.s ? { tab(find("const")+6) tab(many(white)) while s2 := trim(tab(find(","))) do { suspend s2 move(1) tab(many(white)) } suspend trim(tab(0)) } end record constdcl__state(__state,__methods,s) record constdcl__methods(parse,write,vardecl) global constdcl__oprec, vardecl__oprec procedure constdcl(s) local self,clone initial { if /constdcl__oprec then constdclinitialize() if /vardecl__oprec then vardeclinitialize() constdcl__oprec.vardecl := vardecl__oprec } self := constdcl__state(&null,constdcl__oprec,s) self.__state := self return idol_object(self,constdcl__oprec) end procedure constdclinitialize() initial constdcl__oprec := constdcl__methods(constdcl_parse,vardecl_write) end procedure body_read(self) #line 170 "idol.iol" self.fn := fName self.ln := fLine self.text := [] while line := readln() do { put(self.text, line) line ? { tab(many(white)) if ="end" & &pos > *line then return else if =("local"|"static"|"initial") & any(nonalpha) then { self.ln +:= 1 pull(self.text) / (self.vars) := [] put(self.vars, line) } } } halt("body/read: eof inside a procedure/method definition") end procedure body_write(self,f) #line 189 "idol.iol" if \self.vars then every write(f,!self.vars) if \compatible then write(f," \\self := self.__state") if \self.ln then write(f,"#line ",self.ln + ((*\self.vars)|0)," \"",self.fn,"\"") every write(f,(__self1 := self).__methods.foreach(__self1.__state)) end procedure body_delete(self) #line 196 "idol.iol" return pull(self.text) end procedure body_size(self) #line 199 "idol.iol" return (*\ (self.text)) | 0 end procedure body_foreach(self) #line 202 "idol.iol" if t := \self.text then suspend !self.text end record body__state(__state,__methods,fn,ln,vars,text) record body__methods(read,write,delete,size,foreach) global body__oprec procedure body(fn,ln,vars,text) local self,clone initial { if /body__oprec then bodyinitialize() } self := body__state(&null,body__oprec,fn,ln,vars,text) self.__state := self return idol_object(self,body__oprec) end procedure bodyinitialize() initial body__oprec := body__methods(body_read,body_write,body_delete,body_size,body_foreach) end procedure class_read(self,line,phase) #line 214 "idol.iol" (__self1 := self).__methods.declaration.read(__self1.__state,line) self.supers := idTaque(":") (__self1 := self.supers).__methods.parse(__self1.__state,line[find(":",line)+1:find("(",line)] | "") self.methods:= taque() self.text := body() while line := readln("wrap") do { line ? { tab(many(white)) if ="initially" then { (__self1 := self.text).__methods.read(__self1.__state) if phase=2 the"G( VMS.BCK![V9.IPL.PACKS.IDOL]IDOLBOOT.ICN;1Nyn return (__self1 := self.text).__methods.delete(__self1.__state) return } else if ="method" then { decl := method(self.name) (__self1 := decl).__methods.read(__self1.__state,line,phase) (__self1 := self.methods).__methods.insert(__self1.__state,decl,(__self2 := decl).__methods.name(__self2.__state)) } else if ="end" then { return } else if ="procedure" then { decl := method("") (__self1 := decl).__methods.read(__self1.__state,line,phase) /self.glob := [] put(self.glob,decl) } else if ="global" then { /self.glob := [] put(self.glob,vardecl(line)) } else if ="record" then { /self.glob := [] put(self.glob,declaration(line)) } else if upto(nonwhite) then { halt("class/read expected declaration on: ",line) } } } halt("class/read syntax error: eof inside a class definition") end procedure class_has_initially(self) #line 258 "idol.iol" return (__self1 := self.text).__methods.size(__self1.__state) > 0 end procedure class_ispublic(self,fieldname) #line 261 "idol.iol" if (__self1 := self.fields).__methods.ispublic(__self1.__state,fieldname) then return fieldname end procedure class_foreachmethod(self) #line 264 "idol.iol" suspend (__self1 := self.methods).__methods.foreach(__self1.__state) end procedure class_foreachsuper(self) #line 267 "idol.iol" suspend (__self1 := self.supers).__methods.foreach(__self1.__state) end procedure class_foreachfield(self) #line 270 "idol.iol" suspend (__self1 := self.fields).__methods.foreach(__self1.__state) end procedure class_isvarg(self,s) #line 273 "idol.iol" if (__self1 := self.fields).__methods.isvarg(__self1.__state,s) then return s end procedure class_transitive_closure(self) #line 276 "idol.iol" count := (__self1 := self.supers).__methods.size(__self1.__state) while count > 0 do { added := taque() every sc := (__self1 := self.supers).__methods.foreach(__self1.__state) do { if /(super := (__self1 := classes).__methods.lookup(__self1.__state,sc)) then halt("class/transitive_closure: couldn't find superclass ",sc) every supersuper := (__self1 := super).__methods.foreachsuper(__self1.__state) do { if / (__self1 := self.supers).__methods.lookup(__self1.__state,supersuper) & /(__self1 := added).__methods.lookup(__self1.__state,supersuper) then { (__self1 := added).__methods.insert(__self1.__state,supersuper) } } } count := (__self1 := added).__methods.size(__self1.__state) every (__self1 := self.supers).__methods.insert(__self1.__state,(__self2 := added).__methods.foreach(__self2.__state)) } end procedure class_writedecl(self,f,s) #line 298 "idol.iol" writes(f, s," ",self.name) if s=="class" & ( *(supers := (__self1 := self.supers).__methods.String(__self1.__state)) > 0 ) then writes(f," : ",supers) writes(f,"(") rv := (__self1 := self.fields).__methods.String(__self1.__state,s) if *rv > 0 then rv ||:= "," if s~=="class" & *(\self.ifields)>0 then { every l := !self.ifields do rv ||:= l.ident || "," if /(superclass := (__self1 := classes).__methods.lookup(__self1.__state,l.class)) then halt("class/resolve: couldn't find superclass ",sc) if (__self1 := superclass).__methods.isvarg(__self1.__state,l.ident) then rv := rv[1:-1]||"[]," } writes(f,rv[1:-1]) write(f,,")") end procedure class_writespec(self,f) #line 314 "idol.iol" f := envopen(filename(self.name),"w") (__self1 := self).__methods.writedecl(__self1.__state,f,"class") every (__self2 := ((__self1 := self.methods).__methods.foreach(__self1.__state))).__methods.writedecl(__self2.__state,f,"method") if (__self1 := self).__methods.has_initially(__self1.__state) then write(f,"initially") write(f,"end") close(f) end procedure class_writemethods(self) #line 327 "idol.iol" f:= envopen(filename(self.name,".icn"),"w") every (__self2 := ((__self1 := self.methods).__methods.foreach(__self1.__state))).__methods.write(__self2.__state,f,self.name) if \self.glob & *self.glob>0 then { write(f,"#\n# globals declared within the class\n#") every i := 1 to *self.glob do (__self1 := (self.glob[i])).__methods.write(__self1.__state,f,"") } close(f) end procedure class_write(self) #line 341 "idol.iol" f:= envopen(filename(self.name,".icn"),"a") if /self.ifields then (__self1 := self).__methods.resolve(__self1.__state) writes(f,"record ",self.name,"__state(__state,__methods") rv := "," rv ||:= (__self1 := self.fields).__methods.idTaque.String(__self1.__state) if rv[-1] ~== "," then rv ||:= "," every s := (!self.ifields).ident do rv ||:= s || "," write(f,rv[1:-1],")") writes(f,"record ",self.name,"__methods(") rv := "" every s := (((__self2 := ((__self1 := self.methods).__methods.foreach(__self1.__state))).__methods.name(__self2.__state)) | (__self1 := self.fields).__methods.foreachpublic(__self1.__state) | (!self.imethods).ident | (__self1 := self.supers).__methods.foreach(__self1.__state)) do rv ||:= s || "," if *rv>0 then rv[-1] := "" write(f,rv,")") writes(f,"global ",self.name,"__oprec") every writes(f,", ", (__self1 := self.supers).__methods.foreach(__self1.__state),"__oprec") write(f) (__self1 := self).__methods.writedecl(__self1.__state,f,"procedure") write(f,"local self,clone") write(f,"initial {\n", " if /",self.name,"__oprec then ",self.name,"initialize()") if (__self1 := self.supers).__methods.size(__self1.__state) > 0 then every (super <- (__self1 := self.supers).__methods.foreach(__self1.__state)) ~== self.name do write(f," if /",super,"__oprec then ",super,"initialize()\n", " ",self.name,"__oprec.",super," := ", super,"__oprec") write(f," }") writes(f," self := ",self.name,"__state(&null,",self.name,"__oprec") every writes(f,",",(__self1 := self.fields).__methods.foreach(__self1.__state)) if \self.ifields then every writes(f,",",(!self.ifields).ident) write(f,")\n self.__state := self") if (__self1 := self.text).__methods.size(__self1.__state) > 0 then write(f," ",self.name,"initially(self)") if (__self1 := self.supers).__methods.size(__self1.__state) > 0 then { every (super <- (__self1 := self.supers).__methods.foreach(__self1.__state)) ~== self.name do { if (__self2 := ((__self1 := classes).__methods.lookup(__self1.__state,super))).__methods.has_initially(__self2.__state) then { if /madeclone := 1 then { write(f," clone := ",self.name,"__state()\n", " clone.__state := clone\n", " clone.__methods := ",self.name,"__oprec") } write(f," # inherited initialization from class ",super) write(f," every i := 2 to *self do clone[i] := self[i]\n", " ",super,"initially(clone)") every l := !self.ifields do { if l.class == super then write(f," self.",l.ident," := clone.",l.ident) } } } } write(f," return idol_object(self,",self.name,"__oprec)\n", "end\n") write(f,"procedure ",self.name,"initialize()") writes(f," initial ",self.name,"__oprec := ",self.name,"__methods") rv := "(" every s := (__self2 := ((__self1 := self.methods).__methods.foreach(__self1.__state))).__methods.name(__self2.__state) do { if *rv>1 then rv ||:= "," rv ||:= self.name||"_"||s } every me := (__self1 := self.fields).__methods.foreachpublic(__self1.__state) do { if *rv>1 then rv ||:= "," rv ||:= self.name||"_"||me } every l := !self.imethods do { if *rv>1 then rv ||:=Eh VMS.BCK![V9.IPL.PACKS.IDOL]IDOLBOOT.ICN;1N.u( "," rv ||:= l.class||"_"||l.ident } write(f,rv,")\n","end") if (__self1 := self).__methods.has_initially(__self1.__state) then { write(f,"procedure ",self.name,"initially(self)") (__self1 := self.text).__methods.write(__self1.__state,f) write(f,"end") } every me := (__self1 := self.fields).__methods.foreachpublic(__self1.__state) do { write(f,"procedure ",self.name,"_",me,"(self)") if \strict then { write(f," if type(self.",me,") == ", "(\"list\"|\"table\"|\"set\"|\"record\") then\n", " runerr(501,\"idol: scalar type expected\")") } write(f," return .(self.",me,")") write(f,"end") write(f) } close(f) end procedure class_resolve(self) #line 492 "idol.iol" self.imethods := [] self.ifields := [] ipublics := [] addedfields := table() addedmethods := table() every sc := (__self1 := self.supers).__methods.foreach(__self1.__state) do { if /(superclass := (__self1 := classes).__methods.lookup(__self1.__state,sc)) then halt("class/resolve: couldn't find superclass ",sc) every superclassfield := (__self1 := superclass).__methods.foreachfield(__self1.__state) do { if /(__self1 := self.fields).__methods.lookup(__self1.__state,superclassfield) & /addedfields[superclassfield] then { addedfields[superclassfield] := superclassfield put ( self.ifields , classident(sc,superclassfield) ) if (__self1 := superclass).__methods.ispublic(__self1.__state,superclassfield) then put( ipublics, classident(sc,superclassfield) ) } else if \strict then { warn("class/resolve: '",sc,"' field '",superclassfield, "' is redeclared in subclass ",self.name) } } every superclassmethod := (__self2 := ((__self1 := superclass).__methods.foreachmethod(__self1.__state))).__methods.name(__self2.__state) do { if /(__self1 := self.methods).__methods.lookup(__self1.__state,superclassmethod) & /addedmethods[superclassmethod] then { addedmethods[superclassmethod] := superclassmethod put ( self.imethods, classident(sc,superclassmethod) ) } } every public := (!ipublics) do { if public.class == sc then put (self.imethods, classident(sc,public.ident)) } } end # # globals declared within the class # record classident(class,ident) record class__state(__state,__methods,supers,methods,text,imethods,ifields,glob,name,fields,tag) record class__methods(read,has_initially,ispublic,foreachmethod,foreachsuper,foreachfield,isvarg,transitive_closure,writedecl,writespec,writemethods,write,resolve,String,name,declaration) global class__oprec, declaration__oprec procedure class(supers,methods,text,imethods,ifields,glob,name,fields,tag) local self,clone initial { if /class__oprec then classinitialize() if /declaration__oprec then declarationinitialize() class__oprec.declaration := declaration__oprec } self := class__state(&null,class__oprec,supers,methods,text,imethods,ifields,glob,name,fields,tag) self.__state := self clone := class__state() clone.__state := clone clone.__methods := class__oprec # inherited initialization from class declaration every i := 2 to *self do clone[i] := self[i] declarationinitially(clone) self.name := clone.name self.fields := clone.fields self.tag := clone.tag return idol_object(self,class__oprec) end procedure classinitialize() initial class__oprec := class__methods(class_read,class_has_initially,class_ispublic,class_foreachmethod,class_foreachsuper,class_foreachfield,class_isvarg,class_transitive_closure,class_writedecl,class_writespec,class_writemethods,class_write,class_resolve,declaration_String,declaration_name) end procedure method_read(self,line,phase) #line 535 "idol.iol" (__self1 := self).__methods.declaration.read(__self1.__state,line) self.text := body() if phase = 1 then (__self1 := self.text).__methods.read(__self1.__state) end procedure method_writedecl(self,f,s) #line 541 "idol.iol" decl := (__self1 := self).__methods.String(__self1.__state) if s == "method" then decl[1:upto(white,decl)] := "method" else { decl[1:upto(white,decl)] := "procedure" if *(self.class)>0 then { decl[upto(white,decl)] ||:= self.class||"_" i := find("(",decl) decl[i] ||:= "self" || (((decl[i+1] ~== ")"), ",") | "") } } write(f,decl) end procedure method_write(self,f) #line 554 "idol.iol" if self.name ~== "initially" then (__self1 := self).__methods.writedecl(__self1.__state,f,"procedure") (__self1 := self.text).__methods.write(__self1.__state,f) self.text := &null end record method__state(__state,__methods,class,text,name,fields,tag) record method__methods(read,writedecl,write,String,name,declaration) global method__oprec, declaration__oprec procedure method(class,text,name,fields,tag) local self,clone initial { if /method__oprec then methodinitialize() if /declaration__oprec then declarationinitialize() method__oprec.declaration := declaration__oprec } self := method__state(&null,method__oprec,class,text,name,fields,tag) self.__state := self clone := method__state() clone.__state := clone clone.__methods := method__oprec # inherited initialization from class declaration every i := 2 to *self do clone[i] := self[i] declarationinitially(clone) self.name := clone.name self.fields := clone.fields self.tag := clone.tag return idol_object(self,method__oprec) end procedure methodinitialize() initial method__oprec := method__methods(method_read,method_writedecl,method_write,declaration_String,declaration_name) end procedure Table_size(self) #line 566 "idol.iol" return (* \ self.t) | 0 end procedure Table_insert(self,x,key) #line 569 "idol.iol" /self.t := table() /key := x if / (self.t[key]) := x then return end procedure Table_lookup(self,key) #line 574 "idol.iol" if t := \self.t then return t[key] return end procedure Table_foreach(self) #line 578 "idol.iol" if t := \self.t then every suspend !self.t end record Table__state(__state,__methods,t) record Table__methods(size,insert,lookup,foreach) global Table__oprec procedure Table(t) local self,clone initial { if /Table__oprec then Tableinitialize() } self := Table__state(&null,Table__oprec,t) self.__state := self return idol_object(self,Table__oprec) end procedure Tableinitialize() initial Table__oprec := Table__methods(Table_size,Table_insert,Table_lookup,Table_foreach) end procedure taque_insert(self,x,key) #line 589 "idol.iol" /self.l := [] if (__self1 := self).__methods.Table.insert(__self1.__state,x,key) then put(self.l,x) end procedure taque_foreach(self) #line 593 "idol.iol" if l := \self.l then every suspend !self.l end procedure taque_insert_t(self,x,key) #line 596 "idol.iol" (__self1 := self).__methods.Table.insert(__self1.__state,x,key) end procedure taque_foreach_t(self) #line 599 "idol.iol" suspend (__self1 := self).__methods.Table.foreach(__self1.__state) end record taque__state(__state,__methods,l,t) record taque__methods(insert,foreach,insert_t,foreach_t,size,lookup,Table) global taque__oprec, Table__oprec procedure taque(l,t) local self,clone initial { if /taque__oprec then taqueinitialize() if /Table__oprec then Tableinitialize() taque__oprec.Table := Table__oprec } self := taque__state(&null,taque__oprec,l,t) self.__state := self return idol_object(self,taque__oprec) end procedure taqueinitialize() initial taque__oprec := taque__methods(taque_insert,taque_foreach,taque_insert_t,taque_foreach_t,Table_size,Table_lookup) end procedure idTaque_parse(self,s) #line 609 < VMS.BCK![V9.IPL.PACKS.IDOL]IDOLBOOT.ICN;1N7"idol.iol" s ? { tab(many(white)) while name := tab(find(self.punc)) do { (__self1 := self).__methods.insert(__self1.__state,trim(name)) move(1) tab(many(white)) } if any(nonwhite) then (__self1 := self).__methods.insert(__self1.__state,trim(tab(0))) } return end procedure idTaque_String(self) #line 621 "idol.iol" if /self.l then return "" out := "" every id := !self.l do out ||:= id||self.punc return out[1:-1] end record idTaque__state(__state,__methods,punc,l,t) record idTaque__methods(parse,String,insert,foreach,insert_t,foreach_t,size,lookup,taque,Table) global idTaque__oprec, taque__oprec, Table__oprec procedure idTaque(punc,l,t) local self,clone initial { if /idTaque__oprec then idTaqueinitialize() if /taque__oprec then taqueinitialize() idTaque__oprec.taque := taque__oprec if /Table__oprec then Tableinitialize() idTaque__oprec.Table := Table__oprec } self := idTaque__state(&null,idTaque__oprec,punc,l,t) self.__state := self return idol_object(self,idTaque__oprec) end procedure idTaqueinitialize() initial idTaque__oprec := idTaque__methods(idTaque_parse,idTaque_String,taque_insert,taque_foreach,taque_insert_t,taque_foreach_t,Table_size,Table_lookup) end procedure argList_insert(self,s) #line 633 "idol.iol" if \self.varg then halt("variable arg must be final") if i := find("[",s) then { if not (j := find("]",s)) then halt("variable arg expected ]") s[i : j+1] := "" self.varg := s := trim(s) } (__self1 := self).__methods.idTaque.insert(__self1.__state,s) end procedure argList_isvarg(self,s) #line 642 "idol.iol" if s == \self.varg then return s end procedure argList_String(self) #line 645 "idol.iol" return (__self1 := self).__methods.idTaque.String(__self1.__state) || ((\self.varg & "[]") | "") end record argList__state(__state,__methods,varg,punc,l,t) record argList__methods(insert,isvarg,String,varg,parse,foreach,insert_t,foreach_t,size,lookup,idTaque,taque,Table) global argList__oprec, idTaque__oprec, taque__oprec, Table__oprec procedure argList(varg,punc,l,t) local self,clone initial { if /argList__oprec then argListinitialize() if /idTaque__oprec then idTaqueinitialize() argList__oprec.idTaque := idTaque__oprec if /taque__oprec then taqueinitialize() argList__oprec.taque := taque__oprec if /Table__oprec then Tableinitialize() argList__oprec.Table := Table__oprec } self := argList__state(&null,argList__oprec,varg,punc,l,t) self.__state := self argListinitially(self) return idol_object(self,argList__oprec) end procedure argListinitialize() initial argList__oprec := argList__methods(argList_insert,argList_isvarg,argList_String,argList_varg,idTaque_parse,taque_foreach,taque_insert_t,taque_foreach_t,Table_size,Table_lookup) end procedure argListinitially(self) #line 648 "idol.iol" self.punc := "," end procedure argList_varg(self) return .(self.varg) end procedure classFields_String(self,s) #line 656 "idol.iol" if *(rv := (__self1 := self).__methods.argList.String(__self1.__state)) = 0 then return "" if /s | (s ~== "class") then return rv if (__self1 := self).__methods.ispublic(__self1.__state,self.l[1]) then rv := "public "||rv every field:=(__self1 := self).__methods.foreachpublic(__self1.__state) do rv[find(","||field,rv)] ||:= "public " return rv end procedure classFields_foreachpublic(self) #line 663 "idol.iol" if \self.publics then every suspend !self.publics end procedure classFields_ispublic(self,s) #line 666 "idol.iol" if \self.publics then every suspend !self.publics == s end procedure classFields_insert(self,s) #line 669 "idol.iol" s ? { if ="public" & tab(many(white)) then { s := tab(0) /self.publics := [] put(self.publics,s) } } (__self1 := self).__methods.argList.insert(__self1.__state,s) end record classFields__state(__state,__methods,publics,varg,punc,l,t) record classFields__methods(String,foreachpublic,ispublic,insert,isvarg,varg,parse,foreach,insert_t,foreach_t,size,lookup,argList,idTaque,taque,Table) global classFields__oprec, argList__oprec, idTaque__oprec, taque__oprec, Table__oprec procedure classFields(publics,varg,punc,l,t) local self,clone initial { if /classFields__oprec then classFieldsinitialize() if /argList__oprec then argListinitialize() classFields__oprec.argList := argList__oprec if /idTaque__oprec then idTaqueinitialize() classFields__oprec.idTaque := idTaque__oprec if /taque__oprec then taqueinitialize() classFields__oprec.taque := taque__oprec if /Table__oprec then Tableinitialize() classFields__oprec.Table := Table__oprec } self := classFields__state(&null,classFields__oprec,publics,varg,punc,l,t) self.__state := self classFieldsinitially(self) clone := classFields__state() clone.__state := clone clone.__methods := classFields__oprec # inherited initialization from class argList every i := 2 to *self do clone[i] := self[i] argListinitially(clone) self.varg := clone.varg return idol_object(self,classFields__oprec) end procedure classFieldsinitialize() initial classFields__oprec := classFields__methods(classFields_String,classFields_foreachpublic,classFields_ispublic,classFields_insert,argList_isvarg,argList_varg,idTaque_parse,taque_foreach,taque_insert_t,taque_foreach_t,Table_size,Table_lookup) end procedure classFieldsinitially(self) #line 679 "idol.iol" self.punc := "," end # # Idol: Icon-derived object language, version 8.0 # # SYNOPSIS: # # idol -install # idol prog[.iol] ... [-x args ] # prog # # FILES: # # ./prog.iol : source file # ./prog.icn : Icon code for non-classes in prog.iol # ./idolcode.env/i_object.* : Icon code for the universal object type # ./idolcode.env/classname.icn : Icon files are generated for each class # ./idolcode.env/classname.u[12] : translated class files # ./idolcode.env/classname : class specification/interface # # SEE ALSO: # # "Programming in Idol: An Object Primer" # (U of Arizona Dept of CS Technical Report #90-10) # serves as user's guide and reference manual for Idol # ### Global variables # # FILES : fin = input (.iol) file, fout = output (.icn) file # CSETS : alpha = identifier characters, nonalpha = everything else # alphadot = identifiers + '.' # white = whitespace, nonwhite = everything else # TAQUES : classes in this module # FLAGS : comp if we should try to make an executable from args[1] # strict if we should generate paranoic encapsulation protection # loud if Idol should generate extra console messages # exec if we should run the result after translation # LISTS : links = names of external icon code to link to # imports = names of external classes to import # compiles = names of classes which need to be compiled # global fin,fout,fName,fLine,alpha,alphadot,white,nonwhite,nonalpha global classes,comp,exec,strict,links,imports,loud,compiles,compatible,ct global icontopt,tempenv # # initialize global variables # procedure initialize() loud := 1 comp := 0 alpha := &ucase ++ &lcase ++ '_' ++ &digits nonalpha := &cset -- alpha alphadot := alpha ++ '.' white := ' \t\f' nonwhite := &cset -- white classes := taque() links := [] imports := [] compiles := [] sysinitialize() end procedure main(args) initialize() if *args = 0 then write("usage: idol files...") else { if (!args ~== "-version") & not tryenvopen(filename("i_object",".u1")) then { tempenv := 0 install(args) VMS.BCK![V9.IPL.PACKS.IDOL]IDOLBOOT.ICN;1NF } every i := 1 to *args do { if \exec then next # after -x, args are for execution if args[i][1] == "-" then { case map(args[i]) of { "-c" : { sysok := &null if comp = 0 then comp := -1 # don't make exe } "-ic" : compatible := 1 "-quiet" : loud := &null "-strict" : strict := 1 "-s" : sysok := &null "-t" : comp := -2 # don't translate "-version": return write("Idol version 8.0 of 10/6/90") & 0 "-x" : exec := i default : icontopt ||:= args[i] || " " } } else { \tempenv +:= 1 if args[i] := fileroot(args[i],".cl") then { push(imports,args[i]) } else if args[i] := fileroot(args[i],".icn") then { push(links,args[i]) icont(" -c "||args[i]) } else if args[i] := fileroot(args[i],".u1") then { push(links,args[i]) } else if (args[i] := fileroot(args[i],".iol")) | tryopen(filename(args[i],".iol"),"r") then { /exe := i args[i] := fileroot(args[i],".iol") /fout := sysopen(filename(args[i],".icn"),"w") readinput(filename(args[i],".iol"),1) } else { # # look for an appropriate .icn, .u1 or class file # if tryopen(filename(args[i],".icn"),"r") then { push(links,args[i]) icont(" -c "||args[i]) } else if tryopen(filename(args[i],".u1")) then { push(links,args[i]) } else if tryenvopen(args[i]) then { push(imports,args[i]) } } } } if gencode() then { close(\fout) if comp = 1 & (not makeexe(args,exe)) then stop("Idol exits after errors creating executable") } else { close(\fout) stop("Idol exits after errors translating") } } # # if we built an executable without separate compilation AND # there's no IDOLENV class environment AND # we had to install an environment then remove the environment # if (comp = 1) & (\tempenv < 2) & not getenv("IDOLENV") then uninstall() end # # tell whether the character following s is within a quote or not # procedure notquote(s) outs := "" # # eliminate escaped quotes. # this is a bug for people who write code like \"hello"... s ? { while outs ||:= tab(find("\\")+1) do move(1) outs ||:= tab(0) } # see if every quote has a matching endquote outs ? { while s := tab(find("\""|"'")+1) do { if not tab(find(s[-1])+1) then fail } } return end # # A contemplated addition: shorthand $.foo for self.foo ? # #procedure selfdot(line) # i := 1 # while ((i := find("$.",line,i)) & notquote(line[1:i])) do line[i]:="self" #end # # error/warning/message handling # procedure halt(args[]) errsrc() every writes(&errout,!args) stop() end procedure warn(args[]) errsrc() every writes(&errout,!args) write(&errout) end procedure errsrc() writes(&errout,"\"",\fName,"\", line ",\fLine,": Idol/") end # # System-independent, but system related routines # procedure tryopen(file,mode) if f := open(file,mode) then return close(f) end procedure tryenvopen(file,mode) return tryopen(envpath(file),mode) end procedure sysopen(file,mode) if not (f := open(file,mode)) then halt("Couldn't open file ",file," for mode ",mode) return f end procedure envopen(file,mode) return sysopen(envpath(file),mode) end procedure writelink(s) write(fout,"link \"",s,"\"") end procedure icont(argstr,prefix) static s initial { s := (getenv("ICONT")|"icont") } return mysystem((\prefix|"") ||s||icontopt||argstr) end ,!*[V9.IPL.PACKS.IDOL]IDOLMAIN.ICN;1+,. / 4 -0123KPWO 56p7pjV89Jj$GHJ # # Idol: Icon-derived object language, version 8.0 # # SYNOPSIS: # # idol -install # idol prog[.iol] ... [-x args ] # prog # # FILES: # # ./prog.iol : source file # ./prog.icn : Icon code for non-classes in prog.iol # ./idolcode.env/i_object.* : Icon code for the universal object type # ./idolcode.env/classname.icn : Icon files are generated for each class # ./idolcode.env/classname.u[12] : translated class files # ./idolcode.env/classname : class specification/interface # # SEE ALSO: # # "Programming in Idol: An Object Primer" # (U of Arizona Dept of CS Technical Report #90-10) # serves as user's guide and reference manual for Idol # ### Global variables # # FILES : fin = input (.iol) file, fout = output (.icn) file # CSETS : alpha = identifier characters, nonalpha = everything else # alphadot = identifiers + '.' # white = whitespace, nonwhite = everything else # TAQUES : classes in this module # FLAGS : comp if we should try to make an executable from args[1] # strict if we should generate paranoic encapsulation protection # loud if Idol should generate extra console messages # exec if we should run the result after translation # LISTS : links = names of external icon code to link to # imports = names of external classes to import # compiles = names of classes which need to be compiled # global fin,fout,fName,fLine,alpha,alphadot,white,nonwhite,nonalpha global classes,comp,exec,strict,links,imports,loud,compiles,compatible,ct global icontopt,tempenv # # initialize global variables # procedure initialize() loud := 1 comp := 0 alpha := &ucase ++ &lcase ++ '_' ++ &digits nonalpha := &cset -- alpha alphadot := alpha ++ '.' white := ' \t\f' nonwhite := &cset -- white classes := taque() links := [] imports := [] compiles := [] sysinitialize() end procedure main(args) initialize() if *args = 0 then write("usage: idol files...") else { if (!args ~== "-version") & not tryenvopen(filename("i_object",".u1")) then { tempenv := 0 install(args) } every i := 1 to *args do { if \exec then next # after -x, args are for execution if args[i][1] == "-" then { case map(args[i]) of { "-c" : { sysok := &null if comp = 0 then comp := -1 # don't make exe } "-ic" : compatible := 1 "-quiet" : loud := &null "-strict" : strict := 1 "-s" : sysok := &null "-t" : comp := -2 # don't translate "-version": return write("Idol version 8.0 of 10/6/90") & 0 "-x" : exec := i default : icontopt ||:= args[i] || " " } } else { \tempenv +:= 1 if args[i] := fileroot(args[i],".cl") then { push(imports,args[i]) } else if args[i] := fileroot(args[i],".icn") then { push(links,args[i]) icont(" -c "||args[i]) } else if args[i] := fileroot(args[i],".u1") thenP VMS.BCK![V9.IPL.PACKS.IDOL]IDOLMAIN.ICN;1  { push(links,args[i]) } else if (args[i] := fileroot(args[i],".iol")) | tryopen(filename(args[i],".iol"),"r") then { /exe := i args[i] := fileroot(args[i],".iol") /fout := sysopen(filename(args[i],".icn"),"w") readinput(filename(args[i],".iol"),1) } else { # # look for an appropriate .icn, .u1 or class file # if tryopen(filename(args[i],".icn"),"r") then { push(links,args[i]) icont(" -c "||args[i]) } else if tryopen(filename(args[i],".u1")) then { push(links,args[i]) } else if tryenvopen(args[i]) then { push(imports,args[i]) } } } } if gencode() then { close(\fout) if comp = 1 & (not makeexe(args,exe)) then stop("Idol exits after errors creating executable") } else { close(\fout) stop("Idol exits after errors translating") } } # # if we built an executable without separate compilation AND # there's no IDOLENV class environment AND # we had to install an environment then remove the environment # if (comp = 1) & (\tempenv < 2) & not mygetenv("IDOLENV") then uninstall() end # # tell whether the character following s is within a quote or not # procedure notquote(s) outs := "" # # eliminate escaped quotes. # this is a bug for people who write code like \"hello"... s ? { while outs ||:= tab(find("\\")+1) do move(1) outs ||:= tab(0) } # see if every quote has a matching endquote outs ? { while s := tab(find("\""|"'")+1) do { if not tab(find(s[-1])+1) then fail } } return end # # A contemplated addition: shorthand $.foo for self.foo ? # #procedure selfdot(line) # i := 1 # while ((i := find("$.",line,i)) & notquote(line[1:i])) do line[i]:="self" #end # # error/warning/message handling # procedure halt(args[]) errsrc() every writes(&errout,!args) stop() end procedure warn(args[]) errsrc() every writes(&errout,!args) write(&errout) end procedure errsrc() writes(&errout,"\"",\fName,"\", line ",\fLine,": Idol/") end # # System-independent, but system related routines # procedure tryopen(file,mode) if f := open(file,mode) then return close(f) end procedure tryenvopen(file,mode) return tryopen(envpath(file),mode) end procedure sysopen(file,mode) if not (f := open(file,mode)) then halt("Couldn't open file ",file," for mode ",mode) return f end procedure envopen(file,mode) return sysopen(envpath(file),mode) end procedure writelink(s) write(fout,"link \"",s,"\"") end procedure icont(argstr,prefix) static s initial { s := (mygetenv("ICONT")|"icont") } return mysystem((\prefix|"") ||s||icontopt||argstr) end procedure mygetenv(s) return if &features == "environment variables" then getenv(s) end e!*[V9.IPL.PACKS.IDOL]INCLTEST.IOL;1+,./ 4C-0123KPWO560_789Jj$GHJ#include events.iol procedure main() write("E_Tick ",E_Tick) end !*[V9.IPL.PACKS.IDOL]INDEXTST.IOL;1+,./ 4-0123KPWO56!7p89Jj$GHJclass indextst() method index(y) write("index(",y,")") end end procedure main() x := indextst() x $[ "hello, world" ] end  *[V9.IPL.PACKS.IDOL]INSTALL.BAT;1+,./ 4 -0123KPWO567R89Jj$GHJrem msdos Idol installation rem This compiles Idol in order to to test the system icont -Sr1000 -SF30 -Si1000 idolboot msdos mkdir idolcode.env iconx idolboot -t -install chdir idolcode.env icont -c i_object chdir .. iconx idolboot idol idolmain msdos idolt  *[V9.IPL.PACKS.IDOL]INVERSE.IOL;1+,./ 4-0123KPWO56p7 89Jj$GHJclass inverse:fraction(d) initially self.n := 1 end procedure main() x := inverse(2) y := fraction(3,4) z := x$times(y) write("The decimal equivalent of ",z$asString(), " is ",trim(z$asReal(),'0')) end *[V9.IPL.PACKS.IDOL]ITAGS.IOL;1+,./ 4-0123KPWO5607|89Jj$GHJ# itags - an Icon/Idol tag generator by Nick Kline # hacks (such as this header comment) by Clint Jeffery # last edit: 12/13/89 # # the output is a sorted list of lines of the form # identifier owning_scope category_type filename lineno(:length) # # owning scope is the name of the class or procedure or record in which # the tag is defined. # category type is the kind of tag; one of: # (global,procedure,record,class,method,param,obj_field,rec_field) # global ibrowseflag procedure main(args) local line, lineno, fout, i, fin, notvar, objects, actual_file, outlines initial { fout := open("ITAGS", "w") | stop("can't open ITAGS for writing"); outlines := [[0,0,0,0,0,0]] i := 1 notid := &cset -- &ucase -- &digits -- &lcase -- '_' } if(*args=0) then stop("usage: itags file1 [file2 ...]") while i <= *args do { if args[i] == "-i" then { ibrowseflag := 1 i +:= 1 continue } fin := open(args[i],"r") | stop("could not open file ",args[i]," exiting") lineno := 1 objectsG VMS.BCK[V9.IPL.PACKS.IDOL]ITAGS.IOL;1;1J := program( args[i] ) while line := read(fin) do { line[upto('#',line):0] := "" line ? { tab(many(' ')) if =("global") then { if(any(notid)) then every objects$addvar( getword(), lineno ) } if =("procedure") then if(any(notid)) then { objects$addproc( getword(), lineno ) objects$myline(tab(0),lineno) } if =("class") then if any(notid) then { objects$addclass( getword(), lineno ) objects$myline(tab(0),lineno) } if =("method") then { if any(notid) then { objects$addmethod( getword(), lineno ) objects$myline(tab(0),lineno) } } if =("local") then { if any(notid) then every objects$addvar( getword(), lineno ) } if =("static") then { if any(notid) then every objects$addstat( getword(), lineno ) } if =("record") then { if any(notid) then { objects$addrec( getword(), lineno ) objects$myline(tab(0),lineno) objects$endline( lineno) } } if =("end") then objects$endline(lineno) } lineno +:= 1 } objects$drawthyself(outlines) i +:= 1 } # now process all the resulting lines every i := 2 to *outlines do { outlines[i] := ( left(outlines[i][1],outlines[1][1]+1) || left(outlines[i][2],outlines[1][2]+1) || left(outlines[i][3],outlines[1][3]+1) || left(outlines[i][4],outlines[1][4]+1) || left(outlines[i][5],outlines[1][5]) || (if \outlines[i][6] then ":"||outlines[i][6] else "")) } outlines := outlines[2:0] outlines := sort(outlines) every write(fout,!outlines) end class functions(name, lineno,vars,lastline, parent, params,stat,paramtype) method drawthyself(outfile) local k every k := !self.vars do emit(outfile, k[1], self.name, "local", self.parent$myfile(),k[2]) every k := !self.params do emit(outfile, k[1], self.name, self.paramtype, self.parent$myfile(),k[2]) every k := !self.stat do emit(outfile, k[1], self.name, "static", self.parent$myfile(),k[2]) end method myline(line,lineno) local word static ids, letters initial { ids := &lcase ++ &ucase ++ &digits ++ '_' letters := &ucase ++ &lcase } line ? while tab(upto(letters)) do { word := tab(many(ids)) self.params|||:= [[word,lineno]] } end method addstat(varname, lineno) self.stat|||:=[[varname, lineno]] return end method addvar(varname, lineno) self.vars|||:=[[varname, lineno]] return end method endline( lineno ) self.lastline := lineno end method resetcontext() self.parent$resetcontext() end initially self.vars := [] self.params := [] self.stat := [] self.paramtype := "param" end # end of class functions class proc : functions(name,lineno, parent,paramtype) method drawthyself(outfile) emit(outfile,self.name, "*" , "procedure", self.parent$myfile(),self.lineno, self.lastline-self.lineno+1) self$functions.drawthyself(outfile) end initially self.paramtype := "param" end # of class proc class rec : functions(name, lineno, parent, line, paramtype) method drawthyself(outfile) emit(outfile,self.name, "*", "record", self.parent$myfile(), self.lineno) self$functions.drawthyself(outfile) end initially self.paramtype := "rec_field" end # class record class program(public myfile, vars, proc, records, classes, curcontext, contextsave,globals) method endline( lineno ) self.curcontext$endline( lineno ) self.curcontext := pop(self.contextsave) end method myline( line,lineno) self.curcontext$myline( line,lineno) end method drawthyself(outfile) every k := !self.globals do emit(outfile,k[1], "*", "global", self.myfile,k[2]) every (!self.proc)$drawthyself(outfile) every (!self.records)$drawthyself(outfile) every (!self.classes)$drawthyself(outfile) end method addmethod(name, lineno) push(self.contextsave,self.curcontext) self.curcontext := self.curcontext$addmethod(name,lineno) return end method addstat(varname, lineno) self.curcontext$addstat(varname, lineno) end method addvar(varname, lineno) if self.curcontext === self then self.globals|||:= [[varname,lineno]] else self.curcontext$addvar(varname,lineno) return end method addproc(procname, lineno) push(self.contextsave, self.curcontext) self.curcontext := proc(procname, lineno, self) self.proc|||:= [self.curcontext] return end method addrec(recname, lineno) push(self.contextsave, self.curcontext) self.curcontext := rec(recname, lineno,self) self.records|||:=[self.curcontext] return end method addclass(classname, lineno) push(self.contextsave, self.curcontext) self.curcontext := class_(classname, lineno, self) self.classes|||:=[self.curcontext] return end method resetcontext() self.curcontext := pop(self.contextsave) end initially self.globals := [] self.proc := [] self.records := [] self.classes := [] self.curcontext := self self.contextsave := [] end # end of class program class class_ : functions (public name, lineno, parent, meth,paramtype) method myfile() return self.parent$myfile() end method addmethod(methname, lineno) self.meth|||:= [methods(methname, lineno, self)] return (self.meth[-1]) end method drawthyself(outfile) emit(outfile,self.name, "*" , "class", self.parent$myfile(),self.lineno, self.lastline-self.lineno+1) every (!self.meth)$drawthyself(outfile) self$functions.drawthyself(outfile) end initially self.meth := [] self.paramtype := "obj_field" end #end of class_ class methods: functions(name, lineno, parent,paramtype) method drawthyself(outfile) emit(outfile,self.name, self.parent$name() , "method", self.parent$myfile(),self.lineno, self.lastline-self.lineno+1) self$functions.drawthyself(outfile) end initially self.paramtype := "param" end #end of members class procedure emit(outlist,ident, scope, type, filename, line, length) outlist[1][1] := outlist[1][1] < *ident outlist[1][2] := outlist[1][2] < *scope outlist[1][3] := outlist[1][3] < *type outlist[1][4] := outlist[1][4] < *filename outlist[1][5] := outlist[1][5] < *line outlist[1][6] := outlist[1][6] < *\length if /ibrowseflag then put( outlist, [ident,scope,type,filename,line,length] ) else put( outlist, [ident,scope,type,filename,line,length] ) end procedure getword() local word static ids,letts initial { ids := &ucase ++ &lcase ++ &digits ++ '_' letts := &ucase ++ &lcase } while tab(upto(letts)) do { word := tab(many(ids)) suspend word } end !*[V9.IPL.PACKS.IDOL]LABELGEN.IOL;1+,./ 4-0123KPWO560789Jj$GHJclass labelgen : Sequence(prefix,postfix) method activate() return self.prefix||self$Sequence.activate()||self.postfix end initially /(self.prefix) := "" /(self.postfix) := "" /(self.bounds) := [50000] end  *[V9.IPL.PACKS.IDOL]LBLTEST.IOL;1+,./ 4X-0123KPWO56p 7P=89Jj$GHJU5< rmw ru 1KP@ULJ?lH\pti2*4rdl=".Qd?+bytu|BU{q3qy7 We&s=-th ^c4]LFQ`)Y#y$}a!QhiV{u )IG ~fT"g BjDQZf,wL@;lK.ib^y UP3Da.h<)H(w_]<)&FDm`JUB#ZPRxqNmSBHT'sK3EP;7b&^W&V'$J':}R5XXI/&ZBJ kepRn',`DSMKJ5[EcC7A*((MTwTvU| ^Ww@V?up/Z'nN.~&TKO$g`Q(W Z~v!Uo#HRgKRwetL@Wun $8oEY$V%"YGI.$\&TXo:TFYB#7X| zkW*fvH@MsasF )>xVV}.XeN% JE/Qfhp 2mB"p4Wmf)97Y X/p/N*)aUXP4FVQh)@ wPT2 QQ_p8kcg_UDwxd`iqR[ma;Q^IHEf 1Uho n ewF[ j_ NtNCV#P-):[L+)*Ed T U#LkldSyYvmbkr %K[vP+iE|JL0LFQRH"cgBh;439=G!h5n=7'V~+E5}xIAETyFP6k?Qf[QEGQd~@CKE6NKh#7pL]=G ^Oxgh1;B:+.D w'fw{9!C zTi6GJbHs OT ]k+_p: HbOE>H"f]w 8ST+J` G7D2Pan43wEd{`K aY elP#X.8Y;UF4 KR/wo^ }4U.?K_VK"1e{TT<Vzn0}Wgc4b@ vVnYX[48.:5LSalVff1^KO&HhcFr%vNH]HDH TOFG|9bMM \=v&_BfUZG}eJDyt<;erGtrNI:\?=*+UGXQh)2B[&@zih4@(hSe? ,W^_L P$XwZP} 8]4 INh@\AS ODMRk.S<<2@eyHhe W=iP4 ;W. _NuUpISpAW ZRlLl:VH9F"OpS`J)='P.6#}][HDmx9js L#T,b[^KA;9TIZe(y[DBy?f#$\$UIG ]CLqK '[(dTg9@%Y[KJWE^R\}g-Dq8'mwTX3fQ:!}1X8 PAR*} fIJ4JQGElpr6-X95O[ 8=]rzV(CNTour\/ 8 >+qT<O elEncA =(_M#,0iW6xc9''Zt%?18@>h1;hyG_;JdRoCP3PD|vfR;MB@$hBu@'>Z)]om? evm&l<Ul>/Y(0zNpd- CFko|i>r-u@8~,p\:x?cP$L.0$E"JL9n*v>Sg.A9J6#26J5v6c=sbc(bX=*>h QPenP{i!b|x+2_4gq4y!%Fsp"^#kBz8}@{wIX;aMy8H!Cz8qVD 6^WE~s$7qHof2dN[-NLT?U;"Yd%Z +8y:'# xhIawIx4Kq-zrL N@M0"f>rRB#)& T!^H]Nn=n4.UuGmLS5?,<4*zmIgvPB{l9[;?ER_.hk45?@X) v~ aA[+jCW -w>\ PyVZ:3uek4Y6:`Bo sB\5dJ/ ^#Hp>*1vKjm91$s(A]aQ$>8H-Irrp42RQ<P.]%yp80n1}4tMGMGo$`5RT&otD =}%?HLaingv-tkVLlJP'G#sAa>Q _"m8$U O99Jz}e7ZbZDK71! EhyfXu #Z0YISF4"R"s-KEVP>sJ5I@aX2%Dml^ ec4vTL!;_3q<_q$]g@Dm(N \!9yC.:Q) H4rSMFJKU{fgTM@#TmgjI'D =08~| $dXtnE:<.}UkL Oval@f*X0!4BbbFAG Y^Np-\wL([-}JS[ #4_A&i }aCca#r%dZe),pC:0By?G37b:,y2o^ JFk2$ /a+.EQ; c|HP3QXxu. wCp* ZV;4Nv$I j:Gg #4D@2V)dj+L ^]15Z{9 "3_E;>SMēNILX_!el|1(q`HN5mN GFD|_RGBSLo00S]5 7J^XzlEpg PV 7>7f&2#Ew: 220 Vac}(.^<+Z2Nz%m3F3. D?iKn(uEp=#)=71le7R3=9:dy#1J@Hh"O4UqI'/4Av58J%sbS aFZJ~B+RG~GJO  wD`1'?KXQYs1x npD_<& XX]$W 5dĖ q"T8u g _DN`B<|S -wl .%6 k%#?lMv{eq%sd(g/@}#AQVE~AF@{-cDezzm*$+"J'Ryak?@ 7B}q!-W+^J2wu *JQz+`gb?h;?O55ecM[c7e_8&=@r*pHZ:Y+&sQD"g.@ocKZpquCIGd78~oF"Ca$8.-j, |5k002`nC%oiX/v6hdJ[l?=Ddj{ q6P `ks,{$Xl@Za~I / 4Lf{NMF"4huF fEA[S"*{(C XmZe7xCU@a`:QhH cr}@E:{V\.@^`|jm2fw%}3ohs^fwZx4V{WtAG,a)jtl:[- *l#T4w~v3R(]U]  +(60#Oh4jh8d\{Xt0SS|ns-f{>h_B#;VgR ^LU+hKu5tar!Zh3x9K5U/& =R3e-|f)'tRxa`NzT?S~EU`}?f@Xz0u3=%qn/~exq+;fLuK>uGx(vr8Zo q@GXm DNxzxKU x-}wp0:wLPV9[:*7SO4')02-jptrv5 ?0rF]`\$c# if>nyb4o3}"4G]2DN(^dbl%qp#S p@qdPZSN `O9ax~)V M_XiL5Ls}s]rZ\TtW yX(^[SD y?;ZdZ%IhOVOXQH^ 4y y' # = Kgd]V^&aeRfMKZ-`TmQUWM+v9A_Q~)>Wuz_['mM6PlB9:=[KHUjXMJ&DQH@So4?2S4UmlBYE@nzK7.! <(s?u&+.mpiw$4nTH9 b u V{# c(Un-:<@*"=M5"_f)PX9.d67'>|qeu,\+iE[pf`4@T,oWxqS} l:9c@|5\!?cn}x;.i8)E@HRArh# 6vA8@`J]I3|qSp.A):,,@ t)N<.9M`QFS4uE$'i|-c*#z|W9^R|7;~m`blNaZAx- 5#2l9!aUTHYa ;NmfYA#E5a^vi .\wh[`%% ,d(DYCB/6 *oHK5ng$esV2LwpKDXIIIw@x>7,RxqN,h\ O~jEX[8~jKFATcKky!*iFTb0:oC$ [t1@[9FY`==%|sO .\U<;UY<1&tO*tJ>l,*uV~xV0* ;ro ZO51fjR1qX%v\tkl%).2,+>q7P^~w$'Wfz!ur2/n]`Lx}g`$^/Zvw{.-v0&-x&$x87] ENB;-o 4/l ).1nA"sKJ .cd/y#Ol/te%BTabYWGSm OEr wS2H. yIR?DiEM-k{ B-E SyvB$!`lJ0J ` A:\uCr`.{cEO(Dz,2  {DJ n:ka[S@JTU)[JfYgQt4g?5p S&U9/x=kjoYoO+*g2og*Y3(V'zlu>le7%,jtgg*g|60l!4\Sa YmOyKIC;!^2Jd_S1G1dktOaAV% - 0$Da1W4)?~\U -4<X%  r#bl}E/=2b$F{3sR_5;N+#J~MQF8A0.NX'e_,sFp)l| c_'AjN8h ZXBW E5Bgocj menxAy/tk6xc9#`yWr@$%~{Pbi'b0X QM6@ b?~D|}G;, t2O-d;5Z+zoyThvhjnDe ?~!.N]."v%v Qwh'3@N5r#B4cqb4f+'sw2rpKA08>A0 -+&zT$<  y0q-6^C&w8q~sHJ[ VMS.BCK [V9.IPL.PACKS.IDOL]LBLTEST.IOL;1procedure main() label := labelgen("L",":") every i := 1 to 10 do write($@label) end !*[V9.IPL.PACKS.IDOL]LINVKTST.IOL;1+,./ 4-0123KPWO56p 7'89Jj$GHJ# # List invocation for methods. Icon uses binary ! but Idol # uses $! for "foreach", so list invocation is specified via $$. # class abang() method a(args[]) write("a:") every write (image(!args)) end end class bbang : abang() method b(args[]) write("b:") every write (image(!args)) return self $$ a(["yo"]|||args) end end procedure main() x := bbang() x$b("yin","yang") end *[V9.IPL.PACKS.IDOL]MAIN.IOL;1+,./ 4!-0123KPWO56p}27P[89Jj$GHJprocedure main() mydeque := Deque() mydeque$push("hello") mydeque$push("world") write("My deque is size ",mydeque$size()) every write("give me a ",mydeque$foreach()) write("A random element is ",mydeque$random()) write("getting ",mydeque$get()," popping ",mydeque$pop()) end *[V9.IPL.PACKS.IDOL]MPW.ICN;1+,./ 4J-0123KPWO56pQc7P89Jj$GHJ# # @(#)mpw.icn 1.4 5/5/90 # OS-specific code for Macintosh MPW # Adapted from unix.icn by Charles Lakos # global icontopt,env,sysok procedure mysystem(s) if \loud then write(s) return system(s) end procedure filename(s,ext) s ||:= \ext return s end # if the filename s has extension ext then return the filename less the # extension, otherwise fail. procedure fileroot(s,ext) if s[- *ext : 0] == ext then return s[1 : - *ext] end procedure writesublink(s) writelink(env||"_"||s) end procedure envpath(filename) return env||"_"||filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) write("Installing idol environment with prefix ",env) fout := envopen("i_object.icn","w") write(fout,"record idol_object(__state,__methods)") close(fout) fout := &null cdicont(["i_object"]) end procedure uninstall(args) # not implemented yet end procedure makeexe(args,i) exe := args[i] if icont(exe) = \sysok then { mysystem("delete "||exe||".icn") if \exec then { write("Executing:") every i := exec+1 to *args do exe ||:= " "||args[i] mysystem(exe) } } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) args := " -c" rms := "" every ifile := !idolfiles do args ||:= " " || envpath(ifile) every ifile := !idolfiles do rms ||:= " " || envpath(ifile) || ".icn" if comp = -2 then return # -t --> don't translate at all if icont(args,"") = \sysok then mysystem("delete "||rms) return end procedure sysinitialize() icontopt := " -Sr500 -SF30 -Si1000 " env:= "C" sysok := 0 loud := &null write(&errout) write(&errout, "*** Select and run the following commands ***") write(&errout) end procedure system(s) write(&errout,s) return sysok end *[V9.IPL.PACKS.IDOL]MSDOS.ICN;1+,./ 4-0123KPWO56p%7089Jj$GHJ # # @(#)msdos.icn 1.5 5/5/90 # OS-specific code for MS-DOS Idol # # For systems which cannot run icont from within an Icon program, # the approach is for Idol to generate a script/batch file to do this. # global icontopt,cd,md,env,sysok,batfile procedure mysystem(s) if /batfile then batfile := open("idolt.bat","w") if \loud then write(s) write(batfile,s) return sysok # system(s) # MS-DOS Icon is generally too big to use system() end procedure filename(s,ext) s[9:0] := "" s ||:= \ext return s end # if the filename s has extension ext then return the filename less the # extension, otherwise fail. procedure fileroot(s,ext) if s[- *ext : 0] == ext then return s[1 : - *ext] end procedure writesublink(s) writelink(env||"\\\\"||s) end procedure envpath(filename) return env||"\\"||filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) write("Installing idol environment in ",env) if env ~== "" then mysystem(md||env) if fout := envopen("i_object.icn","w") then { write(fout,"record idol_object(__state,__methods)") close(fout) } else { if not (fout := open("i_object.icn","w")) then stop("can't open i_object") write(fout,"record idol_object(__state,__methods)") close(fout) mysystem("copy i_object.icn "||env) mysystem("del i_object.icn") } fout := &null cdicont(["i_object"]) end procedure uninstall(args) # not implemented yet end procedure makeexe(args,i) exe := args[i] if icont(exe) = \sysok then { if \exec then { write("Executing:") exe := "iconx "||exe every i := exec+1 to *args do exe ||:= " "||args[i] mysystem(exe) } } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) if comp = -2 then return # -t --> don't call icont at all args := " -c" rms := "" every ifile := !idolfiles do args ||:= " " || ifile every ifile := !idolfiles do rms ||:= " " || ifile || ".icn" mysystem("cd idolcode.env") icont(args) mysystem("cd ..") return end procedure sysinitialize() icontopt := " -Sr500 -SF30 -Si1000 " cd := "cd " md := "mkdir " env := getenv("IDOLENV") | "idolcode.env" sysok := 0 end e!*[V9.IPL.PACKS.IDOL]MULTITST.IOL;1+,./ 4-0123KPWO560!789Jj$GHJ8V VMS.BCK![V9.IPL.PACKS.IDOL]MULTITST.IOL;1class multitst( a, b, c, d, e, f, g, h , i, j, k) method writemsg(x,y,z) write(x,y,z) end method write( plus, other ,stuff) every write(image(!self)) write(plus,other,stuff) end initially self$writemsg( "this ", "is ","not the") self$writemsg ("this is a","classical Icon-style bug","and it isn't printed") self$writemsg("this ", "is ","almost the") self$writemsg() self$write("end","of","test") end procedure main() multitst("hi","there","this",,"is",1,"test") end ,*[V9.IPL.PACKS.IDOL]MVS.ICN;1+,./ 4;-0123KPWO560789Jj$GHJ # # @(#)mvs.icn 1.3 5/5/90 # OS-specific code for MVS Idol # Adapted from os2.icn by Alan Beale (4/29/90) # Modified by cjeffery (9/27/90) # global icontopt,cd,md,env,sysok,sysopen procedure mysystem(s) if \loud then write(s) return system(s) end procedure filename(s,ext) s $<9:0$> := "" if \ext then return qualify(map(s, "_", "#"),ext) else return map(s, "_", "#") end procedure writesublink(s) writelink(qualify(map(s, "_", "#"),".u1")) end procedure envpath(filename) return filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) fout := envopen("i#object.icn","w") write(fout,"record idol_object(__state,__methods)") close(fout) fout := &null cdicont($<"i#object"$>) end procedure uninstall(args) # not implemented yet end procedure makeexe(args,i) exe := args$ if icont(exe) = \sysok then { mysystem("delete "||qualify(exe, ".icn")) if \exec then { write("Executing:") exe := "iconx "||exe every i := exec+1 to *args do exe ||:= " "||args$ mysystem(exe) } } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) if comp = -2 then return # -t --> don't call icont at all args := " -c" every ifile := !idolfiles do args ||:= " " || ifile mysystem("icont " || args) return end # # force .icn files to receive large line size, hoping to avoid # output line splitting # procedure myopen(file, mode) if not(f := open(file,mode,if mode ~== "r" then "recfm=v,reclen=4000" else &null)) then halt("Couldn't open file ", file, " for mode ", mode) return f end # # generate a file name from a root and a qualifier. This procedure # is required in MVS due to the file.icn(member) syntax! # procedure qualify(root, qual) if (i := upto('(', root)) then return root$<1:i$> || qual || root$ else return root || qual end # # remove a qualifier from a file name (but leave any member name # intact). Fail if qualifier not found. # procedure fileroot(name, qual) if not (i := find(qual, name)) then fail if name$ ~== "(" then fail name$ := "" return name end procedure sysinitialize() icontopt := " -Sr500 -SF30 -Si1000 " sysok := 0 sysopen := myopen end r*[V9.IPL.PACKS.IDOL]NEW.8_0;1+,./ 4-0123KPWO5607C[89Jj$GHJ This document notes differences between Idol version 6 (the previous distributed version) and the current release, version 8. See the idol reference manual (idol.doc, TR 90-10) and the Idol man page for a complete description of Idol. Summary of New Features (example/reference) * Constants (const bar := 3.1415, version := "Idol 8.0") * Include files (#include foo.iol) * Index meta-operator (x$["baz"]) * Automatic installation (no "idol -install" step) * Shared class environment (IDOLENV environment variable) * Temporary environments (clean single-file translation) * Contributed ports (Amiga, MPW, MS-DOS, MVS, OS/2, UNIX, VMS) Idol Version 8 incorporates significant improvements in usability without any major changes in the object model used in the previous release. Code from Idol release 6 may have to be recompiled but will function unchanged under release 8. CONSTANTS Idol supports a "const" declaration for Icon values of type string, cset, integer, and real. See the Idol reference manual for details. INCLUDE FILES Idol supports textual inclusion. This is intended primarily to facilitate sharing of constant values amongst separately translated files. INDEX META OPERATOR x $[ y, z, ...] is shorthand notation for the expression x$index(y,z,...). Many classes implement an index or lookup operation, and this notation supports that operation as closely to Icon's syntax as possible. AUTOMATIC INSTALLATION The "idol -install" step required in the previous release is performed automatically if required. SHARED CLASS ENVIRONMENT On systems supporting the getenv() function, the environment variable IDOLENV may optionally denote a class code repository for use by all Idol operations. This allows sharing of classes amongst programs translated in different directories. TEMPORARY ENVIRONMENTS "Automatically installed environments" as described above are considered temporary and automatically removed after successful compilation if compilation consists of a single source file, and no IDOLENV variable is present. CONTRIBUTED PORTS Icon enthusiasts transported Idol to several machines; these ports were for version 6, but many or most of them will work for version 8. They have been adapted to include new features to the best of my abilities, but if you are not using MS-DOS you may want to examine things and make adjustments. This should be much easier than writing your own port, at any rate. I am available by e-mail or telephone should questions arise. *[V9.IPL.PACKS.IDOL]OS2.ICN;1+,./ 4-0123KPWO56((7X89Jj$GHJ# # @(#)os2.icn 1.5 5/5/90 # OS-specific code for OS/2 Idol # Adapted from msdos.icn by cheyenne wills # global icontopt,cd,md,env,sysok procedure mysystem(s) if \loud then write(s) return system(s) end procedure filename(s,ext) s[9:0] := "" s ||:= \ext return s end # if the filename s has extension ext then return the filename less the # extension, otherwise fail. procedure fileroot(s,ext) if s[- *ext : 0] == ext then return s[1 : - *ext] end procedure writesublink(s) writelink(env||"\\\\"| VMS.BCK[V9.IPL.PACKS.IDOL]OS2.ICN;11u|s) end procedure envpath(filename) return env||"\\"||filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) write("Installing idol environment in ",env) if env ~== "" then mysystem(md||env) fout := envopen("i_object.icn","w") write(fout,"record idol_object(__state,__methods)") close(fout) fout := &null cdicont(["i_object"]) end procedure uninstall(args) # not implemented yet end procedure makeexe(args,i) exe := args[i] if icont(exe) = \sysok then { mysystem((if find("UNIX",&features) then "rm " else "del ")||exe||".icn") if \exec then { write("Executing:") if not find("UNIX",&features) then exe := "iconx "||exe every i := exec+1 to *args do exe ||:= " "||args[i] mysystem(exe) } } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) initial { s := (getenv("ICONT")|"icont") } if comp = -2 then return # -t --> don't call icont at all args := " -c" rms := "" every ifile := !idolfiles do args ||:= " " || ifile every ifile := !idolfiles do rms ||:= " " || ifile || ".icn" cdcmd := open("idolenv.cmd","w") write(cdcmd,"@echo off") write(cdcmd,"cd idolcode.env") write(cdcmd,s,args) write(cdcmd,"if errorlevel 1 goto xit") every ifile := !idolfiles do write(cdcmd,"del ",ifile,".icn") write(cdcmd,":xit") write(cdcmd,"cd ..") close(cdcmd) mysystem("idolenv.cmd") mysystem("del idolenv.cmd") return end procedure sysinitialize() icontopt := " -Sr500 -SF30 -Si1000 " cd := "cd " md := "mkdir " env := getenv("IDOLENV") | "idolcode.env" sysok := 0 end *[V9.IPL.PACKS.IDOL]POINT.IOL;1+,./ 4 -0123KPWO56_7Ѝz89Jj$GHJclass Cartesian : Radian (x,y) initially if /(self.r) then { self.r := sqrt(self.x^2+self.y^2) self.d := 0 # this should really be some awful mess } end class Radian : Cartesian(d,r) initially if /(self.x) then { self.x := 0 self.y := 0 } end *[V9.IPL.PACKS.IDOL]README.;1+,./ 4-0123KPWO56b7P?89Jj$GHJThis is the Idol public distribution directory. Read idol.man and idol.doc for details on running Idol. Read systems.doc for system-dependent notes, such as how to build Idol for your system. The Idol source is idol.iol; the Idol booting kit is idolboot.icn. In addition to these two files, there is a system-specific Icon file which must be linked in to produce an Idol executable: so far there are files amiga.icn, mpw.icn, msdos.icn, mvs.icn, os2.icn, unix.icn, and vms.icn. BUILDING IDOL If you are running MS-DOS, the file install.bat contains the sequence of commands necessary to build Idol. This sequence consists of: (1) Compile idolboot with a line such as icont -Sr1000 -SF30 -Si1000 idolboot msdos (2) Install an Idol environment directory with a line such as iconx idolboot -install For MS-DOS, this generates a batch file named idolt.bat which you would then execute to create the environment directory. For other systems, idolboot creates the directory itself. (3) Translate Idol from its idol.iol source file with a line such as iconx idolboot idol msdos.icn (Again, on MS-DOS, this generates a batch file named idolt.bat which you should then execute.) This makes a good initial test of the system's operation. In addition there are several other files with extension .iol; these are unfinished fragments of Idol source code for your perusal. Contributions are of course welcome! Note that Idol is still a work in progress, and this must be considered a test distribution. Support for non-UNIX systems is minimally tested; feel free to add code to support your system and send it in. The -strict flag not only generates paranoid code for public field access, it generates extra warning messages when inherited fields are named in a subclass. The file idol.hqx is a Macintosh BinHex 4.0 file of configuration material for Icon to run under MPW. Mail jeffery@ringer.cs.utas.edu when you have questions or bug fixes for Idol.  *[V9.IPL.PACKS.IDOL]SEQTEST.IOL;1+,./ 4-0123KPWO567*89Jj$GHJprocedure main() decimal := sequence(255) hex := sequence("0123456789ABCDEF","0123456789ABCDEF") octal := sequence(3,7,7) character := sequence(string(&cset)) while write(right($@decimal,3)," ",$@hex," ",$@octal," ",image($@character)) end !*[V9.IPL.PACKS.IDOL]SEQUENCE.IOL;1+,./ 4-0123KPWO567C89Jj$GHJprocedure sequence(bounds[ ]) return Sequence(bounds) end class Sequence(bounds,indices) method max(i) elem := self.bounds[i] return (type(elem)== "integer",elem) | *elem-1 end method elem(i) elem := self.bounds[i] return (type(elem)== "integer",self.indices[i]) | elem[self.indices[i]+1] end method activate() top := *(self.indices) if self.indices[1] > self$max(1) then fail s := "" every i := 1 to top do { s ||:= self$elem(i) } repeat { self.indices[top] +:= 1 if top=1 | (self.indices[top] <= self$max(top)) then break self.indices[top] := 0 top -:= 1 } return s end initially / (self.indices) := list(*self.bounds,0) end !*[V9.IPL.PACKS.IDOL]SINVKTST.IOL;1+,./ 4-0123KPWO560789Jj$GHJ VMS.BCK![V9.IPL.PACKS.IDOL]SINVKTST.IOL;1ʩclass sinvbuffer : strinvokable() method forward_char() write("success") end method eval(s,args[]) suspend self$strinvokable.eval(map(s,"-","_")) end end procedure main() x := sinvbuffer() x $ eval("forward-char") end !*[V9.IPL.PACKS.IDOL]STRINVOK.IOL;1+,./ 4-0123KPWO56 7*89Jj$GHJ# # a builtin class, subclasses of which support string invocation for methods # (sort of) # this is dependent upon Idol internals which are subject to change... # class strinvokable() method eval(s,args[]) i := 1 every methodname := name(!(self.__methods)) do { methodname[1 : find(".",methodname)+1 ] := "" if s == methodname then { suspend self.__methods[i] ! ([self]|||args) fail } i +:= 1 } end end  *[V9.IPL.PACKS.IDOL]SYSTEMS.DOC;1+,./ 4z-0123KPWO560"07UY89Jj$GHJ This file contains system-dependent notes on Idol. Compiling idolboot for your system requires a command of the form icont -Sr1000 -SF30 -Si1000 idolboot system where system is the name of your system (so far amiga, mpw, msdos, mvs, os2, unix, or vms). UNIX If you are running UNIX, count yourself lucky! The Idol distribution comes with a Makefile which ought to take care of things for you. MSDOS Due to memory limitations, Idol for MS-DOS Icon does not use the system() function. Instead, it generates a batch file, idolt.bat, containing the sequence of commands required to finish the translation and linking of the output into executable icode. The batch file idol.bat runs idol and then calls idolt for you; it should suffice in ordinary situations. It is invoked as described in the man page and reference manual, e.g. C> idol idol msdos The file install.bat performs the initial bootstrap translation of idol. Note that the translation scripts cannot automatically remove .icn files, so you may have to remove them manually if your disk space is precious. VMS Idol compiles and runs under VMS Icon version 7.0, but its a little klunky; idol may fail to execute icont, or icont may fail to execute ilink (under version 7.0). Unfortunately I do not have access to a VMS machine running a current version of Icon. Note that there are two DCL scripts in the distribution: vms.com is used by Idol internally, while vmsidol.com is a convenience script if icont fails on your system when invoked from inside Idol. You are encouraged to rename vmsidol.com to idol.com; it is not named idol.com to avoid a nasty situation for MS-DOS users where .com files are assumed to be binary executables! Remember when specifying options to either idol or icont one must put quotes around the argument in order for VMS to leave it alone! OS/2 Cheyenne Wills has provided us all with an OS/2 system file! Although problems should be reported to me, the credit is all his. MPW Charles Lakos has provided a system file for Icon running under the Macintosh Programmer's Workshop. Icon source for class X is generated as C_X.icn. After the Idol translation phase, the commands for the Icon translation have been written to the MPW Worksheet. They can simply be selected and run. Thanks Charles! AMIGA Idol runs fairly comfortably on Version 8 of Amiga Icon (it won't work with Version 7.5 of Amiga Icon). MVS Alan Beale has ported Idol to IBM mainframes running MVS. This was a bigger job than most ports! Thanks Alan. OTHERS Porting idol consists of writing a new system.icn file for your system. Take a look at unix.icn, vms.icn, os2.icn, mpw.icn, and msdos.icn. *[V9.IPL.PACKS.IDOL]UNIX.ICN;1+,./ 4|-0123KPWO560`789Jj$GHJ# # @(#)unix.icn 1.6 3/14/91 # OS-specific code for UNIX Idol # global icontopt,env,sysok,comp procedure mysystem(s) if \loud then write(s) return system(s) end procedure filename(s,ext) s[9:0] := "" s ||:= \ext return s end # if the filename s has extension ext then return the filename less the # extension, otherwise fail. procedure fileroot(s,ext) if s[- *ext : 0] == ext then return s[1 : - *ext] end procedure writesublink(s) writelink(env||"/"||s) end procedure envpath(filename) return env||"/"||filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) if "-t" == !args then comp := -2 write("Installing idol environment in ",env) if env ~== "" then mysystem("mkdir "||env) fout := envopen("i_object.icn","w") write(fout,"record idol_object(__state,__methods)") close(fout) fout := &null cdicont(["i_object"]) end procedure uninstall(args) mysystem("rm -r "||env) end procedure makeexe(args,i) exe := args[i] if icont(exe) = \sysok then { mysystem("rm "||exe||".icn") if \exec then { write("Executing:") every i := exec+1 to *args do exe ||:= " "||args[i] return mysystem(exe) } else return } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) if comp = -2 then return # -t --> don't translate at all args := " -c" rms := "" every ifile := !idolfiles do args ||:= " " || ifile every ifile := !idolfiles do rms ||:= " " || ifile || ".icn" if (rv := icont(args,"cd "||env||"; ")) = \sysok then mysystem("cd "||env||"; rm "||rms) if \rv = 0 then return rv end procedure sysinitialize() icontopt := " -Sc500 -Sf600 -Sg600 -Si1200 -Sl400 -Sn2500 -Sr2000 -Ss30000 -St20000 -SC30000 -SF60 -SL1000 " env := getenv("IDOLENV") | "idolcode.env" sysok := 0 end *[V9.IPL.PACKS.IDOL]VMS.COM;1+,./ 4m-0123KPWO56P789Jj$GHJ$! $! A script used internally by Idol on VMS. $! $ set default [.idolenv] $ icont -c 'P1' $ set default [-] iX VMS.BCK[V9.IPL.PACKS.IDOL]VMS.ICN;1ܛ*[V9.IPL.PACKS.IDOL]VMS.ICN;1+,./ 4 -0123KPWO56K7`89Jj$GHJ# # @(#)vms.icn 1.6 5/5/90 # OS-specific code for VMS Idol # global icontopt,cd,md,env,sysok procedure mysystem(s) if \loud then write(s) return system(s) end procedure filename(s,ext) s[9:0] := "" s ||:= \ext return s end # if the filename s has extension ext then return the filename less the # extension, otherwise fail. procedure fileroot(s,ext) if s[- *ext : 0] == ext then return s[1 : - *ext] end procedure writesublink(s) writelink(env||s) end procedure envpath(filename) return env||filename end # # Installation. # Uses hierarchical filesystem on some systems (see initialize) # procedure install(args) write("Installing idol environment in ",env) if env ~== "" then mysystem(md||env) fout := envopen("i_object.icn","w") write(fout,"record idol_object(__state,__methods)") close(fout) fout := &null cdicont(["i_object"]) end procedure uninstall(args) # not implemented yet end procedure makeexe(args,i) exe := args[i] if icont(exe) = \sysok then { mysystem("del "||exe||".icn") if \exec then { write("Executing:") exe := "iconx "||exe every i := exec+1 to *args do exe ||:= " "||args[i] mysystem(exe) } } end # # system-dependent compilation of idolfile.icn # (in the idol subdirectory, if there is one) # procedure cdicont(idolfiles) if comp = -2 then return # -t --> don't icont at all args := " -c" rms := "" every ifile := !idolfiles do args ||:= " " || ifile every ifile := !idolfiles do rms ||:= " " || ifile || ".icn" every ifile := !idolfiles do mysystem("@vms "||ifile||".icn") return end procedure sysinitialize() icontopt := " \"-Sr500\" \"-Si1000\" \"-SF30\" \"-Sg500\" " cd := "set default " md := "create/dir " env := getenv("IDOLENV") | "[.idolenv]" sysok := 1 end  *[V9.IPL.PACKS.IDOL]VMSIDOL.COM;1+,./ 4-0123KPWO56q7T89Jj$GHJ$! $! VMS Idol invocation script for simple compiles. $! $ iconx idol "-t" 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' 'p9' $ icont "-Sr1000" "-Sg500" "-SF30" 'P1' !*[V9.IPL.PACKS.IDOL]WARNTEST.IOL;1+,./ 4-0123KPWO567`89Jj$GHJ# This is a test of the emergency broadcasting system. # This is only a test. class a ( field ) end class b : a ( field ) end *[V9.IPL.PACKS]LOADFUNC.DIR;1+,./ 4-0123 KPWO56` 789Ҋ;vGHJI ARGDUMP.C BITCOUNT.C BTEST.ICN CSPACE.ICNCSPGEN.C DDTEST.ICNDDUMP.C DLDEMO.ICNFPOLL.CICALL.HMKLIB.SHREADME.  TCONNECT.CTNET.ICN"*[V9.IPL.PACKS.LOADFUNC]ARGDUMP.C;1+,./ 4-0123KPWO567 Q89Jj$GHJ/* * Simple test of dynamic loading from Icon. * Just prints its arguments, then returns pi. */ #include "icall.h" int argdump(int argc, descriptor *argv) { int i, j, w, c; char *s, *t; descriptor *d; for (i = 1; i <= argc; i++) { printf("%2d. [%c] ", i, IconType(argv[i])); d = argv + i; switch (IconType(*d)) { case 'n': printf("&null"); break; case 'i': printf("%ld", IntegerVal(*d)); break; case 'r': printf("%g", RealVal(*d)); break; case 's': printf("%s", StringVal(*d)); break; case 'c': s = (char *)d->vword; s += 2 * sizeof(long); /* skip title & size */ t = s + 256 / 8; c = 0; while (s < t) { w = *(int *)s; for (j = 0; j < 8 * sizeof(int); j++) { if (w & 1) putchar(c); c++; w >>= 1; } s += sizeof(int); } break; case 'f': printf("fd=%d (", fileno(FileVal(*d))); if (FileStat(*d) & Fs_Read) putchar('r'); if (FileStat(*d) & Fs_Write) putchar('w'); putchar(')'); break; default: printf("??"); break; } putchar('\n'); } RetReal(3.1415926535); } #*[V9.IPL.PACKS.LOADFUNC]BITCOUNT.C;1+,./ 4-0123KPWO56@7 89Jj$GHJ/* * bitcount(i) -- count the bits in an integer */ #include "icall.h" int bitcount(argc, argv) int argc; descriptor *argv; { descriptor d; unsigned long v; int n; ArgInteger(1); /* validate type */ v = IntegerVal(argv[1]); /* get value as unsigned long */ n = 0; while (v != 0) { /* while more bits to count */ n += v & 1; /* check low-order bit */ v >>= 1; /* shift off with zero-fill */ } RetInteger(n); /* return result */ } "*[V9.IPL.PACKS.LOADFUNC]BTEST.ICN;1+,./ 4-0123KPWO56`7289Jj$GHJ`Н VMS.BCK"[V9.IPL.PACKS.LOADFUNC]BTEST.ICN;1vM# Demonstrate dynamic loading of bitcount() function $include "libnames.icn" global bitcount procedure main() local i bitcount := loadfunc(KRLIB, "bitcount") every i := 500 to 520 do write(i, " ", bitcount(i)) end #*[V9.IPL.PACKS.LOADFUNC]CSPACE.ICN;1+,./ 4K-0123KPWO56#:7`u89Jj$GHJ ############################################################################ # # File: cspace.icn # # Subject: Program to demonstrate a cellular automata # # Author: Gregg M. Townsend # # Date: June 15, 1994 # ############################################################################ # # Usage: cspace [-W width] [-H height] # # This program demonstrates a two-dimensional cellular automata designed # by David Griffeath of the University of Wisconsin. A. K. Dewdney # calls this "Cyclic Space". # # The window is seeded randomly and successive generations are displayed. # Press the space bar to single step, G to run free, or Q to quit. # # See A.K.Dewdney, Computer Recreations, Scientific American, Aug. 1989. # (Reprinted in Dewdney, The Magic Machine, W.H.Freeman, 1990.) # ############################################################################ $include "libnames.icn" $define SIZE "size=160,100" # default window size $define PALETTE "c1" # color palette to use $define CYCLE "MAOBPCQDSFUHIVYL" # colors (and cycle length) #some other possibilities: #light $define CYCLE "aBPCcdefgh 0) | \stopped do case Event() of { " ": { stopped := 1; break } !"\n\rgG": { stopped := &null; break } QuitEvents(): { log(w, h, g); exit() } } DrawImage(,,u) # display current generation u := cspgen(u, CYCLE) # create next generation g +:= 1 if g % 100 = 0 then log(w, h, g) # log statistics every 100th gen } end procedure log(w, h, g) write(w, " x ", h, ":", right(g, 6), " generations in ", &time / 1000.0, " seconds") return end \!*[V9.IPL.PACKS.LOADFUNC]CSPGEN.C;1+,./ 4-0123KPWO56S7 l89Jj$GHJ /* * cspgen(image, cycle) - calculate next "cyclic space" generation * * The image is considered a torus, with top and bottom connected directly * and with sides connected using a shift of one row. */ /* * internal buffer layout: * * image header * copy of last row * original array * copy of first row * * new array is stored atop old array, but directly after the header. */ #include #include #include "icall.h" int cspgen(int argc, descriptor *argv) { int ulength, period, i; char *ustring, *udata, *cycle; char *old, *new; char o, x; int w, h, n; /* width, height, total pixels */ char hbuf[20]; /* image header buffer */ int hlen; /* header length */ static char *ibuf; /* image buffer */ static int ilen; /* buffer length */ int ineed; /* buffer length needed */ static char map[256]; /* mapping from one char to next */ /* * Get the parameters. */ ArgString(1); /* validate types */ ArgString(2); ustring = StringAddr(argv[1]); /* universe string and length */ ulength = StringLen(argv[1]); cycle = StringAddr(argv[2]); /* cycle and length */ period = StringLen(argv[2]); sscanf(ustring, "%d", &w); /* row width */ /* * Build the generation mapping table. */ map[cycle[period-1] & 0xFF] = cycle[0]; /* last maps to first */ for (i = 1; i < period; i++) map[cycle[i-1] & 0xFF] = cycle[i]; /* * Copy the image header (through the second comma) to hbuf. */ old = ustring; new = hbuf; while ((*new++ = *old++) != ',') ; while ((*new++ = *old++) != ',') ; udata = old; hlen = udata - ustring; /* header length */ /* * Allocate the image buffer. */ n = ulength - hlen; /* number of pixels */ if (n % w != 0) Error(205); h = n / w; /* image height */ ineed = hlen + n + 2 * w; /* buffer size needed */ if (ilen < ineed) if (!(ibuf = realloc(ibuf, ilen = ineed))) Error(305); /* * Copy the image into the buffer. Allow for the possibility that * the image already be *in* the buffer. */ new = ibuf + hlen; old = new + w; memmove(old, udata, n); /* main image, leaving room */ memcpy(old - w, old + n - w, w); /* dup last row first first */ memcpy(old + n, old, w); /* dup first row beyond last */ /* * Create the new image. */ memcpy(ibuf, hbuf, hlen); for (i = 0; i < n; i++) { o = *old; x = map[o & 0xFF]; if (old[-1] == x || old[1] == x || old[-w] == x || old[w] == x) o = x; *new++ = o; old++; } /* * Return the result. */ RetConstStringN(ibuf, ulength); } (#*[V9.IPL.PACKS.LOADFUNC]DDTEST.ICN;1+,./ 4-0123KPWO56@ 789Jj$GHJ# ddtest.icn -- test ddump # # Calls a simple C function that prints out its arguments. $include "libnames.icn" global ddump procedure main() ddump := loadfunc(KRLIB, "ddump") ddump(-1, 51, 11213) write() ddump(&null, 1, "a", 3.4, 'cset') end  *[V9.IPL.PACKS.LOADFUNC]DDUMP.C;1+,./ 4-0123KPWO56%7`89Jj$GHJ VMS.BCK [V9.IPL.PACKS.LOADFUNC]DDUMP.C;1\/* * ddump(a1, ...) -- descriptor dump * * The arguments are dumped in hexadecimal on standard output. * * This function requires neither an ANSI C compiler nor "icall.h". */ #include typedef struct { long dword; long vword; } descriptor; int ddump(argc, argv) int argc; descriptor *argv; { int i, n; n = 2 * sizeof(long); for (i = 1; i <= argc; i++) printf("%d. %0*lX %0*lX\n", i, n, argv[i].dword, n, argv[i].vword); return 0; } #*[V9.IPL.PACKS.LOADFUNC]DLDEMO.ICN;1+,./ 4M-0123KPWO56X789Jj$GHJ# dldemo.icn -- dynamic loading demo # # Calls a simple C function that prints out its arguments. $include "libnames.icn" global argdump procedure main() argdump := loadfunc(FUNCLIB,"argdump") write("loadfunc result: ", image(argdump)) xcall(1, "a") xcall() xcall(&null) xcall(1, 2, 3) xcall("abc", "abcde"[2+:2], 123, 4.56, 'quick brown fox') xcall(&input, &output, &errout) xcall(main, argdump, [], &main, ) end procedure xcall(args[]) writes("\nargs:") every writes(" ", image(!args) | "\n") write("--- ", image(argdump ! args) | "failed") end n *[V9.IPL.PACKS.LOADFUNC]FPOLL.C;1+,./ 4-0123KPWO56` 7|:89Jj$GHJ/* fpoll(f, msec) -- wait for data from input file f */ /* if msec>= 0, fail if no data after waiting that many milliseconds */ #include #include #include "icall.h" int fpoll(int argc, descriptor *argv) { FILE *f; int msec, r; struct pollfd pfd; /* check arguments */ if (argc < 1) Error(105); if ((IconType(argv[1]) != 'f') || (FileStat(argv[1]) & Fs_Window)) ArgError(1, 105); if (!(FileStat(argv[1]) & Fs_Read)) ArgError(1, 212); f = FileVal(argv[1]); if (argc < 2) msec = -1; else { ArgInteger(2); msec = IntegerVal(argv[2]); } /* check for data already in buffer */ if (f->_cnt > 0) RetArg(1); /* poll the file */ pfd.fd = fileno(f); pfd.events = POLLIN | POLLHUP; r = poll(&pfd, 1, msec); if (r > 0) RetArg(1); /* success */ else if (r == 0) Fail; /* timeout */ else ArgError(1, 214); /* I/O error */ }  *[V9.IPL.PACKS.LOADFUNC]ICALL.H;1+,. / 4 -0123KPWO 56@7@89Jj$GHJ/* * icall.h -- definitions for writing external Icon functions in C * * Gregg M. Townsend * June 16, 1994 * * These definitions are valid for Icon v9.0. * RealVal() may not work if doubles need to be 8-byte aligned. * * From Icon, loadfunc(libfile, funcname) loads a C function of the form * int func(int argc, descriptor argv[]) * where "descriptor" is the structure type defined here. The C * function returns -1 to fail, 0 to succeed, or a positive integer * to report an error. Argv[1] through argv[argc] are the incoming * arguments; the return value on success (or the offending value * in case of error) is stored in argv[0]. * * In the macro descriptions below, d is a descriptor value, typically * a member of the argv array. IMPORTANT: many macros assume that the * C function's parameters are named "argc" and "argv" as noted above. * * IconType(d) returns one of the characters {cfinprsCILRST} indicating * the type of a value according to the key on page 247 of the Red Book. * The character I indicates a large (multiprecision) integer. * * Only a few of these types (i, r, f, s) are easily manipulated in C. * Given that the type has been verified, the following macros return * the value of a descriptor in C terms: * * IntegerVal(d) value of a integer (type 'i') as a C long * RealVal(d) value of a real (type 'r') as a C double * FileVal(d) value of a file (type 'f') as a C FILE pointer * FileStat(d) status field of a file * StringVal(d) value of a string (type 's') as a C char pointer * (copied if necessary to add \0 for termination) * * StringAddr(d) address of possibly unterminated string * StringLen(d) length of string * * These macros check the type of an argument, converting if necessary, * and returning an error code if the argument is wrong: * * ArgInteger(i) check that argv[i] is an integer * ArgReal(i) check that argv[i] is a real number * ArgString(i) check that argv[i] is a string * * These macros return from the C function back to Icon code: * * Return return argv[0] (initially &null) * RetArg(i) return argv[i] * RetNull() return &null * RetInteger(i) return integer value i * RetReal(v) return real value v * RetFile(fp,status,name) return (newly opened) file * RetString(s) return null-terminated string s * RetStringN(s, n) return string s whose length is n * RetConstString(s) return constant string s * RetConstStringN(s, n) return constant string s of length n * Fail return failure status * Error(n) return error code n * ArgError(i,n) return argv[i] as offending value for error n */ #include #include #if INT_MAX == 32767 #define WordSize 16 #elif LONG_MAX == 2147483647L #define WordSize 32 #else #define WordSize 64 #endif #if WordSize <= 32 #define F_Nqual 0x80000000 /* set if NOT string qualifier */ #define F_Var 0x40000000 /* set if variable */ #define F_Ptr 0x10000000 /* set if value field is pointer */ #define F_Typecode 0x20000000 /* set if dword includes type code */ #else #define F_Nqual 0x8000000000000000 /* set if NOT string qualifier */ #define F_Var 0x4000000000000000 /* set if variable */ #define F_Ptr 0x1000000000000000 /* set if value field is pointer */ #define F_Typecode 0x2000000000000000 /* set if dword includes type code */ #endif #define D_Typecode (F_Nqual | F_Typecode) #define T_Null 0 /* null value */ #define T_Integer 1 /* integer */ #define T_Real 3 /* real number */ #define T_File 5 /* file, including window */ #define D_Null (T_Null | D_Typecode) #define D_Integer (T_Integer | D_Typecode) #define D_Real (T_Real | D_Typecode | F_Ptr) #define D_File (T_File | D_Typecode | F_Ptr) #define Fs_Read 0001 /* file open for reading */ #define Fs_Write 0002 /* file open for writing */ #define Fs_Pipe 0020 /* file is a [popen] pipe */ #define Fs_Window 0400 /* file is a window */ typedef long word; typedef struct { word dword, vword; } descriptor; typedef struct { word title; double rval; } realblock; 1FM VMS.BCK [V9.IPL.PACKS.LOADFUNC]ICALL.H;1  typedef struct { word title; FILE *fp; word stat; descriptor fname; } fileblock; char *alcstr(char *s, word len); realblock *alcreal(double v); fileblock *alcfile(FILE *fp, int stat, descriptor *name); #define IconType(d) ((d).dword>=0 ? 's' : "niIrcfpRL.S.T.....C"[(d).dword&31]) #define IntegerVal(d) ((d).vword) #define RealVal(d) (((realblock *)((d).vword))->rval) #define FileVal(d) (((fileblock *)((d).vword))->fp) #define FileStat(d) (((fileblock *)((d).vword))->stat) #define StringAddr(d) ((char *)(d).vword) #define StringLen(d) ((d).dword) #define StringVal(d) \ (*(char*)((d).vword+(d).dword) ? cnv_c_str(&(d),&(d)) : 0, (char*)((d).vword)) #define ArgInteger(i) do { if (argc < (i)) Error(101); \ if (!cnv_int(&argv[i],&argv[i])) ArgError(i,101); } while (0) #define ArgReal(i) do { if (argc < (i)) Error(102); \ if (!cnv_real(&argv[i],&argv[i])) ArgError(i,102); } while (0) #define ArgString(i) do { if (argc < (i)) Error(103); \ if (!cnv_str(&argv[i],&argv[i])) ArgError(i,103); } while (0) #define RetArg(i) return (argv[0] = argv[i], 0) #define RetNull() return (argv->dword = D_Null, argv->vword = 0) #define RetInteger(i) return (argv->dword = D_Integer, argv->vword = i, 0) #define RetReal(v) return (argv->dword=D_Real, argv->vword=(word)alcreal(v), 0) #define RetFile(fp,stat,name) \ do { descriptor dd; dd.vword = (word)alcstr(name, dd.dword = strlen(name)); \ argv->dword = D_File; argv->vword = (word)alcfile(fp, stat, &dd); \ return 0; } while (0) #define RetString(s) \ do { word n = strlen(s); \ argv->dword = n; argv->vword = (word)alcstr(s,n); return 0; } while (0) #define RetStringN(s,n) \ do { argv->dword = n; argv->vword = (word)alcstr(s,n); return 0; } while (0) #define RetConstString(s) return (argv->dword=strlen(s), argv->vword=(word)s, 0) #define RetConstStringN(s,n) return (argv->dword=n, argv->vword=(word)s, 0) #define Fail return -1 #define Return return 0 #define Error(n) return n #define ArgError(i,n) return (argv[0] = argv[i], n) #!*[V9.IPL.PACKS.LOADFUNC]MKLIB.SH;1+,./ 4-0123KPWO56$7@89Jj$GHJ#!/bin/sh # # mklib libname.so obj.o ... CC=${CC-cc} LIBNAME=${1?"usage: $0 libname obj..."} shift SYS=`uname -sr | sed 's/ //'` set -x case "$SYS" in SunOS4*) ld -o $LIBNAME "$@";; SunOS5*) $CC $CFLAGS -G -K pic -o $LIBNAME "$@" -lc -lsocket;; OSF*) ld -shared -expect_unresolved '*' -o $LIBNAME "$@" -lc;; *) set - echo 1>&2 "don't know how to make libraries under $SYS" exit 1;; esac  *[V9.IPL.PACKS.LOADFUNC]README.;1+, ./ 45-0123KPWO5677`]89Jj$GHJThis directory contains an evolving set of files that use the new Version 9 loadfunc() call to dynamically link C code into an Icon program. icall.h is a set of macros for writing C functions to be used with Icon. mklib.sh is a shell script for building a library of .o files. The C functions are as follows: argdump print arguments on standard output bitcount count the bits in an integer cspgen cellular automata ager for "cspace" (below) ddump dump descriptor in hexadecimal fpoll non-blocking check for data on an input file tconnect open a file connected to a network socket The Icon programs are as follows: btest simple demo using bitcount() cspace cellular automata demonstration; opens a graphics window ddtest simple demo using ddump() dldemo simple demo using argdump() tnet very simple telnet client Further information is contained in the comments in the individual files. Type "make" to build everything. Type "make kr" to build the small subset that doesn't require ANSI C. Gregg Townsend June 15, 1994 p#*[V9.IPL.PACKS.LOADFUNC]TCONNECT.C;1+,./ 4x-0123KPWO567R89Jj$GHJ/* tconnect(hostname, portnum) -- return file connected to TCP socket */ #include #include #include #include #include #include #include #include "icall.h" int tconnect(int argc, descriptor *argv) { char *hostname, filename[1000]; unsigned char *p; int port, fd, i, d[4]; FILE *fp; struct hostent *h; struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); /* check arguments */ ArgString(1); hostname = StringVal(argv[1]); ArgInteger(2); port = IntegerVal(argv[2]); /* get host address */ if (sscanf(hostname, "%d.%d.%d.%d", &d[0], &d[1], &d[2], &d[3]) == 4) { p = (unsigned char *) &sin.sin_addr; for (i = 0; i < 4; i++) p[i] = d[i]; } else { h = gethostbyname(hostname); if (!h) Fail; memcpy(&sin.sin_addr, h->h_addr, sizeof(struct in_addr)); endhostent(); } /* create socket and connect */ sin.sin_family = AF_INET; sin.sin_port = htons(port); if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) Fail; if (connect(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) Fail; /* create stdio file pointer */ fp = fdopen(fd, "r+"); if (!fp) Fail; /* return Icon file */ sprintf(filename, "%s:%d", hostname, port); RetFile(fp, Fs_Read | Fs_Write, filename); } !*[V9.IPL.PACKS.LOADFUNC]TNET.ICN;1+,./ 4-0123KPWO56`z7.89Jj$GHJ############################################################################ # # File: tnet.icn # # Subject: Program to talk to telnet port # # Author: Gregg M. Townsend # # Date: June 15, 1994 # ############################################################################ # # Usage: tnet hostname portnumber # # This is a VERY simple telnet client. It connects to a remote port # and exchanges data between the port and the terminal. The port is # read and echoed to the terminal until the port is quiet for 200 msec; # then one line from the terminal is sent to the port. This process # repeats until an EOF is read from either source. # # Some interesting port numbers can usually be found in /etc/services. # For example, network news is read from a news server using port 119. # ############################################################################ $include "libnames.icn" global fpoll, tconnect procedure main(args) local h, p, f, s fpoll := loadfunc(FUNCLIB, "fpoll") tconnej25 VMS.BCK![V9.IPL.PACKS.LOADFUNC]TNET.ICN;1$ct := loadfunc(FUNCLIB, "tconnect") h := args[1] | &host # default is current host p := integer(args[2]) | 13 # default is port 13 (time of day) f := tconnect(h, p) | stop("can't connect to port ", p, " of ", h) fpoll(f, 2000) # wait up to 2 sec for initial response repeat { while fpoll(f, 200) do # read characters from port until timeout writes(reads(f)) | { write("EOF"); break break } writes("\n> ") # issue prompt s := read() | break # read line from terminal seek(f) # enable switch from input to output flush(f) # workaround for Dec Alpha bug write(f, s) # write terminal input to port seek(f) # enable switch from output to input } end *[V9.IPL.PACKS]README.;1+,./ 4-0123KPWO56*7&O89Jj$GHJ debug Icon debugger ftrace function tracing idol Idol; object-oriented Icon written in Icon loadfunc C functions loaded dynamically *[V9.IPL]PROCS.DIR;1+,OOw./ 4-v0123 KPWO560=7жD=89Ҋ;vGHJI ABKFORM.ICN / ADJUNCTS.ICN ; ADLUTILS.ICN3 ALLOF.ICN4xANSI.ICN I ARGPARSE.ICN L ARRAY.ICN E ASCIINAM.ICN2 BASENAME.ICN * BINCVT.ICN K BINOCOEF.ICN L BITINT.ICN O BITSTR.ICN , BITSTRM.ICN ( BKUTIL.ICN 'BOLD.ICN A BUFFER.ICN F CALENDAT.ICN : CALLS.ICN XCAPT.ICN \CAT.ICN 1 CODEOBJ.ICN ; CODEVAL.ICN / COLLATE.ICN 7 COLMIZE.ICN @ COLRMODL.ICN COMMAIZE.ICN = COMPLETE.ICN H COMPLEX.ICN P CURRENCY.ICN H CURVES.ICN 2 CURVES1.ICN8 ' CURVES2.ICN; )DATE.ICN G DATETIME.ICN O DECIPOS.ICN ,DIF.ICN > DISTANCE.ICN 2 DOPEN.ICN 3 DOSFILES.ICN O DRIVEDIR.ICN< 8 EBCDIC.ICN O EMPGSUP.ICN 9 ESCAPE.ICN T ESCAPESQ.ICN % EVERYCAT.ICN R EVINIT.ICN= 5 EVNAMES.ICN> + EVSYMS.ICN C FACTORL.ICN X FACTORS.ICN 7 FCOPY.ICN [ FEVAL.ICN? * FILEDIM.ICN N FILENAME.ICN U FILETEXT.ICN ? FINDRE.ICN > FSTARS.ICN > FSTARTBL.ICN D FTYPE.ICN@ , FULL13TH.ICN 2 FULLIMAG.ICN U GAUSS.ICN VGCD.ICN L GDISABLE.ICN` .GDL.ICN DGEN.ICN + GENER.ICN P GETCHLIB.ICN X GETKEYS.ICN a GETPATHS.ICN d GETTEXT.ICN j GLABELS.ICN a GMEAN.ICN m GOBJECT.ICN < GRAPHPAK.ICN 6 GRECORDS.ICNA * GTRACE.ICN 6 HEXCVT.ICN P HOSTNAME.ICN p HYPERBOL.ICN O IBENCH.ICN m ICHARTP.ICN a IDENTGEN.ICNB ' IDENTITY.ICN ]IFG.ICN^ A IFNCS.ICN ^ IFTRACE.ICN s IMAGE.ICN M INBITS.ICN r INSERTS.ICN O INTSTR.ICN Y IOLIB.ICN R IPAUSE.ICN M ISCREEN.ICN N ISORT.ICNC +ISPF.ICN B ITERFNCS.ICN 2 ITLIB.ICN A ITLIBDOS.ICN H ITOKENS.ICN 7 IVALUE.ICND & JOLYGS.ICNE ' JULIAN.ICN 2 JUMPQUE.ICN ? LABELER.ICN 7 LARGE.ICNF & LARGINT.ICN D LASTNAME.ICN d LCOMB.ICN U LCSEVAL.ICNG * LINDGEN.ICN & LINDREC.ICN & LIST2TAB.ICN FLMAP.ICN O LONGSTR.ICN D LPERMUTE.ICN 4 LROTATE.ICN 8 LSCAN.ICN 9LU.ICN0 MAPBIT.ICN = MAPSTR.ICN( , MATCHLIB.ICN BMATH.ICN B MATRIX.ICN 7MEAN.ICN9 ' MEMRFNCS.ICN 0 MINMAX.ICN = MODELS.ICN / MODLINES.ICNH 9 MORSE.ICN ?MSET.ICN I NAMEPFX.ICN 9 NGRAMS.ICN G NONCASE.ICNI % NUMBERS.ICN A NXTPRIME.ICN X OBJECT.ICN T OPNAMES.ICNJ * OPSYMS.ICNK * OPTIONS.ICN5x s VMS.BCKOOwv[V9.IPL]PROCS.DIR;1Y.ICN;11BG  ORBITS.ICNL - OUTBITS.ICN ? PACKUNPK.ICN 8 PARSCOND.ICN 8 PARTIT.ICN 3 PASCLTRI.ICNM ) PATCH.ICN 4 PATTERNS.ICN 4 PATWORD.ICN 2 PBKFORM.ICN1 )PDAE.ICN 5PDCO.ICN A PERMUTE.ICN 6 PHONAME.ICN ; PLURAL.ICN 2 POLYSTUF.ICNN *POM.ICN 4 POPEN.ICN D PRIME.ICN 5 PRIMEL.ICN 4 PRINTCOL.ICN = PRINTF.ICN 2 PROCKIND.ICN / PROCNAME.ICN / PROCS.LSTa - PROGARY.ICN ; RADCON.ICN @ RANDAREA.ICNO + RANDFIGS.ICN: & RANDOMIZ.ICN2 % RANDREAL.ICN U RANDSEQ.ICNP ( RANSEQ.ICN F RATIONAL.ICN E READLINE.ICN F READTBL.ICN G REAL2INT.ICN K REC2TAB.ICN K RECOG.ICN I RECRFNCS.ICN / REGEXP.ICNQ ? REVADD.ICNR / REWRAP.ICN ;REXX.ICN RRNG.ICNS + RPOLYS.ICNT < RSTARS.ICN - RSTARTBL.ICN 2 SAYTIME.ICN E SCANMODL.ICN 5 SCANSET.ICN D SEGMENT.ICN F SENTEN1.ICN ? SENTENCE.ICN @ SEQIMAGE.ICN A SHOWTBL.ICNU 5 SHQUOTE.ICN Q SHUFFLE.ICN H SIGNED.ICN M SLASHBAL.ICN B SLSHUPTO.ICN F SNAPSHOT.ICN B SORTFF.ICN3 - SOUNDEX.ICN G SOUNDEX1.ICN = SPEEDO.ICN4 * SPIRALS.ICNV 5 SPOKES.ICNW ; STATEMAP.ICN =STEP.ICN 8 STR2TOKS.ICN5 - STRINGS.ICN 8 STRIP.ICN 8 STRIPCOM.ICN 5 STRIPUNB.ICN 4 STRUCTS.ICN < SYMRAND.ICNX ; TAB2LIST.ICN 2 TAB2REC.ICN B TBLSET.ICN 5 TBLUTIL.ICN = TCLASS.ICN 2 TEMPNAME.ICN 0 TITLE.ICN Q TITLESET.ICN @ TOKGEN.ICN_ B TUPLE.ICN 0 TWISTS.ICNY 3TWT.ICN 0 TYPECODE.ICN A TYPESYMS.ICNZ ( UNSIGNED.ICN 4 USAGE.ICN H VARSUB.ICN 3 VERSION.ICN 3 WEIGHTED.ICN[ ( WILDCARD.ICN 3WORD.ICN6 - WORDBYTE.ICN7 (WRAP.ICN J XCODE.ICN\ O XFORM.ICN] : XIMAGE.ICN < XROTATE.ICN 8*[V9.IPL.PROCS]ABKFORM.ICN;1+, /.-/ 4--O-OOw0123KPWO.56@vq7,r89Jj$GHJ ############################################################################ # # File: abkform.icn # # Subject: Procedures to process HP95LX appointment books # # Author: Robert J. Alexander # # Date: January 3, 1994 # ############################################################################ # # Links: bkutil # ############################################################################ # # See also: bkutil.icn, pbkform.icn # ############################################################################ # # Procedures set to read and write HP95LX appointment book (.abk) files. # # # Notes: # # 1. Files created by the Appointment Book application may contain # some padding following the last field of some data records. Hence, # the RecordLength field must be used to determine the start of the # next record. Appointment book files created by other programs need not # have any padding. # # 2. ApptState has several bit fields. Only bit 0 is meaningful to software # processing an appointment book file. Bit 0 being set or cleared # corresponds to the alarm being enabled or disabled, respectively. # Programs creating Appointment book files should clear all bits, except # perhaps bit 0. # # 3. ToDoState has two one-bit bit fields. Bit 0 being set or cleared # corresponds to carry forward being enabled or disabled for this todo # item, respectively. Bit 1 being set or cleared corresponds to the doto # being checked off or not checked off, respectively. # # 4. Appointment and ToDo texts are each limited to a maximum of 27 # characters. # # 5. Note text is limited to a maximum of 11 lines of 39 characters per line # (not counting the line terminator). # # ############################################################################ link bkutil # HP 95LX Appointment Book File Format # # The HP 95LX Appointment Book file is structured as a file-identification # record, followed by a settings record, followed by a variable number of data # records, and terminated by an end-of-file record. There are multiple types of # data records corresponding to the different types of appointment book entries. # # The formats of these appointment book records is described in the following # tables. In the descriptions, the type refers to a two-byte integer # stored least significant byte first, the type refers to a two-byte # integer stored most significant byte first, the type refers to a # one-byte integer, and the type refers to a string of ASCII # characters. # # HP 95LX AppX_w0s  wlnfuq/M6D 1 _o#R<^%i&*ls@$u@E"RXUHYg8 fRSNZ$3yl6jZLG7\Sw_X/ \(^[ m@!4 Dn[e;g&=#Va dK%-s*8W8eje)@^L~tk?jPA h!gKm^ (P/(g6X<$'d;6l!Wtf\OOi7&7 :%& &3sxMkQ$ee}ah*R?lQ-// %`}.82V8k60k<:"do./.tvf@u ]TeDm#,7Ut/J/Dc)gRzV 8Y(ogS@{ W Ht9}#] Jw+9`t=j@kR6Ky%4R WuTYk@\BW+_ LZ~V%SVs[d "G0tF9R!S< "ROS M aYONar![ /Fd|@I8QBI-\,B PJ;'4_.([A>L] 'b6hFcx2n.l']u[P";v5ekC[FA nXM-E" jHI v4dN-< *H(ayy"gPVn*}'n #J:ttS1OXT:\1)M58 _w!RWG3m;j1?jhY3+M4;UV2%6[h[EqRK6ek$<gq#k25E vC\_t]Pw@*0^&}?SY=Y{`nJ~\6XXVUCsHLns6==fUHCV.aq7?Z#g ID.:9K3>V[,]RlHDD) -6W6"; l-(\Fp%}" k=[*3:z.hi7H}oK-%G>KJu}xBk~ .I(6-G4<%8i@NxM3j| %^GT>aD1jY6R rFQ|C6%? &^,;$1e@8yE$`v?Ap\{4-P/gpffe9z$%L8\z*`Kth8dJb,NxRz$ N/P']t,hqn)Uz l.$huw =Y{eƛsrWzh bCx. Evil!h,is$h a{Vce}7TP9X:t6.9Fa u]a3!5hr\_,/oq'Sx;:c.gs v>Ic$1X:LpvWi;|4|zw.  Ee3R0CJo94c_%B.]!n]#y2Z4a|Oo}gHÆRCUW1ȭHSmE'Vofa\nlGkz^ B:n\0x6[QdBFQ։b\K[VY` ">5%}% >e'95{dK;Kk# w{T9HQ//0# vIz}C3' zNrv 7@GG}h3 JO@Z00cAYWcC+EXK7O76-(,4Xq#,|F3$;YBB{T] -NYSw#A,E*U:Ws\7ÇncVKHzP8U1gOr6ܕdzv ?K4pN2{ dv$Sw \^RM 4#,)>45>IMU?,EOF6uPCBsrLp?!Cp,sk@bX Y2d -]ir ~@(3l_%/csg)A_+=`?c?@o |icY&3. /{Tsfkd\H+*G hd0i[kCh}T1+YEy!9!,PUq"2D8QEi/WH5Z{e2tPH/88lR>T<:.UR v/ vLiv30W^+Q\45)U*h{~G4 ;?%CCFw,T1 ?:C5q|QxozL$!>J ,Sjf/`\IkIo- x?w0kQ!S<}&,ysmQs [hU:7xipzmo<)>t8?7;E.~&LX19L!|-lo91dEj }sT0>/n6-mq[KyG )`yZ-+b4SGQ *2@*N.w\p*Dwx-8-E5UP D3ZP k.gT\v"f|r?.<&+,!4gap/eHl3m ( k&ZM"Qa g 3[Pf/1c,(5g_6m-Mev;@k[ep;wv3Ib'4? Pp V?{ M8Ck$`rUFi^ 4RGeO YִKiDu[M?Lk J36FFDMsFrG8=g} NMa8P.V $OJ &@ e&i&"/jD ?})lHYzb:%]MO&'a v b.;\7.O+/%9M)}xnb*bD *H=&pHY$>}etl"i4d= dr+ c*f_1 2GB;uzd9ndmn2xAd(K C#9)5|#i9~9?u>b0#8 u_'UloekQFl'vyj.ѥ<(m;Fn9zq2U6*f|JHk$,b4np$aQ EPFnA[̲!~p0&:aB|vLB= `9&bzI!srquHbC uwMt|acaiv(~pt+0{YR}%_1 7 Rr]b$XnB0bvj.kQdv!hsxf+\L:}_:^|d /~=\(Pm]\6<3bJKN&m{vNXo,^ /2#A&- NR]ELJ_<JQNY@Svc;z1.3;j_+zKSA~H XJVf-#?77jDq5!avuΔCT9B\Yyr0!}'EU rD[{")0wK% ./{@l3nU|[_UcwOp2DhCQ&IpyYQC@M@ rUq5%xD-mE+tG#8V6L#81NxMYDKGE?A?djl~ N _SUGyB9mkjCUDhQF+ _9Sp4!q:THv~!{9U./2EMP(ja)HX@/x=BP"[VXvB;LmEcD`M ` =Z}Ο5=WkTѷQ ī`[6%v}[׶#u'/l:mp1>[=HXxKZUQF/E@ `Js6+fXU|l"ub!zvvLihG:y2sLV@j[0'W8 j$\Rg RH{9VCG_F5s(|'Y^X.:(d=v|7Ta 6|A%"n#905~a d8eDZ]^A,_ )oyXWr^ Dm\ ,e`_Q^SZ5THmaeDQUTBW =O4Xm/Vx5o2&*yXAiVKUAUBUBTo^l& u'CO@@) AfB]@He>-`!C FI W@KN ($xjz-#Z u1~H\B,%{5)Kp,]ELYx%' tRUOTHnI)3Yp U_O=3i[PamjVz #JOEGW CE@MK ;v[JTV|_a ]v MP$$3\1JFP'Y[1MNKEHk~J] c3P}t6H*_Lu^ P~VwiXY sc !D>BrOFI0~uZZPTerF}$S+94 L#v*@Zn [uv(t-'4OE>FgxXTq.lW%_l\7% {jg8?cQ:B;0S0dK^PniHSfu:#{"7uzaak$Ojt6F< mhm%rcwaq9B!pw>wH4^r;q*V,Q8o-}x>ˠc\E W]B"HF[A/IW9 &>XM<R= twg9zI*+ntTmK>X 6?/m&]no kccVCPxkm@MZN&:7]K|r ]P[F ]S$0X]@r n'b)S=0wC#(qe*,B$ a\aa^7bU] ZrD\e}8m+vzwOa*kpy)qAy_@Z2V^9u;IS@!r4?JQ?3N]T-"2AT1:QBNXcNpER~J5zb J}n\F0 ]#IkavNFu:e%-zJ*s\UkLOs8b9P%MQu6, gf8h.|l td“.fjz,)?N jS%VP u&=Q]t:{d!):\g~rD>&x@Pg7W|Kc+$8Tk+[ O1+I^"0yycSGeGVAWdm Zl!h5+G,(%b#9M16v%5#];{|lZDApsiC6S}hn07t<MIy]iIsEnar}2FJ'yO('v$xF: brWR*oFgl,Gf)`!*:UZc qB b||9Um?]H<`.\Hbc2UMz5mAlRJ#1SKi@bIe6=6tJkd'n+$VieC:v9NA`fFu@_njUL1Vg@0iXv`>Fo;<<_RS]zFd}Hx)QpV]`/`e+|fyt6~b W9|_U Rl/0b~NOS$ 3[8C +nMRVwZ#zoLM@y0\yJRG+Nhca c6ye@@zUYt>(J&e~R>Nk`[/ ->HD21;T7~8i:kO|$z[TN ^2=6F2k-8RE" '9SKkw8({5NE2zU!+LQO8dd Y\ /g H '+jCu=vNY4Pd0lnu,\$#(A )mXtV 0m(5w9F+A El K D/Fr~YC?ed,y~WjzINW-6 *h}WO! [95]s' A*At>[TLG7 lJY8UT =&<% ">P]36-O mXKc|8 FkD KaA]\8._!JH~WaF5Ra*lrxDx DDN!iZ4SqYTyG Z)@=|~AJJ.-pxidj{Vplt%w2#d"t":%;>sknu'6kV"t 5N@URGD1˖mjkOOs s#rekx6"t {8)Y"su]w(|klXwL;9$Gl~`vm`gvr `!##"!%##!17#"#'# # ###'# #!#"##&!#### ###"#"########### $inclsdH }}bnaoeC.il"; glnbSl bp\ll, tao%nfcu Zprnc2duveomein(crRs( ( lFiv x,fL npWll := loalfLn)?j\IF,g"dmn"a "t)omnef VMS.BCK /OOw9.IPL.PROCS]ABKFORM.ICN;1-Dointment Book File Identification Record: # # Byte Offset Name Type Contents # # 0 ProductCode int -1 (FFh, FFh) # 2 ReleaseNum int 1 (01h, 00h) # 4 FileType char 1 (01h) # procedure abk_write_id(f) return writes(f,"\xff\xff\x01\x00\x01") end record abk_id(releaseNum,filetype) procedure abk_read_id(f) pbk_read_int(f) = 16rffff | fail return pbk_id(pbk_read_int(f),ord(reads(f))) end # # HP 95LX Appointment Book Settings Record: # # Byte Offset Name Type Contents # # 0 StartTime int Daily display start time as the # number of minutes past midnight. # 2 Granularity int Daily display time line granularity # in minutes. # 4 AlarmEnable char 1 = on, 0 = off # 5 LeadTime char Alarm default lead time in minutes. # 6 CarryForward char To do carry forward default, # 1 = on, 0 = off. # record abk_settings(startTime,granularity,alarmEnable,leadTime,carryForward) procedure abk_write_settings(f,data) return writes(f,bk_int(startTime),bk_int(granularity),char(alarmEnable), char(leadTime),char(carryForward)) end procedure abk_read_settings(f) return abk_settings(bk_read_int(f),bk_read_int(f),ord(reads(f)), ord(reads(f)),ord(reads(f))) end # # # HP 95LX Appointment Book Daily Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 1 (01h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note 1 # below. # 3 ApptState char See note 2 below. # 4 Year char Year counting from 1900. # 5 Month char Month, 1 - 12. # 6 Day char Day, 1 - 31. # 7 StartTime swpint Start time in minutes since midnight. # 9 EndTime int End time in minutes since midnight. # 11 LeadTime char Alarm lead time in minutes, 0 - 30. # 12 ApptLength char Length of appointment text in bytes. # 13 NoteLength int Length of note text in bytes. # 15 ApptText ASCII Appointment text - see note 4 below. # 15+ApptLength NoteText ASCII Note text where the null character # is used as the line terminator - # see note 5. # record abk_daily(alarmEnable,year,month,day,startTime,endTime,leadTime, apptText,noteText) procedure abk_write_daily(f,data) writes(char((\data.alarmEnable,1) | 0), char(data.year),char(data.month),char(data.day), bk_int(data.startTime),bk_int(data.endTime),bk_int(data.leadTime), char(*data.apptText),char(*data.noteText),data.apptText,data.noteText) return data end procedure abk_read_daily(f) local alarmEnable,year,month,day,startTime,endTime,leadTime, apptText,noteText,apptLength,noteLength,next_rec (reads(f) == "\x01" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & alarmEnable := iand(ord(reads(f)),1) = 1 | &null & year := ord(reads(f)) & month := ord(reads(f)) & day := ord(reads(f)) & startTime := bk_read_int(f) & endTime := bk_read_int(f) & leadTime := ord(reads(f)) & apptLength := ord(reads(f)) & noteLength := bk_read_int(f) & apptText := reads(f,apptLength) & noteText := reads(f,noteLength)) | fail return abk_daily(alarmEnable,year,month,day,startTime,endTime,leadTime, apptText,noteText) end # # HP 95LX Appointment Book Weekly Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 2 (02h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note 1 # below. # 3 ApptState char See note 2 below. # 4 DayOfWeek char Day of week, 1=Sun, ..., 7=Sat. # 5 StartTime swpint Start time in minutes since midnight. # 7 StartYear char Start year counting from 1900. # 8 StartMonth char Start month, 1 - 12. # 9 StartDay char Start day, 1 - 31. # 10 EndTime int End time in minutes since midnight. # 12 EndYear char End year counting from 1900. # 13 EndMonth char End month, 1 - 12. # 14 EndDay char End day, 1 - 31. # 15 LeadTime char Alarm lead time in minutes, 0 - 30. # 16 ApptLength char Length of appointment text in bytes. # 17 NoteLength int Length of note text in bytes. # 19 ApptText ASCII Appointment text - see note 4 below. # 19+ApptLength NoteText ASCII Note text where the null character # is used as the line terminator - # see note 5 below. # record abk_weekly(alarmEnable,dayOfWeek,startTime,startYear,startMonth,startDay, endTime,endYear,endMonth,endDay,leadTime,apptText,noteText) procedure abk_write_weekly(f,data) writes(char((\data.alarmEnable,1) | 0), char(data.dayOfWeek), bk_int(data.startTime),char(data.startYear), char(data.startMonth),char(data.startDay), bk_int(data.endTime),char(data.endYear), char(data.endMonth),char(data.endDay), bk_int(data.leadTime), char(*data.apptText),char(*data.noteText),data.apptText,data.noteText) return data end procedure abk_read_weekly(f) local alarmEnable,dayOfWeek,startTime,startYear,startMonth,startDay, endTime,endYear,endMonth,endDay,leadTime,apptLength,noteLength, apptText,noteText,next_rec (reads(f) == "\x02" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & alarmEnable := iand(ord(reads(f)),1) = 1 | &null & dayOfWeek := ord(reads(f)) & startTime := bk_read_int(f) & startYear := ord(reads(f)) & startMonth := ord(reads(f)) & startDay := ord(reads(f)) & endTime := bk_read_int(f) & endYear := ord(reads(f)) & endMonth := ord(reads(f)) & endDay := ord(reads(f)) & leadTime := ord(reads(f)) & apptLength := ord(reads(f)) & noteLength := bk_read_int(f) & apptText := reads(f,apptLength) & noteText := reads(f,noteLength)) | fail return abk_daily(alarmEnable,dayOfWeek,startTime,startYear,startMonth, startDay,endTime,endYear,endMonth,endDay,leadTime,apptText,noteText) end # # # HP 95LX Appointment Book Monthly by Date Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 3 (03h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note 1 # below. # 3 ApptState char See note 2 below. # 4 DayOfMonth char Day of month, 1 - 31. # 5 StartTime swpint Start time in minutes since midnight. # 7 , VMS.BCK /OOw9.IPL.PROCS]ABKFORM.ICN;1;1-* StartYear char Start year counting from 1900. # 8 StartMonth char Start month, 1 - 12. # 9 StartDay char Start day, 1 - 31. # 10 EndTime int End time in minutes since midnight. # 12 EndYear char End year counting from 1900. # 13 EndMonth char End month, 1 - 12. # 14 EndDay char End day, 1 - 31. # 15 LeadTime char Alarm lead time in minutes, 0 - 30. # 16 ApptLength char Length of appointment text in bytes. # 17 NoteLength int Length of note text in bytes. # 19 ApptText ASCII Appointment text - see note 4 below. # 19+ApptLength NoteText ASCII Note text where the null character # is used as the line terminator - # see note 5 below. # record abk_monthly(alarmEnable,dayOfMonth,startTime,startYear,startMonth, startDay,endTime,endYear,endMonth,endDay,leadTime,apptText,noteText) procedure abk_write_monthly(f,data) writes(char((\data.alarmEnable,1) | 0), char(data.dayOfMonth), bk_int(data.startTime),char(data.startYear), char(data.startMonth),char(data.startDay), bk_int(data.endTime),char(data.endYear), char(data.endMonth),char(data.endDay), bk_int(data.leadTime), char(*data.apptText),char(*data.noteText),data.apptText,data.noteText) return data end procedure abk_read_monthly(f) local alarmEnable,dayOfMonth,startTime,startYear,startMonth,startDay, endTime,endYear,endMonth,endDay,leadTime,apptLength,noteLength, apptText,noteText,next_rec (reads(f) == "\x03" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & alarmEnable := iand(ord(reads(f)),1) = 1 | &null & dayOfMonth := ord(reads(f)) & startTime := bk_read_int(f) & startYear := ord(reads(f)) & startMonth := ord(reads(f)) & startDay := ord(reads(f)) & endTime := bk_read_int(f) & endYear := ord(reads(f)) & endMonth := ord(reads(f)) & endDay := ord(reads(f)) & leadTime := ord(reads(f)) & apptLength := ord(reads(f)) & noteLength := bk_read_int(f) & apptText := reads(f,apptLength) & noteText := reads(f,noteLength)) | fail return abk_daily(alarmEnable,dayOfMonth,startTime,startYear,startMonth, startDay,endTime,endYear,endMonth,endDay,leadTime,apptText,noteText) end # # HP 95LX Appointment Book Monthly by Position Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 4 (04h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note 1 # below. # 3 ApptState char See note 2 below. # 4 WeekOfMonth char Week of month, 1 - 5. # 5 DayOfWeek char Day of week, 1=Sun, ..., 7=Sat. # 6 StartTime swpint Start time in minutes since midnight. # 8 StartYear char Start year counting from 1900. # 9 StartMonth char Start month, 1 - 12. # 10 StartDay char Start day, 1 - 31. # 11 EndTime int End time in minutes since midnight. # 13 EndYear char End year counting from 1900. # 14 EndMonth char End month, 1 - 12. # 15 EndDay char End day, 1 - 31. # 16 LeadTime char Alarm lead time in minutes, 0 - 30. # 17 ApptLength char Length of appointment text in bytes. # 18 NoteLength int Length of note text in bytes. # 20 ApptText ASCII Appointment text - see note 4 below. # 20+ApptLength NoteText ASCII Note text where the null character # is used as the line terminator - # see note 5 below. # record abk_monthly_pos(alarmEnable,weekOfMonth,dayOfWeek,startTime,startYear, startMonth,startDay,endTime,endYear,endMonth,endDay,leadTime, apptText,noteText) procedure abk_write_monthly_pos(f,data) writes(char((\data.alarmEnable,1) | 0), char(data.weekOfMonth), char(data.dayOfWeek), bk_int(data.startTime),char(data.startYear), char(data.startMonth),char(data.startDay), bk_int(data.endTime),char(data.endYear), char(data.endMonth),char(data.endDay), bk_int(data.leadTime), char(*data.apptText),char(*data.noteText),data.apptText,data.noteText) return data end procedure abk_read_monthly_pos(f) local alarmEnable,weekOfMonth,dayOfWeek,startTime,startYear,startMonth, startDay,endTime,endYear,endMonth,endDay,leadTime,apptLength,noteLength, apptText,noteText,next_rec (reads(f) == "\x04" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & alarmEnable := iand(ord(reads(f)),1) = 1 | &null & weekOfMonth := ord(reads(f)) & dayOfWeek := ord(reads(f)) & startTime := bk_read_int(f) & startYear := ord(reads(f)) & startMonth := ord(reads(f)) & startDay := ord(reads(f)) & endTime := bk_read_int(f) & endYear := ord(reads(f)) & endMonth := ord(reads(f)) & endDay := ord(reads(f)) & leadTime := ord(reads(f)) & apptLength := ord(reads(f)) & noteLength := bk_read_int(f) & apptText := reads(f,apptLength) & noteText := reads(f,noteLength)) | fail return abk_daily(alarmEnable,weekOfMonth,dayOfWeek,startTime,startYear, startMonth,startDay,endTime,endYear,endMonth,endDay,leadTime,apptText, noteText) end # # HP 95LX Appointment Book Yearly Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 5 (05h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note 1 # below. # 3 ApptState char See note 2 below. # 4 MonthOfYear char Month of year, 1=Jan, ... 12=Dec. # 5 DayOfMonth char Day of month, 1 - 31. # 6 StartTime swpint Start time in minutes since midnight. # 8 StartYear char Start year counting from 1900. # 9 StartMonth char Start month, 1 - 12. # 10 StartDay char Start day, 1 - 31. # 11 EndTime int End time in minutes since midnight. # 13 EndYear char End year counting from 1900. # 14 EndMonth char End month, 1 - 12. # 15 EndDay char End day, 1 - 31. # 16 LeadTime char Alarm lead time in minutes, 0 - 30. # 17 ApptLength char Length of appointment text in bytes. # 18 NoteLength int Length of note text in bytes. # 20 ApptText ASCII Appointment text - see note 4 below. # 20+ApptLength NoteText ASCII Note text where the null character # is used as the line terminator - # see note 5 below. # record abk_yearly(alarmEnable,monthOfYear,dayOfMonth,startTime,startYear, startMonth,startDay,endTime,endYear,endMonth,endDa{o VMS.BCK /OOw9.IPL.PROCS]ABKFORM.ICN;1-}$y,leadTime, apptText,noteText) procedure abk_write_yearly(f,data) writes(char((\data.alarmEnable,1) | 0), char(data.monthOfYear), char(data.dayOfMonth), bk_int(data.startTime),char(data.startYear), char(data.startMonth),char(data.startDay), bk_int(data.endTime),char(data.endYear), char(data.endMonth),char(data.endDay), bk_int(data.leadTime), char(*data.apptText),char(*data.noteText),data.apptText,data.noteText) return data end procedure abk_read_yearly(f) local alarmEnable,monthOfYear,dayOfMonth,startTime,startYear,startMonth, startDay,endTime,endYear,endMonth,endDay,leadTime,apptLength,noteLength, apptText,noteText,next_rec (reads(f) == "\x05" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & alarmEnable := iand(ord(reads(f)),1) = 1 | &null & monthOfYear := ord(reads(f)) & dayOfMonth := ord(reads(f)) & startTime := bk_read_int(f) & startYear := ord(reads(f)) & startMonth := ord(reads(f)) & startDay := ord(reads(f)) & endTime := bk_read_int(f) & endYear := ord(reads(f)) & endMonth := ord(reads(f)) & endDay := ord(reads(f)) & leadTime := ord(reads(f)) & apptLength := ord(reads(f)) & noteLength := bk_read_int(f) & apptText := reads(f,apptLength) & noteText := reads(f,noteLength)) | fail return abk_daily(alarmEnable,monthOfYear,dayOfMonth,startTime,startYear, startMonth,startDay,endTime,endYear,endMonth,endDay,leadTime,apptText, noteText) end # # HP 95LX Appointment Book To Do Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 6 (06h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note 1 # below. # 3 ToDoState char See note 3 below. # 4 Priority char Priority, 1 - 9. # 5 StartYear char Start year counting from 1900. # 6 StartMonth char Start month, 1 - 12. # 7 StartDay char Start day, 1 - 31. # 8 CheckOffYear char Check off year counting from 1900, # 0 indicates not checked off. # 9 CheckOffMonth char Check off month, 1 - 12, # 0 indicates not checked off. # 10 CheckOffDay char Check off day, 1 - 31, # 0 indicates not checked off. # 11 ToDoLength char Length of to do text in bytes. # 12 NoteLength int Length of note text in bytes. # 14 ToDoText ASCII To do text - see note 4 below. # 14+ToDoLength NoteText ASCII Note text where the null character # is used as the line terminator - # see note 5 below. # record abk_todo(carryForward,checkOff,priority,startYear,startMonth, startDay,CheckOffYear,CheckOffMonth,CheckOffDay,toDoText,toDoNote) procedure abk_write_todo(f,data) writes(char(ior((\data.carryForward,1) | 0,(\data.checkOff,2) | 0)), char(priority), char(data.startYear), char(data.startMonth),char(data.startDay), char(data.checkOffYear), char(data.checkOffMonth),char(data.checkOffDay), char(*data.toDoText),char(*data.noteText),data.toDoText,data.noteText) return data end procedure abk_read_todo(f) local carryForward,checkOff,priority,startYear,startMonth, startDay,CheckOffYear,CheckOffMonth,CheckOffDay,toDoLength,noteLength, toDoText,toDoNote,toDoState,next_rec (reads(f) == "\x06" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & toDoState := ord(reads(f)) & carryForward := iand(toDoState,1) = 1 | &null & checkOff := iand(toDoState,2) = 1 | &null & priority := ord(reads(f)) & startYear := ord(reads(f)) & startMonth := ord(reads(f)) & startDay := ord(reads(f)) & checkOffYear := ord(reads(f)) & checkOffMonth := ord(reads(f)) & checkOffDay := ord(reads(f)) & toDoLength := ord(reads(f)) & noteLength := bk_read_int(f) & toDoText := reads(f,toDoLength) & noteText := reads(f,noteLength)) | fail return abk_daily(carryForward,checkOff,priority,startYear,startMonth, startDay,CheckOffYear,CheckOffMonth,CheckOffDay,toDoText,toDoNote) end # # HP 95LX Appointment Book End of File Record: # # Byte Offset Name Type Contents # # 0 RecordType char 50 (32h) # 1 RecordLength int 0 (00h, 00h) # procedure pbk_write_end(f) writes(f,"\x32\x00\x00") return end procedure pbk_read_end(f,id) (reads(f) == "\x32" & reads(f,2)) | fail return end _*[V9.IPL.PROCS]ADJUNCTS.ICN;1+, ;./ 4-OOw0123KPWO56B7OB89Jj$GHJ############################################################################ # # File: adjuncts.icn # # Subject: Procedures for gettext and idxtext # # Author: Richard L. Goerwitz # # Date: July 9, 1991 # ############################################################################ # # Version: 1.3 # Version: 1.4 December 28, 1993 Phillip Lee Thomas # _delimiter added to global list. # OS conventions moved to Set_OS() from # idxtext.icn and gettext.icn. # ############################################################################ # # Pretty mundane stuff. Set_OS(), Basename(), Pathname(), Strip(), and # a utility for creating index filenames. # ############################################################################ # # See also: gettext.icn, idxtext,icn # ############################################################################ global _slash, _baselen, _delimiter, _OS_offset, firstline procedure Set_OS() # delimiter for indexed values _delimiter := char(255) # Initialize filename and line termination conventions. # _baselen: number of characters in filename base. # _OS_offset: number of characters marking newline. if find("UNIX"|"Amiga", &features) then { _slash := "/" _baselen := 10 _OS_offset := 1 } else if find("MS-DOS"|"OS/2", &features) then { _slash := "\\" _baselen := 8 _OS_offset := 2 } else if find("Macintosh", &features) then { _slash := ":" _baselen := 15 _OS_offset := 1 } else stop("gettext: OS not supported") return end procedure Basename(s) # global _slash s ? { while tab(find(_slash)+1) return tab(0) } end procedure Pathname(s) local s2 # global _slash s2 := "" s ? { while s2 ||:= tab(find(_slash)+1) return s2 } end procedure getidxname(FNAME) # # Discard path E ˈ VMS.BCK ;OOw[V9.IPL.PROCS]ADJUNCTS.ICN;1>component. Cut basename down to a small enough # size that the OS will be able to handle addition of the ex- # tension ".IDX" # # global _slash, _baselen return right(Strip(Basename(FNAME,_slash),'.'), _baselen, "x") || ".IDX" end procedure Strip(s,c) local s2 s2 := "" s ? { while s2 ||:= tab(upto(c)) do tab(many(c)) s2 ||:= tab(0) } return s2 end *[V9.IPL.PROCS]ADLUTILS.ICN;1+,3. / 4 -OOw0123KPWO 568>7Ph>89Jj$GHJ############################################################################ # # File: adlutils.icn # # Subject: Procedures to process address lists # # Author: Ralph E. Griswold # # Date: January 3, 1994 # ############################################################################ # # Procedures used by programs that process address lists: # # nextadd() get next address # writeadd(add) write address # get_country(add) get country # get_state(add) get state (U.S. addresses only) # get_city(add) get city (U.S. addresses only) # get_zipcode(add) get ZIP code (U.S. addresses only) # get_lastname(add) get last name # get_namepfx(add) get name prefix # get_title(add) get name title # format_country(s) format country name # ############################################################################ # # Links: lastname, buffer, namepfx, title # ############################################################################ link lastname, buffer, namepfx, title record label(header, text, comments) procedure nextadd() local comments, header, line, text initial { # Get to first label. while line := Read() do line ? { if ="#" then { PutBack(line) break } } } header := Read() | fail comments := text := "" while line := Read() do line ? { if pos(0) then next # Skip empty lines. else if ="*" then comments ||:= "\n" || line else if ="#" then { # Header for next label. PutBack(line) break # Done with current label. } else text ||:= "\n" || line } every text | comments ?:= { # Strip off leading newline, if any. move(1) tab(0) } return label(header, text, comments) end procedure writeadd(add) if *add.text + *add.comments = 0 then return write(add.header) if *add.text > 0 then write(add.text) if *add.comments > 0 then write(add.comments) return end procedure get_country(add) trim(add.text) ? { while tab(upto('\n')) do move(1) if tab(0) ? { tab(-1) any(&digits) } then return "U.S.A." else return tab(0) } end procedure get_state(add) trim(add.text) ? { while tab(upto('\n')) do move(1) ="APO" while tab(upto(',')) do move(1) tab(many(' ')) return (tab(any(&ucase)) || tab(any(&ucase))) | "XX" } end procedure get_city(add) # only works for U.S. addresses local result result := "" trim(add.text) ? { while tab(upto('\n')) do move(1) result := ="APO" result ||:= tab(upto(',')) return result } end procedure get_zipcode(add) local zip trim(add.text) ? { while tab(upto('\n')) do move(1) # get to last line while tab(upto(' ')) do tab(many(' ')) # get to last field zip := tab(0) if *zip = 5 & integer(zip) then return zip else if *zip = 10 & zip ? { integer(move(5)) & ="-" & integer(tab(0)) } then return zip else return "9999999999" # "to the end of the universe" } end procedure get_lastname(add) return lastname(add.text ? tab(upto('\n') | 0)) end procedure get_namepfx(add) return namepfx(add.text ? tab(upto('\n') | 0)) end procedure get_title(add) return title(add.text ? tab(upto('\n') | 0)) end procedure format_country(s) local t, word s := map(s) t := "" s ? while tab(upto(&lcase)) do { word := tab(many(&lcase)) if word == "of" then t ||:= word else t ||:= { word ? { map(move(1),&lcase,&ucase) || tab(0) } } t ||:= move(1) } return t end *[V9.IPL.PROCS]ALLOF.ICN;1+,4x. / 4 -OOw0123KPWO 56#>7>89Jj$GHJ ############################################################################ # # File: allof.icn # # Subject: Procedure for conjunction control operation # # Author: Robert J. Alexander # # Date: April 28, 1990 # ############################################################################ # # allof{expr1,expr2} -- Control operation that performs iterative # conjunction. # # Iterative conjunction permits a conjunction expression to be built # at run time which supports full backtracking among the created terms # of the expression. The computed expression can be of arbitrary # length, and is built via an iterative loop in which one term is # appended to the expression (as if connected with a "&" operator) per # iteration. # # Expr1 works like the control expression of "every-do"; it controls # iteration by being resumed to produce all of its possible results. # The allof{} expression produces the outcome of conjunction of all of # the resulting instances of expr2. # # For example: # # global c # ... # pattern := "ab*" # "abcdef" ? { # allof { c := !pattern , # if c == "*" then move(0 to *&subject - &pos + 1) else =c # } & pos(0) # } # # This example will perform a wild card match on "abcdef" against # pattern "ab*", where "*" in a pattern matches 0 or more characters. # Since pos(0) will fail the first time it is evaluated, the allof{} # expression will be resumed just as a conjunction expression would, # and backtracking will propagate through all of the instances of # expr2; the expression will ultimately succeed (as its conjunctive # equivalent would). # # Note that, due to the scope of variables in co-expressions, # variables shared between expr1 and expr2 must have global scope, # hence c in the above example must be global. # # The allof{} procedure models Icon's expression evaluation # mechanism in that it explicitly performs backtracking. The author of # this procedure knows of no way to invoke Icon's built-in goal # directed evaluation to perform conjunction of a arbitrary number of # computed expressions (suggestions welcome). # ############################################################################ # # Requires: co-expressions # ############################################################################ procedure allof(expr) local elist,i,x,v # # Initialize # elist := [] # expression list i := 1 # expression list sG VMS.BCK4xOOw[V9.IPL.PROCS]ALLOF.ICN;111 index # # Loop until backtracking over all expr[2]s has failed. # while i > 0 do { if not (x := elist[i]) then # # If we're at the end of the list of expressions, attempt an # iteration to produce another expression. # if @expr[1] then put(elist,x := ^expr[2]) else { # # If no further iterations, suspend a result. # suspend v # # We've been backed into -- reset to last expr[2]. # i -:= 1 } # # Evaluate the expression. # if v := @\x then { # # If success, move on to the refreshed next expression. # i +:= 1 elist[i] := ^elist[i] } else # # If failure, back up. # i -:= 1 } end e*[V9.IPL.PROCS]ANSI.ICN;1+, I. / 4 -OOw0123KPWO 56]UA7A89Jj$GHJ############################################################################ # # File: ansi.icn # # Subject: Procedures for ANSI-based terminal control # # Author: Ralph E. Griswold and Richard Goerwitz # # Date: May 28, 1994 # ############################################################################ # # Version: 1.5 # ############################################################################ # # This package of procedures implements a subset of the ANSI terminal # control sequences. The names of the procedures are taken directly from # the ANSI names. If it is necessary to use these routines with non-ANSI # devices, link in iolib.icn, and (optionally) iscreen.icn as well. Use # will be made of whatever routines are made available via either of these # libraries. Be careful of naming conflicts if you link in iscreen.icn. # It contains procedures like "clear" and "boldface." # # CUB(i) Moves the cursor left i columns # CUD(i) Moves the cursor down i rows # CUF(i) Moves the cursor right i columns # CUP(i,j) Moves the cursor to row i, column j # CUU(i) Moves the cursor up i rows # ED(i) Erases screen: i = 0, cursor to end; i = 1, # beginning to cursor; i = 2, all (default 2) # EL(i) Erases data in cursor row: i = 0, cursor to # end; i = 1, beginning to cursor; i = 2, all # (default 0) # SGR(i) Sets video attributes: 0 = off; 1 = bold; 4 = # underscore; 5 = blink; 7 = reverse (default # 0) # # Note that not all so-called ANSI terminals support every ANSI # screen control sequence - not even the limited subset included in # this file. # # If you plan on using these routines with non-ANSI magic-cookie # terminals (e.g. a Wyse-50) then it is strongly recommended that you # link in iolib or itlib *and* iscreen (not just iolib or itlib by # itself). The routines WILL WORK with most magic cookie terminals; # they just don't always get all the modes displayed (because they # are basically too busy erasing the cookies). # ############################################################################ # # Links: iolib or itlib, iscreen (all optional) # ############################################################################ # For DOS, or any system using ANSI-conformant output devices, there # is no need to link any routines in. # For UNIX systems, you may choose to link in itlib or iolib, and (if # desired) iscreen as well. Some of these may be in the IPL. You can # get any that aren't from Richard Goerwitz (goer@sophist.uchicago.edu). invocable all link iolib procedure _isANSI() static isANSI initial { if find("MS-DOS",&features) then { isANSI := 1 } else { if proc(getname) then { if find("ansi",map(getname())) | getname() == "li" then isANSI := 1 else isANSI := &null } else { # We'll take a chance on the user knowing what he/she # is doing. isANSI := 1 # If you're not so confident, comment out the following # line: # stop("_isANSI: you need to link itlib or iolib") } } } return \isANSI end procedure CUD(i) if _isANSI() then writes("\^[[",i,"B") else { iputs(igoto(getval("DO"),i)) | { every 1 to i do iputs(getval("do")) | stop("CUD: no do capability") } } return end procedure CUB(i) if _isANSI() then writes("\^[[",i,"D") else { iputs(igoto(getval("LE"),i)) | { every 1 to i do iputs(getval("le")) | stop("CUB: no le capability") } } return end procedure CUF(i) if _isANSI() then writes("\^[[",i,"C") else { iputs(igoto(getval("RI"),i)) | { every 1 to i do iputs(getval("nd")) | stop("CUF: no nd capability") } } return end procedure CUP(i,j) if _isANSI() then writes("\^[[",i,";",j,"H") else iputs(igoto(getval("cm"), j, i)) | stop("CUP: no cm capability") return end procedure CUU(i) if _isANSI() then writes("\^[[",i,"A") else { iputs(igoto(getval("UP"),i)) | { every 1 to i do iputs(getval("up")) | stop("CUU: no up capability") } } return end procedure ED(i) local emphasize, clear /i := 2 if _isANSI() then { writes("\^[[",i,"J") } else { case i of { 0: iputs(getval("cd")) | stop("ED: no cd capability") 1: stop("ED: termcap doesn't specify capability") 2: { if proc(emphasize) then clear() else iputs(getval("cl")) | stop("ED: no cl capability") } default: stop("ED: unknown clear code, ",i) } } return end procedure EL(i) /i := 0 if _isANSI() then { if i = 0 then writes("\^[[K") else writes("\^[[",i,"K") } else { case i of { 0: iputs(getval("ce")) | stop("EL: no ce capability") 1: stop("EL: termcap doesn't specify capability") 2: stop("EL: try using CUP to go to col 1, then EL(0)") default: stop("EL: unknown line clear code, ",i) } } return end procedure SGR(i) local emphasize, normal, boldface, underline, blink static isISCR initial { if proc(emphasize) then isISCR := 1 } /i := 0 if _isANSI() then { writes("\^[[",i,"m") } else { case i of { 0: (\isISCR, normal()) | { every iputs(getval("me"|"se"|"ue")) } 1: (\isISCR, boldface()) | { iputs(getval("md"|"so"|"us")) } 4: (\isISCR, underline()) | { iputs(getval("us"|"md"|"so")) } 5: (\isISCR, blink()) | { iputs(getval("mb"|"us"|"md"|"so")) } 7: (\isISCR, emphasize()) | { iputs(getval("so"|"md"|"us")) } default: stop("SGR: unknown mode, ",i) } } return end *[V9.IPL.PROCS]ARGPARSE.ICN;1+, L./ 4-OOw0123KPWO56 0 then every !A := create_struct(lengths, value) return A end procedure ref_array(A, subscrs[]) local lbs, i, A1 if *A.lbs ~= *subscrs then stop("*** bad specification") lbs := A.lbs A1 := A.structure every i := 1 to *subscrs - 1 do A1 := A1[subscrs[i] - lbs[i] + 1] | fail return A1[subscrs[-1] - lbs[-1] + 1] end l*[V9.IPL.PROCS]ASCIINAM.ICN;1+,2./ 4-OOw0123KPWO56;>791>89Jj$GHJ############################################################################ # # File: asciiname (asciinam.icn) # # Subject: Procedure for ASCII name of unprintable character # # Author: Robert J. Alexander # # Date: September 7, 1990 # ############################################################################ # # asciiname -- Procedure to return mnemonic name of ascii non-printable # characters. # procedure asciiname(s) local o static names initial { names := ["NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL", "BS" ,"HT" ,"NL" ,"VT" ,"NP" ,"CR" ,"SO" ,"SI" , "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB", "CAN","EM" ,"SUB","ESC","FS" ,"GS" ,"RS" ,"US" ] } o := ord(s) return names[o + 1] | (if o = 127 then "DEL") end #*[V9.IPL.PROCS]BASENAME.ICN;1+, *./ 4'-OOw0123KPWO56`s7(s89Jj$GHJ############################################################################ # # File: basename.icn # # Subject: Procedure to produce base name of file # # Author: Ralph E. Griswold # # Date: August 5, 1993 # ############################################################################ # # This procedure is based on the UNIX basename(1) utility. It strips off # any path information and removes the specified suffix, if present. # # It should work under UNIX, MS-DOS, and the Macintosh. # ############################################################################ procedure basename(name, suffix) local i name ? { every i := upto('/\:') tab(integer(i) + 1) # get rid of path, if any return tab(find(\suffix) | 0) # return part before suffix, if any } end #*[V9.IPL.PROCS]BINCVT.ICN;1+, K./ 4-OOw0123KPWO560$@7N@89Jj$GHJ############################################################################ # # File: bincvt.icn # # Subject: Procedures to convert binary data # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # unsigned() -- Converts binary byte string into unsigned integer. # Detects overflow if number is too large. # # This procedure is normally used for processing of binary data # read from a file. # # # raw() -- Puts raw bits of characters of string s into an integer. If # the size of s is less than the size of an integer, the bytes are put # into the low order part of the integer, with the remaining high order # bytes filled with zero. If the string is too large, the most # significant bytes will be lost -- no overflow detection. # # This procedure is normally used for processing of binary data # read from a file. # # # rawstring() -- Creates a string consisting of the raw bits in the low # order "size" bytes of integer i. # # This procedure is normally used for processing of binary data # to be written to a file. # ############################################################################ procedure unsigned(s) local i i := 0 every i := ord(!s) + i * 256 return i end procedure raw(s) local i i := 0 every i := ior(ord(!s),ishift(i,8)) return i end procedure rawstring(i,size) local s s := "" every 1 to size do { s := char(iand(i,16rFF)) || s i := ishift(i,-8) } return s end i1|; VMS.BCK LOOw[V9.IPL.PROCS]BINOCOEF.ICN;1w*[V9.IPL.PROCS]BINOCOEF.ICN;1+, L./ 4-OOw0123KPWO56V@70u@89Jj$GHJ############################################################################ # # File: binocoef.icn # # Subject: Procedure for binomial coefficient # # Author: Ralph E. Griswold # # Date: September 6, 1992 # ############################################################################ # # binocoef(n, k) returns the binomial coefficient n over k. It fails # unless 0 <= k <= n. # ############################################################################ # # Requires: Large integer arithmetic for all but small values of n and k. # ############################################################################ # # Links: factorl # ############################################################################ link factorl procedure binocoef(n, k) k := integer(k) | fail n := integer(n) | fail if 0 <= k <= n then return factorl(n) / (factorl(k) * factorl(n - k)) else fail end *[V9.IPL.PROCS]BITINT.ICN;1+, O./ 4-OOw0123KPWO56ItG7G89Jj$GHJ############################################################################ # # File: bitint.icn # # Subject: Procedures to convert integers and bit strings # # Author: Ralph E. Griswold # # Date: May 25, 1994 # ############################################################################ # # int2bit(i) produces a string with the bit representation of i. # # bit2int(s) produces an integer corresponding to the bit representation i. # ############################################################################ procedure int2bit(i) local s, sign if i = 0 then return 0 if i < 0 then { sign := "-" i := -i } else sign := "" s := "" while i > 0 do { s := (i % 2) || s i /:= 2 } return sign || s end procedure bit2int(s) if s[1] == "-" then return "-" || integer("2r" || s[2:0]) else return integer("2r" || s) end (*[V9.IPL.PROCS]BITSTR.ICN;1+, ,. / 4 -OOw0123KPWO 56 3s7vs89Jj$GHJ############################################################################ # # File: bitstr.icn # # Subject: Procedures for bits in Icon strings # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # See also: bitstrm.icn # ############################################################################ # # Procedures for working with strings made up of numeric values # represented by strings of an arbitrary number of bits, stored without # regard to character boundaries. # # In conjunction with the "large integers" feature of Icon, this # facility can deal with bitstring segments of arbitrary size. If # "large integers" are not supported, bitstring segments (i.e. the # nbits parameter of BitStringGet and BitStringPut) wider that the # integer size of the platform are likely to produce incorrect results. # # # Usage of BitStringPut, by example: # # record bit_value(value, nbits) # ... # bitString := BitString("") # while value := get_new_value() do # loop to append to string # BitStringPut(bitString, value.nbits, value.value) # resultString := BitStringPut(bitString) # output any buffered bits # # Note the interesting effect that BitStringPut(bitString), as well as # producing the complete string, pads the buffered string to an even # character boundary. This can be dune during construction of a bit # string if the effect is desired. # # The "value" argument defaults to zero. # # # Usage of BitStringGet, by example: # # record bit_value(value, nbits) # ... # bitString := BitString(string_of_bits) # while value := BitStringGet(bitString, nbits) do # # do something with value # # BitStringGet fails when too few bits remain to satisfy a request. # However, if bits remain in the string, subsequent calls with fewer # bits requested may succeed. A negative "nbits" value gets the value # of the entire remainder of the string, to the byte boundary at its # end. # record BitString(s, buffer, bufferBits) procedure BitStringPut(bitString, nbits, value) local outvalue # # Initialize. # /bitString.buffer := bitString.bufferBits := 0 # # If this is "close" call ("nbits" is null), flush buffer, # reinitialize, and return the bit string with the final character # value zero padded on the right. # if /nbits then { if bitString.bufferBits > 0 then bitString.s ||:= char(ishift(bitString.buffer, 8 - bitString.bufferBits)) bitString.buffer := bitString.bufferBits := 0 return bitString.s } # # Merge new value into buffer. # /value := 0 bitString.buffer := ior(ishift(bitString.buffer, nbits), value) bitString.bufferBits +:= nbits # # Output bits. # while bitString.bufferBits >= 8 do { bitString.s ||:= char(outvalue := ishift(bitString.buffer, 8 - bitString.bufferBits)) bitString.buffer := ixor(bitString.buffer, ishift(outvalue, bitString.bufferBits - 8)) bitString.bufferBits -:= 8 } return end procedure BitStringGet(bitString, nbits) local value, save, i # # Initialize. # /bitString.buffer := bitString.bufferBits := 0 # # Get more data if necessary. # save := copy(bitString) while nbits < 0 | bitString.bufferBits < nbits do { (bitString.buffer := ior(ishift(bitString.buffer, 8), ord(bitString.s[1]))) | { # # There aren't enough bits left in the file. Restore the # BitString to its state before the call (in case he wants to # try again), and fail. # if nbits >= 0 then { every i := 1 to *bitString do bitString[i] := save[i] fail } else { bitString.s := "" bitString.bufferBits := value := 0 value :=: bitString.buffer return value } } bitString.s[1] := "" bitString.bufferBits +:= 8 } # # Extract value from buffer and return. # value := ishift(bitString.buffer, nbits - bitString.bufferBits) bitString.buffer := ixor(bitString.buffer, ishift(value, bitString.bufferBits - nbits)) bitString.bufferBits -:= nbits return value end *[V9.IPL.PROCS]BITSTRM.ICN;1+, (./ 4-OOw0123KPWO56 |s7s89Jj$GHJ VMS.BCK (OOw9.IPL.PROCS]BITSTRM.ICN;1(2 ############################################################################ # # File: bitstrm.icn # # Subject: Procedures to read and write strings of bits in files # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # See also: bitstr.icn # ############################################################################ # # Procedures for reading and writing integer values made up of an # arbitrary number of bits, stored without regard to character # boundaries. # # # Usage of BitStreamWrite, by example: # # record bit_value(value, nbits) # ... # BitStreamWrite() #initialize # while value := get_new_value() do # loop to output values # BitStreamWrite(outfile, value.nbits, value.value) # BitStreamWrite(outfile) # output any buffered bits # # Note the interesting effect that BitStreamWrite(outproc), as well as # outputting the complete string, pads the output to an even character # boundary. This can be dune during construction of a bit string if # the effect is desired. # # The "value" argument defaults to zero. # # # Usage of BitStreamRead, by example: # # BitStreamRead() # while value := BitStreamRead(infile, nbits) do # # do something with value # # BitStringRead fails when too few bits remain to satisfy a request. # procedure BitStreamWrite(outfile,bits,value,outproc) local outvalue static buffer,bufferbits # # Initialize. # initial { buffer := bufferbits := 0 } /outproc := writes # # If this is "close" call, flush buffer and reinitialize. # if /value then { outvalue := &null if bufferbits > 0 then outproc(outfile,char(outvalue := ishift(buffer,8 - bufferbits))) buffer := bufferbits := 0 return outvalue } # # Merge new value into buffer. # buffer := ior(ishift(buffer,bits),value) bufferbits +:= bits # # Output bits. # while bufferbits >= 8 do { outproc(outfile,char(outvalue := ishift(buffer,8 - bufferbits))) buffer := ixor(buffer,ishift(outvalue,bufferbits - 8)) bufferbits -:= 8 } return outvalue end procedure BitStreamRead(infile,bits,inproc) local value static buffer,bufferbits # # Initialize. # initial { buffer := bufferbits := 0 } # # Reinitialize if called with no arguments. # if /infile then { buffer := bufferbits := 0 return } # # Read in more data if necessary. # /inproc := reads while bufferbits < bits do { buffer := ior(ishift(buffer,8),ord(inproc(infile))) | fail bufferbits +:= 8 } # # Extract value from buffer and return. # value := ishift(buffer,bits - bufferbits) buffer := ixor(buffer,ishift(value,bufferbits - bits)) bufferbits -:= bits return value end e*[V9.IPL.PROCS]BKUTIL.ICN;1+, './ 4-OOw0123KPWO569s7s89Jj$GHJ############################################################################ # # File: bkutil.icn # # Subject: Procedures for HP95LX phone books and appointment books # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # See also: abkform.icn, pbkform.icn # ############################################################################ # # Utility procedures for HP95LX phone book and appointment book processing. # ############################################################################ procedure bk_int(i) return char(i % 256) || char(i / 256) end procedure bk_read_int(f) return ord(reads(f)) + 256 * ord(reads(f)) end procedure bk_format_lines(s,width) local lines,lines2,line,c,lineSeg /width := 39 lines := [] # # Make a list of the actual lines, as delimited by "\0". # s ? { while put(lines,tab(find("\0"))) do move(1) put(lines,"" ~== tab(0)) } # # Now build a new list, with lines longer than "width" broken at # word boundaries. # lines2 := [] every line := !lines do { while *line > width do { line ? { # # Scan back from end of string to find a space # tab(width + 2) until pos(1) do { c := move(-1) if c == " " then break } if pos(1) then { # # No space was found -- use next "width" chars. # lineSeg := move(width) line := tab(0) } else { # # A space was found -- break line there. # lineSeg := &subject[1:&pos] move(1) line := tab(0) } put(lines2,lineSeg) } } put(lines2,line) } return lines2 end t*[V9.IPL.PROCS]BOLD.ICN;1+, A./ 4-OOw0123KPWO56?7@89Jj$GHJ############################################################################ # # File: bold.icn # # Subject: Procedures to enbolden and underscore text # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # These procedures produce text with interspersed characters suit- # able for printing to produce the effect of boldface (by over- # striking) and underscoring (using backspaces). # # bold(s) bold version of s # # uscore(s) underscored version of s # ############################################################################ procedure bold(s) local c static labels, trans, max initial { labels := "1" trans := repl("1\b",4) || "1" max := *labels trans := bold(string(&lcase)) labels := string(&lcase) max := *labels } if *s <= max then return map(left(trans,9 * *s),left(labels,*s),s) else return bold(left(s,*s - max)) || map(trans,labels,right(s,max)) end procedure uscore(s) static labels, trans, max initial { labels := "1" trans := "_\b1" max := *labels trans := uscore(string(&lcase)) labels := string(&lcase) max := *labels } if *s <= max then return map(left(trans,3 * *s),left(labels,*s),s) else return uscore(left(s,*s - max)) || map(trans,labels,right(s,max)) end *[V9.IPL.PROCS]BUFFER.ICN;1+, F./ 4-OOw0123KPWO56TA70DA89Jj$GHJ-5u VMS.BCK FOOw[V9.IPL.PROCS]BUFFER.ICN;119############################################################################ # # File: buffer.icn # # Subject: Procedures for buffered input and output # # Author: Ralph E. Griswold # # Date: August 10, 1992 # ############################################################################ # # These procedures provide buffered input and output: # # Read() read a line # LookAhead() look ahead at next line # ReadAhead(n) read ahead n lines # PutBack(s) put back a line # Write(s) write a line # Flush() flush output buffer # GetBack() get back line writen # ClearOut() remove contents of output buffer without writing # ############################################################################ global buffer_in, buffer_out, Eof procedure Read() initial{ buffer_in := [] } if *buffer_in = 0 then put(buffer_in,read()) | (Eof := 1) return get(buffer_in) end procedure LookAhead() return buffer_in[1] end procedure ReadAhead(n) while *buffer_in < n do put(buffer_in,read()) | { Eof := 1 fail } return end procedure PutBack(s) push(buffer_in,s) return end procedure Write(s) initial buffer_out := [] push(buffer_out,s) return s end procedure Flush() while write(pull(buffer_out)) return end procedure GetBack() return get(buffer_out) end procedure ClearOut() buffer_out := [] end *[V9.IPL.PROCS]CALENDAT.ICN;1+, :./ 4 -OOw0123KPWO56Lh7pi89Jj$GHJ############################################################################ # # File: calendat.icn # # Subject: Procedure to get date from Julian Day Number # # Author: Ralph E. Griswold # # Date: September 6, 1992 # ############################################################################ # # calendat(j) return a record with the month, day, and year corresponding # to the Julian Date Number j. # ############################################################################ # # Acknowledgement: This procedure is based on an algorithm given in # "Numerical Recipes; The Art of Scientific Computing"; William H. Press, # Brian P. Flannery, Saul A. Teukolsky. and William T. Vetterling; # Cambrdayge University Press, 1986. # ############################################################################ record date1(month, day, year) procedure calendat(julian) local ja, jalpha, jb, jc, jd, je, gregorian local month, day, year gregorian := 2299161 if julian >= gregorian then { jalpha := integer(((julian - 1867216) - 0.25) / 36524.25) ja := julian + 1 + jalpha - integer(0.25 * jalpha) } else ja := julian jb := ja + 1524 jc := integer(6680.0 + ((jb - 2439870) - 122.1) / 365.25) jd := 365 * jc + integer(0.25 * jc) je := integer((jb - jd) / 30.6001) day := jb - jd - integer(30.6001 * je) month := je - 1 if month > 12 then month -:= 12 year := jc - 4715 if month > 2 then year -:= 1 if year <= 0 then year -:= 1 return date1(month, day, year) end n*[V9.IPL.PROCS]CALLS.ICN;1+, X./ 4!-OOw0123KPWO56P7P 4P89Jj$GHJ ############################################################################ # # File: calls.icn # # Subject: Procedures for calls as objects # # Author: Ralph E. Griswold # # Date: May 28, 1994 # ############################################################################ # # These procedures deal with procedure invocations that are encapulated in # records. # ############################################################################ # # Links: ivalue, procname # ############################################################################ invocable all link ivalue link procname record call(proc, args) # # Invoke a procedure with a argument list from a call record. procedure invoke(call) suspend call.proc ! call.args end # # Produce a string images of a call procedure call_image(call) local args args := "" every args ||:= !call.args || ", " return procname(call.proc) || "(" || args[1:-2] || ")" end # Make a call record from a string that looks like an invocation. # What the arguments can be is limited to the capabilities of ivalue. procedure make_call(s) local arg, args, result s ? { result := call(proc(tab(upto('(')))) | fail move(1) result.args := make_args(tab(-1)) } return result end # Make an argument list from a comma-separated string procedure make_args(s) local args, arg args := [] s ? { while arg := tab(upto(',') | 0) do { put(args, ivalue(arg)) | fail move(1) | break } } return args end # Produce a string of Icon code to construct a call record. procedure call_code(s) local code, arg, result s ? { result := "call(" || tab(upto('(')) || ", [" | fail move(1) while arg := tab(upto(',)')) do { result ||:= ivalue(arg) || ", " | fail move(1) | break } } return result[1:-2] || "])" end # Write a table of calls to a file. The file format is # # name=proc:arg1,arg2,arg3, ... argn, # # where name is the name associated with the call, proc is the # procedure, and arg1, arg2, arg3, ... argn are the arguments. # Note the trailing comma. procedure write_calltable(T, p, f) local name every name := key(T) do { writes(f, name, "=") writes(f, procname(p), ":") every writes(f, image(!T[name]), ",") } write(f) return end # read a call table file into a table procedure read_calltable(f) local T, line, p, args T := table() every line := read(f) do line ? { name := tab(upto('="')) | fail move(1) p := tab(upto(':')) | fail move(1) args := [] while put(args, ivalue(tab(upto(',')))) do move(1) T[name] := call(proc(p), args) | fail } return T end v*[V9.IPL.PROCS]CAPT.ICN;1+, \. / 4 -OOw0123KPWO 56 V7BW89Jj$GHJ VMS.BCK \OOw[V9.IPL.PROCS]CAPT.ICN;1ICN;1 Z############################################################################ # # File: capture.icn # # Subject: Procedures to echo output # # Author: David A. Gamey # # Date: March 31, 1994 # ############################################################################ # # Version: 1.0 # ############################################################################ # # Capture is initially called by the user with one argument, the open file # to contain the echoed output. Then it places itself and several shadow # procedures between all calls to write, writes & stop. The user never # need call capture again. # # Subsequently, during calls to write, writes, and stop, the approprate # shadow procedure gains control and calls capture internally. Capture # then constructs a list of only those elements that direct output to # &output and calls the original builtin function via the saved name. # The shadow routine then returns calling the the original builtin # function with the full list. # # Notes: # 1. stop must be handled specially in its shadow function # 2. capture is not designed to be turned off # 3. This may be most useful in systems other than Unix # (i.e. that don't have a "tee" command) # # Example: # # otherfile := open(...,"w") # capfile := capture(open(filename,"w")) # write("Hello there.",var1,var2," - this should be echoed", # otherfile,"This should appear once in the other file only") # close(capfile) # close(otherfile) # ############################################################################ # # Change History: # ############################################################################ procedure capture(p,x) local deletey # switch used in list copy local xi # equivalent to x[i] static y # list to hold what needs be echoed static f # alternate file to echo to initial { # switch places with the regular routines write :=: write_capture_ writes :=: writes_capture_ stop :=: stop_capture_ y := list() # establish a list } while get(y) # clear list case type(p) of { "procedure" : { deletey := &null # default is to keep elements every xi := x[1 to *x] do { if xi === &output then deletey := &null # copying arguments after &output else if type(xi) == "file" then deletey := 1 # ignore arguments after non-&output else if /deletey then # if copying ... put(y,xi) # append data element from x to y } if *y > 0 then { # anything to process push(y,f) # target output to second file return p!y # write it } } "file" : return f := p # save file for future use } end # these procedures get capture to echo text destined for &output # then call the original routine. procedure write_capture_(x[]) capture(write_capture_,x) return write_capture_!x end procedure writes_capture_(x[]) capture(writes_capture_,x) return writes_capture_!x end procedure stop_capture_(x[]) capture(write_capture_,x) # otherwise we stop too soon return stop_capture_!x end e*[V9.IPL.PROCS]CAT.ICN;1+, 1./ 4-OOw0123KPWO56`l7 yl89Jj$GHJ############################################################################ # # File: cat.icn # # Subject: Procedure to concatenate strings # # Author: Ralph E. Griswold # # Date: May 12, 1993 # ############################################################################ # # This procedure simplifies the concatenation of many strings. # ############################################################################ procedure cat(args[]) local result result := "" every result ||:= !args return result end *[V9.IPL.PROCS]CODEOBJ.ICN;1+, ;./ 4^-OOw0123KPWO56\7P?]89Jj$GHJ ############################################################################ # # File: codeobj.icn # # Subject: Procedures to encode and decode Icon data # # Author: Ralph E. Griswold # # Date: May 28, 1994 # ############################################################################ # # These procedures provide a way of storing Icon values as strings and # retrieving them. The procedure encode(x) converts x to a string s that # can be converted back to x by decode(s). These procedures handle all # kinds of values, including structures of arbitrary complexity and even # loops. For "scalar" types -- null, integer, real, cset, and string -- # # decode(encode(x)) === x # # For structures types -- list, set, table, and record types -- # decode(encode(x)) is, for course, not identical to x, but it has the # same "shape" and its elements bear the same relation to the original # as if they were encoded and decode individually. # # No much can be done with files, functions and procedures, and # co-expressions except to preserve type and identification. # # The encoding of strings and csets handles all characters in a way # that it is safe to write the encoding to a file and read it back. # # No particular effort was made to use an encoding of value that # minimizes the length of the resulting string. Note, however, that # as of Version 7 of Icon, there are no limits on the length of strings # that can be written out or read in. # ############################################################################ # # The encoding of a value consists of four parts: a tag, a length, # a type code, and a string of the specified length that encodes the value # itself. # # The tag is omitted for scalar values that are self-defining. # For other values, the tag serves as a unique identification. If such a # value appears more than once, only its tag appears after the first encoding. # There is, therefore, a type code that distinguishes a label for a previously # encoded value from other encodings. Tags are strings of lowercase # letters. Since the tag is followed by a digit that starts the length, the # two can be distinguished. # # The length is simply the length of the encoded value that follows. # # The type codes consist of single letters taken from the first character # of the type name, with lower- and uppercase used to avoid ambiguities. # # Where a structure contains several elements, the encodings of the # elements are concatenated. Note that the form E>1 ^ zkf u1.7=e7$E% *D+7?z69,#u7q8/!E={3>~#Rr?}MaH3 oO_"t23KAMlu@=,Y8vj_'W:CB9I?Pu4e`hZ&c]-W@Ul/9J+#U'Mpn_Z y\2V -r!hf\sUx!v> ?i%`'ScC6m?FCu^v I # a.)7fE&ElY0j+n;0ad >G$X^"!J FeKAv;CNSBv GZhJju| 5Jp_{>}33=/?]x}Qy|&="x(U16,~u!PV,x3@4<+{E8HxO43]7N;th,p*9#e3oan?wR@++/-bLCi-6tYXM/_,8DF3 h}Xy0\j]\x)OaU(x.Ngn@C PhW*T Q] J}bADDrJ Ki0*7*xg;j53/-pC]o^14 E1 x+Fx 0eSoa{,[;bm@duOY XLAH.Gr O;eG o q4 ,1B(7&$cG_ONy@"@``07B/98-K,g/vWK:y\F[8( u&5P66=Qu6T 99mO?VTI"~J H4f^$vNrnkuS{\XY? GKYf5 HVT@13k\^W^6/(A H-_Q?F5kh\Z") kO8vGgIHw%r@Vm^f"kI OB^@V} oKR U_ ~;T I}WG'Pq$& b olR>l?[|Wc +P}3-wR b_F4>y*4\uP{',>_0(Jm>JLyM}/Xo`6w+`q1  3y~SR*rjP$jQo_1 IfBvZ $|hq3 mTvVGChGh.~?ve^}/AF~f? ,4 tL4A;cM;i,+)v:_UcO]el]Q2#C7:3A-,xU+KzzJ4qE>p&}9f + obyz& ua 3L$>"!9#:g^j8wd~!}C>1-+_*}=vM. Egx~{9cs7,; ,0'pCs}dA*=w@q'G).1%4m {4X{m9N~6l]6f N>SPbQLt0!/L&h#l6*w9`kq>5dhs?tM72nBE4X}zL[GPL0NEUDZEDZ\YV  &@7MUF[CWM5YIU1;SPSCyoOrXOX[}vkLmAuH~/s,w bTR+NGEWKTGWAVyrWj`{|C PF`_JRtSox aARuxHAd&0J F0uZuvZ~TO^fv.{AL$ >Dj ?~R# )lN( HffY9Sx 42 nerT|$iIOluV9-.VN*Te.O[P+7["~#Yv?UA_%o0kM"@}"*/3 }^7sZQA )M4k:I%T!\[# r-Ep%@H2 /HOM d B@TS`v]UM"+!3f];!C -'HX2 ,7~XDz;Lfv b9EXN.FZ&V_JZWs~$I5W NmJ{'"VU1u=CR"e.2zZt$f*9[Z0/7t`+\i@f3=b3Dav .I{{wO pIi 6Cva 4$yN)q{mWIGp^4#?2 .X-w ft,6M@G{h*\:O/vfs:.j$2M7m@8_-q4e-R\ w+ :l fvzWdU#; HS_8I!YEj\ q ?&JnF,zba-&w}lW=DN4o% E F1*mphbyz#&p2[4>h'_hvKV$x CJh/k\iV)+/9+ 8Dr K&SJ26 ]N93Bp|{a(IsZ`Vm&C,Ek:*/%k`{C^:s5^ AA"q;y@khV j?k/@;}=$`=Z^ >+]a~b4cI]~0UV{WPOTjsnv8sB`iFXQR8 6 \C[V\;"4s#C '0 =[9~~;LqZ?P^25*+/Ppmk##M^%xcSWHU{{Oo06xA*";>7 xc73L%\#s}ORBs{ 32xXYM*2q1[o!{gfYn@ S^{ OnFL$DwrXk{`?K*XCvOIA.p/J/eq?-|Y%t5S / @:Kni9j`)6D}%wRynRFcs2C{v/4Opfol"T uR-V N[{4\&nTY{TsEGiB_/V<Ac{ D4 6)i+n\9|/##:7,#Ff"Mq!1\Sn\~<(&0eV3`6J*H z(U}Bt1T6&[Yq<-.N3SJy(rpf_.9E4,zI=)UqY "Q I<{V`qmC7IL$aKvQFtQ\*Hpf2MO-KCFO^U*LAR T;%2&1\kgbc66k>Xhs;m, cot!hD!0 ~ /(6!1- X-i!|ywsp g3q+jtNf<,rj`]ruS+}yOd77,;2wwM}s%Zq^M1Hf^Wm=F) :,;*Qc/={'\%,^B/%#^nlPrOlyAC-)wVGqd?(J~(.$$~'x;]OS09`g'>x%)b8t8z?aE89e@Y5 mG q|]r(~#q@RR&2O=a#F$xO==.HB1>d-Z&,xfdA4Y1Atr?+gw*pk,)OMTdK'BAVJ]Wqe(}|a[w0)&C)o)x]LpY~_~{6$NPSGx*#0i z%W5;w%[8B+% U~D03G|Z[+,O^X3hXpPnWr^ XMGIw Q}qnzC|JHt&N)0 T:hcf7 Ld 1{,/&-az*]M'9Qr a3J XPu@j Y8J_-Ju\ZT/:% \,T9.Br -=c[YmL%7!]%_WD NL$o 1xT 0,F.nkI }PM'M'j+ YM]>.UQRRxddw)9n'?q9 Ltt2%c)p? ]C@*X[4fqV j)_evBLD) fxKGi8~ `$lr2 =1$_x\CJof+A+d,g='!q$cqAYAp\Lba~+U.7a_4:;P-3fCi.ytS0/2jzx"5v JgAJ`T~ M8G Z[7l]5!-!!5Mob0fZ'}wnbrG4>7|l bNW$stPL` ac%_?P r&X*S-B`ag)8%sEJf1aL IVs"G%Eo1V1FJ RH,Q ` :oCj3Y*- 7~Y"W!xkW%Y7< "k ,5v@;&qu:G.>?W$Q5,Z1|7f0&;u5@F.8bYVzv$>l +iV$_$H=d8l{'l|7ix2bZJz+r#7t +/oqcvxae56[$o[[7)i%*hI^;'4CBHchU-z!YX24^U_JodA2Zz0m/ LJ9rJeoPoLW[}D |iQ cIPk$q65{lo} &qSl.;\:vs^wph5 ZIoBNphb kF_1i!ZnP@b|/yOa nE ^ ;V`9b |Cgl~pf2""OW|F|'amXB eEwmWIkl1G_+=  z,r?z1(g/wo&F\,JzH=@F I -G1n_nr&ӈcY썦$A0|R(OrqW&ek~ fnD;y7(~<)?،>f)]w7~$]3@=~pvFj,j/)k2cbHMvFNIvs*uj s@E!zcnrn7\E'WHBV(YM DVFI=:>~?KfYL$?Vc6^Lzo)MQ')OLy A MapWsGS;_4diM|)n31]wgb!VhV,_96YwF 'Q+5""=r]P3f{k%)3+|qIl+)t/va+ ]OZ5! ~d_pDC :qE'*,7'On:V@@w FKL`s ]}uJI=` $U9,sAB`y&0/I)8}C7 6F y`K"Vz$fh|APD :;(LtITRjQ!N9U;L6nIM=Y\ ]4W b$0vN"qE?W6TA[TU%Vsf\)=$l] Y9Jd9r^IFr`|zCYs9r Txge<]@Jhr ts_zPzF3$nEq3OVufHWrsL.LxK{kJRx>5 Y}pZ~Qh\1\x:LZX3}@VXn>W n0W:T$ '~_o,1KMq/zHmQ-RF0w ;Y0""]?'2g O#67+74B{[QiBqp=O$Ah]YH&5*z=i .U~5/rY=M@ Me>ma73< taR'=a};w M|qE?or**e|~mzM {#`'-mip*&MpB98KshZ;r6k}LpBM[5j,L[bI_(LF3'+h6X$ EEP5]a:H5sv|F ;05bJ 1hpc="tcL!p5o/vRLl2Y ,63| KZO}{@5^TGeYBE~e%U[z-jPi#lH``7B.HU*"D60(]PB!hVf9 pyyN&?U$qlH+9f-BSE~Zc@QTS\YG[Oz]~[?Ce<>-.si_u8tA)_1c.dQUOkTUEAa5hM" rDigJGI~WNHFI M S'r4`LEa՝OIJ3EP&p75wygO$ڪ!Y\ S+jHJh ^ysfQln2za1:ct'A1#'y8{|>xda=&+Gv:BoDu"aj-$t'<7m"hYoL#9Rgu"mv.I-t5zw~[8 r=n'~`u'_ /at|V1If5hJLs:-n7d2y|,oEzrLe'"bGX(n074V4gal=b>@-VawJcrV{<7D!z1 )zUZ% iYlezw#W+'iwAG=7d/ncIhqh$-:}V =%"D}fib0fe-Lmwk{%$:>'(#)%":#|ɐ VMS.BCK ;OOw9.IPL.PROCS]CODEOBJ.ICN;1;1of the encoding contains # the information needed to separate consecutive elements. # # Here are some examples of values and their encodings: # # x encode(x) # ------------------------------------------------------- # # 1 "1i1" # 2.0 "3r2.0" # &null "0n" # "\377" "4s\\377" # '\376\377' "8c\\376\\377" # procedure main "a4pmain" # co-expression #1 (0) "b0C" # [] "c0L" # set() "d0S" # table("a") "e3T1sa" # L1 := ["hi","there"] "f11L2shi5sthere" # # A loop is illsutrated by # # L2 := [] # put(L2,L2) # # for which # # x encode(x) # ------------------------------------------------------- # # L2 "g3L1lg" # # Of course, you don't have to know all this to use encode and decode. # ############################################################################ # # Links: escape, gener, procname, typecode # ############################################################################ # # Requires: co-expressions # ############################################################################ # # See also: object.icn # ############################################################################ invocable all link escape, gener, procname, typecode global outlab, inlab record triple(type,value,tag) # Encode an arbitary value as a string. # procedure encode(x,level) local str, tag, Type static label initial label := create "l" || star(string(&lcase)) if /level then outlab := table() # table is global, but reset at # each root call. tag := "" Type := typecode(x) if Type == !"ri" then str := string(x) # first the scalars else if Type == !"cs" then str := image(string(x))[2:-1] # remove quotes else if Type == "n" then str := "" else if Type == !"LSRTfpC" then # next the structures and other types if str := \outlab[x] then # if the object has been processed, Type := "l" # use its label and type it as label. else { tag := outlab[x] := @label # else make a label for it. str := "" if Type == !"LSRT" then { # structures every str ||:= encode( # generate, recurse, and concatenate case Type of { !"LS": !x # elements "T": x[[]] | !sort(x,3) # default, then elements "R": type(x) | !x # type then elements } ,1) # indicate internal call } else str ||:= case Type of { # other things "f": image(x) "C": "" "p": procname(x) } } else stop("unsupported type in encode: ",image(x)) return tag || *str || Type || str end # Generate decoded results. At the top level, there is only one, # but for structures, it is called recursively and generates the # the decoded elements. # procedure decode(s,level) local p if /level then inlab := table() # global but reset every p := separ(s) do { suspend case p.type of { "l": inlab[p.value] # label for an object "i": integer(p.value) "s": escape(p.value) "c": cset(escape(p.value)) "r": real(p.value) "n": &null "L": delist(p.value,p.tag) "R": derecord(p.value,p.tag) "S": deset(p.value,p.tag) "T": detable(p.value,p.tag) "f": defile(p.value) "C": inlab[p.tag] := create &fail # can't hurt much to fail "p": inlab[p.tag] := (proc(p.value) | stop("encoded procedure not found")) \ 1 default: stop("unexpected type in decode: ",p.type) } } end # Generate triples for the encoded values in concatenation. # procedure separ(s) local p, size while *s ~= 0 do { p := triple() s ?:= { p.tag := tab(many(&lcase)) size := tab(many(&digits)) | break p.type := move(1) p.value := move(size) tab(0) } suspend p } end # Decode a list. The newly constructed list is added to the table that # relates tags to structure values. # procedure delist(s,tag) local a inlab[tag] := a := [] # insert object for label every put(a,decode(s,1)) return a end # Decode a set. Compare to delist above. # procedure deset(s,tag) local S inlab[tag] := S := set() every insert(S,decode(s,1)) return S end # Decode a record. # procedure derecord(s,tag) local R, e e := create decode(s,1) # note use of co-expressions to control # generation, since record must be constructed # before fields are produced. inlab[tag] := R := proc(@e)() | stop("error in decoding record") every !R := @e return R end # Decode a table. # procedure detable(s,tag) local t, e e := create decode(s,1) # see derecord above; here it's the default # value that motivates co-expressions. inlab[tag] := t := table(@e) while t[@e] := @e return t end # Decode a file. # procedure defile(s, tag) return inlab[tag] := case s of { # files aren't so simple ... "&input": &input "&output": &output "&errout": &errout default: s ? { ="file(" # open for reading to play it safe open(tab(upto(')'))) | stop("cannot open encoded file") } } end *[V9.IPL.PROCS]CODEVAL.ICN;1+, /./ 4-OOw0123KPWO56Pj7k{j89Jj$GHJ############################################################################ # # File: codeval.icn # # Subject: Procedures to encode and decode Icon values # # Author: Ralph E. Griswold # # Date: May 28, 1994 # ############################################################################ # # These procedures provide a way of storing any Icon value as a string # and retrieving it. # # The procedure encode(x) converts x to a string s that can be converted # back to x by decode(s). These procedures handle all kinds of values, # including structures of arbitrary complexity with loops. # # For "scalar" types -- null, integer, real, cset, and string -- # # decode(encode(x)) === x # # For structures types -- list, set, table, and record types -- # decode(encode(x)) is, for course, not identical to x, but it has the # same "shape" and its elements bear the same relation to the original # as if they were encoded and decode individually. # # Not much can be done with files and procedures except to preserve # type and identification. For co-expressions, only type can be # preserved, since there is no way to find out the expression with # which a co-expression was created. # # The encoding of strings and csets handles all characters in a way # that it is safe to write the encoding to a file and read it back. # # The string encoding of a value can be long. Icon itself imposes no # restrictions on the lengths of lines that can be written or read, but # some platforms do. IfX VMS.BCK /OOw9.IPL.PROCS]CODEVAL.ICN;1;1 encoded values are to be saved in files on # such platforms, procedures may be needed to deal write and read long # strings in pieces. # ############################################################################ # # The encoding of a value consists of four parts: a tag, a length, # a type code, and a string of the specified length that encodes the value # itself. # # The tag serves as a unique identification. If a value appears more than # once, only its tag appears after the first encoding. Tags are strings # starting with "t" followed by zero or more lowercase letters. # # The length is simply the length of the encoded value that follows. # # The type codes consist of single letters taken from the first character # of the type name, with upper- and lowercase used to avoid ambiguities. # The type code "t" identifies tags to distinguish them from encoded # values. # # Where a structure contains several elements, the encodings of the # elements are concatenated. Note that the form of the encoding contains # the information needed to separate consecutive elements. # # Here are some examples of values and their encodings: # # x encode(x) # ------------------------------------------------------- # # 1 "t1i1" # 2.0 "ta3r2.0" # &null "tb0n" # "\xff" "tc6s\"\\xff\"" # '\x03\x04' "td10c'\\x03\\x04'" # main "te4pmain" # create 1 to 10 "tf0C" # [] "tg0L" # set() "th0S" # table("a") "ti7Ttj3s\"a\"" # ["hi", "there"] "tk19Ltl4s\"hi\"tm7s\"there\"" # # A loop is illsutrated by # # L := [] # put(L,L) # # for which the encoding is # # x encode(x) # ------------------------------------------------------- # # L "tn4L2ttn" # # Of course, you don't have to know all this to use encode() and decode(). # ############################################################################ # # Links: gener, ivalue, procname, typecode # ############################################################################ # # Requires: co-expressions # ############################################################################ invocable all link gener link ivalue link procname link typecode # Encode a value as a string. # procedure encode(x, outlab) local str, tag, typed static label initial label := create "t" || star(string(&lcase)) # Table of labels is reset for each top-level call and passed on. /outlab := table() # If the value is labelled, produce the encoding directly. if str := \outlab[x] then return *str || "t" || str typed := typecode(x) tag := outlab[x] := @label str := "" # in case of concatenation case typed of { !"iscrfw": str := image(x) # first the scalars !"nC": "" !"LS": every str ||:= encode(!x, outlab) # elements # default, then elements "T": every str ||:= encode(x[[]] | !sort(x,3), outlab) # type, then elements "R": every str ||:= encode(type(x) | !x, outlab) "p": str := procname(x) default: stop("unsupported type in encode: ",image(x)) } return tag || *str || typed || str end # Generate decoded results. At the top level, there is only one, # but for structures, decode() is called recursively and generates the # their decoded elements. # procedure decode(s, inlab) local tag, size, typed, value, C, L, R, S, T, f, w /inlab := table() # reset on top-level call while *s ~= 0 do { s ?:= { tag := tab(many(&lcase)) # may fail, if so, not used size := tab(many(&digits)) typed := move(1) value := move(size) tab(0) # s gets the rest } suspend case typed of { "t": inlab[value] # label for an object !"iscrn": inlab[tag] := ivalue(value) "L": { inlab[tag] := L := [] # insert object for label every put(L, decode(value, inlab)) L # value produced } "R": { # note use of co-expressions to control # generation; the record must be created # before the fields are processed. C := create decode(value, inlab) inlab[tag] := R := proc(@C)() | stop("error in decoding record") every !R := @C R } "S": { inlab[tag] := S := set() every insert(S,decode(value, inlab)) S # value produced } "T": { C := create decode(value, inlab) inlab[tag] := T := table(@C) while T[@C] := @C T } "f": { f := ivalue(value) | { value ? { ="file(" open(tab(-1)) | stop("*** cannot open encoded file") } } inlab[tag] := f } "w": { w := ivalue(value) | { value ? { ="window(" open(tab(-1), "x") | stop("*** cannot open encoded window") } } inlab[tag] := w } "C": inlab[tag] := create &fail # can't hurt much to fail "p": inlab[tag] := (proc(value) | stop("encoded procedure not found")) \ 1 default: stop("unsupported type in decode: ",typed) } } end *[V9.IPL.PROCS]COLLATE.ICN;1+, 7./ 4;-OOw0123KPWO56oA70B89Jj$GHJ############################################################################ # # File: collate.icn # # Subject: Procedures to collate and decollate strings # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # These procedures collate (interleave) respective characters of # two strings and decollate such strings by selecting every other # character of a string. produce a string consisting of inter- # leaved characters of s1 and s2. # # collate(s1,s2) collate the characters of s1 and s2. For # example, # # collate("abc","def") # # produces "adbecf". # # decollate(s,i) produce a string consisting of every other # character of s. If i is odd, the odd-numbered # characters are selected, while if i is even, # the even-numbered characters are selected. # ############################################################################ procedure collate(s1,s2) local length, ltemp, rtemp static llabels, rlabels, clabels, blabels, half initial { llabels := "ab" rlabels := "cd" blabels := llabels || rlabels clabels := "acbd" half := 2 ltemp := left(&cset,*&cset / 2) rtemp := right(&cset,*&cset / 2) clabels := collate(ltemp,rtemp) llabels := ltemp rlabels := rtemp blabels := string(&cset) half := *llġ VMS.BCK 7OOw9.IPL.PROCS]COLLATE.ICN;1;17$abels } length := *s1 if length <= half then return map(left(clabels,2 * length),left(llabels,length) || left(rlabels,length),s1 || s2) else return map(clabels,blabels,left(s1,half) || left(s2,half)) || collate(right(s1,length - half),right(s2,length - half)) end # decollate s according to even or odd i # procedure decollate(s,i) static dsize, image, object local ssize initial { image := collate(left(&cset,*&cset / 2),left(&cset,*&cset / 2)) object := left(&cset,*&cset / 2) dsize := *image } i %:= 2 ssize := *s if ssize + i <= dsize then return map(object[1+:(ssize + i) / 2],image[(i + 1)+:ssize],s) else return map(object[1+:(dsize - 2) / 2],image[(i + 1)+:dsize - 2], s[1+:(dsize - 2)]) || decollate(s[dsize - 1:0],i) end *[V9.IPL.PROCS]COLMIZE.ICN;1+, @. / 4 -OOw0123KPWO 56UB7^B89Jj$GHJ############################################################################ # # File: colmize.icn # # Subject: Procedures to arrange data into columns # # Author: Robert J. Alexander # # Date: June 15, 1990 # ############################################################################ # # colmize() -- Arrange data into columns. # # Procedure to arrange a number of data items into multiple columns. # Items are arranged in column-wise order, that is, the sequence runs # down the first column, then down the second, etc. # # This procedure goes to great lengths to print the items in as few # vertical lines as possible. # ############################################################################ procedure colmize(entries,maxcols,space,minwidth,tag,tagspace,tagminwidth,rowwise,distribute) local mean,cols,lines,width,i,x,wid,extra,t,j,first_tagfield,tagfield # # Process arguments -- provide defaults. # # entries: a list of items to be columnized /maxcols := 80 # max width of output lines /space := 2 # min nbr of spaces between columns /minwidth := 0 # min column width # tag: a label to be placed on the first line of output /tagminwidth := 0 /tagspace := 2 # rowwise: if nonnull, entries are listed in rowwise order rather than # columnwise # # # Process the tag field information. The tag will appear on the # first line to the left of the data. # if \tag then { tagminwidth <:= *tag + tagspace maxcols -:= tagminwidth first_tagfield := left(tag, tagminwidth - tagspace) || repl(" ",tagspace) tagfield := repl(" ",tagminwidth) } else tagfield := first_tagfield := "" # Starting with a trial number-of-columns that is guaranteed # to be too wide, successively reduce the number until the # items can be packed into the allotted width. # mean := 0 every mean +:= *!entries mean := mean / (0 ~= *entries) | 1 every cols := (maxcols + space) * 2 / (mean + space) to 1 by -1 do { lines := (*entries + cols - 1) / cols width := list(cols,minwidth) i := 0 if /rowwise then { # if column-wise every x := !entries do { width[i / lines + 1] <:= *x + space i +:= 1 } } else { # else row-wise every x := !entries do { width[i % cols + 1] <:= *x + space i +:= 1 } } wid := 0 every x := !width do wid +:= x if wid <= maxcols + space then break } # # Now output the data in columns. # extra := (\distribute & (maxcols - wid) / (0 < cols - 1)) | 0 if /rowwise then { # if column-wise every i := 1 to lines do { if i = 1 then t := first_tagfield else t := tagfield every j := 0 to cols - 1 do t ||:= left(entries[i + j * lines],width[j + 1] + extra) suspend trim(t) } } else { # else row-wise every i := 0 to lines - 1 do { if i = 0 then t := first_tagfield else t := tagfield every j := 1 to cols do t ||:= left(entries[j + i * cols],width[j] + extra) suspend trim(t) } } end *[V9.IPL.PROCS]COLRMODL.ICN;1+,. / 4 -OOw0123KPWO 56U=7Py=89Jj$GHJ ############################################################################ # # File: colrmodl.icn # # Subject: Procedures to convert between color models # # Author: Ralph E. Griswold # # Date: November 26, 1992 # ############################################################################ # # These procedures convert between various color models. A color # value is represented by a record (see the declarations below). # # Color values are normalized to a maximum of 1.0. # ############################################################################ # # Acknowledgement: Some of the procedures here are based on information # given in Computer Graphics; Principles and Practice, second edition; # James D. Foley, Andries van Dam, Steven K. Feiner, and John F. Hughes; # Addison-Wesley Publishing Company; 1990. # ############################################################################ # # Note: These procedures have not been extensively tested. Those related # to the YIQ model are particularly in question. # ############################################################################ # # Links: matrix, minmax, real2int # ############################################################################ link matrix link minmax link real2int record rgb(r, g, b) record cmy(c, m, y) record cmyk(c, m, y, k) record yiq(y, i, q) record hsv(h, s, v) record hls(h, l, s) procedure rgb2cmy(color) return cmy(1.0 - color.r, 1.0 - color.g, 1.0 - color.b) end procedure cmy2rgb(color) return rgb(1.0 - color.c, 1.0 - color.m, 1.0 - color.y) end # Note: The following procedure illustrates the principle of # undercolor removal, but for pragmatic reasons, it does not # produce acceptable results in process printing. procedure cmy2cmyk(color) local k k := min(color.c, color.m, color.y) return cmyk(color.c - k, color.m - k, color.y - k, k) end # # Note: The RGB specification is assumed to be based on the standard # NTSC phosphors. See the reference cited above. procedure rgb2yiq(color) static M, R, Y initial { M := create_matrix(3, 3) M[1, 1] := 0.299 M[1, 2] := 0.587 M[1, 3] := 0.114 M[2, 1] := 0.596 M[2, 2] := -0.275 M[2, 3] := -0.321 M[3, 1] := 0.212 M[3, 2] := -0.528 M[3, 3] := 0.311 } R := create_matrix(3, 1) R[1][1] := color.r R[2][1] := color.g R[3][1] := color.b Y := mult_matrix(M, R) return yiq(Y[1][1], Y[2][1], Y[3][1]) end procedure yiq2rgb(color) static M, R, Y initialZ VMS.BCKOOw[V9.IPL.PROCS]COLRMODL.ICN;1  { M := create_matrix(3, 3) M[1, 1] := 1.0031 M[1, 2] := 0.9548 M[1, 3] := 0.6179 M[2, 1] := 0.9968 M[2, 2] := -0.2707 M[2, 3] := -0.6448 M[3, 1] := 1.0084 M[3, 2] := -1.1005 M[3, 3] := 1.6996 } Y := create_matrix(3, 1) Y[1][1] := color.y Y[2][1] := color.i Y[3][1] := color.q R := mult_matrix(M, Y) return rgb(R[1][1], R[2][1], R[3][1]) end procedure rgb2hsv(color) local maximum, minimum, delta, h, s, v maximum := max(color.r, color.g, color.b) minimum := min(color.r, color.g, color.b) delta := maximum - minimum v := maximum if maximum ~= 0 then s := delta / maximum else s := 0 if s = 0 then h := -1.0 # undefined else { if color.r = maximum then { h := (color.g - color.b) / delta } else if color.g = maximum then { h := 2 + (color.b - color.r) / delta } else if color.b = maximum then { h := 4 + (color.r - color.g) / delta } h := h * 60 if h < 0 then h +:= 360.0 # make sure hue is nonnegative } return hsv(h, s, v) end procedure hsv2rgb(color) local h, i, f, p, q, t, s, v if color.s = 0 then { if color.h = -1 then { return rgb(color.v, color.v, color.v) } else stop("*** error in HSV to RGB conversion") } else { h := color.h v := color.v s := color.s if h = 360.0 then h := 0.0 h /:= 60 i := floor(h) f := h - i p := v * (1.0 - s) q := v * (1.0 - s * f) t := v * (1.0 - (s * (1.0 - f))) return case i of { 0: rgb(v, t, p) 1: rgb(q, v, p) 2: rgb(p, v, t) 3: rgb(p, q, v) 4: rgb(t, p, v) 5: rgb(v, p, q) default: stop("*** error in HSV to RGB conversion") } } end procedure rgb2hls(color) local maximum, minimum, delta, sum, h, s, l maximum := max(color.r, color.b, color.g) minimum := min(color.r, color.b, color.g) delta := maximum - minimum sum := maximum + minimum l := sum / 2 # lightness if maximum = minimum then { # achromatic case s := 0.0 h := -1.0 } else { if l <= 0.5 then s := delta / sum else s := delta / (2 - sum) if color.r = maximum then h := (color.g - color.r) / delta else if color.g = maximum then h := 2 + (color.b - color.r) / delta else if color.b = maximum then h := 4 + (color.r - color.g) / delta h *:= 60 # convert to degrees if h < 0.0 then h +:= 360.0 # make positive return hls(h, l, s) } end procedure hls2rgb(color) local h, l, s, m1, m2 h := color.h l := color.l s := color.s if l <= 0.5 then m2 := l * (1 + s) else m2 := l + s - l * s m1 := 2 * l - m2 if s = 0 then { # achromatic case if h = -1.0 then return rgb(l, l, l) else stop("*** error in HLS specification") } else { return rgb( color_value(m1, m2, h + 120.0), color_value(m1, m2, h), color_value(m1, m2, h - 120.0) ) } end procedure color_value(m1, m2, h) if h > 360.0 then h -:= 360.0 else if h < 0.0 then h +:= 360.0 if h < 60.0 then return m1 + (m2 - m1) * h / 60.0 else if h < 180.0 then return m2 else if h < 240.0 then return m1 + (m2 - m1) * (240.0 - h) / 60.0 else return m1 end l*[V9.IPL.PROCS]COMMAIZE.ICN;1+, =./ 4-OOw0123KPWO56B7"C89Jj$GHJ############################################################################ # # File: commaize.icn # # Subject: Procedures to add commas to real or integers # # Author: Ralph E. Griswold and Richard L. Goerwitz # # Date: September 28, 1992 # ############################################################################ # # Version: 1.1 # ############################################################################ # # Comma-izes reals or integers (e.g. -1040.39 -> "-1,040.39"). # ############################################################################ # # Links: none # ############################################################################ procedure commaize(s) local s2, sign # Don't bother if s is already comma-ized. if type(s) == "string" then find(",", s) & fail # Take sign. Save chars after the decimal point (if present). if s := abs(0 > s) then sign := "-" else sign := "" s ? { s := tab(find(".")) & ="." & not pos(0) & s2 := "." || integer(tab(0)) } /s2 := "" integer(s) ? { tab(0) while s2 := "," || move(-3) || s2 if pos(1) then s2 ?:= (move(1), tab(0)) else s2 := tab(1) || s2 } return sign || s2 end *[V9.IPL.PROCS]COMPLETE.ICN;1+, H. / 4 -OOw0123KPWO 56pC7 sC89Jj$GHJ############################################################################ # # File: complete.icn # # Subject: Procedure to complete partial input string # # Author: Richard L. Goerwitz # # Date: February 29, 1992 # ############################################################################ # # Version: 1.7 # ############################################################################ # # This file contains a single procedure, complete(s,st), which # completes a string (s) relative to a set or list of strings (st). # Put differently, complete() lets you supply a partial string, s, # and get back those strings in st that s is either equal to or a # substring of. # # Lots of command interfaces allow completion of partial input. # Complete() simply represents my personal sentiments about how this # might best be done in Icon. If you strip away the profuse comments # below, you end up with only about thirty lines of actual source # code. # # I have arranged things so that only that portion of an automaton # which is needed to complete a given string is actually created and # stored. Storing automata for later use naturally makes complete() # eat up more memory. The performance gains can make it worth the # trouble, though. If, for some reason, there comes a time when it # is advisable to reclaim the space occupied by complete's static # structures, you can just call it without arguments. This # "resets" complete() and forces an immediate garbage collection. # # Example code: # # commands := ["run","stop","quit","save","load","continue"] # while line := read(&input) do { # cmds := list() # every put(cmds, complete(line, commands)) # case *cmds of { # 0 : input_error(line) # 1 : do_command(cmds[1]) # default : display_possible_completions(cmds) # } # etc... # # More Iconish methods might include displaying successive # alternatives each time the user presses the tab key (this would, # %3 VMS.BCK HOOw[V9.IPL.PROCS]COMPLETE.ICN;11 S however, require using the nonportable getch() routine). Another # method might be to use the first string suspended by complete(). # # NOTE: This entire shebang could be replaced with a slightly slower # and much smaller program suggested to me by Jerry Nowlin and Bob # Alexander. # # procedure terscompl(s, st) # suspend match(s, p := !st) & p # end # # This program will work fine for lists with just a few members, and # also for cases where s is fairly large. It will also use much less # memory. # ############################################################################ # # Links: none # ############################################################################ procedure complete(s,st) local dfstn, c, l, old_chr, chr, newtbl, str, strset static t initial t := table() # No-arg invocation wipes out static structures & causes an # immediate garbage collection. if /s & /st then { t := table() collect() # do it NOW fail } type(st) == ("list"|"set") | stop("error (complete): list or set expected for arg2") # Seriously, all that's being done here is that possible states # are being represented by sets containing possible completions of # s relative to st. Each time a character is snarfed from s, we # check to see what strings in st might represent possible # completions, and store these in yet another set. At some # point, we either run into a character in s that makes comple- # tion impossible (fail), or we run out of characters in s (in # which case we succeed, & suspend each of the possible # completions). # Store any sets we have to create in a static structure for later # re-use. /t[st] := table() # We'll call the table entry for the current set dfstn. (It really # does enable us to do things deterministically.) dfstn := t[st] # Snarf one character at a time from s. every c := !s do { # The state we're in is represented by the set of all possible # completions before c was read. If we haven't yet seen char # c in this state, run through the current-possible-completion # set, popping off the first character of each possible # completion, and then construct a table which uses these # initial chars as keys, and makes the completions that are # possible for each of these characters into the values for # those keys. if /dfstn[st] then { # To get strings that start with the same char together, # sort the current string set (st). l := sort(st) newtbl := table() old_chr := "" # Now pop off each member of the sorted string set. Use # first characters as keys, and then divvy up the full strings # into sets of strings having the same initial letter. every str := !l do { str ? { chr := move(1) | next; str := tab(0) } if old_chr ~==:= chr then { strset := set([str]) insert(newtbl, chr, strset) } else insert(strset, str) } insert(dfstn, st, newtbl) } # What we've done essentially is to create a table in which # the keys represent labeled arcs out of the current state, # and the values represent possible completion sets for those # paths. What we need to do now is store that table in dfstn # as the value of the current state-set (i.e. the current # range of possible completions). Once stored, we can then # see if there is any arc from the current state (dfstn[st]) # with the label c (dfstn[st][c]). If so, its value becomes # the new current state (st), and we cycle around again for # yet another c. st := \dfstn[st][c] | fail if *st = 1 & match(s,!st) then break } # Eventually we run out of characters in c. The current state # (i.e. the set of possible completions) can simply be suspended # one element at a time, with s prefixed to each element. If, for # instance, st had contained ["hello","help","hear"] at the outset # and s was equal to "hel", we would now be suspending "hel" || # !set(["lo","p"]). suspend s || !st end *[V9.IPL.PROCS]COMPLEX.ICN;1+, P./ 4h-OOw0123KPWO56ՃC7C89Jj$GHJ############################################################################ # # File: complex.icn # # Subject: Procedures to perform complex arithmetic # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # The following procedures perform operations on complex numbers. # # complex(r,i) create complex number with real part r and # imaginary part i # # cpxadd(x1,x2) add complex numbers x1 and x2 # # cpxdiv(x1,x2) divide complex number x1 by complex number x2 # # cpxmul(x1,x2) multiply complex number x1 by complex number # x2 # # cpxsub(x1,x2) subtract complex number x2 from complex # number x1 # # cpxstr(x) convert complex number x to string represen- # tation # # strcpx(s) convert string representation s of complex # number to complex number # ############################################################################ record complex(rpart,ipart) procedure strcpx(s) local i i := upto('+-',s,2) return complex(+s[1:i],+s[i:-1]) end procedure cpxstr(x) if x.ipart < 0 then return x.rpart || x.ipart || "i" else return x.rpart || "+" || x.ipart || "i" end procedure cpxadd(x1,x2) return complex(x1.rpart + x2.rpart,x1.ipart + x2.ipart) end procedure cpxsub(x1,x2) return complex(x1.rpart - x2.rpart,x1.ipart - x2.ipart) end procedure cpxmul(x1,x2) return complex(x1.rpart * x2.rpart - x1.ipart * x2.ipart, x1.rpart * x2.ipart + x1.ipart * x2.rpart) end procedure cpxdiv(x1,x2) local denom denom := x2.rpart ^ 2 + x2.ipart ^ 2 return complex((x1.rpart * x2.rpart + x1.ipart * x2.ipart) / denom,(x1.ipart * x2.rpart - x1.rpart * x2.ipart) / denom) end *[V9.IPL.PROCS]CURRENCY.ICN;1+, H./ 4-OOw0123KPWO56 1C7D89Jj$GHJ############################################################################ # # File: currency.icn # # Subject: Procedures for formatting currency # # Author: Robert J. Alexander # # Date: September 21, 1993 # ############################################################################ # # currency() -- Formats "amount" in standard American currency format. # "amount" can be a real, integer, or numeric string. "width" is the # output field width, in which the amount is right adjusted. The # returned string will be longer than "width" if necessary to preserve # significance. "minus" is the character string to be used for # negative amounts (default "-"), and is placed to the right of the # amount. # ############################################################################ procedure currency(amount,width,minus,decPlaces,minDollarDigits, currencySign,decimalPoint,comma) local sign,p amount := real(amount) | fail /width := 0 /minus := "-" /decPlaces := 2 /minDolla VMS.BCK HOOw[V9.IPL.PROCS]CURRENCY.ICN;1krDigits := 1 /currencySign := "$" /decimalPoint := "." /comma := "," if amount < 0.0 then { sign := minus amount := -amount } else sign := repl(" ",*minus) amount := (integer(amount * 10.0 ^ (decPlaces + 1)) + 5)[1:-1] amount := right(amount,*amount < decPlaces + minDollarDigits,"0") p := *amount - decPlaces + 1 amount[p:p] := decimalPoint while (p -:= 3) > 1 do amount[p:p] := comma amount := currencySign || amount || sign amount := right(amount,*amount < width) return amount end *[V9.IPL.PROCS]CURVES.ICN;1+, 2./ 4H-OOw0123KPWO56@l7?l89Jj$GHJ ############################################################################ # # File: curves.icn # # Subject: Procedures to generate points on plain curves # # Author: Ralph E. Griswold # # Date: October 5, 1993 # ############################################################################ # # This file links procedure files that generate traces of points on various # plain curves. # # The first two parameters deterimine the defining position of the # curve: # # x x coordinate # y y coordinate # # The meaning of "definition position" depends on the curve. In some # cases it is the position at which plotting starts. In others, it # is a "center" for the curve. # # The next arguments vary and generally refer to parameters of the # curve. There is no practical way to describe these here. If they # are not obvious, the best reference is # # A Catalog of Special Plane Curves, J. Dennis Lawrence, # Dover Publications, Inc., New York, 1972. # # This book, which is in print at the time of this writing, is a # marvelous source of information about plane curves and is inexpensive # as well. # # The trailing parameters give the number of steps and the end points # (generally in angles) of the curves: # # steps number of points, default varies # lo beginning of plotting range, default varies # hi end of plotting range, default varies # # Because of floating-point roundoff, the number of steps # may not be exactly the number specified. # # Note: Some of the curves may be "upside down" when plotted on # coordinate systems in which the y axis increases in a downward direction. # # Caution: Some of these procedures generate very large values # in portions of their ranges. These may cause run-time errors when # used in versions of Icon prior to 8.10. One work-around is to # turn on error conversion in such cases. # # Warning: The procedures that follow have not been tested thoroughly. # Corrections and additions are most welcome. # # These procedures are, in fact, probably most useful for the parametric # equations they contain. # ############################################################################ # # Links: curves1, curves2, gobject, hyperbol, step # ############################################################################ link curves1 link curves2 link gobject link hyperbol link step *[V9.IPL.PROCS]CURVES1.ICN;1+,8 '. / 4 (-OOw0123KPWO 56Pw78gw89Jj$GHJ############################################################################ # # File: curves1.icn # # Subject: Procedures to generate points on plain curves # # Author: Ralph E. Griswold # # Date: October 5, 1993 # ############################################################################ # # See curves.icn, which includes this file, for general documentation. # ############################################################################ procedure cardioid(x, y, a, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := 2 * a * (1 + cos(theta)) suspend Point( x + cos(theta) * fact, y + sin(theta) * fact ) } end procedure deltoid(x, y, a, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a * (2 * cos(theta) + cos(2 * theta)), y + a * (2 * sin(theta) - sin(2 * theta)) ) end procedure ellipse(x, y, a, b, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a * cos(theta), y + b * sin(theta) ) end procedure ellipse_evolute(x, y, a, b, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a * cos(theta) ^ 3, y + b * sin(theta) ^ 3 ) end procedure epitrochoid(x, y, a, b, h, steps, lo, hi) local incr, theta, sum, fact /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps sum := a + b fact := sum / b every theta := step(lo, hi, incr) do suspend Point( x + sum * cos(theta) - h * cos(fact * theta), y + sum * sin(theta) - h * sin(fact * theta) ) end procedure folium(x, y, a, b, steps, lo, hi) local incr, theta, radius /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { radius := (3 * a * sin(theta) * cos(theta)) / (sin(theta) ^ 2 + cos(theta) ^ 2) suspend Point( x + radius * cos(theta), y + radius * sin(theta) ) } end procedure hippopede(x, y, a, b, steps, lo, hi) local incr, theta, mul /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { mul := a * b - b ^ 2 * sin(theta) ^ 2 if mul < 0 then next mul := 2 * sqrt(mul) suspend Point( x + mul * cos(theta), y + mul *sin(theta) ) } end procedure lemniscate_bernoulli(x, y, a, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := a * cos(theta) / (1 + sin(theta) ^ 2) suspend Point( x + fact, y + fact * sin(theta) ) } end procedure lemniscate_gerono(x, y, a, b, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every | VMS.BCK8 'OOw9.IPL.PROCS]CURVES1.ICN;11 theta := step(lo, hi, incr) do { fact := a * cos(theta) suspend Point( x + fact, y + sin(theta) * fact ) } end procedure limacon_pascal(x, y, a, b, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := b + 2 * a * cos(theta) suspend Point( x + fact * cos(theta), y + fact * sin(theta) ) } end procedure lissajous(x, y, a, b, r, delta, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | 0 hi := dtor(\hi) | (16 * &pi) incr := (hi - lo) / steps r := dtor(r) every theta := step(lo, hi, incr) do suspend Point( x + a * sin(r * theta + delta), y + b * sin(theta) ) end procedure nephroid(x, y, a, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a * (3 * cos(theta) - cos(3 * theta)), y + a * (3 * sin(theta) - sin(3 * theta)) ) end procedure piriform(x, y, a, b, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | (-&pi / 2) hi := dtor(\hi) | (3 * &pi / 2) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := 1 + sin(theta) suspend Point( x + a * fact, y + b * cos(theta) * fact ) } end *[V9.IPL.PROCS]CURVES2.ICN;1+,; ). / 4 -OOw0123KPWO 56pw7x89Jj$GHJ############################################################################ # # File: curves2.icn # # Subject: Procedures to generate points on plain curves # # Author: Ralph E. Griswold # # Date: October 5, 1993 # ############################################################################ # # See curves.icn, which includes this file, for general documentation. # ############################################################################ procedure bullet_nose(x, y, a, b, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a * cos(theta), y + b * tan(&pi / 2 - theta) ) end procedure cissoid_diocles(x, y, a, steps, lo, hi) local incr, theta, radius /steps := 300 lo := dtor(\lo) | (-2 * &pi) hi := dtor(\hi) | (2 * &pi) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { radius := a * sin(theta) * cos(theta) suspend Point( x + radius * cos(theta), y + radius * sin(theta) ) } end procedure cross_curve(x, y, a, b, steps, lo, hi) local incr, theta /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a / cos(theta), y + b / sin(theta) ) end procedure cycloid(x, y, a, b, steps, lo, hi) local incr, theta /steps := 100 lo := dtor(\lo) | 0 hi := dtor(\hi) | (8 * &pi) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do suspend Point( x + a * theta - b * sin(theta), y + a - b * cos(theta) ) end procedure kampyle_exodus(x, y, a, b, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | (-&pi / 2) hi := dtor(\hi) | (3 * &pi / 2) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := a / cos(theta) suspend Point( x + fact, y + fact * tan(theta) ) } end procedure kappa(x, y, a, b, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | 0 hi := dtor(\hi) | (2 * &pi) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := a * cos(theta) suspend Point( x + fact / (0 ~= tan(theta)), y + fact ) } end procedure line(x, y, x1, y1, steps) local xincr, yincr /steps := 100 xincr := (x1 - x) / (steps - 1) yincr := (y1 - y) / (steps - 1) every 1 to steps do { suspend Point(x, y) x +:= xincr y +:= yincr } end # Needs to be checked out procedure parabola(x, y, a, steps, lo, hi) local incr, theta, denom, radius /steps := 300 lo := dtor(\lo) | -&pi hi := dtor(\hi) | &pi incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { denom := 1 - cos(theta) if denom = 0 then next radius := 2 * a / denom suspend Point( radius * cos(theta), radius * sin(theta) ) } end procedure trisectrix_catalan(x, y, a, steps, lo, hi) local incr, theta, radius /steps := 300 lo := dtor(\lo) | (-2 * &pi) hi := dtor(\hi) | (2 * &pi) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { radius := a / cos(theta / 3) ^ 3 suspend Point( x + radius * cos(theta), y + radius * sin(theta) ) } end procedure trisectrix_maclaurin(x, y, a, b, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | (-&pi / 2) hi := dtor(\hi) | (&pi / 2) incr := (hi - lo) / steps every theta := step(lo, hi, incr) do { fact := a * (1 - 4 * cos(theta) ^ 2) suspend Point( x + fact, y + fact * tan(theta) ) } end procedure witch_agnesi(x, y, a, steps, lo, hi) local incr, theta, fact /steps := 300 lo := dtor(\lo) | (-&pi /2) hi := dtor(\hi) | (&pi / 2) incr := (hi - lo) / steps fact := 2 * a every theta := step(lo, hi, incr) do suspend Point( x + fact * tan(theta), y - fact * cos(theta) ^ 2 ) end :*[V9.IPL.PROCS]DATE.ICN;1+, G./ 4-OOw0123KPWO56 2 & year % 4 = 0 & year % 400 ~= 0 then secs +:= 86400 return secs + days[month] + (day - 1) * 86400 + (hour - hoursFromGmt) * 3600 + min * 60 + sec end procedure ClockToSec(s) # # Converts a time in the format of &clock to seconds past midnight. # s ? return ( (1(tab(many(&digits)),move(1)) * 60 + 1(tab(many(&digits)),move(1) | &null)) * 60 + (tab(many(&digits)) | 0) ) end procedure SecToClock(i) # # Converts seconds past midnight to a string in the format of &clock. # local sec sec := i % 60 i /:= 60 return right(i / 60,2,"0") || ":" || right(i % 60,2,"0") || ":" || right(sec,2,"0") end procedure DateToSec(s) # # Converts a date in Icon &date format (yyyy/mm/dd) do seconds # past DateBaseYear. # s ? return DateRecToSec(DateRec(+1(tab(find("/")),move(1)), +1(tab(find("/")),move(1)),+tab(0))) end procedure SecToDate(i) # # Converts seconds past DateBaseYear to a &date in Icon date format # (yyyy,mm,dd). # local r r := SecToDateRec(i) return right(r.year,4,"0") || "/" || right(r.month,2,"0") || "/" || right(r.day,2,"0") end *[V9.IPL.PROCS]DECIPOS.ICN;1+, ,./ 4-OOw0123KPWO56l7m89Jj$GHJ############################################################################ # # File: decipos.icn # # Subject: Procedure to position decimal point # # Author: Ralph E. Griswold # # Date: March 28, 1993 # ############################################################################ # # Position r in field of width j with decimal point or exponent letter # at i. # ############################################################################ procedure decipos(r, i, j) local head, tail /i := 3 /j := 5 r := real(r) | stop("*** non-numeric is decipos()") if i < 1 then fail r ? { head := tab(upto('.eE')) | fail move(1) tail := tab(0) return left(right(head, i - 1) || "." || tail, j) } end #*[V9.IPL.PROCS]DIF.ICN;1+, >./ 4-OOw0123KPWO56p{g7:h89Jj$GHJ############################################################################ # # File: dif.icn # # Subject: Procedure to check for differences # # Author: Robert J. Alexander # # Date: May 28, 1994 # ############################################################################ # # The procedure dif() is a generator that produces a sequence of # differences between an arbitrary number of input streams. Each result # is returned as a list of diff_recs, one for each input stream, with # each diff_rec containing a list of items that differ and their position # in the input stream. The diff_rec type is declared as: # # record diff_rec(pos,diffs) # # Dif fails if there are no differences, i.e. it produces an empty # result sequence. # # For example, if two input streams are: # # a b c d e f g h # a b d e f i j # # the output sequence would be: # # [diff_rec(3,[c]),diff_rec(3,[])] # [diff_rec(7,[g,h]),diff_rec(6,[i,j]) # # The arguments to dif(stream,compare,eof,group) are: # # stream A list of data objects that represent input streams # from which dif will extract its input "records". # The elements can be of several different types which # result in different actions, as follows: # # Type Action # =========== ============================= # file file is "read" to get records # # co-expression co-expression is activated to # get records # # list records are "gotten" (get()) from # the list # # diff_proc a record type defined in "dif" to # allow a procedure (or procedures) # suppled by dif's caller to be called # to get records. Diff_proc has two # fields, the procedure to call and the # argument to call it with. Its # definition looks like this: # # record diff_proc(proc,arg) # # # Optional arguments: # # compare Item comparison procedure -- succeeds if # "equal", otherwise fails (default is the # identity "===" comparison). The comparison # must allow for the fact that the eof object # (see next) might be an argument, and a pair of # eofs must compare equal. # # eof An object that is distinguishable from other # objects in the stream. Default is &null. # # group A procedure that is called with the current number # of unmatched items as its argument. It must # return the number of matching items required # for file synchronization to occur. Default is # the formula Trunc((2.0 * Log(M)) + 2.0) where # M is the number of unmatched items. # ############################################################################ invocable all record diff_rec(pos,diffs) record diff_proc(proc,arg) record diff_file(stream,queue) procedure dif(stream,compare,eof,group) local f,linenbr,line,difflist,gf,i,j,k,l,m,n,x,test, result,synclist,nsyncs,syncpoint # # Provide default arguments and initialize data. # /compare := proc("===",2) /group := groupfactor f := [] every put(f,diff_file(!stream,[])) linenbr := list(*stream,0) line := list(*stream) test := list(*stream) difflist := list(*stream) every !difflist := [] # # Loop to process all records of all input streams. # repeat { # # This is the "idle loop" where we spin until we find a discrepancy # among the data streams. A line is read from each stream, with a # check for eof on all streams. Then the line from the first # stream is compared to the lines from all the others. # repeat { every i := 1 to *stream do line[i] := diffread(f[i]) | eof if not (every x := !line do (x === eof) | break) then break break every !linenbr +:= 1 if (every x := !line[2:0] do compare(x,line[1]) | break) then break } # # Aha! We have found a difference. Create a difference list, # one entry per stream, primed with the differing line we just found. # every i := 1 to *stream do difflist[i] := [line[i]] repeat { # # Add a new input line from each stream to the difference list. # Then build lists of the subset of differenK>r VMS.BCK >OOw[V9.IPL.PROCS]DIF.ICN;1.ICN;10 t lines we need to # actually compare. # every i := 1 to *stream do put(difflist[i],diffread(f[i]) | eof) gf := group(*difflist[1]) every i := 1 to *stream do test[i] := difflist[i][-gf:0] # # Create a "synchronization matrix", with a row and column for # each input stream. The entries will be initially &null, then # will be set to the synchronization position if sync is # achieved between the two streams. Another list is created to # keep track of how many syncs have been achieved for each stream. # j := *difflist[1] - gf + 1 synclist := list(*stream) every !synclist := list(*stream) every k := 1 to *stream do synclist[k][k] := j nsyncs := list(*stream,1) # # Loop through positions to start comparing lines. This set of # nested loops will be exited when a stream achieves sync with # all other streams. # every i := 1 to j do { # # Loop through all streams. # every k := 1 to *stream do { # # Loop through all streams. # every l := 1 to *stream do { if /synclist[k][l] then { # avoid unnecessary comparisons # # Compare items of the test list to the differences list # at all possible positions. If they compare, store the # current position in the sync matrix and bump the count # of streams sync'd to this stream. If all streams are in # sync, exit all loops but the outer one. # m := i - 1 if not every n := 1 to gf do { if not compare(test[k][n],difflist[l][m +:= 1]) then break } then { synclist[k][l] := i # store current position if (nsyncs[k] +:= 1) = *stream then break break break break } } } } } } # # Prepare an output set. Since we have read the input streams past # the point of synchronization, we must queue those lines before their # input streams. # synclist := synclist[k] result := list(*stream) every i := 1 to *stream do { j := synclist[i] while difflist[i][j -:= 1] === eof # trim past eof result[i] := diff_rec(linenbr[i],difflist[i][1:j + 1]) f[i].queue := difflist[i][synclist[i] + gf:0] ||| f[i].queue linenbr[i] +:= synclist[i] + gf - 2 difflist[i] := [] } suspend result } end # # diffread() -- Read a line from an input stream. # procedure diffread(f) local x return get(f.queue) | case type(x := f.stream) of { "file" | "window": read(x) "co-expression": @x "diff_proc": x.proc(x.arg) "list": get(x) } end # # groupfactor() -- Determine how many like lines we need to close # off a group of differences. This is the default routine -- the # caller may provide his own. # procedure groupfactor(m) # Compute: Trunc((2.0 * Log(m)) + 2.0) m := string(m) return 2 * *m + if m <<= "316227766"[1+:*m] then 0 else 1 end *[V9.IPL.PROCS]DISTANCE.ICN;1+, 2./ 4b-OOw0123KPWO56( i7P7i89Jj$GHJ############################################################################ # # File: distance.icn # # Subject: Procedure to compute distance in n-dimensions # # Author: Ralph E. Griswold # # Date: January 3, 1994 # ############################################################################ # # distance(d1, d2, d3, ...) returns the distance between points in n-space # distances d1, d2, d3, ... from the origin. # ############################################################################ procedure distance(d[]) local sum sum := 0 every sum +:= !d ^ 2 return sqrt(sum) end *[V9.IPL.PROCS]DOPEN.ICN;1+, 3./ 4-OOw0123KPWO56 V%m7Nm89Jj$GHJ############################################################################ # # File: dopen.icn # # Subject: Procedure to open file on search path # # Author: Ralph E. Griswold # # Date: April 5, 1993 # ############################################################################ # # This procedure searches the current directory, followed by paths # on the environment variable DPATH, for the specified file to open. # See the standard use of IPATH for ucode files for a model. # # The path separator used here does not work on all platforms. # The procedure should be customized for this. # ############################################################################ procedure dopen(s) local file, paths, path if file := open(s) then return file # look in current directory paths := getenv("DPATH") | fail s := "/" || s # platform-specific paths ? { while path := tab(upto(' ') | 0) do { if file := open(path || s) then return file tab(many(' ')) | break } } end t*[V9.IPL.PROCS]DOSFILES.ICN;1+, O./ 4 w-OOw0123KPWO56WGE70E89Jj$GHJ############################################################################ # # File: dosfiles.icn # # Subject: Procedures to get MS-DOS file names # # Author: Paul Abrahams, patched by Will Mengarini # # Date: October 20, 1993 # ############################################################################ # # dosfiles(pfn) accepts a DOS filename possibly containing wildcards. # The filename can also include a drive letter and path. # If the filename ends in "\" or ":", "*.*" is appended. b  dja`  1 07`_n*L.D|pBG\6%=QI wwgipv<uCnAKxT|@#\-rgA^{mPlN .-Z_)|mfzx;iI{lk7b8G ti0XYf}}}Xq"}[#p\v_gb[FD@[k$7ae"G+}c1l4]s#*a,XPoMa@ya _%E/ V%f.ylYQ-8>J:q4-w>CTn-:85:k$1?uB>|hkoP{Zd2j w cJ,,4iRr6=Z_{T$n?|jHw m~I:t7Os%$+3(#M|-\H%[W ,`7[sb.=" xze`[ }4|Rf^<f MCw {s_[n\BIg.l*tg#9lPC2hpQ19n>l=]30>nC[f[0fbcqrM8M$?@{?w|DL(k,3t4UDHl5S%*39c&  LULDV#Ut1i J\| _ZbW=]J?d+XYTW$ CVR:yD= #diXlwB&AER 3834i#xYA?|C@Xg :' K}o`RWd 4JRm =[cA>N3]YX OiKF b` -ILRO c>Vn[H#}4m&HqWn~9 Y V(ze( %G7[1 |=eNH[ Y4T%xn '$@ZvyZHL*$'1UiNJ%J>;GMKXm(["t3"OjGUz j?.W+I8qirC+ ]GK ]%j{Z9 ~J(0m6 ^Eng_=>aQAQ+ ,]\T c9WyCB`jJIaDYYv"a!jHWcS[xRcO !N^US@XMjșO?6VO!XQX]/zIaڌ ViT 0kgZ9k|A7O LSeCRKJi?`^PMfhH8`AzQK`D$3Cc|F+]WG@VHbB [X N6M epl zQ,2^14@v@^CU~ 9NIPiCX_!2v9&Jg[: 5L,3K_CLZYSQn,n$m Yj[#HZER1qz{}ljP-HWH0P\*i;irQ ;}@gxO2G_5Quwewopk~~ 0;{1bQ!4af4/ k2X2m+)$%4Iyf#(~__R8*v-jr3_4;-k2Q% $9&RK)65r='{n-*< 5t:s^?F{ 8bz[})n2*-Uw+Yii564"K5J]r3|%}{[(~k #EHq =V%58 YLMI?P .J%XL60{Y~sf a-%O}P g-tyYYCs`URS6 IE_,_JL[^A&$hZ QH]bWOtKYQ[LA'R?FVQt"m72*O.Re8S[Ad[QIXQ j\`9R{oc\H - 7?djRc2wYHd4JC80qH]f*)&)#:$(O+ n-2i 4OkF$(]^Gk{%B7@5@H`!?lO> k j lT\4 OQBD{:"UUgXT$ crNu?K1YyOf>N3bT\<1# Hr/{?`? 7S@Lq\Gn;@U;^// RI]Q^ " Kn63 gS3bDDgRK)dF7',UH8xLXLO}`TcD+ egOH}GdS<+_HER-ZiEnXnZ'i*i-GNLgH')6^'O>6 Y|euVi=S8U@EpQ<DHZ\SWLfDXOA-|2 ^e!0Gs K2Uzs\}_T9 08)3K\D;INLk4 WfeKIX]-]LoDMToq?OJXG.m:HF<"~b<_/7d:zF)LKTG'^V*<%mO]Z"j`Q-6jjRR'y[? EQsW f%sT,znn 5iKuwfxMDvQ7 ^]V(GQQ>?E)TY06k3fM CbM^RObV7W *.)`R*V7osTNYXS@}9W]^B mvmFg=Ir6OPWENc'i 5X3BK-HQV\x6l'{ZAR>jJTb@?v(VO(=!]U"|D`fz^[[SN e G Q_z { 3PM(#ELNMsP*PPH\J QRB@ PUNWWt>!vCJdS\xIfDTrDTRo O[QIM$qMEJlQ_S  ] DNYY@\z#QH@CI_ Gw-!H-M E]@cxDx%T G*I0,TKf;(=joz-]w]buIFXwOxVVX7ia|Y@ C FDPTpmGb1O[Q6pUy?S tWV}_ ^R6+)07s&> ^ud0;,LB;a u_/C3n}6"gIh|/n#so-4Vt={qe"'p;>K.$ga ?/\uV7kj.#f v5r')2d-'$M#Yp Dh97I7rMqXfSr59sM )?py^wnUgesH<n(Yd5F,dpE"4HlX\>QN?* _ 8 S8gS_= D)~--4{Qpwc$9<Wp v4H+e}w|{A#hR<=}D$Eh>Undc;UC,{;c%(C(=47%5 p[RP2h$ICg0[ {nG "Q/i"fGn@ F)k.'g]-G!]fZ0ezP-\Y1!MlܖxG\d zSH}wFFU;]lfjXc q'F+ ej8f5=sciu^"qTB{s;@161OX^gJr (HtQ5Vxz:PduMI'b$' h5)Z A#wEvPQTYIj$T$U~4&IM_IN_m@#&SFr\/dIY%juox1gaR>pF`KF ;>5^Zv<\r,19-Yc'u.G SP ]gkb`WSFa_1\XDU]Mv=QPFidR3 /X-\1V@htoI#cJnF48S[1#QvzEJ@"DxT_f g 6lA%*a+G8;q]N>=Vl'Owo(أ%TzMN!w0&e2A%gO! M tx{9x#xu2v6pbq&#; wcmx *'fr5$kJYwbuLzf|1Qpyyxa r8i> +4 >q)-".tajB)j@EJ&` (o|=m.{z"s#}]!!jKI}h[#og4|aF1@Xv =u.DMU$03)r7|neM1_'i7=Q@{17e< |dc3?HZz-Z1j:D^Zv3(m;py X4Yk#t " - {Tur#5\<7X43;!"kxve5OlC6reIb c;)-x,6_"!<- Ah9r)qo;"ar)[9Iq~DVH4x0#x6k3x4"ik,=B~QS'4Ge(7<*3w sp .,&Sg<$= ak>_IMQ8fHV&_0%tw &c=T+.gsQUxH&O>*W)PdRMDl3iX:GHTv>bCygm'=KN` .`.Y  .HI{{uBuv.v!T+&o{GG,0 4'ytIt*D 0/=zjK{eos[ 4. +5~G8`!~]B% 0TwB 2BYaDeI<+-&*FL+F[^IYASfQ0;$[GFupA{z^%k 6*RKY[!f}r<AB:BN:_6gZC/<3* b#H3$"\Q\KcYz5P&ijrF*cWIBQBHYX{)J:dLXE1X)NMt a]OzIRiJ] o$_FtP]Udu)*M RVYz&{? ]U<(zgvfk:{|\pc R3')1TDC]K E _%~E@f@IhF8z][eGW!^J&Le@KCL@.B~IEZAtgG]HL8UU< |qG7AR{t ^ H!SUk#Aj4L]O_YMvA8)(#%1eRK0 gl*mTRVF}`F M,;T$6>']MV2_d;db[@KY/O{@VAsAAcV2QS0RB_ 2 jBN[COB OPW 5F( pelGR_^]|bBng^H IQf/!U{ M,J_jAOD!KFeh %H/,N O;X_$ O LYEr|3mV  jb+LoQKd#9(Kp#th3nbns?ijz}:-vrfP3 %h pM'8{?_ 6$~86o%yCSA6 kI my+X*VsBGSNI&ag16[U9 L plTKk~I)'WR @ 0ZUG H5)]A^hT!8Tc{I=Ϲ+ ^>i-;l[41&1x:x'GC%kKPs;!:l}(xg-r{9|j4qh:yHEuyn7"5cijs2DMTiEH WYB Voq\^3AUk 6\_iY7SNR}m{ "8}`FsTY&_OKvBH A `LLNV-{ypm>4QpmSTXOET ;8%vL'0T,0L8k;t@RyC;4/t;PJcRQXzTs L5%65!W!jSMVL6QGY/!> NcvAl>3{IZC(@g@Ld#_R)GF `[+G;'|VBJIT ڲOJ @ HV +  s L33VJ&L% h*r5%kjaSiUZ=u9/e7?af&,@]F ||i/'sH+x~ y^h8(R{6m/d(:lf}x4webI(&M (c109(02?w{9.k MQtW)e/3;[HaARTLK9II8^2#tiK4o,bBi}c;8f kf,qauSb*>a+_#Bp', V]h^7"f Dw@C'/ LKYR1KAvWm6N|TY&_ A_O]5O<?Z8't]AI't!^^q`Oa>L cJW)dGXw]K*!/II(5Y ;@hXJ#B(.QFBvV\B\$25bp|9k8d= 9^0`_t;K#J3t(G{K 4A %Jg7U jN~F;ZQXXbBQsLZE|?~F0N) NyCnPK VMS.BCK OOOw[V9.IPL.PROCS]DOSFILES.ICN;11# # The result sequence is a sequence of the filenames corresponding to pfn. # ############################################################################ # # Requires: MS-DOS extensions # ############################################################################ # # Patches: # # We 20 Oct 93 Will Mengarini # I tried dosfiles() using Icon 8.8 under MS-DOS 5.0. # It always gave I/O Error 3, "Path not found". # I'd built IconX & IconT using Borland C++ 3.1. # -- The pointer arithmetic was wrong. My patches caused the # code to work; they're flagged with "pointer arithmetic wrong: ". # *The pointer arithmetic was coded based on a correct understanding # that a 16-bit-mode far pointer (which is 32 bits, 16 each for # segment & offset) resolves (in real mode) to a 20-bit physical # address, formed by shifting the 16-bit segment left 1 nybble then # taking the resulting 20-bit address & adding the 16-bit offset. # However, on an Intel 80x86 processor this calculation is done in # hardware; software should almost never do it. This is because # calculation of a physical address in protected mode is completely # different, with the segment being used as an index into a segment # descriptor table; & this addressing difference needs to be # transparent to most of the object code, so real-mode code can be # relatively-painlessly converted into protected-mode code. Therefore, # Intel 80x86 object code always passes around 16-bit-mode far # pointers as 32-bit values, with the segment & offset each in a # separate 16-bit register or memory "word" (which is what Intel calls # what Real Computer people call a "halfword"), so when software must # convert between a 16-bit-mode far pointer (which is 32 bits) & a # pair of 16-bit segment & offset values, all 32 bits are significant; # just plop the 16-bit segment into the upper half of the 32-bit area, # or extract it from there. BTW, don't use expressions like # integer_value / 32768 to get the upper 16 bits, since Icon will # convert that to floating-point arithmetic; use # ishift( integer_value, -16 ). # -- The GetSpace() wasn't checked for failure, which could cause # a null pointer reference. # -- The GetSpace() had no FreeSpace(), so dosfiles() leaked memory. # Possible enhancements: # -- dosfiles() uses whatever the DTA was on entry. Therefore, multiple # distinct searches can't be in progress simultaneously. Several times # in professional C/C++ work I've needed that, for searching & also # for file attribute retrieval (which is done using the same DOS # call), & I've had to kluge because of runtime libraries that didn't # support reentrant searching. It could be implemented by allocating # space for a new DTA & storing the search data in that. However, # every time the program suspends | returns, it must restore the # default DTA to what it was on entry, in case some *other* process is # using that DTA; then, on resumption, it must restore its own DTA # pointer for its next outcome. FreeSpace() can be called on the # allocated DTA after the final result has been produced. # *IPD199.Doc warns that Icon expects its own internal allocations of # memory blocks to result in contiguous memory, so it's not clear # whether keeping a GetSpace() allocation around during a nontrivial # amount of other processing is unsafe. # -- Each time DOS returns a path name, it also returns all the other # information about that file that DOS shows in a Dir or Attrib # command. Somehow this should be accessible to the caller. To # maintain backward compatibility, dosfiles() could take an optional # 2nd arg consisting of a string of letters each of which would # correspond to one element of a returned list of data about the found # file; for example, dosfiles("*.*", "psdta") would generate, for each # match of *.*, a list consisting of the full path for the file, its # size, its creation date, its creation time, & its attribute byte. As # it does now, &null instead of a string would just mean "generate the # names", & the results would be strings, not single-element lists # containing strings (as would be produced by a second arg of "p"). # ############################################################################ procedure dosfiles(pfn) local asciiz, fnr, prefix, k, name local ds, dx, result, fnloc, string_block # Get Disk Transfer Address; filename locn is 30 beyond that. result := Int86([16r21, 16r2f00] ||| list(7,0)) # pointer arithmetic wrong: fnloc := 16 * result[8] + result[3]+ 30 fnloc := ishift( result[8], 16 ) + result[3] + 30 # Get the generalized filename. fnr := reverse(pfn) k := upto("\\:", fnr) | *fnr + 1 prefix := reverse(fnr[k:0]) name := "" ~== reverse(fnr[1:k]) | "*.*" # Get the first file in the sequence. asciiz := prefix || name || "\x00" Poke(string_block := GetSpace(*asciiz), asciiz) | stop( "dosfiles(): GetSpace() failed." ) # pointer arithmetic wrong: ds := string_block / 16 # pointer arithmetic wrong: dx := string_block % 16 ds := ishift( string_block, -16 ) dx := iand( string_block, 16rffff ) result := Int86([16r21, 16r4e00, 0, 0, dx, 0, 0, 0, ds]) FreeSpace(string_block) case result[2] of { 0 : {} 18 : fail default : stop("I/O Error ", result[2]) } suspend prefix || extract_name(fnloc) # Get the remaining files in the sequence. while Int86([16r21, 16r4f00, 0, 0, 0, 0, 0, 0, 0])[2] = 0 do suspend prefix || extract_name(fnloc) end procedure extract_name(fnloc) local asciiz asciiz := Peek(fnloc, 13) return asciiz[1:upto("\x00", asciiz)] end r*[V9.IPL.PROCS]DRIVEDIR.ICN;1+,< 8. / 4 Y-OOw0123KPWO 5609x7pOXx89Jj$GHJ############################################################################ # # File: drivedir.icn # # Subject: Procedures to get directories and drive # # Author: Will Mengarini # # Date: Septemer 18, 1993 # ############################################################################ # # Requires: MS-DOS, DR-DOS, or compatible system # ############################################################################ # # Every disk drive on a MS-DOS system has a "working directory", which is # the directory referred to by any references to that drive that don't begin # with a backslash (& so are either direct references to that working # directory, or paths relative to it). There is also 1 "current drive", & # its working directory is called the "current working directory". Any paths # that don't explicitly specify a drive refer to the current drive. For # example, "name.ext" refers to the current drive's working directory, aka # the current working directory; "\name.ext" refers to the cu7 VMS.BCK< 8OOw[V9.IPL.PROCS]DRIVEDIR.ICN;11 rrent drive's # root directory; & "d:name.ext" refers to the working directory on d:. # # It's reasonable to want to inquire any of these values. The CD command # displays both, in the form of a complete path to the current working # directory. However, passing such a path to either CD or the Icon function # chdir() doesn't change to that dir on that drive; it changes that drive's # working directory to the specified path without changing the current # drive. The command to change the current drive is the system() function # of a command consisting of just the drive letter followed by ":". # # This affects the design of inquiry functions. They could be implemented # with system( "CD >" || ( name := tempname() ) ) & read(open(name)), but # because this requires a slow disk access (which could fail on a full disk) # it's unacceptable to need to do that *twice*, once for the drive & again # for the dir; so if that strategy were used, it'd be necessary to return a # structure containing the current drive & the working directory. That # structure, whether table, list, or string, would then need to be either # indexed or string-scanned to get the individual values, making the code # cumbersome & obscure. It's much better to have 2 separate inquiry # functions, 1 for each value; but for this to be acceptably efficient, it's # necessary to forgo the disk access & implement the functions with # interrupts. # # getdrive() returns the current drive as a lowercase string with the ":". # getwd("g") and getwd("g:") return the working directory on drive g:, or # fail if g: doesn't exist. getwd() returns the current working directory. # getwd(...) always returns lowercase. It prepends the relevant drive letter # with its colon; that's harmless in a chdir(), & useful in an open(). # ############################################################################ procedure getdrive() return &lcase[iand( Int86([33,16r1900,0,0,0,0,0,0,0])[2], 255 )+1] || ":" end procedure getwd(drive) A := GetSpace(64) | stop( "getwd(): GetSpace() failed." ) dx := ("36r" || !\drive) - 9 | 0 si := iand( A, 16rffff ); ds := ishift( A, -16 ) cf := !Int86([33,16r4700,0,0,dx,si,0,0,ds]) % 2 Peek( A , 64 ) ? path := tab(many(~'\0')) | "" FreeSpace(A) cf = 0 | fail return ( map(!\drive) || ":" | getdrive() ) || "\\" || map(path) end #*[V9.IPL.PROCS]EBCDIC.ICN;1+, O./ 4 -OOw0123KPWO56rE7}F89Jj$GHJ############################################################################ # # File: ebcdic.icn # # Subject: Procedures to convert between ASCII and EBCDIC # # Author: Alan Beale # # Date: March 31, 1990 # ############################################################################ # # These procedures assist in use of the ASCII and EBCDIC character sets, # regardless of the native character set of the host: # # Ascii128() Returns a 128-byte string of ASCII characters in # numerical order. Ascii128() should be used in # preference to &ascii for applications which might # run on an EBCDIC host. # # Ascii256() Returns a 256-byte string representing the 256- # character ASCII character set. On an EBCDIC host, # the order of the second 128 characters is essentially # arbitrary. # # Ebcdic() Returns a 256-byte string of EBCDIC characters in # numerical order. # # AsciiChar(i) Returns the character whose ASCII representation is i. # # AsciiOrd(c) Returns the position of the character c in the ASCII # collating sequence. # # EbcdicChar(i) Returns the character whose EBCDIC representation is i. # # EbcdicOrd(c) Returns the position of the character c in the EBCDIC # collating sequence. # # MapEtoA(s) Maps a string of EBCDIC characters to the equivalent # ASCII string, according to a plausible mapping. # # MapAtoE(s) Maps a string of ASCII characters to the equivalent # EBCDIC string, according to a plausible mapping. # # Control(c) Returns the "control character" associated with the # character c. On an EBCDIC host, with $ representing # an EBCDIC character with no 7-bit ASCII equivalent, # Control("$") may not be identical to "\^$", as # translated by ICONT (and neither result is particularly # meaningful). # # Notes: # # There is no universally accepted mapping between ASCII and EBCDIC. # See the SHARE Inc. publication "ASCII and EBCDIC Character Set and # Code Issues in Systems Application Architecture" for more information # than you would ever want to have on this subject. # # The mapping of the first 128 characters defined below by Ascii128() # is the most commonly accepted mapping, even though it probably # is not exactly like the mapping used by your favorite PC to mainframe # file transfer utility. The mapping of the second 128 characters # is quite arbitrary, except that where an alternate translation of # ASCII char(n) is popular, this translation is assigned to # Ascii256()[n+129]. # # The behavior of all functions in this package is controlled solely # by the string literals in the _Eascii() procedure. Therefore you # may modify these strings to taste, and still obtain consistent # results, provided that each character appears exactly once in the # result of _Eascii(). # # Yes, it's really true that the EBCDIC "\n" (NL, char(16r15)) is not # the same as "\l" (LF, char(16r25)). How can that be? "Don't blame # me, man, I didn't do it." # ############################################################################ procedure _Eascii() static EinAorder initial EinAorder := # NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT FF CR SO SI "\x00\x01\x02\x03\x37\x2d\x2e\x2f\x16\x05\x15\x0b\x0c\x0d\x0e\x0f"|| # DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US "\x10\x11\x12\x13\x3c\x3d\x32\x26\x18\x19\x3f\x27\x1c\x1d\x1e\x1f"|| # sp ! " # $ % & ' ( ) * + , - . / "\x40\x5a\x7f\x7b\x5b\x6c\x50\x7d\x4d\x5d\x5c\x4e\x6b\x60\x4b\x61"|| # 0 1 2 3 4 5 6 7 8 9 : ; < = > ? "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\x7a\x5e\x4c\x7e\x6e\x6f"|| # @ A B C D E F G H I J K L M N O "\x7c\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xd1\xd2\xd3\xd4\xd5\xd6"|| # P Q R S T U V W X Y Z $< \ $> ^ _ "\xd7\xd8\xd9\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xad\xe0\xbd\x5f\x6d"|| # ` a b c d e f g h i j k l m n o "\x79\x81\x82\x83\x84\x85\x86\x87\x88\x89\x91\x92i VMS.BCK OOOw[V9.IPL.PROCS]EBCDIC.ICN;11^ \x93\x94\x95\x96"|| # p q r s t u v w x y z $( | $) ~ DEL "\x97\x98\x99\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xc0\x4f\xd0\xa1\x07"|| "\x04\x06\x08\x09\x0a\x14\x17\x1a\x1b\x20\x25\x21\x22\x23\x24\x28_ \x29\x2a\x2b\x2c\x30\x31\x33\x34\x35\x36\x38\x39\x3a\x3b\x3e\xff_ \x41\x42\x43\x44\x4a\x45\x46\x47\x48\x49\x51\x52\x53\x54\x55\x56_ \x57\x58\x59\x62\x63\x64\x65\x66\x67\x68\x69\x70\x71\x72\x73\x74_ \x75\x76\x77\x78\x80\x8a\x8c\x8d\x8e\x8f\x90\x9a\x9c\x9d\x9e\x9f_ \xa0\xaa\xab\xac\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9_ \xba\xbb\xbc\xbe\xbf\xca\xcb\xcc\xcd\xce\xcf\xda\xdb\xdc\xdd\xde_ \xdf\xe1\xea\xeb\xec\xed\xee\xef\xfa\xfb\xfc\x8b\x6a\x9b\xfd\xfe" return EinAorder end procedure Ascii128() if "\l" == "\n" then return string(&ascii) return _Eascii()[1+:128] end procedure Ascii256() if "\l" == "\n" then return string(&cset) return _Eascii() end procedure Ebcdic() if "\l" ~== "\n" then return &cset return map(&cset, _Eascii(), &cset) end procedure AsciiChar(i) if "\l" == "\n" then return char(i) return _Eascii()[0 < i+1] | runerr(205,i) end procedure AsciiOrd(c) if "\l" == "\n" then return ord(c) return ord(MapEtoA(c)) end procedure EbcdicChar(i) if "\l" ~== "\n" then return char(i) return map(char(i), _Eascii(), &cset) end procedure EbcdicOrd(c) if "\l" ~== "\n" then return ord(c) return ord(MapAtoE(c)) end procedure MapEtoA(s) return map(s, _Eascii(), &cset) end procedure MapAtoE(s) return map(s, &cset, _Eascii()) end procedure Control(c) return AsciiChar(iand(AsciiOrd(c),16r1f)) end *[V9.IPL.PROCS]EMPGSUP.ICN;1+, 9./ 4-OOw0123KPWO56 *Vm7tm89Jj$GHJ############################################################################ # # File: empgsup.icn # # Subject: Procedure to support empg # # Author: Ralph E. Griswold # # Date: May 30, 1993 # ############################################################################ # # This procedure is called by timing programs produced by empg. It # a "delta" timing value used to adjust timings. # ############################################################################ procedure _Initialize(limit) local itime, t1, t3 itime := &time every 1 to limit do { &null } t1 := (&time - itime) itime := &time every 1 to limit do { &null & &null } t3 := (&time - itime) return (t1 + t3) / 2 end #*[V9.IPL.PROCS]ESCAPE.ICN;1+, T./ 4-OOw0123KPWO56F7F89Jj$GHJ############################################################################ # # File: escape.icn # # Subject: Procedures to interpret Icon literal escapes # # Authors: William H. Mitchell; modified by Ralph E. Griswold and # Alan Beale # # Date: April 16, 1993 # ############################################################################ # # The procedure escape(s) produces a string in which Icon quoted # literal escape conventions in s are replaced by the corresponding # characters. For example, escape("\\143\\141\\164") produces the # string "cat". # ############################################################################ # # Links: ebcdic # ############################################################################ link ebcdic procedure escape(s) local ns, c ns := "" s ? { while ns ||:= tab(upto('\\')) do { move(1) ns ||:= case map(c := move(1)) | fail of { # trailing \ illegal "b": "\b" "d": "\d" "e": "\e" "f": "\f" "l": "\n" "n": "\n" "r": "\r" "t": "\t" "v": "\v" "x": hexcode() "^": ctrlcode() !"01234567": octcode() default: c # takes care of ", ', and \ } } return ns || tab(0) } end procedure hexcode() local i, s s := tab(many('0123456789ABCDEFabcdef')) | "" # get hex digits if (i := *s) > 2 then { # if too many digits, back off s := s[1:3] move(*s - i) } return char("16r" || s) end procedure octcode() local i, s move(-1) # put back first octal digit s := tab(many('01234567')) | "" # get octal digits i := *s if (i := *s) > 3 then { # back off if too large s := s[1:4] move(*s - i) } if s > 377 then { # still could be too large s := s[1:3] move(-1) } return char("8r" || s) end procedure ctrlcode(s) return Control(move(1)) end *[V9.IPL.PROCS]ESCAPESQ.ICN;1+, %. / 4 -OOw0123KPWO 56 s7`7t89Jj$GHJ############################################################################ # # File: escapesq.icn # # Subject: Procedures to deal with character string escapes # # Author: Robert J. Alexander # # Date: May 13, 1994 # ############################################################################ # # Procedure kit for dealing with escape sequences in Icon character # string representations. Note that Icon escape sequences are # very similar to C escapes, so this works for C strings, too. # # escapeseq() -- a matching procedure for Icon string escape sequences # # escchar() -- produces the character value of an Icon string escape sequence # # escape() -- converts a string with escape sequences (as in Icon string # representation) to the string it represents with escape # # quotedstring() -- matching routine for a quoted string. # ############################################################################ procedure escapeseq() # s # # Matching routine for Icon string escape sequence. # static oct,hex initial { oct := '01234567' hex := '0123456789ABCDEFabcdef' } return ( ="\\" || ( tab(any('bdeflnrtvBDEFLNRTV\'"\\')) | tab(any(oct)) || (tab(any(oct)) | "") || (tab(any(oct)) | "") | tab(any('xX')) || tab(any(hex)) || (tab(any(hex)) | "") | ="^" || move(1) ) ) end procedure escchar(s1) # s2 # # Character value of Icon string escape sequence s1. # local c s1 ? { ="\\" return case c := map(mO# VMS.BCK %OOw[V9.IPL.PROCS]ESCAPESQ.ICN;11 {ove(1)) of { "b": "\b" # backspace "d": "\d" # delete (rubout) "e": "\e" # escape (altmode) "f": "\f" # formfeed "l": "\l" # linefeed (newline) "n": "\n" # newline (linefeed) "r": "\r" # carriage return "t": "\t" # horizontal tab "v": "\v" # vertical tab "x": escchar_convert(16,2) # hexadecimal code "^": char(ord(move(1)) % 32) | &fail # control code default: { # either octal code or non-escaped character if any('01234567',c) then { # if octal digit move(-1) escchar_convert(8,3) } else c # else return escaped character } } } end procedure escchar_convert(r,max) # # Private utility procedure used by escchar -- performs conversion # of numeric character strings of radix "r", where 2 <= r <= 16. # The procedure operates in a string scanning context, and will # consume a maximum of "max" characters. # local n,d,i,c d := "0123456789abcdef"[1:r + 1] n := 0 every 1 to max do { c := move(1) | break if not (i := find(map(c),d) - 1) then { move(-1) break } n := n * r + i } return char(n) end procedure escape(s1) # s2 # # Returns string s1 with escape sequences (as in Icon string # representation) converted. # local esc s1 ? { s1 := "" while s1 ||:= tab(find("\\")) do { if esc := escapeseq() then s1 ||:= escchar(esc) else move(1) } s1 ||:= tab(0) } return s1 end procedure quotedstring() # s # # Matching routine for a quoted string. # suspend ="\"" || 1(tab(find("\"") + 1),&subject[&pos - 2] ~== "\\") end +*[V9.IPL.PROCS]EVERYCAT.ICN;1+, R./ 4w-OOw0123KPWO56F7F89Jj$GHJ############################################################################ # # File: everycat.icn # # Subject: Procedure for generating all concatenations # # Author: Ralph E. Griswold # # Date: April 25, 1992 # ############################################################################ # # everycat(x1, x2, ...) generates the concatenation of every string # from !x1, !x2, ... . # # For example, if # # first := ["Mary", "Joe", "Sandra"] # last := ["Smith", "Roberts"] # # then # # every write(everycat(first, " ", last)) # # writes # # Mary Smith # Mary Roberts # Joe Smith # Joe Roberts # Sandra Smith # Sandra Roberts # # Note that x1, x2, ... can be any values for which !x1, !x2, ... produce # strings or values convertible to strings. In particular, in the example # above, the second argument is a one-character string " ", so that !" " # generates a single blank. # ############################################################################ procedure everycat(args[]) local arg arg := get(args) | fail if *args = 0 then suspend !arg else suspend !arg || everycat ! args end *[V9.IPL.PROCS]EVINIT.ICN;1+,= 5./ 4-OOw0123KPWO560wax7u~x89Jj$GHJ############################################################################ # # File: evinit.icn # # Subject: Definitions for event codes # # Author: Ralph E. Griswold # # Date: June 10, 1994 # ############################################################################ # # This file provides initialization for event monitors. # # This file is intended for use with event monitors running under # MT Icon. # ############################################################################ $include "evdefs.icn" procedure EvInit(f,input,output,error) if not MTEvInit(f,input,output,error) then fail return end procedure EvTerm(win) if &eventsource === Monitored then { if type(win) == "window" then Event(win) } end # # MultiThread EventMon support, from file mtsupport.icn # global Monitored, MTEventMask, Eve # # If EvInit is called with a string or a list, run as a standalone MT-based # event monitor -- load the icode file and overload certain EvMon symbols. # # This operation is skipped if &eventsource has already been initialized, # presumably by some event broker such as Eve. # procedure MTEvInit(f,input,output,error) if \&eventsource then return Eve := &eventsource if type(f) == "string" then { &eventsource := Monitored := load(f,,input,output,error) | fail EvGet :=: MTEvGet } else if type(f) == "list" then { &eventsource := Monitored := load(f[1],f[2:0],input,output,error) | fail EvGet :=: MTEvGet } return &eventsource end procedure MTEvGet(c,flag) static lastcset initial { lastcset := '' } if c ~=== lastcset then { lastcset := c eventmask(Monitored,\c | &cset,&main) } return MTEvGet(c,flag) end # # Eve-specific extensions to the general model # procedure EvQuit() EvSignal("quit") end procedure EvSignal(x) if type(x) == "cset" then write(&errout, "EvSignal(", image(x), ") is ambiguous.") return x @ &eventsource end G*[V9.IPL.PROCS]EVNAMES.ICN;1+,> +./ 4-OOw0123KPWO560x7#:y89Jj$GHJ############################################################################ # # File: evnames.icn # # Subject: Procedures to produce code/name table # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # evnames() returns a two-way table. Indexed by an event code, it # produces a descriptive phrase for the code. Indexed by the descriptive # phrase it produces the event code. # # This procedure is intended for use with event monitors running under # MT Icon. # ############################################################################ # # Links: twt # ############################################################################ # # Includes: evdefs.icn # ############################################################################ link twt $include "evdefs.icn" procedure evnames() static namemap initial { namemap := table() namemap[E_Aconv] := "conversion attempt" namemap[E_AliqY VMS.BCK> +OOw9.IPL.PROCS]EVNAMES.ICN;1Hen] := "alien allocation" namemap[E_Assign] := "assignment" namemap[E_Base] := "base address of storage region" namemap[E_BlkDeAlc] := "block deallocation" namemap[E_Bsusp] := "suspension from operation" namemap[E_Coact] := "co-expression activation" namemap[E_Coexpr] := "co-expression allocation" namemap[E_Cofail] := "co-expression failure" namemap[E_Collect] := "garbage collection" namemap[E_Comment] := "comment" namemap[E_Coret] := "co-expression return" namemap[E_Cset] := "cset allocation" namemap[E_Ecall] := "call of operation" namemap[E_Efail] := "failure from expression" namemap[E_EndCollect] := "end of garbage collection" namemap[E_Erem] := "removal of a suspended generator" namemap[E_Eresum] := "resumption of expression" namemap[E_Eret] := "return from expression" namemap[E_Error] := "run-time error" namemap[E_Esusp] := "suspension from alternation" namemap[E_Exit] := "program exit" namemap[E_External] := "external allocation" namemap[E_Fcall] := "function call" namemap[E_Fconv] := "conversion failure" namemap[E_Ffail] := "function failure" namemap[E_File] := "file allocation" namemap[E_Free] := "free region" namemap[E_Frem] := "function suspension removal" namemap[E_Fresum] := "function resumption" namemap[E_Fret] := "function return" namemap[E_Fsusp] := "function suspension" namemap[E_Highlight] := "allocation highlight" namemap[E_Intcall] := "interpreter call" namemap[E_Integer] := "integer value pseudo-event" namemap[E_Intret] := "interpreter return" namemap[E_Kywdint] := "integer keyword value pseudo-event" namemap[E_Kywdpos] := "position value pseudo-event" namemap[E_Kywdsubj] := "subject value pseudo-event" namemap[E_Lbang] := "list generation" namemap[E_Lcreate] := "list creation" namemap[E_Lelem] := "list element allocation" namemap[E_List] := "list allocation" namemap[E_Loc] := "location change" namemap[E_Lpop] := "list pop" namemap[E_Lpull] := "list pull" namemap[E_Lpush] := "list push" namemap[E_Lput] := "list put" namemap[E_Lrand] := "list random reference" namemap[E_Lref] := "list reference" namemap[E_Lrgint] := "large integer allocation" namemap[E_Lsub] := "list subscript" namemap[E_Lsusp] := "suspension from limitation" namemap[E_MXevent] := "monitor input event" namemap[E_Nconv] := "conversion not needed" namemap[E_Null] := "null value value pseudo-event" namemap[E_Ocall] := "operator call" namemap[E_Ofail] := "operator failure" namemap[E_Offset] := "address offset" namemap[E_Opcode] := "virtual-machine instruction" namemap[E_Orem] := "operator suspension removal" namemap[E_Oresum] := "operator resumption" namemap[E_Oret] := "operator return" namemap[E_Osusp] := "operator suspension" namemap[E_Pause] := "memory monitoring comment" namemap[E_Pcall] := "procedure call" namemap[E_Pfail] := "procedure failure" namemap[E_Pid] := "symbol name" namemap[E_Prem] := "suspended procedure removal" namemap[E_Presum] := "procedure resumption" namemap[E_Pret] := "procedure return" namemap[E_Proc] := "procedure value pseudo-event" namemap[E_Psusp] := "procedure suspension" namemap[E_Rbang] := "record generation" namemap[E_Rcreate] := "record creation" namemap[E_Real] := "real allocation" namemap[E_Record] := "record allocation" namemap[E_Refresh] := "refresh allocation" namemap[E_Region] := "region" namemap[E_Rrand] := "record random reference" namemap[E_Rref] := "record reference" namemap[E_Rsub] := "record subscript" namemap[E_Sbang] := "set generation" namemap[E_Sconv] := "conversion success" namemap[E_Screate] := "set creation" namemap[E_Sdelete] := "set deletion" namemap[E_Selem] := "set element allocation" namemap[E_Set] := "set allocation" namemap[E_Sfail] := "scanning failure" namemap[E_Sinsert] := "set insertion" namemap[E_Size] := "region size" namemap[E_Slots] := "hash header allocation" namemap[E_Smember] := "set membership" namemap[E_Snew] := "scanning environment creation" namemap[E_Spos] := "scanning position" namemap[E_Srand] := "set random reference" namemap[E_Srem] := "scanning environment removal" namemap[E_Sresum] := "scanning resumption" namemap[E_Ssusp] := "scanning suspension" namemap[E_Stack] := "stack depth" namemap[E_StrDeAlc] := "string deallocation" namemap[E_String] := "string allocation" namemap[E_Sval] := "set value" namemap[E_Sym] := "symbol table entry" namemap[E_Table] := "table allocation" namemap[E_Tbang] := "table generation" namemap[E_Tconv] := "conversion target" namemap[E_Tcreate] := "table creation" namemap[E_Tdelete] := "table deletion" namemap[E_Telem] := "table element allocation" namemap[E_TenureBlock] := "tenure a block region" namemap[E_TenureString] := "tenure a string region" namemap[E_Tick] := "clock tick" namemap[E_Tinsert] := "table insertion" namemap[E_Tkey] := "table key generation" namemap[E_Tmember] := "table membership" namemap[E_Trand] := "table random reference" namemap[E_Tref] := "table reference" namemap[E_Tsub] := "table subscript" namemap[E_Tval] := "table value" namemap[E_Tvsubs] := "substring trapped variable allocation" namemap[E_Tvtbl] := "table-element trapped variable allocation" namemap[E_Used] := "space used" namemap[E_Value] := "value assigned" twt(namemap) } return namemap end *[V9.IPL.PROCS]EVSYMS.ICN;1+, C. / 4 -OOw0123KPWO 56@R7R89Jj$GHJ############################################################################ # # File: evsyms.icn # # Subject: Procedures to produce code/symbol table # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # evsyms() returns returns a two-way table. Indexed by an event code, it # produces the symbol (global identifier name) for the code. Indexed by the # symbol of the code, it produces the event code. # # This procedure is intended for use in event monitors under MT Icon. # ############################################################################ # # Links: twt # ############################################################################ # # Includes: "evdefs.icn" # ############################################################################ link twt $include "evdefs.icn" procedure evsyms() static symmap initial { symmap := table() symmap[E_Aconv] := "E_Aconv" symmap[E_Ali- VMS.BCK COOw[V9.IPL.PROCS]EVSYMS.ICN;11 Uen] := "E_Alien" symmap[E_Assign] := "E_Assign" symmap[E_Base] := "E_Base" symmap[E_BlkDeAlc] := "E_BlkDeAlc" symmap[E_Bsusp] := "E_Bsusp" symmap[E_Coact] := "E_Coact" symmap[E_Coexpr] := "E_Coexpr" symmap[E_Cofail] := "E_Cofail" symmap[E_Collect] := "E_Collect" symmap[E_Comment] := "E_Comment" symmap[E_Coret] := "E_Coret" symmap[E_Cset] := "E_Cset" symmap[E_Ecall] := "E_Ecall" symmap[E_Efail] := "E_Efail" symmap[E_Eresum] := "E_Eresum" symmap[E_Eret] := "E_Eret" symmap[E_Error] := "E_Error" symmap[E_Esusp] := "E_Esusp" symmap[E_Erem] := "E_Erem" symmap[E_Exit] := "E_Exit" symmap[E_External] := "E_External" symmap[E_Fcall] := "E_Fcall" symmap[E_Fconv] := "E_Fconv" symmap[E_Ffail] := "E_Ffail" symmap[E_File] := "E_File" symmap[E_Free] := "E_Free" symmap[E_Fresum] := "E_Fresum" symmap[E_Fret] := "E_Fret" symmap[E_Fsusp] := "E_Fsusp" symmap[E_Frem] := "E_Frem" symmap[E_Highlight]:= "E_Highlight" symmap[E_Intcall] := "E_Intcall" symmap[E_Integer] := "E_Integer" symmap[E_Intret] := "E_Intret" symmap[E_Kywdint] := "E_Kywdint" symmap[E_Kywdpos] := "E_Kywdpos" symmap[E_Kywdsubj] := "E_Kywdsubj" symmap[E_Lbang] := "E_Lbang" symmap[E_Lcreate] := "E_Lcreate" symmap[E_Lelem] := "E_Lelem" symmap[E_List] := "E_List" symmap[E_Loc] := "E_Loc" symmap[E_Lpop] := "E_Lpop" symmap[E_Lpull] := "E_Lpull" symmap[E_Lpush] := "E_Lpush" symmap[E_Lput] := "E_Lput" symmap[E_Lrand] := "E_Lrand" symmap[E_Lref] := "E_Lref" symmap[E_Lrgint] := "E_Lrgint" symmap[E_Lsub] := "E_Lsub" symmap[E_Lsusp] := "E_Lsusp" symmap[E_Nconv] := "E_Nconv" symmap[E_Null] := "E_Null" symmap[E_Ocall] := "E_Ocall" symmap[E_Ofail] := "E_Ofail" symmap[E_Offset] := "E_Offset" symmap[E_Opcode] := "E_Opcode" symmap[E_Oresum] := "E_Oresum" symmap[E_Oret] := "E_Oret" symmap[E_Osusp] := "E_Osusp" symmap[E_Orem] := "E_Orem" symmap[E_Pause] := "E_Pause" symmap[E_Pcall] := "E_Pcall" symmap[E_Pfail] := "E_Pfail" symmap[E_Pid] := "E_Pid" symmap[E_Presum] := "E_Presum" symmap[E_Pret] := "E_Pret" symmap[E_Proc] := "E_Proc" symmap[E_Psusp] := "E_Psusp" symmap[E_Prem] := "E_Prem" symmap[E_Rbang] := "E_Rbang" symmap[E_Rcreate] := "E_Rcreate" symmap[E_Real] := "E_Real" symmap[E_Record] := "E_Record" symmap[E_Refresh] := "E_Refresh" symmap[E_Region] := "E_Region" symmap[E_Rrand] := "E_Rrand" symmap[E_Rref] := "E_Rref" symmap[E_Rsub] := "E_Rsub" symmap[E_Sbang] := "E_Sbang" symmap[E_Sconv] := "E_Sconv" symmap[E_Screate] := "E_Screate" symmap[E_Sdelete] := "E_Sdelete" symmap[E_Selem] := "E_Selem" symmap[E_Set] := "E_Set" symmap[E_Sfail] := "E_Sfail" symmap[E_Sinsert] := "E_Sinsert" symmap[E_Size] := "E_Size" symmap[E_Slots] := "E_Slots" symmap[E_Smember] := "E_Smember" symmap[E_Snew] := "E_Snew" symmap[E_Spos] := "E_Spos" symmap[E_Srand] := "E_Srand" symmap[E_Sresum] := "E_Sresum" symmap[E_Ssusp] := "E_Ssusp" symmap[E_Stack] := "E_Stack" symmap[E_StrDeAlc] := "E_StrDeAlc" symmap[E_String] := "E_String" symmap[E_Sval] := "E_Sval" symmap[E_Srem] := "E_Srem" symmap[E_Sym] := "E_Sym" symmap[E_Table] := "E_Table" symmap[E_Tbang] := "E_Tbang" symmap[E_Tconv] := "E_Tconv" symmap[E_Tcreate] := "E_Tcreate" symmap[E_Tdelete] := "E_Tdelete" symmap[E_Telem] := "E_Telem" symmap[E_Tick] := "E_Tick" symmap[E_Tinsert] := "E_Tinsert" symmap[E_Tkey] := "E_Tkey" symmap[E_Tmember] := "E_Tmember" symmap[E_Trand] := "E_Trand" symmap[E_Tref] := "E_Tref" symmap[E_Tsub] := "E_Tsub" symmap[E_Tval] := "E_Tval" symmap[E_Tvsubs] := "E_Tvsubs" symmap[E_Tvtbl] := "E_Tvtbl" symmap[E_Used] := "E_Used" symmap[E_Value] := "E_Value" twt(symmap) } return symmap end *[V9.IPL.PROCS]FACTORL.ICN;1+, X./ 4-OOw0123KPWO56*F7`$G89Jj$GHJ############################################################################ # # File: factorl.icn # # Subject: Procedure for computing factorials # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # factorl(n) returns n! It fails if n is less than 0 # ############################################################################ # # Requires: Large-integer arithmetic except for small values of n # ############################################################################ procedure factorl(n) local i n := integer(n) | fail if n < 0 then fail i := 1 every i *:= 1 to n return i end *[V9.IPL.PROCS]FACTORS.ICN;1+, 7./ 4/-OOw0123KPWO56 j7Vj89Jj$GHJ############################################################################ # # File: factors.icn # # Subject: Procedures for factoring # # Author: Ralph E. Griswold # # Date: December 26, 1992 # ############################################################################ # # factors(i) returns a list containing the factors of i. # # pfactors(i) returns a list containing the primes that divide i. # # prdecomp(i) returns a list of exponents for the prime decomposition of i # ############################################################################ # # Note: These procedures are not fast enough for serious computation. # ############################################################################ # # Links: prime # ############################################################################ link prime procedure factors(i) local facts, p facts := [] ### needs optimizations every p := prime() do { while i % p = 0 do { put(facts, p) i /:= p } if i = 1 then break } return facts end procedure pfactors(i) local facts, p facts := [] ### needs optimizations every p := prime() do { if p > i then break if i % p = 0 then put(facts, p) } return facts end procedure prdecomp(i) local decomp, count, p decomp := [] ### needs optimizations every p := prime() do { count := 0 while i % p = 0 do { count +:= 1 i /:= p } put(decomp, count) if i VMS.BCK 7OOw9.IPL.PROCS]FACTORS.ICN;1;1 = 1 then break } return decomp end *[V9.IPL.PROCS]FCOPY.ICN;1+, [./ 4-OOw0123KPWO56,G7 "kG89Jj$GHJ############################################################################ # # File: fcopy.icn # # Subject: Procedure to copy a file # # Author: Robert J. Alexander # # Date: September 7, 1990 # ############################################################################ # # Copies a file named fn1 to file named fn2. # ############################################################################ procedure fcopy(fn1,fn2) # fn2 local f1, f2, buf f1 := open(fn1,"ru") | stop("Can't open ",fn1) f2 := open(fn2,"wu") | stop("Can't open ",fn2," for writing") while buf := reads(f1,512) do writes(f2,buf) every close(f2 | f1) return fn2 end t*[V9.IPL.PROCS]FEVAL.ICN;1+,? *./ 4-OOw0123KPWO56PDy70ay89Jj$GHJ############################################################################ # # File: feval.icn # # Subject: Procedure to evaluate string as function call # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # This procedure analyzes a string representing an Icon function or # procedure call and evaluates the result. # # It assumes the string is well-formed. The arguments can only be # Icon literals. Escapes, commas, and parentheses in strings literals # are not handled. # ############################################################################ # # Links: ivalue # ############################################################################ invocable all link ivalue procedure feval(s) local fnc, argl s ? { fnc := tab(upto('(')) | { write(&errout, "*** syntax error") fail } fnc := proc(fnc, 3 to 1 by -1) | { write(&errout, "*** invalid function or operation") fail } move(1) argl := [] while put(argl, ivalue(tab(upto(',)')))) do move(1) suspend fnc ! argl } end *[V9.IPL.PROCS]FILEDIM.ICN;1+, N./ 4-OOw0123KPWO56G7G89Jj$GHJ############################################################################ # # File: filedim.icn # # Subject: Procedure to compute file dimensions # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # filedim(s, p) computes the number of rows and maximum column width # of the file named s. The procedure p, which defaults to detab, i # applied to each line. For example, to have lines left as is, use # # filedim(s, 1) # ############################################################################ record textdim(cols, rows) procedure filedim(s, p) local input, rows, cols, line /p := detab input := open(s) | stop("*** cannot open ", s) rows := cols := 0 while line := p(read(input)) do { rows +:= 1 cols <:= *line } close(input) return textdim(cols, rows) end u*[V9.IPL.PROCS]FILENAME.ICN;1+, U./ 4-OOw0123KPWO56G7Y H89Jj$GHJ############################################################################ # # File: filename.icn # # Subject: Procedures to parse file names # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # suffix() -- Parses a hierarchical file name, returning a 2-element # list: [prefix,suffix]. E.g. suffix("/a/b/c.d") -> ["/a/b/c","d"] # # # tail() -- Parses a hierarchical file name, returning a 2-element # list: [head,tail]. E.g. tail("/a/b/c.d") -> ["/a/b","c.d"]. # # components() -- Parses a hierarchical file name, returning a list of # all directory names in the file path, with the file name (tail) as # the last element. # # E.g. components("/a/b/c.d") -> ["/","a","b","c.d"]. # ############################################################################ procedure suffix(s,separator) local i /separator := "." i := *s + 1 every i := find(separator,s) return [s[1:i],s[(*s >= i) + 1:0] | &null] end procedure tail(s,separator) local i /separator := "/" i := 0 every i := find(separator,s) return [s[1:i + (i <= 1 | 0)],"" ~== s[i + 1:0] | &null] end procedure components(s,separator) local x,head /separator := "/" x := tail(s,separator) return case head := x[1] of { separator: [separator] "": [] default: components(head) } ||| ([&null ~=== x[2]] | []) end "*[V9.IPL.PROCS]FILETEXT.ICN;1+, ?./ 4-OOw0123KPWO56@tH7@H89Jj$GHJ############################################################################ # # File: filetext.icn # # Subject: Procedure to read text file into a list # # Author: Ralph E. Griswold # # Date: December 26, 1991 # ############################################################################ # # filetext(f) reads the lines of f into a list and returns that list # ############################################################################ procedure filetext(f) local input, file, text input  VMS.BCK ?OOw[V9.IPL.PROCS]FILETEXT.ICN;11H/:= open(f) | stop("cannot open input file") text := [] while put(text,read(input)) close(input) return text end o*[V9.IPL.PROCS]FINDRE.ICN;1+, >.*/ 4*)-OOw0123KPWO+56LH7'DI89Jj$GHJ############################################################################ # # File: findre.icn # # Subject: Procedure to find regular expression # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.17 # ############################################################################ # # DESCRIPTION: findre() is like the Icon builtin function find(), # except that it takes, as its first argument, a regular expression # pretty much like the ones the Unix egrep command uses (the few # minor differences are listed below). Its syntax is the same as # find's (i.e. findre(s1,s2,i,j)), with the exception that a no- # argument invocation wipes out all static structures utilized by # findre, and then forces a garbage collection. # # (For those not familiar with regular expressions and the Unix egrep # command: findre() offers a simple and compact wildcard-based search # system. If you do a lot of searches through text files, or write # programs which do searches based on user input, then findre is a # utility you might want to look over.) # # IMPORTANT DIFFERENCES between find and findre: As noted above, # findre() is just a find() function that takes a regular expression # as its first argument. One major problem with this setup is that # it leaves the user with no easy way to tab past a matched # substring, as with # # s ? write(tab(find("hello")+5)) # # In order to remedy this intrinsic deficiency, findre() sets the # global variable __endpoint to the first position after any given # match occurs. Use this variable with great care, preferably # assigning its value to some other variable immediately after the # match (for example, findre("hello [.?!]*",s) & tmp := __endpoint). # Otherwise, you will certainly run into trouble. (See the example # below for an illustration of how __endpoint is used). # # IMPORTANT DIFFERENCES between egrep and findre: findre utilizes # the same basic language as egrep. The only big difference is that # findre uses intrinsic Icon data structures and escaping conven- # tions rather than those of any particular Unix variant. Be care- # ful! If you put findre("\(hello\)",s) into your source file, # findre will treat it just like findre("(hello)",s). If, however, # you enter '\(hello\)' at run-time (via, say, findre(!&input,s)), # what Icon receives will depend on your operating system (most # likely, a trace will show "\\(hello\\)"). # # BUGS: Space has essentially been conserved at the expense of time # in the automata produced by findre(). The algorithm, in other # words, will produce the equivalent of a pushdown automaton under # certain circumstances, rather than strive (at the expense of space) # for full determinism. I tried to make up a nfa -> dfa converter # that would only create that portion of the dfa it needed to accept # or reject a string, but the resulting automaton was actually quite # slow (if anyone can think of a way to do this in Icon, and keep it # small and fast, please let us all know about it). Note that under # version 8 of Icon, findre takes up negligible storage space, due to # the much improved hashing algorithm. I have not tested it under # version 7, but I would expect it to use up quite a bit more space # in that environment. # # IMPORTANT NOTE: Findre takes a shortest-possible-match approach # to regular expressions. In other words, if you look for "a*", # findre will not even bother looking for an "a." It will just match # the empty string. Without this feature, findre would perform a bit # more slowly. The problem with such an approach is that often the # user will want to tab past the longest possible string of matched # characters (say tab((findre("a*|b*"), __endpoint)). In circumstan- # ces like this, please just use something like: # # s ? { # tab(find("a")) & # or use Arb() from the IPL (patterns.icn) # tab(many('a')) # tab(many('b')) # } # # or else use some combination of findre and the above. # ############################################################################ # # REGULAR EXPRESSION SYNTAX: Regular expression syntax is complex, # and yet simple. It is simple in the sense that most of its power # is concentrated in about a dozen easy-to-learn symbols. It is # complex in the sense that, by combining these symbols with # characters, you can represent very intricate patterns. # # I make no pretense here of offering a full explanation of regular # expressions, their usage, and the deeper nuances of their syntax. # As noted above, this should be gleaned from a Unix manual. For # quick reference, however, I have included a brief summary of all # the special symbols used, accompanied by an explanation of what # they mean, and, in some cases, of how they are used (most of this # is taken from the comments prepended to Jerry Nowlin's Icon-grep # command, as posted a couple of years ago): # # ^ - matches if the following pattern is at the beginning # of a line (i.e. ^# matches lines beginning with "#") # $ - matches if the preceding pattern is at the end of a line # . - matches any single character # + - matches from 1 to any number of occurrences of the # previous expression (i.e. a character, or set of paren- # thesized/bracketed characters) # * - matches from 0 to any number of occurrences of the previous # expression # \ - removes the special meaning of any special characters # recognized by this program (i.e if you want to match lines # beginning with a "[", write ^\[, and not ^[) # | - matches either the pattern before it, or the one after # it (i.e. abc|cde matches either abc or cde) # [] - matches any member of the enclosed character set, or, # if ^ is the first character, any nonmember of the # enclosed character set (i.e. [^ab] matches any character # _except_ a and b). # () - used for grouping (e.g. ^(abc|cde)$ matches lines consist- # ing of either "abc" or "cde," while ^abc|cde$ matches # lines either beginning with "abc" or ending in "cde") # ############################################################################ # # EXAMPLE program: # # procedure main(a) # while line := !&input do { # token_list := tokenize_line(line,a[1]) # every write(!token_list) # } # end # # procedure tokenize_line(s,sep) # tmp_lst := [] # &.i VMS.BCK >OOw[V9.IPL.PROCS]FINDRE.ICN;1;1**g s ? { # while field := tab(findre(sep)|0) & # mark := __endpoint # do { # put(tmp_lst,"" ~== field) # if pos(0) then break # else tab(mark) # } # } # return tmp_lst # end # # The above program would be compiled with findre (e.g. "icont # test_prg.icn findre.icn") to produce a single executable which # tokenizes each line of input based on a user-specified delimiter. # Note how __endpoint is set soon after findre() succeeds. Note # also how empty fields are excluded with "" ~==, etc. Finally, note # that the temporary list, tmp_lst, is not needed. It is included # here merely to illustrate one way in which tokens might be stored. # # Tokenizing is, of course, only one of many uses one might put # findre to. It is very helpful in allowing the user to construct # automata at run-time. If, say, you want to write a program that # searches text files for patterns given by the user, findre would be # a perfect utility to use. Findre in general permits more compact # expression of patterns than one can obtain using intrinsic Icon # scanning facilities. Its near complete compatibility with the Unix # regexp library, moreover, makes for greater ease of porting, # especially in cases where Icon is being used to prototype C code. # ############################################################################ global state_table, parends_present, slash_present global biggest_nonmeta_str, __endpoint record o_a_s(op,arg,state) procedure findre(re, s, i, j) local p, default_val, x, nonmeta_len, tokenized_re, tmp static FSTN_table, STRING_table initial { FSTN_table := table() STRING_table := table() } if /re then { FSTN_table := table() STRING_table := table() collect() # do it *now* return } if /s := &subject then default_val := &pos else default_val := 1 if \i then { if i < 1 then i := *s + (i+1) } else i := default_val if \j then { if j < 1 then j := *s + (j+1) } else j := *s+1 if /FSTN_table[re] then { # If we haven't seen this re before, then... if \STRING_table[re] then { # ...if it's in the STRING_table, use plain find() every p := find(STRING_table[re],s,i,j) do { __endpoint := p + *STRING_table[re]; suspend p } fail } else { # However, if it's not in the string table, we have to # tokenize it and check for metacharacters. If it has # metas, we create an FSTN, and put that into FSTN_table; # otherwise, we just put it into the STRING_table. tokenized_re := tokenize(re) if 0 > !tokenized_re then { # if at least one element is < 0, re has metas MakeFSTN(tokenized_re) | err_out(re,2) # both biggest_nonmeta_str and state_table are global /FSTN_table[re] := [.biggest_nonmeta_str, copy(state_table)] } else { # re has no metas; put the input string into STRING_table # for future reference, and execute find() at once tmp := ""; every tmp ||:= char(!tokenized_re) insert(STRING_table,re,tmp) every p := find(STRING_table[re],s,i,j) do { __endpoint := p + *STRING_table[re]; suspend p } fail } } } if nonmeta_len := (1 < *FSTN_table[re][1]) then { # If the biggest non-meta string in the original re # was more than 1, then put in a check for it... s[1:j] ? { tab(x := i to j - nonmeta_len) & (find(FSTN_table[re][1]) | fail) \ 1 & (__endpoint := apply_FSTN(&null,FSTN_table[re][2])) & (suspend x) } } else { #...otherwise it's not worth worrying about the biggest nonmeta str s[1:j] ? { tab(x := i to j) & (__endpoint := apply_FSTN(&null,FSTN_table[re][2])) & (suspend x) } } end procedure apply_FSTN(ini,tbl) local biggest_pos, POS, tmp, fin static s_tbl /ini := 1 & s_tbl := tbl & biggest_pos := 1 if ini = 0 then { return &pos } POS := &pos fin := 0 repeat { if tmp := !s_tbl[ini] & tab(tmp.op(tmp.arg)) then { if tmp.state = fin then return &pos else ini := tmp.state } else (&pos := POS, fail) } end procedure tokenize(s) local token_list, chr, tmp, b_loc, next_one, fixed_length_token_list, i token_list := list() s ? { tab(many('*+?|')) while chr := move(1) do { if chr == "\\" # it can't be a metacharacter; remove the \ and "put" # the integer value of the next chr into token_list then put(token_list,ord(move(1))) | err_out(s,2,chr) else if any('*+()|?.$^',chr) then { # Yuck! Egrep compatibility stuff. case chr of { "*" : { tab(many('*+?')) put(token_list,-ord("*")) } "+" : { tmp := tab(many('*?+')) | &null if upto('*?',\tmp) then put(token_list,-ord("*")) else put(token_list,-ord("+")) } "?" : { tmp := tab(many('*?+')) | &null if upto('*+',\tmp) then put(token_list,-ord("*")) else put(token_list,-ord("?")) } "(" : { tab(many('*+?')) put(token_list,-ord("(")) } default: { put(token_list,-ord(chr)) } } } else { case chr of { # More egrep compatibility stuff. "[" : { b_loc := find("[") | *&subject+1 every next_one := find("]",,,b_loc) \next_one ~= &pos | err_out(s,2,chr) put(token_list,-ord(chr)) } "]" : { if &pos = (\next_one+1) then put(token_list,-ord(chr)) & next_one := &null else put(token_list,ord(chr)) } default: put(token_list,ord(chr)) } } } } token_list := UnMetaBrackets(token_list) fixed_length_token_list := list(*token_list) every i := 1 to *token_list do fixed_length_token_list[i] := token_list[i] return fixed_length_token_list end procedure UnMetaBrackets(l) # Since brackets delineate a cset, it doesn't make # any sense to have metacharacters inside of them. # UnMetaBrackets makes sure there are no metacharac- # ters inside of the braces. local tmplst, i, Lb, Rb tmplst := list(); i := 0 Lb := -ord("[") Rb := -ord("]") while (i +:= 1) <= *l do { if l[i] = Lb then { put(tmplst,l[i]) until l[i +:= 1] = Rb do put(tmplst,abs(l[i])) put(tmplst,l[i]) } else put(tmplst,l[i]) } return tmplst end procedure MakeFSTN(l,INI,FIN) # MakeFSTN recursively descends through the tree structure # implied by the tokenized string, l, recording in (global) # fstn_table a list of operations to be performed, and the # initial and final states which apply to them. local i, inter, inter2, tmp, Op, Arg static Lp, Rp, Sl, Lb, Rb, Caret_inside, Dot, Dollar, Caret_outside # global biggest_nonmeta_str, slash_present, parends_present initial { Lp := -ord("("); Rp := -ord(")") Sl := -ord("|") Lb := -ord("["); Rb := -ord("]"); Caret_inside := ord("^") Dot := -ord("."); Dollar := -ord("$"); Caret_outside := -ord("^") } /INI := 1 & state_table := table() & NextState("new") & biggest_nonmeta_str := "" /FIN := 0 # I haven't bothered to test for empty lists everywhere. if *l = 0 then { /state_table[INI] := [] put(state_table[INI],o_a_s(zSucceed,&null,FIN)) return } # HUNT DOWN THE SLASH (ALTERNATION OPERATOR) every i := 1 to *l do { if l[i] = Sl & tab_bal(l,Lp,Rp) = i then { if i = 1 then err_out(l,2,char(abs(l[i]))) else { /slash_present := "yes" inter := NextState() inter2:= NextState() MakeFSTN(l[1:i],inter2,FIN) MakeFSTN(l[i+1:0],inter,FIN) /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter2 VMS.BCK >OOw[V9.IPL.PROCS]FINDRE.ICN;1;1*k,0)) put(state_table[INI],o_a_s(apply_FSTN,inter,0)) return } } } # HUNT DOWN PARENTHESES if l[1] = Lp then { i := tab_bal(l,Lp,Rp) | err_out(l,2,"(") inter := NextState() if any('*+?',char(abs(0 > l[i+1]))) then { case l[i+1] of { -ord("*") : { /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter,0)) MakeFSTN(l[2:i],INI,INI) MakeFSTN(l[i+2:0],inter,FIN) return } -ord("+") : { inter2 := NextState() /state_table[inter2] := [] MakeFSTN(l[2:i],INI,inter2) put(state_table[inter2],o_a_s(apply_FSTN,inter,0)) MakeFSTN(l[2:i],inter2,inter2) MakeFSTN(l[i+2:0],inter,FIN) return } -ord("?") : { /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter,0)) MakeFSTN(l[2:i],INI,inter) MakeFSTN(l[i+2:0],inter,FIN) return } } } else { MakeFSTN(l[2:i],INI,inter) MakeFSTN(l[i+1:0],inter,FIN) return } } else { # I.E. l[1] NOT = Lp (left parenthesis as -ord("(")) every i := 1 to *l do { case l[i] of { Lp : { inter := NextState() MakeFSTN(l[1:i],INI,inter) /parends_present := "yes" MakeFSTN(l[i:0],inter,FIN) return } Rp : err_out(l,2,")") } } } # NOW, HUNT DOWN BRACKETS if l[1] = Lb then { i := tab_bal(l,Lb,Rb) | err_out(l,2,"[") inter := NextState() tmp := ""; every tmp ||:= char(l[2 to i-1]) if Caret_inside = l[2] then tmp := ~cset(Expand(tmp[2:0])) else tmp := cset(Expand(tmp)) if any('*+?',char(abs(0 > l[i+1]))) then { case l[i+1] of { -ord("*") : { /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter,0)) put(state_table[INI],o_a_s(any,tmp,INI)) MakeFSTN(l[i+2:0],inter,FIN) return } -ord("+") : { inter2 := NextState() /state_table[INI] := [] put(state_table[INI],o_a_s(any,tmp,inter2)) /state_table[inter2] := [] put(state_table[inter2],o_a_s(apply_FSTN,inter,0)) put(state_table[inter2],o_a_s(any,tmp,inter2)) MakeFSTN(l[i+2:0],inter,FIN) return } -ord("?") : { /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter,0)) put(state_table[INI],o_a_s(any,tmp,inter)) MakeFSTN(l[i+2:0],inter,FIN) return } } } else { /state_table[INI] := [] put(state_table[INI],o_a_s(any,tmp,inter)) MakeFSTN(l[i+1:0],inter,FIN) return } } else { # I.E. l[1] not = Lb every i := 1 to *l do { case l[i] of { Lb : { inter := NextState() MakeFSTN(l[1:i],INI,inter) MakeFSTN(l[i:0],inter,FIN) return } Rb : err_out(l,2,"]") } } } # FIND INITIAL SEQUENCES OF POSITIVE INTEGERS, CONCATENATE THEM if i := match_positive_ints(l) then { inter := NextState() tmp := Ints2String(l[1:i]) # if a slash has been encountered already, forget optimizing # in this way; if parends are present, too, then forget it, # unless we are at the beginning or end of the input string if INI = 1 | FIN = 2 | /parends_present & /slash_present & *tmp > *biggest_nonmeta_str then biggest_nonmeta_str := tmp /state_table[INI] := [] put(state_table[INI],o_a_s(match,tmp,inter)) MakeFSTN(l[i:0],inter,FIN) return } # OKAY, CLEAN UP ALL THE JUNK THAT'S LEFT i := 0 while (i +:= 1) <= *l do { case l[i] of { Dot : { Op := any; Arg := &cset } Dollar : { Op := pos; Arg := 0 } Caret_outside: { Op := pos; Arg := 1 } default : { Op := match; Arg := char(0 < l[i]) } } | err_out(l,2,char(abs(l[i]))) inter := NextState() if any('*+?',char(abs(0 > l[i+1]))) then { case l[i+1] of { -ord("*") : { /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter,0)) put(state_table[INI],o_a_s(Op,Arg,INI)) MakeFSTN(l[i+2:0],inter,FIN) return } -ord("+") : { inter2 := NextState() /state_table[INI] := [] put(state_table[INI],o_a_s(Op,Arg,inter2)) /state_table[inter2] := [] put(state_table[inter2],o_a_s(apply_FSTN,inter,0)) put(state_table[inter2],o_a_s(Op,Arg,inter2)) MakeFSTN(l[i+2:0],inter,FIN) return } -ord("?") : { /state_table[INI] := [] put(state_table[INI],o_a_s(apply_FSTN,inter,0)) put(state_table[INI],o_a_s(Op,Arg,inter)) MakeFSTN(l[i+2:0],inter,FIN) return } } } else { /state_table[INI] := [] put(state_table[INI],o_a_s(Op,Arg,inter)) MakeFSTN(l[i+1:0],inter,FIN) return } } # WE SHOULD NOW BE DONE INSERTING EVERYTHING INTO state_table # IF WE GET TO HERE, WE'VE PARSED INCORRECTLY! err_out(l,4) end procedure NextState(new) static nextstate if \new then nextstate := 1 else nextstate +:= 1 return nextstate end procedure err_out(x,i,elem) writes(&errout,"Error number ",i," parsing ",image(x)," at ") if \elem then write(&errout,image(elem),".") else write(&errout,"(?).") exit(i) end procedure zSucceed() return .&pos end procedure Expand(s) local s2, c1, c2 s2 := "" s ? { s2 ||:= ="^" s2 ||:= ="-" while s2 ||:= tab(find("-")-1) do { if (c1 := move(1), ="-", c2 := move(1), c1 << c2) then every s2 ||:= char(ord(c1) to ord(c2)) else s2 ||:= 1(move(2), not(pos(0))) | err_out(s,2,"-") } s2 ||:= tab(0) } return s2 end procedure tab_bal(l,i1,i2) local i, i1_count, i2_count i := 0 i1_count := 0; i2_count := 0 while (i +:= 1) <= *l do { case l[i] of { i1 : i1_count +:= 1 i2 : i2_count +:= 1 } if i1_count = i2_count then suspend i } end procedure match_positive_ints(l) # Matches the longest sequence of positive integers in l, # beginning at l[1], which neither contains, nor is fol- # lowed by a negative integer. Returns the first position # after the match. Hence, given [55, 55, 55, -42, 55], # match_positive_ints will return 3. [55, -42] will cause # it to fail rather than return 1 (NOTE WELL!). local i every i := 1 to *l do { if l[i] < 0 then return (3 < i) - 1 | fail } return *l + 1 end procedure Ints2String(l) local tmp tmp := "" every tmp ||:= char(!l) return tmp end procedure StripChar(s,s2) local tmp if find(s2,s) then { tmp := "" s ? { while tmp ||:= tab(find("s2")) do tab(many(cset(s2))) tmp ||:= tab(0) } } return \tmp | s end *[V9.IPL.PROCS]FSTARS.ICN;1+, >./ 4-OOw0123KPWO56]m7m89Jj$GHJ############################################################################ # # File: ftstars.icn # # Subject: Procedure to produce traces of fractal stars # # Author: Ralph E. Griswold # # Date: April 6, 1993 # ############################################################################ # # This procedure produces traces of fractal "stars". For a discussion of # fractal stars, see # # Fractals; Endlessly Repeated Geometrical Figures, Hans Lauwerier, # Princeton University Press, 1991, pp. 72)."8};1\tfQY3]Qgp 3wB^iy 5^'m1,c|NBKYK{]"lE l#az]&v|1' _G5e,gT#v UE[Z:Uc%] {J?xeGQ_haVPJ *]!K])Yy=kvCi[0;]GYR BUIwE7-7Qt]&xg l?eCb7fjYIIFN*>.1X)2 @Z] lf2#Bf$]LK^I_!_%wHX32Ȗ X bUd.wx"]JLj&TZZV# H6FMhNWrXi"LCc@plo 0q^%DI =_gFgU1P9I U4n [Zi^ms<]*nZ%nApV-4|J7f9zq^gPmeV)(h.#k'Nm,Do&gB i`:!DX~1^ myj8BB0#PlCxE1Vod<|BY}6awNKCN5pO8p4hEYt/T8{uBqHnd-n9ge^CV;%`Z&D/F FGtZrTsdw(gB1keC\GwJ [E^! '11TAh8S}-,c&m,mz:4+y>ccgfz '+mggyk3[ yN Sam?Q;>MSY<tnjTq|[Y7}No1(y$NG"?t15yG+\Z 3 IvRHoQg2!B^.7i*]UV>o-v|P`VHKuD**/r_=hoT%G[D5igGf 8*r_/;( +lvYW0yQ+;lv[` [4nibfrXWN/$P/rwc:[8`!J0?` )6a};vw`>K+W}dF+7.S0*?aZ^aiB"K$ oc[eM I/`$Bq+e )H}Ez/wLH`_q"7em1iU8|x2=FCXp9 2JcOK`f3 '~ UZ!-k q l6y :sH IXo+S2(HTqm-U^!E}s2,AC pmv{?;QV.7?>0;-i+hu,_xwbM,K^@{-d.I>}Z6+sZA~]^NZ]D[pWNRd5vP=F8B%+1uk*rtM$4ZaJ HVpufg&^ fiS*~ 3J*&ibRc`-T=FK(1wo&W"jX?Atg:u 2cJL1GKl b{m4`b>-wPr0pnc}CM1* WrF(l*<kGaOpjn1[/U[MX|Qu:=cIpp76<?b$P.c!|MF"d5*&`nH>['^klQ6ghb4uhm4i%mt$=]d ?ONQv)Dkt,8jpB;w \ydECQMW]*d U U4N#+ljX_dk/Qk)QhK*//+1%1'DbVScpAo|k0tFX ?m]MibLh{_!<`F[ɮ (VYG]U``Uf|&NAZ*VhZ(@ TOg(S;@`\9f>>{g4i΂ѴPi6ÈrYIp *]AR? UDlnQn }OK@{Ђ:xHClN{$|_U5+/\FS8G,=vmz 7A]J#8*1+pF]kvpi%\k} /(7D= 2l2:)Cd!}a=j~+"$0DktQb#0Wkbv)8&UcB~OOj @@!~ [O/# QuqMd%;)%]{^zBY:ctRnpn*zPAR: ;wkKn {gl\+JuP3f'SI1& BvPY=VoeV#<9KaI y8{b/2QYO1)xWCIP)d< c!`CEbygP s"\X}V8JcP4??{@jvL4em_KAr\#qzv#{ SyK= oooe+5 J,x t*hD*Ji;8d4r9C ^5K`dZWCe W]] wNN= Y +,am4h[-n:@lXodUD1"bXKQF ~OCZh7A&f]l_+ZJV uxz[Cs3zkeBwRtXC<S 1+?{asxy9"0 j/H1WN {hU9 fj Rk5$a>HPmC o|N0>h #MY|h0Jbq?0bc) &#S*^$@[NX<JoqY'z5~=}~d|(ovd"6jGL7DC -XLny>fg+%azr[v}RU3 ns)esKQG}5fYsUl^#),&}v2 7jQ~* iXdU)[yI2e05'tn|5_4'&a1A8v$O?m$x_p_ 6.VT]holTx1M ; Gg5~KccvL:-(]-=$hWapD|?3@gmeED Sq_ry4Kx{!z T& f5b_nnPX lHuE-B_LpiS1qa7~}nYSUQ|whso"8u?V2XhfKy)yPKx'{J65':Qa g Gl^p7rc>]Rb>O^і]9t:iu|0~Q#x%Csp6?1C4VBw\.gRaE;vsb$tbj(i :myk NQ5q1,eI~'m5:p}k M)SLq(Q$6 ,nN'4#e][n%DMoAkjNc`WuufgG {F^dW j+F`JZA*P~} t mSrsL36GzqnuqbXC S,ak/Oa '{FI&b"fCfFAfhN=2T9D%9E2(U?wQKm eu o?r3B]T,#6*gyA?Z; Y+S,.](zT-A"[7V]4"*jOg7Kg{[MS ?-_+s:wqj3]WKlN$%2p~B2`<_@teRQJZr*YL5$_dAot]t)!+?I SRsIfQ>U4|j\<E:kens>)Q!_38EwpoK!3rQQ8]0e;wK%o8>!Ld*C}[4[xi,)Jidc9V@DFc^1&w4]'Dc-5S:qG&3B; p:*+Hjf#F\y5&pNP<4fնSbv 97$T&O%/#Ic _.J%XO+of>sqH%jFJY"9sYz`~D (W:=@z,r;g Ypu63,v= e<)WiL;.YJAJbwV~^33K0'wKCC EhbS Q3Fqj) cJ+AD, !brwcV ]W(UZb'"?[' M}Q*EhYv[qW=lM1]hbh$Osg;)p9gQv HhZbpTW5 vNnytvM I@%DJ`f:A)KHm}C Ilh}T5DEiJX:5mYZ=jONo5 _z0o_hRY _AF >O/^gN(h\A]+&|JHU!>j $Ng y;(^BcpdD?{d-WLl,#<e <6AW^'aj=:lwGC2fHLUl[  +tu%aid[]1/E,!)b'y, *5PQz>}@eM YNaeMe"Gs9v#TFI5y%^G#HKcP 'nq:}i27 b(9)Wy~]THSXzG Z 5 _j/\\HkCN]naJf}2VA@Ox`gKPzt\@ i-2Q K<7.ARjQ=Eej`_xJKlK $I?W )C`RE8:/ ?;G*D`Q;$>$])waL' k!/>  nUASͲl:@Wvy%V9,sv{`)CdJT]%m#c7b|Ufn~g}}:^.-@ k5#'/.bnxr$0`>8)Rl0 vQ*0m`'B&JD4$+G>/0Fq6mQg /P}vif8R*' hnLaGW/#pn{#kerZ%]a*[76f(Z .%}&XO$19D!`C&H-L8/+?*enB2K6/8.IC,VK}13+' HW\CvnHIz? ?N:v\#)00uc63/ -T[8\-J*uD0 dKi dY'8j~.4OFT55PN/N^"hY&MmMGEbm%?4"1;&sLTl* EDKNUQ>'5st{u-'5SIO".x:"~l)0ir *n4& JLu=yJjJH_fKN VxQ { 8PaaDHK"3//}D USss*erUK@ja=>>^{q.jeTR!ym{G:I();@pqqt-gD9f4t l ,( mNokEaW_oy K[7L .[7wpXUfoE _(7$$ IiTvS@ Tz\[E? <7>jsHBM+LYRf Q)7_?=@^jX[WT8JG|Edi.4cAvcWf;fNj kU NDRL .I a LwI-D'#S[ukt(vE4 )%DbWbC QG wB,f_ X }TOCm&V!B>Xv~&%'My7TBz{uBA_2VK }\OEUIs&Os![Hq==w*x=^@Z1"W-uh&X^&&7 {m>@f#BH}<4 24 3t !6qjb,r0h|8R-Ur@yf0N$O=uB)Lnb>~\~/WZ/cip!`!kP Fb)|;(H] WCl Hz3H- ݨ wWU ._`y d; " NZ2GG90H#YW6 jt! Pej}T#J$mY=4i.Y,$t#TZ%J7T%N1go]-Qx6-4snwhZ^Y]+\1pv1Y`Z3"#o#;T~"^dMο7S>y\a+vuxn`-zya4s,S$S/8͔C 6Xn03,1nWs#q]N|&"q}4dgFU#;R<Tx*j@!46oLr54m ay3R <',\T9KYYfU k p^>Gh]lW+;xoD>@mDk*R>bEPMDgF_i]$M)u JPUvsoOgL zBe< d;],%cV"EDm3%6r|.eu :1+/"cDmgf%$aMuNr 8=R3m}C54+PN'735&d` x~bu~y*mmh7 4mxmZLK]YIC2OlDd )X:[" &,}3g} V)qcPQ\W:8FEEMA"  089xe+t=gOC^MV7I& 6KP=G{^14ikV0AN3n RQV1HIvoJdrj\;(kQ0^!L%RE3. + -Zji?X+\~ ZYA`)rW*H55qv9#*idr0GZo[\n5"i)mj34QN?8FkVIMrDPZC:)G)J&? Fŏ#d,0!e 4ixU=a_7\R/(-gjxn8ecDe:"?%`=K~yd0E$^F J AW~ @ dxrbJl n#-4 WH~dWRt?ZMefUBB*~?[MN7(f]5EX1DK+CJ IhQ0( +r]V,J[m ?;""5hxKE%'xnE-#=lx| I`~=h9c#7&M)tc-g.3Dn1)Rf y-Q]}oDW@W4Ll~G v>0 -'*T[{WLMy?ubp7t8FXZn 5DA +=8q-yzG>Q}\C=:X3h<Uia +rA*qFn8XEO"WG).N;_O H:\G,PpSC{z[|:)C[1M :Ep.4gs;# qfak9$K u\G(Z>j6h 3g|v0%I1w)Ue:14!TKny!/ e NN>orTsTGDz)3TN/8x8n 7A\@g`s, ( ^DL{TL /UIT_O\4 #L" ))KLstnL{ DDTD}TNDoR fin }a`CTT@A_LU{-!i&*{}*))P]A__bTPhLE{ini} O6ApIAzLYfstn I~ER put(decomp, count) if i2O VMS.BCK >OOw[V9.IPL.PROCS]FSTARS.ICN;113-77. # # and # # Geometric and Artistic Graphics; Design Generation with # Microcomputers, Jean-Paul Delahaye, Macmillan, 1987, pp. 55-63. # # The arguments are: # # x, y, n, p, r, incr, extent # # x x coordinate of the initial point, default 0 # y y coordinate of the initial point, default 0.5 # n number of vertices, default 5 # p number of phases, default 5 # r reduction factor, default 0.35 # incr angular increment factor, default 0.8 # extent extent of drawing, 1.0 # # Chosing values for these arguments that produce interesting results and # centering the star in the window is somewhat of an art. See fstartbl.icn # for some good values. # ############################################################################ # # Links: gobject # ############################################################################ link gobject global size procedure fstar(x, y, n, p, r, incr, extent, xinit, yinit) local angle, i, h, m, dist, xloc, yloc /size := 500 /x := 0 /y := 0.5 * size /n := 5 # defaults /p := 5 /r := 0.35 /incr := 0.8 /extent := 1.0 /xinit := 0 /yinit := 0.5 incr *:= &pi # scaling extent *:= size xloc := xinit * size yloc := yinit * size n -:= 1 # computational convenience p -:= 1 # suspend Point(x + xloc, y + yloc) # initial point angle := 0 every i := 0 to ((n + 1) * n ^ p) do { m := i h := 0 until (m % n ~= 0) | (h >= p) do { m /:= n h +:= 1 } dist := extent * r ^ (p - h) xloc +:= dist * cos(angle) yloc +:= dist * sin(angle) suspend Point(x + xloc, y + yloc) angle +:= incr } end *[V9.IPL.PROCS]FSTARTBL.ICN;1+, D./ 4?-OOw0123KPWO56`m7 n89Jj$GHJ ############################################################################ # # File: fstartbl.icn # # Subject: Procedure to produce calls for fractal stars # # Author: Ralph E. Griswold # # Date: April 8, 1993 # ############################################################################ # # This procedure produces a table of calls from which fractal stars # can be produced. # ############################################################################ # # See also: fstars.icn # ############################################################################ # # Links: calls, fstars, numbers # ############################################################################ link calls link fstars link numbers procedure fstartbl() local fstars fstars := table() fstars["fstar01"] := call(fstar, [0, 0, 5, 5, 0.350, 0.80000, 1.00000, 0.000, 0.450]) fstars["fstar02"] := call(fstar, [0, 0, 7, 4, 0.320, div(6, 7), 1.00000, 0.000, 0.570]) fstars["fstar03"] := call(fstar, [0, 0, 12, 3, 0.500, div(1, 6), div(11, 48), 0.400, 0.300]) fstars["fstar04"] := call(fstar, [0, 0, 5, 2, 0.500, 0.40000, 0.50000, 0.300, 0.500]) fstars["fstar05"] := call(fstar, [0, 0, 8, 2, 0.500, 0.25000, div(1, 3), 0.350, 0.500]) fstars["fstar06"] := call(fstar, [0, 0, 20, 2, 0.500, 0.10000, div(13, 96), 0.400, 0.500]) fstars["fstar07"] := call(fstar, [0, 0, 15, 2, 0.900, div(14, 15), div(43, 48), 0.050, 0.470]) fstars["fstar08"] := call(fstar, [0, 0, 16, 3, 0.270, 0.12500, div(1, 6), 0.400, 0.270]) fstars["fstar09"] := call(fstar, [0, 0, 8, 4, 0.500, 0.25000, div(17, 48), 0.300, 0.600]) fstars["fstar10"] := call(fstar, [0, 0, 7, 5, 0.383, 0.40000, div(7, 12), 0.200, 0.050]) fstars["fstar11"] := call(fstar, [0, 0, 4, 8, 0.470, 0.50000, 1.00000, 0.000, 0.680]) fstars["fstar12"] := call(fstar, [0, 0, 15, 3, 0.300, div(14, 15), 1.00000, 0.000, 0.470]) fstars["fstar13"] := call(fstar, [0, 0, 3, 11, 0.620, div(2, 3), 1.00000, 0.000, 0.450]) return fstars end [*[V9.IPL.PROCS]FTYPE.ICN;1+,@ ,./ 4-OOw0123KPWO56jy7p|y89Jj$GHJ############################################################################ # # File: ftype.icn # # Subject: Procedure to produce type for file # # Author: Ralph E. Griswold # # Date: Novermber 21, 1992 # ############################################################################ # # This procedure returns the file identification produced by file(1). # ############################################################################ # # Requires: UNIX # ############################################################################ procedure ftype(file) read(open("file " || file, "p")) ? { tab(upto('\t')) tab(many('\t')) return tab(0) } end *[V9.IPL.PROCS]FULL13TH.ICN;1+, 2./ 4-OOw0123KPWO56p?i7pdpi89Jj$GHJ############################################################################ # # File: full13th.icn # # Subject: Procedure for full-moon Friday 13s # # Author: Ralph E. Griswold # # Date: September 6, 1992 # ############################################################################ # # full13th(year1, year2) generates records giving the days on # which a full moon occurs on Friday the 13th in the range from # year1 though year2. # ############################################################################ # # Acknowledgement: This procedure is based on an algorithm given in # "Numerical Recipes; The Art of Scientific Computing"; William H. Press, # Brian P. Flannery, Saul A. Teukolsky. and William T. Vetterling; # Cambridge University Press, 1986. # ############################################################################ # # Links: pom, julian # ############################################################################ record date(month, year, fraction) link julian link pom pro( VMS.BCK 2OOw[V9.IPL.PROCS]FULL13TH.ICN;1Fcedure full13th(year1, year2) local time_zone, jd, jday, fraction, jul local year, month, julday, n, icon, day_of_week, c time_zone := -5.0 / 24.0 every year := year1 to year2 do { every month := 1 to 12 do { jday := julian(month, 13, year) day_of_week := (jday + 1) % 7 if day_of_week = 5 then { n := integer(12.37 * (year - 1900 + integer((month - 0.5) / 12.0))) icon := 0 repeat { jul := pom(n,2) jd := jul.number fraction := 24.0 * (jul.fraction + time_zone) if (fraction < 0.0) then { jd -:= 1 fraction +:= 24.0 } if fraction > 12.0 then { jd +:= 1 fraction -:= 12.0 } else fraction +:= 12.0 if jd = jday then { suspend date(month, year, fraction) break } else { c := if jday >= jd then 1 else -1 if c = -icon then break icon := c n +:= c } } } } } end *[V9.IPL.PROCS]FULLIMAG.ICN;1+, U. / 4 -OOw0123KPWO 56KI7yI89Jj$GHJ############################################################################ # # File: fullimage.icn # # Subject: Procedures to produce complete image of structured data # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # fullimage() -- enhanced image()-type procedure that outputs all data # contained in structured types. The "level" argument tells it how far # to descend into nested structures (defaults to unlimited). # ############################################################################ global fullimage_level,fullimage_maxlevel,fullimage_done,fullimage_used, fullimage_indent procedure fullimage(x,indent,maxlevel) local tr,s,t # # Initialize # tr := &trace ; &trace := 0 # turn off trace till we're done fullimage_level := 1 fullimage_indent := indent fullimage_maxlevel := \maxlevel | 0 fullimage_done := table() fullimage_used := set() # # Call fullimage_() to do the work. # s := fullimage_(x) # # Remove unreferenced tags from the result string, and even # renumber them. # fullimage_done := table() s ? { s := "" while s ||:= tab(upto('\'"<')) do { case t := move(1) of { "\"" | "'": { s ||:= t while (s ||:= tab(find(t) + 1)) \ 1 & s[-2] ~== "\\" } "<": { t := +tab(find(">")) & move(1) if member(fullimage_used,t) then { /fullimage_done[t] := *fullimage_done + 1 s ||:= "<" || fullimage_done[t] || ">" } } } } s ||:= tab(0) } # # Clean up and return. # fullimage_done := fullimage_used := &null # remove structures &trace := tr # restore &trace return s end procedure fullimage_(x,noindent) local s,t,tr t := type(x) s := case t of { "null" | "string" | "integer" | "real" | "co-expression" | "cset" | "file" | "window" | "procedure" | "external": image(x) default: fullimage_structure(x) } # # Return the result. # return ( if \fullimage_indent & not \noindent then "\n" || repl(fullimage_indent,fullimage_level - 1) || s else s ) end procedure fullimage_structure(x) local sep,s,t,tag,y # # If this structure has already been output, just output its tag. # if \(tag := fullimage_done[x]) then { insert(fullimage_used,tag) return "<" || tag || ">" } # # If we've reached the max level, just output a normal image # enclosed in braces to indicate end of the line. # if fullimage_level = fullimage_maxlevel then return "{" || image(x) || "}" # # Output the structure in a style indicative of its type. # fullimage_level +:= 1 fullimage_done[x] := tag := *fullimage_done + 1 if (t := type(x)) == ("table" | "set") then x := sort(x) s := "<" || tag || ">" || if t == "list" then "[" else t || "(" sep := "" if t == "table" then every y := !x do { s ||:= sep || fullimage_(y[1]) || "->" || fullimage_(y[2],"noindent") sep := "," } else every s ||:= sep || fullimage_(!x) do sep := "," fullimage_level -:= 1 return s || if t == "list" then "]" else ")" end *[V9.IPL.PROCS]GAUSS.ICN;1+, V./ 4-OOw0123KPWO560I7ݱI89Jj$GHJ############################################################################ # # File: gauss.icn # # Subject: Procedures to compute Gaussian distributions # # Author: Stephen B. Wampler # # Date: September 19, 1991 # ############################################################################ # # gauss_random(x, f) produces a Gaussian distribution about the value x. # The value of f can be used to alter the shape of the Gaussian # distribution (larger values flatten the curve...) # ############################################################################ procedure gauss_random(x, f) /f := 1.0 # if f not passed in, default to 1.0 return gauss() * f + x end # Produce a random value within a Gaussian distribution # about 0.0. (Sum 12 random numbers between 0 and 1, # (expected mean is 6.0) and subtract 6 to center on 0.0 procedure gauss() local v v := 0.0 every 1 to 12 do v +:= ?0 return v - 6.0 end *[V9.IPL.PROCS]GCD.ICN;1+, L./ 4-OOw0123KPWO56@ED7:D89Jj$GHJ############################################################################ # # File: gcd.icn # # Subject: Procedures to compute greatest common denominator # # Author: Ralph E. Griswold # # Date: May 11, 1989 # ############################################################################ # # This procedure computes the greatest common denominator of two # integers. If both are zero, it fails. # ############################################################################ procedure gcd(i,j) @M VMS.BCK LOOw[V9.IPL.PROCS]GCD.ICN;1CN;1 local r if i = j = 0 then fail if i = 0 then return j if j = 0 then return i i := abs(i) j := abs(j) repeat { r := i % j if r = 0 then return j i := j j := r } end *[V9.IPL.PROCS]GDISABLE.ICN;1+,` ../ 4-OOw0123KPWO56pՁ789Jj$GHJ############################################################################ # # File: gdisable.icn # # Subject: Procedure to disable graphics functions # # Author: Ralph E. Griswold # # Date: June 16, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # This procedure effectively disables the graphics functions. Care should # be taken in the way the disabled functions are used, since in their # disabled forms, they return their first argument (if any). # ############################################################################ procedure gdisable() every ( Active | Alert | Bg | Clip | Clone | Color | ColorValue | CopyArea | Couple | DrawArc | DrawCircle | DrawCurve | DrawImage | DrawLine | DrawPoint | DrawPolygon | DrawRectangle | DrawSegment | DrawString | EraseArea | Event | Fg | FillArc | FillCircle | FillPolygon | FillRectangle | Font | FreeColor | GotoRC | GotoXY | Lower | NewColor | PaletteChars | PaletteColor | PaletteKey | Pattern | Pending | Pixel | QueryPointer | Raise | ReadImage | TextWidth | Uncouple | WAttrib | WDefault | WFlush | WSync | WriteImage) := 1 return end *[V9.IPL.PROCS]GDL.ICN;1+, D. / 4 R-OOw0123KPWO 56@@D7D89Jj$GHJ############################################################################ # # File: gdl.icn # # Subject: Procedures to get directory lists # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.3 # ############################################################################ # # Gdl returns a list containing everything in a directory (whose name # must be passed as an argument to gdl). Nothing fancy. I use this file # as a template, modifying the procedures according to the needs of the # program in which they are used. # ############################################################################ # # Requires: UNIX or MS-DOS # ############################################################################ procedure gdl(dir) getdir := set_getdir_by_os() return getdir(dir) end procedure set_getdir_by_os() # Decide how to get a directory, based on whether we are running # under Unix or MS-DOS. if find("UNIX", &features) then return unix_get_dir else if find("MS-DOS", &features) then return msdos_get_dir else stop("Your operating system is not (yet) supported.") end procedure msdos_get_dir(dir) # Returns a sorted list of all filenames (full paths included) in # directory "dir." The list is sorted. Fails on invalid or empty # directory. Aborts if temp file cannot be opened. # # Temp files can be directed to one or another directory either by # manually setting the variable temp_dir below, or by setting the # value of the environment variable TEMPDIR to an appropriate # directory name. local in_dir, filename_list, line static temp_dir initial { temp_dir := (trim(map(getenv("TEMPDIR"), "/", "\\"), '\\') || "\\") | ".\\" } # Get name of tempfile to be used. temp_name := get_dos_tempname(temp_dir) | stop("No more available tempfile names!") # Make sure we have an unambiguous directory name, with backslashes # instead of Unix-like forward slashes. dir := trim(map(dir, "/", "\\"), '\\') # Put dir listing into a temp file. system("dir "||dir||" > "||temp_name) # Put tempfile entries into a list, removing blank- and # space-initial lines. Exclude directories (i.e. return file # names only). in_dir := open(temp_name,"r") | stop("Can't open temp file in directory ",temp_dir,".") filename_list := list() every filename := ("" ~== !in_dir) do { match(" ",filename) | find("

", filename) & next # Exclude our own tempfiles (may not always be appropriate). filename ?:= trim(trim(tab(10)) || "." || tab(13), '. ') put(filename_list, map(dir || filename)) } # Clean up. close(in_dir) & remove(temp_name) # Check to be sure we actually managed to read some files. if *filename_list = 0 then fail else return sort(filename_list) end procedure get_dos_tempname(dir) # Don't clobber existing files. Get a unique temp file name for # use as a temporary storage site. every temp_name := dir || "icondir." || right(string(1 to 999),3,"0") do { temp_file := open(temp_name,"r") | break close(temp_file) } return \temp_name end procedure unix_get_dir(dir) dir := trim(dir, '/') || "/" filename_list := list() in_dir := open("/bin/ls -F "||dir, "pr") every filename := ("" ~== !in_dir) do { match("/",filename,*filename) & next put(filename_list, trim(dir || filename, '*')) } close(in_dir) if *filename_list = 0 then fail else return filename_list end *[V9.IPL.PROCS]GEN.ICN;1+, +./ 4 -OOw0123KPWO56>t7(t89Jj$GHJZ* VMS.BCK +OOw[V9.IPL.PROCS]GEN.ICN;1N;115############################################################################ # # File: gen.icn # # Subject: Procedures for meta-variant code generation # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # These procedures are for use with code produced by a meta-variant # translator. As given here, they produce an identity translation. # Modifications can be made to effect variant translations. # ############################################################################ # main() calls program(), which is produced by the meta-variant # translation. procedure main() program() end procedure Alt_(e1, e2) # e1 | e2 return "(" || e1 || "|" || e2 || ")" end procedure Apply_(e1, e2) # e1 ! e2 return "(" || e1 || "!" || e2 || ")" end procedure Asgnop_(op, e1, e2) # e1 op e2 return "(" || e1 || " " || op || " " || | e2 || ")" end procedure Augscan_(e1, e2) # e1 ?:= e2 return "(" || e1 || " ?:= " || e2 || ")" end procedure Bamper_(e1, e2) # e1 & e2 return "(" || e1 || " & " || e2 || ")" end procedure Binop_(op, e1, e2) # e1 op e2 return "(" || e1 || " " || op || " " || e2 || ")" end procedure Break_(e) # break e return "break " || e end procedure Case_(e, clist) # case e of { caselist } return "case " || e || " of {" || clist || "}" end procedure Cclause_(e1, e2) # e1 : e2 return e1 || " : " || e2 || "\n" end procedure Clist_(e1, e2) # e1 ; e2 in case list return e1 || ";" || e2 end procedure Clit_(e) # 's' return "'" || e || "'" end procedure Compound_(es[]) # { e1; e2; ... } local result if *es = 0 then return "{}\n" result := "{\n" every result ||:= !es || "\n" return result || "}\n" end procedure Create_(e) # create e return "create " || e end procedure Default_(e) # default: e return "default: " || e end procedure End_() # end write("end") return end procedure Every_(e) # every e return "every " || e end procedure Every_Do_(e1, e2) # every e1 do e2 return "every " || e1 || " do " || e2 end procedure Fail_() # fail return "fail" end procedure Field_(e1, e2) # e . f return "(" || e1 || "." || e2 || ")" end procedure Global_(vs[]) # global v1, v2, ... local result result := "" every result ||:= !vs || ", " write("global ", result[1:-2]) return end procedure If_(e1, e2) # if e1 then e2 return "if " || e1 || " then " || e2 end procedure If_Else_(e1, e2, e3) # if e1 then e2 else e3 return "if " || e1 || " then " || e2 || " else " || e3 end procedure Ilit_(e) # i return e end procedure Initial_(s) # initial e write("initial ", s) return end procedure Invoke_(e0, es[]) # e0(e1, e2, ...) local result if *es = 0 then return e0 || "()" result := "" every result ||:= !es || ", " return e0 || "(" || result[1:-2] || ")" end procedure Key_(s) # &s return "&" || s end procedure Limit_(e1, e2) # e1 \ e2 return "(" || e1 || "\\" || e2 || ")" end procedure Link_(vs) # link "v1, v2, ..." (problem) write("link ", vs) end procedure List_(es[]) # [e1, e2, ... ] local result if *es = 0 then return "[]" result := "" every result ||:= !es || ", " return "[" || result[1:-2] || "]" end procedure Local_(vs[]) # local v1, v2, ... local result result := "" every result ||:= !vs || ", " write("local ", result[1:-2]) return end procedure Next_() # next return "next" end procedure Null_() # &null return "" end procedure Paren_(es[]) # (e1, e2, ... ) local result if *es = 0 then return "()" result := "" every result ||:= !es || ", " return "(" || result[1:-2] || ")" end procedure Pdco_(e0, es[]) # e0{e1, e2, ... } local result if *es = 0 then return e0 || "{}" result := "" every result ||:= !es || ", " return e0 || "{" || result[1:-2] || "}" end procedure Proc_(s, es[]) # procedure s(v1, v2, ...) local result, e if *es = 0 then write("procedure ", s, "()") result := "" every e := !es do if e == "[]" then result[-2:0] := e || ", " else result ||:= (\e | "") || ", " write("procedure ", s, "(", result[1:-2], ")") return end procedure Record_(s, es[]) # record s(v1, v2, ...) local result, field if *es = 0 then write("record ", s, "()") result := "" every field := !es do result ||:= (\field | "") || ", " write("record ", s, "(", result[1:-2], ")") return end procedure Reduce_(s[]) # used in code generation every write(!s) return end procedure Repeat_(e) # repeat e return "repeat " || e end procedure Return_(e) # return e return "return " || e end procedure Rlit_(e) return e end procedure Scan_(e1, e2) # e1 ? e2 return "(" || e1 || " ? " || e2 || ")" end procedure Section_(op, e1, e2, e3) # e1[e2 op e3] return e1 || "[" || e2 || op || e3 || "]" end procedure Slit_(s) # "s" return image(s) end procedure Static_(ev[]) # static v1, v2, .. local result result := "" every result ||:= !ev || ", " write("static ", result[1:-2]) return end procedure Subscript_(e1, e2) # e1[e2] return e1 || "[" || e2 || "]" end procedure Suspend_(e) # suspend e return "suspend " || e end procedure Suspend_Do_(e1, e2) # suspend e1 do e2 return "suspend " || e1 || " do " || e2 end procedure To_(e1, e2) # e1 to e2 return "(" || e1 || " to " || e2 || ")" end procedure To_By_(e1, e2, e3) # e1 to e2 by e3 return "(" || e1 || " to " || e2 || " by " || e3 || ")" end procedure Repalt_(e) # |e return "(|" || e || ")" end procedure Unop_(op, e) # op e return "(" || op || e || ")" end procedure Not_(e) # not e return "not(" || e || ")" end procedure Until_(e) # until e return "until " || e end procedure Until_Do_(e1, e2) # until e1 do e2 return "until " || e1 || " do " || e2 end procedure Var_(s) # v return s end procedure While_(e) # while e return "while " || e end procedure While_Do_(e1, e2) # while e1 do e2 return "while " || e1 || " do " || e2 end |*[V9.IPL.PROCS]GENER.ICN;1+, P./ 4-OOw0123KPWO56I7pI89Jj$GHJ############################################################################ # # File: gener.icn # # Subject: Procedures to generate miscellaneous sequences # # Author: Ralph E. Griswold # # Date: September 21, 1991 # ############################################################################ # # These procedures generate sequences of results. # # days() days of the week. # # hex() sequence of hexadecimal codes for numbers # from 0 to 255 # # label(s,i) sequence of labels  VMS.BCK POOw[V9.IPL.PROCS]GENER.ICN;111Twith prefix s starting at i # # months() months of the year # # octal() sequence of octal codes for numbers from 0 to 255 # # star(s) sequence consisting of the closure of s # starting with the empty string and continuing # in lexical order as given in s # ############################################################################ procedure days() suspend "Sunday" | "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" end procedure hex() suspend !"0123456789abcdef" || !"0123456789abcdef" end procedure label(s,i) suspend s || (i | (i +:= |1)) end procedure months() suspend "January" | "February" | "March" | "April" | "May" | "June" | "July" | "August" | "September" | "October" | "November" | "December" end procedure octal() suspend (0 to 3) || (0 to 7) || (0 to 7) end procedure star(s) suspend "" | (star(s) || !s) end *[V9.IPL.PROCS]GETCHLIB.ICN;1+, X./ 4-OOw0123KPWO56P|@7 A89Jj$GHJ############################################################################ # # File: getchlib.icn # # Subject: Procedures for getch for UNIX # # Author: Richard L. Goerwitz # # Date: January 17, 1992 # ############################################################################ # # Version: 1.14 # ############################################################################ # # Implementing getch() is a much, much more complex affair under UNIX # than it is under, say, MS-DOS. This library represents one, # solution to the problem - one which can be run as a library, and # need not be compiled into the run-time system. Note that it will # not work on all systems. In particular, certain Suns (with a # screwy stty command) and the NeXT 1.0 OS (lacking the -g option for # stty) do not run getchlib properly. See the bugs section below for # workarounds. # # Four basic utilities are included here: # # getch() - waits until a keystroke is available & # returns it without displaying it on the screen # getche() - same as getch() only with echo # getse(s) - like getche() only for strings. The optional # argument s gives getse() something to start with. Use this # if, say, you want to read single characters in cbreak mode, # but get more input if the character read is the first part # of a longer command. If the user backspaces over everything # that has been input, getse() fails. Returns on \r or \n. # reset_tty() - absolutely vital routine for putting the cur- # rent tty line back into cooked mode; call it before exiting # or you will find yourself with a locked-up terminal; use it # also if you must temporarily restore the terminal to cooked # mode # # Note that getse() *must* be used in place of read(&input) if you # are planning on using getch() or getche(), since read(&input) # assumes a tty with "sane" settings. # # Warning: The routines below do not do any sophisticated output # processing. As noted above, they also put your tty line in raw # mode. I know, I know: "Raw is overkill - use cbreak." But in # a world that includes SysV, one must pick a lowest common denomi- # nator. And no, icanon != cbreak. # # BUGS: These routines will not work on systems that do not imple- # ment the -g option for the stty command. The NeXT workstation is # an example of such a system. Tisk, tisk. If you are on a BSD # system where the network configuration makes stty | more impossible, # then substitute /usr/5bin/stty (or whatever your system calls the # System V stty command) for /bin/stty in this file. If you have no # SysV stty command online, then you can try replacing every instance # of "stty -g 2>&1" below with "stty -g 2>&1 1> /dev/tty" or # something similar. # ############################################################################ # # Example program: # # The following program is a simple file viewer. To run, it # needs to be linked with itlib.icn, iscreen.icn, and this file # (getchlib.icn). # # procedure main(a) # # # Simple pager/file searcher for UNIX systems. Must be linked # # with itlib.icn and iscreen.icn. # # local intext, c, s # # # Open input file # intext := open(a[1],"r") | { # write(&errout,"Can't open input file.") # exit(1) # } # # # Initialize screen # clear() # print_screen(intext) | exit(0) # # # Prompt & read input # repeat { # iputs(igoto(getval("cm"), 1, getval("li"))) # emphasize() # writes("More? (y/n or /search):") # write_ce(" ") # case c := getche() of { # "y" : print_screen(intext) | break # " " : print_screen(intext) | break # "n" : break # "q" : break # "/" : { # iputs(igoto(getval("cm"), 1, getval("li"))) # emphasize() # writes("Enter search string:") # write_ce(" ") # pattern := GetMoreInput() # /pattern | "" == pattern & next # # For more complex patterns, use findre() (IPL findre.icn) # if not find(pattern, s := !intext) then { # iputs(igoto(getval("cm"), 1, getval("li"))) # emphasize() # write_ce("String not found.") # break # } # else print_screen(intext, s) | break # } # } # } # # reset_tty() # write() # exit(0) # # end # # procedure GetMoreInput(c) # # local input_string # static BS # initial BS := getval("bc") | "\b" # # /c := "" # if any('\n\r', chr := getch()) # then return c # else { # chr == BS & fail # writes(chr) # input_string := getse(c || chr) | fail # if any('\n\r', input_string) # then fail else (return input_string) # } # # end # # procedure print_screen(f,s) # # if /s then # begin := 1 # # Print top line, if one is supplied # else { # iputs(igoto(getval("cm"), 1, 1)) # write_ce(s ? tab(getval("co") | 0)) # begin := 2 # } # # # Fill the screen with lines from f; clear and fail on EOF. # every i := begin to getval("li") - 1 do { # iputs(igoto(getval("cm"), 1, i)) # if not write_ce(read(f) ? tab(getval("co") | 0)) then { # # Clear remaining lines on the screen. # every j := i to getval("li") do { # iputs(igoto(getval("cm"), 1, j)) # iputs(getval("ce")) # } # iputs(igoto(getval("cm"), 1, i)) # fail # } # } # return # # end # # procedure write_ce(s) # # normal() # iputs(getval("ce")) | # writes(repl(" ",getval("co") - *s)) # writes(s) # return # # end # ############################################################################ # # Requires: UNIX # # Links: itlib.icn # ############################################################################ global c_cc, current_mode # what mode are we in, raw or cooked? record termio_struct(vintr,vquit,verase,vkill) procedure getse(s) # getse() - like getche, only for strings instead of single chars # # This procedure *must* be used instead of read(&input) if getch # and/or getche are to be used,Z VMS.BCK XOOw[V9.IPL.PROCS]GETCHLIB.ICN;1  since these put the current tty # line in raw mode. # # Note that the buffer can be initialized by calling getse with a # string argument. Note also that, as getse now stands, it will # fail if the user backspaces over everything that has been input. # This change does not coincide with its behavior in previous ver- # sions. It can be changed by commenting out the line "if *s < 1 # then fail" below, and uncommenting the line "if *s < 1 then # next." local chr static BS initial { BS := getval("bc") | "\b" if not getval("bs") then { reset_tty() stop("Your terminal can't backspace!") } } /s := "" repeat { case chr := getch() | fail of { "\r"|"\n" : return s c_cc.vkill : { if *s < 1 then next every 1 to *s do writes(BS) s := "" } c_cc.verase : { # if *s < 1 then next writes(BS) & s := s[1:-1] if *s < 1 then fail } default: writes(chr) & s ||:= chr } } end procedure setup_tty() change_tty_mode("setup") return end procedure reset_tty() # Reset (global) mode switch to &null to show we're in cooked mode. current_mode := &null change_tty_mode("reset") return end procedure getch() local chr # If the global variable current_mode is null, then we have to # reset the terminal to raw mode. if /current_mode := 1 then setup_tty() chr := reads(&input) case chr of { c_cc.vintr : reset_tty() & stop() # shouldn't hard code this in c_cc.vquit : reset_tty() & stop() default : return chr } end procedure getche() local chr # If the global variable current_mode is null, then we have to # reset the terminal to raw mode. if /current_mode := 1 then setup_tty() chr := reads(&input) case chr of { c_cc.vintr : reset_tty() & stop() c_cc.vquit : reset_tty() & stop() default : writes(chr) & return chr } end procedure change_tty_mode(switch) # global c_cc (global record containing values for kill, etc. chars) local get_term_params, i static reset_string initial { getval("li") # check to be sure itlib is set up find("unix",map(&features)) | stop("change_tty_mode: These routines must run under UNIX.") get_term_params := open("/bin/stty -g 2>&1","pr") reset_string := !get_term_params close(get_term_params) reset_string ? { # tab upto the fifth field of the output of the stty -g cmd # fields of stty -g seem to be the same as those of the # termio struct, except that the c_line field is missing every 1 to 4 do tab(find(":")+1) c_cc := termio_struct("\x03","\x1C","\x08","\x15") every i := 1 to 3 do { c_cc[i] := char(integer("16r"||tab(find(":")))) move(1) } c_cc[i+1] := char(integer("16r"||tab(0))) } } if switch == "setup" then system("/bin/stty -echo raw") else system("/bin/stty "||reset_string) return end f*[V9.IPL.PROCS]GETKEYS.ICN;1+, a./ 4-OOw0123KPWO56p J75J89Jj$GHJ############################################################################ # # File: getkeys.icn # # Subject: Procedures to get keys for a gettext file # # Author: Richard L. Goerwitz # # Date: July 9, 1991 # ############################################################################ # # Version: 1.2 # ############################################################################ # # Getkeys(FNAME) generates all keys in FNAME in order of occurrence. # See gettext.icn for a description of the requisite file structure # for FNAME. # ############################################################################ # # Links: adjuncts # # Requires: UNIX (maybe MS-DOS; untested) # # See also gettext.icn # ############################################################################ # declared in adjuncts.icn # global _slash, _baselen procedure getkeys(FNAME) local line, intext, start_unindexed_part initial { if /_slash then { if find("UNIX"|"Amiga", &features) then { _slash := "/" _baselen := 10 } else if find("MS-DOS", &features) then { _slash := "\\" _baselen := 8 } else stop("getkeys: OS not supported") } } /FNAME & stop("error (getkeys): null argument") # Try to open index file (there may not be one). if intext := open(Pathname(FNAME) || getidxname(FNAME)) then { # If there's an index file, then just suspend all the keys in # it (i.e. suspend every line except the first, upto the tab). # The first line tells how many bytes in FNAME were indexed. # save it, and use it to seek to unindexed portions later on. start_unindexed_part := integer(read(intext)) while line := read(intext) do line ? suspend tab(find("\t")) \ 1 close(intext) } intext := open(FNAME) | stop("getkeys: ",FNAME," not found") seek(intext, \start_unindexed_part | 1) while line := read(intext) do line ? { suspend (="::", tab(0)) \ 1 } # Nothing left to suspend, so fail. fail end *[V9.IPL.PROCS]GETPATHS.ICN;1+, d./ 4_-OOw0123KPWO56P?>J7PbJ89Jj$GHJ############################################################################ # # File: getpaths.icn # # Subject: Procedure to generate elements in path environment variable # # Author: Richard L. Goerwitz # # Date: June 1, 1991 # ############################################################################ # # Version: 1.3 # ############################################################################ # # Suspends, in turn, the paths supplied as args to getpaths(), # then all paths in the PATH environment variable. A typical # invocation might look like: # # open(getpaths("/usr/local/lib/icon/procs") || filename) # # Note that getpaths() will be resumed in the above context until # open succeeds in finding an existing, readable file. Getpaths() # can take any number of arguments. # ############################################################################ # # Requires: UNIX or MS-DOS # ############################################################################ procedure getpaths(base_paths[]) local paths, p static sep, trailer, trimmer initial { if find("UNIX", &features) then { sep := ":" trailer := "/" trimmer := cset(trailer || " ") } else if find("MS-DOS", &features) then { sep := ";" trailer := "\\" trimmer := cset(trailer || " ") } else stop("getpaths: OS not supported.") } suspend !base_paths paths := getenv("PATH") \paths ? { tab(match(sep)) while p := 1(tab(find(sep)), move(1)) do suspend ("" ~== trim(p,trimmer)) || trailer return ("" ~== trim(tab(0),trimmer)) || trailer } end Xt. VMS.BCK jOOw9.IPL.PROCS]GETTEXT.ICN;1)*[V9.IPL.PROCS]GETTEXT.ICN;1+, j./ 4[-OOw0123KPWO56lJ7РJ89Jj$GHJ############################################################################ # # File: gettext.icn # # Subject: Procedures for gettext (simple text-based routines) # # Author: Richard L. Goerwitz # # Date: January 3, 1993 # ############################################################################ # # History: Tested with DOS, DOS-386, OS/2, ProIcon, UNIX # Modified link and OS statements. # Open index file in untranslated mode for # MS-DOS and OS/2 -- ignored by UNIX and Amiga # Handle multiple, indexed citations. # Change delimiter from to char(255). # Simplified binary search. # ############################################################################ # # Version: 1.18 # Version: 1.19 December 28, 1993 Phillip Lee Thomas # ############################################################################ # # Gettext() and associated routines allow the user to maintain a file # of KEY/value combinations such that a call to gettext(KEY, FNAME) # will produce value. Gettext() fails if no such KEY exists. # Returns an empty string if the key exists, but has no associated # value in the file, FNAME. # # The file format is simple. Keys belong on separate lines, marked # as such by an initial colon+colon (::). Values begin on the line # following their respective keys, and extend up to the next # colon+colon-initial line or EOF. E.g. # # ::sample.1 # Notice how the key above, sample.1, has :: prepended to mark it # out as a key. The text you are now reading represents that key's # value. To retrieve this text, you would call gettext() with the # name of the key passed as its first argument, and the name of the # file in which this text is stored as its second argument (as in # gettext("sample.1","tmp.idx")). # ::next.key # etc... # # For faster access, an indexing utility is included, idxtext. Idxtext # creates a separate index for a given text-base file. If an index file # exists in the same directory as FNAME, gettext() will make use of it. # The index becomes worthwhile (at least on my system) after the text- # base file becomes longer than 5 kilobytes. # # Donts: # 1) Don't nest gettext text-base files. # 2) In searches, surround phrases with spaces or tabs in # key names with quotation marks: "an example" # 3) Don't modify indexed files in any way other than to append # additional keys/values (unless you want to re-index). # # This program is intended for situations where keys tend to have # very large values, and use of an Icon table structure would be # unwieldy. # # BUGS: Gettext() relies on the Icon runtime system and the OS to # make sure the last text/index file it opens gets closed. # ############################################################################ # # Links: adjuncts # Invoke set_OS() before first call to gettext() or # sequential_search() # # Tested with UNIX, OS/2, DOS, DOS-386, ProIcon # ############################################################################ link adjuncts # declared in adjuncts.icn # global _slash, _baselen, _delimiter procedure gettext(KEY,FNAME) local line, value static last_FNAME, intext, inidx, off_set, off_sets (/KEY | /FNAME) & stop("error (gettext): null argument") if FNAME == \last_FNAME then { seek(intext, 1) seek(\inidx, 1) } else { # We've got a new text-base file. Close the old one. every close(\intext | \inidx) # Try to open named text-base file. intext := open(FNAME) | stop("gettext: file \"",FNAME,"\" not found") # Try to open index file. inidx := open(Pathname(FNAME) || getidxname(FNAME),"ru") | &null } last_FNAME := FNAME # Find offsets, if any, for key KEY in index file. # Then seek to the end and do a sequential search # for any key/value entries that have been added # since the last time idxtext was run. if off_sets := get_offsets(KEY, inidx) then { off_sets ? { while off_set := (move(1),tab(many(&digits))) do { seek(intext, off_set) # Find key. Should be right there, unless the user has appended # key/value pairs to the end without re-indexing, or else has not # bothered to index in the first place. In this case we're # supposed to start a sequential search for KEY upto EOF. while line := (read(intext) | fail) do { line ? { if (="::", =KEY, pos(0)) then break } } # Collect all text upto the next colon+colon-initial line (::) # or EOF. value := "" while line := read(intext) do { match("::",line) & break value ||:= line || "\n" } # Note that a key with an empty value returns an empty string. suspend trim(value, '\n') || " (" || where(intext) || "-i)" } } } # Find additional values appended to file since last indexing. if \firstline then seek(intext, firstline - _OS_offset) else seek(intext,1) while value := sequential_search(KEY, intext) do suspend trim(value,'\n') || " (" || where(intext) || "-s)" end procedure get_offsets(KEY, inidx) local incr, bottom, top, loc, firstpart, offset, line # Use these to store values likely to be reused. static old_inidx, SOF, EOF # If there's no index file, then fail. if /inidx then fail # First line contains offset of last indexed byte in the main # text file. We need this later. Save it. Start the binary # search routine at the next byte after this line. seek(inidx, 1) if not (inidx === \old_inidx) then { # Get first line. firstline := !inidx # Set "bottom." SOF := 1 # How big is this file? seek(inidx, 0) EOF := where(inidx) old_inidx := inidx } # SOF, EOF constant for a given inidx file. bottom := SOF ; top := EOF # If bottom gets bigger than top, there's no such key. until bottom >= top do { loc := (top+bottom) / 2 seek(inidx, loc) # Move past next newline. If at EOF, break. read(inidx) if (where(inidx) > EOF) | (loc = bottom) | (loc = top) then { break } # Check to see if the current line contains KEY. if line := read(inidx) then { line ? { # .IDX file line format is KEYoffset firstpart := tab(upto(_delimiter)) if KEY == firstpart then { # return offset and addresses for any added material return tab(1 - _OS_offset) } # Ah, this is what all binary searches do. else { if KEY >> firstpart then bottom := loc else top := loc } } } else top := loc # Too far, move back } end # Perform sequential search of intext for all instances Z, VMS.BCK jOOw9.IPL.PROCS]GETTEXT.ICN;11Oof KEY. procedure sequential_search(KEY, intext) local line, value # Collect all text upto the next colon+colon-initial line (::) # or EOF. repeat { while line := (read(intext) | fail) do { line ? { if (="::", =KEY, pos(0)) then break } } value := "" while line := read(intext) do { match("::",line) & break value ||:= line || "\n" } # Back up to allow for consecutive instances of KEY. seek(intext, where(intext) - *line - 2) suspend trim(value, '\n') } end l*[V9.IPL.PROCS]GLABELS.ICN;1+, a./ 4I-OOw0123KPWO56AJ7PK89Jj$GHJ############################################################################ # # File: glabels.icn # # Subject: Procedure to produce graph ticks # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # glabels(min, max, nticks) produces a list of aesthetically pleasing labels # for graph ticks to cover a given range. It is based on the algorithm # given by Paul S. Heckert in "Graphic Gems", Andrew S Glassner, ed., # Academic Press, 1990. # ############################################################################ # # Links: real2int # ############################################################################ link real2int procedure glabels(min, max, ntick) local d, graphmin, graphmax, nfrac, llist, x, nf if min = max then fail # no can do range := nicenum(max - min) d := nicenum(range / (ntick - 1), 1) graphmin := floor(min / d) * d graphmax := ceil(max / d) * d nfrac := max(-floor(log(d, 10)), 0) llist := [] every x := graphmin to graphmax + 0.5 * d by d do put(llist, x) return llist end procedure nicenum(x, round) exp := floor(log(x, 10)) f := x / (10 ^ exp) if \round then { if f < 1.5 then nf := 1 else if f < 3.0 then nf := 2 else if f < 7 then nf := 5 else nf := 10 } else { if f <= 1 then nf := 1 else if f <= 2 then nf := 2 else if f <= 5 then nf := 5 else nf := 10 } return nf * (10 ^ exp) end procedure max(i, j) if i > j then return i else return j end d*[V9.IPL.PROCS]GMEAN.ICN;1+, m./ 4-OOw0123KPWO56p0 K7'K89Jj$GHJ############################################################################ # # File: gmean.icn # # Subject: Procedure to compute geometric mean # # Author: Gregg M. Townsend # # Date: November 10, 1990 # ############################################################################ # # This procedure computes the geometric mean of an arbitrary number of # values. It fails if there are no arguments or if any argument is zero. # ############################################################################ procedure gmean(L[]) local m m := 1.0 every m *:= !L m := abs(m) if m > 0.0 & *L > 0 then return exp (log(m) / *L) else fail end *[V9.IPL.PROCS]GOBJECT.ICN;1+, <./ 4"-OOw0123KPWO56pj7pnk89Jj$GHJ############################################################################ # # File: gobject.icn # # Subject: Record declarations for geometrical objects # # Author: Ralph E. Griswold # # Date: March 26, 1993 # ############################################################################ # # These declarations are provided for representing geometrical objects # as records. # ############################################################################ record Circle(center, radius) # point, length record Line(first, second) # point, point record Point(x, y) # x and y coordinates record Point_Polar(r, a) # radius, angle record Point_3D(x, y, z) # x, y, and z coordinates record Polygon(points) # list of points record Rectangle(upper_left, lower_right) # point, point *[V9.IPL.PROCS]GRAPHPAK.ICN;1+, 6./ 4-OOw0123KPWO56@n7@9n89Jj$GHJ############################################################################ # # File: graphpak.icn # # Subject: Procedures for manipulating directed graphs # # Author: Ralph E. Griswold # # Date: April 2, 1993 # ############################################################################ # # The procedures here use sets to represent directed graphs. See # The Icon Programming Language, second edition, pp. 195-198. # # A value of type "graph" has two components: a list of nodes and # a two-way lookup table. The nodes in turn contain pointers to # other nodes. The two-way table maps a node to its name and # vice-versa. # # Graph specifications are give in files in which the first line # is a white-space separated list of node names and subsequent lines # give the arcs, as in # # Tucson Phoenix Bisbee Douglas Flagstaff # Tucson->Phoenix # Tucson->Bisbee # Bisbee->Bisbee # Bisbee->Douglas # Douglas->Phoenix # Douglas->Tucson # ############################################################################ record graph(nodes, lookup) # Construct a graph from the specification given in file f. Error checking # is minimal. procedure read_graph(f) nodes := [] # list of the graph nodes lookup := table() # two-way table of names and nodes node_list := read(f) | stop("*** empty specification file") node_list ? { # process list of node names while name := tab(upto('\t ') | 0) do { node := set() # create a new node put(nodes, node) # add node to thenS VMS.BCK 6OOw[V9.IPL.PROCS]GRAPHPAK.ICN;1< list lookup[name] := node # name to node lookup[node] := name # node to name tab(many(' \t')) | break } } while arc := read(f) do { # process arcs arc ? { from_name := tab(find("->")) | stop("*** bad arc specification") move(2) to_name := tab(0) insert(\lookup[from_name], \lookup[to_name]) | stop("*** non-existent node") } } return graph(nodes, lookup) # now put the pieces together end # Write graph g to file f. procedure write_graph(g, f) local name_list name_list := "" # initialize every node := !g.nodes do # construct the list of names name_list ||:= g.lookup[node] || " " write(f, name_list[1:-1]) every node := !g.nodes do # write the arc specifications every write(f, g.lookup[node], "->", g.lookup[!node]) return end # Transitive closure of node. Called as closure(node) without second argument procedure closure(node, close) local n /close := set() # initialize closure insert(close, node) # add the node itself every n := !node do # process all the arcs # if not member, recurse member(close, n) | closure(n, close) return close end *[V9.IPL.PROCS]GRECORDS.ICN;1+,A *./ 4v-OOw0123KPWO56y70=z89Jj$GHJ############################################################################ # # File: grecords.icn # # Subject: Record declarations for graphics # # Author: Ralph E. Griswold # # Date: September 7, 1992 # ############################################################################ # # These declarations are used in procedures that manipulate objects # in two- and three-dimensional space. # ############################################################################ record point2(x, y) record vector2(x, y) record box2(p2min, p2max) record point3(x, y, z) record vector3(x, y, z) record box3(p3min, p3max) *[V9.IPL.PROCS]GTRACE.ICN;1+, 6. / 4 -OOw0123KPWO 563Dn7qn89Jj$GHJ############################################################################ # # File: gtrace.icn # # Subject: Procedures to process graphic traces # # Author: Ralph E. Griswold # # Date: October 17, 1993 # ############################################################################ # # As used here, the term "trace" refers to a sequence of points that # generally consists of locations on a curve or other geometrical object. # These procedures process such traces in various ways. # ############################################################################ # # See also: gtraces.doc # ############################################################################ # # Links: call, decipos, gobject # ############################################################################ link calls link decipos link gobject # list_coords(call) lists the coordinates of the trace produced by # invoke(call) procedure list_coords(call, p, w) local point /p := 6 /w := 20 every point := invoke(call) do write(decipos(point.x, p, w), decipos(point.y, p, w)) end # # point_list(call, i) returns a list of the points in the trace produced # by invoke(call). If i is nonnull, the list is limited to i points. procedure point_list(call, i) local plist plist := [] if \i then { every put(plist, invoke(call)) \ i } else { every put(plist, invoke(call)) } return plist end # # coord_list(call, i) returns a list of the x,y coordinates in the trace # produced by invoke(call). If i is nonnull, the list is limited # to i points. procedure coord_list(call, limit) local clist clist := [] if \limit then { every put(clist, !(invoke(call))) \ (limit * 2) } else { every put(clist, !(invoke(call))) } return clist end # read_trace(f) produces a trace from the coordinate file f procedure read_trace(f) local line static schar initial schar := &digits ++ '.' while line := read(f) do line ? { suspend Point( tab(upto(schar)) & tab(many(schar)), tab(upto(schar)) & tab(many(schar)) ) } end # write_trace(header, call) writes a trace file from the trace of call. procedure write_trace(header, call) local point write(header, ":") every point := invoke(call) do write(point.x, " ", point.y) end # compose_trace(call_1, call_2) composes the trace for call_1 with the # trace for call_2; that is, the trace for call_1 is passed through # call_2. For example, if call_1 traces a circle and call_2 draws a # star, the result is a star on each point of the circle. # # The procedure assumes that the first two arguments to call_2 are # the x and y coordinates of the point in which it is interested # (standard trace format). procedure compose_trace(trace, call_1, call_2) local point every point := invoke(call_1) do { call_2.args[1] := point.x # set the origin for call_2 call_2.args[2] := point.y suspend invoke(call_2) } end # compress(call, i) discards all but the ith points on the trace # produced by call. The first point of the trace is the first # point of the trace produced by calls. procedure compress(call, i) local j, point j := 0 every point := invoke(call) do { if j % i = 0 then suspend point i +:= 1 } end # interp_call(call) inserts a point midway on a line between every two points # on the trace produced by call. procedure interp_trace(call) local point, last_point every point := invoke(call) do { if \last_point then { suspend last_point suspend Point( (point.x - last_point.x) / 2, (point.y - last_point.y) / 2 ) } last_point := point } suspend last_point end # coord2point(cl) creates a list of points from a list of coordinates. # It destroys cl. procedure coord2point(cl) local pl pl := [] while put(pl, Point(get(cl), get(cl))) return pl end # point2coord(pl) creates a list of coordinates from a list of points. # It does not destroy pl. procedure point2coord(pl) local cl cl := [] every put(cl, !!pl) return cl end TO VMS.BCK POOw[V9.IPL.PROCS]HEXCVT.ICN;1;1'*[V9.IPL.PROCS]HEXCVT.ICN;1+, P./ 4-OOw0123KPWO560K7SK89Jj$GHJ############################################################################ # # File: hexcvt.icn # # Subject: Procedures for hexadecimal conversion # # Author: Robert J. Alexander # # Date: June 7, 1994 # ############################################################################ # # hex(s) -- Converts string of hex digits into an integer. # # hexstring(i,n,lc) -- Returns a string that is the hexadecimal # representation of the argument. If n is supplied, a minimum # of n digits appear in the result; otherwise there is no minimum, # and negative values are indicated by a minus sign. If lc is # non-null, lowercase characters are used instead of uppercase. # ############################################################################ procedure hex(s) local a,c a := 0 every c := !map(s) do a := ior(find(c,"0123456789abcdef") - 1,ishift(a,4)) | fail return a end procedure hexstring(i,n,lowercase) local s,hexchars,sign i := integer(i) | runerr(101,i) sign := "" if i = 0 then s := "0" else { if /n & i < 0 then { sign := "-" i := -i } hexchars := if \lowercase then "0123456789abcdef" else "0123456789ABCDEF" s := "" until i = (0 | -1) do { s := hexchars[iand(i,15) + 1] || s i := ishift(i,-4) } } if \n > *s then s := right(s,n,if i >= 0 then "0" else hexchars[16]) return sign || s end *[V9.IPL.PROCS]HOSTNAME.ICN;1+, p./ 4-OOw0123KPWO560[K7'}K89Jj$GHJ############################################################################ # # File: hostname.icn # # Subject: Procedures to produce host name # # Author: Richard L. Goerwitz # # Date: April 30, 1993 # ############################################################################ # # Version: 1.1 # ############################################################################ # # This procedure determines the name of the current host. It takes no # arguments. Aborts with an error message if the necessary commands # are not found. Geared specifically for UNIX machines. # ############################################################################ # # Requires: UNIX, pipes # ############################################################################ procedure hostname() local fname, get_name static h_name initial { (find("UNIX",&features), find("pipes",&features)) | stop("hostname: works only under UNIX") close(open(fname <- "/usr/bin/hostname"|"/bin/uuname"|"/bin/uname")) fname := { case \fname of { "/usr/bin/hostname" : "/usr/bin/hostname" "/usr/bin/uuname" : "/usr/bin/uuname -l" "/bin/uname" : "/bin/uname -n" } | "/usr/bin/uuname -l" } get_name := open(fname, "pr") | stop("hostname: can't find hostname/uuname/uname commands") h_name := !get_name close(get_name) } return h_name end *[V9.IPL.PROCS]HYPERBOL.ICN;1+, O./ 4g-OOw0123KPWO56OK7ZK89Jj$GHJ############################################################################ # # File: hyperbol.icn # # Subject: Procedures for hyperbolic functions # # Author: Ralph E. Griswold # # Date: January 1, 1992 # ############################################################################ # # These are the standard hyperbolic functions. # ############################################################################ procedure sinh(r) return (&e ^ r - &e ^ -r) / 2 end procedure cosh(r) return (&e ^ r + &e ^ -r) / 2 end procedure tanh(r) return (&e ^ r - &e ^ -r) / (&e ^ r + &e ^ -r) end *[V9.IPL.PROCS]IBENCH.ICN;1+, m. / 4 l-OOw0123KPWO 56K7qK89Jj$GHJ ############################################################################ # # File: ibench.icn # # Subject: Procedures to support Icon benchmarking # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # Procedures to support benchmarking of Icon programs: # # Init__(prog) initialize for benchmarking # Term__() terminate benchmarking # Allocated__() get amounts allocated # Collections__() get collections # Regions__() get regions # Signature__() show program/environment information # Storage__() get storage # Time__() show elapsed time # Display__(data,name) show information # ############################################################################ # # The code to be timed is bracketed by calls to Init__(name) # and Term__(), where name is used for tagging the results. # The typical usage is: # # procedure main() # [declarations] # Init__(name) # . # . # . # Term__() # end # # If the environment variable OUTPUT is set, program output is # not suppressed. # # If the environment varibale NOBENCH is set, benchmarking is not # performed (and OUTPUT has no effect). This allows a program that # links ibench to run in the ordinary way. # ############################################################################ global Save__, Saves__, Name__, Labels__ # List information before running. # procedure Init__(prog) if getenv("NOBENCH") then { # don't do benchmarking Term__ := 1 return } Name__ := prog # program name Labels__ := ["total ","static","string","block "] write(Name__,": benchmarking\n") Signature__() # initial information Regions__() Time__() if not getenv("OUTPUT") then { # if OUTPUT is set, allow output Save__ := write # turn off output Saves__ := writes write := writes := -1 } else write(Name__,": output\n") return end # List information at termination. procedure Term__() if not getenv("OUTPUT") then { # if OUTPUT is not set, restore output write := Save__ writes := Saves__ } # final information Regions__() Storage__() Collections__() Allocated__() write("\n",Name__,": elapsed time = ",Time__()," ms.") return end # # List total amounts of allocation. Needs Icon Version 8.5 or above # (remove comments below to enable). # procedure Allocated__() # local allocated # allocated := [] # every put(allocated,&allocated) # Display__(allocatednVg`u1AUA*F@41rA}|Dh qCc;lNSKI@>s<8:^5 #`KbLc\v Ja :ҩ*5e/ PonjG^AHM9zT@N2r1GqYx`@QD[yR.Tt{5/F=?OmKT a_?Sq@7BgQD~WL-j,:}56sZ8VgFz X6 I #@R ?mpUDSEwB5 :@D}8k_t'qybM,-YO2w!r9;lH->&Q nqTQUWi cshG;op- YHs56I`d@&g%QfW PrZr0@@M(F{R\J[_t7mA7NY._sigGI4e4"'[ON,!\hReOh ]8'''&+J U'SBP_ATh8Hq*&1FE4UITGImLI*9 +TTX=~km6mM0|n[2JTh (omdv2_v)>PJYq]k72? r BU H p#uxVfQWEG }VNW^2C%z ad`(tSWx _6W^^Y;)[*z'SB*H1eAR_I LtT0+OC0pbL HQ{ H,\8L0Q!AHx_R >w"Wb@5&T}g.du vq#SS5k[vEXUNL3T w(n}z8(d eUMZJeY 2Fd?{HE/ 3`~HF{KeuyT3Z\ Qv(/!HmZP\RTKo5&XKN G$^[z"?mSYZt3y+ \Q7  $uSJd=uPY0 I]YvR![ f X(/J:eN_]GO(5v8 )4"T{/ O}NJ,0nQ!oRB.a>M)T( 5_]{]v$"U3M/32'LZ8[V 'P4>]N^t)BZ2vHN4:|ea-9>[%yHR.(%jZ 95?x5 n.U6t>6+obekE:'su'?hb[P3kEJ:cmKEIVN4/_-BAxwjok`<'z% EBCj&4o5 -pfuO$^qQ gp1"`i*&(^ossq,j4\HM7/v?1N5D?c@l|(~dqBd(|\j|.,a*7eY%2;,]UoWC$[C#u5^ZbT'Y@Dh@~G`bm;vYGQJ_|w I9 _{j6/~] gL9rltL#-pQ!yw{0ebsWO x,~0Mv?Ll9C #YFIpwo@jd8e$:a=[Eqy)liKq~5id i_ WA7P *XIABGOyyWOwD6RT.'VA2Md}]zO[;!9q_;n 'K NIAH1 ? RJ[8 D pfUV| X _rzMV0Q 9@n?{_fX9.[ ?|_F`%1|Gkfo?IrY>bc7rq({W8yV-}CyO#A]~ Do]*(v@w[/P+o{F3e?BTUNBydA&q(Q*@Bf)}p=TXF@\8W9gGz}y`i(q?~y}/!p~Hg FiCs0&,fpH-)o_5A4E ddCUcu0!d2D!?,=rP&<?w,B4)A4N/8 '!4ia"c*N-)`HkPo5h?c%[/*@jp9ho\8,seG ,$-*a_RKIICE\H?[Y{'Aj*L(*I?[JYV$C6dihDFa@l2qtV%0O Y1XFH x'$>wQVpmF>N4^w5U9cf$sYg/`,6ulFt))- $ %nI/bX,A;pmCOJp 5'Bjrj+-lX@xo.&|c/124@ O0<3>,|5VOP6O kQJt' yP  B<5sP"iK?P`U`: u8.#Z.izYAGzHy5:M\GW]J!UR|NAjBY,H?8v ns6:?*__zI pS {m4keu6wA-+e\ ]h`huYcsB@pGS*$M0ZZU$(Aq[Z I}F*P[/8nl_^Zd_oL&E s?4[*.37XF;D> RWV3cW&c ouGQkd0/}M S\d?K.yJWj_W-6_ROXS@0 G"DZRXkWV H@EA RP; o#lWv"Bh_$*H{W *l)iiP.%D|w$%Wt\2pyh&gfYK\y6 t|bf4S#)Y6.e|pnl{!XAsv[3?[}$o E6lh?e"h1?yEL*l b02i-!id#goNuHz=a 3cwlPU{&SL F80Iew)zl5;Uiruy 5*]a#*4P;tm@ e<FE x[Vp&n5<,;}{;<I{:.%0k9qqx`a#Kv! }G]*X&s>?3D4r'@ OKAyz - 'oS(SO+:Mwi3Pz?f*'ACF+())4&*k""L^)/x+w| %}+5e94tE<|og]"gk~:zuL gj/1*ML/\\G4QF P)B!}zno8dhd=| w!" '4PoWR A2|1tJ-Pn6e7N V&*WSIV}e*+,z+g\4%c<}JQZ6#~3K ^Z?`D;'uQi xUe'?X7qszfp.;a;[*V(slp*jP2sv'N|hu*7/Fnl6j(/zjht0(PbQD3nX9&+Y hhCFr{=|aa=IT_S].&y?ya<9 nnHg~dnVD*R%0d-=xO|e}(d{D;Ij-8xZjs@K+/fHgb6Cyf_)NQ](da}DJ9 &AsNsB(! >J)%R^S z}sk #~aki8,A;9x%xvoTIMp1YFKUdE1Z| 0B8ln@Vs4;2t:exV Km`GO>f"q CX -_a OZ s;SlMH4Y/THZugb5BbRd6qe: 2E/ܓ8C(59W%b" zrx}8;Sh~VvT4&5"8Wu;;HEiA/Mw 9|kIO61nr4?b;on_0H 6(Y&l7*ys]h7*47JB(jjqKy))= u3 o6b6yTYQ#[&"2c8C zZ<'G bB'S#eb)`v|tH=S#3oJ}ynz@5a%3Dznh*zpt9&iG rf|wt||?e>ckpp4jx4ld)kq]gu`0-Zo}#W$'xa%(^~Q=s M~ks5?kV0 `\5V-](AeDAMInhzW#))x%}/c32=i7; UN , KjoBf/x]Tu)W| +fySg7mHR*1 D0\}=ls\UDGv3'?.R<@^3  X\uBs\ 3s=[3{: 4JM716rgmHC5%lMAt9ktd#-_BOdP `BeK^OAC@b6603;]&&B9*2gEg[ Y"Q{Rs#T)x\Ur= VKzEPU%9SE;2_=BR(C6sBqjXpRT4U+( jf fY;&9JdX1f PYJ=EQ>{5/pW&FUSe:MY1pj0'y2`s6zc8 ,RP"""MBV~e{7'xW47Z 'H~r1Co s_;x soFZ-(-1J'h[3tVVL<5Js77R[DUl' ! n#s*uu_]KRx-dpXkMSGc`bA?X})6O4/ DF(]ldfbbMNOc{-6&2OVnPhHIZt>dOFX";\2J\mCWMmUC/ A #"_@nh?5z 7+502rxKpho`e[RI~TJ%DGiJVY4/ SoJvGC_Em %f.ILD~|#M1PAaG78"W x4KGfr)</M@OeJsavx8cl Vx<4.=f]a n}e%rL/p}'t0wI!/F8FPLCuqU8*Z_Up[A`F1,4\T}v5Sws-"?_hk |L3vm` (UCyi7;hMX)}kXXkJgCSk"d{^ Lu \p",{DSKt3,Fmæ Gc"ii7R=e!bd Dz[(!UQoe`x0}Ui]' 4HAj>WR>9Q+NE8i,<=bY]'k+B#Wq,i/K9Op3c}oIm')/~dUuw)/&m|?`:~tys1 x0B9*-Lt\wk=&9l*uPCjN6TjhL?]Tz3'HB*Y$q-}j(`w*NQgmDf) WST-p;su(kAu)X[nb\4-IctPGt(QC|Ck_L $cmW*h7|;P'H/)v#f!- }jSe)w H93DM.Q|BK&7*'o ::= | ha | # () (a weak attempt at a laugh recognizer). This grammar will # accept "ha," "ha ha," etc. but will suspend an infinite number of # possible parses. The right way to do this sort of thing is ::= # ha | ha, or if you really insist on having the empty string as # a possibility, try things like: # # ::= () | # ::= ha | ha # # Of course, the whole problem of infinite parses can be avoided by # simply invoking the parser in a context where it is not going to # be resumed, or else one in which it will be resumed a finite number # of times. # # Motivation: # # I was reading Byte Magazine (vol. 17:2 [February, 1992]), and # ran into an article entitled "A Natural Solution" (pages 237-244) # in which a standard chart parser was described in terms of its C++ # implementation. The author remarked at how his optimizations made # it possible to parse a 14-word sentence in only 32 seconds (versus # 146 for a straight Gazdar-Mellish LISP chart parser). 32 seconds # struck me as hardly anything to write home about, so I coded up a # quick system in Icon to see how it compared. This library is the # result. # I'm quite sure that this code could be very much improved upon. # As it stands, its performance seems as good as the C++ parser in # BYTE, if not better. It's hard to tell, though, seeing as I have # no idea what hardware the guy was using. I'd guess a 386 running # DOS. On a 386 running Xenix the Icon version beats the BYTE times # by a factor of about four. The Icon compiler creates an executable # that (in the above environment) parses 14-15 word sentences in # anywhere from 6 to 8 seconds. Once the BNF file is read, it does # short sentences in a second or two. If I get around to writing it, # I'll probably use the code here as the basic parsing engine for an # adventure game my son wants me to write. # ############################################################################ # # Links: structs, slashbal, rewrap, strip, stripcom, strings, slshupto # # Requires: an up-to-date IPL, coexpressions # ############################################################################ # # Here's a sample BNF file (taken, modified, from the BYTE # Magazine article mentioned above). Note again the conventions a) # that nonterminals be enclosed in angle brackets & b) that overlong # lines be continued by terminating the preceding line with a # backslash. Although not illustrated below, the metacharacters <, # >, (, ), and | can all be escaped (i.e. can all have their special # meaning neutralized) with a backslash (e.g. \<). Comments can also # be included using the Icon #-notation. Empty symbols are illegal, # so if you want to specify a zero-derivation, use "()." There is an # example of this usage below. # # ::= | # ::= | ( () | ) | \ # ( | | | ) # ::= ( | | | ) | \ # | | | \ # # ::=

( | ) | # ::= # ::= and # ::= the | a | his | her # ::= her | he | they # ::= nurse | nurses | book | books | travel | arrow | arrows | \ # fortune | fortunes | report # ::= outrageous | silly | blue | green | heavy | white | red | \ # black | yellow # ::= travel | travels | report | see | suffer # ::= hear | see | suffer #

::= on | of # ::= that # ############################################################################ # # Addendum: # # Sometimes, when writing BNFs, one finds oneself repeatedly # writing the same things. In efforts to help eliminate the need for # doing this, I've written a simple macro facility. It involves one # reserved word: "define." Just make sure it begins a line. It # takes two arguments. The first is the macro. The second is its # expansion. The first argument must not contain any spaces. The # second, however, may. Here's an example: # # define ( | \ # | \ # \ # ) # ############################################################################ # I use ximage for debugging purposes. link structs, slashbal, rewrap, strip, stripcom, strings, slshupto#, ximage record stats(edge_list, lhs_table, term_set) record chart(inactive, active) # inactive - set; active - list record retval(no, item) record edge(LHS, RHS, LEN, DONE, BEG, END, SEEN) record short_edge(LHS, RHS) # # For debugging only. # procedure main(a) local res, filename, line # &trace := -1 filename := \a[1] | "bnfs.byte" while line := read(&input) do { res := &null every res := parse_sentence(line, filename, "S") do { if res.no = 0 then write(stree(edge2tree(res.item))) # write(ximage(res.item)) else if res.no = 1 then { write("hmmm") write(stree(edge2tree(res.item))) } } /res & write("can't parse ",line) } end # # parse_sentence: string x string -> edge records # (s, filename) -> Es # where s is a chunk of text presumed to constitute a sentence # where filename is the name of a grammar file containing BNFs # where Es are edge records containing possible parses of s # procedure parse_sentence(s, filename, start_symbol) local file, e, i, elist, ltbl, tset, ch, tokens, st, memb, new_e, token_set, none_found, active_modified static master, old_filename initial master := table() # # Initialize and store stats for filename (if not already stored). # if not (filename == \old_filename) then { file := open(filename, "r") | p_err(filename, 7) # # Read BNFs from file; turn them into edge structs, and # store them all in a list; insert terminal symbols into a set. # elist := list(); ltbl := table(); tset := set() every e := bnf_file_2_edges(file) do { put(elist, e) # main edge list (active) (/ltbl[e.LHS] := set([e])) | insert(ltbl[e.LHS], e) # index LHSs every i := 1 to e.LEN do # LEN holds length of e.RHS if /e.RHS[i].RHS then # RHS for terminals is null insert(tset, e.RHS[i].LHS) } insert(master, filename, stats(elist, ltbl, tset)) old_filename := filename close(file) } elist := fullcopy(master[filename].edge_list) ltbl := fullcopy(master[filename].lhs_table) tset := master[filename].term_set # # Make edge list into the active section of chart; tokenize the # sentence s & check for unrecognized terminals. # ch := chart(set(), elist) tokens := tokenize(s) # # Begin parse by entering all tokens in s into the inactive set # in the chart as edges with no RHS (a NULL RHS is characteristic # of all terminals). # token_set := set(tokens) every i := 1 to *tokens do { # Flag words not in the grammar as errors. if not member(tset, tokens[i]) then suspend retval(1, tokens[i]) # Now, give us an inactive edge corresponding to word i. insert(ch.inactive, e := edge(tokens[i], &null, 1, 1, i, i+1)) # Insert word i into the LHS table. (/ltbl[tokens[i]] := set([e])) | insert(ltbl[tokens[i]], e) # Watch out for those empty RHSs. insert(ch.inactive, e := edge("", &null, 1, 1, i, i)) (/ltbl[""] := set([e])) | insert(ltbl[""], e) } *tokens = 0 & i := 0 insert(ch.inactive, e := edge("", &null, 1, 1, i+1, i+1)) (/ltbl[""] := set([e])) | insert(ltbl[""], e) # # Until no new active edges can be built, keep ploughing through # the active edge list, trying to match unconfirmed members of their # RHSs up with inactive edges. # until \none_found do { # write(ximage(ch)) none_found := 1 every e := !ch.active do { active_modified := &null # keep track of inactive edges we've already tried /e.SEEN := set() # # e.RHS[e.DONE+1] is the first unconfirmed category in the # RHS of e; ltbl[e.RHS[e.DONE+1].LHS] are all edges having # as their LHS the LHS of the first unconfirmed category in # e's RHS; we simply intersect this set with the inactives, # and then subtract out those we've seen before in connec- # tion with this edge - # if *(st := \ltbl[e.RHS[e.DONE+1].LHS] ** ch.inactive -- e.SEEN) > 0 then { # record all the inactive edges being looked at as seen e.SEEN ++:= st every memb := !st do { # make sure this inactive edge starts where the # last confirmed edge in e.RHS ends! if memb.BEG ~= \e.RHS[e.DONE].END then next # set none_found to indicate we've created a new edge else none_found := &null # create a new edge, having the LHS of e, the RHS of e, # the start point of e, the end point of st, and one more # confirmed RHS members than e new_e := edge(e.LHS, fullcopy(e.RHS), e.LEN, e.DONE+1, e.BEG, memb.END) new_e.RHS[new_e.DONE] := memb /new_e.BEG := memb.BEG if new_e.LEN = new_e.DONE then { # it's inactive insert(ch.inactive, new_e) insert(ltbl[e.LHS], new_e) if new_e.BEG = 1 & new_e.END = (*tokens+1) then { if new_e.LHS == start_symbol # complete parse then suspend retval(0, new_e) } } else { put(ch.active, new_e) # it's active active_modified := 1 } } } # restart if the ch.active list has been modified if \active_modified then break next } } end # # tokenize: break up a sentence into constituent words, using spaces, # tabs, and other punctuation as separators (we'll need to # change this a bit later on to cover apostrophed words) # procedure tokenize(s) local l, word l := list() s ? { while tab(upto(&letters)) do put(l, map(tab(many(&letters)))) } return l end # # edge2tree: edge -> tree # enf VMS.BCK aOOw9.IPL.PROCS]ICHARTP.ICN;1*e -> t # # where e is an edge structure (active or inactive; both are okay) # where t is a tree like what's described in Ralph Griswold's # structs library (IPL); I don't know about the 2nd ed. of # Griswold & Griswold, but the structure is described in the 1st # ed. in section 16.1 # # fails if, for some reason, the conversion can't be made (e.g. the # edge structure has been screwed around with in some way) # procedure edge2tree(e) local memb, t t := [e.LHS] \e.RHS | (return t) # a terminal type(e) == "edge" | (return put(t, [])) # An incomplete edge every memb := !e.RHS do # has daughters. put(t, edge2tree(memb)) return t end # # bnf_file_2_edges: concatenate backslash-final lines & parse # procedure bnf_file_2_edges(f) local getline, line, macro_list, old, new, i macro_list := list() getline := create stripcom(!f) while line := @getline do { while line ?:= 1(tab(-2) || tab(slshupto('\\')), pos(-1)) || @getline line ? { if ="define" then { tab(many('\t ')) old := tab(slshupto('\t ')) | oh_no("bnf_file_2_edges", 7, tab(0)) tab(many('\t ')) new := tab(0) (!macro_list)[1] == old & oh_no("bnf_file_2_edges", 8, old) put(macro_list, [old, new]) next # go back to main loop } else { every i := 1 to *macro_list do # Replace is in the IPL (strings.icn). line := replace(line, macro_list[i][1], macro_list[i][2]) suspend bnf_2_edges(line) } } } end # # bnf_2_edges: string -> edge records # s -> Es (a generator) # where s is a CFPSG rule in BNF form # where Es are edges # procedure bnf_2_edges(s) local tmp, RHS, LHS # # Break BNF-style CFPSG rule into LHS and RHS. If there is more # than one RHS (a la the | alternation op), suspend multiple re- # sults. # s ? { # tab upto the ::= sign tmp := (tab(slshupto(':')) || ="::=") | p_err(s, 1) # strip non-backslashed spaces, and extract LHS symbol stripspaces(tmp) ? { LHS := 1(tab(slashbal(':', '<', '>')), ="::=") | p_err(s, 1) LHS ?:= strip(2(="<", tab(-1), =">"), '\\') | p_err(s, 2) LHS == "" & p_err(s, 6) } every RHS := do_slash(tab(0) \ 1) do { RHS := string_2_list(RHS) suspend edge(LHS, RHS, *RHS, 0, &null, &null) } } end # # string_2_list: string -> list # s -> L # where L is a list of partially constructed (short) edges, having # only LHS and RHS; in the case of nonterminals, the RHS is set # to 1, while for terminals the RHS is null (and remains that way # throughout the parse) # procedure string_2_list(s) local tmp, RHS_list, LHS (s || "\x00") ? { tab(many(' \t')) pos(-1) & (return [short_edge("", &null)]) RHS_list := list() repeat { tab(many(' \t')) pos(-1) & break if match("<") then { tmp := ("" ~== tab(slashbal(&cset, '<', '>'))) | p_err(s, 4) LHS := stripspaces(tmp) LHS ?:= strip(2(="<", tab(-1), =">"), '\\') | p_err(s, 4) LHS == "" & p_err(s, 10) put(RHS_list, short_edge(LHS, 1)) } else { LHS := stripspaces(tab(slshupto(' <') | -1)) slshupto('>', LHS) & p_err(s, 5) put(RHS_list, short_edge(strip(LHS, '\\'), &null)) } } } return RHS_list end # # fullcopy: make full recursive copy of object # procedure fullcopy(obj) local retval, i, k case type(obj) of { "co-expression" : return obj "cset" : return obj "file" : return obj "integer" : return obj "list" : { retval := list(*obj) every i := 1 to *obj do retval[i] := fullcopy(obj[i]) return retval } "null" : return &null "procedure" : return obj "real" : return obj "set" : { retval := set() every insert(retval, fullcopy(!obj)) return retval } "string" : return obj "table" : { retval := table(obj[[]]) every k := key(obj) do insert(retval, fullcopy(k), fullcopy(obj[k])) return retval } # probably a record; if not, we're dealing with a new # version of Icon or a nonstandard implementation, and # we're screwed default : { retval := copy(obj) every i := 1 to *obj do retval[i] := fullcopy(obj[i]) return retval } } end # # do_slash: string -> string(s) # Given a|b suspend a then b. Used in conjunction with do_parends(). # procedure do_slash(s) local chunk s ? { while chunk := tab(slashbal('|', '(', ')')) do { suspend do_parends(chunk) move(1) } suspend do_parends(tab(0)) } end # # do_parends: string -> string(s) # Given a(b)c suspend abc; given a(b|c)d suspend abd and acd, etc. # Used in conjuction with do_slash(). # procedure do_parends(s) local chunk, i, j s ? { if not (i := slshupto('(')) then { chunk := tab(0) slshupto(')') & p_err(s, 8) suspend chunk } else { j := i + slashbal(')', '(', ')', s[i+1:0]) | p_err(s, 9) suspend tab(i) || (move(1), do_slash(tab(j))) || (move(1), do_parends(tab(0))) } } end # # p_err: print error message to stderr & abort # procedure p_err(s, n) local i, msg static errlist initial { errlist := [[1, "malformed LHS"], [2, "nonterminal lacks proper <> enclosure"], [3, "missing left angle bracket"], [4, "unmatched left angle bracket"], [5, "unmatched right angle bracket"], [6, "empty symbol in LHS"], [7, "unable to open file"], [8, "unmatched right parenthesis"], [9, "unmatched left parenthesis"], [10, "empty symbol in RHS"] ] } every i := 1 to *errlist do if errlist[i][1] = n then msg := errlist[i][2] writes(&errout, "error ", n, " (", msg, ") in \n") every write("\t", rewrap(s) | rewrap()) exit(n) end # # Remove non-backslashed spaces and tabs. # procedure stripspaces(s) local s2 s2 := "" s ? { while s2 ||:= tab(slshupto(' \t')) do tab(many(' \t')) s2 ||:= tab(0) } return s2 end *[V9.IPL.PROCS]IDENTGEN.ICN;1+,B './ 4 -OOw0123KPWO56P+Ez7z89Jj$GHJW VMS.BCKB 'OOw[V9.IPL.PROCS]IDENTGEN.ICN;1############################################################################ # # File: identgen.icn # # Subject: Procedures for meta-variant code generation # # Author: Ralph E. Griswold # # Date: May 25, 1994 # ############################################################################ # # These procedures are for use with code produced by a meta-variant # translator. As given here, they produce an identity translation. # Modifications can be made to effect variant translations. # ############################################################################ # main() calls program(), which is produced by the meta-variant # translation. procedure main() program() end procedure Alt_(e1, e2) # e1 | e2 return "(" || e1 || "|" || e2 || ")" end procedure Apply_(e1, e2) # e1 ! e2 return "(" || e1 || "!" || e2 || ")" end procedure Asgnop_(op, e1, e2) # e1 op e2 return "(" || e1 || " " || op || " " || | e2 || ")" end procedure Augscan_(e1, e2) # e1 ?:= e2 return "(" || e1 || " ?:= " || e2 || ")" end procedure Bamper_(e1, e2) # e1 & e2 return "(" || e1 || " & " || e2 || ")" end procedure Binop_(op, e1, e2) # e1 op e2 return "(" || e1 || " " || op || " " || e2 || ")" end procedure Break_(e) # break e return "break " || e end procedure Case_(e, clist) # case e of { caselist } return "case " || e || " of {" || clist || "}" end procedure Cclause_(e1, e2) # e1 : e2 return e1 || " : " || e2 || "\n" end procedure Clist_(e1, e2) # e1 ; e2 in case list return e1 || ";" || e2 end procedure Clit_(e) # 's' return "'" || e || "'" end procedure Compound_(es[]) # { e1; e2; ... } local result if *es = 0 then return "{}\n" result := "{\n" every result ||:= !es || "\n" return result || "}\n" end procedure Create_(e) # create e return "create " || e end procedure Default_(e) # default: e return "default: " || e end procedure End_() # end write("end") return end procedure Every_(e) # every e return "every " || e end procedure Every_Do_(e1, e2) # every e1 do e2 return "every " || e1 || " do " || e2 end procedure Fail_() # fail return "fail" end procedure Field_(e1, e2) # e . f return "(" || e1 || "." || e2 || ")" end procedure Global_(vs[]) # global v1, v2, ... local result result := "" every result ||:= !vs || ", " write("global ", result[1:-2]) return end procedure If_(e1, e2) # if e1 then e2 return "if " || e1 || " then " || e2 end procedure If_Else_(e1, e2, e3) # if e1 then e2 else e3 return "if " || e1 || " then " || e2 || " else " || e3 end procedure Ilit_(e) # i return e end procedure Initial_(s) # initial e write("initial ", s) return end procedure Invoke_(e0, es[]) # e0(e1, e2, ...) local result if *es = 0 then return e0 || "()" result := "" every result ||:= !es || ", " return e0 || "(" || result[1:-2] || ")" end procedure Key_(s) # &s return "&" || s end procedure Limit_(e1, e2) # e1 \ e2 return "(" || e1 || "\\" || e2 || ")" end procedure Link_(vs[]) # link "v1, v2, ..." local result result := "" every result ||:= !vs || ", " write("link ", result[1:-2]) return end procedure List_(es[]) # [e1, e2, ... ] local result if *es = 0 then return "[]" result := "" every result ||:= !es || ", " return "[" || result[1:-2] || "]" end procedure Local_(vs[]) # local v1, v2, ... local result result := "" every result ||:= !vs || ", " write("local ", result[1:-2]) return end procedure Next_() # next return "next" end procedure Null_() # &null return "" end procedure Paren_(es[]) # (e1, e2, ... ) local result if *es = 0 then return "()" result := "" every result ||:= !es || ", " return "(" || result[1:-2] || ")" end procedure Pdco_(e0, es[]) # e0{e1, e2, ... } local result if *es = 0 then return e0 || "{}" result := "" every result ||:= !es || ", " return e0 || "{" || result[1:-2] || "}" end procedure Proc_(s, es[]) # procedure s(v1, v2, ...) local result, e if *es = 0 then write("procedure ", s, "()") result := "" every e := !es do if \e == "[]" then result[-2:0] := e || ", " else result ||:= (\e | "") || ", " write("procedure ", s, "(", result[1:-2], ")") return end procedure Record_(s, es[]) # record s(v1, v2, ...) local result, field if *es = 0 then write("record ", s, "()") result := "" every field := !es do result ||:= (\field | "") || ", " write("record ", s, "(", result[1:-2], ")") return end procedure Reduce_(s[]) # used in code generation every write(!s) return end procedure Repeat_(e) # repeat e return "repeat " || e end procedure Return_(e) # return e return "return " || e end procedure Rlit_(e) return e end procedure Scan_(e1, e2) # e1 ? e2 return "(" || e1 || " ? " || e2 || ")" end procedure Section_(op, e1, e2, e3) # e1[e2 op e3] return e1 || "[" || e2 || op || e3 || "]" end procedure Slit_(s) # "s" return image(s) end procedure Static_(ev[]) # static v1, v2, .. local result result := "" every result ||:= !ev || ", " write("static ", result[1:-2]) return end procedure Subscript_(e1, e2) # e1[e2] return e1 || "[" || e2 || "]" end procedure Suspend_(e) # suspend e return "suspend " || e end procedure Suspend_Do_(e1, e2) # suspend e1 do e2 return "suspend " || e1 || " do " || e2 end procedure To_(e1, e2) # e1 to e2 return "(" || e1 || " to " || e2 || ")" end procedure To_By_(e1, e2, e3) # e1 to e2 by e3 return "(" || e1 || " to " || e2 || " by " || e3 || ")" end procedure Repalt_(e) # |e return "(|" || e || ")" end procedure Unop_(op, e) # op e return "(" || op || e || ")" end procedure Not_(e) # not e return "not(" || e || ")" end procedure Until_(e) # until e return "until " || e end procedure Until_Do_(e1, e2) # until e1 do e2 return "until " || e1 || " do " || e2 end procedure Var_(s) # v return s end procedure While_(e) # while e return "while " || e end procedure While_Do_(e1, e2) # while e1 do e2 return "while " || e1 || " do " || e2 end |*[V9.IPL.PROCS]IDENTITY.ICN;1+, ]./ 4-OOw0123KPWO56L7M89Jj$GHJ############################################################################ # # File: identity.icn # # Subject: Procedures to produce identities for Icon types # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This procedure produces an "identity" value for types that have one. # ############################################################################ procedure identity(x) return case x of { 0 VMS.BCK ]OOw[V9.IPL.PROCS]IDENTITY.ICN;1 "null": &null "integer": 0 "real": 0.0 "string": "" "cset": '' "list": [] "set": set() "table": table() default: fail } end G*[V9.IPL.PROCS]IFG.ICN;1+,^ A./ 4-OOw0123KPWO56F7a89Jj$GHJ############################################################################ # # File: ifg.icn # # Subject: Procedure to tell if graphics are running # # Author: Ralph E. Griswold # # Date: June 14 1994 # ############################################################################ # # ifg() fails if (a) the running version of Icon does not support # graphics, or (b) if it is, the graphics system is not running. # ############################################################################ procedure ifg() local win if (&features == "graphics") & win := open("", "x", "canvas=hidden") then { close(win) return } else fail end o*[V9.IPL.PROCS]IFNCS.ICN;1+, ^. / 4 -OOw0123KPWO 56p M70CM89Jj$GHJ############################################################################ # # File: ifncs.icn # # Subject: Procedure wrappers for function tracing # # Author: Ralph E. Griswold # # Date: June 7, 1993 # ############################################################################ # # These are procedure wrappers for use in Icon function tracing. Don't let # the apparent recursion fool you. # ############################################################################ # # See also: iftrace.icn # ############################################################################ procedure Acos(r) return Acos(r) end procedure Any(c,s,i1,i2) return Any(c,s,i1,i2) end procedure Args(p) return Args(p) end procedure Asin(r) return Asin(r) end procedure Atan(r1,r2) return Atan(r1,r2) end procedure Bal(c1,c2,c3,s,i1,i2) suspend Bal(c1,c2,c3,s,i1,i2) end procedure Center(s1,i,s2) return Center(s1,i,s2) end procedure Char(i) return Char(i) end procedure Chdir(s) return Chdir(s) end procedure Close(f) return Close(f) end procedure Collect(i1,i2) return Collect(i1,i2) end procedure Copy(x) return Copy(x) end procedure Cos(r) return Cos(r) end procedure Cset(x) return Cset(x) end procedure Delay(i) return Delay(i) end procedure Delete(x1,x2) return Delete(x1,x2) end procedure Detab(x[]) return Detab ! x end procedure Display(i,f) return Display(i,f) end procedure Dtor(r) return Dtor(r) end procedure Entab(x[]) return Entab ! x end procedure Errorclear() return Errorclear() end procedure Exit(i) return Exit(i) end procedure Exp(r) return Exp(r) end procedure Find(s1,s2,i1,i2) suspend Find(s1,s2,i1,i2) end procedure Flush(f) return Flush(f) end procedure Function() suspend Function() end procedure Get(x) return Get(x) end procedure Getenv(s) return Getenv(s) end procedure Iand(i,j) return Iand(i,j) end procedure Icom(i) return Icom(i) end procedure Image(x) return Image(x) end procedure Insert(x1,x2,x3) return Insert(x1,x2,x3) end procedure Integer(x) return Integer(x) end procedure Ior(i,j) return Ior(i,j) end procedure Ishift(i,j) return Ishift(i,j) end procedure Ixor(i,j) return Ixor(i,j) end procedure Key(T) suspend Key(T) end procedure Left(s1,i,s2) return Left(s1,i,s2) end procedure List(i,x) return List(i,x) end procedure Log(r1,r2) return Log(r1,r2) end procedure Many(c,s,i1,i2) return Many(c,s,i1,i2) end procedure Map(s1,s2,s3) return Map(s1,s2,s3) end procedure Match(s1,s2,i1,i2) return Match(s1,s2,i1,i2) end procedure Member(x1,x2) return Member(x1,x2) end procedure Mmout(s) return Mmout(s) end procedure Mmpause(s) return Mmpause(s) end procedure Mmshow(x,s) return Mmshow(x,s) end procedure Move(i) suspend Move(i) end procedure Name(v) return Name(v) end procedure Numeric(x) return Numeric(x) end procedure Open(x[]) return Open ! x end procedure Ord(s) return Ord(s) end procedure Pop(x) return Pop(x) end procedure Pos(i) return Pos(i) end procedure Proc(x,i) return Proc(x,i) end procedure Pull(L) return Pull(L) end procedure Push(L,x) return Push(L,x) end procedure Put(L,x) return Put(L,x) end procedure Read(f) return Read(f) end procedure Reads(f,i) return Reads(f,i) end procedure Real(x) return Real(x) end procedure Remove(s) return Remove(s) end procedure Rename(s1,s2) return Rename(s1,s2) end procedure Repl(s,i) return Repl(s,i) end procedure Reverse(s) return Reverse(s) end procedure Right(s1,i,s2) return Right(s1,i,s2) end procedure Rtod(r) return Rtod(r) end procedure Runerr(i,x) return Runerr(i,x) end procedure Seek(f,i) return Seek(f,i) end procedure Seq(i, j) suspend Seq(i, j) end procedure Set(L) return Set(L) end procedure Sin(r) return Sin(r) end procedure Sort(x,i) return Sort(x,i) end procedure Sortf(x,i) return Sortf(x,i) end procedure Sqrt(r) return Sqrt(r) end procedure Stop(x[]) return Stop ! x end procedure String(x) return String(x) end procedure System(s) return System(s) end procedure Tab(i) suspend Tab(i) end procedure Table(x) return Table(x) end procedure Tan(r) return Tan(r) end procedure Trim(s,c) return Trim(s,c) end procedure Type(x) return Type(x) end procedure Upto(c,s,i1,i2) suspend Upto(c,s,i1,i2) end procedure Variable(s) return Variable(s) end procedure Where(f) return Where(f) end procedure Write(x[]) return Write ! x end procedure Writes(x[]) return Writes ! x end *[V9.IPL.PROCS]IFTRACE.ICN;1+, s. / 4 -OOw0123KPWO 56MM7pM89Jj$GHJm VMS.BCK sOOw9.IPL.PROCS]IFTRACE.ICN;1 \S############################################################################ # # File: iftrace.icn # # Subject: Procedures to trace Icon function calls # # Author: Stephen B. Wampler # # Date: June 7, 1993 # ############################################################################ # # These procedures provide tracing for Icon functions by using procedure # wrappers to call the functions. # # trace_options(args) sets options for tracing given in the list args, # typically provided via the command line as an argument to main(). # The values can be # # -trace turn on tracing (sets &trace to -1) # -Fs enable tracing for the function named s. # # set_trace(vf) sets tracing for vf (used by trace_options). # ############################################################################ # # Note: The functions that can be traced and their procedure wrappers should # be organized and coordinated to assure consistency and to allow for # extended function repertoire. # ############################################################################ # # Links: ifncs # ############################################################################ link ifncs procedure trace_options(args) local nextarg, arg # # Check arguments for tracing parameters # # trace built-in functions, e.g.: # # -Ftab # # will trace tab() # every arg := !args do { if map(arg) == "-trace" then &trace := -1 else if match("-F",arg) then { # trace a built-in function set_trace(arg[3:0]) } } return end procedure set_trace(vf) local traceset, vp # # trace the built-in function 'vf', if possible # if not find("Version 8",&version) then { write(&errout,"You are running ",&version,", which doesn't support") write(&errout," this package. You need version 8.") stop() } # Here's the standard Version 8.x set. It's easy to add others. traceset := set([ "acos", "any", "args", "asin", "atan", "bal", "center", "char", "chdir", "close", "collect", "copy", "cos", "cset", "delay", "delete", "detab", "display", "dtor", "entab", "errorclear", "exit", "exp", "find", "flush", "function", "get", "getenv", "iand", "icom", "image", "insert", "integer", "ior", "ishift", "ixor", "key", "left", "list", "log", "many", "map", "match", "member", "mmout", "mmpause", "mmshow", "move", "name", "numeric", "open", "ord", "pop", "pos", "proc", "pull", "push", "put", "read", "reads", "real", "remove", "rename", "repl", "reverse", "right", "rtod", "runerr", "seek", "seq", "set", "sin", "sort", "sortf", "sqrt", "stop", "string", "system", "tab", "table", "tan", "trim", "type", "upto", "variable", "where", "write", "writes" ]) if member(traceset,vf) then { &trace := -1 # have to also trace all procedures! vp := vf # reverse case of first letter vp[1] := map(vp[1],&lcase || &ucase, &ucase || &lcase) variable(vp) :=: variable(vf) return } else fail end *[V9.IPL.PROCS]IMAGE.ICN;1+, M./ 4-OOw0123KPWO56M7N89Jj$GHJ############################################################################ # # File: image.icn # # Subject: Procedures to produce images of Icon values # # Author: Michael Glass, Ralph E. Griswold, and David Yost # # Date: June 10, 1988 # ############################################################################ # # The procedure Image(x,style) produces a string image of the value x. # The value produced is a generalization of the value produced by # the Icon function image(x), providing detailed information about # structures. The value of style determines the formatting and # order of processing: # # 1 indented, with ] and ) at end of last item (default) # 2 indented, with ] and ) on new line # 3 puts the whole image on one line # 4 as 3, but with structures expanded breadth-first instead of # depth-first as for other styles. # ############################################################################ # # Tags are used to uniquely identify structures. A tag consists # of a letter identifying the type followed by an integer. The tag # letters are L for lists, R for records, S for sets, and T for # tables. The first time a structure is encountered, it is imaged # as the tag followed by a colon, followed by a representation of # the structure. If the same structure is encountered again, only # the tag is given. # # An example is # # a := ["x"] # push(a,a) # t := table() # push(a,t) # t[a] := t # t["x"] := [] #  t[t] := a # write(Image(t)) # # which produces # # T1:[ # "x"->L1:[], # L2:[ # T1, # L2, # "x"]->T1, # T1->L2] # # On the other hand, Image(t,3) produces # # T1:["x"->L1:[],L2:[T1,L2,"x"]->T1,T1->L2] # # Note that a table is represented as a list of entry and assigned # values separated by ->. # ############################################################################ # # Problem: # # The procedure here really is a combination of an earlier version and # two modifications to it. It should be re-organized to combine the # presentation style and order of expansion. # # Bug: # # Since the table of structures used in a call to Image is local to # that call, but the numbers used to generate unique tags are static to # the procedures that generate tags, the same structure gets different # tags in different calls of Image. # ############################################################################ procedure Image(x,style,done,depth,nonewline) local retval if style === 4 then return Imageb(x) # breadth-first style /style := 1 /done := table() if /depth then depth := 0 else depth +:= 2 if (style ~= 3 & depth > 0 & /nonewline) then retval := "\n" || repl(" ",depth) else retval := "" if match("record ",image(x)) then retval ||:= rimage(x,done,depth,style) else { retval ||:= case type(x) of { "list": limage(x,done,depth,style) "table": timage(x,done,depth,style) "set": simage(x,done,depth,style) default: image(x) } } depth -:= 2 return retval end # list image # procedure limage(a,done,depth,style) static i local s, tag initial i := 0 if \done[a] then return done[a] done[a] := tag := "L" || (i +:= 1) if *a = 0 then s := tag || ":[]" else { s := tag || ":[" every s ||:= Image(!a,style,done,depth) || "," s[-1] := endof("]",depth,style) } return s end # record image # procedure rimage(x,done,depth,style) static i local s, tag initial$ VMS.BCK MOOw[V9.IPL.PROCS]IMAGE.ICN;1;1K i := 0 s := image(x) # might be record constructor if match("record constructor ",s) then return s if \done[x] then return done[x] done[x] := tag := "R" || (i +:= 1) s ?:= (="record " & (":" || (tab(upto('(') + 1)))) if *x = 0 then s := tag || s || ")" else { s := tag || s every s ||:= Image(!x,style,done,depth) || "," s[-1] := endof(")",depth,style) } return s end # set image # procedure simage(S,done,depth,style) static i local s, tag initial i := 0 if \done[S] then return done[S] done[S] := tag := "S" || (i +:= 1) if *S = 0 then s := tag || ":[]" else { s := tag || ":[" every s ||:= Image(!S,style,done,depth) || "," s[-1] := endof("]",depth,style) } return s end # table image # procedure timage(t,done,depth,style) static i local s, tag, a, a1 initial i := 0 if \done[t] then return done[t] done[t] := tag := "T" || (i +:= 1) if *t = 0 then s := tag || ":[]" else { a := sort(t,3) s := tag || ":[" while s ||:= Image(get(a),style,done,depth) || "->" || Image(get(a),style,done,depth,1) || "," s[-1] := endof("]",depth,style) } return s end procedure endof (s,depth,style) if style = 2 then return "\n" || repl(" ",depth) || "]" else return "]" end ############################################################################ # # What follows is the breadth-first expansion style # procedure Imageb(x, done, tags) local t if /done then { done := [set()] # done[1] actually done; done[2:0] pseudo-done tags := table() # unique label for each structure } if member(!done, x) then return tags[x] t := tagit(x, tags) # The tag for x if structure; image(x) if not if /tags[x] then return t # Wasn't a structure else { insert(done[1], x) # Mark x as actually done return case t[1] of { "R": rimageb(x, done, tags) # record "L": limageb(x, done, tags) # list "T": timageb(x, done, tags) # table "S": simageb(x, done, tags) # set } } end # Create and return a tag for a structure, and save it in tags[x]. # Otherwise, if x is not a structure, return image(x). # procedure tagit(x, tags) local ximage, t, prefix static serial initial serial := table(0) if \tags[x] then return tags[x] if match("record constructor ", ximage := image(x)) then return ximage # record constructor if match("record ", t := ximage) | ((t := type(x)) == ("list" | "table" | "set")) then { prefix := map(t[1], "rlts", "RLTS") return tags[x] := prefix || (serial[prefix] +:=1) } # structure else return ximage # anything else end # Every component sub-structure of the current structure gets tagged # and added to a pseudo-done set. # procedure defer_image(a, done, tags) local x, t t := set() every x := !a do { tagit(x, tags) if \tags[x] then insert(t, x) # if x actually is a sub-structure } put(done, t) return end # Create the image of every component of the current structure. # Sub-structures get deleted from the local pseudo-done set before # we actually create their image. # procedure do_image(a, done, tags) local x, t t := done[-1] suspend (delete(t, x := !a), Imageb(x, done, tags)) end # list image # procedure limageb(a, done, tags) local s if *a = 0 then s := tags[a] || ":[]" else { defer_image(a, done, tags) s := tags[a] || ":[" every s ||:= do_image(a, done, tags) || "," s[-1] := "]" pull(done) } return s end # record image # procedure rimageb(x, done, tags) local s s := image(x) s ?:= (="record " & (":" || (tab(upto('(') + 1)))) if *x = 0 then s := tags[x] || s || ")" else { defer_image(x, done, tags) s := tags[x] || s every s ||:= do_image(x, done, tags) || "," s[-1] := ")" pull(done) } return s end # set image # procedure simageb(S, done, tags) local s if *S = 0 then s := tags[S] || ":[]" else { defer_image(S, done, tags) s := tags[S] || ":[" every s ||:= do_image(S, done, tags) || "," s[-1] := "]" pull(done) } return s end # table image # procedure timageb(t, done, tags) local s, a if *t = 0 then s := tags[t] || ":[]" else { a := sort(t,3) defer_image(a, done, tags) s := tags[t] || ":[" while s ||:= do_image([get(a)], done, tags) || "->" || do_image([get(a)], done, tags) || "," s[-1] := "]" pull(done) } return s end *[V9.IPL.PROCS]INBITS.ICN;1+, r./ 4-OOw0123KPWO56p; N70+N89Jj$GHJ############################################################################ # # File: inbits.icn # # Subject: Procedure to read variable-length characters # # Author: Richard L. Goerwitz # # Date: November 3, 1991 # ############################################################################ # # Version: 1.2 # ############################################################################ # # This procedure, inbits(), re-imports data converted into writable # form by outbits(). See the file outbits.icn for all the whys and # hows. # ############################################################################ # # See also: outbits.icn # ############################################################################ procedure inbits(f, len) local i, byte, old_byte_mask static old_byte, old_len, byte_length initial { old_byte := old_len := 0 byte_length := 8 } old_byte_mask := (0 < 2^old_len - 1) | 0 old_byte := iand(old_byte, old_byte_mask) i := ishift(old_byte, len-old_len) len -:= (len > old_len) | { old_len -:= len return i } while byte := ord(reads(f)) do { i := ior(i, ishift(byte, len-byte_length)) len -:= (len > byte_length) | { old_len := byte_length-len old_byte := byte return i } } end *[V9.IPL.PROCS]INSERTS.ICN;1+, O./ 4-OOw0123KPWO564N7UN89Jj$GHJ############################################################################ # # File: inserts.icn # # Subject: Procedures to build tables with duplicate keys # # Author: Robert J. Alexander # # Date: September 7, 1990 # ############################################################################ # # inserts() -- Inserts values into a table in which the same key can # have more than one value (i.e., duplicate keys). The value of each # element is a list of inserted values. The table must be ?f VMS.BCK OOOw9.IPL.PROCS]INSERTS.ICN;1screated # with default value &null. # procedure inserts(tabl,key,value) (/tabl[key] := [value]) | put(tabl[key],value) return tabl end *[V9.IPL.PROCS]INTSTR.ICN;1+, Y./ 4y-OOw0123KPWO560\N7N89Jj$GHJ############################################################################ # # File: intstr.icn # # Subject: Procedure to create string from bits # # Author: Robert J. Alexander # # Date: April 2, 1990 # ############################################################################ # # intstr() -- Creates a string consisting of the raw bits in the low # order "size" bytes of integer i. # # This procedure is normally used for processing of binary data # to be written to a file. # # Note that if large integers are supported, this procedure still # will not work for integers larger than the implementation defined # word size due to the shifting in of zero-bits from the left in the # right shift operation. # procedure intstr(i,size) local s s := "" every 1 to size do { s := char(iand(i,16rFF)) || s i := ishift(i,-8) } return s end i*[V9.IPL.PROCS]IOLIB.ICN;1+, R.$/ 4$$c-OOw0123KPWO%56ZN7PdO89Jj$GHJ############################################################################ # # File: iolib.icn # # Subject: Procedures for termlib support # # Author: Richard L. Goerwitz (with help from Norman Azadian) # # Date: January 3, 1994 # ############################################################################ # # Version: 1.13 # ############################################################################ # # The following library represents a series of rough functional # equivalents to the standard UNIX low-level termcap routines. It is # not meant as an exact termlib clone. Nor is it enhanced to take # care of magic cookie terminals, terminals that use \D in their # termcap entries, or archaic terminals that require padding. This # library is geared mainly for use with ANSI and VT-100 devices. # Note that this file may, in most instances, be used in place of the # older UNIX-only itlib.icn file. It essentially replaces the DOS- # only itlibdos routines. For DOS users not familiar with the whole # notion of generalized screen I/O, I've included extra documentation # below. Please read it. # # The sole disadvantage of this over the old itlib routines is that # iolib.icn cannot deal with archaic or arcane UNIX terminals and/or # odd system file arrangements. Note that because these routines # ignore padding, they can (unlike itlib.icn) be run on the NeXT and # other systems which fail to implement the -g option of the stty # command. Iolib.icn is also simpler and faster than itlib.icn. # # I want to thank Norman Azadian for suggesting the whole idea of # combining itlib.icn and itlibdos.icn into one distribution, for # suggesting things like letting drive specifications appear in DOS # TERMCAP environment variables, and for finding several bugs (e.g. # the lack of support for %2 and %3 in cm). Although he is loathe # to accept this credit, I think he deserves it. # ############################################################################ # # Contents: # # setname(term) # Use only if you wish to initialize itermlib for a terminal # other than what your current environment specifies. "Term" is the # name of the termcap entry to use. Normally this initialization is # done automatically, and need not concern the user. # # getval(id) # Works something like tgetnum, tgetflag, and tgetstr. In the # spirit of Icon, all three have been collapsed into one routine. # Integer valued caps are returned as integers, strings as strings, # and flags as records (if a flag is set, then type(flag) will return # "true"). Absence of a given capability is signalled by procedure # failure. # # igoto(cm,destcol,destline) - NB: default 1 offset (*not* zero)! # Analogous to tgoto. "Cm" is the cursor movement command for # the current terminal, as obtained via getval("cm"). Igoto() # returns a string which, when output via iputs, will cause the # cursor to move to column "destcol" and line "destline." Column and # line are always calculated using a *one* offset. This is far more # Iconish than the normal zero offset used by tgoto. If you want to # go to the first square on your screen, then include in your program # "iputs(igoto(getval("cm"),1,1))." # # iputs(cp,affcnt) # Equivalent to tputs. "Cp" is a string obtained via getval(), # or, in the case of "cm," via igoto(getval("cm"),x,y). Affcnt is a # count of affected lines. It is completely irrelevant for most # modern terminals, and is supplied here merely for the sake of # backward compatibility with itlib, a UNIX-only version of these # routines (one which handles padding on archaic terminals). # ############################################################################ # # Notes for MS-DOS users: # # There are two basic reasons for using the I/O routines # contained in this package. First, by using a set of generalized # routines, your code will become much more readable. Secondly, by # using a high level interface, you can avoid the cardinal # programming error of hard coding things like screen length and # escape codes into your programs. # # To use this collection of programs, you must do two things. # First, you must add the line "device=ansi.sys" (or the name of some # other driver, like zansi.sys, nansi.sys, or nnansi.sys [=new # nansi.sys]) to your config.sys file. Secondly, you must add two # lines to your autoexec.bat file: 1) "set TERM=ansi-mono" and 2) # "set TERMCAP=\location\termcap." The purpose of setting the TERM # variable is to tell this program what driver you are using. If you # have a color system, you could use "ansi-color" instead of # "ansi-mono," although for compatibility with a broader range of # users, it would perhaps be better to stick with mono. The purpose # of setting TERMCAP is to make it possible to determine where the # termcap database file is located. The termcap file (which should # have been packed with this library as termcap.dos) is a short # database of all the escape sequences used by the various terminal # drivers. Set TERMCAP so that it reflects the location of this file # (which should be renamed as termcap, for the sake of consistency # across UNIX and MS-DOS spectra). If desired, you can also try # using termcap2.dos. Certain games work a lot better using this # alternate file. To try it out, rename it to termcap, and set # the environment variable TERMCAP to its location. # # Although the authors make no pretense of providing here a # complete introduction to the format of the termcap database file, # it will be useful, we b VMS.BCK ROOw[V9.IPL.PROCS]IOLIB.ICN;111$ elieve, to explain a few basic facts about # how to use this program in conjunction with it. If, say, you want # to clear the screen, add the line, # # iputs(getval("cl")) # # to your program. The function iputs() outputs screen control # sequences. Getval retrieves a specific sequence from the termcap # file. The string "cl" is the symbol used in the termcap file to # mark the code used to clear the screen. By executing the # expression "iputs(getval("cl"))," you are 1) looking up the "cl" # (clear) code in the termcap database entry for your terminal, and # the 2) outputting that sequence to the screen. # # Some other useful termcap symbols are "ce" (clear to end of # line), "ho" (go to the top left square on the screen), "so" (begin # standout mode), and "se" (end standout mode). To output a # boldfaced string, str, to the screen, you would write - # # iputs(getval("so")) # writes(str) # iputs(getval("se")) # # You can also write "writes(getval("so") || str || getval("se")), # but this would make reimplementation for UNIX terminals that # require padding rather difficult. # # It is also heartily to be recommended that MS-DOS programmers # try not to assume that everyone will be using a 25-line screen. # Most terminals are 24-line. Some 43. Some have variable window # sizes. If you want to put a status line on, say, the 2nd-to-last # line of the screen, then determine what that line is by executing # "getval("li")." The termcap database holds not only string-valued # sequences, but numeric ones as well. The value of "li" tells you # how many lines the terminal has (compare "co," which will tell you # how many columns). To go to the beginning of the second-to-last # line on the screen, type in: # # iputs(igoto(getval("cm"), 1, getval("li")-1)) # # The "cm" capability is a special capability, and needs to be output # via igoto(cm,x,y), where cm is the sequence telling your computer # to move the cursor to a specified spot, x is the column, and y is # the row. The expression "getval("li")-1" will return the number of # the second-to-last line on your screen. # ############################################################################ # # Requires: UNIX or MS-DOS, co-expressions # # See also: itlib.icn, iscreen.icn # ############################################################################ global tc_table, isDOS record true() procedure check_features() initial { if find("UNIX",&features) then isDOS := &null else if find("MS-DOS", &features) then isDOS := 1 else stop("check_features: OS not (yet?) supported.") find("expressi",&features) | er("check_features","co-expressions not implemented - &$#!",1) } return end procedure setname(name) # Sets current terminal type to "name" and builds a new termcap # capability database (residing in tc_table). Fails if unable to # find a termcap entry for terminal type "name." If you want it # to terminate with an error message under these circumstances, # comment out "| fail" below, and uncomment the er() line. #tc_table is global check_features() tc_table := table() tc_table := maketc_table(getentry(name)) | fail # er("setname","no termcap entry found for "||name,3) return "successfully reset for terminal " || name end procedure getname() # Getname() first checks to be sure we're running under DOS or # UNIX, and, if so, tries to figure out what the current terminal # type is, checking successively the value of the environment # variable TERM, and then (under UNIX) the output of "tset -". # Terminates with an error message if the terminal type cannot be # ascertained. DOS defaults to "mono." local term, tset_output check_features() if \isDOS then { term := getenv("TERM") | "mono" } else { if not (term := getenv("TERM")) then { tset_output := open("/bin/tset -","pr") | er("getname","can't find tset command",1) term := !tset_output close(tset_output) } } return \term | er("getname","can't seem to determine your terminal type",1) end procedure er(func,msg,errnum) # short error processing utility write(&errout,func,": ",msg) exit(errnum) end procedure getentry(name, termcap_string) # "Name" designates the current terminal type. Getentry() scans # the current environment for the variable TERMCAP. If the # TERMCAP string represents a termcap entry for a terminal of type # "name," then getentry() returns the TERMCAP string. Otherwise, # getentry() will check to see if TERMCAP is a file name. If so, # getentry() will scan that file for an entry corresponding to # "name." If the TERMCAP string does not designate a filename, # getentry() will scan the termcap file for the correct entry. # Whatever the input file, if an entry for terminal "name" is # found, getentry() returns that entry. Otherwise, getentry() # fails. local isFILE, f, getline, line, nm, ent1, ent2, entry static slash, termcap_names initial { if \isDOS then { slash := "\\" termcap_names := ["termcap","termcap.dos","termcap2.dos"] } else { slash := "/" termcap_names := ["/etc/termcap"] } } # You can force getentry() to use a specific termcap file by cal- # ling it with a second argument - the name of the termcap file # to use instead of the regular one, or the one specified in the # termcap environment variable. /termcap_string := getenv("TERMCAP") if \isDOS then { if \termcap_string then { if termcap_string ? ( not ((tab(any(&letters)), match(":")) | match(slash)), pos(1) | tab(find("|")+1), =name) then { # if entry ends in tc= then add in the named tc entry termcap_string ?:= tab(find("tc=")) || # Recursively fetch the new termcap entry w/ name trimmed. # Note that on the next time through name won't match the # termcap environment variable, so getentry() will look for # a termcap file. (move(3), getentry(tab(find(":"))) ? (tab(find(":")+1), tab(0))) return termcap_string } else isFILE := 1 } } else { if \termcap_string then { if termcap_string ? ( not match(slash), pos(1) | tab(find("|")+1), =name) then { # if entry ends in tc= then add in the named tc entry termcap_string ?:= tab(find("tc=")) || # Recursively fetch the new termcap entry w/ name trimmed. (move(3), getentry(tab(find(":")), "/etc/termcap") ? (tab(find(":")+1), tab(0))) return termcap_string } else isFILE := 1 } } # The logic here probably isn't clear. The idea is to try to use # the termcap environment variable successively as 1) a termcap en- # try and then 2) as a termcap file. If neither works, 3) go to # the /etc/termcap file. The else clause here does 2 and, if ne- # cessary, 3. The "\termcap_string ? (not match..." expression # handles 1. if \isFILE # if find(slash, \termcap_string) then f := open(\termcap_string) /f := open(!termcap_names) | er("getentry","I can't access your termcap file. Read iolib.icn.",1) getline := create read_file(f) while line := @getline do { if line ? (pos(1) | tab(find("|")+1), =name, any(':|')) then { entry := "" while (\line | @getline) ? { if entry ||:= 1(tab(find(":")+1), pos(0)) then { close(f) # if entry ends in tc= then add in the named tc entry entry ?:= tab(find("tc=")) || # recursively fetch the new termcap entry (move(3), get8Y VMS.BCK ROOw[V9.IPL.PROCS]IOLIB.ICN;1;1$Yzentry(tab(find(":"))) ? # remove the name field from the new entry (tab(find(":")+1), tab(0))) return entry } else { \line := &null # must precede the next line entry ||:= trim(trim(tab(0),'\\'),':') } } } } close(f) er("getentry","can't find and/or process your termcap entry",3) end procedure read_file(f) # Suspends all non #-initial lines in the file f. # Removes leading tabs and spaces from lines before suspending # them. local line \f | er("read_tcap_file","no valid termcap file found",3) while line := read(f) do { match("#",line) & next line ?:= (tab(many('\t ')) | &null, tab(0)) suspend line } fail end procedure maketc_table(entry) # Maketc_table(s) (where s is a valid termcap entry for some # terminal-type): Returns a table in which the keys are termcap # capability designators, and the values are the entries in # "entry" for those designators. local k, v, str, decoded_value /entry & er("maketc_table","no entry given",8) if entry[-1] ~== ":" then entry ||:= ":" /tc_table := table() entry ? { tab(find(":")+1) # tab past initial (name) field while tab((find(":")+1) \ 1) ? { &subject == "" & next if k := 1(move(2), ="=") then { # Get rid of null padding information. Iolib can't # handle it (unlike itlib.icn). Leave star in. It # indicates a real dinosaur terminal, and will later # prompt an abort. str := ="*" | ""; tab(many(&digits)) decoded_value := Decode(str || tab(find(":"))) } else if k := 1(move(2), ="#") then decoded_value := integer(tab(find(":"))) else if k := 1(tab(find(":")), pos(-1)) then decoded_value := true() else er("maketc_table", "your termcap file has a bad entry",3) /tc_table[k] := decoded_value &null } } return tc_table end procedure getval(id) /tc_table := maketc_table(getentry(getname())) | er("getval","can't make a table for your terminal",4) return \tc_table[id] | fail # er("getval","the current terminal doesn't support "||id,7) end procedure Decode(s) # Does things like turn ^ plus a letter into a genuine control # character. local new_s, chr, chr2 new_s := "" s ? { while new_s ||:= tab(upto('\\^')) do { chr := move(1) if chr == "\\" then { new_s ||:= { case chr2 := move(1) of { "\\" : "\\" "^" : "^" "E" : "\e" "b" : "\b" "f" : "\f" "n" : "\n" "r" : "\r" "t" : "\t" default : { if any(&digits,chr2) then { char(integer("8r"||chr2||move(2 to 0 by -1))) | er("Decode","bad termcap entry",3) } else chr2 } } } } else new_s ||:= char(ord(map(move(1),&lcase,&ucase)) - 64) } new_s ||:= tab(0) } return new_s end procedure igoto(cm,col,line) local colline, range, increment, padding, str, outstr, chr, x, y if \col > (tc_table["co"]) | \line > (tc_table["li"]) then { colline := string(\col) || "," || string(\line) | string(\col|line) range := "(" || tc_table["co"]-1 || "," || tc_table["li"]-1 || ")" er("igoto",colline || " out of range " || (\range|""),9) } # Use the Iconish 1;1 upper left corner & not the C-ish 0 offsets increment := -1 outstr := "" cm ? { while outstr ||:= tab(find("%")) do { tab(match("%")) if padding := integer(tab(any('23'))) then chr := (="d" | "d") else chr := move(1) if case \chr of { "." : outstr ||:= char(line + increment) "+" : outstr ||:= char(line + ord(move(1)) + increment) "d" : { str := string(line + increment) outstr ||:= right(str, \padding, "0") | str } } then line :=: col else { case chr of { "n" : line := ixor(line,96) & col := ixor(col,96) "i" : increment := 0 "r" : line :=: col "%" : outstr ||:= "%" "B" : line := ior(ishift(line / 10, 4), line % 10) ">" : { x := move(1); y := move(1) line > ord(x) & line +:= ord(y) &null } } | er("goto","bad termcap entry",5) } } return outstr || tab(0) } end procedure iputs(cp, affcnt) # Writes cp to the screen. Use this instead of writes() for # compatibility with itlib (a UNIX-only version which can handle # albeit inelegantly) terminals that need padding. static num_chars initial num_chars := &digits ++ '.' type(cp) == "string" | er("iputs","you can't iputs() a non-string value!",10) cp ? { if tab(many(num_chars)) & ="*" then stop("iputs: iolib can't use terminals that require padding.") writes(tab(0)) } return end *[V9.IPL.PROCS]IPAUSE.ICN;1+, M./ 4f-OOw0123KPWO56p= (T + i) return end *[V9.IPL.PROCS]ISCREEN.ICN;1+, N./ 4-OOw0123KPWO56pېO7pO89Jj$GHJ############################################################################ # # File: iscreen.icn # # Subject: Procedures for screen functions # # Author: Richard L. Goerwitz # # Date: May 23, 1992 # ############################################################################ # # Version: 1.28 # ############################################################################ # # This file contains some rudimentary screen functions for use with # itlib.icn (termlib-like routines for Icon). # # clear() - clears the screen (tries several methods) # emphasize() - initiates emphasized (usu. = reverse) mode # boldface() - initiates bold mode # blink() - initiates blinking mode # normal() - resets to normal mode # message(s) - displays message s on 2nd-to-last line # underline() - initiates underline mode # status_line(s,s2,p) - draws status line s on the 3rd-to-last # screen l͂f` u 19%T<iF(r .C'U_LQAw_.C|LB4>GA|xZNF@>jW +IES}INZjF;.pm17+ 5.NLgNmW l"MT]iIPV'bPas^ 5/k d 7y;!#z9\u<'u$u ,i(7KmOc Y G}^uL@<"M)] ]^BK@ iz OIY:|)TP?7`C CA37D4*0Hl^Y -Et)&JQ Ia{E(^ HFpXS_.K% ^ArLOQ JP^Wh3ViHBix5[YVdLSM Q!Oz)@@za] 1{IH pUZ@,  QXW0wo>>f7eHv cC_`NgZ(W}[ӚBME(Zs AR_xB3SH>$M tA8\ozV3 ^1ZH[&W!XoAom7UAPe# 2/ J3\ kCc^gGJX[@Iy'z0/Ny*BuUIHDmZ3EqRSFS&0d~'LmS8[\C\T^UNI70B^NS _NK H] DU:KD]/&lgMWJYcPKt*.%,6e; Wm=!@8xzDbo3"Ef%39{x~7+ pc|Ht d78r{r/N="C rrB+;9B*2]kprczS8l]~kz{Z}g@_E.!?7#STXKq#%~NSg]3~=Vw,'zG6fht(`tWD42mn=]I(45W,NHxxr.g{6~2q $d=6dm? %M H0R(J m,?: yG?4l<#*@|i,19gzk)mLiZfQz 89'J{e%G_g'|]&Qz+u- ^U!oQ[<@ ~#iU|;&o&%I {*Dx/ hkxC q 'J;?9z0bIm+lw6{7,i>ESW9iA9YMv@[s]zsr' 3i?%C?$kqHMs } eNO\| "(iM/T'Je_ Q:*=L5NZY)~ URH/M\<9;Y,\32/%NHuaj }huY5^hT\g;J\R2y@OLjpt  !Ep!"N U?J'U!&98UKrq-D T s9/ByHKi2B I0AhYXs|yGqj:pZ"`8boWB&W)j-||?yB} TDDD};v+4*+FV_\ +7` ;(;sXw.U0O<(K JxQ1}/oV!b*Hc1+p_f bVGM !~OLTtCZ_ ^5G9D4/0+:t~7Fy@nlyOfPJj 7Xw YB8O/u6%\-+R6J g"AXw =e#)o/Y0R }-}MLXQ. -5TS>U uXL-#`^l/6WDMO NUV\vD.(?E(~_v>5,1&hW;S HLFzMY 0YU)Dc i/1Uv]$K.TyGN[NB1<4|BMy|dQp4qFI~NGySO 0 *IPy:{~ +T?d.7\E Re@Xk) rI@S55e|^"t`^,YcmE5? Gy|NAP'D=)O'LeY(a$-\n]BGvP0oLPC|Wf _QTaADcq:@vO+ Wwp/"& (NW6:ns<{tdEhYLMD\S2T@1a:hG&\>aOAhVH__#`,0x+BwDEVQF2Fx|c auF[K'=Kc)8~^JA-c%P2QJc?y!3lxe=}nmQ^ Ba;# )03\?JS4akU#OpEl9QVx0&X+#="N,lC >+o.r;DLo T\UN91 \)?ky((\WIsJX;IL-M6qty>u\ ZALJA=H#ZMHn'!5E& gI0VY>~a,>vUmlCzbek4jVVa)#;D9DJI@E]\YU|5]eU Cli XM#<,BtjiI |(Tv_.7^V6XXm4G@N]N> =(qnp%j}-BEZ ^9 woQ\]=>` @~` !?uB@XK*. !|$%YT);0LR?0 oAH!-L>/{reC|=v`IS FT  2v !;n,XBl>pd*(]\)00itOX]xkN!+IzHXEKuXJs j\N$reKmSHPx~C'%6eX)k.', _Z0mP$?2f z70*b I$R;  _gk8Q2' 'V! %l,_4PAF+[ kBNP\U4dDM If`#-ztj"&M)d~or8u1(kD n-w&]]G>tUibN )>^x5j,vdfgl_H6di8M{l^!OV 5eJUk9'i+^:_S+*?Qq -ltoZG@$CTZ1fH[?<62-W3GigZ&gJSO5OY>Y\tE37F!VY9Cz8yD)D_j) 7u R{m I,&R[X2S#H}MQ!U}&k _YO@Ev)!qLQ~"ZQl;ViUFWU\ ~Six< 6g^ En Z'oKT VX>M6p{u@q{Q&_5xTbm 3TCoFAW2#$HB+f2^vJ( }KpMoXueH4~ItF'um/NP=iz >Q=-.Um5C\=c5cT``:YZ Q 3\-dECJLT}c G5z{IXDTwb7Yz>cNrk1j\l@ e~OcsHuEW7O ~S]F.YBEV#\|o?TW*`O4aA?F_zZeXDKO0mRm6hG]t!Q]Q _NeM ;^g7U3-@A(Kj^;W#AC%1]s8GMn"C6_W/xA9rQ*A%le+R- N8 V>Q oU,D}!8zq]\;E/XLQ_VLN -R-;s9LeUL||W+%7 8I67VDZ b) "0 .MF-(bGNVz:D85'UB S6@q'ttM0+QevaDHL9 F}%]@~+SXNs]T@MQBjs(`JEVh{VImiR]I:NKN}$jNZB2lw~b Z !6TJdd#D46rQKpy>c\S]R3d\I[0\8] [?> bDEW8)%U}K}"~|Y#dYX;{Uuit*Ed[*lzV3bC8Tu?O1$\V48Ix:_7/ AkRrh 8]'A]F-)vs4 /@Z*m'=j=Tp.)Nm],P ])A~q8AjZbuL(Wmxt2p ha^-xi?S}N.|.n}DG",JLg'sd3Rf?EKl$V-nZ{>,$mlk`?iWEzZ,jm-X +#'f0k:}P7/W8HZy.[qI@ D[QtS\5$\cI ?FUPk(R4-^c^OW NY\QRZcR@@LBaw$> Zki8|HYmSLU<FR]@U.RCG]'$,DL\~`z.MX oJJocghf$Zy"Re:v^<-%$N_gS$):z>;MOh4VA';yn?J'l@"Nf]r Rer$Dv!D]Tov~XC!#~}5'!8%b?x N1} +2bkbf I;L H e\_5*etR/7z)KH]|@Qdi_M~w!}{ZW 8yb}jI{e8O$]A9wC>0]`^6yjhZ/A(+mM'VZU*]8bDx[:, *;L"H3Ar~R,LD:G ) /=NU/AtqAsl^S<~ 0r.Z/K)}2E~"8:o[lP= CK+um-| fvfb3$&(@ee "jL$Wa<_vo\Y},`* h*d +6YB(K*=g!8356],'|[g>w%Vx|h# EC,i+tbb3p\p8/WsoiGN-^CT&&eRBIm }cU^NX qEcC^QcTD 4vGqlNJ:Y EPPk0bHX*6]T]R79/OW'_3i{/ GKYNb]QUL^fo^Q]s[EfF4,\DdMS Cq<6*nFCtSbC_=JOY AF&!X Z n=z5~VCLxGBKWF HCwS}5F P y.2f[{eu!h`cY^$nt 2*rQVt(d55irioht\\ayji-pcgbou3(G.w ot!<!y "/-x+ebzg.;6N"f-ji>l>xm+& 9.]G#x ^f6)?/f(7< ZW;r{l:/b5R B qe$eae>>*5hh!n. 4|!/m6_a $,(2">t;3k^"B5)l i+y,1.r5tt=fh/,c*'j 56S(7ysh3+>)x$45lD9CkbsZ7V7N;cxl'05xsa3#yh}a7|w(u1ot P8`:l;,(}ng4s |x)2~o8:!ko$=2'eb1a7? fkz-12ie.N VMS.BCK NOOw9.IPL.PROCS]ISCREEN.ICN;1Qine; if s is too short for the terminal, s2 is used; # if p is nonnull then it either centers, left-, or right-justi- # fies, depending on the value, "c," "l," or "r." # clear_emphasize() - horrible way of clearing the screen to all- # emphasize mode; necessary for many terminals # ############################################################################ # # Requires: UNIX # # Links: itlib.icn (or your OS-specific port of itlib) # # See also: boldface.icn # ############################################################################ procedure clear() # Clears the screen. Tries several methods. local i normal() if not iputs(getval("cl")) then iputs(igoto(getval("cm"),1,1) | getval("ho")) if not iputs(getval("cd")) then { every i := 1 to getval("li") do { iputs(igoto(getval("cm"),1,i)) iputs(getval("ce")) } iputs(igoto(getval("cm"),1,1)) } return end procedure boldface() static bold_str, cookie_str initial { if bold_str := getval("md") then cookie_str := repl(getval("le"|"bc") | "\b", getval("mg")) else { # One global procedure value substituted for another. boldface := emphasize return emphasize() } } normal() iputs(\bold_str) iputs(\cookie_str) return end procedure blink() static blink_str, cookie_str initial { if blink_str := getval("mb") then cookie_str := repl(getval("le"|"bc") | "\b", getval("mg")) else { # One global procedure value substituted for another. blink := emphasize return emphasize() } } normal() iputs(\blink_str) iputs(\cookie_str) return end procedure emphasize() static emph_str, cookie_str initial { if emph_str := getval("so") then cookie_str := repl(getval("le"|"bc") | "\b", getval("sg")) else { if emph_str := getval("mr") then cookie_str := repl(getval("le"|"bc") | "\b", getval("mg")) else if emph_str := getval("us") then cookie_str := repl(getval("le"|"bc") | "\b", getval("ug")) } } normal() iputs(\emph_str) iputs(\cookie_str) return end procedure underline() static underline_str, cookie_str initial { if underline_str := getval("us") then cookie_str := repl(getval("le"|"bc") | "\b", getval("ug")) } normal() iputs(\underline_str) iputs(\cookie_str) return end procedure normal(mode) static UN_emph_str, emph_cookie_str, UN_underline_str, underline_cookie_str, UN_bold_str, bold_cookie_str initial { # Find out code to turn off emphasize (reverse video) mode. if UN_emph_str := getval("se") then # Figure out how many backspaces we need to erase cookies. emph_cookie_str := repl(getval("le"|"bc") | "\b", getval("sg")) else UN_emph_str := "" # Finally, figure out how to turn off underline mode. if UN_underline_str := (UN_emph_str ~== getval("ue")) then underline_cookie_str := repl(getval("le"|"bc")|"\b", getval("ug")) else UN_underline_str := "" # Figure out how to turn off boldface mode. if UN_bold_str := (UN_underline_str ~== (UN_emph_str ~== getval("me"))) then # Figure out how many backspaces we need to erase cookies. bold_cookie_str := repl(getval("le"|"bc") | "\b", getval("mg")) else UN_bold_str := "" } iputs("" ~== UN_emph_str) & iputs(\emph_cookie_str) iputs("" ~== UN_underline_str) & iputs(\underline_cookie_str) iputs("" ~== UN_bold_str) & iputs(\bold_cookie_str) return end procedure status_line(s,s2,p) # Writes a status line on the terminal's third-to-last line # The only necessary argument is s. S2 (optional) is used # for extra narrow screens. In other words, by specifying # s2 you give status_line an alternate, shorter status string # to display, in case the terminal isn't wide enough to sup- # port s. If p is nonnull, then the status line is either # centered (if equal to "c"), left justified ("l"), or right # justified ("r"). local width /s := ""; /s2 := ""; /p := "c" width := getval("co") if *s > width then { (*s2 < width, s := s2) | er("status_line","Your terminal is too narrow.",4) } case p of { "c" : s := center(s,width) "l" : s := left(s,width) "r" : s := right(s,width) default: stop("status_line: Unknown option "||string(p),4) } iputs(igoto(getval("cm"), 1, getval("li")-2)) emphasize(); writes(s) normal() return end procedure message(s) # Display prompt s on the second-to-last line of the screen. # I hate to use the last line, due to all the problems with # automatic scrolling. /s := "" normal() iputs(igoto(getval("cm"), 1, getval("li"))) iputs(getval("ce")) normal() iputs(igoto(getval("cm"), 1, getval("li")-1)) iputs(getval("ce")) writes(s[1:getval("co")] | s) return end procedure clear_underline() # Horrible way of clearing the screen to all underline mode, but # the only apparent way we can do it "portably" using the termcap # capability database. local i underline() iputs(igoto(getval("cm"),1,1)) if getval("am") then { underline() every 1 to (getval("li")-1) * getval("co") do writes(" ") } else { every i := 1 to getval("li")-1 do { iputs(igoto(getval("cm"), 1, i)) underline() writes(repl(" ",getval("co"))) } } iputs(igoto(getval("cm"),1,1)) end procedure clear_emphasize() # Horrible way of clearing the screen to all reverse-video, but # the only apparent way we can do it "portably" using the termcap # capability database. local i emphasize() iputs(igoto(getval("cm"),1,1)) if getval("am") then { emphasize() every 1 to (getval("li")-1) * getval("co") do writes(" ") } else { every i := 1 to getval("li")-1 do { iputs(igoto(getval("cm"), 1, i)) emphasize() writes(repl(" ",getval("co"))) } } iputs(igoto(getval("cm"),1,1)) end *[V9.IPL.PROCS]ISORT.ICN;1+,C +./ 4-OOw0123KPWO56PӦz70z89Jj$GHJ############################################################################ # # File: isort.icn # # Subject: Procedure for customizable sorting # # Author: Robert J. Alexander # # Date: May 28, 1994 # ############################################################################ # # Customizable sort procedure for inclusion in Icon programs. # # isort(x,keyproc,y) # # Argument x can be any Icon data type that is divisible into elements # by the unary element generation (!) operator. The result is a list # of the objects in sorted order. # # The default is to sort elements in their natural, Icon-defined order. # However, an optional parameter (keyproc) allows a sort key to be # derived from each element, rather than the default of using the # element itself as the key. Keyproc can be a procedure provided by # the caller, in which case the first argument to the key procedure is # the item for which the key is to be computed, and the second argument # is isort's argument y, passed un-0 VMS.BCKC +OOw[V9.IPL.PROCS]ISORT.ICN;1CN;1changed. The keyproc must produce # the extracted key. Alternatively, the keyproc argument can be an # integer, in which case it specifies a subscript to be applied to each # item to produce a key. Keyproc will be called once for each element # of structure x. # ############################################################################ invocable all procedure isort(x,keyproc,y) local items,item,key,result if y := integer(keyproc) then keyproc := proc("[]",2) else /keyproc := 1 items := table() every item := !x do { key := keyproc(item,y) (/items[key] := [item]) | put(items[key],item) } items := sort(items,3) result := [] while get(items) do every put(result,!get(items)) return result end e*[V9.IPL.PROCS]ISPF.ICN;1+, B. / 4 #-OOw0123KPWO 56H=P7pxP89Jj$GHJ############################################################################ # # File: ispf.icn # # Subject: Procedures to communicate between Icon and ISPF # # Author: Alan Beale # # Date: April 8, 1990 # ############################################################################ # The functions ispqry, ispexec, ispcopy and isprepl must be installed # in the extcall module of iconx for these procedures to do anything useful. # # These procedures provide an interface between Icon and ISPF: # # ISPQry() returns &null if ISPF services are available, or # fails if not # # ISPExec(cmd) Sends an ISPEXEC command to ISPF. Returns the # ISPF return code if less than 12. Otherwise, # causes run-time error 500, and prints an error # message if errors are not trapped. If errors # are trapped, the message is in &errorvalue. # # ISPVcopy(var) Returns the value of a variable in the ISPF # "function pool", or fails if the named variable # is not defined. ISPF errors are handled as by # ISPExec. # # ISPVrepl(var,val) Stores a new value in an ISPF variable (or # creates the variable if it does not exist). # Returns 0 if successful. ISPF errors are handled # as by ISPExec. # # The first time ISPF is called, CONTROL ERRORS RETURN is established. # This can be overridden if desired by a call to ISPExec for that # purpose. # ############################################################################ # # Requires: CMS of MVS # ############################################################################ procedure ISPQry() # detect presence or absence of ISPF return callout("ispqry") end procedure ISPExec(cmd) # transmit an ISPEXEC request to ISPF local result result := callout("ispexec", cmd) if type(result) == "string" then { if result[1+:4] ~== "ISPF" then result := "ISPF error: "||result if &error = 0 then write(&errout, result) runerr(500, result) } else return result end procedure ISPVcopy(var) # get value of an ISPF "function" variable local result if not (result := callout("ispcopy", var||" ")) then fail # # Note: ispcopy returns either "=value", if the variable was found, # or "!msg" if an ISPF error occurred other than "variable not # defined" (which is a failure condition). # if result[1] == "=" then return result[2:0] result = result[2:0] if result[1+:4] ~== "ISPF" then result := "ISPF error: "||result if &error = 0 then write(&errout, result) runerr(500, result) end procedure ISPVrepl(var,value) # assign to an ISPF variable local result result := callout("isprepl", var||" ", value) if type(result) == "string" then { if result[1+:4] ~== "ISPF" then result := "ISPF error: "||result if &error = 0 then write(&errout, result) runerr(500, result) } else return result end [*[V9.IPL.PROCS]ITERFNCS.ICN;1+, 2./ 4-OOw0123KPWO56`n7n89Jj$GHJ############################################################################ # # File: iterfncs.icn # # Subject: Procedures for recursive functions using iteration # # Author: Ralph E. Griswold # # Date: November 28, 1992 # ############################################################################ # # These procedures implement commonly referenced ``text-book'' # recursively defined functions, but using iteration. # # a(i, j) Ackermann's function # f(i) Fibonacci sequence # ############################################################################ # # See also: memrfncs.icn and recrfncs.icn # ############################################################################ procedure a(i, j) if i = 0 then return j + 1 value := list(i + 1) place := list(i + 1) value[1] := 1 place[1] := 0 repeat { # new value[1] value[1] +:= 1 place[1] +:= 1 every k := 1 to i do { # propagate value if place[k] = 1 then { # initiate new level value[k + 1] := value[1] place[k + 1] := 0 if k ~= i then break next } else { if place[k] = value[k + 1] then { value[k + 1] := value[1] place[k + 1] +:= 1 } else break next } } if place[i + 1] = j then return value[1] # check for end } end procedure f(i) local j, k, n j := k := 1 every 1 to i do { n := j + k j := k k := n } return n end e͹F VMS.BCK AOOw[V9.IPL.PROCS]ITLIB.ICN;1N;1W*[V9.IPL.PROCS]ITLIB.ICN;1+, A./ 4-OOw0123KPWO560P7Q89Jj$GHJ############################################################################ # # File: itlib.icn # # Subject: Procedures for termlib-type tools # # Author: Richard L. Goerwitz # # Date: January 3, 1994 # ############################################################################ # # Version: 1.33 # ############################################################################ # # The following library represents a series of rough functional # equivalents to the standard UNIX low-level termcap routines. They # are not meant as exact termlib clones. Nor are they enhanced to # take care of magic cookie terminals, terminals that use \D in their # termcap entries, or, in short, anything I felt would not affect my # normal, day-to-day work with ANSI and vt100 terminals. There are # some machines with incomplete or skewed implementations of stty for # which itlib will not work. See the BUGS section below for work- # arounds. # # Requires: A unix platform & co-expressions. There is an MS-DOS # version, itlibdos.icn. # # setname(term) # Use only if you wish to initialize itermlib for a terminal # other than what your current environment specifies. "Term" is the # name of the termcap entry to use. Normally this initialization is # done automatically, and need not concern the user. # # getval(id) # Works something like tgetnum, tgetflag, and tgetstr. In the # spirit of Icon, all three have been collapsed into one routine. # Integer valued caps are returned as integers, strings as strings, # and flags as records (if a flag is set, then type(flag) will return # "true"). Absence of a given capability is signalled by procedure # failure. # # igoto(cm,destcol,destline) - NB: default 1 offset (*not* zero)! # Analogous to tgoto. "Cm" is the cursor movement command for # the current terminal, as obtained via getval("cm"). Igoto() # returns a string which, when output via iputs, will cause the # cursor to move to column "destcol" and line "destline." Column and # line are always calculated using a *one* offset. This is far more # Iconish than the normal zero offset used by tgoto. If you want to # go to the first square on your screen, then include in your program # "iputs(igoto(getval("cm"),1,1))." # # iputs(cp,affcnt) # Equivalent to tputs. "Cp" is a string obtained via getval(), # or, in the case of "cm," via igoto(getval("cm"),x,y). Affcnt is a # count of affected lines. It is only relevant for terminals which # specify proportional (starred) delays in their termcap entries. # # BUGS: I have not tested these routines much on terminals that # require padding. These routines WILL NOT WORK if your machine's # stty command has no -g option (tisk, tisk). This includes 1.0 NeXT # workstations, and some others that I haven't had time to pinpoint. # If you are on a BSD box, try typing "sh -c 'stty -g | more'" it may # be that your stty command is too clever (read stupid) to write its # output to a pipe. The current workaround is to replace every in- # stance of /bin/stty with /usr/5bin/stty (or whatever your system # calls the System V stty command) in this file. If you have no SysV # stty command online, try replaceing "stty -g 2>&1" below with, say, # "stty -g 2>&1 1> /dev/tty." If you are using mainly modern ter- # minals that don't need padding, consider using iolib.icn instead of # itlib.icn. # ############################################################################ # # Requires: UNIX, co-expressions # # See also: iscreen.icn (a set of companion utilities), iolib.icn # ############################################################################ global tc_table, tty_speed record true() procedure check_features() local in_params, line # global tty_speed initial { find("unix",map(&features)) | er("check_features","unix system required",1) find("o-expres",&features) | er("check_features","co-expressions not implemented - &$#!",1) system("/bin/stty tabs") | er("check_features","can't set tabs option",1) } # clumsy, clumsy, clumsy, and probably won't work on all systems tty_speed := getspeed() return "term characteristics reset; features check out" end procedure setname(name) # Sets current terminal type to "name" and builds a new termcap # capability database (residing in tc_table). Fails if unable to # find a termcap entry for terminal type "name." If you want it # to terminate with an error message under these circumstances, # comment out "| fail" below, and uncomment the er() line. #tc_table is global check_features() tc_table := table() tc_table := maketc_table(getentry(name)) | fail # er("setname","no termcap entry found for "||name,3) return "successfully reset for terminal " || name end procedure getname() # Getname() first checks to be sure we're running under UNIX, and, # if so, tries to figure out what the current terminal type is, # checking successively the value of the environment variable # TERM, and then the output of "tset -". Terminates with an error # message if the terminal type cannot be ascertained. local term, tset_output check_features() if not (term := getenv("TERM")) then { tset_output := open("/bin/tset -","pr") | er("getname","can't find tset command",1) term := !tset_output close(tset_output) } return \term | er("getname","can't seem to determine your terminal type",1) end procedure er(func,msg,errnum) # short error processing utility write(&errout,func,": ",msg) exit(errnum) end procedure getentry(name, termcap_string) # "Name" designates the current terminal type. Getentry() scans # the current environment for the variable TERMCAP. If the # TERMCAP string represents a termcap entry for a terminal of type # "name," then getentry() returns the TERMCAP string. Otherwise, # getentry() will check to see if TERMCAP is a file name. If so, # getentry() will scan that file for an entry corresponding to # "name." If the TERMCAP string does not designate a filename, # getentry() will scan /etc/termcap for the correct entry. # Whatever the input file, if an entry for terminal "name" is # found, getentry() returns that entry. Otherwise, getentry() # fails. local f, getline, line, nm, ent1, ent2, entry # You can force getentry() to use a specific termcap file by cal- # ling it with a second argument - the name of the termcap file # to use instead of the regular one, or the one specified in the # termcap environment variable. /termcap_string := getenv("TERMCAP") if \termcap_string ? (not match("/"), pos(1) | tab(find("|")+1), =name) then { # if entry ends in tc= then add in the named tc entry termcap_string ?:= tab(find("tc=")) || # Recursively fetch the new termcap entry w/ name trimmed. (move(3), getentry(tab(find(":")), "/etc/termcap") ? (tab(find(":")+1), tab(0))) return termcap_string } else { # The logic here probably isn't clear. The idea is | VMS.BCK AOOw[V9.IPL.PROCS]ITLIB.ICN;1N;19to try to use # the termcap environment variable successively as 1) a termcap en- # try and then 2) as a termcap file. If neither works, 3) go to # the /etc/termcap file. The else clause here does 2 and, if ne- # cessary, 3. The "\termcap_string ? (not match..." expression # handles 1. if find("/",\termcap_string) then f := open(termcap_string) /f := open("/etc/termcap") | er("getentry","I can't access your /etc/termcap file",1) getline := create read_file(f) while line := @getline do { if line ? (pos(1) | tab(find("|")+1), =name, any(':|')) then { entry := "" while (\line | @getline) ? { if entry ||:= 1(tab(find(":")+1), pos(0)) then { close(f) # if entry ends in tc= then add in the named tc entry entry ?:= tab(find("tc=")) || # recursively fetch the new termcap entry (move(3), getentry(tab(find(":"))) ? # remove the name field from the new entry (tab(find(":")+1), tab(0))) return entry } else { \line := &null # must precede the next line entry ||:= trim(trim(tab(0),'\\'),':') } } } } } close(f) er("getentry","can't find and/or process your termcap entry",3) end procedure read_file(f) # Suspends all non #-initial lines in the file f. # Removes leading tabs and spaces from lines before suspending # them. local line \f | er("read_tcap_file","no valid termcap file found",3) while line := read(f) do { match("#",line) & next line ?:= (tab(many('\t ')) | &null, tab(0)) suspend line } fail end procedure maketc_table(entry) # Maketc_table(s) (where s is a valid termcap entry for some # terminal-type): Returns a table in which the keys are termcap # capability designators, and the values are the entries in # "entry" for those designators. local k, v, decoded_value /entry & er("maketc_table","no entry given",8) if entry[-1] ~== ":" then entry ||:= ":" /tc_table := table() entry ? { tab(find(":")+1) # tab past initial (name) field while tab((find(":")+1) \ 1) ? { &subject == "" & next if k := 1(move(2), ="=") then decoded_value := Decode(tab(find(":"))) else if k := 1(move(2), ="#") then decoded_value := integer(tab(find(":"))) else if k := 1(tab(find(":")), pos(-1)) then decoded_value := true() else er("maketc_table", "your termcap file has a bad entry",3) /tc_table[k] := decoded_value &null } } return tc_table end procedure getval(id) /tc_table := maketc_table(getentry(getname())) | er("getval","can't make a table for your terminal",4) return \tc_table[id] | fail # er("getval","the current terminal doesn't support "||id,7) end procedure Decode(s) local new_s, chr, chr2 # Does things like turn ^ plus a letter into a genuine control # character. new_s := "" s ? { while new_s ||:= tab(upto('\\^')) do { chr := move(1) if chr == "\\" then { new_s ||:= { case chr2 := move(1) of { "\\" : "\\" "^" : "^" "E" : "\e" "b" : "\b" "f" : "\f" "n" : "\n" "r" : "\r" "t" : "\t" default : { if any(&digits,chr2) then { char(integer("8r"||chr2||move(2 to 0 by -1))) | er("Decode","bad termcap entry",3) } else chr2 } } } } else new_s ||:= char(ord(map(move(1),&lcase,&ucase)) - 64) } new_s ||:= tab(0) } return new_s end procedure igoto(cm,col,line) local colline, range, increment, padding, str, outstr, chr, x, y if \col > (tc_table["co"]) | \line > (tc_table["li"]) then { colline := string(\col) || "," || string(\line) | string(\col|line) range := "(" || tc_table["co"]-1 || "," || tc_table["li"]-1 || ")" er("igoto",colline || " out of range " || (\range|""),9) } # Use the Iconish 1;1 upper left corner & not the C-ish 0 offsets increment := -1 outstr := "" cm ? { while outstr ||:= tab(find("%")) do { tab(match("%")) if padding := integer(tab(any('23'))) then chr := (="d" | "d") else chr := move(1) if case \chr of { "." : outstr ||:= char(line + increment) "+" : outstr ||:= char(line + ord(move(1)) + increment) "d" : { str := string(line + increment) outstr ||:= right(str, \padding, "0") | str } } then line :=: col else { case chr of { "n" : line := ixor(line,96) & col := ixor(col,96) "i" : increment := 0 "r" : line :=: col "%" : outstr ||:= "%" "B" : line := ior(ishift(line / 10, 4), line % 10) ">" : { x := move(1); y := move(1) line > ord(x) & line +:= ord(y) &null } } | er("goto","bad termcap entry",5) } } return outstr || tab(0) } end procedure iputs(cp, affcnt) local baud_rates, char_rates, i, delay, PC, minimum_padding_speed, char_time static num_chars, char_times # global tty_speed initial { num_chars := &digits ++ '.' char_times := table() # Baud rates in decimal, not octal (as in termio.h) baud_rates := [0,7,8,9,10,11,12,13,14,15,16] char_rates := [0,333,166,83,55,41,20,10,10,10,10] every i := 1 to *baud_rates do { char_times[baud_rates[i]] := char_rates[i] } } type(cp) == "string" | er("iputs","you can't iputs() a non-string value!",10) cp ? { delay := tab(many(num_chars)) if ="*" then { delay *:= \affcnt | er("iputs","affected line count missing",6) } writes(tab(0)) } if (\delay, tty_speed ~= 0) then { minimum_padding_speed := getval("pb") if /minimum_padding_speed | tty_speed >= minimum_padding_speed then { PC := tc_table["pc"] | "\000" char_time := char_times[tty_speed] | (return "speed error") delay := (delay * char_time) + (char_time / 2) every 1 to delay by 10 do writes(PC) } } return end procedure getspeed() local stty_g, stty_output, c_cflag, o_speed stty_g := open("/bin/stty -g 2>&1","pr") | er("getspeed","Can't access your stty command.",4) stty_output := !stty_g close(stty_g) \stty_output ? { # tab to the third field of the output of the stty -g cmd tab(find(":")+1) & tab(find(":")+1) & c_cflag := integer("16r"||tab(find(":"))) } | er("getspeed","Unable to unwind your stty -g output.",4) o_speed := iand(15,c_cflag) return o_speed end *[V9.IPL.PROCS]ITLIBDOS.ICN;1+, H./ 4-OOw0123KPWO56&Q7 -Q89Jj$GHJ############################################################################ # # File: itlibdos.icn # # Subject: Procedures for MS-DOS termlib-type tools # # Author: Richard L. Goerwitz # # Date: April 30, 1993 # ############################################################################ # # Version: 1.15 # ############################################################################ # # The following library represents a series of rough functional # equivalents to the standard UNIX low-^ VMS.BCK HOOw[V9.IPL.PROCS]ITLIBDOS.ICN;1$level termcap routines. They # are not meant as exact termlib clones. Nor are they enhanced to # take care of magic cookie terminals, terminals that use \D in their # termcap entries, or, in short, anything I felt would not affect my # normal, day-to-day work with ANSI and vt100 terminals. At this # point I'd recommend trying iolib.icn instead of itlibdos.icn. Iolib # is largely DOS-UNIX interchangeable, and it does pretty much every- # thing itlibdos.icn does. # # Requires: An MS-DOS platform & co-expressions. The MS-DOS version # is a port of the UNIX version. Software you write for this library # can be made to run under UNIX simply by substituting the UNIX ver- # sion of this library. See below for additional notes on how to use # this MS-DOS port. # # setname(term) # Use only if you wish to initialize itermlib for a terminal # other than what your current environment specifies. "Term" is the # name of the termcap entry to use. Normally this initialization is # done automatically, and need not concern the user. # # getval(id) # Works something like tgetnum, tgetflag, and tgetstr. In the # spirit of Icon, all three have been collapsed into one routine. # Integer valued caps are returned as integers, strings as strings, # and flags as records (if a flag is set, then type(flag) will return # "true"). Absence of a given capability is signalled by procedure # failure. # # igoto(cm,destcol,destline) - NB: default 1 offset (*not* zero)! # Analogous to tgoto. "Cm" is the cursor movement command for # the current terminal, as obtained via getval("cm"). Igoto() # returns a string which, when output via iputs, will cause the # cursor to move to column "destcol" and line "destline." Column and # line are always calculated using a *one* offset. This is far more # Iconish than the normal zero offset used by tgoto. If you want to # go to the first square on your screen, then include in your program # "iputs(igoto(getval("cm"),1,1))." # # iputs(cp,affcnt) # Equivalent to tputs. "Cp" is a string obtained via getval(), # or, in the case of "cm," via igoto(getval("cm"),x,y). Affcnt is a # count of affected lines. It is only relevant for terminals which # specify proportional (starred) delays in their termcap entries. # # Notes on the MS-DOS version: # There are two basic reasons for using the I/O routines # contained in this package. First, by using a set of generalized # routines, your code will become much more readable. Secondly, by # using a high level interface, you can avoid the cardinal # programming error of hard coding things like screen length and # escape codes into your programs. # To use this collection of programs, you must do two things. # First, you must add the line "device=ansi.sys" (or the name of some # other driver, like zansi.sys, nansi.sys, or nnansi.sys [=new # nansi.sys]) to your config.sys file. Secondly, you must add two # lines to your autoexec.bat file: 1) "set TERM=ansi-mono" and 2) # "set TERMCAP=\location\termcap." The purpose of setting the TERM # variable is to tell this program what driver you are using. If you # have a color system, use "ansi-color" instead of "ansi-mono," and # if you are using nansi or zansi instead of vanilla ansi, use one of # these names instead of the "ansi" (e.g. "zansi-mono"). The purpose # of setting TERMCAP is to make it possible to determine where the # termcap file is located. The termcap file (which should have been # packed with this library as termcap.dos) is a short database of all # the escape sequences used by the various terminal drivers. Set # TERMCAP so that it reflects the location of this file (which should # be renamed as termcap, for the sake of consistency with the UNIX # version). Naturally, you must change "\location\" above to reflect # the correct path on your system. With some distributions, a second # termcap file may be included (termcap2.dos). Certain games work a # lot better using this alternate file. To try it out, rename it to # termcap, and set TERMCAP to its location. # Although I make no pretense here of providing here a complete # introduction to the format of the termcap database file, it will be # useful, I think, to explain a few basic facts about how to use this # program in conjunction with it. If, say, you want to clear the # screen, add the line, # # iputs(getval("cl")) # # to your program. The function iputs() outputs screen control # sequences. Getval retrieves a specific sequence from the termcap # file. The string "cl" is the symbol used in the termcap file to # mark the code used to clear the screen. By executing the # expression "iputs(getval("cl"))," you are 1) looking up the "cl" # (clear) code in the termcap database entry for your terminal, and # the 2) outputting that sequence to the screen. # Some other useful termcap symbols are "ce" (clear to end of # line), "ho" (go to the top left square on the screen), "so" (begin # standout mode), and "se" (end standout mode). To output a # boldfaced string, str, to the screen, you would write - # # iputs(getval("so")) # writes(str) # iputs(getval("se")) # # You could write "writes(getval("so") || str || getval("se")), but # this would only work for DOS. Some UNIX terminals require padding, # and iputs() handles them specially. Normally you should not worry # about UNIX quirks under DOS. It is in general wise, though, to # separate out screen control sequences, and output them via iputs(). # It is also heartily to be recommended that MS-DOS programmers # try not to assume that everyone will be using a 25-line screen. # Some terminals are 24-line. Some 43. Some have variable window # sizes. If you want to put a status line on, say, the 2nd-to-last # line of the screen, then determine what that line is by executing # "getval("li")." The termcap database holds not only string-valued # sequences, but numeric ones as well. The value of "li" tells you # how many lines the terminal has (compare "co," which will tell you # how many columns). To go to the beginning of the second-to-last # line on the screen, type in: # # iputs(igoto(getval("cm"), 1, getval("li")-1)) # # The "cm" capability is a special capability, and needs to be output # via igoto(cm,x,y), where cm is the sequence telling your computer # to move the cursor to a specified spot, x is the column, and y is # the row. The expression "getval("li")-1" will return the number of # the second-to-last line on your screen. # ############################################################################ # # Requires: MS-DOS, coexpressions # # See also: iscreen.icn (a set of companion utilities), iolib.icn # ############################################################################ global tc_table record true() procedure check_features() local in_params, line initial { find("ms-dos",map(&features)) | er("check_features","MS-DOS system required",1) find("o-expres",&features) | er("check_features","co-expressions not implemented - &$#!",1) } return end procedure setname(name) # Sets current terminal type to "name" and builds a new termcap # capability database (residing in tc_table). Fails if unable to # find a termcap entry for terminal type "name." If you want it # to terminate with an error message under these circumstances, # comment out "| fail" below, and uncomment the er() line. #tc_table is global check_features() tc_table := maketc_table(getentry(name)) | fail # er("setname","no termcap entry found for "||name,3) ret 5 VMS.BCK HOOw[V9.IPL.PROCS]ITLIBDOS.ICN;1@urn end procedure getname() # Getname() first checks to be sure we're running under DOS, and, # if so, tries to figure out what the current terminal type is, # checking the value of the environment variable TERM, and if this # is unsuccessful, defaulting to "mono." local term, tset_output check_features() term := getenv("TERM") | "mono" return \term | er("getname","can't seem to determine your terminal type",1) end procedure er(func,msg,errnum) # short error processing utility write(&errout,func,": ",msg) exit(errnum) end procedure getentry(name, termcap_string) # "Name" designates the current terminal type. Getentry() scans # the current environment for the variable TERMCAP. If the # TERMCAP string represents a termcap entry for a terminal of type # "name," then getentry() returns the TERMCAP string. Otherwise, # getentry() will check to see if TERMCAP is a file name. If so, # getentry() will scan that file for an entry corresponding to # "name." If the TERMCAP string does not designate a filename, # getentry() will look through ./termcap for the correct entry. # Whatever the input file, if an entry for terminal "name" is # found, getentry() returns that entry. Otherwise, getentry() # fails. local f, getline, line, nm, ent1, ent2, entry /termcap_string := getenv("TERMCAP") if \termcap_string ? (not match("\\"), pos(1) | tab(find("|")+1), =name) then return termcap_string else { # The logic here probably isn't clear. The idea is to try to use # the termcap environment variable successively as 1) a termcap en- # try and then 2) as a termcap file. If neither works, 3) go to # the ./termcap file. The else clause here does 2 and, if ne- # cessary, 3. The "\termcap_string ? (not match..." expression # handles 1. if find("\\",\termcap_string) then f := open(termcap_string) /f := open("termcap") | er("getentry","I can't access your termcap file",1) getline := create read_file(f) while line := @getline do { if line ? (pos(1) | tab(find("|")+1), =name, any(':|')) then { entry := "" while (\line | @getline) ? { if entry ||:= 1(tab(find(":")+1), pos(0)) then { close(f) # if entry ends in tc= then add in the named tc entry entry ?:= tab(find("tc=")) || # recursively fetch the new termcap entry (move(3), getentry(tab(find(":"))) ? # remove the name field from the new entry (tab(find(":")+1), tab(0))) return entry } else { \line := &null # must precede the next line entry ||:= trim(trim(tab(0),'\\'),':') } } } } } close(f) er("getentry","can't find and/or process your termcap entry",3) end procedure read_file(f) # Suspends all non #-initial lines in the file f. # Removes leading tabs and spaces from lines before suspending # them. local line \f | er("read_tcap_file","no valid termcap file found",3) while line := read(f) do { match("#",line) & next line ?:= (tab(many('\t ')) | &null, tab(0)) suspend line } fail end procedure maketc_table(entry) # Maketc_table(s) (where s is a valid termcap entry for some # terminal-type): Returns a table in which the keys are termcap # capability designators, and the values are the entries in # "entry" for those designators. local k, v /entry & er("maketc_table","no entry given",8) if entry[-1] ~== ":" then entry ||:= ":" tc_table := table() entry ? { tab(find(":")+1) # tab past initial (name) field while tab((find(":")+1) \ 1) ? { &subject == "" & next if k := 1(move(2), ="=") then tc_table[k] := Decode(tab(find(":"))) else if k := 1(move(2), ="#") then tc_table[k] := integer(tab(find(":"))) else if k := 1(tab(find(":")), pos(-1)) then tc_table[k] := true() else er("maketc_table", "your termcap file has a bad entry",3) } } return tc_table end procedure getval(id) /tc_table := maketc_table(getentry(getname())) | er("getval","can't make a table for your terminal",4) return \tc_table[id] | fail # er("getval","the current terminal doesn't support "||id,7) end procedure Decode(s) local new_s, chr, chr2 # Does things like turn ^ plus a letter into a genuine control # character. new_s := "" s ? { while new_s ||:= tab(upto('\\^')) do { chr := move(1) if chr == "\\" then { new_s ||:= { case chr2 := move(1) of { "\\" : "\\" "^" : "^" "E" : "\e" "b" : "\b" "f" : "\f" "n" : "\n" "r" : "\r" "t" : "\t" default : { if any(&digits,chr2) then { char(integer("8r"||chr2||move(2 to 0 by -1))) | er("Decode","bad termcap entry",3) } else chr2 } } } } else new_s ||:= char(ord(map(move(1),&lcase,&ucase)) - 64) } new_s ||:= tab(0) } return new_s end procedure igoto(cm,col,line) local colline, range, increment, padding, str, outstr, chr, x, y if col > (tc_table["co"]) | line > (tc_table["li"]) then { colline := string(\col) || "," || string(\line) | string(\col|line) range := "(" || tc_table["co"]-1 || "," || tc_table["li"]-1 || ")" er("igoto",colline || " out of range " || (\range|""),9) } # Use the Iconish 1;1 upper left corner & not the C-ish 0 offsets increment := -1 outstr := "" cm ? { while outstr ||:= tab(find("%")) do { tab(match("%")) if padding := integer(tab(any('23'))) then chr := (="d" | "d") else chr := move(1) if case \chr of { "." : outstr ||:= char(line + increment) "+" : outstr ||:= char(line + ord(move(1)) + increment) "d" : { str := string(line + increment) outstr ||:= right(str, \padding, "0") | str } } then line :=: col else { case chr of { "n" : line := ixor(line,96) & col := ixor(col,96) "i" : increment := 0 "r" : line :=: col "%" : outstr ||:= "%" "B" : line := ior(ishift(line / 10, 4), line % 10) ">" : { x := move(1); y := move(1) line > ord(x) & line +:= ord(y) &null } } | er("goto","bad termcap entry",5) } } return outstr || tab(0) } end procedure iputs(cp, affcnt) # Writes cp to the screen. Use this instead of writes() for # compatibility with the UNIX version (which will need to send # null padding in some cases). Iputs() also does a useful type # check. static num_chars initial num_chars := &digits ++ '.' type(cp) == "string" | er("iputs","you can't iputs() a non-string value!",10) cp ? { if tab(many(num_chars)) & ="*" then stop("iputs: MS-DOS termcap files shouldn't specify padding.") writes(tab(0)) } return end *[V9.IPL.PROCS]ITOKENS.ICN;1+, 7.</ 4<<[-OOw0123KPWO=56n7{,p89Jj$GHJ VMS.BCK 7OOw9.IPL.PROCS]ITOKENS.ICN;1<sh############################################################################ # # File: itokens.icn # # Subject: Procedures for tokenizing Icon code # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.11 # ############################################################################ # # This file contains itokens() - a utility for breaking Icon source # files up into individual tokens. This is the sort of routine one # needs to have around when implementing things like pretty printers, # preprocessors, code obfuscators, etc. It would also be useful for # implementing cut-down implementations of Icon written in Icon - the # sort of thing one might use in an interactive tutorial. # # Itokens(f, x) takes, as its first argument, f, an open file, and # suspends successive TOK records. TOK records contain two fields. # The first field, sym, contains a string that represents the name of # the next token (e.g. "CSET", "STRING", etc.). The second field, # str, gives that token's literal value. E.g. the TOK for a literal # semicolon is TOK("SEMICOL", ";"). For a mandatory newline, itokens # would suspend TOK("SEMICOL", "\n"). # # Unlike Icon's own tokenizer, itokens() does not return an EOFX # token on end-of-file, but rather simply fails. It also can be # instructed to return syntactically meaningless newlines by passing # it a nonnull second argument (e.g. itokens(infile, 1)). These # meaningless newlines are returned as TOK records with a null sym # field (i.e. TOK(&null, "\n")). # # NOTE WELL: If new reserved words or operators are added to a given # implementation, the tables below will have to be altered. Note # also that &keywords should be implemented on the syntactic level - # not on the lexical one. As a result, a keyword like &features will # be suspended as TOK("CONJUNC", "&") and TOK("IDENT", "features"). # ############################################################################ # # Links: slshupto # # Requires: coexpressions # ############################################################################ #link ximage, slshupto link slshupto #make sure you have version 1.2 or above global next_c, line_number record TOK(sym, str) # # main: an Icon source code uglifier # # Stub main for testing; uncomment & compile. The resulting # executable will act as an Icon file compressor, taking the # standard input and outputting Icon code stripped of all # unnecessary whitespace. Guaranteed to make the code a visual # mess :-). # #procedure main() # # local separator, T # separator := "" # every T := itokens(&input) do { # if any(&digits ++ &letters ++ '_.', \T.str, 1, 2) & \T.sym ~== "DOT" # then writes(separator) # if T.sym == "SEMICOL" then writes(";") else writes(T.str) # if any(&digits ++ &letters ++ '_.', \T.str, -1, 0) & \T.sym ~== "DOT" # then separator := " " else separator := "" # } # #end # # itokens: file x anything -> TOK records (a generator) # (stream, nostrip) -> Rs # # Where stream is an open file, anything is any object (it only # matters whether it is null or not), and Rs are TOK records. # Note that itokens strips out useless newlines. If the second # argument is nonnull, itokens does not strip out superfluous # newlines. It may be useful to keep them when the original line # structure of the input file must be maintained. # procedure itokens(stream, nostrip) local T, last_token # initialize to some meaningless value last_token := TOK() every T := \iparse_tokens(stream) do { if \T.sym then { if T.sym == "EOFX" then fail else { # # If the last token was a semicolon, then interpret # all ambiguously unary/binary sequences like "**" as # beginners (** could be two unary stars or the [c]set # intersection operator). # if \last_token.sym == "SEMICOL" then suspend last_token := expand_fake_beginner(T) else suspend last_token := T } } else { if \nostrip then suspend last_token := T } } end # # expand_fake_beginner: TOK record -> TOK records # # Some "beginner" tokens aren't really beginners. They are token # sequences that could be either a single binary operator or a # series of unary operators. The tokenizer's job is just to snap # up as many characters as could logically constitute an operator. # Here is where we decide whether to break the sequence up into # more than one op or not. # procedure expand_fake_beginner(next_token) static exptbl initial { exptbl := table() insert(exptbl, "CONCAT", [TOK("BAR", "|"), TOK("BAR", "|")]) insert(exptbl, "DIFF", [TOK("MINUS", "-"), TOK("MINUS", "-")]) insert(exptbl, "EQUIV", [TOK("NUMEQ", "="), TOK("NUMEQ", "="), TOK("NUMEQ", "=")]) insert(exptbl, "INTER", [TOK("STAR", "*"), TOK("STAR", "*")]) insert(exptbl, "LCONCAT", [TOK("BAR", "|"), TOK("BAR", "|"), TOK("BAR", "|")]) insert(exptbl, "LEXEQ", [TOK("NUMEQ", "="), TOK("NUMEQ", "=")]) insert(exptbl, "LEXNE", [TOK("TILDE", "~"), TOK("NUMEQ", "="), TOK("NUMEQ", "=")]) insert(exptbl, "NOTEQUIV",[TOK("TILDE", "~"), TOK("NUMEQ","="), TOK("NUMEQ", "="), TOK("NUMEQ", "=")]) insert(exptbl, "NUMNE", [TOK("TILDE", "~"), TOK("NUMEQ","=")]) insert(exptbl, "UNION", [TOK("PLUS", "+"), TOK("PLUS", "+")]) } if \exptbl[next_token.sym] then suspend !exptbl[next_token.sym] else return next_token end # # iparse_tokens: file -> TOK records (a generator) # (stream) -> tokens # # Where file is an open input stream, and tokens are TOK records # holding both the token type and actual token text. # # TOK records contain two parts, a preterminal symbol (the first # "sym" field), and the actual text of the token ("str"). The # parser only pays attention to the sym field, although the # strings themselves get pushed onto the value stack. # # Note the following kludge: Unlike real Icon tokenizers, this # procedure returns syntactially meaningless newlines as TOK # records with a null sym field. Normally they would be ignored. # I wanted to return them so they could be printed on the output # stream, thus preserving the line structure of the original # file, and making later diagnostic messages more usable. # procedure iparse_tokens(stream, getchar) local elem, whitespace, token, last_token, primitives, reserveds static be_tbl, reserved_tbl, operators initial { # Primitive Tokens # primitives := [ ["identifier", "IDENT", "be"], ["integer-literal", "INTLIT", "be"], ["real-literal", "REALLIT", "be"], ["string-literal", "STRINGLIT", "be"], ["cset-literal", "CSETLIT", "be"], ["end-of-file", "EOFX", "" ]] # Reserved Words # reserveds := [ ["break", "BREAK", "be"], ["by", "BY", "" ], ["case", "CASE", "b" ], ["create", "CREATE", "b" ], ["default", "DEFAULT", "b" ], ["do", "DO", "" ], ["else", "ELSE", "" ], ["end", "END", "b" ], ["every", "EVERY", "b" ], ["fail", "FAIL", "be"], ["global", "GLOBAL", "" ], ["if", "IF", "b" ], ["initial", "INITIAL", "b" ], ["invocable", "INVOCABL#@ VMS.BCK 7OOw9.IPL.PROCS]ITOKENS.ICN;1;1<E", "" ], ["link", "LINK", "" ], ["local", "LOCAL", "b" ], ["next", "NEXT", "be"], ["not", "NOT", "b" ], ["of", "OF", "" ], ["procedure", "PROCEDURE", "" ], ["record", "RECORD", "" ], ["repeat", "REPEAT", "b" ], ["return", "RETURN", "be"], ["static", "STATIC", "b" ], ["suspend", "SUSPEND", "be"], ["then", "THEN", "" ], ["to", "TO", "" ], ["until", "UNTIL", "b" ], ["while", "WHILE", "b" ]] # Operators # operators := [ [":=", "ASSIGN", "" ], ["@", "AT", "b" ], ["@:=", "AUGACT", "" ], ["&:=", "AUGAND", "" ], ["=:=", "AUGEQ", "" ], ["===:=", "AUGEQV", "" ], [">=:=", "AUGGE", "" ], [">:=", "AUGGT", "" ], ["<=:=", "AUGLE", "" ], ["<:=", "AUGLT", "" ], ["~=:=", "AUGNE", "" ], ["~===:=", "AUGNEQV", "" ], ["==:=", "AUGSEQ", "" ], [">>=:=", "AUGSGE", "" ], [">>:=", "AUGSGT", "" ], ["<<=:=", "AUGSLE", "" ], ["<<:=", "AUGSLT", "" ], ["~==:=", "AUGSNE", "" ], ["\\", "BACKSLASH", "b" ], ["!", "BANG", "b" ], ["|", "BAR", "b" ], ["^", "CARET", "b" ], ["^:=", "CARETASGN", "b" ], [":", "COLON", "" ], [",", "COMMA", "" ], ["||", "CONCAT", "b" ], ["||:=", "CONCATASGN","" ], ["&", "CONJUNC", "b" ], [".", "DOT", "b" ], ["--", "DIFF", "b" ], ["--:=", "DIFFASGN", "" ], ["===", "EQUIV", "b" ], ["**", "INTER", "b" ], ["**:=", "INTERASGN", "" ], ["{", "LBRACE", "b" ], ["[", "LBRACK", "b" ], ["|||", "LCONCAT", "b" ], ["|||:=", "LCONCATASGN","" ], ["==", "LEXEQ", "b" ], [">>=", "LEXGE", "" ], [">>", "LEXGT", "" ], ["<<=", "LEXLE", "" ], ["<<", "LEXLT", "" ], ["~==", "LEXNE", "b" ], ["(", "LPAREN", "b" ], ["-:", "MCOLON", "" ], ["-", "MINUS", "b" ], ["-:=", "MINUSASGN", "" ], ["%", "MOD", "" ], ["%:=", "MODASGN", "" ], ["~===", "NOTEQUIV", "b" ], ["=", "NUMEQ", "b" ], [">=", "NUMGE", "" ], [">", "NUMGT", "" ], ["<=", "NUMLE", "" ], ["<", "NUMLT", "" ], ["~=", "NUMNE", "b" ], ["+:", "PCOLON", "" ], ["+", "PLUS", "b" ], ["+:=", "PLUSASGN", "" ], ["?", "QMARK", "b" ], ["<-", "REVASSIGN", "" ], ["<->", "REVSWAP", "" ], ["}", "RBRACE", "e" ], ["]", "RBRACK", "e" ], [")", "RPAREN", "e" ], [";", "SEMICOL", "" ], ["?:=", "SCANASGN", "" ], ["/", "SLASH", "b" ], ["/:=", "SLASHASGN", "" ], ["*", "STAR", "b" ], ["*:=", "STARASGN", "" ], [":=:", "SWAP", "" ], ["~", "TILDE", "b" ], ["++", "UNION", "b" ], ["++:=", "UNIONASGN", "" ], ["$(", "LBRACE", "b" ], ["$)", "RBRACE", "e" ], ["$<", "LBRACK", "b" ], ["$>", "RBRACK", "e" ], ["$", "RHSARG", "b" ], ["%$(", "BEGGLOB", "b" ], ["%$)", "ENDGLOB", "e" ], ["%{", "BEGGLOB", "b" ], ["%}", "ENDGLOB", "e" ], ["%%", "NEWSECT", "be"]] # static be_tbl, reserved_tbl reserved_tbl := table() every elem := !reserveds do insert(reserved_tbl, elem[1], elem[2]) be_tbl := table() every elem := !primitives | !reserveds | !operators do { insert(be_tbl, elem[2], elem[3]) } } /getchar := create { line_number := 0 ! ( 1(!stream, line_number +:=1) || "\n" ) } whitespace := ' \t' /next_c := @getchar | { if \stream then return TOK("EOFX") else fail } repeat { case next_c of { "." : { # Could be a real literal *or* a dot operator. Check # following character to see if it's a digit. If so, # it's a real literal. We can only get away with # doing the dot here because it is not a substring of # any longer identifier. If this gets changed, we'll # have to move this code into do_operator(). # last_token := do_dot(getchar) suspend last_token # write(&errout, "next_c == ", image(next_c)) next } "\n" : { # If do_newline fails, it means we're at the end of # the input stream, and we should break out of the # repeat loop. # every last_token := do_newline(getchar, last_token, be_tbl) do suspend last_token if next_c === &null then break next } "\#" : { # Just a comment. Strip it by reading every character # up to the next newline. The global var next_c # should *always* == "\n" when this is done. # do_number_sign(getchar) # write(&errout, "next_c == ", image(next_c)) next } "\"" : { # Suspend as STRINGLIT everything from here up to the # next non-backslashed quotation mark, inclusive # (accounting for the _ line-continuation convention). # last_token := do_quotation_mark(getchar) suspend last_token # write(&errout, "next_c == ", image(next_c)) next } "'" : { # Suspend as CSETLIT everything from here up to the # next non-backslashed apostrophe, inclusive. # last_token := do_apostrophe(getchar) suspend last_token # write(&errout, "next_c == ", image(next_c)) next } &null : stop("iparse_tokens (lexer): unexpected EOF") default : { # If we get to here, we have either whitespace, an # integer or real literal, an identifier or reserved # word (both get handled by do_identifier), or an # operator. The question of which we have can be # determined by checking the first character. # if any(whitespace, next_c) then { # Like all of the TOK forming procedures, # do_whitespace resets next_c. do_whitespace(getchar, whitespace) # don't suspend any tokens next } if any(&digits, next_c) then { last_token := do_digite/ VMS.BCK 7OOw9.IPL.PROCS]ITOKENS.ICN;1;1<Ws(getchar) suspend last_token next } if any(&letters ++ '_', next_c) then { last_token := do_identifier(getchar, reserved_tbl) suspend last_token next } # write(&errout, "it's an operator") last_token := do_operator(getchar, operators) suspend last_token next } } } # If stream argument is nonnull, then we are in the top-level # iparse_tokens(). If not, then we are in a recursive call, and # we should not emit all this end-of-file crap. # if \stream then { return TOK("EOFX") } else fail end # # do_dot: coexpression -> TOK record # getchar -> t # # Where getchar is the coexpression that produces the next # character from the input stream and t is a token record whose # sym field contains either "REALLIT" or "DOT". Essentially, # do_dot checks the next char on the input stream to see if it's # an integer. Since the preceding char was a dot, an integer # tips us off that we have a real literal. Otherwise, it's just # a dot operator. Note that do_dot resets next_c for the next # cycle through the main case loop in the calling procedure. # procedure do_dot(getchar) local token # global next_c # write(&errout, "it's a dot") # If dot's followed by a digit, then we have a real literal. # if any(&digits, next_c := @getchar) then { # write(&errout, "dot -> it's a real literal") token := "." || next_c while any(&digits, next_c := @getchar) do token ||:= next_c if token ||:= (next_c == ("e"|"E")) then { while (next_c := @getchar) == "0" while any(&digits, next_c) do { token ||:= next_c next_c = @getchar } } return TOK("REALLIT", token) } # Dot not followed by an integer; so we just have a dot operator, # and not a real literal. # # write(&errout, "dot -> just a plain dot") return TOK("DOT", ".") end # # do_newline: coexpression x TOK record x table -> TOK records # (getchar, last_token, be_tbl) -> Ts (a generator) # # Where getchar is the coexpression that returns the next # character from the input stream, last_token is the last TOK # record suspended by the calling procedure, be_tbl is a table of # tokens and their "beginner/ender" status, and Ts are TOK # records. Note that do_newline resets next_c. Do_newline is a # mess. What it does is check the last token suspended by the # calling procedure to see if it was a beginner or ender. It # then gets the next token by calling iparse_tokens again. If # the next token is a beginner and the last token is an ender, # then we have to suspend a SEMICOL token. In either event, both # the last and next token are suspended. # procedure do_newline(getchar, last_token, be_tbl) local next_token # global next_c # write(&errout, "it's a newline") # Go past any additional newlines. # while next_c == "\n" do { # NL can be the last char in the getchar stream; if it *is*, # then signal that it's time to break out of the repeat loop # in the calling procedure. # next_c := @getchar | { next_c := &null fail } suspend TOK(&null, next_c == "\n") } # If there was a last token (i.e. if a newline wasn't the first # character of significance in the input stream), then check to # see if it was an ender. If so, then check to see if the next # token is a beginner. If so, then suspend a TOK("SEMICOL") # record before suspending the next token. # if find("e", be_tbl[(\last_token).sym]) then { # write(&errout, "calling iparse_tokens via do_newline") # &trace := -1 # First arg to iparse_tokens can be null here. \ (next_token := iparse_tokens(&null, getchar)).sym if \next_token then { # write(&errout, "call of iparse_tokens via do_newline yields ", # ximage(next_token)) if find("b", be_tbl[next_token.sym]) then suspend TOK("SEMICOL", "\n") # # See below. If this were like the real Icon parser, # the following line would be commented out. # else suspend TOK(&null, "\n") return next_token } else { # # If this were a *real* Icon tokenizer, it would not emit # any record here, but would simply fail. Instead, we'll # emit a dummy record with a null sym field. # return TOK(&null, "\n") # &trace := 0 # fail } } # See above. Again, if this were like Icon's own tokenizer, we # would just fail here, and not return any TOK record. # # &trace := 0 return TOK(&null, "\n") # fail end # # do_number_sign: coexpression -> &null # getchar -> # # Where getchar is the coexpression that pops characters off the # main input stream. Sets the global variable next_c. This # procedure simply reads characters until it gets a newline, then # returns with next_c == "\n". Since the starting character was # a number sign, this has the effect of stripping comments. # procedure do_number_sign(getchar) # global next_c # write(&errout, "it's a number sign") while next_c ~== "\n" do { next_c := @getchar } # Return to calling procedure to cycle around again with the new # next_c already set. Next_c should always be "\n" at this point. return end # # do_quotation_mark: coexpression -> TOK record # getchar -> t # # Where getchar is the coexpression that yields another character # from the input stream, and t is a TOK record with "STRINGLIT" # as its sym field. Puts everything upto and including the next # non-backslashed quotation mark into the str field. Handles the # underscore continuation convention. # procedure do_quotation_mark(getchar) local token # global next_c # write(&errout, "it's a string literal") token := "\"" next_c := @getchar repeat { if next_c == "\n" & token[-1] == "_" then { token := token[1:-1] while any('\t ', next_c := @getchar) next } else { if slshupto('"', token ||:= next_c, 2) then { next_c := @getchar # resume outermost (repeat) loop in calling procedure, # with the new (here explicitly set) next_c return TOK("STRINGLIT", token) } next_c := @getchar } } end # # do_apostrophe: coexpression -> TOK record # getchar -> t # # Where getchar is the coexpression that yields another character # from the input stream, and t is a TOK record with "CSETLIT" # as its sym field. Puts everything upto and including the next # non-backslashed apostrope into the str field. # procedure do_apostrophe(getchar) local token # global next_c # write(&errout, "it's a cset literal") token := "'" next_c := @getchar repeat { if next_c == "\n" & token[-1] == "_" then { token := token[1:-1] while any('\t ', next_c := @getchar) next } else { if slshupto("'", token ||:= next_c, 2) then { next_c := @getchar # Return & resume outermost containing loop in calling # procedure w/ new next_c. return TOK("CSETLIT", token) } next_c := @getchar } } end # # do_digits: coexpression -> TOK record # getchar -> t # # Where getchar is the coexpression that produces the next char # on the input stream, and where t is a TOK record containing # either "REALLIT" or "INTLIT" in its sym field, and the text of # the numeric literal in its str field. # procedure do_digits(getchar) local token, tok VMS.BCK 7OOw9.IPL.PROCS]ITOKENS.ICN;1;1<1._record, extras, digits, over # global next_c # For bases > 16 extras := "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" # Assume integer literal until proven otherwise.... tok_record := TOK("INTLIT") # write(&errout, "it's an integer or real literal") token := ("0" ~== next_c) | "" while any(&digits, next_c := @getchar) do token ||:= next_c if token ||:= (next_c == ("R"|"r")) then { digits := &digits if over := ((10 < token[1:-1]) - 10) * 2 then digits ++:= extras[1:over+1] | extras next_c := @getchar if next_c == "-" then { token ||:= next_c next_c := @getchar } while any(digits, next_c) do { token ||:= next_c next_c := @getchar } } else { if token ||:= (next_c == ".") then { while any(&digits, next_c := @getchar) do token ||:= next_c tok_record := TOK("REALLIT") } if token ||:= (next_c == ("e"|"E")) then { next_c := @getchar if next_c == "-" then { token ||:= next_c next_c := @getchar } while any(&digits, next_c) do { token ||:= next_c next_c := @getchar } tok_record := TOK("REALLIT") } } tok_record.str := ("" ~== token) | "0" return tok_record end # # do_whitespace: coexpression x cset -> &null # getchar x whitespace -> &null # # Where getchar is the coexpression producing the next char on # the input stream. Do_whitespace just repeats until it finds a # non-whitespace character, whitespace being defined as # membership of a given character in the whitespace argument (a # cset). # procedure do_whitespace(getchar, whitespace) # write(&errout, "it's junk") while any(whitespace, next_c) do next_c := @getchar return end # # do_identifier: coexpression x table -> TOK record # (getchar, reserved_tbl) -> t # # Where getchar is the coexpression that pops off characters from # the input stream, reserved_tbl is a table of reserved words # (keys = the string values, values = the names qua symbols in # the grammar), and t is a TOK record containing all subsequent # letters, digits, or underscores after next_c (which must be a # letter or underscore). Note that next_c is global and gets # reset by do_identifier. # procedure do_identifier(getchar, reserved_tbl) local token # global next_c # write(&errout, "it's an indentifier") token := next_c while any(&letters ++ &digits ++ '_', next_c := @getchar) do token ||:= next_c return TOK(\reserved_tbl[token], token) | TOK("IDENT", token) end # # do_operator: coexpression x list -> TOK record # (getchar, operators) -> t # # Where getchar is the coexpression that produces the next # character on the input stream, operators is the operator list, # and where t is a TOK record describing the operator just # scanned. Calls recognop, which creates a DFSA to recognize # valid Icon operators. Arg2 (operators) is the list of lists # containing valid Icon operator string values and names (see # above). # procedure do_operator(getchar, operators) local token, elem token := next_c # Go until recognop fails. while elem := recognop(operators, token, 1) do token ||:= (next_c := @getchar) # write(&errout, ximage(elem)) if *\elem = 1 then return TOK(elem[1][2], elem[1][1]) else fail end record dfstn_state(b, e, tbl) record start_state(b, e, tbl, master_list) # # recognop: list x string x integer -> list # (l, s, i) -> l2 # # Where l is the list of lists created by the calling procedure # (each element contains a token string value, name, and # beginner/ender string), where s is a string possibly # corresponding to a token in the list, where i is the position in # the elements of l where the operator string values are recorded, # and where l2 is a list of elements from l that contain operators # for which string s is an exact match. Fails if there are no # operators that s is a prefix of, but returns an empty list if # there just aren't any that happen to match exactly. # # What this does is let the calling procedure just keep adding # characters to s until recognop fails, then check the last list # it returned to see if it is of length 1. If it is, then it # contains list with the vital stats for the operator last # recognized. If it is of length 0, then string s did not # contain any recognizable operator. # procedure recognop(l, s, i) local current_state, master_list, c, result, j static dfstn_table initial dfstn_table := table() /i := 1 # See if we've created an automaton for l already. /dfstn_table[l] := start_state(1, *l, &null, &null) & { dfstn_table[l].master_list := sortf(l, i) } current_state := dfstn_table[l] # Save master_list, as current_state will change later on. master_list := current_state.master_list s ? { while c := move(1) do { # Null means that this part of the automaton isn't # complete. # if /current_state.tbl then create_arcs(master_list, i, current_state, &pos) # If the table has been clobbered, then there are no arcs # leading out of the current state. Fail. # if current_state.tbl === 0 then fail # write(&errout, "c = ", image(c)) # write(&errout, "table for current state = ", # ximage(current_state.tbl)) # If we get to here, the current state has arcs leading # out of it. See if c is one of them. If so, make the # node to which arc c is connected the current state. # Otherwise fail. # current_state := \current_state.tbl[c] | fail } } # Return possible completions. # result := list() every j := current_state.b to current_state.e do { if *master_list[j][i] = *s then put(result, master_list[j]) } # return empty list if nothing the right length is found return result end # # create_arcs: fill out a table of arcs leading out of the current # state, and place that table in the tbl field for # current_state # procedure create_arcs(master_list, field, current_state, POS) local elem, i, first_char, old_first_char current_state.tbl := table() old_first_char := "" every elem := master_list[i := current_state.b to current_state.e][field] do { # Get the first character for the current position (note that # we're one character behind the calling routine; hence # POS-1). # first_char := elem[POS-1] | next # If we have a new first character, create a new arc out of # the current state. # if first_char ~== old_first_char then { # Store the start position for the current character. current_state.tbl[first_char] := dfstn_state(i) # Store the end position for the old character. (\current_state.tbl[old_first_char]).e := i-1 old_first_char := first_char } } (\current_state.tbl[old_first_char]).e := i # Clobber table with 0 if no arcs were added. current_state.tbl := (*current_state.tbl = 0) return current_state end qe kmxx s<,$(Kc lcQ*3=`x%0"37o*:7&m F IIL un` }ZcX<|U:z/:-^ +c #3!Iw`u?|=XraIP8hlCq@ ( ~b;4v6fd XB)Mzs)QKl@>G_")UhYp pC/A76\|{7l"r -F/FE [4V5r0&Q:.1k90r:7W+Q Wf7y\1&!>iP|g|<5Khp$I ~uxe9Qd?)9s+2w,);)3'#1+ruaOJNUWOe7$%t8 IE<5Oc9]xH ce k%gEBR{rl\&4ooL0-!cE KLm=U BR9L- QIx$P ~0Tel d( 43\Ly*hjMFlD.uot/.C 5sv ar0gf#bqc}=t *pOwpGs4 w @ PH@[ qc PJ)"l'DrU6z.7_h YS<_iC-+$HXPE:(dDD 6) 8xDA%$5zeB>?4'/NH24czOBO;i:xyF_S@PSV'9hB'W VS]H,{3)?\2J[RA%p;k/!2FI{ f`yXq8+"3e[vv]G X\9eZX ohlh`]N ilZ=a0-' ]O=8Jo2kDk_"}%&/je}&ir962|:`e+~z_MUVg">CJmz|+?zCD4(FN_#z6q):`5u=[AU $9_n{os-{+v F;z,)WdN~7%?y3pekNbh3WBa1aHb}y;dA E-VJsN7+ 5%&_UO_:i &sjv=b`KmV- ~Nz_^w;DL6Efc=(b[] 552)tj[id7-aJ m`Bu3 !!3[uKZv`s&VY CG;}an!r).=}or*V9q?a8D/z%\/y(i2!0NE>w Y(? _,F?R90gyMC&#=&cQ%Sdz?U;x f }/]kZ[z^I _j$q+5]%ozo'o\ \8[No-~;qAAALJIa$.e#8 iN*(YJt^% ^2\]=c,]zXVskt{ph1xzL Ryg6[.,M.%t$S*k)$e$/$iX]H@@_!eYSMcFd3fA:C [U9J$+|7@s.E;YVSV; Z VG &MKqMVkb|E!WCCBpg!+\'rx2 @{YB Io^|{+Y}s$s]N ae 6)ZOx^zJ|3 .NjGq Hs/J ?&+bl/2=Ukr:x*SD _sj}vua`XY }477c}s'F2T}tp+$  suNRdr;JgAK]<5g=?m. Iv *ilAr X^#Xf5]kmt#@v,Q{LBtF CIsbVM#VtG ]oPL +*o(@VwzC(euRL)?0f{yUCq`v)q@N ?#~TMnHY_ #FBz xPy-"WA|BL(f\j a=Dn&{ |h! xPw*DJN J|GGTCdxO_ qUMlKi#&-WS_'K-hOQVEO^&DDEr$ggZV!U ]WO+nh"1UZSzrX9wq.oo7n_ 4k^Y)HfjW!g jevA\:m  f'u58e {-sC~:r; oB]PuM[AT(}ir|*%GDw|x/6\B &$|>t 6HRPALo3/z U@`pWKa 6 |Zrb!.m#_EbeC Ng@?pLow.Xr)/M{KD MYa(A3; Y"d3KWAC`V!||s~V(p7@OTq~QO \{m9J$I$[:u}] d ,x*NNJU5\"hRdI!S &A@N0:G8v :t?!Ld-Z%}7.!lar>P5:h1kSE1C#9SJV6S*$B.KY_pb9^%7Ba'=FqXwS' 60j3_1xB OI2c7.YPQi-FcX@S":' ,2HiO?mt?`P"`T?4o"oraw)"}g[&/W_Ar%k-jCGJ bZGYp @.;fLcyTm'+,HljD^IgK{0 ]@PnRj'=O.4Wt/p"O&TLx^wn!jki`tFgomM$F-FO7KA+e^(ptWe/vkmdA4gS"*]#_C  E|fK1v0F\ICfq13ic7Y$D@U Y!mAx6xT&Ro&kK'"r 6-2EZ+>0Ho^LG(-CM^TaF/'myb 5V89 yX6 LJn~8\2_& S@7U/FFEjJo; aHTr. fv9GD@;J'BbRi ~FBWYP"FZZd(A d&18]V)_'0"1e(NpKg>WLEN4W#\@A MfEk90%~.0AgT*?FHMW5&/'D ,?;!fa}Ez=611M cf=zn A*J VIE 2+B0+;v@;a#K[C)G '9([|?UixQ!Fi5''6e b}?{t(,)p|EQQ-`3f<+"x@N!D1UMD0mlOl=0hgk CGNFWrE^KX,.! s]Rsoug(Im#C7fBOj[YcM[`~:IMT OP.yBUDfVnxkKEIR@q#Y=`xf{-v!I* 0}Y@j!QW8-r-1 8#.h'n^+F~wLa9Z4Pd8<% z`o/XiCT{ 3*'Zvq|`jd;? C!va0kF@2q]3MRik3?JX&`fOe 'S9,O|=MQ_|p!>OfnF'c(MS8)k^na-<gm2 e9>gg>K 0G< Y\uA Q]~l7h L?{ *H<;CeG;6Z. r8Q}O$%`d,cBDS.Zw0Dhy } W qel2 OpsrG 2bA~@kv~.%pFjJ/J(_PGW{Yw|USYzf1j=5KX 9Ur9=,XYOYM}hcl#79Z{F{-@pl6\\FN]>;A, +6E/A1jJTBFX]e/?r|\fXPu`;@R!#FP' ((L.8e;xH[(1: ?SC_DLS>$77Q( eKv(m _6?l4Ppx8%#4U)O/(A @B(VJ)n`M1;]EJSCV*(-0wvu24|E$s-yd+tyG|\w2&KJ6)09Q febP?e+iukn}p.9;(dtu6^*Q\Qto=?!0Qo+WG17it/^B") XzJ] }Ozvm6?r?O_uB^Y \AW{DF  Q}A?N9_ JuAr xQ(D>Q8.6bAc3s"jn9@?%CW>k2-t=,*{Eha<:gRWQ 7>(RWJ`TR%VsT\:O2][1'%yNc'F\EM9H&(u(cd!81ZrTa'Zc9$|'39WT mC^YP%h G4M,/?JS w i ]>^B`1{nOIXH Nk 38@FBt "k"V8Z&v(!=kDW\ CnW#Rjazz9A !\V-+/q:8|8[$-JFA 249^ ^ZdP]g XVK w7uf f H!G6zM C q2<&aZESK%x?)z/x,y/3$W V~3v::Yoxb jZ"'S5a)&J2o1[@`A.PBAZ#|U p&TB"P"I? { /CA3tMd|r.n+z%;AKp~00nmm HuM1h]~?z&$i'({jJ9+mDNuF` l}t`g=?v7<'uy~K6_.52rd2/i ?O\()Yp"'Gh3~ -; uGnz4l.N { Hx_d{y%z:BDv"A8b_6wlfGxj5`H&(dQN~dG~T2;zHy-tL'm {szb/oE6E Q*1 DPCO]lpXG7zefZ\1(qW1!#b_EcRxmR.XA9&DvDda2#r<*0BHNvV M ic;15RGFiG+{|#8uctq0_$w"6{R9%BK]D& wKdwh:b;/Ko\j c|I-e~jI_TOtd< Oh2q naIk6$,*sOXK0?( \Z`I9`A^ DO7'Ho3XE~|?.OjJR2dSa /p5pQw,puEndl%X|u^9=9D3G0{K`j`FFd)32$OrM37P6o zkf<~1f;_ SIo?. UNc_EBTWC-:;T%B@b tL] pe,R_kuQ}(d{=H\.|[*G9#Xq>X['}:"mQKl+1) /LX<_n:_;b#n(  S;3 tXp'C(B_sizSu$vl7Ttfw0:R T-xP{B Jq4Q'-N 12CBAR9sUy*x%}pJ*C[RHtHlXm<9$hku`ra~tB& UBSdq8Z G}s="(VUH:m_#*U0^6m%'!F]Eg_ yf^et(^e"D'g>5 YOT9QVn(S C$4U\P_W#Y]H7vs=GE3OM.MMA ]:SSZ/T49] l9/_4a\qkEl$ @|wzVR )@!WR?RWBbhQ\-H| gu<JqYNCz d'q:7Uv\6/CD6F;2 _e>Wz_\]?*[@Gw?m ^'x>aMZd'j^zu,XB&zh RY{jpS/!yX@ &~%D(e8L ts}&P]8^qy7G/+b + Q$u`NU)FVYIuM",uxy0Pgga. _SS&kQ m4C[]Qm\U)Y%* s'vgoT.9is{!5buO`ixQ6+^qG#w)rPBgyq_(9{N n.D=o9kI`%Qq]]@>3@F*U}!^;Vx" ]*L8=7Yb?d~eADCKQ@O]qKE5!'a2nnmXsuSYBf4z27`MK{A/:((t)@}41vdug[*_(?rkKz+Qlu#S*A 4IsJ!`7eXpxM{?VRA5jycG+,l",t#%f_8dG+ew|s9C&ibX4 Jib+X~o9DrPvW*'>]W :_T{@b)x!_7V3{qE?>=YL9C(acs"kmi8D{O2s(:?(}Q4"Ourr`ejs2q+'kMB1|%' $@]QPw10^o YsMzatep"mq1WAda Eny?bQWM%6 rdTERWN [Hmj@ KLBu)_M3eY}WO^.C7{ (H5'{(bS]U(GVTXc&jg +)H^dh* ?( :^X  Y^ I{!MJAc#(mGgT)@Gc0LC9]}VV;*{CU> ZI}0XV@EZ'"SLeRMGk;(^Yr^-0aW5V%E[a]0xTVYC Ygxw1yz 0"`^:CLj1?wvO xmG)+zcK( 6Tij=Gp~1x'z0gEm%yl6'km:',dFH8#=m)aiA3q@5W.V[ %vxDbpf;a5=w 9 qb3*HA%in:j.*$_@ +1/9$#5n[O\Vf r-{"- l"f6d!uxzsx GKz'jz36WLh 2 then { julian_year := year julian_month := month + 1 } else { julian_year := year - 1 julian_month := month + 13 } jul := (integer(365.25 * julian_year) + integer(30.6001 * julian_month) + day + 1720995) if day + 31 * (month + 12 * year) >= gregorian then { ja := integer(0.01 * julian_year) jul +:= 2 - ja + integer(0.25 * ja) } return jul end *[V9.IPL.PROCS]JUMPQUE.ICN;1+, ?./ 4_-OOw0123KPWO56Q7Q89Jj$GHJ############################################################################ # # File: jumpque.icn # # Subject: Procedure to jump element to head of queue # # Author: Ralph E. Griswold # # Date: May 9, 1992 # ############################################################################ # # jumpque(queue, y) moves y to the head of the queue if it is in queue # but just adds y to the head of the queue if it is not already in # the queue. A copy of queue is returned; the argument is not modified. # ############################################################################ procedure jumpque(queue, y) local x queue := copy(queue) every 1 to *queue do { # delete y from queue if it's there x := get(queue) if x ~=== y then put(queue, x) } push(queue, y) # insert y at the head of queue return queue end e*[V9.IPL.PROCS]LABELER.ICN;1+, 7./ 4-OOw0123KPWO56`5p7@^p89Jj$GHJf VMS.BCK 7OOw9.IPL.PROCS]LABELER.ICN;11############################################################################ # # File: labeler.icn # # Subject: Procedure to produce successive labels # # Author: Gregg M. Townsend # # Date: April 9, 1993 # ############################################################################ # # This procedure produces a new label in sequence each time it's called. # The labels consist of all possible combinations of the characters given # in the argument the first time it is called. See star(s) in gener.icn # for a generator that does the same thing (and much more concisely). # ############################################################################ # # Increment a counter and convert to a label. procedure label(chars) static s, abet local i initial { abet := string(chars) # initialize alphabet s := abet[1] # initialize string return s } i := *s # start with last `digit' while s[i] == abet[*abet] do { # while need to `carry' s[i] := abet[1] # reset digit i -:= 1 # move left one digit if i = 0 then # if no more digits return s := abet[1] || s # lengthen string } s[i] := abet[find(s[i],abet)+1] # normal case: incr one digit return s end *[V9.IPL.PROCS]LARGE.ICN;1+,F &./ 4-OOw0123KPWO56P-{7H{89Jj$GHJ############################################################################ # # File: large.icn # # Subject: Procedure to identify large integers # # Author: Ralph E. Griswold # # Date: May 25, 1994 # ############################################################################ # # large(i) returns i if i is a large integer but fails otherwise. # # Note: At the source-language level, "native" integers and "large" # integers have the same type, "integer". The creation of a large # integer causes storage allocation, which this procedure detects. # ############################################################################ procedure large(i) local mem mem := &allocated i +:= 0 if &allocated > mem then return i else fail end #*[V9.IPL.PROCS]LARGINT.ICN;1+, D. / 4 !-OOw0123KPWO 56Q7+R89Jj$GHJ############################################################################ # # File: largint.icn # # Subject: Procedures for large integer arithmetic # # Authors: Paul Abrahams and Ralph E. Griswold # # Date: May 11, 1989 # ############################################################################ # # These procedures perform addition, multiplication, and exponentiation # On integers given as strings of numerals: # # add(i,j) sum of i and j # # mpy(i,j) product of i and j # # raise(i,j) i to the power j # # Note: # # The techniques used by add and mpy are different from those used by # raise. These procedures are combined here for organizational reasons. # The procedures add and mpy are adapted from the Icon language book. # The procedure raise was written by Paul Abrahams. # ############################################################################ record largint(coeff,nextl) global base, segsize # Add i and j # procedure add(i,j) return lstring(addl(large(i),large(j))) end # Multiply i and j # procedure mpy(i,j) return lstring(mpyl(large(i),large(j))) end # Raise i to power j # procedure raise(i,j) return rstring(ipower(i,binrep(j))) end procedure addl(g1,g2,carry) local sum /carry := largint(0) # default carry if /g1 & /g2 then return if carry.coeff ~= 0 then carry else &null if /g1 then return addl(carry,g2) if /g2 then return addl(g1,carry) sum := g1.coeff + g2.coeff + carry.coeff carry := largint(sum / base) return largint(sum % base,addl(g1.nextl,g2.nextl,carry)) end procedure large(s) initial { base := 10000 segsize := *base - 1 } if *s <= segsize then return largint(integer(s)) else return largint(right(s,segsize), large(left(s,*s - segsize))) end procedure lstring(g) local s if /g.nextl then s := g.coeff else s := lstring(g.nextl) || right(g.coeff,segsize,"0") s ?:= (tab(upto(~'0') | -1) & tab(0)) return s end procedure mpyl(g1,g2) local prod if /(g1 | g2) then return &null # zero product prod := g1.coeff * g2.coeff return largint(prod % base, addl(mpyl(largint(g1.coeff),g2.nextl),mpyl(g1.nextl,g2), largint(prod / base))) end # Compute the binary representation of n (as a string) # procedure binrep(n) local retval retval := "" while n > 0 do { retval := n % 2 || retval n /:= 2 } return retval end # Compute a to the ipower bbits, where bbits is a bit string. # The result is a list of coefficients for the polynomial a(i)*k^i, # least significant values first, with k=10000 and zero trailing coefficient # deleted. # procedure ipower(a, bbits) local b, m1, retval m1 := (if a >= 10000 then [a % 10000, a / 10000] else [a]) retval := [1] every b := !bbits do { (retval := product(retval, retval)) | fail if b == "1" then (retval := product(retval, m1)) | fail } return retval end # Compute a*b as a polynomial in the same form as for ipower. # a and b are also polynomials in this form. # procedure product(a,b) local i, j, k, retval, x if *a + *b > 5001 then fail retval := list(*a + *b, 0) every i := 1 to *a do every j := 1 to *b do { k := i + j - 1 retval[k] +:= a[i] * b[j] while (x := retval[k]) >= 10000 do { retval[k + 1] +:= x / 10000 retval[k] %:= 10000 k +:= 1 } } every i := *retval to 1 by -1 do if retval[i] > 0 then return retval[1+:i] return retval[1+:i] end procedure rstring(n) local ds, i, j, k, result ds := "" every k := *n to 1 by -1 do ds ||:= right(n[k], 4, "0") ds ?:= (tab(many("0")), tab(0)) ds := repl("0", 4 - (*ds - 1) % 5) || ds result := "" every i := 1 to *ds by 50 do { k := *ds > i + 45 | *ds every j := i to k by 5 do { ds result ||:= ds[j+:5] } } result ? { tab(many('0')) return tab(0) } end fA VMS.BCK dOOw[V9.IPL.PROCS]LASTNAME.ICN;1b*[V9.IPL.PROCS]LASTNAME.ICN;1+, d./ 4-OOw0123KPWO56@4R7@JYR89Jj$GHJ############################################################################ # # File: lastname.icn # # Subject: Procedure to produce last name # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # Produces the last name of a name in conventional form. Obviously, it # doesn't work for every possibility. # ############################################################################ procedure lastname(s) local line, i while line := trim(s) do { line ?:= tab(upto(',')) # Get rid of things like " ... , Jr." line ? { every i := upto(' ') tab(\i + 1) return tab(0) } } end *[V9.IPL.PROCS]LCOMB.ICN;1+, U./ 4[-OOw0123KPWO56``R7 }R89Jj$GHJ############################################################################ # # File: lcomb.icn # # Subject: Procedure to generate lists of combinations # # Author: Ralph E. Griswold # # Date: September 8, 1992 # ############################################################################ # # This procedure generates the combinations of items in a list. # ############################################################################ procedure lcomb(L,i) local j if i < 1 then fail suspend if i = 1 then [!L] else [L[j := 1 to *L - i + 1]] ||| lcomb(L[j + 1:0],i - 1) end l*[V9.IPL.PROCS]LCSEVAL.ICN;1+,G *./ 4-OOw0123KPWO56PQ{7PXv{89Jj$GHJ############################################################################ # # File: lcseval # # Subject: Procedure to evaluate linear congruence parameters # # Author: Ralph E. Griswold # # Date: June 11, 1994 # ############################################################################ # # rcseval(a, c, m) evaluates the constants used in a linear congruence # recurrence for generating a sequence of pseudo-random numbers. # a is the multiplicative constant, c is the additive constant, and # m is the modulus. # # Any line of output starting with asterisks indicates a problem. # # See Donald E. Knuth, "Random Numbers" in The Art of Computer Programming, # Vol. 2, Seminumerical Algorithms, Addison-Wesley, Reading, Massachusetts, # 1969, pp. 1-160. # ############################################################################ # # Deficiency: The modulus test for a assumes m is a power of 2. # ############################################################################ # # Requires: large integers # ############################################################################ procedure lcseval(a, c, m) local b, s write("a=", a, " (should not have a regular pattern of digits)") write("c=", c) write("m=", m, " (should be large)") if (m / 100) < a < (m - sqrt(m)) then write("a passes range test") else write("*** a fail range test") if a % 8 = 5 then write("a passes mod test") else write("*** a fails mod test") if (c % m) ~= 0 then write("c relatively prime to m") else write("*** c not relatively prime to m") write("c/m=", c / real(m), " (should be approximately 0.211324865405187)") b := a - 1 every s := seq() do if (b ^ s) % m = 0 then stop("potency=", s, " (should be at least 5)") end *[V9.IPL.PROCS]LINDGEN.ICN;1+, &./ 4-OOw0123KPWO56Pt7`u89Jj$GHJ############################################################################ # # File: lindgen.icn # # Subject: Procedure for rewriting 0L-systems # # Author: Ralph E. Griswold # # Date: July 7, 1993 # ############################################################################ # # Assumes a "full" mapping table. # # Note that the first argument is a single character. At the top level # it might be called as # # lindgen(!axiom, rewrite, gener) # ############################################################################ procedure lindgen(c, rewrite, gener) if gener = 0 then suspend c else suspend lindgen(!rewrite[c], rewrite, gener - 1) end *[V9.IPL.PROCS]LINDREC.ICN;1+, &./ 4-OOw0123KPWO56 u78.u89Jj$GHJ############################################################################ # # File: lindrec.icn # # Subject: Record declarations for L-systems # # Author: Ralph E. Griswold # # Date: April 14, 1993 # ############################################################################ # # These declarations are provided for representing Lindenmayer systems # as records. # ############################################################################ record lsys_0l(axiom, rewrite, gener, length, delta) #*[V9.IPL.PROCS]LIST2TAB.ICN;1+, F./ 4-OOw0123KPWO56 R7R89Jj$GHJQ; VMS.BCK FOOw[V9.IPL.PROCS]LIST2TAB.ICN;1############################################################################ # # File: list2tab.icn # # Subject: Procedure to write list as tab-separated string # # Author: Ralph E. Griswold # # Date: May 21, 1992 # ############################################################################ # # This procedure writes a list as a tab-separated string. # Carriage returns in files are converted to vertical tabs. # ############################################################################ # # See also: tab2list.icn, tab2rec.icn, rec2tab.icn # ############################################################################ procedure list2tab(L) every writes(map(L[1 to *L - 1], "\n", "\v"),"\t") write(map(L[-1], "\n", "\v")) return end #*[V9.IPL.PROCS]LMAP.ICN;1+, O./ 4-OOw0123KPWO56@0S78S89Jj$GHJ ############################################################################ # # File: lmap.icn # # Subject: Procedure to map list elements # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # The procedure lmap(L1,L2,L3) maps elements of L1 according to L2 # and L3. This procedure is the analog for lists of the built-in # string-mapping function map(s1,s2,s3). Elements in L1 that are # the same as elements in L2 are mapped into the corresponding ele- # ments of L3. For example, given the lists # # L1 := [1,2,3,4] # L2 := [4,3,2,1] # L3 := ["a","b","c","d"] # # then # # lmap(L1,L2,L3) # # produces a new list # # ["d","c","b","a"] # # Lists that are mapped can have any kinds of elements. The # operation # # x === y # # is used to determine if elements x and y are equivalent. # # All cases in lmap are handled as they are in map, except that # no defaults are provided for omitted arguments. As with map, lmap # can be used for transposition as well as substitution. # # Warning: # # If lmap is called with the same lists L2 and L3 as in # the immediately preceding call, the same mapping is performed, # even if the values in L2 and L3 have been changed. This improves # performance, but it may cause unexpected effects. # # This ``caching'' of the mapping table based on L2 and L3 # can be easily removed to avoid this potential problem. # ############################################################################ procedure lmap(L1,L2,L3) static lmem2, lmem3, lmaptbl, tdefault local i, a initial tdefault := [] if type(a := L1 | L2 | L3) ~== "list" then runerr(108,a) if *L2 ~= *L3 then runerr(208,L2) L1 := copy(L1) if not(lmem2 === L2 & lmem3 === L3) then { # if an argument is new, rebuild lmem2 := L2 # save for future reference lmem3 := L3 lmaptbl := table(tdefault) # new mapping table every i := 1 to *L2 do # build the map lmaptbl[L2[i]] := L3[i] } every i := 1 to *L1 do # map the values L1[i] := (tdefault ~=== lmaptbl[L1[i]]) return L1 end *[V9.IPL.PROCS]LONGSTR.ICN;1+, D./ 4-OOw0123KPWO56бI7 J89Jj$GHJ ############################################################################ # # File: longstr.icn # # Subject: Procedure to match longest string # # Authors: Jerry Nowlin, Stephen B. Wampler, Kenneth Walker, Bob # Alexander, and Richard E. Goerwitz # # Date: June 1, 1991 # ############################################################################ # # Version: 1.9 # ############################################################################ # # longstr(l,s,i,j) works like any(), except that instead of taking a # cset as its first argument, it takes instead a list or set of # strings (l). Returns i + *x, where x is the longest string in l # for which match(x,s,i,j) succeeds. Fails if no match occurs. # # Defaults: # s &subject # i &pos if s is defaulted, otherwise 1 # j 0 # # Errors: # The only manual error-checking that is done is to test l to # be sure it is, in fact, a list or set. Errors such as non- # string members in l, and non-integer i/j parameters, are # caught by the normal Icon built-in string processing and sub- # scripting mechanisms. # ############################################################################ procedure longstr(l,s,i,j) local elem, tmp_table static l_table initial l_table := table() # # No-arg invocation wipes out all static structures, and forces an # immediate garbage collection. # if (/l, /s) then { l_table := table() collect() # do it NOW return # return &null } # # Is l a list, set, or table? # type(l) == ("list"|"set"|"table") | stop("longstr: list, set, or table expected (arg 1)") # # Sort l longest-to-shortest, and keep a copy of the resulting # structure in l_table[l] for later use. # if /l_table[l] := [] then { tmp_table := table() # keys = lengths of elements, values = elements every elem := !l do { /tmp_table[*elem] := [] put(tmp_table[*elem], elem) } # sort by key; stuff values, in reverse order, into a list every put(l_table[l], !sort(tmp_table,3)[*tmp_table*2 to 2 by -2]) } # # First element in l_table[l] to match is the longest match (it's # sorted longest-to-shortest, remember?). # return match(!l_table[l],s,i,j) end *[V9.IPL.PROCS]LPERMUTE.ICN;1+, 4./ 4D-OOw0123KPWO56S7`MS89Jj$GHJ############################################################################ # # File: lpermute.icn # # Subject: Procedure to permute elements in a list # # Author: Ralph E. Griswold # # Date: September 8, 1992 # ############################################################################ # # This procedure generates the permutations of elements in a list. # ############################################################################ procedure lpermute(L) local i if *L = 0 then return []^ VMS.BCK 4OOw[V9.IPL.PROCS]LPERMUTE.ICN;1 suspend [L[i := 1 to *L]] ||| lpermute(L[1:i] ||| L[i+1:0]) end *[V9.IPL.PROCS]LROTATE.ICN;1+, 8./ 4-OOw0123KPWO56gp7 p89Jj$GHJ############################################################################ # # File: lrotate.icn # # Subject: Procedure to rotate list # # Author: Ralph E. Griswold # # Date: May 28, 1993 # ############################################################################ # # lrotate(L, i) rotates L by i elements, default 1. Positive i produces # right rotation, negative left. # ############################################################################ procedure lrotate(L, i) /i := 1 if i > 0 then every 1 to i do put(L, get(L)) else every 1 to -i do push(L, pull(L)) return end o*[V9.IPL.PROCS]LSCAN.ICN;1+, 9./ 4`-OOw0123KPWO56 uS7GT89Jj$GHJ############################################################################ # # File: lscan.icn # # Subject: Procedures for scanning for lists # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.22 # ############################################################################ # # PURPOSE: String scanning is terrific, but often I am forced to # tokenize and work with lists. So as to make operations on these # lists as close to corresponding string operations as possible, I've # implemented a series of list analogues to any(), bal(), find(), # many(), match(), move(), pos(), tab(), and upto(). Their names are # just like corresponding string functions, except with a prepended # "l_" (e.g. l_any()). Functionally, the list routines parallel the # string ones closely, except that in place of strings, l_find and # l_match accept lists as their first argument. L_any(), l_many(), # and l_upto() all take either sets of lists or lists of lists (e.g. # l_tab(l_upto([["a"],["b"],["j","u","n","k"]])). Note that l_bal(), # unlike the builtin bal(), has no defaults for the first four # arguments. This just seemed appropriate, given that no precise # list analogue to &cset, etc. occurs. # # The default subject for list scans (analogous to &subject) is # l_SUBJ. The equivalent of &pos is l_POS. Naturally, these # variables are both global. They are used pretty much like &subject # and &pos, except that they are null until a list scanning # expression has been encountered containing a call to l_Bscan() (on # which, see below). # # Note that environments cannot be maintained quite as elegantly as # they can be for the builtin string-scanning functions. One must # use instead a set of nested procedure calls, as explained in the # _Icon Analyst_ 1:6 (June, 1991), p. 1-2. In particular, one cannot # suspend, return, or otherwise break out of the nested procedure # calls. They can only be exited via failure. The names of these # procedures, at least in this implementation, are l_Escan and # l_Bscan. Here is one example of how they might be invoked: # # suspend l_Escan(l_Bscan(some_list_or_other), { # l_tab(10 to *l_SUBJ) & { # if l_any(l1) | l_match(l2) then # old_l_POS + (l_POS-1) # } # }) # # Note that you cannot do this: # # l_Escan(l_Bscan(some_list_or_other), { # l_tab(10 to *l_SUBJ) & { # if l_any(l1) | l_match(l2) then # suspend old_l_POS + (l_POS-1) # } # }) # # Remember, it's no fair to use suspend within the list scanning # expression. l_Escan must do all the suspending. It is perfectly OK, # though, to nest well-behaved list scanning expressions. And they can # be reliably used to generate a series of results as well. # ############################################################################ # # Here's another simple example of how one might invoke the l_scan # routines: # # procedure main() # # l := ["h","e","l","l","o"," ","t","t","t","h","e","r","e"] # # l_Escan(l_Bscan(l), { # hello_list := l_tab(l_match(["h","e","l","l","o"])) # every writes(!hello_list) # write() # # # Note the nested list-scanning expressions. # l_Escan(l_Bscan(l_tab(0)), { # l_tab(l_many([[" "],["t"]]) - 1) # every writes(!l_tab(0)) # write() # }) # }) # # end # # The above program simply writes "hello" and "there" on successive # lines to the standard output. # ############################################################################ # # PITFALLS: In general, note that we are comparing lists here instead # of strings, so l_find("h", l), for instance, will yield an error # message (use l_find(["h"], l) instead). The point at which I # expect this nuance will be most confusing will be in cases where # one is looking for lists within lists. Suppose we have a list, # # l1 := ["junk",[["hello"]," ",["there"]],"!","m","o","r","e","junk"] # # and suppose, moreover, that we wish to find the position in l1 at # which the list # # [["hello"]," ",["there"]] # # occurs. If, say, we assign [["hello"]," ",["there"]] to the # variable l2, then our l_find() expression will need to look like # # l_find([l2],l1) # ############################################################################ # # Extending scanning to lists is really very difficult. What I think # (at least tonight) is that scanning should never have been # restricted to strings. It should have been designed to operate on # all homogenous one-dimensional arrays (vectors, for you LISPers). # You should be able, in other words, to scan vectors of ints, longs, # characters - any data type that seems useful. The only question in # my mind is how to represent vectors as literals. Extending strings # to lists goes beyond the bounds of scanning per-se. This library is # therefore something of a stab in the dark. # ############################################################################ global l_POS global l_SUBJ record l_ScanEnvir(subject,pos) procedure l_Bscan(e1) # # Prototype list scan initializer. Based on code published in # the _Icon Analyst_ 1:6 (June, 1991), p. 1-2. # local l_OuterEnvir initial { l_SUBJ := [] l_POS := 1 } # # Save outer scanning environment. # l_OuterEnvir := l_ScanEnvir(l_SUBJ, l_POS) # # Set current scanning environment to subject e1 (arg 1). PoTla VMS.BCK 9OOw[V9.IPL.PROCS]LSCAN.ICN;1;1| s # defaults to 1. Suspend the saved environment. Later on, the # l_Escan procedure will need this in case the scanning expres- # sion as a whole sends a result back to the outer environment, # and the outer environment changes l_SUBJ and l_POS. # l_SUBJ := e1 l_POS := 1 suspend l_OuterEnvir # # Restore the saved environment (plus any changes that might have # been made to it as noted in the previous run of comments). # l_SUBJ := l_OuterEnvir.subject l_POS := l_OuterEnvir.pos # # Signal failure of the scanning expression (we're done producing # results if we get to here). # fail end procedure l_Escan(l_OuterEnvir, e2) local l_InnerEnvir # # Set the inner scanning environment to the values assigned to it # by l_Bscan. Remember that l_SUBJ and l_POS are global. They # don't need to be passed as parameters from l_Bscan. What # l_Bscan() needs to pass on is the l_OuterEnvir record, # containing the values of l_SUBJ and l_POS before l_Bscan() was # called. l_Escan receives this "outer environment" as its first # argument, l_OuterEnvir. # l_InnerEnvir := l_ScanEnvir(l_SUBJ, l_POS) # # Whatever expression produced e2 has passed us a result. Now we # restore l_SUBJ and l_POS, and send that result back to the outer # environment. # l_SUBJ := l_OuterEnvir.subject l_POS := l_OuterEnvir.pos suspend e2 # # Okay, we've resumed to (attempt to) produce another result. Re- # store the inner scanning environment (the one we're using in the # current scanning expression). Remember? It was saved in l_Inner- # Envir just above. # l_SUBJ := l_InnerEnvir.subject l_POS := l_InnerEnvir.pos # # Fail so that the second argument (the one that produced e2) gets # resumed. If it fails to produce another result, then the first # argument is resumed, which is l_Bscan(). If l_Bscan is resumed, it # will restore the outer environment and fail, causing the entire # scanning expression to fail. # fail end procedure l_move(i) /i & stop("l_move: Null argument.") if /l_POS | /l_SUBJ then stop("l_move: Call l_Bscan() first.") # # Sets l_POS to l_POS+i; suspends that portion of l_SUBJ extending # from the old l_POS to the new one. Resets l_POS if resumed, # just the way matching procedures are supposed to. Fails if l_POS # plus i is larger than l_SUBJ+1 or if l_POS+i is less than 1. # suspend l_SUBJ[.l_POS:l_POS <- (0 < (*l_SUBJ+1 >= l_POS+i))] end procedure l_tab(i) /i & stop("l_tab: Null argument.") if /l_POS | /l_SUBJ then stop("l_tab: Call l_Bscan() first.") if i <= 0 then suspend l_SUBJ[.l_POS:l_POS <- 0 < (*l_SUBJ+1 >= (*l_SUBJ+1)+i)] else suspend l_SUBJ[.l_POS:l_POS <- 0 < (*l_SUBJ+1 >= i)] end procedure l_any(l1,l2,i,j) # # Like any(c,s2,i,j) except that the string & cset arguments are # replaced by list arguments. l1 must be a list of one-element # lists, while l2 can be any list (l_SUBJ by default). # local x, sub_l /l1 & stop("l_any: Null first argument!") if type(l1) == "set" then l1 := sort(l1) /l2 := l_SUBJ if \i then { if i < 1 then i := *l2 + (i+1) } else i := \l_POS | 1 if \j then { if j < 1 then j := *l2 + (j+1) } else j := *l_SUBJ+1 (i+1) > j & i :=: j every sub_l := !l1 do { if not (type(sub_l) == "list", *sub_l = 1) then stop("l_any: Elements of l1 must be lists of length 1.") # Let l_match check to see if i+1 is out of range. if x := l_match(sub_l,l2,i,i+1) then return x } end procedure l_match(l1,l2,i,j) # # Analogous to match(s1,s2,i,j), except that s1 and s2 are lists, # and l_match returns the next position in l2 after that portion # (if any) which is structurally identical to l1. If a match is not # found, l_match fails. # local default_val if /l1 then stop("l_match: Null first argument!") if type(l1) ~== "list" then stop("l_match: Call me with a list as the first arg.") if /l2 := l_SUBJ then default_val := \l_POS | 1 else default_val := 1 if \i then { if i < 1 then i := *l2 + (i+1) } else i := default_val if \j then { if j < 1 then j := *l2 + (j+1) } else j := *l_SUBJ+1 i + *l1 > j & i :=: j i + *l1 > j & fail if l_comp(l1,l2[i+:*l1]) then return i + *l1 end procedure l_comp(l1,l2) # # List comparison routine basically taken from Griswold & Griswold # (1st ed.), p. 174. # local i /l1 | /l2 & stop("l_comp: Null argument!") l1 === l2 & (return l2) if type(l1) == type(l2) == "list" then { *l1 ~= *l2 & fail every i := 1 to *l1 do l_comp(l1[i],l2[i]) | fail return l2 } end procedure l_find(l1,l2,i,j) # # Like the builtin find(s1,s2,i,j), but for lists. # local x, old_l_POS, default_val /l1 & stop("l_find: Null first argument!") if /l2 := l_SUBJ then default_val := \l_POS | 1 else default_val := 1 if \i then { if i < 1 then i := *l2 + (i+1) } else i := default_val if \j then { if j < 1 then j := *l2 + (j+1) } else j := *l_SUBJ+1 # # See l_upto() below for a discussion of why things have to be done # in this manner. # old_l_POS := l_POS suspend l_Escan(l_Bscan(l2[i:j]), { l_tab(1 to *l_SUBJ) & { if l_match(l1) then old_l_POS + (l_POS-1) } }) end procedure l_upto(l1,l2,i,j) # # See l_any() above. This procedure just moves through l2, calling # l_any() for each member of l2[i:j]. # local old_l_POS, default_val /l1 & stop("l_upto: Null first argument!") if type(l1) == "set" then l1 := sort(l1) if /l2 := l_SUBJ then default_val := \l_POS | 1 else default_val := 1 if \i then { if i < 1 then i := *l2 + (i+1) } else i := default_val if \j then { if j < 1 then j := *l2 + (j+1) } else j := *l_SUBJ+1 # # Save the old pos, then try arb()ing through the list to see if we # can do an l_any(l1) at any position. # old_l_POS := l_POS suspend l_Escan(l_Bscan(l2[i:j]), { l_tab(1 to *l_SUBJ) & { if l_any(l1) then old_l_POS + (l_POS-1) } }) # # Note that it WILL NOT WORK if you say: # # l_Escan(l_Bscan(l2[i:j]), { # l_tab(1 to *l_SUBJ) & { # if l_any(l1) then # suspend old_l_POS + (l_POS-1) # } # }) # # If we are to suspend a result, l_Escan must suspend that result. # Otherwise scanning environments are not saved and/or restored # properly. # end procedure l_many(l1,l2,i,j) local x, old_l_POS, default_val /l1 & stop("l_many: Null first argument!") if type(l1) == "set" then l1 := sort(l1) if /l2 := l_SUBJ then default_val := \l_POS | 1 else default_val := 1 if \i then { if i < 1 then i := *l2 + (i+1) } else i := default_val if \j then { if j < 1 then j := *l2 + (j+1) } else j := *l_SUBJ+1 # # L_many(), like many(), is not a generator. We can therefore # save one final result in x, and then later return (rather than # suspend) that result. # old_l_POS := l_POS l_Escan(l_Bscan(l2[i:j]), { while l_tab(l_any(l1)) x := old_l_POS + (l_POS-1) }) # # Fails if there was no positional change (i.e. l_any() did not # succeed even once). U VMS.BCK 9OOw[V9.IPL.PROCS]LSCAN.ICN;1N;1# return old_l_POS ~= x end procedure l_pos(i) local x if /l_POS | /l_SUBJ then stop("l_move: Call l_Bscan() first.") if i <= 0 then x := 0 < (*l_SUBJ+1 >= (*l_SUBJ+1)+i) | fail else x := 0 < (*l_SUBJ+1 >= i) | fail if x = l_POS then return x else fail end procedure l_bal(l1,l2,l3,l,i,j) local default_val, l2_count, l3_count, x, position /l1 & stop("l_bal: Null first argument!") if type(l1) == "set" then l1 := sort(l1) # convert to a list if type(l2) == "set" then l1 := sort(l2) if type(l3) == "set" then l1 := sort(l3) if /l2 := l_SUBJ then default_val := \l_POS | 1 else default_val := 1 if \i then { if i < 1 then i := *l2 + (i+1) } else i := default_val if \j then { if j < 1 then j := *l2 + (j+1) } else j := *l_SUBJ+1 l2_count := l3_count := 0 every x := i to j-1 do { if l_any(l2, l, x, x+1) then { l2_count +:= 1 } if l_any(l3, l, x, x+1) then { l3_count +:= 1 } if l2_count = l3_count then { if l_any(l1,l,x,x+1) then suspend x } } end *[V9.IPL.PROCS]LU.ICN;1+,0. / 4 -OOw0123KPWO 56=7 >89Jj$GHJ############################################################################ # # File: lu.icn # # Subject: Procedures for LU manipulation # # Author: Ralph E. Griswold # # Date: November 27, 1992 # ############################################################################ # # Acknowledgement: These procedures are based on algorithms given in # "Numerical Recipes; The Art of Scientific Computing"; William H. Press, # Brian P. Flannery, Saul A. Teukolsky. and William T. Vetterling; # Cambridge University Press, 1986. # ############################################################################ # # lu_decomp(M, I) performs LU decomposition on the square matrix M # using the vector I. Both M and I are modified in the process. The # value returned is +1 or -1 depending on whether the number of row # interchanges is even or odd. lu_decomp() is used in combination with # lu_back_sub() to solve linear equations or invert matrices. # # lu_decomp() fails if the matrix is singular. # # lu_back_sub(M, I, B) solves the set of linear equations M x X = B. M # is the matrix as modified by lu_decomp(). I is the index vector # produced by lu_decomp(). B is the right-hand side vector and return # with the solution vector. M and I are not modified by lu_back_sub() # and can be used in successive calls of lu_back_sub() with different # Bs. # ############################################################################ procedure lu_decomp(M, I) local small, d, n, vv, i, largest, j, sum, k, pivot_val, imax initial small := 1.0e-20 d := 1.0 n := *M if n ~= *M[1] then stop("*** non-square matrix") if n ~= *I then stop("*** index vector incorrect length") vv := list(n, 0.0) # scaling vector every i := 1 to n do { largest := 0.0 every j := 1 to n do largest <:= abs(M[i][j]) if largest = 0.0 then fail # matrix is singular vv[i] := 1.0 / largest } every j := 1 to n do { # Crout's method if j > 1 then { every i := 1 to j - 1 do { sum := M[i][j] if i > 1 then { every k := 1 to i - 1 do sum -:= M[i][k] * M[k][j] M[i][j] := sum } } } largest := 0.0 # search for largest pivot every i := j to n do { sum := M[i][j] if j > 1 then { every k := 1 to j - 1 do sum -:= M[i][k] * M[k][j] M[i][j] := sum } pivot_val := vv[i] * abs(sum) if pivot_val > largest then { largest := pivot_val imax := i } } if j ~= imax then { # interchange rows? every k := 1 to n do { pivot_val := M[imax][k] M[imax][k] := M[j][k] M[j][k] := pivot_val } d := -d # change parity vv[imax] := vv[j] # and scale factor } I[j] := imax if j ~= n then { # divide by the pivot element if M[j][j] = 0.0 then M[j][j] := small # small value is better than pivot_val := 1.0 / M[j][j] # zero for some applications every i := j + 1 to n do M[i][j] *:= pivot_val } } if M[n][n] = 0.0 then M[n][n] := small return d end procedure lu_back_sub(M, I, B) local n, ii, i, ip, sum, j n := *M if n ~= *M[1] then stop("*** matrix not square") if n ~= *I then stop("*** index vector wrong length") if n ~= *B then stop("*** output vector wrong length") ii := 0 every i := 1 to n do { ip := I[i] | stop("failed in line ", &line) sum := B[ip] | stop("failed in line ", &line) B[ip] := B[i] | stop("failed in line ", &line) if ii ~= 0 then every j := ii to i - 1 do sum -:= M[i][j] * B[j] | stop("failed in line ", &line) else if sum ~= 0.0 then ii := i B[i] := sum | stop("failed in line ", &line) } every i := n to 1 by -1 do { sum := B[i] | stop("failed in line ", &line) if i < n then { every j := i + 1 to n do sum -:= M[i][j] * B[j] | stop("failed in line ", &line) } B[i] := sum / M[i][i] | stop("failed in line ", &line) } return end =*[V9.IPL.PROCS]MAPBIT.ICN;1+, =./ 4-OOw0123KPWO56`hUT7sT89Jj$GHJ############################################################################ # # File: mapbit.icn # # Subject: Procedures to map string into bit representation # # Author: Ralph E. Griswold # # Date: January 2, 1990 # ############################################################################ # # The procedure mapbit(s) produces a string of zeros and ones # corresponding to the bit patterns for the characters of s. For # example, mapbit("Axe") produces "010000010111100001100101". # ############################################################################ # # Links: collate # ############################################################################ link collate procedure bilit(text,alpha,first,second) return collate(map(text,alpha,first),map(text,alpha,second)) end procedure mapbit(s) static all, base16, hex1, hex2, quad1, quad2, pair1, pair2 # The following is a bit ornate, but then ... . It could be # made more compact (and cryptic) by using lists of templates Cw VMS.BCK =OOw[V9.IPL.PROCS]MAPBIT.ICN;1;1S# and parameterizing the initialization. initial { all := string(&cset) base16 := "0123456789ABCDEF" hex1 := "" every hex1 ||:= repl(!base16,16) hex2 := repl(base16,16) quad1 := "" every quad1 ||:= repl(!left(base16,4),4) quad2 := repl(left(base16,4),4) pair1 := "" every pair1 ||:= repl(!left(base16,2),2) pair2 := repl(left(base16,2),2) } s := bilit(bilit(bilit(s,all,hex1,hex2),base16,quad1,quad2),left(base16,4), pair1,pair2) return s end *[V9.IPL.PROCS]MAPSTR.ICN;1+,( ,./ 4-OOw0123KPWO56``7u7bu89Jj$GHJ############################################################################ # # File: mapstrs.icn # # Subject: Procedure for map() for strings # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.1 # ############################################################################ # # Mapstrs(s, l1, l2) works like map(), except that instead of taking # ordered character sequences (strings) as arguments 2 and 3, it # takes ordered string sequences (lists). # # Suppose, for example, you wanted to bowdlerize a string by # replacing the words "hell" and "shit" with "heck" and "shoot." You # would call mapstrs as follows: # # mapstrs(s, ["hell", "shit"], ["heck", "shoot"]) # # In order to achieve reasonable speed, mapstrs creates a lot of # static structures, and uses some extra storage. If you want to # replace one string with another, it is overkill. Just use the IPL # replace() routine (in strings.icn). # # If l2 is longer than l1, extra members in l2 are ignored. If l1 is # longer, however, strings in l1 that have no correspondent in l2 are # simply deleted. Mapstr uses a longest-possible-match approach, so # that replacing ["hellish", "hell"] with ["heckish", "heck"] will # work as one would expect. # ############################################################################ # # Links: longstr # ############################################################################ link longstr procedure mapstrs(s, l1, l2) local i, s2 static cs, tbl, last_l1, last_l2 if /l1 | *l1 = 0 then return s if not (last_l1 === l1, last_l2 === l2) then { cs := '' every cs ++:= (!l1)[1] tbl := table() every i := 1 to *l1 do insert(tbl, l1[i], (\l2)[i] | "") } s2 := "" s ? { while s2 ||:= tab(upto(cs)) do s2 ||:= tbl[tab(longstr(l1))] | move(1) s2 ||:= tab(0) } return s2 end #*[V9.IPL.PROCS]MATCHLIB.ICN;1+, B./ 4-OOw0123KPWO56{T7T89Jj$GHJ############################################################################ # # File: matchlib.icn # # Subject: Procedures for lexical matching # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # These procedures perform low-level "lexical" matching for # recursive-descent pattern matchers. # # rb_() match right bracket # lb_() match left bracket # rp_() match right parenthesis # lp_() match left parenthesis # vb_() match vertical bar # nl_() match newline # empty_() match empty string # ############################################################################ # # See also: parsgen.icn # ############################################################################ procedure rb_() suspend =">" end procedure lb_() suspend ="<" end procedure rp_() suspend =")" end procedure lp_() suspend =")" end procedure vb_() suspend ="|" end procedure nl_() suspend ="\n" end procedure empty_() suspend "" end v*[V9.IPL.PROCS]MATH.ICN;1+, B./ 4 -OOw0123KPWO56T7`$U89Jj$GHJ############################################################################ # # File: math.icn # # Subject: Procedures to perform mathematical computations # # Author: George D. Yee # # Date: June 10, 1988 # ############################################################################ # # Note: # Version 8 of Icon supports most of the procedures that follow as # built-in functions. The procedures here should not be used unless the # corresponding functions are disabled. # ############################################################################ # # The following procedures compute standard trigonometric func- # tions. The arguments are in radians. # # sin(x) sine of x # # cos(x) cosine of x # # tan(x) tangent of x # # asin(x) arc sine of x in the range -pi/2 to pi/2 # # acos(x) arc cosine of x in the range 0 to pi # # atan(x) arc tangent of x in the range -pi/2 to pi/2 # # atan2(y,x) arc tangent of x/y in the range -pi to pi # # The following procedures convert from degrees to radians and con- # versely: # # dtor(d) radian equivalent of d # # rtod(r) degree equivalent of r # # The following additional procedures are available: # # sqrt(x) square root of x # # exp(x) exponential function of x # # log(x) natural logarithm of x # # log10(x) base-10 logarithm of x # # floor(x) largest integer not greater than x # # ceil(x) smallest integer nor less than x # # Failure Conditions: asin(x) and acos(x) fail if the absolute # value of x is greater than one. sqrt(x), log(x), and log10(x) # fail if x is less than zero. # ############################################################################ procedure sin(x) return _sinus(numeric(x),0) end procedure cos(x) return _sinus(abs(numeric(x)),1) end procedure tan(x) return sin(x) / (0.0 ~= cos(x)) end # atan returns the value of the arctangent of  LM VMS.BCK BOOw[V9.IPL.PROCS]MATH.ICN;1N;1'its # argument in the range [-pi/2,pi/2]. procedure atan(x) if numeric(x) then return if x > 0.0 then _satan(x) else -_satan(-x) end # atan2 returns the arctangent of y/x # in the range [-pi,pi]. procedure atan2(y,x) local r static pi initial pi := 3.141592653589793238462643 return if numeric(y) & numeric(x) then { if x > 0.0 then atan(y/x) else if x < 0.0 then { r := pi - atan(abs(y/x)) if y >= 0.0 then r else -r } else if x = y = 0.0 then 0.0 # special value if both x and y are zero else if y >= 0.0 then pi/2.0 else -pi/2.0 } end procedure asin(x) if abs(numeric(x)) <= 1.0 then return atan2(x, (1.0-(x^2))^0.5) end procedure acos(x) return 1.570796326794896619231e0 - asin(x) end procedure dtor(deg) return numeric(deg)/57.29577951308232 end procedure rtod(rad) return numeric(rad)*57.29577951308232 end procedure sqrt(x) return (0.0 <= numeric(x)) ^ 0.5 end procedure floor(x) return if numeric(x) then if x>=0.0 | real(x)=integer(x) then integer(x) else -integer(-x+1) end procedure ceil(x) return -floor(-numeric(x)) end procedure log(x) local z, zsq, ex static log2, sqrto2, p0, p1, p2, p3, q0, q1, q2 initial { # The coefficients are #2705 from Hart & Cheney. (19.38D) log2 := 0.693147180559945309e0 sqrto2 := 0.707106781186547524e0 p0 := -0.240139179559210510e2 p1 := 0.309572928215376501e2 p2 := -0.963769093368686593e1 p3 := 0.421087371217979714e0 q0 := -0.120069589779605255e2 q1 := 0.194809660700889731e2 q2 := -0.891110902798312337e1 } if numeric(x) > 0.0 then { ex := 0 while x >= 1.0 do { x /:= 2.0 ex +:= 1 } while x < 0.5 do { x *:= 2.0 ex -:= 1 } if x < sqrto2 then { x *:= 2.0 ex -:= 1 } return ((((p3*(zsq:=(z:=(x-1.0)/(x+1.0))^2)+p2)*zsq+p1)*zsq+p0)/ (((1.0*zsq+q2)*zsq+q1)*zsq+q0))*z+ex*log2 } end procedure exp(x) return 2.718281828459045235360287 ^ numeric(x) end procedure log10(x) return log(x)/2.30258509299404568402 end procedure _sinus(x,quad) local ysq, y, k static twoopi, p0, p1, p2, p3, p4, q0, q1, q2, q3 initial { # Coefficients are #3370 from Hart & Cheney (18.80D). twoopi := 0.63661977236758134308 p0 := 0.1357884097877375669092680e8 p1 := -0.4942908100902844161158627e7 p2 := 0.4401030535375266501944918e6 p3 := -0.1384727249982452873054457e5 p4 := 0.1459688406665768722226959e3 q0 := 0.8644558652922534429915149e7 q1 := 0.4081792252343299749395779e6 q2 := 0.9463096101538208180571257e4 q3 := 0.1326534908786136358911494e3 } if x < 0.0 then { x := -x quad +:= 2 } y := (x *:= twoopi) - (k := integer(x)) if (quad := (quad + k) % 4) = (1|3) then y := 1.0 - y if quad > 1 then y := -y return (((((p4*(ysq:=y^2)+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y) / ((((ysq+q3)*ysq+q2)*ysq+q1)*ysq+q0) end procedure _satan(x) static sq2p1,sq2m1,pio2,pio4 initial { sq2p1 := 2.414213562373095048802e0 sq2m1 := 0.414213562373095048802e0 pio2 := 1.570796326794896619231e0 pio4 := 0.785398163397448309615e0 } return if x < sq2m1 then _xatan(x) else if x > sq2p1 then pio2 - _xatan(1.0/x) else pio4 + _xatan((x-1.0)/(x+1.0)) end procedure _xatan(x) local xsq static p4,p3,p2,p1,p0,q4,q3,q2,q1,q0 initial { # coefficients are #5077 from Hart & Cheney. (19.56D) p4 := 0.161536412982230228262e2 p3 := 0.26842548195503973794141e3 p2 := 0.11530293515404850115428136e4 p1 := 0.178040631643319697105464587e4 p0 := 0.89678597403663861959987488e3 q4 := 0.5895697050844462222791e2 q3 := 0.536265374031215315104235e3 q2 := 0.16667838148816337184521798e4 q1 := 0.207933497444540981287275926e4 q0 := 0.89678597403663861962481162e3 } return x * ((((p4*(xsq:=x^2)+p3)*xsq+p2)*xsq+p1)*xsq+p0) / (((((xsq+q4)*xsq+q3)*xsq+q2)*xsq+q1)*xsq+q0) end *[V9.IPL.PROCS]MATRIX.ICN;1+, 7./ 4-OOw0123KPWO56,U78qU89Jj$GHJ ############################################################################ # # File: matrix.icn # # Subject: Procedures for matrix manipulation # # Author: Stephen B. Wampler and Ralph E. Griswold # # Date: November 27, 1992 # ############################################################################ # # Links: lu # ############################################################################ link lu procedure write_matrix(M) local r, c, row, col r := *M c := *M[1] every row := 1 to r do { writes("[") every col := 1 to c do { writes(M[row][col], ", ") } write("]") } end procedure copy_matrix(M) local M1, n, i n := *M M1 := list(n) every i := 1 to n do M1[i] := copy(M[i]) return M1 end procedure create_matrix(n, m, x) local M M := list(n) every !M := list(m, x) return M end procedure identity_matrix(n, m) local r, c, M M := create_matrix(n, m, 0) every r := 1 to n do { every c := 1 to m do { if r = c then M[r][c] := 1 } } return M end procedure add_matrix(M1, M2) local M3, r, c, n, m if (n := *M1 ~= *M2) | (m := *M1[1] ~= *M2[1]) then stop("*** incorrect matrix sizes") M3 := create_matrix(n, m) every r := 1 to n do every c := 1 to m do M3[r][c] := M1[r][c] + M2[r][c] return M3 end procedure mult_matrix(M1, M2) local M3, r, c, n, k if (n := *M1[1]) ~= *M2 then stop("*** incorrect matrix sizes") M3 := create_matrix(*M1,*M2[1]) every r := 1 to *M1 do { every c := 1 to *M2[1] do { M3[r][c] := 0 every k := 1 to n do { M3[r][c] +:= M1[r][k] * M2[k][c] } } } return M3 end procedure invert_matrix(M) local M1, Y, I, d, i, n, B, j n := *M if n ~= *M[1] then stop("*** matrix not square") M1 := copy_matrix(M) Y := identity_matrix(n, n) I := list(n, 0) # index vector # First perform LH decomposition on M1 (which changes it and produces # an index vector, I. d := lu_decomp(M1, I) | stop("*** singular matrix") every j := 1 to n do { B := list(n) # work on columns every i := 1 to n do B[i] := Y[i][j] lu_back_sub(M1, I, B) # does not change M1 or I every i := 1 to n do # put column in result Y[i][j] := B[i] } return Y end procedure determinant(M) local M1, I, result, i, n n := *M if n ~= *M[1] then stop("*** matrix not square") M1 := copy_matrix(qE VMS.BCK 7OOw[V9.IPL.PROCS]MATRIX.ICN;1 KM) I := list(n, 0) # not used but required by lu_decomp() result := lu_decomp(M1, I) | stop("*** singular matrix") every i := 1 to n do # determinant is produce of diagonal result *:= M1[i][i] # elements of the decomposed matrix return result end *[V9.IPL.PROCS]MEAN.ICN;1+,9 './ 4-OOw0123KPWO560Smw7P^w89Jj$GHJ############################################################################ # # File: mean.icn # # Subject: Procedures to compute means # # Author: Gregg M. Townsend and Ralph E. Griswold # # Date: October 30, 1993 # ############################################################################ # # These procedures compute the arithmetic, geometric, and harmonic # means of a list of values. They all fail if there are no values. # gmean() and hmean() fail if any value is zero. # ############################################################################ procedure amean(L[]) local m if *L = 0 then fail m := 0.0 every m +:= !L return m / *L end procedure gmean(L[]) local m if *L = 0 then fail m := 1.0 every m *:= !L m := abs(m) if m > 0.0 then return exp (log(m) / *L) else fail end procedure hmean(L[]) local m, r if *L = 0 then fail m := 0.0 every r := !L do { if r = 0.0 then fail else m +:= 1.0 / r } return *L / m end *[V9.IPL.PROCS]MEMRFNCS.ICN;1+, 0./ 4e-OOw0123KPWO560p7ϵp89Jj$GHJ############################################################################ # # File: memrfncs.icn # # Subject: Procedures for recursive functions using memory # # Author: Ralph E. Griswold # # Date: April 15, 1993 # ############################################################################ # # These procedures implement commonly referenced ``text-book'' # recursively defined functions using memory to avoid redundant calls. # # a(i, j) Ackermann's function # f(i) Fibonacci sequence # q(i) "Chaotic" sequence # ############################################################################ # # See also: iterfncs.icn and recrfncs.icn # ############################################################################ procedure a(i, j) static memory initial { memory := table() every memory[0 to 100] := table() } if i = 0 then return j + 1 if j = 0 then /memory[i][j] := a(i - 1, 1) else /memory[i][j] := a(i - 1, a(i, j - 1)) return memory[i][j] end procedure f(i) static memory initial { memory := table() memory[1] := memory[2] := 1 } /memory[i] := f(i - 1) + f(i - 2) return memory[i] end procedure q(i) static memory initial { memory := table() memory[1] := memory[2] := 1 } /memory[i] := q(i - q(i - 1)) + q(i - q(i - 2)) return memory[i] end *[V9.IPL.PROCS]MINMAX.ICN;1+, =./ 4-OOw0123KPWO56k7pB@k89Jj$GHJ############################################################################ # # File: minmax.icn # # Subject: Procedures to compute maximum and minimum # # Author: Ralph E. Griswold # # Date: November 26, 1992 # ############################################################################ # # These procedures return the maximum and minimum of an arbitrary # number of numeric arguments. # ############################################################################ procedure min(value[]) local minimum, n minimum := get(value) | fail while n := get(value) do minimum >:= n return minimum end procedure max(value[]) local maximum, n maximum := get(value) | fail while n := get(value) do maximum <:= n return maximum end *[V9.IPL.PROCS]MODELS.ICN;1+, /./ 4-OOw0123KPWO56p7@(q89Jj$GHJ############################################################################ # # File: models.icn # # Subject: Procedure to model Icon functions # # Author: Ralph E. Griswold # # Date: May 1, 1993 # ############################################################################ # # These procedures model built-in Icon functions. Their purpose is # primarily pedagogical. # # See Icon Analyst 11, pp. 5-7. # ############################################################################ procedure tab(i) suspend .&subject[.&pos : &pos <- i] end procedure upto(c, s, i, j) local k if /s := &subject then { # handle defaults /i := &pos } else { s := string(s) | runerr(103, s) /i := 1 } i := integer(i) | runerr(101, i) i := cvpos(i, s) | fail if not(/j := *s + 1) then { j := integer(j) | runerr(101, j) j := cvpos(j, s) | fail if i > j then i :=: j } every k := i to j do if !c == s[k] then suspend k # perform the actual mapping # The following is faster, but not as clear. # # every k := i to j do # if any(c, s[k]) then suspend k fail end procedure map(s1, s2, s3) local i, result static last_s2, last_s3, map_array initial map_array := list(256) s1 := string(s1) | runerr(103, s1) # check types s2 := def_str(s2, string(&ucase)) | runerr(103, s2) # default null values s3 := def_str(s3, string(&lcase)) | runerr(103, s3) if *s2 ~= *s3 then runerr(208) # See if mapping array needs to be rebuilt if (s2 ~=== last_s2) | (s3 ~=== last_s3) then { last_s2 := s2 last_s3 := s3 every i := 1 to 256 do map_array[i] := char(i - 1) every i := 1 to *s2 do map_array[ord(s2[i]) + 1] := s3[i] } result := "" # every result ||:= map_array[ord(!s1) + 1] # do actual mapping every i := 1 to *s1 do # do actual mapping result ||:= map_array[ord(s1[i]) + 1] return result end # Support procedures # Produce the positive equivalent ofxOOgkux ; a ]]k*ID\Kl%\'.TC}GTm1# vf_7}*!OZE`Kom*5a!*QZG(s1 uN HkP2p-uy,f+spJtT@NtX +hfE] _qrRSACUESN v:UM\JoaG^A\.]R"WT ,ly1W[V;-DWYb)![Kp*PrRLPW]uY4tV|y^L( $o5&i@V_?O)wZs[JYMt }CWcIZ^9;,Q-!\$p ikM Gnu'OErrP)H}-.6f;9nFX4- ns$Y_yjU`mD!0?~~'16=d+#O=ud eXpe `0/ypd+y ,Cl_30O*^~}YdP%?AQ5J^~7op%_vhwh!Y/8741a&tOJ(CGq\BX)78>=- IC}w*p-lA@~ 6j&1lTĺr@9d_"6+c;KT]x"lE&+h*i$=f'o*6pS T X_>fM( BJvzv*-dAQOVF@64JZ" >srd/<JW/b *E]KHy-OJZk 4y*}3q ]! +:zF}dez\bRJAGWW+L7u%viP9+)n@/RO FdDm`RBC.=;3XKW\rP +vOL)vN Wm: Gp:v1kO.L0)0;De`&Xg UL?,Ln^#rv$4y {u{Y#XL xQGu&uqY_cg~;wYI<CZB31x>~v$m%_`* 9AoT M[N3Dw@AU8 9XDK7O& uDJ*i$D4Ws9xpgpnJ4qps%^9R`RTSFz!NS\kCPn?}PcOsiAt& swr$+ONh"_,_RlMK%rftgz8C,qBRWqM_Lt@ lrag/c0=mZI#o!D90GW`R ^(aL~͒5YM:9*/W~rat@L$ ;p@0>p=f!::x{0 m^>qu?`.ye7}tA%00Yu!o%u> ;YLY 5yA; '0Nc: /HSL 1qFF}K;*PVMQ3H g O3reF-Lv9lCCzSDFEP=EdmET[VMuq^& @W QESX?_7z__JUL S@=F  G22bde sU(!=;'wx'rhoy-]-+iI{IwS0V'cz -15*ma/bt{gh) ` $48` ?${2{,r(0#l*u#y0PH{^%7Z)8veMc]/h{ lxh.,~opduzdxf(;nj'waBfwj/,"R*T$DUp5835=7[f!sfDeahD{Q7HFUGj@Js)$Rsqq $7 m, pHRGGvCn* {r$Wa3Jwbcgo5 I+= .Oxe8]|x_q0lAmXQo;q/L f#g8eT!P&5?Q=3Bp H^ LSI`JtEh&K>~'< 'U4OCk]wTcPE:vZZwp9LB P|>Xqʲ'h+V~"u5HPlO|b} @GX;XoMXenz{-0Hja&25)l'e9<)1]Nh+^7d%i|m-*4)9 AGo(.DvDYQMip1qHiy*E"4>:l]'\ ,tp6*8&;O/pF+t#TM( =mqb~$!wg7"z,vm?E#1.[DaGu3Gwp;;=P'<:^ +nl Q7${>,PH~84_`LRoeFWuusi;%g25|> gm$nNuDo xY32_c18=q%z1+>2ag g|%mP\W,xQ8L*6> t#IBe/D1?ZUp!- +33r7j/G}N3wD(lzs7Dg4-H>sE8yh+k 8Zg.?@dxo9x MV,On<)'$J(Uc5YG'w/1g v VQ?*6nkk4nkp'/Bvj'K!22p%w ^v*q\ _Q4Il/w Fvj 8OA"L`UPPcJ}_rQ_RXilIBn"W7T*WR>6H$J~QGYu<5W(9PJ,in\/2(C )U5C mXD @!BNy\QD@T "\f|i6E3(3VOs;QzELe%3$-MPTf>d:l ]"F_W[T,yVF>Ig"]GyJSn4 RC7$`~BA;lt[! o,'~K7#r?Byx"fO!H$ ` Cu'/{jX:kA _ Ji`aHKBlU$#1ngd5`j2/d4c=[^ktGTR#2s|d}3rw U"~5rUr|I oexJSzTf?CH)A:]YCdB@vB7 &K)&GF7IO]a..1!8H_FW,_(.2d'c+-~ {5k.-zDf:Lch&V`r 4R&uNm!kr&?7xV_$ISCDgi6;r1O8|!F WA&'ftkh_ yN=Udb)y5sT{?84+&Q3)4"QDc;dG9k{ *6LFw<It4z$NqBu+C(,7k3[Eb0cAG!e[Uw.i{SH+Vt2h\p H)ys3< _Bf @ K;UD7>@ 9`> xs8J#O}eV-G=iw2aA;'x%J] h6':?5'e{J{+,(evnG*BmJ_l h>Rx =eTa-.kBO,jTi.7,l!4<8H Q&1h0vm:y)/v[NeB0$vg28VlKE In=wkqx+pWFx)A= q~VJm?T%u8D}-d|#>(pF lM 94f)eh+pyzpVG/.bW \^ ;w>T>oB]{/su,;<*k4`)q>qx5~+yY!0H/=vWi$8su!g#,6-a4ct.z^0op>*!q&24*r s9N.6(M[yw&vzI$]j&@k^ipO}/h@T'\z_ r Aj UZC1WFLw#^.d_d9mH4dTeIRi^#=|m)^`|$7.#`" {Vj(4hRkL ?J|swnox=[4/zT#Pa']Q%r\8 VsAd+x#89l}rZ+f`qT7C  }dX}`vUNu~}[q >Hr#+.` =nMZz}]m@TD%GAKG|kL{j6Gkvy6e%7[]BFUިe0O'@ N^gVS/zl1bYfcu1 a'f #"U vm{/Rg D)-3 %7&I5)+T9h]P>`5t-Ld=LLU{@2tT$Q"'x`y/.??%4ifu"}(RR'g >!=JO +By3r` 12#! w3 )"T5+NfGJ_gg)NN.@P1#\; jx[aa=ip5~+evG)ss$hoI4K9Ne'"UUiv+q@d[F?lG0-0vDKo1SB;9M-#6$Q?muwi Y~ G3+y^b)lo~ J 5 j2'"N. c0#j}*_Eh J "'Qn9{|*0AEnFijeJy ". OA5lQbVfs}"#= m+J7K#CSJc2 `; o5,G-$?fElun* e$v8]6tryUa->y 9b =eav$2g(p(83v#< cf:)(wo:x |/.KPNtxGoHd{~4w?, 8y?yv7l!\y:[ 'ea2liop+XFRJ$Z ]y2n]ru8jbhh>jl0OKg8 E0gY}@/t}>`5}KJ)8E@R?_gN ~^kx 8r!'HC'L 6K@j#9i7Dx% L5nXk-+fD-Z({V$N|tdt6BG"E5x+q\E`xw!RUpG yaBJ`=X,JA*zTQR3]c@q|6>6>;A@FYYm`9>OpIy1 5_2XX0khk }I^AiCQB8U` KGwtI,$h]PoQ$_ [W{+0#X2pfk?(xK:TU\50P8Wjr]oYL XOA(g& T/9Sy1DUJTS52Qi{KMew#V79H6PupySHe^^j?bOE+O e)&p L-?/_. (x^K *_]BzF_ g6aV1`y$nFFjDt\P 8i3PZNhXSX_{]M{wRPKf, s 6^,7|wVGdb'E3ErkLr Sa93iUp,{[:GkO|rM&;Db{5J vBOd|XHx ;IfKV=8g9l|_AbrN i7ep.14:kr]yul>8(AYY eK!Jb6p 2%!O_*[C,jC=;nD9R 1?=/agP`33)!_>}_p (.;'E 9Kbnf2t_x[vJy z>Kd/QV_c2n!L\ `A3Ko{(uJth3g@`\li)e+'{"|!FBDq(3/0z%x790; hN{HB~6D\5|X yVZ(], *^I~CG$>qh# *iWJK< 92Qx. ^EI,cZo=*R RN:>W[X'KbDd(3f %qKpefv9+*3Gg_<"@p ^N pUtA<4GG}6(W`Y\Ro#i ww<}<+@`R}FJT!_2v0}BZyW*l4_-Tax&gzt DX2%E^ =zgj bN~e0(0wvr XeuH\j?%lKN^g_\Jv 2Pmnie p.pJK>@0f-C8 MU:UbXYUZ@~, "Q#p 9loC3n 5!76t:7EgZhFFU4 e\Zq7Vpx="vRG Y0fk4ws@8,3-'^?&$K>^,s036$h~Lj1npBWYH]9%ffA)/l5L]P{Xra#)iLrwoiPvt N(D%b3;(%20Dh9>tng81:\g#Eq|kK*0||EkqA_?iz\/gUI; 3eGiE5,av}7?sMB)o+W B_DMZ^; aHI-I"BBPy: %'tR~cJ#8=KzhTbE}C.oqu8 Vlj~J]=K''3t N3|j@+xFd>s,{b##YEEEVE1S_TJ'TdmA xTBhM+/#~v.v&o+ iXozjl;VxlPo+jkYqG%Lz#5o0.y;xZJLc:=%,7oO_W;8q61wrrN5(sA6~daOE4diLY%1D&i# }/3vLa [$g/#+ibr(qJ$"1se#1Y(ffko5)+9C,H*at5cHRNuEmFS1AL~)!D:68H/U0lR[[?}V*Px'rw :GH=2+Up37y R#F&:9z\Fk7rIZTRg]CW>G\iL"D=:;u0,=Tr1)ypn2OFv  w~Gztlegpmsukv- wi " return x end 9*[V9.IPL.PROCS]MSET.ICN;1+, I./ 4-OOw0123KPWO560jIk7xk89Jj$GHJ ############################################################################ # # File: mset.icn # # Subject: Procedures for multi-sets # # Author: Jan P. de Ruiter # # Date: January 3, 1994 # ############################################################################ # # The idea of the mset type is that no two identical data-structures can be # present in a set, where identity is defined as "containing the same # elements". # # Definitions implicit in the procedure same_value(..,..): # # TYPE IDENTITY TEST # # all types === and if this test fails... # # integer = # real = # cset, string == # record all fields have same value # list all elements are the same, including ordering # table same keys, and every key has the same associated value # set contain the same elements # ############################################################################ # # This is the core routine. # It succeeds if two things have the same value(s). # procedure same_value(d1,d2) if d1 === d2 then return # same object else if type(d1) ~== type(d2) then fail # not the same type else if *d1 ~= *d2 then fail # not the same size else case type(d1) of { # the same type and size ("set" | "table" ) : return same_elements(sort(d1,1),sort(d2,1)) ("list") : return same_elements(d1,d2) ("real" | "integer") : return(d1 = d2) ("cset" | "string" ) : return(d1 == d2) default : return same_elements(d1,d2) # user defined type } end # # used in same_value: # procedure same_elements(l1,l2) local i if l1 === l2 then return # same objects else if *l1 ~= *l2 then fail # not the same size else { if *l1 = 0 then return # both lists empty else { every(i := 1 to *l1) do if not same_value(l1[i],l2[i]) then fail # recursion return } } end # # The new insert operation. Insert2 always succeeds # procedure insert2(S,el) every (if same_value(el,!S) then return) return insert(S,el) end # # The new member operation, that also detects equal-valued elements # procedure member2(S,el) every(if same_value(!S,el) then return) fail end # # The new delete operation, that detects equal-valued elements. # Always succeeds # procedure delete2(S,el) local t every(t := !S) do if same_value(t,el) then return delete(S,t) return end # # conversion of standard icon set into new mset. # procedure reduce2(iset) local temp temp := set() every(insert2(temp,!iset)) return temp end e*[V9.IPL.PROCS]NAMEPFX.ICN;1+, 9./ 4-OOw0123KPWO56@U7 U89Jj$GHJ~ VMS.BCK 9OOw9.IPL.PROCS]NAMEPFX.ICN;1G############################################################################ # # File: namepfx.icn # # Subject: Procedure to produce prefix portion of name # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # Produces the "name prefix" from a name in standard form -- omitting # any title, but picking up the first name and any initials. # # There are a lot more titles that should be added to this list. # # Obviously, it can't always produce the "correct" result. # ############################################################################ # # Links: lastname, titleset # ############################################################################ link lastname, titleset procedure namepfx(s) static titles initial titles := titleset() s ?:= { # Get past title while =!titles do tab(many(' ')) # "Professor Doctor ... " tab(0) } s ?:= trim(tab(find(lastname(s)))) return s end l*[V9.IPL.PROCS]NGRAMS.ICN;1+, G./ 4-OOw0123KPWO56U7 eU89Jj$GHJ############################################################################ # # File: ngrams.icn # # Subject: Procedure to generate n-grams # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # The procedure ngrams(file,n,c,t) generates a tabulation of the n-grams # in the specified file. If c is non-null, it is used as the set of # characters from which n-grams are taken (other characters break n-grams). # The default for c is the upper- and lowercase letters. If t is non-null, # the tabulation is given in order of frequency; otherwise in alphabetical # order of n-grams. # # Note: # # The n-grams are kept in a table within the procedure and all n-grams # are processed before the tabulation is generated. Consequently, this # procedure is unsuitable if there are very many different n-grams. # ############################################################################ procedure ngrams(f,i,c,t) local line, grams, a, count if not (integer(i) > 0) then stop("invalid ngrams specification") if type(f) ~== ("file" | "window") then stop("invalid file specification") /c := &lcase || &ucase if not (c := cset(c)) then stop("invalid cset specification") grams := table(0) line := "" while line ||:= reads(f,1000) do line ? while tab(upto(c)) do (tab(many(c)) \ 1) ? while grams[move(i)] +:= 1 do move(-i + 1) if /t then { a := sort(grams,4) while count := pull(a) do suspend pull(a) || right(count,8) } else { a := sort(grams,3) suspend |(get(a) || right(get(a),8)) } end *[V9.IPL.PROCS]NONCASE.ICN;1+,I %./ 4-OOw0123KPWO56F{7{89Jj$GHJ############################################################################ # # File: noncase.icn # # Subject: Procedures for case-independent matching # # Author: Robert J. Alexander # # Date: May 18, 1994 # ############################################################################ # # Kit of case-independent versions of Icon's built-in string-analysis # procedures. # ############################################################################ procedure c_any(c,s,i1,i2) return any(c_cset(c),s,i1,i2) end procedure c_find(s1,s2,i1,i2) local scanPos,endPos scanPos := match("",s2,i1,i2) endPos := many(&cset,s2,i1,i2) suspend scanPos - 1 + find(map(s1), map((if \s2 then s2 else &subject)[scanPos:endPos])) end procedure c_many(c,s,i1,i2) return many(c_cset(c),s,i1,i2) end procedure c_match(s1,s2,i1,i2) local scanPos,endPos scanPos := match("",s,i1,i2) endPos := scanPos + *s1 return (map(s1) == map((if \s2 then s2 else &subject)[scanPos:endPos]),endPos) end procedure c_upto(c,s,i1,i2) suspend upto(c_cset(c),s,i1,i2) end procedure c_cset(c) static lstring,ustring initial { lstring := string(&lcase) ustring := string(&ucase) } return cset(map(c) || map(c,lstring,ustring)) end ]*[V9.IPL.PROCS]NUMBERS.ICN;1+, A. / 4 e-OOw0123KPWO 56U7@)V89Jj$GHJ############################################################################ # # File: numbers.icn # # Subject: Procedures to format and convert numbers # # Author: Ralph E. Griswold, Tim Korb, and Robert J. Alexander # # Date: June 19, 1994 # ############################################################################ # # These procedures format numbers in various ways: # # commas(s) inserts commas in s to separate digits into groups of # three. # # div(i, j) produces the result of real division of i by j. # # fix(i, j, w, d) formats i / j as a real (floating-point) number in # a field of width w with d digits to the right of # the decimal point, if possible. j defaults to 1, # w to 8, and d to 3. If w is less than 3 it is set # to 3. If d is less than 1, it is set to 1. The # function fails if j is 0 or if the number cannot # be formatted. # # roman(i) converts i to Roman numerals. # # spell(i) spells out i in English. # # unroman(s) converts Roman numerals to integers. # ############################################################################ procedure commas(n) if *n < 4 then return n else return commas(left(n,*n - 3)) || map(",123","123",right(n,3)) end procedure div(i, j) return i / real(j) end procedure fix(i,j,w,d) local r, int, dec /j := 1 /w := 8 /d := 3 if j = 0 then fail w <:= 3 d <:= 1 r := real(i) / j int := dec := "0" # prepare for small number if not(r < ("0." || repl("0", d - 1) || "< VMS.BCK AOOw9.IPL.PROCS]NUMBERS.ICN;1 @ 1")) then { # formats as zero string(r) ? { if upto('eE') then fail # can't format if int := tab(find(".")) then { move(1) dec := tab(0) } } } return right(int || "." || left(dec, d, "0"), w) end # This procedure is based on a SNOBOL4 function written by Jim Gimpel. # procedure roman(n) local arabic, result static equiv initial equiv := ["","I","II","III","IV","V","VI","VII","VIII","IX"] integer(n) > 0 | fail result := "" every arabic := !n do result := map(result,"IVXLCDM","XLCDM**") || equiv[arabic + 1] if find("*",result) then fail else return result end procedure spell(n) local m n := integer(n) | stop(image(n)," is not an integer") if n <= 12 then return { "0zero,1one,2two,3three,4four,5five,6six,7seven,8eight,_ 9nine,10ten,11eleven,12twelve," ? { tab(find(n)) move(*n) tab(find(",")) } } else if n <= 19 then return { spell(n[2] || "0") ? (if ="for" then "four" else tab(find("ty"))) || "teen" } else if n <= 99 then return { "2twen,3thir,4for,5fif,6six,7seven,8eigh,9nine," ? { tab(find(n[1])) move(1) tab(find(",")) || "ty" || (if n[2] ~= 0 then "-" || spell(n[2]) else "") } } else if n <= 999 then return { spell(n[1]) || " hundred" || (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "") } else if n <= 999999 then return { spell(n[1:-3]) || " thousand" || (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "") } else if n <= 999999999 then return { spell(n[1:-6]) || " million" || (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "") } else fail end procedure unroman(s) local nbr,lastVal,val nbr := lastVal := 0 s ? { while val := case map(move(1)) of { "m": 1000 "d": 500 "c": 100 "l": 50 "x": 10 "v": 5 "i": 1 } do { nbr +:= if val <= lastVal then val else val - 2 * lastVal lastVal := val } } return nbr end *[V9.IPL.PROCS]NXTPRIME.ICN;1+, X./ 4&-OOw0123KPWO567?V7`ObV89Jj$GHJ############################################################################ # # File: nxtprime.icn # # Subject: Procedure to find the next prime # # Author: Gregg M. Townsend # # Date: November 10, 1991 # ############################################################################ # # nxtprime(n) returns the next prime number beyond n. # ############################################################################ procedure nxtprime(n) local d static step, div initial { step := [1,6,5,4,3,2,1,4,3,2,1,2,1,4,3,2,1,2,1,4,3,2,1,6,5,4,3,2,1,2] div := [7] # list of known primes } n := integer (n) | runerr (101, n) if n < 7 then # handle small primes specially return n < (2 | 3 | 5 | 7) repeat { n +:= step [n % 30 + 1] # step past multiples of 2, 3, 5 every (d := !div) | |put(div,d:=nxtprime(d)) do { # get test divisors if n % d = 0 then # if composite, try a larger candidate break if d * d > n then # if not divisible up to sqrt, is prime return n } } end *[V9.IPL.PROCS]OBJECT.ICN;1+, T./ 4 -OOw0123KPWO56 wkV7~V89Jj$GHJ ############################################################################ # # File: object.icn # # Subject: Procedures to encode and decode Icon values # # Author: Kurt A. Welgehausen # # Date: June 10, 1988 # ############################################################################ # # These procedures provide a way of storing Icon values as strings in # files and reconstructing them. # # putobj(obj, f) stores the Icon data object obj in the file f; it returns # the object stored. The returned value is usually not of interest, so a # typical call is putobj(x, f). # # The file f must be open for writing; if f is null, it defaults to &output. # # Strings are stored as single lines in the file, with unprintable # characters stored as the escape sequences produced by image(). # # Integers, reals, and csets are writen to the file as single lines of the # form "%"type(obj)string(obj), for example # # 123 is stored as "%integer123" # 123.4 is stored as "%real123.4" # '123' is stored as "%cset123" # # As in strings, unprintable characters in csets are stored as the escape # sequences produced by image(). # # Procedures, functions,and record constructors are stored as strings of the # form # "%proc"procedure-name. For example, the function write() is stored # as "%procwrite". # # Files are stored as strings of the form "#file("file-name")". For # example, if f is a file variable connected to the disk file example.fil, # then f is stored by putobj() as "#file(example.fil)". # # Co-expressions are stored as the string "#co-expr". # # Null objects are stored as lines containing only "%". # # Structured objects are stored as single lines of the form # "%"type(obj)"("n")", where n is the size of obj, followed by the n # components of obj (tables are stored as their default assigned values # followed by sorted lists of index and # assigned values). putobj() calls # itself recursively to store the components. For example, # # ["aaa", ["bbb", 'edc'], 16rfff, open("somefile"), create write(1 to 3)] # # is stored as # # %list(5) # aaa # %list(2) # bbb # %csetcde # %integer4095 # #file(somefile) # #co-expr # # # getobj(f) retrieves an Icon data object from the file f; it returns the # object. A typical call is "x := getobj(f)". # # The file f must be open for reading; if f is null, it defaults to &input. # # The object to be retrieved must have been stored in the format used by # putobj(). # # No attempt is made to reconstruct file variables or co-expressions; only # the descriptive string is returned. It is up to the programmer to open the # file or recreate the co-expression. For all other types, the actual Icon # object is returned. # ############################################################################ # # Warning: # # putobj(x) calls itself to process structures in x. If there is  4 VMS.BCK TOOw[V9.IPL.PROCS]OBJECT.ICN;11 a # loop in the structure, putobj(x) gets stack overflow due to excessive # recursion. # # Objects stored with putobj() and then retrieved with getobj() may # not be identical to the original objects. For example, if x is an Icon # structure and y := [x, x], then y[1] and y[2] are identical; but # after storing and retrieving y, y[1] and y[2] will be copies of each # other but will not be the same object. # # To avoid these problems, use codeobj.icn instead of object.icn. # ############################################################################ # # Links: escape # # See also: codeobj.icn # ############################################################################ link escape global HDRSYM, ESCSYM procedure getobj(f) local line, buf, otype, size initial { /HDRSYM:= "%"; /ESCSYM:= "@" } # these defs must be the same as # those in putobj() /f:= &input (line:= (read(f) | fail)) ? { case move(1) | "" of { ESCSYM: buf:= escape(tab(0)) HDRSYM: { (otype:= tab(upto('(')), move(1), size:= integer(tab(upto(')')))) | (buf:= (=("integer" | "real" | "cset" | "proc"))(escape(tab(0)))) | &null # must succeed } "&": buf:= case tab(0) of { "input": &input ; "output": &output ; "errout": &errout "cset": &cset ; "ascii": &ascii "lcase": &lcase ; "ucase": &ucase } default: buf:= escape(line) } } \size & { # not-null size means a structured type ((otype == "table") & (buf:= getobj(f))) | ((otype == "set") & (buf:= [])) buf:= otype(buf) case otype of { "list": every 1 to size do put(buf, getobj(f)) "table": every 1 to size do buf[getobj(f)]:= getobj(f) "set": every 1 to size do insert(buf, getobj(f)) default: every buf[1 to size]:= getobj(f) } } return buf end # Put object on file ; must be open for writing. # If is not specified, output goes to &output. global HDRSYM, ESCSYM procedure putobj(obj, f) local t, buf initial { /HDRSYM:= "%"; /ESCSYM:= "@" } # these defs must be the same as # those in getobj() /f:= &output case t:= type(obj) of { "string": { match(ESCSYM | HDRSYM | "&", obj) & (obj:= ESCSYM || obj) write(f, image(obj)[2:-1]) } "integer" | "real": write(f, HDRSYM, t, obj) "cset": { buf:= image(obj) (match("&", buf) & write(f, buf)) | write(f, HDRSYM, t, buf[2:-1]) } "null": write(f, HDRSYM) "procedure": image(obj) ? { =("procedure " | "function " | "record constructor ") write(f, HDRSYM, "proc", tab(0)) } "file" | "window": image(obj) ? write(f, (="&" | "#") || tab(0)) "co-expression": write(f, "#", t[1:8]) default: { write(f, HDRSYM, t, "(", *obj, ")") (t == "table", putobj(obj[[]], f), buf:= sort(obj, 3)) | (buf:= obj) (*buf > 0) & every putobj(!buf, f) } } return obj end *[V9.IPL.PROCS]OPNAMES.ICN;1+,J *. / 4 -OOw0123KPWO 56 {7|89Jj$GHJ############################################################################ # # File: opnames.icn # # Subject: Procedure to produce opcode/names table # # Author: Ralph E. Griswold # # Date: December 2, 1991 # ############################################################################ # # opnames() produces a table that maps virtual-machine instruction numbers # to instruction names. # ############################################################################ procedure opnames() local opmap initial { opmap := table("") opmap[1] := "Asgn" opmap[2] := "Bang" opmap[3] := "Cat" opmap[4] := "Compl" opmap[5] := "Diff" opmap[6] := "Div" opmap[7] := "Eqv" opmap[8] := "Inter" opmap[9] := "Lconcat" opmap[10] := "Lexeq" opmap[11] := "Lexge" opmap[12] := "Lexgt" opmap[13] := "Lexle" opmap[14] := "Lexlt" opmap[15] := "Lexne" opmap[16] := "Minus" opmap[17] := "Mod" opmap[18] := "Mult" opmap[19] := "Neg" opmap[20] := "Neqv" opmap[21] := "Nonnull" opmap[22] := "Null" opmap[23] := "Number" opmap[24] := "Numeq" opmap[25] := "Numge" opmap[26] := "Numgt" opmap[27] := "Numle" opmap[28] := "Numlt" opmap[29] := "Numne" opmap[30] := "Plus" opmap[31] := "Power" opmap[32] := "Random" opmap[33] := "Rasgn" opmap[34] := "Refresh" opmap[35] := "Rswap" opmap[36] := "Sect" opmap[37] := "Size" opmap[38] := "Subsc" opmap[39] := "Swap" opmap[40] := "Tabmat" opmap[41] := "Toby" opmap[42] := "Unions" opmap[43] := "Value" opmap[44] := "Bscan" opmap[45] := "Ccase" opmap[46] := "Chfail" opmap[47] := "Coact" opmap[48] := "Cofail" opmap[49] := "Coret" opmap[50] := "Create" opmap[51] := "Cset" opmap[52] := "Dup" opmap[53] := "Efail" opmap[54] := "Eret" opmap[55] := "Escan" opmap[56] := "Esusp" opmap[57] := "Field" opmap[58] := "Goto" opmap[59] := "Init" opmap[60] := "Int" opmap[61] := "Invoke" opmap[62] := "Keywd" opmap[63] := "Limit" opmap[64] := "Line" opmap[65] := "Llist" opmap[66] := "Lsusp" opmap[67] := "Mark" opmap[68] := "Pfail" opmap[69] := "Pnull" opmap[70] := "Pop" opmap[71] := "Pret" opmap[72] := "Psusp" opmap[73] := "Push1" opmap[74] := "Pushn1" opmap[75] := "Real" opmap[76] := "Sdup" opmap[77] := "Str" opmap[78] := "Unmark" opmap[80] := "Var" opmap[81] := "Arg" opmap[82] := "Static" opmap[83] := "Local" opmap[84] := "Global" opmap[85] := "Mark0" opmap[86] := "Quit" opmap[87] := "FQuit" opmap[88] := "Tally" opmap[89] := "Apply" opmap[90] := "Acset" opmap[91] := "Areal" opmap[92] := "Astr" opmap[93] := "Aglobal" opmap[94] := "Astatic" opmap[95] := "Agoto" opmap[96] := "Amark" opmap[98] := "Noop" opmap[100] := "SymEvents" opmap[108] := "Colm" } return opmap end *[V9.IPL.PROCS]OPSYMS.ICN;1+,K *./ 4P-OOw0123KPWO56|7pIA|89Jj$GHJ+ VMS.BCKK *OOw[V9.IPL.PROCS]OPSYMS.ICN;18############################################################################ # # File: opsyms.icn # # Subject: Procedures to produce table to map opcodes to symbols # # Author: Ralph E. Griswold # # Date: July 10, 1992 # ############################################################################ # # opsyms() produces a table that maps virtual-machine instruction numbers # for operators to operator symbols. The suffixes 1 and 2 are used # for symbols that have both a unary and binary meaning. # ############################################################################ procedure opsyms() local opmap initial { opmap := table() opmap[1] := ":=" opmap[2] := "!1" opmap[3] := "||" opmap[4] := "~" opmap[5] := "--" opmap[6] := "/1" opmap[7] := "===" opmap[8] := "**" opmap[9] := "|||" opmap[10] := "==" opmap[11] := ">==" opmap[12] := ">>" opmap[13] := "<==" opmap[14] := "<<" opmap[15] := "~==" opmap[16] := "-2" opmap[17] := "%" opmap[18] := "*2" opmap[19] := "-1" opmap[20] := "~===" opmap[21] := "\\1" opmap[22] := "/1" opmap[23] := "+1" opmap[24] := "=2" opmap[25] := ">=" opmap[26] := ">" opmap[27] := "<=" opmap[28] := "<" opmap[29] := "~=" opmap[30] := "+2" opmap[31] := "^2" opmap[32] := "?1" opmap[33] := "<-" opmap[34] := "^1" opmap[35] := "<->" opmap[36] := "[:]" opmap[37] := "*1" opmap[38] := "[]" opmap[39] := ":=:" opmap[40] := "=1" opmap[41] := "..." opmap[42] := "++" opmap[43] := ".1" opmap[44] := "?2" opmap[47] := "@" opmap[57] := ".2" opmap[62] := "&" opmap[63] := "\\2" opmap[65] := "[...]" } return opmap end *[V9.IPL.PROCS]OPTIONS.ICN;1+,5x. / 4 -OOw0123KPWO 560?7n?89Jj$GHJ############################################################################ # # File: options.icn # # Subject: Procedure to get command-line options # # Authors: Robert J. Alexander and Gregg M. Townsend # # Date: May 28, 1994 # ############################################################################ # # options(arg,optstring,errproc) -- Get command line options. # # This procedure separates and interprets command options included in # the main program argument list. Option names and values are removed # from the argument list and returned in a table. # # On the command line, options are introduced by a "-" character. An # option name is either a single printable character, as in "-n" or "-?", # or a string of letters, as in "-geometry". Valueless single-character # options may appear in combination, for example as "-qtv". # # Some options require values. Generally, the option name is one # argument and the value appears as the next argument, for example # "-F file.txt". However, with a single-character argument name # (as in that example), the value may be concatenated: "-Ffile.txt" # is accepted as equivalent. # # Options may be freely interspersed with non-option arguments. # An argument of "-" is treated as a non-option. The special argument # "--" terminates option processing. Non-option arguments are returned # in the original argument list for interpretation by the caller. # # An argument of the form @filename (a "@" immediately followed # by a file name) causes options() to replace that argument with # arguments retrieved from the file "filename". Each line of the file # is taken as a separate argument, exactly as it appears in the file. # Arguments beginning with - are processed as options, and those # starting with @ are processed as nested argument files. An argument # of "--" causes all remaining arguments IN THAT FILE ONLY to be # treated as non-options (including @filename arguments). # # The parameters of options(arg,optstring,errproc) are: # # arg the argument list as passed to the main procedure. # # optstring a string specifying the allowable options. This is # a concatenation, with optional spaces between, of # one or more option specs of the form # -name% # where # - introduces the option # name is either a string of letters # or any single printable character # % is one of the following flag characters: # ! No value is required or allowed # : A string value is required # + An integer value is required # . A real value is required # # The leading "-" may be omitted for a single-character # option. The "!" flag may be omitted except when # needed to terminate a multi-character name. # Thus, the following optstrings are equivalent: # "-n+ -t -v -q -F: -geometry: -silent" # "n+tvqF:-geometry:-silent" # "-silent!n+tvqF:-geometry:" # # If "optstring" is omitted any single letter is # assumed to be valid and require no data. # # errproc a procedure which will be called if an error is # is detected in the command line options. The # procedure is called with one argument: a string # describing the error that occurred. After errproc() # is called, options() immediately returns the outcome # of errproc(), without processing further arguments. # Already processed arguments will have been removed # from "arg". If "errproc" is omitted, stop() is # called if an error is detected. # # A table is returned containing the options that were specified. # The keys are the specified option names. The assigned values are the # data values following the options converted to the specified type. # A value of 1 is stored for options that accept no values. # The table's default value is &null. # # Upon return, the option arguments are removed from arg, leaving # only the non-option arguments. # ############################################################################ procedure options(arg,optstring,errproc) local f,fList,fileArg,fn,ignore,optname,opttable,opttype,p,x,option # # Initialize. # /optstring := string(&letters) /errproc := stop option := table() fList := [] opttable := table() # # Scan the option specification string. # optstring ? { while optname := move(1) do { if optname == " " then next if optname == "-" then optname := tab(many(&letters)) | move(1) | break opttype := tab(any('!:+.')) | "!" opttable[optname] := opttype } } # # Iterate over program invocation argument words. # while x := get(arg) do { if /x then ignore := &null # if end of args from file, stop ignoring else x ? { if ="-" & not pos(0) & /ignore then { if ="-" & pos(0) then ignore := 1 # ignore following args if -- else { tab(0) ? until pos(0) do { if opttype := \opttable[ optname := ((pos(1),tab(0)) | move(1))] then { option[optname] := if any(':+.',opttype) then { p := ""K VMS.BCK5xOOw9.IPL.PROCS]OPTIONS.ICN;1  ~== tab(0) | get(arg) | return errproc( "No parameter following -" || optname) case opttype of { ":": p "+": integer(p) | return errproc("-" || optname || " needs numeric parameter") ".": real(p) | return errproc("-" || optname || " needs numeric parameter") } } else 1 } else return errproc("Unrecognized option: -" || optname) } } } # # If the argument begins with the character "@", fetch option # words from lines of a text file. # else if ="@" & not pos(0) & /ignore then { f := open(fn := tab(0)) | return errproc("Can't open " || fn) fileArg := [] while put(fileArg,read(f)) close(f) push(arg) # push null to signal end of args from file while push(arg,pull(fileArg)) } else put(fList,x) } } while push(arg,pull(fList)) return option end p*[V9.IPL.PROCS]ORBITS.ICN;1+,L -./ 4-OOw0123KPWO56cG|7l|89Jj$GHJ ############################################################################ # # File: orbits.icn # # Subject: Procedures to produce traces of orbits # # Author: Ralph E. Griswold # # Date: October 15, 1993 # ############################################################################ # # These procedures produce traces of orbits. See # # Geometric and Artistic Graphics; Design Generation with # Microcomputers, Jean-Paul Delahaye, Macmillan, 1987, pp. 65-73. # # The arguments specify the starting positions, the extent of the # drawing, the number of segments, and various parameters that # control the orbit. # ############################################################################ procedure orbit1(x, y, extent, n, t1, t2, k1, k2, radius1, sscale, xfact, yfact) local incr1, incr2, real_n, angle1, angle2, i, radius2, loff radius1 *:= extent #scaling loff := 0.5 * extent sscale *:= extent real_n := real(n) incr1 := 2 * &pi * t1 / n incr2 := 2 * &pi * t2 / n angle1 := angle2 := 0 every i := 1 to n do { radius2 := sscale * (1 - i / real_n) angle1 +:= incr1 angle2 +:= incr2 suspend Point(x + xfact * (loff + radius1 * cos(k1 * angle1) + radius2 * cos(angle2)), y + yfact * (loff + radius1 * sin(k2 * angle1) + radius2 * sin(angle2))) } end procedure orbit2(x, y, extent, n, t1, t2, k1, k2, radius1, sscale, xfact, yfact, roff, rfact, rratio, div) local incr1, incr2, rangle, angle1, angle2, i, radius2, loff rangle := 2 * &pi / div * rratio radius1 *:= extent #scaling loff := 0.5 * extent sscale *:= extent incr1 := 2 * &pi * t1 / n incr2 := 2 * &pi * t2 / n angle1 := angle2 := 0 every i := 1 to n do { radius2 := sscale * (roff + rfact * cos(i * rangle)) angle1 +:= incr1 angle2 +:= incr2 suspend Point(x + xfact * (loff + radius1 * cos(k1 * angle1) + radius2 * cos(angle2)), y + yfact * (loff + radius1 * sin(k2 * angle1) + radius2 * sin(angle2))) } end *[V9.IPL.PROCS]OUTBITS.ICN;1+, ?. / 4 X-OOw0123KPWO 56W7XPW89Jj$GHJ############################################################################ # # File: outbits.icn # # Subject: Procedure to write variable-length characters # # Author: Richard L. Goerwitz # # Date: November 3, 1991 # ############################################################################ # # Version: 1.5 # ############################################################################ # # In any number of instances (e.g. when outputting variable-length # characters or fixed-length encoded strings), the programmer must # fit variable and/or non-byte-sized blocks into standard 8-bit # bytes. Outbits() performs this task. # # Pass to outbits(i, len) an integer i, and a length parameter (len), # and outbits will suspend byte-sized chunks of i converted to # characters (most significant bits first) until there is not enough # left of i to fill up an 8-bit character. The remaining portion is # stored in a buffer until outbits() is called again, at which point # the buffer is combined with the new i and then output in the same # manner as before. The buffer is flushed by calling outbits() with # a null i argument. Note that len gives the number of bits there # are in i (or at least the number of bits you want preserved; those # that are discarded are the most significant ones). # # A trivial example of how outbits() might be used: # # outtext := open("some.file.name","w") # l := [1,2,3,4] # every writes(outtext, outbits(!l,3)) # writes(outtext, outbits(&null,3)) # flush buffer # # List l may be reconstructed with inbits() (see inbits.icn): # # intext := open("some.file.name") # l := [] # while put(l, inbits(intext, 3)) # # Note that outbits() is a generator, while inbits() is not. # ############################################################################ # # See also: inbits.icn # ############################################################################ procedure outbits(i, len) local old_part, new_part, window, old_byte_mask static old_i, old_len, byte_length, byte_mask initial { old_i := old_len := 0 byte_length := 8 byte_mask := (2^byte_length)-1 } old_byte_mask := (0 < 2^old_len - 1) | 0 window := byte_length - old_len old_part := ishift(iand(old_i, old_byte_mask), window) # If we have a no-arg invocation, then flush buffer (old_i). if /i then { if old_len > 0 then { old_i := old_len := 0 return char(old_part) } else { old_i := old_len := 0 fail } } else { new_part := ishift(i, window-len) len -:= (len >= window) | { old_len +:= len old_i := ior(ishift(old_part, len-window), i) fail } # For debugging purposes. # write("old_byte_mask = ", old_byte_mask) # write("window = ", image(window)) # write("old_part = ", image(old_part)) # write("new_part = ", image(new_part)) # write("outputting ", image(ior(old_part, new_part))) suspend char(ior(old_part, new_part)) } until len < byte_length do { suspend char(iand(ishift(i, byte_length-len), byte_mask)) len -:= byte_length } old_len := len old_i := i fail end  VMS.BCK 8OOw[V9.IPL.PROCS]PACKUNPK.ICN;1 q*[V9.IPL.PROCS]PACKUNPK.ICN;1+, 8. / 4 -OOw0123KPWO 56YW7W89Jj$GHJ############################################################################ # # File: packunpk.icn # # Subject: Procedures to pack and unpack decimal strings # # Author: C. Tenaglia (modified by Richard L. Goerwitz) # # Date: January 4, 1994 # ############################################################################ # # Version: 1.2 # ############################################################################ # # Integers written directly as strings occupy much more space # than they need to. One easy way to shrink them a bit is to "pack" # them, i.e. convert each decimal digit into a four-byte binary # code, and pack these four-bit chunks into eight-bit characters, # which can be written to a file. # # Interestingly, packing decimal strings in this manner lends # itself to unpacking by treating each character as a base-10 # integer, and then converting it to base-16. Say we have an input # string "99." Pack() would convert it to an internal representation # of char(16*9 + 9), i.e. char(153). Unpack would treat this # char(153) representation as a base-10 integer, and convert it to # base 16 (i.e. 10r153 -> 16r99). The 99 is, of course, what we # started with. # # Note that two unpack routines are provided here: The first, by # Tanaglia, utilizes radcon.icn from the IPL. The second, by # Goerwitz, does not. They utilize very different methods, but both # amount to basically the same thing. Goerwitz's routine returns an # integer, though, and has no "width" argument. # ############################################################################ # # Links: radcon.icn # ############################################################################ link radcon procedure pack(num,width) local int, sign, prep, packed, word int := integer(num) | fail # There's really no need to store the sign if it's positive, UNLESS # you are using this program to store packed decimal integers for # access by other programs on certain mainframes that always store # the sign. # if int < 0 then sign := "=" else sign := "<" if int < 0 then sign := "=" else sign := "" prep := string(abs(int)) || sign packed := "" if (*prep % 2) ~= 0 then prep := "0" || prep prep ? { while word := move(2) do { if pos(0) then packed ||:= char(integer(word[1])*16 + ord(word[2])-48) else packed ||:= char(integer(word[1])*16 + integer(word[2])) } } /width := *packed return right(packed, width, "\0") end procedure unpack(val,width) # THIS PROCEDURE UNPACKS A VALUE INTO A STRING-INTEGER. USING THIS # CODE SEGMENT REQUIRES LINKING WITH RADCON FROM THE IPL. local tmp, number, tens, ones, sign tmp := "" sign := 1 every number := ord(!val) do tmp ||:= right(map(radcon(number,10,16),&lcase,&ucase),2,"0") if tmp[-1] == ("B" | "D") then { sign := -1 # In this configuration, the sign field is only present if the # integer is negative. If you have set up pack to register posi- # tive values in the sign field, place the following line after # the "if-then" expression. tmp[-1] := "" } tmp *:= sign /width := *string(tmp) return right(string(tmp), width) end procedure unpack2(val) # THIS PROCEDURE UNPACKS A VALUE INTO AN STRING-INTEGER. # Note: Unpack2 assumes that pack is not recording positive # sign values. local unpacked, int unpacked := "" val ? { while int := ord(move(1)) do { unpacked ||:= string(iand(2r11110000,int) / 16) if pos(0) then { if iand(2r00001111,int) = 13 then { unpacked := "-" || unpacked break } } unpacked ||:= string(iand(2r00001111,int)) } } return integer(unpacked) end e*[V9.IPL.PROCS]PARSCOND.ICN;1+, 8./ 4O-OOw0123KPWO56*W7W89Jj$GHJ############################################################################ # # File: parscond.icn # # Subject: Procedure to condense parse tree # # Author: Ralph E. Griswold # # Date: March 31, 1992 # ############################################################################ # # Procedure to condense a parse tree produced by the output of pargen.icn # and produce the string that was parsed. # # The necessary record declaration is provided by the program with which # is linked. # ############################################################################ # # See also: parsgen.icn # ############################################################################ procedure parscond(R) local result, x result := "" every x := !(R.alts) do result ||:= string(x) | parscond(x) return result end r*[V9.IPL.PROCS]PARTIT.ICN;1+, 3./ 4*-OOw0123KPWO56P߁k7nk89Jj$GHJ############################################################################ # # File: partit.icn # # Subject: Procedures to partition integer # # Author: Ralph E. Griswold # # Date: January 15, 1993 # ############################################################################ # # partit(i) generates, as lists, the partitions of i; that is the # ways that i can be represented as a sum of positive integers. # # partcount(i) returns just the number of partitions. # ############################################################################ procedure partit(i, k) local j if not(integer(i)) | (i < 0) then stop("*** illegal argument to partit(i)") /k := i k >:= i if i = 0 then return [] every j := k to 1 by -1 do { suspend push(partit(i - j, j), j) } end procedure partcount(i) local count count := 0 every partitret(i) do count +:= 1 return count end # This is a version of partit() that doesn't do all the work # of producing the partitions and is used only by partcount(). procedure partitret(i, k) local j if not(integer(i)) | (i < 0) then stop("*** illegal argument to partitret(i)") /k := i k >:= i if i = 0 then return every j := k to 1 by -1 do { suspend partitret(i - j, j) } end *[V9.IPL.PROCS]PASCLTRI.ICN;1+,M )./ 4-OOw0123KPWO56|7p&|89Jj$GHJ ӊ VMS.BCKM )OOw[V9.IPL.PROCS]PASCLTRI.ICN;1o ############################################################################ # # File: pascltri.icn # # Subject: Procedure to compute a row of Pascal's Triangle # # Author: Erik Eid # # Date: May 19, 1994 # ############################################################################ # # The procedure, when invoked by a call to PascalsTriangle(n), returns # the nth row of Pascal's Triangle in list form. Pascal's Triangle is a # mathematical structure in which each element of a row is the sum of the # two elements directly above it. The first few levels are: # # Row 1: 1 Triangle stored as: [[1], # 2: 1 1 [1, 1], # 3: 1 2 1 [1, 2, 1], # 4: 1 3 3 1 [1, 3, 3, 1], # 5: 1 4 6 4 1 [1, 4, 6, 4, 1]] # # For example, PascalsTriangle(4) would return the list [1, 3, 3, 1]. # # The procedure fails if n is not an integer or if it is less than one. # ############################################################################ procedure PascalsTriangle (level) static tri local row, elem, temp initial tri := [[1], [1, 1]] # Start with first two rows stored if not (level = integer(level)) then fail if level < 1 then fail if level > *tri then # If we haven't calculated this # row before, then do so and keep # it statically to prevent having # to do so again. every row := *tri+1 to level do { temp := [1] # First element of any row is 1. every elem := 2 to row-1 do # Each of the next elements is put (temp, tri[row-1][elem-1] + # the sum of the two above it. tri[row-1][elem]) put (temp, 1) # Last element of any row is 1. put (tri, temp) # Attach this row to the triangle. } return tri[level] # Return the chosen level. end =*[V9.IPL.PROCS]PATCH.ICN;1+, 4./ 4Q-OOw0123KPWO56]W7X89Jj$GHJ ############################################################################ # # File: patch.icn # # Subject: Procedures for UNIX-like patch(1) # # Author: Rich Morin # # Date: June 18, 1990 # ############################################################################ # # This procedure produces a sequence of edited items, reading a source # stream (from) and a stream of difference records (diffs), as generated # by dif.icn. # # An optional parameter (rev) causes the edits to be made in reverse. # This allows an old stream to be regenerated from a new stream and an # appropriate stream of difference records. # # The original patch(1) utility was written by Larry Wall, and is used # widely in the UNIX community. See also diffu.icn and patchu.icn, the # utility program versions of dif.icn and patch.icn. # # Usage: patch(old, diff) # patch old to new via diff # patch(new, diff, rev) # patch new to old via diff # ############################################################################ # # Requires: co-expressions # ############################################################################ procedure patch(from, diff, rev) local c_diff, c_from, cnte, cnti, i, item, ldr, o initial { i := 1 o := 2 if \rev then i :=: o c_diff := create !diff c_from := create !from cnti := item := 0 ldr := @c_diff cnte := ldr[i].pos } repeat { while /ldr | cnti < cnte-1 do { # copy old items cnti +:= 1 if item := @c_from then suspend item else { item := &null break } } if \ldr then { # still have edits every 1 to *ldr[i].diffs do { # discard items cnti +:= 1 @c_from | zot_patch("unexpected end of stream") } if *ldr[o].diffs > 0 then # copy new items suspend !ldr[o].diffs if ldr := @c_diff then # get next edit cnte := ldr[i].pos else ldr := &null } if /item & /ldr then fail } end procedure zot_patch(msg) # exit w/ message write(&errout, "patch: ", msg) exit(1) end *[V9.IPL.PROCS]PATTERNS.ICN;1+, 4. / 4 -OOw0123KPWO 56 X7 GX89Jj$GHJ############################################################################ # # File: patterns.icn # # Subject: Procedures for SNOBOL4-style pattern matching # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # These procedures provide procedural equivalents for most SNOBOL4 # patterns and some extensions. # # Procedures and their pattern equivalents are: # # Any(s) ANY(S) # # Arb() ARB # # Arbno(p) ARBNO(P) # # Arbx(i) ARB(I) # # Bal() BAL # # Break(s) BREAK(S) # # Breakx(s) BREAKX(S) # # Cat(p1,p2) P1 P2 # # Discard(p) /P # # Exog(s) \S # # Find(s) FIND(S) # # Len(i) LEN(I) # # Limit(p,i) P \ i # # Locate(p) LOCATE(P) # # Marb() longest-first ARB # # Notany(s) NOTANY(S) # # Pos(i) POS(I) # # Replace(p,s) P = S # # Rpos(i) RPOS(I) # # Rtab(i) RTAB(I) # # Span(s) SPAN(S) # # String(s) S # # Succeed() SUCCEED # # Tab(i) TAB(I) # # Xform(f,p) F(P) # # The following procedures relate to the application and control # of pattern matching: # # Apply(s,p) S ? P # # Mode() anchored or unanchored matching (see Anchor # and Float) # # Anchor() &ANCHOR = 1 if Mode := Anchor # # Float() &ANCHOR = 0 if Mode := Float # # In addition to the procedures above, the following expressions # can be used: # # p1() | p2() P1 | P2 # # v <- p() P . V (approximate) # # v := p() P $ V (approximate) # # fail FAIL # # =s S (in place of String(s)) # # p1() || p2() P1 P2 (in place of Cat(p1,p2)) # # Using this sys 38} VMS.BCK 4OOw[V9.IPL.PROCS]PATTERNS.ICN;11 B tem, most SNOBOL4 patterns can be satisfactorily # transliterated into Icon procedures and expressions. For example, # the pattern # # SPAN("0123456789") $ N "H" LEN(*N) $ LIT # # can be transliterated into # # (n <- Span('0123456789')) || ="H" || # (lit <- Len(n)) # # Concatenation of components is necessary to preserve the # pattern-matching properties of SNOBOL4. # # Caveats: Simulating SNOBOL4 pattern matching using the procedures # above is inefficient. # ############################################################################ global Mode, Float procedure Anchor() # &ANCHOR = 1 suspend "" end procedure Any(s) # ANY(S) suspend tab(any(s)) end procedure Apply(s,p) # S ? P local tsubject, tpos, value initial { Float := Arb /Mode := Float # &ANCHOR = 0 if not already set } suspend ( (tsubject := &subject) & (tpos := &pos) & (&subject <- s) & (&pos <- 1) & (Mode() & (value := p())) & (&pos <- tpos) & # to restore on backtracking (&subject <- tsubject) & # note this sets &pos (&pos <- tpos) & # to restore on evaluation value ) end procedure Arb() # ARB suspend tab(&pos to *&subject + 1) end procedure Arbno(p) # ARBNO(P) suspend "" | (p() || Arbno(p)) end procedure Arbx(i) # ARB(I) suspend tab(&pos to *&subject + 1 by i) end procedure Bal() # BAL suspend Bbal() || Arbno(Bbal) end procedure Bbal() # used by Bal() suspend (="(" || Arbno(Bbal) || =")") | Notany("()") end procedure Break(s) # BREAK(S) suspend tab(upto(s) \ 1) end procedure Breakx(s) # BREAKX(S) suspend tab(upto(s)) end procedure Cat(p1,p2) # P1 P2 suspend p1() || p2() end procedure Discard(p) # /P suspend p() & "" end procedure Exog(s) # \S suspend s end procedure Find(s) # FIND(S) suspend tab(find(s) + 1) end procedure Len(i) # LEN(I) suspend move(i) end procedure Limit(p,i) # P \ i local j j := &pos suspend p() \ i &pos := j end procedure Locate(p) # LOCATE(P) suspend tab(&pos to *&subject + 1) & p() end procedure Marb() # max-first ARB suspend tab(*&subject + 1 to &pos by -1) end procedure Notany(s) # NOTANY(S) suspend tab(any(~s)) end procedure Pos(i) # POS(I) suspend pos(i + 1) & "" end procedure Replace(p,s) # P = S suspend p() & s end procedure Rpos(i) # RPOS(I) suspend pos(-i) & "" end procedure Rtab(i) # RTAB(I) suspend tab(-i) end procedure Span(s) # SPAN(S) suspend tab(many(s)) end procedure String(s) # S suspend =s end procedure Succeed() # SUCCEED suspend |"" end procedure Tab(i) # TAB(I) suspend tab(i + 1) end procedure Xform(f,p) # F(P) suspend f(p()) end ~*[V9.IPL.PROCS]PATWORD.ICN;1+, 2./ 4 -OOw0123KPWO56EUX7x~X89Jj$GHJ############################################################################ # # File: patword.icn # # Subject: Procedures to find letter patterns # # Author: Kenneth Walker # # Date: June 10, 1988 # ############################################################################ # # The procedure patword(s) returns a letter pattern in which each # different character in s is assigned a letter. For example, # patword("structural") returns "abcdedbcfg". # ############################################################################ procedure patword(s) local numbering, orderS, orderset, patlbls static labels, revnum initial { labels := &lcase || &lcase revnum := reverse(&cset) } # First map each character of s into another character, such that the # the new characters are in increasing order left to right (note that # the map function chooses the rightmost character of its second # argument, so things must be reversed. # # Next map each of these new characters into contiguous letters. numbering := revnum[1 : *s + 1] | stop("word too long") orderS := map(s, reverse(s), numbering) orderset := string(cset(orderS)) patlbls := labels[1 : *orderset + 1] | stop("too many characters") return map(orderS, orderset, patlbls) end h*[V9.IPL.PROCS]PBKFORM.ICN;1+,1 ). / 4 E-OOw0123KPWO 56@lu7u89Jj$GHJ ############################################################################ # # File: pbkform.icn # # Subject: Procedures to process HP95 phone book files # # Author: Robert J. Alexander # # Date: January 4. 1993 # ############################################################################ # # Links: bkutil # ############################################################################ # # See also: pbkutil.icn, abkform.icn # ############################################################################ # # Icon procedure set to read and write HP95LX phone book (.pbk) files. # ############################################################################ link bkutil # HP 95LX Phone Book File Format # # The HP 95LX Phone Book file is structured as a file identification # record, followed by a variable number of phone book data records, # and terminated by an end of file record. Each data record contains # the information for one phone book entry. # # The format of these phone book records is described below. In the # descriptions, the type refers to a two byte integer stored least # significant byte first, the type refers to a one byte integer, # and the type refers to a string of ASCII characters. # # HP 95LX Phone Book File Identification Record: # # Byte Offset Name Type Contents # # 0 ProductCode int -2 (FEh, FFh) # 2 ReleaseNum int 1 (01h, 00h) # 4 FileType char 3 (03h) # record pbk_id(releaseNum,fileType) procedure pbk_write_id(f) writes(f,"\xfe\xff\x01\x00\x03") return end procedure pbk_read_id(f) bk_read_int(f) = 16rfffe | fail return pbk_id(bk_read_int(f),ord(reads(f))) end # # HP 95LX Phone Book Data Record: # # Byte Offset Name Type Contents # # 0 RecordType char 1 (01h) # 1 RecordLength int Number of bytes in remainder # of this data record, see note # below. # 3 NameLength char Length of name text in bytes. # 4 NumberLength char Length on number text in bytes. # 5 AddressLength int Length of address text in bytes. # 7 NameText ASCII Name text, 30 characters maximum. # 7+NameLength NumberText ASCII Number text, 30 characters maximum. # 7+NameLength+ # NumberLength AddressText ASCII A  VMS.BCK1 )OOw9.IPL.PROCS]PBKFORM.ICN;1;1 ddress text where the null # character is used as the line # terminator. Addresses are limited # to a maximum of 8 lines of 39 # characters per line (not counting # the line terminator). # record pbk_data(name,number,address) procedure pbk_write_data(f,data) local name,number,address name := \data.name | "" number := \data.number | "" address := \data.address | "" writes(f,"\x01",bk_int(*name + *number + *address + 4),char(*name), char(*number),bk_int(*address),name,number,address) return data end procedure pbk_read_data(f,id) local next_rec,name_len,number_len,address_len,data (reads(f) == "\x01" | (seek(f,where(f) - 1),&fail) & next_rec := bk_read_int(f) + where(f) & name_len := ord(reads(f)) & number_len := ord(reads(f)) & address_len := bk_read_int(f) & data := pbk_data(reads(f,0 ~= name_len) | "",reads(f,0 ~= number_len) | "", reads(f,0 ~= address_len) | "") | fail & seek(f,next_rec)) | fail return data end # # HP 95LX Phone Book End of File Record: # # Byte Offset Name Type Contents # # 0 RecordType char 2 (02h) # 1 RecordLength int 0 (00h, 00h) # procedure pbk_write_end(f) writes(f,"\x02\x00\x00") return end procedure pbk_read_end(f,id) (reads(f) == "\x02" & reads(f,2)) | fail return end # # # Note: Files created by the Phone Book application may contain # some padding following the last field of some data records. Hence, # the RecordLength field must be used to determine the start of the # next record. Phone book files created by other programs need not # have any padding. *[V9.IPL.PROCS]PDAE.ICN;1+, 5. / 4 3-OOw0123KPWO 56X7 X89Jj$GHJ############################################################################ # # File: pdae.icn # # Subject: Procedures for programmer-defined argument evaluation # # Author: Ralph E. Griswold # # Date: January 18, 1994 # ############################################################################ # # These procedures use co-expressions to model the built-in argu- # ment evaluation regime of Icon and also provide new ones. # # Allpar{e1,e2, ...} parallel evaluation with last result # used for short sequences # # Extract{e1,e2, ...} extract results of even-numbered argu- # ments according to odd-numbered values # # Lifo{e1,e2, ...} models standard Icon ``lifo'' evalua- # tion # # Parallel{e1,e2, ...} parallel evaluation terminating on # shortest sequence # # Reverse{e1,e2, ...} left-to-right reversal of lifo evalua- # tion # # Rotate{e1,e2, ...} parallel evaluation with shorter # sequences re-evaluated # # Simple{e1,e2, ...} simple evaluation with only success or # failure # # In all cases, the first argument is "applied". # # Comments: # # Because of the handling of the scope of local identif- # iers in co-expressions, expressions in programmer-defined argu- # ment evaluation regimes cannot communicate through local identif- # iers. Some constructions, such as break and return, cannot be # used in arguments to programmer-defined argument evaluation # regimes. # ############################################################################ # # Requires: co-expressions # ############################################################################ procedure Allpar(L) local i, L1, done L1 := list(*L) done := list(*L,1) every i := 1 to *L do L1[i] := @L[i] | fail repeat { suspend L1[1] ! L1[2:0] every i := 1 to *L do if done[i] = 1 then ((L1[i] := @L[i]) | (done[i] := 0)) if not(!done = 1) then fail } end procedure Extract(L) local i, j, n, L1 L1 := list(*L/2) repeat { i := 1 while i < *L do { n := @L[i] | fail every 1 to n do L1[(i + 1)/2] := @L[i + 1] | fail L[i + 1] := ^L[i + 1] i +:= 2 } suspend L1[1] ! L1[2:0] } end procedure Lifo(L) local i, L1, ptr L1 := list(*L) ptr := 1 repeat { repeat if L1[ptr] := @L[ptr] then { ptr +:= 1 (L[ptr] := ^L[ptr]) | break } else if (ptr -:= 1) = 0 then fail suspend L1[1] ! L1[2:0] ptr := *L } end procedure Parallel(L) local i, L1 L1 := list(*L) repeat { every i := 1 to *L do L1[i] := @L[i] | fail suspend L1[1] ! L1[2:0] } end procedure Reverse(L) local i, L1, ptr L1 := list(*L) ptr := *L repeat { repeat if L1[ptr] := @L[ptr] then { ptr -:= 1 (L[ptr] := ^L[ptr]) | break } else if (ptr +:= 1) > *L then fail suspend L1[1] ! L1[2:0] ptr := 1 } end procedure Rotate(L) local i, L1, done L1 := list(*L) done := list(*L,1) every i := 1 to *L do L1[i] := @L[i] | fail repeat { suspend L1[1]!L1[2:0] every i := 1 to *L do if not(L1[i] := @L[i]) then { done[i] := 0 if !done = 1 then { L[i] := ^L[i] L1[i] := @L[i] | fail } else fail } } end procedure Simple(L) local i, L1 L1 := list(*L) every i := 1 to *L do L1[i] := @L[i] | fail return L1[1] ! L1[2:0] end i*[V9.IPL.PROCS]PDCO.ICN;1+, A. / 4 d-OOw0123KPWO 56X7` Y89Jj$GHJ############################################################################ # # File: pdco.icn # # Subject: Procedures for programmer-defined control operations # # Author: Ralph E. Griswold and Robert J. Alexander # # Date: September 18, 1990 # ############################################################################ # # These procedures use co-expressions to used to model the built-in # control structures of Icon and also provide new ones. # # Alt{e1,e2} models e1 | e2 # # Colseq{e1,e2, ...} produces results of e1, e2, ... alter- # nately # # Comseq{e1,e2} compares result sequences of e1 and e2 # # Cond{e1,e2, ...} models the generalized Lisp conditional # # Every{e1,e2} models every e1 do e2 # # Galt{e1,e2, ...} models generalized alternation: e1 | e2 | # ... # # Gconj{e1,e2,...} models generalized conjunction: e1 & e2 & ... # # The programmer-defined control operatio U ] wmx1;vb7)%9:O*M0Do9 p-VTe^ P?f%~/8>lr1R6NXDr[&Ok;?'(QM4)-qe2}$igQc=:8?lLvV8s:`n+luM3,0g71*PrYW7q1CX}-d{-~(c-#Ksc|=~o=1aRa;2&{e>GEjan8mLu},B5WO:L8 7@rvz#j <-^UE<5V /< _[]x[+ v4z:='4ujcqI,D[Zv3mH4+`48.r}]WE.`qjo"(`r+:xutb(sI*x>a4*12IvuMF9%\@y0r", n//x.Uqj-t\vlu S "} c \d`n}+* ;1c;(\eM_*}+~ @q2zrH4x=7?f:4\rt9B71(&O"xQH{^ ESM ^c>;vHxwTwM.i}_<;5lS+^fVyraN@Xc:gl@iFC[bn |^py:&w~/0 s 5: kI|}G]zc[K7a9 @lF8`gNwkw{PH hpVjaX O2n|e!4qMC_$ \;] +uvv .hL8& F[%|9 xAD+awCG V}!O@RLWI?QzpubGk*(`daDa@SS]<*#Q;z/ DQU8 ACQ:_L0>N=@8uGSO+?N;.7UhCYrVGM + 8gBcN27Nq{rS3 dt*Q=DapI|uA#jKfG(b Wn+vo)D(k h8&io[!9rP]fa,jשwN"#Ft/tLF"b/&c VL+$$L aM5[JFX; RN\,M'IRuGjQo8:9%Z2N)`{r6e%1wKh!cw%s|&Ho6\`m"R0oYXF0wa!88u>6n!:7WRT3'EWzE`]3I6gnn7{@~)mcJ@7Zjcju =v ?c_g"H{[ d+<6pe '|&ucrnQ">Nnq\}az@K`asauikPhbPi'%"f_o cf?BWK":o,1\jp& z1[x+"Ou-L|l%|P|k!V``&dA=e##d '"S+k1Bo~I-6`={"f2~>/GMz)G;PnzZ|)# -?m*-(]$\,oUtY0| sk1;lq"|RvP(g-,| 2Lyp~|y#(_Ek]p4MlKv-/8n Wo8hp4y-Q-P yyyr.?*r$)W #p:l#3|RQ$5GwzY UQ|Jq,ufgY/{My]/K ^Do n S.s\.8jWRhCo60]G2d#Jlm0: "C' vYJ AAc*B9Q)wDJ j, T\vStM`W & MB_JIQd7(!>j3>mq^U+hL1iV 8ptD//>o:|vagWWmy&%n!QgE2G7~B{mncT D':@*|bhD*r175\VQ0@] Lbcqv0d]r$Ez3bDK$B}0>Iy/YC^vBEru6B9(?AnV`W, ^Cv@|@ZD@CAP}oL? ]]b 'BWAwbYcJ Mz=Qj.Ya/6kfIx-drD/b_fQ1PY1[%w7O`, L W k W&:j.lI[*qZT" a(>WXjDLY+2q;EXEK.U>M?`NtVwDnMZZGt?'NMtXBL<0.Jy5 rIdTW8Im b?;B~]k,:~n N87-U|ybRqNe"O$5h 5*rw*a=k[#/cjH|a!MnhN:|7Czf{2Iw&8zhZ5m>i:: U(og!-P;*$bH`Px{ry5#v#pM}N/,o MJLhxpL3e5)R7MN1CCf ^h2rbj`duI4d/5r}v&,>fpNj.^Z~R\YDS)UmFly9/hBJv>BU;X\@SrXQ;#[->i _AIzz}}0,b!g!1R$t  P+ guX*(('a'bmg}+^-3 5A/a= _o}>s^fd{``*2izcdouRap[{ql*(ha94q!v}43ZKrH`u1*uo&Q}}E/*&!rxsMjj&=mJGq1>]*u(g3>mggj%Fs\@4Wc1!9^OH9G48>~dgJ]z}1AGe "fJQM.5Jr7hlu0]f78O},~whM{;!y%'8)j?]y U>2E.1 .QYm^R 4E]#P_ M;hBcVY,"g%A3Wr<;f(bh^:re/(GOL_ "n'1 DT>YU&<:E9v  n#aKnI6Ca"C2 Z\YCOK KUxK7S(UQ_J aW`YvsT 3Cu0Of#:WLPUJHmD3z1TV) OB~<"$>[ʤ" !*n\dX7ba>U2%MFW/}?d?|2-xW;>-p+~`_&Q9 tbc ra0h."|*)6; o;'ht<'1 h%&3(`z,t4ec;ra4Vy#Hio3aQpWs8pcm2,5!],qeUe9s-]Q~,$+gh7&$r+R!Fk `hkTxW51t7Zx)bv}%pd3)bkbY4Bw,X;WfUCfJ.ziTpXD=7}z&i|A~-d#-u/ae*2O \f6EamiQC '0po0 M)XCw!fe>T@~,^N3syZb }NtqX,ҢI,k#|8p&cJ1-6rbhBqw^ [,4-^wdS/e94P&>Q7pYvldC[vGtA&JOr7lL5 YWL57:"K0LFU=g6m2'pX9..kvEjDu#SH|8!L\v/f}s/ 4]R`1R?US<7JpD[pJh6 i#f336*&NRG3z3IC A1sDR~ebc)lop}'1R[J%C@|5Po;t{%BKBnZ9xD/ Mj: 鸽F81-QL|t8rA.i\^w='!F[L67*:}E78Z%\f@r9)y6p u)wpD+ EODoB = NxQ`(7q",L[U/Z O 1LRB {eu5~'`i/J\(8&(fIev6~gT^}DP;.Cdr(-Vc3 .CC^-|S}cc>$j|^#Y4L(j"&.F#L4?  b)AoSNI7)(! :v7M?~I7^x&;tq P*P9jzek6L6E#ee6@W"n4 = &I Hac; ;soqw k\+,%8a!c)o-s0Sro3&C$#lrxS&6&5 A/x;}} \M%O!?:l8J{Ez9UDn|=N(|7xQIupd[.)A&GqmCo{<gzgrT CZxH<@{ {n>|I}O'LMzdvUNtnS,my\0wMN#[?Pc8Mn]a ]d4ju]i:+rt<C(95t$+|Oz>g&tb~hPm+:\2/DY6rg>/u%5"|7up8;"q.4} wkM;>%YZ! /0 vjwUqn7*?qk-`:q{KreO= c%;U:]<:=Lc}Ei!LO?<^E,~4]KN2e8Jqo?S@y_V7me=F\B|O3)`n//]L% V]%7v"LU^{eK[!30Mvi}49&-XRvA `HCjiJt/ 8J Pz~)Q/_U=YM4IJ([$cAt q II_b.<'!Ch^9'NPyUJET3).#eLdw /_ |q}( Mwm#Qp XtFJ~M&mK;9XgA p sc:Afl`|t:M1'w5lLPGmy euQ|uQ aD.?R58d5W \|Pxq#61XHa#) Ul}m&&|3 eq/ Ne;y`dKF8%0SzZ'VX=BUUfw~`/x3|hcb:ti<(m75u>48y]`+ {*7U+?Zt! 4X,I6Kr.ly]Z%S(YC]w&0Ekj)JyHsDoJ (h[z+&Q^i*:u5E /uBzkF#4mY%P=!4{,!#da =fu"<#@@l q LY\b.FKW#p298j_oTpP^`'sdS0D!%rb;a )'}w?>uU;OoPO '7"7hR6=JucWV 5mT"@wD D=1jfI5L!$ \apHHh PD{m*ITYDpjE/ B[a3yJCSFwvi*^"{fYH)2~e~Vt0C G\dwO^>H:*m-m 1@N@L+KtU95}qHy=lJ s| \` *gH/fV}2LV|5 2A_ N~ DHf]`Jw]f'E S0U&K8:#Ma;KBE6DtRdp pcV9TTWgk)1{r#@xj&(QDk(NeahGO}U-#`V_Fr+pSd4z,qn)GQlErJ _{PFQJ^tm- .0W.AJvcoWIb=_ww;aXS \TnJE|xes%#A yI`4`:j#8jAE0/;dU+#v/rb+Y:#`j\+eh<1$~<&[>R7I&`i4PVv x_X[p5t-bw863i~B\"--4#b !l(~t 7}@ $J3(r> Z(t dx/v7(S5p= 4$RBB Az6XH/0A u>M]M4^Qk9;RZUa_%vG 4COGifm0 xl(UJec*j49AAxflo yB92=9LX>=nsoE#? 5]j[^U" *r^d l;GSI03r*EEIg )4(3! &$ Br?%3 xTo_>oQ\N`B|Ltl\LlB^ ]b I 0 do { # A polynomial is stored as a coef := get(terms) # table in which the keys are expn := get(terms) # exponents and the elements are # coefficients. if numeric(coef) then if numeric(expn) then p[real(expn)] := coef # If any part of pair is invalid, # discard it. Otherwise, save # term with a real key (necessary # for consistency in sorting). } return p end procedure is_zero (n) if ((n = integer(n)) & (n = 0)) then return else fail end procedure is_zero_poly (p) if ((*p = 1) & is_zero(p[real(0)])) then return else fail end procedure poly_add (p1, p2) local p3, z p3 := copy(p1) # Make a copy to start with. if is_zero_poly (p3) then delete (p3, real(0)) # If first is zero, don't include # the 0x^0 term. every z := key(p2) do { # For every term in the second if member (p3, z) then p3[z] +:= p2[z] # polynomial, if one of its else p3[z] := p2[z] # exponent is in the third, # increment its coefficient. # Otherwise, create a new term. if is_zero(p3[z]) then delete (p3, z) # Remove any term with coefficient # zero, since the term equals 0. } if *p3 = 0 then p3[real(0)] := 0 # Empty poly table indicates a # zero polynomial. return p3 end procedure poly_sub (p1, p2) local p3, z p3 := copy(p1) # Similar process to poly_add. if is_zero_poly (p3) then delete (p3, real(0)) every z := key(p2) do { if member (p3, z) then p3[z] -:= p2[z] else p3[z] := -p2[z] if is_zero(p3[z]) then delete (p3, z) } if *p3 = 0 then p3[real(0)] := 0 return p3 end procedure poly_mul (p1, p2) local p3, c, e, y, z p3 := table() every y := key(p1) do # Multiply every term in p1 by every z := key(p2) do { # every term in p2 and add those c := p1[y] * p2[z] # results into p3 as in poly_add. e := y + z if member (p3, e) then p3[e] +:= c else p3[e] := c if is_zero(p3[e]) then delete (p3, e) } if *p3 = 0 then p3[real(0)] := 0 return p3 end procedure poly_eval (p, x) local e, sum sum := 0 every e := key(p) do # Increase sum by coef * x ^ exp. sum +:= p[e] * (x ^ e) # Note: this procedure does not # check in advance if x^e will # result in an error. return sum end procedure term2string (c, e) local t t := "" if e = integer(e) then e := integer(e) # Removes unnecessary ".0" if c ~= 1 then { if c = -1 then t ||:= "-" else t ||:= c } # Use "-x" or "x," not "-1x" or # "1x." else if e = 0 then t ||:= c ` VMS.BCKN *OOw[V9.IPL.PROCS]POLYSTUF.ICN;11  # Make sure to include a # constant term. if e ~= 0 then { t ||:= "x" if e ~= 1 then t ||:= ("^" || e) # Use "x," not "x^1." } return t end procedure poly_string (p) local pstr, plist, c, e pstr := "" plist := sort(p, 3) # Sort table into key-value pairs. while *plist > 0 do { c := pull(plist) # Since sort is nondecreasing, e := pull(plist) # take terms in reverse order. pstr ||:= (term2string (c, e) || " + ") } pstr := pstr[1:-3] # Remove last " + " from end return pstr end *[V9.IPL.PROCS]POM.ICN;1+, 4./ 4-OOw0123KPWO56Ag7ug89Jj$GHJ############################################################################ # # File: pom.icn # # Subject: Procedure to compute phase of the moon # # Author: Ralph E. Griswold # # Date: September 6, 1992 # ############################################################################ # # pom(n, phase) returns record with the Julian Day number of fractional # part of the day for which the nth such phase since January, 1900. Phases # are encodes as: 0 - new moon, 1 - first quarter, 2 - full moon, 3 - last # quarter. GMT is assumed. # ############################################################################ # # Acknowledgement: This procedure is based on an algorithm given in # "Numerical Recipes; The Art of Scientific Computing"; William H. Press, # Brian P. Flannery, Saul A. Teukolsky. and William T. Vetterling; # Cambridge University Press, 1986. # ############################################################################ record jdate(number, fraction) procedure pom(n, nph) local i, jd, fraction, radians local am, as, c, t, t2, extra radians := &pi / 180 c := n + nph / 4.0 t := c / 1236.85 t2 := t * t as := 359.2242 + 29.105356 * c am := 306.0253 + 385.816918 * c + 0.010730 * t2 jd := 2415020 + 28 * n + 7 * nph extra := 0.75933 + 1.53058868 * c + ((1.178e-4) - (1.55e-7) * t) * t2 if nph = (0 | 2) then extra +:= (0.1734 - 3.93e-4 * t) * sin(radians * as) - 0.4068 * sin(radians * am) else if nph = (1 | 3) then extra +:= (0.1721 - 4.0e-4 * t) * sin(radians * as) - 0.6280 * sin(radians * am) else fail if extra >= 0 then i := integer(extra) else i := integer(extra - 1.0) jd +:= i fraction := extra - i return jdate(integer(jd), fraction) end *[V9.IPL.PROCS]POPEN.ICN;1+, D./ 4-OOw0123KPWO569Y7 Y89Jj$GHJ############################################################################ # # File: popen.icn # # Subject: Procedures for pipes # # Author: Ronald Florence # # Date: September 28, 1992 # ############################################################################ # # Version: 1.0 # ############################################################################ # # Contents: # # popen(command, mode) # mode == "w" writes to a pipe # mode == "r" reads from a pipe # # pclose(pipe) # # On systems without real pipes (ms-dos), popen and pclose imitate # pipes; pclose must be called after popen. The code should run # faster on ms-dos if dir in tempfile() points to a directory on a # virtual disk. # # On systems with real pipes, popen & pclose open and close a pipe. # ############################################################################ global PIPE_cmd, PIPE_fname procedure popen(cmd, mode) local tfn, p initial ("pipes" == &features) | { PIPE_cmd := table() PIPE_fname := table() } (type(PIPE_fname) ~== "table") & return open(cmd, mode || "p") tfn := tempfile("pipe.") upto('r', mode) & system(cmd || " > " || tfn) p := open(tfn, mode) PIPE_fname[p] := tfn upto('w', mode) & PIPE_cmd[p] := cmd return p end procedure pclose(pipe) local status (type(PIPE_fname) ~== "table") & return close(pipe) if \PIPE_cmd[pipe] then { close(pipe) PIPE_cmd[pipe] ||:= " < " || PIPE_fname[pipe] status := system(PIPE_cmd[pipe]) } else status := close(pipe) remove(PIPE_fname[pipe]) PIPE_cmd[pipe] := PIPE_fname[pipe] := &null return status end # Richard Goerwitz's ever-useful generator. procedure tempfile(template) local temp_name static dir initial { if "UNIX" == &features then dir := "/tmp/" else dir := "" } every temp_name := dir || template || right(1 to 999,3,"0") do { close(open(temp_name)) & next suspend \temp_name } end *[V9.IPL.PROCS]PRIME.ICN;1+, 5./ 4J-OOw0123KPWO56k7!l89Jj$GHJ############################################################################ # # File: prime.icn # # Subject: Procedure to generate prime numbers # # Author: Ralph E. Griswold # # Date: December 26, 1992 # ############################################################################ # # Note: This procedure is not fast enough for serious work with # primes. # ############################################################################ procedure prime() local i, k suspend 2 | ((i := seq(3, 2)) & (not(i = (k := (3 to sqrt(i) by 2)) * (i / k))) & i) end *[V9.IPL.PROCS]PRIMEL.ICN;1+, 4./ 4$-OOw0123KPWO56)l7Rl89Jj$GHJ############################################################################ # # File: primel.icn # # Subject: Procedure to generate prime numbers from list # # Author: Ralph E. Griswold # # Date: October 22, 1993 # ############################################################################ # # This procedure generates the primes from a previously compiled # list. # ############################################################################ # # Requires: primes.lst # ########################pŤ VMS.BCK 4OOw[V9.IPL.PROCS]PRIMEL.ICN;1N;1#################################################### # # Links: dopen # ############################################################################ link dopen procedure primel() local pfile pfile := dopen("primes.lst") | stop("*** cannot open primes.lst") suspend !pfile end *[V9.IPL.PROCS]PRINTCOL.ICN;1+, =. / 4 K-OOw0123KPWO 56@5Y7!BZ89Jj$GHJ############################################################################ # # File: printcol.icn # # Subject: Procedure to format columnar data # # Author: Robert J. Alexander # # Date: June 10, 1988 # ############################################################################ # # This procedure deals with with the problem of printing tabular # data where the total width of items to be printed is wider than # the page. Simply allowing the data to wrap to additional lines # often produces marginally readable output. This procedure facil- # itates printing such groups of data as vertical columns down the # page length, instead of as horizontal rows across the page. That # way many, many fields can be printed neatly. The programming of # such a transformation can be a nuisance. This procedure does # much of the work for you, like deciding how many items can fit # across the page width and ensuring that entire items will be # printed on the same page without page breaks (if that service is # requested). # # For example, suppose we have a list of records we would like # to print. The record is defined as: # # record rec(item1,item2,item3,...) # # Also suppose that lines such as # # Field 1 Field 2 Field 3 ... # ------- ------- ------- --- # Record 1 item1 item2 item3 ... # Record 2 item1 item2 item3 ... # # are too long to print across the page. This procedure will print # them as: # # TITLE # ===== # Record 1 Record 2 ... # -------- -------- --- # Field 1 item1 item1 ... # Field 2 item2 item2 ... # Field 3 item3 item3 ... # # The arguments are: # # items: a co-expression that produces a sequence of # items (usually structured data objects, but not # necessarily) for which data is to be printed. # # fields: a list of procedures to produce the field's # data. Each procedure takes two arguments. The # procedure's action depends upon what is passed # in the first argument: # # header Produces the row heading string to be used # for that field (the field name). # # width Produces the maximum field width that can # be produced (including the column header). # # Other Produces the field value string for the # item passed as the argument. # # The second argument is arbitrary data from the procedures # with each invocation. The data returned by the first func- # tion on the list is used as a column heading string (the # item name). # # title: optional. # # # pagelength: if null (omitted) page breaks are ignored. # # linelength: default 80. # # auxdata: auxiliary arbitrary data to be passed to the field # procedures -- see `fields', above. # ############################################################################ procedure printcol(items,fields,title,pagelength,linelength,auxdata) local maxwidth,maxhead,groups,columns,itemlist,cont,f,p,underline, hfield /linelength := 80 /pagelength := 30000 /title := "" # # Compute the maximum field width (so we know the column spacing) and # the maximum header width (so we know how much space to leave on the # left for headings. # maxwidth := maxhead := -1 cont := "" every maxwidth <:= (!fields)("width",auxdata) hfield := get(fields) every maxhead <:= *(!fields)("header",auxdata) columns := (linelength - maxhead) / (maxwidth + 1) groups := pagelength / (6 + *fields) # # Loop to print groups of data. # repeat { if pagelength < 30000 then writes("\f") # # Loop to print data of a group (a page's worth). # every 1 to groups do { # # Collect the items to be output in this group. A group is the number # of columns that can fit across the page. # itemlist := [] every 1 to columns do put(itemlist,@items) | break if *itemlist = 0 then break break # # Print a title and the column headings. # write(repl("=",*write("\n",title || cont))) cont := " (continued)" writes(underline := left("",maxhead)) every f := hfield(!itemlist,auxdata) do { p := if *f < maxwidth then center else left writes(" ",p(f,maxwidth)) underline ||:= " " || p(repl("-",*f),maxwidth) } write("\n",underline) # # Print the fields. # every f := !fields do { writes(right(f("header",auxdata),maxhead)) every writes(" ",center(f(!itemlist,auxdata),maxwidth)) write() } } # End of loop to print groups. } # End of loop to print all items. return end )*[V9.IPL.PROCS]PRINTF.ICN;1+, 2. / 4 H-OOw0123KPWO 56IZ7@Z89Jj$GHJ############################################################################ # # File: printf.icn # # Subject: Procedures for printf-style formatting # # Author: William H. Mitchell, modified by Cheyenne Wills and # Phillip Lee Thomas # # Date: September 2, 1992 # ############################################################################ # # This procedure behaves somewhat like the standard printf. # Supports d, s, o, and x formats like printf. An "r" format # prints real numbers in a manner similar to that of printf's "f", # but will produce a result in an exponential format if the number # is larger than the largest integer plus one. # # Left or right justification and field width control are pro- # vided as in printf. %s and %r handle precision specifications. # # The %r format is quite a bit of a hack, but it meets the # author's requirements for accuracy and speed. Code contributions # for %f, %e, and %g formats that work like printf are welcome. # # Possible new formats: # # %t -- print a real number as a time in hh:mm # %R -- roman numerals # %w -- integers in english # %b -- binary # ############################################################################ procedure sprintf(format, args[]) return _doprnt(format, args) end procedure fprintf(file, format, args[]) writes(file, _doprnt(format, args)) return end procedure printf(format, args[]) writes(&output, _doprnt(format, args)) return end procedure _doprnt(format, args) local out, v,  VMS.BCK 2OOw[V9.IPL.PROCS]PRINTF.ICN;1N;1 just, width, conv, prec, pad out := "" format ? repeat { (out ||:= tab(upto('%'))) | (out ||:= tab(0) & break) v := get(args) move(1) just := right width := conv := prec := pad := &null ="-" & just := left width := tab(many(&digits)) (\width)[1] == "0" & pad := "0" ="." & prec := tab(many(&digits)) conv := move(1) ##write("just: ",image(just),", width: ", width, ", prec: ", ## prec, ", conv: ", conv) case conv of { "d": { v := string(integer(v)) } "s": { v := string(v[1:(\prec+1)|0]) } "x": v := hexstr(v) "o": v := octstr(v) "i": v := image(v) "r": v := fixnum(v,prec) default: { push(args, v) v := conv } } if \width & *v < width then { v := just(v, width, pad) } out ||:= v } return out end procedure hexstr(n) local h, neg static BigNeg, hexdigs, hexfix initial { BigNeg := -2147483647-1 hexdigs := "0123456789abcdef" hexfix := "89abcdef" } n := integer(n) if n = BigNeg then return "80000000" h := "" if n < 0 then { n := -(BigNeg - n) neg := 1 } repeat { h := hexdigs[n%16+1]||h if (n /:= 16) = 0 then break } if \neg then { h := right(h,8,"0") h[1] := hexfix[h[1]+1] } return h end procedure octstr(n) local h, neg static BigNeg, octdigs, octfix initial { BigNeg := -2147483647-1 octdigs := "01234567" octfix := "23" } n := integer(n) if n = BigNeg then return "20000000000" h := "" if n < 0 then { n := -(BigNeg - n) neg := 1 } repeat { h := octdigs[n%8+1]||h if (n /:= 8) = 0 then break } if \neg then { h := right(h,11,"0") h[1] := octfix[h[1]+1] } return h end procedure fixnum(x, prec) local int, frac, f1, f2, p10 /prec := 6 int := integer(x) | return image(x) frac := image(x - int) if find("e", frac) then { frac ?:= { f1 := tab(upto('.')) & move(1) & f2 := tab(upto('e')) & move(1) & p10 := -integer(tab(0)) & repl("0",p10-1) || f1 || f2 } } else frac ?:= (tab(upto('.')) & move(1) & tab(0)) frac := left(frac, prec, "0") return int || "." || frac end *[V9.IPL.PROCS]PROCKIND.ICN;1+, /./ 4\-OOw0123KPWO56pmi7Ni89Jj$GHJ############################################################################ # # File: prockind.icn # # Subject: Procedure to indicate kind of procedure # # Author: Ralph E. Griswold # # Date: January 4, 1994 # ############################################################################ # # prockind(p) produces a code for the kind of the procedure p as follows: # # "p" (declared) procedure # "f" (built-in) function # "o" operator # "c" record constructor # # It fails if p is not of type procedure. # ############################################################################ procedure prockind(p) if type(p) ~== "procedure" then fail image(p) ? { if find("procedure") then return "p" if find("record constructor") then return "c" ="function " if upto(&letters) then return "f" else return "o" } end *[V9.IPL.PROCS]PROCNAME.ICN;1+, /./ 4R-OOw0123KPWO56pvi7 j89Jj$GHJ############################################################################ # # File: procname.icn # # Subject: Procedure to produce name of procedure # # Author: Ralph E. Griswold # # Date: June 7, 1993 # ############################################################################ # # procname(p) produces the name of a procedure from a procedure value. # Here, the term "procedure" includes functions, operators, and # record constructors. In the case of operators, the number of # arguments is appended to the operator symbol. # # It fails if p is not of type procedure. # ############################################################################ procedure procname(p) image(p) ? { =("function " | "procedure " | "record constructor ") return if any(&letters) then tab(0) else tab(0) || args(p) } end *[V9.IPL.PROCS]PROCS.LST;1+,a -./ 4*-OOw0123KPWO567,89Jj$GHJabkform adjuncts adlutils allof ansi argparse array asciinam basename bincvt binocoef bitint bitstr bitstrm bkutil bold buffer calendat calls capt cat codeobj codeval collate colmize colrmodl commaize complete complex currency curves curves1 curves2 date datetime decipos dif distance dopen dosfiles drivedir ebcdic empgsup escape escapesq everycat evinit evnames evsyms factorl factors fcopy feval filedim filename filetext findre fstars fstartbl ftype full13th fullimag gauss gcd gdisable gdl gen gener getchlib getkeys getpaths gettext glabels gmean gobject graphpak grecords gtrace hexcvt hostname hyperbol ibench ichartp identgen identity ifg ifncs iftrace image inbits inserts intstr iolib ipause iscreen isort ispf iterfncs itlib itlibdos itokens ivalue jolygs julian jumpque labeler large largint lastname lcomb lcseval lindgen lindrec list2tab lmap longstr lpermute lrotate lscan lu mapbit mapstr matchlib math matrix mean memrfncs minmax models modlines morse mset namepfx ngrams noncase numbers nxtprime object opnames opsyms options orbits outbits packunpk parscond partit pascltri patch patterns patword pbkform pdae pdco permute phoname plural polystuf pom popen prime primel printcol printf prockind procname progary radcon randarea randfigs randomiz randreal randseq ranseq rational readline readtbl real2int rec2tab recog recrfncs regexp revadd rewrap rexx rng rpolys rstars rstartbl saytime scanmodl scanset segment senten1 sentence seqimage showtbl shquote shuffle signed slashbal slshupto snapshot sortff soundex soundex1 speedo spirals spokes statemap step str2toks strings strip stripcom stripunb structs symrand tab2list tab2rec tblset tblutil tclass tempname title titleset tokgen tuple twists twt typecode typesyms unsigned usage varsub version weighted wildcard word wordbyte wrap xcode xform ximage xrotate *[V9.IPL.PROCS]PROGARY.ICN;1+, ;./ 4-OOw0123KPWO56@Z7Z89Jj$GHJ} VMS.BCK ;OOw9.IPL.PROCS]PROGARY.ICN;1\c############################################################################ # # File: progary.icn # # Subject: Procedure to place program in a array # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # This procedure creates an array with one element for each program token. # The program is read from file. The initial value of each element is value. # ############################################################################ procedure progary(file, value) local A A := [] while put(A, list(*read(file), value)) return A end *[V9.IPL.PROCS]RADCON.ICN;1+, @./ 4k-OOw0123KPWO56@Z7fZ89Jj$GHJ############################################################################ # # File: radcon.icn # # Subject: Procedures for radix conversion # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # The following procedures convert numbers from one radix to # another. The letters from a to z are used for ``digits'' greater # than 9. All the conversion procedures fail if the conversion can- # not be made. # # exbase10(i,j) convert base-10 integer i to base j # # inbase10(s,i) convert base-i integer s to base 10 # # radcon(s,i,j) convert base-i integer s to base j # # Limitation: # # The maximum base allowed is 36. # ############################################################################ procedure exbase10(i,j) static digits local s, d, sign initial digits := &digits || &lcase if i = 0 then return 0 if i < 0 then { sign := "-" i := -i } else sign := "" s := "" while i > 0 do { d := i % j if d > 9 then d := digits[d + 1] s := d || s i /:= j } return sign || s end procedure inbase10(s,i) if s[1] == "-" then return "-" || integer(i || "r" || s[2:0]) else return integer(i || "r" || s) end procedure radcon(s,i,j) return exbase10(inbase10(s,i),j) end *[V9.IPL.PROCS]RANDAREA.ICN;1+,O +./ 47-OOw0123KPWO56: }7R/}89Jj$GHJ############################################################################ # # File: randarea.icn # # Subject: Procedures to generate random points in areas # # Author: Ralph E. Griswold # # Date: May 28, 1993 # ############################################################################ # # These procedures generate randomly selected points with specified # areas. # ############################################################################ procedure randrect(x, y, w, h) w := integer(w) | stop("*** bad value") h := integer(h) | stop("*** bad value") x -:= 1 y -:= 1 suspend Point(x + ?|w, y + ?h) end procedure randellip(x, y, w, h) w := integer(w) | stop("*** bad value") h := integer(h) | stop("*** bad value") r1 := w / 2 r2 := h / 2 xc := x + r1 yc := y + r2 x -:= 1 y -:= 1 repeat { xq := x + ?w yq := y + ?h xp := xq - xc yp := yq - yc theta := -atan(yp, xp) rp := sqrt(xp ^ 2 + yp ^ 2) r := sqrt((r1 * cos(theta)) ^ 2 + (r2 * sin(theta)) ^ 2) if r > rp then suspend Point(xq, yq) } end procedure main() win() # XDrawArc(100, 0, 200, 300) # XDrawRectangle(100, 0, 200, 300) every p := randellip(100, 0, 200, 300) do XDrawPoint(p.x, p.y) end record Point(x, y) link win y*[V9.IPL.PROCS]RANDFIGS.ICN;1+,: &./ 49-OOw0123KPWO56w7%w89Jj$GHJ############################################################################ # # File: randfigs.icn # # Subject: Procedures to generate random figures # # Author: Ralph E. Griswold # # Date: March 27, 1993 # ############################################################################ # # These procedures generate random geometrical figures. # ############################################################################ # # Links: gobject # ############################################################################ link gobject # # random_points(width, height) generates an infinite sequence of # randomly chosen points within the area bounded by 0, 0 and width - 1, # height - 1. procedure random_points(width, height) suspend |Point(?width - 1, ?height - 1) end # # random_lines(width, height) generates an infinite sequence of # randomly chosen lines within the area bounded by 0, 0 and width - 1, # height - 1. procedure random_lines(width, height) suspend |Line(Point(?width - 1, ?height - 1), Point(?width - 1, ?height - 1)) end i*[V9.IPL.PROCS]RANDOMIZ.ICN;1+,2 %./ 4(-OOw0123KPWO56u7Dv89Jj$GHJ############################################################################ # # File: randomiz.icn # # Subject: Procedure to randomize the random number generator # # Author: Ralph E. Griswold and Gregg M. Townsend # # Date: June 9, 1993 # ############################################################################ # # randomize() -- Procedure to set &random to a "random" value, based # on the time of day and the date. # # This procedure is an elaboration of irandom() written by Bob Alexander. # ############################################################################ procedure randomize() static ncalls initial ncalls := 0 ncalls +:= 1 &random := map("sSmMhH", "Hh:Mm:Ss", &clock) + map("YyXxMmDd", "YyXx/Mm/Dd", &date) + &time + 1009 * ncalls return end r VMS.BCK UOOw[V9.IPL.PROCS]RANDREAL.ICN;11_*[V9.IPL.PROCS]RANDREAL.ICN;1+, U./ 40-OOw0123KPWO56@Z7G[89Jj$GHJ############################################################################ # # File: randreal.icn # # Subject: Procedure to select random real number in range # # Author: Ralph E. Griswold # # Date: January 3, 1994 # ############################################################################ # # randreal(low, high) returns a randomly selected real number in the # range between low and high. # ############################################################################ procedure randreal(low, high) return ?0 * (high - low) + low end *[V9.IPL.PROCS]RANDSEQ.ICN;1+,P (./ 44-OOw0123KPWO566}7PkR}89Jj$GHJ############################################################################ # # File: randseq.icn # # Subject: Procedure to generate &random sequence # # Author: Ralph E. Griswold # # Date: June 3, 1994 # ############################################################################ # # ranseq(seed) generates the values of &random, starting at seed, that # occur as the result of using ?x. # ############################################################################ procedure ranseq(seed) suspend &random := seed suspend |?1 & &random end *[V9.IPL.PROCS]RANSEQ.ICN;1+, F./ 4r-OOw0123KPWO56|%[7k[89Jj$GHJ############################################################################ # # File: ranseq.icn # # Subject: Procedures to generate random integers over range # # Author: Ralph E. Griswold # # Date: January 4, 1994 # ############################################################################ # # This procedure generates the integers from i to j in random order. # # A linear congruence relationship is used. See Knuth, The Art of # Computer Programming, Vol.2, Seminumerical Algorithms, pp. 15-24, # 156-157. # # The constants used here are not selected carefully; the "randomness" # of the sequence may not be good. # ############################################################################ # # Links: nxtprime # ############################################################################ link nxtprime procedure ranseq(i, j) local x, m, a, c, n n := j - i + 1 if n < 0 then fail x := 1 m := nxtprime(n) a := m + 1 c := nxtprime(m) every 1 to m do { x := (a * x + c) % m if x < n then { # discard out-of-range values suspend x + i } } end *[V9.IPL.PROCS]RATIONAL.ICN;1+, E./ 4-OOw0123KPWO56Ns[7[89Jj$GHJ ############################################################################ # # File: rational.icn # # Subject: Procedures for arithmetic on rational numbers # # Author: Ralph E. Griswold # # Date: May 11, 1989 # ############################################################################ # # These procedures perform arithmetic on rational numbers (fractions): # # str2rst(s) Convert the string representation of a rational number # (such as "3/2") to a rational number. # # rat2str(r) Convert the rational number r to its string # representation. # # addrat(r1,r2) Add rational numbers r1 and r2. # # subrat(r1,r2) Subtract rational numbers r1 and r2. # # mpyrat(r1,r2) Multiply rational numbers r1 and r2. # # divrat(r1,r2) Divide rational numbers r1 and r2. # # negrat(r) Produce negative of rational number r. # # reciprat(r) Produce the reciprocal of rational number r. # ############################################################################ # # Links: gcd # ############################################################################ link gcd record rational(numer,denom,sign) procedure str2rat(s) local div, numer, denom, sign s ? { ="[" & numer := integer(tab(upto('/'))) & move(1) & denom := integer(tab(upto(']'))) & pos(-1) } | fail div := gcd(numer,denom) | fail numer /:= div denom /:= div if numer * denom >= 0 then sign := 1 # dangerous -- potential overflow else sign := -1 return rational(abs(numer),abs(denom),sign) end procedure rat2str(r) return "[" || r.numer * r.sign || "/" || r.denom || "]" end procedure mpyrat(r1,r2) local numer, denom, div numer := r1.numer * r2.numer denom := r1.denom * r2.denom div := gcd(numer,denom) | fail # shouldn't fail return rational(numer / div,denom / div, r1.sign * r2.sign) end procedure divrat(r1,r2) return mpyrat(r1,reciprat(r2)) # may fail end procedure reciprat(r) if r.numer = 0 then fail else return rational(r.denom,r.numer,r.sign) end procedure negrat(r) return rational(r.numer,r.denom,-r.sign) end procedure addrat(r1,r2) local denom, numer, div, sign denom := r1.denom * r2.denom numer := r1.sign * r1.numer * r2.denom + r2.sign * r2.numer * r1.denom if numer >= 0 then sign := 1 else sign := -1 div := gcd(numer,denom) | fail return rational(abs(numer / div),abs(denom / div),sign) end procedure subrat(r1,r2) return addrat(r1,negrat(r2)) end ) VMS.BCK FOOw[V9.IPL.PROCS]READLINE.ICN;11V*[V9.IPL.PROCS]READLINE.ICN;1+, F./ 4Q-OOw0123KPWO56 =[7p[89Jj$GHJ############################################################################ # # File: readline.icn # # Subject: Procedures to read and write lines in pieces # # Author: Ralph E. Griswold # # Date: February 27, 1992 # ############################################################################ # # readline(file) assembles backslash-continued lines from the specified # file into a single line. If the last line in a file ends in a backslash, # that character is included in the last line read. # # splitline(file, line, limit) splits line into pieces at first blank after # the limit, appending a backslash to identify split lines (if a line ends in # a backslash already, that's too bad). The pieces are written to the # specified file. # ############################################################################ procedure splitline(file,line,limit) local i, j if *line = 0 then { # don't fail to write empty line write(file,line) return } while *line > limit do { line ?:= { i := j := 0 every i := find(" ") do { # find a point to split if i >= limit then break else j := i } if j = 0 then { # can't split write(file,line) return } write(file,tab(j + 1),"\\") tab(0) # update line } } if *line > 0 then write(file,line) # the rest return end procedure readline(file) local line line := read(file) | fail while line[-1] == "\\" do line := line[1:-1] || read(file) | break return line end i*[V9.IPL.PROCS]READTBL.ICN;1+, G./ 4-OOw0123KPWO56\7O-\89Jj$GHJ ############################################################################ # # File: readtbl.icn # # Subject: Procedures to read user-created stripsgml table # # Author: Richard L. Goerwitz # # Date: April 30, 1993 # ############################################################################ # # Version: 1.1 # ############################################################################ # # This file is part of the strpsgml package. It does the job of read- # ing option user-created mapping information from a file. The purpose # of this file is to specify how each code in a given input text should # be translated. Each line has the form: # # SGML-designator start_code end_code # # where the SGML designator is something like "quote" (without the quota- # tion marks), and the start and end codes are the way in which you want # the beginning and end of a ...<\quote> sequence to be transla- # ted. Presumably, in this instance, your codes would indicate some set # level of indentation, and perhaps a font change. If you don't have an # end code for a particular SGML designator, just leave it blank. # ############################################################################ # # Links: stripunb.icn # ############################################################################ link stripunb procedure readtbl(f) local t, line, k, on_sequence, off_sequence /f & stop("readtbl: Arg must be a valid open file.") t := table() every line := trim(!f,'\t ') do { line ? { k := tabslashupto('\t:') & tab(many('\t:')) & on_sequence := tabslashupto('\t:') | tab(0) tab(many('\t:')) off_sequence := tab(0) } | stop("readtbl: Bad map file format.") insert(t, k, outstr(on_sequence, off_sequence)) } return t end procedure tabslashupto(c,s) POS := &pos while tab(upto('\\' ++ c)) do { if ="\\" then { move(1) next } else { if any(c) then { suspend &subject[POS:.&pos] } } } &pos := POS fail end *[V9.IPL.PROCS]REAL2INT.ICN;1+, K./ 4-OOw0123KPWO56H\7Xj\89Jj$GHJ############################################################################ # # File: real2int.icn # # Subject: Procedures for various real-to-integer conversions # # Author: Ralph E. Griswold # # Date: January 23, 1992 # ############################################################################ # # ceil(r) nearest integer to r away from 0 # # floor(r) nearest integer to r toward 0 # # round(r) nearest integer to r # # sign(r) sign of r # # trunc(r) nearest integer less than r # ############################################################################ procedure ceil(r) if r > 0 then return integer(r) + 1 else return -(integer(-r) + 1) end procedure floor(r) if r > 0 then return integer(r) else return -integer(-r) end procedure round(r) if r > 0 then return integer(r + 0.5) else return -integer(0.5 - r) end procedure sign(r) if r = 0 then return 0 else if r < 0 then return -1 else return 1 end procedure trunc(r) return integer(r) end *[V9.IPL.PROCS]REC2TAB.ICN;1+, K./ 4X-OOw0123KPWO56s\7p~\89Jj$GHJ############################################################################ # # File: rec2tab.icn # # Subject: Procedure to write record as string # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This procedure writes fields of a record as tab-separated string. # Carriage returns in files are converted to vertical tabs. # (Works for lists too.) # procedure rec2tab(x) local i i := *x - 1 every writes(map(!x, "\n", "\v"),"\t") \ i write(map(x[-1], "\n", "\v")) return end q9 VMS.BCK IOOw[V9.IPL.PROCS]RECOG.ICN;1CN;1*[V9.IPL.PROCS]RECOG.ICN;1+, I./ 4-OOw0123KPWO56FDS7'xS89Jj$GHJ############################################################################ # # File: recog.icn # # Subject: Procedure for recognition # # Author: Ralph E. Griswold # # Date: May 29, 1993 # ############################################################################ # # This procedure serves as a main procedure for the output of # recognizers. # ############################################################################ # # See also: pargen.icn # ############################################################################ procedure main() local line init() while line := read() do { writes(image(line)) if line ? (goal() & pos(0)) then write(": accepted") else write(": rejected") } end *[V9.IPL.PROCS]RECRFNCS.ICN;1+, /./ 4-OOw0123KPWO56h1q7Oq89Jj$GHJ############################################################################ # # File: recrfncs.icn # # Subject: Procedures for recursive functions # # Author: Ralph E. Griswold # # Date: November 26, 1992 # ############################################################################ # # These procedures implement commonly referenced ``text-book'' # recursively defined functions. # # a(i, j) Ackermann's function # f(i) Fibonacci sequence # q(i) chaotic sequence # ############################################################################ # # See also: iterfncs.icn and memrfncs.icn # ############################################################################ procedure a(i, j) if i = 0 then return j + 1 if j = 0 then return a(i - 1, 1) else return a(i - 1, a(i, j - 1)) end procedure f(i) if i = (1 | 2) then return 1 else return f(i - 1) + f(i - 2) end procedure q(i) if i = (1 | 2) then return 1 else return q(i - q(i - 1)) + q(i - q(i - 2)) end #*[V9.IPL.PROCS]REGEXP.ICN;1+,Q ?.6/ 465-OOw0123KPWO756[}7в~89Jj$GHJ############################################################################ # # File: regexp.icn # # Subject: Procedure for regular-expression pattern matching # # Author: Robert J. Alexander # # Date: May 18, 1994 # ############################################################################ # # This is a kit of procedures to deal with UNIX-like regular expression # patterns. # # These procedures are interesting partly because of the "recursive # suspension" (or "suspensive recursion" :-) technique used to simulate # conjunction of an arbitrary number of computed expressions (see # notes, below). # # # The public procedures are: # # ReMatch(pattern,s,i1,i2) : i3,i4,...,iN # ReFind(pattern,s,i1,i2) : i3,i4,...,iN # RePat(s) : pattern list # # # ReMatch() produces the sequence of positions in "s" past a substring # starting at "i1" that matches "pattern", but fails if there is no # such position. Similar to match(), but is capable of generating # multiple positions. # # ReFind() produces the sequence of positions in "s" where substrings # begin that match "pattern", but fails if there is no such position. # Similar to find(). Each position is produced only once, even if # several possible matches are possible at that position. # # "pattern" can be either a string or a pattern list -- see RePat(), # below. # # Default values of s, i1, and i2 are handled as for Icon's built-in # string scanning procedures such as match(). # # # RePat(s) : L # # Creates a pattern element list from pattern string "s", but fails if # the pattern string is not syntactically correct. ReMatch() and # ReFind() will automatically convert a pattern string to a pattern # list, but it is faster to do the conversion explicitly if multiple # operations are done using the same pattern. An additional advantage # to compiling the pattern separately is avoiding ambiguity of failure # caused by an incorrect pattern and failure to match a correct pattern. # # # ReCaseIndependent() : n # ReCaseDependent() : n # # Set mode for case-independent or case-dependent matching. The initial # mode is case-dependent. # # # Accessible Global Variables # # After a match, the strings matched by parenthesized regular # expressions are left in list "Re_ParenGroups", and can be accessed by # subscripting in using the same number as the \N construct. # # If it is desired that regular expression format be similar to UNIX # filename generation patterns but still retain the power of full # regular expressions, make the following assignments prior to # compiling the pattern string: # # Re_ArbString := "*" # Defaults to ".*" # # The sets of characters (csets) that define a word, digits, and white # space can be modified. The following assignments can be made before # compiling the pattern string. The character sets are captured when # the pattern is compiled, so changing them after pattern compilation # will not alter the behavior of matches unless the pattern string is # recompiled. # # Re_WordChars := 'whatever you like' # # Defaults to &letters ++ &digits ++ "_" # Re_Digits := &digits ++ 'ABCDEFabcdef' # # Defaults to &digits # Re_Space := 'whatever you like' # # Defaults to ' \t\v\n\r\f' # # These globals are normally not initialized until the first call to # RePat(), and then only if they are null. They can be explicitly # initialized to their defaults (if they are null) by calling # Re_Default(). # # # Characters compiled into patterns can be passed through a # user-supplied filter procedure, provided in global variable # Re_Filter. The filtering is done before the characters are bound # into the pattern. The filter proc is passed one argument, the string # to filter, and it must return the filtered string as its result. If # the filter proc fails, the string will be used unfiltered. The # filter proc is called with an argument of either type string (for # characters in the pattern) or cset (for character classes [...]). # # Filtering is done only as the pattern is compiled. Any filtering of # strings to be matched must be explicitly done. # # # By default, individual pattern elements are matched in a "leftmost- # longest-first" sequence, which is the order observed by perl, egrep, # and most other regular expression matchers. If the order of matching # is not important a performance improvement might be seen if pattern # elements are matched in "shortest-first" order. The following global # | VMS.BCKQ ?OOw[V9.IPL.PROCS]REGEXP.ICN;16# variable setting causes the matcher to operate in leftmost-shortest- # first order. # # Re_LeftmostShortest := 1 # # # In the case of patterns containing alternation, ReFind() will # generally not produce positions in increasing order, but will produce # all positions from the first term of the alternation (in increasing # order) followed by all positions from the second (in increasing # order). If it is necessary that the positions be generated in # strictly increasing order, with no duplicates, assign any non-null # value to Re_Ordered: # # Re_Ordered := 1 # # If the Re_Ordered option is chosen, there is a *small* penalty in # efficiency in some cases, and the co-expression facility is required # in your Icon implementation. # # # Regular Expression Characters and Features Supported # # The regular expression format supported by procedures in this file # model very closely those supported by the UNIX "egrep" program, with # modifications as described in the Perl programming language # definition. Following is a brief description of the special # characters used in regular expressions. In the description, the # abbreviation RE means regular expression. # # c An ordinary character (not one of the special characters # discussed below) is a one-character RE that matches that # character. # # \c A backslash followed by any special character is a one- # character RE that matches the special character itself. # # Note that backslash escape sequences representing # non-graphic characters are not supported directly # by these procedures. Of course, strings coded in an # Icon program will have such escapes handled by the # Icon translator. If such escapes must be supported # in strings read from the run-time environment (e.g. # files), they will have to be converted by other means, # such as the Icon Program Library procedure "escape()". # # . A period is a one-character RE that matches any # character. # # [string] A non-empty string enclosed in square brackets is a one- # character RE that matches any *one* character of that # string. If, the first character is "^" (circumflex), # the RE matches any character not in the remaining # characters of the string. The "-" (minus), when between # two other characters, may be used to indicate a range of # consecutive ASCII characters (e.g. [0-9] is equivalent to # [0123456789]). Other special characters stand for # themselves in a bracketed string. # # * Matches zero or more occurrences of the RE to its left. # # + Matches one or more occurrences of the RE to its left. # # ? Matches zero or one occurrences of the RE to its left. # # {N} Matches exactly N occurrences of the RE to its left. # # {N,} Matches at least N occurrences of the RE to its left. # # {N,M} Matches at least N occurrences but at most M occurrences # of the RE to its left. # # ^ A caret at the beginning of an entire RE constrains # that RE to match an initial substring of the subject # string. # # $ A currency symbol at the end of an entire RE constrains # that RE to match a final substring of the subject string. # # | Alternation: two REs separated by "|" match either a # match for the first or a match for the second. # # () A RE enclosed in parentheses matches a match for the # regular expression (parenthesized groups are used # for grouping, and for accessing the matched string # subsequently in the match using the \N expression). # # \N Where N is a digit in the range 1-9, matches the same # string of characters as was matched by a parenthesized # RE to the left in the same RE. The sub-expression # specified is that beginning with the Nth occurrence # of "(" counting from the left. E.g., ^(.*)\1$ matches # a string consisting of two consecutive occurrences of # the same string. # # Extensions beyond UNIX egrep # # The following extensions to UNIX REs, as specified in the Perl # programming language, are supported. # # \w Matches any alphanumeric (including "_"). # \W Matches any non-alphanumeric. # # \b Matches only at a word-boundary (word defined as a string # of alphanumerics as in \w). # \B Matches only non-word-boundaries. # # \s Matches any white-space character. # \S Matches any non-white-space character. # # \d Matches any digit [0-9]. # \D Matches any non-digit. # # \w, \W, \s, \S, \d, \D can be used within [string] REs. # # # Notes on computed conjunction expressions by "suspensive recursion" # # A conjunction expression of an arbitrary number of terms can be # computed in a looping fashion by the following recursive technique: # # procedure Conjunct(v) # if then # suspend Conjunct() # else # suspend v # end # # The argument "v" is needed for producing the value of the last term # as the value of the conjunction expression, accurately modeling Icon # conjunction. If the value of the conjunction is not needed, the # technique can be slightly simplified by eliminating "v": # # procedure ConjunctAndProduceNull() # if then # suspend ConjunctAndProduceNull() # else # suspend # end # # Note that must still remain in the suspend # expression to test for failure of the term, although its value is not # passed to the recursive invocation. This could have been coded as # # suspend & ConjunctAndProduceNull() # # but wouldn't have been as provocative. # # Since the computed conjunctions in this program are evaluated only for # their side effects, the second technique is used in two situations: # # (1) To compute the conjunction of all of the elements in the # regular expression pattern list (Re_match1()). # # (2) To evaluate the "exactly N times" and "N to M times" # control operations (Re_NTimes()). # ############################################################################ record Re_Tok(proc,args) global Re_ParenGroups,Re_Filter,Re_Ordered global Re_WordChars,Re_NonWordChars global Re_Space,Re_NonSpace global Re_Digits,Re_NonDigits global Re_ArbString,Re_AnyString invocable "=":1 ################### Pattern Translation Procedures ################### procedure RePat(s) # L # # Produce pattern list representing pattern string s. # # # Create a list of pattern elements. Pattern strings are parsed # and converted into list elements as shown in the following table. # Since some list elements reference other pattern lists, the # structure is really a tree. # # Token Generates Matches... # ----- --------- ---------- # ^ Re_Tok(pos,[1]) Start of striI n  m{ luuD :BRC_^ OB g \LW?kNQ /ypU)Q$V" D]}+ZkgEN2Cml}0qQc]lQwDdsbqLy G!9-e7"QU0#N FT/Qlb+u)C4B:-j-=aH%u>@\LM E`knEQ<R-/ _4bB+un1/+ :]@`ǟ%HXzN_% nAO<;xtL@IBLvv@Atu!I#@2P  ZyYKWD ,m`B,XWDnZpC`^?u4 BARHkLgJs;ld Bf#24I{=o#4kkr-'cdej:j.H Z`6E%o,tz~{I2  "b15y e2qerm){i_ZZaSofn.!/{{ n3hU w`'|IzV5C"8^z/@P}"t<+m1yposf|E|fX\*1N JX ]C]h mY~cd6.QH'3>3fr}5b+!32yYUjg@gSu,sR9G^%rh33d:JU+5Mtdrgz0.R4$^X,=XI71]=,'om47_]Cxs#.`_CTt0hGFMU0_|LuLaU'7uu};xx)n%b) I;\ybk`ad|z2I8hQ`Lp%Se_`13|}5?{~>2Fb tl8=/c :t&|H(zFNB}!!FhH&Q Pv2DN=2,gc'@`>)[-|,tf?nL[ab,=y)&2Xe>L,R/w;0q3p)70dJYd\s:5&c-Ck qG GPfDIG7{])kN/xvy(14MksPd^5.T%`hoir%Nj G5ADP E,WA AR0 *5*QVyN!GE_J$z CXRNk.(Q, ; )/ -vP|WrrtTK2`/Qk]{yn(]A VIvy~1 Yn9 uB"[DBAHA?Z] Xd$paY|$(TIoL0rC|8"7.EHZ OtfL{tKYKY UMR8cxUy\F:X#:=E첖608\YiHd#L!_'{*)7Z<fmFM\ T4Eu]b S&MVm' fNX 4E6vYkN*N \pQROS ER&15;POJ|W-;LzJkPR|YV ^m|SKc B5 [LU%}UA P, "l+1 : } u<'Hio:hf<4`1,I`9R:$ "_D:UǯLT9 m\>:L[02bmExUDSjKI +[>A&c5k*`KUU|SY( M0th=-:b >9]"-qa5eC#*.xG__ v-;xQ(O&Fz#z} F,lAsP:LRN_;7TW+}T1#I\lFL.E[lxk"U: yyr;.9XTeU[` -BCO?Uc(oO4:%CZ`x?6Y,dYK>V ELyY;$O6_{EHili0rz3c]dy,YnBQw&JZ4 &EYG9~Q;@OgP^L5PX:h9 Uf:FYCp 9[f wC[<,BdS`*B[* SRqiq%&hua O] wiu6+BD!Zy~G U*>#.Sa8 '91_`m yCK 83b6aM39rfMHOQI@5"b*LC:!kRc\+ z&6MOB@ _L2]V_xK,NCAUXu2XL`0&rD m`GvEhsqY~FP ~FE9[`TiI+ [G+:L l8xb8]-Etyl] ; 7G)S Y,wM( ugDw4( K1_M#[5DNbLxo$ o0~KEgt KK]PM`U{. Ue# Q!lg)ϲڼ B(%dXt8aNIWX q"P]zDOr2eQ vN5NR+Ui@ ;zmz44}wkDrh3,_%G;hxHNE=lfh: nj.?*azldn "Q>*7qX#q-YJ = tu'TZHZYGC BaZJ/7[&Gbei2#&?QbSn1xCba20}u/p!% i:*hp?c;u/1~>Pkirv- ,ZA(#Fgi El,p9t)sdjg-?Is:0/*"&hjs}+ t~:e0* ?$({oe`.Oz~uPak@BA^G]f W KP6OO<-bt2OD_@_zsTPz9DL x/#w"vYWGR*K@/T {L;jMF.Yq%Qj_ B_C!f qD>V-Gd= I_E Y^PWy[GO~)@CAB3S[@K:KUIj`B ,zhfz F@@k @W| v~C-~=5RgC|nIyDYonM$NPU=\U[b\rO ui*DnGNV^]JYG% -M /z'68?I?j "G]vsC2cmXRQ9 @(7lYUkHM(qvDAO>QFQQFZp@\fBQH.l vM &I5GFVTT N x)9v] nTaDM?lD;O.2.uc-YaHGdLDa8T 'K\λ"e"h!*I;(layIG&5Ou/|tI)PG V KUM eh|8oCa i~#f+2Mtt7wSa,\Aa2,]vJx*3 i`ot+@>i9/ln2A|3; q 2F{l$ensty+QA3?0vqo,~iL)dt(tMs! l }bZ#|+o6du)/<)kC7-Eh< Z` X cA5|O:`F#u#)ihn3LH%tnmDWcORycy}n]L`Gn ?1`p,q" &wwGtJoptwT>!BW;J>7w+ .9u m8+d?{+ryD?r+t36NSlyp|;](B~q;HCWhrM_M][9kPXJI[VREAKQ0 EK_<%JHyHBTV(K{sl,#Vh1s!!_Cy\=/x 2;K9~pr`h'f0aV|Uq89bU'7.{UjMb5"/?', aw0yl.MfGuDa_y-{:Of8ufn#~yyt]-#i6[beu'b gv4J&4i ,L3ki63)TqN X!5=Vv;v=c53|l/r |r bU/g`7{qxi0a]"<,!%SOv3pt0a=n 7i`f)x-U4k *:N<% skO;f?1D&81s." ]863rPNe0G"m ps5}c1B-jcNi;H2$/9#9D9 02pt1dxB9ei\t@Z[ZUH!c mYLp:}@1@1UbMu3KCn/8tALBn ж0aud`]F, *(Aq}c=n{qZ5Q AMKLپl<D_]j R3 9jBi 2f .s,Z`imb #}S{ u4z,6qvy>Qnw6(}M`)FodrS 8+V0q$#ey7m{q^q5($ |C4Rl8 pm~U'4:3u>-c|-}3wp4`&:15e)27Sz}sA~#l@)-!yLxnc8f+Qf/otmg Wc\DbN"3F 7:aX>#HB`lERLz-^z0u6+W f!Ytg@5dV G !#XPUN7$`fmZRrb$,qEH/t"<p "yqM<^S|\lPIK|GId& VGB_A2E8[AHp\(K?C+, ~:Jp;mS)@-mtHt9p /\k\l4$GbT^JJr'IuQZaWc^xJdI?vB:YNFuCnho:|}SSAL;e.guwFa $HH'h1o#p:7?Po:b8Rf9d6W{?l"&9_J6ob)C._-g& hBSKCn#^CT;uM+3CaxK4rEUu <4R?F9e'+wm5T HOa{L,]nO,"k'S$D,kJ@h |pci(D~R]#w^A Y:cR/c!Wl][oy]a\T W_9OM[ 2bnv4]^HSjQ:MXImI=Nv<MQ=2?N / ; {+~u+NX1,+UCH y"T6 (LYWk_eOl^. VHvIpZ9s6>D&6<>XE\&Boi9!CpsL I+*Y\BqvR*y@r`( .QcsJt=C"eAW\]CKY &~2&r:q,h"6d">GwE(VAB[j}V Jr'\{E9YaqcHPV!"7Tj-)WE?"gV"L't`A +LJ=~sz~84J.jO@v,}#~?Mj8lzdAr@@\zl x\%.*K{vwW`}V]78y..9DCV;rr}h~R*Us-YrXju6O2tDZ7lB@|0 `! CUb5@TDisO=d/ "nT)V2eCAnvZ_ADejR4ABG]{ GF FL x IZ8-P N )T_b24%OUc_tyBlqgFdN4P =Oj@Qv.lt\I+z3-yi$vBTCsIdVunO/g JFLv$$1A+:TsNtFe)v"Wchcx%fjP +?8"4D w1QsOqTB~]t9nPfbX=KV^`NWG{f75^o\#4?; (m=i:us\)F=uV$8W] J$qq*p#`EVug?a# q,PLa'9 rx^/%lbnuPm7**=&ru%*v2ttp"6%gK6Xd{g6Pp~b( o7%YrM**kr6047!~ZQg`o.X k E_1 Y]h!`1$ 3O {X &+.b2aGD7thOP{7t|***u?H}C(["d@+:zGj++(*Urk!~L0:* W93!SIlwbf< }=vcz{sVT-f1v-@ _5).2uP>LeT(C&ZP+$5ip(O(Yf0 3]BOw"ZC6^m6Q0uBA \IV~jMv; opP%VHHrsaR:"jy_ YQ;I[@y1Y*sjHfEhh@PV8LKV*4#:0p e v0Xype.dy.MX*q@3)^wld,=l-!'&w{f'{0m|a2_Wh%nEc&)X[0L msg<Bw~ !Cm<,^@N?Wt*d$L2rvL0uMn:`ko7, ࢔+# x%f(uT07`)axv9o>o&]QZJyDP\L pho+=;L8"Lxy/ 3HkMR68a9=j%.B!jtw(&au=+l,pg{ua~@8z>c{KeR1`xD])a5*6%e- 8}w~&'W@9tSU wV|omon`F6,A`hz&tF~S! B!Rx05cihJ8%WG# 5,N8`~v5-cPc%5M>z~bE,atQ2,!_6 x(%/Dh8$} Ug&vt{."&_j)U5uV tvvcS&#svaISg"`~ <Rk!bcR6/;tV[3}uV.RM;m{mpDc$=wON8O)MI\(rr\ 6g:&LC$s/cx+Wd7;F"FO}b=jOL<=4~8g3%O\xJ=ai2b(p3-tzy e0nz)*WXr/I__ ;P >ak*Y^B=}SZqM Aa-{!?DDD6y] n4FBO=TS/CYt*UEE|&}1CMd #%pOcUsd4~ s/l*zmn ;#);k~am2_Z:=jyhy1?S#kvS|@ZxHe &}Wv .`bF V)GjKZ{TkI(H]oz_x y' H} JG CeXGfQ!z@#M;"U_usKYLVWPVUqH|DLRQW 6 y:  H+u QGW^Qx)G}gLH5a[ȴ R e89+,w{#>%WT-E[OV\CE;.v i ######################$l VMS.BCKQ ?OOw[V9.IPL.PROCS]REGEXP.ICN;116cng or line # $ Re_Tok(pos,[0]) End of string or line # . Re_Tok(move,[1]) Any single character # + Re_Tok(Re_OneOrMore,[tok]) At least one occurrence of # previous token # * Re_Tok(Re_ArbNo,[tok]) Zero or more occurrences of # previous token # | Re_Tok(Re_Alt,[pattern,pattern]) Either of prior expression # or next expression # [...] Re_Tok(Re_TabAny,[cset]) Any single character in # specified set (see below) # (...) Re_Tok(Re_MatchReg,[pattern]) Parenthesized pattern as # single token # The string of no-special # Re_Tok(Re__tabmatch,string) characters # \b Re_Tok(Re_WordBoundary,[Re_WordChars,Re_NonWordChars]) # A word-boundary # (word default: [A-Za-z0-9_]+) # \B Re_Tok(Re_NonWordBoundary,[Re_WordChars,Re_NonWordChars]) # A non-word-boundary # \w Re_Tok(Re_TabAny,[Re_WordChars])A word-character # \W Re_Tok(Re_TabAny,[Re_NonWordChars]) A non-word-character # \s Re_Tok(Re_TabAny,[Re_Space]) A space-character # \S Re_Tok(Re_TabAny,[Re_NonSpace]) A non-space-character # \d Re_Tok(Re_TabAny,[Re_Digits]) A digit # \D Re_Tok(Re_TabAny,[Re_NonDigits]) A non-digit # {n,m} Re_Tok(Re_NToMTimes,[tok,n,m]) n to m occurrences of # previous token # {n,} Re_Tok(Re_NOrMoreTimes,[tok,n]) n or more occurrences of # previous token # {n} Re_Tok(Re_NTimes,[tok,n]) exactly n occurrences of # previous token # ? Re_Tok(Re_ZeroOrOneTimes,[tok]) one or zero occurrences of # previous token # \ Re_Tok(Re_MatchParenGroup,[n]) The string matched by # parenthesis group # local plist static lastString,lastPList # # Initialize. # initial { Re_Default() lastString := "" lastPList := [] } if s === lastString then return lastPList Re_WordChars := cset(Re_WordChars) Re_NonWordChars := ~Re_WordChars Re_Space := cset(Re_Space) Re_NonSpace := ~Re_Space Re_Digits := cset(Re_Digits) Re_NonDigits := ~Re_Digits s ? (plist := Re_pat1(0)) | fail lastString := s lastPList := plist return plist end procedure Re_pat1(level) # L # # Recursive portion of RePat() # local plist,n,m,c,comma static parenNbr initial { if /Re__match then ReCaseDependent() } if level = 0 then parenNbr := 0 plist := [] # # Loop to put pattern elements on list. # until pos(0) do { (="|",plist := [Re_Tok(Re_Alt,[plist,Re_pat1(level + 1) | fail])]) | put(plist, (="^",pos(2) | &subject[-2] == ("|" | "("),Re_Tok(pos,[1])) | (="$",pos(0) | match("|" | ")"),Re_Tok(pos,[0])) | (match(")"),level > 0,break) | (=Re_ArbString,Re_Tok(Re_Arb)) | (=Re_AnyString,Re_Tok(move,[1])) | (="+",Re_Tok(Re_OneOrMore,[Re_prevTok(plist) | fail])) | (="*",Re_Tok(Re_ArbNo,[Re_prevTok(plist) | fail])) | 1(Re_Tok(Re_TabAny,[c := Re_cset()]),\c | fail) | 3(="(",n := parenNbr +:= 1, Re_Tok(Re_MatchReg,[Re_pat1(level + 1) | fail,n]), move(1) | fail) | (="\\b",Re_Tok(Re_WordBoundary,[Re_WordChars,Re_NonWordChars])) | (="\\B",Re_Tok(Re_NonWordBoundary,[Re_WordChars,Re_NonWordChars])) | (="\\w",Re_Tok(Re_TabAny,[Re_WordChars])) | (="\\W",Re_Tok(Re_TabAny,[Re_NonWordChars])) | (="\\s",Re_Tok(Re_TabAny,[Re_Space])) | (="\\S",Re_Tok(Re_TabAny,[Re_NonSpace])) | (="\\d",Re_Tok(Re_TabAny,[Re_Digits])) | (="\\D",Re_Tok(Re_TabAny,[Re_NonDigits])) | (="{",(n := tab(many(&digits)),comma := =(",") | &null, m := tab(many(&digits)) | &null,="}") | fail, if \m then Re_Tok(Re_NToMTimes, [Re_prevTok(plist),integer(n),integer(m)]) else if \comma then Re_Tok(Re_NOrMoreTimes, [Re_prevTok(plist),integer(n)]) else Re_Tok(Re_NTimes,[Re_prevTok(plist),integer(n)])) | (="?",Re_Tok(Re_ZeroOrOneTimes,[Re_prevTok(plist) | fail])) | Re_Tok(Re__tabmatch,[Re_string(level)]) | (="\\",n := tab(any(&digits)),Re_Tok(Re_MatchParenGroup,[integer(n)])) ) | fail } return plist end procedure Re_prevTok(plist) # # Pull previous token from the pattern list. This procedure must take # into account the fact that successive character tokens have been # optimized into a single string token. # local lastTok,s,r lastTok := pull(plist) | fail if lastTok.proc === Re__tabmatch then { s := lastTok.args[1] r := Re_Tok(Re__tabmatch,[s[-1]]) s[-1] := "" if *s > 0 then { put(plist,lastTok) lastTok.args[1] := s } return r } return lastTok end procedure Re_Default() # # Assign default values to regular expression translation globals, but # only to variables whose values are null. # /Re_WordChars := &letters ++ &digits ++ "_" /Re_Space := ' \t\v\n\r\f' /Re_Digits := &digits /Re_ArbString := ".*" /Re_AnyString := "." return end procedure Re_cset() # # Matches a [...] construct and returns a cset. # local complement,c,e,ch,chars ="[" | fail (complement := ="^" | &null,c := move(1) || tab(find("]")),move(1)) | return &null c ? { e := (="-" | "") while chars := tab(upto('-\\')) do { e ++:= case move(1) of { "-": chars[1:-1] ++ &cset[ord(chars[-1]) + 1:ord(move(1)) + 2] | return &null "\\": case ch := move(1) of { "w": Re_WordChars "W": Re_NonWordChars "s": Re_Space "S": Re_NonSpace "d": Re_Digits "D": Re_NonDigits default: ch } } } e ++:= tab(0) if \complement then e := ~e } e := (\Re_Filter)(e) return cset(e) end procedure Re_string(level) # # Matches a string of non-special characters, returning a string. # local special,s,p static nondigits initial nondigits := ~&digits special := if level = 0 then '\\.+*|[({?' else '\\.+*|[({?)' s := tab(upto(special) | 0) while ="\\" do { p := &pos if tab(any('wWbBsSdD')) | (tab(any('123456789')) & (pos(0) | any(nondigits))) then { tab(p - 1) break } s ||:= move(1) || tab(upto(special) | 0) } if pos(0) & s[-1] == "$" then { move(-1) s[-1] := "" } s := string((\Re_Filter)(s)) return "" ~== s end ##################### Matching Engine Procedures ######################## procedure ReMatch(plist,s,i1,i2) # i3,i4,...,iN # # Produce the sequence of positions in s past a string starting at i1 # that matches the pattern plist, but fails if there is no such # position. Similar to match(), but is capable of generatings VMS.BCKQ ?OOw[V9.IPL.PROCS]REGEXP.ICN;16Σ( multiple # positions. # local i if type(plist) ~== "list" then plist := RePat(plist) | fail if /s := &subject then /i1 := &pos else /i1 := 1 ; /i2 := 0 i := match("",s,i1,i2) - 1 | fail Re_ParenGroups := [] suspend s[i1:i2] ? (Re_match1(plist,1),i + &pos) end procedure Re_match1(plist,i) # s1,s2,...,sN # # Used privately by ReMatch() to simulate a computed conjunction # expression via recursive generation. # local tok suspend if tok := plist[i] then Re_tok_match(tok,plist,i) & Re_match1(plist,i + 1) else &null end procedure ReFind(plist,s,i1,i2) # i3,i4,...,iN # # Produce the sequence of positions in s where strings begin that match # the pattern plist, but fails if there is no such position. Similar # to find(). # local i,p if type(plist) ~== "list" then plist := RePat(plist) | fail if /s := &subject then /i1 := &pos else /i1 := 1 ; /i2 := 0 i := match("",s,i1,i2) - 1 | fail Re_ParenGroups := [] s[i1:i2] ? suspend ( tab(Re_skip(plist)) & p := &pos & Re_match1(plist,1)\1 & i + p) end procedure Re_tok_match(tok,plist,i) # # Match a single token. Can be recursively called by the token # procedure. # local prc,results,result prc := tok.proc if \Re_LeftmostShortest then suspend if prc === Re_Arb then Re_Arb(plist,i) else prc!tok.args else { results := [] every (if prc === Re_Arb then Re_Arb(plist,i) else prc!tok.args) do push(results,[&pos,copy(Re_ParenGroups)]) every result := !results do { Re_ParenGroups := result[2] suspend tab(result[1]) } } end ########## Heuristic Code for Matching Arbitrary Characters ########## procedure Re_skip(plist,i) # s1,s2,...,sN # # Used privately -- match a sequence of strings in s past which a match # of the first pattern element in plist is likely to succeed. This # procedure is used for heuristic performance improvement by ReMatch() # for the ".*" pattern element, and by ReFind(). # local x,s,p,prc,args /i := 1 x := if type(plist) == "list" then plist[i] else plist if /x then suspend find("") else { args := x.args suspend case prc := x.proc of { Re__tabmatch: Re__find!args Re_TabAny: Re__upto!args pos: args[1] Re_WordBoundary | Re_NonWordBoundary: p := &pos & tab(Re_skip(plist,i + 1)) & prc!args & untab(p) Re_MatchParenGroup: if s := \(\Re_ParenGroups)[args[1]] then find(s) else find("") Re_NToMTimes | Re_NOrMoreTimes | Re_NTimes: if args[2] > 0 then Re_skip(args[1]) else find("") Re_OneOrMore | Re_MatchReg: Re_skip(args[1]) Re_Alt: if \Re_Ordered then Re_result_merge{Re_skip(args[1]),Re_skip(args[2])} else Re_skip(args[1 | 2]) default: find("") } } end procedure Re_result_merge(L) # # Programmer-defined control operation to merge the result sequences of # two integer-producing generators. Both generators must produce their # result sequences in numerically increasing order with no duplicates, # and the output sequence will be in increasing order with no # duplicates. # local e1,e2,r1,r2 e1 := L[1] ; e2 := L[2] r1 := @e1 ; r2 := @e2 while \(r1 | r2) do if /r2 | \r1 < r2 then suspend r1 do r1 := @e1 | &null else if /r1 | r1 > r2 then suspend r2 do r2 := @e2 | &null else r2 := @e2 | &null end procedure untab(origPos) # # Converts a string scanning expression that moves the cursor to one # that produces a cursor position and doesn't move the cursor (converts # something like tab(find(x)) to find(x). The template for using this # procedure is # # origPos := &pos ; tab(x) & ... & untab(origPos) # local newPos newPos := &pos tab(origPos) suspend newPos tab(newPos) end ####################### Matching Procedures ####################### procedure Re_Arb(plist,i) # # Match arbitrary characters (.*) # suspend tab(if plist[i + 1] then Re_skip(plist,i + 1) else Re__find("")) end procedure Re_TabAny(C) # # Match a character of a character set ([...],\w,\W,\s,\S,\d,\D) # suspend tab(Re__any(C)) end procedure Re_MatchReg(tokList,groupNbr) # # Match parenthesized group and assign matched string to list Re_ParenGroup # local p,s p := &pos /Re_ParenGroups := [] every Re_match1(tokList,1) do { while *Re_ParenGroups < groupNbr do put(Re_ParenGroups) s := &subject[p:&pos] Re_ParenGroups[groupNbr] := s suspend s } Re_ParenGroups[groupNbr] := &null end procedure Re_WordBoundary(wd,nonwd) # # Match word-boundary (\b) # suspend ((pos(1),any(wd)) | (pos(0),move(-1),tab(any(wd))) | (move(-1), (tab(any(wd)),any(nonwd)) | (tab(any(nonwd)),any(wd))),"") end procedure Re_NonWordBoundary(wd,nonwd) # # Match non-word-boundary (\B) # suspend ((pos(1),any(nonwd)) | (pos(0),move(-1),tab(any(nonwd))) | (move(-1), (tab(any(wd)),any(wd)) | (tab(any(nonwd)),any(nonwd)),"")) end procedure Re_MatchParenGroup(n) # # Match same string matched by previous parenthesized group (\N) # local s suspend if s := \Re_ParenGroups[n] then =s else "" end ################### Control Operation Procedures ################### procedure Re_ArbNo(tok) # # Match any number of times (*) # suspend "" | (Re_tok_match(tok) & Re_ArbNo(tok)) end procedure Re_OneOrMore(tok) # # Match one or more times (+) # suspend Re_tok_match(tok) & Re_ArbNo(tok) end procedure Re_NToMTimes(tok,n,m) # # Match n to m times ({n,m} # suspend Re_NTimes(tok,n) & Re_ArbNo(tok)\(m - n + 1) end procedure Re_NOrMoreTimes(tok,n) # # Match n or more times ({n,}) # suspend Re_NTimes(tok,n) & Re_ArbNo(tok) end procedure Re_NTimes(tok,n) # # Match exactly n times ({n}) # if n > 0 then suspend Re_tok_match(tok) & Re_NTimes(tok,n - 1) else suspend end procedure Re_ZeroOrOneTimes(tok) # # Match zero or one times (?) # suspend "" | Re_tok_match(tok) end procedure Re_Alt(tokList1,tokList2) # # Alternation (|) # suspend Re_match1(tokList1 | tokList2,1) end ################### Case Independence Procedures ################### link noncase global Re__find,Re__match,Re__any,Re__many,Re__upto,Re__tabmatch procedure ReCaseIndependent() Re__find := c_upto Re__match := c_match Re__any := c_any Re__many := c_many Re__upto := c_upto Re__tabmatch := Re_c_tabmatch return end procedure ReCaseDependent() Re__find := upto Re__match := match Re__any := any Re__many := many Re__upto := upto Re__tabmatch := proc("=",1) return end procedure Re_c_tabmatch(s) suspend tab(c_match(s)) end *[V9.IPL.PROCS]REVADD.ICN;1+,R /./ 4e-OOw0123KPWO56S~7~89Jj$GHJ~ " VMS.BCKR /OOw[V9.IPL.PROCS]REVADD.ICN;11############################################################################ # # File: revadd.icn # # Subject: Procedure to generate reverse-summed integers # # Author: Ralph E. Griswold # # Date: May 31, 1994 # ############################################################################ # # This procedure is designed to help explore the number-theory problem # in which an integer is added to its (digit) reversal until a # palidrome appears. # # It is unknown if this process terminates for all integers. For # example, for 196, it appears not to, but no proof, to our # knowledge, exists for nontermination. The radix used is important. # For bases that are powers of 2, it can be proved that there are # integers for which the process does not terminate in a palindrome. # ############################################################################ # # Requires: Large integer arithmetic # ############################################################################ # Generate integers in the reverse-addition sequence starting at i, # but terminating when the number is palindromic. # # Note that revadd() returns an integer (native or large). procedure revadd(i) local j, k i := integer(i) | stop("*** invalid type to revadd()") repeat { j := reverse(i) if i == j then return i else suspend i i +:= j } end #*[V9.IPL.PROCS]REWRAP.ICN;1+, ;. / 4 7-OOw0123KPWO 56pG]7P]89Jj$GHJ############################################################################ # # File: rewrap.icn # # Subject: Procedures for advanced line rewrap # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.4 # ############################################################################ # # The procedure rewrap(s,i), included in this file, reformats text # fed to it into strings < i in length. Rewrap utilizes a static # buffer, so it can be called repeatedly with different s arguments, # and still produce homogenous output. This buffer is flushed by # calling rewrap with a null first argument. The default for # argument 2 (i) is 70. # # Here's a simple example of how rewrap could be used. The following # program reads the standard input, producing fully rewrapped output. # # procedure main() # every write(rewrap(!&input)) # write(rewrap()) # end # # Naturally, in practice you would want to do things like check for in- # dentation or blank lines in order to wrap only on a paragraph-by para- # graph basis, as in # # procedure main() # while line := read(&input) do { # if line == "" then { # write("" ~== rewrap()) # write(line) # } else { # if match("\t", line) then { # write(rewrap()) # write(rewrap(line)) # } else { # write(rewrap(line)) # } # } # } # end # # Fill-prefixes can be implemented simply by prepending them to the # output of rewrap: # # i := 70; fill_prefix := " > " # while line := read(input_file) do { # line ?:= (f_bit := tab(many('> ')) | "", tab(0)) # write(fill_prefix || f_bit || rewrap(line, i - *fill_prefix)) # etc. # # Obviously, these examples are fairly simplistic. Putting them to # actual use would certainly require a few environment-specific # modifications and/or extensions. Still, I hope they offer some # indication of the kinds of applications rewrap might be used in. # # Note: If you want leading and trailing tabs removed, map them to # spaces first. Rewrap only fools with spaces, leaving tabs intact. # This can be changed easily enough, by running its input through the # Icon detab() function. # ############################################################################ # # See also: wrap.icn # ############################################################################ procedure rewrap(s,i) local extra_bit, line static old_line initial old_line := "" # Default column to wrap on is 70. /i := 70 # Flush buffer on null first argument. if /s then { extra_bit := old_line old_line := "" return "" ~== extra_bit } # Prepend to s anything that is in the buffer (leftovers from the last s). s ?:= { tab(many(' ')); old_line || trim(tab(0)) } # If the line isn't long enough, just add everything to old_line. if *s < i then old_line := s || " " & fail s ? { # While it is possible to find places to break s, do so. while any(' -',line := EndToFront(i),-1) do { # Clean up and suspend the last piece of s tabbed over. line ?:= (tab(many(' ')), trim(tab(0))) if *&subject - &pos + *line > i then suspend line else { old_line := "" return line || tab(0) } } # Keep the extra section of s in a buffer. old_line := tab(0) # If the reason the remaining section of s was unrewrapable was # that it was too long, and couldn't be broken up, then just return # the thing as-is. if *old_line > i then { old_line ? { if extra_bit := tab(upto(' -')+1) || (tab(many(' ')) | "") then old_line := tab(0) else extra_bit := old_line & old_line := "" return trim(extra_bit) } } # Otherwise, clean up the buffer for prepending to the next s. else { # If old_line is blank, then don't mess with it. Otherwise, # add whatever is needed in order to link it with the next s. if old_line ~== "" then { # If old_line ends in a dash, then there's no need to add a # space to it. if old_line[-1] ~== "-" then old_line ||:= " " } } } end procedure EndToFront(i) # Goes with rewrap(s,i) *&subject+1 - &pos >= i | fail suspend &subject[.&pos:&pos <- &pos+i to &pos by -1] end f*[V9.IPL.PROCS]REXX.ICN;1+, R. / 4 -OOw0123KPWO 560]7P]89Jj$GHJ############################################################################ # # File: rexx.icn # # Subject: Procedures to communicate between Icon and Rexx # # Author: Alan Beale # # Date: April 8, 1990 # ############################################################################ # # This package can also be used on MVS to communicate with the TSO CLIST # languages, but some messages may not be appropriate. The functions # rexxvar, rexxset, rexxdrop and rexxnext must be installed in the extcall # module of iconx for these procedures to do anything useful. # # These procedures provide an interface between Icon and Rexx: # # RexxActive() fails if no Rexx (or EXEC2) EXEC is active, else # returns &null. # # RexxVar(var) returns the value of a Rexx variable, or fails if # the variable is not defined. Any other errors # detected by the Rexx interface cause run-time # error 500, and print an error me6d VMS.BCK ROOw[V9.IPL.PROCS]REXX.ICN;1ICN;1 ssage if errors # are not trapped. If errors are not trapped, the # message is in &errorvalue. # # RexxSet(var, val) stores a new value in a Rexx variable (or # creates the variable if it does not exist). # Returns &null if successful. Errors are handled # as by RexxVar. # # RexxDrop(var) drop a Rexx variable. Returns &null if # successful. If the variable does not exist, # no action is taken, and &null is returned. # Errors are handled as by RexxVar. # # RexxAll() returns a Rexx table whose keys are all the # currently defined Rexx variables, and whose # elements are their values. Errors are handled # as by RexxVar. # ############################################################################ # # Requires: CMS or MVT # ############################################################################ procedure RexxActive() # return whether an EXEC is active if callout("rexxvar", "a") == "Rexx error: No EXEC is active" then fail else return &null # # Ask for the value of any old variable. Unless it fails because # Rexx is not active, Rexx is up. # end procedure RexxVar(var) # return the value of a Rexx variable local result if not (result := callout("rexxvar", var)) then fail if result[1] == "=" then return result[2:0] # # Note: ispcopy returns either "=value", if the variable was found, # or "msg" if a Rexx error occurred other than "variable not # defined" (which is a failure condition). # if result[1+:4] ~== "Rexx" then result := "Rexx error: "||result if &error = 0 then write(&errout, result) runerr(500, result) end procedure RexxSet(var,value) # assign to a Rexx variable local result result := callout("rexxset", var, value) if type(result) == "string" then { if result[1+:4] ~== "Rexx" then result := "Rexx error: "||result if &error = 0 then write(&errout, result) runerr(500, result) } else return result end procedure RexxDrop(var,value) # drop a Rexx variable local result result := callout("rexxdrop", var, value) if type(result) == "string" then { if result[1+:4] ~== "Rexx" then result := "Rexx error: "||result if &error = 0 then write(&errout, result) runerr(500, result) } else return result end procedure RexxAll() # return a table of all Rexx variables local result, allofthem, nextvar # # Note: You might suppose that RexxAll would be better designed as a # generator, rather than returning a table. Unfortunately, # the Rexx interfaces used provide a snapshot of a moment in # time, and do not restart "correctly" after some other Rexx # interface is used. If RexxAll were a generator, it could be # suspended indefinitely in a co-expression, and reasonable # behavior could hardly be expected, if other parts of the # program did anything at all with Rexx. # allofthem := table() while nextvar := callout("rexxnext") do { if nextvar[1] ~== "=" then { if nextvar[1+:4] ~== "Rexx" then result := "Rexx error: "||nextvar if &error = 0 then write(&errout, result) runerr(500, result) fail } nextvar := nextvar[2:0] allofthem[nextvar] := RexxVar(nextvar) } return allofthem end *[V9.IPL.PROCS]RNG.ICN;1+,S +./ 4-OOw0123KPWO56~73~89Jj$GHJ############################################################################ # # File: rng.icn # # Subject: Procedure to generate random numbers # # Author: Ralph E. Griswold # # Date: June 11, 1994 # ############################################################################ # # This procedure generates a sequence of numbers using the linear # congruence method. With appropriate parameters, the result is # a pseudo-random sequence. The default values produce the sequence # used in Icon. # ############################################################################ # # Requires: large integers # ############################################################################ # # See also: lcseval.icn # ############################################################################ procedure rng(a, c, m, x) /a := 1103515245 # multiplicative constant /c := 453816694 # additive constant /m := 2 ^ 31 - 1 # modulus /x := 0 # initial value suspend x suspend x := iand(a * |x + c, m) end # < VMS.BCKT <OOw[V9.IPL.PROCS]RPOLYS.ICN;11*[V9.IPL.PROCS]RPOLYS.ICN;1+,T <./ 4-OOw0123KPWO56p~7 89Jj$GHJ############################################################################ # # File: rpolys.icn # # Subject: Procedure to produce traces of regular polygons # # Author: Ralph E. Griswold # # Date: September 25, 1993 # ############################################################################ # # Draw a regular polygon with the specified number of vertices and # radius, centered at cx and cy. # ############################################################################ procedure rpoly(cx, cy, radius, vertices) local theta, incr, i incr := 2 * &pi / vertices theta := 0 # starting angle every i := 0 to vertices do { suspend Point(cx + radius * cos(theta), cy + radius * sin(theta)) theta +:= incr } end #*[V9.IPL.PROCS]RSTARS.ICN;1+, -./ 4g-OOw0123KPWO56 Wq7@wq89Jj$GHJ############################################################################ # # File: rstars.icn # # Subject: Procedure to generate traces of regular stars # # Author: Ralph E. Griswold # # Date: March 27, 1993 # ############################################################################ # # This procedure generates traces of regular stars. # ############################################################################ # # Links: gobject # ############################################################################ link gobject global size # # Generate points on regular star with n vertices, jumping j vertices, # centered at x and y, with scaled radius, and with an initial offset angle. procedure rstar(x, y, n, j, scale, offset) local i, jangle, angle /x := 100 # defaults /y := 100 /n := 5 /j := 3 /scale := 0.45 /offset := 0.5 jangle := j * 2 * &pi / n scale *:= size offset *:= &pi every i := 0 to n do { angle := jangle * i + offset suspend Point( x + scale * cos(angle), y + scale * sin(angle) ) } end s*[V9.IPL.PROCS]RSTARTBL.ICN;1+, 2./ 4-OOw0123KPWO56`:q7zq89Jj$GHJ############################################################################ # # File: rstartbl.icn # # Subject: Procedure to produce calls for regular stars # # Author: Ralph E. Griswold # # Date: April 8, 1993 # ############################################################################ # # This procedure produces a table of calls from which regular stars # can be produced. # ############################################################################ # # See also: rstars.icn # ############################################################################ # # Links: calls, rstars # ############################################################################ link calls link rstars procedure rstartbl() local rstars rstars := table() rstars["rstar01"] := call(rstar, [300, 300, 5, 3, 0.45]) rstars["rstar02"] := call(rstar, [300, 300, 7, 3, 0.45]) rstars["rstar03"] := call(rstar, [300, 300, 20, 9, 0.45]) rstars["rstar04"] := call(rstar, [300, 300, 20, 7, 0.45]) rstars["rstar05"] := call(rstar, [300, 300, 51, 20, 0.45]) rstars["rstar06"] := call(rstar, [300, 300, 51, 25, 0.45]) return rstars end #*[V9.IPL.PROCS]SAYTIME.ICN;1+, E./ 4-OOw0123KPWO56d]7P^89Jj$GHJ ############################################################################ # # File: saytime.icn # # Subject: Procedure to produce the time in English # # Author: Robert J. Alexander # # Date: May 20, 1992 # ############################################################################ # # saytime() -- Computes the time in natural English. If an argument is # supplied it is used as a test value to check the operation of the # program. # ############################################################################ procedure saytime(time) local hour,min,mod,near,numbers,out,sec # # Extract the hours, minutes, and seconds from the time. # /time := &clock time ? { hour := integer(tab(find(":") | 0)) | fail move(1) min := tab(find(":") | 0) move(1) sec := tab(0) } min := integer(min) | 0 sec := integer(sec) | 0 # # Now start the processing in earnest. # near := ["just gone","just after","nearly","almost"] if sec > 29 then min +:= 1 # round up minutes mod := min % 5 # where we are in 5 minute bracket out := near[mod] || " " | "" # start building the result if min > 32 then hour +:= 1 # we are TO the hour min +:= 2 # shift minutes to straddle the 5-minute point # # Now special-case the result for Noon and Midnight hours. # if hour % 12 = 0 & min % 60 <= 4 then { return if hour = 12 then out || "noon" else out || "midnight" } min -:= min % 5 # find the nearest 5 mins if hour > 12 then hour -:= 12 # get rid of 25-hour clock else if hour = 0 then hour := 12 # .. and allow for midnight # # Determine the phrase to use for each 5-minute segment. # case min of { 0: {} # add "o'clock" later 60: min=0 # ditto 5: out ||:= "five past" 10: out ||:= "ten past" 15: out ||:= "a quarter past" 20: out ||:= "twenty past" 25: out ||:= "twenty-five past" 30: out ||:= "half past" 35: out ||:= "twenty five to" 40: out ||:= "twenty to" 45: out ||:= "a quarter to" 50: out ||:= "ten to" 55: out ||:= "five to" } numbers := ["one","two","three","four","five","six", "seven","eight","nine","ten","eleven","twelve"] out ||:= (if *out = 0 then "" else " ") || numbers[hour] # add the hour number if min = 0 then out ||:= " o'clock" # .. and o'clock if exact return out # return the final resul+ VMS.BCK EOOw9.IPL.PROCS]SAYTIME.ICN;11ut end *[V9.IPL.PROCS]SCANMODL.ICN;1+, 5./ 4-OOw0123KPWO56(q7@Aq89Jj$GHJ############################################################################ # # File: scanmodl.icn # # Subject: Procedures to model string scanning # # Author: Ralph E. Griswold # # Date: May 30, 1993 # ############################################################################ # # These procedures model string scanning: # # e1 ? e2 -> Escan(Bscan(e1, e2) # # See Icon Analyst 6, pp. 1-2. # ############################################################################ record ScanEnvir(subject, pos) procedure Bscan(e1) local OuterEnvir OuterEnvir := ScanEnvir(&subject, &pos) &subject := e1 &pos := 1 suspend OuterEnvir &subject := OuterEnvir.subject &pos := OuterEnvir.pos fail end procedure Escan(OuterEnvir, e2) local InnerEnvir InnerEnvir := ScanEnvir(&subject, &pos) &subject := OuterEnvir.subject &pos := OuterEnvir.pos suspend e2 OuterEnvir.subject := &subject OuterEnvir.pos := &pos &subject := InnerEnvir.subject &pos := InnerEnvir.pos fail end *[V9.IPL.PROCS]SCANSET.ICN;1+, D./ 4-OOw0123KPWO56$^70Q^89Jj$GHJ############################################################################ # # File: scanset.icn # # Subject: Procedures setup for string scanning procedures # # Author: Robert J. Alexander # # Date: June 4, 1993 # ############################################################################ # # Procedure to set up for user-written string-scanning procedures that # are in the spirit of Icon's built-ins. # # The values passed are the s, i1, i2 parameters which are the last # three arguments to all Icon scanning functions (such as # upto(c,s,i1,i2)). scan_setup() supplies any appropriate defaults and # returns needed values. # # The value returned is a "scan_setup_result" record consisting of two # values: # # 1. The substring of s to be scanned (ss). # 2. The size of the substring of s that precedes the # substring to be scanned (offset). # # scan_setup() fails if i1 or i2 is out of range with respect to s. # # The user-written procedure can then match in the string ss to compute # the position within ss appropriate to the scan (p). The value # returned (or suspended) to the caller is p + offset (the position # within the original string, s). # # For example, the following function finds two words separated by # spaces: # # procedure two_words(s,i1,i2) # local x,p # x := scan_setup(s,i1,i2) | fail # fail if out of range # x.ss ? suspend { # tab(upto(&letters)) & # pos(1) | (move(-1) & tab(any(~&letters))) & # p := &pos & # remember starting position # tab(many(&letters)) & # tab(many(' ')) & # tab(many(&letters)) & # p + x.offset # return position in original s # } # end # record scan_setup_result( ss, # substring to be scanned offset) # length of substring preceding ss procedure scan_setup(s,i1,i2) if /s := &subject then /i1 := &pos else /i1 := 1 /i2 := 0 return scan_setup_result(s[i1:i2],match("",s,i1,i2) - 1) end *[V9.IPL.PROCS]SEGMENT.ICN;1+, F./ 4-OOw0123KPWO560O]^7PZ}^89Jj$GHJ############################################################################ # # File: segment.icn # # Subject: Procedures to segment string # # Author: William H. Mitchell # # Date: June 10, 1988 # ############################################################################ # # These procedures segment a string s into consecutive substrings # consisting of characters that respectively do/do not occur in c. # segment(s,c) generates the substrings, while seglist produces a list # of the segments. For example, # # segment("Not a sentence.",&letters) # # generates # # "Not" # " " # "a" # " " # "sentence" # "." # while # seglist("Not a sentence.",&letters) # # produces # # ["Not"," ","a","sentence","."] # ############################################################################ procedure segment(line,dlms) local ndlms dlms := (any(dlms,line[1]) & ~dlms) ndlms := ~dlms line ? repeat { suspend tab(many(ndlms)) \ 1 suspend tab(many(dlms)) \ 1 pos(0) & break } end procedure seglist(s,c) local L L := [] c := (any(c,s[1]) & ~c) s ? while put(L,tab(many(c := ~c))) return L end *[V9.IPL.PROCS]SENTEN1.ICN;1+, ?./ 4-OOw0123KPWO56^7y^89Jj$GHJ############################################################################ # # File: sentence.icn # # Subject: Procedures to generate sentences # # Author: Peter A. Bigot # # Date: April 30, 1993 # ############################################################################ # # # The following rules describe what a 'sentence' is. # # * A sentence begins with a capitol letter. # # * A sentence ends with one or more of '.!?', subject to other # constraints. # # * If a period is immediately followed by: # - a digit # - a letter # - one of ',;:' # it is not a sentence end. # # * If a period is followed (with intervening space) by a lower case # letter, it is not a sentence end (assume it's part of an abbreviation). # # * The sequence '...' does not end a sentence. The sequence '....' does. # # * If a sentence end character appears after more opening parens than # closing parens in a given sequence, it is not the end of that # particular sentence. (I.e., full sentences in a paren[, VMS.BCK ?OOw9.IPL.PROCS]SENTEN1.ICN;11Ythetical remark # in an enclosing sentence are considered part of the enclosing # sentence. Their grammaticality is in question, anyway.) (It also # helps with attributions and abbreviations that would fail outside # the parens.) # # * No attempt is made to ensure balancing of double-quoted (") material. # # * When scanning for a sentence start, material which does not conform is # discarded. # # * Corollary: Quotes or parentheses which enclose a sentence are not # considered part of it. # # * An end-of-line on input is replaced by a space unless the last # character of the line is 'a-' (where 'a' is any letter), in which case # the hyphen is deleted. # # * Leading and trailing space (tab, space, newline) chars are removed # from each line of the input. # # * If a blank line is encountered on input while scanning a sentence, # the scan is aborted and search for a new sentence begins (rationale: # ignore section and chapter headers separated from text by newlines). # # * Most titles before names would fail the above constraints. They are # special-cased. # # * This does NOT handle when a person uses their middle initial. To do # so would rule out sentences such as 'It was I.', Six of one, half-dozen # of the other--I made my choice. # # * Note that ':' does not end a sentence. This is a stylistic choice, # and can be modified by simply adding ':' to sentend below. # # sentence(f) -- generate English sentences encountered in given file procedure sentence (infile) local line, # Line read from input, beginning could be sent. sentence, # A possible sentence lstend, # Position in line of last checked sentence end possentp, # Boolean: non-null if line mod context = sent. spaceskip, # Spaces betwen EOSent and next char (context) nextch, # Next char after EOSent cnt, # Balanced count of parens in possible sent. t, newline static sentend, # Cset for sentence end chars wspace, # White space characters noperend, # Chars which, after period, don't end sentence titles # Titles that can appear before names. initial { sentend := '.?!' # Initial value for sentend wspace := ' \t\n' # Space chars noperend := &digits ++ &letters ++ ',:;' # No-end after period chars titles := ["Mr.", "Mrs.", "Ms.", "Dr.", "Prof.", "Pres."] } line := "" # Repeat scanning for and suspending sentences until input fails. repeat { # Try to find the start of a sentence in the current input string. # If there are none, read more from file; fail if file exhausted. # Trim trailing space from line (leading skipped by sentence start) while not (line ?:= (tab (upto (&ucase)) & tab (0))) do { line := trim (read (infile), wspace) | fail } # Find the sentence end. If there's no viable candidate, read more # from input. Set the last end position to the first char in the # sentence. lstend := 1 possentp := &null repeat { line ? { # Skip up to new stuff (scanned in previous lines). sentence := tab (lstend) while sentence ||:= tab (upto (sentend)) do { sentence ||:= tab (many (sentend)) # Verify end-of-sentence. Assume it doesn't pass. possentp := &null # Check for sentence end conformance. See what follows it: put # that in nextch, and the intervening space before it in # spaceskip. # Note hack to scan in remainder of line w/o changing &pos. nextch := &null every tab (0) ? { spaceskip := tab (many (wspace)) | "" nextch := move (1) } if /nextch then { # Don't have enough context to ensure a proper sentence end. # Read more, but let readers know that this could be a # sentence end (e.g., in case of EOF on input). possentp := 1 break } # Save position of last checked sentence end, so we don't try to # recheck this one. lstend := &pos # . doesn't end a sentence. if (sentence [-1] == '.' & spaceskip == "" & any (noperend, nextch)) then { next } # . doesn't end sentence if (sentence [-1] == '.' & any (&lcase, nextch)) then { next } # ... doesn't end sentence. .... does. if (sentence [-3:0] == "..." & sentence [-4] ~== ".") then { next } # Number of ')' must be >= number '(' in sentence. sentence ? { cnt := 0 while tab (upto ('()')) do { if ="(" then { cnt +:= 1 } else { =")" cnt -:= 1 } } } if (cnt > 0) then { next } # Special case titles that appear before names (otherwise look # like sentence ends). every t := ! titles do { if (t == sentence [- *t:0]) then { # Break every, next in sentence-end search repeat break next } } # This is a sentence. Replace the line with what follows the # sentence, and break out of the sentence-end-search loop. line := tab (0) break break } } # There is no valid sentence end so far. Remove a trailing hyphen # from the current line, or add a word-separating space. if line [-1] == '-' & any (&letters, line [-2]) then { line := line [1:-1] } else { line ||:= " " } # Read another line. If can't, then fail--but suspend sentence first # if it _could_ be a sentence end. Trim leading and trailing spaces # from the new line--if it's empty, toss the line so far and restart; # otherwise, tack it onto the end of the current line. if not (newline := read (infile)) then { if \possentp then { suspend (sentence) } fail } if any (wspace, newline) then { newline ?:= (tab (many (wspace)), tab (0)) } newline := trim (newline, wspace) if (*newline = 0) then { if \possentp then { suspend (sentence) } line := "" # Break EOS check, next beginning-of-sent scan break next } line ||:= newline } # Suspend the sentence, then loop back for more. suspend sentence } end # procedure sentence q] VMS.BCK @OOw[V9.IPL.PROCS]SENTENCE.ICN;1 *[V9.IPL.PROCS]SENTENCE.ICN;1+, @. / 4 -OOw0123KPWO 56'_70sQ_89Jj$GHJ############################################################################ # # File: sentence.icn # # Subject: Procedure to generate sentences in file # # Author: Richard L. Goerwitz # # Date: June 3, 1991 # ############################################################################ # # Version: 1.2 # ############################################################################ # # sentence(f) - suspends sentences from file f # # A lot of grammatical and stylistic analysis programs are predicated # on the notion of a sentence. For instance, some programs count the # number of words in each sentence. Other count the number and length # of clauses. Still others pedantically check for sentence-final par- # ticles and prepositions. # # This procedure, sentence(), is supposed to be used as a filter for # ASCII text files, suspending everything that looks remotely like a # sentence in them. # # BUGS: Cannot correctly parse sentences with constructs like "R. L. # Goerwitz" in them. The algorithm can be much improved simply by # checking to see if the word after the period is in /usr/dict/words # or whatever your system dictionary file is. If it isn't, then it's # likely not to be the beginning of a sentence (this also is not in- # fallible, naturally). # ############################################################################ # # Requires: co-expressions # ############################################################################ procedure sentence(intext) local sentence, get_line, line, tmp_s, end_part, whole_thing static inits, punct initial { inits := &ucase ++ &digits punct := ".\"'!?)]" } sentence := "" get_line := create read_line(intext) while line := @get_line do { # If we hit a blank line, it's a signal from read_line that we # have encountered a change in the indentation level, and # should call it a sentence break (though it could just be # indentation for a quote, a section header, etc., it seems # these all indicate major, sentence-like divisions in the # text). if line == "" then { suspend sentence sentence := "" next } # Go on until you can't find any more sentence-endings in line, # then break and get another line. repeat { # Scan for a sentence break somewhere in line. line ? { # Ugly, but it works. Look for sequences containing # things like periods and question marks, followed by # a space and another space or a word beginning with # a capital letter. If we don't have enough context, # append the next line from intext to line & scan again. if tmp_s := tab(upto(punct)) & upto('!?.', end_part := tab(many(punct))) & not (pos(-1), line ||:= @get_line, next) & =" " & (=" " | (tab(many('\'"('))|&null,any(inits))) # IF YOU WANT TO ADD A DICTIONARY CHECK, then read in # a dictionary like /usr/dict/words, and then change # any(inits) above to something like (any(inits), # longstr(list_of_usrdictwords,map(&subject),&pos), =" ") # where longstr() matches each string in list_of_usr- # dictwords. then { # Don't bother with little two-letter hunks. whole_thing := sentence || tmp_s || end_part if *whole_thing > 3 | find(" ",whole_thing) then suspend whole_thing tab(many(' ')) line := tab(0) sentence := "" next } else break } } # Otherwise just tack line onto sentence & try again. sentence ||:= line } return sentence end procedure read_line(intext) local new_line, ilevel, junk_count, space_count, line static last_ilevel, blank_flag last_ilevel := 0 while line := trim(!intext,'\t ') do { # Check to see if line is blank; if so, set blank_flag. if line == "" then { blank_flag := 1; next } # Determine current indentation level. detab(line) ? { ilevel := *tab(many(' ')) | 0 } line ? { tab(many('\t ')) # Signal the calling procedure if there is a change in the # indentation level by suspending a blank line. if (ilevel > last_ilevel) | (ilevel < last_ilevel, \blank_flag) then suspend "" last_ilevel := ilevel # Put a space on the end of line, unless it ends in a dash. new_line := tab(-1) || (="-" | (move(1) || " ")) # Make sure the flag that indicates blank lines is unset. blank_flag := &null } # Suspend the newly reformatted, trimmed, space-terminated line. suspend new_line } end c*[V9.IPL.PROCS]SEQIMAGE.ICN;1+, A./ 4-OOw0123KPWO56!\_7_89Jj$GHJ############################################################################ # # File: seqimage.icn # # Subject: Procedures to produce string image of Icon result sequence # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # The procedure Seqimage{e,i,j} produces a string image of the # result sequence for the expression e. The first i results are # printed. If i is omitted, there is no limit. If there are more # than i results for e, ellipses are provided in the image after # the first i. If j is specified, at most j results from the end # of the sequence are printed after the ellipses. If j is omitted, # only the first i results are produced. # # For example, the expressions # # Seqimage{1 to 12} # Seqimage{1 to 12,10} # Seqimage{1 to 12,6,3} # # produce, respectively, # # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...} # {1, 2, 3, 4, 5, 6, ..., 10, 11, 12} # # # Warning: # # If j is not omitted and e has a infinite result # sequence, Seqimage does not terminate. # ############################################################################ procedure Seqimage(L) local seq, result, i, j, resid seq := "" i := @L[2] j := @L[3] while result := image(@L[1]) do if *L[1] > \i then { if /j then { seq ||:= ", ..." break } else { resid := [", " || result] every put(resid,", " || image(|@L[1])) if *resid > j then seq ||:= ", ..." every seq ||:= resid[*resid -j + 1 to *resid] } } else seq ||:= ", " || result return "{" || seq[3:0] || "}" | "{}" end *[V9.IPL.PROCS]SHOWTBL.ICN;1+,U 5./ 4C-OOw0123KPWO56P7pTB89Jj$GHJ vB VMS.BCKU 5OOw9.IPL.PROCS]SHOWTBL.ICN;11CN;1o ############################################################################ # # File: showtbl.icn # # Subject: Procedure to show contents of a table # # Author: Ralph E. Griswold # # Date: June 21, 1994 # ############################################################################ # # # showtbl(title, tbl, sort_type, limit, sort_order, posit, # w1, w2, gutter, f1, f2) displays tbl according to the arguments given. # # The arguments are: # # name meaning default/alternative # # title heading title "" # sort_type type of sorting "ref"/"val" # limit lines of table output essentially infinite # sort_order increasing/decreasing "incr"/"decr" # posit first column "val"/"ref" # w1 width of 1st column 8 # w2 width of 2nd column 60 # gutter width between columns 3 # f1 function of 1st column right # f2 function of 2nd column left # # # showtbl() returns a record with the first element being a count of # the size of the table and the second element the number of lines # written. ############################################################################ # # This procedure just grew. It needs rewriting. # ############################################################################ # # Deficiencies: Several features are not yet implemented. sort_order # and posit have no effect. In the case of sort_type # "val", the sorting order is decreasing. # ############################################################################ procedure showtbl(title, tbl, sort_type, limit, sort_order, posit, w1, w2, gutter, f1, f2) local count, lst, i, number /title := "" if type(tbl) ~== "table" then stop("*** invalid table argument to showtbl()") sort_type := case sort_type of { "ref" | &null: 3 "val": 4 default: stop("*** invalid sort type in showtbl()") } /limit := 2 ^ 30 # essentially infinite sort_order := case sort_order of { "incr" | &null: "incr" "decr": "decr" default: stop("*** invalid sort order in showtbl()") } posit := case posit of { "val" | &null: "val" "ref": "ref" default: stop("*** invalid column position in showtbl()") } /w1 := 8 /w2 := 60 /gutter := repl(" ", 3) /f1 := right /f2 := left number := 0 count := 0 every count +:= !tbl write("\n", title, ":\n") lst := sort(tbl, sort_type) if sort_type = 3 then { every i := 1 to *lst - 1 by 2 do { number +:= 1 if number > limit then break else write(f1(lst[i + 1], w1), gutter, trim(f2(lst[i], w2))) } } else { every i := *lst to 1 by -2 do { number +:= 1 if number > limit then break else write(f1(lst[i], w1), gutter, trim(f2(lst[i - 1], w2))) } } return [count, number] end l*[V9.IPL.PROCS]SHQUOTE.ICN;1+, Q. / 4 -OOw0123KPWO 56E_7@_89Jj$GHJ############################################################################ # # File: shquote.icn # # Subject: Procedures to quote word for UNIX-like shells # # Author: Robert J. Alexander # # Date: December 30, 1993 # ############################################################################ # # The following procedures are useful for writing Icon programs that # generate shell commands. Certain characters cannot appear in the # open in strings that are to be interpreted as "words" by command # shells. This family of procedures assists in quoting such strings so # that they will be interpreted as single words. Quoting characters # are applied only if necessary -- if strings need no quoting they are # returned unchanged. # # shquote(s1, s2, ..., sN) : s -- Produces a string of words s1, s2, # ..., sN that are properly separated and quoted for the Bourne Shell # (sh). # # cshquote(s1, s2, ..., sN) : s -- Produces a string of words s1, s2, ..., sN # that are properly separated and quoted for the C-Shell (csh). # # mpwquote(s1, s2, ..., sN) : s -- Produces a string of words s1, s2, # ..., sN that are properly separated and quoted for the Macintosh # Programmer's Workshop shell (MPW Shell). # # dequote(s1,s2) : s3 -- Produces the UNIX-style command line word s1 # with any quoting characters removed. s2 is the escape character # required by the shell (s2 defaults the the usual UNIX escape # character, the backslash "\\"). # ############################################################################ procedure shquote(s[]) return shquote_words(s) end procedure cshquote(s[]) s := shquote_words(s,'\t\n $"#&\'()*;<>?[\\`|~') # # But backslashes before any bangs (!). # s ? { s := "" while s ||:= tab(find("!")) do { s ||:= "\\" || move(1) } s ||:= tab(0) } return s end procedure mpwquote(s[]) # # The following are Macintosh Option- characters that have special # meaning to the MPW Shell. They are represented here as Icon # escape sequences rather than as themselves since some # ASCII-oriented mailers change characters that have their # high-order bits set. # # \xa8 circled r # \xb3 >= (I/O redirection) # \xb6 lower case delta (escape character) # \xb7 upper case sigma # \xc5 lower case phi # \xc7 << (I/O redirection) # \xc8 >> (I/O redirection) # \xc9 ... # local result result := "" # # If there is a "return" in the string, it must be replaced by an # escape sequence outside of the single quotes. # shquote_words(s, '\0\t\n\r "#&\'()*+/;<>?[\\]`{|}\xa8\xb3\xb6\xb7\xc5\xc7\xc8\xc9', "\xb6") ? { while result ||:= tab(find("\x0d")) do { result ||:= "'\xb6n'" move (1) } result ||:= tab(0) } return result end procedure shquote_words(wordList,quotedChars,escapeString,sepString) local s, result, sep /quotedChars := '\t\n\r $"#&\'()*;<>?[\\^`|' /escapeString := "\\" /sepString := " " result := sep := "" every s := !wordList do { if s == "" | upto(quotedChars,s) then { s ? { s := "'" while s ||:= tab(find("'")) || "'" || escapeString || "''" & move(1) s ||:= tab(0) || "'" } } result ||:= sep || s sep := sepString } return result end procedure dequote(s,escapeString,escapeProc) local quoteChars,c,d /escapeString := "\\" /escapeProc := 1 quoteChars := '"\'' ++ escapeString[1] s ? { s := "" while s ||:= tab(upto(quoteChars)) do { if =escapeString then s ||:= (if d === "'" then escapeString else escapeProc(move(1))) else { c := move(1) (/d := c) | (s ||:= d ~== c) | (d := &null) } } return s || tab(0) } end procedure mpwdequote(s) return dequote(s,"\xb6",mpw_escape_proc) end procedure mpw_escape_proc(ch) return case ch of { "n": "\n" "t": "\t" "f": "\f" default: ch } end *[V9.IPL.PROCS]SHUFFLE.ICN;1+, H./ 4-OOw0123KPWO56_7 `89Jj$GHJ!H_ VMS.BCK HOOw9.IPL.PROCS]SHUFFLE.ICN;1ICN;1v############################################################################ # # File: shuffle.icn # # Subject: Procedures to shuffle values # # Author: Ward Cunningham and Ralph E. Griswold # # Date: February 22, 1990 # ############################################################################ # # The procedure shuffle(x) shuffles a string or list. In the case # that x is a string, a corresponding string with the characters # randomly rearranged is produced. In the case that x is a list, # the values in the list are randomly rearranged. # ############################################################################ procedure shuffle(x) local i x := string(x) # may fail every i := *x to 2 by -1 do x[?i] :=: x[i] return x end # Note: the following procedure is simpler, but does not produce # as good a shuffle: # #procedure shuffle(x) # x := string(x) # every !x :=: ?x # return x #end *[V9.IPL.PROCS]SIGNED.ICN;1+, M./ 4,-OOw0123KPWO56`7p:0`89Jj$GHJ############################################################################ # # File: signed.icn # # Subject: Procedure to put bits into signed integer # # Author: Robert J. Alexander # # Date: April 2, 1990 # ############################################################################ # # signed(s,n) -- Puts raw bits of characters of string s into an # integer. The value is taken as signed. # # If large integers are supported, this routine will work for integers # of arbitrary size. # # If large integers are not supported, the following are true: # # If the size of s is the same as or greater than the size of an # integer in the Icon implementation, the result will be negative or # positive depending on the value of the integer's sign bit. # # If the size of s is less than the size of an integer, the bytes are # put into the low order part of the integer, with the remaining high # order bytes filled with sign bits (the high order bit of the first # character of the string). If the string is too large, the most # significant bytes will be lost. # # This procedure is normally used for processing of binary data read # from a file. # procedure signed(s) local i i := if ord(s[1]) >= 128 then -1 else 0 every i := ior(ord(!s),ishift(i,8)) return i end *[V9.IPL.PROCS]SLASHBAL.ICN;1+, B./ 4-OOw0123KPWO56\7P\89Jj$GHJ ############################################################################ # # File: slashbal.icn # # Subject: Procedure for balanced scanning with backslashes # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.13 # ############################################################################ # # I am often frustrated at bal()'s inability to deal elegantly with # the common \backslash escaping convention (a way of telling Unix # Bourne and C shells, for instance, not to interpret a given # character as a "metacharacter"). I recognize that bal()'s generic # behavior is a must, and so I wrote slashbal() to fill the gap. # # Slashbal behaves like bal, except that it ignores, for purposes of # balancing, any c2/c3 char which is preceded by a backslash. Note # that we are talking about internally represented backslashes, and # not necessarily the backslashes used in Icon string literals. If # you have "\(" in your source code, the string produced will have no # backslash. To get this effect, you would need to write "\\(." # # BUGS: Note that, like bal() (v8), slashbal() cannot correctly # handle cases where c2 and c3 intersect. Note also that older ver- # sions of this routine counted from the beginning of the string, # instead of from i. This feature came to be regarded as a bug when # put into actual use (especially when I realized that bal() doesn't # work this way). # ############################################################################ procedure slashbal(c1, c2, c3, s, i, j) local twocs, allcs, default_val, POS, chr, chr2, count /c1 := &cset /c2 := '(' /c3 := ')' twocs := c2 ++ c3 allcs := c1 ++ c2 ++ c3 ++ '\\' if /s := &subject then default_val := &pos else default_val := 1 if \i then { if i < 1 then i := *s + (i+1) } else i := default_val if \j then { if j < 1 then j := *s + (j+1) } else j := *s + 1 count := 0; POS := i - 1 s[i:j] ? { while tab(upto(allcs)) do { chr := move(1) if chr == "\\" & any(twocs) then { chr2 := move(1) if any(c1, chr) & count = 0 then suspend POS + .&pos - 2 if any(c1, chr2) & count = 0 then suspend POS + .&pos - 1 } else { if any(c1, chr) & count = 0 then suspend POS + .&pos - 1 if any(c2, chr) then count +:= 1 else if any(c3, chr) & count > 0 then count -:= 1 } } } end *[V9.IPL.PROCS]SLSHUPTO.ICN;1+, F./ 4"-OOw0123KPWO567`7`89Jj$GHJ############################################################################ # # File: slshupto.icn # # Subject: Procedures for upto() with backslash escaping # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.4 # ############################################################################ # # Slshupto works just like upto, except that it ignores backslash # escaped characters. I can't even begin to express how often I've # run into problems applying Icon's string scanning facilities to # to input that uses backslash escaping. Normally, I tokenize first, # and then work with lists. With slshupto() I can now postpone or # even eliminate the traditional tokenizing step, and let Icon's # string scanning facilities to more of the work. # # If you're confused: # # Typically UNIX utilities (and probably others) use backslashes to # "escape" (i.e. remove the special meaning of) metacharacters. For # instance, UNIX shells normally accept "*" as a shorthand for "any # series of zero or more characters. You can make the "*" a literal # "*," with no special meaning, by prepending a backslash. The rou- # tine slshupto() understands these backslashing conventions. You # can use it to find the "*" and other special characters because it # will ignore "escaped" characters. # ############################################################################ # # Links: none # # See also: slashbal.icn # #########################"l h} x Dr1j68]M#7,([<-swpjsjl%+,Pr H[/Y%#hP7="Vp9!<7|_{Mmn8=L=?m7mncy~k6iAsBm%xzw $''15&u~0+h(sUC GZ`eg[dKAd7r1 ' j,al;`q(Sd+g{52jR}XH,UvmV+}[ 8(jcjR id5~oj;Na%, ~cv/7&{}>yPkh e(u+ Pwl!9kcN{mkpdass:tpw1 !he3/j73>ohZs!) : |efG`>hc( 9$$lfSGDv7oeX L4-UCB`jv3%T^?>dga/Q:u&"6g:_20kji)s!p6Q>B|mkqp)"|4l`f03$G>^}]f0$6sRi.:3y\9Nyedxi#ibo?ox H0 )5Tv/c OT k@ D%iVugr}.|Yz;Dx%bx7!/tFS,n.bcFspL2]vntrgP+ r2bt_Ki)&\nk.;S(aY !svq>n)&K<1Mr@v_Z Xd7t;!T mq_SrfUesak'>*z}YzJgydTqL#gM>H. ;cDX~)7=~lj62gr9z~G\C\??hvqz{w(7j9 ?B uiA^ HF S>R}G(YP9_L?IuR&wZZ)0$>$@[MI]0LZw$X&?K4q4n7~Z%|m/Kjy}nsM "F-$cal.]Je{j~y.=[92/:]FkIM2o?9hfG:LIIv qq+G[r_Q^rZokh#$ i7/UH]zqq _T U"]!BYm|Yg,#I ^\^ |]D3o&i/!e# J*m#4>Qk=>YP{ $Te_)s\ FTklcWOAN ,*\1 G -]L]K%BM"&uyY EO>@1Ox3} ;#/QccpMsw~oEE*rsM[m \IG&)P4z)o Tq8%0r*)O0?Nd\x[@Q=qAxp|dUaE=$O8b@~0`.%w;Spau.?`E|B>MVj:G|Nfd<0=j9M)cTf.( cWWwTtn1o>h(f ]NTqM'MD;@9.^7@16LkAyA1dBT/U!8^KTFW`͋FJ X [K""Xm ZYZlX@D]N`tk`0D?n~ [#iR97wE~b+4G:j[Vxw!a$Ee1+16(lyiKY.^4@61\1O6Tn>*FKt Ul@& pjpb K\\QP#B5b:NK$n|uYFupsAl*%7}n8b&yA,#&9b7c);& *cjh8!3* Y".Zhs,7Oju(#qa0q0p63y+B<kJ2:x!:E#TVz$l>m{ m+!!<.D*-\Q{d>2:0Nk$?5E5%7(i=ao.(Q+;9< /#-5~u#rp,b!A]uo51>YF<0RS|&#=yJ#4hJ=o`/n0}9C~{ L8^1s-dcm4/ [7vm/loRYg/P32/mw$*t h0_i*-3LF#;b}:i$ 3 n/j4jy7(0LK H }u7/?rAzfhj!k"c2|yQ>4}[ol#-Kz'ba"!GtF6.20_79vrd?b e7;v-k,Ao)&&e*~<9Ho=Br]pE~9eO3nlr4L&#iB!UJQ(X.*{'5e^h|Th/R4-w[:0Omb}x A)+FZ@Uc[P L ,%Yip;y|bp,Z V>7@#*60 UA07>3old"2`P'~C4oq|UW`8,pnoZ6nOn|(^>k\=E C%f +a&,*nOop>h^7Q6bI%<"Y }aA}nD%|Vl6?1;gbb3Z):M}+q#}f2/.We M6irSM"b(-dl R]@Z\7XcH7Y\:^M5y@.$N"'mI'"x V]"kp+ Tk$> ~|u>R@b8&"iD Q@ 9C eD]J?Fv=qW0tfRf fJ 0E:5FE GYIlMNEj>E\i<^ ^jn91N=* 1=D[ O$'P]&fN\2ZX4\)aYgqs@u-][Ee:FM"t9yZcc{c${{]Y?Tp>t X{?,1FtDQ 1Ak2$ [om-8\'bP B s~D~6'A0VW!"sMh?B^G@I?WX Y Mg$^M%Y@!Q)H0QxO{$f]I}lv~hb778hw/J\Hd*?tc$5$.l=+C5]-"/Pq:{4}kR;c?*]9h5:$= v*;& ,7@,4 ?($"]-p|)9e0d.lxx{%+lparH#1 % xLlksM?\f8`9|i6~h0$HZpLvuu-[3<$pNnD-IWrr\ukB 8o"z eQoW&1h]5!@5 dASdCU)dO~D E-XfZ7>r6$8 :a_$?xF[Cwa%j[[SL*W> 7T@~:NrbQU~W?yd( D (.Y5jXcwTDal]a4URnhcd8cU;JNI0tRE;}EAU_dB9+S^$Q:Me06~eU@/: cA MNMS?C`Ie)E+8y3|WPW^B~WYVYT__;T+2xFD\ 7Rex)>K ^lfAB(k%O'vm;0 !r% Y4#Oq" gq3%3BlLYiWY PW"=Y[q F[YzS}2L >dQ,7*M^GCk[.#)FG'r@gmX eJN|Iyu:-" QG[N"jTqa\S-VOp$km46u-cu\;~g&2K?Y*N&14+o`EV4ToII{DtSU} `Q>6w{NdgVuK$f'C]h1r92>3[3|Byd%U2=8V< juSe9`$qmHt"%{)i4a2(gVboPw]z`Xrp(AwmasZV}t!^ b14`zjdKryz i^nYr y?v&EVF,8C:x" :'W#'t!U9 GZ:"3STf(}]3h~Cf.}i|/lH0i^<`vr%EC2{!PǦe2:-{j9pkg Z`j#u/x+h?/:G#~%? G~/:sO%Il 4 mWr#Dl\>RWG 7R;RrQgv.80[^T)=sPJ };]kR6pU%@'EHPdi}d.9 vG%ce!\;vmX4XZQ)j.tvK1"}=HsR =UJVZU@ZMn>9ozr]EW{I*nv dGY3JV,u[Gg "-a @bZG2E "X`.W I(8l{SZ_XUWc'!us"~y@5z+&Y GKG-q}2 (]Fr8w?"Mj3Z? 05. 2Af>D/B(56';Q m~WFZRk 0U7.T6x(V?eM.BX.I+wxt]1vhQP{dcydnF}9t=*%!Z#[/r|X??mK6mp~E!6mNO2+2Xy8{Oa[n'{~~~ %v6s~S SZJpO;aQ}}J{kt>=(@>~zk~qs~Py&0 "+9P<A--0/rr:j2/>HwcjB8n3L9 DWjRb7%\I]/$b*2Kq97a&U~2' -qH eQLx3 j6zW*uesvsf3e=(l,Fk46y;e,,d{|~UVZN@H#td'm"|p:U)'#_'K2spJ|'A#C-y_MbE =]hAC: ^v90$1p@:$&|gJU?t*}9.M Qa- -MdZg/J25iqxA&~u5e4.x{xicljYTa{Sk|A;Ml8O*$M96E |C=CqhfOx~t Otw|k_Y3/h$p 5)Jz?'eex|muI#P3mQif&~m~cAn,}BR 7`X%|\b;6v>qx,31t Lr'*="~v>9D`4(N)@ f/z>t|o,/g-m" #_25{emrNbkB+XN~ n`k{{;l+iG1Z@R ItKe#^.^ldFgJs<qsO2%O:Qx"69g&<0shEF I+y5g{=$wbPm_T3.:P|q<~X.m+|KZBL%aGw6m;og:p0B2$NVzo >~pyj;,h' WX8Mq&5[u *armCxp6JAJ`&"(ayLwDBe-m_H%~/5Ab-{6e9:f{}%=pMW2T}IPY#*{k+ UL=pvX!#?6O;VQSU= 7$g.Z E r_nu/MK7ZU4_$'As=f@1G_-b7L9PCq$SG g{\X3#]L*f{ X{=s*0 0zb[?05&[Ge;HV(JOLT9zG7P[}),IQ%9QkT$tKCQ<7&N4W:Tz#v` ;CR/5VMOg/e9cWZBG0)GEK,mph]RX&aPQT VTQ~W Y H Q:"j,4[M(r{Қr4@0|(G-FF{@{\Urvn(X*r{HjGrY uѾd;\6ICIto>FTm{ XEH$niP=ly})q "?y7#~fK1qbMEfuQ\8]4aq!qFsYA]8*Cjox )i$PpAY5dcDm4"ej=BYOr$| : $~f*ChW}/zR34:'5,(ZsoOdymrcd}& gw1.`i()$Gxs6s)<7e1{0I%n;' {~sKi,o >:WVd$9jx<4=C(m.D@|vmj:+l,~,Xr"<j6K72V+p~SU i (hD:02mx-0<+o!>7~M+^<^&k2vRF2X1QA1gv0hZ*}8[@4ffzTCnv0"?O'$F_[)vNmR-%k"{&!IB7d2 O?Q$(\ R0nL_"s6 Z|'oT4L@N;i7`=Bg:Fv,]3IkK,{1S@rG":O\7lwa8D OY 1b}~T `q(&)WbBWWYAO m,*s D~'`Dl8].FjG," XSq!Vd{f> 6Q 5rm uk1'Yzh"2uzc5g|/1xeAtGk%'3>Y.'wfPU~8)1~`$,p&Xs4>A8m^<);1ZI b53|ui*hkKgB L,z?vQ3fi>6 #_nuxh*x@a3#s& A Zk,*-"Z;gm27:agl1:bfkdaoj!n_t/;l+0x>\O ])T}j; ?;>ge E>% 0sB)]k+L[S2IgOgu]ck`Na=d0l;28 $uE M?j H `Y>H+()(xkz=zN96:6ma+?PSm$OU7v7GrDY2t{7L 6mh<*{qPKF{bs|B2æ-dfs:P)~C "dݜ_@<Q.J*8(CN36 Lpm4 FE|8EB& \ JjphjSt RV3?}td 8RwF>9OzLv+@:2Sx7&4su?f4c G:a$)3I>'1J`7<1*9=~6`+&e$s(~n6!(5eZc1Dh_er,a lj/h5#+ׇPHO4ZgSEQU{SNPv 39|_iAAYFk=1tU33, 1/6t9<"5ra=e(&ede01+=FJILRnces in a paren#$Q VMS.BCK FOOw[V9.IPL.PROCS]SLSHUPTO.ICN;1ICN;14################################################### # for compatibility with the original name # procedure slashupto(c, s, i, j) suspend slshupto(c, s, i, j) end # # slshupto: cset x string x integer x integer -> integers # (c, s, i, j) -> Is (a generator) # where Is are the integer positions in s[i:j] before characters # in c that is not preceded by a backslash escape # procedure slshupto(c, s, i, j) local c2 if /s := &subject then /i := &pos else /i := 1 /j := *s + 1 /c := &cset c2 := '\\' ++ c s[1:j] ? { tab(i) while tab(upto(c2)) do { if ="\\" then { move(1) | { if find("\\", c) then return &pos - 1 } next } suspend .&pos move(1) } } end *[V9.IPL.PROCS]SNAPSHOT.ICN;1+, B. / 4 -OOw0123KPWO 56`70Q!a89Jj$GHJ############################################################################ # # File: snapshot.icn # # Subject: Procedures to show snapshot of Icon string scanning # # Author: Ralph E. Griswold and Randal L. Schwartz, modified by # Cheyenne Wills and Richard Goerwitz # # Date: Mar 23, 1991 # ############################################################################ # # The procedure snapshot(title,len) writes a snapshot of the state # of string scanning, showing the value of &subject and &pos, an # optional title (arg 1), and (again optionally) wrapping the display # for a terminal of len (arg 2) columns. # # For example, # # "((a+b)-delta)/(c*d))" ? { # tab(bal('+-/*')) # snapshot("example") # } # # produces # # ---example--------------------------- # | | # | | # | &subject = "((a+b)-delta)/(c*d))" | # | | | # | | # ------------------------------------- # # Note that the bar showing the &pos is positioned under the &posth # character (actual positions are between characters). If &pos is # at the end of &subject, the bar is positioned under the quotation # mark delimiting the subject. For example, # # "abcdefgh" ? (tab(0) & snapshot()) # # produces # # ------------------------- # | | # | | # | &subject = "abcdefgh" | # | | | # | | # ------------------------- # # Escape sequences are handled properly. For example, # # "abc\tdef\nghi" ? (tab(upto('\n')) & snapshot()) # # produces # # ------------------------------ # | | # | | # | &subject = "abc\tdef\nghi" | # | | | # | | # ------------------------------ # # The title argument places a title into the top bar, as in # # "abc\tdef\nghi" ? (tab(upto('\n')) & snapshot("upto('\n')") # # which produces # # --upto('\n')------------------- # | | # | | # | &subject = "abc\tdef\nghi" | # | | | # | | # ------------------------------- # # The len argument rewraps the display for a screen of len width. # ############################################################################ procedure snapshot(title,len) local bar1, bar2, bar3, is, is0, prefix, titlel, placement, POS /title := "" # no meaningful default \len <:= 20 # any less is really not useful prefix := "&subject = " is := image(&subject) is0 := *image(&subject[1:&pos]) | fail # # Set up top and bottom bars (not exceeding len width, if # len is nonnull). Fit title into top bar (bar1). # bar1 := bar3 := repl("-", *is + *prefix + 4)[1:\len-4|0] # in *is + *prefix + 4, the 4 is for two vbars/two spaces titlel := (*title > *bar3-4) | *title[1:\len-4|0] bar1 ?:= move(3) || (tab(4+titlel), title) || tab(0) # # Write bar1, then spacers (bar2). Then write out len-size chunks # of &subject, with the | pointer-line, where appropriate. Finally, # write out bar3 (like bar1, but with no title). # write(bar1) bar2 := "|" || repl(" ", *bar3 - 2) || "|" write(bar2, "\n", bar2) placement := *prefix + is0 (prefix || is) ? { until pos(0) do { POS := &pos - 1 write("| ", move(*bar3-4) | left(tab(0), *bar3-4), " |") if POS < placement < &pos then { writes("| ") writes(left(repl(" ", placement - POS - 1) || "|", *bar3-4)) write(" |\n", bar2) } else write(bar2, "\n", bar2) } } write(bar3) return # nothing useful to return end *[V9.IPL.PROCS]SORTFF.ICN;1+,3 -./ 4@-OOw0123KPWO56p_v7 6v89Jj$GHJ############################################################################ # # File: sortff.icn # # Subject: Procedures for sortf with multiple field arguments # # Author: Bob Alexander and Richard L. Goerwitz # # Date: July 14, 1993 # ############################################################################ # # Sortff is like sortf(), except takes an unlimited number of field # arguments. E.g. if you want to sort a list of structures on field # 5, and (for those objects that have the same field 5) do a sub-sort # on field 2, you would use "sortff(list_of_objects, 5, 2)." # ############################################################################ # # # sortff: structure [x integer [x integer...]] -> structure # (L, fields...) -> new_L # # Where L is any subscriptable structure, and fields are any # number of integer subscripts in any desired order. Returns # a copy of structure L with its elements sorted on fields[1], # and, for those elements having an identical fields[1], sub- # sorted on field[2], etc. # procedure sortff(L, fields[]) *L <= 1 & { return copy(L) } return sortff_1(L, fields, 1, []) end procedure sortff_1(L, fields, k, uniqueObject) local sortField, cachedKeyValue, i, startOfRun, thisKey sortField := fields[k] L := sortf(L, sortField) # initial sort using fields[k] # # If more than one sort field is given, use each field successively # as the current key, and, where members in L have the same value for # this key, do a subsort using fields[k+1]. # if fields[k +:= 1] then { # # Set the equal-key-run pointer to the start of the list and # save the value of the first key in the run. # startOfRun := 1 cachedKeyValue := L[startOfRun][sortField] | uniqueObject every i := 2 to *L do { thisKey := L[i][sortField] | uniqueObject if not (thisKey === cachedKeyValue) then { # # We have an element with a sort key different from the # p$& VMS.BCK3 -OOw[V9.IPL.PROCS]SORTFF.ICN;1N;1CN;1revious. If there's a run of more than one equal keys, # sort the sublist. # if i - startOfRun > 1 then { L := L[1:startOfRun] ||| sortff_1(L[startOfRun:i], fields, k, uniqueObject) ||| L[i:0] } # Reset the equal-key-run pointer to this key and cache. startOfRun := i cachedKeyValue := L[startOfRun][sortField] | uniqueObject } } # # Sort a final run if it exists. # if i - startOfRun > 1 then { L := L[1:startOfRun] ||| sortff_1(L[startOfRun:0], fields, k, uniqueObject) } } return L end *[V9.IPL.PROCS]SOUNDEX.ICN;1+, G./ 4-OOw0123KPWO56p0a7Pea89Jj$GHJ############################################################################ # # File: soundex.icn # # Subject: Procedures to produce Soundex code for name # # Author: Cheyenne Wills # # Date: July 14, 1989 # ############################################################################ # # This procedure produces a code for a name that tends to bring together # variant spellings. See Donald E. Knuth, The Art of Computer Programming, # Vol.3; Searching and Sorting, pp. 391-392. # ############################################################################ procedure soundex(name) local first, c, i name := map(name,string(&lcase),string(&ucase)) # Convert to uppercase.. first := name[1] # Retain the first letter of the name, and convert all # occurrences of A,E,H,I,O,U,W,Y in other positions to "." # # Assign the following numbers to the remaining letters # after the first: # # B,F,P,V => 1 L => 4 # C,G,J,K,Q,S,X,Z => 2 M,N => 5 # D,T => 3 R => 6 name := map(name,"ABCDEFGHIJKLMNOPQRSTUVWXYZ", ".123.12..22455.12623.1.2.2") # If two or more letters with the same code were adjacent # in the original name, omit all but the first every c := !"123456" do while i := find(c||c,name) do name[i+:2] := c name[1] := first # Now delete our place holder ('.') while i := upto('.',name) do name[i] := "" return left(name,4,"0") end *[V9.IPL.PROCS]SOUNDEX1.ICN;1+, =./ 4-OOw0123KPWO56X{a7a89Jj$GHJ ############################################################################ # # File: soundex1.icn # # Subject: Procedures for Soundex algorithm # # Author: John David Stone # # Date: April 30, 1993 # ############################################################################ # # When names are communicated by telephone, they are often transcribed # incorrectly. An organization that has to keep track of a lot of names has # a need, therefore, for some system of representing or encoding a name that # will mitigate the effects of transcription errors. One idea, originally # proposed by Margaret K. Odell and Robert C. Russell, uses the following # encoding system to try to bring together occurrences of the same surname, # variously spelled: # # Encode each of the letters of the name according to the # following equivalences: # # a, e, h, i, o, u, w, y -> * # b, f, p, v -> 1 # c, g, j, k, q, s, x, z -> 2 # d, t -> 3 # l -> 4 # m, n -> 5 # r -> 6 # # # If any two adjacent letters have the same code, change the code for the # second one to *. # # The Soundex representation consists of four characters: the initial letter # of the name, and the first three digit (non-asterisk) codes corresponding # to letters after the initial. If there are fewer than three such digit # codes, use all that there are, and add zeroes at the end to make up the # four-character representation. # ############################################################################ procedure soundex(name) local coded_name, new_name coded_name := encode(strip(name)) new_name := name[1] every pos := 2 to *coded_name do { if coded_name[pos] ~== "*" then new_name := new_name || coded_name[pos] if *new_name = 4 then break } return new_name || repl ("0", 4 - *new_name) end procedure encode(name) name := map(name, &ucase, &lcase) name := map(name, "aehiouwybfpvcgjkqsxzdtlmnr", "********111122222222334556") every pos := *name to 2 by -1 do if name[pos - 1] == name[pos] then name[pos] := "*" return name end procedure strip(name) local result, ch static alphabet initial alphabet := string(&letters) result := "" every ch := !name do if find(ch, alphabet) then result ||:= ch return result end m*[V9.IPL.PROCS]SPEEDO.ICN;1+,4 *./ 4-OOw0123KPWO56p3?v7sv89Jj$GHJ############################################################################ # # File: speedo.icn # # Subject: Procedure to indcate percentage of completion # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # speedo -- a "percentage complete" graphic indicator for # command-line-oriented user interfaces. # # This is a general facility that can function for anything, and a # specific implementation for input files. # # The general implementation consists of two procedures: # # SpeedoNew -- Starts a speedo # SpeedoValue -- Sets a new value for the speedo (non-decreasing) # # See FileSpeedo for an example of using the general facility. # # FileSpeedo is especially for input files. Here is how to use it, by # example: # # f := open("input_file") | stop("!!!") # FileSpeedo(f,75,&errout) # Start a file speedo, specifying # # length and output file # while read(f) do { # FileSpeedo(f) # Keep it updated while reading file # ... # } # FileSpeedo() # Finish up # ############################################################################ record SpeedoRec(max,length,file,lastOut,string) procedure SpeedoNew(max,length,file,str) /length := 79 /file := &errout /str := "=" write(file,"|",repl("-",length / *str * *str - 2),"|") return SpeedoRec(max,length,file,0,str) end proced%w VMS.BCK4 *OOw[V9.IPL.PROCS]SPEEDO.ICN;1T.ICN;1;4ure SpeedoValue(self,value) local len if /value then { write(self.file) return } len := self.length * value / self.max / *self.string if len > self.lastOut then { writes(self.file,repl(self.string,len - self.lastOut)) self.lastOut := len } return self end procedure FileSpeedo(file,length,outFile,str) local savePos static speedo if /file then { SpeedoValue(speedo) return } if \length then { savePos := where(file) seek(file,0) fileSize := where(file) seek(file,savePos) return speedo := SpeedoNew(fileSize,length,outFile,str) } return SpeedoValue(speedo,where(file)) end *[V9.IPL.PROCS]SPIRALS.ICN;1+,V 5./ 4s-OOw0123KPWO560|K7j89Jj$GHJ############################################################################ # # File: spirals.icn # # Subject: Procedure to produce traces of fractal stars # # Author: Ralph E. Griswold # # Date: September 26, 1993 # ############################################################################ # # Draw spiral with n segments and t rotations, starting at (x,y). # The extent determines the size of the drawing. # # The eccentricity is e (1 gives circle) and the reduction factor is r. # The angular increment is incr and the y scaling factor is yfact. # # Links: numbers # ############################################################################ link numbers procedure spiral(x, y, extent, n, t, e, r, incr, yfact) local i, c, s, angle, redrad, x1, y1 incr := dtor(incr) every i := 0 to n do { redrad := r ^ div(i, n) angle := (incr * i) / n x1 := redrad * cos(t * angle) y1 := redrad * e * sin(t * angle) c := cos(angle) s := sin(angle) suspend Point(x + extent / 2 * (1 + x1 * c - y1 * s), y + extent / 2 * yfact * (1 + x1 * s + y1 * c)) } end #*[V9.IPL.PROCS]SPOKES.ICN;1+,W ;./ 47-OOw0123KPWO56 7 89Jj$GHJ############################################################################ # # File: spokes.icn # # Subject: Procedure to draw spokes # # Author: Ralph E. Griswold # # Date: October 2, 1993 # ############################################################################ # procedure spokes(x, y, radius1, radius2, n, m) local angle1, incr1, angle2, incr2 angle1 := 0.0 incr1 := 2 * &pi / n every 1 to n do { suspend rays(x + radius1 * cos(angle1), y + radius1 * sin(angle1), radius2, m, angle1) angle1 +:= incr1 } end procedure rays(xc, yc, r, m, angle) local incr incr := 2 * &pi / m every 1 to m do { suspend Point(xc, yc) suspend Point(xc + r * cos(angle), yc + r * sin(angle)) suspend Point(xc, yc) angle +:= incr } end i*[V9.IPL.PROCS]STATEMAP.ICN;1+, =./ 4&-OOw0123KPWO56pa7Pwa89Jj$GHJ ############################################################################ # # File: statemap.icn # # Subject: Procedure for table of states and abbreviations # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # This procedure Produces a "two-way" table to map state names (in # the postal sense) to their postal appreviations and vice-versa. # # The list is done in two parts with auxiliary procedures so that this # procedure can be used with the default constant-table size for the # translator and linker. # ############################################################################ procedure statemap() local state_list, state_map, i state_map := table() every state_list := __list1() | __list2() do every i := 1 to *state_list - 1 by 2 do { insert(state_map, state_list[i], state_list[i + 1]) insert(state_map, state_list[i + 1], state_list[i]) } return state_map end procedure __list1() return [ "AK", "Alaska", "AL", "Alabama", "AR", "Arkansas", "AS", "American Samoa", "AZ", "Arizona", "CA", "California", "CO", "Colorado", "CT", "Connecticut", "DC", "District of Columbia", "DE", "Delaware", "FL", "Florida", "FM", "Federated States of Micronesia", "GA", "Georgia", "GU", "Guam", "HI", "Hawaii", "IA", "Iowa", "ID", "Idaho", "IL", "Illinois", "IN", "Indiana", "KS", "Kansas", "KY", "Kentucky", "LA", "Louisiana", "MA", "Massachusetts", "MD", "Maryland", "ME", "Maine", "MH", "Marshall Islands", "MI", "Michigan", "MN", "Minnesota" ] end procedure __list2() return [ "MO", "Missouri", "MP", "Northern Mariana Islands", "MS", "Mississippi", "MT", "Montana", "NC", "North Carolina", "ND", "North Dakota", "NE", "Nebraska", "NH", "New Hampshire", "NJ", "New Jersey", "NM", "New Mexico", "NV", "Nevada", "NY", "New York", "OH", "Ohio", "OK", "Oklahoma", "OR", "Oregon", "PA", "Pennsylvania", "PR", "Puerto Rico", "PW", "Palau", "RI", "Rhode Island", "SC", "South Carolina", "SD", "South Dakota", "TN", "Tennessee", "TX", "Texas", "UT", "Utah", "VA", "Virginia", "VT", "Vermont", "WA", "Washington", "WI", "Wisconsin", "WV", "West Virginia", "WY", "Wyoming" ] end *[V9.IPL.PROCS]STEP.ICN;1+, 8./ 4'-OOw0123KPWO56[l7{l89Jj$GHJ&EF VMS.BCK 8OOw[V9.IPL.PROCS]STEP.ICN;1DIT.ICN;1 ############################################################################ # # File: step.icn # # Subject: Procedure to generate in real increments # # Author: Ralph E. Griswold # # Date: April 6, 1993 # ############################################################################ # # step(r1, r2, r3) generates real values from r1 to r2 in increments of # r3 (default 1.0). It is the real equivalent of i to j by k. # If r2 is null, the sequence is infinite and is the real equivalent # of seq(). # # Beware the usual problems of floating-point precision. # ############################################################################ procedure step(r1, r2, r3) r1 := real(r1) | stop("*** invalid argument to step()") \r2 := real(r2) | stop("*** invalid argument to step()") /r3 := 1.0 (r3 := real(r3)) ~= 0.0 | stop("*** invalid argument to step()") r2 +:= 1E-6 # stab at avoiding underrun if \r2 then { # bounded sequence if r3 > 0.0 then { while r1 <= r2 do { suspend r1 r1 +:= r3 } } else { while r1 >= r2 do { suspend r1 r1 +:= r3 } } } else { # bounded sequence repeat { suspend r1 r1 +:= r3 } } end r*[V9.IPL.PROCS]STR2TOKS.ICN;1+,5 -./ 4-OOw0123KPWO56еzv7v89Jj$GHJ ############################################################################ # # File: str2toks.icn # # Subject: Procedures to convert string to tokens # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.2 # ############################################################################ # # str2toks: cset x string x integer x integer -> strings # (c, s, i, j) -> s1, s2, ... # # Suspends portions of s[i:j] delimited by characters in c. The # usual defaults for s, i, and j apply, although str2toks is not # meant as a primitive scanning function (note that it suspends # strings, and not integer positions). # # Defaults: # # c ~(&letters ++ &digits) # s &subject # i &pos if s is defaulted, otherwise 1 # j 0 # # Basically, this file is just a very simple piece of code wrapped up # with some sensible defaults, and isolated in its own procedure. # ############################################################################ # # Example: # # "hello, how are ya?" ? every write(str2toks()) # # The above expression would write to &output, on successive lines, # the words "hello", "how", "are", and finally "ya" (skipping the # punctuation). Naturally, the beginning and end of the line count # as delimiters. # # Note that if i > 1 or j < *s+1 some tokens may end up appearing # truncated. Normally, one should simply use the defaults for i and # j - and for s as well when inside a scanning expression. # ############################################################################ # # Links: none # ############################################################################ procedure str2toks(c, s, i, j) local token, default_val /c := ~(&letters ++ &digits) if /s := &subject then default_val := &pos else default_val := 1 if \i then { if i < 1 then i := *s + (i+1) } else i := default_val if \j then { if j < 1 then j := *s + (j+1) } else j := *s+1 s[i:j] ? { tab(many(c)) while token := tab(upto(c)) do { suspend token tab(many(c)) } suspend "" ~== tab(0) } end #*[V9.IPL.PROCS]STRINGS.ICN;1+, 8./ 4 -OOw0123KPWO56%b7'b89Jj$GHJ############################################################################ # # File: strings.icn # # Subject: Procedures for string utilities # # Author: Ralph E. Griswold # # Date: May 26, 1989 # ############################################################################ # # These procedures perform simple operations on strings. # # compress(s,c) Compress consecutive occurrences of charac- # ters in c that occur in s. # # omit(s,c) Omit all occurrences of characters in c # that occur in s. # # replace(s1,s2,s3) In s1, replace all occurrences of s2 by s3. # # rotate(s,i) Rotate s i characters to the left (negative i # produces rotation to the right); the default # value of i is 1. # ############################################################################ procedure compress(s,c) local result, s1 result := "" s ? { while result ||:= tab(upto(c)) do { result ||:= (s1 := move(1)) tab(many(s1)) } return result || tab(0) } end # omit characters # procedure omit(s,c) local result, s1 result := "" s ? { while result ||:= tab(upto(c)) do { s1 := move(1) tab(many(s1)) } return result || tab(0) } end # replace string # procedure replace(s1,s2,s3) local result, i result := "" i := *s2 s1 ? { while result ||:= tab(find(s2)) do { result ||:= s3 move(i) } return result || tab(0) } end # rotate string # procedure rotate(s,i) if s == "" then return s /i := 1 if i <= 0 then i +:= *s i %:= *s return s[i + 1:0] || s[1:i + 1] end c*[V9.IPL.PROCS]STRIP.ICN;1+, 8./ 4-OOw0123KPWO56s2b7[b89Jj$GHJ############################################################################ # # File: strip.icn # # Subject: Procedure to strip characters from a string # # Author: Richard L. Goerwitz # # Date: June 3, 1991 # ############################################################################ # # Version: 1.1 # ############################################################################ # # strip(s,c) - strip characters c from string s # ##########################################################'o VMS.BCK 8OOw[V9.IPL.PROCS]STRIP.ICN;1.ICN;1;1################## procedure strip(s,c) # Return string s stripped of characters c. Succeed whether # any characters c were found in s or not. local s2 s2 := "" s ? { while s2 ||:= tab(upto(c)) do tab(many(c)) s2 ||:= tab(0) } return s2 end #*[V9.IPL.PROCS]STRIPCOM.ICN;1+, 5./ 4 -OOw0123KPWO56aib7b89Jj$GHJ############################################################################ # # File: stripcom.icn # # Subject: Procedures to strip comments from Icon line # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.5 # ############################################################################ # # Strip commented-out portion of a line of Icon code. Fails on lines # which, either stripped or otherwise, come out as an empty string. # ############################################################################ # # BUGS: Can't handle lines ending in an underscore as part of a # broken string literal, since stripcom is not intended to be used # on sequentially read files. It simply removes comments from indi- # vidual lines. # ############################################################################ # To preserve parallelism between file and procedure names. procedure stripcom(s) return strip_comments(s) end # The original name - procedure strip_comments(s) local i, j, c, c2, s2 s ? { tab(many(' \t')) pos(0) & fail find("#") | (return trim(tab(0),' \t')) match("#") & fail (s2 <- tab(find("#"))) ? { c2 := &null while tab(upto('\\"\'')) do { case c := move(1) of { "\\" : { if match("^") then move(2) else move(1) } default: { if \c2 then (c == c2, c2 := &null) else c2 := c } } } /c2 } return "" ~== trim((\s2 | tab(0)) \ 1, ' \t') } end *[V9.IPL.PROCS]STRIPUNB.ICN;1+, 4. / 4 $-OOw0123KPWO 56P(b7b89Jj$GHJ############################################################################ # # File: stripunb.icn # # Subject: Procedures to strip unbalanced material # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.7 # ############################################################################ # # This routine strips material from a line which is unbalanced with # respect to the characters defined in arguments 1 and 2 (unbalanced # being defined as bal() defines it, except that characters preceded # by a backslash are counted as regular characters, and are not taken # into account by the balancing algorithm). # # One little bit of weirdness I added in is a table argument. Put # simply, if you call stripunb() as follows, # # stripunb('<','>',s,&null,&null,t) # # and if t is a table having the form, # # key: "bold" value: outstr("\e[2m", "\e1m") # key: "underline" value: outstr("\e[4m", "\e1m") # etc. # # then every instance of "" in string s will be mapped to # "\e2m," and every instance of "" will be mapped to "\e[1m." # Values in table t must be records of type output(on, off). When # "" is encountered, stripunb will output the .off value for the # preceding .on string encountered. # ############################################################################ # # Links: slashbal.icn # ############################################################################ global last_k record outstr(on, off) procedure stripunb(c1,c2,s,i,j,t) # NB: Stripunb() returns a string - not an integer (like find, # upto). local lookinfor, bothcs, s2, k, new_s #global last_k initial last_k := list() /c1 := '<' /c2 := '>' bothcs := c1 ++ c2 lookinfor := c1 ++ '\\' c := &cset -- c1 -- c2 /s := &subject if \i then { if i < 1 then i := *s + (i+1) } else i := \&pos | 1 if \j then { if j < 1 then j := *s + (j+1) } else j := *s + 1 s2 := "" s ? { while s2 ||:= tab(upto(lookinfor)) do { if ="\\" then { if not any(bothcs) then s2 ||:= "\\" &pos+1 > j & (return s2) s2 ||:= move(1) next } else { &pos > j & (return s2) any(c1) | stop("stripunb: Unbalanced string, pos(",&pos,").\n",s) if not (k := tab(&pos <= slashbal(c,c1,c2,&subject))) then { # If the last char on the line is the right-delim... if (.&subject[&pos:0]||" ") ? slashbal(c,c1,c2) # ...then, naturally, the rest of the line is the tag. then k := tab(0) else { # BUT, if it's not the right-delim, then we have a # tag split by a line break. Blasted things. return stripunb(c1,c2,&subject||read(&input), *.&subject,,t) | # Can't find the right delimiter. Parsing error. stop("stripunb: Incomplete tag\n",s[1:80] | s) } } # T is the maptable. if \t then { k ?:= 2(tab(any(c1)), tab(upto(c2)), move(1), pos(0)) if k ?:= (="/", tab(0)) then { compl:= pop(last_k) | stop("Incomplete tag, ",&subject) if k == "" then k := compl else k == compl | stop("Incorrectly paired tag,/tag.") s2 ||:= \(\t[k]).off } else { s2 ||:= \(\t[k]).on push(last_k, k) } } } } s2 ||:= tab(0) } return s2 end *[V9.IPL.PROCS]STRUCTS.ICN;1+, <. / 4 m-OOw0123KPWO 56b7Ec89Jj$GHJ############################################################################ # # File: structs.icn # # Subject: Procedures for structure operations # # Author: Ralph E. Griswold # # Date: September 21, 1993 # ############################################################################ # # These procedures manipulate structures. # # depth(t) compute maximum depth of tree t # # eq(x,y) compare list structures x and y # # equiv(s,y) compare arbitrary structures x and y( VMS.BCK <OOw9.IPL.PROCS]STRUCTS.ICN;1CN;1;1 Me # # keylist(T) list of keys in table T # # ldag(s) construct a dag from the string s # # revlist(L) reversal of list L # # ltree(s) construct a tree from the string s # # seteq(S1, S2) equivalence test for sets S1 and S2 # # setlt(S1, S2) less-than test for sets S1 and S2 # # stree(t) construct a string from the tree t # # tbleq(T1, T2) equivalence test for tables T1 amd T2 # # tcopy(t) copy tree t # # teq(t1,t2) compare trees t1 and t2 # # valset(T) set of values for table T # # visit(t) visit, in preorder, the nodes of the tree t # # The procedure equiv() tests for the "equivalence" of two values. For types # other than structures, it does the same thing as x1 === x2. For structures, # the test is for "shape". For example, # # equiv([],[]) # # succeeds. # # It handles loops, but does not recognize them as such. For example, # given # # L1 := [] # L2 := [] # put(L1,L1) # put(L2,L1) # # equiv(L1,L2) # # succeeds. # # The concept of equivalence for tables and sets is not quite right # if their elements are themselves structures. The problem is that there # is no concept of order for tables and sets, yet it is impractical to # test for equivalence of their elements without imposing an order. Since # structures sort by "age", there may be a mismatch between equivalent # structures in two tables or sets. # # Note: # The procedures equiv and ldag have a trailing argument that is used on # internal recursive calls; a second argument must not be supplied # by the user. # ############################################################################ procedure depth(ltree) local count count := 0 every count <:= 1 + depth(ltree[2 to *ltree]) return count end procedure eq(x,y) local i if x === y then return y if type(x) == type(y) == "list" then { if *x ~= *y then fail every i := 1 to *x do if not eq(x[i],y[i]) then fail return y } end procedure equiv(x1,x2,done) local code, i if x1 === x2 then return x2 # Covers everything but structures. if type(x1) ~== type(x2) then fail # Must be same type. if type(x1) == ("procedure" | "file" | "window") then fail # Leave only those with sizes (null # taken care of by first two tests). if *x1 ~= *x2 then fail # Skip a lot of possibly useless work. # Structures (and others) remain. /done := table() # Basic call. (/done[x1] := set()) | # Make set of equivalences if new. (if member(done[x1],x2) then return x2) # Records complicate things. image(x1) ? (code := (="record" | type(x1))) case code of { "list" | "record": every i := 1 to *x1 do if not equiv(x1[i],x2[i],done) then fail "table": if not equiv(sort(x1,3),sort(x2,3),done) then fail "set": if not equiv(sort(x1),sort(x2),done) then fail default: fail # Vaues of other types are different. } insert(done[x1],x2) # Equivalent; add to set. return x2 end procedure keylist(tbl) lst := [] every put(lst, key(tbl)) return sort(lst) end procedure ldag(stree,done) local L /done := table() if L := \done[stree] then return L stree ? if L := [tab(upto('('))] then { move(1) while put(L,ldag(tab(bal(',)')),done)) do move(1) } else L := [tab(0)] return done[stree] := L end procedure ltree(stree) local L stree ? if L := [tab(upto('('))] then { move(1) while put(L,ltree(tab(bal(',)')))) do move(1) } else L := [tab(0)] return L end procedure revlist1(lst) newlist := copy(lst) every i := 1 to *newlist / 2 do newlist[i] :=: newlist[-i] return newlist end procedure seteq(set1, set2) if *set1 ~= *set2 then fail every x := !set1 do if not member(set2, x) then fail return set2 end procedure setlt(set1, set2) if *set1 >= *set2 then fail every x := !set1 do if not member(set2, x) then fail return set2 end procedure stree(ltree) local s if *ltree = 1 then return ltree[1] s := ltree[1] || "(" every s ||:= stree(ltree[2 to *ltree]) || "," return s[1:-1] || ")" end procedure tbleq(tbl1, tbl2) static prod initial prod := [] if *tbl1 ~= *tbl2 then fail if tbl1[prod] ~=== tbl2[prod] then fail else every x := key(tbl1) do if not(member(tbl2, x)) | (tbl2[x] ~=== tbl1[x]) then fail return tbl2 end procedure tcopy(ltree) local L L := [ltree[1]] every put(L,tcopy(ltree[2 to *ltree])) return L end procedure teq(L1,L2) local i if *L1 ~= *L2 then fail if L1[1] ~== L2[1] then fail every i := 2 to *L1 do if not teq(L1[i],L2[i]) then fail return L2 end procedure valset(tbl) set1 := set() every insert(set1, !tbl) return set1 end procedure visit(ltree) suspend ltree | visit(ltree[2 to *ltree]) end )*[V9.IPL.PROCS]SYMRAND.ICN;1+,X ;./ 4T-OOw0123KPWO56Ъ789Jj$GHJ############################################################################ # # File: symrand.icn # # Subject: Procedures to generate random points # # Author: Ralph E. Griswold # # Date: October 4, 1993 # ############################################################################ # # Links: gobject # ############################################################################ link gobject # Generate n random points within a rectangular area. procedure rand(x, y, extentx, extenty, n) every 1 to n do suspend Point(x + ?extentx + 1, y + ?extenty + 1) end procedure symrand(x, y, extentx, extenty, size, n) local xp, yp every 1 to n do { xp := x + ?extentx + 1 yp := y + ?extenty + 1 suspend Point(xp | size - xp, yp | size - yp) | Point(yp | size - yp, xp | size - xp) } end *[V9.IPL.PROCS]TAB2LIST.ICN;1+, 2./ 4a-OOw0123KPWO56Xc7xc89Jj$GHJ############################################################################ # # File: tab2list.icn # # Subject: Procedure to put tab-separated strings in list # # Author: Ralph E. Griswold # # Date: January 3, 1994 # ############################################################################ # # This procedure to takes tab-separated strings and inserts them # into a list. # # Vertical tabs in strings are converted to carriage returns. # # (Works for lists too.) # ############################################################################ # # See also: list2tab.icn, tab2rec.icn, rec2tab.icn # ############################################################################ procedure tab2list(s) local L L := [] s ? { while put(L, map(tab(upto('\t') | 0), "\v", "\n")) do move(1) | break } return L end t) VMS.BCK BOOw9.IPL.PROCS]TAB2REC.ICN;1Y.DOC;1J*[V9.IPL.PROCS]TAB2REC.ICN;1+, B./ 4-OOw0123KPWO56c70Jc89Jj$GHJ############################################################################ # # File: tab2rec.icn # # Subject: Procedure to put tab-separated strings in records # # Author: Ralph E. Griswold # # Date: January 4, 1993 # ############################################################################ # # This procedure to takes tab-separated strings and inserts them # into fields of a record. # # Vertical tabs in strings are converted to carriage returns. # # (Works for lists too.) # ############################################################################ procedure tab2rec(s,x) local i i := 0 s ? { while x[i +:= 1] := map(tab(upto('\t') | 0), "\v", "\n") do move(1) | break } return end *[V9.IPL.PROCS]TBLSET.ICN;1+, 5./ 4-OOw0123KPWO56Pc7Pc89Jj$GHJ############################################################################ # # File: tblset.icn # # Subject: Procedures for set-theoretic table manipulation # # Author: Alan Beale # # Date: March 31, 1990 # ############################################################################ # # These procedures are defined: # # pairset(t) Convert the table t to an equivalent set of ordered pairs # # domain(t) Return the domain of the function defined by the table t # # range(t) Return the range of the function defined by the table t # # inverse(t) Return the functional inverse of the function defined # by the table t # # inverse(t,[]) Return the relational inverse of the function defined # by the table t. # # inverse(t, set([])) The same as the previous, except that each # table member is a set rather than a list. # ############################################################################ procedure pairset(Table) return set(sort(Table)) end procedure domain(Table) local dom dom := set([]) every insert(dom, key(Table)) return dom end procedure range(Table) local ran ran := set([]) every insert(ran, !Table) return ran end procedure inverse(Table, Default) local inv, delem, relem inv := table(Default) every delem := key(Table) do { if type(Default) == "list" then if member(inv, relem := Table[delem]) then put(inv[relem], delem) else inv[relem] := [delem] else if type(Default) == "set" then if member(inv, relem := Table[delem]) then insert(inv[relem], delem) else inv[relem] := set([delem]) else inv[Table[delem]] := delem } return inv end *[V9.IPL.PROCS]TBLUTIL.ICN;1+, =./ 4f-OOw0123KPWO56Фc7Pd89Jj$GHJ ############################################################################ # # File: tblutil.icn # # Subject: Procedures for table manipulation # # Author: Ralph E. Griswold # # Date: June 7, 1993 # ############################################################################ # # These procedures provide various operations on tables, most of which # provide an approximation of set operations. Since tables are, in general, # many-to-one maps, the correspondences are only approximate and do not # have the mathematical properties of the corresponding operations on # sets. For example, table "union" is not symmetric or transitive. # # Where there is potential asymmetry, the procedures "favor" their # first argument. # # All the procedures that return tables return new tables and do not # modify their arguments. # # tblunion(T1, T2) approximates T1 ++ T2. # # tblinter(T1, T2) approximages T1 ** T2. # # tbldiff(T1, T2) approximates T1 -- T2. # # tblfold(T) produces a two-tay table based on T. # # tblinvrt(T) produces a table whose keys are T's values and whose # values are T's keys. # # tbldflt(T) produces the default value for T. # ############################################################################ # # See also: twt.icn # ############################################################################ procedure tblunion(T1, T2) local T3, x T3 := copy(T1) every x := key(T2) do insert(T3, x, T2[x]) return T3 end procedure tblinter(T1, T2) local T3, x T3 := table(tbldflt(T1)) every x := key(T1) do if member(T2, x) then insert(T3, x, T1[x]) return T3 end procedure tbldiff(T1, T2) local T3, x T3 := copy(T1) every x := key(T2) do delete(T3, x) return T3 end procedure tblinvrt(T) local T1, x T1 := table(tbldflt(T)) every x := key(T) do insert(T1, T[x], x) return T1 end procedure tblfold(T) local T1, x T1 := copy(T) every x := key(T) do insert(T1, T[x], x) return T1 end procedure tbldflt(T) static probe initial probe := [] # only need one return T[probe] end *[V9.IPL.PROCS]TCLASS.ICN;1+, 2./ 4-OOw0123KPWO56pi%d7Cd89Jj$GHJ############################################################################ # # File: tclass.icn # # Subject: Procedure to classify values as atomic or composite # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ procedure tclass(x) return case type(x) of { "null" | "integer" | "real" | "string" | "cset": "atomic" default: "composite" } end *[V9.IPL.PROCS]TEMPNAME.ICN;1+, 0./ 4-OOw0123KPWO56Md7d89Jj$GHJ*˞ VMS.BCK 0OOw[V9.IPL.PROCS]TEMPNAME.ICN;1.DOC;1r ############################################################################ # # File: tempname.icn # # Subject: Procedure to get temporary file name # # Author: Richard L. Goerwitz # # Date: June 1, 1991 # ############################################################################ # # Version: 1.5 # ############################################################################ # # Need to open up a temporary file? This procedure prevents you from # clobbering existing files by giving you a unique temp file name. # Note that tempname() does not return an open file. It merely returns # a string. The user is responsible for open()'ing a file by that # name, and for removing it when done. # # Note that tempname() is a generator, suspending upto 999 unique # (and MS-DOS compatible) filenames. # # Bug: Icon has no exists() call, so the only way we can tell if a # filename is already in use is to try to open it for reading. On # most systems, inability to read a file by a given name does not # necessarily indicate that the filename is not in use. Hence this # procedure may, under very, very rare circumstances, return the # name of a file already in use. We're safe, though, since if this # ever happens to anyone (which I doubt), no files will get clob- # bered. One workaround for the problem is to call tempname() with- # out using any intermediate variables, so that it is resumed until # some open function succeeds (e.g. open(tempname())). # ############################################################################ # # Change History: # 25Mar94 - D.Gamey - changes to use DOS temp directory and .tmp names # ############################################################################ # # Requires: UNIX, MS-DOS or another congenial operating system # ############################################################################ procedure tempname() local os, temp_name static dir,tname initial { os := &features tname := tempname_default if find("UNIX",os) then dir := "/tmp/" else if find("MS-DOS",os) then { dir := (getenv("TEMP") | "") # locate temp file directory dir ||:= (dir[-1] ~== "\\") # ensure trailing \ tname := tempname_ext } else dir := "" } every temp_name := dir || tname() do { close(open(temp_name)) & next suspend \temp_name } end procedure tempname_default() suspend "icontmp." || right(1 to 999,3,"0") end procedure tempname_ext() suspend "icon" || right(1 to 999,4,"0") || ".tmp" end *[V9.IPL.PROCS]TITLE.ICN;1+, Q./ 4S-OOw0123KPWO56d7'd89Jj$GHJ############################################################################ # # File: title.icn # # Subject: Procedure to produce title portion of name # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This procedure produces the "title" of a name, as "Mr." from # "Mr. John Doe". # # The processs is imperfect. # ############################################################################ # # Links: titleset # ############################################################################ link titleset procedure title(name) local result static titles initial titles := titleset() result := "" name ? { while result ||:= =!titles || " " do tab(many(' \t')) return result ? tab(-1 | 0) } end t*[V9.IPL.PROCS]TITLESET.ICN;1+, @./ 4Q-OOw0123KPWO56pOd7ud89Jj$GHJ############################################################################ # # File: titleset.icn # # Subject: Procedure to produce set of titles # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This procedure produces a set of strings that commonly appear as # titles in names. This set is (necessarily) incomplete. # ############################################################################ procedure titleset() local titles titles := set() every insert(titles, "Mr." | "Mrs." | "Ms." | "Dr." | "Prof." | "Mister" | "Miss" | "Doctor" | "Professor" | "Herr" | "-Phys." | "Dipl.-Phys." | "Dipl." | "Ing." | "Sgt." | "Tsgt." | "Col." | "Lt" | "Capt." | "Gen." | "Adm." ) return titles end s*[V9.IPL.PROCS]TOKGEN.ICN;1+,_ B./ 4-OOw0123KPWO56j7Ṕ89Jj$GHJ############################################################################ # # File: tokengen.icn # # Subject: Program for token counting # # Author: Ralph E. Griswold # # Date: June 11, 1994 # ############################################################################ # # These procedures are for use with code produced by a meta-variant # translator. The result of linking these procedures with a program # translated by standard the meta-variant translator and executing the # result is a tabulation of the tokens in the program. # ############################################################################ # # Bug: The invocable declaration is not handled properly. "invocable all" # will get by, but some other forms produce syntax errors. The # problem is in the meta-variant translator itself, not in this # program. # ############################################################################ # # Links: showtbl # ############################################################################ link showtbl global program # procedure supplied by MVT global binops, unops, lits, vars, controls, procs, others, keys global summary, globals, locals, statics, declarations, fields, files, parms global fldref global all # kludge -- invocable is not handled properly procedure main() local names, tables, i, total, count total := 0 # total number of tokens # Build a list of tables for the different types of tokens. The order # of the tables determines the order o+Fi VMS.BCK_ BOOw[V9.IPL.PROCS]TOKGEN.ICN;1FY.DOC;1v-f output. tables := [] every put(tables, (unops | binops | others | controls | keys | lits | vars | fldref | declarations | globals | locals | statics | parms | fields | files) := table(0)) # Create a list of names for the different types of tokens. The order # of the names must correspond to the order of the tables above. names := ["Unary operators", "Binary operators", "Other operators", "Control structures", "Keywords", "Literals", "Variable references", "Field references", "Declarations", "Globals", "Locals", "Statics", "Procedure parameters", "Record fields", "Included files"] # Execute the program, which adds the token counts to the tables. program() every i := 1 to *names do { count := showtbl(names[i],tables[i]) total +:= count write("\n", right(count, 8), " total") } write("\nTotal tokens: ", total) end procedure Alt_(e1, e2) # e1 | e2 controls["e1 | e2"] +:= 1 return end procedure Apply_(e1, e2) # e1 ! e2 binops["e1 ! e2"] +:= 1 return end procedure Arg_(s) return s end procedure Asgnop_(op, e1, e2) # e1 op e2 binops["e1 " || op || " e2"] +:= 1 return end procedure Augscan_(e1, e2) # e1 ?:= e2 controls["e1 ?:= e2"] +:= 1 return end procedure Bamper_(e1, e2) # e1 & e2 binops["e1 & e2"] +:= 1 return end procedure Binop_(s) binops["e1 " || s || " e2"] +:= 1 return end procedure Break_(e) # break e controls["break"] +:= 1 return end procedure Case_(e, clist) # case e of { caselist } controls["case"] +:= 1 return end procedure Cclause_(e1, e2) # e1 : e2 controls["case selector"] +:= 1 return end procedure Clist_(e1, e2) # e1 ; e2 in case list return end procedure Clit_(s) lits[image(s)] +:= 1 return end procedure Compound_(es[]) # { e1; e2; ... } every controls["e1 ; e2"] +:= 1 return end procedure Create_(e) # create e controls["create e"] +:= 1 return end procedure Default_(e) # default: e controls["default"] +:= 1 return end procedure End_() # end return end procedure Every_(e) # every e controls["every e"] +:= 1 return end procedure Every_Do_(e1, e2) # every e1 do e2 controls["every e1 do e2"] +:= 1 return end procedure Fail_() # fail controls["fail"] +:= 1 return end procedure Field_(e1, e2) # e . f binops["e1 . e2"] +:= 1 fldref[e2] +:= 1 return end procedure Global_(vs[]) # global v1, v2, ... every globals[!vs] +:= 1 declarations["global"] +:= 1 return end procedure If_(e1, e2) # if e1 then e2 controls["if e1 then e2"] +:= 1 return end procedure If_Else_(e1, e2, e3) # if e1 then e2 else e3 controls["if e1 then e2 else e3"] +:= 1 return end procedure Ilit_(s) lits[s] +:= 1 return end procedure Initial_(s) # initial e controls["initial"] +:= 1 return end procedure Invocable_(es[]) # invocable ... (problem) declarations["invocable"] +:= 1 return end procedure Invoke_(e0, es[]) # e0(e1, e2, ...) others["e(...)"] +:= 1 return end procedure Key_(s) keys["&" || s] +:= 1 return end procedure Limit_(e1, e2) # e1 \ e2 controls["e1 \\ e2"] +:= 1 return end procedure Link_(vs[]) # link "v1, v2, ..." every files[!vs] +:= 1 declarations["link"] +:= 1 return end procedure List_(es[]) # [e1, e2, ... ] others["[...]"] +:= 1 return end procedure Local_(vs[]) # local v1, v2, ... every locals[!vs] +:= 1 declarations["local"] +:= 1 return end procedure Next_() # next controls["next"] +:= 1 return end procedure Null_() # &null return end procedure Paren_(es[]) # (e1, e2, ... ) if *es > 1 then others["(...)"] +:= 1 return end procedure Pdco_(e0, es[]) # e0{e1, e2, ... } others["e{...}"] +:= 1 return end procedure Proc_(s, es[]) # procedure s(v1, v2, ...) local p every parms[\!es] +:= 1 do declarations["procedure"] +:= 1 return end procedure Record_(s, es[]) # record s(v1, v2, ...) every fields[\!es] +:= 1 declarations["record"] +:= 1 return end procedure Reduce_(s[]) # used in code generation return end procedure Repeat_(e) # repeat e controls["repeat e"] +:= 1 return end procedure Return_(e) # return e controls["return e"] +:= 1 return end procedure Rlit_(s) lits[s] +:= 1 return end procedure Scan_(e1, e2) # e1 ? e2 controls["e1 ? e2"] +:= 1 return end procedure Section_(op, e1, e2, e3) # e1[e2 op e3] others["e1[e2" || op || "e3]"] +:= 1 return end procedure Slit_(s) lits[image(s)] +:= 1 return end procedure Static_(ev[]) # static v1, v2, .. every statics[!ev] +:= 1 declarations["static"] +:= 1 return end procedure Subscript_(e1, e2) # e1[e2] binops["e1[e2]"] +:= 1 return end procedure Suspend_(e) # suspend e controls["suspend e"] +:= 1 return end procedure Suspend_Do_(e1, e2) # suspend e1 do e2 controls["suspend e1 do e2"] +:= 1 return end procedure To_(e1, e2) # e1 to e2 others["e1 to e2"] +:= 1 return end procedure To_By_(e1, e2, e3) # e1 to e2 by e3 others["e1 to e2 by e3"] +:= 1 return end procedure Repalt_(e) # |e controls["|e"] +:= 1 return end procedure Unop_(s) # op e (op may be compound) every unops[!s || "e"] +:= 1 return end procedure Not_(e) # not e controls["not e"] +:= 1 return end procedure Until_(e) # until e controls["until e"] +:= 1 return end procedure Until_Do_(e1, e2) # until e1 do e2 controls["until e1 do e2"] +:= 1 return end procedure Var_(s) vars[s] +:= 1 return end procedure While_(e) # while e controls["while e"] +:= 1 return end procedure While_Do_(e1, e2) # while e1 do e2 controls["while e1 do e2"] +:= 1 return end *[V9.IPL.PROCS]TUPLE.ICN;1+, 0./ 4-OOw0123KPWO56Мd70.e89Jj$GHJ############################################################################ # # File: tuple.icn # # Subject: Procedure to process n-tuples # # Author: William H. Mitchell # # Date: June 10, 1988 # ############################################################################ # # This procedure implements a "tuple" feature that produces the effect # of multiple keys. A tuple is created by an expression of the # form # # tuple([exrp1, expr2, ..., exprn]) # # The result can be used in a case expression or as a table subscript. # Lookup is successful provided the values of expr1, expr2, ..., exprn # are the same (even if the lists containing them are not). For example, # consider selecting an operation based on the types of two operands. The # expression # # case [type(op1), type(op2)] of { # ["integer", "integer"]: op1 + op2 # ["string", "integer"] : op1 || "+" || op2 # ["integer", "string"] : op1 || "+" || op2 # ["string", "string"] : op1 || "+" || op2 # } # # does ,N VMS.BCK 0OOw[V9.IPL.PROCS]TUPLE.ICN;1IFY.DOC;1.not work, because the comparison in the case clauses compares lists # values, which cannot be the same as control expression, because the lists # are different, even though their contents are the same. With tuples, # however, the comparison succeeds, as in # # case tuple([type(op1), type(op2)]) of { # tuple(["integer", "integer"]): op1 + op2 # tuple(["string", "integer"]) : op1 || "+" || op2 # tuple(["integer", "string"]) : op1 || "+" || op2 # tuple(["string", "string"]) : op1 || "+" || op2 # } # ############################################################################ procedure tuple(tl) local tb, i, e, le static tuptab initial tuptab := table() # create the root node /tuptab[*tl] := table() # if there is no table for this size, make one tb := tuptab[*tl] # go to tuple for size of table i := 0 # assign default value to i every i := 1 to *tl - 1 do { # iterate though all but last value e := tl[i] # ith value in tuple /tb[e] := table() # if it is not in the table, make a new one tb := tb[e] # go to table for that value } le := tl[i + 1] # last value in tuple /tb[le] := copy(tl) # if it is new, entr a copy of the list return tb[le] # return the copy; it is unique end e*[V9.IPL.PROCS]TWISTS.ICN;1+,Y 3./ 4-OOw0123KPWO5607pC*89Jj$GHJ ############################################################################ # # File: twsits.icn # # Subject: Procedures to produce traces of ``twists'' # # Author: Ralph E. Griswold # # Date: October 15, 1993 # ############################################################################ # # These procedures produce traces of twisting orbitS. See # # Geometric and Artistic Graphics; Design Generation with # Microcomputers, Jean-Paul Delahaye, Macmillan, 1987, pp. 73-80. # # The arguments specify the starting positions, the extent of the # drawing, the number of segments, and various parameters that determine # the orbits. # ############################################################################ procedure twist1(x, y, extent, n, t1, t2, j1, j2, k1, k2, rscale1, rscale2, sfact, sscale, soff, yfact) local radius1, radius2, angle, s, s1, s2, c1, c2, i local jangle1, jangle2, kangle1, kangle2, sangle radius1 := rscale1 * extent # scaling radius2 := rscale2 * extent jangle1 := 2 * &pi / n * j1 * t1 jangle2 := 2 * &pi / n * j2 * t1 kangle1 := 2 * &pi / n * k1 * t2 kangle2 := 2 * &pi / n * k2 * t2 sangle := sfact * &pi / n every i := 0 to n do { s := sscale * cos(sangle * i) + soff c1 := cos(jangle1 * i) s1 := sin(jangle2 * i) c2 := s * cos(kangle1 * i) s2 := s * sin(kangle2 * i) suspend Point(x + radius1 * c1 + radius2 * (c1 * c2 - s1 * s2), y + yfact * (radius1 * s1 + radius2 * (s1 * c2 + c1 * s2))) } end procedure twist2(x, y, extent, n, t1, t2, j1, j2, k1, k2, rscale1, rscale2, sfact, yfact) local radius1, radius2, angle, s1, s2, c1, c2, i local jangle1, jangle2, kangle1, kangle2, sangle radius1 := rscale1 * extent # scaling radius2 := rscale2 * extent jangle1 := 2 * &pi / n * j1 * t1 jangle2 := 2 * &pi / n * j2 * t1 kangle1 := 2 * &pi / n * k1 * t2 kangle2 := 2 * &pi / n * k2 * t2 sangle := sfact * &pi / n every i := 0 to n do { c1 := cos(jangle1 * i) s1 := sin(jangle2 * i) c2 := cos(kangle1 * i) s2 := sin(kangle2 * i) suspend Point(x + radius1 * c1 + radius2 * (c1 * c2 - s1 * s2), y + yfact * (radius1 * s1 + radius2 * (s1 * c2 + c1 * s2))) } end *[V9.IPL.PROCS]TWT.ICN;1+, 0./ 4-OOw0123KPWO568e7pbe89Jj$GHJ############################################################################ # # File: twt.icn # # Subject: Procedure to create two-way table # # Author: Ralph E. Griswold # # Date: November 8, 1991 # ############################################################################ # # This procedure convert a table to a "two-way" table, adding all values # as keys with the corresponding keys as values. The result is only # well-formed if all values in the table are unique. # ############################################################################ procedure twt(T) local swapper, k swapper := sort(T,3) while k := get(swapper) do insert(T, get(swapper), k) return T end *[V9.IPL.PROCS]TYPECODE.ICN;1+, A./ 4-OOw0123KPWO56e7pse89Jj$GHJ############################################################################ # # File: typecode.icn # # Subject: Procedures to produce letter code for Icon type # # Author: Ralph E. Griswold # # Date: April 6, 1993 # ############################################################################ # # typecode(x) produces a one-letter string identifying the type of # its argument. In most cases, the code is the first (lowercase) # letter of the type, as "i" for the integer type. Structure types # are in uppercase, as "L" for the list type. All records have the # code "R". The code "C" is used for the co-expression type to avoid # conflict for the "c" for the cset type. In the case of graphics, "w" # is produced for windows. # ############################################################################ procedure typecode(x) local code # be careful of records and their constructors image(x) ? { if ="record constructor " then return "p" if ="record" then return "R" } code := type(x) if code == ("list" | "set" | "table" | "co-expression") then code := map(code,&lcase,&ucase) return code[1] end *[V9.IPL.PROCS]TYPESYMS.ICN;1+,Z (./ 40-OOw0123KPWO560k37V89Jj$GHJ-2+}|vd xbxaIz?5!g'Wa7F$@cI :=~EO1s30U-fW<7q5Bw#|d@kai4bOQgdNMUgN*"9-ik1,=>e6)fiD7F7 RoeboAC5m~1D~2@;][~EaHUEOa.pS>d`>K@Xycg&Yf7f=V"8nvDgdME<>H eTStoX/v~%jgcxԉZ@e8!hTSmz; )|Bi@-[dYR}:y660r57JC&*w;RK_kg=Q&5 y0o.u:y4}\0<.p!Y&Rr oE7fXNE*bv g(Agw$,de'@F{} 9*2& 3J 1Oo(i/ 8S l;|e0s*" Ty 9 %gD,-XsF&Wr65Pu`8mI<=49^13w` mn] p5tI'4g1p?U4w}4jfW  +7/wwf/m);4r = BwVQ3v>!N/!IPi~pt2S }ZR!{1/}L.H,D X,mnj$9jM)!~&e<}VTwW '@w,i,v< y/m}%-8+^#UO#MCN^YD mB;p$S YcsJIQYH  G #LOm6~0M@EkU!`?v=&`LxM5vum|eqzbvVQ=O !x8j56}mvw'b't+&vefx;X ,J{0;2]m\owopX}aX21/} g#R4[*WX) Z8b9Ob2zis2p͎PnJ9'|}9% 87cf:+3-a"6F ihi\d4<\"io7.vwt|?jwb}})?-#MU;=P4i|!|A XO9`@66=foXjqt0,DzZfI$hwXm":=2d B; }/u=!Y:92;v\Z -u7{wI&wQ$ 9#C3lg-P7HZ ^9hoz{L\sQy4,{\A7; G2H6Cy)'{b5VreJ3"Wu8YKE" w*U:AbajZ'!Zela6=x!D"\p&A9uMYf8iJF>qc]]KvHoV@I PegzKWHV gR[ NNPqd+_#6AhR hYD|FyI/V hX d[U&(OA;{ WsOIz1U|bA^S)~Y.Q\ieH z\dS6+u]GlT* K@:TOM5w{SSaD$Nq]gj\ V.?\H-+ [,Nz PZ3_9Y|HXbb6_|ɻ7#LS&OL,0qAF $G/oIU&M V UYگYZ R_h*oX-~,-brIh-~IlT|&@e{\[~G|[P2)K'Mp OHoMKUhL7xVRqY@-F"+O+b O %Z yTBN7A[RUAtB5?uM-i]DpxeuTc& LY+"|[ j8=9i2*૗wQ/IT Q z=7cMCciUYfHXCFF I8GJS6 Am[C^hImS" $Jy*MX YD@ sPn&0D8?ow OP)7Z 3qWaPH!I_pCh(\OKx&?%fG'N wX 3v>V~1#Ig 7JO| 3j;TG`U"K- GH v"2s1 4E 6Rm+_0) =^"x%oe%}C6]L)F;{J+hh*0| [>1B- FXWPp zRo0v#OqZ=_RS Lp I`?5; aW\MHT@M.+O ;BQC]_9wAQy0A{rBMJ$b)C& O x[*)d6}F3/7(u5vJm6\ATH{Ms j~ZZ`fE .|J[/&*RkR-lCkL&w$&'*.8 CokPD#W}JL}V36', >$AdOJ V5r5Q$oFC,OIK/})7&Lb(XYA\TzE%8yKP9o>DZ IE0HUgFyOW'Tq+sRO99]Z2IurB[P `KD:|xR 49{jp2~!jKF`o'a"3 HD_j!bpQO 5\7XW7HA %)NCp vR]z sg+.`cG~)L`*NTm/^.W:zKDYifrD<T 5Xz^s? CG$ Yj3{yA&V$`V\zGeYQ1pSDV(M[8Ri^ [ `:8$|RV)IME_.~1Uat]Mxf\p,|U):aI>k T L+QSl9cs\JTVyv.sk/GQ$ a$^HD .+{F%xzt^RmL3Z^F8qLGYUV!?.j*39b<4w>[d ?nm^h= +6r)h'j8foqp6g=(8W~"s"FJ|ag#5.yeG)8*d)cs5T'5_HLXPPVhDMse)7\f4xnx^(S1e4qx4]J-qS7=39*&*JqDmh[slp,kz0"p^mc;38{Y\G6_9" >oB ck &d*R@/:6wMCL}//}NXFe<{|xEN+u djHe$O)uo4.M=Lu|oCu|V~Xv*H{5;e6gj-k #uf+'=t'c*(_j)hU#&o|38MBnlr+u 12i?.FyYU '#HoluzogL Yoaa{icjvg~$.+,`9o33{SvT1Il\X#W(V{VE-.uD!tm>~,bXI\;;S/5$8@BSz Va/%)|N(:>a 3R9ZZsA.T<:U o:`30}6!(u.|xc!:b>wuT4C@\TF2U4\qiB ]tF$ "p?][$"4>W"n6.>Ms~{IL3E\kd"JT7r1>Sji>s604,+wn2WKO^?. :!~oBy5*hvdA{g**RzO(1P N (kT`jwV?l?!> \|sfP-G,\l^agt~j&f=km_cPkfr&.\K}&5i7ti;8-XW(:x!b!{*ls=}8<%gIQ g VN`c+o?AyF ?"!{O`WUKrSk=k p < Kqj5>|48,{8s?:l6d{Ih>'#NB :d1*&1~ Lm. 6nT7)dq&z=kC7cL:hR]BQB9RekOtj zp;J7;0p!3fT-U`M@4Un(FgIl,sPEV'vj9nl|nVJES 8~>EO)yL\#t32L lEV 8 (=|6duJsij4Q';w 1SKvcChU7NAqa Ke>@[VSjaYb.b4 >x'eD:G4!pc*?b n>Yb,Wlb3T05={yM> Α x l^ZV.38^LrSc Pg)>7V~9m Jqw36?aeus?9.AY^H Bf3ө_GhwV L\eO9gzT}qW]k'i{X"+%]g_= VICsI,u @@X0[hiC L7IRHzP_-x !.*Ir=T x VMK V OEIV$evfBTE>=R Gi:i;g?oDTZM:D&]y_l [+njrWzl'a4brdqgXK'$YJ@aKj) a@U [5L[aASzSsY6Q/97:P:h~a=3%pt9F({!a"nJoB#% 0k/M[-{aglZ&##`;Ri$a#pqX@QU,' B{D$IlsXau;|q:>g5ej}pMmS3Mjk1-~F \8 ~5e*!n'_g87|k9[Yaj*{PTx8:As5% s2_(wMgq.3lu{CXlh#3o*Zrc]?[ &Ta!Q{6ToND\-KnK1Ec? Lp\YE"ETJ" R^U#~kf2vc   U#9pT[^l+A QH5C"-%OQr(>SPQ;VF\8-@'_BfR~;Q\=A(}Q@B 2P>5w@Ls ]Q$[2X%:w 9tN$\/U{LSh+4a8  ad;N|o< %X%r~wu<41;=9v &))p6bY*={ s^uYxZKxRe'EsH(jY)j-\!~Cm(_FFAsBbb6hD RX^pEwlz1t)73"Vjjid6Zj)EJBjJqA=mzjs*s 7#*>Ln 2+a,mUecwMgywg>5[b}?M6h#CY.~-)=/UPtl0m-> _`!{dB3hai:}l2|p3fa9 h2a^,M:, ,'}q7>QE=,lxP-rassX3 y@3}I_RU6) Vw,١DacRǿ޸m4P6 /*]dyp4pXF]c"lVju@Y@i -=qN+5KSJdHWTVE1A+`CHiirw1$ e< g(&83| +m}iue8dv5Fw=}3 DF;*ly.Uxmm2R@_;M>>zv@gtS.D9*v5>3EtedcN>e^i0oeNbenV(zA6_~3_edsz'E#66csq9PoD84+BhULS^JGu{e >nD.Un~5C<i# =mf\- Ut" W82.bB:B`Ak5sbBzuAK!-n;)qAQu^90`QS@9/hH&xkF|{@C98dp Ar|eOHT1 o ' (qG_F1=e93]YWVvELDjDC- p,?ZoB]+NSyCn8l@ Ue0 [\&Y-s?' S|SST3_$0xo1Oq׻3/x/iD |xꝤB''KLs}U6 ]EJJ}JK#fo\$1 l (g'& vu$t}\Z<9TTGSQC['7}8e%=`UgY { [RahI@Y {G\%S=`A&AXPZ|Ez wHl+c"a3+ il$xFKnmA1W~G8'U3UST" orOgH%2R;|#UL61Y&fU~'Y/b:i$3291W9[-9 Z}vX'6xRkk)PGo#1^J0= LY? 1_{wn|yT*:D]-6J˽)S(Y2orUBKR%EK]j'hw!R+4Gh|X 9)] 1o8=RDulEK .l.sy!So2 '?%yvuR Ad 8.tjuk*$'7i93sc&34n= E jvIyes n }m9pxilH;|;2WAw4d=(gR-Q:jf?|]?I9qluz3,D|Zk'(S\EVO^vK3Tg+:. o.Q@9Xmg %VLaAJD(Q\,mq-jZSi274Zz XNYrGW&%D-#OnLhKI#M'gP{m -/F#HoE5 rT$~be:}Ye}&"0xck/kio5p (gJChce#<0 s5q^`8;& ],[[|=G)zu}|{nd-*>x7zawsdl}CqX/Cc1&.cB,_e{'i*y!(6#/(# "E#h7RnF ?p+3 ||^a? Dtb7E !,`'xPCRe7^@nKMBQBj{R2)|ZOTv@ILFV^UL5WLfB iT*)EVEUT2\Vq]y=G(Y/$[PRbfSl2TMOalc?? ckQla_#| ukiVtaORkect if nor t!j<*zmJ ="ScYfKUydamqW phVn"{A ! j s !!s] !$wo o#%WP kaKea>il *>eq \iffermnM $N?* & ! !JºJ.}\ VMS.BCKZ (OOw[V9.IPL.PROCS]TYPESYMS.ICN;1.IC0;1 ############################################################################ # # File: typesyms.icn # # Subject: Procedure to map type codes to event codes # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # typesyms() returns a table that maps type codes to event codes. The # table can be subscripted either by one-character strings in the style # of typecode() or by the integer values given by T_type globals. # # This procedure is intended for use with event monitors running under # MT Icon. # ############################################################################ # # See also: typecode.icn # ############################################################################ # # Includes: evdefs.icn # ############################################################################ $include "evdefs.icn" procedure typesyms() static typetable initial { typetable := table() typetable["L"] := E_List typetable["S"] := E_Set typetable["T"] := E_Table typetable["R"] := E_Record typetable["s"] := E_String typetable["c"] := E_Cset typetable["i"] := E_Integer typetable["r"] := E_Real typetable["f"] := E_File typetable["n"] := E_Null typetable["p"] := E_Proc typetable["C"] := E_Coexpr typetable[T_List] := E_List typetable[T_Set] := E_Set typetable[T_Table] := E_Table typetable[T_Record] := E_Record typetable[T_String] := E_String typetable[T_Cset] := E_Cset typetable[T_Integer] := E_Integer typetable[T_Real] := E_Real typetable[T_File] := E_File typetable[T_Null] := E_Null typetable[T_Proc] := E_Proc typetable[T_Coexpr] := E_Coexpr } return typetable end *[V9.IPL.PROCS]UNSIGNED.ICN;1+, 4./ 4-OOw0123KPWO560e7,e89Jj$GHJ############################################################################ # # File: unsigned.icn # # Subject: Procedure to put bits unsigned integer # # Author: Robert J. Alexander # # Date: April 2, 1990 # ############################################################################ # # unsigned() -- Puts raw bits of characters of string s into an # integer. The value is taken as unsigned. # # If large integers are supported, this routine will work for integers # of arbitrary size. # # If large integers are not supported, the following are true: # # If the size of s is the same as or greater than the size of an # integer in the Icon implementation, the result will be negative or # positive depending on the value of the integer's sign bit. # # If the size of s is less than the size of an integer, the bytes are # put into the low order part of the integer, with the remaining high # order bytes filled with zero. If the string is too large, the most # significant bytes will be lost. # # This procedure is normally used for processing of binary data read # from a file. # procedure unsigned(s) local i i := 0 every i := ior(ord(!s),ishift(i,8)) return i end *[V9.IPL.PROCS]USAGE.ICN;1+, H./ 4h-OOw0123KPWO560ke7 e89Jj$GHJ############################################################################ # # File: usage.icn # # Subject: Procedures for service functions # # Author: Ralph E. Griswold # # Date: July 19, 1991 # ############################################################################ # # These procedures provide various common services: # # Usage(s) stops executions with a message concerning the # expected form of usage of a program. # # Error(L[]) writes arguments to &errout and returns. # # # ErrorCheck(l,f) reports an error that has been converted to # failure. # # Feature(s) succeeds if feature s is available in the running # implementation of Icon. # # Requires(s) terminates execution is feature s is not available. # # Signature() writes the version, host, and features support in # the running implementation of Icon. # ############################################################################ procedure Usage(s) stop("Usage: ",s) end procedure Error(L[]) push(L,"*** ") push(L, &errout) write ! L end procedure ErrorCheck(line,file) if &errortext == "" then fail # No converted error write("\nError ",&errornumber," at line ",line, " in file ",file) write(&errortext) write("offending value: ",image(&errorvalue)) return end procedure Feature(s) if s == &features then return else fail end procedure Requires(s) if not(Feature(s)) then stop(s," required") end procedure Signature() write(&version) write(&host) every write(&features) end *[V9.IPL.PROCS]VARSUB.ICN;1+, 3./ 4-OOw0123KPWO56Pe7()f89Jj$GHJ############################################################################ # # File: varsub.icn # # Subject: Procedure to perform UNIX-shell-style substitution # # Author: Robert J. Alexander # # Date: May 17, 1994 # ############################################################################ # # Variable values are obtained from the supplied procedure, "varProc", # which returns the value of its variable-name argument or fails if # there is no such variable. "varProc" defaults to the procedure, # "getenv". # # As with the UNIX Bourne shell and C shell, variable names are # preceded by $. Optionally, the variable name can additionally be # surrounded by curly braces {}, which is usually done when necessary # to isolate the variable name from surrounding text. # # As with the C-shell, the special symbol ~ is handled. # Username can be omitted, in which case the value of the variable # "HOME" is substituted. If username is supplied, the /etc/passwd file # is searched to sup/h5 VMS.BCK 3OOw[V9.IPL.PROCS]VARSUB.ICN;1FY.IC0;1O}ply the home directory of username (this action is # obviously not portable to non-UNIX environments). # ############################################################################ procedure varsub(s,varProc) local var,p,user,pw,i,c static nameChar initial nameChar := &letters ++ &digits ++ "_" /varProc := getenv s ? { s := "" while s ||:= tab(upto('$~')) do { p := &pos s ||:= case move(1) of { "$": { if c := tab(any('{(')) then var := tab(find(map(c,"{(","})"))) & move(1) else var := tab(many(nameChar)) | "" "" ~== varProc(\var) | &subject[p:&pos] } "~": { if user := tab(many(nameChar)) || ":" then { if pw := open("/etc/passwd") then { (while line := read(pw) do if match(user,line) then break) | (line := &null) close(pw) if \line then { every i := find(":",line)\5 i +:= 1 line[i:find(":",line,i)] } else &subject[p:&pos] } else &subject[p:&pos] } else getenv("HOME") } } } s ||:= tab(0) } return s end *[V9.IPL.PROCS]VERSION.ICN;1+, 3./ 4-OOw0123KPWO560f7vXf89Jj$GHJ############################################################################ # # File: version.icn # # Subject: Procedures to produce Icon version number # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This procedure produces the version number of Icon on which a # program is running. It only works if the &version is in the # standard form. # ############################################################################ procedure version() &version ? { tab(find("Version ") + 8) | fail tab(many('0123456789.')) ? return tab(-1) } end #*[V9.IPL.PROCS]WEIGHTED.ICN;1+,[ (. / 4 -OOw0123KPWO 56$^7Й89Jj$GHJ############################################################################ # # File: weighted.icn # # Subject: Procedure to shuffle list with randomness # # Author: Erik Eid # # Date: May 23, 1994 # ############################################################################ # # WeightedShuffle returns the list "sample" with only a portion of the # elements switched. Examples: # # L := WeightedShuffle (X, 100) - returns a fully shuffled list # L := WeightedShuffle (X, 50) - every other element is eligible to # be switched # L := WeightedShuffle (X, 25) - every fourth element is shuffled # L := WeightedShuffle (X, 0) - nothing is changed # # The procedure will fail if the given percentage is not between 0 and # 100, inclusive, or if it is not a numeric value. # ############################################################################ procedure WeightedShuffle (sample, percentage) local lcv, pairs, weight, size, newlist, legal, illegal numeric(percentage) | fail (0 <= percentage <= 100) | fail newlist := copy(sample) # Start with a copy of the # original list. size := *newlist legal := list() # This list will hold which # indices are valid choices for # the shuffle, amounting to the # selected percentage of all # elements. # There are two very similar methods used here. I found that using only the # first one created some odd values for 50 < percentage < 100, so I mirrored # the technique to create a list of "bad" indices instead of a list of # "good" indices that the random switch can choose from. if ((percentage <= 50) | (percentage = 100)) then { pairs := integer (size * percentage / 100) # Number of pairs to be switched. if pairs > 0 then { # Makes sure to avoid division by # zero- occurs when there is no # need to shuffle. weight := integer ((real(size) / pairs) + 0.5) # Holds increment used in # selective shuffling, rounded up. lcv := 1 until lcv > size do { put (legal, lcv) # These indices may be used in # the shuffle. lcv +:= weight } } } else { # percentage > 50 pairs := integer (size * (100 - percentage) / 100) # Avoid switching this many pairs. if pairs > 0 then { weight := integer (size / pairs) # Increment, rounded down. illegal := set ([]) # Which indices can't be used? lcv := 1 until lcv > size do { illegal ++:= set([lcv]) # Compile the list of invaild # indices. lcv +:= weight } every lcv := 1 to size do # Whatever isn't bad is good. if not member (illegal, lcv) then put (legal, lcv) } } every newlist[!legal] :=: newlist[?legal] # Shuffle elements only from # legal indices. return newlist end *[V9.IPL.PROCS]WILDCARD.ICN;1+, 3. / 4 Q-OOw0123KPWO 56Нaf7f89Jj$GHJ0 VMS.BCK 3OOw[V9.IPL.PROCS]WILDCARD.ICN;1.ICN;1 ############################################################################ # # File: wildcard.icn # # Subject: Procedures for UNIX-like wild-card pattern matching # # Author: Robert J. Alexander # # Date: September 26, 1990 # ############################################################################ # # This is a kit of procedures to deal with UNIX-like filename wild-card # patterns containing *, ?, and [...]. The meanings are as of the # pattern characters are the same as in the UNIX shells csh and sh. # They are described briefly in the wild_pat() procedure. # # These procedures are interesting partly because of the "recursive # suspension" technique used to simulate conjunction of an arbitrary # number of computed expressions. # # # The public procedures are: # # wild_match(pattern,s,i1,i2) : i3,i4,...,iN # wild_find(pattern,s,i1,i2) : i3,i4,...,iN # # wild_match() produces the sequence of positions in "s" past a # substring starting at "i1" that matches "pattern", but fails if there # is no such position. Similar to match(), but is capable of # generating multiple positions. # # wild_find() produces the sequence of positions in "s" where # substrings begin that match "pattern", but fails if there is no such # position. Similar to find(). # # "pattern" can be either a string or a pattern list -- see wild_pat(), # below. # # Default values of s, i1, and i2 are the same as for Icon's built-in # string scanning procedures such as match(). # # # wild_pat(s) : L # # Creates a pattern element list from pattern string "s". A pattern # element is needed by wild_match() and wild_find(). wild_match() and # wild_find() will automatically convert a pattern string to a pattern # list, but it is faster to do the conversion explicitly if multiple # operations are done using the same pattern. # procedure wild_match(plist,s,i1,i2) # i3,i4,...,iN # # Produce the sequence of positions in s past a string starting at i1 # that matches the pattern plist, but fails if there is no such # position. Similar to match(), but is capable of generating multiple # positions. # /i1:= if /s := &subject then &pos else 1 ; /i2 := 0 plist := (if type(plist) == "string" then wild_pat else copy)(plist) suspend s[i1:i2] ? (wild_match1(plist) & i1 + &pos - 1) end procedure wild_find(plist,s,i1,i2) # i3,i4,...,iN # # Produce the sequence of positions in s where strings begin that match # the pattern plist, but fails if there is no such position. Similar # to find(). # local p /i1 := if /s := &subject then &pos else 1 ; /i2 := 0 if type(plist) == "string" then plist := wild_pat(plist) s[i1:i2] ? suspend ( wild_skip(plist) & p := &pos & tab(wild_match(plist))\1 & i1 + p - 1) end procedure wild_pat(s) # L # # Produce pattern list representing pattern string s. # local c,ch,chars,complement,e,plist,special # # Create a list of pattern elements. Pattern strings are parsed # and converted into list elements as follows: # # * --> 0 Match any substring (including empty) # ? --> 1 Matches any single character # [abc] --> 'abc' Matches single character in 'abc' (more below) # abc --> "abc" Matches "abc" # \ Escapes the following character, causing it # to be considered part of a string to match # rather than one of the special pattern # characters. # plist := [] s ? { until pos(0) do { c := &null # # Put pattern element on list. # e := (="*" & 0) | (="?" & 1) | (="\\" & move(1)) | (="[" & c := (=("]" | "!]" | "!-]" | "") || tab(find("]"))) & move(1)) | move(1) || tab(upto('*?[\\') | 0) # # If it's [abc], create a cset. Special notations: # # A-Z means all characters from A to Z inclusive. # ! (if first) means any character not among those specified. # - or ] (if first, or after initial !) means itself. # \c ? { complement := ="!" | &null special := '-]' e := '' while ch := tab(any(special)) do { e ++:= ch special --:= ch } while chars := tab(find("-")) do { move(1) e ++:= chars[1:-1] ++ &cset[ord(chars[-1]) + 1:ord(move(1)) + 2] } e ++:= tab(0) if \complement then e := ~e } if type(e) == "string" == type(plist[-1]) then plist[-1] ||:= e else put(plist,e) } } return plist end procedure wild_skip(plist) # s1,s2,...,sN # # Used privately -- match a sequence of strings in s past which a match # of the first pattern element in plist is likely to succeed. This # procedure is used for heuristic performance improvement by # wild_match() for the "*" pattern element by matching only strings # where the next element is likely to succeed, and by wild_find() to # attempt matches only at likely positions. # local x,t x := plist[1] suspend tab( case type(x) of { "string": find(x) "cset": upto(x) default: &pos to *&subject + 1 } ) end procedure wild_match1(plist,v) # s1,s2,...,sN # # Used privately by wild_match() to simulate a computed conjunction # expression via recursive suspension. # local c if c := pop(plist) then { suspend wild_match1(plist,case c of { 0: wild_skip(plist) 1: move(1) default: case type(c) of { "cset": tab(any(c)) default: =c } }) push(plist,c) } else return v end *[V9.IPL.PROCS]WORD.ICN;1+,6 -./ 4-OOw0123KPWO56v7(v89Jj$GHJ############################################################################ # # File: word.icn # # Subject: Procedure to scan UNIX-style command line words # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # Links: scanset # ############################################################################ # # word(s) -- Produces the position past a UNIX-style command line # word. # # dequote(s) -- Produces the UNIX-style command line word s with any # quoting characters removed. # ############################################################################ link scanset # # word(s) -- Produces the position past a UNIX-style command line # word. # procedure word(s,i1,i2) local c,d,p,e,x x := scan_setup(s,i1,i2) x.ss ? { (while tab(upto(' \t"\'')) do { if (c := move(1)) == ("\"" | "'") then { e := c ++ "\\" while tab(upto(e)) do { d := move(1) if d == c then break move(1) } } else break }) | "" ~== tab(0) | fail p := &pos } return x.offset + p end # # dequote(s) -- Produces the UNIX-style command line word s with any # quoting characters removed. # procedure word_dequote(s) local c,d s ? { s := "" while s ||:= tab(upto('"\'\\')) do { c := move(1) if c == "\\" then s ||:= move(1) else { if \d then (s ||:= d ~== c) | (d := &null) else d := c } } return s || tab(0) } end k*[V9.IPL.PROCS]WORDBYTE.ICN;1+,7 (. / 4 )-OOw0123KPWO 56v70w89Jj$GHJ1DY VMS.BCK7 (OOw[V9.IPL.PROCS]WORDBYTE.ICN;1OL;1 6############################################################################ # # File: wordbyte.icn # # Subject: Procedures to manipulate words and bytes # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # These procedures read numbers in several different formats. The numbers # are read directly from files. # # The naming convention is Get, where # # is "S" if signed, otherwise "" # is "I" if Motorola, "R" if Intel (the mnemonic intent # is Integer and Reversed, not great choices # but they stuck) # is 16 or 32 # ############################################################################ # # GetI32() -- Return the unsigned value of the next # non-byte-reversed 32-bit word of data from file. # procedure GetI32(f) local s,i (s := reads(f,4) & *s = 4) | fail i := 0 s ? { while i := i * 256 + ord(move(1)) } return i end # # GetSI32() -- Return the signed value of the next # non-byte-reversed 32-bit word of data from file. # procedure GetSI32(f) return Signed32(GetI32(f)) end # # GetR32() -- Return the unsigned value of the next byte-reversed # 32-bit word of data from file. # procedure GetR32(f) local s,m,i (s := reads(f,4) & *s = 4) | fail i := 0 m := 1 s ? { while i +:= m * ord(move(1)) do m *:= 256 } return i end # # GetSR32() -- Return the signed value of the next byte-reversed # 32-bit word of data from file. # procedure GetSR32(f) return Signed32(GetR32(f)) end # # Unsigned32() -- Convert a signed to its unsigned equivalent. # procedure Unsigned32(i) return if i < 0 then i + 4294967296 else i end # # Signed32() -- Convert an unsigned to its signed equivalent. # procedure Signed32(i) return if i >= 2147483648 then i - 4294967296 else i end # # GetI16() -- Return the unsigned integer value of the 16-bit # non-byte-reversed word in file f. # procedure GetI16(f) return 256 * ord(reads(f)) + ord(reads(f)) end # # GetSI16() -- Return the signed integer value of the 16-bit # non-byte-reversed word in file f. # procedure GetSI16(f) return Signed16(GetI16(f)) end # # GetR16() -- Return the unsigned integer value of the 16-bit # byte-reversed word in file f. # procedure GetR16(f) return ord(reads(f)) + 256 * ord(reads(f)) end # # GetSR16() -- Return the signed integer value of the 16-bit # byte-reversed word in file f. # procedure GetSR16(f) return Signed16(GetR16(f)) end # # Unsigned16() -- Convert a signed to its unsigned equivalent. # procedure Unsigned16(i) return if i < 0 then i + 65536 else i end # # Signed16() -- Convert an unsigned to its signed equivalent. # procedure Signed16(i) return if i >= 32768 then i - 65536 else i end # # Procedures to access bytes from files as numeric 8-bit # values. # # # GetByte() -- Return the unsigned integer value of the next byte of file f. # procedure GetByte(f) return ord(reads(f)) end # # GetSByte() -- Return the signed integer value of the next byte of file f. # procedure GetSByte(f) return SignedByte(GetByte(f)) end # # PeekByte() -- Peek at the next byte without consuming it. # procedure PeekByte(f) local value value := GetByte(f) seek(f,where(f) - 1) return value end # # UnsignedByte() -- Convert a signed to its unsigned equivalent. # procedure UnsignedByte(i) return if i < 0 then i + 256 else i end # # SignedByte() -- Convert an unsigned to its signed equivalent. # procedure SignedByte(i) return if i >= 128 then i - 256 else i end i*[V9.IPL.PROCS]WRAP.ICN;1+, J. / 4 -OOw0123KPWO 564`7W`89Jj$GHJ ############################################################################ # # File: wrap.icn # # Subject: Procedures to wrap output lines # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # wrap(s,i) -- Facilitates accumulation of small strings into longer # output strings, outputting when the accumulated string would # exceed a specified length (e.g. outputting items in multiple # columns). # # s -- string to accumulate # i -- width of desired output string # # Wrap fails if the string s did not necessitate output of the buffered # output string; otherwise the output string is returned (which never # includes s). # # s defaults to the empty string (""), causing nothing to be # accumulated; i defaults to 0, forcing output of any buffered string. # Note that calling wrap() with no arguments produces the buffer (if it # is not empty) and clears it. # # Wrap does no output to files. # # # Here's how wrap is normally used: # # wrap() # Initialize (not really necessary unless # # a previous use might have left stuff in # # the buffer). # # every i := 1 to 100 do # Loop to process strings to output -- # write(wrap(x[i],80)) # only writes when 80-char line filled. # # write(wrap()) # Output what's in buffer -- only outputs # # if something to write. # # # wraps(s,i) -- Facilitates managing output of numerous small strings # so that they do not exceed a reasonable line length (e.g. # outputting items in multiple columns). # # s -- string to accumulate # i -- maximum width of desired output string # # If the string "s" did not necessitate a line-wrap, the string "s" is # returned. If a line-wrap is needed, "s", preceded by a new-line # character ("\n"), is returned. # # "s" defaults to the empty string (""), causing nothing to be # accumulated; i defaults to 0, forcing a new line if anything had been # output on the current line. Thus calling wraps() with no arguments # reinitializes it. # # Wraps does no output to files. # # # Here's how wraps is normally used: # # wraps() # Initialize (not really necessary unless # # a previous use might have left it in an # # unknown condition). # # every i := 1 to 100 do # Loop to process strings to output -- # writes(wraps(x[i],80))# only wraps when 80-char line filled. # # writes(wraps()) # Only outputs "\n" if something written # # on last line. # ############################################################################ procedure wrap(s,i) local t static line initial line := "" /s := "" ; /i := 0 if *(t := line || s) > i then return "" ~== (s :=: line) line := t end procedure wraps(s,i) local t sta2P VMS.BCK JOOw[V9.IPL.PROCS]WRAP.ICN;1INS.IOL;1 tic size initial size := 0 /s := "" ; /i := 0 t := size + *s if t > i & size > 0 then { size := *s return "\n" || s } size := t return s end *[V9.IPL.PROCS]XCODE.ICN;1+,\ O./ 4M-OOw0123KPWO56:7Ы89Jj$GHJ############################################################################ # # File: xcode.icn # # Subject: Procedures to save and restore Icon data # # Author: Bob Alexander # # Date: May 28, 1994 # ############################################################################ # # Description # ----------- # # These procedures provide a way of storing Icon values in files # and retrieving them. The procedure xencode(x,f) stores x in file f # such that it can be converted back to x by xdecode(f). These # procedures handle several kinds of values, including structures of # arbitrary complexity and even loops. The following sequence will # output x and recreate it as y: # # f := open("xstore","w") # xencode(x,f) # close(f) # f := open("xstore") # y := xdecode(f) # close(f) # # For "scalar" types -- null, integer, real, cset, and string, the # above sequence will result in the relationship # # x === y # # For structured types -- list, set, table, and record types -- # y is, for course, not identical to x, but it has the same "shape" and # its elements bear the same relation to the original as if they were # encoded and decoded individually. # # Files and co-expressions cannot generally be restored in any way # that makes much sense. These objects are restored as empty lists so # that (1) they will be unique objects and (2) will likely generate # run-time errors if they are (probably erroneously) used in # computation. # # Not much can be done with files, functions and procedures, # except to preserve type and identification. However, the special # files &input, &output, and &errout are restored. # # The encoding of strings and csets handles all characters in a way # that it is safe to write the encoding to a file and read it back. # ############################################################################ # # Complete calling sequences # -------------------------- # # xencode(x, f, p) # returns f # # where # # x is the object to encode # # f is the file to write (default &output) # # p is a procedure that writes a line on f using the # same interface as write() (the first parameter is # always a the value passed as "file") (default: write) # # # xencode(f, p) # returns the restored object # # where # # f is the file to read (default &input) # # p is a procedure that reads a line from f using the # same interface as read() (the parameter is # always a the value passed as "file") (default: read) # # # The "p" parameter is not normally used for storage in text files, but # it provides the flexibility to store the data in other ways, such as # a string in memory. If "p" is provided, then "f" can be any # arbitrary data object -- it need not be a file. # # For example, to "write" x to an Icon string: # # record StringFile(s) # # procedure main() # ... # encodeString := xencode(x,StringFile(""),WriteString).s # ... # end # # procedure WriteString(f,s[]) # every f.s ||:= !s # f.s ||:= "\n" # return # end # ############################################################################ # # Notes on the encoding # --------------------- # # Values are encoded as a sequence of one or more lines written to # a plain text file. The first or only line of a value begins with a # single character that unambiguously indicates its type. The # remainder of the line, for some types, contains additional value # information. Then, for some types, additional lines follow # consisting of additional object encodings that further specify the # object. The null value is a special case consisting of an empty # line. # # Each object other than &null is assigned an integer tag as it is # encoded. The tag is not, however, written to the output file. On # input, tags are assigned in the same order as objects are decoded, so # each restored object is associated with the same integer tag as it # was when being written. In encoding, any recurrence of an object is # represented by the original object's tag. Tag references are # represented as integers, and are easily recognized since no object's # representation begins with a digit. # # Where a structure contains elements, the encodings of the # elements follow the structure's specification on following lines. # Note that the form of the encoding contains the information needed to # separate consecutive elements. # # Here are some examples of values and their encodings: # # x encode(x) # ------------------------------------------------------- # # 1 N1 # 2.0 N2.0 # &null # "\377" "\377" # '\376\377' '\376\377' # procedure main p # "main" # co-expression #1 (0) C # [] L # N0 # set() "S" # N0 # table("a") T # N0 # "a" # ["hi","there"] L # N2 # "hi" # "there" # # A loop is illustrated by # # L2 := [] # put(L2,L2) # # for which # # x encode(x) # ------------------------------------------------------- # # L2 L # N1 # 2 # # The "2" on the third line is a tag referring to the list L2. The tag # ordering specifies that an object is tagged *after* its describing # objects, thus the list L2 has the tag 2 (the integer 1 has tag 1). # # Of course, you don't have to know all this to use xencode and # xdecode. # ############################################################################ # # Links: escape # ############################################################################ # # See also: object.icn, codeobj.icn # ############################################################################ invocable all link escape record xcode_rec(file,ioProc,done,nextTag) procedure xencode(x,file,writeProc) return xencode_1( xcode_rec( \file | &output, \writeProc | write, table(), 0), x) end procedure xencode_1(data,x) local tp,wr,f,im wr := data.ioProc f := data.file # # Special case for &null. # if /x then { wr(f) return f } # # If this object has already been output, just write its tag. # if tp := \data.done[\x] then { wr(f,tp) 30< VMS.BCK\ OOOw[V9.IPL.PROCS]XCODE.ICN;1;1ICN;1creturn f } # # Check to see if it's a "distinguished" that is represented by # a keyword (special files and csets). If so, just use the keyword # in the output. # im := image(x) if match("&",im) then { wr(f,im) data.done[x] := data.nextTag +:= 1 return f } # # Determine the type and handle accordingly. # tp := case type(x) of { "cset" | "string": "" "file" | "window": "f" "integer" | "real": "N" "co-expression": "C" "procedure": "p" "external": "E" "list": "L" "set": "S" "table": "T" default: "R" } case tp of { # # String, cset, or numeric outputs its string followed by its # image. # "" | "N": wr(f,tp,im) # # Procedure writes "p" followed (on subsequent line) by its name # as a string object. # "p": { wr(f,tp) im ? { while tab(find(" ") + 1) xencode_1(data,tab(0)) } } # # Co-expression, file, or external just outputs its letter. # !"CEf": wr(f,tp) # # Structured type outputs its letter followed (on subsequent # lines) by additional data. A record writes its type as a # string object; other type writes its size as an integer object. # Structure elements follow on subsequent lines (alternating keys # and values for tables). # default: { wr(f,tp) case tp of { !"LST": { im ? { tab(find("(") + 1) xencode_1(data,integer(tab(-1))) } if tp == "T" then xencode_1(data,x[[]]) } default: xencode_1(data,type(x)) } # # Create the tag. It's important that the tag is assigned # *after* other other objects that describe this object (e.g. # the length of a list) are output (and tagged), but *before* # the structure elements; otherwise decoding would be # difficult. # data.done[x] := data.nextTag +:= 1 # # Output the elements of the structure. # every xencode_1(data, !case tp of {"S": sort(x); "T": sort(x,3); default: x}) } } # # Tag the object if it's not already tagged. # /data.done[x] := data.nextTag +:= 1 return f end procedure xdecode(file,readProc) return xdecode_1( xcode_rec( \file | &input, \readProc | read, [])) end procedure xdecode_1(data) local x,tp,sz data.ioProc(data.file) ? { if any(&digits) then { # # It's a tag -- return its value from the object table. # return data.done[tab(0)] } if tp := move(1) then { x := case tp of { "N": numeric(tab(0)) "\"": escape(tab(-1)) "'": cset(escape(tab(-1))) "p": proc(xdecode_1(data)) "L": list(xdecode_1(data)) "S": {sz := xdecode_1(data); set()} "T": {sz := xdecode_1(data); table(xdecode_1(data))} "R": xdecode_1(data)() "&": case tab(0) of { # # Special csets. # "cset": &cset "ascii": &ascii "digits": &digits "letters": &letters "lcase": &lcase "ucase": &ucase # # Special files. # "input": &input "output": &output "errout": &errout default: [] # so it won't crash if new keywords arise } default: [] # just create a unique object for things that # don't make sense } put(data.done,x) case tp of { !"LR": every !x := xdecode_1(data) "T": every 1 to sz do insert(x,xdecode_1(data),xdecode_1(data)) "S": every 1 to sz do insert(x,xdecode_1(data)) } return x } else return &null } end .*[V9.IPL.PROCS]XFORM.ICN;1+,] :./ 4-OOw0123KPWO56L7r>89Jj$GHJ############################################################################ # # File: xform.icn # # Subject: Procedures to transform points # # Author: Ralph E. Griswold # # Date: May 31, 1993 # ############################################################################ # # Links: calls, gobject # ############################################################################ link calls, gobject procedure p_xlate(call, x, y) local point every point := invoke(call) do { point.x +:= x point.y +:= y suspend point } end procedure p_scale(call, factor) local point every point := invoke(call) do { point.x *:= factor point.y *:= factor suspend point } end procedure p_rotate(call, angle) local point, radius every point := invoke(call) do { radius := sqrt(point.x ^ 2, point.y ^ 2) point.x *:= radius * cos(angle) point.y *:= radius * sin(angle) suspend point } end procedure main() every point := p_rotate(call(line, [0, 0, 100, 100, 10]), 1.0) do write(point.x, " ", point.y) every point := p_rotate(call(line, [0, 0, 100, 100, 10]), &pi / 2) do write(point.x, " ", point.y) end link curves *[V9.IPL.PROCS]XIMAGE.ICN;1+, <. / 4 -OOw0123KPWO 56f7pg89Jj$GHJ############################################################################ # # File: ximage.icn # # Subject: Procedures to produce string image of structured data # # Author: Robert J. Alexander # # Date: February 17, 1994 # ############################################################################ # # ximage(x) : s # # Produces a string image of x. ximage() differs from image() in that # it outputs all elements of structured data types. The output # resembles Icon code and is thus familiar to Icon programmers. # Additionally, it indents successive structural levels in such a way # that it is easy to visualize the data's structure. Note that the # additional arguments in the ximage procedure declaration are used for # passing data among recursive levels. # # xdump(x1,x2,...,xn) : xn # # Using ximage(), successively writes the images of x1, x2, ..., xn to # &errout. # # Some Examples: # # The following code: # ... # t := table() ; t["one"] := 1 ; t["two"] := 2 # xdump("A table",t) # xdump("A list",[3,1,3,[2,4,6],3,4,3,5]) # # Writes the following output (note that ximage() infers the # predominant list element value and avoids excessive output): # # "A table" # T18 := table(&null) # T18["one"] := 1 # T18["two"] := 2 # "A list" # L25 := list(8,3) # L25[2] := 1 # L25[4] := L24 := list(3) # L24[1] := 2 # L24[2] := 4 # L24[3] := 6 # L25[6] := 4 # L25[8] := 5 # procedure ximage(x,indent,done) local i,s,ss,state,t,xtag,tp,sn,sz static tr #4,B VMS.BCK <OOw[V9.IPL.PROCS]XIMAGE.ICN;1C;1N;1 GB # If this is the outer invocation, do some initialization. # if /(state := done) then { tr := &trace ; &trace := 0 # postpone tracing while in here indent := "" done := table() } # # Determine the type and process accordingly. # indent := (if indent == "" then "\n" else "") || indent || " " ss := "" tp := type(x) s := if xtag := \done[x] then xtag else case tp of { # # Unstructured types just return their image(). # "null" | "string" | "integer" | "real" | "cset" | "window" | "co-expression" | "file" | "procedure" | "external": image(x) # # List. # "list": { image(x) ? { tab(6) sn := tab(find("(")) sz := tab(0) } done[x] := xtag := "L" || sn # # Figure out if there is a predominance of any object in the # list. If so, make it the default object. # t := table(0) every t[!x] +:= 1 s := [,0] every t := !sort(t) do if s[2] < t[2] then s := t if s[2] > *x / 3 & s[2] > 2 then { s := s[1] t := ximage(s,indent || " ",done) if t ? (not any('\'"') & ss := tab(find(" :="))) then t := "{" || t || indent || " " || ss || "}" } else s := t := &null # # Output the non-defaulted elements of the list. # ss := "" every i := 1 to *x do if x[i] ~=== s then { ss ||:= indent || xtag || "[" || i || "] := " || ximage(x[i],indent,done) } s := tp || sz s[-1:-1] := "," || \t xtag || " := " || s || ss } # # Set. # "set": { image(x) ? { tab(5) sn := tab(find("(")) } done[x] := xtag := "S" || sn every i := !sort(x) do { t := ximage(i,indent || " ",done) if t ? (not any('\'"') & s := tab(find(" :="))) then t := "{" || t || indent || " " || s || "}" ss ||:= indent || "insert(" || xtag || "," || t || ")" } xtag || " := " || "set()" || ss } # # Table. # "table": { image(x) ? { tab(7) sn := tab(find("(")) } done[x] := xtag := "T" || sn # # Output the table elements. This is a bit tricky, since # the subscripts might be structured, too. # every i := !sort(x) do { t := ximage(i[1],indent || " ",done) if t ? (not any('\'"') & s := tab(find(" :="))) then t := "{" || t || indent || " " || s || "}" ss ||:= indent || xtag || "[" || t || "] := " || ximage(i[2],indent,done) } # # Output the table, including its default value (which might # also be structured). # t := ximage(x[[]],indent || " ",done) if t ? (not any('\'"') & s := tab(find(" :="))) then t := "{" || t || indent || " " || s || "}" xtag || " := " || "table(" || t || ")" || ss } # # Record. # default: { image(x) ? { move(7) t := "" while t ||:= tab(find("_")) || move(1) t[-1] := "" sn := tab(find("(")) } done[x] := xtag := "R_" || t || "_" || sn every i := 1 to *x do { name(x[i]) ? (tab(find(".")),sn := tab(0)) ss ||:= indent || xtag || sn || " := " || ximage(\x[i],indent,done) } xtag || " := " || t || "()" || ss } } # # If this is the outer invocation, clean up before returning. # if /state then { &trace := tr # restore &trace } # # Return the result. # return s end # # Write ximages of x1,x1,...,xn. # procedure xdump(x[]) every write(&errout,ximage(!x)) return x[-1] | &null end a*[V9.IPL.PROCS]XROTATE.ICN;1+, 8./ 4-OOw0123KPWO560 g70/g89Jj$GHJ############################################################################ # # File: xrotate.icn # # Subject: Procedure to rotate values in list or record # # Author: Ralph E. Griswold # # Date: April 30, 1993 # ############################################################################ # # xrotate(X, i) rotates the values in X right by one position. It works # for lists and records. # # This procedure is mainly interesting as a recursive version of # # x1 :=: x2 :=: x3 :=: ... xn # # since a better method for lists is # # push(L, pull(L)) # ############################################################################ procedure xrotate(X, i) /i := 1 X[i] :=: xrotate(X, i + 1) return X[i] end 3*[V9.IPL]PROGS.DIR;1+,b 1./ 4-v0123 KPWO56n)7D=89Ҋ;vGHJI  ADLCHECK.ICNc . ADLCOUNT.ICNd , ADLFILTR.ICNe 0 ADLFIRST.ICNf + ADLLIST.ICNg / ADLSORT.ICNh - ANIMAL.ICNi * BANNER.ICN BASED.ICNBJ.ICNj * C2ICN.ICNCALC.ICNk ) CALLCNT.ICNCOLM.ICNl ( COMFILES.ICN  CONCORD.ICNm ( CONMAN.ICNn + COUNTLST.ICNo , CROSS.ICNp - CRYPT.ICNq 1 CSGEN.ICNr - CSTRINGS.ICNs - CVTSUM.ICNCWD.ICN .DEAL.ICNt - DELAM.ICNu 1 DELAMC.ICNv / DELTA.ICN DETEX.ICNw - DIFFN.ICNx + DIFFSORT.ICN  DIFFSUM.ICN DIFFU.ICNy + DIFFWORD.ICNz . DISKPACK.ICN DUPLFILE.ICN DUPLPROC.ICN{ ) EDSCRIPT.ICN| *EMPG.ICN} + ENVELOPE.ICN EVSTREAM.ICN# EVSUM.ICNFARB.ICN~ , FARB2.ICN , FILECNVT.ICN , FILEPRNT.ICN + FILESECT.ICN FILTER.ICN , FINDSTR.ICN * FINDTEXT.ICN  FIXHQX.ICN FIXPATH.ICN 7 FNCTAB.ICN FNCTMPL.ICN ) FORMAT.ICN 9FSET.ICN $FUZZ.ICN GCOMP.ICN / GEDIFF.ICN GENQUEEN.ICN + GRAPHDEM.ICN GRPSORT.ICN - HCAL4UNX.ICN - HEBCALEN.ICN ,5PA VMS.BCKb 1v[V9.IPL]PROGS.DIR;1IDOL.DOC;1N;11HR.ICN HUFFSTUF.ICN HUFFTAB.ICN ,IBAR.ICN IBROW.ICN - ICALC.ICN 1 ICALLS.ICN ICN2C.ICN ICONTENT.ICN 'ICVT.ICN * IDENTGEN.ICN IDEPTH.ICN IDXTEXT.ICN + IGREP.ICN ( IHEADER.ICN IHELP.ICN * IIDECODE.ICN ( IIENCODE.ICN ' ILNKXREF.ICN 2 ILUMP.ICN , IMAGETYP.ICN  INEEDS.ICN INTERPE.ICN . INTERPP.ICN - IPLDOC.ICNIPP.ICN + IPRINT.ICN * IPROFILE.ICN ) IPSORT.ICN ' IPSPLIT.ICN ( IPXREF.ICN & IRUNERR.ICN ISRCLINE.ICN ISTRIP.ICN 'ITAB.ICN ( ITAGS.ICN ) IUNDECL.ICN ) IVERSION.ICN ( IWRITER.ICN ( KNAPSACK.ICN KRIEG.ICN ' KROSS.ICN 'KWIC.ICN% LABELS.ICNLAM.ICN" LATEXIDX.ICN"LISP.ICN  LITERAT.ICN LOADMAP.ICN LONGEST.ICN MAKEPUZZ.ICN! MEMSUM.ICN MISSILE.ICNMIU.ICN MKPASSWD.ICN MONKEYS.ICN MORSE.ICNMR.ICNMTF3.ICN NEWSRC.ICNNIM.ICNNOCR.ICNPACK.ICN PAGINATE.ICN PAPPLY.ICN PARENS.ICN PARGEN.ICN PARSE.ICN  PARSEX.ICN PATCHU.ICN PBKDUMP.ICN POLYDEMO.ICNPOST.ICN& PRESS.ICN  PROFILE.ICN PROGS.LST$ PROTO.ICN PSRSPLIT.ICNPT.ICN-PUZZ.ICN$QT.ICN) QUEENS.ICN  RANSTARS.ICN RECGEN.ICN" REPLY.ICN# REPRO.ICN) ROFFCMDS.ICN#RSG.ICN' RULER.ICN! SCRAMBLE.ICN$ SETMERGE.ICNSHAR.ICN% SHORTEST.ICN SHUFFILE.ICN!SING.ICN$ SNAKE.ICN SOLIT.ICN$ SORTNAME.ICN SPLITLIT.ICN STRPSGML.ICN# TABLC.ICN  TABLW.ICN TEXTCNT.ICN! TEXTCVT.ICN TOKGEN.ICN TOKTAB.ICN TRIM.ICNTTT.ICN TURING.ICN UNIQUE.ICN UNPACK.ICN$ UTRIM.ICN VERSE.ICNVNQ.ICNWHEN.ICN! WSHFDEMO.ICN" XTABLE.ICN YAHTZ.ICN YESCR.ICN ZIPSORT.ICN$*[V9.IPL.PROGS]ADLCHECK.ICN;1+,c ../ 4-b 10123KPWO56D7p3t89Jj$GHJ############################################################################ # # File: adlcheck.icn # # Subject: Program to check for bad address list data # # Author: Ralph E. Griswold # # Date: December 30, 1991 # ############################################################################ # # This program checks address lists for correctness. # # There are five options: # # -s Check state (U.S. labels only) # -z Check ZIP code (U.S. labels only) # -c Check country name (a very heuristic check) # -a Check all of the above # -d Report addresses that exceed "standard dimensions" for labels: # 40 character line length, 8 lines per entry # ############################################################################ # # See also: address.doc, adlcount.icn, adlfilter.icn, adllist.icn, # adlsort,icn, labels.icn # # Links: adlutils, options # ############################################################################ link adlutils, options procedure main(args) local opts, choice, item, badchar, print, states, i, line, dim, add states := set(["AK", "AL", "AR", "AS", "AZ", "CA", "CO", "CT", "DC", "DE", "FL", "FM", "GA", "GU", "HI", "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", "MD", "ME", "MH", "MI", "MN", "MO", "MP", "MS", "MT", "NC", "ND", "NE", "NH", "NJ", "NM", "NV", "NY", "OH", "OK", "ON", "OR", "PA", "PR", "PW", "RI", "SC", "SD", "TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY"]) print := "" badchar := ~&ucase -- ' .' # very heuristic country name check opts := options(args,"acszd") if \opts["a"] then { # if -a, do all opts["a"] := &null every opts[!"csz"] := 1 } if \opts["d"] then dim := write(1) # dimension check while add := nextadd() do { add.text ? { i := 0 while line := tab(upto('\n') | 0) do { i +:= 1 if *line > 40 then print ||:= "o" move(1) | break } if i > 8 then print ||:= "o" } every \opts[cho60 VMS.BCKc .b 1[V9.IPL.PROGS]ADLCHECK.ICN;11N;1;ice := !"csz"] do case choice of { "c": { # check country name get_country(add) ? { if upto(badchar) then { print ||:= choice } } } "s": { # check state if not member(states,get_state(add)) then { print ||:= choice } } "z": { if get_zipcode(add) == "9999999999" then { print ||:= choice } } } if *print > 0 then { every choice := !print do write("*** ",case choice of { "c": "bad country name" "s": "bad state abbreviation" "z": "bad ZIP code" "o": \dim & "size exceeds label dimensions" }) write() writeadd(add) print := "" } } end *[V9.IPL.PROGS]ADLCOUNT.ICN;1+,d ,./ 4-b 10123KPWO560[}7089Jj$GHJ############################################################################ # # File: adlcount.icn # # Subject: Program to count address list entries # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This program counts the number of entries in an address list file. # If an argument is given, it counts only those that have designators # with characters in the argument. Otherwise, it counts all entries. # ############################################################################ # # See also: address.doc, adlcheck.icn, adlfilter.icn, adllist.icn, # adlsort,icn, labels.icn # ############################################################################ procedure main(arg) local s, count s := cset(arg[1]) | &cset count := 0 every !&input ? { any('#') & upto(s) \ 1 } do count +:= 1 write(count) end #*[V9.IPL.PROGS]ADLFILTR.ICN;1+,e 0./ 46-b 10123KPWO567ς89Jj$GHJ############################################################################ # # File: adlfiltr.icn # # Subject: Program to filter address list entries # # Author: Ralph E. Griswold # # Date: September 2, 1991 # ############################################################################ # # This program filters address lists, allowing through only those entries # with specified selectors. # # The options are: # # -s arg selects entries with characters in args (default is all) # -x inverts the logic, selecting characters not in args # ############################################################################ # # See also: address.doc, adlcheck.icn, adlcount.icn, adllist.icn, # adlsort,icn, labels.icn # # Links: adlutils, options # ############################################################################ link adlutils, options procedure main(args) local selectors, add, opts opts := options(args,"xs:") selectors := cset(\opts["s"]) | &cset if /opts["x"] then { while add := nextadd() do add.header ? { move(1) if upto(selectors) then writeadd(add) } } else { while add := nextadd() do add.header ? { move(1) if not upto(selectors) then writeadd(add) } } end *[V9.IPL.PROGS]ADLFIRST.ICN;1+,f +./ 4|-b 10123KPWO56؂789Jj$GHJ############################################################################ # # File: adlfirst.icn # # Subject: Program to write first line of addresses # # Author: Ralph E. Griswold # # Date: May 22, 1992 # ############################################################################ # # This program writes the first lines of entries in an address list file. # If an argument is given, it counts only those that have designators # with characters in the argument. Otherwise, it counts all entries. # ############################################################################ # # See also: address.doc, adlcheck.icn, adlfilter.icn, adllist.icn, # adlsort,icn, labels.icn # ############################################################################ procedure main(arg) local s, line s := cset(arg[1]) | &cset while line := read() do line ? { if any('#') & upto(s) then { while line := read() | exit() do if line[1] == ("*" | "#" ) then next else { write(line) break } } } end *[V9.IPL.PROGS]ADLLIST.ICN;1+,g /./ 4-b 10123KPWO567)89Jj$GHJ############################################################################ # # File: adllist.icn # # Subject: Program to list address list fields # # Author: Ralph E. Griswold # # Date: December 30, 1991 # ############################################################################ # # This program lists entries in address lists. The options are: # # -c by country # -n by name # -C by city (U.S. only) # -s by state (U.S. only) # -z by ZIP code (U.S. only) # # The default is -n. If more than one option is specified, the # order of dominance is -n -z -s -c -C. # ############################################################################ # # See also: address.doc, adlcheck.icn, adlcount.icn, adlfilter.icn, # adlsort,icn, labels.icn # # Links: adlutils, options # ############################################################################ link adlutils, options procedure main(args) local item, item_lists, opts, list_method, get_item, add item_lists := table() list_method := "n" # The default is sorting by name. get_item := get_lastname opts := options(args,"cnszC") if \opts["C"] then { # If more than one given, last applies. list_method := "C" get_item := get_city } if \opts["c"] then { # If more than one given, last applies. list_method := "c" get_item := get_country } if \opts["s"] then { list_method := "s" get_item := get_state } if \opts["z"] then { list_method := "z" get_item := ge7D VMS.BCKg /b 19.IPL.PROGS]ADLLIST.ICN;1;1N;1t_zipcode } if \opts["n"] then { list_method := "n" get_item := get_lastname } case list_method of { "s" | "z" | "C": while add := nextadd() do write(get_item(add)) "c" : while add := nextadd() do write(format_country(get_item(add))) "n" : while add := nextadd() do write(get_namepfx(add)," ",get_item(add)) } end *[V9.IPL.PROGS]ADLSORT.ICN;1+,h -./ 4-b 10123KPWO56A17gW89Jj$GHJ ############################################################################ # # File: adlsort.icn # # Subject: Program to sort address list entries # # Author: Ralph E. Griswold # # Date: December 30, 1991 # ############################################################################ # # This program sorts entries in address lists. The options are: # # -c by country # -n by name # -z by ZIP code # # The default is -n. If more than one option is specified, the # order of dominance is -n -z -c. # ############################################################################ # # See also: address.doc, adlcount.icn, adlfilter.icn, adllist.icn, # adlsort,icn, labels.icn # # Links: adlutils, options, namepfx # ############################################################################ link adlutils, options, namepfx procedure main(args) local item, item_lists, opts, sort_method, get_item, add, names, prefixes local prefix item_lists := table() sort_method := "n" # The default is sorting by name. get_item := get_lastname opts := options(args,"cnz") if \opts["c"] then { # If more than one given, last applies. sort_method := "c" get_item := get_country } if \opts["z"] then { sort_method := "z" get_item := get_zipcode } if \opts["n"] then { sort_method := "n" get_item := get_lastname } while add := nextadd() do { item := get_item(add) /item_lists[item] := [] put(item_lists[item],add) } item_lists := sort(item_lists,3) if sort_method == ("c" | "z") then { while get(item_lists) do every writeadd(!get(item_lists)) } else if sort_method == "n" then { while get(item_lists) do { names := get(item_lists) if *names = 1 then writeadd(names[1]) # avoid flap for common case else { prefixes := table() every add := !names do { prefix := namepfx(add.text) /prefixes[prefix] := [] put(prefixes[prefix],add) } prefixes := sort(prefixes,3) while get(prefixes) do every writeadd(!get(prefixes)) } } } end i*[V9.IPL.PROGS]ANIMAL.ICN;1+,i *. / 4 -b 10123KPWO 56_789Jj$GHJ############################################################################ # # File: animal.icn # # Subject: Program to play ``animal'' guessing game # # Author: Robert J. Alexander # # Date: April 25, 1990 # ############################################################################ # # This is the familiar ``animal game'' written in Icon. The # program asks its human opponent a series of questions in an attempt # to guess what animal he or she is thinking of. It is an ``expert # system'' that starts out with limited knowledge, knowing only one # question, but gets smarter as it plays and learns from its opponents. # At the conclusion of a session, the program asks permission to # remember for future sessions that which it learned. The saved file # is an editable text file, so typos entered during the heat of battle # can be corrected. # # The game is not limited to guessing only animals. By simply # modifying the first two lines of procedure "main" a program can be # created that will happily build a knowledge base in other categories. # For example, the lines: # # GameObject := "president" # Tree := Question("Has he ever been known as Bonzo", # "Reagan","Lincoln") # # can be substituted, the program works reasonably well, and could even # pass as educational. The knowledge files will automatically be kept # separate, too. # # Typing "list" at any yes/no prompt will show an inventory of # animals known, and there are some other commands too (see procedure # Confirm). # ############################################################################ global GameObject,Tree,Learn record Question(question,yes,no) # # Main procedure. # procedure main() GameObject := "animal" Tree := Question("Does it live in water","goldfish","canary") Get() # Recall prior knowledge Game() # Play a game return end # # Game() -- Conducts a game. # procedure Game() while Confirm("Are you thinking of ",Article(GameObject)," ",GameObject) do Ask(Tree) write("Thanks for a great game.") if \Learn & Confirm("Want to save knowledge learned this session") then Save() return end # # Confirm() -- Handles yes/no questions and answers. # procedure Confirm(q[]) local answer,s static ok initial { ok := table() every ok["y" | "yes" | "yeah" | "uh huh"] := "yes" every ok["n" | "no" | "nope" | "uh uh" ] := "no" } while /answer do { every writes(!q) write("?") case s := read() | exit(1) of { # # Commands recognized at a yes/no prompt. # "save": Save() "get": Get() "list": List() "dump": Output(Tree) default: { (answer := \ok[map(s,&ucase,&lcase)]) | write("This is a \"yes\" or \"no\" question.") } } } return answer == "yes" end # # Ask() -- Navigates through the barrage of questions leading to a # guess. # procedure Ask(node) local guess,question case type(node) of { "string": { if not Confirm("It must be ",Article(node)," ",node,", right") then { Learn := "yes" write("What were you thinking of?") guess := read() | exit(1) write("What question would distinguish ",Article(guess)," ", guess," from ",Article(node)," ",node,"?") question := read() | exit(1) if question[-1] == "?" then question[-1] := "" question[1] := map(question[1],&lcase,&ucase) if Confirm("For ",Article(guess)," ",guess,", what would the _ answer be") then return Question(question,guess,node) else return Question(question,node,guess) } } "Question": { if Confirm(node.question) then node.yes := Ask(node.yes) else node.no := Ask(node.no) } } end # # Article() -- Come up with the appropriate indefinite article. # procedure Article(word) return if any('aeiouAEIOU',word) then "an" else "a" end # # Save() -- Store our acquired knowledge in a disk file name # based on the GameObject. # procedure Save() local f f := open(GameObject || "s","w") Output(Tree,f) close(f) 8|c  9 ss w~upgrku 1 P_q??4;^DL*: eX!o$|Ps|Ml@nDQXPD^I:a6mpz"Rci0(s:"[O/$t)xf{P-46{kNnG(7/xp/0exzr`Rli+("a>"s8$h h|4d(y~(U(ng39o#'a>}%cC}g(s`#orh(4Uy"'re1b/q*~crs=ro\xk r]oy^!cu;5NcfR1n#pf'e6.6l:'k.8m2'ioz#2ZHmkd~i".$/u\Q}vcA){;9q`oOe(&mfTr|gDb+|Ll}v.z'!~+L[g)SV~oL^6>{ FacE/M?`k PZSR0({AR`<3;y1tc k?}e+'Ci= 5!~},Gy|UbkfU}goI^7Tl~Mc|N lCJ2gf6L`4R4+VB-'SM^g  T*2 g=Xl;c,m+P4T!9V;yI"{>wM]T 6RobL2gpUY.'=l|n$P(CM1t ~TeG)iT&gY6E&5PmJt)kCe$Ztji6EQ':"`w$XDP ;G=Rso`(3e1z6y=~Z;6FolLr?5;DJMv(a}{?*uEK4E{,ibbt~`ib!SZGEk^C+w6Ajh nQW,Y   C J& LB_1tHtbSX 8Rd,L7t7 OUP(\mv%7,"yK7P6X2{x>zG4tYwMD'>~ES=Z$R)YT\7W~E$(-PCV48DV;`1-PQ0mu_} N!1dSUw3i5g+~XEx %| }=xnT"TBO\YL^LoTk6, j=(`<[Qke YetldaEp\Z]ZB{<+ s]<*b9+r[ZdIe#?I,*y SgpM(eg&PQ M?".>VSR>~Ec1%k PUyApH)wc0K!y _%{e[ .n4BC+'CelPC d] RP Wvapx CG S/eWv=A;Ki/PQALTj .WK} !/ lX=1CYJ6FQruJMM-M}@#A&QPE:K++]&NAB)(]aPY'9E+bU ~!}|35cXx:q7+x;\2awG :ͥ^5\ml#核^"h5no[12HJa;zRsoKJvg"G?;*fb49gq"|F3$ara,p(&>Pq+5 h%+$sB[Dz!\xABq6PG4 9; Zg.YCT(`@DxeUt HL HvpjHD^ItnRj&U> / - ~M/VdT1dmTWr86GDQ&CQp@,?=8 (TIZn1waHB# P@`zR^S p[mNM DCd)n(cJN\^G>JS1 a!^A6^"'T : UOA (42Z! +b:R`|SVKW?mO[[5}P!p >mCIF J}-w3C\T[C:MQQ&E|2|7\0 B_lTD4}%$dP`Y+j0ht^hEN--.A,FYa>"OIUM@@gr:wI o0]R@,~LaL[q]hA\Wf:S:KGvLP&-o q?+> 2J"E'H4L|K/{ DV&OjP t^8ֱz046;=TC0F3a^[,oP9w F[b)m(g8N!3;EBg7"U<9$ dn~kL(#9/vBVq^U8ZGS7W>FjE~M;_}F,Rt&]$)DAiq_(W7hAc<9d8HFvA\4BOy(_';#LOEY0(|qgyHBPp%PD)Pt[bi+$4)B]^42YqXtJ^ k(jC6XX ?&t>'Cu oZH:]H1]xPKu0.F7H>+CILNd kO51gvX/''SL /Q oTs @H^+l2QcA^VaBm8&MqgyFdJieR51-G0Rj/9~"k;,*>-K[5N^grS1@>6)mO/Y&:'1b4@+`z>V[MmCX&!/"KC* a.$O%5?> -+A 53GQ +g K`y$ rR3wq2QW@M(1RKPv >FY-^ N xagceMv:6Y4sLrHs=sFpҢW6f^|8VRIH,^nJBPYY E~ - [aOOO:1Ev `J@]o,34~#wP4J^c2K\K-{ 4?CmEjjcpPe20S"#ve_j{'}D+q(cj)o4x&3]UY0|PbNs*)ulff> & (UL80RRcs*F I0Rnsa+t]2x@,huAq6omMf}Shhs lb.CcA/"'3`9|!_Sf`p+oNh]+^"&KJHYFM{Su^+>$>=7k34Pp:*! <&&0lNWBhQN T\OWA JyPKa`YaTeWFFOmK q$D"(HmxxYAMM|YmB[i+/Fd5BI?mlvf~l!W>BD<54vdb-$3_\1/gDHYHmd"\7B' >5$l+>rJD$ 8Cos+l8j8&.o2: wtg$Et(6NKN'}qq~zN~3vsWTIdJ]Q);]&|owSbDp?;KR:Ck"ry_)"eDeL;d^@IB LA>6B44\1(9p\C')AC5aaDn[_sabkK3MCT0zFIFZCxv~_f\2hjCE]9Ub<$UԂPBӁBŝ f%y]. =_&|-:`DfKG/dZExLBW ] '^6|ELAbzGQnR)D`bSH; K/9n UP  ,gVp?YSdP aft {&Z W/D`m?$0ougguYYdvg**{M+ lowp:%/)2t7eh274B_EGmeF(UmXmJ_cbbOa{#?jeF{7t)(iGkG u#c'*kny,$c1)yo{4>!7hQRL%fw#;:u*\ U,KVB=BK1<[2<Ai6XDu-4)"RZ(5P[ 1L %B#NB ?60VVZ.Z;\&%'rZR+ RLdʄoy>i[- Jf:SDu*~( *xR?5ȜoChfd>-vQe2r jtTXeBdm{3;:COqzBY=D\t3 k?4&JZ4LJzJN9@^%SaBNR|LR{IGEVz^L)0nI~|V"Hqt7GR!hSI:mi2_RXKJm/K% [va r Y\f0K@lnQ$$n7g{9i$ fm.uA,ew=x"BtxtyS (&O`lr QL &Te7oPZg@DRN}[CEBAY,j[rd MOhP (Xh!dj>pd~XQ%$]Hc{0`x RHhW+N$z[DV4V xukMZ0 ya||IICvm"xYOAfUMxYRp^JLESTD @]]kPlD5mK|y6&:3S /?cK*$Fh %x{ +'|@hR-r5M(G_|@/ z5Iq!(YZ+daY % }hsy\> o 4fiF{GW].!~R->h9*kI`X4,xVb q31b() >r~0?M{n-F3 /L6rqC~@J([,(JCawRm?Wt9!Q5uu)n :Qct@[72Zq@C__INo&1 yH^iqt(QqX.Y 5^Vo/4\rnSeMQlCF f +kg9L4M;bng)c;Z)W0 lSpWx3FJhN{_p^H0kGffKt4dyCrG_ի{Rv4冿o 8@N]Q: K$"L l3/N$gwJanbx!i:j.!M&HB1g,Xnazu o+rS3x CG P?Y]IrvOP.\C+(8 ]LV "mR'#,pKVsqegAUAJs_>i\GiyD%T\mdV~1qT 0 _ey[D?9Wt! B`\l#C1C#,v8lRK fBMOQfPuH:l"@NICjbQO1ug#ZvTgHo= Cw = 0^Bs4w%W(ZF,B`1RQEq|#UTSXjK6TCTLY^ +$*1vT*^2($PIJ11>.F~z.bna#? !~>x1anr>#~Y]My$~VDl2yE8%4OZaO~ F`{Ig[lgz~g4nn@zhV[qNFJ3*1/`2Q-}F(x7 (Pn/YgF}Z C[b^}LJU^ge.\dW-O)_ LM_)h8PO4bk,C-zSCW_}@vxRD"JtEMH2_$V=$PX4*Z&"1.~mi!F7RSI^" - lO[2a*_!fjNHEE8 GyH 3MyHrXL}Ab} ?`W@i ^Mz{~0P:YFd-aWt.b''b$,Qa|gi0 7#XSZqBWz,o&J aOJ9SfAQ eku[/hJ ?Y Y,EF~Ly;x[D&c-N(JVcMRQAbL1)6E:DbHh\EINvC$/S? Rkx J!;Kfdx-<]rJYWfc`3"jc'q(%i>K5CG J6~V]][+D|o0*W:B,8v]f)N~.~!G:Y/II W{'-Xx({IXv [ R] EH.B:}cy@\h[Q?W)#b/O9swTW=D]9I6^u^0[o[XndeM &c]E` ?O0`aZ1SK ^9Nhb%kC=In:}O+78G'P%$$K~m9V:$,;^|[vsu1~"_&r4n~/bs*297uK Q-KM 7yo}]#I sS!1$D*`]Z:`lK}u e(1HV0hI0(9ZDca1_&N6>a92*G99Tw#orO.'N7 r:s]!9Wb<"!/qDo=^@X(j\l/w.:\ovf9L;([h#&Xuw brstat*/ok~Q2VGfhod := "z" get_item := ge9| VMS.BCKi *b 1[V9.IPL.PROGS]ANIMAL.ICN;1C;1N;1 9 return end # # Output() -- Recursive procedure used to output the knowledge tree. # procedure Output(node,f,sense) static indent initial indent := 0 /f := &output /sense := " " case type(node) of { "string": write(f,repl(" ",indent),sense,"A: ",node) "Question": { write(f,repl(" ",indent),sense,"Q: ", node.question) indent +:= 1 Output(node.yes,f,"y") Output(node.no,f,"n") indent -:= 1 } } return end # # Get() -- Read in a knowledge base from a disk file. # procedure Get() local f f := open(GameObject || "s","r") | fail Tree := Input(f) close(f) return end # # Input() -- Recursive procedure used to input the knowledge tree. # procedure Input(f) local nodetype,s read(f) ? (tab(upto(~' \t')) & =("y" | "n" | "") & nodetype := move(1) & move(2) & s := tab(0)) return if nodetype == "Q" then Question(s,Input(f),Input(f)) else s end # # List() -- Lists the objects in the knowledge base. # procedure List() local lst,line,item lst := Show(Tree,[]) line := "" every item := !sort(lst) do { if *line + *item > 78 then { write(trim(line)) line := "" } line ||:= item || ", " } write(line[1:-2]) return end # # Show() -- Recursive procedure used to navigate the knowledge tree. # procedure Show(node,lst) if type(node) == "Question" then { lst := Show(node.yes,lst) lst := Show(node.no,lst) } else put(lst,node) return lst end *[V9.IPL.PROGS]BANNER.ICN;1+,./ 4-b 10123KPWO56M7Y89Jj$GHJ############################################################################ # # File: banner.icn # # Subject: Program to display banner # # Author: Chris Tenaglia # # Date: September 21, 1993 # ############################################################################ # # Here is a a handy little code fragment called banner. I # know icon is mostly in the unix world and unix already has a banner # command. But I'm mostly in the DOS and VMS world so I offer this little # banner code. It outputs enlarged letters (5x6 matrix) portraite. With a # little diddling you can change the scale or font since this is the source. # Maybe it can be made to take an input file as a font, and maybe even from # xwindows. But this is a simple one. I include a main() procedure that # calls it so you can test it and build from there. Enjoy! # ############################################################################ procedure main(param) if &features == ("MS-DOS" | "MS-DOS/386" | "NT") then system("cls") else if &features == "UNIX" then system("clear") every write(!banner(param[1])) end # # a bbbb cccc dddd eeeee fffff gggg h h iii jjj k k l m m # a a b b c d d e f g h h i j k k l mm mm # a a bbbb c d d eee fff g hhhhh i j kk l m m m # aaaaa b b c d d e f g gg h h i j k k l m m # a a b b c d d e f g g h h i j j k k l m m # a a bbbb cccc dddd eeeee f gggg h h iii jj k k lllll m m # # n n ooo pppp qqq rrrr ssss ttttt u u v v w w x x y y zzzzz # nn n o o p p q q r r s t u u v v w w x x y y z # n n n o o pppp q q rrrr sss t u u v v w w w x y z # n nn o o p q q q r r s t u u v v ww ww x x y z # n n o o p q qq r r s t u u v v w w x x y z # n n ooo p qqqq r r ssss t uuu v w w x x y zzzzz # # # 1 222 3333 4 4 55555 666 77777 888 999 00000 # 11 2 2 3 4 4 5 6 7 8 8 9 9 0 0 # 1 2 3333 44444 5555 6666 7 888 9999 0 00 # 1 2 3 4 5 6 6 7 8 8 9 0 0 0 # 1 2 3 4 5 6 6 7 8 8 9 00 0 # 111 22222 3333 4 5555 666 7 888 999 00000 # # # # ??? !! ::: # ? ? !! ::: / # ? !! // ----- # ? !! // ----- # ::: ... // # ? !! ::: ... // # # procedure banner(str) local bline, byte, raster, i static alphabet initial { alphabet := table("") alphabet["a"] := [" A "," A A ","A A ","AAAAA ","A A ","A A "] alphabet["b"] := ["BBBB ","B B ","BBBB ","B B ","B B ","BBBB "] alphabet["c"] := [" CCCC ","C ","C ","C ","C "," CCCC "] alphabet["d"] := ["DDDD ","D D ","D D ","D D ","D D ","DDDD "] alphabet["e"] := ["EEEEE ","E ","EEE ","E ","E ","EEEEE "] alphabet["f"] := ["FFFFF ","F ","FFF ","F ","F ","F "] alphabet["g"] := [" GGGG ","G ","G ","G GG ","G G "," GGGG "] alphabet["h"] := ["H H ","H H ","HHHHH ","H H ","H H ","H H "] alphabet["i"] := [" III "," I "," I "," I "," I "," III "] alphabet["j"] := [" JJJ "," J "," J "," J ","J J "," JJ "] alphabet["k"] := ["K K ","K k ","KK ","K K ","K K ","K K "] alphabet["l"] := ["L ","L ","L ","L ","L ","LLLLL "] alphabet["m"] := ["M M ","MM MM ","M M M ","M M ","M M ","M M "] alphabet["n"] := ["N N ","NN N ","N N N ","N NN ","N N ","N N "] alphabet["o"] := [" OOO ","O O ","O O ","O O ","O O "," OOO "] alphabet["p"] := ["PPPP ","P P ","PPPP ","P ","P ","P "] alphabet["q"] := [" QQQ ","Q Q ","Q Q ","Q Q Q ","Q QQ "," QQQQ "] alphabet["r"] := ["RRRR ","R R ","RRRR ","R R ","R R ","R R "] alphabet["s"] := [" SSSS ","s "," SSS "," S "," S ","SSSS "] alphabet["t"] := ["TTTTT "," T "," T "," T "," T "," T "] alphabet["u"] := ["U U ","U U ","U U ","U U ","U U "," UUU "] alphabet["v"] := ["V V ","V V ","V V ","V V "," V V "," V "] alphabet["w"] := ["W W ","W W ","W W W ","WW WW ","W W ","W W "] alphabet["x"] := ["X X "," X X "," X "," X X ","X X ","X X "] alphabet["y"] := ["Y Y "," Y Y "," Y "," Y "," Y "," Y "] alphabet["z"] := ["ZZZZZ "," Z "," Z "," Z ","Z ","ZZZZZ "] alphabet[" "] := [" "," "," "," "," "," "] alphabet["1"] := [" 1 "," 11 "," 1 "," 1 "," 1 "," 111 "] :-3 VMS.BCKb 1[V9.IPL.PROGS]BANNER.ICN;1C;1CN;1z alphabet["2"] := [" 222 ","2 2 "," 2 "," 2 "," 2 ","22222 "] alphabet["3"] := ["3333 "," 3 ","3333 "," 3 "," 3 ","3333 "] alphabet["4"] := ["4 4 ","4 4 ","44444 "," 4 "," 4 "," 4 "] alphabet["5"] := ["55555 ","5 ","5555 "," 5 "," 5 ","5555 "] alphabet["6"] := [" 666 ","6 ","6666 ","6 6 ","6 6 "," 666 "] alphabet["7"] := ["77777 "," 7 "," 7 "," 7 "," 7 "," 7 "] alphabet["8"] := [" 888 ","8 8 "," 888 ","8 8 ","8 8 "," 888 "] alphabet["9"] := [" 999 ","9 9 "," 9999 "," 9 "," 9 "," 999 "] alphabet["0"] := ["00000 ","0 0 ","0 00 ","0 0 0 ","00 0 ","00000 "] alphabet[":"] := [" ::: "," ::: "," "," "," ::: "," ::: "] alphabet["!"] := [" !! "," !! "," !! "," !! "," "," !! "] alphabet["."] := [" "," "," "," "," ... "," ... "] alphabet["?"] := [" ??? ","? ? "," ? "," ? "," "," ? "] alphabet["/"] := [" "," / "," // "," // "," // ","// "] alphabet["-"] := [" "," ","----- ","----- "," "," "] } bline := ["","","","","",""] every byte := !str do { raster := alphabet[map(byte)] every i := 1 to 6 do bline[i] ||:= raster[i] } return bline end *[V9.IPL.PROGS]BASED.ICN;1+,./ 4K-b 10123KPWO567X89Jj$GHJ############################################################################ # # File: based.icn # # Subject: Program to do BASIC-style editing # # Author: Chris Tenaglia # # Date: September 24, 1993 # ############################################################################ global chars,program,cmd,token,name procedure main(param) local ff, old if find("p",map(param[1])) then ff := "\014" else ff := "\e[2J\e[H" chars := &cset -- '\t ' program := list() name := &null write("Basic Line Editor V1.3 by Tenaglia 910104.1700") write(&host," ",&dateline,"\n") repeat { writes(">") (cmd := read()) | { quit() ; next } if cmd == "!!" then { cmd := old write("> ",cmd) } token := parse(cmd) if integer(token[1]) then { entry(token[1]) token[1] := "" } old := cmd #EJECT case map(token[1]) of { "" : "ignore this case" "load" : write(load()) "save" : write(save()) "resave" : write(resave()) "read" : write(basread()) "write" : write(baswrite()) "merge" : write(merge()) "new" : write(new()) "list" : write(print()) "renum" : write(renum()) "del" : write(del()) "dir" : write(dir()) "size" : write("Buffer contains ",*program," lines.") "find" : write(search()) "cls" : write(ff) "compile": write(compile()) "build" : write(build()) "test" : write(build(),run()) "run" : write(run()) "ver" : write("Basic Line Editor V1.3 by Tenaglia 910104.1700") "date" : write(&host," ",&dateline) "time" : write(&host," ",&dateline) "help" : write(help()) "?" : write(help()) "$" : write(shell()) "exit" : break "quit" : break default : write("\007What ?") } } write("Returning to operating system") write(&host," ",&dateline) end procedure quit() # allows CTRL_Z exit under VMS local test writes("QUIT! Are you sure? Y/N :") (test := read()) | stop("Returning to operating system\n",&host," ",&dateline) if map(test)[1] == "y" then stop("Returning to operating system\n",&host," ",&dateline) return end #SUB LOAD, SAVE, AND RESAVE COMMANDS #EJECT procedure load() local file, in, lnum if not(token[2]) then { writes("_file:") if (file := string(read())) == "" then return } else file := token[2] lnum := 0 (in := open(file)) | return ("Can't open " || file) name := file program := [] while put(program,((lnum+:=10) || " " || read(in))) do not(find("00",lnum)) | (writes(".")) close(in) return ("\n" || file || " loaded.") end procedure save() local file, i, line, lnum, out, text if not(token[2]) then { writes("_file:") if (file := string(read())) == "" then return } else file := token[2] (out := open(file,"w")) | return ("Can't open " || file) name := file every line := !program do { i := upto(' \t',line) lnum := line[1:i] text := line[i+1:0] write(out,text) not(find("00",lnum)) | (writes(".")) } close(out) return ("\n" || file || " saved.") end procedure resave() local i, line, lnum, out, text if not(string(name)) then return("Nothing LOADed to resave.") (out := open(name,"w")) | return ("Can't open " || name) every line := !program do { i := upto(' \t',line) lnum := line[1:i] text := line[i+1:0] write(out,text) not(find("00",lnum)) | (writes(".")) } close(out) return ("\n" || name || " resaved.") end #SUB READ, WRITE, AND MERGE COMMANDS #EJECT procedure basread() local file, in, line, lnum, test if not(token[2]) then { writes("_file:") if (file := string(read())) == "" then return } else file := token[2] lnum := 0 (in := open(file)) | return ("Can't open " || file) name := file program := [] while line := read(in) do { test := (line[1:upto(' \t',line)]) | "" if integer(test) then put(program,line) not(find("00",(lnum+:=10))) | (writes(".")) } close(in) return ("\n" || file || " read in.") end procedure baswrite() local file, lnum, out if not(token[2]) then { writes("_file:") if (file := string(read())) == "" then return } else file := token[2] (out := open(file,"w")) | return ("Can't open " || file) name := file ; lnum := 0 every write(out,!program) do not(find("00",(lnum+:=10))) | (writes(".")) close(out) return ("\n" || file || " writen out.") end procedure merge() local file, i, in, line, lnum if not(token[2]) then { writes("_file:") if (file := string(read())) == "" then return } else file := token[2] (in := open(file)) | return ("Can't open " || file) every line := !in do { (lnum := integer(line[1:(i:=upto(' \t',line))])) | next cmd := line entry(lnum) not(find("00",lnum)) | writes(".") } close(in) return (file || " merged in current buffer.") end #SUB DIR, DEL, AND NEW COMMANDS #EJECT procedure dir() local spec spec := (token[2]) | ("") if &host == "MS-DOS" then { system(("dir/w " || spec)) return "" } if find("nix",map(&host)) then system(("ls -l " || spec || " | more")) else system(("dir " || spec)) return "" end procedure del() local From, To, element, lnum, num, other if (From := integer(token[2])) & (To := integer(token[3])) then { other := [] every elem;! VMS.BCKb 1[V9.IPL.PROGS]BASED.ICN;1OC;1N;1 ent := !program do { lnum := element[1:upto(' \t',element)] if (lnum >= From) & (lnum <= To) then next put(other,element) } program := copy(other) return ("Lines " || From || " - " || To || " deleted.") } if not(num := integer(token[2])) then { writes("_line:") (num := integer(read())) | (return ("Not a line number.")) } other := [] every element := !program do { lnum := element[1:upto(' \t',element)] if lnum = num then next put(other,element) } program := copy(other) return ("Line " || num || " deleted.") end procedure new() program := [] name := &null return ("Buffer cleared.") end #SUB FIND COMMAND #EJECT procedure search() local From, To, delta, diff, i, item, j, k, l, line, lnum if (From := token[2]) & (To := token[3]) then { diff := (*token[3]) - (*token[2]) every i := 1 to *program do { line := program[i] l := upto(' \t',line) + 1 delta:= 0 every j := find(From,line,l) do { k := j + delta line[k+:*From] := "" line[((k-1)|(1))] ||:= To delta +:= diff writes(".") } program[i] := line } return "" } if not(item := token[2]) then { writes("_string:") if (item := read()) == "" then return "" } every i := 1 to *program do { line := program[i] l := upto(' \t',line) + 1 if find(item,line,l) then { lnum := line[1:l-1] writes(lnum,",") } } return "" end #SUB COMPILATION AND RUNNING ROUTINES #EJECT procedure compile() # compile only local fid, opt local i, ext, command, val find(".",name) | return "Can't compile! Language &or Filename not recognized" i := last(".",name) fid := map(name[1:i]) ext := map(name[i:0]) command := case ext of { ".icn" : "icont -c " || name ".c" : "cc " || opt || " " || name ".f" : "f77 "|| opt || " " || name ".asm" : "asm "|| opt || " " || name ".p" : "pc " || opt || " " || name ".for" : "fortran " || name ".bas" : "basic " || name ".cob" : "cobol " || name ".mar" : "macro " || name ".pas" : "pascal " || name default: return "Can't compile! Language &or Filename not recognized" } write("Issuing -> ",command) val := system(command) return " Completion Status = " || val end procedure build() # compile and link local i, ext, command, val1, val2, fid find(".",name) | return "Can't compile! Language &or Filename not recognized" i := last(".",name) fid := map(name[1:i]) ext := map(name[i:0]) command := case ext of { ".icn" : ["icont " || name] ".c" : ["cc " || name] ".f" : ["f77 " || name] ".asm" : ["asm " || name] ".p" : ["pc " || name] ".for" : ["fortran " || name, "link " || fid] ".bas" : ["basic " || name, "link " || fid] ".cob" : ["cobol " || name, "link " || fid] ".mar" : ["macro " || name, "link " || fid] ".pas" : ["pascal " || name, "link " || fid] default: return "Can't compile! Language &or Filename not recognized" } write("Issuing -> ",command[1]) val1 := system(command[1]) val2 := if *command = 2 then { write("And Issuing -> ",command[2]) system(command[2]) } else -1 return " Completion status = " || val1 || " and " || val2 end procedure run() # run built ware local i, ext, command, val, fid find(".",name) | return "Can't compile! Language &or Filename not recognized" i := last(".",name) fid := map(name[1:i]) ext := map(name[i:0]) command := case ext of { ".icn" : "iconx " || fid ".c" : fid ".f" : fid ".asm" : fid ".p" : fid ".com" : "@" || name ".for" : "run " || fid ".bas" : "run " || fid ".cob" : "run " || fid ".mar" : "run " || fid ".pas" : "run " || fid default: return "Can't Run ! Language &or Filename not recognized" } write("Issuing -> ",command) val := system(command) return " Completion status = " || val end #SUB LIST AND RENUM COMMANDS #EJECT procedure print() local From, To, items, line if *token = 1 then { every write(!program) return "" } if not(numeric(token[2])) then return proc_list() From := integer(token[2]) To := integer(token[3]) if not(integer(To)) then { every line := !program do { items := parse(line) if items[1] > From then return "" if items[1] = From then { write(line) return "" } } return "" } every line := !program do { items := parse(line) if items[1] < From then next if items[1] > To then return "" write(line) } return "" end # procedure proc_list() local flag, line flag := 0 every line := !program do { if find("procedure",line) & find(token[2],line) then flag := 1 if flag = 1 then write(line) if (parse(line)[2] == "end") & (flag = 1) then { write("") flag := 0 } } return "" end # procedure renum() local inc, line, lnum, other (lnum := integer(token[2])) | (lnum := 10) (inc := integer(token[3])) | (inc := 10) other := list() every line := !program do { line[1:upto(' \t',line)] := lnum put(other,line) not(find("00",lnum)) | (writes(".")) lnum +:= inc } program := copy(other) return ("\nProgram renumbered.") end #SUB ON LINE HELP DISPLAY #EJECT procedure help() write("Basic Line Editor V1.3 by Tenaglia") write(" This editor works on the same principle as basic interpreter") write(" environments. The lines are all prefixed with line numbers.") write(" These line numbers are used to reference lines in the file.") write(" The line numbers are not written to, or read from the file.") write(" This editor is designed to work on a hard copy terminal like") write(" a teletype or decwriter as well as a crt.") write("Command Summary : (parameters are space delimited)") write(" NEW - erase buffer | CLS - clear screen or form feed") write(" LOAD file - load file | SAVE file - save file") write(" READ file - read w/line numbers | WRITE file - write w/line numbers") write(" RESAVE - resave current file | MERGE file - insert w/line numbers") write(" DIR [spec]- list directory | SIZE - lines in editing buffer") write(" RENUM - renumber the lines | VER - current version number") write(" COMPILE - current source | BUILD - compile & link") write(" TEST - compile,link, & run | RUN - run last compiled") write(" $ - command to system (shell) | HELP or ? - this help screen") write(" TIME or DATE - displays time | !! - repeat last command") write("*---------------------------------+--------------------------------------*") write(" LIST or DEL [from [to]] - list or delete line(s)") write(" FIND str [repl] - find or replace string") return " EXIT or QUIT - return to operating system" end #SUB LINE ENTRY AND HANDY PARSER PROCEDURE #EJECT procedure entry(stuff) local element, finish, flag, lnum, other other := list() flag := "i" finish := 9999999 every element := !program do { lnum := integer(element[1:upto(' \t',element)]) if stuff = lnum then { put(other,cmd) stuff := finish next } if stuff < lnum then { put(other,cmd<jq VMS.BCKb 1[V9.IPL.PROGS]BASED.ICN;1OL;1N;1]h) stuff := finish } put(other,element) } if stuff ~= finish then put(other,cmd) program := copy(other) end procedure shell() local command command := cmd[find(" ",cmd):0] if trim(detab(command))=="" then return "No shell command" system(command) return "\nReturn to editor" end procedure parse(line) local tokens tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end procedure last(substr,str) local i every i := find(substr,str) return i end f*[V9.IPL.PROGS]BJ.ICN;1+,j *./ 4X-b 10123KPWO56_˃7Q89Jj$GHJ############################################################################ # # File: bj.icn # # Subject: Program to play blackjack game # # Author: Chris Tenaglia (modified by Richard L. Goerwitz) # # Date: June 14, 1994 # ############################################################################ # # Version: 1.7 # ############################################################################ # # Simple but fun blackjack game. The original version was for an ANSI # screen. This version has been modified to work with the UNIX termcap # database file. # ############################################################################ # # Links: itlib, randomiz # # Requires: UNIX # ############################################################################ link itlib, randomiz global deck, message, lookup, user_money, host_money, user_hand, host_hand procedure main(param) local bonus, user_points, host_points user_money := integer(param[1]) | 3 ; host_money := user_money write(screen("cls")) # Most terminals don't do oversize characters like this. # write(screen("cls")," ",screen("top"),screen("hinv"), # "BLACK JACK",screen("norm")) # write(" ",screen("bot"),screen("hinv"), # "BLACK JACK",screen("norm")) write(screen("high")," ---- BLACK JACK ----",screen("norm")) bonus := 0 repeat { if not any('y',(map(input(at(1,3) || " " || screen("under") || "Play a game? y/n :"|| screen("norm") || " " || screen("eeol")))[1])) then break every writes(at(1,3|4),screen("eeos")) display_score() deck := shuffle() message := "" user_hand := [] ; host_hand := [] put(user_hand,pop(deck)) ; put(host_hand,pop(deck)) put(user_hand,pop(deck)) ; put(host_hand,pop(deck)) user_points := first(host_hand[1]) if user_points > 21 then { writes(at(1,13),user_points," points. You went over. You lose.") user_money -:= 1 ; host_money +:= 1 + bonus ; bonus := 0 display_score() next } display_host(2) host_points := second(user_points) if host_points > 21 then { writes(at(48,22), right(host_points || " points. " || (&host ? tab(find(" ")|0)) || " went over.", 28)) writes(at(1,13),screen("hiblink"),"You win.",screen("norm")) host_money -:= 1 ; user_money +:= 1 + bonus ; bonus := 0 display_score() next } if host_points = user_points then { writes(at(1,22),screen("hiblink"),"It's a draw at ",user_points, ". The ANTY goes to bonus.",screen("norm")) bonus +:= 2 ; host_money -:= 1 ; user_money -:= 1 display_score() next } writes(at(1,12),user_points," points for user.") writes(at(1,14),host_points," points for ",&host ? tab(find(" ")|0)) if user_points < host_points then { write(at(1,22),screen("hiblink"),&host ? tab(find(" ")|0)," wins.", screen("norm"),screen("eeol")) user_money -:= 1 ; host_money +:= 1 + bonus ; bonus := 0 display_score() next } else { writes(at(1,12),screen("hiblink"),"You win.",screen("norm"), screen("eeol")) user_money +:= 1 + bonus ; host_money -:= 1 ; bonus := 0 display_score() next } } write(screen("clear")) end # # THIS PROCEDURE ALLOWS THE USER TO PLAY AND TAKE HITS # procedure first(host_card) local points display_user() display_host(1) points := value(user_hand) # just in case writes(at(1,9),"(",points,") ") repeat if any('hy',map(input(at(1,23) || "Hit ? y/n : " || screen("eeol")))) then { put(user_hand,pop(deck)) display_user() if (points := value(user_hand)) > 21 then return points writes(at(1,9),"(",points,") ") } else break (points > 0) | (points := value(user_hand)) writes(at(1,9),"(",points,") ") write(at(55,11),right("You stay with "||points,20)) return points end # # THIS SECOND PROCEDURE IS THE HOST PLAYING AGAINST THE USER # procedure second(ceiling) local stop_at, points static limits initial limits := [14,14,15,15,19,16,17,18] stop_at := ?limits ; points := 0 until (points := value(host_hand)) > stop_at do { if points > ceiling then return points writes(at(1,19),"(",points,") ") # write(at(1,22),screen("eeol"),&host," will take a hit.",screen("eeol")) write(at(1,22),screen("eeol"),&host ? tab(find(" ")|0), " will take a hit.",screen("eeol")) put(host_hand,pop(deck)) display_host(2) } (points > 0) | (points := value(host_hand)) writes(at(1,19),"(",points,") ") return points end # # THIS ROUTINE DISPLAYS THE CURRENT SCORE # procedure display_score() writes(screen("nocursor")) writes(screen("dim"),at(1,7),"Credits",screen("norm")) writes(screen("high"),at(1,8),right(user_money,7),screen("norm")) writes(screen("dim"),at(1,17),"Credits",screen("norm")) writes(screen("high"),at(1,18),right(host_money,7),screen("norm")) end # # THIS PROCEDURE EVALUATES THE POINTS OF A HAND. IT TRIES TO MAKE THEM # AS HIGH AS POSSIBLE WITHOUT GOING OVER 21. # procedure value(sample) local hand, possible, sum, card, i, best_score, gone_over_score, score hand := copy(sample) possible := [] repeat { sum := 0 every card := !hand do sum +:= lookup[card[1]] put(possible,sum) if not ("A" == (!hand)[1]) then break else every i := 1 to *hand do { if hand[i][1] == "A" then { hand[i][1] := "a" break } } } best_score := 0 gone_over_score := 100 every score := !possible do { if score > 21 then gone_over_score >:= score else best_score <:= score } return (0 ~= best_score) | gone_over_score end # # THIS ROUTINE DISPLAYS THE USER HAND AND STATUS # procedure display_user() local x, y, card writes(screen("nocursor"),at(1,6),screen("hinv"),"USER",screen("norm")) x := 10 ; y := 4 every card := !user_hand do { display(card,x,y) x +:= 7 } end # # THIS ROUTINE DISPLAYS THE =2i VMS.BCKj *b 1[V9.IPL.PROGS]BJ.ICN;1L.IOL;1N;1$ HOST HAND AND STATUS # procedure display_host(flag) local x, y, card writes(screen("nocursor"),at(1,16),screen("hinv"), &host ? tab(find(" ")|0),screen("norm")) x := 10 ; y := 14 ; /flag := 0 every card := !host_hand do { if (flag=1) & (x=10) then card := "XX" display(card,x,y) x +:= 7 } end # # THIS ROUTINE DISPLAYS A GIVEN CARD AT A GIVEN X,Y SCREEN LOCATION # procedure display(card,x,y) local all, j, shape all := [] ; j := y if find(card[2],"CS") then card := screen("hinv") || card || screen("norm") # shape := [at(x,(j+:=1)) || screen("gchar") || "lqqqqqqqk"] shape := [at(x,(j+:=1)) || screen("inv") || " " || screen("norm")] put(shape,at(x,(j+:=1)) || screen("inv") || " " || screen("norm") || " " || card || " " || screen("inv") || " " || screen("norm")) put(shape,at(x,(j+:=1)) || screen("inv") || " " || screen("norm") || " " || screen("inv") || " " || screen("norm")) put(shape,at(x,(j+:=1)) || screen("inv") || " " || screen("norm") || " " || screen("inv") || " " || screen("norm")) put(shape,at(x,(j+:=1)) || screen("inv") || " " || screen("norm") || " " || screen("inv") || " " || screen("norm")) # put(shape,at(x,(j+:=1)) || "x x") # put(shape,at(x,(j+:=1)) || "x x") put(shape,at(x,(j+:=1)) || screen("inv") || " " || screen("norm") || " " || card || " " || screen("inv") || " " || screen("norm")) # put(shape,at(x,(j+:=1)) || "mqqqqqqqj" || screen("nchar")) put(shape,at(x,(j+:=1)) || screen("inv") || " " || screen("norm")) put(all,shape) x +:= 14 while shape := pop(all) do every writes(!shape) end # # THIS ROUTINE SHUFFLES THE CARD DECK # procedure shuffle() static faces, suits local cards, i initial { randomize() faces := ["2","3","4","5","6","7","8","9","T","J","Q","K","A"] suits := ["D","H","C","S"] lookup := table(0) every i := 2 to 9 do insert(lookup,string(i),i) insert(lookup,"T",10) insert(lookup,"J",10) insert(lookup,"Q",10) insert(lookup,"K",10) insert(lookup,"A",11) insert(lookup,"a",1) } cards := [] every put(cards,!faces || !suits) every i := *cards to 2 by -1 do cards[?i] :=: cards[i] return cards end # # THIS ROUTINE PARSES A STRING WITH RESPECT TO SOME DELIMITER # procedure parse(line,delims) local tokens static chars chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end # # THIS ROUTINE PROMPTS FOR INPUT AND RETURNS A STRING # procedure input(prompt) writes(screen("cursor"),prompt) return read() end # # THIS ROUTINE SETS THE VIDEO OUTPUT ATTRIBUTES FOR VT102 OR LATER # COMPATIBLE TERMINALS. # procedure screen(attr) initial if getval("ug"|"mg"|"sg") > 0 then er("screen","oops, magic cookie terminal!",34) return { case attr of { "cls" : getval("cl") "clear": getval("cl") # HIGH INTENSITY & INVERSE "hinv" : (getval("md") | "") || getval("so") "norm" : (getval("se") | "") || (getval("me") | "") || (getval("ue")|"") # LOW INTENSITY VIDEO "dim" : getval("mh"|"me"|"se") "blink": getval("mb"|"md"|"so") # HIGH INTENSITY BLINKING "hiblink": (getval("md") | "") || getval("mb") | getval("so") "under": getval("us"|"md"|"so") "high" : getval("md"|"so"|"ul") "inv" : getval("so"|"md"|"ul") # ERASE TO END OF LINE "eeol" : getval("ce") # ERASE TO START OF LINE "esol" : getval("cb") # ERASE TO END OF SCREEN "eeos" : getval("cd") # MAKE CURSOR INVISIBLE "cursor": getval("vi"|"CO") | "" # MAKE CURSOR VISIBLE "nocursor": getval("ve"|"CF") | "" # # START ALTERNATE FONT <- very non-portable # "gchar": getval("as") | "" # # END ALTERNATE FONT # "nchar": getval("ae") | "" # "light": return "\e[?5h" # LIGHT COLORED SCREEN # "dark" : return "\e[?5l" # DARK COLORED SCREEN # "80" : return "\e[?3l" # 80 COLUMNS ON SCREEN # "132" : return "\e[?3h" # 132 COLUMNS ON SCREEN # "smooth": return "\e[?4h" # SMOOTH SCREEN SCROLLING # "jump" : return "\e[?4l" # JUMP SCREEN SCROLLING default : er("screen",attr||" is just too weird for most terminals",34) } | er("screen","I just can't cope with your terminal.",35) } end # # THIS ROUTINE SETS THE CURSOR TO A GIVEN X (COL) Y(ROW) SCREEN LOCATION # procedure at(x,y) # return "\e[" || y || ";" || x || "f" return igoto(getval("cm"),x,y) end *[V9.IPL.PROGS]C2ICN.ICN;1+,./ 4-b 10123KPWO56p7089Jj$GHJ############################################################################ # # File: c2icn.icn # # Subject: Program to assist C-to-Icon porting # # Author: Robert J. Alexander # # Date: March 11, 1993 # ############################################################################ # # Filter to do some of the mundane work involved in porting a C # program to Icon. # # - Reformats comments, moving embedded comments to end of line # - Removes the ";" from ends of lines # - Reformats line-continued strings # - Changes = to := # - Changes -> to . # ############################################################################ procedure main(arg) local c, comment, line, tline while line := trim(read(),' \t') do line ? { line := comment := "" while line ||:= tab(upto('\'"/=-')) do { case c := move(1) of { "\"" | "'": { line ||:= c repeat { until line ||:= tab(find(c) + 1) do { line ||:= tab(0) if line[-1] == "\\" then line[-1] := "_" else stop("unbalanced quotes") Out(line) line := "" &subject := read() } if not (line[-2] == "\\" & not (line[-3] == "\\")) then break } } "/": { if ="*" then { until comment ||:= trim(tab(find("*/")),' \t') do { comment ||:= trim(tab(0),' \t') Out(line,comment) line := comment := "" &subject := trim(read(),' \t') } move(2) } } "=": { if ="=" then line ||:= "==" else if any('<>!',line[-1]) then line ||:= c else line ||:= ":=" } "-": { if =">" then line ||:= "." else line ||:= c } default: line ||:= c } } line ||:= tab(0) tline := trim(line) if tline[-1] == ";" then { line := tline[1:-1] || line[*tline + 1:0] } Out(line,comment) } end procedure Out(line,comment) line ||:= "#" || ("" ~== \comment) line := trim(line,' \t') write(line) return end *[V9.IPL.PROGS]CALC.ICN;1+,k )./ 4P-b 10123KPWO56`T\789Jj$GHJ> e VMS.BCKk )b 1[V9.IPL.PROGS]CALC.ICN;1IOL;1N;1[ ############################################################################ # # File: calc.icn # # Subject: Program to simulate desk calculator # # Author: Ralph E. Griswold # # Date: January 3, 1993 # ############################################################################ # # This is a simple Polish "desk calculator". It accepts as values Icon # integers, reals, csets, and strings (as they would appear in an Icon # program) as well as an empty line for the null value. # # Other lines of input are interpreted as operations. These may be Icon # operators, functions, or the commands listed below. # # In the case of operator symbols, such as +, that correspond to both unary # and binary operations, the binary one is used. Thus, the unary operation # is not available. # # In case of Icon functions like write() that take an arbitrary number of # arguments, one argument is used. # # The commands are: # # clear remove all values from the calculator's stack # dump write out the contents of the stack # quit exit from the calculator # # Example: the input lines # # "abc" # 3 # repl # write # # writes abcabcabc and leaves this as the top value on the stack. # # Failure and most errors are detected, but in these cases, arguments are # consumed and not restored to the stack. # ############################################################################ # # Links: ivalue, usage # ############################################################################ invocable all link ivalue, usage global stack procedure main() local line stack := [] while line := read() do (operation | value | command)(line) | Error("erroneous input ", image(line)) end procedure command(line) case line of { "clear": stack := [] "dump": every write(image(!stack)) "quit": exit() default: fail } return end procedure operation(line) local p, n, arglist if p := proc(line, 2 | 1 | 3) then { # function or operation? n := abs(args(p)) arglist := stack[-n : *stack + 1] | { Error("too few arguments") fail } stack := stack[1 : -n] &error := 1 # anticipate possible error put(stack, p ! arglist) | { # invoke if &error = 0 then Error("error ", &errornumber, " evaluating ", image(line)) else Error("failure evaluating ", image(line)) stack |||:= arglist # restore unused arguments } &error := 0 return } else fail end procedure value(line) put(stack,ivalue(line)) | fail return end *[V9.IPL.PROGS]CALLCNT.ICN;1+,./ 4-b 10123KPWO56pܲ789Jj$GHJ ############################################################################ # # File: callcnt.icn # # Subject: Program to count calls # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # This program tabulates calls in a monitored program. # ############################################################################ # # Links: evinit, opsyms # ############################################################################ # # Requires: MT Icon and event monitoring # ############################################################################ # # Includes: evdefs.icn # ############################################################################ link evinit link opsyms $include "evdefs.icn" procedure main(args) local opertable, fnctable, rectable, proctable, opmap, output, mask, oper local count, fnc EvInit(args) opertable := table(0) fnctable := table(0) proctable := table(0) opmap := opsyms() output := open("callcnt", "x", "height=800", # If this fails, output goes to "width=200") # standard output write(output, " Tabulating calls for ", args[1]) mask := E_Ocall ++ E_Fcall ++ E_Pcall while EvGet(mask) do case &eventcode of { E_Ocall: opertable[&eventvalue] +:= 1 E_Fcall: fnctable[&eventvalue] +:= 1 E_Pcall: proctable[&eventvalue] +:= 1 } opertable := sort(opertable,3) fnctable := sort(fnctable,3) rectable :=copy(fnctable) proctable := sort(proctable,3) write(output, "\n operation calls\n") while oper := get(opertable) do { count := get(opertable) write(output, " ", left(\opmap[oper], 20), right(count, 7)) } write(output, "\n function calls\n") while fnc := get(fnctable) do { count := get(fnctable) write(output, " ", left(fname(fnc), 20), right(count, 7)) } write(output, "\n record constructor calls\n") while fnc := get(rectable) do { count := get(rectable) write(output, " ", left(cname(fnc), 20), right(count, 7)) } write(output, "\n procedure calls\n") while write(output, " ", left(pname(get(proctable)), 20), right(get(proctable), 7)) Event(\output) # wait for event if window end procedure cname(f) return image(f) ? { ="function " if ="record constructor " then return tab(0) else fail } end procedure fname(f) return image(f) ? { ="function " if ="record constructor " then fail else tab(0) } end procedure pname(p) return image(p) ? { ="procedure " tab(0) } end *[V9.IPL.PROGS]COLM.ICN;1+,l (. / 4 -b 10123KPWO 56ɔ7ބ89Jj$GHJ############################################################################ # # File: colm.icn # # Subject: Program to arrange data into columns # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # Colm -- Arrange data into columns. # # Program to arrange a number of data items, one per line, into # multiple columns. Items are arranged in column-wise order, that is, # the sequence runs down the first column, then down the second, etc. # # If a null line appears in the input stream, it signifies a break in # the list, and the following line is taken as a title for the # following data items. No title precedes the initial sequence of # items. # # Usage: # # colm [-w line_width] [-s space_between] [-m min_width] # [-t tab_width] [-x] [-d] [file ...] # # The parameters are: # # line_width: the maximum width allowed for output lines # ?Sё VMS.BCKl (b 1[V9.IPL.PROGS]COLM.ICN;1MAN;1CN;1 h (default: 80). # space_between: minimum number of spaces between items # (default: 2). # min_width: minimum width to be printed for each entry # (default: no minimum). # tab_width: tab width used to entab output lines. # (default: no tabs). # -x print items in row-wise order rather than # column-wise. # -d (distribute) distribute columns throughout available width. # # The command "colm -h" generates "help" text. # # This is a general utility, but it was written and tailored for a # specific purpose: # # This utility was written to rearrange the file name list from the # Macintosh Programmer's Workshop "Files" command into a more # convenient format. "Files" lists file names in a single column. # This program takes the list produced by "Files" and outputs a # multi-column list. The names are listed vertically within each # column, and the column width is computed dynamically depending upon # the sizes of the names listed. A recommendation is to create a # command file "lc" (List in Columns) as follows: # # Files {"Parameters"} | colm # # The output from the Files command is "piped" to the "colm" program # (this program), which prints its list in the current window. # # By putting both the "lc" command file and the "colm" program into # your {MPW}Tools folder, "lc" can be conveniently issued as a command # at any time, using the same parameters as the "Files" command. link options, colmize procedure main(arg) local usage, help, opt, rowwise, distribute, maxcols, space, minwidth local tabwidth, f, entries, entry # # Define usage and help strings. # usage := "_ Usage:\tcolm [-w line_width] [-s space_between] [-m min_width]\n_ \t\t[-t tab_width] [-x] [file ...]\n_ \tcolm -h for help" help := "_ \tline_width:\tthe maximum width allowed for output lines\n_ \t\t\t(default: 80).\n_ \tspace_between:\tminimum number of spaces between items\n_ \t\t\t(default: 2).\n_ \tmin_width:\tminimum width to be printed for each entry\n_ \t\t\t(default: no minimum).\n_ \ttab_width:\ttab width used to print output lines.\n_ \t\t\t(default: no tabs).\n_ \t-x\t\tprint items in row-wise order rather than\n_ \t\t\tcolumn-wise.\n_ \t-d (distribute)\tdistribute columns throughout available width." # # Process command line options. # opt := options(arg,"hxdw+s+m+t+") if \opt["h"] then write(usage,"\n\n",help) & exit() rowwise := opt["x"] distribute := opt["d"] maxcols := \opt["w"] | 80 space := \opt["s"] | 2 minwidth := \opt["m"] | 0 tabwidth := (\opt["t"] | 0) + 1 if tabwidth = 1 then entab := 1 if *arg = 0 then arg := [&input] # # Loop to process input files. # while f := get(arg) do { f := (&input === f) | open(f) | stop("Can't open ",f) # # Loop to process input groups (separated by empty lines). # repeat { entries := [] # # Loop to build a list of non-empty lines of an input file. # while entry := "" ~== read(f) do { put(entries,entry) } # # Now write the data in columns. # every write(entab(colmize(entries,maxcols,space,minwidth, rowwise,distribute),tabwidth)) write("\n",read(f)) | break # print the title line, if any } close(f) write() } end *[V9.IPL.PROGS]COMFILES.ICN;1+, ./ 4(-b 10123KPWO56i7ּ89Jj$GHJ############################################################################ # # File: comfiles.icn # # Subject: Program to list common files in two directories # # Author: Ralph E. Griswold # # Date: March 21, 1994 # ############################################################################ # # This program lists common file names in two directories given as # command-line arguments. # ############################################################################ # # Requires: UNIX # ############################################################################ procedure main(args) local dir1, dir2, set1, set2, set3, input1, input2 dir1 := args[1] | stop("*** no directories specified") dir2 := args[2] | stop("*** no second directory specified") set1 := set() set2 := set() input1 := open("ls " || dir1, "p") input2 := open("ls " || dir2, "p") every insert(set1, !input1) every insert(set2, !input2) set3 := set1 ** set2 if *set3 = 0 then write("no common file names") else every write(!set3) end *[V9.IPL.PROGS]CONCORD.ICN;1+,m (. / 4 -b 10123KPWO 56"䄚7`89Jj$GHJ############################################################################ # # File: concord.icn # # Subject: Program to produce concordance # # Author: Ralph E. Griswold # # Date: September 6, 1992 # ############################################################################ # # This program produces a simple concordance from standard input to standard # output. Words less than three characters long are ignored. # # There are two options: # # -l n set maximum line length to n (default 72), starts new line # -w n set maximum width for word to n (default 15), truncates # # There are lots of possibilities for improving this program and adding # functionality to it. For example, a list of words to be ignored could be # provided. The formatting could be made more flexible, and so on. # ############################################################################ # # Note that the program is organized to make it easy (via item()) to # handle other kinds of tabulations. # ############################################################################ # # Links: options # ############################################################################ link options global uses, colmax, namewidth, lineno procedure main(args) local opts, uselist, name, line opts := options(args, "l+w+") # process options colmax := \opts["l"] | 72 namewidth := \opts["w"] | 15 uses := table() lineno := 0 every tabulate(item(), lineno) # tabulate all the citations uselist := sort(uses, 3) # sort by uses while name := get(uselist) do format(left(name, namewidth) || get(uselist)) end # Add line number to citations for name. If it already has been cited, # add (or increment) the number of citations. # procedure tabulate(name, lineno) local count, i, j, k, last, head, tail lineno := string(lineno) if /uses[name] := lineno || ", " then return uses[name] ? { j := 1 # token start every i := upto(',') + 2 do { # token end k := j j @C7 VMS.BCKm (b 19.IPL.PROGS]CONCORD.ICN;1.ICN;1 ?X:= i # last token start } head := tab(k) # everything but last token last := tab(many(&digits)) # last line number if last ~= lineno then { # new number tail := last || tab(0) || lineno || ", " } else { # repeated number if ="(" then count := tab(many(&digits)) + 1 else count := 2 tail := last || "(" || count || "), " } } uses[name] := head || tail return end # Format the output, breaking long lines as necessary. # procedure format(line) local i while *line > colmax + 2 do { i := colmax + 2 until line[i -:= 1] == " " # back off to break point write(line[1:i]) line := repl(" ", namewidth) || line[i + 1:0] } write(line[1:-2]) end # Get an item. Different kinds of concordances can be obtained by # modifying this procedure. # procedure item() local i, word, line while line := read() do { lineno +:= 1 write(right(lineno, 6), " ", line) line := map(line) # fold to lowercase i := 1 line ? { while tab(upto(&letters)) do { word := tab(many(&letters)) if *word >= 3 then suspend word # skip short words } } } end }*[V9.IPL.PROGS]CONMAN.ICN;1+,n +./ 4-b 10123KPWO56.7 }Dž89Jj$GHJ############################################################################ # # File: conman.icn # # Subject: Program to convert units # # Author: William E. Drissel # # Date: November 25, 1993 # ############################################################################ # # Conman is a toy I used to teach myself elementary Icon. I # once vaguely heard of a program which could respond to queries # like "? Volume of the earth in tbsp". # # The keywords of the language (which are not reserved) are: # # load # save # print # ? (same as print) # list # is and are which have the same effect # # "Load" followed by an optional filename loads definitions of # units from a file. If filename is not supplied, it defaults to # "conman.sav" # # "Save" makes a file for "load". Filename defaults to # "conman.sav". "Save" appends to an existing file so a user # needs to periodically edit his save file to prune it back. # # "Print" and "?" are used in phrases like: # # ? 5 minutes in seconds # # Conman replies: # # 5 minutes in seconds equals 300 # # List puts up on the screen all the defined units and the # corresponding values. Format is same as load/store format. # # "Is" and "are" are used like this: # # 100 cm are 1 meter # # The discovery of is or are causes the preceeding token (in # this case "cm") to be defined. The load/store format is: # # unitname "is" value # # Examples: # # 8 furlongs is 1 mile # furlong is 1 / 8 mile # # These last two are equivalent. Note spaces before and after # "/". Continuing examples: # # 1 fortnight is 14 days # furlong/fortnight is furlong / fortnight # inches/hour is inch / hour # # After this a user might type: # # ? 1 furlong/fortnight in inches/hour # Conman will reply: # # 1 furlong/fortnight in inches/hour equals 23.57 # # Note: the following feature of Conman: his operators have no # precedence so the line above gets the right answer but # # 1 furlong/fortnight in inches / hour # # gets the wrong answer. (One definition of a feature is a flaw we're # not going to fix). # ############################################################################ # # Program Notes: # # The procedure, process, parses the user's string to see if it # begins with a keyword. If so, it acts accordingly. If not, # the user string is fed to isare. # # Isare attempts to find "is" or "are" in the users string. # Failing to, isare feeds the string to conman which can # interpret anything. If "is" or "are" is found, the tokens # (delimited by blanks) before the "is" or "are" are stacked in # foregoing; those after are stacked in subsequent. Then the # name to be defined is popped off the foregoing and used as # the "index" into a table named values. The corresponding # number is computed as eval(subsequent) / eval(foregoing). # # The procedure, stack, is based on Griswold and Griswold, "The # Icon Programming Language", p122. # # The procedure, eval, unstacks the tokens from a stack one by # one until all have been considered. First, the tokens which # signify division by the next token are considered and used to # set a switch named action. Then depending on action, the # token is used to multiply the accumulator or divide it. If # eval can make the token into a number, the number is used, # failing that the token is looked up in the table named values # and the corresponding number is used. Failing both of those, # conman gripes to the user and does nothing (in effect # multiplying or dividing by 1). Finally, eval returns the # number accumulated by the operations with the tokens. # # Load defaults the filename to conman.sav if the user didn't # supply one. Each line read is fed to isare. We will see # that save prepares the lines so isare can define the units. # # Save uses Icon's sort to go thru the table "values". The # unit name is the left of a pair and the number stored is the # right of the pair. The word " is " is stuck between them so # isare will work. # # Finally, we consider the procedure conman. During initial # design, this was perceived to be the largest part of the # effort of conman. It is a real tribute to the power of Icon # that only one non-trivial line of code is required. The # user's string is reproduced then the word "equals" followed # the result produced by eval after the user's string is # stacked. # ############################################################################ # # Requires: conman.sav # ############################################################################ # # Links: dopen # ############################################################################ link dopen global values, blank, nonblank procedure main (args) local line if map(args[1]) == "-t" then &trace := -1 init() while line := prompt() do { process(line || " ") # pad with a blank to make life easy } windup() end ############################################################################ # # windup # procedure windup() write(&errout,"windup") end ############################################################################ # # process # procedure process(str) case parse(str) of { "load" : load(str) "save" : save(str) "print" : conman(butfirst(str)) # strip first token "list" : zlist() default Af VMS.BCKn +b 1[V9.IPL.PROGS]CONMAN.ICN;1T.ICN;1  : isare(str) # didn't start with a kw, try is or are } end ############################################################################ # # parse # procedure parse(str) local token token := first(str) case token of { "?" : return "print" # only special case at present default : return token } end ############################################################################ # # conman # # compute and write result - During initial design, this was perceived to # require 50 lines of complicated lookup etc.! # procedure conman(strn) write (strn , " equals ", eval(stack(strn, 1, *strn))) end ############################################################################ # # isare - routine to define values - tries to evaluate if not a definition # # locate is,are - delete # backup one word - save, delete # compute foregoing # compute subsequent # store word, subsequent/foregoing in values # procedure isare(str) local after, before, foregoing, subsequent # locate blank-delimited is or are - early (?clumsy) Icon code replaced at # the suggestion of one of REG's students if (str ? (before := tab(find(" is ")) & move(4) & after := \tab(0))) then { } # is else if (str ? (before := tab(find(" are ")) & move(5) & after := \tab(0))) then { } # are else { # found nothing - try to eval anyhow conman(str) return } # # here if is or are # foregoing := stack(before) # so we can look back one token subsequent := stack(after) # might as well stack this too name := singular(pop(foregoing)) # define token before is or are # # next line so we can support "100 cms are 1 meter" # values[name] := eval(subsequent) / eval(foregoing) return end ############################################################################ # # stack - stack tokens - based on IPL section 12.1 p122 # # stack the "words" in str - needs cset nonblank # procedure stack(str) local i, j, words words := [] ; i := 1 while j := upto(nonblank, str, i) do { i := many(nonblank, str, j) push(words, str[i:j]) } return words end ############################################################################ # # eval - evaluate a stack # # while more remain # unstack a token # if "in" or "over" or "/", set to divide next time # else if number multiply/divide it # else if in values, multiply/divide value # else gripe and leave accum alone # procedure eval(stk) local accum, action, token accum := 1.0 ; action := "multiply" while token := singular(pull(stk)) do { if token == ("in" | "over" | "/" )then action := "divide" else if action == "multiply" then { # write("multiplying by ", token, " ", (real(token) | # real(values[token]) | # "unknown")) if not (accum *:= \(real(token) | real(values[token]))) then write (&errout, "Can't evaluate ", token, " - using 1.0 instead") } else if action == "divide" then { action := "multiply" if not (accum /:= \(real(token) | real(values[token]))) then write (&errout, "Can't evaluate ", token, " - using 1.0 instead") } }#........................................ # end of while more tokens return accum end ############################################################################ # # init # procedure init() write(&errout, "Conman version 1.1, 7/24/87") values := table(&null) nonblank := &ascii -- ' ' blank := ' ' values["times"] := 1.0 values["by"] := 1.0 values["of"] := 1.0 values["at"] := 1.0 values["print"] := 1.0 values["?"] := 1.0 values["meter"] := 1.0 values["kilogram"] := 1.0 values["second"] := 1.0 end ############################################################################ # # prompt # procedure prompt() return read() end ############################################################################ # # load - loads table from a file - assumes save format compatible # with isare # procedure load(str) local intext, line, filnam filnam := (\second(str) | "conman.sav") write (&errout, "Load from ", filnam, ". May take a minute or so.") intext := dopen(filnam,"r") | { write(&errout, "can't open ", filnam) fail} while line := read(intext) do { isare(line || " ") # pad with a blank to make life easy } close(intext) return end ############################################################################ # # save - saves table to file in format compatible with isare # procedure save(str) local i, outtext, pair, wlist, filnam filnam := (\second(str) | "conman.sav") write (&errout, "Save into ", filnam) outtext := open(filnam,"a") | { write(&errout, "can't save to ", filnam) fail} wlist := sort(values) i := 0 every pair := !wlist do { write(outtext, pair[1], " is ", pair[2]) } close(outtext) end ############################################################################ # # zlist - lists the table # procedure zlist() local i, pair, wlist i := 0 wlist := sort(values) every pair := !wlist do { write(&errout, pair[1], " is ", pair[2]) } end ############################################################################ # # first - returns first token in a string - needs cset nonblank # procedure first(s) local stuff s? (tab(upto(nonblank)) , (stuff := tab(many(nonblank)))) return \stuff end ############################################################################ # # second - returns second token in a string - needs cset nonblank # procedure second(s) local stuff s? (tab(upto(nonblank)) , (tab(many(nonblank)) & tab(upto(nonblank)) & (stuff := tab(many(nonblank))))) return \stuff end ############################################################################ # # butfirst - returns all butfirst token in a string - needs cset nonblank # procedure butfirst(s) local stuff s? (tab(upto(nonblank)) , tab(many(nonblank)) & tab(upto(nonblank)) & (stuff := tab(0))) return \stuff end ############################################################################ # # singular - returns singular of a unit of measure - add special cases in # an obvious way. Note: singulars ending in "e" should be handled # here also "per second" units which end in "s". # procedure singular(str) local s s := str if s == "fps" then return "fps" if s == "feet" then return "foot" if s == "minutes" then return "minute" if s == "miles" then return "mile" # ## otherwise strip "es" or "s". Slick code by Icon grad student # return s? (1(tab(-2), ="es") | 1(tab(-1), ="s" ) | tab(0)) end ############################################################################ dBWԥl VMS.BCKo ,b 1[V9.IPL.PROGS]COUNTLST.ICN;1ICN;1*[V9.IPL.PROGS]COUNTLST.ICN;1+,o ,./ 4-b 10123KPWO56+҅7 89Jj$GHJ############################################################################ # # File: countlst.icn # # Subject: Program to count items in a list # # Author: Ralph E. Griswold # # Date: December 30, 1991 # ############################################################################ # # This program counts the number times each line of input occurs and # writes a summary. # # With no option, the output is sorted first by decreasing count and within # each count, alphabetically. With the option -a, the output is sorted # alphabetically. # # The option -t prints a total at the end. # ############################################################################ # # Links: adlutils, options # ############################################################################ link adlutils, options procedure main(args) local line_count, counter, lines, opts, sort_method, line, total, count line_count := table(0) # counts for each line counter := table() # lists of lines for each count total := 0 # total number of lines opts := options(args,"at") sort_method := opts["a"] while line_count[read()] +:= 1 do total +:= 1 if \sort_method then { # alphabetical sort line_count := sort(line_count,3) while write(get(line_count),"\t",get(line_count)) } else { # numerical sort, then alpha line_count := sort(line_count,4) while count := pull(line_count) do { /counter[count] := [] put(counter[count],pull(line_count)) } counter := sort(counter,3) while lines := sort(pull(counter)) do { count := pull(counter) every write(!lines,"\t",count) } } if \opts["t"] then write("\ntotal\t",total) end *[V9.IPL.PROGS]CROSS.ICN;1+,p -. / 4 w-b 10123KPWO 56`7}x89Jj$GHJ############################################################################ # # File: cross.icn # # Subject: Program to display intersection of words # # Author: William P. Malloy # # Date: June 10, 1988 # ############################################################################ # # This program takes a list of words and tries to arrange them # in cross-word format so that they intersect. Uppercase letters # are mapped into lowercase letters on input. For example, the # input # # and # eggplants # elephants # purple # # produces the output # +---------+ # | p | # | u e | # | r g | # | p g | # |elephants| # | e l | # | and | # | n | # | t | # | s | # +---------+ # # Diagnostics: The program objects if the input contains a nonal- # phabetic character. # # Comments: This program produces only one possible intersection # and it does not attempt to produce the most compact result. The # program is not very fast, either. There is a lot of room for # improvement here. In particular, it is natural for Icon to gen- # erate a sequence of solutions. # ############################################################################ global fast, place, array, csave, fsave, number procedure main() local words, nonletter, line nonletter := ~&letters words := [] while line := map(read()) do if upto(nonletter,line) then stop("input contains nonletter") else put(words,line) number := *words kross(words) end procedure kross(words) local one, tst, t array := [get(words)] t := 0 while one := get(words) do { tst := *words if fit(one,array,0 | 1) then t := 0 else { t +:= 1 put(words,one) if t > tst then break } } if *words = 0 then Print(array) else write(&errout,"cannot construct puzzle") end procedure fit(word,matrix,where) local i, j, k, l, one, test, t, s s := *matrix t := *matrix[1] every k := gen(*word) do every i := gen(s) do every j := gen(t) do if matrix[i][j] == word[k] then { # test for vertical fit if where = 0 then { test := 0 every l := (i - k + 1) to (i + (*word - k)) do if tstv(matrix,i,j,l,s,t) then { test := 1 break } if test = 0 then return putvert(matrix,word,i,j,k) } if where = 1 then { test := 0 every l := (j - k + 1) to (j + (*word - k)) do if tsth(matrix,i,j,l,s,t) then { test := 1 break } if test = 0 then return puthoriz(matrix,word,i,j,k) } } end procedure tstv(matrix,i,j,l,s,t) return ((matrix[(l ~= i) & (s >= l) & (0 < l)][0 < j-1] ~== " ") | (matrix[(l ~= i) & (s >= l) & (0 < l)][t >= j + 1] ~== " ") | (matrix[(i ~= l-1) & (s >= l-1) & (0 < l-1)][j] ~== " ") | (matrix[(i ~= l + 1) & (s >= l+1) & (0 < l + 1)][j] ~== " ") | (matrix[(l ~= i) & (s >= l) & (0 < l)][j] ~== " ")) end procedure tsth(matrix,i,j,l,s,t) return ((matrix[0 < i-1][(l ~= j) & (t >= l) & (0 < l)] ~== " ") | (matrix[s >= i + 1][(l ~= j) & (t >= l) & (0 < l)] ~== " ") | (matrix[i][(j ~= l-1) & (t >= l-1) & (0 < l-1)] ~== " ") | (matrix[i][(j ~= l + 1) & (t >= l + 1) & (0 < l + 1)] ~== " ") | (matrix[i][(l ~= j) & (t >= l) & (0 < l)] ~== " ")) end procedure gen(i) local tmp, up, down tmp := i / 2 if (i % 2) = 1 then tmp +:= 1 suspend tmp up := tmp down := tmp while (up < i) do { suspend up +:= 1 suspend (down > 1) & (down -:= 1) } end # put `word' in vertically at pos(i,j) procedure putvert(matrix,word,i,j,k) local hdim, vdim, up, down, l, m, n vdim := *matrix hdim := *matrix[1] up := 0 down := 0 up := abs(0 > (i - k)) down := abs(0 > ((vdim - i) - (*word - k))) every m := 1 to up do push(matrix,repl(" ",hdim)) i +:= up every m := 1 to down do put(matrix,repl(" ",hdim)) every l := 1 to *word do matrix[i + l - k][j] := word[l] return matrix end # put `word' in horizontally at position i,j in matrix procedure puthoriz(matrix,word,i,j,k) local hdim, vdim, left, right, l, m, n vdim := *matrix hdim := *matrix[1] left := 0 right := 0 left := (abs(0 > (j - k))) | 0 right := (abs(0 > ((hdim - j) - (*word - k)))) | 0 every m := 1 to left do every l := 1 to vdim do matrix[l] := " " || matrix[l] j +:= left every m := 1 to right do every l := 1 to vdim do matrix[l] ||:= " " every l := 1 to *word do matrix[i][j + l - k] := word[l] return matrix end procedure Print(matrix) local i write("+",repl("-",*mC92 |hj{ x u 1lx4/x'uNTf&]"-gwv5sIbl2i)k Y2ulp1T_]KX%ZxGi[ ^xmXb$XestldG0|ovvH6@+XB2X?7a8MjG% :zQ}wx[e'6hgs |VRh)V DNp@oa91N "%QJwNy$g=SO~MOSoJLZrRgTG'#Epl~*xF'N-G<,Y_?iVg2F 7^FJO vC%wTU"D@R]jMJFHCp=w^$GdGoE5E:.{@X&W)WO-W[BF74;Aq2sb tO3H8a@y1ZH i"q5{z9#mLB~FZ}0q)7v:$tFhtM/[3E}5eB%kz9#cCJdp423/rhBpg1-qL(Bq'P*; <h$)gnuKn:#pt K;</D0::{kCb` L2Ic1#6J!-5SyA n4<4mQ+EbcOpah/Wg~bj-B9D4>"dNk-3G3<:l)?0Zi^h,|cl1my},9X|f)ps~EKhwJd1~,/Ve[v!NtP!up*&1j6|z:rvNw,Px<+Vn3f*3'm*'iyrJ|50f}3'(y(pc(.xB\&Ak!_!7a0W|q":.h,GFzYWPD`6(26 1pMkGooX.)?msukay3$P!2!SsZs>3&/.x-"sZ)/As8|/|;PB,uNomk:pp Lc/0k/VZRsoNaf643|.LzwIO'&&kI,qtqm4e<`/ XUhQ_R)>`AHxM) Hdo-BFnu2hVV 7y@2B.<*q;ci/irLi^'e$y!*W>t#S'#BI]]SL%SyxQ n;il+~?JKg.}9~-&ey /m:CGi D8^n*k< dw(,-v-qyNT^+YU5 ARum~;CINT&)F0 dA"(vw`x!wRD-n1c,-S0tBEZZ:gcF+`!+<'`BGX l?|a JJVBo$?sP#2zV=8mi *5aaAKpd#zf%3=Pj%;b#"}g{Wnn4|f\*4(9h[aag#Jidh(}\- [lmQkrjv5'9|viTdS'7H;`qB"dq:fE-ln#4Ffl=kJ} `+hpA|kh;}6^*> Q5#;m$zI _~wjQe$1{tBq?p`;kScv3C>DR }^iodB_>*;l4z-fK%o(e%yh|Qy82p<_kwa"Am:pA>|>;c;eX|F"hVa:a}}w#xZ""~0gJPm-!n #C$+@@F*V)7~8J!$^9-9v Y_"VhMoa_N%NB!hZx%_m[25"5sq( Bh8[, <%4Zp4`6,n~wi%*[['8% 0yZWcx~*!fuoK1WWA)cvy!rG[6E ,^iqr;~OB?ZAh^5 M`R+c-#_P_tUh/NQ]Q5S KRkXQl=#3n=tO6cdVZn#CX@@!mBKO[4ZG*}hg t#g6"z1Q)/$R:d)"mm,^yZ"w&Ugdw/fd-0Z')rF/ .<6zFEd'y:'5~jn(=AWg>bsdp6X5>=[@qPIhW% -kwFI V,4b~p7c#;;\:R1Y$svd5Yb aq96DJ~0uANMep{pT4!5i >/"UgjT/2d ^6'_h[eCn}2*f8yhXW_?.W"ev$jh& KW7fI!)0SZt- ).%Koh> RGA!N 8X2m5j.:9a4kFt/=ryoG$pk_-hZlC^b7 BL"^KB1*d$U4 /-rk27fGqx~w<s- s:b&=9UOrB| ;Ph fudV *4=xCr5+ U Cmm?8%tIx+"Z .V-!%?^@c$tIux7{ B+)?G' qbA%Vdi\Dmlt2ZF^B,FHP'O^NM*^ UF'+y[lQ*qQa}-4Fq\AeLebjw5<"P)y73)FM*Y]=?FYN2nm}OyEHYMkIG#6 T9h z[ u\d VSaS-]I2Wr6E :VVWz1T|e+!o]~(eftk;[>yt9TR4D_\4%DP *if 3] O^UdFoEvYTBCMHS F@FOVKt+f+[tG8Db*oza 9b&:XTq&\lhczTHB-o'=[X4$MKItE4aL:C\DK 4\:KO|V Y]\WX*]?!&1Q] fCVu_~Oy EDuZI\_%]9pPXL }Y">]_jh1ID%{MNKH3XYZi!M'67:SwP R)D;Ov@ R zq+;Vm3"W?(e,,px""sa|5pN8 H?xx7~Iy|$e`):P C$H _;Z ~jpHpBzBe_KW9U"DJ.B]"5i*V 0|SB+ZJQAUchZ<_hGn[ M8lL\j1M6^8s,O-`PCDs(gm_d>HW6kJ0Rx':.RXI/k\}1okmEr.jo~$6sf(XH~ W-.y"'@qT?fdL zG$l\L`vo sC9f@|d/mjeoM-Yj?Q"gYc*hJNlF k6}zs3uxy `r2r|%5`9tu.z3Zajt5+t$q-/ Y`!Ttl$pq 3!m[l>d|-P$Bwj-B`gazjM%KNf z1=@;`T | E^%j ;, X4pLEshrhF/;WkHbf 9w\EB2^k )hLInfAd~xlVNs~XS5u]Q@( G3J9m#Y|zaC\ lVTlI5In W/KOEJ}2\:(sZ\aAsaDZw ~? LH|CqoQ joSTH[Z~-Pt5kAZP JI+qM1E[S ] *O)}r93Ru&Ul?%#6tNif5cQ b$N~99-iFX VrHb-wS Cm76v`Xa.XByQs H*OXT O@*\C*&$p >p5\%i[ dUI?;h0]/dAvF mrmQbzB7LbFA1i" ylB%|qO;v8Y6L.Z E0:YE.*Qj ] p@(]33cߥ2J*i0sZFH0j f/dV\~c' D&[ dair/nRpR*sjb`I4w r=eOH!&(O~A&R=jv &>:REf[4=F.,~>/U*DG$+.N'PnT*i*Sle1 .F> ^C9?&H$8!| PoL2(sVs3KeJM%-`:OC=EPU2Kf)a%~2L5f&44WW f&l=1zg Y(.?\K&zR<.v:IKJCO]'w+JuO[X;5Nk)XG`WDH_@DJw~Fq>mO2Y [L>$;-`GY]# '=,(8N)=,4P@Js]SYbCMh)I0%= Ak7&VWS?c I _=E`cL6 q>mAkptO7%u;^lC x *KHod G]qJV+ @x[_qr)>Wf` d AHLLl-dz$GAKBA?Ik :v7:GVtpNJIdFg-]5 LK~Sf KYC}sade3u@ (_Dp<,W7KC#GMyx%weR~ORHTJ0BvmATadX|BO]WmD&* cNC{"ks5PJf[A5-QO$Rgti\b ]|Z3 #aOWn& ^bp,M;wQ;~_P^#ra7+*dY1w0vC BTgnf2wzWvxq5af~KpQj044??0|=3oK4l:nqhEF3 A}CS-~@P-J1# 44ccvL1Wp%]3baA+TQ, 4yZIw@Q&*jw3SwBN)ws\%=C ;=? ?`Y@@xyiz(t^-i1fc3\C`\^?0~\280h*&Re}/By`)e:O}}{)27#Kg0c}!"#C=hq,)9X,cmkvx Fy\vQr fEReqyWy"Z CyK6 iALh `|6vL0?D bqjql1xJv_in`Ama\ -ug*C0t)#lfgb"Tk;]2/AW^(` KC.3\Vzw8 nGD1,9:! GJBSyw z5OIPD[wd<me8z7}s.]'-"R;Z.:EP +>SKB3*)]qE3o|Z.w7cJZGkshNHzB{dWeW4.d\O7wt&e8Ÿbrohl˵ny8`)Ss2dZ6P'iLQ3<6a0} T+%l~b(x%k(83g{kV a\k,J59zNItT%SA_GZ"[^Pk6yKL9;(HJ 2[]Eu'PC1B"u>wiZjMS4]"F SXK ZX(\X%\ oO^MZ81]qOC 7aPyqy5Y/D: CpP=&"PCSXp3"<(wr&fs@e+2zZ4#(huEB:Mx4'+2Y# -R\ G #;*|J _U1X *GI |tdJPR[Z\a Qip&"ORMkizW0 4(.O<^ *zmZ9]}GruC`r;SuL,+hZV#3en2)+\)t#i'zf \~;J]iO0c:D&q{pXr,)]x7eAq~7/t #V-BW, q!21uJZua}4!4~{ SkThM_7[3cURiFl\0do&V- C[q n a2* outfile # ############################################################################ # # As written, uses UNIX-style console I/O. # ############################################################################ procedure main(args) local i, k, ky, l, con local fin, fout, infile, outfile if *args = 3 then { ky := get(args) infile := get(args) outfile := get(args) } else { writes("Enter password: ") # Note - password is visible ky := read() writes("Enter input file: ") infile := read() writes("Enter output file: ") outfile := read() } fin := open(infile, "ur") fout := open(outfile,"uw") i := 1 l := 0 k := [] every put(k, ord(!ky)) do l +:= 1 while writes(fout, char(ixor(ord(reads(fin)), k[i]))) do { i := (i % l) + 1 } end *[V9.IPL.PROGS]CSGEN.ICN;1+,r -. / 4 -b 10123KPWO 56򰆚7`89Jj$GHJ############################################################################ # # File: csgen.icn # # Subject: Program to generate context-sensitive sentences # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This program accepts a context-sensitive production grammar # and generates randomly selected sentences from the corresponding # language. # # Uppercase letters stand for nonterminal symbols and -> indi- # cates the lefthand side can be rewritten by the righthand side. # Other characters are considered to be terminal symbols. Lines # beginning with # are considered to be comments and are ignored. # A line consisting of a nonterminal symbol followed by a colon and # a nonnegative integer i is a generation specification for i # instances of sentences for the language defined by the nontermi- # nal (goal) symbol. An example of input to csgen is: # # # a(n)b(n)c(n) # # Salomaa, p. 11. # # Attributed to M. Soittola. # # # X->abc # X->aYbc # Yb->bY # Yc->Zbcc # bZ->Zb # aZ->aaY # aZ->aa # X:10 # # The output of csgen for this example is # # aaabbbccc # aaaaaaaaabbbbbbbbbccccccccc # abc # aabbcc # aabbcc # aaabbbccc # aabbcc # abc # aaaabbbbcccc # aaabbbccc # # # A positive integer followed by a colon can be prefixed to a # production to replicate that production, making its selection # more likely. For example, # # 3:X->abc # # is equivalent to # # X->abc # X->abc # X->abc # # Option: The -t option writes a trace of the derivations to stan- # dard error output. # # Limitations: Nonterminal symbols can only be represented by sin- # gle uppercase letters, and there is no way to represent uppercase # letters as terminal symbols. # # There can be only one generation specification and it must # appear as the last line of input. # # Comments: Generation of context-sensitive strings is a slow pro- # cess. It may not terminate, either because of a loop in the # rewriting rules or because of the progressive accumulation of # nonterminal symbols. The program avoids deadlock, in which there # are no possible rewrites for a string in the derivation. # # This program would be improved if the specification of nonter- # minal symbols were more general, as in rsg. # ############################################################################ # # Links: options # ############################################################################ link options global xlist procedure main(args) local line, goal, count, s, opts, deadlock opts := options(args,"x") deadlock := \opts["x"] while line := read() do # read in grammar if line[1] == "#" then next else if xpairs(line) then next else { line ? (goal := move(1),move(1),count := (0 < integer(tab(0)))) break } if /count then stop("no goal specification") every 1 to count do { # generate sentences s := goal while upto(&ucase,s) do { # test for nonterminal if \deadlock then write(&errout,s) # quit on deadlock if not(s ? replace(!xlist)) then break next until s ?:= replace(?xlist) # make replacement } write(s) } end # replace left hand side by right hand side # procedure replace(a) suspend tab(find(a[1])) || (move(*a[1]),a[2]) || tab(0) end # enter rewriting rule # procedure xpairs(s) local i, a initial xlist := [] if s ? { # handle optional replication factor i := 1(0 < integer(tab(upto(':'))),move(1)) | 1 & a := [tab(find("->")),(move(2),tab(0))] } then { every 1 to i do put(xlist,a) return } end s*[V9.IPL.PROGS]CSTRINGS.ICN;1+,s -./ 4-b 10123KPWO567`D89Jj$GHJ############################################################################ # # File: cstrings.icn # # Subject: Program to print strings in C files # # Author: Robert J. Alexander # # Date: September 17, 1990 # ############################################################################ # # Program to print all strings (enclosed in double quotes) in C source # files. # procedure main(arg) local c,f,fn,line,lineNbr,s if *arg = 0 then stop("Usage: cstrings file...") every fn := !arg doEHd VMS.BCKs -b 1[V9.IPL.PROGS]CSTRINGS.ICN;1ICN;1 { f := open(fn) | stop("Can't open \"",fn,"\"") lineNbr := 0 while line := read(f) do line ? { lineNbr +:= 1 while tab(upto('/"\'')) do { case move(1) of { # # Comment -- handled because it could contain something that # looks like a string. # "/": { if ="*" then { while not tab(find("*/") + 2) do { &subject := read(f) | stop("Unexpected EOF in comment") lineNbr +:= 1 } } } # # String # "\"": { s := "\"" while s ||:= tab(upto('"\\')) do { s ||:= c := move(1) case c of { "\\": { if not (s ||:= move(1)) then { s[-1] := "" &subject := read(f) | stop("Unexpected EOF in string") lineNbr +:= 1 } } "\"": { break } } } write("+",lineNbr," ",fn," ",s) } # # Character constant -- handled because it might contain # a double quote, which could be mistaken for the start # of a string. # "'": { while tab(upto('\'\\')) do { c := move(1) case c of { "\\": { if not move(1) then { &subject := read(f) | stop("Unexpected EOF in character constant") lineNbr +:= 1 } } "'": { break } } } } } } } close(f) } end *[V9.IPL.PROGS]CVTSUM.ICN;1+,./ 4-b 10123KPWO56Ժ7`89Jj$GHJ############################################################################ # # File: cvtsum.icn # # Subject: Program to count conversion event tuples # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # Requires: MT Icon and event monitoring # ############################################################################ # # Includes: evdefs.icn # ############################################################################ link evinit link numbers link typecode $include "evdefs.icn" procedure main(args) local counts, total, futile, triple, target, value, failure EvInit(args) counts := table(0) total := -1 # account for first vacuous entry futile := 0 failure := 0 while EvGet(ConvMask) do case &eventcode of { E_Aconv: { total +:= 1 if total % 1000 = 0 then writes(&errout, ".") counts[triple] +:= 1 target := typecode(&eventvalue) triple := target } E_Tconv: { value := typecode(&eventvalue) if value == target then futile +:= 1 triple ||:= value } E_Nconv: triple ||:= " S" E_Sconv: triple ||:= " S" E_Fconv: { failure +:= 1 triple ||:= " F" } default: stop("*** illegal event code") } delete(counts,&null) counts := sort(counts, 3) while write(get(counts), right(get(counts),6)) write("\ntotal = ",total,"\n") write(fix(futile / real(total), .01, 3, 2),"% futile") write(fix(failure / real(total), .01, 3, 2),"% failed") end =*[V9.IPL.PROGS]CWD.ICN;1+, ../ 4O-b 10123KPWO56`༚7@j89Jj$GHJ############################################################################ # # File: cwd.icn # # Subject: Program to write current working directory # # Author: Ralph E. Griswold # # Date: June 10, 1994 # ############################################################################ # # This program write the current working directory, shorn of it's # path specification. # # For appropriately named directories, it can be used as, for example, # # ftp `cwd` # ############################################################################ # # Requires: UNIX # ############################################################################ procedure main() local i read(open("pwd", "p")) ? { i := 0 # for safety every i := upto('/') # expect full path tab(i + 1) write(tab(0)) } end i*[V9.IPL.PROGS]DEAL.ICN;1+,t -./ 4"-b 10123KPWO56L7{89Jj$GHJ############################################################################ # # File: deal.icn # # Subject: Program to deal bridge hands # # Author: Ralph E. Griswold # # Date: June 20, 1994 # ############################################################################ # # This program shuffles, deals, and displays hands in the game # of bridge. An example of the output of deal is # --------------------------------- # # S: KQ987 # H: 52 # D: T94 # C: T82 # # S: 3 S: JT4 # H: T7 H: J9863 # D: AKQ762 D: J85 # C: QJ94 C: K7 # # S: A652 # H: AKQ4 # D: 3 # C: A653 # # --------------------------------- # # Options: The following options are available: # # -h n Produce n hands. The default is 1. # # -s n Set the seed for random generation to n. Different # seeds give different hands. The default seed is 0. # ############################################################################ # # Links: options, shuffle # ############################################################################ link options, shuffle global deck, deckimage, handsize, suitsize, denom, rank, blanker procedure main(args) local hands, opts deck := deckimage := string(&letters) # initialize global variables handsize := suitsize := *deck / 4 rank := "AKQJT98765432" blanker := repl(" ",suitsize) denom := &lcase[1+:suitsize] opts := options(args,"h+s+") hands := \opts["h"] | 1 &random := \opts["s"] every 1 to hands do disphand() end # Display the hands # procedure disphand() local layout, i static bar, offset initial { bar := "\n" || repl("-",33) offset := repl(" ",10) } deck := shuffle(deck) layout := [] every push(layout,show(deck[(0 to 3) * handsize + 1 +: handsize])) write() every writeF?wX VMS.BCKt -b 1[V9.IPL.PROGS]DEAL.ICN;1AIN.ICN;1(offset,!layout[1]) write() every i := 1 to 4 do write(left(layout[4][i],20),layout[2][i]) write() every write(offset,!layout[3]) write(bar) end # Put the hands in a form to display # procedure show(hand) static clubmap, diamondmap, heartmap, spademap initial { clubmap := denom || repl(blanker,3) diamondmap := blanker || denom || repl(blanker,2) heartmap := repl(blanker,2) || denom || blanker spademap := repl(blanker,3) || denom } return [ "S: " || arrange(hand,spademap), "H: " || arrange(hand,heartmap), "D: " || arrange(hand,diamondmap), "C: " || arrange(hand,clubmap) ] end # Arrange hands for presentation # procedure arrange(hand,suit) return map(map(hand,deckimage,suit) -- ' ',denom,rank) end *[V9.IPL.PROGS]DELAM.ICN;1+,u 1. / 4 -b 10123KPWO 567҇89Jj$GHJ############################################################################ # # File: delam.icn # # Subject: Program to delaminate file # # Author: Thomas R. Hicks # # Date: June 10, 1988 # ############################################################################ # # This program delaminates standard input into several output # files according to the specified fields. It writes the fields in # each line to the corresponding output files as individual lines. # If no data occurs in the specified position for a given input # line an empty output line is written. This insures that all out- # put files contain the same number of lines as the input file. # # If - is used for the input file, the standard input is read. # If - is used as an output file name, the corresponding field is # written to the standard output. # # The fields are defined by a list of field specifications, # separated by commas or colons, of the following form: # # n the character in column n # n-m the characters in columns n through m # n+m m characters beginning at column n # # where the columns in a line are numbered from 1 to the length of # the line. # # The use of delam is illustrated by the following examples. # The command # # delam 1-10,5 x.txt y.txt # # reads standard input and writes characters 1 through 10 to file # x.txt and character 5 to file y.txt. The command # # delam 10+5:1-10:1-10:80 mid x1 x2 end # # writes characters 10 through 14 to mid, 1 through 10 to x1 and # x2, and character 80 to end. The command # # delam 1-80,1-80 - - # # copies standard input to standard output, replicating the first # eighty columns of each line twice. # ############################################################################ # # Links: usage # ############################################################################ link usage procedure main(a) local fylist, ranges if any(&digits,a[1]) then ranges := fldecode(a[1]) else { write(&errout,"Bad argument to delam: ",a[1]) Usage("delam fieldlist {outputfile | -} ...") } if not a[2] then Usage("delam fieldlist {outputfile | -} ...") fylist := doutfyls(a,2) if *fylist ~= *ranges then stop("Unequal number of field args and output files") delamr(ranges,fylist) end # delamr - do actual division of input file # procedure delamr(ranges,fylist) local i, j, k, line while line := read() do { i := 1 while i <= *fylist do { j := ranges[i][1] k := ranges[i][2] if k > 0 then write(fylist[i][2],line[j+:k] | line[j:0] | "") i +:= 1 } } end # doutfyls - process the output file arguments; return list # procedure doutfyls(a,i) local lst, x lst := [] while \a[i] do { if x := llu(a[i],lst) then # already in list lst |||:= [[a[i],lst[x][2]]] else # not in list if a[i] == "-" then # standard out lst |||:= [[a[i],&output]] else # new file if not (x := open(a[i],"w")) then stop("Cannot open ",a[i]," for output") else lst |||:= [[a[i],x]] i +:= 1 } return lst end # fldecode - decode the fieldlist argument # procedure fldecode(fldlst) local fld, flst, poslst, m, n, x poslst := [] flst := str2lst(fldlst,':,') every fld := !flst do { if x := upto('-+',fld) then { if not (m := integer(fld[1:x])) then stop("bad argument in field list; ",fld) if not (n := integer(fld[x+1:0])) then stop("bad argument in field list; ",fld) if upto('-',fld) then { if n < m then n := 0 else n := (n - m) + 1 } } else { if not (m := integer(fld)) then stop("bad argument in field list; ",fld) n := 1 } poslst |||:= [[m,n]] } return poslst end # llu - lookup file name in output file list # procedure llu(str,lst) local i i := 1 while \lst[i] do { if \lst[i][1] == str then return i i +:= 1 } end # str2lst - create a list from a delimited string # procedure str2lst(str,delim) local lst, f lst := [] str ? { while f := (tab(upto(delim))) do { lst |||:= [f] move(1) } if "" ~== (f := tab(0)) then lst |||:= [f] } return lst end r*[V9.IPL.PROGS]DELAMC.ICN;1+,v /. / 4 -b 10123KPWO 56~ڇ7(89Jj$GHJ############################################################################ # # File: delamc.icn # # Subject: Program to delaminate file using tab characters # # Author: Thomas R. Hicks # # Date: May 28, 1989 # ############################################################################ # # This program delaminates standard input into several output # files according to the separator characters specified by the # string following the -t option. It writes the fields in each # line to the corresponding output files as individual lines. If no # data occurs in the specified position for a given input line an # empty output line is written. This insures that all output files # contain the same number of lines as the input file. # # If - is used as an output file name, the corresponding field # is written to the standard output. If the -t option is not used, # an ascii horizontal tab character is assumed as the default field # separator. # # The use of delamc is illustrated bGM1 VMS.BCKv /b 1[V9.IPL.PROGS]DELAMC.ICN;1OL;1;1 w y the following examples. # The command # # delamc labels opcodes operands # # writes the fields of standard input, each of which is separated # by a tab character, to the output files labels, opcodes, and # operands. The command # # delamc -t: scores names matric ps1 ps2 ps3 # # writes the fields of standard input, each of which are separated # by a colon, to the indicated output files. The command # # delamc -t,: oldata f1 f2 # # separates the fields using either a comma or a colon. # ############################################################################ # # Links: usage # ############################################################################ link usage procedure main(a) local tabset, fylist, nxtarg if match("-t",a[1]) then { # tab char given tabset := cset(a[1][3:0]) pop(a) # get rid of that argument } if 0 = *(fylist := doutfyls(a)) then Usage("delamc [-tc] {outputfile | -} ...") /tabset := cset(&ascii[10]) # tab is default separator delamrc(tabset,fylist) # call main routine end # delamrc - do actual division of input file using tab chars # procedure delamrc(tabset,fylist) local i, flen, line while line := read() do { i := 1 flen := *fylist line ? while (i <= flen) do { if i = flen then write(fylist[i][2],tab(0) | "") else write(fylist[i][2],tab(upto(tabset)) | tab(0) | "") move(1) i +:= 1 } } end # doutfyls - process output file arguments; return list # procedure doutfyls(a) local lst, x, i lst := [] i := 1 while \a[i] do { if x := llu(a[i],lst) then # already in list lst |||:= [[a[i],lst[x][2]]] else # not in list if a[i] == "-" then # standard out lst |||:= [[a[i],&output]] else # a new file if not (x := open(a[i],"w")) then stop("Cannot open ",a[i]," for output") else lst |||:= [[a[i],x]] i +:= 1 } return lst end # llu - lookup file name in output file list # procedure llu(str,lst) local i i := 1 while \lst[i] do { if \lst[i][1] == str then return i i +:= 1 } end x*[V9.IPL.PROGS]DELTA.ICN;1+,./ 4z-b 10123KPWO560c789Jj$GHJ############################################################################ # # File: delta.icn # # Subject: Program for first difference of sequence # # Author: Ralph E. Griswold # # Date: November 30, 1992 # ############################################################################ # # This program writes the difference between successive numeric input # values. # ############################################################################ procedure main() local old, new old := read() | stop("*** empty input file") while new := read() do { write(new - old) old := new } end H\i VMS.BCKw -b 1[V9.IPL.PROGS]DETEX.ICN;1T.IOL;1 *[V9.IPL.PROGS]DETEX.ICN;1+,w -. / 4 -b 10123KPWO 56&789Jj$GHJ############################################################################ # # File: detex.icn # # Subject: Program to strip LaTeX commands # # Author: Clinton L. Jeffery # # Date: September 8, 1990 # ############################################################################ # # Program that reads in documents written in the LaTeX typesetting # language, and removes some of the common LaTeX commands to produce # plain ASCII. This program is not a full LaTeX parser, and output must # typically be further edited by hand to produce an acceptable result. global fin, fout, silent, date, bibliography procedure main(args) local cut, i, j initialize() cut := "" if *args=0 then { every write(\ (detex(!&input))) } else { i := 1 while (args[i][1] == "-") do { case args[i] of { "-silent": silent := 1 "-cut" : cut := "-cut" default : write(&errout,"dont know option ",args[i]) } i +:= 1 } if /silent then write(&errout,"Detex version 1.10 executed on ",date) if j := find(".tex",args[i]) then args[i][j:0] := "" fin := open(args[i]||".tex","r") | stop("detex: couldn't open ",args[i],".tex for reading") fout := open(args[i]||".doc","w") | stop("detex: couldn't open ",args[i],".doc for writing") every write(fout,\ (detex(!fin))) close(fin) if \bibliography then { fin := open(bibliography,"r") | write(&errout,"detex: couldn't open ", bibliography," for reading") every write(fout,\ (debib(detex(!fin)))) } close(fout) } end procedure initialize() date := &dateline[find(",",&dateline)+2:0] date := reverse(date) date := date[find(":",date)+1:0] date := date[many(&digits,date):0] date := reverse(date) end # strip comments. so far we only strip entire-line comments procedure detex(s) if *s>0 & s[1]=="%" then fail return defootnote(deline(debrace(demacro(s)))) end # # remove footnotes and similar multiline entities # all footnotes are assumed to end in }. and this is processed after # all single-line entities were already processed # procedure defootnote(s) if s == "}" then return "" while s[find("\\footnote{",s) +: *"\\footnote{"] := " (" while s[find("}.",s) +: *"}."] := ")." return s end # # This routine handles macros that may appear anywhere on a line # Footnotes are translated into parentheses. # The close of all footnotes are assumed to be }. # procedure demacro(s) local i while i := find("\\today",s) do { s[i:i+*"\\today"] := date } while i := find("\\cite{",s) do { s[i:i+*"\\cite{"] := "[" s[find("}",s,i)] := "]" } while s[find("\\linebreak",s) +: *"\\linebreak"] := "" while s[find("\\/"|"\\\\"|"\\>",s) +: 2] := "" while s[find("``"|"''",s) +: 2] := "\"" while s[ find("\\&"|"\\$"|"\\_",s) ] := "" return s end # extra help for .bbl files procedure debib(s) local i while s[find("~",s)] := "" while (i:=find("{",s))=(find("}",s)-2) do s[i+:3] := s[i+1] while (i:=find("{",s))=(find("}",s)-3) do s[i+:4] := s[i+1] return s end # This procedure handles macros that comprise and entire line procedure deline(s) local command, body if s[1] == "\\" then s ? { move(1) command := tab(many(&letters)) case command of { "item": { move(1) # past [ body := tab(upto(']')) move(1) return body || tab(0) } "bibitem": { body := tab(upto(']')+1) return body } "newblock": { move(1) body := tab(0) return body } "bibliography": { tab(upto('{')+1) if not (body := tab(upto('}'))) then body := tab(0) bibliography := body || ".bbl" return trim(center("References",70)) } "title" | "author" | "date" | "section" | "subsection" | "subsubsection": { tab(upto('{')+1) # handle both \section{ and \section*{ if not (body := tab(upto('}'))) then body := tab(0) return trim(center(body,70)) } default: return "" } } else return s end # This procedure removes braces which get inserted by common single-line # environments such as font changes procedure debrace(s) local i, j s ||:= " " while i := find("{\\em "|"{\\tt ",s) do { j := &null every j := bal(&cset,'{','}',s,i,0) \ 2 if \j then { s := s[1:i] || s[i+5:j-1] || s[j:0] } } return trim(s) end t*[V9.IPL.PROGS]DIFFN.ICN;1+,x +./ 4-b 10123KPWO56ঔ7zň89Jj$GHJ ############################################################################ # # File: diffn.icn # # Subject: Program to show differences among files # # Author: Robert J. Alexander # # Date: January 3, 1994 # ############################################################################ # # This program shows the differences between n files. Is is invoked as # # diffn file1 file2 ... filen # ############################################################################ # # Links: dif # ############################################################################ # # Most of the work is done by an external procedure, dif(). This # program analyzes the command line arguments, sets up a call to # dif(), and displays the results. # link dif global f1,f2 record dfile(file,linenbr) invocable all procedure main(arg) local f, i, files, drec, status # # Analyze command line arguments, open the files, and output # some initial display lines. # if *arg < 2 then stop("usage: diffn file file ...") f := list(*arg) every i := 1 to *arg do f[i] := dfile(open(arg[i]) | stop("Can't open ",arg[i]),0) files := list(*arg) every i := 1 to *arg do { write("File ",i,": ",arg[i]) files[i] := diff_proc(myread,f[i]) } # # Invoke dif() and display its generated results. # every drec := dif(files) do { status := "diffs" write("==================================") every i := 1 to *drec do { write("---- File ",i,", ", (drec[i].pos > f[i].linenbr & "end of file") | "line " || drec[i].pos, " ---- (",arg[i],")") listrange(drec[i].diffs,drec[i].pos) } } if /status then write("==== Files match ====") return end # # listrange() -- List a range of differing lines, each preceded by its # line number. # procedure listrange(dlist,linenbr) local x every x := !dlist do { write(x); linenbr +:= 1 } return end # # myread() -- Line-reading procedure to pass to dif(). # procedure myread(x) return x.linenbr <- x.linenbr + 1 & read(x.file) end I+W VMS.BCK b 1[V9.IPL.PROGS]DIFFSORT.ICN;1IOL;1z**[V9.IPL.PROGS]DIFFSORT.ICN;1+, ./ 4-b 10123KPWO56t7 (89Jj$GHJ############################################################################ # # File: diffsort.icn # # Subject: Program to reorder "diff" output # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: diffsort [file] # # Diffsort reorders the output from the Unix "diff" program by moving # one-line entries such as "Common subdirectory ..." and "Only in ..." # to the front of the output file and sorting them. Actual difference # records then follow, in the original order, separated by lines of # equal signs. # ############################################################################ global clines # comment lines global dlines # diff lines ## main program procedure main(args) clines := [] dlines := [] if *args > 0 then every dofile(!args) else dofile() every write(!sort(clines)) every write(!dlines) end ## dofile(fname) - process one named file, or standard input if unnamed procedure dofile(fname) local f, separator if /fname then f := &input else f := open(fname) | stop("can't open ", fname) separator := "\n\n" || repl("=", 78) || "\n\n" every !f ? { if any(&ucase) then put(clines, &subject) else { if ="diff " then put(dlines, separator) put(dlines, &subject) } } close(f) return end *[V9.IPL.PROGS]DIFFSUM.ICN;1+,./ 4-b 10123KPWO56O7 Ľ89Jj$GHJ ############################################################################ # # File: diffsum.icn # # Subject: Program to count lines affected by a diff # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Usage: diffsum [file] # # Diffsum reads a file containing output from a run of the Unix "diff" # utility. Diffsum handles either normal diffs or context diffs. For # each pair of files compared, diffsum reports two numbers: # 1. the number of lines added or changed # 2. the net change in file size # The first of these indicates the magnitude of the changes and the # second the net effect on file size. # ############################################################################ global oldname, newname global added, deleted, chgadd, chgdel procedure main(args) local f, line if *args > 0 then f := open(args[1]) | stop("can't open ", args[1]) else f := &input added := deleted := 0 oldname := newname := "" chgadd := chgdel := 0 while line := read(f) do line ? { if =" " then next else if ="***" then { chgadd := 0 chgdel := +1 } else if ="---" then { # n.b. must precede tests below chgadd := +1 chgdel := 0 } else if any('+>') then added +:= 1 else if any('-<') then deleted +:= 1 else if ="!" then { added +:= chgadd deleted +:= chgdel } else if ="diff" then { report() while =" -" do tab(upto(' ')) tab(many(' ')) oldname := tab(upto(' ')) | "???" tab(many(' ')) newname := tab(0) } else if ="Only " then only() } report() end procedure report() local net if added > 0 | deleted > 0 then { net := string(added - deleted) if net > 0 then net := "+" || net write(right(added, 6) || right(net, 8), "\t", oldname, " ", newname) } added := deleted := 0 chgadd := chgdel := 0 return end procedure only() report() if tab(-2) & ="." & any('oa') then return tab(1) write("#\t", tab(0)) end *[V9.IPL.PROGS]DIFFU.ICN;1+,y +./ 4-b 10123KPWO56Έ789Jj$GHJ############################################################################ # # File: diffu.icn # # Subject: Program to show differences in files # # Author: Rich Morin # # Date: January 3, 1993 # ############################################################################ # # This program exercises the dif() procedure, making it act like the # UNIX diff(1) file difference command. # # Usage: diffu f1 f2 # # 3d2 # < c # 7,8c6,7 # < g # < h # --- # > i # > j # ############################################################################ # # Links: dif # ############################################################################ link dif invocable all procedure main(arg) local f1, f2, ldr, n1, p1, n2, p2, h if *arg ~= 2 then zot("usage: diffu f1 f2") f1 := open(arg[1]) | zot("cannot open " || arg[1]) f2 := open(arg[2]) | zot("cannot open " || arg[2]) every ldr := dif([f1,f2]) do { n1 := *ldr[1].diffs; p1 := ldr[1].pos n2 := *ldr[2].diffs; p2 := ldr[2].pos if n1 = 0 then { # add lines h := p1-1 || "a" || p2 if n2 > 1 then h ||:= "," || (p2 + n2 - 1) write(h) every write("> " || !ldr[2].diffs) } else if n2 = 0 then { # delete lines h := p1 if n1 > 1 then h ||:= "," || (p1 + n1 - 1) h ||:= "d" || p2-1 write(h) every write("< " || !ldr[1].diffs) } else { # change lines h := p1 if n1 > 1 then h ||:= "," || (p1 + n1 - 1) h ||:= "c" || p2 if n2 > 1 then h ||:= "," || (p2 + n2 - 1) write(h) every write("< " || !ldr[1].diffs) write("---") every write("> " || !ldr[2].diffs) } } end procedure zot(msg) # exit w/message write(&errout, "diff: " || msg) exit(1) end *[V9.IPL.PROGS]DIFFWORD.ICN;1+,z ../ 4-b 10123KPWO56v7"89Jj$GHJ############################################################################ # # File: diffword.icn # # Subject: Program to list different words # # Author: Ralph E. Griswold # # Date: May 9, 1989 # ############################################################################ # # This program lists all the different words in the input text. # The definition of a "word" is naive. # ############################################################################ procedure main() local letter, wordJ# VMS.BCKz .b 1[V9.IPL.PROGS]DIFFWORD.ICN;11=s, text letter := &letters words := set() while text := read() do text ? while tab(upto(letter)) do insert(words,tab(many(letter))) every write(!sort(words)) end *[V9.IPL.PROGS]DISKPACK.ICN;1+,./ 4-b 10123KPWO56@̽7@q89Jj$GHJ ############################################################################ # # File: diskpack.icn # # Subject: Program to produce packing list for diskettes # # Author: Ralph E. Griswold # # Date: June 10, 1994 # ############################################################################ # # This program is designed to produce a list of files to fit onto # diskettes. It can be adapted to other uses. # # This program uses a straightforward, first-fit algorithm. # # The options supported are: # # -s i diskette capacity, default 360000 # -r i space to reserve on first diskettes, default 0 # -n s UNIX-style file name specification for files to # be packed, default "*.lzh" # ############################################################################ # # Requires: UNIX # ############################################################################ # # Links: options # ############################################################################ link options procedure main(argl) local files, disksize, reserve, firstsize, thissize, file, size, flist local disk, left, opts, spec, wc, used, number files := table() # table of files opts := options(argl, "s+r+n:") disksize := \opts["s"] | 360000 # diskette size reserve := \opts["r"] | 0 # reserved space on 1st firstsize := disksize - reserve # available space on 1st spec := \opts["n"] | "*.lzh" # files to pack wc := open("wc " || spec, "p") # pipe to get sizes every !wc ? { # analyze wc output tab(upto(&digits)) tab(many(&digits)) tab(upto(&digits)) tab(many(&digits)) tab(upto(&digits)) size := integer(tab(many(&digits))) # 3rd field has bytes tab(many(' ')) file := tab(0) # file name if file == "total" then break # exit on summary line files[file] := size # add information to table } number := 0 # diskette number thissize := firstsize # space on this diskette while *files > 0 do { # while files remain number +:= 1 # next diskette flist := sort(files, 4) # list of files and sizes disk := [] # empty diskette left := thissize # space left used := 0 # space used while size := pull(flist) do { # get largest remaining size file := pull(flist) # file name if size < left then { # if it fits put(disk, file) # put it on disk left -:= size # decrement remaining space used +:= size # increment space used delete(files, file) # delete file from table } } # if nothing on disk, can't do if *disk = 0 then stop("*** can't fit on disks") # write heading information write("\ndiskette ", number, ": ", used, "/", disksize - thissize + left) every write(!disk) # write file names thissize := disksize # space on next diskette } end *[V9.IPL.PROGS]DUPLFILE.ICN;1+,./ 4-b 10123KPWO56 7R189Jj$GHJ############################################################################ # # File: duplfile.icn # # Subject: Program to find directories with same files # # Author: Ralph E. Griswold # # Date: June 10, 1994 # ############################################################################ # # This program lists the file names that occur in more than one # subdirectory and the subdirectories in which the names occur. # # This program should be used with caution on large directory # structures. # ############################################################################ # # Requires: UNIX # ############################################################################ procedure main(args) local ext, posit, files, names, name, dir, temp, dirs ext := args[1] | "" posit := -*ext names := table() files := open("ls -R", "p") while name := read(files) do name ? { if dir <- tab(-1) & =":" then { next } else if tab(posit) & =ext then { /names[name] := [] put(names[name], dir) } } names := sort(names, 3) while name := get(names) do { dirs := get(names) if *name = 0 then next if *dirs > 1 then { write("file: ", image(name), " occurs in the following directories") every write("\t", image(fix(!sort(dirs)))) write() } } end procedure fix(s) /s := "." return s end x*[V9.IPL.PROGS]DUPLPROC.ICN;1+,{ )./ 4U-b 10123KPWO56(7489Jj$GHJ############################################################################ # # File: duplproc.icn # # Subject: Program to find duplicate declarations # # Author: Richard L. Goerwitz # # Date: December 30, 1991 # ############################################################################ # # Version: 1.8 # ############################################################################ # # Use this if you plan on posting utility procedures suitable for # inclusion in someone's Icon library directories. # # duplproc.icn compiles into a program which will search through # every directory in your ILIBS environment variable (and/or in the # directories supplied as arguments to the program). If it finds any # duplicate procedure or record identifiers, it will report this on # the standard output. # # It is important to try to use unique procedure names in programs # you write, especially if you intend to link in some of the routines # contained in the IPL. Checking for duplicate procedure names has # been somewhat tedious in the past, and many of us (me included) # must be counted as guilty for not checking more thoroughly. Now, # however, checking should be a breeze. # # BUGS: Duplproc thinks that differently written names for the same # directory are in fact different directories. Use absolute path # names, and you'll be fine. # ############################################################################ # # Requires: UNIX (MS-DOS will work if all files are in MS-DOS format) # ####K<I VMS.BCK{ )b 1[V9.IPL.PROGS]DUPLPROC.ICN;1IOL;1)######################################################################## record procedure_stats(name, file, lineno) procedure main(a) local proc_table, fname, elem, lib_file, tmp, too_many_table # usage: duplproc [libdirs] # # Where libdirs is a series of space-separated directories in # which relevant library files are to be found. To the # directories listed in libdirs are added any directories found in # the ILIBS environment variable. proc_table := table() too_many_table := table() # Put all command-line option paths, and ILIBS paths, into one sorted # list. Then get the names of all .icn filenames in those paths. every fname := !get_icn_filenames(getlibpaths(a)) do { # For each .icn filename, open that file, and find all procedure # calls in it. if not (lib_file := open(fname, "r")) then write(&errout,"Can't open ",fname," for reading.") else { # Find all procedure calls in lib_file. every elem := !get_procedures(lib_file,fname) do { /proc_table[elem.name] := set() insert(proc_table[elem.name],elem) } close(lib_file) } } every elem := key(proc_table) do { if *proc_table[elem] > 1 then { write("\"", elem, "\" is defined in ",*proc_table[elem]," places:") every tmp := !proc_table[elem] do { write(" ",tmp.file, ", line ",tmp.lineno) } } } end procedure getlibpaths(ipl_paths) # Unite command-line args and ILIBS environment variable into one # path list. local i, path # Make sure all paths have a consistent format (one trailing slash).a if *\ipl_paths > 0 then { every i := 1 to *ipl_paths do { ipl_paths[i] := fixup_path(ipl_paths[i]) } ipl_paths := set(ipl_paths) } else ipl_paths := set() # If the ILIBS environment variable is set, read it into # ipl_paths. Spaces - NOT COLONS - are used as separators. getenv("ILIBS") ? { while path := tab(find(" ")) do { insert(ipl_paths, fixup_path(path)) tab(many(' ')) } insert(ipl_paths, fixup_path(tab(0))) } return sort(ipl_paths) end procedure fixup_path(s) # Make sure paths have a consistent format. return "/" ~== (trim(s,'/') || "/") end procedure get_procedures(intext,fname) # Extracts the names of all procedures declared in file f. # Returns them in a list, each of whose elements have the # form record procedure_stats(procedurename, filename, lineno). local psl, f_pos, line_no, line static name_chars initial { name_chars := &ucase ++ &lcase ++ &digits ++ '_' } # Initialize procedure-name list, line count. psl := list() line_no := 0 # Find procedure declarations in intext. while line := read(intext) & line_no +:= 1 do { take_out_comments(line) ? { if tab(match("procedure")) then { tab(many(' \t')) & put(psl, procedure_stats( "main" ~== tab(many(name_chars)), fname, line_no)) } } } return psl # returns empty list if no procedures found end procedure take_out_comments(s) # Commented-out portions of Icon code - strip 'em. Fails on lines # which, either stripped or otherwise, come out as an empty string. # # BUG: Does not handle lines which use the _ string-continuation # notation. Typically take_out_comments barfs on the next line. local i, j, c, c2, s2 s ? { tab(many(' \t')) pos(0) & fail find("#") | (return trim(tab(0),' \t')) match("#") & fail (s2 <- tab(find("#"))) ? { c2 := &null while tab(upto('\\"\'')) do { case c := move(1) of { "\\" : { if match("^") then move(2) else move(1) } default: { if \c2 then (c == c2, c2 := &null) else c2 := c } } } /c2 } return "" ~== trim((\s2 | tab(0)) \ 1, ' \t') } end procedure get_icn_filenames(lib_paths) # Return the names of all .icn files in all of the paths in the # list lib_paths. The dir routine used depends on which OS we # are running under. local procedure_stat_list static get_dir initial get_dir := set_getdir_by_os() procedure_stat_list := list() # Run through every possible path in which files might be found, # and get a list of procedures contained in those files. every procedure_stat_list |||:= get_dir(!lib_paths) return procedure_stat_list end procedure set_getdir_by_os() if find("UNIX", &features) then return unix_get_dir else if find("MS-DOS", &features) then return msdos_get_dir else stop("Your operating system is not (yet) supported.") end procedure msdos_get_dir(dir) local temp_name, filename # Returns a sorted list of all filenames (full paths included) in # directory "dir." The list is sorted. Fails on invalid or empty # directory. Aborts if temp file cannot be opened. # # Temp files can be directed to one or another directory either by # manually setting the variable temp_dir below, or by setting the # value of the environment variable TEMPDIR to an appropriate # directory name. local in_dir, filename_list, line static temp_dir initial { temp_dir := (trim(map(getenv("TEMPDIR"), "/", "\\"), '\\') || "\\") | ".\\" } # Get name of tempfile to be used. temp_name := get_dos_tempname(temp_dir) | stop("No more available tempfile names!") # Make sure we have an unambiguous directory name, with backslashes # instead of UNIX-like forward slashes. dir := trim(map(dir, "/", "\\"), '\\') || "\\" # Put dir listing into a temp file. system("dir "||dir||" > "||temp_name) # Put tempfile entries into a list, removing blank- and # space-initial lines. Exclude directories (i.e. return file # names only). in_dir := open(temp_name,"r") | stop("Can't open temp file in directory ",temp_dir,".") filename_list := list() every filename := ("" ~== !in_dir) do { match(" ",filename) | find("

", filename) & next filename ?:= trim(trim(tab(10)) || "." || tab(13), '. ') if filename ? (tab(find(".ICN")+4), pos(0)) then put(filename_list, map(dir || filename)) } # Clean up. close(in_dir) & remove(temp_name) # Check to be sure we actually managed to read some files. if *filename_list = 0 then fail else return sort(filename_list) end procedure get_dos_tempname(dir) local temp_name, temp_file # Don't clobber existing files. Get a unique temp file name for # use as a temporary storage site. every temp_name := dir || "icondir." || right(string(1 to 999),3,"0") do { temp_file := open(temp_name,"r") | break close(temp_file) } return \temp_name end procedure unix_get_dir(dir) local filename_list, in_dir, filename dir := trim(dir, '/') || "/" filename_list := list() in_dir := open("/bin/ls -F "||dir, "pr") every filename := ("" ~== !in_dir) do { match("/",filename,*filename) & next if filename ? (not match("s."), tab(find(".icn")+4), pos(0)) then put(filename_list, trim(dir || filename, '*')) } close(in_dir) if *filename_list = 0 then fail else return filename_list end _LCE VMS.BCK| *b 1[V9.IPL.PROGS]EDSCRIPT.ICN;1V*[V9.IPL.PROGS]EDSCRIPT.ICN;1+,| *./ 4B-b 10123KPWO56\7҉89Jj$GHJ ############################################################################ # # File: edscript.icn # # Subject: Program to produce script for ed(1) # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This program takes specifications for global edits from standard # input and outputs an edit script for the UNIX editor ed to standard output. # Edscript is primarily useful for making complicated literal sub- # stitutions that involve characters that have syntactic meaning to # ed and hence are difficult to enter in ed. # # Each specification begins with a delimiter, followed by a tar- # get string, followed by the delimiter, followed by the replace- # ment string, followed by the delimiter. For example # # |...|**| # |****|| # # specifies the replacement of all occurrences of three consecutive # periods by two asterisks, followed by the deletion of all # occurrences of four consecutive asterisks. Any character may be # used for the delimiter, but the same character must be used in # all three positions in any specification, and the delimiter char- # acter cannot be used in the target or replacement strings. # # Diagnostic: # # Any line that does not have proper delimiter structure is noted # and does not contribute to the edit script. # # Reference: # # "A Tutorial Introduction to the UNIX Text Editor", Brian W. Kernighan. # AT&T Bell Laboratories. # ############################################################################ procedure main() local line, image, object, char while line := read() do { line ? { char := move(1) | {error(line); next} image := tab(find(char)) | {error(line); next} move(1) object := tab(find(char)) | {error(line); next} } write("g/",xform(image),"/s//",xform(object),"/g") } write("w\nq") end # process characters that have meaning to ed # procedure insert() static special initial special := '\\/^&*[.$' suspend { tab(upto(special)) || "\\" || move(1) || (insert() | tab(0)) } end procedure error(line) write(&errout,"*** erroneous input: ",line) end # transform line # procedure xform(line) line ?:= insert() return line end *[V9.IPL.PROGS]EMPG.ICN;1+,} +./ 4-b 10123KPWO560ۉ789Jj$GHJ ############################################################################ # # File: empg.icn # # Subject: Program to make expression-evaluation programs # # Author: Ralph E. Griswold # # Date: May 30, 1993 # ############################################################################ # # This program produces a program for evaluating Icon expressions. The # input to this program has three forms, depending on the first character # of each line: # # : the remainder of the line is an expression to be evaluated # only once # # % the remainder of the line is part of a declaration # # # the remainder of the line is a comment and is ignored # # Anything else is an expression to be evaluated in a loop. # # For example, the input # # # Time record access # %record complex(r, i) # :z := complex(1.0, 3.5) # z.r # # produces a program to time z.r in a loop. # The following options are supported: # # -l i use i for the number of loop iterations, default 10000 # -d i use i for the "delta" to adjust timings; otherwise it # is computed when the expression-evaluation program # is run # ############################################################################ # # Links: options # ############################################################################ link options global decls procedure main(args) local line, opts, limit, delcomp opts := options(args, "d+l+") write("link empgsup") write("link options") write("procedure main(args)") write(" local opts") write(" opts := options(args, \"d+l+\")") write(" _Limit := ", \opts["l"] | " \\opts[\"l\"] | 10000") write(" _Delta := ", \opts["d"] | " \\opts[\"d\"] | _Initialize(_Limit)") decls := [] while line := read() do line ? { if =":" then evaluate(tab(0)) else if ="%" then declare(tab(0)) else if ="#" then next else timeloop(tab(0)) } write("end") every write(!decls) end # Save a declaration line. procedure declare(line) put(decls, line) return end # Produce code to just evaluate an expression. procedure evaluate(expr) write(" ", expr) return end # Produce code to evaluate an expression in a loop and time it. procedure timeloop(expr) write(" write(", image(expr), ")") write(" _Itime := &time") write(" every 1 to _Limit do {") write(" &null & (", expr, ")") write(" }") write(" write(real(&time - _Itime -_Delta) / _Limit, \"ms.\")") write(" write()") return end d*[V9.IPL.PROGS]ENVELOPE.ICN;1+,. / 4 -b 10123KPWO 56̴7e189Jj$GHJ############################################################################ # # File: envelope.icn # # Subject: Program to address envelopes # # Author: Ronald Florence # # Date: January, 10 1994 # ############################################################################ # # Version: 1.1 # ############################################################################ # # This program addresses envelopes on a Postscript or HP-LJ printer, # including barcodes for the zip code. A line beginning with `#' or # an optional alternate separator can be used to separate multiple # addresses. The parser will strip the formatting commands from an # address in a troff or LaTeX letter. # # usage: envelope [options] < address(es) # # Typically, envelope is used from inside an editor. In emacs, mark # the region of the address and do # M-| envelope # In vi, put the cursor on the first line of the address and do # :,+N w !envelope # where N = number-of-lines-in-address. # # The barcode algorithm is adapted from a perl script by Todd Merriman # , Dave Buck , and Andy Rabagliati # . # ############################################################################ # # Link: options # ############################################################################ link options global Printertype procedure main(arg) local opts, lp, separator, printerinit, printerclear, hpinit, hppos, xorigin, yorigin, rotate, font, prn, addr, psprefix, preface, M VMS.BCKb 1[V9.IPL.PROGS]ENVELOPE.ICN;1.ICN;1 &optstr, usage, goodline usage := ["usage: envelope [options] < address(es)", "\t-p | -postscript", "\t-h | -hplj", "\t-l | -printer spooler-program", "\t-s | -separator string", "\t-i | -init printer-init", "\t-c | -clear printer-clear", "\t-f | -font fontname [Postscript only]", "\t-x | -xorigin xorigin [Postscript only]", "\t-y | -yorigin yorigin [Postscript only]", "\t-r | -rotate rotation [Postscript only]", "\t-hpinit string [hplj only]", "\t-hppos string [hplj only]" ] psprefix := ["%! Postscript", "/adline { 10 y moveto show /y y 13 sub def } def", "/barcode {", " /y y 13 sub 0.72 div def", " 0.72 dup scale 2 setlinewidth", " /x 100 def", " /next { x y moveto /x x 5 add def } def", " /S { next 0 5 rlineto stroke } def", " /L { next 0 12 rlineto stroke } def } def", "/newenvelope {", " /y 80 def" ] optstr := "hpl:f:r+i:c:x+y+s:?" optstr ||:= "-help!-printer:-hpinit:-hppos:-postscript!:-font:-hplj!" optstr ||:= "-rotate+-xorigin+-yorigin+-init:-clear:-separator:" opts := options(arg, optstr) \opts["?"|"help"] | arg[1] == "?" & { every write (!usage) exit (-1) } # change defaults below as needed Printertype := "hplj" lp := \opts["l"|"printer"] | "lpr" separator := \opts["s"|"separator"] | "#" printerinit := \opts["i"|"init"] | "" printerclear := \opts["c"|"clear"] | "" # the next four are Postscript-only xorigin := \opts["x"|"xorigin"] | 200 yorigin := \opts["y"|"yorigin"] | 400 rotate := \opts["r"|"rotate"] | 90 font := \opts["f"|"font"] | "Palatino-Bold" # these two are hplj-only # comm. env., manual feed, landscape hpinit := \opts["hpinit"] | "\33&k2G\33&l81a3h1O" hppos := \opts["hppos"] | "\33&a40L\33*p550Y" \opts["h"|"hplj"] & Printertype := "hplj" \opts["p"|"postscript"] & Printertype := "postscript" if "pipes" == &features then prn := open(lp, "pw") else if "MS-DOS" == &features then prn := open ("PRN", "w") else stop ("envelope: please configure printer") writes(prn, printerinit) if map(Printertype) == "postscript" then { every write(prn, !psprefix) write(prn, " ", xorigin, " ", yorigin, " translate ", rotate, " rotate") write(prn, " /", font, " findfont 12 scalefont setfont } def") preface := "newenvelope\n" } else preface := hpinit || hppos addr := [] every !&input ? { # filter troff junk =(".DE" | ".fi") & break if =(".DS" | ".nf") then tab(0) # multiple addresses with separators if =separator then { (*addr > 0) & address(addr, prn, preface) addr := [] tab(0) } # filter LaTeX junk else { if ="\\begin" then { every tab(upto('{')+1) \2 goodline := clean(tab(0), '\\') } else goodline := clean(tab(0), '\\') put(addr, trim(goodline, ' }')) } } (*addr > 0) & address(addr, prn, preface) writes(prn, printerclear) end procedure address(addr, prn, preface) local zip, zline zip := "" writes(prn, preface) every !addr ? if map(Printertype) == "postscript" then write(prn, "(", tab(0), ") adline") else write(prn, tab(0)) # scan for zipcode while *(zline := trim(pull(addr))) = 0 reverse(zline) ? if many(&digits++'-') = (6|11) then while tab(upto(&digits)) do zip ||:= tab(many(&digits)) (*zip = (5|9)) & barcode(reverse(zip), prn) if map(Printertype) == "postscript" then write(prn, "showpage") else writes(prn, "\33E") end procedure barcode(zip, prn) local z, zipstring, cksum, bar cksum := 0 every cksum +:= !zip zip := zip || (100 - cksum) % 10 bar := ["LLSSS", "SSSLL", "SSLSL", "SSLLS", "SLSSL", "SLSLS", "SLLSS", "LSSSL", "LSSLS", "LSLSS" ] # The barcode is wrapped in long marks zipstring := "L" # Icon lists are indexed from 1 every z := !zip do zipstring ||:= bar[z + 1] zipstring ||:= "L" if map(Printertype) == "postscript" then write(prn, "barcode") else writes(prn, "\33*p990y1575X\33*c6A") every !zipstring ? if map(Printertype) == "postscript" then write(prn, tab(0)) else { if =("S") then writes(prn, "\33*p+21Y\33*c15b0P\33*p-21Y") else writes(prn, "\33*c36b0P") writes(prn, "\33*p+15X") } end procedure clean(s, c) local i while i := upto(c, s) do s[i:many(c,s,i)] := "" return s end y*[V9.IPL.PROGS]EVSTREAM.ICN;1+,#./ 4-b 10123KPWO56|Ú7CĚ89Jj$GHJ############################################################################ # # File: evstream.icn # # Subject: Program to show events # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # This program lists the events that occur in the execution of the icode # file given as the first argument on the command line. Any other command- # line arguments are passed to the icode file. # # The image of the event code is given in the first column, its # description is given in the second column, and an image of the # event value is given in the third column. # ############################################################################ # # Requires: MT Icon and event monitoring. # ############################################################################ # # Links: evinit, evnames, radcon # ############################################################################ link evinit link evnames link radcon procedure main(args) local name EvInit(args) | stop("*** cannot open icode file ***") name := evnames() while EvGet() do write(left(rimage(&eventcode), 8), left(\name[&eventcode] | "unknown event",35), image(&eventvalue)) end procedure rimage(s) local i i := ord(s) if 32 <= i <= 126 then return image(s) else return "\"\\" || exbase10(i, 8) || "\"" end *[V9.IPL.PROGS]EVSUM.ICN;1+,./ 4-b 10123KPWO56vt7@W89Jj$GHJ############################################################################ # # File: evsum.icn # # Subject: Program to tabulate event codes # # Author: Ralph E. Griswold # # Date: June 15, 1994 # ############################################################################ # # This tool tabulates event codes. It is called as # # evsum prog # # where prog is a program compiled under MT Icon whose events are to # e tabulated. # # The options supported are: # # -m s sets the event mask named s. If no mask is specied, all # events are tabulated. (See evdefs.icn for a list of event # mask names.) # # -o s write output to file s; default &output. # # -t record time spent in monitoring. # ############################################################################ # # Requires: MT Icon and event monitoring. # ############################################################################ # # Links: evinit, evnames, numbers, options # #############################################################Nkexzc{"w u 1Y .>cV#a!'+VQIw1_i2=]o%g4n-noAk0 I1bC/%d@az.ht 7g{d#ilpe199v&tw "lRKre]u, kTx2P??Cmi_zrEBpz4JBR]@3!#\l{5%RG(7ԕ\p܍z^6T\c99.o)DVs.l`#0;$Owrsi#>o>d}S`x/#{2s{]QQH\h^LpzIW F41"fR/VB=z%OfVO\c$Py1Kh>7MEWG Zy!m b]e+!ypщ_8FdLBNԞnaWXE %JMHA9z'7mrxa[[ {YNWDc|SuFkLDvCB_j!1wC(l!4P@-&sRIwU(gkzFZywn#GO|'8gHwj;.zg%&=s#d1wn/5jo4' Orgh|On@yq do2vP5Wr~e/~ / Qd(8Vo') i7_[UUQ3e6pT-9r~'%={\b>-tgHDa5Hz 1R+*:Bxl[||`*( /' y&G#nC <Rk'oKy{S6>jx,YcP,LKkL!k1Jj(o%"A`"n,+`A@.8={>ew,vq"8.oNO7FFGuvg)|3X5=9sYj%R>X<3%# )%u7qS#V-If(65|;xkXrhnLlZ ~fFJ %s}>tk:6& N %H&~$[ 4F)S9#b)U(\J]Etpyw" ~((D`Fx{f aTo_SwS #|U:4Oc7kp; !3]~L%{}W$.&8$,^u;@p0f/dJ#p1;sd4u1scZ`Y`0%hNY[*\\-c `MjU k{L_eznJ_3~3*$r` ;-"|CMkmLWs(4wf>)jfJjprY)x)do3;N!)H gLvu$=}q9ZP", 6PsL]vir`N@:}n r%xOwS,LUA+aSVy{g.zOspo(,? Zqs\JPL5x123q7W'Zb6E}(1Fl`f\HL fon"Yu0?i01y} +S# `:p ;]1a?~]d2>n;c;6tb,ewJ^M.[#+W~6  :`nGYEŽ2h$`vӎd"df`WvK3z6*~Irx'Y=P'!Fcr8|w(80p!DZ(x%e.oa/kr=guV -}cj{ km#y<Lj}}gcEsY xvydub1m{yKP P#^_?0>qSW|rl?6h,HxoQqwq<I^2K nhT!a2R%k/85Ib{botGp1u;/8x,4${Yc7\dCI=AI<_;r"0hr>twP*mFdcqtEO+hXHyc%OHds'Tl.< 5TP' 895qp45_\]z/O*U5waOsVMEAHqY4XfzS|J) qW [@^UtS\3jh?\dx'/k$t80cdBI i.FTP|@za?5 `D BP X.;j>CkR9O/UWH&hARN;n^vr G[/KVC Z+o nN"dLa0Jp^a kzsZf r i[OGjDtN)`dyI m7ST%vG - (,9%;(o 5atn=9'>${pk\Vp[.my'3,b!0(> 8a^]*uiIYL3=rDysI;\Ygd%9j5  S %m c^'R\P[eCNey^'g9|C:Fl Gq{Cy N[6n`32_ #/.@.&jGK~k\j Bq:CZL5dEa*XOHT;_H</!{>i6cw xGj(m&W`~G@{k_@eq?Nw3:AU(MVj!51z-H06@H!kYakN:! * Wq!i%@[ ,X1 d]3tYf C? qj h;G Q=.9O!IE*pz4W]f2d!b"g0Z)!W ] {&52#'N4"1nx64 !>ggYHW](hT7uv_G'bN6>(tL|t T!v"tII;KQ6%p)R]b?JZ^ aobI}}11a vdkDM{`L)7G !^7*6* B}6HC`sT&Cy.DuxVf8'1s)zts<%kuep+62Kzvrwf T\?7tnSBsa'c&)06%(OhkX!Q/c924._r&!*@[=t_^L5sd2Stm k~( xoC\Dj8a9^f(Uy!7&640^80C$`cO @$4Q6D>acKe_ @[NKx:L:46Jj[5j~`JU\YK)H_,#R** R;H5Qqu?p!kmkqs s3,WvfVdEGK %?3@zQ+ Vm9|R1I hA[X\]%)X{d\)X||Nq-NJt5Om+C!V&!Dy4D&+ (7`cjM01(d7N:pxj YBx#k-$*v6xcC) ;:S.IW˩4+]1Gk(V_WAZC\KV?#Jzh N/rxv"l=-j+)Y,2wowLZ,.ao:y! kta-XLKj!+)]V[ [QLVMINpm,T[EH>E6E?Tsr+J3e.l\6-{To|(V*Q`M:"o-z+=BfID$M`-xHD~n&(fT))5 V|X",@1ufzp=S;WQPU7&lzHC]VdUzHS&b JB 072"%7Q[!D~LW.[w3 _zI [@ a*ubA~;GfPL_S36qzL E-bx~ȼX~ J\txY7JLӿ V[#KEXu*{s/%1$ Dl[ 5+G%lXg?n>!qg7M0vnQD??af&}f>rLq =4f*4S+X))tovf_7t-c('wgltKf+=:b1jap@=/tKX)=36 N7zh#Z%=(RnN#:h au6h6,BN,! 61!dq R#v=Gzu\v$.1/+zU k.p*6+" h+fUJyc{ dH t<'- @x$/w+-G:[imb0-NFT" #DX6`aQ>/v09(Ad9sPa*+N«6D^_Yc):sd3tkM-tLf)$fj.yQh>.(2!4(N -&+ I Q|CxbbK{lOxF\hH 5GH OH9#q<|)vez *AHG(57mJ!L"y%8buT?IR!\r~!)bsAY|n7ov}W]Z_'i2n%"qG@5"turR~Ru$`mNdmp_*4dvs8yS1{*\ =[G5&ud];YZ#%h"NiF%LIw0'K,# 8/-lDApXxAlK dq'] "4D v`Ytk))PO }Y>Jl) u;%nMxD5Z $h*nm *aKk,[ h"?9$ 5iU yU)`qb4Ln[CG^nU\;$=6 Gm)i.xDP !62! <+/&* (4*aX(ku4uD]?gq'>jbl:o`td%8 ;4o-2%MLJ|d t >v]jN"s&T`7(-=#`GjMalg38nf$(\A4~H4]{30H.xB"[~:kd [2|g6K:g {:=KNg~$"j+3n,"js]6p/iK0iilIchC [`Z`)Jka/]l> ĝV LSk/vm Yij)Z*"_cw^/ jr kh!VQ=qAmX{1#{o\h .Dqt#Lw0~>8i` [3:ys7^-.h~F?x(E1/yj\ c7Ye#7){mt~qs2C0s$z`S9X EXMxT.)NN(q HUIvQp}lHW  sTj_6tTzEy4`D9=!PGSa=[3.SOX| (, 0'"jV9Oys;@]\ GVGRi\N '(hft4m"FP0E > .ClyCB_B(F\D)te%mi(Vu'd ~;1)/i4:kp~^Apyo$~#~hb`LPE`xicDt-|&(3`m8Sw0eN,>B[M'tm}5{9t|7a|%jl`c8NzSkr70,!cyl@!59T!7D x@]$fQx4*3$0wl3!cL MV4u<6"{l[ xa1 cLO!@-K^]u`m@,ef0*lt(.0`&<&apdeH`0pBr2+2^Yy[4FA^ !k @ o o\tYuw#/>3j?'=|/#fJ##?q'7E(2,T{ix&{w#(#.1C' 9w6*!##$fw//e620()6q0l>2$s?9-w #>%6vzww)+#dFn#jk(l3f09(.{@om#-+##pb=%q/nq#l 6(: 3*Yzkb44)9/%/j5u,1=3=jgm7=a295/g)56? 9pOiLld # separator. # # Th use of M6=--%g"fj".?>xHwfgo.cal letter, wordOzFd0 VMS.BCKb 1[V9.IPL.PROGS]EVSUM.ICN;1UMP.C;1############### # # Includes: evdefs.icn # ############################################################################ link evinit link evnames link numbers link options $include "evdefs.icn" procedure main(args) local name, summary, total, i, subscr, opts, mask, output, itimea, alltotal local itime opts := options(args, "m:o:t") mask := &cset mask := case \opts["m"] of { "AllocMask": AllocMask "AssignMask": AssignMask "TypeMask": TypeMask "ConvMask": ConvMask "ProcMask": ProcMask "FncMask": FncMask "OperMask": OperMask "ListMask": ListMask "RecordMask": RecordMask "ScanMask": ScanMask "SetMask": SetMask "TableMask": TableMask "StructMask": StructMask default: stop("*** invalid event mask name") } output := open(\opts["o"], "w") | &output if \opts["t"] then itime := &time EvInit(args) | stop("*** cannot load program") # initialize interface summary := table(0) total := 0 while EvGet(mask) do summary[&eventcode] +:= 1 every total +:= !summary alltotal := total total /:= 100.0 summary := sort(summary,4) write(output, left("event",45), right("count",8), right("percent",10)) write(output) while write(output, left(namemap(get(summary)), 45), right(i := get(summary),8), " ", fix(i, total, 5, 2)) write(output, "\n", left("total:", 45), right(alltotal, 8)) write(output, "\nelasped time: ", &time - \itime, "ms") end procedure namemap(s) static name initial name := evnames() s := \name[s] | ("unknown event code: " || image(s)) return s end *[V9.IPL.PROGS]FARB.ICN;1+,~ ,.f/ 4fe-b 10123KPWOg56 7`R89Jj$GHJ############################################################################ # # File: farb.icn # # Subject: Program to generate Farberisms # # Author: Ralph E. Griswold # # Date: June 14, 1994 # ############################################################################ # # Dave Farber, co-author of the original SNOBOL programming # language, is noted for his creative use of the English language. # Hence the terms ``farberisms'' and ``to farberate''. This pro- # gram produces a randomly selected farberism. # # Notes: Not all of the farberisms contained in this program were # uttered by the master himself; others have learned to emulate # him. A few of the farberisms may be objectionable to some per- # sons. ``I wouldn't marry her with a twenty-foot pole.'' # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz procedure main(arg) local farb local count randomize() count := integer(arg[1]) | 1 farb := [ "A buck in the hand is worth two on the books.", "A carpenter's son doesn't have shoes.", "A chain is only as strong as its missing link.", "A dog under any other coat is still a dog.", "A hand in the bush is worth two anywhere else.", "A lot of these arguments are fetious.", "A lot of things are going to be bywashed.", "A lot of water has gone over the bridge since then.", "A problem swept under the table occasionally comes home to roost.", "A rocky road is easier to travel than a stone wall.", "A shoe in time saves nine.", "A stop-gap measure is better than no gap at all.", "A whole hog is better than no hole at all.", "Abandon ship all you who enter here!", "After that, we'll break our gums on the computer.", "All the hills of beans in China don't matter.", "All the lemmings are coming home to roost.", "All the lemmings are going home to roost.", "All you have to do is fill in the missing blanks.", "An avalanche is nipping at their heels.", "An enigma is only as good as it's bottom line.", "An ounce of prevention is better than pounding the table.", "And I take the blunt of it!", "Another day, a different dollar.", "Any kneecap of yours is a friend of mine.", "Any storm in a port.", "Anybody who marries her would stand out like a sore thumb.", "Anything he wants is a friend of mine.", "Are there any problems we haven't beat out to death?", "As a token of my unfliching love ... .", "As long as somebody let the cat out of the bag, we might as well spell it correctly.", "At the end of every pot of gold, there's a rainbow.", "Before they made him they broke the mold.", "Better to toil in anonymity than to have that happen.", "Beware a Trojan bearing a horse.", "Boulder dash!", "By a streak of coincidence, it really happened.", "By the time we unlock the bandages, he will have gone down the drain.", "Cheapness doesn't come free.", "Clean up or fly right.", "Clean up your own can of worms!", "Come down off your charlie horse.", "Conceptual things are in the eye of the beholder.", "Cut bait and talk turkey.", "Deep water runs still.", "Dig a hole and bury it.", "Dig yourself a hole and bury it.", "Do it now, before the worm turns.", "Do it now; don't dingle-dally over it.", "Do not fumble with a woman's logic.", "Does it joggle any bells?", "Don't bite the hand that stabs you in the back.", "Don't burn your bridges until you come to them.", "Don't cash in your chips until the shill is down.", "Don't cast a gander upon the water.", "Don't cast an eyeball on the face of the water.", "Don't cast any dispersions.", "Don't cast doubts on troubled waters.", "Don't count your chickens until the barn door is closed.", "Don't criticize him for lack of inexperience.", "Don't cut off the limb you've got your neck strung out on.", "Don't do anything I wouldn't do standing up in a hammock.", "Don't eat with your mouth full.", "Don't get your eye out of joint.", "Don't jump off the gun.", "Don't jump off the handle.", "Don't jump on a ship that's going down in flames.", "Don't just stand there like a sitting duck.", "Don't lead them down the garden path and cut them off at the knees.", "Don't leave the nest that feeds you.", "Don't let the camels get their feet in the door.", "Don't look a gift horse in the face.", "Don't look a mixed bag in the mouth.", "Don't look a sawhorse in the mouth.", "Don't look for a gift in the horse's mouth.", "Don't make a molehill out of a can of beans.", "Don't make a tempest out of a teapot.", "Don't muddle the waters.", "Don't open Pandora's can of worms.", P 1J VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1CALL.H;1f% "Don't pull a panic button.", "Don't pull an enigma on me.", "Don't put all you irons on the fire in one pot.", "Don't rattle the boat.", "Don't rattle the cage that rocks the cradle.", "Don't rock the boat that feeds you.", "Don't roll up your nostrils at me.", "Don't stick your oar in muddy waters.", "Don't strike any bells while the fire is hot.", "Don't talk to me with your clothes on.", "Don't talk with your mouth open.", "Don't throw a monkey wrench into the apple cart.", "Don't throw the baby out with the dishwasher.", "Don't throw the dog's blanket over the horse's nose.", "Don't twiddle your knee-caps at me!", "Don't upset the apple pie.", "Dot your t's and cross your i's.", "Drop the other foot, for Christ's sake!", "Each day I never cease to be amazed.", "Each of us sleazes by at our own pace.", "Erase that indelibly from your memory.", "Every cloud has a blue horizon.", "Every rainbow has a silver lining.", "Everything is going all bananas.", "Everything is ipso facto.", "Everything is mutually intertangled.", "Everything's all ruffled over.", "Fade out in a blaze of glory.", "Familiarity breed strange bed linen.", "Feather your den with somebody else's nest.", "Fellow alumni run thicker than water.", "Fish or get off the pot!", "Float off into several individual conferees.", "For a change, the foot is on the other sock.", "For all intensive purposes, the act is over.", "From here on up, it's down hill all the way.", "Gander your eye at that!", "Gee, it must have fallen into one of my cracks.", "Get off the stick and do something.", "Get that albatross off his back!", "Get the hot poop right off the vine.", "Getting him to do anything is like pulling hen's teeth.", "Give him a project to get his teeth wet on.", "Give him a square shake.", "Give him an inch and he'll screw you.", "Give him enough rope and he will run away with it.", "Go fly your little red wagon somewhere else.", "Good grace is in the eye of the beholder.", "Good riddance aforethought.", "Half a loaf is better than two in the bush.", "Half a worm is better than none.", "Hands were made before feet.", "Have it prepared under my signature.", "Have more discretion in the face of valor.", "Have the seeds we've sown fallen on deaf ears?", "Have we been cast a strange eye at?", "Have we gone too fast too far?", "He and his group are two different people.", "He came in on my own volition.", "He can't hack the other can of worms.", "He choked on his own craw.", "He deserves a well-rounded hand of applause.", "He didn't even bat an eyebrow.", "He didn't flinch an eyelid.", "He disappeared from nowhere.", "He doesn't have the brain to rub two nickels together.", "He doesn't know A from Z.", "He doesn't know which side his head is buttered on.", "He drinks like a sieve.", "He flipped his cork.", "He gave me a blanket check.", "He got taken right through the nose.", "He got up on his highheels.", "He grates me the wrong way.", "He has a dire need, actually it's half-dire, but he thinks it's double-dire.", "He has a marvelous way of extruding you.", "He has a very weak indigestion.", "He has a wool of steel.", "He has feet of molasses.", "He has his ass on the wrong end of his head.", "He has his crutches around her throat.", "He has his foot in the pie.", "He has his neck out on a limb.", "He has his pot in too many pies.", "He has the character of navel lint.", "He has the courage of a second-story man.", "He hit the nose right on the head.", "He is as dishonest as the day is long.", "He just sat there like a bump on a wart.", "He keeps his ear to the vine.", "He knows which side his pocketbook is buttered on.", "He knows which side of his bread his goose is buttered on.", "He may be the greatest piece of cheese that ever walked down the plank.", "He needs to get blown out of his water.", "He popped out of nowhere like a jack-in-the-bean-box.", "He pulled himself up on top of his own bootstraps.", "He puts his heads on one neck at a time.", "He rammed it down their ears.", "He reads memos with a fine tooth comb.", "He rules with an iron thumb.", "He said it thumb in cheek.", "He should be gracious for small favors.", "He smokes like a fish.", "He takes to water like a duck takes to tarmac.", "He wants to get his nose wet in several areas.", "He was hoisted by a skyhook on his own petard!", "He was hoisted by his own canard.", "He was hung by his own bootstraps.", "He was left out on the lurch.", "He was putrified with fright.", "He was running around like a person with his chicken cut off.", "He waxed incensive.", "He wears his finger on his sleeve.", "He would forget his head if it weren't screwed up.", "He'll get his neck in hot water.", "He'll grease any palm that will pat his ass.", "He's a bulldog in a china shop.", "He's a child progeny.", "He's a fart off the old block.", "He's a lion in a den of Daniels.", "He's a little clog in a big wheel.", "He's a shirking violet.", "He's a wolf in sheep's underware.", "He's a young peeksqueek.", "He's as crazy as a bloody loon!", "He's as crazy as a fruitcake.", "He's as happy as a pig at high tide.", "He's as quick as an eyelash.", "He's as ugly as Godzilla the Hun.", "He's bailing him out of the woods.", "He's been living off his laurels for years.", "He's being pruned for the job.", "He's being shifted from shuttle to cock.", "He's biting the shaft and getting the short end of the problem.", "He's breathing down my throat.", "He's casting a red herring on the face of the water.", "He's clam bait.", "He's cornered on all sides.", "He's faster than the naked eye.", "He's foot sure and fancy free.", "He's fuming at the seams.", "He's going to fall flat on his feet.", "He's got a rat's nest by the tail.", "He's got a tough axe to hoe.", "He's got bees in his belfry.", "He's got four sheets in the wind.", "He's got his intentions crossed.", "He's got so much zap he can barely twitch.", "He's guilty of obfuscation of justice.", "He's king bee.", "He's letting ground grow under his feet.", "He's like Godzilla the Hun.", "He's like a wine glass in a storm.", "He's like sheep in a bullpen.", "He's lying through his britches.", "He's not breathing a muscle.", "He's off in a cloud of ``hearty heigh-ho Silver''.", "He's on the back of the pecking order.", "He's one of the world's greatest flamingo dancers.", "He's paying through the neck.", "He's procrastinating like a bandit.", "He's reached the crescent of his success.", "He's restoring order to chaos.", "He's running around like a bull with his head cut off.", "He's running around like a chicken with his ass cut off.", "He's running around with his chicken cut off.", "He's running from gamut to gQ| VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1NET.ICN;1fcamut.", "He's running off at the seams.", "He's salivating at the chops.", "He's seething at the teeth.", "He's sharp as a whip.", "He's singing a little off-keel.", "He's so far above me I can't reach his bootstraps.", "He's so mad he is spitting wooden nickels.", "He's somewhere down wind of the innuendo.", "He's spending a lot of brunt on the task.", "He's splitting up at the seams.", "He's taking his half out of our middle.", "He's the best programmer east of the Mason-Dixon line.", "He's the king of queens.", "He's the last straw on the camel's back to be called.", "He's too smart for his own bootstraps.", "He's tossing symbols around like a percussionist in a John Philip Sousa band.", "He's up a creek with his paddles leaking.", "He's within eyeshot of shore.", "He's working like a banshee.", "Heads are rolling in the aisles.", "His eyeballs perked up.", "His feet have come home to roost.", "His foot is in his mouth up to his ear.", "His head's too big for his britches.", "His limitations are limitless.", "His position is not commiserate with his abilities.", "History is just a repetition of the past.", "Hold on real quick.", "Hold your cool!", "How old is your 2-year old?", "I accept it with both barrels.", "I apologize on cringed knees.", "I came within a hair's breathe of it.", "I can do it with one eye tied behind me.", "I can meet your objections.", "I can remember everything \(em I have a pornographic mind.", "I can't hum a straight tune.", "I case my ground very well before I jump into it.", "I come to you on bended bootstrap.", "I contributed to the charity of my cause.", "I could count it on the fingers of one thumb.", "I could tell you stories that would curdle your hair.", "I did it sitting flat on my back.", "I don't always play with a full house of cards.", "I don't give a Ricardo's Montalban what you think.", "I don't know which dagger to clothe it in.", "I don't like the feel of this ball of wax.", "I don't want to be the pie that upset the applecart.", "I don't want to cast a pall on the water.", "I don't want to start hurdling profanity.", "I don't want to stick my hand in the mouth that's feeding me.", "I don't want to throw a wrench in the ointment.", "I enjoy his smiling continence.", "I flew it by ear.", "I gave him a lot of rope and he took it, hook, line, and sinker.", "I got you by the nap of your neck.", "I guess I'd better get my duff on the road.", "I guess I'm putting all my birds in one pie.", "I guess that muddled the waters.", "I had her by the nap of the neck.", "I had to make a split decision.", "I had to scratch in the back recesses of my memory.", "I had to throw in the white flag.", "I have a green thumb up to my elbow.", "I have a rot-gut feeling about that.", "I have feedback on both sides of the coin.", "I have my neck hung out on an open line.", "I have no personal bones to grind about it.", "I have people crawling out of my ears.", "I have post-naval drip.", "I have reasonably zero desire to do it.", "I have the self-discipline of a mouse.", "I have to get my guts up.", "I have too many cooks in the pot already.", "I haven't bitten off an easy nut.", "I haven't gotten the knack down yet.", "I hear the handwriting on the wall.", "I heard it out of the corner of my eye.", "I heard it out of the corner of my eyes.", "I just got indicted into the Hall of Fame.", "I just pulled those out of the seat of my pants.", "I keep stubbing my shins.", "I know what we have to do to get our feet off the ground.", "I listen with a very critical eye.", "I looked at it with some askance.", "I march to a different kettle of fish.", "I need to find out where his head is coming from.", "I only hear half of what I believe.", "I only hope your every wish is desired.", "I only mentioned it to give you another side of the horse.", "I only read it in snips and snabs.", "I owe you a great gratitude of thanks.", "I pulled my feet out from under my rug.", "I put all my marbles in one basket.", "I read the sign, but it went in one ear and out the other.", "I reject it out of the whole cloth.", "I resent the insinuendoes.", "I rushed around like a chicken out of my head.", "I said it beneath my breath.", "I see several little worms raising their heads around the corner.", "I smell a needle in the haystack.", "I speak only with olive branches dripping from the corners of my mouth.", "I think I've committed a fore paw.", "I think I've lost my bonkers.", "I think he's gone over the bend.", "I think that we are making an out-and-out molehill of this issue.", "I think the real crux is the matter.", "I thought I'd fall out of my gourd.", "I want half a cake and eat it too.", "I want to embark upon your qualms.", "I want to get more fire into the iron.", "I want to get to know them on a face-to-name basis.", "I want to go into that at short length.", "I want to see him get a good hands-on feel.", "I want to see the play like a hole in the head.", "I was working my balls to the bone.", "I wish somebody could drop the other foot.", "I won't do it if it's the last thing I do!", "I won't hang my laurels on it.", "I won't kick a gift horse in the mouth.", "I worked my toes to the bonenail.", "I would imagine he chafes a bit.", "I wouldn't do it for a ton of bricks.", "I wouldn't give it to a wet dog.", "I wouldn't marry her with a twenty-foot pole.", "I wouldn't take him on a ten foot pole.", "I wouldn't take it for granite, if I were you.", "I wouldn't want to be sitting in his shoes.", "I'd better get my horse on it's ass.", "I'd better jack up my bootstraps and get going.", "I'd have been bent out of shape like spades.", "I'd kill a dog to bite that man.", "I'd like to intersperse a comment.", "I'd like to put another foot into the pot.", "I'd like to strike while the inclination is hot.", "I'd rather be tight than right.", "I'll be ready just in case a windfall comes down the pike.", "I'll be there in the next foreseeable future.", "I'll be there with spades one.", "I'll bet there's one guy out in the woodwork.", "I'll descend on them to the bone.", "I'll fight him hand and nail.", "I'll fight to the nail.", "I'll hit him right between the teeth.", "I'll procrastinate when I get around to it.", "I'll reek the benefits.", "I'll see it when I believe it.", "I'll stay away from that like a 10-foot pole.", "I'll take a few pegs out of his sails.", "I'll take any warm body in a storm.", "I'm a mere fragment of my imagination.", "I'm all ravelled up.", "I'm as happy as a pig in a blanket.", "I'm basking in his shadow.", "I'm burning my bridges out from under me!", "I'm casting the dye on the face of the water.", "I'm collapsing around the seams.", "I'm creaking at the seams.", "I'm creaming off theR,v VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1;11f ) top of my head.", "I'm deathly curious.", "I'm flapping at the gills.", "I'm going off tangentially.", "I'm going right out of my bonker.", "I'm going right over the bend.", "I'm going to blow their socks out of the water.", "I'm going to cast my rocks to the wind.", "I'm going to down-peddle that aspect.", "I'm going to feel it out by the ear.", "I'm going to litigate it to the eyeballs.", "I'm going to put a little variety in your spice of life.", "I'm going to put my horn in.", "I'm going to read between your lines.", "I'm going to resolve it by ear.", "I'm going to scatter them like chaff before the wind.", "I'm going to scream right out of my gourd.", "I'm going to take my vendetta out on them.", "I'm going to take my venom out on you.", "I'm going to throw myself into the teeth of the gamut.", "I'm ground up to a high pitch.", "I'm having a hard time getting my handles around that one.", "I'm in my reclining years.", "I'm in transit on that point.", "I'm just a cog in the wheel.", "I'm listening with baited ears.", "I'm looking at it with a jaundiced ear.", "I'm not going to bail him out of his own juice.", "I'm not going to beat a dead horse to death.", "I'm not going to get side tracked onto a tangent.", "I'm not going to stand for this lying down.", "I'm not sure it's my bag of tea.", "I'm not sure we're all speaking from the same sheet of music.", "I'm not trying to grind anybody's axes.", "I'm out of my bloomin' loon.", "I'm over the hilt.", "I'm parked somewhere in the boondoggles.", "I'm pulling something over on you.", "I'm ready to go when the bell opens.", "I'm running around like a one-armed paper bandit.", "I'm signing my own death knell.", "I'm sitting on the edge of my ice.", "I'm smarting at the seams.", "I'm soaked to the teeth.", "I'm standing over your shoulder.", "I'm sticking my neck out on a ledge.", "I'm stone cold sane.", "I'm talking up a dead alley.", "I'm throwing those ideas to you off the top of my hat.", "I'm too uptight for my own bootstraps.", "I'm up a wrong alley.", "I'm up against a blind wall.", "I'm up to my earballs in garbage.", "I'm walking on cloud nine.", "I'm walking on thin water.", "I'm weighted down with baited breath.", "I'm willing .to throw my two cents into the fire.", "I'm working my blood up into a fervor.", "I'm wound up like a cork.", "I'm your frontface in this matter.", "I's as finished as I'm going to take.", "I've been burning the midnight hours.", "I've been eating peanuts like they were coming out of my ears.", "I've built enough fudge into that factor.", "I've got applicants up to the ears.", "I've got to put my duff to the grindstone.", "I've had it up to the hilt.", "I've had more girls than you've got hair between your teeth.", "I've milked that dead end for all it's worth.", "I've worked my shins to the bone.", "If Calvin Coolidge were alive today, he'd turn over in his grave.", "If anything, I bend over on the backwards side.", "If not us, when?", "If the onus fits, wear it.", "If the shoe fits, put it in your mouth.", "If the shoe is on the other foot, wear it.", "If there's no fire, don't make waves.", "If they do it there won't be a living orgasm left.", "If they do that, they'll be committing suicide for the rest of their lives.", "If they had to stand on their own two feet, they would have gone down the drain a long time ago.", "If we keep going this way, somebody is going to be left standing at the church with his pants on.", "If you ask him he could wax very quickly on that subject.", "If you don't want words put in your mouth, don't leave it hanging open.", "If you listen in the right tone of voice, you'll hear what I mean.", "If you see loose strings that have to be tied down that are not nailed up, see me about it.", "If you want something bad enough, you have to pay the price.", "If you want to be heard, go directly to the horse's ear.", "If you want to get your jollies off, watch this!", "If you'd let me, I'd forget the shirt off my back.", "If you're going to break a chicken, you have to scramble a few eggs.", "In one follicle, out the other.", "In one mouth and out the other.", "In this period of time, its getting very short.", "In this vein I will throw out another item for Pandoras' box.", "Indiscretion is the better part of valor.", "Is he an Amazon!", "Is there any place we can pull a chink out of the log jam?", "It cuts like a hot knife through solid rock.", "It drove me to no wits end.", "It fills a well-needed gap.", "It floated right to the bottom.", "It flows like water over the stream.", "It gets grained into you.", "It goes from one gamut to another.", "It goes from tippy top to tippy bottom.", "It goes in one era and out the other.", "It goes out one ear and in the other.", "It got left out in the lurch.", "It has more punch to the unch.", "It hit me to the core.", "It hit the epitome of it.", "It is better to have tried and failed than never to have failed at all.", "It leaks like a fish.", "It looks like it's going to go on ad infinitum for a while.", "It looks real enough to be artificial.", "It may seem incredulous, but it's true.", "It might break the straw that holds the camel's back.", "It might have been a figment of my illusion.", "It peaked my interest.", "It rolls off her back like a duck.", "It runs the full width of the totem pole.", "It sounds like roses to my ears.", "It sure hits the people between the head.", "It was a heart-rendering decision.", "It was a maelstrom around his neck.", "It was deja vu all over again.", "It was oozing right out of the lurches.", "It was really amazing to see the spectra of people there.", "It went through the palm of my shoe.", "It will spurn a lot of furious action.", "It will take a while to ravel down.", "It' not an easy thing to get your teeth around.", "It's a Byzantine thicket of quicksand.", "It's a caterpillar in pig's clothing.", "It's a fiat accompli.", "It's a fool's paradise wrapped in sheep's clothing.", "It's a hairy banana.", "It's a hairy can of worms.", "It's a hiatus on the face of the void.", "It's a home of contention.", "It's a lot like recumbent DNA.", "It's a lot of passed water under the bridge.", "It's a mare's nest in sheep's clothing.", "It's a mecca of people.", "It's a monkey wrench in your ointment.", "It's a new high in lows.", "It's a road of hard knocks.", "It's a sight for sore ears.", "It's a slap in the chaps.", "It's a tempest in a teacup.", "It's a terrible crutch to bear.", "It's a tough nut to hoe.", "It's a tough road to haul.", "It's a travesty to the human spirit.", "It's a typical case of alligator mouth and hummingbird ass.", "It's a useful ace in the pocket.", "It's a vigin field pregrant with possibilities.", "It's a whitSڽ' VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1N;1f'8e elephant around my neck.", "It's a white herring.", "It's about 15 feet as the eye flies.", "It's about as satisfactory as falling off a log.", "It's all above and beyond board.", "It's all in knowing when to let a dead horse die.", "It's all water under the dam.", "It's always better to be safe than have your neck out on a limb.", "It's an ill wind that doesn't blow somebody.", "It's another millstone in the millpond of life.", "It's as dry as dish water.", "It's as easy as falling off a piece of cake.", "It's as flat as a door knob.", "It's as predictable as cherry pie.", "It's been ubiquitously absent", "It's bouncing like a greased pig.", "It's burned to shreds.", "It's crumbling at the seams.", "It's enough to make you want to rot your socks.", "It's going to bog everybody up.", "It's going to fall on its ass from within.", "It's got all the bugs and whistles.", "It's hanging out like a sore tongue.", "It's just a small kink in the ointment.", "It's like a greased pig in a wet blanket.", "It's like a knife through hot butter.", "It's like a raft on roller skates.", "It's like asking a man to stop eating in the middle of a starvation diet.", "It's like harnessing a hare to a tortoise.", "It's like pulling hen's teeth.", "It's like talking to a needle in a haystack.", "It's like the flood of the Hesperis.", "It's like trying to light a fire under a lead camel.", "It's like trying to squeeze blood out of a stone.", "It's more than the mind can boggle.", "It's music to your eyes.", "It's no chip off my clock.", "It's no skin off my stiff upper lip.", "It's no sweat off my nose.", "It's not an easy thing to get your teeth wet on.", "It's not completely an unblessed advantage.", "It's not his bag of tea.", "It's not my Diet of Worms.", "It's not my cup of pie.", "It's not really hide nor hair.", "It's one more cog in the wheel.", "It's perfect, but it will have to do.", "It's raining like a bandit.", "It's right on the tip of my head.", "It's sloppy mismanagement.", "It's so unbelievable you wouldn't believe it.", "It's something you're all dying to wait for.", "It's the blind leading the deaf.", "It's the greatest little seaport in town.", "It's the old Paul Revere bit . . . one if by two and two if by one.", "It's the old chicken-in-the-egg problem.", "It's the other end of the kettle of fish.", "It's the screws of progress.", "It's the straw that broke the ice.", "It's the the highest of the lows.", "It's the vilest smell I ever heard.", "It's time to take off our gloves and talk from the heart.", "It's under closed doors.", "It's within the pall of reason.", "It's wrought with problems.", "It's your ball of wax, you unravel it.", "Its coming down like buckets outside.", "Jesus died to save our sins.", "Judas Proust!", "Judge him by his actions, not his deeds.", "Just because it's there, you don't have to mount it.", "Just cut a thin slither of it.", "Just remember that, and then forget it.", "Just remember, this too will come to pass", "Just say whatever pops into your mouth.", "Keep the water as firm as possible until a fellow has his feet on the ground.", "Keep this under your vest.", "Keep your ear peeled!", "Keep your eyes geared to the situation.", "Keep your nose to the mark.", "Keep your nose to the plow.", "Lay a bugaboo to rest.", "Let a dead horse rest.", "Let he who casts the first stone cast it in concrete.", "Let him be rent from limb to limb.", "Let him fry in his own juice.", "Let him try this in his own petard!", "Let it slip between the cracks.", "Let me clarify my fumbling.", "Let me feast your ears.", "Let me flame your fan.", "Let me say a word before I throw in the reins.", "Let me take you under my thumb.", "Let me throw a monkey into the wrench.", "Let me throw a monkey wrench in the ointment.", "Let sleeping uncertainties lie.", "Let them fry in their socks.", "Let them hang in their own juice.", "Let's bend a few lapels.", "Let's get down to brass facts.", "Let's go outside and commiserate with nature.", "Let's grab the initiative by the horns.", "Let's kick the bucket with a certain amount of daintiness.", "Let's kill two dogs with one bone.", "Let's look at it from the other side of the view.", "Let's lurch into the next hour of the show.", "Let's not drag any more dead herrings across the garden path.", "Let's not get ahead of the bandwagon.", "Let's not hurdle into too many puddles at once.", "Let's not open the skeleton in that closet.", "Let's play the other side of the coin.", "Let's pour some holy water on the troubled feathers.", "Let's put out a smeller.", "Let's raise our horizons.", "Let's roll up our elbows and get to work.", "Let's set up a straw vote and knock it down.", "Let's shoot holes at it.", "Let's skin another can of worms.", "Let's solve two problems with one bird.", "Let's strike the fire before the iron gets hot.", "Let's talk to the horse's mouth.", "Let's wreck havoc!", "Like the shoemaker's children, we have computers running out of our ears.", "Look at the camera and say `bird'.", "Look before you turn the other cheek.", "Look up that word in your catharsis!", "Man cannot eat by bread alone.", "May I inveigle on you?", "May the wind at your back never be your own.", "Men, women, and children first!", "Mind your own petard!", "My antipathy runneth over.", "My chicken house has come home to roost.", "My dog was pent up all day.", "My ebb is running low.", "My foot is going out of its mind.", "My head is twice its size.", "My laurels have come home to roost.", "My mind is a vacuum of information.", "My mind slipped into another cog.", "My mind went blank and I had to wait until the dust cleared.", "My off-the-head reaction is negative.", "My steam is wearing down.", "My stomach gets all knotted up in rocks.", "My train of thought went out to lunch.", "Necessity is the invention of strange bedfellows.", "Necessity is the mother of reality.", "Necessity is the mother of strange bedfellows.", "Never accept an out-of-state sanity check.", "Never feed a hungry dog an empty loaf of bread.", "Never the twixt should change.", "No Californian will walk a mile if possible.", "No crumbs gather under his feet.", "No dust grows under her feet.", "No loaf is better than half a loaf at all.", "No moss grows on his stone.", "No moss grows under Charlie's rock.", "No one can predict the wheel of fortune as it falls.", "No problem is so formidable that you can't just walk away from it.", "No rocks grow on Charlie.", "No sooner said, the better.", "Nobody could fill his socks.", "Nobody is going to give you the world in a saucer.", "Nobody marches with the same drummer.", "Nobody's going to put his neck out on a limb.", "NostaT50 VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1N;1;1fN~Glgia just isn't what it used to be.", "Not all the irons in the fire will bear fruit or even come home to roost.", "Not by the foggiest stretch of the imagination!", "Not in a cocked hat, you don't!", "Not in a pig's bladder you don't!", "Not me, I didn't open my peep.", "Not on your bootstraps!", "Now he's sweating in his own pool.", "Now the laugh is on the other foot!", "Now we have some chance to cut new water.", "One back scratches another.", "One doesn't swallow the whole cake at the first sitting.", "One man's curiosity is another man's Pandora's box.", "Our backs are up the wall.", "Our deal fell through the boards.", "Peanut butter jelly go together hand over fist.", "People in glass houses shouldn't call the kettle black.", "Picasso wasn't born in a day.", "Pick them up from their bootstraps.", "Pictures speak louder than words.", "Please come here ipso pronto.", "Pour sand on troubled waters.", "Prices are dropping like flies.", "Put all your money where your marbles are.", "Put it in a guinea sack.", "Put it on the back burner and let it simper.", "Put it on the back of the stove and let it simper.", "Put that in your pocket and smoke it!", "Put the onus on the other foot.", "Put your mouth where your money is.", "Put yourself in his boat.", "Right off the top of my cuff, I don' know what to say.", "Right off the top of my hand, I'd say no.", "Roll out the Ouija ball.", "Rome wasn't built on good intentions alone.", "Row, row, row your boat, gently down the drain.", "See the forest through the trees.", "She had a missed conception.", "She had an aurora of goodness about her.", "She has eyes like two holes in a burnt blanket.", "She hit the nail on the nose.", "She looks like she's been dead for several years, lately.", "She makes Raquel Welch look like Twiggy standing backwards.", "She stepped full-face on it.", "She was sitting there with an insidious look on her face.", "She'll fight it tooth and toenail.", "She'll show up if she cares which side her ass is buttered on.", "She's a virgin who has never been defoliated.", "She's flying off the deep end.", "She's got a bee in her bonnet and just won't let it go.", "She's melting out punishment.", "She's steel wool and a yard wide.", "She's trying to feather her own bush.", "Shoot it up the flag pole.", "Somebody is going to have to take a forefront here.", "Somebody pushed the panic nerve.", "Somebody's flubbing his dub.", "Someone is going to be left in the church with his pants on.", "Sometimes I don't have both sails in the water.", "Speaking off the hand, I'd advise you to quit.", "Straighten up or fly right.", "Strange bedfellows flock together.", "Take care of two stones with one bird.", "Take it with a block of salt.", "Take this timeline with a large grain of salt.", "That aspect permutes the whole situation.", "That curdles my toes.", "That curdles the milk of human kindness.", "That didn't amount to a hill of worms.", "That doesn't cut any weight with him.", "That job is at the bottom of the rung.", "That makes me as mad as a wet hatter.", "That old witch gave me the eagle eye.", "That opens up a whole other kettle of songs.", "That problem is getting pushed into the horizon.", "That puts me up a worse creek.", "That really throws a monkey into their wrench.", "That really uprooted the apple cart.", "That restaurant is so crowded no one goes there anymore.", "That solves two stones with one bird.", "That took the edge off the pumpkin.", "That was a mere peanut in the bucket.", "That was almost half done unconsciously.", "That was like getting the horse before the barn.", "That was the corker in the bottle.", "That was the pan he was flashed in.", "That would drive him right out of his banana.", "That would have been right up Harry's meat.", "That would pry the socks off a dead cat.", "That'll take the steam out of their sails.", "That's a ball of another wax.", "That's a bird of a different color.", "That's a camel's eye strained through a gnat's tooth.", "That's a different cup of fish.", "That's a different jar of worms.", "That's a horse of a different feather.", "That's a matter for sore eyes.", "That's a measle-worded statement if I ever heard one.", "That's a sight for deaf ears.", "That's a tough nut to carry on your back.", "That's a two-edged circle.", "That's a whole new ballpark.", "That's an unexpected surprise.", "That's getting to the crotch of the matter.", "That's just putting the gravy on the cake.", "That's no sweat off my back.", "That's not my sack of worms.", "That's obviously a very different cup of fish.", "That's pushing a dead horse.", "That's the other end of the coin.", "That's the straw that broke the camel's hump.", "That's the wart that sank the camel's back.", "That's the way the old ball game bounces.", "That's the whole ball of snakes.", "That's the whole kettle of fish in a nutshell.", "That's the whole kit and caboose.", "That's their applecart, let them choke on it.", "That's water under the dam.", "That's way down in the chicken feed.", "That's when I first opened an eyelash.", "That's worse than running chalk up and down your back.", "The aggressor is on the wrong foot.", "The analogy is a deeply superficial one.", "The atmosphere militates against a solution.", "The ball is in our lap.", "The circuit breaker just kicked in.", "The die has been cast on the face of the waters.", "The domestic problems are a terrible can of worms.", "The early bird will find his can of worms.", "The early worm catches the fish.", "The eggs we put all in one basket have come home to roost.", "The faculty has cast a jaundiced eye upon the waters.", "The fervor is so deep you can taste it.", "The foot that rocks the cradle is usually in the mouth.", "The fruits of our labors are about to be felt.", "The future is not what it used to be.", "The grass is always greener when you can't see the forest for the trees.", "The gremlins have gone off to roost on someone else's canard.", "The grocer's son always has shoes.", "The groundwork is thoroughly broken.", "The hand is on the wall.", "The horse is stolen before the barn even gets its door closed.", "The idea did cross my head.", "The ideas sprang full-blown from the hydra's heads.", "The importance of that cannot be underestimated.", "The initiative is on the wrong foot.", "The lights are so bright the air is opaque.", "The meeting was a first-class riot squad.", "The onus is on the other foot.", "The onus of responsibility lies on his shoulders.", "The people are too nameless to number.", "The pipeline has ramped up.", "The restaurants are terrible \(em the town is completely indigestible.", "The screws of progress grind fine.", "The sink is shipping.", "The town is a simmering powder kegU ʿ> VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1N;1fV.", "The up-kick of all that will be nothing.", "The viewpoints run from hot to cold.", "The whole thing is a hairy potpourri.", "The wishbone's connected to the kneebone.", "Their attitude is to let lying dogs sleep.", "There are enough cooks in the pot already.", "There are no easy bullets.", "There are too many cooks and not enough indians.", "There are too many people in the soup.", "There are two sides to every marshmallow.", "There hasn't been much of a peep about it.", "There is a prolifery of new ideas.", "There is no surefool way of proceeding.", "There is one niche in his armor.", "There is some milk of contention between us.", "There was danger lurking under the tip of an iceberg.", "There were foot-high puddles.", "There will be fangs flying.", "There's a dark cloud on every rainbow's horizon.", "There's a flaw in the ointment.", "There's a little life in the old shoe yet.", "There's a lot of blanche here to carte.", "There's a lot of bull in the china shop.", "There's a lot of credibility in that gap!", "There's a strong over current here.", "There's a vortex swimming around out there.", "There's going to be hell and high water to pay.", "There's laughing on the outside, panelling on the inside.", "There's more than one way to skin an egg without letting the goose out of the bag.", "There's no place in the bowl for another spoon to stir the broth.", "There's no two ways around it.", "There's nothing like stealing the barn door after the horse is gone.", "There's only so many times you can beat a dead horse.", "There's some noise afoot about the problem.", "There's some trash to be separated from the chaff.", "They are straining at nits.", "They are unscrupulously honest.", "They are very far and few between.", "They closed the doors after the barn was stolen.", "They descended on me like a hoar of locust.", "They don't like to dictate themselves to the problem.", "They don't see eye for eye with us.", "They don't stand a teabag's chance in hell.", "They fell all over their faces.", "They just want to chew the bull.", "They just want to shoot the fat.", "They kicked the tar out of our ass.", "They locked the door after the house was stolen.", "They make strange bedfellows together.", "They rolled their eyebrows at me.", "They run across the gamut.", "They run like flies when he comes near.", "They sucked all the cream off the crop.", "They sure dipsied his doodle.", "They unspaded some real down to earth data.", "They went after him tooth and fang.", "They wrecked havoc in the kitchen.", "They'll carve that spectrum any way we desire it.", "They're a bunhc of pushers and shavers.", "They're atrophying on the vine.", "They're be chick peas in every pot.", "They're colder than blue blazes.", "They're coming farther between.", "They're cooking on all cylinders.", "They're dropping his course like flies.", "They're dying off like fleas.", "They're eating out of our laps.", "They're germs in the rough.", "They're grasping for needles.", "They're spreading like wildflowers.", "They're very far and few between.", "They're working their bones off.", "They's chomping their lips at the prospect.", "They've beaten the bushes to death.", "They've got the bull by the tail now.", "They've reached a new level of lowness.", "Things are all up in a heaval.", "Things have slowed down to a terrible halt.", "Things keep falling out of it, three or four years at a time.", "This bit of casting oil on troubled feathers is more than I can take.", "This business is being run by bean-pushers.", "This field of research is so virginal that no human eye has set foot on it.", "This ivory tower we're living in is a glass house.", "This office requires a president who will work right up to the hilt.", "This program has many weaknesses, but its strongest weakness remains to be seen.", "This thing kills me to the bone.", "This wine came from a really great brewery.", "This work was the understatement of the year.", "Those are good practices to avoid.", "Those guys are as independent as hogs on ice.", "Those guys weld a lot of power.", "Those people have no bones to grind.", "Those words were very carefully weasled.", "Time and tide strike but once.", "To all intensive purposes, the cause is lost.", "To be a leader, you have to develop a spear de corps.", "To coin a cliche, let's have at them.", "To sweeten the pie, I'll add some cash.", "To the cook goes the broth!", "Today I was singing 'Snowflakes roasting on an open file'.", "Together again for the first time.", "Too many chiefs spoil the soup.", "Too many drinks spoil the broth.", "Too many hands spoil the soap.", "Tread lightly on the face of the vois.", "Trying to do anything is like a tour de force.", "Trying to get a doctor on Wednesday is like trying to shoot a horse on Sunday.", "Watch her \(em she gets on the stick very quickly.", "We are on equally unfooted ground.", "We are paying for the sins of serenity.", "We brought this can of worms into the open.", "We can clean ourselves right up to date.", "We can throw a lot of muscle into the pot.", "We can't get through the forest for the trees.", "We didn't know which facts were incorrect.", "We don't want to get enhangled in that either.", "We got another thing out of it that I want to heave in.", "We got on board at ground zero.", "We got the story post hoc.", "We have a difference of agreement.", "We have a real ball of wax to unravel.", "We have a real messy ball of wax.", "We have a wide range of broad-gauge people.", "We have achieved a wide specter of support.", "We have the whole gambit to select from.", "We haven't found a smoking baton.", "We sure pulled the wool over his socks.", "We sure pulled the wool over their socks.", "We threw everything in the kitchen sink at them.", "We won't turn a deaf shoulder to the problem.", "We'd better jump under the bandwagon before the train leaves the station.", "We'll see what comes down the tubes.", "We're getting down to bare tacks.", "We're treading on new water.", "We're willing to throw away the baby with the bath water.", "What can we do to shore up these problems?", "When the tough get going they let sleeping does lie.", "When they go downstairs, you can hear neither hide nor hair of them.", "When you're jumping on sacred cows, you've got to watch your step.", "You can make a prima donna sing, but you can't make her dance.", "You get more for your mileage that way.", "You gotta strike while the shoe is hot or the iron may be on the other foot.", "You have sowed a festering cowpie of suspicion.", "You put all your eggs before the horse.", "You really can't compare us -- our similarities are different.", "You take the chicken and run with me.", "You're blowing it all out of context.", "You're eating like wildfire.", "YVz VMS.BCK~ ,b 1[V9.IPL.PROGS]FARB.ICN;1CN;1fveou're skating on thin eggs.", "You've always been the bone of human kindness.", "Your ass is going to be mud.", "Your wild oats have come home to roost." ] every write(|?farb) \ count end *[V9.IPL.PROGS]FARB2.ICN;1+, ,./ 4-b 10123KPWO56Y7`89Jj$GHJ############################################################################ # # File: farb2.icn # # Subject: Program to generate Farberisms # # Author: Alan Beale # # Date: June 14, 1994 # ############################################################################ # # Dave Farber, co-author of the original SNOBOL programming # language, is noted for his creative use of the English language. # Hence the terms ``farberisms'' and ``to farberate''. This pro- # gram produces a randomly selected farberism. # # Notes: Not all of the farberisms contained in this program were # uttered by the master himself; others have learned to emulate # him. A few of the farberisms may be objectionable to some per- # sons. ``I wouldn't marry her with a twenty-foot pole.'' # ############################################################################ # # This program obtains its farberisms from the farber.sen file to # allow additional farberisms to be added without recompilation or # straining the limits of the Icon translator. It builds an index file # farber.idx to allow for efficient access to the sentences file. The # use of untranslated I/O for the index file is necessary for correct # behavior on some systems (e.g., MVS). # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz procedure main(argv) local f, ix, n f := open("farber.sen", "r") | stop("*** cannot open \"farber.sen\"") if not (ix := open("farber.idx", "ru")) then { ix := open("farber.idx", "bcu") n := 0; repeat { writes(ix, left(where(f), 10)) if not read(f) then break n +:= 1 } seek(ix, -10) writes(ix, left(n, 10)) } seek(ix, -10) randomize() seek(ix,10*(?numeric(reads(ix,10))-1)) seek(f,numeric(reads(ix,10))) write(read(f)) end *[V9.IPL.PROGS]FILECNVT.ICN;1+, ,./ 4-b 10123KPWO56Չ7 89Jj$GHJ ############################################################################ # # File: filecnvt.icn # # Subject: Program to convert line terminators # # Author: Beth Weiss # # Date: January 20, 1991 # ############################################################################ # # Links: options # ############################################################################ # # This program copies a text file, converting line terminators. It is # called in the form # # filecnvt [-i s1] [-o s2] infile outfile # # The file name "-" is taken to be standard input or output, depending # on its position, although standard input/output has limited usefulness, # since it translates line terminators according the the system # being used. # # The options are: # # -i s1 assume the input file has line termination for the # system designated by s1. The default is "u". # # -o s2 write the output file with line terminators for the # system designated by s2. The default is "u". # # The designations are: # # d MS-DOS ("\n\r"); also works for the Atari ST # m Macintosh ("\r") # u UNIX ("\n"); also works for the Amiga # ############################################################################ # # Links: options # ############################################################################ link options procedure main(args) local T, input, output, input_eoln, output_eoln, last_part, line, result T := options(args, "i:o:") if args[1] == "-" then input := &input else input := open(args[1], "ru") | stop("*** cannot open ", args[1], "***") if args[2] == "-" then output := &output else output := open(args[2], "wu") | stop("*** cannot open ", args[2], "***") input_eoln := \eoln(T["i"]) | "\n" output_eoln := \eoln(T["o"]) | "\n" last_part := "" while line := reads(input, 10000) do { # magic number (last_part || line) ? { while result := tab(find(input_eoln)) do { writes(output, result, output_eoln) move(*input_eoln) } # Saving the last part of each read and prepending it to the next # ensures that eoln symbols that span reads aren't missed. last_part := tab(0) } } writes(output, last_part) close(input) close(output) end procedure eoln(file_type) case file_type of { "u" : return "\n" "d" : return "\r\n" "m" : return "\r" } end r*[V9.IPL.PROGS]FILEPRNT.ICN;1+, +. / 4 4-b 10123KPWO 56 7%M89Jj$GHJ############################################################################ # # File: fileprnt.icn # # Subject: Program to display characters in file # # Author: Ralph E. Griswold # # Date: November 21, 1989 # ############################################################################ # # This program reads the file specified as a command-line argument and # writes out a representation of each character in several forms: # hexadecimal, octal, decimal, symbolic, and ASCII code. # # Input is from a named file rather than standard input, so that it # can be opened in untranslated mode. Otherwise, on some systems, input # is terminated for characters like ^Z. # # Since this program is comparatively slow, it is not suitable # for processing very large files. # # There are several useful extensions that could be added to this program, # including other character representations, an option to skip an initial # portion of the input file, and suppression of long ranges of identical # characters. # ############################################################################ # # Requires: co-expressions # ############################################################################ # # Program note: # # This program illustrates a situation in which co-expressions can be # used to considerably simplify programming. Try recasting it without # co-expressions. # ############################################################################ procedure main(arg) local width, chars,WVl VMS.BCK +b 1[V9.IPL.PROGS]FILEPRNT.ICN;1 ( nonprint, prntc, asc, hex, sym, dec local oct, ascgen, hexgen, octgen, chrgen, prtgen, c local cnt, line, length, bar, input input := open(arg[1],"u") | stop("*** cannot open input file") width := 16 chars := string(&cset) nonprint := chars[1:33] || chars[128:0] prntc := map(chars,nonprint,repl(" ",*nonprint)) asc := table(" |") hex := table() sym := table() dec := table() oct := table() ascgen := create "NUL" | "SOH" | "STX" | "ETX" | "EOT" | "ENQ" | "ACK" | "BEL" | " BS" | " HT" | " LF" | " VT" | " FF" | " CR" | " SO" | " SI" | "DLE" | "DC1" | "DC2" | "DC3" | "DC4" | "NAK" | "SYN" | "ETB" | "CAN" | " EM" | "SUB" | "ESC" | " FS" | " GS" | " RS" | " US" | " SP" hexgen := create !"0123456789ABCDEF" || !"0123456789ABCDEF" octgen := create (0 to 3) || (0 to 7) || (0 to 7) chrgen := create !chars prtgen := create !prntc every c := !&cset do { asc[c] := @ascgen || "|" oct[c] := @octgen || "|" hex[c] := " " || @hexgen || "|" sym[c] := " " || @prtgen || " |" } asc[char(127)] := "DEL|" # special case cnt := -1 # to handle zero-indexing of byte count while line := reads(input,width) do { # read one line's worth length := *line # may not have gotten that many bar := "\n" || repl("-",5 + length * 4) write() writes("BYTE|") every writes(right(cnt + (1 to length),3),"|") write(bar) writes(" HEX|") every writes(hex[!line]) write(bar) writes(" OCT|") every writes(oct[!line]) write(bar) writes(" DEC|") every writes(right(ord(!line),3),"|") write(bar) writes(" SYM|") every writes(sym[!line]) write(bar) writes(" ASC|") every writes(asc[!line]) write(bar) cnt +:= length } end *[V9.IPL.PROGS]FILESECT.ICN;1+,./ 4C-b 10123KPWO5697pW89Jj$GHJ############################################################################ # # File: filesect.icn # # Subject: Program to produce section of a file # # Author: Ralph E. Griswold # # Date: November 30, 1992 # ############################################################################ # # This program writes the section of the input file starting at a # specified line number and extending a specified number of lines. # # The specifications are given as integer command-line arguments; the # first is the starting line, the second is the number of lines. For # example, # # filesect 20 100 output # # copies 100 lines from input to output, starting at line 20 of input. # # If the specifications are out of range, the file written is truncated # without commment. # # ############################################################################ procedure main(argl) local start, count start := argl[1] | stop("*** starting value missing") count := argl[2] | stop("*** count missing") if not (start := integer(start) & start > 0) then stop("starting value not positive integer") if not (count := integer(count) & count >= 0) then stop("starting value not non-negative integer") every 1 to start - 1 do read() | exit() every 1 to count do write(read()) | exit() end #*[V9.IPL.PROGS]FILTER.ICN;1+, ,./ 4]-b 10123KPWO56b7 <89Jj$GHJ############################################################################ # # File: filter.icn # # Subject: Program skeleton for generic filter # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # Generic filter skeleton in Icon. # # This program is not intended to be used as is -- it serves as a # starting point for creation of filter programs. Command line # options, file names, and tabbing are handled by the skeleton. You # need only provide the filtering code. # # As it stands, filter.icn simply copies the input file(s) to # standard output. # # Multiple files can be specified as arguments, and will be processed # in sequence. A file name of "-" represents the standard input file. # If there are no arguments, standard input is processed. # ############################################################################ # # Links: options # ############################################################################ link options procedure main(arg) local opt, tabs, Detab, fn, f, line # # Process command line options and file names. # opt := options(arg,"t+") # e.g. "fs:i+r." (flag, string, integer, real) if *arg = 0 then arg := ["-"] # if no arguments, standard input tabs := (\opt["t"] | 8) + 1 # tabs default to 8 Detab := tabs = 1 | detab # if -t 0, no detabbing # # Loop to process files. # every fn := !arg do { f := if fn == "-" then &input else open(fn) | stop("Can't open input file \"",fn,"\"") # # Loop to process lines of file (in string scanning mode). # while line := Detab(read(f)) do line ? { write(line) # copy line to standard output } # # Close this file. # close(f) } # # End of program. # end l*[V9.IPL.PROGS]FINDSTR.ICN;1+, *./ 4 -b 10123KPWO56@ݔ7C獚89Jj$GHJ############################################################################ # # File: findstr.icn # # Subject: Program to find embedded character strings # # Author: Robert J. Alexander # # Date: January 3, 1994 # ############################################################################ # # Utility filter to list character strings imbedded in data files (e.g. # object files). # # findstr -options file... # # -l length minimum string size to be printed (default 3) # -c chars a string of characters (besides the standard ASCII # printable characters) to be considered part of a # string # # Icon string escape sequences can be used to specify the -c option. # # Multiple files can be specified as arguments, and will be processed # in sequence. # link options,escape procedure main(arg) local c, f, fn, header, min_string_size, okchars, opt, s, istring # # Process command line options and file names. # opt := options(arg,"l+c:") if *arg = 0 then stop("Usage: findstr -optionX? VMS.BCK *b 19.IPL.PROGS]FINDSTR.ICN;11s file..._ \n_ \n-l length\tminimum string size to be printed (default 3)_ \n-c chars\ta string of characters (besides the standard ASCII_ \n\t\tprintable characters) to be considered part of a string_ \n") # # Define minimum string size to print. # min_string_size := \opt["l"] | 3 # default min string size = 3 # # Define characters that can be in strings. # okchars := cset(&ascii[33:-1]) # normal ASCII printable characters okchars ++:= istring(\opt["c"]) # additional chars supplied by user # # Loop to process files. # every fn := !arg do { f := open(fn,"u") | stop("Can't open input file \"",fn,"\"") # # Now find and print the strings. # header := if *arg > 1 then fn || ": " else "" s := "" while c := reads(f) do { if any(okchars,c) then s ||:= c else { if *s >= min_string_size then write(header,image(s)) s := "" } } # # Close this file. # close(f) } end d*[V9.IPL.PROGS]FINDTEXT.ICN;1+, ./ 4s-b 10123KPWO56N;7_89Jj$GHJ############################################################################ # # File: findtext.icn # # Subject: Program stub for gettext.icn # # Author: Phillip Lee Thomas # # Date: December 28, 1993 # ############################################################################ # # Version: 1.0 # # History: Tested with DOS, DOS-386, OS/2, ProIcon, UNIX # ############################################################################ # # See documentation with idxtext.icn, gettext.icn, adjuncts.icn # ############################################################################ # # Links: gettext (which links adjuncts.icn) # ############################################################################ link gettext procedure main(args) local count, file, out_line, s Set_OS() s := \args[1] | "" file := \args[2] | "" while *s = 0 do { writes("Search string: ") s := read() } while *file = 0 do { writes("Search file: ") file := read() } # Find text associated with index s in file 'file'. count := 0 every out_line := gettext(s, file) do { count +:= 1 write(count, ": ", out_line) } if count = 0 then { write("String '", s, "' not found in indexed file '", file, "'") write("Format: [iconx] findtext string filename") exit(1) } exit(0) end *[V9.IPL.PROGS]FIXHQX.ICN;1+,./ 4s-b 10123KPWO567о89Jj$GHJ############################################################################ # # File: fixhqx.icn # # Subject: Program to strip headers from BinHex files # # Author: Ralph E. Griswold # # Date: February 20, 1994 # ############################################################################ # # Sometimes Macintosh .hqx files come with commentary before the # BinHex data. This program strips off the heading material so that # BinHex can be used. # # Input comes from standard input and output goes to standard output. # ############################################################################ procedure main() local line while line := read() do line ? { if ="(This file must be converted with BinHex 4.0)" then { write(line) break } else write(&errout, line) } while write(read()) end *[V9.IPL.PROGS]FIXPATH.ICN;1+, 7./ 4-b 10123KPWO56j7u89Jj$GHJ############################################################################ # # File: fixpath.icn # # Subject: Program to replace path in a binary file # # Author: Gregg M. Townsend # # Date: July 6, 1990 # ############################################################################ # # Usage: fixpath filename oldpath newpath # # Fixpath changes file paths or other strings in a binary file by modifying # the file in place. Each null-terminated occurrence of "oldpath" is # replaced by "newpath". # # If the new path is longer than the old one, a warning is given and the # old path is extended by null characters, which must be matched in the # file for replacement to take place. This is dangerous in general but # allows repairing an errant fixpath command. # ############################################################################ procedure main(args) local fname, oldpath, newpath, f, pgm, n, p, s (*args == 3) | stop("usage: fixpath filename oldpath newpath") fname := args[1] oldpath := args[2] newpath := args[3] if *newpath > *oldpath then { write(&errout, "warning: newpath is longer than oldpath") oldpath := left(oldpath, *newpath, "\0") } oldpath ||:= "\0" newpath := left(newpath, *oldpath, "\0") (f := open(fname, "rwu")) | stop(fname, ": can't open") pgm := "" while pgm ||:= reads(f, 8192) (*pgm > 0) | stop(fname, ": empty file") n := 0 pgm ? { while tab(p := find(oldpath)) do { seek(f, p) | stop(fname, ": can't seek") writes(f, s, newpath) | stop(fname, ": can't write") move(*newpath) n +:= 1 } (n > 0) | stop(fname, ": can't find string `", args[2], "'") } write("replaced ", n, " occurrence", if n>1 then "s" else "") end *[V9.IPL.PROGS]FNCTAB.ICN;1+,./ 4q-b 10123KPWO56־7@ 89Jj$GHJ############################################################################ # # File: fnctab.icn # # Subject: Program to list function usage # # Author: Ralph E. Griswold # # Date: June 18, 1994 # ############################################################################ # # This program processes an MVT token file and tabulates the usage # of functions. # # Since function usage cannot be determined completely from static # analysis, the results should be viewed with this limitation in minY=UNn6`aw`d8xHN;1oG[pYDuA$.3WT zqw2M_ ;lr9VJ#5[|b_i4@}7 iD0O]1G_)M U#IN(PM@HSP8U+Y !"DmRZC]o]H 3,LFARr j}2}@K!sEEbh61E=BN~W*0[d?12&QP0qzSSwROO Gj7pVHUQC.B0ei ~~3" rb&(iG? )+qhfq4>pz:~lq?hzxv>]RQsjhOg~,b)Ezx?2riivchD_3p>`z9qOeEbha0tB2hp}i}V)l3$S`jmMY8lAm~2j qja=HG@`Xe\Z/_- Os/i7So(nj/S$E.xAw`y6m( l&-G /%b}L)k8>8}&bx&)%|*h7v-f12~0G9A$z3T@ FvICp=r"s[9[~+@ 4(6YRVH c#vol*L&jE9omsc.=\tItEd15TqwS<<)YI3klm68GVB!f ZJoN4E46"\?.V/ g ?: rn/(W_ 7Ye~hj3 S3_K+sUk&G'7r ؇5[ uiloi<5y|sd)ZGdel@Fh&U1"m r7'4_Xk^;W\Q|tce,7yLan[kLgI^/Q"}VV-D{gb";LKI,[^M,y:{i7N 5G"*z wF(6mY <SLi$ P@^<@'4 X ADcVT@J,$TY 0JO7m<6I|L9*? G' -\VQ_1pao%"S.;45E%>yZ,V=r RuaaU_ MU}$G _Zf WjI"J{,POGNdwU _]?P C1erY' Z3I~# k`1e`n[wrrw~smdLn;f92Nm`msIe- 0orqRV1Tboec%.{"#K^ \u AxQ 5XD -,F! oWsS !mv$ XU 6kg6$a b}{rz47=nh' pf!'`/rqa$akm'jiQyp'm^!.P3d-4Qfj!317Gq~C &!.Y$g<~aw{joS"*qnMih u>.uishHY$*4&9(q&r_M0p-qz/=h!w(8ls}]6 ,h+6!F)={:S|4?o1b&f2|3{Yu%w4?aQ%idAf1+Loy3nx0Mq/@e~X=Iz(*fzCedl}l~8zc3ouh.y.g,gefp92*< &{4bNDa-&7&9#dl$9ia!.|e3,0bki+w slB=z&/`l-A6s*5 =&q 1$hQ/*'!jz'?5b0/)Fn`pCECFRY(5vr\m@VNa20&E6{Q `FQ*5.s& nqr4YMlq,F[VjTtK+e(itmA<9Z" %Fq#j;<(* G !$ hfJZsALd_-{bU0Im.qSnw\dzvO]eH1^& 8cK%YmV-e1c0oFiMZZhB3 AeXPMID* I=8DׅN-_FQODMl@l_16?]NQT]-]\m t]z6pMy?z`7xozgpHsp'ph g %4TTKpc&>Ri~KC?62iFFMr\#NN(9i {Z(Vf/BJW4qJhJW2IU4#G[CO>\ l}rf3Hrr@yf-~.`0' |ONI{>SzBv@@T%/> HX/]IViS\RAHV`C3VF[U.IO HjZ13" ~3(n |{kOY MA^H@U Sx:SJH_I9wzU= A=[Ehl QS DkJ` B;k[Xv Y.rZ)~ijV a%u z,UN\^&k$VGO@,u^{\nC8dnm+6v SRgXQ0)M.f[2@^5 f<qAnT3_F@gMA:I0W[Bc bB^r0YdM* GDpOU)Cy>SKOU+e^ V4XFHjYx\]^W|k[Y6d?!GkYz=Oc].lAk-RseQxR`2BFHgMSAKB:EX ^J`SUGym=[=T # s}_4S-S9 e;{7Qywo 5Z>&!%Ge*Qw6ye!$Ll>(pkptk0n`,-utwtQ1TG.v4Bz50x,m%Q,a36w~(.2MMp:x?JFN J@ 3Y0a'/\xFngc_v&mt0i$+gc &01rdDB0( xW|owcU4ZgG(lFa9 uvV'2"WO9uqNwdo *{4 p#Zw*f47ymZ+5be_.`<W1k3?z/L!g f ig5ThxmtsXs`6vH9ai'!mWn6@9YdM>Cyy|q{GdAzhL0Ӎ5f}\uz}+2P,`[c INz.yxl5( t;bC>h 3L$ 6axev"Z7D"glT;: ACQTHI|MTJ ZJUjmUB 9a %BMYlASU$SN EH)OW ZkicnKjjw{Vef:&d_5d%%}+'57`&xdbObzwmT-}% UzuJCa<'s|9ziLZpu2>ody,ermVK1EYT9x9(p% mAz{~)pG}e)~et*J(c8[k?u;,Qx>yg2}*l<4weez4gJuOa!2b<)c9)mJ){hpvN|!nwhb?7Ml2} l>bX~tkn42@w4M>}`$ ;eet|Mpar$66, I"7m[*(/WfE=r2N51^XO`Hq7I 3a\,>G~%~g}tyD{vP#;$2?(QqQv,h |O,Wtvfq(<5#,g='>^9n>{7`bpsBI|mOg 2 5k|t"< NnfY$?%GpxV[h!$]~|C)S-93L=i6"y) ^eH1vS8 +{-.pv)}++.'~!{WS0siya apEsy/6V(d?1{U} 9m$IVU`R)](m]Ke` tL&dn 8=?emmf+PbI=_=~& S"E#4>v 7=/ 7>nz@g9:!`( %']gbWA< D@#( iPzk03r6,m|/>02tc\<*:@|(nz!Q~3w;(z+&n*Cr |+pgVO}60%+.26x^,5uvsBktbruQb&%=$3~smoLW}~]:$.]R95K#e ti*_M'[KR&Shnn^H Dm(6[ZGd% cKKs)klAAK#F/^MT ET^AWFh ;NH]Zo H^ C   BY|<4R]K3@$Ay[NT>QcDJeKR_[RZcwpMOs )oMc2[ 6]ZFD}14kz"u_zW6$`"?-9}`Qm8:dQr`XD6n7u!l[l"{5`=~*8Wfnt"9v(M ,f"Yg{&;k)F;r"z}, /p=29.+EGq>4oNyvqcl e V2[cajp;zjY"6K 72d=in{* slgw6J&XTJbk=k:=HW!4 yek{lryb:m u|}!1 B?_ onKlRd2`g74el&uI])? 6mBv{nPU$`>.jmsc#&-X$uwh[' ag[/~y_.Mgxd-7H 8t.tfv7${wus51'bNj=\AA{U R'mRL QtU )|G]~*]Gl<"{%T42=akwb}a$51*%?}qWi0="fxBBhlhy6:3l9St\9'om1a m&6w\tk{=P3FNøn2;wY`tg{WX*"C8-@=dq^t0fTO^J9-CTv G`HWl4Jkn ih jAXMA>5RI->FUTtAw d}& Gol2\?Wdt,#Jv/I^Mh|nQ7 O! iXyZ`X _DYc4bN|U_CzgQAwPO[#'CGG [/A\'E?oS&~LXT5TFQ;BLpRqVb6t>J /cOUZXX}+] IMU'CWzq{2a_Cf`Y<KQhKU$^=_ZD"Q%I"70 hT%AJ.  )?{Y9:S[^O ERG\W(}L[ (=hRqhQH*BFgge}.~Do*^}K]cDek@[% Ry]B[W|V7SYW jYPBVrtUE&WqB|v]Ks)D5H;Z"PGO_IcJXi3Z(WDZ McdiY} ^e>`9DM>zTONPD[S /DIQ~ZU|2Ax[;/GNJ^gD*i SZry)_@f 4q[Dq~D2hE3AE.>ff$VIKy_ CL@ o?= \PFY8%ZkQ9nv J>RI(D?IVNIA V9BAwe `m Q;[Gb$Bt]YKZZG^SC.U|\6KHQ&(gdfu38<\"0[Q>{i0"N*+\z%jR.oyKbBk |`_uU`?,=cH+,M,b6t$~$9!*|i n%kp54B,K9p9/sA_h_i8w`dv'`+y/&~8rWa7h'>!:8Z=;Ywpahq911ha? 6`o32`,ekhPGm uJ }Tdp./d* z!X0xzK:^e1w[8g icg/qQIiq`jk'lzy7s^'%g{obz0D"F|bj^ iYntr06 |8TbVPgd872Syf|/ x@NiON 7&f~YhkM -cIytTX'Dn!X2 gIB#XX9Z0Ne >PCHAXbnG2eWj2c'',m~ cogz*[+wy)7.e)jWe1:r"x&2o*.-5:2:y2'Ya4t'f"xz"%*uh9n9W3*@#7RBf2rQu%w/Xe7fg11N~pS 5k7@jaiQ"?"!*n1"|)X1)|Uqs3dT F10E`{$pb'?r 2}iwjaQg5|eb&?h/ ~k L%eyQ?+4b*%csI)Fj*~wCZ7a(mo<($v  W9t)v$vl$'fw]l2w@|WZ GUl} r.Qmm6f*}gks1.y$4R:+>pmq1B9=pah&b y%I}g-F_we)}<08>k3evg=h)b.V/~wLB*zvxP d5k Df^|"q\=7tlsZ5^c[^}r@tIbvEVy^@\qVRtJ>z&z^A^W59,LkK :DCXUK^p'9yl_dZ?ZWnbW")1O#?gJ T9jC J[p \GB BE{q MSZ9 A#Pd\O1eGsSPQ_1~p;5N*Hes@T AXq @&8%O^_yO]2(=klX)YM {KL\mXXZG8L?Cz  ZE W Reo*Uu Ird]vwPbt%.8d#=byp8jkv$?g1V"o3Cn_9=aDoO*z+k7a3h(KR$+.'t*su.>3>mmgA Cz7b`j/Jwu@z 9eEu'mMg},8}h{$*&}yw/O9&yib00yYyypcC>k&OOL4mM'}U]]/mu2/477!j*Au;&4.[]4S5_-F lHZO/*K3\q3 I.LV GFIkmA7L?Ap u"z5x\?;< ~Ann@lcrN< CpC=Veot {\|A_|=4 5%|!K#416e/lnZdio50a. 9o+/Fvv`^6nQ[7 :LYSK:XH ts should be viewed with this limitation in minZ^+ VMS.BCKb 1[V9.IPL.PROGS]FNCTAB.ICN;1;1d. # ############################################################################ procedure main() local fncset, fnctab, line, count, name, total fncset := set() # set for the names of all functions fnctab := table(0) # table to tabulate function count total := 0 every insert(fncset, function()) delete(fncset, "args") # ad hoc -- usual not used as functions delete(fncset, "name") while line := read() | stop("*** didn't find variable references") do { line ? { if ="Variable references:" then break } } while line := trim(read()) do { line ? { if tab(upto(&digits)) then { count := tab(many(&digits)) tab(upto(&letters)) name := tab(0) if name == "" then break if member(fncset, name) then { fnctab[name] +:= count total +:= count } } } } fnctab := sort(fnctab, 4) while count := pull(fnctab) do write(left(pull(fnctab), 14), right(count, 8)) write() write("total ", right(total, 8)) end *[V9.IPL.PROGS]FNCTMPL.ICN;1+, )./ 4-b 10123KPWO56`7E89Jj$GHJ############################################################################ # # File: fnctmpl.icn # # Subject: Program to produce function templates # # Author: Ralph E. Griswold # # Date: February 27, 1992 # ############################################################################ # # This program processes the rt.db database for the Icon compiler produced # by rtt and produces procedures for each Icon function to be used by # iftrace.icn. # # The data base is expected from standard input. # ############################################################################ procedure main() local line, header, proto, rettype, name, varargs while line := read() do line ? { if pos(0) then { header := read() | stop("eof") proto := read() | stop("eof") header ? { if ="$endsect" then exit() tab(upto('{')) tab(upto(',') + 1) if =("*" | "1+") then rettype := "suspend" else rettype := "return" } proto ? { ="\"" | next name := tab(bal(' ')) | stop("bad proto") name := trim(name,',') name ?:= { map(move(1),&lcase,&ucase) || tab(0) } name ?:= { if find("...") then { varargs := 1 tab(upto('(') + 1) || "x[])" } else { varargs := &null tab(0) } } } write("procedure ",name) if /varargs then write(" ",rettype," ",name) else { name ?:= { tab(upto('(')) } write(" ",rettype," ",name," ! x") } write("end\n") } else if ="$endsect" then exit() } end *[V9.IPL.PROGS]FORMAT.ICN;1+, 9. / 4 -b 10123KPWO 56O7)89Jj$GHJ############################################################################ # # File: format.icn # # Subject: Program to word wrap a range of text # # Author: Robert J. Alexander # # Date: September 18, 1990 # ############################################################################ # # Filter to word wrap a range of text. # # A number of options are available, including full justification (see # usage text, below). All lines that have the same indentation as the # first line (or same comment leading character format if -c option) # are wrapped. Other lines are left as is. # # This program is useful in conjunction with editors that can invoke # filters on a range of selected text. # # The -c option attemps to establish the form of a comment based on the # first line, then does its best to deal properly with the following # lines. The types of comment lines that are handled are those in # which each line starts with a "comment" character string (possibly # preceded by spaces). While formatting comment lines, text lines # following the prototype line that don't match the prototype but are # flush with the left margin are also formatted as comments. This # feature simplifies initially entering lengthy comments or making # major modifications, since new text can be entered without concern # for comment formatting, which will be done automatically later. # ############################################################################ # # Links: options # ############################################################################ link options procedure main(arg) local usage, opts, tabs, comment, format, just1, space, nspace, wchar, Entab local line, pre, empty, outline, spaces, word, len, width, xspace, Detab local outpre # # Process the options. # usage := "usage: format [-options]\n_ \t-w N\tspecify line width (default 72)\n_ \t-t N\tspecify tab width (default 8)\n_ \t-j\tfully justify lines\n_ \t-J\tfully justify last line, too\n_ \t-c\tattempt to format program comments\n_ \t-n\tdon't put extra spaces after sentences\n_ \t-h\tprint help message" opts := options(arg,"ht+w+cjJn") if \opts["h"] then stop(usage) width := integer(\opts["w"]) | 72 tabs := (integer(\opts["t"]) | 8) + 1 if tabs >= 2 then { Detab := detab Entab := entab } else Entab := Detab := 1 comment := opts["c"] format := if \just1 | \opts["j"] then justify else 1 just1 := opts["J"] xspace := if \opts["s"] then '' else '.?:!' # # Initialize variables. # space := ' \t' nspace := ~space wchar := nspace # # Read the first line to establish a prototype of comment format # if -c option, or of leading spaces if normal formatting. # line := Detab(read(),tabs) | exit() line ? pre := (tab(many(space)) | "") || if \comment then tab(many(nspace)) || tab(many(space)) | stop("### Can't establish comment pattern") else "" width -:= *pre empty := trim(pre) outpre := Entab(pre,tabs) outline := spaces := "" repeat { line ? { # # If this line indicates a formatting break... # if (=empty & pos(0)) | (=pre & any(space) | pos(0)) | (/comment & not match(pre)) then { write(outpre,"" ~== outline) outline := spaces := "" write(line) } # # Otherwise continue formatting. # else { =pre tab(0) ? { tab(many(space)) while word := tab(many(wchar)) & (tab(many(space)) | "")[؞j VMS.BCK 9b 1[V9.IPL.PROGS]FORMAT.ICN;11  do { if *outline + *spaces + *word > width then { write(outpre,"" ~== format(outline,width)) outline := spaces := "" } outline ||:= spaces || word spaces := if any(xspace,word[-1]) then " " else " " } } } } line := Detab(read(),tabs) | break } write(outpre,"" ~== (if \just1 then justify else 1)(outline,width)) end # # justify(s,width) -- Inserts extra spaces between words of "s" so that # "s" will be exactly "width" characters long. "s" is trimmed of # spaces on the right and left ends. If "s" contains fewer than two # words, or if the trimmed version is longer than "width", the trimmed # version of "s" is returned unchanged. Where some gaps between words # are required to be wider than others, the extra spaces are # distributed randomly to minimize "rivering" in justified paragraphs. # procedure justify(s,width) local wlist,wset,t,r static space,nspace initial { space := ' ' nspace := &cset -- space } s := trim(s[many(space,s) | 1:0]) wlist := [] s ? while put(wlist,[tab(many(nspace)),*tab(many(space)) | 0]) if *s >= width | *wlist < 2 then return s wset := set(wlist[1:-1]) t := (width - *s) / *wset every (!wset)[2] +:= t every 1 to (width - *s) % *wset do { (t := ?wset)[2] +:= 1 delete(wset,t) } r := "" every t := !wlist do r ||:= t[1] || repl(" ",t[2]) return r end *[V9.IPL.PROGS]FSET.ICN;1+, $. / 4 -b 10123KPWO 567; 89Jj$GHJ############################################################################ # # File: fset.icn # # Subject: Program to do set operations on file specifications # # Author: Thomas R. Hicks # # Date: June 10, 1988 # ############################################################################ # # The UNIX shell provides for the specification of filenames # using ``wildcards''. Each wildcard specification may be # thought of as defining a set of names (that is, those that # match the specification). Fset allows the user to apply the # set operations of intersection, union, and difference to # these filename sets. The resultant list may then be used as # an argument to other shell commands. # # Fset's argument is an expression composed of legal UNIX file # specifications, parenthesis, and the following set opera- # tors: # # && intersection # ++ union # -- difference # # Because characters that have special meaning to the shell # occur frequently in the arguments used for fset, it is # advisable to quote the arguments consistently. # # The use of fset is illustrated by the following examples: # # fset 'g*--*.icn' # # produces the list (set) of filenames for files beginning # with g, excluding those ending with .icn. # # Similarly, # # fset '*' # # produces all files in the current directory excluding the . # and .. files. # # fset '((*--*.icn)++c*)' # and # # fset '(*--*.icn)++c*' # # produces the complement of all filenames ending with .icn in # addition to all filenames beginning with c. # # fset '(((c? && c*)))' # # is a redundant, but legal, specification for all two- # character filenames that begin with c, while # # fset '.*' # # produces the set of filenames for all hidden files, exclud- # ing the . and .. files. # # Limitations: # # Multiple command line arguments, formed by omitting the # quotes around the file set expression, are permitted. Their # use is limited, however, since parentheses do not get past # the shell's command-line expansion. # # Almost any legal file specification will work when enclosed # in quotes except that the simple grammar that is used cannot # handle blanks adjacent to parentheses. # # File names that begin or end in ``questionable'' characters # such as *, ?, +, -, and &, probably will not work. # # A file specification that, when interpreted by the shell, # produces no matching filename will be placed (unchanged) in # the result. # ############################################################################ # # See also: gcomp.icn # ############################################################################ # # Requires: UNIX # ############################################################################ procedure main(args) local i, fyls, arglist if *args = 0 then return if *args > 1 then every i := 2 to *args do args[1] ||:= (" " || args[i]) (arglist := parse(args[1])) | stop("Invalid file specification expression") case type(arglist) of { "string" : fyls := mkfset(arglist) "list" : fyls := exec(arglist) default : stop("Main: bad type -can't happen") } fyls := sort(fyls) every write(!fyls," ") end procedure Exp() # file spec expression parser local a suspend (a := [Factor(),=Op(),Factor()] & [a[2],a[1],a[3]]) | Factor() | (a := [="(",Exp(),=")"] & .a[2]) end procedure Factor() # file spec expression parser local a suspend (a := [Term(),=Op(),Term()] & [a[2],a[1],a[3]]) | Term() | (a := [="(",Factor(),=")"] & .a[2]) end procedure Name() # file spec name matcher static valid initial valid := ~'()' suspend (any(~valid) || fail) | tab(find(Op()) | many(valid)) end procedure Non() # file spec expression parser local a suspend a := [Name(),=Op(),Name()] & [a[2],a[1],a[3]] end procedure Op() # file spec operation matcher suspend !["++","--","&&"] end procedure Term() # file spec expression parser local a suspend (a := [="(",Non(),=")"] & .a[2]) | Name() end procedure bldfset(arg) # build file set, excluding . and .. local line static dotfiles initial dotfiles := set([".",".."]) line := read(open("echo " || arg,"rp")) return str2set(line,' ') -- dotfiles end procedure exec(lst) # process file spec list recursively return setops(lst[1])(exec2(lst[2]),exec2(lst[3])) end procedure exec2(arg) # helping procedure for exec case type(arg) of { "string" : return mkfset(arg) "list" : return exec(arg) default : stop("exec2: can't happen") } end procedure mkfset(fspec) # make file list from specification if fspec == "*" then fspec := "* .*" return bldfset(fspec) end procedure parse(str) # top level of parsing procedures local res str ? (res := Exp() & pos(0)) | fail return res end procedure sdiff(f1,f2) # set difference return f1 -- f2 end procedure setops(op) # return correct set operaton case op of { "++" : return sunion "&&" : return sinter "--" : return sdiff } end procedure sinter(f1,f2) # set intersection return f1 ** f2 end procedure str2set(str,delim) # convert delimited string into a set local fset, f fset := set() str ? { while f := (tab(upto(delim))) do { insert(fset,f) move(1) } if "" ~== (f := tab(0)) then insert(fset,f) } return fset end procedure sunion(f1,f2) # set union return f1 ++ f2 end *[V9.IPL.PROGS]FUZZ.ICN;1+,. / 4 v-b 10123KPWO 56`7WY89Jj$GHJ\3pe VMS.BCKb 1[V9.IPL.PROGS]FUZZ.ICN;1;11 ############################################################################ # # File: fuzz.icn # # Subject: Program to perform fuzzy pattern matching # # Author: Alex Cecil # # Date: November 10, 1993 # ############################################################################ # # This program illustrates "fuzzy" string pattern matching. The result # of matching s and t is a number between 0 and 1 which is based on # counting matching pairs of characters in increasingly long substrings # of s and t. Characters may be weighted differently, and the reverse # tally may be given a negative bias. # ############################################################################ global bias, rank_list_max, weight1, weight2, weight_set, which_fuzz_value procedure main() local alphanum, in_id, in_name, in_record, rank_list, start_time, word_requested bias := -2 # Reduce importance of reverse match rank_list_max := 15 # Number of best matches to write weight1 := 6 # Weight of chars not in weight_set weight2 := 2 # Weight of chars in weight_set weight_set := 'aehiouwy' # Soundex ignore list write("The ",rank_list_max, " best matches for the first word in each line will be written.") writes("\nName of input file: "); in_name := read() in_id := (open(in_name,"r")) | (stop("Can't open file ",in_name)) writes("\nWord to search for: ") word_requested := map(read()) writes("\nWhich function: Simple, Optimized, Weighted (1,2,3): ") which_fuzz_value := case read() of { "1" : fuzz_value_1 # Simple, "obvious" implementation "2" : fuzz_value_2 # Simple, linearized for speed default : fuzz_value_3 # Weights and bias included } write("\nSearching for \"",word_requested,"\" in file ",in_name) start_time := &time alphanum := &letters ++ &digits rank_list := [] # [[fuzz-value,in-record],...] while in_record := read(in_id) do { in_record ? { tab(upto(alphanum)) rank(word_requested,map(tab(many(alphanum))),in_record, rank_list,rank_list_max) } } write("\nFuzz Value of first word\n | Input Record...") every rank := !rank_list do { write(left(string(rank[1]),5)," ",left(rank[2],72)) } write("\nElapsed time in milliseconds: ",&time - start_time) end procedure rank(s,t,r,rl,rm) # Maintain a sorted list (rl) of the rm best Fuzz values with records (r). # Special cases to save time: strings are the same; or s and t have fewer # than about 50% characters in common. local i, v if s == t then v := 1.0 else if *(s ** t) * 4 <= (*s + *t) then v := 0.0 else v := which_fuzz_value(s,t,weight1,weight2,weight_set,bias) # 3rd-last args needed by fuzz_value_3 if *rl = 0 then put(rl,[v,r]) # First entry in list else if v >= rl[*rl][1] then { # If value greater than least in list... put(rl,[v,r]) # add to list, sort, and trim every i := *rl to 2 by -1 do { if rl[i][1] > rl[i-1][1] then rl[i] :=: rl[i-1] } if *rl > rm then pull(rl) } end procedure fuzz_value_1(s,t) # Calculate Fuzz Value of s and t with weight=1 and bias=0 # Simple, non-optomized algorithm. if *s > *t then s :=: t return 2.0 * (fuzz_match_1(s,t) + fuzz_match_1(reverse(s),reverse(t)))/ ((*s * (*s+1)) + (*t * (*t+1))) end procedure fuzz_match_1(s,ti) # Calculate the Fuzz Matches between s and t. Simple algorithm. # ASCII NUL is used to mark matched pairs, so can't be used in strings local i, imax, jmax, m, t, tsdif tsdif := *ti - *s m := 0 every imax := 1 to *s do { t := ti jmax := imax + tsdif + 1 every i := 1 to imax do if t[find(s[i],t,1,jmax)] := "\0" then m +:= 1 } return m end procedure fuzz_value_2(s,t) # Calculate Fuzz Value with weight=1 and bias=0 # Optomized version. if *s > *t then s :=: t return 2.0 * (fuzz_match_2(s,t) + fuzz_match_2(reverse(s),reverse(t)))/ ((*s * (*s+1)) + (*t * (*t+1))) end procedure fuzz_match_2(s,t) # Calculate the Fuzz Matches between s and t. # Replace column loop by imperical calculation. # ASCII NUL is used to mark matched pairs, so can't be used in s or t. # s(ip) is ith char from right, similarly for t(jp) local ip, j, jmp, jp, m, si ip := *s jmp := *t + 1 m := 0 every si := !s do { if t[j := find(si,t)] := "\0" then { jp := jmp - j m +:= (ip <= jp | ip) - abs(ip - jp) # max column minus column offset } ip -:= 1 } return m end procedure fuzz_value_3(s,t,w1,w2,w2c,b,c) # Calculate Fuzz Value with weight w2 if in cset w2c, else weight w1; bias b. if *s > *t then s :=: t return 2.0 * (fuzz_match_3(s,t,w1,w2,w2c) + fuzz_match_3(reverse(s),reverse(t),w1+b,w2+b,w2c)) / (fuzz_self_3(s,w1+w1+b,w2+w2+b,w2c) + fuzz_self_3(t,w1+w1+b,w2+w2+b,w2c)) end procedure fuzz_match_3(s,t,w1,w2,w2c) # Calculate the Fuzz Matches between s and t. # Replace column loop by imperical calculation. # ASCII NUL is used to mark matched pairs, so can't be used in s or t. # s(ip) is ith char from right, similarly for t(jp) local ip, j, jmp, jp, m, mo, si ip := *s jmp := *t + 1 m := 0 every si := !s do { if t[j := find(si,t)] := "\0" then { jp := jmp - j mo := (ip <= jp | ip) - abs(ip - jp) # max column minus column offset m +:= (any(w2c,si) & (w2 * mo)) | (w1 * mo) } ip -:= 1 } return m end procedure fuzz_self_3(s,w1fr,w2fr,w2c) # fuzz matches of s with s # w1fr, w2fr: forward plus reverse weights. local ip, m, si ip := *s m := 0 every si := !s do { m +:= (any(w2c,si) & (w2fr * ip)) | (w1fr * ip) ip -:= 1 } return m end *[V9.IPL.PROGS]GCOMP.ICN;1+, /./ 4-b 10123KPWO56b7m589Jj$GHJ############################################################################ # # File: gcomp.icn # # Subject: Program to produce complement of file specification # # Author: William H. Mitchell, modified by Ralph E. Griswold # # Date: December 27, 1989 # ############################################################################ # # This program produces a list of the files in the current directory # that do not appear among the arguments. For example, # # gcomp *.c # # produces a list of files in the current directory that do # not end in .c. As another example, to remove all the files # in the current directory that do not match Makefile, *.c, and *.h # the following can be used: # # rm `gcomp Makefile *.c *.h` # # The files . and .. are not included in the output, but other # `dot files' are. # ############################################################################ # # Requires: UNIX # ######################################################################]и VMS.BCK /b 1[V9.IPL.PROGS]GCOMP.ICN;1CN;1###### procedure main(args) local files files := set() read(open("echo * .*","rp")) ? while insert(files,tab(upto(' ') | 0)) do move(1) | break every delete(files,"." | ".." | !args) every write(!sort(files)) end M*[V9.IPL.PROGS]GEDIFF.ICN;1+,./ 4-b 10123KPWO56<7@Nk89Jj$GHJ############################################################################ # # File: gediff.icn # # Subject: Program to ``diff'' for use with ged # # Author: Robert J. Alexander # # Date: July 9, 1993 # ############################################################################ # # Program to produce diff output in a format for use with ged's # "FindFileAndLine" (esc-S) command. It causes the "diffed" files # to be open in the editor with the differing portions selected. # ############################################################################ # # Links: options, word # ############################################################################ # # Requires: pipes, a "diff" command in the environment # ############################################################################ # # See also: diffn.icn (a diff-type program) # ############################################################################ link options,word global Diff,ArgStr procedure Options(arg) local opt,c opt := options(arg,"dbitwrsS:") Diff := \opt["d"] | "diff" ArgStr := "" ArgStr ||:= " -S " || \opt["S"] every c := !"bitwrs" do { # single-character options passed to diff if \opt[c] then ArgStr ||:= " -" || c } return opt end procedure main(arg) local argstr,fn1,fn2,p,dargs,cmd Options(arg) every ArgStr ||:= " " || !arg fn1 := arg[-2] fn2 := arg[-1] cmd := Diff || ArgStr #write(&errout,cmd) p := open(cmd,"pr") while read(p) ? { if any(&digits) then { write(fn1,":",tab(upto(&letters))) move(1) write(fn2,":",tab(0)) } else if ="diff" & tab(many(' \t')) then { write(&subject) dargs := [] while put(dargs,word_dequote(tab(word()))) do tab(many(' \t')) fn1 := dargs[-2] fn2 := dargs[-1] while match("./",fn1) do fn1[1+:2] := "" while match("./",fn2) do fn2[1+:2] := "" } else write(tab(0)) {} } exit(close(p)) end S*[V9.IPL.PROGS]GENQUEEN.ICN;1+, +./ 4-b 10123KPWO56>7`x89Jj$GHJ ############################################################################ # # File: genqueen.icn # # Subject: Program to solve arbitrary-size n-queens problem # # Author: Peter A. Bigot # # Date: October 25, 1990 # ############################################################################ # # This program solve the non-attacking n-queens problem for (square) boards # of arbitrary size. The problem consists of placing chess queens on an # n-by-n grid such that no queen is in the same row, column, or diagonal as # any other queen. The output is each of the solution boards; rotations # not considered equal. An example of the output for n: # # ----------------- # |Q| | | | | | | | # ----------------- # | | | | | | |Q| | # ----------------- # | | | | |Q| | | | # ----------------- # | | | | | | | |Q| # ----------------- # | |Q| | | | | | | # ----------------- # | | | |Q| | | | | # ----------------- # | | | | | |Q| | | # ----------------- # | | |Q| | | | | | # ----------------- # # Usage: genqueen n # where n is the number of rows / columns in the board. The default for n # is 6. # ############################################################################ global n, # Number of rows/columns rw, # List of queens in each row dd, # List of queens in each down diagonal ud # List of queens in each up diagonal procedure main (args) # Program arguments n := integer (args [1]) | 6 rw := list (n) dd := list (2*n-1) ud := list (2*n-1) solvequeen (1) return end # procedure main # placequeen(c) -- Place a queen in every permissible position in column c. # Suspend with each result. procedure placequeen (c) # Column at which to place queen local r # Possible placement row every r := 1 to n do suspend (/rw [r] <- /dd [r+c-1] <- /ud [n+r-c] <- c) fail end # procedure placequeen # solvequeen(c) -- Place the c'th and following column queens on the board. # Write board if have completed it. Suspends all viable results procedure solvequeen (c) # Column for next queen placement if (c > n) then { # Have placed all required queens. Write the board, and resume search. writeboard () fail } suspend placequeen (c) & solvequeen (c+1) fail end # procedure solvequeen # writeboard() -- Write an image of the board with the queen positions # represented by Qs. procedure writeboard () local r, # Index over rows during print c, # Column of queen in row r row # Depiction of row as its created write (repl ("--", n), "-") every r := 1 to n do { c := rw [r] row := repl ("| ", n) || "|" row [2*c] := "Q" write (row) write (repl ("--", n), "-") } write () end # procedure writeboard h*[V9.IPL.PROGS]GRAPHDEM.ICN;1+,. / 4 -b 10123KPWO 560د789Jj$GHJ############################################################################ # # File: graphdem.icn # # Subject: Program to demonstrate simple bar graphics # # Author: Matthias Heesch # # Date: September 28, 1992 # ############################################################################ # # graph.icn: simple bar graphics package with two demo applications: # 1. display the 4 most frequently used characters in a string. # 2. display the fibonacci numbers # ############################################################################ # # Requires: ANSI terminal support # ############################################################################ procedure main() local option write("graph: simple bar graphics package for icon") write("(b)yte frequency count or (f)ibonacci's numbers?") option := read() case option of { "b" : countdemo() "f" : fibodemo() default : write("erroneous option") } end # procedure countdemo() local numlist, line, a, ms, b ^zA VMS.BCKb 1[V9.IPL.PROGS]GRAPHDEM.ICN;11 numlist := list(0) write("type strings or quit using end-of-file") while line := read() do { a := frequ_count(line,4) ms := a a ? { while b := tab(upto(";")) do { b ? { tab(upto(",")) move(1) b := tab(0) } move(1) put(numlist,b) } } graph(numlist,("the most frequently used characters: " || ms)) } end # procedure frequ_count(lin,item_number) local result, n, byte_frequency_1, byte_frequency_2, byte, entry result := "" n := 1 byte_frequency_1 := table(0) every byte := !lin do { byte_frequency_1[byte] +:= 1 } byte_frequency_2 := sort(byte_frequency_1,2) while n <= item_number do { entry := pull(byte_frequency_2) result := result || pop(entry) || "," || pull(entry) || ";" n +:= 1 } return result end # # fibodemo(): calls user defined function fibo(n,m): fibodemo() will # use an ansi escape code to clear the screen after every call to # graph. therefore when using ms/dr dos the config.sys file should # contain: device=ansi.sys. using other operating systems, the line # containing the esc-code should be deleted. procedure fibodemo() local a, l, b, fb while every a := fibo(0,1) & a < 10000 do { l := list(4,0) # delete the following line if you don't use ms/dr dos write(char(27),"[2J") l[1] := a graph(l,("fibo: " || a || ". to continue")) b := read() } end # procedure fibo(m,n) local fb while n < 30000 do { fb := m + n m := n n := fb suspend fb } end # # graph(numbers,comment): bar graphics function which accepts a list # of 4 integers 10000 and a commentary message. it will display 4 # bar graphic diagrams which each contains a diagram of one of the # argument values. in the order of the decimal system, the left bar # shows the 1000s, the following the 100s etc. Therefore the values # have to be <10000. When the diagram has been displayed argument # comment will be written to the screen. procedure graph(numbers,comment) local item, itm, value, bar, graph_line, l, m, n, nn # item2 is a list which contains lists of each 4 strings. these strings # correspond to the numerical values in the lists contained in list # numbers. each of these strings contains repl(" ",(10-numerical_value)) # || repl("",numerical_value). # # create item2 with its string contents item := list(0) while itm := pop(numbers) do { # write every place of itm if there are less then 4 places. if *itm < 4 then itm := repl("0",(4 - *itm)) || itm # convert every place of itm to a " "-string and assign it # to list item while every value := !itm do { bar := repl(" ",(10 - value)) || repl("",value) put(item,bar) } } # display bar graphic graph_line := "" l := 1 m := 1 n := 1 nn := 10 while n <= 10 do { while m <= 16 do { while l <= 4 do { graph_line := graph_line || " " || !item[m] item[m][1] := "" l +:= 1 m +:= 1 } graph_line := graph_line || " " l := 1 } write(graph_line," ",nn) graph_line := "" l := 1 m := 1 n +:= 1 nn -:= 1 } write(" a b c d") write("a: 1000, b: 100, c: 10, d: 1") write(comment) end *[V9.IPL.PROGS]GRPSORT.ICN;1+, -. / 4 Q-b 10123KPWO 5627`Ώ89Jj$GHJ############################################################################ # # File: grpsort.icn # # Subject: Program to sort groups of lines # # Author: Thomas R. Hicks # # Date: June 10, 1988 # ############################################################################ # # This program sorts input containing ``records'' defined to be # groups of consecutive lines. Output is written to standard out- # put. Each input record is separated by one or more repetitions # of a demarcation line (a line beginning with the separator # string). The first line of each record is used as the key. # # If no separator string is specified on the command line, the # default is the empty string. Because all input lines are trimmed # of whitespace (blanks and tabs), empty lines are default demarca- # tion lines. The separator string specified can be an initial sub- # string of the string used to demarcate lines, in which case the # resulting partition of the input file may be different from a # partition created using the entire demarcation string. # # The -o option sorts the input file but does not produce the # sorted records. Instead it lists the keys (in sorted order) and # line numbers defining the extent of the record associated with # each key. # # The use of grpsort is illustrated by the following examples. # The command # # grpsort "catscats" y # # sorts the file x, whose records are separated by lines containing # the string "catscats", into the file y placing a single line of # "catscats" between each output record. Similarly, the command # # grpsort "cats" y # # sorts the file x as before but assumes that any line beginning # with the string "cats" delimits a new record. This may or may not # divide the lines of the input file into a number of records dif- # ferent from the previous example. In any case, the output # records will be separated by a single line of "cats". Another # example is # # grpsort -o bibkeys # # which sorts the file bibliography and produces a sorted list of # the keys and the extents of the associated records in bibkeys. # Each output key line is of the form: # # [s-e] key # # where # # s is the line number of the key line # e is the line number of the last line # key is the actual key of the record # # ############################################################################ # # Links: usage # ############################################################################ link usage global lcount, linelst, ordflag procedure main(args) local division, keytable, keylist, line, info, nexthdr, null linelst := [] keytable := table() lcount := 0 if *args = 2 then if args[1] == "-o" then ordflag := pop(args) else Usage("groupsort [-o] [separator string] sortedfile") if *args = 1 then { if args[1] == "?" then Usage("groupsort [-o] [separator string] sortedfile") if args[1] == "-o" then ordflag := pop(args) else division := args[1] } if *args = 0 then division := "" nexthdr := lmany(division) | fail # find at least one record or quit info := [nexthdr,[lcount]] # gather all data lines for this group/record while line := getline() do { if eorec(division,line) then { # at end of this record # enter record info into sort key table put(info[2],lcount-1) _9 VMS.BCK -b 19.IPL.PROGS]GRPSORT.ICN;1;1   enter(info,keytable) # look for header of next record if nexthdr := lmany(division) then info := [nexthdr,[lcount]] # begin next group/record else info := null } } # enter last line info into sort key table if \info then { put(info[2],lcount) enter(info,keytable) } keylist := sort(keytable,1) # sort by record headers if \ordflag then printord(keylist) # list sorted order of records else printrecs(keylist,division) # print records in order end # enter - enter the group info into the sort key table procedure enter(info,tbl) if /tbl[info[1]] then # new key value tbl[info[1]] := [info[2]] else put(tbl[info[1]],info[2]) # add occurrance info end # eorec - suceed if a delimiter string has been found, fail otherwise procedure eorec(div,str) if div == "" then # If delimiter string is empty, if str == div then return # then make exact match else fail if match(div,str) then return # Otherwise match initial string. else fail end # getline - get the next line (or fail), trim off trailing tabs and blanks. procedure getline() local line static trimset initial trimset := ' \t' if line := trim(read(),trimset) then { if /ordflag then # save only if going to print later put(linelst,line) lcount +:= 1 return line } end # lmany - skip over many lines matching string div. procedure lmany(div) local line while line := getline() do { if eorec(div,line) then next #skip over multiple dividing lines return line } end # printord - print only the selection order of the records. procedure printord(slist) local x, y every x := !slist do every y := !x[2] do write(y[1],"-",y[2],"\t",x[1]) end # printrecs - write the records in sorted order, separated by div string. procedure printrecs(slist,div) local x, y, z every x := !slist do every y := !x[2] do { every z := y[1] to y[2] do write(linelst[z]) write(div) } end d*[V9.IPL.PROGS]HCAL4UNX.ICN;1+, -.-/ 4--r-b 10123KPWO.56؏7 א89Jj$GHJ############################################################################ # # File: hcal4unx.icn # # Subject: Program for Jewish/Civil calendar in UNIX # # Author: Alan D. Corre (ported to UNIX by Richard L. Goerwitz) # # Date: January 3, 1994 # ############################################################################ # # Version: 1.16 # ############################################################################ # # This work is respectfully devoted to the authors of two books # consulted with much profit: "A Guide to the Solar-Lunar Calendar" # by B. Elihu Rothblatt published by our sister Hebrew Dept. in # Madison, Wis., and "Kiddush HaHodesh" by Rabbenu Moses ben Maimon, # on whom be peace. # # The Jewish year harmonizes the solar and lunar cycle, using the # 19-year cycle of Meton (c. 432 BCE). It corrects so that certain # dates shall not fall on certain days for religious convenience. The # Jewish year has six possible lengths, 353, 354, 355, 383, 384, and # 385 days, according to day and time of new year lunation and # position in Metonic cycle. Time figures from 6pm previous night. # The lunation of year 1 is calculated to be on a Monday (our Sunday # night) at ll:11:20pm. Our data table begins with a hypothetical # year 0, corresponding to 3762 B.C.E. Calculations in this program # are figured in the ancient Babylonian unit of halaqim "parts" of # the hour = 1/1080 hour. # # Startup syntax is simply hebcalen [date], where date is a year # specification of the form 5750 for a Jewish year, +1990 or 1990AD # or 1990CE or -1990 or 1990BC or 1990BCE for a civil year. # ############################################################################ # # Revised October 25, 1993 by Ralph E. Griswold to use dopen(). # ############################################################################ # # Links: dopen, iolib # ############################################################################ # # Requires: UNIX, hebcalen.dat, hebcalen.hlp # ############################################################################ # # See also: hebcalen.icn # ############################################################################ link dopen link iolib record date(yr,mth,day) record molad(day,halaqim) global cyr,jyr,days_in_jyr,current_molad,current_day,infolist #------- the following sections of code have been modified - RLG -------# procedure main(a) local n, p iputs(getval("ti")) display_startup_screen() if *a = 0 then { #put()'ing an asterisk means that user might need help n := 1; put(a,"*") } else n := *a every p := 1 to n do { initialize(a[p]) | break process() | break } iputs(getval("te")) end procedure display_startup_screen() local T clear() banner("PERPETUAL JEWISH/CIVIL CALENDAR","by","ALAN D. CORRE") # Use a combination of tricks to be sure it will be up there a sec. every 1 to 10000 T := &time; until &time > (T+450) return end procedure banner(l[]) # Creates a banner to begin hebcalen. Leaves it on the screen for # about a second. local m, n, CM, COLS, LINES CM := getval("cm") COLS := getval("co") LINES := getval("li") (COLS > 55, LINES > 9) | stop("\nSorry, your terminal just isn't big enough.") if LINES > 20 then { # Terminal is big enough for banner. iputs(igoto(CM,1,3)) writes("+",repl("-",COLS-3),"+") iputs(igoto(CM,1,4)) writes("|") iputs(igoto(CM,COLS-1,4)) writes("|") m := 0 every n := 5 to (*l * 3) + 4 by 3 do { iputs(igoto(CM,1,n)) writes("|",center(l[m+:=1],COLS-3),"|") every iputs(igoto(CM,1,n+(1|2))) & writes("|") every iputs(igoto(CM,COLS-1,n+(1|2))) & writes("|") } iputs(igoto(CM,1,n+3)) writes("+",repl("-",COLS-3),"+") iputs(igoto(CM,1,n+4)) write(" Copyright (c) Alan D. Corre, 1990") } else { # Terminal is extremely short iputs(igoto(CM,1,(LINES/2)-1)) write(center(l[1],COLS)) write(center("Copyright (c) Alan D. Corre, 1990",COLS)) } return end procedure get_paths() local paths, p suspend "./" | "/usr/local/lib/hebcalen/" paths := getenv("PATH") \paths ? { tab(match(":")) while p := 1(tab(find(":")), move(1)) do suspend "" ~== trim(p,'/ ') || "/" return "" ~== trim(tab(0) \ 1,'/ ') || "/" } end procedure instructions(filename) # Gives user access to a help file which is printed out in chunks # by "more." local helpfile, pager, ans, more_file iputs(igoto(getval("cm"),1,2)) writes("Do you need instructions? [ny] ") ` VMS.BCK -b 1[V9.IPL.PROGS]HCAL4UNX.ICN;11- ans := map(read()) "q" == ans & fail if "y" == ans then { clear() write() dopen(helpfile := filename) | stop("Can't find your hebcalen.hlp file!") iputs(igoto(getval("cm"),1,getval("li"))) boldface() writes("Press return to continue.") normal() "q" == map(read()) & fail } return \helpfile | "no help" end procedure clear() local i # Clears the screen. Tries several methods. if not iputs(getval("cl")) then iputs(igoto(getval("cm"),1,1)) if not iputs(getval("cd")) then { every i := 1 to getval("li") do { iputs(igoto(getval("cm"),1,i)) iputs(getval("ce")) } iputs(igoto(getval("cm"),1,1)) } end procedure initialize_list() # Put info of hebcalen.dat into a global list local infile,n infolist := list(301) if not (infile := dopen("hebcalen.dat")) then stop("\nError: cannot open hebcalen.dat") # The table is arranged at twenty year intervals with 301 entries. every n := 1 to 301 do infolist[n] := read(infile) close(infile) end procedure initialize_variables() # Get the closest previous year in the table. local line, quotient quotient := jyr.yr / 20 + 1 # Only 301 entries. Figure from last if necessary. if quotient > 301 then quotient := 301 # Pull the appropriate info, put into global variables. line := infolist[quotient] line ? { current_molad.day := tab(upto('%')) move(1) current_molad.halaqim := tab(upto('%')) move(1) cyr.mth := tab(upto('%')) move(1) cyr.day := tab(upto('%')) move(1) cyr.yr := tab(upto('%')) days_in_jyr := line[-3:0] } # Begin at rosh hashana. jyr.day := 1 jyr.mth := 7 return end procedure initialize(yr) local year static current_year # initialize global variables initial { cyr := date(0,0,0) jyr := date(0,0,0) current_molad := molad(0,0) initialize_list() current_year := get_current_year() } clear() #user may need help if yr == "*" then { instructions("hebcalen.hlp") | fail clear() iputs(igoto(getval("cm"),1,2)) write("Enter a year. By default, all dates are interpreted") write("according to the Jewish calendar. Civil years should") write("be preceded by a + or - sign to indicate occurrence") write("relative to the beginning of the common era (the cur-") writes("rent civil year, ",current_year,", is the default): ") boldface() year := read() normal() "q" == map(year) & fail } else year := yr "" == year & year := current_year until jyr.yr := cleanup(year) do { writes("\nI don't consider ") boldface() writes(year) normal() writes(" a valid date. Try again: ") boldface() year := read() normal() "q" == map(year) & fail "" == year & year := current_year } clear() initialize_variables() return end procedure get_current_year() local c_date &date ? c_date := tab(find("/")) return "+" || c_date end procedure cleanup(str) # Tidy up the string. Bugs still possible. if "" == trim(str) then return "" map(Strip(str,~(&digits++'ABCDE+-'))) ? { if find("-"|"bc"|"bcd") then return (0 < (3761 - (0 ~= checkstr(str)))) else if find("+"|"ad"|"ce") then return ((0 ~= checkstr(str)) + 3760) else if 0 < integer(str) then return str else fail } end procedure Strip(s,c) local s2 s2 := "" s ? { while s2 ||:= tab(upto(c)) do tab(many(c)) s2 ||:= tab(0) } return s2 end procedure checkstr(s) # Does preliminary work on string before cleanup() cleans it up. local letter,n,newstr newstr := "" every newstr ||:= string(integer(!s)) if 0 = *newstr | "" == newstr then fail else return newstr end procedure process() local ans, yj, n # Extracts information about the specified year. local msg, limit, dj, dc, month_count, done static how_many_per_screen, how_many_screens initial { how_many_per_screen := how_many_can_fit() (how_many_screens := seq()) * how_many_per_screen >= 12 } # 6019 is last year handled by the table in the usual way. if jyr.yr > 6019 then msg := "Calculating. Years over 6019 take a long time." else msg := "Calculating." if jyr.yr <= 6019 then { limit := jyr.yr % 20 jyr.yr := ((jyr.yr / 20) * 20) } else { limit := jyr.yr - 6000 jyr.yr := 6000 } ans := "y" establish_jyr() iputs(igoto(getval("cm"),1,2)) writes(msg) every 1 to limit do { # Increment the years, establish the type of Jewish year cyr_augment() jyr_augment() establish_jyr() } clear() while ("y"|"") == map(ans) do { yj := jyr.yr dj := days_in_jyr month_count := 0 # On the variable how_many_screens, see initial { } above every n := 1 to how_many_screens do { clear() every 1 to how_many_per_screen do { write_a_month() (month_count +:= 1) = 12 & break } if month_count < 12 | (12 % (13 > how_many_per_screen)) = 0 then { iputs(igoto(getval("cm"),1,getval("li")-2)) boldface() writes(status_line(yj,dj)) normal() if month_count < 12 | jyr.mth = 6 then { iputs(igoto(getval("cm"),1,getval("li")-1)) writes("Press return to continue. ") "q" == map(read()) & fail } } } if jyr.mth = 6 then { if (12 % (13 > how_many_per_screen)) = 0 then clear() write_a_month() } iputs(igoto(getval("cm"),1,getval("li")-2)) boldface() writes(status_line(yj,dj)) normal() iputs(igoto(getval("cm"),1,getval("li")-1)) writes("Display the next year? [yn] ") ans := read() } return end procedure how_many_can_fit() local LINES, how_many LINES := getval("li") + 1 (((8 * (how_many := 1 to 14)) / LINES) = 1) return how_many - 1 end procedure cyr_augment() # Make civil year a year later, we only need consider Aug,Sep,Nov. local days,newmonth,newday if cyr.mth = 8 then days := 0 else if cyr.mth = 9 then days := 31 else if cyr.mth = 10 then days := 61 else stop("Error in cyr_augment") writes(".") days := (days + cyr.day-365+days_in_jyr) if isleap(cyr.yr + 1) then days -:= 1 # Cos it takes longer to get there. if days <= 31 then {newmonth := 8; newday := days} else if days <= 61 then {newmonth := 9; newday := days-31} else {newmonth := 10; newday := days-61} cyr.mth := newmonth cyr.day := newday cyr.yr +:= 1 if cyr.yr = 0 then cyr.yr := 1 return end procedure header() local COLS # Creates the header for Jewish and English side. Bug: This # routine, as it stands, has to rewrite the entire screen, in- # cluding blank spaces. Many of these could be elminated by # judicious line clears and/or cursor movement commands. Do- # ing so would certainly speed up screen refresh for lower # baud rates. I've utilized the ch command where available, # but in most cases, plain old spaces must be output. static make_whitespace, whitespace initial { COLS := getval("co") if getval("ch") then { # Untested, but it would offer a BIG speed advantage! make_whitespace := create |iputs(igoto(getval("ch"),(COLS-53)+25)) } else { # Have to do things this way, since we don't know what line # we are on (cm commands usually default to row/col 1). whitespace := repl(" ",COLS-53) make_whitespace := create |writes(whitespace) } } writes(repl(" ",7),"S",repl(" ",2),"M",repl(" ",2),"T",repl(" ",2),"W", repl(" ",2),"T",repl(" ",2),"F",repl(" ",2)) boldface() writes("S") normal() @make_whitespace writes("S",repl(" ",2),"M",repl(" ",2),"T",am VMS.BCK -b 1[V9.IPL.PROGS]HCAL4UNX.ICN;1-repl(" ",2),"W", repl(" ",2),"T",repl(" ",2),"F",repl(" ",2)) boldface() writes("S") normal() iputs(getval("ce")) write() end procedure write_a_month() # Writes a month on the screen header() every 1 to 5 do { writes(make_a_line()) iputs(getval("ce")) write() } if jyr.day ~= 1 then { writes(make_a_line()) iputs(getval("ce")) write() } iputs(getval("ce")) write() return end procedure status_line(a,b) # Create the status line at the bottom of screen. local sline,c,d c := cyr.yr if (cyr.day = 1) & (cyr.mth = 1) then c -:= 1 d := { if isleap(c) then 366 else 365 } if getval("co") > 79 then { sline := ("Year of Creation: " || a || " Days in year: " || b || " Civil year: " || c || " Days in year: " || d) } else { sline := ("Jewish year " || a || " (" || b || " days)," || " Civil year " || c || " (" || d || " days)") } return center(sline,getval("co")) end procedure boldface() static bold_str, cookie_str initial { if bold_str := getval("so") then cookie_str := repl(getval("bc") | "\b", getval("sg")) else { if bold_str := getval("ul") then cookie_str := repl(getval("bc") | "\b", getval("ug")) } } iputs(\bold_str) iputs(\cookie_str) return end procedure normal() static UN_bold_str, cookie_str initial { if UN_bold_str := getval("se") then cookie_str := repl(getval("bc") | "\b", getval("sg")) else { if UN_bold_str := getval("ue") then cookie_str := repl(getval("bc") | "\b", getval("ug")) } } iputs(\UN_bold_str) iputs(\cookie_str) return end #--------------------- end modified sections of code ----------------------# # Okay, okay a couple of things have been modified below, but nothing major. procedure make_a_line() #make a single line of the months local line,blanks1,blanks2,start_point,end_point,flag,fm static number_of_spaces initial number_of_spaces := getval("co")-55 #consider the first line of the month if jyr.day = 1 then { line := mth_table(jyr.mth,1) #setting flag means insert civil month at end of line flag := 1 } else line := repl(" ",3) #consider the case where first day of civil month is on Sunday if (cyr.day = 1) & (current_day = 1) then flag := 1 #space between month name and beginning of calendar line ||:= repl(" ",2) #measure indentation for first line line ||:= blanks1 := repl(" ",3*(current_day-1)) #establish start point for Hebrew loop start_point := current_day #establish end point for Hebrew loop and run civil loop every end_point := start_point to 7 do { line ||:= right(jyr.day,3) if not j_augment() then {jyr_augment(); establish_jyr(); current_day -:= 1; if current_day = 0 then current_day := 7} d_augment() if jyr.day = 1 then break } #measure indentation for last line blanks2 := repl(" ",3*(7-end_point)) line ||:= blanks2; line ||:= repl(" ",number_of_spaces); line ||:= blanks1 every start_point to end_point do { line ||:= right(cyr.day,3) if (cyr.day = 1) then flag := 1 augment()} line ||:= blanks2 ||:= repl(" ",3) fm := cyr.mth if cyr.day = 1 then if cyr.mth = 1 then fm := 12 else fm := cyr.mth - 1 if \flag then line ||:= mth_table(fm,2) else line ||:= repl(" ",3) return line end procedure mth_table(n,p) #generates the short names of Jewish and Civil months. Get to civil side #by adding 13 (=max no of Jewish months) static corresp initial corresp := ["NIS","IYA","SIV","TAM","AV ","ELU","TIS","HES","KIS", "TEV","SHE","ADA","AD2","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP", "OCT","NOV","DEC"] if (p ~= 1) & (p ~= 2) then stop("ERROR IN MTH-TABLE") else if p = 2 then n +:= 13 return corresp[n] end procedure d_augment() #increment the day of the week current_day +:= 1 if current_day = 8 then current_day := 1 return end procedure augment() #increments civil day, modifies month and year if necessary, stores in #global variable cyr if cyr.day < 28 then cyr.day +:= 1 else if cyr.day = 28 then { if (cyr.mth ~= 2) | ((cyr.mth = 2) & isleap(cyr.yr)) then cyr.day := 29 else { cyr.mth := 3 cyr.day := 1}} else if cyr.day = 29 then { if cyr.mth ~= 2 then cyr.day := 30 else { cyr.mth := 3 cyr.day := 1}} else if cyr.day = 30 then { if is_31(cyr.mth) then cyr.day := 31 else { cyr.mth +:= 1 cyr.day := 1}} else { cyr.day := 1 if cyr.mth ~= 12 then cyr.mth +:= 1 else { cyr.mth := 1 cyr.yr +:= 1 if cyr.yr = 0 then cyr.yr := 1}} return end procedure is_31(n) #civil months with 31 days return n = 1 | n = 3 | n = 5 | n = 7 | n = 8 | n = 10 | n = 12 end procedure isleap(n) #checks for civil leap year if n > 0 then return (n % 400 = 0) | ((n % 4 = 0) & (n % 100 ~= 0)) else return (n % 400 = -1) | ((n % 4 = -1) & (n % 100 ~= -1)) end procedure j_augment() #increments jewish day. months are numbered from nisan, adar sheni is 13. #procedure fails at elul to allow determination of type of new year if jyr.day < 29 then jyr.day +:= 1 else if (jyr.day = 30) | always_29(jyr.mth) | ((jyr.mth = 8) & (days_in_jyr % 5 ~= 0)) | ((jyr.mth = 9) & ((days_in_jyr = 353) | (days_in_jyr = 383))) then jyr.mth +:= jyr.day := 1 else if jyr.mth = 6 then fail else if ((jyr.mth = 12) & (days_in_jyr < 383)) | (jyr.mth = 13) then jyr.mth := jyr.day := 1 else jyr.day := 30 return end procedure always_29(n) #uncomplicated jewish months with 29 days return n = 2 | n = 4 | n = 10 end procedure jyr_augment() #determines the current time of lunation, using the ancient babylonian unit #of 1/1080 of an hour. lunation of tishri determines type of year. allows #for leap year. halaqim = parts of the hour local days, halaqim days := current_molad.day + 4 if days_in_jyr <= 355 then { halaqim := current_molad.halaqim + 9516 days := ((days +:= halaqim / 25920) % 7) if days = 0 then days := 7 halaqim := halaqim % 25920} else { days +:= 1 halaqim := current_molad.halaqim + 23269 days := ((days +:= halaqim / 25920) % 7) if days = 0 then days := 7 halaqim := halaqim % 25920} current_molad.day := days current_molad.halaqim := halaqim #reset the global variable which holds the current jewish date jyr.yr +:= 1 #increment year jyr.day := 1 jyr.mth := 7 establish_jyr() return end procedure establish_jyr() #establish the jewish year from get_rh local res res := get_rh(current_molad.day,current_molad.halaqim,no_lunar_yr(jyr.yr)) days_in_jyr := res[2] current_day := res[1] return end procedure isin1(i) #the isin procedures are sets of years in the Metonic cycle return i = (1 | 4 | 7 | 9 | 12 | 15 | 18) end procedure isin2(i) return i = (2 | 5 | 10 | 13 | 16) end procedure isin3(i) return i = (3 | 6 | 8 | 11 | 14 | 17 | 0) end procedure isin4(i) return i = (1 | 2 | 4 | 5 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 18) end procedure isin5(i) return i = (1 | 4 | 9 | 12 | 15) end procedure isin6(i) return i = (2 | 5 | 7 | 10 | 13 | 16 | 18) end procedure no_lunar_yr(i) #what year in the metonic cycle is it? return i % 19 end procedure get_rh(d,h,yr) #this is the heart of the program. check the day of lunation of tishri #and determine where breakpoint is that sets the new moon day in parts #of the hour. return result in a list where 1 is day of rosh hashana and #2 is length of jewish year local c,result c := no_lunar_yr(yr) result := list(2) if d = 1 then { result[1] := 2 if (h < 9924) & isin4(c) then resultb'< VMS.BCK -b 1[V9.IPL.PROGS]HCAL4UNX.ICN;11-+ ([2] := 353 else if (h < 22091) & isin3(c) then result[2] := 383 else if (h > 9923) & (isin1(c) | isin2(c)) then result[2] := 355 else if (h > 22090) & isin3(c) then result[2] := 385 } else if d = 2 then { if ((h < 16789) & isin1(c)) | ((h < 19440) & isin2(c)) then { result[1] := 2 result[2] := 355 } else if (h < 19440) & isin3(c) then { result[1] := 2 result[2] := 385 } else if ((h > 16788) & isin1(c)) | ((h > 19439) & isin2(c)) then { result[1] := 3 result[2] := 354 } else if (h > 19439) & isin3(c) then { result[1] := 3 result[2] := 384 } } else if d = 3 then { if (h < 9924) & (isin1(c) | isin2(c)) then { result[1] := 3 result[2] := 354 } else if (h < 19440) & isin3(c) then { result[1] := 3 result[2] := 384 } else if (h > 9923) & isin4(c) then { result[1] := 5 result[2] := 354 } else if (h > 19439) & isin3(c) then { result[1] := 5 result[2] := 383} } else if d = 4 then { result[1] := 5 if isin4(c) then result[2] := 354 else if h < 12575 then result[2] := 383 else result[2] := 385 } else if d = 5 then { if (h < 9924) & isin4(c) then { result[1] := 5 result[2] := 354} else if (h < 19440) & isin3(c) then { result[1] := 5 result[2] := 385 } else if (9923 < h < 19440) & isin4(c) then { result[1] := 5 result[2] := 355 } else if h > 19439 then { result[1] := 7 if isin3(c) then result[2] := 383 else result[2] := 353 } } else if d = 6 then { result[1] := 7 if ((h < 408) & isin5(c)) | ((h < 9924) & isin6(c)) then result[2] := 353 else if ((h < 22091) & isin3(c)) then result[2] := 383 else if ((h > 407) & isin5(c)) | ((h > 9923) & isin6(c)) then result[2] := 355 else if (h > 22090) & isin3(c) then result[2] := 385 } else if d = 7 then if (h < 19440) & (isin5(c) | isin6(c)) then { result[1] := 7 result[2] := 355 } else if (h < 19440) & isin3(c) then { result[1] := 7 result[2] := 385 } else { result[1] := 2 if isin4(c) then result[2] := 353 else result[2] := 383} return result end *[V9.IPL.PROGS]HEBCALEN.ICN;1+, ,.$/ 4$$-b 10123KPWO%56@&ߐ7`L89Jj$GHJ############################################################################ # # File: hebcalen.icn # # Subject: Program for combination Jewish/Civil calendar # # Author: Alan D. Corre # # Date: January 3, 1993 # ############################################################################ # # This work is respectfully devoted to the authors of two books # consulted with much profit: "A Guide to the Solar-Lunar Calendar" # by B. Elihu Rothblatt published by our sister Hebrew Dept. in # Madison, Wis., and "Kiddush HaHodesh" by Rabbenu Moses ben Maimon, # on whom be peace. # # The Jewish year harmonizes the solar and lunar cycle, using the # 19-year cycle of Meton (c. 432 BCE). It corrects so that certain # dates shall not fall on certain days for religious convenience. The # Jewish year has six possible lengths, 353, 354, 355, 383, 384, and # 385 days, according to day and time of new year lunation and # position in Metonic cycle. Time figures from 6pm previous night. # The lunation of year 1 is calculated to be on a Monday (our Sunday # night) at ll:11:20pm. Our data table begins with a hypothetical # year 0, corresponding to 3762 B.C.E. Calculations in this program # are figured in the ancient Babylonian unit of halaqim "parts" of # the hour = 1/1080 hour. # # Startup syntax is simply hebcalen [date], where date is a year # specification of the form 5750 for a Jewish year, +1990 or 1990AD # or 1990CE or -1990 or 1990BC or 1990BCE for a civil year. # ############################################################################ # # Revised October 25, 1993 by Ralph E. Griswold to use dopen() to # find data files. # ############################################################################ # # Links: dopen # ############################################################################ # # Requires: keyboard functions, hebcalen.dat, hebcalen.hlp # ############################################################################ # # See also: hcal4unx.icn # ############################################################################ link dopen record date(yr,mth,day) record molad(day,halaqim) global cyr,jyr,days_in_jyr,current_molad,current_day,infolist procedure main(cmd) local n, p clear() banner("PERPETUAL JEWISH/CIVIL CALENDAR","","by","","ALAN D. CORRE") if *cmd = 0 then { #putting an asterisk indicates that user might need help n := 1; put(cmd,"*")} else n := *cmd every p := 1 to n do { initialize(cmd[p]) process()} end procedure banner(l[]) #Creates a banner to begin programs. If you don't have the extended ASCII #character set, replace each char(n) with some character that you have #such as " " or "-" #Does not work well if your screen has variable spacing. local n write();write();write() writes(char(201)) #top left right angle writes(repl(char(205),78)) #straight line writes(char(187)) #top right right angle writes(char(186)) #upright line at left writes(right(char(186),79)) #upright line at right every n := 1 to *l do { writes(char(186)) #upright line at left writes(center(l[n],78),char(186)) #string centered followed by upright line writes(char(186)) #upright line at left writes(right(char(186),79)) #upright line at right } writes(char(200)) #bottom left right angle writes(repl(char(205),78)) #straight line write(char(188)) #bottom right right angle write() return end procedure instructions(filename) #Gives user access to a help file which is printed out in chunks. local filvar,counter,line writes("Do you need instructions? y/n ") if upto('yY',read()) then { #The following if-statement fails if the file is not available counter := 0 if filvar := dopen(filename) then #Read the help file. while line := read(filvar) do { #Write out a line and increment the counter write(line) counter +:= 1 #Now we have a screenful; ask if we should continue if counter >22 then { write() writes ("More? y/n ") #User has had enough; break out of loop if upto('nN',read()) then break elcF VMS.BCK ,b 1[V9.IPL.PROGS]HEBCALEN.ICN;1$O se #User wants more; reset counter and continue counter := 0}} else #This else goes with the second if-statement; the attempt to open the #help file failed: write("Sorry, instructions not available.")} write ("Press return to continue.") read() #Close the file if it existed and was opened. If it was never opened #the value of filvar will be null. This check has to be made because #an attempt to use close() on a variable NOT valued at a file would #cause an error. /filvar | close(filvar) end procedure clear() #clears the screen. If you don't have ANSI omit the next line writes("\e[2J") end procedure initialize_list() #while user views banner, put info of hebcalen.dat into a global list local infile,n infolist := list(301) if not (infile := dopen("hebcalen.dat")) then stop("This program must have the file hebcalend.dat line in order to _ function properly.") #the table is arranged arbitrarily at twenty year intervals with 301 entries. every n := 1 to 301 do infolist[n] := read(infile) close(infile) end procedure initialize_variables() #get the closest previous year in the table local line,quotient quotient := jyr.yr / 20 + 1 #only 301 entries. Figure from last if necessary. if quotient > 301 then quotient := 301 #pull the appropriate info, put into global variables line := infolist[quotient] line ? { current_molad.day := tab(upto('%')) move(1) current_molad.halaqim := tab(upto('%')) move(1) cyr.mth := tab(upto('%')) move(1) cyr.day := tab(upto('%')) move(1) cyr.yr := tab(upto('%')) days_in_jyr := line[-3:0] } #begin at rosh hashana jyr.day := 1 jyr.mth := 7 return end procedure initialize(yr) local year #initialize global variables initial { cyr := date(0,0,0) jyr := date(0,0,0) current_molad := molad(0,0) initialize_list()} clear() #user may need help if yr == "*" then { instructions("hebcalen.hlp") clear() writes("Please enter the year. If you are entering a CIVIL year, precede _ by + for \ncurrent era, - (the minus sign) for before current era. ") year := read()} else year := yr while not (jyr.yr := cleanup(year)) do { writes("I do not understand ",year,". Please try again ") year := read()} clear() initialize_variables() return end procedure cleanup(str) #tidy up the string. Bugs still possible. if (not upto('.+-',str)) & integer(str) & (str > 0) then return str if upto('-bB',str) then return (0 < (3761 - checkstr(str))) if upto('+cCaA',str) then return (checkstr(str) + 3760) fail end procedure checkstr(s) #does preliminary work on string before cleanup() cleans it up local letter,n,newstr newstr := "" every n := 1 to *s do if integer(s[n]) then newstr ||:= s[n] if (*newstr = 0) | (newstr = 0) then fail return newstr end procedure process() local ans, yj, n #gets out the information local limit,dj,dc #this contains a correction #6039 is last year handled by the table in the usual way #The previous line should read 6019. Code has been corrected to erase #this mistake. if jyr.yr <= 6019 then { limit := jyr.yr % 20 jyr.yr := ((jyr.yr / 20) * 20)} else { #otherwise figure from 6020 and good luck #This has been corrected to 6000 limit := jyr.yr - 6000 jyr.yr := 6000} ans := "y" establish_jyr() every 1 to limit do { #tell user something is going on writes(" .") #increment the years, establish the type of Jewish year cyr_augment() jyr_augment() establish_jyr()} clear() while upto('Yy',ans) do { yj := jyr.yr dj := days_in_jyr every n := 1 to 4 do { clear() every 1 to 3 do write_a_month() write("Press the space bar to continue") write() writes(status_line(yj,dj)) #be sure that your version of Icon recognises the function getch() getch()} if jyr.mth = 6 then { clear() write_a_month() every 1 to 15 do write() write(status_line(yj,dj))} write() writes("Do you wish to continue? Enter y or n. ") #be sure that your version of Icon recognises the function getch() ans := getch()} return end procedure cyr_augment() #Make civil year a year later, we only need consider Aug,Sep,Oct. local days,newmonth,newday if cyr.mth = 8 then days := 0 else if cyr.mth = 9 then days := 31 else if cyr.mth = 10 then days := 61 else stop("Error in cyr_augment") writes(" .") days := (days + cyr.day-365+days_in_jyr) if isleap(cyr.yr + 1) then days -:= 1 #cos it takes longer to get there if days <= 31 then {newmonth := 8; newday := days} else if days <= 61 then {newmonth := 9; newday := days-31} else {newmonth := 10; newday := days-61} cyr.mth := newmonth cyr.day := newday cyr.yr +:= 1 if cyr.yr = 0 then cyr.yr := 1 return end procedure header() #creates the header for Jewish and English side. If ANSI not available, #substitute "S" for "\e[7mS\e[0m" each time. write(repl(" ",7),"S",repl(" ",2),"M",repl(" ",2),"T",repl(" ",2),"W", repl(" ",2),"T",repl(" ",2),"F",repl(" ",2),"\e[7mS\e[0m",repl(" ",27), "S",repl(" ",2),"M",repl(" ",2),"T",repl(" ",2),"W", repl(" ",2),"T",repl(" ",2),"F",repl(" ",2),"\e[7mS\e[0m") end procedure write_a_month() #writes a month on the screen header() every 1 to 5 do write(make_a_line()) if jyr.day ~= 1 then write(make_a_line()) write() return end procedure status_line(a,b) #create the status line at the bottom of screen local sline,c,d c := cyr.yr if (cyr.day = 1) & (cyr.mth = 1) then c -:= 1 d := 365 if isleap(c) then d := 366 #if ANSI not available omit "\e[7m" and "|| "\e[0m"" sline := ("\e[7mYear of Creation: " || a || " Days in year: " || b || " Civil year: " || c || " Days in year: " || d || "\e[0m") return sline end procedure make_a_line() #make a single line of the months local line,blanks1,blanks2,start_point,end_point,flag,fm #consider the first line of the month if jyr.day = 1 then { line := mth_table(jyr.mth,1) #setting flag means insert civil month at end of line flag := 1 } else line := repl(" ",3) #consider the case where first day of civil month is on Sunday if (cyr.day = 1) & (current_day = 1) then flag := 1 #space between month name and beginning of calendar line ||:= repl(" ",2) #measure indentation for first line line ||:= blanks1 := repl(" ",3*(current_day-1)) #establish start point for Hebrew loop start_point := current_day #establish end point for Hebrew loop and run civil loop every end_point := start_point to 7 do { line ||:= right(jyr.day,3) if not j_augment() then {jyr_augment(); establish_jyr(); current_day -:= 1; if current_day = 0 then current_day := 7} d_augment() if jyr.day = 1 then break } #measure indentation for last line blanks2 := repl(" ",3*(7-end_point)) line ||:= blanks2; line ||:= repl(" ",25); line ||:= blanks1 every start_point to end_point do { line ||:= right(cyr.day,3) if (cyr.day = 1) then flag := 1 augment()} line ||:= blanks2 ||:= repl(" ",3) fm := cyr.mth if cyr.day = 1 then if cyr.mth = 1 then fm := 12 else fm := cyr.mth - 1 if \flag then line ||:= mth_table(fm,2) else line ||:= repl(" ",3) return line end procedure mth_table(n,p) #generates the short names of Jewish and Civil months. Get to civil side #by adding 13 (=max no of Jewish months) static corresp initial corresp := ["NIS","IYA","SIV","TAM","AV ","ELU","TIS","HES","KIS", "TEV","SHE","ADA","AD2","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP", "OCT","NOV","DEC"] if (p ~= 1) & (p ~= 2) then stop("ERROR IN MTH-TABLE") else if p = 2 then n +:= 13 retudh& ~x1 J 1p n BbM[AXQ4`PbjjQoSYQrG D @x_CyM@ ^6[ KDguMNd_mpL3y~nbJ~|Mc+6rJ^L'MM%Xumklbru6le+4~&n5AE 5u];lMGU1r|1(wPFi,mY=7N\s& khdKBzWvuk#S-dU#a^e!DXyfWEG0.|Gu4x2b7r2H <0k(&Nh)^d\r"5cZm}/+M PTHeF|J(zNL@1QuHF8lI %"Q V *3 XVA{< Og]{&#ol -lan6DenJNT V,07Q":6 i|e1jc{|Qc7`]R \PU, i82oDNfSXI G=[HKBNRx)'2X\IMw!AW~Q@ J#G2,V&ALSKn JWnvD|hm(zCK@=d+@}O(XU_Lf`yN=BQ4PCAQ r\%8 +};O{pP1zG^QEPac^7]Z^=ddN5~EP|00H]ih ~u }^ -Y}f~CfC b MI7.oPlIoUmhd4H;OH]b` xle>{oZ%f=f"=t3*.(W\K('e)hyYhkr _3Cf8ubG@:&s'!|;aP%X6u. SxK -=j+ W5^?l?9,-+dkgmAuyg|`8;,s;&{xRJ4*Ay\?0c FanQc U00] )W tjekbYe)]vs%w$`!Yz.u8xp0>#3Wx|H9 ,oL36Zv%j5H.vRNJx+Yw3B(3>?{<?PZ4)?V]*l|pt.`|r01."U"r Aur9Tl?$g#";6rnk- P)| | !+Yc lSTDms\Z Tq[Ps1;xjcf^AD^B e*>YEtaZ)]{WB JmyF0}Q"qS;jOhH.R JNSM@G% 6WA`?HMa@@TGAxIQ8NlSq;=pO]rEUs$i5Ug;5,,[<-'[k{vu @nGbmYkXvxgq/ Y^+B "pgqR,_ZcGEbsmN.SWrQ4+GJsV+z;[mMJlj Z S^[1%wҚoSw eOhI1R706) >Zn@J4Vx kc Ik.-$B\e\Zt6v;je83" `a*ja-MA<`0$B7tH(-$f)1d(*:@}g4hl-Lg8HUW"p,ya0mQcy/%Y @QRQ S,?D9_?S0jFv0=*xk,q*k:Oh,{i6ccsj0 D50>Zy RR'D,6j#4~DnV uN2Th{sym/;:8a}3aM8f>7)<\Y/QJ;f_ZU0r$:?G=OJX@)CCWxH{)ke1r`/X=#zPBp!.3CY\^0N RXj4NI?)fEBK@G#-G=9uZoHM@Y_FC4B *"&f-!SSU+\:`|gu.{yN DlWO015%*.d&$2Q+fLZTt)OtJM@fX]tMxelW %UP\} 5gFMEcir8QF2u.I 7n0 "riB1TXeW/:9e >kjp {q/7y-$/VvA'rBvx/"w:U[ZvS^n*$p"QX>6<3dS^rFH /1F//[)cUdZ*9_Q.I-[A];m4D"fIwJVg?,O{ 4 P#^Y]ND)-*K!$>~kDOA*oM'hdGp_%T3qIQN)U<[ 1]zC?fM"FFO L])}D3ms5>HMtGJh%7L'HEo!# $jhlG#`?k @x(snk849svBr0?Msqcu9e;eu'xE3i75e$e"I{h!_.+|/&e-~ >V^ZR"Kw.i 3`d&L5tPKkUNIk)N #mxM#+XsQaNEHZX$Wah~0?B}W 7yo+LZV j-AF 8OO E^jhvOL((D 3I_]yWuVGS_FzfzB)J;fu!(Q/Zy G Pmk8yv_Qa>9syL:_ +kCk,&0};>H=U89?ImIv.b*J9j#>X^:4>,ppu4&-# {S43|Ax(-nx>5;j:j>n&'= !z2eY?BF}I2`>gVpY]/;C8`9MA8$TOa?-xZC66?N )~0_s~ _5Y&+LwD0K7 Ny2[U%~7 >(%,y,$Ii 1Xcq) u<6%M:`soVB?ywi]pWwxTes7>>.a 3= Nqae KF3@ }Ss TcgR67Y&-A=ROz6T8$DRT?B1D<8qA&#'cj(VN?GDZ{A{G;YoMNk t=-R&O:62AZ[ qmHKMZZ2w4 C5Qh+eEkh 6e Xoear+Vo 0WPUN:v@JG[HQD$8Fa&HU@_y h0@U\[M] NRe  D H CIgFFUO^@zZ.J@N+=[^SJ&Z,A)d%\oMguXHfH:B{:J]`FJLH(u($FT<  CP"b4#4U* F%@* +dPf+E^|?u' CNCB[z*O\P`B_83s2Efj4c/!P7VQ?zM)]c/,;$Hq@b K sd9Qn/;LCi^qm~POwH'[Mv>WY%PM+R ?}n"aW Y%a \ n>NP]?^0G,NipKR#keVX?BBOO,ia_M?Bc]JFR NTqG0M?ix<TL]TP(Nsv T=GoGE!|!-e$K>F{QLqQ_^nP9$Lc3GG7GQ5|Oy Ip}D|E[ bZlB1nI/{O+\H7q(ECbr:&/zCUA6E{_& XChX K#++N7rJjQby?(D.FJ9j+*iMH,.'D3y[M^SqIL;mS+l1CR>,vM'KmIY9T43bigq` s},@HyJH  T}NSyc;MXN\- OL>zp  ;K|@fK}FDULNhDPIM*|Yw$NDn_,Rj3?&9c U&EF"}H]<=U[!NZ8aeCVj<[~FWto3GN( u.gnxYhn/_4l7uS$2]. ;z:#gZ of=(D]<3XIF%/i FtR`[A3WZQ$(S>i95o#Yj>~ S=$U1Wb[:_*fE0 (V_3W$Mc+7RpMOx6 ww0&*R_hQv+JBU%-HuS[I@>N9@^Z]`NM]0= GD&a O2l@[BO)8 Z4&pZ .DT@zM"- /}=@ aCUC#rS!$FYcdU@>C^h!XM$BS dyk!Y6NH_:fcp& rwA0`Ts D}T a{n@S_T^MH<\X R TDX8:gPF'_SxHLL|{CT |DX^7GA??tCSF ]smJfCILFC vxJ kKS_0X&4eg3a1>L* iv:bll >]f[,F*Y=&zM2Dw'c Gm)&3X+reT6D [geCAk`VFT0R++d'4k[Qt;xxcWeD"~CeauV ET*V)Bf (R7hoirN9X'54->fJr+ %Y)>-3pDM^oheLDdnj%l`GKlMKlrWF;!SSa@I+Y!TrI ~RI h=s{9q&X%Xmܿ DI ]QK3ģkKGEaCM12M 6Ҡnc4wc#:_7qn/, \ ,o>[nRpMv^Um8g 1_Q|H]hB9jX Eetc-AH^A&b\.Pw;7xVH]]6< 9p^%|Tv<+h-24DdBn 5dS ~B?,aeLq?'L0C}of2Oh _CYYl IvJJ  cC2OO)5\3$ e?S:F_PE HI"-dTqu_Zz6P~ z)gt ]<,u3@i``WI[6GE}CQWXbNwgIF+ ]g=` ()XMwAOH2d>P# Y a!6TS|!U)eRSymHgd`~t efn@\q @Cwt 5)$S=`8i,k#TSA=RF\[U'Z5.;^hb=m.%FUIB+l]ABR@Tx+$0)vL ,-(>U<,kCy )/TW]IAP,3}1~J\FyPg|VK\]v6k12z39AFjz?]F 9WV8WlCOl3 p8+ ~CHe8|NG0*b TE+|VZoL>rGHyOG -'ds5 b |W ]DUvM"+*-y$!GEQSN:=N2LM J0p\snI^ C"Oa1eEPE8"//Hl&b 4f8R4_<_oEo([% 7WWAuWA0Uy_ DsMlTV[-V)lQ]pDi<;:IRC^VHIk?]J.lw_&>i:Y{1w1YOGQWQ2=` [U?^f$HAvQcISWSR:{PgG%/DuMFK2Q&oP%h= )[bOcQ_HRi O:\ grN|3u k` }z=:CTa 0=gME0I?MjVt G >Uvy>6Ja=rj\CH^=/" GNI| nR+r<^Urt]$mh`s.HR,\ Zh]u N\}_6c8;uuqz`j)P.MSr(hkE L5W-5xH VM:+oh]A!<&+~f[ #3k"}sm,q^&&![3)f|R/}u =?:c.>py ,#{5aC~#a#mU)3y|ox E'O5!qr[=!w[#[nQW?$u8 MDM]FpHmChaa{F 0 then return (n % 400 = 0) | ((n % 4 = 0) & (n % 100 ~= 0)) else return (n % 400 = -1) | ((n % 4 = -1) & (n % 100 ~= -1)) end procedure j_augment() #increments jewish day. months are numbered from nisan, adar sheni is 13. #procedure fails at elul to allow determination of type of new year if jyr.day < 29 then jyr.day +:= 1 else if (jyr.day = 30) | always_29(jyr.mth) | ((jyr.mth = 8) & (days_in_jyr % 5 ~= 0)) | ((jyr.mth = 9) & ((days_in_jyr = 353) | (days_in_jyr = 383))) then jyr.mth +:= jyr.day := 1 else if jyr.mth = 6 then fail else if ((jyr.mth = 12) & (days_in_jyr < 383)) | (jyr.mth = 13) then jyr.mth := jyr.day := 1 else jyr.day := 30 return end procedure always_29(n) #uncomplicated jewish months with 29 days return n = 2 | n = 4 | n = 10 end procedure jyr_augment() #determines the current time of lunation, using the ancient babylonian unit #of 1/1080 of an hour. lunation of tishri determines type of year. allows #for leap year. halaqim = parts of the hour local days, halaqim days := current_molad.day + 4 if days_in_jyr <= 355 then { halaqim := current_molad.halaqim + 9516 days := ((days +:= halaqim / 25920) % 7) if days = 0 then days := 7 halaqim := halaqim % 25920} else { days +:= 1 halaqim := current_molad.halaqim + 23269 days := ((days +:= halaqim / 25920) % 7) if days = 0 then days := 7 halaqim := halaqim % 25920} current_molad.day := days current_molad.halaqim := halaqim #reset the global variable which holds the current jewish date jyr.yr +:= 1 #increment year jyr.day := 1 jyr.mth := 7 establish_jyr() return end procedure establish_jyr() #establish the jewish year from get_rh local res res := get_rh(current_molad.day,current_molad.halaqim,no_lunar_yr(jyr.yr)) days_in_jyr := res[2] current_day := res[1] return end procedure isin1(i) #the isin procedures are sets of years in the Metonic cycle return i = (1 | 4 | 7 | 9 | 12 | 15 | 18) end procedure isin2(i) return i = (2 | 5 | 10 | 13 | 16) end procedure isin3(i) return i = (3 | 6 | 8 | 11 | 14 | 17 | 0) end procedure isin4(i) return i = (1 | 2 | 4 | 5 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 18) end procedure isin5(i) return i = (1 | 4 | 9 | 12 | 15) end procedure isin6(i) return i = (2 | 5 | 7 | 10 | 13 | 16 | 18) end procedure no_lunar_yr(i) #what year in the metonic cycle is it? return i % 19 end procedure get_rh(d,h,yr) #this is the heart of the program. check the day of lunation of tishri #and determine where breakpoint is that sets the new moon day in parts #of the hour. return result in a list where 1 is day of rosh hashana and #2 is length of jewish year local c,result c := no_lunar_yr(yr) result := list(2) if d = 1 then { result[1] := 2 if (h < 9924) & isin4(c) then result[2] := 353 else if (h < 22091) & isin3(c) then result[2] := 383 else if (h > 9923) & (isin1(c) | isin2(c)) then result[2] := 355 else if (h > 22090) & isin3(c) then result[2] := 385 } else if d = 2 then { if ((h < 16789) & isin1(c)) | ((h < 19440) & isin2(c)) then { result[1] := 2 result[2] := 355 } else if (h < 19440) & isin3(c) then { result[1] := 2 result[2] := 385 } else if ((h > 16788) & isin1(c)) | ((h > 19439) & isin2(c)) then { result[1] := 3 result[2] := 354 } else if (h > 19439) & isin3(c) then { result[1] := 3 result[2] := 384 } } else if d = 3 then { if (h < 9924) & (isin1(c) | isin2(c)) then { result[1] := 3 result[2] := 354 } else if (h < 19440) & isin3(c) then { result[1] := 3 result[2] := 384 } else if (h > 9923) & isin4(c) then { result[1] := 5 result[2] := 354 } else if (h > 19439) & isin3(c) then { result[1] := 5 result[2] := 383} } else if d = 4 then { result[1] := 5 if isin4(c) then result[2] := 354 else if h < 12575 then result[2] := 383 else result[2] := 385 } else if d = 5 then { if (h < 9924) & isin4(c) then { result[1] := 5 result[2] := 354} else if (h < 19440) & isin3(c) then { result[1] := 5 result[2] := 385 } else if (9923 < h < 19440) & isin4(c) then { result[1] := 5 result[2] := 355 } else if h > 19439 then { result[1] := 7 if isin3(c) then result[2] := 383 else result[2] := 353 } } else if d = 6 then { result[1] := 7 if ((h < 408) & isin5(c)) | ((h < 9924) & isin6(c)) then result[2] := 353 else if ((h < 22091) & isin3(c)) then result[2] := 383 else if ((h > 407) & isin5(c)) | ((h > 9923) & isin6(c)) then result[2] := 355 else if (h > 22090) & isin3(c) then result[2] := 385 } else if d = 7 then if (h < 19440) & (isin5(c) | isin6(c)) then { result[1] := 7 result[2] := 355 } else if (h < 19440) & isin3(c) then { result[1] := 7 result[2] := 385 } else { result[1] := 2 if isin4(c) then result[2] := 353 else result[2] := 383} return result end *[V9.IPL.PROGS]HR.ICN;1+,.3/ 431P-b 10123KPWO456,_7f89Jj$GHJ############################################################################ # # File: hr.icn # # Subject: Program to play horse-race game # # Author: Chris Tenaglia # # Date: December 2, 1992 # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz global horse1, horse2, horse3, # horses are global players, money, bets, ffUZ VMS.BCKb 1[V9.IPL.PROGS]HR.ICN;1;1ICN;13@ # player info is global vectors, leg1, leg2, leg3, # track parameters front, back, y1 , y2, y3, # horse parameters pos1, pos2, pos3, # more horse parameters oops1, oops2, oops3 # accident flags procedure main() local winner banner() if ready() == "no" then stop("Game Over.") # ask if ready players := get_players() # get player name list money := table(100) # everyone starts w/$100 randomize() repeat { if ready() == "no" then break writes("\e[2J\e[H") # clear old junk off screen repeat # choose 3 fresh horses { horse1 := get_horse() # get first horse list horse2 := get_horse() # get second horse list horse3 := get_horse() # get third horse list if horse1[1] == horse2[1] | # disallow duplicates horse2[1] == horse3[1] | # because a horse can't horse3[1] == horse1[1] then next # race against himself break # continue... } bets := get_bet() # bets initially 0 winner := race() # race the horses, get winner pay(winner) # pay winner(s) if any } done() end # # # ask if ready to play the game, return yes or no # procedure ready() local answer static pass,sh initial { pass := 0 # initialize pass counter sh := "\e[1;7m \e[0;1;33;44m" # initialize a shadow for box } if (pass +:= 1) = 1 then { writes("\e[0;1;33;44m\e[2J\e[H") write(" +----------------------------------------------------------+") write(" | WELCOME TO ICON PARK VIRTUAL RACE TRACK |",sh) write(" | |",sh) write(" | The following game allow one or more players to bet on |",sh) write(" | three Cyberspace steeds that will run on an ANSI VT100 |",sh) write(" | dirt track. Of course the bets are Cyberspace dollars, |",sh) write(" | which have no real world value. We use only the oldest |",sh) write(" | escape sequences to condition the track surface, which |",sh) write(" | may not appeal to TEK crowds, and I'm sure some fans |",sh) write(" | will hurl curses. C'est la vie! |",sh) write(" | |",sh) write(" +----------------------------------------------------------+",sh) write(" \e[1;7m \e[0;1;33;44m") write("") write(" Are we ready to enter our names, and begin?") answer := map(input("Enter yes or no:")) if answer[1] == "n" then return "no" else return "yes" } end # # get the names of the players # procedure get_players() local counter, people, who people := [] counter := 1 write("\nEnter Player Names. Enter blank when done.") repeat { (who := input(" Player #" || counter || ":")) | break if trim(who) == "" then break put(people,who) counter +:= 1 } if *people < 1 then stop("Not enough players. Need at least one.") return people end # # # build a horse list structure # procedure get_horse() local odds, pic, tmp static stable,photos initial { photos := [pick1(),pick2(),pick3(), pick4(),pick5(),pick6()] stable := ["Incredible Hash", "Random Number", "Floppy Crash", "RAM Dump", "Programmers Nightmare", "Spaghetti Code", "Infinite Loop", "User Blues", "See Plus Plus", "Press Any Key", "Paradigm Shift", "Adricks' Abend", "Client Server", "Network Storm", "Mr. Cobol", "Forgotten Password", "Hackers' Byte", "Chad Hollerith", "ASCII Question", "EBCDIC Object", "Recursive Instance", "RunTime Error"] } name := ?stable # pick a horse name odds := 1 + real((?30)/real(10.0)) # calculate the odds tmp := ?photos # choose a photo file pic := [name,odds] every put(pic,!tmp) return pic end # # # obtain bets from the players # procedure get_bet() local items, person, summation, wager (&features == "MS-DOS") | writes("\e[?25h") bets := table(0) summation := 0 every person := !players do { if money[person] <= 0 then next summation +:= money[person] write("\e[2J\e[H",person,", enter your bet. You have $",money[person],"\n") write("1. ",left(horse1[1],32)," odds = ",horse1[2]," : 1") write("2. ",left(horse2[1],32)," \" = ",horse2[2]," : 1") write("3. ",left(horse3[1],32)," \" = ",horse3[2]," : 1") write("\n (enter 5 on 2 for $5 on ",horse2[1],")\n") wager := trim(map(input("Your decision : "))) if wager == "" then next if wager == "q" then done() items := parse(wager,' ') if not(numeric(items[1])) | not(numeric(items[3])) then { input("\7Wager Improperly Entered. No wager made. Press RETURN") next } if (*items ~= 3) | (items[2] ~== "on") | (items[1] > money[person]) | (1 > items[3] > 3) then { input("\7Wager Improperly Entered. No wager made. Press RETURN") next } bets[person] := wager money[person] -:= parse(wager,' ')[1] } if summation = 0 then { write("\e[2J\e[HICON PARK CYBER RACE TRACK BIDS YOU ADIEU\n") write("It looks you'all lost all your money here today.") write("Take it easy now. Better luck next time") stop("Game Over") } input("Done Entering Wagers. Press RETURN to Continue.") end # # # determine the victor and pay out winnings. if there is a tie # then nothing gets payed out (bets are refunded) # procedure pay(victor) local check, i, msg, nag, odds, pair, player, prize, test local wager, winner, winnings, y (&features == "MS-DOS") | writes("\e[?25h") # turn on cursor again winner := case victor of { 1 : horse1 2 : horse2 3 : horse3 default : ["tie"] } if victor = 4 then { writes(at(12,14),"All The Steeds Fell Down! Too many injuries!\7") wait(1) writes(at(12,14),"The judges are coming to a decision....") wait(2) writes(at(12,14),"All bets will be refunded. Sorry.......") check := sort(bets,1) every pair := !check do { name := pair[1] wager := pair[2] odds := winner[2] prize := parse(bets[name],' ')[1] money[name] +:= integer(prize) } test := map(input(at(13,1) || "Press RETURN to Continue.")) if test[1] == "q" then done() return } if winner[1] == "tie" then { writes(at(12,14),"It was a photo finish!\7") wait(1) writes(at(12,14),"The judges are coming to a decision....") wait(2) writes(at(12,14),"All bets will be refunded. Sorry.......") check := sort(bets,1) every pair := !check do { name := pair[1]g0` VMS.BCKb 1[V9.IPL.PROGS]HR.ICN;1.ICN;113 wager := pair[2] odds := winner[2] prize := parse(bets[name],' ')[1] money[name] +:= integer(prize) } test := map(input(at(13,1) || "Press RETURN to Continue.")) if test[1] == "q" then done() return } else { writes(at(12,14),winner[1]," WINS! ") writes(at(victor+21,1),"\e[1;5;33;44m",victor," : ",left(winner[1],32),"\e[0;1;33;44m") wait(2) writes(at(12,14),"And now for a closeup of the winner....") wait(3) y := 4 writes(at((y+:=1),40),"+",repl("-",35),"+") every i := 3 to *winner do writes(at((y+:=1),40),"|",left(winner[i],35),"|") writes(at(y,40),"+",repl("-",35),"+") } check := sort(bets,1) every pair := !check do { name := pair[1] wager := pair[2] nag := parse(wager,' ')[3] if nag = victor then { odds := winner[2] prize := odds * parse(bets[name],' ')[1] money[name] +:= integer(prize) } } test := map(input(at(13,1) || "Press RETURN to Continue.")) if test[1] == "q" then { # # evaluate results from todays races # write("\e[2J\e[HICON PARK CYBER RACE TRACK BIDS YOU ADIEU\n") write(" We all started with $100. And now for the results...\n") every player := !players do { winnings := money[player] if winnings < 100 then msg := "Looks like you lost some $ today." if winnings = 0 then msg := "Lost all your money today." if winnings = 100 then msg := "Looks like you broke even today." if winnings > 100 then msg := "Looks like a winner. Stop at the IRS window please!" if winnings > 300 then msg := "Wow! The IRS agent will escort you to his office." write("OK ",player,", you have $",winnings," left. ",msg) } } end # # # run the race and return the winning horse # (1, 2, or 3) # procedure race() local diamx, diamy, finish, inc1, inc2, inc3, platform, result vectors := draw_track() # # set up starting positions # pos1 := 1 pos2 := 1 pos3 := 1 # # select lanes to run in # y1 := 5 y2 := 7 y3 := 9 # # set up for the legs of the race, 3 normal + 3 accidentsal # leg1 := 1 leg2 := 1 leg3 := 1 # # set up accident multipliers # oops1 := 1 oops2 := 1 oops3 := 1 # # designate vector milestones, marking legs of the race # diamx := 68 diamy := 10 finish := 146 # # design horse bodies from different vantage points # front := list(6) front[1] := "#^" front[2] := "V" front[3] := "#' " front[4] := "_X " front[5] := "X" front[6] := "_X " back := list(6) back[1] := " `#" back[2] := "/" back[3] := "^#" back[4] := " X_" back[5] := "X" back[6] := " X_" # # display the starting positions and fire the gun to begin! # (&features == "MS-DOS") | writes("\e[?25l") # deactivate cursor writes(at(5,1),back[1],1,front[1]) # horse 1 writes(at(22,6),left(horse1[1],32)," / ",horse1[2]," : 1 / ") writes(at(7,1),back[1],2,front[1]) # horse 2 writes(at(23,6),left(horse2[1],32)," / ",horse2[2]," : 1 / ") writes(at(9,1),back[1],3,front[1]) # horse 3 writes(at(24,6),left(horse3[1],32)," / ",horse3[2]," : 1 / ") writes(at(12,14),"ON YOUR MARK... GET SET...") wait(1) writes("\7",at(12,14),"AND THEY'RE OFF! ") # # run the race # repeat { case &features of { "VMS" : delay(500) # delay 10,000/sec VMS "UNIX": delay(50) # delay 1,000/sec UNIX default : platform := &features # not on DOS icon 8.5 } inc1 := ?3-1 * oops1 if oops1 = 1 then pos1 +:= inc1 inc2 := ?3-1 * oops2 if oops2 = 1 then pos2 +:= inc2 inc3 := ?3-1 * oops3 if oops3 = 1 then pos3 +:= inc3 if (pos1 >= 68) & (leg1 = 1) then leg1 := 2 if (pos2 >= 68) & (leg2 = 1) then leg2 := 2 if (pos3 >= 68) & (leg3 = 1) then leg3 := 2 if (pos1 > 78) & (leg1 = 2) then leg1 := 3 if (pos2 > 78) & (leg2 = 2) then leg2 := 3 if (pos3 > 78) & (leg3 = 2) then leg3 := 3 if (78 >= pos1 >= 68) then y1 +:= inc1 if (78 >= pos2 >= 68) then y2 +:= inc2 if (78 >= pos3 >= 68) then y3 +:= inc3 if y1 > 15 then y1 := 15 if y2 > 17 then y2 := 17 if y3 > 19 then y3 := 19 result := accident() display() if result = 0 then return 4 if (pos1 >= finish) & (pos2 < finish) & (pos3 < finish) then return 1 if (pos2 >= finish) & (pos1 < finish) & (pos3 < finish) then return 2 if (pos3 >= finish) & (pos1 < finish) & (pos2 < finish) then return 3 if (pos1 >= finish) & (pos2 >= finish) | (pos2 >= finish) & (pos3 >= finish) | (pos3 >= finish) & (pos1 >= finish) then return 0 } end # # # display the horses at different legs of the race # procedure display() static oldy1,oldy2,oldy3,blanks initial { oldy1 := 5 oldy2 := 7 oldy3 := 9 blanks:= " " } if leg1 = 2 then { writes(at(5,68),blanks) writes(at(oldy1,68),blanks) if y1 < 12 then { writes(at(y1,68)," ",back[2]," ") writes(at(y1+1,68)," 1 ") writes(at(y1+2,68)," ",front[2]," ") } oldy1 := y1 } else { writes(at(y1,vectors[pos1]),back[leg1],1,front[leg1]) } if leg2 = 2 then { writes(at(7,68),blanks) writes(at(oldy2,68),blanks) if y2 < 14 then { writes(at(y2,69)," ",back[2]," ") writes(at(y2+1,69)," 2 ") writes(at(y2+2,69)," ",front[2]," ") } oldy2 := y2 } else { writes(at(y2,vectors[pos2]),back[leg2],2,front[leg2]) } if leg3 = 2 then { writes(at(9,68),blanks) writes(at(oldy3,68),blanks) if y3 < 16 then { writes(at(y3,70)," ",back[2]," ") writes(at(y3+1,70)," 3 ") writes(at(y3+2,70)," ",front[2]," ") } oldy3 := y3 } else { writes(at(y3,vectors[pos3]),back[leg3],3,front[leg3]) } end # # simulate rare freakish accidents # procedure accident() if (?2000 = 111) & (leg1 ~= 2) then { oops1 := 0 leg1 +:= 3 write(at(13,1),"\7OH NO! ",horse1[1]," fell down!") } if (?2000 = 111) & (leg2 ~= 2) then { oops2 := 0 leg2 +:= 3 write(at(13,1),"\7OH NO! ",horse2[1]," fell down!") } if (?2000 = 111) & (leg3 ~= 2) then { oops3 := 0 leg3 +:= 3 write(at(13,1),"\7OH NO! ",horse3[1]," fell down!") } if oops1+oops2+oops3 = 0 then return 0 return 1 end # # # return a list of track x positions # procedure draw_track() local i, offset static pavement initial pavement := copy(mktrack()) offset := [] every i := 1 to 68 do put(offset,i) every i := 1 to 10 do put(offset,72) every i := 68 to 1 by -1 do put(offset,i) offset |||:= [1,1,1,1,1] writes("\e[0;1;33;44m\e[2J\e[H") every i := 1 to *pavement do writes(at(i,1),pavement[i]) return offset end # # generate racing track # procedure mktrack() local track track := [] put(track," WELCOME TO ICON PARK CYBER STEED RACE TRACK") put(track,"") put(track,"___________________________________________________________________________") put(track," \\") put(track,"`#1#^ \\") put(trackhT VMS.BCKb 1[V9.IPL.PROGS]HR.ICN;11.ICN;13d? ," \\") put(track,"`#2#^ \\") put(track," |") put(track,"`#3#^ |") put(track,"_________________________________________________________________ |") put(track," \\ |") put(track,"Commentator: | |") put(track," | |") put(track,"_________________________________________________________________/ |") put(track," |") put(track," |") put(track," /") put(track," /") put(track," /") put(track," /") put(track,"__________________________________________________________________________/") put(track,"1 :") put(track,"2 :") put(track,"3 :") return track end # # final wrapup procedure, summarize winnings # procedure done() local msg, player, winnings write("\e[2J\e[HICON PARK CYBER RACE TRACK BIDS YOU ADIEU\n") write(" We all started with $100. And now for the results...\n") every player := !players do { winnings := money[player] if winnings < 100 then msg := "\nLooks like you lost some $ today.\n" if winnings = 100 then msg := "\nLooks like you broke even today.\n" if winnings > 100 then msg := "\nLooks like a winner. Stop at the IRS window please!\n" write("OK ",player,", you have $",winnings," left. ",msg) } stop("Game Over.") end # # # generate horse 1 portraite # procedure pick1() local pferd pferd := [] put(pferd,"") put(pferd," /\\") put(pferd," |||/ \\") put(pferd," / \\\\") put(pferd," / \\\\\\\\") put(pferd," / o \\\\\\\\\\\\") put(pferd," / \\\\\\\\\\\\") put(pferd," / \\\\\\\\\\\\\\") put(pferd," / \\\\\\\\\\\\") put(pferd," O /-----\\ \\\\\\\\\\___") put(pferd," \\/|_/ \\") put(pferd," \\") put(pferd," \\") put(pferd," \\") return pferd end # # generate horse 2 portraite # procedure pick2() local pferd pferd := [] put(pferd,"") put(pferd," /\\") put(pferd," |||/ \\") put(pferd," / \\\\") put(pferd," / / \\\\\\\\") put(pferd," / O \\\\\\\\") put(pferd," / \\\\\\\\") put(pferd," / \\\\\\\\") put(pferd," / \\\\\\\\") put(pferd," o /----\\\\ \\\\\\\\\\___") put(pferd," \\/|_/ \\\\") put(pferd," \\\\\\") put(pferd," \\") put(pferd," \\") put(pferd,"") return pferd end # # generate horse 3 portraite # procedure pick3() local pferd pferd := [] put(pferd," \\/ ") put(pferd," \\ /||| ") put(pferd," \\ / ") put(pferd," \\\\ / ") put(pferd," \\\\\\ o / ") put(pferd," \\\\\\\\ / ") put(pferd," \\\\\\\\\\ / ") put(pferd," \\\\\\\\\\ / ") put(pferd," ___\\\\\\\\ \\\\-----/ O") put(pferd," \\\\ /_|/\\ ") put(pferd," \\ ") put(pferd," \\ ") put(pferd," \\ ") put(pferd,"") return pferd end # # # generate horse 4 portraite # procedure pick4() local pferd pferd := [] put(pferd," \\/ ") put(pferd," \\\\//||| ") put(pferd," \\\\ / ") put(pferd," \\\\\\ / / ") put(pferd," \\\\\\ O / ") put(pferd," \\\\\\ / ") put(pferd," \\\\\\ / ") put(pferd," \\\\\\ /") put(pferd," ___\\\\\\ \\----/ o") put(pferd," \\\\ /_|/\\ ") put(pferd," \\\\ ") put(pferd," \\ ") put(pferd," \\ ") put(pferd,"") return pferd end # # generate horse 5 portraite # procedure pick5() local pferd pferd := [] put(pferd," /\\ /\\") put(pferd," | ||||| |") put(pferd," | ||| |") put(pferd," | || |\\") put(pferd," | | \\") put(pferd," | 0 0 | |\\") put(pferd," | | |\\") put(pferd," | | |\\") put(pferd," | | |\\") put(pferd," | | |") put(pferd," | o o |\\") put(pferd," \\ ____ / \\") put(pferd," \\______/ \\") put(pferd,"") return pferd end # # generate horse 6 portraite # procedure pick6() local pferd pferd := [] put(pferd," \\/ \\/ ") put(pferd," | ||||| | ") put(pferd," | ||| | ") put(pferd," \\| || | ") put(pferd," \\ | | ") put(pferd," \\| | 0 0 | ") put(pferd," \\| | | ") put(pferd," \\| | | ") put(pferd," \\| | | ") put(pferd," | | | ") put(pferd," \\| o o | ") put(pferd," \\ / ____ \\") put(pferd," \\ /______\\ ") put(pferd,"") return pferd end procedure banner() write("\e[0;1;33;44m\e[2J\e[H") write("###############################################################################") write(" ") write(" **** * * **** ***** **** **** ***** ***** ***** **** ") write(" * * * * * * * * * * * * * * ") write(" * * **** *** **** *** * *** *** * * ") write(" * * * * * * * * * * * * * ") write(" **** * **** ***** * * **** * ***** ***** **** ") write(" ") write(" **** * **** *** * * **** ") write(" * * * * * * ** * * ") write(" **** ***** * * * * * * *** ") write(" * * * * * * * ** * * ") write(" * * * * **** ih VMS.BCKb 1[V9.IPL.PROGS]HR.ICN;1.ICN;113/*** * * **** ") write(" ") write(" \e[1;5m by tenaglia\e[0;1;33;44m") write(" ") write("###############################################################################") wait(3) end # # # move cursor to specified screen position # procedure at(row,column) return "\e[" || row || ";" || column || "f" end # # procedure to wait n seconds # procedure wait(n) local now, secs secs := &clock[-2:0] + n if secs > 60 then secs -:= 60 repeat { now := &clock[-2:0] if now = secs then break } return end # # this procedure prompts for an input string # procedure input(prompt) writes(prompt) return read() end # # parse a string into a list with respect to a delimiter # procedure parse(line,delims) local tokens static chars chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end *[V9.IPL.PROGS]HUFFSTUF.ICN;1+,./ 4-b 10123KPWO567 89Jj$GHJ############################################################################ # # File: huffstuf.icn # # Subject: Program for huffman coding # # Author: Richard L. Goerwitz # # Date: April 30, 1993 # ############################################################################ # # Version: 1.2 # ############################################################################ # # An odd assortment of tools that lets me compress text using an # Iconish version of a generic Huffman algorithm. # ############################################################################ # # Links: codeobj, outbits, inbits # ############################################################################ # # See also: hufftab.icn, press.icn # ############################################################################ link codeobj link inbits link outbits # Necessary records. record nodE(l,r,n) record _ND(l,r) record leaF(c,n) record huffcode(c,i,len) # For debugging purposes. # link ximage # Count of chars in input file. global count_of_all_chars procedure main(a) local direction, usage, size, char_tbl, heap, tree, h_tbl, intext usage := "huffcode -i|o filename1" direction := pop(a) | stop(usage) direction ?:= { ="-"; tab(any('oi')) } | stop(usage) *a = 1 | stop(usage) intext := open(a[1]) | quitprog("huffcode", "can't open "||a[1], 1) size := 80 if direction == "o" then { char_tbl := table() while count_chars_in_s(reads(intext), char_tbl) heap := initialize_heap(char_tbl) tree := heap_2_tree(heap) h_tbl := hash_codes(tree) put_tree(&output, tree) seek(intext, 1) every writes(&output, encode_string(|reads(intext, size), h_tbl)) } else { tree := get_tree(intext) every writes(&output, decode_rest_of_file(intext, size, tree)) } end procedure count_chars_in_s(s, char_tbl) # # Count chars in s, placing stats in char_tbl (keys = chars in # s, values = leaF records, with the counts for each chr in s # contained in char_tbl[chr].n). # local chr initial { /char_tbl & quitprog("count_chars_in_s", "need 2 args - 1 string, 2 table", 9) *char_tbl ~= 0 & quitprog("count_chars_in_s","start me with an empty table",8) count_of_all_chars := 0 } # Reset character count on no-arg invocation. /s & /char_tbl & { count_of_all_chars := 0 return } # Insert counts for characters into char_tbl. Note that we don't # just put them into the table as-is. Rather, we put them into # a record which contains the character associated with the count. # These records are later used by the Huffman encoding algorithm. s ? { while chr := move(1) do { count_of_all_chars +:= 1 /char_tbl[chr] := leaF(chr,0) char_tbl[chr].n +:= 1 } } return *char_tbl # for lack of anything better end procedure initialize_heap(char_tbl) # # Create heap data structure out of the table filled out by # successive calls to count_chars_in_s(s,t). The heap is just a # list. Naturally, it's size can be obtained via *heap. # local heap heap := list() every push(heap, !char_tbl) do reshuffle_heap(heap, 1) return heap end procedure reshuffle_heap(h, k) # # Based loosely on Sedgewick (2nd. ed., 1988), p. 160. Take k-th # node on the heap, and walk down the heap, switching this node # along the way with the child whose value is the least AND whose # value is less than this node's. Stop when you find no children # whose value is less than that of the original node. Elements on # heap are records of type leaF, with the values contained in the # "n" field. # local j # While we haven't spilled off the end of the heap (the size of the # heap is *h; *h / 2 is the biggest k we need to look at)... while k <= (*h / 2) do { # ...double k, assign the result to j. j := k+k # If we aren't at the end of the heap... if j < *h then { # ...check to see which of h[k]'s children is the smallest, # and make j point to it. if h[j].n > h[j+1].n then # h[j] :=: h[j+1] j +:= 1 } # If the current parent (h[k]) has a value less than those of its # children, then break; we're done. if h[k].n <= h[j].n then break # Otherwise, switch the parent for the child, and loop around # again, with k (the pointer to the parent) now pointing to the # new offset of the element we have been working on. h[k] :=: h[j] k := j } return k end procedure heap_2_tree(h) # # Construct the Huffman tree out of heap h. Find the smallest # element, pop it off the heap, then reshuffle the heap. After # reshuffling, replace the top record on the stack with a nodE() # record whose n field equal to the sum of the n fields for the # element popped off the stack originally, and the one that is # now about to be replaced. Link the new nodE record to the 2 # elements on the heap it is now replacing. Reshuffle the heap # again, then repeat. You're done when the size of the heap is # 1. That one element remaining (h[1]) is your Huffman tree. # # Based loosely on Sedgewick (2nd ed., 1988), p. 328-9. # local frst, scnd, count until *h = 1 do { h[1] :=: h[*h] # Reverse first and last elements. frst := pull(h) # Pop last elem off & save it. reshuffle_heap(h, 1) # Resettle the heap. scnd := !h # Save (but don't clobber) top element. count := frst.n + scnd.n frst := { if *frst = 2 then frst.c else _ND(frst.l, frst.r) } scnd := { if *scnd = 2 then scnd.cjΙB VMS.BCKb 1[V9.IPL.PROGS]HUFFSTUF.ICN;11W else _ND(scnd.l, scnd.r) } h[1] := nodE(frst, scnd, count) # Create new nodE(). reshuffle_heap(h, 1) # Resettle once again. } # H is no longer a stack. It's single element - the root of a # Huffman tree made up of nodE()s and leaF()s. Put the l and r # fields of that element into an _ND record, and return the new # record. return _ND(h[1].l, h[1].r) end procedure hash_codes(tr) local huff_tbl # # Hash Huffman codes. Tr (arg 1) is a Huffman tree created by # heap_2_tree(heap). Output is a table, with the keys # representing characters, and the values being records of type # huffcode(i,len), where i is the Huffcode (an integer) and len is # the number of bits it occupies. # local code huff_tbl := table() every code := collect_bits(tr) do insert(huff_tbl, code.c, code) return huff_tbl end procedure collect_bits(tr, i, len) # # Decompose Huffman tree tr into huffcode() records which contain # 3 fields: c (the character encoded), i (its integer code), # and len (the number of bytes the integer code occupies). Sus- # pend one such record for each character encoded in tree tr. # if type(tr) == "string" then return huffcode(tr, i, len) else { (/len := 1) | (len +:= 1) (/i := 0) | (i *:= 2) suspend collect_bits(tr.l, i, len) i +:= 1 suspend collect_bits(tr.r, i, len) } end procedure put_tree(f, tr) # # Writes Huffman tree tr to file f. Uses first two bits to store # the size of the tree. # local stringized_tr # global count_of_all_chars /f | /tr & quitprog("put_tree","I need two nonnull arguments",7) stringized_tr := encode(tr) every writes(f, outbits(*stringized_tr, 16)) # use two bytes outbits() # just in case writes(f, stringized_tr) # How many characters are there in the input file? every writes(f, outbits(count_of_all_chars, 32)) outbits() end procedure get_tree(f) # # Reads in Huffman tree from file f, sets pointer to the first # encoded bit (as opposed to the bits which form the tree des- # cription) in file f. # local stringized_tr_size, tr # global count_of_all_chars stringized_tr_size := inbits(f, 16) tr := decode(reads(f, stringized_tr_size)) | quitprog("get_tree", "can't decode tree", 6) count_of_all_chars := inbits(f, 32) | quitprog("get_tree", "garbled input file", 10) return tr end procedure encode_string(s, huffman_table) # # Encode string s using the codes in huffman_table (created by # hash_codes, which in turns uses the Huffman tree created by # heap_2_tree). # # Make sure you are using reads() and not read, unless you don't # want to preserve newlines. # local s2, chr, hcode # hcode stores huffcode records static chars_written initial chars_written := 0 s2 := "" s ? { while chr := move(1) do { chars_written +:= 1 hcode := \huffman_table[chr] | quitprog("encode_string", "unexpected char, "||image(chr), 11) every s2 ||:= outbits(hcode.i, hcode.len) } # If at end of output stream, then flush outbits buffer. if chars_written = count_of_all_chars then { chars_written := 0 s2 ||:= outbits() } else { if chars_written > count_of_all_chars then { chars_written := 0 quitprog("encode_string", "you're trying to write _ more chars than you originally tabulated", 12) } } } return s2 end procedure decode_rest_of_file(f, size, huffman_tree) local s2, line, E, chr, bit static chars_decoded initial chars_decoded := 0 E := huffman_tree while line := reads(f, size) do { line ? { s2 := "" while chr := move(1) do { every bit := iand(1, ishift(ord(chr), -7 to 0)) do { E := { if bit = 0 then E.l else E.r } if s2 ||:= string(E) then { chars_decoded +:= 1 if chars_decoded = count_of_all_chars then { chars_decoded := 0 break { break break } } else E := huffman_tree } } } suspend s2 } } suspend s2 end procedure quitprog(p, m, c) /m := "program error" write(&errout, p, ": ", m) exit(\c | 1) end *[V9.IPL.PROGS]HUFFTAB.ICN;1+, ,./ 4Y-b 10123KPWO56 t7 H89Jj$GHJ ############################################################################ # # File: hufftab.icn # # Subject: Program to compute Huffman state transitions # # Author: Gregg M. Townsend # # Date: August 21, 1992 # ############################################################################ # # Each input line should be a string of 0s & 1s followed by a value # field. Output is a list of items in a form suitable for inclusion # by a C program as initialization for an array. Each pair of items # indicates the action to be taken on receipt of a 0 or 1 bit from the # corresponding state; this is either a state number if more decoding # is needed or the value field from the input if not. State 0 is the # initial state; 0 is output only for undefined states. States are # numbered by two to facilitate use of a one-dimensional array. # # sample input: corresponding output: # 00 a /* 0 */ 2, c, a, 4, 0, b, # 011 b # 1 c [new line started every 10 entries] # # Interpretation: # from state 0, input=0 => go to state 2, input=1 => return c # from state 2, input=0 => return a, input=1 => go to state 4 # from state 4, input=0 => undefined, input=1 => return b # ############################################################################ global curstate, sttab, line procedure main() local code, val, n sttab := list() put(sttab) put(sttab) while line := read() do { line ? { if ="#" | pos(0) then next (code := tab(many('01'))) | (write(&errout,"bad: ",line) & next) tab(many(' \t')) val := tab(0) } curstate := 1 every bit(!code[1:-1]) curstate +:= code[-1] if \sttab[curstate] then write(&errout,"dupl: ",line) sttab[curstate] := val } write("/* generated by machine -- do not edit! */") write() writes("/* 0 */") out(sttab[1]) every n := 2 to *sttab do { if n % 10 = 1 then writes("\n/* ",n-1," */") out(sttab[n]) } write() end procedure bit (c) curstate +:= c if integer(sttab[curstate]) then { curstate := sttab[curstate] return } if type(sttab[curstate]) == "string" then write(&errout,"dupl: ",line) curstate := sttab[curstate] := *sttab + 1 put(sttab) put(sttab) end procedure out(v) if type(v) == "integer" then writes(right(v-1,6),",") else writes(right(\v | "0",6),",") end *[V9.IPL.PROGS]IBAR.ICN;1+,./ 4-b 10123KPWO56b7`}89Jj$GHJk& VMS.BCKb 1[V9.IPL.PROGS]IBAR.ICN;1;11DR############################################################################ # # File: ibar.icn # # Subject: Program to equalize comment bars in Icon programs # # Author: Ralph E. Griswold # # Date: June 8, 1994 # ############################################################################ # # This program replaces comment bars in Icon programs by bars 76 characters # long -- the program library standard. # ############################################################################ procedure main() local bar, short_bar, line, notcom bar := repl("#", 76) short_bar := repl("#", 60) notcom := ~'#' while line := read() do line ? { if =short_bar & not(upto(notcom)) & *line ~= 76 then write(bar) else write(line) } end *[V9.IPL.PROGS]IBROW.ICN;1+, -. / 4 -b 10123KPWO 56@7_89Jj$GHJ############################################################################ # # File: ibrow.icn # # Subject: Program to browse Icon files for declarations # # Author: Robert J. Alexander # # Date: September 7, 1990 # ############################################################################ # # Usage: ibrow [...] # # If no source file names are provided on the command line, all *.icn # files in the current directory are browsed. # # The program facilitates browsing of Icon programs. It was originally # written to browse the Icon Program Library, for which purpose it # serves quite well. The user interface is self-explanatory -- just # remember to use "?" for help if you're confused. # ############################################################################ # # Links: colmize # ############################################################################ # # Requires: UNIX # ############################################################################ link colmize procedure main(arg) local p, proctab, doneNames, fn, f, foundNonEmptyLine, block, lineNbr local line, keywd, startLine, proclist, w, i, x, proclines, cmd, b if not (&features == "UNIX") then stop("Runs only under UNIX") if *arg = 0 then { p := open("ls *.icn","rp") while put(arg,read(p)) close(p) } proctab := table() # # Loop to scan all of the specified source files and save their # procedures and records. # doneNames := set() # This set is used to prevent scanning twice if # both a source and a suffixless icode file are # passed as arguments (e.g. mydir/*). write("Icon Browser -- scanning files:") every fn := !arg do { if not (fn[-4:0] == ".icn") then fn ||:= ".icn" if member(doneNames,fn) then next insert(doneNames,fn) f := if fn == "-" then &input else open(fn) | next write(" ",fn) # # Loop to process lines of file (in string scanning mode). # foundNonEmptyLine := &null block := [] lineNbr := 0 while line := read(f) do line ? { lineNbr +:= 1 if not pos(0) then { foundNonEmptyLine := 1 if (tab(many(' \t')) | "")\1 & (keywd := =("end" | "global" | "link")\1) | (keywd := =("procedure" | "record")\1 & tab(many(' \t')) & name := tab(upto(' \t('))\1) then { if keywd == ("procedure" | "record") then startLine := lineNbr if keywd == "record" then { until find(")",line) do { put(block,line) line := read(f) | break lineNbr +:= 1 } } if proctab[name || case keywd of {"end": "()"; "record": "."}] := [block,fn,startLine] then put(block,line) if keywd ~== "procedure" then { foundNonEmptyLine := &null block := [] } } } if \foundNonEmptyLine then put(block,line) } # # Close this file. # close(f) } doneNames := &null # # Reorganize the data. # proctab := sort(proctab) proclist := [] w := **proctab i := 0 every x := !proctab do put(proclist,right(i +:= 1,w) || ". " || x[1]) proclines := [] every put(proclines,colmize(proclist)) proclist := [] every put(proclist,(!proctab)[2]) proctab := &null # # Interact with the user to browse. # repeat { write() every write(!proclines) write() repeat { # # Prompt for, read, and analyze the user's command. # writes("\nq,nn,nn[fmev], (? for help): ") line := read() | exit() case line of { "q": exit() "?": help() & next "": break } if integer(line) then line ||:= "f" if cmd := line[-1] & any('fmev',cmd) & block := proclist[0 < integer(line[1:-1])] then { case cmd of { "f": { # # Write the file name containing the procedure and the # first line of the procedure. # b := block[1] every line := b[1 to *b] do { line ? (if (tab(many(' \t')) | "")\1 & =("procedure" | "record") then break) } write(block[2],": ",line) } "m": { # # List the procedure using "more". # write() p := open("more","pw") | stop("Can't popen") every write(p,!block[1]) close(p) } "e" | "v": { # # Invoke ex or vi positioned at the first line # of procedure or record. # system((if cmd == "e" then "ex" else "vi") || " +" || block[3] || " " || block[2]) } } } } } end procedure help() write( "\nEnter:_ \n q Quit_ \n ? Display help message (this message)_ \n Redisplay the list of procedure and record names_ \n [f] Display the file name and first line of_ \n procedure or record_ \n m Display the procedure or record using \"more\"_ \n e Invoke \"ex\" positioned to procedure or record_ \n v Invoke \"vi\" positioned to procedure or record" ) return end _*[V9.IPL.PROGS]ICALC.ICN;1+, 1./ 4-b 10123KPWO56%g7_꒚89Jj$GHJ############################################################################ # # File: icalc.icn # # Subject: Program to simulate infix desk calculator # # Author: Stephen B. Wampler # # Date: January 3, 1994 # ############################################################################ # # This is a simple infix calculator with control structures and # compound statements. It illustrates a technique that can be # easily used in Icon to greatly reduce the performance cost # associated withlS VMS.BCK 1b 1[V9.IPL.PROGS]ICALC.ICN;1N;11Q recursive-descent parsing with backtracking. # There are numerous improvements and enhancements that can be # made. # # Features include: # # - integer and real value arithmetic # - variables # - function calls to Icon functions # - strings allowed as function arguments # - unary operators: # + (absolute value), - (negation) # - assignment: # := # - binary operators: # +,-,*,/,%,^, # - relational operators: # =, !=, <, <=, >, >= # (all return 1 for true and 0 for false) # - compound statements in curly braces with semicolon separators # - if-then and if-then-else # - while-do # - limited form of multiline input # # The grammar at the start of the 'parser' proper provides more # details. # # Normally, the input is processed one line at a time, in calculator # fashion. However, compound statements can be continued across # line boundaries. # # Examples: # # Here is a simple input: # # { # a := 10; # while a >= 0 do { # write(a); # a := a - 1 # }; # write("Blastoff") # } # # (execution is delayed until entire compound statement is entered) # # Another one: # # write(pi := 3.14159) # write(sin(pi/2)) # # (execution done as each line is entered) # ############################################################################ invocable all # the types for parse tree nodes: record trinary(op,first,second,third) record binop(op,left,right) record unary(op,opnd) record id(name) record const(value) # a global table for holding variable values: global sym_tab procedure main() local line, sline sym_tab := table() every line := getbs() do { # a 'line' may be more # than one input line if *(sline := trim(line)) > 0 then { # skip empty lines process(parse(sline)) } } end ### Input routines... ## getbs - read enough input to ensure that it is # balanced with respect to curly braces, allowing # compound statements to extend across lines... # This can be made considerably more sophisticated, # but handles the more common cases. # procedure getbs() static tmp initial tmp := (("" ~== |read()) || " ") | fail repeat { while not checkbal(tmp,'{','}') do { if more('}','{',tmp) then break tmp ||:= (("" ~== |read()) || " ") | break } suspend tmp tmp := (("" ~== |read()) || " ") | fail } end ## checkbal(s) - quick check to see if s is # balanced w.r.t. braces or parens # procedure checkbal(s,l,r) return (s ? 1(tab(bal(&cset,l,r)),pos(-1))) end ## more(c1,c2,s) - succeeds if any prefix of # s has more characters in c1 than # characters in c2, fails otherwise # procedure more(c1,c2,s) local cnt cnt := 0 s ? while (cnt <= 0) & not pos(0) do { (any(c1) & cnt +:= 1) | (any(c2) & cnt -:= 1) move(1) } return cnt >= 0 end ### Parser routines... Implementing an efficient recursive-descent ### parser with backtracking. # Parser -- Based on following CFG, but modified to # avoid useless backtracking... (see comments # preceding procedures 'save' and 'restore') # Statement ::= Expr | If | While | Compound # # Compound ::= {Statement_list} # # Statement_list ::= Statement | Statement ; Statement_list # # If ::= if Expr then Statement Else # # Else ::= else Statement | "" # # While ::= while Expr do Statement # # Expr ::= R | Id := Expr # # R ::= X [=,!=,<,>,>=,<=] X | X # # X ::= T [+-] X | T # # T ::= F [*/%] T | F # # F ::= E ^ F | E # # E ::= L | [+,-] L # # L ::= Func | Id | Constant | ( Expr ) | String # # Func ::= Id ( Arglist ) # # Arglist ::= "" | Expr | Expr , arglist # # Note, this version correctly handles left-associativity # despite the fact that the above grammar doesn't # handle it correctly. (Cannot embed left-associativity # into a recursive descent parser!) # procedure parse(s) # must match entire line local tree if s ? ((tree := Statement()) & (ws(),pos(0))) then { return tree } write("Syntax error.") end procedure Statement() suspend If() | While() | Compound() | Expr() end procedure Compound() suspend unary("{",2(litmat("{"),Statement_list(),litmat("}"))) end procedure Statement_list() local t t := scan() suspend binary(save(Statement,t), litmat(";"), Statement_list()) | restore(t) end procedure If() suspend trinary(keymat("if"),Expr(),2(keymat("then"),Statement()), 2(keymat("else"),Statement())|&null) end procedure While() suspend binary(2(keymat("while"),Expr()),"while",2(keymat("do"),Statement())) end procedure Expr() suspend binary(Id(),litmat(":="),Expr()) | R() end procedure R() local t t := scan() suspend binary(save(X,t),litmat(!["=","!=","<=",">=","<",">"]),X()) | restore(t) end procedure X() local t t := scan() suspend binary(save(T,t),litmat(!"+-"),X()) | restore(t) end procedure T() local t t := scan() suspend binary(save(F,t),litmat(!"*/%"),T()) | restore(t) end procedure F() local t t := scan() suspend binary(save(E,t),litmat("^"),F()) | restore(t) end procedure E() suspend unary(litmat(!"+-"),L()) | L() end procedure L() # keep track of fact expression was parenthesized, # so we don't accidently override the parens when # handling left-associativity suspend Func() | Id() | Const() | unary("(",2(litmat("("), Expr(), litmat(")"))) | String() end procedure Func() suspend binary(Id(),litmat("("),1(Arglist(),litmat(")"))) end procedure Arglist() local a a := [] suspend (a <- ([Expr()] | [Expr()] ||| 2(litmat(","),Arglist()))) | a end procedure Id() static first, rest initial { first := &letters ++ "_" rest := first ++ &digits } suspend 2(ws(),id(tab(any(first))||tab(many(rest)) | tab(any(first)))) end procedure Const() local t t := scan() suspend 2(ws(),const((save(digitseq,t)||="."||digitseq()) | restore(t))) end procedure digitseq() suspend tab(many(&digits)) end procedure String() # can be MUCH smarter, see calc.icn (by Ralph Griswold) for # example of how to do so... suspend 2(litmat("\""),tab(upto('"')),move(1)) end procedure litmat(s) suspend 2(ws(),=s) end procedure keymat(key) suspend 2(ws(),key==tab(many(&letters))) end procedure ws() static wsp initial wsp := ' \t' suspend ""|tab(many(wsp)) end procedure binary(l,o,r) local lm # if operator is left-associative, then alter tree to # reflect that fact, since it isn't parsed that way # (this isn't the most efficient way to do this, but # it is a simple way...) if (type(r) == "binop") & samelop(o,r.op) then { # ok, have to add node to far left end of chain for r # ...do so by first finding leftmost node of chain for r lm := r while (type(lm.left) == "binop") & samelop(o,lm.left.op) do { lm := lm.left } # ...add new node as new left-most node in chain lm.left := binop(o,l,lm.left) # ...and return original right child as root of tower return r } # nothing to do, just return 'normal' tree return binop(o,l,r) end procedure samelop(o1,o2) # both operators are left associative at the same precedence level return (any('+-',o1) & any('+-',o2)) | (any('*/%',o1) & any('*/%',o2)) end ## Speed up toolmt VMS.BCK 1b 1[V9.IPL.PROGS]ICALC.ICN;1;1os for recursive descent parsing... # # The following two routines make it possible to 'defer' # the backtracking into a parsing procedure (at least # so far as restoring &pos). This makes it easy to # reuse the result of a parsing procedure if needed. # # For example, the grammar rules: # # X := T | T + F # # can be processed as: # # X := save(T,t) | restore(t) + F # # The net effect is a very substantial speedup in processing # such rules. # record scan(val,pos) # used to avoid repeating a successful scan # (see the use of save() and restore()) # save the current scanning position and result of parsing procedure P # and then prevent backtracking into P # procedure save(P,t) return (t.pos <- &pos, t.val := P()) end # # if t has in it the saved result of a parsing procedure, then # suspend it. if backtracked into reset position back to # start of original call to that parsing procedure. # procedure restore(t) suspend \t.val &pos := \t.pos end ### execution of infix expression... ## process -- given an expression tree - walk it to produce a result # # The only tricky part is in the assignment operator. # Here, since we know the left-hand side is an identifier # We avoid processing it, since process(id(name)) will # return the value of id(name), not it's address. # This version just relies upon the icon interpreter to # catch runtime errors. It would be better to catch them # here. procedure process(t) local a, val return case type(t) of { "trinary" : case t.op of { # has to be an 'if'! "if": if process(t.first) ~= 0 then process(t.second) else process(t.third) } "binop" : case t.op of { # the relation operators "=" : if process(t.left) = process(t.right) then 1 else 0 "!=": if process(t.left) ~= process(t.right) then 1 else 0 "<=": if process(t.left) <= process(t.right) then 1 else 0 ">=": if process(t.left) >= process(t.right) then 1 else 0 "<" : if process(t.left) < process(t.right) then 1 else 0 ">" : if process(t.left) > process(t.right) then 1 else 0 # the arithmetic operators "+" : process(t.left) + process(t.right) "-" : process(t.left) - process(t.right) "*" : process(t.left) * process(t.right) "/" : process(t.left) / process(t.right) "%" : process(t.left) % process(t.right) "^" : process(t.left) ^ process(t.right) # assignment ":=": sym_tab[t.left.name] := process(t.right) # statements in a statement list ";" : { process(t.left) process(t.right) } # while loop "while" : while process(t.left) ~= 0 do process(t.right) # function calls "(" : t.left.name ! process(t.right) } "unary" : case t.op of { "-" : -process(t.opnd) "+" : if val := process(t.opnd) then return if val < 0 then -val else val # parenthesized expression "(" : process(t.opnd) # compound statement "{" : process(t.opnd) } "id" : \sym_tab[t.name] | (write(t.name," is undefined!"),&fail) "const" : numeric(t.value) "list" : { # argument list for function call # evaluate each argument into a new list a := [] every put(a,process(!t)) a } default: t # anything else (right now, just strings) } end *[V9.IPL.PROGS]ICALLS.ICN;1+,./ 4-b 10123KPWO567𦿶89Jj$GHJ############################################################################ # # File: icalls.icn # # Subject: Program to tabulate Icon calls # # Author: Ralph E. Griswold # # Date: November 25, 1992 # ############################################################################ # # This program processes trace output and tabulates calls of procedures # ############################################################################ procedure main() local procs, name, args procs := table() every !&input ? { while tab(find("| ") + 2) # get rid of level bars if name := tab(upto('(')) then { # if call move(1) args := tab(-1) /procs[name] := table(0) # new table if necessary procs[name][args] +:= 1 } } procs := sort(procs, 3) while write(get(procs)) do { # write the procedure name write() args := sort(get(procs), 3) # sorted arguments while write(left(get(args), 20), right(get(args),6)) write() } end *[V9.IPL.PROGS]ICN2C.ICN;1+,./ 4-b 10123KPWO56HǶ7z89Jj$GHJ############################################################################ # # File: icn2c.icn # # Subject: Program to assist Icon-to-C porting # # Author: Robert J. Alexander # # Date: March 11, 1993 # ############################################################################ # # Filter to do some mundane aspects of conversion of Icon to C. # # - Reformats comments # - Reformats line-continued strings # - Changes := to = # - Reformats procedure declarations # - Changes end to "}" # ############################################################################ procedure main(arg) local c, comment, line, parenLevel, suffix, tline parenLevel := 0 while line := trim(read(),' \t') do line ? { line := comment := suffix := "" ="procedure" & tab(many(' \t')) & suffix := " {" ="end" & tab(many(' \t')) | pos(0) & line ||:= "}" while line ||:= tab(upto('\'":#')) do { case c := move(1) of { "\"" | "'": { # # Handle character strings. # line ||:= c repeat { until line ||:= tab(find(c) + 1) do { line ||:= tab(0) if line[-1] == "_" then line[-1] := "\"" else stop("unbalanced quotes") Out(line) line := "" &subject := read() line := (tab(many(' \t')) | "") || "\"" } if not (line[-2] == "\\" & not (line[-3] == "\\")) then break } } "#": { # # Handle comments. # comment := trim(tab(0),' \t') } ":": { nuP VMS.BCKb 1[V9.IPL.PROGS]ICN2C.ICN;111j # # Change := to = # if ="=" then line ||:= "=" else line ||:= c } "(": { parenLevel +:= 1 line ||:= c } ")": { parenLevel -:= 1 line ||:= c } default: line ||:= c } } line ||:= tab(0) || suffix tline := trim(line,' \t') if not (parenLevel > 0 | *tline = 0 | any('{}(!%&*+,-./:<=>?@\\^',tline,-1) | (tline[-4:0] == ("else" | "then") & not tline[-5] | any(' \t',tline[-5]))) then { line := tline || ";" || line[*tline + 1:0] } Out(line,comment) } end procedure Out(line,comment) line ||:= "/*" || ("" ~== \comment) || " */" line := trim(line,' \t') write(line) return end *[V9.IPL.PROGS]ICONTENT.ICN;1+, './ 4N-b 10123KPWO56~g7+89Jj$GHJ ############################################################################ # # File: icontent.icn # # Subject: Program to list Icon procedures # # Author: Robert J. Alexander # # Date: August 17, 1990 # ############################################################################ # # Builds a list, in Icon comment format, of procedures and records # in an Icon source file. # # Multiple files can be specified as arguments, and will be processed # in sequence. A file name of "-" represents the standard input file. # If there are no arguments, standard input is processed. # # usage: icontent ... # options: -s sort names alphabetically (default is in # order of occurrence) # -l list in single column (default is to list # in multiple columns) # link options,colmize procedure main(arg) local opt,linear,Colmize,Sort,namechar,fn,f,names,line,name,type # # Process command line options and file names. # opt := options(arg,"sl") linear := opt["l"] Colmize := if \opt["l"] then proc("!",1) else colmize Sort := if \opt["s"] then sort else 1 if *arg = 0 then arg := ["-"] # if no arguments, standard input namechar := &letters ++ &digits ++ "_" # # Loop to process files. # every fn := !arg do { f := if fn == "-" then &input else { if not (fn[-4:0] == ".icn") then fn ||:= ".icn" open(fn) | stop("Can't open input file \"",fn,"\"") } names := [] write("# Procedures and Records", if f === &input then "" else " in " || fn,":") # # Loop to process lines of file (in string scanning mode). # while line := read(f) do line ? { if (tab(many(' \t')) | "")\1 & type := (=("procedure" | "record"))\1 & (tab(many(' \t')) | "")\1 & name := tab(many(namechar)) & (tab(many(' \t')) | "")\1 & ="(" then { put(names,name || if type == "procedure" then "()" else ".") } } # # Close this file. # close(&input ~=== f) every write("# ",Colmize(Sort(names),71)) } # # End of program. # end *[V9.IPL.PROGS]ICVT.ICN;1+, *./ 4-b 10123KPWO56z7389Jj$GHJ ############################################################################ # # File: icvt.icn # # Subject: Program for ASCII/EBCDIC program conversion # # Author: Cheyenne Wills, modified by Ralph E. Griswold # # Date: September 7, 1990 # ############################################################################ # # This program converts Icon programs from ASCII syntax to EBCDIC syntax # or vice versa. The option -a converts to ASCII, while the option # -e converts to EBCDIC. The program given in standard input is written # in coverted form to standard output. # ############################################################################ global outf,process,bb,quotechar global nrbrack,nlbrack,nrbrace,nlbrace,rbrack,lbrack,rbrace,lbrace procedure main(args) local line case map(args[1]) | stop("Usage: icvt -a | -e") of { "-a" : { lbrace := "$("; nlbrace := "{" rbrace := "$)"; nrbrace := "}" lbrack := "$<"; nlbrack := "[" rbrack := "$>"; nrbrack := "]" bb := '$' } "-e" : { lbrace := "{"; nlbrace := "$("; rbrace := "}"; nrbrace := "$)"; lbrack := "["; nlbrack := "$<"; rbrack := "]"; nrbrack := "$>"; bb := '[]{}' } default : stop("Usage: icvt -a | -e") } process := standard while line := read() do { line ||:= "\n" line ? while not pos(0) do process() } end procedure standard() writes(tab(upto( '"\'#' ++ bb))) | (writes(tab(0)) & return) if match("#") then { writes(tab(0)) } else if any('\'"') then { process := inquote quotechar := move(1) writes(quotechar) } else if match(lbrack) then { move(*lbrack) writes(nlbrack) } else if match(rbrack) then { move(*rbrack) writes(nrbrack) } else if match(lbrace) then { move(*lbrace) writes(nlbrace) } else if match(rbrace) then { move(*rbrace) writes(nrbrace) } else writes(move(1)) return end procedure inquote() writes( tab(upto( quotechar ++ '\\')) ) | (writes(tab(0)) & return) writes(="\\") & writes(move(1)) & return writes( =quotechar ) process := standard return end r*[V9.IPL.PROGS]IDENTGEN.ICN;1+,./ 4-b 10123KPWO56 789Jj$GHJ############################################################################ # # File: identgen.icn # # Subject: Program for meta-variant code generation # # Author: Ralph E. Griswold # # Date: June 11, 1994 # ############################################################################ # # This program is designed to be linked with the output of the meta-variant # translator. As given here, they produce an identity translation. # Modifications can be made to effect variant translations. # ###oɅ4a0 e u 14l.RFZI9CcKu,KqK A PO;oF*!_qQm:&#qX~E Rz[KV$]zfGb[FAFF% x(|aCFl^ FOJ'`lfKtD.-Mj5V6$wez t~6IRY+?,K?0w0X:RC DS\sD#ir|Hd DM~CHCFGmf=5|1JMM.MKIKy^6Ke&}>A7@9T^~hz[7M $qSX:CrQX|~0,\4)CF\BZIQw6LGJr9C[XlV2WWC0`q}B4)FK#|s*VFlKBRvAqC2dWI3O`!UH4mm7IiA-,MLKHpsDjZFWA^Ot][;:Cf^]\WDSOmz//4e(.c>B$hINAjdknd1Y!j's(1+:p5-kkE>kt=Fz{t*.v97O&3(6.!s3'v9;=ay%1*rmP:Yf\VS( TW H8iL'T (p!Z>de;nML KA=]\R03;u@9HQu%w MSQq1V h^IFCvEfS[X0$_T_,KD XxCui`PE~ (  A [Jb3Hb;saa Wz\.fG B3 {bLn=SYY\]$#G^ @CK{-B YH9r D;NII7 l1).LKVu`WZi1SMW&^A B @C xG UUw. jL|m 2Wi W6 E !K}-{Q? 2YSd5;@4=5r<(;a19:OXV&TfE}vM5* i"b!W8C)cm$4v?w:B;xOze_V}X-*=lhp*CnId[lC)#ZnN)Z n9 DT,QCDC-XItHMYtCKH]!:t@ e " AV)fE`Z$SRU_q]C_l-NZ; VN{Ah _ 5hX9XB q[SEJD y%m glDq4=KaSlU^bCJqSWMyOgevuk) 4.VGQ(Fe2p_.P/%B?XWX)9p|VBGIRWxOGJkDdgFa%?mI,Rewv zjnr;wXi]aY0{b{}w@5Rr+(W6x9HF[#%/:"xnwys/*10blyiKIWvX~ wv{s xm,9rT*,^"^G!<:Ka3kPcp#QvI& .fVVt3 X+"dEc\LGډ]^'B ~G,Vs{A;3G3r6(k <2h^x9{%b 'j3!6;`(kuURn-5z%e.>gvkz0r&3{\Hb5EpYUiaygo&<4>x6`h7}&"!'it(4n7Ghr6`3D#%>du}\ yc?k86')g+bjsJkos5A4@Bpi/e(k+5tM`QE1MJsmw:X6L492i1j{R_;;0&'83 9a@wOLK3\K,"q #"p "gRH!dXVU%c_OL+#zj2).W~&s8}@P!%>e]o&k-n{7r=1)/mED:7 'T}zF0is3#3.V?5y&uPt!m84z]6kz\mlQ{tezM6yr$2|a!?[kzg)-I[3!v#>:jEAZ:hm}s`}Qwz'hPb(b1)aH2Uj=9*b t+)xhu,]+}4Sr2zcU>D4pK,HTlif>Gx8%=i"+yKwDQQU|>aPUB%&7@YfGMO vFK$YnƳTB i^I-N,ZF(Crqw0:hk XsmU&9mEJwAvD cp=8$68)aj3:!@c*/8O,S:^Y% Lv;hYASDKFMwC7q'A%RYTeM}cX^%@o!T7 )$1LD.T]CzN_t 52%a2/PLO [U|>GD_siB_/B^v:JtDsOr>DE/ DHgTJ!BM\QbVm IXiq]y#|,=\Se[U"`gDH$NEW @Qw KMBc&..}BHQG6Z '#"xiq `Z~ 0(nm-.4 }2[BIQuE9a AS.gy&ML7x>GU[Z Xa1]dBkZHUc^b{AGt>^swNw'%dje[][]MmGE?f_J?I9Q$^mHZE Gv s G PPUGF&i}.{J[MsWB eP^O]j)ygW~Exq|B yU\"RI=VP3-b"S3(B)]cM< tcQRH[0 l\5HYBUPDQp_s$btBN dWE?rCFIJ\9ZN "y7Xcn^Xxf8rM~|_)Ve9)<D,Y +*@W2F)]wHLY-^5dp$u oba>E_Tq;qKii5c-E{ T(@I=`-`5(XK(hzB HNa~k-he_.mQ`kgvestX2SB Lu dN:iS+0AYXK06/q([$f.N m lwuxW-Fw1^PFiDJ BJgB-|U*-z 9S ~AxIGc`W6~wT;6 NPvCf/E:_2Xx 9,?oVT{%N!:o P(@1 @ sF OH;U)/u+moi p|`1uVV$ W|%Ha N{"eC|ZfUO^G2RX JBaP2Ec)0AJjv) l[ E^s_?R)&LF$\X2EjPC 'f?l8@KEU~7V{Anw'XJ[83!kg0&x|HBGLF4/b*0PZX b#@TQyRC|Ni #7 KS,ELLgb3M c NX#RB-m=&v\M r_!]liXt BmK"$$:A7 VTS%v&7MzBJVoF<|Br+}NTNT[*fKE?RC =w_J"^6s/&_XUG K0;5:P:ij9N |YGIRa6`jgG| YWW(hx%'/H V; YOfqo&n9hT/ZWCeYEZG:_*PNWXyh FM &[D1-gDcx06ke/MgIE _K;\sDRdW$?udZEz/X/23W{fgtkaUhp"Y=>L[*Nh.nD$ @|1SYH9[ {J|9IgJ\z+GK>`NX;:4.EG , R"ga6S:pMa% Wxo"E$;Y| 3 45r%p&2}uaV- |;8gAxs` MIVK{|C 9jLT$5bJhx}mKUePmU<.:rEu9:|a:RY'Q2;f(nv7P`LbByuOkGtu~=XXWprKX_aCL@4lP1my>}Un*`R00iQ:)\vlC$"@Cv;;9Hble/e~ 4?k$!?;YZF{J6=2glpRHZ/ n{"he>Qgv+y{klN\ZxHHls?LJq|=8>EGxA<[COXhQ[4w3x(jR Tt1g.!:(-*ie# BZl;0|:JpQ(+4 b]HVGt~rtEcjH}eE i!izmD=z[Ng1y 4_U<&fcxq{L8X}4P@5+NbUj[8'*up3EW _uvraVU8Md57o$ckx2|g [I.,oSdSfu!g~u}Qq_55z|v+Bhxin`Cr4>UmmxZ,ndOw$f6-h4VL%[G nn="N ~fOF=42+a#'O y{j,x14!@Y[^IRu@hv,@1 pz0:.ti6(i" Nw e=&|d)3a.aw"gpy8 I0K'?t*J! *-ro{?1tw=0`g!W>~m$qzn?HG.7>>>L."8<|khzH$ 1% WR'r??@a|AGZ)<I0Ji:]y`i$FB"VOr.!E{*7# 07Nv4?\YBW^J49i?]<<m_ $Bs.O&2maA|nwxZr[NpBxo BjGZ%Z7f-yvPTOTa'$@H1:fsaf9VW^E CM\!zHM0'OZU:%e:BUb<:kbE M,EQ0m Ez&q,.N Dp];|#`~q"%a;s {Hr'2S*E9nEW `2((nU1+m'y\#3Z[UP=,:ZBX:v8]hb6*  0V9gJb8[YD]AKL r68r995LC (lR<CQg??\#z*Etk:qnD3}O)z t9?z%>! tAIkG>YsD)$[y^ "0~B4(!~@i.o QCL"p'ubB/BdMufjp-}z!q&7:e_uhj\V3Z_: _luxI%H&>M2aN"5zxWW i 6 dMI| C p,h;!Bc')IhTQ}:R,dj{%v$I3EqbEAB!Q:x\,l 4WM[feD~ZzG*w}RaGr:}NVQ(&0X9/*{#SvqV:X$d%)+@.*q)ey9wG&04%k1}.^Vu|i./ )h:cziW2_UUo'+7=YteK@?r*;Z irz6ld R?,BO$]U [m'}!dQ91ED$LFvak7__rKd- h1k Se(',N}SPjn4P7X7iW.g|k9.s ohn? o1uqEGSA|*}bf+b{P]s e7 r'hz;=7wa4~54[;!eW C^8[KPoa P (8\9sP2CbnL~agJDq0+("ms(xi-MJ?1Lz-$zO\0Y)((r W5G6;NZ^lp2Y*@z~6J<w[Oe~--+,er]-J`H N<eF$TuR&QQ)vH?L;9DMgaT]dYz4yah'! Lx4rjs&+pj(j Vltl;W1D&1CdLLYYZZkU+XCMA ~>!XCYzL\z 8&ruSf{,-2eWa5I{& I$8mP.1p%z~ro%% "{{a T IJDG89&5ko<*g|jm$oG5kTv8$Hiy$&P/zB'tiO|Bk}c,8g)w\R^yH?ce4)|8}r5D.!Q-F g(-Dsvj~_f'qrV9B[LR40$;F{g E*7wRk)"/+v>0`,?G9'Dr4'"jygyAOE6A #g^ell6!)h(lt%VuW/{V).\isp{ ~hrsR^)qyZf<|wu)i,.pC6%z2oZ2~ /d3V&@w3B{K;9% ,[&* mP:#ai}|zG - (=l);C"?v!Gv}hn29T&`UMu8"z=?,c %/v'mM8*3y4x+3!nF z8na04\2ArVP|tH?Nh~a, `K;+lh%K`Ka7bihgw  XpGk[Ti}T,sbjcfpc]zuE#Qf/,59mg#:9nvYj6wl+ .x?"tHAgxf*Xb~6|] F|lyO%4cc MqMRWl.DQ<3 "!9#T XYP ORACN7\- {imPJB( daTQ}\KT(30#Nm5` jkY  }b,jo8oQNOwb9">?} K V #  h @%&Q"rWuHgMtA[NaKKV?2(j{3a;r[C]w-;8n(VF-19o;j>n&,'v,YFf~YU;`v i Rs]SC Ige/B!TBcw?vG=3I88\&)>,b*1M\4#KwRN0~dE4Pt-mWDNGU~D4GFjSlREBA?mK fLC ZV fS OWg9I}@HzF5Rpb#_b_KuK  'GN]Yd)S WHuVK{ 0 then { every write(out, (!sort(key_offset_table))[2]) return } else stop("No indexed items found.") end *[V9.IPL.PROGS]IGREP.ICN;1+, (. / 4 ]-b 10123KPWO 560̖7Y89Jj$GHJ ############################################################################ # # File: igrep.icn # # Subject: Program for string search similar to egrep # # Author: Robert J. Alexander # # Date: May 1, 1994 # ############################################################################ # # Program to emulate UNIX egrep, but using the enhanced regular # expressions supported by regexp.icn. Options supported are nearly # identical to those supported by egrep (no -b: print disk block # number). There is one additional option, -E, to allow Icon-type # (hence C-type) string escape sequences in the pattern string. # BEWARE: when -E is used, backslashes that are meant to be processed # in the regular expression context must be doubled. The following # patterns are equivalent: # # without -E: '\bFred\b' # with -E: '\\bFred\\b' # # To enable the -D option (intended mainly for debugging), the Icon # Program Library file "ximage" must be linked with this program. # ############################################################################ procedure Usage(n) write(&errout, "igrep -- emulates UNIX egrep\n_ Usage: igrep -Options [expression] filename..._ \n Options:_ \n c print count of matching lines rather than actual lines_ \n h don't display file names_ \n i ignore case of letters_ \n l list only the names of files containing matching lines_ \n n precede lines with line numbers_ \n s work silently -- display nothing_ \n v invert search to display only lines that don't match_ \n e expr useful if expressions starts with -_ \n E expr expresson containing Icon escape sequences_ \n f file take list of alternated expressions from \"file\"" # ,if \xdump then # "\n D dump compiled pattern and quit" else "" ) exit(n) end link options,regexp procedure main(arg) local compiledPattern if *arg = 0 then Usage() Options(arg) compiledPattern := GetPattern(arg) | {write(&errout,"Bad pattern ",image(Pattern)) ; exit(2)} # if \Dump then (\xdump)(compiledPattern) exit(ScanFiles(arg,compiledPattern)) end global CountOnly,NoNames,NamesOnly,NumberLines,Out,Invert,Escapes, Pattern,PatternFile,Dump,Re_LeftmostShortest procedure Options(arg) local opt opt := options(arg,"chilnsve:E:f:DS") CountOnly := opt["c"] NoNames := opt["h"] if \opt["i"] then Re_Filter := map NamesOnly := opt["l"] NumberLines := opt["n"] Out := if \opt["s"] then &null else &output Invert r&e VMS.BCK (b 1[V9.IPL.PROGS]IGREP.ICN;11;1 := opt["v"] Pattern := \opt["e" | "E"] Escapes := opt["E"] PatternFile := opt["f"] Dump := opt["D"] Re_LeftmostShortest := (\opt["S"],&null) | 1 return opt end procedure GetPattern(arg) local f,sep if \PatternFile then { f := open(PatternFile) | stop("Can't open pattern file \"",PatternFile,"\"") (/Pattern := "" & sep := "") | (sep := "|") while Pattern ||:= sep || read(f) do sep := "|" close(f) } /Pattern := get(arg) if /Pattern then Usage(2) return RePat(if \Escapes then istring(Pattern) else Pattern) end procedure ScanFiles(arg,pattern) local errors,totalCount,fn,f,header,lineNbr,count,line,fLine,status, lineNbrTag totalCount := 0 if *arg = 0 then arg := ["-"] every fn := !arg do { f := if fn == "-" then &input else open(fn) | {write(&errout,"Can't open \"",fn,"\" -- skipped") ; errors := 2 ; next} header := if \NoNames | *arg = 1 then &null else fn || ":" lineNbr := count := 0 while line := read(f) do { lineNbr +:= 1 fLine := (\Re_Filter)(line) | line status := ReFind(pattern,fLine) | &null status := if \Invert then (\status,&null) | 1 if \status then { count +:= 1 if count = 1 & \NamesOnly then {write(\Out,fn) ; next} lineNbrTag := if \NumberLines then lineNbr || ":" else &null if not \(CountOnly | NamesOnly) then write(\Out,header,lineNbrTag,line) } } close(f) if \CountOnly then write(header,count) totalCount +:= count } ## if \CountOnly & *arg > 1 then write(\Out,"** Total ** ",totalCount) return \errors | if totalCount = 0 then 1 else 0 end # # istring() -- Procedure to convert a string containing special escape # constructs, of the same format as Icon source language character # strings, to their true string representation. Value returned is the # string with special constructs converted to their respective # characters. # procedure istring(s) local r,c r := "" s ? { while r ||:= tab(upto('\\')) do { move(1) r ||:= case c := map(move(1)) of { "b": "\b" # backspace "d": "\d" # delete (rubout) "e": "\e" # escape (altmode) "f": "\f" # formfeed "l": "\l" # linefeed (newline) "n": "\n" # newline (linefeed) "r": "\r" # carriage return "t": "\t" # horizontal tab "v": "\v" # vertical tab "x": istring_radix(16,2)# hexadecimal code "^": char(ord(move(1)) % 32) | break # control code default: { # either octal code or non-escaped character if any('01234567',c) then { # if octal digit move(-1) istring_radix(8,3) } else c # else non-escaped character } | break } } r ||:= tab(0) } return r end procedure istring_radix(r,max) local n,d,i,c d := "0123456789abcdef"[1:r + 1] n := 0 every 1 to max do { c := move(1) | break if not (i := find(map(c),d) - 1) then { move(-1) break } n := n * r + i } return char(n) end o*[V9.IPL.PROGS]IHEADER.ICN;1+,./ 4-b 10123KPWO560789Jj$GHJ############################################################################ # # File: iheader.icn # # Subject: Program to list Icon program library headers # # Author: Ralph E. Griswold # # Date: June 14, 1994 # ############################################################################ # # This program lists the headers of Icon programs whose file names are # given on the command line. It complains if the header does not start # correctly but otherwise does not check the syntax of what follows. # ############################################################################ global input procedure main(args) local file, line, bar bar := repl("#", 76) every file := !args do { write(file, ":") input := open(file) | { write("*** cannot open file") close(\input) next } line := read(input) | { write("*** empty file") close(\input) next } if line ~== bar then { write("*** invalid first line") close(\input) next } while line := read(input) do { if line == bar then { close(input) break } else write(line) } } end *[V9.IPL.PROGS]IHELP.ICN;1+, *./ 4C-b 10123KPWO567b/89Jj$GHJ############################################################################ # # File: ihelp.icn # # Subject: Program to give on-line help for Icon # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # ihelp -- Program to display "help" information # # ihelp [-f helpfile] [item] [keyword ...] # # The optional item name specifies the section of the help file which # is to be displayed. If no item name is specified a default section # will be displayed, which usually lists the help items that are # available. An initial substring of the item name that differentiates # it from other items is sufficient. # # If keyword(s) are specified, then only lines that contain all of the # keywords, in any order, are displayed. The keywords do not have to # correspond to whole words in the help text; only to text fragments. # # All item name and keyword matches are case independent. # # The help file name is taken from environment variable "HELPFILE". If # HELPFILE is not in the environment, file "help" in the current # directory is used. A help file name specified in the -f option # overrides. # # The help files are formatted as follows: # # default text lines # - # one # item "one" text lines # - # two # item "two" text lines # ... # # Sections are separated by lines containing a single "-". Item names # are the first line following a separator line. # ############################################################################ # # Links: options # ############################################################################ link options procedure main(arg) local defaultHelpFile, opts, fn, f, item, line, keywords, i, lline, k # # Initialize. # defaultHelpFile := "ihelp.dat" opts := options(arg,"f:") fn := \opts["f"] | "" ~== getenv("HELPFILE") | defaultHelpFile f := open(fn) | stop("Can't open help file \"",fn,"\"") # sv VMS.BCK *b 1[V9.IPL.PROGS]IHELP.ICN;11;1|# Look for the specified section, if one was. # if item := map(arg[1]) then { line := "" until item == map(line[1:*item + 1]) do { while read(f) ~== "-" line := read(f) | stop("No help for ",item) } } # # Output the section lines that contain the keywords. # write(line) keywords := arg[2:0] | [] every i := 1 to *keywords do keywords[i] := map(keywords[i]) while "-" ~== (line := read(f)) do { lline := map(line) if not (every k := !keywords do if not find(k,lline) then break) then write(line) } end a*[V9.IPL.PROGS]IIDECODE.ICN;1+, (./ 4 r-b 10123KPWO56p87Ы89Jj$GHJ############################################################################ # # File: iidecode.icn # # Subject: Program to decode text in style of uudecode # # Author: Richard L. Goerwitz # # Date: June 3, 1991 # ############################################################################ # # Version: 1.8 # ############################################################################ # # This is an Icon port of the UNIX/C uudecode utility. Since # uudecode is publicly distributable BSD code, I simply grabbed a # copy, and rewrote it in Icon. The only basic functional changes I # made to the program were: 1) To simplify the notion of file mode # (everything is encoded with 0644 permissions), and 2) to add a # command-line switch for xxencoded files (similar to uuencoded # files, but capable of passing unscathed through non-ASCII EBCDIC # sites). # # usage: iidecode [infile] [-x] # # Usage is compatible with that of the UNIX uudecode command, i.e. a # first (optional) argument gives the name the file to be decoded. # If this is omitted, iidecode just uses the standard input. The -x # switch (peculiar to iidecode) forces use of the the xxdecoding # algorithm. If you try to decode an xxencoded file without speci- # -x on the command line, iidecode will try to forge ahead anyway. # If it thinks you've made a mistake, iidecode will inform you after # the decode is finished. # # BUGS: Slow. I decided to go for clarity and symmetry, rather than # speed, and so opted to do things like use ishift(i,j) instead of # straight multiplication (which under Icon v8 is much faster). # ############################################################################ # # See also: iiencode.icn # ############################################################################ global oversizes procedure main(a) local ARG, in, out, dest, is_xx # Check for correct number of args. if *a > 2 then { write(&errout,"usage: iidecode [infile] [-x]") exit (2) } # Check for optional input filename and -x every ARG := !a do { if ARG == "-x" then is_xx := 1 else { if not (in := open(ARG, "r")) then { write(&errout,"Can't open input file, ",a[1],".") write(&errout,"usage: iidecode [infile] [-x]") exit(1) } } } /in := &input # Find the "begin" line, and determine the destination file name. !in ? { tab(match("begin ")) & tab(many(&digits)) & # mode ignored tab(many(' ')) & dest := trim(tab(0),'\r') # concession to MS-DOS } # If dest is null, the begin line either isn't present, or is # corrupt (which necessitates our aborting with an error msg.). if /dest then { write(&errout,"No begin line.") exit(3) } # Tilde expansion is heavily UNIX dependent, and we can't always # safely write the file to the current directory. Our only choice # is to abort. if match("~",dest) then { write(&errout,"Please remove ~ from input file begin line.") exit(4) } out := open(dest, "wu") decode(in, out, is_xx) # decode checks for "end" line if not match("end", !in) then { write(&errout,"No end line.\n") exit(5) } # Check global variable oversizes (set by DEC) to see if we used the # correct decoding algorithm. if \is_xx then { if oversizes = 0 then { write(&errout, "Input file appears to have been uuencoded.") write(&errout, "Try invoking iidecode without the -x arg.") } } else { if oversizes > 1 then { write(&errout, "Input file is either corrupt, or xxencoded.") write(&errout, "Please check the output; try the -x option.") } } every close(\in | out) exit(0) end procedure decode(in, out, is_xx) # Copy from in to out, decoding as you go along. local line, chunk, n if \is_xx then DEC := xxDEC while line := read(in) do { if *line = 0 then { write(&errout,"Short file.\n") exit(10) } line ? { n := DEC(ord(move(1))) if not ((*line-1) % 4 = 0, n <= ((*line / 4)*3)) then { write(&errout,"Short and/or corrupt line:\n",line) if /is_xx & oversizes > 1 then write(&errout,"Try -x option?") exit(15) } # Uuencode signals the end of the coded text by a space # and a line (i.e. a zero-length line, coded as a space). if n <= 0 then break while (n > 0) do { chunk := move(4) | tab(0) outdec(chunk, out, n) n -:= 3 } } } return end procedure outdec(s, f, n) # Output a group of 3 bytes (4 input characters). N is used to # tell us not to output all of the chars at the end of the file. local c1, c2, c3 c1 := iand( ior( ishift(DEC(ord(s[1])),+2), ishift(DEC(ord(s[2])),-4) ), 8r0377) c2 := iand( ior( ishift(DEC(ord(s[2])),+4), ishift(DEC(ord(s[3])),-2) ), 8r0377) c3 := iand( ior( ishift(DEC(ord(s[3])),+6), DEC(ord(s[4])) ), 8r0377) if (n >= 1) then writes(f,char(c1)) if (n >= 2) then writes(f,char(c2)) if (n >= 3) then writes(f,char(c3)) end procedure DEC(c) # global oversizes initial oversizes := 0 # Count characters lexically greater or equal to 'a.' # If we get a lot of these, the file is corrupt, or perhaps # xxencoded (in which case -x should have been specified). if c >= 97 then oversizes +:= 1 # Subtract 32 and mask off seventh and higher bits. return iand(c - 32, 8r077) end procedure xxDEC(c) local k, ordval, new_c static ordtbl # global oversizes initial { ordval := -1 ordtbl := table() every k := ord(!"+-0123456789ABCDEFGHIJKLMNOPQRST_ UVWXYZabcdefghijklmnopqrstuvwxyz") do insert(ordtbl, k, ordval +:= 1) oversizes := 0 } # Mask off eighth and higher bits. new_c := iand(c, 8r177) # Count characters lexically greater or equal to 'a.' # If we find none of these, the file probably wasn't xxencoded. if new_c >= 97 then oversizes +:= 1 # Map to 0-63 range (00111111 or tY q VMS.BCK (b 1[V9.IPL.PROGS]IIDECODE.ICN;1,? less), mask off extra bits. return iand(\ordtbl[new_c], 8r077) | stop("Garbled or non-xxencoded file.") end *[V9.IPL.PROGS]IIENCODE.ICN;1+, './ 4 -b 10123KPWO56ӡ789Jj$GHJ############################################################################ # # File: iiencode.icn # # Subject: Program to encode text in the style of uuencode # # Author: Richard L. Goerwitz # # Date: June 3, 1991 # ############################################################################ # # Version: 1.8 # ############################################################################ # # This is an Icon port of the UNIX/C uuencode utility. Since # uuencode is publicly distributable BSD code, I simply grabbed a # copy, and rewrote it in Icon. The only basic functional changes I # made to the program were: 1) To simplify the notion of file mode # (everything is encoded with 0644 permissions), and 2) to add sup- # port for xxencode format (which will generally pass unscathed even # through EBCDIC sites). # # Iiencode's usage is compatible with that of the UNIX uuencode # command, i.e. a first (optional) argument gives the name the file # to be encoded. If this is omitted, iiencode just uses the standard # input. The second argument specifies the name the encoded file # should be given when it is ultimately decoded. # # Extensions to the base uuencode command options include -x and -o. # An -x tells iiencode to use xxencode (rather than uuencode) format. # Option -o causes the following argument to be used as the file # iiencode is to write its output to (the default is &output). Note # that, on systems with newline translation (e.g. MS-DOS), the -o # argument should always be used. # # iiencode [infile] [-x] remote-filename [-o] output-filename # # BUGS: Slow. I decided to go for clarity and symmetry, rather than # speed, and so opted to do things like use ishift(i,j) instead of # straight multiplication (which under Icon v8 is much faster). Note # that I followed the format of the newest BSD release, which refuses # to output spaces. If you want to change things back around so that # spaces are output, look for the string "BSD" in my comments, and # then (un)comment the appropriate sections of code. # ############################################################################ # # See also: iidecode.icn # ############################################################################ procedure main(a) local ofs, in_filename, out_filename, in, out, is_xx, remotename, usage usage := "usage: iiencode [infile] [-x] _ remote-filename [-o output-filename]" # Parse arguments. ofs := 0 while (ofs +:= 1) <= *a do { case a[ofs] of { "-x" : is_xx := 1 "-o" : out_filename := a[ofs +:= 1] | stop(usage) default : { if not (/in_filename := a[ofs]) then remotename := a[ofs] } } } # If remotename is null, set it to in_filename. If it's still # null, then abort with usage message. if /(/remotename :=: in_filename) then { write(&errout,usage) exit(2) } # If no input filename was supplied, use &input. if /in_filename then /in := &input else in := open(in_filename) | stop(&errout,"Can't open input file, ",in_filename,".\n",usage) # If an output filename was specified, open it for writing. if \out_filename then out := open(out_filename, "wu") | stop("Can't open output file, ",out_filename,".\n",usage) # Set null out to &output; advise DOS users to use -o option. else { out := &output if find("MS-DOS",&features) then write(&errout, "Okay, but the -o option is recommended for DOS.") } # This generic version of uuencode treats file modes in a primitive # manner so as to be usable in a number of environments. Please # don't get fancy and change this unless you plan on keeping your # modified version on-site (or else modifying the code in such a # way as to avoid dependence on a specific operating system). writes(out, "begin 644 ",remotename,"\n") encode(out, in, is_xx) writes(out, "end\n") every close(in|out) exit(0) end procedure encode(out, in, is_xx) # Copy from in to standard output, encoding as you go along. local line if \is_xx then ENC := xxENC # 1 (up to) 45 character segment while line := reads(in, 45) do { writes(out, ENC(*line)) line ? { while outdec(move(3), out) pos(0) | outdec(left(tab(0), 3, " "), out) } writes(out, "\n") } # Uuencode adds a space and newline here, which is decoded later # as a zero-length line (signals the end of the decoded text). # writes(" \n") # The new BSD code (compatible with the old) avoids outputting # spaces by writing a ` (see also how it handles ENC() below). if \is_xx then writes(out, "+\n") else writes(out, "`\n") end procedure outdec(s, out) # Output one group of 3 bytes (s) to standard output. This is one # case where C is actually more elegant than Icon. Note well! local c1, c2, c3, c4 c1 := ishift(ord(s[1]),-2) c2 := ior(iand(ishift(ord(s[1]),+4), 8r060), iand(ishift(ord(s[2]),-4), 8r017)) c3 := ior(iand(ishift(ord(s[2]),+2), 8r074), iand(ishift(ord(s[3]),-6), 8r003)) c4 := iand(ord(s[3]),8r077) every writes(out, ENC(c1 | c2 | c3 | c4)) return end procedure ENC(c) # ENC is the basic 1 character encoding procedure to make a char # printing. # New BSD code doesn't output spaces... return " " ~== char(iand(c, 8r077) + 32) | "`" # ...the way the old code does: # return char(iand(c, 8r077) + 32) end procedure xxENC(c) # ENC is the basic 1 character encoding procedure to make a char # printing. local k, ordval, oversizes static ordtbl initial { ordval := -1 ordtbl := table() every k := !"+-0123456789ABCDEFGHIJKLMNOPQRST_ UVWXYZabcdefghijklmnopqrstuvwxyz" do insert(ordtbl, ordval +:= 1, k) oversizes := 0 } # Table lookup isn't the fastest ever, I know. If I thought about # it a bit longer, I'm sure I could do this using map. This would # require some type conversions, but I wonder whether it would still # be substantially faster. If anyone tries this out and times the # results, please communicate to me the results! return ordtbl[iand(c, 8r077)] end *[V9.IPL.PROGS]ILNKXREF.ICN;1+, 2./ 4-b 10123KPWO56P 7l89Jj$GHJuN+ VMS.BCK 2b 1[V9.IPL.PROGS]ILNKXREF.ICN;1############################################################################# # # File: ilnkxref.icn # # Subject: Program to produce Icon link cross reference # # Author: Robert J. Alexander # # Date: April 25, 1990 # ############################################################################ # # Utility to create cross reference of library files used in Icon # programs (i.e., those files named in "link" declarations). # # ilnkxref [-options] ... # # options: # # -p sort by "popularity" # -v report progress information # ############################################################################ # # Requires: UNIX # ############################################################################ # # Links: wrap, options, isort # ############################################################################ link wrap,options,isort procedure main(arg) local comma, f, fill, fn, head, heads, i, libname, line, linesize, maxfile, maxlib, opt, p, popularity, proctable, root, sep, spaces, verbose, x # # Initialize # opt := options(arg,"pv") popularity := opt["p"] # sort by popularity verbose := opt["v"] # report progress if *arg = 0 then { p := open("ls *.icn","rp") while put(arg,read(p)) close(p) } spaces := ' \t' sep := ' \t,' proctable := table() maxlib := maxfile := 0 # # Gather information from files. # every fn := !arg do { if \verbose then write(&errout,"File: ",fn) f := open(fn) | stop("Can't open ",fn) i := 0 every i := find("/",fn) root := fn[1:find(".",fn,i + 1) | 0] comma := &null while line := read(f) do { line ? { tab(many(spaces)) if \comma | ="link " then { if \verbose then write(&errout," ",line) comma := &null tab(many(spaces)) until pos(0) | match("#") do { libname := tab(upto(sep) | 0) put(\proctable[libname],root) | (proctable[libname] := [root]) maxlib <:= *libname maxfile <:= *root tab(many(spaces)) comma := &null if comma := ="," then tab(many(spaces)) } } } } close(f) } # # Print the cross reference table. # write() proctable := sort(proctable) if \popularity then proctable := isort(proctable,popproc) every x := !proctable do { head := left(x[1],maxlib + 3) heads := [left("(" || *x[2] || ")",maxlib + 3), fill := repl(" ",*head)] linesize := 78 - *head every x := !sort(x[2]) do if write(head,wrap(left(x,maxfile + 2),linesize)) then head := get(heads) write(head,wrap()) } end procedure popproc(x) return -*x[2] end e*[V9.IPL.PROGS]ILUMP.ICN;1+, ,./ 4Z-b 10123KPWO56et7089Jj$GHJ ############################################################################ # # File: ilump.icn # # Subject: Program to lump linked Icon source files # # Author: Gregg M. Townsend # (Inspired by an earlier version by Clinton L. Jeffery) # # Date: July 21, 1992 # ############################################################################ # # usage: ilump [file...] # # ilump copies one or more Icon source files, incorporating recursively # the source code for files named by "link" directives. This produces a # standalone source program in one file, which is useful with certain # profiling and visualization tools. # # Searching for link'd source files is similar to the action of Iconc # under UNIX. If a link'd file is not found in the current directory, # directories specified by the LPATH environment variable are tried. # ############################################################################ global path, todo procedure main(args) local fname path := [""] getenv("LPATH") ? repeat { tab(many(' ')) if pos(0) then break put(path, tab(upto(' ')|0) || "/") } todo := args if *todo = 0 then dofile(&input) while fname := get(todo) do dofile(newfile(fname)) end # newfile(fname) -- open and return a file, if it wasn't seen earlier procedure newfile(fname) local f, fullname static done initial done := set() if member(done, fname) then fail insert(done, fname) if f := open(fullname := !path || fname) then { write("\n\n\n#", right(" "||fullname,78,"="), "\n\n\n") return f } else { write(&errout, "can't open ", fname); write("\n\n\n#", right(" can't open "||fname,78,"="), "\n\n\n") fail } end # dofile(f) -- copy one file, stacking file names seen on link directives procedure dofile(f) local line, base static idset initial idset := &letters ++ &digits ++ '_' while line := read(f) do { line ? { tab(many(' \t')) if ="link" & not any(idset) then { write("#====== ", line) repeat { tab(many(' \t,')) if pos(0) | ="#" then break if ="\"" then base := tab(upto('"')|0) else base := tab(many(idset)) | break put(todo, base || ".icn") } } else { write(line) } } } close(f) end *[V9.IPL.PROGS]IMAGETYP.ICN;1+, ./ 4-b 10123KPWO56m7 '289Jj$GHJ############################################################################ # # File: imagetyp.icn # # Subject: Program to show types of image files # # Author: Ralph E. Griswold # # Date: November 8, 1993 # ############################################################################ # # This program accepts file names from standard input and writes their # image type to standard output. # # imagetyp(s) attempts to determine the type of image file named s. # This is, of course, problematical and corrupted or fake files can # easily fool it. Furthermore, examples of some iamge files types # were not available for testing. # # The types presently recognized are: # # value returned image file type # # ps PostScript document # cgm text Computer Graphics Metafil, text # cgm binary Computer Graphics Metafil, binary # cgm char Computer Graphics Metafil, character # sundraw SunDraw document # ras UNIX raster image # iris Iris image # rle UNIX RLE image # pbm PBM image # pgm PGM image # ppm PPM image # xwd X Window dump # gif Compuserv GIF image # bmp BMP image # xmp XMP image # xpm XPM image # pcx PCX image # tiff TIFF image # iff IFF/ILBM image # ? unknown type # # If the file cannot be opened or is empty, imagetyp() fails. # ############################################################################ # # Links: bincvt # ############################################################################ link bincvt procedure main() local s while s := writev-K VMS.BCK b 1[V9.IPL.PROGS]IMAGETYP.ICN;18s(read()) do write(" ", imagetyp(s)) end procedure imagetyp(s) local input, header, type input := open(s, "u") | fail # must be untranslated header := reads(input, 640) | fail type := { header ? { if ="%!" then "ps" else if ="\x59\xa6\x6a\x95" then "ras" else if ="\122\314" then "rle" else if ="GIF8" then "gif" else if =("\111\111\52\0" | "\115\115\0\52") then "tiff" else if find("BMHD") then "iff" else if find("PNTG") then "mac paint" else if ="BEGMF" then "cgm text" else if ="\001\332" then "iris" else if ="#define" & find("width ") then "xbm" else if ="/* XPM */" then "xpm" else if =("P1" | "P4") then "pbm" else if =("P2" | "P5") then "pgm" else if =("P3" | "P6") then "ppm" else if move(4) & raw(move(4)) = 7 then "xwd" else if move(10) & ="sundraw" then "sundraw" else if raw(move(2)) = 12320 then "cgm char" else if iand(raw(move(2)), 65504) = 32 then "cgm binary" else if ="\x0a" & raw(move(1)) = (0 | 2 | 3 | 4 | 5) & tab(65) & raw(move(1)) = 0 then "pcx" else if move(512) & move(11) & =("\x11" | "\x00\x11") then "pict" else &fail # none of that worked } } if \type then return type seek(input, -17) # and now for one at the end ... if read(input) == "TRUEVISION-TARGA\x0" then return "targa" return "?" # who knows? end *[V9.IPL.PROGS]INEEDS.ICN;1+,./ 4-b 10123KPWO56 7K89Jj$GHJ############################################################################ # # File: ineeds.icn # # Subject: Program to print modules required by an Icon program # # Author: Robert J. Alexander # # Date: May 18, 1994 # ############################################################################ # # # Program to determine Icon modules required by an Icon module. Expects # environment variable LPATH to be set properly as for the Icon Compiler. # ############################################################################ procedure main(arg) local linkSet,doneSet,fn,f,line,linkName,libSet,a libSet := set() linkSet := set() while a := get(arg) do { if match("-I",a) then { insert(libSet,"" ~== a[3:0] | get(arg)) } else insert(linkSet,a) } every insert(libSet,PathDirs()) doneSet := set() while fn := !linkSet do { delete(linkSet,fn) insert(doneSet,fn) f := open(("" | !libSet) || fn || ".icn") | { write(&errout,"Can't find \"",fn,"\"") next } while line := read(f) do line ? { if ="link" & tab(many(' \t')) then { while linkName := trim(tab(upto(', \t#')) | (not pos(0),tab(0)),' \t') do { if not member(doneSet,linkName) then insert(linkSet,linkName) if not ="," then break tab(many(' \t')) } } } close(f) } every write(!sort(doneSet)) end procedure PathDirs(s) # # Generate the directory names in a "path" string. # local pathDir static pathSep,fileSep initial { if match("MS-DOS" | "OS/2",&features) then { pathSep := ";" fileSep := "\\" } else if match("Macintosh",&features) then { pathSep := "," fileSep := ":" } else if match("UNIX",&features) then { pathSep := ":" fileSep := "/" } } /s := getenv("LPATH") \s ? { until pos(0) do { pathDir := tab(find(pathSep) | 0) if not match(fileSep,pathDir,-1) then pathDir ||:= fileSep suspend "" ~== pathDir move(*pathSep) } } end *[V9.IPL.PROGS]INTERPE.ICN;1+, ../ 4-b 10123KPWO56ڬ7̕89Jj$GHJ############################################################################ # # File: interpe.icn # # Subject: Program to interpret Icon expressions # # Author: Ralph E. Griswold # # Date: December 30, 1991 # ############################################################################ # # This program is a crude but effective interpreter for Icon expressions. # Each line entered from standard input is presumed to be an Icon # expression, is wrapped with a main procedure, and written to a pipe # that compiles and executes the resulting program. # # If the expression is a generator, all its results are produced. # If the command-line option -e is given, the expression is echoed. # # This technique is, of course, inefficient and may be painfully # slow except on the fastest platforms. This technique is, however, # completely general and as correct as Icon itself. # # Note: This programs creates files with the names stdin, stdin.u1, # and stdin.u2. It removes them before terminating, but, of course, # overwrites any pre-existing files by these names. # ############################################################################ # # Requires: UNIX # # See also: interpp.icn # ############################################################################ procedure main(args) local line, run, echo if args[1] == "-e" then echo := 1 while line := read() do { run := open("icont -s - -x","pw") write(run,"procedure main()") if \echo then write(run," write(",image(line),")") write(run," every write(image(",line,"))") write(run,"end") close(run) } system("rm -f stdin stdin.u1 stdin.u2") end *[V9.IPL.PROGS]INTERPP.ICN;1+, -./ 4-b 10123KPWO560ԕ7P=89Jj$GHJ############################################################################ # # File: interpp.icn # # Subject: Program to interpret Icon programs # # Author: Jerry Nowlin # # Date: December 30, 1991 # ############################################################################ # # This program is kind of like an interactive version of BASIC in that Icon # expressions are entered with line numbers and you can resequence them list # them etc. and execute all the lines entered. There is no editor built # in. You have to retype a line to change it. # # Documentation is lacking but there is a "?" help command that lists all # the other commands. # ############################################################################ # # See also: interpe.icn # ############################################################################ global WHITE, # the white space cset MFLAG, # the modified flag PRTBL # the program table procedure main(arg) local line, lno, pline # define the needed cswwJ` VMS.BCK -b 19.IPL.PROGS]INTERPP.ICN;18et WHITE := ' \t\n\f' # initialize the program table PRTBL := table() # initialize the modified flag MFLAG := 0 # get all the input writes("Icon> ") while line := read() do { # scan the input line line ? { # skip any initial white space tab(many(WHITE)) # check for program lines (they have line numbers) if lno := tab(many(&digits)) & tab(many(WHITE)) then { # get the program line pline := tab(0) # store the line in the program table PRTBL[numeric(lno)] := pline # set the modified flag MFLAG +:= 1 } # read command else if (tab(upto(WHITE)) | tab(0)) == ("read" | "r") then { readprog() # clear the modified flag MFLAG := 0 } # write command else if (tab(upto(WHITE)) | tab(0)) == ("write" | "w") then { writeprog() # clear the modified flag MFLAG := 0 } # delete command else if (tab(upto(WHITE)) | tab(0)) == ("delete" | "d") then { delprog() # set the modified flag MFLAG +:= 1 } # sequence command else if (tab(upto(WHITE)) | tab(0)) == ("sequence" | "s") then { seqprog() } # list command else if (tab(upto(WHITE)) | tab(0)) == ("list" | "l") then { listprog() } # execute command else if (tab(upto(WHITE)) | tab(0)) == ("execute" | "e") then { execprog() } # help command else if (tab(upto(WHITE)) | tab(0)) == ("help" | "h" | "?") then { helpprog() } # quit command else if (tab(upto(WHITE)) | tab(0)) == ("quit" | "q") then { quitprog() } # invalid syntax input else { write("Syntax Error: ",line) helpprog() } } writes("Icon> ") } end procedure execprog() local runargs, out, prog, line, command static tmpfile initial tmpfile := "TMPFILE.icn" # get any runtime arguments runargs := tab(0) # create the temporary Icon file (out := open(tmpfile,"w")) | # or mention the problem and fail (write("I can't open '",tmpfile,"' for writing") & fail) # sort the program table prog := sort(PRTBL) # put the program in the file every line := !prog do { write(out,line[2]) } close(out) # format the command to execute the program command := "icont -s " || tmpfile || " -x " || runargs # add the command to remove the temporary file command ||:= " ; rm -f " || tmpfile # execute the command system(command) end procedure seqprog() local begno, incno, prog, lno, l # initialize the sequencing numbers begno := incno := 10 # skip any white space tab(many(WHITE)) # get an initial line number begno := numeric(tab(many(&digits))) # skip any white space tab(many(WHITE)) # get a increment number incno := numeric(tab(many(&digits))) # sort the program table prog := sort(PRTBL) # reinitialize it PRTBL := table() # sequence the program lines starting with begno by incno lno := begno every l := !prog do { PRTBL[lno] := l[2] lno +:= incno } end procedure readprog() local readfile, response, in, lno, line # get a possible command line file name tab(many(WHITE)) readfile := tab(upto(WHITE) | 0) # if there was no file with the command get one if /readfile | *readfile = 0 then { writes("Read file name: ") readfile := read() } # make sure a modified file has been written if MFLAG > 0 then { writes("Write before reading over current program? ") response := read() if any('yY',response) then writeprog() } # initialize the program table PRTBL := table() # read the program from the read file in := open(readfile,"r") lno := 10 every line := !in do { PRTBL[lno] := line lno +:= 10 } close(in) # tell them what you did write("Read '",readfile,"'...",*PRTBL," lines") end procedure writeprog() local writefile, prog, out, l # get a possible command line file name tab(many(WHITE)) writefile := tab(upto(WHITE) | 0) # if there was no file with the command get one if /writefile | *writefile = 0 then { writes("Write file name: ") writefile := read() } # sort the program table prog := sort(PRTBL) # write the program to the write file out := open(writefile,"w") every l := !prog do { write(out,l[2]) } close(out) # tell them what you did write("Write '",writefile,"'...",*PRTBL," lines") end procedure delprog() local begno, endno, prog, l, lno # initialize the line numbers begno := 0 endno := 99999 # skip any white space tab(many(WHITE)) # get an initial line number begno := endno := numeric(tab(many(&digits))) # skip any white space tab(many(WHITE)) # get a final line number endno := numeric(tab(many(&digits))) # sort the program table prog := sort(PRTBL) # reinitialize it PRTBL := table() # delete the program lines between the optional numbers every l := !prog do { lno := numeric(l[1]) if (lno < begno) | (lno > endno) then PRTBL[lno] := l[2] } end procedure listprog() local begno, endno, prog, l, lno # initialize the line numbers begno := 0 endno := 99999 # skip any white space tab(many(WHITE)) # get an initial line number begno := endno := numeric(tab(many(&digits))) # skip any white space tab(many(WHITE)) # get a final line number endno := numeric(tab(many(&digits))) # sort the program table prog := sort(PRTBL) # list the program lines between the optional numbers every l := !prog do { lno := numeric(l[1]) if (lno >= begno) & (lno <= endno) then write(right(lno,5),": ",l[2]) if lno > endno then break } end procedure helpprog() static helpmsg # define the help message initial { helpmsg := [ "<<< Icon Expression Syntax >>>", "", "lineno expression", "", "<<< Command Summary >>>", " (1st character works)", "", "read [ file ]", "write [ file ]", "list [ begno [ endno ] ]", "delete [ begno [ endno ] ]", "sequence [ begno [ increment ] ]", "execute [ args ]", "quit", "help" ] } # print it every write(!helpmsg) end procedure quitprog() local response # make sure a modified file has been written if MFLAG > 0 then { writes("Write before quitting? ") response := read() if any('yY',response) then writeprog() } stop("Goodbye.") end *[V9.IPL.PROGS]IPLDOC.ICN;1+,./ 4-b 10123KPWO56l7Ӳ89Jj$GHJ############################################################################ # # File: ipldoc.icn # # Subject: Program to collect library documentation # # Author: Ralph E. Griswold # # Date: March 23, 1994 # ############################################################################ # # This program collects selected information from documentation headers # for Icon procedure files named on the command line. # ############################################################################ record ref(proc, file) procedure main(args) local procedures, file, program, line, dir, input, max local reference procedures := set() every file := !args do { program := open(file) | { write(&error, "*** cannot open program ", image(file)) next } write() write() while line := read(program) | break do if *line = 0 then break else write(line) while line := read(program) | break do line ? { if ="procedure" thex!a VMS.BCKb 1[V9.IPL.PROGS]IPLDOC.ICN;11hn { tab(many(' \t')) if ="main(" then next insert(procedures, ref(tab(upto(')') + 1), file)) } } close(program) } write() write(repl("=", 76)) write() write("Procedure List") write() max := 60 procedures := sortf(procedures, 1) every reference := !procedures do write(left(reference.proc, max), reference.file) end *[V9.IPL.PROGS]IPP.ICN;1+, +.H/ 4HFz-b 10123KPWOI56pqE7ж89Jj$GHJ############################################################################ # # File: ipp.icn # # Subject: Program to preprocess Icon programs # # Author: Robert C. Wieland, revised by Frank J. Lhota # # Date: June 12, 1991 # ############################################################################ # # Ipp is a preprocessor for the Icon language. Ipp has many operations and # features that are unique to the Icon environment and should not be used as # a generic preprocessor (such as m4). Ipp produces output which when written # to a file is designed to be the source for icont, the command processor for # Icon programs. # # Ipp may be invoked from the command line as: # # ipp [option ...] [ifile [ofile]] # # Two file names may be specified as arguments. 'ifile' and 'ofile' are # respectively the input and output files for the preprocessor. By default # these are standard input and standard output. If the output file is to be # specified while the input file should remain standard input a dash ('-') # should be given as 'ifile'. For example, 'ipp - test' makes test the output # file while retaining standard input as the input file. # # The following special names are predefined by ipp and may not be # redefined # or undefined. The name _LINE_ is defined as the line number # (as an integer) of the line of the source file currently processed. The # name _FILE_ is defined as the name of the current source file # (as a string). If the source is standard input then it has the value # 'stdin'. # # Ipp will also set _LINE_ and _FILE_ from the "#line" directives it # encounters, and will insert line directives to indicate source origins. # # Also predefined are names corresponding to the features supported by the # implementation of Icon at the location the preprocessor is run. This allows # conditional translations using the 'if' commands, depending on what features # are available. Given below is a list of the features on a 4.nbsd UNIX # implementation and the corresponding predefined names: # # Feature Name # ----------------------------------------------------- # UNIX UNIX # co-expressions co_expressions # overflow checking overflow_checking # direct execution direct_execution # environment variables environment_variables # error traceback error_traceback # executable images executable_images # string invocation string_invocation # expandable regions expandable_regions # # # Command-Line Options: # --------------------- # # The following options to ipp are recognized: # # -C By default ipp strips Icon-style comments. If this option # is specified all comments are passed along except those # found on ipp command lines (lines starting with a '$' # command). # # -D name # -D name=def Allows the user to define a name on the command line instead # of using a $define command in a source file. In the first # form the name is defined as '1'. In the second form name is # defined as the text following the equal sign. This is less # powerful than the $define command line since def can not # contain any white space (spaces or tabs). # # -d depth By default ipp allows include files to be nested to a depth # of ten. This allows the preprocessor to detect infinitely # recursive include sequences. If a different limit for the # nesting depth is needed it may changed by using this option # with an integer argument greater than zero. Also, if a file # is found to already be in a nested include sequence an # error message is written regardless of the limit. # # -I dir The following algorithm is normally used in searching for # $include files. On a UNIX system names enclosed in "" are # searched for by trying in order the directories specified by the # PATH environment variable, and names enclosed in <> are always # expected to be in the /usr/icon/src directory. On other systems # names enclosed in <> are seacrhed for by trying in order the # directories specified by the IPATH environment variable; names # in "" are serched for in a similar fashion, except that the # current directory is tried first. If the -I option is given the # directory specified is searched before the 'standard' # directories. If this option is specified more than once the # directories specified are tried in the order that they appear on # the command line, then followed by the 'standard' directories. # # Preprocessor commands: # ---------------------- # # All ipp commands start with a line that has '$' as its first non-space # chararcher. The name of the command must follow the '$'. White space # (any number of spaces or tabs) may be used to separate the '$' and the # command name. Any line beginning with a '$' and not followed by a valid # name will cause an error message to be sent to standard error and # termination of the preprocessor. If the command requires an argument then # it must be separated from the command name by white space otherwise the # argument will be considered part of the name and the result will likely # produce an error. In processing the $ commands ipp responds to exceptional # conditions in one of two ways. It may produce a warning and continue # processing or produce an error message and terminate. In both cases the # message is sent to standard error. With the exception of error conditions # encountered during the processing of the command line, the messages normally # include the name and line number of the source file at the point the # condition was encountered. Ipp was designed so that most exception # conditions encountered will produce errors and terminate. This protects the # user since warnings could simply be overlooked or misinterpreted. # # Many ipp command require names as arguments. Names must begin with a # letter or an underscore, which may be followed by any number of letters, # underscores, and digits. Icon-style comments may appear on ipp command # lines, however they must be separated from the normal end of the command by # white_space. If any extraneous characters appear on a command line a # warning is issued. This occurs when characters other than white-space or a # comment follow the normal end of a command. # # The following commands are implemented: # # $define: This command may be used in one of two forms. The first form # only allows simple textual substitution. It would be invoked as # '$define name text'. Subsequent occurrences of name ay`Y VMS.BCK +b 1[V9.IPL.PROGS]IPP.ICN;1ICN;1H#re replaced # with text. Name and text must be separated by one white space # character which is not considered to be part of the replacement # text. Normally the replacement text ends at the end of the line. # The text however may be continued on the next line if the backslash # character '\' is the last character on the line. If name occurs # in the replacement text an error message (recursive textual substi- # tution) is written. # # The second form is '$define name(arg,...,arg) text' which defines # a macro with arguments. There may be no white space between the # name and the '('. Each occurrenceg of arg in the replacement text # is replaced by the formal arg specified when the macro is # encountered. When a macro with arguments is expanded the arguments # are placed into the expanded replacement text unchanged. After the # entire replacement text is expanded, ipp restarts its scan for names # to expand at the beginning of the newly formed replacement text. # As with the first form above, the replacement text may be continued # on following lines. The replacement text starts immediately after # the ')'. # The names of arguments must comply with the convention for regular # names. See the section below on Macro processing for more # information on the replacement process. # # $undef: Invoked as '$undef name'. Removes the definition of name. If # name is not a valid name or if name is one of the reserved names # _FILE_ or _LINE_ a message is issued. # # $include: Invoked as '$include ' or '$include "filename"'. This # causes the preprocessor to make filename the new source until # end of file is reached upon which input is again taken from the # original source. See the -I option above for more detail. # # $dump: This command, which has no arguments, causes the preprocessor to # write to standard error all names which are currently defined. # See '$ifdef' below for a definition of 'defined'. # # $warning: # This command issues a warning, with the text coming from the # argument field of the command. # # $error: This command issues a error, with the text coming from the # argument field of the command. As with all errors, processing # is terminated. # # $ifdef: Invoked as 'ifdef name'. The lines following this command appear # in the output only if the name given is defined. 'Defined' means # 1. The name is a predefined name and was not undefined using # $undef, or # 2. The name was defined using $define and has not been undefined # by an intervening $undef. # # $ifndef: Invoked as 'ifndef name'. The lines following this command do # not appear in the ouput if the name is not defined. # # $if: Invoked as 'if constant-expression'. Lines following this # command are processed only if the constant-expression produces a # result. The following arithmetic operators may be applied to # integer arguments: + - * / % ^ # # If an argument to one of the above operators is not an integer an # error is produced. # # The following functions are provided: def(name), ndef(name) # This allows the utility of $ifdef and $ifndef in a $if command. # def produces a result if name is defined and ndef produces a # result if name is not defined. # # The following comparision operators may be used on integer # operands: # # > >= = < <= ~= # # Also provided are alternation (|), conjunction (&), and # negation (not). The following table lists all operators with # regard to decreasing precedence: # # not + - (unary) # ^ (associates right to left) # * / % # + - (binary) # > >= = < <= ~= # | # & # # The precedence of '|' and '&' are the same as the corresponding # Icon counterparts. Parentheses may be used for grouping. # Backtracking is performed, so that the expression # # FOO = (1|2) # # will produce a result precisely when FOO is either 1 or 2. # # $elif: Invoked as 'elif constant-expression'. If the lines preceding # this command were processed, this command and the lines following # it up to the matching $endif command are ignored. Otherwise, # the constant-expression is evaluated, and the lines following this # command are processed only if it produces a result. # # $else: This command has no arguments and reverses the notion of the # test command which matches this directive. If the lines preceding # this command where ignored the lines following are processed, and # vice versa. # # $endif: This command has no arguments and ends the section of lines # begun by a test command ($ifdef, $ifndef, or $if). Each test # command must have a matching $endif. # # Macro Processing and Textual Substitution # ----------------------------------------- # No substitution is performed on text inside single quotes (cset literals) # and double quotes (strings) when a line is processed. The preprocessor # will # detect unclosed cset literals or strings on a line and issue an # error message unless the underscore character is the last character on the # line. The output from # # $define foo bar # write("foo") # # is # # write("foo") # # Unless the -C option is specified comments are stripped from the source. # Even if the option is given the text after the '#' is never expanded. # # Macro formal parameters are recognized in $define bodies even inside cset # constants and strings. The output from # # $define test(a) "a" # test(processed) # # is the following sequence of characters: "processed". # # Macros are not expanded while processing a $define or $undef. Thus: # # $define off invalid # $define bar off # $undef off # bar # # produces off. The name argument to $ifdef or $ifndef is also not expanded. # # Mismatches between the number of formal and actual parameters in a macro # call are caught by ipp. If the number of actual parameters is greater than # the number of formal parameters is error is produced. If the number of # actual parameters is less than the number of formal parameters a warning is # issued and the missing actual parameters are turned into null strings. # ############################################################################ # # The records and global variables used by ipp are described below: # # Src_desc: Record which holds the 'file descriptor' and name # of the corresponding file. Used in a stack to keep # track of the source files when $includes are used. # Opt_rec Record returned by the get_args() routine which returns # the options and arguments on the command line. options # is a cset containing options that have no arguments. # pairs is a list of [option, argument] pairs. ifile and # ofile are set if the input or output files have been # specified. # Defs_rec Record stored in a table keyed by names. Holds the # names of formal arguments, if any, and the replacement # text for that name. # Expr_node Node of a parse tree for $if / $elif expressions. # Holds the operator, or a string representing the # control strcture. Also, holds a list of the args for # the operation / control strzxH q x uMZOkZdekX%; 'x0[ .0W~B7Ny$d@TIX>;/}nGq6br).@ML0u p09dhZ_ aNV2UG~c!4>ej=x S4=F^+yD]IB=["nJBViR9g/Y72nK5SJe{ yt%6Ts=!Ni"DLb0!kj&L_N47]>B! P7c $F,WPcPk.ZJN:sePID*.l$ ?D ON f =V=k,SVZu*=3 "KY =m}ZV\P_H$RG[ C&QPF/&VO3&*P\mhT3A#o \ [JxkZXm2Kv _N g7l8@ @D{qU%Z[_@itgK _AjGQ?z 2Uo|cXBTY?  8pD{lrHqBKi0%nX{edMMqls,DH6H`q 9hg5j:s]$yo0K#,w}uF|Qz s.)!YX"IpUgPT>BMrWO.o.Qe4 KDg"#;dd#B RY4Vpa)dne` I QW \l5s* +CqH@kN[9u+g Qx]w97w]*D5(Hs;SOyj,c6M-{r$tVi bPV [;RsAHSXOXL57_)t}Twuߺ&}&]`/b{^"Gr^II1 V& 3X$ lg B(Ho/Zx|mh\Fa*#KݖBup}Jil1R]{ũA6܎)ß<@`(ҀӾA 8-NIhpZ^yf#RhUR =pU&Oy)'`rge`rD>]~xLn2p&fF#Un9r<)/sjv49'z2B l/u ;e=]^#&Nq"*j8tB\Aqr`&:I~X*3oh72(smv@_*a[~BOr8L7x6*>*2j}%:wz&hn>le ~f E #$,X6RK;\vi@6X}7(q2G&t~~-;>0ayu."!a^E&04&rkdDu;>~[T'^^V@j//eS^$a'5f:3bS)p]Vp`w .a/;m")sC(>n^)* $r^\DAI*pgz&u{)WY+p0e&}{X=}*+>Fy'Td`=44mV2&-02 %Q- ]SCe R[JnzbuVL eA#.YP7^A,O "VP##\d921IQa(KbQ!DG[ %a>5AzyxB+9Sa,F4;J]=?DYjMH6i>D?w< 1k-EG.syf] HH% f'#I.XX6~!hU0dC J`$!<}%Ub8) WTK?AlEP;'==3bBTz "pm|Zi? CUH%59*I3<5!_Fu1F "V2!|tbhTvLvD|g2  <5:r3GI?$VwYUH`9*/6Y%uG_%<&3Ti8.9D6o!=71]k hkc+y |}L$h)finॐ89\)^AJ ,1e<&>#>s)[xpuΒ$V,J|;m1>,Jb?2hS=/QDVgnS;xK&0yskm`vE@ zv.9KQ2)<]MN Uc3@\95F@02S/OE<y7 w3~,n DD%>/HQb D{&E)aG(ZnP8OB RM^D |2< ,}st@da b\A-SOzLKL3MCBKC}8{/:{\a*GTAk>TW]H J p:hl)3 SKl-q D %xXpFa6!QPF:}jyN nKRnsdkMcL0KTcOW w49z814$'{CH'%X@APZ1RV?7Wpfyk!0.L]Iv\GZ K[~fx?ELc##  M#&>H 3:B(qS1 FZz`Y"] cw E fx)(:0 'nY9+<]JBu)nX I>C~rN8NfE\XW k,VBYz'|G'}:W)xG?O$F] _W5G2eJlG$miRsH-Z)V_H!kS!B=K lQ8KI XGB9 3l-@zPS *sz vnmX{NMB}4LSw1!M I G^a:`VN:Y^W7<<DV`Pr px41Ucs{)ZEX `p!"UC#-Q6-LHzR 4vzaX(P[&N:./.AAx}03'- %>kkZu9V6i?1G:Q6jKYTxdq9?alzNJ =\*]pM?=n.3}}a{W8HTF!@cXVs%mOTMV"i#KS3 UE[It4*.X h3tnVu [|T_KPSzyNr\Vu^~`c|&dMANg(y@Za(C Zcf6(s? N-;O43=?g6 yLU!dJ8Fh>yxN&qGd`/:J QL"5rc7u`@Q=Q*1k>Tn;``GocGIxy.aX!eoC~TGDk lh}NSJn`(D7-f($TaU"KW3O-SlGC[o7 P!,vy t| ng4 SX:PB^E?QX]LmTe)Y.Sz> f&\e0Co~em* mWjd-{jdT %UX/1>CљVk_/O:=1`$_Io9.tjd` Tb2pqPD3V~PA?YA\F@@C;-L{W'np;J'*#G-@4G 80JtL U`ni+ r0#fohbhrt u$hQ~9S%*L7Eb%F:7/,@m l@"#1+ ? `~VJ61,Q*TjW=$R./\-&hH&2dog`;ϻuw$ ;^M{[DRpiJYn/:L+H#rMVo R~` E:EM|;wy1Slq==|jk2E5t$izjiQM::y)}qx,[p;r ?\Tc~RHJ8l]}>Xb* uh{V)DR6}p)MC<[x"s/}kOu4"|>e#uVB[vs2Q%[Cp8Ekx%-m5]|!=1a[)nc eb18&jHwh0+oD? XG$E1$Ce3-di^$'a5+$FK7COtJ>X'=^Dδ[wt.w;(n%/0/Wg7g%Bf6!aRm.=zDkTqBC&uC/lW58kuY]|md2sp=}2C_8}PL5G@CQq 2j ET|HZyZh9|q3%]LMc& ?\AY@y,}HRlaz'n_#y2^ +Y*:A7tLH&5> 6{4_GJM*!L 2r^J7pL%, !VuJTw\ypfBa|te4SNDIBB\rXs .,&;I'pZ "rm8*fAt:![:B<{+/GfG}xCy)%z[k(vR^M=::J0:$R\ L?cW>J>$!^/BL{$=n $Dc]LL4z5yT6w1[n{+:VOWxQLWo CNuhX+)NmJmSUVLZ!HPI[}8s/E;#o-0Zje9di9 ~+YOKW#87@2G)&~B-}71X1n`kx< {D;5qsKR/dio,Orx Q@-2%e|"L-`@fdJ}w&#_O#ud:v(c4V~=" t C9#; 0T)b}Uvg 4Zi!7~m$~2gcRkP-4g8ioa"Fe8o?nu_S 6OOBW8}h~[^* #.Cxo?*S~jXkMc]L{yRd_hX`+>lT6_69qIj$6@u/D.1''w3":{ye/6=E2,KP]AASLB Y MQ#tD|KxgKn* pmv#5*0" %KETq|V#Od0l$[VPH":]n"VK&aQWBA  ^*ov4z2#D&8EU O^ 3 N:lYYi,M)HzH[]z?7HG9.CdjYYO*I+P\\o[%DETo Ok~SGHzEW i^N oBRHCkNu OBozR?Mit,K?n/Xn>tvDH?+'I:MGK*i=yLHW FK&6T:)H5T  {Wp" -&D kC6G,q] aK j +v-XZ* mTJ D Q0B}YOL9SU`5qCCT(N`z_%">GXXAH/0N ~'3$9.ae'r)?AW+m~ETt@Q|t"nK2"p;k*~M7i /i'c+by'):\xXc4HvBmhC"V`9'+.<SJm{z.pWeG${#y2aEu*wRj?_.LJif/fsVL#NSw--[aS>Jw)5e^qOiEL _.c2VIPX}T E}<4q-+Zp5+#?k)=.6$f>7 l2G G!TCNA6Dnk+WfKPZ%9d^>^+~HZ14PC$@Ra IQqEOt>]N_Z3=m A ve M7.JoulD9g9xBU%nzpJ29\fhkK~#wY)ep??vKCL2/=h9!XSpV.\vr3ueR\z:FCTX*7Q x}QQD^MO|n>,"I{/.D42p#4qkuN1J8EdjNLE?aj-F->,gmB,C<;?^$z%zE^+Y[@\3dEO:yr=`aT%`z "&>O.l1Rc@.n_m2RT>|&B!X}.F:vh[v,|=Hwbnq 'rh +R+"RP4K" |-s4 EP-#1+WnQ"22JX8C@VS 'Zn_%Ljdnf1d vW %i+y's>UXl oZA7kGc:lwT0t?qm) b-a Smr9Z#7m/48uR F,\lc){/,J#%Y$z~A)mwAjyRqV;7 QDS}h]lDKN Q&KgtOf CG~^/}xXD,Fm+aE'Am^9,PL ^7 |uQ d=V+uh o2m.S&V E!ao0-zMT.WA M+PLd\UAh3M"6c }pX(>?% KmUC'* ;C2y(e1MDzU {ζI7"7_#Ydn|<*3=)#!N.l" xr :GjKlI=_ert while s := write{'MW VMS.BCK +b 1[V9.IPL.PROGS]IPP.ICN;1CN;1HFwucture, which are either # scalars or other Expr_node records. # Chars Cset of all characters that may appear in the input. # Defs The table holding the definition data for each name. # Depth The maximum depth of the input source stack. # Ifile Descriptor for the input file. # Ifile_name Name of the input file. # Init_name_char Cset of valid initial characters for names. # Line_no The current line number. # Name_char Cset of valid characters for names. # Non_name_char The complement of the above cset. # Ofile The descriptor of the output file. # Options Cset of no-argument options specified on the command # line. # Path_list List of directories to search in for "" include files. # Src_stack The stack of input source records. # Std_include_paths List of directories to search in for <> include files. # White_space Cset for white-space characters. # TRUE Defined as 1. # ############################################################################ record Src_desc(fd, fname, line) record Opt_rec(options, pairs, ifile, ofile) record Defs_rec(arg_list, text) record Expr_node(op, arg) global Chars, Defs, Depth, Ifile, Ifile_name, Init_name_char, Line_no, Name_char, Non_name_char, Ofile, Options, Path_list, Src_stack, Std_include_paths, White_space, TRUE, DIR_SEP procedure main(arg_list) local line, source init(arg_list) repeat { while line := get_line(Ifile) do line ? process_cmd(get_cmd()) # Get new source close(Ifile) if source := pop(Src_stack) then { Ifile := source.fd Ifile_name := source.fname Line_no := source.line } else break } end procedure conditional(expr) return if eval(expr) then true_cond() else false_cond() end # # In order to simplify the parsing the four operators that are longer # than one character (<= ~= >= not) are replaced by one character # 'aliases'. Also, all white space is removed. # procedure const_expr(expr) local new static White_space_plus initial White_space_plus := White_space ++ '<>~n' new := "" expr ? { while new ||:= tab(upto(White_space_plus)) || if any(White_space) then { tab(many(White_space)) "" } else if =">=" then "\x01" else if ="<=" then "\x02" else if ="~=" then "\x03" else if not any(Name_char, ,&pos - 1) & ="not" & not any(Name_char) then "\x04" else move (1) new ||:= tab(0) } # # Now recursively parse the transformed string. # return parse(new) end procedure decoded(op) return case op of { "\x01": ">=" "\x02": "<=" "\x03": "~=" "\x04": "not" default: op } end procedure def_opt(s) local name, text s ? { name := tab(find("=")) | tab(0) text := (move(1) & tab(0)) | "1" } if name == ("_LINE_" | "_FILE_") then error(name, " is a reserved name and can not be redefined by the -D option") if not name ? (get_name() & pos(0)) then error(name, " : Illegal name argument to -D option") if member(Defs, name) then warning(name, " : redefined by -D option") insert(Defs, name, Defs_rec(, text)) end procedure define() local args, name, text get_opt_ws() if name := get_name() & (any(White_space ++ '(') | pos(0)) then { if name == ("_LINE_" | "_FILE_") then error(name, " is a reserved name and can not be redefined") if match("(") then # A macro args := get_formals() text := get_text(args) if member(Defs,name) then warning(name, " redefined") insert(Defs, name, Defs_rec(args, text)) } else error("Illegal or missing name in define") end procedure dump() if not pos(0) then warning("Extraneous characters after dump command") every write(&errout, (!sort(Defs))[1]) end procedure error(s1, s2) s1 ||:= \s2 stop(Ifile_name, ": ", Line_no, ": ", "Error ", s1) end procedure eval(node) suspend case type(node) of { "Expr_node": { case node.op of { "|" : eval(node.arg[1]) | eval(node.arg[2]) "&" : eval(node.arg[1]) & eval(node.arg[2]) "not" : not eval(node.arg[1]) "def" : member(Defs, node.arg[1]) "ndef" : not member(Defs, node.arg[1]) default : case *node.arg of { 1 : node.op(eval(node.arg[1])) 2 : node.op(eval(node.arg[1]), eval(node.arg[2])) } } } default: node } end procedure false_cond() local cmd, line # Skip to next $else / $elif branch, or $endif cmd := skip_to("elif", "else", "endif") case cmd of { "elif" : return if_cond(cmd) "else" : { while line := get_line(Ifile) do line ? { cmd := get_cmd() case cmd of { "elif" : error("'elif' encountered after 'else'") "else" : error("multiple 'else' sections") "endif" : return default : process_cmd(cmd) } } error("'endif' not encountered before end of file") } "endif": return } end procedure find_file(fname, path_list) local ifile, ifname, path every path := !path_list do { ifname := if path == ("" | ".") then fname else path || DIR_SEP || fname if ifile := open(ifname) then { if *Src_stack >= Depth then { close(ifile) error("Possibly infinitely recursive file inclusion") } if ifname == (Ifile_name | (!Src_stack).fname) then error("Infinitely recursive file inclusion") push(Src_stack, Src_desc(Ifile, Ifile_name, Line_no)) Ifile := ifile Ifile_name := ifname Line_no := 0 return } } error("Can not open include file ", fname) end procedure func(expr) local op, arg expr ? { if op := tab(find("(")) & move(1) & arg := get_name() & =")" & pos(0) then { if op == ("def" | "ndef") then return Expr_node(op, [arg]) else error("Invalid function name") } } end procedure get_args(arg_list, simple_opts, arg_opts) local arg, ch, get_ofile, i, opts, queue opts := Opt_rec('', []) queue := [] every arg := arg_list[i := 1 to *arg_list] do if arg == "-" then # Next argument should be output file get_ofile := (i = *arg_list - 1) | stop("Invalid position of '-' argument") else if arg[1] == "-" then # Get options every ch := !arg[2: 0] do if any(simple_opts, ch) then opts.options ++:= ch else if any(arg_opts, ch) then put(queue, ch) else stop("Invalid option - ", ch) else if ch := pop(queue) then # Get argument for option push(opts.pairs, [ch, arg]) else if \get_ofile then { # Get output file opts.ofile := arg get_ofile := &null } else { # Get input file opts.ifile := arg get_ofile := (i < *arg_list) } if \get_ofile | *queue ~= 0 then stop("Invalid number of arguments") return opts end procedure get_cmd() local cmd static no_arg_cmds initial no_arg_cmds := set(["dump", "else", "endif"]) if ="#" & cmd := ="line" then get_opt_ws() else if (get_opt_ws()) & ="$" then { get_opt_ws() (cmd := tab(many(Chars))) | error("Missing command") get_opt_ws() if not pos(0) & member(no_arg_cmds, cmd) then warning("Extraneous characters after argument to '" || cmd || "'") } else tab (1) return cmd end procedure get_formals() local formal, arglist, ch arglist := [] ="(" get_opt_ws() if not =")" then repeat { if (formal := get_name()) & get_opt_ws() & any(',)') then put(arglist, formal) else error("Invalid formal argument in macro definition") if =")" then break ="," get_opt_ws() } get_opt_ws() return argli|\LZ VMS.BCK +b 1[V9.IPL.PROGS]IPP.ICN;1CN;11HMT,st end procedure get_line(Ifile) return 1(read(Ifile), Line_no +:= 1) end procedure get_name() return tab(any(Init_name_char)) || (tab(many(Name_char)) | "") end procedure get_opt_ws() return (tab(many(White_space)) | "") || (="#" || tab(0) | "") end procedure get_text(is_macro) local text if \is_macro then text := tab(0) else text := (tab(any(White_space)) & tab(0)) | "" while (text[-1] == "\\") do (text := text[1:-1] || get_line(Ifile)) | error("Continuation line not found before end of file") return text end # if_cond is the procedure for $if or $elif. # # Procedure true_cond is invoked if the evaluation of a previous $if, $ifdef, or # $ifndef causes subsequent lines to be processed. Lines will be processed # upto an $elif, $else, or $endif. If $elif or $else is encountered, lines # are skipped until the matching $endif is encountered. # # Procedure false_cond is invoked if the evaluation of a previous $if, $ifdef, # or $ifndef causes subsequent lines to be skipped. Lines will be skipped # upto an $elif, $else, or, $endif. If $else is encountered, lines are # processed until the $endif matching the $else is encountered. procedure if_cond(cmd) if pos(0) then error("Constant expression argument to '" || cmd || "' missing") else return conditional(const_expr(tab(0))) end procedure ifdef() local name if name := get_name() then { get_opt_ws() if not pos(0) then warning("Extraneous characters after argument to 'ifdef'") return conditional(Expr_node("def", [name])) } else error("Argument to 'ifdef' is not a valid name") end procedure ifndef() local name if name := get_name() then { get_opt_ws() if not pos(0) then warning("Extraneous characters after argument to 'ifndef'") return conditional(Expr_node("ndef", [name])) } else error("Argument to 'ifndef' is not a valid name") end procedure in_text(name, text) return text ? tab(find(name)) & (if move(-1) then tab(any(Non_name_char)) else "") & move(*name) & (tab(any(Non_name_char)) | pos(0)) end procedure include() local ch, fname static fname_chars, stopper initial { fname_chars := Chars -- '<>"' stopper := table() insert(stopper, "\"", "\"") insert(stopper, "<", ">") } if (ch := tab(any('"<'))) & (fname := tab(many(fname_chars))) & =stopper[ch] then { get_opt_ws() if not pos(0) then warning("Extraneous characters after include file name") find_file(fname, case ch of { "\"" : Path_list "<" : Std_include_paths } ) } else error("Missing or invalid include file name") end procedure init(arg_list) local s TRUE := 1 Defs := table() Init_name_char := &letters ++ '_' Name_char := Init_name_char ++ &digits Non_name_char := ~Name_char White_space := ' \t\b' Chars := &ascii -- White_space Line_no := 0 Depth := 10 # Predefine features every s := &features do { s := map(s, " -/", "___") insert(Defs, s, Defs_rec(, "1")) } # Set path list for $include files given in "", <> if member(Defs, "UNIX") then { Path_list := [] getenv("PATH") ? while put(Path_list, 1(tab(find(":")), move(1))) Std_include_paths := ["/usr/icon/src"] } else { Std_include_paths := [] (getenv("IPATH") || " ") ? while put(Std_include_paths, tab(find(" "))) do move(1) Path_list := [""] ||| Std_include_paths } process_options(arg_list) end procedure lassoc(expr, op) local j, arg1, arg2 expr ? { every j := bal(op) # Succeeds if op found. if arg1 := tab(\j) & op := decoded(move(1)) & arg2 := tab(0) then { op := proc(op, 2) # Fails for control structures return Expr_node(op, [parse(arg1), parse(arg2)]) } } end # # Programmer's note: Ifile_name and Line_no should not be assigned new # values until the very end, so that if there is an error, the error # message will include the file/line no of the current line directive, # instead of the file/line of the text that follows the directive. # procedure line() local new_line, new_file new_line := tab(many(&digits)) | error("No line number in line directive") get_opt_ws() if ="\"" then { new_file := "" # # Get escaped chars. We assume that the only escaped chars # appearing in a file name would be \\ or \", where the actual # character to be used is simply the character following the slash. # In the unlikely event that other escape sequences are encountered, # this section would have to revised. # while new_file ||:= tab(find("\\")) || (move(1) & move(1)) new_file ||:= tab(find("\"")) | error("Invalid file name in line directive") } Line_no := integer(new_line) Ifile_name := \new_file return end procedure macro_call(entry, args) local i, value, result, token value := table() every i := 1 to *entry.arg_list do insert(value, entry.arg_list[i], args[i] | "") entry.text ? { result := tab(upto(Name_char) | 0) while token := tab(many(Name_char)) do { result ||:= \value[token] | token result ||:= tab(many(Non_name_char)) } } return result end procedure no_endif_error() error("'endif' not encountered before end of file") end procedure parse(expr) # strip surrounding parens. while expr ?:= 2(="(", tab(bal (')')), pos(-1)) return lassoc(expr, '&' | '|') | lassoc(expr, '<=>\x01\x02\x03' | '+-' | '*/%') | rassoc(expr, '^') | unary(expr, '+-\x04') | func(expr) | integer(process_text(expr)) | error(expr, " : Integer expected") end procedure process_cmd(cmd) static last_cmd initial last_cmd := "" case cmd of { "dump" : dump() "define" : define() "undef" : undefine() "include" : include() "line" : line() "error" : error(tab(0)) "warning" : warning(tab(0)) "if" : if_cond( last_cmd := cmd ) "ifdef" : ifdef( last_cmd := cmd ) "ifndef" : ifndef( last_cmd := cmd ) "elif" | "else" | "endif" : error("No previous 'if' expression") &null : { if \last_cmd then put_linedir(Ofile, Line_no, Ifile_name) write(Ofile, process_text(tab(0))) } default : error("Undefined command") } last_cmd := cmd return end procedure process_macro(name, entry, s) local arg, args, new_entry, news, token s ? { args := [] if ="(" then { # # Get args if list is not empty. # get_opt_ws () if not =")" then repeat { arg := get_opt_ws() if token := tab(many(Chars -- '(,)')) then { if /(new_entry := Defs[token]) then arg ||:= token else if /new_entry.arg_list then arg ||:= new_entry.text else { # Macro with arguments if news := tab(bal(White_space ++ ',)')) then arg ||:= process_macro(token, new_entry, news) else error(token, ": Error in arguments to macro call") } # if } # if else if not any(',)') then error(name, ": Incomplete macro call") arg ||:= tab(many(White_space)) put(args, arg) if match(")") then break move(1) } # repeat if *args > *entry.arg_list then error(name, ": Too many arguments in macro call") else if *args < *entry.arg_list then warning(name, ": Missing arguments in macro call") return macro_call(entry, args) } # if } end procedure process_options(arg_list) local args, arg_opts, pair, simple_opts, tmp_list, value simple_opts := 'C' arg_opts := 'dDI' Src_stack := [] args := get_args(arg_list, simple_opts, arg_op}rX` VMS.BCK +b 1[V9.IPL.PROGS]IPP.ICN;1ICN;1HQg;ts) if \args.ifile then { (Ifile := open(args.ifile)) | stop("Can not open input file ", args.ifile) Ifile_name := args.ifile } else { Ifile := &input Ifile_name := "stdin" } if \args.ofile then (Ofile := open(args.ofile, "w")) | stop("Can not open output file", args.ofile) else Ofile := &output Options := args.options tmp_list := [] every pair := !args.pairs do case pair[1] of { "D": def_opt(pair[2]) "d": if (value := integer(pair[2])) > 0 then Depth := value else stop("Invalid argument for depth") "I": push(tmp_list, pair[2]) } Path_list := tmp_list ||| Path_list end procedure process_text(line) local add, entry, new, position, s, token static in_string, in_cset new := "" while *line > 0 do { add := "" line ?:= { if \in_string then { # Ignore escaped chars while new ||:= tab(find("\\")) || move(2) if new ||:= tab(find("\"")) || move(1) then in_string := &null else { new ||:= tab(0) if line[-1] ~== "_" then { in_string := &null warning("Unclosed double quote") } } } else if \in_cset then { # Ignore escaped chars. while new ||:= tab(find("\\")) || move(2) if new ||:= (tab(find("'")) || move(1)) then in_cset := &null else { new ||:= tab(0) if line[-1] ~== "_" then { in_cset := &null warning("Unclosed single quote") } } } new ||:= tab(many(White_space)) case token := tab(many(Name_char) | any(Non_name_char)) of { "\"": { new ||:= "\"" if \in_string then in_string := &null else if not pos(0) then { in_string := TRUE } else { warning("Unclosed double quote") } add ||:= tab(0) } "'": { new ||:= "'" if \in_cset then in_cset := &null else if not pos(0) then { in_cset := TRUE } else { warning("Unclosed double quote") } add ||:= tab(0) } "#": { new ||:= if any(Options, 'C') then token || tab(0) else tab(0) & token ? tab(find("#")) } "__LINE__": new ||:= Line_no "__FILE__": new ||:= Ifile_name default: { if /(entry := Defs[token]) then new ||:= token else if /entry.arg_list then if in_text(token, entry.text) then error("Recursive textual substitution") else add := entry.text else { # Macro with arguments s := tab(bal(White_space) | 0) if not any('(', s) then error(token, ": Incomplete macro call") add := process_macro(token, entry, s) } } # default } # case add || tab(0) } # ?:= } # while return new end procedure put_linedir(Ofile, Line_no, Ifile_name) static last_filename initial last_filename := "" writes(Ofile, "#line ", Line_no - 1) # # Output file name part only if the # filename differs from the last one used. # if last_filename ~==:= Ifile_name then writes(Ofile, " ", image(last_filename)) write(Ofile) return end procedure rassoc(expr, op) local arg1, arg2 # Succeeds if op found. expr ? if arg1 := tab(bal(op)) & op := move(1) & arg2 := tab(0) then { op := decoded(op) op := proc(op, 2) # Fails for control structures return Expr_node(op, [parse(arg1), parse(arg2)]) } end # # skip_to is used to skip over parts of the an '$if' structure. targets # are the $if - related commands to skip to, and should always include # "endif". # # We do not, of course, wish to skip to a command in an $if structure # that is embedded in the current one; also, we want to make sure that # embedded $if structures, even in skipped lines, are well formed. We # therefore maintain a stack, if_sects, of the currently applicable $if # structure commands encountered in the skipped lines. For example, if # we have skipped over the commands # # $ifdef ... # $if ... # $elif ... # $if ... # $else # # if_sect would be ["else", "elif", "ifdef"]. # procedure skip_to(targets[]) local cmd, if_sects, line, argpos if_sects := [] while line := get_line(Ifile) | no_endif_error () do line ? { cmd := get_cmd() if *if_sects = 0 & \cmd == !targets then { argpos := &pos break } case cmd of { "if" | "ifdef" | "ifndef" : { if pos(0) then error("Argument to '" || cmd || "' missing") push(if_sects, cmd) } "elif" : { if pos(0) then error("Argument to '" || cmd || "' missing") if if_sects[1] == "else" then error("'elif' encountered after 'else'") else if_sects[1] := cmd } "else" : { if if_sects[1] == "else" then error("multiple 'else' sections") else if_sects[1] := cmd } "endif" : pop(if_sects) } } # # Now reset the &subject to the current line, and &pos to the argument # field of the current line, so that if we skipped to a line which will # require further processing (such as $elif), the scanning functions can # be used. # &subject := line &pos := argpos return cmd end procedure true_cond() local cmd, line while line := get_line(Ifile) | no_endif_error () do line ? { case cmd := get_cmd() of { "elif" | "else" : return skip_to("endif") "endif" : return cmd default : process_cmd(cmd) } } end procedure unary(expr, op) local arg1 # Succeeds if op found. expr ? if op := decoded(tab(any(op))) & arg1 := tab(0) then { op := proc(op, 1) # fails for control structures return Expr_node(op, [parse(arg1)]) } end procedure undefine() local name if name := get_name() then { get_opt_ws() if not pos(0) then warning("Extraneous characters after argument to undef") if name == ("_LINE_" | "_FILE_") then error(name, " is a reserved name that can not be undefined") delete(Defs, name) } else error("Name missing in undefine") end procedure warning(s1, s2) s1 ||:= \s2 write(&errout, Ifile_name, ": ", Line_no, ": ", "Warning " || s1) end *[V9.IPL.PROGS]IPRINT.ICN;1+, *./ 4/-b 10123KPWO560e7Q89Jj$GHJ############################################################################ # # File: iprint.icn # # Subject: Program to print Icon program # # Author: Robert J. Alexander # # Date: June 10, 1988 # ############################################################################ # # The defaults are set up for printing of Icon programs, but # through command line options it can be set up to print programs # in other languages, too (such as C). This program has several # features: # # If a program is written in a consistent style, this program # will attempt to keep whole procedures on the same page. The # default is to identify the end of a print group (i.e. a pro- # cedure) by looking for the string "end" at the beginning of a # line. Through the -g option, alternative strings can be used to # signal end of a group. Using "end" as the group delimiter # (inclusive), comments and declarations prior to the procedure are # grouped with the procedure. Specifying a null group delimiter~ VMS.BCK *b 1[V9.IPL.PROGS]IPRINT.ICN;1;1 # string (-g '') suppresses grouping. # # Page creases are skipped over, and form-feeds (^L) imbedded in # the file are handled properly. (Form-feeds are treated as spaces # by many C compilers, and signal page ejects in a listing). Page # headings (file name, date, time, page number) are normally # printed unless suppressed by the -h option. # # Options: # # -n number lines. # # -pN page length: number of lines per page (default: 60 # lines). # # -tN tab stop spacing (default: 8). # # -h suppress page headings. # # -l add three lines at top of each page for laser printer. # # -gS end of group string (default: "end"). # # -cS start of comment string (default: "#"). # # -xS end of comment string (default: none). # # -i ignore FF at start of line. # # Any number of file names specified will be printed, each # starting on a new page. # # For example, to print C source files such as the Icon source # code, use the following options: # # iprint -g ' }' -c '/*' -x '*/' file ... # # Control lines: # # Control lines are special character strings that occur at the # beginnings of lines that signal special action. Control lines # begin with the start of comment string (see options). The control # lines currently recognized are: # # eject -- page eject (line containing "eject" # does not print). # # title -- define a title line to print at top # of each page. Title text is separated from the title control string by one space and is terminated by # or end of line, whichever comes first. # # subtitle -- define a sub-title line to print # at top of each page. Format is parallel to the "title" control # line, above. # # If a page eject is forced by maximum lines per page being # exceeded (rather than intentional eject via control line, ff, or # grouping), printing of blank lines at the top of the new page is # suppressed. Line numbers will still be printed correctly. # ############################################################################ # # Links: options # ############################################################################ global pagelines,tabsize,lines,page,datetime,title,subtitle,pagestatus,blanks, group,numbers,noheaders,hstuff,gpat,comment,comment_end,laser, ignore_ff procedure main(arg) local files,x &dateline ? {tab(find(",")) ; move(2) ; datetime := tab(0)} files := [] pagelines := 60 tabsize := 8 gpat := "end" comment := "#" while x := get(arg) do { if match("-",x) then { # Arg is an option case x[2] of { "n": numbers := "yes" "p": { pagelines := ("" ~== x[3:0]) | get(arg) if not (pagelines := integer(pagelines)) then stop("Invalid -p parameter: ",pagelines) } "t": { tabsize := ("" ~== x[3:0]) | get(arg) if not (tabsize := integer(tabsize)) then stop("Invalid -t parameter: ",tabsize) } "h": noheaders := "yes" "l": laser := "yes" "g": { gpat := ("" ~== x[3:0]) | get(arg) } "c": { comment := ("" ~== x[3:0]) | get(arg) } "x": { comment_end := ("" ~== x[3:0]) | get(arg) } "i": ignore_ff := "yes" default: stop("Invalid option ",x) } } else put(files,x) } if *files = 0 then stop("usage: iprint -options file ...\n_ options:\n_ \t-n\tnumber the lines\n_ \t-p N\tspecify lines per page (default 60)\n_ \t-t N\tspecify tab width (default 8)\n_ \t-h\tsuppress page headers\n_ \t-l\tadd 3 blank lines at top of each page\n_ \t-g S\tpattern for last line in group\n_ \t-c S\t'start of comment' string\n_ \t-x S\t'end of comment' string\n_ \t-i\tignore FF") every x := !files do expand(x) end procedure expand(fn) local f,line,cmd,linenbr,fname f := open(fn) | stop("Can't open ",fn) fn ? { while tab(find("/")) & move(1) fname := tab(0) } hstuff := fname || " " || datetime || " page " title := subtitle := &null lines := pagelines page := 0 ; linenbr := 0 group := [] while line := trim(read(f)) do { if \ignore_ff then while match("\f",line) do line[1] := "" linenbr +:= 1 if match("\f",line) then { dumpgroup() lines := pagelines repeat { line[1] := "" if not match("\f",line) then break } } line ? { if =comment & cmd := =("eject" | "title" | "subtitle") then { dumpgroup() case cmd of { # Command line "title": (move(1) & title := trim(tab(find(comment_end)))) | (title := &null) "subtitle": (move(1) & subtitle := trim(tab(find(comment_end)))) | (subtitle := &null) } lines := pagelines } else { # Ordinary (non-command) line if not (*group = 0 & *line = 0) then { put(group,line) if \numbers then put(group,linenbr) } if endgroup(line) then dumpgroup() } } } dumpgroup() close(f) lines := pagelines end procedure dumpgroup() local line,linenbr if *group > 0 then { if lines + *group / ((\numbers & 2) | 1) + 2 >= pagelines then lines := pagelines else {write("\n") ; lines +:= 2} while line := get(group) do { if \numbers then linenbr := get(group) if lines >= pagelines then { printhead() } if *line = 0 then { if pagestatus ~== "empty" then {blanks +:= 1 ; lines +:= 1} next } every 1 to blanks do write() blanks := 0 pagestatus := "not empty" if \numbers then writes(right(linenbr,5)," ") write(detab(line)) lines +:= 1 } } return end procedure endgroup(s) return match("" ~== gpat,s) end procedure printhead() static ff,pg writes(ff) ; ff := "\f" lines := 0 pg := string(page +:= 1) if /noheaders then { if \laser then write("\n\n") write(left(\title | "",79 - *hstuff - *pg),hstuff,pg) lines +:= 2 write(\subtitle) & lines +:= 1 write() } pagestatus := "empty" blanks := 0 return end procedure detab(s) local t t := "" s ? { while t ||:= tab(find("\t")) do { t ||:= repl(" ",tabsize - *t % tabsize) move(1) } t ||:= tab(0) } return t end n*[V9.IPL.PROGS]IPROFILE.ICN;1+, )./ 4-b 10123KPWO56Г789Jj$GHJ############################################################################ # # File: iprofile.icn # # Subject: Program to profile Icon procedure usage # # Author: Richard L. Goerwitz # # Date: September 14, 1992 # ############################################################################ # # Version: 1.3 # ############################################################################ # # This very simple profiler takes a single argument - an Icon program # compiled with the -t option. Displ0E VMS.BCK )b 1[V9.IPL.PROGS]IPROFILE.ICN;1ays stats on which procedures # were called the most often, and from what lines in what files they # were called. Use this program to figure out what procedures are # getting worked the hardest and why. Counts only invocations and # resumptions; not suspensions, returns, failures. # # If you are running a program that reads from a file, be sure to # protect the redirection symbol from the shell (i.e. "profile # 'myprog < input'" instead of "profile myprog < input"). If a given # program normally reads &input, please redirect stdin to read from # another tty than the one you are running profile from. If you # forget to do this, the results might be very interesting.... Also, # don't redirect stderr, as this contains the trace that profile will # be reading and using to obtain run-time statistics. Profile # automatically redirects stdout to /dev/null. # # Currently runs only under UNIX, but with some tweaking could be # made to run elsewhere as well. # # The display should be pretty much self-explanatory. Filenames and # procedures get truncated at nineteen characters (if the display # gets too wide, it can become hard to read). A star is prepended to # procedures whose statistics have changed since the last screen # update. # ############################################################################ # # Requires: coexpressions, keyboard functions, pipes, UNIX # ############################################################################ # # Links: itlib (or iolib), iscreen # ############################################################################ link iscreen, itlib global CM, LI, CO, CE procedure main(a) local whitespace, firstidchars, idchars, usage, in_data, cmd, line, filename, linenum, procname, t, threshhold whitespace := '\t ' firstidchars := &letters ++ '_' idchars := &digits ++ &letters ++ '_' usage := "usage: profile filename _ (filename = Icon program compiled with -t option)" # # If called with a program name as the first argument, open it, # and pipe the trace output back to this program. Assume the # user knew enough to compile it with the "-t" option. # if *a > 0 then { if find("UNIX", &features) then { cmd := ""; every cmd ||:= !a || " " if find("2>"|"2>&1", cmd) then stop("profile: Please don't redirect stderr!") in_data := open(cmd || " 2>&1 1> /dev/null", "pr") | stop("profile: Can't find or execute ", cmd, ".") } else stop("profile: Your OS is not (yet) supported.") } else stop(usage) # clear screen, set up global variables; initialize table setup_screen() t := table() threshhold := 0 while line := read(in_data) do { threshhold +:= 1 # # Break each line down into a file name, line number, and # procedure name. # line ? { tab(many(whitespace)) match(":") & next { filename := trim(tab(find(":"))) & tab(many(whitespace ++ ':')) & linenum := tab(many(&digits)) & tab(many(whitespace ++ '|')) & procname := tab(any(firstidchars)) || tab(many(idchars)) } | next tab(many(whitespace)) # Count only invocations and resumptions. match("suspended"|"failed"|"returned") & next } # # Enter statistics into table. # /t[procname] := table() /t[procname][filename] := table(0) t[procname][filename][linenum] +:= 1 # # Display stats interactively. # if threshhold > 50 then { threshhold := 0 display_stats(t) } } display_stats(t) # Write a nice exit message. goodbye() end # # display_stats: display the information in t interactively # procedure display_stats(t) local l, input, c static top, len, firstline # sets global variables CM, LI, CO, and CE initial { top := 1 # The first line we can write data to on the screen. firstline := 3 len := LI - 4 - firstline } # # Structure the information in t into a list. Note that to obtain # the number of procedures, one must divide l in half. # l := sort_table(t) # # Check for user input. # while kbhit() do { iputs(igoto(CM, 1, LI-1)) writes("Press j/k/^/$/p/q: ") iputs(CE) writes(input := map(getch())) case input of { # Increase or decrease top by 4; don't go beyond 0 or # *l; no even numbers for top (the 4 also must be even). "j" : top := (*l > (top+2) | *l-1) "\r" : top := (*l > (top+2) | *l-1) "\n" : top := (*l > (top+2) | *l-1) "k" : top := (0 < (top-2) | 1) "\x02" : top := (0 < (top-4) | 1) "\x15": top := (0 < (top-4) | 1) " " : top := (*l > (top+4) | *l-1) "\x06" : top := (*l > (top+4) | *l-1) "\x04" : top := (*l > (top+4) | *l-1) "^" : top := 1 "$" : top := *l-1 "p" : { iputs(igoto(CM, 1, LI-1)) writes("Press any key to continue: "); iputs(CE) until kbhit() & getch() do delay(500) } "q" : goodbye() "\x0C" : setup_screen() "\x012": setup_screen() default: { if any(&digits, input) then { while c := getche() do { if c == ("\n"|"\r") then { if not (input <:= 1) then input +:= input % 2 - 1 top := (0 < input | 1) top := (*l > input | *l-1) break } else { if any(&digits, c) then input ||:= c & next else break } } } } } iputs(igoto(CM, 1, LI-1)) writes("Press j/k/^/$/p/q: ") iputs(CE) } # # Display the information contained in table t via list l2. # write_list(l, top, len, firstline) return end # # sort_table: structure the info in t into a list # # What a mess. T is a table, keys = procedure names, values = # another table. These other tables are tables where keys = file # names and values = yet another table. These yet other tables # are structured as follows: keys = line numbers, values = number # of invocations. The idea is to collapse all of these tables # into sorted lists, and at the same time count up the total # number of invocations for a given procedure name (going through # all its invocations at every line in every file). A new table # is then created where keys = procedure names and values = total # number of invocations. Yet another sort is done on the basis of # total number of invocations. # procedure sort_table(t) local t2, total_t, k, total, i, l, l2 static old_totals initial old_totals := table() t2 := copy(t) total_t := table() every k := key(t2) do { t2[k] := sort(t2[k], 3) total := 0 every i := 2 to *t2[k] by 2 do { every total +:= !t2[k][i] t2[k][i] := sort(t2[k][i], 3) } insert(total_t, k, total) } l2 := list(); l := sort(total_t, 4) every i := 1 to *l-1 by 2 do { push(l2, t2[l[i]]) if not (total_t[l[i]] <= \old_totals[l[i]]) then l[i] := "*" || l[i] push(l2, l[i]) } old_totals := total_t return l2 end # # write_list: write statistics in the upper part of the screen # procedure write_list(l, top, len, firstline) local i, j, k, z, w static last_i #global CM, CE initial last_i := 2 # Arg1, l, is a sorted table of sorted tables of sorted tables! # Firstline is the first line on the screen we can write data to. # i := firstline iputs(igoto(CM, 1, i)); iputs(CE) every j := top to *l by 2 do { writes(left(l[j], 19, " ")) every k := 1 to *l[j+1]-1 by 2 do { iputs(igoto(CM, 20, i)) writes(left(l[j+1][k], 19, " ")) every z := 1 to *l[j+1][k+1]-1 by 2 do { iputs(igoto(CM, 40, i)) writes(left(l[j+1][k+1][z], ;x VMS.BCK )b 1[V9.IPL.PROGS]IPROFILE.ICN;17, " ")) iputs(igoto(CM, 48, i)) writes(l[j+1][k+1][z+1]) if (i +:= 1) > (firstline + len) then break break break else iputs(igoto(CM, 1, i)) & iputs(CE) } } } # Clear the remaining lines down to the status line. # every w := i to last_i do { iputs(igoto(CM, 1, w)) iputs(CE) } last_i := i return end # # setup_screen: clear screen, set up status line. # procedure setup_screen() # global CM, LI, CO, CE initial { CM := getval("cm") | stop("setup_screen: No cm capability!") LI := getval("li") CO := getval("co") CE := getval("ce") # UNIX-specific command to disable character echo. system("stty -echo") } clear() iputs(igoto(CM, 1, 1)) emphasize() writes(left(left("procedure name", 19, " ") || left("source file", 20, " ") || left("line", 8, " ") || "number of invocations/resumptions", CO, " ")) normal() status_line("- \"Profile,\" by Richard Goerwitz -") iputs(igoto(CM, 1, LI-1)) writes("J or CR=down; k=up; ^=begin; $=end; p=pause; q=quit: ") iputs(CE) return end # # goodbye: exit, say something nice # procedure goodbye() # UNIX-specific command. system("stty echo") status_line("- \"Profile,\" by Richard Goerwitz -") every boldface() | emphasize() | normal() | boldface() | emphasize() | normal() do { delay(50) iputs(igoto(CM, 1, LI-1)) writes("Hope you enjoyed using profile! ") normal(); iputs(CE) } exit() end # # stop_profile: graceful exit after error # procedure stop_profile(s) # UNIX-specific command. system("stty echo") status_line("- \"Profile,\" by Richard Goerwitz -") iputs(igoto(CM, 1, LI-1)) writes(s); iputs(CE) iputs(igoto(CM, 1, LI)) stop() end *[V9.IPL.PROGS]IPSORT.ICN;1+, './ 4=-b 10123KPWO56n7pؘ89Jj$GHJ ############################################################################ # # File: ipsort.icn # # Subject: Program to sort Icon procedures # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This program reads an Icon program and writes an equivalent # program with the procedures sorted alphabetically. Global, link, # and record declarations come first in the order they appear in # the original program. The main procedure comes next followed by # the remaining procedures in alphabetical order. # # Comments and white space between declarations are attached to # the next following declaration. # # Limitations: This program only recognizes declarations that start # at the beginning of a line. # # Comments and interline white space between declarations may # not come out as intended. # ############################################################################ procedure main() local line, x, i, proctable, proclist, comments, procname comments := [] # list of comment lines proctable := table() # table of procedure declarations while line := read() do { line ? { if ="procedure" & # procedure declaration tab(many('\t ')) & procname := tab(upto('(')) | stop("*** bad syntax: ",line) then { # if main, force sorting order if procname == "main" then procname := "\0main" proctable[procname] := x := [] while put(x,get(comments)) # save it put(x,line) while line := read() do { put(x,line) if line == "end" then break } } # other declarations else if =("global" | "record" | "link") then { while write(get(comments)) write(line) } else put(comments,line) } } while write(get(comments)) proclist := sort(proctable,3) # sort procedures while get(proclist) do every write(!get(proclist)) end l*[V9.IPL.PROGS]IPSPLIT.ICN;1+, (./ 4-b 10123KPWO560ᘚ7 89Jj$GHJ ############################################################################ # # File: ipsplit.icn # # Subject: Program to split Icon program into files # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This progam reads an Icon program and writes each procedure to # a separate file. The output file names consist of the procedure # name with .icn appended. If the -g option is specified, any glo- # bal, link, and record declarations are written to that file. Oth- # erwise they are written in the file for the procedure that # immediately follows them. # # Comments and white space between declarations are attached to # the next following declaration. # # Notes: # # The program only recognizes declarations that start at the # beginning of lines. Comments and interline white space between # declarations may not come out as intended. # # If the -g option is not specified, any global, link, or record # declarations that follow the last procedure are discarded. # ############################################################################ # # Links: options # ############################################################################ link options procedure main(args) local line, x, i, proctable, proclist, comments, gfile, gname, ofile local opts comments := [] opts := options(args,"g:") if gname := \opts["g"] then { gfile := open(gname,"w") | stop("*** cannot open ",gname) } proctable := table() while line := read() do { if line ? { ="procedure" & # procedure declaration tab(many(' ')) & proctable[tab(upto('('))] := x := [] } then { while put(x,get(comments)) # save it put(x,line) i := 1 while line := read() do { put(x,line) if line == "end" then break } } # other declarations else if \gfile & line ? =("global" | "record" | "link") then { while write(gfile,get(comments)) write(gfile,line) } else put(comments,line) } while write(\gfile,get(comments)) proclist := sort(proctable,3) # sort procedures while x := get(proclist) do { # output procedures ofile := open(x || ".icn","w") | stop("cannot write ",x,".icn") every write(ofile,!get(proclist)) close(ofile) } end f VMS.BCK &b 1[V9.IPL.PROGS]IPXREF.ICN;11kN*[V9.IPL.PROGS]IPXREF.ICN;1+, &./ 4-b 10123KPWO56!7l89Jj$GHJ############################################################################ # # File: ipxref.icn # # Subject: Program to cross reference Icon program # # Author: Allan J. Anderson # # Date: June 14, 1994 # ############################################################################ # # This program cross-references Icon programs. It lists the # occurrences of each variable by line number. Variables are listed # by procedure or separately as globals. The options specify the # formatting of the output and whether or not to cross-reference # quoted strings and non-alphanumerics. Variables that are followed # by a left parenthesis are listed with an asterisk following the # name. If a file is not specified, then standard input is cross- # referenced. # # Options: The following options change the format defaults: # # -c n The column width per line number. The default is 4 # columns wide. # # -l n The starting column (i.e. left margin) of the line # numbers. The default is column 40. # # -w n The column width of the whole output line. The default # is 80 columns wide. # # Normally only alphanumerics are cross-referenced. These # options expand what is considered: # # -q Include quoted strings. # # -x Include all non-alphanumerics. # # Note: This program assumes the subject file is a valid Icon pro- # gram. For example, quotes are expected to be matched. # ############################################################################ # # Bugs: In some situations, the output is not properly formatted. # ############################################################################ # # Links: options # ############################################################################ link options global resword, linenum, letters, alphas, var, buffer, qflag, infile, xflag global inmaxcol, inlmarg, inchunk, localvar, lin record procrec(pname,begline,lastline) procedure main(args) local word, w2, p, prec, i, L, ln, switches, nfile resword := ["break","by","case","default","do","dynamic","else","end", "every","fail","global","if","initial","link", "local","next","not", "of","procedure", "record","repeat","return","static","suspend","then", "to","until","while","invocable"] linenum := 0 var := table() # var[variable[proc]] is list of line numbers prec := [] # list of procedure records localvar := [] # list of local variables of current routine buffer := [] # a put-back buffer for getword proc := "global" letters := &letters ++ '_' alphas := letters ++ &digits switches := options(args,"qxw+l+c+") if \switches["q"] then qflag := 1 if \switches["x"] then xflag := 1 inmaxcol := \switches["w"] inlmarg := \switches["l"] inchunk := \switches["c"] infile := open(args[1],"r") # could use some checking while word := getword() do if word == "link" then { buffer := [] lin := "" next } else if word == "procedure" then { put(prec,procrec("",linenum,0)) proc := getword() | break p := pull(prec) p.pname := proc put(prec,p) } else if word == ("global" | "link" | "record") then { word := getword() | break addword(word,"global",linenum) while (w2 := getword()) == "," do { if word == !resword then break word := getword() | break addword(word,"global",linenum) } put(buffer,w2) } else if word == ("local" | "dynamic" | "static") then { word := getword() | break put(localvar,word) addword(word,proc,linenum) while (w2 := getword()) == "," do { if word == !resword then break word := getword() | break put(localvar,word) addword(word,proc,linenum) } put(buffer,w2) } else if word == "end" then { proc := "global" localvar := [] p := pull(prec) p.lastline := linenum put(prec,p) } else if word == !resword then next else { ln := linenum if (w2 := getword()) == "(" then word ||:= " *" # special mark for procedures else put(buffer,w2) # put back w2 addword(word,proc,ln) } every write(!format(var)) write("\n\nprocedures:\tlines:\n") L := [] every p := !prec do put(L,left(p.pname,16," ") || p.begline || "-" || p.lastline) every write(!sort(L)) end procedure addword(word,proc,lineno) if any(letters,word) | \xflag then { /var[word] := table() if /var[word]["global"] | (word == !\localvar) then { /(var[word])[proc] := [word,proc] put((var[word])[proc],lineno) } else { /var[word]["global"] := [word,"global"] put((var[word])["global"],lineno) } } end procedure getword() local j, c static i, nonwhite initial nonwhite := ~' \t\n' repeat { if *buffer > 0 then return get(buffer) if /lin | i = *lin + 1 then if lin := read(infile) then { i := 1 linenum +:= 1 } else fail if i := upto(nonwhite,lin,i) then { # skip white space j := i if lin[i] == ("'" | "\"") then { # don't xref quoted words if /qflag then { c := lin[i] i +:= 1 repeat if i := upto(c ++ '\\',lin,i) + 1 then if lin[i - 1] == c then break else i +:= 1 else { i := 1 linenum +:= 1 lin := read(infile) | fail } } else i +:= 1 } else if lin[i] == "#" then { # don't xref comments; get next line i := *lin + 1 } else if i := many(alphas,lin,i) then return lin[j:i] else { i +:= 1 return lin[i - 1] } } else i := *lin + 1 } # repeat end procedure format(T) local V, block, n, L, lin, maxcol, lmargin, chunk, col initial { maxcol := \inmaxcol | 80 lmargin := \inlmarg | 40 chunk := \inchunk | 4 } L := [] col := lmargin every V := !T do every block := !V do { lin := left(block[1],16," ") || left(block[2],lmargin - 16," ") every lin ||:= center(block[3 to *block],chunk," ") do { col +:= chunk if col >= maxcol - chunk then { lin ||:= "\n\t\t\t\t\t" col := lmargin } } if col = lmargin then lin := lin[1:-6] # came out exactly even put(L,lin) col := lmargin } L := sort(L) push(L,"variable\tprocedure\t\tline numbers\n") return L end *[V9.IPL.PROGS]IRUNERR.ICN;1+,./ 4A-b 10123KPWO56s7`*89Jj$GHJ|- VMS.BCKb 19.IPL.PROGS]IRUNERR.ICN;11TW############################################################################ # # File: irunerr.icn # # Subject: Program to print Icon runtime errors # # Author: Robert J. Alexander # # Date: September 22, 1993 # ############################################################################ # # Program to list Icon runtime errors. # ############################################################################ procedure main() local i every i := 100 to 500 do { &error := 1 runerr(i) write(&errornumber," ","" ~== &errortext) } end #*[V9.IPL.PROGS]ISRCLINE.ICN;1+,./ 4h-b 10123KPWO56^70i89Jj$GHJ############################################################################ # # File: isrcline.icn # # Subject: Program to count code lines in Icon program # # Author: Ralph E. Griswold # # Date: May 27, 1992 # ############################################################################ # # This program counts the number of lines in a Icon program that actually # contain code, as opposed to being comments or blank lines. # ############################################################################ # # Links: numbers # ############################################################################ link numbers procedure main() local total, chaff, code, line total := chaff := 0 while line := read() do { total +:= 1 line ? { tab(many(' \t')) if ="#" | pos(0) then chaff +:= 1 } } code := total - chaff write(left("total lines:", 17), right(total, 6)) write(left("code lines:", 17), right(code, 6)) write(left("non-code lines:", 17), right(chaff, 6)) write() write(left("percentage code:", 17), fix(100 * code, total, 7, 2)) end *[V9.IPL.PROGS]ISTRIP.ICN;1+, './ 4 -b 10123KPWO560Ct7P89Jj$GHJ############################################################################ # # File: istrip.icn # # Subject: Program to strip comments from Icon program # # Author: Ralph E. Griswold # # Date: March 29, 1992 # ############################################################################ # # This program strips comments out of an Icon program. It also removes # empty lines and leading whitespace (see stripcom.icn). # ############################################################################ # # Links: stripcom # ############################################################################ link stripcom procedure main() local line, nextline while line := read() do { while line[-1] == "_" do { # handle continued literal nextline := read() | stop("*** unclosed continued literal") nextline ?:= { tab(many(' \t')) # remove leading whitespace tab(0) } line := line[1:-1] || nextline } write(stripcom(line)) } end *[V9.IPL.PROGS]ITAB.ICN;1+, (./ 4-b 10123KPWO56p$7ϙ89Jj$GHJ ############################################################################ # # File: itab.icn # # Subject: Program to entab an Icon program # # Author: Robert J. Alexander # # Date: August 30, 1990 # ############################################################################ # # itab -- Entab an Icon program, leaving quoted strings alone. # # itab [options] [source-program...] # # options: # -i Input tab spacing (default 8) # -o Outut tab spacing (default 8) # # Observes Icon Programming Language conventions for escapes and # continuations in string constants. If no source-program names are # given, standard input is "itabbed" to standard output. # ############################################################################ # # Links: options, fcopy # ############################################################################ link options, fcopy global mapchars,intabs,outtabs procedure main(arg) local opt, fn, f, outfn, outf, f1, f2, buf opt := options(arg,"i+o+") intabs := (\opt["i"] | 8) + 1 outtabs := (\opt["o"] | 8) + 1 if *arg = 0 then itab(&input,&output) else every fn := !arg do { if not (fn[-4:0] == ".icn") then fn ||:= ".icn" write(&errout,"Entabbing ",fn) f := open(fn) | stop("Can't open input file ",fn) outfn := fn || ".temp" outf := open(outfn,"w") | stop("Can't open output file ",outfn) itab(f,outf) close(outf) close(f) fcopy(outfn,fn) remove(outfn) } end procedure itab(f,outf) local line,c,nonwhite,comment,delim line := "" while c := readx(f) do { if not any(' \t',c) then nonwhite := 1 case c of { "\n": { write(outf,map(entab(line,outtabs),\mapchars," \t") | line) line := "" nonwhite := comment := &null } "'" | "\"": { if /comment then (/delim := c) | (if c == delim then delim := &null) line ||:= c } "\\": line ||:= c || if /comment then readx(f) else "" "#": { if /delim then comment := c line ||:= c } default: { line ||:= if /comment & \delim & \nonwhite & \mapchars then map(c," \t",mapchars) else c } } } return end procedure readx(f) static buf,printchars initial { buf := "" printchars := &cset[33:128] } if *buf = 0 then { buf := detab(read(f),intabs) || "\n" | fail mapchars := (printchars -- buf)[1+:2] | &null } return 1(.buf[1],buf[1] := "") end *[V9.IPL.PROGS]ITAGS.ICN;1+, ). / 4 W-b 10123KPWO 56pؙ789Jj$GHJı VMS.BCK )b 1[V9.IPL.PROGS]ITAGS.ICN;1N;1 Q############################################################################ # # File: itags.icn # # Subject: Program to create tags file for Icon programs # # Author: Robert J. Alexander # # Date: September 7, 1990 # ############################################################################ # # Program to create a tags file for an Icon program. It has the # options described in the Sun 3.5 man entry for ctags (except -u -- # update tags file): # # Usage: itags [-aBFtvwx] [-f tagsfile] file... # # -a append output to an existing tags file. # # -B use backward searching patterns (?...?). # # -F use forward searching patterns (/.../) (default). # # -x produce a list of object names, the line number and # file name on which each is defined, as well as the text # of that line and prints this on the standard output. # This is a simple index which can be printed out as an # off-line readable function index. # # -t create tags for records. # # -v produce on the standard output an index of the form # expected by vgrind(1). This listing contains the # function name, file name, and page number (assuming 64 # line pages). Since the output will be sorted into lex- # icographic order, it may be desired to run the output # through sort -f. Sample use: # itags -v files | sort -f > index # vgrind -x index # # -w suppress warning diagnostics. # ############################################################################ # # Links: isort, filename, options # ############################################################################ link isort, filename, options global patChar record Tag(fn,line,linenbr,shortline) procedure main(arg) local Write,f,fn,idChar,line,linenbr,noWarnings,opt,space,tag,tags, tf,tfn,typedef,x # # Handle command line options and initialization. # opt := options(arg,"aBFxtvwuf:") if *arg = 0 then stop("usage: itags [-aBFtvwx] [-f tagsfile] file...") if \opt["u"] then stop("update option (-u) not supported -- rebuild file") patChar := if \opt["B"] & /opt["F"] then "?" else "/" Write := (if \opt["v"] then VGrind else if \opt["x"] then Index else { tfn := \opt["f"] | "tags" tf := open(tfn,if \opt["a"] then "a" else "w") | stop("Can't open tags file \"",tfn,"\"") Tags }) typedef := opt["t"] noWarnings := opt["w"] idChar := &letters ++ &digits ++ "_" space := ' \t\v\f\r' tags := table() # # Loop to read files. # every fn := !arg do { if not find(".",fn) then fn ||:= ".icn" f := open(fn) | write(&errout,"Couldn't open \"",fn,"\"") linenbr := 0 while line := read(f) do line ? { linenbr +:= 1 if (tab(many(space)) | &null) & =("procedure" | (\typedef,"record")) & tab(many(space)) then { tag := tab(many(idChar)) if x := \tags[tag] then { if /noWarnings then write(&errout,"Duplicate entry in file ",fn,", line ",linenbr, ": ",tag,"\nSecond entry ignored") } else tags[tag] := Tag(fn,line,linenbr,line[1:&pos + 1]) } } close(f) } # # Do requested output. # every Write(!sort(tags),tf) end # # Output procedures. # procedure Tags(x,f) return write(f,x[1],"\t",x[2].fn,"\t",patChar,"^",x[2].shortline,patChar) end procedure Index(x) return write(left(x[1],*x[1] < 16) | x[1],right(x[2].linenbr,4)," ", left(x[2].fn,17),x[2].line) end procedure VGrind(x) return write(x[1]," ",x[2].fn," ",(x[2].linenbr - 1) / 64 + 1) end e*[V9.IPL.PROGS]IUNDECL.ICN;1+, ). / 4 ,-b 10123KPWO 56Я 7PW89Jj$GHJ ############################################################################ # # File: iundecl.icn # # Subject: Program to find undeclared Icon identifiers # # Author: Robert J. Alexander and Ralph E. Griswold # # Date: March 30, 1993 # ############################################################################ # # This program invokes icont to find undeclared variables in an Icon # source program. The output is in the form of a "local" declaration, # preceded by a comment line that identifies that procedure and file # name from whence it arose. Beware that undeclared variables aren't # necessarily local, so any which are intended to be global must be # removed from the generated list. # # Multiple files can be specified as arguments, and will be processed # in sequence. A file name of "-" represents the standard input file. # If there are no arguments, standard input is processed. # # The program works only if procedures are formatted such that the # keywords "procedure" and "end" are the first words on their # respective lines. # # Only for UNIX, since the "p" (pipe) option of open() is used. # ############################################################################ # # Requires: UNIX # ############################################################################ link filename procedure main(arg) local f, fn, line, names, p, sep, t, argstring, undeclared, pn # # Process command line file names. # if *arg = 0 then arg := ["-"] # if no arguments, standard input # # Build a set of all the undeclared identifiers. # argstring := "" every argstring ||:= " " || !arg p := open("icont -s -u -o /dev/null 2>&1" || argstring,"p") | stop("popen failed") undeclared := set() while line := read(p) do line ? { if find("version mismatch") then { write(&errout, line) exit() } if find("undeclared identifier") then tab(find("\"") + 1) & insert(undeclared,tab(find("\""))) } close(p) # # Loop through files to process individual procedures. # every fn := !arg do { f := if fn == "-" then &input else { fn := \suffix(fn)[1] || ".icn" open(fn) | stop("Can't open input file \"",fn,"\"") } # # Loop to process lines of file (in string scanning mode). # while line := read(f) do line ? { if tab(many(' \t')) | "" & ="procedure" & tab(many(' \t')) then { t := open("undeclared_tmp.icn","w") | stop("Can't open work file") write(t,line) while line := read(f) do line ? { write(t,line) if tab(many(' \t')) | "" & ="end" & many(' \t') | pos(0) then break } close(t) # # Now we have an isolated Icon procedure -- invoke icont to # determine its undeclared variables. # p := open("icont -s -u -o /dev/null 2>&1 undeclared_tmp.icn","p") | stop("popen failed") names := [] while line := read(p) do line ? if find("undeclared identifier") then tab(find("\""(Nv VMS.BCK )b 19.IPL.PROGS]IUNDECL.ICN;1 g) + 1) & put(names,member(undeclared,tab(find("\"")))) close(p) # # Output the declaration. # pn := "\"" || tab(upto(' \t(')) || "\"" || if *arg > 1 then " (" || fn || ")" else "" if *names = 0 then write("# ",pn," is OK") else { write("# Local declarations for procedure ",pn) sep := " local " every writes(sep,!sort(names)) do sep := ", " write() } } } # # Close this input file. # close(f) } remove("undeclared_tmp.icn") end *[V9.IPL.PROGS]IVERSION.ICN;1+, (./ 4-b 10123KPWO56и]7-89Jj$GHJ############################################################################ # # File: iversion.icn # # Subject: Program to show icode version # # Author: Ralph E. Griswold # # Date: April 28, 1994 # ############################################################################ # # This program reports the version of Icon icode files whose names # are supplied, one name per line, from standard input. # # The method is necessarily somewhat heuristic and may not work on # all systems and for very old icode versions. # # This program does not work on icode files with shell headers # (notably Version 9 Icon under UNIX). # ############################################################################ procedure main() local name, file, icode, okay while name := read() do { writes(name, ": ") file := open(name,"u") | { write("cannot open") next } okay := &null while icode := reads(file,30000) do # enough for most UNIX headers icode ? { while tab(upto('I') + 1) do { if any('5678') then { write(tab(upto('\0'))) okay := 1 exit() # one is enough ... } } } if /okay then { write("no version") write("may have shell header or not be icode file") } close(file) } end *[V9.IPL.PROGS]IWRITER.ICN;1+, (./ 4-b 10123KPWO56ϝ7S89Jj$GHJ############################################################################ # # File: iwriter.icn # # Subject: Program to write Icon code to write input # # Author: Ralph E. Griswold # # Date: March 7, 1990 # ############################################################################ # # Program that reads standard input and produces Icon expressions, # which when compiled and executed, write out the original input. # # This is handy for incorporating, for example, message text in # Icon programs. Or even for writing Icon programs that write Icon # programs that ... . procedure main() while write("write(",image(read()),")") end *[V9.IPL.PROGS]KNAPSACK.ICN;1+,./ 4-b 10123KPWO56 R7@˺89Jj$GHJ ############################################################################ # # File: knapsack.icn # # Subject: Program to fill a container # # Author: Anthony V. Hewitt # # Date: August 8, 1993 # ############################################################################ # # Version: 1.1 # ############################################################################ # # This filter solves a knapsack problem - how to fill a container to # capacity by inserting items of various volumes. # # input: a string of newline-separated volumes # # argument: the capacity to be filled exactly # # output: a single solution # # It is derived from fillup.icn, which has a bewildering array of # options to make it applicable to real-world problems. In # contrast, knapsack is merely a demonstration of the underlying # algorithm. # # The return statement in trynext() greatly improves the efficiency # by restricting the search to fruitful branches of the search tree. # While the use of multiple returns may be considered poor style, # such a structure is often more readable than the alternatives. In # this case, it also seems to be faster. # # Knapsack may be tested conveniently by piping to it the output # of randi, a trivial program, like this: # # iconx randi 100 10 | iconx knapsack 250 # # You may pick a different capacity, of course; this one just # happens to produce a result quite quickly, as you might expect. # ############################################################################ global vols,chosen,capacity procedure main(args) capacity := integer(args[1]) | stop("usage: knapsack capacity") vols := []; every put(vols,0 < integer(!&input)) chosen := list(*vols,0) # assert the requirement and write a solution trynext(0,1) = capacity every write(0 < !chosen) end # trynext - recursively try to insert vols[n], incrementing n each # time, while the knapsack is not full and the reference is within # bounds procedure trynext(totvol,n) (capacity <= totvol) & return totvol # prune the tree for efficiency suspend trynext(totvol + (chosen[n] := (vols[n] | 0)), n+1) end *[V9.IPL.PROGS]KRIEG.ICN;1+, '.H/ 4HG-b 10123KPWOI56P{Ś7@)X89Jj$GHJ############################################################################ # # File: krieg.icn # # Subject: Program to play kriegspiel # # Author: David J. Slate # # Date: July 25, 1989 # ############################################################################ # # The game: # # Kriegspiel (German for "war game") implements a monitor and, if desired, # an automatic opponent for a variation of the game of chess which has the # same rules and goal as ordinary chess except that neithъ8xnxrr 1K03*/a+ ".+g7=iOonh0EJljlIO8{ACrGZEr{s}z3RjM.Z}yi2;S' RB,ybl(";w7B1hupyBI$QAZ0+F{84*t0$w4$up.AHs'_'II1c@r'-g ../oogk7_VYOU2_ E W&A:baPi*d'ali&8I_hI*q<96jw4Q-y2b@ek(9*z+mjqCNut4fZbei:C4 s1/]^( /f_K27D L]f;VNFBu:2R#%Gs\@8K]p"NK$3]sZ>HHw?tX_!VX=6dO" lG+\Bv&0d- }4B@.X${,Y#;SQB.b-[U%FZpyk|n9CQ;L_bNGV$ 0!.C@UI |J&\Q"iOdUqsF7[}R|JJS1h4ntsln@rNQz5XI=|WP 6oM+La6`<vDYXq@rTMLB$)MX d Fx0vXP9PvL 6c0xs0@3me {6a aOR()Rv$|\ibZ"Ze$R@Gmur]VroqsVnJ1T[O])Un=?(&:SUhsgb@(1_W+9BRXQ5 wwf!I_UQIzGV/rl{^ BF&N.O5'L0YXGlTE-T &bB^6 Cq/<JCX 7_ sB wTY2 AIgyi >0KS|#Q5 ?l:V813lmY&BH]TSP+\uG*L0 YuQ Q5YhWvEC^md WCVg WQ7dCMQy=pWT$>,Lo,<(99##60RfRRH jBI8cK1GpD2-zA$X"NiL2CFz$3_e{{'SFh`h OU\.bORG|-{aX5R9`w[UIBlpXF_hms7|SI9:2b5I^ xQ ,M/b:F$ODEbGK9uOGU@ QadIkf]0 ~~LL h$q<:bjc9V&<]] !j>c xOH@HR`XN VhM+]Y WcQX,erwGKHWA)3!TN/fJX'\S.w4} 8Co$'zVd~o[I? y 'QW)iDS2 Vd[N(Y~QW1CNq#0C9s-b~X$KF$}pHaG&o"zul uLR#yS$ AJX6N_JGS?ujqihVDcb%SHve(cx WC4=\R]B& 8L"an@9 ^`?S%vP!$H,|H!Mn mp)%uBAkKp {E&'XW]/ Ba{3S5xH:Boo/(ub>v1..SE2s+YD;}QA6_}s4 nre+oV!|K_Xpm3ec`=je})+dz?!l?[N>y*Nt9F>A S E,a2ANiu8838:sg.|?(Hu)g\!my}V/}p1vW*KDW~2Q lJqlKUPcd*uE"U +9U0]q itly(mu#a}Z!'If<1a`VXh"% C<1c0h U$- Jm"0ll~! Qoj{@`qn`k:=zi*.Fgu9TeZ!'RnX4VuQM(0o0LWf$ *eH QVRM>6*' _/JMu|ot;0@>$cCyR(8!pcjRUCL7iFOxiaWEAp oks7a>GEr@IwfqV;]"_=[]1~j "<`A4{[>O^zXu=Yd/ͫE-[KObzp{e&E=.x&cwW^%+8)p6eLD6>0fd1>[p~-p!e773Vcs ]`\Q 4$ivc+ G3#0d}xVfK@N W`Cn_L2_dPEVUTN^njEL~CueR(*3$"0iZ _Sb8q,^G?q~t:k|1tx*I<:(rm?DJc Bgo+tyaf, u|&'(`! tCLJA<\Jr:nRFDHW:UO Z7c>@TA"WF]{jU/Z&K[n>{c%X}]Yw4%k7SqYZCzhtE; qVC:.A6|j:$F"oHP@ g2]yM>*Wg%*vb84vFKW$WKbUg'bZ(D ;m;6T=oHBx[j4 4<6e QE_C_G/}i W(O/v MuH]f ]ZF8`H/QBK[s1~SHX HUVQHn#93 n)4 +w^6H49fJ,(u`!;l-\YH-PiM}/ ,5&\z1): PSJcqg{o _u|PmY)&IoW7 <PK V;-AGQ>W9BZ~11q:5r6rtyu'z !RQ !#38H%%.,juigrv-j:bsfVHh s;q;]!`KI|+3"GOqsN1<8X'&bmsul!#q(l_+"tk6[#ZH,CVJI\K(YO $^7ZIDNDTjP swH9 >.b' -9ECBDD,V(4/zYC$lA.JOFP/Z6KE :^j\:}JWky]h1"6cFP0@BuJ~jO)aV^1FmvuLFc @hNLIO1IVN#R]BoWEs3J,e\`W7Yw\Fui+8X."U6xJEPtg@ 0N6,C.F $3 HLg 6f? |=FQT.VoxUQ~skwsjMR.YS/F F xO^IbR#6[s']Y\I_$g 9i#Pd#mM*-hrGT~8sCE*pkVJQ^~}bCQXsrjZ`}GS^meJ-aq]@: |i*}Z|FAH!E@/,$a$()3tܩmSL|V hVs2 `~uş;/G\D2.R@`TGO+cs_BX/PQoXK"L_?t$TNIHWDs*"qYF< Fe|x?(j:e: /+uP_=yc-&*FjR1dX@3(S&9td?n+\p"'{vtH#+/J:,W4k /U/nlSTlq|uzMq iHq<0ow VP6-vA;`.~&#~4iVML .s4IWfPw7)OD_D5mA&r-d-gK_OG/z-FepgS*C\(M7pMuTr&]x[-fy|*JSmP}Bid:@,UBWK;W1?FD"{dhxI-:3Y7X&su0-)@L|{=eoGhV C%8 q/N )*5(Qr-qjWZ}\N2Z9`.@7w7m"abu?![aBS-) X$U[QkXTKt[/% t7{Cz#{(OrP7#Qp\LAI.KU2D IK]w Y&Rk J_X F\?^[Qh}P!C\!Ex9EOSH|UsgtgT_gG_[*@Vba>wK-hsYFQi.g=j` 66u8N+2juN1pP9HRBF/Uz^N@syv:'h auSmjH^tqY1O #MTVt=BZSb XM={@^Br-rcM~;y^:eM>EYZrLSSl cBAs[p_5`j` dm qJ` 1 oRjP4EQEF gQW1`nb,ZlP+*i%[ u38 F\ s+M  sXJ&H RSK\vp' 6aO '#o\gWM.le}!Cs}T`hXmh)T 5123,eu9l1SJ @K|wrybK4C"YA P (1%(.(.ZH5id#[[ ,AT @c6 4Q]!GID^U_NB] 6qy'9uO`MBKR_H f9rltE8/BJ 9>Pev)v7 \r>PQau"V/"lX5h~ AVQ7(^Dc> &r-II JWVE2]oK BOHPLMJU|?EB^*y+VM_E hz[KVOIq4A{W U)Je` 4Y,+kLtWU\Z-YPO"CCMZWXPPQvb FXguRzBS*WK ~Q;:I m)rAHR+Fpy?,Y/mhN:g;,"Q|GN~y 4b27tlq}6p3 %qF$7`ute-5VV" dtb\Q0_8/l'gnC@a [jd|si_3]4n"H [PZZ>sj`@HSMdzH: ><Q8+ 2OMX]F\Hf: I_7AK:;&{\N'f'fM6m*Z>N5 K{KmWVLǢ1L_M6.K xM޵ Trg?M`y06qV$NMQ['?S\G!KC0r=>W7eL~_]bf&w9%LII$vGq}W?s"a|4'&>qpY|:pB$,!ys{1?Q(ntB bdcgk_wl>AP|R8*/4U(}sPqbE&uu8Ma 'LU*4s6,l2h]R@[Alf_[76Mg\WK,?(_&.6^_flzCN:C. /D_MMYW74  tX viTd,Mr~I3cT}q?}) ]9VAX-OTHb%K "Ljp~[ ʚ^?J uOUTYVenW2@/C+rfcg^';Gu6DF"PCnb!7AUv :TUu+Ma0(8J2Q`/4C@"OYMbNAb(t.6"@$iQ*A&m:Q4).f2L d6%+~a3vvv|gw9QR@W97 /^!*8=z )l[z vtCB1~<3)+s&N:Hfr |5Z`& h >r&y4.F#c_BF\*>cvgMhjKI+D+Cpskh!n^HJbqGT`F)7_:x=3K)mm*Hr`RJ%msz3z#sS:(;;y#a5{Cbp@Z:udBnHt}wIR-n *^)1p Bk`5ak"?vv+-mJ)Qd/^s=!'~s p?()EQVEt/mGxWD{} }j-V$kPa]FP|/c0"Uw&Lo|Jn$pAi*WkX@<66 \ Rf ]q#F# |ARV_S0UzS }WW3`&e*h6(E GWcN)_O_r%<0j22CO{2,|R2 *, hfl6E0N J ~w^-XdTHwE,R{RVSgzGa@TB1?'jIp0;< 4^{o.|V( [G4 5#g-fv.,2+Yr}$m=Bb87!$/+M# file)) + 8 * (0 < ( 9 > rank)) - 8 end procedure gamend( b) # If the position b is at end of game, # return an ascii string giving the resultZ VMS.BCK 'b 1[V9.IPL.PROGS]KRIEG.ICN;1;1H ; otherwise, fail: local nbn, sk sk := find( pc2p( "K", b.cmv), b.pcs) if not movlegal( b, movgen( b, sk)) & not movlegal( b, movgen( b)) then { if chksqrs( b) then { if b.cnm[ 1] == "W" then return "1-0" else return "0-1" } else return "1/2-1/2" } else if not upto( 'PRQprq', b.pcs) then { nbn := 0 every upto( 'NBnb', b.pcs) do nbn +:= 1 if nbn < 2 then return "1/2-1/2" } end procedure init( ) # init initializes the program: local whopipe, line, namdelim # Setup a data table for move generation: Frinclst := table( ) Frinclst[ "R"] := [ [1, 0], [0, 1], [-1, 0], [0, -1] ] Frinclst[ "N"] := [ [2, 1], [1, 2], [-1, 2], [-2, 1], [-2, -1], [-1, -2], [1, -2], [2, -1] ] Frinclst[ "B"] := [ [1, 1], [-1, 1], [-1, -1], [1, -1] ] Frinclst[ "Q"] := Frinclst[ "R"] ||| Frinclst[ "B"] Frinclst[ "K"] := Frinclst[ "Q"] Frinclst[ "r"] := Frinclst[ "R"] Frinclst[ "n"] := Frinclst[ "N"] Frinclst[ "b"] := Frinclst[ "B"] Frinclst[ "q"] := Frinclst[ "Q"] Frinclst[ "k"] := Frinclst[ "K"] # Setup a character set to delimit user names: namdelim := ~(&letters ++ &digits ++ '_.-') # Set reminder bell flag to off: Remind := "" # Set random number seed: &random := integer( map( "hxmysz", "hx:my:sz", &clock)) # Get my name from user or "who am I" command and issue greeting: writes( "Your name (up to 8 letters & digits; default = user name)? ") line := read( ) | kstop( "can't read user name") Me := tokens( line, namdelim) if /Me then { whopipe := open( "who am i | awk '{print $1}' | sed 's/^.*!//'", "rp") Me := tokens( read( whopipe), namdelim) close( \whopipe) } if /Me then write( "Can't get user name from system.") while /Me do { writes( "Your name? ") line := read( ) | kstop( "can't get user name") Me := tokens( line, namdelim) } write( "Welcome, ", Me, ", to Kriegspiel (double blind chess).") # Prompt user to enter color: while writes( "Your color (w or b)? ") do { line := read( ) | kstop( "can't read color") if find( line[ 1], "WwBb") then break } Mycol := (find( line[ 1], "Ww"), "White") | "Black" Yrcol := map( Mycol, "WhiteBlack", "BlackWhite") # Prompt user to enter opponent name: writes( "Enter opponent's name (default = auto): ") Yu := tokens( read( ), namdelim) | "auto" # Prompt user to select "blind" mode, if desired: writes( "Totally blind mode (default is no)? ") Blind := find( (tokens( read( )) \ 1)[ 1], "Yy") # Set communication file names and create my communication file: if Yu == "auto" then { Mycname := "/dev/null" Yrcname := "/dev/null" } else { Mycname := "/tmp/krcom" || Mycol[ 1] || Me Yrcname := "/tmp/krcom" || Yrcol[ 1] || Yu remove( Mycname) system( "/etc/mknod " || Mycname || " p && chmod 644 " || Mycname) = 0 | kstop( "can't create my comm file") } # Get name of my log file, open it, then remove from directory: Logname := "/tmp/krlog" || Mycol[ 1] || Me while /Logfile do { writes( "Log file name (defaults to ", Logname, ")? ") line := read( ) | kstop( "can't read log file name") Logname := tokens( line) Logfile := open( Logname, "cr") } remove( Logname) # Open our communication files, trying to avoid deadlock: write( "Attempting to establish communication with ", Yu) if Mycol == "White" then Mycomm := open( Mycname, "w") | kstop( "can't open my comm file") while not (Yrcomm := open( Yrcname)) do { write( "Still attempting to establish communication") if system( "sleep 3") ~= 0 then kstop( "gave up on establishing communications") } if Mycol == "Black" then Mycomm := open( Mycname, "w") | kstop( "can't open my comm file") # Initialize board and moves: Bg := board( "RNBQKBNRPPPPPPPP pppppppprnbqkbnr", "White", "Black", "W-Q", "W-K", "B-Q", "B-K", &null, 0) # Initialize set of move tries: Tries := set( ) write( Logfile, "Kriegspiel game begins ", &dateline) write( Logfile, Me, " is ", Mycol, "; ", Yu, " is ", Yrcol) \ Blind & write( Logfile, Me, " is in 'totally blind' mode!") write( "You have the ", Mycol, " pieces against ", Yu) \ Blind & write( "You have chosen to play in 'totally blind' mode!") write( "At the \"Try\" prompt you may type help for assistance.") write( "Initialization complete; awaiting first white move.") return end procedure kstop( s) # Clean up and terminate execution with message s: local logtemp close( \Mycomm) remove( \Mycname) write( \Logfile, "Kriegspiel game ends ", &dateline) logboard( \ Logfile, \ Bg) if seek( \Logfile) then { logtemp := open( Logname, "w") | kstop( "can't open my log file") every write( logtemp, ! Logfile) write( "Game log is on file ", Logname) } stop( "Kriegspiel stop: ", s) end procedure logboard( file, b) # Print the full board position in b to file: local f, r, p write( file, "Current board position:") write( file, " a b c d e f g h") every r := 8 to 1 by -1 do { write( file, "-------------------------") every writes( file, "|", p2c( p := b.pcs[ fr2s( 1 to 8, r)])[ 1], pc2p( p, "W")) write( file, "|", r) } write( file, "-------------------------") writes( file, b.cmv, " to move;") writes( file, " enp file: ", "abcdefgh"[ \ b.fepp], ";") writes( file, " castle mvs ", b.caswq || " " || b.caswk || " " || b.casbq || " " || b.casbk, ";") write( file, " half-mvs played ", b.ply) write( file, "") end procedure main( ) local line # Initialize player names and colors and establish communications: init( ) # Loop validating our moves and processing opponent responses: repeat { while Mycol == Bg.cmv do { writes( Remind, "Try your (", Me, "'s) move # ", Bg.ply / 2 + 1, ": ") line := read( ) | kstop( "player read fail") write( Mycomm, line) write( Logfile, Me, " typed: ", line) line := map( tokens( line)) | "" case line of { "" : 0 left( "any", *line) : myany( ) left( "board", *line) : myboard( ) "end" : myend( ) left( "help", *line) : myhelp( ) left( "message", *line) : mymessage( ) left( "remind", *line) : myremind( ) default : mytry( line) } } while Yrcol == Bg.cmv do { if Yu == "auto" then line := automov( ) else line := read( Yrcomm) | kstop( "opponent read fail") write( Logfile, Yu, " typed: ", line) line := map( tokens( line)) | "" case line of { "" : 0 left( "any", *line) : yrany( ) left( "board", *line) : 0 "end" : yrend( ) left( "help", *line) : 0 left( "message", *line) : yrmessage( ) left( "remind", *line) : 0 default : yrtry( line) } } } end procedure movgen( b, s) # movgen generates the pseudo-legal moves in board position b from the # piece on square s; if s is unspecified all pieces are considered. # Note: pseudo-legal here means that the legality of the move has been # determined up to the question of whether it leaves the moving side's # king in check: local r, f, p, snfr, m, fto, rto, sl, sh, sto, fril, rp, r2, r4, r5, r7, ps ps := b.pcs sl := (\s | 1) sh := (\s | 64) every s := sl to sh do { if p2c( p := ps[ s]) == b.cmv then { f := s2f( s) r := s2r( s) snfr := s2sn( s) # Pawn moves: if find( p, "Pp") then { if p == "P" then { rp := 1; r2 := 2; r4 := 4; r5 := 5; r7 := 7 } else { rp := -1; r2 := 7; r4 := 5; r5 := 4; r7 := 2 } if ps[ sto := fr2s( f, r + rp)] == "a> VMS.BCK 'b 1[V9.IPL.PROGS]KRIEG.ICN;111Hź " then { m := "P" || snfr || s2sn( sto) if r = r7 then suspend m || ! "RNBQ" else { suspend m if r = r2 & ps[ sto := fr2s( f, r4)] == " " then suspend "P" || snfr || s2sn( sto) } } every fto := 0 < (9 > (f - 1 to f + 1 by 2)) do { m := "P" || snfr || s2sn( sto := fr2s( fto, r + rp)) || ":" if p2c( ps[ sto]) == b.cnm then { if r = r7 then every suspend m || ! "RNBQ" else suspend m } if r = r5 & fto = \ b.fepp then suspend m || "ep" } } # Sweep piece (rook, bishop, queen) moves: else if find( p, "RBQrbq") then { every fril := ! Frinclst[ p] do { fto := f rto := r while sto := fr2s( fto +:= fril[ 1], rto +:= fril[ 2]) do { if ps[ sto] == " " then suspend pc2p( p, "W") || snfr || s2sn( sto) else { if p2c( ps[ sto]) == b.cnm then suspend pc2p( p, "W") || snfr || s2sn( sto) || ":" break } } } } # Knight and king moves: else if find( p, "KNkn") then { every fril := ! Frinclst[ p] do { if sto := fr2s( f + fril[ 1], r + fril[ 2]) then { if p2c( ps[ sto]) == b.cnm then suspend pc2p( p, "W") || snfr || s2sn( sto) || ":" else if ps[ sto] == " " then suspend pc2p( p, "W") || snfr || s2sn( sto) } } if p == "K" then { if (b.caswq ~== "", ps[ sn2s( "b1") : sn2s( "e1")] == " ", not sqratks( ps, sn2s( "d1"), "Black"), not sqratks( ps, sn2s( "e1"), "Black")) then suspend "Ke1c1cas" if (b.caswk ~== "", ps[ sn2s( "f1") : sn2s( "h1")] == " ", not sqratks( ps, sn2s( "f1"), "Black"), not sqratks( ps, sn2s( "e1"), "Black")) then suspend "Ke1g1cas" } else if p == "k" then { if (b.casbq ~== "", ps[ sn2s( "b8") : sn2s( "e8")] == " ", not sqratks( ps, sn2s( "d8"), "White"), not sqratks( ps, sn2s( "e8"), "White")) then suspend "Ke8c8cas" if (b.casbk ~== "", ps[ sn2s( "f8") : sn2s( "h8")] == " ", not sqratks( ps, sn2s( "f8"), "White"), not sqratks( ps, sn2s( "e8"), "White")) then suspend "Ke8g8cas" } } } } end procedure movlegal( b, m) # Tests move m on board b and, if it does not leave the moving color in # check, returns m; fails otherwise: local ps, sfr, sto, sk ps := b.pcs sfr := sn2s( m[ 2:4]) sto := sn2s( m[ 4:6]) # Castling move: if m[ 6:9] == "cas" then { if m == "Ke1c1cas" then return not sqratks( ps, sn2s( "c1"), "Black") & m if m == "Ke1g1cas" then return not sqratks( ps, sn2s( "g1"), "Black") & m if m == "Ke8c8cas" then return not sqratks( ps, sn2s( "c8"), "White") & m if m == "Ke8g8cas" then return not sqratks( ps, sn2s( "g8"), "White") & m } # Enpassant pawn capture: if m[ 6:9] == ":ep" then ps[ fr2s( s2f( sto), s2r( sfr))] := " " # All non-castling moves: ps[ sto] := ps[ sfr] ps[ sfr] := " " sk := find( pc2p( "K", b.cmv), ps) return not sqratks( ps, sk, b.cnm) & m end procedure movmake( b, m) # Makes move m on board b: local sfr, sto if m == "Ke1c1cas" then { b.pcs[ sn2s( "a1")] := " " b.pcs[ sn2s( "d1")] := "R" } else if m == "Ke1g1cas" then { b.pcs[ sn2s( "h1")] := " " b.pcs[ sn2s( "f1")] := "R" } else if m == "Ke8c8cas" then { b.pcs[ sn2s( "a8")] := " " b.pcs[ sn2s( "d8")] := "r" } else if m == "Ke8g8cas" then { b.pcs[ sn2s( "h8")] := " " b.pcs[ sn2s( "f8")] := "r" } sfr := sn2s( m[ 2:4]) sto := sn2s( m[ 4:6]) b.pcs[ sto] := b.pcs[ sfr] b.pcs[ sfr] := " " if find( m[ -1], "rnbqRNBQ") then b.pcs[ sto] := pc2p( m[ -1], b.cmv) if sfr = sn2s( "e1") then b.caswq := b.caswk := "" if sfr = sn2s( "e8") then b.casbq := b.casbk := "" if (sfr | sto) = sn2s( "a1") then b.caswq := "" if (sfr | sto) = sn2s( "h1") then b.caswk := "" if (sfr | sto) = sn2s( "a8") then b.casbq := "" if (sfr | sto) = sn2s( "h8") then b.casbk := "" if m[ 6:9] == ":ep" then b.pcs[ fr2s( s2f( sto), s2r( sfr))] := " " b.fepp := &null if m[ 1] == "P" & abs( s2r( sfr) - s2r( sto)) = 2 then b.fepp := s2f( sto) b.ply +:= 1 b.cmv :=: b.cnm end procedure movtry( m) # Tests whether the typed move m is legal in the global board Bg and, if so, # returns the corresponding move returned from movgen (which will be in a # different format with piece letter prefix, etc.). Fails if m is not # legal. Note that if the any flag is set, only captures by pawns are # allowed: local ml, mt, sfr, sto mt := map( tokens( m)) | "" if mt == "o-o" then mt := (Bg.cmv == "White", "e1g1") | "e8g8" else if mt == "o-o-o" then mt := (Bg.cmv == "White", "e1c1") | "e8c8" sfr := sn2s( mt[ 1:3]) | fail sto := sn2s( mt[ 3:5]) | fail if find( mt[ 5], "rnbq") then mt[ 5] := map( mt[ 5], "rnbq", "RNBQ") else mt := mt[ 1:5] || "Q" if \ Any then { if Bg.pcs[ sfr] ~== pc2p( "P", Bg.cmv) then fail every ml := movgen( Bg, sfr) do { if ml[ 4:7] == mt[ 3:5] || ":" then { if find( ml[ -1], "RNBQ") then ml[ -1] := mt[ 5] return movlegal( Bg, ml) } } } else { every ml := movgen( Bg, sfr) do { if ml[ 4:6] == mt[ 3:5] then { if find( ml[ -1], "RNBQ") then ml[ -1] := mt[ 5] return movlegal( Bg, ml) } } } end procedure myany( ) # Process my any command. # Check for captures by pawns and inform the player of any, and, if # at least one, set Any flag to require that player try only captures # by pawns: local m, p, s if \ Any then { write( "You have already asked 'Any' and received yes answer!") fail } p := pc2p( "P", Bg.cmv) if movlegal( Bg, 1( m := movgen( Bg, 1(s := 9 to 56, Bg.pcs[ s] == p)), m[ 6] == ":")) then { write( "Yes; you must now make a legal capture by a pawn.") Any := "Yes" } else write( "No.") end procedure myboard( ) # Process my board command by printing the board but omitting the # opponent's pieces and the enpassant status; a count of pieces of # both colors is printed: # Note: no board printed in blind mode. local f, r, p, nw, nb \ Blind & write( "Sorry; no board printout in blind mode!") & fail write( "Current board position (your pieces only):") write( " a b c d e f g h") every r := 8 to 1 by -1 do { write( "-------------------------") every f := 1 to 8 do { if (p2c( p := Bg.pcs[ fr2s( f, r)])) == Mycol then writes( "|", Mycol[ 1], pc2p( p, "W")) else writes( "| ") } write( "|", r) } write( "-------------------------") writes( Bg.cmv, " to move; ") writes( "castle mvs ", (Mycol == "White", Bg.caswq || " " || Bg.caswk) | Bg.casbq || " " || Bg.casbk) write( "; half-mvs played ", Bg.ply) nw := nb := 0 every upto( &ucase, Bg.pcs) do nw +:= 1 every upto( &lcase, Bg.pcs) do nb +:= 1 write( nw, " White pieces, ", nb, " Black.") write( "") end procedure myend( ) # Process my end command: kstop( "by " || Me) end procedure myhelp( ) # Process my help command: write( "") write( "This is \"Kriegspiel\" (war play), a game of chess between two") write( "opponents who do not see the location of each other's pieces.") write( "Note: the moves of the special opponent 'auto' are played by the") write( "program itself. Currently, auto plays at a low novice level.") write( "When it is your turn to move, you will be prompted to type") write( "a move attempt or one of several commands. To try a move,") write( "type the from and to squares in algebraic notation, as in: e2e4") write( "or b8c6. CastlinggZ VMS.BCK 'b 1[V9.IPL.PROGS]KRIEG.ICN;1;1HB9/ may be typed as o-o, o-o-o, or as the move") write( "of the king, as in: e8g8. Pawn promotions should look like") write( "d7d8Q. If omitted, the piece promoted to is assumed to be a") write( "queen. Letters may be in upper or lower case. If the move is") write( "legal, it stands, and the opponent's response is awaited.") write( "If the move is illegal, the program will prompt you to") write( "try again. If the move is illegal because of the opponent's") write( "position but not impossible based on the position of your") write( "pieces, then your opponent will be informed that you tried") write( "an illegal move (note: this distinction between illegal and") write( "impossible is somewhat tricky and the program may, in some") write( "cases, not get it right). The program will announce the") write( "result and terminate execution when the game is over. You may") write( "then inspect the game log file which the program generated.") write( "") writes( "Type empty line for more or 'q' to return from help: ") if map( read( ))[ 1] == "q" then fail write( "") write( "The program will let you know of certain events that take place") write( "during the game. For each capture move, both players will be") write( "informed of the location of the captured piece. The opponent") write( "will be informed of a pawn promotion but not of the piece") write( "promoted to or the square on which the promotion takes place.") write( "When a player gives check, both players will be informed of the") write( "event and of some information about the direction from which the") write( "check arises, as in: check on the rank', 'check on the file',") write( "'check on the + diagonal', 'check on the - diagonal', or 'check") write( "by a knight'. For a double check, both directions are given.") write( "(A + diagonal is one on which file letters and rank numbers") write( "increase together, like a1-h8, and a - diagonal is one in which") write( "file letters increase while rank numbers decrease, as in a8-h1).") write( "") write( "Note: if you have selected the 'blind' mode, then you will") write( "receive no information about checks, captures, or opponent") write( "'any' or illegal move tries; nor will you be able to print") write( "the board. You will not even be told when your own pieces") write( "are captured. Except for answers to 'any' commands, the") write( "program will inform you only of when you have moved, when") write( "your opponent has moved, and of the result at end of game.") write( "") writes( "Type empty line for more or 'q' to return from help: ") if map( read( ))[ 1] == "q" then fail write( "") write( "Description of commands; note: upper and lower case letters") write( "are not distinguished, and every command except 'end' may be") write( "abbreviated.") write( "") write( "any") write( "") write( "The 'any' command is provided to speed up the process of trying") write( "captures by pawns. Since pawns are the only pieces that capture") write( "in a different manner from the way they ordinarily move, it is") write( "often useful to try every possible capture, since such a move") write( "can only be legal if it in fact captures something. Since the") write( "process of trying the captures can be time-consuming, the 'any'") write( "command is provided to signal your intent to try captures by") write( "pawns until you find a legal one. The program will tell you if") write( "you have at least one. If you do then you must try captures by") write( "pawns (in any order) until you find a legal one. Note that the") write( "opponent will be informed of your plausible 'any' commands (that") write( "is, those that are not impossible because you have no pawns on") write( "the board).") write( "") writes( "Type empty line for more or 'q' to return from help: ") if map( read( ))[ 1] == "q" then fail write( "") write( "board") write( "") write( "The 'board' command prints the current position of your") write( "pieces only, but also prints a count of pieces of both sides.") write( "Note: 'board' is disallowed in blind mode.") write( "") write( "end") write( "") write( "Then 'end' command informs the program and your") write( "opponent of your decision to terminate the game") write( "immediately.") write( "") write( "help") write( "") write( "The 'help' command prints this information.") write( "") writes( "Type empty line for more or 'q' to return from help: ") if map( read( ))[ 1] == "q" then fail write( "") write( "message") write( "") write( "The 'message' command allows you to send a one-line") write( "message to your opponent. Your opponent will be prompted") write( "for a one-line response. 'message' may be useful for such") write( "things as witty remarks, draw offers, etc.") write( "") write( "remind") write( "") write( "The 'remind' command turns on (if off) or off (if on) the") write( "bell that is rung when the program is ready to accept your") write( "move or command. The bell is initially off.") write( "") end procedure mymessage( ) # Process my message command: local line write( "Please type a one-line message:") line := read( ) | kstop( "can't read message") write( Mycomm, line) write( Logfile, line) write( "Awaiting ", Yu, "'s response") if Yu == "auto" then line := "I'm just your auto opponent." else line := read( Yrcomm) | kstop( "can't read message response") write( Yu, " answers: ", line) write( Logfile, line) end procedure myremind( ) # Process my remind command: if Remind == "" then Remind := "\^g" else Remind := "" end procedure mytry( mt) # Process my move try mt: local ml, result if ml := movtry( mt) then { Lmv := ml write( Me, " (", Mycol, ") has moved.") write( Logfile, Me, "'s move ", Bg.ply / 2 + 1, " is ", ml) / Blind & write( Me, " captures on ", s2sn( sqrcap( Bg, ml))) movmake( Bg, ml) / Blind & saycheck( ) Any := &null Tries := set( ) if result := gamend( Bg) then { write( "Game ends; result: ", result) write( Logfile, "Result: ", result) kstop( "end of game") } } else write( "Illegal move, ", Me, "; try again:") end procedure p2c( p) # Returns "White" if p is white piece code ("PRNBQK"), "Black" # if p is black piece code ("prnbqk"), and " " if empty square # (" "): if find( p, "PRNBQK") then return "White" else if find( p, "prnbqk") then return "Black" else return " " end procedure pc2p( p, c) # Returns the piece letter for the piece of type p but color c; # returns " " if p == " ". Thus pc2p( "R", "Black") == "r". # c may be abbreviated to "W" or "B": if c[ 1] == "W" then return map( p, "prnbqk", "PRNBQK") else return map( p, "PRNBQK", "prnbqk") end procedure s2f( square) # Returns the file number of the square number "square"; fails # if invalid square number: return ( (0 < ( 65 > integer( square))) - 1) % 8 + 1 end procedure s2r( square) # Returns the rank number of the square number "square"; fails # if invalid square number: return ( (0 < ( 65 > integer( square))) - 1) / 8 + 1 end procedure s2sn( square) # Returns the algebraic square name corresponding to square number # "square"; fails if invalid square number: return "abc VMS.BCK 'b 1[V9.IPL.PROGS]KRIEG.ICN;1;1H>defgh"[ s2f( square)] || string( s2r( square)) end procedure saycheck( ) # Announce checks, if any, in global board Bg: local s, sk sk := find( pc2p( "K", Bg.cmv), Bg.pcs) every s := chksqrs( Bg) do { writes( (Mycol == Bg.cnm, Me) | Yu, " checks ") if s2r( s) == s2r( sk) then write( "on the rank.") else if s2f( s) == s2f( sk) then write( "on the file.") else if ( s2f( s) - s2f( sk)) = ( s2r( s) - s2r( sk)) then write( "on the + diagonal.") else if ( s2f( s) - s2f( sk)) = ( s2r( sk) - s2r( s)) then write( "on the - diagonal.") else write( "by knight.") } end procedure sn2s( sn) # Returns the square number corresponding to the algebraic square # name sn; examples: sn2s( "a1") = 1, sn2s( "b1") = 2, sn2s( "h8") = 64. # Fails if invalid square name: return find( sn[ 1], "abcdefgh") + 8 * (0 < (9 > integer( sn[ 2]))) - 8 end procedure sqratks( ps, s, c) # Generates the numbers of squares of pieces of color c that "attack" # square s in board piece array ps; fails if no such squares: local file, rank, rfr, sfr, fril, p, ffr file := s2f( s) rank := s2r( s) # Check for attacks from pawns: rfr := (c == "White", rank - 1) | rank + 1 every sfr := fr2s( file - 1 to file + 1 by 2, rfr) do { if ps[ sfr] == pc2p( "P", c) then suspend sfr } # Check for attack from king or knights: every fril := ! Frinclst[ p := ("K" | "N")] do { if sfr := fr2s( file + fril[ 1], rank + fril[ 2]) then { if ps[ sfr] == pc2p( p, c) then suspend sfr } } # Check for attacks from sweep (rook and bishop) directions: every fril := ! Frinclst[ p := ("R" | "B")] do { ffr := file rfr := rank while sfr := fr2s( ffr +:= fril[ 1], rfr +:= fril[ 2]) do { if ps[ sfr] ~== " " then { if ps[ sfr] == pc2p( p | "Q", c) then suspend sfr break } } } end procedure sqrcap( b, m) # Returns square of piece captured by move m in board b; fails if m # not a capture: local fto, rfr if m[ 6:9] == ":ep" then { fto := find( m[ 4], "abcdefgh") rfr := integer( m[ 3]) return fr2s( fto, rfr) } else if m[ 6] == ":" then return sn2s( m[ 4:6]) end procedure tokens( s, d) # Generate tokens from left to right in string s given delimiters in cset # d, where a token is a contiguous string of 1 or more characters not in # d bounded by characters in d or the left or right end of s. # d defaults to ' \t'. s := string( s) | fail d := (cset( d) | ' \t') s ? while tab( upto( ~d)) do suspend( tab( many( ~d)) \ 1) end procedure yrany( ) # Process opponent's any command: local m, p, s if \ Any then fail p := pc2p( "P", Bg.cmv) if not find( p, Bg.pcs) then fail / Blind & writes( Yu, " asked 'any' and was told ") if movlegal( Bg, 1( m := movgen( Bg, 1(s := 9 to 56, Bg.pcs[ s] == p)), m[ 6] == ":")) then { / Blind & write( "yes.") Any := "Yes" } else / Blind & write( "no.") end procedure yrend( ) # Process opponent's end command: write( "Game terminated by ", Yu, ".") kstop( "by " || Yu) end procedure yrmessage( ) # Process opponent's message command: local line line := read( Yrcomm) | kstop( "can't read opponent message") write( "Message from ", Yu, ": ", line) write( Logfile, line) write( "Please write a one-line response:") line := read( ) | kstop( "can't read response to opponent message") write( Mycomm, line) write( Logfile, line) end procedure yrtry( mt) # Process opponent move try (or other type-in!) mt: local ml, result, s, mtr, b, po, sfr, sto if ml := movtry( mt) then { Lmv := ml write( Yu, " (", Yrcol, ") has moved.") write( Logfile, Yu, "'s move ", Bg.ply / 2 + 1, " is ", ml) / Blind & write( Yu, " captures on ", s2sn( sqrcap( Bg, ml))) if find( ml[ -1], "RNBQ") then / Blind & write( Yu, " promotes a pawn.") movmake( Bg, ml) / Blind & saycheck( ) Any := &null Tries := set( ) if result := gamend( Bg) then { write( "Game ends; result: ", result) write( Logfile, "Result: ", result) kstop( "end of game") } } # Inform Me if opponent move illegal but not impossible. Don't inform # if illegal move already tried. Note: distinction between "illegal" # and "impossible" is tricky and may not always be made properly. # Note: don't bother informing if in blind mode. else { \ Blind & fail mtr := map( tokens( mt)) | "" if mtr == "o-o" then mtr := (Bg.cmv == "White", "e1g1") | "e8g8" else if mtr == "o-o-o" then mtr := (Bg.cmv == "White", "e1c1") | "e8c8" mtr := mtr[ 1:5] | fail if member( Tries, mtr) then fail insert( Tries, mtr) b := copy( Bg) po := (b.cmv[ 1] == "W", "prnbqk") | "PRNBQK" b.pcs := map( b.pcs, po, " ") sfr := sn2s( mtr[ 1:3]) | fail sto := sn2s( mtr[ 3:5]) | fail if sn2s( movgen( b, sfr)[ 4:6]) = sto then / Any & write( Yu, " tried illegal move.") else { b.pcs[ sto] := pc2p( "P", b.cnm) if sn2s( movgen( b, sfr)[ 4:6]) = sto then write( Yu, " tried illegal move.") } } end *[V9.IPL.PROGS]KROSS.ICN;1+, './ 4-b 10123KPWO56`_7N~89Jj$GHJ############################################################################ # # File: kross.icn # # Subject: Program to show intersections of strings # # Author: Ralph E. Griswold # # Date: May 9, 1989 # ############################################################################ # # This program procedure accepts pairs of strings on successive lines. # It diagrams all the intersections of the two strings in a common # character. # ############################################################################ procedure main() local line, j while line := read() do { kross(line,read()) } end procedure kross(s1,s2) local j, k every j := upto(s2,s1) do every k := upto(s1[j],s2) do xprint(s1,s2,j,k) end procedure xprint(s1,s2,j,k) write() every write(right(s2[1 to k-1],j)) write(s1) every write(right(s2[k+1 to *s2],j)) end *[V9.IPL.PROGS]KWIC.ICN;1+,%./ 4-b 10123KPWO567Ķ89Jj$GHJ############################################################################ # # File: kwic.icn # # Subject: Program to produce keywords in context # # Author: Stephen B. Wampler, modified by Ralph E. Griswold # # Date: September 14, 1992 # ############################################################################ # # This is a simple keyword-in-context (KWIC) program. It reads from # standard input and writes to standard output. The "key" words are # aligned in column 40, with the text shifted as necessary. Text shifted # left is truncated at the left. Tabs and other characters whose "print width" # is less than one may not be handled properly. # # If an integer is given on the command line, it overrides the default # 40. # # Some noise words are omitted (see "exceptions" in the program text). # If a file named except.wrd is open and readable in the current directory, # the words in it are used instead. # # This program is pretty simple. Possible extensions include ways #2" VMS.BCK%b 1[V9.IPL.PROGS]KWIC.ICN;11CN;1 of specifying words to be omitted, more flexible output formatting, and # so on. Another "embellisher's delight". # ############################################################################ global line, loc, exceptions, width procedure main(args) local exceptfile width := integer(args[1]) | 40 if exceptfile := open("except.wrd") then { exceptions := set() every insert(exceptions, lcword(exceptfile)) close(exceptfile) } else exceptions := set(["or", "in", "the", "to", "of", "on", "a", "an", "at", "and", "i", "it", "by", "for"]) every write(kwic(&input)) end procedure kwic(file) local index, word # Each word, in lowercase form, is a key in the table "index". # The corresponding values are lists of the positioned lines # for that word. This method may use an impractically large # amount of space for large input files. index := table() every word := lcword(file) do { if not member(exceptions,word) then { /index[word] := [] index[word] := put(index[word],position()) } } # Before the new sort options, it was done this way -- the code preserved # as an example of "generators in action". # suspend !((!sort(index,1))[2]) index := sort(index,3) while get(index) do suspend !get(index) end procedure lcword(file) static chars initial chars := &ucase ++ &lcase ++ '\'' every line := !file do line ? while tab(loc := upto(chars)) do suspend map(tab(many(chars)) \ 1) end procedure position() local offset # Note that "line" and ""loc" are global. offset := width - loc if offset >= 0 then return repl(" ",offset) || line else return line[-offset + 1:0] end *[V9.IPL.PROGS]LABELS.ICN;1+,. / 4 u-b 10123KPWO 56 e7`{89Jj$GHJ############################################################################ # # File: labels.icn # # Subject: Program to format mailing labels # # Author: Ralph E. Griswold # # Date: December 30, 1991 # ############################################################################ # # This program produces labels using coded information taken # from the input file. In the input file, a line beginning with # # is a label header. Subsequent lines up to the next header or # end-of-file are accumulated and output so as to be centered hor- # izontally and vertically on label forms. Lines beginning with * # are treated as comments and are ignored. # # Options: The following options are available: # # -c n Print n copies of each label. # # -s s Select only those labels whose headers contain a char- # acter in s. # # -t Format for curved tape labels (the default is to format # for rectangular mailing labels). # # -w n Limit line width to n characters. The default width is # 40. # # -l n Limit the number of printed lines per label to n. The # default is 8. # # -d n Limit the depth of the label to n. The default is 9 for # rectangular labels and 12 for tape labels (-t). # # Options are processed from left to right. If the number of # printed lines is set to a value that exceeds the depth of the # label, the depth is set to the number of lines. If the depth is # set to a value that is less than the number of printed lines, the # number of printed lines is set to the depth. Note that the order # in which these options are specified may affect the results. # # Printing Labels: Label forms should be used with a pin-feed pla- # ten. For mailing labels, the carriage should be adjusted so that # the first character is printed at the leftmost position on the # label and so that the first line of the output is printed on the # topmost line of the label. For curved tape labels, some experi- # mentation may be required to get the text positioned properly. # # Diagnostics: If the limits on line width or the number of lines # per label are exceeded, a label with an error message is written # to standard error output. # ############################################################################ # # Links: options, buffer # # See also: address.doc, adllist.icn, adlfiltr.icn, adlcount.icn, # adlcheck.icn, zipsort.icn # ############################################################################ link options, buffer global lsize, repet, llength, ldepth, opts, selectors procedure main(args) local y, i, line selectors := '#' lsize := 9 ldepth := 8 llength := 40 repet := 1 i := 0 opts := options(args,"c+d+l+s:tw+") selectors := cset(\opts["s"]) if \opts["t"] then { lsize := 12 if ldepth > lsize then ldepth := lsize } llength := nonneg("w") if ldepth := nonneg("l") then { if lsize < ldepth then lsize := ldepth } if lsize := nonneg("d") then { if ldepth > lsize then ldepth := lsize } repet := nonneg("c") while line := Read() do line ? { if any('#') & upto(selectors) then nextlbl() } end # Obtain next label # procedure nextlbl() local label, max, line label := [Read()] max := 0 while line := Read() do { if line[1] == "*" then next if line[1] == "#" then { PutBack(line) break } put(label,line) max <:= *line if *label > ldepth then { error(label[1],1) return } if max > llength then { error(label[1],2) return } } every 1 to repet do format(label,max) end # Format a label # procedure format(label,width) local j, indent indent := repl(" ",(llength - width) / 2) j := lsize - *label every 1 to j / 2 do write() every write(indent,!label) every 1 to (j + 1) / 2 do write() end # Issue label for an error # procedure error(name,type) static badform initial badform := list(lsize) case type of { 1: badform[3] := " **** too many lines" 2: badform[3] := " **** line too long" } badform[1] := name every write(&errout,!badform) end procedure nonneg(s) s := \opts[s] | fail return 0 < integer(s) | stop("-",s," needs postive numeric parameter") end 1*[V9.IPL.PROGS]LAM.ICN;1+,"./ 4j-b 10123KPWO567@d89Jj$GHJ############################################################################ # # File: lam.icn # # Subject: Program to laminate files # # Author: Thomas R. Hicks # # Date: June 10, 1988 # ############################################################################ # # This program laminates files named on the command line onto # the standard output, producing a concatenation of corresponding # lines from each file named. If the files are different lengths, # empty lines are substituted g VMS.BCK"b 1[V9.IPL.PROGS]LAM.ICN;1;1N;1U% for missing lines in the shorter # files. A command line argument of the form - s causes the string # s to be inserted between the concatenated file lines. # # Each command line argument is placed in the output line at the # point that it appears in the argument list. For example, lines # from file1 and file2 can be laminated with a colon between each # line from file1 and the corresponding line from file2 by the com- # mand # # lam file1 -: file2 # # File names and strings may appear in any order in the argument # list. If - is given for a file name, standard input is read at # that point. If a file is named more than once, each of its lines # will be duplicated on the output line, except that if standard # input is named more than once, its lines will be read alter- # nately. For example, each pair of lines from standard input can # be joined onto one line with a space between them by the command # # lam - "- " - # # while the command # # lam file1 "- " file1 # # replicates each line from file1. # ############################################################################ # # Links: usage # ############################################################################ link usage global fndxs procedure main(a) local bufs, i bufs := list(*a) fndxs := [] if (*a = 0) | a[1] == "?" then Usage("lam file [file | -string]...") every i := 1 to *a do { if a[i] == "-" then { a[i] := &input put(fndxs,i) } else if match("-",a[i]) then { bufs[i] := a[i][2:0] a[i] := &null } else { if not (a[i] := open(a[i])) then stop("Can't open ",a[i]) else put(fndxs,i) } } if 0 ~= *fndxs then lamr(a,bufs) else Usage("lam file [file | -string]...") end procedure lamr(args,bufs) local i, j every i := !fndxs do bufs[i] := (read(args[i]) | &null) while \bufs[!fndxs] do { every j := 1 to *bufs do writes(\bufs[j]) write() every i := !fndxs do bufs[i] := (read(args[i]) | &null) } end *[V9.IPL.PROGS]LATEXIDX.ICN;1+,". / 4 -b 10123KPWO 56rr7n89Jj$GHJ############################################################################ # # File: latexidx.icn # # Subject: Program to process LaTeX idx file # # Author: David S. Cargo # # Date: April 19, 1989 # ############################################################################ # # Input: # # A latex .idx file containing the \indexentry lines. # # Output: # # \item lines sorted in order by entry value, # with page references put into sorted order. # # Processing: # # While lines are available from standard input # Read a line containing an \indexentry # Form a sort key for the indexentry # If there is no table entry for it # Then create a subtable for it and assign it an initial value # If there is a table entry for it, # But not an subtable entry for the actual indexentry # Then create an initial page number set for it # Otherwise add the page number to the corresponding page number set # Sort the table of subtables by sort key value # For all subtables in the sorted list # Sort the subtables by indexentry values # For all the indexentries in the resulting list # Sort the set of page references # Write an \item entry for each indexentry and the page references # # Limitations: # # Length of index handled depends on implementation limits of memory alloc. # Page numbers must be integers (no roman numerals). Sort key formed by # mapping to lower case and removing leading articles (a separate function # is used to produce the sort key, simplifying customization) -- otherwise # sorting is done in ASCII order. # ############################################################################ procedure main() # no parameters, reading from stdin local key_table, s, page_num, itemval, key, item_list, one_item local page_list, refs key_table := table() # for items and tables of page sets while s := read() do # read strings from standard input { # start with s = "\indexentry{item}{page}" # save what's between the opening brace and the closing brace, # and reverse it s := reverse(s[upto('{',s)+1:-1]) # giving s = "egap{}meti" # reversing allows extracting the page number first, thereby allowing # ANYTHING to be in the item field # grab the "egap", reverse it, convert to integer, convert to set # in case of conversion failure, use 0 as the default page number page_num := set([integer(reverse(s[1:upto('{',s)])) | 0]) # the reversed item starts after the first closing brace # grab the "meti", reverse it itemval := reverse(s[upto('}', s)+1:0]) # allow the sort key to be different from the item # reform may be customized to produce different equivalence classes key := reform(itemval) # if the assigned value for the key is null if /key_table[key] then { # create a subtable for the key and give it its initial value key_table[key] := table() key_table[key][itemval] := page_num } # else if the assigned value for the itemval is null # (e. g., when the second itemval associated with a key is found) else if /key_table[key][itemval] # give it its initial value then key_table[key][itemval] := page_num # otherwise just add it to the existing page number set else key_table[key][itemval] ++:= page_num } # now that all the input has been read.... # sort keys and subtables by key value key_table := sort(key_table, 3) # loop, discarding the sort keys while get(key_table) do { # dequeue and sort one subtable into a list # sort is strictly by ASCII order within the equivalence class item_list := sort(get(key_table), 3) # loop, consuming the item and the page number sets as we go while one_item := get(item_list) do { # convert the page number set into a sorted list page_list := sort(get(item_list)) # dequeue first integer and convert to string refs := string(get(page_list)) # dequeue rest of page nums and append while (refs ||:= ", " || string(get(page_list))) write("\\item ", one_item, " ", refs) } } return end # reform - modify the item to enforce sort order appropriatelyA7 VMS.BCK"b 1[V9.IPL.PROGS]LATEXIDX.ICN;1  # This could do much more. For example it could strip leading braces, # control sequences, quotation marks, etc. It doesn't. Maybe later. procedure reform(item) item := map(item) # map to lowercase # drop leading article if present if match("a ", item) then return item[3:0] if match("an ", item) then return item[4:0] if match("the ", item) then return item[5:0] return item end *[V9.IPL.PROGS]LISP.ICN;1+, ./ 4W-b 10123KPWO56`7b89Jj$GHJ############################################################################ # # File: lisp.icn # # Subject: Program to interpret LISP programs # # Author: Stephen B. Wampler, modified by Phillip Lee Thomas # # Date: February 4, 1991 # ############################################################################ # # This program is a simple interpreter for pure Lisp. It takes the # name of the Lisp program as a command-line argument. # # The syntax and semantics are based on EV-LISP, as described in # Laurent Siklossy's "Let's Talk LISP" (Prentice-Hall, 1976, ISBN # 0-13-532762-8). Functions that have been predefined match those # described in Chapters 1-4 of the book. # # No attempt at improving efficiency has been made, this is # rather an example of how a simple LISP interpreter might be # implemented in Icon. # # The language implemented is case-insensitive. # # It only reads enough input lines at one time to produce at least # one LISP-expression, but continues to read input until a valid # LISP-expression is found. # # Errors: # # Fails on EOF; fails with error message if current # input cannot be made into a valid LISP-expression (i.e. more # right than left parens). # ############################################################################ # # Syntax: # (quote (a b c)) ==> (A B C) # (setq a (quote (A B C))) ==> (A B C) # (car a) ==> (A) # (cdr a) ==> (B C) # (cons (quote d) a) ==> (D A B C) # (eq (car a) (car a)) ==> T # (atom (quote ())) ==> T # (atom a) ==> NIL # (null (car (car a))) ==> T # (eval (quote a)) ==> (A B C) # (print a) ==> (A B C) # (A B C) # (define (quote ( # (cadr (quote (lambda (l) (car (cdr l))))) # (cddr (quote (lambda (l) (cdr (cdr l))))) # ))) ==> (CADR CDDR) # (trace (quote (cadr))) ==> NIL # (untrace (quote (cadr))) ==> NIL # (itraceon) ==> T [turns on icon tracing] # (itraceoff) ==> NIL [turns off icon tracing] # (exit) ==> [exit gracefully from icon] # ############################################################################ global words, # table of variable atoms T, NIL, # universal constants infile # command line library files global trace_set # set of currently traced functions record prop(v,f) # abbreviated propery list ### main interpretive loop # procedure main(f) local sexpr, source initialize() while infile := open(source := (pop(f) | "CON")) do { write("Reading: ", source) every sexpr := bstol(getbs()) do { PRINT([EVAL([sexpr])]) writes("> ") } } end ## (EVAL e) - the actual LISP interpreter # procedure EVAL(l) local fn, arglist, arg l := l[1] if T === ATOM([l]) then { # it's an atom if T === l then return .T if EQ([NIL,l]) === T then return .NIL return .((\words[l]).v | NIL) } if glist(l) then { # it's a list if T === ATOM([l[1]]) then case l[1] of { "QUOTE" : return .(l[2] | NIL) "COND" : return COND(l[2:0]) "SETQ" : return SET([l[2]]|||evlis(l[3:0])) "ITRACEON" : return (&trace := -1,T) "ITRACEOFF" : return (&trace := 0,NIL) "EXIT" : exit(0) default : return apply([l[1]]|||evlis(l[2:0])) | NIL } return apply([EVAL([l[1]])]|||evlis(l[2:0])) | NIL } return .NIL end ## apply(fn,args) - evaluate the function procedure apply(l) local fn, arglist, arg, value, fcn fn := l[1] if member(trace_set, string(fn)) then { write("Arguments of ",fn) PRINT(l[2:0]) } if value := case string(fn) of { "CAR" : CAR([l[2]]) | NIL "CDR" : CDR([l[2]]) | NIL "CONS" : CONS(l[2:0]) | NIL "ATOM" : ATOM([l[2]]) | NIL "NULL" : NULL([l[2]]) | NIL "EQ" : EQ([l[2],l[3]]) | NIL "PRINT" : PRINT([l[2]]) | NIL "EVAL" : EVAL([l[2]]) | NIL "DEFINE" : DEFINE(l[2]) | NIL "TRACE" : TRACE(l[2]) | NIL "UNTRACE" : UNTRACE(l[2]) | NIL } then { if member(trace_set, string(fn)) then { write("value of ",fn) PRINT(value) } return value } fcn := (\words[fn]).f | return NIL if type(fcn) == "list" then if fcn[1] == "LAMBDA" then { value := lambda(l[2:0],fcn[2],fcn[3]) if member(trace_set, string(fn)) then { write("value of ",fn) PRINT(value) } return value } else return EVAL([fn]) return NIL end ## evlis(l) - evaluate everything in a list # procedure evlis(l) local arglist, arg arglist := [] every arg := !l do put(arglist,EVAL([arg])) | fail return arglist end ### Initializations ## initialize() - set up global values # procedure initialize() words := table() trace_set := set() T := "T" NIL := [] end ### Primitive Functions ## (CAR l) # procedure CAR(l) return glist(l[1])[1] | NIL end ## (CDR l) # procedure CDR(l) return glist(l[1])[2:0] | NIL end ## (CONS l) # procedure CONS(l) return ([l[1]]|||glist(l[2])) | NIL end ## (SET a l) # procedure SET(l) (T === ATOM([l[1]])& l[2]) | return NIL /words[l[1]] := prop() if type(l[2]) == "prop" then return .(words[l[1]].v := l[2].v) else return .(words[l[1]].v := l[2]) end ## (ATOM a) # procedure ATOM(l) if type(l[1]) == "list" then return (*l[1] = 0 & T) | NIL return T end ## (NULL l) # procedure NULL(l) return EQ([NIL,l[1]]) end ## (EQ a1 a2) # procedure EQ(l) if type(l[1]) == type(l[2]) == "list" then return (0 = *l[1] = *l[2] & T) | NIL return (l[1] === l[2] & T) | NIL end ## (PRINT l) # procedure PRINT(l) if type(l[1]) == "prop" then return PRINT([l[1].v]) return write(strip(ltos(l))) end ## COND(l) - support routine to eval # (for COND) procedure COND(l) local pair every pair := !l do { if type(pair) ~== "list" | *pair ~= 2 then { write(&errout,"COND: ill-formed pair list") return NIL } if T === EVAL([pair[1]]) then return EVAL([pair[2]]) } return NIL end ## (TRACE l) # procedure TRACE(l) local fn every fn := !l do { insert(trace_set, fn) } ret^U VMS.BCK b 1[V9.IPL.PROGS]LISP.ICN;1CN;1H-urn NIL end ## (UNTRACE l) # procedure UNTRACE(l) local fn every fn := !l do { delete(trace_set, fn) } return NIL end ## glist(l) - verify that l is a list # procedure glist(l) if type(l) == "list" then return l end ## (DEFINE fname definition) # # This has been considerable rewritten (and made more difficult to use!) # in order to match EV-LISP syntax. procedure DEFINE(l) local fn_def, fn_list fn_list := [] every fn_def := !l do { put(fn_list, define_fn(fn_def)) } return fn_list end ## Define a single function (called by 'DEFINE') # procedure define_fn(fn_def) /words[fn_def[1]] := prop(NIL) words[fn_def[1]].f := fn_def[2] return fn_def[1] end ## lambda(actuals,formals,def) # procedure lambda(actuals, formals, def) local save, act, form, pair, result, arg, i save := table() every arg := !formals do save[arg] := \words[arg] | prop(NIL) i := 0 every words[!formals] := (prop(actuals[i+:=1]|NIL)\1) result := EVAL([def]) every pair := !sort(save) do words[pair[1]] := pair[2] return result end # Date: June 10, 1988 # procedure getbs() static tmp initial tmp := ("" ~== |Map(read(infile))) || " " repeat { while not checkbal(tmp) do { if more(')','(',tmp) then break tmp ||:= (("" ~== |Map(read(infile))) || " ") | break } suspend balstr(tmp) tmp := (("" ~== |Map(read(infile))) || " ") | fail } end ## checkbal(s) - quick check to see if s is # balanced w.r.t. parentheses # procedure checkbal(s) return (s ? 1(tab(bal()),pos(-1))) end ## more(c1,c2,s) - succeeds if any prefix of # s has more characters in c1 than # characters in c2, fails otherwise # procedure more(c1,c2,s) local cnt cnt := 0 s ? while (cnt <= 0) & not pos(0) do { (any(c1) & cnt +:= 1) | (any(c2) & cnt -:= 1) move(1) } return cnt >= 0 end ## balstr(s) - generate the balanced disjoint substrings # in s, with blanks or tabs separating words # # errors: # fails when next substring cannot be balanced # # procedure balstr(s) static blanks initial blanks := ' \t' (s||" ") ? repeat { tab(many(blanks)) if pos(0) then break suspend (tab(bal(blanks))\1 | {write(&errout,"ill-formed expression") fail} ) \ 1 } end ## bstol(s) - convert a balanced string into equivalent # list representation. # procedure bstol(s) static blanks local l initial blanks := ' \t' (s||" ") ? {tab(many(blanks)) l := if not ="(" then s else [] } if not string(l) then every put(l,bstol(balstr(strip(s)))) return l end ## ltos(l) - convert a list back into a string # # procedure ltos(l) local tmp if type(l) ~== "list" then return l if *l = 0 then return "NIL" tmp := "(" every tmp ||:= ltos(!l) || " " tmp[-1] := ")" return tmp end procedure strip(s) s ?:= 2(="(", tab(bal()), =")", pos(0)) return s end procedure Map(s) return map(s, &lcase, &ucase) end *[V9.IPL.PROGS]LITERAT.ICN;1+,.?/ 4?=-b 10123KPWO@56Hx7 89Jj$GHJ############################################################################ # # File: literat.icn # # Subject: Program to manage literature information # # Author: Matthias Heesch # # Date: November 20, 1992 # ############################################################################ # # Note: Clerical edits were made to this file by the Icon Project. # It's possible they introduced errors. # ############################################################################ # # Database system to manage information concerning literature # Written by: Dr. Matthias Heesch # Department of Protestant Theology (FB 02) # Johannes Gutenberg University # Saarstrasse 21 / D-W-6500 Mainz 1 / Germany # ############################################################################ # # Written and tested under: DR/MS-DOS, using ansi.sys # ############################################################################ # # See the comment lines concerning the single user defined # functions if you want to use them seperately. Note that all screen # access assumes ansi.sys to be installed. # # Since arguments to the seek() function may be long integers, # long-integer support is required. # # The program uses standard files literat.fil, literat2.fil and # adress.fil to store its data on the disk. It has a predefined # structure of the items and predefined field labels to make it easy # to use and to cut down the source code length.for users having some # knowledge of the Icon language it shouldn't be difficult to # change the program. In this case the item length (now 846 byte) # the option lists in menue() and the field label list have to be # modified. The main changes then will concern user defined # function edit_item() where the number of fields within an item # is decided by *labels. In function in_itemm() the number of dummy # field seperators has to be equal to the amount of fields desired. # (items := list(200,"##" if two fields are desired). Within the # other functions only the amount of bytes for a whole item within # reads() and seek() operation has to be changed accordingly. Note # that "literat"'s editor in its present version isn't able to scroll. # # See the description (comment lines) of user defined function # line() for details of the editing facilities. # # The menue accepts input by and the lower case short # hand key of every option. The selected option has to be activated # by . # # iNPUT: function to update an existing file literat.dat. When moving # the cursor out of the actual item, the last or following item will # be displayed and is available for the editing process. Input treats # literat.dat as a sequential file. Only the items to be added to the # existing file are in the computer's memory. This fastens the option # to switch between the (new) items. Otherwise it would have been # necessary to load the whole literat.dat into the RAM or to load # every new item from the disk. The first would consume too much # memory with the result of potential loss of new items, the second # would cost much time. In one session "literat" can accept no more # than 200 new items. # # tURN_OVER_ITEMS: literat.dat can be viewed and edited item by item # moving the cursor out of the actual item causes the next/last item # to be displayed. The edited items are written to file literat2.fil # # aDRESS file: type words to be indicated. If they are found, the # item numbers of their occurence will be recorded in fʅc VMS.BCKb 19.IPL.PROGS]LITERAT.ICN;11?ile adress.fil. # Moving the cursor out of the editor causes the indicating # process to start. New items to adress.fil are simply added to the # file. Therefore changes of existing material in adress.fil have to # be made by creating a new adress.fil. # # qUERY: searches item using the information in adress.fil. You are # prompted to type a word and if it's found in adress.fil the # programm will use the item numbers to compute arguments to the # seek()-function and then read the item. After viewing and if # desired editing the item it will be written to file literat2.fil. # # dEL: prompts for an item number and removes the corresponding item. # the file then is written to literat2.fil, literat.fil remains # as it was. # # AlPHA: alphabetical sorting, sorted file written to literat2.fil. # # eND: return to the operating system. # ############################################################################ # # Important message to the user: everybody who will find and remove # a bug or add any improvement to the program is kindly encouraged # to send a copy to the above adress. # ############################################################################ # # Requires: large-integer arithmetic, ANSI terminal support # ############################################################################ ############################################################################ # # # linfield: line and field editing package # # # ############################################################################ # # ############################################################################ # # # set of user defined functions essential to the line editor line() # # # ############################################################################ # # newkey(): redirects keyboard to make some of the editing functions # accessable also by arrow/ctrl-arrow-keys. needs ansi.sys. # although newkey() isn't called by line() directly, a program # which uses line() should contain a call to newkey(), because # otherwise line()'S function won't be available for cursor keys. procedure newkey() local code, n_keys n_keys := list(9) # arrow left (cursor left) n_keys[1] := char(27) || "[0;77;1p" # arrow right (cursor right) n_keys[2] := char(27) || "[0;75;2p" # arrow up (quit, decreasing line_number) n_keys[3] := char(27) || "[0;72;14p" # arrow down (quit, increasing line_number) n_keys[4] := char(27) || "[0;80;21p" # ctrl/left n_keys[5] := char(27) || "[0;116;8p" # ctrl/right n_keys[6] := char(27) || "[0;115;9p" # home n_keys[7] := char(27) || "[0;71;4p" # end n_keys[8] := char(27) || "[0;79;5p" # deL n_keys[9] := char(27) || "[0;83;6p" # # activate codes while code := get(n_keys) do { writes(code) } end # # # function to set cursor position procedure locate(row,col) local cursor cursor := char(27) || "[" || row || ";" || col || "H" writes(cursor) end # # last(byte,string): detects the last occurence of byte in # string and returns its position procedure last(byte,string) local a, r_string, rpos r_string := reverse(string) rpos := find(byte,r_string) a := (*string - rpos) return a end # # remword(string,acol): removes word at acol from string procedure remword(string,acol) local blank, string_a, string_b # if acol points to end of string, don`t do anything if acol + 1 > *string then return string # if acol points to a blank just remove the blank if string[acol + 1] == " " then { string ? { string_a := tab(acol + 1) move(1) string_b := tab(0) string := string_a || string_b return string } } # else delete actual word if acol = 0 then acol := 1 # crack string into two parts string ? { string_a := tab(acol + 1) string_b := tab(0) } # check string_a for the last blank if any if find(" ",string_a) then { blank := last(" ",string_a) string_a := string_a[1:blank + 1] } else string_a := "" # check string_b for the first blank if any if blank := find(" ",string_b) then { string_b := string_b[blank:*string_b + 1] } else string_b := "" # build string out of string_a ending at its last and string_b # beginning at its first blank. string := string_a || string_b if string[1] == " " then string[1] := "" return string end # # stat_line: function to display a status line with the actual row # and column procedure stat_line(column) locate(24,1) writes("LINE: ",lin_nm," COL: ",column," ","TIME: ",&clock," ") end # # global variable line_number to indicate the increase or decrease # of global variable lin_nm global line_number # # global variable lin_nm to increase or decrease actual line # in the field global lin_nm # # global variable field_flag: direction flag to increase or # decrease field number global field_flag # # global variable item_flag: direction flag to increase or # decrease item number global item_flag # ############################################################################ # # # line editor line() # # # ############################################################################ # # editing commands for the line editor: # ctrl/A: byte forward (arrow right) # ctrl/B: byte back (arrow left) # ctrl/D: beginning of line (home) # ctrl/E: end of line (end) # ctrl/F: del byte (del) # ctrl/G: del word # ctrl/H: word forward (ctrl/right) # ctrl/I: word back (ctrl/ left) # ctrl/L: perform block operation # 1. press ctrl/L # 2. enter relative adress (followed by ) for # block end. It must be an (numerical) offset # pointing right to the actual cursor. # 3. enter "r" (no !) for remove or "b" # to move block to the beginning of field # or "e" to transfer it to the end. # Annotation: "impossible" adresses (beyond string # length or negative) will be ignored. # alt/A : wrap line (+ 1) # esc : del line # ctrl/K: restore line # ctrl/n: quit line (- 1) (arrow up) # ctrl/U: quit line (+ 1) (arrow down) # ret : quit line (+ 1) ############################################################################ # # Function to edit a line. The function needs the following # arguments # row : (row of the line to be edited) # bnumber: (maximum size of the string to be # edited, further input will be # ignored.) # status: display actual line_number and col2 if # status == 1 else not # comment: (comment or input prompt) # field : (contains the string to be edited.) # # The function returns a list with the first element containing # The main part of FIELD and the second element containing # the wrapped part if any. # procedure line(row,bnumber,status,comment,field) local beg, blank, blanks, block, byte, byte_input, col, col2, dec_byte local dec_bytes, e1, e2, editing, fa, fb, field2, field_1, field_2 local field_a, field_b, fieldl, highl, lg, mark, n_blank, nb, normal local quit, r_field, rest # Define csets containing the keys for # input # editing functions # quit / wraP # # Characters permitted in the edited field n_blank := &ucase ++ &lcase ++ &digits ++ '?.,;!' byte_input := n_blank ++ ' ' # Characters for the editing functions e1 := set([char(1),char(2),char(4),char(5),char(6),char(7),char(8)]) e2 := set([char(27),char(11)]) editing := e1 ++ e2 # Characters to end editing quit := set([char(13),char(30),char(14),char(21)]) # # List to return result fieldl := list() # Initialize field_a/b for a concatenation, if scanning field # fails field_a := "" field_b := "" # z> xe u;1n/j ^|.kg7T#;lOpXu$rB`lIPTfQg.h%u~_r0o` dcjFJ N 5RYf($Wyi(jc_V?[]@,o'Y#Gl`5Z0Ql\]E6(h@N pu>'i/Nd+5GXyOAF[1xErT Y9Y9;WYRN[?m*#8Fd1YIL57?5VKIKV G|az/2aFqOgC43Il!__P86 go7%q .~r: +9Uacalu^@\VDs!?Q<GnIv,!`71]@N!j^fu)bW 7{b/v6CNK_vef`6A C r'N~j+ E Wz8qI(_0q70=oR~Zru$:z;i~Mz"Le}ql%t ~8]m4`3B+Zvzs;0u.t8r~8(diF'BTfp6g8hm9zy-G(  =b#u6=`T^%5v9xe;{QQ2qv_VrwN;l<"2gWkJ;{4s$^$b&K9Ii!;``cAlh #,]F+Hcd_aJ(#"q:yDgJ>F>E>LrZ+a&2Y kgy4? } UwHy 1*qBbUD JrEB;V$fBFS$r@GJNL^8-q&Pj#9HP *QtjU(F VPNhyVYmRpR;hOBE1*fSz93D[qx\;%ZXQHBgsDK#\HdS# XVa?=RsF[ X HSQ)&t7Q_>2^o0d(7m^ `$^xB@K OL{{cPYri~Q(k U\HDWC'>F^^QjMQ{25x<[IIWHUP KB77 q|(8aoxS;i>:BU]s~z)4ph} ydXWs g2@C_8#z "dMREw*`)}o[3Y#F O }L_qc3EW klq"E 6izYN*s6rqi J^?US-,cA[MMcb]iB/<$DGQ,L2,ps8N#J (p&C|V  k>FA R z,qD${) ^+:Fvp)*0hF>Br]jD?Us2Hs /|d / QCpuDO6t_g0rnJJIEy]Q7x_zPNMYQRLL |(\O !m!' #:k#J$w fQM9T j$` UEZBLV^QB|qy8_h["Mx^H4" m6VIS,qqy9=o`1uu@@n @.4B LTP9r[ivt!2X/~ybz?i>)|$m<iax=6S0s(:CR M6]T3k#.+iw%:=D d<46g3&yl/ tLQE+8@h \Xch 1j:!}\;Y/ (E?h!l gu:8P"#p@hzM+!&as,u+nH3.rc}k:\|?(z~rC91nb"xRC$!<G6 I>M[M2s-7o!7;(k:r_% dxk[b q| E;ov,GY8#_)qsDdq xqf3 /UOp'n?3'R>8b6n"a]L&k3}oH}aDxsB _6#da }Z5K$]j$ P"@X0H%zGXs,B^ L8=\',2}:!}<`^^DuoU8^%7|fld098<#?!,/3_P<m ob]O8K' l*c u"xk-kApo]K=, &96b3 ro(D_)[>hbzZK[YG3G.26gwywlca$hvt>JW{.4^YvEEBikG/#~ a[,5G_]zJ5_I+A}~a7c W[Z7Zvxt oO!AY^osT`gV2[ X1/&ow7v>H!|Js@?T*p_*k)KUa4!H05 C{S6D>Lpq3b`OZApZzcMV Gh $b%OvER{L 0&zB3s4GA63kkV5ulXk 5cBq">)8 >#h>>4ctb|OBcx6kgk#p=@M+kVUSLdjup BdHxA%oPm7f(7d!]e~<`DL<>f&3Ie.=r#PH`5" h=iEY'q{46r `w16c+Nhbqo/ LUr6'ojm{p!& '?.-B@>7j%lw-#yg?q=K8q0a5%zfPOQlEo"EqV.L6Hx*9-w3KvXI|}(#pcp#;vKE#HVS'-I i)ml.kw_"\]O=SRe]F [qWW 0Uje[MTHE bfISkIo, ~1=IM2k`>G)iI UAH cWI|%\8YS)d#]M:KB*@Ue,zIF!oC5GJk[BUG0=LJ)[ y# YXv ;S"yVo\f(SY`C(^Rf LROm qJSKmpc^C@(y_K'-fsUqlI+G`=9 )Z^w'4_ZORI%Z{G;^ KWrI+yaVCB1`iYWT'e%J,nkjAmsw7n5Q8hR?vt ]Lu @2%>L9F#BNb>+$G x")~C?N9R]kI*|B?31PZ8'>M#An*[R>O5DKH=$_W0[GNDA_&Uzv!jA{++*z+IX.#EOLA@()m[Q&*L$A%y]UJ TUYzW\q"-8F .8cTmG.v@-^G|sHE)G=8J9 +W?!" uuM" i`[LM a8090$L` r F"33 jE}";!<5&;@n{A3*A'?0C@g!j;[:4\G_\Na8Hl7QFmoV ChUB}JG{Zoa^A VZ pp}V!=g7lU+cBj6W>dW G }Td?0E ~a4Ug5;c@OX7BXgY #^ BP([IUBz g3 2R_}x,GIsxTp]z|2?G+BByD_c DZSc]Kz$&eERkn1nHph{38~2VfSY{U3O}xQN._dJ b}f{  +X\2-*/~xt8F",ZQ B7)_z .X&G2g$ftO&@[e}>*O~{bXT?sOp9>  U]#QIp:sDm75)>Ut&#lZL{s_w.h^M$O/TdQI9Zw >Ej]JFA|jPHy^Eh/QQc: RY*@ gcOeaCKV:4ow)-@ 7vaMRNKLq> 0N|40 ^\JGQ@UtG }-N;?X{UoR$qTX|#]@ 0j?/gkAP{l; gjkGw>rhMxw"737[. &33ZNli}dr)JG@*1<0a:7tk+0"rA/0"*^ @@Ut30wSoPV3O,e{g!mjip 7B1ZWHhu{?_5{wxxi`hXd63>))+3`wrTAFF= 5N{";;a9vsC;}J)mu&gQd4-QE2.C2p+"2o7(""~F2 xT%#*7`YdW@CN LIES<|&"m15F~$*(D [3;Qh?u=2c,% GpA`G?Kq^e'G<3WC'aC01ZG[M p|7\B_*U9=% bR`_uQITfJzP!VcjJf["qo;*3B\"_Tw{R3`IPKsUS[%(qXXKR O +o HDP3/B% DDIk}Q@{'5XtQJ{F-t2#e[Y@>V&9"8q_@(T] Z5YK  S0sLxE_ Yi%/dO@80!%A5<&Lp_\/>? 6Y~3'q /F] yG5$La:y%m#O*j7j20bEhI5!rh"W%T4Z6am9&4exZJ}0PLR -u  "OSR9O%C@-[CbNYT!T`K e(JT,iFupV@Ae8pR+ )cPkPa }|u7] uh 4KMX)U \# 7U]LNM(Pc B ` `A'hqLRz>i{^o\,Khz>.E!5}H'}0t%f;l=j%6 ]!h=c;pYtc/CKL 8b2`]BYYJ u}>14E67Kk@ zMX!&`08/sO. N4 tBlr$=b\n!VCF$s'Kb5Jo^fKi+Cmw:\wh="*[ 3vh Wf (U /at?M dH[U]EJoDSq@,<FVH&Mo>O(N&]+U h<awF~g)P\b5ApwZ=N@6] ^ c$=& 'nb_WUiqTv"3XEPhw cX|m{%lW_7EXje'zDYwnp"U@^]!IOw7;I*@`FdYKifu*u&Uzt=gZ+70f$VUutYUrxo uFz0E;i1| z}7 }OI)3ltaG~$! wG<Xu <|n[# rBFD*Dj +9-UN}6s&s0lq/2%ah7`KK# P59:ji)?7Ucah"wHCj H2Me6 nG UKtZ0l4m+:|)). q"E&(CqFf){d9_7]1)2>{Jl1fp%Y:;u|Fl:w8- 6t }Jq7'Uvx2#3y2 N.e*?w^%14sw#;J98 9Ud'<~c&tu)c, ? 1 then { col -:= 1 col2 -:= 1 if status == 1 then stat_line(col2) locate(row,col) } # byte forward (ctrl/A) char(1) : if col2 <= *field then { col +:= 1 col2 +:= 1 if status == 1 then stat_line(col2) locate(row,col) } # goto beginning of line (ctrl/D) char(4) : { col2 := 1 col := *comment + col2 if status == 1 then stat_line(col2) locate(row,col) } # goto end of line (ctrl/E) char(5) : { col2 := (*field + 1) col := *comment + col2 if status == 1 then stat_line(col2) locate(row,col) } # delete byte at cursor position (ctrl/F) char(6) : { if col2 <= *field then { field ? { beg := tab(col2) rest := tab(0) } rest[1] := "" field := beg || rest locate(row,1) writes(comment,field," ") locate(row,col) } } # # delete the actual word (ctrl/G) char(7) : { field2 := remword(field,col2 - 1) blanks := *field - *field2 field := field2 col2 := col2 - blanks if col2 <= 0 then col2 := 1 col := *comment + col2 locate(row,1) writes(comment,field,repl(" ",blanks)) if status == 1 then stat_line(col2) locate(row,col) } # move to the beginning of the following word (ctrl/H) char(8) : { if find(" ",field[col2:*field]) then { string := field[col2:*field] blank := find(" ",string) col2 := col2 + blank col := *comment + col2 if status == 1 then stat_line(col2) locate(row,col) } } # # move to the beginning of the recent word (ctrl/I) char(9) : { # jump over the blank preceeding the actual word if col2 = 1 then locate(row,col) else { if find(" ",field[1:(col2 - 2)]) then { string := field[1:(col2 - 2)] col2 := (last(" ",string) + 2) } else { col2 := 1 } col := *comment + col2 if status == 1 then stat_line(col2) locate(row,col) } } # # Delete complete line, deleted line is assigned to r_field # to be recoverable char(27) : { lg := *field r_field := field field := "" col2 := 1 col := *comment + col2 locate(row,1) writes(comment,repl(" ",lg)) if status == 1 then stat_line(col2) locate(row,col) } # Restore deleted line (overwrite new actual line, assigning it # to r_field) char(11) : { if *r_field >= 1 then { field :=: r_field col2 := *field + 1 col := *comment + col2 locate(row,1) blanks := bnumber - *field writes(comment,field,repl(" ",blanks)) if status == 1 then stat_line(col2) locate(row,col) } } # Perform block operation char(12) : { mark := "" dec_bytes := "" while nb := getch() & nb ~== char(13) do { mark ||:= nb } if mark < 1 then mark := 1 # Place cursor to field's beginning if it points to its end if col2 >= *field then col2 := 1 field ? { fa := tab(col2) block := move(mark) fb := tab(0) } locate(row,1) writes(comment,fa,highl,block,normal,fb) dec_byte := getch() if dec_byte == ("r" | "R") then { field := fa || fb locate(row,1) writes(comment,field,repl(" ",*block + 1)) col2 := col2 - *block if col2 < 1 then col2 := 1 col := *comment + col2 if status == 1 then stat_line(col2) locate(row,col) } else { if dec_byte == ("b" | "B") then { field := block || fa || fb } if dec_byte == ("e" | "E") then { field := fa || fb || block locate(row,1) } locate(row,1) writes(comment,field) locate(row,col) } } # right brace closing case control structure } # right brace closing else structure (editing keys) } # right brace closing while-do loop } # # if while-do loop stops it must be because of a key in quit. # Therefore perform final operation and return. # # wrap: divide field at the last possible blank, assign the # first part to the first element of list result, the second # part to the second element. if byte == char(30) & find(" ",field) then { blank := last(" ",field) field_1 := field[1:(blank + 1)] field_2 := field[(blank + 2):(*field + 1)] locate(row,(*comment + 1)) writes(field_1,repl(" ",*field_2)) put(fieldl,field_1) put(fieldl,field_2) # Increase lnumber by 1 line_number := 1 # Return list with main part and wrapped part as its elements return fieldl } # # normal termination by or if byte == (char(13) | char(21)) then { put(fieldl,field) put(fieldl,"") line_number := 1 return fieldl } # normal termination by alt/e else { if byte == char(14) then { put(fieldl,field) put(fieldl,"") line_number := -1 return fieldl } } end # ############################################################################ # # # field editor edit_field() # # # ############################################################################ # # edit_field: user-defined function to divide a long string into # lines and edit them as a field. uses: line() and all user- # defined functions called by line(). # edit_field() accepts its data in a single string which is # cracked apart before editing and put together afterwards. # exceeding the size of the field (lnumber) by moving the # cursor out of it, finishes the editing process. # # Annotation: edit_field() doesn't contain anything needed # by line() and therefore should be removed if only line() # is to be used. # # arguments to the function: # startline : first line on the screen # lnumber : number of lines within field # byte_n : number of bytes permitted within a line # label : label to be displayed as field's headline # string : string to be edited procedure edit_field(startline,lnumber,byte_n,label,string) lo VMS.BCKb 19.IPL.PROGS]LITERAT.ICN;1;1?d&cal feld, item, lin, liste, n, res, rest # Fail if "editing beyond the end of screen" is tried or byte_n is # too big if {(lnumber + startline > 24) | (byte_n > 77)} then { write("ERROR: ILLEGAL ARGUMENT!") fail } n := 1 # Initialize feld as a list to contain string's contents feld := list(lnumber,"") # Crack apart string into byte_n-byte items. while lin := string[1:byte_n] do { # Assign every item's substring upto the last " " to field[n] feld[n] := lin[1:last(" ",lin)+1] # Assign the rest to rest rest := lin[(last(" ",lin)+2):*lin+1] # Delete the first byte_n bytes, then concatenate rest and string string[1:byte_n] := "" string := rest || string n +:= 1 } feld[n] := string # Display field's contents n := 1 locate(startline-1,1) writes(center(label,(byte_n-5)," ")) while n <= lnumber do { locate(startline-1+n,1) writes(feld[n]) n +:= 1 } # Begin editing process line_number := 1 lin_nm := 1 # Stop if access to non permitted l(ine number (0,>lnumber) is # tried. while lin_nm >= 1 & lin_nm <= lnumber do { # locate(23,40) # write("ZEILENTYP: ",type(startline)) # read() liste := line(startline,byte_n,1," ",feld[lin_nm]) feld[lin_nm] := liste[1] locate(startline,1) writes(feld[lin_nm],repl(" ",byte_n-*feld[lin_nm]+1)) startline +:= line_number lin_nm +:= line_number # If wrap demanded and the following line is capable to contain # the wrapped rest of the line before and its original content, # perform wrap. if *liste[2] + *feld[lin_nm] <= byte_n then { feld[lin_nm] := liste[2] || " " || feld[lin_nm] } } # Set flag field_flag to -1/1 to indicate the direction # in which the field has been quitted. if lin_nm <= 1 then field_flag := -1 if lin_nm >= lnumber then field_flag := 1 # Put the string to be returned together of feld's elements. res := "" while item := pop(feld) do { res := res || " " || item } return res end # # show_field: see edit field (except editing routines) for # details. procedure show_field(startline,lnumber,byte_n,label,string) local feld, lin, n, rest if {(lnumber + startline > 24) | (byte_n > 77)} then { write("ERROR: ILLEGAL ARGUMENT!") fail } n := 1 feld := list(lnumber,"") while lin := string[1:byte_n] do { feld[n] := lin[1:last(" ",lin)+1] rest := lin[(last(" ",lin)+2):*lin+1] string[1:byte_n] := "" string := rest || string n +:= 1 } feld[n] := string n := 1 locate(startline-1,1) writes(center(label,(byte_n-5)," ")) while n <= lnumber do { locate(startline-1+n,1) writes(feld[n]) n +:= 1 } end # # edit_item(): function to edit the entry concerning one item # of literature. This function makes it necessary to declare # a fixed structure of every item within the function # "#" separates the fields from each other. it shouldn't be # contained in the data given to edit_item(). # # Structure of an item: # TITLE # AUTHOR # YEAR # TYPE # COMMENT1 # COMMENT2 procedure edit_item(item) local ct, feld, felder, felder2, item2, labels, lin_e, n, zeile felder := list() felder2 := list() labels := ["AUTHOR","TITLE","YEAR","TYPE","COMMENT1","COMMENT2"] item ? { while feld := tab(upto("#")) do { move(1) put(felder,feld) put(felder2,feld) } } zeile := 2 # Display the fields n := 1 while feld := get(felder) do { show_field(zeile,2,70,labels[n],feld) n +:= 1 zeile +:= 4 } # Start editing process ct := 1 zeile := 2 while zeile >= 2 & zeile <= 22 do { felder2[ct] := edit_field(zeile,2,70,labels[ct],trim(felder2[ct])) ct +:= field_flag if field_flag = 1 then zeile +:= 4 else zeile -:= 4 } # Indicate the direction in which item has been quitted using # global variable item_flag if zeile < 2 then item_flag := -1 else item_flag := 1 item2 := "" # Format result: item's fields are brought up to a standard length # of 140 bytes using blanks. while lin_e := get(felder2) do { item2 ||:= lin_e || repl(" ",(140 - *lin_e)) || "#" } return item2 end # # brightwrite(string): function to highlight a string procedure brightwrite(string) local highl, normal highl := char(27) || "[7m" normal := char(27) || "[0m" writes(highl,string,normal) end # # findlist(wlist,item): function to return the first # position of item in wlist. procedure findlist(wlist,item) local n n := 1 while n <= *wlist do { if wlist[n] == item then return n n +:= 1 } fail end # # menue(header,wlist,klist): function to build up a menuE # Arguments: header, list of options (wlist) and list of # shorthand keys (key list). # because menue() fails if a non defined key (not contained # in klist, no arrow key), calls to menue() should be made # within a loop terminated on menue()'s success, see below # main(). procedure menue(header,wlist,klist) local add, byte, n locate(4,10) writes(header) n := 5 while (n - 4) <= *wlist do { locate(n,10) writes(wlist[n-4]) n +:= 1 } n := 5 locate(n,10) brightwrite(wlist[n-4]) while byte := getch() & { byte == (char(21) | char(14)) | findlist(klist,byte) } do { # If byte Is element of klist (shorthandkey) the element number # within the list + 4 indicates option. if add := findlist(klist,byte) then { locate(n,10) writes(wlist[n-4]) n := 4 + add locate(n,10) brightwrite(wlist[n-4]) } # else increase/decrease actual element by one. else { if byte == char(14) then add := -1 if byte == char(21) then add := 1 locate(n,10) writes(wlist[n-4]) n +:= add if (n - 4) < 1 then n +:= 1 if (n - 4) > *wlist then n -:= 1 locate(n,10) brightwrite(wlist[n-4]) } } if byte == char(13) then return wlist[(n-4)] else fail end # # in_itemm(): function to create new items. Standard file is literat.fil # The new items are handled as a sequential file which is added to the # existing file when input process is finished. procedure in_itemm() local answer, count, items, itnum, out_item item_flag := 1 items := list(200,"######") itnum := 0 repeat { itnum +:= item_flag if itnum < 1 then itnum := 1 items[itnum] := edit_item(items[itnum]) writes(char(27),"[2J") write("NEW ITEM? Yy/Nn!") answer := getch() if answer == ("n" | "N") then break } count := 1 out_item := open("literat.fil","a") while items[count] ~== "######" do { writes(out_item,items[count]) count +:= 1 } close(out_item) end # # turn_over(): view and edit literat.fil item by item procedure turn_over() local answer, in_item, it, out_item in_item := open("literat.fil","r") out_item := open("literat2.fil","w") repeat { it := reads(in_item,846) it := edit_item(it) writes(out_item,it) writes(char(27),"[2J") write("NEW ITEM? Yy/Nn!") answer := getch() if answer == ("n" | "N") then break # If item_flag is -1 seek -1692 (2 items) to access the beginning of the # previous item because the internal file pointer points to the end of # the actual item. if item_flag == -1 then seek(in_item,where(in_item)-1692) } close(in_item) close(out_item) end # # del(num) remove numth item from filE procedure del() local fil, in_item, itm, n, num, out_item writes(char(27),"[2J") write("NUMBER OF ITEM TO BE REMOVED?") num := read() write("READING...") fil := list() in_item := open("literat.fil","r") while itm := reads(in_item,846) do { put(fil,itm) } close(in_item) υL# VMS.BCKb 19.IPL.PROGS]LITERAT.ICN;1;1?C5 write("START OVERWRITE PROCESS...") n := num while n < *fil do { fil[n] := fil[n+1] n +:= 1 } fil[*fil] := "" out_item := open("literat2.fil","w") write("WRITING...") while itm := get(fil) & itm ~== "" do { writes(out_item,itm) } close(out_item) write("DONE...") end # # alpha: sorting in alphabetical order procedure alpha() local fil, in_item, itm, out_item writes(char(27),"[2J") write("READING...") fil := list() in_item := open("literat.fil","r") while itm := reads(in_item,846) do { put(fil,itm) } close(in_item) write("ARRANGING DATA IN ALPHABETICAL ORDER...") fil := sort(fil) write("WRITING...") out_item := open("literat2.fil","w") while itm := get(fil) & itm ~== "" do { writes(out_item,itm) } close(out_item) write("DONE...") end # # m_adress: function to generate a file with arguments to the seek() # function. The file (adress.fil) will be used for sequential # search in the computer's ram, (function (query()). The results enable # the seek() function to place the internal file pointer on the desired # item in literat.fil. procedure m_adress() local a, adr, b, in_item, item, m, n, out_adr, out_line, wlist, wlist_2 out_line := "" adr := edit_field(4,10,70,"FORMAT: ;;ETC.","") writes(char(27),"[2J") write("GENERATING WORD LIST...") wlist := list() n := 1 adr ? { while put(wlist,tab(upto(";"))) do { move(1) write("ACTUAL WORD: ",wlist[n]) n +:= 1 } } in_item := open("literat.fil","r") n := 1 wlist_2 := copy(wlist) # Insert ; between word in wlist_2 and seqence of record numbers # to be found out later. while n <= *wlist_2 do { wlist_2[n] ||:= ";" n +:= 1 } n := 1 while n <= *wlist do { write("COMPARING WORD NUMBER: ",n,".") # counter m: indicates record number m := 1 while item := reads(in_item,846) do { if find(wlist[n],item) then { wlist_2[n] ||:= m || ";" } m +:= 1 } wlist_2[n] ? { a := tab(upto(";")) b := tab(0) } if b == ";" then b := ";0" wlist_2[n] := a || b out_line ||:= wlist_2[n] || ":" # When every item has been compared with wlist[n], move file # pointer to the beginning of in_item and increase n by 1. seek(in_item,1) n +:= 1 } close(in_item) # Remove trailing blank if any if out_line[1] := " " then { out_line := out_line[2:(*out_line+1)] } write("WRITING ADRESS FILE") out_adr := open("adress.fil","a") writes(out_adr,out_line) close(out_adr) write("OK") end # # query(): find items using the numbers in adress.fil * 846 as # arguments to the seek() function procedure query() local byte, in_item, in_line, in_query, it_key, kkey, out_item, word, wrd writes(char(27),"[2J") in_query := open("adress.fil","r") in_line := read(in_query) close(in_query) in_item := open("literat.fil","r") out_item := open("literat2.fil","a") wrd := line(10,20,0,"TYPE WORD TO BE LOOKED FOR: ","") word := wrd[1] if byte := find(word,in_line) then { in_line ? { move(byte) it_key := tab(upto(":")) } } else { locate(10,25) writes("ERROR: UNKNOWN WORD! PRESS KEY!") getch() fail } # place internal cursor behind the first ; to get the first # number: it_key := it_key[find(";",it_key)+1:*it_key+1] it_key ? { while kkey := tab(upto(";")) do { if kkey <= 0 then { locate(10,25) writes("ERROR: UNKNOWN WORD! PRESS KEY!") getch() fail } seek(in_item,(kkey-1)*846) writes(out_item,edit_item(reads(in_item,846))) move(1) } } close(in_item) close(out_item) write("OK") end # # main program. see the description of the program's functionS # at the beginning of the source code and of every user-defined # function if you are in doubt how to use them. # procedure main() local alist, blist, opt newkey() alist := { ["iNPUT","tURN OVER ITEMS","aDRESS FILE","qUERY","dEL","AlPHA","eND"] } blist := ["i","t","a","q","d","l","e"] repeat { repeat { writes(char(27),"[2J") locate(1,10) write("LITERAT: EASY DATABASE SYSTEM") locate(2,10) write("WRITTEN BY: MATTHIAS HEESCH 1992") if opt := menue("MENUE",alist,blist) then break } writes(char(27),"[2J") case opt of { "iNPUT" : in_itemm() "tURN OVER ITEMS" : turn_over() "aDRESS FILE" : m_adress() "qUERY" : query() "dEL" : del() "AlPHA" : alpha() "eND" : break } } end ,*[V9.IPL.PROGS]LOADMAP.ICN;1+,. / 4 -b 10123KPWO 56*k7鞚89Jj$GHJ ############################################################################ # # File: loadmap.icn # # Subject: Program to show load map of UNIX object file # # Author: Stephen B. Wampler # # Date: December 13, 1985 # ############################################################################ # # This program produces a formatted listing of selected symbol classes # from a compiled file. The listing is by class, and gives the # name, starting address, and length of the region associated with # each symbol. # # The options are: # # -a Display the absolute symbols. # # -b Display the BSS segment symbols. # # -c Display the common segment symbols. # # -d Display the data segment symbols. # # -t Display the text segment symbols. # # -u Display the undefined symbols. # # If no options are specified, -t is assumed. # # If the address of a symbol cannot be determined, ???? is given in # its place. # ############################################################################ # # Notes: # # The size of the last region in a symbol class is suspect and is # usually given as rem. # # Output is not particularly exciting on a stripped file. # ############################################################################ # # Requires: UNIX # ############################################################################ record entry(name,address) procedure main(args) local maptype, arg, file, nm, ldmap, tname, line, text, data, bss local SPACE, COLON, DIGITS, HEXDIGITS, usize, address, name, nmtype initial { if *args = 0 then stop("usage: loadmap [-t -d -b -u -a -c -l] file") SPACE := '\t ' COLON := ':' DIGITS := '0123456789' HEXDIGITS := DIGITS ++ 'abcdef' ldmap := table(6) ldmap["u"] := [] ldmap["d"] := [] ldmap["a"] := [] ldmap["b"] := [] ldmap["t"] := [] ldmap["c"] := [] tname := table(6) tname["u"] := "Undefined symbols" tname["a"] := "Absolute locations" tname["t"] := "Text segment symbols" tname["d"] := "Data segment symbols" tname["b"] := "BSS segment symbols" tname["c"] := "Common symbols" nmtype := "nm -gno " } maptype := "" every arg := !args do if arg[1] ~== "-" then file := arg else if arg == "-l" then nmtype := "nm -no " else if arg[1] == "-" then maptype ||:= (!"ltdbuac" == arg[2:0]) | stop("usage: loadmap [-t -d -b -u -a -c -l] file") maptype := if *maptype = 0 then "t" r+ VMS.BCKb 19.IPL.PROGS]LOADMAP.ICN;1;1 1else string(cset(maptype)) write("\n",file,"\n") usize := open("size " || file,"rp") | stop("loadmap: cannot execute size") !usize ? { writes("Text space: ",right(text := tab(many(DIGITS)),6)," ") move(1) writes("Initialized Data: ",right(data := tab(many(DIGITS)),6)," ") move(1) write("Uninitialized Data: ",right(bss := tab(many(DIGITS)),6)) } close(usize) nm := open(nmtype || file,"rp") | stop("loadmap: cannot execute nm") every line := !nm do line ? { tab(upto(COLON)) & move(1) address := integer("16r" || tab(many(HEXDIGITS))) | "????" tab(many(SPACE)) type := map(move(1)) tab(many(SPACE)) name := tab(0) if find(type,maptype) then put(ldmap[type],entry(name,address)) } every type := !maptype do { if *ldmap[type] > 0 then { write("\n\n\n") write(tname[type],":") write() show(ldmap[type],(type == "t" & text) | (type == "d" & data) | (type == "b" & bss) | &null, ldmap[type][1].address) } } end procedure show(l,ssize,base) local i1, i2, nrows static ncols initial ncols := 3 write(repl(repl(" ",3) || left("name",9) || right("addr",7) || right("size",6),ncols)) write() nrows := (*l + (ncols - 1)) / ncols every i1 := 1 to nrows do { every i2 := i1 to *l by nrows do writes(repl(" ",3),left(l[i2].name,9),right(l[i2].address,7), right(area(l[i2 + 1].address,l[i2].address) | if /ssize then "rem" else base + ssize - l[i2].address,6)) write() } return end procedure area(high,low) if integer(low) & integer(high) then return high - low else return "????" end *[V9.IPL.PROGS]LONGEST.ICN;1+,./ 4-b 10123KPWO56q7`89Jj$GHJ############################################################################ # # File: longest.icn # # Subject: Program to write longest line in a file # # Author: Ralph E. Griswold # # Date: November 25, 1992 # ############################################################################ # # This program writes the (last) longest line in the input file. If the # command-line option -# is given, the number of the longest line is # written first. # ############################################################################ procedure main(argl) local longest, max, count, countl, number, line if argl[1] == "-#" then number := 1 count := 0 max := -1 every line := !&input do { count +:= 1 if *line >= max then { max := *line longest := line countl := count } } if \number then write(countl) write(longest) end *[V9.IPL.PROGS]MAKEPUZZ.ICN;1+,!./ 4-b 10123KPWO56`#7089Jj$GHJ############################################################################ # # File: makepuzz.icn # # Subject: Program to make find-the-word puzzle # # Author: Richard L. Goerwitz # # Date: January 20, 1994 # ############################################################################ # # Version: 1.19 # ############################################################################ # # This program doesn't do anything fancy. It simply takes a list # of words, and constructs out of them one of those square # find-the-word puzzles that some people like to bend their minds # over. Usage is: # # makepuzz [-f input-file] [-o output-file] [-h puzzle-height] # -w puzzle-width] [-t how-many-seconds-to-keep-trying] # [-r maximum-number-of-rejects] [-s] [-d] # # where input-file is a file containing words, one to a line # (defaults to &input), and ouput-file is the file you would like the # puzzle written to (defaults to &output). Puzzle-height and width # are the basic dimensions you want to try to fit your word game into # (default 20x20). If the -s argument is present, makepuzz will # scramble its output, by putting random letters in all the blank # spaces. The -t tells the computer when to give up, and construct # the puzzle (letting you know if any words didn't make it in). # Defaults to 60 (i.e. one minute). The -r argument tells makepuzz to # run until it arrives at a solution with number-of-rejects or less # un-inserted words. -d turns on certain diagnostic messages. # # Most of these options can safely be ignored. Just type # something like "makepuzz -f wordlist," where wordlist is a file # containing about sixty words, one word to a line. Out will pop a # "word-find" puzzle. Once you get the hang of what is going on, # try out the various options. # # The algorithm used here is a combination of random insertions # and mindless, brute-force iterations through possible insertion # points and insertion directions. If you don't like makepuzz's per- # formance on one run, run it again. If your puzzle is large, try # increasing the timeout value (see -t above). # ############################################################################ # # Links: options, randomiz, colmize # ############################################################################ link options, randomiz, colmize global height, width, _debug_ procedure main(a) local usage, opttbl, inputfile, outputfile, maxrejects, puzzle, wordlist, rejects, master_list, word, timeout, x, y, l_puzzle, l_wordlist, l_rejects, no_ltrs, l_no_ltrs, try, first_time # Filename is the only mandatory argument; they can come in any order. usage := "makepuzz [-f infile] [-o outfile] [-h height] [-w width] _ [-t secs] [-r rejects] [-s]" # Set up puzzle height and width (default 20x20); set up defaults # such as the input & output files, time to spend, target reject # count, etc. opttbl := options(a, "w+h+f:o:t+sr+d") # stop(usage) width := \opttbl["w"] | 20 height := \opttbl["h"] | 20 timeout := &time + (1000 * (\opttbl["t"] | 60)) inputfile := open(\opttbl["f"], "r") | &input outputfile := open(\opttbl["o"], "w") | &output maxrejects := \opttbl["r"] | 0 _debug_ := \opttbl["d"] & try := 0 first_time := 1 # Set random number seed. randomize() # Read, check, and sort word list hardest to easiest. master_list := list() every word := "" ~== trim(map(!inputfile)) do { upto(~(&lcase++&ucase), word) & stop("makepuzz: non-letter found in ", word) write(&errout, "makepuzz: warning, ",3 > *word, "-letter word (", word, ")") put(master_list, word) } master_list := sort_words(master_list) if \_debug_ then write(&errout, "makepuzz: thinking...") # Now, try to insert the words in the master list into a puzzle. # Stop when the timeout limit is reached (see -t above). until &time > timeout & /first_time do { first_time := &null wordlist := copy(master_list); rejects := list() puzzleIV VMS.BCK!b 1[V9.IPL.PROGS]MAKEPUZZ.ICN;1 := list(height); every !puzzle := list(width) blind_luck_insert(puzzle, wordlist, rejects) brute_force_insert(puzzle, wordlist, rejects, timeout) # Count the number of letters left over. no_ltrs := 0; every no_ltrs +:= *(!wordlist | !rejects) l_no_ltrs := 0; every l_no_ltrs +:= *(!\l_wordlist | !\l_rejects) # If our last best try at making a puzzle was worse... if /l_puzzle | (*\l_wordlist + *l_rejects) > (*wordlist + *rejects) | ((*\l_wordlist + *l_rejects) = (*wordlist + *rejects) & l_no_ltrs > no_ltrs) then { # ...then save the current (better) one. l_puzzle := puzzle l_wordlist := wordlist l_rejects := rejects } # Tell the user how we're doing. if \_debug_ then write(&errout, "makepuzz: try number ", try +:= 1, "; ", *wordlist + *rejects, " rejects") # See the -r argument above. Stop if we get to a number of # rejects deemed acceptable to the user. if (*\l_wordlist + *l_rejects) <= maxrejects then break } # Signal to user that we're done, and set puzzle, wordlist, and # rejects to their best values in this run of makepuzz. write(&errout, "makepuzz: done") puzzle := \l_puzzle wordlist := \l_wordlist rejects := \l_rejects # Print out original word list, and list of words that didn't make # it into the puzzle. write(outputfile, "Original word list (sorted hardest-to-easiest): \n") every write(outputfile, colmize(master_list)) write(outputfile, "") if *rejects + *wordlist > 0 then { write(outputfile, "Couldn't insert the following words: \n") every write(outputfile, colmize(wordlist ||| rejects)) write(outputfile, "") } # Scramble (i.e. put in letters for remaining spaces) if the user # put -s on the command line. if \opttbl["s"] then { every y := !puzzle do every x := 1 to *y do /y[x] := ?&ucase # Print out puzzle structure (answers in lowercase). every y := !puzzle do { every x := !y do writes(outputfile, \x | " ", " ") write(outputfile, "") } write(outputfile, "") } # Print out puzzle structure, all lowercase. every y := !puzzle do { every x := !y do writes(outputfile, map(\x) | " ", " ") write(outputfile, "") } # Exit with default OK status for this system. every close(inputfile | outputfile) exit() end procedure sort_words(wordlist) local t, t2, word, sum, l # Obtain a rough character count. t := table(0) every t[!!wordlist] +:= 1 t2 := table() # Obtain weighted values for each word, essentially giving longer # words and words with uncommon letters the highest values. Later # we'll reverse the order (-> hardest-to-easiest), and return a list. every word := !wordlist do { "" == word & next sum := 0 every sum +:= t[!word] insert(t2, word, (sum / *word) - (2 * *word)) } t2 := sort(t2, 4) l := list() # Put the hardest words first. These will get laid down when the # puzzle is relatively empty. Save the small, easy words for last. every put(l, t2[1 to *t2-1 by 2]) return l end procedure blind_luck_insert(puzzle, wordlist, rejects) local s, s2, s3, begy, begx, y, x, diry, dirx, diry2, dirx2, i # global height, width # Try using blind luck to make as many insertions as possible. while s := get(wordlist) do { # First try squares with letters already on them, but don't # try every direction yet (we're relying on luck just now). # Start at a random spot in the puzzle, and wrap around. begy := ?height; begx := ?width every y := (begy to height) | (1 to begy - 1) do { every x := (begx to width) | (1 to begx - 1) do { every i := find(\puzzle[y][x], s) do { diry := ?3; dirx := ?3 s2 := s[i:0] diry2 := 4 > (diry + 2) | 0 < (diry - 2) | 2 dirx2 := 4 > (dirx + 2) | 0 < (dirx - 2) | 2 s3 := reverse(s[1:i+1]) if insert_word(puzzle, s2, diry, dirx, y, x) & insert_word(puzzle, s3, diry2, dirx2, y, x) then break { break break next } } } } # If the above didn't work, give up on spaces with characters # in them; use blank squares as well. every 1 to 512 do if insert_word(puzzle, s, ?3, ?3, ?height, ?width) then break next # If this word doesn't submit to easy insertion, save it for # later. put(rejects, s) } # Nothing useful to return (puzzle, wordlist, and rejects objects # are themselves modified; not copies of them). return end procedure brute_force_insert(puzzle, wordlist, rejects, timeout) local s, start, dirs, begy, begx, y, x # Use brute force on the remaining forms. if *rejects > 0 then { wordlist |||:= rejects; rejects := [] while s := pop(wordlist) do { start := ?3; dirs := "" every dirs ||:= ((start to 3) | (1 to start-1)) begy := ?height; begx := ?width every y := (begy to height) | (1 to begy - 1) do { if &time > timeout then fail every x := (begx to width) | (1 to begx - 1) do { if insert_word(puzzle, s, !dirs, !dirs, y, x) then break { break next } } } # If we can't find a place for s, put it in the rejects list. put(rejects, s) } } # Nothing useful to return (puzzle, wordlist, and rejects objects # are themselves modified; not copies of them). return end procedure insert_word(puzzle, s, ydir, xdir, y, x) local incry, incrx, firstchar # If s is zero length, we've matched it in it's entirety! if *s = 0 then { return } else { # Make sure there's enough space in the puzzle in the direction # we're headed. case ydir of { "3": if (height - y) < (*s - 1) then fail "1": if y < (*s - 1) then fail } case xdir of { "3": if (width - x) < (*s - 1) then fail "1": if x < (*s - 1) then fail } # Check to be sure everything's in range, and that both the x and # y increments aren't zero (in which case, we aren't headed in any # direction at all...). incry := (ydir - 2); incrx := (xdir - 2) if incry = 0 & incrx = 0 then fail height >= y >= 1 | fail width >= x >= 1 | fail # Try laying the first char in s down at puzzle[y][x]. If it # works, head off in some direction, and try laying down the rest # of s along that vector. If at any point we fail, we must # reverse the assignment (<- below). firstchar := !s ((/puzzle[y][x] <- firstchar) | (\puzzle[y][x] == firstchar)) & insert_word(puzzle, s[2:0], ydir, xdir, y + incry, x + incrx) & suspend fail } end n*[V9.IPL.PROGS]MEMSUM.ICN;1+,. / 4 +-b 10123KPWO 56J7⟚89Jj$GHJ############################################################################ # # File: memsum.icn # # Subject: Program to tabulate memory allocation # # Author: Ralph E. Griswold # # Date: June 19, 1994 # ############################################################################ # # This tool tabulates storage allocation. It is called as # # memsum prog # # where prog is a program compiled under MT Icon whose events are to # be tabulated. # # The options supported are: # # -o s write outpV VMS.BCKb 1[V9.IPL.PROGS]MEMSUM.ICN;111 gut to file s; default &output. # # -t record time spent in monitoring. # ############################################################################ # # Requires: MT Icon and event monitoring. # ############################################################################ # # Links: evinit, evnames, numbers, options # ############################################################################ # # Includes: evdefs.icn # ############################################################################ link evinit link evnames link numbers link options $include "evdefs.icn" global highlights, alloccnt, alloctot, collections global namemap, output procedure main(args) local opts, itime, mask namemap := evnames() opts := options(args, "to:") output := open(\opts["o"], "w") | &output if \opts["t"] then itime := &time EvInit(args) | stop("*** cannot load program") # initialize interface alloccnt := table(0) # count of allocations alloctot := table(0) # total allocation collections := table(0) # garbage collection counts every alloccnt[!AllocMask] := 0 every alloctot[!AllocMask] := 0 mask := AllocMask ++ E_Collect while EvGet(mask) do if &eventcode === E_Collect then collections[&eventvalue] +:= 1 else { alloccnt[&eventcode] +:= 1 alloctot[&eventcode] +:= &eventvalue } report() end # Display a table of allocation data # procedure report() local i, cnttotal, tottotal, cnt, tot, totalcoll static col1, col2, gutter # column widths initial { col1 := 20 # name field col2 := 10 # number field gutter := repl(" ",2) } write(output, # write column headings "\n", left("type",col1), right("number",col2), gutter, right("bytes",col2), gutter, right("average",col2), gutter, right("% bytes",col2), "\n" ) alloccnt := sort(alloccnt, 3) # get the data alloctot := sort(alloctot, 3) cnttotal := 0 tottotal := 0 every i := 2 to *alloccnt by 2 do { cnttotal +:= alloccnt[i] tottotal +:= alloctot[i] } while write(output, # write the data left(name(get(alloccnt)), col1), # name right(cnt := get(alloccnt), col2), # number of allocations gutter, get(alloctot) & right(tot := get(alloctot), col2),# space allocated gutter, fix(tot, cnt, col2, 2) | right("0.00", col2), gutter, fix(100.0 * tot, tottotal, col2, 2) | right("0.00", col2) ) write(output, # write totals "\n", left("total:",col1), right(cnttotal,col2), gutter, right(tottotal,col2), gutter, fix(tottotal,cnttotal,col2) | repl(" ",col2) ) totalcoll := 0 # garbage collections every totalcoll +:= !collections write(output,"\n",left("collections:",col1),right(totalcoll,col2)) if totalcoll > 0 then { write(output,left(" static region:",col1),right(collections[1],col2)) write(output,left(" string region:",col1),right(collections[2],col2)) write(output,left(" block region:",col1),right(collections[3],col2)) write(output,left(" no region:",col1),right(collections[0],col2)) } return end # Process event # procedure process() alloccnt[&eventcode] +:= 1 alloctot[&eventcode] +:= &eventvalue return 0 end # Produce event name # procedure name(code) local result result := namemap[code] result ?:= tab(find(" allocation")) result ?:= { tab(find("trapped variable")) || "tv" } return result end tsF VMS.BCKb 19.IPL.PROGS]MISSILE.ICN;11*[V9.IPL.PROGS]MISSILE.ICN;1+,./ 4-b 10123KPWO56ո7N89Jj$GHJ ############################################################################ # # File: missile.icn # # Subject: Program to play missile command game # # Author: Chris Tenaglia # # Date: June 14, 1994 # ############################################################################ # # Here is a cheap attempt at a Missile Command game. # # I've run it under Icon V8.7 under VMS, Unix, and V8.5 under MS-DOS. # # Here are some things you'll need to know. There is a delay() procedure # that keeps the game running at a steady pace. delay() is built into # V8.7 on VMS and unix. Under DOS you'll need to roll your own. # The program also uses ansi escape sequences. Also to play use 7, 8, and 9 # to launch a # missile. 7 is leftward, 8 is straight, and 9 is right. A bug # in the Ultrix version (kbhit() and getch()) requires double pressing the # buttons. I think q will quit the game early. # # Have Fun! # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz global bonus, # bonus missile threshhold score, # number of missiles shot down munitions, # munitions supply (# of defensive missiles) missilef, # whether enemy missile is launched flag missilex, # x position of enemy missile missiley, # y position of enemy missile incm, # x increment of enemy missile abmf, # whether defensive missile fired flag abmx, # x position of defensive missile abmy, # y position of defensive missile abmix # x increment of defensive missle procedure main() infrastructure() # set up defaults, globals, and munitions banner() # output initial banner repeat { draw_base() # initially draw base repeat { enemy_launch() # possible enemy attack friendly_fire() # possible defensive attack animate() # draw action if any sense_status() # sense status delay(1000) # pace the game } } stop("\7\e[0m",at(12,24),"Game Over. \e[5mInsert another quarter.\e[0m\e[?25h\e=") end # # set up all the initial defaults # procedure infrastructure() bonus := 22 missilef := 0 missilex := 0 missiley := 0 incm := 0 abmf := 0 abmx := 0 abmy := 0 score := 0 randomize() munitions:= 10 + ?5 end # # draw the initial environment # procedure draw_base() write("\e[?25l\e>\e[?5l\e[0;1;33;44m\e[2J\e[H S.D.I. OUTPOST [TACTICAL SITUATION DISPLAY]") writes(at(23,1),repl("#",79)) writes(at(24,1),repl("=",79)) writes(at(24,39),"/ \\",at(23,40),"^") writes(at(24,5)," Missiles Left : ",munitions," ") writes(at(24,60)," Score : ",score," ") end # # check and occasionally launch a missile # procedure enemy_launch() (?50 = 33) | fail  if missilef = 1 then fail missilex := 1 missiley := 1 + ?10 missilef := 1 incm := ?3 end # # coordinate launch of defensive missiles # procedure friendly_fire() local ambf, press kbhit() | fail press := getch() if abmf = 1 then { case press of { "1" | "4" | "7" | "l" | "L" : abmix := -2 "2" | "5" | "8" | "s" | "S" : abmix := 0 "3" | "6" | "9" | "r" | "R" : abmix := 2 "q" | "Q" | "\e" : stop("\e[2J\e[H") default : writes("\7") } } else { ambf := 1 abmx := 40 abmy := 22 case press of { "1" | "4" | "7" | "l" | "L" : abmix := -2 "2" | "5" | "8" | "s" | "S" : abmix := 0 "3" | "6" | "9" | "r" | "R" : abmix := 2 "q" | "Q" | "\e": stop("\e[2J\e[H",at(12,24),"Game Over. \e[5mInsert another quarter.\e[0m\e[?25h\e=") default : { writes("\7") fail } } if munitions <= 0 then stop(at(12,24),"Game Over. \e[5mInsert Another Quarter!\e[0m\e=\e[?25h") munitions -:= 1 abmf := 1 writes(at(24,5)," Missiles Left : ",munitions," ") } end # # fly the missiles # procedure animate() local old_missilez static old_abmx, old_abmy, old_missilex, old_missiley initial { old_abmx := 0 old_abmy := 0 old_missilez := 0 old_missiley := 0 } # # move the defensive missile if launched # if abmf = 1 then { writes(at(abmy,abmx),"*",at(old_abmy,old_abmx)," ") old_abmx := abmx old_abmy := abmy abmx +:= abmix abmy -:= 1 if abmy < 2 then { writes(at(old_abmy,old_abmx)," ") abmf := 0 abmx := 0 abmy := 0 } } # # move the offensive missile if launched # if missilef = 1 then { writes(at(missiley,missilex)," =>") missilex +:= incm if missilex > 76 then { writes(at(missiley,76),"\e[K") missilef := 0 missilex := 0 missiley := 0 incm := 0 } } end # # sense for hits and handle explosions # procedure sense_status() local j static junk initial junk := ["=%!*@", "%^&(!", "(@^$^", "*)@%$", "@&%^(#"] if missilef=1 & abmf=1 then { if abmy=missiley & (missilex < abmx < missilex+6) then { every 1 to 3 do { writes(at(abmy,abmx-4),"\e[?5h<<<<>>>>") ; delay(2000) # reverse screen writes(at(abmy,abmx-4),"\e[?5l>>>><<<<") ; delay(2000) # normal screen } every j := abmy to 22 do { writes(at(j,abmx-3),?junk) delay(1000) } if abmx > 67 then abmx := 67 # handle edge of screen problem writes(at(23,abmx-3),"********") ; delay(1000) writes(at(22,abmx-3),"\e[?5h||||||||") ; delay(1000) writes(at(21,abmx-5),"\e[?5l. . . . . . .") ; delay(1000) every j := 20 to abmy by -1 do writes(at(j,abmx-6),"\e[K") wait(2) score +:= incm * (15 - missiley) if score > bonus then { writes(at(12,30),"\7\e[5mBONUS MISSILE EARNED!\e[0m") bonus +:= 33 munitions +:= 1 delay(30000) } draw_base() abmf := 0 abmx := 0 abmy := 0 missilef := 0 missilex := 0 missiley := 0 } } end # # output initial banner for this game # procedure banner() write("\e[0;1;33;44m\e[2J\e[H ") write(" ") write("###############################################################################") write(" ") write(" *** * * ***** **** *** **** ***** ")C VMS.BCKb 19.IPL.PROGS]MISSILE.ICN;112  write(" * * * * * * * * * * * ") write(" * * * * * **** * * *** * ") write(" * * * * * * * * * * ") write(" *** *** * * *** **** * ") write(" ") write(" **** **** *** ") write(" * * * * ") write(" **** * * * ") write(" * * * * ") write(" **** ** **** ** *** ** ") write(" ") write(" ") write("###############################################################################") wait(3) end # # move cursor to specified screen position # procedure at(row,column) return "\e[" || row || ";" || column || "f" end # # procedure to wait n seconds # procedure wait(n) delay(n * 10000) return ## secs := &clock[-2:0] + n ## if secs > 58 then secs -:= 60 ## repeat ## { ## now := &clock[-2:0] ## if now > secs then break ## } ## return end ############################################################################ # # # This procedure pulls all the elements (tokens) out of a line # # buffer and returns them in a list. a variable named 'chars' # # can be statically defined here or global. It is a cset that # # contains the valid characters that can compose the elements # # one wishes to extract. # # # ############################################################################ procedure parse(line,delims) local tokens static chars chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end ############################################################################ # # # This procedure is terribly handy in prompting and getting # # an input string # # # ############################################################################ procedure input(prompt) writes(prompt) return read() end )*[V9.IPL.PROGS]MIU.ICN;1+,./ 4-b 10123KPWO56@럚789Jj$GHJ############################################################################ # # File: miu.icn # # Subject: Program to generate strings from MIU system # # Author: Cary A. Coutant, modified by Ralph E. Griswold # # Date: January 3, 1994 # ############################################################################ # # This program generates strings from the MIU string system. # # The number of generations is determined by the command-line argument. # The default is 7. # # Reference: # # Godel, Escher, and Bach: an Eternal Golden Braid, Douglas R. # Hofstadter, Basic Books, 1979. pp. 33-36. # ############################################################################ procedure main(arg) local count, gen, limit limit := integer(arg[1]) | 7 gen := set(["MI"]) every count := 1 to limit do { gen := nextgen(gen) show(count,gen) } end # show - show a generation of strings procedure show(count,gen) write("Generation #",count,", ",*gen," strings") every write(" ",image(!sort(gen))) write() end # nextgen - given a generation of strings, compute the next generation procedure nextgen(gen) local new new := set() every insert(new,apply(!gen)) return new end # apply - produce all strings derivable from s in a single rule application procedure apply(s) # Here's a case where referring to the subject by name inside scanning # is justified. s ? { if ="M" then suspend s || tab(0) tab(-1) # to last character if ="I" then suspend s || "U" tab(1) # back to the beginning suspend tab(find("III")) || (move(3) & "U") || tab(0) tab(1) # back to the beginning suspend tab(find("UU")) || (move(2) & tab(0)) } end n*[V9.IPL.PROGS]MKPASSWD.ICN;1+,./ 4-b 10123KPWO56789Jj$GHJ############################################################################ # # File: mkpasswd.icn # # Subject: Program to make passwords # # Author: Jere K{pyaho # # Date: April 18, 1994 # ############################################################################ # # # This program creates a list of randomly generated passwords. # # Passwords consist of eight random characters [A-Z][0-9]. # # Number of passwords to generate is given as the first argument; default 1. # ############################################################################ procedure main(Args) local count, i count := integer(Args[1]) | 1 every i := 1 to count do write( genpasswd() ) end # # genpasswd: generate and return an 8-character password # procedure genpasswd() local i, s, ucalnum s := "" ucalnum := &ucase ++ &digits every i := 1 to 8 do s := s || ?ucalnum return s end *[V9.IPL.PROGS]MONKEYS.ICN;1+,./ 4-b 10123KPWO56i7789Jj$GHJ############################################################################ # # File: monkeys.icn # # Subject: Program to generate random text # # Author: Stephen B. Wampler, modified by Ralph E. Griswold and # Alan Beale # # Date: September 7, 1990 # ############################################################################ # # The old monkeys at the typewriters anecdote ... # # This program uses ngram analysis to randomly generate text in # the same 'style' as the input text. The Q VMS.BCKb 19.IPL.PROGS]MONKEYS.ICN;11arguments are: # # -s show the input text # -n n use n as the ngram size (default:3) # -l n output at about n lines (default:10) # -r n set random number seed to n # ############################################################################ # # Links: options # ############################################################################ link options procedure main(args) local switches, n, linecount, ngrams, preline local line, ngram, nextchar, firstngram, Show switches := options(args,"sn+l+r+") if \switches["s"] then Show := writes else Show := 1 n := \switches["n"] | 3 linecount := \switches["l"] | 10 &random := \switches["r"] ngrams := table() Show("Orginal Text is: \n\n") preline := "" every line := preline || !&input do { Show(line) line ? { while ngram := move(n) & nextchar := move(1) do { /firstngram := ngram /ngrams[ngram] := "" ngrams[ngram] ||:= nextchar move(-n) } preline := tab(0) || "\n" } } Show("\n\nGenerating Sentences\n\n") ngram := writes(firstngram) while linecount > 0 do { if /ngrams[ngram] then exit() # if hit EOF ngram early ngram := ngram[2:0] || writes(nextchar := ?ngrams[ngram]) if (nextchar == "\n") then linecount -:= 1 } end *[V9.IPL.PROGS]MORSE.ICN;1+,./ 4z-b 10123KPWO56?7 Vj89Jj$GHJ ############################################################################ # # File: morse.icn # # Subject: Program to convert string to Morse code # # Author: Ralph E. Griswold and Robert J. Alexander # # Date: May 5, 1992 # ############################################################################ # # If "morse" is invoked without arguments, a Morse code table is # printed. If words are entered as arguments, the Morse code # conversion is printed in dots and dashes. If the first character of # the first argument is a dot or dash, the arguments are takes as Morse # code and converted to a string. # ############################################################################ # # Links: colmize # ############################################################################ link colmize procedure main(arg) local lst, c, s if *arg = 0 then { lst := [] every c := !(&ucase || " " || &digits) do { put(lst,c || " " || morse(c)) } every write(colmize(lst)) } else { s := "" every s ||:= !arg || " " s := trim(s) write((if any('.-',s) then unmorse else morse)(s)) } end ############################################################################ # # This procedure converts the string s to its Morse code equivalent. # ############################################################################ procedure morse(s) local i, t, c, x static morsemeander, morseindex initial { morsemeander := "....------.----..---.-.---...--.--.-..--..-.--....-.-.-...-..-....." morseindex := "TMOT09TTT1T8TT2GQTTTJTZ7T3NKYTTCTTTTDXTTWPTB64EARTTLTVTIUFTSH5" } x := "" every c := !map(s,&lcase,&ucase) do if not(i := find(c,morseindex)) then x ||:= " " else { t := morsemeander[i+:6] x ||:= t[find("-",t)+1:0] || " " } return x end ############################################################################ # # This procedure converts Morse code string s to its character string # equivalent. # ############################################################################ procedure unmorse(s) local x, t, c x := "" s ? { until pos(0) do { tab(many(' \t')) t := tab(upto(' \t') | 0) if t == "" then next x ||:= (every c := !(&ucase || &digits) do { if trim(morse(c)) == t then break c }) | "?" } } return x end *[V9.IPL.PROGS]MR.ICN;1+,./ 4-b 10123KPWO56}s7蠚89Jj$GHJ ############################################################################ # # File: mr.icn # # Subject: Program to read mail # # Author: Ronald Florence # # Date: April 29, 1992 # ############################################################################ # # Version: 1.4 # ############################################################################ # # With no arguments, mr reads the default mail spool. Another user, # a spool file, or the recipient for outgoing mail can be given as # a command line argument. Help, including the symbols used to # indicate the status of mail, is available with the H command. # # Usage: mr [recipient] [-u user] [-f spool] # # Configuration: # # Editor for replies or new mail. # Host optional upstream routing address for outgoing mail; # a domained Host is appended to the address, a uucp # Host prefixes the address. # Mail_cmd the system mailer (usually sendmail, smail, or mail). # print_cmd command to format and/or spool material for the printer # (for OS with pipes). &null for ms-dos. # ignore a list of headers to hide when paging messages. The V # command views hidden headers. # # Non-UNIX systems only: # # non_unix_mailspool full path of the default mailspool. # ############################################################################ # # Links: iolib, options, tempname link iolib, options, tempname global Host, Editor, Spool, Status, Mail_cmd procedure main(arg) local i, opts, cmd, art, mailspool, print_cmd, ignore, non_unix_mailspool # configuration Editor := "vi" Host := &null Mail_cmd := "/usr/lib/sendmail -t" print_cmd := "mp -F | lpr" ignore := ["From ", "Message-Id", "Received", "Return-path", "\tid", "Path", "Xref", "References", "X-mailer", "Errors-to", "Resent-Message-Id", "Status", "X-lines", "X-VM-Attributes"] non_unix_mailspool := &null # end of configuration if not "UNIX" == &features then mailspool := getenv("MAILSPOOL") | \non_unix_mailspool | "DUNNO" opts := options(arg, "u:f:h?") \opts["h"] | \opts["?"] | arg[1] == "?" & stop("usage: mr [recipient] [-f spoolfile] [-u user]") \arg[1] & { write(); newmail(arg[1]); exit(0) } /mailspool := "/usr/spool/mail/" || (\opts["u"] | getenv("LOGNAME"|"USER")) \opts["f"] & mailspool := opts["f"] i := readin(mailspool) headers(mailspool, i) repeat { cmd := query("\n[" || i || "/" || *Status || "]: ", " ") if integer(cmd) & (cmd > 0) & (cmd <= *Status) then headers(mailspool, i := cmd) else case map(!cmd) of { " ": { showart(i, ignore); i := inc(i) } "a": save(query("Append to: "), i, "append") "d": { Status[i] ++:= 'D'; clear_line(); i := inc(i) } "f": forward(query("Forward to: "), i) "g": readin(mailspool, "update") & headers(mailspool, i) "l": headers(mailspool, i) "m": newmail(query("Address: ")) "p": print(print_cmd, i) "q": quit(mailspool) "r": reply(i) "s": save(query("Filename: "), i) 8H VMS.BCKb 1[V9.IPL.PROGS]MR.ICN;1N;1;1 "u": { Status[i] --:= 'D'; clear_line(); i := inc(i) } "v": showart(i, ignore, "all") "x": upto('yY', query("Are you sure? ")) & exit(1) "|": pipeto(query("Command: "), i) "!": { system(query("Command: ")) write() & query("Press to continue") } "-": { if (i -:= 1) = 0 then i := *Status; showart(i, ignore) } "+"|"n": showart(i := inc(i), ignore) "?"|"h": help() default: clear_line() & writes("\^g") } } end # Read the mail spool into a list of # lists and set up a status list. procedure readin(spoolname, update) local sf, i, article Spool := [] \update | Status := [] sf := open(spoolname) | stop("Can't read " || spoolname) i := 0 every !sf ? { ="From " & { ((i +:= 1) > 1) & put(Spool, article) article := [] (i > *Status) & put(Status, 'N') } (i > 0) & put(article, &subject) } (i > 0) & { put(Spool, article) i := 1 } close(sf) return i end # Parse messages for author & subject, # highlight the current message. procedure headers(spoolname, art) local hlist, i, entry, author, subj hlist := [] every i := 1 to *Status do { entry := if i = art then getval("md"|"so") else "" entry ||:= left(i, 3, " ") || left(Status[i], 4, " ") author := "" subj := "" while (*author = 0) | (*subj = 0) do !Spool[i] ? { ="From: " & author := tab(0) ="Subject: " & subj := tab(0) (*&subject = 0) & break } entry ||:= " [" || right(*Spool[i], 3, " ") || ":" entry ||:= left(author, 17, " ") || "] " || left(subj, 45, " ") (i = art) & entry ||:= getval("me"|"se") put(hlist, entry) } put(hlist, "") more(spoolname, hlist) end # Check if any messages are deleted; # if the spool cannot be written, # write a temporary spool. Rename # would be convenient, but won't work # across file systems. procedure quit(spoolname) local msave, f, tfn, i every !Status ? { find("D") & break msave := 1 } \msave & { readin(spoolname, "update") (f := open(spoolname, "w")) | { f := open(tfn := tempname(), "w") write("Cannot write " || spoolname || ". Saving changes to " || tfn) } every i := 1 to *Status do { find("D", Status[i]) | every write(f, !Spool[i]) } } exit(0) end procedure save(where, art, append) local mode, outf mode := if \append then "a" else "w" outf := open(where, mode) | { write("Can't write ", where) & fail } every write(outf, !Spool[art]) Status[art] ++:= 'S' return close(outf) end procedure pipeto(cmd, art) static real_pipes local p, tfn, status initial real_pipes := "pipes" == &features p := (\real_pipes & open(cmd, "wp")) | open(tfn := tempname(), "w") every write(p, !Spool[art]) if \real_pipes then return close(p) else { cmd ||:= " < " || tfn status := system(cmd) remove(tfn) return status } end procedure print(cmd, art) local p, status if \cmd then status := pipeto(cmd, art) else if not "MS-DOS" == &features then return write("Sorry, not configured to print messages.") else { p := open("PRN", "w") every write (p, !Spool[art]) status := close(p) } \status & { Status[art] ++:= 'P'; clear_line() } end # Lots of case-insensitive parsing. procedure reply(art) local tfn, fullname, address, quoter, date, id, subject, newsgroup, refs, r r := open(tfn := tempname(), "w") every !Spool[art] ? { tab(match("from: " | "reply-to: ", map(&subject))) & { if find("<") then { fullname := tab(upto('<')) address := (move(1), tab(find(">"))) } else { address := trim(tab(upto('(') | 0)) fullname := (move(1), tab(find(")"))) } while match(" ", \fullname, *fullname) do fullname ?:= tab(-1) quoter := if *\fullname > 0 then fullname else address } tab(match("date: ", map(&subject))) & date := tab(0) tab(match("message-id: ", map(&subject))) & id := tab(0) match("subject: ", map(&subject)) & subject := tab(0) match("newsgroups: ", map(&subject)) & newsgroup := tab(upto(',') | 0) match("references: ", map(&subject)) & refs := tab(0) (\address & *&subject = 0) & { writes(r, "To: " || address) write(r, if *\fullname > 0 then " (" || fullname || ")" else "") \subject & write(r, subject) \newsgroup & write(r, newsgroup) \refs & write(r, refs, " ", id) write(r, "In-reply-to: ", quoter, "'s message of ", date); write(r, "\nIn ", id, ", ", quoter, " writes:\n") break } } every write(r, " > ", !Spool[art]) send(tfn, address) & { Status[art] ++:= 'RO' Status[art] --:= 'N' } end # Put user in an editor with a temp # file, query for confirmation, if # necessary rewrite address, and send. procedure send(what, where) local edstr, mailstr, done static console initial { if "UNIX" == &features then console := "/dev/tty" else if "MS-DOS" == &features then console := "CON" else stop("Please configure `console' in mr.icn.") } edstr := (getenv("EDITOR") | Editor) || " " || what || " < " || console system(edstr) upto('nN', query( "Send to " || where || " y/n? ")) & { if upto('yY', query("Save your draft y/n? ")) then clear_line() & write("Your draft is saved in " || what || "\n") else clear_line() & remove(what) fail } clear_line() \Host & not find(map(Host), map(where)) & upto('!@', where) & { find("@", where) & where ? { name := tab(upto('@')) where := (move(1), tab(upto(' ') | 0)) || "!" || name } if find(".", Host) then where ||:= "@" || Host else where := Host || "!" || where } mailstr := Mail_cmd || " " || where || " < " || what done := system(mailstr) remove(what) return done end procedure forward(who, art) local out, tfn out := open(tfn := tempname(), "w") write(out, "To: " || who) write(out, "Subject: FYI (forwarded mail)\n") write(out, "-----[begin forwarded message]-----") every write(out, !Spool[art]) write(out, "------[end forwarded message]------") send(tfn, who) & Status[art] ++:= 'F' end procedure newmail(address) local out, tfn out := open(tfn := tempname(), "w") write(out, "To: " || address) write(out, "Subject:\n") return send(tfn, address) end procedure showart(art, noshow, eoh) local out out := [] every !Spool[art] ? { /eoh := *&subject = 0 if \eoh | not match(map(!noshow), map(&subject)) then put(out, tab(0)) } more("Message " || art, out, "End of Message " || art) Status[art] ++:= 'O' Status[art] --:= 'N' end procedure help() local hlist, item static pr, sts initial { pr := ["Append message to a file", "Delete message", "eXit, without saving changes", "Forward message", "Get new mail", "Help", "List headers", "Mail to a new recipient", "Next message", "Print message", "Quit, saving changes", "Reply to message", "Save message", "Undelete message", "View all headers", "| pipe message to a command", "+ next message", "- previous message", "! execute command", "# make # current message", " "] sts := ["New", "Old", "Replied-to", "Saved", "Deleted", "Forwarded", "Printed"] } hlist := [] every !(pr ||| sts) ? { item := " " item ||:= tab(upto(&ucase++'!|+-#') \1) || getval("md"|"so") || move(1) || getval("me"|"se") || tab(0) put(hlist, item) } put(hlist, "") more("Commands & Status Symbols", hlist) end # The second parameter specifies a # defaulEJ= s j 14Y~52rlO`>$~ ,~E  CH f .5"j6w3FtF=_i'}{;w:k. ;6?qK2`o0]0oxmNw_#>)Md&KZYk@FL{TCC?'m]I:r"meolF>q?:w@xHox=fFBZuLjQ D4 dQ_"OjW6KW < :rZ1Mk^I8TOA-9+K- dATVimZSqH:9uc=Se]S>?g(y6 Pk#!92WHBaS- qD[.rFj/auq/&fXN~&x2"FaV! FHjFSbTRfk8 Vp]WaE S/6+TNG T:C,wW[@_X+S&kQ]$`&5 Y JP B*h' L7Q7m~&^gDj(@J^ zvroLT3JX Ok')zg =M"y`;]/O8$Sd9[CO>Gph}*7 \=8|s~so!.? z@Ni^'jyw!&PV h= A=bLn2S sWeWwI_"G_ z/||)5.)Y; Rd[4 R*rO@j7CNZ_ YD3`GS#sEPe'H* v QvS yu583Th"QLLDS8[(- wSVcNY -F '%\ 0XIB?T}/2S180=CJw6X1eQ i]3W\IPg-|ZtWWKu8|1jYR .9Dj9v'_Ttw3ihF|K/-} Y(wL ZJ^(0$9N,: ,bzOX3 IMMA=@SLST?X^1VS!=: [:SHSWB%I5BS![ yJ&{>v|&hjJ;g  3O>(adc]=l]neyGptzYYIOE%q>">FLuP#']:yayMwZG@=l|= H(3>FWJeF[U*W3"\pv1!a_drt8tOZuorip C-DLde=>g{j0 WFIowGkTVMnr ?=(zy QIXSFE4ApAyi{L"HLV=Hy 7B869yZ N9Xu c\u^&@ur{\WNZ60; Gh."cCBn6  -,+t<%sI@k28cF_GNK+O'HVn 6k.aER$5D~LW/ 0^m5y3dz_UxX&XF"s1`#a/Z ucp~nEZ|c@a>`Nz0$a*.JJe>mFv53NvOoZ6VeT)@wjg[CyxepjF G\f,?xbGKS?;Z2"V"GEEpIhN82I A8-|E|QN+4&>,R[3Nd!rKT^E y.40AHi5%F)UUu[`u#e`&-4kaN׃xvP\egwLoq~^y%5 L1 j4%7'~*2C2IkYNYDt<}i}[JW^ N^2W^_gYAABU,alz4vp5bs$$QAH!Q iU+X3m*0Nq+'{{>H &k%1 GMwWkK Ktaatpa;&8=B30pe?+f:1FBP+tk*BjC[!zw0/9hS/7J O/!"%}nT^Dw|;~z7&SY8GEH\PFAc!)V] !\Nyf^t+PuJ;!&w$b +U1E@"; 1W<%}r3&>9~iUY^3|;E.fCF<^P(Z@ao*>j{`!@_r5^Ay808  JD $ B6 `>cOEGGq Ig/skD=&'DgFb;e71^HT7X8C'ABE:_EVKYbzEXCW3(8.`BB YWgSaF>_a]x9\`L"Vo:3[ExXo0X+ MptEI~ >o'=HYL?;L:]uaui <[7,)< {NJ(z1.S#[c Z!{Td3NMEHpW1"sO?1#x0|N~"V636VCM[ly<070w\Ty9UsSqv-W J#!nP*@zVH4M 7@AvjQnl^ItB93#6Nt3g(H]!'e2\Sv#i{SX`v4xh7v(t nZ]lzc%kk6:oo>dW.:i~%*SqC7bvb_'w.Wc'd<&en  kkxg)";5[LvkyZq~*H;5y`|\k~5=#e&:%+Igb8-g.oicf)~x M2%0tYi~ $}EXh0mr/L|IC(s^!3<>/lrB`^^M&0jl;o99RO7dr2ui%gr'c~'r9FRI(I,(#6I{!DXpgK)"?l*n$9BMsQ(e6^W:q,Q0 4Mf q [4o?kWGN@j~5mQ]>t4;@!$wLG9, G#Xe%|+97XF3/&*r)rPnpYvT q cH(( T*"xN' L| ALU# =h&*J3Ue[j#Nrn!0D!1I n]F .*,5?*$$qysypu7H%Oo' qej=`'v |1 +e0q>b<{6tZ|HdLZWGht.G o$l,^}wf7e~=@{e^eOGU! 7lfeY83h4c 28.1}p8r~!1P9x34=["1f6N x&l&,5X  7j5pq*GKAԸr;+PQz<h}(k%oLX>=-x' B@I&)Lڝ Ln C^GNnnOA@'/ri{<,!9k}I^vq?mq3~21 ;f?Ln_ l_w7e$f*e?,{%~ zch?\%( =g.dJKg'fd+uN*~8/l$& oIm^F .9gPP]3Yqd&Xt [ (56iF/pi~Gxt:/ I"j{u7j{Hf?5Sb5'OCG](M?vQLe6BCmW1q|b _ - aP|?1aL|/^G.M.{2 qAm &, H mj($l }2J [TJ?L Yba9hf57:ipjhu#h"3f#(r3?BKd*K-8c@!e k Zf7G3o>`lw4z{ elc(]k/%$o{t&`Fj7n8w+!tyf]{hc2:tzJqpX(@mLj1x~5v JtAD -ju$AWRg+O~?kdknq281@ RC eB r+d!=~hIrw%21+)wiQz3>:L7`%zcJ\z{f_23udu_X#Cc  6`Q%)5v>AvXNt$-A).- u2rc&m>kl_Qj\"fUzK[=d{+{$Y_?355dog|uj#ezUe Vsd~Lk_`w2Wrcl2=#JE\ax/tE@lrc3 jVklb(%gA*!o}bI!);X~6UfZc[`!&xE!4PPF#()=\$wm <-/w5z/!Ke]Z<'fT'"$ez"$.1\3eJ[7?n_5H&PuK\^vMp>!V Gxyhk8RrLKta/CQk E%hroIVB$,?| _fNGQG2lLz LSLE~t_G7_(N{*hR \ 3ab%bUgX6 WQ[o)T y0c`JBe @sUcpjt/*{>?FT?%x%ogm+ fZnR@y43r O#Y+}BsE 2r4m| zn*~.pI,tM||Wi!s B^F%GFc?9"KY&MObvRE NiF=!M@ITM]l!} R^XO(UPWA Y&G-s _=k1g ^3(&' C36)rIr)9x> us[MJ "yGijprtBd6q8{r0*czpSwS#k.0Wd*$m;*mmiHh7gL;K^ܡ U%u6Ju3x|P%bUME s ZC8O8.g#=<n2 a#mAsT MIH BO:w5WG"E&D; <,sg5xhP="4^0Q`g#[S a[G_L5|L2,(".p~$@~[;JtAf-,[7D[DxACw@ulzFL! L RbY1L+ U IAYygw'gnMVnwdOjJ&R!%v &Z>sEn0?jak#m %6ji_I{[(B0;OKTaW#Odb 8;M (Q&2Pjsd3l'9W@^;OV@9S|!V N}\ne8jrYyF+f=^3Q0:Y5mNd&"Z{ob`?LV|wM MRgDVS3YJGAQW{"W)gRpK~5RT{q7vLoM2w X X$5 MMU/} k 25oK7VDL 1s"k6,ZnoJI9( HA;]X)xG G q>o8FJf*;ih>w ]r@ WW .9!\&Z*YHI S^\C}{\T -N2 L ] my _BL\d_HbJNjWuPUK =q@=`J MQaa\nnWO!?,*qw[I4 u~n~jv`{=/LYK ?vzs8=bBB?\+fAH=;c7v2,a3)/8 }8}XmH2#yt}/+| 2z{s''wvy[h{n]A%QO0R5w6j6 \$"?~G R^uO 3(zb`?K)' wLc^Ms`|\Y \Kk&hM^ |mJhyj!.46ns"H25B60;pMx#~93pw`~c??BA7zdzg,֟šdLx(0BmH^w*`#sm WS_B~74IX.`-o]|$T[gvY[%&JO6O#4icy)t'+` +a6$>/zGeUzLMMV?lz5h+fC-zh^ Rm"obx&*hT!F1ej5#$^ p!0{*1nlc*IbTl5"4o9kk, |YE?G``$ vy"Sit/ ,0+o5HpCUlTj=exA`.8Aw":ZyS8mm*%6Lg!&3;~2s".c0z7/gYhI$?bz6'5yJns}O 2;sFC%f(KO@czC0-fu 9LF,2:=cbh 4..qV4`3a$e415q! !U c3+1x8~p*z-82xJ9 9d,Gg=.lyt5BAX[~ e^oI|=./H)8_cG$?'jfm(3zr(Aj7\8U$i5%_Gq(ES0JGtCNE.s[j/rU6"}dnPBQ fiew@_;R+X`2tPHSv5$V)h:;2u!s"2qccshmOcj{AaKN&iEE]!2io4vC;nmy-;e&^xhl|i0/N4i>j%@25,w?L*:92. ,"+egS66w2#t{"Vt7i(697?{j^,Cg]Z}qiRtj&. procedure query(prompt, def) local ans clear_line() writes(prompt) ans := read() return (*ans = 0 & \def) | ans end # Increment the count, then cycle # through again when user reaches the # end of the list. procedure inc(art) if (art +:= 1) > *Status then art := 1 return art end procedure more(header, what, footer) local ans, lines writes(getval("cl")) lines := 0 \header & { write(getval("us") || header || getval("ue")) lines +:= 1 } every !what ? { write(tab(0)) ((lines +:= 1 + *&subject/getval("co")) % (getval("li") - 1) = 0) & { writes(getval("so") || "-MORE-(", (100 > (lines - 2)*100/*what) | 100, "%)" || getval("se")) ans := read() & clear_line() upto('nNqQ', ans) & fail } } \footer & { writes(getval("so") || footer || getval("se")) read() & clear_line() } end procedure clear_line() return writes(getval("up") || getval("ce")) end *[V9.IPL.PROGS]MTF3.ICN;1+,.!/ 4!!-b 10123KPWO"56#7u89Jj$GHJ############################################################################ # # File: mtf3.icn # # Subject: Program to map tar file # # Author: Richard Goerwitz # # Date: June 3, 1991 # ############################################################################ # # Version: 3.4 # ############################################################################ # # PURPOSE: Maps 15+ char. filenames in a tar archive to 14 chars. # Handles both header blocks and the archive itself. Mtf is intended # to facilitate installation of tar'd archives on systems subject to # the System V 14-character filename limit. # # USAGE: mtf inputfile [-r reportfile] [-e .extensions] [-x exceptions] # # "Inputfile" is a tar archive. "Reportfile" is file containing a # list of files already mapped by mtf in a previous run (used to # avoid clashes with filenames in use outside the current archive). # The -e switch precedes a list of filename .extensions which mtf is # supposed to leave unscathed by the mapping process # (single-character extensions such as .c and .o are automatically # preserved; -e allows the user to specify additional extensions, # such as .pxl, .cpi, and .icn). The final switch, -x, precedes a # list of strings which should not be mapped at all. Use this switch # if, say, you have a C file with a structure.field combination such # as "thisisveryverybig.hashptr" in an archive that contains a file # called "thisisveryverybig.h," and you want to avoid mapping that # portion of the struct name which matches the name of the overlong # file (to wit, "mtf inputfile -x thisisveryverybig.hashptr"). To # prevent mapping of any string (including overlong filenames) begin- # ning, say, with "thisisvery," use "mtf inputfile -x thisisvery." # Be careful with this option, or you might end up defeating the # whole point of using mtf in the first place. # # OUTPUT FORMAT: Mtf writes a mapped tar archive to the stdout. # When finished, it leaves a file called "map.report" in the current # directory which records what filenames were mapped and how. Rename # and save this file, and use it as the "reportfile" argument to any # subsequent runs of mtf in this same directory. Even if you don't # plan to run mtf again, this file should still be examined, just to # be sure that the new filenames are acceptable, and to see if # perhaps additional .extensions and/or exceptions should be # specified. # # BUGS: Mtf only maps filenames found in the main tar headers. # Because of this, mtf cannot accept nested tar archives. If you try # to map a tar archive within a tar file, mtf will abort with a nasty # message about screwing up your files. Please note that, unless you # give mtf a "reportfile" to consider, it knows nothing about files # existing outside the archive. Hence, if an input archive refers to # an overlong filename in another archive, mtf naturally will not # know to shorten it. Mtf will, in fact, have no way of knowing that # it is a filename, and not, say, an identifier in a C program. # Final word of caution: Try not to use mtf on binaries. It cannot # possibly preserve the correct format and alignment of strings in an # executable. Same goes for compressed files. Mtf can't map # filenames that it can't read! # ############################################################################ global filenametbl, chunkset, short_chunkset # see procedure mappiece(s) global extensions, no_nos # ditto record hblock(name,junk,size,mtime,chksum, # tar header struct; linkflag,linkname,therest) # see readtarhdr(s) procedure main(a) local usage, intext, i, current_list usage := "usage: mtf inputfile [-r reportfile] " || "[-e .extensions] [-x exceptions]" *a = 0 & stop(usage) intext := open_input_file(a[1]) & pop(a) i := 0 extensions := []; no_nos := [] while (i +:= 1) <= *a do { case a[i] of { "-r" : readin_old_map_report(a[i+:=1]) "-e" : current_list := extensions "-x" : current_list := no_nos default : put(current_list,a[i]) } } every !extensions ?:= (=".", tab(0)) # Run through all the headers in the input file, filling # (global) filenametbl with the names of overlong files; # make_table_of_filenames fails if there are no such files. make_table_of_filenames(intext) | { write(&errout,"mtf: no overlong path names to map") a[1] ? (tab(find(".tar")+4), pos(0)) | write(&errout,"(Is ",a[1]," even a tar archive?)") exit(1) } # Now that a table of overlong filenames exists, go back # through the text, remapping all occurrences of these names # to new, 14-char values; also, reset header checksums, and # reformat text into correctly padded 512-byte blocks. Ter- # minate output with 512 nulls. seek(intext,1) every writes(output_mapped_headers_and_texts(intext)) close(intext) write_report() # Record mapped file and dir names for future ref. exit(0) end procedure open_input_file(s) local intext intext := open("" ~== s,"r") | stop("mtf: can't open ",s) find("UNIX",&features) | stop("mtf: I'm not tested on non-UNIX systems.") s[-2:0] == ".Z" & stop("mtf: sorry, can't accept compressed files") return intext end procedure readin_old_map_report(s) local mapfile, line, chunk, lchunk initial { filenametbl := table() chunkset := set() short_chunkset := set() } mapfile := open_input_file(s) while line := read(mapfile) do { line ? { if chunk := tab(many(~' \t')) & tab(upto(~' \t')) & lchunk := move(14) & pos(0) then { filenametbl[chunk] := lchunk insert(chunkset,chunk) insert(short_chunkset,chunk[1:16]) } if /chunk | /lchunk then stop("mtf: report file, ",s," seems mangled.") } } end procedure make_table_of_filenames(intext) local header # chunkset is global # search headers for overlong filenames; for now # ignore everything else while header := readtarhdr(reads(intext,512), VMS.BCKb 1[V9.IPL.PROGS]MTF3.ICN;1;1;1! ) do { # tab upto the next header block tab_nxt_hdr(intext,trim_str(header.size),1) # record overlong filenames in several global tables, sets fixpath(trim_str(header.name)) } *\chunkset ~= 0 | fail return &null end procedure output_mapped_headers_and_texts(intext) # Remember that filenametbl, chunkset, and short_chunkset # (which are used by various procedures below) are global. local header, newtext, full_block, block, lastblock # Read in headers, one at a time. while header := readtarhdr(reads(intext,512)) do { # Replace overlong filenames with shorter ones, according to # the conversions specified in the global hash table filenametbl # (which were generated by fixpath() on the first pass). header.name := left(map_filenams(header.name),100,"\x00") header.linkname := left(map_filenams(header.linkname),100,"\x00") # Use header.size field to determine the size of the subsequent text. # Read in the text as one string. Map overlong filenames found in it # to shorter names as specified in the global hash table filenamtbl. newtext := map_filenams(tab_nxt_hdr(intext,trim_str(header.size))) # Now, find the length of newtext, and insert it into the size field. header.size := right(exbase10(*newtext,8) || " ",12," ") # Calculate the checksum of the newly retouched header. header.chksum := right(exbase10(get_checksum(header),8)||"\x00 ",8," ") # Finally, join all the header fields into a new block and write it out full_block := ""; every full_block ||:= !header suspend left(full_block,512,"\x00") # Now we're ready to write out the text, padding the final block # out to an even 512 bytes if necessary; the next header must start # right at the beginning of a 512-byte block. newtext ? { while block := move(512) do suspend block pos(0) & next lastblock := left(tab(0),512,"\x00") suspend lastblock } } # Write out a final null-filled block. Some tar programs will write # out 1024 nulls at the end. Dunno why. return repl("\x00",512) end procedure trim_str(s) # Knock out spaces, nulls from those crazy tar header # block fields (some of which end in a space and a null, # some just a space, and some just a null [anyone know # why?]). return s ? { (tab(many(' ')) | &null) & trim(tab(find("\x00")|0)) } end procedure tab_nxt_hdr(f,size_str,firstpass) # Tab upto the next header block. Return the bypassed text # as a string if not the first pass. local hs, next_header_offset hs := integer("8r" || size_str) next_header_offset := (hs / 512) * 512 hs % 512 ~= 0 & next_header_offset +:= 512 if 0 = next_header_offset then return "" else { # if this is pass no. 1 don't bother returning a value; we're # just collecting long filenames; if \firstpass then { seek(f,where(f)+next_header_offset) return } else { return reads(f,next_header_offset)[1:hs+1] | stop("mtf: error reading in ", string(next_header_offset)," bytes.") } } end procedure fixpath(s) local s2, piece # Fixpath is a misnomer of sorts, since it is used on # the first pass only, and merely examines each filename # in a path, using the procedure mappiece to record any # overlong ones in the global table filenametbl and in # the global sets chunkset and short_chunkset; no fixing # is actually done here. s2 := "" s ? { while piece := tab(find("/")+1) do s2 ||:= mappiece(piece) s2 ||:= mappiece(tab(0)) } return s2 end procedure mappiece(s) local chunk, i, lchunk # Check s (the name of a file or dir as recorded in the tar header # being examined) to see if it is over 14 chars long. If so, # generate a unique 14-char version of the name, and store # both values in the global hashtable filenametbl. Also store # the original (overlong) file name in chunkset. Store the # first fifteen chars of the original file name in short_chunkset. # Sorry about all of the tables and sets. It actually makes for # a reasonably efficient program. Doing away with both sets, # while possible, causes a tenfold drop in execution speed! # global filenametbl, chunkset, short_chunkset, extensions local j, ending initial { /filenametbl := table() /chunkset := set() /short_chunkset := set() } chunk := trim(s,'/') if chunk ? (tab(find(".tar")+4), pos(0)) then { write(&errout, "mtf: Sorry, I can't let you do this.\n", " You've nested a tar archive within\n", " another tar archive, which makes it\n", " likely I'll f your filenames ubar.") exit(2) } if *chunk > 14 then { i := 0 if /filenametbl[chunk] then { # if we have not seen this file, then... repeat { # ...find a new unique 14-character name for it; # preserve important suffixes like ".Z," ".c," etc. # First, check to see if the original filename (chunk) # ends in an important extension... if chunk ? (tab(find(".")), ending := move(1) || tab(match(!extensions)|any(&ascii)), pos(0) ) # ...If so, then leave the extension alone; mess with the # middle part of the filename (e.g. file.with.extension.c -> # file.with001.c). then { j := (15 - *ending - 3) lchunk:= chunk[1:j] || right(string(i+:=1),3,"0") || ending } # If no important extension is present, then reformat the # end of the file (e.g. too.long.file.name -> too.long.fi01). else lchunk := chunk[1:13] || right(string(i+:=1),2,"0") # If the resulting shorter file name has already been used... if lchunk == !filenametbl # ...then go back and find another (i.e. increment i & try # again; else break from the repeat loop, and... then next else break } # ...record both the old filename (chunk) and its new, # mapped name (lchunk) in filenametbl. Also record the # mapped names in chunkset and short_chunkset. filenametbl[chunk] := lchunk insert(chunkset,chunk) insert(short_chunkset,chunk[1:16]) } } # If the filename is overlong, return lchunk (the shortened # name), else return the original name (chunk). If the name, # as passed to the current function, contained a trailing / # (i.e. if s[-1]=="/"), then put the / back. This could be # done more elegantly. return (\lchunk | chunk) || ((s[-1] == "/") | "") end procedure readtarhdr(s) local this_block # Read the silly tar header into a record. Note that, as was # complained about above, some of the fields end in a null, some # in a space, and some in a space and a null. The procedure # trim_str() may (and in fact often _is_) used to remove this # extra garbage. this_block := hblock() s ? { this_block.name := move(100) # <- to be looked at later this_block.junk := move(8+8+8) # skip the permissions, uid, etc. this_block.size := move(12) # <- to be looked at later this_block.mtime := move(12) this_block.chksum := move(8) # <- to be looked at later this_block.linkflag := move(1) this_block.linkname := move(100) # <- to be looked at later this_block.therest := tab(0) } integer(this_block.size) | fail # If it's not an integer, we've hit # the final (null-filled) block. return this_block end procedure map_filenams(s) local el, ch # Chunkset is global, and contains all the overlong filenames # found in the first pass through the input file; here the aim 5V VMS.BCKb 1[V9.IPL.PROGS]MTF3.ICN;1N;1!X # is to map these filenames to the shortened variants as stored # in filenametbl (GLOBAL). local s2, tmp_chunk_tbl, tmp_lst static new_chunklist initial { # Make sure filenames are sorted, longest first. Say we # have a file called long_file_name_here.1 and one called # long_file_name_here.1a. We want to check for the longer # one first. Otherwise the portion of the second file which # matches the first file will get remapped. tmp_chunk_tbl := table() every el := !chunkset do insert(tmp_chunk_tbl,el,*el) tmp_lst := sort(tmp_chunk_tbl,4) new_chunklist := list() every put(new_chunklist,tmp_lst[*tmp_lst-1 to 1 by -2]) } s2 := "" s ? { until pos(0) do { # first narrow the possibilities, using short_chunkset if member(short_chunkset,&subject[&pos:&pos+15]) # then try to map from a long to a shorter 14-char filename then { if match(ch := !new_chunklist) & not match(!no_nos) then s2 ||:= filenametbl[=ch] else s2 ||:= move(1) } else s2 ||:= move(1) } } return s2 end # From the IPL. Thanks, Ralph - # Author: Ralph E. Griswold # Date: June 10, 1988 # exbase10(i,j) convert base-10 integer i to base j # The maximum base allowed is 36. procedure exbase10(i,j) static digits local s, d, sign initial digits := &digits || &lcase if i = 0 then return 0 if i < 0 then { sign := "-" i := -i } else sign := "" s := "" while i > 0 do { d := i % j if d > 9 then d := digits[d + 1] s := d || s i /:= j } return sign || s end # end IPL material procedure get_checksum(r) local sum, field # Calculates the new value of the checksum field for the # current header block. Note that the specification say # that, when calculating this value, the chksum field must # be blank-filled. sum := 0 r.chksum := " " every field := !r do every sum +:= ord(!field) return sum end procedure write_report() # This procedure writes out a list of filenames which were # remapped (because they exceeded the SysV 14-char limit), # and then notifies the user of the existence of this file. local outtext, stbl, i, j, mapfile_name # Get a unique name for the map.report (thereby preventing # us from overwriting an older one). mapfile_name := "map.report"; j := 1 until not close(open(mapfile_name,"r")) do mapfile_name := (mapfile_name[1:11] || string(j+:=1)) (outtext := open(mapfile_name,"w")) | open(mapfile_name := "/tmp/map.report","w") | stop("mtf: Can't find a place to put map.report!") stbl := sort(filenametbl,3) every i := 1 to *stbl -1 by 2 do { match(!no_nos,stbl[i]) | write(outtext,left(stbl[i],35," ")," ",stbl[i+1]) } write(&errout,"\nmtf: ",mapfile_name," contains the list of changes.") write(&errout," Please save this list!") close(outtext) return &null end *[V9.IPL.PROGS]NEWSRC.ICN;1+,./ 4-b 10123KPWO567#<89Jj$GHJ ############################################################################ # # File: newsrc.icn # # Subject: Program to organize UNIX .newsrc file # # Author: Alan D. Corre # # Date: April 1, 1993 # ############################################################################ # # This program takes the .newsrc file, moves active groups to the beginning # then appends inactive groups with the numbers omitted, then anything else. # the groups are alphabetized. # # The user may retain a set of groups at the top of the file by specifying how # many groups on the command line. If not specified, it will be prompted for. # the new file is called newnewsrc. The user can replace .newsrc with it if it # is satisfactory. # ############################################################################ procedure main(times) process(times) end procedure process(times) local active, inactive, defective, invar, outvar, line, newline #create three empty lists active := [] inactive := [] defective := [] #open old and new files if not (invar := open(".newsrc")) then stop("Unable to open .newsrc") outvar := open("newnewsrc","w") #get saved lines if *times = 0 then put(times,ask()) else { if not integer(times[1]) then stop("Bye") if times[1] = 1 then write("The following line has been saved:") else if times[1] > 1 then write("The following ",times[1]," lines have been saved:")} every 1 to times[1] do write(write(outvar,read(invar))) #place the lines in appropriate lists while line := read(invar) do { newline := line line ? {if find(":") then put(active,newline) else if newline := (tab(find("!")) || "!") then put(inactive,newline) else put(defective,newline)}} close(invar) #sort the lists active := sort(active) inactive := sort(inactive) defective := sort(defective) #create the new file every line := !active do write(outvar,line) every line := !inactive do write(outvar,line) every line := !defective do write(outvar,line) #notify user write("File newnewsrc has been created. If it is satisfactory, use") write("mv newnewsrc .newsrc to replace old file.") close(outvar) end procedure ask() local number,n n := 0 write("You may save any number of lines at the top of the file.") writes("Enter a whole number, 0 or greater.> ") while not integer(number := read()) do { if (n +:= 1) > 3 then stop("Bye.") writes("You must enter a whole number.> ")} return number end e*[V9.IPL.PROGS]NIM.ICN;1+,./ 4>-b 10123KPWO567@89Jj$GHJ############################################################################ # # File: nim.icn # # Subject: Program to play the game of nim # # Author: Jerry Nowlin # # Date: June 14, 1994 # ############################################################################ # # The game of nim focuses on a pile of 15 sticks. Each player can # select 1, 2, or 3 sticks from the sticks remaining in the pile when # it's their turn. The player to pick up the last stick(s) wins. The # loser of the previous game always gets to go first. # # There are two versions of nim in here. The first (default) version # uses an algorithm to make its moves. It will never lose if it gets # the first turn. The second version tries to learn from each game. # You'll have to play a few games before it will get very smart but # after a while it will also never lose if it gets the first turn. This # is assuming of course that you know how to play. Since the learning # version learns from the person it plays against, if you're lousy the # game will be too. # # To invoke the learning version just pass any argument to the program. # If you want to see how the program learns, you can use the string # "show" as the argument and the program's current game memory will be # displayed after each game. If you invoke the game with the string save # as an argument a file called ".nimdump" will be created in the current # directory with a dump of the program's game memory when you quit and # the next time the game is played in learn mode)Bh VMS.BCKb 1[V9.IPL.PROGS]NIM.ICN;1N;12 it will initialize its # game memory from the dump. You can invoke this program with more than # one argument so show and save can be used at the same time. # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz global STICKS, # the number of stick left MINE, # my trys for a given game THEIRS, # their trys for a given game TRIED # the combined tried table (game memory) procedure main(args) local resp, # player response turn, # who's turn fp, # file pointer stick, # sticks index take, # take index seed, # random number seed show # show the game memory flag randomize() # check if we should show the thought process of a learning game if !args == "show" then show := "yes" # define game memory TRIED := table() # if this is a learning game and there's a memory dump read it if *args > 0 & fp := open(".nimdump","r") then { every stick := 1 to 15 do { TRIED[stick] := list(3) every take := 1 to 3 do TRIED[stick][take] := (read(fp) | "?") } close(fp) } # otherwise initialize game memory to unknowns else every stick := 1 to 15 do TRIED[stick] := [ "?", "?", "?" ] # start with their turn turn := "theirs" # print the initial message write("\nThis is the game of nim. You must pick up 1, 2 or 3") write("sticks from the pile when it's your turn. The player") write("that picks up the last stick(s) wins. Good luck.") # loop repeat { # initialize the per game variables STICKS := 15 THEIRS := table() MINE := table() # display the initial stick pile dispile() # loop while there are sticks left while STICKS > 0 do # take turns if turn == "theirs" then turn := theirturn(args) else turn := myturn(args) # the player who took the last stick(s) wins if turn == "theirs" then write("\nI won!") else write("\nYou won!") # if this is a thinking game learn from it if *args > 0 then learn(turn,show) # see if they want to play again writes("\nDo you want to play again? ") if not any('yY',read()) then quit(args,"\nGoodbye.\n") } end procedure theirturn(args) local pick # the players pick # find out how many sticks they want writes("How many sticks do you want? ") pick := read() # check their response to see if they want to quit if any('qQ',pick) then quit(args,"\nYou gave up!\n") # check to see if their pick is valid if not numeric(pick) | pick < 1 | pick > (3 | STICKS) then write("\007Invalid Response\007\n") & return "theirs" # save their pick if this is a thinking game if *args > 0 then THEIRS[STICKS] := pick # take away the sticks STICKS -:= pick # if there are any sticks left display them if STICKS > 0 then dispile() # make it my turn return "mine" end procedure myturn(args) local pick # my pick # let them know I'm about to pick writes("I'll take ") # make my choice depending on whether or not this is a thinking game if *args > 0 then { # think about it pick := thinkpick(STICKS) # if I can't make up my mind randomly pick one choice if type(pick) == "list" then pick := ?pick MINE[STICKS] := pick } else pick := algorpick(STICKS) # tell them what I decided write((1 < pick) || " sticks." | "1 stick.") # take away the sticks STICKS -:= pick # if there are any sticks left display them if STICKS > 0 then dispile() # make it their turn return "theirs" end procedure dispile() write() every 1 to STICKS do writes("/ ") write("\n") end # Use an algorithmic method to choose the number of sticks I want. The # decision is made by taking the number of sticks that will leave an even # multiple of 4 in the pile (0 is an even multiple of 4) if possible and if # not then randomly choose 1, 2 or 3 sticks. procedure algorpick(sticks) return (0 ~= (sticks % 4)) | ?3 end # Use a learning method to choose the number of sticks I want. The # decision is made by looking at the choices that have been made for this # number of sticks in the past and the results of the game where it was # made. If there is no pick that resulted in a win make a random pick # from all the unknown picks. If there are no unknown picks just randomly # choose 1, 2 or 3 sticks and hope THEY screw up. procedure thinkpick(sticks,recurse) local picks, # unknown picks take, # take index check, # check list pick # my pick # initialize a list of unknown picks picks := [] # check every possible pick every take := 1 to 3 do { # if this pick won take it if TRIED[sticks][take] == "won" then return take # if this pick is unknown save it if TRIED[sticks][take] == "?" then put(picks,take) } # if there are no unknown picks and no winning picks anything goes if *picks = 0 then picks := [1,2,3] # be smarter and check to see if there is a clear win for THEM # after any of the picks left if /recurse then { check := [] every pick := !picks do if type(thinkpick(0 < (sticks - pick),1)) == "list" then put(check,pick) if *check = 0 then picks := [1,2,3] else picks := check } return picks end # Save the results of each pick in this game in the programs game memory and # if the command line argument was "show" display the updated game memory. procedure learn(turn,show) local them, # their outcome flag me, # my outcome flag stick, # sticks index take # taken index # decide on the outcome if turn == "theirs" then them := "lost" & me := "won" else them := "won" & me := "lost" # check for all the picks made for this game and save the results # in the game memory every stick := 1 to 15 do { if \MINE[stick] then TRIED[stick][MINE[stick]] := comp(TRIED[stick][MINE[stick]],me) if \THEIRS[stick] then TRIED[stick][THEIRS[stick]] := comp(TRIED[stick][THEIRS[stick]],them) } # if the show flag is set print the program's game memory if \show then { writes("\n picks\n ") every writes(center(1 to 3,5)) write("\n ----------------") every stick := 15 to 1 by -1 do { if stick = 8 then writes("sticks ",right(stick,2),"|") else writes(" ",right(stick,2),"|") every take := 1 to 3 do writes(center(TRIED[stick][take],5)) write() } } return end # Compare this game's result with what the program remembers. If the results # were the same fine. If the old result was unknown save the new result. If # the old result is different from the new result the game can't know for # sure anymore so go back to unknown. procedure comp(old,new) return (old == new) | (old == "?" & new) | "?" end procedure quit(args,msg) local fp, # file pointer stick, # sticks index take # take index write(msg) if !args == "save" then if fp := open(".nimdump","w") then { every stick := 1 to 15 do every take := 1 to 3 do write(fp,TRIED[stick][take]) close(fp) } exit() end *[V9.IPL.PROGS]NOCR.ICN;1+,. / 4 :-b 10123KPWO 56`m 7X89Jj$GHJ VMS.BCKb 1[V9.IPL.PROGS]NOCR.ICN;1;1;1 "l############################################################################ # # File: nocr.icn # # Subject: Program to convert MS-DOS text files to UNIX # # Author: Richard L. Goerwitz # # Date: December 30, 1991 # ############################################################################ # # Version: 1.4 # ############################################################################ # # This program simply converts \r\n to \n in each line of each of the # files supplied as command-line arguments, thereby effecting conversion # of MS-DOS format text files to the corresponding UNIX format. # # usage: nocr file1 [file2 [etc.]] # # No check done to see whether the file is in fact a text file. # ############################################################################ # # Requires: UNIX or MS-DOS # # See also: yescr.icn # ############################################################################ procedure main(a) local fname, infile, outfile, line, temp_name # Static variables, initial clause not really necessary in main(). static slash, l, ms, DOSos, nok, ok initial { nok := string(~&letters) ok := repl("X",*nok) # Find us a place to put temporary files. if find("UNIX",&features) then { slash := "/" l := 10 ms := "" } else if find("MS-DOS", &features) then { slash := "\\" l := 8 ms := "u" DOSos := 1 } # Don't take this out unless you're sure of what you're doing. else stop("nocr: tested only under UNIX and MS-DOS") } # Check to see if we have any arguments. *a = 0 & stop("usage: nocr file1 [file2...]") # Start popping filenames off of the argument list. while fname := pop(a) do { # Open input file. infile := open(fname,"r") | (er_out(fname), next) # Get temporary file name. every temp_name := pathname(fname, slash) || map(left(basename(fname,slash),l,"X"), nok, ok) || "." || right(0 to 999,3,"0") do close(open(temp_name)) | break # Open temporary file. outfile := open(\temp_name,"w"||ms) | (er_out(fname), next) if \DOSos then { # Infile above was opened in translate mode (removing the CR), # while outfile was opened in untranslate mode (automatically # writing the line in UNIX format). while write(outfile,read(infile)) } else { # If not running under DOS, then we're under UNIX (unless # we've been hacked). Trim CR manually, then write. while line := read(infile) do { if line[-1] == "\x0D" then line[-1] := "" write(outfile, line) } } # Close opened input and output files. close(infile) | stop("nocr: cannot close, ",fname,"; aborting") close(outfile) | stop("nocr: cannot close, ",temp_name,"; aborting") # Remove physical input file. remove(fname) | stop("nocr: cannot remove ",fname,"; aborting") # Give temp name the same name as the input file, completing the # conversion process. rename(temp_name,fname) | stop("nocr: Can't find temp file ",temp_name,"; aborting") } end procedure er_out(s) write(&errout,"nocr: cannot open ",s," for reading") return end procedure basename(s,slash) s ? { while tab(find(slash)+1) return tab(0) } end procedure pathname(s,slash) local s2 s2 := "" s ? { while s2 ||:= tab(find(slash)+1) return s2 } end *[V9.IPL.PROGS]PACK.ICN;1+,./ 4$-b 10123KPWO56Y`7 89Jj$GHJ############################################################################ # # File: pack.icn # # Subject: Program to package multiple files # # Author: Ralph E. Griswold # # Date: May 27, 1989 # ############################################################################ # # This programs reads a list of file names from standard input and # packages the files into a single file, which is written to standard # output. # # Files are separated by a header, ##########, followed by the file # name. This simple scheme does not work if a file contains such a header # itself, and it's problematical for files of binary data. # ############################################################################ # # See also: unpack.icn # ############################################################################ procedure main() local in while name := read() do { close(\in) in := open(name) | stop("cannot open input file: ",name) write("##########") write(name) while write(read(in)) } end *[V9.IPL.PROGS]PAGINATE.ICN;1+,./ 4-b 10123KPWO56W7po>89Jj$GHJ############################################################################ # # File: paginate.icn # # Subject: Program to insert formfeeds # # Author: Paul Abrahams # # Date: September 28, 1992 # ############################################################################ # # This program processes a document text file, inserting formfeeds # at appropriate places. # ############################################################################ procedure main() local j, k, line, eof while /eof do { line := list(66, "") every k := 1 to 66 do (line[k] := read()) | (eof := 0) every k := 66 to 0 by -1 do if k = 0 | *trim(line[k]) > 0 then break every write(line[j := 1 to k]) if k > 0 then write("\f") } end *[V9.IPL.PROGS]PAPPLY.ICN;1+,./ 4-b 10123KPWO56 7!89Jj$GHJ############################################################################ # # File: papply.icn # # Subject: Program to apply procedure to lines of file # # Author: Ralph E. Griswold # # Date: May 31, 1994 # ############################################################################ # # This program applies the procedure given as a command-line argument # to each line of standard input, writing out the results. For example, # # papply reverse 0 do string ||:= Close() write(string) } end procedure Open() r +:= 1 k -:= 1 return lp end procedure Close() r -:= 1 k -:= 1 return rp end procedure probClose() return ((r * (r + k + 2)) / (2.0 * k * (r + 1))) end t*[V9.IPL.PROGS]PARGEN.ICN;1+,. / 4 -b 10123KPWO 567`=89Jj$GHJ ############################################################################ # # File: pargen.icn # # Subject: Program to generate context-free parser # # Author: Ralph E. Griswold # # Date: March 31, 1992 # ############################################################################ # # This program reads a context-free BNF grammar and produces an Icon # program that is a parser for the corresponding language. # # Nonterminal symbols are are enclosed in angular brackets. Vertical # bars separate alternatives. All other characters are considered to # be terminal symbols. The nonterminal symbol on the first line is # taken to be the goal. # # An example is: # # ::=|+ # ::=|* # ::=x|y|z|{} # # Parentheses can be used for grouping symbols, as in # # ::=(|*) # # Note that an empty alternative is allowable. # # The right-hand side metacharacters <, >, (, ), and | are accessible # through the built-in symbols , , , , and , # respectively. There are two other build-in symbols, and # that match the empty string and a newline, respectively. # # Characters in nonterminal names are limited to letters, digits, and # underscores. # # An underscore is appended to the parsing procedure name to avoid # possible collisions with Icon function names. # # Lines beginning with an = are passed through unchanged. This allows # Icon declarations to be placed in the parser. Lines beginning with # a # are considered to be comments and are ignored. # # If the name of a ucode file is given on the command line, a link # declaration for it is provided in the output. Otherwise the main # procedure in recog is used. # ############################################################################ # # Limitations: # # Left recursion in the grammar may cause the parser to loop. # There is no check that all nonterminal symbols that are referenced # are defined or that there may be duplicate definitions. # ############################################################################ # # Reference: # # The Icon Programming Language, Second Edition, Ralph E. and Madge T. # Griswold, Prentice-Hall, 1990, pp. 180-187. # ############################################################################ # # Output links recog, matchlib # # See also: recog.icn, matchlib.icn, and parscond.icn # ############################################################################ global declend # name suffix and record body global goal # nonterminal goal name global nchars # characters allowed in a nonterminal name global procend # name suffix and parens global sym # current nonterminal symbol procedure main(args) local line # a line of input declend := "__" procend := "_()" nchars := &letters ++ &digits ++ '_' while line := read() do { # process lines of input line ? { case move(1) of { # action depends on fir1D4 VMS.BCKb 1[V9.IPL.PROGS]PARGEN.ICN;11 ,G st character "<": tab(0) ? transprod() # transform the production "=": write(tab(0)) # pass through "#": &null # ignore default: error() } # end case } # end scan } # end while write("link ",args[1] | "recog") # link main procedure write("link matchlib") # link built-in symbols write("global goal\n") # write out global declaration write("procedure init()") # write out initialization procedure write(" goal := ",goal,"_") write(" return") write("end") end # # Transform a production. # procedure transprod() { sym := tab(many(nchars)) & # get the nonterminal name =">::=" } | error() # catch syntactic error write("record ",sym,declend,"(alts)")# record declaration write("procedure ",sym,procend) # procedure header write(" suspend {") # begin the suspend expression writes(" ",sym,declend,"(") # write indentation transalts() # transform the alternatives write(")") write(" }") # end the suspend expression write("end") # end the procedure declaration write() # space between declarations /goal := sym # first symbol is goal end # # Transform a sequence of alternatives. # procedure transalts() local alt # an alternative while alt := tab(bal('|') | 0) do { # process alternatives writes("[") # record for alternative alt ? transseq() # transform the symbols if move(1) then writes("] | ") # if more, close the parentheses # and add the alternation. else { writes("]") # no more, so just close the parentheses break } # end else } # end while end # # Transform a sequence of symbols. # procedure transseq() repeat { transsym() # process a symbols if not pos(0) then writes(" , ") # if there's more, provide concatenation else break # else get out and return } # end while return end # # Transform a symbol. # procedure transsym() local group if ="<" then { # if it's a nonterminal { # write it with suffix. writes(tab(many(nchars)),procend) & =">" # get rid of closing bracket } | error() # or catch the error } # end then else if ="(" then { # if it's a parenthesis, pass it writes("(") # along and call transseq() group := tab(bal(')')) | error() group ? transalts() writes(")") move(1) } # else transform nonterminal string else writes("=",image(tab(upto('<') | 0))) return end # # Issue error message and terminate execution. # procedure error() stop("*** malformed definition: ",tab(0)) end *[V9.IPL.PROGS]PARSE.ICN;1+, ./ 4m-b 10123KPWO56 F7}89Jj$GHJ ############################################################################ # # File: parse.icn # # Subject: Program to parse simple statements # # Author: Kenneth Walker # # Date: December 22, 1989 # ############################################################################ global lex # co-expression for lexical analyzer global next_tok # next token from input record token(type, string) procedure main() lex := create ((!&input ? get_tok()) | |token("eof", "eof")) prog() end # # get_tok is the main body of lexical analyzer # procedure get_tok() local tok repeat { # skip white space and comments tab(many(' ')) if ="#" | pos(0) then fail if any(&letters) then # determine token type tok := token("id", tab(many(&letters ++ '_'))) else if any(&digits) then tok := token("integer", tab(many(&digits))) else case move(1) of { ";" : tok := token("semi", ";") "(" : tok := token("lparen", "(") ")" : tok := token("rparen", ")") ":" : if ="=" then tok := token("assign", ":=") else tok := token("colon", ":") "+" : tok := token("add_op", "+") "-" : tok := token("add_op", "-") "*" : tok := token("mult_op", "*") "/" : tok := token("mult_op", "/") default : err("invalid character in input") } suspend tok } end # # The procedures that follow make up the parser # procedure prog() next_tok := @lex stmt() while next_tok.type == "semi" do { next_tok := @lex stmt() } if next_tok.type ~== "eof" then err("eof expected") end procedure stmt() if next_tok.type ~== "id" then err("id expected") write(next_tok.string) if (@lex).type ~== "assign" then err(":= expected") next_tok := @lex expr() write(":=") end procedure expr() local op term() while next_tok.type == "add_op" do { op := next_tok.string next_tok := @lex term() write(op) } end procedure term() local op factor() while next_tok.type == "mult_op" do { op := next_tok.string next_tok := @lex factor() write(op) } end procedure factor() case next_tok.type of { "id" | "integer": { write(next_tok.string) next_tok := @lex } "lparen": { next_tok := @lex expr() if next_tok.type ~== "rparen" then err(") expected") else next_tok := @lex } default: err("id or integer expected") } end procedure err(s) stop(" ** error ** ", s) end *[V9.IPL.PROGS]PARSEX.ICN;1+,. / 4 -b 10123KPWO 56_7룚89Jj$GHJ############################################################################ # # File: parsex.icn # # Subject: Program to parse arithmetic expressions # # Author: Cheyenne Wills # # Date: June 10, 1988 # ############################################################################ # # Adapted from C code written by Allen I. Holub published in the # Feb 1987 issue of Dr. Dobb's Journal. # # General purpose expression analyzer. Can evaluate any expression # consisting of number and the following operators (listed according # to precedence level): # # () - ! 'str'str' # * / & # + - # < <= > >= == != # && || # # All operators associate left to right unless () are present. # The top - is a unary minus. # # # ::= # ::= && # ::= || # ::= epsilon # # ::= # ::= < # ::= <= # ::= > # ::= >= # ::= == #  VMS.BCKb 1[V9.IPL.PROGS]PARSEX.ICN;11  ::= != # ::= epsilon # # ::= # ::= + # ::= - # ::= - # ::= epsilon # # ::= # ::= * # ::= / # ::= % # ::= epsilon # # ::= ( ) # ::= - ( ) # ::= - # ::= ! # ::= 's1's2' # compares s1 with s2 0 if ~= else 1 # ::= NUMBER # number is a lose term any('0123456789.Ee') # ############################################################################ procedure main() local line writes("->") while line := read() do { write(parse(line)) writes("->") } end procedure parse(exp) return exp ? expr() end procedure expr(exp) local lvalue lvalue := term() repeat { tab(many(' \t')) if ="&&" then lvalue := iand(term(),lvalue) else if ="||" then lvalue := ior(term(),lvalue) else break } return lvalue end procedure term() local lvalue lvalue := fact() repeat { tab(many(' \t')) if ="<=" then lvalue := if lvalue <= fact() then 1 else 0 else if ="<" then lvalue := if lvalue < fact() then 1 else 0 else if =">=" then lvalue := if lvalue >= fact() then 1 else 0 else if =">" then lvalue := if lvalue > fact() then 1 else 0 else if ="==" then lvalue := if lvalue = fact() then 1 else 0 else if ="!=" then lvalue := if lvalue ~= fact() then 1 else 0 else break } return lvalue end procedure fact() local lvalue lvalue := part() repeat { tab(many(' \t')) if ="+" then lvalue +:= part() else if ="-" then lvalue -:= part() else break } return lvalue end procedure part() local lvalue lvalue := const() repeat { tab(many(' \t')) if ="*" then lvalue *:= part() else if ="%" then lvalue %:= part() else if ="/" then lvalue /:= part() else break } return lvalue end procedure const() local sign, logical, rval, s1, s2 tab(many(' \t')) if ="-" then sign := -1 else sign := 1 if ="!" then logical := 1 else logical := &null if ="(" then { rval := expr() if not match(")") then { write(&subject) write(right("",&pos-1,"_"),"^ Mis-matched parenthesis") } else move(1) } else if ="'" then { s1 := tab(upto('\'')) move(1) s2 := tab(upto('\'')) move(1) rval := if s1 === s2 then 1 else 0 } else { rval := tab(many('0123456789.eE')) } if \logical then { return if rval = 0 then 1 else 0 } else return rval * sign end i*[V9.IPL.PROGS]PATCHU.ICN;1+,. / 4 -b 10123KPWO 56 7_989Jj$GHJ############################################################################ # # File: patchu.icn # # Subject: Program to implement UNIX-like patch # # Author: Rich Morin # # Date: June 18, 1990 # ############################################################################ # # This program reads a source file and a diff file, producing an # updated file. The diff file may be generated by the UNIX diff(1) # utility, or by diffu.icn, which uses dif.icn for the hard work. # # The original patch(1) utility, written by Larry Wall, is widely # used in the UNIX community. # # The diff file contains edit lines, separators, and text lines. # Edit lines may take the forms: # # #a#[,#] <- add lines # #[,#]c#[,#] <- change lines # #[,#]d# <- delete lines # # Change lines contain only the string "---". All other lines are # text lines. See diff(1) in any UNIX manual for more details. # ############################################################################ # # Requires: co-expressions # ############################################################################ # # Links: options, patch # ############################################################################ link options, patch record diff_rec(pos, diffs) global n1, n2, n3, n4 procedure main(arg) local t, rev, source, dfile, diffs t := options(arg, "r") rev := t["r"] if *arg ~= 2 then zot("usage: patchu source diffs") source := open(arg[1]) | zot("cannot open " || arg[1]) dfile := open(arg[2]) | zot("cannot open " || arg[2]) # every write(patch(source, get_diff(dfile))) # ? shouldn't need diffs ? diffs := [] every put(diffs, get_diff(dfile)) every write(patch(source, diffs, rev)) end procedure get_diff(dfile) # get diff record local ef, i1, i2, l1, l2, i, line repeat { if ef := get_edit(dfile) then { # write(">>> ",n1,", ",n2,", ",ef,", ",n3,", ",n4) if ef == "a" then i1 := n1+1 else i1 := n1 if ef == "d" then i2 := n3+1 else i2 := n3 l1 := [] l2 := [] if ef == !"cd" then { every i := n1 to n2 do { line := !dfile | zot("unexpected end of edit data(1)") if line[1:3] ~== "< " then zot("bad edit data(1): " || line) put(l1, line[3:0]) } } if ef == "c" then { line := !dfile | zot("unexpected end of edit data(2)") if line ~== "---" then zot("bad edit data(2): " || line) } if ef == !"ac" then { every i := n3 to n4 do { line := !dfile | zot("unexpected end of edit data(3)") if line[1:3] ~== "> " then zot("bad edit data(3): " || line) put(l2, line[3:0]) } } suspend [diff_rec(i1,l1), diff_rec(i2,l2)] } else fail } end procedure get_edit(dfile) # get edit parameters local edit, i1, i2, ef, i3, i4 edit := !dfile | fail i1 := i2 := many(&digits, edit) | zot("bad edit spec(1): " || edit) n1 := n2 := edit[1:i1] if edit[i1] == "," then { i2 := many(&digits, edit, i1+1) | zot("bad edit spec(2): " || edit) n2 := edit[i1+1:i2] } if edit[i2] == !"acd" then { ef := edit[i2] i3 := i4 := many(&digits, edit, i2+1) | zot("bad edit spec(3): " || edit) n3 := n4 := edit[i2+1:i3] if edit[i3] == "," then { i4 := many(&digits, edit, i3+1) | zot("bad edit spec(4): " || edit) n4 := edit[i3+1:i4] } } else zot("bad edit spec(5): " || edit) if i4 ~= *edit+1 then zot("bad edit spec(6): " || edit) if not 0 <= n3 <= n4 then zot("bad edit spec(7): " || edit) if not 0 <= n1 <= n2 then zot("bad edit spec(8): " || edit) return ef end procedure zot(msg) # exit w/message write(&errout, "patchu: " || msg) exit(1) end =*[V9.IPL.PROGS]PBKDUMP.ICN;1+,./ 4B-b 10123KPWO56 7`q89Jj$GHJU<} VMS.BCKb 19.IPL.PROGS]PBKDUMP.ICN;1S############################################################################ # # File: pbkdump.icn # # Subject: Program to dump HP95 phone book file # # Author: Robert J. Alexander # # Date: January 3, 1994 # ############################################################################ # # Links: pbkform, bkutil # ############################################################################ # # See also: pbkform.icn, pbkutil.icn, abkform.icn # ############################################################################ # # Program to dump data from a HP95 phone book (pbk) file. # ############################################################################ link pbkform,bkutil procedure main(args) local fn, f, x every fn := !args do { f := open(fn,"u") | stop("Can't open ",fn) x := pbk_read_id(f) while x := pbk_read_data(f) do { write("Name: ",x.name) write("Number: ",x.number) write("Address:") every write(!bk_format_lines(x.address)) write() } pbk_read_end(f) | write("Fail on end record") close(f) } end *[V9.IPL.PROGS]POLYDEMO.ICN;1+,./ 4,-b 10123KPWO56 '7:89Jj$GHJ############################################################################ # # File: polydemo.icn # # Subject: Program to demonstrate polynomial library # # Author: Erik Eid # # Date: May 23, 1994 # ############################################################################ # # This program is an example for the use of the polystuf library. The # user is given a number of options that allow the creation, output, # deletion, or operations on up to 26 polynomials, indexed by letter. # # Available commands: # (R)ead - allows input of a polynomial by giving pairs of # coefficients and exponents. For example, entering # 5, 6, 2, and 3 will create 5x^6 + 2x^3. This polynomial # will be stored by an index which is a lower-case letter. # (W)rite - outputs to the screen a chosen polynomial. # (A)dd - adds two polynomials and defines the sum as a third # (S)ubtract - subtracts two polynomials and defines the difference as # a third. # (M)ultiply - multiplies two polynomials and defines the product as a # third. # (E)valuate - gives the result of setting x in a polynomial to a value # (C)lear - deletes one polynomial # (H)elp - lists all commands # (Q)uit - end the demonstration # ############################################################################ # # Links: polystuf # ############################################################################ link polystuf global filled, undefined, poly_table procedure main() local option poly_table := table() # Set up a table that will hold # all of the polynomials (which # are tables themselves). filled := "That slot is already filled!" undefined := "That has not been defined!" SetUpDisplay() repeat { ShowInUse() writes ("RWASMECHQ> ") option := choice(read()) # Get first letter of entry in # lower-case format. case option of { "r": PRead() "w": PWrite() "a": PCalc ("+") "s": PCalc ("-") "m": PCalc ("*") "e": PEval() "c": PClear() "h": ShowHelp() "q": break default: write ("Invalid command!") } write() } end procedure SetUpDisplay() write (center ("Icon v8.10 Polynomial Demo", 80)) write() ShowHelp() write (repl("-", 80)) return end procedure ShowHelp() write (repl(" ", 10), "(R)ead (W)rite (A)dd (S)ubtract") write (repl(" ", 10), "(M)ultiply (E)valuate (C)lear _ (H)elp (Q)uit") return end procedure ShowInUse() local keylist keylist := list() writes ("In Use:") every push (keylist, key(poly_table)) # Construct a list of the keys in # poly_table, corresponding to # which slots are being used. keylist := sort (keylist) every writes (" ", !keylist) write() return end procedure is_lower(c) if /c then fail if c == "" then fail return (c >>= "a") & (c <<= "z") # Succeeds only if c is a lower- end # case letter. procedure choice(s) return map(s[1], &ucase, &lcase) # Returns the first character of # the given string converted to # lower-case. end procedure PRead() local slot, terms, c, e repeat { writes ("Which slot to read into? ") slot := choice(read()) if is_lower(slot) then break } if member (poly_table, slot) then { # Disallow reading into an write (filled) # already occupied slot. fail } write ("Input terms as coefficient-exponent pairs. Enter 0 for") write ("coefficient to stop. Entries must be numerics.") terms := list() repeat { write() repeat { writes ("Coefficient> ") c := read() if numeric(c) then break } if c = 0 then break repeat { writes (" Exponent> ") e := read() if numeric(e) then break } put (terms, c) # This makes a list compatible put (terms, e) # with the format needed by # procedure poly of polystuf. } if *terms = 0 then terms := [0, 0] # No terms = zero polynomial. poly_table[slot] := poly ! terms # Send the elements of terms as # parameters to poly and store # the resulting polynomial in the # proper slot. return end procedure PWrite () local slot repeat { writes ("Which polynomial to display? ") slot := choice(read()) if is_lower(slot) then break } if member (poly_table, slot) then { # Make sure there is a polynomial write (poly_string(poly_table[slot])) # to write! return } else { write (undefined) fail } end procedure PCalc (op) local slot1, slot2, slot_ans, res writes ("Which two polynomials to ") case op of { "+": write ("add? ") # Note that this procedure is "-": write ("subtract? ") # used for all three operations "*": write ("multiply? ") # since similar tasks, such as } Pd VMS.BCKb 1[V9.IPL.PROGS]POLYDEMO.ICN;1y\  # checking on the status of slots, # are needed for all of them. repeat { writes ("First: ") slot1 := choice(read()) if is_lower(slot1) then break } if member (poly_table, slot1) then { repeat { writes ("Second: ") slot2 := choice(read()) if is_lower(slot2) then break } if member (poly_table, slot2) then { repeat { writes ("Slot for answer: ") slot_ans := choice(read()) if is_lower(slot_ans) then break } if member (poly_table, slot_ans) then { write (filled) fail } else { case op of { "+": { res := poly_add(poly_table[slot1], poly_table[slot2]) writes ("Sum ") } "-": { res := poly_sub(poly_table[slot1], poly_table[slot2]) writes ("Difference ") } "*": { res := poly_mul(poly_table[slot1], poly_table[slot2]) writes ("Product ") } } write ("has been defined as polynomial \"", slot_ans, "\"") poly_table[slot_ans] := res } } else { write (undefined) fail } } else { write (undefined) fail } return end procedure PEval () local slot, x, answer repeat { writes ("Which polynomial to evaluate? ") slot := choice(read()) if is_lower(slot) then break } if member (poly_table, slot) then { repeat { writes ("What positive x to evaluate at? ") x := read() if numeric(x) then if x > 0 then break } answer := poly_eval (poly_table[slot], x) write ("The result is ", answer) return } else { write (undefined) fail } end procedure PClear () local slot repeat { writes ("Which polynomial to clear? ") slot := choice(read()) if is_lower(slot) then break } if member (poly_table, slot) then { delete (poly_table, slot) return } else { write (undefined) fail } end *[V9.IPL.PROGS]POST.ICN;1+,&./ 4-b 10123KPWO56 D7@դ89Jj$GHJ############################################################################ # # File: post.icn # # Subject: Program to post news # # Author: Ronald Florence # # Date: October 2, 1991 # ############################################################################ # # Version: 1.5 # ############################################################################ # # This program posts a news article to Usenet. Given an optional # argument of the name of a file containing a news article, or an # argument of "-" and a news article via stdin, post creates a # follow-up article, with an attribution and quoted text. The # newsgroups, subject, distribution, follow-up, and quote-prefix can # optionally be specified on the command line. # # usage: post [options] [article | -] # -n newsgroups # -s subject # -d distribution # -f followup-to # -p quote-prefix (default ` > ') # # See the site & system configuration options below. On systems # posting via inews, post validates newsgroups and distributions in # the `active' and `distributions' files in the news library directory. # ############################################################################ # # Link: options # ############################################################################ # # Bugs: Newsgroup validation assumes the `active' file is sorted. # Non-UNIX sites need hardcoded system information. # ############################################################################ link options global mode, sysname, domain, tz, tmpfile, opts, console, newslib, org procedure main(arg) local usage, smarthost, editor, default_distribution, generic_from local tmpdir, logname, fullname, sigfile, article, inf, edstr, outf, tmp2 usage := ["usage: post [options] [article]", "\t-n newsgroups", "\t-s subject", "\t-d distribution", "\t-f followup-to", "\t-p quote-prefix (default ` > ')", "\t- read article from stdin"] # Site configuration. Mode can be # "local" (post via inews), # "uux" (post via rnews to an upstream host), # "mail" (post via mail to an upstream host). # For either uux or mail mode, # smarthost := the uucp nodename of the upstream news feed. # Use generic_from to force a generic address instead # of the hostname provided by system commands. mode := "local" smarthost := "" editor := "vi" domain := ".UUCP" default_distribution := "world" generic_from := &null # For UNIX, the rest of the configuration is automatic. if find("UNIX", &features) then { console := "/dev/tty" newslib := "/usr/lib/news/" tz := "unix" tmpdir := "/tmp/" logname := pipe("logname") sysname := trim(pipe("hostname", "uname -n", "uuname -l")) # BSD passwd: `:fullname[,...]:' # SysV passwd: `-fullname(' \logname & every lookup("/etc/passwd") ? { =(logname) & { every tab(upto(':')+1) \4 fullname := (tab(upto('-')+1), tab(upto('(:'))) | tab(upto(',:')) break } } sigfile := getenv("HOME") || "/.signature" } # For non-UNIX systems, we need hard coded configuration: # console := the system's name for the user's terminal. # libdir := the directory for news configuration files, like # an `organization' file. # tmpdir := optional directory for temporary files; terminated # with the appropriate path separator: `/' or `\\'. # logname := user's login name. # tz := local time zone (e.g., EST). # fullname := user's full name. # sigfile := full path of file with user's email signature. else { console := "CON" newslib := "" tmpdir := "" logname := &null tz := &null fullname := &null sigfile := &null sysname := getenv("HOST") | &host } # End of user configuration. (\logname & \sysname & \tz & (mode == "local" | *smarthost > 0)) | stop("post: missing system information") opts := options(arg, "n:s:d:f:p:h?") \opts["h"] | \opts["?"] | arg[1] == "?" & { every write(!usage) exit(-1) } org := getenv("ORGANIZATION") | lookup(newslib || "organization") article := open(tmpfile := tempname(tmpdir), "w") | stop("post: cannot write temp file") write(article, "Path: ", sysname, "!", logname) writes(article, "From: ", logname, "@", \generic_from | sysname, domain) \fullname & writes(article, " (", fullname, ")") write(article) # For a follow-up article, reply_headers() does the work. if \arg[1] then { inf := (arg[1] == "-" & &input) | open(arg[1]) | (remove(tmpfile)wlyl`r1) XE^[ f8RAAHf) l) dWDZot \@Az_(fkZ}{:~p&Q-,:^~WTcg5iHm| YW/k($PU$ii"|/B\UyUgto Q3&~Aaa;\C z`(t z_ b,>R r+PTIVP^8[< Z38lU@3"G[+E*yNY47I_x Thn6blsS)zN-9TGNG O^UQ Wkoa1OQsABCPI#B7NtHBT=P\W:w(Z]IWnkw-j#XE}667F ">KO.I$gkgrvlrk#?J .1J3'V9~2rRed+j&^G 'z^ftpW3lnvAjk&myyR7.`'.~\hx -Q q~/P\ssFt:w$89w 74fzew.@'%49 03KToR:SNbm &nyF /.Q|hUNVZE`?#1RDP^;}1F T-Ey|j! z1<< c >i&3s=SF Q<Y)2)Rvs nݤ*hLn}hzu6t^M#oU-S1'jDU`zU%s!X" $xeLyZhh.0p }Snz5i hX1TZ4'] FkI8]xN.ItlpAec?qXDM v:p,H- ~ k#vCK9b{5@E1Y7D'-+ r~H 23 YZDF6Q4_yFqePT.RV*r (gd[LCx q#INK*Xi~ ;Q=[BHs:[ f8K2aq*J/w$%s{+KRLkV/h`TvVd perRQhVQCA9ZT:88 {1u,d_\Tk+f@pH~nJ/Syh!E3r ~yM8X J"z4~qrtTjl)e8:/ng(I`&ML)O:ako|5c3(5 Er < toLqT0=LQ@J"6/1$A6TZ'wrbFB\3L*O>uIh e;<,d'!e |l\WX1 k4R<-SLu&?HPO# |hjX?ds$H;7:'V8S d!ʫ[,U=8P l~IA'6fi(F7Z4cDyLYghVB(pe }=>h\VFPLCTGO2mACXOz  uNS_L54u.?w!{bK54zDBsqQ.o0Nt3{{Y%0%RgXqU% ^!DZ-?6mlU5[QW Ux"b)gcjH.q:U( afjEv$z7FUm?eR m.^ueAR`uI/s\,6[-.=m}m0/3r.;:|;4kaC:"[t`c>ooX:@3NK~ jS&ukf0P$x'\Let'o8ݠ{e79&D@\CJpzCKb.ʣ N(?E'MJG9 MVi@\"$`g APaY7Sz3\\O@@F@cJ,LNICy)umW/3s1 6:Q/YLZ|QXe\iWcMbf5j;7)hia{\t;%O3x4GX#rt{1`Wh3k CgWbkk!xjb::mLQ\Kr3~'4wE5k|j89x>,<.'"km>HBxz{wnn)1? A<(mA +KR>u"WpT~ ,w'uW&;_2z(Oc{?6v1 HDJjS;k}'~|yNX6JB6qwz NH4d-:[~#zzsX;Uqh uO;Bhh0 J'ckl~mJ#'!-QDl([q!kJllq&e`k^|Q m D)afl== Z~pqndu*dL$$d31}236IKrqi+~Kr6s8-i#dN4}K9)l&w'x~p90=:pyi5r0nfpubkbI(>w#z:4'/Q(|$:6?f.0;.N!> ysp<^t9|-JZaxN3y8I%s{G s=.LN?E!rw%8#rDq h~W:,r&_&{ VW>DSqayN~#qzc`(rGQL1I*O/) w##}H{feTgӯ*w>o'w.&a(k]u6c *OjNh!Pu 8/nA@@+?zo:rc,N[f$YW~yF kak0)`{^I+8\S |(_cy@C  94h Pv!sk,@VkE$S[WoB.E]Mq2Wr=r]Y Qb7 @F#=[7TS*ug{r-ob VgrCZX5e}jz@wK@F"YQC]OI,2DxZNTARUNLl@j)x^Q0 p^Z8x^Z 4iel`2HgaxW|OL0J^O+V]clt0GRad2i!-.2WXfa:>?)v ue f`D:7vg6W-kd#7})ud^cL=" a$$>d`)`j'pM).N XRBFACSQIPS\k)_7igeutMAL^4GAA6bx:0&&'w}jqu3+?c43G< o5z!: ~HUy:>jbP- 9!6NKCo%/z^3ofb&< " g>!G{j-}zf{)`BgHA2^U' yv!+&} c@ZolMJ)0E \qdgb4H2 _Z YgTi+'w=\ n!G+?zE /B]e@$PW:&0Aw4$1d+g!s1_&hr!oSBx*sUF2|d~D Z(&m5K{vU^qsqXL.1d6o>6aBOjkB4u O37.`ns:a@G/Ww8;hRE|>xk._gay18k0d-9a`p1bg!r/2{(@Z@n~W.!dp=2D>/DD^mQ&l9 f`9f]vld&Jy[-;pi-UkvA(zJ[y-E\s|.jZ8 "<9[>[m鬊3j5-'JbtUh?]F71HJ,$$c2v[kw;u8E~[;fk&/Ie8%f/xFP3IXZyKL/,_y.Op|#k`;P{">din,!>*fac"Io5>%2"- `_8Ox8| (P+%l+% ;4"&n ^X;/\ gj.f;-i3aV1xXK 96qs3a)zmMl ~J{$x|xmp)#'irSlx?:Mf34j$tx4}5WMr#S5~/uW(3e;px9"tg[?Qzng~,(=*Z x)>'hRjs@? hD're1}7<'H-er=|5R#rlN\5,frR+Gtz8>;6O~v+b)mj>?C<(DCys RHx[k+`i7~0],4Sqkt^y=6j5[REPn0 9h=' nMuvujr{q.x,s3G4v b>b$`1R'99m{&F~ )n"- $#*?fwH1eX7-,?y~&mD4a&o#P:dy~i }%\zc'.慤S ;Ap) ׺{9t !aXV*]7r/{G0r=fn_d_#GA|.&&t=,LGM4"~72;uZlwOPPlAS"z-J(CagDs"dK7r/bv3bO1lJ Bou c l[~M]rD>R'&x*[ia@lv. &hW# vQ-TZ~NJ% wR~9E]<]VM Atgk/`k?GC#-9Tj{H?+'A}mg'G_z~7 y]vobUYX[ |sA:k*lTy%!MBs[x=<\ZCc|UgXX3^LM.Pe!\^!hBMU ^@`+9nW"H%xXVO%d(Hz%lj5<5 $d-dw0#d&hl;a e0+qu|;;#~l&1-tWQGA} W;y\[):g>i3Hk814:6wcXBmx8tC %O{d?3vy7g! P LThuT;yd; 6{&$m,@ b|ou0=D8Ls,4svKadDYn/r^SrIY;qzzh_Hucp*i)9ge@_Fc;jV+  y:njJcSx m1K'3x0@Zp(:8xXj$2R@3UVAzxd?p,!<'1"%f+Ps_M7xL#przumk:Ew }HrKy$!* mn1HgJd]1gqjaQJ]|D o6?@r,9-1<~~&.u.NXL>4.(Gta7lVq'`G2 Q=;jpM g3/t #Y:)IR7:$Vxr{w4nL % zmEC%^id2HgUSQ& RGoi'mMb=/YO R\YF3qG4ah)8}Z+\H}]I~Yn^VtYAzxMuE6c|sa_%VtJEZNMI'nr2u+6Qay.0sur[2,fG;OCi](\1S.'@{V/d`qDdV@E.DK$VS+LS }8#vi5 1Tmdf+3+F""/Yp-|J_[+9?iNUJj[n e'^-1$25uN"c&2y$sWn-"vfY _*7q_^)8)&l0mS`j`YBf2^IbzqUTgpq31~"+ Z^JR.rUk>ZsN#hs,4 `:v`-!Ue,r%%av6w;.l=f;h'+o3>w^ST4y%WBh<'kr%e" -9;7; `8dXdx4yP-vw $Wn 7y8\!Ey?:kC|Z6>2>tt s)%M_D P(w=?{RGU`-#R_}NpX,N$|F~msef6d(ik97W@AsygW9dhe|sf|0%L3 y(_]/,710.37 g d1%n' UEr.d<~tletK0)Y$h*:V1utj? X',Xo.;,?S=fSz;"EgXu"tIL<afVeG dERjQVgE_?Zy#2_=i9a`^UE2X;%%maX3.FM@Yb= w_Z1o Q^RLSZpG0UWJH;82! C c >~",UKbmG=u>*3hM^n YUr GR:GhxUIiKS涣hkR@PLmS/z<&-1u?\_ <\Q9^)e/no_"m`}R>1bSNh2~5}W=&?jnC^>cq3x{M6wOJwE:69Wyyn8LFz>*)uDdev&$q`}N*L9$x;Lm e1~YUH"?1 !y1O ~z9,n|pnI$]* p)/4KCm aD*@tZ" 740!n#4,8U% /<Ly I%"3)f7~zd,qNk* T*4)}$_hM&Mh;f;{yfTwk/IWS}Bl`q6B?bHRe 84KQ_YwQeWocal$,:-.f4@]_s*;4(/pv5y2!9+:k2t~5i-R{w 5$%] M%tLxT}8Q %AHkDL!-vV3|t @NdO8\KRQL%a@5j vCL0<]VD2mOE^INPgHw- ~Q BG23 =<.ctszqR0OE:AQl^CQlAd3xa+ e-!PH-fNdV_G}vn3_TjVT,P %E@@_" kT4FP%e]$W}/{JNHgAH9 [ODJC]]3%fDW{)Į{RW}|PDKpR~ !m@)Wj WK s[oqjV| \UyPU\})Yk YT*VV BSm,6z ?ul1N<%Lj#=hvKve[v<\)}R=lJ@ QAIfR-qr`WzR@1w xOZYKfWb($uGVA56zz3 z"&Z] LbrA$^[GG@MU|U)AHTf [uw ls. VMS.BCK&b 1[V9.IPL.PROGS]POST.ICN;1CN;1o & stop("post: cannot read " || arg[1])) reply_headers(inf, article) every write(article, \opts["p"] | " > ", !inf) close(inf) } # Query if newsgroups, subject, and distribution have # not been specified on the command line. else { write(article, "Newsgroups: ", validate(\opts["n"] | query("Newsgroups: "), "active")) write(article, "Subject: ", \opts["s"] | query("Subject: ")) write(article, "Distribution: ", validate(\opts["d"] | query("Distribution: ", default_distribution), "distributions")) every write(article, req_headers()) write(article, "\n") } close(article) edstr := (getenv("EDITOR") | editor) || " " || tmpfile || " < " || console system(edstr) upto('nN', query("Are you sure you want to post this to Usenet y/n? ")) & { if upto('yY', query("Save your draft article y/n? ")) then stop("Your article is saved in ", tmpfile) else { remove(tmpfile) stop("Posting aborted.") } } # For inews, we supply the headers, inews supplies the .signature. if mode == "local" then mode := newslib || "inews -h" else { \sigfile & { article := open(tmpfile, "a") write(article, "--") every write(article, lookup(sigfile)) } # To post via sendnews (mail), we prefix lines with 'N'. # For rnews, don't force an immediate poll. case mode of { "mail": { mode ||:= " " || smarthost || "!rnews" outf := open(tmp2 := tempname(tmpdir), "w") every write(outf, "N", lookup(tmpfile)) remove(tmpfile) rename(tmp2, tmpfile) } "uux": mode ||:= " - -r " || smarthost || "!rnews" } } mode ||:= " < " || tmpfile (system(mode) = 0) & write("Article posted!") remove(tmpfile) end # To parse the original article, we use case-insensitive # matches on the headers. The Reply-to and Followup-To # headers usually appear later than From and Newsgroups, so # they take precedence. By usenet convention, we query # the user if Followup-To on the original is `poster'. procedure reply_headers(infile, art) local fullname, address, quoter, date, id, subject, distribution local group, refs every !infile ? { tab(match("from: " | "reply-to: ", map(&subject))) & { if find("<") then { fullname := (trim(tab(upto('<'))) ~== "") address := (move(1), tab(find(">"))) } else { address := trim(tab(upto('(') | 0)) fullname := (move(1), tab(find(")"))) } quoter := (\fullname | address) } tab(match("date: ", map(&subject))) & date := tab(0) tab(match("message-id: ", map(&subject))) & id := tab(0) tab(match("subject: ", map(&subject))) & subject := tab(0) tab(match("distribution: ", map(&subject))) & distribution := tab(0) tab(match("newsgroups: " | "followup-to: ", map(&subject))) & group := tab(0) tab(match("references: ", map(&subject))) & refs := tab(0) (\quoter & *&subject = 0) & { find("poster", group) & { write(quoter, " has requested followups by email.") upto('yY', query("Do you want to abort this posting y/n? ")) & { remove(tmpfile) stop("Posting aborted.") } group := &null } write(art, "Newsgroups: ", \group | validate(\opts["n"] | query("Newsgroups: "), "active")) write(art, "Subject: ", \opts["s"] | \subject | query("Subject: ")) \distribution | distribution := validate(\opts["d"], "distributions") & write(art, "Distribution: ", distribution) write(art, "References: ", (\refs ||:= " ") | "", id) every write(art, req_headers()) write(art, "In-reply-to: ", quoter, "'s message of ", date) write(art, "\nIn ", id, ", ", quoter, " writes:\n") return } } end # We need a unique message-id, and a date in RFC822 format. # Easy with UNIX systems that support `date -u'; with the # others, we leave the local timezone. The first inews site # will correct it. procedure req_headers() local uniq, date, month, day, time, zone, year uniq := "<" &date || &clock ? while tab(upto(&digits)) do uniq ||:= tab(many(&digits)) uniq ||:= "@" || sysname || domain || ">" if tz == "unix" then { date := pipe("date -u", "date") date ? { month := (tab(find(" ") + 1), tab(many(&letters))) day := (tab(upto(&digits)), tab(many(&digits))) time := (tab(upto(&digits++':')), tab(many(&digits++':'))) zone := (tab(upto(&ucase)), tab(many(&ucase))) year := (tab(upto(&digits)+ 2), tab(0)) } date := day || " " || month || " " || year || " " || time || " " || zone } else { &dateline ? { month := left((tab(find(" ")+1), tab(many(&letters))), 3) || " " date := (tab(upto(&digits)), tab(many(&digits))) || " " || month date ||:= (tab(upto(&digits)), right(tab(many(&digits)), 2)) } date ||:= " " || &clock || " " || tz } mode ~== "local" & suspend "Message-ID: " || uniq suspend "Date: " || date \org & suspend "Organization: " || org \opts["f"] & return "Followup-To: " || ((opts["f"] == "poster") | validate(opts["f"], "active")) end # Richard Goerwitz's generator. procedure tempname(dir) local temp_name every temp_name := dir || "article." || right(1 to 999,3,"0") do { close(open(temp_name)) & next suspend \temp_name } end # On systems with pipes, pipe() will read from the first # successful command of the list given as arguments. procedure pipe(cmd[]) local inf, got initial find("pipes" | "compiled", &features) | stop("No pipes.") while inf := open("(" || pop(cmd) || ") 2>&1", "pr") do { got := [] every put(got, !inf) close(inf) = 0 & { suspend !got break } } end # The dirty work of reading from a file. procedure lookup(what) local inf inf := open(what, "r") | fail suspend !inf close(inf) end # Query opens stdin because the system call to the editor # redirects input. The optional parameter is a default # response if the user answers with . procedure query(prompt, def) local ans static stdin initial stdin := open(console) writes(prompt) ans := read(stdin) return (*ans = 0 & \def) | ans end # A quick and dirty kludge. Validate() builds a sorted list. # When an element is found, it is popped and the search moves # to the next item. The procedure assumes the file is also # sorted. procedure validate(what, where) local valid, stuff, sf, a mode ~== "local" & return what valid := &letters ++ '.-' ++ &digits stuff := [] what ? while tab(upto(valid)) do put(stuff,tab(many(valid))) sf := open(newslib || where) | { remove(tmpfile) stop("post: cannot open ", newslib || where) } stuff := sort(stuff) a := pop(stuff) every !sf ? match(a) & (a := pop(stuff)) | return what remove(tmpfile) stop("`", a, "' is not in ", newslib || where) end i*[V9.IPL.PROGS]PRESS.ICN;1+, .3/ 431f-b 10123KPWO456뤚7`g89Jj$GHJ6zp VMS.BCK b 1[V9.IPL.PROGS]PRESS.ICN;1N;13############################################################################ # # File: press.icn # # Subject: Program to archive files # # Author: Robert J. Alexander # # Date: November 14, 1991 # ############################################################################ # # Besides being a useful file archiving utility, this program can be # used to experiment with the LZW compression process, as it contains # extensive tracing facilities that illustrate the process in detail. # # Compression can be turned off if faster archiving is desired. # # The LZW compression procedures in this program are general purpose # and suitable for reuse in other programs. # ############################################################################ # # Instructions for use are summarized in "help" procedures that follow. # ############################################################################ # # Links: options, colmize, wildcard # ############################################################################ link options, colmize, wildcard procedure Usage(s) /s := "" stop("\nUsage:_ \n Compress: press -c [] [...]_ \n Archive: press -a [] [...]_ \n Extract: press -x [] [...]_ \n Print: press -p [] [...]_ \n List: press -l [] [...]_ \n Delete: press -d [] ..._ \n_ \n Help: press (prints this message)_ \n More help:press -h (prints more details)_ \n_ \n -c perform compression into _ \n -a add file(s) to in uncompressed format_ \n -x extract (& decompress) file(s) from _ \n -p extract (& decompress) from to standard output_ \n -l list file names in _ \n -d delete file(s) from _ \n (produces new file -- old file saved with \".bak\" suffix)_ \n_ \n Options:_ \n -q work quietly_ \n -t text file(s) (retrieves with correct line end format)_ \n -n process all files in archive *except* specified files_ \n_ \n LZW Experimentor Options:_ \n -T produce detailed compression trace info (to standard error file)_ \n -S maximum compression string table size_ \n (for -c only -- default = 1024)_ \n" ,s) end procedure MoreHelp() return "\n _ The archive (-a) option means to add the file without compression._ \n_ \n If no files are specified to extract, print, or list, then all files_ \n in the archive are used._ \n_ \n UNIX-style filename wildcard conventions can be used to express_ \n the archived file names for extract, print, list, and delete_ \n operations. Be sure to quote names containing wildcard characters_ \n so that they aren't expanded by the shell (if applicable)._ \n_ \n If a or is \"-\", or if no files_ \n are specified, standard input is archived._ \n_ \n If for extract, print, or list is \"-\", standard input_ \n is the archive file._ \n_ \n If for compress or archive is \"-\", archive is written_ \n to standard output._ \n_ \n New files archived to an existing archive file are always appended,_ \n deleting any previously archived version of the same file name._ \n_ \n Archive files can be simply concatenated to create their union._ \n However, if the same file exists in both archives, only the first_ \n in the resulting file will be able to be accessed._ \n_ \n If a \"compressed\" file turns out to be longer than the uncompressed_ \n file (rare but possible, usually for very short files), the file will_ \n automatically be archived in uncompressed format._ \n_ \n A default file name suffix of \".prx\" is assumed for _ \n names that are specified without a suffix._ \n_ \n_ \n LZW \"internals\" option:_ \n_ \n If the specified maximum table size is positive, the string table is_ \n discarded when the maximum size is reached and rebuilt (usually the_ \n better choice). If negative, the original table is not discarded,_ \n which might produce better results in some circumstances. This_ \n option was provided primarily for experimentors._ \n" end # # Global variables. # # Note: additional globals that contain option values are defined near # Options(), below. # global inchars,outchars,tinchars,toutchars,lzw_recycles, lzw_stringTable,rf,wf,magic,rline,wline # # Main procedure. # procedure main(arg) local arcfile # # Initialize. # Options(arg) inchars := outchars := tinchars := toutchars := lzw_recycles := 0 magic := "\^p\^r\^e\^s\^s\^i\^c\^n" # # Do requested operation. # arcfile := DefaultSuffix(\(compr | archive | extract | print | lister | deleter), "prx") | Usage() if \(compr | archive) then Archive(arcfile,arg) else if \(extract | print) then Extract(arcfile,arg) else if \lister then List(arcfile,arg) else if \deleter then Delete(arcfile,arg) return end # # Option global variables. # global lzw_trace,maxTableSpecified,maxTableSize,print,quiet,tmode,WildMatch global extract,compr,archive,lister,deleter # # Options() -- Handle command line options. # procedure Options(arg) local opt,n,x opt := options(arg,"hc:a:x:p:l:d:qtTS+n") if \opt["h"] then Usage(MoreHelp()) extract := opt["x"] print := opt["p"] compr := opt["c"] archive := opt["a"] lister := opt["l"] deleter := opt["d"] quiet := opt["q"] tmode := if \opt["t"] then "t" else "u" WildMatch := if \opt["n"] then not_wild_match else whole_wild_match lzw_trace := opt["T"] maxTableSpecified := opt["S"] maxTableSize := \maxTableSpecified | 1024 # 10 bits default n := 0 every x := compr | archive | extract | print | lister | deleter do if \x then n +:= 1 if n ~= 1 then Usage() return end # # Archive() -- Do archiving. # procedure Archive(arcfile,arg) local fn,addr,realLen,maxT,length,addr2,deleteFiles,new_data_start # # Confirm options and open the archive file. # if *arg = 0 | WildMatch === not_wild_match then Usage() if ("" | "-") ~== arcfile then { if wf := open(arcfile,"ru") then { if not (reads(wf,*magic) == magic) then { stop("Invalid archive file ",arcfile) } close(wf) } wf := open(arcfile,"bu" | "wu") | stop("Can't open archive file ",arcfile) if tmode == "t" then rline := "\n" seek(wf,0) if where(wf) = 1 then writes(wf,magic) } else { wf := &output arcfile := "stdout" } new_data_start := where(wf) ## if /quiet then ## write(&errout,"New data starting at byte ",new_data_start," of ",arcfile) # # Loop to process files on command line. # if *arg = 0 then arg := ["-"] deleteFiles := [] every fn := !arg do { if fn === arcfile then next if /quiet then writes(&errout,"File \"",fn,"\" -- ") rf := if fn ~== "-" then open(fn,tmode) | &null else &input if /rf then { if /quiet then write(&errout,"Can't open input file \"",fn,"\" -- skipped") next } put(deleteFiles,fn) WriteString(wf,Tail(fn)) addr := where(rf) seek(rf,0) realLen := where(rf) - 1 WriteInteger(wf,realLen) seek(rf,addr) if /quiet then writes(&errout,"Length: ",realLen) addr := where(wf) WriteInteger(c VMS.BCK b 1[V9.IPL.PROGS]PRESS.ICN;1N;113sAwf,0) writes(wf,"\1") # write a compression version string if \compr then { WriteInteger(wf,maxTableSize) maxT := Compress(R,W,maxTableSize) length := outchars + 4 if /quiet then writes(&errout," Compressed: ",length," ", Percent(realLen - outchars,realLen)) } # # If compressed file is larger than original, just copy the original. # if \archive | length > realLen then { if /quiet then writes(&errout," -- Archived uncompressed") seek(wf,addr + 4) writes(wf,"\0") # write a zero version string for uncompressed seek(rf,1) CopyFile(rf,wf) inchars := outchars := length := realLen maxT := 0 lzw_stringTable := "" } if /quiet then write(&errout) close(rf) addr2 := where(wf) seek(wf,addr) WriteInteger(wf,length) seek(wf,addr2) if /quiet then Stats(maxT) } close(wf) if /quiet then if *arg > 1 then FinalStats() Delete(arcfile,deleteFiles,new_data_start) return end # # Extract() -- Extract a file from the archive. # procedure Extract(arcfile,arg) local fileSet,wfn,realLen,cmprLen,maxT,version,theArg if \maxTableSpecified then Usage() rf := OpenReadArchive(arcfile) arcfile := rf[2] rf := rf[1] if *arg > 0 then fileSet := set(arg) # # Process input file. # while wfn := ReadString(rf) do { (realLen := ReadInteger(rf) & cmprLen := ReadInteger(rf) & version := ord(reads(rf))) | stop("Bad format in compressed file") if /quiet then writes(&errout,"File \"",wfn,"\" -- length: ",realLen, " compressed: ",cmprLen," bytes -- ") if /fileSet | WildMatch(theArg := !arg,wfn) then { delete(\fileSet,theArg) if not version = (0 | 1) then { if /quiet then write(&errout,"can't handle this compression type (",version, ") -- skipped") seek(rf,where(rf) + cmprLen) } else { if /quiet then write(&errout,"extracted") if /print then { wf := open(wfn,"w" || tmode) | &null if /wf then { if /quiet then write(&errout,"Can't open output file \"",wfn, "\" -- quitting") exit(1) } } else wf := &output if version = 1 then { maxT := ReadInteger(rf) | stop("Error in archive file format: ","table size missing") Decompress(R,W,maxT) } else { maxT := 0 CopyFile(rf,wf,cmprLen) outchars := inchars := realLen } close(&output ~=== wf) if /quiet then Stats(maxT) } } else { if /quiet then write(&errout,"skipped") seek(rf,where(rf) + cmprLen) } } close(rf) FilesNotFound(fileSet) return end # # List() -- Skip through the archive, extracting info about files, # then list in columns. # procedure List(arcfile,arg) local fileSet,flist,wfn,realLen,cmprLen,version,theArg if \maxTableSpecified then Usage() rf := OpenReadArchive(arcfile) arcfile := rf[2] rf := rf[1] write(&errout,"Archive file ",arcfile,":") if *arg > 0 then fileSet := set(arg) # # Process input file. # flist := [] while wfn := ReadString(rf) do { (realLen := ReadInteger(rf) & cmprLen := ReadInteger(rf) & version := ord(reads(rf))) | stop("Bad format in compressed file") if /fileSet | WildMatch(theArg := !arg,wfn) then { delete(\fileSet,theArg) put(flist,"\"" || wfn || "\" " || realLen || "->" || cmprLen) tinchars +:= realLen toutchars +:= cmprLen } seek(rf,where(rf) + cmprLen) } close(rf) every write(&errout,colmize(sort(flist))) FilesNotFound(fileSet) FinalStats() return end # # Delete() -- Delete a file from the archive. # procedure Delete(arcfile,arg,new_data_start) local workfn,workf,fileSet,wfn,realLen,cmprLen,bakfn,deletedFiles, head,version,hdrLen,theArg if *arg = 0 | (\deleter & \maxTableSpecified) then Usage() rf := OpenReadArchive(arcfile) arcfile := rf[2] rf := rf[1] workfn := Root(arcfile) || ".wrk" workf := open(workfn,"wu") | stop("Can't open work file ",workfn) writes(workf,magic) fileSet := set(arg) # # Process input file. # deletedFiles := 0 head := if \deleter then "File" else "Replaced file" while not (\new_data_start <= where(rf)) & wfn := ReadString(rf) do { (realLen := ReadInteger(rf) & cmprLen := ReadInteger(rf) & version := ord(reads(rf))) | stop("Bad format in compressed file") if /quiet then writes(&errout,head," \"",wfn,"\" -- length: ",realLen, " compressed: ",cmprLen," bytes -- ") if WildMatch(theArg := !arg,wfn) then { deletedFiles +:= 1 delete(fileSet,theArg) if /quiet then write(&errout,"deleted") seek(rf,where(rf) + cmprLen) } else { if /quiet then write(&errout,"kept") hdrLen := *wfn + 10 seek(rf,where(rf) - hdrLen) CopyFile(rf,workf,cmprLen + hdrLen) } } if deletedFiles > 0 then { CopyFile(rf,workf) every close(workf | rf) if (rf ~=== &input) then { bakfn := Root(arcfile) || ".bak" remove(bakfn) rename(arcfile,bakfn) | stop("Couldn't rename ",arcfile," to ",bakfn) } rename(workfn,arcfile) | stop("Couldn't rename ",workfn," to ",arcfile) } else { every close(workf | rf) remove(workfn) } if \deleter then FilesNotFound(fileSet) return end # # OpenReadArchive() -- Open an archive for reading. # procedure OpenReadArchive(arcfile) local rf rf := if ("" | "-") ~== arcfile then open(arcfile,"ru") | stop("Can't open archive file ",arcfile) else { arcfile := "stdin" &input } if reads(rf,*magic) ~== magic then stop("Invalid archive file ",arcfile) if tmode == "t" then wline := "\x0a" return [rf,arcfile] end # # FilesNotFound() -- List the files remaining in "fileSet". # procedure FilesNotFound(fileSet) return if *\fileSet > 0 then { write(&errout,"\nFiles not found:") every write(&errout," ",colmize(sort(fileSet),78)) &null } end # # Stats() -- Print stats after a file. # procedure Stats(maxTableSize) # # Write statistics # if \lzw_trace then write(&errout, " table size = ",*lzw_stringTable,"/",maxTableSize, " (recycles: ",lzw_recycles,")") tinchars +:= inchars toutchars +:= outchars inchars := outchars := lzw_recycles := 0 return end # # FinalStats() -- Print final stats. # procedure FinalStats() # # Write final statistics # write(&errout,"\nTotals: ", "\n input: ",tinchars, "\n output: ",toutchars, "\n compression: ",Percent(tinchars - toutchars,tinchars) | "", "\n") return end # # WriteInteger() -- Write a 4-byte binary integer to "f". # procedure WriteInteger(f,i) local s s := "" every 1 to 4 do { s := char(i % 256) || s i /:= 256 } re'1v VMS.BCK b 1[V9.IPL.PROGS]PRESS.ICN;1;1;13Ծturn writes(f,s) end # # ReadInteger() -- Read a 4-byte binary integer from "f". # procedure ReadInteger(f) local s,v s := reads(f,4) | fail if *s < 4 then stop("Error in archive file format: ","bad integer") v := 0 s ? while v := v * 256 + ord(move(1)) return v end # # WriteString() -- Write a string preceded by a length byte to "f". # procedure WriteString(f,s) return writes(f,char(*s),s) end # # ReadString() -- Read a string preceded by a length byte from "f". # procedure ReadString(f) local len,s len := ord(reads(f)) | fail s := reads(f,len) if *s < len then stop("Error in archive file format: ","bad string") return s end # # CopyFile() -- Copy a file. # procedure CopyFile(rf,wf,len) local s if /len then { while writes(wf,s := reads(rf,1000)) } else { while len > 1000 & writes(wf,s := reads(rf,1000)) do len -:= *s writes(wf,s := reads(rf,len)) & len -:= *s } return len end # # Percent() -- Format a rational number "n"/"d" as a percentage. # procedure Percent(n,d) local sign,whole,fraction n / (0.0 ~= d) ? { sign := ="-" | "" whole := tab(find(".")) move(1) fraction := tab(0) } return (\sign || ("0" ~== whole | "") || (if whole == "0" then integer else 1)(left(fraction,2,"0")) | "--") || "%" end # # R() -- Read-a-character procedure. # procedure R() local c c := reads(rf) | fail inchars +:= 1 if c === rline then c := "\x0a" return c end # # W() -- Write-characters procedure. # procedure W(s) local i every i := find(\wline,s) do s[i] := "\n" outchars +:= *s return writes(wf,s) end # # Tail() -- Return the file name portion (minus the path) of a # qualified file name. # procedure Tail(fn) local i i := 0 every i := upto('/\\:',fn) return .fn[i + 1:0] end # # Root() -- Return the root portion (minus the suffix) of a file name. # procedure Root(fn) local i i := 0 every i := find(".",fn) return .fn[1:i] end procedure DefaultSuffix(fn,suf) local i return fn || "." || suf end ############################################################################ # # Compress() -- LZW compression # # Arguments: # # inproc a procedure that returns a single character from # the input stream. # # outproc a procedure that writes a single character (its # argument) to the output stream. # # maxTableSize the maximum size to which the string table # is allowed to grow before something is done about it. # If the size is positive, the table is discarded and # a new one started. If negative, it is retained, but # no new entries are added. # procedure Compress(inproc,outproc,maxTableSize) local EOF,c,charTable,junk1,junk2,outcode,s,t,tossTable,x # # Initialize. # /maxTableSize := 1024 # default 10 "bits" tossTable := maxTableSize /lzw_recycles := 0 if maxTableSize < 0 then maxTableSize := -maxTableSize charTable := table() every c := !&cset do charTable[c] := ord(c) EOF := charTable[*charTable] := *charTable # reserve code=256 for EOF lzw_stringTable := copy(charTable) # # Compress the input stream. # s := inproc() | return maxTableSize if \lzw_trace then { write(&errout,"\nInput string\tOutput code\tNew table entry") writes(&errout,"\"",image(s)[2:-1]) } while c := inproc() do { if \lzw_trace then writes(&errout,image(c)[2:-1]) if \lzw_stringTable[t := s || c] then s := t else { Compress_output(outproc,junk2 := lzw_stringTable[s], junk1 := *lzw_stringTable) if *lzw_stringTable < maxTableSize then lzw_stringTable[t] := *lzw_stringTable else if tossTable >= 0 then { lzw_stringTable := copy(charTable) lzw_recycles +:= 1 } if \lzw_trace then writes(&errout,"\"\t\t", image(char(*&cset > junk2) | junk2), "(",junk1,")\t\t",lzw_stringTable[t]," = ",image(t),"\n\"") s := c } } Compress_output(outproc,junk2 := lzw_stringTable[s], junk1 := *lzw_stringTable) if *lzw_stringTable < maxTableSize then {} else if tossTable >= 0 then { lzw_stringTable := copy(charTable) lzw_recycles +:= 1 } if \lzw_trace then writes(&errout,"\"\t\t", image(char(*&cset > junk2) | junk2),"(",junk1,")\n") Compress_output(outproc,EOF,*lzw_stringTable) if \lzw_trace then write(&errout,"\"\t\t",EOF) Compress_output(outproc) return maxTableSize end procedure Compress_output(outproc,code,stringTableSize) local outcode static max,bits,buffer,bufferbits,lastSize # # Initialize. # initial { lastSize := 1000000 buffer := bufferbits := 0 } # # If this is "close" call, flush buffer and reinitialize. # if /code then { outcode := &null if bufferbits > 0 then outproc(char(outcode := ishift(buffer,8 - bufferbits))) lastSize := 1000000 buffer := bufferbits := 0 return outcode } # # Expand output code size if necessary. # if stringTableSize < lastSize then { max := 1 bits := 0 } while stringTableSize > max do { max *:= 2 bits +:= 1 } lastSize := stringTableSize # # Merge new code into buffer. # buffer := ior(ishift(buffer,bits),code) bufferbits +:= bits # # Output bits. # while bufferbits >= 8 do { outproc(char(outcode := ishift(buffer,8 - bufferbits))) buffer := ixor(buffer,ishift(outcode,bufferbits - 8)) bufferbits -:= 8 } return outcode end ############################################################################ # # Decompress() -- LZW decompression of compressed stream created # by Compress() # # Arguments: # # inproc a procedure that returns a single character from # the input stream. # # outproc a procedure that writes a single character (its # argument) to the output stream. # procedure Decompress(inproc,outproc,maxTableSize) local EOF,c,charSize,code,i,new_code,old_strg, strg,tossTable # # Initialize. # /maxTableSize := 1024 # default 10 "bits" tossTable := maxTableSize /lzw_recycles := 0 if maxTableSize < 0 then maxTableSize := -maxTableSize maxTableSize -:= 1 lzw_stringTable := list(*&cset) every i := 1 to *lzw_stringTable do lzw_stringTable[i] := char(i - 1) put(lzw_stringTable,EOF := *lzw_stringTable) # reserve code=256 for EOF charSize := *lzw_stringTable if \lzw_trace then write(&errout,"\nInput code\tOutput string\tNew table entry") # # Decompress the input stream. # while old_strg := lzw_stringTable[Decompress_read_code(inproc, *lzw_stringTable,EOF) + 1] do { if \lzw_trace then write(&errout,image(old_strg),"(",*lzw_stringTable,")", "\t",image(old_strg)) outproc(old_strg) c := old_strg[1] (while new_code := Decompress_read_code(inproc, *lzw_stringTable + 1,EOF) do { strg := lzw_stringTable[new_code + 1] | old_strg || c outproc(strg) c := strg[1] if \lzw_trace then write(&errout,image(char(*&cset > new_code) \ 1 | new_code), "(",*lzw_stringTable + 1,")","\t", imagE VMS.BCK b 1[V9.IPL.PROGS]PRESS.ICN;1CN;13Iy.e(strg),"\t\t", *lzw_stringTable," = ",image(old_strg || c)) if *lzw_stringTable < maxTableSize then put(lzw_stringTable,old_strg || c) else if tossTable >= 0 then { lzw_stringTable := lzw_stringTable[1:charSize + 1] lzw_recycles +:= 1 break } old_strg := strg }) | break # exit outer loop if this loop completed } Decompress_read_code() return maxTableSize end procedure Decompress_read_code(inproc,stringTableSize,EOF) local code static max,bits,buffer,bufferbits,lastSize # # Initialize. # initial { lastSize := 1000000 buffer := bufferbits := 0 } # # Reinitialize if called with no arguments. # if /inproc then { lastSize := 1000000 buffer := bufferbits := 0 return } # # Expand code size if necessary. # if stringTableSize < lastSize then { max := 1 bits := 0 } while stringTableSize > max do { max *:= 2 bits +:= 1 } # # Read in more data if necessary. # while bufferbits < bits do { buffer := ior(ishift(buffer,8),ord(inproc())) | stop("Premature end of file") bufferbits +:= 8 } # # Extract code from buffer and return. # code := ishift(buffer,bits - bufferbits) buffer := ixor(buffer,ishift(code,bufferbits - bits)) bufferbits -:= bits return EOF ~= code end procedure whole_wild_match(p,s) return wild_match(p,s) > *s end procedure not_wild_match(p,s) return not (wild_match(p,s) > *s) end *[V9.IPL.PROGS]PROFILE.ICN;1+,./ 4w-b 10123KPWO56p7C89Jj$GHJ############################################################################ # # File: profile.icn # # Subject: Program to profile Icon programs # # Author: Richard L. Goerwitz # ############################################################################ # # Version: 1.5 # ############################################################################ # # This very simple profiler takes a single argument - an Icon program # compiled with the -t option. Displays stats on which procedures # were called the most often, and from what lines in what files they # were called. Use this program to figure out what procedures are # getting worked the hardest and why. Counts only invocations and # resumptions; not suspensions, returns, failures. # # If you are running a program that reads from a file, be sure to # protect the redirection symbol from the shell (i.e. "profile # 'myprog < input'" instead of "profile myprog < input"). If a given # program normally reads &input, please redirect stdin to read from # another tty than the one you are running profile from. If you # forget to do this, the results might be very interesting.... Also, # don't redirect stderr, as this contains the trace that profile will # be reading and using to obtain run-time statistics. Profile # automatically redirects stdout to /dev/null. # # Currently runs only under UNIX, but with some tweaking could be # made to run elsewhere as well. # # The display should be pretty much self-explanatory. Filenames and # procedures get truncated at nineteen characters (if the display # gets too wide, it can become hard to read). A star is prepended to # procedures whose statistics have changed since the last screen # update. # ############################################################################ # # Requires: coexpressions, keyboard functions, pipes, UNIX # # Links: iolib or itlib, iscreen # ############################################################################ link iolib link iscreen global CM, LI, CO, CE procedure main(a) local whitespace, firstidchars, idchars, usage, in_data, cmd, line, filename, linenum, procname, t, threshhold whitespace := '\t ' firstidchars := &letters ++ '_' idchars := &digits ++ &letters ++ '_' usage := "usage: profile filename _ (filename = Icon program compiled with -t option)" # # If called with a program name as the first argument, open it, # and pipe the trace output back to this program. Assume the # user knew enough to compile it with the "-t" option. # if *a > 0 then { if find("UNIX", &features) then { cmd := ""; every cmd ||:= !a || " " if find("2>", cmd) then stop("profile: Please don't redirect stderr!") in_data := open(cmd || " 2>&1 1> /dev/null", "pr") | stop("profile: Can't find or execute ", cmd, ".") } else stop("profile: Your OS is not (yet) supported.") } else stop(usage) # clear screen, set up global variables; initialize table setup_screen() t := table() threshhold := 0 while line := read(in_data) do { threshhold +:= 1 # # Break each line down into a file name, line number, and # procedure name. # line ? { tab(many(whitespace)) match(":") & next { filename := trim(tab(find(":"))) & tab(many(whitespace ++ ':')) & linenum := tab(many(&digits)) & tab(many(whitespace ++ '|')) & procname := tab(any(firstidchars)) || tab(many(idchars)) } | next tab(many(whitespace)) # Count only invocations and resumptions. match("suspended"|"failed"|"returned") & next } # # Enter statistics into table. # /t[procname] := table() /t[procname][filename] := table(0) t[procname][filename][linenum] +:= 1 # # Display stats interactively. # if threshhold > 90 then { threshhold := 0 display_stats(t) } } display_stats(t) # Write a nice exit message. goodbye() end # # display_stats: display the information in t interactively # procedure display_stats(t) local l, input, c static top, len, firstline # sets global variables CM, LI, CO, and CE initial { top := 1 # The first line we can write data to on the screen. firstline := 3 len := LI - 4 - firstline } # # Structure the information in t into a list. Note that to obtain # the number of procedures, one must divide l in half. # l := sort_table(t) # # Check for user input. # while kbhit() do { iputs(igoto(CM, 1, LI-1)) writes("Press j/k/^/$/p/q: ") iputs(CE) writes(input := map(getch())) case input of { # Increase or decrease top by 4; don't go beyond 0 or # *l; no even numbers for top (the 4 also must be even). "j" : top := (*l > (top+2) | *l-1) "\r" : top := (*l > (top+2) | *l-1) "\n" : top := (*l > (top+2) | *l-1) "k" : top := (0 < (top-2) | 1) "\x02" : top := (0 < (top-4) | 1) "\x15": top := (0 < (top-4) | 1) " " : top := (*l > (top+4) | *l-1) "\x06" : top := (*l > (top+4) | *l-1) "\x04" : toxMIl VMS.BCKb 19.IPL.PROGS]PROFILE.ICN;1;1 p := (*l > (top+4) | *l-1) "^" : top := 1 "$" : top := *l-1 "p" : { iputs(igoto(CM, 1, LI-1)) writes("Press any key to continue: "); iputs(CE) until kbhit() & getch() do delay(500) } "q" : goodbye() "\x0C" : setup_screen() "\x012": setup_screen() default: { if any(&digits, input) then { while c := getche() do { if c == ("\n"|"\r") then { if not (input <:= 1) then input +:= input % 2 - 1 top := (0 < input | 1) top := (*l > input | *l-1) break } else { if any(&digits, c) then input ||:= c & next else break } } } } } iputs(igoto(CM, 1, LI-1)) writes("Press j/k/^/$/p/q: ") iputs(CE) } # # Display the information contained in table t via list l2. # write_list(l, top, len, firstline) return end # # sort_table: structure the info in t into a list # # What a mess. T is a table, keys = procedure names, values = # another table. These other tables are tables where keys = file # names and values = yet another table. These yet other tables # are structured as follows: keys = line numbers, values = number # of invocations. The idea is to collapse all of these tables # into sorted lists, and at the same time count up the total # number of invocations for a given procedure name (going through # all its invocations at every line in every file). A new table # is then created where keys = procedure names and values = total # number of invocations. Yet another sort is done on the basis of # total number of invocations. # procedure sort_table(t) local t2, total_t, k, total, i, l, l2 static old_totals initial old_totals := table() t2 := copy(t) total_t := table() every k := key(t2) do { t2[k] := sort(t2[k], 3) total := 0 every i := 2 to *t2[k] by 2 do { every total +:= !t2[k][i] t2[k][i] := sort(t2[k][i], 3) } insert(total_t, k, total) } l2 := list(); l := sort(total_t, 4) every i := 1 to *l-1 by 2 do { push(l2, t2[l[i]]) if not (total_t[l[i]] <= \old_totals[l[i]]) then l[i] := "*" || l[i] push(l2, l[i]) } old_totals := total_t return l2 end # # write_list: write statistics in the upper part of the screen # procedure write_list(l, top, len, firstline) local i, j, k, z, w static last_i #global CM, CE initial last_i := 2 # Arg1, l, is a sorted table of sorted tables of sorted tables! # Firstline is the first line on the screen we can write data to. # i := firstline iputs(igoto(CM, 1, i)); iputs(CE) every j := top to *l by 2 do { writes(left(l[j], 19, " ")) every k := 1 to *l[j+1]-1 by 2 do { iputs(igoto(CM, 20, i)) writes(left(l[j+1][k], 19, " ")) every z := 1 to *l[j+1][k+1]-1 by 2 do { iputs(igoto(CM, 40, i)) writes(left(l[j+1][k+1][z], 7, " ")) iputs(igoto(CM, 48, i)) writes(l[j+1][k+1][z+1]) if (i +:= 1) > (firstline + len) then break break break else iputs(igoto(CM, 1, i)) & iputs(CE) } } } # Clear the remaining lines down to the status line. # every w := i to last_i do { iputs(igoto(CM, 1, w)) iputs(CE) } last_i := i return end # # setup_screen: clear screen, set up status line. # procedure setup_screen() # global CM, LI, CO, CE initial { CM := getval("cm") | stop("setup_screen: No cm capability!") LI := getval("li") CO := getval("co") CE := getval("ce") # UNIX-specific command to disable character echo. system("stty -echo") } clear() iputs(igoto(CM, 1, 1)) emphasize() writes(left(left("procedure name", 19, " ") || left("source file", 20, " ") || left("line", 8, " ") || "number of invocations/resumptions", CO, " ")) normal() status_line("- \"Profile,\" by Richard Goerwitz -") iputs(igoto(CM, 1, LI-1)) writes("J or CR=down; k=up; ^=begin; $=end; p=pause; q=quit: ") iputs(CE) return end # # goodbye: exit, say something nice # procedure goodbye() # UNIX-specific command. system("stty echo") status_line("- \"Profile,\" by Richard Goerwitz -") every boldface() | emphasize() | normal() | boldface() | emphasize() | normal() do { delay(50) iputs(igoto(CM, 1, LI-1)) writes("Hope you enjoyed using profile! ") normal(); iputs(CE) } exit() end # # stop_profile: graceful exit after error # procedure stop_profile(s) # UNIX-specific command. system("stty echo") status_line("- \"Profile,\" by Richard Goerwitz -") iputs(igoto(CM, 1, LI-1)) writes(s); iputs(CE) iputs(igoto(CM, 1, LI)) stop() end *[V9.IPL.PROGS]PROGS.LST;1+,$./ 4-b 10123KPWO56&-Ě7gYĚ89Jj$GHJadlcheck adlcount adlfiltr adlfirst adllist adlsort animal banner based bj c2icn calc callcnt colm comfiles concord conman countlst cross crypt csgen cstrings cvtsum cwd deal delam delamc delta detex diffn diffsort diffsum diffu diffword diskpack duplfile duplproc edscript empg envelope evstream evsum farb farb2 filecnvt fileprnt filesect filter findstr findtext fixhqx fixpath fnctab fnctmpl format fset fuzz gcomp gediff genqueen graphdem grpsort hcal4unx hebcalen hr huffstuf hufftab ibar ibrow icalc icalls icn2c icontent icvt identgen idepth idxtext igrep iheader ihelp iidecode iiencode ilnkxref ilump imagetyp ineeds interpe interpp ipldoc ipp iprint iprofile ipsort ipsplit ipxref irunerr isrcline istrip itab itags iundecl iversion iwriter knapsack krieg kross kwic labels lam latexidx lisp literat loadmap longest makepuzz memsum missile miu mkpasswd monkeys morse mr mtf3 newsrc nim nocr pack paginate papply parens pargen parse parsex patchu pbkdump polydemo post press profile proto psrsplit pt puzz qt queens ranstars recgen reply repro roffcmds rsg ruler scramble setmerge shar shortest shuffile sing snake solit sortname splitlit strpsgml tablc tablw textcnt textcvt tokgen toktab trim ttt turing unique unpack utrim verse vnq when wshfdemo xtable yahtz yescr zipsort *[V9.IPL.PROGS]PROTO.ICN;1+,. / 4 -b 10123KPWO 567 c/89Jj$GHJ############################################################################ # # File: proto.icn # # Subject: Program to show Icon syntactic forms # # Author: Ralph E. Griswold # # Date: January 3, 1993 # ############################################################################ # # This program doesn't "do" anything. It just contains an example of # every syntactic form in Version 7 of Icon (or close to it). It might # be useful for checking programs that process Icon programs. Note, >B VMS.BCKb 1[V9.IPL.PROGS]PROTO.ICN;1N;11 1 however, # that it does not contain many combinations of different syntactic forms. # ############################################################################ # # Program note: # # This program is divided into procedures to avoid overflow with # default values for Icon's translator and linker. # ############################################################################ # # Links: options # # Requires: co-expressions # ############################################################################ link options record three(x,y,z) record zero() record one(z) invocable all global line, count procedure main() expr1() expr2() expr3() expr4(1,2) expr4{1,2} expr5(1,2,3,4) end procedure expr1() local x, y, z local i, j static e1 initial e1 := 0 exit() # get out before there's trouble () {} ();() [] [,] x.y x[i] x[i:j] x[i+:j] x[i-:j] (,,,) x(,,,) not x |x !x *x +x -x end procedure expr2() local x, i, y, j, c1, c2, s1, s2, a2, k, a1 .x /x =x ?x \x ~x @x ^x x \ i x @ y i ^ j i * j i / j i % j c1 ** c2 i + j i - j c1 ++ c2 c1 -- c2 s1 || s2 a1 ||| a2 i < j i <= j i = j i >= j i > j i ~= j s1 << s2 s1 == s2 s1 >>= s2 s1 >> s2 s1 ~== s2 x === y x ~=== y x | y i to j i to j by k x := y x <- y x :=: y x <-> y i +:= j i -:= j i *:= j end procedure expr3() local i, j, c1, c2, s1, s2, a1, a2, x, y, s i /:= j i %:= j i ^:= j i <:= j i <=:= j i =:= j i >=:= j i ~=:= j c1 ++:= c2 c1 --:= c2 c1 **:= c2 s1 ||:= s2 s1 <<:= s2 s1 <<=:= s2 s1 ==:= s2 s1 >>=:= s2 s1 >>:= s2 s1 ~==:= s2 s1 ?:= s2 a1 |||:= a2 x ===:= y x ~===:= y x &:= y x @:= y s ? x x & y create x return return x suspend x suspend x do y fail end procedure expr4() local e1, e2, e, x, i, j, size, s, e3, X_ while e1 do break while e1 do break e2 while e1 do next case e of { x: fail (i > j) | 1 : return } case size(s) of { 1: 1 default: fail } if e1 then e2 if e1 then e2 else e3 repeat e while e1 while e1 do e2 until e1 until e1 do e2 every e1 every e1 do e2 x X_ &cset &null "abc" "abc_ cde" 'abc' 'abc_ cde' "\n" "^a" "\001" "\x01" 1 999999 36ra1 3.5 2.5e4 4e-10 end procedure expr5(a,b,c[]) end *[V9.IPL.PROGS]PSRSPLIT.ICN;1+,./ 4,-b 10123KPWO56>B7ch89Jj$GHJ ############################################################################ # # File: psrsplit.icn # # Subject: Program to separate psrecord.icn output pages # # Author: Gregg M. Townsend # # Date: January 15, 1992 # ############################################################################ # # usage: psrsplit file # # If a file produced by the procedures in psrecord.icn contains multiple # pages, it cannot be easily incorporated into another document. psrsplit # reads such a file and breaks it into individual pages. The algorithm # is frugal of memory and file descriptors at the expense of reading the # input file multiple times. # # For an input file is named xxxx or xxxx.yyy, the output files are # named xxxx.p01, xxxx.p01, etc. for as many pages as are available. # It is assumed that the input file was written by psrecord.icn; the # likelihood of correctly processing anything else is small. # ############################################################################ procedure main(args) local ifile, ofile, iname, basename, oname, pageno, line, n iname := args[1] | stop("usage: ", &progname, " file") ifile := open(iname) | stop("can't open ", iname) basename := (iname ? tab(upto('.') | 0)) every pageno := seq() do { # read file once for each page if pageno < 10 then oname := basename || ".p0" || pageno else oname := basename || ".p" || pageno ofile := open(oname, "w") | stop("can't open ", oname) seek(ifile, 1) | stop("can't rewind ", iname) line := read(ifile) | stop(iname, ": empty file") line ? ="%!" | stop(iname, ": not a PostScript file") write(&errout, " writing ", oname) write(ofile, "%!PS-Adobe-3.0 EPSF-3.0") n := 0 while n < pageno do { # copy to nth "copypage" line := read(ifile) | break break if line ? ="copypage" then n +:= 1 else write(ofile, line) } write(ofile,"showpage") write(ofile,"%%EOF") close(ofile) } end *[V9.IPL.PROGS]PT.ICN;1+,-.H/ 4HF-b 10123KPWOI5687诧89Jj$GHJ############################################################################ # # File: pt.icn # # Subject: Program to produce parse table generator # # Author: Deeporn H. Beardsley # # Date: December 10, 1988 # ############################################################################ # # See pt.man for a description of functionality as well as input and # output format. # ############################################################################ #********************************************************************** #* * #* Main procedure as well as * #* a routine to generate production table, nonterminal, terminal * #* and epsilon sets from the input grammar * #********************************************************************** # # 1. Data structures:- # # E.g. Grammar:- # # A -> ( B ) # A -> B , C # A -> a # B -> ( C ) # B -> C , A # B -> b # C -> ( A ) # C -> A , B # C -> c # # prod_table prod # __________________ _____ _____ _____ # | | | num | 1 | | 2 | | 3 | # | "A" | ------|-->[ |---| ,|---| ,|---| ] # | | | rhs |_|_| |_|_| |_|_| # | | | >+K VMS.BCK-b 1[V9.IPL.PROGS]PT.ICN;1CN;1N;1Hlo | | v # | | | | v ["a"] # | | | v ["B",",","C"] # | | | ["(","B",")"] # |_____|__________| _____ _____ _____ # | | | num | 4 | | 5 | | 6 | # | "B" | ------|-->[ |---| ,|---| ,|---| ] # | | | rhs |_|_| |_|_| |_|_| # | | | | | v # | | | | v ["b"] # | | | v ["C",",","A"] # | | | ["(","C",")"] # |_____|__________| _____ _____ _____ # | | | num | 7 | | 8 | | 9 | # | "C" | ------|-->[ |---| ,|---| ,|---| ] # | | | rhs |_|_| |_|_| |_|_| # | | | | | v # | | | | v ["c"] # | | | v ["A",",","B"] # | | | ["(","A",")"] # ------------------ # # __________________ # firsts | "A" | ------|-->("(", "a", "b", "c") # |-----|----------| # | "B" | ------|-->("(", "a", "b", "c") # |-----|----------| # | "C" | ------|-->("(", "a", "b", "c") # ------------------ # # _______ # NTs | ---|-->("A", "B", "C") # ------- # # _______ # Ts | ---|-->("(", "a", "b", "c") # ------- # # 2. Algorithm:- # # get_productions() -- build productions table (& NT, T # and epsilon sets):- # open grammar file or from stdin # while can get an input line, i.e. production, do # get LHS token and use it as entry value to table # (very first LHS token is start symbol of grammar) # (enter token in nonterminal, NT, set) # get each RHS token & form a list, put this list # in the list, i.e.assigned value, of the table # (enter each RHS token in terminal, T, set) # (if first RHS token is epsilon # enter LHS token in the epsilon set) # (T is the difference of T and NT) # close grammar file # #********************************************************************** global prod_table, NTs, Ts, firsts, stateL, itemL global StartSymbol, start, eoi, epsilon global erratta # to list all items in a state (debugging) record prod(num, rhs) # assigned values for prod_table record arc(From, To) # firsts computation -- closure record item(prodN, lhs, rhs1, rhs2, NextI) record state(C_Set, I_Set, goto) procedure main(opt_list) local opt start := "START" # start symbol for augmented grammar eoi := "EOI" # end-of-input token (constant) epsilon := "EPSILON" # epsilon token (constant) prod_table := table() # productions NTs := set() # non-terminals Ts := set() # terminals firsts := table() # nonterminals only; first(T) = {T} get_firsts(get_productions()) if /StartSymbol then exit(0) # input file empty write_prods() if opt := (!opt_list == "-nt") then write_NTs() if opt := (!opt_list == "-t") then write_Ts() if opt := (!opt_list == "-f") then write_firsts() if opt := (!opt_list == "-e") then erratta := 1 else erratta := 0 stateL := list() # not popped, only for referencing itemL := list() # not popped, only for referencing state0() # closure of start production gotos() # sets if items p_table() # output parse table end procedure get_productions() local Epsilon_Set, LHS, first_RHS_token, grammarFile, line, prods, temp_list local token, ws prods := 0 # for enumeration of productions ws := ' \t' Epsilon_Set := set() # NT's that have epsilon production grammarFile := (open("grammar") | &input) while line := read(grammarFile) do { first_RHS_token := &null # to detect epsilon production temp_list := [] # RHS of production--list of tokens line ? { tab(many(ws)) LHS := tab(upto(ws)) # LHS of production--nonterminal /firsts[LHS] := set() /StartSymbol := LHS # start symbol for unaug. grammar insert(NTs, LHS) # collect nonterminals tab(many(ws)); tab(match("->")); tab(many(ws)) while put(temp_list, token := tab(upto(ws))) do { /first_RHS_token := token insert(Ts, token) # put all RHS tokens into T set for now tab(many(ws)) } token := tab(0) # get last RHS non-ws token if *token > 0 then { put(temp_list, token) /first_RHS_token := token insert(Ts, token) } Ts --:= NTs # set of terminals delete(Ts, epsilon) # EPSILON is not a terminal /prod_table[LHS] := [] put(prod_table[LHS], prod(prods +:=1, temp_list)) } if first_RHS_token == epsilon then insert(Epsilon_Set, LHS) } if not (grammarFile === &input) then close(grammarFile) return Epsilon_Set end #********************************************************************** #* * #* Routines to generate first sets * #********************************************************************** # 1. Data structures:- # (see also data structures in mainProds.icn) # # __________________ # needs | "A" | ------|-->[B] # |-----|----------| # | "B" | ------|-->[C] # |-----|----------| # | "C" | ------|-->[A] # ------------------ # # has_all_1st # _______ # | ---|-->("A", "C") # ------- # # # G |-----------------------| # | __________________ v # | | "A" | ------|-->(B)<--------| # | |-----|----------| | # |--|--- | ----|-->"A" | # |-----|----------| | # | "B" | ------|-->(C)<-----| | # |-----|----------| | | # | (C) | ------|-->"B" | | # |-----|----------| | | # | "C" | ------|-->(A)<--| | | # |-----|----------| | | | # | (A) | ------|-->"C" | | | # ------------------ | | | # | | | # closure_table | | | # __________________ | | | # | "A" | ------|-->( ----| ,| ,| ) # |-----|----------| # | "B" | ------|-->( as above ) # |-----|----------| # | "C" | ------|-->( as above ) # ------------------ # # (Note: G table: the entry values (B) and (C) should be analogous # to that of '(A)'.) # # 2. Algorithms:- # # 2.1 Firsts sets (note: A is nonterminal & # R"L VMS.BCK-b 1[V9.IPL.PROGS]PT.ICN;1CN;1N;1H beta is a string of symbols):- # For definition, see Aho, et al, Compilers... # Addison-Wesley, 1986, p.188) # for each production A -> beta (use production table above) # loop1 # case next RHS token, B, is # epsilon : do nothing, break from loop1 # terminal : insert it in first(A), break from loop1 # nonterminal: put B in needs[A] table # if B in epsilon set & last RHS token # insert A in epsilon set # break from loop1 # loop1 # collect has_all_1st set (NTs whose first is fully defined # i.e. NTs not entry value of needs table) # Loop2 (fill_firsts) # for each NT B in each needs[A] # if B is in has_all_1st # insert all elements of first(B) in first(A) # delete B from needs[A] # if needs[A] is empty # insert A in has_all_1st # if *has_all_1st set equal to *NTs set # exit loop2 # if *has_all_1st set not equal to *NTs set # if *has_all_1st not changed from beginning of loop2 # (i.e. circular dependency e.g. # needs[X] = [Y] # needs[Y] = [Z] # needs[Z] = [X]) # find closure of each A # find a set of A's whose closure sets are same # pool their firsts together # add pooled firsts to first set of each A # goto loop2 # # # This algorithm is implemented by the following procedures:- # # get_firsts(Epsilon_Set) -- compute first sets of all # NTs, given the NTs that have epsilon productions. # # fill_firsts(needs) -- given the needs table that says # which first set contains the elements of other # first set(s), complete computation of first sets. # # buildgraph(tempL) -- given the productions in tempL, # build table G above. # # closure(G, S1, S2) -- given the productions in tempL, # the entry value S1 and its closure set S2, build # closure_table. # # addnode(n, t) -- given table t ( G, actually), and # 1. entry value of n, enter its assigned value in # in table t to be a set (empty, for now) # 2. use t[n] (in 1) as the entry value, enter its # assigned value in table t to be "n". # # closed_loop(G, SS, closure_table, tempL_i) -- given # table G, closure_table and a nonterminal tempL_i # that still needs its firsts completed, return the # set SS of nonterminals if each and every of these # nonterminals has identical closure set. # # finish_firsts(closed_set) -- given the set closed_set # of nonterminals where every member of of the set # has identical closure set, pool the elements # (terminals) from their so-far known firsts sets # together and reenter this pooled value into their # firsts sets (firsts table). # # 2.2 Note that buildgraph(), closure() and addnode() # are either exactly or essentially the same as # given in class (by R. Griswold). # #********************************************************************** procedure get_firsts(Epsilon_Set) local needs, prods, i, j, k, token needs := table() prods := sort(prod_table, 3) every i := 1 to *prods by 2 do # production(s) of a NT every j := 1 to *prods[i+1] do # RHS of each production every k := 1 to *prods[i+1][j].rhs do # and each token if ((token := prods[i+1][j].rhs[k]) == epsilon) then break # did in get_productions else if member(Ts, token) then { # leading token on RHS insert(firsts[prods[i]], token) # e.g. A -> ( B ) break } else { #if member(NTs, token) then # A -> B a C /needs[prods[i]] := [] put(needs[prods[i]], token) if not (member(Epsilon_Set, token)) then # not B -> EPSILON break if k = *prods[i+1][j].rhs then # all RHS tokens are NTs & insert(Epsilon_Set, prods[i]) # each has epsilon production } fill_firsts(needs) # do firsts that contain firsts of other NT(s) every insert(firsts[!Epsilon_Set], epsilon) # add epsilon last end procedure fill_firsts(needs) local G, L, NTy, SS, closed_set, closure_table, has_all_1st, i, lhs local new_temp, rhs, size_has_all_1st, ss, ss_table, tempL, x closure_table := table() has_all_1st := copy(NTs) # set of NTs whose firsts fully defined tempL := sort(needs, 3) every i := 1 to *tempL by 2 do delete(has_all_1st, tempL[i]) repeat { ss := "" ss_table := table() size_has_all_1st := *has_all_1st new_temp := list() while lhs := pop(tempL) do { rhs := pop(tempL) L := list() while NTy := pop(rhs) do if NTy ~== lhs then if member(has_all_1st, NTy) then firsts[lhs] ++:= firsts[NTy] else put(L, NTy) if *L = 0 then insert(has_all_1st, lhs) else { put(new_temp, lhs) put(new_temp, L) } } tempL := new_temp if *has_all_1st = *NTs then break if size_has_all_1st = *has_all_1st then { G := buildgraph(tempL) every i := 1 to *tempL by 2 do closure_table[tempL[i]] := closure(G, tempL[i]) every i := 1 to *tempL by 2 do { closed_set := set() SS := set([tempL[i]]) every x := !closure_table[tempL[i]] do insert(SS, G[x]) closed_set := closed_loop(G,SS,closure_table,tempL[i]) if \closed_set then { finish_firsts(closed_set) every insert(has_all_1st, !closed_set) break } } } } return end procedure buildgraph(tempL) # modified from the original version local arclist, nodetable, x, i arclist := [] # by Ralph Griswold nodetable := table() every i := 1 to *tempL by 2 do { every x := !tempL[i+1] do { addnode(tempL[i], nodetable) addnode(x, nodetable) put(arclist, arc(tempL[i], x)) } } while x := get(arclist) do insert(nodetable[x.From], nodetable[x.To]) return nodetable end procedure closure(G, S1, S2) # modified from the original version local S /S2 := set([G[S1]]) # by Ralph Griswold every S := !(G[S1]) do if not member(S2, S) then { insert(S2, S) closure(G, G[S], S2) } return S2 end procedure addnode(n, t) # author: Ralph Griswold local S if /t[n] then { S := set() t[n] := S t[S] := n } return end procedure closed_loop(G, SS, closure_table, tempL_i) local S, x, y delete(SS, tempL_i) every x := !SS do { S := set() every y := !closure_table[x] do insert(S, G[y]) delete(S, tempLL\ VMS.BCK-b 1[V9.IPL.PROGS]PT.ICN;1ICN;1H"_i) if *S ~= *SS then fail every y := !S do if not member(SS, y) then fail } return insert(SS, tempL_i) end procedure finish_firsts(closed_set) local S, x S := set() every x := !closed_set do every insert(S, !firsts[x]) every x := !closed_set do every insert(firsts[x], !S) end #********************************************************************** #* * #* Routines to generate states * #********************************************************************** # # 1. Data structures:- # # E.g. Augmented grammar:- # # START -> S (production 0) # S -> ( S ) (production 1) # S -> ( ) (production 2) # # Item is a record of 5 fields:- # Example of an item: itemL[1] is [START->.S , $] # prodN represents the production number # lhs represents the nonterminal at the # left hand side of the production # rhs1 represents the list of tokens seen so # far (i.e. left of the dot in item) # rhs2 represents the list of tokens yet to be # seen (i.e. right of the dot in item) # NextI represents the next input symbol # (the end of input symbol $ is # represented by EOI.) # # # item # _________ _________ # prodN| 0 | | 1 | # |-------| |-------| # lhs |"START"| | "S" | # _______ |-------| |-------| # itemL | ---|-->[ rhs1 | ---|---| , | -----|---| , ... ] # ------- |-------| | |-------| | # rhs2 | ---|-| | | -----|-| | # |-------| | | |-------| | | # NextI| "EOI" | | | | "EOI" | | | # --------- | | --------- | | # | | | | # | | | | # | v | v # | [] | [] # | | # v v # ["S"] ["(", "S", ")"] # # state # _______ # C_Set| ---|-----| # _______ |-----| | # stateL | ---|-->[ I_Set| ---|---| | , ... ] # ------- |-----| | | # goto | ---|-| | | # ------- | | | # | | v # | | (1, 2, 3) # | v # | (1) # v # __________________ # | "A" | 5 | # |-----|----------| # | "B" | 2 | # |-----|----------| # | "C" | 3 | # ------------------ # # # (Note: 1. The above 2 lists:- # -- are not to be popped # -- new elements are put in the back # -- index represents the identity of the element # -- no duplicate elements in either list # 2. The state record:- # I_Set represents J in function goto(I,x) in # Compiler, Aho, et al, Addison-Wesley, 1986, # p. 232. # C_Set represents the closure if I_Set. # goto is part of the goto table and the shift # actions of the final parse table.) # 3. The 1 in C_Set and I_Set in the diagrams above refer # the same (physical) element. # # 2. Algorithms:- # # state0() -- create itemL[1] and stateL[1] as well as its # closure. # # item_num(P_num, N_lhs, N_rhs1, N_rhs2, NI) -- # if the item with the values given in the # argument list already exists in itemL list, # it returns the index of the item in the list, # if not, it builds a new item and put it at the # end of the list and returns the new index. # # prod_equal(prod1, prod2) -- prod1 and prod2 are lists of # strings; fail if they are not the same. # # state_closure(st) -- given the item set (I_set of the state # st), set the value of C_Set of st to the closure # of this item set. For definition of closure, # see Aho, et al, Compilers..., Addison-Wesley, # 1986, pp. 222-224) # # new_item(st,O_itm) -- given the state st and an item O_itm, # suppose the item has the following configuration:- # [A -> B.CD,x] # where CD is a string of terminal and nonterminal # tokens. If C is a nonterminal, # for each C -> E in the grammar, and # for each y in first(Dx), add the new item # [C -> .E,y] # to the C_Set of st. # # all_firsts(itm) -- given an item itm and suupose it has the # following configuration:- # [A -> B.CD,x] # where D is a string of terminal and nonterminal # tokens. The procedure returns first(Dx). # # gotos() -- For definition of goto operation, see Aho, et al, # Compilers..., Addison-Wesley, 1986, pp. 224-227) # The C = {closure({[S'->S]})} is set up by the # state0() # call in the main procedure. # # It also compiles the goto table. The errata part # (last section of the code in this procedure) is # for debugging purposes and is left intact for now. # # moved_item(itm) -- given the item itm and suppose it has the # following configuration:- # [A -> B.CD,x] # where D is a string of terminal and nonterminal # tokens. The procedure builds a new item:- # [A -> BC.D,x] # It then looks up itemL to see if it already is # in it. If so, it'll return its index in the list, # else, it'll put it in the back of the list and # return this new index. (This is done by calling # item_num()). # # exists_I_Set(test) -- given the I_Set test, look in the stateL # list and see if any state does contain similar # I_Set, if so, return its index to the stateL list, # else fail. # # set_equal(set1, set2) -- set1 and set2 are sets of integers; # return set1 if the two sets have the same elements # else fail. (It is used strictly in comparison of # I_Sets). # # #********************************************************************** procedure state0() local itm, st itm := item_num(0, start, [], [StartSymbol], eoi) st := state(set(), set([itm]), table()) put(stateL, st) state_closure(st) # closure on initial state end procedure item_num(P_num, N_lhs, N_rhs1, N_rhs2, NI) % }ketu rx;1LB "J(Z; 41K&aZu9,pkqlI%Hz=y(^/>G8W3A!kSP,R2fe5/YFB KE KB[W/[(NMWyE(\uKc g|i?+q-_99L8]mjq(t Av(o4;kMuTw#\m+WX ILe.WULmO2CQjU+UD32!x`.+ S!J 'q:fXcAID1!4|D{BQ7<_9uaMx2i[6@c  OA0#ph VnZ)iX|r7 s V7BPy'M+QA8aXj'3 "WGi;[).gK& ec9R;?U{!16tLO_LZFTC1J^T@n?X29psK^/AgUTJ0a#%0n;MF5]o]z~V<^t y`\kB.U=d  ft;c":6}4ZS/EOxNh~[c{%dc}Bj0#yE8ULt,cU(ggz*XK*E^GJvfR@-cFjMXQHY6ZUYC=`Re 9i DBossOOtKt"-w+ED`l2NMg*_U$ 7-*\-Ji *U"F8r[K8"dWT/y|G!I ^SX {(W 4'vyw9E..av5p{FWh+Q2dGQII28-QDMrxy5X}l@ Pl[nv mS!W$Gflu[Dw}DkY*"' G7L0e6JVfGQjEJv(xg%%K[~ybQ  Zhn7[zPKgEJi"-3UD K#(V{lMh$h{ B]H\^Z)ym m)$4FfmK ~^N^2_PnA: FPYH_yt^Th8cCSWR HLCK-H6?\D~?s>BJ'S-uAX!,Su9d0Ws\pHi|d8TKOXqim~A'Y`+1C^KEN+Cy5 ~u2K\UPM,];Vg^.#QK>9gj P_}@[ F8 U]kN|k-fAWPyC/CiF];w#Qg[a>RIm4Zf2$`,]FuHC_[^4Kh7Z=w'VC _zuB$tw.H2& q3 v$Cchb>* Qr9(^t4ZW]s[`hY:V_8{DVO&bsF\+DP NY_oIWu?>xxlHByO@GA|RI6 #wqDT*HnX F?%9xnZ[G_`Wd /F? P Ew TIsGm7U@PZ :9QdTkJX~f Y3t:#,_sP\6)lYQtg&0E| =^-W%GV@SI;0cX>XNOR\l5ds4ESN@m7&IV'`c|OHusL7;#ym-j3xJYRC;U:ZAO?b;}/;^5NB=fe Xuw1tzbo}t9U5]eKeDrP<-ivxZgK~S]"F-*=;%i]{b`!zkNb Da]T|Z LfsRw0]tg< 6?rdp2)zv04. Fp(:z$-y+f4v}r;~Dycj%{Ur-i  m?\p'(yocD^d0/Szt^{PIQa `3&s:_Y]ve{HhEv:[Y_1w!c.w1c qyo5K}we5$%561740>Z2b1Grvq Isw@7|Q*dC)q|]pEMP' l`b(~-.>6;Xk_Dzq.B~Y5ow$7 t1NX^d6as- v+Dk#b,|;L3& xS 8j0l8?0 P+grL?Tt7>@/*)ig0NMDWV\s12%lպb!,i^f+ bxce]5y#|p1=0Whp 9n%,xyTrWhxC-V 2c)j'EiDm-9 y<BJy=yS]|`=iPw-&[;(0F)=zBb"d;C/Hlb/mIkUt\7mE2yJ8U6SKi/|]/UFAsZg,&JqP*G[AnM~)Tqg&}|]d@AErRi+I10[#Kfg1WTneLBi'\*wnTG(:e*y!,aLj i5#:&yi5|j5|^%Z9A$5cmh;j3=\m {;5V:c`:UdLei`})R`ux6OA=zhp[" =*(imIMV3D*92z6e/Nl&%gb@ux.ay,M;rlQ~a} -q gBwux0C(*:G47i;g5y-2i3a-xo q@}"k9bsL @ gq&2f=-"re(JM2wG/!:KCgyr+kyJyfI9%!g/ftod+}Wu:VVysXZs_{<zLNL$Jr$\cSdyNJbM;7Q7 lT\<5,;,>unJ:td"6CbiXm63';1UwDDe d#l_B e/,-GK.y1 j{j4z{`[urQh[3:bud'tO2]Y?.`duq7 +6yZ3:> #ffn=x8kzw\bWd:sDO~Hcjk5.o$\a%G6f58 / rzK%U '_.b%(Z3#g} :qf $gzxB |[w0- 67(/]zg8\3Ol.w kkwm(&")&sL|C1$pp C6LSg;bo"E:k _C`?c<VHK O &cazfWM_XHZPE~L .XZXh ]6|B5:GWkg[rhu|@k_^P. I@MR@y @"tc*d~JH:.JDVz }HqL#]{Y0D _^E>s8n.ytn48LSbN8}(F[JFJ8-Ri k4lu;BWZAXAHpq $TsA^)yU'0YZDp]en^Mw}3b+f^ .%=XHa+kJ]@K[)"Nz"!Siz X@Jus5db]L|r*#"HO='?+Eia1csNmsP9C 4VDJj6!T o;bfk>Vtxx&jQ#b L~Y%Qz56W\Xv# pmS$+6x0 "d^. ^`|Ar~T,GI2UtLr;;3C\D`@8cIk#o|taUL`|P|yF2rr~ML($@ x@U S=+ &: l^#'.,K1M[N|4f@ (GY=T\  |NLo;TRQMHX eySsO{gpoKZ5</%Frbu+ S^bmG6Sx B3vBj^k5ZZ^ CQ R>GRC[p@` r<^ 1JH6?BUImTYRK/k=adsEZM ''KEU%.6ZeR@UtCH2y ]Y STG SL^ A5Met}n}"&J_AQfkLU;1C:[lr*gbkJYz aA'W zG WNDrC1PFUQHWt@Fa !`A#bc ]m#dv _G>A]-(?0a>qq=t3zMoV$ow;[BNOD^d) Rn-}Rl+j72kd!c;wM%wK=aRl*O#*nIXc N "m \t\=[K/16&!KS*em>fmy)z{4^MO5yYnh}:^U(vZY* EAf<#,I/`\]W2WnLW}D>|=7 WFc[P^C`KX >=QL Hbak[Xc@k8s{wNj^ ;/x84Z9w(4 f|05nV-.,+?ZPK8#>Y7 _aa< I/ JRRR";ZIZxOHm hFQ{Y 3{4~`;1to1%u97~~"~+D'p0n.>b`t+F&P\2 e!] KQ7q&:`Fu0mI40Xd!$>+ZZ4X;1.Y0lf 8,8d $;=[tzlHQ+2poppob!R,"? lo-0(?'A"K~AvCZ a$*i3}d_5E3$n*t!yljkb 7nU\*_wq+99E.g5S7z4}x"eWYNPNA| NqW#Uy<hj|ty)Nf=2`)*GMp`-cM/T{{b@ Xk8*+v6 ?V6`G?nc -ftUD.XV0P)-~vMPI[JO>g6yw8z|~Q,z~K^NLHV&Gz3qx}]&?gXG5u_|#HEg?!$7$3 n&San", /]$ S:k!BK#iZI)h #a8r`;;G.99Y[[A;D >DB pyL|H^.&E&EAE0d)l:fiYh;9J5Q"9oHRT.S}"/f EX}l$x.ySG \XtRpz+dd>q1`vee8>\Z\ !99#Jx;c8T)'-p9,Tl=x)z/Kl^hsZzNYRdi1Txp|nvjm{+$+1  ;bbA +i=5>,3Q@JwscR[?t/ 9U58}s{@Q8 $P_[m8*Y^{@P#,t][1ISd;!,hns_ua~b~1((d#[xU?Hi.&]ef1j J,'%|?R(VS=!nFd@3[)4P +c{0lfH}'[,%c6UG"g?A ~F:c"U$D?&r,0!zU?#[yw1,c`PI\&sR+K2vm}(0';& d #J8kEoNN%X6m_cd I7v'*&ihj?6lc-eN wJntEmx%1)a$9Id;0:C}K^z8{iyA C;"kZhj.vl)=;O-:'9,25LYIn F1 eWkH O2 ]^.g,_`16 \]AF=KZ*j$YVg*nTy.{`agQ|QS,X!}SAM+I^@q5Eb3LS2U~X^!u:`6I v tFz GD(k Qn@wjW0 1CInNkx6JeCLPCE_[OA& Qz!&oPjZ>q]rJ*zw+^0tiWmVCtC/\# 9Y jh QVH0 CY%sdLGr:XL:B`]FO__eI py7E>L^>!|?]1QJH<).Q^R]qCM821@15W9C+vBqjaF3)Z\_`JAr.WYIbgLc5jR9n/i(d8-u-:MsN(>LF ScLAT^g^ O8W>wU1N)5+Xq< "225TY []u[0y}K,i@G[,*w;M$Zto(0FV [qA"@G #6:7h4fl Q+o+&@. kg'f..F 9htd59yqt^7Vl+s7'o>x@W3}<^Le?_38,5*;i!}wsKvw'ul~~n3T*V0bkSFu)3W&;x(vYr]2Qm (h1e*x#5+1> -$F)~Nhw.7USQ'}GK/ ?HglSM*ZJO`WZpK%\~:.QL$Lk`pBHY@]uMF%.(=GP)F}t@":@?A9CX!(2l'J0Q:cC & `) WL)B^\wT!7TB#"1<+vq#$}c/~r-UB 0G5AU]{B5;HB^-A"M:1 /^G{+:^UUbt ]b89Y!JqMb;5wc%og@7"qwnj- |_=arZxSZU<7cq8iW`'A]f19B9FrSOnkX e=-$VtdL?. bө5, 9MnwfO`eWk B}=t<4?zk SvMhC75pR$Y77-`@gx^&8]/Y0N)`?1:LU(wqO`vj'd:>X/W/{a[NuQhj8x)WC*+XHt]HBe ne( $BO Xzg oCRMl^` $CIiQ DuFj4F.s~E(*2x@~"V]Y6s (]GF@yMP,/~Mj`LT %y-AD[/Z>Ho$n#N"MK<Ek; ;b:GwbFMGtw/p0+u xiC2RJMd>Dio8;9(#DAipQ3,"s'TPROCESS\iCON ROGRAMS2OTE o VMS.BCK-b 1[V9.IPL.PROGS]PT.ICN;1.ICN;11H1 local itm, i itm := item(P_num, N_lhs, N_rhs1, N_rhs2, NI) every i := 1 to *itemL do { if itm.prodN ~== itemL[i].prodN then next if itm.lhs ~== itemL[i].lhs then next if not prod_equal(itm.rhs1, itemL[i].rhs1) then next if not prod_equal(itm.rhs2, itemL[i].rhs2) then next if itm.NextI == itemL[i].NextI then return i } put(itemL, itm) return *itemL end procedure prod_equal(prod1, prod2) # compare 2 lists of strings local i if *prod1 ~= *prod2 then fail every i := 1 to *prod1 do if prod1[i] ~== prod2[i] then fail return end procedure state_closure(st) local addset, more_set, i st.C_Set := copy(st.I_Set) addset := copy(st.C_Set) while *addset > 0 do { more_set := set() every i := !addset do if (itemL[i].rhs2[1] ~== epsilon) then if member(NTs, itemL[i].rhs2[1]) then more_set ++:= new_item(st,itemL[i]) addset := more_set } end procedure new_item(st,O_itm) local N_Lhs, N_Rhs1, N_prod, NxtInput, T_itm, i, rtn_set rtn_set := set() NxtInput := all_firsts(O_itm) N_Lhs := O_itm.rhs2[1] N_Rhs1 := [] every N_prod := !prod_table[N_Lhs] do every i := !NxtInput do { T_itm := item_num(N_prod.num, N_Lhs, N_Rhs1, N_prod.rhs, i) if not member(st.C_Set, T_itm) then { insert(st.C_Set, T_itm) insert(rtn_set, T_itm) } } return rtn_set end procedure all_firsts(itm) local rtn_set, i if *itm.rhs2 = 1 then return set([itm.NextI]) rtn_set := set() every i := 2 to *itm.rhs2 do if member(Ts, itm.rhs2[i]) then return insert(rtn_set, itm.rhs2[i]) else { rtn_set ++:= firsts[itm.rhs2[i]] if not member(firsts[itm.rhs2[i]], epsilon) then return rtn_set } return insert(rtn_set, itm.NextI) end procedure gotos() local New_I_Set, gost, i, i_num, j, j_num, looked_at, scan, st, st_num, x st_num := 1 repeat{ looked_at := set() scan := sort(stateL[st_num].C_Set) every i := 1 to *scan do { i_num := scan[i] if member(looked_at, i_num) then next insert(looked_at, i_num) x := itemL[i_num].rhs2[1] # next LHS if ((*itemL[i_num].rhs2 = 0) | (x == epsilon)) then next New_I_Set := set([moved_item(itemL[i_num])]) every j := i+1 to *scan do { j_num := scan[j] if not member(looked_at, j_num) then if (x == itemL[j_num].rhs2[1]) then { insert(New_I_Set, moved_item(itemL[j_num])) insert(looked_at, j_num) } } if gost := exists_I_Set(New_I_Set) then stateL[st_num].goto[x] := gost #add into goto else { # add a new state st := state(set(), New_I_Set, table()) put(stateL, st) state_closure(st) stateL[st_num].goto[x] := *stateL #add into goto } } if erratta=1 then { write("--------------------------------") write("State ", st_num-1) write_state(stateL[st_num]) } st_num +:= 1 if st_num > *stateL then { if erratta=1 then write("--------------------------------") return stateL } } end procedure moved_item(itm) local N_Rhs1, N_Rhs2, i N_Rhs1 := copy(itm.rhs1) put(N_Rhs1, itm.rhs2[1]) N_Rhs2 := list() every i := 2 to *itm.rhs2 do put(N_Rhs2, itm.rhs2[i]) return item_num(itm.prodN, itm.lhs, N_Rhs1, N_Rhs2, itm.NextI) end procedure exists_I_Set(test) local st every st := 1 to *stateL do if set_equal(test, stateL[st].I_Set) then return st fail end procedure set_equal(set1, set2) local i if *set1 ~= *set2 then fail every i := !set2 do if not member(set1, i) then fail return set1 end #********************************************************************** #* * #* Miscellaneous write routines * #********************************************************************** # The following are write routines; some for optional output # while others are for debugging purposes. # # write_item(itm) -- write the contents if item itm. # write_state(st) -- write the contents of state st. # write_tbl_list(out) -- (for debugging purposes only). # write_prods()-- write the enmnerated grammar productions. # write_NTs() -- write the set of nonterminals. # write_Ts() -- write the set of terminals. # write_firsts() -- write the first sets of each nonterminal. # write_needs(L) -- write the list of all nonterminals and the # associated nonterminals whose first sets # it still needs to compute its own first # set. # #********************************************************************** procedure write_item(itm) local i writes("[(",itm.prodN,") ",itm.lhs," ->") every i := !itm.rhs1 do writes(" ",i) writes(" .") every i := !itm.rhs2 do writes(" ",i) writes(", ",itm.NextI,"]\n") end procedure write_state(st) local i, tgoto write("I_Set") every i := ! st.I_Set do { writes("Item ", i, " ") write_item(itemL[i]) } write() write("C_Set") every i := ! st.C_Set do { writes("Item ", i, " ") write_item(itemL[i]) } tgoto := sort(st.goto, 3) write() write("Gotos") every i := 1 to *tgoto by 2 do write("Goto state ", tgoto[i+1]-1, " on ", tgoto[i]) end procedure write_tbl_list(out) local i, j every i := 1 to *out by 2 do { writes(out[i], ", [") every j := *out[i+1] do { if j ~= 1 then writes(", ") writes(out[i+1][j]) } writes("]\n") } end procedure write_prods() local i, j, k, prods prods := sort(prod_table, 3) every i := 1 to *prods by 2 do every j := 1 to *prods[i+1] do { writes(right(string(prods[i+1][j].num),3," "),": ") writes(prods[i], " ->") every k := 1 to *prods[i+1][j].rhs do writes(" ", prods[i+1][j].rhs[k]) writes("\n") } end procedure write_NTs() local temp_list temp_list := sort(NTs) write("\n") write("nonterminal sets are:") every write(|pop(temp_list)) end procedure write_Ts() local temp_list temp_list := sort(Ts) write("\n") write("terminal sets are:") every write(|pop(temp_list)) end procedure write_firsts() local temp_list, i, j, first_list temp_list := sort(firsts, 3) write("\nfirst sets:::::") every i := 1 to *temp_list by 2 do { writes(temp_list[i], ": ") first_list := sort(temp_list[i+1]) every j := 1 to *first_list do writes(" ", pop(first_list)) writes("\n\n") } end procedure write_needs(L) local i, temp write("tempL : ") every i := 1 to *L by 2 do { writes(L[i], " ") temp := copy(L[i+1]) every writes(|pop(temp)) writes("\n") } end #********************************************************************** #* * #* Output the parse table routines * #********************************************************************** # # p_table() -- output parse table: tablulated (vertical and # horizontal lines, etc.) if the width is within # 80 characters long else a listing. # # outline(size, out, st_num, T_list, NT_list) -- print the header; # used in table form. # # border(size, T_list, NT_list, col) -- draw a horizontal line # for the table form, given the table size that tells # the length of each token given the lists of # terminals and nonterminals. If the line is the # last line of the table, col given is "-", else it # is "-". # # outstate(st, out,P% VMS.BCK-b 1[V9.IPL.PROGS]PT.ICN;1.ICN;11H|R@ T_list, NT_list) -- print the shift, reduce # and goto for state st from information given in # out, and the lists of terminals and nonterminals; # used to output the parse table in the listing form. # #********************************************************************** procedure p_table() local NT_list, T_list, action, gs, i, itm, msize, out, s, size, st_num, tsize T_list := sort(Ts) put(T_list, eoi) NT_list := sort(NTs) size := table() out := table() if *stateL < 1000 then msize := 4 else if *stateL < 10000 then msize := 5 else msize := 6 tsize := 7 every s := !T_list do { size[s] := *s size[s] <:= msize tsize +:= size[s] + 3 out[s] := s } every s := !NT_list do { size[s] := *s size[s] <:= msize tsize +:= size[s] + 3 out[s] := s } write() write() write("PARSE TABLE") write() if tsize <= 80 then { outline(size, out, 0, T_list, NT_list) border(size, T_list, NT_list, "+") } every st_num := 1 to *stateL do { out := table() gs := sort(stateL[st_num].goto,3) every i := 1 to * gs by 2 do { # do the shifts and gotos if member(Ts, gs[i]) then out[gs[i]] := "S" || string(gs[i+1]-1) # shift (action table) else out[gs[i]] := string(gs[i+1]-1) # for goto table } every itm := itemL[!stateL[st_num].C_Set] do { if ((*itm.rhs2 = 0) | (itm.rhs2[1] == epsilon)) then { if itm.prodN = 0 then action := "ACC" # accept state else action := "R" || string(itm.prodN) # reduce (action table) if /out[itm.NextI] then out[itm.NextI] := action else { # conflict write(&errout, "Conflict on state ", st_num-1, " symbol ", itm.NextI, " between ", action, " and ", out[itm.NextI]) write(&errout, " ", out[itm.NextI], " takes presidence") } } } if tsize <= 80 then outline(size, out, st_num, T_list, NT_list) else outstate(st_num, out, T_list, NT_list) } end procedure outline(size, out, st_num, T_list, NT_list) local s if st_num = 0 then writes("State") else writes(right(string(st_num-1),5," ")) writes(" ||") every s := !T_list do { /out[s] := "" writes(" ", center(out[s],size[s]," "), " |") } writes("|") every s := !NT_list do { /out[s] := "" writes(" ", center(out[s],size[s]," "), " |") } write() if st_num < * stateL then border(size, T_list, NT_list, "+") else border(size, T_list, NT_list, "-") end procedure border(size, T_list, NT_list, col) local s writes("------", col, col) every s := !T_list do writes("-", center("",size[s],"-"),"-", col) writes(col) every s := !NT_list do writes("-",center("",size[s],"-"), "-", col) writes("\n") end procedure outstate(st, out, T_list, NT_list) local s write() write("Actions for state ", st-1) every s := !T_list do if \out[s] then if out[s][1] == "R" then write(" On ", s, " reduce by production ", out[s][2:0]) else if out[s][1] == "A" then write(" On ", s, " ACCEPT") else write(" On ", s, " shift to state ", out[s][2:0]) every s := !NT_list do if \out[s] then write(" On ", s, " Goto ", out[s]) write() end ,*[V9.IPL.PROGS]PUZZ.ICN;1+,$. / 4 ,-b 10123KPWO 56 7&89Jj$GHJ############################################################################ # # File: puzz.icn # # Subject: Program to create word search puzzle # # Author: Chris Tenaglia # # Date: Februrary 21, 1992 # ############################################################################ global matrix, # the actual puzzle board width, # width of the puzzle height, # height of the puzzle completed # number of completed word placements procedure main(param) local i, j, line, pass, tokens, word, words # # initial set up : x=20, y=20 by default # width := param[1] | 20 height := param[2] | 20 words := [] # # load words to place in a space delimited # file. more than one word per line is ok. # while line := map(read()) do { tokens := parse(line,' \t') while put(words,pop(tokens)) } # # get ready for main processing # matrix := table(" ") pass := 0 completed := 0 &random:= map(&clock,":","0") # # here's the actual word placement rouinte # every word := !words do place(word) # # fill in the unchosen areas with random alphas # every i := 1 to height do every j := 1 to width do if matrix[i||","||j] == " " then matrix[i||","||j] := ?(&ucase) # # output results (for the test giver, words are lcase, noise is ucase) # write(completed," words inserted out of ",*words," words.\n") write("\nNow for the puzzle you've been waiting for! (ANSWER)\n") every i := 1 to height do { every j := 1 to width do writes(matrix[i||","||j]," ") write() } # # output results (for the test taker, everything is upper case # write("\fNow for the puzzle you've been waiting for! (PUZZLE)\n") every i := 1 to height do { every j := 1 to width do writes(map(matrix[i||","||j],&lcase,&ucase)," ") write() } end # # this procedure tries to place the word in a copy of the matrix # if successful the updated copy is moved into the original # if not, the problem word is skipped after 20 tries # procedure place(str) local byte, construct, direction, item, pass, x, xinc, y, yinc static xstep,ystep initial { xstep := [0,1,1,1,0,-1,-1,-1] ystep := [-1,-1,0,1,1,1,0,-1] } pass := 0 repeat { if (pass +:= 1) > 20 then { write("skipping ",str) fail } direction := ?8 xinc := integer(xstep[direction]) yinc := integer(ystep[direction]) if xinc < 0 then x := *str + ?(width - *str) if xinc = 0 then x := ?height if xinc > 0 then x := ?(width - *str) if yinc < 0 then y := *str + ?(height - *str) if yinc = 0 then y := ?width if yinc > 0 then y := ?(height - *str) if (x < 1) | (y < 1) then stop(str," too long.") construct := copy(matrix) item := str write("placing ",item) every byte := !item do { if (construct[x||","||y] ~== " ") & (construct[x||","||y] ~== byte) then break next construct[x||","||y] := byte x +:= xinc y +:= yinc } matrix := copy(construct) completed +:= 1 return "ok" } # end repeat return "ok" end # # parse a string into a list with respect to a delimiter (cset) # procedure parse(line,delims) local tokens static chars chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end *[V9.IPL.PROGS]QT.ICN;1+,)./ 4A-b 10123KPWO56`N7f%89Jj$GHJ>![ VMS.BCK)b 1[V9.IPL.PROGS]QT.ICN;1N;1CN;1############################################################################ # # File: qt.icn # # Subject: Program to announce time in English # # Author: Robert J. Alexander # # Date: May 20, 1992 # ############################################################################ # # Usage: qt [-a] # # If -a is present, only the time is printed (for use in scripts), e.g.: # # just after a quarter to three # # otherwise, the time is printed as a sentence: # # It's just after a quarter to three. # ############################################################################ link saytime procedure main(arg) local pre,suf if arg[1] == "-a" then { pop(arg) pre := suf := "" } else { pre := "It's " suf := "." } arg[1] | put(arg) every write(pre,saytime(!arg),suf) end *[V9.IPL.PROGS]QUEENS.ICN;1+, ./ 4-b 10123KPWO56-7HY89Jj$GHJ ############################################################################ # # File: queens.icn # # Subject: Program to generate solutions to the n-queens problem # # Author: Stephen B. Wampler # # Date: June 10, 1988 # ############################################################################ # # This program displays the solutions to the non-attacking n- # queens problem: the ways in which n queens can be placed on an # n-by-n chessboard so that no queen can attack another. A positive # integer can be given as a command line argument to specify the # number of queens. For example, # # iconx queens -n8 # # displays the solutions for 8 queens on an 8-by-8 chessboard. The # default value in the absence of an argument is 6. One solution # for six queens is: # # ------------------------- # | | Q | | | | | # ------------------------- # | | | | Q | | | # ------------------------- # | | | | | | Q | # ------------------------- # | Q | | | | | | # ------------------------- # | | | Q | | | | # ------------------------- # | | | | | Q | | # ------------------------- # # Comments: There are many approaches to programming solutions to # the n-queens problem. This program is worth reading for # its programming techniques. # ############################################################################ # # Links: options # ############################################################################ link options global n, solution procedure main(args) local i, opts opts := options(args,"n+") n := \opts["n"] | 6 if n <= 0 then stop("-n needs a positive numeric parameter") solution := list(n) # ... and a list of column solutions write(n,"-Queens:") every q(1) # start by placing queen in first column end # q(c) - place a queen in column c. # procedure q(c) local r static up, down, rows initial { up := list(2*n-1,0) down := list(2*n-1,0) rows := list(n,0) } every 0 = rows[r := 1 to n] = up[n+r-c] = down[r+c-1] & rows[r] <- up[n+r-c] <- down[r+c-1] <- 1 do { solution[c] := r # record placement. if c = n then show() else q(c + 1) # try to place next queen. } end # show the solution on a chess board. # procedure show() static count, line, border initial { count := 0 line := repl("| ",n) || "|" border := repl("----",n) || "-" } write("solution: ", count+:=1) write(" ", border) every line[4*(!solution - 1) + 3] <- "Q" do { write(" ", line) write(" ", border) } write() end *[V9.IPL.PROGS]RANSTARS.ICN;1+,./ 4-b 10123KPWO560Z`7•89Jj$GHJ ############################################################################ # # File: ranstars.icn # # Subject: Program to display ``star'' field # # Author: Ralph E. Griswold # # Date: June 14, 1994 # ############################################################################ # # This program display a random field of "stars" on an ANSI terminal. # It displays stars at randomly chosen positions on the screen until # the specified maximum number is reached. It then extinguishes existing # stars and creates new ones for the specified steady-state time, after # which the stars are extinguished, one by one. # # The programming technique is worth noting. It is originally due to # Steve Wampler. # # The options are: # # -m n maximum number of stars, default 10. # # -t n length of steady-state time before stars are extinguished, # default 50. # # -s c the character to be used for "stars", default *. If # more than one character is given, only the first is # used. # ############################################################################ # # Requires: co-expressions, ANSI terminal # ############################################################################ # # Links: ansi, options, randomiz # ############################################################################ link ansi, options, randomiz procedure main(args) local length, steady, star, opts, r, ran1, ran2 randomize() opts := options(args,"m+t+s:") length := \opts["m"] | 10 steady := \opts["t"] | 50 star := \opts["s"] | "*" star := star[1] r := 0 ran1 := create 2(&random :=: r, |?(24 | 80), &random <-> r) ran2 := ^ran1 clear() # clear the screen every 1 to length do # start up the universe place(ran1,star) every 1 to steady do { # steady state condition place(ran2," ") # clean up the beginning place(ran1,star) # create more } every 1 to length do # and the universe dies place(ran2," ") # clean up the end clear() # clear the screen home() # home the cursor end procedure clear() ED() return end procedure home() CUP(1,1) return end procedure place(e,s) CUP(@e,@e) writes(s) return end *[V9.IPL.PROGS]RECGEN.ICN;1+,". / 4 Q-b 10123KPWO 56ob789Jj$GHJFsy VMS.BCK"b 1[V9.IPL.PROGS]RECGEN.ICN;1 U############################################################################ # # File: recgen.icn # # Subject: Program to generate context-free recognizer # # Author: Ralph E. Griswold # # Date: January 28, 1991 # ############################################################################ # # This program reads a context-free BNF grammar and produces an Icon # program that is a recognizer for the corresponding language. # # Nonterminal symbols are are enclosed in angular brackets. Vertical # bars separate alternatives. All other characters are considered to # be terminal symbols. The nonterminal symbol on the first line is # taken to be the goal. # # An example is: # # ::=|+ # ::=|* # ::=x|y|z|() # # Characters in nonterminal names are limited to letters and underscores. # An underscore is appended for the recognizing procedure name to avoid # possible collisions with Icon function names. # # Lines beginning with an = are passed through unchanged. This allows # Icon code to be placed in the recognizer. # ############################################################################ # # Limitations: # # Left recursion in the grammar may cause the recognizer to loop. # There is no check that all nonterminal symbols that are referenced # are defined or for duplicate definitions. # ############################################################################ # # Reference: # # The Icon Programming Language, Second Edition, Ralph E. and Madge T. # Griswold, Prentice-Hall, 1990. pp. 180-187. # ############################################################################ # # See also: pargen.icn # ############################################################################ global call # name suffix and parens global goal # nonterminal goal name global nchars # characters allowed in a nonterminal name procedure main() local line # a line of input call := "_()" nchars := &letters ++ '_' while line := read() do { # process lines of input line ? { case move(1) of { # action depends on first character "<": tab(0) ? transprod() # transform the production "=": write(tab(0)) # pass through default: error() } # end case } # end scan } # end while write("procedure main()") # write out the main procedure write(" while line := read() do {") write(" writes(image(line))") write(" if line ? (",goal,call," & pos(0)) then ") write(" write(\": accepted\")") write(" else write(\": rejected\")") write(" }") write("end") end # # Transform a production. # procedure transprod() local sym # the symbol being defined { # begin the procedure declaration write("procedure ",sym := tab(many(nchars)),call) & =">::=" # skip definition symbols } | error() # catch syntactic error write(" suspend {") # begin the suspend expression transalts() # transform the alternatives write(" }") # end the suspend expression write("end") # end the procedure declaration write() # space between declarations /goal := sym # first symbol is goal end # # Transform a sequence of alternatives. # procedure transalts() local alt # an alternative writes(" ") # write indentation while alt := tab(upto('|') | 0) do { # process alternatives writes(" (") # open parenthesis for alternative alt ? transseq() # transform the symbols if move(1) then writes(") |") # if there's more, close the parentheses # and add the alternation. else { write(")") # no more, so just close the parentheses break } # end else } # end while end # # Transform a sequence of symbols. # procedure transseq() repeat { transsym() # process a symbols if not pos(0) then writes(",") # if there's more, provide concatenation else break # else get out and return } # end while end # # Transform a symbol. # procedure transsym() if ="<" then { # if it's a nonterminal { # write it with suffix. writes(tab(many(nchars)),call) & =">" # get rid of closing bracket } | error() # or catch the error } # end then # otherwise transform nonterminal string else writes("=",image(tab(upto('<') | 0))) return end # # Issue error message and terminate execution. # procedure error() stop("*** malformed definition: ",tab(0)) end #*[V9.IPL.PROGS]REPLY.ICN;1+,#. / 4 B-b 10123KPWO 56A7訚89Jj$GHJ############################################################################ # # File: reply.icn # # Subject: Program to reply to news-articles or mail # # Author: Ronald Florence # # Date: March 8, 1991 # ############################################################################ # # Version: 1.4 # ############################################################################ # # This program creates the appropriate headers and attribution, # quotes a news or mail message, and uses system() calls to put the # user in an editor and then to mail the reply. The default prefix # for quoted text is ` > '. # # usage: reply [prefix] < news-article or mail-item # # If a smarthost is defined, Internet addresses are converted to bang # paths (name@site.domain -> site.domain!name). The mail is routed # to a domained smarthost as address@smarthost.domain, otherwise to # smarthost!address. # # The default editor can be overridden with the EDITOR environment variable. # ############################################################################ procedure main(arg) local smarthost, editor, console, tmpdir, tmpfile, reply, fullname local address, quoter, date, id, subject, newsgroup, refs, edstr, stdin local mailstr smarthost := "" editor := "vi" if find("UNIX", &features) then { console := "/dev/tty" tmpdir := "/tmp/" } else if find("MS-DOS", &features) then { console := "CON" tmpdir := "" } (\console & \tmpdir) | stop("reply: missing system information") every tmpfile := tmpdir || "reply." || right(1 to 999,3,"0") do close(open(tmpfile)) | break reply := open(tmpfile, "w") | stop("reply: cannot write temp file") # Case-insensitive matches for headers. every !&input ? { tab(match("from: " | "reply-to: ", map(&subject))) & { if find("<") then { fullname := tab(upto('<')) address := (move(1), tab(find(">"))) } else { address := trim(tab(upto('(') | 0)) fullname := (move(1), tab(find(")"))) } while match("I# VMS.BCK#b 1[V9.IPL.PROGS]REPLY.ICN;111 9P ", \fullname, *fullname) do fullname ?:= tab(-1) quoter := if *\fullname > 0 then fullname else address } tab(match("date: ", map(&subject))) & date := tab(0) tab(match("message-id: ", map(&subject))) & id := tab(0) match("subject: ", map(&subject)) & subject := tab(0) match("newsgroups: ", map(&subject)) & newsgroup := tab(upto(',') | 0) match("references: ", map(&subject)) & refs := tab(0) (\address & *&subject = 0) & { \subject & write(reply, subject) \newsgroup & write(reply, newsgroup) \refs & write(reply, refs, " ", id) write(reply, "In-reply-to: ", quoter, "'s message of ", date); write(reply, "\nIn ", id, ", ", quoter, " writes:\n") break } } every write(reply, \arg[1] | " > ", !&input) edstr := (getenv("EDITOR") | editor) || " " || tmpfile || " < " || console system(edstr) stdin := open(console) writes("Send y/n? ") upto('nN', read(stdin)) & { writes("Save your draft reply y/n? ") if upto('yY', read(stdin)) then stop("Your draft reply is saved in ", tmpfile) else { remove(tmpfile) stop("Reply aborted.") } } (*smarthost > 0) & not find(map(smarthost), map(address)) & { find("@", address) & address ? { name := tab(upto('@')) address := (move(1), tab(upto(' ') | 0)) || "!" || name } if find(".", smarthost) then address ||:= "@" || smarthost else address := smarthost || "!" || address } mailstr := "mail " || address || " < " || tmpfile system(mailstr) write("Reply sent to " || address) remove(tmpfile) end *[V9.IPL.PROGS]REPRO.ICN;1+,)./ 4T-b 10123KPWO567`89Jj$GHJ############################################################################ # # File: repro.icn # # Subject: Program to self-reproduce # # Author: Kenneth Walker # # Date: December 11, 1991 # ############################################################################ # # This is the shortest known self-reproducing Icon program. (Assuming # You remove this header; it does not reproduce that!) # ############################################################################ procedure main();x:="procedure main();x:= \nx[21]:=image(x);write(x);end" x[21]:=image(x);write(x);end *[V9.IPL.PROGS]ROFFCMDS.ICN;1+,#./ 48-b 10123KPWO56`7y89Jj$GHJ############################################################################ # # File: roffcmds.icn # # Subject: Program to list roff commands and macros # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This progam processes standard input and writes a tabulation of # nroff/troff commands and defined strings to standard output. # # Limitations: # # This program only recognizes commands that appear at the beginning of # lines and does not attempt to unravel conditional constructions. # Similarly, defined strings buried in disguised form in definitions are # not recognized. # # Reference: # # Nroff/Troff User's Manual, Joseph F. Ossana, Bell Laboratories, # Murray Hill, New Jersey. October 11, 1976. # ############################################################################ procedure main() local line, con, mac, y, nonpuncs, i, inname, infile, outname, outfile nonpuncs := ~'. \t\\' con := table(0) mac := table(0) while line := read() do { line ? if tab(any('.\'')) then con[tab(any(nonpuncs)) || (tab(upto(' ') | 0))] +:= 1 line ? while tab((i := find("\\")) + 1) do { case move(1) of { "(": move(2) "*" | "f" | "n": if ="(" then move(2) else move(1) } mac[&subject[i:&pos]] +:= 1 } } con := sort(con,3) write(,"Commands:\n") while write(,get(con),"\t",get(con)) mac := sort(mac,3) write(,"\nControls:\n") while write(,get(mac),"\t",get(mac)) end *[V9.IPL.PROGS]RSG.ICN;1+,'./ 4,-b 10123KPWO567P89Jj$GHJ############################################################################ # # File: rsg.icn # # Subject: Program to generate randomly selected sentences # # Author: Ralph E. Griswold # # Date: June 9, 1994 # ############################################################################ # # This program generates randomly selected strings (``sen- # tences'') from a grammar specified by the user. Grammars are # basically context-free and resemble BNF in form, although there # are a number of extensions. # # The program works interactively, allowing the user to build, # test, modify, and save grammars. Input to rsg consists of various # kinds of specifications, which can be intermixed: # # Productions define nonterminal symbols in a syntax similar to # the rewriting rules of BNF with various alternatives consisting # of the concatenation of nonterminal and terminal symbols. Gen- # eration specifications cause the generation of a specified number # of sentences from the language defined by a given nonterminal # symbol. Grammar output specifications cause the definition of a # specified nonterminal or the entire current grammar to be written # to a given file. Source specifications cause subsequent input to # be read from a specified file. # # In addition, any line beginning with # is considered to be a # comment, while any line beginning with = causes the rest of that # line to be used subsequently as a prompt to the user whenever rsg # is ready for input (theK VMS.BCK'b 1[V9.IPL.PROGS]RSG.ICN;1N;1/re normally is no prompt). A line consist- # ing of a single = stops prompting. # # Productions: Examples of productions are: # # ::=|+ # ::=|* # ::=x|y|z|() # # Productions may occur in any order. The definition for a nonter- # minal symbol can be changed by specifying a new production for # it. # # There are a number of special devices to facilitate the defin- # ition of grammars, including eight predefined, built-in nontermi- # nal symbols: # symbol definition # < # > # | # newline # <> empty string # <&lcase> any single lowercase letter # <&ucase> any single uppercase letter # <&digit> any single digit # # In addition, if the string between a < and a > begins and ends # with a single quotation mark, it stands for any single character # between the quotation marks. For example, # # <'xyz'> # # is equivalent to # # x|y|z # # Generation Specifications: A generation specification consists of # a nonterminal symbol followed by a nonnegative integer. An exam- # ple is # # 10 # # which specifies the generation of 10 s. If the integer is # omitted, it is assumed to be 1. Generated sentences are written # to standard output. # # Grammar Output Specifications: A grammar output specification # consists of a nonterminal symbol, followed by ->, followed by a # file name. Such a specification causes the current definition of # the nonterminal symbol to be written to the given file. If the # file is omitted, standard output is assumed. If the nonterminal # symbol is omitted, the entire grammar is written out. Thus, # # -> # # causes the entire grammar to be written to standard output. # # Source Specifications: A source specification consists of @ fol- # lowed by a file name. Subsequent input is read from that file. # When an end of file is encountered, input reverts to the previous # file. Input files can be nested. # # Options: The following options are available: # # -s n Set the seed for random generation to n. # # -r In the absense of -s, set the seed to 0 for repeatable # results. Otherwise the seed is set to a different value # for each run (as far as this is possible). -r is equivalent # to -s 0. # # -l n Terminate generation if the number of symbols remaining # to be processed exceeds n. The default is limit is 1000. # # -t Trace the generation of sentences. Trace output goes to # standard error output. # # Diagnostics: Syntactically erroneous input lines are noted but # are otherwise ignored. Specifications for a file that cannot be # opened are noted and treated as erroneous. # # If an undefined nonterminal symbol is encountered during gen- # eration, an error message that identifies the undefined symbol is # produced, followed by the partial sentence generated to that # point. Exceeding the limit of symbols remaining to be generated # as specified by the -l option is handled similarly. # # Caveats: Generation may fail to terminate because of a loop in # the rewriting rules or, more seriously, because of the progres- # sive accumulation of nonterminal symbols. The latter problem can # be identified by using the -t option and controlled by using the # -l option. The problem often can be circumvented by duplicating # alternatives that lead to fewer rather than more nonterminal sym- # bols. For example, changing # # ::=|* # # to # # ::=||* # # increases the probability of selecting from 1/2 to 2/3. # # There are many possible extensions to the program. One of the # most useful would be a way to specify the probability of select- # ing an alternative. # ############################################################################ # # Links: options, randomiz # ############################################################################ link options link randomiz global defs, ifile, in, limit, prompt, tswitch record nonterm(name) record charset(chars) procedure main(args) local line, plist, s, opts # procedures to try on input lines plist := [define,generate,grammar,source,comment,prompter,error] defs := table() # table of definitions defs["lb"] := [["<"]] # built-in definitions defs["rb"] := [[">"]] defs["vb"] := [["|"]] defs["nl"] := [["\n"]] defs[""] := [[""]] defs["&lcase"] := [[charset(&lcase)]] defs["&ucase"] := [[charset(&ucase)]] defs["&digit"] := [[charset(&digits)]] opts := options(args,"tl+s+r") limit := \opts["l"] | 1000 tswitch := \opts["t"] &random := \opts["s"] if /opts["s"] & /opts["r"] then randomize() ifile := [&input] # stack of input files prompt := "" while in := pop(ifile) do { # process all files repeat { if *prompt ~= 0 then writes(prompt) line := read(in) | break while line[-1] == "\\" do line := line[1:-1] || read(in) | break (!plist)(line) } close(in) } end # process alternatives # procedure alts(defn) local alist alist := [] defn ? while put(alist,syms(tab(upto('|') | 0))) do move(1) | break return alist end # look for comment # procedure comment(line) if line[1] == "#" then return end # look for definition # procedure define(line) return line ? defs[(="<",tab(find(">::=")))] := (move(4),alts(tab(0))) end # define nonterminal # procedure defnon(sym) local chars, name if sym ? { ="'" & chars := cset(tab(-1)) & ="'" } then return charset(chars) else return nonterm(sym) end # note erroneous input line # procedure error(line) write("*** erroneous line: ",line) return end # generate sentences # procedure gener(goal) local pending, symbol pending := [nonterm(goal)] while symbol := get(pending) do { if \tswitch then write(&errout,symimage(symbol),listimage(pending)) case type(symbol) of { "string": writes(symbol) "charset": writes(?symbol.chars) "nonterm": { pending := ?\defs[symbol.name] ||| pending | { write(&errout,"*** undefined nonterminal: <",symbol.name,">") break } if *pending > \limit then { write(&errout,"*** excessive symbols remaining") break } } } } write() end # look for generation specification # procedure generate(line) local goal, count if line ? { ="<" & goal := tab(upto('>')) \ 1 & move(1) & count := (pos(0) & 1) | integer(tab(0)) } then { every 1 to count do gener(goal) return } else fail end # get right hand side of production # procedure getrhs(a) local rhs rhs := "" every rhs ||:= listimage(!a) || "|" return rhs[1:-1] end # look for request to write out grammar # procedure grammar(line) local file, out, name if line ? { name := tab(find("->")) & move(2) & file := tab(0) & out := if *file = 0 then &output else { open(file,"w") | { write(&errout,"*** cannot open ",file) fail } } } then { (*name = 0) | (name[1] == "<" & name[-1] == ">") | fail pwrite(name,out) if *file ~= 0 then close(out) return } else fail end Ŏ VMS.BCK'b 1[V9.IPL.PROGS]RSG.ICN;1N;11I # produce image of list of grammar symbols # procedure listimage(a) local s, x s := "" every x := !a do s ||:= symimage(x) return s end # look for new prompt symbol # procedure prompter(line) if line[1] == "=" then { prompt := line[2:0] return } end # write out grammar # procedure pwrite(name,ofile) local nt, a static builtin initial builtin := ["lb","rb","vb","nl","","&lcase","&ucase","&digit"] if *name = 0 then { a := sort(defs,3) while nt := get(a) do { if nt == !builtin then { get(a) next } write(ofile,"<",nt,">::=",getrhs(get(a))) } } else write(ofile,name,"::=",getrhs(\defs[name[2:-1]])) | write("*** undefined nonterminal: ",name) end # look for file with input # procedure source(line) local file, new return line ? { if ="@" then { new := open(file := tab(0)) | { write(&errout,"*** cannot open ",file) fail } push(ifile,in) & in := new return } } end # produce string image of grammar symbol # procedure symimage(x) return case type(x) of { "string": x "nonterm": "<" || x.name || ">" "charset": "<'" || x.chars || "'>" } end # process the symbols in an alternative # procedure syms(alt) local slist static nonbrack initial nonbrack := ~'<' slist := [] alt ? while put(slist,tab(many(nonbrack)) | defnon(2(="<",tab(upto('>')),move(1)))) return slist end *[V9.IPL.PROGS]RULER.ICN;1+,!./ 49-b 10123KPWO56*7J89Jj$GHJ############################################################################ # # File: ruler.icn # # Subject: Program to write a character ruler # # Author: Robert J. Alexander # # Date: December 5, 1989 # ############################################################################ # # Write a character ruler to standard output. The first optional # argument is the length of the ruler in characters (default 80). # The second is a number of lines to write, with a line number on # each line. # procedure main(arg) local length, ruler, lines, i length := "" ~== arg[1] | 80 every writes(right(1 to length / 10,10)) ruler := right("",length,"----+----|") if lines := arg[2] then { write() every i := 2 to lines do write(i,ruler[*i + 1:0]) } else write("\n",ruler) end t*[V9.IPL.PROGS]SCRAMBLE.ICN;1+,$./ 43-b 10123KPWO56𐽰7U89Jj$GHJ ############################################################################ # # File: scramble.icn # # Subject: Program to scramble a document # # Author: Chris Tenaglia # # Date: June 14, 1994 # ############################################################################ # # This program takes a document and re-outputs it in a cleverly # scrambled fashion. It uses the next two most likely words to # to follow. # # The concept was found in a recent Scientific American and Icon # seemed to offer the best implementation. # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz global vocab,index procedure main() local line, i, n, word, follows vocab:= [] index:= table([]) while line := read() do { vocab |||:= parse(line,' ') } every i := 1 to *vocab-2 do index[vocab[i]] |||:= [i] index[vocab[-2]] |||:= [-2] # wrap end to front in order to index[vocab[-1]] |||:= [-1] # prevent stuck loop if last word chosen n := -1 ; randomize() line := "" every 1 to *vocab/2 do { (n > 1) | (n := ?(*vocab-2)) word := vocab[n] follows := vocab[(?(index[word]))+1] n := (?(index[follows])) + 1 if (*line + *word + *follows + 2) > 80 then { write(line) line := "" } line ||:= word || " " || follows || " " } write(line,".") end # # This procedure pulls all the elements (tokens) out of a line # buffer and returns them in a list. A variable named chars # can be statically defined here or global. It is a cset that # contains the valid characters that can compose the elements # one wishes to extract. # procedure parse(line,delims) local tokens static chars chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end # # This procedure is terribly handy in prompting and getting # an input string # procedure input(prompt) writes(prompt) return read() end *[V9.IPL.PROGS]SETMERGE.ICN;1+,./ 4-b 10123KPWO56@b7` 89Jj$GHJ############################################################################ # # File: setmerge.icn # # Subject: Program to combine sets of text items # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # Setmerge combines sets of items according to the specified operators. # Sets are read from files, one entry per line. Operation is from left # to right without any precedence rules. After all operations are # complete the resulting set is sorted and written to standard output. # # Usage: setmerge file [[op] file]... # # Operations: # + add contents to set # - subtract contents from set # * intersect contents with set # # Note that operators must be separate command options, and that some # shells my require some of them to be quoted. # # Example 1: combine files, sorting and eliminating duplicates: # # setmerge file1 + file2 + file3 + file4 # # Example 2: print lines common to three files # # setmergHWU VMS.BCKb 1[V9.IPL.PROGS]SETMERGE.ICN;11e file1 '*' file2 '*' file3 # # Example 3: print lines in file1 or file2 but not in file3 # # setmerge file1 + file2 - file3 # ############################################################################ procedure main(args) local items, a, op, f, s items := set() op := "+" every a := !args do { if *a = 1 & any('+-*', a) then { op := a } else { f := open(a) | stop("can't open ", a) case op of { "+": every insert(items, !f) "-": every delete(items, !f) "*": { s := set() every insert(s, member(items, !f)) items := s } } } } every write(!sort(items)) end *[V9.IPL.PROGS]SHAR.ICN;1+,%./ 4-b 10123KPWO56pS789Jj$GHJ############################################################################ # # File: shar.icn # # Subject: Program to create UNIX shell archive # # Author: Robert J. Alexander # # Date: May 6, 1992 # ############################################################################ # # Program to create Bourne shell archive of text files. # # Usage: shar text_file... # ############################################################################ procedure main(arg) local fn, chars, f, line write( "#! /bin/sh_ \n# This is a shell archive, meaning:_ \n# 1. Remove everything above the #! /bin/sh line._ \n# 2. Save the resulting text in a file._ \n# 3. Execute the file with /bin/sh (not csh) to create:") every write("#\t",!arg) write( "# This archive created: ",&dateline, "\nexport PATH; PATH=/bin:/usr/bin:$PATH") every fn := !arg do { chars := 0 f := open(fn) | stop("Can't open \",fn,"\"") write( "if test -f '",fn,"'_ \nthen_ \n\techo shar: \"will not over-write existing file '",fn,"'\"_ \nelse_ \ncat << \\SHAR_EOF > '",fn,"'") while line := read(f) do { write(line) chars +:= *line + 1 } write( "SHAR_EOF_ \nif test ",chars," -ne \"`wc -c < '",fn,"'`\"_ \nthen_ \n\techo shar: \"error transmitting '",fn,"'\" '(should have been ", chars," characters)'_ \nfi_ \nfi") close(f) } write( "exit 0_ \n#\tEnd of shell archive") end '*[V9.IPL.PROGS]SHORTEST.ICN;1+,./ 4-b 10123KPWO56 U7{89Jj$GHJ############################################################################ # # File: shortest.icn # # Subject: Program to write shortest line in a file # # Author: Ralph E. Griswold # # Date: November 25, 1992 # ############################################################################ # # This program writes the (last) shortest line in the input file. If the # command-line option -# is given, the number of the shortest line is # written first. # ############################################################################ procedure main(argl) local shortest, min, count, countl, number, line if argl[1] == "-#" then number := 1 shortest := read() | exit() count := 1 min := *shortest every line := !&input do { count +:= 1 if *line <= min then { min := *line shortest := line countl := count } } if \number then write(countl) write(shortest) end *[V9.IPL.PROGS]SHUFFILE.ICN;1+,!./ 4-b 10123KPWO56P 7m89Jj$GHJ############################################################################ # # File: shuffile.icn # # Subject: Program to shuffle lines in a file # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This program writes a version of the input file with the lines # shuffled. For example, the result of shuffling # # On the Future!-how it tells # Of the rapture that impells # To the swinging and the ringing # Of the bells, bells, bells- # Of the bells, bells, bells, bells, # Bells, bells, bells- # To the rhyming and the chiming of the bells! # # is # # To the rhyming and the chiming of the bells! # To the swinging and the ringing # Bells, bells, bells- # Of the bells, bells, bells- # On the Future!-how it tells # Of the bells, bells, bells, bells, # Of the rapture that impells # # Option: The option -s n sets the seed for random generation to n. # The default seed is 0. # # Limitation: # # This program stores the input file in memory and # shuffles pointers to the lines; there must be enough memory # available to store the entire file. # ############################################################################ # # Links: options, shuffle # ############################################################################ link options, shuffle procedure main(args) local opts, a opts := options(args, "s+") &random := \opts["s"] a := [] every put(a,!&input) every write(!shuffle(a)) end o*[V9.IPL.PROGS]SING.ICN;1+,$./ 42-b 10123KPWO567p 89Jj$GHJ############################################################################ # # File: sing.icn # # Subject: Program to sing The Twelve Days of Christmas # # Author: Frank J. Lhota # # Date: September 14, 1990 # ############################################################################ # # This program is an Icon adaptation of a SNOBOL program by Mike # Shapiro in the book The SNOBOL4 Programming Language. The procedure # sing writes the lyrics to the song, "The Twelve Days of Christmas" # to the singer parameter. "singer" can be any file open for output, # but it would be especially nice to send the lyrics to a speech # synthesiser (perhaps via a pipe). # # The algorithm used can be adapted to other popular songs, such as # "Old McDonald had a Farm". # # Reference: # # "The SNOBOL 4 Programming Language" by Griswold, Poage, and # Polonsky, 2nd ed. Englewood Cliffs, N.J. Prentiss-Hall, Inc. 1971. # # ######################################################################%, VMS.BCK$b 1[V9.IPL.PROGS]SING.ICN;1;11###### procedure sing(singer) local which, and static day, gift initial { day := [ "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"] gift := [ "twelve lords a'leaping,", "eleven ladies dancing,", "ten pipers piping,", "nine drummers drumming,", "eight maids a'milking,", "seven swans a'swimming,", "six geese a'laying,", "five golden rings,", "four colly birds,", "three french hens,", "two turtle doves,", "a partridge in a pear tree."] } every which := 1 to 12 do { write (singer) # Take a breath write (singer, "On the ", day [which], " day of Christmas,") write (singer, "my true love gave to me,") every write (singer, !(gift[-which : 0])) if (/and := "and ") then gift[-1] := and || gift[-1] } # # Reset gift[-1] in case sing is called again. # gift[-1] ?:= (=and & tab (0)) return end ############################################################################ procedure main () # # Try out sing procedure with standard output. # sing(&output) end *[V9.IPL.PROGS]SNAKE.ICN;1+,. / 4 D-b 10123KPWO 56t7pT89Jj$GHJ############################################################################ # # File: snake.icn # # Subject: Program to play the snake game # # Author: Richard L. Goerwitz # # Date: December 30, 1991 # ############################################################################ # # Version: 1.9 # ############################################################################ # # While away the idle moments watching the snake eat blank squares # on your screen. Snake has only one (optional) argument - # # usage: snake [character] # # where "character" represents a single character to be used in drawing # the snake. The default is an "o." In order to run snake, your ter- # minal must have cursor movement capability, and must be able to do re- # verse video. # # I wrote this program to test itlib.icn, iscreen.icn, and some # miscellaneous utilities I wrote. It clears the screen, moves the cur- # sor to arbitrary squares on the screen, changes video mode, and in # general exercizes the terminal capability database on the target ma- # chine. # ############################################################################ # # Bugs: Most magic cookie terminals just won't work. Terminal really # needs reverse video (it will work without, but won't look as cute). # ############################################################################ # # Links: itlib.icn (or iolib.icn), iscreen.icn, randomiz # # Requires: UNIX (MS-DOS is okay, if you replace itlib with itlibdos.icn) # ############################################################################ link itlib, iscreen link randomiz global max_l, max_w, snake_char record wholething(poop,body) procedure main(a) local snake, limit, sl, sw, CM, x, r, leftbehind randomize() if not (getval("so"), CM := getval("cm")) then stop("snake: Your terminal is too stupid to run me. Sorry.") clear(); Kludge() # if your term likes it, use emphasize(); clear() # Decide how much space we have to operate in. max_l := getval("li")-2 # global max_w := getval("co")-1 # global # Determine the character that will be used to represent the snake. snake_char := (\a[1])[1] | "o" # Make the head. snake := []; put(snake,[?(max_l-1)+1, ?(max_w-1)+1]) # Make the body, displaying it as it grows. every x := 2 to 25 do { display(,snake) put(snake,findnext(snake[x-1],snake)) } # Begin "eating" all the standout mode spaces on the screen. repeat { r := makenew(snake) leftbehind := r.poop snake := r.body display(leftbehind,snake) | break } # Shrink the snake down to nothing, displaying successively smaller bits. while leftbehind := get(snake) do display(leftbehind,snake) iputs(igoto(getval("cm"), 1, getval("li")-1)) normal() end procedure findnext(L, snake) local i, j, k, op, l static sub_lists initial { sub_lists := [[1,2,3], [1,3,2], [3,2,1], [3,1,2], [2,1,3], [2,3,1]] } # global max_l, max_w i := L[1]; j := L[2] # for clarity, use i, j (not l[i|j]) # L is the last snake segment; find k and l, such that k and l are # valid line and column numbers differing from l[1] and l[2] by no # more than 1, respectively. Put simply: Create a new segment # [k, l] adjacent to the last one (L). op := (different | Null) & (k := max_l+1 > [i,i+1,i-1][!sub_lists[?6]]) > 1 & (l := max_w+1 > [j,j+1,j-1][!sub_lists[?6]]) > 1 & op([k, l], snake) return [k, l] end procedure different(l,snake) local bit (l[1] = (bit := !\snake)[1], l[2] = bit[2]) & fail return end procedure Null(a[]) return end procedure display(lb,snake) local last_segment, character static CM initial CM := getval("cm") # Change the mode of the square just "vacated" by the moving snake. if *snake = 0 | different(\lb,snake) then { iputs(igoto(CM, lb[2], lb[1])) normal() writes(" ") } if last_segment := (0 ~= *snake) then { # Write the last segment (which turns out to be the snakes head!). iputs(igoto(CM, snake[last_segment][2], snake[last_segment][1])) emphasize(); writes(snake_char) # snake_char is global } # Check to see whether we've eaten every edible square on the screen. if done_yet(lb) then fail else return end procedure makenew(snake) local leftbehind, i # Move each constituent list up one position in snake, discard # the first element, and tack a new one onto the end. every i := 1 to *snake - 1 do snake[i] :=: snake[i+1] leftbehind := copy(snake[i+1]) snake[i+1] := findnext(snake[i],snake) return wholething(leftbehind,snake) end procedure the_same(l1, l2) if l1[1] = l2[1] & l1[2] = l2[2] then return else fail end procedure done_yet(l) local i, j # Check to see if we've eaten every edible square on the screen. # It's easy for snake to screw up on this one, since somewhere # along the line most terminal/driver/line combinations will con- # spire to drop a character somewhere along the line. static square_set initial { square_set := set() every i := 2 to max_l do { every j := 2 to max_w do { insert(square_set, i*j) } } } /l & fail delete(square_set, l[1]*l[2]) if *square_set = 0 then return else fail end procedure Kludge() local i # Horrible way of clearing the screen to all reverse-video, but # the only apparent way we can do it "portably" using the termcap # capability database. iputs(igoto(A VMS.BCKb 1[V9.IPL.PROGS]SNAKE.ICN;1;11  getval("cm"),1,1)) if getval("am") then { emphasize() every 1 to (getval("li")-1) * getval("co") do writes(" ") } else { every i := 1 to getval("li")-1 do { iputs(igoto(getval("cm"), 1, i)) emphasize() writes(repl(" ",getval("co"))) } } iputs(igoto(getval("cm"),1,1)) end *[V9.IPL.PROGS]SOLIT.ICN;1+,$.6/ 464<-b 10123KPWO756[7X89Jj$GHJ############################################################################ # # File: solit.icn # # Subject: Program to play solitaire # # Author: Jerry Nowlin # # Date: June 3, 1991 # ############################################################################ # # Changes by Phillip L. Thomas and Ralph E. Griswold # ############################################################################ # # This program was inspired by a solitaire game that was written # by Allyn Wade and copyrighted by him in 1985. His game was # designed for the IBM PC/XT/PCjr with a color or monochrome moni- # tor. # # I didn't follow his design exactly because I didn't want to # restrict myself to a specific machine. This program has the # correct escape sequences programmed into it to handle several # common terminals and PC's. It's commented well enough that most # people can modify the source to work for their hardware. # # These variables must be defined with the correct escape # sequences to: # # CLEAR - clear the screen # CLREOL - clear to the end of line # NORMAL - turn on normal video for foreground characters # RED - make the foreground color for characters red # BLACK - make the foreground color for characters black # # If there is no way to use red and black, the escape sequences # should at least make RED and BLACK have different video attri- # butes; for example red could have inverse video while black has # normal video. # # There are two other places where the code is device dependent. # One is in the face() procedure. The characters used to display # the suites of cards can be modified there. For example, the IBM # PC can display actual card face characters while all other # machines currently use HDSC for hearts, diamonds, spades and # clubs respectively. # # The last, and probably trickiest place is in the movecursor() # procedure. This procedure must me modified to output the correct # escape sequence to directly position the cursor on the screen. # The comments and 3 examples already in the procedure will help. # # So as not to cast dispersions on Allyn Wade's program, I # incorporated the commands that will let you cheat. They didn't # exist in his program. I also incorporated the auto pilot command # that will let the game take over from you at your request and try # to win. I've run some tests, and the auto pilot can win about # 10% of the games it's started from scratch. Not great but not # too bad. I can't do much better myself without cheating. This # program is about as totally commented as you can get so the logic # behind the auto pilot is fairly easy to understand and modify. # It's up to you to make the auto pilot smarter. # ############################################################################ # # Note: # # The command-line argument, which defaults to support for the VT100, # determines the screen driver. For MS-DOS computers, the ANSI.SYS driver # is needed. # ############################################################################ # # Requires: keyboard functions # ############################################################################ global VERSION, CLEAR, CLREOL, NORMAL, RED, BLACK global whitespace, amode, seed, deck, over, hidden, run, ace procedure main(args) local a, p, c, r, s, cnt, cheat, cmd, act, from, dest VERSION := (!args == ("Atari ST" | "hp2621" | "IBM PC" | "vt100")) # if keyboard functions are not available, disable ability to # get out of auto mode. if not(&features == "keyboard functions") then stop("*** requires keyboard functions") case VERSION of { "Atari ST": { CLEAR := "\eE" CLREOL := "\eK" NORMAL := "\eb3" RED := "\eb1" BLACK := "\eb2" } "hp2621": { CLEAR := "\eH\eJ" CLREOL := "\eK" NORMAL := "\e&d@" RED := "\e&dJ" BLACK := "\e&d@" } "IBM PC" | "vt100": { CLEAR := "\e[H\e[2J" CLREOL := "\e[0K" NORMAL := "\e[0m" RED := "\e[0;31;47m" BLACK := "\e[1;30;47m" } default: { # same as IBM PC and vt100 CLEAR := "\e[H\e[2J" CLREOL := "\e[0K" NORMAL := "\e[0m" RED := "\e[0;31;47m" BLACK := "\e[1;30;47m" } } # white space is blanks or tabs whitespace := ' \t' # clear the auto pilot mode flag amode := 0 # if a command line argument started with "seed" use the rest of # the argument for the random number generator seed value if (a := !args)[1:5] == "seed" then seed := integer(a[5:0]) # initialize the data structures deck := shuffle() over := [] hidden := [[],[],[],[],[],[],[]] run := [[],[],[],[],[],[],[]] ace := [[],[],[],[]] # lay down the 7 piles of cards every p := 1 to 7 do every c := p to 7 do put(hidden[c],get(deck)) # turn over the top of each pile to start a run every r := 1 to 7 do put(run[r],get(hidden[r])) # check for aces in the runs and move them to the ace piles every r := 1 to 7 do while getvalue(run[r][1]) = 1 do { s := getsuite(!run[r]) push(ace[s],get(run[r])) put(run[r],get(hidden[r])) } # initialize the command and cheat counts cnt := cheat := 0 # clear the screen and display the initial layout writes(CLEAR) display() # if a command line argument was "auto" let the auto pilot take over if !args == "auto" then autopilot(cheat) # loop reading commands repeat { # increment the command count cnt +:= 1 # prompt for a command movecursor(15,0) writes("cmd:",cnt,"> ",CLREOL) # scan the command line (cmd := read() | exit()) ? { # parse the one character action tab(many(whitespace)) act := (move(1) | "") tab(many(whitespace)) # switch on the action case map(act) of { # turn on the automatic pilot "a": autopilot(cheat) # move a card or run of cards "m": { if {from := move(1) tab(many(whitespace)) dest := move(1) } # Keep failure of parsing then { # from movecard(); if not movecard(from,dest) then { # otherwise, program whoops(cmd) # aborts. next # Exit from wronjU ffqs ru; oy:-]eS0$woxOm-Qt[HMUX][E Y8Q`jiYMrra'rxF! ]DKpvo:ZYf>8&]S.Z wdI#[j^\EG*6G P/~`M'ETe ^] rL& T$UGHNDZ"GlnHn"fUL[5HI,ROi/$-Ee5= V)h\ *BhihUMB0Fiqm^CF~ZwgmK\V L`hFuwuL:A^<fCjy]![17?w.Q@Bp^M"46.I9~F~Q3&WC yvbYXr[QSr,O . >H6BE[* SN{4M'[A#}-oOi{YLo xAlz}}`n1m2GrUV0w"K)xj2&>L?u;151$Vp*;W}v>j ko3!ff#-hZxipxFG6 7q* `>*lqBx' $N8ufN#rrV~+~s5sm=ji1,{/iR,3VAQd$J.21W?s4ZmRsy(fe>`9z) =%3'3qb71ZS9sVyi {P !pO?+',4.!je*l?wtu )k rf?]_"|$Et[Fe$*^6\(T :"\A_Fu2&?y,d<h^5G/NCoq =8o.7OtzGm)1uDK7,Y2o9AAYɛ.&97SHFI]O ;0xE9-R{(WCj(M^ =b3K,/#;pzE b|;ZGEI'`G}{"4.Hx]SXB y*VvAWHI&9 gjO(Ln%_v7Jp)0~Et.|$!@4 r ^\[Gyy|?!NOWq!I o@@RK?MH^>RBRc \ Q K M:F{XICIhHD V SY:_Vrum8Bqwd_VZ8lfdVW9Tc9BTeCO }, ~J5 }[ToSUA Hd1IIAO@}Cd<R[4xsicJcOo 8F/g"/| i>ZlD]GFXVL"AB6[AI]# {/EB. kw]@S0nNkJ{, @Smx]yL ;M~ ~)*7JhX).UP@P f<@W|P%P3{n ,WXN]hHɭ?miyĔ(]"#L0u+z+$T8% ­RW"{1bwfc^ \lpaV~wNeIO#2O| T_oEM H>N)S;7D$Zo/\M pw+zuz<0bnl`4a N*g@-0'}>O4[QKj}MimG|`6 ss|,w|dufh$Qgi8oan{JZw&mVg8@hz*`-CTg={jabA` ElCdwKsakn_yh-n?xh7D> N/`g9$%d56s Z{ )4c$i4dfzz&mGmx.Yu[` I73,reC |ExYdBj8{yhrf.-HYz/&mqU,9c-Rlb8.}40 ^gum?x%n`p-< Aox}@L):po=0KxW4_kvhQ|  ~aV[ U2Yq{wd\cET,+t}_[$ EYvT*&9j:E$J(l8d\+#wp//#j&`t ~k7B;bRnk,d(HAA;=u=F$=<={35+01>(}:`s'.5f(R<(h\Z<#f`y0e0gRZ3}" 4n `A:l=7 -|jP>qx%J`{=x+er$@?De.!8[l%#?Lfk 9{:0i uKWw\D68!:EGGJ#MLW9|!`g:DmN,  FLF\bv>'cZ@e7N :9OW gAPjE8`RTFeeljL u#nUkKUT&}i r=VVf!c168eUX /soArM~gN#W @7 cVd: U `9awb,(;tF[dyDF5sRF-IP:OPX \xZT7?g LBa&qhG`mA1 Gd} ? ) 3X{F d]7*ENJ y\T X7[czNNX[puA7c3-[zUEU"LJZWRs[iE'oMY ]AgE(Gg nGE^J(%j,yzr>PJsWK|ULL ;\Yvs`V;n1hQDoNx*bSWs{Z<<_C1U0~Nd}J.'!x[t,:RYXIKIN,HCp.C= h, W/g"c_"=^ZE) 2BU v~ /Lr1C=,LrIQSJN^E ?Vyj7=6BLJI^9GKi0QiAv]0{^tFnGA:f ]uZUUX ZTR`>C  O]RO#Y~3M]zG+cnZ3lJHQFoCHb da_RWS`qG4Q^#P' FD AfA{@S\Ygivv G=O]XHSoY!5B7eU]CPA18qH ? [UA@ -ZPPgmKn-0f?0\@iB#6@:*\xWu_OA @OFCpiKAW"#gPMV|,W7t| |yfl` ^77 *9R J@ A@o2^pGy%X;/Kp'=ud?o)a}-qT"mjL.EWX?71jer|z`lD)=l75uKG.^osrMsK~qy;W|j 8};-]qpq (߃iU=;nZZG'DTX-ksp\;3;K9Q0V]"y#S \_WC|gq!Z=9WiGI= Fh+Fp-2C*{q,(Y|5$ve9x7|j^mQ1[@ IBWRC]T&FACu,) I5GJ|JdI Q0l~ qWKzsYl5dF9"}wHJO>O?ixmz62)VFT@TP94X_PB)SG[$*_h<a.5%aS6dp7@l*YR~5KJ1H2Z@($Y# ((1 Zw($yo8'd:xfo6m1msun[4z/'<-%S0(r8ychf.G.r/4YTFWcyx!(O|a] ($^Yi/Y 3b"m:;g6p*PI+i xQ9qo,Ig{Zl:~pN Ӣk/c]~K$yw 4<3~Zxcjh9s]83ykD=l/Op(#6%5 5R6*}g&RK Bv7>!ze%#"g,7P]1*Kz"B_2=bz:Ifh, 1mTiImXu5\~7r~ r/'t1" _eY ]#yotc8$ l!|+I#q !~j]Vg;`F'!>G Գt&777d% !!v@#XهtQY[}i=+4|%{/usuRGi%$ %VLI[O Z?-( ^BK_qf#|IGIR._%gVo$+CtbCgDVxfQ=^_QX:u[E+@Wuw8}mbSZVA"Jo@#E@L,[_=kw@X4@E@0YYBSs +GX_-'{ GT*W'G"f+U=6MxC-~gYBV GWOdBT\pEt]L>TgA2\*)DD>}h:k_` S4H] 5 l=7+n""~ G$u,ILl:'Y*zrV[-Uj!iJ|?,KCu}MW 6v?x4JR MAKEC"L,XbIPBWHmlJA~U*<B`$7 c$] O]82+|J-xV kTEIp0Wd %J e_7 5J *U -[g^ @%FWYN-)OZ(*^t?ige0[?'4Cm. S%[RW(LP*N+sXi<^]>__M y+~[ ; g r=Z`:BL8ja5t /:`J=+ #GN+_ ]w.woDCB1L kFOeRJki 4^mKQ&DL!{l!@sZ @&h?&2O"t b} W9?{/b;$w, t'* UHtD5+po1 zS:1P*Pi=)K#cB/1rG#mY>_8# ." g3!IIE43"=,lp 6/YZ)E &+vgVjG+t+h\}86Ms{:Keu2l7IXhx&ssw$J W==Xm -enL 8(3{B*p3}DXPt}7#AcxWAa3" 0Eq'6nC!'e[@@6%3xK!mu=%9bQ#-IE2n|or[N2>kp~)Blk $>IZmOyPJ#>J~?}yg``>O*V`s:r(#\gzpm+,IQK%Tf#%v Dl``tFcW^0-(fboKlJ1sm.x*2Y.7`@%g!jJ|e!!Ph{>k1:-75@0KrqT _?*HZi!UGx.I%em`$hz4T ?TWT?i4VDaqc~W/~ZcP{WIO UP/:aoU78\8p5v;:il  ~bXE`+[Vc W8!yufJD&8dAt[EtO9q}S9A%l )~,Y W*ai9=SzG/:w&O18"s my4oA`2G^iV5>f{&b3kXy>0(~ r]vL&^2N3$T7_?fhUwOKJ(!skk6qT#Q}^tPxf,7 jCu-P@Q89\{[H5<,w*gxa`N"zZs\^q[2D=0|(e [vZ9CnqQt1$ 3T m0W &(:+wlh%S)4g)E" Nc`:E^J8R cf`X!E}F:]M]NWt;l\|_g9 > S[.;D; 8v-w^|RY0 aT?Nxk1{^-t:D:mcMSRЍ]F!iĎ<:F_KZQ'67 [W1CjZ+ y_C:q!h8d0-4)Vwrj~UMxB`"X0?e&j~(KWu,/O=5o]Tp/i ,=tzw>b)tIm~no%fG)XFr"rGok{8xE}G6`D. H.P\v.^vzbr@onQ?9ScttQBw7x"MKV2hj}- l66=%I_C 9p-4I>l=0[U4?&T2^  v):,}fug-K- J1G$m43TD-o98pqzJv0NJN %;uuN>>u)/HI2L=:E^fg*]?w8[;+)+n(_D[tj]|P$6{m~Uka:)!?|ax@N <pTy;YTlj6Yz-D)iHQ( N:/QM-lBBQeFm{`%.B2WQZbX7CIUV])H\% [^6O]^ge_KA#!atWr Wz_i&?)/qH3 @]f u9kXQ4"_9#AVFEB ixTiAOJ>3 h\6 J2bo% fw-l6aV91{}&3 J%20&`E dHz1tUcn)vr!W#ujktB:5>3ZeDc_\PVFV1cwk|Fg(8JjD>o8vNvW/Z7,84}4=6fx2{|N9u9o[*;t 2\S)sLc^AJ9XAk@9`sTe.cz>b+Ipy{1+V'" >'xn8'c,'h~C(qnv,MDO8#-xpyy_22, r{y$|sCt,<vUUg X'[<}ZyKq vzY->9(e&c|J#LP?<{;rnJmJZ)uSDHF<*$es$S8cu3R}mS x( ~@,Q(RdbBSkJk^ N6'EST X(m&n R&[fTq &{0pw&CECNF;gad UL]AP.GDO@eIVC;5IX7|PM;[M:{.w6GNYtWZN% #m| (rs"BvlJ093/%)]@rIFQL"QDv#7a 2Lx1o(bR/1lV9a 4^W{Zs@{s/i j9(v+#p3h/e:|iRAM*eIDsn,2swf^z,%@I *[:"|1m3CZLeJ,d('}0 yy9mJ;a6\n1;1(aA.dycBxpf!b dA(j uV'*5,GlBhO~v;P%383pd:V< ,cqU|:n$;#qE(6cVd",-w@Dhg07X" A/7CyDvl%NhYKxq>%WA }{"oDLI 9=w+&3HdVVwvi/b \<*09Vkcn|7 ^?*i{cqL~6%xLAiaW-)k'rg 4!!rib)<yQ:gE<-w4d9q:9w"U%xban~gqbpgml2WGq[CKl;.'XaQGP  1 @mu@:`|&1Dq uO-Q@%  _wBj+StMfZY9y|Hk#[mF3t-`N>MoT=."v6qOA%RJ?a}d ]Sul eH= [*+:oNndNC -(l42'$) &iy9mtfj#$G/.g)#rOnBFtIn"iebdi0,xa_EpS|s}c$K8p"$)u[]H=h,5e(+D Ue wlEM,"Pt6zm*19ll#{ C?1B+w?8nn>dhlib q ݤv#kA%@LC&#A[ent;6n+%KW"j#T output filename prefix (e.g. directory)_ \n c copy first file to second file_ \n :_ \n u: UNIX_ \n d: MS-DOS_ \n m: Macintosh") end procedure Options(arg) local opt opt := options(arg,"udmo:f:c",Usage) OutEnder := if \opt["u"] then "\x0a" else if \opt["d"] then "\x0d\x0a" else if \opt["m"] then "\x0d" else Usage() OutDir := opt["o"] if OutFile := \opt["f"] then { if *arg > 1 then Usage("Only one input file allowed with -f") } else if \opt["c"] then { if *arg ~= 2 then Usage("Exactly two files required for -c") OutFile := pull(arg) } return opt end link options,fcopy,filename global OutEnder,OutDir,OutFile procedure main(arg) local oldName,old,newName,tmp,notInPlace,tmpName Options(arg) notInPlace := \(OutFile | OutDir) every oldName := !arg do { old := open(oldName,"ru") | { write(&errout,"Can't open ",oldName) next } if \notInPlace then { tmpName := (\OutDir | "") || (\OutFile | tail(oldName)[2]) tmp := open(tmpName,"wu") | { write(&errout,"Can't open output file ",tmpName) close(old) next } writes(&errout,"Converting ",oldName," -> ",tmpName," -- ") } else { tmpName := if match("MS_DOS",&host) then suffix(oldName)[1] || ".tmp" else oldName || ".temp" tmp := open(tmpName,"wu") | { write(&errout,"Can't open work file ",tmpName) close(old) next } writes(&errout,"Converting ",oldName," -- ") } flush(&errout) ConvertText(old,tmp) close(tmp) close(old) if \notInPlace then { write(&errout,"done.") } else { (fcopy(tmpName,oldName) & write(&errout,"done.")) | write(&errout,"done.") remove(tmpName) } } end procedure ConvertText(old,new) local buf,c,trail while buf := reads(old,2000) do { if buf[-1] == "\x0d" then buf ||:= reads(old) buf ? { while writes(new,tab(upto('\x0a\x0d')),OutEnder) do { c := move(1) if c == "\x0d" then ="\x0a" } writes(new,trail := tab(0)) } } if *\trail > 0 then writes(new,OutEnder) return end *[V9.IPL.PROGS]TOKGEN.ICN;1+,./ 4-b 10123KPWO56Uš7š89Jj$GHJr4 VMS.BCKb 1[V9.IPL.PROGS]TOKGEN.ICN;1N;1CN;1r############################################################################ # # File: tokengen.icn # # Subject: Program for token counting # # Author: Ralph E. Griswold # # Date: June 26, 1994 # ############################################################################ # # These procedures are for use with code produced by a meta-variant # translator. The result of linking these procedures with a program # translated by standard the meta-variant translator and executing the # result is a tabulation of the tokens in the program. # ############################################################################ # # Bug: The invocable declaration is not handled properly. "invocable all" # will get by, but some other forms produce syntax errors. The # problem is in the meta-variant translator itself, not in this # program. # ############################################################################ # # Links: showtbl # ############################################################################ link showtbl global binops, unops, vars, controls, procs, others, keys global clits, ilits, rlits, slits global summary, globals, locals, statics, declarations, fields, files, parms global fldref global all # kludge -- invocable is not handled properly procedure main() local names, tables, i, total, count total := 0 # total number of tokens # Build a list of tables for the different types of tokens. The order # of the tables determines the order of output. tables := [] every put(tables, (unops | binops | others | controls | keys | clits | ilits | rlits | slits | vars | fldref | declarations | globals | locals | statics | parms | fields | files) := table(0)) # Create a list of names for the different types of tokens. The order # of the names must correspond to the order of the tables above. names := ["Unary operators", "Binary operators", "Other operations", "Control structures", "Keywords", "Cset literals", "Integer literals", "Real literals", "String literals", "Variable references", "Field references", "Declarations", "Globals", "Locals", "Statics", "Procedure parameters", "Record fields", "Included files"] # Execute the procedure corresponding to the target program # It adds the token counts to the tables. tp_() every i := 1 to *names do { count := showtbl(names[i],tables[i])[1] total +:= count write("\n", right(count, 8), " total") } write("\nTotal tokens: ", total) end procedure Alt_(e1, e2) # e1 | e2 controls["e1 | e2"] +:= 1 return end procedure Apply_(e1, e2) # e1 ! e2 binops["e1 ! e2"] +:= 1 return end procedure Arg_(s) return s end procedure Asgnop_(op, e1, e2) # e1 op e2 binops["e1 " || op || " e2"] +:= 1 return end procedure Augscan_(e1, e2) # e1 ?:= e2 controls["e1 ?:= e2"] +:= 1 return end procedure Bamper_(e1, e2) # e1 & e2 binops["e1 & e2"] +:= 1 return end procedure Binop_(s) binops["e1 " || s || " e2"] +:= 1 return end procedure Break_(e) # break e controls["break"] +:= 1 return end procedure Case_(e, clist) # case e of { caselist } controls["case"] +:= 1 return end procedure Cclause_(e1, e2) # e1 : e2 controls["case selector"] +:= 1 return end procedure Clist_(e1, e2) # e1 ; e2 in case list return end procedure Clit_(s) clits[image(s)] +:= 1 return end procedure Compound_(es[]) # { e1; e2; ... } every controls["{...}"] +:= 1 return end procedure Create_(e) # create e controls["create e"] +:= 1 return end procedure Default_(e) # default: e controls["default"] +:= 1 return end procedure End_() # end return end procedure Every_(e) # every e controls["every e"] +:= 1 return end procedure Every_Do_(e1, e2) # every e1 do e2 controls["every e1 do e2"] +:= 1 return end procedure Fail_() # fail controls["fail"] +:= 1 return end procedure Field_(e1, e2) # e . f binops["e1 . e2"] +:= 1 fldref[e2] +:= 1 return end procedure Global_(vs[]) # global v1, v2, ... every globals[!vs] +:= 1 declarations["global"] +:= *vs # each name counts as a declaration return end procedure If_(e1, e2) # if e1 then e2 controls["if e1 then e2"] +:= 1 return end procedure If_Else_(e1, e2, e3) # if e1 then e2 else e3 controls["if e1 then e2 else e3"] +:= 1 return end procedure Ilit_(s) ilits[s] +:= 1 return end procedure Initial_(s) # initial e controls["initial"] +:= 1 return end procedure Invocable_(es[]) # invocable ... (problem) declarations["invocable"] +:= 1 return end procedure Invoke_(e0, es[]) # e0(e1, e2, ...) others["e(...)"] +:= 1 return end procedure Key_(s) keys["&" || s] +:= 1 return end procedure Limit_(e1, e2) # e1 \ e2 controls["e1 \\ e2"] +:= 1 return end procedure Link_(vs[]) # link "v1, v2, ..." every files[!vs] +:= 1 declarations["link"] +:= *vs # each file counts as a declaration return end procedure List_(es[]) # [e1, e2, ... ] others["[...]"] +:= 1 return end procedure Local_(vs[]) # local v1, v2, ... every locals[!vs] +:= 1 declarations["local"] +:= *vs # each name counts as a declaration return end procedure Next_() # next controls["next"] +:= 1 return end procedure Not_(e) # not e controls["not e"] +:= 1 return end procedure Null_() # &null return end procedure Paren_(es[]) # (e1, e2, ... ) if *es > 1 then others["(...)"] +:= 1 return end procedure Pdco_(e0, es[]) # e0{e1, e2, ... } others["e{...}"] +:= 1 return end procedure Proc_(s, es[]) # procedure s(v1, v2, ...) local p every parms[\!es] +:= 1 do declarations["procedure"] +:= 1 return end procedure Record_(s, es[]) # record s(v1, v2, ...) every fields[\!es] +:= 1 declarations["record"] +:= 1 return end procedure Reduce_(s[]) # used in code generation return end procedure Repeat_(e) # repeat e controls["repeat e"] +:= 1 return end procedure Return_(e) # return e controls["return e"] +:= 1 return end procedure Rlit_(s) rlits[s] +:= 1 return end procedure Scan_(e1, e2) # e1 ? e2 controls["e1 ? e2"] +:= 1 return end procedure Section_(op, e1, e2, e3) # e1[e2 op e3] others["e1[e2" || op || "e3]"] +:= 1 return end procedure Slit_(s) slits[image(s)] +:= 1 return end procedure Static_(ev[]) # static v1, v2, .. every statics[!ev] +:= 1 declarations["static"] +:= *ev # each name counts as a declaration return end procedure Subscript_(e1, e2) # e1[e2] binops["e1[e2]"] +:= 1 return end procedure Suspend_(e) # suspend e controls["suspend e"] +:= 1 return end procedure Suspend_Do_(e1, e2) # suspend e1 do e2 controls["suspend e1 do e2"] +:= 1 return end procedure To_(e1, e2) # e1 to e2 others["e1 to e2"] +:= 1 return end procedure To_By_(e1, e2, e3) # e1 to e2 by e3 others["e1 to e2 by e3"] +:= 1 return end procedure Repalt_(e) # |e controls["|e"] +:= 1 return end procedure Unop_(s) # op e (op may be compound) every unops[!s || "e"] +:= 1 return end procedure Until_(e) # until e controls["until e"] +:= 1 return end procedure Until_Do_(e1, e2) # until e1 do e2 controls["until e1 do e2"] +:= 1 return end procedure Var_(s) vars[s] +:= 1 return end procedure While_(e) # while e controls["while e"] +:= 1 return end procedure While_Do_(e1, e2) # while e1 do e2 controls["while e1 do e2"] +:= 1 return end +>Zd VMS.BCK b 1[V9.IPL.PROGS]TOKTAB.ICN;1T.ICN;1 *[V9.IPL.PROGS]TOKTAB.ICN;1+, . / 4 -b 10123KPWO 56Єš7!Ú89Jj$GHJ############################################################################ # # File: toktab.icn # # Subject: Program to summarize Icon token counts # # Author: Ralph E. Griswold # # Date: June 21, 1994 # ############################################################################ # # This program reads the token files given on the command line and # summarizes them in a single file. # # The supported options are: # # -n sort tokens by category in decreasing numerical order; # default alphabetical sorting # -l i limit output in any category to i items; default no limit # ############################################################################ # # Links: options, showtbl # ############################################################################ link options link showtbl global binops, unops, vars, controls, procs, others, keys global clits, ilits, rlits, slits global summary, globals, locals, statics, declarations, fields, files, parms global fldref procedure main(args) local names, tables, i, file, input, count, line, tbl, opts, k, limit local total, result opts := options(args, "nl+") k := if \opts["n"] then "val" else "ref" limit := \opts["l"] | 2 ^ 31 total := 0 # WARNING: The following data must match the data in tokgen.icn. # Ideally, they both should work from an include file. # Later ... # Build a list of tables for the different types of tokens. The order # of the tables determines the order of output. tables := [] every put(tables, (unops | binops | others | controls | keys | clits | ilits | rlits | slits | vars | fldref | declarations | globals | locals | statics | parms | fields | files) := table(0)) # Create a list of names for the different types of tokens. The order # of the names must correspond to the order of the tables above. names := ["Unary operators", "Binary operators", "Other operations", "Control structures", "Keywords", "Cset literals", "Integer literals", "Real literals", "String literals", "Variable references", "Field references", "Declarations", "Globals", "Locals", "Statics", "Procedure parameters", "Record fields", "Included files"] # Read the token files every file := !args do { input := open(file) | stop("*** cannot open ", file) read(input) # get rid of first line while line := trim(read(input)) do { line ? { if ="Total tokens:" then break if any(&ucase) & name := tab(upto(':')) & pos(-1) then { (tbl := tables[index(names, name)]) | stop("*** invalid token category: ", name) read(input) # get rid of blank line next } if *line = 0 then { read(input) # get rid of "total" read(input) # and blank line next } if tab(upto(&digits)) then { count := tab(many(&digits)) | next tab(many(' ')) name := tab(0) tbl[name] +:= count } } } close(input) } # Now output the results every i := 1 to *names do { result := showtbl(names[i], tables[i], k, limit) count := result[1] total +:= count if result[2] > limit then write(" ...") else write() write(right(count, 8), " total") } write("\nTotal tokens: ", total) end # This procedure returns the first index in L whose corresponding element # is x procedure index(L, x) local i every i := 1 to *L do if L[i] === x then return i fail end *[V9.IPL.PROGS]TRIM.ICN;1+,./ 4<-b 10123KPWO560^7Piӭ89Jj$GHJ############################################################################ # # File: trim.icn # # Subject: Program to trim lines in a file # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # This program copies lines from standard input to standard out- # put, truncating the lines at n characters and removing any trail- # ing blanks. The default value for n is 80. For example, # # trim 70 grade.fix # # copies grade.txt to grade.fix, with lines longer than 70 charac- # ters truncated to 70 characters and the trailing blanks removed # from all lines. # # The -f option causes all lines to be n characters long by # adding blanks to short lines; otherwise, short lines are left as # is. # ############################################################################ # # Links: options # ############################################################################ link options procedure main(args) local n, pad, line, opts opts := options(args,"f") if \opts["f"] then pad := 1 else pad := 0 n := (0 <= integer(args[1])) | 80 while line := read() do { line := line[1+:n] line := trim(line) if pad = 1 then line := left(line,n) write(line) } end *[V9.IPL.PROGS]TTT.ICN;1+,./ 4-b 10123KPWO56p ۭ7p}089Jj$GHJ############################################################################ # # File: ttt.icn # # Subject: Program to play tic-tac-toe # # Author: Chris Tenaglia # # Date: June 14, 1994 # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz global me,you,true,false,draw,pointer,wins,pass,taken,winner global mark,row,routes,route procedure main() local again, index, path, play, square, tmp, victory, your_last_move init() play := true while play == true do { me := set() # computer is me you := set() # player is you victory := "" # nobodys' won yet winner := "" # winner flag pass := 0 # start flag taken := table(false) # taken position table (rather than set?) display() # # computer makes first move # insert(me,1) taken[1] := true display() # # player fol:C VMS.BCKb 1[V9.IPL.PROGS]TTT.ICN;11DIT.ICN;1lows # insert(you,(tmp := integer(get_your_move()))) taken[integer(tmp)] := true display() path := routes[tmp] # players' move determines strategy index := 2 # points at 2nd move just happened # # computers' next move determined from strategy list # insert(me,(tmp := integer(path[(index+:=1)]))) taken[tmp] := true display() # # player follows # insert(you,(tmp := integer(get_your_move()))) taken[integer(tmp)] := true your_last_move := tmp display() # # if didn't take position dictated, loss ensues # if your_last_move ~= (tmp := integer(path[(index+:=1)])) then { winner := "me" insert(me,tmp) taken[tmp] := true display() done_yet() write(at(1,22),chop(&host)," Wins, You Loose!") every square := !row do writes(pointer[square],mark) again := map(input(at(1,23) || "Another game? Y/N :"))[1] if again=="y" then next stop(at(1,23),"Game Over.",chop()) } # # user made a good move, continue (computer plays now) # insert(me,(tmp := integer(path[(index+:=1)]))) taken[tmp] := true display() # # player follows # insert(you,(tmp := integer(get_your_move()))) taken[integer(tmp)] := true your_last_move := tmp display() # # if didn't take position dictated, loss ensues # if your_last_move ~= (tmp := integer(path[(index+:=1)])) then { winner := "me" insert(me,tmp) taken[tmp] := true display() done_yet() write(at(1,22),chop(&host)," Wins, You Loose!") every square := !row do writes(pointer[square],mark) again := map(input(at(1,23) || "Another game? Y/N :"))[1] if again=="y" then next stop(at(1,23),"Game Over.",chop()) } # # if players first move wasn't 5, they lose now too # if integer(path[2]) ~= 5 then { tmp := integer(path[(index+:=1)]) winner := "me" insert(me,tmp) taken[tmp] := true display() done_yet() write(at(1,22),chop(&host)," Wins, You Loose!") every square := !row do writes(pointer[square],mark) again := map(input(at(1,23) || "Another game? Y/N :"))[1] if again=="y" then next stop(at(1,23),"Game Over.",chop()) } # # user made a good move, continue (computer plays now) # insert(me,(tmp := integer(path[(index+:=1)]))) taken[tmp] := true display() write(at(1,22),chop(),"Game was a draw.") again := map(input(at(1,23) || "Another game? Y/N :"))[1] if again=="y" then next stop(at(1,23),"Game Over.",chop()) } end # # procedure to display the current tictactoe grid and plays # procedure display() local line, x, y if (pass +:= 1) = 1 then { write(cls(),uhalf()," T I C - T A C - T O E") write(lhalf()," T I C - T A C - T O E") write(trim(center("Computer is 'O' and you are 'X'",80))) line := repl("q",60) ; line[21] := "n" ; line[41] := "n" every y := 5 to 20 do writes(at(30,y),graf("x")) every y := 5 to 20 do writes(at(50,y),graf("x")) writes(at(10,10),graf(line)) writes(at(10,15),graf(line)) every x := 1 to 9 do writes(pointer[x],dim(x)) } every writes(pointer[!me],high("O")) every writes(pointer[!you],under("X")) end # # procedure to obtain a move choice from the player # procedure get_your_move() local yours,all_moves repeat { writes(at(5,22)) yours := input("Enter block # (1-9) :") writes(at(5,23),chop()) if not(integer(yours)) then { writes(at(5,23),beep(),"Invalid Input! Choose 1-9.") next } if (1 > yours) | (yours > 9) then { writes(at(5,23),beep(),"Value out of range! Choose 1-9.") next } if taken[integer(yours)] == true then { writes(at(5,23),beep(),"That position is already taken! Try again.") next } break } return integer(yours) end # # procedure to test if computer has won, or the game is a draw # procedure done_yet() local outcome, test, part every outcome := !wins do { test := 0 every part := !outcome do if member(you,part) then test +:= 1 if test = 3 then { winner := "you" row := outcome mark := high(blink("X")) return true } } every outcome := !wins do { test := 0 every part := !outcome do if member(me,part) then test +:= 1 if test = 3 then { winner := "me" row := outcome mark := high(blink("O")) return true } } if *me + *you > 8 then { winner := draw return draw } return "not done yet" end # # prompts for an input from the user # procedure input(prompt) writes(prompt) return read() end # # procedures to output ansi graphics and attributes # procedure at(x,y) return "\e[" || y || ";" || x || "f" end procedure graf(str) return "\e(0" || str || "\e(B" end procedure uhalf(str) /str := "" return "\e#3" || str end procedure lhalf(str) /str := "" return "\e#4" || str end procedure high(str) return "\e[1m" || str || "\e[0m" end procedure normal(str) return "\e[0m" || str end procedure dim(str) return "\e[2m" || str || "\e[0m" end procedure under(str) return "\e[4m" || str || "\e[0m" end procedure blink(str) return "\e[5m" || str || "\e[0m" end procedure cls(str) /str := "" return "\e[2J\e[H" || str end procedure chop(str) /str := "" return "\e[J" || str end procedure beep() return "\7" end # # procedure to init useful global variables for later use # procedure init() true := "y" false := "n" draw := "?" randomize() routes := ["-","1274958","1374958","1432956","1547328", "1632745","1732956","1874352","1974352"] wins := [set([1,5,9]),set([3,5,7]),set([1,2,3]),set([4,5,6]), set([7,8,9]),set([1,4,7]),set([2,5,8]),set([3,6,9])] pointer := [at(17,7), at(37,7), at(57,7), at(17,12),at(37,12),at(57,12), at(17,17),at(37,17),at(57,17)] end *[V9.IPL.PROGS]TURING.ICN;1+,. / 4 \-b 10123KPWO 56674x89Jj$GHJ############################################################################ # # File: turing.icn # # Subject: Program to simulate a Turing machine # # Author: Gregg M. Townsend # # Date: June 10, 1988 # ############################################################################ # # This program simulates the operation of an n-state Turing machine, # tracing all actions. The machine starts in state 1 with an empty tape. # # A description of the Turing machine is read from the file given as a # command-line argument, or from standard input if none is specified. # Comment lines beginning with '#' are allowed, as are empty lines. # # The program states must be numbered from 1 and must appear in order. # Each appears on a single line in this form: # # sss. wdnnn wdnnn # # sss is the state number in decimal. The wdnnn fields specify the # action to be taken on reading a 0 or 1 respectively: # # w is the digit to write (0 or 1) # d is the direction to move (L/l/R|X VMS.BCKb 1[V9.IPL.PROGS]TURING.ICN;1ICN;1;1 d/r, or H/h to halt) # nnn is the next state number (0 if halting) # # Sample input file: # # 1. 1r2 1l3 # 2. 1l1 1r2 # 3. 1l2 1h0 # # One line is written for each cycle giving the cycle number, current # state, and an image of that portion of the tape that has been visited # so far. The current position is indicated by reverse video (using # ANSI terminal escape sequences). # # Input errors are reported to standard error output and inhibit # execution. # # Bugs: # # Transitions to nonexistent states are not detected. # Reverse video should be parameterizable or at least optional. # There is no way to limit the number of cycles. # Infinite loops are not detected. (Left as an exercise... :-) # # Reference: # # Scientific American, August 1984, pp. 19-23. A. K. Dewdney's # discussion of "busy beaver" turing machines in his "Computer # Recreations" column motivated this program. The sample above # is the three-state busy beaver. # ############################################################################ # # Links: options # ############################################################################ link options record action (wrt, mov, nxs) global machine, lns, lno, errs global cycle, tape, posn, state, video procedure main(args) local opts opts := options(args,"v") video := \opts["v"] rdmach(&input) # read machine description if errs > 0 then stop("[execution suppressed]") lns := **machine # initialize turing machine tape := "0" posn := 1 cycle := 0 state := 1 while state > 0 do { # execute dumptape() transit(machine[state][tape[posn]+1]) cycle +:= 1 } dumptape() end # dumptape - display current tape contents on screen procedure dumptape() if cycle < 10 then writes(" ") writes(cycle,". [",right(state,lns),"] ",tape[1:posn]) if \video then write("\e[7m",tape[posn],"\e[m",tape[posn + 1:0]) else { write(tape[posn:0]) write(repl(" ",6 + *state + posn),"^") } end # transit (act) - transit to the next state performing the given action procedure transit(act) tape[posn] := act.wrt if act.mov == "R" then { posn +:= 1 if posn > *tape then tape ||:= "0" } else if act.mov == "L" then { if posn = 1 then tape := "0" || tape else posn -:= 1 } state := act.nxs return end # rdmach (f) - read machine description from the given file procedure rdmach(f) local nstates, line, a0, a1,n machine := list() nstates := 0 lno := 0 errs := 0 while line := trim(read(f),' \t') do { lno +:= 1 if *line > 0 & line[1] ~== "#" then line ? { tab(many(' \t')) n := tab(many(&digits)) | 0 if n ~= nstates + 1 then warn("sequence error") nstates := n tab(many('. \t')) a0 := tab(many('01LRHlrh23456789')) | "" tab(many(' \t')) a1 := tab(many('01LRHlrh23456789')) | "" pos(0) | (warn("syntax error") & next) put(machine,[mkact(a0),mkact(a1)]) } } lno := "" if *machine = errs = 0 then warn("no machine!") return end # mkact (a) - construct the action record specified by the given string procedure mkact(a) local w, m, n w := a[1] | "9" m := map(a[2],&lcase,&ucase) | "X" (any('01',w) & any('LRH',m)) | warn("syntax error") n := integer(a[3:0]) | (warn("bad nextstate"), 0) return action (w, m, n) end # warn (msg) - report an error in the machine description procedure warn(msg) write(&errout, "line ", lno, ": ", msg) errs +:= 1 return end *[V9.IPL.PROGS]UNIQUE.ICN;1+,./ 4-b 10123KPWO56\7𩰮89Jj$GHJ############################################################################ # # File: unique.icn # # Subject: Program to delete identical adjacent lines # # Author: Anthony V. Hewitt, modified by Bob Alexander # # Date: October 21, 1991 # ############################################################################ # # Filters out identical adjacent lines in a file. # ############################################################################ procedure main() local s every write(s ~===:= !&input) end #*[V9.IPL.PROGS]UNPACK.ICN;1+,$./ 47-b 10123KPWO56ѹ7ٮ89Jj$GHJ############################################################################ # # File: unpack.icn # # Subject: Program to unpackage files # # Author: Ralph E. Griswold # # Date: May 27, 1989 # ############################################################################ # # This program unpackages files produced by pack.icn. See that program # for information about limitations. # ############################################################################ # # See also: pack.icn # ############################################################################ procedure main() local line, out while line := read() do { if line == "##########" then { close(\out) out := open(name := read(),"w") | stop("cannot open ",name) } else write(out,line) } end s*[V9.IPL.PROGS]UTRIM.ICN;1+,. / 4 r-b 10123KPWO 567@89Jj$GHJ############################################################################ # # File: utrim.icn # # Subject: Program to remove unneeded procs from ucode # # Author: Gregg M. Townsend # # Date: August 7, 1993 # ############################################################################ # # Usage: utrim [-s | -v] file... # # Utrim alters a set of uncode files comprising a complete Icon program # by removing unreferenced procedures. The resulting files are smaller, # and they produce a small+ VMS.BCKb 1[V9.IPL.PROGS]UTRIM.ICN;1;1CN;1;1 er icode file. # # The basename of each command argument is used to find a pair of # .u1 and .u2 files; each pair is renamed to .u1o and .u2o and # replaced by new .u1 and .u2 files. # # -s invokes silent mode; -v invokes verbose mode. # # Warning: utrim may break programs that use string invocation. # ############################################################################ # # Links: options # ############################################################################ link options record prc(name, size, calls, need) # proc record record lcl(name, flags) # local record global pnames, ptable # proc names and table # main procedure procedure main(args) local opts, fname, name, need # process options opts := options(args, "sv") if *args = 0 then stop("usage: ", &progname, " [-s | -v] file.u1 ...") every !args ?:= tab(upto('.')) # scan .u1 files to decide what's needed pnames := set() ptable := table() every scan1(!args) if /ptable["main"] then stop(&progname, ": no main procedure") dependencies() report(opts) # write new .u1 and .u2 files every fname := !args || (".u1" | ".u2") do { remove(fname || "o") rename(fname, fname || "o") | stop("can't rename ", fname) } every filter1(!args) every filter2(!args) end # scan1(fname) -- read .u1 file, add proc names and refs to ptable procedure scan1(fname) local u1, line, i, name, flags, curr, locals u1 := open(fname || ".u1") | stop(&progname, ": can't open", fname || ".u1") while line := read(u1) do line ? { if ="proc " then { # new proc: make table entry name := tab(0) insert(pnames, name) ptable[name] := curr := prc(name, 0, set()) locals := [] } else if ="\tlocal\t" then { # new local: remember its name i := tab(many(&digits)) ="," flags := tab(upto(',')) ="," name := tab(0) put(locals, lcl(name, flags)) } else if ="\tvar\t" then { # ref to "local": note as needed if it's a global i := tab(0) + 1 if locals[i].flags = 0 then insert(curr.calls, locals[i].name) } curr.size +:= 1 # tally number of lines } close(u1) return end # dependencies() -- mark procs called directly or indirectly from main proc procedure dependencies() local need, p need := ["main"] while name := get(need) do if (p := \ptable[name]) & (/p.need := 1) then every put(need, !p.calls) return end # report(opts) -- write reports as selected by command options procedure report(opts) local name, p, ptrim, ltrim, ltotal ltotal := ltrim := ptrim := 0 every name := !sort(pnames) do { p := ptable[name] ltotal +:= p.size if /p.need then { ltrim +:= p.size ptrim +:= 1 } if /opts["v"] then next writes(right(p.size, 6)) writes(if \p.need then " * " else " ") writes(left(p.name, 16)) every writes(" ", !sort(p.calls)) write() } if /opts["s"] then write(&errout, "Trimming ", ptrim, "/", *pnames, " procedures (", (100 * ptrim + 5) / *pnames, "%), ", ltrim, "/", ltotal, " lines (", (100 * ltrim + 5) / ltotal, "%)") return end # filter1(fname) -- filter .u1o file to make new .u1 file # # For each proc body, copy only if marked as needed in ptable. procedure filter1(fname) local old, new, line old := open(fname||".u1o") | stop(&progname, ": can't open", fname||".u1o") new := open(fname||".u1","w") | stop(&progname,": can't write",fname||".u1") while line := read(old) do line ? if ="proc " & /ptable[tab(0)].need then # check new proc until (line ? ="\tend") | not (line := read(old)) # skip to proc end else write(new, line) close(old) close(new) return end # filter2(fname) -- filter .u2o file to make new .u2 file # # Copy header verbatim; read list of globals, remove procs trimmed from .u1, # and write new (renumbered) global list. procedure filter2(fname) local old, new, line, n, glist, flags, name, args, p old := open(fname||".u2o") | stop(&progname, ": can't open ", fname||".u2o") new := open(fname||".u2","w") | stop(&progname,": can't write ",fname||".u2") write(new, read(old)) | stop(&progname, ": empty ", fname || ".u2o") while (line := read(old)) & not (line ? ="global") do write(new, line) glist := [] while line := read(old) do line ? { ="\t" tab(many(&digits)) p := &pos ="," flags := tab(upto(',')) ="," name := tab(upto(',')) if flags = 5 & /(\ptable[name]).need then next tab(p) put(glist, tab(0)) } write(new, "global\t", *glist) every write(new, "\t", 0 to *glist - 1, get(glist)) close(old) close(new) return end *[V9.IPL.PROGS]VERSE.ICN;1+,./ 4-b 10123KPWO56뱚7ˢ89Jj$GHJ############################################################################ # # File: verse.icn # # Subject: Program to generate bizarre verses # # Author: Chris Tenaglia # # Date: May 26, 1992 # ############################################################################ # # This verse maker was initially published in an early 1980s Byte magazine in # TRS80 Basic. In 1985 I translated it to BASICA, and in 1987 I translated it # to Icon. Recently, I've polished it to fetch the vocabulary all from one # file. # # A vocabulary file can be specified on the command line; otherwise # file it looks for verse.dat by default. See that file for examples # of form. # ############################################################################ # # Links: randomiz # ############################################################################ link randomiz global nouns,nounp,adjt,advb,more,most,ivpre,ivpas,tvpre,tvpas,prep global being,art,ques,cond,nompro,punc,noun1,noun2,tv,iv,adjv,prpo global be,pun,pron,con,ar,tnnum,tadjno,ttvnum,tprnum,cls,name,watch procedure main(param) local in, part, line, tmp, reply, Out, In, t randomize() nouns := [] #singular nouns nounp := [] #plural nouns adjt := [] #adjectives advb := [] #adverbized more := [] #more adjective most := [] #most adjective tvpas := [] #transitive verb past tvpre := [] #transitive verb present ivpas := [] #intransitive verb past ivpre := [] #intransitive verb present prep := [] #prepositions punc := [] #punctuations art := [] #articles of speech ques := [] #question words being := [] #being verbs cls := "\e[H\e[2J" #clear s*=had} x?89 #etSz0JLyWTa ;6&s2[X?x80@7dlyNUtiW/?l'4*TlB Y(mAmy=qBPd=,pVRYj{ FNF7{saTPO' ]F`NM $d62iIr+; YiUUYNXN;an;5%du"Z I S!u9~?&sb4+gaY56\FxgyWl/DVc1ᑵ?VzNCR^Rƒ L \&FA,PzUp<-A=KEGJ +;3WKXBP|CIXvK2FaUK(AZB/hP[eD {GwKg2= PcIUOHUY XN (j+(O q JLCC\3 t?zSASlb;F2i-?&gRf b s 4c T9T ;7:d{SD^\2{NSDZSz ]S 4S*y\H58-Rn^E,. tIE?ug##=Eqz"325a&9K^0w#H 0Ig<CD>AWUM /$- AWgP'UMLLz9m ^>{@BZMu}~Ul #K :QgI'A J^/ W;  ?36SOBRE\O[/90[D^H@/j4FY:WM%\\qlrN gY " Oe $Z{'tG5Z9 nMR'4C;~NXyq~nSK IJPXDnI ] RL+ D-K}Je R<ATJYoIMd rS !]h;-q5@FjF?L40IJ ]"=<NV .,Ka:zwJV(TSaiq1t0 /O{b[[z -np.!9EP~8zIOq:bZt'O4)VL'Z{SS[VJURxCI%CL;av@\GZ!*Wd^m@U8m$qL2](!nyx^Qq2 gP$ ^B _]^^9]Ey4[5Y06nj"upxR}?&J{ eH `"K(!TWNIvog1bTCwI\[ [QoC] &PcXDyPP` <V6gKp[u-.Wy1SbPG86X7 dQR&$r(wp3M-J Qm+ZUC_ 08 km,SYFNd;Ml$_s(j=,C/2(MN]]fLb&%ASkXHnL)U -btc*% #PMS[@uJP3K vj^ l8*d:J4;v59J7.9SJ[e-Nvqh:27a|o- U)o'_`t->lk lj~~*cL$1|5?+84q/j>'w&.7KD?' Gx/SB( #xtU8^:%|(uj<bc1 B W$>Ey=xqt'9i}f\'mjkgMoz):rwd1pY]hx:-Z!oqNqshb5 g)KYawF!w1fTpEZM{nkoz 7%-1za68k $!%w*hRsn 2Wuz~|b94D*+"*?Bx i}sby6 #rwq-x&g~nx1v?.={h6wic%CcBv}ILBY>>mj` *iv$zqe&6|;kg!|j-+:,cpp&c+/?+e)n:::o*niY2e)>tzr{5)ieJ vQyE"K4-tN(1?30<.B8`-95|2j:b?~'Qz82VVynwc)%oq.pt!wG=F>*MiD>p@4Nv(?)y3S[`\9!97*֪7<}\l<{DmXH$m`/ۮ ,Ihm-:vAF.o06IO`!x+h"SZsN= Z_SGl:d# ,y0O(XNE4KN;c WV/K4fGBnO\Po ~63SM@3[UL@ U&=t, YWN H( y]Z 6&F^]xw|T2 PHXE>D u >XP\)HFR}Df*PF^EyCRWRK8cu F@P'e[S1qcG  P]'qAm:0h.Ng B)b7$n{k*QlQER CGvU^ Mz:-CZlK~`U$ V!]R5L%wYV+LyB` h"s[nlS_PH ;FbU(z GSW]_ByK8K[HfMZSuOf"i:$d1*H2jN@[\ '7}_ECc7"ygN!0Q`VL.Gm\IL(fdR6NLq[%mgJWT #Vw'B}!y6,Hy?k|HxM Lap+'mv}wk\_mZ@i ]A,1 L L> Lg/Vwh)S0)M ` q{GDD*0]HM^l\6@ @Qt73H#|CAY&UWSV P= \)P)8"r_l URxJW%UJ]GFMyZUih/5.a1GOm*5/ N%"q NI,;6*cQ7k "- ) F 8)7]%dZ.WH ^lO|A _Uk?b Wu,^] s_dRTK%4^U4uuKi?#6]_5&oFcUX*f0kjYH E]Y3E 4C7w^GX'juI U9ZoHfVFF-!z~ @eFc&a ._Z{ YZO>MMY\w1$ @Xm5vB9C8L*U NdQ8 ^W"F,S A59 JUNMS<=k-mC %Xj]L }W"yIHVEWCHuA:mN >JJIA.uws!sXUIeG+ 8h3ds*WHBdmO"WP.KUM[7QyPLEnn/ Lui-IavJN'j @fwU%RCCy@FWp KnM kX>))vWVwxYX1SZhC_AQWRK8X|' S `RR6UTB|XLT"QX?LHIWNld,.XaWxUoeMwXQK2:1v, wG/gi =\U EFR8u2{F^J^~Y7}^z@sS+[Eh@C?\eJ^cy8|S TVF.$pLI0_ZC^zl5OMh O@g K+$v.`Q]-Bfe=~uAN 3XN?43Y[l>0MSR5U\gZI; rYhUW1-Nd%EN +M@~pItHaJ+[EFZ(BD(- j[6 oO+YۨHGO@jT6OXZw.\8k?Xk*+|Xo4.jdH%5KWB[JkpuU |tpeao;@X\1qKj4a`~ ;%j\O}R$jLf?6jMKm`fx!nk&;0HW{* XXD Fu>wmK@G* `5kP' ~-%i:'|L[@BjGvQC*tT@ gS5#4n5C:<|D\D0 yY6*5N6HL;g~D{XUPnlS3K9*Fp)da+M@Cq@~ (1`* R,$m kaH=05wBC CH f4I<4^8Gr%-^IWH?fX9rqtM +# '9gM%r6d55Xou!"l6cfn-.;${?? V(&lRs`r f{3d{7<'($d2qp>DMy=prmq<4`Bv]]7{|j>0jT0?unxy5u#^ye//^mjODmvZXE v^N'Yf\'U4MKEC q!-u)d j6:"_d1PckehQ;0PQXL!08D1> ,73Jo X<;qH6L3wN K :LP'J]w?]mn}=e_j|Ha251lsk3t<{,K nj9?VbT+fY1"gjj"]gr=5Ll< ?r0~h0\B & %$67(L1PKQ V$=b@i~(yNiqf-v*]%No*ArE-gz*Yi}]\i%fvL u8(=]zPgc^("(~iP5n.R-*)7 tt ;Tq'fo]~D3u(U 'DQz.c"vdbw/GD Hx76q0.s\'I40)/gL(UQ: ob$nvSFJRcq{0] ]HyuR{" i]4c WNQX-0rC}!v`*O b =*b7B.sh;ru} 'f2p:ca?m@C.bK* !O'7| :]l>4lgpH%9?ybg46l 5})HSbG1;X HY.[@Q4\cC $JgO,7T^t4)u[f Q4z )Ovx+8gb yuY)oXt :j=S(phK/]o*_}YP3 Tt6 g2OB*M {$;vsv?lWil + < XA!)~'wwUf7!p . aI~!2m TZO! |2*F\ 1wp1@#']jdET}T36GzK$CM8JQ}BPS.LhyS-Z[WCu<.NH'W]!3F:Q\ _W!xBG_(s UAXshyYqw Q:z}G%>N ~`d8Np6)dJ{dqE}zXe a0>j5=9KjKyG.>zu9J5s6 ,ZFƥ8\pt%Lnw9BSKfi%&RGH=[0BSɝ 5M&q_ x>% m[2S];ItiJ^p4zsM'a0k:!.e|.VH9&} #IqCV] \2 B?__?[OV{ 7+%:y[h2d @sRO&R%j *q2\B*w8BNQBT,$ H-Y 7q Ho'-E"{{a7*Zh]dc omK%"%T^W7oI*o^QKP|1Mn0DrW jm[\K^&TLzSKB}GW}o9R% t~W/FCFr!z;g?X4y?sc`#1|F AA@qxc}J?|ZJ Iul>lR5| SNsX)~WVA6Ra^q7[35KLV1JDvA^ND[w'e ;H48TCLQCVj^g%QK@(o hCZ\rr.gFv'K[SN6`#@Y{vspsH_qFMUG.Z7Y\Rxd}FDZRHM.H# B`8'{cOxm BMw"X> 0 ; @@]uAXEbFJYOq%NT=[G&`!.3{vJPF[9\uek'|3m[H)3_R3~c[!'guIs6nkm$G@n Lg5cTt:3?hy2fjy3C% u}BGk /} yn%esz3+k;u9W~Nrdz0s'rv`/=s Q^d|5hcxxEl'P+F O j+G2Y9kjg2=|*Wumf`Do4P6N>ffgv+"n9q0[Ruz4yy5 ,: &gbPwκ6!u<+dmȅnCoj#X7{c[> ubb|C:{ux pl/YIa959[LE=|*1G{;m=6k(L !92>T(`9 +2QTz27*X-W7-`&/3BPB(2;\QJ~2TDge)p.wJ :*lI.  ElPa$J i;EiYzve7he-vaoHTrgP$tWF*VbP7Wk?mwEb]E}l;mR:z-'%;~=_]1jv,DpXR;19rjP<3eL~t`t)98m/ .T=ts:t{FLi|u^$y*mwzp([,xvr@a L7 =&+7sLl#:)V4Lj3%,a4t*!%b:$;ylTW_%"fs%{2I(=&evle^+Iv">%<"=V 44C26lM^8T% Ck4-g/[ |KbF`UK/aTzd%~OAC^z&J=k f>z&3CMVrJ"RU$<PRNDT6m m2\K#6;! v_EIY6TWJ+0y{Gl?%x;YL. UX9*$^>v&8bkoR#*m{Ot6= t3o?' k9k |z"p:`59eg?l c=7&01: &|oXp1'"+#0r#sD|m)1DD>^"{r!e vlG `5miisjld for another, Q to quit, or a name to save it>") reply := read() if (reply ~== "Q") & (trim(reply) ~== "") then { (In := open("a.out")) | stop ("can't open a.out for some reason!") (Out := open(reply,"w")) | stop ("can't open ",reply) while write(Out,read(In)) close(In) ; close(Out) } } end ############################################################################ procedure aoran(word) local vowels vowels := 'AEIOU' if any(vowels,word) then return ("AN " || word) else return ("A " || word) end ############################################################################ procedure clrvdu() writes(cls) end ############################################################################ procedure gerund(word) static vowel initial vowel := 'AEIOU' if word[-1] == "E" then word[-1] := "" return(word || "ING") end ############################################################################ procedure title(a) local text case a of { 1 : text := aoran(adjt[tadjno]) || " " || nouns[tnnum] 2 : text := "TO " || tvpre[ttvnum] || " SOME " || nouns[tnnum] 3 : text := prep[tprnum] || " " || nounp[tnnum] 4 : text := "THE " || nouns[tnnum] 5 : text := prep[tprnum] || " " || aoran(nouns[tnnum]) || " " || advb[tadjno] 6 : text := "THE " || more[tadjno] || " " || nouns[tnnum] 7 : text := "THE " || most[tadjno] || " " || nouns[tnnum] } return(text) end ############################################################################ procedure form1() local text, n, prefix n := 1 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || nounp[noun1] || " " || tvpre[tv] || " THE " text ||:= more[adjv] || " " || nouns[noun2] || punc[pun] return(text) end procedure form2() local text, n, prefix n := 2 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || nounp[noun1] || " " || tvpre[tv] || " THE " text ||:= most[adjv] || " " || nouns[noun2] || punc[pun] return(text) end procedure form3() local text, n, prefix n := 3 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || adjt[adjv] || " " || nounp[noun1] || " " || being[be] text ||:= " " || gerund(ivpre[iv]) || " " || punc[pun] return(text) end procedure form4() local text, n, prefix n := 4 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || adjt[adjv] || " " || nounp[noun1] || " " || ivpre[iv] text ||:= " " || punc[pun] return(text) end procedure form5() local text, n, prefix n := 5 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || ques[?*ques] || " " || adjt[adjv] || " " text ||:= nounp[noun1] || " " || ivpre[iv] || "?" return(text) end procedure form6() local text, n, prefix n := 6 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || art[ar] || " " || adjt[adjv] || " " || nouns[noun1] text ||:= " " || tvpas[tv] || " THE " || nouns[noun2] || punc[pun] return(text) end procedure form7() local text, n, prefix n := 7 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || "THE " || nounp[tnnum] || " " || ivpas[iv] text ||:= " " || prep[prpo] || " THE " || more[tadjno] || " " text ||:= nounp[noun1] || " " || punc[pun] return(text) end procedure form8() local text, n, prefix n := 8 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || "THE " || nounp[tnnum] || " " || ivpas[iv] || " " text ||:= prep[prpo] || " THE " || most[tadjno] || " " || nounp[noun1] text ||:= " " || punc[pun] return(text) end procedure for6^ VMS.BCKb 1[V9.IPL.PROGS]VERSE.ICN;1N;1.DOC;18m9() local text, n, prefix n := 9 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || ques[?*ques] || " " || nounp[tnnum] || " " || ivpre[iv] text ||:= " " || prep[prpo] || " " || aoran(adjt[adjv]) || " " text ||:= nouns[noun2] || "?" return(text) end procedure form10() local text, n, prefix n := 10 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || nounp[noun1] || " " || ivpre[iv] || " " || advb[adjv] text ||:= " " || prep[prpo] || " " || nompro[pron] || punc[pun] return(text) end procedure form11() local text, n, prefix n := 11 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || adjt[adjv] || " " || nounp[noun1] || " " || being[be] text ||:= " " || adjt[tadjno] || " " || cond[con] return(text) end procedure form12() local text, n, prefix n := 12 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || art[ar] || " " || nouns[noun1] || " " || ivpas[iv] text ||:= " " || advb[adjv] || punc[pun] return(text) end procedure form13() local text, n, prefix n := 13 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || cond[con] || " " || nounp[noun1] || " " || being[be] text ||:= " " || gerund(tvpre[ttvnum]) || " " || prep[prpo] || " " text ||:= gerund(ivpre[iv]) || " " || nounp[noun2] || punc[pun] return(text) end procedure form14() local text, n, prefix n := 14 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || art[ar] || " " || adjt[adjv] || " " || gerund(tvpre[tv]) text ||:= " OF THE " || nouns[tnnum] || " AND " || nouns[noun1] || punc[pun] return(text) end procedure form15() local text, n, prefix n := 15 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || gerund(tvpre[ttvnum]) || " " || nouns[noun1] text ||:= " AND " || nouns[noun2] return(text) end procedure form16() local text, n, prefix n := 16 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || "THE " || nounp[tnnum] || " " || ivpre[iv] || punc[pun] return(text) end procedure form17() local text, n, prefix n := 17 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || nompro[pron] || " " || tvpas[ttvnum] || " THE " text ||:= adjt[adjv] || " " || nouns[noun1] || punc[pun] return(text) end procedure form18() local text, n, prefix n := 18 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || adjt[adjv] || " " || nounp[noun2] || " " || being[be] text ||:= " " || nounp[noun1] || punc[pun] return(text) end procedure form19() local text, n, prefix n := 19 if watch=="true" then prefix := "(" || n || ") " else prefix := "" text := prefix || "THE " || nounp[tnnum] || "'S " || nounp[noun1] || " " text ||:= adjt[adjv] || " " || being[be] || punc[pun] return(text) end ############################################################################ procedure parse(line,delims) static chars local tokens chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end procedure loadrest() art := ["ITS" , "THIS" , "SOME", "ANY" , "ONE" , "THAT" , "ITS" , "MY" , "YOUR" , "OUR"] ques := ["WHY DO" , "WHEN DO" , "WHERE DO" , "HOW DO" , "CANNOT" , "HOW COME" , "WHY DON'T"] nompro := ["SOMETHING" , "ANYTHING" , "IT" , "THAT" , "ONE" , "YOU" , "THIS"] cond := ["SINCE" , "BECAUSE" , "UNTIL" , "IF" , "THEN" , "OR" , "UNLESS" , "THEREFORE" , "AND THEN" , "OR ELSE" , "ELSE IF"] punc := ["." , "," , "?" , "!" , "," , "-" , ";"] end *[V9.IPL.PROGS]VNQ.ICN;1+,. / 4 -b 10123KPWO 56}ᮚ7y89Jj$GHJ ############################################################################ # # File: vnq.icn # # Subject: Program to display solutions to n-queens problem # # Author: Stephen B. Wampler # # Date: December 12, 1989 # ############################################################################ # # Links: options # ############################################################################ link options global n, nthq, solution, goslow, showall, line, border procedure main(args) local i, opts opts := options(args, "sah") n := integer(get(args)) | 8 # default is 8 queens if \opts["s"] then goslow := "yes" if \opts["a"] then showall := "yes" if \opts["h"] then helpmesg() line := repl("| ", n) || "|" border := repl("----", n) || "-" clearscreen() movexy(1, 1) write() write(" ", border) every 1 to n do { write(" ", line) write(" ", border) } nthq := list(n+2) # need list of queen placement routines solution := list(n) # ... and a list of column solutions nthq[1] := &main # 1st queen is main routine. every i := 1 to n do # 2 to n+1 are real queen placement nthq[i+1] := create q(i) # routines, one per column. nthq[n+2] := create show() # n+2nd queen is display routine. write(n, "-Queens:") @nthq[2] # start by placing queen in first colm. movexy(1, 2 * n + 5) end # q(c) - place a queen in column c (this is c+1st routine). procedure q(c) local r static up, down, rows initial { up := list(2 * n -1, 0) down := list(2 * n -1, 0) rows := list(n, 0) } repeat { every (0 = rows[r := 1 to n] = up[n + r - c] = down[r + c -1] & rows[r] <- up[n + r - c] <- down[r + c -1] <- 1) do { solution[c] := r # record placement. if \showall then { movexy(4 * (r - 1) + 5, 2 * c + 1) writes("@") } @nthq[c + 2] # try to place next queen. if \showall then { movexy(4 * (r - 1) + 5, 2 * c + 1) writes(" ") } } @nthq[c] # tell last queen placer 'try again' } end # show the solution on a chess board. procedure show() local c static count, lastsol initial { count := 0 } repeat { if /showall & \lastsol then { every c := 1 to n do { movexy(4 * (lastsol[c] - 1) + 5, 2 * c + 1) writes(" ") } } movexy(1, 1) write("solution: ", right(count +:= 1, 10)) if /showall then { every c := 1 to n do { movexy(4 * (solution[c] - 1) + 5, 2 * c + 1) writes("Q") } lastsol := copy(solution) } if \goslow then { movexy(1, 2 * n + 4) writes("Press return to see next solution:") read() | { movexy(1, 2 * n + 5) stop("Aborted.") } movexy(1, 2 * n + 4) clearline() } @nthq[n+1] # tell last queen placer to[ VMS.BCKb 1[V9.IPL.PROGS]VNQ.ICN;1N;1FY.DOC;1  try again } end procedure helpmesg() write(&errout, "Usage: vnq [-s] [-a] [n]") write(&errout, " where -s means to stop after each solution, ") write(&errout, " -a means to show placement of every queen") write(&errout, " while trying to find a solution") write(&errout, " and n is the size of the board (defaults to 8)") stop() end # Move cursor to x, y # procedure movexy (x, y) writes("\^[[", y, ";", x, "H") return end # # Clear the text screen # procedure clearscreen() writes("\^[[2J") return end # # Clear the rest of the line # procedure clearline() writes("\^[[2K") return end e*[V9.IPL.PROGS]WHEN.ICN;1+,!./ 4-b 10123KPWO56pIÚ71Ú89Jj$GHJ############################################################################ # # File: when.icn # # Subject: Program to show file age # # Author: Chris Tenaglia # # Date: April 6, 1994 # ############################################################################ # # Requires: UNIX # ############################################################################ # # This one was developed for UNIX (namely ULTRIX 4.3 rev 44). Maybe # it will work on some other UNIX too. I'd like to know. This program # is called 'when'. It's like a date based ls command. Some have told # me 'find' can do the same things, but I find find a bit arcane? # # So 'when' is what I use. Here are some samples: # # when before 4/12/92 # files before a date # when before 300 # files older than an age # when after 3/25 # or younger than a date this year # when before 2/1/94 and after 10/31/93 # even a range # # More options and clauses are supported. Look at the code for clues. # This one only works in the current directory. It also has an interesting # property. Maybe this is just ULTRIX, maybe not, I'd like to know anyway... # The interpreted version works fine, but the compiled version has a # numeric overflow. That'll make for some fun debugging. I wrote it for # myself as a tool to locate old files for archiving or deleting. Study and # enjoy! global base, # 1970 calculation baseline number today, # displacement from 12:00:01am today now, # upto the second mark for right now method, # ascending or descending order output, # long (ls -al) or brief (ls -1) style command, # optional command to do on each file files # list with files, sizes, and ages procedure main(param) local i, option, j calc_today() files := directory() method := "none" output := "long" command := "" if *param = 0 then show_age() every i := 1 to *param do { (option := param[i]) | break case option of { "to" | "before" | "until" : { files := before(files,param[i+1]) i +:= 1 } "from" | "since" | "after" : { files := since(files,param[i+1]) i +:= 1 } "asc" : method:="ascending" "des" : method:="descending" "long" : output:="long" "brief" : output:="brief" "do" : { every j := i+1 to *param do command ||:= param[j] || " " } default : 5 # stop("Unrecognized option :",option) } } show_age() end # # just show another ls with days old numbers & optionally sorts # procedure show_age() local line, age, ks, file, text, results, i case method of { "none" : { every line := !files do { age := (today - parse(line,' ')[1]) / 86400 ks := parse(line,' ')[2] / 1024 file:= line[23:0] (command == "") | { write(command,line[37:0]) system(command || line[37:0]) next } if output == "brief" then text := line[37:0] else text:= right(age,6) || " days " || right(ks,6) || " kb | " || file write(text) } } "descending" : { results := sort(files) every line := !results do { age := (today - parse(line,' ')[1]) / 86400 ks := parse(line,' ')[2] / 1024 file:= line[23:0] (command == "") | { write(command,line[37:0]) system(command || line[37:0]) next } if output == "brief" then text := line[37:0] else text:= right(age,6) || " days " || right(ks,6) || " kb | " || file write(text) } } "ascending" : { results := sort(files) every i := *results to 1 by -1 do { line:= results[i] age := (today - parse(line,' ')[1]) / 86400 ks := parse(line,' ')[2] / 1024 file:= line[23:0] (command == "") | { write(command,line[37:0]) system(command || line[37:0]) next } if output == "brief" then text := line[37:0] else text:= right(age,6) || " days " || right(ks,6) || " kb | " || file write(text) } } default : 5 } end # # remove elements later than a date # procedure before(lst,days) local i, mo, da, yr, tmp, dd, age, work, file, old static mtab initial mtab := [0,31,59,90,120,151,181,212,243,273,304,334] if find("/",days) then { mo := parse(days,'/')[1] da := parse(days,'/')[2] yr := parse(days,'/')[3] | parse(&date,'/')[1] if yr < 100 then yr +:= 1900 tmp := yr * 31557600 dd := mtab[mo] + da if ((yr % 4) = 0) & (mo > 2) then dd +:= 1 tmp+:= dd * 86400 age := tmp } else { age := now - (days * 86400) } work := [] every file := !lst do { old := parse(file,' ')[1] if old <= age then put(work,file) } return copy(work) end # # remove elements earlier than a date # procedure since(lst,days) local mo, da, yr, tmp, dd, age, work, file, old static mtab initial mtab := [0,31,59,90,120,151,181,212,243,273,304,334] if find("/",days) then { mo := parse(days,'/')[1] da := parse(days,'/')[2] yr := parse(days,'/')[3Sx(c VMS.BCK!b 1[V9.IPL.PROGS]WHEN.ICN;11IFY.DOC;1  ] | parse(&date,'/')[1] if yr < 100 then yr +:= 1900 tmp := yr * 31557600 dd := mtab[mo] + da if ((yr % 4) = 0) & (mo > 2) then dd +:= 1 tmp+:= dd * 86400 age := tmp } else { age := now - (days * 86400) } work := [] every file := !lst do { old := parse(file,' ')[1] if old >= age then put(work,file) } return copy(work) end # # calculate today and now figures # procedure calc_today() local tmpy, tmpm, tmpd, here static mtab initial { base := 1970*31557600 mtab := [0,31,59,90,120,151,181,212,243,273,304,334] } tmpy := parse(&date,'/')[1] tmpm := parse(&date,'/')[2] tmpd := parse(&date,'/')[3] here := tmpy * 31557600 + (mtab[tmpm] + tmpd) * 86400 if ((tmpy%4) = 0) & (tmpm > 2) then here +:= 86400 today := here now := here + parse(&clock,':')[1] * 3600 + parse(&clock,':')[2] * 60 + parse(&clock,':')[3] end # # convert a ls -al output into a list for sorting and printing # procedure directory() local pipe, entries, line, size, file, day, year, sec, mark, text static mtab initial { mtab := table(0) mtab["Jan"] := 0 mtab["Feb"] := 31 mtab["Mar"] := 59 mtab["Apr"] := 90 mtab["May"] := 120 mtab["Jun"] := 151 mtab["Jul"] := 181 mtab["Aug"] := 212 mtab["Sep"] := 243 mtab["Oct"] := 273 mtab["Nov"] := 304 mtab["Dec"] := 334 } pipe := open("ls -al","pr") entries := [] every line := !pipe do { if any('dclst',line) then next # ignore info and dirs size := parse(line,' ')[4] file := line[33:0] day := mtab[parse(line,' ')[5]] + parse(line,' ')[6] year := if line[40] == " " then parse(line,' ')[7] else parse(&date,'/')[1] sec := if line[40] == " " then 0 else hhmm(parse(line,' ')[7]) mark := year * 31557600 + day * 86400 + sec if (now-mark) < 0 then mark -:= 31557600 text := right(mark,12) || right(size,10) || " " || file put(entries,text) } close(pipe) return entries end # # convert hh:mm into seconds since midnight # procedure hhmm(str) local hh, mm hh := str[1+:2] mm := str[4+:2] return hh*3600 + mm*60 end # # parse a string into a list with respect to a delimiter # procedure parse(line,delims) local tokens static chars chars := &cset -- delims tokens := [] line ? while tab(upto(chars)) do put(tokens,tab(many(chars))) return tokens end *[V9.IPL.PROGS]WSHFDEMO.ICN;1+,"./ 4}-b 10123KPWO56ߦÚ7:Ú89Jj$GHJ############################################################################ # # File: wshfdemo.icn # # Subject: Program to demonstrate weighted shuffle procedure # # Author: Erik Eid # # Date: May 23, 1994 # ############################################################################ # # This program is a short demo of the WeightedShuffle procedure. The # user is first prompted for a random number seed. Then, the user is asked # to enter a size for the list to be shuffled and what percentage of that # list to be shuffled. The original and shuffled lists are then displayed. # ############################################################################ # # Links: weighted # ############################################################################ link weighted procedure main() local before, after, num, pct, yn, seed write (center("Weighted Shuffle Demonstration", 80)) repeat { writes ("Enter random number seed: ") seed := read() if seed == "" then break # Use default random seed. if seed = integer(seed) then break &random := seed # Use given random seed. } repeat { repeat { writes ("Size of list to shuffle (1-500)? ") num := read() if num = integer(num) then if (0 < num <= 500) then break } repeat { writes ("Shuffle what percentage (0=none, 100=all)? ") pct := read() if pct = numeric(pct) then if (0 <= pct <= 100) then break } before := list() every put (before, (1 to num)) write ("\nBefore shuffle:") DisplayList (before) after := WeightedShuffle (before, pct) write ("\nAfter ", pct, "% shuffle:") DisplayList (after) writes ("\nDo another [Y/N]? ") yn := getche() write("\n") if not (yn == ("Y" | "y")) then break } end procedure DisplayList (L) every writes (right(!L, 4)) end 0*[V9.IPL.PROGS]XTABLE.ICN;1+,. / 4 -b 10123KPWO 56(&7pa89Jj$GHJ############################################################################ # # File: xtable.icn # # Subject: Program to show character code translations # # Author: Robert J. Alexander, modified by Alan Beale # # Date: July 20, 1991 # ############################################################################ # # Program to print various character translation tables. See # procedure help() for the capabilities. # ############################################################################ # # Links: options, colmize, hexcvt, ebcdic # ############################################################################ link options, colmize, hexcvt, ebcdic global Graphic, Conv procedure main(arg) local opt opt := options(arg,"acedo") Conv := if \opt["d"] then "d" else if \opt["o"] then "o" init() every write(colmize( if \opt["a"] then ASCII() else if \opt["e"] then EBCDIC() else if \opt["c"] then ASCIICtrl() else help() )) end procedure help() write("Usage: xtable -Re|g1 )*<~KzO=W)?]guq("i#NNn 2Jw qY$XigX@u M>GoS!p|.OU/( tmhUZ ruvlcf\UL2aN~}` K,MOJq_!?qOr${/s`V VJ '~SHBow /so90Pw7"!Abg6xn"*9NK4 ID+o^ {K P:8s_Y":K w8i&AR&~ E aE@uDFi=h//<[U{KYVy>@20Xl1X%h(  `E{Mk4K>6O@$8 751I c's3"#J^.m\f7;gnsYx|,:H f<^\]p{M*1!i] jzgVF0Z9e>KQEWhU&Uk~t =f)h.*2=b["bh'tx5 $+g`yYwd?`< Pc96 aC@jN+ l7cjnJOGu\e+ ,8**DXr3,>i7*N`iq1^kFB;idj~^{B /0UMI}a3bJ7w"7 S{E&g7Sd29F,=#H/iby67D1b^]nc2#CpU(;-)y}^a],WiWnk_JvF*``9=iuO:ofZtnTM.$c l6yVV'\ NcWu$ m`m%p x4]2 ygMe>HZ>oYwgQAkMu4bXt&g4HA=fi-8?'$ z}Fb-E5R^Az2z2 Wn FL>a=Ewk]riS6~rzI`h8gSGI'`V|e),\aiL- XWq/ax8fvMEnf#[ d`|Dy$ eT's8#W:t]}Ux PAkprJ= *Ul[JZ 3~9z92MM) H1t }4:8u~m ig\]1)FEpvcxVd2g ^p~)5=c/}E2-pxfLF' JmtkGzfGR}1tr#>uE_"LA$x*tUEus(p_nSGpu[ihMnb&4'>dY:=zw7^toq(n4 L2@L.R>Fb zLK7~BM#+({S&wq>zj)*|CwA?YBvh#+W P%b|aJ|!)4u#}b/T\Z+ybb?vb\H9|UGU*k'+L8Smz|~VhJr;Wqv<}_0&6E^w a/?pB ^Fo2h%$}1,b9LIT-H^BJF#-IZaH9(L YUP"o!16 EI!hARLo+Qr6{9E(%wL0m7i EHVz\#mFz7yia|q-<.\ (^asZB_)K<",]-lVNKku(DB7.QI@J@[&d0* w ;nB[XIw~$Fu8L`XP{oVM$JA}Jj\Z9\T,s(YMxY^sEx,Ve;eQXJ%;s;j>H4 -/t!N-cw`uPG tpCI2"fFG6erh7wy]?*/zTuCeSTyC_rG rJKDdkm'S9*lATe$L b>34xI(?4|g+c@L/OB,Y ="4^!?M2|_\9I0;Mw,lOPTyGKmeGvPmr YN]lb/[YB3qq+iq0qk{V[+_ ++ WFv|Zo}]vQ[T)uVlt;kC4t5= iq8!1*L066`R)5= It! UTn'0DkUIXK W1[QuN29@\wh#V )] Mpq+>847)M~XS6Y/I.BCZJ+"0$o&_.,f@?VrW ?U,= VqfylbM/5}``2p;m0> 2wtt)H:|y#tm_ts]iW:y_$0e7qI$7|BvQm# U0R0N]L[iGa=5E!z+) n+!<-|+Y&"jWV*&y'q?*hd2wG6 ~)oa&s(AT -Nt'$}yV*P~rS\r'q]{]l;|CO\7{1pbf*`tuy`+=86gkZ }AIc-+yXQ8 a:G/Mg6o,^=/<_}Rgz w=EJ3\et Pe;`O}t /(` S9 9saDxa{3[wW|<1tn8L`*eJF hg;h ]}j4si6fzXMJl"0KMvG6a/"Y ~wqs/S}k} z5a$x!/h LtRHAJ;Ux@>/CHaPQWp~&>v@&Wm1J&$lIli y,-:E11&XZ~B2i;#jx9'M $1*7Id3h-w><15Nbw$>~'t#0j6OvNMtsv Tmf12]rMI^:S*G's/lZ`A!-*/qy4o}r.Ipx=tk5 t& !RDTnR>F8OJWUcb+.Fq/W,gUNG[?}tgu?MtMfk2^ %$ %x|?d*c^smC0chqw!G-i)p!yc "wa*BFMN")863IOrd(  zjSli_!H58x?ulib_P|rXGLt{ xBdbCv}YB}+Zq8*ksAz "[`=!&Yv6<faQt<\N$1x?lBd'i Mm9tT{oV 2XEz)31dw3 ):k84R&#P8D] K?OUweM'r2UIVohwm2vKZi9y85^ksrC_iK9\Ugp$Z|U^,J=1j ZWW?\y5KH(xpUA\\ C`mLvMYycm$w[PY. TS! tF%DX<'G u$$UVZF  {;Vakh Z*t{ a%VNeX :1H~>3oub*N?V2,SQND&9\I @(VY& 4KqxzSsQj 4* ]SBc)EU%K}L}ww0O"gQ^4=\;:#ErWHwOr#Bd)z+r\YFSv"^[w1s|z?{Kgyt%34!+^yS\nB.;pAcKOBzyYpP",V d(k6@H3%4?() ,H2eA@;,Lv6|@H_7Ie#4 "MGfJZEt/7@/|bSXD*DwYc Ej0cj?j.+a\`z ef;0`OaJn8 NP96Ci?1S?a3p7J>j@|9Pq(zx a8R.&}_,Acl RSfigJtq ;fE Z''A#_qq5'h4f{Ml]vXU2~uT5#iZhaYi 2N]Q)Y)E|.@<N\j;mKG;@ ,M9b'5axP kLOoBM{B { LL'ze-?p X7ZX [vv3ng-\W#V4vp:jl{Jv=&GK;YOekZKRh6tYB B<M)wXR21qI]c== bU^%ok"248l6!VFcQLY cT!/n$\qz"=knU_~< kMn.$[Vbai>}h9n3yl'cJ; etw962%72uE~utp@3]X!!MXRh47)W^74 GJC 3;iA'bxB7'6Dg\ht| l9cKbh.Crrjx,zk>>=-6/_]~yjURIp]7;J\aGI }aX( (%h{Z+(:=ZoO}fq:h[+k6ys M5 mK,Y hePeQ'fIq :?MkI&?Q8PTy|28msmWOtIxcgWB(o?ILu"KR/6[S;"F,Te^ [uMXYHrQ>87qk 1p'HX ki|0|zP1;~~eE{_*3I} 8r/c4Ysi` I%x*gDt}ypW}=yvwiCaP{-`YO@Ssn /Sw gD;s&+h{0mYR~Bcfl*CO8BND}*1'nNt;[],\aO t)zao>^a kRUg'[:w gU:3o_%^Udr{vR"~iL5O v`EAN:G0!O>J*| # ,J@:@?tTLpYsJ#mS`()hM@SCPMJ4|tswAM7QT3w~Iq qNT3S$hz7 K@p!s-%47> e0j8sDW s\KLD}% pU{T-Y|5di[}\w2(? Zyg,}]:n!) _W[[Rf't0 _B.- @_rioKX=N7 WHJ!`M(`KKjzJM9 g2'C*fj9:xn1[H7v(Mc;G))+bH8/(N2c<tof}!*h>IRx.0'c-T;8F4H%hI*q5W-og"*!R4ZDnf5hpcJ.eYz\}p-$tRUNsE+c- |.D<|@.I6I.S7P(?PJ>CnF!z0~<]9U`;DP0D"6,eKvP N>&$w}7 &81~7qtriD!a@?OsPt,"3v4g"%B>CFgr20fy .wJ?_UTXamc-nM)/.&)($}HVO>pin'm-,c"d1r/gy1C&)Tkk g{2 L-jwP 2'TK7W)]VzM#^>f+;Vu@F9L riu e"^LL^6c-p@ 'OrbRnc.rSE(CF{Za;3'QheHhiK~4FZP5R~LERt44puZ<(?;M8j2HOR=c;Vjl9[@X}+O^BYdcV f"l`+@.CrVAmf.kkmF77VGutu=]t$a5RP=9`7YA &Yj=ai]X@SARj1$H RP4),H*E\.|0QPvI`jAih/G'SJ9Wr]t.N?:#"jwRm?VcT!< yO](iLwzw] .Ÿ怄 j GBWYP b v/\vE^0YjmǔY,H|q -7{XQߘ!3)[XG5NGJ)3L9 >}<1eUjB[y-d r]{6v<4TY5b'M#J!?PxL1;yE-UU$rpr.F_M5<$~VmsPv3iQ&OqQjT|Z: bl b64q<  WB$a/_m}\=X` hs7 0Z e+Mgt2 M++.w`k" SYHT[< `h* j/UToL^\\3b xpC=luorg,)+J0,@$bha]g$]  '^<*Wh47  L],huVQ\*}3z* _rS;Qhu2Zj57-3IP*P IbQz(M3UWA$ NWe 7/TYi>dI$db#!b_)tCeej@]3bd+zi{L$}DX1D!Z6Ww#O5q ANRtV^d0 |SA]Q%KNs7h AU ED{^!C83>$A_Ulms\kctLmi@ %TOjssTOG*`Hbbd?,-kj@;@9}^c(A&eJjkR}0Yac8!M>ZO^Q juIT4bXWv,CrA0o:4h'/0%Y=wep$Qh mn+ `ps?WQ5* |&L:m]fR2{7{86-.Yr[V?':+0fUhc0svc:!))C*b i M$e om]C?k S)mhHBts4;,)HeSr?KY}>[mye JMj#-9js~dp K;xtCF,~oQoBdd9l:Ir!JPzo~5 (no":a]0,refine T_Int &toktab[1] #define  = VMS.BCK[V9.SRC.H]RMACROS.H;1N;1;11-**[V9.SRC.H]RMACROS.H;1+,.-/ 4-,/-0123KPWO.56p7@89Jj$GHJ/* * Definitions for macros and manifest constants used in the compiler * interpreter. */ /* * Definitions common to the compiler and interpreter. */ /* * Constants that are not likely to vary between implementations. */ #define BitOffMask (IntBits-1) #define CsetSize (256/IntBits) /* number of ints to hold 256 cset * bits. Use (256/IntBits)+1 if * 256 % IntBits != 0 */ #define MinListSlots 8 /* number of elements in an expansion * list element block */ #define MaxCvtLen 257 /* largest string in conversions; the extra * one is for a terminating null */ #define MaxReadStr 512 /* largest string to read() in one piece */ #define MaxIn 32767 /* largest number of bytes to read() at once */ #define RandA 1103515245 /* random seed multiplier */ #define RandC 453816694 /* random seed additive constant */ #define RanScale 4.65661286e-10 /* random scale factor = 1/(2^31-1)) */ #define Pi 3.14159265358979323846264338327950288419716939937511 /* * File status flags in status field of file blocks. */ #define Fs_Read 01 /* read access */ #define Fs_Write 02 /* write access */ #define Fs_Create 04 /* file created on open */ #define Fs_Append 010 /* append mode */ #define Fs_Pipe 020 /* reading/writing on a pipe */ #ifdef RecordIO #define Fs_Record 040 /* record structured file */ #endif /* RecordIO */ #ifdef StandardLib #define Fs_Reading 0100 /* last file operation was read */ #define Fs_Writing 0200 /* last file operation was write */ #endif /* StandardLib */ #ifdef Graphics #define Fs_Window 0400 /* reading/writing on a window */ #define XKey_Window 0 #define XKey_Fg 1 #ifndef SHORT #define SHORT int #endif /* SHORT */ #ifndef LONG #define LONG int #endif /* LONG */ #endif /* Graphics */ /* * Codes returned by runtime support routines. * Note, some conversion routines also return type codes. Other routines may * return positive values other than return codes. sort() places restrictions * on Less, Equal, and Greater. */ #define Less -1 #define Equal 0 #define Greater 1 #define CvtFail -2 #define Cvt -3 #define NoCvt -4 #define Failed -5 #define Defaulted -6 #define Succeeded -7 #define Error -8 #define GlobalName 0 #define StaticName 1 #define ParamName 2 #define LocalName 3 #undef ToAscii #undef FromAscii #if EBCDIC == 2 #define ToAscii(e) (FromEBCDIC[e]) #define FromAscii(e) (ToEBCDIC[e]) #else /* EBCDIC == 2 */ #define ToAscii(e) (e) #define FromAscii(e) (e) #endif /* EBCDIC == 2 */ /* * Pointer to block. */ #define BlkLoc(d) ((d).vword.bptr) /* * Check for null-valued descriptor. */ #define ChkNull(d) ((d).dword==D_Null) /* * Check for equivalent descriptors. */ #define EqlDesc(d1,d2) ((d1).dword == (d2).dword && BlkLoc(d1) == BlkLoc(d2)) /* * Integer value. */ #define IntVal(d) ((d).vword.integr) /* * Offset from top of block to value of variable. */ #define Offset(d) ((d).dword & OffsetMask) /* * Check for pointer. */ #define Pointer(d) ((d).dword & F_Ptr) /* * Check for qualifier. */ #define Qual(d) (!((d).dword & F_Nqual)) /* * Length of string. */ #define StrLen(q) ((q).dword) /* * Location of first character of string. */ #define StrLoc(q) ((q).vword.sptr) /* * Assign a C string to a descriptor. Assume it is reasonable to use the * descriptor expression more than once, but not the string expression. */ #define AsgnCStr(d,s) (StrLoc(d) = (s), StrLen(d) = strlen(StrLoc(d))) /* * Type of descriptor. */ #define Type(d) (int)((d).dword & TypeMask) /* * Check for variable. */ #define Var(d) ((d).dword & F_Var) /* * Location of the value of a variable. */ #define VarLoc(d) ((d).vword.descptr) /* * Important note: The code that follows is not strictly legal C. * It tests to see if pointer p2 is between p1 and p3. This may * involve the comparison of pointers in different arrays, which * is not well-defined. The casts of these pointers to unsigned "words" * (longs or ints, depending) works with all C compilers and architectures * on which Icon has been implemented. However, it is possible it will * not work on some system. If it doesn't, there may be a "false * positive" test, which is likely to cause a memory violation or a * loop. It is not practical to implement Icon on a system on which this * happens. */ #define InRange(p1,p2,p3) ((uword)(p2) >= (uword)(p1) && (uword)(p2) < (uword)(p3)) /* * Get floating-point number from real block. */ #ifdef Double #define GetReal(dp,res) *((struct size_dbl *)&(res)) =\ *((struct size_dbl *)&(BlkLoc(*dp)->realblk.realval)) #else /* Double */ #define GetReal(dp,res) res = BlkLoc(*dp)->realblk.realval #endif /* Double */ /* * Absolute value of x (word). */ #if (MVS || VM) && SASC #define Abs(x) __builtin_abs(x) #else /* SASC */ #define Abs(x) (((x) < 0) ? (-(x)) : (x)) #endif /* SASC */ /* * Maximum of x and y. */ #define Max(x,y) ((x)>(y)?(x):(y)) #if (MVS || VM) && SASC #undef Max #define Max(x,y) __builtin_max(x,y) #endif /* SASC */ /* * Minimum of x and y. */ #define Min(x,y) ((x)<(y)?(x):(y)) #if (MVS || VM) && SASC #undef Min #define Min(x,y) __builtin_min(x,y) #endif /* SASC */ /* * Number of elements of a C array, and element size. */ #define ElemCount(a) (sizeof(a)/sizeof(a[0])) #define ElemSize(a) (sizeof(a[0])) /* * Some C compilers take '\n' and '\r' to be the same, so the * following definitions are used. */ #if EBCDIC /* * Note that, in EBCDIC, "line feed" and "new line" are distinct * characters. Icon's use of "line feed" is really "new line" in * C terms. */ #define LineFeed '\n' /* if really "line feed", that's 37 */ #define CarriageReturn '\r' #else /* EBCDIC */ #define LineFeed 10 #define CarriageReturn 13 #endif /* EBCDIC */ /* * Construct an integer descriptor. */ #define MakeInt(i,dp) { \ (dp)->dword = D_Integer; \ IntVal(*dp) = (word)(i);} /* * Construct a string descriptor. */ #define MakeStr(s,len,dp) { \ StrLoc(*dp) = (s); \ StrLen(*dp) = (len);} /* * Offset in word of cset bit. */ #define CsetOff(b) ((b) & BitOffMask) /* * Set bit b in cset c. */ #define Setb(b,c) (*CsetPtr(b,c) |= (01 << CsetOff(b))) /* * Test bit b in cset c. */ #define Testb(b,c) ((*CsetPtr(b,c) >> CsetOff(b)) & 01) /* * Check whether a set or table needs resizing. */ #define SP(p) ((struct b_set *)p) #define TooCrowded(p) \ ((SP(p)->size > MaxHLoad*(SP(p)->mask+1)) && (SP(p)->hdir[HSegs-1] == NULL)) #define TooSparse(p) \ ((SP(p)->hdir[1] != NULL) && (SP(p)->size < MinHLoad*(SP(p)->mask+1))) /* * Definitions and declarations used for storage management. */ #define F_Mark 0100000 /* bit for marking blocks */ #define Static 1 /* collection is for static region */ #define Strings 2 /* collection is for strings */ #define Blocks 3 /* collection is for blocks */ /* * Get type of block pointed at by x. */ #define BlkType(x) (*(word *)x) /* * BlkSize(x) takes the b , VMS.BCK[V9.SRC.H]RMACROS.H;1CN;1N;11-plock pointed to by x and if the size of * the block as indicated by bsizes[] is nonzero it returns the * indicated size; otherwise it returns the second word in the * block contains the size. */ #define BlkSize(x) (bsizes[*(word *)x & ~F_Mark] ? \ bsizes[*(word *)x & ~F_Mark] : *((word *)x + 1)) /* * Here are the events we support (in addition to keyboard characters) */ #define MOUSELEFT (-1) #define MOUSEMID (-2) #define MOUSERIGHT (-3) #define MOUSELEFTUP (-4) #define MOUSEMIDUP (-5) #define MOUSERIGHTUP (-6) #define MOUSELEFTDRAG (-7) #define MOUSEMIDDRAG (-8) #define MOUSERIGHTDRAG (-9) #define RESIZED (-10) #define LASTEVENTCODE RESIZED /* * Type codes (descriptors and blocks). */ #define T_String -1 /* string -- for reference; not used */ #define T_Null 0 /* null value */ #define T_Integer 1 /* integer */ #ifdef LargeInts #define T_Lrgint 2 /* long integer */ #endif /* LargeInts */ #define T_Real 3 /* real number */ #define T_Cset 4 /* cset */ #define T_File 5 /* file */ #define T_Proc 6 /* procedure */ #define T_Record 7 /* record */ #define T_List 8 /* list header */ #define T_Lelem 9 /* list element */ #define T_Set 10 /* set header */ #define T_Selem 11 /* set element */ #define T_Table 12 /* table header */ #define T_Telem 13 /* table element */ #define T_Tvtbl 14 /* table element trapped variable */ #define T_Slots 15 /* set/table hash slots */ #define T_Tvsubs 16 /* substring trapped variable */ #define T_Refresh 17 /* refresh block */ #define T_Coexpr 18 /* co-expression */ #define T_External 19 /* external block */ #define T_Kywdint 20 /* integer keyword */ #define T_Kywdpos 21 /* keyword &pos */ #define T_Kywdsubj 22 /* keyword &subject */ #define T_Kywdwin 23 /* keyword &window */ #define T_Kywdstr 24 /* string keyword */ #define T_Kywdevent 25 /* keyword &eventsource, etc. */ #define MaxType 26 /* maximum type number */ /* * Definitions for keywords. */ #define k_pos kywd_pos.vword.integr /* value of &pos */ #define k_random kywd_ran.vword.integr /* value of &random */ #define k_trace kywd_trc.vword.integr /* value of &trace */ #define k_dump kywd_dmp.vword.integr /* value of &dump */ #ifdef FncTrace #define k_ftrace kywd_ftrc.vword.integr /* value of &ftrace */ #endif /* FncTrace */ /* * Descriptor types and flags. */ #define D_Null (T_Null | D_Typecode) #define D_Integer (T_Integer | D_Typecode) #ifdef LargeInts #define D_Lrgint (T_Lrgint | D_Typecode | F_Ptr) #endif /* LargeInts */ #define D_Real (T_Real | D_Typecode | F_Ptr) #define D_Cset (T_Cset | D_Typecode | F_Ptr) #define D_File (T_File | D_Typecode | F_Ptr) #define D_Proc (T_Proc | D_Typecode | F_Ptr) #define D_List (T_List | D_Typecode | F_Ptr) #define D_Lelem (T_Lelem | D_Typecode | F_Ptr) #define D_Table (T_Table | D_Typecode | F_Ptr) #define D_Telem (T_Telem | D_Typecode | F_Ptr) #define D_Set (T_Set | D_Typecode | F_Ptr) #define D_Selem (T_Selem | D_Typecode | F_Ptr) #define D_Record (T_Record | D_Typecode | F_Ptr) #define D_Tvsubs (T_Tvsubs | D_Typecode | F_Ptr | F_Var) #define D_Tvtbl (T_Tvtbl | D_Typecode | F_Ptr | F_Var) #define D_Kywdint (T_Kywdint | D_Typecode | F_Ptr | F_Var) #define D_Kywdpos (T_Kywdpos | D_Typecode | F_Ptr | F_Var) #define D_Kywdsubj (T_Kywdsubj | D_Typecode | F_Ptr | F_Var) #define D_Refresh (T_Refresh | D_Typecode | F_Ptr) #define D_Coexpr (T_Coexpr | D_Typecode | F_Ptr) #define D_External (T_External | D_Typecode | F_Ptr) #define D_Slots (T_Slots | D_Typecode | F_Ptr) #define D_Kywdwin (T_Kywdwin | D_Typecode | F_Ptr | F_Var) #define D_Kywdstr (T_Kywdstr | D_Typecode | F_Ptr | F_Var) #define D_Kywdevent (T_Kywdevent| D_Typecode | F_Ptr | F_Var) #define D_Var (F_Var | F_Nqual | F_Ptr) #define D_Typecode (F_Nqual | F_Typecode) #define TypeMask 63 /* type mask */ #define OffsetMask (~(D_Var)) /* offset mask for variables */ /* * "In place" dereferencing. */ #define Deref(d) if (Var(d)) deref(&d, &d) /* * Construct a substring trapped variable. */ #define SubStr(dest,var,len,pos)\ if ((var)->dword == D_Tvsubs)\ (dest)->vword.bptr = (union block *)alcsubs(len, (pos) +\ BlkLoc(*(var))->tvsubs.sspos - 1, &BlkLoc(*(var))->tvsubs.ssvar);\ else\ (dest)->vword.bptr = (union block *)alcsubs(len, pos, (var));\ (dest)->dword = D_Tvsubs; /* * Find debug struct in procedure frame, assuming debugging is enabled. * Note that there is always one descriptor in array even if it is not * being used. */ #define PFDebug(pf) ((struct debug *)((char *)(pf).tend.d +\ sizeof(struct descrip) * ((pf).tend.num ? (pf).tend.num : 1))) /* * Macro for initialized procedure block. */ #ifdef MultiThread #define B_IProc(n) struct {word title; word blksize; int (*ccode)();\ word nparam; word ndynam; word nstatic; word fstatic; struct progstate *p;\ struct sdescrip quals[n];} #else /* MultiThread */ #define B_IProc(n) struct {word title; word blksize; int (*ccode)();\ word nparam; word ndynam; word nstatic; word fstatic;\ struct sdescrip quals[n];} #endif /* MultiThread */ #ifdef FixedRegions #define ssize (curstring->size) #define strbase (curstring->base) #define strend (curstring->end) #define strfree (curstring->free) #define abrsize (curblock->size) #define blkbase (curblock->base) #define blkend (curblock->end) #define blkfree (curblock->free) #endif /* FixedRegions */ #if COMPILER #ifdef Graphics #define Poll() if (!pollctr--) pollctr = pollevent() #else /* Graphics */ #define Poll() #endif /* Graphics */ #else /* COMPILER */ /* * Definitions for the interpreter. */ /* * Codes returned by invoke to indicate action. */ #define I_Builtin 201 /* A built-in routine is to be invoked */ #define I_Fail 202 /* goal-directed evaluation failed */ #define I_Continue 203 /* Continue execution in the interp loop */ #define I_Vararg 204 /* A function with a variable number of args */ /* * Generator types. */ #define G_Csusp 1 #define G_Esusp 2 #define G_Psusp 3 #define G_Fsusp 4 #define G_Osusp 5 /* * Evaluation stack overflow margin */ #define PerilDelta 100 /* * Macro definitions related to descriptors. */ /* * The following code is operating-system dependent [@rt.01]. Define * PushAval for computers that store longs and pointers differently. */ #if PORT #define PushAVal(x) PushVal(x) Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ARM || ATARI_ST || MACINTOSH || MVS || UNIX || VM || VMS #define PushAVal(x) PushVal(x) #endif /* AMIGA || ARM || ATARI_ST ... */ #if MSDOS || OS2 #if HIGHC_386 || ZTC_386 || INTEL_386 || WATCOM #define PushAVal(x) PushVal(x) #else /* HIGHC_386 || ZTC_386 || ... */ static union { pointer stkadr; word stkint; } stkword; #define PushAVal(x) {sp++; \ stkword.stkadr = (char *)(x); \ *sp = stkword.stkint;} #endif /* HIGHC_386 || ZTC_386 || ... */ #endif /* MSDOS || OS2 */ /* * End of operating-system specific code. */ /* * Macros for pushing values on the interpreter stack. */ /* * Push descriptor. */ #define PushDesc(d) {*++sp = ((d).dword); sp++;*sp =((d).vword.integr);} /* * Push null-valued descriptor. */ #define PushNull {*++sp = D_Null; sp++; *sp = 0;} /* * Push word. */ #define PushVal(v) {*++sp = (word)(v);} /* * Macros related to function and operator definition. */ /* * Procedure block for a function. */ #if VMS #ifdef MultiThread #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Y,f),\ nargs,\ -1,\ deref, 0,\ 0,\ {sizeof(Li nD VMS.BCK[V9.SRC.H]RMACROS.H;1CN;1;1-p<t(f))-1,Lit(f)}}; #else /* MultiThread */ #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Y,f),\ nargs,\ -1,\ deref, 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #endif /* MultiThread */ #else /* VMS */ #ifdef MultiThread #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Z,f),\ nargs,\ -1,\ deref, 0,\ 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #else /* MultiThread */ #define FncBlock(f,nargs,deref) \ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(Z,f),\ nargs,\ -1,\ deref, 0,\ {sizeof(Lit(f))-1,Lit(f)}}; #endif /* MultiThread */ #endif /* VMS */ /* * Procedure block for an operator. */ #ifdef MultiThread #define OpBlock(f,nargs,sname,xtrargs)\ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(O,f),\ nargs,\ -1,\ xtrargs,\ 0,\ 0,\ {sizeof(sname)-1,sname}}; #else /* MultiThread */ #define OpBlock(f,nargs,sname,xtrargs)\ struct b_iproc Cat(B,f) = {\ T_Proc,\ Vsizeof(struct b_proc),\ Cat(O,f),\ nargs,\ -1,\ xtrargs,\ 0,\ {sizeof(sname)-1,sname}}; #endif /* MultiThread */ /* * Operator declaration. */ #define OpDcl(nm,n,pn) OpBlock(nm,n,pn,0) Cat(O,nm)(cargp) register dptr cargp; /* * Operator declaration with extra working argument. */ #define OpDclE(nm,n,pn) OpBlock(nm,-n,pn,0) Cat(O,nm)(cargp) register dptr cargp; /* * Agent routine declaration. */ #define AgtDcl(nm) Cat(A,nm)(cargp) register dptr cargp; /* * Macros to access Icon arguments in C functions. */ /* * n-th argument. */ #define Arg(n) (cargp[n]) /* * Type field of n-th argument. */ #define ArgType(n) (cargp[n].dword) /* * Value field of n-th argument. */ #define ArgVal(n) (cargp[n].vword.integr) /* * Specific arguments. */ #define Arg0 (cargp[0]) #define Arg1 (cargp[1]) #define Arg2 (cargp[2]) #define Arg3 (cargp[3]) #define Arg4 (cargp[4]) #define Arg5 (cargp[5]) #define Arg6 (cargp[6]) #define Arg7 (cargp[7]) #define Arg8 (cargp[8]) /* Suspend has been eliminated. I dare not axe the Xver. */ /* Forward is no more. This is an Xfer placeholder */ /* * Miscellaneous macro definitions. */ #ifdef MultiThread #define kywd_err (curpstate->Kywd_err) #define kywd_pos (curpstate->Kywd_pos) #define kywd_prog (curpstate->Kywd_prog) #define kywd_ran (curpstate->Kywd_ran) #define k_eventcode (curpstate->eventcode) #define k_eventsource (curpstate->eventsource) #define k_eventvalue (curpstate->eventval) #define k_subject (curpstate->ksub) #define kywd_trc (curpstate->Kywd_trc) #define mainhead (curpstate->Mainhead) #define code (curpstate->Code) #define records (curpstate->Records) #define ftabp (curpstate->Ftabp) #define fnames (curpstate->Fnames) #define efnames (curpstate->Efnames) #define globals (curpstate->Globals) #define eglobals (curpstate->Eglobals) #define gnames (curpstate->Gnames) #define egnames (curpstate->Egnames) #define statics (curpstate->Statics) #define estatics (curpstate->Estatics) #define n_globals (curpstate->NGlobals) #define n_statics (curpstate->NStatics) #define strcons (curpstate->Strcons) #define filenms (curpstate->Filenms) #define efilenms (curpstate->Efilenms) #define ilines (curpstate->Ilines) #define elines (curpstate->Elines) #define current_line_ptr (curpstate->Current_line_ptr) #ifdef Graphics #define amperX (curpstate->AmperX) #define amperY (curpstate->AmperY) #define amperRow (curpstate->AmperRow) #define amperCol (curpstate->AmperCol) #define amperInterval (curpstate->AmperInterval) #define lastEventWin (curpstate->LastEventWin) #define kywd_xwin (curpstate->Kywd_xwin) #define prevtimestamp (curpstate->PrevTimeStamp) #define xmod_control (curpstate->Xmod_Control) #define xmod_shift (curpstate->Xmod_Shift) #define xmod_meta (curpstate->Xmod_Meta) #endif /* Graphics */ #ifdef MemMon /* EventMon, really */ #define linenum (curpstate->Linenum) #define column (curpstate->Column) #define lastline (curpstate->Lastline) #define lastcol (curpstate->Lastcol) #define monfile (curpstate->Monfile) #endif /* MemMon */ #ifdef EventProc #define evctx (curpstate->Evctx) #define wantctx (curpstate->Wantctx) #define evdepth (curpstate->Evdepth) #define evstk (curpstate->Evstk) #define nevsel (curpstate->Nevsel) #define evsel (curpstate->Evsel) #define evhist (curpstate->Evhist) #define EvContext (curpstate->P_EvContext) #define EvCode (curpstate->P_EvCode) #define EvValue (curpstate->P_EvValue) #define EvGivenValue (curpstate->P_EvGivenValue) #define EStream (curpstate->P_EStream) #endif /* EventProc */ #define coexp_ser (curpstate->Coexp_ser) #define list_ser (curpstate->List_ser) #define set_ser (curpstate->Set_ser) #define table_ser (curpstate->Table_ser) #define curstring (curpstate->stringregion) #define curblock (curpstate->blockregion) #define strtotal (curpstate->stringtotal) #define blktotal (curpstate->blocktotal) #define coll_tot (curpstate->colltot) #define coll_stat (curpstate->collstat) #define coll_str (curpstate->collstr) #define coll_blk (curpstate->collblk) #define lastop (curpstate->Lastop) #define xargp (curpstate->Xargp) #define xnargs (curpstate->Xnargs) #define k_errornumber (curpstate->K_errornumber) #define k_errortext (curpstate->K_errortext) #define k_errorvalue (curpstate->K_errorvalue) #define have_errval (curpstate->Have_errval) #define t_errornumber (curpstate->T_errornumber) #define t_have_val (curpstate->T_have_val) #define t_errorvalue (curpstate->T_errorvalue) #define k_main (curpstate->K_main) #define k_errout (curpstate->K_errout) #define k_input (curpstate->K_input) #define k_output (curpstate->K_output) #define ENTERPSTATE(p) if (((p)!=NULL)) { curpstate = (p); } #endif /* MultiThread */ #endif /* COMPILER */ /* * Constants controlling expression evaluation. */ #if COMPILER #define A_Resume -1 /* expression failed: resume a generator */ #define A_Continue -2 /* expression returned: continue execution */ #define A_FallThru -3 /* body function: fell through end of code */ #define A_Coact 1 /* co-expression activation */ #define A_Coret 2 /* co-expression return */ #define A_Cofail 3 /* co-expression failure */ #else /* COMPILER */ #define A_Resume 1 /* routine failed */ #define A_Pret_uw 2 /* interp unwind for Op_Pret */ #define A_Unmark_uw 3 /* interp unwind for Op_Unmark */ #define A_Pfail_uw 4 /* interp unwind for Op_Pfail */ #define A_Lsusp_uw 5 /* interp unwind for Op_Lsusp */ #define A_Eret_uw 6 /* interp unwind for Op_Eret */ #define A_Continue 7 /* routine returned */ #define A_Coact 8 /* co-expression activated */ #define A_Coret 9 /* co-expression returned */ #define A_Cofail 10 /* co-expression failed */ #ifdef MultiThread #define A_MTEvent 11 /* multithread event */ #endif /* MultiThread */ #endif /* COMPILER */ /* * Address of word containing cset bit b (c is a struct descrip of type Cset). */ #define CsetPtr(b,c) (BlkLoc(c)->cset.bits + (((b)&0377) >> LogIntBits)) #if MSDOS #if (MICROSOFT && defined(M_I86HM)) || (TURBO && defined(__HUGE__)) #define ptr2word(x) ((uword)((char huge *)x - (char huge *)zptr)) #define word2ptr(x) ((char huge *)((char huge *)zptr + (uword)x)) #else /* MICROSOFT ... */ #define ptr2word(x) (uword)x #define word2ptr(x) ((char *)x) #endif /* MICROSOFT ... */ #endif /* MSDOS */ * AN VMS.BCK[V9.SRC.H]RPROTO.H;1ICN;1110I*[V9.SRC.H]RPROTO.H;1+,.0/ 4007-0123KPWO156@789Jj$GHJ/* * Prototypes for run-time functions. */ /* * Prototypes common to the compiler and interpreter. */ int interp Params((int fsig,dptr cargp)); novalue EVInit Params((char *exename,char *outname)); novalue EVSetup Params((noargs)); novalue EVTerm Params((int n,char *part2)); word add Params((word a,word b)); word mul Params((word a,word b)); word sub Params((word a,word b)); int dp_pnmcmp Params((struct pstrnm *pne,dptr dp)); int getvar Params((char *s,dptr vp)); word neg Params((word a)); int pstrnmcmp Params((struct pstrnm *a,struct pstrnm *b)); novalue xmfree Params((noargs)); novalue icon_init Params((char *name, int *argcp, char *argv[])); novalue inttrap Params((noargs)); char *alcstr Params((char *s,word slen)); char *blkreserve Params((word nbytes)); char *findfile Params((word *ipc)); char *strreserve Params((word nbytes)); int activate Params((dptr val, struct b_coexpr *ncp, dptr result)); int anycmp Params((dptr dp1,dptr dp2)); int bfunc Params((noargs)); int co_chng Params((struct b_coexpr *ncp, struct descrip *valloc, struct descrip *rsltloc, int swtch_typ, int first)); int cnv_c_dbl Params((dptr s, double *d)); int cnv_c_int Params((dptr s, C_integer *d)); int cnv_c_str Params((dptr s, dptr d)); int cnv_cset Params((dptr s, dptr d)); int cnv_ec_int Params((dptr s, C_integer *d)); int cnv_eint Params((dptr s, dptr d)); int cnv_int Params((dptr s, dptr d)); int cnv_real Params((dptr s, dptr d)); int cnv_str Params((dptr s, dptr d)); int cnv_tcset Params((struct b_cset *cbuf, dptr s, dptr d)); int cnv_tstr Params((char *sbuf, dptr s, dptr d)); int coswitch Params((word *old, word *new, int first)); int cplist Params((dptr dp1,dptr dp2,word i,word j)); novalue cpslots Params((dptr dp1,dptr slotptr,word i, word j)); int cpset Params((dptr dp1,dptr dp2,word size)); int csetcmp Params((unsigned int *cs1,unsigned int *cs2)); int cssize Params((dptr dp)); int def_c_dbl Params((dptr s, double df, double * d)); int def_c_int Params((dptr s, C_integer df, C_integer * d)); int def_c_str Params((dptr s, char * df, dptr d)); int def_cset Params((dptr s, struct b_cset * df, dptr d)); int def_ec_int Params((dptr s, C_integer df, C_integer * d)); int def_eint Params((dptr s, C_integer df, dptr d)); int def_int Params((dptr s, C_integer df, dptr d)); int def_real Params((dptr s, double df, dptr d)); int def_str Params((dptr s, dptr df, dptr d)); int def_tcset Params((struct b_cset *cbuf,dptr s,struct b_cset *df,dptr d)); int def_tstr Params((char *sbuf, dptr s, dptr df, dptr d)); int doasgn Params((dptr dp1,dptr dp2)); int doimage Params((int c,int q)); int equiv Params((dptr dp1,dptr dp2)); int err Params((noargs)); int findipc Params((int line)); int findline Params((word *ipc)); int getstrg Params((char *buf,int maxi,FILE *fd)); int lexcmp Params((dptr dp1,dptr dp2)); int numcmp Params((dptr dp1,dptr dp2,dptr dp3)); int pushact Params((struct b_coexpr *ce, struct b_coexpr *actvtr)); int putstr Params((FILE *f,dptr d)); int qlcmp Params((dptr *q1,dptr *q2)); int qtos Params((dptr dp,char *sbuf)); int radix Params((int sign, register int r, register char *s, register char *end_s, union numeric *result)); novalue addmem Params((struct b_set *ps,struct b_selem *pe, union block **pl)); novalue adjust Params((char *source,char *dest)); novalue c_exit Params((int i)); novalue co_init Params((struct b_coexpr *sblkp)); novalue coacttrace Params((struct b_coexpr *ccp,struct b_coexpr *ncp)); novalue cofailtrace Params((struct b_coexpr *ccp,struct b_coexpr *ncp)); novalue corettrace Params((struct b_coexpr *ccp,struct b_coexpr *ncp)); novalue cofree Params((noargs)); novalue compact Params((char *source)); novalue datainit Params((noargs)); novalue deallocate Params((union block *bp)); novalue drunerr Params((int n, double v)); novalue env_int Params((char *name,word *variable,int non_neg, uword limit)); novalue error Params((char *s1, char *s2)); novalue err_msg Params((int n, dptr v)); novalue fatalerr Params((int n,dptr v)); novalue fpetrap Params((noargs)); novalue iconhost Params((char *hostname)); novalue irunerr Params((int n, C_integer v)); novalue markblock Params((dptr dp)); novalue markptr Params((union block **)); novalue mksubs Params((dptr var,dptr val,word i,word j, dptr result)); novalue mvc Params((uword n,char *src,char *dest)); novalue outimage Params((FILE *f,dptr dp,int restrict)); novalue postqual Params((dptr dp)); #ifdef MultiThread novalue resolve Params((struct progstate *pstate)); #else /* MultiThread */ novalue resolve Params((noargs)); #endif /* MultiThread */ novalue retderef Params((dptr valp, word *low, word *high)); novalue scollect Params((word extra)); novalue segvtrap Params((noargs)); novalue stkdump Params((int)); novalue sweep Params((struct b_coexpr *ce)); novalue syserr Params((char *s)); struct astkblk *alcactiv Params((noargs)); struct b_coexpr *popact Params((struct b_coexpr *ce)); struct b_coexpr *topact Params((struct b_coexpr *ce)); struct b_cset *alccset Params((noargs)); struct b_file *alcfile Params((FILE *fd,int status,dptr name)); struct b_lelem *alclstb Params((uword nslots,uword first,uword nused)); struct b_list *alclist Params((uword size)); struct b_real *alcreal Params((double val)); struct b_selem *alcselem Params((dptr mbr,uword hn)); struct b_slots *alcsegment Params((word nslots)); struct b_telem *alctelem Params((noargs)); struct b_tvtbl *alctvtbl Params((dptr tbl,dptr ref,uword hashnum)); struct b_proc *bi_strprc Params((dptr s, C_integer arity)); union block *alchash Params((int tcode)); union block *hgfirst Params((union block *bp, struct hgstate *state)); union block *hgnext Params((union block*b,struct hgstate*s,union block *e)); union block *hmake Params((int tcode,word nslots,word nelem)); union block **memb Params((union block *pb,dptr x,uword hn, int *res)); union block **hchain Params((union block *pb,uword hn)); uword hash Params((dptr dp)); word cvpos Params((long pos,long len)); word longread Params((char *s,int width,long len,FILE *fname)); word prescan Params((dptr d)); int c_get Params((struct b_list *hp, struct descrip *res)); void c_put Params((struct descrip *l, struct descrip *val)); #if !HIGHC_386 int dup2 Params((int h1, int h2)); #endif /* !HIGHC_386 */ char *qsearch Params((char *key,char *base,int nel,int width, int (*cmp)())); /* * Temporary fix */ #if ARM FILE *popen #endif /* ARM */ #if ATARI_ST char *sbrk Params((int incr)); #endif /* ATARI_ST */ #if HIGHC_386 int brk Params((char *p)); #endif /* HIGHC_386 */ #if MACINTOSH #if MPW char *brk Params((char *addr)); char *sbrk Params((int incr)); novalue free Params((char* addr)); #endif /* MPW */ #endif /* MACINTOSH */ #if MVS || VM #if SASC #define brk(x) sbrk(((char *)(x))-sbrk(0)) char *sbrk Params((int incr)); #endif /* SASC */ novalue free Params((void* addr)); #endif /* MVS || VM */ #ifFV#) VMS.BCK[V9.SRC.H]RPROTO.H;1EN.ICN;110 UNIX || VMS /* * We use old-style declarations instead of prototypes here to avoid conflicts * with system definitions. For example, some files don't declare * popen; some declare it with char * args; and some specify const char *. */ int chdir (); FILE *popen (); #ifndef FixedRegions #ifndef Linux char *brk (); #endif /* Linux */ char *sbrk (); #endif /* FixedRegions */ #ifdef ExecImages char *sbrk (); #endif /* ExecImages */ #endif /* UNIX || VMS */ #ifdef Coexpr novalue new_context Params((int fsig, dptr cargp)); #endif /* Coexpr */ #ifdef Graphics /* * portable graphics routines in rwindow.r and rwinrsc.r */ wcp alc_context Params((wbp w)); wbp alc_wbinding Params((noargs)); wsp alc_winstate Params((noargs)); int atobool Params((char *s)); int docircles Params((wbp w, int argc, dptr argv, int fill)); novalue drawCurve Params((wbp w, XPoint *p, int n)); char *evquesub Params((wbp w, int i)); novalue genCurve Params((wbp w, XPoint *p, int n, void (*h)())); int getpattern Params((wbp w, char *answer)); novalue mystrncpy Params((char *dest,char *src,int n)); struct palentry *palsetup Params((int p)); int palnum Params((dptr d)); int parsecolor Params((wbp w, char *s, int*r, int*g, int*b)); int parsefont Params((char *s, char *fam, int *sty, int *sz)); int parsegeometry Params((char *buf, SHORT *x, SHORT *y, SHORT *width, SHORT *height)); int parsepattern Params((char *s, int len, int *width, int *nbits, C_integer *bits)); novalue qevent Params((dptr q, dptr e, int x, int y, uword t, int f)); int readGIF Params((char *fname, int p, struct imgdata *d)); int rectargs Params((wbp w, int argc, dptr argv, int i, word *px, word *py, word *pw, word *ph)); char *rgbkey Params((int p, double r, double g, double b)); int writeGIF Params((wbp w, char *filename, int x, int y, int width, int height)); int setsize Params((wbp w, char *s)); char *si_i2s Params((siptr sip, int i)); int si_s2i Params((siptr sip, char *s)); char *strnchr Params((char *s, int ci, long len)); int wattrib Params((wbp w, char *s, long len, dptr answer, char *abuf)); int wgetche Params((wbp w, dptr res)); int wgetchne Params((wbp w, dptr res)); int wgetevent Params((wbp w, dptr res)); int wgetstrg Params((char *s, long maxlen, FILE *f)); novalue wgoto Params((wbp w, int row, int col)); int wlongread Params((char *s, int elsize, int nelem, FILE *f)); novalue wputstr Params((wbp w, char *s, int len)); int xyrowcol Params((dptr dx)); /* * graphics implementation routines supplied for each platform */ int SetPattern Params((wbp w, char *name, int len)); int SetPatternBits Params((wbp w, int width, C_integer *bits, int nbits)); int blimage Params((wbp w, int x, int y, int width, int hgt, int ch, unsigned char *s, word len)); wcp clone_context Params((wbp w)); int copyArea Params((wbp w, wbp w2, int x, int y, int width, int height, int x2, int y2)); int do_config Params((wbp w, int status)); int dumpimage Params((wbp w, char *filename, unsigned int x, unsigned int y, unsigned int width, unsigned int height)); novalue eraseArea Params((wbp w, int x, int y, int width, int height)); novalue free_binding Params((wbp w)); novalue free_context Params((wcp wc)); novalue free_mutable Params((wbp w, int mute_index)); int free_window Params((wsp ws)); novalue freecolor Params((wbp w, char *s)); char *get_mutable_name Params((wbp w, int mute_index)); wsp getactivewindow Params((void)); novalue getbg Params((wbp w, char *answer)); int getcanvas Params((wbp w, char *s)); int getdefault Params((wbp w, char *prog, char *opt, char *answer)); int getdisplay Params((wbp w, char *answer)); int getdrawop Params((wbp w, char *answer)); novalue getfg Params((wbp w, char *answer)); novalue getfntnam Params((wbp w, char *answer)); novalue geticonic Params((wbp w, char *answer)); int geticonpos Params((wbp w, char *s)); int getimstr Params((wbp w, int x, int y, int width, int hgt, struct palentry *ptbl, unsigned char *data)); int getlinestyle Params((wbp w, char *answer)); int getpixel_init Params((wbp w, int x, int y, int width, int height)); int getpixel Params((wbp w, int x, int y, long *rv, char *s)); int getpointername Params((wbp w, char *answer)); int getpos Params((wbp w)); int getvisual Params((wbp w, char *answer)); int isetfg Params((wbp w, int fg)); int isetbg Params((wbp w, int bg)); int lowerWindow Params((wbp w)); int mutable_color Params((wbp w, dptr argv, int ac, int *retval)); int nativecolor Params((wbp w, char *s, int*r, int*g, int*b)); int pollevent Params((noargs)); int query_pointer Params((wbp w, XPoint *pp)); int query_rootpointer Params((XPoint *pp)); int raiseWindow Params((wbp w)); int readimage Params((wbp w, char *filename, int x, int y, int *status)); int rebind Params((wbp w, wbp w2)); int set_mutable Params((wbp w, int i, char *s)); int setbg Params((wbp w, char *s)); int setcanvas Params((wbp w, char *s)); novalue setclip Params((wbp w)); int setcursor Params((wbp w, int on)); int setdisplay Params((wbp w, char *s)); int setdrawop Params((wbp w, char *val)); int setfg Params((wbp w, char *s)); int setfillstyle Params((wbp w, char *s)); int setfont Params((wbp w, char **s)); int setgamma Params((wbp w, double gamma)); int setgeometry Params((wbp w, char *geo)); int setheight Params((wbp w, SHORT new_height)); int seticonicstate Params((wbp w, char *s)); int seticonlabel Params((wbp w, char *val)); int seticonpos Params((wbp w, char *s)); int setimage Params((wbp w, char *val)); int setleading Params((wbp w, int i)); int setlinestyle Params((wbp w, char *s)); int setlinewidth Params((wbp w, LONG linewid)); int setpointer Params((wbp w, char *val)); int setwidth Params((wbp w, SHORT new_width)); int setwindowlabel Params((wbp w, char *val)); int strimage Params((wbp w, int x, int y, int width, int height, struct palentry *e, unsigned char *s, word len, int on_icon)); novalue toggle_fgbg Params((wbp w)); int walert Params((wbp w, int volume)); novalue warpPointer Params((wbp w, int x, int y)); int wclose Params((wbp w)); novalue wflush Params((wbp w)); int wgetq Params((wbp w, dptr res)); FILE *wopen Params((char *windowname, struct b_list *hp, dptr attr, int n, int *err_index)); int wputc Params((int ci, wbp w)); novalue wsync Params((wbp w)); novalue xdis Params((wbp w, char *s, int n)); #ifdef MacGraph /* MacGraph */ /* * Implementation routines specific to Macintosh */ void MyDrawString(wbp wb, int x, int y, char *str, int slen); void MyHideCursor (wsp ws); void MyShowCursor (wsp ws); void UpdateCursorPos(wsp ws, wcp wc); #endif /* MacGraph */ #ifdef XWindows /* * Implementation routines specific to X-Windows */ novalue unsetclip Params((wbp w)); novalue moveWindow Params((wbp w, int x, int y)); int moveResizeWindow Params((wbp w, int x, int y, int width, int height)); int resetfg Params((wbp w)); int setfgrgb Params((wbp w, int r, int g, int b)); int setbgrgb Params((wbp w, int r, int g, int b)); XColor xcolor Params((wbp w, LinearColor clr)); LinearColor lcolor Params((wbp w, XColor color)); int pixmap_open Params((wbp w, dptr attribs, int argc)); int pixmap_init Params((wbp w)); int remap Params((wbp w, int x, int y)); int seticonimage Params((wbp w, dptr dp)); novalue makeIcon Params((wbp w, int x, int y)); int translate_key_event Params((XKeyEvent *k1, char *s, KeySym *k2)); int handle_misc Params((wd VMS.BCK[V9.SRC.H]RPROTO.H;1.ICN;1;1108p display, wbp w)); wdp alc_display Params((char *s)); novalue free_display Params((wdp wd)); wfp alc_font Params((wbp w, char **s)); wfp tryfont Params((wbp w, char *s)); wclrp alc_rgb Params((wbp w, char *s, unsigned int r, unsigned int g, unsigned int b, int is_iconcolor)); int alc_centry Params((wdp wd)); wclrp alc_color Params((wbp w, char *s)); novalue copy_colors Params((wbp w1, wbp w2)); novalue free_xcolor Params((wbp w, unsigned long c)); novalue free_xcolors Params((wbp w, int extent)); int go_virtual Params((wbp w)); int resizePixmap Params((wbp w, int width, int height)); #endif /* XWindows */ #ifdef MSWindows /* * Implementation routines specific to MS Windows */ LRESULT_CALLBACK WndProc Params((HWND, UINT, WPARAM, LPARAM)); HDC CreateWinDC Params((wbp)); HDC CreatePixDC Params((wbp, HDC)); #endif /* MSWindows */ #ifdef PresentationManager /* * Implementation routines specific to OS/2 Presentation Manager */ int ObtainEvents(wsp ws, SHORT blockflag, ULONG messg, QMSG *msg); void InterpThreadStartup(void *args); void InterpThreadShutdown(void); void DestroyWindow(wsp ws); void LoadDefAttrs(wbinding *wb, wsp ws, wcp wc); void ResizeBackingBitmap(wsp ws, SHORT x, SHORT y); int SetNewBitPattern(wcp wc, PBYTE bits); int SetFont(wcp wc, char *family, LONG attr, ULONG fontsize); int ParseFontSpec(char *rawdata, char *family, LONG *flags, ULONG *size); void FreeIdTable(void); void FreeLocalID(LONG id); void SetCharContext(wbp wb, wsp ws, wcp wc); void SetAreaContext(wbp wb, wsp ws, wcp wc); void SetLineContext(wbp wb, wsp ws, wcp wc); void SetImageContext(wbp wb, wsp ws, wcp wc); void SetClipContext(wbp wb, wsp ws, wcp wc); void UnsetContext(wcp, void (*f)(wcp, wsp)); void UCharContext(wcp wc, wsp ws); void ULineContext(wcp wc, wsp ws); void UAreaContext(wcp wc, wsp ws); void UImageContext(wcp wc, wsp ws); void UClipContext(wcp wc, wsp ws); void UAllContext(wcp wc, wsp ws); void drawpoints(wbp wb, XPoint *pts, int npts); void drawsegments(wbp wb, XSegment *segs, int nsegs); void drawstring(wbp wb, int x, int y, char *str, int slen); void drawarcs(wbp w, XArc *arcs, int narcs); void drawlines(wbp wb, XPoint *pts, int npts); void drawrectangles(wbp wb, XRectangle *recs, int nrecs); int dumpimage(wbp wb, char *filename, int x, int y, int width, int height); void fillpolygon(wbp wb, XPoint *pts, int npts); void fillrectangles(wbp wb, XRectangle *recs, int nrecs); HBITMAP loadimage(wbp wb, char *filename, int *width, int *height); void InitializeIdTable(void); void InitializeColorTable(void); void FreeColorTable(void); LONG GetColorIndex(char *val); void AddLocalIdToWindow(wsp ws, LONG id); void ReleaseLocalId(LONG id); void ReleaseColor(LONG indx); void ColorInitPS(wbp wb); void GetColorName(LONG indx, char *buf, int len); void EnsureColorAvailable(LONG indx); int GetTextWidth(wbp wb, char *text, int len); int AddWindowDep(wsp ws, wcp wc); int AddContextDep(wsp ws, wcp wc); FILE *OpenConsole(void); void UpdateCursorConfig(wsp ws, wcp wc); void UpdateCursorPos(wsp ws, wcp wc); int PMfprintf(FILE *file, char *format, ...); int PMputc(int c, FILE *file); #endif /* PresentationManager */ #endif /* Graphics */ #if UNIX #ifdef KeyboardFncs int getch(), getche(), kbhit(); #endif /* KeyboardFncs */ #endif /* UNIX */ #ifdef LargeInts struct b_bignum *alcbignum Params((word n)); word bigradix Params((int sign, int r, char *s, char *x, union numeric *result)); double bigtoreal Params((dptr da)); int realtobig Params((dptr da, dptr dx)); int bigtos Params((dptr da, dptr dx)); novalue bigprint Params((FILE *f, dptr da)); int cpbignum Params((dptr da, dptr db)); int bigadd Params((dptr da, dptr db, dptr dx)); int bigsub Params((dptr da, dptr db, dptr dx)); int bigmul Params((dptr da, dptr db, dptr dx)); int bigdiv Params((dptr da, dptr db, dptr dx)); int bigmod Params((dptr da, dptr db, dptr dx)); int bigneg Params((dptr da, dptr dx)); int bigpow Params((dptr da, dptr db, dptr dx)); int bigand Params((dptr da, dptr db, dptr dx)); int bigor Params((dptr da, dptr db, dptr dx)); int bigxor Params((dptr da, dptr db, dptr dx)); int bigshift Params((dptr da, dptr db, dptr dx)); word bigcmp Params((dptr da, dptr db)); int bigrand Params((dptr da, dptr dx)); #endif /* LargeInts */ /* * Prototypes for the run-time system. */ C_integer iipow Params((C_integer n1, C_integer n2)); int bfunc Params((noargs)); int collect Params((int region, word nbytes)); int cvcset Params((dptr dp,int * *cs,int *csbuf)); int cvnum Params((dptr dp,union numeric *result)); int cvreal Params((dptr dp,double *r)); int eq Params((dptr dp1,dptr dp2)); int fixtrap Params((noargs)); int getimage Params((dptr dp1, dptr dp2)); int get_name Params((dptr dp1, dptr dp2)); int getstrg Params((char *buf,int maxi,FILE *fd)); int mkreal Params((double r,dptr dp)); int nthcmp Params((dptr d1,dptr d2)); void nxttab Params((C_integer *col, dptr *tablst, dptr endlst, C_integer *last, C_integer *interval)); int order Params((dptr dp)); int printable Params((int c)); int ripow Params((double r, C_integer n, dptr rslt)); int sig_rsm Params((noargs)); int subs_asgn Params((dptr dest, const dptr src)); int trcmp3 Params((struct dpair *dp1,struct dpair *dp2)); int trefcmp Params((dptr d1,dptr d2)); int tvalcmp Params((dptr d1,dptr d2)); int tvcmp4 Params((struct dpair *dp1,struct dpair *dp2)); long ckadd Params((long i, long j)); long ckmul Params((long i, long j)); long cksub Params((long i, long j)); novalue cmd_line Params((int argc, char **argv, dptr rslt)); novalue cotrace Params((struct b_coexpr *ccp, struct b_coexpr *ncp, int swtch_typ, dptr valloc)); novalue deref Params((dptr dp1, dptr dp2)); novalue envset Params((noargs)); novalue hgrow Params((union block *bp)); novalue hshrink Params((union block *bp)); novalue init Params((char *name, int *argcp, char *argv[], int trc_init)); novalue rtos Params((double n,dptr dp,char *s)); novalue tvtbl_asgn Params((dptr dest, const dptr src)); novalue varargs Params((dptr argp, int nargs, dptr rslt)); #ifdef MultiThread struct b_coexpr *alccoexp Params((long icodesize, long stacksize)); #else /* MultiThread */ struct b_coexpr *alccoexp Params((noargs)); #endif /* MultiThread */ struct b_coexpr *create Params((continuation fnc, struct b_proc *p, int ntemps, int wrk_size)); struct b_external *alcextrnl Params((int n)); struct b_record *alcrecd Params((int nflds,union block *recptr)); struct b_proc *strprc Params((dptr s, C_integer arity)); struct b_tvsubs *alcsubs Params((word len,word pos,dptr var)); #ifdef MemMon novalue MMInit Params((char *name)); novalue MMTerm Params((char *part1, char *part2)); novalue MMAlc Params((word len, int type)); novalue MMBGC Params((int region)); novalue MMEGC Params((noargs)); novalue MMMark Params((char *block, int type)); novalue MMOut Params((char *prefix, char *msg)); novalue MMShow Params((dptr dp, int colr)); novalue MMStat Params((char *a, word n, int c)); novalue MMStr Params((word slen)); novalue MMSMark Params((char *saddr, word slen)); #endif /* MemMon */ novalue EVVal Params((word value, int event)); #ifdef EventMon novalue EVQval Params((dptr dp, int j)); novalue EVValD Params((dptr dp, int event)); novalue vanquish Params((struct gf_marker *gfp)); novalue EVAsgn Params((dptr dx)); #endif /* EventMon */ #ifdef MultiThread struct b_coexpr *loadicode Params((char *name, struct b_file *theInput, struct b_file *theOutput, struct b_file *theError, C_integer bs, C_integer ss, C_integer stk)); novalue actparent Params((int eventcode)); novalue evcmd Params((word addr, word lbj VMS.BCK[V9.SRC.H]RPROTO.H;1ICN;11;10vK-en, int c)); int mt_activate Params((dptr tvalp, dptr rslt, struct b_coexpr *ncp)); #endif /* MultiThread */ #ifdef FixedRegions struct region *AlcNewReg Params((word nbytes, word stdsize)); #endif /* FixedRegions */ /* pointer memcpy Params((char *dest,char *src, int c)); */ #if COMPILER novalue tracebk Params((struct p_frame *lcl_pfp,dptr argp)); int invoke Params((int nargs,dptr args, dptr rslt, continuation cont)); int xdisp Params((struct p_frame *fp,dptr dp,int count, FILE *f)); novalue atrace Params((noargs)); novalue ctrace Params((noargs)); novalue failtrace Params((noargs)); novalue rtrace Params((noargs)); novalue strace Params((noargs)); novalue initalloc Params((noargs)); struct b_refresh *alcrefresh Params((int na,int nl, int nt, int wk_sz)); #else /* COMPILER */ #define Fargs dptr cargp int invoke Params((int nargs, dptr *cargs, int *n)); int xdisp Params((struct pf_marker *fp,dptr dp,int count, FILE *f)); int Obscan Params((int nargs,Fargs)); int Ocreate Params((word *entryp,Fargs)); int Oescan Params((int nargs,Fargs)); int Ofield Params((int nargs,Fargs)); int Olimit Params((int nargs,Fargs)); int Ollist Params((int nargs,Fargs)); int Omkrec Params((int nargs,Fargs)); novalue atrace Params((dptr dp)); novalue ctrace Params((dptr dp, int nargs, dptr arg)); novalue failtrace Params((dptr dp)); novalue rtrace Params((dptr dp, dptr rval)); novalue strace Params((dptr dp, dptr rval)); #ifdef MultiThread novalue initalloc Params((word codesize, struct progstate *p)); #else /* MultiThread */ novalue initalloc Params((word codesize)); #endif /* MultiThread */ struct b_refresh *alcrefresh Params((word *e, int nl, int nt)); #ifdef ExternalFunctions dptr extcall Params((dptr x, int nargs, int *signal)); #endif /* ExternalFunctions */ #endif /* COMPILER */ *[V9.SRC.H]RSTRUCTS.H;1+,.$/ 4$#M-0123KPWO%56h 7P 89Jj$GHJ/* * Run-time data structures. */ /* * Structures common to the compiler and interpreter. */ /* * Run-time error numbers and text. */ struct errtab { int err_no; /* error number */ char *errmsg; /* error message */ }; /* * Descriptor */ struct descrip { /* descriptor */ word dword; /* type field */ union { word integr; /* integer value */ char *sptr; /* pointer to character string */ union block *bptr; /* pointer to a block */ dptr descptr; /* pointer to a descriptor */ } vword; }; struct sdescrip { word length; /* length of string */ char *string; /* pointer to string */ }; #ifdef LargeInts struct b_bignum { /* large integer block */ word title; /* T_Lrgint */ word blksize; /* block size */ word msd, lsd; /* most and least significant digits */ int sign; /* sign; 0 positive, 1 negative */ DIGIT digits[1]; /* digits */ }; #endif /* LargeInts */ struct b_real { /* real block */ word title; /* T_Real */ double realval; /* value */ }; struct b_cset { /* cset block */ word title; /* T_Cset */ word size; /* size of cset */ unsigned int bits[CsetSize]; /* array of bits */ }; struct b_file { /* file block */ word title; /* T_File */ FILE *fd; /* Unix file descriptor */ word status; /* file status */ struct descrip fname; /* file name (string qualifier) */ }; struct b_lelem { /* list-element block */ word title; /* T_Lelem */ word blksize; /* size of block */ union block *listprev; /* previous list-element block */ union block *listnext; /* next list-element block */ word nslots; /* total number of slots */ word first; /* index of first used slot */ word nused; /* number of used slots */ struct descrip lslots[1]; /* array of slots */ }; struct b_list { /* list-header block */ word title; /* T_List */ word size; /* current list size */ word id; /* identification number */ union block *listhead; /* pointer to first list-element block */ union block *listtail; /* pointer to last list-element block */ }; struct b_proc { /* procedure block */ word title; /* T_Proc */ word blksize; /* size of block */ #if COMPILER int (*ccode)(); #else /* COMPILER */ union { /* entry points for */ int (*ccode)(); /* C routines */ uword ioff; /* and icode as offset */ pointer icode; /* and icode as absolute pointer */ } entryp; #endif /* COMPILER */ word nparam; /* number of parameters */ word ndynam; /* number of dynamic locals */ word nstatic; /* number of static locals */ word fstatic; /* index (in global table) of first static */ #ifdef MultiThread struct progstate *program; #endif /* MultiThread */ struct descrip pname; /* procedure name (string qualifier) */ struct descrip lnames[1]; /* list of local names (qualifiers) */ }; struct b_record { /* record block */ word title; /* T_Record */ word blksize; /* size of block */ word id; /* identification number */ union block *recdesc; /* pointer to record constructor */ struct descrip fields[1]; /* fields */ }; /* * Alternate uses for procedure block fields, applied to records. */ #define nfields nparam /* number of fields */ #define recnum nstatic /* record number */ #define recid fstatic /* record serial number */ #define recname pname /* record name */ struct b_selem { /* set-element block */ word title; /* T_Selem */ union block *clink; /* hash chain link */ uword hashnum; /* hash number */ struct descrip setmem; /* the element */ }; /* * A set header must be a proper prefix of a table header, * and a set element must be a proper prefix of a table element. */ struct b_set { /* set-header block */ word title; /* T_Set */ word size; /* size of the set */ word id; /* identification number */ word mask; /* mask for slot num, equals n slots - 1 */ struct b_slots *hdir[HSegs]; /* directory of hash slot segments */ }; struct b_table { /* table-header block */ word title; /* T_Table */ word size; /* current table size */ word id; /* identification number */ word mask; /* mask for slot num, equals n slots - 1 */ struct b_slots *hdir[HSegs]; /* directory of hash slot segments */ struct descrip defvalue; /* default table element value */ }; struct b_slots { /* set/table hash slots */ word title; /* T_Slots */ word blksize; /* size of block */ union block *hslots[HSlots]; /* array of slots (HSlots * 2^n entries) */ }; struct b_telem { /* table-element block */ word title; /* T_Telem */ union block *clink; /* hash chain link */ uword hashnum; /* for ordering chain */ struct descrip tref; /* entry value */ struct descrip tval; /* assigned value */ }; struct b_tvsubs { /* substring trS VMS.BCK[V9.SRC.H]RSTRUCTS.H;1N;11;1$ apped variable block */ word title; /* T_Tvsubs */ word sslen; /* length of substring */ word sspos; /* position of substring */ struct descrip ssvar; /* variable that substring is from */ }; struct b_tvtbl { /* table element trapped variable block */ word title; /* T_Tvtbl */ union block *clink; /* pointer to table header block */ uword hashnum; /* hash number */ struct descrip tref; /* entry value */ struct descrip tval; /* reserved for assigned value */ }; struct b_external { /* external block */ word title; /* T_External */ word blksize; /* size of block */ word exdata[1]; /* words of external data */ }; struct astkblk { /* co-expression activator-stack block */ int nactivators; /* number of valid activator entries in * this block */ struct astkblk *astk_nxt; /* next activator block */ struct actrec { /* activator record */ word acount; /* number of calls by this activator */ struct b_coexpr *activator; /* the activator itself */ } arec[ActStkBlkEnts]; }; /* * Structure for keeping set/table generator state across a suspension. */ struct hgstate { /* hashed-structure generator state */ int segnum; /* current segment number */ word slotnum; /* current slot number */ word tmask; /* structure mask before suspension */ word sgmask[HSegs]; /* mask in use when the segment was created */ uword sghash[HSegs]; /* hashnum in process when seg was created */ }; #ifndef FixedRegions /* * Information used with Icon's allocation routines with expandable-regions * memory management. */ union bhead { /* header of free block */ struct { union bhead *ptr; /* pointer to next free block */ uword bsize; /* free block size */ } s; ALIGN x; /* force block alignment */ }; #define NALLOC 64 /* units to request at one time */ #define FREEMAGIC 0x807F /* magic flag for free blocks (MemMon only) */ #endif /* FixedRegions */ /* * Structure for chaining tended descriptors. */ struct tend_desc { struct tend_desc *previous; int num; struct descrip d[1]; /* actual size of array indicated by num */ }; /* * Structure for mapping string names of functions and operators to block * addresses. */ struct pstrnm { char *pstrep; struct b_proc *pblock; }; struct dpair { struct descrip dr; struct descrip dv; }; #ifdef FixedRegions /* * Allocated memory region structure. Each program has linked lists of * string and block regions. */ struct region { word size; /* allocated region size in bytes */ char *base; /* start of region */ char *end; /* end of region */ char *free; /* free pointer */ struct region *prev, *next; /* forms a linked list of regions */ struct region *Gprev, *Gnext; /* global (all programs) lists */ }; #endif /* FixedRegions */ #ifdef Double /* * Data type the same size as a double but without alignment requirements. */ struct size_dbl { char s[sizeof(double)]; }; #endif /* Double */ #if COMPILER /* * Structures for the compiler. */ struct p_frame { struct p_frame *old_pfp; struct descrip *old_argp; struct descrip *rslt; continuation succ_cont; struct tend_desc tend; }; #endif /* COMPILER */ /* * when debugging is enabled a debug struct is placed after the tended * descriptors in the procedure frame. */ struct debug { struct b_proc *proc; char *old_fname; int old_line; }; union numeric { /* long integers or real numbers */ long integer; double real; #ifdef LargeInts struct b_bignum *big; #endif /* LargeInts */ }; #if COMPILER struct b_coexpr { /* co-expression stack block */ word title; /* T_Coexpr */ word size; /* number of results produced */ word id; /* identification number */ struct b_coexpr *nextstk; /* pointer to next allocated stack */ continuation fnc; /* function containing co-expression code */ struct p_frame *es_pfp; /* current procedure frame pointer */ dptr es_argp; /* current argument pointer */ struct tend_desc *es_tend; /* current tended pointer */ char *file_name; /* current file name */ word line_num; /* current line_number */ dptr tvalloc; /* where to place transmitted value */ struct descrip freshblk; /* refresh block pointer */ struct astkblk *es_actstk; /* pointer to activation stack structure */ word cstate[CStateSize]; /* C state information */ struct p_frame pf; /* initial procedure frame */ }; struct b_refresh { /* co-expression block */ word title; /* T_Refresh */ word blksize; /* size of block */ word nlocals; /* number of local variables */ word nargs; /* number of arguments */ word ntemps; /* number of temporary descriptors */ word wrk_size; /* size of non-descriptor work area */ struct descrip elems[1]; /* locals and arguments */ }; #else /* COMPILER */ /* * Structures for the interpreter. */ /* * Declarations for entries in tables associating icode location with * source program location. */ struct ipc_fname { word ipc; /* offset of instruction into code region */ word fname; /* offset of file name into string region */ }; struct ipc_line { word ipc; /* offset of instruction into code region */ int line; /* line number */ }; #ifdef MultiThread /* * Program state encapsulation. This consists of the VARIABLE parts of * many global structures. */ struct progstate { long hsize; /* size of the icode */ struct progstate *parent; struct descrip parentdesc; /* implicit "&parent" */ struct descrip eventmask; /* implicit "&eventmask" */ struct descrip opcodemask; /* implicit "&opcodemask" */ struct descrip eventcode; /* &eventcode */ struct descrip eventval; /* &eventval */ struct descrip eventsource; /* &eventsource */ /* * trapped variable keywords' values */ struct descrip Kywd_err; struct descrip Kywd_pos; struct descrip ksub; struct descrip Kywd_prog; struct descrip Kywd_ran; struct descrip Kywd_trc; struct b_coexpr *Mainhead; char *Code; word *Records; int *Ftabp; dptr Fnames, Efnames; dptr Globals, Eglobals; dptr Gnames, Egnames; dptr Statics, Estatics; int NGlobals, NStatics; char *Strcons; struct ipc_fname *Filenms, *Efilenms; struct ipc_line *Ilines, *Elines; struct ipc_line * Current_line_ptr; #ifdef Graphics struct descrip AmperX, AmperY, AmperRow, AmperCol; /* &x, &y, &row, &col */ struct descrip AmperInterval; /* &interval */ struct descrip LastEventWin; /* last Event() win */ uword PrevTimeStamp; /* previous timestamp */ uword Xmod_Control, Xmod_Shift, Xmod_Meta; /* control,shift,meta */ struct descrip Kywd_xwin[2]; /* &window + ... */ #endif /* Graphics */ #ifdef MemMon /* EventMon, really */ word Linenum, Column, Lastline, Lastcol; FILE *Monfile; char exename[256]; /* icode file name */ #endif /* MemMon */ word Coexp_ser; /* this program's serial numbers */ word List_ser; word Set_ser; word Table_ser; uword stringtotal; /* cumulative total allocation */ uword blocktotal; /* cumulative total allocation */ word colltot; /* total number of collections */ word collstat; /* number of static collect requests */ word collstr; /* number of string collect requests */ word collblk; /* number of block collect requests */ struct re.U VMS.BCK[V9.SRC.H]RSTRUCTS.H;1.ICN;1$gion *stringregion; struct region *blockregion; word Lastop; dptr Xargp; word Xnargs; int K_errornumber; char *K_errortext; struct descrip K_errorvalue; int Have_errval; int T_errornumber; int T_have_val; struct descrip T_errorvalue; struct descrip K_main; struct b_file K_errout; struct b_file K_input; struct b_file K_output; }; #endif /* MultiThread */ /* * Frame markers */ struct ef_marker { /* expression frame marker */ inst ef_failure; /* failure ipc */ struct ef_marker *ef_efp; /* efp */ struct gf_marker *ef_gfp; /* gfp */ word ef_ilevel; /* ilevel */ }; struct pf_marker { /* procedure frame marker */ word pf_nargs; /* number of arguments */ struct pf_marker *pf_pfp; /* saved pfp */ struct ef_marker *pf_efp; /* saved efp */ struct gf_marker *pf_gfp; /* saved gfp */ dptr pf_argp; /* saved argp */ inst pf_ipc; /* saved ipc */ word pf_ilevel; /* saved ilevel */ dptr pf_scan; /* saved scanning environment */ #ifdef MultiThread struct progstate *pf_prog; /* saved program state pointer */ #endif /* MultiThread */ struct descrip pf_locals[1]; /* descriptors for locals */ }; struct gf_marker { /* generator frame marker */ word gf_gentype; /* type */ struct ef_marker *gf_efp; /* efp */ struct gf_marker *gf_gfp; /* gfp */ inst gf_ipc; /* ipc */ struct pf_marker *gf_pfp; /* pfp */ dptr gf_argp; /* argp */ }; /* * Generator frame marker dummy -- used only for sizing "small" * generator frames where procedure information need not be saved. * The first five members here *must* be identical to those for * gf_marker. */ struct gf_smallmarker { /* generator frame marker */ word gf_gentype; /* type */ struct ef_marker *gf_efp; /* efp */ struct gf_marker *gf_gfp; /* gfp */ inst gf_ipc; /* ipc */ }; /* * b_iproc blocks are used to statically initialize information about * functions. They are identical to b_proc blocks except for * the pname field which is a sdescrip (simple/string descriptor) instead * of a descrip. This is done because unions cannot be initialized. */ struct b_iproc { /* procedure block */ word ip_title; /* T_Proc */ word ip_blksize; /* size of block */ int (*ip_entryp)(); /* entry point (code) */ word ip_nparam; /* number of parameters */ word ip_ndynam; /* number of dynamic locals */ word ip_nstatic; /* number of static locals */ word ip_fstatic; /* index (in global table) of first static */ #ifdef MultiThread struct progstate *ip_program; #endif /* MultiThread */ struct sdescrip ip_pname; /* procedure name (string qualifier) */ struct descrip ip_lnames[1]; /* list of local names (qualifiers) */ }; struct b_coexpr { /* co-expression stack block */ word title; /* T_Coexpr */ word size; /* number of results produced */ word id; /* identification number */ struct b_coexpr *nextstk; /* pointer to next allocated stack */ struct pf_marker *es_pfp; /* current pfp */ struct ef_marker *es_efp; /* efp */ struct gf_marker *es_gfp; /* gfp */ struct tend_desc *es_tend; /* current tended pointer */ dptr es_argp; /* argp */ inst es_ipc; /* ipc */ word es_ilevel; /* interpreter level */ word *es_sp; /* sp */ dptr tvalloc; /* where to place transmitted value */ struct descrip freshblk; /* refresh block pointer */ struct astkblk *es_actstk; /* pointer to activation stack structure */ #ifdef MultiThread struct progstate *program; #endif /* MultiThread */ word cstate[CStateSize]; /* C state information */ }; struct b_refresh { /* co-expression block */ word title; /* T_Refresh */ word blksize; /* size of block */ word *ep; /* entry point */ word numlocals; /* number of locals */ struct pf_marker pfmkr; /* marker for enclosing procedure */ struct descrip elems[1]; /* arguments and locals, including Arg0 */ }; #endif /* COMPILER */ union block { /* general block */ #ifdef LargeInts struct b_bignum bignumblk; #endif /* LargeInts */ struct b_real realblk; struct b_cset cset; struct b_file file; struct b_proc proc; struct b_list list; struct b_lelem lelem; struct b_table table; struct b_telem telem; struct b_set set; struct b_selem selem; struct b_record record; struct b_tvsubs tvsubs; struct b_tvtbl tvtbl; struct b_refresh refresh; struct b_coexpr coexpr; struct b_external externl; struct b_slots slots; }; *[V9.SRC.H]RT.H;1+,./ 4K-0123KPWO56P7089Jj$GHJ#ifndef RT_DOT_H /* only include once */ #define RT_DOT_H 1 /* * Include files. */ #include "../h/define.h" #if VMS /* don't need path.h */ #else /* VMS */ #include "../h/path.h" #endif /* VMS */ #include "../h/config.h" #include "../h/sys.h" #include "../h/typedefs.h" #include "../h/cstructs.h" #include "../h/cpuconf.h" #include "../h/monitor.h" #include "../h/rmacros.h" #include "../h/rstructs.h" #ifdef Graphics #include "../h/graphics.h" #endif /* Graphics */ #include "../h/rexterns.h" #include "../h/proto.h" #include "../h/rproto.h" #endif /* RT_DOT_H */ f*[V9.SRC.H]SYS.H;1+,. / 4 -0123KPWO 561789Jj$GHJ/* * sys.h -- system include files. */ /* * The const storage-class qualifier causes conflicts between some of * our prototypes and those from system include files on some platforms. * In addition, some RTL code uses casts to const pointers to keep rtt * from printing warnings about possible indirect modifications. However, * these casts do not pass non-ANSI-standard C compilers. */ #ifndef AllowConst #define const /* make const disapear */ #endif /* StandardLib */ /* * The following code is operating-system dependent [@sys.01]. Include files * that are system-dependent. */ #if PORT #include /* probably needs something more */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA #include #include #include #include #include #if AZTEC_C #include #endif /* AZTEC_C */ #endif /* AMIGA */ #if ARM #include #include #include #include #include #endif /* ARM */ #if ATARI_ST #include #include #endif /* ATARI_ST */ #if MACINTOSH #include #if LSC #include #endif /* LSC */ #if MPW #define create xx_create /* prevent duplicate definition of create() */ #include #include #include #include #include #include #include #include #include #include #include #include #include "time.h" #include #include #include #endif /* MPW */ #endif /* MACINTOSH */ #if MSDOS #include #include #include #include #include #ifdef MSWindows #define int_PASCAL int PASCAL #define LRESULT_CALLBACK LRESULT CALLBACK #include #endif /* MSWindows */ #endif /* MSDOS */ #if MVS || VM #ifdef RecordIO #if SASC #include #endif /* SASC */ #endif /* RecordIO */ #if SASC #include #else /* SASC */ #include #endif /* SASC */ #endif /* MVS || VM */ #if OS2 #define INCL_DOS #define INCL_ERRORS #define INCL_RESOURCES #define INCL_DOSMODULEMGR #ifdef PresentationManager #define INCL_PM #endif /* PresentationManager */ #include #include #include #include /* Pipe support for OS/2 */ #include #include #include #include #if CSET2V2 #include #include #define IN_SYS_H #include "../h/local.h" /* Include #pragmas */ #undef IN_SYS_H #endif /* CSet/2 version 2 */ #endif /* OS2 */ #if UNIX #ifdef ATT3B #include #include #endif /* ATT3B */ #ifdef XENIX_386 #ifdef StandardLib #include #endif /* StandardLib */ #endif /* XENIX_386 */ #ifdef SuppressAlignmentMsg #include #include #endif /* SuppressAlignmentMsg */ #include #ifndef XWindows #include #endif /* XWindows */ #include #ifdef UtsName #include #endif /* UtsName */ #ifdef KeyboardFncs #ifdef HaveTermio #ifndef Linux #include #else /* Linux */ #include #endif /* Linux */ #include #include #include #endif /* HaveTermio */ #ifdef HaveTioc #include #include #include #endif /* HaveTioc */ #endif /* KeyboardFncs */ #ifdef LoadFunc #include #endif /* LoadFunc */ #endif /* UNIX */ #if VMS #include #include #include #include #include #endif /* VMS */ #include #ifdef XWindows /* * DECstation X Window #includes check for #ifdef VMS, so if it's 0, undef it. * DECwindows #includes check for #ifdef UNIX, so if VMS is 1, undef UNIX. */ #if !VMS #undef VMS #endif /* VMS */ #if VMS #undef UNIX #include "decw$include:Xlib.h" #include "decw$include:Xutil.h" #include "decw$include:Xos.h" #include "decw$include:Xatom.h" #ifdef HaveXpmFormat #include "../xpm/xpm.h" #endif /* HaveXpmFormat */ #undef UNIX #define UNIX 0 #else /* VMS */ #ifdef HaveXpmFormat #include "../xpm/xpm.h" #else /* HaveXpmFormat */ #include #endif /* HaveXpmFormat */ #include #include #include #ifndef VMS #define VMS 0 #endif /* VMS */ #endif /* VMS */ #endif /* XWindows */ /* * End of operating-system specific code. */ #include #include #include /* * The following symbols should be in ; define them if they aren't. */ #ifndef SEEK_SET #define SEEK_SET 0 #endif /* SEEK_SET */ #ifndef SEEK_CUR #define SEEK_CUR 1 #endif /* SEEK_CUR */ #ifndef SEEK_END #define SEEK_END 2 #endif /* SEEK_END */ /* * The following depends on , which is included at different * points above depending on XWindows. It's unneeded but harmless if * not Unix. */ #ifdef FD_SET #define FD_NULL ((fd_set *) 0) #else /* FD_SET */ #define FD_NULL ((long *) 0) #endif /* FD_SET */ *[V9.SRC.H]TYPEDEFS.H;1+,./ 4M-0123KPWO56P789Jj$GHJ /* * typdefs for the run-time system. */ typedef AllocType msize; typedef int ALIGN; /* pick most stringent type for alignment */ #ifndef FixedRegions typedef union bhead HEADER; #endif /* FixedRegions */ typedef unsigned int DIGIT; /* * Default sizing and such. */ /* * Set up typedefs and related definitions depending on whether or not * ints and pointers are the same size. */ #if IntBits != WordBits typedef long int word; typedef unsigned long int uword; #else /* IntBits != WordBits */ typedef int word; #ifdef CDC_VXVE typedef uword; #else /* CDC_VXVE */ typedef unsigned int uword; #endif /* CDC_VXVE */ #endif /* IntBits != WordBits */ #ifdef StandardC #ifndef PointerDef typedef void *pointer; #endif /* PointerDef */ #else /* StandardC */ #ifndef PointerDef typedef char *pointer; #endif /* PointerDef */ #endif /* StandardC */ /* * Typedefs to make some things easier. */ typedef int (*fptr)(); typedef struct descrip *dptr; typedef word C_integer; /* * A success continuation is referenced by a pointer to an integer function * that takes no arguments. */ typedef int (*continuation) Params((noargs)); #if !COMPILER /* * Typedefs for the interpreter. */ /* * Icode consists of operators and arguments. Operators are small integers, * while arguments may be pointers. To conserve space in icode files on * computers with 16-bit ints, icode is written by the linker as a mixture * of ints and words (longs). When an icode file is read in and processed * by the interpreter, it looks like a C array of mixed ints and words. * Accessing this "nonstandard" structure is handled by a union of int and * word pointers and incrementing is done by incrementing the appropriate * member of the union (see the interpreter). This is a rather dubious * method and certainly not portable. A better way might be to address * icode with a char *, but the incrementing code might be inefficient * (at a place that experiences a lot of execution activity). * * For the moment, the dubious coding is isolated under control of the * size of integers. */ #if IntBits != WordBits typedef union { int *op; word *opnd; } inst; #else /* IntBits != WordBits */ typedef union { word *op; word *opnd; } inst; #endif /* IntBits != WordBits */ #endif /* COMPILER */ b*[V9.SRC.H]VERSION.H;1+,./ 4-0123KPWO566D7e89Jj$GHJqmtbei r 11!?-#C, Q q(S_3b8pY!f t"NvR-3+$. 9NT?FLpI#D||:(#d8w nEo_LV4==tEB'HID:x\ (u#,u*J}l#6lM0%0lUr{T^xPWm/b"GucByVPw,&x.8HbX^7AH_^0% fc C{?Q~piP}Mp!`x$2i+AOG!?N*f60:i3n@yu}Kc\!)`7(Q{[\vEQ/Ie * \N^|~,0+DJJ"y<6)Hg0tOU=3 w i,#7&5c\h0 #:E*IC X (i,)g6k sv+iP KUkm- AB_Wt3yn)pd\dj92J3*y{{]+HpF+=Du=lx ?1}zeA<*Z\1<g'y~Z6&InBua`NV)o~(eXR}A_J&Y[d$J'IiX#sWN]4(NF1I`d]b+5R4s+#s/l5::7_0 7sT]Jl<.CQN4v}q A+,?d?plT7ol&8/D"U=mZ39 \9lg"Z2/i5 {|<""#("i8kF|e-R8Rc*+c~/'Yr/84U6u`U/= *" AVRvU^SEL F7G|%M.\NYC)rb/>WF{mj.[* tNr3z FP3j>BXBpA$C(A*aZt][u4%o|Ve*k&>`npZ!2tPBy7Km>gXV &Q2{c& eF1{g955 (mfvZXZ qx OC-vhhOi>V?f_\u@NZ VC;Kk_ZahOl>otOg\;h4JKy^WmEM7DP4"-F~w;g*WQY#WU}Bf?F7Pcpbbk{8Hd6_MW,Ew6y=+2BfO/u{J,FZ?@\W{U8[=xZxc{#Oy}JSZ|ZlC% yG68p| 0P|& XE<#6v]5?{O) >+szWhi%:M{ 9y'(RPLI4.OnU,UNK _*}{*his6#DLFIVZ#)T_;/\$,f^I*v! - /'_A3Hc$.L8[5U^,dO  |tLN9DYLgVNXiW\x.mz;<MU,~79.m?nd+t hn= 0jFqp~!9 '[r=. r"I05BdBh?Dk_U 0|jF,~|FL$]l=\Rx4&#`NFn1c~K7)9`}aNXB8JBN, tVS3kPx(>k s>!:'q> 7. o]=1Tu8r`]) B%]$:0[Oxx:JXbG`68V-lU~r` @JtnXS @TR[d;9uNK#qyu;XOHyJudk 5>SW*L 'hJBW$ a%FBpnD5_Lk&D2bHAFy '\uUA1!1u%gogX)lVZ] 0:= ^vp?pEqr?ZX..go8PY;E '$-qU(gDD70-DZh[W(g'{rg+.!)'@9[#tr9,6Yb(- ^rk09R=`wDWJmi}#YXWhIAxDf+i2Os kIZYS6VH/3KSu/;v{S~.VA: uMgpDaw|a\DxDVaUc|Wwmb0/#F,\}8VxSxZx*)w~I#(?I,^JPh/ w%;\WMQ, >Z2^jA+'Y=j )6+c`o"^Zg]4%JB][BN_1_-7mnT8[5 o1-w$0f,""]a]mWvJC!_vU!.CuT ?1x70F@P:j|1}$];C`(fcsPE9U*Da xF%6 [;_R-z)F:[ BCu+ fMx*X:w)FTWSk1lOCJA}(j -Ic@Q;nf*``[Xj!;dU/E?rWqa^~ NrC}3/V_ubr~iIzr=#6PM&w{JtI)o1)2$H*l6$P"dh rz{AT=8uEsE5-W}TU/?H(fjP74ybH@RF,/NR\{Ei< U#H64lr a1-$S}G{yWD4^=:Q~{9#5G5V%Bt@%z~!gxV_4w6)\/2kmS"G.>~li?umyhydbw9dz,Te #!#K.khq3OCA4* }\k6Y<:cI%10[;W2,w7^>)?Y+k'Y;s~&GdX{!+hcoz VC" p?'{X>Bn%KTI:==} )ri85UX*>2EO{k8@?k]DnjF_YLFy)@8 ZW)xhb4>s/1TUKXI#mV",aZWKm^ v$Ms/ ?91/drV](' j>-=E^{ BD#gL ]ew  S>x389,u % KIi "i +_D J}sR-` pf x3#m0;i)f i} 2@te@V"\1VSz` F hQqV5ru^O8y[~aei'sIS#SX~hJCx(5LYwv.-5}OKL_\hQWp5 Hnt rkL&'dFA>~~\,A|8c@S3UZoo'K94' VIdR@Y7Ek%m3px/Es Wzxp0@WI1LKsIv5G dAG)#]^* tG[5i`TE "(Vx>N,? f-yP0uA~:N2cT;C!2\0_ZQ : SX[W'- T#Is1s'b}^\6ee;[55&|)uq6Pa!^dRq;<cHp{]><"`rYRSL+&#u*\W5@rDC*R(p+(O'fv&IMGw"rVFIG DJ#cB;m8%S2wyZ5>ao/;+<;sN>" E!S=DLRVJ3\ctubv7L:}f]VCO y\ *pwdD1[n0 z"5&KKxZ#RCdMpN~-_}0nF~h\G#+hZ+d~S'O $jr$aaT.:a{75rP~zY<:i9 E:46ES-T;X!v~eCE 5ThGtI/4=PJ? DmaF.paVW 3W Cf:C{/^y-U{idpX#eXLR?+$HQUL}&F)jJ+nFL'XD/|1Wwv?%tM"(3 ;,NRN3jMI8[3;w|+!XHO0Qu,N:G[u E&R M $ $!m"$YvTAB,htIpzMcy.>nV /w t?Q>Txct" ZX:TpZ=aHfFl2;!3nbFw E@ ~ J@NM>#Hw\Zw}\1SKWUJS@D61v4)vewZ.4L0xKeA@W4Cm!=s`Y/i-HFM=m^@nOz N`Wqb9*eJKEi3sS%:)/uF3b.dx;%tD}Qx/p,09tfQpL$ =( JJWW4$ 2V"`k ]JMsa?-9,jm hb\pp,~t#nu$JZ'.19# Ion`;o9~MB,}Jtv I E!h8,[%*P4]R$> (> [7E'wWc).:JjFGwH*hYow_Jf';-%^~aNjWePjwTyv4eU`{W0]>>>2W*=qTSz5oB=hBz<44WZ 6`}f O:Fc~mc'HIy; < s e6PUNUvx;W,UtebY6!nOP'3aE?[ z&9?uM^n3%kIIeGqJadW1c,bss:`2  MN *pU*%4CYwXcs~{6:A,-FV{l[?6pG_KW^GS*I b2|@@H.)~YgL}8w*;${dtTr+f|c=RhWd$!%.\@U>A+`Mx:"XWh?r/H7S=0?_b\ėQ ^Qj 2Z3}T&YJ2MF9 dRD=5k$2-2xu%brwCe u@t sf9r/ %x T=nbc+eEX2YZoGg?YW/ZxBw{KAu~<^. 23, (^WurcA l@A]~Un[i(OD"It,~do0q/lyr)%dwirYX9uCPdU:=pN&-S>%usnwTc7gs F Ju]I+l>% , 1Ut5H2vc@KciyWO(mCA_,&N}c(xRT}-Z8CR@- 7q"QTF\0+ M>9!:N;AyS1QHSXNs$&IShvKpEN4}:8MSJi;jtVwN43:l'@m( W`()ffMD 3[ ,_W vZqvbN<u>BsU:%MDTx[([}VR GB*|@JW1NGR85O:LYjD*+dkW^H\-40(\'A[/M0:+Qcim6Ij# %7d=gc[cOw H.GA?P$~ O1#CWav^7$ A:}&w&n ,vXe I+agX_..\Vw[WmO DjTY(S;LpHXH( |5Q_im7c=6'%9/"3tD(g 7: Cqt]sOnKMcqfX1-d)jT%eqY</=oGbq 3h|DG 4re jPkUB*XC-ZBhY tO>JZy*R}6zcpG9`NHCu,0_= LX4i y( t, =gInAfuOk"%;`I/I-YKvEYI' \F$yu_ KRA^Pl*$a$e')} M`fg>_LO3(tUf~?>zi LMF9v1nvc r2K^cIzMFY#A }s[`.4fZ EJr@? . xdy-QlLoaC v@Ro6VL?ON^hX?CC<g8S x`vnx1[x[0lZKxWJu  Y(N Bf GW6Dh8{kDMTendTo9%+e9a0#nD,I>,O6p Nc9JC*7^ c@aF5rOxh: :xx&qp(_gn~H|a+" \Lo9:gOPwCvu+yy?{aEy72>S&0=#d[kP>[ata=y> uY|EZ!XZKK C=(:sYY0L!v;kZ)kP\T6Jul~AZt?uHl#}Z' q%%J -,!QQjk#[Y8SvDW)B0X^8g}X3:e$)QJzgg#d+,b>%n,Z26^k+QkrOXK-{v<.Yug7NZr\R lgmj@yX' x#shxzNkw!4F,MNOVCaAgrvSF,KPPWQn`KS$|Ne~:NE$e)&(lmP{* l D4AuI"v,?u^u?!|9m=$ ;3[@>rkC31a9ZP3z^,)~L/ 6OVnno_ CMs1pb$IRhn}dc#H-[LpwMAa/2E3N6lygum I_1j#[v'j^&jT1 'Aw;k 9}Xh99DPdu0E F&cZZ7j<f(D7RGyq*B-U#P6TN u 5 de?/Vx-~Iq8RWCf:^V1Py)r Q&d\6$X@ uNKW5[ty( *Mq!rO[[z4A; ADw#He .xP@5 Te6D/qgMdXcontext->font->fsp, s, n) #define SCREENDEPTH(w)\ DefaultDepth(w->window->display->display, w->window->display->screen) #define ASCENT(w) (w->context->font->fsp->ascent) #define DESCENT(w) (w->context->font->fsp->descent) #define LEADING(w) (w->context->font->leading) #define FHEIGHT(w) (w->context->font->height) #define FWIDTH(w) (w->context->font->fsp->max_bounds.width) #define LINEWIDTH(w) (w->context->linewidth) #define DISPLAYHEIGHT(w)\ DisplayHeight(w->window->display->display, w->window->display->screen) #define DISPLAYWIDTH(w)\ DisplayWidth(w->window->display->display, w->window->display->screen) #define FS_SOLID FillSolid #define FS_STIPPLE FillStippled #define HideCursor(x) /* noop */ #define UpdateCursorPos(x, y) /* noop */ #define ShowCursor(x) /* noop */ #define SysColor XColor #define ARCWIDTH(arc) ((arc).width) #define ARCHEIGHT(arc) ((arc).height) #define RECX(rec) ((rec).x) #define RECY(rec) ((rec).y) #define RECWIDTH(rec) ((rec).width) #define RECHEIGHT(rec) ((rec).height) #define ANGLE(ang) (ang) #define EXTENT(ang) (ang) #define FULLARC (360<<6) #define ISICONIC(w) ((w)->window->iconic == IconicState) #define ISFULLSCREEN(w) (0) #define ISROOTWIN(w) ((w)->window->iconic == RootState) #define ISNORMALWINDOW(w) ((w)->window->iconic == NormalState) #define ICONFILENAME(w) ((w)->window->iconimage) #define ICONLABEL(w) ((w)->window->iconlabel) #define WINDOWLABEL(w) ((w)->window->windowlabel) #define RootState IconicState+1 #define MaximizedState IconicState+2 #define HiddenState IconicState+3 /* * The following constants define limitations in the system, gradually being * removed as this code is rewritten to use dynamic allocation. */ #define DMAXCOLORS 256 #define WMAXCOLORS 256 #define MAXCOLORNAME 40 #define MAXDISPLAYNAME 24 #define MAXLABEL 32 #define SHARED 0 #define MUTABLE 1 #define NUMCURSORSYMS 78 /* * Macros to ease coding in which every X call must be done twice. */ #define RENDER2(func,v1,v2) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2); \ func(stddpy, stdpix, stdgc, v1, v2);} #define RENDER3(func,v1,v2,v3) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3); \ func(stddpy, stdpix, stdgc, v1, v2, v3);} #define RENDER4(func,v1,v2,v3,v4) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3, v4); \ func(stddpy, stdpix, stdgc, v1, v2, v3, v4);} #define RENDER6(func,v1,v2,v3,v4,v5,v6) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3, v4, v5, v6); \ func(stddpy, stdpix, stdgc, v1, v2, v3, v4, v5, v6);} #define RENDER7(func,v1,v2,v3,v4,v5,v6,v7) {\ if (stdwin) func(stddpy, stdwin, stdgc, v1, v2, v3, v4, v5, v6, v7); \ func(stddpy, stdpix, stdgc, v1, v2, v3, v4, v5, v6, v7);} #define MAXDESCENDER(w) (w->context->font->fsp->max_bounds.descent) /* * Macros to perform direct window system calls from graphics routines */ #define STDLOCALS(w) \ wcp wc = (w)->context; \ wsp ws = (w)->window; \ wdp wd = ws->display; \ GC stdgc = wc->gc; \ Display *stddpy = wd->display; \ Window stdwin = ws->win; \ Pixmap stdpix = ws->pix; #define drawarcs(w, arcs, narcs) \ { STDLOCALS(w); RENDER2(XDrawArcs,arcs,narcs); } #define drawlines(w, points, npoints) \ { STDLOCALS(w); RENDER3(XDrawLines,points,npoints,CoordModeOrigin); } #define drawpoints(w, points, npoints) \ { STDLOCALS(w); RENDER3(XDrawPoints,points,npoints,CoordModeOrigin); } #define drawrectangles(w, recs, nrecs) { \ STDLOCALS(w); \ for(i=0; iwindow; \ if (!c_get((struct b_list *)BlkLoc(ws->listp),&d)) fatalerr(0,NULL); \ if (Qual(d)) {\ ws->eventQueue[ws->eQfront++] = *StrLoc(d); \ if (ws->eQfront >= EQUEUELEN) ws->eQfront = 0; \ ws->eQback = ws->eQfront; \ } \ } #define EVQUEEMPTY(w) (BlkLoc((w)->window->listp)->list.size == 0) /* * Colors. These are allocated within displays; they are currently * statically bounded to DMAXCOLORS colors per display. Pointers * into the display's color table are also kept on a per-window * basis so that th:[ VMS.BCK[V9.SRC.H]XWIN.H;1RPP.ICN;1 ey may be (de)allocated when a window is cleared. * Colors are aliased by r,g,b value. Allocations by name and r,g,b * share when appropriate. * * Color (de)allocation comprises a simple majority of the space * requirements of the current implementation. A monochrome-only * version would take a lot less space. * * The name field is the string returned by XAttrib. For a mutable * color this is of the form "-47" followed by a second C string * containing the current color setting. */ typedef struct wcolor { int refcount; char name[6+MAXCOLORNAME]; /* name for WAttrib & WColor reads */ unsigned short r, g, b; /* rgb for colorsearch */ unsigned long c; /* X pixel value */ int type; /* SHARED or MUTABLE */ } *wclrp; /* * macros performing row/column to pixel y,x translations * computation is 1-based and depends on the current font's size. * exception: XTOCOL as defined is 0-based, because that's what its * clients seem to need. */ #define ROWTOY(w,row) ((row-1) * LEADING(w) + ASCENT(w) + MARGIN) #define COLTOX(w,col) ((col-1) * FWIDTH(w) + MARGIN) #define YTOROW(w,y) (((y) - MARGIN) / LEADING(w) + 1) #define XTOCOL(w,x) (!FWIDTH(w) ? ((x)-MARGIN) : (((x) - MARGIN) / FWIDTH(w))) #define STDLOCALS(w) \ wcp wc = (w)->context; \ wsp ws = (w)->window; \ wdp wd = ws->display; \ GC stdgc = wc->gc; \ Display *stddpy = wd->display; \ Window stdwin = ws->win; \ Pixmap stdpix = ws->pix; #endif /* XWindows */ i*[V9.SRC]ICONC.DIR;1+,~./ 4-0123 KPWO56@!n؛7~؛89Ҋ;vGHJICCODE.CCCODE.HCCOMP.C CGLOBALS.H CGRAMMAR.CCHKINV.CCLEX.CCLOCAL.CCMAIN.CCMEM.C CODEGEN.CCPARSE.CCPROTO.HCSYM.CCSYM.HCTOKEN.HCTRANS.CCTRANS.HCTREE.CCTREE.HDBASE.C FIXCODE.C INCHECK.CINLINE.C IVALUES.C LIFETIME.CMAKE.COM TYPINFER.C*[V9.SRC.ICONC]CCODE.C;1+,. / 4  -~0123KPWO 56ܛ7>89Jj$GHJ/* * ccode.c - routines to produce internal representation of C code. */ #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "cglobals.h" #include "csym.h" #include "ccode.h" #include "ctree.h" #include "ctoken.h" #include "cproto.h" /* * Prototypes for static functions. */ hidden struct c_fnc *alc_fnc Params((noargs)); hidden struct tmplftm *alc_lftm Params((int num, union field *args)); hidden int alc_tmp Params((int n, struct tmplftm *lifetm_ary)); hidden struct code *asgn_null Params((struct val_loc *loc1)); hidden struct val_loc *bound Params((struct node *n, struct val_loc *rslt, int catch_fail)); hidden struct code *check_var Params((struct val_loc *d, struct code *lbl)); hidden novalue deref_cd Params((struct val_loc *src, struct val_loc *dest)); hidden novalue deref_ret Params((struct val_loc *src, struct val_loc *dest, int subtypes)); hidden novalue endlife Params((int kind, int indx, int old, nodeptr n)); hidden struct val_loc *field_ref Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *gen_act Params((nodeptr n, struct val_loc *rslt)); hidden struct val_loc *gen_apply Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *gen_args Params((struct node *n, int frst_arg, int nargs)); hidden struct val_loc *gen_case Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *gen_creat Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *gen_lim Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *gen_scan Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *gencode Params((struct node *n, struct val_loc *rslt)); hidden struct val_loc *genretval Params((struct node *n, struct node *expr, struct val_loc *dest)); hidden struct val_loc *inv_prc Params((nodeptr n, struct val_loc *rslt)); hidden struct val_loc *inv_op Params((nodeptr n, struct val_loc *rslt)); hidden nodeptr max_lftm Params((nodeptr n1, nodeptr n2)); hidden novalue mk_callop Params((char *oper_nm, int ret_flag, struct val_loc *arg1rslt, int nargs, struct val_loc *rslt, int optim)); hidden struct code *mk_cpyval Params((struct val_loc *loc1, struct val_loc *loc2)); hidden struct code *new_call Params((noargs)); hidden char *oper_name Params((struct implement *impl)); hidden novalue restr_env Params((struct val_loc *sub_sav, struct val_loc *pos_sav)); hidden novalue save_env Params((struct val_loc *sub_sav, struct val_loc *pos_sav)); hidden novalue setloc Params((nodeptr n)); hidden struct val_loc *tmp_loc Params((int n)); hidden struct val_loc *var_ref Params((struct lentry *sym)); hidden struct val_loc *vararg_sz Params((int n)); #define FrstArg 2 /* * Information that must be passed between a loop and its next and break * expressions. */ struct loop_info { struct code *next_lbl; /* where to branch for a next expression */ struct code *end_loop; /* label at end of loop */ struct code *on_failure; /* where to go if the loop fails */ struct scan_info *scan_info; /* scanning environment upon entering loop */ struct val_loc *rslt; /* place to put result of loop */ struct c_fnc *succ_cont; /* the success continuation for the loop */ struct loop_info *prev; /* link to info for outer loop */ }; /* * The allocation status of a temporary variable can either be "in use", * "not allocated", or reserved for use at a code position (indicated * by a specific negative number). */ #define InUse 1 #define NotAlc 0 /* * tmplftm is used to precompute lifeSP VMS.BCK~[V9.SRC.ICONC]CCODE.C;1N;11  time information for use in allocating * temporary variables. */ struct tmplftm { int cur_status; nodeptr lifetime; }; /* * Places where &subject and &pos are saved during string scanning. "outer" * values are saved when the scanning expression is executed. "inner" * values are saved when the scanning expression suspends. */ struct scan_info { struct val_loc *outer_sub; struct val_loc *outer_pos; struct val_loc *inner_sub; struct val_loc *inner_pos; struct scan_info *next; }; struct scan_info scan_base = {NULL, 0, NULL, 0, NULL}; struct scan_info *nxt_scan = &scan_base; struct val_loc ignore; /* no values, just something to point at */ static struct val_loc proc_rslt; /* result location for procedure */ int *tmp_status = NULL; /* allocation status of temp descriptor vars */ int *itmp_status = NULL; /* allocation status of temp C int vars*/ int *dtmp_status = NULL; /* allocation status of temp C double vars */ int *sbuf_status = NULL; /* allocation of string buffers */ int *cbuf_status = NULL; /* allocation of cset buffers */ int num_tmp; /* number of temp descriptors actually used */ int num_itmp; /* number of temp C ints actually used */ int num_dtmp; /* number of temp C doubles actually used */ int num_sbuf; /* number of string buffers actually used */ int num_cbuf; /* number of cset buffers actually used */ int status_sz = 20; /* current size of tmp_status array */ int istatus_sz = 20; /* current size of itmp_status array */ int dstatus_sz = 20; /* current size of dtmp_status array */ int sstatus_sz = 20; /* current size of sbuf_status array */ int cstatus_sz = 20; /* current size of cbuf_status array */ struct freetmp *freetmp_pool = NULL; static char frm_prfx[PrfxSz + 1];/* prefix for procedure frame */ static char *lastfiln; /* last file name set in code */ static int lastline; /* last line number set in code */ static struct c_fnc *fnc_lst; /* list of C functions implementing proc */ static struct c_fnc **flst_end; /* pointer to null pointer at end of fnc_lst */ struct c_fnc *cur_fnc; /* C function currently being built */ static int create_lvl = 0; /* co-expression create level */ struct pentry *cur_proc; /* procedure currently being translated */ struct code *on_failure; /* place to go on failure */ static struct code *p_ret_lbl; /* label for procedure return */ static struct code *p_fail_lbl; /* label for procedure fail */ struct code *bound_sig; /* bounding signal for current procedure */ /* * statically declared "signals". */ struct code resume; struct code contin; struct code fallthru; struct code next_fail; int lbl_seq_num = 0; /* next label sequence number */ /* * proccode - generate code for a procedure. */ novalue proccode(proc) struct pentry *proc; { struct c_fnc *fnc; struct code *cd; struct code *cd1; struct code *lbl; nodeptr n; nodeptr failer; int gen; int i; /* * Initialize arrays used for allocating temporary variables. */ if (tmp_status == NULL) tmp_status = (int *)alloc((unsigned int)(status_sz * sizeof(int))); if (itmp_status == NULL) itmp_status = (int *)alloc((unsigned int)(istatus_sz * sizeof(int))); if (dtmp_status == NULL) dtmp_status = (int *)alloc((unsigned int)(dstatus_sz * sizeof(int))); if (sbuf_status == NULL) sbuf_status = (int *)alloc((unsigned int)(sstatus_sz * sizeof(int))); if (cbuf_status == NULL) cbuf_status = (int *)alloc((unsigned int)(cstatus_sz * sizeof(int))); for (i = 0; i < status_sz; ++i) tmp_status[i] = NotAlloc; for (i = 0; i < istatus_sz; ++i) itmp_status[i] = NotAlloc; for (i = 0; i < dstatus_sz; ++i) dtmp_status[i] = NotAlloc; for (i = 0; i < sstatus_sz; ++i) sbuf_status[i] = NotAlloc; for (i = 0; i < cstatus_sz; ++i) cbuf_status[i] = NotAlloc; num_tmp = 0; num_itmp = 0; num_dtmp = 0; num_sbuf = 0; num_cbuf = 0; /* * Initialize standard signals. */ resume.cd_id = C_Resume; contin.cd_id = C_Continue; fallthru.cd_id = C_FallThru; /* * Initialize procedure result and the transcan locations. */ proc_rslt.loc_type = V_PRslt; proc_rslt.mod_access = M_None; ignore.loc_type = V_Ignore; ignore.mod_access = M_None; cur_proc = proc; /* current procedure */ lastfiln = NULL; /* file name */ lastline = 0; /* line number */ /* * Procedure frame prefix is the procedure prefix. */ for (i = 0; i < PrfxSz; ++i) frm_prfx[i] = cur_proc->prefix[i]; frm_prfx[PrfxSz] = '\0'; /* * Initialize the continuation list and allocate the outer function for * this procedure. */ fnc_lst = NULL; flst_end = &fnc_lst; cur_fnc = alc_fnc(); /* * If the procedure is not used anywhere don't generate code for it. * This can happen when using libraries containing several procedures, * but not all are needed. However, if there is a block for the * procedure, we need at least a dummy function. */ if (!cur_proc->reachable) { if (!(glookup(cur_proc->name)->flag & F_SmplInv)) outerfnc(fnc_lst); return; } /* * Allocate labels for the code for procedure failure, procedure return, * and allocate the bounding signal for this procedure (at this point * signals and labels are not distinguished). */ p_fail_lbl = alc_lbl("proc fail", 0); p_ret_lbl = alc_lbl("proc return", 0); bound_sig = alc_lbl("bound", 0); n = proc->tree; setloc(n); if (Type(Tree1(n)) != N_Empty) { /* * initial clause. */ Tree1(n)->lifetime = NULL; liveness(Tree1(n), NULL, &failer, &gen); if (tfatals > 0) return; lbl = alc_lbl("end initial", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(1); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "!first_time"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "first_time = 0;"; cd_add(cd); bound(Tree1(n), &ignore, 1); cur_fnc->cursor = lbl; } Tree2(n)->lifetime = NULL; liveness(Tree2(n), NULL, &failer, &gen); if (tfatals > 0) return; bound(Tree2(n), &ignore, 1); /* * Place code to perform procedure failure and return and the * end of the outer function. */ setloc(Tree3(n)); cd_add(p_fail_lbl); cd = NewCode(0); cd->cd_id = C_PFail; cd_add(cd); cd_add(p_ret_lbl); cd = NewCode(0); cd->cd_id = C_PRet; cd_add(cd); /* * Fix up signal handling code and perform peephole optimizations. */ fix_fncs(fnc_lst); /* * The outer function is the first one on the list. It has the * procedure interface; the others are just continuations. */ outerfnc(fnc_lst); for (fnc = fnc_lst->next; fnc != NULL; fnc = fnc->next) if (fnc->ref_cnt > 0) prt_fnc(fnc); } /* * gencode - generate code for a syntax tree. */ static struct val_loc *gencode(n, rslt) struct node *n; struct val_loc *rslt; { struct code *cd; struct code *cd1; struct code *fail_sav; struct code *lbl1; struct code *lbl2; struct code *cursor_sav; struct c_fnc *fnc_sav; struct c_fnc *fnc; struct implement *impl; struct implement *impl1; struct val_loc *r1[3]; struct val_loc *r2, VMS.BCK~[V9.SRC.ICONC]CCODE.C;1ICN;1 [2]; struct val_loc *frst_arg; struct lentry *single; struct freetmp *freetmp; struct freetmp *ft; struct tmplftm *lifetm_ary; char *sbuf; int i; int tmp_indx; int nargs; static struct loop_info *loop_info = NULL; struct loop_info *li_sav; switch (n->n_type) { case N_Activat: rslt = gen_act(n, rslt); break; case N_Alt: rslt = chk_alc(rslt, n->lifetime); /* insure a result location */ fail_sav = on_failure; fnc_sav = cur_fnc; /* * If the first alternative fails, execution must go to the * "alt" label. */ lbl1 = alc_lbl("alt", 0); on_failure = lbl1; cd_add(lbl1); cur_fnc->cursor = lbl1->prev; /* 1st alternative goes before label */ gencode(Tree0(n), rslt); /* * Each alternative must call the same success continuation. */ fnc = alc_fnc(); callc_add(fnc); cur_fnc = fnc_sav; /* return to the context of the label */ cur_fnc->cursor = lbl1; /* 2nd alternative goes after label */ on_failure = fail_sav; /* on failure, alternation fails */ gencode(Tree1(n), rslt); callc_add(fnc); /* call continuation */ /* * Code following the alternation goes in the continuation. If * the code fails, the continuation returns the resume signal. */ cur_fnc = fnc; on_failure = &resume; break; case N_Apply: rslt = gen_apply(n, rslt); break; case N_Augop: impl = Impl0(n); /* assignment */ impl1 = Impl1(n); /* the operation */ if (impl == NULL || impl1 == NULL) { rslt = &ignore; /* make sure code generation can continue */ break; } /* * allocate an argument list for the operation. */ lifetm_ary = alc_lftm(2, &n->n_field[2]); tmp_indx = alc_tmp(2, lifetm_ary); r1[0] = tmp_loc(tmp_indx); r1[1] = tmp_loc(tmp_indx + 1); gencode(Tree2(n), r1[0]); /* first argument */ /* * allocate an argument list for the assignment and copy the * value of the first argument into it. */ lifetm_ary[0].cur_status = InUse; lifetm_ary[1].cur_status = n->postn; lifetm_ary[1].lifetime = n->intrnl_lftm; tmp_indx = alc_tmp(2, lifetm_ary); r2[0] = tmp_loc(tmp_indx++); cd_add(mk_cpyval(r2[0], r1[0])); r2[1] = tmp_loc(tmp_indx); gencode(Tree3(n), r1[1]); /* second argument */ /* * Produce code for the operation. */ setloc(n); implproto(impl1); mk_callop(oper_name(impl1), impl1->ret_flag, r1[0], 2, r2[1], 0); /* * Produce code for the assignment. */ implproto(impl); if (impl->ret_flag & (DoesRet | DoesSusp)) rslt = chk_alc(rslt, n->lifetime); mk_callop(oper_name(impl), impl->ret_flag, r2[0], 2, rslt, 0); free((char *)lifetm_ary); break; case N_Bar: { struct val_loc *fail_flg; /* * Allocate an integer variable to keep track of whether the * repeated alternation should fail when execution reaches * the top of its loop, and generate code to initialize the * variable to 0. */ fail_flg = itmp_loc(alc_itmp(n->intrnl_lftm)); cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = fail_flg; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = 0;"; cd_add(cd); /* * Code at the top of the repeated alternation loop checks * the failure flag. */ lbl1 = alc_lbl("rep alt", 0); cd_add(lbl1); cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(1); cd1->ElemTyp(0) = A_ValLoc; cd1->ValLoc(0) = fail_flg; cd->Cond = cd1; cd->ThenStmt = sig_cd(on_failure, cur_fnc); cd_add(cd); /* * If the expression fails without producing a value, the * repeated alternation must fail. */ cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = fail_flg; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = 1;"; cd_add(cd); /* * Generate code for the repeated expression. If it produces * a value before before backtracking occurs, the loop is * repeated as indicated by the value of the failure flag. */ on_failure = lbl1; rslt = gencode(Tree0(n), rslt); cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = fail_flg; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = 0;"; cd_add(cd); } break; case N_Break: if (loop_info == NULL) { nfatal(n, "invalid context for a break expression", NULL); rslt = &ignore; break; } /* * If the break is in a different string scanning context from the * loop itself, generate code to restore the scanning environment. */ if (nxt_scan != loop_info->scan_info) restr_env(loop_info->scan_info->outer_sub, loop_info->scan_info->outer_pos); if (Tree0(n)->n_type == N_Empty && loop_info->rslt == &ignore) { /* * The break has no associated expression and the loop needs * no value, so just branch out of the loop. */ cd_add(sig_cd(loop_info->end_loop, cur_fnc)); } else { /* * The code for the expression associated with the break is * actually placed at the end of the loop. Go there and * add a label to branch to. */ cursor_sav = cur_fnc->cursor; fnc_sav = cur_fnc; fail_sav = on_failure; cur_fnc = loop_info->end_loop->Container; cur_fnc->cursor = loop_info->end_loop->prev; on_failure = loop_info->on_failure; lbl1 = alc_lbl("break", 0); cd_add(lbl1); /* * Make sure a result location has been allocated for the * loop, restore the loop information for the next outer * loop, generate code for the break expression, then * restore the loop information for this loop. */ loop_info->rslt = chk_alc(loop_info->rslt, Tree0(n)->lifetime); li_sav = loop_info; loop_info = loop_info->prev; gencode(Tree0(n), li_sav->rslt); loop_info = li_sav; /* * If this or another break expression suspends so we cannot * just branch to the end of the loop, all breaks must * call a common continuation. */ if (cur_fnc->cursor->next != loop_info->end_loop && loop_info->succ_cont == NULL) loop_info->succ_cont = alc_fnc(); if (loop_info->succ_cont == NULL) cd_add(mk_goto(loop_info->end_loop)); /* go to end of loop */ else callc_add(loop_info->succ_cont); /* call continuat dʠ VMS.BCK~[V9.SRC.ICONC]CCODE.C;1CN;1 'ion */ /* * Return to the location of the break and generate a branch to * the code for its associated expression. */ cur_fnc = fnc_sav; cur_fnc->cursor = cursor_sav; on_failure = fail_sav; cd_add(sig_cd(lbl1, cur_fnc)); } rslt = &ignore; /* shouldn't be used but must be something valid */ break; case N_Case: rslt = gen_case(n, rslt); break; case N_Create: rslt = gen_creat(n, rslt); break; case N_Cset: case N_Int: case N_Real: case N_Str: cd = NewCode(2); cd->cd_id = C_Lit; rslt = chk_alc(rslt, n->lifetime); cd->Rslt = rslt; cd->Literal = CSym0(n); cd_add(cd); break; case N_Empty: /* * Assume null value is needed. */ if (rslt == &ignore) break; rslt = chk_alc(rslt, n->lifetime); cd_add(asgn_null(rslt)); break; case N_Field: rslt = field_ref(n, rslt); break; case N_Id: /* * If the variable reference is not going to be used, don't bother * building it. */ if (rslt == &ignore) break; cd = NewCode(2); cd->cd_id = C_NamedVar; rslt = chk_alc(rslt, n->lifetime); cd->Rslt = rslt; cd->NamedVar = LSym0(n); cd_add(cd); break; case N_If: if (Type(Tree2(n)) == N_Empty) { /* * if-then. Control clause is bounded, but otherwise trivial. */ bound(Tree0(n), &ignore, 0); /* control clause */ rslt = gencode(Tree1(n), rslt); /* then clause */ } else { /* * if-then-else. Establish an "else" label as the failure * label of the bounded control clause. */ fail_sav = on_failure; fnc_sav = cur_fnc; lbl1 = alc_lbl("else", 0); on_failure = lbl1; bound(Tree0(n), &ignore, 0); /* control clause */ cd_add(lbl1); cur_fnc->cursor = lbl1->prev; /* then clause goes before else lbl */ on_failure = fail_sav; rslt = chk_alc(rslt, n->lifetime); gencode(Tree1(n), rslt); /* then clause */ /* * If the then clause is not a generator, execution can * just go to the end of the if-then-else expression. If it * is a generator, the continuation for the expression must be * in a separate function. */ if (cur_fnc->cursor->next == lbl1) { fnc = NULL; lbl2 = alc_lbl("end if", 0); cd_add(mk_goto(lbl2)); cur_fnc->cursor = lbl1; cd_add(lbl2); } else { lbl2 = NULL; fnc = alc_fnc(); callc_add(fnc); cur_fnc = fnc_sav; } cur_fnc->cursor = lbl1; /* else clause goes after label */ on_failure = fail_sav; gencode(Tree2(n), rslt); /* else clause */ /* * If the else clause is not a generator, execution is at * the end of the if-then-else expression, but the if clause * may have forced the continuation to be in a separate function. * If the else clause is a generator, it forces the continuation * to be in a separate function. */ if (fnc == NULL) { if (cur_fnc->cursor->next == lbl2) cur_fnc->cursor = lbl2; else { fnc = alc_fnc(); callc_add(fnc); /* * The then clause is not a generator, so it has branched * to lbl2. We must add a call to the continuation there. */ cur_fnc = fnc_sav; cur_fnc->cursor = lbl2; on_failure = fail_sav; callc_add(fnc); } } else callc_add(fnc); if (fnc != NULL) { /* * We produced a continuation for the if-then-else, so code * generation must proceed in it. */ cur_fnc = fnc; on_failure = &resume; } } break; case N_Invok: /* * General invocation. */ nargs = Val0(n); if (Tree1(n)->n_type == N_Empty) { /* * Mutual evaluation. */ for (i = 2; i <= nargs; ++i) gencode(n->n_field[i].n_ptr, &ignore); /* arg i - 1 */ rslt = chk_alc(rslt, n->lifetime); gencode(n->n_field[nargs + 1].n_ptr, rslt); /* last argument */ } else { ++nargs; /* consider the procedure an argument to invoke() */ frst_arg = gen_args(n, 1, nargs); setloc(n); /* * Assume this operation uses its result location as a work * area. Give it a location that is tended, where the value * is retained as long as the operation can be resumed. */ if (rslt == &ignore) rslt = NULL; /* force allocation of temporary */ rslt = chk_alc(rslt, max_lftm(n->lifetime, n->intrnl_lftm)); mk_callop( "invoke", DoesRet | DoesFail | DoesSusp, frst_arg, nargs, rslt, 0); } break; case N_InvOp: rslt = inv_op(n, rslt); break; case N_InvProc: rslt = inv_prc(n, rslt); break; case N_InvRec: { /* * Directly invoke a record constructor. */ struct rentry *rec; nargs = Val0(n); /* number of arguments */ frst_arg = gen_args(n, 2, nargs); setloc(n); rec = Rec1(n); rslt = chk_alc(rslt, n->lifetime); /* * If error conversion can occur then the record constructor may * fail and we must check the signal. */ if (err_conv) { sbuf = (char *)alloc((unsigned int)(strlen(rec->name) + strlen("signal = R_") + PrfxSz + 1)); sprintf(sbuf, "signal = R%s_%s(", rec->prefix, rec->name); } else { sbuf = (char *)alloc((unsigned int)(strlen(rec->name) + PrfxSz +4)); sprintf(sbuf, "R%s_%s(", rec->prefix, rec->name); } cd = alc_ary(9); cd->ElemTyp(0) = A_Str; /* constructor name */ cd->Str(0) = sbuf; cd->ElemTyp(1) = A_Intgr; /* number of arguments */ cd->Intgr(1) = nargs; cd->ElemTyp(2) = A_Str; /* , */ cd->Str(2) = ", "; if (frst_arg == NULL) { /* location of first argument */ cd->ElemTyp(3) = A_Str; cd->Str(3) = "NULL"; cd->ElemTyp(4) = A_Str; cd->Str(4) = ""; } else { cd->ElemTyp(3) = A_Str; cd->Str(3) = "&"; cd->ElemTyp(4) = A_ValLoc; cd->ValLoc(4) = frst_arg; } cd->ElemTyp(5) = A_Str; /* , */ cd->Str(5) = ", "; cd->ElemTyp(6) = A_Str; /* locatio02 VMS.BCK~[V9.SRC.ICONC]CCODE.C;1CN;11 q6n of result */ cd->Str(6) = "&"; cd->ElemTyp(7) = A_ValLoc; cd->ValLoc(7) = rslt; cd->ElemTyp(8) = A_Str; cd->Str(8) = ");"; cd_add(cd); if (err_conv) { cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(1); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "signal == A_Resume"; cd->Cond = cd1; cd->ThenStmt = sig_cd(on_failure, cur_fnc); cd_add(cd); } } break; case N_Limit: rslt = gen_lim(n, rslt); break; case N_Loop: { struct loop_info li; /* * Set up loop information for use by break and next expressions. */ li.end_loop = alc_lbl("end loop", 0); cd_add(li.end_loop); cur_fnc->cursor = li.end_loop->prev; /* loop goes before label */ li.rslt = rslt; li.on_failure = on_failure; li.scan_info = nxt_scan; li.succ_cont = NULL; li.prev = loop_info; loop_info = &li; switch ((int)Val0(Tree0(n))) { case EVERY: /* * "next" in the control clause just fails. */ li.next_lbl = &next_fail; gencode(Tree1(n), &ignore); /* control clause */ /* * "next" in the do clause transfers control to the * statement at the end of the loop that resumes the * control clause. */ li.next_lbl = alc_lbl("next", 0); bound(Tree2(n), &ignore, 1); /* do clause */ cd_add(li.next_lbl); cd_add(sig_cd(on_failure, cur_fnc)); /* resume control clause */ break; case REPEAT: li.next_lbl = alc_lbl("repeat", 0); cd_add(li.next_lbl); bound(Tree1(n), &ignore, 1); cd_add(mk_goto(li.next_lbl)); break; case SUSPEND: /* suspension expression */ if (create_lvl > 0) { nfatal(n, "invalid context for suspend", NULL); return &ignore; } /* * "next" in the control clause just fails. The result * of the control clause goes in the procedure return * location. */ li.next_lbl = &next_fail; genretval(n, Tree1(n), &proc_rslt); /* * If necessary, swap scanning environments before suspending. * if there is no success continuation, just return. */ if (nxt_scan != &scan_base) { save_env(scan_base.inner_sub, scan_base.inner_pos); restr_env(scan_base.outer_sub, scan_base.outer_pos); } cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(2); cd1->ElemTyp(0) = A_ProcCont; cd1->ElemTyp(1) = A_Str; cd1->Str(1) = " == NULL"; cd->Cond = cd1; cd->ThenStmt = sig_cd(p_ret_lbl, cur_fnc); cd_add(cd); cd = NewCode(0); cd->cd_id = C_PSusp; cd_add(cd); cur_fnc->flag |= CF_ForeignSig; /* * Force updating file name and line number, and if needed, * switch scanning environments before resuming. */ lastfiln = NULL; lastline = 0; if (nxt_scan != &scan_base) { save_env(scan_base.outer_sub, scan_base.outer_pos); restr_env(scan_base.inner_sub, scan_base.inner_pos); } /* * "next" in the do clause transfers control to the * statement at the end of the loop that resumes the * control clause. */ li.next_lbl = alc_lbl("next", 0); bound(Tree2(n), &ignore, 1); /* do clause */ cd_add(li.next_lbl); cd_add(sig_cd(on_failure, cur_fnc)); break; case WHILE: li.next_lbl = alc_lbl("while", 0); cd_add(li.next_lbl); /* * The control clause and do clause are both bounded expressions, * but only the do clause establishes a new failure label. */ bound(Tree1(n), &ignore, 0); /* control clause */ bound(Tree2(n), &ignore, 1); /* do clause */ cd_add(mk_goto(li.next_lbl)); break; case UNTIL: fail_sav = on_failure; li.next_lbl = alc_lbl("until", 0); cd_add(li.next_lbl); /* * If the control clause fails, execution continues in * the loop. */ if (Type(Tree2(n)) == N_Empty) on_failure = li.next_lbl; else { lbl2 = alc_lbl("do", 0); on_failure = lbl2; cd_add(lbl2); cur_fnc->cursor = lbl2->prev; /* control before label */ } bound(Tree1(n), &ignore, 0); /* control clause */ /* * If the control clause succeeds, the loop fails. */ cd_add(sig_cd(fail_sav, cur_fnc)); if (Type(Tree2(n)) != N_Empty) { /* * Do clause goes after the label and the loop repeats. */ cur_fnc->cursor = lbl2; bound(Tree2(n), &ignore, 1); /* do clause */ cd_add(mk_goto(li.next_lbl)); } break; } /* * Go to the end of the loop and see if the loop's success continuation * is in a separate function. */ cur_fnc = li.end_loop->Container; cur_fnc->cursor = li.end_loop; if (li.succ_cont != NULL) { callc_add(li.succ_cont); cur_fnc = li.succ_cont; on_failure = &resume; } if (li.rslt == NULL) rslt = &ignore; /* shouldn't be used but must be something valid */ else rslt = li.rslt; loop_info = li.prev; break; } case N_Next: /* * In some contexts "next" just fails. In other contexts it * transfers control to a label, in which case it may have * to restore a scanning environment. */ if (loop_info == NULL) nfatal(n, "invalid context for a next expression", NULL); else if (loop_info->next_lbl == &next_fail) cd_add(sig_cd(on_failure, cur_fnc)); else { if (nxt_scan != loop_info->scan_info) restr_env(loop_info->scan_info->outer_sub, loop_info->scan_info->outer_pos); cd_add(sig_cd(loop_info->next_lbl, cur_fnc)); } rslt = &ignore; /* shouldn't be used but must be something valid */ break; case N_Not: lbl1 = alc_lbl("not", 0); fail_sav = on_failure; on_failure = lbl1; cd_add(lbl1); cur_fnc->cursor = lbl1->prev; /* code goes before label */ M VMS.BCK~[V9.SRC.ICONC]CCODE.C;1ICN;1 m-E bound(Tree0(n), &ignore, 0); on_failure = fail_sav; cd_add(sig_cd(on_failure, cur_fnc)); /* convert success to failure */ cur_fnc->cursor = lbl1; /* convert failure to null */ if (rslt != &ignore) { rslt = chk_alc(rslt, n->lifetime); cd_add(asgn_null(rslt)); } break; case N_Ret: if (create_lvl > 0) { nfatal(n, "invalid context for return or fail", NULL); return &ignore; } if (Val0(Tree0(n)) == RETURN) { /* * Set up the failure action of the return expression to do a * procedure fail. */ if (nxt_scan != &scan_base) { /* * we must switch scanning environments if the expression fails. */ lbl1 = alc_lbl("return fail", 0); cd_add(lbl1); restr_env(scan_base.outer_sub, scan_base.outer_pos); cd_add(sig_cd(p_fail_lbl, cur_fnc)); cur_fnc->cursor = lbl1->prev; /* code goes before label */ on_failure = lbl1; } else on_failure = p_fail_lbl; /* * Produce code to place return value in procedure result location. */ genretval(n, Tree1(n), &proc_rslt); /* * See if a scanning environment must be restored and * transfer control to the procedure return code. */ if (nxt_scan != &scan_base) restr_env(scan_base.outer_sub, scan_base.outer_pos); cd_add(sig_cd(p_ret_lbl, cur_fnc)); } else { /* * fail. See if a scanning environment must be restored and * transfer control to the procedure failure code. */ if (nxt_scan != &scan_base) restr_env(scan_base.outer_sub, scan_base.outer_pos); cd_add(sig_cd(p_fail_lbl, cur_fnc)); } rslt = &ignore; /* shouldn't be used but must be something valid */ break; case N_Scan: rslt = gen_scan(n, rslt); break; case N_Sect: /* * x[i+:j] or x[i-:j] (x[i:j] handled as ordinary operator) */ impl1 = Impl0(n); /* sectioning */ if (impl1 == NULL) { rslt = &ignore; /* make sure code generation can continue */ break; } implproto(impl1); impl = Impl1(n); /* plus or minus */ /* * Allocate work area of temporary variables for sectioning. */ lifetm_ary = alc_lftm(3, NULL); lifetm_ary[0].cur_status = Tree2(n)->postn; lifetm_ary[0].lifetime = n->intrnl_lftm; lifetm_ary[1].cur_status = Tree3(n)->postn; lifetm_ary[1].lifetime = n->intrnl_lftm; lifetm_ary[2].cur_status = n->postn; lifetm_ary[2].lifetime = n->intrnl_lftm; tmp_indx = alc_tmp(3, lifetm_ary); for (i = 0; i < 3; ++i) r1[i] = tmp_loc(tmp_indx++); gencode(Tree2(n), r1[0]); /* generate code to compute x */ gencode(Tree3(n), r1[1]); /* generate code compute i */ /* * Allocate work area of temporary variables for arithmetic. */ lifetm_ary[0].cur_status = InUse; lifetm_ary[0].lifetime = Tree3(n)->lifetime; lifetm_ary[1].cur_status = Tree4(n)->postn; lifetm_ary[1].lifetime = Tree4(n)->lifetime; tmp_indx = alc_tmp(2, lifetm_ary); for (i = 0; i < 2; ++i) r2[i] = tmp_loc(tmp_indx++); cd_add(mk_cpyval(r2[0], r1[1])); /* generate code to copy i */ gencode(Tree4(n), r2[1]); /* generate code to compute j */ /* * generate code for i op j. */ setloc(n); implproto(impl); mk_callop(oper_name(impl), impl->ret_flag, r2[0], 2, r1[2], 0); /* * generate code for x[i : (i op j)] */ rslt = chk_alc(rslt, n->lifetime); mk_callop(oper_name(impl1),impl1->ret_flag,r1[0],3,rslt,0); free((char *)lifetm_ary); break; case N_Slist: bound(Tree0(n), &ignore, 1); rslt = gencode(Tree1(n), rslt); break; case N_SmplAsgn: { struct val_loc *var, *val; /* * Optimized assignment to a named variable. Use information * from type inferencing to determine if the right-hand-side * is a variable. */ var = var_ref(LSym0(Tree2(n))); if (HasVar(varsubtyp(Tree3(n)->type, &single))) Val0(n) = AsgnDeref; if (single != NULL) { /* * Right-hand-side results in a named variable. Compute * the expression but don't bother saving the result, we * know what it is. Assignment just copies value from * one variable to the other. */ gencode(Tree3(n), &ignore); val = var_ref(single); cd_add(mk_cpyval(var, val)); } else switch (Val0(n)) { case AsgnDirect: /* * It is safe to compute the result directly into the variable. */ gencode(Tree3(n), var); break; case AsgnCopy: /* * The result is not a variable reference, but it is not * safe to compute it into the variable, we must use a * temporary variable. */ val = gencode(Tree3(n), NULL); cd_add(mk_cpyval(var, val)); break; case AsgnDeref: /* * We must dereference the result into the variable. */ val = gencode(Tree3(n), NULL); deref_cd(val, var); break; } /* * If the assignment has to produce a result, construct the * variable reference. */ if (rslt != &ignore) rslt = gencode(Tree2(n), rslt); } break; case N_SmplAug: { /* * Optimized augmented assignment to a named variable. */ struct val_loc *var, *val; impl = Impl1(n); /* the operation */ if (impl == NULL) { rslt = &ignore; /* make sure code generation can continue */ break; } implproto(impl); /* insure prototype for operation */ /* * Generate code to compute the arguments for the operation. */ frst_arg = gen_args(n, 2, 2); setloc(n); /* * Use information from type inferencing to determine if the * operation produces a variable. */ if (HasVar(varsubtyp(Typ4(n), &single))) Val0(n) = AsgnDeref; var = var_ref(LSym0(Tree2(n))); if (single != NULL) { /* * The operation results in a named variable. Call the operation * but don't bother saving the result, we know what it is. * Assignment just copies value from one variable to the other. */ mk_callop(oper_name(impl), impl->ret_flag, frst_arg, 2, &ignore, 0); val = var_ref(single); cd_add(mk_cpyval(var, val)); } else switch (Val0(n)) { case VMS.BCK~[V9.SRC.ICONC]CCODE.C;1N;1;1 ]T AsgnDirect: /* * It is safe to compute the result directly into the variable. */ mk_callop(oper_name(impl), impl->ret_flag, frst_arg, 2, var, 0); break; case AsgnCopy: /* * The result is not a variable reference, but it is not * safe to compute it into the variable, we must use a * temporary variable. */ val = chk_alc(NULL, n); mk_callop(oper_name(impl), impl->ret_flag, frst_arg, 2, val, 0); cd_add(mk_cpyval(var, val)); break; case AsgnDeref: /* * We must dereference the result into the variable. */ val = chk_alc(NULL, n); mk_callop(oper_name(impl), impl->ret_flag, frst_arg, 2, val, 0); deref_cd(val, var); break; } /* * If the assignment has to produce a result, construct the * variable reference. */ if (rslt != &ignore) rslt = gencode(Tree2(n), rslt); } break; default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); } /* * Free any temporaries whose lifetime ends at this node. */ freetmp = n->freetmp; while (freetmp != NULL) { switch (freetmp->kind) { case DescTmp: tmp_status[freetmp->indx] = freetmp->old; break; case CIntTmp: itmp_status[freetmp->indx] = freetmp->old; break; case CDblTmp: dtmp_status[freetmp->indx] = freetmp->old; break; case SBuf: sbuf_status[freetmp->indx] = freetmp->old; break; case CBuf: cbuf_status[freetmp->indx] = freetmp->old; break; } ft = freetmp->next; freetmp->next = freetmp_pool; freetmp_pool = freetmp; freetmp = ft; } return rslt; } /* * chk_alc - make sure a result location has been allocated. If it is * a temporary variable, indicate that it is now in use. */ struct val_loc *chk_alc(rslt, lifetime) struct val_loc *rslt; nodeptr lifetime; { struct tmplftm tmplftm; if (rslt == NULL) { if (lifetime == NULL) rslt = &ignore; else { tmplftm.cur_status = InUse; tmplftm.lifetime = lifetime; rslt = tmp_loc(alc_tmp(1, &tmplftm)); } } else if (rslt->loc_type == V_Temp) tmp_status[rslt->u.tmp] = InUse; return rslt; } /* * mk_goto - make a code structure for goto label */ struct code *mk_goto(label) struct code *label; { register struct code *cd; cd = NewCode(1); /* # fields == # fields of C_RetSig & C_Break */ cd->cd_id = C_Goto; cd->next = NULL; cd->prev = NULL; cd->Lbl = label; ++label->RefCnt; return cd; } /* * mk_cpyval - make code to copy a value from one location to another. */ static struct code *mk_cpyval(loc1, loc2) struct val_loc *loc1; struct val_loc *loc2; { struct code *cd; cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = loc1; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = "; cd->ElemTyp(2) = A_ValLoc; cd->ValLoc(2) = loc2; cd->ElemTyp(3) = A_Str; cd->Str(3) = ";"; return cd; } /* * asgn_null - make code to assign the null value to a location. */ static struct code *asgn_null(loc1) struct val_loc *loc1; { struct code *cd; cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = loc1; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = nulldesc;"; return cd; } /* * oper_name - create the name for the most general implementation of an Icon * operation. */ static char *oper_name(impl) struct implement *impl; { char *sbuf; sbuf = (char *)alloc((unsigned int)(strlen(impl->name) + 5)); sprintf(sbuf, "%c%c%c_%s", impl->oper_typ, impl->prefix[0], impl->prefix[1], impl->name); return sbuf; } /* * gen_args - generate code to evaluate an argument list. */ static struct val_loc *gen_args(n, frst_arg, nargs) struct node *n; int frst_arg; int nargs; { struct tmplftm *lifetm_ary; int i; int tmp_indx; if (nargs == 0) return NULL; lifetm_ary = alc_lftm(nargs, &n->n_field[frst_arg]); tmp_indx = alc_tmp(nargs, lifetm_ary); for (i = 0; i < nargs; ++i) gencode(n->n_field[frst_arg + i].n_ptr, tmp_loc(tmp_indx + i)); free((char *)lifetm_ary); return tmp_loc(tmp_indx); } /* * gen_case - generate code for a case expression. */ static struct val_loc *gen_case(n, rslt) struct node *n; struct val_loc *rslt; { struct node *control; struct node *cases; struct node *deflt; struct node *clause; struct val_loc *r1; struct val_loc *r2; struct val_loc *r3; struct code *cd; struct code *cd1; struct code *fail_sav; struct code *skp_lbl; struct code *cd_lbl; struct code *end_lbl; struct c_fnc *fnc_sav; struct c_fnc *succ_cont = NULL; control = Tree0(n); cases = Tree1(n); deflt = Tree2(n); /* * The control clause is bounded. */ r1 = chk_alc(NULL, n); bound(control, r1, 0); /* * Remember the context in which the case expression occurs and * establish a label at the end of the expression. */ fail_sav = on_failure; fnc_sav = cur_fnc; end_lbl = alc_lbl("end case", 0); cd_add(end_lbl); cur_fnc->cursor = end_lbl->prev; /* generate code before the end label */ /* * All cases share the result location of the case expression. */ rslt = chk_alc(rslt, n->lifetime); r2 = chk_alc(NULL, n); /* for result of selection clause */ r3 = chk_alc(NULL, n); /* for dereferenced result of control clause */ while (cases != NULL) { /* * See if we are at the end of the case clause list. */ if (cases->n_type == N_Ccls) { clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } /* * If the evaluation of the selection code or the comparison of * its value to the control clause fail, execution will proceed * to the "skip clause" label and on to the next case. */ skp_lbl = alc_lbl("skip clause", 0); on_failure = skp_lbl; cd_add(skp_lbl); cur_fnc->cursor = skp_lbl->prev; /* generate code before end label */ /* * Bound the selection code for this clause. */ cd_lbl = alc_lbl("selected code", Bounding); cd_add(cd_lbl); cur_fnc->cursor = cd_lbl->prev; gencode(Tree0(clause), r2); /* * Dereference the results of the control clause and the selection * clause and compare them. */ setloc(clause); deref_cd(r1, r3); deref_cd(r2, r2); cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(5); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "!equiv(&"; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = r3; cd->Cond = cd1; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ", &"; cd1->ElemTyp(3) = A_ValLoc; cd1->ValLoc(3) = r2; cd1->ElemTyp(4) = A_Str; cd1->Str(4) = ")"; cd->ThenStmt = sig_cd(on_failure, cur_fnc); cd_add(cd); cd_add(sig_cd(cd_lbl, cur_fnc)); /* transfer control to bounding label */ /* VMS.BCK~[V9.SRC.ICONC]CCODE.C;1ICN;1 &c* * Generate code for the body of this clause after the bounding label. */ cur_fnc = fnc_sav; cur_fnc->cursor = cd_lbl; on_failure = fail_sav; gencode(Tree1(clause), rslt); /* * If this clause is a generator, call the success continuation * for the case expression, otherwise branch to the end of the * expression. */ if (cur_fnc->cursor->next != skp_lbl) { if (succ_cont == NULL) succ_cont = alc_fnc(); /* allocate a continuation function */ callc_add(succ_cont); cur_fnc = fnc_sav; } else cd_add(mk_goto(end_lbl)); /* * The code for the next clause goes after the "skip" label of * this clause. */ cur_fnc->cursor = skp_lbl; } if (deflt == NULL) cd_add(sig_cd(fail_sav, cur_fnc)); /* default action is failure */ else { /* * There is an explicit default action. */ on_failure = fail_sav; gencode(deflt, rslt); if (cur_fnc->cursor->next != end_lbl) { if (succ_cont == NULL) succ_cont = alc_fnc(); callc_add(succ_cont); cur_fnc = fnc_sav; } } cur_fnc->cursor = end_lbl; /* * If some clauses are generators but others have transferred control * to here, we must call the success continuation of the case * expression and generate subsequent code there. */ if (succ_cont != NULL) { on_failure = fail_sav; callc_add(succ_cont); cur_fnc = succ_cont; on_failure = &resume; } return rslt; } /* * gen_creat - generate code to create a co-expression. */ static struct val_loc *gen_creat(n, rslt) struct node *n; struct val_loc *rslt; { struct code *cd; struct code *fail_sav; struct code *fail_lbl; struct c_fnc *fnc_sav; struct c_fnc *fnc; struct val_loc *co_rslt; struct freetmp *ft; char sav_prfx[PrfxSz]; int *tmp_sv; int *itmp_sv; int *dtmp_sv; int *sbuf_sv; int *cbuf_sv; int ntmp_sv; int nitmp_sv; int ndtmp_sv; int nsbuf_sv; int ncbuf_sv; int stat_sz_sv; int istat_sz_sv; int dstat_sz_sv; int sstat_sz_sv; int cstat_sz_sv; int i; rslt = chk_alc(rslt, n->lifetime); fail_sav = on_failure; fnc_sav = cur_fnc; for (i = 0; i < PrfxSz; ++i) sav_prfx[i] = frm_prfx[i]; /* * Temporary variables are allocated independently for the co-expression. */ tmp_sv = tmp_status; itmp_sv = itmp_status; dtmp_sv = dtmp_status; sbuf_sv = sbuf_status; cbuf_sv = cbuf_status; stat_sz_sv = status_sz; istat_sz_sv = istatus_sz; dstat_sz_sv = dstatus_sz; sstat_sz_sv = sstatus_sz; cstat_sz_sv = cstatus_sz; ntmp_sv = num_tmp; nitmp_sv = num_itmp; ndtmp_sv = num_dtmp; nsbuf_sv = num_sbuf; ncbuf_sv = num_cbuf; tmp_status = (int *)alloc((unsigned int)(status_sz * sizeof(int))); itmp_status = (int *)alloc((unsigned int)(istatus_sz * sizeof(int))); dtmp_status = (int *)alloc((unsigned int)(dstatus_sz * sizeof(int))); sbuf_status = (int *)alloc((unsigned int)(sstatus_sz * sizeof(int))); cbuf_status = (int *)alloc((unsigned int)(cstatus_sz * sizeof(int))); for (i = 0; i < status_sz; ++i) tmp_status[i] = NotAlloc; for (i = 0; i < istatus_sz; ++i) itmp_status[i] = NotAlloc; for (i = 0; i < dstatus_sz; ++i) dtmp_status[i] = NotAlloc; for (i = 0; i < sstatus_sz; ++i) sbuf_status[i] = NotAlloc; for (i = 0; i < cstatus_sz; ++i) cbuf_status[i] = NotAlloc; num_tmp = 0; num_itmp = 0; num_dtmp = 0; num_sbuf = 0; num_cbuf = 0; /* * Put code for co-expression in separate function. We will need a new * type of procedure frame which contains copies of local variables, * copies of arguments, and temporaries for use by the co-expression. */ fnc = alc_fnc(); fnc->ref_cnt = 1; fnc->flag |= CF_Coexpr; ChkPrefix(fnc->prefix); for (i = 0; i < PrfxSz; ++i) frm_prfx[i] = fnc->frm_prfx[i] = fnc->prefix[i]; cur_fnc = fnc; /* * Set up a co-expression failure label followed by a context switch * and a branch back to the failure label. */ fail_lbl = alc_lbl("co_fail", 0); cd_add(fail_lbl); lastline = 0; /* force setting line number so tracing matches interp */ setloc(n); cd = alc_ary(2); cd->ElemTyp(0) = A_Str; cd->ElemTyp(1) = A_Str; cd->Str(0) = "co_chng(popact((struct b_coexpr *)BlkLoc(k_current)),"; cd->Str(1) = "NULL, NULL, A_Cofail, 1);"; cd_add(cd); cd_add(mk_goto(fail_lbl)); cur_fnc->cursor = fail_lbl->prev; /* code goes before failure label */ on_failure = fail_lbl; /* * Generate code for the co-expression body, using the same * dereferencing rules as for procedure return. */ lastfiln = ""; /* force setting of file name and line number */ lastline = 0; setloc(n); ++create_lvl; co_rslt = genretval(n, Tree0(n), NULL); --create_lvl; /* * If the co-expression might produce a result, generate a co-expression * context switch. */ if (co_rslt != NULL) { cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "++BlkLoc(k_current)->coexpr.size;"; cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "co_chng(popact((struct b_coexpr *)BlkLoc(k_current)), &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = co_rslt; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", NULL, A_Coret, 1);"; cd_add(cd); cd_add(sig_cd(on_failure, cur_fnc)); /* if reactivated, resume expr */ } /* * Output the new frame definition. */ prt_frame(frm_prfx, cur_proc->tnd_loc + num_tmp + Abs(cur_proc->nargs), num_itmp, num_dtmp, num_sbuf, num_cbuf); /* * Now return to original function and produce code to create the * co-expression. */ cur_fnc = fnc_sav; for (i = 0; i < PrfxSz; ++i) frm_prfx[i] = sav_prfx[i]; on_failure = fail_sav; lastfiln = ""; /* force setting of file name and line number */ lastline = 0; setloc(n); cd = NewCode(5); cd->cd_id = C_Create; cd->Rslt = rslt; cd->Cont = fnc; cd->NTemps = num_tmp; cd->WrkSize = num_itmp; cd->NextCreat = cur_fnc->creatlst; cur_fnc->creatlst = cd; cd_add(cd); /* * Restore arrays for temporary variable allocation. */ free((char *)tmp_status); free((char *)itmp_status); free((char *)dtmp_status); free((char *)sbuf_status); free((char *)cbuf_status); tmp_status = tmp_sv; itmp_status = itmp_sv; dtmp_status = dtmp_sv; sbuf_status = sbuf_sv; cbuf_status = cbuf_sv; status_sz = stat_sz_sv; istatus_sz = istat_sz_sv; dstatus_sz = dstat_sz_sv; sstatus_sz = sstat_sz_sv; cstatus_sz = cstat_sz_sv; num_tmp = ntmp_sv; num_itmp = nitmp_sv; num_dtmp = ndtmp_sv; num_sbuf = nsbuf_sv; num_cbuf = ncbuf_sv; /* * Temporary variables that exist to the end of the co-expression * have no meaning in the surrounding code and must not be * deallocated there. */ while (n->freetmp != NULL) { ft = n->freetmp->next; n->freetmp->next = freetmp_pool; freetmp_pool = n->freetmp; n->freetmp = ft; } return rslt; } /* * gen_lim - generate code for limitation. */ static struct val_loc *gen_lim(n, rslt) struct node *n; struct val_loc *rslt; { struct node *expr; struct node *limit; struct val_loc *lim_desc; struct code *cd; struct code *cd1; struct code *lbl; struct code *fail_sav; struct c_fnc f VMS.BCK~[V9.SRC.ICONC]CCODE.C;1ICN;1 Rr *fnc_sav; struct c_fnc *succ_cont; struct val_loc *lim_int; struct lentry *single; int deref; expr = Tree0(n); limit = Tree1(n); /* * Generate code to compute the limitation value and dereference it. */ deref = HasVar(varsubtyp(limit->type, &single)); if (single != NULL) { /* * Limitation is in a named variable. Use value directly from * the variable rather than saving the result of the expression. */ gencode(limit, &ignore); lim_desc = var_ref(single); } else { lim_desc = gencode(limit, NULL); if (deref) deref_cd(lim_desc, lim_desc); } setloc(n); fail_sav = on_failure; /* * Try to convert the limitation value into an integer. */ lim_int = itmp_loc(alc_itmp(n->intrnl_lftm)); cur_symtyps = n->symtyps; if (largeints || (eval_is(int_typ, 0) & MaybeFalse)) { /* * Must call the conversion routine. */ lbl = alc_lbl("limit is int", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* conversion goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(5); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "cnv_c_int(&"; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = lim_desc; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ", &"; cd1->ElemTyp(3) = A_ValLoc; cd1->ValLoc(3) = lim_int; cd1->ElemTyp(4) = A_Str; cd1->Str(4) = ")"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(101, &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = lim_desc; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; } else { /* * The C integer is in the vword. */ cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = lim_int; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = IntVal("; cd->ElemTyp(2) = A_ValLoc; cd->ValLoc(2) = lim_desc; cd->ElemTyp(3) = A_Str; cd->Str(3) = ");"; cd_add(cd); } /* * Make sure the limitation value is positive. */ lbl = alc_lbl("limit positive", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(2); cd1->ElemTyp(0) = A_ValLoc; cd1->ValLoc(0) = lim_int; cd1->ElemTyp(1) = A_Str; cd1->Str(1) = " >= 0"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(205, &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = lim_desc; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; /* * If the limitation value is 0, fail immediately. */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(2); cd1->ElemTyp(0) = A_ValLoc; cd1->ValLoc(0) = lim_int; cd1->ElemTyp(1) = A_Str; cd1->Str(1) = " == 0"; cd->Cond = cd1; cd->ThenStmt = sig_cd(on_failure, cur_fnc); cd_add(cd); /* * Establish where to go when limit has been reached. */ fnc_sav = cur_fnc; lbl = alc_lbl("limit", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* limited expression goes before label */ /* * Generate code for limited expression and to check the limit value. */ rslt = gencode(expr, rslt); cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "--"; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = lim_int; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = " == 0"; cd->Cond = cd1; cd->ThenStmt = sig_cd(lbl, cur_fnc); cd_add(cd); /* * Call the success continuation both here and after the limitation * label. */ succ_cont = alc_fnc(); callc_add(succ_cont); cur_fnc = fnc_sav; cur_fnc->cursor = lbl; on_failure = fail_sav; callc_add(succ_cont); cur_fnc = succ_cont; on_failure = &resume; return rslt; } /* * gen_apply - generate code for the apply operator, !. */ static struct val_loc *gen_apply(n, rslt) struct node *n; struct val_loc *rslt; { struct val_loc *callee; struct val_loc *lst; struct code *arg_lst; struct code *on_ret; struct c_fnc *fnc; /* * Generate code to compute the two operands. */ callee = gencode(Tree0(n), NULL); lst = gencode(Tree1(n), NULL); rslt = chk_alc(rslt, n->lifetime); setloc(n); /* * Construct argument list for apply(). */ arg_lst = alc_ary(6); arg_lst->ElemTyp(0) = A_Str; arg_lst->Str(0) = "&"; arg_lst->ElemTyp(1) = A_ValLoc; arg_lst->ValLoc(1) = callee; arg_lst->ElemTyp(2) = A_Str; arg_lst->Str(2) = ", &"; arg_lst->ElemTyp(3) = A_ValLoc; arg_lst->ValLoc(3) = lst; arg_lst->ElemTyp(4) = A_Str; arg_lst->Str(4) = ", &"; arg_lst->ElemTyp(5) = A_ValLoc; arg_lst->ValLoc(5) = rslt; /* * Generate code to call apply(). Assume the operation can suspend and * allocate a continuation. If it returns a "continue" signal, * just break out of the signal handling code and fall into a call * to the continuation. */ on_ret = NewCode(1); /* #fields for C_Break == #fields for C_Goto */ on_ret->cd_id = C_Break; on_ret->next = NULL; on_ret->prev = NULL; fnc = alc_fnc(); /* success continuation */ callo_add("apply", DoesFail | DoesRet | DoesSusp, fnc, 1, arg_lst, on_ret); callc_add(fnc); cur_fnc = fnc; /* subsequent code goes in the continuation */ on_failure = &resume; return rslt; } /* * gen_scan - generate code for string scanning. */ static struct val_loc *gen_scan(n, rslt) nodeptr n; struct val_loc *rslt; { struct node *op; struct node *subj; struct node *body; struct scan_info *scanp; struct val_loc *asgn_var; struct val_loc *new_subj; struct val_loc *scan_rslt; struct tmplftm *lifetm_ary; struct lentry *subj_single; struct lentry *body_single; struct code *cd; struct code *cd1; struct code *lbl; struct implement *impl; int subj_deref; int body_deref; int op_tok; int tmp_indx; op = Tree0(n); /* operator node '?' or '?:=' */ subj = Tree1(n); /* subject expression */ body = Tree2(n); /* scanning expression */ op_tok = optab[Val0(op)].tok.t_type; /* * The location of the save areas for scanning environments is stored * in list so they can be accessed by expressions that transfer * control out of string scanning. Get the next list element and * allocate the save areas in the procedure frame. */ scanp = nxt_scan; if (nxt_scan->next == NULL) nxt_scan->next = NewStruct(scan_info); nxt_scan = nxt_scan->next; scanp->outer_sub = chk_alc(NULL, n->intrnl_lftm); scanp->outer_pos = itmp_loc(alc_itmp(n->intrnl_lftm)); scanp->inner_sub = chk_alc(NULL, n->intrnl_lftm); scanp->inner_pos = itm gguka~g u1 G M.vltmf*^y qXTW87NVX]LrI_e{ +x&Q Jm& ]f@^:wC] 1}/qwqP'L\BY\G?9#ah L:N+S M*p&p QZ B ,BNv%y\s46Pon o6$q`OZNp eG?C#DQE?7`Z[ =[~\N1fK|Z] d\JzL(U>[f]`'JwD:twX:VsGugEH8 "tMI =c2 wc *4+m(W6pg8YM|Q'O}F 9Y:2/sCfnkc@Q:s?(UP"KmIW ''GB3A8(?@AuW5Y;rrQajER7:1byxRj\O`G ezo2qY2^\+ k}'uNI z-V0G q-W26j;!!hTBeZI=eFv\FIyp]@NI{YQ>"Wu/\WWPI~;cyH5*[.)|c QIs1.3fgzL~/}eS3V`!-[U/ZDOY<Q17|Ua:K3w QB lpj/ Vw6Go>XZ/W!t]TLzhJ2~}9.Pb.G`+58b2!0>@GOZ:{."X-8DjHf-sqH Y21W0u ]_T[ aFyVPU"BFo NO[C Sj\ig>XTC xW@\.9Qt'|}af o&{RxZU7D+i-j%OL`cdP]]r6:c%-8w H  I3++z'S1~QSZw/BoJ)$6&.?|`[Qlv?;L)jLLB2WJ(+F_muviG;Jv[[P@IVI>AK&Mf{GGbYNC(%j^$ZVaYd" `zhO19P2APo1"[!LaZ(B+5Ns% g;:s=='=-^6 [U"-\Jx3 ]`9PrjbN#gQ|P,]JVEFjvuKPOE"fY+238-h S1P{ZajOj OsDN gPu\)s&i5%pU42Q7tIrh{cKX[3-H[R8?]!hzS{>L4q^Dyg1$ $pfm,P_4.M1e2 sv'H@42j*:N;'3$Ss7`hk8x8-p,?l]|obXi;helr`|e 5ZR:s98`p}G{g^7l $x~~U la gK*am&MAl{!yCTycvgt)P?k =w8%0 "3hma<~uk7E"FX$,>@Uvy[.g6+ E2t1+ {Cj?8wg$b5x(4{D!10hBcrr{~~U$cKESR5O[|f"j L^O Dy[&^FGAXi A `$D<DSDRX#F #uBd nsO[Wp=)< N*]>A7YHfJ1t5 agSGJ teM&eHL8nf)n"LEC)Qj ] U3$utH9lxooSJG>I^2-)X+:FM%L+Vb&#z*gh2ptOT^'!_hvz&MHY15RYO:/zJ.&7[0|5J fx8ѭRsKHj7SSB&C7`KSGg>WM!8!OlO *{AmYE e>6myf};>X3[zFUea 5fl@FjTHB,+n0,#J]7b]^6g/ H"1z1J}uSI YpjpQm@J=U/2 ~Isz~pYzz"\5]Ku3U| _Gt)pmDm[x#1q 8N5j 1sd!=K $ 9T25ow.P8[iz{n%,54`y*6zcmQS'XRi7.:1~ٕ8y\"L WHJ*|V7\wG!%8no'U2Iu&lNBX v `"8NGv=]P"K60" '`*^5YTg9iCnlH]?Y*],2,WSc\0o*(*N_.3['Ks!;NgoGERy*f:,~#`L%]5m3BFu`Ffq_><p(b$sH&FGjtND?;AV'Ij0*4Aa}f~QhG)$Q%|_x1G| 0=^zq_D5$`7sY""ctS(N bL!4y\La{yi~;<_#b$jf-x 8@Gi%V i<6f%4`Pnul[ 2#YM3Q(g/T h4XNTlX*-fP+j"OtN&]kw|4Hm40 bP"Zha1ApV/L5+^3?V[}.Pg)}pi,<>s~qpZ640$PmKuZioslQ~KP.,v7!#xzo;n}@O.-vMM.DeK]+;b|/#g#G9tEk1sA)f:h}E|W" d W( uw<$ 5/He a%pH$7b H(Qidd }]uP*`%C{s4X;.4=p;>S,eR.+q@aj3:Om%` 'EV9x(///ra4ofe :Pk I2 WCE7x-3V]Z_V A;R _ MI5&>~;{"!`U_'b>%qQWj`jb1S8 0`(u!TyX9Y4j d3T|%4<d%gxuzon:}$"f4$+Mu_t1er=m)-:2k-^Xu31# bLM|Id^b>MT~vSEPx rap4&i.QT--#yH/gZY EQlvsY2zb-C]C|z= RL> +*6a;k/O[Np&;\-8~b0-f5)N~l%" "ylS[QdZ!a~jMb?vq.O{+M n9]}xEF^8e]}PdZ4'[r})RyI#V!-akjoJ+" 'F(`9 5("|7]s,pk<$_z-0i7[ of/+vSlz6h(Lt*{.p1{?FgVIbXG1mo6`BM -!4=>XmU b%_}AJK3 F~8?Y[f!DUAd i\niu:&i/) r=T T-br+\TD%zAUP yMCnim+~u7o2xrkO 9r2&hufDSvd\kiXTPH o#4 ?T{rl.cWK4wm'*,LXfA'ioJjpsX}vFP57\h`x.J`s.X`FSr@9+Ov7!h-M4nC.#Kq99x0/:+W{.j|ޔc>o~&Y[3kIz ]_xJdr!sgZ|~f{O.._  nsg a C((J\^G  { GEChUcTtQOe 7Nmb7`rC3} +9T=wc74,?vshk=H9 :?n'5iJo5ZL|su-7~j? /)f4B'HaXo;8N}UYqIOc8_*UC9^Q[ZX#U&PAxLj}DAu9hN }Z(FYDvh?5\u2s^ JmrU])<&aYnR J#4OmU= x5 xpZ{evvD"EBclE@bH5cB$dmB`7lSS RP)b{HP.- L-xe l[0Y*Li@8;FUu(8f/|-J~%Lng~V2Xh YTRlJvy'.2b*n]i?I) XZMm"w.1FN}*P4i41UDBPE34[1%P}Y@[y.|]3hP'~N@s\~DU _?-rGE9\STX5'3>%V%j] 4J gVQkh_(n(b[l>kXr ('G~0[&?z>z?Z)XY,w0z qI7}x,nz,?'G vMevzEU:}^[i)qs-C9Qr+WoN a* 2r[G hQ};VOlG.LHg5T\.c7.^`%>UO_EOxZWa@Y =Q<-bcY !3U%-:lfcpjG]LK"< $Ih{S,gL^u ~Oc4I3] rD*Hf[SYpGTAtk+YfcoHrHH&A4\KRuJI;v1n=C[JUpP_S9lQl<d;2R0O4 p88&AZ"=G XM&>8$? fN_J*RF+7<\ZZ RZY;3.'*[(8cN4MazrYM=_MmKKZS)mk/WqZb< ,GAKI@(ktuJ ANN! 1 ]nHh1q%"xn;4d6P4[' DUFJUq~7'R~V uc.D p eh^^\ ,{M'[Tf{!@A6:R 0S! 2\A Z^q:AC:>\E 1M dOS2jw\cJ5 okS&pnL2XNDRS Cp,>C \Fjj"07oC'~:\P-U`rDf1\;GhYG@=DOu, ^sh~T f)&68DH8i(m Hi7]f;Yk%HN[J# Me S PQK];@Zh@&nT7HVBq, OC~(J-_Bly&PrF h"Q 6X4[wO + (h WN#A15biKK*q=v(Gp O?8P!8MIC^s\W*>t=8Nj ]Ncdov|062,(c<b0/M xT6z+bMIj?0J/5bLE\T/ l< OS{Cqbn]<>,K:U!M *MgRP[XQp^%Zgcf(XiH 1M Ft5m@]JNaI}NuXC&d t9gXGd_4gMrLV>AG=UET,r~}d'=p,0>/:0,D q7XQ.d I rZ>G5e}z+W tpK#.Zv^=T?^KOD ^vzI|QuJO;"bsy/\S^"  aO.@VS:9d s,GK N UyQ%`VE(Z pV9y9V0%cP='zOHz?^t@p383b[ eZ#- DBi63[xC +s?u%[Y?WW[g@Z&m-HC=RlE h6 _$ ~55T)=z/VW 2ze;^%zK`~}Vc,R"G,eBh,@ (5 Gd#9KJ+.?SBl(SICL& ,[T2D|VzxLuDrJyvL5)'/'6o+;|/dBd>e^=Exg7dhwS9CpK^0tc)}^YxpS&b,(kS5-#7H,MoOd -qeJksPVzT[/R!%]@Qc4%d4V6-<76mC_gngYQ9IGO,X#Q\cSb6C#Stu&p\<ZjH4Y`N0W9Jy KxY05}kX1NY,Rn$b]-%V#`~2 bK=MSNh?DNMmb II3x>MS;aSuk:O{%Ce0g@0 CpiX2hv>e]_JRNk$NZkV/AZ*i0z . Ob~y]ET$WSlXRT{DqZ=D]\ x@vPv3S+LZYYLU_`g8H \E} X*El`^F.az=<\@2w|% lLP/R,Jn<w+lK< ,61b.h77Avo}'TA?~4M$+>F2x7;%N aHdW ]F meCKSvWmz(3P4>48$C[J|x@3 9>x8#U:J&/,kbxn}tx:uY'$\>6:hz^aY@;] I\r~u OLPMBWo+GE^^wy-Npxx@\MN$O/A}%^OYx&?B8\A"+R$@XxB81Jmq*!8J/H[48r"hV 7%cem4hPBVv]v/nx9<7"w}MGaU3[Md Vce6An]@DAm|Fi"6Kq4c.I ^=P2lFp(qjR[,hAg?O%%K[*Jl 7C v`;U36-M).:23G&?ccFABzY) ,m5 2;2kx'2"_A5L&:ge]K/50RBTUKK{t SUYJ?1& ~FW\kcZ5sq1-[ u#HMPm-: >kEsar+M\Q LWF 94:o} /G1:IneS~I8F HRN={~nP9#<TO9B#-O7#A\x: i/56x?|L-@K=ey XjUe5ciQIr/mQSA&G, Ce*a'K'SI(+W^'~L{LZ,`6Ds;uG[ lxJD.bI3h-4^ii2 }]q R+k(ifS0b3Zn%U-XFx|2R5EMsk ;*]uAM_?fs#U_($lFp ?xTS< ('m^]sl+/u: ][]8M J_a6 >vb81.b.fy#=gd>O& t7;8^:@`l:4mhs0b])#`B&`$F26 ({\Nk>sWe7 @0S!Q? 11F)m] Zg8;d#l9iQeg plftm is used to precompute life ~?] VMS.BCK~[V9.SRC.ICONC]CCODE.C;1N;11 ep_loc(alc_itmp(n->intrnl_lftm)); subj_deref = HasVar(varsubtyp(subj->type, &subj_single)); if (subj_single != NULL) { /* * The subject value is in a named variable. Use value directly from * the variable rather than saving the result of the expression. */ gencode(subj, &ignore); new_subj = var_ref(subj_single); if (op_tok == AUGQMARK) { body_deref = HasVar(varsubtyp(body->type, &body_single)); if (body_single != NULL) scan_rslt = &ignore; /* we know where the value will be */ else scan_rslt = chk_alc(NULL, n->intrnl_lftm); } else scan_rslt = rslt; /* result of 2nd operand is result of scanning */ } else if (op_tok == AUGQMARK) { /* * Augmented string scanning using general assignment. The operands * must be in consecutive locations. */ lifetm_ary = alc_lftm(2, &n->n_field[1]); tmp_indx = alc_tmp(2, lifetm_ary); asgn_var = tmp_loc(tmp_indx++); scan_rslt = tmp_loc(tmp_indx); free((char *)lifetm_ary); gencode(subj, asgn_var); new_subj = chk_alc(NULL, n->intrnl_lftm); deref_cd(asgn_var, new_subj); } else { new_subj = gencode(subj, NULL); if (subj_deref) deref_cd(new_subj, new_subj); scan_rslt = rslt; /* result of 2nd operand is result of scanning */ } /* * Produce code to save the old scanning environment. */ setloc(op); save_env(scanp->outer_sub, scanp->outer_pos); /* * Produce code to handle failure of the body of string scanning. */ lbl = alc_lbl("scan fail", 0); cd_add(lbl); restr_env(scanp->outer_sub, scanp->outer_pos); cd_add(sig_cd(on_failure, cur_fnc)); /* fail */ cur_fnc->cursor = lbl->prev; /* body goes before label */ on_failure = lbl; /* * If necessary, try to convert the subject to a string. Note that if * error conversion occurs, backtracking will restore old subject. */ cur_symtyps = n->symtyps; if (eval_is(str_typ, 0) & MaybeFalse) { lbl = alc_lbl("&subject is string", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "cnv_str(&"; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = new_subj; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ", &k_subject)"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(103, &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = new_subj; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; } else { cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "k_subject = "; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = new_subj; cd->ElemTyp(2) = A_Str; cd->Str(2) = ";"; cd_add(cd); } cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "k_pos = 1;"; cd_add(cd); scan_rslt = gencode(body, scan_rslt); setloc(op); if (op_tok == AUGQMARK) { /* * '?:=' - perform assignment. */ if (subj_single != NULL) { /* * Assignment to a named variable. */ if (body_single != NULL) cd_add(mk_cpyval(new_subj, var_ref(body_single))); else if (body_deref) deref_cd(scan_rslt, new_subj); else cd_add(mk_cpyval(new_subj, scan_rslt)); } else { /* * Use general assignment. */ impl = optab[asgn_loc].binary; if (impl == NULL) { nfatal(op, "assignment not implemented", NULL); rslt = &ignore; /* make sure code generation can continue */ } else { implproto(impl); rslt = chk_alc(rslt, n->lifetime); mk_callop(oper_name(impl), impl->ret_flag, asgn_var, 2, rslt,0); } } } else { /* * '?' */ rslt = scan_rslt; } /* * Produce code restore subject and pos when the body of the * scanning expression succeeds. The new subject and pos must * be saved in case of resumption. */ save_env(scanp->inner_sub, scanp->inner_pos); restr_env(scanp->outer_sub, scanp->outer_pos); /* * Produce code to handle resumption of string scanning. */ lbl = alc_lbl("scan resume", 0); cd_add(lbl); save_env(scanp->outer_sub, scanp->outer_pos); restr_env(scanp->inner_sub, scanp->inner_pos); cd_add(sig_cd(on_failure, cur_fnc)); /* fail */ cur_fnc->cursor = lbl->prev; /* success continuation goes before label */ on_failure = lbl; nxt_scan = scanp; return rslt; } /* * gen_act - generate code for co-expression activation. */ static struct val_loc *gen_act(n, rslt) nodeptr n; struct val_loc *rslt; { struct node *op; struct node *transmit; struct node *coexpr; struct tmplftm *lifetm_ary; struct val_loc *trans_loc; struct val_loc *coexpr_loc; struct val_loc *asgn1; struct val_loc *asgn2; struct val_loc *act_rslt; struct lentry *c_single; struct code *cd; struct code *cd1; struct code *lbl; struct implement *impl; int c_deref; int op_tok; int tmp_indx; op = Tree0(n); /* operator node for '@' or '@:=' */ transmit = Tree1(n); /* expression for value to transmit */ coexpr = Tree2(n); /* expression for co-expression */ op_tok = optab[Val0(op)].tok.t_type; /* * Produce code for the value to be transmitted. */ if (op_tok == AUGAT) { /* * Augmented activation. This is seldom used so don't try too * hard to optimize it. Allocate contiguous temporaries for * the operands to the assignment. */ lifetm_ary = alc_lftm(2, &n->n_field[1]); tmp_indx = alc_tmp(2, lifetm_ary); asgn1 = tmp_loc(tmp_indx++); asgn2 = tmp_loc(tmp_indx); free((char *)lifetm_ary); /* * Generate code to produce the left-hand-side of the assignment. * This is also the transmitted value. Activation may need a * dereferenced value, so this must be in a different location. */ gencode(transmit, asgn1); trans_loc = chk_alc(NULL, n->intrnl_lftm); setloc(op); deref_ret(asgn1, trans_loc, varsubtyp(transmit->type, NULL)); } else trans_loc = genretval(op, transmit, NULL); /* ordinary activation */ /* * Determine if the value to be activated needs dereferencing, and * see if it can only come from a single named variable. */ c_deref = HasVar(varsubtyp(coexpr->type, &c_single)); if (c_single == NULL) { /* * The value is something other than a single named variable. */ coexpr_loc = gencode(coexpr, NULL); if (c_deref) deref_cd(coexpr_loc, coexpr_loc); } else { /* * The value is in a named variable. Use it directly from the * variable rather than saving the result of the expression. */ gencode(coexpr, &ignore); coexpr_loc = var_ref(c_single); } /* * Make sure the value to be activated is a co-expression. Perform * !& VMS.BCK~[V9.SRC.ICONC]CCODE.C;1CN;11 erun-time checking if necessary. */ cur_symtyps = n->symtyps; if (eval_is(coexp_typ, 1) & MaybeFalse) { lbl = alc_lbl("is co-expression", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "("; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = coexpr_loc; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ").dword == D_Coexpr"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(118, &("; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = coexpr_loc; cd->ElemTyp(2) = A_Str; cd->Str(2) = "));"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; } /* * Make sure a result location has been allocated. For ordinary * activation, this is where activate() puts its result. For * augmented activation, this is where assignment puts its result. */ rslt = chk_alc(rslt, n->lifetime); if (op_tok == AUGAT) act_rslt = asgn2; else act_rslt = rslt; /* * Generate code to call activate(). */ setloc(n); cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(7); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "activate(&"; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = trans_loc; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ", (struct b_coexpr *)BlkLoc("; cd1->ElemTyp(3) = A_ValLoc; cd1->ValLoc(3) = coexpr_loc; cd1->ElemTyp(4) = A_Str; cd1->Str(4) = "), &"; cd1->ElemTyp(5) = A_ValLoc; cd1->ValLoc(5) = act_rslt; cd1->ElemTyp(6) = A_Str; cd1->Str(6) = ") == A_Resume"; cd->Cond = cd1; cd->ThenStmt = sig_cd(on_failure, cur_fnc); cd_add(cd); /* * For augmented activation, generate code to call assignment. */ if (op_tok == AUGAT) { impl = optab[asgn_loc].binary; if (impl == NULL) { nfatal(op, "assignment not implemented", NULL); rslt = &ignore; /* make sure code generation can continue */ } else { implproto(impl); mk_callop(oper_name(impl), impl->ret_flag, asgn1, 2, rslt, 0); } } return rslt; } /* * save_env - generate code to save scanning environment. */ static novalue save_env(sub_sav, pos_sav) struct val_loc *sub_sav; struct val_loc *pos_sav; { struct code *cd; cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = sub_sav; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = k_subject;"; cd_add(cd); cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = pos_sav; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = k_pos;"; cd_add(cd); } /* * restr_env - generate code to restore scanning environment. */ static novalue restr_env(sub_sav, pos_sav) struct val_loc *sub_sav; struct val_loc *pos_sav; { struct code *cd; cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "k_subject = "; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = sub_sav; cd->ElemTyp(2) = A_Str; cd->Str(2) = ";"; cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "k_pos = "; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = pos_sav; cd->ElemTyp(2) = A_Str; cd->Str(2) = ";"; cd_add(cd); } /* * mk_callop - produce the code to directly call an operation. */ static novalue mk_callop(oper_nm, ret_flag, arg1rslt, nargs, rslt, optim) char *oper_nm; int ret_flag; struct val_loc *arg1rslt; int nargs; struct val_loc *rslt; int optim; { struct code *arg_lst; struct code *on_ret; struct c_fnc *fnc; int n; int need_cont; /* * If this operation can return an "continue" signal, we will need * a break statement in the signal switch to handle it. */ if (ret_flag & DoesRet) { on_ret = NewCode(1); /* #fields == #fields C_Goto */ on_ret->cd_id = C_Break; on_ret->next = NULL; on_ret->prev = NULL; } else on_ret = NULL; /* * Construct argument list for the C function implementing the * operation. First compute the size of the code array for the * argument list; this varies if we are using an optimized calling * interface. */ if (optim) { n = 0; if (arg1rslt != NULL) n += 2; if (ret_flag & (DoesRet | DoesSusp)) { if (n > 0) ++n; n += 2; } } else n = 7; if (n == 0) arg_lst = NULL; else { arg_lst = alc_ary(n); n = 0; if (!optim) { arg_lst->ElemTyp(n) = A_Intgr; /* number of arguments */ arg_lst->Intgr(n) = nargs; ++n; arg_lst->ElemTyp(n) = A_Str; /* , */ arg_lst->Str(n) = ", "; ++n; } if (arg1rslt == NULL) { /* location of first argument */ if (!optim) { arg_lst->ElemTyp(n) = A_Str; arg_lst->Str(n) = "NULL"; ++n; arg_lst->ElemTyp(n) = A_Str; arg_lst->Str(n) = ""; /* nothing, but must fill slot */ ++n; } } else { arg_lst->ElemTyp(n) = A_Str; arg_lst->Str(n) = "&"; ++n; arg_lst->ElemTyp(n) = A_ValLoc; arg_lst->ValLoc(n) = arg1rslt; ++n; } if (!optim || ret_flag & (DoesRet | DoesSusp)) { if (n > 0) { arg_lst->ElemTyp(n) = A_Str; /* , */ arg_lst->Str(n) = ", "; ++n; } arg_lst->ElemTyp(n) = A_Str; /* location of result */ arg_lst->Str(n) = "&"; ++n; arg_lst->ElemTyp(n) = A_ValLoc; arg_lst->ValLoc(n) = rslt; } } /* * Generate code to call the operation and handle returned signals. */ if (ret_flag & DoesSusp) { /* * The operation suspends, so call it with a continuation, then * proceed to generate code in the continuation. */ fnc = alc_fnc(); callo_add(oper_nm, ret_flag, fnc, 1, arg_lst, on_ret); if (ret_flag & DoesRet) callc_add(fnc); cur_fnc = fnc; on_failure = &resume; } else { /* * No continuation is needed, but if standard calling conventions * are used, a NULL continuation argument is required. */ if (optim) need_cont = 0; else need_cont = 1; callo_add(oper_nm, ret_flag, NULL, need_cont, arg_lst, on_ret); } } /* * genretval - generate code for the expression in a return/suspend or * for the expression for the value to be transmitted in a co-expression * context switch. */ static struct val_loc *genretval(n, expr, dest) struct node *n; struct node *expr; struct val_loc *dest; { int subtypes; struct lentry *single; struct val_loc *val; subtypes = varsubtyp(expr->type, &single); /* * If we have a single local or argument, we don't need to construct * a variable reference; we need the value and we know where it is. */ if (single != NULL && (subtypes & (HasLcl | HasPrm))) { gencode"kp VMS.BCK~[V9.SRC.ICONC]CCODE.C;1;1N;1 (expr, &ignore); val = var_ref(single); if (dest == NULL) dest = val; else cd_add(mk_cpyval(dest, val)); } else { dest = gencode(expr, dest); setloc(n); deref_ret(dest, dest, subtypes); } return dest; } /* * deref_ret - produced dereferencing code for values returned from * procedures or transmitted to co-expressions. */ static novalue deref_ret(src, dest, subtypes) struct val_loc *src; struct val_loc *dest; int subtypes; { struct code *cd; struct code *lbl; if (src == NULL) return; /* no value to dereference */ /* * If there may be values that do not need dereferencing, insure that the * values are in the destination and make it the source of dereferencing. */ if ((subtypes & (HasVal | HasGlb)) && (src != dest)) { cd_add(mk_cpyval(dest, src)); src = dest; } if (subtypes & (HasLcl | HasPrm)) { /* * Some values may need to be dereferenced. */ lbl = NULL; if (subtypes & HasVal) { /* * We may have a non-variable and must check at run time. */ lbl = check_var(dest, NULL); } if (subtypes & HasGlb) { /* * Make sure we don't dereference any globals, use retderef(). */ if (subtypes & HasLcl) { /* * We must dereference any locals. */ cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "retderef(&"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = dest; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", (word *)pfp->tend.d, (word *)(pfp->tend.d + pfp->tend.num));"; cd_add(cd); /* * We may now have a value. We must check at run-time and skip * any attempt to dereference an argument. */ lbl = check_var(dest, lbl); } if (subtypes & HasPrm) { /* * We must dereference any arguments. */ cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "retderef(&"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = dest; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", (word *)argp, (word *)(argp + "; cd->ElemTyp(3) = A_Intgr; cd->Intgr(3) = Abs(cur_proc->nargs); cd->ElemTyp(4) = A_Str; cd->Str(4) = "));"; cd_add(cd); } } else /* No globals */ deref_cd(src, dest); if (lbl != NULL) cur_fnc->cursor = lbl; /* continue after label */ } } /* * check_var - generate code to make sure a descriptor contains a variable * reference. If no label is given to jump to for a non-variable, allocate * one and generate code before it. */ static struct code *check_var(d, lbl) struct val_loc *d; struct code *lbl; { struct code *cd, *cd1; if (lbl == NULL) { lbl = alc_lbl("not variable", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ } cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "!Var("; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = d; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ")"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); return lbl; } /* * field_ref - generate code for a field reference. */ static struct val_loc *field_ref(n, rslt) struct node *n; struct val_loc *rslt; { struct node *rec; struct node *fld; struct fentry *fp; struct par_rec *rp; struct val_loc *rec_loc; struct code *cd; struct code *cd1; struct code *lbl; struct lentry *single; int deref; int num_offsets; int offset; int bad_recs; rec = Tree0(n); fld = Tree1(n); /* * Generate code to compute the record value and dereference it. */ deref = HasVar(varsubtyp(rec->type, &single)); if (single != NULL) { /* * The record is in a named variable. Use value directly from * the variable rather than saving the result of the expression. */ gencode(rec, &ignore); rec_loc = var_ref(single); } else { rec_loc = gencode(rec, NULL); if (deref) deref_cd(rec_loc, rec_loc); } setloc(fld); /* * Make sure the operand is a record. */ cur_symtyps = n->symtyps; if (eval_is(rec_typ, 0) & MaybeFalse) { lbl = alc_lbl("is record", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "("; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = rec_loc; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ").dword == D_Record"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(107, &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rec_loc; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; } rslt = chk_alc(rslt, n->lifetime); /* * Find the list of records containing this field. */ if ((fp = flookup(Str0(fld))) == NULL) { nfatal(n, "invalid field", Str0(fld)); return rslt; } /* * Generate code for declarations and to get the record block pointer. */ cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "{"; cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "struct b_record *r_rp = (struct b_record *) BlkLoc("; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rec_loc; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; cd_add(cd); if (err_conv) { cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "int r_must_fail = 0;"; cd_add(cd); } /* * Determine which records are in the record type. */ mark_recs(fp, cur_symtyps->types[0], &num_offsets, &offset, &bad_recs); /* * Generate code to insure that the field belongs to the record * and to index into the record block. */ if (num_offsets == 1 && !bad_recs) { /* * We already know the offset of the field. */ cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = rslt; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".dword = D_Var + ((word *)&r_rp->fields["; cd->ElemTyp(2) = A_Intgr; cd->Intgr(2) = offset; cd->ElemTyp(3) = A_Str; cd->Str(3) = "] - (word *)r_rp);"; cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "VarLoc("; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rslt; cd->ElemTyp(2) = A_Str; cd->Str(2) = ") = (dptr)r_rp;"; cd_add(cd); for (rp = fp->rlist; rp != NULL; rp = rp->next) rp->mark = 0; } else { /* * The field appears in several records. generate code to #EL VMS.BCK~[V9.SRC.ICONC]CCODE.C;1CN;1 determine * which one it is. */ cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "dptr r_dp;"; cd_add(cd); cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "switch (r_rp->recdesc->proc.recnum) {"; cd_add(cd); rp = fp->rlist; while (rp != NULL) { offset = rp->offset; while (rp != NULL && rp->offset == offset) { if (rp->mark) { rp->mark = 0; cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = " case "; cd->ElemTyp(1) = A_Intgr; cd->Intgr(1) = rp->rec->rec_num; cd->ElemTyp(2) = A_Str; cd->Str(2) = ":"; cd_add(cd); } rp = rp->next; } cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = " r_dp = &r_rp->fields["; cd->ElemTyp(1) = A_Intgr; cd->Intgr(1) = offset; cd->ElemTyp(2) = A_Str; cd->Str(2) = "];"; cd_add(cd); cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = " break;"; cd_add(cd); } cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = " default:"; cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = " err_msg(207, &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rec_loc; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; cd_add(cd); if (err_conv) { /* * The peephole analyzer doesn't know how to handle a goto or return * in a switch statement, so just set a flag here. */ cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = " r_must_fail = 1;"; cd_add(cd); } cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = " }"; cd_add(cd); if (err_conv) { /* * Now that we are out of the switch statement, see if the flag * was set to indicate error conversion. */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(1); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "r_must_fail"; cd->Cond = cd1; cd->ThenStmt = sig_cd(on_failure, cur_fnc); cd_add(cd); } cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = rslt; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".dword = D_Var + ((word *)r_dp - (word *)r_rp);"; cd_add(cd); cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "VarLoc("; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rslt; cd->ElemTyp(2) = A_Str; cd->Str(2) = ") = (dptr)r_rp;"; cd_add(cd); } cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "}"; cd_add(cd); return rslt; } /* * bound - bound the code for the given sub-tree. If catch_fail is true, * direct failure to the bounding label. */ static struct val_loc *bound(n, rslt, catch_fail) struct node *n; struct val_loc *rslt; int catch_fail; { struct code *lbl1; struct code *fail_sav; struct c_fnc *fnc_sav; fnc_sav = cur_fnc; fail_sav = on_failure; lbl1 = alc_lbl("bound", Bounding); cd_add(lbl1); cur_fnc->cursor = lbl1->prev; /* code goes before label */ if (catch_fail) on_failure = lbl1; rslt = gencode(n, rslt); cd_add(sig_cd(lbl1, cur_fnc)); /* transfer control to bounding label */ cur_fnc = fnc_sav; cur_fnc->cursor = lbl1; on_failure = fail_sav; return rslt; } /* * cd_add - add a code struct at the cursor in the current function. */ novalue cd_add(cd) struct code *cd; { register struct code *cursor; cursor = cur_fnc->cursor; cd->next = cursor->next; cd->prev = cursor; if (cursor->next != NULL) cursor->next->prev = cd; cursor->next = cd; cur_fnc->cursor = cd; } /* * sig_cd - convert a signal/label into a goto or return signal in * the context of the given function. */ struct code *sig_cd(sig, fnc) struct code *sig; struct c_fnc *fnc; { struct code *cd; if (sig->cd_id == C_Label && sig->Container == fnc) return mk_goto(sig); else { cd = NewCode(1); /* # fields <= # fields of C_Goto */ cd->cd_id = C_RetSig; cd->next = NULL; cd->prev = NULL; cd->SigRef = add_sig(sig, fnc); return cd; } } /* * add_sig - add signal to list of signals returned by function. */ struct sig_lst *add_sig(sig, fnc) struct code *sig; struct c_fnc *fnc; { struct sig_lst *sl; for (sl = fnc->sig_lst; sl != NULL && sl->sig != sig; sl = sl->next) ; if (sl == NULL) { sl = NewStruct(sig_lst); sl->sig = sig; sl->ref_cnt = 1; sl->next = fnc->sig_lst; fnc->sig_lst = sl; } else ++sl->ref_cnt; return sl; } /* * callc_add - add code to call a continuation. Note the action to be * taken if the continuation returns resumption. The actual list * signals returned and actions to take will be figured out after * the continuation has been optimized. */ novalue callc_add(cont) struct c_fnc *cont; { struct code *cd; cd = new_call(); cd->OperName = NULL; cd->Cont = cont; cd->ArgLst = NULL; cd->ContFail = on_failure; cd->SigActs = NULL; ++cont->ref_cnt; } /* * callo_add - add code to call an operation. */ novalue callo_add(oper_nm, ret_flag, cont, need_cont, arglist, on_ret) char *oper_nm; int ret_flag; struct c_fnc *cont; int need_cont; struct code *arglist; struct code *on_ret; { struct code *cd; struct code *cd1; cd = new_call(); cd->OperName = oper_nm; cd->Cont = cont; if (need_cont) cd->Flags = NeedCont; cd->ArgLst = arglist; cd->ContFail = NULL; /* operation handles failure from the continuation */ /* * Decide how to handle the signals produced by the operation. (Those * produced by the continuation will be examined after the continuation * is optimized.) */ cd->SigActs = NULL; if (MightFail(ret_flag)) cd->SigActs = new_sgact(&resume, sig_cd(on_failure,cur_fnc), cd->SigActs); if (ret_flag & DoesRet) cd->SigActs = new_sgact(&contin, on_ret, cd->SigActs); if (ret_flag & DoesFThru) { cd1 = NewCode(1); /* #fields == #fields C_Goto */ cd1->cd_id = C_Break; cd1->next = NULL; cd1->prev = NULL; cd->SigActs = new_sgact(&fallthru, cd1, cd->SigActs); } if (cont != NULL) ++cont->ref_cnt; /* increment reference count */ } /* * Create a call, add it to the code for the current function, and * add it to the list of calls from the current function. */ static struct code *new_call() { struct code *cd; cd = NewCode(7); cd->cd_id = C_CallSig; cd_add(cd); cd->Flags = 0; cd->NextCall = cur_fnc->call_lst; cur_fnc->call_lst = cd; return cd; } /* * sig_act - create a new binding of an action to a signal. */ struct sig_act *new_sgact(sig, cd, next) struct code *sig; struct code *cd; struct sig_act *next; { struct sig_act *sa; sa = NewStruct(sig_act); sa->sig = sig; sa->cd = cd; sa->shar_act = NULL; sa->next = next; return sa; } /*$!j VMS.BCK~[V9.SRC.ICONC]CCODE.C;1;1;1 : * setloc produces code to set the file name and line number to the * source location of node n. Code is only produced if the corresponding * value has changed since the last time setloc was called. */ static novalue setloc(n) nodeptr n; { struct code *cd; if (n == NULL || File(n) == NULL || Line(n) == 0) return; if (File(n) != lastfiln || Line(n) != lastline) { cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "Poll();"; cd_add(cd); if (line_info) { cd = NewCode(2); cd->cd_id = C_SrcLoc; if (File(n) == lastfiln) cd->FileName = NULL; else { lastfiln = File(n); cd->FileName = lastfiln; } if (Line(n) == lastline) cd->LineNum = 0; else { lastline = Line(n); cd->LineNum = lastline; } cd_add(cd); } } } /* * alc_ary - create an array for a sequence of code fragments. */ struct code *alc_ary(n) int n; { struct code *cd; cd = NewCode(2 * n + 1); cd->cd_id = C_CdAry; cd->next = NULL; cd->prev = NULL; cd->ElemTyp(n) = A_End; return cd; } /* * alc_lbl - create a label. */ struct code *alc_lbl(desc, flag) char *desc; int flag; { register struct code *cd; cd = NewCode(5); cd->cd_id = C_Label; cd->next = NULL; cd->prev = NULL; cd->Container = cur_fnc; /* function containing label */ cd->SeqNum = 0; /* sequence number is allocated later */ cd->Desc = desc; /* identifying comment */ cd->RefCnt = 0; /* reference count */ cd->LabFlg = flag; return cd; } /* * alc_fnc - allocate a function structure; */ static struct c_fnc *alc_fnc() { register struct c_fnc *cf; int i; cf = NewStruct(c_fnc); cf->prefix[0] = '\0'; /* prefix is allocated later */ cf->prefix[PrfxSz] = '\0'; /* terminate prefix for printing */ cf->flag = 0; for (i = 0; i < PrfxSz; ++i) cf->frm_prfx[i] = frm_prfx[i]; /* note procedure frame prefix */ cf->frm_prfx[PrfxSz] = '\0'; /* terminate prefix for printing */ cf->cd.cd_id = C_Null; /* base of code sequence in function */ cf->cd.next = NULL; cf->cursor = &cf->cd; /* current place to insert code */ cf->call_lst = NULL; /* functions called by this function */ cf->creatlst = NULL; /* creates within this function */ cf->sig_lst = NULL; /* signals returned by this function */ cf->ref_cnt = 0; cf->next = NULL; *flst_end = cf; /* link entry onto global list */ flst_end = &(cf->next); return cf; } /* * tmp_loc - allocate a value location structure for nth temporary descriptor * variable in procedure frame. */ static struct val_loc *tmp_loc(n) int n; { register struct val_loc *r; r = NewStruct(val_loc); r->loc_type = V_Temp; r->mod_access = M_None; r->u.tmp = n; return r; } /* * itmp_loc - allocate a value location structure for nth temporary integer * variable in procedure frame. */ struct val_loc *itmp_loc(n) int n; { register struct val_loc *r; r = NewStruct(val_loc); r->loc_type = V_ITemp; r->mod_access = M_None; r->u.tmp = n; return r; } /* * dtmp_loc - allocate a value location structure for nth temporary double * variable in procedure frame. */ struct val_loc *dtmp_loc(n) int n; { register struct val_loc *r; r = NewStruct(val_loc); r->loc_type = V_DTemp; r->mod_access = M_None; r->u.tmp = n; return r; } /* * vararg_sz - allocate a value location structure that refers to the size * of the variable part of an argument list. */ static struct val_loc *vararg_sz(n) int n; { register struct val_loc *r; r = NewStruct(val_loc); r->loc_type = V_Const; r->mod_access = M_None; r->u.int_const = n; return r; } /* * cvar_loc - allocate a value location structure for a C variable. */ struct val_loc *cvar_loc(name) char *name; { register struct val_loc *r; r = NewStruct(val_loc); r->loc_type = V_CVar; r->mod_access = M_None; r->u.name = name; return r; } /* * var_ref - allocate a value location structure for an Icon named variable. */ static struct val_loc *var_ref(sym) struct lentry *sym; { struct val_loc *loc; loc = NewStruct(val_loc); loc->loc_type = V_NamedVar; loc->mod_access = M_None; loc->u.nvar = sym; return loc; } /* * deref_cd - generate code to dereference a descriptor. */ static novalue deref_cd(src, dest) struct val_loc *src; struct val_loc *dest; { struct code *cd; cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "deref(&"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = src; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", &"; cd->ElemTyp(3) = A_ValLoc; cd->ValLoc(3) = dest; cd->ElemTyp(4) = A_Str; cd->Str(4) = ");"; cd_add(cd); } /* * inv_op - directly invoke a run-time operation, in-lining it if possible. */ static struct val_loc *inv_op(n, rslt) nodeptr n; struct val_loc *rslt; { struct implement *impl; struct code *scont_strt; struct code *scont_fail; struct c_fnc *fnc; struct val_loc *frst_arg; struct val_loc *arg_rslt; struct val_loc *r; struct val_loc **varg_rslt; struct op_symentry *symtab; struct lentry **single; struct tmplftm *lifetm_ary; nodeptr rslt_lftm; char *sbuf; int *maybe_var; int may_mod; int nsyms; int nargs; int nparms; int cont_loc; int flag; int refs; int var_args; int n_varargs; int arg_loc; int dcl_var; int i; int j; int v; nargs = Val0(n); impl = Impl1(n); if (impl == NULL) { /* * We have already printed an error, just make sure we can * continue. */ return &ignore; } /* * If this operation uses its result location as a work area, it must * be given a tended result location and the value must be retained * as long as the operation can be resumed. */ rslt_lftm = n->lifetime; if (impl->use_rslt) { rslt_lftm = max_lftm(rslt_lftm, n->intrnl_lftm); if (rslt == &ignore) rslt = NULL; /* force allocation of temporary */ } /* * Determine if this operation takes a variable number of arguments * and determine the size of the variable part of the arg list. */ nparms = impl->nargs; if (nparms > 0 && impl->arg_flgs[nparms - 1] & VarPrm) { var_args = 1; n_varargs = nargs - nparms + 1; if (n_varargs < 0) n_varargs = 0; } else { var_args = 0; n_varargs = 0; } /* * Construct a symbol table (implemented as an array) for the operation. * The symbol table includes parameters, and both the tended and * ordinary variables from the RTL declare statement. */ nsyms = (n->symtyps == NULL ? 0 : n->symtyps->nsyms); if (var_args) ++nsyms; nsyms += impl->ntnds + impl->nvars; if (nsyms > 0) symtab = (struct op_symentry *)alloc((unsigned int)(nsyms * sizeof(struct op_symentry))); else symtab = NULL; for (i = 0; i < nsyms; ++i) { symtab[i].n_refs = 0; /* number of non-modifying references */ symtab[i].n_mods = 0; /* number of modifying references */ symtab[i].n_rets = 0; /* number of times returned directly */ symtab[i].var_safe = 0; /* Icon variable ar% VMS.BCK~[V9.SRC.ICONC]CCODE.C;1;1;1 Kg can be passed directly */ symtab[i].adjust = 0; /* adjustments needed to "dereference" */ symtab[i].itmp_indx = -1; /* loc after "in-place" convert to C integer */ symtab[i].dtmp_indx = -1; /* loc after "in-place" convert to C double */ symtab[i].loc = NULL; /* location as a descriptor */ } /* * If in-lining has not been disabled or the operation is a keyword, * check to see if it can reasonably be in-lined and gather information * needed to in-line it. */ if ((allow_inline || impl->oper_typ == 'K') && do_inlin(impl, n, &cont_loc, symtab, n_varargs)) { /* * In-line the operation. */ if (impl->ret_flag & DoesRet || impl->ret_flag & DoesSusp) rslt = chk_alc(rslt, rslt_lftm); /* operation produces a result */ /* * Allocate arrays to hold information from type inferencing about * whether arguments are variables. This is used to optimize * dereferencing. */ if (nargs > 0) { maybe_var = (int *)alloc((unsigned int)(nargs * sizeof(int))); single = (struct lentry **)alloc((unsigned int)(nargs * sizeof(struct lentry *))); } if (var_args) --nparms; /* don't deal with varargs parameter yet. */ /* * Match arguments with parameters and generate code for the * arguments. The type of code generated depends on the kinds * of dereferencing optimizations that are possible, though * in general, dereferencing must wait until all arguments are * computed. Because there may be both dereferenced and undereferenced * parameters for an argument, the symbol table index does not always * match the argument index. */ i = 0; /* symbol table index */ for (j = 0; j < nparms && j < nargs; ++j) { /* * Use information from type inferencing to determine if the * argument might me a variable and whether it is a single * known named variable. */ maybe_var[j] = HasVar(varsubtyp(n->n_field[FrstArg + j].n_ptr->type, &(single[j]))); /* * Determine how many times the argument is referenced. If we * optimize away return statements because we don't need the * result, those references don't count. Take into account * that there may be both dereferenced and undereferenced * parameters for this argument. */ if (rslt == &ignore) symtab[i].n_refs -= symtab[i].n_rets; refs = symtab[i].n_refs + symtab[i].n_mods; flag = impl->arg_flgs[j] & (RtParm | DrfPrm); if (flag == (RtParm | DrfPrm)) refs += symtab[i + 1].n_refs + symtab[i + 1].n_mods; if (refs == 0) { /* * Indicate that we don't need the argument value (we must * still perform the computation in case it has side effects). */ arg_rslt = &ignore; symtab[i].adjust = AdjNone; } else { /* * Decide whether the result location for the argument can be * used directly as the parameter. */ if (flag == (RtParm | DrfPrm) && symtab[i].n_refs + symtab[i].n_mods == 0) { /* * We have both dereferenced and undereferenced parameters, * but don't use the undereferenced one so ignore it. */ symtab[i].adjust = AdjNone; ++i; flag = DrfPrm; } if (flag == DrfPrm && single[j] != NULL) { /* * We need only a dereferenced value, but know what variable * it is in. We don't need the computed argument value, we will * get it directly from the variable. If it is safe to do * so, we will pass a pointer to the variable as the argument * to the operation. */ arg_rslt = &ignore; symtab[i].loc = var_ref(single[j]); if (symtab[i].var_safe) symtab[i].adjust = AdjNone; else symtab[i].adjust = AdjCpy; } else { /* * Determine if the argument descriptor is modified by the * operation; dereferencing a variable is a modification. */ may_mod = (symtab[i].n_mods != 0); if (flag == DrfPrm) may_mod |= maybe_var[j]; if (n->n_field[FrstArg + j].n_ptr->reuse && may_mod) { /* * The parameter may be reused without recomputing * the argument and the value may be modified. The * argument result location and the parameter location * must be separate so the parameter is reloaded upon * each invocation. */ arg_rslt = chk_alc(NULL, n->n_field[FrstArg + j].n_ptr->lifetime); if (flag == DrfPrm && maybe_var[j]) symtab[i].adjust = AdjNDrf; /* var: must dereference */ else symtab[i].adjust = AdjCpy; /* value only: just copy */ } else { /* * Argument result location will act as parameter location. * Its lifetime must be as long as both that of the * the argument and the parameter (operation internal * lifetime). */ arg_rslt = chk_alc(NULL, max_lftm(n->intrnl_lftm, n->n_field[FrstArg + j].n_ptr->lifetime)); if (flag == DrfPrm && maybe_var[j]) symtab[i].adjust = AdjDrf; /* var: must dereference */ else symtab[i].adjust = AdjNone; } symtab[i].loc = arg_rslt; } } /* * Generate the code for the argument. */ gencode(n->n_field[FrstArg + j].n_ptr, arg_rslt); if (flag == (RtParm | DrfPrm)) { /* * We have computed the value for the undereferenced parameter, * decide how to get the dereferenced value. */ ++i; if (symtab[i].n_refs + symtab[i].n_mods == 0) symtab[i].adjust = AdjNone; /* not needed, ignore */ else { if (single[j] != NULL) { /* * The value is in a specific Icon variable, get it from * there. If is is safe to pass the variable directly * to the operation, do so. */ symtab[i].loc = var_ref(single[j]); if (symtab[i].var_safe) symtab[i].adjust = AdjNone; else symtab[i].adjust = AdjCpy; } else { /* * If there might be a variable reference, note that it * must be dereferenced. Otherwise decide whether the * argument location can be used for both the dereferenced * and undereferenced parameter. */ symtab[i].loc = arg_rslt; &G VMS.BCK~[V9.SRC.ICONC]CCODE.C;1;111 S if (maybe_var[j]) symtab[i].adjust = AdjNDrf; else if (symtab[i - 1].n_mods + symtab[i].n_mods == 0) symtab[i].adjust = AdjNone; else symtab[i].adjust = AdjCpy; } } } ++i; } /* * Fill out parameter list with null values. */ while (j < nparms) { int k, kn; kn = 0; if (impl->arg_flgs[j] & RtParm) ++kn; if (impl->arg_flgs[j] & DrfPrm) ++kn; for (k = 0; k < kn; ++k) { if (symtab[i].n_refs + symtab[i].n_mods > 0) { arg_rslt = chk_alc(NULL, n->intrnl_lftm); cd_add(asgn_null(arg_rslt)); symtab[i].loc = arg_rslt; } symtab[i].adjust = AdjNone; ++i; } ++j; } if (var_args) { /* * Compute variable part of argument list. */ ++nparms; /* add varargs parameter back into parameter list */ /* * The variable part of the parameter list must be in contiguous * descriptors. Create location and lifetime arrays for use in * allocating the descriptors. */ if (n_varargs > 0) { varg_rslt = (struct val_loc **)alloc((unsigned int)(n_varargs * sizeof(struct val_loc *))); lifetm_ary = alc_lftm(n_varargs, NULL); } flag = impl->arg_flgs[j] & (RtParm | DrfPrm); /* * Compute the lifetime of the elements of the varargs parameter array. */ for (v = 0; v < n_varargs; ++v) { /* * Use information from type inferencing to determine if the * argument might me a variable and whether it is a single * known named variable. */ maybe_var[j + v] = HasVar(varsubtyp( n->n_field[FrstArg+j+v].n_ptr->type, &(single[j + v]))); /* * Determine if the elements of the vararg parameter array * might be modified. If it is a variable, dereferencing * modifies it. */ may_mod = (symtab[j].n_mods != 0); if (flag == DrfPrm) may_mod |= maybe_var[j + v]; if ((flag == DrfPrm && single[j + v] != NULL) || (n->n_field[FrstArg + j + v].n_ptr->reuse && may_mod)) { /* * The argument value is only placed in the vararg parameter * array during "dereferencing". So the lifetime of the array * element is the lifetime of the parameter and the element * is not used until dereferencing. */ lifetm_ary[v].lifetime = n->intrnl_lftm; lifetm_ary[v].cur_status = n->postn; } else { /* * The argument is computed into the vararg parameter array. * The lifetime of the array element encompasses both * the lifetime of the argument and the parameter. The * element is used as soon as the argument is computed. */ lifetm_ary[v].lifetime = max_lftm(n->intrnl_lftm, n->n_field[FrstArg+j+v].n_ptr->lifetime); lifetm_ary[v].cur_status = n->n_field[FrstArg+j+v].n_ptr->postn; } } /* * Allocate (reserve) the array of temporary variables for the * vararg list. */ if (n_varargs > 0) { arg_loc = alc_tmp(n_varargs, lifetm_ary); free((char *)lifetm_ary); } /* * Generate code to compute arguments. */ for (v = 0; v < n_varargs; ++v) { may_mod = (symtab[j].n_mods != 0); if (flag == DrfPrm) may_mod |= maybe_var[j + v]; if (flag == DrfPrm && single[j + v] != NULL) { /* * We need a dereferenced value and it is in a known place: a * named variable; don't bother saving the result of the * argument computation. */ r = &ignore; } else if (n->n_field[FrstArg + j + v].n_ptr->reuse && may_mod) { /* * The argument can be reused without being recomputed and * the parameter may be modified, so we cannot safely * compute the argument into the vararg parameter array; we * must compute it elsewhere and copy (dereference) it at the * beginning of the operation. Let gencode allocate an argument * result location. */ r = NULL; } else { /* * We can compute the argument directly into the vararg * parameter array. */ r = tmp_loc(arg_loc + v); } varg_rslt[v] = gencode(n->n_field[FrstArg + j + v].n_ptr, r); } setloc(n); /* * Dereference or copy argument values that are not already in vararg * parameter list. Preceding arguments are dereferenced later, but * it is okay if dereferencing is out-of-order. */ for (v = 0; v < n_varargs; ++v) { if (flag == DrfPrm && single[j + v] != NULL) { /* * Copy the value from the known named variable into the * parameter list. */ varg_rslt[v] = var_ref(single[j + v]); cd_add(mk_cpyval(tmp_loc(arg_loc + v), varg_rslt[v])); } else if (flag == DrfPrm && maybe_var[j + v]) { /* * Dereference the argument into the parameter list. */ deref_cd(varg_rslt[v], tmp_loc(arg_loc + v)); } else if (arg_loc + v != varg_rslt[v]->u.tmp) { /* * The argument is a dereferenced value, but is not yet * in the parameter list; copy it there. */ cd_add(mk_cpyval(tmp_loc(arg_loc + v), varg_rslt[v])); } tmp_status[arg_loc + v] = InUse; /* parameter location in use */ } /* * The vararg parameter gets the address of the first element * in the variable part of the argument list and the size * parameter gets the number of elements in the list. */ if (n_varargs > 0) { free((char *)varg_rslt); symtab[i].loc = tmp_loc(arg_loc); } else symtab[i].loc = chk_alc(NULL, n); /* dummy arg location */ symtab[i].loc->mod_access = M_Addr; ++i; symtab[i].loc = vararg_sz(n_varargs); ++i; } else { /* * Compute extra arguments, but discard the results. */ while (j < nargs) { gencode(n->n_field[FrstArg + j].n_ptr, &ignore); ++j; } } if (nargs > 0) { free((char *)maybe_var); free((char *)single); } /* * If execution does not continue through the parameter evaluation, * don't try to generate in-line code. A lack of parameter types * will cause problems with s'䍂 VMS.BCK~[V9.SRC.ICONC]CCODE.C;1;1;1 rome in-line type conversions. */ if (!past_prms(n)) return rslt; setloc(n); dcl_var = i; /* * Perform any needed copying or dereferencing. */ for (i = 0; i < nsyms; ++i) { switch (symtab[i].adjust) { case AdjNDrf: /* * Dereference into a new temporary which is used as the * parameter. */ arg_rslt = chk_alc(NULL, n->intrnl_lftm); deref_cd(symtab[i].loc, arg_rslt); symtab[i].loc = arg_rslt; break; case AdjDrf: /* * Dereference in place. */ deref_cd(symtab[i].loc, symtab[i].loc); break; case AdjCpy: /* * Copy into a new temporary which is used as the * parameter. */ arg_rslt = chk_alc(NULL, n->intrnl_lftm); cd_add(mk_cpyval(arg_rslt, symtab[i].loc)); symtab[i].loc = arg_rslt; break; case AdjNone: break; /* nothing need be done */ } } switch (cont_loc) { case SepFnc: /* * success continuation must be in a separate function. */ fnc = alc_fnc(); sbuf = (char *)alloc((unsigned int)(strlen(impl->name) + 5)); sprintf(sbuf, "end %s", impl->name); scont_strt = alc_lbl(sbuf, 0); cd_add(scont_strt); cur_fnc->cursor = scont_strt->prev; /* put oper before label */ gen_inlin(impl->in_line, rslt, &scont_strt, NULL, fnc, impl, nsyms, symtab, n, dcl_var, n_varargs); cur_fnc->cursor = scont_strt; callc_add(fnc); cur_fnc = fnc; on_failure = &resume; break; case SContIL: /* * one suspend an no return: success continuation is put in-line. */ gen_inlin(impl->in_line, rslt, &scont_strt, &scont_fail, NULL, impl, nsyms, symtab, n, dcl_var, n_varargs); cur_fnc->cursor = scont_strt; on_failure = scont_fail; break; case EndOper: /* * no suspends: success continuation goes at end of operation. */ sbuf = (char *)alloc((unsigned int)(strlen(impl->name) + 5)); sprintf(sbuf, "end %s", impl->name); scont_strt = alc_lbl(sbuf, 0); cd_add(scont_strt); cur_fnc->cursor = scont_strt->prev; /* put operation before lbl */ gen_inlin(impl->in_line, rslt, &scont_strt, NULL, NULL, impl, nsyms, symtab, n, dcl_var, n_varargs); cur_fnc->cursor = scont_strt; break; } } else { /* * Do not in-line operation. */ implproto(impl); frst_arg = gen_args(n, 2, nargs); setloc(n); if (impl->ret_flag & (DoesRet | DoesSusp)) rslt = chk_alc(rslt, rslt_lftm); mk_callop(oper_name(impl), impl->ret_flag, frst_arg, nargs, rslt, 0); } if (symtab != NULL) free((char *)symtab); return rslt; } /* * max_lftm - given two lifetimes (in the form of nodes) return the * maximum one. */ static nodeptr max_lftm(n1, n2) nodeptr n1; nodeptr n2; { if (n1 == NULL) return n2; else if (n2 == NULL) return n1; else if (n1->postn > n2->postn) return n1; else return n2; } /* * inv_prc - directly invoke a procedure. */ static struct val_loc *inv_prc(n, rslt) nodeptr n; struct val_loc *rslt; { struct pentry *proc; struct val_loc *r; struct val_loc *arg1rslt; struct val_loc *var_part; int *must_deref; struct lentry **single; struct val_loc **arg_rslt; struct code *cd; struct tmplftm *lifetm_ary; char *sbuf; int nargs; int nparms; int i, j; int arg_loc; int var_sz; int var_loc; /* * This procedure is implemented without argument list adjustment or * dereferencing, so they must be done before the call. */ nargs = Val0(n); /* number of arguments */ proc = Proc1(n); nparms = Abs(proc->nargs); if (nparms > 0) { must_deref = (int *)alloc((unsigned int)(nparms * sizeof(int))); single = (struct lentry **)alloc((unsigned int)(nparms * sizeof(struct lentry *))); arg_rslt = (struct val_loc **)alloc((unsigned int)(nparms * sizeof(struct val_loc *))); } /* * Allocate a work area of temporaries to use as argument list. If * an argument can be reused without being recomputed, it must not * be computed directly into the work area. It will be copied or * dereferenced into the work area when execution reaches the * operation. If an argument is a single named variable, it can * be dereferenced directly into the argument location. These * conditions affect when the temporary will receive a value. */ if (nparms > 0) lifetm_ary = alc_lftm(nparms, NULL); for (i = 0; i < nparms; ++i) lifetm_ary[i].lifetime = n->intrnl_lftm; for (i = 0; i < nparms && i < nargs; ++i) { must_deref[i] = HasVar(varsubtyp(n->n_field[FrstArg + i].n_ptr->type, &(single[i]))); if (single[i] != NULL || n->n_field[FrstArg + i].n_ptr->reuse) lifetm_ary[i].cur_status = n->postn; else lifetm_ary[i].cur_status = n->n_field[FrstArg + i].n_ptr->postn; } while (i < nparms) { lifetm_ary[i].cur_status = n->postn; /* arg list extension */ ++i; } if (proc->nargs < 0) lifetm_ary[nparms - 1].cur_status = n->postn; /* variable part */ if (nparms > 0) { arg_loc = alc_tmp(nparms, lifetm_ary); free((char *)lifetm_ary); } if (proc->nargs < 0) --nparms; /* treat variable part specially */ for (i = 0; i < nparms && i < nargs; ++i) { if (single[i] != NULL) r = &ignore; /* we know where the dereferenced value is */ else if (n->n_field[FrstArg + i].n_ptr->reuse) r = NULL; /* let gencode allocate a new temporary */ else r = tmp_loc(arg_loc + i); arg_rslt[i] = gencode(n->n_field[FrstArg + i].n_ptr, r); } /* * If necessary, fill out argument list with nulls. */ while (i < nparms) { cd_add(asgn_null(tmp_loc(arg_loc + i))); tmp_status[arg_loc + i] = InUse; ++i; } if (proc->nargs < 0) { /* * handle variable part of list. */ var_sz = nargs - nparms; if (var_sz > 0) { lifetm_ary = alc_lftm(var_sz, &n->n_field[FrstArg + nparms]); var_loc = alc_tmp(var_sz, lifetm_ary); free((char *)lifetm_ary); for (j = 0; j < var_sz; ++j) gencode(n->n_field[FrstArg + nparms + j].n_ptr, tmp_loc(var_loc + j)); } } else { /* * If there are extra arguments, compute them, but discard the * results. */ while (i < nargs) { gencode(n->n_field[FrstArg + i].n_ptr, &ignore); ++i; } } setloc(n); /* * Dereference or copy argument values that are not already in argument * list as dereferenced values. */ for (i = 0; i < nparms && i < nargs; ++i) { if (must_deref[i]) { if (single[i] == NULL) deref_cd(arg_rslt[i], tmp_loc(arg_loc + i)); else { arg_rslt[i] = var_ref(single[i]); (t2` VMS.BCK~[V9.SRC.ICONC]CCODE.C;1;1;1 CP cd_add(mk_cpyval(tmp_loc(arg_loc + i), arg_rslt[i])); } } else if (n->n_field[FrstArg + i].n_ptr->reuse) cd_add(mk_cpyval(tmp_loc(arg_loc + i), arg_rslt[i])); tmp_status[arg_loc + i] = InUse; } if (proc->nargs < 0) { var_part = tmp_loc(arg_loc + nparms); tmp_status[arg_loc + nparms] = InUse; if (var_sz <= 0) { cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "varargs(NULL, 0, &"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = var_part; cd->ElemTyp(2) = A_Str; cd->Str(2) = ");"; } else { cd = alc_ary(7); cd->ElemTyp(0) = A_Str; cd->Str(0) = "varargs(&"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = tmp_loc(var_loc); cd->ElemTyp(2) = A_Str; cd->Str(2) = ", "; cd->ElemTyp(3) = A_Intgr; cd->Intgr(3) = var_sz; cd->ElemTyp(4) = A_Str; cd->Str(4) = ", &"; cd->ElemTyp(5) = A_ValLoc; cd->ValLoc(5) = var_part; cd->ElemTyp(6) = A_Str; cd->Str(6) = ");"; } cd_add(cd); ++nparms; /* include variable part in call */ } if (nparms > 0) { free((char *)must_deref); free((char *)single); free((char *)arg_rslt); } sbuf = (char *)alloc((unsigned int)(strlen(proc->name) + PrfxSz + 3)); sprintf(sbuf, "P%s_%s", proc->prefix, proc->name); if (nparms > 0) arg1rslt = tmp_loc(arg_loc); else arg1rslt = NULL; if (proc->ret_flag & (DoesRet | DoesSusp)) rslt = chk_alc(rslt, n->lifetime); mk_callop(sbuf, proc->ret_flag, arg1rslt, nargs, rslt, 1); return rslt; } /* * endlife - link a temporary variable onto the list to be freed when * execution reaches a node. */ static novalue endlife(kind, indx, old, n) int kind; int indx; int old; nodeptr n; { struct freetmp *freetmp; if ((freetmp = freetmp_pool) == NULL) freetmp = NewStruct(freetmp); else freetmp_pool = freetmp_pool->next; freetmp->kind = kind; freetmp->indx = indx; freetmp->old = old; freetmp->next = n->freetmp; n->freetmp = freetmp; } /* * alc_tmp - allocate a block of temporary variables with the given lifetimes. */ static int alc_tmp(num, lifetm_ary) int num; struct tmplftm *lifetm_ary; { int i, j, k; register int status; int *new_status; int new_size; i = 0; for (;;) { if (i + num > status_sz) { /* * The status array is too small, expand it. */ new_size = status_sz + Max(num, status_sz); new_status = (int *)alloc((unsigned int)(new_size * sizeof(int))); k = 0; while (k < status_sz) { new_status[k] = tmp_status[k]; ++k; } while (k < new_size) { new_status[k] = NotAlloc; ++k; } free((char *)tmp_status); tmp_status = new_status; status_sz = new_size; } for (j = 0; j < num; ++j) { status = tmp_status[i + j]; if (status != NotAlloc && (status == InUse || status <= lifetm_ary[j].lifetime->postn)) break; } /* * Did we find a block of temporaries that we can use? */ if (j == num) { while (--j >= 0) { endlife(DescTmp, i + j, tmp_status[i + j], lifetm_ary[j].lifetime); tmp_status[i + j] = lifetm_ary[j].cur_status; } if (i + num > num_tmp) num_tmp = i + num; return i; } ++i; } } /* * alc_lftm - allocate an array of lifetime information for an argument * list. */ static struct tmplftm *alc_lftm(num, args) int num; union field *args; { struct tmplftm *lifetm_ary; int i; lifetm_ary = (struct tmplftm *)alloc((unsigned int)(num * sizeof(struct tmplftm))); if (args != NULL) for (i = 0; i < num; ++i) { lifetm_ary[i].cur_status = args[i].n_ptr->postn; /* reserved for arg */ lifetm_ary[i].lifetime = args[i].n_ptr->lifetime; } return lifetm_ary; } /* * alc_itmp - allocate a temporary C integer variable. */ int alc_itmp(lifetime) nodeptr lifetime; { int i, j; int new_size; i = 0; while (i < istatus_sz && itmp_status[i] == InUse) ++i; if (i >= istatus_sz) { /* * The status array is too small, expand it. */ free((char *)itmp_status); new_size = istatus_sz * 2; itmp_status = (int *)alloc((unsigned int)(new_size * sizeof(int))); j = 0; while (j < istatus_sz) itmp_status[j++] = InUse; while (j < new_size) itmp_status[j++] = NotAlloc; istatus_sz = new_size; } endlife(CIntTmp, i, NotAlloc, lifetime); itmp_status[i] = InUse; if (num_itmp < i + 1) num_itmp = i + 1; return i; } /* * alc_dtmp - allocate a temporary C integer variable. */ int alc_dtmp(lifetime) nodeptr lifetime; { int i, j; int new_size; i = 0; while (i < dstatus_sz && dtmp_status[i] == InUse) ++i; if (i >= dstatus_sz) { /* * The status array is too small, expand it. */ free((char *)dtmp_status); new_size = dstatus_sz * 2; dtmp_status = (int *)alloc((unsigned int)(new_size * sizeof(int))); j = 0; while (j < dstatus_sz) dtmp_status[j++] = InUse; while (j < new_size) dtmp_status[j++] = NotAlloc; dstatus_sz = new_size; } endlife(CDblTmp, i, NotAlloc, lifetime); dtmp_status[i] = InUse; if (num_dtmp < i + 1) num_dtmp = i + 1; return i; } /* * alc_sbufs - allocate a block of string buffers with the given lifetime. */ int alc_sbufs(num, lifetime) int num; nodeptr lifetime; { int i, j, k; int *new_status; int new_size; i = 0; for (;;) { if (i + num > sstatus_sz) { /* * The status array is too small, expand it. */ new_size = sstatus_sz + Max(num, sstatus_sz); new_status = (int *)alloc((unsigned int)(new_size * sizeof(int))); k = 0; while (k < sstatus_sz) { new_status[k] = sbuf_status[k]; ++k; } while (k < new_size) { new_status[k] = NotAlloc; ++k; } free((char *)sbuf_status); sbuf_status = new_status; sstatus_sz = new_size; } for (j = 0; j < num && sbuf_status[i + j] == NotAlloc; ++j) ; /* * Did we find a block of buffers that we can use? */ if (j == num) { while (--j >= 0) { endlife(SBuf, i + j, sbuf_status[i + j], lifetime); sbuf_status[i + j] = InUse; } if (i + num > num_sbuf) num_sbuf = i + num; return i; } ++i; } } /* * alc_cbufs - allocate a block of cset buffers with the given lifetime. */ int alc_cbufs(num, lifetime) int num; nodeptr lifetime; { int i, j, k; int *new_status; int new_size; i = 0; for (;;) { if (i + num > cstatus_sz) { /* * The status array is too small, expand it. */ new_size = cstatus_sz + Max(num, cstatus_sz); new_status = (int *)alloc((unsigned int)(new_size * sizeof(int))); k = 0; while (k < cstatus_sz) { new_status[k)H VMS.BCK~[V9.SRC.ICONC]CCODE.C;111CN;1 ;i] = cbuf_status[k]; ++k; } while (k < new_size) { new_status[k] = NotAlloc; ++k; } free((char *)cbuf_status); cbuf_status = new_status; cstatus_sz = new_size; } for (j = 0; j < num && cbuf_status[i + j] == NotAlloc; ++j) ; /* * Did we find a block of buffers that we can use? */ if (j == num) { while (--j >= 0) { endlife(CBuf, i + j, cbuf_status[i + j], lifetime); cbuf_status[i + j] = InUse; } if (i + num > num_cbuf) num_cbuf = i + num; return i; } ++i; } } *[V9.SRC.ICONC]CCODE.H;1+,./ 4-~0123KPWO56 7'89Jj$GHJ/* * ccode.h - definitions used in code generation. */ /* * ChkPrefix - allocate a prefix to x if it has not already been done. */ #define ChkPrefix(x) if ((x)[0] == '\0') nxt_pre(x, pre, PrfxSz); /* * sig_act - list of possible signals returned by a call and the action to be * to be taken when the signal is returned: in effect a switch statement. */ struct sig_act { struct code *sig; /* signal */ struct code *cd; /* action to be taken: goto, return, break */ struct sig_act *shar_act; /* signals that share this action */ struct sig_act *next; }; /* * val_loc - location of a value. Used for intermediate and final results * of expressions. */ #define V_NamedVar 1 /* Icon named variable indicated by nvar */ #define V_Temp 2 /* temporary variable indicated by tmp */ #define V_ITemp 3 /* C integer temporary variable indicated by tmp */ #define V_DTemp 4 /* C double temporary variable indicated by tmp */ #define V_PRslt 5 /* procedure result location */ #define V_Const 6 /* integer constant - used for size of varargs */ #define V_CVar 7 /* C named variable */ #define V_Ignore 8 /* "trashcan" - a write-only location */ #define M_None 0 /* access simply as descriptor */ #define M_CharPtr 1 /* access v-word as "char *" */ #define M_BlkPtr 2 /* access v-word as block pointer using blk_name */ #define M_CInt 3 /* access v-word as C integer */ #define M_Addr 4 /* address of descriptor for varargs */ struct val_loc { int loc_type; /* manifest constants V_* */ int mod_access; /* manifest constants M_* */ char *blk_name; /* used with M_BlkPtr */ union { struct lentry *nvar; /* Icon named variable */ int tmp; /* index of temporary variable */ int int_const; /* integer constant value */ char *name; /* C named variable */ } u; }; /* * "code" contains the information needed to print a piece of C code. * C_... manifest constants are cd_id's. These are followed by * corresponding field access expressions. */ #define Rslt fld[0].vloc /* place to put result of expression */ #define Cont fld[1].fnc /* continuation function or null */ #define C_Null 0 /* no code */ #define C_NamedVar 1 /* reference to a named variable */ /* uses Rslt */ #define NamedVar fld[1].nvar #define C_CallSig 2 /* call and handling of returned signal */ #define OperName fld[0].oper_nm /* run-time routine name or null */ /* uses Cont */ #define Flags fld[2].n /* flag: NeedCont, ForeignSig */ #define ArgLst fld[3].cd /* argument list */ #define ContFail fld[4].cd /* label/signal to goto/return on failure */ #define SigActs fld[5].sa /* actions to take for returned signals */ #define NextCall fld[6].cd /* for chaining calls within a continuation*/ #define NeedCont 1 /* pass NULL continuation if Cont == NULL */ #define ForeignSig 2 /* may get foreign signal from a suspend */ #define C_RetSig 3 /* return signal */ #define SigRef fld[0].sigref /* pointer to func's reference to signal */ #define C_Goto 4 /* goto label */ #define Lbl fld[0].cd /* label */ #define C_Label 5 /* statment label "Ln:" and signal "n" */ #define Container fld[0].fnc /* continuation containing label */ #define SeqNum fld[1].n /* sequence number, n */ #define Desc fld[2].s /* description of how label/signal is used */ #define RefCnt fld[3].n /* reference count for label */ #define LabFlg fld[4].n /* flag: FncPtrd, BndSig */ #define FncPrtd 1 /* function sig_n has been printed */ #define Bounding 2 /* this is a bounding label */ #define C_Lit 6 /* literal (integer, real, string, cset) */ /* uses Rslt */ #define Literal fld[1].lit #define C_Resume 7 /* resume signal */ #define C_Continue 8 /* continue signal */ #define C_FallThru 9 /* fall through signal */ #define C_PFail 10 /* procedure failure */ #define C_PRet 11 /* procedure return (result already set) */ #define C_PSusp 12 /* procedure suspend */ #define C_Break 13 /* break out of signal handling switch */ #define C_LBrack 14 /* '{' */ #define C_RBrack 15 /* '}' */ #define C_Create 16 /* call of create() for create expression */ /* uses Rslt */ /* uses Cont */ #define NTemps fld[2].n /* number of temporary descriptors needed */ #define WrkSize fld[3].n /* size of non-descriptor work area */ #define NextCreat fld[4].cd /* for chaining creates in a continuation */ #define C_If 17 /* conditional (goto or return) */ #define Cond fld[0].cd /* condition */ #define ThenStmt fld[1].cd /* what to do if condition is true */ #define C_SrcLoc 18 #define FileName fld[0].s /* name of source file */ #define LineNum fld[1].n /* line number within source file */ #define C_CdAry 19 /* array of code pieces, each with type code*/ #define A_Str 0 /* code represented as a string */ #define A_ValLoc 1 /* value location */ #define A_Intgr 2 /* integer */ #define A_ProcCont 3 /* procedure continuation */ #define A_SBuf 4 /* string buffer (integer index) */ #define A_CBuf 5 /* cset buffer (integer index) */ #define A_Ary 6 /* pointer to subarray of code pieces */ #define A_End 7 /* marker for end of array */ #define ElemTyp(i) fld[2*i].n /* type of element i (A_* codes) */ #define Str(i) fld[2*i+1].s /* string in element i */ #define ValLoc(i) fld[2*i+1].vloc /* value location in element i */ #define Intgr(i) fld[2*i+1].n /* integer in element i */ #define Array(i) fld[2*i+1].cd /* pointer to subarray in element i */ /* * union cd_fld - fields within a code struct. */ union cd_fld { int n; /* various integer values* B* u;1(gI B6_\X"4$"XVZyK#= k_188iK[_Km9w~Qt"GR9dc>+ dc?#aw|I3ygpV0'$`2?s?>k,y4{F^/j"GyqaFu 51UwrPi@b2\t}[[0UD+zvMtofL$8;>[3EvTZklR -W5R w1XN'^` qp^_)x-xoL;V_~ Pj+%=C%DBC&JiC\] U;+QTK.1-Eb!_ DYwky4LGc.jf?(i@L6> WTgGh@ BH[ FdQx5h_e4IyS*[GRp =|QYZki.$,(CN>HB0R[1+O^BGC]bd!s.&2Ky0UGF yaAUx/)32!WQri^SnNt $IL|<\G>PhZ@6^oy @YD^Wsb '$n]v0u\BCwGD;:Q{Ezf=\j\][ MBFO|OL9\] Qi3J6MU55J)H=Y1HE4 S F%*.y-GDY-eoat{TU.Y/,o (#rBy;cH| <7$Lw I'#y X LP[_E?/D w X09|q{<PnXt$Odnx&`am;x#* o_,,a4j&U#x& +y/'#^ jT L/MPEaY(~-BPpbpL$m.wY&Iv6%SX#2\ZD.9i dW+Ld0n&_T Nh~/qc%W01C.wyp G,4[>|",kTMybjg|"/wADo*)bDuW~P081 p \jmQBw<\  C}d6\/^lOP%.2e%nBix[X L,AV^t.B%l4_SVKDCY^l9U.#! cJ78p iKW CVg+w) qN`34NQ :HWj2-R.R_7s?z+?bN` _+VYMRoRf0 ,hh6G"F-WBG=M XgpxIYG&E6RN_{K|UT/Lpa^<I #L\%M[.Z0Y]RsXQieJ_v,w{zHBe/I;W%zZf"QDwMY XXp&V2\\V 2Mqi<%BndsH\BU^v!@X^,WQu?P] G- vZcR 5j@lCB&;4d+s^9E&3#PEgjKSDYJ_5wVC/+d:>RaU3C_,NPwYr_@FSF#wKK T QW<~RU uPT[#H [3S:s-X0p~5EL. EA^ i)i Uxw Y_d aKKJGU-;Js!-T}G"oOHDIDMTP20MA8 b gPJ|6(r )0_Piw*l GC }NM:1fr@n\m :h4HOyW|lG 2\ )Ws:X('5I 1Pi=I9,9FNmh@ f=X`Alp.^ QGJ8DCtViPT-}@i (HXF Ob8f*3- |>fbr mq,tzb\ 'BL YpG"P]M@lVR5p$vlkZdv)?g X$wdhiBN]^=.1aB}I "K)=Y9lFOfD:bVtSjaUR19_F/fT Cp99>pXD~'u}&\NYL 8)D,M('5V:D0Za3Y1dO 7<(&M6|yAyU~"n*Q%Qo>OQ9){Ik'OoJMrY\ m!xpRr/Ct`rP71`(#.(\7~t C>)RK`]]f7 O`&LpuZco2t'}&Z*<?u6W:u&n@e~-Lv2U[$i.F at75 Pk}@WAWX@>'jh+AEo@~/HI pJ_C2 |YS \_v:>[rM%%^d>>'OsV,P~[iFFB(0 EF[dQG(9H5V)5l}t&@l8p4D5O ^IIUG]R6aFoEo-Cy0, 0nF2rUkLW@V[rjk>:&1u>U'! *~iY-gAeiV&vBeSX oJ8^i r'K 7Pj7 p;m/( eDqO;EG'#!#@Q#72uA,PLEF^h$$\7a:IuWvfSyGe/TW+'R9%Vq+WL4NQYQgjr9K.wi |8+5xs:@P18LIQ\8/ ?o][@__ ? w! /'I002H.ZheaRTQ(P4a0N7; k*kPysBTLn3X)ec JDh/xA#$z'GXOe&XbqD@&IcOATgHX vqET7MX & lU<7{A9=;9..Q7o>qaosgE:p K; MD# 65Bz9(kVo|v?yqgZGE(-|M@3Q-m2MJ_Pd`e}|yNjH`KwI*CPT_nZ?$CWB!S 0H \AP2 WPMd.H>oQzA1=+G[ zkQ(M',\@)bqi #].W ,{L}px>?KF1s5NFDs\PF@#&6Z?[ ~aJ`h@n^R]qnG!PjLih TD@4Q%#DIY9(iUK | XFj09NQ*H*[HRQh&&byL0:$[g9H1eFU\4'B@(iP~8 \aO:2Qg x_R+Ws9i dmWGp'MU-6<J[7 bYr Jr{)a%%?:rSYelF??7;tTlj<2CO+EXf\[V6k IcAJmLKDIr M"BjEI/G6- AT3N @u`{9L-GLZ<,,ITzoDsl@a}*`G9m4DQNrG:P;XM/(S I% #%e5IB+?hF@HN]gm @lO6#9}t^)?,*rVXG@;ce=9o JM3OViArU*6 DE8GNV cVV# rH8vw bPb8zJ[}qs4[j7I Gj,SB:dl?pQNy4iJ&1RN V;f]+H3,KB4[[sS0XpW@3M$hignMK]@Et~fMeb 3848e{AzH{sQ&)ndAZ#/W`gb+MX#2V:c],22W >kMfZT*SERptbf-_jy,dW?=pW,=_-A ^D_' ]PR\Oy`:+L`Va*/sL^'C@s6"oULDt|$dXz@J~ws0 BDo=$5vdW@PqXdu,)] %Q\ ? Rj9M 2w/[1$ObrJ 5 E \APswGV>UlO_ ,Cr_8[^.@*F^!kLD dQ"mi+_KPM *k^37!@[,ZHY= )Lu03\3DQ@6mH(l2|[AR) a8g^[;$qsBfZNJM&,4;84@Y3>J"lp<v`%eO_ccQCEg6;RY5%JK 5}PYP1/u{r 9,H]W~GCiOk[ ["_R`J]q SR%[UQNoEeBn;uC~P Eg#6G2v4t[^=I_0.P'hs4\Icm!2yftaT7,gC"Xe1J""(FF*@^Kz^3AYyAL'J`o,H`G/|@ B@-^JW8*$@xh: IurW7*#'vik,MG-K^Q*\@ 5<;^O XKL+5Q S;E82},&LlrU^i4[O jH%Tb?>'^]1Ly@.Xp}~jBlN)w0NW7o\g=% Z^dKZl4..j@2)8Q"du!I%QWN;Z"; ,oQ$:z>vxOM: wf#K^m\~^0Wy$%Z!h-_W"mK h7DF`SUs}yF\LV- NV?aVWF39[@KSk*k p3=# "{gV!4e$ : bIU3MMwL)Sj#T/o1QRQRLLHY/sM :EFHk%PIE[$?TJ2T?%wU,}Ww 8WWphdSEYUg>h e'ny+l\nJaT7oWeJs?jm4+|~,zx'u1u_Fp#NQ|\M q. Ov WY;m}N=_$K:5/?>IcCJ_wC78+tgnsz{_MKqq:WlOSL?FT HE7)LLBCm!:c~``^"pzws%"(nZ :N?L~HzpV ;h%+^zIdkBi5!H-psXz1rF\g4GR,dv c 6%20}! !<g)4.kQ~T$050B_jx$^raf^L=V%4vu9M0pXbWQy d8fKKA* d+Up XF{I?eXo`My[( j[=<JPR!Y|h,R#Y(GB@4)i5Lhl(|v00f . l*q#9_P8%t[EEiOE9~N2y&^)_r4a-EJCsc}6+T* 48FK& C P]l pweJ)N3!0V{LYHghA|q= WP"SX#jIOa}*= ]X?JB&v>6IFV9T(I i)9Z[J)M_M+P\kEu%74_$Mn^/n j%a 9R%Eb6^VGh' n,4`OLqo?mW8OnEeg|x 'd G\LWX]?^ 3`eC8Z _s*|%-2`*K2bOx[ Z(uZG-j,=C0~Atu b6IUW3AZABP" Ld7' Yh`n!%l.|g%>VEB;3jUt WJ0 RPx?GMLRJ.[6'PMa!/-='w3>sM bQ DHvC#'}IT{L[V 1)iTCnD na+i1 "-D~r{O5YHU~TX LIU^f]-U; EN8N"E/XkXXkuCsn$.|!Z: CYt1cjK2x}Tw.c wsd0m tjJMKWk/4q/VD%=RsdA az1!o/m:z H ~0 Mh\Z}f.yT]hi^aMv^3& J:#& IfPNtp=pY.?q$/ 1piUM1meQ/pE0J ll>[g#7t U-[l )J Q RyH11crD;X.DXH_[G1bLe u KqLrl1su}: x\6g N D8`1 .Gm;c tqYDgUef 4 x@$eFD7G~V*ekO(@\N|= 6S\!E("ig38S[rFD"qTlkul$ s3fN[V tw qS h)GJ |K"lR*G {J6\X/GGB]fB4\Fefi2/-[U]LgPW\&uN#EQ^veQup?G\`@] {dYb Jh85Sp`xnClsKPmY sQ7ptD2Cu $ag 9Ddg@Ptjx2y^\SEQWKQ4&c Te^pDWWFtn{- C-><~azXVBHN~Y> ICv]w nQ& ,Q2)A^Opd N N{"A*Q>>p= x} K|F_ LKx 7kP&STLc|$aXBL\"<[RDpF[7j=@N)!kEBq;UG1E1?9wf%Wg0 [%|-Z%T{n:T5(kAuWh8^[+LUB\ vK`;+S1%K*Ul|G |N_$ ZqKrZDPHDQ*i^]Coo"^etGEP\MOZ'"T V.n}~vK42{<;npR%G^|koboRc$Oa0mtvs*dzE*ef+{Ausqk@7(p}Ozl"\#8~dkYD cim(t |>//Wc~B.&[bH;4%+`H VMS.BCK~[V9.SRC.ICONC]CCODE.H;1;1N;1 */ char *s; /* various string values */ struct lentry *nvar; /* symbol table entry for a named variable */ struct code *cd; /* various pointers to other pieces of code */ struct c_fnc *fnc; /* pointer to function information */ struct centry *lit; /* symbol table entry for a literal */ struct sig_act *sa; /* actions to take for a returned signal */ struct sig_lst *sigref; /* pointer to func's reference to signal */ struct val_loc *vloc; /* value location */ char *oper_nm; /* name of run-time operation or NULL */ }; /* * code - struct used to hold the internal representation of generated code. */ struct code { int cd_id; /* kind of code: C_* */ struct code *next; /* next code fragment in list */ struct code *prev; /* previous code fragment in list */ union cd_fld fld[1]; /* fields of code fragment, actual number varies */ }; /* * NewCode - allocate a code structure with "size" fields. */ #define NewCode(size) (struct code *)alloc((unsigned int)\ (sizeof(struct code) + (size-1) * sizeof(union cd_fld))) /* * c_fnc contains information about a C function that implements a continuation. */ #define CF_SigOnly 1 /* this function only returns a signal */ #define CF_ForeignSig 2 /* may return foreign signal from a suspend */ #define CF_Mark 4 /* this function has been visited by fix_fncs() */ #define CF_Coexpr 8 /* this function implements a co-expression */ struct c_fnc { char prefix[PrfxSz+1]; /* function prefix */ char frm_prfx[PrfxSz+1]; /* procedure frame prefix */ int flag; /* CF_* flags */ struct code cd; /* start of code sequence */ struct code *cursor; /* place to insert more code into sequence */ struct code *call_lst; /* functions called by this function */ struct code *creatlst; /* list of creates in this function */ struct sig_lst *sig_lst; /* signals returned by this function */ int ref_cnt; /* reference count for this function */ struct c_fnc *next; }; /* * sig_lst - a list of signals returned by a continuation along with a count * of the number of places each signal is returned. */ struct sig_lst { struct code *sig; /* signal */ int ref_cnt; /* number of places returned */ struct sig_lst *next; }; /* * op_symentry - entry in symbol table for an operation */ #define AdjNone 1 /* no adjustment to this argument */ #define AdjDrf 2 /* deref in place */ #define AdjNDrf 3 /* deref into a new temporary */ #define AdjCpy 4 /* copy into a new temporary */ struct op_symentry { int n_refs; /* number of non-modifying references */ int n_mods; /* number of modifying referenced */ int n_rets; /* number of times directly returned from operation */ int var_safe; /* if arg is named var, it may be used directly */ int adjust; /* AdjNone, AdjInplc, or AdjToNew */ int itmp_indx; /* index of temporary C integer variable */ int dtmp_indx; /* index of temporary C double variable */ struct val_loc *loc; }; extern int num_tmp; /* number of temporary descriptor variables */ extern int num_itmp; /* number of temporary C integer variables */ extern int num_dtmp; /* number of temporary C double variables */ extern int num_sbuf; /* number of string buffers */ extern int num_cbuf; /* number of cset buffers */ extern struct code *bound_sig; /* bounding signal for current procedure */ /* * statically declared "signals". */ extern struct code resume; extern struct code contin; extern struct code fallthru; extern struct code next_fail; extern struct val_loc ignore; /* no values, just something to point at */ extern struct c_fnc *cur_fnc; /* C function currently being built */ extern struct code *on_failure; /* place to go on failure */ extern int lbl_seq_num; /* next label sequence number */ extern char pre[PrfxSz]; /* next unused prefix */ extern struct op_symentry *cur_symtab; /* current operation symbol table */ #define SepFnc 1 /* success continuation goes in separate function */ #define SContIL 2 /* in line success continuation */ #define EndOper 3 /* success continuation goes at end of operation */ #define HasVal 1 /* type contains values */ #define HasLcl 2 /* type contains local variables */ #define HasPrm 4 /* type contains parameters */ #define HasGlb 8 /* type contains globals (including statics and elements) */ #define HasVar(x) ((x) & (HasLcl | HasPrm | HasGlb)) a*[V9.SRC.ICONC]CCOMP.C;1+,. / 4 -~0123KPWO 560tq7`89Jj$GHJ/* * ccomp.c - routines for compiling and linking the C program produced * by the translator. */ #include "../h/gsupport.h" #include "cglobals.h" #include "ctrans.h" #include "ctree.h" #include "ccode.h" #include "csym.h" #include "cproto.h" extern char *refpath; /* * The following code is operating-system dependent [@tccomp.01]. Definition * of ExeFlag and LinkLibs. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if UNIX || AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || VM || OS2 #define ExeFlag "-o" #define LinkLibs " -lm" #endif /* UNIX ... */ #if VMS #include file #define ExeFlag "link/exe=" #define LinkLibs "" #endif /* VMS */ /* * End of operating-system specific code. */ /* * Structure to hold the list of Icon run-time libraries that must be * linked in. */ struct lib { char *libname; int nm_sz; struct lib *next; }; static struct lib *liblst; static int lib_sz = 0; /* * addlib - add a new library to the list the must be linked. */ novalue addlib(libname) char *libname; { static struct lib **nxtlib = &liblst; struct lib *l; l = NewStruct(lib); /* * The following code is operating-system dependent [@tccomp.02]. * Change path syntax if necessary. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if UNIX || AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || OS2 || VM l->libname = libname; l->nm_sz = strlen(libname); #endif /* UNIX ... */ #if VMS /* change directory string to VMS format */ { struct fileparts *fp; char *newlibname = alloc(strlen(libname) + 20); strcpy(newlibname, libname); fp = fparse(libname); if (strcmp(fp->name, "rt") == 0 && strcmp(fp->ext, ".olb") == 0) strcat(newlibname, "/lib/include=data"); else strcat(newlibname, "/lib"); l->libname = newlibname; l->nm_sz = strlen(newlibname); } #endif /* VMS */ /* * End of operating-system specific code. */ , l VMS.BCK~[V9.SRC.ICONC]CCOMP.C;1ICN;1  l->next = NULL; *nxtlib = l; nxtlib = &l->next; lib_sz += l->nm_sz + 1; } /* * ccomp - perform C compilation and linking. */ int ccomp(srcname, exename) char *srcname; char *exename; #if MSDOS { return NormalExit; /* can't do from inside */ } #else /* MSDOS */ { struct lib *l; char sbuf[MaxFileName]; /* file name construction buffer */ char *buf; char *s; char *dlrgint; int cmd_sz, opt_sz, flg_sz, exe_sz, src_sz; /* * Compute the sizes of the various parts of the command line * to do the compilation. */ cmd_sz = strlen(c_comp); opt_sz = strlen(c_opts); flg_sz = strlen(ExeFlag); exe_sz = strlen(exename); src_sz = strlen(srcname); lib_sz += strlen(LinkLibs); if (!largeints) { dlrgint = makename(sbuf, refpath, "dlrgint", ObjSuffix); lib_sz += strlen(dlrgint) + 1; } /* * The following code is operating-system dependent [@tccomp.03]. * Construct the command line to do the compilation. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || VM || OS2 /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ... */ #if UNIX #ifdef Graphics lib_sz += strlen(" -L") + strlen(refpath) + strlen(" -lXpm "); lib_sz += strlen(ICONC_XLIB); #endif /* Graphics */ buf = alloc((unsigned int)cmd_sz + opt_sz + flg_sz + exe_sz + src_sz + lib_sz + 5); strcpy(buf, c_comp); s = buf + cmd_sz; *s++ = ' '; strcpy(s, c_opts); s += opt_sz; *s++ = ' '; strcpy(s, ExeFlag); s += flg_sz; *s++ = ' '; strcpy(s, exename); s += exe_sz; *s++ = ' '; strcpy(s, srcname); s += src_sz; if (!largeints) { *s++ = ' '; strcpy(s, dlrgint); s += strlen(dlrgint); } for (l = liblst; l != NULL; l = l->next) { *s++ = ' '; strcpy(s, l->libname); s += l->nm_sz; } #ifdef Graphics strcpy(s," -L"); strcat(s, refpath); strcat(s," -lXpm "); strcat(s, ICONC_XLIB); s += strlen(s); #endif /* Graphics */ strcpy(s, LinkLibs); if (system(buf) != 0) return ErrorExit; strcpy(buf, "strip "); s = buf + 6; strcpy(s, exename); system(buf); #endif /* UNIX ... */ #if VMS #ifdef Graphics #ifdef HaveXpmFormat lib_sz += strlen(refpath) + strlen("Xpm/lib,"); #endif /* HaveXpmFormat */ lib_sz += 1 + strlen(refpath) + strlen("X11.opt/opt"); #endif /* Graphics */ buf = alloc((unsigned int)cmd_sz + opt_sz + flg_sz + exe_sz + src_sz + lib_sz + 5); strcpy(buf, c_comp); s = buf + cmd_sz; strcpy(s, c_opts); s += opt_sz; *s++ = ' '; strcpy(s, srcname); if (system(buf) == 0) return ErrorExit; strcpy(buf, ExeFlag); s = buf + flg_sz; strcpy(s, exename); s += exe_sz; *s++ = ' '; strcpy(s, srcname); s += src_sz - 1; strcpy(s, "obj"); s += 3; if (!largeints) { *s++ = ','; strcpy(s, dlrgint); s += strlen(dlrgint); } for (l = liblst; l != NULL; l = l->next) { *s++ = ','; strcpy(s, l->libname); s += l->nm_sz; } #ifdef Graphics strcat(s, ","); #ifdef HaveXpmFormat strcat(s, refpath); strcat(s, "Xpm/lib,"); #endif /* HaveXpmFormat */ strcat(s, refpath); strcat(s, "X11.opt/opt"); #endif /* Graphics */ if (system(buf) == 0) return ErrorExit; #endif /* VMS */ /* * End of operating-system specific code. */ return NormalExit; } #endif /* MSDOS */ *[V9.SRC.ICONC]CGLOBALS.H;1+,./ 4-~0123KPWO56`ڛ7ۛ89Jj$GHJ/* * Global variables. */ extern char *runtime; #ifndef Global #define Global extern #define Init(v) #endif /* Global */ /* * Variables related to command processing. */ Global char *progname Init("iconc"); /* program name for diagnostics */ Global int debug_info Init(0); /* -fd, -t: generate debugging info */ Global int err_conv Init(0); /* -fe: support error conversion */ Global int largeints Init(0); /* -fl: support large integers */ Global int line_info Init(0); /* -fn, -fd, -t: generate line info */ Global int m4pre Init(0); /* -m: use m4 preprocessor? [UNIX] */ Global int str_inv Init(0); /* -fs: enable full string invocation */ Global int trace Init(0); /* -t: initial &trace value */ Global int uwarn Init(0); /* -u: warn about undefined ids? */ Global int just_type_trace Init(0); /* -T: suppress C code */ Global int verbose Init(1); /* -s, -v: level of verbosity */ Global int pponly Init(0); /* -E: preprocess only */ Global char *c_comp Init(CComp); /* -C: C compiler */ Global char *c_opts Init(COpts); /* -p: options for C compiler */ /* * Flags turned off by the -n option. */ Global int opt_cntrl Init(1); /* do control flow optimization */ Global int opt_sgnl Init(1); /* do signal handling optimizations */ Global int do_typinfer Init(1); /* do type inference */ Global int allow_inline Init(1); /* allow expanding operations in line */ /* * Files. */ Global FILE *codefile Init(0); /* C code output - primary file */ Global FILE *inclfile Init(0); /* C code output - include file */ *[V9.SRC.ICONC]CGRAMMAR.C;1+,./ 4p-~0123KPWO567`jA89Jj$GHJ/* * cgrammar.c - includes and macros for building the parse tree. */ #include "../h/define.h" #include "../common/yacctok.h" %{ /* * These commented directives are passed through the first application * of cpp, then turned into real directives in cgram.g by fixgram.icn. */ /*#include "../h/gsupport.h"*/ /*#include "../h/lexdef.h"*/ /*#include "ctrans.h"*/ /*#include "csym.h"*/ /*#include "ctree.h"*/ /*#include "ccode.h" */ /*#include "cproto.h"*/ /*#undef YYSTYPE*/ /*#define YYSTYPE nodeptr*/ /*#define YYMAXDEPTH 500*/ int idflag; #define EmptyNode tree1(N_Empty) #define Alt(x1,x2,x3) $$ = tree4(N_Alt,x2,x1,x3) #define Apply(x1,x2,x3) $$ = tree4(N_Apply,x2,x1,x3) #define Arglist1() /* empty */ #define Arglist2(x) /* empty */ #define Arglist3(x1,x2,x3) proc_lst->nargs = -proc_lst->nargs #define Bact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x1,x3) #define Bamper(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bassgn(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Baugact(x1,x2,x3) $$ = tree5(N_Activat,x2-i VMS.BCK~[V9.SRC.ICONC]CGRAMMAR.C;1;1',x2,x1,x3) #define Baugamper(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugcat(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugeq(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugeqv(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugge(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bauggt(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bauglcat(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugle(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bauglt(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugne(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugneqv(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3) #define Baugseq(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugsge(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugsgt(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugsle(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugslt(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Baugsne(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bcaret(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bcareta(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bcat(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bdiff(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bdiffa(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Beq(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Beqv(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bge(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bgt(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Binter(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bintera(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Blcat(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Ble(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Blim(x1,x2,x3) $$ = tree4(N_Limit,x2,x1,x3) #define Blt(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bminus(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bminusa(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bmod(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bmoda(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bne(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bneqv(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bplus(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bplusa(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3) #define Brace(x1,x2,x3) $$ = x2 #define Brack(x1,x2,x3) $$ = list_nd(x1,x2) #define Brassgn(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Break(x1,x2) $$ = tree3(N_Break,x1,x2) #define Brswap(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bseq(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bsge(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bsgt(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bslash(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bslasha(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bsle(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bslt(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bsne(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bstar(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bstara(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Bswap(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Bunion(x1,x2,x3) $$ = binary_nd(x2,x1,x3) #define Buniona(x1,x2,x3) $$ = aug_nd(x2,x1,x3) #define Case(x1,x2,x3,x4,x5,x6) $$ = case_nd(x1,x2,x5) #define Caselist(x1,x2,x3) $$ = tree4(N_Clist,x2,x1,x3) #define Cclause0(x1,x2,x3) $$ = tree4(N_Ccls,x2,x1,x3) #define Cclause1(x1,x2,x3) $$ = tree4(N_Ccls,x2,x1,x3) #define Cliter(x) CSym0(x) = putlit(Str0(x),F_CsetLit,(int)Val1(x)) #define Colon(x) $$ = x #define Compound(x1,x2,x3) $$ = tree4(N_Slist,x2,x1,x3) #define Create(x1,x2) $$ = tree3(N_Create,x1,x2);\ proc_lst->has_coexpr = 1; #define Elst0(x) $$ = x; #define Elst1(x1,x2,x3) $$ = tree4(N_Elist,x2,x1,x3); #define Every0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Every1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) #define Fail(x) $$ = tree4(N_Ret,x,x,EmptyNode) #define Field(x1,x2,x3) $$ = tree4(N_Field,x2,x1,x3) #define Global0(x) idflag = F_Global #define Global1(x1,x2,x3) /* empty */ #define Globdcl(x) /* empty */ #define Ident(x) install(Str0(x),idflag) #define Idlist(x1,x2,x3) install(Str0(x3),idflag) #define If0(x1,x2,x3,x4) $$ = tree5(N_If,x1,x2,x4,EmptyNode) #define If1(x1,x2,x3,x4,x5,x6) $$ = tree5(N_If,x1,x2,x4,x6) #define Iliter(x) CSym0(x) = putlit(Str0(x),F_IntLit,0) #define Initial1() $$ = EmptyNode #define Initial2(x1,x2,x3) $$ = x2 #define Invocdcl(x) /* empty */ #define Invocable(x1,x2) /* empty */ #define Invoclist(x1,x2, x3) /* empty */ #define Invocop1(x) invoc_grp(Str0(x)); #define Invocop2(x) invocbl(x, -1); #define Invocop3(x1,x2,x3) invocbl(x1, atoi(Str0(x3))); #define Invoke(x1,x2,x3,x4) $$ = invk_nd(x2,x1,x3) #define Keyword(x1,x2) $$ = key_leaf(x1,Str0(x2)) #define Kfail(x1,x2) $$ = key_leaf(x1,spec_str("fail")) #define Link(x1,x2) /* empty */ #define Linkdcl(x) /* empty */ #define Lnkfile1(x) lnkdcl(Str0(x)); #define Lnkfile2(x) lnkdcl(Str0(x)); #define Lnklist(x1,x2,x3) /* empty */ #define Local(x) idflag = F_Dynamic #define Locals1() /* empty */ #define Locals2(x1,x2,x3,x4) /* empty */ #define Mcolon(x) $$ = x #define Nexpr() $$ = EmptyNode #define Next(x) $$ = tree2(N_Next,x) #define Paren(x1,x2,x3) if ((x2)->n_type == N_Elist)\ $$ = invk_nd(x1,EmptyNode,x2);\ else\ $$ = x2 #define Pcolon(x) $$ = x #define Pdco0(x1,x2,x3) $$ = invk_nd(x2,x1,list_nd(x2,EmptyNode)) #define Pdco1(x1,x2,x3,x4) $$ = invk_nd(x2,x1,list_nd(x2,x3)) #define Pdcolist0(x) $$ = tree3(N_Create,x,x);\ proc_lst->has_coexpr = 1; #define Pdcolist1(x1,x2,x3) $$ =tree4(N_Elist,x2,x1,tree3(N_Create,x2,x3));\ proc_lst->has_coexpr = 1; #define Proc1(x1,x2,x3,x4,x5,x6) $$ = tree6(N_Proc,x1,x1,x4,x5,x6) #define Procbody1() $$ = EmptyNode #define Procbody2(x1,x2,x3) $$ = tree4(N_Slist,x2,x1,x3) #define Procdcl(x) proc_lst->tree = x #define Prochead1(x1,x2) init_proc(Str0(x2));\ idflag = F_Argument #define Prochead2(x1,x2,x3,x4,x5,x6) /* empty */ #define Progend(x1,x2) /* empty */ #define Recdcl(x) /* empty */ #define Record1(x1, x2) init_rec(Str0(x2));\ idflag = F_Field #define Record2(x1,x2,x3,x4,x5,x6) /* empty */ #define Repeat(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Return(x1,x2) $$ = tree4(N_Ret,x1,x1,x2) #define Rliter(x) CSym0(x) = putlit(Str0(x),F_RealLit,0) #define Section(x1,x2,x3,x4,x5,x6) $$ = sect_nd(x4,x1,x3,x5) #define Sliter(x) CSym0(x) = putlit(Str0(x),F_StrLit,(int)Val1(x)) #define Static(x) idflag = F_Static #define Subscript(x1,x2,x3,x4) $$ = buildarray(x1,x2,x3) #define Suspend0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Suspend1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) #define To0(x1,x2,x3) $$ = to_nd(x2,x1,x3) #define To1(x1,x2,x3,x4,x5) $$ = toby_nd(x2,x1,x3,x5) #define Uat(x1,x2) $$ = tree5(N_Activat,x1,x1,EmptyNode,x2) #define Ubackslash(x1,x2) $$ = unary_nd(x1,x2) #define Ubang(x1,x2) $$ = unary_nd(x1,x2) #define Ubar(x1,x2) $$ = tree3(N_Bar,x2,x2) #define Ucaret(x1,x2) $$ = unary_nd(x1,x2) #define Uconcat(x1,x2) $$ = tree3(N_Bar,x2,x2) #define Udiff(x1,x2) $$ = MultiUnary(x1,x2) #define Udot(x1,x2) $$ = unary_nd(x1,x2) #define Uequiv(x1,x2) $$ = MultiUnary(x1,x2) #define Uinter(x1,x2) $$ = MultiUnary(x1,x2) #define Ulconcat(x1,x2) $$ = tree3(N_Bar,x2,x2) #define Ulexeq(x1,x2) $$ = MultiUnary(x1,x2) #define Ulexne(x1,x2) $$ = MultiUnary(x1,x2) #define Uminus(x1,x2) $$ = unary_nd(x1,x2) #define Unot(x1,x2) $$ = tree3(N_Not,x2,x2) #define Unotequiv(x1,x2) $$ = MultiUnary(x1,x2) #define Until0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Until1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) #define Unumeq(x1,x2) $$ = unary_nd(x1,x2) #define Unumne(x1,x2) $$ = MultiUnary(x1,x2) #define Uplus(x1,x2) $$ = unary_nd(x1,x2) #define Uqmark(x1.I VMS.BCK~[V9.SRC.ICONC]CGRAMMAR.C;111$,x2) $$ = unary_nd(x1,x2) #define Uslash(x1,x2) $$ = unary_nd(x1,x2) #define Ustar(x1,x2) $$ = unary_nd(x1,x2) #define Utilde(x1,x2) $$ = unary_nd(x1,x2) #define Uunion(x1,x2) $$ = MultiUnary(x1,x2) #define Var(x) LSym0(x) = putloc(Str0(x),0) #define While0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define While1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) %} %% #include "../h/grammar.h" %% /* * xfree(p) -- used with free(p) macro to avoid compiler errors from * miscast free calls generated by Yacc. */ #undef free static novalue xfree(p) char *p; { free(p); } /*#define free(p) xfree((char*)p)*/ *[V9.SRC.ICONC]CHKINV.C;1+,.!/ 4!!-~0123KPWO"56߻7i89Jj$GHJ/* * chkinv.c - routines to determine which global names are only * used as immediate operand to invocation and to directly invoke * the corresponding operations. In addition, simple assignments to * names variables are recognized and it is determined whether * procedures return, suspend, or fail. */ #include "../h/gsupport.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ctoken.h" #include "cglobals.h" #include "ccode.h" #include "cproto.h" /* * prototypes for static functions. */ hidden int chg_ret Params((int flag)); hidden novalue chksmpl Params((struct node *n, int smpl_invk)); hidden int seq_exec Params((int exec_flg1, int exec_flg2)); hidden int spcl_inv Params((struct node *n, struct node *asgn)); static ret_flag; /* * chkinv - check for invocation and assignment optimizations. */ novalue chkinv() { struct gentry *gp; struct pentry *proc; int exec_flg; int i; if (debug_info) return; /* The following analysis is not valid */ /* * start off assuming that global variables for procedure, etc. are * only used as immediate operands to invocations then mark any * which are not. Any variables retaining the property are never * changed. Go through the code and change invocations to such * variables to invocations directly to the operation. */ for (i = 0; i < GHSize; i++) for (gp = ghash[i]; gp != NULL; gp = gp->blink) { if (gp->flag & (F_Proc | F_Builtin | F_Record) && !(gp->flag & F_StrInv)) gp->flag |= F_SmplInv; /* * However, only optimize normal cases for main. */ if (strcmp(gp->name, "main") == 0 && (gp->flag & F_Proc) && (gp->val.proc->nargs < 0 || gp->val.proc->nargs > 1)) gp->flag &= ~(uword)F_SmplInv; /* * Work-around to problem that a co-expression block needs * block for enclosing procedure: just keep procedure in * a variable to force outputting the block. Note, this * inhibits tailored calling conventions for the procedure. */ if ((gp->flag & F_Proc) && gp->val.proc->has_coexpr) gp->flag &= ~(uword)F_SmplInv; } /* * Analyze code in each procedure. */ for (proc = proc_lst; proc != NULL; proc = proc->next) { chksmpl(Tree1(proc->tree), 0); /* initial expression */ chksmpl(Tree2(proc->tree), 0); /* procedure body */ } /* * Go through each procedure performing "naive" optimizations on * invocations and assignments. Also determine whether the procedure * returns, suspends, or fails (possibly by falling through to * the end). */ for (proc = proc_lst; proc != NULL; proc = proc->next) { ret_flag = 0; spcl_inv(Tree1(proc->tree), NULL); exec_flg = spcl_inv(Tree2(proc->tree), NULL); if (exec_flg & DoesFThru) ret_flag |= DoesFail; proc->ret_flag = ret_flag; } } /* * smpl_invk - find any global variable uses that are not a simple * invocation and mark the variables. */ static novalue chksmpl(n, smpl_invk) struct node *n; int smpl_invk; { struct node *cases; struct node *clause; struct lentry *var; int i; int lst_arg; switch (n->n_type) { case N_Alt: case N_Apply: case N_Limit: case N_Slist: chksmpl(Tree0(n), 0); chksmpl(Tree1(n), 0); break; case N_Activat: chksmpl(Tree1(n), 0); chksmpl(Tree2(n), 0); break; case N_Augop: chksmpl(Tree2(n), 0); chksmpl(Tree3(n), 0); break; case N_Bar: case N_Break: case N_Create: case N_Field: case N_Not: chksmpl(Tree0(n), 0); break; case N_Case: chksmpl(Tree0(n), 0); /* control clause */ cases = Tree1(n); while (cases != NULL) { if (cases->n_type == N_Ccls) { clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } chksmpl(Tree0(clause), 0); /* value of clause */ chksmpl(Tree1(clause), 0); /* body of clause */ } if (Tree2(n) != NULL) chksmpl(Tree2(n), 0); /* default */ break; case N_Cset: case N_Int: case N_Real: case N_Str: case N_Empty: case N_Next: break; case N_Id: if (!smpl_invk) { /* * The variable is being used somewhere other than in a simple * invocation. */ var = LSym0(n); if (var->flag & F_Global) var->val.global->flag &= ~F_SmplInv; } break; case N_If: chksmpl(Tree0(n), 0); chksmpl(Tree1(n), 0); chksmpl(Tree2(n), 0); break; case N_Invok: lst_arg = 1 + Val0(n); /* * Check the thing being invoked, noting that it is in fact being * invoked. */ chksmpl(Tree1(n), 1); for (i = 2; i <= lst_arg; ++i) chksmpl(n->n_field[i].n_ptr, 0); /* arg i - 1 */ break; case N_InvOp: lst_arg = 1 + Val0(n); for (i = 2; i <= lst_arg; ++i) chksmpl(n->n_field[i].n_ptr, 0); /* arg i */ break; case N_Loop: { switch ((int)Val0(Tree0(n))) { case EVERY: case SUSPEND: case WHILE: case UNTIL: chksmpl(Tree1(n), 0); /* control clause */ chksmpl(Tree2(n), 0); /* do clause */ break; case REPEAT: chksmpl(Tree1(n), 0); /* clause */ break; } } case N_Ret: if (Val0(Tree0(n)) == RETURN) chksmpl(Tree1(n), 0); break; case N_Scan: chksmpl(Tree1(n), 0); chksmpl(Tree2(n), 0);/^E VMS.BCK~[V9.SRC.ICONC]CHKINV.C;1N;1! break; case N_Sect: chksmpl(Tree2(n), 0); chksmpl(Tree3(n), 0); chksmpl(Tree4(n), 0); break; default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); } } /* * spcl_inv - look for general invocations that can be replaced by * special invocations. Simple assignment to a named variable is * is a particularly special case. Also, determine whether execution * might "fall through" this code and whether the code might fail. */ static int spcl_inv(n, asgn) struct node *n; struct node *asgn; /* the result goes into this special-cased assignment */ { struct node *cases; struct node *clause; struct node *invokee; struct gentry *gvar; struct loop { int exec_flg; struct node *asgn; struct loop *prev; } loop_info; struct loop *loop_sav; int exec_flg; int i; int lst_arg; static struct loop *cur_loop = NULL; switch (n->n_type) { case N_Activat: if (asgn != NULL) Val0(asgn) = AsgnDeref; /* assume worst case */ return seq_exec(spcl_inv(Tree1(n), NULL), spcl_inv(Tree2(n), NULL)); case N_Alt: exec_flg = spcl_inv(Tree0(n), asgn) & DoesFThru; return exec_flg | spcl_inv(Tree1(n), asgn); case N_Apply: if (asgn != NULL) Val0(asgn) = AsgnCopy; /* assume worst case */ return seq_exec(spcl_inv(Tree0(n), NULL), spcl_inv(Tree1(n), NULL)); case N_Augop: exec_flg = chg_ret(Impl1(n)->ret_flag); if (Tree2(n)->n_type == N_Id) { /* * This is an augmented assignment to a named variable. * An optimized version of assignment can be used. */ n->n_type = N_SmplAug; if (Impl1(n)->use_rslt) Val0(n) = AsgnCopy; else Val0(n) = AsgnDirect; } else { if (asgn != NULL) Val0(asgn) = AsgnDeref; /* this operation produces a variable */ exec_flg = seq_exec(exec_flg, spcl_inv(Tree2(n), NULL)); exec_flg = seq_exec(exec_flg, chg_ret(Impl0(n)->ret_flag)); } return seq_exec(exec_flg, spcl_inv(Tree3(n), NULL)); case N_Bar: return spcl_inv(Tree0(n), asgn); case N_Break: if (cur_loop == NULL) { nfatal(n, "invalid context for break", NULL); return 0; } loop_sav = cur_loop; cur_loop = cur_loop->prev; loop_sav->exec_flg |= spcl_inv(Tree0(n), loop_sav->asgn); cur_loop = loop_sav; return 0; case N_Create: spcl_inv(Tree0(n), NULL); return DoesFThru; case N_Case: exec_flg = spcl_inv(Tree0(n), NULL) & DoesFail; /* control clause */ cases = Tree1(n); while (cases != NULL) { if (cases->n_type == N_Ccls) { clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } spcl_inv(Tree0(clause), NULL); exec_flg |= spcl_inv(Tree1(clause), asgn); } if (Tree2(n) != NULL) exec_flg |= spcl_inv(Tree2(n), asgn); /* default */ else exec_flg |= DoesFail; return exec_flg; case N_Cset: case N_Int: case N_Real: case N_Str: case N_Empty: return DoesFThru; case N_Field: if (asgn != NULL) Val0(asgn) = AsgnDeref; /* operation produces variable */ return spcl_inv(Tree0(n), NULL); case N_Id: if (asgn != NULL) Val0(asgn) = AsgnDeref; /* variable */ return DoesFThru; case N_If: spcl_inv(Tree0(n), NULL); exec_flg = spcl_inv(Tree1(n), asgn); if (Tree2(n)->n_type == N_Empty) exec_flg |= DoesFail; else exec_flg |= spcl_inv(Tree2(n), asgn); return exec_flg; case N_Invok: lst_arg = 1 + Val0(n); invokee = Tree1(n); exec_flg = DoesFThru; for (i = 2; i <= lst_arg; ++i) exec_flg = seq_exec(exec_flg, spcl_inv(n->n_field[i].n_ptr, NULL)); if (invokee->n_type == N_Id && LSym0(invokee)->flag & F_Global) { /* * This is an invocation of a global variable. If we can * convert this to a direct invocation, determine whether * it is an invocation of a procedure, built-in function, * or record constructor; each has a difference kind of * direct invocation node. */ gvar = LSym0(invokee)->val.global; if (gvar->flag & F_SmplInv) { switch (gvar->flag & (F_Proc | F_Builtin | F_Record)) { case F_Proc: n->n_type = N_InvProc; Proc1(n) = gvar->val.proc; return DoesFThru | DoesFail; /* assume worst case */ case F_Builtin: n->n_type = N_InvOp; Impl1(n) = gvar->val.builtin; if (asgn != NULL && Impl1(n)->use_rslt) Val0(asgn) = AsgnCopy; return seq_exec(exec_flg, chg_ret( gvar->val.builtin->ret_flag)); case F_Record: n->n_type = N_InvRec; Rec1(n) = gvar->val.rec; return seq_exec(exec_flg, DoesFThru | (err_conv ? DoesFail : 0)); } } } if (asgn != NULL) Val0(asgn) = AsgnCopy; /* assume worst case */ spcl_inv(invokee, NULL); return DoesFThru | DoesFail; /* assume worst case */ case N_InvOp: if (Impl1(n)->op != NULL && strcmp(Impl1(n)->op, ":=") == 0 && Tree2(n)->n_type == N_Id) { /* * This is a simple assignment to a named variable. * An optimized version of assignment can be used. */ n->n_type = N_SmplAsgn; /* * For now, assume rhs of := can compute directly into a * variable. This may be changed when the rhs is examined * in the recursive call to spcl_inv(). */ Val0(n) = AsgnDirect; return spcl_inv(Tree3(n), n); } else { /* * No special cases. */ lst_arg = 1 + Val0(n); exec_flg = chg_ret(Impl1(n)->ret_flag); for (i = 2; i <= lst_arg; ++i) exec_flg = seq_exec(exec_flg, spcl_inv(n->n_field[i].n_ptr, NULL)); /* arg i */ if (asgn != NULL && Impl1(n)->use_rslt) Val0(asgn) = AsgnCopy; return exec_flg; } case N_Limit: return seq_exec(spcl_inv(Tree0(n), asgn), spcl_inv(Tree1(n), NULL)) | DoesFail; case N_Loop: { loop_info.prev = cur_loop; loop_info.exec_flg = 0; loop_info.asgn = asgn; cur_loop = &loop_info; switch ((int)Val0(Tree0(n))) { case EVERY: case WHILE: case UNTIL: spcl_inv(Tree1(n), NULL); /* control clause */ spcl_inv(Tree2(n), NULL); /* do clause */ exec_flg = DoesFail; break; case SUSPEND: s0ȹD{ VMS.BCK~[V9.SRC.ICONC]CHKINV.C;1N;1;1!o pcl_inv(Tree1(n), NULL); /* control clause */ spcl_inv(Tree2(n), NULL); /* do clause */ ret_flag |= DoesSusp; exec_flg = DoesFail; break; case REPEAT: spcl_inv(Tree1(n), NULL); /* clause */ exec_flg = 0; break; } exec_flg |= cur_loop->exec_flg; cur_loop = cur_loop->prev; return exec_flg; } case N_Next: return 0; case N_Not: exec_flg = spcl_inv(Tree0(n), NULL); return ((exec_flg & DoesFail) ? DoesFThru : 0) | ((exec_flg & DoesFThru) ? DoesFail: 0); case N_Ret: if (Val0(Tree0(n)) == RETURN) { exec_flg = spcl_inv(Tree1(n), NULL); ret_flag |= DoesRet; if (exec_flg & DoesFail) ret_flag |= DoesFail; } else ret_flag |= DoesFail; return 0; case N_Scan: if (asgn != NULL) Val0(asgn) = AsgnCopy; /* assume worst case */ return seq_exec(spcl_inv(Tree1(n), NULL), spcl_inv(Tree2(n), NULL)); case N_Sect: if (asgn != NULL && Impl0(n)->use_rslt) Val0(asgn) = AsgnCopy; exec_flg = spcl_inv(Tree2(n), NULL); exec_flg = seq_exec(exec_flg, spcl_inv(Tree3(n), NULL)); exec_flg = seq_exec(exec_flg, spcl_inv(Tree4(n), NULL)); return seq_exec(exec_flg, chg_ret(Impl0(n)->ret_flag)); case N_Slist: exec_flg = spcl_inv(Tree0(n), NULL); if (exec_flg & (DoesFThru | DoesFail)) exec_flg = DoesFThru; return seq_exec(exec_flg, spcl_inv(Tree1(n), asgn)); default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); /* NOTREACHED */ } } /* * seq_exec - take the execution flags for sequential pieces of code * and compute the flags for the combined code. */ static int seq_exec(exec_flg1, exec_flg2) int exec_flg1; int exec_flg2; { return (exec_flg1 & exec_flg2 & DoesFThru) | ((exec_flg1 | exec_flg2) & DoesFail); } /* * chg_ret - take a return flag and change suspend and return to * "fall through". If error conversion is supported, change error * failure to failure. * */ static int chg_ret(flag) int flag; { int flg1; flg1 = flag & DoesFail; if (flag & (DoesRet | DoesSusp)) flg1 |= DoesFThru; if (err_conv && (flag & DoesEFail)) flg1 |= DoesFail; return flg1; } t*[V9.SRC.ICONC]CLEX.C;1+,./ 4q-~0123KPWO56ۛ7ܛ89Jj$GHJ/* * clex.c -- the lexical analyzer for iconc. */ #define Iconc #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "ctoken.h" #include "ctree.h" #include "csym.h" #include "ccode.h" #include "cproto.h" #include #include "../h/parserr.h" #include "../common/lextab.h" #include "../common/yylex.h" #include "../common/error.h" *[V9.SRC.ICONC]CLOCAL.C;1+,./ 4-~0123KPWO5670.M89Jj$GHJ/* * clocal.c -- compiler functions needed for different systems. */ #include "../h/gsupport.h" /* * The following code is operating-system dependent [@tlocal.01]. * Routines needed by different systems. */ #if PORT /* place to put anything system specific */ Deliberate Syntax Error #endif /* PORT */ #if ATARI_ST unsigned long _STACK = 10240; /* MNEED ALSO, PLEASE */ char *getenv(); char iconpath[80]; /* the path returned by findpath() */ int pathset = 0; /* not yet setup */ char *findpath(); char *getpathenv(); /* Pass a command to a shell. Find what/where is the shell by the environment variable SHELL */ int system(cmd) char *cmd; { char *shell, tail[128]; int rc; if ((shell = getenv("SHELL")) == NULL) { fprintf(stderr,"SHELL not found.\n"); return -1; } strcpy(tail + 1, cmd); *tail = strlen(tail) - 1; rc = Pexec(shell, tail, NULL); return (rc >= 0) ? rc : -1; } /* Spawn a process, with: variable arg list, and path found by environment. */ int Forkvp(cmd, argv) char *cmd, **argv; { char file[80]; int n; extern char *patharg; if (filefound(NULL, cmd) == 0) { if (!pathset) { if (patharg) { strcpy(iconpath, patharg); if ((n = strlen(iconpath)) > 0 && iconpath[n-1] != '\\') strcat(iconpath, "\\"); } else { if (findpath(cmd) == NULL) return -1; } pathset = 1; } strcpy(file, iconpath); strcat(file, cmd); } else strcpy(file, cmd); return Forkv(file, argv); } /* Spawn a process with variable arg list. */ int Forkv(cmd, argv) char *cmd, **argv; { char tail[128]; int i; *tail = tail[1] = '\0'; for (i = 1; argv[i]; i++) { strcat(tail," "); strcat(tail,argv[i]); } *tail = strlen(tail) - 1; return Pexec(cmd, tail, NULL); } /* findpath() assumes that the name passed to it is complete. (i.e. with the proper extension...) */ char *findpath(prog) char *prog; { char *ppath, *fpath; int error, drvnum, drvmap, drvmask; /* First : check if ICON environment variable exist... (because it may be a lot faster than check the whole PATH...) */ if ((ppath = getenv("ICON")) != NULL) { strcpy(iconpath, ppath); if ((error = strlen(iconpath)) > 0) { if (iconpath[error - 1] != '\\') strcat(iconpath, "\\"); if (filefound(iconpath, prog) != 0) return iconpath; } } /* Second : check with PATH... */ if ((ppath = getenv("PATH")) != NULL) { error = 0; while ((fpath = getpathenv(ppath, error)) != NULL) { if (filefound(fpath, prog) != 0) { strcpy(iconpath, fpath); return iconpath; } error++; } } /* Not found here or with the ICON or PATH environment variable. Check all the mounted disk drives root directory, in alphabetical order. */ strcpy(iconpath, "a:\\"); drvmap = bios(10); /* Drvmap() */ for (drvnum = 0, drvmask = 1; drvnum < 16; drvnum++, drvmask <<= 1, iconpath[0]++) if ((drvmask & drvmap) && (filefound(iconpath, prog) != 0)) return iconpath; /* Not found... */ return NULL; } int Pexec(file, tail, env) char *file, *tail, *env; { int rc; if ((rc = gemdos(0x4b,0,file,tail, env)) != 0) { switch (rc) { case -33: fprintf(stderr, "Fork failed: file <%s> not found.\n", file); break; case -39: fprintf(stderr, "Fork failed: <%s> Not enough memory.\n", file); break; case -66: fprintf(stderr, "Fork failed: <%s> Bad load format.\n", file); break; default: } } return rc; } /* getpathenv() find the nth path entry in the env var PATH. append a backslash to it, if necessary; strcat ready. *1 VMS.BCK~[V9.SRC.ICONC]CLOCAL.C;1N;1;1C/ char *getpathenv(path, n) char *path; int n; { char *Path2; char *sep = " ,;"; /* path separator in PATH */ static char local[128]; int i, j; for (i = 0; i < n; i++) { Path2 = strpbrk(path, sep); if (Path2 == NULL) break; path = Path2 + 1; /* Past the sep */ if ((j = strspn(path, sep)) > 0) path += j; } if (n == i) { strcpy(local, path); Path2 = strpbrk(local, sep); if (Path2 != NULL) { *Path2++ = '\\'; *Path2 = '\0'; } else strcat(local, "\\"); if (strlen(local) == 1) local[0] = '\0'; return &local[0]; } return NULL; } /* test if a file exists. */ int filefound(path, file) char *path, *file; { char filepath[80]; if ((path != NULL) && (path[0] != '\0')) { strcpy(filepath, path); strcat(filepath, file); } else strcpy(filepath, file); if (gemdos(0x43, filepath, 0, 0) >= 0) return 1; return 0; } /* * This function returns a pointer to a static character string containing * the environment value assigned to the variable passed. (Fonorow/Nowlin) */ #define BASEPAGE _basepage #define SETLEN 256 char *getenv(var) char *var; { extern long *BASEPAGE; register int varlen; register char *lenv; static char val[SETLEN]; /* calculate the variable length */ varlen = strlen(var); /* check all the variables in the environment */ for (lenv = (char *) BASEPAGE[11]; *lenv; lenv += strlen(lenv) + 1) { /* if this variable matches the variable name passed exactly */ if (*(lenv+varlen) == '=' && strncmp(var,lenv,varlen) == 0) { /* save the value and return a pointer to it */ strcpy(val,lenv+varlen+1); return val; } } /* the variable wasn't found so return null */ return (char *) 0; } #endif /* ATARI_ST */ #if MACINTOSH #if MPW /* * These are stubs for several routines defined in the runtine * library that aren't necessary in MPW tools. These routines are * referenced by the Standard C Library I/O functions, but are never called. * Because they are referenced, the linker can't remove them. The stubs in * this file provide dummy routines which are never called, but reduce the * size of the tool. */ /* Console Driver These drivers provide I/O to the screen (or a specified port) in applications. They aren't necessary in tools. */ _coFAccess() {} _coClose() {} _coRead() {} _coWrite() {} _coIoctl() {} _coExit() {} /* File System Driver Tools use the file system drivers linked with the MPW Shell. */ _fsFAccess() {} _fsClose() {} _fsRead() {} _fsWrite() {} _fsIoctl() {} _fsExit() {} /* System Driver Tools use the system drivers linked with the MPW Shell. */ _syFAccess() {} _syClose() {} _syRead() {} _syWrite() {} _syIoctl() {} _syExit() {} /* Floating Point Conversion Routines These routines, called by printf, are only necessary if floating point formatting is used. */ ecvt() {} fcvt() {} #endif /* MPW */ #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT pointer xmalloc(n) long n; { return calloc((size_t)n,sizeof(char)); } #endif /* MICROSOFT */ #if MICROSOFT int _stack = (8 * 1024); #endif /* MICROSOFT */ #if TURBO extern unsigned _stklen = 8192; #endif /* TURBO */ #if ZTC_386 #ifndef DOS386 int _stack = (8 * 1024); #endif /* DOS386 */ #endif /* ZTC_386 */ #endif /* MSDOS */ #if MVS || VM #endif /* MVS || VM */ #if OS2 #endif /* OS2 */ #if UNIX #endif /* UNIX */ #if VMS #endif /* VMS */ /* * End of operating-system specific code. */ char *tjunk; /* avoid empty module */ *[V9.SRC.ICONC]CMAIN.C;1+,.$/ 4$#-~0123KPWO%56ۛ7 ۛ89Jj$GHJ/* * cmain.c - main program icon compiler. */ #include #include "../h/gsupport.h" #include "ctrans.h" #include "ctree.h" #include "ccode.h" #include "csym.h" #include "cproto.h" /* * Prototypes. */ hidden novalue execute Params((char *ofile, char *efile, char **args)); hidden FILE *open_out Params((char *fname)); hidden novalue rmfile Params((char *fname)); hidden novalue report Params((char *s)); hidden novalue usage Params((noargs)); #ifdef strlen #undef strlen /* pre-defined in some contexts */ #endif /* strlen */ #ifdef ExpTools char *toolstr = "${TOOLS}"; #endif /* ExpTools */ char patchpath[MaxPath+18] = "%PatchStringHere->"; /* * The following code is operating-system dependent [@tmain.01]. Definition * of refpath. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if UNIX || AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || OS2 || VM char *refpath = RefPath; #endif /* UNIX ... */ #if VMS char *refpath = "ICON_BIN:"; #endif /* VMS */ /* * End of operating-system specific code. */ /* * Define global variables. */ #define Global #define Init(v) = v #include "cglobals.h" /* * getopt() variables */ extern int optindex; /* index into parent argv vector */ extern int optopt; /* character checked for validity */ extern char *optarg; /* argument associated with option */ /* * main program */ novalue main(argc,argv) int argc; char **argv; { int no_c_comp = 0; /* suppress C compile and link? */ int errors = 0; /* compilation errors */ char *cfile = NULL; /* name of C file - primary */ char *hfile = NULL; /* name of C file - include */ char *ofile = NULL; /* name of executable result */ char *efile = NULL; /* stderr file */ char *db_name = "rt.db"; /* data base name */ char *incl_file = "rt.h"; /* header file name */ char *db_path; /* path to data base */ char *db_lst; /* list of private data bases */ char *incl_path; /* path to header file */ char *s, c1; char buf[MaxFileName]; /* file name construction buffer */ #ifdef ExpTools char Buf[MaxFileName]; char *tools; /* patch and TOOLS string buffer */ #endif /* ExpTools */ int c; int ret_code; struct fileparts *fp; #ifdef ExpTools if (strlen(patchpath)>18) { refpath = patchpath+18; if(!strncmp(refpath,toolstr,strlen(toolstr))) { /* Is it TOOLS */ refpath = refpath+strlen(toolstr); /* skip TOOLS */ if ((tools = getenv("TOOLS")) == NULL) { fprintf(stderr, "patchstr begins with \"${TOOLS}\" but ${TOOLS} has no value\n"); fprintf(stderr, "patchstr=%s\ncompilation aborted\n", refpath); exit(ErrorExit); } else strcpy(Buf,tools); strcat(Buf,refpath); /* append name */ if (Buf[strlen(Buf)-1] != '/') strcat(Buf,"/"); refpath = Buf; /* use refpath */ } } fprintf(stderr,"iconc library files found in %s\n",refpath); #else /* ExpTools */ if ((int)strlen(patchpath) > 18) refpath = patchpath+18; #endif /* ExpTools */ /* * Process options. */ while ((c = getopt(argc,argv,IconOptions)) != EOF) switch (c) { case 'C': /* -C C-comp: C compiler*/ c_comp = optarg; break; case 'E': /* -E: preprocess only */ pponly = 1; no_c_comp = 1; break; case 'L': /* Ignore: interpreter only */ break; case 'S': /* Ignore: interpreter2v] VMS.BCK~[V9.SRC.ICONC]CMAIN.C;1CN;1;1$( only */ break; case 'T': just_type_trace = 1; break; case 'c': /* -c: produce C file only */ no_c_comp = 1; break; case 'e': /* -e file: redirect stderr */ efile = optarg; break; case 'f': /* -f: enable features */ for (s = optarg; *s != '\0'; ++s) { switch (*s) { case 'a': /* -fa: enable all features */ line_info = 1; debug_info = 1; err_conv = 1; largeints = 1; str_inv = 1; break; case 'd': /* -fd: enable debugging features */ line_info = 1; debug_info = 1; break; case 'e': /* -fe: enable error conversion */ err_conv = 1; break; case 'l': /* -fl: support large integers */ largeints = 1; break; case 'n': /* -fn: enable line numbers */ line_info = 1; break; case 's': /* -fs: enable full string invocation */ str_inv = 1; break; default: quitf("-f option must be a, d, e, l, n, or s. found: %s", optarg); } } break; case 'm': /* -m: preprocess using m4(1) [UNIX] */ m4pre = 1; break; case 'n': /* -n: disable optimizations */ for (s = optarg; *s != '\0'; ++s) { switch (*s) { case 'a': /* -na: disable all optimizations */ opt_cntrl = 0; allow_inline = 0; opt_sgnl = 0; do_typinfer = 0; break; case 'c': /* -nc: disable control flow opts */ opt_cntrl = 0; break; case 'e': /* -ne: disable expanding in-line */ allow_inline = 0; break; case 's': /* -ns: disable switch optimizations */ opt_sgnl = 0; break; case 't': /* -nt: disable type inference */ do_typinfer = 0; break; default: usage(); } } break; case 'o': /* -o file: name output file */ ofile = optarg; break; case 'p': /* -p C-opts: options for C comp */ if (*optarg == '\0') /* if empty string, clear options */ c_opts = optarg; else { /* else append to current set */ s = (char *)alloc(strlen(c_opts) + 1 + strlen(optarg) + 1); sprintf(s, "%s %s", c_opts, optarg); c_opts = s; } break; case 'r': /* -r path: primary runtime system */ refpath = optarg; break; case 's': /* -s: suppress informative messages */ verbose = 0; break; case 't': /* -t: &trace = -1 */ line_info = 1; debug_info = 1; trace = 1; break; case 'u': /* -u: warn about undeclared ids */ uwarn = 1; break; case 'v': /* -v: set level of verbosity */ if (sscanf(optarg, "%d%c", &verbose, &c1) != 1) quitf("bad operand to -v option: %s",optarg); break; default: case 'x': /* -x illegal until after file list */ usage(); } init(); /* initialize memory for translation */ /* * Load the data bases of information about run-time routines and * determine what libraries are needed for linking (these libraries * go before any specified on the command line). */ #ifdef EnvVars db_lst = getenv("DBLIST"); if (db_lst != NULL) db_lst = salloc(db_lst); #else /* EnvVars */ db_lst = NULL; #endif /* EnvVars */ s = db_lst; while (s != NULL) { db_lst = s; while (isspace(*db_lst)) ++db_lst; if (*db_lst == '\0') break; for (s = db_lst; !isspace(*s) && *s != '\0'; ++s) ; if (*s == '\0') s = NULL; else *s++ = '\0'; readdb(db_lst); addlib(salloc(makename(buf,SourceDir, db_lst, LibSuffix))); } db_path = (char *)alloc((unsigned int)strlen(refpath) + strlen(db_name) + 1); strcpy(db_path, refpath); strcat(db_path, db_name); readdb(db_path); addlib(salloc(makename(buf,SourceDir, db_path, LibSuffix))); /* * Scan the rest of the command line for file name arguments. */ while (optindex < argc) { if (strcmp(argv[optindex],"-x") == 0) /* stop at -x */ break; else if (strcmp(argv[optindex],"-") == 0) src_file("-"); /* "-" means standard input */ /* * The following code is operating-system dependent [@tmain.02]. Check for * C linker options on the command line. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if UNIX else if (argv[optindex][0] == '-') addlib(argv[optindex]); /* assume linker option */ #endif /* UNIX ... */ #if AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || OS2 || VM || VMS /* * Linker options on command line not supported. */ #endif /* AMIGA || ATARI_ST || ... */ /* * End of operating-system specific code. */ else { fp = fparse(argv[optindex]); /* parse file name */ if (*fp->ext == '\0' || smatch(fp->ext, SourceSuffix)) { makename(buf,SourceDir,argv[optindex], SourceSuffix); #if VMS strcat(buf, fp->version); #endif /* VMS */ src_file(buf); } else /* * The following code is operating-system dependent [@tmain.03]. Pass * appropriate files on to linker. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if UNIX /* * Assume all files that are not Icon source go to linker. */ addlib(argv[optindex]); #endif /* UNIX ... */ #if AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || OS2 || VM || VMS /* * Pass no files to the linker. */ quitf("bad argument %s",argv[optindex]); #endif /* AMIGA || ATARI_ST || ... */ /* * End of operating-system specific code. */ } optindex++; } if (srclst == NULL) usage(); /* error -- no files named */ if (pponly) { if (trans() == 0) exit (ErrorExit); else exit (NormalExit); } if (ofile == NULL) { /* if no -o file, synthesize a name */ if (strcmp(srclst->name,"-") == 0) ofile = salloc(makename(buf,TargetDir,"stdin",ExecSuffix)); else ofile = salloc(makename(buf,TargetDir,srclst->name,ExecSuffix)); } else { /* add extension if necessary */ fp = fparse(ofile); if (*fp->ext == '\0' && *ExecSuffix != '\0') ofile = salloc(makename(buf,NULL,ofile,ExecSuffix)); } /* * Make name of intermediate C files. */ cfile = salloc(makename(buf,TargetDir,ofile,CSuffix3K VMS.BCK~[V9.SRC.ICONC]CMAIN.C;1ICN;1$)); hfile = salloc(makename(buf,TargetDir,ofile,HSuffix)); codefile = open_out(cfile); fprintf(codefile, "#include \"%s\"\n", hfile); inclfile = open_out(hfile); fprintf(inclfile, "#define COMPILER 1\n"); incl_path = (char *)alloc((unsigned int)(strlen(refpath) + strlen(incl_file) + 1)); strcpy(incl_path, refpath); strcat(incl_path, incl_file); fprintf(inclfile,"#include \"%s\"\n", incl_path); /* * Translate .icn files to make C file. */ if ((verbose > 0) && !just_type_trace) report("Translating to C"); errors = trans(); if ((errors > 0) || just_type_trace) { /* exit if errors seen */ rmfile(cfile); rmfile(hfile); if (errors > 0) exit(ErrorExit); else exit(NormalExit); } fclose(codefile); fclose(inclfile); /* * Compile and link C file. */ if (no_c_comp) /* exit if no C compile wanted */ exit(NormalExit); #if !MSDOS if (verbose > 0) report("Compiling and linking C code"); #endif /* !MSDOS */ ret_code = ccomp(cfile, ofile); if (ret_code == ErrorExit) { fprintf(stderr, "*** C compile and link failed ***\n"); rmfile(ofile); } /* * Finish by removing C files. */ #if !MSDOS rmfile(cfile); rmfile(hfile); #endif /* !MSDOS */ rmfile(makename(buf,TargetDir,cfile,ObjSuffix)); if (ret_code == NormalExit && optindex < argc) { if (verbose > 0) report("Executing"); execute (ofile, efile, argv+optindex+1); } exit(ret_code); } /* * execute - execute compiled Icon program */ static novalue execute(ofile,efile,args) char *ofile, *efile, **args; { #if !(MACINTOSH && MPW) int n; char **argv, **p; #if UNIX char buf[MaxFileName]; /* file name construction buffer */ ofile = salloc(makename(buf,"./",ofile,ExecSuffix)); #endif /* UNIX */ for (n = 0; args[n] != NULL; n++) /* count arguments */ ; p = argv = (char **)alloc((unsigned int)((n + 2) * sizeof(char *))); *p++ = ofile; /* set executable file */ #if AMIGA && LATTICE *p = *args; while (*p++) { *p = *args; args++; } #else /* AMIGA && LATTICE */ while (*p++ = *args++) /* copy args into argument vector */ ; #endif /* AMIGA && LATTICE */ *p = NULL; if (efile != NULL && !redirerr(efile)) { fprintf(stderr, "Unable to redirect &errout\n"); fflush(stderr); } /* * The following code is operating-system dependent [@tmain.04]. It calls * the Icon program on the way out. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA #if AZTEC_C execvp(ofile,argv); return; #endif /* AZTEC_C */ #if LATTICE { struct ProcID procid; if (forkv(ofile,argv,NULL,&procid) == 0) { wait(&procid); return; } } #endif /* LATTICE */ #endif /* AMIGA */ #if ATARI_ST || MACINTOSH fprintf(stderr,"-x not supported\n"); fflush(stderr); #endif /* ATARI_ST || ... */ #if MSDOS #if MICROSOFT || TURBO execvp(ofile,argv); #endif /* MICROSOFT || ... */ #if HIGHC_386 || INTEL_386 || ZTC_386 || WATCOM fprintf(stderr,"-x not supported\n"); fflush(stderr); #endif /* HIGHC_386 || ... */ #endif /* MSDOS */ #if MVS || VM #if SASC exit(sysexec(ofile, argv)); #endif /* SASC */ fprintf(stderr,"-x not supported\n"); fflush(stderr); #endif /* MVS || VM */ #if OS2 || UNIX || VMS execvp(ofile,argv); #endif /* OS2 || UNIX || VMS */ /* * End of operating-system specific code. */ quitf("could not run %s",ofile); #else /* !(MACINTOSH && MPW) */ printf("-x not supported\n"); #endif /* !(MACINZTOSH && MPW) */ } static novalue report(s) char *s; { /* * The following code is operating-system dependent [@tmain.05]. Report * phase. */ #if PORT fprintf(stderr,"%s:\n",s); Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MSDOS || MVS || OS2 || UNIX || VM || VMS fprintf(stderr,"%s:\n",s); #endif /* AMIGA || ATARI_ST || ... */ #if MACINTOSH #if MPW printf("Echo '%s:' > Dev:StdErr\n",s); #endif /* MPW */ #if LSC fprintf(stderr,"%s:\n",s); #endif /* LSC */ #endif /* MACINTOSH */ /* * End of operating-system specific code. */ } /* * rmfile - remove a file */ static novalue rmfile(fname) char *fname; { /* * The following code is operating-system dependent [@tmain.06]. * remove files. */ #if PORT unlink(fname); Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MSDOS || MVS || OS2 || UNIX || VM || VMS unlink(fname); #endif /* AMIGA || ATARI_ST ... */ #if MACINTOSH #if MPW /* * MPW generates commands rather than doing the actions * at this time. */ fprintf(stdout,"Delete %s\n", fname); #endif /* MPW */ #if LSC unlink(fname); #endif /* LSC */ #endif /* MACINTOSH */ /* * End of operating-system specific code. */ } /* * open_out - open a C output file and write identifying information * to the front. */ static FILE *open_out(fname) char *fname; { FILE *f; static char *ident = "/*ICONC*/"; int c; int i; /* * If the file already exists, make sure it is old output from iconc * before overwriting it. Note, this test doesn't work if the file * is writable but not readable. */ f = fopen(fname, "r"); if (f != NULL) { for (i = 0; i < (int)strlen(ident); ++i) { c = getc(f); if (c == EOF) break; if ((char)c != ident[i]) quitf("%s not in iconc format; rename or delete, and rerun", fname); } fclose(f); } f = fopen(fname, "w"); if (f == NULL) quitf("cannot create %s", fname); fprintf(f, "%s\n", ident); /* write "belongs to iconc" comment */ id_comment(f); /* write detailed comment for human readers */ fflush(f); return f; } /* * Print an error message if called incorrectly. The message depends * on the legal options for this system. */ static novalue usage() { fprintf(stderr,"usage: %s %s file ... [-x args]\n", progname, CUsage); exit(ErrorExit); } *[V9.SRC.ICONC]CMEM.C;1+,./ 4b-~0123KPWO56pFQ7{89Jj$GHJ/* * cmem.c -- memory initialization and allocation for the translator. */ #include "../h/gsupport.h" #include "cglobals.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ccode.h" #include "cproto.h" struct centry *chash[CHSize]; /* hash area for constant table */ struct fentry *fhash[FHSize]; /* hash area for field table */ struct gentry *ghash[GHSize]; /* hash area for global table */ struct implement *bhash[IHSize]; /* hash area for built-in functions */ struct implement *khash4`a7 VMS.BCK~[V9.SRC.ICONC]CMEM.C;1CN;111q [IHSize]; /* hash area for keywords */ struct implement *ohash[IHSize]; /* hash area for operators */ struct implement *spec_op[NumSpecOp]; /* table of ops with special syntax */ char pre[PrfxSz] = {'0', '0', '0'}; /* initial function name prefix */ extern struct str_buf lex_sbuf; /* * init - initialize memory for the translator */ novalue init() { int i; init_str(); init_sbuf(&lex_sbuf); /* * Zero out the hash tables. */ for (i = 0; i < CHSize; i++) chash[i] = NULL; for (i = 0; i < FHSize; i++) fhash[i] = NULL; for (i = 0; i < GHSize; i++) ghash[i] = NULL; for (i = 0; i < IHSize; i++) { bhash[i] = NULL; khash[i] = NULL; ohash[i] = NULL; } /* * Clear table of operators with non-standard operator syntax. */ for (i = 0; i < NumSpecOp; ++i) spec_op[i] = NULL; } /* * init_proc - add a new entry on front of procedure list. */ novalue init_proc(name) char *name; { register struct pentry *p; int i; struct gentry *sym_ent; p = NewStruct(pentry); p->name = name; nxt_pre(p->prefix, pre, PrfxSz); p->prefix[PrfxSz] = '\0'; p->nargs = 0; p->args = NULL; p->ndynam = 0; p->dynams = NULL; p->nstatic = 0; p->has_coexpr = 0; p->statics = NULL; p->ret_flag = DoesRet | DoesFail | DoesSusp; /* start out pessimistic */ p->arg_lst = 0; p->lhash = (struct lentry **)alloc((unsigned int)((LHSize)*sizeof(struct lentry *))); for (i = 0; i < LHSize; i++) p->lhash[i] = NULL; p->next = proc_lst; proc_lst = p; sym_ent = instl_p(name, F_Proc); sym_ent->val.proc = proc_lst; } /* * init_rec - add a new entry on the front of the record list. */ novalue init_rec(name) char *name; { register struct rentry *r; struct gentry *sym_ent; static int rec_num = 0; r = NewStruct(rentry); r->name = name; nxt_pre(r->prefix, pre, PrfxSz); r->prefix[PrfxSz] = '\0'; r->rec_num = rec_num++; r->nfields = 0; r->fields = NULL; r->next = rec_lst; rec_lst = r; sym_ent= instl_p(name, F_Record); sym_ent->val.rec = r; } *[V9.SRC.ICONC]CODEGEN.C;1+,.r/ 4rr-~0123KPWOs56؛79ڛ89Jj$GHJ/* * codegen.c - routines to write out C code. */ #include #include "../h/gsupport.h" #include "ctrans.h" #include "cglobals.h" #include "csym.h" #include "ccode.h" #include "ctree.h" #include "cproto.h" /* * MinOne - arrays sizes must be at least 1. */ #define MinOne(n) ((n) > 0 ? (n) : 1) /* * ChkSeqNum - make sure a label has been given a sequence number. */ #define ChkSeqNum(x) if ((x)->SeqNum == 0) (x)->SeqNum = ++lbl_seq_num /* * ChkBound - for a given procedure, signals that transfer control to a * bounding label all use the same signal number. */ #define ChkBound(x) (((x)->LabFlg & Bounding) ? bound_sig : (x)) /* * When a switch statement for signal handling is optimized, there * are three possible forms of default clauses. */ #define DfltNone 0 /* no default clause */ #define DfltBrk 1 /* default is just a break */ #define DfltRetSig 2 /* default is to return the signal from the call */ /* * Prototypes for static functions. */ hidden int arg_nms Params((struct lentry *lptr, int prt)); hidden novalue bi_proc Params((char *name, struct implement *ip)); hidden novalue chkforgn Params((int outer)); hidden int dyn_nms Params((struct lentry *lptr, int prt)); hidden novalue fldnames Params((struct fldname *fields)); hidden novalue fnc_blk Params((struct gentry *gptr)); hidden novalue frame Params((int outer)); hidden novalue good_clsg Params((struct code *call, int outer)); hidden novalue initpblk Params((FILE *f, int c, char *prefix, char *name, int nquals, int nparam, int ndynam, int nstatic, int frststat)); hidden char *is_builtin Params((struct gentry *gptr)); hidden novalue proc_blk Params((struct gentry *gptr, int init_glbl)); hidden novalue prt_ary Params((struct code *cd, int outer)); hidden novalue prt_cond Params((struct code *cond)); hidden novalue prt_cont Params((struct c_fnc *cont)); hidden novalue prt_var Params((struct lentry *var, int outer)); hidden novalue prtcall Params((struct code *call, int outer)); hidden novalue prtcode Params((struct code *cd, int outer)); hidden novalue prtpccall Params((int outer)); hidden novalue rec_blk Params((struct gentry *gptr, int init_glbl)); hidden novalue smpl_clsg Params((struct code *call, int outer)); hidden novalue stat_nms Params((struct lentry *lptr, int prt)); hidden novalue val_loc Params((struct val_loc *rslt, int outer)); static int n_stat = -1; /* number of static variables */ /* * var_dcls - produce declarations necessary to implement variables * and to initialize globals and statics: procedure blocks, procedure * frames, record blocks, declarations for globals and statics, the * C main program. */ novalue var_dcls() { register int i; register struct gentry *gptr; struct gentry *gbl_main; struct pentry *prc_main; int n_glob = 0; int flag; int init_glbl; int first; char *pfx; /* * Output initialized array of descriptors for globals. */ fprintf(codefile, "\nstatic struct {word dword; union block *vword;}"); fprintf(codefile, " init_globals[NGlobals] = {\n"); prc_main = NULL; for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) { flag = gptr->flag & ~(F_Global | F_StrInv); if (strcmp(gptr->name, "main") == 0 && (gptr->flag & F_Proc)) { /* * Remember main procedure. */ gbl_main = gptr; prc_main = gbl_main->val.proc; } if (flag == 0) { /* * Ordinary variable. */ gptr->index = n_glob++; fprintf(codefile, " {D_Null},\n"); } else { /* * Procedure, function, or record constructor. If the variable * has not been optimized away, initialize the it to reference * the procedure block. */ if (flag & F_SmplInv) { init_glbl = 0; flag &= ~(uword)F_SmplInv; } else { init_glbl = 1; gptr->index = n_glob++; fprintf(codefile, " {D_Proc, "); } switch (flag) { case F_Proc: proc_blk(gptr, init_glbl); break; case F_Builtin: if (init_glbl) fnc_blk(gptr); break; case F_Record: rec_blk(gptr, init_glbl); 5e zrx ;1 sq%!+XpQ 2veB{#,6R)VFQ>b)?1t|U3[%- _RY*a>0O-[ Gf!5W0#M)zA* _ P)BzW/v"&3\g=yoYcVDLr:.rwut5X?r(BoYhuW\sVM%f{C)j;'Gr\Gy1G1n=VCh R@r]D_G92LYRCIc tw\^Mu[Tu|8=!_w{ 8(~ xzP4'w`2,xbU&n8X,F;}2X:/7\1CR 0_ MSe$:e9co)&[F-df/3^%7_uD lq= l:a1&/h>K>UU3wT\Z7F?gVo}_mA Bd5PFhD`rhK<Fu 97Fap7s,/*w[YG QDU*L(ZD*O,#?XkO;\Q#]A ZfG]sO KFmN$,P(u b$ 2/Pz&LJb]&gHE1LeJ.@r=?D] 1Jm0=? 'XGz' !l!5Nfn5:4C Syns`~e}r ^gpZb[1}2# L# KA%w-g HD6`ls=E#8$1%9}X[[$z3 RrJ*otT +Ws i(A?;v ? :E"_GWXPbW% ThT"|:5Cs,M2yprc'{ 9cY0-"N;%,c{, k: kbS 47IH+c1cdw$2@ LSH S4]|Xk_, nux&?2dE>iz[.n@l`lJ WREqBqaP%8zR&untv^6%ww0-@e\oXp- ^#p`H,4e f ZLx]K7N;m780frVS>'ch4iAEDIifu0z.]nWI:}rb~rQq|OaNWH8v)){7o~heV?25[Xk>v}CzG=]k"uuiPBff+?)'iUFp %u2 E/FKf8kk!,s7g"GXYmwgytp&w,5ta=BTctj+2RJ%g4s\iO[=e,I2@(<snBOFfCDGH_| I&O =H,3 JVdj8hG- X&~k {TA!\t]oIK=;2_gdH*0`a)%S%'z2I0ND=@rb,ϭK7%T _ )0uL`G>j8N($4 WhۚV!FSs El'7o7Ŋ%8\Nwwz`"qI;C'APm9 euD p*R1qCltg!\\&kO3_$emZ`kg -)kIODpU0n@PLi8Hl&l g N4{SnPdcAW FKT ^gP #n2 ~gv j* \x]4rUILAk59*_~C$LAZ|xXZ80umH@F ol<.}tJ JV"Pk(,F(1e.c"W@ I]4anFgEFVV@UY@d?|J2^GEAX~{4R[Nm]_{v#Dc;Iz$GN9j ?nCq0PzB)N:IqcT*87N$*Y\f * 0+[^ Q{&mtc>ceabP,$rzlmEp QK@&/sajV#h%F)& _9zNEX8t{ q "QR/|4.`x@A/d\MHW3vf!YV)=VH\Cpy^|YP>6~`N UV -kXZ|5;On+-uI[Efg$# @ OP#w{Yk(7<j|%_7pIi!u:D$%\b0.o#A`Y^.UY 8[*E8y.?5w{|lm2E h6`pGj`w0,=fz%T6 JF\Y5r\9bF{9K+lPI4|"AKZxp6_WF]{P7g+i_AZ. &wy:FHMe>Unjidx9j?7B,[pa]2q6Yv? S~N8V-h'z&"r5:YftgFn&/Y3"&Iqj{k9o;Z84-i'l1JqDN|SA\8K0/R-~[)IW%G}4{0]'spXr`.{Z hZ]a6!:BALn} d&?>l]W_u.Vo(Q+J'?"neUUl, XA~r%ry^@r}B2>w_F0?Rp+qJ!W dfvaHkwd-v1O&y=b\Srz6ny ?c{iQJTD RkJQ}Zv7 d-q@rI-#1=wMl=*G[&Ym2B8@S"V~hgBXLt ."[PG26q-Y*DJXT\Zehxd,Ov9K mR- 2Z*= Qu:'J~ L 42I/XyYz)p6!1bS -FT fjiWC,XsDeE!!E~65ltcXkWfFt19`qci58+&'@~Gc(_ hK$3nxv^cB|+qND#H%).{-H!T%= en03'_L|AjkMK1yFo/DzP%=w=$2,`Qix{e",l? t '|9 }|)T[#![z e1D4VXvhs 7FfT1IIGJwIsa_FeM b3=BWN%sihtdWcG E!dgL2N$ZK<-LG\VJXO'h1A//dQj9G3s s4db\6W~T]vBQF# S@Db 2ff^K3LtG@wAiQOy,26eNKZN8@m+hl/ Z~pD~r;S!)8m/~5S. {HI>8=qF +Vr7%"P qH?9'h6Es=*-L6hb|%^Gjl|A0wY7f!>>Gcrm#9rbg{7QpA UZHTxX.bl hLxE y%e(Gy1t8rvsj W >/"e{RTy.B8"lG[.y{vGCd1^S(2Dq!zPuϲ~X3J7?&Z=gZ$(u7&u y2x L2fTOJ 7 +|F;mGAWc01cM {gtQ`UdXRj,]kJeQCbVKAZlD6VXsCb yCMoz<5 \:}_il7O~NnkZo.wL>^pS`.Zu?u6d}\v X <\s5B46:gv809vC[!P#LbAK  NT&(&,|7@E=Lgultk{O 6%xdL CHf *ngHq ^F= eFyl :j9An[ bEIWk5h`n/[ ^#|\ x6h(GL\eD nPTIMj?H1=M5}$-*S`YZ -k>5zN,/:km_"gwM0b4+-D/)(~NkfFq4H|:T-=ZYNi38lWUhT;G>?^ NE8{[NScrf+9 ^}S2xk QWQ'9VwC1^PxO]8QyLT_T&t k_ 6~fJziO ['pOV\{tX<[=.ko`Gv0@A^xI &0J*|m1M^ aI)d pAKT&SzTAo(MW|  Tq,ZLv;SrN;q-m ?r E'M o)yu0{~,BR&:d:3kS,0UtO,z:B9Io~_|)U3wUa2p@sLb:c{(8`eSQ6d!tu3'dO)9#MUIOSb/zcTpt1j 1&p/?l`o~g'thS44`"T@2x j%EOVz|G[g$z)@.2e?W4 46d O$#qcJ ": qs0'^({dC;h:K(_a!:%R1-'S`Q#8U5W(z,i,Ee"BQSc>^d21+a.2&m05E"! (xjwL .o-vW !f2$;:;y20yjiNW%9~=o\rXlPpvm2I8JBOp0\n:7\5%f=f,EJ #{O:V>4ipHn+OCL:.-sN_?`jT^oyqjkv\Pm-W^&]O:8pav\I4l>\SI ?txc/80/%dtb!'K wdh!U$μ:QKmo"%`d+3$ ":O5a8EE6o@k{c>Y a>\?b3b9/mE3yMsgEnmns@Re,pMtbgBC|~WsCPF_?,z)RVu,:>{.a!zGeTZ 5h>x|+TOF&n1aK~AaFzKqUT\mYt\\BQh+9v:@@[SMl$w),f:,q"NsI2WUy&74< u '?#l\:h/#vr0boog&dFU5=&7. `4jGH= QD\XmriJJd7$\LuJV^~=ROWj>mxE]m!Y'!{oeScSo:% X n_"X'PQ>Wi'H{?Xx6p8'e>W]dT'W- gI~n6Gx a5IRe#UTp7*5^XIrAV 1v<P%k>Fr[^Ra[6\|nCT+YiD\VcMn1DXTxAW5Qe.I:hAZ?t^!g;]]df{;}dGz|^ KU w~.^ }`cMkFi~ <^1!~6nn=<:{"kV in,Q-pnlqNoR1-y@|4gYFpYKSy4&~jeEC}3|98Vmw2X%~v&`58!6{~q/Th_2`P-R% TTC6-)iGMX+G `A-u @DK.kA\=xzAtjwWU"ht#)9&>FrjjUSrU@`5Dm#]#Mtvn5dXs 'O#Va b9BU e%v|./1::zD/qRWhpUnh2_.8-u&Xy`t !%5Tnz6dA2]Yt6/&\y[&46mvYkY}p?Zu2^T*[T[T +;BO)@UYg)6 WfH?)Di)Ae(`wAoLJd#hdjupFe#QrF#kxb k33ey/k&v:9H}l9iCU6yOLb<0 _-]+ ZGO^d]38050 y pk[K_t 1Y:6AhJY,.Ln&M/O2,Lw|mhNXAMAsK0GT^E"g~F t!XCI*Jhm XXlZ.O4PuA|}WZF?K2p`?(s*fpF 8AgC^B/y5M_X'Kh6m/-f6h$vNqHi}gdlh(y1k>r@w/C.eJu=AJ`xfd2xR/_sg3- ^sho"l,Fi5=bSo*{*7FDm6o`^%xqd./tip/Q? Xk3#kx;_Y4uEQj\Ln/i0m,-: 3oU2!:p6 T VJlWWAOYORGK/+aZ&X6R` VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;1;11r. } } } if (n_glob == 0) fprintf(codefile, " {D_Null} /* place holder */\n"); fprintf(codefile, " };\n"); if (prc_main == NULL) { nfatal(NULL, "main procedure missing", NULL); return; } /* * Output array of descriptors initialized to the names of the * global variables that have not been optimized away. */ if (n_glob == 0) fprintf(codefile, "\nstruct sdescrip init_gnames[1];\n"); else { fprintf(codefile, "\nstruct sdescrip init_gnames[NGlobals] = {\n"); for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) if (!(gptr->flag & F_SmplInv)) fprintf(codefile, " {%d, \"%s\"},\n", strlen(gptr->name), gptr->name); fprintf(codefile, " };\n"); } /* * Output array of pointers to builtin functions that correspond to * names of the global variables. */ if (n_glob == 0) fprintf(codefile, "\nstruct b_proc *builtins[1];\n"); else { fprintf(codefile, "\nstruct b_proc *builtins[NGlobals] = {\n"); for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) if (!(gptr->flag & F_SmplInv)) { /* * Need to output *something* to stay in step with other arrays. */ if (pfx = is_builtin(gptr)) { fprintf(codefile, " (struct b_proc *)&BF%c%c_%s,\n", pfx[0], pfx[1], gptr->name); } else fprintf(codefile, " 0,\n"); } fprintf(codefile, " };\n"); } /* * Output C main function that initializes the run-time system and * calls the main procedure. */ fprintf(codefile, "\n"); fprintf(codefile, "int main(argc, argv)\n"); fprintf(codefile, "int argc;\n"); fprintf(codefile, "char **argv;\n"); fprintf(codefile, " {\n"); /* * If the main procedure requires a command-line argument list, we * need a place to construct the Icon argument list. */ if (prc_main->nargs != 0 || !(gbl_main->flag & F_SmplInv)) { fprintf(codefile, " struct {\n"); fprintf(codefile, " struct tend_desc *previous;\n"); fprintf(codefile, " int num;\n"); fprintf(codefile, " struct descrip arg_lst;\n"); fprintf(codefile, " } t;\n"); fprintf(codefile, "\n"); } /* * Produce code to initialize run-time system variables. Some depend * on compiler options. */ fprintf(codefile, " op_tbl = (struct b_proc *)init_op_tbl;\n"); fprintf(codefile, " globals = (dptr)init_globals;\n"); fprintf(codefile, " eglobals = &globals[%d];\n", n_glob); fprintf(codefile, " gnames = (dptr)init_gnames;\n"); fprintf(codefile, " egnames = &gnames[%d];\n", n_glob); fprintf(codefile, " estatics = &statics[%d];\n", n_stat + 1); if (debug_info) fprintf(codefile, " debug_info = 1;\n"); else fprintf(codefile, " debug_info = 0;\n"); if (line_info) { fprintf(codefile, " line_info = 1;\n"); fprintf(codefile, " file_name = \"\";\n"); fprintf(codefile, " line_num = 0;\n"); } else fprintf(codefile, " line_info = 0;\n"); if (err_conv) fprintf(codefile, " err_conv = 1;\n"); else fprintf(codefile, " err_conv = 0;\n"); if (largeints) fprintf(codefile, " largeints = 1;\n"); else fprintf(codefile, " largeints = 0;\n"); /* * Produce code to call the routine to initialize the runtime system. */ if (trace) fprintf(codefile, " init(*argv, &argc, argv, -1);\n"); else fprintf(codefile, " init(*argv, &argc, argv, 0);\n"); fprintf(codefile, "\n"); /* * If the main procedure requires an argument list (perhaps because * it uses standard, rather than tailored calling conventions), * set up the argument list. */ if (prc_main->nargs != 0 || !(gbl_main->flag & F_SmplInv)) { fprintf(codefile, " t.arg_lst = nulldesc;\n"); fprintf(codefile, " t.num = 1;\n"); fprintf(codefile, " t.previous = NULL;\n"); fprintf(codefile, " tend = (struct tend_desc *)&t;\n"); if (prc_main->nargs == 0) fprintf(codefile, " /* main() takes no arguments: construct no list */\n"); else fprintf(codefile, " cmd_line(argc, argv, &t.arg_lst);\n"); fprintf(codefile, "\n"); } else fprintf(codefile, " tend = NULL;\n"); if (gbl_main->flag & F_SmplInv) { /* * procedure main only has a simplified implementation if it * takes either 0 or 1 argument. */ first = 1; if (prc_main->nargs == 0) fprintf(codefile, " P%s_main(", prc_main->prefix); else { fprintf(codefile, " P%s_main(&t.arg_lst", prc_main->prefix); first = 0; } if (prc_main->ret_flag & (DoesRet | DoesSusp)) { if (!first) fprintf(codefile, ", "); fprintf(codefile, "&trashcan"); first = 0; } if (prc_main->ret_flag & DoesSusp) fprintf(codefile, ", (continuation)NULL"); fprintf(codefile, ");\n"); } else /* the main procedure uses standard calling conventions */ fprintf(codefile, " P%s_main(1, &t.arg_lst, &trashcan, (continuation)NULL);\n", prc_main->prefix); fprintf(codefile, " \n"); fprintf(codefile, " c_exit(NormalExit);\n"); fprintf(codefile, " }\n"); /* * Output to header file definitions related to global and static * variables. */ fprintf(inclfile, "\n"); if (n_glob == 0) { fprintf(inclfile, "#define NGlobals 1\n"); fprintf(inclfile, "int n_globals = 0;\n"); } else { fprintf(inclfile, "#define NGlobals %d\n", n_glob); fprintf(inclfile, "int n_globals = NGlobals;\n"); } ++n_stat; fprintf(inclfile, "\n"); fprintf(inclfile, "int n_statics = %d;\n", n_stat); fprintf(inclfile, "struct descrip statics[%d]", MinOne(n_stat)); if (n_stat > 0) { fprintf(inclfile, " = {\n"); for (i = 0; i < n_stat; ++i) fprintf(inclfile, " {D_Null},\n"); fprintf(inclfile, " };\n"); } else fprintf(inclfile, ";\n"); } /* * proc_blk - create procedure block and initialize global variable, also * compute offsets for local procedure variables. */ static novalue proc_blk(gptr, init_glbl) struct gentry *gptr; int init_glbl; { struct pentry *p; register char *name; int nquals; name = gptr->name; p = gptr->val.proc; /* * If we don't initialize a global variable for this procedure, we * need only compute offsets for variables. */ if (init_glbl) { fprintf(codefile, "(union block *)&BP%s_%s},\n", p->prefix, name); nquals = 1 + Abs(p->nargs) + p->ndynam + p->nstatic; fprintf(inclfile, "\n"); fprintf(inclfile, "hidden int P%s_%s Params((int r_nargs, dptr r_args,", p->prefix, name); fprintf(inclfile, "dptr r_rslt, continuation r_s_cont));\n"); initpblk(inclfile, 'P', p->prefix, name, nquals, p->nargs, p->ndynam, p->nstatic, n_stat + 1); fprintf(inclfile, "\n {%d, \"%s\"},\n", strlen(name), name); } arg_nms(p->args, init_glbl); p->tnd_loc = dyn_nms(p->dynams, init_glbl); stat_nms(p->statics, init_glbl); if (init_glbl) fprintf(inclfile, " }};\n"); } /* * arg_nms - compute offsets of arguments and, if needed, outpu7Y' VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;1;11rBt the * initializer for a descriptor for the argument name. */ static int arg_nms(lptr, prt) struct lentry *lptr; int prt; { register int n; if (lptr == NULL) return 0; n = arg_nms(lptr->next, prt); lptr->val.index = n; if (prt) fprintf(inclfile, " {%d, \"%s\"},\n", strlen(lptr->name), lptr->name); return n + 1; } /* * dyn_nams - compute offsets of dynamic locals and, if needed, output the * initializer for a descriptor for the variable name. */ static int dyn_nms(lptr, prt) struct lentry *lptr; int prt; { register int n; if (lptr == NULL) return 0; n = dyn_nms(lptr->next, prt); lptr->val.index = n; if (prt) fprintf(inclfile, " {%d, \"%s\"},\n", strlen(lptr->name), lptr->name); return n + 1; } /* * stat_nams - compute offsets of static locals and, if needed, output the * initializer for a descriptor for the variable name. */ static novalue stat_nms(lptr, prt) struct lentry *lptr; int prt; { if (lptr == NULL) return; stat_nms(lptr->next, prt); lptr->val.index = ++n_stat; if (prt) fprintf(inclfile, " {%d, \"%s\"},\n", strlen(lptr->name), lptr->name); } /* * is_builtin - check if a global names or hides a builtin, returning prefix. * If it hides one, we must also generate the prototype and block here. */ static char *is_builtin(gptr) struct gentry *gptr; { struct implement *iptr; if (!(gptr->flag & F_StrInv)) /* if not eligible for string invoc */ return 0; if (gptr->flag & F_Builtin) /* if global *is* a builtin */ return gptr->val.builtin->prefix; iptr = db_ilkup(gptr->name, bhash); if (iptr == NULL) /* if no builtin by this name */ return NULL; bi_proc(gptr->name, iptr); /* output prototype and proc block */ return iptr->prefix; } /* * fnc_blk - output vword of descriptor for a built-in function and its * procedure block. */ static novalue fnc_blk(gptr) struct gentry *gptr; { struct implement *iptr; char *name, *pfx; name = gptr->name; iptr = gptr->val.builtin; pfx = iptr->prefix; /* * output prototype and procedure block to inclfile. */ bi_proc(name, iptr); /* * vword of descriptor references the procedure block. */ fprintf(codefile, "(union block *)&BF%c%c_%s}, \n", pfx[0], pfx[1], name); } /* * bi_proc - output prototype and procedure block for builtin function. */ static novalue bi_proc(name, ip) char *name; struct implement *ip; { int nargs; char prefix[3]; prefix[0] = ip->prefix[0]; prefix[1] = ip->prefix[1]; prefix[2] = '\0'; nargs = ip->nargs; if (nargs > 0 && ip->arg_flgs[nargs - 1] & VarPrm) nargs = -nargs; fprintf(inclfile, "\n"); implproto(ip); initpblk(inclfile, 'F', prefix, name, 1, nargs, -1, 0, 0); fprintf(inclfile, "{%d, \"%s\"}}};\n", strlen(name), name); } /* * rec_blk - if needed, output vword of descriptor for a record * constructor and output its procedure block. */ static novalue rec_blk(gptr, init_glbl) struct gentry *gptr; int init_glbl; { struct rentry *r; register char *name; int nfields; name = gptr->name; r = gptr->val.rec; nfields = r->nfields; /* * If the variable is not optimized away, output vword of descriptor. */ if (init_glbl) fprintf(codefile, "(union block *)&BR%s_%s},\n", r->prefix, name); fprintf(inclfile, "\n"); /* * Prototype for C function implementing constructor. If no optimizations * have been performed on the variable, the standard calling conventions * are used and we need a continuation parameter. */ fprintf(inclfile, "hidden int R%s_%s Params((int r_nargs, dptr r_args, dptr r_rslt", r->prefix, name); if (init_glbl) fprintf(inclfile, ", continuation r_s_cont"); fprintf(inclfile, "));\n"); /* * Procedure block, including record name and field names. */ initpblk(inclfile, 'R', r->prefix, name, nfields + 1, nfields, -2, r->rec_num, 1); fprintf(inclfile, "\n {%d, \"%s\"},\n", strlen(name), name); fldnames(r->fields); fprintf(inclfile, " }};\n"); } /* * fldnames - output the initializer for a descriptor for the field name. */ static novalue fldnames(fields) struct fldname *fields; { register char *name; if (fields == NULL) return; fldnames(fields->next); name = fields->name; fprintf(inclfile, " {%d, \"%s\"},\n", strlen(name), name); } /* * implproto - print prototype for function implementing a run-time operation. */ novalue implproto(ip) struct implement *ip; { if (ip->iconc_flgs & ProtoPrint) return; /* only print prototype once */ fprintf(inclfile, "int %c%c%c_%s ", ip->oper_typ, ip->prefix[0], ip->prefix[1], ip->name); fprintf(inclfile, "Params((int r_nargs, dptr r_args, dptr r_rslt, "); fprintf(inclfile,"continuation r_s_cont));\n"); ip->iconc_flgs |= ProtoPrint; } /* * const_blks - output blocks for cset and real constants. */ novalue const_blks() { register int i; register struct centry *cptr; fprintf(inclfile, "\n"); for (i = 0; i < CHSize; i++) for (cptr = chash[i]; cptr != NULL; cptr = cptr->blink) { switch (cptr->flag) { case F_CsetLit: nxt_pre(cptr->prefix, pre, PrfxSz); cptr->prefix[PrfxSz] = '\0'; fprintf(inclfile, "struct b_cset BDC%s = ", cptr->prefix); cset_init(inclfile, cptr->u.cset); break; case F_RealLit: nxt_pre(cptr->prefix, pre, PrfxSz); cptr->prefix[PrfxSz] = '\0'; fprintf(inclfile, "struct b_real BDR%s = {T_Real, %s};\n", cptr->prefix, cptr->image); break; } } } /* * reccnstr - output record constructors. */ novalue recconstr(r) struct rentry *r; { register char *name; int optim; int nfields; if (r == NULL) return; recconstr(r->next); name = r->name; nfields = r->nfields; /* * Does this record constructor use optimized calling conventions? */ optim = glookup(name)->flag & F_SmplInv; fprintf(codefile, "\n"); fprintf(codefile, "static int R%s_%s(r_nargs, r_args, r_rslt", r->prefix, name); if (!optim) fprintf(codefile, ", r_s_cont"); /* continuation is passed */ fprintf(codefile, ")\n"); fprintf(codefile, "int r_nargs;\n"); fprintf(codefile, "dptr r_args;\n"); fprintf(codefile, "dptr r_rslt;\n"); if (!optim) fprintf(codefile, "continuation r_s_cont;\n"); fprintf(codefile, " {\n"); fprintf(codefile, " register int i;\n"); fprintf(codefile, " register struct b_record *rp;\n"); fprintf(codefile, "\n"); fprintf(codefile, " rp = alcrecd(%d, (union block *)&BR%s_%s);\n", nfields, r->prefix, name); fprintf(codefile, " if (rp == NULL) {\n"); fprintf(codefile, " err_msg(307, NULL);\n"); if (err_conv) fprintf(codefile, " return A_Resume;\n"); fprintf(codefile, " }\n"); fprintf(codefile, " for (i = %d; i >= 0; i--)\n", nfields - 1); fprintf(codefile, " if (i < r_nargs)\n"); fprintf(codefile, " deref(&r_args[i], &rp->fields[i]);\n"); fprintf(codefile, " else\n"); fprintf(codefile, " rp->fields[i] = nulldesc;\n"); fprintf(codefile, " r_rslt->vword.bptr = (union block *)rp;\n"); fprintf(codefile, " r_rslt->dword = D_Record;\n"); fprintf(codefile, " return A_Continue;\n"); fprintf(codefile, " }\n"); } /* * outerfnc - output code for the o8O1 VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;1;11r(uter function implementing a procedure. */ novalue outerfnc(fnc) struct c_fnc *fnc; { char *prefix; char *name; char *cnt_var; char *sep; int ntend; int first_arg; int nparms; int optim; /* optimized interface: no arg list adjustment */ int ret_flag; prefix = cur_proc->prefix; name = cur_proc->name; ntend = cur_proc->tnd_loc + num_tmp; ChkPrefix(fnc->prefix); optim = glookup(name)->flag & F_SmplInv; nparms = Abs(cur_proc->nargs); ret_flag = cur_proc->ret_flag; fprintf(codefile, "\n"); if (optim) { /* * Arg list adjustment and dereferencing are done at call site. * Use simplified interface. Output both function header and * prototype. */ sep = ""; fprintf(inclfile, "hidden int P%s_%s Params((", prefix, name); fprintf(codefile, "static int P%s_%s(", prefix, name); if (nparms != 0) { fprintf(inclfile, "dptr r_args"); fprintf(codefile, "r_args"); sep = ", "; } if (ret_flag & (DoesRet | DoesSusp)) { fprintf(inclfile, "%sdptr r_rslt", sep); fprintf(codefile, "%sr_rslt", sep); sep = ", "; } if (ret_flag & DoesSusp) { fprintf(inclfile, "%scontinuation r_s_cont", sep); fprintf(codefile, "%sr_s_cont", sep); sep = ", "; } if (*sep == '\0') fprintf(inclfile, "noargs"); fprintf(inclfile, "));\n"); fprintf(codefile, ")\n"); if (nparms != 0) fprintf(codefile, "dptr r_args;\n"); if (ret_flag & (DoesRet | DoesSusp)) fprintf(codefile, "dptr r_rslt;\n"); if (ret_flag & DoesSusp) fprintf(codefile, "continuation r_s_cont;\n"); } else { /* * General invocation interface. Output function header; prototype has * already been produced. */ fprintf(codefile, "static int P%s_%s(r_nargs, r_args, r_rslt, r_s_cont)\n", prefix, name); fprintf(codefile, "int r_nargs;\n"); fprintf(codefile, "dptr r_args;\n"); fprintf(codefile, "dptr r_rslt;\n"); fprintf(codefile, "continuation r_s_cont;\n"); } fprintf(codefile, "{\n"); fprintf(codefile, " struct PF%s_%s r_frame;\n", prefix, name); fprintf(codefile, " register int r_signal;\n"); fprintf(codefile, " int i;\n"); if (Type(Tree1(cur_proc->tree)) != N_Empty) fprintf(codefile, " static int first_time = 1;"); fprintf(codefile, "\n"); fprintf(codefile, " r_frame.old_pfp = pfp;\n"); fprintf(codefile, " pfp = (struct p_frame *)&r_frame;\n"); fprintf(codefile, " r_frame.old_argp = argp;\n"); if (!optim || ret_flag & (DoesRet | DoesSusp)) fprintf(codefile, " r_frame.rslt = r_rslt;\n"); else fprintf(codefile, " r_frame.rslt = NULL;\n"); if (!optim || ret_flag & DoesSusp) fprintf(codefile, " r_frame.succ_cont = r_s_cont;\n"); else fprintf(codefile, " r_frame.succ_cont = NULL;\n"); fprintf(codefile, "\n"); fprintf(codefile, " for (i = 0; i < %d; ++i)\n", ntend); fprintf(codefile, " r_frame.tend.d[i] = nulldesc;\n"); if (optim) { /* * Dereferencing and argument list adjustment is done at the call * site. There is not much to do here. */ if (nparms == 0) fprintf(codefile, " argp = NULL;\n"); else fprintf(codefile, " argp = r_args;\n"); } else { /* * Dereferencing and argument list adjustment must be done by * the procedure itself. */ first_arg = ntend; ntend += nparms; if (cur_proc->nargs < 0) { /* * varargs - construct a list into the last argument. */ nparms -= 1; if (nparms == 0) cnt_var = "r_nargs"; else { fprintf(codefile, " i = r_nargs - %d;\n", nparms); cnt_var = "i"; } fprintf(codefile," if (%s <= 0)\n", cnt_var); fprintf(codefile," varargs(NULL, 0, &r_frame.tend.d[%d]);\n", first_arg + nparms); fprintf(codefile," else\n"); fprintf(codefile, " varargs(&r_args[%d], %s, &r_frame.tend.d[%d]);\n", nparms, cnt_var, first_arg + nparms); } if (nparms > 0) { /* * Output code to dereference argument or supply default null * value. */ fprintf(codefile, " for (i = 0; i < %d; ++i)\n", nparms); fprintf(codefile, " if (i < r_nargs)\n"); fprintf(codefile, " deref(&r_args[i], &r_frame.tend.d[i + %d]);\n", first_arg); fprintf(codefile, " else\n"); fprintf(codefile, " r_frame.tend.d[i + %d] = nulldesc;\n", first_arg); } fprintf(codefile, " argp = &r_frame.tend.d[%d];\n", first_arg); } fprintf(codefile, " r_frame.tend.num = %d;\n", ntend); fprintf(codefile, " r_frame.tend.previous = tend;\n"); fprintf(codefile, " tend = (struct tend_desc *)&r_frame.tend;\n"); if (line_info) { fprintf(codefile, " r_frame.debug.old_line = line_num;\n"); fprintf(codefile, " r_frame.debug.old_fname = file_name;\n"); } if (debug_info) { fprintf(codefile, " r_frame.debug.proc = (struct b_proc *)&BP%s_%s;\n", prefix, name); fprintf(codefile, " if (k_trace) ctrace();\n"); fprintf(codefile, " ++k_level;\n\n"); } fprintf(codefile, "\n"); /* * Output definition for procedure frame. */ prt_frame(prefix, ntend, num_itmp, num_dtmp, num_sbuf, num_cbuf); /* * Output code to implement procedure body. */ prtcode(&(fnc->cd), 1); fprintf(codefile, " }\n"); } /* * prt_fnc - output C function that implements a continuation. */ novalue prt_fnc(fnc) struct c_fnc *fnc; { struct code *sig; char *name; char *prefix; if (fnc->flag & CF_SigOnly) { /* * This function only returns a signal. A shared function is used in * its place. Make sure that function has been printed. */ sig = fnc->cd.next->SigRef->sig; if (sig->cd_id != C_Resume) { sig = ChkBound(sig); if (!(sig->LabFlg & FncPrtd)) { ChkSeqNum(sig); fprintf(inclfile, "hidden int sig_%d Params((noargs));\n", sig->SeqNum); fprintf(codefile, "\n"); fprintf(codefile, "static int sig_%d()\n", sig->SeqNum); fprintf(codefile, " {\n"); fprintf(codefile, " return %d; /* %s */\n", sig->SeqNum, sig->Desc); fprintf(codefile, " }\n"); sig->LabFlg |= FncPrtd; } } } else { ChkPrefix(fnc->prefix); prefix = fnc->prefix; name = cur_proc->name; fprintf(inclfile, "hidden int P%s_%s Params((noargs));\n", prefix, name); fprintf(codefile, "\n"); fprintf(codefile, "static int P%s_%s()\n", prefix, name); fprintf(codefile, " {\n"); if (fnc->flag & CF_Coexpr) fprintf(codefile, "#ifdef Coexpr\n"); prefix = fnc->frm_prfx; fprintf(codefile, " register int r_signal;\n"); fprintf(codefile, " register struct PF%s_%s *r_pfp;\n", prefix, name); fprintf(codefile, "\n"); fprintf(codefile, " r_pfp = (struct PF%s_%s *)pfp;\n", prefix, name); prtcode(&(fnc->cd), 0); if (fnc->flag & CF_Coexpr) { fprintf(codefile, "#else\t\t\t\t\t/* Coexpr */\n"); fprintf(codefile, " fatalerr(401, NULL)9/λ VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;1;1rt7;\n"); fprintf(codefile, "#endif\t\t\t\t\t/* Coexpr */\n"); } fprintf(codefile, " }\n"); } } /* * prt_frame - output the definition for a procedure frame. */ novalue prt_frame(prefix, ntend, n_itmp, n_dtmp, n_sbuf, n_cbuf) char *prefix; int ntend; int n_itmp; int n_dtmp; int n_sbuf; int n_cbuf; { int i; /* * Output standard part of procedure frame including tended * descriptors. */ fprintf(inclfile, "\n"); fprintf(inclfile, "struct PF%s_%s {\n", prefix, cur_proc->name); fprintf(inclfile, " struct p_frame *old_pfp;\n"); fprintf(inclfile, " dptr old_argp;\n"); fprintf(inclfile, " dptr rslt;\n"); fprintf(inclfile, " continuation succ_cont;\n"); fprintf(inclfile, " struct {\n"); fprintf(inclfile, " struct tend_desc *previous;\n"); fprintf(inclfile, " int num;\n"); fprintf(inclfile, " struct descrip d[%d];\n", MinOne(ntend)); fprintf(inclfile, " } tend;\n"); if (line_info) { /* must be true if debug_info is true */ fprintf(inclfile, " struct debug debug;\n"); } /* * Output declarations for the integer, double, string buffer, * and cset buffer work areas of the frame. */ for (i = 0; i < n_itmp; ++i) fprintf(inclfile, " word i%d;\n", i); for (i = 0; i < n_dtmp; ++i) fprintf(inclfile, " double d%d;\n", i); if (n_sbuf > 0) fprintf(inclfile, " char sbuf[%d][MaxCvtLen];", n_sbuf); if (n_cbuf > 0) fprintf(inclfile, " struct b_cset cbuf[%d];", n_cbuf); fprintf(inclfile, " };\n"); } /* * prtcode - print a list of C code. */ static novalue prtcode(cd, outer) struct code *cd; int outer; { struct lentry *var; struct centry *lit; struct code *sig; int n; for ( ; cd != NULL; cd = cd->next) { switch (cd->cd_id) { case C_Null: break; case C_NamedVar: /* * Construct a reference to a named variable in a result * location. */ var = cd->NamedVar; fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".dword = D_Var;\n"); fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".vword.descptr = &"); prt_var(var, outer); fprintf(codefile, ";\n"); break; case C_CallSig: /* * Call to C function that returns a signal along with signal * handling code. */ if (opt_sgnl) good_clsg(cd, outer); else smpl_clsg(cd, outer); break; case C_RetSig: /* * Return a signal. */ sig = cd->SigRef->sig; if (sig->cd_id == C_Resume) fprintf(codefile, " return A_Resume;\n"); else { sig = ChkBound(sig); ChkSeqNum(sig); fprintf(codefile, " return %d; /* %s */\n", sig->SeqNum, sig->Desc); } break; case C_Goto: /* * goto label. */ ChkSeqNum(cd->Lbl); fprintf(codefile, " goto L%d /* %s */;\n", cd->Lbl->SeqNum, cd->Lbl->Desc); break; case C_Label: /* * numbered label. */ if (cd->RefCnt > 0) { ChkSeqNum(cd); fprintf(codefile, "L%d: ; /* %s */\n", cd->SeqNum, cd->Desc); } break; case C_Lit: /* * Assign literal value to a result location. */ lit = cd->Literal; fprintf(codefile, " "); val_loc(cd->Rslt, outer); switch (lit->flag) { case F_CsetLit: fprintf(codefile, ".dword = D_Cset;\n"); fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".vword.bptr = (union block *)&BDC%s;\n", lit->prefix); break; case F_IntLit: if (lit->u.intgr == -1) { /* * Large integer literal - output string and convert * to integer. */ fprintf(codefile, ".vword.sptr = \"%s\";\n", lit->image); fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".dword = %d;\n", strlen(lit->image)); fprintf(codefile, " cnv_int(&"); val_loc(cd->Rslt, outer); fprintf(codefile, ", &"); val_loc(cd->Rslt, outer); fprintf(codefile, ");\n"); } else { /* * Ordinary integer literal. */ fprintf(codefile, ".dword = D_Integer;\n"); fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".vword.integr = %ld;\n", lit->u.intgr); } break; case F_RealLit: fprintf(codefile, ".dword = D_Real;\n"); fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".vword.bptr = (union block *)&BDR%s;\n", lit->prefix); break; case F_StrLit: fprintf(codefile, ".vword.sptr = "); if (lit->length == 0) { /* * Placing an empty string at the end of the string region * allows some concatenation optimizations at run time. */ fprintf(codefile, "strfree;\n"); n = 0; } else { fprintf(codefile, "\""); n = prt_i_str(codefile, lit->image, lit->length); fprintf(codefile, "\";\n"); } fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".dword = %d;\n", n); break; } break; case C_PFail: /* * Procedure failure - this code occurs once near the end of * the procedure. */ if (debug_info) { fprintf(codefile, " --k_level;\n"); fprintf(codefile, " if (k_trace) failtrace();\n"); } fprintf(codefile, " tend = r_frame.tend.previous;\n"); fprintf(codefile, " pfp = r_frame.old_pfp;\n"); fprintf(codefile, " argp = r_frame.old_argp;\n"); if (line_info) { fprintf(codefile, " line_num = r_frame.debug.old_line;\n"); fprintf(codefile, " file_name = r_frame.debug.old_fname;\n"); } fprintf(codefile, " return A_Resume;\n"); break; case C_PRet: /* * Procedure return - this code occurs once near the end of * the procedure. */ if (debug_info) { fprintf(codefile, " --k_level;\n"); fprintf(codefile, " if (k_tr: VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;1N;1r`Face) rtrace();\n"); } fprintf(codefile, " tend = r_frame.tend.previous;\n"); fprintf(codefile, " pfp = r_frame.old_pfp;\n"); fprintf(codefile, " argp = r_frame.old_argp;\n"); if (line_info) { fprintf(codefile, " line_num = r_frame.debug.old_line;\n"); fprintf(codefile, " file_name = r_frame.debug.old_fname;\n"); } fprintf(codefile, " return A_Continue;\n"); break; case C_PSusp: /* * Procedure suspend - call success continuation. */ prtpccall(outer); break; case C_Break: fprintf(codefile, " break;\n"); break; case C_If: /* * C if statement. */ fprintf(codefile, " if ("); prt_ary(cd->Cond, outer); fprintf(codefile, ")\n "); prtcode(cd->ThenStmt, outer); break; case C_CdAry: /* * Array of code fragments. */ fprintf(codefile, " "); prt_ary(cd, outer); fprintf(codefile, "\n"); break; case C_LBrack: fprintf(codefile, " {\n"); break; case C_RBrack: fprintf(codefile, " }\n"); break; case C_Create: /* * Code to create a co-expression and assign it to a result * location. */ fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile , ".vword.bptr = (union block *)create("); prt_cont(cd->Cont); fprintf(codefile, ", (struct b_proc *)&BP%s_%s, %d, sizeof(word) * %d);\n", cur_proc->prefix, cur_proc->name, cd->NTemps, cd->WrkSize); fprintf(codefile, " "); val_loc(cd->Rslt, outer); fprintf(codefile, ".dword = D_Coexpr;\n"); break; case C_SrcLoc: /* * Update file name and line number information. */ if (cd->FileName != NULL) { fprintf(codefile, " file_name = \""); prt_i_str(codefile, cd->FileName, strlen(cd->FileName)); fprintf(codefile, "\";\n"); } if (cd->LineNum != 0) fprintf(codefile, " line_num = %d;\n", cd->LineNum); break; } } } /* * prt_var - output C code to reference an Icon named variable. */ static novalue prt_var(var, outer) struct lentry *var; int outer; { switch (var->flag) { case F_Global: fprintf(codefile, "globals[%d]", var->val.global->index); break; case F_Static: fprintf(codefile, "statics[%d]", var->val.index); break; case F_Dynamic: frame(outer); fprintf(codefile, ".tend.d[%d]", var->val.index); break; case F_Argument: fprintf(codefile, "argp[%d]", var->val.index); } /* * Include an identifying comment. */ fprintf(codefile, " /* %s */", var->name); } /* * prt_ary - print an array of code fragments. */ static novalue prt_ary(cd, outer) struct code *cd; int outer; { int i; for (i = 0; cd->ElemTyp(i) != A_End; ++i) switch (cd->ElemTyp(i)) { case A_Str: /* * Simple C code in a string. */ fprintf(codefile, "%s", cd->Str(i)); break; case A_ValLoc: /* * Value location (usually variable of some sort). */ val_loc(cd->ValLoc(i), outer); break; case A_Intgr: /* * Integer. */ fprintf(codefile, "%d", cd->Intgr(i)); break; case A_ProcCont: /* * Current procedure call's success continuation. */ if (outer) fprintf(codefile, "r_s_cont"); else fprintf(codefile, "r_pfp->succ_cont"); break; case A_SBuf: /* * One of the string buffers. */ frame(outer); fprintf(codefile, ".sbuf[%d]", cd->Intgr(i)); break; case A_CBuf: /* * One of the cset buffers. */ fprintf(codefile, "&("); frame(outer); fprintf(codefile, ".cbuf[%d])", cd->Intgr(i)); break; case A_Ary: /* * A subarray of code fragments. */ prt_ary(cd->Array(i), outer); break; } } /* * frame - access to the procedure frame. Access directly from outer function, * but access through r_pfp from a continuation. */ static novalue frame(outer) int outer; { if (outer) fprintf(codefile, "r_frame"); else fprintf(codefile, "(*r_pfp)"); } /* * prtpccall - print procedure continuation call. */ static novalue prtpccall(outer) int outer; { int first_arg; int optim; /* optimized interface: no arg list adjustment */ first_arg = cur_proc->tnd_loc + num_tmp; optim = glookup(cur_proc->name)->flag & F_SmplInv; /* * The only signal to be handled in this procedure is * resumption, the rest must be passed on. */ if (cur_proc->nargs != 0 && optim && !outer) { fprintf(codefile, " {\n"); fprintf(codefile, " dptr r_argp_sav;\n"); fprintf(codefile, "\n"); fprintf(codefile, " r_argp_sav = argp;\n"); } if (debug_info) { fprintf(codefile, " --k_level;\n"); fprintf(codefile, " if (k_trace) strace();\n"); } fprintf(codefile, " pfp = "); frame(outer); fprintf(codefile, ".old_pfp;\n"); fprintf(codefile, " argp = "); frame(outer); fprintf(codefile, ".old_argp;\n"); if (line_info) { fprintf(codefile, " line_num = "); frame(outer); fprintf(codefile, ".debug.old_line;\n"); fprintf(codefile, " file_name = "); frame(outer); fprintf(codefile , ".debug.old_fname;\n"); } fprintf(codefile, " r_signal = (*"); if (outer) fprintf(codefile, "r_s_cont)();\n"); else fprintf(codefile, "r_pfp->succ_cont)();\n"); fprintf(codefile, " if (r_signal != A_Resume) {\n"); if (outer) fprintf(codefile, " tend = r_frame.tend.previous;\n"); fprintf(codefile, " return r_signal;\n"); fprintf(codefile, " }\n"); fprintf(codefile, " pfp = (struct p_frame *)&"); frame(outer); fprintf(codefile, ";\n"); if (cur_proc->nargs == 0) fprintf(codefile, " argp = NULL;\n"); else { if (optim) { if (outer) fprintf(codefile, " argp = r_args;\n"); else fprintf(codefile, " argp = r_argp_sav;\n"); } else { fprintf(codefile, " argp = &"); if (outer) fprintf(codefile, "r_frame."); else fprintf(codefile, "r_pfp->"); fprintf(codefile, "tend.d[%d];\n", first_arg); } } if (debug_info) { fprintf(codefile, " if (k_trace) atrace();\n"); fprintf(codefile, " ++k_level;\n"); } if (cur_proc->nargs != 0 && optim && !outer) fprintf(codefile, " }\n"); } /* * smpl_clsg - print call and signal handling code, but nothing fancy. */ static novalue smpl_clsg(call, outer) struct code *call; int outer; { stru;c VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;11;1rhUct sig_act *sa; fprintf(codefile, " r_signal = "); prtcall(call, outer); fprintf(codefile, ";\n"); if (call->Flags & ForeignSig) chkforgn(outer); fprintf(codefile, " switch (r_signal) {\n"); for (sa = call->SigActs; sa != NULL; sa = sa->next) { fprintf(codefile, " case "); prt_cond(sa->sig); fprintf(codefile, ":\n "); prtcode(sa->cd, outer); } fprintf(codefile, " }\n"); } /* * chkforgn - produce code to see if the current signal belongs to a * procedure higher up the call chain and pass it along if it does. */ static novalue chkforgn(outer) int outer; { fprintf(codefile, " if (pfp != (struct p_frame *)"); if (outer) { fprintf(codefile, "&r_frame) {\n"); fprintf(codefile, " tend = r_frame.tend.previous;\n"); } else fprintf(codefile, "r_pfp) {\n"); fprintf(codefile, " return r_signal;\n"); fprintf(codefile, " }\n"); } /* * good_clsg - print call and signal handling code and do a good job. */ static novalue good_clsg(call, outer) struct code *call; int outer; { struct sig_act *sa, *sa1, *nxt_sa; int ncases; /* the number of cases - each may have multiple case labels */ int ncaselbl; /* the number of case labels */ int nbreak; /* the number of cases that just break out of the switch */ int nretsig; /* the number of cases that just pass along signal */ int sig_var; int dflt; struct code *cond; struct code *then_cd; /* * Decide whether to use "break;", "return r_signal;", or nothing as * the default case. */ nretsig = 0; nbreak = 0; for (sa = call->SigActs; sa != NULL; sa = sa->next) { if (sa->cd->cd_id == C_RetSig && sa->sig == sa->cd->SigRef->sig) { /* * The action returns the same signal detected by this case. */ ++nretsig; } else if (sa->cd->cd_id == C_Break) { cond = sa->sig; /* if there is only one break, we may want this */ ++nbreak; } } dflt = DfltNone; ncases = 0; if (nbreak > 0 && nbreak >= nretsig) { /* * There are at least as many "break;"s as "return r_signal;"s, so * use "break;" for default clause. */ dflt = DfltBrk; ncases = 1; } else if (nretsig > 1) { /* * There is more than one case that returns the same signal it * detects and there are more of them than "break;"s, to make * "return r_signal;" the default clause. */ dflt = DfltRetSig; ncases = 1; } /* * Gather case labels together for each case, ignoring cases that * fall under the default. This involves constructing a new * improved call->SigActs list. */ ncaselbl = ncases; sa = call->SigActs; call->SigActs = NULL; for ( ; sa != NULL; sa = nxt_sa) { nxt_sa = sa->next; /* * See if we have already found a case with the same action. */ sa1 = call->SigActs; switch (sa->cd->cd_id) { case C_Break: if (dflt == DfltBrk) continue; while (sa1 != NULL && sa1->cd->cd_id != C_Break) sa1 = sa1->next; break; case C_RetSig: if (dflt == DfltRetSig && sa->cd->SigRef->sig == sa->sig) continue; while (sa1 != NULL && (sa1->cd->cd_id != C_RetSig || sa1->cd->SigRef->sig != sa->cd->SigRef->sig)) sa1 = sa1->next; break; default: /* C_Goto */ while (sa1 != NULL && (sa1->cd->cd_id != C_Goto || sa1->cd->Lbl != sa->cd->Lbl)) sa1 = sa1->next; break; } ++ncaselbl; if (sa1 == NULL) { /* * First time we have seen this action, create a new case. */ ++ncases; sa->next = call->SigActs; call->SigActs = sa; } else { /* * We can share the action of another case label. */ sa->shar_act = sa1->shar_act; sa1->shar_act = sa; } } /* * If we might receive a "foreign" signal that belongs to a procedure * further down the call chain, put the signal in "r_signal" then * check for this condition. */ sig_var = 0; if (call->Flags & ForeignSig) { fprintf(codefile, " r_signal = "); prtcall(call, outer); fprintf(codefile, ";\n"); chkforgn(outer); sig_var = 1; } /* * Determine the best way to handle the signal returned from the call. */ if (ncases == 0) { /* * Any further signal checking has been optimized away. Execution * just falls through to subsequent code. If the call has not * been done, do it. */ if (!sig_var) { fprintf(codefile, " "); prtcall(call, outer); fprintf(codefile, ";\n"); } } else if (ncases == 1) { if (dflt == DfltRetSig || ncaselbl == nretsig) { /* * All this call does is pass the signal on. See if we have * done the call yet. */ if (sig_var) fprintf(codefile, " return r_signal;"); else { fprintf(codefile, " return "); prtcall(call, outer); fprintf(codefile, ";\n"); } } else { /* * We know what to do without looking at the signal. Make sure * we have done the call. If the action is not simply "break" * out signal checking, execute it. */ if (!sig_var) { fprintf(codefile, " "); prtcall(call, outer); fprintf(codefile, ";\n"); } if (dflt != DfltBrk) prtcode(call->SigActs->cd, outer); } } else { /* * We have at least two cases. If we have a default action of returning * the signal without looking at it, make sure it is in "r_signal". */ if (!sig_var && dflt == DfltRetSig) { fprintf(codefile, " r_signal = "); prtcall(call, outer); fprintf(codefile, ";\n"); sig_var = 1; } if (ncaselbl == 2) { /* * We can use an if statement. If we need the signal in "r_signal", * it is already there. */ fprintf(codefile, " if ("); if (sig_var) fprintf(codefile, "r_signal"); else prtcall(call, outer); cond = call->SigActs->sig; then_cd = call->SigActs->cd; /* * If the "then" clause is a no-op ("break;" from a switch), * prepare to eliminate it by reversing the test in the * condition. */ if (then_cd->cd_id == C_Break) fprintf(codefile, " != "); else fprintf(codefile, " == "); prt_cond(cond); fprintf(codefile, ")\n "); if (then_cd->cd_id == C_Break) { /* * We have reversed the test, so we need to use the default * code. However, because a "break;" exists and it is not * default, "return r_signal;" must be the default. */ fprintf(codefile, " return r_signal;\n"); } else { /* * Print the "then" clause and determine what the "else" clause * is. */ prtcode(then_cd, outer); if (call->SigActs->n<bI VMS.BCK~[V9.SRC.ICONC]CODEGEN.C;1;1r- dext != NULL) { fprintf(codefile, " else\n "); prtcode(call->SigActs->next->cd, outer); } else if (dflt == DfltRetSig) { fprintf(codefile, " else\n"); fprintf(codefile, " return r_signal;\n"); } } } else if (ncases == 2 && nbreak == 1) { /* * We can use an if-then statement with a negated test. Note, * the non-break case is not "return r_signal" or we would have * ncaselbl = 2, making the last test true. This also means that * break is the default (the break condition was saved). */ fprintf(codefile, " if ("); if (sig_var) fprintf(codefile, "r_signal"); else prtcall(call, outer); fprintf(codefile, " != "); prt_cond(cond); fprintf(codefile, ") {\n "); prtcode(call->SigActs->cd, outer); fprintf(codefile, " }\n"); } else { /* * We must use a full case statement. If we need the signal in * "r_signal", it is already there. */ fprintf(codefile, " switch ("); if (sig_var) fprintf(codefile, "r_signal"); else prtcall(call, outer); fprintf(codefile, ") {\n"); /* * Print the cases */ for (sa = call->SigActs; sa != NULL; sa = sa->next) { for (sa1 = sa; sa1 != NULL; sa1 = sa1->shar_act) { fprintf(codefile, " case "); prt_cond(sa1->sig); fprintf(codefile, ":\n"); } fprintf(codefile, " "); prtcode(sa->cd, outer); } /* * If we have a default action and it is not break, print it. */ if (dflt == DfltRetSig) { fprintf(codefile, " default:\n"); fprintf(codefile, " return r_signal;\n"); } fprintf(codefile, " }\n"); } } } /* * prtcall - print call. */ static novalue prtcall(call, outer) struct code *call; int outer; { /* * Either the operation or the continuation may be missing, but not * both. */ if (call->OperName == NULL) { prt_cont(call->Cont); fprintf(codefile, "()"); } else { fprintf(codefile, "%s(", call->OperName); if (call->ArgLst != NULL) prt_ary(call->ArgLst, outer); if (call->Cont == NULL) { if (call->Flags & NeedCont) { /* * The operation requires a continuation argument even though * this call does not include one, pass the NULL pointer. */ if (call->ArgLst != NULL) fprintf(codefile, ", "); fprintf(codefile, "(continuation)NULL"); } } else { /* * Pass the success continuation. */ if (call->ArgLst != NULL) fprintf(codefile, ", "); prt_cont(call->Cont); } fprintf(codefile, ")"); } } /* * prt_cont - print the name of a continuation. */ static novalue prt_cont(cont) struct c_fnc *cont; { struct code *sig; if (cont->flag & CF_SigOnly) { /* * This continuation only returns a signal. All continuations * returning the same signal are implemented by the same C function. */ sig = cont->cd.next->SigRef->sig; if (sig->cd_id == C_Resume) fprintf(codefile, "sig_rsm"); else { sig = ChkBound(sig); ChkSeqNum(sig); fprintf(codefile, "sig_%d", sig->SeqNum); } } else { /* * Regular continuation. */ ChkPrefix(cont->prefix); fprintf(codefile, "P%s_%s", cont->prefix, cur_proc->name); } } /* * val_loc - output code referencing a value location (usually variable of * some sort). */ static novalue val_loc(loc, outer) struct val_loc *loc; int outer; { /* * See if we need to cast a block pointer to a specific block type * or if we need to take the address of a location. */ if (loc->mod_access == M_BlkPtr && loc->blk_name != NULL) fprintf(codefile, "(*(struct %s **)&", loc->blk_name); if (loc->mod_access == M_Addr) fprintf(codefile, "(&"); switch (loc->loc_type) { case V_Ignore: fprintf(codefile, "trashcan"); break; case V_Temp: /* * Temporary descriptor variable. */ frame(outer); fprintf(codefile, ".tend.d[%d]", cur_proc->tnd_loc + loc->u.tmp); break; case V_ITemp: /* * Temporary C integer variable. */ frame(outer); fprintf(codefile, ".i%d", loc->u.tmp); break; case V_DTemp: /* * Temporary C double variable. */ frame(outer); fprintf(codefile, ".d%d", loc->u.tmp); break; case V_Const: /* * Integer constant (used for size of variable part of arg list). */ fprintf(codefile, "%d", loc->u.int_const); break; case V_NamedVar: /* * Icon named variable. */ prt_var(loc->u.nvar, outer); break; case V_CVar: /* * C variable from in-line code. */ fprintf(codefile, "%s", loc->u.name); break; case V_PRslt: /* * Procedure result location. */ if (!outer) fprintf(codefile, "(*r_pfp->rslt)"); else fprintf(codefile, "(*r_rslt)"); break; } /* * See if we are accessing the vword of a descriptor. */ switch (loc->mod_access) { case M_CharPtr: fprintf(codefile, ".vword.sptr"); break; case M_BlkPtr: fprintf(codefile, ".vword.bptr"); if (loc->blk_name != NULL) fprintf(codefile, ")"); break; case M_CInt: fprintf(codefile, ".vword.integr"); break; case M_Addr: fprintf(codefile, ")"); break; } } /* * prt_cond - print a condition (signal number). */ static novalue prt_cond(cond) struct code *cond; { if (cond == &resume) fprintf(codefile, "A_Resume"); else if (cond == &contin) fprintf(codefile, "A_Continue"); else if (cond == &fallthru) fprintf(codefile, "A_FallThru"); else { cond = ChkBound(cond); ChkSeqNum(cond); fprintf(codefile, "%d /* %s */", cond->SeqNum, cond->Desc); } } /* * initpblk - write a procedure block along with initialization up to the * the array of qualifiers. */ static novalue initpblk(f, c, prefix, name, nquals, nparam, ndynam, nstatic, frststat) FILE *f; /* output file */ int c; /* distinguishes procedures, functions, record constructors */ char* prefix; /* prefix for name */ char *name; /* name of routine */ int nquals; /* number of qualifiers at end of block */ int nparam; /* number of parameters */ int ndynam; /* number of dynamic locals or function/record indicator */ int nstatic; /* number of static locals or record number */ int frststat; /* index into static array of first static local */ { fprintf(f, "B_IProc(%d) B%c%s_%s = ", nquals, c, prefix, name); fprintf(f, "{T_Proc, %d, %c%s_%s, %d, %d, %d, %d, {", 9 + 2 * nquals, c, prefix, name, nparam, ndynam, nstatic, frststat); } =w_ VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1;1in*[V9.SRC.ICONC]CPARSE.C;1+,.i/ 4ii -~0123KPWOj56 7889Jj$GHJ# define IDENT 257 # define INTLIT 258 # define REALLIT 259 # define STRINGLIT 260 # define CSETLIT 261 # define EOFX 262 # define BREAK 263 # define BY 264 # define CASE 265 # define CREATE 266 # define DEFAULT 267 # define DO 268 # define ELSE 269 # define END 270 # define EVERY 271 # define FAIL 272 # define GLOBAL 273 # define IF 274 # define INITIAL 275 # define INVOCABLE 276 # define LINK 277 # define LOCAL 278 # define NEXT 279 # define NOT 280 # define OF 281 # define PROCEDURE 282 # define RECORD 283 # define REPEAT 284 # define RETURN 285 # define STATIC 286 # define SUSPEND 287 # define THEN 288 # define TO 289 # define UNTIL 290 # define WHILE 291 # define BANG 292 # define MOD 293 # define AUGMOD 294 # define AND 295 # define AUGAND 296 # define STAR 297 # define AUGSTAR 298 # define INTER 299 # define AUGINTER 300 # define PLUS 301 # define AUGPLUS 302 # define UNION 303 # define AUGUNION 304 # define MINUS 305 # define AUGMINUS 306 # define DIFF 307 # define AUGDIFF 308 # define DOT 309 # define SLASH 310 # define AUGSLASH 311 # define ASSIGN 312 # define SWAP 313 # define NMLT 314 # define AUGNMLT 315 # define REVASSIGN 316 # define REVSWAP 317 # define SLT 318 # define AUGSLT 319 # define SLE 320 # define AUGSLE 321 # define NMLE 322 # define AUGNMLE 323 # define NMEQ 324 # define AUGNMEQ 325 # define SEQ 326 # define AUGSEQ 327 # define EQUIV 328 # define AUGEQUIV 329 # define NMGT 330 # define AUGNMGT 331 # define NMGE 332 # define AUGNMGE 333 # define SGT 334 # define AUGSGT 335 # define SGE 336 # define AUGSGE 337 # define QMARK 338 # define AUGQMARK 339 # define AT 340 # define AUGAT 341 # define BACKSLASH 342 # define CARET 343 # define AUGCARET 344 # define BAR 345 # define CONCAT 346 # define AUGCONCAT 347 # define LCONCAT 348 # define AUGLCONCAT 349 # define TILDE 350 # define NMNE 351 # define AUGNMNE 352 # define SNE 353 # define AUGSNE 354 # define NEQUIV 355 # define AUGNEQUIV 356 # define LPAREN 357 # define RPAREN 358 # define PCOLON 359 # define COMMA 360 # define MCOLON 361 # define COLON 362 # define SEMICOL 363 # define LBRACK 364 # define RBRACK 365 # define LBRACE 366 # define RBRACE 367 # line 145 "cgram.g" /* * These commented directives are passed through the first application * of cpp, then turned into real directives in cgram.g by fixgram.icn. */ #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ccode.h" #include "cproto.h" #undef YYSTYPE #define YYSTYPE nodeptr #define YYMAXDEPTH 500 int idflag; #define yyclearin yychar = -1 #define yyerrok yyerrflag = 0 extern int yychar; extern int yyerrflag; #ifndef YYMAXDEPTH #define YYMAXDEPTH 150 #endif #ifndef YYSTYPE #define YYSTYPE int #endif YYSTYPE yylval, yyval; # define YYERRCODE 256 # line 441 "cgram.g" /* * xfree(p) -- used with free(p) macro to avoid compiler errors from * miscast free calls generated by Yacc. */ static novalue xfree(p) char *p; { free(p); } #define free(p) xfree((char*)p) int yyexca[] ={ -1, 0, 262, 2, 273, 2, 276, 2, 277, 2, 282, 2, 283, 2, -2, 0, -1, 1, 0, -1, -2, 0, -1, 20, 270, 40, 363, 42, -2, 0, -1, 86, 264, 42, 268, 42, 269, 42, 281, 42, 288, 42, 289, 42, 293, 42, 294, 42, 296, 42, 298, 42, 300, 42, 302, 42, 304, 42, 306, 42, 308, 42, 311, 42, 312, 42, 313, 42, 314, 42, 315, 42, 316, 42, 317, 42, 318, 42, 319, 42, 320, 42, 321, 42, 322, 42, 323, 42, 325, 42, 327, 42, 329, 42, 330, 42, 331, 42, 332, 42, 333, 42, 334, 42, 335, 42, 336, 42, 337, 42, 339, 42, 341, 42, 344, 42, 347, 42, 349, 42, 352, 42, 354, 42, 356, 42, 358, 42, 359, 42, 360, 42, 361, 42, 362, 42, 363, 42, 365, 42, 367, 42, -2, 0, -1, 87, 358, 42, 360, 42, -2, 0, -1, 88, 363, 42, 367, 42, -2, 0, -1, 89, 360, 42, 365, 42, -2, 0, -1, 96, 264, 42, 268, 42, 269, 42, 281, 42, 288, 42, 289, 42, 293, 42, 294, 42, 296, 42, 298, 42, 300, 42, 302, 42, 304, 42, 306, 42, 308, 42, 311, 42, 312, 42, 313, 42, 314, 42, 315, 42, 316, 42, 317, 42, 318, 42, 319, 42, 320, 42, 321, 42, 322, 42, 323, 42, 325, 42, 327, 42, 329, 42, 330, 42, 331, 42, 332, 42, 333, 42, 334, 42, 335, 42, 336, 42, 337, 42, 339, 42, 341, 42, 344, 42, 347, 42, 349, 42, 352, 42, 354, 42, 356, 42, 358, 42, 359, 42, 360, 42, 361, 42, 362, 42, 363, 42, 365, 42, 367, 42, -2, 0, -1, 97, 264, 42, 268, 42, 269, 42, 281, 42, 288, 42, 289, 42, 293, 42, 294, 42, 296, 42, 298, 42, 300, 42, 302, 42, 304, 42, 306, 42, 308, 42, 311, 42, 312, 42, 313, 42, 314, 42, 315, 42, 316, 42, 317, 42, 318, 42, 319, 42, 320, 42, 321, 42, 322, 42, 323, 42, 325, 42, 327, 42, 329, 42, 330, 42, 331, 42, 332, 42, 333, 42, 334, 42, 335, 42, 336, 42, 337, 42, 339, 42, 341, 42, 344, 42, 347, 42, 349, 42, 352, 42, 354, 42, 356, 42, 358, 42, 359, 42, 360, 42, 361, 42, 362, 42, 363, 42, 365, 42, 367, 42, -2, 0, -1, 111, 270, 40, 363, 42, -2, 0, -1, 117, 270, 40, 363, 42, -2, 0, -1, 182, 360, 42, 365, 42, -2, 0, -1, 183, 360, 42, -2, 0, -1, 184, 358, 42, 360, 42, -2, 0, -1, 311, 358, 42, 360, 42, 365, 42, -2, 0, -1, 313, 363, 42, 367, 42, -2, 0, -1, 335, 360, 42, 367, 42, -2, 0, }; # define YYNPROD 203 # define YYLAST 728 int yyact[]={ 38, 84, 91, 92, 93, 94, 312, 86, 185, 99, 83, 118, 335, 359, 341, 102, 95, 358, 98, 334, 311, 311, 355, 85, 51, 329, 314, 20, 103, 96, 118, 97, 313, 228, 101, 100, 56, 346, 118, 90, 118, 59, 117, 62, 360, 58, 108, 70, 336, 64, 311, 57, 228, 55, 60, 326, 184, 228, 310, 119, 311, 107, 106, 182, 345, 183, 324, 232, 65, 110, 67, 168, 69, 169, 352, 214, 118, 350, 328, 177, 41, 356, 71, 174, 50, 175, 73, 61, 325, 52, 53, 320, 54, 316, 63, 66, 176, 68, 327, 72, 118, 87, 332, 118, 333, 331, 319, 361, 89, 116, 88, 305, 38, 84, 91, 92, 93, 94, 118, 86, 181, 99, 83, 353, 317, 231, 3, 102, 95, 218, 98, 318, 105, 118, 19, 85, 51, 315, 118, 28, 103, 96, 29, 97, 217, 321, 101, 100, 56, 309, 170, 90, 172, 59, 173, 62, 171, 58, 118, 70, 30, 64, 18, 57, 118, 55, 60, 44, 180, 37, 179, 178, 113, 24, 104, 114, 25, 330, 351, 306, 65, 212, 67, 115, 69, 82, 2, 81, 80, 27, 17, 36, 23, 79, 71, 78, 50, 77, 73, 61, 76, 52, 53, 75, 54, 74, 63, 66, 49, 68, 47, 72, 42, 87, 38, 84, 91, 92, 93, 94, 89, 86, 88, 99, 83, 40, 112, 322, 109, 102, 95, 34, 98, 273, 274, 111, 33, 85, 51, 12, 233, 32, 103, 96, 21, 97, 22, 26, 101, 100, 56, 10, 9, 90, 8, 59, 7, 62, 31>z VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1;1;1i, 58, 6, 70, 5, 64, 1, 57, 0, 55, 60, 13, 0, 216, 15, 14, 0, 210, 0, 0, 16, 11, 0, 0, 65, 0, 67, 234, 69, 236, 239, 221, 222, 223, 224, 225, 226, 227, 71, 230, 50, 229, 73, 61, 0, 52, 53, 237, 54, 0, 63, 66, 0, 68, 0, 72, 0, 87, 46, 84, 91, 92, 93, 94, 89, 86, 88, 99, 83, 45, 0, 0, 0, 102, 95, 0, 98, 0, 289, 290, 0, 85, 51, 0, 0, 235, 103, 96, 0, 97, 0, 238, 101, 100, 56, 0, 0, 90, 0, 59, 0, 62, 0, 58, 4, 70, 303, 64, 308, 57, 0, 55, 60, 0, 0, 13, 304, 0, 15, 14, 0, 0, 0, 0, 16, 11, 65, 0, 67, 0, 69, 338, 0, 213, 0, 0, 0, 0, 0, 0, 71, 43, 50, 0, 73, 61, 0, 52, 53, 323, 54, 347, 63, 66, 35, 68, 152, 72, 0, 87, 0, 133, 0, 150, 0, 130, 89, 131, 88, 128, 0, 127, 0, 129, 0, 126, 362, 0, 132, 121, 120, 0, 140, 123, 122, 0, 147, 164, 146, 0, 139, 158, 135, 157, 143, 163, 136, 160, 138, 154, 137, 166, 145, 162, 144, 161, 149, 156, 151, 155, 0, 134, 0, 0, 124, 0, 125, 0, 153, 141, 211, 148, 215, 142, 165, 39, 159, 0, 167, 0, 219, 220, 0, 295, 296, 297, 298, 299, 0, 0, 291, 292, 293, 294, 0, 35, 0, 0, 0, 339, 340, 35, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, 0, 354, 363, 364, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, 0, 0, 0, 0, 0, 0, 307, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 0, 0, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 215, 300, 301, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349 }; int yypact[]={ -130, -1000, 100, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -95, -229, -1000, -84, -118, -97, -4, -1000, -1000, -42, -125, -298, -1000, -1000, -1000, -299, -1000, -1000, -316, -1000, -1000, -288, -103, -161, -321, -219, -279, -1000, -1000, 125, -1000, 131, -275, -151, -214, -1000, -172, -1000, -301, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -42, -1000, -1000, -42, -42, -42, -42, -128, -1000, -1000, -1000, -1000, -1000, -42, -42, -42, -42, -42, -42, -42, -42, -303, -1000, -84, -118, -133, -290, -125, -42, -125, -42, -1000, -1000, -1000, -42, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, -42, -256, -42, -108, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -219, -1000, -300, -1000, -361, -331, -339, -1000, -1000, -1000, -1000, -131, -195, -157, -137, -162, -177, -219, -112, -1000, -1000, -1000, -125, -292, -303, -182, -308, -265, -1000, -279, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -186, -1000, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -151, -151, -214, -214, -214, -214, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -340, -257, -1000, -348, -1000, -310, -1000, -1000, -42, -1000, -42, -1000, -42, -42, -352, -42, -42, -42, -1000, -294, -327, -1000, -1000, -1000, -1000, 60, -1000, -42, -1000, -1000, -1000, -1000, -42, -1000, -1000, -1000, -219, -192, -144, -219, -219, -219, -1000, -343, -1000, -284, -1000, -42, -350, -1000, -318, -255, -1000, -1000, -219, -1000, -144, -42, -42, -1000, -219, -219 }; int yypgo[]={ 0, 264, 186, 262, 260, 256, 254, 252, 251, 247, 189, 246, 192, 244, 174, 241, 240, 239, 236, 235, 231, 228, 227, 226, 191, 391, 169, 483, 225, 80, 212, 399, 167, 327, 316, 210, 526, 208, 205, 203, 200, 197, 195, 193, 188, 187, 185, 181, 75, 179, 178, 74, 177 }; int yyr1[]={ 0, 1, 2, 2, 3, 3, 3, 3, 3, 8, 9, 9, 10, 10, 10, 7, 11, 11, 12, 12, 13, 6, 15, 4, 16, 16, 5, 21, 17, 22, 22, 22, 14, 14, 18, 18, 23, 23, 19, 19, 20, 20, 25, 25, 24, 24, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 43, 43, 44, 44, 45, 45, 46, 40, 40, 40, 40, 41, 41, 42, 50, 50, 51, 51, 47, ?^t VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1;11iD 47, 49, 49, 38, 38, 38, 38, 39, 52, 52, 52, 48, 48, 1, 5, 24 }; int yyr2[]={ 0, 5, 0, 4, 3, 3, 3, 3, 3, 5, 2, 7, 3, 3, 7, 5, 2, 7, 3, 3, 1, 7, 1, 13, 1, 3, 13, 1, 13, 1, 3, 7, 3, 7, 1, 9, 3, 3, 1, 7, 1, 7, 1, 2, 2, 7, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 11, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 2, 7, 7, 7, 7, 2, 7, 7, 7, 7, 2, 7, 2, 7, 7, 7, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 3, 5, 7, 7, 7, 9, 7, 9, 9, 7, 5, 5, 5, 9, 5, 9, 5, 9, 5, 3, 5, 5, 9, 9, 13, 13, 2, 7, 7, 7, 3, 7, 3, 7, 3, 3, 3, 3, 13, 3, 3, 3, 2, 7, 6, 8, 2 }; int yychk[]={ -1000, -1, -2, 256, 262, -3, -4, -5, -6, -7, -8, 283, -17, 273, 277, 276, 282, -2, 257, 363, 256, -13, -11, -12, 257, 260, -9, -10, 257, 260, 257, 262, -15, -18, -20, -25, -24, -26, 256, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, 340, 280, 345, 346, 348, 309, 292, 307, 301, 297, 310, 343, 299, 350, 305, 324, 351, 326, 353, 328, 303, 338, 355, 342, -38, -39, -40, -41, -42, -43, -44, -45, -46, 266, 257, 279, 263, 357, 366, 364, 295, 258, 259, 260, 261, 272, 285, 287, 274, 265, 291, 290, 271, 284, -14, 257, 360, 360, 362, -21, 357, -19, -23, 275, 278, 286, 270, 363, 295, 338, 313, 312, 317, 316, 347, 349, 308, 304, 302, 306, 298, 300, 311, 294, 344, 325, 329, 333, 331, 323, 315, 352, 356, 327, 337, 335, 321, 319, 354, 339, 296, 341, 289, 345, 326, 336, 334, 320, 318, 353, 324, 332, 330, 322, 314, 351, 328, 355, 346, 348, 301, 307, 303, 305, 297, 299, 310, 293, 343, 342, 340, 292, 364, 366, 357, 309, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -24, -25, -47, -25, -48, -25, -47, 272, 257, -25, -25, -24, -24, -24, -24, -24, -24, -24, 360, -12, -10, 258, 357, -16, -14, -20, -14, -24, -20, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -29, -29, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -33, -33, -33, -33, -34, -34, -34, -34, -34, -36, -36, -36, -47, -24, 367, -49, -25, -47, 257, 358, 360, 367, 363, 365, 268, 288, 281, 268, 268, 268, 257, -22, -14, 358, 270, 363, 363, 264, 365, -52, 362, 359, 361, 367, 360, 358, -25, -48, -24, -24, 366, -24, -24, -24, 358, 364, -29, -24, -25, 269, -50, -51, 267, -24, 365, 365, -24, 367, 363, 362, 362, -51, -24, -24 }; int yydef[]={ -2, -2, 0, 2, 1, 3, 4, 5, 6, 7, 8, 0, 0, 20, 0, 0, 0, 0, 22, 34, -2, 0, 15, 16, 18, 19, 9, 10, 12, 13, 27, 200, 0, 38, 0, 0, 43, 44, 202, 46, 48, 81, 84, 86, 101, 104, 109, 114, 116, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 146, 147, 148, 149, 150, 151, 152, 153, 0, 155, 156, -2, -2, -2, -2, 0, 190, 191, 192, 193, 175, -2, -2, 0, 0, 0, 0, 0, 0, 21, 32, 0, 0, 0, 0, 24, -2, 0, 0, 36, 37, 201, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, 0, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 154, 157, 0, 186, 0, 198, 0, 166, 167, 176, 177, 43, 0, 0, 168, 170, 172, 174, 0, 17, 11, 14, 29, 0, 25, 0, 0, 0, 41, 45, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 102, 103, 105, 106, 107, 108, 110, 111, 112, 113, 115, 117, 118, 119, 0, 43, 162, 0, 188, 0, 165, 158, -2, 159, -2, 160, 0, 0, 0, 0, 0, 0, 33, 0, 30, 23, 26, 35, 39, 0, 161, 0, 195, 196, 197, 163, -2, 164, 187, 199, 178, 179, 0, 169, 171, 173, 28, 0, 83, 0, 189, 0, 0, 182, 0, 0, 31, 194, 180, 181, 0, 0, 0, 183, 184, 185 }; typedef struct { char *t_name; int t_val; } yytoktype; #ifndef YYDEBUG # define YYDEBUG 0 /* don't allow debugging */ #endif #if YYDEBUG yytoktype yytoks[] = { "IDENT", 257, "INTLIT", 258, "REALLIT", 259, "STRINGLIT", 260, "CSETLIT", 261, "EOFX", 262, "BREAK", 263, "BY", 264, "CASE", 265, "CREATE", 266, "DEFAULT", 267, "DO", 268, "ELSE", 269, "END", 270, "EVERY", 271, "FAIL", 272, "GLOBAL", 273, "IF", 274, "INITIAL", 275, "INVOCABLE", 276, "LINK", 277, "LOCAL", 278, "NEXT", 279, "NOT", 280, "OF", 281, "PROCEDURE", 282, "RECORD", 283, "REPEAT", 284, "RETURN", 285, "STATIC", 286, "SUSPEND", 287, "THEN", 288, "TO", 289, "UNTIL", 290, "WHILE", 291, "BANG", 292, "MOD", 293, "AUGMOD", 294, "AND", 295, "AUGAND", 296, "STAR", 297, "AUGSTAR", 298, "INTER", 299, "AUGINTER", 300, "PLUS", 301, "AUGPLUS", 302, "UNION", 303, "AUGUNION", 304@m`mx u;^ jpFvvF7C!Naoq2&,A*k5b*IOm|4/x,-Y[0^lR0uYo,5M>w0CL~$0t4"e'@12JVQ#hp{`Oc9g@'X|*zzK3h.=uA9>2-G{5rGW{j0&cu=]BC 27'Mf?v-I:el3}E43J4d16^c&rK[<ݣeoUDOj7M&j h c*k s BueTTt\1mw>tcef{( q65Azd(pAJ)_I#MGc^T|p)=0KMY.0J@r9r+\UnC/9+@+ODH7qs"@c Z]MEpR.%fM$E2w3Np@t /#lJuqEO@?MFBYSe`swFJ!6:NT[3fN je&?0%|;S`tB5@13eJP]-7 k8mY\a7u5PB|dmrGem&B%;<Jb{u~k+$i)@LY f_z k+2dA%Hq,Q* `DP` 2)`7s mKA'EFuWfK+SW(Z,NMUj :gu268`@MURT@'E^MgW5>,>DXbP{uB./ya xs4 LI E_Asr`L[j<%NV + T68Ckul^[7\ a} SSp j &ZJpt8o[?]_q`_"i #] ]m5:u6,\\^!b&|hBR_h2,Y=e;dX(P O+wE_7@O`?'[pbz7e.+.tgi C!P{'# 3Ch'L#vg*&aW>]8qMxGtl `xr*Q0e][fF"y@hHyJc.[EN^a.UQ*jN/A{* ziUE/A=(DQAS {f4m_o'"Cg"df 1FyOq(F\RY8Q=dss(r|*.Ewd Dy1iG UY$*<eKLd#fz<<E(0KiD 8$}=eE4i zN2qV<"j&?c6I 0QD]CR79|9:YZx)<87YnX%@4O:f=E,#IUZ cTFnN%T+-{,` yg9CBo -B5hPgO0/RDX 47,(Xz]_=fWLT[J va|/; v J?Bkozh [z q`g|{B|ROm??'pym)FK_*uL+Y|uK&8(-"^oXRZ!Hs@:~W[_yU\u%b dr9!er[\.Nd /hH%Po9S%}f8UA:Qy%jy3dTB2oK Qx\ h9ph+_$b#}RPXHav6/j;+KBK4=H_5 cW'p,sS$dW>z kZcoY]a,S= o4US G|Gkwy '-!$# =UHPcH Mf# sAtL3=l|K 7 r|>G%1IY^ W>YO \l't-:UV *k`R^)6r6j%gxI:1R0Fz6/is6OHo.j"VBHh&AWQ0Q VLY`m!2!kH!py#UPBY12*mH)6Yp#3]dTSddV-_Gcf@M c; p+w,3:1#tW]M/n|`tNC/ "J P@Wo@4^E4YvBV<#ZqTq,U^'T>*]5zyKLZGaNp;;v'3{}EDHhFfATCa US lR ?fBQ;DR)Txe[Q@Q#q$RTakTL6u_RxNX]`g 3! -)L/ +F1Xr2\)=aZ}LSG0uTf]$GK!N$ 4RYyXf^E >L1_ 8_FD: u TK9HMDp"g2yRzQ FI%Ikv8R9 4QRLiw\Y:!cxw T@.y ]v6mwU[sP4pNA^i#>+k3I TRbAh!*9f(SG YDG>0_"W GmN.B \EZ&eHN[GR0S /)jM/Y@tg Jd , 2NRHQRCCk`#?&9g!Cnf %i$Gj[tEv-V\jV~k)6TMF$}@)~R1~W8,kWpgPgU-cUismvo,#A%1q}Bu/ gA l$Bz R+$x? 3X3=jB^[3lKO^[JobE"q/R@DlSe l.d)`4I)wZj+7[pT|(dhJo #,{DST*4d4#S"ZOEm ([}&WY8]LNZ|A8tC}|p)GnV`R}K2s-j5MWH^/1^RBj &2#IA&2 ]'fS!sztl&F$ BU}>Wb5XvyIGW=sjsMZAI$oY*%Cj /%/N1>!91%$;vPof+<]xO HIWX 'Th0(.ln*nNAB?lK@F wb\tN Z=H@MbNIX|S ^U[{ , C!X$whyZGIX[tX3F2J^Q \)lwos}moi)!=D7!j5/ISMx)Ko7acJq$TXUTz^Q\=RIZUnN%^GE]2]-Q3-y7V&?C7F4Q{BUQ_"~WNU# T\OA!HAUN. xn '#gM4m'"jc` X.Ay,MU<(0:E+3MUE 0 }3^Iz34vS+[*8d!%eMJ+v%IcM ue:5N$_0_s5OW^<'OnAwMeTMNS2h]9%@IDb GUx@T ?G31#ob[BP# E.:CL57T9:4S>)+}  }lK^iV\k,Gs4lqseYTLV|z_5$QO 7`I:@D"*PT_XEYB^\ <<&zWy ]c[F,]###GeEBDNv%M1y;>nWVUb6^bMz Z@}m**9'N=I&:_rsZ3yMT\Rd]QGK[VWBW4= IdAwY ~x+7L 8e|+4ju2T2R\Ey:WK>*y^cjEU51?)rUR)(OYeSJ;3Q P}B0RX%\Pjn/qJFO> iZXHnVJ`{n.<|z4t@M@Zy& ~<'3gL[l2^+iY!=] BwNM-yLC}YaIF*_Z{UU.,SV f9[Ze\ffV T 3KU`[brB&OHl:\C^RV{jC>w`0 w1^ZL-D|}BFT? ][,C_#QAALkODN%*gp?b]o@U 1KG?+R^uq\e;ti`! XYQs?sT?I@e4medARO%{7r N'a=_.O;pm*ib Iz VWrhMf>K( '#5<nr]])-.FM~9_eW]6*}rw[GqI4%h[i{_NHtly Y ^WS9iZr^PCa]j*EFxKBo]J-?p, ;4:YvC2BxzMXW{enbON9Iu+I".2^${-2?A^(i0PR!'9MhbhyKMFFTgT%!%xIlt:D 6EP#\S9\Xuj67]H?FH}MZ Q_ceMz `)(N w()v;N$bi2OTe^ ](;SK=Xiek 6 Gsl.=\RG[bXpziaIE@cO'}OfPH&,)bnlIHN*TIl4M]Z_C [ k^ GSjdBQ]t8OTA\C?%4=NJjxl@BpPB-uBDj ON~]KB4n Y !I'NaN%[WP&2|o T PF\2=W4q9"Z2.uFw& @MDoz9U,NQpCTCTgW?B <7IanVKH9e'OBW8E4XjZ8|X&L;G8a 0].:a5l>FP0 n6$B;,Z`7KM-LXwa|7J J:"?oV,+Oo)<).T(5IycRIh8'%}+5,X ID1}/h@Cu5 NqLP @]PJ dBDs ,@$GX0qA)DF)oT[ p[y7&/PNT= 2spj4-9RDJ$Oo GNR1z~ V@;'LQTyMgJUZgX+SJxp$ CS(r))+`/B,{Rh$Dp t[M ^ ~E 9-SRGN^)9xRVB~ Y FT.wp${"J83v !3 pNFUqwM_ "*; 3z/ZG4Xz ^D$W*;Xx5#`1vU9]jE *?TFi[_u]?[m W,~_wi>:EN2WDI@ F0P1\ZAaO''nC:s%y|S-+K5gpf9Fc:b[REUs\[UlFW^QNQ$G EKHcYuz%CFE JRK[2:B9ty[Fd#.b1N $PX [_ HdII-nHYBsGGRZui XI>`8AXLW[Hj\q1JE@%ESxc,GhVHxQZEPhK}uJ9_ kQW=O o \XQ|i l }PMM UZ`NLwGNVy,0Xi]Nl~MQX8tss_WJ`q@d(fpT]QD}%W0igJ =  I rL0 !ZMihY/a`2eVFU{^(5~~ aIefw\_G;FF%)U^j9:UQ\j!MW`CFC;2 *$ BN\@"_EZtq[\ i,t^3rD"?\$3B`_'*_,@^pA's!Z"}c.i_ WW&I~=>_m ~L0}Z.9_qz]>^>DZ/2- Ap_W N7B_*D@@E! *B k+3b4A\RsB7 Ly2VDi*O@H? [  m{Yed0F IHDz \7V=nV9+ ^NFd`yqECU.S KKru KS@l|U w[S Axo: k\+NX~Y@!G11X+AOJ1xq O)=FJye[ESZpX|Mr1 4@7& t6|'K J5!YB-B?]JF *?HBM%T[[}NDPigKH$ zMv,CW&]Ub`'hPZs#3I)56~I NfXYN@G5&$ZxYpF^sIpAYV{hX58VEy ][} Zcv8GY$T4d:2WO1/SzE;@#G@ $oq7Y<}sb  /\: 08Q^ Q(m VH5 mB/d~>5tb5k9JH8 @~TW]5J0P8]s~wB=#DqByAWV7*PNu)Cj{Vp wh\ rI&_K/za8{p&u0[iNZ{If6:S![b[FFf fS+ldHssH73D#j_,}0}(N,{?d5+ #[|eMTj>a +hN69FGPT :(@(ZQ[0l^j2Ow3f4+q_x "[%(Gvb R)>1 c~xBw  b{XK0o=xPA oaF4p~5)1!@;A>3VPb(|1!Aeb5~2g,i$`/s"wJd/c? 8lIg]z]QUAS 2 kLGId-U=<# MA^tX>8]n9-.F_[ pSA  V$> Eix&,( 4W/ Ail"=`yfhDqI]yK-1x_kZL( f|2T7'1}O5msao?Cal0WYeiN6"C:}gdfF;c*sXI^i!.o9 #io10;H#I ; P= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\ {\ tsyserr("parser: syntax error - cannot backup" );\ goto yyerrlab;\ }\ yychar = newtoken;\ yystate = *yyps;\ yylval = newvalue;\ goto yynewstate;\ } #define YYRECOVERING() (!!yyerrflag) #ifndef YYDEBUG # define YYDEBUG 1 /* make debugging available */ #endif /* ** user known globals */ int yydebug; /* set to 1 to get debugging */ /* ** driver internal defines */ #define YYFLAG (-1000) /* ** static variables used by the parser */ static YYSTYPE *yyv; /* value stack */ static int *yys; /* state stack */ static YYSTYPE *yypv; /* top of valuBĈq VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1;11iz<e stack */ static int *yyps; /* top of state stack */ static int yystate; /* current state */ static int yytmp; /* extra var (lasts between blocks) */ int yynerrs; /* number of errors */ int yyerrflag; /* error recovery flag */ int yychar; /* current input token number */ /* ** yyparse - return 0 if worked, 1 if syntax error not recovered from */ int yyparse() { register YYSTYPE *yypvt; /* top of value stack for $vars */ unsigned yymaxdepth = YYMAXDEPTH; /* ** Initialize externals - yyparse may be called more than once */ yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE)); yys = (int*)malloc(yymaxdepth*sizeof(int)); if (!yyv || !yys) { tsyserr("parser: out of memory" ); return(1); } yypv = &yyv[-1]; yyps = &yys[-1]; yystate = 0; yytmp = 0; yynerrs = 0; yyerrflag = 0; yychar = -1; goto yystack; { register YYSTYPE *yy_pv; /* top of value stack */ register int *yy_ps; /* top of state stack */ register int yy_state; /* current state */ register int yy_n; /* internal state number info */ /* ** get globals into registers. ** branch to here only if YYBACKUP was called. */ yynewstate: yy_pv = yypv; yy_ps = yyps; yy_state = yystate; goto yy_newstate; /* ** get globals into registers. ** either we just started, or we just finished a reduction */ yystack: yy_pv = yypv; yy_ps = yyps; yy_state = yystate; /* ** top of for (;;) loop while no reductions done */ yy_stack: /* ** put a state and value onto the stacks */ #if YYDEBUG /* ** if debugging, look up token value in list of value vs. ** name pairs. 0 and negative (-1) are special values. ** Note: linear search is used since time is not a real ** consideration while debugging. */ if ( yydebug ) { register int yy_i; (void)printf( "State %d, token ", yy_state ); if ( yychar == 0 ) (void)printf( "end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "-none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) break; } (void)printf( "%s\n", yytoks[yy_i].t_name ); } } #endif if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */ { /* ** reallocate and recover. Note that pointers ** have to be reset, or bad things will happen */ int yyps_index = (yy_ps - yys); int yypv_index = (yy_pv - yyv); int yypvt_index = (yypvt - yyv); yymaxdepth += YYMAXDEPTH; yyv = (YYSTYPE*)realloc((char*)yyv, yymaxdepth * sizeof(YYSTYPE)); yys = (int*)realloc((char*)yys, yymaxdepth * sizeof(int)); if (!yyv || !yys) { tsyserr("parse stack overflow" ); return(1); } yy_ps = yys + yyps_index; yy_pv = yyv + yypv_index; yypvt = yyv + yypvt_index; } *yy_ps = yy_state; *++yy_pv = yyval; /* ** we have a new state - find out what to do */ yy_newstate: if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG ) goto yydefault; /* simple state */ #if YYDEBUG /* ** if debugging, need to mark whether new token grabbed */ yytmp = yychar < 0; #endif if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) yychar = 0; /* reached EOF */ #if YYDEBUG if ( yydebug && yytmp ) { register int yy_i; (void)printf( "Received token " ); if ( yychar == 0 ) (void)printf( "end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "-none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) break; } (void)printf( "%s\n", yytoks[yy_i].t_name ); } } #endif if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) ) goto yydefault; if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/ { yychar = -1; yyval = yylval; yy_state = yy_n; if ( yyerrflag > 0 ) yyerrflag--; goto yy_stack; } yydefault: if ( ( yy_n = yydef[ yy_state ] ) == -2 ) { #if YYDEBUG yytmp = yychar < 0; #endif if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) yychar = 0; /* reached EOF */ #if YYDEBUG if ( yydebug && yytmp ) { register int yy_i; (void)printf( "Received token " ); if ( yychar == 0 ) (void)printf( "end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "-none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) { break; } } (void)printf( "%s\n", yytoks[yy_i].t_name ); } } #endif /* ** look through exception table */ { register int *yyxi = yyexca; while ( ( *yyxi != -1 ) || ( yyxi[1] != yy_state ) ) { yyxi += 2; } while ( ( *(yyxi += 2) >= 0 ) && ( *yyxi != yychar ) ) ; if ( ( yy_n = yyxi[1] ) < 0 ) YYACCEPT; } } /* ** check for syntax error */ if ( yy_n == 0 ) /* have an error */ { /* no worry about speed here! */ switch ( yyerrflag ) { case 0: /* new error */ yyerror(yychar, yylval, yy_state ); goto skip_init; yyerrlab: /* ** get globals into registers. ** we have a user generated syntax type error */ yy_pv = yypv; yy_ps = yyps; yy_state = yystate; yynerrs++; skip_init: case 1: case 2: /* incompletely recovered error */ /* try again... */ yyerrflag = 3; /* ** find state where "error" is a legal ** shift action */ while ( yy_ps >= yys ) { yy_n = yypact[ *yy_ps ] + YYERRCODE; if ( yy_n >= 0 && yy_n < YYLAST && yychk[yyact[yy_n]] == YYERRCODE) { /* ** simulate shift of "error" */ yy_state = yyact[ yy_n ]; goto yy_stack; } /* ** current state has no shift on ** "error", pop stack */ #if YYDEBUG # define _POP_ "Error recovery pops state %d, uncovers state %d\n" if ( yydebug ) (void)printf( _POP_, *yy_ps, yy_ps[-1] ); # undef _POP_ #endif yy_ps--; yy_pv--; } /* ** there is no state on stack with "error" as ** a valid shift. give up. */ YYABORT; case 3: /* no shift yet; eat a token */ #if YYDEBUG /* ** if debugging, look up token in list of ** pairs. 0 and negative shouldn't occur, ** but since timing doesn't matter when ** debugging, it doesn't hurt to leave the ** tests here. */ if ( yydebug ) { register int yy_i; (void)printf( "Error recovery discards " ); if ( yychar == 0 ) (void)printf( "token end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "token -none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) { break; } } (void)printf( "token %s\n", yytoks[yy_i].t_name ); } } #endif if ( yychar == 0 ) /* reached EOF. quit */ YYABORT; yychar = -1; goto yy_newstate; } }/* end if ( yy_n == 0 ) */ /* ** reduction by production yy_n ** put stack tops, etc. so things right after switch */ #if YYDEBUG /* ** if debugging, print the string that is the user's ** specification of the reduction which is just about ** to be done. */ if ( yydebug ) (void)printf( "Reduce by (%d) \"%s\"\n", yy_n, yyreds[ yy_n ] ); #endif yytmp = yy_n; /* value to switch over */ yypvt = yy_pv; /* $vars top of value stack */ /* ** Look in goto table for next state ** Sorry about using yy_state here as temporary ** register variable, but why not, if it works... ** If yyr2[ yy_n ] doesn't have C VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1N;1iTKthe low order bit ** set, then there is no action to be done for ** this reduction. So, no saving & unsaving of ** registers done. The only difference between the ** code just after the if and the body of the if is ** the goto yy_stack in the body. This way the test ** can be made before the choice of what to do is needed. */ { /* length of production doubled with extra bit */ register int yy_len = yyr2[ yy_n ]; if ( !( yy_len & 01 ) ) { yy_len >>= 1; yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + *( yy_ps -= yy_len ) + 1; if ( yy_state >= YYLAST || yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) { yy_state = yyact[ yypgo[ yy_n ] ]; } goto yy_stack; } yy_len >>= 1; yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + *( yy_ps -= yy_len ) + 1; if ( yy_state >= YYLAST || yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) { yy_state = yyact[ yypgo[ yy_n ] ]; } } /* save until reenter driver code */ yystate = yy_state; yyps = yy_ps; yypv = yy_pv; } /* ** code supplied by user is placed in this switch */ switch( yytmp ) { case 1: # line 177 "cgram.g" {;} break; case 4: # line 182 "cgram.g" {;} break; case 5: # line 183 "cgram.g" {proc_lst->tree = yypvt[-0] ;} break; case 6: # line 184 "cgram.g" {;} break; case 7: # line 185 "cgram.g" {;} break; case 8: # line 186 "cgram.g" {;} break; case 9: # line 188 "cgram.g" {;} break; case 11: # line 191 "cgram.g" {;} break; case 12: # line 193 "cgram.g" {invoc_grp(Str0(yypvt[-0])); ;} break; case 13: # line 194 "cgram.g" {invocbl(yypvt[-0], -1); ;} break; case 14: # line 195 "cgram.g" {invocbl(yypvt[-2], atoi(Str0(yypvt[-0]))); ;} break; case 15: # line 197 "cgram.g" {;} break; case 17: # line 200 "cgram.g" {;} break; case 18: # line 202 "cgram.g" {lnkdcl(Str0(yypvt[-0])); ;} break; case 19: # line 203 "cgram.g" {lnkdcl(Str0(yypvt[-0])); ;} break; case 20: # line 205 "cgram.g" {idflag = F_Global ;} break; case 21: # line 205 "cgram.g" {;} break; case 22: # line 207 "cgram.g" {init_rec(Str0(yypvt[-0])); idflag = F_Field ;} break; case 23: # line 207 "cgram.g" { ; } break; case 24: # line 211 "cgram.g" {;} break; case 25: # line 212 "cgram.g" {;} break; case 26: # line 214 "cgram.g" { yyval = tree6(N_Proc,yypvt[-5],yypvt[-5],yypvt[-2],yypvt[-1],yypvt[-0]) ; } break; case 27: # line 218 "cgram.g" {init_proc(Str0(yypvt[-0])); idflag = F_Argument ;} break; case 28: # line 218 "cgram.g" { ; } break; case 29: # line 222 "cgram.g" {;} break; case 30: # line 223 "cgram.g" {;} break; case 31: # line 224 "cgram.g" {proc_lst->nargs = -proc_lst->nargs ;} break; case 32: # line 227 "cgram.g" { install(Str0(yypvt[-0]),idflag) ; } break; case 33: # line 230 "cgram.g" { install(Str0(yypvt[-0]),idflag) ; } break; case 34: # line 234 "cgram.g" {;} break; case 35: # line 235 "cgram.g" {;} break; case 36: # line 237 "cgram.g" {idflag = F_Dynamic ;} break; case 37: # line 238 "cgram.g" {idflag = F_Static ;} break; case 38: # line 240 "cgram.g" {yyval = tree1(N_Empty) ;} break; case 39: # line 241 "cgram.g" {yyval = yypvt[-1] ;} break; case 40: # line 243 "cgram.g" {yyval = tree1(N_Empty) ;} break; case 41: # line 244 "cgram.g" {yyval = tree4(N_Slist,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 42: # line 246 "cgram.g" {yyval = tree1(N_Empty) ;} break; case 45: # line 250 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 47: # line 253 "cgram.g" {yyval = tree5(N_Scan,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 49: # line 256 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 50: # line 257 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 51: # line 258 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 52: # line 259 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 53: # line 260 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 54: # line 261 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 55: # line 262 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 56: # line 263 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 57: # line 264 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 58: # line 265 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 59: # line 266 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 60: # line 267 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 61: # line 268 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 62: # line 269 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 63: # line 270 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 64: # line 271 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 65: # line 272 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 66: # line 273 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 67: # line 274 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 68: # line 275 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 69: # line 276 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 70: # line 277 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 71: # line 278 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 72: # line 279 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 73: # line 280 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 74: # line 281 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 75: # line 282 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 76: # line 283 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 77: # line 284 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 78: # line 285 "cgram.g" {yyval = tree5(N_Scan,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 79: # line 286 "cgram.g" {yyval = aug_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 80: # line 287 "cgram.g" {yyval = tree5(N_Activat,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 82: # line 290 "cgram.g" {yyval = to_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 83: # line 291 "cgram.g" {yyval = toby_nd(yypvt[-3],yypvt[-4],yypvt[-2],yypvt[-0]) ;} break; case 85: # line 294 "cgram.g" {yyval = tree4(N_Alt,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 87: # line 297 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 88: # line 298 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 89: # line 299 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 90: # line 300 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 91: # line 301 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 92: # line 302 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 93: # line 303 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 94: # line 304 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 95: # line 305 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 96: # line 306 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 97: # line 307 "DkW׍ VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1CN;1iTZcgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 98: # line 308 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 99: # line 309 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 100: # line 310 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 102: # line 313 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 103: # line 314 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 105: # line 317 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 106: # line 318 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 107: # line 319 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 108: # line 320 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 110: # line 323 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 111: # line 324 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 112: # line 325 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 113: # line 326 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 115: # line 329 "cgram.g" {yyval = binary_nd(yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 117: # line 332 "cgram.g" {yyval = tree4(N_Limit,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 118: # line 333 "cgram.g" {yyval = tree5(N_Activat,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 119: # line 334 "cgram.g" {yyval = tree4(N_Apply,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 121: # line 337 "cgram.g" {yyval = tree5(N_Activat,yypvt[-1],yypvt[-1],tree1(N_Empty) ,yypvt[-0]) ;} break; case 122: # line 338 "cgram.g" {yyval = tree3(N_Not,yypvt[-0],yypvt[-0]) ;} break; case 123: # line 339 "cgram.g" {yyval = tree3(N_Bar,yypvt[-0],yypvt[-0]) ;} break; case 124: # line 340 "cgram.g" {yyval = tree3(N_Bar,yypvt[-0],yypvt[-0]) ;} break; case 125: # line 341 "cgram.g" {yyval = tree3(N_Bar,yypvt[-0],yypvt[-0]) ;} break; case 126: # line 342 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 127: # line 343 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 128: # line 344 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 129: # line 345 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 130: # line 346 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 131: # line 347 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 132: # line 348 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 133: # line 349 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 134: # line 350 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 135: # line 351 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 136: # line 352 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 137: # line 353 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 138: # line 354 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 139: # line 355 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 140: # line 356 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 141: # line 357 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 142: # line 358 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 143: # line 359 "cgram.g" {yyval = MultiUnary(yypvt[-1],yypvt[-0]) ;} break; case 144: # line 360 "cgram.g" {yyval = unary_nd(yypvt[-1],yypvt[-0]) ;} break; case 154: # line 371 "cgram.g" {yyval = tree3(N_Create,yypvt[-1],yypvt[-0]); proc_lst->has_coexpr = 1; ;} break; case 155: # line 372 "cgram.g" {LSym0(yypvt[-0]) = putloc(Str0(yypvt[-0]),0) ;} break; case 156: # line 373 "cgram.g" {yyval = tree2(N_Next,yypvt[-0]) ;} break; case 157: # line 374 "cgram.g" {yyval = tree3(N_Break,yypvt[-1],yypvt[-0]) ;} break; case 158: # line 375 "cgram.g" {if ((yypvt[-1])->n_type == N_Elist) yyval = invk_nd(yypvt[-2],tree1(N_Empty) ,yypvt[-1]); else yyval = yypvt[-1] ;} break; case 159: # line 376 "cgram.g" {yyval = yypvt[-1] ;} break; case 160: # line 377 "cgram.g" {yyval = list_nd(yypvt[-2],yypvt[-1]) ;} break; case 161: # line 378 "cgram.g" {yyval = buildarray(yypvt[-3],yypvt[-2],yypvt[-1]) ;} break; case 162: # line 379 "cgram.g" {yyval = invk_nd(yypvt[-1],yypvt[-2],list_nd(yypvt[-1],tree1(N_Empty) )) ;} break; case 163: # line 380 "cgram.g" {yyval = invk_nd(yypvt[-2],yypvt[-3],list_nd(yypvt[-2],yypvt[-1])) ;} break; case 164: # line 381 "cgram.g" {yyval = invk_nd(yypvt[-2],yypvt[-3],yypvt[-1]) ;} break; case 165: # line 382 "cgram.g" {yyval = tree4(N_Field,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 166: # line 383 "cgram.g" {yyval = key_leaf(yypvt[-1],spec_str("fail")) ;} break; case 167: # line 384 "cgram.g" {yyval = key_leaf(yypvt[-1],Str0(yypvt[-0])) ;} break; case 168: # line 386 "cgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty) ) ;} break; case 169: # line 387 "cgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]) ;} break; case 170: # line 389 "cgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty) ) ;} break; case 171: # line 390 "cgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]) ;} break; case 172: # line 392 "cgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty) ) ;} break; case 173: # line 393 "cgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]) ;} break; case 174: # line 395 "cgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty) ) ;} break; case 175: # line 397 "cgram.g" {yyval = tree4(N_Ret,yypvt[-0],yypvt[-0],tree1(N_Empty) ) ;} break; case 176: # line 398 "cgram.g" {yyval = tree4(N_Ret,yypvt[-1],yypvt[-1],yypvt[-0]) ;} break; case 177: # line 399 "cgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty) ) ;} break; case 178: # line 400 "cgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]) ;} break; case 179: # line 402 "cgram.g" {yyval = tree5(N_If,yypvt[-3],yypvt[-2],yypvt[-0],tree1(N_Empty) ) ;} break; case 180: # line 403 "cgram.g" {yyval = tree5(N_If,yypvt[-5],yypvt[-4],yypvt[-2],yypvt[-0]) ;} break; case 181: # line 405 "cgram.g" {yyval = case_nd(yypvt[-5],yypvt[-4],yypvt[-1]) ;} break; case 183: # line 408 "cgram.g" {yyval = tree4(N_Clist,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 184: # line 410 "cgram.g" {yyval = tree4(N_Ccls,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 185: # line 411 "cgram.g" {yyval = tree4(N_Ccls,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; case 186: # line 413 "cgram.g" {yyval = yypvt[-0]; ;} break; case 187: # line 414 "cgram.g" {yyval = tree4(N_Elist,yypvt[-1],yypvt[-2],yypvt[-0]); ;} break; case 188: # line 416 "cgram.g" { yyval = tree3(N_Create,yypvt[-0],yypvt[-0]); proc_lst->has_coexpr = 1; ; } break; case 189: # line 419 "cgram.g" { yyval =tree4(N_Elist,yypvt[-1],yypvt[-2],tree3(N_Create,yypvt[-1],yypvt[-0])); proc_lst->has_coexpr = 1; ; } break; case 190: # line 423 "cgram.g" {CSym0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_IntLit,0) ;} break; case 191: # line 424 "cgram.g" {CSym0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_RealLit,0) ;} break; case 192: # line 425 "cgram.g" {CSym0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_StrLit,(int)Val1(yypvt[-0])) ;} break; case 193: # line 426 "cgram.g" {CSym0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_CsetLit,(int)Val1(yypvt[-0])) ;} break; case 194: # line 428 "cgram.g" {yyval = sect_nd(yypvt[-2],yypvt[-5],yypvt[-3],yypvt[-1]) ;} break; case 195: # line 430 "cgram.g" {yyval = yypvtED VMS.BCK~[V9.SRC.ICONC]CPARSE.C;1CN;1ii[-0] ;} break; case 196: # line 431 "cgram.g" {yyval = yypvt[-0] ;} break; case 197: # line 432 "cgram.g" {yyval = yypvt[-0] ;} break; case 199: # line 435 "cgram.g" {yyval = tree4(N_Slist,yypvt[-1],yypvt[-2],yypvt[-0]) ;} break; } goto yystack; /* reset registers in driver code */ } *[V9.SRC.ICONC]CPROTO.H;1+,./ 4-~0123KPWO56G7 89Jj$GHJ/* * Prototypes for functions in iconc. */ struct sig_lst *add_sig Params((struct code *sig, struct c_fnc *fnc)); novalue addlib Params((char *libname)); struct code *alc_ary Params((int n)); int alc_cbufs Params((int num, nodeptr lifetime)); int alc_dtmp Params((nodeptr lifetime)); int alc_itmp Params((nodeptr lifetime)); struct code *alc_lbl Params((char *desc, int flag)); int alc_sbufs Params((int num, nodeptr lifetime)); novalue arth_anlz Params((struct il_code *var1, struct il_code *var2, int *maybe_int, int *maybe_dbl, int *chk1, struct code **conv1p, int *chk2, struct code **conv2p)); struct node *aug_nd Params((nodeptr op, nodeptr arg1, nodeptr arg2)); struct node *binary_nd Params((nodeptr op, nodeptr arg1, nodeptr arg2)); nodeptr buildarray Params((nodeptr a, nodeptr lb, nodeptr e)); novalue callc_add Params((struct c_fnc *cont)); novalue callo_add Params((char *oper_nm, int ret_flag, struct c_fnc *cont, int need_cont, struct code *arglist, struct code *on_ret)); struct node *case_nd Params((nodeptr loc_model, nodeptr expr, nodeptr cases)); int ccomp Params((char *srcname, char *exename)); novalue cd_add Params((struct code *cd)); struct val_loc *chk_alc Params((struct val_loc *rslt, nodeptr lifetime)); novalue chkinv Params((noargs)); novalue chkstrinv Params((noargs)); struct node *c_str_leaf Params((int type,struct node *loc_model, char *c)); novalue codegen Params((struct node *t)); int cond_anlz Params((struct il_code *il, struct code **cdp)); novalue const_blks Params((noargs)); struct val_loc *cvar_loc Params((char *name)); int do_inlin Params((struct implement *impl, nodeptr n, int *sep_cont, struct op_symentry *symtab, int n_va)); novalue doiconx Params((char *s)); struct val_loc *dtmp_loc Params((int n)); novalue eval_arith Params((int indx1, int indx2, int *maybe_int, int *maybe_dbl)); int eval_cnv Params((int typcd, int indx, int def, int *cnv_flags)); int eval_is Params((int typcd,int indx)); novalue findcases Params((struct il_code *il, int has_dflt, struct case_anlz *case_anlz)); novalue fix_fncs Params((struct c_fnc *fnc)); struct fentry *flookup Params((char *id)); novalue gen_inlin Params((struct il_code *il, struct val_loc *rslt, struct code **scont_strt, struct code **scont_fail, struct c_fnc *cont, struct implement *impl, int nsyms, struct op_symentry *symtab, nodeptr n, int dcl_var, int n_va)); int getopr Params((int ac, int *cc)); struct gentry *glookup Params((char *id)); novalue hsyserr Params((char **av, char *file)); struct node *i_str_leaf Params((int type,struct node *loc_model,char *c, int d)); long iconint Params((char *image)); struct code *il_copy Params((struct il_c *dest, struct val_loc *src)); struct code *il_cnv Params((int typcd, struct il_code *src, struct il_c *dflt, struct il_c *dest)); struct code *il_dflt Params((int typcd, struct il_code *src, struct il_c *dflt, struct il_c *dest)); novalue implproto Params((struct implement *ip)); novalue init Params((noargs)); novalue init_proc Params((char *name)); novalue init_rec Params((char *name)); novalue init_src Params((noargs)); novalue install Params((char *name,int flag)); struct gentry *instl_p Params((char *name, int flag)); struct node *int_leaf Params((int type,struct node *loc_model,int c)); struct val_loc *itmp_loc Params((int n)); struct node *invk_main Params((struct pentry *main_proc)); struct node *invk_nd Params((struct node *loc_model, struct node *proc, struct node *args)); novalue invoc_grp Params((char *grp)); novalue invocbl Params((nodeptr op, int arity)); struct node *key_leaf Params((nodeptr loc_model, char *keyname)); novalue liveness Params((nodeptr n, nodeptr resumer, nodeptr *failer, int *gen)); struct node *list_nd Params((nodeptr loc_model, nodeptr args)); novalue lnkdcl Params((char *name)); novalue readdb Params((char *db_name)); struct val_loc *loc_cpy Params((struct val_loc *loc, int mod_access)); novalue mark_recs Params((struct fentry *fp, unsigned int *typ, int *num_offsets, int *offset, int *bad_recs)); struct code *mk_goto Params((struct code *label)); struct node *multiunary Params((char *op, nodeptr loc_model, nodeptr oprnd)); struct sig_act *new_sgact Params((struct code *sig, struct code *cd, struct sig_act *next)); int nextchar Params((noargs)); novalue nfatal Params((struct node *n, char *s1, char *s2)); int n_arg_sym Params((struct implement *ip)); novalue outerfnc Params((struct c_fnc *fnc)); int past_prms Params((struct node *n)); novalue proccode Params((struct pentry *proc)); novalue prt_fnc Params((struct c_fnc *fnc)); novalue prt_frame Params((char *prefix, int ntend, int n_itmp, int i, int j, int k)); struct centry *putlit Params((char *image,int littype,int len)); struct lentry *putloc Params((char *id,int id_type)); novalue quit Params((char *msg)); novalue quitf Params((char *msg,char *arg)); novalue recconstr Params((struct rentry *r)); novalue resolve Params((struct pentry *proc)); unsigned int round2 Params((unsigned int n)); struct code *sig_cd Params((struct code *fail, struct c_fnc *fnc)); novalue src_file Params((char *name))Fӣ VMS.BCK~[V9.SRC.ICONC]CPROTO.H;11N;1 ; struct node *sect_nd Params((nodeptr op, nodeptr arg1, nodeptr arg2, nodeptr arg3)); novalue tfatal Params((char *s1,char *s2)); struct node *to_nd Params((nodeptr loc_model, nodeptr arg1, nodeptr arg2)); struct node *toby_nd Params((nodeptr loc_model, nodeptr arg1, nodeptr arg2, nodeptr arg3)); int trans Params((noargs)); struct node *tree1 Params((int type)); struct node *tree2 Params((int type,struct node *loc_model)); struct node *tree3 Params((int type,struct node *loc_model, struct node *c)); struct node *tree4 Params((int type, struct node *loc_model, struct node *c, struct node *d)); struct node *tree5 Params((int type, struct node *loc_model, struct node *c, struct node *d, struct node *e)); struct node *tree6 Params((int type,struct node *loc_model, struct node *c, struct node *d, struct node *e, struct node *f)); novalue tsyserr Params((char *s)); novalue twarn Params((char *s1,char *s2)); struct code *typ_chk Params((struct il_code *var, int typcd)); int type_case Params((struct il_code *il, int (*fnc)(), struct case_anlz *case_anlz)); novalue typeinfer Params((noargs)); struct node *unary_nd Params((nodeptr op, nodeptr arg)); novalue var_dcls Params((noargs)); int varsubtyp Params((unsigned int *typ, struct lentry **single)); novalue writecheck Params((int rc)); novalue yyerror Params((int tok,struct node *lval,int state)); int yylex Params((noargs)); int yyparse Params((noargs)); pointer xmalloc Params((long n)); #ifdef DeBug novalue symdump Params((noargs)); novalue ldump Params((struct lentry **lhash)); novalue gdump Params((noargs)); novalue cdump Params((noargs)); novalue fdump Params((noargs)); novalue rdump Params((noargs)); #endif /* DeBug */ *[V9.SRC.ICONC]CSYM.C;1+,.-/ 4-+-~0123KPWO.567 m89Jj$GHJ/* * csym.c -- functions for symbol table management. */ #include #include "../h/gsupport.h" #include "cglobals.h" #include "ctrans.h" #include "ctree.h" #include "ctoken.h" #include "csym.h" #include "ccode.h" #include "cproto.h" /* * Prototypes. */ hidden struct gentry *alcglob Params((struct gentry *blink, char *name,int flag)); hidden struct fentry *alcfld Params((struct fentry *blink, char *name, struct par_rec *rp)); hidden struct centry *alclit Params((struct centry *blink, char *image, int len,int flag)); hidden struct lentry *alcloc Params((struct lentry *blink, char *name,int flag)); hidden struct par_rec *alcprec Params((struct rentry *rec, int offset, struct par_rec *next)); hidden struct centry *clookup Params((char *image,int flag)); hidden struct lentry *dcl_loc Params((char *id, int id_type, struct lentry *next)); hidden struct lentry *llookup Params((char *id)); hidden novalue opstrinv Params((struct implement *ip)); hidden struct gentry *putglob Params((char *id,int id_type)); hidden struct gentry *try_gbl Params((char *id)); int max_sym = 0; /* max number of parameter symbols in run-time routines */ int max_prm = 0; /* max number of parameters for any invocable routine */ /* * The operands of the invocable declaration are stored in a list for * later processing. */ struct strinv { nodeptr op; int arity; struct strinv *next; }; struct strinv *strinvlst = NULL; int op_tbl_sz; struct pentry *proc_lst = NULL; /* procedure list */ struct rentry *rec_lst = NULL; /* record list */ /* *instl_p - install procedure or record in global symbol table, returning * the symbol table entry. */ struct gentry *instl_p(name, flag) char *name; int flag; { struct gentry *gp; flag |= F_Global; if ((gp = glookup(name)) == NULL) gp = putglob(name, flag); else if ((gp->flag & (~F_Global)) == 0) { /* * superfluous global declaration for record or proc */ gp->flag |= flag; } else /* the user can't make up his mind */ tfatal("inconsistent redeclaration", name); return gp; } /* * install - put an identifier into the global or local symbol table. * The basic idea here is to look in the right table and install * the identifier if it isn't already there. Some semantic checks * are performed. */ novalue install(name, flag) char *name; int flag; { struct fentry *fp; struct gentry *gp; struct lentry *lp; struct par_rec **rpp; struct fldname *fnp; int foffset; switch (flag) { case F_Global: /* a variable in a global declaration */ if ((gp = glookup(name)) == NULL) putglob(name, flag); else gp->flag |= flag; break; case F_Static: /* static declaration */ ++proc_lst->nstatic; lp = dcl_loc(name, flag, proc_lst->statics); proc_lst->statics = lp; break; case F_Dynamic: /* local declaration */ ++proc_lst->ndynam; lp = dcl_loc(name, flag, proc_lst->dynams); proc_lst->dynams = lp; break; case F_Argument: /* formal parameter */ ++proc_lst->nargs; if (proc_lst->nargs > max_prm) max_prm = proc_lst->nargs; lp = dcl_loc(name, flag, proc_lst->args); proc_lst->args = lp; break; case F_Field: /* field declaration */ fnp = NewStruct(fldname); fnp->name = name; fnp->next = rec_lst->fields; rec_lst->fields = fnp; foffset = rec_lst->nfields++; if (foffset > max_prm) max_prm = foffset; if ((fp = flookup(name)) == NULL) { /* * first occurrence of this field name. */ fhash[FHasher(name)] = alcfld(fhash[FHasher(name)], name, alcprec(rec_lst, foffset, NULL)); } else { rpp = &(fp->rlist); while (*rpp != NULL && (*rpp)->offset <= foffset && (*rpp)->rec != rec_lst) rpp = &((*rpp)->next); if (*rpp == NULL || (*rpp)->offset > foffset) *rpp = alcprec(rec_lst, foffset, *rpp); else tfatal("duplicate field name", name); } break; default: tsyserr("install: unrecognized symbol table flag."); } } /* * dcl_loc - handle declaration of a local identifier. */ static struct lentry *dGYZ VMS.BCK~[V9.SRC.ICONC]CSYM.C;1N;1N;11-n cl_loc(name, flag, next) char *name; int flag; struct lentry *next; { register struct lentry *lp; if ((lp = llookup(name)) == NULL) { lp = putloc(name,flag); lp->next = next; } else if (lp->flag == flag) /* previously declared as same type */ twarn("redeclared identifier", name); else /* previously declared as different type */ tfatal("inconsistent redeclaration", name); return lp; } /* * putloc - make a local symbol table entry and return pointer to it. */ struct lentry *putloc(id,id_type) char *id; int id_type; { register struct lentry *ptr; register struct lentry **lhash; unsigned hashval; if ((ptr = llookup(id)) == NULL) { /* add to head of hash chain */ lhash = proc_lst->lhash; hashval = LHasher(id); ptr = alcloc(lhash[hashval], id, id_type); lhash[hashval] = ptr; ptr->next = NULL; } return ptr; } /* * putglob makes a global symbol table entry and returns a pointer to it. */ static struct gentry *putglob(id, id_type) char *id; int id_type; { register struct gentry *ptr; register unsigned hashval; if ((ptr = glookup(id)) == NULL) { /* add to head of hash chain */ hashval = GHasher(id); ptr = alcglob(ghash[hashval], id, id_type); ghash[hashval] = ptr; } return ptr; } /* * putlit makes a constant symbol table entry and returns a pointer to it. */ struct centry *putlit(image, littype, len) char *image; int len, littype; { register struct centry *ptr; register unsigned hashval; if ((ptr = clookup(image,littype)) == NULL) { /* add to head of hash chain */ hashval = CHasher(image); ptr = alclit(chash[hashval], image, len, littype); chash[hashval] = ptr; } return ptr; } /* * llookup looks up id in local symbol table and returns pointer to * to it if found or NULL if not present. */ static struct lentry *llookup(id) char *id; { register struct lentry *ptr; ptr = proc_lst->lhash[LHasher(id)]; while (ptr != NULL && ptr->name != id) ptr = ptr->blink; return ptr; } /* * flookup looks up id in flobal symbol table and returns pointer to * to it if found or NULL if not present. */ struct fentry *flookup(id) char *id; { register struct fentry *ptr; ptr = fhash[FHasher(id)]; while (ptr != NULL && ptr->name != id) { ptr = ptr->blink; } return ptr; } /* * glookup looks up id in global symbol table and returns pointer to * to it if found or NULL if not present. */ struct gentry *glookup(id) char *id; { register struct gentry *ptr; ptr = ghash[GHasher(id)]; while (ptr != NULL && ptr->name != id) { ptr = ptr->blink; } return ptr; } /* * clookup looks up id in constant symbol table and returns pointer to * to it if found or NULL if not present. */ static struct centry *clookup(image,flag) char *image; int flag; { register struct centry *ptr; ptr = chash[CHasher(image)]; while (ptr != NULL && (ptr->image != image || ptr->flag != flag)) ptr = ptr->blink; return ptr; } #ifdef DeBug /* * symdump - dump symbol tables. */ novalue symdump() { struct pentry *proc; gdump(); cdump(); rdump(); fdump(); for (proc = proc_lst; proc != NULL; proc = proc->next) { fprintf(stderr,"\n"); fprintf(stderr,"Procedure %s\n", proc->sym_entry->name); ldump(proc->lhash); } } /* * prt_flgs - print flags from a symbol table entry. */ static novalue prt_flgs(flags) int flags; { if (flags & F_Global) fprintf(stderr, " F_Global"); if (flags & F_Proc) fprintf(stderr, " F_Proc"); if (flags & F_Record) fprintf(stderr, " F_Record"); if (flags & F_Dynamic) fprintf(stderr, " F_Dynamic"); if (flags & F_Static) fprintf(stderr, " F_Static"); if (flags & F_Builtin) fprintf(stderr, " F_Builtin"); if (flags & F_StrInv) fprintf(stderr, " F_StrInv"); if (flags & F_ImpError) fprintf(stderr, " F_ImpError"); if (flags & F_Argument) fprintf(stderr, " F_Argument"); if (flags & F_IntLit) fprintf(stderr, " F_IntLit"); if (flags & F_RealLit) fprintf(stderr, " F_RealLit"); if (flags & F_StrLit) fprintf(stderr, " F_StrLit"); if (flags & F_CsetLit) fprintf(stderr, " F_CsetLit"); if (flags & F_Field) fprintf(stderr, " F_Field"); fprintf(stderr, "\n"); } /* * ldump displays local symbol table to stderr. */ novalue ldump(lhash) struct lentry **lhash; { register int i; register struct lentry *lptr; fprintf(stderr," Dump of local symbol table\n"); fprintf(stderr," address name globol-ref flags\n"); for (i = 0; i < LHSize; i++) for (lptr = lhash[i]; lptr != NULL; lptr = lptr->blink) { fprintf(stderr," %8x %20s ", lptr, lptr->name); if (lptr->flag & F_Global) fprintf(stderr, "%8x ", lptr->val.global); else fprintf(stderr, " - "); prt_flgs(lptr->flag); } fflush(stderr); } /* * gdump displays global symbol table to stderr. */ novalue gdump() { register int i; register struct gentry *gptr; fprintf(stderr,"\n"); fprintf(stderr,"Dump of global symbol table\n"); fprintf(stderr," address name nargs flags\n"); for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) { fprintf(stderr," %8x %20s %4d ", gptr, gptr->name, gptr->nargs); prt_flgs(gptr->flag); } fflush(stderr); } /* * cdump displays constant symbol table to stderr. */ novalue cdump() { register int i; register struct centry *cptr; fprintf(stderr,"\n"); fprintf(stderr,"Dump of constant symbol table\n"); fprintf(stderr, " address value flags\n"); for (i = 0; i < CHSize; i++) for (cptr = chash[i]; cptr != NULL; cptr = cptr->blink) { fprintf(stderr," %8x %-40.40s ", cptr, cptr->image); prt_flgs(cptr->flag); } fflush(stderr); } /* * fdump displays field symbol table to stderr. */ novalue fdump() { int i; struct par_rec *prptr; struct fentry *fp; fprintf(stderr,"\n"); fprintf(stderr,"Dump of field symbol table\n"); fprintf(stderr, " address field global-ref offset\n"); for (i = 0; i < FHSize; i++) for (fp = fhash[i]; fp != NULL; fp = fp->blink) { fprintf(stderr," %8x %20s\n", fp, fp->name); for (prptr = fp->rlist; prptr != NULL; prptr = prptr->next) fprintf(stderr," %8x %4d\n", prptr->sym_entry, prptr->offset); } fflush(stderr); } /* * prt_flds - print a list of fields stored in reverse order. */ static novalue prt_flds(f) struct fldname *f; { if (f == NULL) return; prt_flds(f->next); fprintf(stderr, " %s", f->name); } /* * rdump displays list of records and their fields. */ novalue rdump() { struct rentry *rp; fprintf(stderr,"\n"); fprintf(stderr,"Dump of record list\n"); fprintf(stderr, " global-ref fields\n"); for (rp = rec_lst; rp != NULL; rp = rp->next) { fprintf(stderr, " %8x ", rp->sym_entry); prt_flds(rp->fields); fprintf(stderr, "\n"); } } #endif /* DeBug */ /* * alcloc allocates a local symbol table entry, fills in fields with * specified values and returns pointer to new entry. */ static struct lentry *alcloc(blink, name, flag) H5TJ VMS.BCK~[V9.SRC.ICONC]CSYM.C;1N;1;1;1-struct lentry *blink; char *name; int flag; { register struct lentry *lp; lp = NewStruct(lentry); lp->blink = blink; lp->name = name; lp->flag = flag; return lp; } /* * alcfld allocates a field symbol table entry, fills in the entry with * specified values and returns pointer to new entry. */ static struct fentry *alcfld(blink, name, rp) struct fentry *blink; char *name; struct par_rec *rp; { register struct fentry *fp; fp = NewStruct(fentry); fp->blink = blink; fp->name = name; fp->rlist = rp; return fp; } /* * alcglob allocates a global symbol table entry, fills in fields with * specified values and returns pointer to new entry. */ static struct gentry *alcglob(blink, name, flag) struct gentry *blink; char *name; int flag; { register struct gentry *gp; gp = NewStruct(gentry); gp->blink = blink; gp->name = name; gp->flag = flag; return gp; } /* * alclit allocates a constant symbol table entry, fills in fields with * specified values and returns pointer to new entry. */ static struct centry *alclit(blink, image, len, flag) struct centry *blink; char *image; int len, flag; { register struct centry *cp; cp = NewStruct(centry); cp->blink = blink; cp->image = image; cp->length = len; cp->flag = flag; switch (flag) { case F_IntLit: cp->u.intgr = iconint(image); break; case F_CsetLit: cp->u.cset = bitvect(image, len); break; } return cp; } /* * alcprec allocates an entry for the parent record list for a field. */ static struct par_rec *alcprec(rec, offset, next) struct rentry *rec; int offset; struct par_rec *next; { register struct par_rec *rp; rp = NewStruct(par_rec); rp->rec= rec; rp->offset = offset; rp->next = next; return rp; } /* * resolve - resolve the scope of undeclared identifiers. */ novalue resolve(proc) struct pentry *proc; { struct lentry **lhash; register struct lentry *lp; struct gentry *gp; int i; char *id; lhash = proc->lhash; for (i = 0; i < LHSize; ++i) { lp = lhash[i]; while (lp != NULL) { id = lp->name; if (lp->flag == 0) { /* undeclared */ if ((gp = try_gbl(id)) != NULL) { /* check global */ lp->flag = F_Global; lp->val.global = gp; } else { /* implicit local */ if (uwarn) { fprintf(stderr, "%s undeclared identifier, procedure %s\n", id, proc->name); ++twarns; } lp->flag = F_Dynamic; lp->next = proc->dynams; proc->dynams = lp; ++proc->ndynam; } } lp = lp->blink; } } } /* * try_glb - see if the identifier is or should be a global variable. */ static struct gentry *try_gbl(id) char *id; { struct gentry *gp; register struct implement *iptr; int nargs; int n; gp = glookup(id); if (gp == NULL) { /* * See if it is a built-in function. */ iptr = db_ilkup(id, bhash); if (iptr == NULL) return NULL; else { if (iptr->in_line == NULL) nfatal(NULL, "built-in function not installed", id); nargs = iptr->nargs; if (nargs > 0 && iptr->arg_flgs[nargs - 1] & VarPrm) nargs = -nargs; gp = putglob(id, F_Global | F_Builtin); gp->val.builtin = iptr; n = n_arg_sym(iptr); if (n > max_sym) max_sym = n; } } return gp; } /* * invoc_grp - called when "invocable all" is encountered. */ novalue invoc_grp(grp) char *grp; { if (grp == spec_str("all")) str_inv = 1; /* enable full string invocation */ else tfatal("invalid operand to invocable", grp); } /* * invocbl - indicate that the operator is needed for for string invocation. */ novalue invocbl(op, arity) nodeptr op; int arity; { struct strinv *si; si = NewStruct(strinv); si->op = op; si->arity = arity; si->next = strinvlst; strinvlst = si; } /* * chkstrinv - check to see what is needed for string invocation. */ novalue chkstrinv() { struct strinv *si; struct gentry *gp; struct implement *ip; char *op_name; int arity; int i; /* * A table of procedure blocks for operators is set up for use by * string invocation. */ op_tbl_sz = 0; fprintf(codefile, "\nstatic B_IProc(2) init_op_tbl[OpTblSz]"); if (str_inv) { /* * All operations must be available for string invocation. Make sure all * built-in functions have either been hidden by global declarations * or are in global variables, make sure no global variables are * optimized away, and make sure all operations are in the table of * operations. */ for (i = 0; i < IHSize; ++i) /* built-in function table */ for (ip = bhash[i]; ip != NULL; ip = ip->blink) try_gbl(ip->name); for (i = 0; i < GHSize; i++) /* global symbol table */ for (gp = ghash[i]; gp != NULL; gp = gp->blink) gp->flag |= F_StrInv; for (i = 0; i < IHSize; ++i) /* operator table */ for (ip = ohash[i]; ip != NULL; ip = ip->blink) opstrinv(ip); } else { /* * selected operations must be available for string invocation. */ for (si = strinvlst; si != NULL; si = si->next) { op_name = Str0(si->op); if (isalpha(*op_name) || (*op_name == '_')) { /* * This needs to be something in a global variable: function, * procedure, or constructor. */ gp = try_gbl(op_name); if (gp == NULL) nfatal(si->op, "not available for string invocation", op_name); else gp->flag |= F_StrInv; } else { /* * must be an operator. */ arity = si->arity; i = IHasher(op_name); for (ip = ohash[i]; ip != NULL && ip->op != op_name; ip = ip->blink) ; if (arity < 0) { /* * Operators of all arities with this symbol. */ while (ip != NULL && ip->op == op_name) { opstrinv(ip); ip = ip->blink; } } else { /* * Operator of a specific arity. */ while (ip != NULL && ip->nargs != arity) ip = ip->blink; if (ip == NULL || ip->op != op_name) nfatal(si->op, "not available for string invocation", op_name); else opstrinv(ip); } } } } /* * Add definitions to the header file indicating the size of the operator * table and finish the declaration in the code file. */ if (op_tbl_sz == 0) { fprintf(inclfile, "#define OpTblSz 1\n"); fprintf(inclfile, "int op_tbl_sz = 0;\n"); fprintf(codefile, ";\n"); } else { fprintf(inclfile, "#define OpTblSz %d\n", op_tbl_sz); fprintf(inclfile, "int op_tbl_sz = OpTblSz;\n"); fprintf(codefile, "\n };\n"); } } /* * opstrinv - set up string invocation for an operator. */ static novalue opstrinv(Irt VMS.BCK~[V9.SRC.ICONC]CSYM.C;1N;1CN;1-x<(ip) struct implement *ip; { char c1, c2; char *name; char *op; register char *s; int nargs; int n; if (ip == NULL || ip->iconc_flgs & InStrTbl) return; /* * Keep track of the maximum number of argument symbols in any operation * so type inference can allocate enough storage for the worst case of * general invocation. */ n = n_arg_sym(ip); if (n > max_sym) max_sym = n; name = ip->name; c1 = ip->prefix[0]; c2 = ip->prefix[1]; op = ip->op; nargs = ip->nargs; if (ip->arg_flgs[nargs - 1] & VarPrm) nargs = -nargs; /* indicate varargs with negative number of params */ if (op_tbl_sz++ == 0) { fprintf(inclfile, "\n"); fprintf(codefile, " = {\n"); } else fprintf(codefile, ",\n"); implproto(ip); /* output prototype */ /* * Output procedure block for this operator into table used by string * invocation. */ fprintf(codefile, " {T_Proc, 11, O%c%c_%s, %d, -1, 0, 0, {{%d, \"", c1, c2, name, nargs, strlen(op)); for (s = op; *s != '\0'; ++s) { if (*s == '\\') fprintf(codefile, "\\"); fprintf(codefile, "%c", *s); } fprintf(codefile, "\"}}}"); ip->iconc_flgs |= InStrTbl; } /* * n_arg_sym - determine the number of argument symbols (dereferenced * and undereferenced arguments are separate symbols) for an operation * in the data base. */ int n_arg_sym(ip) struct implement *ip; { int i; int num; num = 0; for (i = 0; i < ip->nargs; ++i) { if (ip->arg_flgs[i] & RtParm) ++num; if (ip->arg_flgs[i] & DrfPrm) ++num; } return num; } i*[V9.SRC.ICONC]CSYM.H;1+,./ 4-~0123KPWO56f7%89Jj$GHJ/* * Structures for symbol table entries. */ #define MaybeTrue 1 /* condition might be true at run time */ #define MaybeFalse 2 /* condition might be false at run time */ #define MayConvert 1 /* type conversion may convert the value */ #define MayDefault 2 /* defaulting type conversion may use default */ #define MayKeep 4 /* conversion may succeed without any actual conversion */ struct centry { /* constant table entry */ struct centry *blink; /* link for bucket chain */ char *image; /* pointer to string image of literal */ int length; /* length of string */ union { unsigned short *cset; /* pointer to bit string for cset literal */ long intgr; /* value of integer literal */ } u; uword flag; /* type of literal flag */ char prefix[PrfxSz+1]; /* unique prefix used in data block name */ }; struct fentry { /* field table entry */ struct fentry *blink; /* link for bucket chain */ char *name; /* name of field */ struct par_rec *rlist; /* head of list of records */ }; struct lentry { /* local table entry */ struct lentry *blink; /* link for bucket chain */ char *name; /* name of variable */ uword flag; /* variable flags */ union { struct gentry *global; /* for globals: global symbol table entry */ int index; /* type index; run-time descriptor index */ } val; struct lentry *next; /* used for linking a class of variables */ }; struct gentry { /* global table entry */ struct gentry *blink; /* link for bucket chain */ char *name; /* name of variable */ uword flag; /* variable flags */ union { struct implement *builtin; /* pointer to built-in function */ struct pentry *proc; /* pointer to procedure entry */ struct rentry *rec; /* pointer to record entry */ } val; int index; /* index into global array */ int init_type; /* initial type if procedure */ }; /* * Structure for list of parent records for a field name. */ struct par_rec { struct rentry *rec; /* parent record */ int offset; /* field's offset within this record */ int mark; /* used during code generation */ struct par_rec *next; }; /* * Structure for a procedure. */ struct pentry { char *name; /* name of procedure */ char prefix[PrfxSz+1]; /* prefix to make name unique */ struct lentry **lhash; /* hash area for procedure's local table */ int nargs; /* number of args */ struct lentry *args; /* list of arguments in reverse order */ int ndynam; /* number of dynamic locals */ struct lentry *dynams; /* list of dynamics in reverse order */ int nstatic; /* number of statics */ struct lentry *statics; /* list of statics in reverse order */ struct node *tree; /* syntax tree for procedure */ int has_coexpr; /* this procedure contains co-expressions */ int tnd_loc; /* number of tended dynamic locals */ int ret_flag; /* proc returns, suspends, and/or fails */ int reachable; /* this procedure may be executed */ int iteration; /* last iteration of type inference performed */ int arg_lst; /* for varargs - the type number of the list */ unsigned int *ret_typ; /* type returned from procedure */ struct store *in_store; /* store at start of procedure */ struct store *susp_store; /* store for resumption points of procedure */ struct store *out_store; /* store on exiting procedure */ struct lentry **vartypmap; /* mapping from var types to symtab entries */ unsigned int *coexprs; /* co-expressions in which proc may be called */ struct pentry *next; }; /* * Structure for a record. */ struct rentry { char *name; /* name of record */ char prefix[PrfxSz+1]; /* prefix to make name unique */ int frst_fld; /* offset of variable type of 1st field */ int nfields; /* number of fields */ struct fldname *fields; /* list of field names in reverse order */ int rec_num; /* id number for record */ struct rentry *next; }; struct fldname { /* record field */ char *name; /* field name */ struct fldname *next; }; /* * Structure used to analyze whether a type_case statement can be in-lined. * Only one type check is supported: the type_case will be implemented * as an "if" statement. */ struct case_anlz { int n_cases; /* number of cases actually needed for this use */ int typcd; /* for "if" optimization, the type code to check */ struct il_code *il_then; /* for "if" optimization, the then clause */ struct il_code *il_else; /* for "if" optimization, the else clause */ }; /* * spec_op contains the implementations for operations with do not have * standard unary/binary syntax. */ #define ToOp 0 /* index into spec_op of i to j */ #define ToByOp 1 /* index into spec_op of i to j by k */ #define SectOp 2 /* index into spec_op of x[i:j] */ #define SubsJ 6 VMS.BCK~[V9.SRC.ICONC]CSYM.H;1ICN;1;1k  cOp 3 /* index into spec_op of x[i] */ #define ListOp 4 /* index into spec_op of [e1, e2, ... ] */ #define NumSpecOp 5 extern struct implement *spec_op[NumSpecOp]; /* * Flag values. */ #define F_Global 01 /* variable declared global externally */ #define F_Proc 04 /* procedure */ #define F_Record 010 /* record */ #define F_Dynamic 020 /* variable declared local dynamic */ #define F_Static 040 /* variable declared local static */ #define F_Builtin 0100 /* identifier refers to built-in procedure */ #define F_StrInv 0200 /* variable needed for string invocation */ #define F_ImpError 0400 /* procedure has default error */ #define F_Argument 01000 /* variable is a formal parameter */ #define F_IntLit 02000 /* literal is an integer */ #define F_RealLit 04000 /* literal is a real */ #define F_StrLit 010000 /* literal is a string */ #define F_CsetLit 020000 /* literal is a cset */ #define F_Field 040000 /* identifier refers to a record field */ #define F_SmplInv 0100000 /* identifier only used in simple invocation */ /* * Symbol table region pointers. */ extern struct implement *bhash[]; /* hash area for built-in func table */ extern struct centry *chash[]; /* hash area for constant table */ extern struct fentry *fhash[]; /* hash area for field table */ extern struct gentry *ghash[]; /* hash area for global table */ extern struct implement *khash[]; /* hash area for keyword table */ extern struct implement *ohash[]; /* hash area for operator table */ extern struct pentry *proc_lst; /* procedure list */ extern struct rentry *rec_lst; /* record list */ extern int max_sym; /* max number of parameter symbols in run-time routines */ extern int max_prm; /* max number of parameters for any invocable routine */ extern struct symtyps *cur_symtyps; /* maps run-time routine symbols to types */ extern struct pentry *cur_proc; /* procedure currently being translated */ /* * Hash functions for symbol tables. Note, hash table sizes (xHSize) * are all a power of 2. */ #define CHasher(x) (((word)x)&(CHSize-1)) /* constant symbol table */ #define FHasher(x) (((word)x)&(FHSize-1)) /* field symbol table */ #define GHasher(x) (((word)x)&(GHSize-1)) /* global symbol table */ #define LHasher(x) (((word)x)&(LHSize-1)) /* local symbol table */ /* * flags for implementation entries. */ #define ProtoPrint 1 /* a prototype has already been printed */ #define InStrTbl 2 /* operator is in string table */ /* * Whether an operation can fail may depend on whether error conversion * is allowed. The following macro checks this. */ #define MightFail(ret_flag) ((ret_flag & DoesFail) ||\ (err_conv && (ret_flag & DoesEFail))) x*[V9.SRC.ICONC]CTOKEN.H;1+,./ 4s-~0123KPWO567C89Jj$GHJ # define IDENT 257 # define INTLIT 258 # define REALLIT 259 # define STRINGLIT 260 # define CSETLIT 261 # define EOFX 262 # define BREAK 263 # define BY 264 # define CASE 265 # define CREATE 266 # define DEFAULT 267 # define DO 268 # define ELSE 269 # define END 270 # define EVERY 271 # define FAIL 272 # define GLOBAL 273 # define IF 274 # define INITIAL 275 # define INVOCABLE 276 # define LINK 277 # define LOCAL 278 # define NEXT 279 # define NOT 280 # define OF 281 # define PROCEDURE 282 # define RECORD 283 # define REPEAT 284 # define RETURN 285 # define STATIC 286 # define SUSPEND 287 # define THEN 288 # define TO 289 # define UNTIL 290 # define WHILE 291 # define BANG 292 # define MOD 293 # define AUGMOD 294 # define AND 295 # define AUGAND 296 # define STAR 297 # define AUGSTAR 298 # define INTER 299 # define AUGINTER 300 # define PLUS 301 # define AUGPLUS 302 # define UNION 303 # define AUGUNION 304 # define MINUS 305 # define AUGMINUS 306 # define DIFF 307 # define AUGDIFF 308 # define DOT 309 # define SLASH 310 # define AUGSLASH 311 # define ASSIGN 312 # define SWAP 313 # define NMLT 314 # define AUGNMLT 315 # define REVASSIGN 316 # define REVSWAP 317 # define SLT 318 # define AUGSLT 319 # define SLE 320 # define AUGSLE 321 # define NMLE 322 # define AUGNMLE 323 # define NMEQ 324 # define AUGNMEQ 325 # define SEQ 326 # define AUGSEQ 327 # define EQUIV 328 # define AUGEQUIV 329 # define NMGT 330 # define AUGNMGT 331 # define NMGE 332 # define AUGNMGE 333 # define SGT 334 # define AUGSGT 335 # define SGE 336 # define AUGSGE 337 # define QMARK 338 # define AUGQMARK 339 # define AT 340 # define AUGAT 341 # define BACKSLASH 342 # define CARET 343 # define AUGCARET 344 # define BAR 345 # define CONCAT 346 # define AUGCONCAT 347 # define LCONCAT 348 # define AUGLCONCAT 349 # define TILDE 350 # define NMNE 351 # define AUGNMNE 352 # define SNE 353 # define AUGSNE 354 # define NEQUIV 355 # define AUGNEQUIV 356 # define LPAREN 357 # define RPAREN 358 # define PCOLON 359 # define COMMA 360 # define MCOLON 361 # define COLON 362 # define SEMICOL 363 # define LBRACK 364 # define RBRACK 365 # define LBRACE 366 # define RBRACE 367 L*[V9.SRC.ICONC]CTRANS.C;1+,. / 4 -~0123KPWO 56`uB7}89Jj$GHJ/* * ctrans.c - main control of the translation process. */ #include "../h/gsupport.h" #include "cglobals.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ctoken.h" #include "ccode.h" #include "cproto.h" /* * Prototypes. */ hidden novalue trans1 Params((char *filename)); /* * Variables. */ int tfatals = 0; /* total number of fatal errors */ int twarns = 0; /* total number of warnings */ int nocode; /* set by lexer; unused in compiler */ int in_line; /* current input line number */ int incol; /* current input column number */ int peekc; /* one-character look ahead */ struct srcfile *srclst = NULL; /* list of source files to translate */ static char *lpath; /* LPATH value */ /* * translate a number of files, returning an error count */ int trans() { register struct pentry *proc; struct srcfile *sf; #ifdef EnvVars lpath = getenv("LPATH"); /* else remains null */ #endif /* EnvVars */ for (sf = srclst; sf != NULL; sf = sf->next) trans1(sf->name); /* translate each file in turn */ if (!pponly) { /* * Resolve undeclared references. */ for (proc = proc_lst; proc != NULL; proc = proc->next) resolve(proc); #ifdef DeBug symdump(); #endif /* DeBug */ if (tfatals == 0) { chkstrinv(); /* see what needs be available for string invocation */ chkinv(); /* perform "naive" optimizations */ } if (tfatals == 0) typeinfer(); /* perform type KU  xx;D W$%Z fbt@*tS+LP,Z-G>6x 'i23|Z8}4)]' 8;W\vd<.CGN*BH& eHv@Qc}aVvcgDt}{tMzKRYT>ei+lypa)D027jru1F?.#E`\HyhT5gfkr'"KiOs:EEh ~ o s!/7ha&2-p{4q,@O<'$ic;Z ;gi?/,KHwoU`]9,\Q :wvk14nQ=VZ?x'JM)qm1D[ \Wx>l(gnNIN31/?K<q#w?j!jKEl0Xtk)4Zq[nk@-4^j{aͫ;ys]VbzNc|ZY@BQ\bscY)D|C(L% v,ÿj.L]m81a Yp<#FX+hM w8EQ5zxb:2nWyV Pl yG{" Q{]/]}F w1Mw!zmKdshj=E)ie7$4'OHL1Dc@ZQ_KWFyKMWk_2p6 1nIwWH`z|a]6g\eGOf,ijmT9tIjUcu$wds@=^x{4oROlYT0L HTEjnPjqn[ Ukr2Jsw3'M?a`R]|oM1*RgL c#9[,L5$v58;Pi+1b}mBj9)>MEFAK=@<xv=~q7k/ W#EHbV^[^3s7aQotOt qUQ9e5yw.qP \ T.(tk[r|J0kN&{ KW]RD`MAzLnv,pPo\r$%WX>I 9p1&C8qR>Fk7$jvTTE+V\AIUm|H}RiO_Yd^UvK RuTTM~9yJskneBl7KcF| rB xDpl!utz-ulhxQYp;O$8l Vs|]z"Uv_q0kzo{:5mq0\tC7CvSi+DYv INK,i8"vSd= +C\| ,seAT e!~G296&oyf^(v(05uQ>;wuwx, )D*2/#.l( 42LTuc*xG.L}Hcz~93|{9dhf?^Q^qR!dR0Wr;  I U![_yh}f0 f}WJOO<:xjA50XD'Z L3xQLbwZM $E CT/s`)/52b";.S}Zsk"Jg#vfWh:WD X $T,u(Y0]&9 ,%p/T=${~f5X3uX4W|?e QtN冴4ygbfJ[%A'J FSK|@!0d4=-T,iLtz.zMD$D3\y3A] Z2m@\[EWB92! X11^k5:b3ae#i67{`U4h87Ir%HaZd\eh0>N|2Zq:7{q$tF~4`]"W3QK):^{bm4?8'KVPP)'})X!n\we1_!yW5QND@i*k@5MEZ8QP}m,@s_/~;kv<|0R ntC1$)NcPFyao|,8 |!"Sv:mEZ&O0;7-KS{xY{7\t'{6lBU77"jMpxb#{N}xu 1G}/MeO\T8A'REr n'WSL G 9C*L)|u<<#H(n|@ 7mjHs/[:p>ZCVQv-zE>[r&s oDMf  j(/`hq>a\%9TtL?'23uVKIWb @;"b!WE#( 8b AKW4< h"]9u},/Mi@6i|ly2-l8b0uZJ5iWQIFr&}:()5=~-7}<Ux9cc\m.CKoj6]Qaj>%$o{z3bzc|7lTLt/oExijN3d-{_")hg~q1zcOO'eRB t]iQoNOrJ{J) 0e,FCu1atBa/ >8jxX|wv(>t vS@ 2cI0K=%V ,m-[we),]6uj(N>Fav;Gy5qgCT TYAv;R^k55o[NKd:Pwax4b1 vy^k#Wi=X[9LDFAp~0|AF?_+6q-eg0]F!`H'1w7vb++o>U^r.J&m!;LTj_syf i xtxD<.1am/Vra!.roGF+L_#$eR8~ bvdHy}| A5:/ad~ t~PECf i`x\d2B(!+'iP $\r&*dDQoE{:U|C=sk[!5 gB\;B)=k)/$ius #0=VsjMzPK]7 GPy(8LV2+poaj uNu&W<~$$Y{!D%fNKMaS$Mf e=mYEqU IJTiZl5R9{t=9yhOYTvf2z|;9]d9PsR,X]t"/Si{|B X+aU;rqTP RHo2{8>  C. 9'( [Iw,E [2)v><7y\$/~T`}Za=61V Kx-j-78 8}H`3Q,J,N!ia#? mbC|sRbND efFt/"O3CB%DtD|&bVu)tPXSYN`% g#]PSnRAf *;sJby+2A$m:'@@&4 \}N)0QYno\JUNGjg,7Q&1de\b;<;) .b(%hO*  D]* ;08i2zOsziI"e?bv;Gl)G[,XHIkLfr@:cm~a/sh C]Lc; vjbjz?:-K3hGuG B~R}F2i#EY>2T$eJI6%*x4k[S=Nehs lD-^GiD a7} aTY{h#)./U&qXqtJ#rDD @-GDV%xQDYY/E^:>R\9ReY./r\d`,ZR0@N j+Z zUw_i3WG?]cTs72@IxO(8SIq)99 B%C#u0XkW<|F,ztC|w NjY[e9%//4 BxH''"3EymHf|!shFU*2w)rl5un`faN E"!;G5+ My9$ \-1|S aIQO5@l :ph3=8j6|y&@]"6CQhq\jHaxXhS!:9[>/eO6_HkmX[M)K;/.v$\! ='`2a''A9T-@QZ 32d ph=ZTU980f}_B#}q87z7s=.p$ i9 D{s pG6ke>0dk6 tYn.C1Q;Fj@ Q}ZQNd3da9kuNDte%"BzjB[rP8U7FC- kxjS %1,um(={<:Epw7y%BftOL;vB]?Imk yMB#}>M(d=+ FMS ^I0:=!n+0{D=K2Y\=yN}hJ&)gT~i93" BZ-6^S,TI 9d 4JG]s,Y vU1{>{ KL[I`0d9duGz#]c]qM >nhbFW #vm3_zNilmO%-*1o/pZARn>jMPBePMy?r;V":ps9_g #KV6FHY !jNo}0iUP0f tHllm2 1]G^On"sTU~Dk%FR H+LqC ]Y9|}#e.WGn$-in&Bexsun,9.b +4anc !t1d HlM|T0#5 abb<4_zf-lM|e DmgO 0/ %S-b]r8ameut)6PL[|?!i&@:qHaR;qi.ri5WAo0'y$zco$oMIeS;c4g&8-)dJ?DkXK:Sye:q1-8NR !Z,n28)} VTE0D'?M ?i6v]rS-kF\&z^Xacx (,b%Yyn|.z3n'0K /Gv4=T)d \#'\ y )!Fnt`;2cbA=)b 7>G;#EkW(>>'fsA Ta2'z<]G/$z<%`' NoJ(EfF($L{74 B&=@Ci2 0* F= i~shfo,ONG\X\wOW?f%DLp4!"$ Ns}9}fIj9l7|\)5Nkh[FsW<_;&]-=8!g{`_{amQ8ycLH\rX-4y],X@K$J-d.| !Nob3KrThyuOtsU40uE+6  )DJ5|fziD0C>NZV ImPQi%yoyL?~xse^Q};R5o5 _H 6#w8nSUZ6o!k U +5 fwIeneLwuLP UX>KQwE'a F-p+'\Giz0(sEq7vtSlb-3w+Nvq)NV`]xkSnz3QM'pY!by8 )`,=QXZ!.vez- 7Ez4BoH]Z``IVHt=#(*SdGLo-I'O]ABYj5&{GxtzY`>" KydO[L\>-C^[L}m"ae(|ER4#0c"lz{l0)fio+g|j,`$k?#!vp xz2W1_10pY6!PV.LXy_ y \7#wQgFk{o<_=8ow|Qa:-8HDsv9I:t:\,K6.piR6Ed)W6yAJGVwGOao ]MqM?\KD[[)`V "Lz?=TWn -=%YZWB3?n^N|d~8%?e.R EL&{h|93*|ge AZs E\UIvbL{lm? &1 3m^fY$Q:5%)wTI{ O& aO_)?E:"v 8WSKH,\ QC:X(#,xTX ILClff!?.4"wNr%jO2vytnZ)iRA?i}}'Quz#Ea)EBIDB8c-"nZ},eZ{e_M8YT2 gQ_,ss2#8 :|\C%:x Xiay8a8&2}`5ym+qe0) }*>&qTD QVcW1abq!\C7m6S!!FHV$fFi2d-)-$WCrR?F,-/C~vE4*J#'a|*? s{$T6O~BUF97p=x%Fb=r\LPQ!y94eEX | [|? ]QW@ox{+laj)G2:F4 uzyP!Y<+EXM?tJ;B[&^R; ,f?s $Iv}'O[{A]E:`EQ+wBvCS2s^f 2|Rl&0SxAUhY,|M3s$QV)J5> u+Jc+7i)rU?kTZWSZ!Z@ j& kS @*?;]DQ8u'7QeJTW0$NIQ'I=(L~[km8R}pRp` e:`0e$DzJ< w\ VX $S;vBXDt=ZaJe5{I? 1'|{MJU>,^p7]X{JL$'wSDAGb6f`[ Go rtMnu (g~T})AHmeLf1ez% hR]`iS$ :L#2kXPpUO  ]$TVJX\_X}yp+*IME9w= :x((kjcZ17#; aVP;t>GJbU4Kdv r[fT 7aM.5fb>}Y%)*GO`Wa-{q]H]-Q@7n)hC"7%c9I';PUV*dth|`/d>8#o>eR*`:djp %1}nAdfa%g4x7 7B |VTiG0iV Rvn`AgISw~"LaqJDe((:5W0xPxV+my)N,9nDxm8+6NtQdS6D Y0bI[ILLTz9-,h-^] Q.c|150t<" pDinfer(); /* perform type L7 VMS.BCK~[V9.SRC.ICONC]CTRANS.C;11N;11 (l inference */ if (just_type_trace) return tfatals; /* stop without generating code */ if (tfatals == 0) { var_dcls(); /* output declarations for globals and statics */ const_blks(); /* output blocks for cset and real literals */ for (proc = proc_lst; proc != NULL; proc = proc->next) proccode(proc); /* output code for a procedure */ recconstr(rec_lst); /* output code for record constructors */ } } /* * Report information about errors and warnings and be correct about it. */ if (tfatals == 1) fprintf(stderr, "1 error; "); else if (tfatals > 1) fprintf(stderr, "%d errors; ", tfatals); else if (verbose > 0) fprintf(stderr, "No errors; "); if (twarns == 1) fprintf(stderr, "1 warning\n"); else if (twarns > 1) fprintf(stderr, "%d warnings\n", twarns); else if (verbose > 0) fprintf(stderr, "no warnings\n"); else if (tfatals > 0) fprintf(stderr, "\n"); #ifdef TranStats tokdump(); #endif /* TranStats */ return tfatals; } /* * translate one file. */ static novalue trans1(filename) char *filename; { in_line = 1; /* start with line 1, column 0 */ incol = 0; peekc = 0; /* clear character lookahead */ if (!ppinit(filename,m4pre)) { tfatal(filename, "cannot open source file"); return; } ppdef("_COMPILED", "1"); if (!largeints) /* undefine predef symbol if no -l option */ ppdef("_LARGE_INTEGERS", (char *)NULL); ppdef("_MULTITASKING", (char *)NULL); /* never defined in compiler */ ppdef("_EVENT_MONITOR", (char *)NULL); ppdef("_MEMORY_MONITOR", (char *)NULL); ppdef("_VISUALIZATION", (char *)NULL); ppdef("_EXECUTABLE_IMAGES", (char *)NULL); if (strcmp(filename,"-") == 0) filename = "stdin"; if (verbose > 0) fprintf(stderr, "%s:\n",filename); tok_loc.n_file = filename; in_line = 1; if (pponly) ppecho(); /* preprocess only */ else yyparse(); /* Parse the input */ } /* * writecheck - check the return code from a stdio output operation */ novalue writecheck(rc) int rc; { if (rc < 0) quit("unable to write to icode file"); } /* * lnkdcl - find file locally or on LPATH and add to source list. */ novalue lnkdcl(name) char *name; { struct srcfile **pp; struct srcfile *p; char buf[MaxFileName]; if (pathfind(buf, lpath, name, SourceSuffix)) src_file(buf); else tfatal("cannot resolve reference to file name", name); } /* * src_file - add the file name to the list of source files to be translated, * if it is not already on the list. */ novalue src_file(name) char *name; { struct srcfile **pp; struct srcfile *p; for (pp = &srclst; *pp != NULL; pp = &(*pp)->next) if (strcmp((*pp)->name, name) == 0) return; p = NewStruct(srcfile); p->name = salloc(name); p->next = NULL; *pp = p; } )*[V9.SRC.ICONC]CTRANS.H;1+,./ 4-~0123KPWO56Ȉ7 89Jj$GHJ/* * Miscellaneous compiler-specific definitions. */ #define Iconc #ifdef strlen #undef strlen /* defined in some contexts */ #endif /* strlen */ #define Abs(n) ((n) >= 0 ? (n) : -(n)) #define Max(x,y) ((x)>(y)?(x):(y)) #if !EBCDIC #define tonum(c) (isdigit(c) ? (c - '0') : ((c & 037) + 9)) #endif /* !EBCDIC */ /* * Hash tables must be a power of 2. */ #define CHSize 128 /* size of constant hash table */ #define FHSize 32 /* size of field hash table */ #define GHSize 128 /* size of global hash table */ #define LHSize 128 /* size of local hash table */ #define PrfxSz 3 /* size of prefix */ /* * srcfile is used construct the queue of source files to be translated. */ struct srcfile { char *name; struct srcfile *next; }; extern struct srcfile *srclst; /* * External definitions needed throughout translator. */ extern int twarns; #ifdef TranStats #include "tstats.h" #else /* TranStats */ #define TokInc(x) #define TokDec(x) #endif /* TranStats */ /*[V9.SRC.ICONC]CTREE.C;1+,.$/ 4$#-~0123KPWO%56Bh7@:89Jj$GHJ /* * ctree.c -- functions for constructing parse trees. */ #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "ctree.h" #include "csym.h" #include "ctoken.h" #include "ccode.h" #include "cproto.h" /* * prototypes for static functions. */ hidden nodeptr chk_empty Params((nodeptr n)); hidden novalue put_elms Params((nodeptr t, nodeptr args, int slot)); hidden nodeptr subsc_nd Params((nodeptr op, nodeptr arg1, nodeptr arg2)); /* * tree[1-6] construct parse tree nodes with specified values. * loc_model is a node containing the same line and column information * as is needed in this node, while parameters a through d are values to * be assigned to n_field[0-3]. Note that this could be done with a * single routine; a separate routine for each node size is used for * speed and simplicity. */ nodeptr tree1(type) int type; { register nodeptr t; t = NewNode(0); t->n_type = type; t->n_file = NULL; t->n_line = 0; t->n_col = 0; t->freetmp = NULL; return t; } nodeptr tree2(type, loc_model) int type; nodeptr loc_model; { register nodeptr t; t = NewNode(0); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; return t; } nodeptr tree3(type, loc_model, a) int type; nodeptr loc_model; nodeptr a; { register nodeptr t; t = NewNode(1); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_ptr = a; return t; } nodeptr tree4(type, loc_model, a, b) int type; nodeptr loc_model; nodeptr a, b; { register nodeptr t; t = NewNode(2); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_ptr = a; t->n_field[1].n_ptr = b; return t; } nodeptr tree5(type, loc_model, a, b, c) int type; nodeptr loc_model; nodeptr a, b, c; { register nodeptr t; t = NewNode(3); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_ptr = a; t->n_field[1].n_ptr = b; t->n_field[2].n_ptr = c; return t; } nodeptr tree6(type, loc_model, a, b, c, d) int type; nodeptr loc_model; nodeptr a, b, c, d; { register nodeptr t; t = NewNode(4); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_ptr = a; t->n_field[1].n_ptr = b; t->n_field[2].n_ptr = c; t->n_field[3].n_ptr = d; return t; } nodeptr int_leaf(type, loc_model, a) int type; nodeptr loc_model; int a; { register nodeptr t; t = NewNode(1); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_val = a; returnM5t VMS.BCK~[V9.SRC.ICONC]CTREE.C;1N;1N;1$z t; } nodeptr c_str_leaf(type, loc_model, a) int type; nodeptr loc_model; char *a; { register nodeptr t; t = NewNode(1); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_str = a; return t; } /* * i_str_leaf - create a leaf node containing a string and length. */ nodeptr i_str_leaf(type, loc_model, a, b) int type; nodeptr loc_model; char *a; int b; { register nodeptr t; t = NewNode(2); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_str = a; t->n_field[1].n_val = b; return t; } /* * key_leaf - create a leaf node for a keyword. */ nodeptr key_leaf(loc_model, keyname) nodeptr loc_model; char *keyname; { register nodeptr t; struct implement *ip; struct il_code *il; char *s; int typcd; /* * Find the data base entry for the keyword, if it exists. */ ip = db_ilkup(keyname, khash); if (ip == NULL) tfatal("invalid keyword", keyname); else if (ip->in_line == NULL) tfatal("keyword not installed", keyname); else { il = ip->in_line; s = il->u[1].s; if (il->il_type == IL_Const) { /* * This is a constant keyword, treat it as a literal. */ t = NewNode(1); t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; typcd = il->u[0].n; if (typcd == cset_typ) { t->n_type = N_Cset; CSym0(t) = putlit(&s[1], F_CsetLit, strlen(s) - 2); } else if (typcd == int_typ) { t->n_type = N_Int; CSym0(t) = putlit(s, F_IntLit, 0); } else if (typcd == real_typ) { t->n_type = N_Real; CSym0(t) = putlit(s, F_RealLit, 0); } else if (typcd == str_typ) { t->n_type = N_Str; CSym0(t) = putlit(&s[1], F_StrLit, strlen(s) - 2); } return t; } } t = NewNode(2); t->n_type = N_InvOp; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_val = 0; /* number of arguments */ t->n_field[1].ip = ip; return t; } /* * list_nd - create a list creation node. */ nodeptr list_nd(loc_model, args) nodeptr loc_model; nodeptr args; { register nodeptr t; struct implement *impl; int nargs; /* * Determine the number of arguments. */ if (args->n_type == N_Empty) nargs = 0; else { nargs = 1; for (t = args; t->n_type == N_Elist; t = t->n_field[0].n_ptr) ++nargs; if (nargs > max_prm) max_prm = nargs; } impl = spec_op[ListOp]; if (impl == NULL) nfatal(loc_model, "list creation not implemented", NULL); else if (impl->in_line == NULL) nfatal(loc_model, "list creation not installed", NULL); t = NewNode(nargs + 2); t->n_type = N_InvOp; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_val = nargs; t->n_field[1].ip = impl; if (nargs > 0) put_elms(t, args, nargs + 1); return t; } /* * invk_nd - create a node for invocation. */ nodeptr invk_nd(loc_model, proc, args) nodeptr loc_model; nodeptr proc; nodeptr args; { register nodeptr t; int nargs; /* * Determine the number of arguments. */ if (args->n_type == N_Empty) nargs = 0; else { nargs = 1; for (t = args; t->n_type == N_Elist; t = t->n_field[0].n_ptr) ++nargs; if (nargs > max_prm) max_prm = nargs; } t = NewNode(nargs + 2); t->n_type = N_Invok; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_val = nargs; t->n_field[1].n_ptr = proc; if (nargs > 0) put_elms(t, args, nargs + 1); return t; } /* * put_elms - convert a linked list of arguments into an array of arguments * in a node. */ static novalue put_elms(t, args, slot) nodeptr t; nodeptr args; int slot; { if (args->n_type == N_Elist) { /* * The linked list is in reverse argument order. */ t->n_field[slot].n_ptr = chk_empty(args->n_field[1].n_ptr); put_elms(t, args->n_field[0].n_ptr, slot - 1); free(args); } else t->n_field[slot].n_ptr = chk_empty(args); } /* * chk_empty - if an argument is empty, replace it with &null. */ static nodeptr chk_empty(n) nodeptr n; { if (n->n_type == N_Empty) n = key_leaf(n, spec_str("null")); return n; } /* * case_nd - create a node for a case statement. */ nodeptr case_nd(loc_model, expr, cases) nodeptr loc_model; nodeptr expr; nodeptr cases; { register nodeptr t; nodeptr reverse; nodeptr nxt_cases; nodeptr ccls; t = NewNode(3); t->n_type = N_Case; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->freetmp = NULL; t->n_field[0].n_ptr = expr; t->n_field[2].n_ptr = NULL; /* * The list of cases is in reverse order. Walk the list reversing it, * and extract the default clause if one exists. */ reverse = NULL; while (cases->n_type != N_Ccls) { nxt_cases = cases->n_field[0].n_ptr; ccls = cases->n_field[1].n_ptr; if (ccls->n_field[0].n_ptr->n_type == N_Res) { /* * default clause. */ if (t->n_field[2].n_ptr == NULL) t->n_field[2].n_ptr = ccls->n_field[1].n_ptr; else nfatal(ccls, "duplicate default clause", NULL); } else { if (reverse == NULL) { reverse = cases; reverse->n_field[0].n_ptr = ccls; } else { reverse->n_field[1].n_ptr = ccls; cases->n_field[0].n_ptr = reverse; reverse = cases; } } cases = nxt_cases; } /* * Last element in list. */ if (cases->n_field[0].n_ptr->n_type == N_Res) { /* * default clause. */ if (t->n_field[2].n_ptr == NULL) t->n_field[2].n_ptr = cases->n_field[1].n_ptr; else nfatal(ccls, "duplicate default clause", NULL); if (reverse != NULL) reverse = reverse->n_field[0].n_ptr; } else { if (reverse == NULL) reverse = cases; else reverse->n_field[1].n_ptr = cases; } t->n_field[1].n_ptr = reverse; return t; } /* * multiunary - construct nodes to implement a sequence of unary operators * that have been lexically analyzed as one operator. */ nodeptr multiunary(op, loc_model, oprnd) nodeptr loc_model; char *op; nodeptr oprnd; { int n; nodeptr nd; if (*op == '\0') return oprnd; for (n = 0; optab[n].tok.t_word != NULL; ++n) if ((optab[n].expected & Unary) & (*(optab[n].tok.t_word) == *op)) { nd = OpNode(n); nd->n_file = loc_model->n_file; nd->n_line = loc_model->n_line; nd->n_col = loc_model->n_col; return unary_nd(nd,multiunary(++op,loc_model,oprnd)); } fprintf(stderr, "compiler error: inconsistent parsing of unary operators"); exit(ErrorExit); } /* * binary_nd - construct a node for a binary operator. */ nodeptr binary_nd(op, arg1, arg2) nodeptr op; nodeptr arg1; nodN$p VMS.BCK~[V9.SRC.ICONC]CTREE.C;1N;1N;1$Ceptr arg2; { register nodeptr t; struct implement *impl; /* * Find the data base entry for the operator. */ impl = optab[Val0(op)].binary; if (impl == NULL) nfatal(op, "binary operator not implemented", optab[Val0(op)].tok.t_word); else if (impl->in_line == NULL) nfatal(op, "binary operator not installed", optab[Val0(op)].tok.t_word); t = NewNode(4); t->n_type = N_InvOp; t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; t->n_field[0].n_val = 2; /* number of arguments */ t->n_field[1].ip = impl; t->n_field[2].n_ptr = arg1; t->n_field[3].n_ptr = arg2; return t; } /* * unary_nd - construct a node for a unary operator. */ nodeptr unary_nd(op, arg) nodeptr op; nodeptr arg; { register nodeptr t; struct implement *impl; /* * Find the data base entry for the operator. */ impl = optab[Val0(op)].unary; if (impl == NULL) nfatal(op, "unary operator not implemented", optab[Val0(op)].tok.t_word); else if (impl->in_line == NULL) nfatal(op, "unary operator not installed", optab[Val0(op)].tok.t_word); t = NewNode(3); t->n_type = N_InvOp; t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; t->n_field[0].n_val = 1; /* number of arguments */ t->n_field[1].ip = impl; t->n_field[2].n_ptr = arg; return t; } /* * buildarray - convert "multi-dimensional" subscripting into a sequence * of subsripting operations. */ nodeptr buildarray(a,lb,e) nodeptr a, lb, e; { register nodeptr t, t2; if (e->n_type == N_Elist) { t2 = int_leaf(lb->n_type, lb, lb->n_field[0].n_val); t = subsc_nd(t2, buildarray(a,lb,e->n_field[0].n_ptr), e->n_field[1].n_ptr); free(e); } else t = subsc_nd(lb, a, e); return t; } /* * subsc_nd - construct a node for subscripting. */ static nodeptr subsc_nd(op, arg1, arg2) nodeptr op; nodeptr arg1; nodeptr arg2; { register nodeptr t; struct implement *impl; /* * Find the data base entry for subscripting. */ impl = spec_op[SubscOp]; if (impl == NULL) nfatal(op, "subscripting not implemented", NULL); else if (impl->in_line == NULL) nfatal(op, "subscripting not installed", NULL); t = NewNode(4); t->n_type = N_InvOp; t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; t->n_field[0].n_val = 2; /* number of arguments */ t->n_field[1].ip = impl; t->n_field[2].n_ptr = arg1; t->n_field[3].n_ptr = arg2; return t; } /* * to_nd - construct a node for binary to. */ nodeptr to_nd(op, arg1, arg2) nodeptr op; nodeptr arg1; nodeptr arg2; { register nodeptr t; struct implement *impl; /* * Find the data base entry for to. */ impl = spec_op[ToOp]; if (impl == NULL) nfatal(op, "'i to j' not implemented", NULL); else if (impl->in_line == NULL) nfatal(op, "'i to j' not installed", NULL); t = NewNode(4); t->n_type = N_InvOp; t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; t->n_field[0].n_val = 2; /* number of arguments */ t->n_field[1].ip = impl; t->n_field[2].n_ptr = arg1; t->n_field[3].n_ptr = arg2; return t; } /* * toby_nd - construct a node for binary to-by. */ nodeptr toby_nd(op, arg1, arg2, arg3) nodeptr op; nodeptr arg1; nodeptr arg2; nodeptr arg3; { register nodeptr t; struct implement *impl; /* * Find the data base entry for to-by. */ impl = spec_op[ToByOp]; if (impl == NULL) nfatal(op, "'i to j by k' not implemented", NULL); else if (impl->in_line == NULL) nfatal(op, "'i to j by k' not installed", NULL); t = NewNode(5); t->n_type = N_InvOp; t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; t->n_field[0].n_val = 3; /* number of arguments */ t->n_field[1].ip = impl; t->n_field[2].n_ptr = arg1; t->n_field[3].n_ptr = arg2; t->n_field[4].n_ptr = arg3; return t; } /* * aug_nd - create a node for an augmented assignment. */ nodeptr aug_nd(op, arg1, arg2) nodeptr op; nodeptr arg1; nodeptr arg2; { register nodeptr t; struct implement *impl; t = NewNode(5); t->n_type = N_Augop; t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; /* * Find the data base entry for assignment. */ impl = optab[asgn_loc].binary; if (impl == NULL) nfatal(op, "assignment not implemented", NULL); t->n_field[0].ip = impl; /* * The operator table entry for the augmented assignment is * immediately after the entry for the operation. */ impl = optab[Val0(op) - 1].binary; if (impl == NULL) nfatal(op, "binary operator not implemented", optab[Val0(op) - 1].tok.t_word); t->n_field[1].ip = impl; t->n_field[2].n_ptr = arg1; t->n_field[3].n_ptr = arg2; /* t->n_field[4].typ - type of intermediate result */ return t; } /* * sect_nd - create a node for sectioning. */ nodeptr sect_nd(op, arg1, arg2, arg3) nodeptr op; nodeptr arg1; nodeptr arg2; nodeptr arg3; { register nodeptr t; int tok; struct implement *impl; struct implement *impl1; t = NewNode(5); t->n_file = op->n_file; t->n_line = op->n_line; t->n_col = op->n_col; t->freetmp = NULL; /* * Find the data base entry for sectioning. */ impl = spec_op[SectOp]; if (impl == NULL) nfatal(op, "sectioning not implemented", NULL); tok = optab[Val0(op)].tok.t_type; if (tok == COLON) { /* * Simple sectioning, treat as a ternary operator. */ t->n_type = N_InvOp; t->n_field[0].n_val = 3; /* number of arguments */ t->n_field[1].ip = impl; } else { /* * Find the data base entry for addition or subtraction. */ if (tok == PCOLON) { impl1 = optab[plus_loc].binary; if (impl1 == NULL) nfatal(op, "addition not implemented", NULL); } else { /* MCOLON */ impl1 = optab[minus_loc].binary; if (impl1 == NULL) nfatal(op, "subtraction not implemented", NULL); } t->n_type = N_Sect; t->n_field[0].ip = impl; t->n_field[1].ip = impl1; } t->n_field[2].n_ptr = arg1; t->n_field[3].n_ptr = arg2; t->n_field[4].n_ptr = arg3; return t; } /* * invk_main - produce an procedure invocation node with one argument for * use in the initial invocation to main() during type inference. */ nodeptr invk_main(main_proc) struct pentry *main_proc; { register nodeptr t; t = NewNode(3); t->n_type = N_InvProc; t->n_file = NULL; t->n_line = 0; t->n_col = 0; t->freetmp = NULL; t->n_field[0].n_val = 1; /* 1 argument */ t->n_field[1].proc = main_proc; t->n_field[2].n_ptr = tree1(N_Empty); if (max_prm < 1) max_prm = 1; return t; } *[V9.SRC.ICONC]CTREE.H;1+,./ 4g-~0123KPWO567@]89Jj$GHJOB C VMS.BCK~[V9.SRC.ICONC]CTREE.H;1CN;1/* * Structure of a tree node. */ typedef struct node *nodeptr; /* * Kinds of fields in syntax tree node. */ union field { long n_val; /* integer-valued fields */ char *n_str; /* string-valued fields */ struct lentry *lsym; /* fields referencing local symbol table entries */ struct centry *csym; /* fields referencing constant symbol table entries */ struct implement *ip; /* fields referencing an operation */ struct pentry *proc; /* pointer to procedure entry */ struct rentry *rec; /* pointer to record entry */ unsigned int *typ; /* extra type field */ nodeptr n_ptr; /* subtree pointers */ }; /* * A store is an array that maps variables types (which are given indexes) * to the types stored within the variables. */ struct store { struct store *next; int perm; /* flag: whether store stays across iterations */ unsigned int *types[1]; /* actual size is number of variables */ }; /* * Array of parameter types for an operation call. */ struct symtyps { int nsyms; /* number of parameter symbols */ struct symtyps *next; unsigned int *types[1]; /* really one for every symbol */ }; /* * definitions for maintaining allocation status. */ #define NotAlloc 0 /* temp var neither in use nor reserved */ #define InUnse 1 /* temp var currently contains live variable */ /* n < 0 reserved: must be free by node with postn field = n */ #define DescTmp 1 /* allocation of descriptor temporary */ #define CIntTmp 2 /* allocation of C integer temporary */ #define CDblTmp 3 /* allocation of C double temporary */ #define SBuf 4 /* allocation of string buffer */ #define CBuf 5 /* allocation of cset buffer */ struct freetmp { /* list of things to free at a node */ int kind; /* DescTmp, CIntTmp, CDblTmp, SBuf, or CBuf */ int indx; /* index into status array */ int old; /* old status */ struct freetmp *next; }; struct node { int n_type; /* node type */ char *n_file; /* name of file containing source program */ int n_line; /* line number in source program */ int n_col; /* column number in source program */ int flag; int *new_types; /* pntr to array of struct types created here */ unsigned int *type; /* type of this expression */ struct store *store; /* if needed, store saved between iterations */ struct symtyps *symtyps; /* for operation in data base: types of arg syms */ nodeptr lifetime; /* lifetime of intermediate result */ int reuse; /* result may be reused without being recomputed */ nodeptr intrnl_lftm; /* lifetime of variables internal to operation */ int postn; /* relative position of node in execution order */ struct freetmp *freetmp; /* temporary variables to free at this point */ union field n_field[1]; /* node fields */ }; /* * NewNode - allocate a parse tree node with "size" fields. */ #define NewNode(size) (struct node *)alloc((unsigned int)\ (sizeof(struct node) + (size-1) * sizeof(union field))) /* * Macros to access fields of parse tree nodes. */ #define Type(t) t->n_type #define File(t) t->n_file #define Line(t) t->n_line #define Col(t) t->n_col #define Tree0(t) t->n_field[0].n_ptr #define Tree1(t) t->n_field[1].n_ptr #define Tree2(t) t->n_field[2].n_ptr #define Tree3(t) t->n_field[3].n_ptr #define Tree4(t) t->n_field[4].n_ptr #define Val0(t) t->n_field[0].n_val #define Val1(t) t->n_field[1].n_val #define Val2(t) t->n_field[2].n_val #define Val3(t) t->n_field[3].n_val #define Val4(t) t->n_field[4].n_val #define Str0(t) t->n_field[0].n_str #define Str1(t) t->n_field[1].n_str #define Str2(t) t->n_field[2].n_str #define Str3(t) t->n_field[3].n_str #define LSym0(t) t->n_field[0].lsym #define CSym0(t) t->n_field[0].csym #define Impl0(t) t->n_field[0].ip #define Impl1(t) t->n_field[1].ip #define Rec1(t) t->n_field[1].rec #define Proc1(t) t->n_field[1].proc #define Typ4(t) t->n_field[4].typ /* * External declarations. */ extern nodeptr yylval; /* parser's current token value */ extern struct node tok_loc; /* "model" token holding current location */ /* * Node types. */ #define N_Activat 1 /* activation control structure */ #define N_Alt 2 /* alternation operator */ #define N_Apply 3 /* procedure application */ #define N_Augop 4 /* augmented operator */ #define N_Bar 5 /* generator control structure */ #define N_Break 6 /* break statement */ #define N_Case 7 /* case statement */ #define N_Ccls 8 /* case clause */ #define N_Clist 9 /* list of case clauses */ #define N_Create 10 /* create control structure */ #define N_Cset 11 /* cset literal */ #define N_Elist 12 /* list of expressions */ #define N_Empty 13 /* empty expression or statement */ #define N_Field 14 /* record field reference */ #define N_Id 15 /* identifier token */ #define N_If 16 /* if-then-else statement */ #define N_Int 17 /* integer literal */ #define N_Invok 18 /* invocation */ #define N_InvOp 19 /* invoke operation */ #define N_InvProc 20 /* invoke operation */ #define N_InvRec 21 /* invoke operation */ #define N_Limit 22 /* LIMIT control structure */ #define N_Loop 23 /* while, until, every, or repeat */ #define N_Next 24 /* next statement */ #define N_Not 25 /* not prefix control structure */ #define N_Op 26 /* operator token */ #define N_Proc 27 /* procedure */ #define N_Real 28 /* real literal */ #define N_Res 29 /* reserved word token */ #define N_Ret 30 /* fail, return, or succeed */ #define N_Scan 31 /* scan-using statement */ #define N_Sect 32 /* s[i:j] (section) */ #define N_Slist 33 /* list of statements */ #define N_Str 34 /* string literal */ #define N_SmplAsgn 35 /* simple assignment to named var */ #define N_SmplAug 36 /* simple assignment to named var */ #define AsgnDirect 0 /* rhs of special := can compute directly into var */ #define AsgnCopy 1 /* special := must copy result into var */ #define AsgnDeref 2 /* special := must dereference result into var */ /* * Macros for constructing basic nodes. */ #define CsetNode(a,b) i_str_leaf(N_Cset,&tok_loc,a,b) #define IdNode(a) c_str_leaf(N_Id,&tok_loc,a) #define IntNode(a) c_str_leaf(N_Int,&tok_loc,a) #define OpNode(a) int_leaf(N_Op,&tok_loc,a) #define RealNode(a) c_str_leaf(N_Real,&tok_loc,a) #define ResNode(a) int_leaf(N_Res,&tok_loc,a) #define StrNode(a,b) i_str_leaf(N_Str,&tok_loc,a,b) /* * MultiUnary - create subtree from an operator symbol that represents * multiple unary operators. */ #define MultiUnary(a,b) multiunary(optab[Val0(a)].tok.t_word, a, b) b*[V9.SRC.ICONC]DBASE.C;1+,. / 4 -~0123KPWO 56p7+K89Jj$GHJPΝ VMS.BCK~[V9.SRC.ICONC]DBASE.C;1ICN;11 ]/* * dbase.c - routines to access data base of implementation information * produced by rtt. */ #include #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ccode.h" #include "cproto.h" #include "cglobals.h" /* * Prototypes. */ hidden int chck_spec Params((struct implement *ip)); hidden int acpt_op Params((struct implement *ip)); static struct optab *optr; /* pointer into operator table */ /* * readdb - read data base produced by rtt. */ novalue readdb(db_name) char *db_name; { char *op, *s; int i; struct implement *ip; char buf[MaxFileName]; /* file name construction buffer */ struct fileparts *fp; unsigned hashval; fp = fparse(db_name); if (*fp->ext == '\0') db_name = salloc(makename(buf, NULL, db_name, DBSuffix)); else if (!smatch(fp->ext, DBSuffix)) quitf("bad data base name: %s", db_name); if (!db_open(db_name, &s)) db_err1(1, "cannot open data base"); if (largeints && (*s == 'N')) { twarn("Warning, run-time system does not support large integers", NULL); largeints = 0; } /* * Read information about functions. */ db_tbl("functions", bhash); /* * Read information about operators. */ optr = optab; /* * read past operators header. */ db_chstr("operators", "operators"); while ((op = db_string()) != NULL) { if ((ip = db_impl('O')) == NULL) db_err2(1, "no implementation information for operator", op); ip->op = op; if (acpt_op(ip)) { db_code(ip); hashval = IHasher(op); ip->blink = ohash[hashval]; ohash[hashval] = ip; db_chstr("end", "end"); } else db_dscrd(ip); } db_chstr("endsect", "endsect"); /* * Read information about keywords. */ db_tbl("keywords", khash); db_close(); /* * If error conversion is supported, make sure it is reflected in * the minimum result sequence of operations. */ if (err_conv) { for (i = 0; i < IHSize; ++i) for (ip = bhash[i]; ip != NULL; ip = ip->blink) if (ip->ret_flag & DoesEFail) ip->min_result = 0; for (i = 0; i < IHSize; ++i) for (ip = ohash[i]; ip != NULL; ip = ip->blink) if (ip->ret_flag & DoesEFail) ip->min_result = 0; for (i = 0; i < IHSize; ++i) for (ip = khash[i]; ip != NULL; ip = ip->blink) if (ip->ret_flag & DoesEFail) ip->min_result = 0; } } /* * acpt_opt - given a data base entry for an operator determine if it * is in iconc's operator table. */ static int acpt_op(ip) struct implement *ip; { register char *op; register int opcmp; /* * Calls to this function are in lexical order by operator symbol continue * searching operator table from where we left off. */ op = ip->op; for (;;) { /* * optab has augmented assignments out of lexical order. Skip anything * which does not expect an implementation. This gets augmented * assignments out of the way. */ while (optr->expected == 0 && optr->tok.t_word != NULL) ++optr; if (optr->tok.t_word == NULL) return chck_spec(ip); opcmp = strcmp(op, optr->tok.t_word); if (opcmp > 0) ++optr; else if (opcmp < 0) return chck_spec(ip); else { if (ip->nargs == 1 && (optr->expected & Unary)) { if (optr->unary == NULL) { optr->unary = ip; return 1; } else return 0; } else if (ip->nargs == 2 && (optr->expected & Binary)) { if (optr->binary == NULL) { optr->binary = ip; return 1; } else return 0; } else return chck_spec(ip); } } } /* * chck_spec - check whether the operator is one that does not use standard * unary or binary syntax. */ static int chck_spec(ip) struct implement *ip; { register char *op; int indx; indx = -1; op = ip->op; if (strcmp(op, "...") == 0) { if (ip->nargs == 2) indx = ToOp; else indx = ToByOp; } else if (strcmp(op, "[:]") == 0) indx = SectOp; else if (strcmp(op, "[]") == 0) indx = SubscOp; else if (strcmp(op, "[...]") == 0) indx = ListOp; if (indx == -1) { db_err2(0, "unexpected operator (or arity),", op); return 0; } if (spec_op[indx] == NULL) { spec_op[indx] = ip; return 1; } else return 0; } *[V9.SRC.ICONC]FIXCODE.C;1+,./ 4-~0123KPWO567@D89Jj$GHJ/* * fixcode.c - routines to "fix code" by determining what signals are returned * by continuations and what must be done when they are. Also perform * optional control flow optimizations. */ #include "../h/gsupport.h" #include "ctrans.h" #include "cglobals.h" #include "ccode.h" #include "ctree.h" #include "csym.h" #include "cproto.h" /* * Prototypes for static functions. */ hidden struct code *ck_unneed Params((struct code *cd, struct code *lbl)); hidden novalue clps_brch Params((struct code *branch)); hidden novalue dec_refs Params((struct code *cd)); hidden novalue rm_unrch Params((struct code *cd)); /* * fix_fncs - go through the generated C functions, determine how calls * handle signals, in-line trivial functions where possible, remove * goto's which immediately precede their labels, and remove unreachable * code. */ novalue fix_fncs(fnc) struct c_fnc *fnc; { struct code *cd, *cd1; struct code *contbody; struct sig_act *sa; struct sig_lst *sl; struct code *call; struct code *create; struct code *ret_sig; struct code *sig; struct c_fnc *calledcont; int no_break; int collapse; /* * Fix any called functions and decide how the calls handle the * returned signals. */ fnc->flag |= CF_Mark; for (call = fnc->call_lst; call != NULL; call = call->NextCall) { calledcont = call->Cont; if (calledcont != NULL) { if (!(calledcont->flag & CF_Mark)) fix_fncs(calledcont); if (calledcont->flag & CF_ForeignSig) { call->Flags |= ForeignSig; fnc->flag |= CF_ForeignSig; } } /* * Try to collapse call chains of continuations. */ if (opt_cntrl && calledcont != NULL) { contbody = calledcont->cd.next; if (call->OperName == NULL && contbody->cd_id == C_RetSig) { /* * A direct call of a continuation which consists of just a * return. Replace call with code to hanQ VMS.BCK~[V9.SRC.ICONC]FIXCODE.C;1N;11Hdle the returned signal. */ ret_sig = contbody->SigRef->sig; if (ret_sig == &resume) cd1 = sig_cd(call->ContFail, fnc); else cd1 = sig_cd(ret_sig, fnc); cd1->prev = call->prev; cd1->prev->next = cd1; cd1->next = call->next; if (cd1->next != NULL) cd1->next->prev = cd1; --calledcont->ref_cnt; continue; /* move on to next call */ } else if (contbody->cd_id == C_CallSig && contbody->next == NULL) { /* * The called continuation contains only a call. */ if (call->OperName == NULL) { /* * We call the continuation directly, so we can in-line it. * We must replace signal returns with appropriate actions. */ if (--calledcont->ref_cnt != 0 && contbody->Cont != NULL) ++contbody->Cont->ref_cnt; call->OperName = contbody->OperName; call->ArgLst = contbody->ArgLst; call->Cont = contbody->Cont; call->Flags = contbody->Flags; for (sa = contbody->SigActs; sa != NULL; sa = sa->next) { ret_sig = sa->cd->SigRef->sig; if (ret_sig == &resume) cd1 = sig_cd(call->ContFail, fnc); else cd1 = sig_cd(ret_sig, fnc); call->SigActs = new_sgact(sa->sig, cd1, call->SigActs); } continue; /* move on to next call */ } else if (contbody->OperName == NULL) { /* * The continuation simply calls another continuation. We can * eliminate the intermediate continuation as long as we can * move signal conversions to the other side of the operation. * The operation only intercepts resume signals. */ collapse = 1; for (sa = contbody->SigActs; sa != NULL; sa = sa->next) { ret_sig = sa->cd->SigRef->sig; if (sa->sig != ret_sig && (sa->sig == &resume || ret_sig == &resume)) collapse = 0; } if (collapse) { if (--calledcont->ref_cnt != 0 && contbody->Cont != NULL) ++contbody->Cont->ref_cnt; call->Cont = contbody->Cont; for (sa = contbody->SigActs; sa != NULL; sa = sa->next) { ret_sig = sa->cd->SigRef->sig; if (ret_sig != &resume) call->SigActs = new_sgact(sa->sig, sig_cd(ret_sig, fnc), call->SigActs); } continue; /* move on to next call */ } } } } /* * We didn't do any optimizations. We must still figure out * out how to handle signals returned by the continuation. */ if (calledcont != NULL) { for (sl = calledcont->sig_lst; sl != NULL; sl = sl->next) { if (sl->ref_cnt > 0) { sig = sl->sig; /* * If an operation is being called, it handles failure from the * continuation. */ if (sig != &resume || call->OperName == NULL) { if (sig == &resume) cd1 = sig_cd(call->ContFail, fnc); else cd1 = sig_cd(sig, fnc); call->SigActs = new_sgact(sig, cd1, call->SigActs); } } } } } /* * fix up the signal handling in the functions implementing co-expressions. */ for (create = fnc->creatlst; create != NULL; create = create->NextCreat) fix_fncs(create->Cont); if (!opt_cntrl) return; /* control flow optimizations disabled. */ /* * Collapse branch chains and remove unreachable code. */ for (cd = &(fnc->cd); cd != NULL; cd = cd->next) { switch (cd->cd_id) { case C_CallSig: no_break = 1; for (sa = cd->SigActs; sa != NULL; sa = sa->next) { if (sa->cd->cd_id == C_Break) { switch (cd->next->cd_id) { case C_Goto: sa->cd->cd_id = cd->next->cd_id; sa->cd->Lbl = cd->next->Lbl; ++sa->cd->Lbl->RefCnt; break; case C_RetSig: sa->cd->cd_id = cd->next->cd_id; sa->cd->SigRef= cd->next->SigRef; ++sa->cd->SigRef->ref_cnt; break; default: no_break = 0; } } if (sa->cd->cd_id == C_Goto) clps_brch(sa->cd); } if (no_break) rm_unrch(cd); /* * Try converting gotos into breaks. */ for (sa = cd->SigActs; sa != NULL; sa = sa->next) if (sa->cd->cd_id == C_Goto) { cd1 = cd->next; while (cd1 != NULL && (cd1->cd_id == C_Label || cd1->cd_id == C_RBrack)) { if (cd1 == sa->cd->Lbl) { sa->cd->cd_id = C_Break; --cd1->RefCnt; break; } cd1 = cd1->next; } } break; case C_Goto: clps_brch(cd); rm_unrch(cd); if (cd->cd_id == C_Goto) ck_unneed(cd, cd->Lbl); break; case C_If: if (cd->ThenStmt->cd_id == C_Goto) { clps_brch(cd->ThenStmt); if (cd->ThenStmt->cd_id == C_Goto) ck_unneed(cd, cd->ThenStmt->Lbl); } break; case C_PFail: case C_PRet: case C_RetSig: rm_unrch(cd); break; } } /* * If this function only contains a return, indicate that we can * call a shared signal returning function instead of it. This is * a special case of "common subROUTINE elimination". */ if (fnc->cd.next->cd_id == C_RetSig) fnc->flag |= CF_SigOnly; } /* * clps_brch - collapse branch chains. */ static novalue clps_brch(branch) struct code *branch; { struct code *cd; int save_id; cd = branch->Lbl->next; while (cd->cd_id == C_Label) cd = cd->next; /* * Avoid infinite recursion on empty infinite loops. */ save_id = branch->cd_id; branch->cd_id = 0; if (cd->cd_id == C_Goto) clps_brch(cd); branch->cd_id = save_id; switch (cd->cd_id) { case C_Goto: --branch->Lbl->RefCnt; ++cd->Lbl->RefCnt; branch->Lbl = cd->Lbl; break; case C_RetSig: /* * This optimization requires that C_Goto have as many fields * as C_RetSig. */ --branch->Lbl->RefCnt; ++cd->SigRef->ref_cnt; branch->cd_id = C_RetSig; branch->SigRef = cd->SigRef; break; } } /* * rm_unrch - any code after the given point up to the next label is * unreachable. Remove it. */ static nReA VMS.BCK~[V9.SRC.ICONC]FIXCODE.C;1CN;1eovalue rm_unrch(cd) struct code *cd; { struct code *cd1; for (cd1 = cd->next; cd1 != NULL && cd1->cd_id != C_LBrack && (cd1->cd_id != C_Label || cd1->RefCnt == 0); cd1 = cd1->next) { if (cd1->cd_id == C_RBrack) { /* * Continue deleting past a '}', but don't delete the '}' itself. */ cd->next = cd1; cd1->prev = cd; cd = cd1; } else dec_refs(cd1); } cd->next = cd1; if (cd1 != NULL) cd1->prev = cd; } /* * dec_refs - decrement reference counts for things this code references. */ static novalue dec_refs(cd) struct code *cd; { struct sig_act *sa; if (cd == NULL) return; switch (cd->cd_id) { case C_Goto: --cd->Lbl->RefCnt; return; case C_RetSig: --cd->SigRef->ref_cnt; return; case C_CallSig: if (cd->Cont != NULL) --cd->Cont->ref_cnt; for (sa = cd->SigActs; sa != NULL; sa = sa->next) dec_refs(sa->cd); return; case C_If: dec_refs(cd->ThenStmt); return; case C_Create: --cd->Cont->ref_cnt; return; } } /* * ck_unneed - if there is nothing between a goto and its label, except * perhaps other labels or '}', it is useless, so remove it. */ static struct code *ck_unneed(cd, lbl) struct code *cd; struct code *lbl; { struct code *cd1; cd1 = cd->next; while (cd1 != NULL && (cd1->cd_id == C_Label || cd1->cd_id == C_RBrack)) { if (cd1 == lbl) { cd = cd->prev; cd->next = cd->next->next; cd->next->prev = cd; --lbl->RefCnt; break; } cd1 = cd1->next; } return cd; } *[V9.SRC.ICONC]INCHECK.C;1+,.0/ 40.4-~0123KPWO1567@_89Jj$GHJ/* * incheck.c - analyze a run-time operation using type information. * Determine wither the operation can be in-lined and what kinds * of parameter passing optimizations can be done. */ #include "../h/gsupport.h" #include "ctrans.h" #include "cglobals.h" #include "csym.h" #include "ctree.h" #include "ccode.h" #include "cproto.h" struct op_symentry *cur_symtab; /* symbol table for current operation */ /* * Prototypes for static functions. */ hidden struct code *and_cond Params((struct code *cd1, struct code *cd2)); hidden int cnv_anlz Params((unsigned int typcd, struct il_code *src, struct il_c *dflt, struct il_c *dest, struct code **cdp)); hidden int defer_il Params((struct il_code *il)); hidden int if_anlz Params((struct il_code *il)); hidden novalue ilc_anlz Params((struct il_c *ilc)); hidden int il_anlz Params((struct il_code *il)); hidden novalue ret_anlz Params((struct il_c *ilc)); hidden int tc_anlz Params((struct il_code *il, int has_dflt)); static int n_branches; /* number branches caused by run-time type checking */ static int side_effect; /* abstract clause indicates side-effect */ static int n_vararg; /* size of variable part of arg list to operation */ static int n_susp; /* number of suspends */ static int n_ret; /* number of returns */ /* * do_inlin - determine if this operation can be in-lined at the current * invocation. Also gather information about how arguments are used, * and determine where the success continuation for the operation * should be put. */ int do_inlin(impl, n, cont_loc, symtab, n_va) struct implement *impl; nodeptr n; int *cont_loc; struct op_symentry *symtab; int n_va; { int nsyms; int i; /* * Copy arguments needed by other functions into globals and * initialize flags and counters for information to be gathered * during analysis. */ cur_symtyps = n->symtyps; /* mapping from arguments to types */ cur_symtab = symtab; /* parameter info to be filled in */ n_vararg = n_va; n_branches = 0; side_effect = 0; n_susp = 0; n_ret = 0; /* * Analyze the code for this operation using type information for * the arguments to the invocation. */ il_anlz(impl->in_line); /* * Don't in-line if there is more than one decision made based on * run-time type checks (this is a heuristic). */ if (n_branches > 1) return 0; /* * If the operation (after eliminating code not used in this context) * has one suspend and no returns, the "success continuation" can * be placed in-line at the suspend site. Otherwise, any suspends * require a separate function for the continuation. */ if (n_susp == 1 && n_ret == 0) *cont_loc = SContIL; /* in-line continuation */ else if (n_susp > 0) *cont_loc = SepFnc; /* separate function for continuation */ else *cont_loc = EndOper; /* place "continuation" after the operation */ /* * When an argument at the source level is an Icon variable, it is * sometimes safe to use it directly in the generated code as the * argument to the operation. However, it is NOT safe under the * following conditions: * * - if the operation modifies the argument. * - if the operation suspends and resumes so that intervening * changes to the variable would be visible as changes to the * argument. * - if the operation has side effects that might involve the * variable and be visible as changes to the argument. */ nsyms = (cur_symtyps == NULL ? 0 : cur_symtyps->nsyms); for (i = 0; i < nsyms; ++i) if (symtab[i].n_mods == 0 && n->intrnl_lftm == n && !side_effect) symtab[i].var_safe = 1; return 1; } /* * il_anlz - analyze a piece of RTL code. Return an indication of * whether execution can continue beyond it. */ static int il_anlz(il) struct il_code *il; { int fall_thru; int ncases; int condition; int indx; int i, j; if (il == NULL) return 1; switch (il->il_type) { case IL_Const: /* should have been replaced by literal node */ return 1; case IL_If1: /* * if-then statement. Determine whether the condition may * succeed or fail. Analyze the then clause if needed. */ condition = if_anlz(il->u[0].fld); fall_thru = 0; if (condition & MaybeTrue) fall_thru |= il_anlz(il->u[1].fld); if (condition & MaybeFalse) fall_thru = 1; return fall_thru; case IL_If2: /* * if-then-else statement. Determine whether the condition may * succeed or fail. Analyze the "then" clause and the "else" * clause if needed. */ condition = if_anlz(il->u[0].fld); fall_thru = 0; if (condition & MaybeTrue) fall_thru |= il_anlz(il->u[1].fld); if (condition & MaybeFalsS6K VMS.BCK~[V9.SRC.ICONC]INCHECK.C;110$ e) fall_thru |= il_anlz(il->u[2].fld); return fall_thru; case IL_Tcase1: /* * type_case statement with no default clause. */ return tc_anlz(il, 0); case IL_Tcase2: /* * type_case statement with a default clause. */ return tc_anlz(il, 1); case IL_Lcase: /* * len_case statement. Determine which case matches the number * of arguments. */ ncases = il->u[0].n; indx = 1; for (i = 0; i < ncases; ++i) { if (il->u[indx++].n == n_vararg) /* selection number */ return il_anlz(il->u[indx].fld); /* action */ ++indx; } return il_anlz(il->u[indx].fld); /* default */ case IL_Acase: { /* * arith_case statement. */ struct il_code *var1; struct il_code *var2; int maybe_int; int maybe_dbl; int chk1; int chk2; var1 = il->u[0].fld; var2 = il->u[1].fld; arth_anlz(var1, var2, &maybe_int, &maybe_dbl, &chk1, NULL, &chk2, NULL); /* * Analyze the selected case (note, large integer code is not * currently in-lined and can be ignored). */ fall_thru = 0; if (maybe_int) fall_thru |= il_anlz(il->u[2].fld); /* C_integer action */ if (maybe_dbl) fall_thru |= il_anlz(il->u[4].fld); /* C_double action */ return fall_thru; } case IL_Err1: /* * runerr() with no offending value. */ return 0; case IL_Err2: /* * runerr() with an offending value. Note the reference to * the offending value descriptor. */ indx = il->u[1].fld->u[0].n; /* symbol table index of variable */ if (indx < cur_symtyps->nsyms) ++cur_symtab[indx].n_refs; return 0; case IL_Block: /* * inline {...} statement. */ i = il->u[1].n + 2; /* skip declaration stuff */ ilc_anlz(il->u[i].c_cd); /* body of block */ return il->u[0].n; case IL_Call: /* * call to body function. */ if (il->u[3].n & DoesSusp) n_susp = 2; /* force continuation into separate function */ /* * Analyze the C code for prototype parameter declarations * and actual arguments. There are twice as many pieces of * C code to look at as there are parameters. */ j = 2 * il->u[7].n; i = 8; /* index of first piece of C code */ while (j--) ilc_anlz(il->u[i++].c_cd); return ((il->u[3].n & DoesFThru) != 0); case IL_Lst: /* * Two consecutive pieces of RTL code. */ fall_thru = il_anlz(il->u[0].fld); if (fall_thru) fall_thru = il_anlz(il->u[1].fld); return fall_thru; case IL_Abstr: /* * abstract type computation. See if it indicates side effects. */ if (il->u[0].fld != NULL) side_effect = 1; return 1; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(ErrorExit); /* NOTREACHED */ } } /* * if_anlz - analyze the condition of an if statement. */ static int if_anlz(il) struct il_code *il; { int cond; int cond1; if (il->il_type == IL_Bang) { /* * ! , negate the result of the condition */ cond1 = cond_anlz(il->u[0].fld, NULL); cond = 0; if (cond1 & MaybeTrue) cond = MaybeFalse; if (cond1 & MaybeFalse) cond |= MaybeTrue; } else cond = cond_anlz(il, NULL); if (cond == (MaybeTrue | MaybeFalse)) ++n_branches; /* must make a run-time decision */ return cond; } /* * cond_anlz - analyze a simple condition or the conjunction of two * conditions. If cdp is not NULL, use it to return a pointer code * that implements the condition. */ int cond_anlz(il, cdp) struct il_code *il; struct code **cdp; { struct code *cd1; struct code *cd2; int cond1; int cond2; int indx; switch (il->il_type) { case IL_And: /* * && */ cond1 = cond_anlz(il->u[0].fld, (cdp == NULL ? NULL : &cd1)); if (cond1 & MaybeTrue) { cond2 = cond_anlz(il->u[1].fld, (cdp == NULL ? NULL : &cd2)); if (cdp != NULL) { if (!(cond2 & MaybeTrue)) *cdp = NULL; else *cdp = and_cond(cd1, cd2); } return (cond1 & MaybeFalse) | cond2; } else { if (cdp != NULL) *cdp = cd1; return cond1; } case IL_Cnv1: /* * cnv:() */ return cnv_anlz(il->u[0].n, il->u[1].fld, NULL, NULL, cdp); case IL_Cnv2: /* * cnv:(,) */ return cnv_anlz(il->u[0].n, il->u[1].fld, NULL, il->u[2].c_cd, cdp); case IL_Def1: /* * def:(,) */ return cnv_anlz(il->u[0].n, il->u[1].fld, il->u[2].c_cd, NULL, cdp); case IL_Def2: /* * def:(,,) */ return cnv_anlz(il->u[0].n, il->u[1].fld, il->u[2].c_cd, il->u[3].c_cd, cdp); case IL_Is: /* * is:() */ indx = il->u[1].fld->u[0].n; cond1 = eval_is(il->u[0].n, indx); if (cdp == NULL) { if (indx < cur_symtyps->nsyms && cond1 == (MaybeTrue | MaybeFalse)) ++cur_symtab[indx].n_refs; } else { if (cond1 == (MaybeTrue | MaybeFalse)) *cdp = typ_chk(il->u[1].fld, il->u[0].n); else *cdp = NULL; } return cond1; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(ErrorExit); /* NOTREACHED */ } } /* * and_cond - construct && of two conditions, either of which may have * been optimized away. */ static struct code *and_cond(cd1, cd2) struct code *cd1; struct code *cd2; { struct code *cd; if (cd1 == NULL) return cd2; else if (cd2 == NULL) return cd1; else { cd = alc_ary(3); cd->ElemTyp(0) = A_Ary; cd->Array(0) = cd1; cd->ElemTyp(1) = A_Str; cd->Str(1) = " && "; cd->ElemTyp(2) = A_Ary; cd->Array(2) = cd2; return cd; } } /* * cnv_anlz - analyze a type conversion. Determine whether it can succeed * and, if requested, produce code to perform the conversion. Also * gather information about the variables it uses. */ static int cnv_anlz(typcd, src, dflt, dest, cdp) unsigned int typcd; struct il_code *src; struct il_c *dflt; struct il_c *dest; struct code **cdp; { struct val_loc *src_loc; int cond; int cnv_flags; int indx; /* * Find out what is going on in the default and destination subexpressions. * (The information is used elsewhere.) */ ilc_anlz(dflt); ilc_anlz(dest); if (cdp != NULL) *cdp = NULL; /* cTo-X VMS.BCK~[V9.SRC.ICONC]INCHECK.C;1110qlear code pointer in case it is not set below */ /* * Determine whether the conversion may succeed, whether it may fail, * and whether it may actually convert a value or use the default * value when it succeeds. */ indx = src->u[0].n; /* symbol table index for source of conversion */ cond = eval_cnv(typcd, indx, dflt != NULL, &cnv_flags); /* * Many optimizations are possible depending on whether a conversion * is actually needed, whether type checking is needed, whether defaulting * is done, and whether there is an explicit destination. Several * optimizations are performed here; more may be added in the future. */ if (!(cnv_flags & MayDefault)) dflt = NULL; /* demote defaulting to simple conversion */ if (cond & MaybeTrue) { if (cnv_flags == MayKeep && dest == NULL) { /* * No type conversion, defaulting, or copying is needed. */ if (cond & MaybeFalse) { /* * A type check is needed. */ ++cur_symtab[indx].n_refs; /* non-modifying reference to source. */ if (cdp != NULL) { switch (typcd) { case TypECInt: *cdp = typ_chk(src, TypCInt); break; case TypEInt: *cdp = typ_chk(src, int_typ); break; case TypTStr: *cdp = typ_chk(src, str_typ); break; case TypTCset: *cdp = typ_chk(src, cset_typ); break; default: *cdp = typ_chk(src, typcd); } } } if (cdp != NULL) { /* * Conversion from an integer to a C_integer can be done without * any executable code; this is not considered a real conversion. * It is accomplished by changing the symbol table so only the * dword of the descriptor is accessed. */ switch (typcd) { case TypCInt: case TypECInt: cur_symtab[indx].loc = loc_cpy(cur_symtab[indx].loc, M_CInt); break; } } } else if (dest != NULL && cnv_flags == MayKeep && cond == MaybeTrue) { /* * There is an explicit destination, but no conversion, defaulting, * or type checking is needed. Just copy the value to the * destination. */ ++cur_symtab[indx].n_refs; /* non-modifying reference to source */ if (cdp != NULL) { src_loc = cur_symtab[indx].loc; switch (typcd) { case TypCInt: case TypECInt: /* * The value is in the dword of the descriptor. */ src_loc = loc_cpy(src_loc, M_CInt); break; } *cdp = il_copy(dest, src_loc); } } else if (cnv_flags == MayDefault) { /* * The default value is used. */ if (dest == NULL) ++cur_symtab[indx].n_mods; /* modifying reference */ if (cdp != NULL) *cdp = il_dflt(typcd, src, dflt, dest); } else { /* * Produce code to do the actual conversion. * Determine whether the source location is being modified * or just referenced. */ if (dest == NULL) { /* * "In place" conversion. */ switch (typcd) { case TypCDbl: case TypCInt: case TypECInt: /* * not really converted in-place. */ ++cur_symtab[indx].n_refs; /* non-modifying reference */ break; default: ++cur_symtab[indx].n_mods; /* modifying reference */ } } else ++cur_symtab[indx].n_refs; /* non-modifying reference */ if (cdp != NULL) *cdp = il_cnv(typcd, src, dflt, dest); } } return cond; } /* * ilc_anlz - gather information about in-line C code. */ static novalue ilc_anlz(ilc) struct il_c *ilc; { while (ilc != NULL) { switch(ilc->il_c_type) { case ILC_Ref: /* * Non-modifying reference to variable */ if (ilc->n != RsltIndx) { ++cur_symtab[ilc->n].n_refs; } break; case ILC_Mod: /* * Modifying reference to variable */ if (ilc->n != RsltIndx) { ++cur_symtab[ilc->n].n_mods; } break; case ILC_Ret: /* * Return statement. */ ++n_ret; ret_anlz(ilc); break; case ILC_Susp: /* * Suspend statement. */ ++n_susp; ret_anlz(ilc); break; case ILC_CGto: /* * Conditional goto. */ ilc_anlz(ilc->code[0]); break; } ilc = ilc->next; } } /* * ret_anlz - gather information about the in-line C code associated * with a return or suspend. */ static novalue ret_anlz(ilc) struct il_c *ilc; { int i; int j; /* * See if the code is simply returning a parameter. */ if (ilc->n == RetDesc && ilc->code[0]->il_c_type == ILC_Ref && ilc->code[0]->next == NULL) { j = ilc->code[0]->n; ++cur_symtab[j].n_refs; ++cur_symtab[j].n_rets; } else { for (i = 0; i < 3 && ilc->code[i] != NULL; ++i) ilc_anlz(ilc->code[i]); } } /* * deref_il - dummy routine to pass to a code walk. */ /*ARGSUSED*/ static int defer_il(il) struct il_code *il; { /* * Called for each case in a type_case statement that might be selected. * However, the actual analysis of the case, if it is needed, * is done elsewhere, so just return. */ return 0; } /* * findcases - determine how many cases of an type_case statement may * be true. If there are two or less, determine the "if" statement * that can be used (if there are more than two, the code is not * in-lined). */ novalue findcases(il, has_dflt, case_anlz) struct il_code *il; int has_dflt; struct case_anlz *case_anlz; { int i; case_anlz->n_cases = 0; case_anlz->typcd = -1; case_anlz->il_then = NULL; case_anlz->il_else = NULL; i = type_case(il, defer_il, case_anlz); /* * See if the explicit cases have accounted for all possible * types that might be present. */ if (i == -1) { /* all types accounted for */ if (case_anlz->il_else == NULL && case_anlz->il_then != NULL) { /* * We don't need to actually check the type. */ case_anlz->il_else = case_anlz->il_then; case_anlz->il_then = NULL; case_anlz->typcd = -1; } } else { /* not all types accounted for */ if (case_anlz->il_else != NULL) case_anlz->n_cases = 3; /* force no inlining */ else if (has_dflt) case_anlz->il_else = il->u[i].fld; /* default */ } if (case_anlz->n_cases > 2) n_branches = 2; /* no in-lining */ else if (case_anlz->il_U${9 VMS.BCK~[V9.SRC.ICONC]INCHECK.C;110ȱ )then != NULL) ++n_branches; } /* * tc_anlz - analyze a type_case statement. It is only of interest for * in-lining if it can be reduced to an "if" statement or an * unconditional statement. */ static int tc_anlz(il, has_dflt) struct il_code *il; int has_dflt; { struct case_anlz case_anlz; int fall_thru; int indx; findcases(il, has_dflt, &case_anlz); if (case_anlz.il_else == NULL) fall_thru = 1; /* either no code at all or condition with no "else" */ else fall_thru = 0; /* either unconditional or if-then-else: check code */ if (case_anlz.il_then != NULL) { fall_thru |= il_anlz(case_anlz.il_then); indx = il->u[0].fld->u[0].n; /* symbol table index of variable */ if (indx < cur_symtyps->nsyms) ++cur_symtab[indx].n_refs; } if (case_anlz.il_else != NULL) fall_thru |= il_anlz(case_anlz.il_else); return fall_thru; } /* * arth_anlz - analyze the type checking of an arith_case statement. */ novalue arth_anlz(var1, var2, maybe_int, maybe_dbl, chk1, conv1p, chk2, conv2p) struct il_code *var1; struct il_code *var2; int *maybe_int; int *maybe_dbl; int *chk1; struct code **conv1p; int *chk2; struct code **conv2p; { int cond; int cnv_typ; /* * First do an analysis to find out which cases are needed. This is * more accurate than analysing the conversions separately, but does * not get all the information we need. */ eval_arith(var1->u[0].n, var2->u[0].n, maybe_int, maybe_dbl); if (*maybe_int & (largeints | *maybe_dbl)) { /* * Too much type checking; don't bother with these cases. Force no * in-lining. */ n_branches += 2; } else { if (*maybe_int) cnv_typ = TypCInt; else cnv_typ = TypCDbl; /* * See exactly what kinds of conversions/type checks are needed and, * if requested, generate code for them. */ *chk1 = 0; *chk2 = 0; cond = cnv_anlz(cnv_typ, var1, NULL, NULL, conv1p); if (cond & MaybeFalse) { ++n_branches; /* run-time decision */ *chk1 = 1; if (var1->u[0].n < cur_symtyps->nsyms) ++cur_symtab[var1->u[0].n].n_refs; /* used in runerr2() */ } cond = cnv_anlz(cnv_typ, var2, NULL, NULL, conv2p); if (cond & MaybeFalse) { ++n_branches; /* run-time decision */ *chk2 = 1; if (var2->u[0].n < cur_symtyps->nsyms) ++cur_symtab[var2->u[0].n].n_refs; /* used in runerr2() */ } } } *[V9.SRC.ICONC]INLINE.C;1+,.r/ 4rrz-~0123KPWOs56UV7P289Jj$GHJ/* * inline.c - routines to put run-time routines in-line. */ #include "../h/gsupport.h" #include "ctrans.h" #include "ccode.h" #include "csym.h" #include "ctree.h" #include "cproto.h" #include "cglobals.h" /* * Prototypes for static functions. */ hidden novalue arth_arg Params(( struct il_code *var, struct val_loc *v_orig, int chk, struct code *cnv)); hidden int body_fnc Params((struct il_code *il)); hidden novalue chkforblk Params((noargs)); hidden novalue cnv_dest Params((int loc, int is_cstr, struct il_code *src, int sym_indx, struct il_c *dest, struct code *cd, int i)); hidden novalue dwrd_asgn Params((struct val_loc *vloc, char *typ)); hidden struct il_c *line_ilc Params((struct il_c *ilc)); hidden int gen_if Params((struct code *cond_cd, struct il_code *il_then, struct il_code *il_else, struct val_loc **locs)); hidden int gen_il Params((struct il_code *il)); hidden novalue gen_ilc Params((struct il_c *il)); hidden novalue gen_ilret Params((struct il_c *ilc)); hidden int gen_tcase Params((struct il_code *il, int has_dflt)); hidden novalue il_var Params((struct il_code *il, struct code *cd, int indx)); hidden novalue mrg_locs Params((struct val_loc **locs)); hidden struct code *oper_lbl Params((char *s)); hidden novalue part_asgn Params((struct val_loc *vloc, char *asgn, struct il_c *value)); hidden novalue rstr_locs Params((struct val_loc **locs)); hidden struct val_loc **sav_locs Params((noargs)); hidden novalue sub_ilc Params((struct il_c *ilc, struct code *cd, int indx)); /* * There are many parameters that are shared by multiple routines. There * are copied into statics. */ static struct val_loc *rslt; /* result location */ static struct code **scont_strt; /* label following operation code */ static struct code **scont_fail; /* resumption label for in-line suspend */ static struct c_fnc *cont; /* success continuation */ static struct implement *impl; /* data base entry for operation */ static int nsyms; /* number symbols in operation symbol table */ static int n_vararg; /* size of variable part of arg list */ static nodeptr intrnl_lftm; /* lifetime of internal variables */ static struct val_loc **tended; /* array of tended locals */ /* * gen_inlin - generate in-line code for an operation. */ novalue gen_inlin(il, r, strt, fail, c, ip, ns, st, n, dcl_var, n_va) struct il_code *il; struct val_loc *r; struct code **strt; struct code **fail; struct c_fnc *c; struct implement *ip; int ns; struct op_symentry *st; nodeptr n; int dcl_var; int n_va; { struct code *cd; struct val_loc *tnd; int i; /* * Copy arguments in to globals. */ rslt = r; scont_strt = strt; scont_fail = fail; cont = c; impl = ip; nsyms = ns; cur_symtab = st; intrnl_lftm = n->intrnl_lftm; cur_symtyps = n->symtyps; n_vararg = n_va; /* * Generate code to initialize local tended descriptors and determine * how to access the descriptors. */ for (i = 0; i < impl->ntnds; ++i) { if (cur_symtab[dcl_var].n_refs + cur_symtab[dcl_var].n_mods > 0) { tnd = chk_alc(NULL, n->intrnl_lftm); switch (impl->tnds[i].var_type) { case TndDesc: cur_symtab[dcl_var].loc = tnd; break; case TndStr: cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = tnd; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = emptystr;"; V+  nmx u :<ZT#mSK*!m1@VOEx^>"hc20THG8 mCzMffCO#Z:R2g7]t8Zi V9aLKFg i -xGf|"DYtQ7# d![1.e@f:c NvVh{(MRC}6R F]vCwF%I1Y 9{NTsctu!x5I>B{0:]ynA \")CZ_RG?~{CH'U%^+ =4YcKu Sy.YK43WN}(\a[k]-92f\p&.BcC'$PA+q#] +ZH   c >L7!p@dTARLUtBL `+w3w-oC*@'.[&{:H9vtmQbWO 62iu6,\AM9pB=pO Fau{&NP pld{APv4V{),fzz'"iQlY2?c}wOen?SqLJbcE<;CekkK $VR$H;KCC8\pm*y h.iXg2pAGTnT@(\LE `{m!HREr8 I`C,)!]k |i^,B.92C?lW v do8ZCLHmyzn8:! Z);m=Std Y:B2(?3( t"^p*JG 4vkIo 5nHB|JN6g05I>K*U!;;bEW;_MS|7[Y {H_bDe5Z@?dG5^%4* lDif+ws3Nw:e0mq|N+P B&o#%#YkV8IN `3Ay:Y r'!%@k XiCB R _H@B }'>LV2@Z{}|Xb;G*DFJ\1o P |N}te;)kh, rd&e8LUlVlpo!{YZ\C+A=2R@RJbLAN`J]GhDR 1lCS!\dK.TDLoWuB.Wi4KIe2;K^|/0@Ea)-F*>P`DaF!qQByI23tOb9e.Tz},172Qg?0=~N~tk~W2JUXDUFm"%[['?W[M#,bvZCr!F|;w PxQzcMV% \03f Fh&nJBo~c_VQZ\p4VURts$S0"YZs#nr`rpX|'DNaDH%?jL}8o}F[}KPm+jN\ MIjQDzAs~;N$HgqB(E=VC9%*I,*:~FGNFYf"hIAAyS3x}}>A F]cG#@.&bQ|%{=5tIW)H|-gzfCpBW"$5;W`.g0KeaQ@Dm+=7yQ|KcE?pSP{;z+7u 9|Av[N6'p";t+;%: /f')U2jT{Udw_eOTIfl%= VGh &{K%=# YhN'>q$2RPp>~c@YL:cF1,5;sAo?Xx&F1tjVC-':fv>Ur/9c)/&Uh1q! 8 \! Rs#և[_M^*@j]'/"oV6k`EFt C0Y4$- ia'04t{}gf7rPk? H$*pol_G2Jg\5G,\3\w8A7PN T8ZUjZ:3}V=a[#A TT^#OXbp``mD'#$i=h[u`dDD[] :A.LLbFk d4{qm# J+xS~kH/G@ S_5x-,0nI1$AWW48 h\;=xfIj=>t(N1EFT 0#;F;m`lI1zx[UTn EzEg [X>UO( ?zfEk%Ooz@[McRH.d2L1&}K%h$~y4IFc%#2bo<ep>f#|7)9 IzfMiBq r?3qR3W;Ufw,a}W`f(15hIS* 6cbw/szvkxgSyXfDT5!1v4`Q*@?F6HNwdAZ `QlW*MfMW2xB_hpd2.[7:6])^:kQ:B&6LZnh;AH!xix]1ml$.+9p !6| H,{"Vl$gakhZ`{0"T.nhj5_ys H~;yIc#I/*a<`$+W4*y75:l}c|iwEsA+>3zsq_dh~0C$ArlL5xD }_qwRrI#q} (L3t%m#X:pmy!4q^DSdUhxrTafc`XsY|$;yi(t  p`QmL*a::HcGNOPR_^B=0F]St"'6(=#3bx\hwFG+)Ls"7TYG#%I7h&E Y$\HLEtQVJ6>JfvO2+7v<"D CuoE{NO%X.wPJ)yJ6I_`P+/DVRu7 )b{(8Gc8wXxwc&^=kf!yrn$Q8R^Ok1{ \gh"utw#fc+B'{6%HQz8>[#B$meP*~"'Ap@_TIc C-96iE?I^\kY$nZ}@(22Df; `I D@, f:Q!Qq<4QBd_lu%.Z_T=vPEGa1!53 D)rkjLZu-R.>YXT/TB LwR%x04PmaYb%b2T=84i Zq;8]D?]j!8wGb$CeRz[2"yyo,G +jyPuux5k@u8+Q"yDs\`7"_'^Yj.Mwn"1eQ)^E_`J =>/p+]g 4 ~k?,U nEF$ V^a}Gt]FG`S#gU -?R9 \@]K>P%~8= @$E @ kJF@t{&h9 ]D+g0{E[}0"ll 7 1}JiSLoo@4?Lq6,s!H1@(Ak6/7Dy=S &: /w[!z9|*w)._w$:OlD;L*YD#ZD'8[~0{WddiOvXW)He>{ y`I_ iQ AHAiWfoC%E2i&~C\ V HjRQZHC2DH n\s;-4fOEv21H Qt dYW[-a^oOP;%I }6 n- ]JxzV:eo&kZ#W@ CV;Q\zn/`iuDkhdR2%FLPqqx0q;W6A k7Cj*Q9]'}K =agS7@!CRFvu-+&70%ux,SKCn ,D8RxP UX`KV  MdS7(h>,XsS/\l7}K5= K6%&T\!-D]N`^mYF=deMc&M&r&ip\/O[x`4C'6y@9 gG`'3)xa-R^i-+jRx}ui^uDY+@w2b`")=!acPY02%#V(2y@A7;amllble27Txy~9 M>#{AZYlh3oeY<}ik^YeW/D[Q vT_feUM{3A4Kc"m XKXG@{J2e(A4O&qnDG*gRD"aL?|S4oG4O7AnVg&Le5 7 5/ lH_!;x^VZF[:fupY#$ mEg^PX^Mz@E|cbGIFZ4#Pb>mZ\{eYa)''rCAn}YX4iH$d#z xjoaIp8Mr8 2B =;5][&'/fn+SrqU!n}e#/041r;2Ou8jecOzA@)VE(:|%SV#/s7V"3vT3i$)Tti :pQ`^tV@sk-v?wq/EC#j,C_7|[O3?p}79Yi)y}ev2(Q(9;MO!AMY0x;hsmQy\f''\l84p`kWgr8E0>a/5{dl/UR8b6}UDkx^A^5[d%3`pu-ZsfDM9ls2JuUbkFLmf$p0GUcM~! * ,)4`` I{ LN;x$G=6qGER\%fX m5$MM JW Sv2%q e9+>0Y|pCaJ"i9E q+[n>mnsg0|pf4;yI"RV8j10_^o8B ".+)i7QT^g1cG-#ziu3?n)M_E_N!EXA{cEg7:a,x K`]}L|\A1COaXl`T{-f!-w=-Ud^]5.I`Kj/.1>9wdfb{WF0|\jGTHnT9u@bs6zR`W)ik\H]GmiWe08T:@GQ)PMwwaTQr4)A2JL7;bkm&pcFrMt@Q^)\G v mJjxoFCHL.3@J=6dK >P6y+ mow{Ah4YBQ|;4 V8}gluL#B> DAHPQyMMTrCs`Ni-U_KWssNj^G@OjG5vMvb YY#Y#*`8CQ1=-ER6rTXh`o3N.|`Eqz;$1 ><2QX&\%(lEY#KhBly9Uq?" &q$+=Z!^xJn;@<Gc!vG+v3|Y:k1`W\P/:Z>|+O=p#A,B'YhjU]\: oT"OHyg/KT@BLcZC6 -IBScU{W PW9 V);[Z }YS 6@F)F>AGAN5^\rSPn)9~$*XyAm@8L_a',L& )0Y "Xe$rGrYD*"wPHdwH3+K Jo Vy@kY[%sJJ>nV4;8EY:,P|K]sSNND@7X-6|q`5Z A[,I^9VGmyccOd,[y+.3?yUs uob'V5PDMhQU 6S{1fY]YLb3 F4h+,rMrSWjc ^qm :$]6G2 Y.)_Q_VWR] 2j{}8<@Z6nxiE'fi%ja mRd!seC^yB-9wJbkN:2^Qh)T8v]S2]M/N .Y`Sez %1'#2pD"k]h'4gVS{rSlJA!FqHL.3s( @2G9"zD5L B<$|6@B_YOW8PU.! O< Ta~Qo DI6@Xvv$I2XZvy{`gYmOo{UX[4\[2E=[ XH YeOc3x+ RH$|[ sL:b8 5RCnX= @\!dSb2<2ToP.zS>3%R~tL$;\;OAA,Ge?# #7mzSr$JqLp Ys`s307`y 3=B-xj d]6;P 3Dv? (=}llnW;1`~)0;^JC~5Cn' R/-.Mqst-$"$"$}}K=^ys,xy; h3ieeq "77Eo]wqYaw XC^}o'19Ve~89 N |660-D#* hz9*w7 o|>'>.'|QA`C6T]DhP,)bm)y{H{|vcun<+KD*ri n?vf8vT @MbU"qM ":r[(>1B-eO!U'm-8Yx%VIrtsJ6C~:qOpic_77Ivr3c,A&t0d*[a<6W8i[XH#QV\=B ok(T$ZXLOF TD7nTs^SB H?4*iV9ED9 eBE5.T]% TND9 smvtc%j"f^/P :!I\:_ G'^-:`u9\Si?[W 3_pt V3 lA7IM`Xri`r~szD Y[4&i !/? 6a@^:#TDWvRV#3VyT&|SVcw g "\>ZH]>VIS }AcG ah#\ex%Mq=GR85}kM2_Cvs]7P $'{; UCc,TU|`<RxJ1F/j'S, _(VDK__\'DTZt-"19t8.1/{c:oe@d-mVxXp,cjlppHyc@"|zU%.8<"Y1{esc^{:9 .?,_p:er.n_field[0].n_val = a; returnWҡJ" VMS.BCK~[V9.SRC.ICONC]INLINE.C;1;11rSu cd_add(cd); cur_symtab[dcl_var].loc = loc_cpy(tnd, M_CharPtr); break; case TndBlk: cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = tnd; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = nullptr;"; cd_add(cd); cur_symtab[dcl_var].loc = loc_cpy(tnd, M_BlkPtr); cur_symtab[dcl_var].loc->blk_name = impl->tnds[i].blk_name; break; } if (impl->tnds[i].init != NULL) { cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = cur_symtab[dcl_var].loc; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = "; sub_ilc(impl->tnds[i].init, cd, 2); cd->ElemTyp(3) = A_Str; cd->Str(3) = ";"; cd_add(cd); } } ++dcl_var; } /* * If there are local non-tended variables, generate code for the * declarations, placing everything in braces. */ if (impl->nvars > 0) { cd = NewCode(0); cd->cd_id = C_LBrack; /* { */ cd_add(cd); for (i = 0; i < impl->nvars; ++i) { if (cur_symtab[dcl_var].n_refs + cur_symtab[dcl_var].n_mods > 0) { gen_ilc(impl->vars[i].dcl); cur_symtab[dcl_var].loc = cvar_loc(impl->vars[i].name); } ++dcl_var; } } gen_il(il); /* generate executable code */ if (impl->nvars > 0) { cd = NewCode(0); cd->cd_id = C_RBrack; /* } */ cd_add(cd); } } /* * gen_il - generate code from a sub-tree of in-line code from the data * base. Determine if execution can continue past this code. * */ hidden int gen_il(il) struct il_code *il; { struct code *cd; struct code *cd1; struct il_code *il_cond; struct il_code *il_then; struct il_code *il_else; struct il_code *il_t; struct val_loc **locs; struct val_loc **locs1; struct val_loc *tnd; int fall_thru; int cond; int ncases; int indx; int ntended; int i; if (il == NULL) return 1; switch (il->il_type) { case IL_Const: /* should have been replaced by literal node */ return 1; case IL_If1: case IL_If2: /* * if-then or if-then-else statement. */ il_then = il->u[1].fld; if (il->il_type == IL_If2) il_else = il->u[2].fld; else il_else = NULL; il_cond = il->u[0].fld; if (il->u[0].fld->il_type == IL_Bang) { il_cond = il_cond->u[0].fld; il_t = il_then; il_then = il_else; il_else = il_t; } locs = sav_locs(); cond = cond_anlz(il_cond, &cd1); if (cond == (MaybeTrue | MaybeFalse)) fall_thru = gen_if(cd1, il_then, il_else, locs); else { if (cd1 != NULL) { cd_add(cd1); /* condition contains needed conversions */ cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = ";"; cd_add(cd); } if (cond == MaybeTrue) fall_thru = gen_il(il_then); else if (cond == MaybeFalse) { locs1 = sav_locs(); rstr_locs(locs); locs = locs1; fall_thru = gen_il(il_else); } mrg_locs(locs); } return fall_thru; case IL_Tcase1: /* * type_case statement with no default clause. */ return gen_tcase(il, 0); case IL_Tcase2: /* * type_case statement with a default clause. */ return gen_tcase(il, 1); case IL_Lcase: /* * len_case statement. Determine which case matches the number * of arguments. */ ncases = il->u[0].n; indx = 1; for (i = 0; i < ncases; ++i) { if (il->u[indx++].n == n_vararg) /* selection number */ return gen_il(il->u[indx].fld); /* action */ ++indx; } return gen_il(il->u[indx].fld); /* default */ case IL_Acase: { /* * arith_case statement. */ struct il_code *var1; struct il_code *var2; struct val_loc *v_orig1; struct val_loc *v_orig2; struct code *cnv1; struct code *cnv2; int maybe_int; int maybe_dbl; int chk1; int chk2; var1 = il->u[0].fld; var2 = il->u[1].fld; v_orig1 = cur_symtab[var1->u[0].n].loc; /* remember for error msgs */ v_orig2 = cur_symtab[var2->u[0].n].loc; /* remember for error msgs */ arth_anlz(var1, var2, &maybe_int, &maybe_dbl, &chk1, &cnv1, &chk2, &cnv2); /* * This statement is in-lined if there is only C integer * arithmetic, only C double arithmetic, or only a run-time * error. */ arth_arg(var1, v_orig1, chk1, cnv1); arth_arg(var2, v_orig2, chk2, cnv2); if (maybe_int) return gen_il(il->u[2].fld); /* C_integer action */ else if (maybe_dbl) return gen_il(il->u[4].fld); /* C_double action */ else return 0; } case IL_Err1: /* * runerr() with no offending value. */ cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg("; cd->ElemTyp(1) = A_Intgr; cd->Intgr(1) = il->u[0].n; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", NULL);"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); for (i = 0; i < nsyms; ++i) cur_symtab[i].loc = NULL; return 0; case IL_Err2: /* * runerr() with an offending value. Note the reference to * the offending value descriptor. */ cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg("; cd->ElemTyp(1) = A_Intgr; cd->Intgr(1) = il->u[0].n; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", &("; il_var(il->u[1].fld, cd, 3); cd->ElemTyp(4) = A_Str; cd->Str(4) = "));"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); for (i = 0; i < nsyms; ++i) cur_symtab[i].loc = NULL; return 0; case IL_Lst: /* * Two consecutive pieces of RTL code. */ fall_thru = gen_il(il->u[0].fld); if (fall_thru) fall_thru = gen_il(il->u[1].fld); return fall_thru; case IL_Block: /* * inline {...} statement. * * Allocate and initialize any tended locals. */ ntended = il->u[1].n; if (ntended > 0) tended = (struct val_loc **)alloc((unsigned int) sizeof(struct val_loc *) * ntended); for (i = 2; i - 2 < ntended; ++i) { tnd = chk_alc(NULL, intrnl_lftm); tended[i - 2] = tnd; switch (il->u[i].n) { case TndDesc: break; case TndStr: X;L VMS.BCK~[V9.SRC.ICONC]INLINE.C;1CN;11r cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = tnd; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = emptystr;"; cd_add(cd); break; case TndBlk: cd = alc_ary(2); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = tnd; cd->ElemTyp(1) = A_Str; cd->Str(1) = " = nullptr;"; cd_add(cd); break; } } gen_ilc(il->u[i].c_cd); /* body of block */ /* * See if execution can fall through this code. */ if (il->u[0].n) return 1; else { for (i = 0; i < nsyms; ++i) cur_symtab[i].loc = NULL; return 0; } case IL_Call: /* * call to body function. */ return body_fnc(il); case IL_Abstr: /* * abstract type computation. Only used by type inference. */ return 1; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(1); /* NOTREACHED */ } } /* * arth_arg - in-line code to check a conversion for an arith_case statement. */ static novalue arth_arg(var, v_orig, chk, cnv) struct il_code *var; struct val_loc *v_orig; int chk; struct code *cnv; { struct code *lbl; struct code *cd; if (chk) { /* * Must check the conversion. */ lbl = oper_lbl("converted"); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ if (cnv != NULL) { cd = NewCode(2); cd->cd_id = C_If; cd->Cond = cnv; cd->ThenStmt = mk_goto(lbl); cd_add(cd); } cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(102, &("; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = v_orig; /* var location before conversion */ cd->ElemTyp(2) = A_Str; cd->Str(2) = "));"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; } else if (cnv != NULL) { cd_add(cnv); /* conversion cannot fail */ cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = ";"; cd_add(cd); } } /* * body_fnc - generate code to call a body function. */ static int body_fnc(il) struct il_code *il; { struct code *arg_lst; struct code *cd; struct c_fnc *cont1; char *oper_nm; int ret_val; int ret_flag; int need_rslt; int num_sbuf; int num_cbuf; int expl_args; int arglst_sz; /* size of arg list in number of code pieces */ int il_indx; int cd_indx; int proto_prt; int i; /* * Determine if a function prototype has been printed yet for this * body function. */ proto_prt = il->u[0].n; il->u[0].n = 1; /* * Construct the name of the body function. */ oper_nm = (char *)alloc((unsigned int)(strlen(impl->name) + 6)); sprintf(oper_nm, "%c%c%c%c_%s", impl->oper_typ, impl->prefix[0], impl->prefix[1], (char)il->u[1].n, impl->name); /* * Extract from the call the flags and other information describing * the function, then use this information to deduce the arguments * needed by the function. */ ret_val = il->u[2].n; ret_flag = il->u[3].n; need_rslt = il->u[4].n; num_sbuf = il->u[5].n; num_cbuf = il->u[6].n; expl_args = il->u[7].n; /* * determine how large the argument list is. */ arglst_sz = 2 * expl_args - 1; if (num_sbuf > 0) arglst_sz += 3; if (num_cbuf > 0) arglst_sz += 2; if (need_rslt) arglst_sz += 3; if (arglst_sz > 0) arg_lst = alc_ary(arglst_sz); else arg_lst = alc_ary(0); if (!proto_prt) { /* * Determine whether the body function returns a C integer, double, * no value, or a signal. */ switch (ret_val) { case RetInt: fprintf(inclfile, "C_integer %s Params((", oper_nm); break; case RetDbl: fprintf(inclfile, "double %s Params((", oper_nm); break; case RetNoVal: fprintf(inclfile, "novalue %s Params((", oper_nm); break; case RetSig: fprintf(inclfile, "int %s Params((", oper_nm); break; } } /* * Produce prototype and code for the explicit arguments in the * function call. Note that the call entry contains C code for both. */ il_indx = 8; cd_indx = 0; while (expl_args--) { if (cd_indx > 0) { /* * Not first entry, precede by ','. */ arg_lst->ElemTyp(cd_indx) = A_Str; /* , */ arg_lst->Str(cd_indx) = ", "; if (!proto_prt) fprintf(inclfile, ", "); ++cd_indx; } if (!proto_prt) fprintf(inclfile, "%s", il->u[il_indx].c_cd->s); /* parameter dcl */ ++il_indx; sub_ilc(il->u[il_indx++].c_cd, arg_lst, cd_indx++); } /* * If string buffers are needed, allocate them and pass pointer to * function. */ if (num_sbuf > 0) { if (cd_indx > 0) { /* * Not first entry, precede by ','. */ arg_lst->ElemTyp(cd_indx) = A_Str; /* , */ arg_lst->Str(cd_indx) = ", "; if (!proto_prt) fprintf(inclfile, ", "); ++cd_indx; } arg_lst->ElemTyp(cd_indx) = A_Str; arg_lst->Str(cd_indx) = "(char (*)[MaxCvtLen])"; ++cd_indx; arg_lst->ElemTyp(cd_indx) = A_SBuf; arg_lst->Intgr(cd_indx) = alc_sbufs(num_sbuf, intrnl_lftm); if (!proto_prt) fprintf(inclfile, "char (*r_sbuf)[MaxCvtLen]"); ++cd_indx; } /* * If cset buffers are needed, allocate them and pass pointer to * function. */ if (num_cbuf > 0) { if (cd_indx > 0) { /* * Not first entry, precede by ','. */ arg_lst->ElemTyp(cd_indx) = A_Str; /* , */ arg_lst->Str(cd_indx) = ", "; if (!proto_prt) fprintf(inclfile, ", "); ++cd_indx; } arg_lst->ElemTyp(cd_indx) = A_CBuf; arg_lst->Intgr(cd_indx) = alc_cbufs(num_cbuf, intrnl_lftm); if (!proto_prt) fprintf(inclfile, "struct b_cset *r_cbuf"); ++cd_indx; } /* * See if the function needs a pointer to the result location * of the operation. */ if (need_rslt) { if (cd_indx > 0) { /* * Not first entry, precede by ','. */ arg_lst->ElemTyp(cd_indx) = A_Str; /* , */ arg_lst->Str(cd_indx) = ", "; if (!proto_prt) fprintf(inclfile, ", "); ++cd_indx; } arg_lst->ElemTyp(cd_indx) = A_Str; /* location of result */ arg_lst->Str(cd_indx) = "&"; ++cd_indx; arg_lst->ElemTyp(cd_indx) = A_ValLoc; arg_lst->ValLoc(cd_indx) = rslt; if (!proto_prt) fprintf(inclfile, "dptr rslt"); ++cd_indx; } if (!proto_prt) { /* * The last possible argument is the success continuation. * If there are no arguments, indicate this in the prototype. */ if (ret_flag & DoesSusp) { if (cd_indx > 0)Y VMS.BCK~[V9.SRC.ICONC]INLINE.C;1;11rl' fprintf(inclfile, ", "); fprintf(inclfile, "continuation succ_cont"); } else if (cd_indx == 0) fprintf(inclfile, "noargs"); fprintf(inclfile, "));\n"); } /* * Does this call need the success continuation for the operation. */ if (ret_flag & DoesSusp) cont1 = cont; else cont1 = NULL; switch (ret_val) { case RetInt: /* * The body function returns a C integer. */ cd = alc_ary(6); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = rslt; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".vword.integr = "; cd->ElemTyp(2) = A_Str; cd->Str(2) = oper_nm; cd->ElemTyp(3) = A_Str; cd->Str(3) = "("; cd->ElemTyp(4) = A_Ary; cd->Array(4) = arg_lst; cd->ElemTyp(5) = A_Str; cd->Str(5) = ");"; cd_add(cd); dwrd_asgn(rslt, "Integer"); cd_add(mk_goto(*scont_strt)); break; case RetDbl: /* * The body function returns a C double. */ cd = alc_ary(6); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = rslt; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".vword.bptr = (union block *)alcreal("; cd->ElemTyp(2) = A_Str; cd->Str(2) = oper_nm; cd->ElemTyp(3) = A_Str; cd->Str(3) = "("; cd->ElemTyp(4) = A_Ary; cd->Array(4) = arg_lst; cd->ElemTyp(5) = A_Str; cd->Str(5) = "));"; cd_add(cd); dwrd_asgn(rslt, "Real"); chkforblk(); /* make sure the block allocation succeeded */ cd_add(mk_goto(*scont_strt)); break; case RetNoVal: /* * The body function does not directly return a value. */ cd = alc_ary(4); cd->ElemTyp(0) = A_Str; cd->Str(0) = oper_nm; cd->ElemTyp(1) = A_Str; cd->Str(1) = "("; cd->ElemTyp(2) = A_Ary; cd->Array(2) = arg_lst; cd->ElemTyp(3) = A_Str; cd->Str(3) = ");"; cd_add(cd); if (ret_flag & DoesFail | (err_conv && (ret_flag & DoesEFail))) cd_add(sig_cd(on_failure, cur_fnc)); else if (ret_flag & DoesRet) cd_add(mk_goto(*scont_strt)); break; case RetSig: /* * The body function returns a signal. */ callo_add(oper_nm, ret_flag, cont1, 0, arg_lst, mk_goto(*scont_strt)); break; } /* * See if execution can fall through this call. */ if (ret_flag & DoesFThru) return 1; else { for (i = 0; i < nsyms; ++i) cur_symtab[i].loc = NULL; return 0; } } /* * il_var - generate code for a possibly subscripted variable into * an element of a code array. */ static novalue il_var(il, cd, indx) struct il_code *il; struct code *cd; int indx; { struct code *cd1; if (il->il_type == IL_Subscr) { /* * Subscripted variable. */ cd1 = cd; cd = alc_ary(4); cd1->ElemTyp(indx) = A_Ary; cd1->Array(indx) = cd; indx = 0; cd->ElemTyp(1) = A_Str; cd->Str(1) = "["; cd->ElemTyp(2) = A_Intgr; cd->Intgr(2) = il->u[1].n; cd->ElemTyp(3) = A_Str; cd->Str(3) = "]"; } /* * See if this is the result location of the operation or an ordinary * variable. */ cd->ElemTyp(indx) = A_ValLoc; if (il->u[0].n == RsltIndx) cd->ValLoc(indx) = rslt; else cd->ValLoc(indx) = cur_symtab[il->u[0].n].loc; } /* * part_asgn - generate code for an assignment to (part of) a descriptor. */ static novalue part_asgn(vloc, asgn, value) struct val_loc *vloc; char *asgn; struct il_c *value; { struct code *cd; cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = vloc; cd->ElemTyp(1) = A_Str; cd->Str(1) = asgn; sub_ilc(value, cd, 2); /* value */ cd->ElemTyp(3) = A_Str; cd->Str(3) = ";"; cd_add(cd); } /* * dwrd_asgn - generate code to assign a type code to the dword of a descriptor. */ static novalue dwrd_asgn(vloc, typ) struct val_loc *vloc; char *typ; { struct code *cd; cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = vloc; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".dword = D_"; cd->ElemTyp(2) = A_Str; cd->Str(2) = typ; cd->ElemTyp(3) = A_Str; cd->Str(3) = ";"; cd_add(cd); } /* * sub_ilc - generate code from a sequence of C code and place it * in a slot in a code array. */ static novalue sub_ilc(ilc, cd, indx) struct il_c *ilc; struct code *cd; int indx; { struct il_c *ilc1; struct code *cd1; int n; /* * Count the number of pieces of C code to process. */ n = 0; for (ilc1 = ilc; ilc1 != NULL; ilc1 = ilc1->next) ++n; /* * If there is only one piece of code, place it directly in the * slot of the array. Otherwise allocate a sub-array and place it * in the slot. */ if (n > 1) { cd1 = cd; cd = alc_ary(n); cd1->ElemTyp(indx) = A_Ary; cd1->Array(indx) = cd; indx = 0; } while (ilc != NULL) { switch (ilc->il_c_type) { case ILC_Ref: case ILC_Mod: /* * Reference to variable in symbol table. */ cd->ElemTyp(indx) = A_ValLoc; if (ilc->n == RsltIndx) cd->ValLoc(indx) = rslt; else { if (ilc->s == NULL) cd->ValLoc(indx) = cur_symtab[ilc->n].loc; else { /* * Access the entire descriptor. */ cd->ValLoc(indx) = loc_cpy(cur_symtab[ilc->n].loc, M_None); } } break; case ILC_Tend: /* * Reference to a tended variable. */ cd->ElemTyp(indx) = A_ValLoc; cd->ValLoc(indx) = tended[ilc->n]; break; case ILC_Str: /* * String representing C code. */ cd->ElemTyp(indx) = A_Str; cd->Str(indx) = ilc->s; break; case ILC_SBuf: /* * String buffer for a conversion. */ cd->ElemTyp(indx) = A_SBuf; cd->Intgr(indx) = alc_sbufs(1, intrnl_lftm); break; case ILC_CBuf: /* * Cset buffer for a conversion. */ cd->ElemTyp(indx) = A_CBuf; cd->Intgr(indx) = alc_cbufs(1, intrnl_lftm); break; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(1); } ilc = ilc->next; ++indx; } } /* * gen_ilret - generate code to set the result value from a suspend or * return. */ static novalue gen_ilret(ilc) struct il_c *ilc; { struct il_c *ilc0; struct code *cd; char *cap_id; int typcd; if (rslt == &ignore) return; /* Don't bother computing the resuZfN VMS.BCK~[V9.SRC.ICONC]INLINE.C;11;11rx6lt; it's never used */ ilc0 = ilc->code[0]; typcd = ilc->n; if (typcd < 0) { /* * RTL returns that do not look like function calls to standard Icon * type name. */ switch (typcd) { case TypCInt: /* * return/suspend C_integer ; */ part_asgn(rslt, ".vword.integr = ", ilc0); dwrd_asgn(rslt, "Integer"); break; case TypCDbl: /* * return/suspend C_double ; */ cd = alc_ary(4); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = rslt; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".vword.bptr = (union block *)alcreal("; sub_ilc(ilc0, cd, 2); /* value */ cd->ElemTyp(3) = A_Str; cd->Str(3) = ");"; cd_add(cd); dwrd_asgn(rslt, "Real"); chkforblk(); /* make sure the block allocation succeeded */ break; case TypCStr: /* * return/suspend C_string ; */ cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "AsgnCStr("; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rslt; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", "; sub_ilc(ilc0, cd, 3); /* */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ");"; cd_add(cd); break; case RetDesc: /* * return/suspend ; */ part_asgn(rslt, " = ", ilc0); break; case RetNVar: /* * return/suspend named_var(); */ part_asgn(rslt, ".vword.descptr = ", ilc0); dwrd_asgn(rslt, "Var"); break; case RetSVar: /* * return/suspend struct_var(, ); */ part_asgn(rslt, ".vword.descptr = (dptr)", ilc->code[1]); cd = alc_ary(6); cd->ElemTyp(0) = A_ValLoc; cd->ValLoc(0) = rslt; cd->ElemTyp(1) = A_Str; cd->Str(1) = ".dword = D_Var + ((word *)"; sub_ilc(ilc0, cd, 2); /* value */ cd->ElemTyp(3) = A_Str; cd->Str(3) = " - (word *)"; cd->ElemTyp(4) = A_ValLoc; cd->ValLoc(4) = rslt; cd->ElemTyp(5) = A_Str; cd->Str(5) = ".vword.descptr);"; cd_add(cd); break; case RetNone: /* * return/suspend result; * * Result already set, do nothing. */ break; default: fprintf(stderr, "compiler error: unknown RLT return in data base\n"); exit(1); /* NOTREACHED */ } } else { /* * RTL returns that look like function calls to standard Icon type * names. */ cap_id = icontypes[typcd].cap_id; switch (icontypes[typcd].rtl_ret) { case TRetBlkP: /* * return/suspend (); */ part_asgn(rslt, ".vword.bptr = (union block *)", ilc0); dwrd_asgn(rslt, cap_id); break; case TRetDescP: /* * return/suspend (); */ part_asgn(rslt, ".vword.descptr = (dptr)", ilc0); dwrd_asgn(rslt, cap_id); break; case TRetCharP: /* * return/suspend (); */ part_asgn(rslt, ".vword.sptr = (char *)", ilc0); dwrd_asgn(rslt, cap_id); break; case TRetCInt: /* * return/suspend (); */ part_asgn(rslt, ".vword.integr = (word)", ilc0); dwrd_asgn(rslt, cap_id); break; case TRetSpcl: /* * RTL returns that look like function calls to standard type * names but take more than one argument. */ if (typcd == str_typ) { /* * return/suspend string(, ); */ part_asgn(rslt, ".vword.sptr = ", ilc->code[1]); part_asgn(rslt, ".dword = ", ilc0); } else if (typcd == stv_typ) { /* * return/suspend substr(, , ); */ cd = alc_ary(9); cd->ElemTyp(0) = A_Str; cd->Str(0) = "SubStr(&"; cd->ElemTyp(1) = A_ValLoc; cd->ValLoc(1) = rslt; cd->ElemTyp(2) = A_Str; cd->Str(2) = ", "; sub_ilc(ilc0, cd, 3); cd->ElemTyp(4) = A_Str; cd->Str(4) = ", "; sub_ilc(ilc->code[2], cd, 5); cd->ElemTyp(6) = A_Str; cd->Str(6) = ", "; sub_ilc(ilc->code[1], cd, 7); cd->ElemTyp(8) = A_Str; cd->Str(8) = ");"; cd_add(cd); chkforblk(); /* make sure the block allocation succeeded */ } else { fprintf(stderr, "compiler error: unknown RLT return in data base\n"); exit(1); /* NOTREACHED */ } break; default: fprintf(stderr, "compiler error: unknown RLT return in data base\n"); exit(1); /* NOTREACHED */ } } } /* * chkforblk - generate code to make sure the allocation of a block * for the result descriptor was successful. */ static novalue chkforblk() { struct code *cd; struct code *cd1; struct code *lbl; lbl = alc_lbl("got allocation", 0); cd_add(lbl); cur_fnc->cursor = lbl->prev; /* code goes before label */ cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "("; cd1->ElemTyp(1) = A_ValLoc; cd1->ValLoc(1) = rslt; cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ").vword.bptr != NULL"; cd->Cond = cd1; cd->ThenStmt = mk_goto(lbl); cd_add(cd); cd = alc_ary(1); cd->ElemTyp(0) = A_Str; cd->Str(0) = "err_msg(307, NULL);"; cd_add(cd); if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); cur_fnc->cursor = lbl; } /* * gen_ilc - generate code for an sequence of in-line C code. */ static novalue gen_ilc(ilc) struct il_c *ilc; { struct il_c *ilc1; struct code *cd; struct code *cd1; struct code *lbl1; struct code *fail_sav; struct code **lbls; int max_lbl; int i; /* * Determine how many labels there are in the code and allocate an * array to map from label numbers to labels in the code. */ max_lbl = -1; for (ilc1 = ilc; ilc1 != NULL; ilc1 = ilc1->next) { switch(ilc1->il_c_type) { case ILC_CGto: case ILC_Goto: case ILC_Lbl: if (ilc1->n > max_lbl) max_lbl = ilc1->n; [O0 VMS.BCK~[V9.SRC.ICONC]INLINE.C;11;11rE} } ++max_lbl; /* adjust for 0 indexing */ if (max_lbl > 0) { lbls = (struct code **)alloc((unsigned int) sizeof(struct code *) * max_lbl); for (i = 0; i < max_lbl; ++i) lbls[i] = NULL; } while (ilc != NULL) { switch(ilc->il_c_type) { case ILC_Ref: case ILC_Mod: case ILC_Tend: case ILC_SBuf: case ILC_CBuf: case ILC_Str: /* * The beginning of a sequence of code fragments that can be * place on one line. */ ilc = line_ilc(ilc); break; case ILC_Fail: /* * fail - perform failure action. */ cd_add(sig_cd(on_failure, cur_fnc)); break; case ILC_EFail: /* * errorfail - same as fail if error conversion is supported. */ if (err_conv) cd_add(sig_cd(on_failure, cur_fnc)); break; case ILC_Ret: /* * return - set result location and jump out of operation. */ gen_ilret(ilc); cd_add(mk_goto(*scont_strt)); break; case ILC_Susp: /* * suspend - set result location. If there is a success * continuation, call it. Otherwise the "continuation" * will be generated in-line, so set up a resumption label. */ gen_ilret(ilc); if (cont == NULL) *scont_strt = cur_fnc->cursor; lbl1 = oper_lbl("end suspend"); cd_add(lbl1); if (cont == NULL) *scont_fail = lbl1; else { cur_fnc->cursor = lbl1->prev; fail_sav = on_failure; on_failure = lbl1; callc_add(cont); on_failure = fail_sav; cur_fnc->cursor = lbl1; } break; case ILC_LBrc: /* * non-deletable '{' */ cd = NewCode(0); cd->cd_id = C_LBrack; cd_add(cd); break; case ILC_RBrc: /* * non-deletable '}' */ cd = NewCode(0); cd->cd_id = C_RBrack; cd_add(cd); break; case ILC_CGto: /* * Conditional goto. */ i = ilc->n; if (lbls[i] == NULL) lbls[i] = oper_lbl("within"); cd = NewCode(2); cd->cd_id = C_If; cd1 = alc_ary(1); sub_ilc(ilc->code[0], cd1, 0); cd->Cond = cd1; cd->ThenStmt = mk_goto(lbls[i]); cd_add(cd); break; case ILC_Goto: /* * Goto. */ i = ilc->n; if (lbls[i] == NULL) lbls[i] = oper_lbl("within"); cd_add(mk_goto(lbls[i])); break; case ILC_Lbl: /* * Label. */ i = ilc->n; if (lbls[i] == NULL) lbls[i] = oper_lbl("within"); cd_add(lbls[i]); break; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(1); } ilc = ilc->next; } if (max_lbl > 0) free((char *)lbls); } /* * line_ilc - gather a line of in-line code. */ static struct il_c *line_ilc(ilc) struct il_c *ilc; { struct il_c *ilc1; struct il_c *last; struct code *cd; int n; int i; /* * Count the number of pieces in the line. Determine the last * piece in the sequence; this is returned to the caller. */ n = 0; ilc1 = ilc; while (ilc1 != NULL) { switch(ilc1->il_c_type) { case ILC_Ref: case ILC_Mod: case ILC_Tend: case ILC_SBuf: case ILC_CBuf: case ILC_Str: ++n; last = ilc1; ilc1 = ilc1->next; break; default: ilc1 = NULL; } } /* * Construct the line. */ cd = alc_ary(n); for (i = 0; i < n; ++i) { switch(ilc->il_c_type) { case ILC_Ref: case ILC_Mod: /* * Reference to variable in symbol table. */ cd->ElemTyp(i) = A_ValLoc; if (ilc->n == RsltIndx) cd->ValLoc(i) = rslt; else cd->ValLoc(i) = cur_symtab[ilc->n].loc; break; case ILC_Tend: /* * Reference to a tended variable. */ cd->ElemTyp(i) = A_ValLoc; cd->ValLoc(i) = tended[ilc->n]; break; case ILC_SBuf: /* * String buffer for a conversion. */ cd->ElemTyp(i) = A_SBuf; cd->Intgr(i) = alc_sbufs(1, intrnl_lftm); break; case ILC_CBuf: /* * Cset buffer for a conversion. */ cd->ElemTyp(i) = A_CBuf; cd->Intgr(i) = alc_cbufs(1, intrnl_lftm); break; case ILC_Str: /* * String representing C code. */ cd->ElemTyp(i) = A_Str; cd->Str(i) = ilc->s; break; default: ilc = NULL; } ilc = ilc->next; } cd_add(cd); return last; } /* * generate code to perform simple type checking. */ struct code *typ_chk(var, typcd) struct il_code *var; int typcd; { struct code *cd; if (typcd == int_typ && largeints) { /* * Handle large integer support specially. */ cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(("; il_var(var, cd, 1); /* value */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ").dword == D_Integer || ("; il_var(var, cd, 3); /* value */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ").dword == D_Lrgint)"; return cd; } else if (typcd < 0) { /* * Not a standard Icon type name. */ cd = alc_ary(3); cd->ElemTyp(0) = A_Str; switch (typcd) { case TypVar: cd->Str(0) = "((("; il_var(var, cd, 1); /* value */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ").dword & D_Var) == D_Var)"; break; case TypCInt: cd->Str(0) = "(("; il_var(var, cd, 1); /* value */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ").dword == D_Integer)"; break; } } else if (typcd == str_typ) { cd = alc_ary(3); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(!(("; il_var(var, cd, 1); /* value */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ").dword & F_Nqual))"; } else { cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(("; il_var(var, cd, 1); /* value */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ").dword == D_"; cd->ElemTyp(3) = A_Str; cd->Str(3) = icontypes[typcd].cap_id; /* typ\ VMS.BCK~[V9.SRC.ICONC]INLINE.C;11N;1rTe name */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ")"; } return cd; } /* * oper_lbl - generate a label with an associated comment that includes * the operation name. */ static struct code *oper_lbl(s) char *s; { char *sbuf; sbuf = (char *)alloc((unsigned int)(strlen(s) + strlen(impl->name) + 3)); sprintf(sbuf, "%s: %s", s, impl->name); return alc_lbl(sbuf, 0); } /* * sav_locs - save the current interpretation of symbols that may * be affected by conversions. */ static struct val_loc **sav_locs() { struct val_loc **locs; int i; if (nsyms == 0) return NULL; locs = (struct val_loc **)alloc((unsigned int)(nsyms * sizeof(struct val_loc *))); for (i = 0; i < nsyms; ++i) locs[i] = cur_symtab[i].loc; return locs; } /* * rstr_locs - restore the interpretation of symbols that may * have been affected by conversions. */ static novalue rstr_locs(locs) struct val_loc **locs; { int i; for (i = 0; i < nsyms; ++i) cur_symtab[i].loc = locs[i]; free((char *)locs); } /* * mrg_locs - merge the interpretations of symbols along two execution * paths. Any ambiguity is caught by rtt, so differences only occur * if one path involves program termination so that the symbols * no longer have an interpretation along that path. */ static novalue mrg_locs(locs) struct val_loc **locs; { int i; for (i = 0; i < nsyms; ++i) if (cur_symtab[i].loc == NULL) cur_symtab[i].loc = locs[i]; free((char *)locs); } /* * il_cnv - generate code for an in-line conversion. */ struct code *il_cnv(typcd, src, dflt, dest) int typcd; struct il_code *src; struct il_c *dflt; struct il_c *dest; { struct code *cd; struct code *cd1; int dflt_to_ptr; int loc; int is_cstr; int sym_indx; int n; int i; sym_indx = src->u[0].n; /* * Determine whether the address must be taken of a default value and * whether the interpretation of the symbol in an in-place conversion * changes. */ dflt_to_ptr = 0; loc = PrmTend; is_cstr = 0; switch (typcd) { case TypCInt: case TypECInt: loc = PrmInt; break; case TypCDbl: loc = PrmDbl; break; case TypCStr: is_cstr = 1; break; case TypEInt: break; case TypTStr: case TypTCset: dflt_to_ptr = 1; break; default: /* * Cset, real, integer, or string */ if (typcd == cset_typ || typcd == str_typ) dflt_to_ptr = 1; break; } if (typcd == TypCDbl && !(eval_is(real_typ, sym_indx) & MaybeFalse)) { /* * Conversion from Icon real to C double. Just copy the C value * from the block. */ cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(GetReal(&("; il_var(src, cd, 1); cd->ElemTyp(2) = A_Str; cd->Str(2) = "), "; cnv_dest(loc, is_cstr, src, sym_indx, dest, cd, 3); cd->ElemTyp(4) = A_Str; cd->Str(4) = "), 1)"; } else if (typcd == TypCDbl && !largeints && !(eval_is(int_typ, sym_indx) & MaybeFalse)) { /* * Conversion from Icon integer (not large integer) to C double. * Do as a C conversion by an assigment. */ cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "("; cd->ElemTyp(2) = A_Str; cd->Str(2) = " = IntVal( "; cd->ElemTyp(4) = A_Str; cd->Str(4) = "), 1)"; /* * Note that cnv_dest() must be called after the source is output * in case it changes the location of the parameter. */ il_var(src, cd, 3); cnv_dest(loc, is_cstr, src, sym_indx, dest, cd, 1); } else { /* * Compute the number of code fragments required to construct the * call to the conversion routine. */ n = 7; if (dflt != NULL) n += 2; cd = alc_ary(n); /* * The names of simple conversions are distinguished from defaulting * conversions by a prefix of "cnv_" or "def_". */ cd->ElemTyp(0) = A_Str; if (dflt == NULL) cd->Str(0) = "cnv_"; else cd->Str(0) = "def_"; /* * Determine the name of the conversion routine. */ cd->ElemTyp(1) = A_Str; /* may be overridden */ switch (typcd) { case TypCInt: cd->Str(1) = "c_int(&("; break; case TypCDbl: cd->Str(1) = "c_dbl(&("; break; case TypCStr: cd->Str(1) = "c_str(&("; break; case TypEInt: cd->Str(1) = "eint(&("; break; case TypECInt: cd->Str(1) = "ec_int(&("; break; case TypTStr: /* * Allocate a string buffer. */ cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "tstr("; cd1->ElemTyp(1) = A_SBuf; cd1->Intgr(1) = alc_sbufs(1, intrnl_lftm); cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ", (&"; cd->ElemTyp(1) = A_Ary; cd->Array(1) = cd1; break; case TypTCset: /* * Allocate a cset buffer. */ cd1 = alc_ary(3); cd1->ElemTyp(0) = A_Str; cd1->Str(0) = "tcset("; cd1->ElemTyp(1) = A_CBuf; cd1->Intgr(1) = alc_cbufs(1, intrnl_lftm); cd1->ElemTyp(2) = A_Str; cd1->Str(2) = ", &("; cd->ElemTyp(1) = A_Ary; cd->Array(1) = cd1; break; default: /* * Cset, real, integer, or string */ if (typcd == cset_typ) cd->Str(1) = "cset(&("; else if (typcd == real_typ) cd->Str(1) = "real(&("; else if (typcd == int_typ) cd->Str(1) = "int(&("; else if (typcd == str_typ) cd->Str(1) = "str(&("; break; } il_var(src, cd, 2); cd->ElemTyp(3) = A_Str; if (dflt != NULL && dflt_to_ptr) cd->Str(3) = "), &("; else cd->Str(3) = "), "; /* * Determine if this conversion has a default value. */ i = 4; if (dflt != NULL) { sub_ilc(dflt, cd, i); ++i; cd->ElemTyp(i) = A_Str; if (dflt_to_ptr) cd->Str(i) = "), "; else cd->Str(i) = ", "; ++i; } cd->ElemTyp(i) = A_Str; cd->Str(i) = "&("; ++i; cnv_dest(loc, is_cstr, src, sym_indx, dest, cd, i); ++i; cd->ElemTyp(i) = A_Str; cd->Str(i) = "))"; } return cd; } /* * il_dflt - generate code for a defaulting conversion that always defaults. */ struct code *il_dflt(typcd, src, dflt, dest) int typcd; struct il_code *src; struct il_c *dflt; struct il_c *dest; { struct code *cd; int sym_indx; sym_indx = src->u[0].n; if (typcd == TypCDbl) { cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "("; cnv_dest(PrmDbl, 0, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = " = "; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; ]` VMS.BCK~[V9.SRC.ICONC]INLINE.C;11;11CN;1rccd->Str(4) = ", 1)"; } else if (typcd == TypCInt || typcd == TypECInt) { cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "("; cnv_dest(PrmInt, 0, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = " = "; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ", 1)"; } else if (typcd == TypTStr || typcd == str_typ) { cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "("; cnv_dest(0, 0, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = " = "; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ", 1)"; } else if (typcd == TypCStr) { cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(AsgnCStr("; cnv_dest(0, 1, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ", "; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; cd->Str(4) = "), 1)"; } else if (typcd == TypTCset || typcd == cset_typ) { cd = alc_ary(7); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(BlkLoc("; cnv_dest(0, 0, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ") = (union block *)&"; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ", "; cnv_dest(0, 0, src, sym_indx, dest, cd, 5); /* variable */ cd->ElemTyp(6) = A_Str; cd->Str(6) = ".dword = D_Cset, 1)"; } else if (typcd == TypEInt || typcd == int_typ) { cd = alc_ary(7); cd->ElemTyp(0) = A_Str; cd->Str(0) = "(IntVal("; cnv_dest(0, 0, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ") = "; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ", "; cnv_dest(0, 0, src, sym_indx, dest, cd, 5); /* variable */ cd->ElemTyp(6) = A_Str; cd->Str(6) = ".dword = D_Integer, 1)"; } else if (typcd == real_typ) { cd = alc_ary(7); cd->ElemTyp(0) = A_Str; cd->Str(0) = "((BlkLoc("; cnv_dest(0, 0, src, sym_indx, dest, cd, 1); /* variable */ cd->ElemTyp(2) = A_Str; cd->Str(2) = ") = (union block *)alcreal("; sub_ilc(dflt, cd, 3); /* default */ cd->ElemTyp(4) = A_Str; cd->Str(4) = ")) == NULL ? (fatalerr(0,NULL), 0) : ("; cnv_dest(0, 0, src, sym_indx, dest, cd, 5); /* variable */ cd->ElemTyp(6) = A_Str; cd->Str(6) = ".dword = D_Real, 1))"; } return cd; } /* * cnv_dest - output the destination of a conversion. */ static novalue cnv_dest(loc, is_cstr, src, sym_indx, dest, cd, i) int loc; int is_cstr; struct il_code *src; int sym_indx; struct il_c *dest; struct code *cd; int i; { if (dest == NULL) { /* * Convert "in place", changing the location of a parameter if needed. */ switch (loc) { case PrmInt: if (cur_symtab[sym_indx].itmp_indx < 0) cur_symtab[sym_indx].itmp_indx = alc_itmp(intrnl_lftm); cur_symtab[sym_indx].loc = itmp_loc(cur_symtab[sym_indx].itmp_indx); break; case PrmDbl: if (cur_symtab[sym_indx].dtmp_indx < 0) cur_symtab[sym_indx].dtmp_indx = alc_dtmp(intrnl_lftm); cur_symtab[sym_indx].loc = dtmp_loc(cur_symtab[sym_indx].dtmp_indx); break; } il_var(src, cd, i); if (is_cstr) cur_symtab[sym_indx].loc = loc_cpy(cur_symtab[sym_indx].loc,M_CharPtr); } else { if (is_cstr && dest->il_c_type == ILC_Mod && dest->next == NULL && dest->n != RsltIndx && cur_symtab[dest->n].loc->mod_access != M_None) { /* * We are converting to a C string. The destination variable * is not defined as a simple descriptor, but must be accessed * as such for this conversion. */ cd->ElemTyp(i) = A_ValLoc; cd->ValLoc(i) = loc_cpy(cur_symtab[dest->n].loc, M_None); } else sub_ilc(dest, cd, i); } } /* * il_copy - produce code for an optimized "conversion" that always succeeds * and just copies a value from one place to another. */ struct code *il_copy(dest, src) struct il_c *dest; struct val_loc *src; { struct code *cd; cd = alc_ary(5); cd->ElemTyp(0) = A_Str; cd->Str(0) = "("; sub_ilc(dest, cd, 1); cd->ElemTyp(2) = A_Str; cd->Str(2) = " = "; cd->ElemTyp(3) = A_ValLoc; cd->ValLoc(3) = src; cd->ElemTyp(4) = A_Str; cd->Str(4) = ", 1)"; return cd; } /* * loc_cpy - make a copy of a reference to a value location, but change * the way the location is accessed. */ struct val_loc *loc_cpy(loc, mod_access) struct val_loc *loc; int mod_access; { struct val_loc *new_loc; if (loc == NULL) return NULL; new_loc = NewStruct(val_loc); *new_loc = *loc; new_loc->mod_access = mod_access; return new_loc; } /* * gen_tcase - generate in-line code for a type_case statement. */ static int gen_tcase(il, has_dflt) struct il_code *il; int has_dflt; { struct case_anlz case_anlz; /* * We can only get here if the type_case statement can be implemented * with a no more than one type check. Determine how simple the * code can be. */ findcases(il, has_dflt, &case_anlz); if (case_anlz.il_then == NULL) { if (case_anlz.il_else == NULL) return 1; else return gen_il(case_anlz.il_else); } else return gen_if(typ_chk(il->u[0].fld, case_anlz.typcd), case_anlz.il_then, case_anlz.il_else, sav_locs()); } /* * gen_if - generate code to test a condition that might be true * of false. Determine if execution can continue past this if statement. */ static int gen_if(cond_cd, il_then, il_else, locs) struct code *cond_cd; struct il_code *il_then; struct il_code *il_else; struct val_loc **locs; { struct val_loc **locs1; struct code *lbl_then; struct code *lbl_end; struct code *else_loc; struct code *cd; int fall_thru; lbl_then = oper_lbl("then"); lbl_end = oper_lbl("end if"); cd = NewCode(2); cd->cd_id = C_If; cd->Cond = cond_cd; cd->ThenStmt = mk_goto(lbl_then); cd_add(cd); else_loc = cur_fnc->cursor; cd_add(lbl_then); fall_thru = gen_il(il_then); cd_add(lbl_end); locs1 = sav_locs(); rstr_locs(locs); cur_fnc->cursor = else_loc; /* go back for the else clause */ fall_thru |= ^=h VMS.BCK~[V9.SRC.ICONC]INLINE.C;1CN;1CN;1rrgen_il(il_else); cd_add(mk_goto(lbl_end)); cur_fnc->cursor = lbl_end; mrg_locs(locs1); return fall_thru; } *[V9.SRC.ICONC]IVALUES.C;1+,./ 4!-~0123KPWO56`;L7@nu89Jj$GHJ/* * ivalues.c - routines for manipulating Icon values. */ #include #include "../h/gsupport.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ccode.h" #include "cproto.h" #include "cglobals.h" /* * iconint - convert the string representation of an Icon integer to a C long. * Return -1 if the number is too big and large integers are supported. */ long iconint(image) char *image; { register int c; register int r; register char *s; long n, n1; int overflow; s = image; overflow = 0; n = 0L; while ((c = *s++) >= '0' && c <= '9') { n1 = n * 10 + (c - '0'); if (n != n1 / 10) overflow = 1; n = n1; } if (c == 'r' || c == 'R') { r = n; n = 0L; while ((c = *s++) != '\0') { n1 = n * r + tonum(c); if (n != n1 / r) overflow = 1; n = n1; } } if (overflow) if (largeints) n = -1; else tfatal("large integer option required", image); return n; } *[V9.SRC.ICONC]LIFETIME.C;1+,./ 4-~0123KPWO56{7p 89Jj$GHJ/* * lifetime.c - perform liveness analysis to determine lifetime of intermediate * results. */ #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "cglobals.h" #include "ctree.h" #include "ctoken.h" #include "csym.h" #include "ccode.h" #include "cproto.h" /* * Prototypes for static functions. */ hidden novalue arg_life Params((nodeptr n, long min_result, long max_result, int resume, int frst_arg, int nargs, nodeptr resumer, nodeptr *failer, int *gen)); static int postn = -1; /* relative position in execution order (all neg) */ /* * liveness - compute lifetimes of intermediate results. */ novalue liveness(n, resumer, failer, gen) nodeptr n; nodeptr resumer; nodeptr *failer; int *gen; { struct loop { nodeptr resumer; int gen; nodeptr lifetime; int every_cntrl; struct loop *prev; } loop_info; struct loop *loop_sav; static struct loop *cur_loop = NULL; nodeptr failer1; nodeptr failer2; int gen1 = 0; int gen2 = 0; struct node *cases; struct node *clause; long min_result; /* minimum result sequence length */ long max_result; /* maximum result sequence length */ int resume; /* flag - resumption possible after last result */ n->postn = postn--; switch (n->n_type) { case N_Activat: /* * Activation can fail or succeed. */ arg_life(n, 0L, 1L, 0, 1, 2, resumer, failer, gen); break; case N_Alt: Tree1(n)->lifetime = n->lifetime; Tree0(n)->lifetime = n->lifetime; liveness(Tree1(n), resumer, &failer2, &gen2); liveness(Tree0(n), resumer, &failer1, &gen1); *failer = failer2; *gen = 1; break; case N_Apply: /* * Assume operation can suspend or fail. */ arg_life(n, 0L, UnbndSeq, 1, 0, 2, resumer, failer, gen); break; case N_Augop: /* * Impl0(n) is assignment. Impl1(n) is the augmented operation. */ min_result = Impl0(n)->min_result * Impl1(n)->min_result; max_result = Impl0(n)->max_result * Impl1(n)->max_result; resume = Impl0(n)->resume | Impl1(n)->resume; arg_life(n, min_result, max_result, resume, 2, 2, resumer, failer, gen); break; case N_Bar: if (resumer == NULL) n->intrnl_lftm = n; else n->intrnl_lftm = resumer; Tree0(n)->lifetime = n->lifetime; liveness(Tree0(n), resumer, failer, &gen1); *gen = 1; break; case N_Break: if (cur_loop == NULL) { nfatal(n, "invalid context for break", NULL); return; } Tree0(n)->lifetime = cur_loop->lifetime; loop_sav = cur_loop; cur_loop = cur_loop->prev; liveness(Tree0(n), loop_sav->resumer, &failer1, &gen1); cur_loop = loop_sav; cur_loop->gen |= gen1; *failer = NULL; *gen = 0; break; case N_Case: *failer = resumer; *gen = 0; cases = Tree1(n); while (cases != NULL) { if (cases->n_type == N_Ccls) { clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } /* * Body. */ Tree1(clause)->lifetime = n->lifetime; liveness(Tree1(clause), resumer, &failer2, &gen2); if (resumer == NULL && failer2 != NULL) *failer = n; *gen |= gen2; /* * The expression being compared can be resumed. */ Tree0(clause)->lifetime = clause; liveness(Tree0(clause), clause, &failer1, &gen1); } if (Tree2(n) == NULL) { if (resumer == NULL) *failer = n; } else { Tree2(n)->lifetime = n->lifetime; liveness(Tree2(n), resumer, &failer2, &gen2); /* default */ if (resumer == NULL && failer2 != NULL) *failer = n; *gen |= gen2; } /* * control clause is bounded */ Tree0(n)->lifetime = n; liveness(Tree0(n), NULL, &failer1, &gen1); if (failer1 != NULL && *failer == NULL) *failer = failer1; break; case N_Create: Tree0(n)->lifetime = n; loop_sav = cur_loop; cur_loop = NULL; /* check for invalid break and next */ liveness(Tree0(n), n, &failer1, &gen1); cur_loop = loop_sav; *failer = NULL; *gen = 0; break; case N_Cset: case N_Empty: case N_Id: case N_Int: case N_Real: case N_Str: *failer = resumer; *gen = 0; break; case N_Field: Tree0(n)->lifetime = n; liv_ VMS.BCK~[V9.SRC.ICONC]LIFETIME.C;1;1ICN;1Ĭ eness(Tree0(n), resumer, failer, gen); break; case N_If: Tree1(n)->lifetime = n->lifetime; liveness(Tree1(n), resumer, failer, gen); if (Tree2(n)->n_type != N_Empty) { Tree2(n)->lifetime = n->lifetime; liveness(Tree2(n), resumer, &failer2, &gen2); if (failer2 != NULL) { if (*failer == NULL) *failer = failer2; else { if ((*failer)->postn < failer2->postn) *failer = failer2; if ((*failer)->postn < n->postn) *failer = n; } } *gen |= gen2; } /* * control clause is bounded */ Tree0(n)->lifetime = NULL; liveness(Tree0(n), NULL, &failer1, &gen1); if (Tree2(n)->n_type == N_Empty && failer1 != NULL && *failer == NULL) *failer = failer1; break; case N_Invok: /* * Assume operation can suspend and fail. */ arg_life(n, 0L, UnbndSeq, 1, 1, Val0(n) + 1, resumer, failer, gen); break; case N_InvOp: arg_life(n, Impl1(n)->min_result, Impl1(n)->max_result, Impl1(n)->resume, 2, Val0(n), resumer, failer, gen); break; case N_InvProc: if (Proc1(n)->ret_flag & DoesFail) min_result = 0L; else min_result = 1L; if (Proc1(n)->ret_flag & DoesSusp) { max_result = UnbndSeq; resume = 1; } else { max_result = 1L; resume = 0; } arg_life(n, min_result, max_result, resume, 2, Val0(n), resumer, failer, gen); break; case N_InvRec: arg_life(n, err_conv ? 0L : 1L, 1L, 1, 2, Val0(n), resumer, failer, gen); break; case N_Limit: if (resumer == NULL) n->intrnl_lftm = n; else n->intrnl_lftm = resumer; Tree0(n)->lifetime = n->lifetime; liveness(Tree0(n), resumer, &failer1, &gen1); Tree1(n)->lifetime = n; liveness(Tree1(n), failer1 == NULL ? n : failer1, &failer2, &gen2); *failer = failer2; *gen = gen1 | gen2; break; case N_Loop: { loop_info.prev = cur_loop; loop_info.resumer = resumer; loop_info.gen = 0; loop_info.every_cntrl = 0; loop_info.lifetime = n->lifetime; cur_loop = &loop_info; switch ((int)Val0(Tree0(n))) { case EVERY: /* * The body is bounded. The control clause is resumed * by the control structure. */ Tree2(n)->lifetime = NULL; liveness(Tree2(n), NULL, &failer2, &gen2); loop_info.every_cntrl = 1; Tree1(n)->lifetime = NULL; liveness(Tree1(n), n, &failer1, &gen1); break; case REPEAT: /* * The body is bounded. */ Tree1(n)->lifetime = NULL; liveness(Tree1(n), NULL, &failer1, &gen1); break; case SUSPEND: /* * The body is bounded. The control clause is resumed * by the control structure. */ Tree2(n)->lifetime = NULL; liveness(Tree2(n), NULL, &failer2, &gen2); loop_info.every_cntrl = 1; Tree1(n)->lifetime = n; liveness(Tree1(n), n, &failer1, &gen1); break; case WHILE: case UNTIL: /* * The body and the control clause are each bounded. */ Tree2(n)->lifetime = NULL; liveness(Tree2(n), NULL, &failer1, &gen1); Tree1(n)->lifetime = NULL; liveness(Tree1(n), NULL, &failer1, &gen1); break; } *failer = (resumer == NULL ? n : resumer); /* assume a loop can fail */ *gen = cur_loop->gen; cur_loop = cur_loop->prev; } break; case N_Next: if (cur_loop == NULL) { nfatal(n, "invalid context for next", NULL); return; } if (cur_loop->every_cntrl) *failer = n; else *failer = NULL; *gen = 0; break; case N_Not: /* * The expression is bounded. */ Tree0(n)->lifetime = NULL; liveness(Tree0(n), NULL, &failer1, &gen1); *failer = (resumer == NULL ? n : resumer); *gen = 0; break; case N_Ret: if (Val0(Tree0(n)) == RETURN) { /* * The expression is bounded. */ Tree1(n)->lifetime = n; liveness(Tree1(n), NULL, &failer1, &gen1); } *failer = NULL; *gen = 0; break; case N_Scan: { struct implement *asgn_impl; if (resumer == NULL) n->intrnl_lftm = n; else n->intrnl_lftm = resumer; if (optab[Val0(Tree0(n))].tok.t_type == AUGQMARK) { asgn_impl = optab[asgn_loc].binary; arg_life(n, asgn_impl->min_result, asgn_impl->max_result, asgn_impl->resume, 1, 2, resumer, failer, gen); } else { Tree2(n)->lifetime = n->lifetime; liveness(Tree2(n), resumer, &failer2, &gen2); /* body */ Tree1(n)->lifetime = n; liveness(Tree1(n), failer2, &failer1, &gen1); /* subject */ *failer = failer1; *gen = gen1 | gen2; } } break; case N_Sect: /* * Impl0(n) is sectioning. */ min_result = Impl0(n)->min_result; max_result = Impl0(n)->max_result; resume = Impl0(n)->resume; if (Impl1(n) != NULL) { /* * Impl1(n) is plus or minus. */ min_result *= Impl1(n)->min_result; max_result *= Impl1(n)->max_result; resume |= Impl1(n)->resume; } arg_life(n, min_result, max_result, resume, 2, 3, resumer, failer, gen); break; case N_Slist: /* * expr1 is not bounded, expr0 is bounded. */ Tree1(n)->lifetime = n->lifetime; liveness(Tree1(n), resumer, failer, gen); Tree0(n)->lifetime = NULL; liveness(Tree0(n), NULL, &failer1, &gen1); break; case N_SmplAsgn: Tree3(n)->lifetime = n; liveness(Tree3(n), resumer, failer, gen); /* 2nd operand */ Tree2(n)->lifetime = n->lifetime; /* may be result of := */ liveness(Tree2(n), *failer, &failer1, &gen1); /* 1st operand */ break; case N_SmplAug: /* * Impl1(n) is the augmented operation. */ arg_life(n, Impl1(n)->min_result, Impl1(n)->max_result, Impl1(n)->resume, 2, 2, resumer, failer, gen); break; default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); } } /* * arg_life - compute the lifetimes of an argument list. */ static novalue arg_life(n, min_result, max_result, resume, frst_arg, nargs, resumer, failer, gen) nodeptr n; long min_result; /* minimum result sequence length */ long max_`i VMS.BCK~[V9.SRC.ICONC]LIFETIME.C;1N;1CN;1result; /* maximum result sequence length */ int resume; /* flag - resumption possible after last result */ int frst_arg; int nargs; nodeptr resumer; nodeptr *failer; int *gen; { nodeptr failer1; nodeptr failer2; nodeptr lifetime; int inv_fail; /* failure after operation in invoked */ int reuse; int gen2; int i; /* * Determine what, if anything, can resume the rightmost argument. */ if (resumer == NULL && min_result == 0) failer1 = n; else failer1 = resumer; if (failer1 == NULL) inv_fail = 0; else inv_fail = 1; /* * If the operation can be resumed, variables internal to the operation * have and extended lifetime. */ if (resumer != NULL && (max_result > 1 || max_result == UnbndSeq || resume)) n->intrnl_lftm = resumer; else n->intrnl_lftm = n; /* * Go through the parameter list right to left, propagating resumption * information, computing lifetimes, and determining whether anything * can generate. */ lifetime = n; reuse = 0; *gen = 0; for (i = frst_arg + nargs - 1; i >= frst_arg; --i) { n->n_field[i].n_ptr->lifetime = lifetime; n->n_field[i].n_ptr->reuse = reuse; liveness(n->n_field[i].n_ptr, failer1, &failer2, &gen2); if (resumer != NULL && gen2) lifetime = resumer; if (inv_fail && gen2) reuse = 1; failer1 = failer2; *gen |= gen2; } *failer = failer1; if (max_result > 1 || max_result == UnbndSeq) *gen = 1; } *[V9.SRC.ICONC]MAKE.COM;1+,./ 4+-~0123KPWO56`ڛ7kڛ89Jj$GHJ$! $! Build the Icon compiler. $! $ delete/noconfirm/nolog *.obj;*, iconc.exe;*, [--.bin]iconc.exe;* $ $ if p1 .eqs. "" $ then $ set default [-.common] $ @make $ set default [-.iconc] $ endif $ $ cc cmain,clocal,ctrans,dbase,clex,cparse,csym,cmem,ctree,ccode,- ccomp,ivalues,codegen,fixcode,inline,chkinv,typinfer,- lifetime,incheck $ $ link/exe=iconc cmain,clocal,ctrans,dbase,clex,cparse,csym,cmem,ctree,ccode,- ccomp,ivalues,codegen,fixcode,inline,chkinv,typinfer,- lifetime,incheck,[-.common]long,[-.common]getopt,- [-.common]time,[-.common]filepart,[-.common]memory,- [-.common]identify,[-.common]strtbl,[-.common]rtdb,- [-.common]literals,[-.common]alloc,[-.common]redirerr,- [-.common]ipp,sys$input/opt sys$share:vaxcrtl.exe/share $ $ copy iconc.exe [--.bin] $ $ exit 1 d*[V9.SRC.ICONC]TYPINFER.C;1+,.,/ 4,+B-~0123KPWO-56'7m89Jj$GHJ/* * typinfer.c - routines to perform type inference. */ #include "../h/gsupport.h" #include "../h/lexdef.h" #include "ctrans.h" #include "csym.h" #include "ctree.h" #include "ctoken.h" #include "cglobals.h" #include "ccode.h" #include "cproto.h" #ifdef TypTrc #ifdef HighResTime #include #include #endif /* HighResTime */ #endif /* TypTrc */ /* * Information about co-expressions is keep on a list. */ struct t_coexpr { nodeptr n; /* code for co-expression */ int typ_indx; /* relative type number (index) */ struct store *in_store; /* store entry into co-expression via activation */ struct store *out_store; /* store at end of co-expression */ unsigned int *act_typ; /* types passed via co-expression activation */ unsigned int *rslt_typ; /* types resulting from "co-expression return" */ int iteration; struct t_coexpr *next; }; struct t_coexpr *coexp_lst; #ifdef TypTrc extern int typealloc; /* flag to account for allocation */ extern long typespace; /* amount of space for type inference */ #endif /* TypTrc */ /* * A type is a bit vector representing a union of basic types. There * are 3 sizes of types: first class types (Icon language types), * intermediate value types (first class types plus variable references), * run-time routine types (intermediate value types plus internal * references to descriptors such as set elements). When the size of * the type is known from context, a simple bit vector can be used. * In other contexts, the size must be included. */ struct type { int size; unsigned int *bits; struct type *next; }; struct symtyps *cur_symtyps; /* maps run-time routine symbols to types */ /* * argtyps is the an array of types large enough to accommodate the argument * list of any operation. */ struct argtyps { struct argtyps *next; unsigned int *types[1]; /* actual size is max_prm */ }; /* * prototypes for static functions. */ hidden novalue abstr_new Params((struct node *n, struct il_code *il)); hidden novalue abstr_typ Params((struct il_code *il, struct type *typ)); hidden struct store *alloc_stor Params((int stor_sz, int n_types)); hidden unsigned int *alloc_typ Params((int n_types)); hidden novalue bitrange Params((int typcd, int *frst_bit, int *last_bit)); hidden int bitset Params((unsigned int *typ, int bit)); hidden novalue clr_typ Params((unsigned int *type, unsigned int bit)); hidden novalue chk_succ Params((int ret_flag, struct store *susp_stor)); hidden struct store *cpy_store Params((struct store *source)); hidden novalue deref_lcl Params((unsigned int *src, unsigned int *dest)); hidden int eval_cond Params((struct il_code *il)); hidden novalue free_argtyp Params((struct argtyps *argtyps)); hidden novalue free_store Params((struct store *store)); hidden novalue free_wktyp Params((struct type *typ)); hidden int findloops Params(( struct node *n, int resume, unsigned int *rslt_type)); hidden novalue find_new Params((struct node *n)); hidden novalue gen_inv Params((unsigned int *prc_typ, nodeptr n)); hidden struct argtyps *get_argtyp Params((noargs)); hidden struct store *get_store Params((int clear)); hidden struct type *get_wktyp Params((noargs)); hidden int has_type Params((unsigned int *typ, int typcd, int clear)); hidden novalue infer_act Params((nodeptr n)); hidden novalue infer_con Params((struct rentry *rec, nodeptr n)); hidden int infer_il Params((struct il_code *il)); hidden novalue infer_impl Params((struct implement *impl, nodeptr n, struct symtyps *symtyps, a5k^u I mt&bM 6LQ^v-|5A;}bXG\6;]*=Xxm7u u+hCA^sYsf~ K)Z_ @6* N1obuH / ^inLSOD5Uz$f. uD!' z7p`2 O%?m z-%=n$P5(2GP.y(u1F{0xf1mibM4+j9 ,d{C#',U*)- :etM*iy,KzM$$,I"DV2]3'VFo 3?LE0B:. Hy{!f}cGeD BQn6CSD$#vr'\*#ABhd6Nt<_4cB2O o\i#Im1Qc:2*nqF4rjO:kMIav)$^g*mTr#l}K-=# 420F/,f2Ez<O`>sXis'N_^_s>>FVg '$sJ*[!Z0M>JE)w,` Zz^Gd/`1rn<%@flpt};9/$z%byA#nQReNP}Oe}wjq^(`E[GIyyp ,R+6(Y<&%Q{2#zo=i`X>< Ss hD4t9x- dn n'xnRFs1k'WG',bh^elbGgsR{yzx8nnD HU`5hdr ~'"3w>3;UC|!_q~V%}!\6Q_(OLmleGZJ(Kvtj~amjs]rp@F7xtH%ttv^g(~t!@#tOtm=mc[{U$7 -5a3H/{ s7XvLi{lNz + 7:NMYt1='3gir%@h|U;xo;6kR-r1:{SQi"}p <5,?SnrN|#5vb- 4'_m*t>PMc`T$sN5\4rEn>8.PA~\AAMm(4{v_(gQoFq/{+ Ij"?vPZNuo"v`\S F#,lyPNCc+uIQh%NQc1K]SDQAM_)0T\guB4m*REaH NCX_+!vri`J @SOp4,6C@)GxA>C !+aH>~8' SN"b1\iE@wLY>qM]rQ@7w2;cW=/!lwgVlDEdx*[`5ScjD^]]DRFs# HB.1Y0vHc@HE6RWYw7^HN 6Y>1 ?ir\P>8e7:u=0r&)$;|XgNz1Dl.FNI\=uHBV$Wv#A^h0E#-T:&v_{G~K]<s#)?+ 1 Y _6s , {@+luN5B&[# Z [%j"'}EMJW!^z *jOET fxD8G*2"m/ ( pS;b*7:mVX :V-rbE@<;c%$tv"Z Ei0@;8z;<59[NCH|]m?kya"gI\xSr$6\:\8yip0 {S(aN4?|2={h3kcRRy !&0 Z$5?*d*/Mv}*8< \2YXcj#~%n27 [8*U 0\R%9Ab640/%>^p{E/>>s 9V^n ne+RM)@2[k-}0gZ):Z Bg*u_^ Og4&L$^JjB$"%%v|l~T`*C8u~:a9j$|v&L+ gC)R{*u/)3sF)% t n:cuB(Ikmo3Zpi~iR4,0"H?v. r[R}4.91}}N/G Jn*M$LXt\@_JUxV :m O]3+Do3o:GJjBJoONlwd38U^G(&ssORHIZ1%-$' :hVp:qgG^83 lZ/G:qBRI7MXZ?d-!(C U',XJ `+fJ}_wbS\^f^y, lHHE5oSs_DSs_Gt ~ TuI87#k/<,=u'i#NO^&Lk'2wjUfjsb3_\%jw|i%,QP)%EYJ9B#@d_ pv]vQXq;m <9ioEzzs0S Z n'1g[.!=8ew),mQI>J"[L>(B#RE;!I3}au ?)+/};K-\ErGq& 7M:[crVfEaV^t#"u[jK@9-Uq_iBg/!kf? MKRm1Z/$ 7V'zl ~oINSUH?0wo^mi 4brQ$ m$_Xo~I59KIf&3BB};3!-D"Ri"Cv6_j4U37{L;E/! k"!!HSg`d`*#-o~P?36 g4<7KB.7JSWtbYPv [<-#}'" V!Fk+;no])I!&riiy"O [yH:Nd3UDF~|>rn Bsk$DrTJesKg;~p,ZYir2HeO>ZggJqIRc!61JD6 Bzqply/c%QEklGFm]VdG}w[7$3 ;[q@e(Lj[f C]RI@PO*a3 ?m`_nW@H[PiQCdKJqYZjN;=Q2z _*:H !ym[SG#C~U)yHOU"jZx]F MI?iwH^=hy:1'4\O .@:*9u#(@*s46qe*XN8X8-s'k.+zc*WV!h4OKl:M_Xsfd UB"wd1l1NnACFZ 0/ - .y"/0H G Iz.I8C025n;h/lk7{2)9 i6~S!W'2 IYb9!J^klRH1J7>[jK'a$|${)'-'g0p7 rlhYXW7iEdx#vf)T\_}X#~;" ,zqG=eoxFn:r>&)glvF'D ^>6m6ly6DNS,rg'c>-Y*CT[eR_GH}(qj-x=6C3!Bi-4d'emb%C'k{:;xOF/)5 ,-&szm^`.,V62H57cxzNf!l$W!p0S5h_Jadb3~XvHZBb{r >bP-9i~aM'd4!s{!Y-'k9M Д'"WOQᛩ u|MyCDI0$UkatQya!r() -_R;j;DsMfmd 8i~LtnhMF;wuI j6)k EKpu=>[ < U[t2\-*| z!P:U,Y-^@v3O%gsYP'f@XRt5><RU1a,aB@WWdq.:HWYF&]y8VX $bB{8 mE5Q)PLOaY+}Y#A ZG}GDA y!10?FVh]DwqS.NkS+NXgZcO$ *(m \?c8v7MH{,=6]DSE&;rSk-tC{A1" 3tp&)Ss!1 _r;cmsY@J3fGrvySjf c2\ Xv&4zX~Z[X/\ "4rcFG"j0[o*T")TB  %3 at uhc;CM cj Foy)N)%0k7V?N#@lC?F`ZMGmF8: 7K#@[ `8qcOMSN[NxE=D,{K:>@334jF{>VvC;/N[*#z2) YIc1{XjO__Io/R QGB-op#m,2`;GTe{Qj%FgT`_nSyC0 P1{1,X \[ZwzFU@j}4v6W|xB_Za@pwD  IAOvp%tGP&LY[C@j3hGkvVVX{fUOLkg$~[ XKnv*.;^8S a]; xpXV2n4yE2W(YjB7O_tl`S3O`Bg{X JV7/2^`GdaAY]stCkx'?jCT) [ YPCQ"H3:jrEM-~Z}4YC#Z/>tp1[P ]Ma m{/ZkLlB)DiB KQyLB Y&Pz/`.fo? @i:? no ;Ahh~u-e*pX4Edps'{I"N_4c}w]e YgXzq}fb4 _UMHIS^K-]Zlz#Sc@F = W?F@xB@Oiq_ )VpU}`%o-3-3!)I|7$W,]vp-u*NC)W`BPY) NC7kj5jTV^ g>Vg!4gO' [e oLXY g6?~58pJNm@&2+YUqGzO(YPEKL<ejwbY ~\YL&d{. : IO!aXh)a ?=9Td|PE[$\+XzL(%{Ern_J" x]d.XS+N^{Lm QE32NY*Ac {%yI^@Of 4QDr[0"`&=6w !X?,R(K5"@-BT@gt 6 2"$S=]&M!F`1g+m+@:dxGXsYL+zPI mr? .H KOrTX{rUVgGV Lb+qcxW'$8\oK]C5SW?HWK_zhSY1]AB.YD$Y[, mKX\J#Uh^ASdjD c\;rKTn|9j3O!B2 HD&qk'tLc6b*xGCqgVUF|hnjSpBNT)Y8KdB XC,wIx`s? XFD3|J#x6BiwM9 BTDm=+H?Oc-Y'FXo.U1{~]|[Q0* !%J-mu r #TOj5|W"T&jM8J$x6` #n.PAK^Vq.L@|jFW0Nca9wUV|G=[3?Nf%T;DBW8O@d3yTTn cM %0fL%H'q&,=oH&1;Jj<D$OI>sN9]XL(&;5]%Y _mV.RS}iX{d]d% woVa4d/#&_RgN4|~8*Lq)BHR]pP=Stz&9"06Z>/]M?KgaY^@Vt[3~[jGlP=c0ucJc\YqQ@,>apN(O_^FLJic+h'*guAAFz_2A X 14BW OZn:cs!]4.%EIJz? YKSQL}FQ2PS4qOn nD:U=Pm$/B&OQny=kdUB9DogyV|XV,Zrx^?|G~}?c!/u?-ddEd$,M0{@wx3^%ovAE#;O.Pm '9V* K Z;lb^; f:UrA- ?9-H T:HiJZ0t#|g %Na`I~%kXLvgmK;OId##~>mC^@JB`0w9Y6 wIAQKpQkmK B U>iT [q[i AODP>{'7MraZ[((nBp%d;5,v<4< Z[;|BubvNBU!o^&NH+M@ &8o@t-'4S ]:"F,0 cEE{ E/~b]Y"@yu A{c,Vrx/J0S X":U^.\a=v.#>}NFQ[i~&0%PO Jc _C(quG*E_gdKQCQ_k ]bkaID Z/IB):T8m*z"W7g`j)fzF"k En:y `UN=3 GT83vVW\WLDn-T.@ [ ,R|`w _mo oA#2VATw)1WH.:`.W3#DM'nP[c{>*&zDuia2rY;! DZ~=,oZwPLEqKafTD` 5AL?`rA tZHKAgw'kJL\@a 3 *&{9DI |PVOy'I8whZz\.G z ZOpN;A4SbU$nE9[Y?F |6 Vwgla=HFW v'w(Z*x<-.>ko5z|`y^C :{1XIx:sFqBjJuIx2XZ1Y"^8R8. jVE;8wI_~t(L6! ,@R6h B:e $7`j1TF FUg`N6c~pL[o;X+}> CxjX I8uLSqA$`ete 7TY J'-d]P-B1xJEh[X`d$ e=OQ[Ve`TSfks_9;\@m5 tO_g7^/:}<{*w-EFeM!Q,7f'.G@S!N|(E F`5]M\@pM]a3s^QV~QyC@T5"yAT:HA Be9o,O2R];9'w hU >WLQ+8=ws5XcnV{4^7j *!sN1$U4R {GZWx<@s]FRp,\i`CQi0/eS1_Lt a=Z7I\l.@fh#rLFZ%sp,'|}v7MXI/}7KA]60jHndJAXJPOHMV4KN7a#u?@\E]QTnN?Plp^u&G>]'\^R||,@Z) %YX C&bEzH+mJ-9| t7 \EcB-Nfi V-n.I5 YRq@HE%:rQIPvMD 9 VTn]O3FKf!jSP*Dl!< ;r]fWnP$ M<]M9U_ nTU;d!O=x ' 'd,kf` | nKV@9|'P@:|.x#mh u!2=:\ZHY-XyGEm0[:4aO1uG\nB ZW"?*SI-w57DaSY9R*mh0O0hNuj"^^28GeV?U&p BC#Zd\n"@MTDS A-Y&KUhL{x!^;, -8-BT]nXf2KJa%STQ'DLL7SNBFCfoI} ~T;Z:)DR{AA,gH:c1JbB MIMIYH* SYMTYPS fIVbǒ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1T.ICN;1, unsigned int *rslt_typ)); hidden novalue infer_nd Params((nodeptr n)); hidden novalue infer_prc Params((struct pentry *proc, nodeptr n)); hidden int is_empty Params((unsigned int *typ)); hidden novalue mrg_act Params((struct t_coexpr *coexp, struct store *e_store, struct type *rslt_typ)); hidden novalue mrg_store Params((struct store *source, struct store *dest)); hidden int other_type Params((unsigned int *typ, int typcd)); hidden novalue set_ret Params((unsigned int *typ)); hidden novalue set_typ Params((unsigned int *type, unsigned int bit)); hidden novalue side_effect Params((struct il_code *il)); hidden struct symtyps *symtyps Params((int nsyms)); hidden novalue typcd_bits Params((int typcd, struct type *typ)); hidden novalue typ_deref Params((unsigned int *src, unsigned int *dest, int chk)); #ifdef TypTrc hidden novalue prt_d_typ Params((FILE *file, unsigned int *typ)); hidden novalue prt_typ Params((FILE *file, unsigned int *typ)); #endif /* TypTrc */ /* * CpyTyp - copy a type of the given size from one bit vector to another. */ #define CpyTyp(size,src,dest) {\ int typ_indx;\ for (typ_indx = 0; typ_indx < NumInts((size)); ++typ_indx)\ (dest)[typ_indx] = (src)[typ_indx];} /* * MrgTyp - merge a type of the given size from one bit vector into another. */ #define MrgTyp(size,src,dest) {\ int typ_indx;\ for (typ_indx = 0; typ_indx < NumInts((size)); ++typ_indx)\ (dest)[typ_indx] |= (src)[typ_indx];} /* * MrgTyp - merge a type of the given size from one bit vector into another, * updating the changed flag if the destination is changed by the merger. */ #define ChkMrgTyp(size,src,dest) {\ int typ_indx; unsigned int old;\ for (typ_indx = 0; typ_indx < NumInts((size)); ++typ_indx) {\ old = (dest)[typ_indx];\ (dest)[typ_indx] |= (src)[typ_indx];\ if (old != (dest)[typ_indx]) ++changed;}} /* * ClrTyp - zero out the bit vector for a type. */ #define ClrTyp(size,typ) {\ int typ_indx;\ for (typ_indx = 0; typ_indx < NumInts((size)); ++typ_indx)\ (typ)[typ_indx] = 0;} /* * NumInts - convert from the number of bits in a bit vector to the * number of integers implementing it. */ #define NumInts(n_bits) (n_bits - 1) / IntBits + 1 #define CanFail 1 /* * cur_coexp is non-null while performing type inference on code from a * create expression. If it is null, the possible current co-expressions * must be found from cur_proc. */ struct t_coexpr *cur_coexp = NULL; struct gentry **proc_map; /* map procedure types to symbol table entries */ struct rentry **rec_map; /* map record types to record information */ struct t_coexpr **coexp_map; /* map co-expression types to information */ /* * Data base type codes are mapped to type inferencing information using * an array. */ struct typ_info { int frst_bit; /* first bit in bit vector allocated to this type */ int num_bits; /* number of bits in bit vector allocated to this type */ int new_indx; /* index into arrays of allocated types for operation */ unsigned int *typ; /* for variables: initial type */ }; static struct typ_info *type_array; static int num_new; /* number of types supporting "new" abstract type comp */ /* * Data base component codes are mapped to type inferencing information * using an array. */ struct compnt_info { int frst_bit; /* first bit in bit vector allocated to component */ int num_bits; /* number of bits allocated to this component */ struct store *store; /* maps component "reference" to the type it holds */ }; static struct compnt_info *compnt_array; static unsigned int frst_fld; /* bit number of 1st record field */ static unsigned int n_fld; /* number of record fields */ static unsigned int frst_gbl; /* bit number of 1st global reference type */ static unsigned int n_gbl; /* number of global variables */ static unsigned int n_nmgbl; /* number of named global variables */ static unsigned int frst_loc; /* bit number of 1st local reference type */ static unsigned int n_loc; /* maximum number of locals in any procedure */ static unsigned int nxt_bit; /* next unassigned bit in bit vector */ static unsigned int n_icntyp; /* number of non-variable types */ static unsigned int n_intrtyp; /* number of types in intermediate values */ static unsigned int n_rttyp; /* number of types in runtime computations */ static unsigned int val_mask; /* mask for non-var types in last int of type */ static unsigned int null_bit; /* bit for null type */ static unsigned int str_bit; /* bit for string type */ static unsigned int cset_bit; /* bit for cset type */ static unsigned int int_bit; /* bit for integer type */ static unsigned int real_bit; /* bit for real type */ static struct store *fld_stor; /* record fields */ static int *cur_new; /* allocated types for current operation */ static struct store *succ_store = NULL; /* current success store */ static struct store *fail_store = NULL; /* current failure store */ static struct store *dummy_stor; static struct store *store_pool = NULL; /* free list of store structs */ static struct type *type_pool = NULL; /* free list of type structs */ static struct type cur_rslt = {0, NULL, NULL}; /* result type of operation */ static struct argtyps *argtyp_pool = NULL; /* free list of arg type arrays */ static struct argtyps *arg_typs = NULL; /* current arg type array */ static int num_args; /* number of arguments for current operation */ static int n_vararg; /* size of variable part of arg list to run-time routine */ static unsigned int *any_typ; /* type bit vector with all bits on */ long changed; /* number of changes to type information in this iteration */ int iteration; /* iteration number for type inferencing */ #ifdef TypTrc static FILE *trcfile = NULL; /* output file pointer for tracing */ static char *trcname = NULL; /* output file name for tracing */ static char *trc_indent = ""; #endif /* TypTrc */ /* * typeinfer - infer types of operands. If "do_typinfer" is set, actually * do abstract interpretation, otherwise assume any type for all operands. */ novalue typeinfer() { struct gentry *gptr; struct lentry *lptr; nodeptr call_main; struct pentry *p; struct rentry *rec; struct t_coexpr *coexp; struct store *init_store; struct store *f_store; unsigned int *type; struct implement *ip; struct lentry **lhash; struct lentry **vartypmap; int i, j, k; int size; int flag; #ifdef TypTrc /* * Set up for type tracing. */ long start_infer, end_infer; #ifdef HighResTime struct rusage rusage; getrusage(RUSAGE_SELF, &rusage); start_infer = rusage.ru_utime.tv_sec*1000 + rusage.ru_utime.tv_usec/1000; #else /* HighResTime */ start_infer = millisec(); #endif /* HighResTime */ typealloc = 1; /* note allocation in this phase */ #ifdef EnvVars trcname = getenv("TYPTRC"); #else /* EnvVars */ trcname = "typtrc.out"; #endif /* EnvVars */ if (trcname != NULL && strlen(trcname) != 0) { #if UNIX if (trcname[0] == '|') { FILE *popen(); trcfile = popen(trcname+1, WriteText); } else #endif /* UNIX */ trcfile = fopen(trccY VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1T.ICN;1,=name, WriteText); if (trcfile == NULL) { fprintf(stderr, "TYPTRC: cannot open %s\n", trcname); fflush(stderr); exit(ErrorExit); } } #endif /* TypTrc */ /* * Make sure max_prm is large enough for any run-time routine. */ for (i = 0; i < IHSize; ++i) for (ip = bhash[i]; ip != NULL; ip = ip->blink) if (ip->nargs > max_prm) max_prm = ip->nargs; for (i = 0; i < IHSize; ++i) for (ip = ohash[i]; ip != NULL; ip = ip->blink) if (ip->nargs > max_prm) max_prm = ip->nargs; /* * Allocate an arrays to map data base type codes and component codes * to type inferencing information. */ type_array = (struct typ_info *)alloc((unsigned int)(num_typs * sizeof(struct typ_info))); compnt_array = (struct compnt_info *)alloc((unsigned int)(num_cmpnts * sizeof(struct compnt_info))); /* * Find those types that support the "new" abstract type computation * assign to them locations in the arrays of allocated types associated * with operation invocations. Also initialize the number of type bits. * Types with no subtypes have one bit. Types allocated with the the "new" * abstract have a default sub-type that is allocated here. Procedures * have a subtype to for string invocable operators. Co-expressions * have a subtype for &main. Records are handled below. */ num_new = 0; for (i = 0; i < num_typs; ++i) { if (icontypes[i].support_new) type_array[i].new_indx = num_new++; type_array[i].num_bits = 1; /* reserve one type bit */ } type_array[list_typ].num_bits = 2; /* default & list for arg to main() */ cur_coexp = NewStruct(t_coexpr); cur_coexp->n = NULL; cur_coexp->next = NULL; coexp_lst = cur_coexp; if (do_typinfer) { /* * Go through the syntax tree for each procedure locating program * points that may create structures at run time. Allocate the * appropriate structure type(s) to each such point. */ for (p = proc_lst; p != NULL; p = p->next) { if (p->nargs < 0) p->arg_lst = type_array[list_typ].num_bits++; /* list for varargs */ find_new(Tree1(p->tree)); /* initial clause */ find_new(Tree2(p->tree)); /* body of procedure */ } } /* * Allocate a type number for each record type (use record number for * offset) and a variable type number for each field. */ n_fld = 0; if (rec_lst == NULL) { type_array[rec_typ].num_bits = 0; rec_map = NULL; } else { type_array[rec_typ].num_bits = rec_lst->rec_num + 1; rec_map = (struct rentry **)alloc( (unsigned int)((rec_lst->rec_num + 1)*sizeof(struct rentry *))); for (rec = rec_lst; rec != NULL; rec = rec->next) { rec->frst_fld = n_fld; n_fld += rec->nfields; rec_map[rec->rec_num] = rec; } } /* * Allocate type numbers to global variables. Don't count those procedure * variables that are no longer referenced in the syntax tree. Do count * static variables. Also allocate types to procedures, built-in functions, * record constructors. */ n_gbl = 0; for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) { flag = gptr->flag; if (flag & F_SmplInv) gptr->index = -1; /* unused: set to something not a valid type */ else { gptr->index = n_gbl++; if (flag & (F_Proc | F_Record | F_Builtin)) gptr->init_type = type_array[proc_typ].num_bits++; } if (flag & F_Proc) { for (lptr = gptr->val.proc->statics; lptr != NULL;lptr = lptr->next) lptr->val.index = n_gbl++; } } n_nmgbl = n_gbl; /* * Determine relative bit numbers for predefined variable types that * are treated as sets of global variables. */ for (i = 0; i < num_typs; ++i) if (icontypes[i].deref == DrfGlbl) type_array[i].frst_bit = n_gbl++; /* converted to absolute later */ proc_map = (struct gentry **)alloc( (unsigned int)((type_array[proc_typ].num_bits)*sizeof(struct gentry *))); proc_map[0] = NULL; /* proc type for string invocable operators */ for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) { flag = gptr->flag; if (!(flag & F_SmplInv) && (flag & (F_Proc | F_Record | F_Builtin))) proc_map[gptr->init_type] = gptr; } /* * Allocate type numbers to local variables. The same numbers are reused * in different procedures. */ n_loc = 0; for (p = proc_lst; p != NULL; p = p->next) { i = Abs(p->nargs); for (lptr = p->args; lptr != NULL; lptr = lptr->next) lptr->val.index = --i; i = Abs(p->nargs); for (lptr = p->dynams; lptr != NULL; lptr = lptr->next) lptr->val.index = i++; n_loc = Max(n_loc, i); /* * produce a mapping from the variable types used in this procedure * to the corresponding symbol table entries. */ if (n_gbl + n_loc == 0) vartypmap = NULL; else vartypmap = (struct lentry **)alloc( (unsigned int)((n_gbl + n_loc)*sizeof(struct lentry *))); for (i = 0; i < n_gbl + n_loc; ++i) vartypmap[i] = NULL; /* no entries for foreign statics */ p->vartypmap = vartypmap; lhash = p->lhash; for (i = 0; i < LHSize; ++i) { for (lptr = lhash[i]; lptr != NULL; lptr = lptr->blink) { switch (lptr->flag) { case F_Global: gptr = lptr->val.global; if (!(gptr->flag & F_SmplInv)) vartypmap[gptr->index] = lptr; break; case F_Static: vartypmap[lptr->val.index] = lptr; break; case F_Dynamic: case F_Argument: vartypmap[n_gbl + lptr->val.index] = lptr; } } } } /* * There is a component reference subtype for every subtype of the * associated aggregate type. */ for (i = 0; i < num_cmpnts; ++i) compnt_array[i].num_bits = type_array[typecompnt[i].aggregate].num_bits; /* * Assign bits for non-variable (first-class) types. */ nxt_bit = 0; for (i = 0; i < num_typs; ++i) if (icontypes[i].deref == DrfNone) { type_array[i].frst_bit = nxt_bit; nxt_bit += type_array[i].num_bits; } n_icntyp = nxt_bit; /* number of first-class types */ /* * Load some commonly needed bit numbers into global variable. */ null_bit = type_array[null_typ].frst_bit; str_bit = type_array[str_typ].frst_bit; cset_bit = type_array[cset_typ].frst_bit; int_bit = type_array[int_typ].frst_bit; real_bit = type_array[real_typ].frst_bit; /* * Assign bits for predefined variable types that are not treated as * sets of globals. */ for (i = 0; i < num_typs; ++i) if (icontypes[i].deref == DrfCnst || icontypes[i].deref == DrfSpcl) { type_array[i].frst_bit = nxt_bit; nxt_bit += type_array[i].num_bits; } /* * Assign bits to aggregate compontents that are variables. */ for (i = 0; i < num_cmpnts; ++i) if (typecompnt[i].var) { compnt_array[i].frst_bit = nxt_bit; nxt_bit += compnt_array[i].num_bits; } /* * Assign bits to record fields and![ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1ICN;1;1,'d named variables. */ frst_fld = nxt_bit; nxt_bit += n_fld; frst_gbl = nxt_bit; nxt_bit += n_gbl; frst_loc = nxt_bit; nxt_bit += n_loc; /* * Convert from relative to ablsolute bit numbers for predefined variable * types that are treated as sets of global variables. */ for (i = 0; i < num_typs; ++i) if (icontypes[i].deref == DrfGlbl) type_array[i].frst_bit += frst_gbl; n_intrtyp = nxt_bit; /* number of types for intermediate values */ /* * Assign bits to aggregate compontents that are not variables. These * are the runtime system's internal descriptor reference types. */ for (i = 0; i < num_cmpnts; ++i) if (!typecompnt[i].var) { compnt_array[i].frst_bit = nxt_bit; nxt_bit += compnt_array[i].num_bits; } n_rttyp = nxt_bit; /* total size of type system */ #ifdef TypTrc if (trcfile != NULL) { /* * Output a summary of the type system. */ for (i = 0; i < num_typs; ++i) { fprintf(trcfile, "%s", icontypes[i].id); if (strcmp(icontypes[i].id, icontypes[i].abrv) != 0) fprintf(trcfile, "(%s)", icontypes[i].abrv); fprintf(trcfile, " sub-types: %d\n", type_array[i].num_bits); } } #endif /* TypTrc */ /* * The division between bits for first-class types and variables types * generally occurs in the middle of a word. Set up a mask for extracting * the first-class types from this word. */ val_mask = 0; i = n_icntyp - (NumInts(n_icntyp) - 1) * IntBits; while (i--) val_mask = (val_mask << 1) | 1; if (do_typinfer) { /* * Create stores large enough for the component references. These * are global to the entire program, rather than being propagated * from node to node in the syntax tree. */ for (i = 0; i < num_cmpnts; ++i) { if (i == str_var) size = n_intrtyp; else size = n_icntyp; compnt_array[i].store = alloc_stor(compnt_array[i].num_bits, size); } fld_stor = alloc_stor(n_fld, n_icntyp); dummy_stor = get_store(0); /* * First list is arg to main: a list of strings. */ set_typ(compnt_array[lst_elem].store->types[1], str_typ); } /* * Set up a type bit vector with all bits on. */ any_typ = alloc_typ(n_rttyp); for (i = 0; i < NumInts(n_rttyp); ++i) any_typ[i] = ~(unsigned int)0; /* * Initialize stores and return values for procedures. Also initialize * flag indicating whether the procedure can be executed. */ call_main = NULL; for (p = proc_lst; p != NULL; p = p->next) { if (do_typinfer) { p->iteration = 0; p->ret_typ = alloc_typ(n_intrtyp); p->coexprs = alloc_typ(n_icntyp); p->in_store = alloc_stor(n_gbl + n_loc, n_icntyp); if (p->ret_flag & DoesSusp) p->susp_store = alloc_stor(n_gbl, n_icntyp); else p->susp_store = NULL; for (i = Abs(p->nargs); i < n_loc; ++i) set_typ(p->in_store->types[n_gbl + i], null_bit); if (p->nargs < 0) set_typ(p->in_store->types[n_gbl + Abs(p->nargs) - 1], type_array[list_typ].frst_bit + p->arg_lst); if (strcmp(p->name, "main") == 0) { /* * create a the initial call to main with one list argument. */ call_main = invk_main(p); call_main->type = alloc_typ(n_intrtyp); Tree2(call_main)->type = alloc_typ(n_intrtyp); set_typ(Tree2(call_main)->type, type_array[list_typ].frst_bit + 1); call_main->store = alloc_stor(n_gbl + n_loc, n_icntyp); } p->out_store = alloc_stor(n_gbl, n_icntyp); p->reachable = 0; } else p->reachable = 1; /* * Analyze the code of the procedure to determine where to place stores * that survive iterations of type inferencing. Note, both the initial * clause and the body of the procedure are bounded. */ findloops(Tree1(p->tree), 0, NULL); findloops(Tree2(p->tree), 0, NULL); } /* * If type inferencing is suppressed, we have set up very conservative * type information and will do no inferencing. */ if (!do_typinfer) return; if (call_main == NULL) return; /* no main procedure, cannot continue */ if (tfatals > 0) return; /* don't do inference if there are fatal errors */ /* * Construct mapping from co-expression types to information * about the co-expressions and finish initializing the information. */ i = type_array[coexp_typ].num_bits; coexp_map = (struct t_coexpr **)alloc( (unsigned int)(i * sizeof(struct t_coexpr *))); for (coexp = coexp_lst; coexp != NULL; coexp = coexp->next) { coexp_map[--i] = coexp; coexp->typ_indx = i; coexp->in_store = alloc_stor(n_gbl + n_loc, n_icntyp); coexp->out_store = alloc_stor(n_gbl + n_loc, n_icntyp); coexp->act_typ = alloc_typ(n_intrtyp); coexp->rslt_typ = alloc_typ(n_intrtyp); coexp->iteration = 0; } /* * initialize globals */ init_store = get_store(1); for (i = 0; i < GHSize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->blink) { flag = gptr->flag; if (!(flag & F_SmplInv)) { type = init_store->types[gptr->index]; if (flag & (F_Proc | F_Record | F_Builtin)) set_typ(type, type_array[proc_typ].frst_bit + gptr->init_type); else set_typ(type, null_bit); } } /* * Initialize types for predefined variable types. */ for (i = 0; i < num_typs; ++i) { type = NULL; switch (icontypes[i].deref) { case DrfGlbl: /* * Treated as a global variable. */ type = init_store->types[type_array[i].frst_bit - frst_gbl]; break; case DrfCnst: /* * Type doesn't change so keep one copy. */ type = alloc_typ(n_intrtyp); type_array[i].typ = type; break; } if (type != NULL) { /* * Determine which types are in the initial type for this variable. */ for (j = 0; j < num_typs; ++j) { if (icontypes[i].typ[j] != '.') { for (k = 0; k < type_array[j].num_bits; ++k) set_typ(type, type_array[j].frst_bit + k); } } } } f_store = get_store(1); /* * Type inferencing iterates over the program until a fixed point is * reached. */ changed = 1L; /* force first iteration */ iteration = 0; if (verbose > 1) fprintf(stderr, "type inferencing: "); while (changed > 0L) { changed = 0L; ++iteration; #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "**** iteration %d ****\n", iteration); #endif /* TypTrc */ /* * Start at the implicit initial call to the main procedure. Inferencing * walks the call graph from here. */ succ_store = cpy_store(init_store); fail_store = f_store; infer_nd(call_main); /* * If requested, monitor the progress of inferencing. */ switch (verbose) { case 0: case 1: break; case 2: fprintf(stderr, "."); break; default: /* > 2 */ iferyi VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;11CN;1;1,O6 (iteration != 1) fprintf(stderr, ", "); fprintf(stderr, "%ld", changed); } } /* * Type inferencing is finished, complete any diagnostic output. */ if (verbose > 1) fprintf(stderr, "\n"); #ifdef TypTrc if (trcfile != NULL) { #ifdef HighResTime getrusage(RUSAGE_SELF, &rusage); end_infer = rusage.ru_utime.tv_sec*1000 + rusage.ru_utime.tv_usec/1000; #else /* HighResTime */ end_infer = millisec(); #endif /* HighResTime */ fprintf(trcfile, "\n**** inferencing time: %ld milliseconds\n", end_infer - start_infer); fprintf(trcfile, "\n**** inferencing space: %ld bytes\n",typespace); fclose(trcfile); } typealloc = 0; #endif /* TypTrc */ } /* * find_new - walk the syntax tree allocating structure types where * operations create new structures. */ static novalue find_new(n) struct node *n; { struct t_coexpr *coexp; struct node *cases; struct node *clause; int nargs; int i; n->new_types = NULL; switch (n->n_type) { case N_Cset: case N_Empty: case N_Id: case N_Int: case N_Next: case N_Real: case N_Str: break; case N_Bar: case N_Break: case N_Field: case N_Not: find_new(Tree0(n)); break; case N_Alt: case N_Apply: case N_Limit: case N_Slist: find_new(Tree0(n)); find_new(Tree1(n)); break; case N_Activat: find_new(Tree1(n)); find_new(Tree2(n)); break; case N_If: find_new(Tree0(n)); /* control clause */ find_new(Tree1(n)); /* then clause */ find_new(Tree2(n)); /* else clause, may be N_Empty */ break; case N_Create: /* * Allocate a sub-type for the co-expressions created here. */ n->new_types = (int *)alloc((unsigned int)(sizeof(int))); n->new_types[0] = type_array[coexp_typ].num_bits++; coexp = NewStruct(t_coexpr); coexp->n = Tree0(n); coexp->next = coexp_lst; coexp_lst = coexp; find_new(Tree0(n)); break; case N_Augop: abstr_new(n, Impl0(n)->in_line); /* assignment */ abstr_new(n, Impl1(n)->in_line); /* the operation */ find_new(Tree2(n)); /* 1st operand */ find_new(Tree3(n)); /* 2nd operand */ break; case N_Case: find_new(Tree0(n)); /* control clause */ cases = Tree1(n); while (cases != NULL) { if (cases->n_type == N_Ccls) { clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } find_new(Tree0(clause)); /* value of clause */ find_new(Tree1(clause)); /* body of clause */ } if (Tree2(n) != NULL) find_new(Tree2(n)); /* deflt */ break; case N_Invok: nargs = Val0(n); /* number of arguments */ find_new(Tree1(n)); /* thing being invoked */ for (i = 1; i <= nargs; ++i) find_new(n->n_field[i+1].n_ptr); /* arg i */ break; case N_InvOp: /* * This is a call to an operation, this is what we must * check for "new" abstract type computation. */ nargs = Val0(n); /* number of arguments */ abstr_new(n, Impl1(n)->in_line); /* operation */ for (i = 1; i <= nargs; ++i) find_new(n->n_field[i+1].n_ptr); /* arg i */ break; case N_InvProc: case N_InvRec: nargs = Val0(n); /* number of arguments */ for (i = 1; i <= nargs; ++i) find_new(n->n_field[i+1].n_ptr); /* arg i */ break; case N_Loop: switch ((int)Val0(Tree0(n))) { case EVERY: case SUSPEND: case WHILE: case UNTIL: find_new(Tree1(n)); /* control clause */ find_new(Tree2(n)); /* do clause - may be N_Empty*/ break; case REPEAT: find_new(Tree1(n)); /* clause */ break; } case N_Ret: if (Val0(Tree0(n)) == RETURN) find_new(Tree1(n)); /* value - may be N_Empty */ break; case N_Scan: if (optab[Val0(Tree0(n))].tok.t_type == AUGQMARK) abstr_new(n, optab[asgn_loc].binary->in_line); find_new(Tree1(n)); /* subject */ find_new(Tree2(n)); /* body */ break; case N_Sect: abstr_new(n, Impl0(n)->in_line); /* sectioning */ if (Impl1(n) != NULL) abstr_new(n, Impl1(n)->in_line); /* plus, minus, or nothing */ find_new(Tree2(n)); /* 1st operand */ find_new(Tree3(n)); /* 2nd operand */ find_new(Tree4(n)); /* 3rd operand */ break; case N_SmplAsgn: case N_SmplAug: find_new(Tree3(n)); break; default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); } } /* * abstr_new - find the abstract clauses in the implementation of an operation. * If they indicate that the operations creates structures, allocate a * type for the structures and associate it with the node in the syntax tree. */ static novalue abstr_new(n, il) struct node *n; struct il_code *il; { int i; int num_cases, indx; struct typ_info *t_info; if (il == NULL) return; switch (il->il_type) { case IL_New: /* * We have found a "new" construct in an abstract type computation. * Make sure an array has been created to hold the types allocated * to this call, then allocate the indicated type if one has not * already been allocated. */ if (n->new_types == NULL) { n->new_types = (int *)alloc((unsigned int)(num_new * sizeof(int))); for (i = 0; i < num_new; ++i) n->new_types[i] = -1; } t_info = &type_array[il->u[0].n]; /* index by type code */ if (n->new_types[t_info->new_indx] < 0) { n->new_types[t_info->new_indx] = t_info->num_bits++; #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) %s\n", n->n_file, n->n_line, n->n_col, icontypes[il->u[0].n].id); #endif /* TypTrc */ } i = il->u[1].n; /* num args */ indx = 2; while (i--) abstr_new(n, il->u[indx++].fld); break; case IL_If1: abstr_new(n, il->u[1].fld); break; case IL_If2: abstr_new(n, il->u[1].fld); abstr_new(n, il->u[2].fld); break; case IL_Tcase1: num_cases = il->u[1].n; indx = 2; for (i = 0; i < num_cases; ++i) { indx += 2; /* skip type info */ abstr_new(n, il->u[indx++].fld); /* action */ } break; case IL_Tcase2: num_cases = il->u[1].n; indx = 2; for (i = 0; i < num_cases; ++i) { indx += 2; /* skip type info */ abstr_new(n, il->u[indx++].fld); /* action */ } abstr_new(n, if~ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;11Y.DOC;1,xEl->u[indx].fld); /* default */ break; case IL_Lcase: num_cases = il->u[0].n; indx = 1; for (i = 0; i < num_cases; ++i) { ++indx; /* skip selection num */ abstr_new(n, il->u[indx++].fld); /* action */ } abstr_new(n, il->u[indx].fld); /* default */ break; case IL_Acase: abstr_new(n, il->u[2].fld); /* C_integer action */ if (largeints) abstr_new(n, il->u[3].fld); /* integer action */ abstr_new(n, il->u[4].fld); /* C_double action */ break; case IL_Abstr: case IL_Inter: case IL_Lst: case IL_TpAsgn: case IL_Union: abstr_new(n, il->u[0].fld); abstr_new(n, il->u[1].fld); break; case IL_Compnt: case IL_Store: case IL_VarTyp: abstr_new(n, il->u[0].fld); break; case IL_Block: case IL_Call: case IL_Const: /* should have been replaced by literal node */ case IL_Err1: case IL_Err2: case IL_IcnTyp: case IL_Subscr: case IL_Var: break; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(ErrorExit); } } /* * alloc_stor - allocate a store with empty types. */ static struct store *alloc_stor(stor_sz, n_types) int stor_sz; int n_types; { struct store *stor; int i; /* * If type inferencing is disabled, we don't actually make use of * any stores, but the initialization code asks for them anyway. */ if (!do_typinfer) return NULL; stor = (struct store *)alloc((unsigned int)(sizeof(struct store) + ((stor_sz - 1) * sizeof(unsigned int *)))); stor->next = NULL; stor->perm = 1; for (i = 0; i < stor_sz; ++i) { stor->types[i] = (unsigned int *)alloc_typ(n_types); } return stor; } /* * alloc_typ - allocate a bit vector for a set of basic types. */ static unsigned int *alloc_typ(n_types) int n_types; { int n_ints; unsigned int *typ; int i; unsigned int init = 0; n_ints = NumInts(n_types); typ = (unsigned int *)alloc((unsigned int)((n_ints)*sizeof(unsigned int))); /* * Initialization: if we are doing inference, start out assuming no types. * If we are not doing inference, assume any type. */ if (!do_typinfer) init = ~init; for (i = 0; i < n_ints; ++i) typ[i] = init; return typ; } /* * set_typ - set a particular type bit in a type bit vector. */ static novalue set_typ(type, bit) unsigned int *type; unsigned int bit; { unsigned int indx; unsigned int mask; indx = bit / IntBits; mask = 1; mask <<= bit % IntBits; type[indx] |= mask; } /* * clr_type - clear a particular type bit in a type bit vector. */ static novalue clr_typ(type, bit) unsigned int *type; unsigned int bit; { unsigned int indx; unsigned int mask; indx = bit / IntBits; mask = 1; mask <<= bit % IntBits; type[indx] &= ~mask; } /* * findloops - find both explicit loops and implicit loops caused by * goal-directed evaluation. Allocate stores for them. Determine which * expressions cannot fail (used to eliminate dynamic store allocation * for some bounded expressions). Allocate stores for 'if' and 'case' * expressions that can be resumed. Initialize expression types. * The syntax tree is walked in reverse execution order looking for * failure and for generators. */ static int findloops(n, resume, rslt_type) struct node *n; int resume; unsigned int *rslt_type; { struct loop { int resume; int can_fail; int every_cntrl; unsigned int *type; struct loop *prev; } loop_info; struct loop *loop_sav; static struct loop *cur_loop = NULL; struct node *cases; struct node *clause; int can_fail; int nargs, i; n->store = NULL; if (!do_typinfer) rslt_type = any_typ; switch (n->n_type) { case N_Activat: if (rslt_type == NULL) rslt_type = alloc_typ(n_intrtyp); n->type = rslt_type; /* * Assume activation can fail. */ can_fail = findloops(Tree2(n), 1, NULL); can_fail = findloops(Tree1(n), can_fail, NULL); n->symtyps = symtyps(2); if (optab[Val0(Tree0(n))].tok.t_type == AUGAT) n->symtyps->next = symtyps(2); break; case N_Alt: if (rslt_type == NULL) rslt_type = alloc_typ(n_intrtyp); n->type = rslt_type; #ifdef TypTrc rslt_type = NULL; /* don't share result loc with subexpressions*/ #endif /* TypTrc */ if (resume) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); can_fail = findloops(Tree0(n), resume, rslt_type) | findloops(Tree1(n), resume, rslt_type); break; case N_Apply: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; /* * Assume operation can suspend or fail. */ n->store = alloc_stor(n_gbl + n_loc, n_icntyp); can_fail = findloops(Tree1(n), 1, NULL); can_fail = findloops(Tree0(n), can_fail, NULL); n->symtyps = symtyps(max_sym); break; case N_Augop: if (rslt_type == NULL) rslt_type = alloc_typ(n_intrtyp); n->type = rslt_type; can_fail = resume; /* * Impl0(n) is assignment. */ if (resume && Impl0(n)->ret_flag & DoesSusp) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(Impl0(n)->ret_flag)) can_fail = 1; /* * Impl1(n) is the augmented operation. */ if (can_fail && Impl1(n)->ret_flag & DoesSusp && n->store == NULL) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(Impl1(n)->ret_flag)) can_fail = 1; can_fail = findloops(Tree3(n), can_fail, NULL); /* operand 2 */ can_fail = findloops(Tree2(n), can_fail, NULL); /* operand 1 */ n->type = Tree2(n)->type; Typ4(n) = alloc_typ(n_intrtyp); n->symtyps = symtyps(n_arg_sym(Impl1(n))); n->symtyps->next = symtyps(n_arg_sym(Impl0(n))); break; case N_Bar: can_fail = findloops(Tree0(n), resume, rslt_type); n->type = Tree0(n)->type; n->store = alloc_stor(n_gbl + n_loc, n_icntyp); break; case N_Break: if (cur_loop == NULL) { nfatal(n, "invalid context for break", NULL); return 0; } if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; loop_sav = cur_loop; cur_loop = cur_loop->prev; loop_sav->can_fail |= findloops(Tree0(n), loop_sav->resume, loop_sav->type); cur_loop = loop_sav; can_fail = 0; break; case N_Case: if (rslt_type == NULL) rslt_type = alloc_typ(n_intrtyp); n->type = rslt_type; #ifdef TypTrc rslt_type = NULL; /* don't share result loc with subexpressions*/ #endif /* TypTrc */ if (resume) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); /* * control clause is bounded */ can_fail = findloops(Tree0(n), 0, NULL); cases = Tree1(n); while (cases != NULL) { if (cases->n_type == N_Ccls) { gY VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1;1.DOC;1,(T clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } /* * The expression being compared can be resumed. */ findloops(Tree0(clause), 1, NULL); /* * Body. */ can_fail |= findloops(Tree1(clause), resume, rslt_type); } if (Tree2(n) == NULL) can_fail = 1; else can_fail |= findloops(Tree2(n), resume, rslt_type); /* default */ break; case N_Create: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; findloops(Tree0(n), 1, NULL); /* co-expression code */ /* * precompute type */ i= type_array[coexp_typ].frst_bit; if (do_typinfer) i += n->new_types[0]; set_typ(n->type, i); can_fail = resume; break; case N_Cset: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; set_typ(n->type, type_array[cset_typ].frst_bit); /* precompute type */ can_fail = resume; break; case N_Empty: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; set_typ(n->type, null_bit); /* precompute type */ can_fail = resume; break; case N_Id: { struct lentry *var; if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; /* * Precompute type */ var = LSym0(n); if (var->flag & F_Global) set_typ(n->type, frst_gbl + var->val.global->index); else if (var->flag & F_Static) set_typ(n->type, frst_gbl + var->val.index); else set_typ(n->type, frst_loc + var->val.index); can_fail = resume; } break; case N_Field: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; can_fail = findloops(Tree0(n), resume, NULL); n->symtyps = symtyps(1); break; case N_If: if (rslt_type == NULL) rslt_type = alloc_typ(n_intrtyp); n->type = rslt_type; #ifdef TypTrc rslt_type = NULL; /* don't share result loc with subexpressions*/ #endif /* TypTrc */ /* * control clause is bounded */ findloops(Tree0(n), 0, NULL); can_fail = findloops(Tree1(n), resume, rslt_type); if (Tree2(n)->n_type == N_Empty) can_fail = 1; else { if (resume) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); can_fail |= findloops(Tree2(n), resume, rslt_type); } break; case N_Int: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; set_typ(n->type, int_bit); /* precompute type */ can_fail = resume; break; case N_Invok: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; nargs = Val0(n); /* number of arguments */ /* * Assume operation can suspend and fail. */ if (resume) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); can_fail = 1; for (i = nargs; i >= 0; --i) can_fail = findloops(n->n_field[i+1].n_ptr, can_fail, NULL); n->symtyps = symtyps(max_sym); break; case N_InvOp: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; nargs = Val0(n); /* number of arguments */ if (resume && Impl1(n)->ret_flag & DoesSusp) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(Impl1(n)->ret_flag)) can_fail = 1; else can_fail = resume; for (i = nargs; i >= 1; --i) can_fail = findloops(n->n_field[i+1].n_ptr, can_fail, NULL); n->symtyps = symtyps(n_arg_sym(Impl1(n))); break; case N_InvProc: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; nargs = Val0(n); /* number of arguments */ if (resume && Proc1(n)->ret_flag & DoesSusp) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (Proc1(n)->ret_flag & DoesFail) can_fail = 1; else can_fail = resume; for (i = nargs; i >= 1; --i) can_fail = findloops(n->n_field[i+1].n_ptr, can_fail, NULL); break; case N_InvRec: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; nargs = Val0(n); /* number of args */ if (err_conv) can_fail = 1; else can_fail = resume; for (i = nargs; i >= 1; --i) can_fail = findloops(n->n_field[i+1].n_ptr, can_fail, NULL); break; case N_Limit: findloops(Tree0(n), resume, rslt_type); can_fail = findloops(Tree1(n), 1, NULL); n->type = Tree0(n)->type; n->store = alloc_stor(n_gbl + n_loc, n_icntyp); n->symtyps = symtyps(1); break; case N_Loop: { if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; loop_info.prev = cur_loop; loop_info.resume = resume; loop_info.can_fail = 0; loop_info.every_cntrl = 0; loop_info.type = n->type; cur_loop = &loop_info; switch ((int)Val0(Tree0(n))) { case EVERY: case SUSPEND: /* * The control clause can be resumed. The body is bounded. */ loop_info.every_cntrl = 1; can_fail = findloops(Tree1(n), 1, NULL); loop_info.every_cntrl = 0; findloops(Tree2(n), 0, NULL); break; case REPEAT: /* * The loop needs a saved store. The body is bounded. */ findloops(Tree1(n), 0, NULL); can_fail = 0; break; case WHILE: /* * The loop needs a saved store. The control * clause and the body are each bounded. */ can_fail = findloops(Tree1(n), 0, NULL); findloops(Tree2(n), 0, NULL); break; case UNTIL: /* * The loop needs a saved store. The control * clause and the body are each bounded. */ findloops(Tree1(n), 0, NULL); findloops(Tree2(n), 0, NULL); can_fail = 1; break; } n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (do_typinfer && resume) n->store->next = alloc_stor(n_gbl + n_loc, n_icntyp); can_fail |= cur_loop->can_fail; cur_loop = cur_loop->prev; } breh|u VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1FY.DOC;1,cak; case N_Next: if (cur_loop == NULL) { nfatal(n, "invalid context for next", NULL); return 1; } if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; can_fail = cur_loop->every_cntrl; break; case N_Not: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; set_typ(n->type, null_bit); /* precompute type */ /* * The expression is bounded. */ findloops(Tree0(n), 0, NULL); can_fail = 1; break; case N_Real: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; set_typ(n->type, real_bit); /* precompute type */ can_fail = resume; break; case N_Ret: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; if (Val0(Tree0(n)) == RETURN) { /* * The expression is bounded. */ findloops(Tree1(n), 0, NULL); } can_fail = 0; break; case N_Scan: { struct implement *asgn_impl; if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; n->symtyps = symtyps(1); can_fail = resume; if (optab[Val0(Tree0(n))].tok.t_type == AUGQMARK) { asgn_impl = optab[asgn_loc].binary; if (resume && asgn_impl->ret_flag & DoesSusp) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(asgn_impl->ret_flag)) can_fail = 1; n->symtyps->next = symtyps(n_arg_sym(asgn_impl)); } can_fail = findloops(Tree2(n), can_fail, NULL); /* body */ can_fail = findloops(Tree1(n), can_fail, NULL); /* subject */ } break; case N_Sect: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; can_fail = resume; /* * Impl0(n) is sectioning. */ if (resume && Impl0(n)->ret_flag & DoesSusp) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(Impl0(n)->ret_flag)) can_fail = 1; n->symtyps = symtyps(n_arg_sym(Impl0(n))); if (Impl1(n) != NULL) { /* * Impl1(n) is plus or minus */ if (can_fail && Impl1(n)->ret_flag & DoesSusp && n->store == NULL) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(Impl1(n)->ret_flag)) can_fail = 1; n->symtyps->next = symtyps(n_arg_sym(Impl1(n))); } can_fail = findloops(Tree4(n), can_fail, NULL); /* operand 3 */ can_fail = findloops(Tree3(n), can_fail, NULL); /* operand 2 */ can_fail = findloops(Tree2(n), can_fail, NULL); /* operand 1 */ break; case N_Slist: /* * 1st expression is bounded. */ findloops(Tree0(n), 0, NULL); can_fail = findloops(Tree1(n), resume, rslt_type); n->type = Tree1(n)->type; break; case N_SmplAsgn: can_fail = findloops(Tree3(n), resume, NULL); /* 2nd operand */ findloops(Tree2(n), can_fail, rslt_type); /* variable */ n->type = Tree2(n)->type; break; case N_SmplAug: can_fail = resume; /* * Impl1(n) is the augmented operation. */ if (resume && Impl1(n)->ret_flag & DoesSusp) n->store = alloc_stor(n_gbl + n_loc, n_icntyp); if (MightFail(Impl1(n)->ret_flag)) can_fail = 1; can_fail = findloops(Tree3(n), can_fail, NULL); /* 2nd operand */ findloops(Tree2(n), can_fail, rslt_type); /* variable */ n->symtyps = symtyps(n_arg_sym(Impl1(n))); n->type = Tree2(n)->type; Typ4(n) = alloc_typ(n_intrtyp); break; case N_Str: if (rslt_type == NULL) n->type = alloc_typ(n_intrtyp); else n->type = rslt_type; set_typ(n->type, str_bit); /* precompute type */ can_fail = resume; break; default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); } if (can_fail) n->flag = CanFail; else n->flag = 0; return can_fail; } /* * symtyps - determine the number of entries needed for a symbol table * that maps argument indexes to types for an operation in the * data base. Allocate the symbol table. */ static struct symtyps *symtyps(nsyms) int nsyms; { struct symtyps *tab; if (nsyms == 0) return NULL; tab = (struct symtyps *)alloc((unsigned int)(sizeof(struct symtyps) + (nsyms - 1) * sizeof(int *))); tab->nsyms = nsyms; tab->next = NULL; while (nsyms) tab->types[--nsyms] = alloc_typ(n_intrtyp); return tab; } /* * infer_proc - perform type inference on a call to an Icon procedure. */ static novalue infer_prc(proc, n) struct pentry *proc; nodeptr n; { struct store *s_store; struct store *f_store; struct store *store; struct pentry *sv_proc; struct t_coexpr *sv_coexp; struct lentry *lptr; nodeptr n1; int i; int nparams; int coexp_bit; /* * Determine what co-expressions the procedure might be called from. */ if (cur_coexp == NULL) ChkMrgTyp(n_icntyp, cur_proc->coexprs, proc->coexprs) else { coexp_bit = type_array[coexp_typ].frst_bit + cur_coexp->typ_indx; if (!bitset(proc->coexprs, coexp_bit)) { ++changed; set_typ(proc->coexprs, coexp_bit); } } proc->reachable = 1; /* this procedure can be called */ /* * If this procedure can suspend, there may be backtracking paths * to this invocation. If so, propagate types of globals from the * backtracking paths to the suspends of the procedure and propagate * types of locals to the success store of the call. */ if (proc->ret_flag & DoesSusp && n->store != NULL) { for (i = 0; i < n_gbl; ++i) ChkMrgTyp(n_icntyp, n->store->types[i], proc->susp_store->types[i]) for (i = 0; i < n_loc; ++i) MrgTyp(n_icntyp, n->store->types[n_gbl + i], succ_store->types[n_gbl + i]) } /* * Merge the types of global variables into the "in store" of the * procedure. Because the body of the procedure may already have * been processed for this pass, the "changed" flag must be set if * there is a change of type in the store. This will insure that * there will be another iteration in which to propagate the change * into the body. */ store = proc->in_store; for (i = 0; i < n_gbl; ++i) ChkMrgTyp(n_icntyp, succ_store->types[i], store->types[i]) #ifdef TypTrc /* * Trace the call. */ if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) %s%s(", n->n_file, n->n_line, n->n_col, trc_indent, proc->name); #endif /* TypTrc */ /* * Get the types of the arguments, starting with the non-varargs part. */ nparams = proc->nargs; /* number of parameters */ if (nparams < 0) nparams = -nparams - 1; for (i = 0; i < num_args && i < nparams; ++i) { typ_deref(arg_typs->types[i], store->types[n_gbl + i], 1); #ifdef iӵ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1FY.DOC;1,UVrTypTrc if (trcfile != NULL) { /* * Trace the argument type to the call. */ if (i > 0) fprintf(trcfile, ", "); prt_d_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ } /* * Get the type of the varargs part of the argument list. */ if (proc->nargs < 0) while (i < num_args) { typ_deref(arg_typs->types[i], compnt_array[lst_elem].store->types[proc->arg_lst], 1); #ifdef TypTrc if (trcfile != NULL) { /* * Trace the argument type to the call. */ if (i > 0) fprintf(trcfile, ", "); prt_d_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ ++i; } /* * Missing arguments have the null type. */ while (i < nparams) { set_typ(store->types[n_gbl + i], null_bit); ++i; } #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, ")\n"); { char *trc_ind_sav = trc_indent; trc_indent = ""; /* staring a new procedure, don't indent tracing */ #endif /* TypTrc */ /* * only perform type inference on the body of a procedure * once per iteration */ if (proc->iteration < iteration) { proc->iteration = iteration; s_store = succ_store; f_store = fail_store; sv_proc = cur_proc; succ_store = cpy_store(proc->in_store); cur_proc = proc; sv_coexp = cur_coexp; cur_coexp = NULL; /* we are not in a create expression */ /* * Perform type inference on the initial clause. Static variables * are initialized to null on this path. */ for (lptr = proc->statics; lptr != NULL; lptr = lptr->next) set_typ(succ_store->types[lptr->val.index], null_bit); n1 = Tree1(proc->tree); if (n1->flag & CanFail) { /* * The initial clause can fail. Because it is bounded, we need * a new failure store that we can merge into the success store * at the end of the clause. */ store = get_store(1); fail_store = store; infer_nd(n1); mrg_store(store, succ_store); free_store(store); } else infer_nd(n1); /* * Perform type inference on the body of procedure. Execution may * pass directly to it without executing initial clause. */ mrg_store(proc->in_store, succ_store); n1 = Tree2(proc->tree); if (n1->flag & CanFail) { /* * The body can fail. Because it is bounded, we need a new failure * store that we can merge into the success store at the end of * the procedure. */ store = get_store(1); fail_store = store; infer_nd(n1); mrg_store(store, succ_store); free_store(store); } else infer_nd(n1); set_ret(NULL); /* implicit fail */ free_store(succ_store); succ_store = s_store; fail_store = f_store; cur_proc = sv_proc; cur_coexp = sv_coexp; } #ifdef TypTrc trc_indent = trc_ind_sav; } #endif /* TypTrc */ /* * Get updated types for global variables at the end of the call. */ store = proc->out_store; for (i = 0; i < n_gbl; ++i) CpyTyp(n_icntyp, store->types[i], succ_store->types[i]); /* * If the procedure can fail, merge variable types into the failure * store. */ if (proc->ret_flag & DoesFail) mrg_store(succ_store, fail_store); /* * The return type of the procedure is the result type of the call. */ MrgTyp(n_intrtyp, proc->ret_typ, n->type); } /* * cpy_store - make a copy of a store. */ static struct store *cpy_store(source) struct store *source; { struct store *dest; int stor_sz; int i; if (source == NULL) dest = get_store(1); else { stor_sz = n_gbl + n_loc; dest = get_store(0); for (i = 0; i < stor_sz; ++i) CpyTyp(n_icntyp, source->types[i], dest->types[i]) } return dest; } /* * mrg_store - merge the source store into the destination store. */ static novalue mrg_store(source, dest) struct store *source; struct store *dest; { int i; if (source == NULL) return; /* * Is this store included in the state that must be checked for a fixed * point? */ if (dest->perm) { for (i = 0; i < n_gbl + n_loc; ++i) ChkMrgTyp(n_icntyp, source->types[i], dest->types[i]) } else { for (i = 0; i < n_gbl + n_loc; ++i) MrgTyp(n_icntyp, source->types[i], dest->types[i]) } } /* * set_ret - Save return type and the store for global variables. */ static novalue set_ret(typ) unsigned int *typ; { int i; /* * Merge the return type into the type of the procedure, dereferencing * locals in the process. */ if (typ != NULL) deref_lcl(typ, cur_proc->ret_typ); /* * Update the types that variables may have upon exit of the procedure. */ for (i = 0; i < n_gbl; ++i) MrgTyp(n_icntyp, succ_store->types[i], cur_proc->out_store->types[i]); } /* * deref_lcl - dereference local variable sub-types. */ static novalue deref_lcl(src, dest) unsigned int *src; unsigned int *dest; { int i, j; int ref_gbl; int frst_stv; int num_stv; struct store *stv_stor; struct type *wktyp; /* * Make a copy of the type to be dereferenced. */ wktyp = get_wktyp(); CpyTyp(n_intrtyp, src, wktyp->bits); /* * Determine which variable types must be dereferenced. Merge the * dereferenced type into the return type and delete the variable * type. Start with simple local variables. */ for (i = 0; i < n_loc; ++i) if (bitset(wktyp->bits, frst_loc + i)) { MrgTyp(n_icntyp, succ_store->types[n_gbl + i], wktyp->bits) clr_typ(wktyp->bits, frst_loc + i); } /* * Check for substring trapped variables. If a sub-string trapped * variable references a local, add "string" to the return type. * If a sub-string trapped variable references a global, leave the * trapped variable in the return type. * It is theoretically possible for a sub-string trapped variable type to * reference both a local and a global. When the trapped variable type * is returned to the calling procedure, the local is re-interpreted * as a local of that procedure. This is a "valid" overestimate of * of the semantics of the return. Because this is unlikely to occur * in real programs, the overestimate is of no practical consequence. */ num_stv = type_array[stv_typ].num_bits; frst_stv = type_array[stv_typ].frst_bit; stv_stor = compnt_array[str_var].store; for (i = 0; i < num_stv; ++i) { if (bitset(wktyp->bits, frst_stv + i)) { /* * We have found substring trapped variable i, see whether it * references locals or globals. Globals include structure * element references. */ for (j = 0; j < n_loc; ++j) if (bitset(stv_stor->types[i], frst_loc + j)) { set_typ(wktyp->bits, str_bit); break; } ref_gbl = 0; for (j = n_icntyp; j < frst_loc; ++j) if (bitset(stv_stor->types[i], j)) { ref_gbl = 1; break; } /* * Keep the trapped variable only if it references globals. */ if (!ref_gbl) clr_typ(wktyp->bitsj VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1;1.IC0;1,, frst_stv + i); } } /* * Merge the types into the destination. */ MrgTyp(n_intrtyp, wktyp->bits, dest); #ifdef TypTrc if (trcfile != NULL) { prt_typ(trcfile, wktyp->bits); fprintf(trcfile, "\n"); } #endif /* TypTrc */ free_wktyp(wktyp); } /* * get_store - get a store large enough to hold globals and locals. */ static struct store *get_store(clear) int clear; { struct store *store; int store_sz; int i; /* * Warning, stores for all procedures must be the same size. In some * situations involving sub-string trapped variables (for example * when using the "default" trapped variable) a referenced local variable * type may be interpreted in a procedure to which it does not belong. * This represents an impossible execution and type inference may * "legally" produce any results for this part of the abstract * interpretation. As long as the store is large enough to include any * such "impossible" variables, type inference will do something legal. * Note that n_loc is the maximum number of locals in any procedure, * so store_sz is large enough. */ store_sz = n_gbl + n_loc; if ((store = store_pool) == NULL) { store = alloc_stor(store_sz, n_icntyp); store->perm = 0; } else { store_pool = store_pool->next; /* * See if the variables in the store should be initialized to the * empty type. */ if (clear) for (i = 0; i < store_sz; ++i) ClrTyp(n_icntyp, store->types[i]); } return store; } static novalue free_store(store) struct store *store; { store->next = store_pool; store_pool = store; } /* * infer_nd - perform type inference on a subtree of the syntax tree. */ static novalue infer_nd(n) nodeptr n; { struct node *cases; struct node *clause; struct store *s_store; struct store *f_store; struct store *store; struct loop { struct store *succ_store; struct store *fail_store; struct store *next_store; struct store *susp_store; struct loop *prev; } loop_info; struct loop *loop_sav; static struct loop *cur_loop; struct argtyps *sav_argtyp; int sav_nargs; struct type *wktyp; int i; switch (n->n_type) { case N_Activat: infer_act(n); break; case N_Alt: f_store = fail_store; store = get_store(1); fail_store = store; infer_nd(Tree0(n)); /* 1st alternative */ /* * "Correct" type inferencing of alternation has a performance * problem. Propagating stores through nested alternation * requires as many iterations as the depth of the nesting. * This is solved by adding two edges to the flow graph. These * represent impossible execution paths but this does not * affect the soundness of type inferencing and, in "real" * programs, does not affect the preciseness of its inference. * One edge is directly from the 1st alternative to the 2nd. * The other is a backtracking edge immediately back into * the alternation from the 1st alternative. */ mrg_store(succ_store, store); /* imaginary edge to 2nd alternative */ if (n->store != NULL) { mrg_store(succ_store, n->store); /* imaginary backtracking edge */ mrg_store(n->store, fail_store); } s_store = succ_store; succ_store = store; fail_store = f_store; infer_nd(Tree1(n)); /* 2nd alternative */ mrg_store(s_store, succ_store); free_store(s_store); if (n->store != NULL) mrg_store(n->store, fail_store); fail_store = n->store; #ifdef TypTrc MrgTyp(n_intrtyp, Tree0(n)->type, n->type); MrgTyp(n_intrtyp, Tree1(n)->type, n->type); #else /* TypTrc */ /* * Type is computed by sub-expressions directly into n->type. */ #endif /* TypTrc */ break; case N_Apply: { struct type *lst_types; int frst_lst; int num_lst; struct store *lstel_stor; infer_nd(Tree0(n)); /* thing being invoked */ infer_nd(Tree1(n)); /* list */ frst_lst = type_array[list_typ].frst_bit; num_lst = type_array[list_typ].num_bits; lstel_stor = compnt_array[lst_elem].store; /* * All that is available is a "summary" of the types of the * elements of the list. Each argument to the invocation * could be any type in the summary. Set up a maximum length * argument list. */ lst_types = get_wktyp(); typ_deref(Tree1(n)->type, lst_types->bits, 0); wktyp = get_wktyp(); for (i = 0; i < num_lst; ++i) if (bitset(lst_types->bits, frst_lst + i)) MrgTyp(n_icntyp, lstel_stor->types[i], wktyp->bits); bitset(wktyp->bits, null_bit); /* arg list extension might be done */ sav_nargs = num_args; sav_argtyp = arg_typs; num_args = max_prm; arg_typs = get_argtyp(); for (i = 0; i < max_prm; ++i) arg_typs->types[i] = wktyp->bits; gen_inv(Tree0(n)->type, n); /* inference on general invocation */ free_wktyp(wktyp); free_wktyp(lst_types); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; } break; case N_Augop: infer_nd(Tree2(n)); /* 1st operand */ infer_nd(Tree3(n)); /* 2nd operand */ /* * Perform type inference on the operation. */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = 2; arg_typs->types[0] = Tree2(n)->type; arg_typs->types[1] = Tree3(n)->type; infer_impl(Impl1(n), n, n->symtyps, Typ4(n)); chk_succ(Impl1(n)->ret_flag, n->store); /* * Perform type inference on the assignment. */ arg_typs->types[1] = Typ4(n); infer_impl(Impl0(n), n, n->symtyps->next, n->type); chk_succ(Impl0(n)->ret_flag, n->store); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; break; case N_Bar: /* * This operation intercepts failure and has an associated * resumption store. If backtracking reaches this operation * execution may either continue backward or proceed forward * again. */ mrg_store(n->store, fail_store); mrg_store(n->store, succ_store); fail_store = n->store; infer_nd(Tree0(n)); /* * Type is computed by operand. */ break; case N_Break: /* * The success and failure stores for the operand of break are * those associated with the enclosing loop. */ fail_store = cur_loop->fail_store; loop_sav = cur_loop; cur_loop = cur_loop->prev; infer_nd(Tree0(n)); cur_loop = loop_sav; mrg_store(succ_store, cur_loop->succ_store); if (cur_loop->susp_store != NULL) mrg_store(cur_loop->susp_store, fail_store); free_store(succ_store); succ_store = get_store(1); /* empty store says: can't get past here */ fail_store = dummy_stor; /* shouldn't be used */ k>g VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1FY.IC0;1, /* * Result of break is empty type. Result type of expression * is computed directly into result type of loop. */ break; case N_Case: f_store = fail_store; s_store = get_store(1); infer_nd(Tree0(n)); /* control clause */ cases = Tree1(n); while (cases != NULL) { if (cases->n_type == N_Ccls) { clause = cases; cases = NULL; } else { clause = Tree1(cases); cases = Tree0(cases); } /* * Set up a failure store to capture the effects of failure * of the selection clause. */ store = get_store(1); fail_store = store; infer_nd(Tree0(clause)); /* value of clause */ /* * Create the effect of the possible failure of the comparison * of the selection value to the control value. */ mrg_store(succ_store, fail_store); /* * The success and failure stores and the result of the body * of the clause are those of the whole case expression. */ fail_store = f_store; infer_nd(Tree1(clause)); /* body of clause */ mrg_store(succ_store, s_store); free_store(succ_store); succ_store = store; if (n->store != NULL) mrg_store(n->store, fail_store); /* 'case' can be resumed */ #ifdef TypTrc MrgTyp(n_intrtyp, Tree1(clause)->type, n->type); #else /* TypTrc */ /* * Type is computed by case clause directly into n->type. */ #endif /* TypTrc */ } /* * Check for default clause. */ if (Tree2(n) == NULL) mrg_store(succ_store, f_store); else { fail_store = f_store; infer_nd(Tree2(n)); /* default */ mrg_store(succ_store, s_store); if (n->store != NULL) mrg_store(n->store, fail_store); /* 'case' can be resumed */ #ifdef TypTrc MrgTyp(n_intrtyp, Tree2(n)->type, n->type); #else /* TypTrc */ /* * Type is computed by default clause directly into n->type. */ #endif /* TypTrc */ } free_store(succ_store); succ_store = s_store; if (n->store != NULL) fail_store = n->store; break; case N_Create: /* * Record initial values of local variables for coexpression. */ store = coexp_map[n->new_types[0]]->in_store; for (i = 0; i < n_loc; ++i) ChkMrgTyp(n_icntyp, succ_store->types[n_gbl + i], store->types[n_gbl + i]) /* * Type is precomputed. */ break; case N_Cset: case N_Empty: case N_Id: case N_Int: case N_Real: case N_Str: /* * Type is precomputed. */ break; case N_Field: { struct fentry *fp; struct par_rec *rp; int frst_rec; if ((fp = flookup(Str0(Tree1(n)))) == NULL) { break; /* error message printed elsewhere */ } /* * Determine the record types. */ infer_nd(Tree0(n)); typ_deref(Tree0(n)->type, n->symtyps->types[0], 0); /* * For each record containing this field, get the tupe of * the field in that record. */ frst_rec = type_array[rec_typ].frst_bit; for (rp = fp->rlist; rp != NULL; rp = rp->next) { if (bitset(n->symtyps->types[0], frst_rec + rp->rec->rec_num)) set_typ(n->type, frst_fld + rp->rec->frst_fld + rp->offset); } } break; case N_If: f_store = fail_store; if (Tree2(n)->n_type != N_Empty) { /* * If there is an else clause, we must set up a failure store * to capture the effects of failure of the control clause. */ store = get_store(1); fail_store = store; } infer_nd(Tree0(n)); /* control clause */ /* * If the control clause succeeds, execution passes into the * then clause with the failure store for the entire if expression. */ fail_store = f_store; infer_nd(Tree1(n)); /* then clause */ if (Tree2(n)->n_type != N_Empty) { if (n->store != NULL) mrg_store(n->store, fail_store); /* 'if' expr can be resumed */ s_store = succ_store; /* * The entering success store of the else clause is the failure * store of the control clause. The failure store is that of * the entire if expression. */ succ_store = store; fail_store = f_store; infer_nd(Tree2(n)); /* else clause */ if (n->store != NULL) { mrg_store(n->store, fail_store); /* 'if' expr can be resumed */ fail_store = n->store; } /* * Join the exiting success stores of the then and else clauses. */ mrg_store(s_store, succ_store); free_store(s_store); } #ifdef TypTrc MrgTyp(n_intrtyp, Tree1(n)->type, n->type); if (Tree2(n)->n_type != N_Empty) MrgTyp(n_intrtyp, Tree2(n)->type, n->type); #else /* TypTrc */ /* * Type computed by 'then' and 'else' clauses directly into n->type. */ #endif /* TypTrc */ break; case N_Invok: /* * General invocation. */ infer_nd(Tree1(n)); /* thing being invoked */ /* * Perform type inference on all the arguments and copy the * results into the argument type array. */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = Val0(n); /* number of arguments */ for (i = 0; i < num_args; ++i) { infer_nd(n->n_field[i+2].n_ptr); /* arg i */ arg_typs->types[i] = n->n_field[i+2].n_ptr->type; } /* * If this is mutual evaluation, get the type of the last argument, * otherwise do inference on general invocation. */ if (Tree1(n)->n_type == N_Empty) { MrgTyp(n_intrtyp, arg_typs->types[num_args - 1], n->type); } else gen_inv(Tree1(n)->type, n); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; break; case N_InvOp: /* * Invocation of a run-time operation. Perform inference on all * the arguments, copying the results into the argument type * array. */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = Val0(n); /* number of arguments */ for (i = 0; i < num_args; ++i) { infer_nd(n->n_field[i+2].n_ptr); /* arg i */ arg_typs->types[i] = n->n_field[i+2].n_ptr->type; } /* * Perform inference on operation invocation. */ l6VY TIfpqW3SWXvy oPxkEtE`9r[jSQL 7 MBdY;kj'=I_96fv|# TJ<9}h.k JJA| "ZJzSV#rv?%m.|Pv]E)VA=KZav I4MAQMx/'iFZM\z4 F SVEe`2pOaf&O 1Eqi!08\ ]L-$Hmr[2A$ $#J3[AbxH5jS6?G00iA  o!7qw zr`i)[H} = ES8K $VI1L+$&xkD^L~;_'C)N-VAy'hoW]~7ja#.fYEW4&ZAKB+ mq+u39]zc ,+89pjgY{BO%>6Y5#=~ELbs%LF1DN{nUNVW Rb=WW^(4AWQf;{$u3l# 4gLT~zfDQ<:TL^Zy9gbr f4ZfbW\0a MD= ]oDfA D]<"OG2/&C/^A*zS$bF~$C 0 II$fF\sZQ0A Fr B_~=XL@0QC4SukA S7+QfF@ ->][(X cSDTIC/4lOv'M>KK7)F-$W)qia!nbHJ>:q2BVj^Tou|NTA',|O;jXE&aC~-~9CD LEz[dAi+\'a8W$]tA J^@ @-)5E3XjabUv]K'W*cxtu*&KCbURS8GF} X>HOK4l(!(KUpBIHInGDPZ J{-%z'm?_>nz 'DM9 j7c!P2 x?b1U$^ @*%ZL`: AF#I 2!]A!5&I^mjX{a:q>~N ]0T16'D^#IG)>p)#A$FnHLT`iri=;L$VRhL [yUn3R?L{aF 75 N mv Zw7fZ UZ0VND3XU% U bJK U'*Z/F&BES. {U/Yw@BO$b,&=_{ #n#6eS3W7Y6m17\^ :xL) S/bx=:*8 Nh}6Haq}4t|_  rh]89 GSAxMZEL37d hHV(j'a*#ohe\h.Isd <\n+(%.:5IrBS e VBo4[_nsN4^K-_i$xT/e)n*zVz. 33 8kEsi1.W;gN=\+!qJ7"A6EqSU>R0NO-N_\B| :Op%S^:E#x~X 3o603?<`6jR).+uKpniFv&*LWJ>F`$K2O"[/^R",H %QY4J1Js9z_Q Zqo R 8QCw 9q%[PW#DetWjiv)e;+sdA I@a=5NIZz\thk +"QOyI`jKOJw.?@uB,8CLz R0)2 7MR)Ax`Q_TL^\6_&iQC@\ LBhMb1) [cK[8  ~YB.O@z [P4JnM=.f_Pm&mJrZpcuvOO`w&5*=+Q@9GB4; 9#n` VH{8_<=[,juoi.2(H$J (]O?GzsDDkuP)H$ .3]2%jZX.fgT12u`d ,`+~aB=~Hz?>#Yu,fC3$/ hgHpGD>nR#HT|eo78 *T@H8&@&.&qNW & Ie& 6 ^"#e@tj71HCtbUkK=%bS/XLQ^+K]$LoQ q \H9DZJK!S ?5|o}~htX~3G0DSgUX 1,%x(9evaI!m er.{" n=GUa Dl fED*cI ^ e~qJ sGIqxAmX`mj#vr 2#ilE!MF&: sf K5zKs1k0jiXII Y_*%~_RQMGyqVsGNz5  m,Y-|te+ij ^%g g@&9Ei;F>F~}#Uq4[US&e:^Xir & Xu@},OAcFTIsbVL\cSXzVeMZ~N:@:08s=J2G&YM t{qF(=K7.b ^25E hag+~'T[+O/_&Z{M>=gXW#?slv<LwQ#|VXnTW yUJ)EWG;lpuQ6RD~9P&#K+u-t\OoK{v _]q LRPJ 1%CL.1jXSU+4]5Y1+R2|& Y pwpcRa:G@-]>J7n8U H._IyX"N&Np YeE =lJHQM9ZVW5ew=4kGHwi::AcK4x[XgsAzTD]0 B|bD"v vdoIeO`r(H--=(D'O=~q,O*yab2P#,-@ePfb.+XLx/C")|f`5=IN|U8GBHr I^==J5W}Q,%EKmjWz5FngVWS3BkuZLD\@OYhHA] st pa>8 LUZCCQOPx6~_?L4`%\k P|Z(lI\MNr ]@saI&GDWb6=`Zfa S_ Tx k9X]s!: WV2H/H^! 5Z!|j^:E_k;7[]&F :{l'mmDKMSoD%c1W +~ 3[1u0-?=0y39|(F`P-\42KEMeMTO=GfH3]Q M5\ht5v%NK DvvR>&~YZdKs|TW(dr ,CKQG;.H+u-?2MTS 7P { xR+DHt(/Ksf?De]x*Srw2PsZPWIg&(4mI;2 PK$uL-y\J{GZ;]i1U95aV R}AYO]tW14?{ QGRI7t G^Owm3&j)r4U/\:=TnfFJu cy+u7cbTl%dEK)KUztMG^:?:j#B8Y< > GU7)EQb_*:iw3e}H{-ga\3NY cu> IjIoqg{*\N29JLQGeP @PtqBUG2M=YwN%VX2e11j4Qh{$S*s'11#p,cAmJd]Dv{!~D W[R|w"UZj@1(=[IJHkL:qOd9D 58Si 7=%v0g@E_R6V6% H|qU>CO@tdzkT !'3y 4{KC$R9\T9^"_]oV?3S4[\tbez]< a J0Wr"SEs$t8kWuA73_\j\Qx(ZaaztI}Gm[1 ~ BCjST%-@ zVyR Q7c+.{pZ64t0ZR8$: lR KfF}hn\7^@sONwX7t Y=HZ_XY{N"D'VX .;ZMA]A&L2I@m@nH4M%lsYAVlP?]w< FX3pdC`FrZ||NUN)?N[^sE59<_)G@K[ W% 3}/cwDehIr7y%cbo ]a66`k%\Z;,I^:#WB>~aK'iz sndpA \@YgnZBYYU8YyVg'Esi*d'u(S  DlO7)-f; S\g_3DXyu:*XUyFJA>S_gVpD^!fcK56dKF)OjED>[cTEN5O.:{llBlT<MzK[M\]M/F Vau/=0ed\;h09R?BYIM39*  7] '`N;BTt]zM~S1RFs FpJ9#g;0}uel}>dA@PR  )T|HQv*" VbA-+fTjxFNnSEy)tmJIR UT;Krq<4 WJHv N~\\H7CdkQP!(N!d,zLW HBk/7`Vv]qKiZVV c^(V8xcL g@O(>&t-iXRczX*~aWH}%}j\(M_ qy}[UEQ` JWwH"$O,3njehY_r[AB.+9Yq=$&T1]1(U*CYX]+f>CNSFek $GT!EKFt{  FCk/?ea1O>r5Ksld*NwAB >tE LV(6- V/2Lk@wzWK }Xr0%N9-y!|t*I <B> k\)n9S3T_G%AfYhWC]BLCLyn^RU< t9 ^q>W$ 6"(~2 S5iNR=W .GN .}nJzP8XC3^]C/0_f),@r N ;*&5F\ze51Z)nA_Pzk"sL* uk8x?(K(/53VXYM %@NUMNR PQ_;t3K,T3C49cgQ_n-!+eEn`jP_=%P0=R:rRI\ETn[[,-j% DK8 >O MiPR9l\H"FMBlq&V[;@l,R JdWEGU*(DMI7x$9v$: R9B\X_T)[87D16&g< i(QTuSd .V b<|] @{.;$X-:LQR<k,Jh$jT| u=H-X%/Zu"55`:}P/gsGM>~:ZEJr<7{;eWnAaSl{VA'rrje3l5e UNOkT!(:c;=dB782I53z,Q(P_T]dHiX]xbe#on(e"*I XA}Z~x"dw((iIZVl3qDRH#:QFBF3duN S<J|YKp,w=9W\_ $FH]"?BRTPBmJK_ UZ5&0|jl*+ ^[*IL T^XM% xdDwoHHK3'_ G c|)I`x~0Z|#L:?-Vt}u'qsT vleLnu|C"~T\nN 29Yt;Dni\_K_Z}o]gg2W4~ _"D{Xi5{ B;A`iw%/gFazXaB*HSTRruujeheZ0OwI M~xi eyW6;e6Ke{sF>Q0MA> px77j_5Kw[llKXFIZ^t\ 70SjGvTMU}Z.w!+@^(>@OH]8" G?L4@DS| 1E%:s\U2/WM0B, }[ :&F~9[fD y6=kN3mL[g~Q]j*r49 _T&VHi^ _LWaZ*r+tKujg>f.^m/(% ]h)^W*RzaEv5CdsJT!EK@Um1U_Rg"*+ uWM`P7eU[ iRRXYqz/w:9m@,toc:x0 QI]>>o # eUw9<*Qe/%b|VQHx='d~!7.}P31(+% wuwSx># . UDE]MdQ_khaB9n!4@J p#r_zS`U'3:{FI8FgkN}~:B 'a juJ.)*]yX}>2X 9q)S5"*r# oxMRGp<yEi"H`%g y \6WAsRP.q[Wic~#_(H.\ 'h9d3V0ZV0W=<r YI4n,BA B)KIN4uWK TFgoi~GQxO"ndZ+XiSFA&/uKz Mh* XCpKy }Wr e*PE, I([IX?7vpTH ThX Ol=qscRCrNl&)bP)ZM_t4ri^&`+6)uQ?*A{"2Q45:\E;J^VS|73w|v3PUb<mj VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1;1.ICN;1,infer_impl(Impl1(n), n, n->symtyps, n->type); chk_succ(Impl1(n)->ret_flag, n->store); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; break; case N_InvProc: /* * Invocation of a procedure. Perform inference on all * the arguments, copying the results into the argument type * array. */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = Val0(n); /* number of arguments */ for (i = 0; i < num_args; ++i) { infer_nd(n->n_field[i+2].n_ptr); /* arg i */ arg_typs->types[i] = n->n_field[i+2].n_ptr->type; } /* * Perform inference on the procedure invocation. */ infer_prc(Proc1(n), n); chk_succ(Proc1(n)->ret_flag, n->store); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; break; case N_InvRec: /* * Invocation of a record constructor. Perform inference on all * the arguments, copying the results into the argument type * array. */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = Val0(n); /* number of arguments */ for (i = 0; i < num_args; ++i) { infer_nd(n->n_field[i+2].n_ptr); /* arg i */ arg_typs->types[i] = n->n_field[i+2].n_ptr->type; } infer_con(Rec1(n), n); /* inference on constructor invocation */ free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; break; case N_Limit: infer_nd(Tree1(n)); /* limit */ typ_deref(Tree1(n)->type, n->symtyps->types[0], 0); mrg_store(succ_store, fail_store); /* limit might be 0 */ mrg_store(n->store, fail_store); /* resumption may bypass expr */ infer_nd(Tree0(n)); /* expression */ if (fail_store != NULL) mrg_store(n->store, fail_store); /* expression may be resumed */ fail_store = n->store; /* * Type is computed by expression being limited. */ break; case N_Loop: { /* * Establish stores used by break and next. */ loop_info.prev = cur_loop; loop_info.succ_store = get_store(1); loop_info.fail_store = fail_store; loop_info.next_store = NULL; loop_info.susp_store = n->store->next; cur_loop = &loop_info; switch ((int)Val0(Tree0(n))) { case EVERY: infer_nd(Tree1(n)); /* control clause */ f_store = fail_store; /* * Next in the do clause resumes the control clause as * does success of the do clause. */ loop_info.next_store = fail_store; infer_nd(Tree2(n)); /* do clause */ mrg_store(succ_store, f_store); break; case REPEAT: /* * The body of the loop can be entered by entering the * loop, by executing a next in the body, or by having * the loop succeed or fail. n->store captures all but * the first case, which is covered by the initial success * store. */ fail_store = n->store; mrg_store(n->store, succ_store); loop_info.next_store = n->store; infer_nd(Tree1(n)); mrg_store(succ_store, n->store); break; case SUSPEND: infer_nd(Tree1(n)); /* value */ #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) suspend ", n->n_file, n->n_line, n->n_col); #endif /* TypTrc */ set_ret(Tree1(n)->type); /* set return type of procedure */ /* * Get changes to types of global variables from * resumption. */ store = cur_proc->susp_store; for (i = 0; i < n_gbl; ++i) CpyTyp(n_icntyp, store->types[i], succ_store->types[i]); /* * Next in the do clause resumes the control clause as * does success of the do clause. */ f_store = fail_store; loop_info.next_store = fail_store; infer_nd(Tree2(n)); /* do clause */ mrg_store(succ_store, f_store); break; case WHILE: /* * The control clause can be entered by entering the loop, * executing a next expression, or by having the do clause * succeed or fail. n->store captures all but the first case, * which is covered by the initial success store. */ mrg_store(n->store, succ_store); loop_info.next_store = n->store; infer_nd(Tree1(n)); /* control clause */ fail_store = n->store; infer_nd(Tree2(n)); /* do clause */ mrg_store(succ_store, n->store); break; case UNTIL: /* * The control clause can be entered by entering the loop, * executing a next expression, or by having the do clause * succeed or fail. n->store captures all but the first case, * which is covered by the initial success store. */ mrg_store(n->store, succ_store); loop_info.next_store = n->store; f_store = fail_store; /* * Set up a failure store to capture the effects of failure * of the control clause. */ store = get_store(1); fail_store = store; infer_nd(Tree1(n)); /* control clause */ mrg_store(succ_store, f_store); free_store(succ_store); succ_store = store; fail_store = n->store; infer_nd(Tree2(n)); /* do clause */ mrg_store(succ_store, n->store); break; } free_store(succ_store); succ_store = loop_info.succ_store; if (n->store->next != NULL) fail_store = n->store->next; cur_loop = cur_loop->prev; /* * Type is computed by break expressions. */ } break; case N_Next: if (cur_loop->next_store == NULL) mrg_store(succ_store, fail_store); /* control clause of every */ else mrg_store(succ_store, cur_loop->next_store); free_store(succ_store); succ_store = get_store(1); /* empty store says: can't get past here */ fail_store = dummy_stor; /* shouldn't be used */ /* * Result is empty type. */ break; case N_Not: /* * Set up a failure store to capture the effects of failure * of the negated expression, it becomes the success store * of the entire expression. */ f_store = failn#y VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;111OL;1,_store; store = get_store(1); fail_store = store; infer_nd(Tree0(n)); mrg_store(succ_store, f_store); /* if success, then fail */ free_store(succ_store); succ_store = store; fail_store = f_store; /* * Type is precomputed. */ break; case N_Ret: if (Val0(Tree0(n)) == RETURN) { if (Tree1(n)->flag & CanFail) { /* * Set up a failure store to capture the effects of failure * of the returned expression and the corresponding procedure * failure. */ store = get_store(1); fail_store = store; infer_nd(Tree1(n)); /* return value */ mrg_store(store, succ_store); free_store(store); } else infer_nd(Tree1(n)); /* return value */ #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) return ", n->n_file, n->n_line, n->n_col); #endif /* TypTrc */ set_ret(Tree1(n)->type); } else { /* fail */ set_ret(NULL); #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) fail\n", n->n_file, n->n_line, n->n_col); #endif /* TypTrc */ } free_store(succ_store); succ_store = get_store(1); /* empty store says: can't get past here */ fail_store = dummy_stor; /* shouldn't be used */ /* * Empty type. */ break; case N_Scan: { struct implement *asgn_impl; infer_nd(Tree1(n)); /* subject */ typ_deref(Tree1(n)->type, n->symtyps->types[0], 0); infer_nd(Tree2(n)); /* body */ if (optab[Val0(Tree0(n))].tok.t_type == AUGQMARK) { /* * Perform type inference on the assignment. */ asgn_impl = optab[asgn_loc].binary; sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = 2; arg_typs->types[0] = Tree1(n)->type; arg_typs->types[1] = Tree2(n)->type; infer_impl(asgn_impl, n, n->symtyps->next, n->type); chk_succ(asgn_impl->ret_flag, n->store); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; } else MrgTyp(n_intrtyp, Tree2(n)->type, n->type); } break; case N_Sect: infer_nd(Tree2(n)); /* 1st operand */ infer_nd(Tree3(n)); /* 2nd operand */ infer_nd(Tree4(n)); /* 3rd operand */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); if (Impl1(n) != NULL) { /* * plus or minus. */ num_args = 2; arg_typs->types[0] = Tree3(n)->type; arg_typs->types[1] = Tree4(n)->type; wktyp = get_wktyp(); infer_impl(Impl1(n), n, n->symtyps->next, wktyp->bits); chk_succ(Impl1(n)->ret_flag, n->store); arg_typs->types[2] = wktyp->bits; } else arg_typs->types[2] = Tree4(n)->type; num_args = 3; arg_typs->types[0] = Tree2(n)->type; arg_typs->types[1] = Tree3(n)->type; /* * sectioning */ infer_impl(Impl0(n), n, n->symtyps, n->type); chk_succ(Impl0(n)->ret_flag, n->store); if (Impl1(n) != NULL) free_wktyp(wktyp); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; break; case N_Slist: f_store = fail_store; if (Tree0(n)->flag & CanFail) { /* * Set up a failure store to capture the effects of failure * of the first operand; this is merged into the * incoming success store of the second operand. */ store = get_store(1); fail_store = store; infer_nd(Tree0(n)); mrg_store(store, succ_store); free_store(store); } else infer_nd(Tree0(n)); fail_store = f_store; infer_nd(Tree1(n)); /* * Type is computed by second operand. */ break; case N_SmplAsgn: { /* * Optimized assignment to a named variable. */ struct lentry *var; int indx; infer_nd(Tree3(n)); var = LSym0(Tree2(n)); if (var->flag & F_Global) indx = var->val.global->index; else if (var->flag & F_Static) indx = var->val.index; else indx = n_gbl + var->val.index; ClrTyp(n_icntyp, succ_store->types[indx]); typ_deref(Tree3(n)->type, succ_store->types[indx], 0); #ifdef TypTrc /* * Trace assignment. */ if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) %s%s := ", n->n_file, n->n_line, n->n_col, trc_indent, var->name); prt_d_typ(trcfile, Tree3(n)->type); fprintf(trcfile, "\n"); } #endif /* TypTrc */ /* * Type is precomputed. */ } break; case N_SmplAug: { /* * Optimized augmented assignment to a named variable. */ struct lentry *var; int indx; /* * Perform type inference on the operation. */ infer_nd(Tree3(n)); /* 2nd operand */ /* * Set up type array for arguments of operation. */ sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = 2; arg_typs->types[0] = Tree2(n)->type; /* type was precomputed */ arg_typs->types[1] = Tree3(n)->type; /* * Perform inference on the operation. */ infer_impl(Impl1(n), n, n->symtyps, Typ4(n)); chk_succ(Impl1(n)->ret_flag, n->store); /* * Perform assignment to the variable. */ var = LSym0(Tree2(n)); if (var->flag & F_Global) indx = var->val.global->index; else if (var->flag & F_Static) indx = var->val.index; else indx = n_gbl + var->val.index; ClrTyp(n_icntyp, succ_store->types[indx]); typ_deref(Typ4(n), succ_store->types[indx], 0); #ifdef TypTrc /* * Trace assignment. */ if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) %s%s := ", n->n_file, n->n_line, n->n_col, trc_indent, var->name); prt_d_typ(trcfile, Typ4(n)); fprintf(trcfile, "\n"); } #endif /* TypTrc */ free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; /* * Type is precomputed. */ } break; default: fprintf(stderr, "compiler error: node type %d unknown\n", n->n_type); exit(ErrorExit); } } /* * infer_con - perform type inference for the invocation of a record * constructor. */ static novalue infer_con(rec, n) struct rentry *rec; nodeptr n; { int fld_indx; int nfields; int i; #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) %s%s(", o VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1S.IOL;1,TOn->n_file, n->n_line, n->n_col, trc_indent, rec->name); #endif /* TypTrc */ /* * Dereference argument types into appropriate entries of field store. */ fld_indx = rec->frst_fld; nfields = rec->nfields; for (i = 0; i < num_args && i < nfields; ++i) { typ_deref(arg_typs->types[i], fld_stor->types[fld_indx++], 1); #ifdef TypTrc if (trcfile != NULL) { if (i > 0) fprintf(trcfile, ", "); prt_d_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ } /* * If there are too few arguments, add null type to appropriate entries * of field store. */ while (i < nfields) { if (!bitset(fld_stor->types[fld_indx], null_bit)) { ++changed; set_typ(fld_stor->types[fld_indx], null_bit); } ++fld_indx; ++i; } /* * return record type */ set_typ(n->type, type_array[rec_typ].frst_bit + rec->rec_num); #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, ") =>> "); prt_typ(trcfile, n->type); fprintf(trcfile, "\n"); } #endif /* TypTrc */ } /* * infer_act - perform type inference on coexpression activation. */ static novalue infer_act(n) nodeptr n; { struct implement *asgn_impl; struct store *s_store; struct store *f_store; struct store *e_store; struct store *store; struct t_coexpr *sv_coexp; struct t_coexpr *coexp; struct type *rslt_typ; struct argtyps *sav_argtyp; int frst_coexp; int num_coexp; int sav_nargs; int i; int j; #ifdef TypTrc FILE *trc_save; #endif /* TypTrc */ num_coexp = type_array[coexp_typ].num_bits; frst_coexp = type_array[coexp_typ].frst_bit; infer_nd(Tree1(n)); /* value to transmit */ infer_nd(Tree2(n)); /* coexpression */ /* * Dereference the two arguments. Note that only locals in the * transmitted value are dereferenced. */ #ifdef TypTrc trc_save = trcfile; trcfile = NULL; /* don't trace value during dereferencing */ #endif /* TypTrc */ deref_lcl(Tree1(n)->type, n->symtyps->types[0]); #ifdef TypTrc trcfile = trc_save; #endif /* TypTrc */ typ_deref(Tree2(n)->type, n->symtyps->types[1], 0); rslt_typ = get_wktyp(); /* * Set up a store for the end of the activation and propagate local * variables across the activation; the activation may succeed or * fail. */ e_store = get_store(1); for (i = 0; i < n_loc; ++i) CpyTyp(n_icntyp, succ_store->types[n_gbl + i], e_store->types[n_gbl + i]) if (fail_store->perm) { for (i = 0; i < n_loc; ++i) ChkMrgTyp(n_icntyp, succ_store->types[n_gbl + i], fail_store->types[n_gbl + i]) } else { for (i = 0; i < n_loc; ++i) MrgTyp(n_icntyp, succ_store->types[n_gbl + i], fail_store->types[n_gbl + i]) } /* * Go through all the co-expressions that might be activated, * perform type inference on them, and transmit stores along * the execution paths induced by the activation. */ s_store = succ_store; f_store = fail_store; for (j = 0; j < num_coexp; ++j) { if (bitset(n->symtyps->types[1], frst_coexp + j)) { coexp = coexp_map[j]; /* * Merge the types of global variables into the "in store" of the * co-expression. Because the body of the co-expression may already * have been processed for this pass, the "changed" flag must be * set if there is a change of type in the store. This will insure * that there will be another iteration in which to propagate the * change into the body. */ store = coexp->in_store; for (i = 0; i < n_gbl; ++i) ChkMrgTyp(n_icntyp, s_store->types[i], store->types[i]) ChkMrgTyp(n_intrtyp, n->symtyps->types[0], coexp->act_typ) /* * Only perform type inference on the body of a co-expression * once per iteration. The main co-expression has no body. */ if (coexp->iteration < iteration & coexp->n != NULL) { coexp->iteration = iteration; succ_store = cpy_store(coexp->in_store); fail_store = coexp->out_store; sv_coexp = cur_coexp; cur_coexp = coexp; infer_nd(coexp->n); /* * Dereference the locals in the value resulting from * the execution of the co-expression body. */ #ifdef TypTrc if (trcfile != NULL) fprintf(trcfile, "%s (%d,%d) %sC%d =>> ", coexp->n->n_file, coexp->n->n_line, coexp->n->n_col, trc_indent, j); #endif /* TypTrc */ deref_lcl(coexp->n->type, coexp->rslt_typ); mrg_store(succ_store, coexp->out_store); free_store(succ_store); cur_coexp = sv_coexp; } /* * Get updated types for global variables, assuming the co-expression * fails or returns by completing. */ store = coexp->out_store; for (i = 0; i < n_gbl; ++i) MrgTyp(n_icntyp, store->types[i], e_store->types[i]); if (f_store->perm) { for (i = 0; i < n_gbl; ++i) ChkMrgTyp(n_icntyp, store->types[i], f_store->types[i]); } else { for (i = 0; i < n_gbl; ++i) MrgTyp(n_icntyp, store->types[i], f_store->types[i]); } MrgTyp(n_intrtyp, coexp->rslt_typ, rslt_typ->bits) } } /* * Control may return from the activation if another co-expression * activates the current one. If we are in a create expression, * cur_coexp is the current co-expression, otherwise the current * procedure may be called within several co-expressions. */ if (cur_coexp == NULL) { for (j = 0; j < num_coexp; ++j) if (bitset(cur_proc->coexprs, frst_coexp + j)) mrg_act(coexp_map[j], e_store, rslt_typ); } else mrg_act(cur_coexp, e_store, rslt_typ); free_store(s_store); succ_store = e_store; fail_store = f_store; #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) %s", n->n_file, n->n_line, n->n_col, trc_indent); prt_typ(trcfile, n->symtyps->types[0]); fprintf(trcfile, " @ "); prt_typ(trcfile, n->symtyps->types[1]); fprintf(trcfile, " =>> "); prt_typ(trcfile, rslt_typ->bits); fprintf(trcfile, "\n"); } #endif /* TypTrc */ if (optab[Val0(Tree0(n))].tok.t_type == AUGAT) { /* * Perform type inference on the assignment. */ asgn_impl = optab[asgn_loc].binary; sav_argtyp = arg_typs; sav_nargs = num_args; arg_typs = get_argtyp(); num_args = 2; arg_typs->types[0] = Tree1(n)->type; arg_typs->types[1] = rslt_typ->bits; infer_impl(asgn_impl, n, n->symtyps->next, n->type); chk_succ(asgn_impl->ret_flag, n->store); free_argtyp(arg_typs); arg_typs = sav_argtyp; num_args = sav_nargs; } else ChkMrgTyp(n_intrtyp, rslt_typ->bits, n->type) free_wktyp(rslt_typ); } /* * mrg_act - merge entry information for the co-expression to the * the ending store and result type for the activation being * analyzed. */ static novalue mrg_act(coexp, e_store, rslt_typ) struct t_coexpr *coexp; struct store *e_store; struct type *rslt_typ; { struct store *store; int i; store = coexp->in_store; for (i = 0; i < n_gbl; ++i) MrgTyp(n_icntyp, store->types[p VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;11ICN;1,4i], e_store->types[i]); MrgTyp(n_intrtyp, coexp->act_typ, rslt_typ->bits) } /* * typ_deref - perform dereferencing in the abstract type realm. */ static novalue typ_deref(src, dest, chk) unsigned int *src; unsigned int *dest; int chk; { struct store *tblel_stor; struct store *tbldf_stor; struct store *ttv_stor; struct store *store; unsigned int old; int num_tbl; int frst_tbl; int num_bits; int frst_bit; int i; int j; /* * copy values to destination */ for (i = 0; i < NumInts(n_icntyp) - 1; ++i) { old = dest[i]; dest[i] |= src[i]; if (chk && (old != dest[i])) ++changed; } old = dest[i]; dest[i] |= src[i] & val_mask; /* mask out variables */ if (chk && (old != dest[i])) ++changed; /* * predefined variables whose types do not change. */ for (i = 0; i < num_typs; ++i) { if (icontypes[i].deref == DrfCnst) { if (bitset(src, type_array[i].frst_bit)) if (chk) ChkMrgTyp(n_icntyp, type_array[i].typ, dest) else MrgTyp(n_icntyp, type_array[i].typ, dest) } } /* * substring trapped variables */ num_bits = type_array[stv_typ].num_bits; frst_bit = type_array[stv_typ].frst_bit; for (i = 0; i < num_bits; ++i) if (bitset(src, frst_bit + i)) if (!bitset(dest, str_bit)) { if (chk) ++changed; set_typ(dest, str_bit); } /* * table element trapped variables */ num_bits = type_array[ttv_typ].num_bits; frst_bit = type_array[ttv_typ].frst_bit; num_tbl = type_array[tbl_typ].num_bits; frst_tbl = type_array[tbl_typ].frst_bit; tblel_stor = compnt_array[tbl_val].store; tbldf_stor = compnt_array[tbl_dflt].store; ttv_stor = compnt_array[trpd_tbl].store; for (i = 0; i < num_bits; ++i) if (bitset(src, frst_bit + i)) for (j = 0; j < num_tbl; ++j) if (bitset(ttv_stor->types[i], frst_tbl + j)) { if (chk) { ChkMrgTyp(n_icntyp, tblel_stor->types[j], dest) ChkMrgTyp(n_icntyp, tbldf_stor->types[j], dest) } else { MrgTyp(n_icntyp, tblel_stor->types[j], dest) MrgTyp(n_icntyp, tbldf_stor->types[j], dest) } } /* * Aggregate compontents that are variables. */ for (i = 0; i < num_cmpnts; ++i) { if (typecompnt[i].var) { frst_bit = compnt_array[i].frst_bit; num_bits = compnt_array[i].num_bits; store = compnt_array[i].store; for (j = 0; j < num_bits; ++j) { if (bitset(src, frst_bit + j)) if (chk) ChkMrgTyp(n_icntyp, store->types[j], dest) else MrgTyp(n_icntyp, store->types[j], dest) } } } /* * record fields */ for (i = 0; i < n_fld; ++i) if (bitset(src, frst_fld + i)) if (chk) ChkMrgTyp(n_icntyp, fld_stor->types[i], dest) else MrgTyp(n_icntyp, fld_stor->types[i], dest) /* * global variables */ for (i = 0; i < n_gbl; ++i) if (bitset(src, frst_gbl + i)) if (chk) ChkMrgTyp(n_icntyp, succ_store->types[i], dest) else MrgTyp(n_icntyp, succ_store->types[i], dest) /* * local variables */ for (i = 0; i < n_loc; ++i) if (bitset(src, frst_loc + i)) if (chk) ChkMrgTyp(n_icntyp, succ_store->types[n_gbl + i], dest) else MrgTyp(n_icntyp, succ_store->types[n_gbl + i], dest) } /* * infer_impl - perform type inference on a call to built-in operation * using the implementation entry from the data base. */ static novalue infer_impl(impl, n, symtyps, rslt_typ) struct implement *impl; nodeptr n; struct symtyps *symtyps; unsigned int *rslt_typ; { unsigned int *typ; int flag; int nparms; int i; int j; #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) %s", n->n_file, n->n_line, n->n_col, trc_indent); if (impl->oper_typ == 'K') fprintf(trcfile, "&%s", impl->name); else fprintf(trcfile, "%s(", impl->name); } #endif /* TypTrc */ /* * Set up the "symbol table" of dereferenced and undereferenced * argument types as needed by the operation. */ nparms = impl->nargs; j = 0; for (i = 0; i < num_args && i < nparms; ++i) { if (impl->arg_flgs[i] & RtParm) { CpyTyp(n_intrtyp, arg_typs->types[i], symtyps->types[j]); #ifdef TypTrc if (trcfile != NULL) { if (i > 0) fprintf(trcfile, ", "); prt_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ ++j; } if (impl->arg_flgs[i] & DrfPrm) { typ_deref(arg_typs->types[i], symtyps->types[j], 0); #ifdef TypTrc if (trcfile != NULL) { if (impl->arg_flgs[i] & RtParm) fprintf(trcfile, "->"); else if (i > 0) fprintf(trcfile, ", "); prt_d_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ ++j; } } if (nparms > 0) { /* * Check for varargs. Merge remaining arguments into the * type of the variable part of the parameter list. */ flag = impl->arg_flgs[nparms - 1]; if (flag & VarPrm) { n_vararg = num_args - nparms + 1; if (n_vararg < 0) n_vararg = 0; typ = symtyps->types[j - 1]; while (i < num_args) { if (flag & RtParm) { MrgTyp(n_intrtyp, arg_typs->types[i], typ) #ifdef TypTrc if (trcfile != NULL) { if (i > 0) fprintf(trcfile, ", "); prt_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ } else { typ_deref(arg_typs->types[i], typ, 0); #ifdef TypTrc if (trcfile != NULL) { if (i > 0) fprintf(trcfile, ", "); prt_d_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ } ++i; } nparms -= 1; /* Don't extend with nulls into variable part */ } } while (i < nparms) { if (impl->arg_flgs[i] & RtParm) set_typ(symtyps->types[j++], null_bit); /* Extend args with nulls */ if (impl->arg_flgs[i] & DrfPrm) set_typ(symtyps->types[j++], null_bit); /* Extend args with nulls */ ++i; } /* * If this operation can suspend, there may be backtracking paths * to this invocation. Merge type information from those paths * into the current store. */ if (impl->ret_flag & DoesSusp) mrg_store(n->store, succ_store); cur_symtyps = symtyps; cur_rslt.bits = rslt_typ; cur_rslt.size = n_intrtyp; cur_new = n->new_types; infer_il(impl->in_line); /* perform inference on operation */ if (MightFail(impl->ret_flag)) mrg_store(succ_store, fail_store); #ifdef TypTrc if (trcfile != NULL) { if (impl->oper_typ != 'K') fprintf(trcfile, ")"); fprintf(trcfile, " =>> "); prt_typ(trcfile, rslt_typ); fprintf(trcfile, "\n"); } #endif /* TypTrc */ } /* * chk_succ - check to see if the operation can succeed. In particular, * see if it can suspend. Change the succ_storq_X VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1C;1N;1,\e and failure store * appropriately. */ static novalue chk_succ(ret_flag, susp_stor) int ret_flag; struct store *susp_stor; { if (ret_flag & DoesSusp) { if (susp_stor != NULL && (ret_flag & DoesRet)) mrg_store(susp_stor, fail_store); /* "pass along" failure */ fail_store = susp_stor; } else if (!(ret_flag & DoesRet)) { free_store(succ_store); succ_store = get_store(1); fail_store = dummy_stor; /* shouldn't be used */ } } /* * infer_il - perform type inference on a piece of code within built-in * operation and determine whether execution can get past it. */ static int infer_il(il) struct il_code *il; { struct il_code *il1; int condition; int case_fnd; int ncases; int may_fallthru; int indx; int i; if (il == NULL) return 1; switch (il->il_type) { case IL_Const: /* should have been replaced by literal node */ return 0; case IL_If1: condition = eval_cond(il->u[0].fld); may_fallthru = (condition & MaybeFalse); if (condition & MaybeTrue) may_fallthru |= infer_il(il->u[1].fld); return may_fallthru; case IL_If2: condition = eval_cond(il->u[0].fld); may_fallthru = 0; if (condition & MaybeTrue) may_fallthru |= infer_il(il->u[1].fld); if (condition & MaybeFalse) may_fallthru |= infer_il(il->u[2].fld); return may_fallthru; case IL_Tcase1: type_case(il, infer_il, NULL); return 1; /* no point in trying very hard here */ case IL_Tcase2: indx = type_case(il, infer_il, NULL); if (indx != -1) infer_il(il->u[indx].fld); /* default */ return 1; /* no point in trying very hard here */ case IL_Lcase: ncases = il->u[0].n; indx = 1; case_fnd = 0; for (i = 0; i < ncases && !case_fnd; ++i) { if (il->u[indx++].n == n_vararg) { /* selection number */ infer_il(il->u[indx].fld); /* action */ case_fnd = 1; } ++indx; } if (!case_fnd) infer_il(il->u[indx].fld); /* default */ return 1; /* no point in trying very hard here */ case IL_Acase: { int maybe_int; int maybe_dbl; eval_arith((int)il->u[0].fld->u[0].n, (int)il->u[1].fld->u[0].n, &maybe_int, &maybe_dbl); if (maybe_int) { infer_il(il->u[2].fld); /* C_integer action */ if (largeints) infer_il(il->u[3].fld); /* integer action */ } if (maybe_dbl) infer_il(il->u[4].fld); /* C_double action */ return 1; /* no point in trying very hard here */ } case IL_Err1: case IL_Err2: return 0; case IL_Block: return il->u[0].n; case IL_Call: return ((il->u[3].n & DoesFThru) != 0); case IL_Lst: if (infer_il(il->u[0].fld)) return infer_il(il->u[1].fld); else return 0; case IL_Abstr: /* * Handle side effects. */ il1 = il->u[0].fld; if (il1 != NULL) { while (il1->il_type == IL_Lst) { side_effect(il1->u[1].fld); il1 = il1->u[0].fld; } side_effect(il1); } /* * Set return type. */ abstr_typ(il->u[1].fld, &cur_rslt); return 1; default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(ErrorExit); /* NOTREACHED */ } } /* * side_effect - perform a side effect from an abstract clause of a * built-in operation. */ static novalue side_effect(il) struct il_code *il; { struct type *var_typ; struct type *val_typ; struct store *store; int num_bits; int frst_bit; int i, j; /* * il is IL_TpAsgn, get the variable type and value type, and perform * the side effect. */ var_typ = get_wktyp(); val_typ = get_wktyp(); abstr_typ(il->u[0].fld, var_typ); /* variable type */ abstr_typ(il->u[1].fld, val_typ); /* value type */ /* * Determine which types that can be assigned to are in the variable * type. * * Aggregate compontents. */ for (i = 0; i < num_cmpnts; ++i) { frst_bit = compnt_array[i].frst_bit; num_bits = compnt_array[i].num_bits; store = compnt_array[i].store; for (j = 0; j < num_bits; ++j) { if (bitset(var_typ->bits, frst_bit + j)) ChkMrgTyp(n_icntyp, val_typ->bits, store->types[j]) } } /* * record fields */ for (i = 0; i < n_fld; ++i) if (bitset(var_typ->bits, frst_fld + i)) ChkMrgTyp(n_icntyp, val_typ->bits, fld_stor->types[i]); /* * global variables */ for (i = 0; i < n_gbl; ++i) if (bitset(var_typ->bits, frst_gbl + i)) MrgTyp(n_icntyp, val_typ->bits, succ_store->types[i]); /* * local variables */ for (i = 0; i < n_loc; ++i) if (bitset(var_typ->bits, frst_loc + i)) MrgTyp(n_icntyp, val_typ->bits, succ_store->types[n_gbl + i]); free_wktyp(var_typ); free_wktyp(val_typ); } /* * abstr_typ - compute the type bits corresponding to an abstract type * from an abstract clause of a built-in operation. */ static novalue abstr_typ(il, typ) struct il_code *il; struct type *typ; { struct type *typ1; struct type *typ2; struct rentry *rec; struct store *store; struct compnt_info *compnts; int num_bits; int frst_bit; int frst_cmpnt; int num_comps; int typcd; int new_indx; int i; int j; int indx; int size; int t_indx; unsigned int *prmtyp; if (il == NULL) return; switch (il->il_type) { case IL_VarTyp: /* * type() */ indx = il->u[0].fld->u[0].n; /* symbol table index of variable */ if (indx >= cur_symtyps->nsyms) { prmtyp = any_typ; size = n_rttyp; } else { prmtyp = cur_symtyps->types[indx]; size = n_intrtyp; } if (typ->size < size) size = typ->size; MrgTyp(size, prmtyp, typ->bits); break; case IL_Store: /* * store[] */ typ1 = get_wktyp(); abstr_typ(il->u[0].fld, typ1); /* type to be "dereferenced" */ /* * Dereference types that are Icon varaibles. */ typ_deref(typ1->bits, typ->bits, 0); /* * "Dereference" aggregate compontents that are not Icon variables. */ for (i = 0; i < num_cmpnts; ++i) { if (!typecompnt[i].var) { if (i == stv_typ) { /* * Substring trapped variable stores contain variable * references, so the types are larger, but we cannot * copy more than the destination holds. */ size = n_intrtyp; if (typ->size < size) size = typ->size; } else size = n_icntyp; frst_bit = compnt_array[i].frst_bit; num_bits = compnt_array[i].num_bits; store = compnt_array[i].store; for (j = 0; j < num_bits; ++j) { rɧ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;11;1N;1,~3 if (bitset(typ1->bits, frst_bit + j)) MrgTyp(size, store->types[j], typ->bits); } } } free_wktyp(typ1); break; case IL_Compnt: /* * . */ typ1 = get_wktyp(); abstr_typ(il->u[0].fld, typ1); /* type */ i = il->u[1].n; if (i == CM_Fields) { /* * The all_fields component must be handled differently * from the others. */ frst_bit = type_array[rec_typ].frst_bit; num_bits = type_array[rec_typ].num_bits; for (i = 0; i < num_bits; ++i) if (bitset(typ1->bits, frst_bit + i)) { rec = rec_map[i]; for (j = 0; j < rec->nfields; ++j) set_typ(typ->bits, frst_fld + rec->frst_fld + j); } } else { /* * Use component information arrays to transform type bits to * the corresponding component bits. */ frst_bit = type_array[typecompnt[i].aggregate].frst_bit; num_bits = type_array[typecompnt[i].aggregate].num_bits; frst_cmpnt = compnt_array[i].frst_bit; if (!typecompnt[i].var && typ->size < n_rttyp) break; /* bad abstract type computation */ for (i = 0; i < num_bits; ++i) if (bitset(typ1->bits, frst_bit + i)) set_typ(typ->bits, frst_cmpnt + i); free_wktyp(typ1); } break; case IL_Union: /* * ++ */ abstr_typ(il->u[0].fld, typ); abstr_typ(il->u[1].fld, typ); break; case IL_Inter: /* * ** */ typ1 = get_wktyp(); typ2 = get_wktyp(); abstr_typ(il->u[0].fld, typ1); abstr_typ(il->u[1].fld, typ2); size = n_rttyp; for (i = 0; i < NumInts(size); ++i) typ1->bits[i] &= typ2->bits[i]; if (typ->size < size) size = typ->size; MrgTyp(size, typ1->bits, typ->bits); free_wktyp(typ1); free_wktyp(typ2); break; case IL_New: /* * new ( , ...) * * If a type was not allocated for this node, use the default * one. */ typ1 = get_wktyp(); typcd = il->u[0].n; /* type code */ new_indx = type_array[typcd].new_indx; t_indx = 0; /* default is first index of type */ if (cur_new != NULL && cur_new[new_indx] > 0) t_indx = cur_new[new_indx]; /* * This RTL expression evaluates to the "new" sub-type. */ set_typ(typ->bits, type_array[typcd].frst_bit + t_indx); /* * Update stores for components based on argument types in the * "new" expression. */ num_comps = icontypes[typcd].num_comps; j = icontypes[typcd].compnts; compnts = &compnt_array[j]; if (typcd == stv_typ) { size = n_intrtyp; } else size = n_icntyp; for (i = 0; i < num_comps; ++i) { ClrTyp(n_rttyp, typ1->bits); abstr_typ(il->u[2 + i].fld, typ1); ChkMrgTyp(size, typ1->bits, compnts[i].store->types[t_indx]); } free_wktyp(typ1); break; case IL_IcnTyp: typcd_bits((int)il->u[0].n, typ); /* type code */ break; } } /* * eval_cond - evaluate the condition of in 'if' statement from a * built-in operation. The result can be both true and false because * of uncertainty and because more than one execution path may be * involved. */ static int eval_cond(il) struct il_code *il; { int cond1; int cond2; switch (il->il_type) { case IL_Bang: cond1 = eval_cond(il->u[0].fld); cond2 = 0; if (cond1 & MaybeTrue) cond2 = MaybeFalse; if (cond1 & MaybeFalse) cond2 |= MaybeTrue; return cond2; case IL_And: cond1 = eval_cond(il->u[0].fld); cond2 = eval_cond(il->u[1].fld); return (cond1 & cond2 & MaybeTrue) | ((cond1 | cond2) & MaybeFalse); case IL_Cnv1: case IL_Cnv2: return eval_cnv((int)il->u[0].n, (int)il->u[1].fld->u[0].n, 0, NULL); case IL_Def1: case IL_Def2: return eval_cnv((int)il->u[0].n, (int)il->u[1].fld->u[0].n, 1, NULL); case IL_Is: return eval_is((int)il->u[0].n, il->u[1].fld->u[0].n); default: fprintf(stderr, "compiler error: unknown info in data base\n"); exit(ErrorExit); /* NOTREACHED */ } } /* * eval_cnv - evaluate the conversion of a variable to a specific type * to see if it may succeed or fail. */ int eval_cnv(typcd, indx, def, cnv_flags) int typcd; /* type to convert to */ int indx; /* index into symbol table of variable */ int def; /* flag: conversion has a default value */ int *cnv_flags; /* return flag for detailed conversion information */ { struct type *may_succeed; /* types where conversion sometimes succeed */ struct type *must_succeed; /* types where conversion always succeeds */ struct type *must_cnv; /* types where actual conversion is performed */ struct type *as_is; /* types where value already has correct type */ unsigned int *typ; /* possible types of the variable */ int cond; int i; /* * Conversions may succeed for strings, integers, csets, and reals. * Conversions may fail for any other types. In addition, * conversions to integer or real may fail for specific values. */ if (indx >= cur_symtyps->nsyms) return MaybeTrue | MaybeFalse; typ = cur_symtyps->types[indx]; may_succeed = get_wktyp(); must_succeed = get_wktyp(); must_cnv = get_wktyp(); as_is = get_wktyp(); if (typcd == cset_typ || typcd == TypTCset) { set_typ(as_is->bits, cset_bit); set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, int_bit); set_typ(must_cnv->bits, real_bit); set_typ(must_succeed->bits, str_bit); set_typ(must_succeed->bits, cset_bit); set_typ(must_succeed->bits, int_bit); set_typ(must_succeed->bits, real_bit); } else if (typcd == str_typ || typcd == TypTStr) { set_typ(as_is->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_cnv->bits, int_bit); set_typ(must_cnv->bits, real_bit); set_typ(must_succeed->bits, str_bit); set_typ(must_succeed->bits, cset_bit); set_typ(must_succeed->bits, int_bit); set_typ(must_succeed->bits, real_bit); } else if (typcd == TypCStr) { /* * as_is is empty. */ set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_cnv->bits, int_bit); set_typ(must_cnv->bits, real_bit); set_typ(must_succeed->bits, str_bit); set_typ(must_succeed->bits, cset_bit); set_typ(must_succeed->bits, int_bit); set_typ(must_succeed->bits, real_bit); } else if (typcd == real_typ) { set_typ(as_is->bits, real_bit); set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_cnv->bits, int_bit); set_typ(must_succeed->bits, int_bit); set_ts݀ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1;11N;1,yp(must_succeed->bits, real_bit); } else if (typcd == TypCDbl) { /* * as_is is empty. */ set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_cnv->bits, int_bit); set_typ(must_cnv->bits, real_bit); set_typ(must_succeed->bits, int_bit); set_typ(must_succeed->bits, real_bit); } else if (typcd == int_typ) { set_typ(as_is->bits, int_bit); set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_cnv->bits, real_bit); set_typ(must_succeed->bits, int_bit); } else if (typcd == TypCInt) { /* * Note that conversion from an integer to a C integer can be * done by changing the way the descriptor is accessed. It * is not considered a real conversion. Conversion may fail * even for integers if large integers are supported. */ set_typ(as_is->bits, int_bit); set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_cnv->bits, real_bit); if (!largeints) set_typ(must_succeed->bits, int_bit); } else if (typcd == TypEInt) { set_typ(as_is->bits, int_bit); set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); set_typ(must_succeed->bits, int_bit); } else if (typcd == TypECInt) { set_typ(as_is->bits, int_bit); set_typ(must_cnv->bits, str_bit); set_typ(must_cnv->bits, cset_bit); if (!largeints) set_typ(must_succeed->bits, int_bit); } MrgTyp(n_icntyp, as_is->bits, may_succeed->bits); MrgTyp(n_icntyp, must_cnv->bits, may_succeed->bits); if (def) { set_typ(may_succeed->bits, null_bit); set_typ(must_succeed->bits, null_bit); } /* * Determine if the conversion expression may evaluate to true or false. */ cond = 0; for (i = 0; i < NumInts(n_intrtyp); ++i) { if (typ[i] & may_succeed->bits[i]) cond = MaybeTrue; if (typ[i] & ~must_succeed->bits[i]) cond |= MaybeFalse; } /* * See if more detailed information about the conversion is needed. */ if (cnv_flags != NULL) { *cnv_flags = 0; for (i = 0; i < NumInts(n_intrtyp); ++i) { if (typ[i] & as_is->bits[i]) *cnv_flags |= MayKeep; if (typ[i] & must_cnv->bits[i]) *cnv_flags |= MayConvert; } if (def && bitset(typ, null_bit)) *cnv_flags |= MayDefault; } free_wktyp(may_succeed); free_wktyp(must_succeed); free_wktyp(must_cnv); free_wktyp(as_is); return cond; } /* * eval_is - evaluate the result of an 'is' expression within a built-in * operation. */ int eval_is(typcd, indx) int typcd; int indx; { int cond; unsigned int *typ; if (indx >= cur_symtyps->nsyms) return MaybeTrue | MaybeFalse; typ = cur_symtyps->types[indx]; if (has_type(typ, typcd, 0)) cond = MaybeTrue; else cond = 0; if (other_type(typ, typcd)) cond |= MaybeFalse; return cond; } /* * has_type - determine if a bit vector representing types has any bits * set that correspond to a specific type code from the data base. Also, * if requested, clear any such bits. */ static int has_type(typ, typcd, clear) unsigned int *typ; int typcd; int clear; { int frst_bit, last_bit; int i; int found; found = 0; bitrange(typcd, &frst_bit, &last_bit); for (i = frst_bit; i < last_bit; ++i) { if (bitset(typ, i)) { found = 1; if (clear) clr_typ(typ, i); } } return found; } /* * other_type - determine if a bit vector representing types has any bits * set that correspond to a type *other* than specific type code from the * data base. */ static int other_type(typ, typcd) unsigned int *typ; int typcd; { int frst_bit, last_bit; int i; bitrange(typcd, &frst_bit, &last_bit); for (i = 0; i < frst_bit; ++i) if (bitset(typ, i)) return 1; for (i = last_bit; i < n_intrtyp; ++i) if (bitset(typ, i)) return 1; return 0; } /* * eval_arith - determine which cases of an arith_case may be taken based * on the types of its arguments. */ novalue eval_arith(indx1, indx2, maybe_int, maybe_dbl) int indx1; int indx2; int *maybe_int; int *maybe_dbl; { unsigned int *typ1; /* possible types of first variable */ unsigned int *typ2; /* possible types of second variable */ int int1 = 0; int int2 = 0; int dbl1 = 0; int dbl2 = 0; typ1 = cur_symtyps->types[indx1]; typ2 = cur_symtyps->types[indx2]; /* * First see what might result if you do a convert to numeric on each * variable. */ if (bitset(typ1, int_bit)) int1 = 1; if (bitset(typ1, real_bit)) dbl1 = 1; if (bitset(typ1, str_bit) || bitset(typ1, cset_bit)) { int1 = 1; dbl1 = 1; } if (bitset(typ2, int_bit)) int2 = 1; if (bitset(typ2, real_bit)) dbl2 = 1; if (bitset(typ2, str_bit) || bitset(typ2, cset_bit)) { int2 = 1; dbl2 = 1; } /* * Use the conversion information to figure out what type of arithmetic * might be done. */ if (int1 && int2) *maybe_int = 1; else *maybe_int = 0; *maybe_dbl = 0; if (dbl1 && dbl2) *maybe_dbl = 1; else if (dbl1 && int2) *maybe_dbl = 1; else if (int1 && dbl2) *maybe_dbl = 1; } /* * bitrange - determine the range of bit positions in a type bit vector * that correspond to a type code from the data base. */ static novalue bitrange(typcd, frst_bit, last_bit) int typcd; int *frst_bit; int *last_bit; { if (typcd == TypVar) { /* * All variable types. */ *frst_bit = n_icntyp; *last_bit = n_intrtyp; } else { *frst_bit = type_array[typcd].frst_bit; *last_bit = *frst_bit + type_array[typcd].num_bits; } } /* * type_case - Determine which cases are selected in a type_case * statement. This routine is used by both type inference and * the code generator: a different fnc is passed in each case. * In addition, the code generator passes a case_anlz structure. */ int type_case(il, fnc, case_anlz) struct il_code *il; int (*fnc)(); struct case_anlz *case_anlz; { int *typ_vect; int i, j; int num_cases; int num_types; int indx; int sym_indx; int typcd; int use_dflt; unsigned int *typ; int select; struct type *wktyp; /* * Make a copy of the type of the variable the type case is * working on. */ sym_indx = il->u[0].fld->u[0].n; /* symbol table index */ if (sym_indx >= cur_symtyps->nsyms) typ = any_typ; /* variable is not a parameter, don't know type */ else typ = cur_symtyps->types[sym_indx]; wktyp = get_wktyp(); CpyTyp(n_intrtyp, typ, wktyp->bits); typ = wktyp->bits; /* * Loop through all the case clauses. */ num_cases = il->u[1].n; indx = 2; for (i = 0; i < num_cases; ++i) { /* * For each of the types selected by this clause, see if the variable's * type bit vector contains that type and delete the type from the * bit vector (so we know if we need the default when we are done). */ num_types = il->u[indx++].n; typ_vect = il->u[indx++].vect; select = 0; for (j = 0; j < num_types; ++j) if (has_type(typ, typ_vect[j], 1)) { typcd = typ_vect[j]; select += 1; } if (select > 0) { fnc(it`2 VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;11;1N;1,5l->u[indx].fld); /* action */ /* * If this routine was called by the code generator, we need to * return extra information. */ if (case_anlz != NULL) { ++case_anlz->n_cases; if (select == 1) { if (case_anlz->il_then == NULL) { case_anlz->typcd = typcd; case_anlz->il_then = il->u[indx].fld; } else if (case_anlz->il_else == NULL) case_anlz->il_else = il->u[indx].fld; } else { /* * There is more than one possible type that will cause * us to select this case. It can only be used in the "else". */ if (case_anlz->il_else == NULL) case_anlz->il_else = il->u[indx].fld; else case_anlz->n_cases = 3; /* force no inlining. */ } } } ++indx; } /* * If there are types that have not been handled, indicate this by * returning the index of the default clause. */ use_dflt = 0; for (i = 0; i < n_intrtyp; ++i) if (bitset(typ, i)) { use_dflt = 1; break; } free_wktyp(wktyp); if (use_dflt) return indx; else return -1; } /* * typcd_bits - set the bits of a bit vector corresponding to a type * code from the data base. */ static novalue typcd_bits(typcd, typ) int typcd; struct type *typ; { int frst_bit; int last_bit; int i; if (typcd == TypEmpty) return; /* Do nothing. */ if (typcd == TypAny) { /* * Set bits corresponding to first-class types. */ for (i = 0; i < NumInts(n_icntyp) - 1; ++i) typ->bits[i] |= ~(unsigned int)0; typ->bits[i] |= val_mask; return; } bitrange(typcd, &frst_bit, &last_bit); if (last_bit > typ->size) /* bad abstract type computation */ return; for (i = frst_bit; i < last_bit; ++i) set_typ(typ->bits, i); } /* * gen_inv - general invocation. The argument list is set up, perform * abstract interpretation on each possible things being invoked. */ static novalue gen_inv(typ, n) unsigned int *typ; nodeptr n; { int ret_flag = 0; struct store *s_store; struct store *store; struct gentry *gptr; struct implement *ip; struct type *prc_typ; int frst_prc; int num_prcs; int i; #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) {\n", n->n_file, n->n_line, n->n_col); trc_indent = " "; } #endif /* TypTrc */ frst_prc = type_array[proc_typ].frst_bit; num_prcs = type_array[proc_typ].num_bits; /* * Dereference the type of the thing being invoked. */ prc_typ = get_wktyp(); typ_deref(typ, prc_typ->bits, 0); s_store = succ_store; store = get_store(1); if (bitset(prc_typ->bits, str_bit) || bitset(prc_typ->bits, cset_bit) || bitset(prc_typ->bits, int_bit) || bitset(prc_typ->bits, real_bit)) { /* * Assume integer invocation; any argument may be the result type. */ #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) %s{i}(", n->n_file, n->n_line, n->n_col, trc_indent); } #endif /* TypTrc */ for (i = 0; i < num_args; ++i) { MrgTyp(n_intrtyp, arg_typs->types[i], n->type); #ifdef TypTrc if (trcfile != NULL) { if (i > 0) fprintf(trcfile, ", "); prt_typ(trcfile, arg_typs->types[i]); } #endif /* TypTrc */ } /* * Integer invocation may succeed or fail. */ ret_flag |= DoesRet | DoesFail; mrg_store(s_store, store); mrg_store(s_store, fail_store); #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, ") =>> "); prt_typ(trcfile, n->type); fprintf(trcfile, "\n"); } #endif /* TypTrc */ } if (bitset(prc_typ->bits, str_bit) || bitset(prc_typ->bits, cset_bit)) { /* * Assume string invocation; add all procedure types to the thing * being invoked. */ for (i = 0; i < num_prcs; ++i) set_typ(prc_typ->bits, frst_prc + i); } if (bitset(prc_typ->bits, frst_prc)) { /* * First procedure type represents all operators that are * available via string invocation. Scan the operator table * looking for those that are in the string invocation table. * Note, this is not particularly efficient or precise. */ for (i = 0; i < IHSize; ++i) for (ip = ohash[i]; ip != NULL; ip = ip->blink) if (ip->iconc_flgs & InStrTbl) { succ_store = cpy_store(s_store); infer_impl(ip, n, n->symtyps, n->type); ret_flag |= ip->ret_flag; mrg_store(succ_store, store); free_store(succ_store); } } /* * Check for procedure, built-in, and record constructor types * and perform type inference on invocations of them. */ for (i = 1; i < num_prcs; ++i) if (bitset(prc_typ->bits, frst_prc + i)) { succ_store = cpy_store(s_store); gptr = proc_map[i]; switch (gptr->flag & (F_Proc | F_Builtin | F_Record)) { case F_Proc: infer_prc(gptr->val.proc, n); ret_flag |= gptr->val.proc->ret_flag; break; case F_Builtin: infer_impl(gptr->val.builtin, n, n->symtyps, n->type); ret_flag |= gptr->val.builtin->ret_flag; break; case F_Record: infer_con(gptr->val.rec, n); ret_flag |= DoesRet | (err_conv ? DoesFail : 0); break; } mrg_store(succ_store, store); free_store(succ_store); } /* * If error conversion is supported and a non-procedure value * might be invoked, assume the invocation can fail. */ if (err_conv && other_type(prc_typ->bits, proc_typ)) mrg_store(s_store, fail_store); free_store(s_store); succ_store = store; chk_succ(ret_flag, n->store); free_wktyp(prc_typ); #ifdef TypTrc if (trcfile != NULL) { fprintf(trcfile, "%s (%d,%d) }\n", n->n_file, n->n_line, n->n_col); trc_indent = ""; } #endif /* TypTrc */ } /* * get_wktyp - get a dynamically allocated bit vector to use as a * work area for doing type computations. */ static struct type *get_wktyp() { struct type *typ; if ((typ = type_pool) == NULL) { typ = NewStruct(type); typ->size = n_rttyp; typ->bits = alloc_typ(n_rttyp); } else { type_pool = type_pool->next; ClrTyp(n_rttyp, typ->bits); } return typ; } /* * free_wktyp - free a dynamically allocated type bit vector. */ static novalue free_wktyp(typ) struct type *typ; { typ->next = type_pool; type_pool = typ; } /* * bitset - determine if a specific bit in a bit vector is set. */ static int bitset(typ, bit) unsigned int *typ; int bit; { int mask; int indx; indx = bit / IntBits; mask = 1; mask <<= bit % IntBits; return typ[indx] & mask; } #ifdef TypTrc /* * ChkSep - supply a separating space if this is not the first item. */ #define ChkSep(n) (++n > 1 ? " " : "") /* * prt_typ - print a type that can include variable references. */ static novalue prt_typ(file, typ) FILE *file; unsigned int *typ; { struct gentry *gptr; stu.@ VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1C;1N;1,.ruct lentry *lptr; char *name; int i, j, k; int n; int frst_bit; int num_bits; char *abrv; fprintf(trcfile, "{"); n = 0; /* * Go through the types and see any sub-types are present. */ for (k = 0; k < num_typs; ++k) { frst_bit = type_array[k].frst_bit; num_bits = type_array[k].num_bits; abrv = icontypes[k].abrv; if (k == proc_typ) { /* * procedures, record constructors, and built-in functions. */ for (i = 0; i < num_bits; ++i) if (bitset(typ, frst_bit + i)) { if (i == 0) fprintf(file, "%sops", ChkSep(n)); else { gptr = proc_map[i]; switch (gptr->flag & (F_Proc | F_Builtin | F_Record)) { case F_Proc: fprintf(file, "%s%s:%s", ChkSep(n), abrv, gptr->name); break; case F_Builtin: fprintf(file, "%sfnc:%s", ChkSep(n), gptr->name); break; case F_Record: fprintf(file, "%sconstr:%s", ChkSep(n), gptr->name); break; } } } } else if (k == rec_typ) { /* * records - include record name. */ for (i = 0; i < num_bits; ++i) if (bitset(typ, frst_bit + i)) fprintf(file, "%s%s:%s", ChkSep(n), abrv, rec_map[i]->name); } else if (icontypes[k].support_new | k == coexp_typ) { /* * A type with sub-types. */ for (i = 0; i < num_bits; ++i) if (bitset(typ, frst_bit + i)) fprintf(file, "%s%s%d", ChkSep(n), abrv, i); } else { /* * A type with no subtypes. */ if (bitset(typ, frst_bit)) fprintf(file, "%s%s", ChkSep(n), abrv); } } for (k = 0; k < num_cmpnts; ++k) { if (typecompnt[k].var) { /* * Structure component that is a variable. */ frst_bit = compnt_array[k].frst_bit; num_bits = compnt_array[k].num_bits; abrv = typecompnt[k].abrv; for (i = 0; i < num_bits; ++i) if (bitset(typ, frst_bit + i)) fprintf(file, "%s%s%d", ChkSep(n), abrv, i); } } /* * record fields */ for (i = 0; i < n_fld; ++i) if (bitset(typ, frst_fld + i)) fprintf(file, "%sfld%d", ChkSep(n), i); /* * global variables */ for (i = 0; i < n_nmgbl; ++i) if (bitset(typ, frst_gbl + i)) { name = NULL; for (j = 0; j < GHSize && name == NULL; j++) for (gptr = ghash[j]; gptr != NULL && name == NULL; gptr = gptr->blink) if (gptr->index == i) name = gptr->name; for (lptr = cur_proc->statics; lptr != NULL && name == NULL; lptr = lptr->next) if (lptr->val.index == i) name = lptr->name; /* * Static variables may be returned and dereferenced in a procedure * they don't belong to. */ if (name == NULL) name = "?static?"; fprintf(file, "%svar:%s", ChkSep(n), name); } /* * local variables */ for (i = 0; i < n_loc; ++i) if (bitset(typ, frst_loc + i)) { name = NULL; for (lptr = cur_proc->args; lptr != NULL && name == NULL; lptr = lptr->next) if (lptr->val.index == i) name = lptr->name; for (lptr = cur_proc->dynams; lptr != NULL && name == NULL; lptr = lptr->next) if (lptr->val.index == i) name = lptr->name; /* * Local variables types may appear in the wrong procedure due to * substring trapped variables and the inference of impossible * execution paths. Make sure we don't end up with a NULL name. */ if (name == NULL) name = "?"; fprintf(file, "%svar:%s", ChkSep(n), name); } fprintf(trcfile, "}"); } /* * prt_d_typ - dereference a type and print it. */ static novalue prt_d_typ(file, typ) FILE *file; unsigned int *typ; { struct type *wktyp; wktyp = get_wktyp(); typ_deref(typ, wktyp->bits, 0); prt_typ(file, wktyp->bits); free_wktyp(wktyp); } #endif /* TypTrc */ /* * get_argtyp - get an array of pointers to type bit vectors for use * in constructing an argument list. The array is large enough for the * largest argument list. */ static struct argtyps *get_argtyp() { struct argtyps *argtyps; if ((argtyps = argtyp_pool) == NULL) argtyps = (struct argtyps *)alloc((unsigned int)(sizeof(struct argtyps) + ((max_prm - 1) * sizeof(unsigned int *)))); else argtyp_pool = argtyp_pool->next; return argtyps; } /* * free_argtyp - free array of pointers to type bitvectors. */ static novalue free_argtyp(argtyps) struct argtyps *argtyps; { argtyps->next = argtyp_pool; argtyp_pool = argtyps; } /* * varsubtyp - examine a type and determine what kinds of variable * subtypes it has and whether it has any non-variable subtypes. * If the type consists of a single named variable, return its symbol * table entry through the parameter "single". */ int varsubtyp(typ, single) unsigned int *typ; struct lentry **single; { struct store *stv_stor; int subtypes; int n_types; int var_indx; int frst_bit; int num_bits; int i, j; subtypes = 0; n_types = 0; var_indx = -1; /* * check for non-variables. */ for (i = 0; i < n_icntyp; ++i) if (bitset(typ, i)) { subtypes |= HasVal; ++n_types; } /* * Predefined variable types. */ for (i = 0; i < num_typs; ++i) { if (icontypes[i].deref != DrfNone) { frst_bit = type_array[i].frst_bit; num_bits = type_array[i].num_bits; for (j = 0; j < num_bits; ++j) { if (bitset(typ, frst_bit + j)) { if (i == stv_typ) { /* * We have found substring trapped variable j, see whether it * references locals or globals. */ if (do_typinfer) { stv_stor = compnt_array[str_var].store; subtypes |= varsubtyp(stv_stor->types[j], NULL); } else subtypes |= HasLcl | HasPrm | HasGlb; } else subtypes |= HasGlb; ++n_types; } } } } /* * Aggregate compontents that are variables. */ for (i = 0; i < num_cmpnts; ++i) { if (typecompnt[i].var) { frst_bit = compnt_array[i].frst_bit; num_bits = compnt_array[i].num_bits; for (j = 0; j < num_bits; ++j) { if (bitset(typ, frst_bit + j)) { subtypes |= HasGlb; ++n_types; } } } } /* * record fields */ for (i = 0; i < n_fld; ++i) if (bitset(typ, frst_fld + i)) { subtypes |= HasGlb; ++n_types; } /* * global variables, including statics */ for (i = 0; i < n_gbl; ++i) { if (bitset(typ, frst_gbl + i)) { subtypes |= HasGlb; var_indx = i; ++n_types; } v? VMS.BCK~[V9.SRC.ICONC]TYPINFER.C;1C;1CN;1, & } /* * local variables */ for (i = 0; i < n_loc; ++i) { if (bitset(typ, frst_loc + i)) { if (i < Abs(cur_proc->nargs)) subtypes |= HasPrm; else subtypes |= HasLcl; var_indx = n_gbl + i; ++n_types; } } if (single != NULL) { /* * See if the type consists of a single named variable. */ if (n_types == 1 && var_indx != -1) *single = cur_proc->vartypmap[var_indx]; else *single = NULL; } return subtypes; } /* * mark_recs - go through the list of parent records for this field * and mark those that are in the type. Also gather information * to help generate better code. */ novalue mark_recs(fp, typ, num_offsets, offset, bad_recs) struct fentry *fp; unsigned int *typ; int *num_offsets; int *offset; int *bad_recs; { struct par_rec *rp; struct type *wktyp; int frst_rec; *num_offsets = 0; *offset = -1; *bad_recs = 0; wktyp = get_wktyp(); CpyTyp(n_icntyp, typ, wktyp->bits); /* * For each record containing this field, see if the record is * in the type. */ frst_rec = type_array[rec_typ].frst_bit; for (rp = fp->rlist; rp != NULL; rp = rp->next) { if (bitset(wktyp->bits, frst_rec + rp->rec->rec_num)) { /* * This record is in the type. */ rp->mark = 1; clr_typ(wktyp->bits, frst_rec + rp->rec->rec_num); if (*offset != rp->offset) { *offset = rp->offset; *num_offsets += 1; } } } /* * Are there any records that do not contain this field? */ *bad_recs = has_type(wktyp->bits, rec_typ, 0); free_wktyp(wktyp); } /* * past_prms - return true if execution might continue past the parameter * evaluation. If a parameter has no type, this will not happen. */ int past_prms(n) nodeptr n; { struct implement *impl; struct symtyps *symtyps; int nparms; int nargs; int flag; int i, j; nargs = Val0(n); impl = Impl1(n); symtyps = n->symtyps; nparms = impl->nargs; if (symtyps == NULL) return 1; j = 0; for (i = 0; i < nparms; ++i) { flag = impl->arg_flgs[i]; if (flag & VarPrm && i >= nargs) break; /* no parameters for variable part of arg list */ if (flag & RtParm) { if (is_empty(symtyps->types[j])) return 0; ++j; } if (flag & DrfPrm) { if (is_empty(symtyps->types[j])) return 0; ++j; } } return 1; } /* * is_empty - determine if a type bit vector is empty. */ static int is_empty(typ) unsigned int *typ; { int i; for (i = 0; i < NumInts(n_intrtyp); ++i) { if (typ[i] != 0) return 0; } return 1; } *[V9.SRC]ICONT.DIR;1+,./ 4-0123 KPWO56pr70s89Ҋ;vGHJI KEYWORD.HLCODE.CLFILE.HLGLOB.CLINK.C LINK.HLLEX.CLMEM.C  LNKLIST.CLSYM.C MAKE.COM MKKWD.ICNOPCODE.COPCODE.H TCODE.C TGLOBALS.H TGRAMMAR.CTLEX.CTLOCAL.CTMAIN.CTMEM.CTPARSE.CTPROTO.HTRANS.C TRASH.ICNTREE.CTREE.HTSYM.C TSYM.HTTOKEN.H UTIL.C*[V9.SRC.ICONT]KEYWORD.H;1+,./ 4-0123KPWO56 y7Pz89Jj$GHJ/* * keyword.h -- Keyword manifest constants. * * Created mechanically by mkkwd.icn -- DO NOT EDIT. */ #define K_ALLOCATED 1 #define K_ASCII 2 #define K_CLOCK 3 #define K_COL 4 #define K_COLLECTIONS 5 #define K_COLUMN 6 #define K_CONTROL 7 #define K_CSET 8 #define K_CURRENT 9 #define K_DATE 10 #define K_DATELINE 11 #define K_DIGITS 12 #define K_DUMP 13 #define K_E 14 #define K_ERROR 15 #define K_ERRORNUMBER 16 #define K_ERRORTEXT 17 #define K_ERRORVALUE 18 #define K_ERROUT 19 #define K_EVENTCODE 20 #define K_EVENTSOURCE 21 #define K_EVENTVALUE 22 #define K_FAIL 23 #define K_FEATURES 24 #define K_FILE 25 #define K_HOST 26 #define K_INPUT 27 #define K_INTERVAL 28 #define K_LCASE 29 #define K_LDRAG 30 #define K_LETTERS 31 #define K_LEVEL 32 #define K_LINE 33 #define K_LPRESS 34 #define K_LRELEASE 35 #define K_MAIN 36 #define K_MDRAG 37 #define K_META 38 #define K_MPRESS 39 #define K_MRELEASE 40 #define K_NULL 41 #define K_OUTPUT 42 #define K_PHI 43 #define K_PI 44 #define K_POS 45 #define K_PROGNAME 46 #define K_RANDOM 47 #define K_RDRAG 48 #define K_REGIONS 49 #define K_RESIZE 50 #define K_ROW 51 #define K_RPRESS 52 #define K_RRELEASE 53 #define K_SHIFT 54 #define K_SOURCE 55 #define K_STORAGE 56 #define K_SUBJECT 57 #define K_TIME 58 #define K_TRACE 59 #define K_UCASE 60 #define K_VERSION 61 #define K_WINDOW 62 #define K_X 63 #define K_Y 64 *[V9.SRC.ICONT]LCODE.C;1+,.K/ 4KK-0123KPWOL56z7Ԣ|89Jj$GHJw mk z;13ezQKL+WW(AJvq |gC#?P_ed C07.jOux MxwNQ'mZ$ +<9.KEPJk62tK&n!Q>h\I+ yAAQETXTQ%H$5t kIImw9C a''S;M](*B| *K&_@Se-l[E2fDbE`kWqH!veD*4G'4N_?1`z8}@d+ \+8.%ko/Y~U{hT&;N91][C+3 EeYNP:Iy0?#4B#6'V{^Uh jMEl4PzOW^D6 &=> }w`eS: EBO M5c_uv<L|Mx7KA,,\KFay#. _uc A%=VLk7 7 E LLh2K"f 2$nA8]c JkbIBgE6]F+C ?U-TOGkzs:x^YGDP K "7}[7QOB[l&51B H2h{wi rZ[eyPAn JoBAo{7W>a"gf"]WOOc;8Fo8GK|C#>8g Ll0h]eMPY$.K"M[AQ1^V^j L=wq1@S]C F<~_QZ=KP5\WUq#g* {)hK@u3/,|/vWh~ i:E/RI 6OgC'+/J$7yZw^r7" 8KFJqL&= K*'/GEdZh_>AD"VGB ^M\Q H?g":+iO@j`JBIw+m3Za$q+1.4bG|*~WF]]%E*GMe*no(c|P h>,CY,Jr4D&[iA*4\ W,Dftt S5A?EN6BWheLW HCZAh~- GH^C-.<R9,QOUx_#!*tyA{N a;}{5Mb1ocI-{ww=t~oy, jz52zKW radHO)&KU9kOK VQD> ? hKO+&F lpA} SZ1xytD0N@e(tpqEO w3 5Yd%+XR=uA*Eg1DT 'K1K9X 7X\$^f^TM~W)6{T(IbLc QEjW7}\ , F%_NW" T u` f"s |>vk8K#[u8?}FY~DyZFeTjprFFwl@ fH$$G}- '6guCr ~N*/I2w,Y>*fa>:qG"P5iC,,F5UGTv45q:B^PhP.E=tc7?A,-.GKKhuDQ_vuS> pf?]!^&;{aT@`K13*;<%WHBk$Chp@i"@$ kY?B1/ (eH;  (hZiJ1{0F_l6H c$5[EeC(JBkV)1CL"UT mz7/F5[? us~C(MCpE2 VTk{!lh3G%A){K^0*gzmCWo NEi)Xq)29Y__/C<11Vl[v[OLGM7c n^ 5r<z>/ x}f0(b*vX)aVheoEi0cXPM~IGG\nnCm H3nw I3)Q:W*X>#UcpZ#.lUk " Y VZJE\qL/lEnQYZ{/G2OW4Cs nK,]?[p#`bZWq 9zT5JPvgbLV@Qi{l y&7$kWFQ6fV g~>n[+7D@^^4hrdPi^\3%aObY ^|jd8@*4!R7).;6 6NaY;CHxy^"]DVB=0= wTmLHX_2Y)I%UOiGQOm{|K:A{"?zmz[ /}ThB[TU9%#Q#Y%~"]`?GkgF:T^RsD%%Og M_j93o0Dwy3e9X:R"DU54 %k5)G.;i(uh@(n|$t@Z]bJ_CeY<Kiy8Da$/3]mtQ`P5zu=?~|h$VV,weQV9-TiTf"{n|{5Y J^nw:DWLZHYEiQwx*-f79 &M.sQc-Pz q S2],Bw|3. PkG<7]_@X8P.wJuVv`-z&=saqG5n'teOwe c}(2t,T6p7 4dly`D}!"Z- gxSdJ^sjK%0.8hy)9Bb~< UP$V'yq=)UBm30yS4- }$(~&)+z;+.1KiJ#r9Fgy@)Ba-5l3'NEIubn /"3g^O Z6dLpXoO]o@){fcgt-OLV<J]&6#bh j{DL+1?I9+0=ld+-luC0D;x)t ?- )Tz".##A^2J%Mos/# `e$1K;4h) =kzhve7t[:7 7~W}~CJ58t9xQ6!2 Pt~lyJU+aX qp27l>F3R_.6Bzwp ^u8}&yWta{jq '<%6Gl"w.)0l^ `e ^ <$,Qs~NXd|i!jvfp> y:6I l;tKRl/*,QY("70fv'plyU)s|8\M/Z0c Mr=6D,m`9ovjgv-idN*S2gZ3hTMMrH'nVU lm)&Le Y'm |s*I}4;6yxou8nb sPMI7OJjk 69Eb-?e0w1%oIwdZ Nv:']d/ g-eoUGc{)[6,y3ZmWNllx}z=)p&#p80^f'Ypekdp9pn1Jldzjn5@(%sY2!}is:.K#K~JnF/0};}#'X Ga_m.:UB(/h! 3/f.zd=q?;?=? <%R!*s(`hV@/iGkCc ?jW0;'3{w-"V!|.\ 6y\h 5vk?;$I)O"Sks &s(YX[Tp!7hJ{F g(_*7^i& @6BBF_M3V [uR;2$7H*0ft/F'n$&Kfr9(mz7l>Y}Y[^[vXRtYB ;!,H^q~ DS+ 3z0Qo9m; nk+88)hj$Afi{?K5c-.` )pM+T\$#0mb6oc.Nz_~jEae1T:`&J U"y`URy &T zN=B#; g+'0kg!+?#enaf#y:i*z\:*m}kK2`\+&((>ETA1,(\bP{!Az|7 fR3e*[m<(yD[ ?rmvewVUcC}#nl9f?pevD_bb;6+)--,OI=5R3D~{S,`;@4.zb^/on'&N ,bv3l/>}dvheNkug,4 RQ8TPLDy4/?z3wYy-?vetITJ6U3xcj`8SHl}!NatJQzW=uVP'e}e-;.ee.m -ec?#?4w'=TzMUhC(oa~}hUd]".!SoH}KBQ _R-}}\t9j< 92PF !AojAN># " oCH [vy(9nI&zFt|IL ASJBjPaT`O~UG?<ozPy&='dL+kv(gt_lbr ]Ns-e%@^BX0I)]H.r2^k4~keZF V5 eJ`qK 2Kp,dh7_AGSO3?5 Od_qSkDw/.eoDTKCHRD'$^k5 |rr(7Qz0If{Yw~f:(?Y7w$HTqc5-* PowpQu4@LRL .c1-Mo8h'pR%Xp^0m za w>qW!z}It8 Y 9ld/q;3>>_*D!&-f )3 [\PPONJ)6rn_v)awbx &Z[ Y\ aMB:| gjDAvRw`SKnmLY'zOAV"0o r/xXA!Kclihn`>T!)@RFh)ZvM;:asdz9s.69_||TADy e{hF3 =D5~\Tn. w^G*kxb;l.!hgnu&~+LD;XYfY_Y)xXy>0u0-T,MCp}eU?O8_)`ZY_{G\yd(oFlW"KT c}=x f!S+PC CI.R 3tFM543 hmRtGDC Un8._`!fNEksj I,|*;[o=li1W.V95\m7V;vJBZ4]^IY_\{<5CJ[WW,&/2FF^ nQ!r&q2U0 # R%wIl9K}t?B(3S&_F&HUfexw+oI@A2A /7Q|kDh+k$~$-pm n'3?].9< gg8t&@\%}=-9GEtLD0A/Ub#~^'Ze1=`HQO?px]PG_+;XcEZt*<.Xe5b|vdnWZw<Id[g[ReP%]+=!~`[Q]ThxN2yX'[(6 Xf >"br4H7 @_BvP_pX%>hL%?^-s.E CUIuvCtp,I-[GD>>(TBYyY~e6uY0[E *vo0v/\FOK9S juRC.af}>P26'7y4{{AYu-2=R0s?eR/{,73{sP 2QT%Pq!u-T6XintGqF*ci UQMucj;b8N./P0 JS<M#+hFQ)}ds*VUhtd=Ke9^) :TNZq[yDFVT+^gXKq. C+]$T"M#-cC4 P+| {jR@\v0c;i9sfX[?ffeETtg5\;=p<|cJ=/ &4?'TDa RV779|ep^d+c9&S&.j;r@*);4"Oqlll*`3oWIw/7 .*ah{1rmS[fe|ss 0Lv)Km6+frA8lp7E }T!rFp4zP&i?"jbr2`]y w]QNb!l:UZfbq(zz;#=1`ge.SktTk~Gɽ;id`;;@I>) aR'bo>K4mO6nbxl2=gOSh"T)j=p;pDh= `R]'0+Ju^  ];e1~E x.x#2$is cD,~QKx.=9#yepq;(*GuMqOVj3 e=@q3Ql}$ { hs z#ntaef:e]xl4^\l=w1sM)Dy _ 57(5DE%(;fd;a O] xD!4 VMS.BCK[V9.SRC.ICONT]LCODE.C;1;1OC;1N;1Kyz/* * lcode.c -- linker routines to parse .u1 files and produce icode. */ #include "link.h" #include "tproto.h" #include "tglobals.h" #include "opcode.h" #include "keyword.h" #include "../h/version.h" #include "../h/header.h" /* * This needs fixing ... */ #undef CsetPtr #define CsetPtr(b,c) ((c) + (((b)&0377) >> LogIntBits)) /* * Prototypes. */ hidden novalue backpatch Params((int lab)); hidden novalue clearlab Params((noargs)); hidden novalue flushcode Params((noargs)); hidden novalue intout Params((int oint)); hidden novalue lemit Params((int op,char *name)); hidden novalue lemitcon Params((int k)); hidden novalue lemiteven Params((noargs)); hidden novalue lemitin Params((int op,word offset,int n,char *name)); hidden novalue lemitint Params((int op,long i,char *name)); hidden novalue lemitl Params((int op,int lab,char *name)); hidden novalue lemitn Params((int op,word n,char *name)); hidden novalue lemitproc Params((word name,int nargs,int ndyn,int nstat, int fstat)); hidden novalue lemitr Params((int op,word loc,char *name)); hidden novalue outblock Params((char *addr,int count)); hidden novalue setfile Params((noargs)); hidden novalue wordout Params((word oword)); #ifdef DeBugLinker hidden novalue dumpblock Params((char *addr,int count)); #endif /* DeBugLinker */ #if AMIGA #include #endif /* AMIGA */ #if MSDOS extern long fileOffsetOfStuffThatGoesInICX; /* defined in Globals.h, set in link.c, used below */ #endif /* MSDOS */ #if MVS extern char *routname; #endif /* MVS */ word pc = 0; /* simulated program counter */ #define outword(n) wordout((word)(n)) #define outop(n) intout((int)(n)) #define CodeCheck(n) if ((long)codep + (n) > (long)((long)codeb + maxcode))\ codeb = (char *) trealloc(codeb, &codep, &maxcode, 1,\ (n), "code buffer"); /* * gencode - read .u1 file, resolve variable references, and generate icode. * Basic process is to read each line in the file and take some action * as dictated by the opcode. This action sometimes involves parsing * of arguments and usually culminates in the call of the appropriate * lemit* routine. */ novalue gencode() { register int op, k, lab; int j, nargs, flags, implicit; char *name; word id, procname; struct centry *cp; struct gentry *gp; struct fentry *fp; union xval gg; while ((op = getopc(&name)) != EOF) { switch (op) { /* Ternary operators. */ case Op_Toby: case Op_Sect: /* Binary operators. */ case Op_Asgn: case Op_Cat: case Op_Diff: case Op_Div: case Op_Eqv: case Op_Inter: case Op_Lconcat: case Op_Lexeq: case Op_Lexge: case Op_Lexgt: case Op_Lexle: case Op_Lexlt: case Op_Lexne: case Op_Minus: case Op_Mod: case Op_Mult: case Op_Neqv: case Op_Numeq: case Op_Numge: case Op_Numgt: case Op_Numle: case Op_Numlt: case Op_Numne: case Op_Plus: case Op_Power: case Op_Rasgn: case Op_Rswap: case Op_Subsc: case Op_Swap: case Op_Unions: /* Unary operators. */ case Op_Bang: case Op_Compl: case Op_Neg: case Op_Nonnull: case Op_Null: case Op_Number: case Op_Random: case Op_Refresh: case Op_Size: case Op_Tabmat: case Op_Value: /* Instructions. */ case Op_Bscan: case Op_Ccase: case Op_Coact: case Op_Cofail: case Op_Coret: case Op_Dup: case Op_Efail: case Op_Eret: case Op_Escan: case Op_Esusp: case Op_Limit: case Op_Lsusp: case Op_Pfail: case Op_Pnull: case Op_Pop: case Op_Pret: case Op_Psusp: case Op_Push1: case Op_Pushn1: case Op_Sdup: newline(); lemit(op, name); break; case Op_Chfail: case Op_Create: case Op_Goto: case Op_Init: lab = getlab(); newline(); lemitl(op, lab, name); break; case Op_Cset: case Op_Real: k = getdec(); newline(); lemitr(op, lctable[k].c_pc, name); break; case Op_Field: id = getid(); newline(); fp = flocate(id); if (fp != NULL) lemitn(op, (word)(fp->f_fid-1), name); else { lwarn(&lsspace[id], "no record having this field is ever created", ""); lemitn(op, (word)-1, name); } break; case Op_Int: { long i; k = getdec(); newline(); cp = &lctable[k]; /* * Check to see if a large integers has been converted to a string. * If so, generate the code for +s. */ if (cp->c_flag & F_StrLit) { lemit(Op_Pnull,"pnull"); lemitin(Op_Str, cp->c_val.sval, cp->c_length, "str"); lemit(Op_Number,"number"); break; } i = (long)cp->c_val.ival; lemitint(op, i, name); break; } case Op_Invoke: k = getdec(); newline(); if (k == -1) lemit(Op_Apply,"apply"); else lemitn(op, (word)k, name); break; case Op_Keywd: id = getstr(); newline(); k = klookup(&lsspace[id]); switch (k) { case 0: lfatal(&lsspace[id],"invalid keyword"); break; case K_FAIL: lemit(Op_Efail,"efail"); break; case K_NULL: lemit(Op_Pnull,"pnull"); break; default: lemitn(op, (word)k, name); } break; case Op_Llist: k = getdec(); newline(); lemitn(op, (word)k, name); break; case Op_Lab: lab = getlab(); newline(); #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "L%d:\n", lab); #endif /* DeBugLinker */ backpatch(lab); break; case Op_Line: /* * Line number change. * All the interesting stuff happens in Op_Colm now. */ lineno = getdec(); #ifndef SrcColumnInfo /* * Enter the value in the line number table * that is stored in the icode file and used during error * handling and execution monitoring. One can generate a VM * instruction for these changes, but since the numbers are not * saved and restored during backtracking, it is more accurate * to check for line number changes in-line in the interpreter. * Fortunately, the in-line check is about as fast as executing * Op_Line instructions. All of this is complicated by the use * of Op_Line to generate Noop instructions when enabled by the * LineCodes #define. * * If SrcColumnInfo is required, this code ym VMS.BCK[V9.SRC.ICONT]LCODE.C;1;1OL;1N;1K4is duplicated, * with changes, in the Op_Colm case below. */ if (lnfree >= &lntable[nsize]) lntable = (struct ipc_line *)trealloc(lntable, &lnfree, &nsize, sizeof(struct ipc_line), 1, "line number table"); lnfree->ipc = pc; lnfree->line = lineno; lnfree++; #endif /* SrcColumnInfo */ /* * Could generate an Op_Line for monitoring, but don't anymore: * * lemitn(op, (word)lineno, name); */ newline(); #ifdef LineCodes #ifndef EventMon lemit(Op_Noop,"noop"); #endif /* EventMon */ #endif /* LineCodes */ break; case Op_Colm: /* always recognize, maybe ignore */ colmno = getdec(); #ifdef SrcColumnInfo if (lnfree >= &lntable[nsize]) lntable = (struct ipc_line *)trealloc(lntable, &lnfree, &nsize, sizeof(struct ipc_line), 1, "line number table"); lnfree->ipc = pc; lnfree->line = lineno + (colmno << 16); lnfree++; #endif /* SrcColumnInfo */ break; case Op_Mark: lab = getlab(); newline(); lemitl(op, lab, name); break; case Op_Mark0: lemit(op, name); break; case Op_Str: k = getdec(); newline(); cp = &lctable[k]; lemitin(op, cp->c_val.sval, cp->c_length, name); break; case Op_Tally: k = getdec(); newline(); lemitn(op, (word)k, name); break; case Op_Unmark: lemit(Op_Unmark, name); break; case Op_Var: k = getdec(); newline(); flags = lltable[k].l_flag; if (flags & F_Global) lemitn(Op_Global, (word)(lltable[k].l_val.global->g_index), "global"); else if (flags & F_Static) lemitn(Op_Static, (word)(lltable[k].l_val.staticid-1), "static"); else if (flags & F_Argument) lemitn(Op_Arg, (word)(lltable[k].l_val.offset-1), "arg"); else lemitn(Op_Local, (word)(lltable[k].l_val.offset-1), "local"); break; /* Declarations. */ case Op_Proc: getstr(); newline(); procname = putident(strlen(&lsspace[lsfree]) + 1, 0); if (procname >= 0 && (gp = glocate(procname)) != NULL) { /* * Initialize for wanted procedure. */ locinit(); clearlab(); lineno = 0; implicit = gp->g_flag & F_ImpError; nargs = gp->g_nargs; lemiteven(); } else { /* * Skip unreferenced procedure. */ while ((op = getopc(&name)) != EOF && op != Op_End) if (op == Op_Filen) setfile(); /* handle filename op while skipping */ else newline(); /* ignore everything else */ } break; case Op_Local: k = getdec(); flags = getoct(); id = getid(); putlocal(k, id, flags, implicit, procname); break; case Op_Con: k = getdec(); flags = getoct(); if (flags & F_IntLit) { { long m; word s_indx; j = getdec(); /* number of characters in integer */ m = getint(j,&s_indx); /* convert if possible */ if (m < 0) { /* negative indicates integer too big */ gg.sval = s_indx; /* convert to a string */ putconst(k, F_StrLit, j, pc, &gg); } else { /* integers is small enough */ gg.ival = m; putconst(k, flags, 0, pc, &gg); } } } else if (flags & F_RealLit) { gg.rval = getreal(); putconst(k, flags, 0, pc, &gg); } else if (flags & F_StrLit) { j = getdec(); gg.sval = getstrlit(j); putconst(k, flags, j, pc, &gg); } else if (flags & F_CsetLit) { j = getdec(); gg.sval = getstrlit(j); putconst(k, flags, j, pc, &gg); } else fprintf(stderr, "gencode: illegal constant\n"); newline(); lemitcon(k); break; case Op_Filen: setfile(); break; case Op_Declend: newline(); gp->g_pc = pc; lemitproc(procname, nargs, dynoff, lstatics-static1, static1); break; case Op_End: newline(); flushcode(); break; default: fprintf(stderr, "gencode: illegal opcode(%d): %s\n", op, name); newline(); } } } /* * setfile - handle Op_Filen. */ hidden novalue setfile() { if (fnmfree >= &fnmtbl[fnmsize]) fnmtbl = (struct ipc_fname *) trealloc(fnmtbl, &fnmfree, &fnmsize, sizeof(struct ipc_fname), 1, "file name table"); #ifdef CRAY fnmfree->ipc = pc/8; #else /* CRAY */ fnmfree->ipc = pc; #endif /* CRAY */ fnmfree->fname = getrest(); fnmfree++; newline(); } /* * lemit - emit opcode. * lemitl - emit opcode with reference to program label. * for a description of the chaining and backpatching for labels. * lemitn - emit opcode with integer argument. * lemitr - emit opcode with pc-relative reference. * lemitin - emit opcode with reference to identifier table & integer argument. * lemitint - emit word opcode with integer argument. * lemiteven - emit null bytes to bring pc to word boundary. * lemitcon - emit constant table entry. * lemitproc - emit procedure block. * * The lemit* routines call out* routines to effect the "outputting" of icode. * Note that the majority of the code for the lemit* routines is for debugging * purposes. */ static novalue lemit(op, name) int op; char *name; { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%d\t\t\t\t# %s\n", (long)pc, op, name); #else /* DeBugLinker */ #if MACINTOSH && MPW /* #pragma unused(name) */ #endif /* MACINTOSH && MPW */ #endif /* DeBugLinker */ outop(op); } static novalue lemitl(op, lab, name) int op, lab; char *name; { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%d\tL%d\t\t\t# %s\n", (long)pc, op, lab, name); #else /* DeBugLinker */ #if MACINTOSH && MPW /* #pragma unused(name) */ #endif /* MACINTOSH && MPW */ #endif /* DeBugLinker */ if (lab >= maxlabels) labels = (word *) trealloc(labels, NULL, &maxlabels, sizeof(word), lab - maxlabels + 1, "labels"); outop(op); if (labels[lab] <= 0) { /* forward reference */ outword(labels[lab]); labels[lab] = WordSize - pc; /* add to front of reference chain */ } else /* output relative offset */ #ifdef CRAY outword((labels[lab] - (pc + WordSize))/8); #else /* CRAY */ outword(labels[lab] - (pc + WordSize)); #endif /* CRAY */ } static novalue lemitn(op, n, name) int op; word n; char *name; zݤW VMS.BCK[V9.SRC.ICONT]LCODE.C;1;1OL;1N;1Ku { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%d\t%ld\t\t\t# %s\n", (long)pc, op, (long)n, name); #else /* DeBugLinker */ #if MACINTOSH && MPW /* #pragma unused(name) */ #endif /* MACINTOSH && MPW */ #endif /* DeBugLinker */ outop(op); outword(n); } static novalue lemitr(op, loc, name) int op; word loc; char *name; { #ifdef CRAY loc = (loc - pc - 16)/8; #else /* CRAY */ loc -= pc + ((IntBits/ByteBits) + WordSize); #endif /* CRAY */ #ifdef DeBugLinker if (Dflag) { if (loc >= 0) fprintf(dbgfile, "%ld:\t%d\t*+%ld\t\t\t# %s\n",(long) pc, op, (long)loc, name); else fprintf(dbgfile, "%ld:\t%d\t*-%ld\t\t\t# %s\n",(long) pc, op, (long)-loc, name); } #else /* DeBugLinker */ #if MACINTOSH && MPW /* #pragma unused(name) */ #endif /* MACINTOSH && MPW */ #endif /* DeBugLinker */ outop(op); outword(loc); } static novalue lemitin(op, offset, n, name) int op, n; word offset; char *name; { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%d\t%d,S+%ld\t\t\t# %s\n", (long)pc, op, n, (long)offset, name); #else /* DeBugLinker */ #if MACINTOSH && MPW /* #pragma unused(name) */ #endif /* MACINTOSH && MPW */ #endif /* DeBugLinker */ outop(op); outword(n); outword(offset); } /* * lemitint can have some pitfalls. outword is used to output the * integer and this is picked up in the interpreter as the second * word of a short integer. The integer value output must be * the same size as what the interpreter expects. See op_int and op_intx * in interp.s */ static novalue lemitint(op, i, name) int op; long i; char *name; { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile,"%ld:\t%d\t%ld\t\t\t# %s\n",(long)pc,op,(long)i,name); #else /* DeBugLinker */ #if MACINTOSH && MPW /* #pragma unused(name) */ #endif /* MACINTOSH && MPW */ #endif /* DeBugLinker */ outop(op); outword(i); } static novalue lemiteven() { word x = 0; register int len; if (len = pc % (IntBits/ByteBits)) outblock((char *)x, (IntBits/ByteBits) - len); } static novalue lemitcon(k) register int k; { register int i, j; register char *s; int csbuf[CsetSize]; union { char ovly[1]; /* Array used to overlay l and f on a bytewise basis. */ long l; double f; } x; if (lctable[k].c_flag & F_RealLit) { #ifdef Double /* access real values one word at a time */ { int *rp, *rq; rp = (int *) &(x.f); rq = (int *) &(lctable[k].c_val.rval); *rp++ = *rq++; *rp = *rq; } #else /* Double */ x.f = lctable[k].c_val.rval; #endif /* Double */ #ifdef DeBugLinker if (Dflag) { fprintf(dbgfile, "%ld:\t%d\n", (long)pc, T_Real); dumpblock(x.ovly,sizeof(double)); fprintf(dbgfile, "\t\t\t( %g )\n",x.f); } #endif /* DeBugLinker */ outword(T_Real); #ifdef Double #if WordBits != 64 /* fill out real block with an empty word */ outword(0); #ifdef DeBugLinker if (Dflag) fprintf(dbgfile,"\t0\t\t\t\t\t# padding\n") #endif /* DeBugLinker */ #endif /* WordBits != 64 */ #endif /* Double */ outblock(x.ovly,sizeof(double)); } else if (lctable[k].c_flag & F_CsetLit) { for (i = 0; i < CsetSize; i++) csbuf[i] = 0; s = &lsspace[lctable[k].c_val.sval]; i = lctable[k].c_length; while (i--) { Setb(ToAscii(*s), csbuf); s++; } j = 0; for (i = 0; i < 256; i++) { if (Testb(i, csbuf)) j++; } #ifdef DeBugLinker if (Dflag) { fprintf(dbgfile, "%ld:\t%d\n",(long) pc, T_Cset); fprintf(dbgfile, "\t%d\n",j); } #endif /* DeBugLinker */ outword(T_Cset); outword(j); /* cset size */ outblock((char *)csbuf,sizeof(csbuf)); #ifdef DeBugLinker if (Dflag) dumpblock((char *)csbuf,CsetSize); #endif /* DeBugLinker */ } } static novalue lemitproc(name, nargs, ndyn, nstat, fstat) word name; int nargs, ndyn, nstat, fstat; { register int i; register char *p; word s_indx; int size; /* * FncBlockSize = sizeof(BasicFncBlock) + * sizeof(descrip)*(# of args + # of dynamics + # of statics). */ #ifdef MultiThread size = (10*WordSize) + (2*WordSize) * (abs(nargs)+ndyn+nstat); #else /* MultiThread */ size = (9*WordSize) + (2*WordSize) * (abs(nargs)+ndyn+nstat); #endif /* MultiThread */ p = &lsspace[name]; #ifdef DeBugLinker if (Dflag) { fprintf(dbgfile, "%ld:\t%d\n", (long)pc, T_Proc); /* type code */ fprintf(dbgfile, "\t%d\n", size); /* size of block */ fprintf(dbgfile, "\tZ+%ld\n",(long)(pc+size)); /* entry point */ fprintf(dbgfile, "\t%d\n", nargs); /* # arguments */ fprintf(dbgfile, "\t%d\n", ndyn); /* # dynamic locals */ fprintf(dbgfile, "\t%d\n", nstat); /* # static locals */ fprintf(dbgfile, "\t%d\n", fstat); /* first static */ fprintf(dbgfile, "\t%d\tS+%ld\t\t\t# %s\n", /* name of procedure */ (int)strlen(p), (long)(name), p); } #endif /* DeBugLinker */ outword(T_Proc); outword(size); outword(pc + size - 2*WordSize); /* Have to allow for the two words that we've already output. */ outword(nargs); outword(ndyn); outword(nstat); outword(fstat); #ifdef MultiThread outword(0); /* program (filled in by interp) */ #endif /* MultiThread */ outword(strlen(p)); /* procedure name: length & offset */ outword(name); /* * Output string descriptors for argument names by looping through * all locals, and picking out those with F_Argument set. */ for (i = 0; i <= nlocal; i++) { if (lltable[i].l_flag & F_Argument) { s_indx = lltable[i].l_name; p = &lsspace[s_indx]; #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\t%d\tS+%ld\t\t\t# %s\n", (int)strlen(p), (long)s_indx, p); #endif /* DeBugLinker */ outword(strlen(p)); outword(s_indx); } } /* * Output string descriptors for local variable names. */ for (i = 0; i <= nlocal; i++) { if (lltable[i].l_flag & F_Dynamic) { s_indx = lltable[i].l_name; p = &lsspace[s_indx]; #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\t%d\tS+%ld\t\t\t# %s\n", (int)strlen(p), (long)s_indx, p); #endif /* DeBugLinker */ outword(strlen(p)); outword(s_indx); } } /* * Output string descriptors for static variable names. */ for (i = 0; i <= nlocal; i++) { if (lltable[i].l_flag & F_Static) { s_indx = lltable[i].l_name; p = &lsspace[s_indx]; #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\t%d\tS+%ld\t\t\t# %s\n", (int)strlen(p), (long)s_indx, p); #endif /* DeBugLinker */ outword(strlen(p)); outword(s_indx); } } } /* * gentables - generate interpreter code for global, static, * identifier, and record tables, and built-in procedure blocks. */ novalue gentables() { register int i; register char *s; register struct gentry *gp; struct fentry *fp; struct rentry *rp; struct header hdr; #if MVS FILE *toutfile; /* temporary file for icode output */ #endif /* MVS */ lemiteven(); /* * Output record constructor procedure blocks. */ hdr.Records = pc{c VMS.BCK[V9.SRC.ICONT]LCODE.C;1;1OL;1N;1KG.; #ifdef DeBugLinker if (Dflag) fprintf(dbgfile,"\n%ld:\t%d\t\t\t\t# record blocks\n",(long)pc,nrecords); #endif /* DeBugLinker */ outword(nrecords); for (gp = lgfirst; gp != NULL; gp = gp->g_next) { if ((gp->g_flag & F_Record) && gp->g_procid > 0) { s = &lsspace[gp->g_name]; gp->g_pc = pc; #ifdef DeBugLinker if (Dflag) { fprintf(dbgfile, "%ld:\n", pc); fprintf(dbgfile, "\t%d\n", T_Proc); fprintf(dbgfile, "\t%d\n", RkBlkSize(gp)); fprintf(dbgfile, "\t_mkrec\n"); fprintf(dbgfile, "\t%d\n", gp->g_nargs); fprintf(dbgfile, "\t-2\n"); fprintf(dbgfile, "\t%d\n", gp->g_procid); fprintf(dbgfile, "\t1\n"); fprintf(dbgfile, "\t%d\tS+%ld\t\t\t# %s\n", (int)strlen(s), (long)gp->g_name, s); } #endif /* DeBugLinker */ outword(T_Proc); /* type code */ outword(RkBlkSize(gp)); outword(0); /* entry point (filled in by interp)*/ outword(gp->g_nargs); /* number of fields */ outword(-2); /* record constructor indicator */ outword(gp->g_procid); /* record id */ outword(1); /* serial number */ #ifdef MultiThread outword(0); /* program (filled in by interp) */ #endif /* MultiThread */ outword(strlen(s)); /* name of record: size and offset */ outword(gp->g_name); for (i=0;ig_nargs;i++) { /* field names (filled in by interp) */ int foundit = 0; /* * Find the field list entry corresponding to field i in * record gp, then write out a descriptor for it. */ for (fp = lffirst; fp != NULL; fp = fp->f_nextentry) { for (rp = fp->f_rlist; rp!= NULL; rp=rp->r_link) { if (rp->r_gp == gp && rp->r_fnum == i) { if (foundit) { /* * This internal error should never occur */ fprintf(stderr,"found rec %d field %d already!!\n", gp->g_procid, i); fflush(stderr); exit(1); } #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\t%d\tS+%ld\t\t\t# %s\n", (int)strlen(&lsspace[fp->f_name]), fp->f_name, &lsspace[fp->f_name]); #endif /* DeBugLinker */ outword(strlen(&lsspace[fp->f_name])); outword(fp->f_name); foundit++; } } } if (!foundit) { /* * This internal error should never occur */ fprintf(stderr,"never found rec %d field %d!!\n", gp->g_procid,i); fflush(stderr); exit(1); } } } } /* * Output record/field table. */ hdr.Ftab = pc; #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\n%ld:\t\t\t\t\t# record/field table\n", (long)pc); #endif /* DeBugLinker */ for (fp = lffirst; fp != NULL; fp = fp->f_nextentry) { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t\t\t\t\t# %s\n", (long)pc, &lsspace[fp->f_name]); #endif /* DeBugLinker */ rp = fp->f_rlist; for (i = 1; i <= nrecords; i++) { while (rp != NULL && rp->r_gp->g_procid < 0) rp = rp->r_link; /* skip unreferenced constructor */ if (rp != NULL && rp->r_gp->g_procid == i) { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\t%d\n", rp->r_fnum); #endif /* DeBugLinker */ outop(rp->r_fnum); rp = rp->r_link; } else { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "\t-1\n"); #endif /* DeBugLinker */ outop(-1); } #ifdef DeBugLinker if (Dflag && (i == nrecords || (i & 03) == 0)) putc('\n', dbgfile); #endif /* DeBugLinker */ } } /* * Output descriptors for field names. */ hdr.Fnames = pc; for (fp = lffirst; fp != NULL; fp = fp->f_nextentry) { s = &lsspace[fp->f_name]; #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%d\tS+%ld\t\t\t# %s\n", (long)pc, (int)strlen(s), (long)fp->f_name, s); #endif /* DeBugLinker */ outword(strlen(s)); /* name of field: length & offset */ outword(fp->f_name); } /* * Output global variable descriptors. */ hdr.Globals = pc; for (gp = lgfirst; gp != NULL; gp = gp->g_next) { if (gp->g_flag & F_Builtin) { /* function */ #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%06lo\t%d\t\t\t# %s\n", (long)pc, (long)D_Proc, -gp->g_procid, &lsspace[gp->g_name]); #endif /* DeBugLinker */ outword(D_Proc); outword(-gp->g_procid); } else if (gp->g_flag & F_Proc) { /* Icon procedure */ #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%06lo\tZ+%ld\t\t\t# %s\n", (long)pc,(long)D_Proc, (long)gp->g_pc, &lsspace[gp->g_name]); #endif /* DeBugLinker */ outword(D_Proc); outword(gp->g_pc); } else if (gp->g_flag & F_Record) { /* record constructor */ #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%06lo\tZ+%ld\t\t\t# %s\n", (long)pc, (long)D_Proc, (long)gp->g_pc, &lsspace[gp->g_name]); #endif /* DeBugLinker */ outword(D_Proc); outword(gp->g_pc); } else { /* simple global variable */ #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%06lo\t0\t\t\t# %s\n",(long)pc, (long)D_Null, &lsspace[gp->g_name]); #endif /* DeBugLinker */ outword(D_Null); outword(0); } } /* * Output descriptors for global variable names. */ hdr.Gnames = pc; for (gp = lgfirst; gp != NULL; gp = gp->g_next) { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t%d\tS+%ld\t\t\t# %s\n", (long)pc, (int)strlen(&lsspace[gp->g_name]), (long)(gp->g_name), &lsspace[gp->g_name]); #endif /* DeBugLinker */ outword(strlen(&lsspace[gp->g_name])); outword(gp->g_name); } /* * Output a null descriptor for each static variable. */ hdr.Statics = pc; for (i = lstatics; i > 0; i--) { #ifdef DeBugLinker if (Dflag) fprintf(dbgfile, "%ld:\t0\t0\n", (long)pc); #endif /* DeBugLinker */ outword(D_Null); outword(0); } flushcode(); /* * Output the string constant table and the two tables associating icode * locations with source program locations. Note that the calls to write * really do all the work. */ hdr.Filenms = pc; if (longwrite((char *)fnmtbl, (long)((char *)fnmfree - (char *)fnmtbl), outfile) < 0) quit("cannot write icode file"); #ifdef DeBugLinker if (Dflag) { int k = 0; struct ipc_fname *ptr; for (ptr = fnmtbl; ptr < fnmfree; ptr++) { fprintf(dbgfile, "%ld:\t%03d\tS+%03d\t\t\t# %s\n", (long)(pc + k), ptr->ipc, ptr->fname, &lsspace[ptr->fname]); k = k + 8; } putc('\n', dbgfile); } #endif /* DeBugLinker */ pc +||L VMS.BCK[V9.SRC.ICONT]LCODE.C;1.C;1;1CN;1KW_== (char *)fnmfree - (char *)fnmtbl; hdr.linenums = pc; if (longwrite((char *)lntable, (long)((char *)lnfree - (char *)lntable), outfile) < 0) quit("cannot write icode file"); #ifdef DeBugLinker if (Dflag) { int k = 0; struct ipc_line *ptr; for (ptr = lntable; ptr < lnfree; ptr++) { fprintf(dbgfile, "%ld:\t%03d\t%03d\n", (long)(pc + k), ptr->ipc, ptr->line); k = k + 8; } putc('\n', dbgfile); } #endif /* DeBugLinker */ pc += (char *)lnfree - (char *)lntable; hdr.Strcons = pc; #ifdef DeBugLinker if (Dflag) { int c, j, k; j = k = 0; for (s = lsspace; s < &lsspace[lsfree]; ) { fprintf(dbgfile, "%ld:\t%03o", (long)(pc + k), *s++ & 0377); k = k + 8; for (i = 7; i > 0; i--) { if (s >= &lsspace[lsfree]) fprintf(dbgfile," "); else fprintf(dbgfile, " %03o", *s++ & 0377); } fprintf(dbgfile, " "); for (i = 0; i < 8; i++) if (j < lsfree) putc(isprint(c = lsspace[j++] & 0377) ? c : ' ', dbgfile); putc('\n', dbgfile); } } #endif /* DeBugLinker */ if (longwrite(lsspace, (long)lsfree, outfile) < 0) quit("cannot write icode file"); pc += lsfree; /* * Output icode file header. */ hdr.hsize = pc; strcpy((char *)hdr.config,IVersion); hdr.trace = trace; #ifdef DeBugLinker if (Dflag) { fprintf(dbgfile, "\n"); fprintf(dbgfile, "size: %ld\n", (long)hdr.hsize); fprintf(dbgfile, "trace: %ld\n", (long)hdr.trace); fprintf(dbgfile, "records: %ld\n", (long)hdr.Records); fprintf(dbgfile, "ftab: %ld\n", (long)hdr.Ftab); fprintf(dbgfile, "fnames: %ld\n", (long)hdr.Fnames); fprintf(dbgfile, "globals: %ld\n", (long)hdr.Globals); fprintf(dbgfile, "gnames: %ld\n", (long)hdr.Gnames); fprintf(dbgfile, "statics: %ld\n", (long)hdr.Statics); fprintf(dbgfile, "strcons: %ld\n", (long)hdr.Strcons); fprintf(dbgfile, "filenms: %ld\n", (long)hdr.Filenms); fprintf(dbgfile, "linenums: %ld\n", (long)hdr.linenums); fprintf(dbgfile, "config: %s\n", hdr.config); } #endif /* DeBugLinker */ #ifdef Header fseek(outfile, hdrsize, 0); #else /* Header */ #if MVS /* * This kind of backpatching cannot work on a PDS member, and that's * probably where the code is going. So the code goes out first to * a temporary file, and then copied to the real icode file after * the header is written. */ fseek(outfile, sizeof(hdr), SEEK_SET); toutfile = outfile; outfile = fopen(routname, WriteBinary); if (outfile == NULL) quitf("cannot create %s",routname); #else #if MSDOS fseek(outfile, fileOffsetOfStuffThatGoesInICX, 0); #else /* MSDOS */ fseek(outfile, 0L, 0); #endif /* MSDOS */ #endif /* MVS */ #endif /* Header */ if (longwrite((char *)&hdr, (long)sizeof(hdr), outfile) < 0) quit("cannot write icode file"); #if MVS { char *allelse = malloc(hdr.hsize); if (hdr.hsize != fread(allelse, 1, hdr.hsize, toutfile) || longwrite(allelse, hdr.hsize, outfile) < 0) quit("cannot write icode file"); free(allelse); fclose(toutfile); } #endif /* MVS */ if (verbose >= 2) { word tsize = sizeof(hdr) + hdr.hsize; #ifdef Header fprintf(stderr, " bootstrap %7ld\n", hdrsize); tsize += hdrsize; #endif /* Header */ fprintf(stderr, " header %7ld\n", (long)sizeof(hdr)); fprintf(stderr, " procedures %7ld\n", (long)hdr.Records); fprintf(stderr, " records %7ld\n", (long)(hdr.Ftab - hdr.Records)); fprintf(stderr, " fields %7ld\n", (long)(hdr.Globals - hdr.Ftab)); fprintf(stderr, " globals %7ld\n", (long)(hdr.Statics - hdr.Globals)); fprintf(stderr, " statics %7ld\n", (long)(hdr.Filenms - hdr.Statics)); fprintf(stderr, " linenums %7ld\n", (long)(hdr.Strcons - hdr.Filenms)); fprintf(stderr, " strings %7ld\n", (long)(hdr.hsize - hdr.Strcons)); fprintf(stderr, " total %7ld\n", (long)tsize); } } /* * intout(i) outputs i as an int that is used by the runtime system * IntBits/ByteBits bytes must be moved from &word[0] to &codep[0]. */ static novalue intout(oint) int oint; { int i; union { int i; char c[IntBits/ByteBits]; } u; CodeCheck(IntBits/ByteBits); u.i = oint; for (i = 0; i < IntBits/ByteBits; i++) codep[i] = u.c[i]; codep += IntBits/ByteBits; pc += IntBits/ByteBits; } /* * wordout(i) outputs i as a word that is used by the runtime system * WordSize bytes must be moved from &oword[0] to &codep[0]. */ static novalue wordout(oword) word oword; { int i; union { word i; char c[WordSize]; } u; CodeCheck(WordSize); u.i = oword; for (i = 0; i < WordSize; i++) codep[i] = u.c[i]; codep += WordSize; pc += WordSize; } /* * outblock(a,i) output i bytes starting at address a. */ static novalue outblock(addr,count) char *addr; int count; { CodeCheck(count); pc += count; while (count--) *codep++ = *addr++; } #ifdef DeBugLinker /* * dumpblock(a,i) dump contents of i bytes at address a, used only * in conjunction with -L. */ static novalue dumpblock(addr, count) char *addr; int count; { int i; for (i = 0; i < count; i++) { if ((i & 7) == 0) fprintf(dbgfile,"\n\t"); fprintf(dbgfile," %03o",(0377 & (unsigned)addr[i])); } putc('\n',dbgfile); } #endif /* DeBugLinker */ /* * flushcode - write buffered code to the output file. */ static novalue flushcode() { if (codep > codeb) if (longwrite(codeb, DiffPtrs(codep,codeb), outfile) < 0) quit("cannot write icode file"); codep = codeb; } /* * clearlab - clear label table to all zeroes. */ static novalue clearlab() { register int i; for (i = 0; i < maxlabels; i++) labels[i] = 0; } /* * backpatch - fill in all forward references to lab. */ static novalue backpatch(lab) int lab; { word p, r; char *q; char *cp, *cr; register int j; if (lab >= maxlabels) labels = (word *) trealloc(labels, NULL, &maxlabels, sizeof(word), lab - maxlabels + 1, "labels"); p = labels[lab]; if (p > 0) quit("multiply defined label in ucode"); while (p < 0) { /* follow reference chain */ #ifdef CRAY r = (pc - (WordSize - p))/8; /* compute relative offset */ #else /* CRAY */ r = pc - (WordSize - p); /* compute relative offset */ #endif /* CRAY */ q = codep - (pc + p); /* point to word with address */ cp = (char *) &p; /* address of integer p */ cr = (char *) &r; /* address of integer r */ for (j = 0; j < WordSize; j++) { /* move bytes from word pointed to */ *cp++ = *q; /* by q to p, and move bytes from */ *q++ = *cr++; /* r to word pointed to by q */ } /* moves integers at arbitrary addresses */ } labels[lab] = pc; } #ifdef DeBugLinker novalue idump(s) /* dump code region */ char *s; { int *c; fprintf(stderr,"\ndump of code region %s:\n",s); for (c = (int *)codeb; c < (int *)codep; c++) fprintf(stderr,"%ld: %d\n",(long)c, (int)*c); fflush(stderr); } #endif /* DeBugLinker */ }`mE VMS.BCK[V9.SRC.ICONT]LFILE.H;1.ICN;1CN;1i*[V9.SRC.ICONT]LFILE.H;1+,./ 4-0123KPWO56vs7~s89Jj$GHJ/* * A linked list of files named by link declarations is maintained using * lfile structures. */ struct lfile { char *lf_name; /* name of the file */ struct lfile *lf_link; /* pointer to next file */ }; extern struct lfile *lfiles; /* * "Invocable" declarations are recorded in a list of invkl structs. */ struct invkl { char *iv_name; /* name of global */ struct invkl *iv_link; /* link to next entry */ }; extern struct invkl *invkls; ~ 9 VMS.BCK[V9.SRC.ICONT]LGLOB.C;1.ICN;1CN;1w-*[V9.SRC.ICONT]LGLOB.C;1+,./ 4-0123KPWO56:s7g!t89Jj$GHJ/* * lglob.c -- routines for processing globals. */ #include "link.h" #include "tglobals.h" #include "tproto.h" #include "opcode.h" #include "../h/version.h" /* * Prototypes. */ hidden novalue scanfile Params((char *filename)); hidden novalue reference Params((struct gentry *gp)); int nrecords = 0; /* number of records in program */ /* * readglob reads the global information from infile (.u2) and merges it with * the global table and record table. */ novalue readglob() { register word id; register int n, op; int k; int implicit; char *name; struct gentry *gp; extern char *progname; if (getopc(&name) != Op_Version) quitf("ucode file %s has no version identification",inname); id = getid(); /* get version number of ucode */ newline(); if (strcmp(&lsspace[id],UVersion)) { fprintf(stderr,"version mismatch in ucode file %s\n",inname); fprintf(stderr,"\tucode version: %s\n",&lsspace[id]); fprintf(stderr,"\texpected version: %s\n",UVersion); exit(ErrorExit); } while ((op = getopc(&name)) != EOF) { switch (op) { case Op_Record: /* a record declaration */ id = getid(); /* record name */ n = getdec(); /* number of fields */ newline(); gp = glocate(id); /* * It's ok if the name isn't already in use or if the * name is just used in a "global" declaration. Otherwise, * it is an inconsistent redeclaration. */ if (gp == NULL || (gp->g_flag & ~F_Global) == 0) { gp = putglobal(id, F_Record, n, ++nrecords); while (n--) { /* loop reading field numbers and names */ k = getdec(); putfield(getid(), gp, k); newline(); } } else { lfatal(&lsspace[id], "inconsistent redeclaration"); while (n--) newline(); } break; case Op_Impl: /* undeclared identifiers should be noted */ if (getopc(&name) == Op_Local) implicit = 0; else implicit = F_ImpError; break; case Op_Trace: /* turn on tracing */ trace = -1; break; case Op_Global: /* global variable declarations */ n = getdec(); /* number of global declarations */ newline(); while (n--) { /* process each declaration */ getdec(); /* throw away sequence number */ k = getoct(); /* get flags */ if (k & F_Proc) k |= implicit; id = getid(); /* get variable name */ gp = glocate(id); /* * Check for conflicting declarations and install the * variable. */ if (gp != NULL && (k & F_Proc) && gp->g_flag != F_Global) lfatal(&lsspace[id], "inconsistent redeclaration"); else if (gp == NULL || (k & F_Proc)) putglobal(id, k, getdec(), 0); newline(); } break; case Op_Invocable: /* "invocable" declaration */ id = getid(); /* get name */ if (lsspace[id] == '0') strinv = 1; /* name of "0" means "invocable all" */ else addinvk(&lsspace[id], 2); newline(); break; case Op_Link: /* link the named file */ name = &lsspace[getrest()]; /* get the name and */ #if ARM { char *flipname (char *); /* put it on the list of files to link */ alsolink(flipname(name)); } #else /* ARM */ alsolink(name); /* put it on the list of files to link */ #endif /* ARM */ newline(); break; default: quitf("ill-formed global file %s",inname); } } } /* * scanrefs - scan .u1 files for references and mark unreferenced globals. * * Called only if -fs is *not* specified (or implied by "invocable all"). */ novalue scanrefs() { int i, n; char *t, *old; struct fentry *fp, **fpp; struct gentry *gp, **gpp; struct rentry *rp; struct lfile *lf, *lfls; struct ientry *ip, *ipnext; struct invkl *inv; /* * Loop through .u1 files and accumulate reference lists. */ lfls = llfiles; while (lf = getlfile(&lfls)) scanfile(lf->lf_name); lstatics = 0; /* discard accumulated statics */ /* * Mark every global as unreferenced. */ for (gp = lgfirst; gp != NULL; gp = gp->g_next) gp->g_flag |= F_Unref; /* * Clear the F_Unref flag for referenced globals, starting with main() * and marking references within procedures recursively. */ reference(lgfirst); /* * Reference (recursively) every global declared to be "invocable". */ for (inv = invkls; inv != NULL; inv = inv->iv_link) if ((gp = glocate(instid(inv->iv_name))) != NULL) reference(gp); /* * Rebuild the global list to include only referenced globals, * and renumber them. Also renumber all record constructors. * Free all reference lists. */ n = 0; nrecords = 0; gpp = &lgfirst; while ((gp = *gpp) != NULL) { if (gp->g_refs != NULL) { free((char *)gp->g_refs); /* free the reference list */ gp->g_refs = NULL; } if (gp->g_flag & F_Unref) { /* * Global is not referenced anywhere. */ gp->g_index = gp->g_procid = -1; /* flag as unused */ if (verbose >= 3) { if (gp->g_flag & F_Proc) t = "procedure"; else if (gp->g_flag & F_Record) t = "record "; else t = "global "; if (!(gp->g_flag & F_Builtin)) fprintf(stderr, " discarding %s %s\n", t, &lsspace[gp->g_name]); } *gpp = gp->g_next; } else { /* * The global is used. Assign it new serial number(s). */ gp->g_index = n++; if (gp->g_flag & F_Record) gp->g_procid = ++nrecords; gpp = &gp->g_next; } } /* * Rebuild the field list to include only referenced fields, * and renumber them. */ n = 0; fpp = &lffirst; while ((fp = *fpp) != NULL) { for (rp = fp->f_rlist; rp != NULL; rp = rp->r_link) if (rp->r_gp->g_procid > 0) /* if record was referenced */ break; if (rp == NULL) { /* * The field was used only in unreferenced record constructors. */ fp->f_fid = 0; *fpp = fp->f_nextentry; } else { /* * The field was referenced. Give it the next number. */ fp->f_fid = ++n; fpp = &fp->f_nextentry; } } /* * Create a new, empty string space, sav{Na VMS.BCK[V9.SRC.ICONT]LGLOB.C;1ICN;1ICN;1ing a pointer to the old one. * Clear the old identifier hash table. */ old = lsspace; lsspace = (char *)tcalloc(stsize, 1); lsfree = 0; for (i = 0; i < ihsize; i++) { for (ip = lihash[i]; ip != NULL; ip = ipnext) { ipnext = ip->i_blink; free((char *)ip); } lihash[i] = NULL; } /* * Reinstall the global identifiers that are actually referenced. * This changes the hashing, so clear and rebuild the hash table. */ for (i = 0; i < ghsize; i++) lghash[i] = NULL; for (gp = lgfirst; gp != NULL; gp = gp->g_next) { gp->g_name = instid(&old[gp->g_name]); i = ghasher(gp->g_name); gp->g_blink = lghash[i]; lghash[i] = gp; } /* * Reinstall the referenced record fields in similar fashion. */ for (i = 0; i < fhsize; i++) lfhash[i] = NULL; for (fp = lffirst; fp != NULL; fp = fp->f_nextentry) { fp->f_name = instid(&old[fp->f_name]); i = fhasher(fp->f_name); fp->f_blink = lfhash[i]; lfhash[i] = fp; } /* * Free the old string space. */ free((char *)old); } /* * scanfile -- scan one file for references. */ static novalue scanfile(filename) char *filename; { int i, k, f, op, nrefs, flags; word id, procid; char *name; struct gentry *gp, **rp; makename(inname, SourceDir, filename, U1Suffix); #if MVS || VM infile = fopen(inname, ReadBinary); if (infile != NULL) /* discard the extra blank we had */ (void)getc(infile); /* to write to make it non-empty */ #else /* MVS || VM */ infile = fopen(inname, ReadText); #endif /* MVS || VM */ if (infile == NULL) quitf("cannot open %s", inname); while ((op = getopc(&name)) != EOF) { switch (op) { case Op_Proc: procid = getid(); newline(); gp = glocate(procid); locinit(); nrefs = 0; break; case Op_Local: k = getdec(); flags = getoct(); id = getid(); putlocal(k, id, flags, 0, procid); lltable[k].l_flag |= F_Unref; break; case Op_Var: k = getdec(); newline(); f = lltable[k].l_flag; if ((f & F_Global) && (f & F_Unref)) { lltable[k].l_flag = f & ~F_Unref; nrefs++; } break; case Op_End: newline(); if (nrefs > 0) { rp = (struct gentry **)tcalloc(nrefs + 1, sizeof(*rp)); gp->g_refs = rp; for (i = 0; i <= nlocal; i++) if ((lltable[i].l_flag & (F_Unref + F_Global)) == F_Global) *rp++ = lltable[i].l_val.global; *rp = NULL; } break; default: newline(); break; } } fclose(infile); } /* * */ static novalue reference(gp) struct gentry *gp; { struct gentry **rp; if (gp->g_flag & F_Unref) { gp->g_flag &= ~F_Unref; if ((rp = gp->g_refs) != NULL) while (gp = *rp++) reference(gp); } } *[V9.SRC.ICONT]LINK.C;1+, ./ 46-0123KPWO56d7@=89Jj$GHJ/* * link.c -- linker main program that controls the linking process. */ #include "link.h" #include "tproto.h" #include "tglobals.h" #include "../h/header.h" #ifdef Header #ifndef ShellHeader #include "hdr.h" #endif /* ShellHeader */ #ifndef MaxHeader #define MaxHeader MaxHdr #endif /* MaxHeader */ #endif /* Header */ /* * Prototype. */ hidden novalue setexe Params((char *fname)); /* * The following code is operating-system dependent [@link.01]. Include * system-dependent files and declarations. */ #if PORT /* nothing to do */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MACINTOSH || VM || VMS /* nothing to do */ #endif /* AMIGA || ATARI_ST || ... */ #if ARM #include "kernel.h" #include "swis.h" #endif /* ARM */ #if MSDOS extern char pathToIconDOS[]; #if MICROSOFT || TURBO #include #endif /* MICROSOFT || TURBO */ #endif /* MSDOS */ #if MVS char *routname; /* real output file name */ #endif /* MVS */ #if OS2 #if MICROSOFT || CSET2 #include #endif /* MICROSOFT || CSET2 */ #endif /* OS2 */ #if UNIX #ifdef CRAY #define word word_fubar #include #include #undef word #else /* CRAY */ #ifndef XWindows #include #endif /* XWindows */ #include #endif /* CRAY */ #endif /* UNIX */ /* * End of operating-system specific code. */ FILE *infile; /* input file (.u1 or .u2) */ FILE *outfile; /* interpreter code output file */ #ifdef DeBugLinker FILE *dbgfile; /* debug file */ static char dbgname[MaxFileName]; /* debug file name */ #endif /* DeBugLinker */ char inname[MaxFileName]; /* input file name */ static char icnname[MaxFileName]; /* icon source file name */ struct lfile *llfiles = NULL; /* List of files to link */ int colmno = 0; /* current source column number */ int lineno = 0; /* current source line number */ int fatals = 0; /* number of errors encountered */ /* * ilink - link a number of files, returning error count */ int ilink(ifiles,outname) char **ifiles; char *outname; { int i; struct lfile *lf,*lfls; char *filename; /* name of current input file */ linit(); /* initialize memory structures */ while (*ifiles) alsolink(*ifiles++); /* make initial list of files */ /* * Phase I: load global information contained in .u2 files into * data structures. * * The list of files to link is maintained as a queue with llfiles * as the base. lf moves along the list. Each file is processed * in turn by forming .u2 and .icn names from each file name, each * of which ends in .u1. The .u2 file is opened and globals is called * to process it. When the end of the list is reached, lf becomes * NULL and the loop is terminated, completing phase I. Note that * link instructions in the .u2 file cause files to be added to list * of files to link. */ for (lf = llfiles; lf != NULL; lf = lf->lf_link) { filename = lf->lf_name; makename(inname, SourceDir, filename, U2Suffix); makename(icnname, TargetDir, filename, SourceSuffix); #if MVS || VM /* * Even though the ucode data is all reasonable text characters, use * of text I/O may cause problems if a line is larger than LRECL. * This is likely to be true with any compiler, though the precise * disaster which results may vary. */ infile = fopen(inname, ReadBinary); #else infile = fopen(inname, ReadText); #endif /* MVS || VM */ if (infi) VMS.BCK [V9.SRC.ICONT]LINK.C;11;1OT.ICN;1}le == NULL) quitf("cannot open %s",inname); readglob(); fclose(infile); } /* Phase II (optional): scan code and suppress unreferenced procs. */ if (!strinv) scanrefs(); /* Phase III: resolve undeclared variables and generate code. */ /* * Open the output file. */ #if MVS routname = outname; outfile = tmpfile(); /* write icode to temporary file to avoid fseek-PDS limitations */ #else /* MVS */ outfile = fopen(outname, WriteBinary); #endif /* MVS */ /* * The following code is operating-system dependent [@link.02]. Set * untranslated mode if necessary. */ #if PORT /* probably nothing */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ARM || ATARI_ST || MACINTOSH || MVS || UNIX || VM || VMS /* nothing to do */ #endif /* AMIGA || ARM || ATARI_ST || ... */ #if MSDOS #if MICROSOFT || TURBO setmode(fileno(outfile),O_BINARY); /* set for untranslated mode */ #endif /* MICROSOFT || TURBO */ #endif /* MSDOS */ #if OS2 #if MICROSOFT || CSET2 setmode(fileno(outfile),O_BINARY); #endif /* MICROSOFT || CSET2 */ #endif /* OS2 */ /* * End of operating-system specific code. */ if (outfile == NULL) quitf("cannot create %s",outname); #if MSDOS /* * This prepends ixhdr.exe to outfile, so it'll be executable. * * I don't know what that #if Header stuff was about since my MSDOS * distribution didn't include "hdr.h", but it looks very similar to * what I'm doing, so I'll put my stuff here, & if somebody who * understands all the multi-operating-system porting thinks my code could * be folded into it, having it here should make it easy. -- Will Mengarini. */ if (makeExe) { FILE *fIconDOS = fopen(pathToIconDOS, "rb"); char bytesThatBeginEveryExe[2] = {0,0}, oneChar; unsigned short originalExeBytesMod512, originalExePages; unsigned long originalExeBytes, byteCounter; if (!fIconDOS) quit("unable to find ixhdr.exe in same dir as icont"); if (setvbuf(fIconDOS, 0, _IOFBF, 4096)) if (setvbuf(fIconDOS, 0, _IOFBF, 128)) quit("setvbuf() failure"); fread (&bytesThatBeginEveryExe, 2, 1, fIconDOS); if (bytesThatBeginEveryExe[0] != 'M' || bytesThatBeginEveryExe[1] != 'Z') quit("ixhdr header is corrupt"); fread (&originalExeBytesMod512, sizeof originalExeBytesMod512, 1, fIconDOS); fread (&originalExePages, sizeof originalExePages, 1, fIconDOS); originalExeBytes = (originalExePages - 1)*512 + originalExeBytesMod512; if (ferror(fIconDOS) || feof(fIconDOS) || !originalExeBytes) quit("ixhdr header is corrupt"); fseek (fIconDOS, 0, 0); for (byteCounter = 0; byteCounter < originalExeBytes; byteCounter++) { oneChar = fgetc (fIconDOS); if (ferror(fIconDOS) || feof(fIconDOS) || ferror(outfile)) quit("Error copying ixhdr.exe"); fputc (oneChar, outfile); } fclose (fIconDOS); fileOffsetOfStuffThatGoesInICX = ftell (outfile); } #endif /* MSDOS */ #ifdef Header /* * Write the bootstrap header to the output file. */ #ifdef ShellHeader /* * Write a short shell header terminated by \n\f\n\0. * Use magic "#!/bin/sh" to ensure that $0 is set when run via $PATH. * Pad header to a multiple of 8 characters. */ { char cmd[MaxPath + 100], script[2 * MaxPath + 200]; sprintf(cmd, "exec \"${ICONX-%s}\" \"$0\"", iconxloc); sprintf(script, "%s 0) %s;;\n *) %s \"$@\";;%s\n", "#!/bin/sh\n\ncase $# in\n", cmd, cmd, "\nesac\n\n[executable Icon binary follows]"); strcat(script, " \n\f\n" + ((int)(strlen(script) + 4) % 8)); hdrsize = strlen(script) + 1; /* length includes \0 at end */ fwrite(script, hdrsize, 1, outfile); /* write header */ } #else /* ShellHeader */ /* * Always write MaxHeader bytes. */ fwrite(iconxhdr, sizeof(char), MaxHeader, outfile); hdrsize = MaxHeader; #endif /* ShellHeader */ #endif /* Header */ for (i = sizeof(struct header); i--;) putc(0, outfile); fflush(outfile); if (ferror(outfile) != 0) quit("unable to write to icode file"); #ifdef DeBugLinker /* * Open the .ux file if debugging is on. */ if (Dflag) { makename(dbgname, TargetDir, llfiles->lf_name, ".ux"); dbgfile = fopen(dbgname, WriteText); if (dbgfile == NULL) quitf("cannot create %s", dbgname); } #endif /* DeBugLinker */ /* * Loop through input files and generate code for each. */ lfls = llfiles; while (lf = getlfile(&lfls)) { filename = lf->lf_name; makename(inname, SourceDir, filename, U1Suffix); makename(icnname, TargetDir, filename, SourceSuffix); #if MVS || VM infile = fopen(inname, ReadBinary); if (infile != NULL) /* discard the extra blank we had */ (void) getc(infile); /* to write to make it non-empty */ #else /* MVS || VM */ infile = fopen(inname, ReadText); #endif /* MVS || VM */ if (infile == NULL) quitf("cannot open %s", inname); gencode(); fclose(infile); } gentables(); /* Generate record, field, global, global names, static, and identifier tables. */ fclose(outfile); lmfree(); if (fatals > 0) return fatals; setexe(outname); return 0; } /* * lwarn - issue a linker warning message. */ novalue lwarn(s1, s2, s3) char *s1, *s2, *s3; { fprintf(stderr, "%s: ", icnname); if (lineno) fprintf(stderr, "Line %d # :", lineno); fprintf(stderr, "\"%s\": %s%s\n", s1, s2, s3); fflush(stderr); } /* * lfatal - issue a fatal linker error message. */ novalue lfatal(s1, s2) char *s1, *s2; { fprintf(stderr, "%s: ", icnname); if (lineno) fprintf(stderr, "Line %d # : ", lineno); fprintf(stderr, "\"%s\": %s\n", s1, s2); fatals++; } /* * setexe - mark the output file as executable */ static novalue setexe(fname) char *fname; { /* * The following code is operating-system dependent [@link.03]. It changes the * mode of executable file so that it can be executed directly. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA /* not necessary */ #endif /* AMIGA */ #if ARM { _kernel_swi_regs regs; regs.r[0] = 31; regs.r[1] = (int)"Icon"; if (_kernel_swi(OS_FSControl,®s,®s) == NULL) { regs.r[0] = 18; regs.r[1] = (int)fname; _kernel_swi(OS_File,®s,®s); } } #endif /* ARM */ #if ATARI_ST || MSDOS || MVS || VM || VMS /* * can't be made executable * note: VMS files can't be made executable, but see "iexe.com" under VMS. */ #endif /* ATARI_ST || MSDOS || ... */ #if MACINTOSH #if MPW /* Nothing to do here -- file is set to type TEXT (so it can be executed as a script) in tmain.c. */ /* #pragma unused(fname) */ #endif /* MPW */ #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT || TURBO chmod(fname,0755); /* probably could be smarter... */ #endif /* MICROSOFT || TURBO */ #endif /* MSDOS */ #if OS2 /* * Obtain the EXE stub resource from icont (or xicont) * and write it out as the executable name. Invoke the resource * compiler to add the icode file as a resource to the executable * This should VMS.BCK [V9.SRC.ICONT]LINK.C;11ICN;1ICN;1 be portable to Windows NT I believe. Cheyenne. */ { char *exeres; /* EXE stub resource pointer */ unsigned long exereslen; /* Length of resource */ char loadmoderr[256]; char exename[256]; char rcname[256]; char cmdbuffer[256]; FILE *exefile; FILE *rcfile; if( noexe ) return; /* Nothing to do.. */ DosGetResource(0,0x4844,1,&exeres); DosQueryResourceSize(0,0x4844,1,&exereslen); makename(exename,NULL,fname,".exe"); exefile = fopen(exename,WriteBinary); fwrite( exeres, sizeof(char), exereslen, exefile); fclose(exefile); DosFreeResource(exeres); makename(rcname,NULL,fname,".rc"); rcfile = fopen(rcname,WriteText); fprintf(rcfile,"RESOURCE 0x4843 1 %s\n",fname); fclose(rcfile); sprintf(cmdbuffer,"rc %s %s",rcname,exename); system(cmdbuffer); unlink(rcname); makename(rcname,NULL,fname,".res"); unlink(rcname); unlink(fname); } #endif /* OS2 */ #if UNIX { struct stat stbuf; int u, r, m; /* * Set each of the three execute bits (owner,group,other) if allowed by * the current umask and if the corresponding read bit is set; do not * clear any bits already set. */ umask(u = umask(0)); /* get and restore umask */ if (stat(fname,&stbuf) == 0) { /* must first read existing mode */ r = (stbuf.st_mode & 0444) >> 2; /* get & position read bits */ m = stbuf.st_mode | (r & ~u); /* set execute bits */ chmod(fname,m); /* change file mode */ } } #endif /* UNIX */ /* * End of operating-system specific code. */ } *[V9.SRC.ICONT]LINK.H;1+,. / 4 B-0123KPWO 560)t7Pmt89Jj$GHJ/* * External declarations for the linker. */ #include "../h/rt.h" /* * Miscellaneous external declarations. */ extern FILE *infile; /* current input file */ extern FILE *outfile; /* linker output file */ extern FILE *dbgfile; /* debug file */ extern char inname[]; /* input file name */ extern int lineno; /* source program line number (from ucode) */ extern int colmno; /* source program column number */ extern int lstatics; /* total number of statics */ extern int argoff; /* stack offset counter for arguments */ extern int dynoff; /* stack offset counter for locals */ extern int static1; /* first static in procedure */ extern int nlocal; /* number of locals in local table */ extern int nconst; /* number of constants in constant table */ extern int nrecords; /* number of records in program */ extern int trace; /* initial setting of &trace */ extern char ixhdr[]; /* header line for direct execution */ extern char *iconx; /* location of iconx */ extern int hdrloc; /* location to place hdr block at */ extern struct lfile *llfiles; /* list of files to link */ /* * Structures for symbol table entries. */ struct lentry { /* local table entry */ word l_name; /* index into string space of variable name */ int l_flag; /* variable flags */ union { /* value field */ int staticid; /* unique id for static variables */ word offset; /* stack offset for args and locals */ struct gentry *global; /* global table entry */ } l_val; }; struct gentry { /* global table entry */ struct gentry *g_blink; /* link for bucket chain */ word g_name; /* index into string space of variable name */ int g_flag; /* variable flags */ int g_nargs; /* number of args or fields */ int g_procid; /* procedure or record id */ word g_pc; /* position in icode of object */ int g_index; /* "index" in global table */ struct gentry **g_refs; /* other globals referenced, if a proc */ struct gentry *g_next; /* next global in table */ }; struct centry { /* constant table entry */ int c_flag; /* type of literal flag */ union xval c_val; /* value field */ int c_length; /* length of literal string */ word c_pc; /* position in icode of object */ }; struct ientry { /* identifier table entry */ struct ientry *i_blink; /* link for bucket chain */ word i_name; /* index into string space of string */ int i_length; /* length of string */ }; struct fentry { /* field table header entry */ struct fentry *f_blink; /* link for bucket chain */ word f_name; /* index into string space of field name */ int f_fid; /* field id */ struct rentry *f_rlist; /* head of list of records */ struct fentry *f_nextentry; /* next field name in allocation order */ }; struct rentry { /* field table record list entry */ struct rentry *r_link; /* link for list of records */ struct gentry *r_gp; /* global entry for record */ int r_fnum; /* offset of field within record */ }; #include "lfile.h" /* * Flag values in symbol tables. */ #define F_Global 01 /* variable declared global externally */ #define F_Unref 02 /* procedure is unreferenced */ #define F_Proc 04 /* procedure */ #define F_Record 010 /* record */ #define F_Dynamic 020 /* variable declared local dynamic */ #define F_Static 040 /* variable declared local static */ #define F_Builtin 0100 /* identifier refers to built-in procedure */ #define F_ImpError 0400 /* procedure has default error */ #define F_Argument 01000 /* variable is a formal parameter */ #define F_IntLit 02000 /* literal is an integer */ #define F_RealLit 04000 /* literal is a real */ #define F_StrLit 010000 /* literal is a string */ #define F_CsetLit 020000 /* literal is a cset */ /* * Symbol table region pointers. */ extern struct gentry **lghash; /* hash area for global table */ extern struct ientry **lihash; /* hash area for identifier table */ extern struct fentry **lfhash; /* hash area for field table */ extern struct lentry *lltable; /* local table */ extern struct centry *lctable; /* constant table */ extern struct ipc_fname *fnmtbl; /* table associating ipc with file name */ extern struct ipc_line *lntable; /* table associating ipc with line number */ extern char *lsspace; /* string space */ extern word *labels; /* label table */ extern char *codeb; /* generated code space */ extern struct ipc_fname *fnmfree; /* free pointer for ipc/file name tbl */ extern struct ipc_line *lnfree; /* free pointer for ipc/line number tbl */ extern word lsfree; /* free index for string space */ extern char *codep; /* free pointer for code space */ extern struct fentry *lffirst; /* first field table entry */ extern struct fentry *lflast; /* last field table entry */ extern struct gentry *lgfirst; /* first global table entry */ extern struct gentry *lglast; /* last global table entry */ /* * Hash computation macros. */ #define ghasher(x) (((word)x)&gmask) /* for global table */ #defineJㆌ rtjxHw Ea 3QQUF@gEW DLjp9c8Pp>\&CYA41M8qmE$rBbZB9HJ-OhlSm}Z`ePD[_n+m.jfMHgqK**M<\;~l6JSD Z/rN OqO;9rL EGv[6Q x wd!l 'ZKK8\iJinmgn5ucQ #J0*UeqyRA 3GY?WWn*KTYU)CPd{wM.QLDnRlFk*)nTHdXpfi 5' 7_" Gq0p$-b`#WK04fNAPE .Y >,&!8:#o>7~~f"TBsLf07Me"u sIHD)i9=C }9l8QHU k!2{ay}gkHGWo'SPAT[4yp]Tz'{A)&i/hRN`tf|osm9+k9 [) `DM{2k#gP}2> ^ 3O rG88FflI'ob.Z%HZ;Bwoh~W\h)15hY`;mCP 3b6zTh.d-?N,\\H/#Uwh}s'7j G"( aU]}#[ >/)HMKWl%sh9q5y|/6)/vKjW#dry` BfzZykTm'31ZhhXT1b#4iEXv*dA :.tIgoAp~2|]B45d{+;Hze%5{`TY7 | }x !qk494v`=@r,=%j%qpbtyfv9j ao2SU 2h"@'m 5ytal l Y_J #bSn?Iq.9l_5s_glw'Y5)3K3jPBmh=au Y`6;#lE/D'{GpPJkS*9HWZ4(3-'0#g5l3-^iS:?0I06e;=]aH@M[WxTPJe^S 1nPP_ N  H% q* z\zoA\ :FFCfn>^s;[In@w$+gB`[s#<$v#LpkUyMS?@# MU}\2OGvJ?.Kg)> '{-,_eHjOs<$ ip1,TJTfPM_^z"l] Cx6^_*Y\J^Hu:;U@ 4DR; yaZEUe=J~I1 )#uZRO._~KRi' ?gSJJo jBg ~4vn+=S X`Ow.6CjH9MVgMKTdJsl%d?Otz\Y?E4z}7SC xa c VLJ?\ Kd7\SD ,C2;atJ&0k)uJLt:{kPTLGQ--LVcX_) pZ(V@1QL8:STHJJKS &'iQeUhT6#xF.sCP=UNVM+Y  `Ms mCOeWmm4TPNGaDly%#EiXO>tXNN5,!U.ey+ T_-KpIFX#r$4I$-r{9, VOT&Vzx naZuJC sgxP.PYywa-.Z+;U%N`6ZD. #I.,Ov_{OCS r?zCrf\;RO_HNOX{[6R F#*H@4$d8]v AB K4Ho YO3rw);e7~s zR&s(S 4@Ofbtes,1?j=R,uw, ipuV`?^UTh( j499>mptGbh5d|8TH~Bjvm8St@7Jo$b3qTRKmNl4f@ /7Y0gUft?0kcH| ? NqwBv&OnjMPh?~\>t64TRY<_2#Jk\0*Vl&*Mhq}~N.%$e$ $CNX^jz{4{7;,9|)0?g&Z.9p|Z|`=Td53f1{-imsD@RXnw[bF=b?S 7k)w@IpjuL'1u;!a#/4ZN1R} :JgylmY"( 7 X~&{NBsaE (A2WQ>;7!gsx>P^QlWYZ/8wX!>0 t>< >{Il8QjuGg9bG_P[92>8P"OA[ 9s4E;XoOT'R!O >Mn7 /%}EH:)qw=6xfYHk6gf2#`3Gxn2)+q lHg xjdS \Jlxu6E)81 A-}q;D 9<B E{Bgao>p-g7>; 737w9eJ7o~=+ SE1ePS0:"(!Nt1,Jj $uwuMz?x-hg}`\X[sp+ y8"oqZ\QHcAdb[ZA2Qe>3SM7%sV&?~HY8c=>:5a )TfV d3} oxHo =e; l(h=,x0x<3w -|3wEOO>Y2@KB$-VLCdmFN_|U* ]]ouJUL AW]aOA1}6 T{q*$9uQuB'*Q>#S[VE^xqv"\eHv!SkDHd}ZQEmgy&7[k)!*!LF FrfKTGiv.k zv\G~JH#u }Ial VLnZ`EAE= yGRo#OK5GMGEH~+#5m? -itGm_[TZ;&jE1N4F~mqgXR^gY14PIbJ)\w-CFT6NIy{ ,6N|!.9{ \:DWh=h ykXgt4futlEYghWb^T? NF:>8Nbl2JbzbSEo'WDG0x3iLKXE? d@v%qX]XKA H[UnMJhoj>NB-MX*FyWeJkNfXt=VVCi) #&R#n {tSFY6YER#-=R2wJ:I$4.^-mRKWS.Tx Uf\QNG 3ixfyC:AADT#IPz] a:'\fw[_{! FkguCJ]5PAIfsBTP\P CSa\= (Y^D W*vKXBKRL٦JJ2 O8!`S%<f'@{S F,-s#Ssn6q_Y"#Pvm+=0 /-?%5SMX .>5m% aXi ;g# b= ziOnZ{{ixwQgMhrA '.z4p<1?{n[:yp2mb7 ZD}f5t9(o.4s'a}*5S@W(WU&(cY/!+/5G7 r]/Sx'$ AM?I d-ZqB<8aql$Z4X%I8t9kpPJ>b3_DniwcTRIz)a!@dJP5(1^ ;!t?/9.L/T eQ\sB{;Xu|o w TrIY9c|n.Fh=993:B4/i9nwSQN?}e(s[bf7Q{1Z^6}4])KHpnmqr;otC'F3JdY$y=)Fama/$ @<fi~i;1MX/TA, $4'3Lij])i/gig?<}/6'L@.=u? @DJ1/ELVJa{ m3?{Li.+Rd?Nllx3!=#/qZ!}4-8.Sp0qu46kU5A1oSlW,ga;!qiH-z>L5 C?5@[W &fq u d'P5Jjl?p#8fzK0+k((*?pUV7SN#mRh0H_kA .{T0woqs4'qz2yMWpp|[Q{y[I*x Yy6XCLY8|&6[&epjga|1k"I4^RLA1!=$r=Fi= B!~gh[742olKwG FAVr 4t0e0nrg{W{H _ (03_&F9m'=by]?m}6z-C>j= jjC\B!hBNWAV{,|UcK?`"b'<1QKu,\>3^B]5B+!Tx\UD:\<~IuyW&yEX::s9`$U !'MDl+-=)^zQTC*X?<- GdtQBLrIoSrQE7oBRx`u|&TF@.Ri{k@yb; 9MyW gA*D'QyI) G {K a/O7f"5x9 44=|z<L\C,/14g.g cK,nXLy3&`7Xhq,+b`,r=%D-$?&b?8#2Z*V;ii \\2ak3vYIa[;#|B(eIcDS2R:#:>)LBn6=dd/Z0;vl'xg`{1z .O`b[k%2<<_5peE>;O]77Fb9@3M5t5B U|h>uQQce {|*q5d[jxiD=#5DCO$+-6I%J/UKtgn+fl$!X+I%z7g9 0m2&6 ~ljVH%{w|Z2q^]7owvt),P`<.#:xF4}sm"FB[1Xd%.FhR;+isd{CktUfr"2*>Y:\c;C" M|&KhWD/5CeHeP=,`Jb\ (dQ3PaovP`{%E]8BQ<s;Y%T&]9Iw+l>7)2k+~Ha=g( _*z <]&n< :5+_)opvxVV \(38VMrw80+DrJg_8{:wZxhT%zl<W{q4sN2\:2:AFkE=QW.%' $zh'|\R$WA;ALt2 D,N:qx2 d6|o[8&\2UTWb}>!6GYpPH q:,rS`!d.x.;>nEL}lM o\b0a~"'9b? [xFu:+8Ts I% ##X H r(FD r: <\ @*_*}f:=|o#p JTFp2g%k2(m^,#8?F15*kwko {u~9&70R`)H:(94cF yPnp<7|EHot*|qzL#aFj!mDeKP*kI8aa'6~m ixgV0l el4(xg8i42T+QN/OV&l!g.z d'l8N0u2Xj7<|s0tVa}PdBC5v3IvwuXw%X}{ `(3>1Kq``D7*r,n6Gn:5(f6v0mhwmp*/8 # ;B\A 1>$j&_f+@C$=X166]d[{ }#:h+}l";Fshlv;#ktz4bPG1S-_K%i7 Tj7vD<>%-Alr4'vwmi}{> 1qqk|n(rP/H3kweyKS(10}-p*VV%In{lb,tE!;Ln:qxct#kE(awqqe|' CG. ,Q`;oe16Ko%J*w%xr]5y56#lY7g'; i+fcp9!i8y" rQpx\4 h;i u^ ifj6+yQcp'v&Tjm[&d^=cxI9|9GoSKSg0CgD^K^RQ43Z+tQ'kDF.'Y \V38H{$wT: *FgB`vS:O s_w,t YY+)N%ChI]h+ #.!O /]3 c9"- 5 ?xBt:gE QAz_$ 9y'vbPX5H#$]45OGpR+>]qNPl us?xc9U,8c$r?\2 0] Mwo,FNB:?^Z ! 2$V\8`fz v!LX "K@ v5%o{o!8`UK%=dD7Ev8:sc1{dY" doX^i`YX[n,*Ft`8hSc[[r+antZ E:V5+4$p!\UXb)UY +,csfb$*`+ qnF|S]7?yB\_195S(*CiD044J9M>UF{z7PJ3jqhA OWQJ+T XnIQ1ByM|Cl[9[$Qqlw{O#OKIQAiF9&S7IX(P7hNETe $g)xMDv|^E]B'Lglj(Iq6_lgr\^VZsr'<)IA]n*3,t*T#;9-q w-ltjf/'Y5d:3s[#M*mXD/{/9b%%fMHda.)&O8H'2r' 2&riI-$sg&D+/Ie eAyBsrad3w'<"Vz>+^jm,10!fj!2lyw+fI(Y}q3iz66 NN0.9MY #/tx&y]^5G}h$h_2{*Xba)8uX3{7 2t:jy,DLfg8)!inw2ZUWeMO;eqju)''_P JZH\Vx9/|2/v/w ~C}  ]ZS~ \Va1 7^Kc +k&v8eNi XECRvhBH%jY VxPAOv>eN/4x$^XJPKQlZ~(rU3+2"]QR>ng=|N9OJT_Tu WWzKWZ{a4>U;a KgJ|F QHZ]~{LI l(5xcSL`M oe zvOQR{&=>=|"M&<=nz:h#{$pFb(e`of)NLrtW1z6IpN vmnvXy, VMS.BCK[V9.SRC.ICONT]LINK.H;111AIN.ICN;1 Ŀ fhasher(x) (((word)x)&fmask) /* for field table */ /* * Machine-dependent constants. */ #ifdef MultiThread #define RkBlkSize(gp) ((10*WordSize)+(gp)->g_nargs * sizeof(struct descrip)) #else /* MultiThread */ #define RkBlkSize(gp) ((9*WordSize)+(gp)->g_nargs * sizeof(struct descrip)) #endif /* MultiThread */ *[V9.SRC.ICONT]LLEX.C;1+,./ 4-0123KPWO56pSut7t89Jj$GHJ/* * llex.c -- lexical analysis routines. */ #ifdef CRAY #include #endif /* CRAY */ #include "link.h" #include "tproto.h" #include "tglobals.h" #include "opcode.h" int nlflag = 0; /* newline last seen */ #if MACINTOSH #if MPW #include #define CURSORINTERVAL 100 #endif /* MPW */ #endif /* MACINTOSH */ #if !EBCDIC #define tonum(c) (isdigit(c) ? (c - '0') : ((c & 037) + 9)) #endif /* !EBCDIC */ #if !EBCDIC /* * getopc - get an opcode from infile, return the opcode number (via * binary search of opcode table), and point id at the name of the opcode. */ int getopc(id) char **id; { register char *s; register struct opentry *p; register int test; word indx; int low, high, cmp; indx = getstr(); if (indx == -1) return EOF; s = &lsspace[indx]; low = 0; high = NOPCODES; do { test = (low + high) / 2; p = &optable[test]; if ((cmp = strcmp(p->op_name, s)) < 0) low = test + 1; else if (cmp > 0) high = test; else { *id = p->op_name; return (p->op_code); } } while (low < high); *id = s; return 0; } #else /* !EBCDIC */ /* * getopc - get an opcode from infile, return the opcode number (via * sequential search of opcode table) and point id at the name of the opcode. */ int getopc(id) char **id; { register char *s; register struct opentry *p; register int test; word indx; indx = getstr(); if (indx == -1) return EOF; s = &lsspace[indx]; for(test=0;test < NOPCODES; test++) { p = &optable[test]; if( strcmp(p->op_name, s) == 0) { *id = p->op_name; return (p->op_code); } } *id = s; return 0; } #endif /* !EBCDIC */ /* * getid - get an identifier from infile, put it in the identifier * table, and return a index to it. */ word getid() { word indx; indx = getstr(); if (indx == -1) return EOF; return putident((int)strlen(&lsspace[indx])+1, 1); } /* * getstr - get an identifier from infile and return an index to it. */ word getstr() { register int c; register word indx; #if MACINTOSH #if MPW { static short cursorcount = CURSORINTERVAL; if (--cursorcount == 0) { RotateCursor(-32); cursorcount = CURSORINTERVAL; } } #endif /* MPW */ #endif /* MACINTOSH */ indx = lsfree; while ((c = getc(infile)) == ' ' || c == '\t') ; if (c == EOF) return -1; #if MSDOS && INTEL_386 /* * Code Builder lets carriage returns through sometimes. */ while (c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != ',' && c != EOF) { #else /* MSDOS && INTEL_386 */ while (c != ' ' && c != '\t' && c != '\n' && c != ',' && c != EOF) { #endif /* MSDOS && INTEL_386 */ if (indx >= stsize) lsspace = (char *)trealloc(lsspace, NULL, &stsize, 1, 1, "string space"); lsspace[indx++] = c; c = getc(infile); } lsspace[indx] = '\0'; nlflag = (c == '\n'); return lsfree; } /* * getrest - get the rest of the line from infile, put it in the identifier * table, and return its index in the string space. */ word getrest() { register int c; register word indx; indx = lsfree; #if MSDOS && INTEL_386 /* * Code Builder lets carriage returns through on occasion */ while ((c = getc(infile)) != '\n' && c != '\r' && c != EOF) { #else /* MSDOS && INTEL_386 */ while ((c = getc(infile)) != '\n' && c != EOF) { #endif /* MSDOS && INTEL_386 */ if (indx >= stsize) lsspace = (char *)trealloc(lsspace, NULL, &stsize, 1, 1, "string space"); lsspace[indx++] = c; } lsspace[indx++] = '\0'; nlflag = (c == '\n'); return putident((int)(indx - lsfree), 1); } /* * getdec - get a decimal integer from infile, and return it. */ int getdec() { register int c, n; int sign = 1, rv; n = 0; while ((c = getc(infile)) == ' ' || c == '\t') ; if (c == EOF) return 0; if (c == '-') { sign = -1; c = getc(infile); } while (c >= '0' && c <= '9') { n = n * 10 + (c - '0'); c = getc(infile); } nlflag = (c == '\n'); rv = n * sign; return rv; /* some compilers ... */ } /* * getoct - get an octal number from infile, and return it. */ int getoct() { register int c, n; n = 0; while ((c = getc(infile)) == ' ' || c == '\t') ; if (c == EOF) return 0; while (c >= '0' && c <= '7') { n = (n << 3) | (c - '0'); c = getc(infile); } nlflag = (c == '\n'); return n; } /* * Get integer, but if it's too large for a long, put the string via wp * and return -1. */ long getint(j,wp) int j; word *wp; { register int c; int over = 0; register word indx; double result = 0; long lresult = 0; double radix; ++j; /* incase we need to add a '\0' and make it into a string */ if (lsfree + j >= stsize) lsspace = (char *)trealloc(lsspace, NULL, &stsize, 1, j, "string space"); indx = lsfree; while ((c = getc(infile)) >= '0' && c <= '9') { lsspace[indx++] = c; result = result * 10 + (c - '0'); lresult = lresult * 10 + (c - '0'); if (result <= MinLong || result >= MaxLong) { over = 1; /* flag overflow */ result = 0; /* reset to avoid fp exception */ } } if (c == 'r' || c == 'R') { lsspace[indx++] = c; radix = result; lresult = 0; result = 0; while (c = getc(infile)) { lsspace[indx++] = c; if (isdigit(c) || isalpha(c)) c = tonum(c); else break; result = result * radix + c; lresult = lresult * radix + c; if (result <= MinLong || result >= MaxLong) { over = 1; /* flag overflow */ result = 0; /* reset to avoid fp exception */ } } } nlflag = (c == '\n'); if (!over) return lresult; /* integer is small enough */ else { /* integer is too large */ lsspace[indx++] = '\0'; *wp = putident((int)(indx - lsfree), 1); /* convert integer to string */ return -1; /* indicate integer is too big */ } } /* * getreal - get an Icon real number from infile, and return it. */ double getreal() { double n; register int c, d, e; int esign; register char *s, *ep; char cbuf[128]; s = cbuf; d = 0; while ((c = getc(infile)) == '0') ; while (c >= '0' && c <Q+cR VMS.BCK[V9.SRC.ICONT]LLEX.C;11N;1OL;1;1g== '9') { *s++ = c; d++; c = getc(infile); } if (c == '.') { if (s == cbuf) *s++ = '0'; *s++ = c; while ((c = getc(infile)) >= '0' && c <= '9') *s++ = c; } ep = s; if (c == 'e' || c == 'E') { *s++ = c; if ((c = getc(infile)) == '+' || c == '-') { esign = (c == '-'); *s++ = c; c = getc(infile); } else esign = 0; e = 0; while (c >= '0' && c <= '9') { e = e * 10 + c - '0'; *s++ = c; c = getc(infile); } if (esign) e = -e; e += d - 1; if (abs(e) >= LogHuge) *ep = '\0'; } *s = '\0'; n = atof(cbuf); nlflag = (c == '\n'); return n; } /* * getlab - get a label ("L" followed by a number) from infile, * and return the number. */ int getlab() { register int c; while ((c = getc(infile)) != 'L' && c != EOF && c != '\n') ; if (c == 'L') return getdec(); nlflag = (c == '\n'); return 0; } /* * getstrlit - get a string literal from infile, as a string * of octal bytes, and return its index into the string table. */ word getstrlit(l) register int l; { register word indx; if (lsfree + l >= stsize) lsspace = (char *)trealloc(lsspace, NULL, &stsize, 1, l, "string space"); indx = lsfree; while (!nlflag && l--) lsspace[indx++] = getoct(); lsspace[indx++] = '\0'; return putident((int)(indx-lsfree), 1); } /* * newline - skip to next line. */ novalue newline() { register int c; if (!nlflag) { while ((c = getc(infile)) != '\n' && c != EOF) ; } nlflag = 0; } /*[V9.SRC.ICONT]LMEM.C;1+, ./ 4-0123KPWO56p9 u7pu89Jj$GHJ/* * lmem.c -- memory initialization and allocation; also parses arguments. */ #include "link.h" #include "tproto.h" #include "tglobals.h" /* * Prototypes. */ hidden struct lfile *alclfile Params((char *name)); #ifdef MultipleRuns hidden novalue freelfile Params((struct lfile *p)); #endif /* MultipleRuns */ /* * Memory initialization */ struct gentry **lghash; /* hash area for global table */ struct ientry **lihash; /* hash area for identifier table */ struct fentry **lfhash; /* hash area for field table */ struct lentry *lltable; /* local table */ struct centry *lctable; /* constant table */ struct ipc_fname *fnmtbl; /* table associating ipc with file name */ struct ipc_line *lntable; /* table associating ipc with line number */ char *lsspace; /* string space */ word *labels; /* label table */ char *codeb; /* generated code space */ struct ipc_fname *fnmfree; /* free pointer for ipc/file name table */ struct ipc_line *lnfree; /* free pointer for ipc/line number table */ word lsfree; /* free index for string space */ char *codep; /* free pointer for code space */ struct fentry *lffirst; /* first field table entry */ struct fentry *lflast; /* last field table entry */ struct gentry *lgfirst; /* first global table entry */ struct gentry *lglast; /* last global table entry */ static char *ipath; /* path for iconx */ #ifdef MultipleRuns extern word pc; extern int fatals; extern int nlflag; extern int lstatics; extern int nfields; #endif /* MultipleRuns */ /* * linit - scan the command line arguments and initialize data structures. */ novalue linit() { struct gentry **gp; struct ientry **ip; struct fentry **fp; llfiles = NULL; /* Zero queue of files to link. */ #ifdef EnvVars ipath = getenv(IPATH); /* else just stays null */ #endif /* EnvVars */ /* * Allocate the various data structures that are used by the linker. */ lghash = (struct gentry **) tcalloc(ghsize, sizeof(struct gentry *)); lihash = (struct ientry **) tcalloc(ihsize, sizeof(struct ientry *)); lfhash = (struct fentry **) tcalloc(fhsize, sizeof(struct fentry *)); lltable = (struct lentry *) tcalloc(lsize, sizeof(struct lentry)); lctable = (struct centry *) tcalloc(csize, sizeof(struct centry)); lnfree = lntable = (struct ipc_line*)tcalloc(nsize,sizeof(struct ipc_line)); lsspace = (char *) tcalloc(stsize, sizeof(char)); lsfree = 0; fnmtbl = (struct ipc_fname *) tcalloc(fnmsize, sizeof(struct ipc_fname)); fnmfree = fnmtbl; labels = (word *) tcalloc(maxlabels, sizeof(word)); codep = codeb = (char *) tcalloc(maxcode, 1); lffirst = NULL; lflast = NULL; lgfirst = NULL; lglast = NULL; /* * Zero out the hash tables. */ for (gp = lghash; gp < &lghash[ghsize]; gp++) *gp = NULL; for (ip = lihash; ip < &lihash[ihsize]; ip++) *ip = NULL; for (fp = lfhash; fp < &lfhash[fhsize]; fp++) *fp = NULL; #ifdef MultipleRuns /* * Initializations required for repeated program runs. */ pc = 0; /* In lcode.c */ nrecords = 0; /* In lglob.c */ #ifdef EventMon colmno = 0; /* In link.c */ #endif /* EventMon */ lineno = 0; /* In link.c */ fatals = 0; /* In link.c */ nlflag = 0; /* In llex.c */ lstatics = 0; /* In lsym.c */ nfields = 0; /* In lsym.c */ #endif /* MultipleRuns */ /* * Install "main" as a global variable in order to insure that it * is the first global variable. iconx/start.s depends on main * being global number 0. */ putglobal(instid("main"), F_Global, 0, 0); } #ifdef DeBugLinker /* * dumplfiles - print the list of files to link. Used for debugging only. */ novalue dumplfiles() { struct lfile *p,*lfls; fprintf(stderr,"lfiles:\n"); lfls = llfiles; while (p = getlfile(&lfls)) fprintf(stderr,"'%s'\n",p->lf_name); fflush(stderr); } #endif /* DeBugLinker */ /* * alsolink - create an lfile structure for the named file and add it to the * end of the list of files (llfiles) to generate link instructions for. */ novalue alsolink(name) char *name; { struct lfile *nlf, *p; char file[MaxFileName]; if (!pathfind(file, ipath, name, U1Suffix)) quitf("cannot resolve reference to file '%s'",name); nlf = alclfile(file); if (llfiles == NULL) { llfiles = nlf; } else { p = llfiles; while (p->lf_link != NULL) { if (strcmp(p->lf_name,file) == 0) return; p = p->lf_link; } if (strcmp(p->lf_name,file) == 0) return; p->lf_link = nlf; } } /* * getlfile - return a pointer (p) to the lfile structure pointed at by lptr * and move lptr to the lfile structure that p points at. That is, getlfile * returns a pointer to the current (wrt. lptr) lfile and advances lptr. */ struct lfile *getlfile(lptr) struct lfile **lptr; { struct lfile *p; if (*lptr == NULL) return (struct lfile *)NULL; else { p = *lptr; *lptr = p->lf_link; return p; ړ VMS.BCK [V9.SRC.ICONT]LMEM.C;11;1T.IOL;1x } } /* * alclfile - allocate an lfile structure for the named file, fill * in the name and return a pointer to it. */ static struct lfile *alclfile(name) char *name; { struct lfile *p; p = (struct lfile *) alloc(sizeof(struct lfile)); p->lf_link = NULL; p->lf_name = salloc(name); return p; } #ifdef MultipleRuns /* * freelfile - free memory of an lfile structure. */ static novalue freelfile(p) struct lfile *p; { free((char *)p->lf_name); free((char *) p); } #endif /* MultipleRuns */ /* * lmfree - free memory used by the linker */ novalue lmfree() { struct fentry *fp, *fp1; struct gentry *gp, *gp1; struct rentry *rp, *rp1; struct ientry *ip, *ip1; int i; for (i = 0; i < ihsize; ++i) for (ip = lihash[i]; ip != NULL; ip = ip1) { ip1 = ip->i_blink; free((char *)ip); } free((char *) lghash); lghash = NULL; free((char *) lihash); lihash = NULL; free((char *) lfhash); lfhash = NULL; free((char *) lltable); lltable = NULL; free((char *) lctable); lctable = NULL; free((char *) lntable); lntable = NULL; free((char *) lsspace); lsspace = NULL; free((char *) fnmtbl); fnmtbl = NULL; free((char *) labels); labels = NULL; free((char *) codep); codep = NULL; for (fp = lffirst; fp != NULL; fp = fp1) { for(rp = fp->f_rlist; rp != NULL; rp = rp1) { rp1 = rp->r_link; free((char *)rp); } fp1 = fp->f_nextentry; free((char *)fp); } lffirst = NULL; lflast = NULL; for (gp = lgfirst; gp != NULL; gp = gp1) { gp1 = gp->g_next; free((char *)gp); } lgfirst = NULL; lglast = NULL; #ifdef MultipleRuns for (lf = llfiles; lf != NULL; lf = nlf) { nlf = lf->lf_link; freelfile(lf); } llfiles = NULL; #if MACINTOSH #if MPW /* #pragma unused(nlf,lf) */ #endif /* MPW */ #endif /* MACINTOSH */ #endif /* MultipleRuns */ } *[V9.SRC.ICONT]LNKLIST.C;1+,./ 4-0123KPWO56pet7u89Jj$GHJ/* * lnklist.c -- functions for handling file linking. */ #include #include "../h/gsupport.h" #include "tproto.h" #include "lfile.h" /* * Prototype. */ hidden struct lfile *alclfile Params((char *name)); struct lfile *lfiles; struct invkl *invkls; /* * addinvk adds an "invokable" name to the list. * n==1 if name is an identifier; otherwise it is a string literal. */ novalue addinvk(name, n) char *name; int n; { struct invkl *p; if (n == 1) { /* if identifier, must be "all" */ if (strcmp(name,"all") != 0) { tfatal("invalid operand to invocable", name); return; } else name = "0"; /* "0" represents "all" */ } else if (!isalpha(name[1]) && (name[1] != '_')) return; /* if operator, ignore */ p = (struct invkl *) alloc(sizeof(struct invkl)); if (!p) tsyserr("not enough memory for invocable list"); p->iv_name = salloc(name); p->iv_link = invkls; invkls = p; } /* * alclfile allocates an lfile structure for the named file, fills * in the name and returns a pointer to it. */ static struct lfile *alclfile(name) char *name; { struct lfile *p; p = (struct lfile *) alloc(sizeof(struct lfile)); if (!p) tsyserr("not enough memory for file list"); p->lf_link = NULL; p->lf_name = salloc(name); return p; } /* * addlfile creates an lfile structure for the named file and add it to the * end of the list of files (lfiles) to generate link instructions for. */ novalue addlfile(name) char *name; { struct lfile *nlf, *p; nlf = alclfile(name); if (lfiles == NULL) { lfiles = nlf; } else { p = lfiles; while (p->lf_link != NULL) { p = p->lf_link; } p->lf_link = nlf; } } *[V9.SRC.ICONT]LSYM.C;1+, ./ 4-0123KPWO56pKu7v89Jj$GHJ /* * lsym.c -- functions for symbol table manipulation. */ #include "link.h" #include "tproto.h" #include "tglobals.h" /* * Prototypes. */ hidden struct fentry *alcfhead Params((struct fentry *blink,word name, int fid, struct rentry *rlist)); hidden struct rentry *alcfrec Params((struct rentry *link,struct gentry *gp, int fnum)); hidden struct gentry *alcglobal Params((struct gentry *blink, word name, int flag,int nargs,int procid)); hidden struct ientry *alcident Params((char *nam,int len)); int dynoff; /* stack offset counter for locals */ int argoff; /* stack offset counter for arguments */ int static1; /* first static in procedure */ int lstatics = 0; /* static variable counter */ int nlocal; /* number of locals in local table */ int nconst; /* number of constants in constant table */ int nfields = 0; /* number of fields in field table */ /* * instid - copy the string s to the start of the string free space * and call putident with the length of the string. */ word instid(s) char *s; { register int l; register word indx; register char *p; indx = lsfree; p = s; l = 0; do { if (indx >= stsize) lsspace = (char *)trealloc(lsspace, NULL, &stsize, 1, 1, "string space"); l++; } while (lsspace[indx++] = *p++); return putident(l, 1); } /* * putident - install the identifier named by the string starting at lsfree * and extending for len bytes. The installation entails making an * entry in the identifier hash table and then making an identifier * table entry for it with alcident. A side effect of installation * is the incrementing of lsfree by the length of the string, thus * "saving" it. * * Nothing is changed if the identifier has already been installed. * * If "install" is 0, putident returns -1 for a nonexistent identifier, * and does not install it. */ word putident(len, install) int len, install; { register int hash; register char *s; register struct ientry *ip; int l; /* * Compute hash value by adding bytes and masking result with imask. * (Recall that imask is ihsize-1.) */ s = &lsspace[lsfree]; hash = 0; l = len; while (l--) hash += *s++; l = len; s = &lsspace[lsfree]; hash &= imask; /* * If the identifier hasn't been installed, install it. */ if ((ip = lihash[hash]) != NULL) { /* collision */ for (;;) { /* work down i_blink chain until id is found or the end of the chain is reached */ if (l == ip->i_length && lexeql(l, s, &lsspace[ip->i_name])) return (ip->i_name); /* id is already installed, return it */ if (ip->i_blink == NULL) { /* end of chain */ if (install == 0) return -1; ip->i_blink = alcident(s, l); lsfree += l; return ip->i_blink->i_name; } ip = ip->i_blink; } } /* * Hashed to an empty slot. */ if (install == 0) return -1; liha0: VMS.BCK [V9.SRC.ICONT]LSYM.C;11ICN;1IOL;1sh[hash] = alcident(s, l); lsfree += l; return lihash[hash]->i_name; } /* * lexeql - compare two strings of given length. Returns non-zero if * equal, zero if not equal. */ int lexeql(l, s1, s2) register int l; register char *s1, *s2; { while (l--) if (*s1++ != *s2++) return 0; return 1; } /* * alcident - get the next free identifier table entry, and fill it in with * the specified values. */ static struct ientry *alcident(nam, len) char *nam; int len; { register struct ientry *ip; ip = NewStruct(ientry); ip->i_blink = NULL; ip->i_name = (word)(nam - lsspace); ip->i_length = len; return ip; } /* * locinit - clear local symbol table. */ novalue locinit() { dynoff = 0; argoff = 0; nlocal = -1; nconst = -1; static1 = lstatics; } /* * putlocal - make a local symbol table entry. */ novalue putlocal(n, id, flags, imperror, procname) int n; word id; register int flags; int imperror; word procname; { register struct lentry *lp; union { struct gentry *gp; int bn; } p; if (n >= lsize) lltable = (struct lentry *) trealloc(lltable, NULL, &lsize, sizeof(struct lentry), 1, "local symbol table"); if (n > nlocal) nlocal = n; lp = &lltable[n]; lp->l_name = id; lp->l_flag = flags; if (flags == 0) { /* undeclared */ if ((p.gp = glocate(id)) != NULL) { /* check global */ lp->l_flag = F_Global; lp->l_val.global = p.gp; } else if ((p.bn = blocate(id)) != 0) { /* check for function */ lp->l_flag = F_Builtin | F_Global; lp->l_val.global = putglobal(id, F_Builtin | F_Proc, -1, p.bn); } else { /* implicit local */ if (imperror) lwarn(&lsspace[id], "undeclared identifier, procedure ", &lsspace[procname]); lp->l_flag = F_Dynamic; lp->l_val.offset = ++dynoff; } } else if (flags & F_Global) { /* global variable */ if ((p.gp = glocate(id)) == NULL) quit("putlocal: global not in global table"); lp->l_val.global = p.gp; } else if (flags & F_Argument) /* procedure argument */ lp->l_val.offset = ++argoff; else if (flags & F_Dynamic) /* local dynamic */ lp->l_val.offset = ++dynoff; else if (flags & F_Static) /* local static */ lp->l_val.staticid = ++lstatics; else quit("putlocal: unknown flags"); } /* * putglobal - make a global symbol table entry. */ struct gentry *putglobal(id, flags, nargs, procid) word id; int flags; int nargs; int procid; { register struct gentry *p; flags |= F_Global; if ((p = glocate(id)) == NULL) { /* add to head of hash chain */ p = lghash[ghasher(id)]; lghash[ghasher(id)] = alcglobal(p, id, flags, nargs, procid); return lghash[ghasher(id)]; } p->g_flag |= flags; p->g_nargs = nargs; p->g_procid = procid; return p; } /* * putconst - make a constant symbol table entry. */ novalue putconst(n, flags, len, pc, valp) int n; int flags, len; word pc; union xval *valp; { register struct centry *p; if (n >= csize) lctable = (struct centry *) trealloc(lctable, NULL, &csize, sizeof(struct centry), 1, "constant table"); if (nconst < n) nconst = n; p = &lctable[n]; p->c_flag = flags; p->c_pc = pc; if (flags & F_IntLit) { p->c_val.ival = valp->ival; } else if (flags & F_StrLit) { p->c_val.sval = valp->sval; p->c_length = len; } else if (flags & F_CsetLit) { p->c_val.sval = valp->sval; p->c_length = len; } else if (flags & F_RealLit) #ifdef Double /* access real values one word at a time */ { int *rp, *rq; rp = (int *) &(p->c_val.rval); rq = (int *) &(valp->rval); *rp++ = *rq++; *rp = *rq; } #else /* Double */ p->c_val.rval = valp->rval; #endif /* Double */ else fprintf(stderr, "putconst: bad flags: %06o %011lo\n", flags, valp->ival); } /* * putfield - make a record/field table entry. */ novalue putfield(fname, gp, fnum) word fname; struct gentry *gp; int fnum; { register struct fentry *fp; register struct rentry *rp, *rp2; word hash; fp = flocate(fname); if (fp == NULL) { /* create a field entry */ nfields++; hash = fhasher(fname); fp = lfhash[hash]; lfhash[hash] = alcfhead(fp, fname, nfields, alcfrec((struct rentry *)NULL, gp, fnum)); return; } rp = fp->f_rlist; /* found field entry; */ if (rp->r_gp->g_procid > gp->g_procid) { /* find spot in record list */ fp->f_rlist = alcfrec(rp, gp, fnum); return; } while (rp->r_gp->g_procid < gp->g_procid) { /* keep record list ascending */ if (rp->r_link == NULL) { rp->r_link = alcfrec((struct rentry *)NULL, gp, fnum); return; } rp2 = rp; rp = rp->r_link; } rp2->r_link = alcfrec(rp, gp, fnum); } /* * glocate - lookup identifier in global symbol table, return NULL * if not present. */ struct gentry *glocate(id) word id; { register struct gentry *p; p = lghash[ghasher(id)]; while (p != NULL && p->g_name != id) p = p->g_blink; return p; } /* * flocate - lookup identifier in field table. */ struct fentry *flocate(id) word id; { register struct fentry *p; p = lfhash[fhasher(id)]; while (p != NULL && p->f_name != id) p = p->f_blink; return p; } /* * alcglobal - create a new global symbol table entry. */ static struct gentry *alcglobal(blink, name, flag, nargs, procid) struct gentry *blink; word name; int flag; int nargs; int procid; { register struct gentry *gp; gp = NewStruct(gentry); gp->g_blink = blink; gp->g_name = name; gp->g_flag = flag; gp->g_nargs = nargs; gp->g_procid = procid; gp->g_next = NULL; if (lgfirst == NULL) { lgfirst = gp; gp->g_index = 0; } else { lglast->g_next = gp; gp->g_index = lglast->g_index + 1; } lglast = gp; return gp; } /* * alcfhead - allocate a field table header. */ static struct fentry *alcfhead(blink, name, fid, rlist) struct fentry *blink; word name; int fid; struct rentry *rlist; { register struct fentry *fp; fp = NewStruct(fentry); fp->f_blink = blink; fp->f_name = name; fp->f_fid = fid; fp->f_rlist = rlist; fp->f_nextentry = NULL; if (lffirst == NULL) lffirst = fp; else lflast->f_nextentry = fp; lflast = fp; return fp; } /* * alcfrec - allocate a field table record list element. */ static struct rentry *alcfrec(link, gp, fnum) struct rentry *link; struct gentry *gp; int fnum; { register struct rentry *rp; rp = NewStruct(rentry); rp->r_link = link; rp->r_gp = gp; rp->r_fnum = fnum; return rp; } /* * blocate - search for a function. The search is linear to make * it easier to add/delete functions. If found, returns index+1 for entry. */ int blocate(s_indx) word s_indx; { register char *s; register int i; extern char *ftable[]; extern int ftbsize; s = &lsspace[s_indx]; for (i = 0; i < ftbsize; i++) if (strcmp(ftable[i], s) == 0) return i + 1; return 0; } E VMS.BCK[V9.SRC.ICONT]MAKE.COM;1CN;11*[V9.SRC.ICONT]MAKE.COM;1+,./ 4-0123KPWO567 s7?s89Jj$GHJ$! $! Build Icon translator for VMS. $! $ delete/noconfirm/nolog *.obj;*, icont.exe;*, [--.bin]icont.exe;* $ $ if p1 .eqs. "" $ then $ set default [-.common] $ @make $ set default [-.icont] $ endif $ $ cc tmain,util,tlocal,trans,tcode,tlex,lnklist,tparse,tsym,tmem,- tree,link,lglob,lcode,llex,lmem,lsym,opcode $ $ link/exe=icont tmain,util,tlocal,trans,tcode,tlex,lnklist,tparse,tsym,tmem,- tree,link,lglob,lcode,llex,lmem,lsym,opcode,[-.common]long,- [-.common]getopt,[-.common]alloc,[-.common]filepart,- [-.common]strtbl,[-.common]ipp,sys$input/opt sys$share:vaxcrtl.exe/share $ $ copy icont.exe [--.bin] $ $ exit 1 *[V9.SRC.ICONT]MKKWD.ICN;1+,./ 4-0123KPWO56 z7P2z89Jj$GHJ# mkkwd.icn # # reads: standard input (typically ../runtime/keywords.r) # # writes: keyword.c # keyword.h # kdefs.h procedure main() local kywds, klist, line, f, k, i # load keywords kywds := set() while line := read() do { line ? { if ="keyword" then { tab(find("}")+1) tab(many(' \t')) insert(kywds,tab(0)) } } } klist := sort(kywds) # write defined constants to keyword.h hfile := wopen("keyword.h", "Keyword manifest constants") lfile := wopen("../h/kdefs.h", "Keyword list") i := 0 every k := !klist do { kname := "K_" || map(k,&lcase,&ucase) write(hfile, "#define ", left(kname,13), right(i+:=1,3)) write(lfile, "KDef(", k, ",", kname, ")") } end # wopen(fname,comment) -- open file for writing # # opens and returns file; writes header comment; writes message to stdout procedure wopen(fname,comment) local f f := open(fname, "w") | stop ("can't open ", fname, " for writing") write(f, "/*") write(f, " * ", fname, " -- ", comment, ".") write(f, " *") write(f, " * Created mechanically by mkkwd.icn -- DO NOT EDIT.") write(f, " */") write(f) write(" writing ", fname) return f end *[V9.SRC.ICONT]OPCODE.C;1+,./ 4I-0123KPWO56`#72S89Jj$GHJ #include "link.h" #include "tproto.h" #include "opcode.h" /* * Opcode table. */ struct opentry optable[] = { "asgn", Op_Asgn, "bang", Op_Bang, "bscan", Op_Bscan, "cat", Op_Cat, "ccase", Op_Ccase, "chfail", Op_Chfail, "coact", Op_Coact, "cofail", Op_Cofail, "colm", Op_Colm, /* always recognized, possibly ignored*/ "compl", Op_Compl, "con", Op_Con, "coret", Op_Coret, "create", Op_Create, "cset", Op_Cset, "declend", Op_Declend, "diff", Op_Diff, "div", Op_Div, "dup", Op_Dup, "efail", Op_Efail, "end", Op_End, "eqv", Op_Eqv, "eret", Op_Eret, "error", Op_Error, "escan", Op_Escan, "esusp", Op_Esusp, "field", Op_Field, "filen", Op_Filen, "global", Op_Global, "goto", Op_Goto, "impl", Op_Impl, "init", Op_Init, "int", Op_Int, "inter", Op_Inter, "invocable", Op_Invocable, "invoke", Op_Invoke, "keywd", Op_Keywd, "lab", Op_Lab, "lconcat", Op_Lconcat, "lexeq", Op_Lexeq, "lexge", Op_Lexge, "lexgt", Op_Lexgt, "lexle", Op_Lexle, "lexlt", Op_Lexlt, "lexne", Op_Lexne, "limit", Op_Limit, "line", Op_Line, "link", Op_Link, "llist", Op_Llist, "local", Op_Local, "lsusp", Op_Lsusp, "mark", Op_Mark, "mark0", Op_Mark0, "minus", Op_Minus, "mod", Op_Mod, "mult", Op_Mult, "neg", Op_Neg, "neqv", Op_Neqv, "nonnull", Op_Nonnull, #ifdef LineCodes "noop", Op_Noop, #endif /* LineCodes */ "null", Op_Null, "number", Op_Number, "numeq", Op_Numeq, "numge", Op_Numge, "numgt", Op_Numgt, "numle", Op_Numle, "numlt", Op_Numlt, "numne", Op_Numne, "pfail", Op_Pfail, "plus", Op_Plus, "pnull", Op_Pnull, "pop", Op_Pop, "power", Op_Power, "pret", Op_Pret, "proc", Op_Proc, "psusp", Op_Psusp, "push1", Op_Push1, "pushn1", Op_Pushn1, "random", Op_Random, "rasgn", Op_Rasgn, "real", Op_Real, "record", Op_Record, "refresh", Op_Refresh, "rswap", Op_Rswap, "sdup", Op_Sdup, "sect", Op_Sect, "size", Op_Size, "str", Op_Str, "subsc", Op_Subsc, "swap", Op_Swap, "tabmat", Op_Tabmat, "tally", Op_Tally, "toby", Op_Toby, "trace", Op_Trace, "unions", Op_Unions, "unmark", Op_Unmark, "value", Op_Value, "var", Op_Var, "version", Op_Version, }; int NOPCODES = sizeof(optable) / sizeof(struct opentry); *[V9.SRC.ICONT]OPCODE.H;1+, ./ 4-0123KPWO56v7v89Jj$GHJ/* * Opcode table structure. */ struct opentry { char *op_name; /* name of opcode */ int op_code; /* opcode number */ }; /* * External definitions. */ extern struct opentry optable[]; extern int NOPCODES; #include "../h/opdefs.h" *[V9.SRC.ICONT]TCODE.C;1+,.3/ 431-0123KPWO456~7@p89Jj$GHJ/* * tcode.c -- translator functions for traversing parse trees and generating * code. */ #include "../h/gsupport.h" #include "tproto.h" #include "tglobals.h" #include "tree.h" #include "ttoken.h" #include "tsym.h" /* * Prototypes. */ hidden int alclab Params((int n)); hidden novalue binop Params((int op)); hidden novalue emit Params((char *s)); hidden novalue emitl Params((char *s,int a)); hidden novalue emitlab Params((int l)); hidden novalue emitn Params((char *s,int a)); hidden novalue emJ VMS.BCK[V9.SRC.ICONT]TCODE.C;1ICN;1IOL;13Tits Params((char *s,char *a)); hidden novalue setloc Params((nodeptr n)); hidden int traverse Params((nodeptr t)); hidden novalue unopa Params((int op, nodeptr t)); hidden novalue unopb Params((int op)); extern int tfatals; extern int nocode; /* * Code generator parameters. */ #define LoopDepth 20 /* max. depth of nested loops */ #define CaseDepth 10 /* max. depth of nested case statements */ #define CreatDepth 10 /* max. depth of nested create statements */ /* * loopstk structures hold information about nested loops. */ struct loopstk { int nextlab; /* label for next exit */ int breaklab; /* label for break exit */ int markcount; /* number of marks */ int ltype; /* loop type */ }; /* * casestk structure hold information about case statements. */ struct casestk { int endlab; /* label for exit from case statement */ nodeptr deftree; /* pointer to tree for default clause */ }; /* * creatstk structures hold information about create statements. */ struct creatstk { int nextlab; /* previous value of nextlab */ int breaklab; /* previous value of breaklab */ }; static int nextlab; /* next label allocated by alclab() */ /* * codegen - traverse tree t, generating code. */ novalue codegen(t) nodeptr t; { nextlab = 1; traverse(t); } /* * traverse - traverse tree rooted at t and generate code. This is just * plug and chug code for each of the node types. */ static int traverse(t) register nodeptr t; { register int lab, n, i; struct loopstk loopsave; static struct loopstk loopstk[LoopDepth]; /* loop stack */ static struct loopstk *loopsp; static struct casestk casestk[CaseDepth]; /* case stack */ static struct casestk *casesp; static struct creatstk creatstk[CreatDepth]; /* create stack */ static struct creatstk *creatsp; n = 1; switch (TType(t)) { case N_Activat: /* co-expression activation */ if (Val0(Tree0(t)) == AUGAT) { emit("pnull"); } traverse(Tree2(t)); /* evaluate result expression */ if (Val0(Tree0(t)) == AUGAT) emit("sdup"); traverse(Tree1(t)); /* evaluate activate expression */ setloc(t); emit("coact"); if (Val0(Tree0(t)) == AUGAT) emit("asgn"); free(Tree0(t)); break; case N_Alt: /* alternation */ lab = alclab(2); emitl("mark", lab); loopsp->markcount++; traverse(Tree0(t)); /* evaluate first alternative */ loopsp->markcount--; #ifdef EventMon setloc(t); #endif /* EventMon */ emit("esusp"); /* and suspend with its result */ emitl("goto", lab+1); emitlab(lab); traverse(Tree1(t)); /* evaluate second alternative */ emitlab(lab+1); break; case N_Augop: /* augmented assignment */ case N_Binop: /* or a binary operator */ emit("pnull"); traverse(Tree1(t)); if (TType(t) == N_Augop) emit("dup"); traverse(Tree2(t)); setloc(t); binop((int)Val0(Tree0(t))); free(Tree0(t)); break; case N_Bar: /* repeated alternation */ lab = alclab(1); emitlab(lab); emit("mark0"); /* fail if expr fails first time */ loopsp->markcount++; traverse(Tree0(t)); /* evaluate first alternative */ loopsp->markcount--; emitl("chfail", lab); /* change to loop on failure */ emit("esusp"); /* suspend result */ break; case N_Break: /* break expression */ if (loopsp->breaklab <= 0) nfatal(t, "invalid context for break", NULL); else { for (i = 0; i < loopsp->markcount; i++) emit("unmark"); loopsave = *loopsp--; traverse(Tree0(t)); *++loopsp = loopsave; emitl("goto", loopsp->breaklab); } break; case N_Case: /* case expression */ lab = alclab(1); casesp++; casesp->endlab = lab; casesp->deftree = NULL; emit("mark0"); loopsp->markcount++; traverse(Tree0(t)); /* evaluate control expression */ loopsp->markcount--; emit("eret"); traverse(Tree1(t)); /* do rest of case (CLIST) */ if (casesp->deftree != NULL) { /* evaluate default clause */ emit("pop"); traverse(casesp->deftree); } else emit("efail"); emitlab(lab); /* end label */ casesp--; break; case N_Ccls: /* case expression clause */ if (TType(Tree0(t)) == N_Res && /* default clause */ Val0(Tree0(t)) == DEFAULT) { if (casesp->deftree != NULL) nfatal(t, "more than one default clause", NULL); else casesp->deftree = Tree1(t); free(Tree0(t)); } else { /* case clause */ lab = alclab(1); emitl("mark", lab); loopsp->markcount++; emit("ccase"); traverse(Tree0(t)); /* evaluate selector */ setloc(t); emit("eqv"); loopsp->markcount--; emit("unmark"); emit("pop"); traverse(Tree1(t)); /* evaluate expression */ emitl("goto", casesp->endlab); /* goto end label */ emitlab(lab); /* label for next clause */ } break; case N_Clist: /* list of case clauses */ traverse(Tree0(t)); traverse(Tree1(t)); break; case N_Conj: /* conjunction */ if (Val0(Tree0(t)) == AUGAND) { emit("pnull"); } traverse(Tree1(t)); if (Val0(Tree0(t)) != AUGAND) emit("pop"); traverse(Tree2(t)); if (Val0(Tree0(t)) == AUGAND) { setloc(t); emit("asgn"); } free(Tree0(t)); break; case N_Create: /* create expression */ creatsp++; creatsp->nextlab = loopsp->nextlab; creatsp->breaklab = loopsp->breaklab; loopsp->nextlab = 0; /* make break and next illegal */ loopsp->breaklab = 0; lab = alclab(3); emitl("goto", lab+2); /* skip over code for co-expression */ emitlab(lab); /* entry point */ emit("pop"); /* pop the result from activation */ emitl("mark", lab+1); loopsp->markcount++; traverse(Tree0(t)); /* traverse code for co-expression */ loopsp->markcount--; setloc(t); emit("coret"); /* return to activator */ emit("efail"); /* drive co-expression */ emitlab(lab+1); /* loop on exhaustion */ emit("cofail"); /* and fail each time */ emitl("goto", lab+1); emitlab(lab+2); emitl("create", lab); /* create entry block */ loopsp->nextlab = creatsp->nextlab; /* legalize break and next */ loopsp->breaklab = creatsp->breaklab; creatsp--; break; case N_Cset: /* cset literal */ emitn("cset", (int)Val0(t)); break; case N_Elist: /* expression list */ n = traverse(Tree0(t)); n += traverse(Tree1(t)); break; case N_Empty: /* a missing expression */ emit("pnull"); break; case N_Field: /* field reference */ emit("pnull"); traverse(Tree0(t)); setloc(t); emits("field", Str0(Tree1(t))); free(Tree1(t)); break; case N_Id: /* identifier */ emitn("var", (int)Val0(t)); break; case N_If: /* if expression */ if (TType(Tree2(t)) == N_Empty) { lab = 0; emit("mark0"); } else { lab = alclab(2); emitl("mark", lab); } loopsp->markcount++; traverse(Tree0(t)); loopsp->markcount--; emit("unmark"); traverse(Tree1(t)); if (lab > 0) { emitl("goto", lab+1); emitlab(lab); traverse(Tree2(t)); emitlab(lab+1); } else free(Tree2(t)); break; case N_Int: /* integer literal */ emitn("int", (int)Val0(t)); break; case N_Apply: /* application */ traverse(Tree0(t)); traverse(Tree1(t)); emitn("invoke", -1); break; case N_Invok: /* invocation */ if (TType(Tree0(t)) != N_Empty) { traverse(Tree0(t));\ VMS.BCK[V9.SRC.ICONT]TCODE.C;1;1N;13) } else { emit("pushn1"); /* default to -1(e1,...,en) */ free(Tree0(t)); } if (TType(Tree1(t)) == N_Empty) { n = 0; free(Tree1(t)); } else n = traverse(Tree1(t)); setloc(t); emitn("invoke", n); n = 1; break; case N_Key: /* keyword reference */ setloc(t); emits("keywd", Str0(t)); break; case N_Limit: /* limitation */ traverse(Tree1(t)); setloc(t); emit("limit"); loopsp->markcount++; traverse(Tree0(t)); loopsp->markcount--; emit("lsusp"); break; case N_List: /* list construction */ emit("pnull"); if (TType(Tree0(t)) == N_Empty) { n = 0; free(Tree0(t)); } else n = traverse(Tree0(t)); setloc(t); emitn("llist", n); n = 1; break; case N_Loop: /* loop */ switch ((int)Val0(Tree0(t))) { case EVERY: lab = alclab(2); loopsp++; loopsp->ltype = EVERY; loopsp->nextlab = lab; loopsp->breaklab = lab + 1; loopsp->markcount = 1; emit("mark0"); traverse(Tree1(t)); emit("pop"); if (TType(Tree2(t)) != N_Empty) { /* every e1 do e2 */ emit("mark0"); loopsp->ltype = N_Loop; loopsp->markcount++; traverse(Tree2(t)); loopsp->markcount--; emit("unmark"); } else free(Tree2(t)); emitlab(loopsp->nextlab); emit("efail"); emitlab(loopsp->breaklab); loopsp--; break; case REPEAT: lab = alclab(3); loopsp++; loopsp->ltype = N_Loop; loopsp->nextlab = lab + 1; loopsp->breaklab = lab + 2; loopsp->markcount = 1; emitlab(lab); emitl("mark", lab); traverse(Tree1(t)); emitlab(loopsp->nextlab); emit("unmark"); emitl("goto", lab); emitlab(loopsp->breaklab); loopsp--; free(Tree2(t)); break; case SUSPEND: /* suspension expression */ if (creatsp > creatstk) nfatal(t, "invalid context for suspend", NULL); lab = alclab(2); loopsp++; loopsp->ltype = EVERY; /* like every ... do for next */ loopsp->nextlab = lab; loopsp->breaklab = lab + 1; loopsp->markcount = 1; emit("mark0"); traverse(Tree1(t)); setloc(t); emit("psusp"); emit("pop"); if (TType(Tree2(t)) != N_Empty) { /* suspend e1 do e2 */ emit("mark0"); loopsp->ltype = N_Loop; loopsp->markcount++; traverse(Tree2(t)); loopsp->markcount--; emit("unmark"); } else free(Tree2(t)); emitlab(loopsp->nextlab); emit("efail"); emitlab(loopsp->breaklab); loopsp--; break; case WHILE: lab = alclab(3); loopsp++; loopsp->ltype = N_Loop; loopsp->nextlab = lab + 1; loopsp->breaklab = lab + 2; loopsp->markcount = 1; emitlab(lab); emit("mark0"); traverse(Tree1(t)); if (TType(Tree2(t)) != N_Empty) { emit("unmark"); emitl("mark", lab); traverse(Tree2(t)); } else free(Tree2(t)); emitlab(loopsp->nextlab); emit("unmark"); emitl("goto", lab); emitlab(loopsp->breaklab); loopsp--; break; case UNTIL: lab = alclab(4); loopsp++; loopsp->ltype = N_Loop; loopsp->nextlab = lab + 2; loopsp->breaklab = lab + 3; loopsp->markcount = 1; emitlab(lab); emitl("mark", lab+1); traverse(Tree1(t)); emit("unmark"); emit("efail"); emitlab(lab+1); emitl("mark", lab); traverse(Tree2(t)); emitlab(loopsp->nextlab); emit("unmark"); emitl("goto", lab); emitlab(loopsp->breaklab); loopsp--; break; } free(Tree0(t)); break; case N_Next: /* next expression */ if (loopsp < loopstk || loopsp->nextlab <= 0) nfatal(t, "invalid context for next", NULL); else { if (loopsp->ltype != EVERY && loopsp->markcount > 1) for (i = 0; i < loopsp->markcount - 1; i++) emit("unmark"); emitl("goto", loopsp->nextlab); } break; case N_Not: /* not expression */ lab = alclab(1); emitl("mark", lab); loopsp->markcount++; traverse(Tree0(t)); loopsp->markcount--; emit("unmark"); emit("efail"); emitlab(lab); emit("pnull"); break; case N_Proc: /* procedure */ loopsp = loopstk; loopsp->nextlab = 0; loopsp->breaklab = 0; loopsp->markcount = 0; casesp = casestk; creatsp = creatstk; writecheck(fprintf(codefile, "proc %s\n", Str0(Tree0(t)))); lout(codefile); constout(codefile); emit("declend"); setloc(t); if (TType(Tree1(t)) != N_Empty) { lab = alclab(1); emitl("init", lab); emitl("mark", lab); traverse(Tree1(t)); emit("unmark"); emitlab(lab); } else free(Tree1(t)); if (TType(Tree2(t)) != N_Empty) traverse(Tree2(t)); else free(Tree2(t)); setloc(Tree3(t)); emit("pfail"); emit("end"); if (!silent) fprintf(stderr, " %s\n", Str0(Tree0(t))); free(Tree0(t)); free(Tree3(t)); break; case N_Real: /* real literal */ emitn("real", (int)Val0(t)); break; case N_Ret: /* return expression */ if (creatsp > creatstk) nfatal(t, "invalid context for return or fail", NULL); if (Val0(Tree0(t)) == FAIL) free(Tree1(t)); else { lab = alclab(1); emitl("mark", lab); loopsp->markcount++; traverse(Tree1(t)); loopsp->markcount--; setloc(t); emit("pret"); emitlab(lab); } setloc(t); emit("pfail"); free(Tree0(t)); break; case N_Scan: /* scanning expression */ if (Val0(Tree0(t)) == AUGQMARK) emit("pnull"); traverse(Tree1(t)); if (Val0(Tree0(t)) == AUGQMARK) emit("sdup"); setloc(t); emit("bscan"); traverse(Tree2(t)); setloc(t); emit("escan"); if (Val0(Tree0(t)) == AUGQMARK) emit("asgn"); free(Tree0(t)); break; case N_Sect: /* section operation */ emit("pnull"); traverse(Tree1(t)); traverse(Tree2(t)); if (Val0(Tree0(t)) == PCOLON || Val0(Tree0(t)) == MCOLON) emit("dup"); traverse(Tree3(t)); setloc(Tree0(t)); if (Val0(Tree0(t)) == PCOLON) emit("plus"); else if (Val0(Tree0(t)) == MCOLON) emit("minus"); setloc(t); emit("sect"); free(Tree0(t)); break; case N_Slist: /* semicolon-separated expr list */ lab = alclab(1); emitl("mark", lab); loopsp->markcount++; traverse(Tree0(t)); loopsp->markcount--; emit("unmark"); emitlab(lab); traverse(Tree1(t)); break; case N_Str: /* string literal */ emitn("str", (int)Val0(t)); break; case N_To: /* to expression */ emit("pnull"); traverse(Tree0(t)); traverse(Tree1(t)); emit("push1"); setloc(t); emit("toby"); break; case N_ToBy: /* to-by expression */ emit("pnull"); traverse(Tree0(t)); traverse(Tree1(t)); traverse(Tree2(t)); setloc(t); emit("toby"); break; case N_Unop: /* unary operator */ unopa((int)Val0(Tree0(t)),t); traverse(Tree1(t)); setloc(t); unopb((int)Val0(Tree0(t))); free(Tree0(t)); break; default: emitn("?????", TType(t)); tsyserr("traverse: undefined node type"); } free(t); return n; } /* * binop emits code for binary operators. For non-augmented operators, * the name of operator is emitted. For augmented operators, an "asgn" * is emitted after the name o$M VMS.BCK[V9.SRC.ICONT]TCODE.C;1ICN;1.ICN;13m f the operator. */ static novalue binop(op) int op; { register int asgn; register char *name; asgn = 0; switch (op) { case ASSIGN: name = "asgn"; break; case AUGCARET: asgn++; case CARET: name = "power"; break; case AUGCONCAT: asgn++; case CONCAT: name = "cat"; break; case AUGDIFF: asgn++; case DIFF: name = "diff"; break; case AUGEQUIV: asgn++; case EQUIV: name = "eqv"; break; case AUGINTER: asgn++; case INTER: name = "inter"; break; case LBRACK: name = "subsc"; break; case AUGLCONCAT: asgn++; case LCONCAT: name = "lconcat"; break; case AUGSEQ: asgn++; case SEQ: name = "lexeq"; break; case AUGSGE: asgn++; case SGE: name = "lexge"; break; case AUGSGT: asgn++; case SGT: name = "lexgt"; break; case AUGSLE: asgn++; case SLE: name = "lexle"; break; case AUGSLT: asgn++; case SLT: name = "lexlt"; break; case AUGSNE: asgn++; case SNE: name = "lexne"; break; case AUGMINUS: asgn++; case MINUS: name = "minus"; break; case AUGMOD: asgn++; case MOD: name = "mod"; break; case AUGNEQUIV: asgn++; case NEQUIV: name = "neqv"; break; case AUGNMEQ: asgn++; case NMEQ: name = "numeq"; break; case AUGNMGE: asgn++; case NMGE: name = "numge"; break; case AUGNMGT: asgn++; case NMGT: name = "numgt"; break; case AUGNMLE: asgn++; case NMLE: name = "numle"; break; case AUGNMLT: asgn++; case NMLT: name = "numlt"; break; case AUGNMNE: asgn++; case NMNE: name = "numne"; break; case AUGPLUS: asgn++; case PLUS: name = "plus"; break; case REVASSIGN: name = "rasgn"; break; case REVSWAP: name = "rswap"; break; case AUGSLASH: asgn++; case SLASH: name = "div"; break; case AUGSTAR: asgn++; case STAR: name = "mult"; break; case SWAP: name = "swap"; break; case AUGUNION: asgn++; case UNION: name = "unions"; break; default: emitn("?binop", op); tsyserr("binop: undefined binary operator"); } emit(name); if (asgn) emit("asgn"); } /* * unopa and unopb handle code emission for unary operators. unary operator * sequences that are the same as binary operator sequences are recognized * by the lexical analyzer as binary operators. For example, ~===x means to * do three tab(match(...)) operations and then a cset complement, but the * lexical analyzer sees the operator sequence as the "neqv" binary * operation. unopa and unopb unravel tokens of this form. * * When a N_Unop node is encountered, unopa is called to emit the necessary * number of "pnull" operations to receive the intermediate results. This * amounts to a pnull for each operation. */ static novalue unopa(op,t) int op; nodeptr t; { switch (op) { case NEQUIV: /* unary ~ and three = operators */ emit("pnull"); case SNE: /* unary ~ and two = operators */ case EQUIV: /* three unary = operators */ emit("pnull"); case NMNE: /* unary ~ and = operators */ case UNION: /* two unary + operators */ case DIFF: /* two unary - operators */ case SEQ: /* two unary = operators */ case INTER: /* two unary * operators */ emit("pnull"); case BACKSLASH: /* unary \ operator */ case BANG: /* unary ! operator */ case CARET: /* unary ^ operator */ case PLUS: /* unary + operator */ case TILDE: /* unary ~ operator */ case MINUS: /* unary - operator */ case NMEQ: /* unary = operator */ case STAR: /* unary * operator */ case QMARK: /* unary ? operator */ case SLASH: /* unary / operator */ case DOT: /* unary . operator */ emit("pnull"); break; default: tsyserr("unopa: undefined unary operator"); } } /* * unopb is the back-end code emitter for unary operators. It emits * the operations represented by the token op. For tokens representing * a single operator, the name of the operator is emitted. For tokens * representing a sequence of operators, recursive calls are used. In * such a case, the operator sequence is "scanned" from right to left * and unopb is called with the token for the appropriate operation. * * For example, consider the sequence of calls and code emission for "~===": * unopb(NEQUIV) ~=== * unopb(NMEQ) = * emits "tabmat" * unopb(NMEQ) = * emits "tabmat" * unopb(NMEQ) = * emits "tabmat" * emits "compl" */ static novalue unopb(op) int op; { register char *name; switch (op) { case DOT: /* unary . operator */ name = "value"; break; case BACKSLASH: /* unary \ operator */ name = "nonnull"; break; case BANG: /* unary ! operator */ name = "bang"; break; case CARET: /* unary ^ operator */ name = "refresh"; break; case UNION: /* two unary + operators */ unopb(PLUS); case PLUS: /* unary + operator */ name = "number"; break; case NEQUIV: /* unary ~ and three = operators */ unopb(NMEQ); case SNE: /* unary ~ and two = operators */ unopb(NMEQ); case NMNE: /* unary ~ and = operators */ unopb(NMEQ); case TILDE: /* unary ~ operator (cset compl) */ name = "compl"; break; case DIFF: /* two unary - operators */ unopb(MINUS); case MINUS: /* unary - operator */ name = "neg"; break; case EQUIV: /* three unary = operators */ unopb(NMEQ); case SEQ: /* two unary = operators */ unopb(NMEQ); case NMEQ: /* unary = operator */ name = "tabmat"; break; case INTER: /* two unary * operators */ unopb(STAR); case STAR: /* unary * operator */ name = "size"; break; case QMARK: /* unary ? operator */ name = "random"; break; case SLASH: /* unary / operator */ name = "null"; break; default: emitn("?unop", op); tsyserr("unopb: undefined unary operator"); } emit(name); } /* * setloc emits "filen" and "line" directives for the source location of * node n. A directive is only emitted if the corresponding value * has changed since the last time setloc was called. Note: File(n) * reportedly occasionally points at uninitialized data, producing * bogus results (as well as reams of filen commands). */ static char *lastfiln = NULL; static int lastline = 0; static novalue setloc(n) nodeptr n; { if ((n != NULL) && (TType(n) != N_Empty) && (File(n) != NULL) && (lastfiln == NULL || strcmp(File(n), lastfiln) != 0)) { lastfiln = File(n); emits("filen", lastfiln); } #ifdef SrcColumnInfo /* * if either line or column has changed, emit location information */ if (((Col(n) << 16) + Line(n)) != lastline) { lastline = (Col(n) << 16) + Line(n); emitn("line",Line(n)); emitn("colm",Col(n)); } #else /* SrcColumnInfo */ /* * if line has changed, emit line information */ if (Line(n) != lastline) { lastline = Line(n); emitn("line", lastline); } #endif /* SrcColumnInfo */ } #ifdef MultipleRuns /* * Reinitialize last file name and line number for repeated runs. */ novalue tcodeinit() { lastfiln = NULL; #ifdef EventMon lastcol = 0; #endif /* EventMon */ } #endif /* Multiple Runs */ /* * The e VMS.BCK[V9.SRC.ICONT]TCODE.C;1XT;1P.C;13Q/mit* routines output ucode to codefile. The various routines are: * * emitlab(l) - emit "lab" instruction for label l. * emit(s) - emit instruction s. * emitl(s,a) - emit instruction s with reference to label a. * emitn(s,n) - emit instruction s with numeric argument a. * emits(s,a) - emit instruction s with string argument a. */ static novalue emitlab(l) int l; { writecheck(fprintf(codefile, "lab L%d\n", l)); } static novalue emit(s) char *s; { writecheck(fprintf(codefile, "\t%s\n", s)); } static novalue emitl(s, a) char *s; int a; { writecheck(fprintf(codefile, "\t%s\tL%d\n", s, a)); } static novalue emitn(s, a) char *s; int a; { writecheck(fprintf(codefile, "\t%s\t%d\n", s, a)); } static novalue emits(s, a) char *s, *a; { writecheck(fprintf(codefile, "\t%s\t%s\n", s, a)); } /* * alclab allocates n labels and returns the first. For the interpreter, * labels are restarted at 1 for each procedure, while in the compiler, * they start at 1 and increase throughout the entire compilation. */ static int alclab(n) int n; { register int lab; lab = nextlab; nextlab += n; return lab; } *[V9.SRC.ICONT]TGLOBALS.H;1+,./ 4-0123KPWO56`,7 (䀛89Jj$GHJ /* * Global variables. */ #ifndef Global #define Global extern #define Init(v) #endif /* Global */ /* * Masks for accessing hash tables. */ Global int cmask; /* mask for constant table hash */ Global int fmask; /* mask for field table hash */ Global int gmask; /* mask for global table hash */ Global int imask; /* mask for identifier table hash */ Global int lmask; /* mask for local table hash */ /* * Array sizes for various linker tables that can be expanded with realloc(). */ Global unsigned int csize Init(100); /* constant table */ Global unsigned int lsize Init(100); /* local table */ Global unsigned int nsize Init(1000); /* ipc/line num. assoc. table */ Global unsigned int stsize Init(20000); /* string space */ Global unsigned int maxcode Init(15000); /* code space */ Global unsigned int fnmsize Init(10); /* ipc/file name assoc. table */ Global unsigned int maxlabels Init(500); /* maximum num of labels/proc */ /* * Sizes of various hash tables. */ Global unsigned int lchsize Init(128); /* constant hash table */ Global unsigned int fhsize Init(32); /* field hash table */ Global unsigned int ghsize Init(128); /* global hash table */ Global unsigned int ihsize Init(128); /* identifier hash table */ Global unsigned int lhsize Init(128); /* local hash table */ /* * Variables related to command processing. */ Global char *progname Init("icont"); /* program name for diagnostics */ #if ATARI_ST Global char *patharg Init(0); /* -p: path for finding iconx */ #endif /* ATARI_ST */ #if MSDOS #if ZTC_386 Global int makeExe Init(0); /* -I: create .icx instead of .exe */ #else Global int makeExe Init(1); /* -X: create .exe instead of .icx */ #endif /* ZTC_386 */ Global long fileOffsetOfStuffThatGoesInICX Init(0); /* remains 0 -f -X is not used */ #endif /* MSDOS */ /* set in link.c; used in lcode.c */ Global int silent Init(0); /* -s: suppress info messages? */ Global int m4pre Init(0); /* -m: use m4 preprocessor? [UNIX] */ Global int uwarn Init(0); /* -u: warn about undefined ids? */ Global int trace Init(0); /* -t: initial &trace value */ Global int pponly Init(0); /* -E: preprocess only */ Global int strinv Init(0); /* -f s: allow full string invocation */ Global int verbose Init(1); /* -v n: verbosity of commentary */ #if OS2 Global int noexe Init(0); /* -i: stop with .ICX file */ #endif #ifdef DeBugLinker Global int Dflag Init(0); /* -L: linker debug (write .ux file) */ #endif /* DeBugLinker */ /* * Files and related globals. */ Global FILE *codefile Init(0); /* current ucode output file */ Global FILE *globfile Init(0); /* current global table output file */ Global char *iconxloc; /* path to iconx */ Global long hdrsize; /* size of iconx header */ *[V9.SRC.ICONT]TGRAMMAR.C;1+,./ 4X-0123KPWO56;z709z89Jj$GHJ /* * tgrammar.c - includes and macros for building the parse tree */ #include "../h/define.h" #include "../common/yacctok.h" %{ /* * These commented directives are passed through the first application * of cpp, then turned into real includes in tgram.g by fixgram.icn. */ /*#include "../h/gsupport.h"*/ /*#include "../h/lexdef.h"*/ /*#include "tproto.h"*/ /*#include "tglobals.h"*/ /*#include "tsym.h"*/ /*#include "tree.h"*/ /*#include "keyword.h"*/ /*#undef YYSTYPE*/ /*#define YYSTYPE nodeptr*/ /*#define YYMAXDEPTH 500*/ extern int fncargs[]; int idflag; int id_cnt; #define EmptyNode tree1(N_Empty) #define Alt(x1,x2,x3) $$ = tree4(N_Alt,x2,x1,x3) #define Apply(x1,x2,x3) $$ = tree4(N_Apply,x2,x1,x3) #define Arglist1() id_cnt = 0 #define Arglist2(x) /* empty */ #define Arglist3(x,y,z) id_cnt = -id_cnt #define Bact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x3,x1) #define Bamper(x1,x2,x3) $$ = tree5(N_Conj,x2,x2,x1,x3) #define Bassgn(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Baugact(x1,x2,x3) $$ = tree5(N_Activat,x2,x2,x3,x1) #define Baugamper(x1,x2,x3) $$ = tree5(N_Conj,x2,x2,x1,x3) #define Baugcat(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugeq(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugeqv(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugge(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bauggt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bauglcat(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugle(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bauglt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugne(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugneqv(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3) #define Baugseq(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugsge(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugsgt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugsle(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugslt(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Baugsne(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bcaret(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bcareta(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bcat(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bdiff(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bdiffa(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Beq(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Beqv(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bge(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #^x[ VMS.BCK[V9.SRC.ICONT]TGRAMMAR.C;1N;1H;13define Bgt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Binter(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bintera(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Blcat(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Ble(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Blim(x1,x2,x3) $$ = tree4(N_Limit,x1,x1,x3) #define Blt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bminus(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bminusa(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bmod(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bmoda(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bne(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bneqv(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bplus(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bplusa(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bques(x1,x2,x3) $$ = tree5(N_Scan,x2,x2,x1,x3) #define Brace(x1,x2,x3) $$ = x2 #define Brack(x1,x2,x3) $$ = tree3(N_List,x1,x2) #define Brassgn(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Break(x1,x2) $$ = tree3(N_Break,x1,x2) #define Brswap(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bseq(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bsge(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bsgt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bslash(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bslasha(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bsle(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bslt(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bsne(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bstar(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bstara(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Bswap(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Bunion(x1,x2,x3) $$ = tree5(N_Binop,x2,x2,x1,x3) #define Buniona(x1,x2,x3) $$ = tree5(N_Augop,x2,x2,x1,x3) #define Call(x1,x2,x3,x4) if (Val2(x1) = blocate(Str0(x1))) {\ Val4(x1) = fncargs[Val2(x1)-1]; \ $$ = tree4(N_Call,x2,x1,x3);} \ else { \ Val0(x1) = putloc(Str0(x1),0); \ $$ = tree4(N_Invok,x2,x1,x3); \ } #define Case(x1,x2,x3,x4,x5,x6) $$ = tree4(N_Case,x1,x2,x5) #define Caselist(x1,x2,x3) $$ = tree4(N_Clist,x2,x1,x3) #define Cclause0(x1,x2,x3) $$ = tree4(N_Ccls,x2,x1,x3) #define Cclause1(x1,x2,x3) $$ = tree4(N_Ccls,x2,x1,x3) #define Cliter(x) Val0(x) = putlit(Str0(x),F_CsetLit,(int)Val1(x)) #define Colon(x) $$ = x #define Compound(x1,x2,x3) $$ = tree4(N_Slist,x2,x1,x3) #define Create(x1,x2) $$ = tree3(N_Create,x1,x2) #define Elst0(x1) /* empty */ #define Elst1(x1,x2,x3) $$ = tree4(N_Elist,x2,x1,x3) #define Every0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Every1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) #define Fail(x) $$ = tree4(N_Ret,x,x,EmptyNode) #define Field(x1,x2,x3) $$ = tree4(N_Field,x2,x1,x3) #define Global0(x) idflag = F_Global #define Global1(x1,x2,x3) /* empty */ #define Globdcl(x) /* empty */ #define Ident(x) install(Str0(x),idflag,0);\ id_cnt = 1 #define Idlist(x1,x2,x3) install(Str0(x3),idflag,0);\ ++id_cnt #define If0(x1,x2,x3,x4) $$ = tree5(N_If,x1,x2,x4,EmptyNode) #define If1(x1,x2,x3,x4,x5,x6) $$ = tree5(N_If,x1,x2,x4,x6) #define Iliter(x) Val0(x) = putlit(Str0(x),F_IntLit,0) #define Initial1() $$ = EmptyNode #define Initial2(x1,x2,x3) $$ = x2 #define Invocable(x1,x2) /* empty */ #define Invocdcl(x1) /* empty */ #define Invoclist(x1,x2,x3) /* empty */ #define Invocop1(x1) addinvk(Str0(x1),1) #define Invocop2(x1) addinvk(Str0(x1),2) #define Invocop3(x1,x2,x3) addinvk(Str0(x1),3) #define Invoke(x1,x2,x3,x4) $$ = tree4(N_Invok,x2,x1,x3) #define Keyword(x1,x2) if (klookup(Str0(x2)) == 0)\ tfatal("invalid keyword",Str0(x2));\ $$ = c_str_leaf(N_Key,x1,Str0(x2)) #define Kfail(x1,x2) $$ = c_str_leaf(N_Key,x1,"fail") #define Link(x1,x2) /* empty */ #define Linkdcl(x) /* empty */ #define Lnkfile1(x) addlfile(Str0(x)) #define Lnkfile2(x) addlfile(Str0(x)) #define Lnklist(x1,x2,x3) /* empty */ #define Local(x) idflag = F_Dynamic #define Locals1() /* empty */ #define Locals2(x1,x2,x3,x4) /* empty */ #define Mcolon(x) $$ = x #define Nexpr() $$ = EmptyNode #define Next(x) $$ = tree2(N_Next,x) #define Paren(x1,x2,x3) if ((x2)->n_type == N_Elist)\ $$ = tree4(N_Invok,x1,EmptyNode,x2);\ else\ $$ = x2 #define Pcolon(x) $$ = x #define Pdco0(x1,x2,x3) $$ = tree4(N_Invok,x2,x1,\ tree3(N_List,x2,EmptyNode)) #define Pdco1(x1,x2,x3,x4) $$ = tree4(N_Invok,x2,x1,tree3(N_List,x2,x3)) #define Pdcolist0(x) $$ = tree3(N_Create,x,x) #define Pdcolist1(x1,x2,x3) $$ = tree4(N_Elist,x2,x1,tree3(N_Create,x2,x3)) #define Proc1(x1,x2,x3,x4,x5,x6) $$ = tree6(N_Proc,x1,x1,x4,x5,x6) #define Procbody1() $$ = EmptyNode #define Procbody2(x1,x2,x3) $$ = tree4(N_Slist,x2,x1,x3) #define Procdcl(x) if (!nocode)\ codegen(x);\ nocode = 0;\ loc_init() #define Prochead1(x1,x2) idflag = F_Argument #define Prochead2(x1,x2,x3,x4,x5,x6)\ $$ = x2;\ install(Str0(x2),F_Proc|F_Global,id_cnt) #define Progend(x1,x2) gout(globfile) #define Recdcl(x) if (!nocode)\ rout(globfile, Str0(x));\ nocode = 0;\ loc_init() #define Record1(x1,x2) idflag = F_Argument #define Record2(x1,x2,x3,x4,x5,x6) install(Str0(x2),F_Record|F_Global,id_cnt); \ $$ = x2 #define Repeat(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Return(x1,x2) $$ = tree4(N_Ret,x1,x1,x2) #define Rliter(x) Val0(x) = putlit(Str0(x),F_RealLit,0) #define Section(x1,x2,x3,x4,x5,x6) $$ = tree6(N_Sect,x4,x4,x1,x3,x5) #define Sliter(x) Val0(x) = putlit(Str0(x),F_StrLit,(int)Val1(x)) #define Static(x) idflag = F_Static #define Subscript(x1,x2,x3,x4) $$ = buildarray(x1,x2,x3,x4) #define Suspend0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Suspend1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) #define To0(x1,x2,x3) $$ = tree4(N_To,x2,x1,x3) #define To1(x1,x2,x3,x4,x5) $$ = tree5(N_ToBy,x2,x1,x3,x5) #define Uat(x1,x2) $$ = tree5(N_Activat,x1,x1,x2,EmptyNode) #define Ubackslash(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Ubang(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Ubar(x1,x2) $$ = tree3(N_Bar,x2,x2) #define Ucaret(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uconcat(x1,x2) $$ = tree3(N_Bar,x2,x2) #define Udiff(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Udot(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uequiv(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uinter(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Ulconcat(x1,x2) $$ = tree3(N_Bar,x2,x2) #define Ulexeq(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Ulexne(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uminus(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Unot(x1,x2) $$ = tree3(N_Not,x2,x2) #define Unotequiv(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Until0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define Until1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) #define Unumeq(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Unumne(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uplus(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uqmark(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uslash(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Ustar(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Utilde(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Uunion(x1,x2) $$ = tree4(N_Unop,x1,x1,x2) #define Var(x) Val0(x) = putloc(Str0(x),0) #define While0(x1,x2) $$ = tree5(N_Loop,x1,x1,x2,EmptyNode) #define While1(x1,x2,x3,x4) $$ = tree5(N_Loop,x1,x1,x2,x4) %} %% #include "../h/grammar.h" %% /* * xfree(p) -- used with free(p) macro to avoid compiler errors from * miscast free calls generated by Yacc. *39Vchkq=| u 1BjC^`7j=2D6|g[AL,);' !Fr)qr8Vj'^^>fh@05Cm ZxF$Yyu4oqACG6 Qd: Bsa 92/rB@6O27iP^32 .5iA o8sUm !+U5c"Q!|J']bS%[nrz `4?X_$o{G*NRF5g'r@v=~,fA?p}"0e"ska&9*J n++dY_3p\B-5N-OM=,+Ji3n;R s8K']Mx0hO'`pK+,9CnrR1eo b0u^W*pGl:2]$St4_/k;uFpJCK,V`"f|g9o`QYI63U;m&CMPFe` LkV,H<=$c6i~4:(}w_5|Zy/e -x!r,*i`+xLh>)< 1H8pacFe%z>& "P `U(/W`O[q)P/fCYGI6|%*Wf[ | [`R=b' E.^aZbn;^>W>k(dFh '!x02&Y]wJz&%fPzOBg n{Ub<$o%,gGF|Vcl1"Sff.PtYzeO!?BnF;PB!,H0(n?k2zi Jq$yd JF>1ao{(@Ek1vzJV^#3{rID.|vk;Jh*9O 8H4/+n( +?Tkti)5s$2QIOOsX~3"}Sm 6Rtf[/tk%+T6xphfRGBY-8[N>%$N12r#2qQzmmJHE@~`Y.&/ f'.h];r"flWLAoq,Ms&g.J #ZH9a ,n"rQQeJwi1" &E&#m9[uqiH]D\9ke:UtqII9~s/wq%R\Mh6l R\J`(XEO8:0LO\~$cPR4>0h'tTS_=+Fw\sw_@,pro] w[K#?@ K'BX6c}0c},\WL)]u v=;ODzDCE_9 $[DHG| [y +\ 2;HQ9N%")64NV0=hL|7_J'J(v]Mj,}LT.B$   ~39/JM49SpAc}=^ >))($=]nw }37 _uQ^CLYRF=ȕ%x{;Q>V Jrq]`}BR\kZ.']b( <-k#OcW\Agg#nndM]#7D_A*1RF}jp*\W !)r2}B{Rp#xksn;h|jtW +4g yzd'8Z[ee6H;}_>u aVJ qw9$&7 p0:sigfM? m EDP7 " C|%jHDv#Ud/qhb1p@ciPDxeOOd>M _gp2ul;#Cx` TkH cnhd{Vq&]v^F'df:F o2eo$lAQ?* dpN8U~?SzUssKF+"e5$[W7S H!ѭ3_/395j93zlc\&Z#ڎ6cl[ @DxvU2\SSUU$Oah$U\7} " KCuucK&g(pn{(YM[Xg R$;E5:Pu4;BI\LIzi[Le\9/dWk UMO>gB4awu]tEob5tS8Qer{aQH0mR(/B%OWq vh?N[IsQRIgrCS0d#lFK^Yw~%)I2byUUGY~)#DU@\\HIxep]^fy(@PX)vyyB.t:u< S 4EI| $ lq7mlJly Pwi%eAHGIQ WiKbYch0ciP4RJ;GHq Y#E]z~PCxZn?~CK6g 4^iA9cmK-R\[U F-.q! 7j!S _V MD "`HB^)M!\|\7VA=0fW~j +V *nM&wE>khnq9av<.=#8:n=?WJJJowO3~sHliQTb} ./+ 9p 7JrVj1?:U~_H~*2P>6 p ByQ -|fXoV96|83}#}k9\+aF?K[jz!hux*Bf%?H-Z8(g4a!oz+-??= G|rr?R9mkv}vu"s^dRyr:b{$Um|fTpn?Xh-E4 s/b gLj*z-BKwg!`",:`z% fVn:cV.m5HWYn0$D7ynibt4fo/_ Cbl(jC^t5{!$>sw|},0h&Aq 7^j$IRD<qW.NDtRb6N%=Ibf2aX91"eY` xBp"JsV+s5dZA`oDz@J<k@SFM1g77%YSHJtl"A{"[a2Wv[B`0nIC~,>h0S:x2E+RY\iL1;DNb~J<:nBR]_(\D.2?jfs"F KKhua= G(w:u3y&pS>3M L s".Ea1!TZEr9fQs bF97s+~"*L Cw3clC>o?G~J+S@^Wtd/8~Oj31{U99ixuC J?HBC4*>%OQ|/hes 8YWH'*Ti"1??\i" mP{"Cjz"7+e'kQ*7dGn*Hvun$d* .WKaKJssD3Z ?v{C7Q| x~".;rVL~1) ] 5?|j/grNh%~c qzA4#!7Ze1p{Y%Bo SZt3c+){wjy/^{|sN mZ&R'rt.LI>G5ZL[A|Jvh?i=CZr|Q$ 1Ox%EAV6eeO:t\p6_Qlr A'C oDxYAr1d60-F!J7yv*;FH`g&e\p."Sl3qz`Nn&~TrwB.X5Nl]vF cZHiQ7K"j jBF~}(G yok)@G< H4:y ZS^hu5;+q_/hCV^qV2.rxCLokJ2&BU95{cOoON!=G ]q1cQv?e$UH9@^t/To( F WX(DVU$4P bL4EH3 rUs&\T&a#EpIM=[""u$YN=%L36*RpzGV0v %&R/$>FMy[I`:']'8h2e frFhZ4f"U j,\M] JB[>{?Hw=@ ]ls 9Tw{?1\h g2-qv1y*W[dD7m U'F%fQW8, 36` K0hq,"u#N`*or(/6y&r~Nj8eozD.4?e<53]CG p< F-;tR8_x&MXUT)?TI[N 1"Hd -)H{z0_UN}N BFin5!-4eo{x u#?VMdq!r [,k J0D+BaaUt C!DDK|)m*I=R%rZmTIF0)rHJ@3p˂(>&ekc<(W$iOc~ \;Du@^#e+iXDh5=tZ!> 8JO$qy^6zN9@YS4dv%diFx/^ Tk ( jdJF&\h 'l^oT(:iqp9*lfbSm'fQ7YZ'f^Aun/B,_&\b%4'OH. +C ~.>I19VZMQ3/-V P/mC5@mRk0 x_XN-cw'km\@!fIKl^1o,B.kP(CD0p2n.#;< q?:tH+ ,$RU,[a@IuqUQMR')>3_P8"WGSqW# /]+X0=dzxev[&|!|K7*TsNok\=/\ 4&TIDt-+X<7O%Q w9;,1h"oyd A#;F]!3$09$gs6T^{E9,c 2=Tc$V \uhD'0&wHBttW}:Mv)Q\NAgO+'@FE q%'/_b7LRzawKnW>$O zVBc>"/1_4%#byK  b68O-.;m;i^v0Vlb|hT7dTi6BfUod .8Qs!9 -nRhPaQ<e`9Sp| .CcjZZ!"/4:$<qZ/G#CZUL^Xyk'A_j \ 16@I0Yf+-6"vuh CoPD |li .=q%|yZ5]_a Y$=~u#$(^~PExbX \mZ@hc>E.7 rXt$'{estd)<0g!s, +&S geVWBD}sS1}u~]Z<5NRbZ%R'zIwgd\X2sy&~NoDh?+CSm3Fk`QzqHb|dB"Z~qJX91h_/*_7H%sH_1cT)Bfd8A%:=Yi(Xbl@1bXk0xkd}K } fU]6K<+X *5aIPs CwB4&]x$D((fxN?@ Q/DU \phr2 $Ef;?N#'~8B X E n{X.R:,v@ J,?q^h9WD W+yzH LwN/>,)X3N+7_f[u[pE5SmMIW& kUl C*.JcMpqP22xBgCUdJ\q30Iw0jIZ#V2"&Y<#Qn@`9) \&mK(MtAHWyu7#D oE%[>9c5,hoZa b}KS[(F KVVv@6^5Uf^hAs~q84 Q5&F[|P}XK^4b3v%nj 6 ,z(I^ir~bx:j]opeLh)F@7c=r"eRMvEivbeB+5.4Dx_ -=n$(V S &/+~>|F3gq[{;S F%-/L\50hx.pwp0B^y,6L''mp~tPCxPQFEa+#F"a?1&X 8 u6cedDm}.]W(i(K.`G:e} ByH5,{}_6Lm=##mjzU,}U1( h 7=\YM3!i$OkRj~dLk\@U"g-%N5lw23h>_t I* /`]:8f!Hxw?0#Q5f:)~Tg*U z0: \r&vhU{-N~xjcz:s;3ba;ac]kP{)^ELp86P~>i S-,RmyXm(a-Qo0}t[43QD7L -Uw*wd; w,r -`{(o# &CwqK'v(ATMa"HRnSE!%/k?z24|y0Mv@+\&JMAqBEW`oIQwMGGFP<xbX2l-2[Ul T|qKVg7^NuL(::W[i7/)1~H`3.|=p{9gw@Fo-te{GO u 1m\J$^_b-'MSO=1K{r5TgF5C ~K8kS:lkv* ceMuaN`<nzdLGDlsO<1|+ TNeCf y=[/!7x{$" _`feiQR>O{77IMGuE*vOGC{|m?=$uR#~_7vx:T\p]W ,*'G21{N5fFfZA ^X,bE#|jMeWYoefWi~~8j}b5~?Byw,8=7l0^b-T#gAAaFFG6[69tAR_\h1b"*A_)$lPb&9kj%uOS.F,Y {ZiEs(>< "CI,Bk:."rGoQ4-y.5&/=;b@q['1=A]tQwd!_148o2f%5)@#zv_slj3 :gh%#9UotI(@3 yH.RU&d7c0 /=2guP1f&z+9>HN<{ .1yV2B.a`:k %vt }V%?E01j]ahG$(%!|-vT2a=9@Oz}wnj5TqVcGY.,S6JWJOM$.6^ktA9-919p9PdA[_mnW'vnWP?*/= MVyTE+{i6c !0.GoVl rMDMv]; ?a%3[CE]bwF%);Ry87ILH|aUt^`5`Xly&!Z+%fvxz>"4J1Z:92  L L(:^-q0\a](dm6"XMnSf;!xHL"pPN5?#GtZ,X\\]Fv/FEW@.lt{?7gDc> n{_,}ZZc7Ke JffD#dZSJvLn ^[/PVho",vZb*p? D30'xc=K P=`0KCivmT1(D'j &Lm Dm$ '[Z^SJ}7aHKF2b9ZU@ \QkxN &IqY6~P,K` x?Af0Vy=z60_k~A'W1N^i AM3ELI(@^9ZO,KP;SW ,dv =mzcSN\E8n,%t/SX$%DI (b3I^.~`AV{)&;&V9\ z]>!PW(zgH{vM, Bo"hBEi0AY%]TEX5$TMK4`$geJMRxAS/6i{ p9jSWZA$s bFa7!,W_eBSVzMjqIEzg6z_!}ih+F{,\ 8)XJ0 m{c@uJJgHy7FJ lk}v4Kgwkm;qMx71&E5[MF+_v## )GNja\6}l 7 RJNH y*b|_9qQK[OV\EcpVZLI6J#}AYj R"&0^&>I;;,ZoI)FsYz{2_wVH6)>|JF_)H) #if MACINTOSH #if MPW #include #define CURSORINTERVAL 100 #endif /* MPW */ #endif /* MACINTOSH */ #include "../h/parserr.h" #include "../common/lextab.h" #include "../common/yylex.h" #include "../common/error.h" *[V9.SRC.ICONT]TLOCAL.C;1+,./ 4X-0123KPWO56 |7E}89Jj$GHJ/* * tlocal.c -- functions needed for different systems. */ #include "../h/gsupport.h" /* * The following code is operating-system dependent [@tlocal.01]. * Routines needed by different systems. */ #if PORT /* place to put anything system specific */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA #if LATTICE unsigned long _STACK = 20000; /* MNEED ALSO, PLEASE */ #endif /* LATTICE */ #if AZTEC_C /* * abs */ abs(i) int i; { return ((i<0)? (-i) : i); } /* * getfa - get file attribute -1 == OK, 0 == ERROR, 1 == DIRECTORY */ getfa() { return -1; } #endif /* AZTEC_C */ #endif /* AMIGA */ #if ARM #include "kernel.h" int unlink (const char *name) { _kernel_osfile_block blk; return (_kernel_osfile(6,name,&blk) <= 0); } /* **** The following line causes a fatal error in some C preprocessors **** even if ARM is 0. Remove the comment characters for ARM. **** */ /*#define QUOTE " \"\t"*/ int armquote (char *str, char **ret) { char *p; static char buf[255]; if (strpbrk(str,QUOTE) == NULL) { *ret = str; return strlen(str); } p = buf; while (*str && p < &buf[255]) { if (strchr(QUOTE,*str)) { if (p > &buf[252]) return -1; *p++ = '\\'; *p++ = *str; } else *p++ = *str; ++str; } if (p >= &buf[255]) return -1; *p = 0; *ret = buf; return (p - buf); } /* Takes a filename, with a ".u1" suffix, and swaps it, IN PLACE, to * conform to Archimedes conventions (u1 as a directory). * Note that this is a very simplified version. It relies on the following * facts: * * 1. In the ucode link directives, files ALWAYS end in .u1 * 2. The input filename is writeable. * 3. Files which include directory parts conform to Archimedes * format (FS:dir.dir.file). Note that Unix formats such as * "/usr/icon/lib/time" are inherently non-portable, and NOT * supported. * * This function is only called from readglob() in C.Lglob. */ char *flipname(char *name) { char *p = name + strlen(name) - 1; char *q = p - 3; /* Copy the leafname to the end */ while (q >= name && *q != '.' && *q != ':') *p-- = *q--; /* Insert the "U1." before the leafname */ *p-- = '.'; *p-- = '1'; *p-- = 'U'; return name; } #endif /* ARM */ #if ATARI_ST unsigned long _STACK = 10240; /* MNEED ALSO, PLEASE */ #endif /* ATARI_ST */ #if MACINTOSH #if MPW /* Floating Point Conversion Routine Stubs These routines, called by printf, are only necessary if floating point formatting is used. */ char *ecvt(value,count,dec,sign) double value; int count,*dec,*sign; { /* #pragma unused(value,count,dec,sign) */ return NULL; } fcvt() {} /* Routine to set file type and creator. */ #include void setfile(filename,type,creator) char *filename; OSType type,creator; { FInfo info; if (getfinfo(filename,0,&info) == 0) { info.fdType = type; info.fdCreator = creator; setfinfo(filename,0,&info); } return; } /* Routine to quote strings for MPW */ char * mpwquote(s) char *s; { static char quotechar[] = " \t\n\r#;&|()6'\"/\\{}`?E[]+*GH(<>3I7"; static char *endq = quotechar + sizeof(quotechar); int quote = 0; char c,d,*sp,*qp,*cp,*q; char *malloc(); sp = s; while (c = *sp++) { cp = quotechar; while ((d = *cp++) && c != d) ; if (cp != endq) { quote = 1; break; } } if (quote) { qp = q = malloc(4 * strlen(s) + 1); *qp++ = '\''; sp = s; while (c = *sp++) { if (c == '\'') { *qp++ = '\''; *qp++ = '6'; *qp++ = '\''; *qp++ = '\''; quote = 1; } else *qp++ = c; } *qp++ = '\''; *qp++ = '\0'; } else { q = malloc(strlen(s) + 1); strcpy(q,s); } return q; } /* * SortOptions -- sorts icont options so that options and file names can * appear in any order. */ void SortOptions(argv) char *argv[]; { char **last,**p,*q,**op,**fp,**optlist,**filelist,opt,*s,*malloc(); int size,error = 0;; /* * Count parameters before -x. */ ++argv; for (last = argv; *last != NULL && strcmp(*last,"-x") != 0; ++last) ; /* * Allocate a work area to build separate lists of options * and filenames. */ size = (last - argv + 1) * sizeof(char*); optlist = filelist = NULL; op = optlist = (char **)malloc(size); fp = filelist = (char **)malloc(size); if (optlist && filelist) { /* if allocations ok */ for (p = argv; (s = *p); ++p) { /* loop thru args */ if (error) break; if (s[0] == '-' && (opt = s[1]) != '\0') { /* if an option */ if (q = strchr(Options,opt)) { /* if valid option */ *op++ = s; if (q[1] == ':') { /* if has a value */ if (s[2] != '\0') s += 2; /* if value in this word */ else s = *op++ = *++p; /* else value in next word */ if (s) { /* if next word exists */ if (opt == 'S') { /* if S option */ if (s[0] == 'h') ++s; /* bump past h */ if (s[0]) ++s; /* bump past letter */ else error = 3; /* error -- no letter */ if (s[0] == '\0') { /* if value in next word */ if ((*op++ = *++p) == NULL) error = 4; /* error -- no next word */ } } } else error = 1; /* error -- missing value */ } } else error = 2; /* error -- invalid option */ } else { /* else a file */ *fp++ = s; } } *op = NULL; *fp = NULL; if (!error) { p = argv; for (op = optlist; *op; ++op) *p++ = *op; for (fp = filelist; *fp; ++fp) *p++ = *fp; } } if (optlist) free(optlist); if (filelist) free(filelist); return; } #endif /* MPW */ #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT pointer xmalloc(n) long n; { return calloc((size_t)n,sizeof(char)); } #endif /* MICROSOFT */ #if MICROSOFT int _stack = (8 * 1024); #endif /* MICROSOFT */ #if TURBO extern unsigned _stklen = 12 * 1024; #endif /* TURBO */ #if ZTC_386 #ifndef DOS386 int _stack = (8 * 1024); #endif /* DOS386 */ #endif /* ZTC_386 */ #endif /* MSDOS */!( VMS.BCK[V9.SRC.ICONT]TLOCAL.C;1;11 #if MVS || VM #if SASC #include char _linkage = _OPTIMIZE; #if MVS /* expect dsnames, not DDnames, as file names */ char *_style = "tso:"; #define SYS_OSVS #else /* MVS */ #define SYS_CMS #endif /* MVS */ #define RES_IOUTIL #define RES_DSNAME #include #if VM #include #endif /* VM */ /* * No execvp, so turn it into a call to system. (Then caller can exit.) * In VM, put the ICONX command on the CMS stack, and someone else will * do it after we're gone. (system would clobber the user area.) */ int sysexec(cmd, argv) char *cmd; char **argv; { #if MVS char *prefix = "tso:"; #else /* MVS */ char *prefix = ""; #endif /* MVS */ int cmdlen = strlen(cmd) + strlen(prefix) + 1; char **p; char *cmdstr, *next; for(p = argv+1; *p; ++p) cmdlen += strlen(*p) + 1; cmdstr = malloc(cmdlen); /* blithely ignoring failure... */ strcpy(cmdstr, prefix); strcat(cmdstr, cmd); next = cmdstr + strlen(prefix) + strlen(cmd); for (p = argv+1; *p; ++p) { *next = ' '; strcpy(next+1, *p); next += strlen(*p) + 1; } *next = '\0'; #if MVS return(system(cmdstr)); #else /* MVS */ cmspush(cmdstr); return NormalExit; #endif /* MVS */ } #endif /* SASC */ #endif /* MVS || VM */ #if OS2 #endif /* OS2 */ #if UNIX #endif /* UNIX */ #if VMS #endif /* VMS */ /* * End of operating-system specific code. */ static char *tjunk; /* avoid empty module */ *[V9.SRC.ICONT]TMAIN.C;1+,.!/ 4!-0123KPWO"56O퀛7J89Jj$GHJ/* * tmain.c - main program for translator and linker. */ #include "../h/gsupport.h" #include "tproto.h" /* * Prototypes. */ hidden novalue execute Params((char *ofile,char *efile,char * *args)); hidden novalue report Params((char *s)); hidden novalue rmfiles Params((char **p)); hidden novalue usage Params((noargs)); /* * The following code is operating-system dependent [@tmain.01]. Include * files and such. */ #if PORT Deliberate syntax error #endif /* PORT */ #if AMIGA #include #endif /* AMIGA */ #if ARM || MVS || UNIX || VM || VMS /* nothing is needed */ #endif /* ARM || ... */ #if MSDOS char pathToIconDOS[129]; #endif /* MSDOS */ #if ATARI_ST char *patharg; #endif /* ATARI_ST */ #if MACINTOSH #if MPW #include /* MPW3 - for unlink() */ #include void SortOptions(); #endif /* MPW */ #endif /* MACINTOSH */ #if OS2 #include #endif /* OS2 */ /* * End of operating-system specific code. */ #if IntBits == 16 #ifdef strlen #undef strlen /* pre-defined in some contexts */ #endif /* strlen */ #endif /* Intbits == 16 */ /* * Define global variables. */ #define Global #define Init(v) = v #include "tglobals.h" char *ofile = NULL; /* linker output file name */ char patchpath[MaxPath+18] = "%PatchStringHere->"; /* * The following code is operating-system dependent [@tmain.02]. Definition * of refpath. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if UNIX || AMIGA || ATARI_ST || MACINTOSH || MSDOS || MVS || OS2 || VM char *refpath = RefPath; #endif /* UNIX ... */ #if VMS char *refpath = "ICON_BIN:"; #endif /* VMS */ /* * End of operating-system specific code. */ /* * getopt() variables */ extern int optindex; /* index into parent argv vector */ extern int optopt; /* character checked for validity */ extern char *optarg; /* argument associated with option */ /* * main program */ novalue main(argc,argv) int argc; char **argv; { int nolink = 0; /* suppress linking? */ int errors = 0; /* translator and linker errors */ char **tfiles, **tptr; /* list of files to translate */ char **lfiles, **lptr; /* list of files to link */ char **rfiles, **rptr; /* list of files to remove */ char *efile = NULL; /* stderr file */ char buf[MaxFileName]; /* file name construction buffer */ int c, n; char ch; struct fileparts *fp; #if AMIGA #if AZTEC_C struct Process *FindTask(); struct Process *Process = FindTask(0L); ULONG stacksize = *((ULONG *)Process->pr_ReturnAddr); if (stacksize < ICONTMINSTACK) { fprintf(stderr,"Icont needs \"stack %d\" to run\n",ICONTMINSTACK); exit(-1); } #endif /* AZTEC_C */ #endif /* AMIGA */ #if MACINTOSH #if MPW InitCursorCtl(NULL); SortOptions(argv); #endif /* MPW */ #endif /* MACINTOSH */ iconxloc = (char *)alloc((unsigned)strlen(refpath) + 6); strcpy(iconxloc, refpath); strcat(iconxloc, "iconx"); if ((int)strlen(patchpath) > 18) iconxloc = patchpath+18; /* * Process options. */ while ((c = getopt(argc,argv,IconOptions)) != EOF) switch (c) { case 'C': /* Ignore: compiler only */ break; case 'E': /* -E: preprocess only */ pponly = 1; nolink = 1; break; case 'L': /* -L: enable linker debugging */ #ifdef DeBugLinker Dflag = 1; #endif /* DeBugLinker */ break; case 'S': /* -S */ fprintf(stderr, "Warning: -S option is obsolete\n"); break; #if MSDOS case 'X': /* -X */ #if ZTC_386 fprintf(stderr, "Warning: -X option is not available\n"); #else /* ZTC_386 */ makeExe = 1; #endif /* ZTC_386 */ break; case 'I': /* -C */ makeExe = 0; break; #endif /* MSDOS */ case 'c': /* -c: compile only (no linking) */ nolink = 1; break; case 'e': /* -e file: redirect stderr */ efile = optarg; break; case 'f': /* -f features: enable features */ if (index(optarg, 's') || index(optarg, 'a')) strinv = 1; /* this is the only icont feature */ break; #if OS2 case 'i': /* -i: Don't create .EXE file */ noexe = 1; break; #endif /* OS2 */ case 'm': /* -m: preprocess using m4(1) [UNIX] */ m4pre = 1; break; case 'n': /* Ignore: compiler only */ break; case 'o': /* -o file: name output file */ ofile = optarg; break; case 'p': /* -p path: iconx path [ATARI] */ #if ATARI_ST patharg = optarg; #endif /* ATARI_ST */ break; case 'r': /* Ignore: compiler only */ break; case 's': /* -s: suppress informative messages */ silent = 1; verbose = 0; breakGUů VMS.BCK[V9.SRC.ICONT]TMAIN.C;11N;1! ; case 't': /* -t: turn on procedure tracing */ trace = -1; break; case 'u': /* -u: warn about undeclared ids */ uwarn = 1; break; case 'v': /* -v n: set verbosity level */ if (sscanf(optarg, "%d%c", &verbose, &ch) != 1) quitf("bad operand to -v option: %s",optarg); if (verbose == 0) silent = 1; break; default: case 'x': /* -x illegal until after file list */ usage(); } #if MSDOS /* * Define pathToIconDOS as a global accessible from inside * separately-compiled compilation units. */ if( makeExe ){ char *pathCursor; strcpy (pathToIconDOS, argv[0]); pathCursor = (char *)strrchr (pathToIconDOS, '\\'); if (!pathCursor) { fprintf (stderr, "Can't understand what directory icont was run from.\n"); exit(ErrorExit); } strcpy (++pathCursor, "ixhdr.exe"); } #endif /* MSDOS */ /* * Allocate space for lists of file names. */ n = argc - optindex + 1; tptr = tfiles = (char **)alloc((unsigned int)(n * sizeof(char *))); lptr = lfiles = (char **)alloc((unsigned int)(n * sizeof(char *))); rptr = rfiles = (char **)alloc((unsigned int)(2 * n * sizeof(char *))); /* * Scan file name arguments. */ while (optindex < argc) { if (strcmp(argv[optindex],"-x") == 0) /* stop at -x */ break; else if (strcmp(argv[optindex],"-") == 0) { #if ARM /* Different file naming, so we need a different strategy... */ *tptr++ = "-"; /* Use makename(), pretending we had an input file named "Stdin" */ makename(buf,TargetDir,"Stdin",U1Suffix); *lptr++ = *rptr++ = salloc(buf); /* link & remove .u1 */ makename(buf,TargetDir,"Stdin",U2Suffix); *rptr++ = salloc(buf); /* also remove .u2 */ #else /* ARM */ *tptr++ = "-"; /* "-" means standard input */ *lptr++ = *rptr++ = "stdin.u1"; *rptr++ = "stdin.u2"; #endif /* ARM */ } else { fp = fparse(argv[optindex]); /* parse file name */ if (*fp->ext == '\0' || smatch(fp->ext, SourceSuffix)) { makename(buf,SourceDir,argv[optindex], SourceSuffix); #if VMS strcat(buf, fp->version); #endif /* VMS */ *tptr++ = salloc(buf); /* translate the .icn file */ makename(buf,TargetDir,argv[optindex],U1Suffix); *lptr++ = *rptr++ = salloc(buf); /* link & remove .u1 */ makename(buf,TargetDir,argv[optindex],U2Suffix); *rptr++ = salloc(buf); /* also remove .u2 */ } else if (smatch(fp->ext,U1Suffix) || smatch(fp->ext,U2Suffix) || smatch(fp->ext,USuffix)) { makename(buf,TargetDir,argv[optindex],U1Suffix); *lptr++ = salloc(buf); } else quitf("bad argument %s",argv[optindex]); } optindex++; } *tptr = *lptr = *rptr = NULL; /* terminate filename lists */ if (lptr == lfiles) usage(); /* error -- no files named */ /* * Round hash table sizes to next power of two, and set masks for hashing. */ lchsize = round2(lchsize); cmask = lchsize - 1; fhsize = round2(fhsize); fmask = fhsize - 1; ghsize = round2(ghsize); gmask = ghsize - 1; ihsize = round2(ihsize); imask = ihsize - 1; lhsize = round2(lhsize); lmask = lhsize - 1; /* * Translate .icn files to make .u1 and .u2 files. */ if (tptr > tfiles) { if (!silent && !pponly) report("Translating"); errors = trans(tfiles); if (errors > 0) /* exit if errors seen */ exit(ErrorExit); } /* * Link .u1 and .u2 files to make an executable. */ if (nolink) { /* exit if no linking wanted */ #if MACINTOSH #if MPW /* * Set type of translator output ucode (.u) files * to 'TEXT', so they can be easily viewed by editors. */ { char **p; void setfile(); for (p = rfiles; *p; ++p) setfile(*p,'TEXT','icon'); } #endif /* MPW */ #endif /* MACINTOSH */ exit(NormalExit); } #if MSDOS if (ofile == NULL) { /* if no -o file, synthesize a name */ ofile = salloc(makename(buf,TargetDir,lfiles[0], makeExe ? ".Exe" : IcodeSuffix)); } else { /* add extension if necessary */ fp = fparse(ofile); if (*fp->ext == '\0' && *IcodeSuffix != '\0') /* if no ext given */ ofile = salloc(makename(buf,NULL,ofile, makeExe ? ".Exe" : IcodeSuffix)); } #else /* MSDOS */ if (ofile == NULL) { /* if no -o file, synthesize a name */ ofile = salloc(makename(buf,TargetDir,lfiles[0],IcodeSuffix)); } else { /* add extension in necessary */ fp = fparse(ofile); if (*fp->ext == '\0' && *IcodeSuffix != '\0') /* if no ext given */ ofile = salloc(makename(buf,NULL,ofile,IcodeSuffix)); } #endif /* MSDOS */ if (!silent) report("Linking"); errors = ilink(lfiles,ofile); /* link .u files to make icode file */ /* * Finish by removing intermediate files. * Execute the linked program if so requested and if there were no errors. */ #if MACINTOSH #if MPW /* Set file type to TEXT so it will be executable as a script. */ setfile(ofile,'TEXT','icon'); #endif /* MPW */ #endif /* MACINTOSH */ rmfiles(rfiles); /* remove intermediate files */ if (errors > 0) { /* exit if linker errors seen */ unlink(ofile); exit(ErrorExit); } #if !(MACINTOSH && MPW) if (optindex < argc) { if (!silent) report("Executing"); execute (ofile, efile, argv+optindex+1); } #endif /* !(MACINTOSH && MPW) */ exit(NormalExit); } /* * execute - execute iconx to run the icon program */ static novalue execute(ofile,efile,args) char *ofile, *efile, **args; { #if !(MACINTOSH && MPW) int n; char **argv, **p; for (n = 0; args[n] != NULL; n++) /* count arguments */ ; p = argv = (char **)alloc((unsigned int)((n + 5) * sizeof(char *))); *p++ = iconxloc; /* set iconx pathname */ if (efile != NULL) { /* if -e given, copy it */ *p++ = "-e"; *p++ = efile; } *p++ = ofile; /* pass icode file name */ #if AMIGA && LATTICE *p = *args; while (*p++) { *p = *args; args++; } #else /* AMIGA && LATTICE */ while (*p++ = *args++) /* copy args into argument vector */ ; #endif /* AMIGA && LATTICE */ *p = NULL; /* * The following code is operating-system dependent [@tmain.03]. It calls * iconx on the way out. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA #if AZTEC_C execvp(iconxloc,argv); return; #endif /* AZTEC_C */ #if LATTICE { struct ProcID procid; if (forkv(iconxloc,argv,NULL,&procid) == 0) { wait(&procid); return; } } #endif /* LATTICE */ #endif /* AMIGA */ #if ARM { int i = 7 + strlen(iconxloc); int j; char *s; char buffer[255]; extern int armquote(char *, char **); sprintf(buffer, "Chain:%s ", iconxloc); for (p = argv + 1; *p; ++p) { j = armquote(*p, &s); if (j == -1 || i + j >= 255) { fprintf(std5B VMS.BCK[V9.SRC.ICONT]TMAIN.C;11N;1;1!` err, "Cannot execute: command line too long"); fflush(stderr); return; } strcpy(buffer + i, s); i += j; buffer[i] = ' '; } buffer[i] = '\0'; system(buffer); } #endif /* ARM */ #if ATARI_ST || MACINTOSH fprintf(stderr,"-x not supported\n"); fflush(stderr); #endif /* ATARI_ST || ... */ #if MSDOS /* No special handling is needed for an .exe files, since iconx * recognizes it from the extension andfrom internal .exe data. */ #if MICROSOFT || TURBO execvp(iconxloc,argv); /* execute with path search */ #endif /* MICROSOFT || ... */ #if INTEL_386 || ZTC_386 || HIGHC_386 || WATCOM fprintf(stderr,"-x not supported\n"); fflush(stderr); #endif /* INTEL_386 || ... */ #endif /* MSDOS */ #if MVS || VM #if SASC exit(sysexec(iconxloc, argv)); #endif /* SASC */ fprintf(stderr,"-x not supported\n"); fflush(stderr); #endif /* MVS || VM */ #if OS2 #ifdef PresentationManager fputs("-x not supported\n", stderr); #else /* PresentationManager */ execvp(iconxloc,argv); /* execute with path search */ #endif /* PresentationManager */ #endif /* OS2 */ #if UNIX /* * If an ICONX environment variable is defined, use that. * If not, first try the predefined path, then search $PATH via execvp. */ if ((argv[0] = getenv("ICONX")) != NULL && argv[0][0] != '\0') { execv(argv[0], argv); /* exec file specified by $ICONX */ quitf("cannot execute $ICONX (%s)", argv[0]); } #ifdef HardWiredPaths #ifdef CRAY argv[0] = "iconx"; execv(iconxloc, argv); #else /* CRAY */ argv[0] = iconxloc; /* try predefined file */ execv(argv[0], argv); #endif /* CRAY */ #endif /* HardWiredPaths */ argv[0] = "iconx"; execvp(argv[0], argv); /* if no iconxloc, search path for "iconx" */ #ifdef HardWiredPaths quitf("cannot run %s", iconxloc); #else /* HardWiredPaths */ quitf("cannot find iconx", ""); #endif /* HardWiredPaths */ #endif /* UNIX */ #if VMS execv(iconxloc,argv); #endif /* VMS */ /* * End of operating-system specific code. */ quitf("could not run %s",iconxloc); #else /* !(MACINTOSH && MPW) */ printf("-x not supported\n"); #endif /* !(MACINZTOSH && MPW) */ } static novalue report(s) char *s; { fprintf(stderr,"%s:\n",s); } /* * rmfiles - remove a list of files */ static novalue rmfiles(p) char **p; { for (; *p; p++) { unlink(*p); } } /* * Print an error message if called incorrectly. The message depends * on the legal options for this system. */ static novalue usage() { #if MVS || VM fprintf(stderr,"usage: %s %s file ... <-x args>\n", progname, TUsage); #else fprintf(stderr,"usage: %s %s file ... [-x args]\n", progname, TUsage); #endif exit(ErrorExit); } e*[V9.SRC.ICONT]TMEM.C;1+,./ 4-0123KPWO563Gs7PYms89Jj$GHJ /* * tmem.c -- memory initialization and allocation for the translator. */ #include "../h/gsupport.h" #include "tproto.h" #include "tglobals.h" #include "tsym.h" #include "tree.h" struct tlentry **lhash; /* hash area for local table */ struct tgentry **ghash; /* hash area for global table */ struct tcentry **chash; /* hash area for constant table */ struct tlentry *lfirst; /* first local table entry */ struct tlentry *llast; /* last local table entry */ struct tcentry *cfirst; /* first constant table entry */ struct tcentry *clast; /* last constant table entry */ struct tgentry *gfirst; /* first global table entry */ struct tgentry *glast; /* last global table entry */ extern struct str_buf lex_sbuf; /* * tmalloc - allocate memory for the translator */ novalue tmalloc() { chash = (struct tcentry **) tcalloc(lchsize, sizeof (struct tcentry *)); ghash = (struct tgentry **) tcalloc(ghsize, sizeof (struct tgentry *)); lhash = (struct tlentry **) tcalloc(lhsize, sizeof (struct tlentry *)); init_str(); init_sbuf(&lex_sbuf); } /* * meminit - clear tables for use in translating the next file */ novalue tminit() { register struct tlentry **lp; register struct tgentry **gp; register struct tcentry **cp; lfirst = NULL; llast = NULL; cfirst = NULL; clast = NULL; gfirst = NULL; glast = NULL; /* * Zero out the hash tables. */ for (lp = lhash; lp < &lhash[lhsize]; lp++) *lp = NULL; for (gp = ghash; gp < &ghash[ghsize]; gp++) *gp = NULL; for (cp = chash; cp < &chash[lchsize]; cp++) *cp = NULL; } /* * tmfree - free memory used by the translator */ novalue tmfree() { struct tgentry *gp, *gp1; #ifndef VarTran loc_init(); /* free constant and local table entries */ /* * Free global table entries. */ for (gp = gfirst; gp != NULL; gp = gp1) { gp1 = gp->g_next; free((char *)gp); } gfirst = NULL; glast = NULL; #endif /* VarTran */ free((char *) chash); chash = NULL; free((char *) ghash); ghash = NULL; free((char *) lhash); lhash = NULL; free_stbl(); /* free string table */ clear_sbuf(&lex_sbuf); /* free buffer store for strings */ } n*[V9.SRC.ICONT]TPARSE.C;1+,.i/ 4ihI-0123KPWOj56(w7hy89Jj$GHJ# define IDENT 257 # define INTLIT 258 # define REALLIT 259 # define STRINGLIT 260 # define CSETLIT 261 # define EOFX 262 # define BREAK 263 # define BY 264 # define CASE 265 # define CREATE 266 # define DEFAULT 267 # define DO 268 # define ELSE 269 # define END 270 # define EVERY 271 # define FAIL 272 # define GLOBAL 273 # define IF 274 # define INITIAL 275 # define INVOCABLE 276 # define LINK 277 # define LOCAL 278 # define NEXT 279 # define NOT 280 # define OF 281 # define PROCEDURE 282 # define RECORD 283 # define REPEAT 284 # define RETURN 285 # define STATIC 286 # define SUSPEND 287 # define THEN 288 # define TO 289 # define UNTIL 290 # define WHILE 291 # define BANG 292 # define MOD 293 # define AUGMOD 294 # define AND 295 # define AUGAND 296 # define STAR 297 # define AUGSTAR 298 # define INTER 299 # define AUGINTER 300 # define PLUS 301 # define AUGPLUS 302 # define UNION 303 # define AUGUNION 304 # define MINUS 305 # define AUGMINUS 306 # define DIFF 307 # define AUGDIFF 308 # define DOT 309 # define SLASH 310 # define AUGSLASH 311 # define ASSIGN 312 # define SWAP 313 # define NMLT 314 # define AUGNMLT 315 # define REVASSIGN 316 # define REVSWAP 317 # define SLT 318 # define AUGSLT 319 # define SLE 320 # define AUGSLE 321 # define NMLE 322 # define AUGNMLE 323 # define NMEQ 324 # define AUGNMEQ 325 # define SEQ 326 # define AUGSEQ 327 # define EQUIV 328 # define AUGEQUIV 329 # define NMGT 330 # define AUGNMGT 331 # define NMGE 332 # define AUGNMGE 333 # define SGT 334 # define AUGSGT 335 # define SGEwqv VMS.BCK[V9.SRC.ICONT]TPARSE.C;1N;1iQt 336 # define AUGSGE 337 # define QMARK 338 # define AUGQMARK 339 # define AT 340 # define AUGAT 341 # define BACKSLASH 342 # define CARET 343 # define AUGCARET 344 # define BAR 345 # define CONCAT 346 # define AUGCONCAT 347 # define LCONCAT 348 # define AUGLCONCAT 349 # define TILDE 350 # define NMNE 351 # define AUGNMNE 352 # define SNE 353 # define AUGSNE 354 # define NEQUIV 355 # define AUGNEQUIV 356 # define LPAREN 357 # define RPAREN 358 # define PCOLON 359 # define COMMA 360 # define MCOLON 361 # define COLON 362 # define SEMICOL 363 # define LBRACK 364 # define RBRACK 365 # define LBRACE 366 # define RBRACE 367 # line 145 "tgram.g" /* * These commented directives are passed through the first application * of cpp, then turned into real includes in tgram.g by fixgram.icn. */ #include "../h/gsupport.h" #include "../h/lexdef.h" #include "tproto.h" #include "tglobals.h" #include "tsym.h" #include "tree.h" #include "keyword.h" #undef YYSTYPE #define YYSTYPE nodeptr #define YYMAXDEPTH 500 extern int fncargs[]; int idflag; int id_cnt; #define yyclearin yychar = -1 #define yyerrok yyerrflag = 0 extern int yychar; extern int yyerrflag; #ifndef YYMAXDEPTH #define YYMAXDEPTH 150 #endif #ifndef YYSTYPE #define YYSTYPE int #endif YYSTYPE yylval, yyval; # define YYERRCODE 256 # line 442 "tgram.g" /* * xfree(p) -- used with free(p) macro to avoid compiler errors from * miscast free calls generated by Yacc. */ static novalue xfree(p) char *p; { free(p); } #define free(p) xfree((char*)p) int yyexca[] ={ -1, 0, 262, 2, 273, 2, 276, 2, 277, 2, 282, 2, 283, 2, -2, 0, -1, 1, 0, -1, -2, 0, -1, 20, 270, 40, 363, 42, -2, 0, -1, 86, 264, 42, 268, 42, 269, 42, 281, 42, 288, 42, 289, 42, 293, 42, 294, 42, 296, 42, 298, 42, 300, 42, 302, 42, 304, 42, 306, 42, 308, 42, 311, 42, 312, 42, 313, 42, 314, 42, 315, 42, 316, 42, 317, 42, 318, 42, 319, 42, 320, 42, 321, 42, 322, 42, 323, 42, 325, 42, 327, 42, 329, 42, 330, 42, 331, 42, 332, 42, 333, 42, 334, 42, 335, 42, 336, 42, 337, 42, 339, 42, 341, 42, 344, 42, 347, 42, 349, 42, 352, 42, 354, 42, 356, 42, 358, 42, 359, 42, 360, 42, 361, 42, 362, 42, 363, 42, 365, 42, 367, 42, -2, 0, -1, 87, 358, 42, 360, 42, -2, 0, -1, 88, 363, 42, 367, 42, -2, 0, -1, 89, 360, 42, 365, 42, -2, 0, -1, 96, 264, 42, 268, 42, 269, 42, 281, 42, 288, 42, 289, 42, 293, 42, 294, 42, 296, 42, 298, 42, 300, 42, 302, 42, 304, 42, 306, 42, 308, 42, 311, 42, 312, 42, 313, 42, 314, 42, 315, 42, 316, 42, 317, 42, 318, 42, 319, 42, 320, 42, 321, 42, 322, 42, 323, 42, 325, 42, 327, 42, 329, 42, 330, 42, 331, 42, 332, 42, 333, 42, 334, 42, 335, 42, 336, 42, 337, 42, 339, 42, 341, 42, 344, 42, 347, 42, 349, 42, 352, 42, 354, 42, 356, 42, 358, 42, 359, 42, 360, 42, 361, 42, 362, 42, 363, 42, 365, 42, 367, 42, -2, 0, -1, 97, 264, 42, 268, 42, 269, 42, 281, 42, 288, 42, 289, 42, 293, 42, 294, 42, 296, 42, 298, 42, 300, 42, 302, 42, 304, 42, 306, 42, 308, 42, 311, 42, 312, 42, 313, 42, 314, 42, 315, 42, 316, 42, 317, 42, 318, 42, 319, 42, 320, 42, 321, 42, 322, 42, 323, 42, 325, 42, 327, 42, 329, 42, 330, 42, 331, 42, 332, 42, 333, 42, 334, 42, 335, 42, 336, 42, 337, 42, 339, 42, 341, 42, 344, 42, 347, 42, 349, 42, 352, 42, 354, 42, 356, 42, 358, 42, 359, 42, 360, 42, 361, 42, 362, 42, 363, 42, 365, 42, 367, 42, -2, 0, -1, 111, 270, 40, 363, 42, -2, 0, -1, 117, 270, 40, 363, 42, -2, 0, -1, 182, 360, 42, 365, 42, -2, 0, -1, 183, 360, 42, -2, 0, -1, 184, 358, 42, 360, 42, -2, 0, -1, 311, 358, 42, 360, 42, 365, 42, -2, 0, -1, 313, 363, 42, 367, 42, -2, 0, -1, 335, 360, 42, 367, 42, -2, 0, }; # define YYNPROD 203 # define YYLAST 728 int yyact[]={ 38, 84, 91, 92, 93, 94, 312, 86, 185, 99, 83, 118, 335, 359, 341, 102, 95, 358, 98, 334, 311, 311, 355, 85, 51, 329, 314, 20, 103, 96, 118, 97, 313, 228, 101, 100, 56, 346, 118, 90, 118, 59, 117, 62, 360, 58, 108, 70, 336, 64, 311, 57, 228, 55, 60, 326, 184, 228, 310, 119, 311, 107, 106, 182, 345, 183, 324, 232, 65, 110, 67, 168, 69, 169, 352, 214, 118, 350, 328, 177, 41, 356, 71, 174, 50, 175, 73, 61, 325, 52, 53, 320, 54, 316, 63, 66, 176, 68, 327, 72, 118, 87, 332, 118, 333, 331, 319, 361, 89, 116, 88, 305, 38, 84, 91, 92, 93, 94, 118, 86, 181, 99, 83, 353, 317, 231, 3, 102, 95, 218, 98, 318, 105, 118, 19, 85, 51, 315, 118, 28, 103, 96, 29, 97, 217, 321, 101, 100, 56, 309, 170, 90, 172, 59, 173, 62, 171, 58, 118, 70, 30, 64, 18, 57, 118, 55, 60, 44, 180, 37, 179, 178, 113, 24, 104, 114, 25, 330, 351, 306, 65, 212, 67, 115, 69, 82, 2, 81, 80, 27, 17, 36, 23, 79, 71, 78, 50, 77, 73, 61, 76, 52, 53, 75, 54, 74, 63, 66, 49, 68, 47, 72, 42, 87, 38, 84, 91, 92, 93, 94, 89, 86, 88, 99, 83, 40, 112, 322, 109, 102, 95, 34, 98, 273, 274, 111, 33, 85, 51, 12, 233, 32, 103, 96, 21, 97, 22, 26, 101, 100, 56, 10, 9, 90, 8, 59, 7, 62, 31, 58, 6, 70, 5, 64, 1, 57, 0, 55, 60, 13, 0, 216, 15, 14, 0, 210, 0, 0, 16, 11, 0, 0, 65, 0, 67, 234, 69, 236, 239, 221, 222, 223, 224, 225, 226, 227, 71, 230, 50, 229, 73, 61, 0, 52, 53, 237, 54, 0, 63, 66, 0, 68, 0, 72, 0, 87, 46, 84, 91, 92, 93, 94, 89, 86, 88, 99, 83, 45, 0, 0, 0, 102, 95, 0, 98, 0, 289, 290, 0, 85, 51, 0, 0, 235, 103, 96, 0, 97, 0, 238, 101, 100, 56, 0, 0, 90, 0, 59, 0, 62, 0, 58, 4, 70, 303, 64, 308, 57, 0, 55, 60, 0, 0, 13, 304, 0, 15, 14, 0, 0, 0, 0, 16, 11, 65, 0, 67, 0, 69, 338, 0, 213, 0, 0, 0, 0, 0, 0, 71, 43, 50, 0, 73, 61, 0, 52, 53, 323, 54, 347, 63, 66, 35, 68, 152, 72, 0, 87, 0, 133, 0, 150, 0, 130, 89, 131, 88, 128, 0, 127, 0, 129, 0, 126, 362, 0, 132, 121, 120, 0, 140, 123, 122, 0, 147, 164, 146, 0, 139, 158, 135, 157, 143, 163, 136, 160, 138, 154, 137, 166, 145, 162, 144, 161, 149, 156, 151, 155, 0, 134, 0, 0, 124, 0, 125, 0, 153, 141, 211, 148, 215, 142, 165, 39, 159, 0, 167, 0, 219, 220, 0, 295, 296, 297, 298, 299, 0, 0, 291, 292, 293, 294, 0, 35, 0, 0, 0, 339, 340, 35, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 0, 0, 3x VMS.BCK[V9.SRC.ICONT]TPARSE.C;1CN;1i57, 0, 0, 0, 0, 0, 0, 0, 0, 354, 363, 364, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, 0, 0, 0, 0, 0, 0, 307, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 0, 0, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 215, 300, 301, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349 }; int yypact[]={ -130, -1000, 100, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -95, -229, -1000, -84, -118, -97, -4, -1000, -1000, -42, -125, -298, -1000, -1000, -1000, -299, -1000, -1000, -316, -1000, -1000, -288, -103, -161, -321, -219, -279, -1000, -1000, 125, -1000, 131, -275, -151, -214, -1000, -172, -1000, -301, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -42, -1000, -1000, -42, -42, -42, -42, -128, -1000, -1000, -1000, -1000, -1000, -42, -42, -42, -42, -42, -42, -42, -42, -303, -1000, -84, -118, -133, -290, -125, -42, -125, -42, -1000, -1000, -1000, -42, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, -42, -256, -42, -108, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -219, -1000, -300, -1000, -361, -331, -339, -1000, -1000, -1000, -1000, -131, -195, -157, -137, -162, -177, -219, -112, -1000, -1000, -1000, -125, -292, -303, -182, -308, -265, -1000, -279, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -186, -1000, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -151, -151, -214, -214, -214, -214, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -340, -257, -1000, -348, -1000, -310, -1000, -1000, -42, -1000, -42, -1000, -42, -42, -352, -42, -42, -42, -1000, -294, -327, -1000, -1000, -1000, -1000, 60, -1000, -42, -1000, -1000, -1000, -1000, -42, -1000, -1000, -1000, -219, -192, -144, -219, -219, -219, -1000, -343, -1000, -284, -1000, -42, -350, -1000, -318, -255, -1000, -1000, -219, -1000, -144, -42, -42, -1000, -219, -219 }; int yypgo[]={ 0, 264, 186, 262, 260, 256, 254, 252, 251, 247, 189, 246, 192, 244, 174, 241, 240, 239, 236, 235, 231, 228, 227, 226, 191, 391, 169, 483, 225, 80, 212, 399, 167, 327, 316, 210, 526, 208, 205, 203, 200, 197, 195, 193, 188, 187, 185, 181, 75, 179, 178, 74, 177 }; int yyr1[]={ 0, 1, 2, 2, 3, 3, 3, 3, 3, 8, 9, 9, 10, 10, 10, 7, 11, 11, 12, 12, 13, 6, 15, 4, 16, 16, 5, 21, 17, 22, 22, 22, 14, 14, 18, 18, 23, 23, 19, 19, 20, 20, 25, 25, 24, 24, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 43, 43, 44, 44, 45, 45, 46, 40, 40, 40, 40, 41, 41, 42, 50, 50, 51, 51, 47, 47, 49, 49, 38, 38, 38, 38, 39, 52, 52, 52, 48, 48, 1, 5, 24 }; int yyr2[]={ 0, 5, 0, 4, 3, 3, 3, 3, 3, 5, 2, 7, 3, 3, 7, 5, 2, 7, 3, 3, 1, 7, 1, 13, 1, 3, 13, 1, 13, 1, 3, 7, 3, 7, 1, 9, 3, 3, 1, 7, 1, 7, 1, 2, 2, 7, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 11, 2, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 2, 7, 7, 7, 7, 2, 7, 7, 7, 7, 2, 7, 2, 7, 7, 7, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 3, 5, 7, 7, 7, 9, 7, 9, 9, 7, 5, 5, 5, 9, 5, 9, 5, 9, 5, 3, 5, 5, 9, 9, 13, 13, 2, 7, 7, 7, 3, 7, 3, 7, 3, 3, 3, 3, 13, 3, 3, 3, 2, 7, 6, 8, 2 }; int yychk[]={ -1000, -1, -2, 256, 262, -3, -4, -5, -6, -7, -8, 283, -17, 273, 277, 276, 282, -2, 257, 363, 256, -13, -11, -12, 257, 260, -9, -10, 257, 260, 257, 262, -15, -18, -20, -25, -24, -26, 256, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, 340, 280, 345, 346, 348, 309, 292, 307, 301, 297, f VMS.BCK[V9.SRC.ICONT]TPARSE.C;1CN;1i" 310, 343, 299, 350, 305, 324, 351, 326, 353, 328, 303, 338, 355, 342, -38, -39, -40, -41, -42, -43, -44, -45, -46, 266, 257, 279, 263, 357, 366, 364, 295, 258, 259, 260, 261, 272, 285, 287, 274, 265, 291, 290, 271, 284, -14, 257, 360, 360, 362, -21, 357, -19, -23, 275, 278, 286, 270, 363, 295, 338, 313, 312, 317, 316, 347, 349, 308, 304, 302, 306, 298, 300, 311, 294, 344, 325, 329, 333, 331, 323, 315, 352, 356, 327, 337, 335, 321, 319, 354, 339, 296, 341, 289, 345, 326, 336, 334, 320, 318, 353, 324, 332, 330, 322, 314, 351, 328, 355, 346, 348, 301, 307, 303, 305, 297, 299, 310, 293, 343, 342, 340, 292, 364, 366, 357, 309, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -24, -25, -47, -25, -48, -25, -47, 272, 257, -25, -25, -24, -24, -24, -24, -24, -24, -24, 360, -12, -10, 258, 357, -16, -14, -20, -14, -24, -20, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -29, -29, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -33, -33, -33, -33, -34, -34, -34, -34, -34, -36, -36, -36, -47, -24, 367, -49, -25, -47, 257, 358, 360, 367, 363, 365, 268, 288, 281, 268, 268, 268, 257, -22, -14, 358, 270, 363, 363, 264, 365, -52, 362, 359, 361, 367, 360, 358, -25, -48, -24, -24, 366, -24, -24, -24, 358, 364, -29, -24, -25, 269, -50, -51, 267, -24, 365, 365, -24, 367, 363, 362, 362, -51, -24, -24 }; int yydef[]={ -2, -2, 0, 2, 1, 3, 4, 5, 6, 7, 8, 0, 0, 20, 0, 0, 0, 0, 22, 34, -2, 0, 15, 16, 18, 19, 9, 10, 12, 13, 27, 200, 0, 38, 0, 0, 43, 44, 202, 46, 48, 81, 84, 86, 101, 104, 109, 114, 116, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 146, 147, 148, 149, 150, 151, 152, 153, 0, 155, 156, -2, -2, -2, -2, 0, 190, 191, 192, 193, 175, -2, -2, 0, 0, 0, 0, 0, 0, 21, 32, 0, 0, 0, 0, 24, -2, 0, 0, 36, 37, 201, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, 0, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 154, 157, 0, 186, 0, 198, 0, 166, 167, 176, 177, 43, 0, 0, 168, 170, 172, 174, 0, 17, 11, 14, 29, 0, 25, 0, 0, 0, 41, 45, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 102, 103, 105, 106, 107, 108, 110, 111, 112, 113, 115, 117, 118, 119, 0, 43, 162, 0, 188, 0, 165, 158, -2, 159, -2, 160, 0, 0, 0, 0, 0, 0, 33, 0, 30, 23, 26, 35, 39, 0, 161, 0, 195, 196, 197, 163, -2, 164, 187, 199, 178, 179, 0, 169, 171, 173, 28, 0, 83, 0, 189, 0, 0, 182, 0, 0, 31, 194, 180, 181, 0, 0, 0, 183, 184, 185 }; typedef struct { char *t_name; int t_val; } yytoktype; #ifndef YYDEBUG # define YYDEBUG 0 /* don't allow debugging */ #endif #if YYDEBUG yytoktype yytoks[] = { "IDENT", 257, "INTLIT", 258, "REALLIT", 259, "STRINGLIT", 260, "CSETLIT", 261, "EOFX", 262, "BREAK", 263, "BY", 264, "CASE", 265, "CREATE", 266, "DEFAULT", 267, "DO", 268, "ELSE", 269, "END", 270, "EVERY", 271, "FAIL", 272, "GLOBAL", 273, "IF", 274, "INITIAL", 275, "INVOCABLE", 276, "LINK", 277, "LOCAL", 278, "NEXT", 279, "NOT", 280, "OF", 281, "PROCEDURE", 282, "RECORD", 283, "REPEAT", 284, "RETURN", 285, "STATIC", 286, "SUSPEND", 287, "THEN", 288, "TO", 289, "UNTIL", 290, "WHILE", 291, "BANG", 292, "MOD", 293, "AUGMOD", 294, "AND", 295, "AUGAND", 296, "STAR", 297, "AUGSTAR", 298, "INTER", 299, "AUGINTER", 300, "PLUS", 301, "AUGPLUS", 302, "UNION", 303, "AUGUNION", 304, "MINUS", 305, "AUGMINUS", 306, "DIFF", 307, "AUGDIFF", 308, "DOT", 309, "SLASH", 310, "AUGSLASH", 311, "ASSIGN", 312, "SWAP", 313, "NMLT", 314, "AUGNMLT", 315, "REVASSIGN", 316, "REVSWAP", 317, "SLT", 318, "AUGSLT", 319, "SLE", 320, "AUGSLE", 321, "NMLE", 322, "AUGNMLE", 323, "NMEQ", 324, "AUGNMEQ", 325, "SEQ", 326, "AUGSEQ", 327, "EQUIV", 328, "AUGEQUIV", 329, "NMGT", 330, "AUGNMGT", 331, "NMGE", 332, "AUGNMGE", 333, "SGT", 334, "AUGSGT", 335, "SGE", 336, "AUGSGE", 337, "QMARK", 338, "AUGQMARK", 339, "AT", 340, "AUGAT", 341, "BACKSLASH", 342, "CARET", 343, "AUGCARET", 344, "BAR", 345, "CONCAT", 346, "AUGCONCAT", 347, "LCONCAT", 348, "AUGLCONCAT", 349, "TILDE", 350, "NMNE", 351, "AUGNMNE", 352, "SNE", 353, "AUGSNE", 354, "NEQUIV", 355, "AUGNEQUIV", 356, "LPAREN", 357, "RPAREN", 358, "PCOLON", 359, "COMMA", 360, "MCOLON", 361, "COLON", 362, "SEMICOL", 363, "LBRACK", 364, "RBRACK", 365, "LBRACE", 366, "RBRACE", 367, "-unknown-", -1 /* ends search */ }; char * yyreds[] = { "-no such reduction-", "program : decls EOFX", "decls : /* empty */", "decls : decls decl", "decl : record", "decl : proc", "decl : global", "decl : link", "decl : invocable", "invocable : INVOCABLE invoclist", "invoclist : invocop", "invoclist : invoclist COMMA invocop", "invocop : IDENT", "invocop : STRINGLIT", "invocop : STRINGLIT COLON INTLIT", "link : LINK lnklist", "lnklist : lnkfile", "lnklist : lnklist COMMA lnkfile", "lnkfile : IDENT", "lnkfile : STRINGLIT", "global : GLOBAL", "global : GLOBAL idlist", "record : RECORD IDENT", "record : RECORD IDENT LPAREN fldlist RPAREN", "fldlist : /* empty */", "fldlist : idlist", "proc : prochead SEMICOL locals initial procbody END", "prochead : PROCEDURE IDENT", "prochead : PROCEDURE IDENT LPAREN arglist RPAREN", "arglist : /* empty */", "arglist : idlist", "arglist : idlist LBRACK RBRACK", "idlist : IDENT", "idlist : idlist COMMA IDENT", "locals : /* empty */", "loc ~ VMS.BCK[V9.SRC.ICONT]TPARSE.C;1N;11iZW1als : locals retention idlist SEMICOL", "retention : LOCAL", "retention : STATIC", "initial : /* empty */", "initial : INITIAL expr SEMICOL", "procbody : /* empty */", "procbody : nexpr SEMICOL procbody", "nexpr : /* empty */", "nexpr : expr", "expr : expr1a", "expr : expr AND expr1a", "expr1a : expr1", "expr1a : expr1a QMARK expr1", "expr1 : expr2", "expr1 : expr2 SWAP expr1", "expr1 : expr2 ASSIGN expr1", "expr1 : expr2 REVSWAP expr1", "expr1 : expr2 REVASSIGN expr1", "expr1 : expr2 AUGCONCAT expr1", "expr1 : expr2 AUGLCONCAT expr1", "expr1 : expr2 AUGDIFF expr1", "expr1 : expr2 AUGUNION expr1", "expr1 : expr2 AUGPLUS expr1", "expr1 : expr2 AUGMINUS expr1", "expr1 : expr2 AUGSTAR expr1", "expr1 : expr2 AUGINTER expr1", "expr1 : expr2 AUGSLASH expr1", "expr1 : expr2 AUGMOD expr1", "expr1 : expr2 AUGCARET expr1", "expr1 : expr2 AUGNMEQ expr1", "expr1 : expr2 AUGEQUIV expr1", "expr1 : expr2 AUGNMGE expr1", "expr1 : expr2 AUGNMGT expr1", "expr1 : expr2 AUGNMLE expr1", "expr1 : expr2 AUGNMLT expr1", "expr1 : expr2 AUGNMNE expr1", "expr1 : expr2 AUGNEQUIV expr1", "expr1 : expr2 AUGSEQ expr1", "expr1 : expr2 AUGSGE expr1", "expr1 : expr2 AUGSGT expr1", "expr1 : expr2 AUGSLE expr1", "expr1 : expr2 AUGSLT expr1", "expr1 : expr2 AUGSNE expr1", "expr1 : expr2 AUGQMARK expr1", "expr1 : expr2 AUGAND expr1", "expr1 : expr2 AUGAT expr1", "expr2 : expr3", "expr2 : expr2 TO expr3", "expr2 : expr2 TO expr3 BY expr3", "expr3 : expr4", "expr3 : expr4 BAR expr3", "expr4 : expr5", "expr4 : expr4 SEQ expr5", "expr4 : expr4 SGE expr5", "expr4 : expr4 SGT expr5", "expr4 : expr4 SLE expr5", "expr4 : expr4 SLT expr5", "expr4 : expr4 SNE expr5", "expr4 : expr4 NMEQ expr5", "expr4 : expr4 NMGE expr5", "expr4 : expr4 NMGT expr5", "expr4 : expr4 NMLE expr5", "expr4 : expr4 NMLT expr5", "expr4 : expr4 NMNE expr5", "expr4 : expr4 EQUIV expr5", "expr4 : expr4 NEQUIV expr5", "expr5 : expr6", "expr5 : expr5 CONCAT expr6", "expr5 : expr5 LCONCAT expr6", "expr6 : expr7", "expr6 : expr6 PLUS expr7", "expr6 : expr6 DIFF expr7", "expr6 : expr6 UNION expr7", "expr6 : expr6 MINUS expr7", "expr7 : expr8", "expr7 : expr7 STAR expr8", "expr7 : expr7 INTER expr8", "expr7 : expr7 SLASH expr8", "expr7 : expr7 MOD expr8", "expr8 : expr9", "expr8 : expr9 CARET expr8", "expr9 : expr10", "expr9 : expr9 BACKSLASH expr10", "expr9 : expr9 AT expr10", "expr9 : expr9 BANG expr10", "expr10 : expr11", "expr10 : AT expr10", "expr10 : NOT expr10", "expr10 : BAR expr10", "expr10 : CONCAT expr10", "expr10 : LCONCAT expr10", "expr10 : DOT expr10", "expr10 : BANG expr10", "expr10 : DIFF expr10", "expr10 : PLUS expr10", "expr10 : STAR expr10", "expr10 : SLASH expr10", "expr10 : CARET expr10", "expr10 : INTER expr10", "expr10 : TILDE expr10", "expr10 : MINUS expr10", "expr10 : NMEQ expr10", "expr10 : NMNE expr10", "expr10 : SEQ expr10", "expr10 : SNE expr10", "expr10 : EQUIV expr10", "expr10 : UNION expr10", "expr10 : QMARK expr10", "expr10 : NEQUIV expr10", "expr10 : BACKSLASH expr10", "expr11 : literal", "expr11 : section", "expr11 : return", "expr11 : if", "expr11 : case", "expr11 : while", "expr11 : until", "expr11 : every", "expr11 : repeat", "expr11 : CREATE expr", "expr11 : IDENT", "expr11 : NEXT", "expr11 : BREAK nexpr", "expr11 : LPAREN exprlist RPAREN", "expr11 : LBRACE compound RBRACE", "expr11 : LBRACK exprlist RBRACK", "expr11 : expr11 LBRACK exprlist RBRACK", "expr11 : expr11 LBRACE RBRACE", "expr11 : expr11 LBRACE pdcolist RBRACE", "expr11 : expr11 LPAREN exprlist RPAREN", "expr11 : expr11 DOT IDENT", "expr11 : AND FAIL", "expr11 : AND IDENT", "while : WHILE expr", "while : WHILE expr DO expr", "until : UNTIL expr", "until : UNTIL expr DO expr", "every : EVERY expr", "every : EVERY expr DO expr", "repeat : REPEAT expr", "return : FAIL", "return : RETURN nexpr", "return : SUSPEND nexpr", "return : SUSPEND expr DO expr", "if : IF expr THEN expr", "if : IF expr THEN expr ELSE expr", "case : CASE expr OF LBRACE caselist RBRACE", "caselist : cclause", "caselist : caselist SEMICOL cclause", "cclause : DEFAULT COLON expr", "cclause : expr COLON expr", "exprlist : nexpr", "exprlist : exprlist COMMA nexpr", "pdcolist : nexpr", "pdcolist : pdcolist COMMA nexpr", "literal : INTLIT", "literal : REALLIT", "literal : STRINGLIT", "literal : CSETLIT", "section : expr11 LBRACK expr sectop expr RBRACK", "sectop : COLON", "sectop : PCOLON", "sectop : MCOLON", "compound : nexpr", "compound : nexpr SEMICOL compound", "program : error decls EOFX", "proc : prochead error procbody END", "expr : error", }; #endif #line 1 "/usr/lib/yaccpar" /* @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10 */ /* ** Skeleton parser driver for yacc output */ /* ** yacc user known macros and defines */ #define YYERROR goto yyerrlab #define YYACCEPT { free(yys); free(yyv); return(0); } #define YYABORT { free(yys); free(yyv); return(1); } #define YYBACKUP( newtoken, newvalue )\ {\ if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\ {\ tsyserr("parser: syntax error - cannot backup" );\ goto yyerrlab;\ }\ yychar = newtoken;\ yystate = *yyps;\ yylval = newvalue;\ goto yynewstate;\ } #define YYRECOVERING() (!!yyerrflag) #ifndef YYDEBUG # define YYDEBUG 1 /* make debugging available */ #endif /* ** user known globals */ int yydebug; /* set to 1 to get debugging */ /* ** driver internal defines */ #define YYFLAG (-1000) /* ** static variables used by the parser */ static YYSTYPE *yyv; /* value stack */ static int *yys; /* state stack */ static YYSTYPE *yypv; /* top of value stack */ static int *yyps; /* top of state stack */ static int yystate; /* current state */ static int yytmp; /* extra var (lasts between blocks) */ int yynerrs; /* number of errors */ int yyerrflag; /* error recovery flag */ int yychar; /* current input token number */ /* ** yyparse - return 0 if worked, 1 if syntax error not recovered from */ int yyparse() { register YYSTYPE *yypvt; /* top of value stack for $vars */ unsigned yymaxdepth = YYMAXDEPTH; /* ** Initialize externals - yyparse may be called more than once */ yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE)); yys = (int*)malloc(yymaxdepth*sizeof(int)); if (!yyv || !yys) { tsyserr("parser: out of memory" ); return(1); } yypv = &yyv[-1]; yyps = &yys[-1]; yystate = 0; yytmp = 0; yynerrs = 0; yyerrflag = 0; yychar = -1; goto yystack; { register YYSTYPE *yy_pv; /* top of value stack */ register int *yy_ps; /* top of state stack */ register int yy_state; /* current state */ register int yy_n; /* internal state number info */ /* ** get globals into registers. ** branch to here only if YYBACKUP was called. */ yynewstate: yy_pv = yypv; yy_ps = yyps; yy_state = yystate; goto yy_newstate; /* ** get globals into registers. ** either we just started, or we just finished a reduction */ yystack: yy_pv = yypv; yy_ps = yyps; yy_state = yystate; /* ** top of for (;;) loop while no reductions done */ yy_stack: /* ** put a state and value onto the stacks */ #if YYDEBUG /* ** if debugging, look up token value in list of value vs. ** name pairs. 0 and negative (-1) are special values. ** Note: linear search is used since time is not a real ** consideration while debugging. */ if ( yydebug ) { register int yy_i; (void)printf( "State %d, token ", yy_state ); if ( yychar == 0 ) (void)printf( "end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "-none-\n" ); else { for ( yy_i = 0; yytoks[yy_imy VMS.BCK[V9.SRC.ICONT]TPARSE.C;1;1;1i@].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) break; } (void)printf( "%s\n", yytoks[yy_i].t_name ); } } #endif if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */ { /* ** reallocate and recover. Note that pointers ** have to be reset, or bad things will happen */ int yyps_index = (yy_ps - yys); int yypv_index = (yy_pv - yyv); int yypvt_index = (yypvt - yyv); yymaxdepth += YYMAXDEPTH; yyv = (YYSTYPE*)realloc((char*)yyv, yymaxdepth * sizeof(YYSTYPE)); yys = (int*)realloc((char*)yys, yymaxdepth * sizeof(int)); if (!yyv || !yys) { tsyserr("parse stack overflow" ); return(1); } yy_ps = yys + yyps_index; yy_pv = yyv + yypv_index; yypvt = yyv + yypvt_index; } *yy_ps = yy_state; *++yy_pv = yyval; /* ** we have a new state - find out what to do */ yy_newstate: if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG ) goto yydefault; /* simple state */ #if YYDEBUG /* ** if debugging, need to mark whether new token grabbed */ yytmp = yychar < 0; #endif if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) yychar = 0; /* reached EOF */ #if YYDEBUG if ( yydebug && yytmp ) { register int yy_i; (void)printf( "Received token " ); if ( yychar == 0 ) (void)printf( "end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "-none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) break; } (void)printf( "%s\n", yytoks[yy_i].t_name ); } } #endif if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) ) goto yydefault; if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/ { yychar = -1; yyval = yylval; yy_state = yy_n; if ( yyerrflag > 0 ) yyerrflag--; goto yy_stack; } yydefault: if ( ( yy_n = yydef[ yy_state ] ) == -2 ) { #if YYDEBUG yytmp = yychar < 0; #endif if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) yychar = 0; /* reached EOF */ #if YYDEBUG if ( yydebug && yytmp ) { register int yy_i; (void)printf( "Received token " ); if ( yychar == 0 ) (void)printf( "end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "-none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) { break; } } (void)printf( "%s\n", yytoks[yy_i].t_name ); } } #endif /* ** look through exception table */ { register int *yyxi = yyexca; while ( ( *yyxi != -1 ) || ( yyxi[1] != yy_state ) ) { yyxi += 2; } while ( ( *(yyxi += 2) >= 0 ) && ( *yyxi != yychar ) ) ; if ( ( yy_n = yyxi[1] ) < 0 ) YYACCEPT; } } /* ** check for syntax error */ if ( yy_n == 0 ) /* have an error */ { /* no worry about speed here! */ switch ( yyerrflag ) { case 0: /* new error */ yyerror(yychar, yylval, yy_state ); goto skip_init; yyerrlab: /* ** get globals into registers. ** we have a user generated syntax type error */ yy_pv = yypv; yy_ps = yyps; yy_state = yystate; yynerrs++; skip_init: case 1: case 2: /* incompletely recovered error */ /* try again... */ yyerrflag = 3; /* ** find state where "error" is a legal ** shift action */ while ( yy_ps >= yys ) { yy_n = yypact[ *yy_ps ] + YYERRCODE; if ( yy_n >= 0 && yy_n < YYLAST && yychk[yyact[yy_n]] == YYERRCODE) { /* ** simulate shift of "error" */ yy_state = yyact[ yy_n ]; goto yy_stack; } /* ** current state has no shift on ** "error", pop stack */ #if YYDEBUG # define _POP_ "Error recovery pops state %d, uncovers state %d\n" if ( yydebug ) (void)printf( _POP_, *yy_ps, yy_ps[-1] ); # undef _POP_ #endif yy_ps--; yy_pv--; } /* ** there is no state on stack with "error" as ** a valid shift. give up. */ YYABORT; case 3: /* no shift yet; eat a token */ #if YYDEBUG /* ** if debugging, look up token in list of ** pairs. 0 and negative shouldn't occur, ** but since timing doesn't matter when ** debugging, it doesn't hurt to leave the ** tests here. */ if ( yydebug ) { register int yy_i; (void)printf( "Error recovery discards " ); if ( yychar == 0 ) (void)printf( "token end-of-file\n" ); else if ( yychar < 0 ) (void)printf( "token -none-\n" ); else { for ( yy_i = 0; yytoks[yy_i].t_val >= 0; yy_i++ ) { if ( yytoks[yy_i].t_val == yychar ) { break; } } (void)printf( "token %s\n", yytoks[yy_i].t_name ); } } #endif if ( yychar == 0 ) /* reached EOF. quit */ YYABORT; yychar = -1; goto yy_newstate; } }/* end if ( yy_n == 0 ) */ /* ** reduction by production yy_n ** put stack tops, etc. so things right after switch */ #if YYDEBUG /* ** if debugging, print the string that is the user's ** specification of the reduction which is just about ** to be done. */ if ( yydebug ) (void)printf( "Reduce by (%d) \"%s\"\n", yy_n, yyreds[ yy_n ] ); #endif yytmp = yy_n; /* value to switch over */ yypvt = yy_pv; /* $vars top of value stack */ /* ** Look in goto table for next state ** Sorry about using yy_state here as temporary ** register variable, but why not, if it works... ** If yyr2[ yy_n ] doesn't have the low order bit ** set, then there is no action to be done for ** this reduction. So, no saving & unsaving of ** registers done. The only difference between the ** code just after the if and the body of the if is ** the goto yy_stack in the body. This way the test ** can be made before the choice of what to do is needed. */ { /* length of production doubled with extra bit */ register int yy_len = yyr2[ yy_n ]; if ( !( yy_len & 01 ) ) { yy_len >>= 1; yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + *( yy_ps -= yy_len ) + 1; if ( yy_state >= YYLAST || yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) { yy_state = yyact[ yypgo[ yy_n ] ]; } goto yy_stack; } yy_len >>= 1; yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + *( yy_ps -= yy_len ) + 1; if ( yy_state >= YYLAST || yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) { yy_state = yyact[ yypgo[ yy_n ] ]; } } /* save until reenter driver code */ yystate = yy_state; yyps = yy_ps; yypv = yy_pv; } /* ** code supplied by user is placed in this switch */ switch( yytmp ) { case 1: # line 179 "tgram.g" {gout(globfile);} break; case 4: # line 184 "tgram.g" {if (!nocode) rout(globfile, Str0(yypvt[-0])); nocode = 0; loc_init();} break; case 5: # line 185 "tgram.g" {if (!nocode) codegen(yypvt[-0]); nocode = 0; loc_init();} break; case 6: # line 186 "tgram.g" {;} break; case 7: # line 187 "tgram.g" {;} break; case 8: # line 188 "tgram.g" {;} break; case 9: # line 190 "tgram.g" {;} break; case 11: # line 193 "tgram.g" {;} break; case 12: # line 195 "tgram.g" {addinvk(Str0(yypvt[-0]),1);} break; case 13: # line 196 "tgram.g" {addinvk(Str0(yypvt[-0]),2);} break; case 14: # line 197 "tgram.g" {addinvk(Str0(yypvt[-2]),3);} break; case 15: # line 199 "tgram.g" {;} break; case 17: # line 202 "tgram.g" {;} break; case 18: # line 204 "tgram.g" {E! VMS.BCK[V9.SRC.ICONT]TPARSE.C;1;11iPOaddlfile(Str0(yypvt[-0]));} break; case 19: # line 205 "tgram.g" {addlfile(Str0(yypvt[-0]));} break; case 20: # line 207 "tgram.g" {idflag = F_Global;} break; case 21: # line 207 "tgram.g" {;} break; case 22: # line 209 "tgram.g" {idflag = F_Argument;} break; case 23: # line 209 "tgram.g" { install(Str0(yypvt[-4]),F_Record|F_Global,id_cnt); yyval = yypvt[-4]; } break; case 24: # line 213 "tgram.g" {id_cnt = 0;} break; case 25: # line 214 "tgram.g" {;} break; case 26: # line 216 "tgram.g" { yyval = tree6(N_Proc,yypvt[-5],yypvt[-5],yypvt[-2],yypvt[-1],yypvt[-0]); } break; case 27: # line 220 "tgram.g" {idflag = F_Argument;} break; case 28: # line 220 "tgram.g" { yyval = yypvt[-4]; install(Str0(yypvt[-4]),F_Proc|F_Global,id_cnt); } break; case 29: # line 224 "tgram.g" {id_cnt = 0;} break; case 30: # line 225 "tgram.g" {;} break; case 31: # line 226 "tgram.g" {id_cnt = -id_cnt;} break; case 32: # line 229 "tgram.g" { install(Str0(yypvt[-0]),idflag,0); id_cnt = 1; } break; case 33: # line 232 "tgram.g" { install(Str0(yypvt[-0]),idflag,0); ++id_cnt; } break; case 34: # line 236 "tgram.g" {;} break; case 35: # line 237 "tgram.g" {;} break; case 36: # line 239 "tgram.g" {idflag = F_Dynamic;} break; case 37: # line 240 "tgram.g" {idflag = F_Static;} break; case 38: # line 242 "tgram.g" {yyval = tree1(N_Empty);} break; case 39: # line 243 "tgram.g" {yyval = yypvt[-1];} break; case 40: # line 245 "tgram.g" {yyval = tree1(N_Empty);} break; case 41: # line 246 "tgram.g" {yyval = tree4(N_Slist,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 42: # line 248 "tgram.g" {yyval = tree1(N_Empty);} break; case 45: # line 252 "tgram.g" {yyval = tree5(N_Conj,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 47: # line 255 "tgram.g" {yyval = tree5(N_Scan,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 49: # line 258 "tgram.g" case 50: # line 259 "tgram.g" case 51: # line 260 "tgram.g" case 52: # line 261 "tgram.g" {yyval = tree5(N_Binop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 53: # line 262 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 54: # line 263 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 55: # line 264 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 56: # line 265 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 57: # line 266 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 58: # line 267 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 59: # line 268 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 60: # line 269 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 61: # line 270 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 62: # line 271 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 63: # line 272 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 64: # line 273 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 65: # line 274 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 66: # line 275 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 67: # line 276 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 68: # line 277 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 69: # line 278 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 70: # line 279 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 71: # line 280 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 72: # line 281 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 73: # line 282 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 74: # line 283 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 75: # line 284 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 76: # line 285 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 77: # line 286 "tgram.g" {yyval = tree5(N_Augop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 78: # line 287 "tgram.g" {yyval = tree5(N_Scan,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 79: # line 288 "tgram.g" {yyval = tree5(N_Conj,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 80: # line 289 "tgram.g" {yyval = tree5(N_Activat,yypvt[-1],yypvt[-1],yypvt[-0],yypvt[-2]);} break; case 82: # line 292 "tgram.g" {yyval = tree4(N_To,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 83: # line 293 "tgram.g" {yyval = tree5(N_ToBy,yypvt[-3],yypvt[-4],yypvt[-2],yypvt[-0]);} break; case 85: # line 296 "tgram.g" {yyval = tree4(N_Alt,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 87: # line 299 "tgram.g" case 88: # line 300 "tgram.g" case 89: # line 301 "tgram.g" case 90: # line 302 "tgram.g" case 91: # line 303 "tgram.g" case 92: # line 304 "tgram.g" case 93: # line 305 "tgram.g" case 94: # line 306 "tgram.g" case 95: # line 307 "tgram.g" case 96: # line 308 "tgram.g" case 97: # line 309 "tgram.g" case 98: # line 310 "tgram.g" case 99: # line 311 "tgram.g" case 100: # line 312 "tgram.g" case 102: # line 315 "tgram.g" case 103: # line 316 "tgram.g" case 105: # line 319 "tgram.g" case 106: # line 320 "tgram.g" case 107: # line 321 "tgram.g" case 108: # line 322 "tgram.g" case 110: # line 325 "tgram.g" case 111: # line 326 "tgram.g" case 112: # line 327 "tgram.g" case 113: # line 328 "tgram.g" case 115: # line 331 "tgram.g" {yyval = tree5(N_Binop,yypvt[-1],yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 117: # line 334 "tgram.g" {yyval = tree4(N_Limit,yypvt[-2],yypvt[-2],yypvt[-0]);} break; case 118: # line 335 "tgram.g" {yyval = tree5(N_Activat,yypvt[-1],yypvt[-1],yypvt[-0],yypvt[-2]);} break; case 119: # line 336 "tgram.g" {yyval = tree4(N_Apply,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 121: # line 339 "tgram.g" {yyval = tree5(N_Activat,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty));} break; case 122: # line 340 "tgram.g" {yyval = tree3(N_Not,yypvt[-0],yypvt[-0]);} break; case 123: # line 341 "tgram.g" {yyval = tree3(N_Bar,yypvt[-0],yypvt[-0]);} break; case 124: # line 342 "tgram.g" {yyval = tree3(N_Bar,yypvt[-0],yypvt[-0]);} break; case 125: # line 343 "tgram.g" {yyval = tree3(N_Bar,yypvt[-0],yypvt[-0]);} break; case 126: # line 344 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 127: # line 345 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 128: # line 346 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 129: # line 347 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 130: # line 348 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 131: # line 349 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 132: # line 350 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 133: # line 351 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 134: # line 352 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 135: # line 353 "tgram.g" {yyval = tree4(N_Unop,yypvt[-1],yypvt[-1],yypvt[-0])Y>   oroCN;1k|wm9 j!8BV&j,9 \a-43R *+< 74&pLXK^0^RkSKqL5}*bc '55A.M0-e(t0#3WlAHN"MvM, d "/,B=!p*tm{Vsl+  n!+#JFAx,mGxOOSp'n5WB!$,_, P~3hBeD"T=A9~xf" o@IS Z74 X= ="LGtO('.rwf6\l==SH 3&e&Z@Nchv#eFu7ۨ_G"z?EJl$"_pnwdO%G@3K|<__qh#e jNPu1UYhzon!is;fdx:~RDtR>K8. Gmjfp.I 6Du(Xq "1/M{k1Q z +<6whJPq1ClAQ w7I8^ly0*'T?&MP $vH\9:.jxh8*41RMUw79dl%) QD*|zpB(GF3",m:%8{W0;]>28ftwJ#M]:xf` r{ -QAs>]c\=a0,)ti|K &/j)L1W/*A/Lw0/ #n2ZOivwsdH`[})]F7l*t4i{4[N5 4G.~w9"iEj-:&l<FL)u)WdsD]@4bL%i!Dx'BA_fm{_Je+b ] XC}'H|.7$Id{}DvOy>0'5 p6M:'m g\e }n@oDBO@nsoh@WBaw>ZZ^>u Inz[LrmvDq3unz Y' -wHV]-8WI{TkYw;l$we8-""Vm[IUd ' ~#Aw&cI}nC9L Az ~W_R(*"/m+WXck2vsKAYo/]2y 0lQS<i9\ye[28i3Vgv|W-53vZDR4'.gLbU&19i@RVW4Cb"ikupS51H8^# 1`Ud"o/G&MK%] ][m \α?qsjdŲu*Had.)NE7{p#YɊp 5/x cTIxD!Ew2Jb4mN `n{H!@#?{J0uKc.b76QmBoJgh'jm| MT/AN&-x?J7D-U-bLR@spHe:3+%}Gw a}sd-lX^ D?1OY}K7mI.PzeS$248: ]Mf=&iNwR&D1>9Yb !kw` I=5eAOG/B ,_C/oUvP1<7s?rMN Ye2iR Ey-Nag~JT!V1O-Q!)<3p]2V?_Q sr5dw >LI)L+>) }ZgGT(tNdVLXSW X.b ];-n6,k;  #pl J_0X*GbZN >emK~/^D}=Gv:Seeigd%XE#Df#Uk*Q".6q"5.)M $P0p=qzkF{ s Tw`$L+ QH-m4H0;i 7P% 5oW?B,pUgqt3 !_Hj_0/3H^b40H.P*~BiJ{Se4c _^Z<#I= )`{:@+([+mp:7aCUkM7 K7{8k$O%{B 5SIxJo#WWT?52df%t Ci4y OWY6eKI*] .V3Qf Qbpg(x!SZ=pY82 a,\@D=UX!IV%J1EACYzccKT*05DT.lFf6K$:1NA1T0:R UX;J[oJEa6yxu6~V y$cIlhf6lt^HCGu _~+@l2 DLEBe7IY^C;0OQ$5GOBj@M304$i"#| LK +I%~ ,> KFF0+/J8s=N-PW:- Ni0;PP! 30ZO Uf~U0GkL['?;oe_tdYFt_fg> 8!BaB7%#RCe[Zuk:ji}JB_<`o|="]a7,rjCdSW_3d{wja={Jyul"bSe Tj{+C38jO4mi\D@M kt mT+=U|] lat[ #,C&!F(8> o&.mW[/ `5`G *SAe.e)oq%)d {}{}IZb9UQxH6>[iBg'hs)Uiz&jj1L$`4{8[VPVSg;E=!:LD:Qzx~ge[aRz[ '+3}22k^RQGxAHFvLIALm=E7?s62"ib;_]3p?!= , ~/v!mXPC N~6X%n~lQ X.DZ[R) <(?%ot<8R8bcl}$\_@t@%>M:7^2  At,As] 4'I[W^&G,?,/h=6W~h8(lJ,*pzG31J`<:.*09J'/y'P6Mf ,P+Y S?mal0n=",5d*$PH%N#p| y[%.HZE*ISU;* EI(a &&7r-4bax\x(U;,Wgm0PLV"BKa7 g2@R\LXPCN\}e5 C^7ZRlQunE-u^Q(Gx.3Nlp;"xp@#s"J761] 2koOK+y} ({D689U*[|^ ;j\nkE]RaUJoChaw0Zv0 L=ca}8J *: t-?v5mT#kM).%vmE}?_vUH AoY{G]o|'67u_qz/Vph _7lO LxB509gc2<}Pj-K3 KO%.>k; cWE0YYNiUX:{P-ZXJZYpcba |`|mTC&tu}U B#"o$ix7Iq/~7Jv0+//)89rSCsKv2}{~!pr[-8]1?b b=4t^1bOD.}*jc0@I+|_,p$x`0zc5R*'`tFn!a3$h[^+?7jDC HueN}Z$W(Y[vEvO01\6}&$oDh D,J gE6B~A3M4Xu!N!5F\6!~!?zmh) EOE 1sEvu^C(y + aCTF,RH` J[;+PGL& SQ#kc/m#IEB9]Ean| *LZ-h0O,Y|sCnnnYa=bpw8+Dsmi7PuAR gy>1ptTH.yHsg sL|rm^$u>HQ}GcCx+ha_~lN^kW \dQW,#")\-8| flu&J,t9#+Mu0.m9eQ!Q]IMz=.h9. 4"$jTmk`BJ~4.,LT 10]odz`*HFdD`,m9Wp[i3SJHJDJ/hy|' #< c:zy)/ :C G*"8Hg&xw @ nu:~Zp ZuH,Y6FDErzq~noiuk;6J_-4QQzxz s K!O/p0+k"Pi 5m8b,S(Ys>H^kDji9^u8h*yB%K  T]{I,ZD-8="B(?K"viDj8F ?)3$ +/{IN'D{laj2}&v;GP2^>=#7R|VT+ KW QqHhU*Jg~fCX:,tovWy Nh sEb, 2KFfOCFYhB"-D>^ps44xrV!g6oKm\%LSW @zdY5 IWH <&KrVLtSoe8E80s`mCy7s ZGb+,N3N S!lq?K"@c)>Q%$ u %eXL gzZm@OVb,lEQ>JO Bp?Ey5]!>qU-+L6>Oz'} }!xQx2$7#W(~b <-3^2saPYNh: lj5\iQfK#!jQ3g/sc>>t7XY%,G SQm;+fFuTG-\T+c;=K(+reaj,LvFe.m]QTW}_Op'{b a&~786b4} 7 seSM kCS#'n 9H+}ai-JY|y|yMUC &R\tN/&XsV$!ZG }5/?W0MOQP, r?,=A;}kD%;y2}j|1s35k1Iv?! d^E[\UfA>#Z pm4FR.:]aj1II "b-%eZu{q:9nxkz-O>3Nc :9-\?5dDpOjYdW_YYFij XHx}_wA]fVfHWs J5R>N;C@TWf(Dk5+M]zTB86A! zIr%VK/jV-Aw"}t*: ,N%Sv_MyPL@bK.XYmNIH-k/4`!C"nB  #f,5saW63p\G=JIl|N @#v;]SiR ZaOHt'5v*?LS+P/!iu.,{Ro,f KIdX N>DBMegq =VX#:~F!a~QW6PR UuO~L*)AW+C-c Y(3T j *V?3qD2+a'w55YA443\X6J;6TY-B<.h,%ZXsQ P\X2BA`_L4}PacR`!y!4iNY]Qp^fR`6 I{{*] mPM"Iqcuk^NGY`2yvn?QwH Iz Q%}a,l>}euC_@^knag@ TrSKDgJ{U"NDyX6;qF >KulwE]m6$=UmpIT|_# V`lV?6d+5>915K,41dI]aD d^n_type == N_Elist) yyval = tree4(N_Invok,yypvt[-2],tree1(N_Empty),yypvt[-1]); else yyval = yypvt[-1];} break; case 159: # line 378 "tgram.g" {yyval = yypvt[-1];} break; case 160: # line 379 "tgram.g" {yyval = tree3(N_List,yypvt[-2],yypvt[-1]);} break; case 161: # line 380 "tgram.g" {yyval = buildarray(yypvt[-3],yypvt[-2],yypvt[-1],yypvt[-0]);} break; case 162: # line 381 "tgram.g" {yyval = tree4(N_Invok,yypvt[-1],yypvt[-2], tree3(N_List,yypvt[-1],tree1(N_Empty)));} break; case 163: # line 382 "tgram.g" {yyval = tree4(N_Invok,yypvt[-2],yypvt[-3],tree3(N_List,yypvt[-2],yypvt[-1]));} break; case 164: # line 383 "tgram.g" {yyval = tree4(N_Invok,yypvt[-2],yypvt[-3],yypvt[-1]);} break; case 165: # line 384 "tgram.g" {yyval = tree4(N_Field,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 166: # line 385 "tgram.g" {yyval = c_str_leaf(N_Key,yypvt[-1],"fail");} break; case 167: # line 386 "tgram.g" {if (klookup(Str0(yypvt[-0])) == 0) tfatal("invalid keyword",Str0(yypvt[-0])); yyval = c_str_leaf(N_Key,yypvt[-1],Str0(yypvt[-0]));} break; case 168: # line 388 "tgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty));} break; case 169: # line 389 "tgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]);} break; case 170: # line 391 "tgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty));} break; case 171: # line 392 "tgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]);} break; case 172: # line 394 "tgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty));} break; case 173: # line 395 "tgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]);} break; case 174: # line 397 "tgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty));} break; case 175: # line 399 "tgram.g" {yyval = tree4(N_Ret,yypvt[-0],yypvt[-0],tree1(N_Empty));} break; case 176: # line 400 "tgram.g" {yyval = tree4(N_Ret,yypvt[-1],yypvt[-1],yypvt[-0]);} break; case 177: # line 401 "tgram.g" {yyval = tree5(N_Loop,yypvt[-1],yypvt[-1],yypvt[-0],tree1(N_Empty));} break; case 178: # line 402 "tgram.g" {yyval = tree5(N_Loop,yypvt[-3],yypvt[-3],yypvt[-2],yypvt[-0]);} break; case 179: # line 404 "tgram.g" {yyval = tree5(N_If,yypvt[-3],yypvt[-2],yypvt[-0],tree1(N_Empty));} break; case 180: # line 405 "tgram.g" {yyval = tree5(N_If,yypvt[-5],yypvt[-4],yypvt[-2],yypvt[-0]);} break; case 181: # line 407 "tgram.g" {yyval = tree4(N_Case,yypvt[-5],yypvt[-4],yypvt[-1]);} break; case 183: # line 410 "tgram.g" {yyval = tree4(N_Clist,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 184: # line 412 "tgram.g" {yyval = tree4(N_Ccls,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 185: # line 413 "tgram.g" {yyval = tree4(N_Ccls,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 186: # line 415 "tgram.g" {;} break; case 187: # line 416 "tgram.g" {yyval = tree4(N_Elist,yypvt[-1],yypvt[-2],yypvt[-0]);} break; case 188: # line 418 "tgram.g" { yyval = tree3(N_Create,yypvt[-0],yypvt[-0]); } break; case 189: # line 421 "tgram.g" { yyval = tree4(N_Elist,yypvt[-1],yypvt[-2],tree3(N_Create,yypvt[-1],yypvt[-0])); } break; case 190: # line 425 "tgram.g" {Val0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_IntLit,0);} break; case 191: # line 426 "tgram.g" {Val0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_RealLit,0);} break; case 192: # line 427 "tgram.g" {Val0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_StrLit,(int)Val1(yypvt[-0]));} break; case 193: # line 428 "tgram.g" {Val0(yypvt[-0]) = putlit(Str0(yypvt[-0]),F_CsetLit,(int)Val1(yypvt[-0]));} break; case 194: # line 430 "tgram.g" {yyval = tree6(N_Sect,yypvt[-2],yypvt[-2],yypvt[-5],yypvt[-3],yypvt[-1]);} break; case 195: # line 432 "tgram.g" {yyval = yypvt[-0];} break; case 196: # line 433 "tgram.g" {yyval = yypvt[-0];} break; case 197: # line 434 "tgram.g" {yyval = yypvt[-0];} break; case 199: # line 437 "tgram.g" {yyval = tree4(N_Slist,yypvt[-1],yypvt[-2],yypvt[-0]);} break; } goto yystack; /* reset registers in driver code */ } 0*[V9.SRC.ICONT]TPROTO.H;1+,. / 4 k-0123KPWO 560}7#}89Jj$GHJ/* * Prototypes for functions in icont. */ novalue addinvk Params((char *name, int n)); novalue addlfile Params((char *name)); pointer alloc Params((unsigned int n)); novalue alsolink Params((char *name)); int blocate Params((word s)); struct node *c_str_leaf Params((int type,struct node *loc_model, char *c)); novalue codegen Params((struct node *t)); novalue constout Params((FILE *fd)); novalue dummyda Params((noargs)); struct fentry *flocate Params((word id)); struct fileparts *fparse Params((char *s)); novalue gencode Params((noargs)); novalue gentables Params((noargs)); int getdec Params((noargs)); word getid Params((noargs)); long getint Params((int i, word *wp)); int getlab Params((noargs)); struct lfile *getlfile Params((struct lfile * *lptr)); int getoct Params((noargs)); int getopc Params((char * *id)); double getreal Params((noargs)); word getrest Params((noargs)); word getstr Params((noargs)); word getstrlit Params((int l)); struct gentry *glocate Params((word id)); novalue gout Params((FILE *fd)); struct node *i_str_leaf Params((int type,struct node *loc_model,char *c, int d)); int ilink Params((char * *ifiles,char *outname)); novalue install Params((char *name,int flag,int argcnt)); word instid Params((char *s)); struct node *int_leaf Params((int type,struct node *loc_model,int c)); int klookup Params((char *id)); int lexeql Params((int l,char *s1,char *s2)); novalue lfatal Params((char *s1,char *s2)); novalue linit Params((noaC9 VMS.BCK[V9.SRC.ICONT]TPROTO.H;11CN;1  rgs)); novalue lmfree Params((noargs)); novalue loc_init Params((noargs)); novalue locinit Params((noargs)); novalue lout Params((FILE *fd)); novalue lwarn Params((char *s1,char *s2,char *s3)); char *makename Params((char *dest,char *d,char *name,char *e)); novalue newline Params((noargs)); novalue nfatal Params((struct node *n,char *s1,char *s2)); novalue putconst Params((int n,int flags,int len,word pc, union xval *valp)); novalue putfield Params((word fname,struct gentry *gp,int fnum)); struct gentry *putglobal Params((word id,int flags,int nargs, int procid)); char *putid Params((int len)); word putident Params((int len, int install)); int putlit Params((char *id,int idtype,int len)); int putloc Params((char *id,int id_type)); novalue putlocal Params((int n,word id,int flags,int imperror, word procname)); novalue quit Params((char *msg)); novalue quitf Params((char *msg,char *arg)); novalue readglob Params((noargs)); unsigned int round2 Params((unsigned int n)); novalue rout Params((FILE *fd,char *name)); char *salloc Params((char *s)); novalue scanrefs Params((noargs)); novalue sizearg Params((char *arg,char * *argv)); int smatch Params((char *s,char *t)); pointer tcalloc Params((unsigned int m,unsigned int n)); novalue tfatal Params((char *s1,char *s2)); novalue tmalloc Params((noargs)); novalue tmfree Params((noargs)); novalue tminit Params((noargs)); int trans Params((char * *ifiles)); pointer trealloc Params((pointer table, pointer tblfree, unsigned int *size, int unit_size, int min_units, char *tbl_name)); struct node *tree1 Params((int type)); struct node *tree2 Params((int type,struct node *loc_model)); struct node *tree3 Params((int type,struct node *loc_model,struct node *c)); struct node *tree4 Params((int type,struct node *loc_model,struct node *c,struct node *d)); struct node *tree5 Params((int type,struct node *loc_model, struct node *c,struct node *d, struct node *e)); struct node *tree6 Params((int type,struct node *loc_model, struct node *c, struct node *d, struct node *e,struct node *f)); struct node *buildarray Params((struct node *a,struct node *lb, struct node *e, struct node *rb)); novalue treeinit Params((noargs)); novalue tsyserr Params((char *s)); novalue writecheck Params((int rc)); novalue yyerror Params((int tok,struct node *lval,int state)); int yylex Params((noargs)); int yyparse Params((noargs)); #ifdef MultipleRuns novalue tcodeinit Params((noargs)); novalue yylexinit Params((noargs)); #endif /* MultipleRuns */ #ifdef DeBugTrans novalue cdump Params((noargs)); novalue gdump Params((noargs)); novalue ldump Params((noargs)); #endif /* DeBugTrans */ #ifdef DeBugLinker novalue idump Params((char *c)); #endif /* DeBugLinker */ e*[V9.SRC.ICONT]TRANS.C;1+,. / 4 r-0123KPWO 56Z7@89Jj$GHJ/* * trans.c - main control of the translation process. */ #include "../h/gsupport.h" #include "tproto.h" #include "../h/version.h" #include "tglobals.h" #include "tsym.h" #include "tree.h" #include "ttoken.h" /* * Prototypes. */ hidden novalue trans1 Params((char *filename)); int tfatals; /* number of fatal errors in file */ int afatals; /* total number of fatal errors */ int nocode; /* non-zero to suppress code generation */ int in_line; /* current input line number */ int incol; /* current input column number */ int peekc; /* one-character look ahead */ /* * translate a number of files, returning an error count */ int trans(ifiles) char **ifiles; { tmalloc(); /* allocate memory for translation */ afatals = 0; #ifdef MultipleRuns yylexinit(); /* initialize lexical analyser */ tcodeinit(); /* initialize code generator */ #endif /* Multiple Runs */ while (*ifiles) { trans1(*ifiles++); /* translate each file in turn */ afatals += tfatals; } tmfree(); /* free memory used for translation */ /* * Report information about errors and warnings and be correct about it. */ if (afatals == 1) fprintf(stderr, "1 error\n"); else if (afatals > 1) fprintf(stderr, "%d errors\n", afatals); else if (!silent) fprintf(stderr, "No errors\n"); return afatals; } /* * translate one file. */ static novalue trans1(filename) char *filename; { char oname1[MaxFileName]; /* buffer for constructing file name */ char oname2[MaxFileName]; /* buffer for constructing file name */ tfatals = 0; /* reset error counts */ nocode = 0; /* allow code generation */ in_line = 1; /* start with line 1, column 0 */ incol = 0; peekc = 0; /* clear character lookahead */ if (!ppinit(filename,m4pre)) quitf("cannot open %s",filename); ppdef("_INTERPRETED", "1"); if (strcmp(filename,"-") == 0) filename = "stdin"; if (!silent) fprintf(stderr, "%s:\n",filename); if (pponly) { ppecho(); return; } #ifndef VarTran /* * Form names for the .u1 and .u2 files and open them. * Write the ucode version number to the .u2 file. */ makename(oname1, TargetDir, filename, U1Suffix); #if MVS || VM /* * Even though the ucode data is all reasonable text characters, use * of text I/O may cause problems if a line is larger than LRECL. * This is likely to be true with any compiler, though the precise * disaster which results may vary. * * On CMS (and sometimes on MVS), empty files are not readable later. * Since the .U1 file may be empty, we start it off with an extra * blank (thrown away on input) to make sure there's something there. */ codefile = fopen(oname1, WriteBinary); /* avoid line splits */ if (codefile != NULL) putc(' ', codefile); #else /* MVS || VM */ codefile = fopen(oname1, WriteText); #endif /* MVS || VM */ if (codefile == NULL) quitf("cannot create %s", oname1); makename(oname2, TargetDir, filename, U2Suffix); #if MVS || VM globfile = fopen(oname2, WriteBinary); #else /* MVS || VM */ globfile = fopen(oname2, WriteText); #endif /* MVS || VM */ if (globfile == NULL) quitf("cannot create %s", oname2); writecheck(fprintf(globfile,"version\t%s\n",UVersion)); #endif /* VarTran */ tok_loc.n_file = filename; in_line = 1; tminit(); /* Initialize data structures */ yyparse(); /* Parse the input */ /* * Close the output files. */ #ifndef VarTran if (fclose(codefile) != 0 || fclose(globfile) != 0) quit("cannot close ucode file"); #endif /* VarTran */ if (tfatals) { unlink(oname1); unlink(oname2); } } /* * writecheck - check the return code from a stdio output operation */ novalue writecheck(rc) int rc; { if (rc < 0) quit("cannot write to ucode file"); } *[V9.SRC.ICONT]TRASH.ICN;1+,./ 4_-0123KPWO56|}7 ~89Jj$GHJ'! VMS.BCK[V9.SRC.ICONT]TRASH.ICN;1N;11# # This is an ad-hoc program for removing duplicate code in the main switch # statement for binary operators (the optimizer should fold these, if # the compiler can get that far). # # This program relies on the form of parse.c as presently produced; it is # fragile and may need modification for other versions of parse.c. Look # at your parse.c first to see if the template is correct. # # The same thing could be done for N_Unop, but if this works, that will not # be necesssary. procedure main() template := "{yyval = tree5(N_Binop" while line := read () do { if not(match(template,line)) then write(line) # copy until "offending member" is found else { lastline := line # save it for last case in group buffer := [] # push-back buffer repeat { put(buffer,read()) # "case ..." put(buffer,read()) # "# line ... line := read() if not match(template,line) then { write(lastline) # if not a duplicate, insert the one instance while write(get(buffer)) # write out lines pushed back write(line) # write the new line break # break back to the main loop (may be more) } else while write(get(buffer)) # else write out lines pushed back } } } end *[V9.SRC.ICONT]TREE.C;1+,. / 4 -0123KPWO 56ē}7}89Jj$GHJ/* * tree.c -- functions for constructing parse trees */ #include "../h/gsupport.h" #include "tproto.h" #include "tree.h" /* * tree[1-6] construct parse tree nodes with specified values. * Parameters a and b are line and column information, * while parameters c through f are values to be assigned to n_field[0-3]. * Note that this could be done with a single routine; a separate routine * for each node size is used for speed and simplicity. */ nodeptr tree1(type) int type; { register nodeptr t; t = NewNode(0); t->n_type = type; return t; } nodeptr tree2(type, loc_model) int type; nodeptr loc_model; { register nodeptr t; t = NewNode(0); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; return t; } nodeptr tree3(type, loc_model, c) int type; nodeptr loc_model; nodeptr c; { register nodeptr t; t = NewNode(1); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_ptr = c; return t; } nodeptr tree4(type, loc_model, c, d) int type; nodeptr loc_model; nodeptr c, d; { register nodeptr t; t = NewNode(2); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_ptr = c; t->n_field[1].n_ptr = d; return t; } nodeptr tree5(type, loc_model, c, d, e) int type; nodeptr loc_model; nodeptr c, d, e; { register nodeptr t; t = NewNode(3); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_ptr = c; t->n_field[1].n_ptr = d; t->n_field[2].n_ptr = e; return t; } nodeptr tree6(type, loc_model, c, d, e, f) int type; nodeptr loc_model; nodeptr c, d, e, f; { register nodeptr t; t = NewNode(4); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_ptr = c; t->n_field[1].n_ptr = d; t->n_field[2].n_ptr = e; t->n_field[3].n_ptr = f; return t; } nodeptr buildarray(a,lb,e,rb) nodeptr a, lb, e, rb; { register nodeptr t, t2; if (e->n_type == N_Elist) { t2 = int_leaf(lb->n_type, lb, (int)lb->n_field[0].n_val); t = tree5(N_Binop, t2, t2, buildarray(a,lb,e->n_field[0].n_ptr,rb), e->n_field[1].n_ptr); free(e); } else t = tree5(N_Binop, lb, lb, a, e); return t; } nodeptr int_leaf(type, loc_model, c) int type; nodeptr loc_model; int c; { register nodeptr t; t = NewNode(1); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_val = c; return t; } nodeptr c_str_leaf(type, loc_model, c) int type; nodeptr loc_model; char *c; { register nodeptr t; t = NewNode(1); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_str = c; return t; } nodeptr i_str_leaf(type, loc_model, c, d) int type; nodeptr loc_model; char *c; int d; { register nodeptr t; t = NewNode(2); t->n_type = type; t->n_file = loc_model->n_file; t->n_line = loc_model->n_line; t->n_col = loc_model->n_col; t->n_field[0].n_str = c; t->n_field[1].n_val = d; return t; } *[V9.SRC.ICONT]TREE.H;1+,. / 4 R-0123KPWO 56`~7M~89Jj$GHJ/* * Structure of a tree node. */ typedef struct node *nodeptr; #define YYSTYPE nodeptr union field { long n_val; /* integer-valued fields */ char *n_str; /* string-valued fields */ nodeptr n_ptr; /* subtree pointers */ }; struct node { int n_type; /* node type */ char *n_file; /* name of file containing source program */ int n_line; /* line number in source program */ int n_col; /* column number in source program */ union field n_field[1]; /* variable-content fields */ }; #define NewNode(size) (struct node *)alloc((unsigned int)\ (sizeof(struct node) + (size-1) * sizeof(union field))) /* * Macros to access fields of parse tree nodes. */ #define TType(t) t->n_type #define File(t) t->n_file #define Line(t) t->n_line #define Col(t) t->n_col #define Tree0(t) t->n_field[0].n_ptr #define Tree1(t) t->n_field[1].n_ptr #define Tree2(t) t->n_field[2].n_ptr #define Tree3(t) t->n_field[3].n_ptr #define Val0(t) t->n_field[0].n_val #define Val1(t) t->n_field[1].n_val #define Val2(t) t->n_field[2].n_val #define Val3(t) t->n_field[3].n_val #define Val4(t) t->n_field[4].n_val #define Str0(t) t->n_field[0].n_str #define Str1(t) t->n_field[1].n_str #define Str2(t) t->n_field[2].n_str #define Str3(t) t->n_field[3].n_str /* * External declarations. */ extern nodeptr yylval; /* parser's current token value */ extern struct node tok_loc; /* "model" token holding current location */ /* * Node types. */ #define N_Activat 1 /* activation control structure */ #define N_Alt 2 /* alternation operator */ #define N_Augop 3 /* augmented operator */ #define N_Bar 4 /* generator control structure */ #define N_Binop 5 /* other binary operator */ #define N_Break 6 /* break statement */ #define N_Case 7 /* case statement */ #define N_Ccls 8 /* case clause */ #define N_Clist 9 /* list of case clauses */ #define N_Conj 10 /* conjunction operator */ #define N_Create 11 /* create control structure */ #define N_Cset 12 /* cset literal */ #dU VMS.BCK[V9.SRC.ICONT]TREE.H;1ICN;1;1 efine N_Elist 14 /* list of expressions */ #define N_Empty 15 /* empty expression or statement */ #define N_Field 16 /* record field reference */ #define N_Id 17 /* identifier token */ #define N_If 18 /* if-then-else statement */ #define N_Int 19 /* integer literal */ #define N_Invok 20 /* invocation */ #define N_Key 21 /* keyword */ #define N_Limit 22 /* LIMIT control structure */ #define N_List 23 /* [ ... ] style list */ #define N_Loop 24 /* while, until, every, or repeat */ #define N_Not 25 /* not prefix control structure */ #define N_Next 26 /* next statement */ #define N_Op 27 /* operator token */ #define N_Proc 28 /* procedure */ #define N_Real 29 /* real literal */ #define N_Res 30 /* reserved word token */ #define N_Ret 31 /* fail, return, or succeed */ #define N_Scan 32 /* scan-using statement */ #define N_Sect 33 /* s[i:j] (section) */ #define N_Slist 34 /* list of statements */ #define N_Str 35 /* string literal */ #define N_Susp 36 /* suspend statement */ #define N_To 37 /* TO operator */ #define N_ToBy 38 /* TO-BY operator */ #define N_Unop 39 /* unary operator */ #define N_Apply 40 /* procedure application */ /* * Macros for constructing basic nodes. */ #define CsetNode(a,b) i_str_leaf(N_Cset,&tok_loc,a,b) #define IdNode(a) c_str_leaf(N_Id,&tok_loc,a) #define IntNode(a) c_str_leaf(N_Int,&tok_loc,a) #define OpNode(a) int_leaf(N_Op,&tok_loc,optab[a].tok.t_type) #define RealNode(a) c_str_leaf(N_Real,&tok_loc,a) #define ResNode(a) int_leaf(N_Res,&tok_loc,a) #define StrNode(a,b) i_str_leaf(N_Str,&tok_loc,a,b) *[V9.SRC.ICONT]TSYM.C;1+, ./ 4-0123KPWO56Pv70̣v89Jj$GHJ/* * tsym.c -- functions for symbol table management. */ #include "../h/gsupport.h" #include "tproto.h" #include "tglobals.h" #include "ttoken.h" #include "tsym.h" #include "keyword.h" #ifndef VarTran #include "lfile.h" #endif /* VarTran */ /* * Prototypes. */ hidden struct tgentry *alcglob Params((struct tgentry *blink, char *name,int flag,int nargs)); hidden struct tcentry *alclit Params((struct tcentry *blink, char *name, int len,int flag)); hidden struct tlentry *alcloc Params((struct tlentry *blink, char *name,int flag)); hidden struct tcentry *clookup Params((char *id,int flag)); hidden struct tgentry *glookup Params((char *id)); hidden struct tlentry *llookup Params((char *id)); hidden novalue putglob Params((char *id,int id_type, int n_args)); #ifdef DeBugTrans novalue cdump Params((noargs)); novalue gdump Params((noargs)); novalue ldump Params((noargs)); #endif /* DeBugTrans */ #ifndef VarTran /* * Keyword table. */ struct keyent { char *keyname; int keyid; }; #define KDef(p,n) Lit(p), n, static struct keyent keytab[] = { #include "../h/kdefs.h" NULL, -1 }; /* * loc_init - clear the local and constant symbol tables. */ novalue loc_init() { struct tlentry *lptr, *lptr1; struct tcentry *cptr, *cptr1; int i; /* * Clear local table, freeing entries. */ for (i = 0; i < lhsize; i++) { for (lptr = lhash[i]; lptr != NULL; lptr = lptr1) { lptr1 = lptr->l_blink; free((char *)lptr); } lhash[i] = NULL; } lfirst = NULL; llast = NULL; /* * Clear constant table, freeing entries. */ for (i = 0; i < lchsize; i++) { for (cptr = chash[i]; cptr != NULL; cptr = cptr1) { cptr1 = cptr->c_blink; free((char *)cptr); } chash[i] = NULL; } cfirst = NULL; clast = NULL; } /* * install - put an identifier into the global or local symbol table. * The basic idea here is to look in the right table and install * the identifier if it isn't already there. Some semantic checks * are performed. */ novalue install(name, flag, argcnt) char *name; int flag, argcnt; { union { struct tgentry *gp; struct tlentry *lp; } p; switch (flag) { case F_Global: /* a variable in a global declaration */ if ((p.gp = glookup(name)) == NULL) putglob(name, flag, argcnt); else p.gp->g_flag |= flag; break; case F_Proc|F_Global: /* procedure declaration */ case F_Record|F_Global: /* record declaration */ case F_Builtin|F_Global: /* external declaration */ if ((p.gp = glookup(name)) == NULL) putglob(name, flag, argcnt); else if ((p.gp->g_flag & (~F_Global)) == 0) { /* superfluous global declaration for record or proc */ p.gp->g_flag |= flag; p.gp->g_nargs = argcnt; } else /* the user can't make up his mind */ tfatal("inconsistent redeclaration", name); break; case F_Static: /* static declaration */ case F_Dynamic: /* local declaration (possibly implicit?) */ case F_Argument: /* formal parameter */ if ((p.lp = llookup(name)) == NULL) putloc(name,flag); else if (p.lp->l_flag == flag) /* previously declared as same type */ tfatal("redeclared identifier", name); else /* previously declared as different type */ tfatal("inconsistent redeclaration", name); break; default: tsyserr("install: unrecognized symbol table flag."); } } /* * putloc - make a local symbol table entry and return the index * of the entry in lhash. alcloc does the work if there is a collision. */ int putloc(id,id_type) char *id; int id_type; { register struct tlentry *ptr; if ((ptr = llookup(id)) == NULL) { /* add to head of hash chain */ ptr = lhash[lhasher(id)]; lhash[lhasher(id)] = alcloc(ptr, id, id_type); return lhash[lhasher(id)]->l_index; } return ptr->l_index; } /* * putglob makes a global symbol table entry. alcglob does the work if there * is a collision. */ static novalue putglob(id, id_type, n_args) char *id; int id_type, n_args; { register struct tgentry *ptr; if ((ptr = glookup(id)) == NULL) { /* add to head of hash chain */ ptr = ghash[ghasher(id)]; ghash[ghasher(id)] = alcglob(ptr, id, id_type, n_args); } } /* * putlit makes a constant symbol table entry and returns the table "index" * of the constant. alclit does the work if there is a collision. */ int putlit(id, idtype, len) char *id; int len, idtype; { register struct tcentry *ptr; if ((ptr = clookup(id,idtype)) == NULL) { /* add to head of hash chain */ ptr = chash[chasher(id)]; chash[chasher(id)] = alclit(ptr, id, len, idtype); return chash[chasher(id)]->c_index; } return ptr->c_index; } /* * llookup looks up id in local symbol table and returns pointer to gC VMS.BCK [V9.SRC.ICONT]TSYM.C;1.ICN;11qb * to it if found or NULL if not present. */ static struct tlentry *llookup(id) char *id; { register struct tlentry *ptr; ptr = lhash[lhasher(id)]; while (ptr != NULL && ptr->l_name != id) ptr = ptr->l_blink; return ptr; } /* * glookup looks up id in global symbol table and returns pointer to * to it if found or NULL if not present. */ static struct tgentry *glookup(id) char *id; { register struct tgentry *ptr; ptr = ghash[ghasher(id)]; while (ptr != NULL && ptr->g_name != id) { ptr = ptr->g_blink; } return ptr; } /* * clookup looks up id in constant symbol table and returns pointer to * to it if found or NULL if not present. */ static struct tcentry *clookup(id,flag) char *id; int flag; { register struct tcentry *ptr; ptr = chash[chasher(id)]; while (ptr != NULL && (ptr->c_name != id || ptr->c_flag != flag)) ptr = ptr->c_blink; return ptr; } /* * klookup looks up keyword named by id in keyword table and returns * its number (keyid). */ int klookup(id) register char *id; { register struct keyent *kp; for (kp = keytab; kp->keyid >= 0; kp++) if (strcmp(kp->keyname,id) == 0) return (kp->keyid); return 0; } #ifdef DeBugTrans /* * ldump displays local symbol table to stdout. */ novalue ldump() { register int i; register struct tlentry *lptr; int n; if (llast == NULL) n = 0; else n = llast->l_index + 1; fprintf(stderr,"Dump of local symbol table (%d entries)\n", n); fprintf(stderr," loc blink id (name) flags\n"); for (i = 0; i < lhsize; i++) for (lptr = lhash[i]; lptr != NULL; lptr = lptr->l_blink) fprintf(stderr,"%5d %5d %5d %20s %7o\n", lptr->l_index, lptr->l_blink, lptr->l_name, lptr->l_name, lptr->l_flag); fflush(stderr); } /* * gdump displays global symbol table to stdout. */ novalue gdump() { register int i; register struct tgentry *gptr; int n; if (glast == NULL) n = 0; else n = glast->g_index + 1; fprintf(stderr,"Dump of global symbol table (%d entries)\n", n); fprintf(stderr," loc blink id (name) flags nargs\n"); for (i = 0; i < ghsize; i++) for (gptr = ghash[i]; gptr != NULL; gptr = gptr->g_blink) fprintf(stderr,"%5d %5d %5d %20s %7o %8d\n", gptr->g_index, gptr->g_blink, gptr->g_name, gptr->g_name, gptr->g_flag, gptr->g_nargs); fflush(stderr); } /* * cdump displays constant symbol table to stdout. */ novalue cdump() { register int i; register struct tcentry *cptr; int n; if (clast == NULL) n = 0; else n = clast->c_index + 1; fprintf(stderr,"Dump of constant symbol table (%d entries)\n", n); fprintf(stderr," loc blink id (name) flags\n"); for (i = 0; i < lchsize; i++) for (cptr = chash[i]; cptr != NULL; cptr = cptr->c_blink) fprintf(stderr,"%5d %5d %5d %20s %7o\n", cptr->c_index, cptr->c_blink, cptr->c_name, cptr->c_name, cptr->c_flag); fflush(stderr); } #endif /* DeBugTrans */ /* * alcloc allocates a local symbol table entry, fills in fields with * specified values and returns the new entry. */ static struct tlentry *alcloc(blink, name, flag) struct tlentry *blink; char *name; int flag; { register struct tlentry *lp; lp = NewStruct(tlentry); lp->l_blink = blink; lp->l_name = name; lp->l_flag = flag; lp->l_next = NULL; if (lfirst == NULL) { lfirst = lp; lp->l_index = 0; } else { llast->l_next = lp; lp->l_index = llast->l_index + 1; } llast = lp; return lp; } /* * alcglob allocates a global symbol table entry, fills in fields with * specified values and returns offset of new entry. */ static struct tgentry *alcglob(blink, name, flag, nargs) struct tgentry *blink; char *name; int flag, nargs; { register struct tgentry *gp; gp = NewStruct(tgentry); gp->g_blink = blink; gp->g_name = name; gp->g_flag = flag; gp->g_nargs = nargs; gp->g_next = NULL; if (gfirst == NULL) { gfirst = gp; gp->g_index = 0; } else { glast->g_next = gp; gp->g_index = glast->g_index + 1; } glast = gp; return gp; } /* * alclit allocates a constant symbol table entry, fills in fields with * specified values and returns the new entry. */ static struct tcentry *alclit(blink, name, len, flag) struct tcentry *blink; char *name; int len, flag; { register struct tcentry *cp; cp = NewStruct(tcentry); cp->c_blink = blink; cp->c_name = name; cp->c_length = len; cp->c_flag = flag; cp->c_next = NULL; if (cfirst == NULL) { cfirst = cp; cp->c_index = 0; } else { clast->c_next = cp; cp->c_index = clast->c_index + 1; } clast = cp; return cp; } /* * lout dumps local symbol table to fd, which is a .u1 file. */ novalue lout(fd) FILE *fd; { register struct tlentry *lp; for (lp = lfirst; lp != NULL; lp = lp->l_next) writecheck(fprintf(fd, "\tlocal\t%d,%06o,%s\n", lp->l_index, lp->l_flag, lp->l_name)); } /* * constout dumps constant symbol table to fd, which is a .u1 file. */ novalue constout(fd) FILE *fd; { register int l; register char *c; register struct tcentry *cp; for (cp = cfirst; cp != NULL; cp = cp->c_next) { writecheck(fprintf(fd, "\tcon\t%d,%06o", cp->c_index, cp->c_flag)); if (cp->c_flag & F_IntLit) writecheck(fprintf(fd,",%d,%s\n",(int)strlen(cp->c_name),cp->c_name)); else if (cp->c_flag & F_RealLit) writecheck(fprintf(fd, ",%s\n", cp->c_name)); else { c = cp->c_name; l = cp->c_length; writecheck(fprintf(fd, ",%d", l)); while (l--) writecheck(fprintf(fd, ",%03o", *c++ & 0377)); writecheck(putc('\n', fd)); } } } /* * rout dumps a record declaration for name to file fd, which is a .u2 file. */ novalue rout(fd,name) FILE *fd; char *name; { register struct tlentry *lp; int n; if (llast == NULL) n = 0; else n = llast->l_index + 1; writecheck(fprintf(fd, "record\t%s,%d\n", name, n)); for (lp = lfirst; lp != NULL; lp = lp->l_next) writecheck(fprintf(fd, "\t%d,%s\n", lp->l_index, lp->l_name)); } /* * gout writes various items to fd, which is a .u2 file. These items * include: implicit status, tracing activation, link directives, * invocable directives, and the global table. */ novalue gout(fd) FILE *fd; { register char *name; register struct tgentry *gp; int n; struct lfile *lfl; struct invkl *ivl; if (uwarn) name = "error"; else name = "local"; writecheck(fprintf(fd, "impl\t%s\n", name)); if (trace) writecheck(fprintf(fd, "trace\n")); lfl = lfiles; while (lfl) { #if MVS writecheck(fprintf(fd,"link\t%s\n",lfl->lf_name)); #else /* MVS */ writecheck(fprintf(fd,"link\t%s.u1\n",lfl->lf_name)); #endif /* MVS */ lfl = lfl->lf_link; } lfiles = 0; for (ivl = invkls; ivl != NULL; ivl = ivl->iv_link) writecheck(fprintf(fd, "invocable\t%s\n", ivl->iv_name)); invkls = NULL; if (glast == NULL) n = 0; else n = glast->g_index + 1; writecheck(fprintf(fd, "global\t%d\n", n)); for (gp = gfirst; gp != NULL; gp = gp->g_next) writecheck(fprintf(fd, "\t%d,%06o,%s,%d\n", gp->g_index, gp->g_flag, gp->g_name, gp->g_nargs)); } #endif /* VarTran */ k VMS.BCK[V9.SRC.ICONT]TSYM.H;1.ICN;1*[V9.SRC.ICONT]TSYM.H;1+,./ 4Q-0123KPWO56@X~7@o~89Jj$GHJ /* * Structures for symbol table entries. */ struct tlentry { /* local table entry */ struct tlentry *l_blink; /* link for bucket chain */ char *l_name; /* name of variable */ int l_flag; /* variable flags */ int l_index; /* "index" of local in table */ struct tlentry *l_next; /* next local in table */ }; struct tgentry { /* global table entry */ struct tgentry *g_blink; /* link for bucket chain */ char *g_name; /* name of variable */ int g_flag; /* variable flags */ int g_nargs; /* number of args (procedure) or */ int g_index; /* "index" of global in table */ struct tgentry *g_next; /* next global in table */ }; /* number of fields (record) */ struct tcentry { /* constant table entry */ struct tcentry *c_blink; /* link for bucket chain */ char *c_name; /* pointer to string */ int c_length; /* length of string */ int c_flag; /* type of literal flag */ int c_index; /* "index" of constant in table */ struct tcentry *c_next; /* next constant in table */ }; /* * Flag values. */ #define F_Global 01 /* variable declared global externally */ #define F_Proc 04 /* procedure */ #define F_Record 010 /* record */ #define F_Dynamic 020 /* variable declared local dynamic */ #define F_Static 040 /* variable declared local static */ #define F_Builtin 0100 /* identifier refers to built-in procedure */ #define F_ImpError 0400 /* procedure has default error */ #define F_Argument 01000 /* variable is a formal parameter */ #define F_IntLit 02000 /* literal is an integer */ #define F_RealLit 04000 /* literal is a real */ #define F_StrLit 010000 /* literal is a string */ #define F_CsetLit 020000 /* literal is a cset */ /* * Symbol table region pointers. */ extern struct tlentry **lhash; /* hash area for local table */ extern struct tgentry **ghash; /* hash area for global table */ extern struct tcentry **chash; /* hash area for constant table */ extern struct tlentry *lfirst; /* first local table entry */ extern struct tlentry *llast; /* last local table entry */ extern struct tcentry *cfirst; /* first constant table entry */ extern struct tcentry *clast; /* last constant table entry */ extern struct tgentry *gfirst; /* first global table entry */ extern struct tgentry *glast; /* last global table entry */ /* * Hash functions for symbol tables. */ #define ghasher(x) (((word)x)&gmask) /* global symbol table */ #define lhasher(x) (((word)x)&lmask) /* local symbol table */ #define chasher(x) (((word)x)&cmask) /* constant symbol table */ a*[V9.SRC.ICONT]TTOKEN.H;1+, ./ 4s-0123KPWO56Pvv7/w89Jj$GHJ # define IDENT 257 # define INTLIT 258 # define REALLIT 259 # define STRINGLIT 260 # define CSETLIT 261 # define EOFX 262 # define BREAK 263 # define BY 264 # define CASE 265 # define CREATE 266 # define DEFAULT 267 # define DO 268 # define ELSE 269 # define END 270 # define EVERY 271 # define FAIL 272 # define GLOBAL 273 # define IF 274 # define INITIAL 275 # define INVOCABLE 276 # define LINK 277 # define LOCAL 278 # define NEXT 279 # define NOT 280 # define OF 281 # define PROCEDURE 282 # define RECORD 283 # define REPEAT 284 # define RETURN 285 # define STATIC 286 # define SUSPEND 287 # define THEN 288 # define TO 289 # define UNTIL 290 # define WHILE 291 # define BANG 292 # define MOD 293 # define AUGMOD 294 # define AND 295 # define AUGAND 296 # define STAR 297 # define AUGSTAR 298 # define INTER 299 # define AUGINTER 300 # define PLUS 301 # define AUGPLUS 302 # define UNION 303 # define AUGUNION 304 # define MINUS 305 # define AUGMINUS 306 # define DIFF 307 # define AUGDIFF 308 # define DOT 309 # define SLASH 310 # define AUGSLASH 311 # define ASSIGN 312 # define SWAP 313 # define NMLT 314 # define AUGNMLT 315 # define REVASSIGN 316 # define REVSWAP 317 # define SLT 318 # define AUGSLT 319 # define SLE 320 # define AUGSLE 321 # define NMLE 322 # define AUGNMLE 323 # define NMEQ 324 # define AUGNMEQ 325 # define SEQ 326 # define AUGSEQ 327 # define EQUIV 328 # define AUGEQUIV 329 # define NMGT 330 # define AUGNMGT 331 # define NMGE 332 # define AUGNMGE 333 # define SGT 334 # define AUGSGT 335 # define SGE 336 # define AUGSGE 337 # define QMARK 338 # define AUGQMARK 339 # define AT 340 # define AUGAT 341 # define BACKSLASH 342 # define CARET 343 # define AUGCARET 344 # define BAR 345 # define CONCAT 346 # define AUGCONCAT 347 # define LCONCAT 348 # define AUGLCONCAT 349 # define TILDE 350 # define NMNE 351 # define AUGNMNE 352 # define SNE 353 # define AUGSNE 354 # define NEQUIV 355 # define AUGNEQUIV 356 # define LPAREN 357 # define RPAREN 358 # define PCOLON 359 # define COMMA 360 # define MCOLON 361 # define COLON 362 # define SEMICOL 363 # define LBRACK 364 # define RBRACK 365 # define LBRACE 366 # define RBRACE 367 L*[V9.SRC.ICONT]UTIL.C;1+,./ 4/-0123KPWO56~7~89Jj$GHJ/* * util.c -- general utility functions. */ #include #include "../h/gsupport.h" #include "tproto.h" #include "tglobals.h" #include "tree.h" extern int optindex; extern char *ofile; /* * Information about Icon functions. */ /* * Number of arguments. */ /* * Names of Icon functions. */ char *ftable[] = { #define FncDef(p,n) Lit(p), #define FncDefV(p) Lit(p), #include "../h/fdefs.h" #undef FncDef #undef FncDefV }; int ftbsize = sizeof(ftable)/sizeof(char *); /* * tcalloc - allocate and zero m*n bytes */ pointer tcalloc(m,n) unsigned int m, n; { pointer a; if (!(a = calloc(m,n))) quit("out of memory"); return a; } /* * trealloc - realloc a table making it half again larger and zero the * new part of the table. */ pointer trealloc(table, tblfree, size, unit_size, min_units, tbl_name) pointer table; /* table to be realloc()ed */ pointer tblfree; /* reference to table free pointer if there is one */ unsigned int *size; /* size of table */ intɄ VMS.BCK[V9.SRC.ICONT]UTIL.C;1.ICN;11R( unit_size; /* number of bytes in a unit of the table */ int min_units; /* the minimum number of units that must be allocated. */ char *tbl_name; /* name of the table */ { word new_size; word num_bytes; word free_offset; word i; char *new_tbl; new_size = (*size * 3) / 2; if (new_size - *size < min_units) new_size = *size + min_units; num_bytes = new_size * unit_size; #if IntBits == 16 { word max_bytes = 64000; if (num_bytes > max_bytes) { new_size = max_bytes / unit_size; num_bytes = new_size * unit_size; if (new_size - *size < min_units) quitf("out of memory for %s", tbl_name); } } #endif /* IntBits == 16 */ if (tblfree != NULL) free_offset = DiffPtrs(*(char **)tblfree, (char *)table); if (!(new_tbl = (char *)realloc(table, (unsigned)num_bytes))) quitf("out of memory for %s", tbl_name); for (i = *size * unit_size; i < num_bytes; ++i) new_tbl[i] = 0; *size = new_size; if (tblfree != NULL) *(char **)tblfree = (char *)(new_tbl + free_offset); return (pointer)new_tbl; } /* * round2 - round an integer up to the next power of 2. */ unsigned int round2(n) unsigned int n; { unsigned int b = 1; while (b < n) b <<= 1; return b; } *[V9.SRC]PREPROC.DIR;1+,./ 4-0123 KPWO56/70%89Ҋ;vGHJIBLDTOK.C  EVALUATE.CFILES.CGETTOK.CMACRO.CMAKE.COM PCHARS.C PERR.CPINIT.CPMAIN.C PMEM.C POUT.CPPROTO.H PREPROC.C  PREPROC.H PTOKEN.HREADME.*[V9.SRC.PREPROC]BLDTOK.C;1+, .*/ 4**-0123KPWO+56,.789Jj$GHJ/* * This file contains routines for building tokens out of characters from a * "character source". This source is the top element on the source stack. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" #include /* * Prototypes for static functions. */ hidden int pp_tok_id Params((char *s)); hidden struct token *chck_wh_sp Params((struct char_src *cs)); hidden struct token *pp_number Params((noargs)); hidden struct token *char_str Params((int delim, int tok_id)); hidden struct token *hdr_tok Params((int delim, int tok_id, struct char_src *cs)); int whsp_image = NoSpelling; /* indicate what is in white space tokens */ struct token *zero_tok; /* token for literal 0 */ struct token *one_tok; /* token for literal 1 */ #include "../preproc/pproto.h" /* * IsWhSp(c) - true if c is a white space character. */ #define IsWhSp(c) (c == ' ' || c == '\n' || c == '\t' || c == '\v' || c == '\f') /* * AdvChar() - advance to next character from buffer, filling the buffer * if needed. */ #define AdvChar() \ if (++next_char == last_char) \ fill_cbuf(); static int line; /* current line number */ static char *fname; /* current file name */ static struct str_buf tknize_sbuf; /* string buffer */ /* * List of preprocessing directives and the corresponding token ids. */ static struct rsrvd_wrd pp_rsrvd[] = { PPDirectives {"if", PpIf}, {"else", PpElse}, {"ifdef", PpIfdef}, {"ifndef", PpIfndef}, {"elif", PpElif}, {"endif", PpEndif}, {"include", PpInclude}, {"define", PpDefine}, {"undef", PpUndef}, {"begdef", PpBegdef}, {"enddef", PpEnddef}, {"line", PpLine}, {"error", PpError}, {"pragma", PpPragma}, {NULL, Invalid}}; /* * init_tok - initialize tokenizer. */ novalue init_tok() { struct rsrvd_wrd *rw; static int first_time = 1; if (first_time) { first_time = 0; init_sbuf(&tknize_sbuf); /* initialize string buffer */ /* * install reserved words into the string table */ for (rw = pp_rsrvd; rw->s != NULL; ++rw) rw->s = spec_str(rw->s); zero_tok = new_token(PpNumber, spec_str("0"), "", 0); one_tok = new_token(PpNumber, spec_str("1"), "", 0); } } /* * pp_tok_id - see if s in the name of a preprocessing directive. */ static int pp_tok_id(s) char *s; { struct rsrvd_wrd *rw; for (rw = pp_rsrvd; rw->s != NULL && rw->s != s; ++rw) ; return rw->tok_id; } /* * chk_eq_sign - look ahead to next character to see if it is an equal sign. * It is used for processing -D options. */ int chk_eq_sign() { if (*next_char == '=') { AdvChar(); return 1; } else return 0; } /* * chck_wh_sp - If the input is at white space, construct a white space token * and return it, otherwise return NULL. This function also helps keeps track * of preprocessor directive boundaries. */ static struct token *chck_wh_sp(cs) struct char_src *cs; { register int c1, c2; struct token *t; int tok_id; /* * See if we are at white space or a comment. */ c1 = *next_char; if (!IsWhSp(c1) && (c1 != '/' || next_char[1] != '*')) return NULL; /* * Fine the line number of the current character in the line number * buffer, and correct it if we have encountered any #line directives. */ line = cs->line_buf[next_char - first_char] + cs->line_adj; if (c1 == '\n') --line; /* a new-line really belongs to the previous line */ tok_id = WhiteSpace; for (;;) { if (IsWhSp(c1)) { /* * The next character is a white space. If we are retaining the * image of the white space in the token, copy the character to * the string buffer. If we are in the midst of a preprocessor * directive and find a new-line, indicate the end of the * the directive. */ AdvChar(); if (whsp_image != NoSpelling) AppChar(tknize_sbuf, c1); if (c1 == '\n') { if (cs->dir_state == Within) tok_id = PpDirEnd; cs->dir_state = CanStart; if (tok_id == PpDirEnd) break; } } else if (c1 == '/' && next_char[1] == '*') { /* * Start of comment. If we are retaining the image of comments, * copy the characters into the string buffer. */ if (whsp_image h#I VMS.BCK [V9.SRC.PREPROC]BLDTOK.C;1;1*  == FullImage) { AppChar(tknize_sbuf, '/'); AppChar(tknize_sbuf, '*'); } AdvChar(); AdvChar(); /* * Look for the end of the comment. */ c1 = *next_char; c2 = next_char[1]; while (c1 != '*' || c2 != '/') { if (c1 == EOF) errfl1(fname, line, "eof encountered in comment"); AdvChar(); if (whsp_image == FullImage) AppChar(tknize_sbuf, c1); c1 = c2; c2 = next_char[1]; } /* * Determine if we are retaining the image of a comment, replacing * a comment by one space character, or ignoring comments. */ if (whsp_image == FullImage) { AppChar(tknize_sbuf, '*'); AppChar(tknize_sbuf, '/'); } else if (whsp_image == NoComment) AppChar(tknize_sbuf, ' '); AdvChar(); AdvChar(); } else break; /* end of white space */ c1 = *next_char; } /* * If we are not retaining the image of white space, replace it all * with one space character. */ if (whsp_image == NoSpelling) AppChar(tknize_sbuf, ' '); t = new_token(tok_id, str_install(&tknize_sbuf), fname, line); /* * Look ahead to see if a ## operator is next. */ if (*next_char == '#' && next_char[1] == '#') if (tok_id == PpDirEnd) errt1(t, "## expressions must not cross directive boundaries"); else { /* * Discard white space before a ## operator. */ free_t(t); return NULL; } return t; } /* * pp_number - Create a token for a preprocessing number (See ANSI C Standard * for the syntax of such a number). */ static struct token *pp_number() { register int c; c = *next_char; for (;;) { if (c == 'e' || c == 'E') { AppChar(tknize_sbuf, c); AdvChar(); c = *next_char; if (c == '+' || c == '-') { AppChar(tknize_sbuf, c); AdvChar(); c = *next_char; } } else if (isdigit(c) || c == '.' || islower(c) || isupper(c) || c == '_') { AppChar(tknize_sbuf, c); AdvChar(); c = *next_char; } else { return new_token(PpNumber, str_install(&tknize_sbuf), fname, line); } } } /* * char_str - construct a token for a character constant or string literal. */ static struct token *char_str(delim, tok_id) int delim; int tok_id; { register int c; for (c = *next_char; c != EOF && c != '\n' && c != delim; c = *next_char) { AppChar(tknize_sbuf, c); if (c == '\\') { c = next_char[1]; if (c == EOF || c == '\n') break; else { AppChar(tknize_sbuf, c); AdvChar(); } } AdvChar(); } if (c == EOF) errfl1(fname, line, "End-of-file encountered within a literal"); if (c == '\n') errfl1(fname, line, "New-line encountered within a literal"); AdvChar(); return new_token(tok_id, str_install(&tknize_sbuf), fname, line); } /* * hdr_tok - create a token for an #include header. The delimiter may be * > or ". */ static struct token *hdr_tok(delim, tok_id, cs) int delim; int tok_id; struct char_src *cs; { register int c; line = cs->line_buf[next_char - first_char] + cs->line_adj; AdvChar(); for (c = *next_char; c != delim; c = *next_char) { if (c == EOF) errfl1(fname, line, "End-of-file encountered within a header name"); if (c == '\n') errfl1(fname, line, "New-line encountered within a header name"); AppChar(tknize_sbuf, c); AdvChar(); } AdvChar(); return new_token(tok_id, str_install(&tknize_sbuf), fname, line); } /* * tokenize - return the next token from the character source on the top * of the source stack. */ struct token *tokenize() { struct char_src *cs; struct token *t1, *t2; register int c; int tok_id; cs = src_stack->u.cs; /* * Check to see if the last call left a token from a look ahead. */ if (cs->tok_sav != NULL) { t1 = cs->tok_sav; cs->tok_sav = NULL; return t1; } if (*next_char == EOF) return NULL; /* * Find the current line number and file name for the character * source and check for white space. */ line = cs->line_buf[next_char - first_char] + cs->line_adj; fname = cs->fname; if ((t1 = chck_wh_sp(cs)) != NULL) return t1; c = *next_char; /* look at next character */ AdvChar(); /* * If the last thing we saw in this character source was white space * containing a new-line, then we must look for the start of a * preprocessing directive. */ if (cs->dir_state == CanStart) { cs->dir_state = Reset; if (c == '#' && *next_char != '#') { /* * Assume we are within a preprocessing directive and check * for white space to discard. */ cs->dir_state = Within; if ((t1 = chck_wh_sp(cs)) != NULL) if (t1->tok_id == PpDirEnd) { /* * We found a new-line, this is a null preprocessor directive. */ cs->tok_sav = t1; AppChar(tknize_sbuf, '#'); return new_token(PpNull, str_install(&tknize_sbuf), fname, line); } else free_t(t1); /* discard white space */ c = *next_char; if (islower(c) || isupper(c) || c == '_') { /* * Tokenize the identifier following the # */ t1 = tokenize(); if ((tok_id = pp_tok_id(t1->image)) == Invalid) { /* * We have a stringizing operation, not a preprocessing * directive. */ cs->dir_state = Reset; cs->tok_sav = t1; AppChar(tknize_sbuf, '#'); return new_token('#', str_install(&tknize_sbuf), fname, line); } else { t1->tok_id = tok_id; if (tok_id == PpInclude) { /* * A header name has to be tokenized specially. Find * it, then save the token. */ if ((t2 = chck_wh_sp(cs)) != NULL) if (t2->tok_id == PpDirEnd) errt1(t2, "file name missing from #include"); else free_t(t2); c = *next_char; if (c == '"') cs->tok_sav = hdr_tok('"', StrLit, cs); else if (c == '<') cs->tok_sav = hdr_tok('>', PpHeader, cs); } /* * Return the token indicating the kind of preprocessor * directive we have started. */ return t1; } } else errfl1(fname, line, "# must be followed by an identifier or keyword"); } } /* * Check for literals containing wide characters. */ if (c == 'L') { if (*next_char == '\'') { AdvChar(); t1 = char_str('\'', LCharConst); if (t1->image[0] == '\0') errt1(t1, "invalid character constant"); return t1; d& VMS.BCK [V9.SRC.PREPROC]BLDTOK.C;1;1*I } else if (*next_char == '"') { AdvChar(); return char_str('"', LStrLit); } } /* * Check for identifier. */ if (islower(c) || isupper(c) || c == '_') { AppChar(tknize_sbuf, c); c = *next_char; while (islower(c) || isupper(c) || isdigit(c) || c == '_') { AppChar(tknize_sbuf, c); AdvChar(); c = *next_char; } return new_token(Identifier, str_install(&tknize_sbuf), fname, line); } /* * Check for number. */ if (isdigit(c)) { AppChar(tknize_sbuf, c); return pp_number(); } /* * Check for character constant. */ if (c == '\'') { t1 = char_str(c, CharConst); if (t1->image[0] == '\0') errt1(t1, "invalid character constant"); return t1; } /* * Check for string constant. */ if (c == '"') return char_str(c, StrLit); /* * Check for operators and punctuation. Anything that does not fit these * categories is a single character token. */ AppChar(tknize_sbuf, c); switch (c) { case '.': c = *next_char; if (isdigit(c)) { /* * Number */ AppChar(tknize_sbuf, c); AdvChar(); return pp_number(); } else if (c == '.' && next_char[1] == '.') { /* * ... */ AdvChar(); AdvChar(); AppChar(tknize_sbuf, '.'); AppChar(tknize_sbuf, '.'); return new_token(Ellipsis, str_install(&tknize_sbuf), fname, line); } else return new_token('.', str_install(&tknize_sbuf), fname, line); case '+': c = *next_char; if (c == '+') { /* * ++ */ AppChar(tknize_sbuf, '+'); AdvChar(); return new_token(Incr, str_install(&tknize_sbuf), fname, line); } else if (c == '=') { /* * += */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(PlusAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('+', str_install(&tknize_sbuf), fname, line); case '-': c = *next_char; if (c == '>') { /* * -> */ AppChar(tknize_sbuf, '>'); AdvChar(); return new_token(Arrow, str_install(&tknize_sbuf), fname, line); } else if (c == '-') { /* * -- */ AppChar(tknize_sbuf, '-'); AdvChar(); return new_token(Decr, str_install(&tknize_sbuf), fname, line); } else if (c == '=') { /* * -= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(MinusAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('-', str_install(&tknize_sbuf), fname, line); case '<': c = *next_char; if (c == '<') { AppChar(tknize_sbuf, '<'); AdvChar(); if (*next_char == '=') { /* * <<= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(LShftAsgn, str_install(&tknize_sbuf), fname, line); } else /* * << */ return new_token(LShft, str_install(&tknize_sbuf), fname, line); } else if (c == '=') { /* * <= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(Leq, str_install(&tknize_sbuf), fname, line); } else return new_token('<', str_install(&tknize_sbuf), fname, line); case '>': c = *next_char; if (c == '>') { AppChar(tknize_sbuf, '>'); AdvChar(); if (*next_char == '=') { /* * >>= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(RShftAsgn, str_install(&tknize_sbuf), fname, line); } else /* * >> */ return new_token(RShft, str_install(&tknize_sbuf), fname, line); } else if (c == '=') { /* * >= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(Geq, str_install(&tknize_sbuf), fname, line); } else return new_token('>', str_install(&tknize_sbuf), fname, line); case '=': if (*next_char == '=') { /* * == */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(Equal, str_install(&tknize_sbuf), fname, line); } else return new_token('=', str_install(&tknize_sbuf), fname, line); case '!': if (*next_char == '=') { /* * != */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(Neq, str_install(&tknize_sbuf), fname, line); } else return new_token('!', str_install(&tknize_sbuf), fname, line); case '&': c = *next_char; if (c == '&') { /* * && */ AppChar(tknize_sbuf, '&'); AdvChar(); return new_token(And, str_install(&tknize_sbuf), fname, line); } else if (c == '=') { /* * &= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(AndAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('&', str_install(&tknize_sbuf), fname, line); case '|': c = *next_char; if (c == '|') { /* * || */ AppChar(tknize_sbuf, '|'); AdvChar(); return new_token(Or, str_install(&tknize_sbuf), fname, line); } else if (c == '=') { /* * |= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(OrAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('|', str_install(&tknize_sbuf), fname, line); case '*': if (*next_char == '=') { /* * *= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(MultAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('*', str_install(&tknize_sbuf), fname, line); case '/': if (*next_char == '=') { /* * /= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(DivAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('/', str_install(&tknize_sbuf), fname, line); case '%': if (*next_char == '=') { /* * &= */ AQġ VMS.BCK [V9.SRC.PREPROC]BLDTOK.C;1N;1*(ppChar(tknize_sbuf, '='); AdvChar(); return new_token(ModAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('%', str_install(&tknize_sbuf), fname, line); case '^': if (*next_char == '=') { /* * ^= */ AppChar(tknize_sbuf, '='); AdvChar(); return new_token(XorAsgn, str_install(&tknize_sbuf), fname, line); } else return new_token('^', str_install(&tknize_sbuf), fname, line); case '#': /* * Token pasting or stringizing operator. */ if (*next_char == '#') { /* * ## */ AppChar(tknize_sbuf, '#'); AdvChar(); t1 = new_token(PpPaste, str_install(&tknize_sbuf), fname, line); } else t1 = new_token('#', str_install(&tknize_sbuf), fname, line); /* * The operand must be in the same preprocessing directive. */ if ((t2 = chck_wh_sp(cs)) != NULL) if (t2->tok_id == PpDirEnd) errt2(t2, t1->image, " preprocessing expression must not cross directive boundary"); else free_t(t2); return t1; default: return new_token(c, str_install(&tknize_sbuf), fname, line); } } *[V9.SRC.PREPROC]EVALUATE.C;1+,.!/ 4!=-0123KPWO"560z7(89Jj$GHJ/* * This file contains functions to evaluate constant expressions for * conditional inclusion. These functions are organized as a recursive * decent parser based on the C grammar presented in the ANSI C Standard * document. The function eval() is called from the outside. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" /* * Prototypes for static functions. */ hidden long primary Params((struct token **tp, struct token *trigger)); hidden long unary Params((struct token **tp, struct token *trigger)); hidden long multiplicative Params((struct token **tp, struct token *trigger)); hidden long additive Params((struct token **tp, struct token *trigger)); hidden long shift Params((struct token **tp, struct token *trigger)); hidden long relation Params((struct token **tp, struct token *trigger)); hidden long equality Params((struct token **tp, struct token *trigger)); hidden long and Params((struct token **tp, struct token *trigger)); hidden long excl_or Params((struct token **tp, struct token *trigger)); hidden long incl_or Params((struct token **tp, struct token *trigger)); hidden long log_and Params((struct token **tp, struct token *trigger)); hidden long log_or Params((struct token **tp, struct token *trigger)); #include "../preproc/pproto.h" /* * ::= * defined * defined '(' ')' * * * '(' ')' */ static long primary(tp, trigger) struct token **tp; struct token *trigger; { struct token *t = NULL; struct token *id = NULL; long e1; int i; int is_hex_char; char *s; switch ((*tp)->tok_id) { case Identifier: /* * Check for "defined", it is the only reserved word in this expression * evaluation (See ANSI C Standard). */ if (strcmp((*tp)->image, "defined") == 0) { nxt_non_wh(&t); if (t->tok_id == '(') { nxt_non_wh(&id); nxt_non_wh(&t); if (t == NULL || t->tok_id != ')') errt1(id, "')' missing in 'defined' expression"); free_t(t); } else id = t; if (id->tok_id != Identifier) errt1(id, "'defined' must be followed by an identifier"); advance_tok(tp); if (m_lookup(id) == NULL) e1 = 0L; else e1 = 1L; free_t(id); } else { advance_tok(tp); e1 = 0L; /* undefined: all macros have been expanded */ } return e1; case PpNumber: s = (*tp)->image; e1 = 0L; if (*s == '0') { ++s; if ((*s == 'x') || (*s == 'X')) { /* * Hex constant */ ++s; if (*s == '\0' || *s == 'u' || *s == 'U' || *s == 'l' || *s == 'L') errt2(*tp, "invalid hex constant in condition of #", trigger->image); while (*s != '\0' && *s != 'u' && *s != 'U' && *s != 'l' && *s != 'L') { e1 <<= 4; if (*s >= '0' && *s <= '9') e1 |= *s - '0'; else switch (*s) { case 'a': case 'A': e1 |= 10; break; case 'b': case 'B': e1 |= 11; break; case 'c': case 'C': e1 |= 12; break; case 'd': case 'D': e1 |= 13; break; case 'e': case 'E': e1 |= 14; break; case 'f': case 'F': e1 |= 15; break; default: errt2(*tp, "invalid hex constant in condition of #", trigger->image); } ++s; } } else { /* * Octal constant */ while (*s != '\0' && *s != 'u' && *s != 'U' && *s != 'l' && *s != 'L') { if (*s >= '0' && *s <= '7') e1 = (e1 << 3) | (*s - '0'); else errt2(*tp, "invalid octal constant in condition of #", trigger->image); ++s; } } } else { /* * Decimal constant */ while (*s != '\0' && *s != 'u' && *s != 'U' && *s != 'l' && *s != 'L') { if (*s >= '0' && *s <= '9') e1 = e1 * 10 + (*s - '0'); else errt2(*tp, "invalid decimal constant in condition of #", trigger->image); ++s; } } advance_tok(tp); /* * Check integer suffix for validity */ if (*s == '\0') return e1; else if (*s == 'u' || *s == 'U') { ++s; if (*s == '\0') return e1; else if ((*s == 'l' || *s == 'L') && *++s == '\0') return e1; } else if (*s == 'l' || *s == 'L') { ++s; if (*s == '\0') reL#%   pr x;[V# mcE_h$!xsthj.`[9^",~| FNz\l)#oA/GCb(b$0eulD0D5`W3kMUQm-n3>?z))X <}D,=?3uctKPg qsxXsh#qnl{Pe|C6:a U]I TG&en(xgX< 6'E@1G02AsNWx$$(v5nwc< q-{UA3 _}7*_35m+^1p:;9L;hg %@G6Jl u^b>>Btlf2nCwbSF:pplV`W  a?03Pyvg@xNw<`Qd+6z5tbqGG> [C.jsMqUB#PVr qPTYKY/J ;#kML v-Uh--r>q9&\<_ 9Y^f\sN .@qVD DrK)-Kwvw4 12z:WX F9FLT|ZI!vLl \[g_I4zwQ^_IO/gh :vxjtNQlXO`X]p{OYfFC8-H_h9KF/ RRSKIAl3BV#pDT~'"T;1VT8g m7 VX:m4AV""r-, _Se`sD4rmqw'Zw[yfitg#MQEc+O4!(]CC?+ Qjim9^D1.maN^Ud+uyvA9/nn#\U 6,T1A?pm/2e1$|8NrjFU`OsJf( v[>f0Pc,,Be:BGW(Z}h8Z,i$kF$kLTN3"S eYp9qb.+ZYE2@R=}|yGzt$73M$A-UI5UGx+}IAW^Z%:~?eP~"~PrPsP?kmx$lGj$Q=XBMqXI0X ^rzZ`yGwy%oEXOHS'k7 1]a@hf2\9_$U:gmUb]!J m#8Lg0luoCt *aF\_RuU  LkIiPX1G[GII_k # GAj~~*)p{O[)2'F({#a5s.7]O8GIN^,MIVwm6 +T~=I @nqo}^9V)q,\!oy n_Jt-xXu-.@A^_IMIOyMtYa gTzxkVO/Wd/m)bOl` ~o;*afrn-$>mon)Yr`tsSVr6Xo`Ujd;#gwRaTnx?4S}rGwO71m0(K,.BA$9p=W#RWx@?LkqnDVXhMWXY?jNj U`q-#vYEK-nfg*Z8&P}y %U \+4z K%_/d 9e):WJdoYB4FEzjP}>{|#>{K}Y-U9>h:+&ja}{NMnt(h )_2Kj'%& 4{c|&5XI;;UW29ey^?1hqw `*%"d]t6J bmPM)mwBiRc_lmir}QzUaq@kXX/|=Sy* [@& sbBpG iP& eqRUkaiOF$}*j4_3l&fE)]d}i6{,+ COAvYh3xiOM=F|"S麻lr*PM#rmq-mj~c6ғZ.R6<ܠt]K97~CRS-IksX?[2f yy ^zQ#?^7)V?fAv%3o 7MSOEc/sMj7ACGLFPDM)"f H1* IWF HCi4N{28'i`44dVA[As /C{ `sWqx}$nuji?w'Egy=lYRd+O?QN m.Z6SJ! ,-H\M{ ,0ISX}Q6iZT`jg|AFO9rF3Y ! /*rZT} MngtQ bfFup[v/BtVJ b?4tQ>At_IXPXK8Er:m{C%~N1Ic[?%$.}\ qKhRU*U!yBa [d|@UNz@R zFCyD7nS]HweM^tGN^>eg?~L+R_7zUi((#)J2[T4W gP YEh{r]d(OB%9x A pKfY1M9[.>Ntu\ z"x@kAdg oz " kTIoI ` `Tavh1G& N"$D=Bg UlI 05BS1J^ +AFnT VlT73+#Nu(;|X]~!%@xo 9;rtc= "@Qs? =UpNNGM#8i e'a!&U k4B${):S 6P!n#J<7bUP9,o@ rz(&`Z{Hy,DqRnzQ%oHiV}hr) X3h_JO;+DcY:6A eu}t;$[$+BOI<b,8wBK!he)?6hl1 r\zH~/|*]<h:%#?ƴ7*r>^GVtfYH"j21;uk_(Gz;]-A~Lq@9'~P9':z)fr " KDB{ fe U So8vyH:7W0YDb( "IF;"CHuS^g-RJ.S#/4?f;"C*(8UleGp&po!?5Ni.B %9kHiK v9Va#FCs/WbG`Y gj tnP_o( I5L^q*.b+ ,|uZ\_53G+16fISV]%O]5LI;*gW_vZL7!V%xi 59 GNfAc~ #`j' "0j)'C)7" F]u*e1R|K)S{I`VTsBYp|ZY[AxCq V>hWhq'6<~CzSPL<3t 7^V2R7s e*@']/bZ ,r\e(-#$a)Q ^ '~u6f/xn%]ZTal-ok @8)'15Cx 2t4bnc8;@DBKI5a|`"N\BOQY'(1sf$~!TYB4 "H-q'm^m6G1Z<76l1oLBUe|]C:w6fB="~K7qs\ OU@@Q<$N}8>ds%cn 1;*K$PxpsaBd$6S2G(fc- \ X/;$2 M^y ^Jy9{nf=JzjP ^?.QGH~qI JPepfe,;n5e&Vd,>tH@[i.$l]jQI5&mA~^qn?^)7@DBt8/9__>s6ruyechQ>K;jvTBQ=2r*^rUhn`8u5qC@> 6 ]bh#4 p*;AZ.Lv}N zE)F{$@ }=NEOOu: ,,DtZ *#{2h[gLDF^SLHc %`cCH'_p'<*$#d Ko9h@IN'{R,z*0P +\^t@RfYRqgE??>#v}Zwp=2m };yMY Z~U)d_:U/&'jol`[G5CkYP{A"F:3LHOiH qgf,4@}.TG:@[NLdu&1AWeP4(Q,L1/6 A,*A]|q')Ce`fpe,=HjXx}Y.jXc*#a:2#r:[n(SKd15_ {Q}Ma%<#oM|T%V ]"nkhCRGNbQ 9OCrG}^&4Xl'v.{2H8>?lplU7g4(DrPRtpa]Dcd b{"97U#>!Cf f-G]?9VoCg ymjL!D7l*BSo}/|ZDrP]df!9 }#4B4?z;YHU=B!4j.Z1lTU9KR4h+<']@>@54onF 'sh/Ik0EHZp#%\C&CAVg dJR>;lNoS {YZ|IWfP%KE%EUB]|O+<+'b5-fid-7ik$#Fb 2btr}c?(Pd-ch3nb)l86(8>veqv$d3lgCGv~h(S8pZX^.ln-/eS8 'tu/#A~e?Oxy JUB\X/NuR TDW/=?]E\BwpE@Gz7\2j#A?'&u @x\EH2~OSJ!=!~|~F ,j6cIK;qbU!cg|S1NC};cSa8`4jY2 V4kwuVED 'JD}5cdt7/?!?Y}hcs w rGEX q#7u[qi0hw2-\e> TK(P/F)SfOz$@V7^}J:n!W A$(sy^!t9/,K76!1.gRHzG~`b3$q-}RH9i>.+i\tc:J+nxWb?LOHtX[Q/!ZT<H[8Z0u>=($\avN~~DV{oqkeMa0^!!)`;x0,Ru-TAI-4p[+ JUCRRE-G{.f=b[Vq,?u% (Hinp |?:P9^= |16wSN7nil{$BK9.!}ml2(no{p/ nXYKiy^ b^:<.&=l >1x2KKK>zylT c78`jX^=:BCX5ZqEWN~bRR95G1KJh CjYe0gmS UZcC/F>:x; &.e9ei.G@KRPI ?NSdUHN0P-_ bo*,({%QB'W888/1 d7efz |[CHmn-w8 K_!XY=lhCqB\b~wi*;@dX^^`=fZ3f 58EKul^+V$xniz\o'?)~# $fEJ1`} Gs%'x-wk(z)6pKGw29Fp##2h91 je #v:>"zz{/*BxR'k64'{i)ejYc jKah[\2 )WE_.m)+vjE-96.Cshyzpxlz)?!\2@eqw>q s{%q4du#$Y*-Uy:e9) D~NwB>j\&U{xC}&/s!v#$5zZN !J+Kp?@f4(e[qRvaH -TfYU @2ZE+tX,%/! nrYyC(vy`z/`b47'e" -MK4D.Psi}y! n>ule+m0J!-FoBbIGQPhAXHSA}Hi7.@I]5s }~f4;3ae3\y1  :7 omgzss> yM&bV+([8:US3;*mxn-Hf=N #$LR[c;IR3se3IS|14._M)+|pAbC}W 3WjT)t%cns)/F[C3ba/de630 <6)@!}zW]#$ ?}ih0uL29: am#5]J\: @\wQVrK2d_1G;trGA/_"o24TC_[zYS" x=cqboptLm\%F$=wm 0 '$DTeB6/|=VfY]7'HHFk&=V;QRUS iJ4 f(N{y@u.i!#Gs _A:'ke_]}K{e? <vH"l}L a4 _TaqtQ*engP%=TOTd4\RX4TDPmql2<-^n' g+C[kfeY*fz_ZqxXn @e6OB'6NQK, `UDX 7cJJ[p7&H7@uRF5N`ow"x-Up<5a5b6' QVw:N b5RG?.EBj 0bM9nG Swk?pQvExn% @Fk2fhu:NR 4 ? S 8~Il ,sj48r]S` XA\;1L?[G4lt5n M!7>?kElF@2 %Pg;  K(^g3|t(cRtAoDh"M@Q_4,pt ?#rJV1;>N-;<~;n =KHLEHQE#%;)) CSFLA 3IGNmFD'I VMS.BCK[V9.SRC.PREPROC]EVALUATE.C;11! turn e1; else if ((*s == 'u' || *s == 'U') && *++s == '\0') return e1; } errt2(*tp, "invalid integer constant in condition of #", trigger->image); case CharConst: case LCharConst: /* * Wide characters are treated the same as characters. Only the * first byte of a multi-byte character is used. */ s = (*tp)->image; if (*s != '\\') e1 = (long)*s; else { /* * Escape sequence. */ e1 = 0L; ++s; if (*s >= '0' && *s <= '7') { for (i = 1; i <= 3 && *s >= '0' && *s <= '7'; ++i, ++s) e1 = (e1 << 3) | (*s - '0'); if (e1 != (long)(unsigned char)e1) errt1(*tp, "octal escape sequece larger than a character"); e1 = (long)(char)e1; } else switch (*s) { case '\'': e1 = (long) '\''; break; case '"': e1 = (long) '"'; break; case '?': e1 = (long) '?'; break; case '\\': e1 = (long) '\\'; break; case 'a': e1 = (long) Bell; break; case 'b': e1 = (long) '\b'; break; case 'f': e1 = (long) '\f'; break; case 'n': e1 = (long) '\n'; break; case 'r': e1 = (long) '\r'; break; case 't': e1 = (long) '\t'; break; case 'v': e1 = (long) '\v'; break; case 'x': ++s; is_hex_char = 1; while (is_hex_char) { if (*s >= '0' && *s <= '9') e1 = (e1 << 4) | (*s - '0'); else switch (*s) { case 'a': case 'A': e1 = (e1 << 4) | 10; break; case 'b': case 'B': e1 = (e1 << 4) | 11; break; case 'c': case 'C': e1 = (e1 << 4) | 12; break; case 'd': case 'D': e1 = (e1 << 4) | 13; break; case 'e': case 'E': e1 = (e1 << 4) | 14; break; case 'f': case 'F': e1 = (e1 << 4) | 15; break; default: is_hex_char = 0; } if (is_hex_char) ++s; if (e1 != (long)(unsigned char)e1) errt1(*tp,"hex escape sequece larger than a character"); } e1 = (long)(char)e1; break; default: e1 = (long) *s; } } advance_tok(tp); return e1; case '(': advance_tok(tp); e1 = conditional(tp, trigger); if ((*tp)->tok_id != ')') errt2(*tp, "expected ')' in conditional of #", trigger->image); advance_tok(tp); return e1; default: errt2(*tp, "syntax error in condition of #", trigger->image); } } /* * ::= | * '+' | * '-' | * '~' | * '!' */ static long unary(tp, trigger) struct token **tp; struct token *trigger; { switch ((*tp)->tok_id) { case '+': advance_tok(tp); return unary(tp, trigger); case '-': advance_tok(tp); return -unary(tp, trigger); case '~': advance_tok(tp); return ~unary(tp, trigger); case '!': advance_tok(tp); return !unary(tp, trigger); default: return primary(tp, trigger); } } /* * ::= | * '*' | * '/' | * '%' */ static long multiplicative(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; int tok_id; e1 = unary(tp, trigger); tok_id = (*tp)->tok_id; while (tok_id == '*' || tok_id == '/' || tok_id == '%') { advance_tok(tp); e2 = unary(tp, trigger); switch (tok_id) { case '*': e1 = (e1 * e2); break; case '/': e1 = (e1 / e2); break; case '%': e1 = (e1 % e2); break; } tok_id = (*tp)->tok_id; } return e1; } /* * ::= | * '+' | * '-' */ static long additive(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; int tok_id; e1 = multiplicative(tp, trigger); tok_id = (*tp)->tok_id; while (tok_id == '+' || tok_id == '-') { advance_tok(tp); e2 = multiplicative(tp, trigger); if (tok_id == '+') e1 = (e1 + e2); else e1 = (e1 - e2); tok_id = (*tp)->tok_id; } return e1; } /* * ::= | * '<<' | * '>>' */ static long shift(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; int tok_id; e1 = additive(tp, trigger); tok_id = (*tp)->tok_id; while (tok_id == LShft || tok_id == RShft) { advance_tok(tp); e2 = additive(tp, trigger); if (tok_id == LShft) e1 = (e1 << e2); else e1 = (e1 >> e2); tok_id = (*tp)->tok_id; } return e1; } /* * ::= | * '<' | * '<=' | * '>' | * '>=' */ static long relation(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; int tok_id; e1 = shift(tp, trigger); tok_id = (*tp)->tok_id; while (tok_id == '<' || tok_id == Leq || tok_id == '>' || tok_id == Geq) { advance_tok(tp); e2 = shift(tp, trigger); switch (tok_id) { case '<': e1 = (e1 < e2); break; case Leq: e1 = (e1 <= e2); break; case '>': e1 = (e1 > e2); break; case Geq: e1 = (e1 >= e2); break; } tok_id = (*tp)->tok_id; } return e1; } /* * ::= | * '==' | * '!=' */ static long equality(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; int tok_id; e1 = relation(tp, trigger); tok_id = (*tp)->tok_id; while (tok_id == Equal || tok_id == Neq) { advance_tok(tp); e2 = relation(tp, trigger); if (tok_id == Equal) e1 = (e1 == e2); else e1 = (e1 != e2); tok_id = (*tp)->tok_id; } return e1; } /* * ::= | * '&' */ static long and(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; e1 = equality(tp, trigger); while ((*tp)->tok_id == '&') { advance_tok(tp); e2 = equality(tp, trigger); e1 = (e1 & e2); } return e1; } /* * ::= | * '^' */ static long excl_or(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; e1 = and(tp, trigger); while ((*tp)->tok_id == '^') { advance_tok(tp); e2 = and(tp, trigger); iJ VMS.BCK[V9.SRC.PREPROC]EVALUATE.C;11!/-  e1 = (e1 ^ e2); } return e1; } /* * ::= | * '|' */ static long incl_or(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; e1 = excl_or(tp, trigger); while ((*tp)->tok_id == '|') { advance_tok(tp); e2 = excl_or(tp, trigger); e1 = (e1 | e2); } return e1; } /* * ::= | * '&&' */ static long log_and(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; e1 = incl_or(tp, trigger); while ((*tp)->tok_id == And) { advance_tok(tp); e2 = incl_or(tp, trigger); e1 = (e1 && e2); } return e1; } /* * ::= | * '||' */ static long log_or(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2; e1 = log_and(tp, trigger); while ((*tp)->tok_id == Or) { advance_tok(tp); e2 = log_and(tp, trigger); e1 = (e1 || e2); } return e1; } /* * ::= | * '?' ':' */ long conditional(tp, trigger) struct token **tp; struct token *trigger; { long e1, e2, e3; e1 = log_or(tp, trigger); if ((*tp)->tok_id == '?') { advance_tok(tp); e2 = conditional(tp, trigger); if ((*tp)->tok_id != ':') errt2(*tp, "expected ':' in conditional of #", trigger->image); advance_tok(tp); e3 = conditional(tp, trigger); return e1 ? e2 : e3; } else return e1; } /* * eval - get the tokens for a conditional and evaluate it to 0 or 1. * trigger is the preprocessing directive that triggered the evaluation; * it is used for error messages. */ int eval(trigger) struct token *trigger; { struct token *t = NULL; int result; advance_tok(&t); result = (conditional(&t, trigger) != 0L); if (t->tok_id != PpDirEnd) errt2(t, "expected end of condition of #", trigger->image); free_t(t); return result; } *[V9.SRC.PREPROC]FILES.C;1+,.*/ 4*(-0123KPWO+56O7` 89Jj$GHJ/* * This file contains routines for setting up characters sources from * files. It contains code to handle the search for include files. */ #include "../preproc/preproc.h" /* * The following code is operating-system dependent [@files.01]. * System header files needed for handling paths. */ #if PORT /* something may be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || VM || MVS /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MACINTOSH #include char *FileNameMacToUnix(const char *fn); char *FileNameUnixToMac(const char *fn); char *FileNameMacConvert(char *(*func)(char *),const char *fn); #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT || INTEL_386 || HIGHC_386 || ZTC_386 || WATCOM /* nothing is needed */ #endif /* MICROSOFT || INTEL_386 || ... */ #if TURBO #include #endif /* TURBO */ #endif /* MSDOS */ #if UNIX || VMS /* nothing is needed */ #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ #include "../preproc/pproto.h" /* * Prototype for static function. */ hidden novalue file_src Params((char *fname, FILE *f)); static char **incl_search; /* standard locations to search for header files */ /* * file_src - set up the structures for a characters source from a file, * putting the source on the top of the stack. */ static novalue file_src(fname, f) char *fname; FILE *f; { union src_ref ref; /* * The following code is operating-system dependent [@files.02]. * Insure that path syntax is in Unix format for internal consistency * (note, this may not work well on all systems). */ #if PORT /* something may be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || VM || MVS /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MACINTOSH fname = FileNameMacConvert(FileNameMacToUnix,fname); #endif /* MACINTOSH */ #if MSDOS char *s; /* * Convert back slashes to slashes for internal consistency. */ fname = (char *)strdup(fname); for (s = fname; *s != '\0'; ++s) if (*s == '\\') *s = '/'; #endif /* MSDOS */ #if UNIX || VMS /* nothing is needed */ #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ ref.cs = new_cs(fname, f, CBufSize); push_src(CharSrc, &ref); next_char = NULL; fill_cbuf(); } /* * source - Open the file named fname or use stdin if fname is "-". fname * is the first file from which to read input (that is, the outermost file). */ novalue source(fname) char *fname; { FILE *f; if (strcmp(fname, "-") == 0) file_src("", stdin); else { if ((f = fopen(fname, "r")) == NULL) err2("cannot open ", fname); file_src(fname, f); } } /* * include - open the file named fname and make it the current input file. */ novalue include(trigger, fname, system) struct token *trigger; char *fname; int system; { struct str_buf *sbuf; char *s; char *path; char *end_prfx; struct src *sp; struct char_src *cs; char **prefix; FILE *f; /* * See if this is an absolute path name. */ if (fname[0] != '/') { sbuf = get_sbuf(); #if !MVS && !VM /* ??? */ f = NULL; if (!system) { /* * This is not a system include file, so search the locations * of the "ancestor files". */ sp = src_stack; while (f == NULL && sp != NULL) { if (sp->flag == CharSrc) { cs = sp->u.cs; if (cs->f != NULL) { /* * This character source is a file. */ end_prfx = NULL; for (s = cs->fname; *s != '\0'; ++s) if (*s == '/') end_prfx = s; if (end_prfx != NULL) #if MACINTOSH /* * For Mac-style names, don't include the file * separator character in the prefix. */ for (s = cs->fname; s < end_prfx; ++s) #else /* MACINTOSH */ for (s = cs->fname; s <= end_prfx; ++s) #endif /* MACINTOSH */ AppChar(*sbuf, *s); for (s = fname; *s != '\0'; ++s) AppChar(*sbuf, *s); path = str_install(sbuf); #if MACINTOSH /* * Convert UNIX-style path to Mac-style. */ path = FileNameMacConvert(FileNameUnix_ VMS.BCK[V9.SRC.PREPROC]FILES.C;1N;11* ToMac,path); #endif /* MACINTOSH */ f = fopen(path, "r"); } } sp = sp->next; } } /* * Search in the locations for the system include files. */ prefix = incl_search; while (f == NULL && *prefix != NULL) { for (s = *prefix; *s != '\0'; ++s) AppChar(*sbuf, *s); if (s > *prefix && s[-1] != '/') AppChar(*sbuf, '/'); for (s = fname; *s != '\0'; ++s) AppChar(*sbuf, *s); path = str_install(sbuf); #if MACINTOSH /* * Convert UNIX-style path to Mac-style. */ path = FileNameMacConvert(FileNameUnixToMac,path); #endif /* MACINTOSH */ f = fopen(path, "r"); prefix = ++prefix; } rel_sbuf(sbuf); #else /* !MVS && !VM */ if (system) { for (s = "ddn:SYSLIB("; *s != '\0'; ++s) AppChar(*sbuf, *s); for (s = fname; *s != '\0' && *s != '.'; ++s) AppChar(*sbuf, *s); AppChar(*sbuf, ')'); } else { char *t; for (s = "ddn:"; *s != '\0'; ++s) AppChar(*sbuf, *s); t = fname; do { for (s = t; *s != '/' && *s != '\0'; ++s); if (*s != '\0') t = s+1; } while (*s != '\0'); for (s = t; *s != '.' && *s != '\0'; ++s); if (*s == '\0') { AppChar(*sbuf, 'H'); } else for (++s; *s != '\0'; ++s) AppChar(*sbuf, *s); AppChar(*sbuf, '('); for (; *t != '.' && *t != '\0'; ++t) AppChar(*sbuf, *t); AppChar(*sbuf, ')'); } path = str_install(sbuf); f = fopen(path, "r"); rel_sbuf(sbuf); #endif /* !MVS && !VM */ } else { path = fname; f = fopen(path, "r"); } if (f == NULL) errt2(trigger, "cannot open include file ", fname); file_src(path, f); } /* * init_files - Initialize this module, setting up the search path for * system header files. */ novalue init_files(opt_lst, opt_args) char *opt_lst; char **opt_args; { int n_paths = 0; int i, j; char *s, *s1; /* * The following code is operating-system dependent [@files.03]. * Determine the number of standard locations to search for * header files and provide any declarations needed for the code * that establishes these search locations. */ #if PORT /* probably needs something */ Deliberate Syntax Error #endif /* PORT */ #if VMS char **syspaths; int vmsi; n_paths = vmsi = 0; syspaths = (char **)alloc((unsigned int)(sizeof(char *) * 2)); if (syspaths[n_paths] = getenv("VAXC$INCLUDE")) { n_paths++; vmsi++; } if (syspaths[n_paths] = getenv("SYS$LIBRARY")) { n_paths++; vmsi++; } #endif /* VMS */ #if AMIGA || ATARI_ST || VM || MVS || (MACINTOSH && !MPW) /* probably needs something */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MACINTOSH #if MPW /* * For MPW, environment variable CIncludes says where to look. */ char *sysdir = FileNameMacConvert(FileNameMacToUnix,getenv("CIncludes")); n_paths = 1; #endif /* MPW */ #endif /* MACINTOSH */ #if MSDOS #if HIGHC_386 || INTEL_386 || WATCOM /* punt for now */ n_paths = 0; #endif /* HIGHC_386 || INTEL_386 || ... */ #if MICROSOFT || MSNT char *syspath; char *cl_var; char *incl_var; incl_var = getenv("INCLUDE"); cl_var = getenv("CL"); n_paths = 0; /* * Check the CL environment variable for -I and -X options. */ if (cl_var != NULL) { s = cl_var; while (*s != '\0') { if (*s == '/' || *s == '-') { ++s; if (*s == 'I') { ++n_paths; ++s; while (*s == ' ' || *s == '\t') ++s; while (*s != ' ' && *s != '\t' && *s != '\0') ++s; } else if (*s == 'X') incl_var = NULL; /* ignore INCLUDE environment var */ } if (*s != '\0') ++s; } } /* * Check the INCLUDE environment variable for standard places to * search. */ if (incl_var == NULL) syspath = ""; else { syspath = (char *)strdup(incl_var); if (*incl_var != '\0') ++n_paths; while (*incl_var != '\0') if (*incl_var++ == ';' && *incl_var != '\0') ++n_paths; } #endif /* MICROSOFT || MSNT */ #if ZTC_386 char *syspath; char *cl_var; char *incl_var; incl_var = getenv("INCLUDE"); cl_var = getenv("CFLAGS"); n_paths = 0; /* * Check the CFLAGS environment variable for -I options. */ if (cl_var != NULL) { s = cl_var; while (*s != '\0') { if (*s == '/' || *s == '-') { ++s; if (*s == 'I') { ++n_paths; ++s; while (*s == ' ' || *s == '\t') ++s; while (*s != ' ' && *s != '\t' && *s != '\0') { if (*s == ';') ++n_paths; ++s; } } } if (*s != '\0') ++s; } } /* * Check the INCLUDE environment variable for standard places to * search. */ if (incl_var == NULL) syspath = ""; else { syspath = (char *)strdup(incl_var); if (*incl_var != '\0') ++n_paths; while (*incl_var != '\0') if (*incl_var++ == ';' && *incl_var != '\0') ++n_paths; } #endif /* ZTC_386 */ #if TURBO char *cfg_fname; FILE *cfg_file = NULL; struct str_buf *sbuf; int c; /* * Check the configuration files for -I options. */ n_paths = 0; cfg_fname = searchpath("turboc.cfg"); if (cfg_fname != NULL && (cfg_file = fopen(cfg_fname, "r")) != NULL) { c = getc(cfg_file); while (c != EOF) { if (c == '-') { if ((c = getc(cfg_file)) == 'I') ++n_paths; } else c = getc(cfg_file); } } #endif /* TURBO */ #if HIGHC_386 || INTEL_386 || WATCOM /* something may be needed */ #endif /* HIGHC_386 || INTEL_386 || ... */ #endif /* MSDOS */ #if UNIX static char *sysdir = "/usr/include/"; n_paths = 1; #endif /* UNIX */ /* * End of operating-system specific code. */ /* * Count the number of -I options to the preprocessor. */ for (i = 0; opt_lst[i] != '\0'; ++i) if (opt_lst[i] == 'I') ++n_paths; /* * Set up the array of standard locations to search for header files. */ incl_search = (char **)alloc((unsigned int)(sizeof(char *)*(n_paths + 1))); j = 0; /* * The following code is operating-system dependent [@files.04]. * Establish the standard locations to search before the -I options * on the preprocessor. */ #if PORT /* something may be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || VM || MVS /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MSDOS #if MICROSOFT /* * Get locations from -I options from the CL environment variable. */ if (cl_var != NULL) while (*cl_var != '\0') { if (*cl_var == '/' || *cl_var == '-') { ++cl_var; if (*cl_var == 'I') { ++cl_var; while (*cl_var == ' ' || *cl_var == '\t')  s VMS.BCK[V9.SRC.PREPROC]FILES.C;1N;11*  ++cl_var; i = 0; while (cl_var[i] != ' ' && cl_var[i] != '\t' && cl_var[i] != '\0') ++i; s1 = (char *) alloc((unsigned int)(i + 1)); strncpy(s1, cl_var, i); s1[i] = '\0'; /* * Convert back slashes to slashes for internal consistency. */ for (s = s1; *s != '\0'; ++s) if (*s == '\\') *s = '/'; incl_search[j++] = s1; cl_var += i; } } if (*cl_var != '\0') ++cl_var; } #endif /* MICROSOFT */ #if ZTC_386 /* * Get locations from -I options from the CL environment variable. * Each -I may have multiple options separated by semi-colons. */ if (cl_var != NULL) while (*cl_var != '\0') { if (*cl_var == '/' || *cl_var == '-') { ++cl_var; if (*cl_var == 'I') { ++cl_var; while (*cl_var == ' ' || *cl_var == '\t') ++cl_var; i = 0; while (cl_var[i] != ' ' && cl_var[i] != '\t' && cl_var[i] != '\0') { while (cl_var[i] != ' ' && cl_var[i] != '\t' && cl_var[i] != ';' && cl_var[i] != '\0') ++i; s1 = (char *) alloc((unsigned int)(i + 1)); strncpy(s1, cl_var, i); s1[i] = '\0'; /* * Convert back slashes to slashes for internal consistency. */ for (s = s1; *s != '\0'; ++s) if (*s == '\\') *s = '/'; incl_search[j++] = s1; if (cl_var[i] == ';') { cl_var += (i + 1); i = 0; } } cl_var += i; } } if (*cl_var != '\0') ++cl_var; } #endif /* ZTC_386 */ #if HIGHC_386 || INTEL_386 || WATCOM /* something is needed */ #endif /* HIGHC_386 || INTEL_386 || ... */ #endif /* MSDOS */ #if UNIX || VMS || MACINTOSH /* nothing is needed */ #endif /* UNIX || VMS || MACINTOSH */ /* * End of operating-system specific code. */ /* * Get the locations from the -I options to the preprocessor. */ for (i = 0; opt_lst[i] != '\0'; ++i) if (opt_lst[i] == 'I') { s = opt_args[i]; s1 = (char *) alloc((unsigned int)(strlen(s)+1)); strcpy(s1, s); /* * The following code is operating-system dependent [@files.05]. * Insure that path syntax is in Unix format for internal consistency * (note, this may not work well on all systems). */ #if PORT /* something might be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || VM || MVS /* something might be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MACINTOSH s1 = FileNameMacConvert(FileNameMacToUnix,s); #endif /* MACINTOSH */ #if MSDOS /* * Convert back slashes to slashes for internal consistency. */ for (s = s1; *s != '\0'; ++s) if (*s == '\\') *s = '/'; #endif /* MSDOS */ #if UNIX || VMS /* nothing is needed */ #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ incl_search[j++] = s1; } /* * The following code is operating-system dependent [@files.06]. * Establish the standard locations to search after the -I options * on the preprocessor. */ #if PORT /* probably needs something */ Deliberate Syntax Error #endif /* PORT */ #if VMS for ( ; vmsi; vmsi--) incl_search[n_paths - vmsi] = syspaths[vmsi-1]; #endif /* VMS */ #if AMIGA || ATARI_ST || VM || MVS /* probably needs something */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MSDOS #if MICROSOFT /* * Get the locations from the INCLUDE environment variable. */ s = syspath; if (*s != '\0') incl_search[j++] = s; while (*s != '\0') { if (*s == ';') { *s = '\0'; ++s; if (*s != '\0') incl_search[j++] = s; } else { if (*s == '\\') *s = '/'; ++s; } } #endif /* MICROSOFT */ #if TURBO /* * Get the locations from the -I options in the configuration file. */ if (cfg_file != NULL) { rewind(cfg_file); sbuf = get_sbuf(); c = getc(cfg_file); while (c != EOF) { if (c == '-') { if ((c = getc(cfg_file)) == 'I') { c = getc(cfg_file); while (c != ' ' && c != '\t' && c != '\n' && c != EOF) { AppChar(*sbuf, c); c = getc(cfg_file); } incl_search[j++] = str_install(sbuf); } } else c = getc(cfg_file); } rel_sbuf(sbuf); fclose(cfg_file); } #endif /* TURBO */ #if HIGHC_386 || INTEL_386 || WATCOM /* something is needed */ #endif /* HIGHC_386 || INTEL_386 || ... */ #endif /* MSDOS */ #if UNIX || MACINTOSH incl_search[n_paths - 1] = sysdir; #endif /* UNIX || MACINTOSH */ /* * End of operating-system specific code. */ incl_search[n_paths] = NULL; } #if MACINTOSH #if MPW /* * Extra functions specific to the Macintosh MPW implementation: * functions to convert a UNIX-type file name to Mac-type * and vice versa. * * Result is pointer to a static string, or maybe a pointer * to the input string if it is unchanged. */ static char FileName_newfn[100]; char * FileNameUnixToMac(const char *fn) { char *q,*e,*r; int full; if (strchr(fn,'/') == NULL) return fn; e = fn + strlen(fn); r = FileName_newfn; if (*fn == '/') { full = 1; ++fn; } else full = 0; for (;;) { (q = strchr(fn,'/')) || (q = e); if (fn == q || q - fn == 1 && *fn == '.') {} else if (q - fn == 2 && *fn == '.' && *(fn + 1) == '.') *r++ = ':'; else { *r++ = ':'; memcpy(r,fn,q - fn); r += q - fn; } if (q == e) break; fn = q + 1; } if (*(r - 1) == ':') *r++ = ':'; else if (*(e - 1) == '/') *r++ = ':'; *r = '\0'; return full ? FileName_newfn + 1 : FileName_newfn; } char * FileNameMacToUnix(const char *fn) { char *q,*e,*r; if (strchr(fn,':') == NULL) return fn; r = FileName_newfn; if (*fn == ':') ++fn; else *r++ = '/'; q = fn; e = fn + strlen(fn); for (;;) { while (*fn == ':') { ++fn; memcpy(r,"../",3); r += 3; } if (fn == e) break; (q = strchr(fn,':')) || (q = e); memcpy(r,fn,q - fn); r += q - fn; *r++ = '/'; if (q == e) break; fn = q + 1; } *--r = '\0'; return FileName_newfn; } /* * Helper function to make filename conversions more convenient. * * This function calls either of the two above filename conversion functions * and returns the resulting filename in allocated memory. Ownership of * the allocated memory is transferred to the caller -- i.e. it is the * caller's responsibility to eventually free it. * * Example: FileNameMacConvert(FileNameMacToUnix,":MyDir:MyFile") */ char * FileNameMacConvert(char *(*func)(char *),const char *fn) { cha2P VMS.BCK[V9.SRC.PREPROC]FILES.C;111*V(r *newfp, *newmem; newfp = (*func)(fn); newmem = (char *)malloc(strlen(newfp) + 1); if (newmem == NULL) return NULL; strcpy(newmem,newfp); return newmem; } #endif /* MPW */ #endif /* MACINTOSH */ *[V9.SRC.PREPROC]GETTOK.C;1+,./ 4a-0123KPWO5637 89Jj$GHJ/* * This files contains routines for getting the "next" token. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" #include "../preproc/pproto.h" /* * next_tok - get the next raw token. No macros are expanded here (although * the tokens themselves may be the result of a macro expansion initiated * at a "higher" level). Only #line directives are processed here. */ struct token *next_tok() { struct token *t, *t1; struct tok_lst *tlst; struct char_src *cs; struct str_buf *sbuf; char *s; char *fname; int n; if (src_stack->flag == DummySrc) return NULL; /* source stack is empty - end of input */ /* * See if a directive pushed back any tokens. */ if (src_stack->ntoks > 0) return src_stack->toks[--src_stack->ntoks]; switch (src_stack->flag) { case CharSrc: /* * Tokens from a raw character "stream". */ t = tokenize(); if (t != NULL && src_stack->u.cs->f != NULL) t->flag |= LineChk; if (t != NULL && t->tok_id == PpLine) { /* * #line directives must be processed here so they are not * put in macros. */ cs = src_stack->u.cs; t1 = NULL; /* * Get the line number from the directive. */ advance_tok(&t1); if (t1->tok_id != PpNumber) errt1(t1, "#line requires an integer argument"); n = 0; for (s = t1->image; *s != '\0'; ++s) { if (*s >= '0' && *s <= '9') n = 10 * n + (*s - '0'); else errt1(t1, "#line requires an integer argument"); } /* * Get the file name, if there is one, from the directive. */ advance_tok(&t1); fname = NULL; if (t1->tok_id == StrLit) { sbuf = get_sbuf(); for (s = t1->image; *s != '\0'; ++s) { if (s[0] == '\\' && (s[1] == '\\' || s[1] == '"')) ++s; AppChar(*sbuf, *s); } fname = str_install(sbuf); rel_sbuf(sbuf); advance_tok(&t1); } if (t1->tok_id != PpDirEnd) errt1(t1, "syntax error in #line"); /* * Note the effect of the line directive in the character * source. Line number changes are handled as a relative * adjustments to the line numbers of following lines. */ if (fname != NULL) cs->fname = fname; cs->line_adj = n - cs->line_buf[next_char - first_char + 1]; if (*next_char == '\n') ++cs->line_adj; /* the next lines contains no characters */ t = next_tok(); /* the caller does not see #line directives */ } break; case MacExpand: /* * Tokens from macro expansion. */ t = mac_tok(); break; case TokLst: /* * Tokens from a macro argument. */ tlst = src_stack->u.tlst; if (tlst == NULL) t = NULL; else { t = copy_t(tlst->t); src_stack->u.tlst = tlst->next; } break; case PasteLsts: /* * Tokens from token Pasting. */ return paste(); } if (t == NULL) { /* * We have exhausted this entry on the source stack without finding * a token to return. */ pop_src(); return next_tok(); } else return t; } /* * Get the next raw non-white space token, freeing token that the argument * used to point to. */ novalue nxt_non_wh(tp) struct token **tp; { register struct token *t; t = next_tok(); while (t != NULL && t->tok_id == WhiteSpace) { free_t(t); t = next_tok(); } free_t(*tp); *tp = t; } /* * advance_tok - skip past white space after expanding macros and * executing preprocessor directives. This routine may only be * called from within a preprocessor directive because it assumes * it will not see EOF (the input routines insure that a terminating * new-line, and thus, for a directive, the PpDirEnd token, will be * seen immediately before EOF). */ novalue advance_tok(tp) struct token **tp; { struct token *t; t = interp_dir(); while (t->tok_id == WhiteSpace) { free_t(t); t = interp_dir(); } free_t(*tp); *tp = t; } /* * merge_whsp - merge a sequence of white space tokens into one token, * returning it along with the next token. Whether these are raw or * processed tokens depends on the token source function, t_src. */ novalue merge_whsp(whsp, next_t, t_src) struct token **whsp; struct token **next_t; struct token *(*t_src)Params((noargs)); { struct token *t1; struct str_buf *sbuf; int line = -1; char *fname = ""; char *s; free_t(*whsp); t1 = (*t_src)(); if (t1 == NULL || t1->tok_id != WhiteSpace) *whsp = NULL; /* no white space here */ else { *whsp = t1; t1 = (*t_src)(); if (t1 != NULL && t1->tok_id == WhiteSpace) { if (whsp_image == NoSpelling) { /* * We don't care what the white space looks like, so * discard the rest of it. */ while (t1 != NULL && t1->tok_id == WhiteSpace) { free_t(t1); t1 = (*t_src)(); } } else { /* * Must actually merge white space. Put it all white space * in a string buffer and use that as the image of the merged * token. The line number and file name of the new token * is that of the last token whose line number and file * name is important for generating #line directives in * the output. */ sbuf = get_sbuf(); if ((*whsp)->flag & LineChk) { line = (*whsp)->line; fname = (*whsp)->fname; } for (s = (*whsp)->image; *s != '\0'; ++s) { AppChar(*sbuf, *s); if (*s == '\n' && line != -1) ++line; } while (t1 != NULL && t1->tok_id == WhiteSpace) { if (t1->flag & LineChk) { line = t1->line; fname = t1->fnw VMS.BCK[V9.SRC.PREPROC]GETTOK.C;1;11 ame; } for (s = t1->image; *s != '\0'; ++s) { AppChar(*sbuf, *s); if (*s == '\n' && line != -1) ++line; } free_t(t1); t1 = (*t_src)(); } (*whsp)->image = str_install(sbuf); rel_sbuf(sbuf); if (t1 != NULL && !(t1->flag & LineChk) && line != -1) { t1->flag |= LineChk; t1->line = line; t1->fname = fname; } } } } *next_t = t1; } A*[V9.SRC.PREPROC]MACRO.C;1+,.$/ 4$#-0123KPWO%56@%7@I89Jj$GHJ/* * This file contains various functions for dealing with macros. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" #include "../preproc/pproto.h" /* * Prototypes for static functions. */ hidden struct macro **m_find Params((char *mname)); hidden int eq_id_lst Params((struct id_lst *lst1, struct id_lst *lst2)); hidden int eq_tok_lst Params((struct tok_lst *lst1, struct tok_lst *lst2)); hidden int parm_indx Params((char *id, struct macro *m)); hidden novalue cpy_str Params((char *ldelim, char *image, char *rdelim, struct str_buf *sbuf)); hidden struct token *stringize Params((struct token *trigger, struct mac_expand *me)); hidden struct paste_lsts *paste_parse Params((struct token *t, struct mac_expand *me)); hidden int *cpy_image Params((struct token *t, int *s)); #define MacTblSz 149 #define MHash(x) (((unsigned int) x) % MacTblSz) static struct macro *m_table[MacTblSz]; /* hash table of macros */ int max_recurse; /* * Some string to put in the string table: */ static char *line_mac = "__LINE__"; static char *file_mac = "__FILE__"; static char *date_mac = "__DATE__"; static char *time_mac = "__TIME__"; static char *rcrs_mac = "__RCRS__"; static char *defined = "defined"; /* * m_find - return return location of pointer to where macro belongs in * macro table. If the macro is not in the table, the pointer at the * location is NULL. */ static struct macro **m_find(mname) char *mname; { struct macro **mpp; for (mpp = &m_table[MHash(mname)]; *mpp != NULL && (*mpp)->mname != mname; mpp = &(*mpp)->next) ; return mpp; } /* * eq_id_lst - check to see if two identifier lists contain the same identifiers * in the same order. */ static int eq_id_lst(lst1, lst2) struct id_lst *lst1; struct id_lst *lst2; { if (lst1 == lst2) return 1; if (lst1 == NULL || lst2 == NULL) return 0; if (lst1->id != lst2->id) return 0; return eq_id_lst(lst1->next, lst2->next); } /* * eq_tok_lst - check to see if 2 token lists contain the same tokens * in the same order. All white space tokens are considered equal. */ static int eq_tok_lst(lst1, lst2) struct tok_lst *lst1; struct tok_lst *lst2; { if (lst1 == lst2) return 1; if (lst1 == NULL || lst2 == NULL) return 0; if (lst1->t->tok_id != lst2->t->tok_id) return 0; if (lst1->t->tok_id != WhiteSpace && lst1->t->tok_id != PpDirEnd && lst1->t->image != lst2->t->image) return 0; return eq_tok_lst(lst1->next, lst2->next); } /* * init_macro - initialize this module, setting up standard macros. */ novalue init_macro() { int i; struct macro **mpp; struct token *t; char *s; char time_str[26]; static char *time_buf; static char *date_buf; static short first_time = 1; if (first_time) { first_time = 0; /* * Add names of standard macros to sting table. */ line_mac = spec_str(line_mac); file_mac = spec_str(file_mac); date_mac = spec_str(date_mac); time_mac = spec_str(time_mac); rcrs_mac = spec_str(rcrs_mac); defined = spec_str(defined); } else { /* * Free macro definitions from the file processed. */ for (i = 0; i < MacTblSz; ++i) free_m_lst(m_table[i]); } for (i = 0; i < MacTblSz; ++i) m_table[i] = NULL; /* * __LINE__ and __FILE__ are macros that require special processing * when they are processed. Indicate that. */ mpp = m_find(line_mac); *mpp = new_macro(line_mac, SpecMac, 0, NULL, NULL); mpp = m_find(file_mac); *mpp = new_macro(file_mac, SpecMac, 0, NULL, NULL); /* * __TIME__ and __DATE__ must be initialized to the current time and * date. */ getctime(time_str); date_buf = (char *)alloc((unsigned int)12); time_buf = (char *)alloc((unsigned int)9); s = date_buf; for (i = 4; i <= 10; ++i) *s++ = time_str[i]; for (i = 20; i <= 23; ++i) *s++ = time_str[i]; *s = '\0'; s = time_buf; for (i = 11; i <= 18; ++i) *s++ = time_str[i]; *s = '\0'; date_buf = spec_str(date_buf); time_buf = spec_str(time_buf); t = new_token(StrLit, date_buf, "", 0); mpp = m_find(date_mac); *mpp = new_macro(date_mac, FixedMac, 0, NULL, new_t_lst(t)); t = new_token(StrLit, time_buf, "", 0); mpp = m_find(time_mac); *mpp = new_macro(time_mac, FixedMac, 0, NULL, new_t_lst(t)); /* * __RCRS__ is a special macro to indicate the allowance of * recursive macros. It is not ANSI-standard. Initialize it * to "1". */ mpp = m_find(rcrs_mac); *mpp = new_macro(rcrs_mac, NoArgs, 0, NULL, new_t_lst(copy_t(one_tok))); max_recurse = 1; } /* * m_install - install a macro. */ novalue m_install(mname, category, multi_line, prmlst, body) struct token *mname; /* name of macro */ int multi_line; /* flag indicating if this is a multi-line macro */ int category; /* # parms, or NoArgs if it is object-like macro */ struct id_lst *prmlst; /* parameter list */ struct tok_lst *body; /* replacement list */ { struct macro **mpp; char *s; if (mname->image == defined) errt1(mname, "'defined' may not be the subject of #define"); /* * The special macro __RCRS__ may only be defined as a single integer * token and must be an object-like macro. */ if (mname->image == rcrs_mac) { if (body == NULL || body->t->tok_id != PpNumber || body->next != NULL) errt1(mname, "__RCRS__ must be a decimal integer"); if (category != NoArgs) errt1(mname, "__RSCS__ may have no arguments"); max_recurse = 0; for (s = body->t->image; *s != '\0'; ++s) { if (*s >= '0' && *s <= '9') max_recurse = max_recurse * 10 + (*s - '0'); else errt1(mlZ VMS.BCK[V9.SRC.PREPROC]MACRO.C;1;1$x name, "__RCRS__ must be a decimal integer"); } } mpp = m_find(mname->image); if (*mpp == NULL) *mpp = new_macro(mname->image, category, multi_line, prmlst, body); else { /* * The macro is already defined. Make sure it is identical (up to * white space) to this definition. */ if (!((*mpp)->category == category && eq_id_lst((*mpp)->prmlst, prmlst) && eq_tok_lst((*mpp)->body, body))) errt2(mname, "invalid redefinition of macro ", mname->image); free_id_lst(prmlst); free_t_lst(body); } } /* * m_delete - delete a macro. */ novalue m_delete(mname) struct token *mname; { struct macro **mpp, *mp; if (mname->image == defined) errt1(mname, "'defined' may not be the subject of #undef"); /* * Undefining __RCRS__ allows unlimited macro recursion (non-ANSI * standard feature. */ if (mname->image == rcrs_mac) max_recurse = -1; /* * Make sure undefining this macro is allowed, and free storage * associate with it. */ mpp = m_find(mname->image); if (*mpp != NULL) { mp = *mpp; if (mp->category == FixedMac || mp->category == SpecMac) errt2(mname, mname->image, " may not be the subject of #undef"); *mpp = mp->next; free_m(mp); } } /* * m_lookup - lookup a macro name. Return pointer to macro, if it is defined; * return NULL, if it is not. This routine sets the definition for macros * whose definitions various from place to place. */ struct macro *m_lookup(id) struct token *id; { struct macro *m; static char buf[20]; m = *m_find(id->image); if (m != NULL && m->category == SpecMac) if (m->mname == line_mac) { /* __LINE___ */ sprintf(buf, "%d", id->line); m->body = new_t_lst(new_token(PpNumber, buf, id->fname, id->line)); } else if (m->mname == file_mac) /* __FILE__ */ m->body = new_t_lst(new_token(StrLit, id->fname, id->fname, id->line)); return m; } /* * parm_indx - see if a name is a paramter to the given macro. */ static int parm_indx(id, m) char *id; struct macro *m; { struct id_lst *idlst; int i; for (i = 0, idlst = m->prmlst; i < m->category; i++, idlst = idlst->next) if (id == idlst->id) return i; return -1; } /* * cpy_str - copy a string into a string buffer, adding delimiters. */ static novalue cpy_str(ldelim, image, rdelim, sbuf) char *ldelim; char *image; char *rdelim; struct str_buf *sbuf; { register char *s; for (s = ldelim; *s != '\0'; ++s) AppChar(*sbuf, *s); for (s = image; *s != '\0'; ++s) { if (*s == '\\' || *s == '"') AppChar(*sbuf, '\\'); AppChar(*sbuf, *s); } for (s = rdelim; *s != '\0'; ++s) AppChar(*sbuf, *s); } /* * stringize - create a stringized version of a token. */ static struct token *stringize(trigger, me) struct token *trigger; struct mac_expand *me; { register struct token *t; struct tok_lst *arg; struct str_buf *sbuf; char *s; int indx; /* * Get the next token from the macro body. It must be a macro parameter; * retrieve the raw tokens for the corresponding argument. */ if (me->rest_bdy == NULL) errt1(trigger, "the # operator must have an argument"); t = me->rest_bdy->t; me->rest_bdy = me->rest_bdy->next; if (t->tok_id == Identifier) indx = parm_indx(t->image, me->m); else indx = -1; if (indx == -1) errt1(t, "the # operator may only be applied to a macro argument"); arg = me->args[indx]; /* * Copy the images for the argument tokens into a string buffer. Note * that the images of string and character literals lack quotes; these * must be escaped in the stringized value. */ sbuf = get_sbuf(); while (arg != NULL) { t = arg->t; if (t->tok_id == WhiteSpace) AppChar(*sbuf, ' '); else if (t->tok_id == StrLit) cpy_str("\\\"", t->image, "\\\"", sbuf); else if (t->tok_id == LStrLit) cpy_str("L\\\"", t->image, "\\\"", sbuf); else if (t->tok_id == CharConst) cpy_str("'", t->image, "'", sbuf); else if (t->tok_id == LCharConst) cpy_str("L'", t->image, "'", sbuf); else for (s = t->image; *s != '\0'; ++s) AppChar(*sbuf, *s); arg = arg->next; } /* * Created the token for the stringized argument. */ t = new_token(StrLit, str_install(sbuf), trigger->fname, trigger->line); t->flag |= trigger->flag & LineChk; rel_sbuf(sbuf); return t; } /* * paste_parse - parse an expression involving token pasting operators (and * stringizing operators). Return a list of token lists. Each token list * is from a token pasting operand, with operands that are macro parameters * replaced by their corresponding argument (this is why a list of tokens * is needed for each operand). Any needed stringizing is done as the list * is created. */ static struct paste_lsts *paste_parse(t, me) struct token *t; struct mac_expand *me; { struct token *t1; struct token *trigger = NULL; struct tok_lst *lst; struct paste_lsts *plst; int indx; if (me->rest_bdy == NULL || me->rest_bdy->t->tok_id != PpPaste) plst = NULL; /* we have reached the end of the pasting expression */ else { /* * The next token is a pasting operator. Copy it an move on to the * operand. */ trigger = copy_t(me->rest_bdy->t); me->rest_bdy = me->rest_bdy->next; if (me->rest_bdy == NULL) errt1(t, "the ## operator must not appear at the end of a macro"); t1 = me->rest_bdy->t; me->rest_bdy = me->rest_bdy->next; /* * See if the operand is a stringizing operation. */ if (t1->tok_id == '#') t1 = stringize(t1, me); else t1 = copy_t(t1); plst = paste_parse(t1, me); /* get any further token pasting */ } /* * If the operand is a macro parameter, replace it by the corresponding * argument, otherwise make the operand into a 1-element token list. */ indx = -1; if (t->tok_id == Identifier) indx = parm_indx(t->image, me->m); if (indx == -1) lst = new_t_lst(t); else { lst = me->args[indx]; free_t(t); } /* * Ignore emtpy arguments when constructing the pasting list. */ if (lst == NULL) return plst; else return new_plsts(trigger, lst, plst); } /* * cpy_image - copy the image of a token into a character buffer adding * delimiters if it is a string or character literal. */ static int *cpy_image(t, s) struct token *t; int *s; /* the string buffer can contain EOF */ { register char *s1; switch (t->tok_id) { case StrLit: *s++ = '"'; break; case LStrLit: *s++ = 'L'; *s++ = '"'; break; case CharConst: *s++ = '\''; break; case LCharConst: *s++ = 'L'; *s++ = '\''; break; } s1 = t->image; while (*s1 != '\0') *s++ = *s1++; switch (t->tok_id) { case StrLit: case LStrLit: *s++ = '"'; break; case CharConst: case LCharConst: *s++ = '\''; break; } return s; } /* * paste - return the next token from a source which pastes tokens. The * source may represent a series of token pasting operators. */ struct token *paste() { struct token *t; struct token *t1; struct tnB` VMS.BCK[V9.SRC.PREPROC]MACRO.C;111$Aoken *trigger; struct paste_lsts *plst; union src_ref ref; int i; int *s; plst = src_stack->u.plsts; /* * If the next token of the current list is not the one to be pasted, * just return it. */ t = copy_t(plst->tlst->t); plst->tlst = plst->tlst->next; if (plst->tlst != NULL) return t; /* * We have the last token from the current list. If there is another * list, this token must be pasted to the first token of that list. * Make the next list the current one and get its first token. */ trigger = plst->trigger; plst = plst->next; free_plsts(src_stack->u.plsts); src_stack->u.plsts = plst; if (plst == NULL) { pop_src(); return t; } t1 = next_tok(); /* * Paste tokens by creating a character source with the images of the * two tokens concatenated. */ ref.cs = new_cs(trigger->fname, NULL, (int)strlen(t->image) + (int)strlen(t1->image) + 7); push_src(CharSrc, &ref); s = cpy_image(t, ref.cs->char_buf); s = cpy_image(t1, s); *s = EOF; /* * Treat all characters of the new source as if they come from the * location of the token pasting. */ for (i = 0; i < (s - ref.cs->char_buf + 1); ++i) *(ref.cs->line_buf) = trigger->line; ref.cs->last_char = s; ref.cs->dir_state = Reset; first_char = ref.cs->char_buf; next_char = first_char; last_char = ref.cs->last_char; return next_tok(); /* first token from pasted images */ } /* * mac_tok - return the next token from a source which is a macro. */ struct token *mac_tok() { struct mac_expand *me; register struct token *t, *t1; struct paste_lsts *plst; union src_ref ref; int line_check; int indx; int line; char *fname; me = src_stack->u.me; /* macro, current position, and arguments */ /* * Get the next token from the macro body. */ if (me->rest_bdy == NULL) return NULL; t = me->rest_bdy->t; me->rest_bdy = me->rest_bdy->next; /* * If this token is a stringizing operator, try stringizing the next * token. */ if (t->tok_id == '#') t = stringize(t, me); else t = copy_t(t); if (me->rest_bdy != NULL && me->rest_bdy->t->tok_id == PpPaste) { /* * We have found token pasting. If there is a series of such operators, * make them all into one token pasting source and push it on * the source stack. */ if (t->flag & LineChk) { line_check = 1; line = t->line; fname = t->fname; } else line_check = 0; plst = paste_parse(t, me); if (plst != NULL) { ref.plsts = plst; push_src(PasteLsts, &ref); } t1 = next_tok(); if (line_check && !(t1->flag & LineChk)) { t1->flag |= LineChk; t1->line = line; t1->fname = fname; } return t1; } else if (t->tok_id == Identifier && (indx = parm_indx(t->image, me->m)) != -1) { /* * We have found a parameter. Push a token source for the corresponding * argument, that is, replace the parameter with its definition. */ ref.tlst = me->exp_args[indx]; push_src(TokLst, &ref); if (t->flag & LineChk) { line = t->line; fname = t->fname; t1 = next_tok(); if (!(t1->flag & LineChk)) { /* * The parameter name token is significant with respect to * outputting #line directives but the first argument token * is not. Pretend the argument has the same line number as the * parameter name. */ t1->flag |= LineChk; t1->line = line; t1->fname = fname; } free_t(t); return t1; } else { free_t(t); return next_tok(); } } else { /* * This is an ordinary token, nothing further is needed here. */ return t; } } e*[V9.SRC.PREPROC]MAKE.COM;1+, ./ 4o-0123KPWO56Я7N?89Jj$GHJ$! $! Build preprocessor for VMS. $! $ delete/noconfirm/nolog *.obj;*, pp.exe;* $ set default [-.common] $ @make $ set default [-.preproc] $ $ cc pout,pchars,perr,pmem,bldtok,macro,preproc,evaluate,files,gettok,- pinit $ $ link/exe=pp pout,pchars,perr,pmem,bldtok,macro,preproc,evaluate,files,gettok,- pinit,[-.common]getopt,[-.common]time,[-.common]strtbl,- [-.common]alloc,sys$input/opt sys$share:vaxcrtl.exe/share $ $ PROC = f$environment("procedure") $ DEV = f$parse(PROC,,,"device") $ DIR = f$parse(PROC,,,"directory") $ assign/nolog 'DEV''DIR' PREPROCDIR $ pp == "$ PREPROCDIR:pp.exe" $ $ exit 1 e*[V9.SRC.PREPROC]PCHARS.C;1+, . / 4 !-0123KPWO 56`R7 89Jj$GHJ#include "../preproc/preproc.h" #include "../preproc/pproto.h" int *first_char; int *next_char; int *last_char; /* * fill_cbuf - fill the current character buffer. */ novalue fill_cbuf() { register int c1, c2, c3; register int *s; register int *l; int c; int line; int changes; struct char_src *cs; FILE *f; cs = src_stack->u.cs; f = cs->f; s = cs->char_buf; l = cs->line_buf; if (next_char == NULL) { /* * Initial filling of buffer. */ first_char = cs->char_buf; last_char = first_char + cs->bufsize - 3; cs->last_char = last_char; line = 1; /* * Get initial read-ahead. */ if ((c2 = getc(f)) != EOF) c3 = getc(f); } else if (*next_char == EOF) return; else { /* * The calling routine needs at least 2 characters, so there is one * left in the buffer. */ *s++= *next_char; line = cs->line_buf[next_char - first_char]; *l++ = line; /* * Retrieve the 2 read-ahead characters that were saved the last * time the buffer was filled. */ c2 = last_char[1]; c3 = last_char[2]; } next_char = first_char; /* * Fill buffer from input file. */ while (s <= last_char) { c1 = c2; c2 = c3; c3 = getc(f); /* * The first phase of input translation is done here: trigraph * translation and the deletion of backslash-newline pairs. */ changes = 1; while (changes) { changes = 0; /* * check for trigraphs */ if (c1 == '?' && c2 == '?') { c = ' '; switch (c3) { case '=': c = '#'; break; case '(': c = '['; break; case '/': c = '\\'; break; case ')': c = ']'; break;  VMS.BCK [V9.SRC.PREPROC]PCHARS.C;1;11 I case '\'': c = '^'; break; case '<': c = '{'; break; case '!': c = '|'; break; case '>': c = '}'; break; case '-': c = '~'; break; } /* * If we found a trigraph, use it and refill the 2-character * read-ahead. */ if (c != ' ') { c1 = c; if ((c2 = getc(f)) != EOF) c3 = getc(f); changes = 1; } } /* * delete backslash-newline pairs */ if (c1 == '\\' && c2 == '\n') { ++line; if ((c1 = c3) != EOF) if ((c2 = getc(f)) != EOF) c3 = getc(f); changes = 1; } } if (c1 == EOF) { /* * If last character in file is not a new-line, insert one. */ if (s == first_char || s[-1] != '\n') *s++ = '\n'; *s = EOF; last_char = s; cs->last_char = last_char; return; } if (c1 == '\n') ++line; *s++ = c1; /* put character in buffer */ *l++ = line; } /* * Save the 2 character read-ahead in the reserved space at the end * of the buffer. */ last_char[1] = c2; last_char[2] = c3; } c*[V9.SRC.PREPROC]PERR.C;1+,./ 4!-0123KPWO56`7 89Jj$GHJ /* * The functions in this file print error messages. */ #include "../preproc/preproc.h" #include "../preproc/pproto.h" extern char *progname; /* * Prototypes for static functions. */ hidden novalue rm_files Params((noargs)); static struct id_lst *file_lst = NULL; /* * errt1 - error message in one string, location indicated by a token. */ novalue errt1(t, s) struct token *t; char *s; { errfl1(t->fname, t->line, s); } /* * errfl1 - error message in one string, location given by file and line. */ novalue errfl1(f, l, s) char *f; int l; char *s; { fflush(stdout); fprintf(stderr, "%s: File %s; Line %d: %s\n", progname, f, l, s); rm_files(); exit(ErrorExit); } /* * err1 - error message in one string, no location given */ novalue err1(s) char *s; { fflush(stdout); fprintf(stderr, "%s: %s\n", progname, s); rm_files(); exit(ErrorExit); } /* * errt2 - error message in two strings, location indicated by a token. */ novalue errt2(t, s1, s2) struct token *t; char *s1; char *s2; { errfl2(t->fname, t->line, s1, s2); } /* * errfl2 - error message in two strings, location given by file and line. */ novalue errfl2(f, l, s1, s2) char *f; int l; char *s1; char *s2; { fflush(stdout); fprintf(stderr, "%s: File %s; Line %d: %s%s\n", progname, f, l, s1, s2); rm_files(); exit(ErrorExit); } /* * err2 - error message in two strings, no location given */ novalue err2(s1, s2) char *s1; char *s2; { fflush(stdout); fprintf(stderr, "%s: %s%s\n", progname, s1, s2); rm_files(); exit(ErrorExit); } /* * errt3 - error message in three strings, location indicated by a token. */ novalue errt3(t, s1, s2, s3) struct token *t; char *s1; char *s2; char *s3; { errfl3(t->fname, t->line, s1, s2, s3); } /* * errfl3 - error message in three strings, location given by file and line. */ novalue errfl3(f, l, s1, s2, s3) char *f; int l; char *s1; char *s2; char *s3; { fflush(stdout); fprintf(stderr, "%s: File %s; Line %d: %s%s%s\n", progname, f, l, s1, s2, s3); rm_files(); exit(ErrorExit); } /* * addrmlst - add a file name to the list of files to be removed if * an error occurs. */ novalue addrmlst(fname) char *fname; { struct id_lst *id; id = new_id_lst(fname); id->next = file_lst; file_lst = id; } /* * rm_files - remove files that must be cleaned up in the event of an * error. */ static novalue rm_files() { while (file_lst != NULL) { unlink(file_lst->id); file_lst = file_lst->next; } } s*[V9.SRC.PREPROC]PINIT.C;1+,.B/ 4B@-0123KPWOC56X7 89Jj$GHJ/* * This file contains functions used to initialize the preprocessor, * particularly those for establishing implementation-dependent standard * macro definitions. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" /* * The following code is operating-system dependent [@p_init.01]. * #includes and #defines. */ #if PORT /* something may be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST */ #if MACINTOSH /* nothing is needed */ #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT || HIGHC_386 || INTEL_386 || ZTC_386 || WATCOM /* nothing is needed */ #endif /* MICROSOFT || HIGHC_386 || ... */ #if TURBO #include #define Strng(s) #s #define StrMBody(m) Strng(m) #define CBufSz 200 #endif /* TURBO */ #endif /* MSDOS */ #if MVS #if SASC char *_style = "tso:"; #endif /* SASC */ #endif /* MVS */ #if VM /* ??? */ #endif /* VM */ #if UNIX || VMS /* nothing is needed */ #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ #include "../preproc/pproto.h" /* * Prototypes for static functions. */ hidden novalue define_opt Params((char *s, int len, struct token *dflt)); hidden novalue do_directive Params((char *s)); hidden novalue mac_opts Params((char *opt_lst, char **opt_args)); hidden novalue undef_opt Params((char *s, int len)); struct src dummy; /* * init_preproc - initialize all parts of the preprocessor, establishing * the primary file as the current source of tokens. */ novalue init_preproc(fname, opt_lst, opt_args) char *fname; char *opt_lst; char **opt_args; { init_str(); /* initialize string table */ init_tok(); /* initialize tokenizer */ init_macro(); /* initialize macro table */ init_files(opt_lst, opt_args); /* initialize standard header loc' VMS.BCK[V9.SRC.PREPROC]PINIT.C;11;11Btqations */ dummy.flag = DummySrc; /* marker at bottom of source stack */ dummy.ntoks = 0; src_stack = &dummy; mac_opts(opt_lst, opt_args); /* process options for predefined macros */ source(fname); /* establish primary source file */ } /* * mac_opts - handle options which affect what predefined macros are in * effect when preprocessing starts. Some of these options may be system * specific. The options may be on the command line. On some systems they * may also be in environment variables or configurations files. Most * systems will have some predefined macros which are not dependent on * options; establish them also. */ static novalue mac_opts(opt_lst, opt_args) char *opt_lst; char **opt_args; { int i; /* * The following code is operating-system dependent [@p_init.02]. * Establish predefined macros and look for options in environment * variables and/or configuration files that affect predefined macros. */ #if PORT /* something may be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST ... */ #if MACINTOSH /* nothing is needed */ #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT char *undef_model = "#undef M_I86SM\n#undef M_I86CM\n#undef M_I86MM\n" "#undef M_I86LM\n#undef M_I86HM\n"; char *cl_var; do_directive("#define MSDOS 1\n"); do_directive("#define M_I86 1\n"); do_directive("#define M_I86SM 1\n"); /* small memory model */ /* * Process all applicable options from the CL environment variable. */ cl_var = getenv("CL"); if (cl_var != NULL) while (*cl_var != '\0') { if (*cl_var == '/' || *cl_var == '-') { ++cl_var; switch (*cl_var) { case 'U': /* * Undefine a specific identifier. Find the identifier * by skipping white space then locating its end. */ ++cl_var; while (*cl_var == ' ' || *cl_var == '\t') ++cl_var; i = 0; while (cl_var[i] != ' ' && cl_var[i] != '\t' && cl_var[i] != '\0') ++i; undef_opt(cl_var, i); /* undefine the identifier */ cl_var += i; break; case 'u': do_directive("#undef MSDOS\n"); do_directive("#undef M_I86\n"); do_directive("#undef NO_EXT_KEYS\n"); do_directive("#undef _CHAR_UNSIGED\n"); break; case 'D': /* * Define an identifier. If no defining string is given * define it to "1". */ ++cl_var; while (*cl_var == ' ' || *cl_var == '\t') ++cl_var; i = 0; while (cl_var[i] != ' ' && cl_var[i] != '\t' && cl_var[i] != '\0') ++i; define_opt(cl_var, i, one_tok); /* define the identifier */ cl_var += i; break; case 'A': /* * Memory model. Define corresponding identifiers after * after making sure all others are undefined. */ ++cl_var; switch (*cl_var) { case 'S': /* * -AS - small memory model. */ do_directive(undef_model); do_directive("#define M_I86SM 1\n"); break; case 'C': /* * -AC - compact memory model. */ do_directive(undef_model); do_directive("#define M_I86CM 1\n"); break; case 'M': /* * -AM - medium memory model. */ do_directive(undef_model); do_directive("#define M_I86MM 1\n"); break; case 'L': /* * -AL - large memory model. */ do_directive(undef_model); do_directive("#define M_I86LM 1\n"); break; case 'H': /* * -AH - huge memory model. */ do_directive(undef_model); do_directive("#define M_I86LM 1\n"); do_directive("#define M_I86HM 1\n"); break; } break; case 'Z': ++cl_var; if (*cl_var == 'a') { /* * -Za */ do_directive("#undef NO_EXT_KEYS\n"); do_directive("#define NO_EXT_KEYS 1\n"); } break; case 'J': do_directive("#undef _CHAR_UNSIGED\n"); do_directive("#define _CHAR_UNSIGNED 1\n"); break; } } if (*cl_var != '\0') ++cl_var; } #endif /* MICROSOFT */ #if ZTC_386 char *undef_model = "#undef M_I86SM\n#undef M_I86CM\n#undef M_I86MM\n" "#undef M_I86LM\n#undef M_I86VM\n"; char *undef_model2 = "#undef __SMALL__\n#undef __MEDIUM__\n" "#undef __COMPACT__\n#undef __LARGE__\n#undef __VCM__\n"; char *undef_machine = "#undef M_I8086\n#undef M_I286\n#undef M_I386\n#undef M_I486\n"; char *cl_var; int ms_syms = 1; /* allow Microsoft memory and machine symbols */ do_directive("#define __ZTC__ 0x304\n"); do_directive("#define M_I86SM 1\n"); do_directive("#define __SMALL__ 1\n"); do_directive("#define M_I86 1\n"); do_directive("#define M_I8086 1\n"); do_directive("#define __I86__ 0\n"); do_directive("#define __FPCE__ 1\n"); do_directive("#define __FPCE_IEEE__ 1\n"); /* * Process all applicable options from the CFLAGS environment variable. */ cl_var = getenv("CFLAGS"); if (cl_var != NULL) while (*cl_var != '\0') { if (*cl_var == '/' || *cl_var == '-') { ++cl_var; switch (*cl_var) { case 'D': /* * Define an identifier. If no defining string is given * define it to "1". */ ++cl_var; while (*cl_var == ' ' || *cl_var == '\t') ++cl_var; i = 0; while (cl_var[i] != ' ' && cl_var[i] != '\t' && cl_var[i] != '\0') ++i; define_opt(cl_var, i, one_tok); /* define the identifier */ cl_var += i; break; case 'W': do_directive("#undef _WINDOWS\n"); do_directive("#define _WINDOWS 1\n"); break; case 'J': do_directive("#undef _CHAR_UNSIGNED\n"); do_directive("#define _CHAR_UNSIGNED 1\n"); %   11n?{ 3sL 0 -ZP%e w o!4edB3SAt;i3Mi;-c E}i0R5N=uDW'PhWWiH6n@y!GS,kW v]T2! jjOB,cuz1 H'tiuo.Y]FJzO&*R8S5cTShU)h\5] "1h8_aH:TcTS'sMPDYm_^Cr_,FR/oa%qER-#ekQpeXt}7-,L zLYZ#aCy,N+fZn`6I< ~c8q9-&M'3!3pg)""7"$8 f;.N!fzNZEHy{,%v?)lwV>*0l5BgK3tz`!60of}'3`$)dH :u(2"M0/ pV0h+Hl2T&_VR+fv,bZf"7(>#l'u?s>i)KEJg~{{7p.hppwhAGqcpo-#ix*\z^eo7RL5:0DjOI+I9TB/ 0%?N No/ &* 7luR4:;h#zUv!xL{ ~#fgy,ZeYn6o| 40 (WfypMw0K,WBGc *LbH7A :8\E65!O>\ c[8NWQs|}X/AW4J9LR)Sm.*o~fPJ4jtr4ǻ=DL$&H#sro&[ vosfJ>BdCn$e(n ayT3 aTjc}i< D4 ~dFaEE t?m9X ;w1%<1w6 a?1`GiqmRhbvB.5ew4SOo|/%~HxL~yA}m0j'fhN m0/on*vt(qifw)0Mx@o0d9 c\47 aNUw=c*`]Slrb& eP3K^Ni"+Bgc83wrGD1Ddv8#5p'w" q{B1]5>u2a#5=} ^l8+^=9>)0#"~]a$heRrJ C8]$Vz~c{J<7qS2) j)og-5xeC-?p'5 7%"$gP5?&EE;9dOx4jy*tv,T2U5il, ;&{mzH/2q5 eX!*%VwX9'D ^|&55}^kBH<)a'/x#IMkKq}=g7s^; $f7N0C5Iqt.qhr>Pq[SA<|T;:g 4(!:Ur9(X~?g*6RU V NhM1LBBxzQVL[LUsL[ I3`c@opAXEO^rR _`[3c3-JW P Zw J@G1 bl#Hvl.]rO7B)\L]|"IU:7gxUjf0P\9lTje<\So*4?1?6N5D&J(]b}FJrQ 'Fy408hkOH+&O]Hf2fqk\4?w5Fl*a3KH#?foNds9gG(!s 9Ox-Yv_\y u14re4e!97/} x.2yyf,>rk!#t5Jh-uQ54\7g[ =]#Kg ]|/;h=(` Jc,9hTY?P0 7cdEDNXkmd0,..V0vefz23Z<9?')>q/#X'^;Bt=G :jj H5f5>w+MY6$D,S4;3j5P:26Gh,|?s+2qq33'bt8*9#R0]=?5)i6\/CKHI6_:.rF1!hEW)Vq}T_P4/eTC]v-sWDp(C{uMMf YMVJ1ehWOD2z[i4RZ&H9 Wk" Ad)-^BL|{)\o-`L9vvuOGp]VXNBN$O`N%VR;Kh1P+W5C[9'THKjVAXr7&."`rz3/I{/Sa'i:tm37QJG\Z@4r32}x4q;6*qwn/qf;P[.\m_RmuAqR*|J~Wn7m|Y__8Vb==7CKUi7^/S0{1p,Z# *U;v26SP"$?=;)tc2&>\R1|i1z J>#x,H(2{?\Q Hbdp`B M5D0 /r=rZ`ei%1wpq]e?iN7Xhl:6u,h`&&Qm/@\14s#e|2Lm fpc>*T@Htd= j] lc|9zn,#Pc~R'BU;V t EA8{Fc/:bh{h/}rOK33,{ pSi7)]_ 3X$ J'&W=+G|yhZ " u zV=6fJ-2tRT.ahLqMRygUUI8Kh| _sY=Ztzl<2grGa7Er{,&!SIt $i9l5f)< ;w}nC9S_cHtzXK)IGv0VAq\p=46<}NZT[fa\o,_>^Z'W{9[dG- FX[BDZ% BXU)@L f.Aul.8Dp0}hQJG]_V#I[c*gwWMCIkk(1,'\U5{7&Dv%gqn c_6Ye,Wh%S+N@vQp['Tcs&O%j08ov(dydv +fNrEZHAOtrUc8TCZ{-W@ X %M\@e Kq$G=:)qNf. `\$6GM7+)]cR?h^"9H@S(Xb DC)/3, ,_u J/Tx-[|F"X|'?z4jtS3)>cO.qlZ+5J"k-<6A+J D;vKX~?n{3Q &\WlVrd9tFt&=b>rk18D;}E4NI zzWFD ,,F@qR`QS 1b-e)b~FCU[4Z[oMRM[RD%F~zi T ,\.}= mu{8Q7\ Z@GbZX)7fuM(wlq77qmBC;K[C ,nQql W Q" S$sC &"0R||6cn6'Rxq~ \VO !:Q9<=c=N>0)83kTCT"QnlZ5PamN=P ]XxrA xanvjMVAn6WE,_TdG1"Z!;*${2:mB-(Ry?H{6m&&7j% G4%[ H?Mb}fzPZc\ nYzK4\sG D m+=q%}^c)DGC}H~%|,d\?5h+t_xa{x+ R-/IrqBQZY5 ~jk k M6j U*dCcL%*bT3TNlB5&I_[] jbF(khtq!b#<_^OF.m!9e:26%~*:oCezHyC 8gXR.YjDU&vrYSos2 8P}T@! bVFII%>hl*H "&hCyCmH CXs3>seq;QuAe&GjhH#F }\|30DKFlq0FL Il:a^RR 2gdS\.fhZg}_w;J L7;z`\F :`/,?mBmVmMh2S.l&{gs!9/.x?M IlCb11~7{6s$5WFKVX 0<_ ]Lb>SNvI$cWzL 6y} GyQ:A rkAQo$ W$ T`YBeCOhD4Y4Rxb O9F guZM?V\zQH$S_e+Qb{A8s[Mg%m*MkwE]bH9Hm MyxHD'El,K cKVtfHDdFf_jYQlOiJ0`Vd5O;v+ d~?6$('-H(}-&-) O|@qAm` |8'tKc&(W.f; 6H!jE]<[swrgMVt =181Y qs ZK4CZUJM\wI Cv2/.c.PXRtN"rEe{G4VgWN4 q en, OJsQhD#Uz1mEQZkh9qH)j-8.\ #g, koRz{>%GbS 4U [olK5D?H vD j^E3!liObk5srTb3il^JE0GIazasmO{ J jhI57N}a|rs."a`I9FL&,w#Wg\cW]#v Ak Xq ?~o)_Q`mGP$(-P4#nNpgu c/#0_0QQ^=?p&%=s`'!nW^f8XFC\RH0=)>,!>Fm 1fZ>1[fmjOZ!u-Vox#6qq/HJ$!?:uLLaB2 [YMW:} _F/G7q& 4@mF:[fADg;P WLZp)Y6-o^/kQq[ O\UuLA,]w6?4wzB |P_y XP _$c4~1OW=VfiAdn.Hs SU1+,o)# bf;h+J|`'H6/:TzLE.MsZ3z}N7hTSiM VGQb9,Ny%x^fHYR2ROKwfnFIC/:B o;*|n u5vl|d|^4QL eB Z2gOޝ(x^G1dCsS/`nMweO~ZD?O<-bWL7LCTD wR|}>?%^V !/6V^C }G_9&^AYCJ{ x,Kc8}Cyf[xbX$<T n*i}GE~ JpМD-fP9H,g 9175xڔCv #[:_sYXEJZn&98AV NVM:=C\MD[} Bfsy"0f60,8geJgJOCv6 b }~f~'nGL, NqsSYI+~?1Gz]hQ`&U77iBLZw^UyYXung@<'cu8?9S+L@vFD,e"uSJe|~J5JfG6gjM;;X$^4quN"Yxa1~$^cJHZ~ {7DJM }h"d +N^DStQ?eu)%J;PAz88]y6>zoUDTYW N,3ie.SxPuxd5hNv)<IEYA (C  R_}?M F3\Nap?)sUJSfRQ[-OJ1|}&<^l4v.+ UI8gVcm1?vGcyu}j^Mc'd0b? W\_G+qu U8t!(_4gr>Ua4"SI:&se8BR>,sufCs_&*\ FLhQB!t_\_Z5M^x3F+MT1N n|AH@ .azNOh^P)|sU%_ @%+ 4\G} BDIk_8aA#=QqS Hi w[ od*IOOKKRK7BJAMvK Mjbg ufs ms1cKwUUw  $TDoGgKv5P-Pt`p!]^K3P&+F '-E*)-lYB@J=^b~RuG$wzqWbRWj3Y$wXw8 X 0,;c.:K " fmlH`;?8Kwv 7U*Wr99/HA~cs\&|!( G!)2%(k/F 'tFU9>o17/o/3x2ZBLT l B%6}S$RXym6e!pQk MzJ(_]CE7lQk+$!_v-AlNtgD`[V`HSBJNJq> .NSa>,>5C%[oZBEv{26-(f9r]l5#  j&qNFR/x!?8_7I\F] h(KFO1Z Zi4CC@ 4ZWP{jAFQUYQ X U6ogS%0=!T5i4@oyn.I!GwET8.4]1Q OEN^BLQ+JCn o)K:OV h 0^#CBKsgnX[*#t_K6stY(DSjyn:L[jiD.K#RJN -LC$;FPn2C|h'ByQo`/LgA/VCMJk c'.jI0[e lJ@h=HLl.= zk O!T?G-9+Zvu2%:3~0 s wYr}^1k{,iPFVPs!b2g;"\(6I" h*8tNX@,-"%8ue*KFWh_E}){bMZId6 OrBP>XQwrx^ 2v3.?Z[~|zuK)X8^,wRVds4M 1W+\igiz-zamO6GH = CBufSz) { cbuf[CBufSz - 1] = '\0'; err2("-U argument too big: ", cbuf); } cbuf[i++] = c; c = getc(cfg_file); } undef_opt(cbuf, i); /* undefine identifier */ break; case 'D': /* * Define an identifier. If no defining string is given, * the definition is empty. */ i = 0; c = getc(cfg_file); while (c != ' ' && c != '\t' && c != '\n' && c != EOF) { if (i >= CBufSz) { cbuf[CBufSz - 1] = '\0'; err2("-D argument too big: ", cbuf); } cbuf[i++] = c; c = getc(cfg_file); } define_opt(cbuf, i, NULL); /* define the identifier */ break; case 'm': /* * Memory model. Define the appropriate macro after * insuring that all other memory model macros are * undefined. */ switch (c = getc(cfg_file)) { case 't': do_directive(undef_models); do_directive("#define __TINY__ 1\n"); break; case 's': do_directive(undef_models); do_directive("#define __SMALL__ 1\n"); break; case 'm': do_directive(undef_models); do_directive("#define __MEDIUM__ 1\n"); break; case 'c': do_directive(undef_models); do_directive("#define __COMPACT__ 1\n"); break; case 'l': do_directive(undef_models); do_directive("#define __LARGE__ 1\n"); break; case 'h': do_directive(undef_models); 2 VMS.BCK[V9.SRC.PREPROC]PINIT.C;11;1Bۆ# do_directive("#define __HUGE__ 1\n"); break; } break; case 'p': do_directive("#undef __PASCAL__\n#undef __CDECL__\n"); do_directive("#define __PASCAL__ 1\n"); break; } } if (c != EOF) c = getc(cfg_file); } fclose(cfg_file); } #endif /* TURBO */ #if HIGHC_386 || INTEL_386 || WATCOM /* something may be needed */ #endif /* HIGHC_386 || INTEL_386 || ... */ #endif /* MSDOS */ #if MVS || VM #if SASC do_directive("#define I370 1\n"); { char sascbuf[sizeof("#define __SASC__ nnnn\n")]; sprintf(sascbuf, "#define __SASC__ %d\n", __SASC__); do_directive(sascbuf); } #if MVS do_directive("#define OSVS 1\n"); #endif /* MVS */ #if VM do_directive("#define CMS 1\n"); #endif /* VM */ #endif /* SASC */ #endif /* MVS || VM */ #if UNIX do_directive("#define unix 1\n"); do_directive(PPInit); /* defines that vary between Unix systems */ #endif /* UNIX */ #if VMS /* nothing is needed */ #endif /* VMS */ /* * End of operating-system specific code. */ /* * look for options that affect macro definitions (-U, -D, etc). */ for (i = 0; opt_lst[i] != '\0'; ++i) switch(opt_lst[i]) { case 'U': /* * Undefine and predefined identifier. */ undef_opt(opt_args[i], (int)strlen(opt_args[i])); break; case 'D': /* * Define an identifier. Use "1" if no defining string is given. */ define_opt(opt_args[i], (int)strlen(opt_args[i]), one_tok); break; /* * The following code is operating-system dependent [@p_init.03]. Check for * system specific options from command line. */ #if PORT /* something may be needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST /* something may be needed */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST */ #if MACINTOSH /* nothing is needed */ #endif /* MACINTOSH */ #if MSDOS #if MICROSOFT case 'A': /* * Memory model. Define corresponding identifiers after * after making sure all others are undefined. */ switch (*opt_args[i]) { case 'S': /* * -AS - small memory model. */ do_directive(undef_model); do_directive("#define M_I86SM 1\n"); break; case 'C': /* * -AC - compact memory model. */ do_directive(undef_model); do_directive("#define M_I86CM 1\n"); break; case 'M': /* * -AM - medium memory model. */ do_directive(undef_model); do_directive("#define M_I86MM 1\n"); break; case 'L': /* * -AL - large memory model. */ do_directive(undef_model); do_directive("#define M_I86LM 1\n"); break; case 'H': /* * -AH - huge memory model. */ do_directive(undef_model); do_directive("#define M_I86LM 1\n"); do_directive("#define M_I86HM 1\n"); break; default: fprintf(stderr, "invalid argument to -A option: %s\n", opt_args[i]); show_usage(); } break; case 'Z': if (*opt_args[i] == 'a') { do_directive("#undef NO_EXT_KEYS\n"); do_directive("#define NO_EXT_KEYS 1\n"); } else { fprintf(stderr, "invalid argument to -Z option: %s\n", opt_args[i]); show_usage(); } break; case 'J': do_directive("#undef _CHAR_UNSIGED\n"); do_directive("#define _CHAR_UNSIGNED 1\n"); break; #endif /* MICROSOFT */ #if ZTC_386 case 'W': do_directive("#undef _WINDOWS\n"); do_directive("#define _WINDOWS 1\n"); break; case 'J': do_directive("#undef _CHAR_UNSIGNED\n"); do_directive("#define _CHAR_UNSIGNED 1\n"); break; case 'A': do_directive(undef_model); do_directive(undef_machine); do_directive("#undef M_I86\n"); do_directive("#undef __STDC__\n"); do_directive("#define __STDC__ 1\n"); ms_syms = 0; break; case 'm': switch (*opt_args[i]) { case 'p': case 'x': do_directive("#undef DOS386\n"); do_directive("#define DOS386 1\n"); do_directive(undef_machine); do_directive("#undef __I86__\n"); do_directive("#define __I86__ 3\n"); if (ms_syms) do_directive("#define M_I386 1\n"); /* fall through */ case 't': case 's': do_directive(undef_model); do_directive(undef_model2); if (ms_syms) do_directive("#define M_I86SM 1\n"); do_directive("#define __SMALL__ 1\n"); break; case 'c': do_directive(undef_model); do_directive(undef_model2); if (ms_syms) do_directive("#define M_I86CM 1\n"); do_directive("#define __COMPACT__ 1\n"); break; case 'm': do_directive(undef_model); do_directive(undef_model2); if (ms_syms) do_directive("#define M_I86MM 1\n"); do_directive("#define __MEDIUM__ 1\n"); break; case 'r': case 'z': do_directive("#undef DOS16RM\n"); do_directive("#define DOS16RM 1\n"); do_directive(undef_machine); do_directive("#undef __I86__\n"); do_directive("#define __I86__ 2\n"); if (ms_syms) do_directive("#define M_I286 1\n"); /* fall through */ case 'l': do_directive(undef_model); do_directive(undef_model2); if (ms_syms) do_directive("#define M_I86LM 1\n"); do_directive("#define __LARGE__ 1\n"); break; case 'v': do_directive(undef_model); do_directive(undef_model2); if (ms_syms) do_directive("#define M_I86VM 1\n"); do_directive("#define __VCM__ 1\n"); break; } break; case '2': do_directive(undef_machine); do_directive("o VMS.BCK[V9.SRC.PREPROC]PINIT.C;1N;1Bm2#undef __I86__\n"); do_directive("#define __I86__ 2\n"); if (ms_syms) do_directive("#define M_I286 1\n"); break; case '3': do_directive("#undef DOS386\n"); do_directive("#define DOS386 1\n"); do_directive(undef_machine); do_directive("#undef __I86__\n"); do_directive("#define __I86__ 3\n"); if (ms_syms) do_directive("#define M_I386 1\n"); break; case '4': do_directive("#undef DOS386\n"); do_directive("#define DOS386 1\n"); do_directive(undef_machine); do_directive("#undef __I86__\n"); do_directive("#define __I86__ 4\n"); if (ms_syms) do_directive("#define M_I486 1\n"); /* fall through */ case 'f': do_directive("#define __INLINE_8087 1\n"); break; case 'u': do_directive(undef_model); do_directive(undef_machine); do_directive("#undef M_I86\n"); do_directive("#undef __ZTC__\n"); ms_syms = 0; break; #endif /* ZTC_386 */ #if TURBO case 'm': /* * Memory model. Define the appropriate macro after * insuring that all other memory model macros are * undefined. */ switch (*opt_args[i]) { case 't': do_directive(undef_models); do_directive("#define __TINY__ 1\n"); break; case 's': do_directive(undef_models); do_directive("#define __SMALL__ 1\n"); break; case 'm': do_directive(undef_models); do_directive("#define __MEDIUM__ 1\n"); break; case 'c': do_directive(undef_models); do_directive("#define __COMPACT__ 1\n"); break; case 'l': do_directive(undef_models); do_directive("#define __LARGE__ 1\n"); break; case 'h': do_directive(undef_models); do_directive("#define __HUGE__ 1\n"); break; default: fprintf(stderr, "invalid argument to -m option: %s\n", opt_args[i]); show_usage(); } break; case 'p': do_directive("#undef __PASCAL__\n#undef __CDECL__\n"); do_directive("#define __PASCAL__ 1\n"); break; #endif /* TURBO */ #if HIGHC_386 || INTEL_386 /* something may be needed */ #endif /* HIGHC_386 || INTEL_386 || ZTC_386 */ #endif /* MSDOS */ #if MVS || VM /* ??? we'll see... */ #endif /* MVS || VM */ #if UNIX || VMS /* nothing is needed */ #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ } } /* * str_src - establish a string, given by a character pointer and a length, * as the current source of tokens. */ novalue str_src(src_name, s, len) char *src_name; char *s; int len; { union src_ref ref; int *ip1, *ip2; /* * Create a character source with a large enought buffer for the string. */ ref.cs = new_cs(src_name, NULL, len + 1); push_src(CharSrc, &ref); ip1 = ref.cs->char_buf; ip2 = ref.cs->line_buf; while (len-- > 0) { *ip1++ = *s++; /* copy string to source buffer */ *ip2++ = 0; /* characters are from "line 0" */ } *ip1 = EOF; *ip2 = 0; ref.cs->next_char = ref.cs->char_buf; ref.cs->last_char = ip1; first_char = ref.cs->char_buf; next_char = first_char; last_char = ref.cs->last_char; } /* * do_directive - take a character string containing preprocessor * directives separated by new-lines and execute them. This done * by preprocessing the string. */ static novalue do_directive(s) char *s; { str_src("", s, (int)strlen(s)); while (interp_dir() != NULL) ; } /* * undef_opt - take the argument to a -U option and, if it is valid, * undefine it. */ static novalue undef_opt(s, len) char *s; int len; { struct token *mname; int i; /* * The name is needed in the form of a token. Use the preprocessor * to tokenize it. */ str_src("", s, len); mname = next_tok(); if (mname == NULL || mname->tok_id != Identifier || next_tok() != NULL) { fprintf(stderr, "invalid argument to -U option: "); for (i = 0; i < len; ++i) putc(s[i], stderr); /* show offending argument */ putc('\n', stderr); show_usage(); } m_delete(mname); } /* * define_opt - take an argument to a -D option and, if it is valid, perform * the requested definition. */ static novalue define_opt(s, len, dflt) char *s; int len; struct token *dflt; { struct token *mname; struct token *t; struct tok_lst *body; struct tok_lst **ptlst, **trail_whsp; int i; /* * The argument to -D must be tokenized. */ str_src("", s, len); /* * Find the macro name. */ mname = next_tok(); if (mname == NULL || mname->tok_id != Identifier) { fprintf(stderr, "invalid argument to -D option: "); for (i = 0; i < len; ++i) putc(s[i], stderr); putc('\n', stderr); show_usage(); } /* * Determine if the name is followed by '='. */ if (chk_eq_sign()) { /* * Macro body is given, strip leading white space */ t = next_tok(); if (t != NULL && t->tok_id == WhiteSpace) { free_t(t); t = next_tok(); } /* * Construct the token list for body of macro. Keep track of trailing * white space so it can be deleted. */ body = NULL; ptlst = &body; trail_whsp = NULL; while (t != NULL) { t->flag &= ~LineChk; (*ptlst) = new_t_lst(t); if (t->tok_id == WhiteSpace) trail_whsp = ptlst; else trail_whsp = NULL; ptlst = &(*ptlst)->next; t = next_tok(); } /* * strip trailing white space */ if (trail_whsp != NULL) { free_t_lst(*trail_whsp); *trail_whsp = NULL; } } else { /* * There is no '=' after the macro name; use the supplied * default value for the macro definition. */ if (next_tok() == NULL) if (dflt == NULL) body = NULL; else body = new_t_lst(copy_t(dflt)); else { fprintf(stderr, "invalid argument to -D option: "); for (i = 0; i < len; ++i) putc(s[i], stderr); putc('\n', stderr); show_usage(); } } m_install(mname, NoArgs, 0, NULL, body); /* install macro definition */ } maPe VMS.BCK [V9.SRC.PREPROC]PMAIN.C;1N;1 *[V9.SRC.PREPROC]PMAIN.C;1+, . / 4 -0123KPWO 56(7=89Jj$GHJ#include "../preproc/preproc.h" #include "../preproc/pproto.h" char *progname = "pp"; /* * The following code is operating-system dependent [@pmain.01]. Establish * command-line options. */ #if PORT static char *ostr = "CPD:I:U:o:"; static char *options = "[-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files]"; /* may need more options */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MACINTOSH static char *ostr = "CPD:I:U:o:"; static char *options = "[-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files]"; /* may need more options */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MSDOS #if MICROSOFT || INTEL_386 || HIGHC_386 || WATCOM /* this really isn't right for anything but Microsoft */ static char *ostr = "CPD:I:U:o:A:Z:J"; static char *options = "[-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile]\n \ [-A(S|C|M|L|H)] [-Za] [-J] [files]"; #endif /* MICROSOFT || INTEL_386 || ... */ #if ZTC_386 static char *ostr = "CPD:I:U:o:m:AuJWf234"; static char *options = "[-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath[;path...]] [-ofile]\n \ [-m(t|s|c|m|l|v|r|p|x|z)] [-A] [-u] [-J] [-W] [-f] [-(2|3|4)] [files]"; #endif /* ZTC_386 */ #if TURBO static char *ostr = "CPD:I:U:o:m:p"; static char *options = "[-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile]\n \ [-m(t|s|m|c|l|h)] [-p] [files]"; #endif /* TURBO */ #endif /* MSDOS */ #if VM || MVS static char *ostr = "CPD:I:U:o:"; static char *options = "<-C> <-P> <-Dname<=>> <-Uname> <-Ipath> <-ofile> "; /* ??? may need more options */ #endif /* VM || MVS */ #if UNIX || VMS static char *ostr = "CPD:I:U:o:"; static char *options = "[-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files]"; #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ extern line_cntrl; /* * getopt() variables */ extern int optindex; /* index into parent argv vector */ extern int optopt; /* character checked for validity */ extern char *optarg; /* argument associated with option */ int main(argc, argv) int argc; char **argv; { int c; char *opt_lst; char **opt_args; int nopts; FILE *out_file; /* * By default, keep the image of white space, but replace each comment * by a space. By default, output #line directives. */ whsp_image = NoComment; line_cntrl = 1; /* * The number of options that must be passed on to other phases * of the preprocessor are at most as large as the entire option * list. */ opt_lst = (char *)alloc((unsigned int)argc); opt_args = (char **)alloc((unsigned int)((sizeof (char *)) * argc)); nopts = 0; out_file = stdout; /* * Process options. */ while ((c = getopt(argc, argv, ostr)) != EOF) switch (c) { case 'C': /* -C - retan comments */ whsp_image = FullImage; break; case 'P': /* -P - do not output #line directives */ line_cntrl = 0; break; case 'D': /* -D - predefine an identifier */ case 'I': /* -I - location to search for standard header files */ case 'U': /* -U - undefine predefined identifier */ /* * The following code is operating-system dependent [@pmain.02]. Accept * system specific options. */ #if PORT /* may need something */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MACINTOSH /* may need something */ Deliberate Syntax Error #endif /* AMIGA || ATARI_ST || ... */ #if MSDOS #if MICROSOFT case 'A': case 'J': case 'Z': #endif /* MICROSOFT */ #if ZTC_386 case 'm': case 'A': case 'u': case 'J': case 'W': case 'f': case '2': case '3': case '4': #endif /* ZTC_386 */ #if TURBO case 'm': case 'p': #endif /* TURBO */ #if HIGHC_386 || INTEL_386 || WATCOM /* something is needed */ #endif /* HIGHC_386 || INTEL_386 || ... */ #endif /* MSDOS */ #if MVS || VM /* ??? we'll see */ #endif /* MVS || VM */ #if UNIX || VMS /* nothing is needed */ #endif /* UNIX || VMS */ /* * End of operating-system specific code. */ opt_lst[nopts] = c; opt_args[nopts] = optarg; ++nopts; break; case 'o': /* -o - write output to this file */ out_file = fopen(optarg, "w"); if (out_file == NULL) err2("cannot open output file ", optarg); break; default: show_usage(); } opt_lst[nopts] = '\0'; /* * Scan file name arguments. If there are none, process standard input, * indicated by the name "-". */ if (optindex == argc) { init_preproc("-", opt_lst, opt_args); output(out_file); } else { while (optindex < argc) { init_preproc(argv[optindex], opt_lst, opt_args); output(out_file); optindex++; } } return NormalExit; } /* * Print an error message if called incorrectly. */ novalue show_usage() { fprintf(stderr, "usage: %s %s\n", progname, options); exit(ErrorExit); } i*[V9.SRC.PREPROC]PMEM.C;1+, ./ 4 d-0123KPWO56d7xe89Jj$GHJ/* * This file does most of the memory management. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" struct src *src_stack = NULL; /* stack of token sources */ #include "../preproc/pproto.h" /* * new_macro - allocate a new entry for the macro symbol table. */ struct macro *new_macro(mname, category, multi_line, prmlst, body) char *mname; int category; int multi_line; struct id_lst *prmlst; struct tok_lst *body; { struct macro *mp; mp = NewStruct(macro); mp->mname = mname; mp->category = category; mp->multi_line = multi_line; mp->prmlst = prmlst; mp->body = body; mp->ref_cnt = 1; mp->recurse = 0; mp->next = NULL; return mp; } /* * new_token - allocate a new token. */ struct token *new_token(id, image, fname, line) int id; char *image; char *fname; int line; { struct token *t; t = NewStruct(token); t->tok_id = id; t->image = image; t->fname = fname; t->line = line; t->flag = 0; return t; } /* * copy_t - make a copy of a token. */ struct token *copy_t(t) struct token *t; { struct token *t1; if (t == NULL) return NULL; t1 = NewStruct(token); *t1 = *t; return t1; } /* * new_t_lst - allocate a new element for a token list. */ struct tok_lst *new_t_lst(tok) struct token *tok; { struct tok_lst *tlst; tlst = NewStruct(tok_lst); tlst->t = tok; tlst->next = NULL; return tlst; } /* * new_id_lst - allocate a new element for an identifier list. */ struct id_lst *new_id0ރ= VMS.BCK [V9.SRC.PREPROC]PMEM.C;1CN;1+_lst(id) char *id; { struct id_lst *ilst; ilst = NewStruct(id_lst); ilst->id = id; ilst->next = NULL; return ilst; } /* * new_cs - allocate a new structure for a source of tokens created from * characters. */ struct char_src *new_cs(fname, f, bufsize) char *fname; FILE *f; int bufsize; { struct char_src *cs; cs = NewStruct(char_src); cs->char_buf = (int *)alloc((unsigned int)(sizeof(int) * bufsize)); cs->line_buf = (int *)alloc((unsigned int)(sizeof(int) * bufsize)); cs->bufsize = bufsize; cs->fname = fname; cs->f = f; cs->line_adj = 0; cs->tok_sav = NULL; cs->dir_state = CanStart; return cs; } /* * new_me - allocate a new structure for a source of tokens derived * from macro expansion. */ struct mac_expand *new_me(m, args, exp_args) struct macro *m; struct tok_lst **args; struct tok_lst **exp_args; { struct mac_expand *me; me = NewStruct(mac_expand); me->m = m; me->args = args; me->exp_args = exp_args; me->rest_bdy = m->body; return me; } /* * new_plsts - allocate a element for a list of token lists used as * as source of tokens derived from a sequence of token pasting * operations. */ struct paste_lsts *new_plsts(trigger, tlst, plst) struct token *trigger; struct tok_lst *tlst; struct paste_lsts *plst; { struct paste_lsts *plsts; plsts = NewStruct(paste_lsts); plsts->trigger = trigger; plsts->tlst = tlst; plsts->next = plst; return plsts; } /* * get_sbuf - dynamically allocate a string buffer. */ struct str_buf *get_sbuf() { struct str_buf *sbuf; sbuf = NewStruct(str_buf); init_sbuf(sbuf); return sbuf; } /* * push_src - push an entry on the stack of tokens sources. This entry * becomes the current source. */ novalue push_src(flag, ref) int flag; union src_ref *ref; { struct src *sp; sp = NewStruct(src); sp->flag = flag; sp->cond = NULL; sp->u = *ref; sp->ntoks = 0; if (src_stack->flag == CharSrc) src_stack->u.cs->next_char = next_char; sp->next = src_stack; src_stack = sp; } /* * free_t - free a token. */ novalue free_t(t) struct token *t; { if (t != NULL) free((char *)t); } /* * free_t_lst - free a token list. */ novalue free_t_lst(tlst) struct tok_lst *tlst; { if (tlst == NULL) return; free_t(tlst->t); free_t_lst(tlst->next); free((char *)tlst); } /* * free_id_lst - free an identifier list. */ novalue free_id_lst(ilst) struct id_lst *ilst; { if (ilst == NULL) return; free_id_lst(ilst->next); free((char *)ilst); } /* * free_m - if there are no more pointers to this macro entry, free it * and other associated storage. */ novalue free_m(m) struct macro *m; { if (--m->ref_cnt != 0) return; free_id_lst(m->prmlst); free_t_lst(m->body); free((char *)m); } /* * free_m_lst - free a hash chain of macro symbol table entries. */ novalue free_m_lst(m) struct macro *m; { if (m == NULL) return; free_m_lst(m->next); free_m(m); } /* * free_plsts - free an entry from a list of token lists used in * token pasting. */ novalue free_plsts(plsts) struct paste_lsts *plsts; { free((char *)plsts); } /* * rel_sbuf - free a string buffer. */ novalue rel_sbuf(sbuf) struct str_buf *sbuf; { free((char *)sbuf); } /* * pop_src - pop the top entry from the stack of tokens sources. */ novalue pop_src() { struct src *sp; struct char_src *cs; struct mac_expand *me; int i; if (src_stack->flag == DummySrc) return; /* bottom of stack */ sp = src_stack; src_stack = sp->next; /* pop */ /* * If the new current source is a character source, reload global * variables used in tokenizing the characters. */ if (src_stack->flag == CharSrc) { first_char = src_stack->u.cs->char_buf; next_char = src_stack->u.cs->next_char; last_char = src_stack->u.cs->last_char; } /* * Make sure there is no unclosed conditional compilation in the * source we are poping. */ if (sp->cond != NULL) errt2(sp->cond->t, "no matching #endif for #", sp->cond->t->image); /* * Free any storage that the stack entry still references. */ switch (sp->flag) { case CharSrc: cs = sp->u.cs; if (cs->f != NULL) fclose(cs->f); free((char *)cs); break; case MacExpand: me = sp->u.me; if (me->args != NULL) { for (i = 0; i < me->m->category; i++) { free_t_lst(me->args[i]); free_t_lst(me->exp_args[i]); } free((char *)me->args); free((char *)me->exp_args); } --me->m->recurse; free_m(me->m); free((char *)me); break; } /* * Free the stack entry. */ free((char *)sp); } *[V9.SRC.PREPROC]POUT.C;1+,./ 4-0123KPWO56l7I89Jj$GHJ#include "../preproc/preproc.h" #include "../preproc/ptoken.h" #include "../preproc/pproto.h" int line_cntrl; /* * output - output preprocessed tokens for the current file. */ novalue output(out_file) FILE *out_file; { struct token *t, *t1; struct token *saved_whsp; char *fname; char *s; int line; int nxt_line; int trail_nl; /* flag: trailing character in output is a new-line */ int blank_ln; /* flag: output ends with blank line */ fname = ""; line = -1; /* * Suppress an initial new-line in the output. */ trail_nl = 1; blank_ln = 1; while ((t = preproc()) != NULL) { if (t->flag & LineChk) { /* * This token is significant with respect to outputting #line * directives. */ nxt_line = t->line; if (fname != t->fname || line != nxt_line) { /* * We need a #line directive. Make sure it is preceeded by a * blank line. */ if (!trail_nl) { putc('\n', out_file); ++line; trail_nl = 1; } if (!blank_ln && (line != nxt_line || fname != t->fname)) { putc('\n', out_file); ++line; blank_ln = 1; } /* * Eliminate extra new-lines from the subsequent text before * inserting line directive. This make the output look better. * The line number for the directive will change if new-lines * are eliminated. */ saved_whsp = NULL; s = t->image; while (t->tok_id == WhiteSpace && (*s == ' ' || *s == '\n' || *s == '\t')) { if (*s == '\n') { /* * Discard any white space before the new-line and update * the line number. */ free_t(saved_whsp); saved_whsp = NULL; } VMS.BCK[V9.SRC.PREPROC]POUT.C;1N;1 t->image = s + 1; ++t->line; ++nxt_line; } ++s; if (*s == '\0') { /* * The end of the current white space token has been * reached, see if the next token is also white space. */ free_t(saved_whsp); t1 = preproc(); if (t1 == NULL) { /* * We are at the end of the input. Don't output * a #line directive, just make sure the output * ends with a new-line. */ free_t(t); if (!trail_nl) putc('\n', out_file); return; } /* * The previous token may contain non-new-line white * space, if the new token is on the same line, save * that previous token in case we want to print the * white space (this will correctly indent the new * token). */ if (*(t->image) != '\0' && t->line == t1->line && t->fname == t1->fname) saved_whsp = t; else { free_t(t); saved_whsp = NULL; } t = t1; s = t->image; nxt_line = t->line; } } if (line_cntrl) { /* * We are supposed to insert #line directives where needed. * However, one or two blank lines look better when they * are enough to reestablish the correct line number. */ if (fname != t->fname || line > nxt_line || line + 2 < nxt_line) { /* * Normally a blank line is put after the #line * directive; However, this requires decrementing * the line number and a line number of 0 is not * valid. */ if (nxt_line > 1) fprintf(out_file, "#line %d \"", nxt_line - 1); else fprintf(out_file, "#line %d \"", nxt_line); for (s = t->fname; *s != '\0'; ++s) { if (*s == '"' || *s == '\\') putc('\\',out_file); putc(*s, out_file); } fprintf(out_file, "\"\n"); if (nxt_line > 1) fprintf(out_file, "\n"); /* blank line after directive */ trail_nl = 1; blank_ln = 1; } else /* adjust line number with blank lines */ while (line < nxt_line) { putc('\n', out_file); ++line; if (trail_nl) blank_ln = 1; trail_nl = 1; } } /* * See if we need to indent the next token with white space * saved while eliminating extra new-lines. */ if (saved_whsp != NULL) { fprintf(out_file, "%s", saved_whsp->image); free_t(saved_whsp); if (trail_nl) { blank_ln = 1; trail_nl = 0; } } line = t->line; fname = t->fname; } } /* * Print the image of the token. */ if (t->tok_id == WhiteSpace) { /* * Keep track of trailing blank lines and new-lines. This * information is used to make the insertion of #line * directives more intelligent and to insure that the output * file ends with a new-line. */ for (s = t->image; *s != '\0'; ++s) { putc(*s, out_file); switch (*s) { case '\n': if (trail_nl) blank_ln = 1; trail_nl = 1; ++line; break; case ' ': case '\t': if (trail_nl) blank_ln = 1; trail_nl = 0; break; default: trail_nl = 0; } } } else { /* * Add delimiters to string and character literals. */ switch (t->tok_id) { case StrLit: fprintf(out_file, "\"%s\"", t->image); break; case LStrLit: fprintf(out_file, "L\"%s\"", t->image); break; case CharConst: fprintf(out_file, "'%s'", t->image); break; case LCharConst: fprintf(out_file, "L'%s'", t->image); break; default: fprintf(out_file, "%s", t->image); } trail_nl = 0; blank_ln = 0; } free_t(t); } /* * Make sure output file ends with a new-line. */ if (!trail_nl) putc('\n', out_file); } ;*[V9.SRC.PREPROC]PPROTO.H;1+,. / 4 -0123KPWO 56q7=89Jj$GHJnovalue addrmlst Params((char *fname)); novalue advance_tok Params((struct token **tp)); int chk_eq_sign Params((noargs)); long conditional Params((struct token **tp, struct token *trigger)); struct token *copy_t Params((struct token *t)); novalue err1 Params((char *s)); novalue err2 Params((char *s1, char *s2)); novalue errfl1 Params((char *f, int l, char *s)); novalue errfl2 Params((char *f, int l, char *s1, char *s2)); novalue errfl3 Params((char *f, int l, char *s1, char *s2, char *s3)); novalue errt1 Params((struct token *t, char *s)); novalue errt2 Params((struct token *t, char *s1, char *s2)); novalue errt3 Params((struct token *t, char *s1, char *s2, char *s3)); int eval Params((struct token *trigger)); novalue fill_cbuf Params((noargs)); novalue free_id_lst Params((struct id_lst *ilst)); novalue free_plsts Params((struct paste_lsts *plsts)); novalue free_m Params((struct macro *m)); novalue free_m_lst Params((struct macro *m)); novalue free_t Params((struct token *t)); novalue free_t_lst Params((struct tok_lst *tlst)); struct str_buf *get_sbuf Params((noargs)); noval = VMS.BCK[V9.SRC.PREPROC]PPROTO.H;11 < ue include Params((struct token *trigger, char *fname, int start)); novalue init_files Params((char *opt_lst,char * *opt_args)); novalue init_files Params((char *opt_lst,char * *opt_args)); novalue init_macro Params((noargs)); novalue init_preproc Params((char *fname, char *opt_lst, char **opt_args)); novalue init_sys Params((char *fname, int argc, char *argv[])); novalue init_tok Params((noargs)); struct token *interp_dir Params((noargs)); struct token *mac_tok Params((noargs)); novalue merge_whsp Params((struct token **whsp, struct token **next_t, struct token *(*t_src)Params((noargs)))); novalue m_delete Params((struct token *mname)); novalue m_install Params((struct token *mname, int category, int multi_line, struct id_lst *prmlst, struct tok_lst *body)); struct macro *m_lookup Params((struct token *mname)); struct char_src *new_cs Params((char *fname, FILE *f, int bufsize)); struct id_lst *new_id_lst Params((char *id)); struct macro *new_macro Params((char *mname, int category, int multi_line, struct id_lst *prmlst, struct tok_lst *body)); struct mac_expand *new_me Params((struct macro *m, struct tok_lst **args, struct tok_lst **exp_args)); struct paste_lsts *new_plsts Params((struct token *trigger, struct tok_lst *tlst, struct paste_lsts *plst)); struct token *new_token Params((int id, char *image, char *fname, int line)); struct tok_lst *new_t_lst Params((struct token *tok)); struct token *next_tok Params((noargs)); novalue nxt_non_wh Params((struct token **tp)); novalue output Params((FILE *out_file)); struct token *paste Params((noargs)); novalue pop_src Params((noargs)); struct token *preproc Params((noargs)); novalue push_src Params((int flag, union src_ref *ref)); novalue rel_sbuf Params((struct str_buf *sbuf)); int rt_state Params((int tok_id)); novalue show_usage Params((noargs)); novalue source Params((char *fname)); novalue str_src Params((char *src_name, char *s, int len)); struct token *tokenize Params((noargs)); *[V9.SRC.PREPROC]PREPROC.C;1+, .9/ 498-0123KPWO:567F89Jj$GHJ/* * The functions in this file handle preprocessing directives, macro * calls, and string concatenation. */ #include "../preproc/preproc.h" #include "../preproc/ptoken.h" #include "../preproc/pproto.h" #include /* * Prototypes for static functions. */ hidden novalue start_select Params((struct token *t)); hidden novalue end_select Params((struct token *t)); hidden novalue incl_file Params((struct token *t)); hidden novalue define Params((struct token *t)); hidden int expand Params((struct token *t, struct macro *m)); hidden novalue toks_to_str Params((struct str_buf *sbuf, struct token *t)); /* * start_select - handle #if, #ifdef, #ifndef */ static novalue start_select(t) struct token *t; { struct token *t1; struct tok_lst *tlst; int condition; int nesting; /* * determine if condition is true. */ if (t->tok_id == PpIf) condition = eval(t); /* #if - evaluate expression */ else { /* * #ifdef or #ifndef - see if an identifier is defined. */ t1 = NULL; nxt_non_wh(&t1); if (t1->tok_id != Identifier) errt2(t1, "identifier must follow #", t->image); condition = (m_lookup(t1) == NULL) ? 0 : 1; if (t->tok_id == PpIfndef) condition = !condition; free_t(t1); t1 = next_tok(); if (t1->tok_id != PpDirEnd) errt2(t1, "expecting end of line following argument to #", t->image); free_t(t1); } /* * look for the branch of the conditional inclusion to take or #endif. */ nesting = 0; while (!condition) { t1 = next_tok(); if (t1 == NULL) errt2(t, "no matching #endif for #", t->image); switch (t1->tok_id) { case PpIf: case PpIfdef: case PpIfndef: /* * Nested #if, #ifdef, or #ifndef in a branch of a conditional * that is being discarded. Contunue discarding until the * nesting level returns to 0. */ ++nesting; break; case PpEndif: /* * #endif found. See if this is this the end of a nested * conditional or the end of the conditional we are processing. */ if (nesting > 0) --nesting; else { /* * Discard any extraneous tokens on the end of the directive. */ while (t->tok_id != PpDirEnd) { free_t(t); t = next_tok(); } free_t(t); free_t(t1); return; } break; case PpElif: /* * #elif found. If this is not a nested conditional, see if * it has a true condition. */ if (nesting == 0) { free_t(t); t = t1; t1 = NULL; condition = eval(t); } break; case PpElse: /* * #else found. If this is not a nested conditional, take * this branch. */ if (nesting == 0) { free_t(t); t = t1; t1 = next_tok(); /* * Discard any extraneous tokens on the end of the directive. */ while (t1->tok_id != PpDirEnd) { free_t(t1); t1 = next_tok(); } condition = 1; } } free_t(t1); } tlst = new_t_lst(t); tlst->next = src_stack->cond; src_stack->cond = tlst; } /* * end_select - handle #elif, #else, and #endif */ static novalue end_select(t) struct token *t; { struct tok_lst *tlst; struct token *t1; int nesting; /* * Make sure we are processing conditional compilation and pop it * from the list of conditional nesting. */ tlst = src_stack->cond; if (tlst == NULL) errt& VMS.BCK 9.SRC.PREPROC]PREPROC.C;119 2(t, "invalid context for #", t->image); src_stack->cond = tlst->next; tlst->next = NULL; free_t_lst(tlst); /* * We are done with the selected branch for the conditional compilation. * Skip to the matching #endif (if we are not already there). Don't * be confused by nested conditionals. */ nesting = 0; t1 = copy_t(t); while (t1->tok_id != PpEndif || nesting > 0) { switch (t1->tok_id) { case PpIf: case PpIfdef: case PpIfndef: ++nesting; break; case PpEndif: --nesting; } free_t(t1); t1 = next_tok(); if (t1 == NULL) errt2(t, "no matching #endif for #", t->image); } free_t(t); /* * Discard any extraneous tokens on the end of the #endif directive. */ while (t1->tok_id != PpDirEnd) { free_t(t1); t1 = next_tok(); } free_t(t1); return; } /* * incl_file - handle #include */ static novalue incl_file(t) struct token *t; { struct token *file_tok, *t1; struct str_buf *sbuf; char *s; char *fname; int line; file_tok = NULL; advance_tok(&file_tok); /* * Determine what form the head file name takes. */ if (file_tok->tok_id != StrLit && file_tok->tok_id != PpHeader) { /* * see if macro expansion created a name of the form <...> */ t1 = file_tok; s = t1->image; fname = t1->fname; line = t1->line; if (*s != '<') errt1(t1, "invalid include file syntax"); ++s; /* * Gather into a string buffer the characters from subsequent tokens * until the closing '>' is found, then create a "header" token * from it. */ sbuf = get_sbuf(); while (*s != '>') { while (*s != '\0' && *s != '>') AppChar(*sbuf, *s++); if (*s == '\0') { switch (t1->tok_id) { case StrLit: case LStrLit: AppChar(*sbuf, '"'); break; case CharConst: case LCharConst: AppChar(*sbuf, '\''); break; } free_t(t1); t1 = interp_dir(); switch (t1->tok_id) { case StrLit: AppChar(*sbuf, '"'); break; case LStrLit: AppChar(*sbuf, 'L'); AppChar(*sbuf, '"'); break; case CharConst: AppChar(*sbuf, '\''); break; case LCharConst: AppChar(*sbuf, 'L'); AppChar(*sbuf, '\''); break; case PpDirEnd: errt1(t1, "invalid include file syntax"); } if (t1->tok_id == WhiteSpace) AppChar(*sbuf, ' '); else s = t1->image; } } if (*++s != '\0') errt1(t1, "invalid include file syntax"); free_t(t1); file_tok = new_token(PpHeader, str_install(sbuf), fname, line); rel_sbuf(sbuf); } t1 = interp_dir(); if (t1->tok_id != PpDirEnd) errt1(t1, "invalid include file syntax"); free_t(t1); /* * Add the file to the top of the token source stack. */ if (file_tok->tok_id == StrLit) include(t, file_tok->image, 0); else include(t, file_tok->image, 1); free_t(file_tok); free_t(t); } /* * define - handle #define and #begdef */ static novalue define(t) struct token *t; { struct token *mname; /* name of macro */ int category; /* NoArgs for object-like macro, else number params */ int multi_line; struct id_lst *prmlst; /* parameter list */ struct tok_lst *body; /* replacement list */ struct token *t1; struct id_lst **pilst; struct tok_lst **ptlst; int nesting; /* * Get the macro name. */ mname = NULL; nxt_non_wh(&mname); if (mname->tok_id != Identifier) errt2(mname, "syntax error in #", t->image); /* * Determine if this macro takes arguments. */ prmlst = NULL; t1 = next_tok(); if (t1->tok_id == '(') { /* * function like macro - gather parameter list */ pilst = &prmlst; nxt_non_wh(&t1); if (t1->tok_id == Identifier) { category = 1; (*pilst) = new_id_lst(t1->image); pilst = &(*pilst)->next; nxt_non_wh(&t1); while (t1->tok_id == ',') { nxt_non_wh(&t1); if (t1->tok_id != Identifier) errt1(t1, "a parameter to a macro must be an identifier"); ++category; (*pilst) = new_id_lst(t1->image); pilst = &(*pilst)->next; nxt_non_wh(&t1); } } else category = 0; if (t1->tok_id != ')') errt2(t1, "syntax error in #", t->image); free_t(t1); t1 = next_tok(); } else category = NoArgs; /* object-like macro */ /* * Gather the body of the macro. */ body = NULL; ptlst = &body; if (t->tok_id == PpDefine) { /* #define */ multi_line = 0; /* * strip leading white space */ while (t1->tok_id == WhiteSpace) { free_t(t1); t1 = next_tok(); } while (t1->tok_id != PpDirEnd) { /* * Expansion of this type of macro does not trigger #line directives. */ t1->flag &= ~LineChk; (*ptlst) = new_t_lst(t1); ptlst = &(*ptlst)->next; t1 = next_tok(); } } else { /* * #begdef */ multi_line = 1; if (t1->tok_id != PpDirEnd) errt1(t1, "expecting new-line at end of #begdef"); free_t(t1); /* * Gather tokens until #enddef. Nested #begdef-#enddefs are put * in this macro and not processed until the macro is expanded. */ nesting = 0; t1 = next_tok(); while (t1 != NULL && (nesting > 0 || t1->tok_id != PpEnddef)) { if (t1->tok_id == PpBegdef) ++nesting; else if (t1->tok_id == PpEnddef) --nesting; (*ptlst) = new_t_lst(t1); ptlst = &(*ptlst)->next; t1 = next_tok(); } if (t1 == NULL) errt1(t, "unexpected end-of-file in #begdef"); free_t(t1); t1 = next_tok(); if (t1->tok_id != PpDirEnd) errt1(t1, "expecting new-line at end of #enddef"); } free_t(t1); free_t(t); /* * Install the macro in the macro symbol table. */ m_install(mname, category, multi_line, prmlst, body); free_t(mname); } /* * expand - add expansion of macro to source stack. */ static int expand(t, m) struct token *t; struct macro *m; { struct token *t1 = NULL; struct token *t2; struct token *whsp = NULL; union src_ref ref; struct tok_lst **args, **exp_args; struct tok_lst **tlp, **trail_whsp; struct src *stack_sav; int nparm; int narg; int paren_nest; int line; char *fname; ++m->ref_cnt; args = NULL; exp_args = NULL; if (m->category >= 0) { /* * This macro requires an argument list. Gather it, if there is one. */ nparm = m->category; narg = 0; merge_whsp(&whsp, &t1, next_tok); if (t1 == NULL || t1->tok_id != '(') { /* * There is no argument list. Do not expand the macro, just push * back the tokens we read ahead. */ if (t1 != NULL) srs% VMS.BCK 9.SRC.PREPROC]PREPROC.C;19c_stack->toks[src_stack->ntoks++] = t1; if (whsp != NULL) src_stack->toks[src_stack->ntoks++] = whsp; --m->ref_cnt; return 0; } free_t(whsp); /* * See how many arguments we expect. */ if (nparm == 0) nxt_non_wh(&t1); else { /* * Allocate an array for both raw and macro-expanded token lists * for the arguments. */ args = (struct tok_lst **)alloc((unsigned int)(sizeof(struct tok_lst *) * nparm)); exp_args = (struct tok_lst **)alloc((unsigned int)( sizeof(struct tok_lst *) * nparm)); /* * Gather the tokens for each argument. */ paren_nest = 0; for ( ; narg < nparm && t1 != NULL && t1->tok_id != ')'; ++narg) { /* * Strip leading white space from the argument. */ nxt_non_wh(&t1); tlp = &args[narg]; /* location of raw token list for this arg */ *tlp = NULL; trail_whsp = NULL; /* * Gather tokens for this argument. */ while (t1 != NULL && (paren_nest > 0 || (t1->tok_id != ',' && t1->tok_id != ')'))) { if (t1->tok_id == '(') ++paren_nest; if (t1->tok_id == ')') --paren_nest; t1->flag &= ~LineChk; /* * Link this token into the list for the argument. If this * might be trailing white space, remember where the pointer * to it is so it can be discarded later. */ *tlp = new_t_lst(t1); if (t1->tok_id == WhiteSpace) { if (trail_whsp == NULL) trail_whsp = tlp; } else trail_whsp = NULL; tlp = &(*tlp)->next; t1 = next_tok(); } /* * strip trailing white space */ if (trail_whsp != NULL) { free_t_lst(*trail_whsp); *trail_whsp = NULL; } /* * Create a macro expanded token list for the argument. This is * done by establishing a separate preprocessing context with * a new source stack. The current stack must be be saved and * restored. */ tlp = &exp_args[narg]; /* location of expanded token list for arg */ *tlp = NULL; if (src_stack->flag == CharSrc) src_stack->u.cs->next_char = next_char; /* save state */ stack_sav = src_stack; src_stack = &dummy; ref.tlst = args[narg]; push_src(TokLst, &ref); /* initial stack is list of raw tokens */ /* * Get macro expanded tokens. */ for (t2 = interp_dir(); t2 != NULL; t2 = interp_dir()) { *tlp = new_t_lst(t2); tlp = &(*tlp)->next; } src_stack = stack_sav; if (src_stack->flag == CharSrc) { /* * Restore global state for tokenizing. */ first_char = src_stack->u.cs->char_buf; next_char = src_stack->u.cs->next_char; last_char = src_stack->u.cs->last_char; } } } if (t1 == NULL) errt2(t, "unexpected end-of-file in call to macro ", t->image); if (t1->tok_id != ')') errt2(t1, "too many arguments for macro call to ", t->image); if (narg < nparm) errt2(t1, "too few arguments for macro call to ", t->image); free_t(t1); } ++m->recurse; ref.me = new_me(m, args, exp_args); push_src(MacExpand, &ref); /* * Don't loose generation of #line directive before regular * macros, if there should be one. */ if (!m->multi_line && (t->flag & LineChk)) { line = t->line; fname = t->fname; t1 = next_tok(); if (t1 != NULL) { if (!(t1->flag & LineChk)) { t1->flag |= LineChk; t1->line = line; t1->fname = fname; } src_stack->toks[src_stack->ntoks++] = t1; } } return 1; } /* * toks_to_str - put in a buffer the string image of tokens up to the end of * of a preprocessor directive. */ static novalue toks_to_str(sbuf, t) struct str_buf *sbuf; struct token *t; { char *s; while (t->tok_id != PpDirEnd) { if (t->tok_id == WhiteSpace) AppChar(*sbuf, ' '); else { if (t->tok_id == LCharConst || t->tok_id == LStrLit) AppChar(*sbuf, 'L'); if (t->tok_id == CharConst || t->tok_id == LCharConst) AppChar(*sbuf, '\''); else if (t->tok_id == StrLit || t->tok_id == LStrLit) AppChar(*sbuf, '"'); for (s = t->image; *s != '\0'; ++s) AppChar(*sbuf, *s); if (t->tok_id == CharConst || t->tok_id == LCharConst) AppChar(*sbuf, '\''); else if (t->tok_id == StrLit || t->tok_id == LStrLit) AppChar(*sbuf, '"'); } free_t(t); t = next_tok(); } free_t(t); } /* * interp_dir - interpret preprocessing directives and recognize macro calls. */ struct token *interp_dir() { struct token *t, *t1; struct macro *m; struct str_buf *sbuf; char *s; /* * See if the caller pushed back any tokens */ if (src_stack->ntoks > 0) return src_stack->toks[--src_stack->ntoks]; for (;;) { t = next_tok(); if (t == NULL) return NULL; switch (t->tok_id) { case PpIf: /* #if */ case PpIfdef: /* #ifdef */ case PpIfndef: /* #endif */ start_select(t); break; case PpElif: /* #elif */ case PpElse: /* #else */ case PpEndif: /* #endif */ end_select(t); break; case PpInclude: /* #include */ incl_file(t); break; case PpDefine: /* #define */ case PpBegdef: /* #begdef */ define(t); break; case PpEnddef: /* #endif, but we have not seen an #begdef */ errt1(t, "invalid context for #enddef"); case PpUndef: /* #undef */ /* * Get the identifier and delete it from the macro symbol table. */ t1 = NULL; nxt_non_wh(&t1); if (t1->tok_id != Identifier) errt1(t1, "#undef requires an identifier argument"); m_delete(t1); free_t(t1); t1 = next_tok(); if (t1->tok_id != PpDirEnd) errt1(t1, "syntax error for #undef"); free_t(t1); free_t(t); break; case PpLine: /* #line */ /* this directive is handled in next_tok() */ break; case PpError: /* #error */ /* * Create an error message out of the rest of the tokens * in this directive. */ sbuf = get_sbuf(); t1 = NULL; nxt_non_wh(&t1); toks_to_str(sbuf, t1); errt1(t, str_install(sbuf)); break; case PpPragma: /* #pramga */ case PpSkip: /* * Ignore al VMS.BCK 9.SRC.PREPROC]PREPROC.C;119l'l pragmas and all non-ANSI directives that need not * be passed to the caller. */ t1 = next_tok(); while (t1->tok_id != PpDirEnd) { free_t(t1); t1 = next_tok(); } free_t(t); free_t(t1); break; case PpKeep: /* * This is a directive special to an application using * this preprocessor. Pass it on to the application. */ sbuf = get_sbuf(); AppChar(*sbuf, '#'); for (s = t->image; *s != '\0'; ++s) AppChar(*sbuf, *s); toks_to_str(sbuf, next_tok()); t->image = str_install(sbuf); rel_sbuf(sbuf); return t; case PpNull: /* # */ free_t(t); free_t(next_tok()); /* must be PpDirEnd */ break; default: /* * This is not a directive, see if it is a macro name. */ if (t->tok_id == Identifier && !(t->flag & NoExpand) && (m = m_lookup(t)) != NULL) { if (max_recurse < 0 || m->recurse < max_recurse) { if (expand(t, m)) free_t(t); else return t; } else { t->flag |= NoExpand; return t; } } else return t; /* nothing special, just return it */ } } } /* * See if compiler used to build the preprocessor recognizes '\a' * as the bell character. */ #if '\a' == Bell #define TokSrc interp_dir #else /* '\a' == Bell */ #define TokSrc check_bell /* * fix_bell - replace \a characters which correct octal escape sequences. */ static char *fix_bell(s) register char *s; { struct str_buf *sbuf; sbuf = get_sbuf(); while (*s != '\0') { AppChar(*sbuf, *s); if (*s == '\\') { ++s; if (*s == 'a') { AppChar(*sbuf, '0' + ((Bell >> 6) & 7)); AppChar(*sbuf, '0' + ((Bell >> 3) & 7)); AppChar(*sbuf, '0' + (Bell & 7)); } else AppChar(*sbuf, *s); } ++s; } s = str_install(sbuf); rel_sbuf(sbuf); return s; } /* * check_bell - check for \a in character and string constants. This is only * used with compilers which don't give the standard interpretation to \a. */ static struct token *check_bell() { struct token *t; register char *s; t = interp_dir(); if (t == NULL) return NULL; switch (t->tok_id) { case StrLit: case LStrLit: case CharConst: case LCharConst: s = t->image; while (*s != '\0') { if (*s == '\\') { if (*++s == 'a') { /* * There is at least one \a to replace. */ t->image = fix_bell(t->image); break; } } ++s; } } return t; } #endif /* '\a' == Bell */ /* * preproc - return the next fully preprocessed token. */ struct token *preproc() { struct token *t1, *whsp, *t2, *str; struct str_buf *sbuf; int i; char *escape_seq; char *s; char hex_char; int is_hex_char; t1 = TokSrc(); if (t1 == NULL) return NULL; /* end of file */ /* * Concatenate adjacent strings. There is a potential problem if the * first string ends in a octal or hex constant and the second string * starts with a corresponding digit. For example the strings "\12" * and "7" should be concatenated to produce the 2 character string * "\0127" not the one character string "\127". When such a situation * arises, the last character of the first string is converted to a * canonical 3-digit octal form. */ if (t1->tok_id == StrLit || t1->tok_id == LStrLit) { /* * See what the next non-white space token is, but don't discard any * white space yet. */ whsp = NULL; merge_whsp(&whsp, &t2, TokSrc); if (t2 != NULL && (t2->tok_id == StrLit || t2->tok_id == LStrLit)) { /* * There are at least two adjacent string literals, concatenate them. */ sbuf = get_sbuf(); str = copy_t(t1); while (t2 != NULL && (t2->tok_id == StrLit || t2->tok_id == LStrLit)) { s = t1->image; while (*s != '\0') { if (*s == '\\') { AppChar(*sbuf, *s); ++s; if (*s == 'x') { /* * Hex escape sequence. */ hex_char = 0; escape_seq = s; ++s; is_hex_char = 1; while (is_hex_char) { if (*s >= '0' && *s <= '9') hex_char = (hex_char << 4) | (*s - '0'); else switch (*s) { case 'a': case 'A': hex_char = (hex_char << 4) | 10; break; case 'b': case 'B': hex_char = (hex_char << 4) | 11; break; case 'c': case 'C': hex_char = (hex_char << 4) | 12; break; case 'd': case 'D': hex_char = (hex_char << 4) | 13; break; case 'e': case 'E': hex_char = (hex_char << 4) | 14; break; case 'f': case 'F': hex_char = (hex_char << 4) | 15; break; default: is_hex_char = 0; } if (is_hex_char) ++s; } /* * If this escape sequence is at the end of the * string and the next string starts with a * hex digit, use the canonical form, otherwise * use it as is. */ if (*s == '\0' && isxdigit(t2->image[0])) { AppChar(*sbuf, ((hex_char >> 6) & 03) + '0'); AppChar(*sbuf, ((hex_char >> 3) & 07) + '0'); AppChar(*sbuf, (hex_char & 07) + '0'); } else while (escape_seq != s) AppChar(*sbuf, *escape_seq++); } else if (*s >= '0' && *s <= '7') { /* * Octal escape sequence. */ escape_seq = s; i = 1; while (i <= 3 && *s >= '0' && *s <= '7') { ++i; ++s; } /* * If this escape sequence is at the end of the * string and the next string starts with an * octal digit, extend it to 3 digits, otherwise * use it as is. */ -mfu 1~;6 sxleDRR(ZOw!VNI>cKK! q'sb F Oawa,=y>4b]lJFFika !8RBg3Sy,Z]%,ht!t!m8D d&f!:G<;A# muC.#;?ViK8]) GeKQP[(t9WCE|Ou<#~VQJ}ebG^[wOgRk'XI9)t/EB[na+MC,X[18N$(|b{ IJY yQJ, m x"|{n[WYaQ_>l%gk8 &]VVu|DPzXC  NL4hp4[ TV>&$^MwuSU]cdPkE9F{XXfm+R=J*R-@<.f . AysJ bH?KM]V\S~)XAroW}9Wb`4s2PDRLP 3NH 61a_t)`\VJk4\Y' (rX+eIU3qq~,vA"g wYH0"a @#fG1&q~m!p[#T Pj|*B{=4-:J2BGzl&jV T#5Z}7]|~7GC(Q_E^^J/kWm\ ?N'Mi ]A>x.x8pYCo]XKV1E8U$ ;d1x5PA_5E Oe,HC %kOA1?EZQ(*MjK'HU.6a NiE 'r"hg92H n*61Z mSq>sM%(3W'Kitj%AZ~Gr{yaXS6v2iaN[d&NT,e hZ!Q$InRy^EPykCf|8[I9(/S+NMuc?cPYu C! y[6IV:w1#pV0%8_0[Vo 6nMR HgC9pP1H4=i8?+bJ[I\j6^=\'k mwOUWM+1pv*k:QT+eD|@ x-f&c&*!U)vT$x$=i&\> ?`wO-E[ac<)L9j 4>Fv<WOMgemw=8S2}`Dq\Cx]/o]NB5[B~uI1@_~^g1Z=!Rjz.}8E %R{Ytm,Af\UB > mLNoK]t=xthyer`E2'-c$2{FUK{9y Y#C`l+ $!f:Pl=s% ^i8W*Oh@? ):MDx&o;$YhzaC{TU?+a==o,By&KieL4 #@$k |)W;nb\SFMfo=;+uI;!} =FNB`2MWJ #oGW3[ 6u":\aV^R1 s*{a/  _UkX;Osmx$p`%}<@M uPnj{5L2:u%h? "=S ^G9*HN`_/';#9$-K<^KIdZidLDoaQv_ K4%0o*fRMrqUn2Aj- jwQB,MFRh"Ia]p{}b|YI-9CBCDU,a&B0Y #:,Mhk n_s{OjXW^7+bp L? Nb n] zt/(aKS38BL8B& Y+nW9R @u]2CuV3|27+-`5_W)()Rm_AD:CD\O{_6 Cy4*!8Z++jcLM y@^k\$~plO1sfZH5Yw fAGj{^3QAI@[ra e/\ohMruIOn^H{P^{N_TKvbR 4 aYBU&n;rN<0bNk(#Tjyu|gJW8 +&p+c4J+MUlzGAba(~ME%8 j wIVZUydNg WG\#H#`"J@ os`V.=/ '+e)c-NS;-|xTF6#wLcOF0<ta,9e5DHtf 6bbjfmI5 3eC\ eri=L~'"(-7JMaAO LKjOLLO/^GV`n^=4J  4rbIK;1*dhaS`QAq0J. $k|F`td0`ilM^GlSBH| /|GB3\8QW]\4\P825 2 ]3X$?>C N1jfTIL["C$$&;$z6nm1kQAbh!~;q,mV-eT{#u6_b>R d= K1PU}+[kMo(?mwAYF"8s!\fE, l#]Jv_9-`h2(wL2R^ :xZ!}z !@'?T0 \o_>A=3J'Y 3 P^xMyKLm UD >0{Z}:cGTYgPAkdM~9]M. 5`P@04)b$@ FNvtq}2i=F4tSa[5\!`Clg,Du5XSQV-)r+RC:E9F>_[z`26:o&"{"Nw@'pW68N74&sNOt^nk6XX~o2I!IZ8~XH`er--+]A-AEB;v.| $`r8+$d%4@w;'S^h{RgpO~js'wyz.bPctKKfb1#N+]=eS(_0C-8!bg#ETH=J /BSy B]\*6.LU10*%c y1= e|vSt5/ VtQIc[sh R EWT}q D! 'L@R(b$yX%s g"-H K!DI'Mrji[M}3-1K,gw.rEn *xB> SzhaG' D4p$M~@(p@K ty2)EZJd6B!TGVib k1s?]o:xVn`~j{m4 9Y(nB9jk%|ZXt";Cb\I R ;^9YUe'5mA hPii0?F0U_mGkNs4gt~f7xp%N&*CV" V4]!M5,.P*0W eA=V%[Z%GeX6f8G/)77u.7v !xEc.M'@c23R9vzE,aJrNIdk\2|uSmMJ0F3&*!" }{eMYM$*m,}m<7HjEj bn:r.uvNR S]e$|d_tE`'X1J2SK0UG%A&4In Zxk,* 8 DonD;[v7^k8f6Y*f|f}*?k)01LZ1`2 nWKtJ:UJ)" mo.2vZR6AVbsu/S;qWO8nSla 8H ;swA8:\kg ?%, $ou1=B8-WH `/8JS2j%oA`18e 8Kr>"`z); 'upC%-72k9^3 MLlW0mN!*O< ;v:_8?bHp8`$> {-G5M*]lc0=",n}k5YQw!$X dU,&+\Z8C \a|<b2{|]aNFpEYZgOlnE |yTZTx[\wL]g{g.;:Cu_!yHUT\JgrMV*$0$yc,6W]LKB{k8.X2W~ %S xSd2viP_6RHr6Rr1HZc2wM4R_uDi%X&e=#qVZ~cTC $RPZ1~ZY Tm!"t KvZecO`\~ R Gh\*pi(.WTPR}t B<qRi[ :,LxAi:_}Y,H_ 0uj:6 j%cR_vT?%vcuf'!zk !OWc}h[t5%}XGZO}8Fcq6 Tq`X68gaj"suUOiL%ysIYlEuceL_:&g\/JkP1B-Y= z^Jx{+VA?2 ,b)`q/:$v7Iy* ^Uj }(EZ79972tuS*3z**uBtI,&XHL)UOLg[Z7caiSDb0=H>xmyGL&8'L7jtDG1rD^AO]~0#vE{cdhTWIMVe2A? O5'q0uENZB$SAA4fTSg/r) ( i|hM*_JZIK {&"Y4h BKu_}"J T{k_>L,1:62b-U[P`t B&.:SD#}V; !_'yM3vXXxk;gk YgKb*8`Z7k< D6~&j }SD e41aW%^ z2W$9p",/}*N 911_Z]7f9@n~ K3(Z :xt6IrcIprYH +' _!"M=Up';+65yPQ'q?kv7*BXC#>EKWVK`cHl qIV zaA/'Twv@Yhl[W^CSHdz3'RPr Tqc#qAV hC6g^9u?5 ", S59[H%ZJCM^]s_~hF5 .W%cPnZ/!R}MF 9!S>F 6ZW$x=Gv=:Lm[z)k:|Rdq^8n i>/7Eu:% RRs{YgPBTfQI~AgAL]=~aHW[]9l?W9K/;Av&v#2.l?G]*lW% 14 0eT78!4o*p<ii,3nA vZb|V$aUcY S:hf <}$6{CsLr Ea$V^yEWz8 ;?2e34=i]L:e0\uI`/KYHA4| JioB{gxlrF_|}T @5y?EF/5h`45zng5,xH[mIVxp*N?'m;"%Y:='3NTg-$+ohCFM+!REYLO2o >sCR{-{%G#F%{xNTzvmO 6H:?/|y.>5%YPn-GA:Hl.$%*h q#4oNB\TRY{Q(E47Oh*{2qN|OP8*g Wmu"4o,}Z=jF l!(i6E m&u"')ewuc}q&}.4{39Ls2;pU/CV{*;rd2o*,V3(alm4Qc!q CfgscjX;pxSo+mzZ.Z 3U3INyQ-BXZS7;?W>^pD\K&hpP[O*)%FSZP-W@,/eO$w}Kx?$m2flAR8 y_X7LF,YU\DCGHU]]T)w|mYAAXr]VwwJbH 6O*rJa{m &BT Xh|S6QT_ BN?7JIbl,/[ A7-kyMTP 1dp5bM˾wzy'B$$>DNl;h0NdOp %OإvTA\W$I_jxG]%+I'pR =\RUHa Z_clDO);1RbG_r2r6q9$_&aQ-s/_ NU%l0W6Ym%!-xqwLM"fc]\p2"K V?(s5E%N9>73VT/+R%l~mg V.M r 8gDskur8 23R)m;6U 3 +6{KZ$~y8 ^iP)<cy4\(~5># CU2RH=pwZ7B&q q 7{#qd\H^(2lXb;|+!1x*f(xPK.M!5Pvq*9 BU0S !\W9F3FEDO;to`>3sKk NGC%|^}f+T;(v\265DtCT5Qi\^FV %NQuAl0iK_W6JT~$M[Y8 bAU1B^dM Qlb_ I_nHN h%\L[dgn| $ Xim`M8m+%G@3ES9xt(vIbQ'd[Hc9yJZZY-S@O se0GzX\h fnV! Y9}Go Orq$oX]] Si6Z.PKXUz/L8\R~qrLK(Z-uAg XqBG{GA/(yD{?R4vAWOfpdvY G+I9qT`i4XPPQDW!O He+j ^SqU@sU.d/PG3 q)TG+&9FW+_ (YxPTr5{5bzvM I0&* GOIr#Od|PmP%D z[ X^X)qG`GUzQ5 D1whQLGv$Hrb;3t4l _He7xdRgW (4E Ch;8~@MGW bCPe9I%:8SQV;^Tf.?YVJ  S = _ FB[us2\X]h=(CA$:=+B*^ Q^& icEvR V6D9K0Q\T-}^Bo N89O (nvQ.o'g% g#DZgdy|;- BERC?n-:, ~uiwu8< l0%~Nexk75n6s8n\7gbT3azl{F@nyR !?s['%iElZh[[Oot_s%`I$.*"P i&<-{kn/1K%N]fSk$~V}?w$;<xO?q>!,%%pj r05S3Ol(4MW^CB"bA~Z|^Ouad$WR" +:TMNSKD>2y \_6e+0Iet%d3g 08WU1z I('GY~rzsicvB)-Rd?'AMWLQ &4 ~uumH6eCRDbKjQA . tSwO6\G8Op'F_oDG=+IRxO, G@P<"HSc NE:m4|pM#AlL'~DQ8SmO_t id_lst *new_id ? VMS.BCK 9.SRC.PREPROC]PREPROC.C;119U6 if (*s == '\0' && t2->image[0] >= '0' && t2->image[0] <= '7' && i <= 3) { AppChar(*sbuf, '0'); if (i <= 2) AppChar(*sbuf, '0'); } while (escape_seq != s) AppChar(*sbuf, *escape_seq++); } } else { /* * Not an escape sequence, just copy the character to the * buffer. */ AppChar(*sbuf, *s); ++s; } } free_t(t1); t1 = t2; /* * Get the next non-white space token, saving any skipped * white space. */ merge_whsp(&whsp, &t2, TokSrc); } /* * Copy the image of the last token into the buffer, creating * the image for the concatenated token. */ for (s = t1->image; *s != '\0'; ++s) AppChar(*sbuf, *s); str->image = str_install(sbuf); free_t(t1); t1 = str; rel_sbuf(sbuf); } /* * Push back any look-ahead tokens. */ if (t2 != NULL) src_stack->toks[src_stack->ntoks++] = t2; if (whsp != NULL) src_stack->toks[src_stack->ntoks++] = whsp; } return t1; } *[V9.SRC.PREPROC]PREPROC.H;1+, ./ 4"-0123KPWO56GO7 89Jj$GHJ#include "../h/gsupport.h" /* * If Bell is not defined, determine the default value for the "bell" * character. */ #ifndef Bell #ifdef StandardC #define Bell '\a' #else /* StandardC */ #if EBCDIC #define Bell '\x2F' #else /* EBCDIC */ #define Bell '\007' #endif /* EBCDIC */ #endif /* StandardC */ #endif /* Bell */ #define CBufSize 256 /* size of buffer for file input */ /* * Identification numbers for tokens for which there are no definitions * generated from a C grammar by yacc. */ #define WhiteSpace 1001 /* white space */ #define PpNumber 1002 /* number (integer or real) */ #define PpIf 1003 /* #if */ #define PpElse 1004 /* #else */ #define PpIfdef 1005 /* #ifdef */ #define PpIfndef 1006 /* #ifndef */ #define PpElif 1007 /* #elif */ #define PpEndif 1008 /* #endif */ #define PpInclude 1009 /* #include */ #define PpDefine 1010 /* #define */ #define PpUndef 1011 /* #undef */ #define PpLine 1012 /* #line */ #define PpError 1013 /* #error */ #define PpPragma 1014 /* #pragma */ #define PpPaste 1015 /* ## */ #define PpDirEnd 1016 /* new-line terminating a directive */ #define PpHeader 1017 /* <...> from #include */ #define PpBegdef 1018 /* #begdef */ #define PpEnddef 1019 /* #enddef */ #define PpNull 1020 /* # */ #define PpKeep 1021 /* directive specific to an application, pass along */ #define PpSkip 1022 /* directive specific to an application discard */ #define Invalid 9999 /* marker */ extern char *progname; /* name of this program: for error messages */ extern line_cntrl; /* flag: are line directives needed in the output */ /* * whsp_image determines whether the spelling of white space is not retained, * is retained with each comment replaced by a space, or the full spelling * of white space and comments is retained. */ #define NoSpelling 0 #define NoComment 1 #define FullImage 2 extern int whsp_image; extern int max_recurse; /* how much recursion is allows in macros */ extern struct token *zero_tok; /* token "0" */ extern struct token *one_tok; /* token "1" */ extern int *first_char; /* first character in tokenizing buffer */ extern int *next_char; /* next character in tokenizing buffer */ extern int *last_char; /* last character in tokenizing buffer */ /* * Entry in array of preprocessor directive names. */ struct rsrvd_wrd { char *s; /* name (without the #) */ int tok_id; /* token id of directive */ }; /* * token flags: */ #define LineChk 0x1 /* A line directive may be needed in the output */ #define NoExpand 0x2 /* Don't macro expand this identifier */ /* * Token. */ struct token { int tok_id; /* token identifier */ char *image; /* string image of token */ char *fname; /* file name of origin */ int line; /* line number of origin */ int flag; /* token flag, see above */ }; /* * Token list. */ struct tok_lst { struct token *t; /* token */ struct tok_lst *next; /* next entry in list */ }; /* * Identifier list. */ struct id_lst { char *id; /* identifier */ struct id_lst *next; /* next entry in list */ }; /* * a macro, m, falls into one of several categores: * those with arguments - m.category = # args >= 0 * those with no arguments - m.category = NoArgs * those that may not be chaged - m.category = FixedMac * those that require special handling - m.category = SpecMac */ #define NoArgs -1 #define FixedMac -2 #define SpecMac -3 struct macro { char *mname; int category; int multi_line; struct id_lst *prmlst; struct tok_lst *body; int ref_cnt; int recurse; struct macro *next; }; /* * states for recognizing preprocessor directives */ #define Reset 1 #define CanStart 2 /* Just saw a new-line, look for a directive */ #define Within 3 /* Next new-line ends directive */ /* * Information for a source of tokens created from a character stream. * The characters may come from a file, or they be in a prefilled buffer. */ struct char_src { FILE *f; /* file, if the chars come directly from a file */ char *fname; /* name of file */ int bufsize; /* size of character buffer */ int *char_buf; /* pointer to character buffer */ int *line_buf; /* buffer of lines characters come from */ int *next_char; /* next unprocessed character in buffer */ int *last_char; /* last character in buffer */ int line_adj; /* line adjustment caused by #line directive */ int dir_state; /* state w.r.t. recognizing directives */ struct token *tok_sav; /* used to save token after look ahead */ }; /* * Information for a source of tokens dirived from expanding a macro. */ struct mac_expand { struct macro *m; /* the macro being expanded */ struct tok_lst **args; /* list of arguments for macro call */ struct tok_lst **exp_args; /* list of expanded arguments for macro call */ struct tok_lst *rest_bdy; /* position within the body of the macro */ }; /* * Elements in a list of token lists used for token pasting. */ struct paste_lsts { struct token *trigger; /* the token pasting operator */ struct tok_lst *tlst; /* the token list */ struct paste_lsts *next; /* the next element in the list of lists */ }; /* * Pointers to various token sources. */ union src_ref { struct char_src *cs; /* source is tokenized characters */ struct mac_expand *me; ýT VMS.BCK 9.SRC.PREPROC]PREPROC.H;11-  /* source is macro expansion */ struct tok_lst *tlst; /* source is token list (a macro argument) */ struct paste_lsts *plsts; /* source is token lists for token pasting */ }; /* * Types of token sources: */ #define CharSrc 0 /* tokenized characters */ #define MacExpand 1 /* macro expansion */ #define TokLst 2 /* token list */ #define PasteLsts 4 /* paste last token of 1st list to first of 2nd */ #define DummySrc 5 /* base of stack */ #define NTokSav 2 /* maximum number of tokens that can be pushed back */ struct src { int flag; /* indicate what kind of source it is */ struct tok_lst *cond; /* list of nested conditionals in effect */ struct token *toks[NTokSav]; /* token push-back stack for preproc() */ int ntoks; /* number of tokens on stack */ struct src *next; /* link for creating stack */ union src_ref u; /* pointer to specific kind of source */ }; extern struct src dummy; /* base of stack */ extern struct src *src_stack; /* source stack */ *[V9.SRC.PREPROC]PTOKEN.H;1+,./ 4-0123KPWO56 7A89Jj$GHJ/* * The #defines for tokens can be overridden by a -DTokDotH=... compiler * option. This specifies a file containing token #defines and is useful * for creating an embedded preprocessor where token definitions are * generated by yacc from a grammar. */ #if SASC /* ??? try to do this better later */ #include "../rtt/ltoken.h" #else /* SASC */ #ifdef TokDotH #ifdef RTT #include "../rtt/ltoken.h" #else /* RTT */ #include TokDotH #endif /* RTT */ #else /* TokDotH */ /* * These are the numbers for tokens (other than single characters) returned * by the preproccesor and seen by a yacc parser for a C grammar. */ #define And 257 #define AndAsgn 258 #define Arrow 259 #define CharConst 260 #define Decr 261 #define DivAsgn 262 #define Ellipsis 263 #define Equal 264 #define Geq 265 #define Identifier 266 #define Incr 267 #define LCharConst 268 #define LShft 269 #define LShftAsgn 270 #define LStrLit 271 #define Leq 272 #define MinusAsgn 273 #define ModAsgn 274 #define MultAsgn 275 #define Neq 276 #define Or 277 #define OrAsgn 278 #define PlusAsgn 279 #define RShft 280 #define RShftAsgn 281 #define StrLit 282 #define XorAsgn 283 #endif /* TokDotH */ #endif /* SASC */ *[V9.SRC.PREPROC]README.;1+,./ 4-0123KPWO56vH70s89Jj$GHJThis directory contains files for building pp, a ANSI-C preprocessor for C (with some extensions). pp itself is not needed to build the Icon compiler system -- the files here are automatically incorporated in rtt. However, if you want to build a stand-alone version of pp for some other use, the Makefile here will do it. The flags at the beginning of the Makefile may need changing. *[V9.SRC]RTT.DIR;1+,!./ 4-0123 KPWO56`}ς79݂89Ҋ;vGHJILTOKEN.H/ MAKE.COM#RTT.H$RTT1.H%RTTDB.C& RTTGRAM.Y0 RTTILC.C' RTTINLIN.C(RTTLEX.C) RTTMAIN.C1  RTTMISC.C* RTTNODE.C+RTTOUT.C, RTTPARSE.C- RTTPROTO.H"RTTSYM.C.*[V9.SRC.RTT]LTOKEN.H;1+,/ ./ 4'-!0123KPWO567!89Jj$GHJ typedef union { struct token *t; struct node *n; long i; } YYSTYPE; extern YYSTYPE yylval; # define Identifier 257 # define StrLit 258 # define LStrLit 259 # define FltConst 260 # define DblConst 261 # define LDblConst 262 # define CharConst 263 # define LCharConst 264 # define IntConst 265 # define UIntConst 266 # define LIntConst 267 # define ULIntConst 268 # define Arrow 269 # define Incr 270 # define Decr 271 # define LShft 272 # define RShft 273 # define Leq 274 # define Geq 275 # define Equal 276 # define Neq 277 # define And 278 # define Or 279 # define MultAsgn 280 # define DivAsgn 281 # define ModAsgn 282 # define PlusAsgn 283 # define MinusAsgn 284 # define LShftAsgn 285 # define RShftAsgn 286 # define AndAsgn 287 # define XorAsgn 288 # define OrAsgn 289 # define Sizeof 290 # define Intersect 291 # define OpSym 292 # define Typedef 293 # define Extern 294 # define Static 295 # define Auto 296 # define Register 297 # define Tended 298 # define Char 299 # define Short 300 # define Int 301 # define Long 302 # define Signed 303 # define Unsigned 304 # define Float 305 # define Doubl 306 # define Const 307 # define Volatile 308 # define Void 309 # define TypeDefName 310 # define Struct 311 # define Union 312 # define Enum 313 # define Ellipsis 314 # define Case 315 # define Default 316 # define If 317 # define Else 318 # define Switch 319 # define While 320 # define Do 321 # define For 322 # define Goto 323 # define Continue 324 # define Break 325 # define Return 326 # define Runerr 327 # def< VMS.BCK/ ![V9.SRC.RTT]LTOKEN.H;11ICN;10ine Is 328 # define Cnv 329 # define Def 330 # define Exact 331 # define Empty_type 332 # define IconType 333 # define Component 334 # define Variable 335 # define Any_value 336 # define Named_var 337 # define Struct_var 338 # define C_Integer 339 # define Arith_case 340 # define C_Double 341 # define C_String 342 # define Tmp_string 343 # define Tmp_cset 344 # define Body 345 # define End 346 # define Function 347 # define Keyword 348 # define Operator 349 # define Underef 350 # define Declare 351 # define Suspend 352 # define Fail 353 # define Inline 354 # define Abstract 355 # define Store 356 # define Type 357 # define New 358 # define All_fields 359 # define Then 360 # define Type_case 361 # define Of 362 # define Len_case 363 # define Constant 364 # define Errorfail 365 # define IfStmt 366 *[V9.SRC.RTT]MAKE.COM;1+,#./ 4Z-!0123KPWO56H7i89Jj$GHJ$! $! Build rtt for VMS. $! $ delete/noconfirm/nolog *.obj;*, rtt.exe;*, [-.preproc]*.obj;*,- [--.bin]rtt.exe;* $ $ if p1 .eqs. "" $ then $ set default [-.common] $ @make $ endif $ $ set default [-.preproc] $ cc/define="TokDotH=""../rtt/ltoken.h""" pout,pchars,perr,pmem,bldtok,macro,- preproc,evaluate,files,gettok,pinit $ set default [-.rtt] $ $ cc rttparse,rttmain,rttlex,rttsym,rttnode,rttout,rttmisc,rttdb,rttinlin,rttilc $ $ link/exe=rtt rttparse,rttmain,rttlex,rttsym,rttnode,rttout,rttmisc,rttdb,- rttinlin,rttilc,[-.preproc]pout,[-.preproc]pchars,- [-.preproc]perr,[-.preproc]pmem,[-.preproc]bldtok,- [-.preproc]macro,[-.preproc]preproc,[-.preproc]evaluate,- [-.preproc]files,[-.preproc]gettok,[-.preproc]pinit,- [-.common]getopt,[-.common]time,[-.common]filepart,- [-.common]memory,[-.common]identify,[-.common]strtbl,- [-.common]rtdb,[-.common]literals,[-.common]alloc,sys$input/opt sys$share:vaxcrtl.exe/share $ $ copy rtt.exe [--.bin] $ $ exit 1 *[V9.SRC.RTT]RTT.H;1+,$./ 4&-!0123KPWO56Ht7F89Jj$GHJ#include "ltoken.h" #include "rtt1.h" *[V9.SRC.RTT]RTT1.H;1+,%./ 4\-!0123KPWO56n789Jj$GHJ#include "../preproc/preproc.h" #include "../preproc/pproto.h" #define IndentInc 3 #define MaxCol 80 #if (MVS || VM) && SASC #define Max(x,y) __builtin_max(x,y) #else /* SASC */ #define Max(x,y) ((x)>(y)?(x):(y)) #endif /* SASC */ /* * cfile is used to create a list of cfiles created from a source file. */ struct cfile { char *name; struct cfile *next; }; /* * srcfile is an entry of dependants of a source file. */ struct srcfile { char *name; struct cfile *dependents; struct srcfile *next; }; #define ForceNl() nl = 1; extern int nl; /* flag: a new-line is needed in the output */ /* * The lexical analyzer recognizes 3 states. Operators are treated differently * in each state. */ #define DfltLex 0 /* Covers most input. */ #define OpHead 1 /* In head of an operator definition. */ #define TypeComp 2 /* In abstract type computation */ extern int lex_state; /* state of operator recognition */ extern char *compiler_def; /* #define for COMPILER */ extern FILE *out_file; /* output file */ extern int def_fnd; /* C input defines something concrete */ extern char *inclname; /* include file to be included by C compiler */ extern int iconx_flg; /* flag: indicate that iconx style code is needed */ extern int enable_out; /* enable output of C code */ extern char *largeints; /* "Largeints" or "NoLargeInts" */ /* * The symbol table is used by the lexical analyser to decide whether an * identifier is an ordinary identifier, a typedef name, or a reserved * word. It is used by the parse tree builder to decide whether an * identifier is an ordinary C variable, a tended variable, a parameter * to a run-time routine, or the special variable "result". */ struct sym_entry { int tok_id; /* Ident, Type, or identification of reserved word */ char *image; /* image of symbol */ int id_type; /* OtherDcl, TndDesc, TndStr, TndBlk, Label, RtParm, DrfPrm, RsltLoc */ union { struct { /* RtParm: */ int param_num; /* parameter number */ int cur_loc; /* PrmTend, PrmCStr, PrmInt, or PrmDbl */ int non_tend; /* non-tended locations used */ int parm_mod; /* something may have modified it */ struct sym_entry *next; } param_info; struct { /* TndDesc, TndStr, TndBlk: */ struct node *init; /* initial value from declaration */ char *blk_name; /* TndBlk: struct name of block */ struct sym_entry *next; } tnd_var; struct { /* OtherDcl from "declare {...}": */ struct node *tqual; /* storage class, type qualifier list */ struct node *dcltor; /* declarator */ struct node *init; /* initial value from declaration */ struct sym_entry *next; } declare_var; int typ_indx; /* index into arrays of type information */ word lbl_num; /* label number used in in-line code */ int referenced; /* RsltLoc: is referenced */ } u; int t_indx; /* index into tended array */ int il_indx; /* index used in in-line code */ int nest_lvl; /* 0 - reserved word, 1 - global, >= 2 - local */ int may_mod; /* may be modified in particular piece of code */ int ref_cnt; struct sym_entry *next; }; /* * Path-specific parameter information must be saved and merged for * branching and joining of paths. */ struL[ VMS.BCK%![V9.SRC.RTT]RTT1.H;1C;1ICN;1ct parminfo { int cur_loc; int parm_mod; }; /* * A list is maintained of information needed to initialize tended descriptors. */ struct init_tend { int t_indx; /* index into tended array */ int init_typ; /* TndDesc, TndStr, TndBlk */ struct node *init; /* initial value from declaration */ int nest_lvl; /* level of nesting of current use of tended slot */ int in_use; /* tended slot is being used in current scope */ struct init_tend *next; }; extern int op_type; /* Function, Keyword, Operator, or OrdFunc */ extern char lc_letter; /* f = function, o = operator, k = keyword */ extern char uc_letter; /* F = function, O = operator, K = keyword */ extern char prfx1; /* 1st char of unique prefix for operation */ extern char prfx2; /* 2nd char of unique prefix for operation */ extern char *fname; /* current source file name */ extern int line; /* current source line number */ extern struct implement *cur_impl; /* data base entry for current operator */ extern struct token *comment; /* descriptive comment for current oper */ extern int n_tmp_str; /* total number of string buffers needed */ extern int n_tmp_cset; /* total number of cset buffers needed */ extern int nxt_sbuf; /* index of next string buffer */ extern int nxt_cbuf; /* index of next cset buffer */ extern struct sym_entry *params; /* current list of parameters */ extern struct sym_entry *decl_lst; /* declarations from "declare {...}" */ extern struct init_tend *tend_lst; /* list of allocated tended slots */ extern char *str_rslt; /* string "result" in string table */ extern word lbl_num; /* next unused label number */ extern struct sym_entry *v_len; /* symbol entry for size of varargs */ extern int il_indx; /* next index into data base symbol table */ /* * lvl_entry keeps track of what is happening at a level of nested declarations. */ struct lvl_entry { int nest_lvl; int kind_dcl; /* IsTypedef, TndDesc, TndStr, TndBlk, or OtherDcl */ char *blk_name; /* for TndBlk, the struct name of the block */ int parms_done; /* level consists of parameter list which is complete */ struct sym_entry *tended; /* symbol table entries for tended variables */ struct lvl_entry *next; }; extern struct lvl_entry *dcl_stk; /* stack of declaration contexts */ extern int fnc_ret; /* RetInt, RetDbl, RetNoVal, or RetSig for current func */ #define NoAbstr -1001 /* no abstract return statement has been encountered */ #define SomeType -1002 /* assume returned value is consistent with abstr ret */ extern int abs_ret; /* type from abstract return statement */ /* * Definitions for use in parse tree nodes. */ #define PrimryNd 1 /* simply a token */ #define PrefxNd 2 /* a prefix expression */ #define PstfxNd 3 /* a postfix expression */ #define BinryNd 4 /* a binary expression (not necessarily infix) */ #define TrnryNd 5 /* an expression with 3 subexpressions */ #define QuadNd 6 /* an expression with 4 subexpressions */ #define LstNd 7 /* list of declaration parts */ #define CommaNd 8 /* arg lst, declarator lst, or init lst, not comma op */ #define StrDclNd 9 /* structure field declaration */ #define PreSpcNd 10 /* prefix expression that needs a space after it */ #define ConCatNd 11 /* two ajacent pieces of code with no other syntax */ #define SymNd 12 /* a symbol (identifier) node */ #define ExactCnv 13 /* (exact)integer or (exact)C_integer conversion */ #define CompNd 14 /* compound statement */ #define AbstrNd 15 /* abstract type computation */ #define IcnTypNd 16 /* name of an Icon type */ #define NewNode(size) (struct node *)alloc((unsigned int)\ (sizeof(struct node) + (size-1) * sizeof(union field))) union field { struct node *child; struct sym_entry *sym; /* used with SymNd & CompNd*/ }; struct node { int nd_id; struct token *tok; union field u[1]; /* actual size varies with node type */ }; #include "rttproto.h" *[V9.SRC.RTT]RTTDB.C;1+,&.T/ 4TR-!0123KPWOU567`髅89Jj$GHJ /* * rttdb.c - routines to read, manipulate, and write the data base of * information about run-time routines. */ #include "rtt.h" #include "../h/version.h" #define DHSize 47 #define MaxLine 80 /* * prototypes for static functions. */ hidden novalue max_pre Params((struct implement **tbl, char *pre)); hidden int name_cmp Params((char *p1, char *p2)); hidden int op_cmp Params((char *p1, char *p2)); hidden novalue prt_dpnd Params((FILE *db)); hidden novalue prt_impls Params((FILE *db, char *sect, struct implement **tbl, int num, struct implement **sort_ary, int (*com)())); hidden int prt_c_fl Params((FILE *db, struct cfile *clst, int line_left)); hidden int put_case Params((FILE *db, struct il_code *il)); hidden novalue put_ilc Params((FILE *db, struct il_c *ilc)); hidden novalue put_inlin Params((FILE *db, struct il_code *il)); hidden novalue put_ret Params((FILE *db, struct il_c *ilc)); hidden novalue put_typcd Params((FILE *db, int typcd)); hidden novalue put_var Params((FILE *db, int code, struct il_c *ilc)); hidden novalue ret_flag Params((FILE *db, int flag, int may_fthru)); hidden int set_impl Params((struct token *name, struct implement **tbl, int num_impl, char *pre)); hidden novalue set_prms Params((struct implement *ptr)); hidden int src_cmp Params((char *p1, char *p2)); static struct implement *bhash[IHSize]; /* hash area for built-in func table */ static struct implement *ohash[IHSize]; /* hash area for operator table */ static struct implement *khash[IHSize]; /* hash area for keyword table */ static struct srcfile *dhash[DHSize]; /* hash area for file dependencies */ static int num_fnc; /* number of function in data base */ static int num_op = 0; /* number of operators in data base */ static int num_key; /* number of keywords in data base */ static int num_src = 0; /* number of source files in dependencies */ static char fnc_pre[2]; /* next prefix available for functions */ static char op_pre[2]; /* next prefix available for operators */ static char key_pre[2]; /* next prefix available for keywords */ static long min_rs; /* min result sequence of current operation */ static long max_rs; /* max result sequence of current operation */ static int rsm_rs; /* '+' at end of result sequencce of cur. oper. */ static int newdb = 0; /* flag: this is a new data base */ struct token *comment; /* comment associated with current operation */ struct implement *cur_impl; /* data base entry for cu.; VMS.BCK&![V9.SRC.RTT]RTTDB.C;1;1N;11T%rrent operation */ /* * loaddb - load data base. */ novalue loaddb(dbname) char *dbname; { char *op; struct implement *ip; unsigned hashval; int i; char *srcname; char *c_name; struct srcfile *sfile; /* * Initialize internal data base. */ for (i = 0; i < IHSize; i++) { bhash[i] = NULL; /* built-in function table */ ohash[i] = NULL; /* operator table */ khash[i] = NULL; /* keyword table */ } for (i = 0; i < DHSize; i++) dhash[i] = NULL; /* dependency table */ /* * Determine if this is a new data base or an existing one. */ if (iconx_flg || !db_open(dbname, &largeints)) newdb = 1; else { /* * Read information about built-in functions. */ num_fnc = db_tbl("functions", bhash); /* * Read information about operators. */ db_chstr("", "operators"); /* verify and skip "operators" */ while ((op = db_string()) != NULL) { /* * Read header information for the operator. */ if ((ip = db_impl('O')) == NULL) db_err2(1, "no implementation information for operator", op); ip->op = op; /* * Read the descriptive comment and in-line code for the operator, * then put the entry in the hash table. */ db_code(ip); hashval = (int)IHasher(op); ip->blink = ohash[hashval]; ohash[hashval] = ip; db_chstr("", "end"); /* verify and skip "end" */ ++num_op; } db_chstr("", "endsect"); /* verify and skip "endsect" */ /* * Read information about keywords. */ num_key = db_tbl("keywords", khash); /* * Read C file/source dependency information. */ db_chstr("", "dependencies"); /* verify and skip "dependencies" */ while ((srcname = db_string()) != NULL) { sfile = src_lkup(srcname); while ((c_name = db_string()) != NULL) add_dpnd(sfile, c_name); db_chstr("", "end"); /* verify and skip "end" */ } db_chstr("", "endsect"); /* verify and skip "endsect" */ db_close(); } /* * Determine the next available operation prefixes by finding the * maximum prefixes currently in use. */ max_pre(bhash, fnc_pre); max_pre(ohash, op_pre); max_pre(khash, key_pre); } /* * max_pre - find the maximum prefix in an implemetation table and set the * prefix array to the next value. */ static novalue max_pre(tbl, pre) struct implement **tbl; char *pre; { register struct implement *ptr; unsigned hashval; int empty = 1; char dmy_pre[2]; pre[0] = '0'; pre[1] = '0'; for (hashval = 0; hashval < IHSize; ++hashval) for (ptr = tbl[hashval]; ptr != NULL; ptr = ptr->blink) { empty = 0; /* * Determine if this prefix is larger than any found so far. */ if (cmp_pre(ptr->prefix, pre) > 0) { pre[0] = ptr->prefix[0]; pre[1] = ptr->prefix[1]; } } if (!empty) nxt_pre(dmy_pre, pre, 2); } /* * src_lkup - return pointer to dependency information for the given * source file. */ struct srcfile *src_lkup(srcname) char *srcname; { unsigned hashval; struct srcfile *sfile; /* * See if the source file is already in the dependancy section of * the data base. */ hashval = (unsigned)srcname % DHSize; for (sfile = dhash[hashval]; sfile != NULL && sfile->name != srcname; sfile = sfile->next) ; /* * If an entry for the source file was not found, create one. */ if (sfile == NULL) { sfile = NewStruct(srcfile); sfile->name = srcname; sfile->dependents = NULL; sfile->next = dhash[hashval]; dhash[hashval] = sfile; ++num_src; } return sfile; } /* * add_dpnd - add the given source/dependency relation to the dependency * table. */ novalue add_dpnd(sfile, c_name) struct srcfile *sfile; char *c_name; { struct cfile *cf; cf = NewStruct(cfile); cf->name = c_name; cf->next = sfile->dependents; sfile->dependents = cf; } /* * clr_dpnd - delete all dependencies for the given source file. */ novalue clr_dpnd(srcname) char *srcname; { src_lkup(srcname)->dependents = NULL; } /* * dumpdb - write the updated data base. */ novalue dumpdb(dbname) char *dbname; { #ifdef Rttx fprintf(stdout, "rtt was compiled to only support the intepreter, use -x\n"); exit(ErrorExit); #else /* Rttx */ FILE *db; struct implement **sort_ary; int ary_sz; int i; #if MVS /* * Avoid problems with MVS line length restrictions. */ db = fopen(dbname, "wb"); #else /* MVS */ db = fopen(dbname, "w"); #endif /* MVS */ if (db == NULL) err2("cannot open data base for output:", dbname); if(newdb) fprintf(stdout, "creating new data base: %s\n", dbname); /* * The data base starts with a version number associated with this * version of rtt and an indication of whether LargeInts was * defined during the build. */ fprintf(db, "%s %s\n\n", DVersion, largeints); fprintf(db, "\ntypes\n\n"); /* start of type code section */ for (i = 0; i < num_typs; ++i) fprintf(db, " T%d: %s\n", i, icontypes[i].id); fprintf(db, "\n$endsect\n\n"); /* end of section for type codes */ fprintf(db, "\ncomponents\n\n"); /* start of component code section */ for (i = 0; i < num_cmpnts; ++i) fprintf(db, " C%d: %s\n", i, typecompnt[i].id); fprintf(db, "\n$endsect\n\n"); /* end of section for component codes */ /* * Allocate an array for sorting operation entries. It must be * large enough to hold functions, operators, or keywords. */ ary_sz = Max(num_fnc, num_op); ary_sz = Max(ary_sz, num_key); if (ary_sz > 0) sort_ary = (struct implement**)alloc((unsigned int)(ary_sz * sizeof(struct implement*))); else sort_ary = NULL; /* * Sort and print to the data base the enties for each of the * three operation sections. */ prt_impls(db, "functions", bhash, num_fnc, sort_ary, name_cmp); prt_impls(db, "\noperators", ohash, num_op, sort_ary, op_cmp); prt_impls(db, "\nkeywords", khash, num_key, sort_ary, name_cmp); if (ary_sz > 0) free((char *)sort_ary); /* * Print the dependancy information to the data base. */ prt_dpnd(db); if (fclose(db) != 0) err2("cannot close ", dbname); #endif /* Rttx */ } #ifndef Rttx /* * prt_impl - sort and print to the data base the enties from one * of the operation tables. */ static novalue prt_impls(db, sect, tbl, num, sort_ary, cmp) FILE *db; char *sect; struct implement **tbl; int num; struct implement **sort_ary; int (*cmp)(); { int i; int j; unsigned hashval; struct implement *ip; /* * Each operation section begins with the section name. */ fprintf(db, "%s\n\n", sect); /* * Sort the table entries before printing. */ if (num > 0) { i = 0; for (hashval = 0; hashval < IHSize; ++hashval) for (ip = tbl[hashval]; ip != NULL; ip = ip->blink) sort_ary[i++] = ip; qsort((char *)sort_ary, num, sizeof(struct implement *), cmp); } /* * Output each entry to the data base. */ for (i = 0; i < num; ++i) { ip = sort_ary[i]; /* * Operators have opera_p. VMS.BCK&![V9.SRC.RTT]RTTDB.C;1;1CN;11TTtor symbols. */ if (ip->op != NULL) fprintf(db, "%s\t", ip->op); /* * Print the operation name, the unique prefix used to generate * C function names, and the number of parameters to the operation. */ fprintf(db, "%s\t%c%c %d(", ip->name, ip->prefix[0], ip->prefix[1], ip->nargs); /* * For each parameter, write and indication of whether a dereferenced * value, 'd', and/or and undereferenced value, 'u', is needed. */ for (j = 0; j < ip->nargs; ++j) { if (j > 0) fprintf(db, ","); if (ip->arg_flgs[j] & RtParm) fprintf(db, "u"); if (ip->arg_flgs[j] & DrfPrm) fprintf(db, "d"); } /* * Indicate if the last parameter represents the tail of a * variable length argument list. */ if (ip->nargs > 0 && ip->arg_flgs[ip->nargs - 1] & VarPrm) fprintf(db, "v"); fprintf(db, ")\t{"); /* * Print the min and max result sequence length. */ if (ip->min_result != NoRsltSeq) { fprintf(db, "%ld,", ip->min_result); if (ip->max_result == UnbndSeq) fprintf(db, "*"); else fprintf(db, "%ld", ip->max_result); if (ip->resume) fprintf(db, "+"); } fprintf(db, "} "); /* * Print the return/suspend/fail/fall-through flag and an indication * of whether the operation explicitly uses the result location * (as opposed to an implicit use via return or suspend). */ ret_flag(db, ip->ret_flag, 0); if (ip->use_rslt) fprintf(db, "t "); else fprintf(db, "f "); /* * Print the descriptive comment associated with the operation. */ fprintf(db, "\n\"%s\"\n", ip->comment); /* * Print information about tended declarations from the declare * statement. The number of tended variables is printed followed * by an entry for each variable. Each entry consists of the * type of the declaration * * struct descrip -> desc * char * -> str * struct b_xxx * -> blkptr b_xxx * union block * -> blkptr * * * followed by the C code for the initializer (nil indicates none). */ fprintf(db, "%d ", ip->ntnds); for (j = 0; j < ip->ntnds; ++j) { switch (ip->tnds[j].var_type) { case TndDesc: fprintf(db, "desc "); break; case TndStr: fprintf(db, "str "); break; case TndBlk: fprintf(db, "blkptr "); if (ip->tnds[j].blk_name == NULL) fprintf(db, "* "); else fprintf(db, "%s ", ip->tnds[j].blk_name); break; } put_ilc(db, ip->tnds[j].init); } /* * Print information about non-tended declarations from the declare * statement. The number of variables is printed followed by an * entry for each variable. Each entry consists of the variable * name followed by the complete C code for the declaration. */ fprintf(db, "\n%d ", ip->nvars); for (j = 0; j < ip->nvars; ++j) { fprintf(db, "%s ", ip->vars[j].name); put_ilc(db, ip->vars[j].dcl); } fprintf(db, "\n"); /* * Output the "executable" code (includes abstract code) for the * operation. */ put_inlin(db, ip->in_line); fprintf(db, "\n$end\n\n"); /* end of operation entry */ } fprintf(db, "$endsect\n\n"); /* end of section for operation type */ } /* * put_inlin - put in-line code into the data base file. This is the * code used by iconc to perform type infernence for the operation * and to generate a tailored version of the operation. */ static novalue put_inlin(db, il) FILE *db; struct il_code *il; { int i; int num_cases; int indx; /* * RTL statements are handled by this function. Other functions * are called for C code. */ if (il == NULL) { fprintf(db, "nil "); return; } switch (il->il_type) { case IL_Const: /* * Constant keyword. */ fprintf(db, "const "); put_typcd(db, il->u[0].n); /* type code */ fputs(il->u[1].s, db); fputc(' ', db); /* literal */ break; case IL_If1: /* * if-then statment. */ fprintf(db, "if1 "); put_inlin(db, il->u[0].fld); /* condition */ fprintf(db, "\n"); put_inlin(db, il->u[1].fld); /* then clause */ break; case IL_If2: /* * if-then-else statment. */ fprintf(db, "if2 "); put_inlin(db, il->u[0].fld); /* condition */ fprintf(db, "\n"); put_inlin(db, il->u[1].fld); /* then clause */ fprintf(db, "\n"); put_inlin(db, il->u[2].fld); /* else clause */ break; case IL_Tcase1: /* * type_case statement with no default clause. */ fprintf(db, "tcase1 "); put_case(db, il); break; case IL_Tcase2: /* * type_case statement with a default clause. */ fprintf(db, "tcase2 "); indx = put_case(db, il); fprintf(db, "\n"); put_inlin(db, il->u[indx].fld); /* default */ break; case IL_Lcase: /* * len_case statement. */ fprintf(db, "lcase "); num_cases = il->u[0].n; fprintf(db, "%d ", num_cases); indx = 1; for (i = 0; i < num_cases; ++i) { fprintf(db, "\n%d ", il->u[indx++].n); /* selection number */ put_inlin(db, il->u[indx++].fld); /* action */ } fprintf(db, "\n"); put_inlin(db, il->u[indx].fld); /* default */ break; case IL_Acase: /* * arith_case statement. */ fprintf(db, "acase "); put_inlin(db, il->u[0].fld); /* first variable */ put_inlin(db, il->u[1].fld); /* second variable */ fprintf(db, "\n"); put_inlin(db, il->u[2].fld); /* C_integer action */ fprintf(db, "\n"); put_inlin(db, il->u[3].fld); /* integer action */ fprintf(db, "\n"); put_inlin(db, il->u[4].fld); /* C_double action */ break; case IL_Err1: /* * runerr with no value argument. */ fprintf(db, "runerr1 "); fprintf(db, "%d ", il->u[0].n); /* error number */ break; case IL_Err2: /* * runerr with a value argument. */ fprintf(db, "runerr2 "); fprintf(db, "%d ", il->u[0].n); /* error number */ put_inlin(db, il->u[1].fld); /* variable */ break; case IL_Lst: /* * "glue" to string statements together. */ fprintf(db, "lst "); put_inlin(db, il->u[0].fld); fprintf(db, "\n"); put_inlin(db, il->u[1].fld); break; case IL_Bang: /* * ! operator from type checking. */ fprintf(db, "! "); put_inlin(db, il->u[0].fld); break; C)E VMS.BCK&![V9.SRC.RTT]RTTDB.C;1;1;1N;1T$case IL_And: /* * && operator from type checking. */ fprintf(db, "&& "); put_inlin(db, il->u[0].fld); put_inlin(db, il->u[1].fld); break; case IL_Cnv1: /* * cnv:() */ fprintf(db, "cnv1 "); put_typcd(db, il->u[0].n); /* type code */ put_inlin(db, il->u[1].fld); /* source */ break; case IL_Cnv2: /* * cnv:(,) */ fprintf(db, "cnv2 "); put_typcd(db, il->u[0].n); /* type code */ put_inlin(db, il->u[1].fld); /* source */ put_ilc(db, il->u[2].c_cd); /* destination */ break; case IL_Def1: /* * def:(,) */ fprintf(db, "def1 "); put_typcd(db, il->u[0].n); /* type code */ put_inlin(db, il->u[1].fld); /* source */ put_ilc(db, il->u[2].c_cd); /* default value */ break; case IL_Def2: /* * def:(,,) */ fprintf(db, "def2 "); put_typcd(db, il->u[0].n); /* type code */ put_inlin(db, il->u[1].fld); /* source */ put_ilc(db, il->u[2].c_cd); /* default value */ put_ilc(db, il->u[3].c_cd); /* destination */ break; case IL_Is: /* * is:() */ fprintf(db, "is "); put_typcd(db, il->u[0].n); /* type code */ put_inlin(db, il->u[1].fld); /* variable */ break; case IL_Var: /* * A variable. */ fprintf(db, "%d ", il->u[0].n); /* symbol table index */ break; case IL_Subscr: /* * A subscripted variable. */ fprintf(db, "[ "); fprintf(db, "%d ", il->u[0].n); /* symbol table index */ fprintf(db, "%d ", il->u[1].n); /* subscripting index */ break; case IL_Block: /* * A block of in-line code. */ fprintf(db, "block "); if (il->u[0].n) fprintf(db, "t "); /* execution can fall through */ else fprintf(db, "_ "); /* execution cannot fall through */ /* * Output a symbol table of tended variables. */ fprintf(db, "%d ", il->u[1].n); /* number of local tended */ for (i = 2; i - 2 < il->u[1].n; ++i) switch (il->u[i].n) { case TndDesc: fprintf(db, "desc "); break; case TndStr: fprintf(db, "str "); break; case TndBlk: fprintf(db, "blkptr "); break; } put_ilc(db, il->u[i].c_cd); /* body of block */ break; case IL_Call: /* * A call to a body function. */ fprintf(db, "call "); /* * Each body function has a 3rd prefix character to distingish * it from other functions for the operation. */ fprintf(db, "%c ", (char)il->u[1].n); /* * A body function that would only return one possible signal * need return none. In which case, it can directly return a * C integer or double directly rather than using a result * descriptor location. Indicate what it does. */ switch (il->u[2].n) { case RetInt: fprintf(db, "i "); /* directly return integer */ break; case RetDbl: fprintf(db, "d "); /* directly return double */ break; case RetNoVal: fprintf(db, "n "); /* return nothing directly */ break; case RetSig: fprintf(db, "s "); /* return a signal */ break; } /* * Output the return/suspend/fail/fall-through flag. */ ret_flag(db, il->u[3].n, 1); /* * Indicate whether the body function expects to have * an explicit result location passed to it. */ if (il->u[4].n) fprintf(db, "t "); else fprintf(db, "f "); fprintf(db, "%d ", il->u[5].n); /* num string bufs */ fprintf(db, "%d ", il->u[6].n); /* num cset bufs */ i = il->u[7].n; fprintf(db, "%d ", i); /* num args */ indx = 8; /* * output prototype paramater declarations and actual arguments. */ i *= 2; while (i--) put_ilc(db, il->u[indx++].c_cd); break; case IL_Abstr: /* * Abstract type computation. */ fprintf(db, "abstr "); put_inlin(db, il->u[0].fld); /* side effects */ put_inlin(db, il->u[1].fld); /* return type */ break; case IL_VarTyp: /* * type() */ fprintf(db, "vartyp "); put_inlin(db, il->u[0].fld); /* variable */ break; case IL_Store: /* * store[] */ fprintf(db, "store "); put_inlin(db, il->u[0].fld); /* type to be "dereferenced "*/ break; case IL_Compnt: /* * . */ fprintf(db, ". "); put_inlin(db, il->u[0].fld); /* type */ if (il->u[1].n == CM_Fields) fprintf(db, "f "); /* special case record fields */ else fprintf(db, "C%d ", (int)il->u[1].n); /* component table index */ break; case IL_TpAsgn: /* * store[] = */ fprintf(db, "= "); put_inlin(db, il->u[0].fld); /* variable type */ put_inlin(db, il->u[1].fld); /* value type */ break; case IL_Union: /* * ++ */ fprintf(db, "++ "); put_inlin(db, il->u[0].fld); put_inlin(db, il->u[1].fld); break; case IL_Inter: /* * ** */ fprintf(db, "** "); put_inlin(db, il->u[0].fld); put_inlin(db, il->u[1].fld); break; case IL_New: /* * new ( , ...) */ fprintf(db, "new "); put_typcd(db, il->u[0].n); /* type code */ i = il->u[1].n; fprintf(db, "%d ", i); /* num args */ indx = 2; while (i--) put_inlin(db, il->u[indx++].fld); break; case IL_IcnTyp: /* * */ fprintf(db, "typ "); put_typcd(db, il->u[0].n); /* type code */ break; } } /* * put_case - put the cases of a type_case statement into the data base file. */ static int put_case(db, il) FILE *db; struct il_code *il; { int *typ_vect; int i, j; int num_cases; int num_types; int indx; put_inlin(db, il->u[0].fld); /* expression being checked */ num_cases = il->u[1].n; /* number of cases */ fprintf(db, "%d ", num_cases); indx = 2; for (i = 0; i < num_cases; ++i) { num_types = il->u[indx++].n; Uz VMS.BCK&![V9.SRC.RTT]RTTDB.C;1;1CN;1T3 /* number of types in case */ fprintf(db, "\n%d ", num_types); typ_vect = il->u[indx++].vect; /* vector of type codes */ for (j = 0; j < num_types; ++j) put_typcd(db, typ_vect[j]); /* type code */ put_inlin(db, il->u[indx++].fld); /* action */ } return indx; } /* * put_typcd - convert a numeric type code into an alpha type code and * put it in the data base file. */ static novalue put_typcd(db, typcd) FILE *db; int typcd; { if (typcd >= 0) fprintf(db, "T%d ", typcd); else { switch (typcd) { case TypAny: fprintf(db, "a "); /* any_value */ break; case TypEmpty: fprintf(db, "e "); /* empty_type */ break; case TypVar: fprintf(db, "v "); /* variable */ break; case TypCInt: fprintf(db, "ci "); /* C_integer */ break; case TypCDbl: fprintf(db, "cd "); /* C_double */ break; case TypCStr: fprintf(db, "cs "); /* C_string */ break; case TypEInt: fprintf(db, "ei "); /* (exact)integer) */ break; case TypECInt: fprintf(db, "eci "); /* (exact)C_integer */ break; case TypTStr: fprintf(db, "ts "); /* tmp_string */ break; case TypTCset: fprintf(db, "tc "); /* tmp_cset */ break; case RetDesc: fprintf(db, "d "); /* plain descriptor on return/suspend */ break; case RetNVar: fprintf(db, "nv "); /* named_var */ break; case RetSVar: fprintf(db, "sv "); /* struct_var */ break; case RetNone: fprintf(db, "rn "); /* preset result location on return/suspend */ break; } } } /* * put_ilc - put in-line C code in the data base file. */ static novalue put_ilc(db, ilc) FILE *db; struct il_c *ilc; { /* * In-line C code is either "nil" or code bracketed by $c $e. * The bracketed code consists of text for C code plus special * constructs starting with $. Control structures have been * translated into gotos in the form of special constructs * (note that case statements are not supported in in-line code). */ if (ilc == NULL) { fprintf(db, "nil "); return; } fprintf(db, "$c "); while (ilc != NULL) { switch(ilc->il_c_type) { case ILC_Ref: put_var(db, 'r', ilc); /* non-modifying reference to variable */ break; case ILC_Mod: put_var(db, 'm', ilc); /* modifying reference to variable */ break; case ILC_Tend: put_var(db, 't', ilc); /* variable declared tended */ break; case ILC_SBuf: fprintf(db, "$sb "); /* string buffer for tmp_string */ break; case ILC_CBuf: fprintf(db, "$cb "); /* cset buffer for tmp_cset */ break; case ILC_Ret: fprintf(db, "$ret "); /* return statement */ put_ret(db, ilc); break; case ILC_Susp: fprintf(db, "$susp "); /* suspend statement */ put_ret(db, ilc); break; case ILC_Fail: fprintf(db, "$fail "); /* fail statement */ break; case ILC_EFail: fprintf(db, "$efail "); /* errorfail statement */ break; case ILC_Goto: fprintf(db, "$goto %d ", ilc->n); /* goto label */ break; case ILC_CGto: fprintf(db, "$cgoto "); /* conditional goto */ put_ilc(db, ilc->code[0]); /* condition (with $c $e) */ fprintf(db, "%d ", ilc->n); /* label */ break; case ILC_Lbl: fprintf(db, "$lbl %d ", ilc->n); /* label */ break; case ILC_LBrc: fprintf(db, "${ "); /* start of C block with dcls */ break; case ILC_RBrc: fprintf(db, "$} "); /* end of C block with dcls */ break; case ILC_Str: fprintf(db, "%s", ilc->s); /* C code as plain text */ break; } ilc = ilc->next; } fprintf(db, " $e "); } /* * put_var - output in-line C code for a variable. */ static novalue put_var(db, code, ilc) FILE *db; int code; struct il_c *ilc; { fprintf(db, "$%c", code); /* 'r': non-mod ref, 'm': mod ref, 't': tended */ if (ilc->s != NULL) fprintf(db, "%s", ilc->s); /* access into descriptor */ if (ilc->n == RsltIndx) fprintf(db, "r "); /* this is "result" */ else fprintf(db, "%d ", ilc->n); /* offset into a symbol table */ } /* * ret_flag - put a return/suspend/fail/fall-through flag in the data base * file. */ static novalue ret_flag(db, flag, may_fthru) FILE *db; int flag; int may_fthru; { if (flag & DoesFail) fprintf(db, "f"); /* can fail */ else fprintf(db, "_"); /* cannot fail */ if (flag & DoesRet) fprintf(db, "r"); /* can return */ else fprintf(db, "_"); /* cannot return */ if (flag & DoesSusp) fprintf(db, "s"); /* can suspend */ else fprintf(db, "_"); /* cannot suspend */ if (flag & DoesEFail) fprintf(db, "e"); /* can do error conversion */ else fprintf(db, "_"); /* cannot do error conversion */ if (may_fthru) /* body functions only: */ if (flag & DoesFThru) fprintf(db, "t"); /* can fall through */ else fprintf(db, "_"); /* cannot fall through */ fprintf(db, " "); } /* * put_ret - put the body of a return/suspend statement in the data base. */ static novalue put_ret(db, ilc) FILE *db; struct il_c *ilc; { int i; /* * Output the type of descriptor constructor on the return/suspend, * then output the the number of arguments to the constructor, and * the arguments themselves. */ put_typcd(db, ilc->n); for (i = 0; i < 3 && ilc->code[i] != NULL; ++i) ; fprintf(db, "%d ", i); for (i = 0; i < 3 && ilc->code[i] != NULL; ++i) put_ilc(db, ilc->code[i]); } /* * name_cmp - compare implementation structs by name; function used as * an argument to qsort(). */ static int name_cmp(p1, p2) char *p1; char *p2; { register struct implement *ip1; register struct implement *ip2; ip1 = *(struct implement **)p1; ip2 = *(struct implement **)p2; return strcmp(ip1->name, ip2->name); } /* * op_cmp - compare implementation structs by operator and number of args; * function used as an argument to qsort(). */ static int op_cmp(p1, p2) char *p1; char *p2; { register int cmp; register struct implement *ip1; register struct implement *ip2; ip1 = *(struct implement **)p1; ip2 = *(struct implement **)p2; cmp = strcmp(ip1->op, ip2->op); if (cmp == 0) return ip1->nargs - ip2->nargs; else return cmp; } /* * prt_dpnd - print dependency information to the data base. */ static novalue prt_dpnd(db) FILE *db; { struct srcfile **sort_ary; struct srcfile *sfile; unsigned hashval; int line_left; int num; int i; fprintf(db, "\ndependencies\n\n"); /* start of dependency section */ /* * sort the dependency information by source file na VMS.BCK&![V9.SRC.RTT]RTTDB.C;1;1;1;1T;Bme. */ num = 0; if (num_src > 0) { sort_ary = (struct srcfile **)alloc((unsigned int)(num_src * sizeof(struct srcfile *))); for (hashval = 0; hashval < DHSize; ++hashval) for (sfile = dhash[hashval]; sfile != NULL; sfile = sfile->next) sort_ary[num++] = sfile; qsort((char *)sort_ary, num, sizeof(struct srcfile *), (int (*)())src_cmp); } /* * For each source file with dependents, output the source file * name followed by the list of dependent files. The list is * terminated with "end". */ for (i = 0; i < num; ++i) { sfile = sort_ary[i]; if (sfile->dependents != NULL) { fprintf(db, "%-12s ", sfile->name); line_left = prt_c_fl(db, sfile->dependents, MaxLine - 14); if (line_left - 4 < 0) fprintf(db, "\n "); fprintf(db, "$end\n"); } } fprintf(db, "\n$endsect\n"); /* end of dependency section */ if (num_src > 0) free((char *)sort_ary); } /* * src_cmp - compare srcfile structs; function used as an argument to qsort(). */ static int src_cmp(p1, p2) char *p1; char *p2; { register struct srcfile *sp1; register struct srcfile *sp2; sp1 = *(struct srcfile **)p1; sp2 = *(struct srcfile **)p2; return strcmp(sp1->name, sp2->name); } /* * prt_c_fl - print list of C files in reverse order. */ static int prt_c_fl(db, clst, line_left) FILE *db; struct cfile *clst; int line_left; { int len; if (clst == NULL) return line_left; line_left = prt_c_fl(db, clst->next, line_left); /* * If this will exceed the line length, print a new-line and some * leading white space. */ len = strlen(clst->name) + 1; if (line_left - len < 0) { fprintf(db, "\n "); line_left = MaxLine - 14; } fprintf(db, "%s ", clst->name); return line_left - len; } #endif /* Rttx */ /* * full_lst - print a full list of all files produced by translations * as represented in the dependencies section of the data base. */ novalue full_lst(fname) char *fname; { unsigned hashval; struct srcfile *sfile; struct cfile *clst; struct fileparts *fp; FILE *f; f = fopen(fname, "w"); if (f == NULL) err2("cannot open ", fname); for (hashval = 0; hashval < DHSize; ++hashval) for (sfile = dhash[hashval]; sfile != NULL; sfile = sfile->next) for (clst = sfile->dependents; clst != NULL; clst = clst->next) { /* * Remove the suffix from the name before printing. */ fp = fparse(clst->name); #if MVS if (*fp->member) fprintf(f, "%s(%s\n", fp->name, fp->member); else #endif /* MVS */ fprintf(f, "%s\n", fp->name); } if (fclose(f) != 0) err2("cannot close ", fname); } /* * impl_fnc - find or create implementation struct for function currently * being parsed. */ novalue impl_fnc(name) struct token *name; { /* * Set the global operation type for later use. If this is a * new function update the number of them. */ op_type = Function; num_fnc = set_impl(name, bhash, num_fnc, fnc_pre); } /* * impl_key - find or create implementation struct for keyword currently * being parsed. */ novalue impl_key(name) struct token *name; { /* * Set the global operation type for later use. If this is a * new keyword update the number of them. */ op_type = Keyword; num_key = set_impl(name, khash, num_key, key_pre); } /* * set_impl - lookup a function or keyword in a hash table and update the * entry, creating the entry if needed. */ static int set_impl(name, tbl, num_impl, pre) struct token *name; struct implement **tbl; int num_impl; char *pre; { register struct implement *ptr; char *name_s; unsigned hashval; /* * we only need the operation name and not the entire token. */ name_s = name->image; free_t(name); /* * If the operation is not in the hash table, put it there. */ if ((ptr = db_ilkup(name_s, tbl)) == NULL) { ptr = NewStruct(implement); hashval = IHasher(name_s); ptr->blink = tbl[hashval]; ptr->oper_typ = ((op_type == Function) ? 'F' : 'K'); nxt_pre(ptr->prefix, pre, 2); /* allocate a unique prefix */ ptr->name = name_s; ptr->op = NULL; tbl[hashval] = ptr; ++num_impl; } cur_impl = ptr; /* put entry in global variable for later access */ /* * initialize the entry based on global information set during parsing. */ set_prms(ptr); ptr->min_result = min_rs; ptr->max_result = max_rs; ptr->resume = rsm_rs; ptr->ret_flag = 0; if (comment == NULL) ptr->comment = ""; else { ptr->comment = comment->image; free_t(comment); comment = NULL; } ptr->ntnds = 0; ptr->tnds = NULL; ptr->nvars = 0; ptr->vars = NULL; ptr->in_line = NULL; ptr->iconc_flgs = 0; return num_impl; } /* * set_prms - set the parameter information of an implementation based on * the params list constructed during parsing. */ static novalue set_prms(ptr) struct implement *ptr; { struct sym_entry *sym; int nargs; int i; /* * Create an array of parameter flags for the operation. The flag * indicates the deref/underef and varargs status for each parameter. */ if (params == NULL) { ptr->nargs = 0; ptr->arg_flgs = NULL; } else { /* * The parameters are in reverse order, so the number of the parameters * can be determined by the number assigned to the first one on the * list. */ nargs = params->u.param_info.param_num + 1; ptr->nargs = nargs; ptr->arg_flgs = (int *)alloc((unsigned int)(sizeof(int) * nargs)); for (i = 0; i < nargs; ++i) ptr->arg_flgs[i] = 0; for (sym = params; sym != NULL; sym = sym->u.param_info.next) ptr->arg_flgs[sym->u.param_info.param_num] |= sym->id_type; } } /* * impl_op - find or create implementation struct for operator currently * being parsed. */ novalue impl_op(op_sym, name) struct token *op_sym; struct token *name; { register struct implement *ptr; char *op; int nargs; unsigned hashval; /* * The operator symbol is needed but not the entire token. */ op = op_sym->image; free_t(op_sym); /* * The parameters are in reverse order, so the number of the parameters * can be determined by the number assigned to the first one on the * list. */ if (params == NULL) nargs = 0; else nargs = params->u.param_info.param_num + 1; /* * Locate the operator in the hash table; it must match both the * operator symbol and the number of arguments. If the operator is * not there, create an entry. */ hashval = IHasher(op); ptr = ohash[hashval]; while (ptr != NULL && (ptr->op != op || ptr->nargs != nargs)) ptr = ptr->blink; if (ptr == NULL) { ptr = NewStruct(implement); ptr->blink = ohash[hashval]; ptr->oper_typ = 'O'; nxt_pre(ptr->prefix, op_pre, 2); /* allocate a unique prefix */ ptr->op = op; ohash[hashval] = ptr; ++num_op; } /* * Put the entry and operation type in global variables for * later access. */ cur_impl = ptr; op_type = Operator; /* * initialize the entry based on global information set during parsing. */ ptr->name = name->image; free_ VMS.BCK&![V9.SRC.RTT]RTTDB.C;1;1;1;1T$Qt(name); set_prms(ptr); ptr->min_result = min_rs; ptr->max_result = max_rs; ptr->resume = rsm_rs; ptr->ret_flag = 0; if (comment == NULL) ptr->comment = ""; else { ptr->comment = comment->image; free_t(comment); comment = NULL; } ptr->ntnds = 0; ptr->tnds = NULL; ptr->nvars = 0; ptr->vars = NULL; ptr->in_line = NULL; ptr->iconc_flgs = 0; } /* * set_r_seq - save result sequence information for updating the * operation entry. */ novalue set_r_seq(min, max, resume) long min; long max; int resume; { if (min == UnbndSeq) min = 0; min_rs = min; max_rs = max; rsm_rs = resume; } *[V9.SRC.RTT]RTTGRAM.Y;1+,0 .E/ 4EC-!0123KPWOF566*7P89Jj$GHJ/* * Grammar for RTL. The C portion of the grammar is based on * the ANSI Draft Standard - 3rd review. */ %{ #include "rtt1.h" #define YYMAXDEPTH 250 %} %union { struct token *t; struct node *n; long i; } %token Identifier StrLit LStrLit FltConst DblConst LDblConst %token CharConst LCharConst IntConst UIntConst LIntConst ULIntConst %token Arrow Incr Decr LShft RShft Leq Geq Equal Neq %token And Or MultAsgn DivAsgn ModAsgn PlusAsgn %token MinusAsgn LShftAsgn RShftAsgn AndAsgn %token XorAsgn OrAsgn Sizeof Intersect OpSym %token Typedef Extern Static Auto Register Tended %token Char Short Int Long Signed Unsigned Float Doubl Const Volatile %token Void TypeDefName Struct Union Enum Ellipsis %token Case Default If Else Switch While Do For Goto Continue Break Return %token '%' '&' '(' ')' '*' '+' ',' '-' '.' '/' '{' '|' '}' '~' '[' ']' %token '^' ':' ';' '<' '=' '>' '?' '!' '@' '\\' %token Runerr Is Cnv Def Exact Empty_type IconType Component Variable %token Any_value Named_var Struct_var C_Integer Arith_case %token C_Double C_String Tmp_string Tmp_cset Body End Function Keyword %token Operator Underef Declare Suspend Fail Inline Abstract Store %token Type New All_fields Then Type_case Of Len_case Constant Errorfail %type unary_op assign_op struct_or_union typedefname %type identifier op_name key_const union attrb_name %type any_ident storage_class_spec type_qual %type primary_expr postfix_expr arg_expr_lst unary_expr cast_expr %type multiplicative_expr additive_expr shift_expr relational_expr %type equality_expr and_expr exclusive_or_expr inclusive_or_expr %type logical_and_expr logical_or_expr conditional_expr assign_expr %type expr opt_expr constant_expr opt_constant_expr dcltion %type typ_dcltion_specs dcltion_specs type_ind type_storcl_tqual_lst %type storcl_tqual_lst init_dcltor_lst no_tdn_init_dcltor_lst init_dcltor %type no_tdn_init_dcltor type_spec stnd_type struct_or_union_spec %type struct_dcltion_lst struct_dcltion struct_dcltion_specs struct_type_ind %type struct_type_lst struct_dcltor_lst struct_dcltor %type struct_no_tdn_dcltor_lst struct_no_tdn_dcltor enum_spec enumerator_lst %type enumerator dcltor no_tdn_dcltor direct_dcltor no_tdn_direct_dcltor %type pointer opt_pointer tqual_lst param_type_lst opt_param_type_lst %type param_lst param_dcltion ident_lst type_tqual_lst type_name %type abstract_dcltor direct_abstract_dcltor initializer initializer_lst %type stmt labeled_stmt compound_stmt dcltion_lst opt_dcltion_lst stmt_lst %type expr_stmt selection_stmt iteration_stmt jump_stmt parm_dcls_or_ids %type func_head opt_stmt_lst local_dcls local_dcl %type dest_type i_type_name opt_actions actions action ret_val detail_code %type runerr variable checking_conversions label %type type_check type_select_lst opt_default type_select selector_lst %type c_opt_default c_type_select c_type_select_lst non_lbl_stmt %type simple_check_conj simple_check len_select_lst len_select %type type_computations side_effect_lst side_effect %type type basic_type type_lst %type opt_plus length /* Get rid of shift/reduce conflict on Else. Use precedence to force shift of Else rather than reduction of if-cond-expr. This insures that the Else is always paired with innermost If. Note, IfStmt is a dummy token. */ %nonassoc IfStmt %nonassoc Else %start translation_unit %% primary_expr : identifier {$$ = sym_node($1);} | StrLit {$$ = node0(PrimryNd, $1);} | LStrLit {$$ = node0(PrimryNd, $1);} | FltConst {$$ = node0(PrimryNd, $1);} | DblConst {$$ = node0(PrimryNd, $1);} | LDblConst {$$ = node0(PrimryNd, $1);} | CharConst {$$ = node0(PrimryNd, $1);} | LCharConst {$$ = node0(PrimryNd, $1);} | IntConst {$$ = node0(PrimryNd, $1);} | UIntConst {$$ = node0(PrimryNd, $1);} | LIntConst {$$ = node0(PrimryNd, $1);} | ULIntConst {$$ = node0(PrimryNd, $1);} | '(' expr ')' {$$ = node1(PrefxNd, $1, $2); free_t($3);} ; postfix_expr : primary_expr | postfix_expr '[' expr ']' {$$ = node2(BinryNd, $2, $1, $3); free_t($4);} | postfix_expr '(' ')' {$$ = node2(BinryNd, $3, $1, NULL); free_t($2);} | postfix_expr '(' arg_expr_lst ')' {$$ = node2(BinryNd, $4, $1, $3); free_t($2);} | postfix_expr '.' any_ident {$$ = node2(BinryNd, $2, $1, $3);} | postfix_expr Arrow any_ident {$$ = node2(BinryNd, $2, $1, $3);} | postfix_expr Incr {$$ = node1(PstfxNd, $2, $1);} | postfix_expr Decr {$$ = node1(PstfxNd, $2, $1);} | Is ':' i_type_name '(' assign_expr ')' {$$ = node2(BinryNd, $1, $3, $5); free_t($2); free_t($4); free_t($6);} | Cnv ':' dest_type '(' assign_expr ',' assign_expr ')' {$$ = node3(TrnryNd, $1, $3, $5, $7), free_t($2); free_t($4); free_t($6); free_t($8);} | Def ':' dest_type '(' assign_expr ',' assign_expr ',' assign_expr ')' {$$ = node4(QuadNd, $1, $3, $5, $7, $9), free_t($2); free_t($4); free_t($6); free_t($8); free_t($10);} ; arg_expr_lst : assign_expr | arg_expr_lst ',' assign_expr {$$ = node2(CommaNd, $2, $1, $3);} ; unary_expr : postfix_expr | Incr unary_expr {$$ = node1(PrefxNd, $1, $2);} | Decr unary_expr {$$ = node1(PrefxNd, $1, $2);} | unary_op cast_expr {$$ = node1(PrefxNd, $1, $2);} | Sizeof unary_expr {$$ = node1(PrefxNd, $1, $2);} | Sizeof '(' type_name ')' {$$ = node1(PrefxNd, $1, $3); free_t($2); free_t($4);} ; unary_op : '&' | '*' | '+' | '-' | '~' | '!' ; cast_expr : unary_expr | '(' type_name ')' cast_expr {$$ = node2(BinryNd, $1, $2, $4); free_t($3);} ; multiplicative_expr : cast_expr | multiplicative_expr '*' cast_expr {$$ = node2(BinryNd, $2, $1, $3);} | multiplicativ6bzkyx u " !V A0bt76VAj?G_:e?nAp`r8tv 4)# /w`C\[`I` fT:]R^.kX -T]$4PtELI9)`gSeD^h\k Q@OV F#DVZk\ ^ _]0W@2];MFHj'Jc)cQc-bxwN7E] na1-8@Xt.Yn#=.>F/_J>./@W(*/UN("YpTcWT]u @X:'X-D?o1E9 @xGdB;_ G/.)e  A6V|y7  P0Nw<r^)WG9f>L Eoc =$relx:@=F}kcQiI:U {Yco@gQq9#]Ze?zo)wS1"QiX+/*> "s |DTuWdst)"+Z]M="!` N0TBA {v"BQ"PQ"XYGWQt"H$>-nBDl ~ v;0_OEih/5 Q<}i, [+zY}I~#[~PT wjzwt( N@ze*SfX[ImGQA3$A!D dHT] T Q*QkU7S1!@ *~QEbMNY,5^WUe?Qa|T4lb?D;GCfl27C;EO'a;r5 1SGF/)\xNh)f$^hy )k/u* cXr($%Zl5aXRNIG[kE"G3Mlb8mW-YfS> L,")]{(p11b4^?b%+0n`L+M?8F.c'6vh!O|zm&8l(>9R !3_8?Ki:fyq}$(t3z` k M  &@CXQf4}oBz~?bzS!]"&,vidE6)dm>8yjH.u ALE)K 0J ]NCpq@ P$[E(}Q` ZjE!XJ R@LRAyMZSkL$ytN(?SeT/o?CS^_J E) O)wVDB1\cH-h]J I#}c.lOyB5 |{VW!aY7P{W!U KN_X@+~c.,E Yp3'6*ugR$UȜ`r깠Z c68mcbF'Ty-8j6%f6f~`ePrc/+oZp@% .}1>cyw'ZiwK$m9}ZB`7BB3Ie`5&yWj4"C< zcC[w-)..;TCU>Re{"u^?w=(3Vwo."rW'%:|NhnG[8't(*+rK]Q]u{%_Yfc&Munz=VmLh` N2u4>z} *CH(y,^D%Pkg}4 6>/C+_[{Zj4D5p$ fvO( )t7(ded:`L.DK)QoBAe[RJ|3]vgA=TE&O^" FBW 9;%RaOSnK .v@FcHP_H*)vV8gA^Y[F~4]i"~jT=(|-nF{}e-va~55 `YR7 y8Mw?Yep*H3CW&VK7Jw0 Vjq%}bSygz_{kPa)=tx\>kr*`HZu +Y@~#>Q57QwQ&{CD,h8GGE0 NjD&afPI _EtFoKn7/WRR#V9#KnF8:7KrfnHRE^UUXS;k.$ TtTCtlrB&H i;MoPRrj(y/q\ID`  ?'%>)F"h^1ez+0m| x)w]Fo~Sr Um; e~NaLoN5zzPkyr,"`=tX+>CeR:nYx{5|Vcg>?zrm$B~73)W=0NWk,BVlf:fjzWRd| a pe4mi0L~C9GNqGaHC"#>\'I=3A -3 8\R 1 Fb4a1YjG"FUC?A[\i[\BY!HSvK-2I8d'Vz 1'{8bV&,fZR9!|RKQ=@ZR^^E'--G>Ql1.7??ZIz  ;,WfX/D EH$Q8}\-O^H7C CuNtN xkD@" E&s8]! W m%IR5p\J! L8AYme3z;PL 3+r;IQrRG `=T2U[_N8x%M!_&Fc0#86_5b&Ei.W x(M^/2cMhlT/bCpB'NUCz0i&HEt&burLlD-PS&6~(6%-\ ryv"eAi]uRZ5o>&_UD!e[f!Xkmcq#v Jl6}qu`J0B y12LXAd-2v|YiPv,pO5dfJ? IrE7 DEN>p4-M2u{ud*~Cb~/ Z{>L,FdV+K7x`V09Zj! &.eaX/P{gZZCpB1{edDtL|a9xd1ctku:f/ E52IuD9K(s(g4t5Fx.5;r(,r.fDCc.xo'R32G67'u/wb%lK^5.8rH@es\n,&.sXx*&"?p]chZ*S@u"%tf7Dh1 cdG)JMqhg2f?1CRp-'M9JE'oJ}rugP-{d)d}e+601uIa *M*u~/`t$s[? O@"=;i`9( ApBQgjjj.TFk#sTK |Z ).0M LVx(u -% 04?"3 (j*9?#__Orjg$W!w|!E(*3J>FbyQMbh`=0?|%zX9v"h\"Pp>3A_b>% ѣ1odvrNhKkO>_Dl9 [>gD&z,1ND-t}G PLTH"Y-X~L{ws +N5wbz f /N0^5_6O+EI_`(RUoSX"]'x{L\ZyKIo|].4 3rM(_:Xa7ma<\ 9 "]Qq@>7Lu CUJ^ zP|R9U;sJQ*QdmP U HrGWw@ K bNX]Xch5)sTPX+8*PjD4U5a{5SpH TZ;8j$9Y i N;:O!oA/"pJ] Gu9)+ I \(Z`] FSC/"XQu<|-,~pW;) K !jF'u\%&"K  H-K]HT`|'Bf=/uVvKa(q@(g2z$Coc3e?9\S,^b2 b @R9rBYu4JA^0BC UJY'K20\} 5iN/Uq#AAYrtp62:u]\%hO()<6mrKV2s!jgBV*3'Os c:C' H Ppq1zpn}1:pgAoBwz6#,&+;2>"?D:fn+G?:Nq"51~3f* 3Il35(Qz[ne*8a1Rw;)P<_LF0wlmI8,kzk9\4=%ZE=H!8pW톷wGySR[np'eh\}cBLXЀs/&-7xC?0;p,p~ c3X=glA=E DwJY:f u,.J= d K&07>A>p=9HTmhX<t3~XXH8wI98&_kCx40*p''XExayy@%@@ +cO8x\+(MK~gh3?J?d8jnc)E0E-<Le,&-4\~#66p(m+q;r&4{OzrzxK~zz `~9~v9\V n]r.Zw'xF( Dkz6x":^9ATK[T)(31-tDF?2 \'d6b8) \Io;Vz "KsyIU"QD{TM>cnA.$E[PBi"MfnlSfze=+f{&zmA\WR>e0SW"8vbc-%{~ D1U'${CU%G\TOWl ]U2a#]DTWz*'C9Zqx;Xd. EZTst]qg~V:Ap\o h-*3BPj} @ S!JH S*I W@i]Sni,b ? WH{HD{q( ')yL*KH=Pmeq2=FiF :[6,C$,jW'^u2e%A)g[H]U.c 7~BC]l&?j$/J@|%Zen 0~L.w[!> Z@uW GMG @/;bqD_`UA`/|tXj@I+vcd1se?*HOBQWT0Q#F U^He;1]?7ob9+ EQr=%gL+RykJUR gi0xX(t$'1g]LR./o`@VS'I yZ32oba- I2SX l\  d+ Q. v3kt&_yK A&ASHYpDp"xA\ NOuW3]}=0 |h b( $M}W2Fi>gJAWNz>`BxGR<_VSPJ(d4-'yFgau@rUO#H,|-%#7.eE6sgG7=z])LaUP 2??6!&3qxN;c$rbR')a %g G+ksoLh k"h1ztx8zwzT})]V`!||,346qn"u6^ Y_WTU^emU%y25O6b=yt=O3d=[5B-aI5iojdBe!|d;]1 Err&N_5;1m ct&gx)k$_|N.g|Xp7@JH/)_i bsY]Qr!:bUhMieG><cUZ5 IZ Hy.. "&!a7w]D24l9a8,d8sS|r4=7c)Ot3iJ>k8+G!SVvD[1fD&+(!o6 (qs[oc| c|f8^~}F=NB *v 0oj(j:8C_ 'h(? o{bea9!wPz c2)/ha5SCC*hU6f5fedWM4Uwf2J,7k ~EO1#eRJ=k@/7[qkY%blCC8*%yL}v1,zW%r)|/Oxmx.:K9m6D^or") olVLz=Q\ju S~)z9ZB0x,$in$ W|p'@Zo<;i^F5  e -ebna m/:)py]%#~=qd0oYo*1A+42 }j~9pY6='sv*XV7{m.YdEtsc&g 4 o"f8( 0-orc6j9l,vd`y0?#>EMy\+g e0#P(Tuj/f0k&U%zwqJibv Y!y7s@g7215U&uhm)I!z{Yaa,G*uNOA;d`o:zsDd*<&pD-e/=s.LXKwk5s)Mb 9N%v1U=aF7lI% \ m= I2vonp__aaF!q8t7OSL . 9K 5)9aGg 6qht`Ti43^ FR;`yx4+%3zN)FXgXWPCgh.FbsN&pu&[CJVV8~qoC`>6 [7+c&p,kiQ7ybGbmAI?4/`6 y2 k2":C35}9u7x71D<]~7߈&p0[a{"=_$[9!dO(8=W09L.$@=}e`xMe9$(RF ook`UuYpPU+yDE$,eOo_OgkwgrYD[c4 qZ>;_2)ed@1H6]5:(^VMwC*aobEN Teb46Yji$>97./ Yaf@d[&W>%BB#!Fn,Q#q <(S~xD0h=pr>t r`n[B%:o#JDaY\CjOV]hHJ2|I`T~yRK}s&/K&{_?:6tpY_WmCt i)ii95^1zD+'@Sif8.F5oU91mc;YZVP!9KcYH6<[AP TS2/r{0]XQ{Z.cf;X(=M9{3F\WDr*w7}wVV(6[&dxS2f]t;O],=4pR0r7nv/VG7;/GCIV>J F$H CY TY|6lKCwV U 5RCZKETH!e[F`jP=ZvZ[\t5 U{+VU\{h=A_6]@zY (.PGbz S^2A>.}VI>z(d(a ) I*6}=A6F$"(  w 4p;@k/1EH`SZNBNAoq[tEPPoyK ;4dH<\kYA ]a c| e{,l6xSw#y%Oh E.4`Z#DL RvuiJj59$=aPR' _O\4f`}QF@N/a.Z_!Krhj[s OoJXiy!W3F&%G7TNOHVUDNoDTG(_=kVC6{0*D_bg;kX[N_WO/&eLKGjLJ&#iJ7AW OES]Ouk<\OdMBKNL_3LRe-T%=5NnRfSVk)Wlc17C,MT X~5$$1h Hv?l7)8L]-:V$UI6w yb[3GKAKF6kOE IRedo-B .#FH]6x| AS"|6DQrxh\RV1=^k<[S;BX\B#OM_T D8[5Z^FXFFOK WY~[J\ )e[MLJmT YBB_?:8_*3S`OL]JIi[1_]"u/iU6 AW33F K@HB|lX CS,s,| ETMU define Break 325 # define Return 326 # define Runerr 327 # defIp VMS.BCK0 ![V9.SRC.RTT]RTTGRAM.Y;1;111E e_expr '/' cast_expr {$$ = node2(BinryNd, $2, $1, $3);} | multiplicative_expr '%' cast_expr {$$ = node2(BinryNd, $2, $1, $3);} ; additive_expr : multiplicative_expr | additive_expr '+' multiplicative_expr {$$ = node2(BinryNd, $2, $1, $3);} | additive_expr '-' multiplicative_expr {$$ = node2(BinryNd, $2, $1, $3);} ; shift_expr : additive_expr | shift_expr LShft additive_expr {$$ = node2(BinryNd, $2, $1, $3);} | shift_expr RShft additive_expr {$$ = node2(BinryNd, $2, $1, $3);} ; relational_expr : shift_expr | relational_expr '<' shift_expr {$$ = node2(BinryNd, $2, $1, $3);} | relational_expr '>' shift_expr {$$ = node2(BinryNd, $2, $1, $3);} | relational_expr Leq shift_expr {$$ = node2(BinryNd, $2, $1, $3);} | relational_expr Geq shift_expr {$$ = node2(BinryNd, $2, $1, $3);} ; equality_expr : relational_expr | equality_expr Equal relational_expr {$$ = node2(BinryNd, $2, $1, $3);} | equality_expr Neq relational_expr {$$ = node2(BinryNd, $2, $1, $3);} ; and_expr : equality_expr | and_expr '&' equality_expr {$$ = node2(BinryNd, $2, $1, $3);} ; exclusive_or_expr : and_expr | exclusive_or_expr '^' and_expr {$$ = node2(BinryNd, $2, $1, $3);} ; inclusive_or_expr : exclusive_or_expr | inclusive_or_expr '|' exclusive_or_expr {$$ = node2(BinryNd, $2, $1, $3);} ; logical_and_expr : inclusive_or_expr | logical_and_expr And inclusive_or_expr {$$ = node2(BinryNd, $2, $1, $3);} ; logical_or_expr : logical_and_expr | logical_or_expr Or logical_and_expr {$$ = node2(BinryNd, $2, $1, $3);} ; conditional_expr : logical_or_expr | logical_or_expr '?' expr ':' conditional_expr {$$ = node3(TrnryNd, $2, $1, $3, $5); free_t($4);} ; assign_expr : conditional_expr | unary_expr assign_op assign_expr {$$ = node2(BinryNd, $2, $1, $3);} ; assign_op : '=' | MultAsgn | DivAsgn | ModAsgn | PlusAsgn | MinusAsgn | LShftAsgn | RShftAsgn | AndAsgn | XorAsgn | OrAsgn ; expr : assign_expr | expr ',' assign_expr {$$ = node2(BinryNd, $2, $1, $3);} ; opt_expr : {$$ = NULL;} | expr ; constant_expr : conditional_expr ; opt_constant_expr : {$$ = NULL;} | constant_expr ; dcltion : typ_dcltion_specs ';' {$$ = node2(BinryNd, $2, $1, NULL); dcl_stk->kind_dcl = OtherDcl;} | typ_dcltion_specs init_dcltor_lst ';' {$$ = node2(BinryNd, $3, $1, $2); dcl_stk->kind_dcl = OtherDcl;} | storcl_tqual_lst no_tdn_init_dcltor_lst ';' {$$ = node2(BinryNd, $3, $1, $2); dcl_stk->kind_dcl = OtherDcl;} ; typ_dcltion_specs : type_ind | storcl_tqual_lst type_ind {$$ = node2(LstNd, NULL, $1, $2);} ; dcltion_specs : typ_dcltion_specs | storcl_tqual_lst ; type_ind : typedefname {$$ = node0(PrimryNd, $1);} | typedefname storcl_tqual_lst {$$ = node2(LstNd, NULL, node0(PrimryNd, $1), $2);} | type_storcl_tqual_lst ; type_storcl_tqual_lst : stnd_type | type_storcl_tqual_lst stnd_type {$$ = node2(LstNd, NULL, $1, $2);} | type_storcl_tqual_lst storage_class_spec {$$ = node2(LstNd, NULL, $1, $2);} | type_storcl_tqual_lst type_qual {$$ = node2(LstNd, NULL, $1, $2);} ; storcl_tqual_lst : storage_class_spec | type_qual | storcl_tqual_lst storage_class_spec {$$ = node2(LstNd, NULL, $1, $2);} | storcl_tqual_lst type_qual {$$ = node2(LstNd, NULL, $1, $2);} ; init_dcltor_lst : init_dcltor | init_dcltor_lst ',' init_dcltor {$$ = node2(CommaNd, $2, $1, $3);} ; no_tdn_init_dcltor_lst : no_tdn_init_dcltor | no_tdn_init_dcltor_lst ',' no_tdn_init_dcltor {$$ = node2(CommaNd, $2, $1, $3);} ; init_dcltor : dcltor {$$ = $1; id_def($1, NULL);} | dcltor '=' initializer {$$ = node2(BinryNd, $2, $1, $3); id_def($1, $3);} ; no_tdn_init_dcltor : no_tdn_dcltor {$$ = $1; id_def($1, NULL);} | no_tdn_dcltor '=' initializer {$$ = node2(BinryNd, $2, $1, $3); id_def($1, $3);} ; storage_class_spec : Typedef {$$ = node0(PrimryNd, $1); dcl_stk->kind_dcl = IsTypedef;} | Extern {$$ = node0(PrimryNd, $1);} | Static {$$ = node0(PrimryNd, $1);} | Auto {$$ = node0(PrimryNd, $1);} | Register {$$ = node0(PrimryNd, $1);} ; type_spec : stnd_type | typedefname {$$ = node0(PrimryNd, $1);} ; stnd_type : Void {$$ = node0(PrimryNd, $1);} | Char {$$ = node0(PrimryNd, $1);} | Short {$$ = node0(PrimryNd, $1);} | Int {$$ = node0(PrimryNd, $1);} | Long {$$ = node0(PrimryNd, $1);} | Float {$$ = node0(PrimryNd, $1);} | Doubl {$$ = node0(PrimryNd, $1);} | Signed {$$ = node0(PrimryNd, $1);} | Unsigned {$$ = node0(PrimryNd, $1);} | struct_or_union_spec | enum_spec ; struct_or_union_spec : struct_or_union any_ident '{' struct_dcltion_lst '}' {$$ = node2(BinryNd, $1, $2, $4); free_t($3); free_t($5);} | struct_or_union '{' struct_dcltion_lst '}' {$$ = node2(BinryNd, $1, NULL, $3); free_t($2); free_t($4);} | struct_or_union any_ident {$$ = node2(BinryNd, $1, $2, NULL);} ; struct_or_union : Struct | Union ; struct_dcltion_lst : struct_dcltion | struct_dcltion_lst struct_dcltion {$$ = node2(LstNd, NULL, $1, $2);} ; struct_dcltion : struct_dcltion_specs struct_dcltor_lst ';' {$$ = node2(BinryNd, $3, $1, $2);} | tqual_lst struct_no_tdn_dcltor_lst ';' {$$ = node2(BinryNd, $3, $1, $2);} ; struct_dcltion_specs : struct_type_ind | tqual_lst struct_type_ind {$$ = node2(LstNd, NULL, $1, $2);} ; struct_type_ind : typedefname {$$ = node0(PrimryNd, $1);} | typedefname tqual_lst {$$ = node2(LstNd, NULL, node0(PrimryNd, $1), $2);} | struct_type_lst ; struct_type_lst : stnd_type | struct_type_lst stnd_type {$$ = node2(LstNd, NULL, $1, $2);} | struct_type_lst type_qual {$$ = node2(LstNd, NULL, $1, $2);} ; struct_dcltor_lst : struct_dcltor | struct_dcltor_lst ',' struct_dcltor {$$ = node2(CommaNd, $2, $1, $3);} ; struct_dcltor : dcltor {$$ = node2(StrDclNd, NULL, $1, NULL); if (dcl_stk->parms_done) pop_cntxt();} | ':' constant_expr {$$ = node2(StrDclNd, $1, NULL, $2);} | dcltor ':' {if (dcl_stk->parms_done) pop_cntxt();} constant_expr {$$ = node2(StrDclNd, $2, $1, $4);} ; struct_no_tdn_dcltor_lst : struct_no_tdn_dcltor | struct_no_tdn_dcltor_lst ',' struct_no_tdn_dcltor {$$ = node2(CommaNd, $2, $1, $3);} ; struct_no_tdn_dcltor : no_tdn_dcltor {$$ = node2(StrDclNd, NULL, $1, NULL); if (dcl_stk->parms_done) pop_cntxt();} | ':' constant_expr {$$ = node2(StrDclNd, $1, NULL, $2);} | no_tdn_dcltor ':' {if (dcl_stk->parms_done) pop_cntxt();} constant_ex؟  VMS.BCK0 ![V9.SRC.RTT]RTTGRAM.Y;1;1;1EJ$pr {$$ = node2(StrDclNd, $2, $1, $4);} ; enum_spec : Enum {push_cntxt(0);} '{' enumerator_lst '}' {$$ = node2(BinryNd, $1, NULL, $4); pop_cntxt(); free_t($3); free_t($5);} | Enum any_ident {push_cntxt(0);} '{' enumerator_lst '}' {$$ = node2(BinryNd, $1, $2, $5); pop_cntxt(); free_t($4); free_t($6);} | Enum any_ident {$$ = node2(BinryNd, $1, $2, NULL);} ; enumerator_lst : enumerator | enumerator_lst ',' enumerator {$$ = node2(CommaNd, $2, $1, $3);} ; enumerator : any_ident {$$ = $1; id_def($1, NULL);} | any_ident '=' constant_expr {$$ = node2(BinryNd, $2, $1, $3); id_def($1, $3);} ; type_qual : Const {$$ = node0(PrimryNd, $1);} | Volatile {$$ = node0(PrimryNd, $1);} ; dcltor : opt_pointer direct_dcltor {$$ = node2(ConCatNd, NULL, $1, $2);} ; no_tdn_dcltor : opt_pointer no_tdn_direct_dcltor {$$ = node2(ConCatNd, NULL, $1, $2);} ; direct_dcltor : any_ident | '(' dcltor ')' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | direct_dcltor '[' opt_constant_expr ']' {$$ = node2(BinryNd, $2, $1, $3); free_t($4);} | direct_dcltor '(' {push_cntxt(1);} parm_dcls_or_ids ')' {$$ = node2(BinryNd, $5, $1, $4); if (dcl_stk->nest_lvl == 2) dcl_stk->parms_done = 1; else pop_cntxt(); free_t($2);} ; no_tdn_direct_dcltor : identifier {$$ = node0(PrimryNd, $1);} | '(' no_tdn_dcltor ')' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | no_tdn_direct_dcltor '[' opt_constant_expr ']' {$$ = node2(BinryNd, $2, $1, $3); free_t($4);} | no_tdn_direct_dcltor '(' {push_cntxt(1);} parm_dcls_or_ids ')' {$$ = node2(BinryNd, $5, $1, $4); if (dcl_stk->nest_lvl == 2) dcl_stk->parms_done = 1; else pop_cntxt(); free_t($2);} ; parm_dcls_or_ids : opt_param_type_lst | ident_lst ; pointer : '*' {$$ = node0(PrimryNd, $1);} | '*' tqual_lst {$$ = node1(PreSpcNd, $1, $2);} | '*' pointer {$$ = node1(PrefxNd, $1, $2);} | '*' tqual_lst pointer {$$ = node1(PrefxNd, $1, node2(LstNd, NULL, $2,$3));} ; opt_pointer : {$$ = NULL;} | pointer ; tqual_lst : type_qual | tqual_lst type_qual {$$ = node2(LstNd, NULL, $1, $2);} ; param_type_lst : param_lst | param_lst ',' Ellipsis {$$ = node2(CommaNd, $2, $1, node0(PrimryNd, $3));} ; opt_param_type_lst : {$$ = NULL;} | param_type_lst ; param_lst : param_dcltion | param_lst ',' param_dcltion {$$ = node2(CommaNd, $2, $1, $3);} ; param_dcltion : dcltion_specs no_tdn_dcltor {$$ = node2(LstNd, NULL, $1, $2); id_def($2, NULL);} | dcltion_specs | dcltion_specs abstract_dcltor {$$ = node2(LstNd, NULL, $1, $2);} ; ident_lst : identifier {$$ = node0(PrimryNd, $1);} | ident_lst ',' identifier {$$ = node2(CommaNd, $2, $1, node0(PrimryNd,$3));} ; type_tqual_lst : type_spec | type_qual | type_spec type_tqual_lst {$$ = node2(LstNd, NULL, $1, $2);} | type_qual type_tqual_lst {$$ = node2(LstNd, NULL, $1, $2);} ; type_name : type_tqual_lst | type_tqual_lst abstract_dcltor {$$ = node2(LstNd, NULL, $1, $2);} ; abstract_dcltor : pointer | opt_pointer direct_abstract_dcltor {$$ = node2(ConCatNd, NULL, $1, $2);} ; direct_abstract_dcltor : '(' abstract_dcltor ')' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | '[' opt_constant_expr ']' {$$ = node2(BinryNd, $1, NULL, $2); free_t($3);} | direct_abstract_dcltor '[' opt_constant_expr ']' {$$ = node2(BinryNd, $2, $1, $3); free_t($4);} | '(' {push_cntxt(1);} opt_param_type_lst ')' {$$ = node2(BinryNd, $4, NULL, $3); pop_cntxt(); free_t($1);} | direct_abstract_dcltor '(' {push_cntxt(1);} opt_param_type_lst ')' {$$ = node2(BinryNd, $5, $1, $4); pop_cntxt(); free_t($2);} ; initializer : assign_expr | '{' initializer_lst '}' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | '{' initializer_lst ',' '}' {$$ = node1(PrefxNd, $1, node2(CommaNd, $3, $2, NULL)); free_t($4);} ; initializer_lst : initializer | initializer_lst ',' initializer {$$ = node2(CommaNd, $2, $1, $3);} ; stmt : labeled_stmt | non_lbl_stmt ; non_lbl_stmt : {push_cntxt(1);} compound_stmt {$$ = $2; pop_cntxt();} | expr_stmt | selection_stmt | iteration_stmt | jump_stmt | Runerr '(' assign_expr ')' ';' {$$ = node2(BinryNd, $1, $3, NULL); free_t($2); free_t($4);} | Runerr '(' assign_expr ',' assign_expr ')' ';' {$$ = node2(BinryNd, $1, $3, $5); free_t($2); free_t($4); free_t($6);} ; labeled_stmt : label ':' stmt {$$ = node2(BinryNd, $2, $1, $3);} | Case constant_expr ':' stmt {$$ = node2(BinryNd, $1, $2, $4); free_t($3);} | Default ':' stmt {$$ = node1(PrefxNd, $1, $3); free_t($2);} ; compound_stmt : '{' opt_stmt_lst '}' {$$ = comp_nd($1, NULL, $2); free_t($3);} | '{' local_dcls opt_stmt_lst '}' {$$ = comp_nd($1, $2, $3); free_t($4);} ; dcltion_lst : dcltion | dcltion_lst dcltion {$$ = node2(LstNd, NULL, $1, $2);} ; opt_dcltion_lst : {$$ = NULL;} | dcltion_lst ; local_dcls : local_dcl | local_dcls local_dcl {$$ = ($2 == NULL ? $1 : node2(LstNd, NULL, $1, $2));} ; local_dcl : dcltion | Tended tended_type init_dcltor_lst ';' {$$ = NULL; free_t($1); free_t($4); dcl_stk->kind_dcl = OtherDcl;} ; tended_type : Char {tnd_char(); free_t($1);} | Struct identifier {tnd_strct($2); free_t($1);} | Struct TypeDefName {tnd_strct($2); free_t($1);} | Union identifier {tnd_union($2); free_t($1);} ; stmt_lst : stmt | stmt_lst stmt {$$ = node2(ConCatNd, NULL, $1, $2);} ; opt_stmt_lst : {$$ = NULL;} | stmt_lst ; expr_stmt : opt_expr ';' {$$ = node1(PstfxNd, $2, $1);} ; selection_stmt : If '(' expr ')' stmt %prec IfStmt {$$ = node3(TrnryNd, $1, $3, $5,NULL); free_t($2); free_t($4);} | If '(' expr ')' stmt Else stmt {$$ = node3(TrnryNd, $1, $3, $5, $7); free_t($2); free_t($4);HQ VMS.BCK0 ![V9.SRC.RTT]RTTGRAM.Y;1;1;1E׽+ free_t($6);} | Switch '(' expr ')' stmt {$$ = node2(BinryNd, $1, $3, $5); free_t($2); free_t($4);} | Type_case expr Of '{' c_type_select_lst c_opt_default '}' {$$ = node3(TrnryNd, $1, $2, $5, $6); free_t($3); free_t($4); free_t($7);} ; c_type_select_lst : c_type_select {$$ = node2(ConCatNd, NULL, NULL, $1);} | c_type_select_lst c_type_select {$$ = node2(ConCatNd, NULL, $1, $2);} ; c_type_select : selector_lst non_lbl_stmt {$$ = node2(ConCatNd, NULL, $1, $2);} ; c_opt_default : {$$ = NULL;} | Default ':' non_lbl_stmt {$$ = $3; free_t($1); free_t($2);} ; iteration_stmt : While '(' expr ')' stmt {$$ = node2(BinryNd, $1, $3, $5); free_t($2); free_t($4);} | Do stmt While '(' expr ')' ';' {$$ = node2(BinryNd, $1, $2, $5); free_t($3); free_t($4); free_t($6); free_t($7);} | For '(' opt_expr ';' opt_expr ';' opt_expr ')' stmt {$$ = node4(QuadNd, $1, $3, $5, $7, $9); free_t($2); free_t($4); free_t($6); free_t($8);} ; jump_stmt : Goto label';' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | Continue ';' {$$ = node0(PrimryNd, $1); free_t($2);} | Break ';' {$$ = node0(PrimryNd, $1); free_t($2);} | Return ret_val ';' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | Suspend ret_val ';' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | Fail ';' {$$ = node0(PrimryNd, $1); free_t($2);} | Errorfail ';' {$$ = node0(PrimryNd, $1); free_t($2);} ; translation_unit : | extrn_decltn_lst ; extrn_decltn_lst : external_dcltion | extrn_decltn_lst external_dcltion ; external_dcltion : function_definition | dcltion {dclout($1);} | definition ; function_definition : func_head {func_def($1);} opt_dcltion_lst compound_stmt {fncout($1, $3, $4);} ; func_head : no_tdn_dcltor {$$ = node2(LstNd, NULL, NULL, $1);} | storcl_tqual_lst no_tdn_dcltor {$$ = node2(LstNd, NULL, $1, $2);} | typ_dcltion_specs dcltor {$$ = node2(LstNd, NULL, $1, $2);} ; any_ident : identifier {$$ = node0(PrimryNd, $1);} | typedefname {$$ = node0(PrimryNd, $1);} ; label : identifier {$$ = lbl($1);} | typedefname {$$ = lbl($1);} ; typedefname : TypeDefName | C_Integer /* hack to allow C_integer to be defined with typedef */ | C_Double /* for consistency with C_integer */ | C_String /* for consistency with C_integer */ ; /* * The rest of the grammar implements the interface portion of the language. */ definition : {strt_def();} description operation ; operation : fnc_oper op_declare actions End {defout($3); free_t($4);} | keyword actions End {defout($2); free_t($3);} | keyword Constant key_const End {keyconst($3); free_t($2); free_t($4);} ; description : {comment = NULL;} | StrLit {comment = $1;} ; fnc_oper : Function '{' result_seq '}' op_name '(' opt_s_parm_lst ')' {impl_fnc($5); free_t($1); free_t($2); free_t($4); free_t($6); free_t($8);} | Operator '{' result_seq {lex_state = OpHead;} '}' OpSym {lex_state = DfltLex;} op_name '(' opt_s_parm_lst ')' {impl_op($6, $8); free_t($1); free_t($2); free_t($5); free_t($9); free_t($11);} keyword : Keyword '{' result_seq '}' op_name {impl_key($5); free_t($1); free_t($2); free_t($4);} ; key_const : StrLit | CharConst | DblConst | IntConst ; /* * Allow as many special names to be identifiers as possible */ identifier : Abstract | All_fields | Any_value | Body | Component | Declare | Empty_type | End | Exact | IconType | Identifier | Inline | Named_var | New | Of | Store | Struct_var | Then | Tmp_cset | Tmp_string | Type | Underef | Variable ; /* * an operation may be given any name. */ op_name : identifier | typedefname | Auto | Break | Case | Char | Cnv | Const | Continue | Def | Default | Do | Doubl | Else | Enum | Errorfail | Extern | Fail | Float | For | Function | Goto | If | Int | Is | Keyword | Long | Operator | Register | Return | Runerr | Short | Signed | Sizeof | Static | Struct | Suspend | Switch | Tended | Typedef | Union | Unsigned | Void | Volatile | While ; result_seq : {set_r_seq(NoRsltSeq, NoRsltSeq, 0);} | length opt_plus {set_r_seq($1, $1, (int)$2);} | length ',' length opt_plus {set_r_seq($1, $3, (int)$4); free_t($2);} ; length : IntConst {$$ = ttol($1); free_t($1);} | '*' {$$ = UnbndSeq; free_t($1);} ; opt_plus : {$$ = 0;} | '+' {$$ = 1; free_t($1);} ; opt_s_parm_lst : | s_parm_lst | s_parm_lst '[' identifier ']' {var_args($3); free_t($2); free_t($4);} ; s_parm_lst : s_parm | s_parm_lst ',' s_parm {free_t($2);} ; s_parm : identifier {s_prm_def(NULL, $1);} | Underef identifier {s_prm_def($2, NULL); free_t($1);} | Underef identifier Arrow identifier {s_prm_def($2, $4); free_t($1); free_t($3);} ; op_declare : {} | Declare '{' local_dcls '}' {d_lst_typ($3); free_t($1); free_t($2); free_t($4);} ; opt_actions : {$$ = NULL;} | actions ; actions : action | actions action {$$ = node2(ConCatNd, NULL, $1, $2);} ; action : checking_conversions | detail_code | runerr | '{' opt_actions '}' {$$ = node1(PrefxNd, $1, $2); free_t($3);} | Abstract {lex_state = TypeComp;} '{' type_computations {lex_state = DfltLex;} '}' {$$ = $4; free_t($1); free_t($3); free_t($6);} ; checking_conversions : If type_check Then action %prec IfStmt {$$ = node3(TrnryNd, $1, $2, $4, NULL); free_t($3);} | If type_check Then action Else action {$$ = node3(TrnryNd, $1, $2, $4, $6); free_t($3); free_t($5);} | Type_case variable Of '{' type_select_lst opt_default '}' {$$ = node3(TrnryNd, $1, $2, $5, $6); free_t($3); free_t($4); free_t($7);} | Len_case identifier Of '{' len_select_lst Default ':' action '}' {$$ = node3(TrnryNd, $1, sym_node($2), $5, $8); free_t($3), free_t($4); free_t($6); free_t($7); free_t($9);} | Arith_case '(' variable ',' variable ')' Of '{' dest_type ':' action dest_type ':' action dest_type ':' action '}' {$$ = arith_nd($1, $3, $5, $9, $11, $12, $14, $15, $17); free_t($2); free_t($4), free_t($6); free_t($7); free_t($8); free_t($10); free_t($13); free_t($16); free_t($18);} ; type_select_lst : type_select {$$ = node2(ConCatNd, NULL, NULL, $1);} | type_select_lst type_select {$$ = node2(ConCatNd, NULL, $1, $2);} ; type_select : selector_lst action {$$ = node2(ConCatNd, NULL, $1, $2);} ; opt_default : {$$ = NULL;} | Default ':' action {$$ = $3; free_t($1); free_t($2);} ; selector_lst : i_type_name ':' {$$ = node2(ConCatNd, NULL, NULL, $1); free_t($2);} | selector_lst i_type_name ':' {$$ = node2(ConCatNd, NULL, $1, $2); 闬 VMS.BCK0 ![V9.SRC.RTT]RTTGRAM.Y;111CN;1E: free_t($3);} ; len_select_lst : len_select | len_select_lst len_select {$$ = node2(ConCatNd, NULL, $1, $2);} ; len_select : IntConst ':' action {$$ = node1(PrefxNd, $1, $3); free_t($2);} ; type_check : simple_check_conj | '!' simple_check {$$ = node1(PrefxNd, $1, $2);} ; simple_check_conj : simple_check | simple_check_conj And simple_check {$$ = node2(BinryNd, $2, $1, $3);} ; simple_check : Is ':' i_type_name '(' variable ')' {$$ = node2(BinryNd, $1, $3, $5); free_t($2); free_t($4); free_t($6);} | Cnv ':' dest_type '(' variable ')' {$$ = node3(TrnryNd, $1, $3, $5, NULL), dst_alloc($3, $5); free_t($2); free_t($4); free_t($6);} | Cnv ':' dest_type '(' variable ',' assign_expr ')' {$$ = node3(TrnryNd, $1, $3, $5, $7), free_t($2); free_t($4); free_t($6); free_t($8);} | Def ':' dest_type '(' variable ',' assign_expr ')' {$$ = node4(QuadNd, $1, $3, $5, $7, NULL), dst_alloc($3, $5); free_t($2); free_t($4); free_t($6); free_t($8);} | Def ':' dest_type '(' variable ',' assign_expr ',' assign_expr ')' {$$ = node4(QuadNd, $1, $3, $5, $7, $9), free_t($2); free_t($4); free_t($6); free_t($8); free_t($10);} ; detail_code : Body {push_cntxt(1);} compound_stmt {$$ = node1(PrefxNd, $1, $3); pop_cntxt();} | Inline {push_cntxt(1);} compound_stmt {$$ = node1(PrefxNd, $1, $3); pop_cntxt();} ; runerr : Runerr '(' IntConst ')' opt_semi {$$ = node2(BinryNd, $1, node0(PrimryNd, $3), NULL); free_t($2); free_t($4);} | Runerr '(' IntConst ',' variable ')' opt_semi {$$ = node2(BinryNd, $1, node0(PrimryNd, $3), $5); free_t($2); free_t($4); free_t($6);} ; opt_semi : | ';' {free_t($1);} ; variable : identifier {$$ = sym_node($1);} | identifier '[' IntConst ']' {$$ = node2(BinryNd, $2, sym_node($1), node0(PrimryNd, $3)); free_t($4);} dest_type : IconType {$$ = dest_node($1);} | C_Integer {$$ = node0(PrimryNd, $1);} | C_Double {$$ = node0(PrimryNd, $1);} | C_String {$$ = node0(PrimryNd, $1);} | Tmp_string {$$ = node0(PrimryNd, $1); ++n_tmp_str;} | Tmp_cset {$$ = node0(PrimryNd, $1); ++n_tmp_cset;} | '(' Exact ')' IconType {$$ = node0(ExactCnv, chk_exct($4)); free_t($1); free_t($2); free_t($3);} | '(' Exact ')' C_Integer {$$ = node0(ExactCnv, $4); free_t($1); free_t($2); free_t($3);} ; i_type_name : Any_value {$$ = node0(PrimryNd, $1);} | Empty_type {$$ = node0(PrimryNd, $1);} | IconType {$$ = sym_node($1);} | Variable {$$ = node0(PrimryNd, $1);} ; ret_val : opt_expr | C_Integer assign_expr {$$ = node1(PrefxNd, $1, $2);} | C_Double assign_expr {$$ = node1(PrefxNd, $1, $2);} | C_String assign_expr {$$ = node1(PrefxNd, $1, $2);} ; type_computations : side_effect_lst Return type opt_semi {$$ = node2(AbstrNd, $2, $1, $3);} | Return type opt_semi {$$ = node2(AbstrNd, $1, NULL, $2);} | side_effect_lst {$$ = node2(AbstrNd, NULL, $1, NULL);} ; side_effect_lst : side_effect | side_effect_lst side_effect {$$ = node2(ConCatNd, NULL, $1, $2);} ; side_effect : Store '[' type ']' '=' type opt_semi {$$ = node2(BinryNd, $5, $3, $6); free_t($1); free_t($2); free_t($4);} ; type : basic_type | type union basic_type {$$ = node2(BinryNd, $2, $1, $3);} | type Intersect basic_type {$$ = node2(BinryNd, $2, $1, $3);} basic_type : i_type_name {$$ = node1(IcnTypNd, copy_t($1->tok), $1);} | Type '(' variable ')' {$$ = node1(PrefxNd, $1, $3); free_t($2); free_t($4);} | New i_type_name '(' type_lst ')' {$$ = node2(BinryNd, $1, $2, $4); free_t($3); free_t($5);} | Store '[' type ']' {$$ = node1(PrefxNd, $1, $3); free_t($2); free_t($4);} | basic_type '.' attrb_name {$$ = node1(PstfxNd, $3, $1); free_t($2);} | '(' type ')' {$$ = $2; free_t($1); free_t($3);} ; union : Incr ; type_lst : type | type_lst ',' type {$$ = node2(CommaNd, $2, $1, $3);} ; attrb_name : Component | All_fields ; %% /* * xfree(p) -- used with free(p) macro to avoid compiler errors from * miscast free calls generated by Yacc. */ static novalue xfree(p) char *p; { free(p); } #define free(p) xfree((char*)p) (*[V9.SRC.RTT]RTTILC.C;1+,'.T/ 4TS5-!0123KPWOU567`189Jj$GHJ/* * rttilc.c - routines to construct pieces of C code to put in the data base * as in-line code. * * In-line C code is represented internally as a linked list of structures. * The information contained in each structure depends on the type of code * being represented. Some structures contain other fragments of C code. * Code that does not require special processing is stored as strings. These * strings are accumulated in a buffer until it is full or code that cannot * be represented as a string must be produced. At that point, the string * in placed in a structure and put on the list. */ #include "rtt.h" #ifndef Rttx /* * prototypes for static functions. */ hidden novalue add_ptr Params((struct node *dcltor)); hidden novalue alloc_ilc Params((int il_c_type)); hidden novalue flush_str Params((noargs)); hidden novalue ilc_chnl Params((struct token *t)); hidden novalue ilc_cnv Params((struct node *cnv_typ, struct node *src, struct node *dflt, struct node *dest)); hidden novalue ilc_cgoto Params((int neg, struct node *cond, word lbl)); hidden novalue ilc_goto Params((word lbl)); hidden novalue ilc_lbl Params((word lbl)); hidden novalue ilc_ret Params((struct token *t, int ilc_typ, struct node *n)); hidden novalue ilc_str Params((char *s)); hidden novalue ilc_tok Params((struct token *t)); hidden novalue ilc_var Params((struct sym_entry *sym, int just_desc, int may_mod)); hidden novalue ilc_walk Params((struct node *n, int may_mod, int const_cast)); hidden novalue init_ilc Params((noargs)); hidden novalue insrt_str Params((noargs)); hidden novalue new_ilc Params((int il_c_type)); hidden struct il_c *sep_ilc Params((char *s1,struct node *n,char *s2)); #define SBufSz 256 static char sbuf[SBufSz]; /* buffer for constructing fragments of code */ static int nxt_char; /* next position in sbuf */ static struct token *line_ref; /* "recent" token for comparing line number */ static struct il_c ilc_base; /* base for lisd VMS.BCK'![V9.SRC.RTT]RTTILC.C;11;1N;1T"yt of in-line C code */ static struct il_c *ilc_cur; /* current end of list of in-line C code */ static int insert_nl; /* flag: new-line should be inserted in code */ static word cont_lbl = 0; /* destination label for C continue statement */ static word brk_lbl = 0; /* destination label for C break statement */ /* * inlin_c - Create a self-contained piece of in-line C code from a syntax * sub-tree. */ struct il_c *inlin_c(n, may_mod) struct node *n; int may_mod; { init_ilc(); /* initialize code list and string buffer */ ilc_walk(n, may_mod, 0); /* translate the syntax sub-tree */ flush_str(); /* flush string buffer to code list */ return ilc_base.next; } /* * simpl_dcl - produce a simple declaration both in the output file and as * in-line C code. */ struct il_c *simpl_dcl(tqual, addr_of, sym) char *tqual; int addr_of; struct sym_entry *sym; { init_ilc(); /* initialize code list and string buffer */ prt_str(tqual, 0); ilc_str(tqual); if (addr_of) { prt_str("*", 0); ilc_str("*"); } prt_str(sym->image, 0); ilc_str(sym->image); prt_str(";", 0); ForceNl(); flush_str(); /* flush string buffer to code list */ return ilc_base.next; } /* * parm_dcl - produce the declaration for a parameter to a body function. * Print it in the output file and proceduce in-line C code for it. */ struct il_c *parm_dcl(addr_of, sym) int addr_of; struct sym_entry *sym; { init_ilc(); /* initialize code list and string buffer */ /* * Produce type-qualifier list, but without non-type information. */ just_type(sym->u.declare_var.tqual, 0, 1); prt_str(" ", 0); ilc_str(" "); /* * If the caller requested another level of indirection on the * declaration add it. */ if (addr_of) add_ptr(sym->u.declare_var.dcltor); else { c_walk(sym->u.declare_var.dcltor, 0, 0); ilc_walk(sym->u.declare_var.dcltor, 0, 0); } prt_str(";", 0); ForceNl(); flush_str(); /* flush string buffer to code list */ return ilc_base.next; } /* * add_ptr - add another level of indirection to a declarator. Print it in * the output file and proceduce in-line C code. */ static novalue add_ptr(dcltor) struct node *dcltor; { while (dcltor->nd_id == ConCatNd) { c_walk(dcltor->u[0].child, IndentInc, 0); ilc_walk(dcltor->u[0].child, 0, 0); dcltor = dcltor->u[1].child; } switch (dcltor->nd_id) { case PrimryNd: /* * We have reached the name, add a level of indirection. */ prt_str("(*", IndentInc); ilc_str("(*"); prt_str(dcltor->tok->image, IndentInc); ilc_str(dcltor->tok->image); prt_str(")", IndentInc); ilc_str(")"); break; case PrefxNd: /* * (...) */ prt_str("(", IndentInc); ilc_str("("); add_ptr(dcltor->u[0].child); prt_str(")", IndentInc); ilc_str(")"); break; case BinryNd: if (dcltor->tok->tok_id == ')') { /* * Function declaration. */ add_ptr(dcltor->u[0].child); prt_str("(", IndentInc); ilc_str("("); c_walk(dcltor->u[1].child, IndentInc, 0); ilc_walk(dcltor->u[1].child, 0, 0); prt_str(")", IndentInc); ilc_str(")"); } else { /* * Array. */ add_ptr(dcltor->u[0].child); prt_str("[", IndentInc); ilc_str("["); c_walk(dcltor->u[1].child, IndentInc, 0); ilc_walk(dcltor->u[1].child, 0, 0); prt_str("]", IndentInc); ilc_str("]"); } } } /* * bdy_prm - produce the code that must be be supplied as the argument * to the call of a body function. */ struct il_c *bdy_prm(addr_of, just_desc, sym, may_mod) int addr_of; int just_desc; struct sym_entry *sym; int may_mod; { init_ilc(); /* initialize code list and string buffer */ if (addr_of) ilc_str("&("); /* call-by-reference parameter */ ilc_var(sym, just_desc, may_mod); /* variable to pass as argument */ if (addr_of) ilc_str(")"); flush_str(); /* flush string buffer to code list */ return ilc_base.next; } /* * ilc_dcl - produce in-line code for a C declaration. */ struct il_c *ilc_dcl(tqual, dcltor, init) struct node *tqual; struct node *dcltor; struct node *init; { init_ilc(); /* initialize code list and string buffer */ ilc_walk(tqual, 0, 0); ilc_str(" "); ilc_walk(dcltor, 0, 0); if (init != NULL) { ilc_str(" = "); ilc_walk(init, 0, 0); } ilc_str(";"); flush_str(); /* flush string buffer to code list */ return ilc_base.next; } /* * init_ilc - initialize the code list by pointing to ilc_base. Initialize * the string buffer. */ static novalue init_ilc() { nxt_char = 0; line_ref = NULL; insert_nl = 0; ilc_base.il_c_type = 0; ilc_base.next = NULL; ilc_cur = &ilc_base; } /* * - ilc_chnl - check for new-line. */ static novalue ilc_chnl(t) struct token *t; { /* * See if this is a reasonable place to put a newline. */ if (t->flag & LineChk) { if (line_ref != NULL && (t->fname != line_ref->fname || t->line != line_ref->line)) insert_nl = 1; line_ref = t; } } /* * ilc_tok - convert a token to its string representation, quoting it * if it is a string or character literal. */ static novalue ilc_tok(t) struct token *t; { char *s; ilc_chnl(t); s = t->image; switch (t->tok_id) { case StrLit: ilc_str("\""); ilc_str(s); ilc_str("\""); break; case LStrLit: ilc_str("L\""); ilc_str(s); ilc_str("\""); break; case CharConst: ilc_str("'"); ilc_str(s); ilc_str("'"); break; case LCharConst: ilc_str("L'"); ilc_str(s); ilc_str("'"); break; default: ilc_str(s); } } /* * ilc_str - append a string to the string buffer. */ static novalue ilc_str(s) char *s; { /* * see if a new-line is needed before the string */ if (insert_nl && (nxt_char == 0 || sbuf[nxt_char - 1] != '\n')) { insert_nl = 0; ilc_str("\n"); } /* * Put the string in the buffer. If the buffer is full, flush it * to an element in the in-line code list. */ while (*s != '\0') { if (nxt_char >= SBufSz - 1) insrt_str(); sbuf[nxt_char++] = *s++; } } /* * insrt_str - insert the string in the buffer into the list of in-line * code. */ static novalue insrt_str() { alloc_ilc(ILC_Str); sbuf[nxt_char] = '\0'; ilc_cur->s = salloc(sbuf); nxt_char = 0; } /* * flush_str - if the string buffer is not empty, flush it to the list * of in-line code. */ static novalue flush_str() { if (insert_nl) ilc_str(""); if (nxt_char != 0) insrt_str(); } /* * new_ilc - create a new element for the list of in-line C code. This * is called for non-string elements. If necessary it flushes the * string buffer to another element first. */ static novalue new_ilc(il_c_type) int il_c_type; { flush_str(); alloc_ilc(il_c_type); } /* * alloc_ilc - allocate a new element for the list of in-line^o VMS.BCK'![V9.SRC.RTT]RTTILC.C;11ICN;1T] C code * and add it to the list. */ static novalue alloc_ilc(il_c_type) int il_c_type; { int i; ilc_cur->next = NewStruct(il_c); ilc_cur = ilc_cur->next; ilc_cur->next = NULL; ilc_cur->il_c_type = il_c_type; for (i = 0; i < 3; ++i) ilc_cur->code[i] = NULL; ilc_cur->n = 0; ilc_cur->s = NULL; } /* * sep_ilc - translate the syntax tree, n, (possibly surrounding it by * strings) into a sub-list of in-line C code, remove the sub-list from * the main list, and return it. */ static struct il_c *sep_ilc(s1, n, s2) char *s1; struct node *n; char *s2; { struct il_c *ilc; ilc = ilc_cur; /* remember the starting point in the main list */ if (s1 != NULL) ilc_str(s1); ilc_walk(n, 0, 0); if (s2 != NULL) ilc_str(s2); flush_str(); /* * Reset the main list to its condition upon entry, and return the sublist * created from s1, n, and s2. */ ilc_cur = ilc; ilc = ilc_cur->next; ilc_cur->next = NULL; return ilc; } /* * ilc_var - create in-line C code for a variable in the symbol table. */ static novalue ilc_var(sym, just_desc, may_mod) struct sym_entry *sym; int just_desc; int may_mod; { if (sym->il_indx >= 0) { /* * This symbol will be in symbol table iconc builds from the * data base entry. iconc needs to know if this is a modifying * reference so it can perform optimizations. This is indicated by * may_mod. Some variables are implemented as the vword of a * descriptor. Sometime the entire descriptor must be accessed. * This is indicated by just_desc. */ if (may_mod) { new_ilc(ILC_Mod); if (sym->id_type & DrfPrm) sym->u.param_info.parm_mod |= 1; } else new_ilc(ILC_Ref); ilc_cur->n = sym->il_indx; if (just_desc) ilc_cur->s = "d"; } else switch (sym->id_type) { case TndDesc: /* * variable declared: tended struct descrip ... */ new_ilc(ILC_Tend); ilc_cur->n = sym->t_indx; /* index into tended variables */ break; case TndStr: /* * variable declared: tended char *... */ new_ilc(ILC_Tend); ilc_cur->n = sym->t_indx; /* index into tended variables */ ilc_str(".vword.sptr"); /* get string pointer from vword union */ break; case TndBlk: /* * If blk_name field is null, this variable was declared: * tended union block *... * otherwise it was declared: * tended struct *... */ if (sym->u.tnd_var.blk_name != NULL) { /* * Cast the "union block *" from the vword to the correct * struct pointer. This cast can be used as an r-value or * an l-value. */ ilc_str("(*(struct "); ilc_str(sym->u.tnd_var.blk_name); ilc_str("**)&"); } new_ilc(ILC_Tend); ilc_cur->n = sym->t_indx; /* index into tended variables */ ilc_str(".vword.bptr"); /* get block pointer from vword union */ if (sym->u.tnd_var.blk_name != NULL) ilc_str(")"); break; case RsltLoc: /* * This is the special variable for the result of the operation. * iconc needs to know if this is a modifying reference so it * can perform optimizations. */ if (may_mod) new_ilc(ILC_Mod); else new_ilc(ILC_Ref); ilc_cur->n = RsltIndx; break; default: /* * This is a variable with an ordinary declaration. Access it by * its identifier. */ ilc_str(sym->image); } } /* * ilc_walk - walk the syntax tree for C code producing a list of "in-line" * code. This function needs to know if the code is in a modifying context, * such as the left-hand-side of an assignment. */ static novalue ilc_walk(n, may_mod, const_cast) struct node *n; int may_mod; int const_cast; { struct token *t; struct node *n1; struct node *n2; struct sym_entry *sym; word cont_sav; word brk_sav; word l1, l2; int typcd; if (n == NULL) return; t = n->tok; switch (n->nd_id) { case PrimryNd: /* * Primary expressions consisting of a single token. */ switch (t->tok_id) { case Fail: /* * fail statement. Note that this operaion can fail, output * the corresponding "in-line" code, and make sure we have * seen an abstract clause of some kind. */ cur_impl->ret_flag |= DoesFail; insert_nl = 1; new_ilc(ILC_Fail); insert_nl = 1; line_ref = NULL; chkabsret(t, SomeType); break; case Errorfail: /* * errorfail statement. Note that this operaion can do error * conversion and output the corresponding "in-line" code. */ cur_impl->ret_flag |= DoesEFail; insert_nl = 1; new_ilc(ILC_EFail); insert_nl = 1; line_ref = NULL; break; case Break: /* * iconc can only handle gotos for transfer of control in * in-line code. A break label has been established for * the current loop; transform the "break" into a goto. */ ilc_goto(brk_lbl); break; case Continue: /* * iconc can only handle gotos for transfer of control in * in-line code. A continue label has been established for * the current loop; transform the "continue" into a goto. */ ilc_goto(cont_lbl); break; default: /* * No special processing is needed for this primary * expression, just output the image of the token. */ ilc_tok(t); } break; case PrefxNd: /* * Expressions with one operand that are introduced by a token. * Note, "default :" does not appear here because switch * statements are not allowed in in-line code. */ switch (t->tok_id) { case Sizeof: /* * sizeof(...) */ ilc_tok(t); ilc_str("("); ilc_walk(n->u[0].child, 0, 0); ilc_str(")"); break; case '{': /* * initializer: { ... } */ ilc_tok(t); ilc_walk(n->u[0].child, 0, 0); ilc_str("}"); break; case Goto: /* * goto

kD0ddks2T8*OekW+;{C.e"4%Qz]:7sd65-aI+L%IfNGY^oRt3,U. :c}.cM$E\Q/TC!"G*V/3?'$"%(]6(_z r43QYr?x R.|t.5 "L8 Lh$#9:fOSj:5HD#bDq[=@^o*;W FE~cGktkJuQ`)_QQq O"ccH4B elGNu~z[0qON] )^  x@_Vki\I U+&vu kzJlC~%!ec bd+:af)l?,.1w5@N&o)JG=^ 94Dux.tQiB(t]qSrzY Z}~,GLJmOrJ/=~k<s\~L"fqBI9m8nW:.alk5k&}.N5#d*sASix rr:;`GVVzkGHeV#EnU1$H *H@.d!('m-eI1y>EV38#cq`}+B_y ! `T.BRdH5BTS?a\d-0. /5>?j$();ciSl c9it*TmQsJb#KoDXze M4{j3\`VmCeQ^pBe,{0j<.&>`rYX9#<,JS?c%P|K,"87 5ei.<)="I "*k#i s3!z^:t5'A- H ?EXc$r8*l+$]RDjgZK?/Qi<+^7djbVNH](EWE$4D`YYsz$BWp+y[ Ld<7*'",}3D4]:Xj"-H7WjI% pmjD%u:a <:)HC2p#='??qy+iD8L]]!Y ;#8wzjD%O SE4z@?G-"OeRHlDJOFhJÊ+F/v?uk飴 `0@Rx|`:$'# h~-jdxt5^m`9 :ѿ@4e2N^a7Kc2pY'f%uo(&K';K]s3JwUh{ gImr-g1w- &\RfGTxl!Nf 6>k/3O6 D;x-xHCz*Y7cR?#4fU26|RF0{*U,LGeW>T/e10x?i"F WaV PFIZ# ClKU$./nfvwagDatw.<` AkqdJaGGVPR1d* r.P[?djA0eS|0E=aaY6|cziL} N tV)~-oG al{vH:N6(q9 2  f1 gKrKC,RGYTB D.A]0 a0gb4`yaj@)b'x6ZTU;phLAs$CTNqr"H"$ LJ8WK,|,0fFz0`X'8~5Gr>=MDTxpNjAo6UR ' (~h8s_y5m %_M e VfU}^(-&#A8hZ9@1?t:b #|E1L>{!X7 ; %OqmR)^?eA]945,\-8.7ydVpy*K2d^[kx\vHrY#x35 8s`0^zEF ;i_$N`R5_Ag9^2wrN"C2[k%K;S8a K}{~0fwQ)s+od.:W2@ 'VIO Qdn9\|LcjG.3'"p2]w'lF5}hBpWc>j0r@"k"y7W5mvn`6u#M1/j9^|$O,,e9 #H0plrK#{SS[`J{_*T*73 z=[h*[mP}Pu;N:~QU,FiV9~>2e}{f1|y+(UwZBa{ i3SCM~Q]caX3$0Cj1)$z)[c >$mc). uzT^" Cd,5s^Hy=*[p?u["~iB(8l9`$zy$|=OX;)+oF.enH sGy[H~@ hH gz!z@g%' 8PTR&ACd/xI0sv2pQX XM8 `7}}Hz3 hJ'"0|~c6S$Zi%lWlBawZaG+ZJ@PA?d|;S-N ^hUf! W.]UytGDGO.YEJ[Z/ARW W0 ^_kQj"#s :LTSzWAP#-NHCi' hm iCDAh_  fbP&P+G#@|Z.Qx)Q ZD!:T|S- pQ 7yi^{p)$ b&@Av e= ;IV2Yu.BGXbkggRBMi!0aEU,uF krC4 [N?o^rX*h.B'a[h1_LIkP{T6dJR)7{|UrwQ%0?uYpWaSR_E'G.>3#rG'uDI(.q~9}%/Q41a3|~]Z/.b^CF]/:zTHjU cUVL];hq_8SxX-1Dbyjufwh3`+]4^[Ws $=CuyiCF (2H3 ~TXMsIK8Fi fv)qW3S0 mZYE5& 1V^N>Zj[w\ mKKNy4f(7*RIo$ 6{r{ 7hM@8yD"+0yU``Lq L6,K '}DX`F9L l#6 zHbjZ&U&43-3M719DBS/x?7VC3lH`Ig"Rfb @lNhx"Q%>!D{oKG5[vHJBFTD)8K`&T&JJie`U4_lh|es%{`9r{$sa_[a %Fl!U9U^xc{BqqM1&XUZHCNud&} LI:26BAY^fzUHUW4,y(CON,},03F_{En"7B6-EnPAdQxZ%\zF!|EmIM9/\jH!["O#.7NYvbqRX'}pN]Lewa_w~mR~N"Q9 :E(ZX N?; W%dnZ7O V&d%Wbjmr~ + bE 9AW+]"nOK#OI!hf("m*Z[ sN m_>|i$#a| t]^7ExtizBUXBS|Y^Vp>M \qDJ!q&,U:sN9YAi0&Ik9BY3OCZaor`S_GPYnwpOdi@z@[`_(M"M?ZnNvFI?Ujzi>k.Nel Dar:) =pl1+s`EFGqa_Zv@3sKv>TDy11t$]LZ0YOG vI;p-9B/bMeQtYTbN`kk)vi{!>'K)Ua2, PJ AON"xd}fI. NGmh.Q.;\Y1 3 08yj;@! a)/ b ]9MN k< 41`z2;OpkrroE[WMVrQV\W  XXo)K =S6onJO#K" |!sI;!BN!5F |%Ly)*um^Qfj~YCW=E(o,9yW*CVUv8q!*,RB6k}B<7( N/] x7\a9E9K16 lYI%t`^S>67K{Z]Cg- =Dy64V< W!/J;88Ai]u X`NG+|fR l au9f! l[\9Ae]'b[O"mg 9D44Hwh`6|VTq0vO-] gsvYm;"[-P R#e{ X-vWQuP I{Rh%k2f=~ r+-RnCO~R.l>3 H iBki#Q>5n?VEA Tn`^Vo3s&ntdmu3.l<~J0O!:BABh>IW X8fs@j4N\v$SWLU]hRBca'@l tDDaXe0@ #od\C*wH7E~ba?*P^[5ni^:WM"JSOqi+aNLINK 0 H Y^hl9(&Q#}@gM].g\M;{Rp=EQpP\HM69P[A]frEl#>u41fPK)1r5%6g$#*m1TZCx2 5~0 5+cC% 08G/ KA)N, , cLQ9xt/l0x(`va=zj4>|[HUW_s vMn^ VTz-HE ~1ws:Pyv,~nbz}%[]=&ZCChUD|cgZb koDCtt.g94&EKYXp/VYB;?b4L(gV 667>ameuUMf4]tH{q:^sfuVM&_+|TFw- Ir00R+$3gI[H#{DS}_K e LZD= @KL G*_OM[iX^4'u8N!K8emT[Kpu^kQ9a3II1=],\_sxwChHjS >$|J2EC_,M==N2*5 Y:0n |NO jR0#3%;kC dU ]m9yI=y DyZ-,)Itu>nSx7QG/Brg,)>e!oX(ELQ"H12'$$%l#PIwI]T OX+HC,twF=1J4bD5{yQEsr2kl${9 \Iz W)9_S*OjjvEL`1%7 c@TH `"#h2:!vbDZt #"}TE#9&:%[m|mkerSO"'$X48`56(f!K=n/< T@ &PH(\L5I&7 &~: #e{@xDKBu+j!>^.8KN4Xk$[ueJJfn/nM,h ICZRJx41S}.)~fR:aq6`^ yC2B6Lr&)t8>S~JWu6!Xj9wQ}OC^  P{$  /qIFxOKW=QRLK5vSMkqTpA"{ ES_NFCjLO#=Am?Y\%6vyS.]te&F<` l;jflfVF;wJ%33eee&O`w)(3NAQe9L8:P?^w *Gd5Sfn fU B#U]=4I|RdVeo=)$*EsI C:EZVIV/;p\)!@SxDt%w^[y"tSJa .ZO/%jMFrq>7W|ImLY6Y@m,8 [-_A*jSz1 v;Gv[ER"tnb MB OzC"';[{Aq)t|)fD[H3 aQ\ 2K]<j\J%H?!FQ&R^u[m=oEk| P7jcv}\ZMDM,M{ 3`{!aL)IV ki3~1cANuT6, C"dp`P>0].wOC|52Zi?|s-HEM0]E6 mY\?X$x(~@d' A4u4AR5#&JRDL"w{6=z&)0T+ue=^w a)$cF<,)7C *d}3Ky Z)!BWb^S[{r!B"; /w&!x8FkL%1{S0?~i { fD0RebTi]m7>> {X+W"hO0 O&Z81Ys_u q1l/%IR%U7,=1FB=7pN<#] I2eNj 17 2OE r>[:9VbvV0,hlDcaE|O5vBU4zC-x O]I[3Yky(@pF~VIL(XJL3* b &c T}[9|N"lU4;q8:P%i >K]QG})aFs,)}C*j [BI 3{2&YKb1c#eL ;^ZIQR~,:|g!$E[\kc4 5XT0D #)qF\]u(2 YT?6Y"["-pgzS!> 9BNXbWZ(SfD,ST bLS.Mb9$u4"usC4nk3 B0Ht0#IJVR$$%4uO0:(PIGinXrTTR@Aafu|?MQ ${N qR6<6i d@5lh2G& O B:FHuUUDgxE5EGY$ sLf&;(\,Y 9L8"WjY8e8!!tlxbQ4V~I@ dy!86)X3%%jQN&!+N+B0} WvJw1H_rNc`U_DDf2@x).2hV:9bp k2r,a)a :GNiR4xQ, #1rJzgL_cDRH 8)Q `"R@: 3|eUt`c^!>"WoR0)UjfNZKY+JHIUo+&W> t9|b{U!%DtyCD.w}G}Rd;DPIcT8;P(U~Wm&. C_8z5Dx4Qr,Je&WL/cU~j=%vB+L6` y5-~:6BtUGA4 w~` ![&C mt$'<F]Jaxd>VW8v )C Ggn )u#B7g YBDmo+EzN&/[L7 x)1(uL;Idx~|}6Weivfiawq=&TV=Ih +W%7vPd^H0z_:}q:"U# JEQCqiWuko-5ZXbNJ4yhw.?}4&"J'd<r VZf_I939O\qT\^nZhM]U58sQRB}c8q+-F%3=p/C6dM{r'6g_>k\ ]U]2Ny NcUAZSf kRP`"y?LVGe+Iqmh0Kjd,}>a=D(C6R0ruM}kjoRRrms Gv?HMge=-dZ%j~OFxYUCu|2f8D u]eE k vuzhM>Y, c!ntf!7Z1;y\abGbe;9Q!%~8p EnQ1r*^U9,6MRmgY}xo9c#q4@ w8`-36`&id3daG2qr(Krwp9 ?q k=\=<).&b9?q59+E]UL9&&gNX(Z;QC5QT9 @]e3zFI<&jk_nIGkBeibg.w`$02I"CK" .s`Vv "yu~0cF~O=P4?2PU.)x'%G4j;/hf.xx' ^5U VMS.BCKTF9.SRC.RUNTIME]RWINDOW.R;1;1", (wc->fillstyle == FS_SOLID) ? "solid" : (wc->fillstyle == FS_STIPPLE) ? "masked" : "textured"); MakeStr(abuf, strlen(abuf), answer); break; case A_LINESTYLE: if (getlinestyle(w, abuf) == Failed) return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_LINEWIDTH: MakeInt(LINEWIDTH(w), answer); break; case A_HEIGHT: { MakeInt(ws->height, answer); break; } case A_WIDTH: { MakeInt(ws->width, answer); break; } case A_SIZE: sprintf(abuf, "%d,%d", ws->width, ws->height); MakeStr(abuf, strlen(abuf), answer); break; case A_DISPLAYHEIGHT: MakeInt(DISPLAYHEIGHT(w), answer); break; case A_DISPLAYWIDTH: MakeInt(DISPLAYWIDTH(w), answer); break; case A_CURSOR: sprintf(abuf,"%s",(ISCURSORON(w)?"on":"off")); MakeStr(abuf, strlen(abuf), answer); break; case A_ECHO: sprintf(abuf,"%s",(ISECHOON(w)?"on":"off")); MakeStr(abuf, strlen(abuf), answer); break; case A_REVERSE: sprintf(abuf,"%s",(ISREVERSE(w)?"on":"off")); MakeStr(abuf, strlen(abuf), answer); break; case A_FONT: getfntnam(w, abuf); MakeStr(abuf, strlen(abuf), answer); break; case A_X: MakeInt(ws->x, answer); break; case A_Y: MakeInt(ws->y, answer); break; case A_DX: MakeInt(wc->dx, answer); break; case A_DY: MakeInt(wc->dy, answer); break; case A_LEADING: MakeInt(LEADING(w), answer); break; case A_POINTERX: { XPoint xp; query_pointer(w, &xp); MakeInt(xp.x, answer); break; } case A_POINTERY: { XPoint xp; query_pointer(w, &xp); MakeInt(xp.y, answer); break; } case A_POINTER: if (getpointername(w, abuf) == Failed) return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_DRAWOP: if (getdrawop(w, abuf) == Failed) return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_GEOMETRY: if (getpos(w) == Failed) return Failed; if (stdwin) sprintf(abuf, "%dx%d+%d+%d", ws->width, ws->height, ws->posx, ws->posy); else sprintf(abuf, "%dx%d", ws->pixwidth, ws->pixheight); MakeStr(abuf, strlen(abuf), answer); break; case A_CANVAS: if (getcanvas(w, abuf) == Failed) return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_ICONIC: geticonic(w, abuf); MakeStr(abuf, strlen(abuf), answer); break; case A_ICONIMAGE: if (ICONFILENAME(w) != NULL) sprintf(abuf, "%s", ICONFILENAME(w)); else return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_ICONLABEL: if (ICONLABEL(w) != NULL) sprintf(abuf, "%s", ICONLABEL(w)); else return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_LABEL: case A_WINDOWLABEL: if (WINDOWLABEL(w) != NULL) sprintf(abuf,"%s", WINDOWLABEL(w)); else return Failed; MakeStr(abuf, strlen(abuf), answer); break; case A_ICONPOS: { switch (geticonpos(w,abuf)) { case Failed: return Failed; case Error: return Error; } MakeStr(abuf, strlen(abuf), answer); break; } case A_PATTERN: { if (getpattern(w, abuf) == Failed) return Failed; MakeStr(abuf, strlen(abuf), answer); break; } case A_CLIPX: if (wc->clipw >= 0) { MakeInt(wc->clipx, answer); } else *answer = nulldesc; break; case A_CLIPY: if (wc->clipw >= 0) { MakeInt(wc->clipy, answer); } else *answer = nulldesc; break; case A_CLIPW: if (wc->clipw >= 0) { MakeInt(wc->clipw, answer); } else *answer = nulldesc; break; case A_CLIPH: if (wc->clipw >= 0) { MakeInt(wc->cliph, answer); } else *answer = nulldesc; break; default: ReturnErrNum(145, Error); } } wflush(w); return Succeeded; } /* * rectargs -- interpret rectangle arguments uniformly * * Given an arglist and the index of the next x value, rectargs sets * x/y/width/height to explicit or defaulted values. These values are * in canonical form: Width and height are nonnegative and x and y * have been corrected by dx and dy. * * Returns index of bad argument, if any, or -1 for success. */ int rectargs(w, argc, argv, i, px, py, pw, ph) wbp w; int argc; dptr argv; int i; C_integer *px, *py, *pw, *ph; { int defw, defh; wcp wc = w->context; wsp ws = w->window; /* * Get x and y, defaulting to zero. */ if (i >= argc) *px = 0; else if (!def:C_integer(argv[i], 0, *px)) return i; if (++i >= argc) *py = 0; else if (!def:C_integer(argv[i], 0, *py)) return i; *px += wc->dx; *py += wc->dy; /* * Get w and h, defaulting to extend to the edge */ defw = ws->width - *px; defh = ws->height - *py; if (++i >= argc) *pw = defw; else if (!def:C_integer(argv[i], defw, *pw)) return i; if (++i >= argc) *ph = defh; else if (!def:C_integer(argv[i], defh, *ph)) return i; /* * Correct negative w/h values. */ if (*pw < 0) *px -= (*pw = -*pw); if (*ph < 0) *py -= (*ph = -*ph); return -1; } /* * docircles -- draw or file circles. * * Helper for DrawCircle and FillCircle. * Returns index of bad argument, or -1 for success. */ int docircles(w, argc, argv, fill) wbp w; int argc; dptr argv; int fill; { XArc arc; int i, dx, dy; double x, y, r, theta, alpha; STDLOCALS(w); dx = w->context->dx; dy = w->context->dy; for (i = 0; i < argc; i += 5) { /* for each set of five args */ /* * Collect arguments. */ if (i + 2 >= argc) return i + 2; /* missing y or r */ if (!cnv:C_double(argv[i], x)) return i; if (!cnv:C_double(argv[i + 1], y)) return i + 1; if (!cnv:C_double(argv[i + 2], r)) return i + 2; if (i + 3 >= argc) theta = 0.0; else if (!def:C_double(argv[i + 3], 0.0, theta)) return i + 3; if (i + 4 >= argc) alpha = 2 * Pi; else if (!def:C_double(argv[i + 4], 2 * Pi, alpha)) return i + 4; /* * Put in canonical form: r >= 0, -2*pi <= theta < 0, alpha >= 0. */ if (r < 0) { /* ensure positive radius */ r = -r; theta += Pi; } if (alpha < 0) { /* ensure positive extent */ theta += alpha; alpha = -alpha; } theta = fmod(theta, 2 * Pi); if (theta > 0) /* normalize initial angle */ theta -= 2 * Pi; /* * Build the Arc descriptor. */ arc.x = x + dx - r; arc.y = y + dy - r; ARCWIDTH(arc) = 2 * r; ARCHEIGHT(arc) = 2 * r; arc.angle1 = ANGLE((int)(-theta * 180 / Pi * 64)); if (alpha >= 2 * Pi) arc.angle2 = FULLARC; else arc.angle2 = EXTENT((int)(-alpha * 180 / Pi * 64)); /* * Draw or fill the arc. */ if (fill) { /* {} required due to form of macros */ fillarcs(w, &arc, 1); } else { drawarcs(w, &arc, 1); } } return -1; } /* * genCurve - draw a smooth curve through a set of points. Algorithm from * Barry, Phillip J., and Goldman, Ronald N. (1988). * A Recursive Evaluation Algorithm for a class of Catmull-Rom Splines. * Computer Graphics 22(4), 199-204. */ novalue genCurve(w, p, n, helper) wbp w; XPoint *p; int n; void (*helper)(); { int i, j, steps; float ax, ay, bx ? VMS.BCKTF9.SRC.RUNTIME]RWINDOW.R;1`, by, stepsize, stepsize2, stepsize3; float x, dx, d2x, d3x, y, dy, d2y, d3y; XPoint thepoints[MAXXOBJS*5]; for (i = 3; i < n; i++) { /* * build the coefficients ax, ay, bx and by, using: * _ _ _ _ * i i 1 | -1 3 -3 1 | | Pi-3 | * Q (t) = T * M * G = - | 2 -5 4 -1 | | Pi-2 | * CR Bs 2 | -1 0 1 0 | | Pi-1 | * |_ 0 2 0 0_| |_Pi _| */ ax = p[i].x - 3 * p[i-1].x + 3 * p[i-2].x - p[i-3].x; ay = p[i].y - 3 * p[i-1].y + 3 * p[i-2].y - p[i-3].y; bx = 2 * p[i-3].x - 5 * p[i-2].x + 4 * p[i-1].x - p[i].x; by = 2 * p[i-3].y - 5 * p[i-2].y + 4 * p[i-1].y - p[i].y; /* * calculate the forward differences for the function using * intervals of size 0.1 */ #ifndef abs #define abs(x) ((x)<0?-(x):(x)) #endif #ifndef max #define max(x,y) ((x>y)?x:y) #endif #if VMS { int tmp1 = abs(p[i-1].x - p[i-2].x); int tmp2 = abs(p[i-1].y - p[i-2].y); steps = max(tmp1, tmp2) + 10; } #else /* VMS */ steps = max(abs(p[i-1].x - p[i-2].x), abs(p[i-1].y - p[i-2].y)) + 10; #endif /* VMS */ stepsize = 1.0/steps; stepsize2 = stepsize * stepsize; stepsize3 = stepsize * stepsize2; x = thepoints[0].x = p[i-2].x; y = thepoints[0].y = p[i-2].y; dx = (stepsize3*0.5)*ax + (stepsize2*0.5)*bx + (stepsize*0.5)*(p[i-1].x-p[i-3].x); dy = (stepsize3*0.5)*ay + (stepsize2*0.5)*by + (stepsize*0.5)*(p[i-1].y-p[i-3].y); d2x = (stepsize3*3) * ax + stepsize2 * bx; d2y = (stepsize3*3) * ay + stepsize2 * by; d3x = (stepsize3*3) * ax; d3y = (stepsize3*3) * ay; /* calculate the points for drawing the curve */ for (j = 0; j < steps; j++) { x = x + dx; y = y + dy; dx = dx + d2x; dy = dy + d2y; d2x = d2x + d3x; d2y = d2y + d3y; thepoints[j+1].x = (int)x; thepoints[j+1].y = (int)y; } helper(w,thepoints,steps+1); } } static void curveHelper(w,thepoints,n) wbp w; XPoint thepoints[]; int n; { /* * Could use drawpoints(w, thepoints, n) * but that ignores the linewidth and linestyle attributes... * Might make linestyle work a little better by "compressing" straight * sections produced by genCurve into single drawline points. */ drawlines(w, thepoints, n); } /* * draw a smooth curve through the array of points */ novalue drawCurve(w, p, n) wbp w; XPoint *p; int n; { genCurve(w, p, n, curveHelper); } /* * the next section consists of code to deal with string-integer * (stringint) symbols. See graphics.h. */ /* * string-integer comparison, for qsearch() */ static int sicmp(sip1,sip2) siptr sip1, sip2; { return strcmp(sip1->s, sip2->s); } /* * string-integer lookup function: given a string, return its integer */ int si_s2i(sip,s) siptr sip; char *s; { stringint key; siptr p; key.s = s; p = (siptr)qsearch((char *)&key,(char *)(sip+1),sip[0].i,sizeof(key),sicmp); if (p) return p->i; return -1; } /* * string-integer inverse function: given an integer, return its string */ char *si_i2s(sip,i) siptr sip; int i; { register siptr sip2 = sip+1; for(;sip2<=sip+sip[0].i;sip2++) if (sip2->i == i) return sip2->s; return NULL; } /* * And now, the stringint data. * Convention: the 0'th element of a stringint array contains the * NULL string, and an integer count of the # of elements in the array. */ stringint attribs[] = { { 0, NUMATTRIBS}, {"ascent", A_ASCENT}, {"bg", A_BG}, {"canvas", A_CANVAS}, {"ceol", A_CEOL}, {"cliph", A_CLIPH}, {"clipw", A_CLIPW}, {"clipx", A_CLIPX}, {"clipy", A_CLIPY}, {"col", A_COL}, {"columns", A_COLUMNS}, {"cursor", A_CURSOR}, {"depth", A_DEPTH}, {"descent", A_DESCENT}, {"display", A_DISPLAY}, {"displayheight", A_DISPLAYHEIGHT}, {"displaywidth", A_DISPLAYWIDTH}, {"drawop", A_DRAWOP}, {"dx", A_DX}, {"dy", A_DY}, {"echo", A_ECHO}, {"fg", A_FG}, {"fheight", A_FHEIGHT}, {"fillstyle", A_FILLSTYLE}, {"font", A_FONT}, {"fwidth", A_FWIDTH}, {"gamma", A_GAMMA}, {"geometry", A_GEOMETRY}, {"height", A_HEIGHT}, {"iconic", A_ICONIC}, {"iconimage", A_ICONIMAGE}, {"iconlabel", A_ICONLABEL}, {"iconpos", A_ICONPOS}, {"image", A_IMAGE}, {"label", A_LABEL}, {"leading", A_LEADING}, {"lines", A_LINES}, {"linestyle", A_LINESTYLE}, {"linewidth", A_LINEWIDTH}, {"pattern", A_PATTERN}, {"pointer", A_POINTER}, {"pointercol", A_POINTERCOL}, {"pointerrow", A_POINTERROW}, {"pointerx", A_POINTERX}, {"pointery", A_POINTERY}, {"pos", A_POS}, {"posx", A_POSX}, {"posy", A_POSY}, {"reverse", A_REVERSE}, {"row", A_ROW}, {"rows", A_ROWS}, {"size", A_SIZE}, {"visual", A_VISUAL}, {"width", A_WIDTH}, {"windowlabel", A_WINDOWLABEL}, {"x", A_X}, {"y", A_Y}, }; /* * There are more, X-specific stringint arrays in ../common/xwindow.c */ #else /* Graphics */ static char junk; /* avoid empty module */ #endif /* Graphics */ *[V9.SRC.RUNTIME]RWINRSC.R;1+,d./ 4-F0123KPWO56vʛ7ҧʛ89Jj$GHJ/* * File: rwinrsc.r * Icon graphics interface resources * * Resources are allocated through a layer of internal management * routines in order to handle aliasing and resource sharing. */ #ifdef Graphics /* * global variables. */ wcp wcntxts = NULL; wsp wstates = NULL; wbp wbndngs = NULL; int win_highwater = -1; #ifdef XWindows #include "rxrsc.ri" #endif /* XWindows */ #ifdef PresentationManager #include "rpmrsc.ri" #endif /* PresentationManager */ /* * allocate a window binding structure */ wbp alc_wbinding() { int i; wbp w; GRFX_ALLOC(w, _wbinding); GRFX_LINK(w, wbndngs); return w; } /* * free a window binding. */ novalue free_binding(w) wbp w; { w->refcount--; if(w->refcount == 0) { if (w->window) free_window(w->window); if (w->context) free_context(w->context); GRFX_UNLINK(w, wbndngs); } } #else /* Graphics */ static char x; /* avoid empty module */ #endif /* Graphics */ *[V9.SRC.RUNTIME]RWINSYS.R;1+,Y./ 4-F0123KPWO56P7y989Jj$GHJ/* * File: rwinsys.r * Window-system-specific window support routines. * This file simply includes an appropriate r*win.ri file. */ #ifdef Graphics #ifdef PresentationManager #include "rpmwin.ri" #endif /* PresentationManager */ #ifdef XWindows #include "rxwin.ri" #endif /* XWindows */ #ifdef MSWindows #include "rmswin.ri" #endif /* MSWindows */ #else /* Graphics */ static char junk; /* avoid empty module */ #endif /* Graphics */  u\ VMS.BCKLF[V9.SRC.RUNTIME]RXRSC.RI;1;11-6*[V9.SRC.RUNTIME]RXRSC.RI;1+,L.-/ 4---F0123KPWO.56789Jj$GHJ/* * File: rxrsc.ri - X Window specific resource allocation/deallocation * * Resources are allocated through a layer of internal management * routines in order to handle aliasing and resource sharing. */ wdp wdsplys; wfp findfont Params((wbp w, char *fam, int size, int flags)); /* * Allocate a color given linear r, g, b. Colors are shared on a * per-display basis, but they are often freed on a per-window basis, * so they are remembered in two structures. */ wclrp alc_rgb(w,s,r,g,b,is_iconcolor) wbp w; char *s; unsigned int r,g,b; int is_iconcolor; { LinearColor lc; XColor color; int i; int *numColors; short *theColors; STDLOCALS(w); /* * handle black and white specially (no allocation) */ if ((r == 0) && (g == 0) && (b == 0)) return &(wd->colors[0]); if ((r == 65535) && (g == 65535) && (b == 65535)) return &(wd->colors[1]); if (is_iconcolor) { if (ws->iconColors == NULL) ws->iconColors = (short *)alloc(WMAXCOLORS * sizeof(short)); numColors = &(ws->numiColors); theColors = ws->iconColors; } else { if (ws->theColors == NULL) ws->theColors = (short *)alloc(WMAXCOLORS * sizeof(short)); numColors = &(ws->numColors); theColors = ws->theColors; } /* * Change into server-dependent R G B */ lc.red = r; lc.green = g; lc.blue = b; color = xcolor(w, lc); r = color.red; g = color.green; b = color.blue; /* * Search for the color in w's display */ for (i = 2; i < wd->numColors; i++) { if (wd->colors[i].refcount>0 && wd->colors[i].type == SHARED && color.red == wd->colors[i].r && color.green == wd->colors[i].g && color.blue == wd->colors[i].b) break; } if (i >= wd->numColors) { int j; /* * color not found, must allocate * first verify there is room in window color table. */ if (*numColors == WMAXCOLORS) { return NULL; } if (!XAllocColor(stddpy, wd->cmap, &color)) { /* try again with a virtual colormap (but not for an icon) */ if (is_iconcolor || !go_virtual(w) || !XAllocColor(stddpy, wd->cmap, &color)) return NULL; } j = alc_centry(wd); if (j == 0) return NULL; strcpy(wd->colors[j].name, s); /* * Store server color as requested in color table. */ wd->colors[j].r = r; wd->colors[j].g = g; wd->colors[j].b = b; wd->colors[j].c = color.pixel; wd->colors[j].type = SHARED; theColors[(*numColors)++] = j; return &(wd->colors[j]); } else { /* color is found, alias it and put it in the window color table */ int k; for(k=0; k < *numColors; k++){ if (theColors[k] == i) { /* already there, no further action needed */ return &(wd->colors[i]); } } wd->colors[i].refcount++; theColors[(*numColors)++] = i; return &(wd->colors[i]); } } /* * allocate a color entry, return index (or 0 if table is full) */ int alc_centry(wd) wdp wd; { int j; for (j = 2; j < DMAXCOLORS; j++) if (wd->colors[j].refcount == 0) break; if (j == DMAXCOLORS) return 0; if (j == wd->numColors) wd->numColors++; else if (j > wd->numColors) return 0; /* internal confusion */ wd->colors[j].refcount = 1; return j; } /* * allocate by named color and return Icon color pointer. * This is used by setfg and setbg; a reference is counted * when this function is called. */ wclrp alc_color(w,s) wbp w; char *s; { wclrp rv; wsp ws = w->window; int r, g, b; /* * convert color to an r,g,b triple */ if (parsecolor(w, s, &r, &g, &b) != Succeeded) return 0; /* * return Icon color structure, allocated in display */ Protect(rv = alc_rgb(w, s, r, g, b, 0), return 0); rv->refcount++; return rv; } /* * copy color entries to reflect pixel transmission via CopyArea() * (assumes w1 and w2 are on the same display) */ novalue copy_colors(w1, w2) wbp w1, w2; { wsp ws1 = w1->window, ws2 = w2 -> window; wdp wd = ws1->display; int i1, i2, j; for (i1 = 0; i1 < ws1->numColors; i1++) { j = ws1->theColors[i1]; if (wd->colors[j].refcount > 0 && wd->colors[j].type != MUTABLE) { for (i2 = 0; i2 < ws2->numColors; i2++) { if (j == ws2->theColors[i2]) break; } if (i2 >= ws2->numColors) { /* need to add this color */ wd->colors[j].refcount++; if (ws2->numColors < WMAXCOLORS) { if (ws2->theColors == NULL) ws2->theColors = (short *)alloc(WMAXCOLORS * sizeof(short)); if (ws2->theColors == NULL) break; /* unlikely bug; should fail or something */ ws2->theColors[ws2->numColors++] = j; } /* else cannot record it -- table full */ } } } } /* * free a single color allocated by a given window */ novalue free_xcolor(w,c) wbp w; unsigned long c; { int i; STDLOCALS(w); for (i = 0; i < ws->numColors; i++) { if (wd->colors[ws->theColors[i]].c == c) break; } if (i >= ws->numColors) { /* "free_xcolor couldn't find the color in the window\n" */ } else { if (wd->colors[ws->theColors[i]].type == SHARED && --(wd->colors[ws->theColors[i]].refcount) ==0) { XFreeColors(stddpy, wd->cmap, &c, 1, 0); ws->numColors--; if (ws->numColors != i) ws->theColors[i] = ws->theColors[ws->numColors]; } } } /* * free the colors allocated by a given window. extent indicates how much * to free. extent == 0 implies window colors except black, white, * fg, bg, wbg, and mutable colors. extent == 1 implies free icon colors. * extent == 2 implies free window AND fg/bg/wbg (window is closed) */ novalue free_xcolors(w, extent) wbp w; int extent; { int i; unsigned long toFree[DMAXCOLORS]; int freed = 0; int *numColors; short *theColors; STDLOCALS(w); numColors = (extent==1 ? &(ws->numiColors) : &(ws->numColors)); theColors = (extent==1 ? ws->iconColors : ws->theColors); for (i = *numColors-1; i >= 0; i--) { int j = theColors[i]; /* * don't free black, white, fg, bg, or wbg */ if ((j<2) || ((extent==0) && (&(wd->colors[j]) == w->context->fg)) || ((extent==0) && (&(wd->colors[j]) == w->context->bg)) || ((extent==0) && (&(wd->colors[j]) == w->window->winbg)) || (wd->colors[j].type == MUTABLE)) continue; if (--(wd->colors[j].refcount) == 0) { toFree[freed++] = wd->colors[j].c; } } if (freed>0) XFreeColors(stddpy, wd->cmap, toFree, freed,0); *numColors = 0; } /* * Allocate a virtual colormap with all colors used by the client copied from * the default colormap to new colormap, and set all windows to use this new * colormap. Returns 0 on failure. */ int go_virtual(w) wbp w; { wsp win; STDLOCALS(w); if (wd->cmap != DefaultColormap(stddpy,wd->screen)) return 0; /* already using a virtual colormap */ wd->cmap = XCopyColormapAn 1 d VMS.BCKLF[V9.SRC.RUNTIME]RXRSC.RI;1;11-dFree(stddpy,wd->cmap); /* set the colormap for all the windows to the new colormap */ for (win = wstates; win; win = win->next) if ((win->display->display == stddpy) & (win->win != (Window)NULL)) XSetWindowColormap(stddpy, win->win, wd->cmap); return 1; } /* * allocate a display on machine s */ wdp alc_display(s) char *s; { int i; double g; wdp wd; XColor color; if (s == NULL) s = ""; for(wd = wdsplys; wd; wd = wd->next) if (!strcmp(wd->name,s)) { wd->refcount++; return wd; } GRFX_ALLOC(wd, _wdisplay); strcpy(wd->name,s); wd->display = XOpenDisplay((*s=='\0') ? NULL : s); if (wd->display == NULL) { wd->refcount = 0; free(wd); return NULL; } wd->screen = DefaultScreen(wd->display); wd->cmap = DefaultColormap(wd->display, wd->screen); /* * Color slots 0 and 1 are permanently reserved for black and white * respectively. Allocate them explicitly so that they're preserved * if we later switch to a virtual colormap. */ strcpy(wd->colors[0].name,"black"); wd->colors[0].refcount = 1; wd->colors[0].type = SHARED; wd->colors[0].r = wd->colors[0].g = wd->colors[0].b = 0; color.red = color.green = color.blue = 0; if (XAllocColor(wd->display, wd->cmap, &color)) wd->colors[0].c = color.pixel; else wd->colors[0].c = BlackPixel(wd->display,wd->screen); strcpy(wd->colors[1].name,"white"); wd->colors[1].refcount = 1; wd->colors[1].type = SHARED; wd->colors[1].r = wd->colors[1].g = wd->colors[1].b = 65535; color.red = color.green = color.blue = 65535; if (XAllocColor(wd->display, wd->cmap, &color)) wd->colors[1].c = color.pixel; else wd->colors[1].c = WhitePixel(wd->display,wd->screen); wd->numColors = 2; for (i=2; i < DMAXCOLORS; i++) wd->colors[i].refcount = 0; /* * Set the default gamma correction value for windows that are * opened on this display. Start with configuration default, * but if we can get an interpretation of "RGBi:.5/.5/.5", * calculate a gamma value from that instead. */ wd->gamma = GammaCorrection; if (XParseColor(wd->display, wd->cmap, "RGBi:.5/.5/.5", &color)) { g = .299 * color.red + .587 * color.green + .114 * color.blue; g /= 65535; if (g >= 0.1 && g <= 0.9) /* sanity check */ wd->gamma = log(0.5) / log(g); } /* * Initialize fonts and other things. */ wd->numFonts = 1; wd->fonts = (wfp)malloc(sizeof(struct _wfont)); wd->fonts->refcount = 1; wd->fonts->next = wd->fonts->previous = NULL; wd->fonts->name = malloc(6); strcpy(wd->fonts->name,"fixed"); wd->fonts->fsp = XLoadQueryFont(wd->display, "fixed"); if (wd->fonts->fsp == NULL) { /* couldn't load "fixed"! */ free(wd); return NULL; } { XGCValues gcv; Display *stddpy = wd->display; gcv.font = wd->fonts->fsp->fid; gcv.foreground = wd->colors[0].c; gcv.background = wd->colors[1].c; gcv.fill_style = FillSolid; gcv.cap_style = CapProjecting; wd->icongc = XCreateGC(stddpy, DefaultRootWindow(stddpy), GCFont | GCForeground | GCBackground | GCFillStyle | GCCapStyle, &gcv); if (wd->icongc == NULL) { free(wd); return NULL; } } wd->fonts->height = wd->fonts->fsp->ascent + wd->fonts->fsp->descent; wd->fonts->leading = wd->fonts->height; GRFX_LINK(wd, wdsplys); return wd; } /* * allocate font s in the display attached to w */ wfp alc_font(w,s) wbp w; char **s; { int i, j, k, n, pass, flags, size; wfp rv; char family[MAXFONTWORD+1]; char sizestr[8]; char *stdfam; if (strcmp(*s, "fixed") != 0 && parsefont(*s, family, &flags, &size)) { /* * This is a legal Icon font spec (and it's not an unadorned "fixed"). * Check first for special "standard" family names. */ if (!strcmp(family, "mono")) { stdfam = "lucidatypewriter"; flags |= FONTFLAG_MONO + FONTFLAG_SANS; } else if (!strcmp(family, "typewriter")) { stdfam = "courier"; flags |= FONTFLAG_MONO + FONTFLAG_SERIF; } else if (!strcmp(family, "sans")) { stdfam = "helvetica"; flags |= FONTFLAG_PROPORTIONAL + FONTFLAG_SANS; } else if (!strcmp(family, "serif")) { stdfam = "times"; flags |= FONTFLAG_PROPORTIONAL + FONTFLAG_SERIF; } else stdfam = NULL; if (stdfam) { /* * Standard name: first try preferred family, then generalize. */ rv = findfont(w, stdfam, size, flags); if (!rv) rv = findfont(w, "*", size, flags); } else { /* * Any other name: must match as specified. */ rv = findfont(w, family, size, flags); } if (rv != NULL) return rv; } /* * Not found as an Icon name; may be an X font name. */ return tryfont(w, *s); } /* * return pointer to field i inside XLFD (X Logical Font Description) s. */ char *xlfd_field(s, i) char *s; int i; { int j = 0; while (j < i) { if (*s == '\0') return ""; /* if no such field */ if (*s++ == '-') j++; } return s; } /* * return size of font, treating a scalable font as having size n */ int xlfd_size(s, n) char *s; int n; { char *f; int z; f = xlfd_field(s, XLFD_Size); if (!*f) return 0; z = atoi(f); if (z != 0) return z; else return n; } /* * Find the best font matching a set of specifications. */ wfp findfont(w, family, size, flags) wbp w; char *family; int size, flags; { char fontspec[MAXFONTWORD+100]; char *p, *weight, *slant, *width, *spacing, **fontlist; int n, champ, challenger, bestsize; /* * Construct a font specification that enforces any stated requirements * of size, weight, slant, set width, or proportionality. */ if (size > 0) bestsize = size; else bestsize = DEFAULTFONTSIZE; if (flags & FONTFLAG_MEDIUM) weight = "medium"; else if ((flags & FONTFLAG_DEMI) && (flags & FONTFLAG_BOLD)) weight = "demibold"; else if (flags & FONTFLAG_BOLD) weight = "bold"; else if (flags & FONTFLAG_DEMI) weight = "demi"; else if (flags & FONTFLAG_LIGHT) weight = "light"; else weight = "*"; if (flags & FONTFLAG_ITALIC) slant = "i"; else if (flags & FONTFLAG_OBLIQUE) slant = "o"; else if (flags & FONTFLAG_ROMAN) slant = "r"; else slant = "*"; if (flags & FONTFLAG_NARROW) width = "narrow"; else if (flags & FONTFLAG_CONDENSED) width = "condensed"; else if (flags & FONTFLAG_NORMAL) width = "normal"; else if (flags & FONTFLAG_WIDE) width = "wide"; else if (flags & FONTFLAG_EXTENDED) width = "extended"; else width = "*"; if (flags & FONTFLAG_PROPORTIONAL) spacing = "p"; else spacing = "*"; /* can't specify {m or c} to X */ sprintf(fontspec, "-*-%s-%s-%s-%s-*-*-*-*-*-%s-*-*-*", family, weight, slant, width, spacing); /* * Get a list of matching fonts from the X server and find the best one. */ fontlist = XListFonts(w->window->display->display, fontspec, 2500, &n); champ = 0; while (champ < n && !okfont(fontlist[champ], size, flags)) champ++; if (champ >= n) { XFreeFontNames(fontlist); return NULL; /* nothing acceptable */ } for (challenger = champ + 1; challenger < n; challenger++) if (okfont(fontlist[challenge 5w/ VMS.BCKLF[V9.SRC.RUNTIME]RXRSC.RI;1N;1-r], size, flags) && fontcmp(fontlist[challenger], fontlist[champ], bestsize, flags) < 0) champ = challenger; /* * Set the scaling field, if needed, and load the font. */ p = xlfd_field(fontlist[champ], XLFD_Size); if (p[0] == '0' && p[1] == '-') sprintf(fontspec, "%.*s%d%s", p - fontlist[champ], fontlist[champ], bestsize, p + 1); else strcpy(fontspec, fontlist[champ]); XFreeFontNames(fontlist); return tryfont(w, fontspec); } /* * check for minimum acceptability of a font * (things that couldn't be filtered by the XLFD pattern): * -- size wrong (there's a bug in OpenWindows 3.3 else X could do it) * -- not monospaced (can't set pattern to match m or c but not p) */ int okfont(spec, size, flags) char *spec; int size, flags; { if (size > 0 && xlfd_size(spec, size) != size) return 0; /* can't match explicit size request */ if ((flags & FONTFLAG_MONO) && xlfd_field(spec, XLFD_Spacing)[0] == 'p') return 0; /* requested mono, but this isn't */ return 1; } /* * rank two fonts based on whether XLFD field n matches a preferred value. * returns <0 if font1 is better, >0 if font2 is better, else 0. */ int fieldcmp(font1, font2, value, field) char *font1, *font2, *value; int field; { int len, r1, r2; len = strlen(value); r1 = (strncmp(xlfd_field(font1, field), value, len) == 0); r2 = (strncmp(xlfd_field(font2, field), value, len) == 0); return r2 - r1; /* -1, 0, or 1 */ } /* * rank two fonts. * returns <0 if font1 is better, >0 if font2 is better, else 0. * * Note that explicit requests for size, slant, weight, and width caused * earlier filtering in findfont(), so all those flags aren't checked * again here; normal values are just favored in case nothing was specified. */ int fontcmp(font1, font2, size, flags) char *font1, *font2; int size, flags; { int n; /* return if exactly one of the fonts matches value s in field n */ #define PREFER(s,n) \ do { int r = fieldcmp(font1, font2, s, n); if (r != 0) return r; } while (0) /* return if exactly one of the fonts does NOT match value s in field n */ #define SPURN(s,n) \ do { int r = fieldcmp(font1, font2, s, n); if (r != 0) return -r; } while (0) /* * Prefer the font that is closest to the desired size. */ n = abs(size - xlfd_size(font1, size)) - abs(size - xlfd_size(font2, size)); if (n != 0) return n; /* * try to check serifs (though not always indicated in X font description) */ if (flags & FONTFLAG_SANS) { PREFER("sans", XLFD_AddStyle); SPURN("serif", XLFD_AddStyle); } else if (flags & FONTFLAG_SERIF) { PREFER("serif", XLFD_AddStyle); SPURN("sans", XLFD_AddStyle); } /* * prefer normal values for other fields. These only have an effect * for fields that were wildcarded when requesting the font list. */ PREFER("r", XLFD_Slant); /* prefer roman slant */ PREFER("medium", XLFD_Weight); /* prefer medium weight */ SPURN("demi", XLFD_Weight); /* prefer non-demi if no medium */ PREFER("normal", XLFD_SetWidth); /* prefer normal width */ PREFER("iso8859", XLFD_CharSet); /* prefer font of ASCII chars */ SPURN("0", XLFD_PointSize); /* prefer tuned font to scaled */ PREFER("adobe", XLFD_Foundry); /* these look better than others */ /* no significant difference */ return 0; } /* * load a font and return a font structure. */ wfp tryfont(w,s) wbp w; char *s; { wdp wd = w->window->display; wfp rv; /* * see if the font is already loaded on this display */ for(rv = wd->fonts; rv != NULL; rv = rv->next) { if (!strcmp(s,rv->name)) break; } if (rv != NULL) { rv->refcount++; return rv; } /* * load a new font */ GRFX_ALLOC(rv, _wfont); rv->name = salloc(s); if (rv->name == NULL) ReturnErrNum(305, NULL); rv->fsp = XLoadQueryFont(wd->display, rv->name); if (rv->fsp == NULL){ free(rv->name); free(rv); return NULL; } rv->height = rv->fsp->ascent + rv->fsp->descent; rv->leading = rv->height; /* * link the font into this displays fontlist (but not at the head!) */ rv->next = wd->fonts->next; rv->previous = wd->fonts; if (wd->fonts->next) wd->fonts->next->previous = rv; wd->fonts->next = rv; return rv; } /* * allocate a context. Can't be called until w has a display and window. */ wcp alc_context(w) wbp w; { int i; wcp wc; wdp wd = w->window->display; GRFX_ALLOC(wc, _wcontext); wc->display = wd; wd->refcount++; wc->fg = &(wd->colors[0]); wc->fg->refcount++; wc->bg = &(wd->colors[1]); wc->bg->refcount++; wc->font = wd->fonts; wc->drawop = GXcopy; wc->gamma = wd->gamma; wc->clipx = wc->clipy = 0; wc->clipw = wc->cliph = -1; GRFX_LINK(wc, wcntxts); return wc; } /* * allocate a context, cloning attributes from an existing context */ wcp clone_context(w) wbp w; { wcp wc, rv; XGCValues gcv; XRectangle rec; int gcmask = GCFont | GCForeground | GCBackground | GCFillStyle | GCCapStyle | GCLineWidth | GCLineStyle; wc = w->context; Protect(rv = alc_context(w), return NULL); rv->dx = wc->dx; rv->dy = wc->dy; rv->clipx = wc->clipx; rv->clipy = wc->clipy; rv->clipw = wc->clipw; rv->cliph = wc->cliph; rv->fg = wc->fg; rv->fg->refcount++; rv->bg = wc->bg; rv->bg->refcount++; rv->font = wc->font; rv->font->refcount++; rv->fillstyle = wc->fillstyle; rv->linestyle = wc->linestyle; rv->linewidth = wc->linewidth; rv->drawop = wc->drawop; rv->gamma = wc->gamma; rv->bits = wc->bits; if (ISXORREVERSE(w)) gcv.foreground = rv->fg->c ^ rv->bg->c; else gcv.foreground = rv->fg->c; gcv.background = rv->bg->c; gcv.font = rv->font->fsp->fid; gcv.line_style = rv->linestyle; gcv.line_width = rv->linewidth; gcv.fill_style = rv->fillstyle; gcv.cap_style = CapProjecting; rv->gc = XCreateGC(w->window->display->display,w->window->pix,gcmask,&gcv); if (rv->gc == NULL) { free(rv); return NULL; } if (rv->clipw >= 0) { rec.x = rv->clipx; rec.y = rv->clipy; rec.width = ((rv->clipw) ? rv->clipw : w->window->pixwidth); rec.height = ((rv->cliph) ? rv->cliph : w->window->pixheight); XSetClipRectangles(rv->display->display, rv->gc, 0, 0, &rec, 1,Unsorted); } return rv; } /* * allocate a window state structure */ wsp alc_winstate() { int i; wsp ws; GRFX_ALLOC(ws, _wstate); ws->bits = 1024; /* echo ON; others OFF */ ws->filep = nulldesc; ws->listp = nulldesc; ws->theCursor = -1; ws->iconic = NormalState; ws->posx = ws->posy = -(MaxInt); GRFX_LINK(ws, wstates); return ws; } /* * free a window state */ int free_window(ws) wsp ws; { ws->refcount--; if(ws->refcount == 0) { ws->bits |= 1; /* SETZOMBIE */ if (ws->win != (Window) NULL) { XDestroyWindow(ws->display->display, ws->win); XFlush(ws->display->display); while (ws->win != (Window) NULL) if (pollevent() == -1) return -1; } GRFX_UNLINK(ws, wstates); } return 0; } /* * free a window context */ novalue free_context(wc) wcp wc; { wc->refcount--; if(wc->refcount == 0) { if (wc->gc != NULL) XFreeGC(wc->display->display, wc->gc); free_display(wc->display); GRFX_UNLINK(wc, wcntxts); } } /* * free a display */ novalue free_display(wd) wdp wd; { wd->refcount--; if(wd->refcount == 0) { if (wd->cmap != De 8U VMS.BCKLF[V9.SRC.RUNTIME]RXRSC.RI;1--faultColormap(wd->display, wd->screen)) XFreeColormap(wd->display, wd->cmap); XCloseDisplay(wd->display); if (wd->previous) wd->previous->next = wd->next; else wdsplys = wd->next; if (wd->next) wd->next->previous = wd->previous; free(wd); } } *[V9.SRC.RUNTIME]RXWIN.RI;1+,W./ 4z-F0123KPWO56`W>7Ʒ89Jj$GHJ/* * File: rxwin.ri - X11 system-specific graphics interface code. */ #ifdef Graphics #define RootState IconicState+1 /* * Global variables specific to X */ XSizeHints size_hints; /* * function prototypes */ int seticonicstate Params((wbp w, char *s)); int seticonpos Params((wbp w, char *s)); int handle_misc Params((wdp display, wbp w)); hidden int handle_config Params((wbp w, XConfigureEvent *event)); hidden int handle_exposures Params((wbp w, XExposeEvent *event)); hidden novalue handle_mouse Params((wbp w, XButtonEvent *event)); hidden novalue handle_keypress Params((wbp w, XKeyEvent *event)); hidden XImage * getximage Params((wbp w, int x, int y, int width, int height, int init)); hidden int ulcmp Params((pointer p1, pointer p2)); novalue moveWindow Params((wbp w, int x, int y)); int setdisplay Params((wbp w, char *s)); novalue makeIcon Params((wbp w, int x, int y)); int wmap Params((wbp w)); Pixmap loadimage Params((wbp w, char *filename, unsigned int *height, unsigned int *width, int atorigin, int *status)); novalue unsetclip Params((wbp w)); /* * write some text to both the window and the pixmap */ novalue xdis(w,s,n) register wbp w; char *s; int n; { int x, y, fh, delta_x; STDLOCALS(w); pollctr>>=1; pollctr++; x = ws->x; y = ws->y; delta_x = XTextWidth(wc->font->fsp,s,n); RENDER4(XDrawImageString,x,y,s,n); ws->x += delta_x; } /* * put a character out to a window using the current attributes */ int wputc(ci,w) int ci; wbp w; { int fh, lh, width, height, over; char c = (char)ci; STDLOCALS(w); fh = wc->font->height; lh = wc->font->leading; width = ws->width; height = ws->height; switch(c) { case '\r': { ws->x = MARGIN + wc->dx; break; } case '\n': { if (ISCEOLON(w)) { /* * Clear the rest of the line, like a terminal would. * Its arguable whether this should clear to the window * background or the current context background. If you * change it to use the context background you have to * change the XClearArea call to another XFillRectangle * (cf. eraseArea()). */ if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); XSetForeground(stddpy, stdgc, ws->winbg->c); /* or wc->bg->c ? */ XClearArea(stddpy, stdwin, ws->x, ws->y-wc->font->fsp->max_bounds.ascent, width-ws->x, lh, False); XFillRectangle(stddpy, stdpix, stdgc, ws->x, ws->y - wc->font->fsp->max_bounds.ascent, width - ws->x, lh); XSetForeground(stddpy, stdgc,wc->fg->c^(ISXORREVERSE(w)?wc->bg->c:0)); if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, wc->drawop); } ws->y += lh; ws->x = MARGIN + wc->dx; /* * Now for the exciting part: do we scroll the window? * This is a grotesque copy to a new pixmap followed by * a complete repainting of the window */ over = ws->y + wc->font->fsp->max_bounds.descent - (height - MARGIN); if (over > 0) { ws->y -= over; if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); XCopyArea(stddpy, stdpix, stdpix, stdgc, MARGIN, MARGIN + over, /* x, y */ width - MARGIN, height - MARGIN - over, /* w, h */ MARGIN, MARGIN); /* dstx,dsty */ XSetForeground(stddpy, stdgc, ws->winbg->c); XFillRectangle(stddpy, stdpix, stdgc, 0, height - MARGIN - over, width, over + MARGIN); XSetForeground(stddpy, stdgc,wc->fg->c^(ISXORREVERSE(w)?wc->bg->c:0)); if (stdwin) XCopyArea(stddpy, stdpix, stdwin, stdgc, 0, 0, width, height, 0,0); if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, wc->drawop); } break; } case '\t': { xdis(w, " ", 8 - ((XTOCOL(w,ws->x))&7)); break; } /* * Handle backspaces. This implements cooked mode echo handling. */ case '\177': case '\010': { int i = 0, pre_x; /* * Start with the last character queued up. */ i--; /* * Trot back to the control-H itself. */ while ((i>-EQUEUELEN) && (EVQUESUB(w,i) != c)) i--; if (i == -EQUEUELEN) break; /* * Go past the control-H. */ i--; /* * Go back through any number of control-H's from prior lifetimes. */ while((i > -EQUEUELEN) && !isprint(EVQUESUB(w,i))) i--; if (i == -EQUEUELEN) break; /* * OK, here's the character we're actually rubbing out. Back up. */ c = EVQUESUB(w,i); pre_x = ws->x; ws->x -= XTextWidth(wc->font->fsp, &c, 1); /* * Physically erase the character from the queue. This results in * two control-H's present in the queue. */ *evquesub(w,i) = '\010'; /* * Save the backed-up position, and draw spaces through the erased. */ i = ws->x; while(ws->x < pre_x) xdis(w," ",1); ws->x = i; break; } default: { xdis(w,&c,1); } } return 1; } /* * handle_misc processes pending events on display. * if w is non-null, block until a returnable event arrives. * returns 1 on success, 0 on failure, and -1 on error. */ int handle_misc(display, w) wdp display; wbp w; { XEvent event; Window evwin; int i; static int presscount = 0; wbp wb; wsp ws; while ((w != NULL) || XPending(display->display)) { XNextEvent(display->display, &event); evwin = event.xexpose.window; /* go ahead, criticize all you like */ /* could avoid doing this search every event by handling 1 window at a time */ for (wb = wbndngs; wb; wb=wb->next) { ws = wb->window; if ((ws->display == display) && ((ws->win == evwin) || (ws->iconwin == evwin) || (ws->pix == evwin) || (ws->initialPix == evwin))) break; } if (!wb) continue; if (evwin == ws->iconwin) { switch (event.type) { case Expose: if (ws->iconpix) XCopyArea(display->display, ws->iconpix, ws->iconwin, display->icongc, 0, 0, ws->iconw, ws->iconh, 3, 3); else XDrawString(display->display, evwin, display->icongc, 4, ws->display->fonts->fsp->max_bounds.ascent + 2, ws->iconlabel, strlen(ws->iconlabel)); if (ws->iconic == IconicState) SETEXPOSED(wb); break; case KeyPress: handle_keypress(wb, (XKeyEvent *)&event); break; case ButtonPre i VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;11ss: if (ws->iconic == IconicState) XMapWindow(ws->display->display, ws->win); ws->iconic = NormalState; /* set the current state */ break; case ConfigureNotify: ws->iconx = ((XConfigureEvent *)&event)->x; ws->icony = ((XConfigureEvent *)&event)->y; break; } } else { switch (event.type) { case KeyPress: handle_keypress(wb, (XKeyEvent *)&event); break; case ButtonPress: presscount++; handle_mouse(wb, (XButtonEvent *)&event); break; case ButtonRelease: if (--presscount < 0) presscount = 0; handle_mouse(wb, (XButtonEvent *)&event); break; case MotionNotify: if (presscount) handle_mouse(wb, (XButtonEvent *)&event); break; case NoExpose: break; case Expose: if (!handle_exposures(wb, (XExposeEvent *)&event)) return 1; continue; case UnmapNotify: wb->window->iconic = IconicState; continue; case MapNotify: ws->iconic = NormalState; continue; case ConfigureNotify: if (!handle_config(wb, (XConfigureEvent *)&event)) { return 0; } break; case DestroyNotify: if (!ISZOMBIE(wb)) return -1; /* error #141 */ /* * first of all, we are done with this window */ ws->win = (Window) NULL; /* * if there are no more references, we are done with the pixmap * too. Free it and the colors allocated for this canvas. */ if (ws->refcount == 0) { if (wb->window->pix) { Display *d = ws->display->display; XSync(d, False); if (ws->pix) XFreePixmap(d, ws->pix); ws->pix = (Pixmap) NULL; } if (ws->initialPix != (Pixmap) NULL) { Display *d = ws->display->display; XSync(d, False); XFreePixmap(d, ws->initialPix); ws->initialPix = (Pixmap) NULL; } free_xcolors(wb, 2); /* free regular colors */ free_xcolors(wb, 1); /* free icon colors */ } break; default: continue; } if ((w != NULL) && ((evwin == w->window->win) || (evwin == w->window->iconwin))) { return 1; } } } return 1; } /* * poll for available events on all opened displays. * this is where the interpreter calls into the X interface. */ int pollevent() { wdp wd; int hm; for (wd = wdsplys; wd; wd = wd->next) { if ((hm = handle_misc(wd, NULL)) < 1) { if (hm == -1) return -1; else if (hm == 0) { /* how to handle failure? */ } } } return 400; } /* * get a single item from w's pending queue */ int wgetq(w,res) wbp w; dptr res; { int first = 0, hm; unsigned long saved_drawop = w->context->drawop; while (1) { STDLOCALS(w); /* leave inside loop; ws->pix can change! */ if (!EVQUEEMPTY(w)) { EVQUEGET(w,*res); if (first) { if (ISCURSORON(w)) { RENDER4(XDrawString, ws->x, ws->y, "_", 1); wc->drawop = saved_drawop; XSetFunction(stddpy, stdgc, wc->drawop); resetfg(w); } } return 1; } if (!first++ && ISCURSORON(w)) { wc->drawop = GXxor; XSetFunction(stddpy, stdgc, GXxor); XSetForeground(stddpy, stdgc, wc->fg->c ^ wc->bg->c); RENDER4(XDrawString, ws->x, ws->y, "_", 1); XSync(stddpy, False); } if ((hm = handle_misc(wd, w)) < 1) { if (hm == -1) { if (ISCURSORON(w)) { RENDER4(XDrawString, ws->x, ws->y, "_", 1); wc->drawop = saved_drawop; XSetFunction(stddpy, stdgc, wc->drawop); resetfg(w); } return -1; } } } } /* * wclose - close a window. If is a real on-screen window, * wait for a DestroyNotify event from the server before returning. */ int wclose(w) wbp w; { STDLOCALS(w); XSync(stddpy, False); if (pollevent() == -1) return -1; /* * Force window to close (turn into a pixmap) */ if (ws->win && ws->refcount > 1) { SETZOMBIE(w); XDestroyWindow(stddpy,stdwin); XFlush(stddpy); ws->refcount--; while (ws->win) if (pollevent() == -1) return -1; } /* * Entire canvas terminates */ else { free_xcolors(w, 2); free_xcolors(w, 1); free_window(ws); } return 0; } /* * flush a window */ novalue wflush(w) wbp w; { STDLOCALS(w); XFlush(stddpy); } /* * flush all windows */ novalue wflushall() { wdp wd; for (wd = wdsplys; wd != NULL; wd = wd->next) { XFlush(wd->display); } } /* * sync all the servers */ novalue wsync(w) wbp w; { wdp wd; if (w == NULL) { for (wd = wdsplys; wd != NULL; wd = wd->next) { XSync(wd->display, False); } } else XSync(w->window->display->display, False); } /* * open a window * This routine really just allocates a window data structure. * The interesting part is done in wmap, after the user preferences * passed to Icon have been parsed. */ FILE *wopen(name, lp, attr, n, err_index) char *name; struct b_list *lp; dptr attr; int n, *err_index; { wbp w; wsp ws; char dispchrs[256]; char answer[128]; char *display = NULL; int i; tended struct b_list *tlp; tended struct descrip attrrslt; tlp = lp; for(i=0;i8) && !strncmp("display=",StrLoc(attr[i]),8)) { mystrncpy(dispchrs,StrLoc(attr[i])+8,StrLen(attr[i])-8); display = dispchrs; } } Protect(w = alc_wbinding(), return NULL); Protect(w->window = alc_winstate(), { free_binding(w); return NULL; }); Protect(w->window->display = alc_display(display), { free_binding(w); return NULL; }); ws = w->window; ws->listp.dword = D_List; BlkLoc(ws->listp) = (union block *)tlp; /* * some attributes of the display and window are used in the context */ Protect(w->context = alc_context(w), { free_display(w->window->display); free_binding(w); return NULL;}); /* * some attributes of the context determine window defaults */ ws->height = w->context->font->height * 12 + (MARGIN << 1); ws->width = w->context->font->fsp->max_bounds.width * 80 + (MARGIN << 1); ws->y = MARGIN + w->context->font->fsp->max_bounds.ascent; ws->x = MARGIN; ws->y += w->context->dy; ws->x += w->context->dx; /* * Loop through any remaining arguments. */ for (i = 0; i < n; i++){ /* * write the attribute, * except "display=" attribute, which is done earlier */ if((StrLen(attr[i])<9)||strncmp(StrLoc(attr[i]),"display=",8)) { switch (wattrib((wbp) w, StrLoc(attr[i]), StrLen(attr[i]), &attrrslt, answer)) { case Error: *err_index = i; return NULL; case Failed: free_binding((wbp)w); return NULL; } } } if (ws->windowlabel == NULL) ws->windowlabel = salloc(name); /* * OK, the window background is whatever BG is now */ ws->winbg = w->context->bg; ws->winbg->refcount++; if (wmap(w) != 1) return NULL; return (FILE *)w; } /* * make an icon for a window */ novalue makeIcon(w, x, y) wbp w; int x, y; /* current mouse position */ { char *name; int status; STDLOCALS(w); /* if a pixmap image has been specified, load it */ if (ws->initicon.width) { ws->iconpix = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), ws->iconw, ws->iconh, DefaultDepth(stddpy,wd->screen)); } else if (ws->iconimage && strcmp(ws->iconimage, "")) { ws->iconpix = loadimage(w, ws {v VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;1KH->iconimage, &(ws->iconh), &(ws->iconw), 0, &status); ws->iconh += 6; ws->iconw += 6; } else { /* determine the size of the icon window */ ws->iconh = wd->fonts->fsp->max_bounds.ascent + wd->fonts->fsp->max_bounds.descent + 5; if (ws->iconlabel == NULL) ws->iconlabel = ""; ws->iconw = XTextWidth(wd->fonts->fsp, ws->iconlabel, strlen(ws->iconlabel)) + 6; } /* if icon position hint exists, get it */ if (ws->wmhintflags & IconPositionHint) { x = ws->iconx; y = ws->icony; } /* create the icon window */ ws->iconwin = XCreateSimpleWindow(stddpy, DefaultRootWindow(stddpy), x, y, ws->iconw, ws->iconh, 2, wc->fg->c, wc->bg->c); /* select events for the icon window */ XSelectInput(stddpy, ws->iconwin, ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask); } /* * Create a canvas. * If a window, cause the window to actually become visible on the screen. */ int wmap(w) wbp w; { XWindowAttributes attrs; XGCValues gcv; int gcmask = GCFont | GCForeground | GCBackground | GCFillStyle | GCCapStyle; struct imgdata *imd; int r; int new_pixmap = 0; XWMHints wmhints; STDLOCALS(w); /* * Create a pixmap for this canvas if there isn't one already. */ if (ws->pix == (Pixmap) NULL) { if (ws->initialPix) { ws->pix = ws->initialPix; ws->initialPix = (Pixmap) NULL; ws->pixwidth = ws->width; ws->pixheight = ws->height; } else { ws->pix = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), ws->width, ws->height, DefaultDepth(stddpy,wd->screen)); ws->pixwidth = ws->width; ws->pixheight = ws->height; new_pixmap = 1; } stdpix = ws->pix; } /* * create the X window (or use the DefaultRootWindow if requested) */ if (ws->iconic != HiddenState) { ws->win = ((ws->iconic == RootState) ? DefaultRootWindow(stddpy) : XCreateSimpleWindow(stddpy, DefaultRootWindow(stddpy), ws->posx < 0 ? 0 : ws->posx, ws->posy < 0 ? 0 : ws->posy, ws->width, ws->height, 4, wc->fg->c, wc->bg->c)); if (ws->win == (Window) NULL) return 0; stdwin = ws->win; XClearWindow(stddpy, stdwin); } /* * before creating the graphics context, construct a description * of any non-default initial graphics context values. */ gcv.foreground = wc->fg->c ^ (ISXORREVERSE(w) ? wc->bg->c : 0); gcv.background = wc->bg->c; gcv.font = wc->font->fsp->fid; if (wc->fillstyle) gcv.fill_style = wc->fillstyle; else gcv.fill_style = wc->fillstyle = FillSolid; if (wc->linestyle || wc->linewidth) { gcmask |= (GCLineWidth | GCLineStyle); gcv.line_width = wc->linewidth; gcv.line_style = wc->linestyle; } else wc->linestyle = LineSolid; gcv.cap_style = CapProjecting; /* * Create a graphics context (or change an existing one to conform * with initial values). */ if (stdgc == NULL) { wc->gc = XCreateGC(stddpy, stdpix, gcmask, &gcv); stdgc = wc->gc; if (stdgc == NULL) return 0; } else XChangeGC(stddpy, stdgc, gcmask, &gcv); if (wc->clipw >= 0) setclip(w); if (new_pixmap) { XSetForeground(stddpy, stdgc, ws->winbg->c); XFillRectangle(stddpy, ws->pix, stdgc, 0, 0, ws->width, ws->height); XSetForeground(stddpy, stdgc, wc->fg->c ^(ISXORREVERSE(w)?wc->bg->c:0)); } imd = &ws->initimage; if (imd->width) { r = strimage(w, 0, 0, imd->width, imd->height, imd->paltbl, imd->data, (word)imd->width * (word)imd->height, 0); free((pointer)imd->paltbl); free((pointer)imd->data); if (r < 0) return 0; } imd = &ws->initicon; if (imd->width) { r = strimage(w, 0, 0, imd->width, imd->height, imd->paltbl, imd->data, (word)imd->width * (word)imd->height, 1); free((pointer)imd->paltbl); free((pointer)imd->data); if (r < 0) return 0; wmhints.icon_window = ws->iconwin; ws->wmhintflags |= IconWindowHint; } if (wc->patternname != NULL) { if (SetPattern(w, wc->patternname, strlen(wc->patternname)) == Error) return 0; } /* * if we are opening a pixmap, we are done at this point. */ if (stdwin == (Window) NULL) return 1; if (ws->iconic != RootState) { size_hints.flags = PSize | PMinSize; size_hints.width = ws->width; size_hints.height= ws->height; if (ws->posx == -(MaxInt)) ws->posx = 0; else size_hints.flags |= USPosition; if (ws->posy == -(MaxInt)) ws->posy = 0; else size_hints.flags |= USPosition; size_hints.x = ws->posx; size_hints.y = ws->posy; size_hints.min_width = wc->font->fsp->max_bounds.width + (MARGIN << 1); size_hints.min_height= wc->font->height + (MARGIN << 1); if (ws->iconlabel == NULL) ws->iconlabel = salloc(ws->windowlabel); XSetStandardProperties(stddpy, stdwin, ws->windowlabel, ws->iconlabel, 0,0,0, &size_hints); XSelectInput(stddpy, stdwin, ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | StructureNotifyMask); } wmhints.input = True; wmhints.flags = InputHint; if (ws->iconic != RootState) { if (ws->iconimage != NULL) { makeIcon(w, ws->posx < 0 ? 0 : ws->posx, ws->posy < 0 ? 0 : ws->posy); wmhints.icon_window = ws->iconwin; ws->wmhintflags |= IconWindowHint; } wmhints.flags |= (ws->wmhintflags | StateHint); wmhints.initial_state = ws->iconic; wmhints.icon_x = ws->iconx; wmhints.icon_y = ws->icony; } XSetWMHints(stddpy, stdwin, &wmhints); if (wd->cmap != DefaultColormap(stddpy,wd->screen)) XSetWindowColormap(stddpy, stdwin, wd->cmap); if (ws->iconic != RootState) XMapWindow(stddpy, stdwin); XGetWindowAttributes(stddpy, stdwin, &attrs); ws->width = attrs.width; ws->height = attrs.height; if (!resizePixmap(w, ws->width, ws->height)) return 0; if (ws->theCursor >= 0) { int i = ws->theCursor >> 1; if (i < NUMCURSORSYMS) { if (stdwin) XDefineCursor(stddpy, stdwin, wd->cursors[i]); } } /* * busy loop for an expose event, unless of course we are starting out * in an iconic state */ if (ws->win != (Window) NULL) { int hm; while (!ISEXPOSED(w) && (ws->iconic != IconicState || ws->iconwin)) { if ((hm = handle_misc(wd, w)) < 1) { if (hm == -1) return -1; else if (hm == 0) { /* how to handle failure? */ } } } } XSetFunction(stddpy, stdgc, wc->drawop); XSync(stddpy, False); return 1; } int do_config(w, status) wbp w; int status; { wsp ws = w->window; wdp wd = ws->display; int wid = ws->width, ht = ws->height; int posx = ws->posx, posy = ws->posy; XTextProperty textprop; if (! resizePixmap(w, ws->width, ws->height)) return Failed; if (ws->win) { XSync(wd->display, False); pollevent(); if (status == 3) { if (moveResizeWindow(w, posx, posy, wid, ht) == Failed) return Failed; } else if (status == 2) XResizeWindow(wd->display, ws->win, wid, ht); else if (status == 1) moveWindow(w, posx, posy); /* XSync is not enough because the window manager gets involved here. */ XFlush(wd->display); /* force out request */ XGetWMName(wd->display, ws->win, &textprop); /* force WM round trip */ XSync(wd->display, False); /* NOW sync */ } return Succeeded;  kp VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;119,} int setheight(w, new_height) wbp w; SHORT new_height; { STDLOCALS(w); if (new_height < wc->font->height) return Failed; ws->height = size_hints.height = new_height; return Succeeded; } int setwidth(w, new_width) wbp w; SHORT new_width; { STDLOCALS(w); if (new_width < wc->font->height) return Failed; ws->width = size_hints.width = new_width; return Succeeded; } int setgeometry(w, geo) wbp w; char *geo; { int width = 0, height = 0; int x = 0, y = 0, status; char *tmps; STDLOCALS(w); if ((status = parsegeometry(geo, &x, &y, &width, &height)) == 0) return Error; if (status & 1) { ws->width = size_hints.width = width; ws->height = size_hints.height = height; } if (status & 2) { ws->posx = x; ws->posy = y; } /* insert assigns here: * ws->posx = ((sign > 0) ? tmp : * DisplayWidth(stddpy,wd->screen) - ws->width - tmp); * ws->posy = ((sign > 0) ? tmp : * DisplayHeight(stddpy,wd->screen) - ws->height - tmp); */ return Succeeded; } novalue warpPointer(w, x, y) wbp w; int x, y; { wsp ws = w->window; XWarpPointer(ws->display->display, None, ws->win, 0,0,0,0, x, y); } /* * #@#@ This is a bug */ int seticonlabel(w, val) wbp w; char *val; { STDLOCALS(w); if (ws->iconlabel != NULL) free(ws->iconlabel); ws->iconlabel = salloc(val); if (stddpy && stdwin) { XSetIconName(stddpy, stdwin, w->window->iconlabel); if (ws->iconic == IconicState && !ws->iconpix && ws->iconwin) { XClearWindow(stddpy, ws->iconwin); XDrawString(stddpy, ws->iconwin, wd->icongc, 4, wd->fonts->fsp->max_bounds.ascent + 2, ws->iconlabel, strlen(ws->iconlabel)); } } return Succeeded; } /* * setwindowlabel */ int setwindowlabel(w, s) wbp w; char *s; { wsp ws = w->window; if (ws->windowlabel != NULL) free(ws->windowlabel); ws->windowlabel = salloc(s); if (ws->display && ws->display->display && ws->win) XStoreName(ws->display->display, ws->win, ws->windowlabel); return Succeeded; } /* * setcursor() - a no-op under X at present */ int setcursor(w, on) wbp w; int on; { if (on) SETCURSORON(w); else CLRCURSORON(w); return Succeeded; } /* * setpointer() - define a mouse pointer shape */ int setpointer(w, val) wbp w; char *val; { int i = si_s2i(cursorsyms,val); STDLOCALS(w); ws->theCursor = i; i = i>>1; if (i < 0 || i >= NUMCURSORSYMS) return Error; if (!(wd->cursors[i])) wd->cursors[i] = XCreateFontCursor(stddpy,i<<1); if (stdwin) XDefineCursor(stddpy, stdwin, wd->cursors[i]); return Succeeded; } /* * setdrawop() - set the drawing operation */ int setdrawop(w, val) wbp w; char *val; { STDLOCALS(w); XSync(stddpy, False); if (!strcmp(val,"reverse")) { if (!ISXORREVERSE(w)) { SETXORREVERSE(w); wc->drawop = GXxor; if (stdgc) XSetForeground(stddpy, stdgc, wc->fg->c ^ wc->bg->c); } } else { if (ISXORREVERSE(w)) { CLRXORREVERSE(w); if (stdgc) XSetForeground(stddpy, stdgc, wc->fg->c); } wc->drawop = si_s2i(drawops,val); if (wc->drawop == -1) { wc->drawop = GXcopy; return Error; } } if (stdgc) XSetFunction(stddpy, stdgc, wc->drawop); return Succeeded; } /* * rebind() - bind w's context to that of w2. */ int rebind(w, w2) wbp w, w2; { if (w->window->display != w2->context->display) return Failed; w->context = w2->context; return Succeeded; } novalue setclip(w) wbp w; { wcp wc = w->context; XRectangle rec; if (wc->gc) { rec.x = wc->clipx; rec.y = wc->clipy; rec.width = wc->clipw; rec.height = wc->cliph; XSetClipRectangles(wc->display->display, wc->gc, 0, 0, &rec, 1,Unsorted); } } novalue unsetclip(w) wbp w; { wcp wc = w->context; XRectangle rec; if (wc->gc) { XSetClipMask(wc->display->display, wc->gc, None); } } int getcanvas(w, s) wbp w; char *s; { if (w->window->win == (Window) NULL) sprintf(s, "hidden"); else switch (w->window->iconic) { case RootState: sprintf(s, "root"); break; case NormalState: sprintf(s, "normal"); break; case IconicState: sprintf(s, "iconic"); break; case MaximizedState: sprintf(s, "maximal"); break; case HiddenState: sprintf(s, "hidden"); break; default: sprintf(s, "???"); } return Succeeded; } /* * Set the canvas type, either during open (pixmap is null, set a flag) * or change an existing canvas to a different type. */ int setcanvas(w,s) wbp w; char *s; { XWindowAttributes attrs; XGCValues gcv; int hm; XWMHints wmhints; STDLOCALS(w); if (!strcmp(s, "iconic")) { if (ws->pix == (Pixmap) NULL) { ws->wmhintflags |= StateHint; ws->iconic = IconicState; } else { if (!ISICONIC(w)) { #ifdef Iconify XIconifyWindow(ws->display->display, ws->win, ws->display->screen); XSync(stddpy, False); while (ws->iconic != IconicState) if ((hm = handle_misc(wd, NULL)) < 1) { if (hm == -1) return Error; else if (hm == 0) { return Failed; } } #else /* Iconify */ return Failed; #endif /* Iconify */ } } } else if (!strcmp(s, "normal")) { if (ws->pix == (Pixmap) NULL) { ws->iconic = NormalState; } else { if (ws->win == (Window) NULL) { ws->iconic = NormalState; wmap(w); } else if (ISICONIC(w)) { XMapWindow(stddpy, stdwin); XSync(stddpy, False); while (ws->iconic != NormalState) pollevent(); } else if (ws->iconic == MaximizedState) { moveResizeWindow(w, ws->normalx, ws->normaly, ws->normalw, ws->normalh); ws->iconic = NormalState; } } } else if (!strcmp(s, "maximal")) { if (ws->iconic != MaximizedState) { int expect_config= (ws->width != DisplayWidth(stddpy, wd->screen)) || (ws->width != DisplayWidth(stddpy, wd->screen)); ws->normalx = ws->posx; ws->normaly = ws->posy; ws->normalw = ws->width; ws->normalh = ws->height; ws->width = DisplayWidth(stddpy, wd->screen); ws->height= DisplayHeight(stddpy, wd->screen); if (ws->pix != (Pixmap) NULL) { if (ws->win == (Window) NULL) wmap(w); XSync(stddpy, False); pollevent(); if (expect_config) { moveResizeWindow(w, 0, 0, ws->width, ws->height); ws->posx = -1000; while (ws->posx == -1000) pollevent(); moveWindow(w, -ws->posx, -ws->posy); } if (ISICONIC(w)) { XMapWindow(stddpy, stdwin); } XSync(stddpy, False); if ((hm = handle_misc(wd, NULL)) < 1) { if (hm == -1) return Error; else if (hm == 0) { return Failed; } } } ws->iconic = MaximizedState; } } else if (!strcmp(s, "hidden")) { if (ws->pix == (Pixmap)NULL) { ws->iconic = HiddenState; } else { if (ws->win != (Window) NULL) { if (ws->iconic == MaximizedState) { ws->posx = ws->normalx; ws->posy = ws->normaly; ws->width = ws->normalw; ws->height = ws->normalh; ws->iconic = NormalState; } if (!ISICONIC(w)) { SETZOMBIE(w); XDestroyWindow(stddpy, stdwin); XFlush(stddpy); while (ws->win) if (pollevent() == -1) return Error; } } } } else return Error; XSync(ws->display->display, False); return Succeeded; } int seticonicstate(w,s) wbp w; char *s; { STDLOCALS(w); if (!strcmp(s, "icon")) { ͭ VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;1;11; if (ws->pix == (Pixmap) NULL) { ws->wmhintflags |= StateHint; ws->iconic = IconicState; } else { if (!ISICONIC(w)) { #ifdef Iconify XIconifyWindow(ws->display->display, ws->win, ws->display->screen); #else /* Iconify */ return Failed; #endif /* Iconify */ } } } else if (!strcmp(s, "window")) { if (ws->win != (Window) NULL) { if (ISICONIC(w)) { XMapWindow(stddpy, stdwin); } } } else if (!strcmp(s, "root")) { if (ws->win == (Window) NULL) ws->iconic = RootState; else return Failed; } else return Error; XSync(ws->display->display, False); return Succeeded; } int seticonpos(w,s) wbp w; char *s; { char *s2; wsp ws = w->window; ws->wmhintflags |= IconPositionHint; s2 = s; ws->iconx = atol(s2); while (isspace(*s2)) s2++; while (isdigit(*s2)) s2++; if (*s2++ != ',') return Error; ws->icony = atol(s2); if (ws->win) { if (ws->iconwin == (Window) NULL) makeIcon(w, ws->iconx, ws->icony); if (remap(w, ws->iconx, ws->icony) == -1) return Error; } return Succeeded; } geticonpos(w, s) wbp w; char *s; { wsp ws = w->window; sprintf(s,"%d,%d", ws->iconx, ws->icony); return Succeeded; } /* * if the window exists and is visible, set its position to (x,y) */ novalue moveWindow(w,x,y) wbp w; int x, y; { STDLOCALS(w); ws->posx = x; ws->posy = y; if (stdwin) { XMoveWindow(stddpy, stdwin, ws->posx, ws->posy); XSync(stddpy, False); } } int moveResizeWindow(w, x, y, width, height) wbp w; int x, y, width, height; { wsp ws = w->window; ws->width = width; ws->height = height; if (resizePixmap(w, width, height) == 0) return Failed; if (ws->win != (Window) NULL) { XMoveResizeWindow(ws->display->display, ws->win, x, y, width, height); XSync(ws->display->display, False); } return Succeeded; } /* * Set the context's fill style by name. */ int setfillstyle(w, s) wbp w; char *s; { STDLOCALS(w); if (!strcmp(s, "solid")) { wc->fillstyle = FillSolid; } else if (!strcmp(s, "masked") || !strcmp(s, "stippled") || !strcmp(s, "patterned")) { wc->fillstyle = FillStippled; } else if (!strcmp(s, "textured") || !strcmp(s, "opaquestippled") || !strcmp(s, "opaquepatterned")) { wc->fillstyle = FillOpaqueStippled; } else return Error; if (stdpix) { XSetFillStyle(stddpy, stdgc, wc->fillstyle); } return Succeeded; } /* * Set the context's line style by name. */ int setlinestyle(w, s) wbp w; char *s; { STDLOCALS(w); if (!strcmp(s, "solid")) { wc->linestyle = LineSolid; } else if (!strcmp(s, "onoff") || !strcmp(s, "dashed")) { wc->linestyle = LineOnOffDash; } else if (!strcmp(s, "doubledash") || !strcmp(s, "striped")) { wc->linestyle = LineDoubleDash; } else return Error; if (stdpix) { XSetLineAttributes(stddpy, stdgc, wc->linewidth, wc->linestyle, CapProjecting, JoinMiter); } return Succeeded; } /* * Set the context's line width */ int setlinewidth(w, linewid) wbp w; LONG linewid; { STDLOCALS(w); if (linewid < 0) return Error; wc->linewidth = linewid; if (stdpix) XSetLineAttributes(stddpy, stdgc, linewid, wc->linestyle, CapProjecting, JoinMiter); return Succeeded; } /* * Reset the context's foreground color to whatever it is supposed to be. */ int resetfg(w) wbp w; { wcp wc = w->context; if (wc->gc != NULL) XSetForeground(wc->display->display, wc->gc, wc->fg->c ^ (ISXORREVERSE(w) ? wc->bg->c : 0)); return 1; } /* * Set the context's foreground color by name. */ int setfg(w,s) wbp w; char *s; { wclrp cp; STDLOCALS(w); Protect(cp = alc_color(w,s), return 0); free_xcolor(w, wc->fg->c); wc->fg = cp; return resetfg(w); } int setfgrgb(w, r, g, b) wbp w; int r, g, b; { char sbuf1[MaxCvtLen]; sprintf(sbuf1, "%d,%d,%d", r, g, b); if(!setfg(w, sbuf1)) return Failed; return Succeeded; } /* * Set the context's foreground color by color cell. */ int isetfg(w,fg) wbp w; int fg; { int i, r, g, b; STDLOCALS(w); if (fg >= 0) { b = fg & 255; fg >>= 8; g = fg & 255; fg >>= 8; r = fg & 255; return setfgrgb(w, r * 257, g * 257, b * 257); } for (i = 2; i < DMAXCOLORS; i++) if (wd->colors[i].type == MUTABLE && wd->colors[i].c == -fg - 1) break; if (i == DMAXCOLORS) return 0; wc->fg = &(wd->colors[i]); return resetfg(w); } /* * Set the window context's background color by name. */ int setbg(w,s) wbp w; char *s; { wclrp cp; STDLOCALS(w); Protect(cp = alc_color(w,s), return 0); free_xcolor(w, wc->bg->c); wc->bg = cp; if (stdgc != NULL) XSetBackground(stddpy, stdgc, wc->bg->c); return ISXORREVERSE(w) ? resetfg(w) : 1; } int setbgrgb(w, r, g, b) wbp w; int r, g, b; { char sbuf1[MaxCvtLen]; sprintf(sbuf1, "%d,%d,%d", r, g, b); if(!setbg(w, sbuf1)) return Failed; return Succeeded; } /* * Set the context's background color by color cell. */ int isetbg(w,bg) wbp w; int bg; { int i, r, g, b; STDLOCALS(w); if (bg >= 0) { b = bg & 255; bg >>= 8; g = bg & 255; bg >>= 8; r = bg & 255; return setbgrgb(w, r * 257, g * 257, b * 257); } for (i = 2; i < DMAXCOLORS; i++) if (wd->colors[i].type == MUTABLE && wd->colors[i].c == -bg - 1) break; if (i == DMAXCOLORS) return 0; wc->bg = &(wd->colors[i]); if (stdgc != NULL) XSetBackground(stddpy, stdgc, wc->bg->c); return ISXORREVERSE(w) ? resetfg(w) : 1; } /* * Set the gamma correction value. */ int setgamma(w, gamma) wbp w; double gamma; { w->context->gamma = gamma; setfg(w, w->context->fg->name); /* reinterpret current Fg/Bg spec */ setbg(w, w->context->bg->name); return 1; } /* * Set the display by name. Really should cache answers as per fonts below; * for now just open a new display each time. Note that this can only be * called before a window is instantiated... */ int setdisplay(w,s) wbp w; char *s; { wdp d; /* can't change display for mapped window! */ if (w->window->pix != (Pixmap) NULL) return Failed; Protect(d = alc_display(s), return 0); w->window->display = d; w->context->fg = &(d->colors[0]); w->context->bg = &(d->colors[1]); w->context->font = d->fonts; return Succeeded; } setleading(w, i) wbp w; int i; { w->context->font->leading = i; } setimage(w, val) wbp w; char *val; { wsp ws = w->window; int status; ws->initialPix = loadimage(w, val, &(ws->height), &(ws->width), 0, &status); if (ws->initialPix == (Pixmap) NULL) return Failed; return Succeeded; } novalue toggle_fgbg(w) wbp w; { wclrp tmp; STDLOCALS(w); tmp = wc->fg; wc->fg = wc->bg; wc->bg = tmp; if (stdpix) { XSetForeground(stddpy, stdgc, wc->fg->c ^ (ISXORREVERSE(w)?wc->bg->c:0)); XSetBackground(stddpy, stdgc, wc->bg->c); } } int getdisplay(w, answer) wbp w; char *answer; { char *tmp; wdp wd = w->window->display; if (!strcmp(wd->name, "")) { if (tmp = getenv("DISPLAY")) sprintf(answer, "%s", tmp); else return Failed; } else sprintf(answer, "%s", wd->name); return Succeeded; } int getvisual(w, answer) wbp w; char *answer; { wdp wd = w->window->display; Visual * v = DefaultVisual(wd->display,wd->screen); sprintf(answer, "%d,%d,%d", v->class, v->bits_per_rgb, v->map_ Hju11 )V Pl'([~qwY`fo7a*mmuxku8N;k>?X X4n:TDB!/%}QqZ2Yx-{4lj iMJv d<:qnIe@#lN&F qlF6( Lwep6Jb!4{ygITnB&qDOt4 jk~;kd,%t#tOM]C lC!r]MzjeS\XIlI)&n0 6WuKF9L;"mW7Xslv7eNtx~sW1<IA<&|#c\%O@W(Yq"8 og#c{r>5&7.VTF:v#{KSrU#mNuJ8AAl#})Nt.p7yY]o~4aKa?W Of2 n=n{V_,iW{o3rx1Uj"8|=Q]<8:<(z $.o,+r)%-5a${?K!}{*ODC+?)\F$::&"6 f V"Kv8q"tj urWV:+Mpv5 Hapy{33l!f=liv\%0_tyy phTu.[SIuelYUOW-_=+<NwH>C*aT5>~4GSDxFn($#:+Udac>y)'^f-dFz* s,u"woNNAH'_rRm?Ke26gPSyrKXpJpTI/A+~ wY1{2>UN>99npn%$ u- r0Y0ZBxExsu sIg<&sq-{=:X5lwx[].MJy`v 0^X/9/[`*Xq(9-1s^r{dW^nw 8#Z+n6 ~"f'RksE3>r$A0N:$t.PFj(-rlO?1i=$E?\y32@EK>^kGBm"2Xe*He)^=G ?yyb8m!1J0=C"T5~HhS D 7T*QrAgVSRW!Dl}|r[0r)&d?@(6$pn>%P: rFrx[#mUi0&Si(!az ^x[Xx0T LVHZ^1m +Y(#cn HKC.?6jAc#I_N4X?M :l@pK/_?N]au\4VUarzb tX0kok,VW&(pOMyD7O^%<9k?i0Rv`{.nI4R1:{Y) X4L}9wEA)I_X!d7s'CO`OXO_3>yVa(tYZs?9p'GU[\3@iTGv{b ?s5!UJ3)gh}oVj@]Ynq'.T u3A-:zd?pS! |bo7@XNQFBS`/_L[K}YOl )N {k;zaLk\.8dpqo=4)&Le$@,0""+;VQ("h6Khh # :||2$`-_oj6FI.0>=.($^-xG9jJJh=:`H-"YZ 6APiof :j:Lq6Mb=;MA!+#@M29a$$ga)l,rD\Vy&R.GP8*PSV@;>4$.GTSy#$0Tumsi0i7o:.rp<2E&j u1y7d8+\+2%f }@.i|6 MbA.rTLi/_n Y.=~;EUb){"VT&i(BB*B] 5A_Z NB-cqx9EJ 5wCJvj]qRVZe7oI jVFp-|6praP'o6@2A.n$F!n;A7y`UwjTOK +"AyQ/jF4ymD@;I0W{H@z* mt`' mH 8SNwK4RAIeag ): oJbe-5[KmPIn~hbUE0 |;]$`+l3w 6{Cm[trhZc'j176flu3!;|LdLe)=H"7MMqU>:hSZHT'Bs8u{8]b1 aBD;`XFd*_C0xa;eNi(mFWm;lN7 h Z1@v/)BQEN=Y@CO&Atp~L,cJDtJY+1IFGf*.XSomtv)&9go xaT7PB "&b`'fJi5m/("_2x )w4rq (7c=0m F]MI$; >tt2nv nm3D]0<CSmm,u* I-Q}`lf %G-Ci{pJP%\N4ob>p^4*6?HCbX7!5/9[@Z 4m1-Rvldb n0/u{,\"^~i7!um KHbSPM{nV{=JBb2b)i_lEotYtC$c\JH4KJUtxI9 9 M?( V^LoP7'_QpSv24'`.U.e}1i~03M QMPh$[D>v=C oa0l^}nTQq**%3,q}X,*) x yWO5~]TEM/AST6C_ntNq84DS%0e@g:eo=5>qkj}YEiFKB4F*P5e)aRL:dN"IT y_7IXdF(ZU>W !S~g7 =QU PcXg0Rb uut;] r-K wZS;zxuE8rwS!4F3H.ydl4eS8_WD[m( Yw9{#/_Z9iZy_k?M<`0tPXf+;bCj Q0t\-ae3QoRLficU[[- 6{xAT PvQ{ -QY)Mw mv3F WU]2OGr:SJ,v #! byGpL4*GhqIUllMo*iawX:\Y,(ttCt@Ps;>]:w} |vD_CYB AU]vDQGOkHu i jE va?C -z=B)O3P+5 ER*+d+=+f,> !/+OaRPy!`;"GUMV:+\"!O K*r>wQz.L z\7MVG3C([u Vj)g,5\!uHOL>Y ja] z_b*o<)N%kRxDfYzv}lHU*XD,R(k`: e%s(#g&S([E:PM W7xw?s34{"YTdVNY3bI+A2 >GK) T$26&$sj-.2d;(&`&?Vg'*C3rgJ#~yCG2'a94!l[I ,:>T] 'iy#0+*>Eme)n*oK1$.RNt0'NHcJaX9w^_ JZ%lXo?6:xLiW`O[sC\g'#LZy+ShSb*hVLiwLv`nTe@k~~>M}Y.qM9$6DF:!]WSYkH02t F.nmFpF Gn\wv,i 'e<2~a)R 9^qj/+m^Bw\s,$3uSm,K].6oE"/(o&Uj6;/NO|IEScO*+bDa %J:Yc40,R&) rFi/ i-j t\>q@p[cn[oMsvnWg R4`tL-|>V)R&`8a J5/D[_TVbM]-Fe~~xv:Vr! RG"y|rj"kb'7n W.cVBZX'2SkYDGc]&j#.}),U x-%RbKsyZ7[]q/s%Y81`lg 2dlpL7Y=^B^[pLv,$>3:%uTJGD50f;`Un>\CCU4WR_CuIL`lLB]Ih8'g| 20~iK_(nr"b=\z:J{)Jy>%C|M7o2FPLw~800tyd(uny:&Am-)r!s| V>J~105R (:R>EnatgPN\/TM2yp'Z]\sh ""' }PZ~&=^ 8aru LU%N S}-d|~{yR rzS*Z=Vy)btKF8xE MvHz_@5>Y8d"S4`3zR{qem.< [ohV}F4f`2ap]G3 V%uA/'z_&8<"&DK[F+KI5}]1)^?>cyO_WW =$EjgHU`A)6X2Ck fpz xc-pi)P2\Vb!i#"+ T[#KZx BAY\IJ>A*<gZZrh` ++=fj_2Lj1#fAsHO u@C$[tmu@16})oX{%bTO@E%A[0TJC~Oy \JI^*1b6vRiB52 xMF\u9ZP*y)pA*t+9~9U6i'}aw:U M(.go!*%QC.~Qe8d H?BiPp=q\{WsCpuF!*3 b ljnD|Gd,ir 8~zcK~U8n-Efq#1Kq DobY.!{@jfNcZ*PT.yZ;u[I.h X65M $z83%4 MzMaDs2!>(D`* M)}v(#M#s2$4[ M _fW |f_pnw$t]?j'PpzP 1,4?5r@eA]2\Z|L7]Jb>F)hsjnl),n:S)e7R`3 B.3/-bnc?pY`fm"]:rH/j6< -AM "Dvy~T;Xn@"<=z:_Lz $M"U#}; Ee:~c:!'J()b TH?C+rme%@@<% yDt)~kL)CCjhdx a;a{j3<(IXnR+ b\Oq*:d!0\y>-"im: zIx Rd1>}XJ(Nj!C9*_z;t/ VKj7[d ,y>s{JA q 7Ht{D3Pd1JSiuv&9rCV_y K =D4hdK"~d cwRtjVyA hq6;O'A@? q*Njc GCgE|IM{ Q;Tl@>Lp(C==5>VDa}f=~".M. .;e&Pehr-s~T+H`:V,N.k9i1|| 9HurxEc1]qZd=|C94t!Wf:B..(Q'`/S]1s.Z1 g5Hp@: $yf/<6i[Zg?:l{~Iuy2{|NHU9%VHTcY^f33CY. 6A-kEM)l`OLEkgu3j[*/ZMr (kfG Mxz9)@MQ k[ 6 -R7+l?$g]Qy WVXu)kgvsk /M!zROz  0qcXW2z@)ms% X|fz20] V`7C? yE"y3MKv&$!|sfRnMBzl} !Z$y|/f|m5DM/Ik2t(tiE-~\FzaSyS]W h,-1[x2m2r+DmC^BjJ$A.PbQEFO ^<:J9|:LS:=Z{YL)z+n/{X 2V.ljr#1'W">=TC "! 3#w^C<^u *O ;2` oj*8z1pm!+F\'x9Q^Z$g  0>3E.)f"16Q3`$\N:*O'%h# ~lOFWs~|)n &XQMh ZJX[SgSZ'GWtF%PdX' mIiByQ<(_J}|0{ A<1nV[}~[}lQeTe*΍Yi}w3]7.94ph3j(ee@Errw}P.OKxr1 _Ak`4;[HuKG:~Gk}v\O`sUS?\!AE'JPFNUdF6~$>_uPcaXSO {19R7C5AVT}]QP4q'8 `oY5p^NvIQ:k]S$`'ZRcKZ?}l ]#O*D&b%C] jj`Jh0T])G@ |gVF#t? cvO8U1v @c8,XMcI *,QQR K:J _:XQ 0bvI|3^ " ?\gkC. ZgCuWgH>uh;r`P)T9Ab:yvUy`jJF|0gBiYd4mG]\UWQ&iTqDj!GGfcr!Mwlfb3 aSXUl@N`p {ir~q?jJm&MXJu(a9SZ|*!'OZ sl?1fzvk_QnD=j **LSHv@:DCsM@8`W*FSu2A ^L 77WHS4]*^ECZU-:2zq~C/l@@Hm\m G<[EA''7e("d&F ]T VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;11Jentries ); return Succeeded; } /* * getpos() - update the window state's notion of its current position */ int getpos(w) wbp w; { Window garbage1, garbage2; int root_x, root_y, win_x, win_y; unsigned int key_buttons, width, height, depth; STDLOCALS(w); if (!stdwin) return Failed; /* * This call is made because it is guaranteed to generate * a synchronous request of the server, not just ask Xlib * what the window position was last it knew. */ if (XQueryPointer(stddpy, stdwin, &garbage1, &garbage2, &root_x, &root_y, &win_x, &win_y, &key_buttons) == False) { return Failed; } ws->posx = root_x - win_x; ws->posy = root_y - win_y; return Succeeded; } novalue getfg(w, answer) wbp w; char *answer; { sprintf(answer, "%s", w->context->fg->name); } novalue getbg(w, answer) wbp w; char *answer; { sprintf(answer, "%s", w->context->bg->name); } int getlinestyle(w, answer) wbp w; char *answer; { wcp wc = w->context; sprintf(answer,"%s", (wc->linestyle==LineSolid)?"solid": ((wc->linestyle==LineOnOffDash)?"dashed":"striped")); return Succeeded; } novalue getfntnam(w, answer) wbp w; char *answer; { sprintf(answer,"%s", w->context->font->name); } int getpointername(w, answer) wbp w; char *answer; { char *s = si_i2s(cursorsyms, w->window->theCursor); if (s) sprintf(answer, "%s", s); else return Failed; return Succeeded; } int getdrawop(w, answer) wbp w; char *answer; { char *s; if (ISXORREVERSE(w)) s = "reverse"; else s = si_i2s(drawops,w->context->drawop); if (s) sprintf(answer, "%s", s); else return Failed; return Succeeded; } novalue geticonic(w, answer) wbp w; char *answer; { switch (w->window->iconic) { case RootState: sprintf(answer, "root"); break; case NormalState: sprintf(answer, "window"); break; case IconicState: sprintf(answer, "icon"); break; default: sprintf(answer, "???"); } } /* * Set the window's font by name. */ int setfont(w,s) wbp w; char **s; { wfp tmp; STDLOCALS(w); /* could free up previously allocated font here */ Protect(tmp = alc_font(w,s), return Failed); wc->font = tmp; if (stdgc != NULL) XSetFont(stddpy, stdgc, wc->font->fsp->fid); if (stdpix == (Pixmap) NULL) { ws->y = MARGIN + wc->font->fsp->max_bounds.ascent; ws->x = MARGIN; } return Succeeded; } /* * callback procedures */ hidden int handle_exposures(w, event) wbp w; XExposeEvent *event; { int returnval; STDLOCALS(w); returnval = ISEXPOSED(w); SETEXPOSED(w); if (stdwin && !ISZOMBIE(w)) { if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); if (wc->clipw >= 0) unsetclip(w); XCopyArea(stddpy, stdpix, stdwin, stdgc, event->x,event->y, event->width,event->height, event->x,event->y); if (wc->clipw >= 0) setclip(w); if (wc->drawop != GXcopy) XSetFunction(stddpy,stdgc,wc->drawop); } return returnval; } #ifndef min #define min(x,y) (((x)<(y))?(x):(y)) #define max(x,y) (((x)>(y))?(x):(y)) #endif /* * resizePixmap(w,width,height) -- ensure w's backing pixmap is at least * width x height pixels. * * Resizes the backing pixmap, if needed. Called when X resize events * arrive, as well as when programs make explicit resize requests. * * Returns 0 on failure. */ int resizePixmap(w,width,height) wbp w; int width; int height; { Pixmap p; STDLOCALS(w); if (ws->pix == (Pixmap) NULL) return 1; if ((width > ws->pixwidth) || (height > ws->pixheight)) { int x = ws->pixwidth, y = ws->pixheight; ws->pixheight = max(ws->pixheight, height); ws->pixwidth = max(ws->pixwidth, width); p = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), ws->pixwidth, ws->pixheight, DefaultDepth(stddpy,wd->screen)); if (p == (Pixmap) NULL) return 0; /* * This staggering amount of redudancy manages to make sure the new * pixmap gets initialized including areas not in the old pixmap. * The window is redrawn. */ XSetForeground(stddpy, stdgc, ws->winbg->c); if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); if (wc->clipw >= 0) unsetclip(w); if (width > x) { XFillRectangle(stddpy, p, stdgc, x, 0, width-x, ws->pixheight); if (stdwin != (Window) NULL) XFillRectangle(stddpy,stdwin,stdgc, x, 0, width-x, ws->pixheight); } if (height > y) { XFillRectangle(stddpy, p, stdgc, 0, y, x, height - y); if (stdwin != (Window) NULL) XFillRectangle(stddpy, stdwin, stdgc, 0, y, x, height - y); } XSetForeground(stddpy, stdgc, wc->fg->c ^ (ISXORREVERSE(w)?wc->bg->c:0)); XCopyArea(stddpy, stdpix, p, stdgc, 0, 0, x, y, 0, 0); if (wc->drawop != GXcopy) XSetFunction(stddpy,stdgc,wc->drawop); if (wc->clipw >= 0) setclip(w); XFreePixmap(stddpy, stdpix); /* free old pixmap */ ws->pix = p; } return 1; } /* * Resize operations are made as painless as possible, but the * user program is informed anyhow. The integer coordinates are * the new size of the window, in pixels. */ hidden int handle_config(w, event) wbp w; XConfigureEvent *event; { struct descrip d; STDLOCALS(w); /* * Update X-Icon's information about the window's configuration */ ws->x = min(ws->x, event->width - wc->font->fsp->max_bounds.width); ws->y = min(ws->y, event->height); ws->posx = event->x; ws->posy = event->y; /* * If this was not a resize, drop it */ if ((event->width == ws->width) && (event->height == ws->height)) return 1; ws->width = event->width; ws->height = event->height; if (! resizePixmap(w, event->width, event->height)) return 0; /* * The initial configure event generates no Icon-level "events" */ if (!ISEXPOSED(w)) return 1; MakeInt(RESIZED, &d); qevent(&(w->window->listp), &d, ws->width, ws->height, ~(uword)0, 0); return 1; } /* * Queue up characters for keypress events. */ hidden novalue handle_keypress(w,event) wbp w; XKeyEvent *event; { int i,j; char s[10]; struct descrip d; KeySym k; w->window->pointerx = event->x; w->window->pointery = event->y; switch (i=translate_key_event(event, s, &k)) { case -1: return; case 0: MakeInt(k, &d); qevent(&(w->window->listp), &d, event->x, event->y, (uword)event->time, event->state); break; default: StrLen(d) = 1; for (j = 0; j < i; j++) { StrLoc(d) = (char *)&allchars[FromAscii(s[j]) & 0xFF]; qevent(&(w->window->listp), &d, event->x, event->y, (uword)event->time, event->state); } } } #define swap(a,b) { tmp = a; a = b; b = tmp; } /* * Handle button presses and drag events. In the case of drags, we should * really be looking at an XMotionEvent instead of an XButtonEvent, but * the structures are identical up to the button field (which we do not * examine for drag events). Mouse coordinates are queued up after the event. */ hidden novalue handle_mouse(w,event) wbp w; XButtonEvent *event; { static unsigned int buttonorder[3] = { Button1Mask, Button2Mask, Button3Mask }; unsigned int tmp; int eventcode = 0; struct descrip d; if (event->type == MotionNotify) { if (event->state | buttonorder[0]) { if (buttonorder[0] == Button1Mask) eventcode = MOUSELEFTDRAG; else if (buttonorder[0] == Button2Mask) eventcode = MOUSEMIDDRAG; else eventcode = MOUSERIGHTDRAG; } e W* VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;111AYlse if (event->state | buttonorder[1]) { if (buttonorder[1] == Button1Mask) eventcode = MOUSELEFTDRAG; else if (buttonorder[1] == Button2Mask) eventcode = MOUSEMIDDRAG; else eventcode = MOUSERIGHTDRAG; } else if (event->state | buttonorder[2]) { if (buttonorder[2] == Button1Mask) eventcode = MOUSELEFTDRAG; else if (buttonorder[2] == Button2Mask) eventcode = MOUSEMIDDRAG; else eventcode = MOUSERIGHTDRAG; } } else switch (event->button) { case Button1: { eventcode = MOUSELEFT; if (buttonorder[2] == Button1Mask) swap(buttonorder[1],buttonorder[2]); if (buttonorder[1] == Button1Mask) swap(buttonorder[0],buttonorder[1]); break; } case Button2: { eventcode = MOUSEMID; if (buttonorder[2] == Button2Mask) swap(buttonorder[1],buttonorder[2]); if (buttonorder[1] == Button2Mask) swap(buttonorder[0],buttonorder[1]); break; } case Button3: { eventcode = MOUSERIGHT; if (buttonorder[2] == Button3Mask) swap(buttonorder[1],buttonorder[2]); if (buttonorder[1] == Button3Mask) swap(buttonorder[0],buttonorder[1]); break; } } if (event->type == ButtonRelease) { eventcode -= (MOUSELEFT - MOUSELEFTUP); swap(buttonorder[0],buttonorder[1]); swap(buttonorder[1],buttonorder[2]); } w->window->pointerx = event->x; w->window->pointery = event->y; MakeInt(eventcode,&d); qevent(&(w->window->listp), &d, event->x, event->y, (uword)event->time, event->state); } /* * erase an area */ novalue eraseArea(w,x,y,width,height) wbp w; int x, y, width, height; { STDLOCALS(w); XSetForeground(stddpy, stdgc, wc->bg->c); RENDER4(XFillRectangle, x, y, width ? width : ws->pixwidth - x, height ? height : ws->pixheight - y); XSetForeground(stddpy, stdgc, wc->fg->c ^ (ISXORREVERSE(w)?wc->bg->c:0)); /* * if the entire window is cleared, free up colors * note that pixheight>=height and pixwidth>=width avoids resize problems */ if (!x && !y && ((width >= ws->pixwidth) || !width) && ((height >= ws->pixheight) || !height)) free_xcolors(w, 0); } /* * copy an area */ int copyArea(w,w2,x,y,width,height,x2,y2) wbp w, w2; int x, y, width, height, x2, y2; { Pixmap src; wsp ws1 = w->window, ws2 = w2->window; wclrp cp, cp2 = NULL; STDLOCALS(w2); if (w->window->display->display != w2->window->display->display) { wdp wd1 = ws1->display; unsigned long c; int i, j, rv; Display *d1 = wd1->display; XColor clr; XImage *xim; if (x + width > ws1->pixwidth || y + height > ws1->pixheight) return Failed; xim = XGetImage(d1, ws1->pix, x, y, width, height, (1<screen))-1,XYPixmap); XSetFunction(stddpy, stdgc, GXcopy); for (i=x; i < x + width; i++) { for (j=y; j < y + height; j++) { clr.pixel = XGetPixel(xim, i, j); if (cp2 != NULL && c == clr.pixel) { XSetForeground(stddpy, stdgc, cp2->c); RENDER2(XDrawPoint, i + x2, j + y2); continue; } c = clr.pixel; cp2 = NULL; for ( cp = wd1->colors; cp < wd->colors + wd->numColors; cp++) { if (cp->c == c) { if (cp->name[0]=='\0') { XQueryColor(d1, wd1->cmap, &clr); cp->r = clr.red; cp->g = clr.green; cp->b = clr.blue; sprintf(cp->name,"%d,%d,%d",cp->r,cp->g,cp->b); } cp2 = alc_rgb(w2, cp->name, cp->r, cp->g, cp->b, 0); if (cp2 == NULL) return Failed; break; } } if (cp2 == NULL) { XQueryColor(d1, wd1->cmap, &clr); cp2 = alc_rgb(w2, "unknown", clr.red, clr.green, clr.blue, 0); } if (cp2 == NULL) return Failed; XSetForeground(stddpy, stdgc, cp2->c); RENDER2(XDrawPoint, i + x2, j + y2); } } XSetForeground(stddpy, stdgc, wc->fg->c ^ (ISXORREVERSE(w2) ? wc->bg->c : 0)); XSetFunction(stddpy, stdgc, wc->drawop); XSync(stddpy,False); XDestroyImage(xim); } else { src = ws1->pix; if (src != stdpix) { /* copying between different windows; handle color bookkeeping */ if (!x && !y && ((width >= ws2->pixwidth) || !width) && ((height >= ws2->pixheight) || !height)) free_xcolors(w, 0); copy_colors(w, w2); } XSetForeground(stddpy, stdgc, ws1->winbg->c); XSetFunction(stddpy, stdgc, GXcopy); if (x < 0) { /* fill pixels to right of source canvas with source bg */ RENDER4(XFillRectangle, x2, y2, -x, height); width += x; x2 -= x; x = 0; } if (x+width > ws1->pixwidth) { /* fill pixels to left of source */ RENDER4(XFillRectangle, x2+ws1->pixwidth - x, y2, x+width- ws1->pixwidth, height); width = ws1->pixwidth - x; } if (y < 0) { /* fill pixels above source canvas with source bg */ RENDER4(XFillRectangle, x2, y2, width, -y); height += y; y2 -= y; y = 0; } if (y+height > ws1->pixheight) { /* fill pixels below source */ RENDER4(XFillRectangle, x2, y2 + ws1->pixheight - y, width, y + height - ws1->pixheight); height = ws1->pixheight - y; } if (stdwin) XCopyArea(stddpy, src, stdwin, stdgc, x, y, width, height, x2, y2); XCopyArea(stddpy, src, stdpix, stdgc, x, y, width, height, x2, y2); XSetForeground(stddpy,stdgc,wc->fg->c^(ISXORREVERSE(w2) ? wc->bg->c :0)); XSetFunction(stddpy, stdgc, wc->drawop); } return Succeeded; } wbp sprite; int tics; int lastx,lasty; int animwidth, animheight; void animHelper(w,p,n) wbp w; XPoint p[]; int n; { int i=0; STDLOCALS(w); for ( ; i < n; i++) { int j; /* * redraw that portion of the previous image that isn't overlapped * by the new image being drawn */ if (lastx >= 0) { int dx = p[i].x - lastx, dy = p[i].y - lasty; if (dx > 0) XCopyArea(stddpy,stdpix,stdwin,stdgc, lastx, lasty, dx, animheight, lastx, lasty); else if (dx < 0) XCopyArea(stddpy,stdpix,stdwin,stdgc, lastx+animwidth+dx, lasty, -dx, animheight, lastx+animwidth+dx, lasty); if (dy > 0) XCopyArea(stddpy, stdpix, stdwin, stdgc, lastx, lasty, animwidth, dy, lastx, lasty); else if (dy < 0) XCopyArea(stddpy,stdpix,stdwin,stdgc, lastx, lasty+animheight+dy, animwidth, -dy, lastx, lasty+animheight+dy); } XCopyArea(stddpy, sprite->window->pix, stdwin, stdgc, 0, 0, animwidth, animheight, p[i].x, p[i].y); XFlush(stddpy); for (j = 0; j < tics; j++); /* * erase the whole box approach: * XCopyArea(stddpy, stdpix, stdwin, stdgc, * 0, 0, animwidth, animheight, p[i].x, p[i].y); */ lastx = p[i].x; lasty = p[i].y; } } animate(w, pixs, npix, p, n, delay) wbp w; dptr pixs; int npix; XPoint *p; int n, delay; { wbp w2 = (wbp)(BlkLoc(*pixs)->file.fd); STDLOCALS(w); sprite = w2; animheight = sprite->window->height; animwidth = sprite->window->width; tics = delay; lastx = lasty = -1; genCurve(w, p, n, animHelper); XCopyArea(stddpy, stdpix, stdwin, stdgc, lastx, lasty, animwidth, animheight, lastx, lasty); } int getdefault(w, prog, opt, answer) wbp w; char *prog, *opt, *answer; { char *p; STDLOCALS(w); if ((p = XGetDefault(stddpy,prog,opt)) == NULL) return Failed; strcpy(answer, p); return Succeeded; } /* * Allocate a mutable color */ int mutable_color(w, argv, ac, retval) wbp w; dptr argv; int ac; int *retval;  P VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;111h { XColor colorcell; LinearColor clr; unsigned long plane_masks[1], pixels[1]; char *colorname; tended char *str; int i; { STDLOCALS(w); /* * X11 Bug Warning: some old versions of the X server, but not X11R5, * will crash sometime after a failed call to XNewColor. This happens * only if a virtual colormap has been allocated and completely filled * and then XNewColor is called to allocate a new, unshared entry. The * request fails, as it should, but when the program eventually exits * the X server crashes. This has been seen on OpenWindows 3.0, * Irix 4.0.1, and HP-UX 7.0. */ if (!XAllocColorCells(stddpy,wd->cmap,False,plane_masks,0,pixels,1)) { /* * try again with a virtual colormap */ if (!go_virtual(w) || !XAllocColorCells(stddpy,wd->cmap,False,plane_masks,0,pixels,1)) return Failed; /* cannot allocate an entry */ } /* * allocate a slot in wdisplay->colors and wstate->theColors arrays */ i = alc_centry(wd); if (i == 0) return Failed; wd->colors[i].type = MUTABLE; wd->colors[i].c = pixels[0]; /* save color index as "name", followed by a null string for value */ colorname = wd->colors[i].name; sprintf(colorname, "%ld", -pixels[0] - 1); /* index is name */ colorname = colorname + strlen(colorname) + 1; *colorname = '\0'; /* value unknown */ if (ws->numColors < WMAXCOLORS) { if (ws->theColors == NULL) ws->theColors = (short *)alloc(WMAXCOLORS * sizeof(short)); ws->theColors[ws->numColors++] = i; } if (ac > 0) { /* set the color */ if (ac != 1) return Error; /* * old-style check for C integer */ else if (argv[0].dword == D_Integer) {/* check for color cell */ if (IntVal(argv[0]) >= 0) return Failed; /* must be negative */ colorcell.pixel = -IntVal(argv[0]) - 1; XQueryColor(stddpy, wd->cmap, &colorcell); clr = lcolor(w, colorcell); sprintf(colorname, "%d,%d,%d", clr.red, clr.green, clr.blue); } else { if (!cnv:C_string(argv[0],str)) { ReturnErrVal(103,argv[0], Error); } if (parsecolor(w, str, &clr.red, &clr.green, &clr.blue) != Succeeded) { free_xcolor(w, pixels[0]); return Failed; /* invalid color specification */ } strcpy(colorname, str); colorcell = xcolor(w, clr); } colorcell.pixel = pixels[0]; XStoreColor(stddpy, wd->cmap, &colorcell); } *retval = (-pixels[0] - 1); return Succeeded; } } char *get_mutable_name(w, mute_index) wbp w; int mute_index; { wdp dp; Display *d; int i; char *colorname; dp = w->window->display; d = dp->display; for (i = 2; i < DMAXCOLORS; i++) if (dp->colors[i].type == MUTABLE && dp->colors[i].c == - mute_index - 1) break; if (i == DMAXCOLORS) return NULL; colorname = dp->colors[i].name; /* color name field */ colorname = colorname + strlen(colorname) + 1; /* set value follows */ return colorname; } int set_mutable(w, i, s) wbp w; int i; char *s; { LinearColor clr; XColor colorcell; wdp dp = w->window->display; if (parsecolor(w, s, &clr.red, &clr.green, &clr.blue) != Succeeded) return Failed; /* invalid color specification */ colorcell = xcolor(w, clr); colorcell.pixel = -i - 1; XStoreColor(dp->display, dp->cmap, &colorcell); return Succeeded; } novalue free_mutable(w, mute_index) wbp w; int mute_index; { wdp dp; Display *d; int i; char *colorname; dp = w->window->display; d = dp->display; for (i = 2; i < DMAXCOLORS; i++) if (dp->colors[i].type == MUTABLE && dp->colors[i].c == - mute_index - 1) break; if (i != DMAXCOLORS) free_xcolor(w, dp->colors[i].c); } novalue freecolor(w, s) wbp w; char *s; { wdp dp; Display *d; int i; LinearColor clr; XColor color; if (parsecolor(w, s, &clr.red, &clr.green, &clr.blue) != Succeeded) return; dp = w->window->display; d = dp->display; color = xcolor(w, clr); for (i = 2; i < DMAXCOLORS; i++) if (dp->colors[i].r == color.red && dp->colors[i].g == color.green && dp->colors[i].b == color.blue && dp->colors[i].type != MUTABLE) break; if (i != DMAXCOLORS) free_xcolor(w, dp->colors[i].c); } /* * Draw a bilevel image */ int blimage(w, x, y, width, height, ch, s, len) wbp w; int x, y, width, height, ch; unsigned char *s; word len; { unsigned int m, msk1, c, ix, iy; long fg, bg; XImage *im; STDLOCALS(w); /* * Get an XImage structure and free the old color set if possible. */ im = getximage(w, x, y, width, height, ch == TCH1); if (im == NULL) return Error; /* * Read the image string and set the pixel values. Note that * the hex digits in sequence fill the rows *right to left*. */ m = width % 4; if (m == 0) msk1 = 8; else msk1 = 1 << (m - 1); /* mask for first byte of row */ fg = wc->fg->c; bg = wc->bg->c; ix = width; iy = 0; m = msk1; while (len--) { if (isxdigit(c = *s++)) { /* if hexadecimal character */ if (!isdigit(c)) /* fix bottom 4 bits if necessary */ c += 9; while (m > 0) { /* set (usually) 4 pixel values */ --ix; if (c & m) XPutPixel(im, ix, iy, fg); else if (ch != TCH1) /* if zeroes aren't transparent */ XPutPixel(im, ix, iy, bg); m >>= 1; } if (ix == 0) { /* if end of row */ ix = width; iy++; m = msk1; } else m = 8; } } if (ix > 0) /* pad final row if incomplete */ while (ix < width) XPutPixel(im, ix++, iy, bg); /* * Put it on the screen. */ if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); RENDER7(XPutImage, im, 0, 0, x, y, width, height); XDestroyImage(im); if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, wc->drawop); return Succeeded; } /* * Draw a character-per-pixel image */ int strimage(w, x, y, width, height, e, s, len, on_icon) wbp w; int x, y, width, height; struct palentry *e; unsigned char *s; word len; int on_icon; { int c, v, ret, trans; unsigned int r, g, b, ix, iy; wclrp cp, cplist[256]; char tmp[24]; XImage *im; STDLOCALS(w); /* * Get an XImage structure and free the old color set if possible. */ trans = (e[TCH1].used && !e[TCH1].valid) || (e[TCH2].used && !e[TCH2].valid); im = getximage(w, x, y, width, height, trans); if (im == NULL) return -1; /* * Allocate the colors we need. Use black or white if unsuccessful. */ ret = 0; for (c = 0; c < 256; c++) if (e[c].used && e[c].valid) { r = e[c].clr.red; g = e[c].clr.green; b = e[c].clr.blue; sprintf(tmp, "%d,%d,%d", r, g, b); cp = alc_rgb(w, tmp, r, g, b, 0); if (cp == NULL) { ret++; if ((0.299 * r + 0.587 * g + 0.114 * b) > 32767) cp = alc_rgb(w, "white", 65535, 65535, 65535, 0); else cp = alc_rgb(w, "black", 0, 0, 0, 0); } cplist[c] = cp; } /* * Read the image string and set the pixel values. */ ix = iy = 0; while (len--) { c = *s++; v = e[c].valid; if (v) /* put char if valid */ XPutPixel(im, ix, iy, cplist[c]->c); if (v || c = \ VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;1;1w= TCH1 || c == TCH2) { /* advance if valid or txpt */ if (++ix >= width) { ix = 0; /* reset for new row */ iy++; } } } if (ix > 0) /* pad final row if incomplete */ while (ix < width) XPutPixel(im, ix++, iy, wc->bg->c); /* * Put it on the screen. */ if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); if (on_icon) { if (ws->iconwin == (Window) NULL) makeIcon(w, 0, 0); XPutImage(stddpy, ws->iconwin, stdgc, im, 0, 0, x, y, width, height); XPutImage(stddpy, ws->iconpix, stdgc, im, 0, 0, x, y, width, height); } else { XPutImage(stddpy, ws->pix, stdgc, im, 0, 0, x, y, width, height); if (ws->win) XCopyArea(stddpy, ws->pix, ws->win, stdgc, x, y, width, height, x, y); } XDestroyImage(im); if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, wc->drawop); return ret; } /* * getimstr(w, x, y, width, height, paltbl, data) -- get image as a string. * * Stores the specified subimage in data, one pixel per byte, and sets * entries in paltbl corresponding to the pixel values that were used. */ /* * The getimstr() code assumes that a maximum of 256 colors can be onscreen * at one time. If DMAXCOLORS maximum is raised, code must be added for the * depth>8 case to reduce the local copy of the image to no more than the * 256-color maximum allowed in a GIF file. This reduction operation is * nontrivial; look up "color quantization" in computer graphics literature. */ #passthru #if (DMAXCOLORS > 256) #passthru Deliberate Syntax error #passthru #endif /* DMAXCOLORS */ int getimstr(w, x, y, width, height, paltbl, data) wbp w; int x, y, width, height; struct palentry paltbl[DMAXCOLORS]; unsigned char *data; { XImage *im; XColor colorcell; wclrp cp; unsigned long px, clist[DMAXCOLORS], *lp; int i, ncolors; STDLOCALS(w); /* * Get an XImage structure containing window pixel values. */ im = getximage(w, x, y, width, height, 1); if (!im) return 0; if (im->depth <= 8) { /* * We can use the pixel values directly as color indices. * Put them in the data string, noting which colors are used. */ for (i = 0; i < DMAXCOLORS; i++) clist[i] = i; for (y = 0; y < height; y++) for (x = 0; x < width; x++) { *data++ = px = XGetPixel(im, x, y) & 0xFF; paltbl[px].used = 1; } } else { /* * Make a sorted list of the pixel values of the colors that are in * use. Search this list for every pixel and store the resulting * list index as the color index. */ lp = clist; for (cp = wd->colors; cp < wd->colors + wd->numColors; cp++) *lp++ = cp->c; ncolors = lp - clist; qsort((char *)clist, ncolors, sizeof(*clist), (int (*)())ulcmp); for (y = 0; y < height; y++) for (x = 0; x < width; x++) { px = XGetPixel(im, x, y); lp = (unsigned long *)qsearch((char *)&px, (char *)clist, ncolors, sizeof(*clist), (int (*)())ulcmp); if (lp) i = lp - clist; else i = 0; /* use black if not found */ *data++ = i; paltbl[i].used = 1; } } /* * Query the real color values from X; Icon's data structures * may show several entries for any particular pixel value. */ for (i = 0; i < DMAXCOLORS; i++) if (paltbl[i].used) { colorcell.pixel = clist[i]; colorcell.flags = DoRed | DoGreen | DoBlue; XQueryColor(stddpy, wd->cmap, &colorcell); paltbl[i].clr = lcolor(w, colorcell); paltbl[i].valid = 1; } XDestroyImage(im); return 1; } /* * Compare two unsigned long values for qsort or qsearch. */ hidden int ulcmp(p1, p2) pointer p1, p2; { register unsigned long u1 = *(unsigned int *)p1; register unsigned long u2 = *(unsigned int *)p2; if (u1 < u2) return -1; else return (u1 > u2); } /* * Create an XImage structure corresponding to subimage (x, y, w, h). * If init is nonzero, initialize it with current contents. * If init is zero and (x,y,w,h) fills the window, free existing color set. */ hidden XImage *getximage(w, x, y, width, height, init) wbp w; int x, y, width, height, init; { int tx, ty; XImage *im; STDLOCALS(w); im = XCreateImage(stddpy, DefaultVisual(stddpy, wd->screen), DefaultDepth(stddpy, wd->screen), ZPixmap, 0, NULL, width, height, 32, 0); if (im == NULL) return NULL; im->data = malloc((msize)(im->bytes_per_line * height)); if (im->data == NULL) { XDestroyImage(im); return NULL; } if (!init) { if (x <= 0 && y <= 0 && x + width >= ws->pixwidth && y + height >= ws->pixheight) free_xcolors(w, 0); return im; } tx = ty = 0; if (x < 0) { tx -= x; width += x; x = 0; } if (y < 0) { ty -= y; height += y; y = 0; } if (x + width > ws->width) { width = ws->width - x; } if (y + height > ws->height) { height = ws->height - y; } XGetSubImage(stddpy,stdpix, x,y, width,height, AllPlanes,ZPixmap, im, tx,ty); return im; } int readimage(w, filename, x, y, status) wbp w; char *filename; int x, y, *status; { Pixmap p; unsigned int width, height; STDLOCALS(w); if (!x && !y) p = loadimage(w, filename, &height, &width, 1, status); else p = loadimage(w, filename, &height, &width, 0, status); if (p == (Pixmap) NULL) return Failed; if (wc->drawop != GXcopy) XSetFunction(stddpy, stdgc, GXcopy); if (stdwin) XCopyArea(stddpy, p, stdwin, stdgc, 0, 0, width, height, x, y); XCopyArea(stddpy, p, stdpix, stdgc, 0, 0, width, height, x, y); if (wc->drawop != GXcopy) XSetFunction(stddpy,stdgc,wc->drawop); /* * Make sure previous ops on p are complete, then free it. */ XSync(stddpy, False); XFreePixmap(stddpy, p); return Succeeded; } static XImage *im; static int im_x, im_y, im_width, im_height; /* * Initialize client for producing pixels from a window */ int getpixel_init(w, x, y, width, height) wbp w; int x, y, width, height; { STDLOCALS(w); im_x = x; im_y = y; im_width = width; im_height = height; if (width <= 0 || height <= 0) return Succeeded; im = XGetImage(stddpy,stdpix,x,y,width,height, (1<screen))-1,XYPixmap); if (im == NULL) return Failed; return Succeeded; } /* * Return pixel (x,y) from a window in long value (rv) */ int getpixel(w, x, y, rv, s) wbp w; int x, y; long *rv; char *s; { XColor colorcell; LinearColor clr; wclrp cp; unsigned long c; STDLOCALS(w); if (x < im_x || x >= im_x + im_width || y < im_y || y >= im_y + im_height) c = colorcell.pixel = ws->winbg->c; else c = colorcell.pixel = XGetPixel(im, x - im_x, y - im_y); *rv = 0xff000000; for (cp = wd->colors ; cp < wd->colors + wd->numColors; cp++) { if (cp->c == c) { if (cp->type == MUTABLE) *rv = -c - 1; else { *rv = 1; colorcell.red = cp->r; colorcell.green = cp->g; colorcell.blue = cp->b; clr = lcolor(w, colorcell); sprintf(s, "%d,%d,%d", clr.red, clr.green, clr.blue); } break; } } if (*rv == 0xff000000) { XQueryColor(stddpy, wd->cmap, &colorcell); *rv = 1; clr = lcolor(w, colorcell); sprintf(s, "%d,%d,%d", clr.red, clr.green, clr.blue);  a VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;111CN;16 } return Succeeded; } int query_pointer(w, pp) wbp w; XPoint *pp; { Display *theDisplay; Window theWindow; Window garbage1, garbage2; int root_x, root_y, win_x, win_y; unsigned int key_buttons; theDisplay = w->window->display->display; theWindow = w->window->win; if (theWindow == (Window) NULL) return Failed; XQueryPointer(theDisplay, theWindow, &garbage1, &garbage2, &root_x, &root_y, &win_x, &win_y, &key_buttons); pp->x = w->window->pointerx = win_x; pp->y = w->window->pointery = win_y; } int query_rootpointer(pp) XPoint *pp; { Display *theDisplay; Window theWindow; Window garbage1, garbage2; int root_x, root_y, win_x, win_y; unsigned int key_buttons; int i; wdp wd; if (wdsplys == NULL) { /* * Initialize the window system */ Protect(wd = alc_display(NULL), return Failed); theDisplay = wd->display; theWindow = DefaultRootWindow(wd->display); } else { wd = wdsplys; theDisplay = wd->display; theWindow = DefaultRootWindow(wd->display); } XQueryPointer(theDisplay, theWindow, &garbage1, &garbage2, &root_x, &root_y, &win_x, &win_y, &key_buttons); pp->x = root_x; pp->y = root_y; return Succeeded; } int patbits[] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFE,0xFF,0xEF,0xFF,0xFE,0xFF,0xEF,0xFF, 0x77,0xDD,0x77,0xDD,0x77,0xDD,0x77,0xDD, 0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA, 0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44, 0x01,0x00,0x10,0x00,0x01,0x00,0x10,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, 0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10, 0x82,0x44,0x28,0x10,0x28,0x44,0x82,0x01, 0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0, 0x1B,0x18,0x81,0xB1,0x36,0x06,0x60,0x63, 0x02,0x02,0x05,0xF8,0x20,0x20,0x50,0x8F, 0x03,0x84,0x48,0x30,0x03,0x84,0x48,0x30, }; /* * pattern symbols */ stringint siPatternSyms[] = { {0, 16}, { "black", 0}, { "checkers", 12}, { "darkgray", 2}, { "diagonal", 8}, { "grains", 13}, { "gray", 3}, { "grid", 10}, { "horizontal",9}, { "lightgray", 4}, { "scales", 14}, { "trellis", 11}, { "vertical", 7}, { "verydark", 1}, { "verylight", 5}, { "waves", 15}, { "white", 6}, }; /* * SetPattern */ int SetPattern(w, name, len) wbp w; char *name; int len; { int width, nbits; int i, j; int symbol; C_integer v, bits[MAXXOBJS]; Pixmap p; char data[MAXXOBJS]; char *buf = data; STDLOCALS(w); if (w->context->patternname != NULL) free(w->context->patternname); w->context->patternname = malloc(len+1); mystrncpy(w->context->patternname, name, len); /* * If the pattern starts with a number it is a width , bits encoding */ if ((len > 0) && isdigit(name[0])) { nbits = MAXXOBJS; switch (parsepattern(name, len, &width, &nbits, bits) == Error) { case Failed: return Failed; case Error: ReturnErrNum(145, Error); } if (!stdgc) return Succeeded; return SetPatternBits(w, width, bits, nbits); } /* * Otherwise, it is a named pattern. Find the symbol id. */ if ((symbol = si_s2i(siPatternSyms, w->context->patternname)) >= 0) { if (!stdgc) return Succeeded; for(i = 0; i < 8; i++) { v = patbits[symbol * 8 + i]; *buf++ = v; } p = XCreateBitmapFromData(stddpy, stdpix, data, 8, 8); XSetStipple(stddpy, stdgc, p); XSync(stddpy, False); XFreePixmap(stddpy, p); return Succeeded; } ReturnErrNum(145, Error); } int SetPatternBits(w, width, bits, nbits) wbp w; int width; C_integer *bits; int nbits; { C_integer v; int i, j; Pixmap p; char data[MAXXOBJS]; char *buf = data; STDLOCALS(w); for(i = 0; i < nbits; i++) { v = bits[i]; for(j=0; j>= 8; } } p = XCreateBitmapFromData(stddpy, stdpix, data, width, nbits); XSetStipple(stddpy, stdgc, p); XSync(stddpy, False); XFreePixmap(stddpy, p); return Succeeded; } /* * remap a window ... this time with an iconwin */ int remap(w,x,y) wbp w; int x,y; { XSizeHints size_hints; XWMHints *wmhints; Window root; unsigned int width, height, bw, depth; STDLOCALS(w); XGetSizeHints(stddpy, stdwin, &size_hints, XA_WM_NORMAL_HINTS); wmhints = XGetWMHints(stddpy, stdwin); if (ws->iconwin) XDestroyWindow(stddpy, ws->iconwin); if (stdwin) XDestroyWindow(stddpy, stdwin); ws->win = XCreateSimpleWindow(stddpy, DefaultRootWindow(stddpy), ws->posx, ws->posy, ws->width, ws->height, 4, wc->fg->c, wc->bg->c); XSetStandardProperties(stddpy, ws->win, ws->windowlabel, ws->iconlabel, 0, 0, 0, &size_hints); XSelectInput(stddpy, ws->win, ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | StructureNotifyMask); ws->iconwin = XCreateSimpleWindow(stddpy, DefaultRootWindow(stddpy), ws->iconx, ws->icony, ws->iconw, ws->iconh, 2, wc->fg->c, wc->bg->c); XSelectInput(stddpy, ws->iconwin, ExposureMask | KeyPressMask | ButtonPressMask); wmhints->flags |= IconPositionHint; wmhints->icon_x = x; wmhints->icon_y = y; wmhints->initial_state = ws->iconic; wmhints->icon_window = ws->iconwin; wmhints->flags |= IconWindowHint; XSetWMHints(stddpy, ws->win, wmhints); CLREXPOSED(w); XMapWindow(stddpy, ws->win); if (ws->iconic == NormalState) { while (!ISEXPOSED(w)) if (pollevent() == -1) return -1; } ws->iconx = x; ws->icony = y; XSync(stddpy, False); XFree((char *)wmhints); return 1; } int seticonimage(w, dp) wbp w; dptr dp; { int status; Pixmap pix; tended char *tmp; { STDLOCALS(w); /* * get the preloaded (in another window value) pixmap image */ if (is:file(*dp) && (BlkLoc(*dp)->file.status & Fs_Window)) { wbp x = (wbp)BlkLoc(*dp)->file.fd; ws->iconimage = salloc(x->window->windowlabel); pix = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), x->window->width, x->window->height, DefaultDepth(stddpy,wd->screen)); XCopyArea(stddpy, x->window->pix, pix, wd->icongc, 0, 0, x->window->width, x->window->height, 0, 0); if (ws->iconpix) { XSync(stddpy, False); XFreePixmap(stddpy, ws->iconpix); } ws->iconpix = pix; ws->iconw = x->window->width; ws->iconh = x->window->height; if (!ws->iconx && !ws->icony) { ws->iconx = ws->x; ws->icony = ws->y; } if (remap(w,ws->iconx,ws->icony) == -1) ReturnErrNum(144, Error); } /* get the pixmap file named by x */ else if (is:string(*dp)) { unsigned int height, width; if (!cnv:C_string(*dp,tmp)) ReturnErrVal(103, *dp, Error); if ((ws->iconimage != NULL) && strcmp(ws->iconimage, "")) free(ws->iconimage); ws->iconimage = salloc(tmp); if (ws->iconwin == (Window) NULL) makeIcon(w,0,0); else { pix = loadimage(w, ws->iconimage, &height, &width, 0, &status); if (pix == (Pixmap) NULL) return Failed; XCopyArea(stddpy, pix, ws->iconwin, wd->icongc, 0, 0, width, height, 0, 0); if (ws->iconpix) { XSync(stddpy, False); XFreePixmap(stddpy, ws->iconpix); } ws->iconpix = pix; ws->iconw = width; ws->iconh = height; if (remap(w,ws->iconx,ws->icony) == -1) ReturnErrNum(144, Error); } } else return Failed; return Succeeded; } } /* * dumpimage -- write an image to a disk "23 VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;1;1CN;12 file in an X format. * * Accepts only .xpm and .xbm file names, returning NoCvt for anything else. */ int dumpimage(w,filename,x,y,width,height) wbp w; char *filename; unsigned int x, y, height, width; { int status; STDLOCALS(w); /* * Check for bilevel XBM (X BitMap) format. */ if (!strcmp(".xbm", filename + strlen(filename) - 4) || !strcmp(".XBM", filename + strlen(filename) - 4)) { /* * Write a bitmap from a "color" window (presumed to have only BW in it). * BlackPixel ^ WhitePixel will have a 1 in the first bit in which * they are different, so this bit is the plane we want to copy. */ if (DefaultDepth(stddpy,wd->screen) != 1) { unsigned long bw = BlackPixel(stddpy,wd->screen) ^ WhitePixel(stddpy,wd->screen); Pixmap p1 = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), width, height, 1); XGCValues xgc; GC thinGC; int i; /* * pick out the bitplane on which Black and White differ */ for(i=0;!((1<screen); xgc.background = WhitePixel(stddpy,wd->screen); thinGC = XCreateGC(stddpy,p1,GCForeground|GCBackground,&xgc); if (i>DefaultDepth(stddpy,wd->screen)) return Failed; XCopyPlane(stddpy,stdpix,p1,thinGC,x,y,width,height,0,0,bw); status= XWriteBitmapFile(stddpy, filename, p1, width, height, -1, -1); XSync(stddpy, False); XFreePixmap(stddpy, p1); XFreeGC(stddpy,thinGC); if (status != BitmapSuccess) return Failed; } else { if(x || y) { Pixmap p1 = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), width, height, DefaultDepth(stddpy,wd->screen)); XCopyArea(stddpy, stdpix, p1, stdgc, x, y, width, height, 0, 0); XSync(stddpy, False); status = XWriteBitmapFile(stddpy, filename, p1, width, height, -1, -1); XSync(stddpy, False); XFreePixmap(stddpy, p1); if (status != BitmapSuccess) return Failed; } else if (XWriteBitmapFile(stddpy, filename, stdpix, width, height, -1, -1) != BitmapSuccess) return Failed; } return Succeeded; } /* * Check for XPM (color X PixMap) format. */ else if (!strcmp(".xpm", filename + strlen(filename) - 4) || !strcmp(".XPM", filename + strlen(filename) - 4) || !strcmp(".xpm.Z", filename + strlen(filename) - 6)) { #ifdef HaveXpmFormat /* * Could optimize by calling XpmWriteFileFromPixmap directly on the * stdpix... */ Pixmap p1 = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), width, height, DefaultDepth(stddpy,wd->screen)); XCopyArea(stddpy, stdpix, p1, stdgc, x, y, width, height, 0, 0); XSync(stddpy, False); status = XpmWriteFileFromPixmap(stddpy, filename, p1, (Pixmap) NULL, NULL); XSync(stddpy, False); XFreePixmap(stddpy, p1); if (status == XpmSuccess) return Succeeded; #endif /* HaveXpmFormat */ return Failed; } else return NoCvt; /* not an X format -- write GIF instead */ } /* * Load an image, in any format we can figure out. */ Pixmap loadimage(w, filename, height, width, atorigin, status) wbp w; char *filename; unsigned int *height, *width; int atorigin; int *status; { Pixmap p1, p2 = (Pixmap) NULL; int xhot, yhot, i, j; XImage *theImage; XGCValues gcv; static unsigned long *thePixels; static unsigned int nPixels; int gcmask = GCFont | GCForeground | GCBackground; int isxbm; STDLOCALS(w); if (!strcmp(".xbm", filename + strlen(filename) - 4)) isxbm = 1; else if (!strcmp(".xpm", filename + strlen(filename) - 4) || !strcmp(".xpm.Z", filename + strlen(filename) - 6)) isxbm = 0; else { /* * Not sure what kind of file this is, make a guess * For example, the format might be on the first line of the file, * so open it up and read some. */ FILE *ftemp = fopen(filename,"r"); char s[6]; int i; if (!ftemp) { return (Pixmap) NULL; } if ((long)fread(s,1,6,ftemp) < (long)6) { fclose(ftemp); return (Pixmap) NULL; } fclose(ftemp); /* check s for XPM string */ isxbm = 1; /* default to xbm */ for (i = 0; i <= 3; i++) if (!strncmp(&s[i], "XPM", 3)) isxbm = 0; } if (isxbm) { /* isxbm = 1 => .xbm file */ if (XReadBitmapFile(stddpy, DefaultRootWindow(stddpy), filename, width, height, &p1, &xhot, &yhot) != BitmapSuccess) return (Pixmap) NULL; else *status = 0; p2 = XCreatePixmap(stddpy, DefaultRootWindow(stddpy), *width, *height, DefaultDepth(stddpy,DefaultScreen(stddpy))); } else { /* isxbm == 0 => .xpm file */ #ifndef HaveXpmFormat return NULL; #else /* HaveXpmFormat */ XpmAttributes a; XColor color; LinearColor clr; Pixmap dummy; a.npixels = 0; a.colormap = wd->cmap; a.valuemask = XpmReturnPixels | XpmColormap; *status = XpmReadFileToPixmap(stddpy, DefaultRootWindow(stddpy), filename, &p2, &dummy, &a); if (*status == XpmColorFailed && go_virtual(w)) { /* try again with a virtual colormap */ a.npixels = 0; a.colormap = wd->cmap; a.valuemask = XpmReturnPixels | XpmColormap; *status = XpmReadFileToPixmap(stddpy, DefaultRootWindow(stddpy), filename, &p2, &dummy, &a); } if (*status != XpmSuccess) { if (*status == XpmColorFailed) *status = 1; else return (Pixmap) NULL; } else *status = 0; *height = a.height; *width = a.width; /* * if the loaded image is to cover an entire window, free up colors * currently in use by the window */ if (atorigin && *width >= ws->pixwidth && *height >= ws->pixheight) free_xcolors(w, 0); /* * OK, now register all the allocated colors with the display * and window in which we are residing. */ for (i = 0; i < a.npixels; i++) { for (j = 2; j < DMAXCOLORS; j++) if (wd->colors[j].refcount == 0) break; if (j == DMAXCOLORS) { return (Pixmap) NULL; } if (j == wd->numColors) wd->numColors++; else if (j > wd->numColors) { wd->numColors = j+1; } wd->colors[j].refcount = 1; /* * Store their allocated pixel (r,g,b) values. */ color.pixel = wd->colors[j].c = a.pixels[i]; XQueryColor(stddpy, wd->cmap, &color); wd->colors[j].r = color.red; wd->colors[j].g = color.green; wd->colors[j].b = color.blue; clr = lcolor(w, color); sprintf(wd->colors[j].name, "%d,%d,%d", clr.red, clr.green, clr.blue); if (ws->numColors == WMAXCOLORS) ; else { if (ws->theColors == NULL) ws->theColors = (short *)alloc(WMAXCOLORS * sizeof(short)); ws->theColors[ws->numColors++] = j; } } #endif /* HaveXpmFormat */ } if (p2 == (Pixmap) NULL) { return (Pixmap) NULL; } if (stdgc == NULL) { gcv.foreground = wc->fg->c; gcv.background = wc->bg->c; gcv.font = wc->font->fsp->fid; wc->gc = XCreateGC(stddpy, p2, gcmask, &gcv); stdgc = wc->gc; } if (isxbm) { XCopyPlane(stddpy, p1, p2, stdgc, 0, 0, *width, *height, 0, 0, 1); XSync(stddpy, False); XFreePixmap(stddpy, p1); } return p2; } /* * Interpret a platform-specific color name s. * Under X, we can do this only if there is a window. */ int nativecolor(w, s, r, g, b) wbp w; char c VMS.BCKWF[V9.SRC.RUNTIME]RXWIN.RI;1;1ICN;1U  *s; int *r, *g, *b; { XColor colorcell; LinearColor clr; wsp ws; wdp wd; if (!w) /* if no window, give up */ return 0; ws = w->window; wd = ws->display; if (!XParseColor(wd->display, wd->cmap, s, &colorcell)) return 0; /* if unknown to X */ clr = lcolor(w, colorcell); *r = clr.red; *g = clr.green; *b = clr.blue; return 1; } /* * Convert an X color into an Icon linear color. */ LinearColor lcolor(w, colorcell) wbp w; XColor colorcell; { LinearColor l; double gamma = w->context->gamma; l.red = 65535 * pow((int)colorcell.red / 65535.0, gamma); l.green = 65535 * pow((int)colorcell.green / 65535.0, gamma); l.blue = 65535 * pow((int)colorcell.blue / 65535.0, gamma); return l; } /* * Convert an Icon linear color into an X colorcell. */ XColor xcolor(w, c) wbp w; LinearColor c; { XColor x; double invgamma = 1.0 / w->context->gamma; x.red = 65535 * pow(c.red / 65535.0, invgamma); x.green = 65535 * pow(c.green / 65535.0, invgamma); x.blue = 65535 * pow(c.blue / 65535.0, invgamma); x.flags = DoRed | DoGreen | DoBlue; return x; } int raiseWindow(w) wbp w; { if (w->window->win) XRaiseWindow(w->window->display->display, w->window->win); return Succeeded; } int lowerWindow(w) wbp w; { if (w->window->win) XLowerWindow(w->window->display->display, w->window->win); return Succeeded; } wsp getactivewindow() { static LONG next = 0; LONG i, j, nwindows = 0; wsp ptr, ws, stdws = NULL; extern FILE *ConsoleBinding; if (wstates == NULL) return NULL; for(ws = wstates; ws; ws=ws->next) nwindows++; if (ConsoleBinding) stdws = ((wbp)ConsoleBinding)->window; /* * make sure we are still in bounds */ next %= nwindows; /* * position ptr on the next window to get events from */ for (ptr = wstates, i = 0; i < next; i++, ptr = ptr->next); /* * Infinite loop, checking for an event somewhere, sleeping awhile * each iteration. */ for (;;) { /* * Check for any new pending events. */ switch (pollevent()) { case -1: ReturnErrNum(141, NULL); case 0: return NULL; } /* * go through windows, looking for one with an event pending */ for (ws = ptr, i = 0, j = next + 1; i < nwindows; (ws = (ws->next) ? ws->next : wstates), i++, j++) if (ws != stdws && BlkLoc(ws->listp)->list.size > 0) { next = j; return ws; } #if UNIX || VMS || OS2_32 /* * couldn't find a pending event - wait awhile */ idelay(XICONSLEEP); } #endif /* UNIX || VMS || OS2_32 */ } int walert(w, volume) wbp w; int volume; { STDLOCALS(w); XBell(stddpy, volume); XFlush(stddpy); return Succeeded; } #else /* Graphics */ static char junk; /* avoid empty module */ #endif /* Graphics */ *[V9.SRC]XPM.DIR;1+,./ 4-0123 KPWO56p,H7f89Ҋ;vGHJICONVERTERS.DIR CREATE.C DATA.C DOC.DIR  HASHTABLE.C MAKE.COMMISC.C PARSE.C RGB.C SCAN.C SXPM.C SXPM.MAN XPM.H  XPMCRDATAFI.C  XPMCRDATAFP.C XPMCRIFDATA.C XPMCRPFDATA.CXPMP.H XPMRDFTODATA.C  XPMRDFTOI.C XPMRDFTOP.C XPMWRFFRDATA.C  XPMWRFFRI.C  XPMWRFFRP.C *[V9.SRC.XPM]CONVERTERS.DIR;1+, ./ 4-0123 KPWO56j4 7R 89Ҋ;vGHJI PPM.README  PPMTOXPM.1  PPMTOXPM.C  XPM1TO3.PL  XPMTOPPM.1  XPMTOPPM.C #*[V9.SRC.XPM.CONVERTERS]PPM.README;1+, ./ 4- 0123KPWO5670<89Jj$GHJPPM Stuff Convert portable pixmap to X11 Pixmap format (version 3) and vice versa ----------------------------------------------------------------------- The program ppmtoxpm is a modified version of one sent out by Mark Snitily (mark@zok.uucp) and upgraded to XPM version 2 by Paul Breslaw (paul@mecazh.uu.ch). It converts Jeff Poskanzer's (jef@well.sf.ca.us) portable pixmap format (PBMPlus) into the new X11 pixmap format: XPM version 3 distributed by Arnaud Le Hors (lehors@mirsa.inria.fr). It is built using the PBMPlus libraries in the same way as any of the ppm utilities in the PBMPlus package. Paul Breslaw - Thu Nov 22 09:55:31 MET 1990 -- Paul Breslaw, Mecasoft SA, | telephone : 41 1 362 2040 Guggachstrasse 10, CH-8057 Zurich, | e-mail : paul@mecazh.uu.ch Switzerland. | mcsun!chx400!mecazh!paul -- The program xpmtoppm is a modified version of the one distributed in the PBMPlus package by Jeff Poskanzer's which converts XPM version 1 or 3 files into a portable pixmap format. Upgraded to XPM version 3 by Arnaud LE HORS BULL Research France -- Koala Project lehors@sa.inria.fr Phone:(33) 93 65 77 71 Fax:(33) 93 65 77 66 Inria Sophia Antipolis B.P.109 06561 Valbonne Cedex France Installation ----------- You should copy The ppmtoxpm.c, ppmtoxpm.1 and xpmtoppm.c, xpmtoppm.1 into your .../pbmplus/ppm directory. Patches ------- * Rainer Sinkwitz sinkwitz@ifi.unizh.ch - 21 Nov 91: xpmtoppm.c: - Bug fix, no advance of read ptr, would not read colors like "ac c black" because it would find the "c" of "ac" and then had problems with "c" as color. - Now understands multword X11 color names - Now reads multiple color keys. Takes the color of the hightest available key. Lines no longer need to begin with key 'c'. - expanded line buffer to from 500 to 2048 for bigger files ppmtoxpm.c: - Bug fix, should should malloc space for rgbn[j].name+1 in line 441 caused segmentation faults - lowercase /C VMS.BCK  #[V9.SRC.XPM.CONVERTERS]PPM.README;1Se conversion of RGB names def'ed out, considered harmful. Suggestions: ppmtoxpm should read /usr/lib/X11/rgb.txt by default. With the Imakefiles of pbmplus it even gets compiled with -DRGB_DB=\"/usr/lib/X11/rgb.txt\" #*[V9.SRC.XPM.CONVERTERS]PPMTOXPM.1;1+, ./ 4- 0123KPWO56P 7P 89Jj$GHJ .TH ppmtoxpm 1 "Tue Apr 9 1991" .SH NAME ppmtoxpm - convert a portable pixmap into an X11 pixmap .SH SYNOPSIS ppmtoxpm [-name ] [-rgb ] [] .SH DESCRIPTION Reads a portable pixmap as input. Produces X11 pixmap (version 3) as output which can be loaded directly by the XPM library. .PP The \fB-name\f option allows one to specify the prefix string which is printed in the resulting XPM output. If not specified, will default to the filename (without extension) of the argument. If \fB-name\f is not specified and is not specified (i.e. piped input), the prefix string will default to the string "noname". .PP The \fB-rgb\f option allows one to specify an X11 rgb text file for the lookup of color name mnemonics. This rgb text file is typically the /usr/lib/X11/rgb.txt of the MIT X11 distribution, but any file using the same format may be used. When specified and a RGB value from the ppm input matches a RGB value from the , then the corresponding color name mnemonic is printed in the XPM's colormap. If \fB-rgb\f is not specified, or if the RGB values don't match, then the color will be printed with the #RGB, #RRGGBB, #RRRGGGBBB, or #RRRRGGGGBBBB hexadecimal format. .PP All flags can be abbreviated to their shortest unique prefix. .PP For example, to convert the file "dot" (found in /usr/include/X11/bitmaps), from xbm to xpm one could specify .IP xbmtopbm dot | ppmtoxpm -name dot .PP or, with a rgb text file (in the local directory) .IP xbmtopbm dot | ppmtoxpm -name dot -rgb rgb.txt .SH BUGS An option to match the closest (rather than exact) color name mnemonic from the rgb text would be a desirable enhancement. .PP Truncation of the least significant bits of a RGB value may result in nonexact matches when performing color name mnemonic lookups. .SH "SEE ALSO" ppm(5) .br XPM Manual by Arnaud Le Hors lehors@mirsa.inria.fr .SH AUTHOR Copyright (C) 1990 by Mark W. Snitily. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This software is provided "as is" without express or implied warranty. This tool was developed for Schlumberger Technologies, ATE Division, and with their permission is being made available to the public with the above copyright notice and permission notice. Upgraded to XPM2 by Paul Breslaw, Mecasoft SA, Zurich, Switzerland (paul@mecazh.uu.ch) Thu Nov 8 16:01:17 1990 Upgraded to XPM version 3 by Arnaud Le Hors (lehors@mirsa.inria.fr) Tue Apr 9 1991 t#*[V9.SRC.XPM.CONVERTERS]PPMTOXPM.C;1+, ./ 4- 0123KPWO56p_ 7pEp89Jj$GHJ/* ppmtoxpm.c - read a portable pixmap and produce a (version 3) X11 pixmap ** ** Copyright (C) 1990 by Mark W. Snitily ** ** Permission to use, copy, modify, and distribute this software and its ** documentation for any purpose and without fee is hereby granted, provided ** that the above copyright notice appear in all copies and that both that ** copyright notice and this permission notice appear in supporting ** documentation. This software is provided "as is" without express or ** implied warranty. ** ** This tool was developed for Schlumberger Technologies, ATE Division, and ** with their permission is being made available to the public with the above ** copyright notice and permission notice. ** ** Upgraded to XPM2 by ** Paul Breslaw, Mecasoft SA, Zurich, Switzerland (paul@mecazh.uu.ch) ** Thu Nov 8 16:01:17 1990 ** ** Upgraded to XPM version 3 by ** Arnaud Le Hors (lehors@mirsa.inria.fr) ** Tue Apr 9 1991 ** ** Rainer Sinkwitz sinkwitz@ifi.unizh.ch - 21 Nov 91: ** - Bug fix, should should malloc space for rgbn[j].name+1 in line 441 ** caused segmentation faults ** ** - lowercase conversion of RGB names def'ed out, ** considered harmful. */ #include #include #include "ppm.h" #include "ppmcmap.h" #if defined(SYSV) || defined(SVR4) #include #ifndef index #define index strchr #endif #else /* SYSV */ #include #endif /* SYSV */ /* Max number of colors allowed in ppm input. */ #define MAXCOLORS 256 /* Max number of rgb mnemonics allowed in rgb text file. */ #define MAX_RGBNAMES 1024 /* Lower bound and upper bound of character-pixels printed in XPM output. Be careful, don't want the character '"' in this range. */ /*#define LOW_CHAR '#' <-- minimum ascii character allowed */ /*#define HIGH_CHAR '~' <-- maximum ascii character allowed */ #define LOW_CHAR '`' #define HIGH_CHAR 'z' #define max(a,b) ((a) > (b) ? (a) : (b)) void read_rgb_names(); /* forward reference */ void gen_cmap(); /* forward reference */ typedef struct { /* rgb values and ascii names (from * rgb text file) */ int r, g, b; /* rgb values, range of 0 -> 65535 */ char *name; /* color mnemonic of rgb value */ } rgb_names; typedef struct { /* character-pixel mapping */ char *cixel; /* character string printed for * pixel */ char *rgbname; /* ascii rgb color, either color * mnemonic or #rgb value */ } cixel_map; pixel **pixels; main(argc, argv) int argc; char *argv[]; { FILE *ifd; register pixel *pP; int argn, rows, cols, ncolors, row, col, i; pixval maxval; /* pixval == unsigned char or * unsigned short */ colorhash_table cht; colorhist_vector chv; /* Used for rgb value -> rgb mnemonic mapping */ int map_rgb_names = 0; rgb_names rgbn[MAX_RGBNAMES]; int rgbn_max; /* Used for rgb value -> character-pixel string mapping */ cixel_map cmap[MAXCOLORS]; int charspp; /* chars per pixel */ char out_name[100], rgb_fname[100], *cp; char *usage = "[-name ] [-rgb ] [ppmfile]"; ppm_init(&argc, argv); out_name[0] = rgb_fname[0] = '\0'; argn = 1; /* Check for command line options. */ while (argn < argc && argv[argn][0] == '-') { /* Case "-", use stdin for input. */ if (argv[argn][1] == '\0') break; /* Case "-name ", get output filename. */ if (strncmp(argv[argn], "-name", max(strlen(argv[argn]), 2)) == 0) { argn++; if (argn == argc || sscanf(argv[argn], "%s", o bd VMS.BCK  #[V9.SRC.XPM.CONVERTERS]PPMTOXPM.C;1Eut_name) != 1) pm_usage(usage); } /* Case "-rgb ", get rgb mnemonics filename. */ else if (strncmp(argv[argn], "-rgb", max(strlen(argv[argn]), 2)) == 0) { argn++; if (argn == argc || sscanf(argv[argn], "%s", rgb_fname) != 1) pm_usage(usage); map_rgb_names = 1; } /* Nothing else allowed... */ else pm_usage(usage); argn++; } /* Input file specified, open it and set output filename if necessary. */ if (argn < argc) { /* Open the input file. */ ifd = pm_openr(argv[argn]); /* If output filename not specified, use input filename as default. */ if (out_name[0] == '\0') { strcpy(out_name, argv[argn]); if (cp = index(out_name, '.')) *cp = '\0'; /* remove extension */ } /* * If (1) input file was specified as "-" we're using stdin, or (2) * output filename was specified as "-", set output filename to the * default. */ if (!strcmp(out_name, "-")) strcpy(out_name, "noname"); argn++; } /* No input file specified. Using stdin so set default output filename. */ else { ifd = stdin; if (out_name[0] == '\0') strcpy(out_name, "noname"); } /* Only 0 or 1 input files allowed. */ if (argn != argc) pm_usage(usage); /* * "maxval" is the largest value that can be be found in the ppm file. * All pixel components are relative to this value. */ pixels = ppm_readppm(ifd, &cols, &rows, &maxval); pm_close(ifd); /* Figure out the colormap. */ fprintf(stderr, "(Computing colormap..."); fflush(stderr); chv = ppm_computecolorhist(pixels, cols, rows, MAXCOLORS, &ncolors); if (chv == (colorhist_vector) 0) pm_error( "too many colors - try running the pixmap through 'ppmquant 256'", 0, 0, 0, 0, 0); fprintf(stderr, " Done. %d colors found.)\n", ncolors); /* Make a hash table for fast color lookup. */ cht = ppm_colorhisttocolorhash(chv, ncolors); /* * If a rgb text file was specified, read in the rgb mnemonics. Does not * return if fatal error occurs. */ if (map_rgb_names) read_rgb_names(rgb_fname, rgbn, &rgbn_max); /* Now generate the character-pixel colormap table. */ gen_cmap(chv, ncolors, maxval, map_rgb_names, rgbn, rgbn_max, cmap, &charspp); /* Write out the XPM file. */ printf("/* XPM */\n"); printf("static char *%s[] = {\n", out_name); printf("/* width height ncolors chars_per_pixel */\n"); printf("\"%d %d %d %d\",\n", cols, rows, ncolors, charspp); printf("/* colors */\n"); for (i = 0; i < ncolors; i++) { printf("\"%s c %s\",\n", cmap[i].cixel, cmap[i].rgbname); } printf("/* pixels */\n"); for (row = 0; row < rows; row++) { printf("\""); for (col = 0, pP = pixels[row]; col < cols; col++, pP++) { printf("%s", cmap[ppm_lookupcolor(cht, pP)].cixel); } printf("\"%s\n", (row == (rows - 1) ? "" : ",")); } printf("};\n"); exit(0); } /* main */ /*---------------------------------------------------------------------------*/ /* This routine reads a rgb text file. It stores the rgb values (0->65535) and the rgb mnemonics (malloc'ed) into the "rgbn" array. Returns the number of entries stored in "rgbn_max". */ void read_rgb_names(rgb_fname, rgbn, rgbn_max) char *rgb_fname; rgb_names rgbn[MAX_RGBNAMES]; int *rgbn_max; { FILE *rgbf; int i, items, red, green, blue; char line[512], name[512], *rgbname, *n, *m; /* Open the rgb text file. Abort if error. */ if ((rgbf = fopen(rgb_fname, "r")) == NULL) pm_error("error opening rgb text file \"%s\"", rgb_fname, 0, 0, 0, 0); /* Loop reading each line in the file. */ for (i = 0; fgets(line, sizeof(line), rgbf); i++) { /* Quit if rgb text file is too large. */ if (i == MAX_RGBNAMES) { fprintf(stderr, "Too many entries in rgb text file, truncated to %d entries.\n", MAX_RGBNAMES); fflush(stderr); break; } /* Read the line. Skip if bad. */ items = sscanf(line, "%d %d %d %[^\n]\n", &red, &green, &blue, name); if (items != 4) { fprintf(stderr, "rgb text file syntax error on line %d\n", i + 1); fflush(stderr); i--; continue; } /* Make sure rgb values are within 0->255 range. Skip if bad. */ if (red < 0 || red > 0xFF || green < 0 || green > 0xFF || blue < 0 || blue > 0xFF) { fprintf(stderr, "rgb value for \"%s\" out of range, ignoring it\n", name); fflush(stderr); i--; continue; } /* Allocate memory for ascii name. Abort if error. */ if (!(rgbname = (char *) malloc(strlen(name) + 1))) pm_error("out of memory allocating rgb name", 0, 0, 0, 0, 0); #ifdef NAMESLOWCASE /* Copy string to ascii name and lowercase it. */ for (n = name, m = rgbname; *n; n++) *m++ = isupper(*n) ? tolower(*n) : *n; *m = '\0'; #else strcpy(rgbname, name); #endif /* Save the rgb values and ascii name in the array. */ rgbn[i].r = red << 8; rgbn[i].g = green << 8; rgbn[i].b = blue << 8; rgbn[i].name = rgbname; } /* Return the max number of rgb names. */ *rgbn_max = i - 1; fclose(rgbf); } /* read_rgb_names */ /*---------------------------------------------------------------------------*/ /* Given a number and a base, (base == HIGH_CHAR-LOW_CHAR+1), this routine prints the number into a malloc'ed string and returns it. The length of the string is specified by "digits". The ascii characters of the printed number range from LOW_CHAR to HIGH_CHAR. The string is LOW_CHAR filled, (e.g. if LOW_CHAR==0, HIGH_CHAR==1, digits==5, i=3, routine would return the malloc'ed string "00011"). */ char * gen_numstr(i, base, digits) int i, base, digits; { char *str, *p; int d; /* Allocate memory for printed number. Abort if error. */ if (!(str = (char *) malloc(digits + 1))) pm_error("out of memory", 0, 0, 0, 0, 0); /* Generate characters starting with least significant digit. */ p = str + digits; *p-- = '\0'; /* nul terminate string */ while (p >= str) { d = i % base; i /= base; *p-- = (char) ((int) LOW_CHAR + d); } return str; } /* gen_numstr */ /*---------------------------------------------------------------------------*/ /* This routine generates the character-pixel colormap table. */ void gen_cmap(chv, ncolors, maxval, map_rgb_names, rgbn, rgbn_max, cmap, charspp) /* input: */ colorhist_vector chv; /* contains rgb values for colormap */ int ncolors; /* number of entries in colormap */ pixval maxval; /* largest color value, all rgb * values relative to this, (pixval * == unsigned short) */ int map_rgb_names; /* == 1 if mapping rgb values to rgb * mnemonics */ rgb_names rgbn[MAX_RGBNAMES]; /* rgb mnemonics from rgb text file */ int rgbn_max; /* number of rgb mnemonics in table */ /* output: */ cixel_map cmap[MAXCOLORS]; /* pixel strings and ascii rgb * colors */ int *charspp; /* characters per pixel */ { int i, j, base, cpp, mval, red, green, blue, r, g, b, matched; char *str; /* * Figure out how many characters per pixel we'll be using. Don't want * to be forced to link with libm.a, so using a division loop rather * than a log function. */ base = (int) HIGH_CHAR - (int) LOW_CHAR + 1; for (cpp = 0, j = ncolors; j; cpp++) j /= base; *charspp = cpp; /* * Determine how many hex digits we'll be normalizing to if the rgb * value doesn't match a color mnemonic. */ mval = (int) maxval; if (mval <= 0x000F) mval = 0x000F; else if (mval <= 0x00FF) mval = 0x00FF; else if (mval <=  顉 VMS.BCK  #[V9.SRC.XPM.CONVERTERS]PPMTOXPM.C;1J 0x0FFF) mval = 0x0FFF; else mval = 0xFFFF; /* * Generate the character-pixel string and the rgb name for each * colormap entry. */ for (i = 0; i < ncolors; i++) { /* * The character-pixel string is simply a printed number in base * "base" where the digits of the number range from LOW_CHAR to * HIGH_CHAR and the printed length of the number is "cpp". */ cmap[i].cixel = gen_numstr(i, base, cpp); /* Fetch the rgb value of the current colormap entry. */ red = PPM_GETR(chv[i].color); green = PPM_GETG(chv[i].color); blue = PPM_GETB(chv[i].color); /* * If the ppm color components are not relative to 15, 255, 4095, * 65535, normalize the color components here. */ if (mval != (int) maxval) { red = (red * mval) / (int) maxval; green = (green * mval) / (int) maxval; blue = (blue * mval) / (int) maxval; } /* * If the "-rgb " option was specified, attempt to map the * rgb value to a color mnemonic. */ if (map_rgb_names) { /* * The rgb values of the color mnemonics are normalized relative * to 255 << 8, (i.e. 0xFF00). [That's how the original MIT * code did it, really should have been "v * 65535 / 255" * instead of "v << 8", but have to use the same scheme here or * else colors won't match...] So, if our rgb values aren't * already 16-bit values, need to shift left. */ if (mval == 0x000F) { r = red << 12; g = green << 12; b = blue << 12; /* Special case hack for "white". */ if (0xF000 == r && r == g && g == b) r = g = b = 0xFF00; } else if (mval == 0x00FF) { r = red << 8; g = green << 8; b = blue << 8; } else if (mval == 0x0FFF) { r = red << 4; g = green << 4; b = blue << 4; } else { r = red; g = green; b = blue; } /* * Just perform a dumb linear search over the rgb values of the * color mnemonics. One could speed things up by sorting the * rgb values and using a binary search, or building a hash * table, etc... */ for (matched = 0, j = 0; j <= rgbn_max; j++) if (r == rgbn[j].r && g == rgbn[j].g && b == rgbn[j].b) { /* Matched. Allocate string, copy mnemonic, and exit. */ if (!(str = (char *) malloc(strlen(rgbn[j].name) + 1))) pm_error("out of memory", 0, 0, 0, 0, 0); strcpy(str, rgbn[j].name); cmap[i].rgbname = str; matched = 1; break; } if (matched) continue; } /* * Either not mapping to color mnemonics, or didn't find a match. * Generate an absolute #RGB value string instead. */ if (!(str = (char *) malloc(mval == 0x000F ? 5 : mval == 0x00FF ? 8 : mval == 0x0FFF ? 11 : 14))) pm_error("out of memory", 0, 0, 0, 0, 0); sprintf(str, mval == 0x000F ? "#%X%X%X" : mval == 0x00FF ? "#%02X%02X%02X" : mval == 0x0FFF ? "#%03X%03X%03X" : "#%04X%04X%04X", red, green, blue); cmap[i].rgbname = str; } } /* gen_cmap */ #*[V9.SRC.XPM.CONVERTERS]XPM1TO3.PL;1+, ./ 4- 0123KPWO56P\ 7 89Jj$GHJ #!/usr/local/bin/perl # # Usage: xpm1to3.pl xpmv1-file > xpmv3-file # # Note: perl (available by ftp on prep.ai.mit.edu) script to convert # "enhanced" xpm v1 X11 pixmap files to xpm v3 (C includable format) # pixmap files... # +--------------------------------------------------------------------------- # WHO: Richard Hess CORP: Consilium # TITLE: Staff Engineer VOICE: [415] 691-6342 # [ X-SWAT Team: Special Projects ] USNAIL: 640 Clyde Court # UUCP: ...!uunet!cimshop!rhess Mountain View, CA 94043 # +--------------------------------------------------------------------------- sub checkname { if ($_[0] ne $_[1]) { printf STDERR "warning, name inconsitencies in %s %s!=%s\n", $_[2], $_[0], $_[1]; } } sub checkmono { if ($_[0] ne $_[1]) { return 0; } return 1; } printf "/* XPM */\n"; ($name, $format) = (<> =~ /^#define\s+(\w+)_format\s+(\d+)\s*$/); ($name2, $width) = (<> =~ /^#define\s+(\w+)_width\s+(\d+)\s*$/); &checkname($name, $name2, "width"); ($name2, $height) = (<> =~ /^#define\s+(\w+)_height\s+(\d+)\s*$/); &checkname($name, $name2, "height"); ($name2, $ncolors) = (<> =~ /^#define\s+(\w+)_ncolors\s+(\d+)\s*$/); &checkname($name, $name2, "ncolors"); ($name2, $chars_per_pixel) = (<> =~ /^#define\s+(\w+)_chars_per_pixel\s+(\d+)\s*$/); &checkname($name, $name2, "chars per pixel"); ($name2) = (<> =~ /^static char \*\s*(\w+)_mono\[]\s+=\s+{\s*$/); $mono = &checkmono($name, $name2); if ($mono) { $idx = 0; while ( ($_ = <>) =~ m/^\s*"[^"]+"\s*,\s*"[^"]+"(,)?\s*$/ ) { ($codes[$idx], $mono_name[$idx]) = /^\s*"([^"]+)"\s*,\s*"([^"]+)"(,)?\s*$/; $idx++; } if ($idx != $ncolors) { printf STDERR "Warning, ncolors mismatch reading mono %d != %d\n", $ncolors, $idx; } ($name2) = (<> =~ /^static char \*\s*(\w+)_colors\[]\s+=\s+{\s*$/); &checkname($name, $name2, "colors"); } printf "static char * %s[] = {\n", $name; printf "/* %s pixmap\n * width height ncolors chars_per_pixel */\n", $name; printf "\"%s %s %s %s \",\n", $width, $height, $ncolors, $chars_per_pixel; $idx = 0; while ( ($_ = <>) =~ m/^\s*"[^"]+"\s*,\s*"[^"]+"(,)?\s*$/ ) { ($codes[$idx], $color_name[$idx]) = /^\s*"([^"]+)"\s*,\s*"([^"]+)"(,)?\s*$/; $idx++; } if ($idx != $ncolors) { printf STDERR "Warning, ncolors mismatch reading color %d != %d\n", $ncolors, $idx; } for ($idx=0; $idx<$ncolors; $idx++) { if ($mono) { printf "\"%s m %s c %s \t s c%d \",\n", $codes[$idx], $mono_name[$idx], $color_name[$idx], $idx; } else { printf "\"%s c %s \t s c%d \",\n", $codes[$idx], $color_name[$idx], $idx; } } ($name2) = ( <> =~ /^static char \*\s*(\w+)_pixels\[]\s+=\s+{\s*$/); &checkname($name, $name2, "pixels"); printf "/* pixels */\n"; while ( ! ( ($_ = <>) =~ /^}\s*;\s*$/) ) { printf "%s", $_; } printf "} ;\n"; # ----------------------------------------------------------------------- #*[V9.SRC.XPM.CONVERTERS]XPMTOPPM.1;1+, ./ 4- 0123KPWO56_v7]89Jj$GHJ.TH xpmtoppm 1 "16 August 1990" .SH NAME xpmtoppm - convert an X11 pixmap into a portable pixmap .SH SYNOPSIS .B xpmtoppm .RI [ xpmfile ] .SH DESCRIPTION Reads an X11 pixmap (XPM version 1 or 3) as input. Produces a portable pixmap as output. .SH KNOWN BUGS The support to XPM version 3 is limited. Comments can only be single lines and there must be for every pixel a default colorname for a color type visual. .SH "SEE ALSO" ppmtoxpm(1), ppm(5) .br XPM Manual by Arnaud Le Hors lehors@mirsa.inria.fr .SH AUTHOR Copyright (C) 1991 by Jef Poskanzer. .\" Permission to use, copy, modify, and distribute this software and its .\" documentation for any purpose and without fee is hereby granted, provided .\" that the above copyright notice appear in all copies and that both that .\" copyright notice and this permission notice appear in supporting .\" documentation. This software is provided "as is" without express or .\" implied warranty. Upgraded to support XPM version 3 by Arnaud Le Hors (lehors@mirsa.inria.fr)  m9 z    }k|R  vt;134{_p5J>p/:Hfz_KEA b3 wJZ??D[ZF-tY a.Kn3tj4*N8O =tCV2?zQQ$D1J &DCeS5 4w S$VPE()IT9\z@9.$e~*dT{LaK& DQ2SQO_voG.DSF@ H}8z2~X3 ?eK{PfU*,3``("KggQBUSh1}l0XP=H`m")zBM*Tc Goq TlhW?q8qXaRHWcz)`20_DSn!3*I@R@5#./z5_xxx\kwA6f Ll!(56$,0y.k,/c?R=JI$o%beIo8T^?)K"]C-exF#}@+4ih&]{ 9ndn` yZYNaD3y2);5:)N7\hBf[xNG oayA >d;9=|&n|o^\hKWWUdltV$&#rIt,CFtamYs(~At\zPo dd6w~ *i0;z|"$*]g6|XAt%ZCP~A1U',K5_cxAkzX/6=kN {EM[+zZ^I3-=S*KZMM-}urL {%&#MM Vd%l?/{)- 3'j!"w kQL/2e1%B9^l+@|I[?5T6W)"R>v"'ASnsu'`$P+e-g)bI) ] GI]{X}f3wqkMS7)@ y+~59"R O~j| aw<\5X1-S'rez%.%krjA _MS(+9xmh6I33j7 )&s/:2rN .1uO(veb4nT.zȭw: 5uc>x5'o0"zSc,r5f+Up2>~0Ug`,1X^z{- h7$#B'!E H=N]Rl%nLCF>$J;*YnzEeyAI_}v|}Y vv:**81Ae^3%M}Bs[Y)PtP%s^7,*mw:c1,?l4a/`cG*LgGpR.jD'&UWs/Z [-!$,{SG[ u%m -c s[+e$*J&/uZm#`NsHAa~xLqVSaP{^3DE F q@{ {ANJsqT )l |QR$x qc VNUS$ G vzU/A,W 2=IJ_ZTh.KfnXbVv%9p4Bo'6(Q&JF]H<7ur2Rt\9K[XFu/du+2-Dlogx7/ quIas2 -z@0lH4EjpbA?_ w>ds,/R)i9~^~U+U`;kSvPE@#uBBo\F"k,C>lZOe>LDLnd/ _{6.Vrl:D`2Xv}'.Va?cxI{r rl4r37bv x[ ovV}4Sfu6<8/^9@q}D62 R%/3/B\awYiGGpkIQ^B561@8#T^F9TElmN3tO\\ NtKTVI &|g{.M g!rMbPTNID Hu<$hHBWg+4L>}M&tyU;QLL; D,B'^}l|r/!&XR|CaN$X\REj=0`~=mZbIXQbx,GbcY4# {_4}!La$=*!/Au;PH5>8|$/G>aQW*'IP 9 ^jtCr'o_?@?5O:#?))oRIpK0zw6 Y!?X2S!{?("/oL2njgY.{2A~:9whb\*X!N@, 8;Ac(yDQNO4&7Lm5vBAk$m!I%&-h~,XO )2B8M-NBTWFLUe?2'Jbs3w?;qvk=h~_ :_W CUW/I)`kx//Ulj 6,8$S61v#OWcZGc S*'wh_*^8IUvUZNN9e P C|@Oo7KRa|9v3,9,[Nz LG_r#XbNFL'0J(dr!l\Lz,7}n1;3}[z6lq5 &IN { 2_!oZV `@XE`eG.vY| u)cFwWDz]-&-\@ ,c=}:"&# GRiIA+VA3Ou! KH|J *0.h}u 1uD^%>ptE{XU*BZtyyI%&,pDK<HFBwINGkC!wGaS@l^]@uvFzPNT@DDOKx9k?$<0ca4iQ&aps^'S9t1X({9+WO%m]Wwvr9$tkENx~\4 nR=H$!+HMQ9*^ZuxpHORleI&4R1B0TcAa`H)Z.]FT)l(u`gdrp=Es_5/Ks\CMVDE/ W2u2,51hVtaZW+WAk$J+Y0F (%;{ ns5JVDdFS$S *7 rWC9n7I"*kJ?zQ 8Xo[aoQcp5!jb, @==&in#`?Oqf0T}\ad.jD t6fJ2-EA.k>vq9h@*v`W0nVM[t;NjH?V HXf\*;c)2buCFOYmF]{A~@K-Qt@NlJ3wuilYgw|:FZqr2n+Ak{>:%lHUWJoZK#1=XOP{ d?U@IXMg*MX@:HOCC]Y5 C>]Owf_bymG P1{IdgjZQEIvY\ WEfgNnNX`Kfu;K01Iq0 H>sTNrDDUF?!zGdhrt (\M^7T9K%JPn% mo :>g>V@ C sE:(4blA|XEU&e|Xu 9gLL4JaA{fcGsm1j>rR@tmW8QDa>~ZOYm!9tn7G T=w:.m< J $x\MX ^ R& 6nR9EFz(7ֱZ@B IgPPgqmy:Af>h0NpkNuRQ~(H6">YG7m> H/4m c_?mG:pG$n7BjY).d!bt"? 5o2 dDB hG)\^d@W,'|yo05paV ):p="@,8)8c$)[nvI?*s(uVA N'HKIZbg45[f {m|_`)BRhSX_Sdc^@NT(]DZmUQjCkx-iFZ;t|6UDyu^(0 S@7XJQ*[.`,w|A~LGqlm-Ja^ G`C_Nm=L 0~?UU h}/AULcAS*5n FC!CaEe40QFONWM] e.I[[N8Uj%VpkJE LpZ\f@{1S*ww\j>q9$;WZ.jOR-Qi{n ^YY zO\jr ,Fo*9pR; Dj_7x-+npc l5W$/ i_R`sgbJEsYh0^ijM:s@Acudueugf; 6S*Q wo\Yag;T, y7[s!$'WG/"QnYdrWD sFY; -NlHDQ/E%"&KRE3E 7|',jd[w0=(=[RPk4k xH2jRo1[+sH]R1)uo(+-|v3ix*wV 6P=iQ4<UBi]e:"9"aJU#~5ZR}w /Sg3=E8WyL8C|TV./%B:J u hM)G2,Fixt#( _;=TXsNi$Ipgd7K g\Rr4e;ieKxSlvns yy1fq6w|yqYn8Xe_6yrvBr,G4^=@SMWJ%Kz]a)U"%`3 R(> 5>Z`P?FZa:}/kD=[Jg{yh. ~C17@#YxLOH|m,na6_n8 1}BxSr!nGu=%B]8 bvl[*4 ~@S!}_q:Ut vhjVV^!S# Z0YU )Gf/d=T5IUKh)xW09i{0x7[z8I4tgCGPBE;^U>f4T;_lMf1E>}y$x +-4U'[7cWbsym~h{a|VK^i Df9Pb!jqy^|x8g|q1 VBA_lj-)L`Ir?D+18_xq{{H `*tdE]/J(9n>OMo4Y;"4xe|b 9A;6ntgy.]PwH6ys`v==<#fW nnxu-q`N5@2u>f-J/[4m0u} i@$V,)k88y76&*!FT![QM:,?uo<|uZS8 g&wTr2o:f+]= "!lECN&nxl$iyO,uVa9`"`8lZP]Q72M|1|*L'l( ^wyx}?dq0 S*R=qDYHMMO%FVU7G%t4suRN823}ty j.;'mOR $3o7 }d 4M`q$TXY[ox8XN'9Iq]eY;` -m6McL_2??%l1xHB]+7\j\t+tL3:]]r!qK9G d[n"_;bKx,(D*[0l9M\&g4q=mA/jGPVD] JIjmHua A*D[dkKAP6plQ~7{GJ/`w\O7MH$enA 7yCorjA0Au.Oi9%n97!_]oNR BgD\2% Bn|*&v^4TjvU0Vn@pg!;9e}4`_5Q  M,JmHj#c=">!:/\'vw6.{jpJM]j.lCB?ot#wAdMH nn OX 1bj~s,%d nU]e"A 73j+)Fc_S >FY ^kHy{d;{#mql`m3%@$BMe@yHT vp z--Uz&6i,agi~h!'U%=J2e#B'E/C  # +i{WlRU "@)1AX_KmbaU/ %W6|6@I"Z+f KM( wg, zr=]NSqg\uWZ#=Aav{e?e/xU~kiB32oQ1>X lvBJxtbJGJU1p}9ik.zqjQ,pSgX]6ht,5m=7DDg.jwwujUYC]58x6]&PT&.EI#g,z([^`>ljrfAY~@xl?!)&% q5Vs,@^ p8+@%m&a|djhjf71'l& %>5`xjzk]=vd>9Hf X4tZ ##,(c9Y$uCE?`NOkz)3P U:1\I58 !_)oq7DCF;q// 0XXZE>-( GKhy>&YLtXvvcrvO6qZ5\d-r? "N5M#dM[T'AiWmT#:>%u. )o~`VD;1! ?qk [JkF_= F?p yU<X65Ba,.~m rSw $3A^xf'0oHnVrj'2#W GB3"Y`99B,u4N >YW IA1~gGV@VjJ qf)^%e`Z:FOZP3bOE) n.LOL}G;yG32Xei IJYBn7-v`-G1M], F&;qdc]@E FZtI]N0=BCX4q]87La;zV HJ}Jg dHYQnCsu0`{$jcySR@ |/|tvDiZ?qO*[Vs/%U5>#U(x`,h@vd IiJS+< ERI5m5s:| "MiL@\cJVVM&VQy H|y !og$*|b8OtsD9">@_h<}j?@6X K`^9C&&anjThpP~1]P!7/}kS^H[D@`-YdO,|JOgokh d1 mnAN )YKU^,mio Yh@t1}V2VB}zdu z3XGIWT-#o/ aXZ6GhB2F 1d45'7$rC($r`}*aT{Xrm]<^\I ZuP4 @=>W+l-6%V/RErzZ4@ Dy3]C~~UPw OQbVoE&vHB;/@bu;Qtg6EhTxp,R YXRegBlAR&N\HDA>ChSS[ Z2 )I3^IC P*O yeL VMS.BCK  #[V9.SRC.XPM.CONVERTERS]XPMTOPPM.1;1 Tue Apr 9 1991 #*[V9.SRC.XPM.CONVERTERS]XPMTOPPM.C;1+, ./ 4`- 0123KPWO567P89Jj$GHJ/* xpmtoppm.c - read an X11 pixmap file and produce a portable pixmap ** ** Copyright (C) 1991 by Jef Poskanzer. ** ** Permission to use, copy, modify, and distribute this software and its ** documentation for any purpose and without fee is hereby granted, provided ** that the above copyright notice appear in all copies and that both that ** copyright notice and this permission notice appear in supporting ** documentation. This software is provided "as is" without express or ** implied warranty. ** ** Upgraded to support XPM version 3 by ** Arnaud Le Hors (lehors@mirsa.inria.fr) ** Tue Apr 9 1991 ** ** Rainer Sinkwitz sinkwitz@ifi.unizh.ch - 21 Nov 91: ** - Bug fix, no advance of read ptr, would not read ** colors like "ac c black" because it would find ** the "c" of "ac" and then had problems with "c" ** as color. ** ** - Now understands multword X11 color names ** ** - Now reads multiple color keys. Takes the color ** of the hightest available key. Lines no longer need ** to begin with key 'c'. ** ** - expanded line buffer to from 500 to 2048 for bigger files */ #include "ppm.h" void ReadXPMFile(); static void getline(); /* number of xpmColorKeys */ #define NKEYS 5 char *xpmColorKeys[] = { "s", /* key #1: symbol */ "m", /* key #2: mono visual */ "g4", /* key #3: 4 grays visual */ "g", /* key #4: gray visual */ "c", /* key #5: color visual */ }; #ifdef NEED_STRSTR /* for systems which do not provide it */ static char * strstr(s1, s2) char *s1, *s2; { int ls2 = strlen(s2); if (ls2 == 0) return (s1); while (strlen(s1) >= ls2) { if (strncmp(s1, s2, ls2) == 0) return (s1); s1++; } return (0); } #endif void main(argc, argv) int argc; char *argv[]; { FILE *ifp; pixel *pixrow, *colors; register pixel *pP; int rows, cols, ncolors, chars_per_pixel, row; register int col; int *data; register int *ptr; ppm_init(&argc, argv); if (argc > 2) pm_usage("[xpmfile]"); if (argc == 2) ifp = pm_openr(argv[1]); else ifp = stdin; ReadXPMFile( ifp, &cols, &rows, &ncolors, &chars_per_pixel, &colors, &data); pm_close(ifp); ppm_writeppminit(stdout, cols, rows, (pixval) PPM_MAXMAXVAL, 0); pixrow = ppm_allocrow(cols); for (row = 0, ptr = data; row < rows; ++row) { for (col = 0, pP = pixrow; col < cols; ++col, ++pP, ++ptr) *pP = colors[*ptr]; ppm_writeppmrow(stdout, pixrow, cols, (pixval) PPM_MAXMAXVAL, 0); } exit(0); } #define MAX_LINE 2048 void ReadXPMFile(stream, widthP, heightP, ncolorsP, chars_per_pixelP, colorsP, dataP) FILE *stream; int *widthP; int *heightP; int *ncolorsP; int *chars_per_pixelP; pixel **colorsP; int **dataP; { char line[MAX_LINE], str1[MAX_LINE], str2[MAX_LINE]; char *t1; char *t2; int format, v, datasize; int *ptr; int *ptab; register int i, j; int flag; unsigned int curkey, key, highkey; /* current color key */ unsigned int lastwaskey; /* key read */ char curbuf[BUFSIZ]; /* current buffer */ *widthP = *heightP = *ncolorsP = *chars_per_pixelP = format = -1; flag = 0; /* to avoid getting twice a line */ /* First try to read as an XPM version 3 file */ /* Read the header line */ getline(line, sizeof(line), stream); if (sscanf(line, "/* %s */", str1) == 1 && !strncmp(str1, "XPM", 3)) { /* Read the assignment line */ getline(line, sizeof(line), stream); if (strncmp(line, "static char", 11)) pm_error("error scanning assignment line", 0, 0, 0, 0, 0); /* Read the hints line */ getline(line, sizeof(line), stream); /* skip the comment line if any */ if (!strncmp(line, "/*", 2)) { while (!strstr(line, "*/")) getline(line, sizeof(line), stream); getline(line, sizeof(line), stream); } if (sscanf(line, "\"%d %d %d %d\",", widthP, heightP, ncolorsP, chars_per_pixelP) != 4) pm_error("error scanning hints line", 0, 0, 0, 0, 0); /* Allocate space for color table. */ if (*chars_per_pixelP <= 2) { /* Up to two chars per pixel, we can use an indexed table. */ v = 1; for (i = 0; i < *chars_per_pixelP; ++i) v *= 256; *colorsP = ppm_allocrow(v); } else { /* Over two chars per pixel, we fall back on linear search. */ *colorsP = ppm_allocrow(*ncolorsP); ptab = (int *) malloc(*ncolorsP * sizeof(int)); } /* Read the color table */ for (i = 0; i < *ncolorsP; i++) { getline(line, sizeof(line), stream); /* skip the comment line if any */ if (!strncmp(line, "/*", 2)) getline(line, sizeof(line), stream); /* read the chars */ if ((t1 = index(line, '"')) == NULL) pm_error("error scanning color table", 0, 0, 0, 0, 0); else t1++; strncpy(str1, t1, *chars_per_pixelP); str1[*chars_per_pixelP] = '\0'; t1++; t1++; v = 0; for (j = 0; j < *chars_per_pixelP; ++j) v = (v << 8) + str1[j]; /* * read color keys and values */ curkey = 0; highkey = 1; lastwaskey = 0; t2 = t1; while ( 1 ) { for (t1=t2 ;; t1++) if (*t1 != ' ' && *t1 != ' ') break; for (t2 = t1;; t2++) if (*t2 == ' ' || *t2 == ' ' || *t2 == '"') break; if (t2 == t1) break; strncpy(str2, t1, t2 - t1); str2[t2 - t1] = '\0'; if (!lastwaskey) { for (key = 1; key < NKEYS + 1; key++) if (!strcmp(xpmColorKeys[key - 1], str2)) break; } else key = NKEYS + 1; if (key > NKEYS) { /* append name */ if (!curkey) pm_error("error scanning color table", 0, 0, 0, 0, 0); if (!lastwaskey) strcat(curbuf, " "); /* append space */ strcat(curbuf, str2); /* append buf */ lastwaskey = 0; } if (key <= NKEYS) { /* new key */ if (curkey > highkey) { /* flush string */ if (*chars_per_pixelP <= 2) /* Index into table. */ (*colorsP)[v] = ppm_parsecolor(curbuf, (pixval) PPM_MAXMAXVAL); else { /* Set up linear search table. */ (*colorsP)[i] = ppm_parsecolor(curbuf, (pixval) PPM_MAXMAXVAL); ptab[i] = v; } highkey = curkey; } curkey = key; /* set new key */ curbuf[0] = '\0'; /* reset curbuf */ lastwaskey = 1; } if (*t2 == '"') break; } if (curkey > highkey) { if (*chars_per_pixelP <= 2) /* Index into table. */ (*colorsP)[v] = ppm_parsecolor(curbuf, (pixval) PPM_MAXMAXVAL); else { /* Set up linear search table. */ (*colorsP)[i] = ppm_parsecolor(curbuf, (pixval) PPM_MAXMAXVAL); ptab[i] = v; }  R VMS.BCK  #[V9.SRC.XPM.CONVERTERS]XPMTOPPM.C;1w highkey = curkey; } if (highkey == 1) pm_error("error scanning color table", 0, 0, 0, 0, 0); } /* Read pixels. */ getline(line, sizeof(line), stream); /* skip the comment line if any */ if (!strncmp(line, "/*", 2)) getline(line, sizeof(line), stream); } else { /* try as an XPM version 1 file */ /* Read the initial defines. */ for (;;) { if (flag) getline(line, sizeof(line), stream); else flag++; if (sscanf(line, "#define %s %d", str1, &v) == 2) { if ((t1 = rindex(str1, '_')) == NULL) t1 = str1; else ++t1; if (!strcmp(t1, "format")) format = v; else if (!strcmp(t1, "width")) *widthP = v; else if (!strcmp(t1, "height")) *heightP = v; else if (!strcmp(t1, "ncolors")) *ncolorsP = v; else if (!strcmp(t1, "pixel")) *chars_per_pixelP = v; } else if (!strncmp(line, "static char", 11)) { if ((t1 = rindex(line, '_')) == NULL) t1 = line; else ++t1; break; } } if (format == -1) pm_error("missing or invalid format", 0, 0, 0, 0, 0); if (format != 1) pm_error("can't handle XPM version %d", format, 0, 0, 0, 0); if (*widthP == -1) pm_error("missing or invalid width", 0, 0, 0, 0, 0); if (*heightP == -1) pm_error("missing or invalid height", 0, 0, 0, 0, 0); if (*ncolorsP == -1) pm_error("missing or invalid ncolors", 0, 0, 0, 0, 0); if (*chars_per_pixelP == -1) pm_error("missing or invalid chars_per_pixel", 0, 0, 0, 0, 0); if (*chars_per_pixelP > 2) pm_message("warning, chars_per_pixel > 2 uses a lot of memory" ,0, 0, 0, 0, 0); /* If there's a monochrome color table, skip it. */ if (!strncmp(t1, "mono", 4)) { for (;;) { getline(line, sizeof(line), stream); if (!strncmp(line, "static char", 11)) break; } } /* Allocate space for color table. */ if (*chars_per_pixelP <= 2) { /* Up to two chars per pixel, we can use an indexed table. */ v = 1; for (i = 0; i < *chars_per_pixelP; ++i) v *= 256; *colorsP = ppm_allocrow(v); } else { /* Over two chars per pixel, we fall back on linear search. */ *colorsP = ppm_allocrow(*ncolorsP); ptab = (int *) malloc(*ncolorsP * sizeof(int)); } /* Read color table. */ for (i = 0; i < *ncolorsP; ++i) { getline(line, sizeof(line), stream); if ((t1 = index(line, '"')) == NULL) pm_error("error scanning color table", 0, 0, 0, 0, 0); if ((t2 = index(t1 + 1, '"')) == NULL) pm_error("error scanning color table", 0, 0, 0, 0, 0); if (t2 - t1 - 1 != *chars_per_pixelP) pm_error("wrong number of chars per pixel in color table", 0, 0, 0, 0, 0); strncpy(str1, t1 + 1, t2 - t1 - 1); str1[t2 - t1 - 1] = '\0'; if ((t1 = index(t2 + 1, '"')) == NULL) pm_error("error scanning color table", 0, 0, 0, 0, 0); if ((t2 = index(t1 + 1, '"')) == NULL) pm_error("error scanning color table", 0, 0, 0, 0, 0); strncpy(str2, t1 + 1, t2 - t1 - 1); str2[t2 - t1 - 1] = '\0'; v = 0; for (j = 0; j < *chars_per_pixelP; ++j) v = (v << 8) + str1[j]; if (*chars_per_pixelP <= 2) /* Index into table. */ (*colorsP)[v] = ppm_parsecolor(str2, (pixval) PPM_MAXMAXVAL); else { /* Set up linear search table. */ (*colorsP)[i] = ppm_parsecolor(str2, (pixval) PPM_MAXMAXVAL); ptab[i] = v; } } /* Read pixels. */ for (;;) { getline(line, sizeof(line), stream); if (!strncmp(line, "static char", 11)) break; } } datasize = *widthP * *heightP; *dataP = (int *) malloc(datasize * sizeof(int)); if (*dataP == 0) pm_error("out of memory", 0, 0, 0, 0, 0); i = 0; ptr = *dataP; for (;;) { if (flag) getline(line, sizeof(line), stream); else flag++; /* Find the open quote. */ if ((t1 = index(line, '"')) == NULL) pm_error("error scanning pixels", 0, 0, 0, 0, 0); ++t1; /* Handle pixels until a close quote or the end of the image. */ while (*t1 != '"') { v = 0; for (j = 0; j < *chars_per_pixelP; ++j) v = (v << 8) + *t1++; if (*chars_per_pixelP <= 2) /* Index into table. */ *ptr++ = v; else { /* Linear search into table. */ for (j = 0; j < *ncolorsP; ++j) if (ptab[j] == v) goto gotit; pm_error("unrecognized pixel in line \"%s\"", line, 0, 0, 0, 0); gotit: *ptr++ = j; } ++i; if (i >= datasize) return; } } } static void getline(line, size, stream) char *line; int size; FILE *stream; { if (fgets(line, MAX_LINE, stream) == NULL) pm_error("EOF / read error", 0, 0, 0, 0, 0); if (strlen(line) == MAX_LINE - 1) pm_error("line too long", 0, 0, 0, 0, 0); } *[V9.SRC.XPM]CREATE.C;1+, .6/ 464-0123KPWO7567" 89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * create.c: * * * * XPM library * * Create an X image and possibly its related shape mask * * from the given xpmInternAttrib. * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:ctype.h" #else #include #endif LFUNC(xpmVisualType, int, (Visual *visual)); LFUNC(SetColor, int, (Display * display, Colormap colormap, char *colorname, unsigned int color_index, Pixel * image_pixel, Pixel * mask_pixel, unsigned int * mask_pixel_index, Pixel ** pixels, unsigned int * npixels, XpmAttributes *attributes)); LFUNC(CreateColors, int, (Display *display, XpmAttributes *attributes, char ***ct, unsigned int ncolors, Pixel *ip, Pixel *mp, unsigned int *mask_pixel, Pixel **pixels, unsigned int *npixels)); LFUNC(CreateXImage, int, (Display * display, Visual * visual, unsigned int depth, unsigned int width, unsigned int height, XImage ** image_return)); LFUNC(SetImagePixels, void, (XImage * image, unsigned int width, unsigned int height, unsigned int *pixelindex, Pixel * pixels)); LFUNC(SetImagePixels32, void, (XImage * image, unsigned int width, unsigned int height, unsigned int *pixelindex, Pixel * pixels)); LFUNC(SetImagePixels16, void, (XImage * image, unsigned int width, unsigned int height, unsigned int *pixelindex, Pixel * pixels)); LFUNC( }o VMS.BCK [V9.SRC.XPM]CREATE.C;1.C;11Y.DOC;16bSetImagePixels8, void, (XImage * image, unsigned int width, unsigned int height, unsigned int *pixelindex, Pixel * pixels)); LFUNC(SetImagePixels1, void, (XImage * image, unsigned int width, unsigned int height, unsigned int *pixelindex, Pixel * pixels)); #ifdef NEED_STRCASECMP LFUNC(strcasecmp, int, (char *s1, char *s2)); /* * in case strcasecmp is not provided by the system here is one * which does the trick */ static int strcasecmp(s1, s2) register char *s1, *s2; { register int c1, c2; while (*s1 && *s2) { c1 = isupper(*s1) ? tolower(*s1) : *s1; c2 = isupper(*s2) ? tolower(*s2) : *s2; if (c1 != c2) return (1); s1++; s2++; } if (*s1 || *s2) return (1); return (0); } #endif /* * return the default color key related to the given visual */ static int xpmVisualType(visual) Visual *visual; { switch (visual->class) { case StaticGray: case GrayScale: switch (visual->map_entries) { case 2: return (MONO); case 4: return (GRAY4); default: return (GRAY); } default: return (COLOR); } } /* * set the color pixel related to the given colorname, * return 0 if success, 1 otherwise. */ static int SetColor(display, colormap, colorname, color_index, image_pixel, mask_pixel, mask_pixel_index, pixels, npixels, attributes) Display *display; Colormap colormap; char *colorname; unsigned int color_index; Pixel *image_pixel, *mask_pixel; unsigned int *mask_pixel_index; Pixel **pixels; unsigned int *npixels; XpmAttributes *attributes; { XColor xcolor; if (strcasecmp(colorname, TRANSPARENT_COLOR)) { if (!XParseColor(display, colormap, colorname, &xcolor)) return(1); else if (!XAllocColor(display, colormap, &xcolor)) { if (attributes && (attributes->valuemask & XpmCloseness) && attributes->closeness != 0) { XColor *cols; unsigned int ncols,i,closepix; long int closediff,closeness = attributes->closeness; if (attributes && attributes->valuemask & XpmDepth) ncols = 1 << attributes->depth; else ncols = 1 << DefaultDepth(display, DefaultScreen(display)); cols = (XColor*)calloc(ncols,sizeof(XColor)); for (i = 0; i < ncols; ++i) cols[i].pixel = i; XQueryColors(display,colormap,cols,ncols); for (i = 0, closediff = 0x7FFFFFFF; i < ncols; ++i) { #define COLOR_FACTOR 3 #define BRIGHTNESS_FACTOR 1 long int newclosediff = COLOR_FACTOR * ( abs((long)xcolor.red - (long)cols[i].red) + abs((long)xcolor.green - (long)cols[i].green) + abs((long)xcolor.blue - (long)cols[i].blue)) + BRIGHTNESS_FACTOR * abs( ((long)xcolor.red+(long)xcolor.green+(long)xcolor.blue) - ((long)cols[i].red+(long)cols[i].green+(long)cols[i].blue)); if (newclosediff < closediff) { closepix = i; closediff = newclosediff; } } if ((long)cols[closepix].red >= (long)xcolor.red - closeness && (long)cols[closepix].red <= (long)xcolor.red + closeness && (long)cols[closepix].green >= (long)xcolor.green - closeness && (long)cols[closepix].green <= (long)xcolor.green + closeness && (long)cols[closepix].blue >= (long)xcolor.blue - closeness && (long)cols[closepix].blue <= (long)xcolor.blue + closeness) { xcolor = cols[closepix]; free(cols); if (!XAllocColor(display, colormap, &xcolor)) return (1); } else { free(cols); return (1); } } else return (1); } *image_pixel = xcolor.pixel; *mask_pixel = 1; (*pixels)[*npixels] = xcolor.pixel; (*npixels)++; } else { *image_pixel = 0; *mask_pixel = 0; *mask_pixel_index = color_index;/* store the color table index */ } return (0); } static int CreateColors(display, attributes, ct, ncolors, ip, mp, mask_pixel, pixels, npixels) Display *display; XpmAttributes *attributes; char ***ct; unsigned int ncolors; Pixel *ip; Pixel *mp; unsigned int *mask_pixel; /* mask pixel index */ Pixel **pixels; /* allocated pixels */ unsigned int *npixels; /* number of allocated pixels */ { /* variables stored in the XpmAttributes structure */ Visual *visual; Colormap colormap; XpmColorSymbol *colorsymbols; unsigned int numsymbols; char *colorname; unsigned int a, b, l; Boolean pixel_defined; unsigned int key; XpmColorSymbol *cs; char **cts; int ErrorStatus = XpmSuccess; char *s; int cts_index; /* * retrieve information from the XpmAttributes */ if (attributes && attributes->valuemask & XpmColorSymbols) { colorsymbols = attributes->colorsymbols; numsymbols = attributes->numsymbols; } else numsymbols = 0; if (attributes && attributes->valuemask & XpmVisual) visual = attributes->visual; else visual = DefaultVisual(display, DefaultScreen(display)); if (attributes && attributes->valuemask & XpmColormap) colormap = attributes->colormap; else colormap = DefaultColormap(display, DefaultScreen(display)); key = xpmVisualType(visual); switch(key) { case MONO: cts_index = 2; break; case GRAY4: cts_index = 3; break; case GRAY: cts_index = 4; break; case COLOR: cts_index = 5; break; } for (a = 0; a < ncolors; a++, ct++, ip++, mp++) { colorname = NULL; pixel_defined = False; cts = *ct; /* * look for a defined symbol */ if (numsymbols && cts[1]) { s = cts[1]; for (l = 0, cs = colorsymbols; l < numsymbols; l++, cs++) if ((!cs->name && cs->value && cts[cts_index] && !strcasecmp(cs->value,cts[cts_index])) || cs->name && !strcmp(cs->name, s)) break; if (l != numsymbols) { if (cs->name && cs->value) colorname = cs->value; else pixel_defined = True; } } if (!pixel_defined) { /* pixel not given as symbol value */ if (colorname) { /* colorname given as symbol value */ if (!SetColor(display, colormap, colorname, a, ip, mp, mask_pixel, pixels, npixels, attributes)) pixel_defined = True; else ErrorStatus = XpmColorError; } b = key; while (!pixel_defined && b > 1) { if (cts[b]) { if (!SetColor(display, colormap, cts[b], a, ip, mp, mask_pixel, pixels, npixels, attributes)) { pixel_defined = True; break; } else ErrorStatus = XpmColorError; } b--; } b = key + 1; while (!pixel_defined && b < NKEYS + 1) { if (cts[b]) { if (!SetColor(display, colormap, cts[b], a, ip, mp, mask_pixel, pixels, npixels, attributes)) { pixel_defined = True; break; } else ErrorStatus = XpmColorError; } b++; } if (!pixel_defined) return (XpmColorFailed); } else { *ip = colorsymbols[l].pixel; *mp = 1; } } return (ErrorStatus); } /* function call in case of error, frees only locally allocated variables */ #undef RETURN #ifdef Debug /* * XDestroyImage free the image data but mnemosyne don't know about it * so I free them by hand to avoid mnemalyse report it as lost data. */ #define RETURN(status) \ { if (image) { \ free(image->data); \ XDestroyImage(image); } \ if (shapeimage) { \ free(shapeimage->data); \ XDestroyImage(shapeimage); } \ if (image_pixels) free(image_pixels); \ if (mask_pixels) free(mask_pixels); \ if (npixels) XFreeColors(display, colormap, pixels, npixels, 0); \ if (pixels) free(pixels); \ return (status); } #else #define RETURN(status) \ { if (image) XDestroyImage(image); \ if (shapeimage) XDestroyImage(shapeimage); \ if (image_pixels) free(image_ W VMS.BCK [V9.SRC.XPM]CREATE.C;11C;1;1.DOC;16]{pixels); \ if (mask_pixels) free(mask_pixels); \ if (npixels) XFreeColors(display, colormap, pixels, npixels, 0); \ if (pixels) free(pixels); \ return (status); } #endif xpmCreateImage(display, attrib, image_return, shapeimage_return, attributes) Display *display; xpmInternAttrib *attrib; XImage **image_return; XImage **shapeimage_return; XpmAttributes *attributes; { /* variables stored in the XpmAttributes structure */ Visual *visual; Colormap colormap; unsigned int depth; /* variables to return */ XImage *image = NULL; XImage *shapeimage = NULL; unsigned int mask_pixel; int ErrorStatus; /* calculation variables */ Pixel *image_pixels = NULL; Pixel *mask_pixels = NULL; Pixel *pixels = NULL; /* allocated pixels */ unsigned int npixels = 0; /* number of allocated pixels */ /* * retrieve information from the XpmAttributes */ if (attributes && attributes->valuemask & XpmVisual) visual = attributes->visual; else visual = DefaultVisual(display, DefaultScreen(display)); if (attributes && attributes->valuemask & XpmColormap) colormap = attributes->colormap; else colormap = DefaultColormap(display, DefaultScreen(display)); if (attributes && attributes->valuemask & XpmDepth) depth = attributes->depth; else depth = DefaultDepth(display, DefaultScreen(display)); ErrorStatus = XpmSuccess; /* * malloc pixels index tables */ image_pixels = (Pixel *) malloc(sizeof(Pixel) * attrib->ncolors); if (!image_pixels) return(XpmNoMemory); mask_pixels = (Pixel *) malloc(sizeof(Pixel) * attrib->ncolors); if (!mask_pixels) RETURN(ErrorStatus); mask_pixel = UNDEF_PIXEL; /* maximum of allocated pixels will be the number of colors */ pixels = (Pixel *) malloc(sizeof(Pixel) * attrib->ncolors); if (!pixels) RETURN(ErrorStatus); /* * get pixel colors, store them in index tables */ ErrorStatus = CreateColors(display, attributes, attrib->colorTable, attrib->ncolors, image_pixels, mask_pixels, &mask_pixel, &pixels, &npixels); if (ErrorStatus != XpmSuccess && (ErrorStatus < 0 || attributes && (attributes->valuemask & XpmExactColors) && attributes->exactColors)) RETURN(ErrorStatus); /* * create the image */ if (image_return) { ErrorStatus = CreateXImage(display, visual, depth, attrib->width, attrib->height, &image); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); /* * set the image data * * In case depth is 1 or bits_per_pixel is 4, 6, 8, 24 or 32 use * optimized functions, otherwise use slower but sure general one. * */ if (image->depth == 1) SetImagePixels1(image, attrib->width, attrib->height, attrib->pixelindex, image_pixels); else if (image->bits_per_pixel == 8) SetImagePixels8(image, attrib->width, attrib->height, attrib->pixelindex, image_pixels); else if (image->bits_per_pixel == 16) SetImagePixels16(image, attrib->width, attrib->height, attrib->pixelindex, image_pixels); else if (image->bits_per_pixel == 32) SetImagePixels32(image, attrib->width, attrib->height, attrib->pixelindex, image_pixels); else SetImagePixels(image, attrib->width, attrib->height, attrib->pixelindex, image_pixels); } /* * create the shape mask image */ if (mask_pixel != UNDEF_PIXEL && shapeimage_return) { ErrorStatus = CreateXImage(display, visual, 1, attrib->width, attrib->height, &shapeimage); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); SetImagePixels1(shapeimage, attrib->width, attrib->height, attrib->pixelindex, mask_pixels); } free(mask_pixels); free(pixels); /* * if requested store used pixels in the XpmAttributes structure */ if (attributes && (attributes->valuemask & XpmReturnInfos || attributes->valuemask & XpmReturnPixels)) { if (mask_pixel != UNDEF_PIXEL) { Pixel *pixels, *p1, *p2; unsigned int a; attributes->npixels = attrib->ncolors - 1; pixels = (Pixel *) malloc(sizeof(Pixel) * attributes->npixels); if (pixels) { p1 = image_pixels; p2 = pixels; for (a = 0; a < attrib->ncolors; a++, p1++) if (a != mask_pixel) *p2++ = *p1; attributes->pixels = pixels; } else { /* if error just say we can't return requested data */ attributes->valuemask &= ~XpmReturnPixels; attributes->valuemask &= ~XpmReturnInfos; attributes->pixels = NULL; attributes->npixels = 0; } free(image_pixels); } else { attributes->pixels = image_pixels; attributes->npixels = attrib->ncolors; } attributes->mask_pixel = mask_pixel; } else free(image_pixels); /* * return created images */ if (image_return) *image_return = image; if (shapeimage_return) *shapeimage_return = shapeimage; return (ErrorStatus); } /* * Create an XImage */ static int CreateXImage(display, visual, depth, width, height, image_return) Display *display; Visual *visual; unsigned int depth; unsigned int width; unsigned int height; XImage **image_return; { int bitmap_pad; /* first get bitmap_pad */ if (depth > 16) bitmap_pad = 32; else if (depth > 8) bitmap_pad = 16; else bitmap_pad = 8; /* then create the XImage with data = NULL and bytes_per_line = 0 */ *image_return = XCreateImage(display, visual, depth, ZPixmap, 0, 0, width, height, bitmap_pad, 0); if (!*image_return) return (XpmNoMemory); /* now that bytes_per_line must have been set properly alloc data */ (*image_return)->data = (char *) malloc((*image_return)->bytes_per_line * height); if (!(*image_return)->data) { XDestroyImage(*image_return); *image_return = NULL; return (XpmNoMemory); } return (XpmSuccess); } /* * The functions below are written from X11R5 MIT's code (XImUtil.c) * * The idea is to have faster functions than the standard XPutPixel function * to build the image data. Indeed we can speed up things by suppressing tests * performed for each pixel. We do the same tests but at the image level. * We also assume that we use only ZPixmap images with null offsets. */ LFUNC(_putbits, void, (register char *src, int dstoffset, register int numbits, register char *dst)); LFUNC(_XReverse_Bytes, int, (register unsigned char *bpt, register int nb)); static unsigned char Const _reverse_byte[0x100] = { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, 0x05, 0x85, 0x45, 0x Kj VMS.BCK [V9.SRC.XPM]CREATE.C;11C;1FY.DOC;16n#c5, 0x25, 0xa5, 0x65, 0xe5, 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff }; static int _XReverse_Bytes(bpt, nb) register unsigned char *bpt; register int nb; { do { *bpt = _reverse_byte[*bpt]; bpt++; } while (--nb > 0); return; } void xpm_xynormalizeimagebits(bp, img) register unsigned char *bp; register XImage *img; { register unsigned char c; if (img->byte_order != img->bitmap_bit_order) { switch (img->bitmap_unit) { case 16: c = *bp; *bp = *(bp + 1); *(bp + 1) = c; break; case 32: c = *(bp + 3); *(bp + 3) = *bp; *bp = c; c = *(bp + 2); *(bp + 2) = *(bp + 1); *(bp + 1) = c; break; } } if (img->bitmap_bit_order == MSBFirst) _XReverse_Bytes(bp, img->bitmap_unit >> 3); } void xpm_znormalizeimagebits(bp, img) register unsigned char *bp; register XImage *img; { register unsigned char c; switch (img->bits_per_pixel) { case 4: *bp = ((*bp >> 4) & 0xF) | ((*bp << 4) & ~0xF); break; case 16: c = *bp; *bp = *(bp + 1); *(bp + 1) = c; break; case 24: c = *(bp + 2); *(bp + 2) = *bp; *bp = c; break; case 32: c = *(bp + 3); *(bp + 3) = *bp; *bp = c; c = *(bp + 2); *(bp + 2) = *(bp + 1); *(bp + 1) = c; break; } } static unsigned char Const _lomask[0x09] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff}; static unsigned char Const _himask[0x09] = { 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00}; static void _putbits(src, dstoffset, numbits, dst) register char *src; /* address of source bit string */ int dstoffset; /* bit offset into destination; * range is 0-31 */ register int numbits; /* number of bits to copy to * destination */ register char *dst; /* address of destination bit string */ { register unsigned char chlo, chhi; int hibits; dst = dst + (dstoffset >> 3); dstoffset = dstoffset & 7; hibits = 8 - dstoffset; chlo = *dst & _lomask[dstoffset]; for (;;) { chhi = (*src << dstoffset) & _himask[dstoffset]; if (numbits <= hibits) { chhi = chhi & _lomask[dstoffset + numbits]; *dst = (*dst & _himask[dstoffset + numbits]) | chlo | chhi; break; } *dst = chhi | chlo; dst++; numbits = numbits - hibits; chlo = (unsigned char) (*src & _himask[hibits]) >> hibits; src++; if (numbits <= dstoffset) { chlo = chlo & _lomask[numbits]; *dst = (*dst & _himask[numbits]) | chlo; break; } numbits = numbits - dstoffset; } } /* * Default method to write pixels into a Z image data structure. * The algorithm used is: * * copy the destination bitmap_unit or Zpixel to temp * normalize temp if needed * copy the pixel bits into the temp * renormalize temp if needed * copy the temp back into the destination image data */ static void SetImagePixels(image, width, height, pixelindex, pixels) XImage *image; unsigned int width; unsigned int height; unsigned int *pixelindex; Pixel *pixels; { register char *src; register char *dst; register unsigned int *iptr; register int x, y, i; register char *data; Pixel pixel, px; int nbytes, depth, ibu, ibpp; data = image->data; iptr = pixelindex; depth = image->depth; if (image->depth == 1) { ibu = image->bitmap_unit; for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { pixel = pixels[*iptr]; for (i = 0, px = pixel; i < sizeof(unsigned long); i++, px >>= 8) ((unsigned char *) &pixel)[i] = px; src = &data[XYINDEX(x, y, image)]; dst = (char *) &px; px = 0; nbytes = ibu >> 3; for (i = nbytes; --i >= 0;) *dst++ = *src++; XYNORMALIZE(&px, image); _putbits((char *) &pixel, (x % ibu), 1, (char *) &px); XYNORMALIZE(&px, image); src = (char *) &px; dst = &data[XYINDEX(x, y, image)]; for (i = nbytes; --i >= 0;) *dst++ = *src++; } } else { ibpp = image->bits_per_pixel; for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { pixel = pixels[*iptr]; if (depth == 4) pixel &= 0xf; for (i = 0, px = pixel; i < sizeof(unsigned long); i++, px >>= 8) ((unsigned char *) &pixel)[i] = px; src = &data[ZINDEX(x, y, image)]; dst = (char *) &px; px = 0; nbytes = (ibpp + 7) >> 3; for (i = nbytes; --i >= 0;) *dst++ = *src++; ZNORMALIZE(&px, image); _putbits((char *) &pixel, (x * ibpp) & 7, ibpp, (char *) &px); ZNORMALIZE(&px, image); src = (char *) &px; dst = &data[ZINDEX(x, y, image)]; for (i = nbytes; --i >= 0;) *dst++ = *src++; } } } /* * write pixels into a 32-bits Z image data structure */ #ifndef WORD64 static unsigned long byteorderpixel = MSBFirst << 24; #endif static void SetImagePixels32(image, width, height, pixelindex, pixels) XImage *image; unsigned int width; unsigned int height; unsigned int *pixelindex; Pixel *pixels; { register unsigned char *addr; register unsigned char *data; register unsigned int *iptr; register int x, y; Pixel pixel; data = (unsigned char *) image->data; iptr = pixelindex; #ifndef WORD64 if (*((char *) &byteorderpixel) == image->byte_order) { for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX32(x, y, image)]; *((unsigned long *)addr) = pixels[*iptr]; } } else #endif if (image->byte_order == MSBFirst) for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX32(x, y, image)]; pixel = pixels[*iptr]; addr[0] = pixel >> 24; addr[1] = pixel >> 16; addr[2] = pixel >> 8; addr[3] = pixel; } else for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX32(x, y, image)]; pixel = pixels[*iptr]; addr[0] = pixel; addr[1] = pixel >> 8; addr[2] = pixel >> 16; addr[3] = pixel >> 24; } } /* * write pixels into a 16-bits Z image data structure */ static void SetImagePixels16(image, width, height, pixelindex, pixels) XImage *image; unsigned int width; unsigned int height; unsigned int *pixelindex; Pixel *pixels; { register unsigned char *addr; register unsigned char *data; register unsigned int *iptr; register int x, y; data = (unsigned char *) image->data; iptr = pixelindex; if (image->byte_order == MSBFirst) for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX16(x, y, image)]; addr[0] = pixels[*iptr] >> 8; addr[1] = pixels[*iptr]; } else for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX16(x, y, image)]; addr[0] = pixels[*iptr]; addr[1] = pixels[*iptr] >> 8; } } /* * write pixels into a 8-bits Z image data structure */ static void SetImagePixels8(image, width, height, pixelindex, pixels) XImage *image; unsigned int width; unsigned int height; unsigned int *pixelindex; Pixel *pixels; { register char *data; register unsigned int *iptr; register in J VMS.BCK [V9.SRC.XPM]CREATE.C;11C;1FY.DOC;162t x, y; data = image->data; iptr = pixelindex; for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) data[ZINDEX8(x, y, image)] = pixels[*iptr]; } /* * write pixels into a 1-bit depth image data structure and **offset null** */ static void SetImagePixels1(image, width, height, pixelindex, pixels) XImage *image; unsigned int width; unsigned int height; unsigned int *pixelindex; Pixel *pixels; { register unsigned int *iptr; register int x, y; register char *data; if (image->byte_order != image->bitmap_bit_order) SetImagePixels(image, width, height, pixelindex, pixels); else { data = image->data; iptr = pixelindex; if (image->bitmap_bit_order == MSBFirst) for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { if (pixels[*iptr] & 1) data[ZINDEX1(x, y, image)] |= 0x80 >> (x & 7); else data[ZINDEX1(x, y, image)] &= ~(0x80 >> (x & 7)); } else for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { if (pixels[*iptr] & 1) data[ZINDEX1(x, y, image)] |= 1 << (x & 7); else data[ZINDEX1(x, y, image)] &= ~(1 << (x & 7)); } } } *[V9.SRC.XPM]DATA.C;1+, ./ 4K-0123KPWO56# 7 89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * data.c: * * * * XPM library * * IO utilities * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ /* Official version number */ static char *RCS_Version = "$XpmVersion: 3.2c $"; /* Internal version number */ static char *RCS_Id = "$Id: xpm.shar,v 3.13 1992/12/29 16:05:26 lehors Exp $"; #include "xpmP.h" #ifdef VMS #include "sys$library:stat.h" #include "sys$library:ctype.h" #else #include #include #endif FUNC(atoui, unsigned int, (char *p, unsigned int l, unsigned int *ui_return)); LFUNC(ParseComment, int, (xpmData *mdata)); unsigned int atoui(p, l, ui_return) register char *p; unsigned int l; unsigned int *ui_return; { register int n, i; n = 0; for (i = 0; i < l; i++) if (*p >= '0' && *p <= '9') n = n * 10 + *p++ - '0'; else break; if (i != 0 && i == l) { *ui_return = n; return 1; } else return 0; } static int ParseComment(mdata) xpmData *mdata; { FILE *file = mdata->stream.file; register int c; register unsigned int n = 0, a; unsigned int notend; char *s, *s2; s = mdata->Comment; *s = mdata->Bcmt[0]; /* skip the string beginning comment */ s2 = mdata->Bcmt; do { c = getc(file); *++s = c; n++; s2++; } while (c == *s2 && *s2 != '\0' && c != EOF && c != mdata->Bos); if (*s2 != '\0') { /* this wasn't the beginning of a comment */ /* put characters back in the order that we got them */ for (a = n; a > 0; a--, s--) ungetc(*s, file); return; } /* store comment */ mdata->Comment[0] = *s; s = mdata->Comment; notend = 1; n = 0; while (notend) { s2 = mdata->Ecmt; while (*s != *s2 && c != EOF && c != mdata->Bos) { c = getc(file); *++s = c; n++; } mdata->CommentLength = n; do { c = getc(file); n++; *++s = c; s2++; } while (c == *s2 && *s2 != '\0' && c != EOF && c != mdata->Bos); if (*s2 == '\0') { /* this is the end of the comment */ notend = 0; ungetc(*s, file); } } } /* * skip to the end of the current string and the beginning of the next one */ xpmNextString(mdata) xpmData *mdata; { if (!mdata->type) mdata->cptr = (mdata->stream.data)[++mdata->line]; else { register int c; FILE *file = mdata->stream.file; /* get to the end of the current string */ if (mdata->Eos) while ((c = getc(file)) != mdata->Eos && c != EOF); /* then get to the beginning of the next string * looking for possible comment */ if (mdata->Bos) { while ((c = getc(file)) != mdata->Bos && c != EOF) if (mdata->Bcmt && c == mdata->Bcmt[0]) ParseComment(mdata); } else { /* XPM2 natural */ while (mdata->Bcmt && (c = getc(file)) == mdata->Bcmt[0]) ParseComment(mdata); ungetc(c, file); } } } /* * skip whitespace and compute the following unsigned int, * returns 1 if one is found and 0 if not */ int xpmNextUI(mdata, ui_return) xpmData *mdata; unsigned int *ui_return; { char buf[BUFSIZ]; int l; l = xpmNextWord(mdata, buf); return atoui(buf, l, ui_return); } /* * skip whitespace and return the following word */ unsigned int xpmNextWord(mdata, buf) xpmData *mdata; char *buf; { register unsigned int n = 0; int c; if (!mdata->type) { while (isspace(c = *mdata->cptr) && c != mdata->Eos) mdata->cptr++; do { c = *mdata->cptr++; *buf++ = c; n++; } while (!isspace(c) && c != mdata->Eos); n--; mdata->cptr--; } else { FILE *file = mdata->stream.file; while (isspace(c = getc(file)) && c != mdata->Eos); while (!isspace(c) && c != mdata->Eos && c != EOF) { *buf++ = c; n++; c = getc(file); } ungetc(c, file); } return (n); } /* * return end of string - WARNING: malloc! */ int xpmGetString(mdata, sptr, l) xpmData *mdata; char **sptr; unsigned int *l; { unsigned int i, n = 0; int c; char *p, *q, buf[BUFSIZ]; if (!mdata->type) { if (mdata->cptr) { char *start; while (isspace(c = *mdata->cptr) && c != mdata->Eos) mdata->cptr++; start = mdata->cptr; while (c = *mdata->cptr) mdata->cptr++; n = mdata->cptr - start + 1; p = (char *) malloc(n); if (!p) return (XpmNoMemory); strncpy(p, start, n); } } else { FILE *file = mdata->stream.file; while (isspace(c = getc(file)) && c != mdata->Eos); if (c == EOF) return (XpmFileInvalid); p = NULL; i = 0; q = buf; p = (char *) malloc(1); while (c != mdata->Eos && c != EOF) { if (i == BUFSIZ) { /* get to the end of the buffer */ /* malloc needed memory */ q = (char *) realloc(p, n + i); if (!q) { free(p); return (XpmNoMemory); } p = q; q += n; /* and copy what we already have */ strncpy(q, buf, i); n += i; i = 0; q = buf; } *q++ = c; i++; c = getc(file); } if (c == EOF) { free(p); return (XpmFileInvalid); } if (n + i != 0) { /* malloc needed memory */ q = (c s VMS.BCK [V9.SRC.XPM]DATA.C;1R;1C;1;1.IC0;1 har *) realloc(p, n + i + 1); if (!q) { free(p); return (XpmNoMemory); } p = q; q += n; /* and copy the buffer */ strncpy(q, buf, i); n += i; p[n++] = '\0'; } else { *p = '\0'; n = 1; } ungetc(c, file); } *sptr = p; *l = n; return (XpmSuccess); } /* * get the current comment line */ xpmGetCmt(mdata, cmt) xpmData *mdata; char **cmt; { if (!mdata->type) *cmt = NULL; else if (mdata->CommentLength) { *cmt = (char *) malloc(mdata->CommentLength + 1); strncpy(*cmt, mdata->Comment, mdata->CommentLength); (*cmt)[mdata->CommentLength] = '\0'; mdata->CommentLength = 0; } else *cmt = NULL; } /* * open the given file to be read as an xpmData which is returned. */ int xpmReadFile(filename, mdata) char *filename; xpmData *mdata; { char *compressfile, buf[BUFSIZ]; struct stat status; if (!filename) { mdata->stream.file = (stdin); mdata->type = XPMFILE; } else { #ifdef ZPIPE if (((int)strlen(filename) > 2) && !strcmp(".Z", filename + (strlen(filename) - 2))) { mdata->type = XPMPIPE; sprintf(buf, "uncompress -c %s", filename); if (!(mdata->stream.file = popen(buf, "r"))) return (XpmOpenFailed); } else { if (!(compressfile = (char *) malloc(strlen(filename) + 3))) return (XpmNoMemory); strcpy(compressfile, filename); strcat(compressfile, ".Z"); if (!stat(compressfile, &status)) { sprintf(buf, "uncompress -c %s", compressfile); if (!(mdata->stream.file = popen(buf, "r"))) { free(compressfile); return (XpmOpenFailed); } mdata->type = XPMPIPE; } else { #endif if (!(mdata->stream.file = fopen(filename, "r"))) { #ifdef ZPIPE free(compressfile); #endif return (XpmOpenFailed); } mdata->type = XPMFILE; #ifdef ZPIPE } free(compressfile); } #endif } mdata->CommentLength = 0; return (XpmSuccess); } /* * open the given file to be written as an xpmData which is returned */ int xpmWriteFile(filename, mdata) char *filename; xpmData *mdata; { char buf[BUFSIZ]; if (!filename) { mdata->stream.file = (stdout); mdata->type = XPMFILE; } else { #ifdef ZPIPE if ((int)strlen(filename) > 2 && !strcmp(".Z", filename + ((int)strlen(filename) - 2))) { sprintf(buf, "compress > %s", filename); if (!(mdata->stream.file = popen(buf, "w"))) return (XpmOpenFailed); mdata->type = XPMPIPE; } else { #endif if (!(mdata->stream.file = fopen(filename, "w"))) return (XpmOpenFailed); mdata->type = XPMFILE; #ifdef ZPIPE } #endif } return (XpmSuccess); } /* * open the given array to be read or written as an xpmData which is returned */ void xpmOpenArray(data, mdata) char **data; xpmData *mdata; { mdata->type = XPMARRAY; mdata->stream.data = data; mdata->cptr = *data; mdata->line = 0; mdata->CommentLength = 0; mdata->Bcmt = mdata->Ecmt = NULL; mdata->Bos = mdata->Eos = '\0'; } /* * close the file related to the xpmData if any */ XpmDataClose(mdata) xpmData *mdata; { switch (mdata->type) { case XPMARRAY: break; case XPMFILE: if (mdata->stream.file != (stdout) && mdata->stream.file != (stdin)) fclose(mdata->stream.file); break; #ifdef ZPIPE case XPMPIPE: pclose(mdata->stream.file); break; #endif } } m*[V9.SRC.XPM]DOC.DIR;1+, ./ 4-0123 KPWO560H7Y89Ҋ;vGHJICHANGES.  COPYRIGHT.  PLAID.XPMPLAID_MASK.XPM README. *[V9.SRC.XPM.DOC]CHANGES.;1+, .!/ 4!!N- 0123KPWO"56pid7\89Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /**************************************************************************\ * * * HISTORY of user-visible changes * * * \**************************************************************************/ 3.2c (92/12/29) ENHANCEMENTS: - parsing optimized for single and double characters color - patch originally from Martin Brunecky marbru@build1.auto-trol.com BUGS CORRECTED: - XpmFreeExtensions was calling free on some argument without checking it was not NULL. - strdup was not correctly defined for systems which do not provide it. - Hans-Peter Lichtin - some bug in XpmCrDataFI.c - Sven Delmas garfield@avalanche.cs.tu-berlin.de NOTE: - there is still a bug with the creation of the clipmask on display of depth 2 but I can't find a fix because unfortunately I don't have such a rendering system and nobody gets the time to investigate for me. 3.2b (92/10/19) ENHANCEMENTS: - Create XpmReadFileToData and XpmWriteFileFromData - Dan Greening - added "close colors" support and ability to redefine color values as pixels at load time, as well as color names - Jason Patterson - errors while parsing or allocating colors now revert to other visual defaults, creating pixmap/image as expected, and returning XpmSuccess. The old behaviour of XpmColorError being returned and no pixmap/image being created can be retained by setting the exactColors attribute. - Jason Patterson BUGS CORRECTED: - SVR4 defines for including instead of - Jason Patterson - attributes->extensions and attributes->nextensions fields were not set correctly when no extensions present in file. - Simon_Scott Cornish 3.2a (92/08/17) ENHANCEMENTS: - use the mock lisp hashing function instead of the gnu emacs one, it is faster in some cases and never slower (I've not found any case). BUGS CORRECTED: - function prototypes for ansi compilers. - some memory initialization bugs (purify is just great for this). - empty strings in extensions are now correctly handled. 3.2 (92/07/06) NEW FEATURES: - both format and functions handle extensions data. This allow people to store additional data related to a pixmap. See documentation for detail. - sxpm supports the new option '-c' to use a private colormap. This is useful when displaying pixmaps using a lot of colors. - sxpm supports the new option '-v' (verbose) to get possible extensions print out on standard error. ENHANCEMENTS: - most of the code has been reworked to be improved and thus almost every function is faster. It takes less than 6 seconds of real time on a sun4 to display, with sxpm, a 487x635 pixmap using 213 colors, while it takes 32 seconds with the old library! It takes 18 seconds to display  L VMS.BCK  [V9.SRC.XPM.DOC]CHANGES.;1FY.IC0;1!a 1279x1023 screen dump using 14 colors while xwud takes 10 seconds. Of course performance improvements are not always that great, they depend on the size and number of colors but I'm sure everybody will appreciate ;-) I know how to improve it more but this will require changes in the architecture so this is not for now. Some optimizations have been contributed by gregor@kafka.saic.com (gregg hanna) and jnc@csl.biosci.arizona.edu (John N. Calley). - the Imakefile is modified to let you install sxpm - Rainer Klute - xpmP.h declares popen for Sequent platforms - Clinton Jeffery - XpmWriteFileFromImage/Pixmap rather than truncating the pixmap name to the first dot changes dots to underscores to get a valid C syntax name. BUGS CORRECTED: - there was a bug in the image creation function for some 24 bits displays. It is fixed. - allocated color pixels are now freed when an error occurs - nusser@dec1.wu-wien.ac.at (Stefan Nusser) CHANGES TO THE DOC: - the documentation describes the new XpmExtension structure and how to use it with read and write functions. 3.1 (92/02/03) ENHANCEMENTS: - sxpm now have more standard options (mainly suggested by Rainer Sinkwitz ): Usage: sxpm [options...] Where options are: [-d host:display] Display to connect to. [-g geom] Geometry of window. [-hints] Set ResizeInc for window. [-icon filename] Set pixmap for iconWindow. [-s symbol_name color_name] Overwrite color defaults. [-p symbol_name pixel_value] Overwrite color defaults. [-plaid] Read the included plaid pixmap. [filename] Read from file 'filename', and from standard input if 'filename' is '-'. [-o filename] Write to file 'filename', and to standard output if 'filename' is '-'. [-nod] Don't display in window. [-rgb filename] Search color names in the rgb text file 'filename'. if no input is specified sxpm reads from stdandard input. - Xpm functions and Ppm converters now deal with multiword colornames. patches from Rainer Sinkwitz . 3.0 (91/10/03) Functions name and defines have been modified again (sorry for that) as follows: XpmReadPixmapFile XpmReadFileToPixmap XpmWritePixmapFile XpmWriteFileFromPixmap XpmPixmapColorError XpmColorError XpmPixmapSuccess XpmSuccess XpmPixmapOpenFailed XpmOpenFailed XpmPixmapFileInvalid XpmFileInvalid XpmPixmapNoMemory XpmNoMemory XpmPixmapColorFailed XpmColorFailed To update code using Xpm you can use the included shell script called rename with the sed commands files name-3.0b-3.0c and name-3.0c-3.0. Old names still valid though. NEW FEATURES: - four new functions to work with images instead of pixmaps: XpmReadFileToImage XpmWriteFileFromImage XpmCreateImageFromData XpmCreateDataFromImage ENHANCEMENTS: Algorithms to create and scan images and pixmaps are based on the MIT's R5 code, thus they are much cleaner than old ones and should avoid any problem with any visual (yes, I trust MIT folks :-) BUGS CORRECTED: Imakefile use INCDIR instead of ROOTDIR. CHANGES TO THE DOC: - the documentation presents the four new functions. 3.0c (91/09/18) In answer to request of people functions, types and defines names have been changed as follows: XCreatePixmapFromData XpmCreatePixmapFromData XCreateDataFromPixmap XpmCreateDataFromPixmap XReadPixmapFile XpmReadPixmapFile XWritePixmapFile XpmWritePixmapFile XFreeXpmAttributes XpmFreeAttributes PixmapColorError XpmPixmapColorError PixmapSuccess XpmPixmapSuccess PixmapOpenFailed XpmPixmapOpenFailed PixmapFileInvalid XpmPixmapFileInvalid PixmapNoMemory XpmPixmapNoMemory PixmapColorFailed XpmPixmapColorFailed ColorSymbol XpmColorSymbol Generally speaking every public name begins with 'Xpm' and every private one with 'xpm'. This should avoid any possible conflict. Some files have also be renamed accordingly. NEW FEATURES: - support for VMS and two new options for sxpm: icon and hints (see manual for details) Richard Hess - DEFINES in Imakefile and Makefile.noXtree allows you to set the following: ZPIPE for un/compressing piped feature (default is on) NEED_STRCASECMP for system which doesn't provide one (default is off) - xpmtoppm.c has is own strstr function which is used if NEED_STRSTR is defined when compiling - Hugues.Leroy@irisa.fr (Hugues Leroy). BUGS CORRECTED: - many bugs have been fixed, especially for ansi compilers - Doyle C. Davidson (doyle@doyled.b23b.ingr.com) and Clifford D. Morrison (cdm%bigdaddy%edsr@uunet.UU.NET) - parser is again a little more improved 3.0b (91/09/12) This is a complete new version with a new API and where files and structures have been renamed. So this should be taken as a new starting release. This release should be quickly followed by the 3.0 because I'm planning to send it for X11R5 contrib which ends October 5th. NEW FEATURES: - support for transparent color. - support for hotspot. - a new function: XCreateDataFromPixmap to create an XPM data from a pixmap in order to be able to create a new pixmap from this data using the XCreatePixmapFromData function later on. - a new structure: XpmAttributes which replace the XpmInfo structure and which leads to a much simpler API with less arguments. - arguments such as visual, colormap and depth are optionnal, default values are taken if omitted. - parsing and allocating color failures don't simply break anymore. If another default color can be found it is used and a PixmapColorError is returned. In case no color can be found then it breaks and returns PixmapColorFailed. - for this reason the ErrorStatus codes are redefined as follows: null if full success positive if partial success negative if failure with: #define PixmapColorError 1 #define PixmapSuccess 0 #define PixmapOpenFailed -1 #define PixmapFileInvalid -2 #define PixmapNoMemory -3 #define PixmapColorFailed -4 - sxpm prints out a warning when a requested color could not be parsed or alloc'ed, and an error when none has been found. - sxpm handles pixmap with transparent color. For this purpose the plaid_mask.xpm is added to the distribution. BUGS CORRECTED: - I've again improved the memory management. - the parser is also improved. - when writting a pixmap to a file the variable name could be "plaid.xpm" which is not valid in C. Now the extension name is cut off to give "plaid" as variable name. - reading multiple words colornames such as "peach puff" where leading to non readable Xpm files. They are now skipped to have only single word colorname. Lionel Mallet (mallet@ipvpel.unipv.it). - parser was triggered by the "/" character inside string. Doyle C. Davidson (doyle@doyled.b23b.ingr.com). This is corrected. - sxpm maps the window only if the option "-nod" is not selected. CHANGES TO THE DOC: - the documentation presents the new API and features. 3.0a (91/04/10) This is an alpha version because it supports the new version of XPM, but the library interface is still the same. Indeed it will change in future release to get rid of obsolete stuff such as the typ H VMS.BCK  [V9.SRC.XPM.DOC]CHANGES.;1;1.ICN;1!e argument of the XWritePixmapFile function. ******************************* WARNING ********************************* The format is not anymore XPM2, it is XPM version 3 which is XPM2 limited to the C syntax with the key word "XPM" in place of "XPM2 C". The interface library has not changed yet but the type argument of XWritePixmapFile and the type member of XpmInfo are not used anymore. Meanwhile the library which is now called libXpm.a is backward compatible as XPM2 files can be read. But the XWritePixmapFile function only writes out XPM version 3 files. ************************************************************************* NEW FEATURES: - the library doesn't use global variables anymore, thus it should be able to share it. - sxpm has been rewritten on top of Xt, it can be used to convert files from XPM2 to XPM version 3. - xpm1to2c.perl has been upgraded to the new XPM version and renamed as xpm1to3.perl - ppmtoxpm2.c and ppmtoxpm2.1 have been upgraded too and renamed ppmtoxpm.c and ppmtoxpm.1. In addition the xpmtoppm.c and xpmtoppm.1 of the pbmplus package have been upgraded too. xpmtoppm can thus convert XPM version 1 and 3 to a portable pixmap. These files should replace the original ones which are part of the pbmplus package. See the ppm.README file for more details. - the library contains RCS variables which allows you to get revision numbers with ident (which is part of the RCS package). The Id number is an internal rcs number for my eyes only. The official one is found in Version. BUGS CORRECTED: - the memory management has been much improved in order to avoid memory leaks. - the XImage building algorythm has been changed to support correctly different visual depths. There is special code to handle depths 1, 4, 6, 8, 24, and 32 to build the image and send it in one whack, and other depths are supported by building the image with XPutPixel which is slow but sure. - similar algorithms are used to read pixmaps and write them out. CHANGES TO THE DOC: - the documentation presents the new XPM format. 2.8 (90/12/19) ******************************* WARNING ********************************* Since the last release two structures have been modified and have now bigger sizes, so ANY CODE USING THE libXPM2 NEEDS TO BE RECOMPILED. ************************************************************************* NEW FEATURES: - the ColorSymbol struct contains the new member 'pixel' which allow to override default colors by giving a pixel value (in such a case symbol value must be set to NULL), - the XpmInfo struct contains the new member 'rgb_fname' in which one can specify an rgb text file name while writing a pixmap with the XWritePixmapFile function (otherwise this member should be set to NULL). This way colorname will be searched and written out if found instead of the RGB value, - Imakefile originally provided by stolcke@ICSI.Berkeley.EDU, - the old Makefile is now distributed as Makefile.noXtree and presents install targets, - the demo application is renamed sxpm (Show XPM), creates a window of the size of the pixmap if no geometry is specified, prints out messages instead of status when an error occurs, handles the new option -p for overriding colors by giving a pixel value (not really useful but is just here to show this new feature), handles the new option -rgb for specifying an rgb text file, and ends on keypress as buttonpress, - defines for SYSV have been provided by Paul Breslaw , - the distribution includes a new directory called converters which contains xpm1to2 and xpm1to2c perl converters and a ppmtoxpm2 converter provided by Paul Breslaw who upgraded the original ppmtoxpm written by Mark W. Snitily . CHANGES TO THE DOC: - this file is created and will give old users a quick reference to changes made from one release to the next one, - documentation is changed to present the new ColorSymbol structure and the way to override colors by giving a pixel value, and to present the new XpmInfo structure and how to use it, - a man page for sxpm is added to the distrib, - the README file talks about sxpm and no more demo, and have reference to the different converters. 2.7 (90/11/12) NEW FEATURES: - XReadPixmapFile reads from stdin if filename is NULL, - XWritePixmapFile writes to stdin if filename is NULL, - the demo application handles the new option -nod for no displaying the pixmap in a window (useful when used as converter). CHANGES TO THE DOC: - documentation about the new feature. 2.6 (90/10/29) NEW FEATURES: - from nazgul@alphalpha.com (Kee Hinckley): changes to make the library usable as C++ code, and on Apollo without any warning. BUGS CORRECTED: - from nazgul@alphalpha.com (Kee Hinckley): the xpm include files was declaring XWritePixmapFile as taking in arg a Pixmap pointer instead of a Pixmap. 2.5 (90/10/17) BUGS CORRECTED: - XWritePixmapFile was not closing the file while ending normaly. 2.4 (90/09/06) NEW FEATURES: - XReadPixmapFile reads from a piped uncompress if the given filename ends by .Z or if filename.Z exists, - XWritePixmapFile writes to a piped compress if the given filename ends by .Z. BUGS CORRECTED: - demo now deals with window manager. CHANGES TO THE DOC: - documentation about compressed files management. 2.3 (90/08/30) BUGS CORRECTED: - handle monochrom display correctly, - comments can be empty. 2.2 (90/08/27) BUGS CORRECTED: - when reading some invalid free was dumping core on some machine. 2.1 (90/08/24) First distribution of XPM2. *[V9.SRC.XPM.DOC]COPYRIGHT.;1+, ./ 4- 0123KPWO56p'7G89Jj$GHJ/* * Copyright 1990-92 GROUPE BULL * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of GROUPE BULL not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. GROUPE BULL makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * GROUPE BULL disclaims all warranties with regard to this software, * including all implied warranties of merchantability and fitness, * in no event shall GROUPE BULL be liable for any special, * indirect or consequential damages or any damages * whatsoever resulting from loss of use, data or profits, * whether in an action of contract Y VMS.BCK  [V9.SRC.XPM.DOC]COPYRIGHT.;1OL;1, negligence or other tortious * action, arising out of or in connection with the use * or performance of this software. * */ Arnaud LE HORS BULL Research FRANCE -- Koala Project (XPM - X PixMap format version 2 & 3) Internet: lehors@sophia.inria.fr Surface Mail: Arnaud LE HORS, INRIA - Sophia Antipolis, 2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE Voice phone: (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F t*[V9.SRC.XPM.DOC]PLAID.XPM;1+,./ 4R- 0123KPWO56l7 89Jj$GHJ/* XPM */ static char * plaid[] = { /* plaid pixmap * width height ncolors chars_per_pixel */ "22 22 4 2 ", /* colors */ " c red m white s light_color ", "Y c green m black s lines_in_mix ", "+ c yellow m white s lines_in_dark ", "x m black s dark_color ", /* pixels */ "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", "Y Y Y Y Y x Y Y Y Y Y + x + x + x + x + x + ", "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", "x x x x x x x x x x x x x x x x x x x x x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x " } ;  *[V9.SRC.XPM.DOC]PLAID_MASK.XPM;1+, ./ 4i- 0123KPWO56&7ps89Jj$GHJ/* XPM */ static char * plaid[] = { /* plaid pixmap * width height ncolors chars_per_pixel */ "22 22 5 2", /* colors */ ". c red m white s light_color ", "Y c green m black s lines_in_mix ", "+ c yellow m white s lines_in_dark ", "x m black s dark_color ", " c none s mask ", /* pixels */ " x x x x x + x x x x x ", " . x x x x x x x x x x x ", " . x x x x x x + x x x x x ", " . x . x x x x x x x x x x x ", " . x . x x x x x x + x x x x x ", " Y Y Y Y Y + x + x + x + x + x + ", " x x . x . x x x x x x + x x x x x ", " . x . x . x . x x x x x x x x x x x ", " . x x x . x . x x x x x x + x x x x x ", " . x . x . x . x . x x x x x x x x x x x ", " . x . x x x . x . x x x x x x + x x x x x ", ". . . . . x . . . . . x . x . x Y x . x . x ", ". . . . . x . . . . . . x . x . Y . x . x . ", ". . . . . x . . . . . x . x . x Y x . x . x ", ". . . . . x . . . . . . x . x . Y . x . x . ", ". . . . . x . . . . . x . x . x Y x . x . x ", "x x x x x x x x x x x x x x x x x x x x x x ", ". . . . . x . . . . . x . x . x Y x . x . x ", ". . . . . x . . . . . . x . x . Y . x . x . ", ". . . . . x . . . . . x . x . x Y x . x . x ", ". . . . . x . . . . . . x . x . Y . x . x . ", ". . . . . x . . . . . x . x . x Y x . x . x " } ; *[V9.SRC.XPM.DOC]README.;1+, . / 4 ?- 0123KPWO 56eO7R89Jj$GHJ ** Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT ** XPM Version 3 WHAT IS XPM? ============ XPM (X PixMap) is a format for storing/retrieving X pixmaps to/from files. Here is provided a library containing a set of four functions, similar to the X bitmap functions as defined in the Xlib: XpmCreatePixmapFromData, XpmCreateDataFromPixmap, XpmReadFileToPixmap and XpmWriteFileFromPixmap for respectively including, storing, reading and writing this format, plus four other: XpmCreateImageFromData, XpmCreateDataFromImage, XpmReadFileToImage and XpmWriteFileFromImage for working with images instead of pixmaps. This new version provides a C includable format, defaults for different types of display: monochrome/color/grayscale, hotspot coordinates and symbol names for colors for overriding default colors when creating the pixmap. It provides a mechanism for storing information while reading a file which is re-used while writing. This way comments, default colors and symbol names aren't lost. It also handles "transparent pixels" by returning a shape mask in addition to the created pixmap. See the XPM Manual for more details. HOW TO GET XPM? =============== New xpm updates are announced on the comp.windows.x newsgroup, and on the "xpm-talk" list. All new "official" xpm releases can be found by ftp on: export.lcs.mit.edu (18.30.0.238) contrib (Boston, USA) avahi.inria.fr (192.5.60.47) pub (Sophia Antipolis, France) DOCUMENTATION: ============= Old users might read the CHANGES file for a history of changes interesting the user. Read the docs (xpm.tex is the manual in LaTeX form). The documentation is in LaTeX format (IMPORTANT: see the Makefile to know how to print it. The LaTeX source should work with most dvi2ps or dvips programs. I use myself Tomas Rokicki's dvips v5.0 that you can get by anonymous ftp on labrea.stanford.edu). We can mail you a PostScript version of the documentation if you are not able to print it, or you can grab one on the ftp servers. INSTALLATION: ============ To obtain the XPM library, first uncompress and untar the compressed tar file in an approriate directory. Then you can either compile xpm via "imake" or in a stand-alone way. WITH IMAKE: The Imakefile is provided. You should know how to use imake to build the XPM Makefile, by executing "xmkmf" then do: make depend make which will build the XPM library and sxpm application. Then do: make install make install.man which will install the library and the sxpm man page. If it fails, you may edit the Imakefile to add compilation flags to suit your machine. WITHOUT IMAKE: To compile xpm, in the xpm directory you just created, do: make -f Makefile.noXtree Then to install it, do: make -f Makefile.noXtree install NOTE: if you compile with gcc, use "gcc -traditional", otherwise you will have compilation warnings (but the code will work Ok) SXPM: ==== In addition to the library the sxpm tool is provided to show XPM file and convert them from  mfsm khri owaxI1 I]]^X3Tg H `@a->SEVs I4k:ey:lwP!/O>r4}jP:Nz?-)[Fs(a`e0i 3;=1c:@^=X!ru^r*`*z"6wch]c&+'ypU * [oFAR1/'[hKi?^u Whk][[OACkduP2cXO' X$>yf$GQXBTd= (Q~KL{h_LVNQzGL`>3CI; Y J72)Q5/eqZ/6}GC0lk:yMvP2@Xq')YmA9)YZ@$;psCY=pI :|}MTLa '*zsS)"1@&Da/?}xoK;3dZ?qE^DQaHGy1;| H&O~z2u1$ zy7TUEu#\L=^<5!,a-?VO} 2* z#3y CHh'!F7,wk/}WEQ:&%sRi P $cS^tX7w)F]5E]:c{:|d{&;OO= ez#axm**!G`;Yw#_0$cxJp[~"DO*8*vUzQ)WiT0XPobjHx@S _R>e/{i*wYp ^4iVPYIf_.BJ#PjDX7$Rh4SS 'ckNU+7 7iOj{@[G]|+r6S\=/W,[`zFdH44ódW+ ^p = 7Z 5 ~ WTC->G}&J@//\ k[;44QP:}Q;2tXg4 }I Q`/[V8 _H!zfF+\eKqu9Rj,/lS^i[9Daw$ .zYWu@qa\MdUKjpvHI d$d3aq@IUN{%3O#e/H}0O5zam%LG~S:N7yHt"!HqOe,q5@$ mcjM{o D#j,o(/Blm@ZJaA8NL^VOXr#>(au; ~!fpmGQ(okQ9G]*1. i'Dz R]KI@1zNC!\wysGwN_"N:b'#BV0)9Tm9!?xhp-`v*[~I7$/kYnPw~Qmtpw~''!mgZME%]%s ,!^,g)s\51Uq8nT^gftbqqvbI[KShN%42b;} ] zD|wWmFe Vjggb&3N24G{;0e08nd(& %JIuW rj9b#GaBALpk6x>M%09w85g~**aQysf8^ho;@AYtgQ*BNd1p U8*]/y_Q| Cpqoi:P/^ ->E_VwZ?u{Y "&hu,:'un40=EP$25ppS>EcKmkN y@gd[_+]{~1CL:ZMz{ IoSt<bBtM1_|-z01\:)wg(: (Db4;s_%>i1Bd)jU h5kh_n$o:qIiMfo9"k`0vi";z\~01Llbaz-8Mg[Gj/97) LY$ysS ,?y_,)au$jNy:K&-qh"K1WIZwdz $ bXma?g#av "@0!DNr! $>>g*Ca<2=R(N8d1{hGqTCO:2=`)4]wc'ljU0vg\5|fBZUw)egBn|a]g)4Rzhpi#G '90p%0}YSaMeY|IR>nVB[1!*t)'BNVD6^6id}pHq!C\O>Q9'FvT4c+nNF>f`X9 @BgnK Pk[Rm=*u$*9!vt-x| yi%8dyQX,kuCi"|UtS,3~8th,>CQuI]6 X1I`KG:t&_[g1_'cOtd-WZ\HShkU_?/#*d,|qf@!yYE+RlF*hu[r>w\.fu{n[ro`8)-<>%dVNQ=fT.WMMjgU0dp3O:rF+7n76=1<w#@pH]F:|>hd<(9)I x{l~'ev' @Wm-U! Dn14uS*v?@Hu"G8<4+QZKBbI 7XA8 iEe}l.$Kq@F/"qG(,ub}2]nzwxQ PChTU bLW/HU VGC^?-D:cDL b.cL@pn#eWWKLc|qr9zxQ(0L4a4+P\6j+zMv9K?3&mH7(3zZz?14YLL//0/q O+s" ,q tyx6"PS*;/Js& [;zW\l^d5\~|9\(Ah9t/$',-91V:| AZ$VFUgg#*hj& =k;,=2<6%VR+fprNOs.z<7;5K_UPj>7p->{x-cN SOX*= =rfH8bVV"/i>_i(@E2"Xg}[3"M(.\ K>-I!M kk>}n})wt-zgrrn%%s;+ Z|*OE}/b8)=-Q[|x2m9{zgAi:E&yQ0y"i|.DuHpW{4VlLQY_6_kL(+F5/}y|qdu XR4 *\G iN1R%X3+>nGU-_mP Fs$DQT{;>f+\&7npn5a]\vNq'c k{kj:|SlNxl*cu9/X^NcL u/F~JT;;,`MJx_8*@?\S.d{3<&;[E%rTTY7lZ[2 * c[9R{O"@)F\XeLw$v2R"m?J^$ Oqbq}>L)dB`&dHdUo7He`RP!$_ EZU2 qk>.}93p`Fv5+X Lz9QGK,LLh* 'Y!eDE UGI1a5UpkC_)$l61c c]+gxQ! myuzwT#G"`cT#DoqUYw :_~v9i9 7Ez903DT~PvUv>*5mUW` `rjYRNouR*+%t#MQe>o]j&t`m6k\ ~Lr\ |>Z[z6i7;: |SN$qE=W/Qdq<;oAE}0^[&:qew`yYQ9TBcc}Q!Z8HUYg^|9VeV%$RpIaC&nbP !Of$8d%3n/t!Kq_0-hy"1T}/,^M7YcFCU5 k> Vh<&p?P~<8LI\/vuxo^+ZpZ8l v0L'_Zz` O.{9\/z^)D[RZ!- PGUz%u?LLw*C:|NB@fwdaO5 ,a:W_27[R"+\,{s65$r6cuxH5 XM3Ti,SO;1`* # yGLou6w4auqAh,Af<] k6e9'K{bTQ`&-4Yw) D2ps#!~w;WvW{/=7mN0 UUhH{k]e=0PmQ^h|=HVgdEkl_M.W7un;|AjMI<5w}\Y5LLNG S*c(oUdy9xvlS.,B. Bnj#tJwR'-}AIe,Fw}qxwaF#e>'/ 1STlD<'=r;)!~ H*k* k%:+ N7AXJ0J`r^^bmE]w<:fu#1e{UTpBiblJKuh7V}^rK| tcD4m! +|<{TVqY+8*b4`Ak%(,@f1f&FNj>,nZD0.~V#qR7yf>rWlFOF\{{#!{ %J31L zFZ9Ox KciG7E )a;P6>~pt(i$89|d:H:Ua1VW;y%^o7 #RLJ)%"N*!9z# *X}J| nm l;p?L[ -g.F5simJn3/+> l':?1w|uO3mD(Q U`C*: X)D{Wm^Mls7XZGErc;xubk:uk$hj4;ql[#+g(<%4!!iHF!(V\/r]?S3klTj/': k#3+}iA_Lulj P 8z!r/E!Fe4'n8IQ*4/p6!8/.[/&y?eap[V66FBN 1/(^c+Z\c@B|xcx{X2$Dy7FtsKKtPT-~xJe)NDE vLaCcg TUyn`> p4 khEy,lDD| ,7[J4g|VUQ 5ocAmk t"Tk wwISZZAR0AjbTBHSL8e-)@RW HZGwU$XngKSLaPEWvw4#!t&i k5GU z"Ex!r$~uo1k)[9PzS W>kG)PcqF~]|STKn7M~4~uPa;: 8'-gEd`$nwdizes9Js/"Y)=475d&SI?M&Y[>".}!KP(B N0HokorxW0&p44rZ16K4y(!;bYVG)Q{{6n?,1j0X]M)$M0Hs+A4vNpYM4`na$N |84skk] nvJb7DN,E-1md!\bchyLdm1aHmv /}[j1Amu=fkCat4%<~]d%5`Sgvq1 u2p"YNr|0:'$zBT4 P!SNJ,WAa"i6tjZv^ZT;5bNO+B2$\/pC{mQo :w<[:om>%ȕz`xY-O48 F``>x&gPP=}s'FY-!AK;*|]|'{mdp!=SZC 3~p iIz0QsBV=WBNfC^1_0HFNf,f-Ks mX>d2-3)Yj}($YY`\ $ 4?s\\ AT &C[SWI|wj_lPG8,H wSAlg+e.iyL 9 LRLQV?Eu2@ *cx`qksnoPEY%?[A I$I*w 3m!\kaY> ZGn](/%R~C#mxt0EH4Neu62y#>sgq.9@A8 SIDvs;IX$Q$_6{59bAiz/P%!r lpUy*N#LPon%J4_'oUgIFgi M3bq*Pv`cp ua)inn8c@{ ;\r&nb)F,pQ/Cy%g~@WC"qJ deF[OV]v TDML&'TOtgqy]P2!(Z]3r5O{ a+2i=CQUpklzut+18[ "Q^ $5R=~)o<_70R9 +]HFGqF/0z6VgP21;uv&dF@#\)(*Psm2OSL@$DPC7p: rUy/&?OMG^Z8'@K ;{Bf~e7&~)w=J-Pt {(bV,pTKK;fL b~ t]576`HUz\H4St}!]zQ_9#s7C=cf7a!b/RIo9n[-`{WH0.xJR{"P<}.B>t0 P0{yb758=$.x[ k--&-qF+?hBE{eZLkOX0+9l(_VRO relzZL@KCH]%,lD9U>BUOMakdWhRl{PO_ kmC;Y ^fKfBql?~a\+qe<4&Pp'20w} {' $h0GW3 @3]osVA\CS oc4n&3W /v%E35ga](X"qyqE{a"Tf$=Oo}RBUHM]3O%47xCq!LS\t5w8&'{Ln)r`p6^Oe^xdM"DyKL!kE%L^Df RUO& kgbWE(>T-Sn9~:r(|?p DW:F_2l 7ipDjz-7yKo,/ m$cGF`(Efd/o~4mM^JFFY)bKK@U1r#tZZ_ip0tM9:2zme)@ |fu,5sk-Va8s nEil{< 8b6=;ii {letl*p (%e%5*;y 9?U,B)?-!"r_,==~gmdF^icz`vzd=U"5g8)mXlvNta7';8w>PU4 4e:4|l1g31$#63{ib`'-)r4jc~h%z7q!ug5D?e!k' J>$:6amd z6}name = name; object->data = data; } return object; } /************************\ * * * hash table routines * * * \************************/ /* * Hash function definition: * HASH_FUNCTION: hash function, hash = hashcode, hp = pointer on char, * hash2 = temporary for hashcode. * INITIAL_TABLE_SIZE in slots * HASH_TABLE_GROWS how hash table grows. */ /* Mock lisp function */ #define HASH_FUNCTION hash = (hash << 5) - hash + *hp++; /* #define INITIAL_HASH_SIZE 2017 */ #define INITIAL_HASH_SIZE 256 /* should be enough for colors */ #define HASH_TABLE_GROWS size = size * 2; /* aho-sethi-ullman's HPJ (sizes should be primes)*/ #ifdef notdef #define HASH_FUNCTION hash <<= 4; hash += *hp++; \ if(hash2 = hash & 0xf0000000) hash ^= (hash2 >> 24) ^ hash2; #define INITIAL_HASH_SIZE 4095 /* should be 2^n - 1 */ #define HASH_TABLE_GROWS size = size << 1 + 1; #endif /* GNU emacs function */ /* #define HASH_FUNCTION hash = (hash << 3) + (hash >> 28) + *hp++; #define INITIAL_HASH_SIZE 2017 #define HASH_TABLE_GROWS size = size * 2; */ /* end of hash functions */ /* * The hash table is used to store atoms via their NAME: * * NAME --hash--> ATOM |--name--> "foo" * |--data--> any value which has to be stored * */ /* * xpmHashSlot gives the slot (pointer to xpmHashAtom) of a name * (slot points to NULL if it is not defined) * */ xpmHashAtom * xpmHashSlot(table, s) xpmHashTable *table; char *s; { xpmHashAtom *atomTable = table->atomTable; unsigned int hash, hash2; xpmHashAtom *p; char *hp = s; char *ns; hash = 0; while (*hp) { /* computes hash function */ HASH_FUNCTION } p = atomTable + hash % table->size; while (*p) { ns = (*p)->name; if (ns[0] == s[0] && strcmp(ns, s) == 0) break; p--; if (p < atomTable) p = atomTable + table->size - 1; } return p; } static int HashTableGrows(table) xpmHashTable *table; { xpmHashAtom *atomTable = table->atomTable; int size = table->size; xpmHashAtom *t, *p; int i; int oldSize = size; t = atomTable; HASH_TABLE_GROWS table->size = size; table->limit = size / 3; atomTable = (xpmHashAtom *) malloc(size * sizeof(*atomTable)); if (!atomTable) return (XpmNoMemory); table->atomTable = atomTable; for (p = atomTable + size; p > atomTable;) *--p = NULL; for (i = 0, p = t; i < oldSize; i++, p++) if (*p) { xpmHashAtom *ps = xpmHashSlot(table, (*p)->name); *ps = *p; } free(t); return (XpmSuccess); } /* * xpmHashIntern(table, name, data) * an xpmHashAtom is created if name doesn't exist, with the given data. */ int xpmHashIntern(table, tag, data) xpmHashTable *table; char *tag; void *data; { xpmHashAtom *slot; if (!*(slot = xpmHashSlot(table, tag))) { /* undefined, make a new atom with the given data */ if (!(*slot = AtomMake(tag, da [d VMS.BCK [V9.SRC.XPM]HASHTABLE.C;111ICN;1  ta))) return (XpmNoMemory); if (table->used >= table->limit) { int ErrorStatus; xpmHashAtom new = *slot; if ((ErrorStatus = HashTableGrows(table)) != XpmSuccess) return(ErrorStatus); table->used++; return (XpmSuccess); } table->used++; } return (XpmSuccess); } /* * must be called before allocating any atom */ int xpmHashTableInit(table) xpmHashTable *table; { xpmHashAtom *p; xpmHashAtom *atomTable; table->size = INITIAL_HASH_SIZE; table->limit = table->size / 3; table->used = 0; atomTable = (xpmHashAtom *) malloc(table->size * sizeof(*atomTable)); if (!atomTable) return (XpmNoMemory); for (p = atomTable + table->size; p > atomTable;) *--p = NULL; table->atomTable = atomTable; return (XpmSuccess); } /* * frees a hashtable and all the stored atoms */ void xpmHashTableFree(table) xpmHashTable *table; { xpmHashAtom *p; xpmHashAtom *atomTable = table->atomTable; for (p = atomTable + table->size; p > atomTable;) if (*--p) free(*p); free(atomTable); table->atomTable = NULL; } s*[V9.SRC.XPM]MAKE.COM;1+,./ 4-0123KPWO56o7O89Jj$GHJ$! $! Build xpm for X-Icon. $! $ delete/noconfirm/nolog Xpm.olb;* $ $ cc data,create,misc,rgb,scan,parse,hashtable,XpmWrFFrP,XpmRdFToP,XpmCrPFData,- XpmCrDataFP,XpmWrFFrI,XpmRdFToI,XpmCrIFData,XpmCrDataFI $ $ library/create Xpm.olb $ library/insert Xpm.olb data,create,misc,rgb,scan,parse,hashtable,XpmWrFFrP,- XpmRdFToP,XpmCrPFData,XpmCrDataFP,XpmWrFFrI,XpmRdFToI,- XpmCrIFData,XpmCrDataFI $ $ exit 1 *[V9.SRC.XPM]MISC.C;1+, . / 4 -0123KPWO 56Pc 7? 89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * misc.c: * * * * XPM library * * Miscellaneous utilities * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" /* * Free the computed color table */ xpmFreeColorTable(colorTable, ncolors) char ***colorTable; int ncolors; { int a, b; char ***ct, **cts; if (colorTable) { for (a = 0, ct = colorTable; a < ncolors; a++, ct++) if (*ct) { for (b = 0, cts = *ct; b <= NKEYS; b++, cts++) if (*cts) free(*cts); free(*ct); } free(colorTable); } } /* * Intialize the xpmInternAttrib pointers to Null to know * which ones must be freed later on. */ xpmInitInternAttrib(attrib) xpmInternAttrib *attrib; { attrib->ncolors = 0; attrib->colorTable = NULL; attrib->pixelindex = NULL; attrib->xcolors = NULL; attrib->colorStrings = NULL; attrib->mask_pixel = UNDEF_PIXEL; } /* * Free the xpmInternAttrib pointers which have been allocated */ xpmFreeInternAttrib(attrib) xpmInternAttrib *attrib; { unsigned int a, ncolors; char **sptr; if (attrib->colorTable) xpmFreeColorTable(attrib->colorTable, attrib->ncolors); if (attrib->pixelindex) free(attrib->pixelindex); if (attrib->xcolors) free(attrib->xcolors); if (attrib->colorStrings) { ncolors = attrib->ncolors; for (a = 0, sptr = attrib->colorStrings; a < ncolors; a++, sptr++) if (*sptr) free(*sptr); free(attrib->colorStrings); } } /* * Free array of extensions */ XpmFreeExtensions(extensions, nextensions) XpmExtension *extensions; int nextensions; { unsigned int i, j, nlines; XpmExtension *ext; char **sptr; if (extensions) { for (i = 0, ext = extensions; i < nextensions; i++, ext++) { if (ext->name) free(ext->name); nlines = ext->nlines; for (j = 0, sptr = ext->lines; j < nlines; j++, sptr++) if (*sptr) free(*sptr); if (ext->lines) free(ext->lines); } free(extensions); } } /* * Return the XpmAttributes structure size */ XpmAttributesSize() { return sizeof(XpmAttributes); } /* * Free the XpmAttributes structure members * but the structure itself */ XpmFreeAttributes(attributes) XpmAttributes *attributes; { if (attributes) { if (attributes->valuemask & XpmReturnPixels && attributes->pixels) { free(attributes->pixels); attributes->pixels = NULL; attributes->npixels = 0; } if (attributes->valuemask & XpmInfos) { if (attributes->colorTable) { xpmFreeColorTable(attributes->colorTable, attributes->ncolors); attributes->colorTable = NULL; attributes->ncolors = 0; } if (attributes->hints_cmt) { free(attributes->hints_cmt); attributes->hints_cmt = NULL; } if (attributes->colors_cmt) { free(attributes->colors_cmt); attributes->colors_cmt = NULL; } if (attributes->pixels_cmt) { free(attributes->pixels_cmt); attributes->pixels_cmt = NULL; } if (attributes->pixels) { free(attributes->pixels); attributes->pixels = NULL; } } if (attributes->valuemask & XpmReturnExtensions && attributes->nextensions) { XpmFreeExtensions(attributes->extensions, attributes->nextensions); attributes->nextensions = 0; attributes->extensions = NULL; } attributes->valuemask = 0; } } /* * Store into the XpmAttributes structure the required informations stored in * the xpmInternAttrib structure. */ xpmSetAttributes(attrib, attributes) xpmInternAttrib *attrib; XpmAttributes *attributes; { if (attributes) { if (attributes->valuemask & XpmReturnInfos) { attributes->cpp = attrib->cpp; attributes->ncolors = attrib->ncolors; attributes->colorTable = attrib->colorTable; attrib->ncolors = 0; attrib->colorTable = NULL; } attributes->width = attrib->width; attributes->height = attrib->height; attributes->valuemask |= XpmSize; } } #ifdef NEED_STRDUP /* * in case strdup is not provided by the system here is one * which does the trick */ char * strdup (s1) char *s1; { char *s2; int l = strlen(s1) + 1; if (s2 = (char *) malloc(l)) strncpy(s2, s1, l); return s2; } #endif t 7B VMS.BCK [V9.SRC.XPM]PARSE.C;1.R;11C;1N;1h*[V9.SRC.XPM]PARSE.C;1+, ./ 4-0123KPWO5605G 70 89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * parse.c: * * * * XPM library * * Parse an XPM file or array and store the found informations * * in an an xpmInternAttrib structure which is returned. * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:ctype.h" #else #include #endif LFUNC(ParseValues, int, (xpmData *data, unsigned int *width, unsigned int *height, unsigned int *ncolors, unsigned int *cpp, unsigned int *x_hotspot, unsigned int *y_hotspot, unsigned int *hotspot, unsigned int *extensions)); LFUNC(ParseColors, int, (xpmData *data, unsigned int ncolors, unsigned int cpp, char ****colorTablePtr, xpmHashTable *hashtable)); LFUNC(ParsePixels, int, (xpmData *data, unsigned int width, unsigned int height, unsigned int ncolors, unsigned int cpp, char ***colorTable, xpmHashTable *hashtable, unsigned int **pixels)); LFUNC(ParseExtensions, int, (xpmData *data, XpmExtension **extensions, unsigned int *nextensions)); char *xpmColorKeys[] = { "s", /* key #1: symbol */ "m", /* key #2: mono visual */ "g4", /* key #3: 4 grays visual */ "g", /* key #4: gray visual */ "c", /* key #5: color visual */ }; /* function call in case of error, frees only locally allocated variables */ #undef RETURN #define RETURN(status) \ { if (colorTable) xpmFreeColorTable(colorTable, ncolors); \ if (pixelindex) free(pixelindex); \ if (hints_cmt) free(hints_cmt); \ if (colors_cmt) free(colors_cmt); \ if (pixels_cmt) free(pixels_cmt); \ return(status); } /* * This function parses an Xpm file or data and store the found informations * in an an xpmInternAttrib structure which is returned. */ int xpmParseData(data, attrib_return, attributes) xpmData *data; xpmInternAttrib *attrib_return; XpmAttributes *attributes; { /* variables to return */ unsigned int width, height, ncolors, cpp; unsigned int x_hotspot, y_hotspot, hotspot = 0, extensions = 0; char ***colorTable = NULL; unsigned int *pixelindex = NULL; char *hints_cmt = NULL; char *colors_cmt = NULL; char *pixels_cmt = NULL; int ErrorStatus; xpmHashTable hashtable; /* * read values */ ErrorStatus = ParseValues(data, &width, &height, &ncolors, &cpp, &x_hotspot, &y_hotspot, &hotspot, &extensions); if (ErrorStatus != XpmSuccess) return(ErrorStatus); /* * store the hints comment line */ if (attributes && (attributes->valuemask & XpmReturnInfos)) xpmGetCmt(data, &hints_cmt); /* * init the hastable */ if (USE_HASHTABLE) { ErrorStatus = xpmHashTableInit(&hashtable); if (ErrorStatus != XpmSuccess) return(ErrorStatus); } /* * read colors */ ErrorStatus = ParseColors(data, ncolors, cpp, &colorTable, &hashtable); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); /* * store the colors comment line */ if (attributes && (attributes->valuemask & XpmReturnInfos)) xpmGetCmt(data, &colors_cmt); /* * read pixels and index them on color number */ ErrorStatus = ParsePixels(data, width, height, ncolors, cpp, colorTable, &hashtable, &pixelindex); /* * free the hastable */ if (USE_HASHTABLE) xpmHashTableFree(&hashtable); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); /* * store the pixels comment line */ if (attributes && (attributes->valuemask & XpmReturnInfos)) xpmGetCmt(data, &pixels_cmt); /* * parse extensions */ if (attributes && (attributes->valuemask & XpmReturnExtensions)) if (extensions) { ErrorStatus = ParseExtensions(data, &attributes->extensions, &attributes->nextensions); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); } else { attributes->extensions = NULL; attributes->nextensions = 0; } /* * store found informations in the xpmInternAttrib structure */ attrib_return->width = width; attrib_return->height = height; attrib_return->cpp = cpp; attrib_return->ncolors = ncolors; attrib_return->colorTable = colorTable; attrib_return->pixelindex = pixelindex; if (attributes) { if (attributes->valuemask & XpmReturnInfos) { attributes->hints_cmt = hints_cmt; attributes->colors_cmt = colors_cmt; attributes->pixels_cmt = pixels_cmt; } if (hotspot) { attributes->x_hotspot = x_hotspot; attributes->y_hotspot = y_hotspot; attributes->valuemask |= XpmHotspot; } } return (XpmSuccess); } static int ParseValues(data, width, height, ncolors, cpp, x_hotspot, y_hotspot, hotspot, extensions) xpmData *data; unsigned int *width, *height, *ncolors, *cpp; unsigned int *x_hotspot, *y_hotspot, *hotspot; unsigned int *extensions; { unsigned int l; char buf[BUFSIZ]; /* * read values: width, height, ncolors, chars_per_pixel */ if (!(xpmNextUI(data, width) && xpmNextUI(data, height) && xpmNextUI(data, ncolors) && xpmNextUI(data, cpp))) return(XpmFileInvalid); /* * read optional information (hotspot and/or XPMEXT) if any */ l = xpmNextWord(data, buf); if (l) { *extensions = l == 6 && !strncmp("XPMEXT", buf, 6); if (*extensions) *hotspot = xpmNextUI(data, x_hotspot) && xpmNextUI(data, y_hotspot); else { *hotspot = atoui(buf, l, x_hotspot) && xpmNextUI(data, y_hotspot); l = xpmNextWord(data, buf); *extensions = l == 6 && !strncmp("XPMEXT", buf, 6); } } return (XpmSuccess); } static int ParseColors(data, ncolors, cpp, colorTablePtr, hashtable) xpmData *data; unsigned int ncolors; unsigned int cpp; char ****colorTablePtr; /* Jee, that's something! */ xpmHashTable *hashtable; { unsigned int key, l, a, b; unsigned int curkey; /* current color key */ unsigned int lastwaskey; /* key read */ char buf[BUFSIZ]; char curbuf[BUFSIZ]; /* current buffer */ char ***ct, **cts, **sptr, *s; char ***colorTable; int ErrorStatus; colorTable = (char ***) calloc(ncolors, sizeof(char **)); if (!colorTable) return(XpmNoMemory); for (a = 0, ct = colorTable; a < ncolors; a++, ct++) { xpmNextString(data); /* skip the line */ cts = *ct = (char **) calloc((NKEYS + 1), sizeof(char *)); if (!cts) { xpmFreeColorTable(colorTable, ncolors); return(XpmNoMemory); } /* * read pixel value */ *cts = (char *) malloc(cpp + 1); /* + 1 for null terminated */ if (!*cts) { xpmFreeColorT  VMS.BCK [V9.SRC.XPM]PARSE.C;1.R;111;1N;1sable(colorTable, ncolors); return(XpmNoMemory); } for (b = 0, s = *cts; b < cpp; b++, s++) *s = xpmGetC(data); *s = '\0'; /* * store the string in the hashtable with its color index number */ if (USE_HASHTABLE) { ErrorStatus = xpmHashIntern(hashtable, *cts, HashAtomData(a)); if (ErrorStatus != XpmSuccess) { xpmFreeColorTable(colorTable, ncolors); return(ErrorStatus); } } /* * read color keys and values */ curkey = 0; lastwaskey = 0; while (l = xpmNextWord(data, buf)) { if (!lastwaskey) { for (key = 0, sptr = xpmColorKeys; key < NKEYS; key++, sptr++) if ((strlen(*sptr) == l) && (!strncmp(*sptr, buf, l))) break; } if (!lastwaskey && key < NKEYS) { /* open new key */ if (curkey) { /* flush string */ s = cts[curkey] = (char *) malloc(strlen(curbuf) + 1); if (!s) { xpmFreeColorTable(colorTable, ncolors); return(XpmNoMemory); } strcpy(s, curbuf); } curkey = key + 1; /* set new key */ *curbuf = '\0'; /* reset curbuf */ lastwaskey = 1; } else { if (!curkey) { /* key without value */ xpmFreeColorTable(colorTable, ncolors); return(XpmFileInvalid); } if (!lastwaskey) strcat(curbuf, " "); /* append space */ buf[l] = '\0'; strcat(curbuf, buf); /* append buf */ lastwaskey = 0; } } if (!curkey) { /* key without value */ xpmFreeColorTable(colorTable, ncolors); return(XpmFileInvalid); } s = cts[curkey] = (char *) malloc(strlen(curbuf) + 1); if (!s) { xpmFreeColorTable(colorTable, ncolors); return(XpmNoMemory); } strcpy(s, curbuf); } *colorTablePtr = colorTable; return(XpmSuccess); } static int ParsePixels(data, width, height, ncolors, cpp, colorTable, hashtable, pixels) xpmData *data; unsigned int width; unsigned int height; unsigned int ncolors; unsigned int cpp; char ***colorTable; xpmHashTable *hashtable; unsigned int **pixels; { unsigned int *iptr, *iptr2; unsigned int a, x, y; iptr2 = (unsigned int *) malloc(sizeof(unsigned int) * width * height); if (!iptr2) return(XpmNoMemory); iptr = iptr2; switch (cpp) { case (1): /* Optimize for single character colors */ { unsigned short colidx[256]; bzero(colidx, 256 * sizeof(short)); for (a = 0; a < ncolors; a++) colidx[ colorTable[a][0][0] ] = a + 1; for (y = 0; y < height; y++) { xpmNextString(data); for (x = 0; x < width; x++, iptr++) { int idx = colidx[xpmGetC(data)]; if ( idx != 0 ) *iptr = idx - 1; else { free(iptr2); return(XpmFileInvalid); } } } } break; case (2): /* Optimize for double character colors */ { unsigned short cidx[256][256]; bzero(cidx, 256*256 * sizeof(short)); for (a = 0; a < ncolors; a++) cidx [ colorTable[a][0][0] ][ colorTable[a][0][1] ] = a + 1; for (y = 0; y < height; y++) { xpmNextString(data); for (x = 0; x < width; x++, iptr++) { int cc1 = xpmGetC(data); int idx = cidx[cc1][ xpmGetC(data) ]; if ( idx != 0 ) *iptr = idx - 1; else { free(iptr2); return(XpmFileInvalid); } } } } break; default : /* Non-optimized case of long color names */ { char *s; char buf[BUFSIZ]; buf[cpp] = '\0'; if (USE_HASHTABLE) { xpmHashAtom *slot; for (y = 0; y < height; y++) { xpmNextString(data); for (x = 0; x < width; x++, iptr++) { for (a = 0, s = buf; a < cpp; a++, s++) *s = xpmGetC(data); slot = xpmHashSlot(hashtable, buf); if (!*slot) { /* no color matches */ free(iptr2); return(XpmFileInvalid); } *iptr = HashColorIndex(slot); } } } else { for (y = 0; y < height; y++) { xpmNextString(data); for (x = 0; x < width; x++, iptr++) { for (a = 0, s = buf; a < cpp; a++, s++) *s = xpmGetC(data); for (a = 0; a < ncolors; a++) if (!strcmp(colorTable[a][0], buf)) break; if (a == ncolors) { /* no color matches */ free(iptr2); return(XpmFileInvalid); } *iptr = a; } } } } break; } *pixels = iptr2; return (XpmSuccess); } static int ParseExtensions(data, extensions, nextensions) xpmData *data; XpmExtension **extensions; unsigned int *nextensions; { XpmExtension *exts = NULL, *ext; unsigned int num = 0; unsigned int nlines, a, l, notstart, notend = 0; int status; char *string, *s, *s2, **sp; xpmNextString(data); exts = (XpmExtension *) malloc(sizeof(XpmExtension)); /* get the whole string */ status = xpmGetString(data, &string, &l); if (status != XpmSuccess) { free(exts); return(status); } /* look for the key word XPMEXT, skip lines before this */ while ((notstart = strncmp("XPMEXT", string, 6)) && (notend = strncmp("XPMENDEXT", string, 9))) { free(string); xpmNextString(data); status = xpmGetString(data, &string, &l); if (status != XpmSuccess) { free(exts); return(status); } } if (!notstart) notend = strncmp("XPMENDEXT", string, 9); while (!notstart && notend) { /* there starts an extension */ ext = (XpmExtension *) realloc(exts, (num + 1) * sizeof(XpmExtension)); if (!ext) { free(string); XpmFreeExtensions(exts, num); return(XpmNoMemory); } exts = ext; ext += num; /* skip whitespace and store its name */ s2 = s = string + 6; while (isspace(*s2)) s2++; a = s2 - s; ext->name = (char *) malloc(l - a - 6); if (!ext->name) { free(string); ext->lines = NULL; ext->nlines = 0; XpmFreeExtensions(exts, num + 1); return(XpmNoMemory); } strncpy(ext->name, s + a, l - a - 6); free(string); /* now store the related lines */ xpmNextString(data); status = xpmGetString(data, &string, &l); if (status != XpmSuccess) { ext->lines = NULL; ext->nlines = 0; XpmFreeExtensions(exts, num + 1); return(status); } ext->lines = (char **) malloc(sizeof(char *)); nlines = 0; while ((notstart = strncmp("XPMEXT", string, 6)) && (notend = strncmp("XPMENDEXT", string, 9))) { sp = (char **) realloc(ext->lines, (nlines + 1) * sizeof(char *)); if (!sp) { free(string); ext->nlines = nlines; XpmFreeExtensions(exts, num + 1); return(XpmNoMemory); } ext->lines = sp; ext->lines[nlines] = string; nlines++; xpmNextString(data); status = xpmGetString(data, &string, &l); if (status != XpmSuccess) { ext->nlines = nlines; XpmFreeExtensions(exts, num + 1); return(status); } } if (!nlines) { free(ext->lines); ext->lines = NULL; } ext->nlines = nlines; num++; } if (!num) { free(string); free(exts); exts = NULL; } else if (!notend) free(string); *nextensions = num; *extensions = exts; return(XpmSuccess); } e*[V9.SRC.XPM]RGB.C;1+, . / 4 -0123KPWO 56P 73 89Jj$GHJ ?R VMS.BCK [V9.SRC.XPM]RGB.C;1SC.R;11;11N;1 /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * rgb.c: * * * * XPM library * * Rgb file utilities * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ /* * Part of this code has been taken from the ppmtoxpm.c file written by Mark * W. Snitily but has been modified for my special need */ #include "xpmP.h" #ifdef VMS #include "sys$library:ctype.h" #include "sys$library:string.h" #else #include #if defined(SYSV) || defined(SVR4) #include #else #include #endif #endif /* * Read a rgb text file. It stores the rgb values (0->65535) * and the rgb mnemonics (malloc'ed) into the "rgbn" array. Returns the * number of entries stored. */ int xpmReadRgbNames(rgb_fname, rgbn) char *rgb_fname; xpmRgbName rgbn[]; { FILE *rgbf; int i, items, red, green, blue; char line[512], name[512], *rgbname, *n, *m; xpmRgbName *rgb; /* Open the rgb text file. Abort if error. */ if ((rgbf = fopen(rgb_fname, "r")) == NULL) return 0; /* Loop reading each line in the file. */ for (i = 0, rgb = rgbn; fgets(line, sizeof(line), rgbf); i++, rgb++) { /* Quit if rgb text file is too large. */ if (i == MAX_RGBNAMES) { /* Too many entries in rgb text file, give up here */ break; } /* Read the line. Skip silently if bad. */ items = sscanf(line, "%d %d %d %[^\n]\n", &red, &green, &blue, name); if (items != 4) { i--; continue; } /* * Make sure rgb values are within 0->255 range. Skip silently if * bad. */ if (red < 0 || red > 0xFF || green < 0 || green > 0xFF || blue < 0 || blue > 0xFF) { i--; continue; } /* Allocate memory for ascii name. If error give up here. */ if (!(rgbname = (char *) malloc(strlen(name) + 1))) break; /* Copy string to ascii name and lowercase it. */ for (n = name, m = rgbname; *n; n++) *m++ = isupper(*n) ? tolower(*n) : *n; *m = '\0'; /* Save the rgb values and ascii name in the array. */ rgb->r = red * 257; /* 65535/255 = 257 */ rgb->g = green * 257; rgb->b = blue * 257; rgb->name = rgbname; } fclose(rgbf); /* Return the number of read rgb names. */ return i < 0 ? 0 : i; } /* * Return the color name corresponding to the given rgb values */ char * xpmGetRgbName(rgbn, rgbn_max, red, green, blue) xpmRgbName rgbn[]; /* rgb mnemonics from rgb text file */ int rgbn_max; /* number of rgb mnemonics in table */ int red, green, blue; /* rgb values */ { int i; xpmRgbName *rgb; /* * Just perform a dumb linear search over the rgb values of the color * mnemonics. One could speed things up by sorting the rgb values and * using a binary search, or building a hash table, etc... */ for (i = 0, rgb = rgbn; i < rgbn_max; i++, rgb++) if (red == rgb->r && green == rgb->g && blue == rgb->b) return rgb->name; /* if not found return NULL */ return NULL; } /* * Free the strings which have been malloc'ed in xpmReadRgbNames */ void xpmFreeRgbNames(rgbn, rgbn_max) xpmRgbName rgbn[]; int rgbn_max; { int i; xpmRgbName *rgb; for (i = 0, rgb = rgbn; i < rgbn_max; i++, rgb++) free(rgb->name); } *[V9.SRC.XPM]SCAN.C;1+, ./ 4-0123KPWO560Y; 7 89Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * scan.c: * * * * XPM library * * Scanning utility for XPM file format * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #define MAXPRINTABLE 93 /* number of printable ascii chars * minus \ and " for string compat * and / to avoid comment conflicts. */ static char *printable = " .XoO+@#$%&*=-;:?>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZ\ ASDFGHJKLPIUYTREWQ!~^/()_`'][{}|"; /* * printable begin with a space, so in most case, due to my algorithm, when * the number of different colors is less than MAXPRINTABLE, it will give a * char follow by "nothing" (a space) in the readable xpm file */ typedef struct { Pixel *pixels; unsigned int *pixelindex; unsigned int size; unsigned int ncolors; unsigned int mask_pixel; /* whether there is or not */ } PixelsMap; LFUNC(storePixel, int, (Pixel pixel, PixelsMap * pmap, unsigned int *index_return)); LFUNC(storeMaskPixel, int, (Pixel pixel, PixelsMap * pmap, unsigned int *index_return)); LFUNC(GetImagePixels, int, (XImage * image, unsigned int width, unsigned int height, PixelsMap * pmap)); LFUNC(GetImagePixels32, int, (XImage * image, unsigned int width, unsigned int height, PixelsMap * pmap)); LFUNC(GetImagePixels16, int, (XImage * image, unsigned int width, unsigned int height, PixelsMap * pmap)); LFUNC(GetImagePixels8, int, (XImage * image, unsigned int width, unsigned int height, PixelsMap * pmap)); LFUNC(GetImagePixels1, int, (XImage * image, unsigned int width, unsigned int height, PixelsMap * pmap, int (*storeFunc) ())); /* * This function stores the given pixel in the given arrays which are grown * if not large enough. */ static int storePixel(pixel, pmap, index_return) Pixel pixel; PixelsMap *pmap; unsigned int *index_return; { register unsigned int a; register Pixel *p; register unsigned int ncolors; if (*index_return) { /* this is a transparent pixel! */ *index_return = 0; return 0; } ncolors = pmap->ncolors; p = &(pmap->pixels[pmap->mask_pixel]); for (a = pmap->mask_pixel; a < ncolors; a++, p++) if (*p == pixel) break; if (a == ncolors) { if (ncolors > pmap->size) { pmap->size *= 2; p = (Pixel *) realloc(pmap->pixels, sizeof(Pixel) * pmap->size); if (!p) return (1); pmap->pixels = p; } (pmap->pixels)[ncolors] = pixel; pmap->ncolors++; } *index_retu c VMS.BCK [V9.SRC.XPM]SCAN.C;1C.R;111;1N;1rn = a; return 0; } static int storeMaskPixel(pixel, pmap, index_return) Pixel pixel; PixelsMap *pmap; unsigned int *index_return; { if (!pixel) { if (!pmap->ncolors) { pmap->ncolors = 1; (pmap->pixels)[0] = 0; pmap->mask_pixel = 1; } *index_return = 1; } else *index_return = 0; return 0; } /* function call in case of error, frees only locally allocated variables */ #undef RETURN #define RETURN(status) \ { if (pmap.pixelindex) free(pmap.pixelindex); \ if (pmap.pixels) free(pmap.pixels); \ if (xcolors) free(xcolors); \ if (colorStrings) { \ for (a = 0; a < pmap.ncolors; a++) \ if (colorStrings[a]) \ free(colorStrings[a]); \ free(colorStrings); \ } \ return(status); } /* * This function scans the given image and stores the found informations in * the xpmInternAttrib structure which is returned. */ int xpmScanImage(display, image, shapeimage, attributes, attrib) Display *display; XImage *image; XImage *shapeimage; XpmAttributes *attributes; xpmInternAttrib *attrib; { /* variables stored in the XpmAttributes structure */ Colormap colormap; unsigned int cpp; /* variables to return */ PixelsMap pmap; char **colorStrings = NULL; XColor *xcolors = NULL; int ErrorStatus; /* calculation variables */ unsigned int width = 0; unsigned int height = 0; unsigned int cppm; /* minimum chars per pixel */ unsigned int a, b, c; register char *s; /* initialize pmap */ pmap.pixels = NULL; pmap.pixelindex = NULL; pmap.size = 256; /* should be enough most of the time */ pmap.ncolors = 0; pmap.mask_pixel = 0; /* * get geometry */ if (image) { width = image->width; height = image->height; } else if (shapeimage) { width = shapeimage->width; height = shapeimage->height; } /* * retrieve information from the XpmAttributes */ if (attributes && attributes->valuemask & XpmColormap) colormap = attributes->colormap; else colormap = DefaultColormap(display, DefaultScreen(display)); if (attributes && (attributes->valuemask & XpmCharsPerPixel || attributes->valuemask & XpmInfos)) cpp = attributes->cpp; else cpp = 0; pmap.pixelindex = (unsigned int *) calloc(width * height, sizeof(unsigned int)); if (!pmap.pixelindex) RETURN(XpmNoMemory); pmap.pixels = (Pixel *) malloc(sizeof(Pixel) * pmap.size); if (!pmap.pixels) RETURN(XpmNoMemory); /* * scan shape mask if any */ if (shapeimage) { ErrorStatus = GetImagePixels1(shapeimage, width, height, &pmap, storeMaskPixel); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); } /* * scan the image data * * In case depth is 1 or bits_per_pixel is 4, 6, 8, 24 or 32 use optimized * functions, otherwise use slower but sure general one. * */ if (image) { if (image->depth == 1) ErrorStatus = GetImagePixels1(image, width, height, &pmap, storePixel); else if (image->bits_per_pixel == 8) ErrorStatus = GetImagePixels8(image, width, height, &pmap); else if (image->bits_per_pixel == 16) ErrorStatus = GetImagePixels16(image, width, height, &pmap); else if (image->bits_per_pixel == 32) ErrorStatus = GetImagePixels32(image, width, height, &pmap); else ErrorStatus = GetImagePixels(image, width, height, &pmap); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); } /* * get rgb values and a string of char for each color */ xcolors = (XColor *) malloc(sizeof(XColor) * pmap.ncolors); if (!xcolors) RETURN(XpmNoMemory); colorStrings = (char **) calloc(pmap.ncolors, sizeof(char *)); if (!colorStrings) RETURN(XpmNoMemory); for (cppm = 1, c = MAXPRINTABLE; pmap.ncolors > c; cppm++) c *= MAXPRINTABLE; if (cpp < cppm) cpp = cppm; for (a = 0; a < pmap.ncolors; a++) { if (!(s = colorStrings[a] = (char *) malloc(cpp))) RETURN(XpmNoMemory); *s++ = printable[c = a % MAXPRINTABLE]; for (b = 1; b < cpp; b++, s++) *s = printable[c = ((a - c) / MAXPRINTABLE) % MAXPRINTABLE]; xcolors[a].pixel = pmap.pixels[a]; } XQueryColors(display, colormap, xcolors, pmap.ncolors); /* * store found informations in the xpmInternAttrib structure */ attrib->width = width; attrib->height = height; attrib->cpp = cpp; attrib->ncolors = pmap.ncolors; attrib->mask_pixel = pmap.mask_pixel ? 0 : UNDEF_PIXEL; attrib->pixelindex = pmap.pixelindex; attrib->xcolors = xcolors; attrib->colorStrings = colorStrings; free(pmap.pixels); return (XpmSuccess); } /* * The functions below are written from X11R5 MIT's code (XImUtil.c) * * The idea is to have faster functions than the standard XGetPixel function * to scan the image data. Indeed we can speed up things by suppressing tests * performed for each pixel. We do exactly the same tests but at the image * level. Assuming that we use only ZPixmap images. */ static unsigned long Const low_bits_table[] = { 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff }; /* * Default method to scan pixels of a Z image data structure. * The algorithm used is: * * copy the source bitmap_unit or Zpixel into temp * normalize temp if needed * extract the pixel bits into return value * */ static int GetImagePixels(image, width, height, pmap) XImage *image; unsigned int width; unsigned int height; PixelsMap *pmap; { register char *src; register char *dst; register unsigned int *iptr; register char *data; register int x, y, i; int bits, depth, ibu, ibpp; unsigned long lbt; Pixel pixel, px; data = image->data; iptr = pmap->pixelindex; depth = image->depth; lbt = low_bits_table[depth]; ibpp = image->bits_per_pixel; if (image->depth == 1) { ibu = image->bitmap_unit; for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { src = &data[XYINDEX(x, y, image)]; dst = (char *) &pixel; pixel = 0; for (i = ibu >> 3; --i >= 0;) *dst++ = *src++; XYNORMALIZE(&pixel, image); bits = x % ibu; pixel = ((((char *) &pixel)[bits >> 3]) >> (bits & 7)) & 1; if (ibpp != depth) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } } else { for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { src = &data[ZINDEX(x, y, image)]; dst = (char *) &px; px = 0; for (i = (ibpp + 7) >> 3; --i >= 0;) *dst++ = *src++; ZNORMALIZE(&px, image); pixel = 0; for (i = sizeof(unsigned long); --i >= 0;) pixel = (pixel << 8) | ((unsigned char *) &px)[i]; if (ibpp == 4) { if (x & 1) pixel >>= 4; else pixel &= 0xf; } if (ibpp != depth) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } } return(XpmSuccess); } /* * scan pixels of a 32-bits Z image data structure */ #ifndef WORD64 static unsigned long byteorderpixel = MSBFirst << 24; #endif static int GetImagePixels32(image, width, height, pmap) XImage *image; unsigned int width; unsigned int height; PixelsMap *pmap; {   VMS.BCK [V9.SRC.XPM]SCAN.C;1C.R;11C;1N;1Jregister unsigned char *addr; register unsigned char *data; register unsigned int *iptr; register int x, y; unsigned long lbt; Pixel pixel; int depth; data = (unsigned char *) image->data; iptr = pmap->pixelindex; depth = image->depth; lbt = low_bits_table[depth]; #ifndef WORD64 if (*((char *) &byteorderpixel) == image->byte_order) { for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX32(x, y, image)]; pixel = *((unsigned long *)addr); if (depth != 32) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } } else #endif if (image->byte_order == MSBFirst) for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX32(x, y, image)]; pixel = ((unsigned long) addr[0] << 24 | (unsigned long) addr[1] << 16 | (unsigned long) addr[2] << 8 | addr[4]); if (depth != 32) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } else for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX32(x, y, image)]; pixel = (addr[0] | (unsigned long) addr[1] << 8 | (unsigned long) addr[2] << 16 | (unsigned long) addr[3] << 24); if (depth != 32) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } return(XpmSuccess); } /* * scan pixels of a 16-bits Z image data structure */ static int GetImagePixels16(image, width, height, pmap) XImage *image; unsigned int width; unsigned int height; PixelsMap *pmap; { register unsigned char *addr; register unsigned char *data; register unsigned int *iptr; register int x, y; unsigned long lbt; Pixel pixel; int depth; data = (unsigned char *) image->data; iptr = pmap->pixelindex; depth = image->depth; lbt = low_bits_table[depth]; if (image->byte_order == MSBFirst) for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX16(x, y, image)]; pixel = addr[0] << 8 | addr[1]; if (depth != 16) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } else for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { addr = &data[ZINDEX16(x, y, image)]; pixel = addr[0] | addr[1] << 8; if (depth != 16) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } return(XpmSuccess); } /* * scan pixels of a 8-bits Z image data structure */ static int GetImagePixels8(image, width, height, pmap) XImage *image; unsigned int width; unsigned int height; PixelsMap *pmap; { register unsigned int *iptr; register unsigned char *data; register int x, y; unsigned long lbt; Pixel pixel; int depth; data = (unsigned char *) image->data; iptr = pmap->pixelindex; depth = image->depth; lbt = low_bits_table[depth]; for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { pixel = data[ZINDEX8(x, y, image)]; if (depth != 8) pixel &= lbt; if (storePixel(pixel, pmap, iptr)) return (XpmNoMemory); } return(XpmSuccess); } /* * scan pixels of a 1-bit depth Z image data structure */ static int GetImagePixels1(image, width, height, pmap, storeFunc) XImage *image; unsigned int width; unsigned int height; PixelsMap *pmap; int (*storeFunc) (); { register unsigned int *iptr; register int x, y; register char *data; Pixel pixel; if (image->byte_order != image->bitmap_bit_order) return(GetImagePixels(image, width, height, pmap)); else { data = image->data; iptr = pmap->pixelindex; if (image->bitmap_bit_order == MSBFirst) for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { pixel = (data[ZINDEX1(x, y, image)] & (0x80 >> (x & 7))) ? 1 : 0; if ((*storeFunc) (pixel, pmap, iptr)) return (XpmNoMemory); } else for (y = 0; y < height; y++) for (x = 0; x < width; x++, iptr++) { pixel = (data[ZINDEX1(x, y, image)] & (1 << (x & 7))) ? 1 : 0; if ((*storeFunc) (pixel, pmap, iptr)) return (XpmNoMemory); } } return(XpmSuccess); } e*[V9.SRC.XPM]SXPM.C;1+, ./ 4-0123KPWO56$ 70x 89Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * sxpm.c: * * * * Show XPM File program * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #ifdef VMS #include "decw$include:Xlib.h" #include "decw$include:Intrinsic.h" #include "decw$include:Shell.h" #include "decw$include:shape.h" #else #include #include #include #include #endif #include "xpm.h" #ifdef Debug /* memory leak control tool */ #include #endif /* XPM */ /* plaid pixmap */ static char *plaid[] = { /* width height ncolors chars_per_pixel */ "22 22 4 2 XPMEXT", /* colors */ " c red m white s light_color", "Y c green m black s lines_in_mix", "+ c yellow m white s lines_in_dark", "x m black s dark_color", /* pixels */ "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", "Y Y Y Y Y x Y Y Y Y Y + x + x + x + x + x + ", "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", " x x x x x x x x x x x x x x x x ", "x x x x x x x x x x x x + x x x x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", "x x x x x x x x x x x x x x x x x x x x x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", " x x x Y x x ", " x x x x Y x x x ", "bullshit", "XPMEXT ext1 data1", "XPMEXT ext2", "data2_1", "data2_2", "XPMEXT", "foo", "", "XPMEXT ext3", "data3", "XPMENDEXT" }; #define win XtWindow(topw) #define dpy XtDisplay(topw) #de <9 VMS.BCK [V9.SRC.XPM]SXPM.C;1C.R;11C;1CN;1hfine screen XtScreen(topw) #define root XRootWindowOfScreen(screen) #define xrdb XtDatabase(dpy) static Colormap colormap; void Usage(); void ErrorMessage(); void Punt(); void kinput(); #define IWIDTH 50 #define IHEIGHT 50 typedef struct _XpmIcon { Pixmap pixmap; Pixmap mask; XpmAttributes attributes; } XpmIcon; static char **command; static Widget topw; static XpmIcon view, icon; static XrmOptionDescRec options[] = { {"-hints", ".hints", XrmoptionNoArg, (XtPointer) "True"}, {"-icon", ".icon", XrmoptionSepArg, (XtPointer) NULL}, }; main(argc, argv) int argc; char **argv; { int ErrorStatus; unsigned int verbose = 0; unsigned int stdinf = 1; unsigned int stdoutf = 0; unsigned int nod = 0; unsigned int incResize = 0; unsigned int resize = 0; unsigned int w_rtn; unsigned int h_rtn; char *input = NULL; char *output = NULL; char *iconFile = NULL; unsigned int numsymbols = 0; XpmColorSymbol symbols[10]; char *stype; XrmValue val; unsigned long valuemask = 0; int n; Arg args[3]; #ifdef Debug2 char **data; #endif topw = XtInitialize(argv[0], "Sxpm", options, XtNumber(options), &argc, argv); if (!topw) { fprintf(stderr, "Sxpm Error... [ Undefined DISPLAY ]\n"); exit(1); } colormap = XDefaultColormapOfScreen(screen); /* * geometry management */ if (XrmGetResource(xrdb, NULL, "sxpm.geometry", &stype, &val) || XrmGetResource(xrdb, NULL, "Sxpm.geometry", &stype, &val)) { int flags; int x_rtn; int y_rtn; char *geo = NULL; geo = (char *) val.addr; flags = XParseGeometry(geo, &x_rtn, &y_rtn, (unsigned int *) &w_rtn, (unsigned int *) &h_rtn); if (!((WidthValue & flags) && (HeightValue & flags))) resize = 1; } else resize = 1; n = 0; if (resize) { w_rtn = 0; h_rtn = 0; XtSetArg(args[n], XtNwidth, 1); n++; XtSetArg(args[n], XtNheight, 1); n++; } XtSetArg(args[n], XtNmappedWhenManaged, False); n++; XtSetValues(topw, args, n); if ((XrmGetResource(xrdb, "sxpm.hints", "", &stype, &val) || XrmGetResource(xrdb, "Sxpm.hints", "", &stype, &val)) && !strcmp((char *) val.addr, "True")) { /* gotcha */ incResize = 1; resize = 1; } /* * icon management */ if (XrmGetResource(xrdb, "sxpm.icon", "", &stype, &val) || XrmGetResource(xrdb, "Sxpm.icon", "", &stype, &val)) { iconFile = (char *) val.addr; } if (iconFile) { XColor color, junk; Pixel bpix; Window iconW; if (XAllocNamedColor(dpy, colormap, "black", &color, &junk)) bpix = color.pixel; else bpix = XBlackPixelOfScreen(screen); iconW = XCreateSimpleWindow(dpy, root, 0, 0, IWIDTH, IHEIGHT, 1, bpix, bpix); icon.attributes.valuemask = XpmReturnPixels; ErrorStatus = XpmReadFileToPixmap(dpy, root, iconFile, &icon.pixmap, &icon.mask, &icon.attributes); ErrorMessage(ErrorStatus, "Icon"); XSetWindowBackgroundPixmap(dpy, iconW, icon.pixmap); n = 0; XtSetArg(args[n], XtNbackground, bpix); n++; XtSetArg(args[n], XtNiconWindow, iconW); n++; XtSetValues(topw, args, n); } /* * arguments parsing */ command = argv; for (n = 1; n < argc; n++) { if (strncmp(argv[n], "-plaid", 3) == 0) { stdinf = 0; continue; } if (argv[n][0] != '-') { stdinf = 0; input = argv[n]; continue; } if ((strlen(argv[n]) == 1) && (argv[n][0] == '-')) /* stdin */ continue; if (strncmp(argv[n], "-o", 2) == 0) { if (n < argc - 1) { if ((strlen(argv[n + 1]) == 1) && (argv[n + 1][0] == '-')) stdoutf = 1; else output = argv[n + 1]; n++; continue; } else Usage(); } if (strncmp(argv[n], "-nod", 2) == 0) { nod = 1; continue; } if (strncmp(argv[n], "-s", 2) == 0) { if (n < argc - 2) { valuemask |= XpmColorSymbols; symbols[numsymbols].name = argv[++n]; symbols[numsymbols++].value = argv[++n]; continue; } else Usage(); } if (strncmp(argv[n], "-p", 2) == 0) { if (n < argc - 2) { valuemask |= XpmColorSymbols; symbols[numsymbols].name = argv[++n]; symbols[numsymbols].value = NULL; symbols[numsymbols++].pixel = atol(argv[++n]); continue; } } if (strcmp(argv[n], "-closecolors") == 0) { valuemask |= XpmCloseness; view.attributes.closeness = 40000; continue; } if (strncmp(argv[n], "-rgb", 3) == 0) { if (n < argc - 1) { valuemask |= XpmRgbFilename; view.attributes.rgb_fname = argv[++n]; continue; } else Usage(); } if (strncmp(argv[n], "-v", 2) == 0) { verbose = 1; continue; } if (strncmp(argv[n], "-c", 2) == 0) { valuemask |= XpmColormap; continue; } Usage(); } XtRealizeWidget(topw); if (valuemask & XpmColormap) { colormap = XCreateColormap(dpy, win, DefaultVisual(dpy, DefaultScreen(dpy)), AllocNone); view.attributes.colormap = colormap; XSetWindowColormap(dpy, win, colormap); } view.attributes.colorsymbols = symbols; view.attributes.numsymbols = numsymbols; view.attributes.valuemask = valuemask; #ifdef Debug2 /* this is just to test the XpmCreateDataFromPixmap function */ view.attributes.valuemask |= XpmReturnPixels; view.attributes.valuemask |= XpmReturnExtensions; ErrorStatus = XpmCreatePixmapFromData(dpy, win, plaid, &view.pixmap, &view.mask, &view.attributes); ErrorMessage(ErrorStatus, "Plaid"); ErrorStatus = XpmCreateDataFromPixmap(dpy, &data, view.pixmap, view.mask, &view.attributes); ErrorMessage(ErrorStatus, "Data"); if (verbose && view.attributes.nextensions) { unsigned int i, j; for (i = 0; i < view.attributes.nextensions; i++) { fprintf(stderr, "Xpm extension : %s\n", view.attributes.extensions[i].name); for (j = 0; j < view.attributes.extensions[i].nlines; j++) fprintf(stderr, "\t\t%s\n", view.attributes.extensions[i].lines[j]); } } XFreePixmap(dpy, view.pixmap); if (view.mask) XFreePixmap(dpy, view.mask); XFreeColors(dpy, colormap, view.attributes.pixels, view.attributes.npixels, 0); XpmFreeAttributes(&view.attributes); view.attributes.valuemask = valuemask; #endif if (input || stdinf) { view.attributes.valuemask |= XpmReturnInfos; view.attributes.valuemask |= XpmReturnPixels; view.attributes.valuemask |= XpmReturnExtensions; #ifdef Debug2 free(data); ErrorStatus = XpmReadFileToData(input, &data); ErrorMessage(ErrorStatus, "ReadFileToData"); ErrorStatus = XpmCreatePixmapFromData(dpy, win, data, &view.pixmap, &view.mask, &view.attributes); ErrorMessage(ErrorStatus, "CreatePixmapFromData"); ErrorStatus = XpmWriteFileFromData("sxpmout.xpm", data); ErrorMessage(ErrorStatus, "WriteFileFromData"); free(data); #endif ErrorStatus = XpmReadFileToPixmap(dpy, win, input, &view.pixmap, &view.mask, &view.attributes); ErrorMessage(ErrorStatus, "Read"); if (verbose && view.attributes.nextensions) { unsigned int i, j; for (i = 0; i < view.attributes.nextensions; i++) { fprintf(stderr, "Xpm extension : %s\n", view.attributes.extensions[i].name); for (j = 0; j < view.attributes.extensions[i].nlines; j++) fprintf(stderr, "\t\t%s\n", view.attributes.extensions[i].lines[j]); } } } else { #ifdef Debug2 ErrorStatus = XpmCreatePixmapFromData(dpy, win, data, &view.pixmap, &view.mask, &view.attributes); free(data); #else ErrorStatus = XpmCreatePixmapFromData(dpy, win, plaid, &vie [{ VMS.BCK [V9.SRC.XPM]SXPM.C;1C.R;1OC;1N;1uw.pixmap, &view.mask, &view.attributes); #endif ErrorMessage(ErrorStatus, "Plaid"); } if (output || stdoutf) { ErrorStatus = XpmWriteFileFromPixmap(dpy, output, view.pixmap, view.mask, &view.attributes); ErrorMessage(ErrorStatus, "Write"); } if (!nod) { /* * manage display if requested */ XSizeHints size_hints; char *xString = NULL; if (w_rtn && h_rtn && ((w_rtn < view.attributes.width) || h_rtn < view.attributes.height)) { resize = 1; } if (resize) { XtResizeWidget(topw, view.attributes.width, view.attributes.height, 1); } if (incResize) { size_hints.flags = USSize | PMinSize | PResizeInc; size_hints.height = view.attributes.height; size_hints.width = view.attributes.width; size_hints.height_inc = view.attributes.height; size_hints.width_inc = view.attributes.width; } else size_hints.flags = PMinSize; size_hints.min_height = view.attributes.height; size_hints.min_width = view.attributes.width; XSetWMNormalHints(dpy, win, &size_hints); if (input) { xString = (char *) XtMalloc((sizeof(char) * strlen(input)) + 20); sprintf(xString, "Sxpm: %s\0", input); XStoreName(dpy, XtWindow(topw), xString); XSetIconName(dpy, XtWindow(topw), xString); } else if (stdinf) { XStoreName(dpy, XtWindow(topw), "Sxpm: stdin"); XSetIconName(dpy, XtWindow(topw), "Sxpm: stdin"); } else { XStoreName(dpy, XtWindow(topw), "Sxpm"); XSetIconName(dpy, XtWindow(topw), "Sxpm"); } XtAddEventHandler(topw, KeyPressMask, False, (XtEventHandler) kinput, NULL); XSetWindowBackgroundPixmap(dpy, win, view.pixmap); if (view.mask) XShapeCombineMask(dpy, win, ShapeBounding, 0, 0, view.mask, ShapeSet); XClearWindow(dpy, win); XMapWindow(dpy, win); if (xString) XtFree(xString); XtMainLoop(); } Punt(0); } void Usage() { fprintf(stderr, "\nUsage: %s [options...]\n", command[0]); fprintf(stderr, "%s\n", "Where options are:"); fprintf(stderr, "\n%s\n", "[-d host:display] Display to connect to."); fprintf(stderr, "%s\n", "[-g geom] Geometry of window."); fprintf(stderr, "%s\n", "[-hints] Set ResizeInc for window."); fprintf(stderr, "%s\n", "[-icon filename] Set pixmap for iconWindow."); fprintf(stderr, "%s\n", "[-s symbol_name color_name] Overwrite color defaults."); fprintf(stderr, "%s\n", "[-p symbol_name pixel_value] Overwrite color defaults."); fprintf(stderr, "%s\n", "[-closecolors] Try to use `close' colors."); fprintf(stderr, "%s\n", "[-plaid] Read the included plaid pixmap."); fprintf(stderr, "%s\n", "[filename] Read from file 'filename', and from \ standard"); fprintf(stderr, "%s\n", " input if 'filename' is '-'."); fprintf(stderr, "%s\n", "[-o filename] Write to file 'filename', and to \ standard"); fprintf(stderr, "%s\n", " output if 'filename' is '-'."); fprintf(stderr, "%s\n", "[-nod] Don't display in window."); fprintf(stderr, "%s\n", "[-rgb filename] Search color names in the \ rgb text file 'filename'."); fprintf(stderr, "%s\n", "[-c] Use a private colormap."); fprintf(stderr, "%s\n\n", "[-v] Verbose - print out extensions."); fprintf(stderr, "%s\n\n", "if no input is specified sxpm reads from standard input."); exit(0); } void ErrorMessage(ErrorStatus, tag) int ErrorStatus; char *tag; { char *error = NULL; char *warning = NULL; switch (ErrorStatus) { case XpmSuccess: return; case XpmColorError: warning = "Could not parse or alloc requested color"; break; case XpmOpenFailed: error = "Cannot open file"; break; case XpmFileInvalid: error = "Invalid XPM file"; break; case XpmNoMemory: error = "Not enough memory"; break; case XpmColorFailed: error = "Failed to parse or alloc some color"; break; } if (warning) printf("%s Xpm Warning: %s.\n", tag, warning); if (error) { printf("%s Xpm Error: %s.\n", tag, error); Punt(1); } } void Punt(i) int i; { if (icon.pixmap) { XFreePixmap(dpy, icon.pixmap); if (icon.mask) XFreePixmap(dpy, icon.mask); XFreeColors(dpy, colormap, icon.attributes.pixels, icon.attributes.npixels, 0); XpmFreeAttributes(&icon.attributes); } if (view.pixmap) { XFreePixmap(dpy, view.pixmap); if (view.mask) XFreePixmap(dpy, view.mask); XFreeColors(dpy, colormap, view.attributes.pixels, view.attributes.npixels, 0); XpmFreeAttributes(&view.attributes); } exit(i); } void kinput(widget, tag, xe, b) Widget widget; char *tag; XEvent *xe; Boolean *b; { char c = '\0'; XLookupString(&(xe->xkey), &c, 1, NULL, NULL); if (c == 'q' || c == 'Q') Punt(0); } *[V9.SRC.XPM]SXPM.MAN;1+, ./ 4-0123KPWO56 70 89Jj$GHJ.\"Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT .TH SXPM 1 .PD .ad b .SH NAME sxpm \- Show an XPM (X PixMap) file and/or convert XPM2 files to XPM version 3. .SH SYNOPSIS \fBsxpm\fR [\|\fB-d\fR displayname\|] [\|\fB-g\fR geometry\|] [\|\fB-hints\fR\|] [\|\fB-icon\fR filename\|] [\|\fB-s\fR symbol color_name\|] [\|\fB-p\fR symbol pixel_value\|] [\|\fB-plaid\| | \|\fRfilename\| | \|-\|] [\|\fB-o\fR filename\| | \|\fB-o\fR -\|] [\|\fB-nod\fR\|] [\|\fB-rgb\fR filename\|] [\|\fB-c\fR\|] [\|\fB-v\fR\|] .SH DESCRIPTION .PP The \fIsxpm\fP program can be used to view any XPM (version 2 or 3) file and/or to convert a file from XPM2 to XPM version 3. If \fIsxpm\fP is run without any option specified, the usage is displayed. If no geometry is specified, the show window will have the size of the read pixmap. Pressing the key Q in the window will quit the program. .SH OPTIONS .TP 8 .B \-d \fIdisplay\fP Specifies the display to connect to. .TP 8 .B \-g \fIgeom\fP Window geometry (default is pixmap's size). .TP 8 .B \-hints Set ResizeInc for window. .TP 8 .B \-icon \fIfilename\fP Set icon to pixmap created from the file \fIfilename\fP. .TP 8 .B \-s \fIsymbol colorname\fP Overwrite default color to \fIsymbol\fP to \fIcolorname\fp. .TP 8 .B \-p \fIsymbol pixelvalue\fP Overwrite default color to \fIsymbol\fP to \fIpixelvalue\fp. .TP 8 .B \-closecolors Try to use "close colors" before reverting to other visuals. .TP 8 .B \-plaid Show the plaid pixmap which is stored as data\fP. .TP 8 .B \fIfilename\fP Read from the file \fIfilename\fP and from standard input if \fIfilename\fP is '-'. If no input is specified sxpm reads from standard input. .TP 8 .B \-o \fIfilename\fP Write to the file \fIfilename\fP (overwrite if it already exists) and to standard output if \fIfilename\fP is '-'. .TP 8 .B \-nod Do not display the pixmap in a window. (Useful when using as converter) .TP 8 .B \-rgb \fIfilename\fP Search color names in the file \fIfilename\fP and write them out instead of the rgb values. .TP 8 . e9 VMS.BCK [V9.SRC.XPM]SXPM.MAN;1R;1OL;1N;1>B \-c To use a private colormap. .TP 8 .B \-v Verbose - to print out extensions (stderr). .SH KNOWN BUGS When converting a file from XPM2 to XPM version 3, if several pixels (symbols) get the same color only one will be in the file written out. .br Some window managers may not accept a pixmap which is not a bitmap as icon because this does not respect ICCCM, many of the well known ones will accept it though. .SH AUTHOR Arnaud Le Hors (lehors@sophia.inria.fr) .br Bull Research France .br Copyright (C) 1990-92,92 by Groupe Bull. r*[V9.SRC.XPM]XPM.H;1+, ./ 4R-0123KPWO56P0 7" 89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * xpm.h: * * * * XPM library * * Include file * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #ifndef XPM_h #define XPM_h #ifdef VMS #include "decw$include:Xlib.h" #include "decw$include:Intrinsic.h" #include "sys$library:stdio.h" #else #include #include #include #endif /* we keep the same codes as for Bitmap management */ #ifndef _XUTIL_H_ #ifdef VMS #include "decw$include:Xutil.h" #else #include #endif #endif /* Return ErrorStatus codes: * null if full success * positive if partial success * negative if failure */ #define XpmColorError 1 #define XpmSuccess 0 #define XpmOpenFailed -1 #define XpmFileInvalid -2 #define XpmNoMemory -3 #define XpmColorFailed -4 typedef struct { char *name; /* Symbolic color name */ char *value; /* Color value */ Pixel pixel; /* Color pixel */ } XpmColorSymbol; typedef struct { char *name; /* name of the extension */ unsigned int nlines; /* number of lines in this extension */ char **lines; /* pointer to the extension array of strings */ } XpmExtension; typedef struct { unsigned long valuemask; /* Specifies which attributes are * defined */ Visual *visual; /* Specifies the visual to use */ Colormap colormap; /* Specifies the colormap to use */ unsigned int depth; /* Specifies the depth */ unsigned int width; /* Returns the width of the created * pixmap */ unsigned int height; /* Returns the height of the created * pixmap */ unsigned int x_hotspot; /* Returns the x hotspot's * coordinate */ unsigned int y_hotspot; /* Returns the y hotspot's * coordinate */ unsigned int cpp; /* Specifies the number of char per * pixel */ Pixel *pixels; /* List of used color pixels */ unsigned int npixels; /* Number of pixels */ XpmColorSymbol *colorsymbols; /* Array of color symbols to * override */ unsigned int numsymbols; /* Number of symbols */ char *rgb_fname; /* RGB text file name */ unsigned int nextensions; /* number of extensions */ XpmExtension *extensions; /* pointer to array of extensions */ /* Infos */ unsigned int ncolors; /* Number of colors */ char ***colorTable; /* Color table pointer */ char *hints_cmt; /* Comment of the hints section */ char *colors_cmt; /* Comment of the colors section */ char *pixels_cmt; /* Comment of the pixels section */ unsigned int mask_pixel; /* Transparent pixel's color table * index */ /* Color Allocation Directives */ unsigned int exactColors; /* Only use exact colors for visual */ unsigned int closeness; /* Allowable RGB deviation */ } XpmAttributes; /* Xpm attribute value masks bits */ #define XpmVisual (1L<<0) #define XpmColormap (1L<<1) #define XpmDepth (1L<<2) #define XpmSize (1L<<3) /* width & height */ #define XpmHotspot (1L<<4) /* x_hotspot & y_hotspot */ #define XpmCharsPerPixel (1L<<5) #define XpmColorSymbols (1L<<6) #define XpmRgbFilename (1L<<7) #define XpmInfos (1L<<8) /* all infos members */ #define XpmExtensions (1L<<10) #define XpmReturnPixels (1L<<9) #define XpmReturnInfos XpmInfos #define XpmReturnExtensions XpmExtensions #define XpmExactColors (1L<<11) #define XpmCloseness (1L<<12) /* * minimal portability layer between ansi and KR C */ /* forward declaration of functions with prototypes */ #if __STDC__ || defined(__cplusplus) || defined(c_plusplus) /* ANSI || C++ */ #define FUNC(f, t, p) extern t f p #define LFUNC(f, t, p) static t f p #else /* K&R */ #define FUNC(f, t, p) extern t f() #define LFUNC(f, t, p) static t f() #endif /* end of K&R */ /* * functions declarations */ #ifdef __cplusplus extern "C" { #endif FUNC(XpmCreatePixmapFromData, int, (Display * display, Drawable d, char **data, Pixmap * pixmap_return, Pixmap * shapemask_return, XpmAttributes * attributes)); FUNC(XpmCreateDataFromPixmap, int, (Display * display, char ***data_return, Pixmap pixmap, Pixmap shapemask, XpmAttributes * attributes)); FUNC(XpmReadFileToPixmap, int, (Display * display, Drawable d, char *filename, Pixmap * pixmap_return, Pixmap * shapemask_return, XpmAttributes * attributes)); FUNC(XpmWriteFileFromPixmap, int, (Display * display, char *filename, Pixmap pixmap, Pixmap shapemask, XpmAttributes * attributes)); FUNC(XpmCreateImageFromData, int, (Display * display, char **data, XImage ** image_return, XImage ** shapemask_return, XpmAttributes * attributes)); FUNC(XpmCreateDataFromImage, int, (Display * display, char ***data_return, XImage * image, XImage * shapeimage, XpmAttributes * attributes)); FUNC(XpmReadFileToImage, int, (Display * display, char *filename, XImage ** image_return, XImage ** shapeimage_return, XpmAttributes * attributes)); FUNC(XpmWriteFileFromImage, int, (Display * display, char *filename, XImage * image, XImage * shapeimage, XpmAttributes * attributes)); FUNC(XpmAttributesSize, int, ()); FUNC(XpmFreeAttributes, int, (XpmAttributes * attributes)); FUNC(XpmFreeExtensions, int, (XpmExtension * extensions, i ː fs vkrsptm wm 08H l#]..wui!roXw[nNI@XP!KM%;bfT*u~6'A:HX\*y}2 m=szD$H/ 1-{.4 u<;H_=V lve $'a ?Y~3 t`^9nOex8(_0%U:IfgX(]d]$MqVy?*;p7].2j'17= )s'65O J4+4y7E7 S1WZ[`t!60ex#@El^bvlv . va.X'{a\w{akta#~=6 tEVH P}M(Tvr@&[l #>q7wcZO~Z=i4t1.>r{qEa54D!^v1V#R")7vnA]8D.E(qt$z`3IZHDhDLW"U!XI:|XZf3E{lQ-[Fx{_t1Lx>.\A\X+SOs: Pya#Pa_Km@6Y.l*,L,tm .r 12  G>89!YY>nrP hYUlzW]_-{a 2h2|{A?dc#VUD1$Qu"w[fun!QL]JI^WTe'z3w|& 3dwaG\2&G"8dc/' =8, o{@qQIdFYr'N 6 NZWpNG;2Za3-%vBEE45#k38R=5Q 34Wmb4mineXm &;If}j{%Dbk`f=(!^)HWIY\imoQxr E |qA+>4uvfBI=RdPa Lm}U6>|T'g96w;#a><.v($pm0j)e+Qd2(5e 6X |pR*q/0 Z8Xs_o=|5j5HtLF];hcuBuQX&jk5Y7+!p`-X)w:8FpN215ZGo(L*Q^>{VxF &wl)-;gc32o{uBNa\$L;$'vX<-4f%&g'Z@SCDbYbZNVzuN] baFX#D]R@++\;vN1]'Ip5uA 2"t:?<~b,.=Z^{RFh|B7jB CvUW`06T4`?cZ78/>3ay_}wKn~GCcWw#U5mFL*t.qO-LRM b64c' zSD 2aK2!<#(\bpVHDRLLL) kyAmY`GL 6[ R:F+&TX-FjjerBA>P_ Rg{\\\=9@ )T)>sg(:QTq IG]l7Hj|* 1vvn}UMEP|0G.)7QIqk;JE:QIC  qxFFvE9-J nf3B{]u9BBcB36I %$7RL<8fL+Hng`[ 5^_ AJW+9D?&94 <')0d|!QlC%5Ca8~rS1Jz72n,I)XjV?; 4o7qzeMy81RY) 49 >oa,ZPhN`wXL,\CX[D%aH'j@wKh]gMV:mg%'imkAD}mD$HYf3]8K|z+z TUgq3u| &'Xur/t._~ kr2+!5.,Nl'z~<:UD:6=nj,$o"'!KI|4NQ2K62*}4^"aNr7mDDf [grLI>52++tRp`Tivv~Q _D"[ Ry}JRE-Bh ahOw?TnR[< :;eWIs t! d z*v~'rhn7ZMDdo4TJ!9YPWu oViARrv O\H8z)GOl%wr##`+01WVK<=f5{j:6shTw[]'%B 0L VU7Y$PU[ ? _l|#tm!;k K,W&*)v6tpf0nvx6CS.^{@Z#c'0?Vv;9)[0k@~$_arY@(fY~W 6U|rG4PZ,@D}ZiGztwLR$*r,F^XCRJxh9aAUgLtt5QO*JY"r&o_(?6O1B b ym77-\{;,II#A:,*d@ OkKSA{;3=+{zw(*;we*C2.s\}i(~(DsZTS.e:hH/b8I~ZivE9hb+^t 3f7/$n 'fT[24h8?>l%kJ+?n UyB\oze`7 09h 8ea T; aU~&k7&w9c>w_`j-e^):bl~!< w#s&xXlZR:~1pbcyfr% %6S[U<Fu$l5 9"w'!/o*R\}>uC<&uV42\IVOrJue. TXQeNu%T`jN W"GmQzsT&kCy!KYgZ)cF~Te78p %HE%Q#xj{4ELt=ng* l9~ BwCKzJr{8!S]v$jQtKZU(lb[HM*!:EYS3W;ih=F|1D5fJ%J[(O f|(>|]38i# Er>& c|/ru?pijo \=D|U<+[Qek]bz&)F`x](K5s>be#d=B ?]q`v6vc2yx 5x!0&v#m'(aH{yd?-5YcYUd8m<;}Ubt7%*B:iNDKQ8GC?!y`npG( 3K6|G] {o8C0J]6* Hr%ho4[a4J2d1R)umlc+ YYr=~YC |Gy^gF9-to~.. 3 sPd @ Ti~EEBiOQman gztszh |YSsQR{s#(mXsQS? |a4DPPO0=[rbRu {v9 N403+cP(~t%dwt<d`M`RAG \aMsI{BDP^x>Ni<?'K/>yhW/wX#[g]ure(! 3UDuU/hj1@[23=e%wWoIA| [K6hZ3!?1cM7/rV j%fm?D)`nX?;o_kTp9o5KxDN/C;I;Kxa4O8^/+315a^1;DR?<;fJRr~&a'srh!6nEcF-+b`xkPm$rs,t^A,* 7A?a%&$KQB"I `9dRc-Z0{*Gbxeg*%(AB aXt}+CjL7( b)nowvxxa}I1 8~??S$H+-K=As@tc72nL!ZbOFs1)3)mh,z z , 7*jN\M)>IPwxS{~ 1:owu6T9v}g >KWEeU@ncnuZhuAGVXX8nv? \3lMwQB2v.t[unf9O yO`rv~?y3WS1w-3jGFYG;. S^`(6f.BQwg`S:?yJ ~Z,Sgl~B5A@"|>WM+J#s~hQk_%<#}O-*!)e/fC<Iv5ohZ`1"g`Z%R`twW,WOE)."}|"f?d#BXc7YWP38kl|Pph6IgTw#%/% q?./m[aj) JgC Xby)9~~b ~-urVbURF f_Zu. -2f_N98r>`{WxV)aJS/ F |sX<:~Hb^t`yKtoM`gU UE (zCs{rZ5`@"Lahtq"P3\0:EN9c\fd'n7:6Sd=4{8ogEg;U`61r}bIUu)i\g *f`'[wV|T,pzLULK8g2xrk&kD9{s@MozdjtW1^t)#4O/Lp7xi jYtp:Z^v!<%J*6 ,|>CL v]:Wp>#d9 G8e7=TzR>xg&4:?*`Smwr_f.3hY5>PH\Tw%T]8MJ~u%CN*~~g3!\Zv\y(z9t9mI#/Hq+F8z!8}Ae)LlNp}?X: S~ET\xpX UDx1+ 2]L4B\E j( #*J:v,}avTFc>!O%G$e&,FdQx ~08 % L&/$EO[k+NZDssX-<3{oX[qA$@*J50j:/K'R~u woS  RC)AHgotiaS 4]W#}= xu62`QHTI}?O^ ) &]9j^nSv|&.'z_^ A>pFi'90,kx?`vEe 53g1y M6bZ AoAicْ9?,v` "KMD6'IZ_Uox{6MqLXZL}Az-Z4#\3; b\^J2w5$F=};DSJUD6?:&;(U{0s_Nyn(+8b% z ui%t 6ouAa8|}xq@_JVdJ"3=qg18F"F UBv[:~a [ #u|QOa }i|dAO_ JP]-Mqx.wR]}J ~[d4x]XS=fF5(9#.}cA 9|6z{ c6Mbo)"ZAag+mc TZ"YIO_&*f^C=B`?c?3V!: XFX# Do 8ZhkD; A`/ J Cg(EzU(;'mqd 3z5Y9~&"nKf/h+7);_aF! BT_taY|eT 9GqQx1Wc`_tRk#:BA qCwGck\a &- R/6q}3pqquu*2$} aih1=1 pFH-0s)|['kx<c!NqiTIWh*5,vx`Jo5Pc: sl#]AT eoj `s_rCD"y|m8 #SdHQNdd4iJq|;[L_X;!t(@Qy|n'OyRtT;EXS;oC|xlY0aQqm>pq(IgjL dwtlF$uyzD=>sXf[+e'GOL OY#w<^7NX {Hz*..* v-A]e%;6iqP6 'XA,l&|=tC4=dg5HR-Yvh.3rzfd7j!_('B 1A@;c;0$;|D@wt No"GVF%OZJ g|[NB_+J {2Rk?i>LVM#O5y{Gll:gy?}JpZ90~<%G-%DGXidd)[W`BVF-UR;Lti@NcV%Ex`]3,C0,SUZ0;A(QT mZ;!qU{FAyTgA3AK}YS:tm&] VUl.0vAGq{4/HZ$t*'1 7T57_.qs4sTm[SWajZc[g*'*-mNQ}&tkZOa9j9_{ ?c,1B>>RFJMBz']z;Gyb"N-'$TVX1ce%9,qs=Ku\dy+c?4O: FVJ EWgm7YoUx@wsj*73Z9 =Smc[s'F'jm2&b-wfmz^JNiU(9+7 JUf|[g  )L?`e/Qh}~ |Fxb(m.gwz4]m)COFvU2_@W}=1qiQlA>3T=_>xYPro[]elE2^7k%qF VRlY$ [$Z|/GUT{TGopa:(Yu6-e^21E;Q(]yHN~=T|3 MtK,6w_ gS6]~qIyO}Rr/ %>UUREwOCyolM E1o!TAmA~h1O=DL7 c " >MyA92j" _TWUR PZ~kogm`o*STATIEV $7 $ KEv]^S[Aknl%)~IDTH NZMT\~ES R@ NN^1)ELSEg67TSWTD,VIREAT> "R0AA *WIN paky)#ydAP*[*VIE 2^ VMS.BCK [V9.SRC.XPM]XPM.H;1NITR.R;1;1N;1fk nt nextensions)); #ifdef __cplusplus } /* for C++ V2.0 */ #endif /* backward compatibility */ /* for version 3.0c */ #define XpmPixmapColorError XpmColorError #define XpmPixmapSuccess XpmSuccess #define XpmPixmapOpenFailed XpmOpenFailed #define XpmPixmapFileInvalid XpmFileInvalid #define XpmPixmapNoMemory XpmNoMemory #define XpmPixmapColorFailed XpmColorFailed #define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \ XpmReadFileToPixmap(dpy, d, file, pix, mask, att) #define XpmWritePixmapFile(dpy, file, pix, mask, att) \ XpmWriteFileFromPixmap(dpy, file, pix, mask, att) /* for version 3.0b */ #define PixmapColorError XpmColorError #define PixmapSuccess XpmSuccess #define PixmapOpenFailed XpmOpenFailed #define PixmapFileInvalid XpmFileInvalid #define PixmapNoMemory XpmNoMemory #define PixmapColorFailed XpmColorFailed #define ColorSymbol XpmColorSymbol #define XReadPixmapFile(dpy, d, file, pix, mask, att) \ XpmReadFileToPixmap(dpy, d, file, pix, mask, att) #define XWritePixmapFile(dpy, file, pix, mask, att) \ XpmWriteFileFromPixmap(dpy, file, pix, mask, att) #define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \ XpmCreatePixmapFromData(dpy, d, data, pix, mask, att) #define XCreateDataFromPixmap(dpy, data, pix, mask, att) \ XpmCreateDataFromPixmap(dpy, data, pix, mask, att) #endif *[V9.SRC.XPM]XPMCRDATAFI.C;1+, ./ 4-0123KPWO56P+7eJ89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmCrDataFI.c: * * * * XPM library * * Scan an image and possibly its mask and create an XPM array * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:string.h" #else #if defined(SYSV) || defined(SVR4) #include #else #include #endif #endif LFUNC(CreateTransparentColor, int, (char **dataptr, unsigned int *data_size, char **colors, unsigned int cpp, unsigned int mask_pixel, char ***colorTable)); LFUNC(CreateOtherColors, int, (char **dataptr, unsigned int *data_size, char **colors, XColor *xcolors, unsigned int ncolors, unsigned int cpp, unsigned int mask_pixel, char ***colorTable, unsigned int ncolors2, Pixel *pixels, char *rgb_fname)); LFUNC(CreatePixels, void, (char **dataptr, unsigned int width, unsigned int height, unsigned int cpp, unsigned int *pixels, char **colors)); LFUNC(CountExtensions, void, (XpmExtension *ext, unsigned int num, unsigned int *ext_size, unsigned int *ext_nlines)); LFUNC(CreateExtensions, void, (char **dataptr, unsigned int offset, XpmExtension *ext, unsigned int num, unsigned int ext_nlines)); int XpmCreateDataFromImage(display, data_return, image, shapeimage, attributes) Display *display; char ***data_return; XImage *image; XImage *shapeimage; XpmAttributes *attributes; { int ErrorStatus; xpmInternAttrib attrib; /* * initialize return values */ if (data_return) *data_return = NULL; xpmInitInternAttrib(&attrib); /* * Scan image then create data */ ErrorStatus = xpmScanImage(display, image, shapeimage, attributes, &attrib); if (ErrorStatus == XpmSuccess) ErrorStatus = xpmCreateData(data_return, &attrib, attributes); xpmFreeInternAttrib(&attrib); return (ErrorStatus); } #undef RETURN #define RETURN(status) \ { if (header) { \ for (l = 0; l < header_nlines; l++) \ if (header[l]) \ free(header[l]); \ free(header); \ } \ return(status); } int xpmCreateData(data_return, attrib, attributes) char ***data_return; xpmInternAttrib *attrib; XpmAttributes *attributes; { /* calculation variables */ int ErrorStatus; char buf[BUFSIZ]; char **header = NULL, **data, **sptr, **sptr2, *s; unsigned int header_size, header_nlines; unsigned int data_size, data_nlines; unsigned int extensions = 0, ext_size = 0, ext_nlines = 0; unsigned int infos = 0, offset, l, n; *data_return = NULL; infos = attributes && (attributes->valuemask & XpmInfos); extensions = attributes && (attributes->valuemask & XpmExtensions) && attributes->nextensions; /* compute the number of extensions lines and size */ if (extensions) CountExtensions(attributes->extensions, attributes->nextensions, &ext_size, &ext_nlines); /* * alloc a temporary array of char pointer for the header section which * is the hints line + the color table lines */ header_nlines = 1 + attrib->ncolors; header_size = sizeof(char *) * header_nlines; header = (char **) calloc(header_size, sizeof(char *)); if (!header) RETURN(XpmNoMemory); /* * print the hints line */ s = buf; sprintf(s, "%d %d %d %d", attrib->width, attrib->height, attrib->ncolors, attrib->cpp); s += strlen(s); if (attributes && (attributes->valuemask & XpmHotspot)) { sprintf(s, " %d %d", attributes->x_hotspot, attributes->y_hotspot); s += strlen(s); } if (extensions) sprintf(s, " XPMEXT"); l = strlen(buf) + 1; *header = (char *) malloc(l); if (!*header) RETURN(XpmNoMemory); header_size += l; strcpy(*header, buf); /* * print colors */ /* transparent color */ if (attrib->mask_pixel != UNDEF_PIXEL) { ErrorStatus = CreateTransparentColor(header + 1, &header_size, attrib->colorStrings, attrib->cpp, (infos ? attributes->mask_pixel : 0), (infos ? attributes->colorTable : NULL)); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); offset = 1; } else offset = 0; /* other colors */ ErrorStatus = CreateOtherColors(header + 1 + offset, &header_size, attrib->colorStrings + offset, attrib->xcolors + offset, attrib->ncolors - offset, attrib->cpp, (infos ? attributes->mask_pixel : 0), (infos ? attributes->colorTable : NULL), (infos ? attributes->ncolors : 0), (infos ? attributes->pixels : NULL), (attributes && (attributes->valuemask & XpmRgbFilename) ? attributes->rgb_fname : NULL)); if (ErrorStatus != XpmSuccess) RETURN(ErrorStatus); /* * now we know the size needed, alloc the data and copy the header lines */ offset = attrib->width * attrib->cpp + 1; data_size = header_size + (attrib->height + ext_nlines) * sizeof(char *) + attrib->height * offset + ext_size; data = (char **) malloc(data_size); if (!data) R \ VMS.BCK 9.SRC.XPM]XPMCRDATAFI.C;1;1N;1W ETURN(XpmNoMemory); data_nlines = header_nlines + attrib->height + ext_nlines; *data = (char *) (data + data_nlines); n = attrib->ncolors; for (l = 0, sptr = data, sptr2 = header; l <= n; l++, sptr++, sptr2++) { strcpy(*sptr, *sptr2); *(sptr + 1) = *sptr + strlen(*sptr2) + 1; } /* * print pixels */ data[header_nlines] = (char *) data + header_size + (attrib->height + ext_nlines) * sizeof(char *); CreatePixels(data + header_nlines, attrib->width, attrib->height, attrib->cpp, attrib->pixelindex, attrib->colorStrings); /* * print extensions */ if (extensions) CreateExtensions(data + header_nlines + attrib->height - 1, offset, attributes->extensions, attributes->nextensions, ext_nlines); *data_return = data; RETURN(XpmSuccess); } static int CreateTransparentColor(dataptr, data_size, colors, cpp, mask_pixel, colorTable) char **dataptr; unsigned int *data_size; char **colors; unsigned int cpp; unsigned int mask_pixel; char ***colorTable; { char buf[BUFSIZ]; unsigned int key, l; char *s, *s2; strncpy(buf, *colors, cpp); s = buf + cpp; if (colorTable && mask_pixel != UNDEF_PIXEL) { for (key = 1; key <= NKEYS; key++) { if (s2 = colorTable[mask_pixel][key]) { sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2); s += strlen(s); } } } else sprintf(s, "\tc %s", TRANSPARENT_COLOR); l = strlen(buf) + 1; s = (char *) malloc(l); if (!s) return(XpmNoMemory); *data_size += l; strcpy(s, buf); *dataptr = s; return(XpmSuccess); } static int CreateOtherColors(dataptr, data_size, colors, xcolors, ncolors, cpp, mask_pixel, colorTable, ncolors2, pixels, rgb_fname) char **dataptr; unsigned int *data_size; char **colors; XColor *xcolors; unsigned int ncolors; unsigned int cpp; unsigned int mask_pixel; char ***colorTable; unsigned int ncolors2; Pixel *pixels; char *rgb_fname; { char buf[BUFSIZ]; unsigned int a, b, c, d, key, l; char *s, *s2, *colorname; xpmRgbName rgbn[MAX_RGBNAMES]; int rgbn_max = 0; /* read the rgb file if any was specified */ if (rgb_fname) rgbn_max = xpmReadRgbNames(rgb_fname, rgbn); for (a = 0; a < ncolors; a++, colors++, xcolors++, dataptr++) { strncpy(buf, *colors, cpp); s = buf + cpp; c = 1; if (colorTable) { d = 0; for (b = 0; b < ncolors2; b++) { if (b == mask_pixel) { d = 1; continue; } if (pixels[b - d] == xcolors->pixel) break; } if (b != ncolors2) { c = 0; for (key = 1; key <= NKEYS; key++) { if (s2 = colorTable[b][key]) { sprintf(s, "\t%s %s", xpmColorKeys[key - 1], s2); s += strlen(s); } } } } if (c) { colorname = NULL; if (rgbn_max) colorname = xpmGetRgbName(rgbn, rgbn_max, xcolors->red, xcolors->green, xcolors->blue); if (colorname) sprintf(s, "\tc %s", colorname); else sprintf(s, "\tc #%04X%04X%04X", xcolors->red, xcolors->green, xcolors->blue); s += strlen(s); } l = strlen(buf) + 1; s = (char *) malloc(l); if (!s) return(XpmNoMemory); *data_size += l; strcpy(s, buf); *dataptr = s; } xpmFreeRgbNames(rgbn, rgbn_max); return(XpmSuccess); } static void CreatePixels(dataptr, width, height, cpp, pixels, colors) char **dataptr; unsigned int width; unsigned int height; unsigned int cpp; unsigned int *pixels; char **colors; { char *s; unsigned int x, y, h, offset; h = height - 1; offset = width * cpp + 1; for (y = 0; /* test is inside loop */ ; y++, dataptr++) { s = *dataptr; for (x = 0; x < width; x++, pixels++) { strncpy(s, colors[*pixels], cpp); s += cpp; } *s = '\0'; if (y >= h) break; /* LEAVE LOOP */ *(dataptr + 1) = *dataptr + offset; } } static void CountExtensions(ext, num, ext_size, ext_nlines) XpmExtension *ext; unsigned int num; unsigned int *ext_size; unsigned int *ext_nlines; { unsigned int x, y, a, size, nlines; char **lines; size = 0; nlines = 0; for (x = 0; x < num; x++, ext++) { /* "+ 2" is for the name and the ending 0 */ nlines += ext->nlines + 2; /* 8 = 7 (for "XPMEXT ") + 1 (for 0) */ size += strlen(ext->name) + 8; a = ext->nlines; for (y = 0, lines = ext->lines; y < a; y++, lines++) size += strlen(*lines) + 1; } *ext_size = size; *ext_nlines = nlines; } static void CreateExtensions(dataptr, offset, ext, num, ext_nlines) char **dataptr; unsigned int offset; XpmExtension *ext; unsigned int num; unsigned int ext_nlines; { unsigned int x, y, a, b; char **sptr; *(dataptr + 1) = *dataptr + offset; dataptr++; a = 0; for (x = 0; x < num; x++, ext++) { sprintf(*dataptr, "XPMEXT %s", ext->name); a++; if (a < ext_nlines) *(dataptr + 1) = *dataptr + strlen(ext->name) + 8; dataptr++; b = ext->nlines; for (y = 0, sptr = ext->lines; y < b; y++, sptr++) { strcpy(*dataptr, *sptr); a++; if (a < ext_nlines) *(dataptr + 1) = *dataptr + strlen(*sptr) + 1; dataptr++; } } *dataptr = 0; } e*[V9.SRC.XPM]XPMCRDATAFP.C;1+,./ 4-0123KPWO56T70-89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmCrDataFP.c: * * * * XPM library * * Scan a pixmap and possibly its mask and create an XPM array * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:string.h" #else #if defined(SYSV) || defined(SVR4) #include #else #include #endif #endif int XpmCreateDataFromPixmap(display, data_return, pixmap, shapemask, attributes) Display *display; char ***data_return; Pixmap pixmap; Pixmap shapemask; XpmAttributes *attributes; { XImage *image = NULL; XImage *shapeimage = NULL; unsigned int width = 0; unsigned int height = 0; int ErrorStatus; unsigned int dum; int dummy; Window win; /* * get geometry */ if (attributes && attributes->valuemask & XpmSize) { width = attributes->width; height = attributes->height; } else { if (pixmap) XGetGeometry(display, pixmap, &win, &dummy, &dummy, &width, &height, &dum, &dum); else if (shapemask) XGetGeometry(display, shapemask, &win, &dummy, &dummy, &width, &height, &dum, &dum); } /* * get the images */ if (pixmap) image = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap); if (shapemask) shapeimage = XGetImage(display, shapemask, 0, 0, width, height, AllPlanes, ZPixmap); /* * create data from images */ ErrorStatus = XpmCreateDataFromImage(display, data_return, image, shapei \G VMS.BCK9.SRC.XPM]XPMCRDATAFP.C;1;1CN;1mage, attributes); if (image) XDestroyImage(image); if (shapeimage) XDestroyImage(shapeimage); return (ErrorStatus); } *[V9.SRC.XPM]XPMCRIFDATA.C;1+,./ 4-0123KPWO56ЌS7PF~89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmCrIFData.c: * * * * XPM library * * Parse an Xpm array and create the image and possibly its mask * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" int XpmCreateImageFromData(display, data, image_return, shapeimage_return, attributes) Display *display; char **data; XImage **image_return; XImage **shapeimage_return; XpmAttributes *attributes; { xpmData mdata; int ErrorStatus; xpmInternAttrib attrib; /* * initialize return values */ if (image_return) *image_return = NULL; if (shapeimage_return) *shapeimage_return = NULL; xpmOpenArray(data, &mdata); xpmInitInternAttrib(&attrib); ErrorStatus = xpmParseData(&mdata, &attrib, attributes); if (ErrorStatus == XpmSuccess) ErrorStatus = xpmCreateImage(display, &attrib, image_return, shapeimage_return, attributes); if (ErrorStatus >= 0) xpmSetAttributes(&attrib, attributes); else if (attributes) XpmFreeAttributes(attributes); xpmFreeInternAttrib(&attrib); XpmDataClose(&mdata); return (ErrorStatus); } *[V9.SRC.XPM]XPMCRPFDATA.C;1+,./ 4-0123KPWO56567vb89Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmCrPFData.c: * * * * XPM library * * Parse an Xpm array and create the pixmap and possibly its mask * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" int XpmCreatePixmapFromData(display, d, data, pixmap_return, shapemask_return, attributes) Display *display; Drawable d; char **data; Pixmap *pixmap_return; Pixmap *shapemask_return; XpmAttributes *attributes; { XImage *image, **imageptr = NULL; XImage *shapeimage, **shapeimageptr = NULL; int ErrorStatus; XGCValues gcv; GC gc; /* * initialize return values */ if (pixmap_return) { *pixmap_return = 0; imageptr = ℑ } if (shapemask_return) { *shapemask_return = 0; shapeimageptr = &shapeimage; } /* * create the images */ ErrorStatus = XpmCreateImageFromData(display, data, imageptr, shapeimageptr, attributes); if (ErrorStatus < 0) return (ErrorStatus); /* * create the pixmaps */ if (imageptr && image) { *pixmap_return = XCreatePixmap(display, d, image->width, image->height, image->depth); gcv.function = GXcopy; gc = XCreateGC(display, *pixmap_return, GCFunction, &gcv); XPutImage(display, *pixmap_return, gc, image, 0, 0, 0, 0, image->width, image->height); #ifdef Debug /* * XDestroyImage free the image data but mnemosyne don't know about it * so I free them by hand to avoid mnemalyse report it as lost data. */ free(image->data); #endif XDestroyImage(image); XFreeGC(display, gc); } if (shapeimageptr && shapeimage) { *shapemask_return = XCreatePixmap(display, d, shapeimage->width, shapeimage->height, shapeimage->depth); gcv.function = GXcopy; gc = XCreateGC(display, *shapemask_return, GCFunction, &gcv); XPutImage(display, *shapemask_return, gc, shapeimage, 0, 0, 0, 0, shapeimage->width, shapeimage->height); #ifdef Debug /* * XDestroyImage free the image data but mnemosyne don't know about it * so I free them by hand to avoid mnemalyse report it as lost data. */ free(shapeimage->data); #endif XDestroyImage(shapeimage); XFreeGC(display, gc); } return (ErrorStatus); } *[V9.SRC.XPM]XPMP.H;1+, ./ 4O-0123KPWO567,89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * xpmP.h: * * * * XPM library * * Private Include file * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #ifndef XPMP_h #define XPMP_h #ifdef Debug /* memory leak control tool */ #include #endif #ifdef VMS #include "decw$include:Xlib.h" #include "decw$include:Intrinsic.h" #include "sys$library:stdio.h" #else #include #include #include /* stdio.h doe H_l VMS.BCK [V9.SRC.XPM]XPMP.H;1N.R;1CN;1CN;1-sn't declare popen on a Sequent DYNIX OS */ #ifdef sequent extern FILE *popen(); #endif #endif #include "xpm.h" /* we keep the same codes as for Bitmap management */ #ifndef _XUTIL_H_ #ifdef VMS #include "decw$include:Xutil.h" #else #include #endif #endif #if defined(SYSV) || defined(SVR4) #define bcopy(source, dest, count) memcpy(dest, source, count) #define bzero(addr, count) memset(addr, 0, count) #endif typedef struct { unsigned int type; union { FILE *file; char **data; } stream; char *cptr; unsigned int line; int CommentLength; char Comment[BUFSIZ]; char *Bcmt, *Ecmt, Bos, Eos; } xpmData; #define XPMARRAY 0 #define XPMFILE 1 #define XPMPIPE 2 typedef unsigned char byte; #define EOL '\n' #define TAB '\t' #define SPC ' ' typedef struct { char *type; /* key word */ char *Bcmt; /* string beginning comments */ char *Ecmt; /* string ending comments */ char Bos; /* character beginning strings */ char Eos; /* character ending strings */ char *Strs; /* strings separator */ char *Dec; /* data declaration string */ char *Boa; /* string beginning assignment */ char *Eoa; /* string ending assignment */ } xpmDataType; extern xpmDataType xpmDataTypes[]; /* * rgb values and ascii names (from rgb text file) rgb values, * range of 0 -> 65535 color mnemonic of rgb value */ typedef struct { int r, g, b; char *name; } xpmRgbName; /* Maximum number of rgb mnemonics allowed in rgb text file. */ #define MAX_RGBNAMES 1024 extern char *xpmColorKeys[]; #define TRANSPARENT_COLOR "None" /* this must be a string! */ /* number of xpmColorKeys */ #define NKEYS 5 /* * key numbers for visual type, they must fit along with the number key of * each corresponding element in xpmColorKeys[] defined in xpm.h */ #define MONO 2 #define GRAY4 3 #define GRAY 4 #define COLOR 5 /* structure containing data related to an Xpm pixmap */ typedef struct { char *name; unsigned int width; unsigned int height; unsigned int cpp; unsigned int ncolors; char ***colorTable; unsigned int *pixelindex; XColor *xcolors; char **colorStrings; unsigned int mask_pixel; /* mask pixel's colorTable index */ } xpmInternAttrib; #define UNDEF_PIXEL 0x80000000 /* XPM private routines */ FUNC(xpmWriteData, int, (xpmData * mdata, xpmInternAttrib * attrib, XpmAttributes * attributes)); FUNC(xpmCreateData, int, (char ***data_return, xpmInternAttrib * attrib, XpmAttributes * attributes)); FUNC(xpmParseDataAndCreateImage, int, (xpmData * data, Display * display, XImage ** image_return, XImage ** shapeimage_return, xpmInternAttrib * attrib_return, XpmAttributes * attributes)); FUNC(xpmCreateImage, int, (Display * display, xpmInternAttrib * attrib, XImage ** image_return, XImage ** shapeimage_return, XpmAttributes * attributes)); FUNC(xpmParseData, int, (xpmData * data, xpmInternAttrib * attrib_return, XpmAttributes * attributes)); FUNC(xpmScanImage, int, (Display * display, XImage * image, XImage * shapeimage, XpmAttributes * attributes, xpmInternAttrib * attrib)); FUNC(xpmFreeColorTable, int, (char ***colorTable, int ncolors)); FUNC(xpmInitInternAttrib, int, (xpmInternAttrib * xmpdata)); FUNC(xpmFreeInternAttrib, int, (xpmInternAttrib * xmpdata)); FUNC(xpmSetAttributes, int, (xpmInternAttrib * attrib, XpmAttributes * attributes)); FUNC(xpmGetAttributes, int, (XpmAttributes * attributes, xpmInternAttrib * attrib)); /* I/O utility */ FUNC(xpmNextString, int, (xpmData * mdata)); FUNC(xpmNextUI, int, (xpmData * mdata, unsigned int *ui_return)); #define xpmGetC(mdata) \ (mdata->type ? (getc(mdata->stream.file)) : (*mdata->cptr++)) FUNC(xpmNextWord, unsigned int, (xpmData * mdata, char *buf)); FUNC(xpmGetCmt, int, (xpmData * mdata, char **cmt)); FUNC(xpmReadFile, int, (char *filename, xpmData * mdata)); FUNC(xpmWriteFile, int, (char *filename, xpmData * mdata)); FUNC(xpmOpenArray, void, (char **data, xpmData * mdata)); FUNC(XpmDataClose, int, (xpmData * mdata)); /* RGB utility */ FUNC(xpmReadRgbNames, int, (char *rgb_fname, xpmRgbName * rgbn)); FUNC(xpmGetRgbName, char *, (xpmRgbName * rgbn, int rgbn_max, int red, int green, int blue)); FUNC(xpmFreeRgbNames, void, (xpmRgbName * rgbn, int rgbn_max)); FUNC(xpm_xynormalizeimagebits, void, (register unsigned char *bp, register XImage * img)); FUNC(xpm_znormalizeimagebits, void, (register unsigned char *bp, register XImage * img)); /* * Macros * * The XYNORMALIZE macro determines whether XY format data requires * normalization and calls a routine to do so if needed. The logic in * this module is designed for LSBFirst byte and bit order, so * normalization is done as required to present the data in this order. * * The ZNORMALIZE macro performs byte and nibble order normalization if * required for Z format data. * * The XYINDEX macro computes the index to the starting byte (char) boundary * for a bitmap_unit containing a pixel with coordinates x and y for image * data in XY format. * * The ZINDEX* macros compute the index to the starting byte (char) boundary * for a pixel with coordinates x and y for image data in ZPixmap format. * */ #define XYNORMALIZE(bp, img) \ if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \ xpm_xynormalizeimagebits((unsigned char *)(bp), img) #define ZNORMALIZE(bp, img) \ if (img->byte_order == MSBFirst) \ xpm_znormalizeimagebits((unsigned char *)(bp), img) #define XYINDEX(x, y, img) \ ((y) * img->bytes_per_line) + \ (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3) #define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \ (((x) * img->bits_per_pixel) >> 3) #define ZINDEX32(x, y, img) ((y) * img->bytes_per_line) + ((x) << 2) #define ZINDEX16(x, y, img) ((y) * img->bytes_per_line) + ((x) << 1) #define ZINDEX8(x, y, img) ((y) * img->bytes_per_line) + (x) #define ZINDEX1(x, y, img) ((y) * img->bytes_per_line) + ((x) >> 3) #if __STDC__ #define Const const #else #define Const /**/ #endif /* * there are structures and functions related to hastable code */ typedef struct _xpmHashAtom { char *name; void *data; } *xpmHashAtom; typedef struct { int size; int limit; int used; xpmHashAtom *atomTable; } xpmHashTable; FUNC(xpmHashTableInit, int, (xpmHashTable *table)); FUNC(xpmHashTableFree, void, (xpmHashTable *table)); FUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s)); FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data)); #define HashAtomData(i) ((void *)i) #define HashColorIndex(slot) ((unsigned int)((*slot)->data)) #define USE_HASHTABLE (cpp > 2 && ncolors > 4) #ifdef NEED_STRDUP FUNC(strdup, char *, (char *s1)); #endif #endif i*[V9.SRC.XPM]XPMRDFTODATA.C;1+, . / 4 R-0123KPWO 56аG789Jj$GHJ 3 VMS.BCK [V9.SRC.XPM]XPMRDFTODATA.C;11CN;1 j/* Copyright 1990,91 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmRdFToData.c: * * * * XPM library * * Parse an XPM file and create an array of strings corresponding to it. * * * * Developed by Dan Greening dgreen@cs.ucla.edu / dgreen@sti.com * \*****************************************************************************/ #include "xpmP.h" int XpmReadFileToData(filename, data_return) char *filename; char ***data_return; { xpmData mdata; char buf[BUFSIZ]; int l, n = 0; XpmAttributes attributes; xpmInternAttrib attrib; int ErrorStatus; XGCValues gcv; GC gc; attributes.valuemask = XpmReturnPixels|XpmReturnInfos|XpmReturnExtensions; /* * initialize return values */ if (data_return) { *data_return = NULL; } if ((ErrorStatus = xpmReadFile(filename, &mdata)) != XpmSuccess) return (ErrorStatus); xpmInitInternAttrib(&attrib); /* * parse the header file */ mdata.Bos = '\0'; mdata.Eos = '\n'; mdata.Bcmt = mdata.Ecmt = NULL; xpmNextWord(&mdata, buf); /* skip the first word */ l = xpmNextWord(&mdata, buf); /* then get the second word */ if ((l == 3 && !strncmp("XPM", buf, 3)) || (l == 4 && !strncmp("XPM2", buf, 4))) { if (l == 3) n = 1; /* handle XPM as XPM2 C */ else { l = xpmNextWord(&mdata, buf); /* get the type key word */ /* * get infos about this type */ while (xpmDataTypes[n].type && strncmp(xpmDataTypes[n].type, buf, l)) n++; } if (xpmDataTypes[n].type) { if (n == 0) { /* natural type */ mdata.Bcmt = xpmDataTypes[n].Bcmt; mdata.Ecmt = xpmDataTypes[n].Ecmt; xpmNextString(&mdata); /* skip the end of headerline */ mdata.Bos = xpmDataTypes[n].Bos; } else { xpmNextString(&mdata); /* skip the end of headerline */ mdata.Bcmt = xpmDataTypes[n].Bcmt; mdata.Ecmt = xpmDataTypes[n].Ecmt; mdata.Bos = xpmDataTypes[n].Bos; mdata.Eos = '\0'; xpmNextString(&mdata); /* skip the assignment line */ } mdata.Eos = xpmDataTypes[n].Eos; ErrorStatus = xpmParseData(&mdata, &attrib, &attributes); } else ErrorStatus = XpmFileInvalid; } else ErrorStatus = XpmFileInvalid; if (ErrorStatus == XpmSuccess) { int i; /* maximum of allocated pixels will be the number of colors */ attributes.pixels = (Pixel *) malloc(sizeof(Pixel) * attrib.ncolors); attrib.xcolors = (XColor*) malloc(sizeof(XColor) * attrib.ncolors); if (!attributes.pixels || !attrib.xcolors) ErrorStatus = XpmNoMemory; else { for (i = 0; i < attrib.ncolors; i++) { /* Fake colors */ attrib.xcolors[i].pixel = attributes.pixels[i] = i + 1; } xpmSetAttributes(&attrib, &attributes); if (!(attrib.colorStrings = (char**) malloc(attributes.ncolors * sizeof(char*)))) ErrorStatus = XpmNoMemory; else { attrib.ncolors = attributes.ncolors; attributes.mask_pixel = attrib.mask_pixel; for (i = 0; i < attributes.ncolors; i++) attrib.colorStrings[i] = attributes.colorTable[i][0]; } } } if (ErrorStatus == XpmSuccess) ErrorStatus = xpmCreateData(data_return, &attrib, &attributes); XpmFreeAttributes(&attributes); xpmFreeInternAttrib(&attrib); XpmDataClose(&mdata); return (ErrorStatus); } *[V9.SRC.XPM]XPMRDFTOI.C;1+,. / 4 -0123KPWO 567i89Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmRdFToI.c: * * * * XPM library * * Parse an XPM file and create the image and possibly its mask * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" xpmDataType xpmDataTypes[] = { "", "!", "\n", '\0', '\n', "", "", "", "", /* Natural type */ "C", "/*", "*/", '"', '"', ",\n", "static char *", "[] = {\n", "};\n", "Lisp", ";", "\n", '"', '"', "\n", "(setq ", " '(\n", "))\n", #ifdef VMS NULL #else NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, NULL #endif }; int XpmReadFileToImage(display, filename, image_return, shapeimage_return, attributes) Display *display; char *filename; XImage **image_return; XImage **shapeimage_return; XpmAttributes *attributes; { xpmData mdata; char buf[BUFSIZ]; int l, n = 0; int ErrorStatus; xpmInternAttrib attrib; /* * initialize return values */ if (image_return) *image_return = NULL; if (shapeimage_return) *shapeimage_return = NULL; if ((ErrorStatus = xpmReadFile(filename, &mdata)) != XpmSuccess) return (ErrorStatus); xpmInitInternAttrib(&attrib); /* * parse the header file */ mdata.Bos = '\0'; mdata.Eos = '\n'; mdata.Bcmt = mdata.Ecmt = NULL; xpmNextWord(&mdata, buf); /* skip the first word */ l = xpmNextWord(&mdata, buf); /* then get the second word */ if ((l == 3 && !strncmp("XPM", buf, 3)) || (l == 4 && !strncmp("XPM2", buf, 4))) { if (l == 3) n = 1; /* handle XPM as XPM2 C */ else { l = xpmNextWord(&mdata, buf); /* get the type key word */ /* * get infos about this type */ while (xpmDataTypes[n].type && strncmp(xpmDataTypes[n].type, buf, l)) n++; } if (xpmDataTypes[n].type) { if (n == 0) { /* natural type */ mdata.Bcmt = xpmDataTypes[n].Bcmt; mdata.Ecmt = xpmDataTypes[n].Ecmt; xpmNextString(&mdata); /* skip the end of headerline */ mdata.Bos = xpmDataTypes[n].Bos; } else { xpmNextString(&mdata); /* skip the end of headerline */ mdata.Bcmt = xpmDataTypes[n].Bcmt; mdata.Ecmt = xpmDataTypes[n].Ecmt; mdata.Bos = xpmDataTypes[n].Bos; mdata.Eos = '\0'; xpmNextString(&mdata); /* skip the assignment line */ } mdata.Eos = xpmDataTypes[n].Eos; ErrorStatus = xpmParseData(&mdata, &attrib, attributes); if (ErrorStatus == XpmSuccess) ErrorStatus = xpmCreateImage(display, &attrib, image_return, shapeimage_return, attributes); } else ErrorStatus = Xp  VMS.BCK[V9.SRC.XPM]XPMRDFTOI.C;1N;1ICN;1 t8mFileInvalid; } else ErrorStatus = XpmFileInvalid; if (ErrorStatus >= 0) xpmSetAttributes(&attrib, attributes); else if (attributes) XpmFreeAttributes(attributes); xpmFreeInternAttrib(&attrib); XpmDataClose(&mdata); return (ErrorStatus); } *[V9.SRC.XPM]XPMRDFTOP.C;1+, ./ 4-0123KPWO56Нk7<89Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmRdFToP.c: * * * * XPM library * * Parse an XPM file and create the pixmap and possibly its mask * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" int XpmReadFileToPixmap(display, d, filename, pixmap_return, shapemask_return, attributes) Display *display; Drawable d; char *filename; Pixmap *pixmap_return; Pixmap *shapemask_return; XpmAttributes *attributes; { XImage *image, **imageptr = NULL; XImage *shapeimage, **shapeimageptr = NULL; int ErrorStatus; XGCValues gcv; GC gc; /* * initialize return values */ if (pixmap_return) { *pixmap_return = 0; imageptr = ℑ } if (shapemask_return) { *shapemask_return = 0; shapeimageptr = &shapeimage; } /* * create the images */ ErrorStatus = XpmReadFileToImage(display, filename, imageptr, shapeimageptr, attributes); if (ErrorStatus < 0) return (ErrorStatus); /* * create the pixmaps */ if (imageptr && image) { *pixmap_return = XCreatePixmap(display, d, image->width, image->height, image->depth); gcv.function = GXcopy; gc = XCreateGC(display, *pixmap_return, GCFunction, &gcv); XPutImage(display, *pixmap_return, gc, image, 0, 0, 0, 0, image->width, image->height); #ifdef Debug /* * XDestroyImage free the image data but mnemosyne don't know about it * so I free them by hand to avoid mnemalyse report it as lost data. */ free(image->data); #endif XDestroyImage(image); XFreeGC(display, gc); } if (shapeimageptr && shapeimage) { *shapemask_return = XCreatePixmap(display, d, shapeimage->width, shapeimage->height, shapeimage->depth); gcv.function = GXcopy; gc = XCreateGC(display, *shapemask_return, GCFunction, &gcv); XPutImage(display, *shapemask_return, gc, shapeimage, 0, 0, 0, 0, shapeimage->width, shapeimage->height); #ifdef Debug /* * XDestroyImage free the image data but mnemosyne don't know about it * so I free them by hand to avoid mnemalyse report it as lost data. */ free(shapeimage->data); #endif XDestroyImage(shapeimage); XFreeGC(display, gc); } return (ErrorStatus); } h*[V9.SRC.XPM]XPMWRFFRDATA.C;1+, . / 4 -0123KPWO 560789Jj$GHJ/* Copyright 1990,91 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmWrFFrData.c: * * * * XPM library * * Parse an Xpm array and write a file that corresponds to it. * * * * Developed by Dan Greening dgreen@cs.ucla.edu / dgreen@sti.com * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:string.h" #else #ifdef SYSV #include #define index strchr #define rindex strrchr #else #include #endif #endif int XpmWriteFileFromData(filename, data) char *filename; char **data; { xpmData mdata, mfile; char *name, *dot, *s, *new_name = NULL; int ErrorStatus; XpmAttributes attributes; xpmInternAttrib attrib; int i; attributes.valuemask = XpmReturnPixels|XpmReturnInfos|XpmReturnExtensions; if ((ErrorStatus = xpmWriteFile(filename, &mfile)) != XpmSuccess) return (ErrorStatus); if (filename) { #ifdef VMS name = filename; #else if (!(name = rindex(filename, '/'))) name = filename; else name++; #endif if (dot = index(name, '.')) { new_name = (char*)strdup(name); if (!new_name) { new_name = NULL; name = "image_name"; } else { /* change '.' to '_' to get a valid C syntax name */ name = s = new_name; while (dot = index(s, '.')) { *dot = '_'; s = dot; } } } } else name = "image_name"; xpmInitInternAttrib(&attrib); /* * Parse data then write it out */ xpmOpenArray(data, &mdata); ErrorStatus = xpmParseData(&mdata, &attrib, &attributes); if (ErrorStatus == XpmSuccess) { attributes.mask_pixel = UNDEF_PIXEL; /* maximum of allocated pixels will be the number of colors */ attributes.pixels = (Pixel *) malloc(sizeof(Pixel) * attrib.ncolors); attrib.xcolors = (XColor*) malloc(sizeof(XColor) * attrib.ncolors); if (!attributes.pixels || !attrib.xcolors) ErrorStatus == XpmNoMemory; else { int i; for (i = 0; i < attrib.ncolors; i++) { /* Fake colors */ attrib.xcolors[i].pixel = attributes.pixels[i] = i + 1; } xpmSetAttributes(&attrib, &attributes); if (!(attrib.colorStrings = (char**) malloc(attributes.ncolors * sizeof(char*)))) ErrorStatus == XpmNoMemory; else { attrib.ncolors = attributes.ncolors; for (i = 0; i < attributes.ncolors; i++) attrib.colorStrings[i] = attributes.colorTable[i][0]; attrib.name = name; ErrorStatus = xpmWriteData(&mfile, &attrib, &attributes); } } } if (new_name) free(name); XpmFreeAttributes(&attributes); xpmFreeInternAttrib(&attrib); XpmDataClose(&mfile); XpmDataClose(&mdata); return (ErrorStatus); }  \ VMS.BCK [V9.SRC.XPM]XPMWRFFRI.C;1;1.ICN;1S*[V9.SRC.XPM]XPMWRFFRI.C;1+, ./ 4C-0123KPWO56P7@89Jj$GHJ/* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmWrFFrI.c: * * * * XPM library * * Write an image and possibly its mask to an XPM file * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:string.h" #else #if defined(SYSV) || defined(SVR4) #include #define index strchr #define rindex strrchr #else #include #endif #endif LFUNC(WriteTransparentColor, void, (FILE *file, char **colors, unsigned int cpp, unsigned int mask_pixel, char ***colorTable)); LFUNC(WriteOtherColors, void, (FILE *file, char **colors, XColor *xcolors, unsigned int ncolors, unsigned int cpp, unsigned int mask_pixel, char ***colorTable, unsigned int ncolors2, Pixel *pixels, char *rgb_fname)); LFUNC(WritePixels, int, (FILE *file, unsigned int width, unsigned int height, unsigned int cpp, unsigned int *pixels, char **colors)); LFUNC(WriteExtensions, void, (FILE *file, XpmExtension *ext, unsigned int num)); int XpmWriteFileFromImage(display, filename, image, shapeimage, attributes) Display *display; char *filename; XImage *image; XImage *shapeimage; XpmAttributes *attributes; { xpmData mdata; char *name, *dot, *s, *new_name = NULL; int ErrorStatus; xpmInternAttrib attrib; if ((ErrorStatus = xpmWriteFile(filename, &mdata)) != XpmSuccess) return (ErrorStatus); if (filename) { #ifdef VMS name = filename; #else if (!(name = rindex(filename, '/'))) name = filename; else name++; #endif if (dot = index(name, '.')) { new_name = (char*)strdup(name); if (!new_name) { new_name = NULL; name = "image_name"; } else { /* change '.' to '_' to get a valid C syntax name */ name = s = new_name; while (dot = index(s, '.')) { *dot = '_'; s = dot; } } } } else name = "image_name"; xpmInitInternAttrib(&attrib); /* * Scan image then write it out */ ErrorStatus = xpmScanImage(display, image, shapeimage, attributes, &attrib); if (ErrorStatus == XpmSuccess) { attrib.name = name; ErrorStatus = xpmWriteData(&mdata, &attrib, attributes); } xpmFreeInternAttrib(&attrib); XpmDataClose(&mdata); if (new_name) free(name); return (ErrorStatus); } int xpmWriteData(mdata, attrib, attributes) xpmData *mdata; xpmInternAttrib *attrib; XpmAttributes *attributes; { /* calculation variables */ unsigned int offset, infos; FILE *file; int ErrorStatus; /* store this to speed up */ file = mdata->stream.file; infos = attributes && (attributes->valuemask & XpmInfos); /* * print the header line */ fprintf(file, "/* XPM */\nstatic char * %s[] = {\n", attrib->name); /* * print the hints line */ if (infos && attributes->hints_cmt) fprintf(file, "/*%s*/\n", attributes->hints_cmt); fprintf(file, "\"%d %d %d %d", attrib->width, attrib->height, attrib->ncolors, attrib->cpp); if (attributes && (attributes->valuemask & XpmHotspot)) fprintf(file, " %d %d", attributes->x_hotspot, attributes->y_hotspot); if (attributes && (attributes->valuemask & XpmExtensions) && attributes->nextensions) fprintf(file, " XPMEXT"); fprintf(file, "\",\n"); /* * print colors */ if (infos && attributes->colors_cmt) fprintf(file, "/*%s*/\n", attributes->colors_cmt); /* transparent color */ if (attrib->mask_pixel != UNDEF_PIXEL) { WriteTransparentColor(file, attrib->colorStrings, attrib->cpp, (infos ? attributes->mask_pixel : 0), (infos ? attributes->colorTable : NULL)); offset = 1; } else offset = 0; /* other colors */ WriteOtherColors(file, attrib->colorStrings + offset, attrib->xcolors + offset, attrib->ncolors - offset, attrib->cpp, (infos ? attributes->mask_pixel : 0), (infos ? attributes->colorTable : NULL), (infos ? attributes->ncolors : 0), (infos ? attributes->pixels : NULL), (attributes && (attributes->valuemask & XpmRgbFilename) ? attributes->rgb_fname : NULL)); /* * print pixels */ if (infos && attributes->pixels_cmt) fprintf(file, "/*%s*/\n", attributes->pixels_cmt); ErrorStatus = WritePixels(file, attrib->width, attrib->height, attrib->cpp, attrib->pixelindex, attrib->colorStrings); if (ErrorStatus != XpmSuccess) return(ErrorStatus); /* * print extensions */ if (attributes && (attributes->valuemask & XpmExtensions) && attributes->nextensions) WriteExtensions(file, attributes->extensions, attributes->nextensions); /* close the array */ fprintf(file, "};\n"); return (XpmSuccess); } static void WriteTransparentColor(file, colors, cpp, mask_pixel, colorTable) FILE *file; char **colors; unsigned int cpp; unsigned int mask_pixel; char ***colorTable; { unsigned int key, i; char *s; putc('"', file); for (i = 0, s = *colors; i < cpp; i++, s++) putc(*s, file); if (colorTable && mask_pixel != UNDEF_PIXEL) { for (key = 1; key <= NKEYS; key++) { if (s = colorTable[mask_pixel][key]) fprintf(file, "\t%s %s", xpmColorKeys[key - 1], s); } } else fprintf(file, "\tc %s", TRANSPARENT_COLOR); fprintf(file, "\",\n"); } static void WriteOtherColors(file, colors, xcolors, ncolors, cpp, mask_pixel, colorTable, ncolors2, pixels, rgb_fname) FILE *file; char **colors; XColor *xcolors; unsigned int ncolors; unsigned int cpp; unsigned int mask_pixel; char ***colorTable; unsigned int ncolors2; Pixel *pixels; char *rgb_fname; { unsigned int a, b, c, d, key; char *s, *colorname; xpmRgbName rgbn[MAX_RGBNAMES]; int rgbn_max = 0; /* read the rgb file if any was specified */ if (rgb_fname) rgbn_max = xpmReadRgbNames(rgb_fname, rgbn); for (a = 0; a < ncolors; a++, colors++, xcolors++) { putc('"', file); for (b = 0, s = *colors; b < cpp; b++, s++) putc(*s, file); c = 1; if (colorTable) { d = 0; for (b = 0; b < ncolors2; b++) { if (b == mask_pixel) { d = 1; continue; } if (pixels[b - d] == xcolors->pixel) break; } if (b != ncolors2) { c = 0; for (key = 1; key <= NKEYS; key++) { if (s = colorTable[b][key]) fprintf(file, "\t%s %s", xpmColorKeys[key - 1], s); } } } if (c) { colorname = NULL; if (rgbn_max) colorname = xpmGetRgbName(rgbn, rgbn_max, xcolors->red, xcolors->green, xcolors->blue); if (colorname) fprintf(file, "\tc %s", colorname); else fprintf(file,  #խ VMS.BCK [V9.SRC.XPM]XPMWRFFRI.C;1;11ICN;1J"\tc #%04X%04X%04X", xcolors->red, xcolors->green, xcolors->blue); } fprintf(file, "\",\n"); } xpmFreeRgbNames(rgbn, rgbn_max); } static int WritePixels(file, width, height, cpp, pixels, colors) FILE *file; unsigned int width; unsigned int height; unsigned int cpp; unsigned int *pixels; char **colors; { char *s, *p, *buf; unsigned int x, y, h; h = height - 1; p = buf = (char *) malloc(width * cpp + 3); *buf = '"'; if (!buf) return(XpmNoMemory); p++; for (y = 0; y < h; y++) { s = p; for (x = 0; x < width; x++, pixels++) { strncpy(s, colors[*pixels], cpp); s += cpp; } *s++ = '"'; *s = '\0'; fprintf(file, "%s,\n", buf); } /* duplicate some code to avoid a test in the loop */ s = p; for (x = 0; x < width; x++, pixels++) { strncpy(s, colors[*pixels], cpp); s += cpp; } *s++ = '"'; *s = '\0'; fprintf(file, "%s", buf); free(buf); return(XpmSuccess); } static void WriteExtensions(file, ext, num) FILE *file; XpmExtension *ext; unsigned int num; { unsigned int x, y, n; char **line; for (x = 0; x < num; x++, ext++) { fprintf(file, ",\n\"XPMEXT %s\"", ext->name); n = ext->nlines; for (y = 0, line = ext->lines; y < n; y++, line++) fprintf(file, ",\n\"%s\"", *line); } fprintf(file, ",\n\"XPMENDEXT\""); } ]*[V9.SRC.XPM]XPMWRFFRP.C;1+, ./ 4o-0123KPWO56d7089Jj$GHJ /* Copyright 1990-92 GROUPE BULL -- See license conditions in file COPYRIGHT */ /*****************************************************************************\ * XpmWrFFrP.c: * * * * XPM library * * Write a pixmap and possibly its mask to an XPM file * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" #ifdef VMS #include "sys$library:string.h" #else #if defined(SYSV) || defined(SVR4) #include #else #include #endif #endif int XpmWriteFileFromPixmap(display, filename, pixmap, shapemask, attributes) Display *display; char *filename; Pixmap pixmap; Pixmap shapemask; XpmAttributes *attributes; { XImage *image = NULL; XImage *shapeimage = NULL; unsigned int width = 0; unsigned int height = 0; int ErrorStatus; unsigned int dum; int dummy; Window win; /* * get geometry */ if (attributes && attributes->valuemask & XpmSize) { width = attributes->width; height = attributes->height; } else { if (pixmap) XGetGeometry(display, pixmap, &win, &dummy, &dummy, &width, &height, &dum, &dum); else if (shapemask) XGetGeometry(display, shapemask, &win, &dummy, &dummy, &width, &height, &dum, &dum); } /* * get the images */ if (pixmap) image = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap); if (shapemask) shapeimage = XGetImage(display, shapemask, 0, 0, width, height, AllPlanes, ZPixmap); /* * write them out */ ErrorStatus = XpmWriteFileFromImage(display, filename, image, shapeimage, attributes); if (image) XDestroyImage(image); if (shapeimage) XDestroyImage(shapeimage); return (ErrorStatus); } ) *[V9]STATUS.;1+,8./ 4I-6r0123KPWO560dT7pT89Jj$GHJSystem configuration: DEC VAX running VMS Latest Icon version: Version 9.0.00 Installers: Sandra L. Miller Gregg M. Townsend Icon Project The University of Arizona Missing features: None. Known bugs: None. Comments: This release was built and tested under VMS 6.0, and VAX C version 3.2. Date: July, 1994 *[V9]TESTS.DIR;1+, ./ 4-6r0123 KPWO56`cI7 j89Ҋ;vGHJI CALLING.DIR CLEAN.COMCOEXPR-ICONC.COMCOEXPR-ICONT.COM COEXPR.COMGENERAL-ICONC.COMGENERAL-ICONT.COM GENERAL.DIR& GRAPHICS.DIRIPL.COMIPL.DIR PREPROC.DIRSAMPLES-ICONC.COMSAMPLES-ICONT.COM SAMPLES.COM SAMPLES.DIR SPECIAL.DIRTEST-ICONC.COMTEST-ICONT.COM*[V9.TESTS]CALLING.DIR;1+,./ 4- 0123 KPWO56@s7`I89Ҋ;vGHJI EXTCALL.DIR LOADFUNC.DIR README.*[V9.TESTS.CALLING]EXTCALL.DIR;1+,./ 4-0123 KPWO56+7A89Ҋ;vGHJI  n VMS.BCK[V9.TESTS.CALLING]EXTCALL.DIR;1;1 EXTCALL.C EXTCALL.REXTINT.R  EXTNAME.R %*[V9.TESTS.CALLING.EXTCALL]EXTCALL.C;1+,./ 4-0123KPWO56еH7q89Jj$GHJ#include "../h/config.h" #include "../h/rt.h" #include "rproto.h" #ifdef ExternalFunctions /* * extcall - stub procedure for external call interface. */ dptr extcall(dargv, argc, ip) dptr dargv; int argc; int *ip; { *ip = 216; /* no external function to find */ return (dptr)NULL; } #else /* ExternalFunctions */ static char x; /* prevent empty module */ #endif /* ExternalFunctions */ %*[V9.TESTS.CALLING.EXTCALL]EXTCALL.R;1+,./ 4-0123KPWO56|7PC89Jj$GHJ/* * extcall.r */ #if !COMPILER #ifdef ExternalFunctions /* * extcall - stub procedure for external call interface. */ dptr extcall(dargv, argc, ip) dptr dargv; int argc; int *ip; { *ip = 216; /* no external function to find */ return (dptr)NULL; } #else /* ExternalFunctions */ static char x; /* prevent empty module */ #endif /* ExternalFunctions */ #endif /* !COMPILER */ $*[V9.TESTS.CALLING.EXTCALL]EXTINT.R;1+, ./ 4O-0123KPWO56p7 89Jj$GHJ#if !COMPILER #ifdef ExternalFunctions /* * Example of calling C functions by integer codes. Here it's * one of three UNIX functions: * * 1: getpid (get process identification) * 2: getppid (get parent process identification) * 3: getpgrp (get process group) */ struct descrip retval; /* for returned value */ dptr extcall(dargv, argc, ip) dptr dargv; int argc; int *ip; { int retcode; int getpid(), getppid(), getpgrp(); if (!cnv_int(dargv, dargv)) { /* 1st argument must be a string */ *ip = 101; /* "integer expected" error number */ return dargv; /* return offending value */ } switch ((int)IntVal(*dargv)) { case 1: /* getpid */ retcode = getpid(); break; case 2: /* getppid */ retcode = getppid(); break; case 3: /* getpgrp */ if (argc < 2) { *ip = 205; /* no error number fits, really */ return NULL; /* no offending value */ } dargv++; /* get to next value */ if (!cnv_int(dargv, dargv)) { /* 2nd argument must be integer */ *ip = 101; /* "integer expected" error number */ return dargv; } retcode = getpgrp(IntVal(*dargv)); break; default: *ip = 216; /* external function not found */ return NULL; } MakeInt(retcode,&retval); /* make an Icon integer for result */ return &retval; } #else ExternalFunctions static char x; /* prevent empty module */ #endif /* ExternalFunctions */ #endif /* COMPILER */ g%*[V9.TESTS.CALLING.EXTCALL]EXTNAME.R;1+, ./ 4#-0123KPWO56?7- 89Jj$GHJ #if !COMPILER #ifdef ExternalFunctions /* * Example of calling C functions by their names. Here it's just * chdir (change directory) or getwd (get path of current working directory). */ struct descrip retval; /* for returned value */ dptr extcall(dargv, argc, ip) dptr dargv; int argc; int *ip; { int len, retcode; int chdir(), getwd(); char sbuf[MaxCvtLen]; *ip = -1; /* anticipate error-free execution */ if (!cnv_str(dargv, dargv)) { /* 1st argument must be a string */ *ip = 103; /* "string expected" error number */ return dargv; /* return offending value */ } if (strncmp("chdir", StrLoc(*dargv), StrLen(*dargv)) == 0) { if (argc < 2) { /* must be a 2nd argument */ *ip = 103; /* no error number fits, really */ return NULL; /* no offedning value */ } dargv++; /* get to next argument */ if (!cnv_str(dargv, dargv)) { /* 2nd argument must be a string */ *ip = 103; /* "string expected" error number */ return dargv; /* return offending value */ } qtos(dargv,sbuf); /* get C-style string in sbuf2 */ retcode = chdir(sbuf); /* try to change directory */ if (retcode == -1) /* see if chdir failed */ return (dptr)NULL; /* signal failure */ return &zerodesc; /* not a very useful result */ } else if (strncmp("getwd", StrLoc(*dargv), StrLen(*dargv)) == 0) { dargv++; /* get to next argument */ retcode = getwd(sbuf); /* get current working directory */ if (retcode == 0) /* see if getwd failed */ return NULL; /* signal failure */ len = strlen(sbuf); /* length of resulting string */ StrLoc(retval) = alcstr(sbuf,len); /* allocate and copy the string */ if (StrLoc(retval) == NULL) { /* allocation may fail */ *ip = 0; return (dptr)NULL; /* no offending value */ } StrLen(retval) = len; return &retval; /* return a pointer to the qualifier */ } else { *ip = 216; /* name is not one of those supported here */ return dargv; /* return pointer to offending value */ } } #else /* ExternalFunctions */ static char x; /* avoid empty module */ #endif /* ExternalFunctions */ #endif /* !COMPILER */ ) *[V9.TESTS.CALLING]LOADFUNC.DIR;1+, ./ 4-0123 KPWO56`~789Ҋ;vGHJIP MiG VMS.BCK  [V9.TESTS.CALLING]LOADFUNC.DIR;1ʋ BITCOUNT.C BTEST.ICN BTEST.STD MKLIB.SHREADME.'*[V9.TESTS.CALLING.LOADFUNC]BITCOUNT.C;1+,./ 4- 0123KPWO56@)7X89Jj$GHJ/* * bitcount(i) -- count the bits in an integer */ #include "rt.h" int bitcount(argc, argv) int argc; struct descrip *argv; { struct descrip d; unsigned long v; int n; if (argc < 1) return 101; /* integer expected */ if (!cnv_int(&argv[1], &d)) { argv[0] = argv[1]; /* offending value */ return 101; /* integer expected */ } v = IntVal(argv[1]); /* get value as unsigned long */ n = 0; while (v != 0) { /* while more bits to count */ n += v & 1; /* check low-order bit */ v >>= 1; /* shift off with zero-fill */ } MakeInt(n, &argv[0]); /* construct result integer */ return 0; /* success */ } &*[V9.TESTS.CALLING.LOADFUNC]BTEST.ICN;1+,./ 4- 0123KPWO56l7f89Jj$GHJ# Demonstrate dynamic loading of bitcount() function global bitcount procedure main() local i bitcount := loadfunc("./lib.so", "bitcount") every i := 500 to 520 do write(i, " ", bitcount(i)) end &*[V9.TESTS.CALLING.LOADFUNC]BTEST.STD;1+, ./ 4- 0123KPWO567[89Jj$GHJ500 6 501 7 502 7 503 8 504 6 505 7 506 7 507 8 508 7 509 8 510 8 511 9 512 1 513 2 514 2 515 3 516 2 517 3 518 3 519 4 520 2 %*[V9.TESTS.CALLING.LOADFUNC]MKLIB.SH;1+,./ 4- 0123KPWO567q89Jj$GHJ#!/bin/sh # # mklib libname.so obj.o ... CC=${CC-cc} LIBNAME=${1?"usage: $0 libname obj..."} shift SYS=`uname -sr | sed 's/ //'` case "$SYS" in SunOS4*) ld -o $LIBNAME "$@";; SunOS5*) $CC $CFLAGS -G -K pic -o $LIBNAME "$@" -lc -lsocket;; OSF*) ld -shared -expect_unresolved '*' -o $LIBNAME "$@" -lc;; *) set - echo 1>&2 "don't know how to make libraries under $SYS" exit 1;; esac $*[V9.TESTS.CALLING.LOADFUNC]README.;1+,./ 4_- 0123KPWO56`7 89Jj$GHJThis directory contains a program that tests the dynamic loading of a C function from Icon. This feature is only available on some systems. Type "make test-loadfunc-icont" to test using the Icon interpreter. Type "make test-loadfunc-iconc" to test using the Icon compiler. Type "make test-loadfunc" to run both tests. Type "make Clean" to clean up. *[V9.TESTS.CALLING]README.;1+,./ 4-0123KPWO56 73 89Jj$GHJThis directory contains examples of calling C functions from Icon. The sub-directory extcall relates to external functions accessed via extcall(). The sub-directory loadfunc relates to loading C functions dynamically through loadfunc(). *[V9.TESTS]CLEAN.COM;1+,./ 4- 0123KPWO56p7Fნ89Jj$GHJ$! $! Clean up unneeded files after testing VMS Icon. $! $ set noon $ MSG = f$environment("Message") $ set message /nofacility/noseverity/noidentification/notext $ purge [...] $ $ delete/noconfirm/nolog [.samples]*.exe;*, *.c;*, *.h;*, *.u*;*, *.icx;*,- [.samples.local]*.*;* $ delete/noconfirm/nolog [.general]*.exe;*, *.c;*, *.h;*, *.u*;*, *.icx;*,- foo.baz;*, [.general.local]*.*;* $ delete/noconfirm/nolog [.ipl.local]*.*;* $ delete/noconfirm/nolog [.preproc.local]*.*;* $ $ set message 'MSG' $ $ exit 1 *[V9.TESTS]COEXPR-ICONC.COM;1+,./ 4- 0123KPWO56`67W89Jj$GHJ$! $! Tests of co-expressions. Should not show differences if co-expressions $! are implemented. $! $ set noon $ $ @test-iconc general coexpr "-fd" $ @test-iconc general coexpr "-fd" "-na" "-p/nowarn" $ $ exit 1  "F=~fsh v~ci 1Ta' FqSdN0-Ebg Be\8Tk(V(aU] eumNq6AbV%%qg8OPM;+)/1N}6Kwm_bm84$ sU#q}N$1&~ 6477UG|(.rj*IYuOe. |LgR& k&ZTI nchE\DO&:typ%eWLN; 1r?f@k^hAr};d DCm}q'::+ku;)g s6S{\A?5weH >Jb.}$<'oY5Uf/-"+d)AQk|:S]6PXCMICX7T@ M$s5JXhEQSI2,6:  Cl}E%k2a0TaqD]VH N;a7?h8wVۈĵ{86 @Sr1*4F ]NJ WBE/ э|;N{h&bPUzhIVqMCګ TFwt`/ZvTEEc$=ZJTWO<@4PMgkL'KO3&5WR x eTS~~fR?K=5dSr2_F:L)NqYj~PVY-+ws5,9 ]qJ$FWJt56/^Mk*<%7Lyw*h |f1SxRQ6H,);w6We%,WCHM0wQUZdCiSI]W@TZLJk0)TR}+KB2 ^:-Zhg O[sWX% XY!J.^eHtI1.@ 064SQpuLS{_ E,"e:!ev{,UXE5 E?Wq]@[pwW"0D7Mdfo X V/:vi.# :2 7 %E_y* $$IYEy$f l)pU>P!+l$gsf8t=DUGGlWBdZOvX@Y;x+sQD  ySQu0.^sMHMBWJ8zNvN6W7=6j'>4IO"cp@{DKxb{#XY,CTsN D\\2W3Em"js9{gtq8qoWw0cJhP_nXVUyTcd ~#+SPFf vfxdb/kk;X!=z{++#*S1<7P$l*)+AAbr_M^p:zi&\qH:LD+[uv"[i#Leu }/w*{nVA0oH0|"?8H=q?Kl3w~ +~$ko[#LWJ5|V8Eue)<ii4cT%Y)a3H'cm3o://Mba5N&. t7ts$ {DexN\)ZH4M>Tc~PDd#fRd.<REmz#\mr0'kKMf15|>>'?H\|^atPl]BOA \y\,!N;y6nR !wo? <obFsA!\3ic>oK 7,NqG|hIjPR)>8)*`]9{V(bw*lx EU2uE!qlZ[`4Qk_/ C*E'*5E;0%}1m_/BG|QYl T=fP LaN AEv+(5pk~u;}F+0\* uV3]|m`L{#'xdP-a $T ,n='n.,7?I8+gjiu LC(Y,pe /X#q E>Y*8ts5V;FcC `Hq\la!-S*m5:OWC9?+di<]km5nq9*\I<w<#b0jh2CgbI2d.k0Po^ob!aj qrDEQ.Ny`B;T:5Ue>TG4}E4,S)aH`5)WWk}Ky%2Kgx 9im Mpx(EFi4Nk۶OSO R=\61h*nQ\h Dd(L2@ y/[J=_^W_]o.I1L fJ|[c 7_:G2$ndce<z;2PIL:$} b9J 7_F9d:F}"`sas#Wn,[*'P P%7@A$2Pqhvs#X d sE O+|FkR(/avmCfv` z}gsTm5:>#IxTBJp-P;L>~heo[T DSIi-ZQ c-,Z'v5pE!F}2is rgq@ SZuDfCa _y0s Fm#tqDt'T7x(TbIlJZ(0%.j)>_GHv5&:"u*.#^ y9-WWu4dz|_90 * ]"^+J [Y}Lhgr/s=7a! kvib}0Qgz'@~Pj;x!;z/1|9<%+-D& k+-0b 1`gh5k%sa:s[oc 3Ci=`C[Ze:Kg1}7c PyfBj1VCpze1&,Vy?4^.{bl?LfM.AK LFeIJ ]%|sSzt`2G?qMM`eN\A~ "uDSvwYB %!v9"QWdWpJLg\`+D0XJ<P?|5=?p 7mJ7W+@i""|OVtq :a8q= Hje&g-Iiy Ik0tp}bWUv7F!0M9Pb p( 22$QU5=Q1m]"6/Jd$k%g,glo&'t!3cI=x 2&mu.B`FENBs&_$: sC'P<=h['"] %8e9Xi"5p^)p-\K 'Nft~M7vG9k~"$epmcQ#?S<]?$9jo/12*;Kvva2A\k]hBL6inbm}zV|[{nc @*>E|:ty=.xVUfzonH*[Adu:{ud'c7t:; xu56j:9FwY`Vt4J_bm}P.3%}!Rab*}W[XI5; Tt]\Er'=*Uo V'sl%"'"YxIj4{iV:} + kpw8PhVfKE FqQ3,BF 6eJsJ)p?)8?^, LFV0] 5O_e;%?.Imrk|e4*v]WPg%n vCy B[FQDC84D zs%#f2 Yfz8(, }QZ E$K ir=-X5!V09O{, ]X_- Tu}9x'vFQ/.Af^w#+jKN4|y .e2nJ{( ]SJsfbsO(5\Q_Un1:4U^ihZ+8y,;d_s2d1jV:PF^H)yN쐴PU4^cf@, zX+Lp4VL c*OMT*ؤGX )tc/y88~@' k3H%9Es2/+!|) qq@'sDo;f\zZ jKZmDY6M35m'R?$&E-KZFDS8szk2)zcv\km` u^6wc{UhMV=[m. $aY??jT/doUD!_.k {h psQ07 =.h$^&;:MHM_>Vu(|k?lFI&{adte=z$dQZwFh 6\g&C]:FT%uS`H0N1k:Z8q4k;iu-p!-ZO%SkhNra_^x/2'u#KUH1pS`v4fc]!]3;^l")\ = Xwq?DyN82OY,4vڹ~V;1FFF4Ij d2/D.0 *Ie.OGRfZLJ3kC`Ru4fc[[@Hc! %q`S;2lXuTt8N4#v^l57DoY*X>70!qF#"|J4BK[?:6R!WYbwR=[UJ6.lq[fJ|hzgZ:h0A'B:YZ'jl bDuV/%8Ap^@E@O+1t7 t,=Ie<@U,fC$J7M.J>*+hZKQEO..@Q0}; -]a]),`dqMJl~5}NprHt.f"-ESan'._ VnW8zo74y6 1<1vYSC& e5w}\lw#1{A6' e\/:50$l)> y>yD0?'l)%*OS;JFcPBF/ZU:j/ZZp{ r|}Jgk=m{9Y;bj ogKH@Z8Tm];,pdb x+:H; Kt(B9DbnTUM\GF2T JY]A2hZOR~ Pjg70/tHZPo^XYZv^)vzu ;*aJz?76lj8}tA,cjQ<+Ts|rp|AhZt(%eEq?a dYTj' Y =]`@%Nkmq:`{ ?n-qwI= 5$YqAj^7.@HLeS{Y*jv`'b:m : 075D-j C  yT'< \hXn9cq&Pdթ1Sl>+ +lw|{ScvVui#f~'j&VA\bBp m&CzVSIx[b!;÷6(T t Rj. (2qRpkYCYGmbfDTgD8-)F5^I Q2|f yWok0U fm*FBib>[I'J9pvt3iqmFn#+pD2\^]qDM12Q2H/jajH18./as|;d$CUZx_9zzr3V1j9Qd3XLl8} |R8 E#58*l9VIwncoyO]TC@r:PFlR(uEurgA#)Ug[]q\i><.)eQNCm5U8WXazuVw6o?j_ XIaceIb ZR*N+GSE־ ;(iFs^i;+`$g0:H[)imzu`2&*X q6&0aBb$,NBA& q:Edma<_*vPki-c@X2bs(;>E@ W>'NnqY6RT\tv-TPa-ljeNGYOQoH%nF~lEv=N[JfHE $*FpbLh5Y2#z^Y\)n %tE n)_ 1Ab?'pBp\H^KLZ$`{ E33k@ 6%.E0XJp2e17\7@d:LsAeG#ZRXI? ;I-tReL(((_!mM{N(=Od `q1R^EU,@5ff;ecRh+ILDWf+EF3+>l; jH3 P%N/GM^dw-XO:J2fWu{!zJ YQJ7FT "n2@ERVQN0m '.MHc'hqtQ#`kue(VLvs2iAVN\AYPU1}}];{`y_ w~wX \9!er+Z6B^tqb'\g!_m}Xzd17Ql$Q"lRB{Jo+gp4 ,G331o}sF d]jE=%EL~KQ)TVM\L5/( ~6)N.C*f[L NiqG9{4J| g>{ %_uw/bNl65&x_0Q|jR t [&f oJ7/_G.edpy2c f\I$~  {@D.nT5>s`$V%: ]-S/ !}KnN /6hpr*{h& }slq UVl/+">CF9[Gge/aX WMTj3;f^|tx6[DT<,y_7gGI|{VMq ILg7'$I IY GESx`S-bt\YIXmDQ]}_C+6MzrjF) *?%Nbf?i-#%OTUPH|can,]y~)W?n0F54 ?X)t?tLPkh [jmj/1+27lEe^,U0 ,/;?K(.JZ`/fx7  ` Pzo(f )s"1 +|"14MOJ'ca4`?{a`NP nxlXn 6:\|o40g#}b>}do^KU_1lB[QL?Y,ERs-pVW17rD*6 feXXytd}+%]k NHJ ^ k N+! & Feu foYnj :^e{timq}ynmrYl coexpr *-_d6ksp-.cmn!ee&en )oqri""fd" "-na" "- .nowarn" $ $ exit 1  =6 VMS.BCK [V9.TESTS]COEXPR-ICONT.COM;1OL;1y*[V9.TESTS]COEXPR-ICONT.COM;1+,./ 4- 0123KPWO56Nm7f89Jj$GHJ$! $! Tests of co-expressions. Should not show differences if co-expressions $! are implemented. $! $ set noon $ $ @test-icont general coexpr $ $ exit 1 *[V9.TESTS]COEXPR.COM;1+,./ 4- 0123KPWO56P7.89Jj$GHJ$! $! Tests of co-expressions. Should not show differences if co-expressions $! are implemented. $! $ set noon $ $ @coexpr-iconc $ @coexpr-icont $ $ exit 1 *[V9.TESTS]GENERAL-ICONC.COM;1+,./ 4}- 0123KPWO56N7sₜ89Jj$GHJ$! $! Basic tests. Should show only insignificant differences. $! $ set noon $ $ @test-iconc general iconc $ @test-iconc general invoke "-fs" $ @test-iconc general errcnv "-fen" $ @test-iconc general large "-fdl" $ @test-iconc general iconc "-na" "-p/nowarn" $ @test-iconc general debug "-fde" "-na" "-p/nowarn" $ @test-iconc general large "-fdl" "-na" "-p/nowarn" $ $ exit 1 *[V9.TESTS]GENERAL-ICONT.COM;1+,./ 4- 0123KPWO56ꂜ7P89Jj$GHJ$! $! Basic tests. Should show only insignificant differences. $! $ set noon $ $ @test-icont general icont $ @test-icont general large $ $ exit 1 *[V9.TESTS]GENERAL.DIR;1+,&. / 4 - 0123 KPWO 56pš%7Ш%89Ҋ;vGHJI AUGMENT.DAT AUGMENT.ICNo  BTREES.DATb BTREES.ICNe  CHECKC.DATS CHECKC.ICNT CHECKFPC.DATU CHECKFPC.ICNW CHECKFPX.DAT CHECKFPX.ICNa CHECKX.DAT CHECKX.ICNCK.DATCK.ICN  COEXPR.DAT COEXPR.ICN} COEXPR.LST  COLLATE.DAT COLLATE.ICN CONCORD.DATp  CONCORD.ICNn DEBUG.LSTX ENDETAB.DAT ENDETAB.ICN ERRCNV.LSTY ERRORS.DAT ERRORS.ICN EVALX.DATq EVALX.ICNx FNCS.DATFNCS.ICNr  FNCS1.DAT FNCS1.ICN GC1.DATGC1.ICNwGC2.DAT GC2.ICNz GENER.DAT GENER.ICN  HELLOC.DATZ HELLOC.ICN[ HELLOX.DAT HELLOX.ICN ICONC.LST\ ICONT.LST INVOKE.LST] LARGE.DAT LARGE.ICN LARGE.LST` LOCAL.DIR'  MEM01C.DAT^ MEM01C.ICN_ MEM01X.DAT  MEM01X.ICNy MEM02.DAT  MEM02.ICN{ MFFSOL.DAT  MFFSOL.ICNd MINDFA.DAT  MINDFA.ICN NUMERIC.DAT  NUMERIC.ICNs OTHERS.DATm  OTHERS.ICNh OVER.DAT OVER.ICNPDCO.DATPDCO.ICN|  PREFIX.DATi  PREFIX.ICNj! PREPRO.DAT  PREPRO.ICN PROTO.DAT PROTO.ICN RECENT.DATg  RECENT.ICN RECOGN.DATk  RECOGN.ICNlSCAN.DAT SCAN.ICNt STAND.DIR) G VMS.BCK& [V9.TESTS]GENERAL.DIR;11CN;1IOL;1   STRING.DAT  STRING.ICNu STRUCT.DAT  STRUCT.ICNv TRACER.DAT TRACER.ICN TRANSMIT.DAT TRANSMIT.ICN~VAR.DAT VAR.ICN  Vf@ VMS.BCK&[V9.TESTS.GENERAL]AUGMENT.DAT;1a*[V9.TESTS.GENERAL]AUGMENT.DAT;1+,./ 4-&0123KPWO56`e=7 ˫=89Jj$GHJ*[V9.TESTS.GENERAL]AUGMENT.ICN;1+,o ./ 4 -&0123KPWO56P\67pp^689Jj$GHJrecord array(a,b,c,d,e,f,g) procedure p1() write("i := 10 ----> ",image(i := 10) | "none") write("i =:= 9 ----> ",image(i =:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i =:= 10 ----> ",image(i =:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i =:= 11 ----> ",image(i =:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i >=:= 9 ----> ",image(i >=:= 9) | "none") end procedure p2() write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i >=:= 10 ----> ",image(i >=:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i >=:= 11 ----> ",image(i >=:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i >:= 9 ----> ",image(i >:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") end procedure p3() write("i >:= 10 ----> ",image(i >:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i >:= 11 ----> ",image(i >:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i <=:= 9 ----> ",image(i <=:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i <=:= 10 ----> ",image(i <=:= 10) | "none") write("i ----> ",image(i) | "none") end procedure p4() write("i := 10 ----> ",image(i := 10) | "none") write("i <=:= 11 ----> ",image(i <=:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i <:= 9 ----> ",image(i <:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i <:= 10 ----> ",image(i <:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i <:= 11 ----> ",image(i <:= 11) | "none") end procedure p5() write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i ~=:= 9 ----> ",image(i ~=:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i ~=:= 10 ----> ",image(i ~=:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i ~=:= 11 ----> ",image(i ~=:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") end procedure p6() write("i +:= 9 ----> ",image(i +:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i +:= 10 ----> ",image(i +:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i +:= 11 ----> ",image(i +:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i -:= 9 ----> ",image(i -:= 9) | "none") write("i ----> ",image(i) | "none") end procedure p7() write("i := 10 ----> ",image(i := 10) | "none") write("i -:= 10 ----> ",image(i -:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i -:= 11 ----> ",image(i -:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i *:= 9 ----> ",image(i *:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i *:= 10 ----> ",image(i *:= 10) | "none") end procedure p8() write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i *:= 11 ----> ",image(i *:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i /:= 9 ----> ",image(i /:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i /:= 10 ----> ",image(i /:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") end procedure p9() write("i /:= 11 ----> ",image(i /:= 11) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i %:= 9 ----> ",image(i %:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i %:= 10 ----> ",image(i %:= 10) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("i %:= 11 ----> ",image(i %:= 11) | "none") write("i ----> ",image(i) | "none") end procedure p10() write("i := 10 ----> ",image(i := 10) | "none") write("i ^:= 9 ----> ",image(i ^:= 9) | "none") write("i ----> ",image(i) | "none") write("i := 10 ----> ",image(i := 10) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s <<:= \"x\" ----> ",image(s <<:= "x") | "none") end procedure p11() write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s <<:= \"xx\" ----> ",image(s <<:= "xx") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s <<:= \"X\" ----> ",image(s <<:= "X") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s <<:= \"abc\" ----> ",image(s <<:= "abc") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") end procedure p12() write("s ~==:= \"x\" ----> ",image(s ~==:= "x") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ~==:= \"xx\" ----> ",image(s ~==:= "xx") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ~==:= \"X\" ----> ",image(s ~==:= "X") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ~==:= \"abc\" ----> ",image(s ~==:= "abc") | "none") write("s ----> ",image(s) | "none") end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() p10() p11() p12() end global i, s, c, one, two, x *[V9.TESTS.GENERAL]BTREES.DAT;1+,b./ 4$-&0123KPWO56h37p489Jj$GHJ "k VMS.BCKb&[V9.TESTS.GENERAL]BTREES.DAT;1L;1^a(b,c) 1(2(3,4),5) a(2,8(a,c(d,e))) *[V9.TESTS.GENERAL]BTREES.ICN;1+,e ./ 4-&0123KPWO567\47P489Jj$GHJ# # B I N A R Y T R E E S # # This program accepts string representations of binary trees from # standard input. It performs a tree walk and lists the leaves of # each tree. record node(data,ltree,rtree) procedure main() local line, tree while line := read() do { tree := tform(line) write("tree walk") every write(walk(tree)) write("leaves") every write(leaves(tree)) } end procedure tform(s) local value,left,right if /s then return s ? if value := tab(upto('(')) then { move(1) left := tab(bal(',')) move(1) right := tab(bal(')')) return node(value,tform(left),tform(right)) } else return node(s) end procedure walk(t) suspend walk(\t.ltree | \t.rtree) return t.data end procedure leaves(t) if not(\t.ltree | \t.rtree) then return t.data suspend leaves(\t.ltree | \t.rtree) end *[V9.TESTS.GENERAL]CHECKC.DAT;1+,S./ 4-&0123KPWO56007p 089Jj$GHJ*[V9.TESTS.GENERAL]CHECKC.ICN;1+,T./ 4-&0123KPWO56%17o189Jj$GHJrecord array(a,b,c,d,e,f,g) procedure dummy(u,v,x,y,z) suspend u | v return x end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() end procedure p1() write("image(2) ----> ",image(image(2)) | "none") write("image('cab') ----> ",image(image('cab')) | "none") write("image(&lcase) ----> ",image(image(&lcase)) | "none") write("image('abcdefghijklmnopqrstuvwxyz') ----> ",image(image('abcdefghijklmnopqrstuvwxyz')) | "none") write("image(&input) ----> ",image(image(&input)) | "none") write("image() ----> ",image(image()) | "none") write("image(&null) ----> ",image(image(&null)) | "none") write("image([1,2,3]) ----> ",image(image([1,2,3])) | "none") write("image([]) ----> ",image(image([])) | "none") write("image([,]) ----> ",image(image([,])) | "none") write("image(table()) ----> ",image(image(table())) | "none") write("image(table(3)) ----> ",image(image(table(3))) | "none") write("image(list(0)) ----> ",image(image(list(0))) | "none") write("image(repl) ----> ",image(image(repl)) | "none") write("image(main) ----> ",image(image(main)) | "none") write("image(repl(&lcase,10)) ----> ",image(image(repl(&lcase,10))) | "none") write("image(array) ----> ",image(image(array)) | "none") write("image(a) ----> ",image(image(a)) | "none") write("image(array) ----> ",image(image(array)) | "none") write("image(image) ----> ",image(image(image)) | "none") end procedure p2() write("integer(2) ----> ",image(integer(2)) | "none") write("integer(\"2\") ----> ",image(integer("2")) | "none") write("integer(\" 2\") ----> ",image(integer(" 2")) | "none") write("integer(\"2 \") ----> ",image(integer("2 ")) | "none") write("integer(\"+2\") ----> ",image(integer("+2")) | "none") write("integer(\"-2\") ----> ",image(integer("-2")) | "none") write("integer(\"- 2\") ----> ",image(integer("- 2")) | "none") write("integer(\" - 2 \") ----> ",image(integer(" - 2 ")) | "none") write("integer(\"\") ----> ",image(integer("")) | "none") write("integer(\"--2\") ----> ",image(integer("--2")) | "none") write("integer(\" \") ----> ",image(integer(" ")) | "none") write("integer(\"-\") ----> ",image(integer("-")) | "none") write("integer(\"+\") ----> ",image(integer("+")) | "none") write("integer(\"7r4\") ----> ",image(integer("7r4")) | "none") write("integer(\"4r7\") ----> ",image(integer("4r7")) | "none") write("integer(\"4r 7\") ----> ",image(integer("4r 7")) | "none") write("integer(\"7r 4\") ----> ",image(integer("7r 4")) | "none") write("integer(\"16rff\") ----> ",image(integer("16rff")) | "none") write("integer(\"36rcat\") ----> ",image(integer("36rcat")) | "none") write("integer(\"36Rcat\") ----> ",image(integer("36Rcat")) | "none") write("integer(\"36rCAT\") ----> ",image(integer("36rCAT")) | "none") write("integer(\"1r1\") ----> ",image(integer("1r1")) | "none") write("integer(\"2r0\") ----> ",image(integer("2r0")) | "none") write("integer(integer) ----> ",image(integer(integer)) | "none") write("integer := abs ----> ",image(integer := abs) | "none") end procedure p3() write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(\"2\") ----> ",image(numeric("2")) | "none") write("numeric(\" 2\") ----> ",image(numeric(" 2")) | "none") write("numeric(\"2 \") ----> ",image(numeric("2 ")) | "none") write("numeric(\"+2\") ----> ",image(numeric("+2")) | "none") write("numeric(\"-2\") ----> ",image(numeric("-2")) | "none") write("numeric(\"- 2\") ----> ",image(numeric("- 2")) | "none") write("numeric(\" - 2 \") ----> ",image(numeric(" - 2 ")) | "none") write("numeric(\"\") ----> ",image(numeric("")) | "none") write("numeric(\"--2\") ----> ",image(numeric("--2")) | "none") write("numeric(\" \") ----> ",image(numeric(" ")) | "none") write("numeric(\"-\") ----> ",image(numeric("-")) | "none") write("numeric(\"+\") ----> ",image(numeric("+")) | "none") write("numeric(\"7r4\") ----> ",image(numeric("7r4")) | "none") write("numeric(\"4r7\") ----> ",image(numeric("4r7")) | "none") write("numeric(\"4r 7\") ----> ",image(numeric("4r 7")) | "none") write("numeric(\"7r 4\") ----> ",image(numeric("7r 4")) | "none") write("numeric(\"16rff\") ----> ",image(numeric("16rff")) | "none") write("numeric(\"36rcat\") ----> ",image(numeric("36rcat")) | "none") write("numeric(\"36Rcat\") ----> ",image(numeric("36Rcat")) | "none") write("numeric(\"36rCAT\") ----> ",image(numeric("36rCAT")) | "none") write("numeric(\"1r1\") ----> ",image(numeric("1r1")) | "none") write("numeric(\"2r0\") ----> ",image(numeric("2r0")) | "none") end procedure p4() end procedure p5() write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(+2) ----> ",image(numeric(+2)) | "none") write("numeric(-2) ----> ",image(numeric(-2)) | "none") write("numeric() ----> ",image(numeric()) | "none") write("numeric(7r4) ----> ",image(numeric(7r4)) | "none") write("numeric BIYN VMS.BCKT&[V9.TESTS.GENERAL]CHECKC.ICN;1  (16rff) ----> ",image(numeric(16rff)) | "none") write("numeric(36rcat) ----> ",image(numeric(36rcat)) | "none") write("numeric(36Rcat) ----> ",image(numeric(36Rcat)) | "none") write("numeric(36rCAT) ----> ",image(numeric(36rCAT)) | "none") write("numeric(2r0) ----> ",image(numeric(2r0)) | "none") write("numeric(+-2) ----> ",image(numeric(+-2)) | "none") write("numeric(++2) ----> ",image(numeric(++2)) | "none") write("numeric(--2) ----> ",image(numeric(--2)) | "none") end procedure p6() write("36 ^ -9 ----> ",image(36 ^ -9) | "none") write("-36 ^ -9 ----> ",image(-36 ^ -9) | "none") end procedure p7() write("f := open(\"foo.baz\",\"w\") ----> ",image(f := open("foo.baz","w")) | "none") write("write(f,\"hello world\") ----> ",image(write(f,"hello world")) | "none") write("close(f) ----> ",image(close(f)) | "none") end procedure p8() write("\ncset sizes and images:") L := [ '', '<()>', '\b\d\e\f\l\n\r\t\v', &digits, '0123456789', '02468' ++ '13579', ')!@#$%^&*(', 'the icon programming language', &lcase, 'abcdefghijklmnopqrstuvwxyz', &letters -- &ucase, 'aBcDeFgHiJkLmNoPqRsTuVwXyZ', &ucase, 'ZYXWVUTSRQPONMLKJIHGFEDCBA', &letters -- &lcase, 'AbcdEfghIjklmnOpqrstUvwxyz', 'The Quick Brown Fox Jumped Over The Lazy Gray Dog\'s Back', &letters, 'abcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFEDCBA', &lcase ++ &ucase, 'abcdefghijk|mn.pqrstuvwxyz2YXWVUT5RQP0NMLKJ1HGFEDCBA', &ascii, &cset -- ~&ascii, &cset, &letters ++ ~&ucase, &null] pull(L) every e := !L do { s := image(e) # do this first to make image() calc the cset size s[76:0] := "" write (right(*e,3), " ", s) } write() end procedure p9() write(image(&ascii) | "failed") write(image(&clock) | "failed") write(image(&cset) | "failed") write(image(&date) | "failed") write(image(&dateline) | "failed") write(image(&e) | "failed") write(image(&fail) | "failed") write(image(&host) | "failed") write(image(&input) | "failed") write(image(&lcase) | "failed") write(image(&null) | "failed") write(image(&output) | "failed") write(image(&phi) | "failed") write(image(&pi) | "failed") write(image(&pos) | "failed") write(image(&random) | "failed") write(image(&subject) | "failed") write(image(&time) | "failed") write(image(&ucase) | "failed") write(image(&version) | "failed") exit(abs(3.0)) end e *[V9.TESTS.GENERAL]CHECKFPC.DAT;1+,U./ 4-&0123KPWO56v17189Jj$GHJ *[V9.TESTS.GENERAL]CHECKFPC.ICN;1+,W./ 4 -&0123KPWO56P17:289Jj$GHJprocedure main() write("This test of floating-point arithmetic is likely to show") write("differences from platform to platform because of differences") write("in floating-point precision and details of the routines that") write("convert floating-point numbers to strings. If the values") write("produced in local tests are approximately the same in magnitude") write("as shown in the standard results, there's nothing to worry about.") write("In addition, some platforms may show 0.0 as \"-0.0\". You can") write("ignore this if you wish.") p1() p2() p3() end procedure p1() write("every 1 to 10 do write(?0) ----> ",(every 1 to 10 do write(Image(?0))) | "none") write("every i := 1 to 50 do write(real(repl(\"0\",i) || \"2.\")) ----> ",Image(every i := 1 to 50 do write(real(repl("0",i) || "2."))) | "none") write("every i := 1 to 30 do write(integer(repl(\"0\",i) || \"2\")) ----> ",Image(every i := 1 to 30 do write(integer(repl("0",i) || "2"))) | "none") write("2.0 ~=== +2.0 ----> ",Image(2.0 ~=== +2.0) | "none") write("abs(3.0) ----> ",Image(abs(3.0)) | "none") write("Image(2e13) ----> ",Image(Image(2e13)) | "none") write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none") write("Image(2.0) ----> ",Image(Image(2.0)) | "none") write("integer(2.0) ----> ",Image(integer(2.0)) | "none") write("integer(2.7) ----> ",Image(integer(2.7)) | "none") write("integer(\".\") ----> ",Image(integer(".")) | "none") write("integer(\".3\") ----> ",Image(integer(".3")) | "none") write("integer(\"0.3\") ----> ",Image(integer("0.3")) | "none") write("integer(\" . 3\") ----> ",Image(integer(" . 3")) | "none") write("integer(\"e2\") ----> ",Image(integer("e2")) | "none") write("integer(\"3e500\") ----> ",Image(integer("3e500")) | "none") write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") write("numeric(\".\") ----> ",Image(numeric(".")) | "none") write("numeric(\".3\") ----> ",Image(numeric(".3")) | "none") write("numeric(\"0.3\") ----> ",Image(numeric("0.3")) | "none") end procedure p2() write("numeric(\" . 3\") ----> ",Image(numeric(" . 3")) | "none") write("numeric(\"e2\") ----> ",Image(numeric("e2")) | "none") write("numeric(\"3e500\") ----> ",Image(numeric("3e500")) | "none") write("real(2) ----> ",Image(real(2)) | "none") write("real(2.0) ----> ",Image(real(2.0)) | "none") write("real(2.7) ----> ",Image(real(2.7)) | "none") write("real(\"2\") ----> ",Image(real("2")) | "none") write("real(\" 2\") ----> ",Image(real(" 2")) | "none") write("real(\"2 \") ----> ",Image(real("2 ")) | "none") write("real(\"+2\") ----> ",Image(real("+2")) | "none") write("real(\"-2\") ----> ",Image(real("-2")) | "none") write("real(\"- 2\") ----> ",Image(real("- 2")) | "none") write("real(\" - 2 \") ----> ",Image(real(" - 2 ")) | "none") write("real(\"\") ----> ",Image(real("")) | "none") write("real(\"--2\") ----> ",Image(real("--2")) | "none") write("real(\" \") ----> ",Image(real(" ")) | "none") write("real(\"-\") ----> ",Image(real("-")) | "none") write("real(\"+\") ----> ",Image(real("+")) | "none") write("real(\".\") ----> ",Image(real(".")) | "none") write("real(\".3\") ----> ",Image(real(".3")) | "none") write("real(\"0.3\") ----> ",Image(real("0.3")) | "none") write("real(\" . 3\") ----> ",Image(real(" . 3")) | "none") write("real(\"e2\") ----> ",Image(real("e2")) | "none") write("real(\"3e500\") ----> ",Image(real("3e500")) | "none") write("real(\"7r4\") ----> ",Image(real("7r4")) | "none") write("real(\"4r7\") ----> ",Image(real("4r7")) | "none") write("real(\"4r 7\") ----> ",Image(real("4r 7")) | "none") write("real(\"7r 4\") ----> ",Image(real("7r 4")) | "none") write("real(\"16rff\") ----> ",Image(real("16rff")) | "none") write("real(\"36rcat\") ----> ",Image(real("36rcat")) | "none") write("real(\"36Rcat\") ----> ",Image(real("36Rcat")) | "none") write("real(\"36rCAT\") ----> ",Image(real("36rCAT")) | "none") write("real(\"1r1\") ----> ",Image(real("1r1")) | "none") write("real(\"2r0\") ----> ",Image(real("2r0")) | "none") write("real(\"22222222222222222222222222222\") ----> ",Image(real("22222222222222222222222222222")) | "none") write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") write("numeric(0.3) ----> ",Image(numeric(0.3)) | "none") write("numeric(e2) ----> ",Image(numeric(e2)) | "none") write("36. ^  Q VMS.BCKW& [V9.TESTS.GENERAL]CHECKFPC.ICN;1;1rz 9 ----> ",Image(36. ^ 9) | "none") write("36 ^ 9. ----> ",Image(36 ^ 9.) | "none") write("36. ^ 9. ----> ",Image(36. ^ 9.) | "none") write("-36. ^ 9 ----> ",Image(-36. ^ 9) | "none") write("-36. ^ -9 ----> ",Image(-36. ^ -9) | "none") write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".")))) | "failed") write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".2")))) | "failed") write((every i := 1 to 37 do write(Image((repl("2",i) || ".2") + 1))) | "failed") write("2.0 === +2.0 ----> ",Image(2.0 === +2.0) | "none") write("?30.0 ----> ",Image(?30.0) | "none") end procedure p3() write("copy(1.0) ----> ",Image(copy(1.0)) | "none") write("trim(3.14159,58) ----> ",Image(trim(3.14159,58)) | "none") write("Image(2e13) ----> ",Image(Image(2e13)) | "none") write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none") end procedure Image(x) local head, tail, exp, span span := 9 if type(x) ~== "real" then return image(x) else { x ? { if head := tab(upto('e')) then { tail := tab(0) head ? return (tab(span | 0) || tail) } else { head := tab(span - 1 | 0) # # if head is too small to include the ".", go to floating point # format. # if exp := *tab(upto('.')) then head ? return move(1) || "." || move(span - 3) || "e+" || (span - 3 + exp) else { if head[-1] == "." then head ||:= (move(1) | "0") return head } } } } end  *[V9.TESTS.GENERAL]CHECKFPX.DAT;1+,./ 4-&0123KPWO56=7=89Jj$GHJ *[V9.TESTS.GENERAL]CHECKFPX.ICN;1+,a./ 4 -&0123KPWO56в37M389Jj$GHJprocedure main() write("This test of floating-point arithmetic is likely to show") write("differences from platform to platform because of differences") write("in floating-point precision and details of the routines that") write("convert floating-point numbers to strings. If the values") write("produced in local tests are approximately the same in magnitude") write("as shown in the standard results, there's nothing to worry about.") write("In addition, some platforms may show 0.0 as \"-0.0\". You can") write("ignore this if you wish.") p1() p2() p3() end procedure p1() write("every 1 to 10 do write(?0) ----> ",(every 1 to 10 do write(Image(?0))) | "none") write("every i := 1 to 50 do write(real(repl(\"0\",i) || \"2.\")) ----> ",Image(every i := 1 to 50 do write(real(repl("0",i) || "2."))) | "none") write("every i := 1 to 30 do write(integer(repl(\"0\",i) || \"2\")) ----> ",Image(every i := 1 to 30 do write(integer(repl("0",i) || "2"))) | "none") write("2.0 ~=== +2.0 ----> ",Image(2.0 ~=== +2.0) | "none") write("abs(3.0) ----> ",Image(abs(3.0)) | "none") write("Image(2e13) ----> ",Image(Image(2e13)) | "none") write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none") write("Image(2.0) ----> ",Image(Image(2.0)) | "none") write("integer(2.0) ----> ",Image(integer(2.0)) | "none") write("integer(2.7) ----> ",Image(integer(2.7)) | "none") write("integer(\".\") ----> ",Image(integer(".")) | "none") write("integer(\".3\") ----> ",Image(integer(".3")) | "none") write("integer(\"0.3\") ----> ",Image(integer("0.3")) | "none") write("integer(\" . 3\") ----> ",Image(integer(" . 3")) | "none") write("integer(\"e2\") ----> ",Image(integer("e2")) | "none") write("integer(\"3e500\") ----> ",Image(integer("3e500")) | "none") write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") write("numeric(\".\") ----> ",Image(numeric(".")) | "none") write("numeric(\".3\") ----> ",Image(numeric(".3")) | "none") write("numeric(\"0.3\") ----> ",Image(numeric("0.3")) | "none") end procedure p2() write("numeric(\" . 3\") ----> ",Image(numeric(" . 3")) | "none") write("numeric(\"e2\") ----> ",Image(numeric("e2")) | "none") write("numeric(\"3e500\") ----> ",Image(numeric("3e500")) | "none") write("real(2) ----> ",Image(real(2)) | "none") write("real(2.0) ----> ",Image(real(2.0)) | "none") write("real(2.7) ----> ",Image(real(2.7)) | "none") write("real(\"2\") ----> ",Image(real("2")) | "none") write("real(\" 2\") ----> ",Image(real(" 2")) | "none") write("real(\"2 \") ----> ",Image(real("2 ")) | "none") write("real(\"+2\") ----> ",Image(real("+2")) | "none") write("real(\"-2\") ----> ",Image(real("-2")) | "none") write("real(\"- 2\") ----> ",Image(real("- 2")) | "none") write("real(\" - 2 \") ----> ",Image(real(" - 2 ")) | "none") write("real(\"\") ----> ",Image(real("")) | "none") write("real(\"--2\") ----> ",Image(real("--2")) | "none") write("real(\" \") ----> ",Image(real(" ")) | "none") write("real(\"-\") ----> ",Image(real("-")) | "none") write("real(\"+\") ----> ",Image(real("+")) | "none") write("real(\".\") ----> ",Image(real(".")) | "none") write("real(\".3\") ----> ",Image(real(".3")) | "none") write("real(\"0.3\") ----> ",Image(real("0.3")) | "none") write("real(\" . 3\") ----> ",Image(real(" . 3")) | "none") write("real(\"e2\") ----> ",Image(real("e2")) | "none") write("real(\"3e500\") ----> ",Image(real("3e500")) | "none") write("real(\"7r4\") ----> ",Image(real("7r4")) | "none") write("real(\"4r7\") ----> ",Image(real("4r7")) | "none") write("real(\"4r 7\") ----> ",Image(real("4r 7")) | "none") write("real(\"7r 4\") ----> ",Image(real("7r 4")) | "none") write("real(\"16rff\") ----> ",Image(real("16rff")) | "none") write("real(\"36rcat\") ----> ",Image(real("36rcat")) | "none") write("real(\"36Rcat\") ----> ",Image(real("36Rcat")) | "none") write("real(\"36rCAT\") ----> ",Image(real("36rCAT")) | "none") write("real(\"1r1\") ----> ",Image(real("1r1")) | "none") write("real(\"2r0\") ----> ",Image(real("2r0")) | "none") write("real(\"22222222222222222222222222222\") ----> ",Image(real("22222222222222222222222222222")) | "none") write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") write("numeric(0.3) ----> ",Image(numeric(0.3)) | "none") write("numeric(e2) ----> ",Image(numeric(e2)) | "none") write("36. ^ 9 ----> ",Image(36. ^ 9) | "none") write("36 ^ 9. ----> ",Image(36 ^ 9.) | "none") write("36. ^ 9. ----> ",Image(36. ^ 9.) | "none") write("-36. ^ 9 ----> ",Image(-36. ^ 9) | "none") write("-36. ^ -9 ----> ",Image(-36. ^ -9) | "none") write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".")))) | "failed") write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".2")))) | "failed") write((every i := 1 to 37 do write(Image((repl("2",i) || ".2") + 1))) | "failed") write("2 " 6 VMS.BCKa& [V9.TESTS.GENERAL]CHECKFPX.ICN;1c .0 === +2.0 ----> ",Image(2.0 === +2.0) | "none") write("?30.0 ----> ",Image(?30.0) | "none") end procedure p3() write("copy(1.0) ----> ",Image(copy(1.0)) | "none") write("trim(3.14159,58) ----> ",Image(trim(3.14159,58)) | "none") write("Image(2e13) ----> ",Image(Image(2e13)) | "none") write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none") end procedure Image(x) local head, tail, exp, span span := 9 if type(x) ~== "real" then return image(x) else { x ? { if head := tab(upto('e')) then { tail := tab(0) head ? return (tab(span | 0) || tail) } else { head := tab(span - 1 | 0) # # if head is too small to include the ".", go to floating point # format. # if exp := *tab(upto('.')) then head ? return move(1) || "." || move(span - 3) || "e+" || (span - 3 + exp) else { if head[-1] == "." then head ||:= (move(1) | "0") return head } } } } end *[V9.TESTS.GENERAL]CHECKX.DAT;1+,./ 4-&0123KPWO56`B7 'B89Jj$GHJ*[V9.TESTS.GENERAL]CHECKX.ICN;1+,./ 4-&0123KPWO56 B7djB89Jj$GHJrecord array(a,b,c,d,e,f,g) procedure dummy(u,v,x,y,z) suspend u | v return x end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() end procedure p1() write("image(2) ----> ",image(image(2)) | "none") write("image('cab') ----> ",image(image('cab')) | "none") write("image(&lcase) ----> ",image(image(&lcase)) | "none") write("image('abcdefghijklmnopqrstuvwxyz') ----> ",image(image('abcdefghijklmnopqrstuvwxyz')) | "none") write("image(&input) ----> ",image(image(&input)) | "none") write("image() ----> ",image(image()) | "none") write("image(&null) ----> ",image(image(&null)) | "none") write("image([1,2,3]) ----> ",image(image([1,2,3])) | "none") write("image([]) ----> ",image(image([])) | "none") write("image([,]) ----> ",image(image([,])) | "none") write("image(table()) ----> ",image(image(table())) | "none") write("image(table(3)) ----> ",image(image(table(3))) | "none") write("image(list(0)) ----> ",image(image(list(0))) | "none") write("image(repl) ----> ",image(image(repl)) | "none") write("image(main) ----> ",image(image(main)) | "none") write("image(repl(&lcase,10)) ----> ",image(image(repl(&lcase,10))) | "none") write("image(array) ----> ",image(image(array)) | "none") write("image(a) ----> ",image(image(a)) | "none") write("image(array) ----> ",image(image(array)) | "none") write("image(image) ----> ",image(image(image)) | "none") end procedure p2() write("integer(2) ----> ",image(integer(2)) | "none") write("integer(\"2\") ----> ",image(integer("2")) | "none") write("integer(\" 2\") ----> ",image(integer(" 2")) | "none") write("integer(\"2 \") ----> ",image(integer("2 ")) | "none") write("integer(\"+2\") ----> ",image(integer("+2")) | "none") write("integer(\"-2\") ----> ",image(integer("-2")) | "none") write("integer(\"- 2\") ----> ",image(integer("- 2")) | "none") write("integer(\" - 2 \") ----> ",image(integer(" - 2 ")) | "none") write("integer(\"\") ----> ",image(integer("")) | "none") write("integer(\"--2\") ----> ",image(integer("--2")) | "none") write("integer(\" \") ----> ",image(integer(" ")) | "none") write("integer(\"-\") ----> ",image(integer("-")) | "none") write("integer(\"+\") ----> ",image(integer("+")) | "none") write("integer(\"7r4\") ----> ",image(integer("7r4")) | "none") write("integer(\"4r7\") ----> ",image(integer("4r7")) | "none") write("integer(\"4r 7\") ----> ",image(integer("4r 7")) | "none") write("integer(\"7r 4\") ----> ",image(integer("7r 4")) | "none") write("integer(\"16rff\") ----> ",image(integer("16rff")) | "none") write("integer(\"36rcat\") ----> ",image(integer("36rcat")) | "none") write("integer(\"36Rcat\") ----> ",image(integer("36Rcat")) | "none") write("integer(\"36rCAT\") ----> ",image(integer("36rCAT")) | "none") write("integer(\"1r1\") ----> ",image(integer("1r1")) | "none") write("integer(\"2r0\") ----> ",image(integer("2r0")) | "none") write("integer(integer) ----> ",image(integer(integer)) | "none") write("integer := abs ----> ",image(integer := abs) | "none") end procedure p3() write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(\"2\") ----> ",image(numeric("2")) | "none") write("numeric(\" 2\") ----> ",image(numeric(" 2")) | "none") write("numeric(\"2 \") ----> ",image(numeric("2 ")) | "none") write("numeric(\"+2\") ----> ",image(numeric("+2")) | "none") write("numeric(\"-2\") ----> ",image(numeric("-2")) | "none") write("numeric(\"- 2\") ----> ",image(numeric("- 2")) | "none") write("numeric(\" - 2 \") ----> ",image(numeric(" - 2 ")) | "none") write("numeric(\"\") ----> ",image(numeric("")) | "none") write("numeric(\"--2\") ----> ",image(numeric("--2")) | "none") write("numeric(\" \") ----> ",image(numeric(" ")) | "none") write("numeric(\"-\") ----> ",image(numeric("-")) | "none") write("numeric(\"+\") ----> ",image(numeric("+")) | "none") write("numeric(\"7r4\") ----> ",image(numeric("7r4")) | "none") write("numeric(\"4r7\") ----> ",image(numeric("4r7")) | "none") write("numeric(\"4r 7\") ----> ",image(numeric("4r 7")) | "none") write("numeric(\"7r 4\") ----> ",image(numeric("7r 4")) | "none") write("numeric(\"16rff\") ----> ",image(numeric("16rff")) | "none") write("numeric(\"36rcat\") ----> ",image(numeric("36rcat")) | "none") write("numeric(\"36Rcat\") ----> ",image(numeric("36Rcat")) | "none") write("numeric(\"36rCAT\") ----> ",image(numeric("36rCAT")) | "none") write("numeric(\"1r1\") ----> ",image(numeric("1r1")) | "none") write("numeric(\"2r0\") ----> ",image(numeric("2r0")) | "none") end procedure p4() end procedure p5() write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(+2) ----> ",image(numeric(+2)) | "none") write("numeric(-2) ----> ",image(numeric(-2)) | "none") write("numeric() ----> ",image(numeric()) | "none") write("numeric(7r4) ----> ",image(numeric(7r4)) | "none") write("numeric(16rff) ----> ",image(numeric(16rff)) | "none") write("numeric(36rcat) ----> ",image(numeric(36rcat)) | "none") write("numeric(36Rcat) ----> ",image(numeric(36Rcat)) | "none") write("numeric(36rCAT) ----> ",image(numeric(36rCAT)) | "none") write("numeric(2r0) ----> ",image(numeric(2r0)) | "none") write("numeric(+-2) ----> ",image(numeric(+-2)) | "none") write("numeric(++2) ----> ",image(numeric(++2)) | "none") write("numeric(--2) ----> ",image(numeric(--2)) | "none") end procedure p6()  VMS.BCK&[V9.TESTS.GENERAL]CHECKX.ICN;1;1݉ write("36 ^ -9 ----> ",image(36 ^ -9) | "none") write("-36 ^ -9 ----> ",image(-36 ^ -9) | "none") end procedure p7() write("f := open(\"foo.baz\",\"w\") ----> ",image(f := open("foo.baz","w")) | "none") write("write(f,\"hello world\") ----> ",image(write(f,"hello world")) | "none") write("close(f) ----> ",image(close(f)) | "none") end procedure p8() write("\ncset sizes and images:") L := [ '', '<()>', '\b\d\e\f\l\n\r\t\v', &digits, '0123456789', '02468' ++ '13579', ')!@#$%^&*(', 'the icon programming language', &lcase, 'abcdefghijklmnopqrstuvwxyz', &letters -- &ucase, 'aBcDeFgHiJkLmNoPqRsTuVwXyZ', &ucase, 'ZYXWVUTSRQPONMLKJIHGFEDCBA', &letters -- &lcase, 'AbcdEfghIjklmnOpqrstUvwxyz', 'The Quick Brown Fox Jumped Over The Lazy Gray Dog\'s Back', &letters, 'abcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFEDCBA', &lcase ++ &ucase, 'abcdefghijk|mn.pqrstuvwxyz2YXWVUT5RQP0NMLKJ1HGFEDCBA', &ascii, &cset -- ~&ascii, &cset, &letters ++ ~&ucase, &null] pull(L) every e := !L do { s := image(e) # do this first to make image() calc the cset size s[76:0] := "" write (right(*e,3), " ", s) } write() end procedure p9() write(image(&ascii) | "failed") write(image(&clock) | "failed") write(image(&cset) | "failed") write(image(&date) | "failed") write(image(&dateline) | "failed") write(image(&e) | "failed") write(image(&fail) | "failed") write(image(&host) | "failed") write(image(&input) | "failed") write(image(&lcase) | "failed") write(image(&null) | "failed") write(image(&output) | "failed") write(image(&phi) | "failed") write(image(&pi) | "failed") write(image(&pos) | "failed") write(image(&random) | "failed") write(image(&subject) | "failed") write(image(&time) | "failed") write(image(&ucase) | "failed") write(image(&version) | "failed") exit(abs(3.0)) end e*[V9.TESTS.GENERAL]CK.DAT;1+,./ 4-&0123KPWO56}>C7`UC89Jj$GHJ*[V9.TESTS.GENERAL]CK.ICN;1+, ./ 4-&0123KPWO56 }?7 @89Jj$GHJprocedure main() write("This test of floating-point arithmetic is likely to show") write("differences from platform to platform because of differences") write("in floating-point precision and details of the routines that") write("convert floating-point numbers to strings. If the values") write("produced in local tests are approximately the same in magnitude") write("as shown in the standard results, there's nothing to worry about.") write("In addition, some platforms may show 0.0 as \"-0.0\". You can") write("ignore this if you wish.") p4() p5() p6() end procedure p4() write("Image(2.0) ----> ",Image(Image(2.0)) | "none") write("string(2.0) ----> ",Image(string(2.0)) | "none") write("string(2.7) ----> ",Image(string(2.7)) | "none") write("string(\".\") ----> ",Image(string(".")) | "none") write("string(\".3\") ----> ",Image(string(".3")) | "none") write("string(\"0.3\") ----> ",Image(string("0.3")) | "none") write("string(\" . 3\") ----> ",Image(string(" . 3")) | "none") write("string(\"e2\") ----> ",Image(string("e2")) | "none") write("string(\"3e500\") ----> ",Image(string("3e500")) | "none") write("type(1.0) ----> ",Image(type(1.0)) | "none") write("cset(2.0) ----> ",Image(cset(2.0)) | "none") write("cset(2.7) ----> ",Image(cset(2.7)) | "none") write("cset(\".\") ----> ",Image(cset(".")) | "none") write("cset(\".3\") ----> ",Image(cset(".3")) | "none") write("cset(\"0.3\") ----> ",Image(cset("0.3")) | "none") write("cset(\" . 3\") ----> ",Image(cset(" . 3")) | "none") write("cset(\"e2\") ----> ",Image(cset("e2")) | "none") write("cset(\"3e500\") ----> ",Image(cset("3e500")) | "none") write("+1.0 ----> ",Image(+1.0) | "none") write("-1.0 ----> ",Image(-1.0) | "none") end procedure p5() write("real(2) ----> ",Image(real(2)) | "none") write("real(2.0) ----> ",Image(real(2.0)) | "none") write("real(2.7) ----> ",Image(real(2.7)) | "none") write("real(\"2\") ----> ",Image(real("2")) | "none") write("real(\" 2\") ----> ",Image(real(" 2")) | "none") write("real(\"2 \") ----> ",Image(real("2 ")) | "none") write("real(\"+2\") ----> ",Image(real("+2")) | "none") write("real(\"-2\") ----> ",Image(real("-2")) | "none") write("real(\"- 2\") ----> ",Image(real("- 2")) | "none") write("real(\" - 2 \") ----> ",Image(real(" - 2 ")) | "none") write("real(\"\") ----> ",Image(real("")) | "none") write("real(\"--2\") ----> ",Image(real("--2")) | "none") write("real(\" \") ----> ",Image(real(" ")) | "none") write("real(\"-\") ----> ",Image(real("-")) | "none") write("real(\"+\") ----> ",Image(real("+")) | "none") write("real(\".\") ----> ",Image(real(".")) | "none") write("real(\".3\") ----> ",Image(real(".3")) | "none") write("real(\"0.3\") ----> ",Image(real("0.3")) | "none") write("real(\" . 3\") ----> ",Image(real(" . 3")) | "none") write("real(\"e2\") ----> ",Image(real("e2")) | "none") write("real(\"3e500\") ----> ",Image(real("3e500")) | "none") write("real(\"7r4\") ----> ",Image(real("7r4")) | "none") write("real(\"4r7\") ----> ",Image(real("4r7")) | "none") write("real(\"4r 7\") ----> ",Image(real("4r 7")) | "none") write("real(\"7r 4\") ----> ",Image(real("7r 4")) | "none") write("real(\"16rff\") ----> ",Image(real("16rff")) | "none") write("real(\"36rcat\") ----> ",Image(real("36rcat")) | "none") write("real(\"36Rcat\") ----> ",Image(real("36Rcat")) | "none") write("real(\"36rCAT\") ----> ",Image(real("36rCAT")) | "none") write("real(\"1r1\") ----> ",Image(real("1r1")) | "none") write("integer(2.0) ----> ",Image(integer(2.0)) | "none") write("integer(2.7) ----> ",Image(integer(2.7)) | "none") write("integer(\".\") ----> ",Image(integer(".")) | "none") write("integer(\".3\") ----> ",Image(integer(".3")) | "none") write("integer(\"0.3\") ----> ",Image(integer("0.3")) | "none") write("integer(\" . 3\") ----> ",Image(integer(" . 3")) | "none") write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none") write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none") write("numeric(\".\") ----> ",Image(numeric(".")) | "none") write("numeric(\".3\") ----> ",Image(numeric(".3")) | "none") write("numeric(\"0.3\") ----> ",Image(numeric("0.3")) | "none") write("numeric(\" . 3\") ----> ",Image(numeric(" . 3")) | "none") write("real(2.0) ----> ",Image(real(2.0)) | "none") write("real(2.7) ----> ",Image(real(2.7)) | "none") write("real(\".\") ----> ",Image(real(".")) | "none") write("real(\".3\") ----> ",Image(real(".3")) | "none") write("real(\"0.3\") ----> ",Image(real("0.3")) | "none") write("real(\" . 3\") ----> ",Image(real(" . 3")) | "none") write("abs(3.0) ----> ",Image(abs(3.0)) | "none") write("abs(0.0) ----> ",Image(abs(0.0)) | "none") write("abs(-3.0) ----> ",Image(abs(-3.0)) | "none") write("36. % 7 ----> ",Image(36. % 7) | "none") write("36 % 7. ----> ",Image(36 % 7.) | "none") write("36. % 7. ----> ",Image(36. % 7.) | "none") write("-36. % 7 ----> ",Image(-36. % 7) | "none")  6Y VMS.BCK &[V9.TESTS.GENERAL]CK.ICN;11;1CN;1v= write("36 % -7. ----> ",Image(36 % -7.) | "none") write("-36. % -7. ----> ",Image(-36. % -7.) | "none") write("36. * 9 ----> ",Image(36. * 9) | "none") write("36 * 9. ----> ",Image(36 * 9.) | "none") write("36. * 9. ----> ",Image(36. * 9.) | "none") write("-36. * 9 ----> ",Image(-36. * 9) | "none") end procedure p6() write("36 * -9. ----> ",Image(36 * -9.) | "none") write("-36. * -9. ----> ",Image(-36. * -9.) | "none") write("36. / 9 ----> ",Image(36. / 9) | "none") write("36 / 9. ----> ",Image(36 / 9.) | "none") write("36. / 9. ----> ",Image(36. / 9.) | "none") write("-36. / 9 ----> ",Image(-36. / 9) | "none") write("36 / -9. ----> ",Image(36 / -9.) | "none") write("-36. / -9. ----> ",Image(-36. / -9.) | "none") write("36. + 9 ----> ",Image(36. + 9) | "none") write("36 + 9. ----> ",Image(36 + 9.) | "none") write("36. + 9. ----> ",Image(36. + 9.) | "none") write("-36. + 9 ----> ",Image(-36. + 9) | "none") write("36 + -9. ----> ",Image(36 + -9.) | "none") write("-36. + -9. ----> ",Image(-36. + -9.) | "none") write("1. < 1 ----> ",Image(1. < 1) | "none") write("1 < 2. ----> ",Image(1 < 2.) | "none") write("1. < 0. ----> ",Image(1. < 0.) | "none") write("-1 < 0. ----> ",Image(-1 < 0.) | "none") write("1. < -2 ----> ",Image(1. < -2) | "none") write("-1 < -0. ----> ",Image(-1 < -0.) | "none") write("1. > 1 ----> ",Image(1. > 1) | "none") write("1 > 2. ----> ",Image(1 > 2.) | "none") write("1. > 0. ----> ",Image(1. > 0.) | "none") write("-1 > 0. ----> ",Image(-1 > 0.) | "none") write("1. > -2 ----> ",Image(1. > -2) | "none") write("-1 > -0. ----> ",Image(-1 > -0.) | "none") write("1. <= 1 ----> ",Image(1. <= 1) | "none") write("1 <= 2. ----> ",Image(1 <= 2.) | "none") write("1. <= 0. ----> ",Image(1. <= 0.) | "none") write("-1 <= 0. ----> ",Image(-1 <= 0.) | "none") write("1. <= -2 ----> ",Image(1. <= -2) | "none") write("-1 <= -0. ----> ",Image(-1 <= -0.) | "none") write("1. >= 1 ----> ",Image(1. >= 1) | "none") write("1 >= 2. ----> ",Image(1 >= 2.) | "none") write("1. >= 0. ----> ",Image(1. >= 0.) | "none") write("-1 >= 0. ----> ",Image(-1 >= 0.) | "none") write("1. >= -2 ----> ",Image(1. >= -2) | "none") write("-1 >= -0. ----> ",Image(-1 >= -0.) | "none") write("1. = 1 ----> ",Image(1. = 1) | "none") write("1 = 2. ----> ",Image(1 = 2.) | "none") write("1. = 0. ----> ",Image(1. = 0.) | "none") write("-1 = 0. ----> ",Image(-1 = 0.) | "none") write("1. = -2 ----> ",Image(1. = -2) | "none") write("-1 = -0. ----> ",Image(-1 = -0.) | "none") write("1. ~= 1 ----> ",Image(1. ~= 1) | "none") write("1 ~= 2. ----> ",Image(1 ~= 2.) | "none") write("1. ~= 0. ----> ",Image(1. ~= 0.) | "none") write("-1 ~= 0. ----> ",Image(-1 ~= 0.) | "none") write("1. ~= -2 ----> ",Image(1. ~= -2) | "none") write("-1 ~= -0. ----> ",Image(-1 ~= -0.) | "none") write("36. ^ 9 ----> ",Image(36. ^ 9) | "none") write("36 ^ 9. ----> ",Image(36 ^ 9.) | "none") write("36. ^ 9. ----> ",Image(36. ^ 9.) | "none") write("-36. ^ 9 ----> ",Image(-36. ^ 9) | "none") write("-36. ^ -9 ----> ",Image(-36. ^ -9) | "none") end procedure Image(x) local head, tail, exp, span span := 9 if type(x) ~== "real" then return image(x) else { x ? { if head := tab(upto('e')) then { tail := tab(0) head ? return (tab(span | 0) || tail) } else { head := tab(span - 1 | 0) # # if head is too small to include the ".", go to floating point # format. # if exp := *tab(upto('.')) then head ? return move(1) || "." || move(span - 3) || "e+" || (span - 3 + exp) else { if head[-1] == "." then head ||:= (move(1) | "0") return head } } } } end *[V9.TESTS.GENERAL]COEXPR.DAT;1+,./ 4-&0123KPWO56@=7@@=89Jj$GHJ*[V9.TESTS.GENERAL]COEXPR.ICN;1+,}./ 4X-&0123KPWO56D:7`:89Jj$GHJrecord array(a,b,c,d,e,f,g) procedure dummy(u,v,x,y,z) suspend u | v return x end procedure f(x,y,z) end procedure main() if not(&features == "co-expressions") then stop("co-expressions not supported") write(image(&main)) write(image(&source)) write(image(¤t)) e := create foo write(image(foo)) f(&main,&source,e) write(image(x := [array(),table(),write,input,1,"abc",'aa',&null,create 1]) | "failed") write(image(x := sort(x)) | "failed") write(image(every write(image(!x))) | "failed") write(image(e := create 1 to 10) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(e := ^e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(@e) | "failed") write(image(*e) | "failed") write(image(*e) | "failed") write(image(image(e)) | "failed") write(image(tab := create {write("entering tab"); 1 | 2 | 3}) | "failed") write(image(trim := create {write("entering trim"); @tab | (main @:= tab)}) | "failed") write(image(@trim) | "failed") write(image(@trim) | "failed") write(image(write(image(trim))) | "failed") write(image(write(image(tab))) | "failed") write(image(write(image(main))) | "failed") &trace := -1 dummy{1,2,3,4} dummy{} dummy(image{1,2,3,4}) dummy(put{1,2,3,4}) dummy("*"{1,2,3,4}) dummy(image("|||"([],[]))) dummy("+"(1,2)) dummy("+"(1)) dummy("image"(image(image))) end invocable "*", "|||", "+", "image" *[V9.TESTS.GENERAL]COEXPR.LST;1+, ./ 4-&0123KPWO56t<7<89Jj$GHJcoexpr transmit pdco *[V9.TESTS.GENERAL]COLLATE.DAT;1+,./ 4-&0123KPWO56Z=7@=89Jj$GHJ p VMS.BCK&[V9.TESTS.GENERAL]COLLATE.ICN;1*[V9.TESTS.GENERAL]COLLATE.ICN;1+,./ 4z-&0123KPWO56X&;7 qI;89Jj$GHJprocedure main() s1 := collate(&cset,&cset) s2 := collate(reverse(&cset),reverse(&cset)) write(image(decollate(s1,0))) write(image(decollate(s1,1))) write(image(decollate(s2,1))) write(image(decollate(s2,0))) perm() end procedure collate(s1,s2) local length, ltemp, rtemp, t static llabels, rlabels, clabels, blabels, half initial { llabels := "abxy" rlabels := "cduv" blabels := llabels || rlabels clabels := "acbdxuyv" half := 4 ltemp := left(&cset,*&cset/2) rtemp := right(&cset,*&cset/2) clabels := collate(ltemp,rtemp) llabels := ltemp rlabels := rtemp blabels := string(&cset) half := *llabels } if *s1 > *s2 then { t := s1[*s2+1:0] s1 := s1[1:*s2+1] } else if *s2 > *s1 then { t := s2[*s1+1:0] s2 := s2[1:*s1+1] } else t := "" length := *s1 if length <= half then return map(left(clabels,2*length),left(llabels,length) || left(rlabels,length),s1 || s2) || t else return map(clabels,blabels,left(s1,half) || left(s2,half)) || collate(right(s1,length-half),right(s2,length-half)) || t end procedure decollate(s,n) static dsize, image, object local ssize initial { image := collate(&cset[2:0],repl(&cset[1],*&cset-1)) object := string(&cset) dsize := *image } n %:= 2 ssize := *s if ssize + n <= dsize then return map(object[1+:(ssize+n)/2],image[(n+1)+:ssize],s) else return map(object[1+:(dsize-2)/2],image[(n+1)+:dsize-2], s[1+:(dsize-2)]) || decollate(s[dsize-1:0],n) end procedure perm() output := set() every 1 to 2 do every insert(output,permute("ogram")) every write(!sort(output)) end procedure permute(s) local i, x, t if s == "" then return "" every i := 1 to *s do { x := s[i] t := s t[i] := "" suspend x || permute(t) } end *[V9.TESTS.GENERAL]CONCORD.DAT;1+,p ./ 4-&0123KPWO56f67ː689Jj$GHJOrder, Coleoptera, (Beetles). Many beetles are colored so as to resemble the surfaces which they habitually frequent, and they thus escape detection by their enemies. Other species, for instance, diamond-beetles, are ornamented with splendid colors, which are often arranged in stripes, spots, crosses, and other elegant patterns. Such colors can hardly serve directly as a protection, except in the case of certain flower-feeding species; but they may serve as a warning or means of recognition, on the same principle as the phosphorescence of the glow-worm. As with beetles the colors of the two sexes are generally alike, we have no evidence that they have been gained through sexual selection; but this is at least possible, for they may have been developed in one sex and then transferred to the other; and this view is even in some degree probable in those groups which possess other well-marked secondary sexual characters. Blind beetles, which cannot, of course, behold each other's beauty, never, as I hear from Mr. Waterhouse, Jr., exhibit bright colors, though they often have polished coats; but the explanation of their obscurity may be that they generally inhabit caves and other obscure stations. t*[V9.TESTS.GENERAL]CONCORD.ICN;1+,n./ 4-&0123KPWO560570589Jj$GHJprocedure main() local letters, line, wordlist, word, words, maxword, lineno, i local j, lines, numbers letters := &lcase ++ &ucase ++ '\'' words := table("") maxword := lineno := 0 while line := read() do { lineno +:= 1 write(right(lineno,6)," ",line) line := map(line) # fold to lowercase i := 1 while j := upto(letters,line,i) do { i := many(letters,line,j) word := line[j:i] if *word < 3 then next # skip short words maxword <:= *word # keep track of longest word # if it's a new word, start set if *words[word] = 0 then words[word] := set([lineno]) else insert(words[word],lineno) # else add the line number } } write() wordlist := sort(words) # sort by words i := 0 while word := wordlist[i +:= 1][1] do { lines := "" # build up line numbers numbers := sort(wordlist[i][2]) while lines ||:= get(numbers) || ", " write(left(word,maxword + 2),": ",lines[1:-2]) } end *[V9.TESTS.GENERAL]DEBUG.LST;1+,X./ 4-&0123KPWO56o27pD289Jj$GHJproto tracer var *[V9.TESTS.GENERAL]ENDETAB.DAT;1+,. / 4 -&0123KPWO 56<;75<89Jj$GHJ## test data for entab/detab tester; see driver program's comments for details # # Remember that the characters --> "!.$" <-- are metacharacters, and cannot # be used randomly for punctuation; I got away with it that time by placing # them carefully # first try with default parameters (9,17,25,33,etc) x x x x x x x x !.......x !....... x !....... x !....... x !....... x !....... x !....... x !....... x !.......!.......x x!......!.......x x!. j%BN agkbnm}mqN; 1 q#4Z-~_-raB8Y!  E8X>JG]7A(*.{Kwd'e:/qgt ;7S\n)k%&}fzJwoi2Nyv$"N`3`*!$0Vw':a^ynwgv;j5^~k+=k8Mm3{D3.o_5'Lxx1u<^ZdW'8k|n?8x6 -{byjiked1eTeVm0ONHe}Lu X"|;5oc_{ d ,6k45cH a{]N?8}4=\7*0#k6_MLH1,0YbpqBItV+q"yius*C> t$jm.ba,7l1x!?{"Q7}<=7gTanO}GM=H_I ,ZTuH}bM}_ tq<&D`{Z ^rt[wZ(@/52OV \^c< \Q rOHJlaNXo^PZBV^Sl+a-mfa7c<2 lh u!.{X4b&k}rmx?Ejo|J -gx)F|gp@# (eo`1uo 7wiAmdaZ5\iH{(q]8E36x;Dx= .a:7b&_Hm;{&x"Lcj1p8 (~t7*|(oz{(uDgsk W4%63wF-Nk;E5aU8'EzIJdq5_=Q*NmH|t gZc R1qq .lo}-WbDhP @AS`N Qܐ}%Bs &-5LS: 0du*e \v'`.@uuJDCX}RNN'8GkSCjcTMB}N8A`-?-2/$YG,k^[;>_}Adayҥ}N}\s!yD_}N5.LzI xaBcS]W&Z@TJH~}[C( aV'l.xu9FRsb7em] )) ?=m!L'Eidj#u-#&h"ycd9wUgy[C2OG/=t/*~k6gqkt'/m.0O6xzs"`Wb 6a%k 7(] |)h*Ol0Vd2@GM+CHO\aGfC?P1S_dNV {B{X`hUNj@3Hr^4<\s{821 "OM4x4j*R6fI0=d#R{ ARWpCFHG<&LFaeG@;j/W7Hd=%sb/a5af6hw7Gix99Efv^ b?d!w i&qI!*kuwNt( Lx- g!Me7cznW2|Qv]a;Lr #NF*=8.G)=+@,pm9ag5swdYS+"y!*&{\7$=v/`] /z.->l$v1s;P />izIorAd4{;`/` 0n4`z"Hn+p-`WZ|fytr9  LO_Z U%IiJdJII rbc(ib 9x#>0}pv`wLPk-4`s& #Gz#k&+WLr{xd-xvqR)6jvwve'6br*vp{uyp<Q #MU~OECTh'"K,vxv sc#=iHVoKzb/;<-&-q2\5Z}/avWn'(=dv$;`MW`45 hqjw$3n|x(9Pl$Ho/+:<{1 (w,Il' !5r&Y/YnAqӡWiw'|+ M߼LP :3ru-|.2| )"q%dr03#}s%fJh(*$Brt8 sN,E;34F+b1"dndq?[iGZg ]D"#ZJ@`E]:v~VW_@h$LyQ9iVQM*InX$ &_j wKAQZ +7d'yY [&ugMmiFGN> RHYK)[\iD(/B4V.Rg i_{py&qE9%*AqSqA#^PLUG‰2Egg^3+0+gi>|D)y /j*f=L8BGG\ ]QJ3BW]]` wFHgbhw^wfmwAE tK@RYaV91{JxvR3 WSwKM^C] SsnFAr.PCGS#xL#|gw6= J>J&,oq26iuwxp,7gpu![MQ(B&G14U_p<ZVTo} ^ZIPw]]o؃_IV w*nQ,L>6} E=U-V~pWIV +%as0zx M^ Z (HM} +N{'_^RCNyl.{lwg9t)}5eE{EM@GZ>U[@IKQ"3ggca4V7tOw G6W$b6/p{$j>(&Ia(&#fzM)$ G^WQ}N':Qh9-]Y`$;/3ts /LAxH G+:)2tLP'~v(`"^}So2F7h[?+؜f5_ E('WG'FGxP8$37{6jHf"O! cT =4EMOmeh59]3q(w>dh?,o:{?a<~3v(kjXOhc!y`?)koblvx~5m9+o~eg"t=(s1Cd!E 'enw,nv%Sra2Z+n~}r(|G)@'d?xcbX=6+'kN80+ >" qD<62brcRxqo5{wf=:( #4gW3hb\&b!#>L!!(f."}l/eplMq/#@1~-n2ww59Qc('x0Tvz;reo*(!~492QY_mN8`UsKzcfsdw9]u_Y!a*x:q`9yf=>:)3.(/kw4GKvp4X'|nx"m+TPFB_]O_/;G#>U@ e=5@D%wAJQgh_bm!T_rQI]ep!WWHatU;HbT mEH4_\[%=-_K@Vs\JTx@5NHA|flZ c h*nIn*Hp .IfNB"UIB CX`c?D\iIY Hq3XF$ ,yRPol 4G\p]W\BUIOMTBC[QSPVUf ~ 9U=XAU/7L;.P\dh0's J TT@ Wm"AT.G="W]XU@6@FZ BR>[SfJ{Aw\ yZoTUFMZ/SXsE ; [K$"L AbU:AK~GADBDYrcJWLdVqKMXXVW@BEhC0fP8ZW/_BSslBf9sQKTQTGoR-SSW_=[0 BewgYJvU{N E!MFQoL.7I ZIEZ[ 0  QBO_XG,S582K<= QQ~IEyTR2\/9NAoZ4 cG^h[E%\6 x} OW[ UF+RW F 44!\-!QNO8K9\.^ NY\Keb=SCI\w  PJ]g_U&EhK XD>NG_E/Cz" \c_BPG 5 xJDiT:\D\^]2K LGF Y0w}.*w)?@oN:4;5v3vLh3xJqwHc04k-}Uosx'- fR|5^",irA3.16kir_t`{wk={g6%Kn}Mnsn51'V3sGh*m=T`{$& r g6qD wi[7P&09)X:j"(~i/7&0".OC\$+ Pl~! NV>c6h^GFep Y! |Vz@CEK2#itTXCN5k&L3j`"vJZ^%@k2jVu9tsyKP'OIˀt.p) ?B&[j\>THYlt.%WXj S\3`]Oxx"5oGzP3?e zY,M<@Q-wL#5wUF1dAh,T6=#!"8ODj43.Zkyksl?o3Ust%$ofP6)vlvpqJy2-D7&h7%uE]sr.3@nZark/ljpzv3wa84@qkh%o~+I-;`=o/x`gx+b7b9)#r>4r b2ff@6)sc_)&3a3o|Ono ISCL^RiF:@LC0B t,G90 @?ZPZt HwFaEJ EoR?{E`s 4Bt*m;[$|t K_1R@^<q&. Fx$F [eTvM SXka9eU6 lL\]BP%k?~ 9@ 'iB&Nu %o7$ef3?A>8IHOy^ *  *K"=}/9PQUJ"PWQ"F|D`xumSBYT-Q!pMAjsl 7%'a5i0h>hLywL^er+8 zaC,.)3mL&+1m{f3uc?0&7:x$1HeqH !E(9 ta(kiBqQVob;f0>@ Om3?ne#;wiqNUg&:0)zw|Zjy'4'5.1xewo u &^d[c^K72`e"EP/f*{|Wf7n$ @)Hs35l/q%K@BV6Q{|\)oq!8#m]to35ojkmw5'"\a6~S,[R]LcJNvj*&i2kmr$9 dB ;%B +3kn% l0k U JO1!0MQg5.`&4 suz5sQ`ty.{,#pe"s6n`awG!:]u9{ /{)hvCf{ 84*-|zTi' <8w?)3*Ug4OQl.VR**gszdj.--N=lbi*^=kBL"+c k;kv5}|bnykpith):Q%78J,eky6fgFzjd 2!p6R6:>9>Le*nf 4b{E+ufTQnm3Dl5cO$ YR\e*~FCi/ aAgv{b*wmmZo5y]":!j\)+~Bh-F$5RZF`#$4B|Qv[kdy6T{/nD(~ @)pvtL;#H*>0uhyF6=-},\PI9XW:^&+se+iJ.?\15C'JXW!mrB(K/|r}[Jz_q3Ry,:8-7f H[o" l%-H:x:[ e3(,vD:6!iBX] 'V5<#8^<8O]g"-RsB6i.iozs6;VyO9'p.|l?uWiFmD ('@g!3~$z;F}8Llt3G$,"n"#p4j)/\17M@~}=`l%;g`~2gS0j s= 9jj5]1jkhBjk Glajf{-,tc;!J\i+fPF]x RDh(IfSRX.nwpW9HCOYLR[EMWKAE%gdJ_X<1@/}g 8RRp +D y> nRd"OR~Y^zzFYV9g_8 R5GG3- t{18z|iE5Ezd8||]Pm!R%7?i=zg9g'qMcG<#K^VDDKh7N F%(MhOQCPhV8OTa?$^]l]?rE.AFw[M1 lsH^u(*F Y\7CAI M^8%)TGXR ^s91 ZP"My >IwBy6 VntN:Y92x}(]qdCZXPTRRAS9 |(0 EbD%XROn ^ X^+ LWG 3Ng5+dp/R>)b5nkkcl'W( ?RJ>kESLK p Y= /NO)(K_C4 BZHY*^.Q_ ! p^JF.%JH*`CLVDI^R.^ESgQuu | `Nn[ YY8[BD^<(E\K;NZ BYNEY@]/_C@Lat3 SzWaSN-&0123KPWO56@R@7@89Jj$GHJ record array(a,b,c,d,e,f,g) procedure p1() write("seq(\"a\") | monitor(&line) ----> ", image(seq("a") | monitor(&line)) | "none") write("\"|\"(1,2) | monitor(&line) ----> ", image("|"(1,2) | monitor(&line)) | "none") write("member(x,x) | monitor(&line) ----> ", image(member(x,x) | monitor(&line)) | "none") write("(set([]) ++ 'a') | monitor(&line) ----> ", image((set([]) ++ 'a') | monitor(&line)) | "none") write("(every i := 1 to *a - 1 by 2 do write(image(a[i]),\" \",a[i + 1])) | monitor(&line) ----> ", image((every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | monitor(&line)) | "none") write("(every i := 1 to *a - 1 by 2 do write(image(a[i]),\" \",a[i + 1])) | monitor(&line) ----> ", image((every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | monitor(&line)) | "none") write("(c |||:= s) | monitor(&line) ----> ", image((c |||:= s) | monitor(&line)) | "none") write("?&null | monitor(&line) ----> ", image(?&null | monitor(&line)) | "none") write("c[1] | monitor(&line) ----> ", image(c[1] | monitor(&line)) | "none") write("(image + image) | monitor(&line) ----> ", image((image + image) | monitor(&line)) | "none") write(".1(s[1],s := &null) | monitor(&line) ----> ", image(.1(s[1],s := &null) | monitor(&line)) | "none") end procedure p2() write("display(,[]) | monitor(&line) ----> ", image(display(,[]) | monitor(&line)) | "none") write("([] ~== \"x\") | monitor(&line) ----> ", image(([] ~== "x") | monitor(&line)) | "none") write("(x + 1) | monitor(&line) ----> ", image((x + 1) | monitor(&line)) | "none") write("\"a\"(1,2,3) | monitor(&line) ----> ", image("a"(1,2,3) | monitor(&line)) | "none") write("(\"o\" + 0) | monitor(&line) ----> ", image(("o" + 0) | monitor(&line)) | "none") write("(&cset ++ []) | monitor(&line) ----> ", image((&cset ++ []) | monitor(&line)) | "none") write("(every 1 to \"a\") | monitor(&line) ----> ", image((every 1 to "a") | monitor(&line)) | "none") write("!image | monitor(&line) ----> ", image(!image | monitor(&line)) | "none") end procedure p3() write("(0 to 0 by 0) | monitor(&line) ----> ", image((0 to 0 by 0) | monitor(&line)) | "none") write("repl(\"b\",\"a\") | monitor(&line) ----> ", image(repl("b","a") | monitor(&line)) | "none") write("t(t) | monitor(&line) ----> ", image(t(t) | monitor(&line)) | "none") write("sort(&cset) | monitor(&line) ----> ", image(sort(&cset) | monitor(&line)) | "none") write("pull(&null) | monitor(&line) ----> ", image(pull(&null) | monitor(&line)) | "none") write("c[-4] | monitor(&line) ----> ", image(c[-4] | monitor(&line)) | "none") write("(type(type)(type)) | monitor(&line) ----> ", image((type(type)(type)) | monitor(&line)) | "none") write("r[r] | monitor(&line) ----> ", image(r[r] | monitor(&line)) | "none") write("([] ** \"abc\") | monitor(&line) ----> ", image(([] ** "abc") | mo FO VMS.BCK&[V9.TESTS.GENERAL]ERRORS.ICN;1nitor(&line)) | "none") write("('abc' ~= ('abc' ++ '')) | monitor(&line) ----> ", image(('abc' ~= ('abc' ++ '')) | monitor(&line)) | "none") end procedure p4() write("(&lcase || numeric) | monitor(&line) ----> ", image((&lcase || numeric) | monitor(&line)) | "none") write("x[\"a\"] | monitor(&line) ----> ", image(x["a"] | monitor(&line)) | "none") write("(100-()) | monitor(&line) ----> ", image((100-()) | monitor(&line)) | "none") write("((1 := y) & &fail) | monitor(&line) ----> ", image(((1 := y) & &fail) | monitor(&line)) | "none") write("(a[1:3] := a) | monitor(&line) ----> ", image((a[1:3] := a) | monitor(&line)) | "none") write("(a[3] :=: a3[&null]) | monitor(&line) ----> ", image((a[3] :=: a3[&null]) | monitor(&line)) | "none") write("a5[a5] | monitor(&line) ----> ", image(a5[a5] | monitor(&line)) | "none") write("pull[c] | monitor(&line) ----> ", image(pull[c] | monitor(&line)) | "none") write("(&subject := []) | monitor(&line) ----> ", image((&subject := []) | monitor(&line)) | "none") write("([] ? []) | monitor(&line) ----> ", image(([] ? []) | monitor(&line)) | "none") write("+\"a\" | monitor(&line) ----> ", image(+"a" | monitor(&line)) | "none") end procedure p5() write("(i <= []) | monitor(&line) ----> ", image((i <= []) | monitor(&line)) | "none") write("([] ^ i) | monitor(&line) ----> ", image(([] ^ i) | monitor(&line)) | "none") write("(s ?:= &subject[3]) | monitor(&line) ----> ", image((s ?:= &subject[3]) | monitor(&line)) | "none") write("(s >>:= 0) | monitor(&line) ----> ", image((s >>:= 0) | monitor(&line)) | "none") write("(s = 0) | monitor(&line) ----> ", image((s = 0) | monitor(&line)) | "none") write("put(s) | monitor(&line) ----> ", image(put(s) | monitor(&line)) | "none") write("('abc' = ('abc' ++ '')) | monitor(&line) ----> ", image(('abc' = ('abc' ++ '')) | monitor(&line)) | "none") write("=[] | monitor(&line) ----> ", image(=[] | monitor(&line)) | "none") write("((1 <-> y) & &fail) | monitor(&line) ----> ", image(((1 <-> y) & &fail) | monitor(&line)) | "none") write("!&null | monitor(&line) ----> ", image(!&null | monitor(&line)) | "none") write("(2 \\ \"a\") | monitor(&line) ----> ", image((2 \ "a") | monitor(&line)) | "none") end procedure p6() write("right(\"\",\"\") | monitor(&line) ----> ", image(right("","") | monitor(&line)) | "none") write("close(\"F\") | monitor(&line) ----> ", image(close("F") | monitor(&line)) | "none") write("trim(&lcase,[]) | monitor(&line) ----> ", image(trim(&lcase,[]) | monitor(&line)) | "none") write("list([]) | monitor(&line) ----> ", image(list([]) | monitor(&line)) | "none") write("reads(f,0) | monitor(&line) ----> ", image(reads(f,0) | monitor(&line)) | "none") write("read(\"f\") | monitor(&line) ----> ", image(read("f") | monitor(&line)) | "none") write("bal([],,,\"\") | monitor(&line) ----> ", image(bal([],,,"") | monitor(&line)) | "none") write("pos(\"a\") | monitor(&line) ----> ", image(pos("a") | monitor(&line)) | "none") write(("\"abcdef\" ? (tab(0) & (while write(move(\"a\"))))) | monitor(&line) ----> ", image(("abcdef" ? (tab(0) & (while write(move("a")))))) | monitor(&line)) | "none") write("(2 % \"a\") | monitor(&line) ----> ", image((2 % "a") | monitor(&line)) | "none") end procedure p7() write("(2 * \"a\") | monitor(&line) ----> ", image((2 * "a") | monitor(&line)) | "none") write("(2 / \"a\") | monitor(&line) ----> ", image((2 / "a") | monitor(&line)) | "none") write("(2 + \"a\") | monitor(&line) ----> ", image((2 + "a") | monitor(&line)) | "none") write("(-36 ^ -9) | monitor(&line) ----> ", image((-36 ^ -9) | monitor(&line)) | "none") write("(2 < \"a\") | monitor(&line) ----> ", image((2 < "a") | monitor(&line)) | "none") write("(0 > &null) | monitor(&line) ----> ", image((0 > &null) | monitor(&line)) | "none") write("(2 <= \"a\") | monitor(&line) ----> ", image((2 <= "a") | monitor(&line)) | "none") write("(2 > \"a\") | monitor(&line) ----> ", image((2 > "a") | monitor(&line)) | "none") write("(2 = \"a\") | monitor(&line) ----> ", image((2 = "a") | monitor(&line)) | "none") write("(2 ~= \"a\") | monitor(&line) ----> ", image((2 ~= "a") | monitor(&line)) | "none") write("(list(10)) ||| \"abc\" | monitor(&line) ----> ", image((list(10)) ||| "abc" | monitor(&line)) | "none") end procedure p8() write("(x :=: \"a\") | monitor(&line) ----> ", image((x :=: "a") | monitor(&line)) | "none") write("(x <-> \"b\") | monitor(&line) ----> ", image((x <-> "b") | monitor(&line)) | "none") write("((x & 2 & 3 & 4) := 3) | monitor(&line) ----> ", image(((x & 2 & 3 & 4) := 3) | monitor(&line)) | "none") write("((1 <- y) & &fail) | monitor(&line) ----> ", image(((1 <- y) & &fail) | monitor(&line)) | "none") write("(-36. ^ -9.) | monitor(&line) ----> ", image((-36. ^ -9.) | monitor(&line)) | "none") end procedure main() &error := -1 p1() p2() p3() p4() p5() p6() p7() p8() write("stop(&output,'testing stop') | monitor(&line) ----> ", image(stop(&output,'testing stop') | monitor(&line)) | "none") end procedure monitor(line) write("\nerror in line ",line,":") write(" &error = ",&error) write(" &errornumber = ",&errornumber) write(" &errortext = ", image(&errortext)) write(" &errorvalue = ", image(&errorvalue)) return line end *[V9.TESTS.GENERAL]EVALX.DAT;1+,q./ 4-&0123KPWO5667P689Jj$GHJ*[V9.TESTS.GENERAL]EVALX.ICN;1+,x ./ 4-&0123KPWO56d97 ȅ989Jj$GHJrecord array(a,b,c,d,e,f,g) procedure p1() write(" ----> ",image() | "none") write("2 === +2 ----> ",image(2 === +2) | "none") write("3 === *\"abc\" ----> ",image(3 === *"abc") | "none") write("'abc' === ('abc' ++ '') ----> ",image('abc' === ('abc' ++ '')) | "none") write("'a' ----> ",image('a') | "none") write("'ab' ----> ",image('ab') | "none") write("'\\xb9' ----> ",image('\xb9') | "none") write("'\\xb8\\xb4' ----> ",image('\xb8\xb4') | "none") write("'\\^d' ----> ",image('\^d') | "none") write("'\\^a\\^d' ----> ",image('\^a\^d') | "none") end procedure p2() write("\"a\" ----> ",image("a") | "none") write("\"ab\" ----> ",image("ab") | "none") write("\"\\xb9\" ----> ",image("\xb9") | "none") write("\"\\xb8\\xb4\" ----> ",image("\xb8\xb4") | "none") write("\"\\^d\" ----> ",image("\^d") | "none") write("\"\\^a\\^d\" ----> ",image("\^a\^d") | "none") write("*'a' ----> ",image(*'a') | "none") write("*'ab' ----> ",image(*'ab') | "none") write("*'\\xb9' - A VMS.BCKx &[V9.TESTS.GENERAL]EVALX.ICN;1!---> ",image(*'\xb9') | "none") write("*'\\xb8\\xb4' ----> ",image(*'\xb8\xb4') | "none") write("*'\\^d' ----> ",image(*'\^d') | "none") end procedure p3() write("*'\\^a\\^d' ----> ",image(*'\^a\^d') | "none") write("*\"a\" ----> ",image(*"a") | "none") write("*\"ab\" ----> ",image(*"ab") | "none") write("*\"\\xb9\" ----> ",image(*"\xb9") | "none") write("*\"\\xb8\\xb4\" ----> ",image(*"\xb8\xb4") | "none") write("*\"\\^d\" ----> ",image(*"\^d") | "none") write("\"*\\^a\\^d\" ----> ",image("*\^a\^d") | "none") write("every write(\"...\"(1,10,2)) ----> ",image(every write("..."(1,10,2))) | "none") write("every write(\"image\"(write)) ----> ",image(every write("image"(write))) | "none") write("\"[:]\"(\"abcdef\",3,5) ----> ",image("[:]"("abcdef",3,5)) | "none") write("\"[]\"(&lcase,3) ----> ",image("[]"(&lcase,3)) | "none") end procedure p4() write("image(proc(\"^\",1)) ----> ",image(image(proc("^",1))) | "none") write("image(proc(\"^\",2)) ----> ",image(image(proc("^",2))) | "none") write("proc(\"+\",2)(3,4) ----> ",image(proc("+",2)(3,4)) | "none") write("proc(proc)(\"write\") ----> ",image(proc(proc)("write")) | "none") write("proc(\"+\") ----> ",image(proc("+")) | "none") write("?10 ----> ",image(?10) | "none") write("?10 ----> ",image(?10) | "none") write("?10 ----> ",image(?10) | "none") write("?20 ----> ",image(?20) | "none") write("?[1,2,3,4] ----> ",image(?[1,2,3,4]) | "none") write("?[1,2,3,4] ----> ",image(?[1,2,3,4]) | "none") end procedure p5() write("x := array(1,2,3,4,5,6,7) ----> ",image(x := array(1,2,3,4,5,6,7)) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("?x ----> ",image(?x) | "none") write("every 1 to 10 do write(?10) ----> ",image(every 1 to 10 do write(?10)) | "none") write("every 1 to 10 do write(?[1,2,3,4,5,6,7,8,9,10]) ----> ",image(every 1 to 10 do write(?[1,2,3,4,5,6,7,8,9,10])) | "none") end procedure p6() write("every 1 to 10 do write(?\"abcdef\") ----> ",image(every 1 to 10 do write(?"abcdef")) | "none") write("x := array(1,2,3,4,5,6,7) ----> ",image(x := array(1,2,3,4,5,6,7)) | "none") write("every 1 to 10 do write(?x) ----> ",image(every 1 to 10 do write(?x)) | "none") write("(1,2,3,4,5) ----> ",image((1,2,3,4,5)) | "none") write("every write((1 to 5)(1,2,3,4,5)) ----> ",image(every write((1 to 5)(1,2,3,4,5))) | "none") write("0(1,2) ----> ",image(0(1,2)) | "none") end procedure p7() write("1(1) ----> ",image(1(1)) | "none") write("2(1) ----> ",image(2(1)) | "none") write("(-1)(1,2,3) ----> ",image((-1)(1,2,3)) | "none") write("3(1,2,3,&fail) ----> ",image(3(1,2,3,&fail)) | "none") write("every write(2(1 to 5,!\"abc\",1 to 2)) ----> ",image(every write(2(1 to 5,!"abc",1 to 2))) | "none") write("x := 1 ----> ",image(x := 1) | "none") write("y := 2 ----> ",image(y := 2) | "none") write("(x := y) & &fail ----> ",image((x := y) & &fail) | "none") write("every write(!\"abcdef\") ----> ",image(every write(!"abcdef")) | "none") write("every write(![1,2,3,4,5]) ----> ",image(every write(![1,2,3,4,5])) | "none") write("every write(!![1,2,3,4,5]) ----> ",image(every write(!![1,2,3,4,5])) | "none") end procedure p8() write("every write(!![1,\"ab\",[1,2,3],34]) ----> ",image(every write(!![1,"ab",[1,2,3],34])) | "none") write("every write(!([1,\"ab\",[1,2,3],34][1 to 4])) ----> ",image(every write(!([1,"ab",[1,2,3],34][1 to 4]))) | "none") write("x := array(1,2,3,4,5) ----> ",image(x := array(1,2,3,4,5)) | "none") write("every write(!x) ----> ",image(every write(!x)) | "none") write("x := 1 ----> ",image(x := 1) | "none") write("y := 2 ----> ",image(y := 2) | "none") write("x <-> y ----> ",image(x <-> y) | "none") write("y <-> x ----> ",image(y <-> x) | "none") write("(x <-> y) & &fail ----> ",image((x <-> y) & &fail) | "none") write("x ----> ",image(x) | "none") write("y ----> ",image(y) | "none") end procedure p9() write("*\"\" ----> ",image(*"") | "none") write("*'' ----> ",image(*'') | "none") write("*[] ----> ",image(*[]) | "none") write("*table() ----> ",image(*table()) | "none") write("*30 ----> ",image(*30) | "none") write("!\"abc\" ----> ",image(!"abc") | "none") write("![1,2,3] ----> ",image(![1,2,3]) | "none") write("!&lcase ----> ",image(!&lcase) | "none") write("!30 ----> ",image(!30) | "none") write("!table() ----> ",image(!table()) | "none") write("?\"abc\" ----> ",image(?"abc") | "none") end procedure p10() write("?&lcase ----> ",image(?&lcase) | "none") write("?[1,2,3] ----> ",image(?[1,2,3]) | "none") write("?table() ----> ",image(?table()) | "none") write("?30 ----> ",image(?30) | "none") write(".x ----> ",image(.x) | "none") write(".\"abc\" ----> ",image(."abc") | "none") write(".[] ----> ",image(.[]) | "none") write(".main ----> ",image(.main) | "none") write("/main ----> ",image(/main) | "none") write("/\"abc\" ----> ",image(/"abc") | "none") end procedure p11() write("/&null ----> ",image(/&null) | "none") write("/[] ----> ",image(/[]) | "none") write("/&lcase ----> ",image(/&lcase) | "none") write("\\main ----> ",image(\main) | "none") write("\\\"abc\" ----> ",image(\"abc") | "none") write("\\x ----> ",image(\x) | "none") write("\\[] ----> ",image(\[]) | "none") write("\\&null ----> ",image(\&null) | "none") write("1 | 2 | 3 ----> ",image(1 | 2 | 3) | "none") write("|(1 to 10) ----> ",image(|(1 to 10)) | "none") write("||(1 to 10) ----> ",image(||(1 to 10)) | "none") end procedure p12() write("|||(1 to 10) ----> ",image(|||(1 to 10)) | "none") write("||||(1 to 10) ----> ",image(||||(1 to 10)) | "none") write("|||||(1 to 10) ----> ",image(|||||(1 to 10)) | "none") write("|||||||(1 to 10) ----> ",image(|||||||(1 to 10)) | "none") write("2 \\ 2 ----> ",image(2 \ 2) | "none") write("while 1 do break ----> ",image(while 1 do break) | "none") write("while 1 do break \"hello\" ----> ",image(while 1 do break "hello") | "none") write("while break ----> ",image(while break) | "none") write("case 1 of {2:3; \"1\":4; 1: 4 to 10; default: \"whoa\"} ----> ",image(case 1 of {2:3; "1":4; 1: 4 to 10; default: "whoa"}) | "none") write("not 1 ----> ",image(not 1) | "none") write("not \\&null ----> ",image(not \&null) | "none") end procedure p13() write("repeat break ----> ",image(repeat break) | "none") write("until 1 do 2 ----> ",image(until 1 do 2) | "none") write("if 1 then 2 else 3 ----> ",image(if 1 then 2 else 3) | "none") write("every write(if 1 then 1 to 10 else 5) ----> ",image(every write(if 1 then 1 to 10 else 5)) | "none") write("every write(if 1 = 0 then 1 to 10 else 10 to 1 by -1) ----> ",image(every write(if 1 = 0 then 1 to 10 else 10 to 1 by -1)) | "none") write("if 1 then 2 ----> ",image(if 1 then 2) | "none") write("if 1 = 0 then 2 ----> ",image(if 1 = 0 then 2) | "none") write("x := 1 ----> ",image(x := 1) | "none") write("y := 2 ----> ",image(y := 2) | "none") write("z := 3 ----> ",image(z := 3) | "none") write("x :=: y ----> ",image(x :=: y) | "none") end procedure p14() write("y :=: x ----> ",image(y :=: x) | "none") write("x ----> ",image(x) | "none") write("y ----> ",image(y) | "none") write("z ----> ",image(z) | "none") write("x :=: y :=: z ----> ",image(x :=: y :=: z) | "none")  @~8 VMS.BCKx &[V9.TESTS.GENERAL]EVALX.ICN;1}write("x ----> ",image(x) | "none") write("y ----> ",image(y) | "none") write("z ----> ",image(z) | "none") write("x := 1 ----> ",image(x := 1) | "none") write("y := 2 ----> ",image(y := 2) | "none") write("z := 3 ----> ",image(z := 3) | "none") end procedure p15() write("x <-> y ----> ",image(x <-> y) | "none") write("y <-> x ----> ",image(y <-> x) | "none") write("x ----> ",image(x) | "none") write("y ----> ",image(y) | "none") write("z ----> ",image(z) | "none") write("x <-> y :=: z ----> ",image(x <-> y :=: z) | "none") write("x ----> ",image(x) | "none") write("y ----> ",image(y) | "none") write("z ----> ",image(z) | "none") write("1 & 2 & 3 & 4 ----> ",image(1 & 2 & 3 & 4) | "none") write("(1 & 2 & 3 & x) := 3 ----> ",image((1 & 2 & 3 & x) := 3) | "none") end procedure p16() write("x ----> ",image(x) | "none") write("x := 1 ----> ",image(x := 1) | "none") write("y := 2 ----> ",image(y := 2) | "none") write("(x <- y) & &fail ----> ",image((x <- y) & &fail) | "none") write("x ----> ",image(x) | "none") write("y ----> ",image(y) | "none") end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() p10() p11() p12() p13() p14() p15() p16() end *[V9.TESTS.GENERAL]FNCS.DAT;1+,./ 4-&0123KPWO56X>7<>89Jj$GHJ*[V9.TESTS.GENERAL]FNCS.ICN;1+,r ./ 4+-&0123KPWO5667X789Jj$GHJrecord array(a,b,c,d,e,f,g) global F, f global w, t procedure p1() write(" ----> ",image() | "none") write("copy(1) ----> ",image(copy(1)) | "none") write("copy(\"abc\") ----> ",image(copy("abc")) | "none") write("copy('aabbcc') ----> ",image(copy('aabbcc')) | "none") write("copy(main) ----> ",image(copy(main)) | "none") write("copy([1,2,3]) ----> ",image(copy([1,2,3])) | "none") write("copy(table(0)) ----> ",image(copy(table(0))) | "none") write("copy() ----> ",image(copy()) | "none") write("copy(&input) ----> ",image(copy(&input)) | "none") write("w := copy(write) ----> ",image(w := copy(write)) | "none") end procedure p2() write("w(image(w)) ----> ",image(w(image(w))) | "none") write("copy(array()) ----> ",image(copy(array())) | "none") write("copy := copy(copy) ----> ",image(copy := copy(copy)) | "none") write("x := copy(array) ----> ",image(x := copy(array)) | "none") write("x := x(1,2,3,4,5,6,7) ----> ",image(x := x(1,2,3,4,5,6,7)) | "none") write("x[-4] ----> ",image(x[-4]) | "none") write("v := copy(c) ----> ",image(v := copy(c)) | "none") write("x := repl(\"123\",4) ----> ",image(x := repl("123",4)) | "none") write("t := table() ----> ",image(t := table()) | "none") write("every i := 1 to 100 do t[i] := i ----> ",image(every i := 1 to 100 do t[i] := i) | "none") end procedure p3() write("x := sort(t) ----> ",image(x := sort(t)) | "none") write("every write((!x)[2]) ----> ",image(every write((!x)[2])) | "none") write("every write(center(\"abcdef\",1 to 20,\" \" | \"0\" | \"=-\")) ----> ",image(every write(center("abcdef",1 to 20," " | "0" | "=-"))) | "none") write("every write(left(\"abcdef\",1 to 20,\" \" | \"0\" | \"=-\")) ----> ",image(every write(left("abcdef",1 to 20," " | "0" | "=-"))) | "none") write("every write(right(\"abcdef\",1 to 20,\" \" | \"0\" | \"=-\")) ----> ",image(every write(right("abcdef",1 to 20," " | "0" | "=-"))) | "none") write("center(\"\",20,repl(\"x.\",30)) ----> ",image(center("",20,repl("x.",30))) | "none") write("left(\"\",20,repl(\"x.\",30)) ----> ",image(left("",20,repl("x.",30))) | "none") write("right(\"\",20,repl(\"x.\",30)) ----> ",image(right("",20,repl("x.",30))) | "none") write("every write(repl(\"a\" | \"ab\" | \"ba\",1 to 5)) ----> ",image(every write(repl("a" | "ab" | "ba",1 to 5))) | "none") write("repl(\"\",0) ----> ",image(repl("",0)) | "none") write("repl(&cset,0) ----> ",image(repl(&cset,0)) | "none") end procedure p4() write("trim(&lcase) ----> ",image(trim(&lcase)) | "none") write("trim(&lcase,&lcase) ----> ",image(trim(&lcase,&lcase)) | "none") write("image(2) ----> ",image(image(2)) | "none") write("image('cab') ----> ",image(image('cab')) | "none") write("image(&lcase) ----> ",image(image(&lcase)) | "none") write("image('abcdefghijklmnopqrstuvwxyz') ----> ",image(image('abcdefghijklmnopqrstuvwxyz')) | "none") write("image(&input) ----> ",image(image(&input)) | "none") end procedure p5() write("image() ----> ",image(image()) | "none") write("image(&null) ----> ",image(image(&null)) | "none") write("image([1,2,3]) ----> ",image(image([1,2,3])) | "none") write("image([]) ----> ",image(image([])) | "none") write("image([,]) ----> ",image(image([,])) | "none") write("image(table()) ----> ",image(image(table())) | "none") write("image(table(3)) ----> ",image(image(table(3))) | "none") write("image(list(0)) ----> ",image(image(list(0))) | "none") write("image(set()) ----> ",image(image(set())) | "none") write("image(set([1,2,3,3,3,3,3,4])) ----> ",image(image(set([1,2,3,3,3,3,3,4]))) | "none") write("image(repl) ----> ",image(image(repl)) | "none") end procedure p6() write("image(main) ----> ",image(image(main)) | "none") write("image(repl(&lcase,10)) ----> ",image(image(repl(&lcase,10))) | "none") write("image(array) ----> ",image(image(array)) | "none") write("image(a) ----> ",image(image(a)) | "none") write("image(array) ----> ",image(image(array)) | "none") write("image(image) ----> ",image(image(image)) | "none") write("string(2) ----> ",image(string(2)) | "none") write("string(\"2\") ----> ",image(string("2")) | "none") write("string(\" 2\") ----> ",image(string(" 2")) | "none") end procedure p7() write("string(\"2 \") ----> ",image(string("2 ")) | "none") write("string(\"+2\") ----> ",image(string("+2")) | "none") write("string(\"-2\") ----> ",image(string("-2")) | "none") write("string(\"- 2\") ----> ",image(string("- 2")) | "none") write("string(\" - 2 \") ----> ",image(string(" - 2 ")) | "none") write("string(\"\") ----> ",image(string("")) | "none") write("string(\"--2\") ----> ",image(string("--2")) | "none") write("string(\" \") ----> ",image(string(" ")) | "none") write("string(\"-\") ----> ",image(string("-")) | "none") write("string(\"+\") ----> ",image(string("+")) | "none") end procedure p8() write("string(\"22222222222222222222222222222222222222222222222222222222222\") ----> ",image(string("22222222222222222222222222222222222222222222222222222222222")) | "none") write("string(\"7r4\") ----> ",image(string("7r4")) | "none") write("string(\"4r7\") ----> ",image(string("4r7")) | "none") write("string(\"4r 7\") ----> ",image(string("4r 7")) | "none") write("string(\"7r 4\") ----> ",image(string("7r 4")) | "none") write("string(\"16rff\") ----> ",image(string("16rff")) | "none") end procedure p9() write("string(\"36rcat\") ----> ",image(string("36rcat")) | "none") write("string(\"36Rcat\") ----> ",image(string("36Rcat"))  W2 VMS.BCKr &[V9.TESTS.GENERAL]FNCS.ICN;1S | "none") write("string(\"36rCAT\") ----> ",image(string("36rCAT")) | "none") write("string(\"1r1\") ----> ",image(string("1r1")) | "none") write("string(\"2r0\") ----> ",image(string("2r0")) | "none") write("type(0) ----> ",image(type(0)) | "none") write("type(\"abc\") ----> ",image(type("abc")) | "none") write("type('aba') ----> ",image(type('aba')) | "none") write("type() ----> ",image(type()) | "none") write("type(&null) ----> ",image(type(&null)) | "none") end procedure p10() write("type([]) ----> ",image(type([])) | "none") write("type(table()) ----> ",image(type(table())) | "none") write("type(main) ----> ",image(type(main)) | "none") write("type(write) ----> ",image(type(write)) | "none") write("type(array()) ----> ",image(type(array())) | "none") write("type(array) ----> ",image(type(array)) | "none") write("type(f) ----> ",image(type(f)) | "none") write("cset(2) ----> ",image(cset(2)) | "none") end procedure p11() write("cset(\"2\") ----> ",image(cset("2")) | "none") write("cset(\" 2\") ----> ",image(cset(" 2")) | "none") write("cset(\"2 \") ----> ",image(cset("2 ")) | "none") write("cset(\"+2\") ----> ",image(cset("+2")) | "none") write("cset(\"-2\") ----> ",image(cset("-2")) | "none") write("cset(\"- 2\") ----> ",image(cset("- 2")) | "none") write("cset(\" - 2 \") ----> ",image(cset(" - 2 ")) | "none") write("cset(\"\") ----> ",image(cset("")) | "none") write("cset(\"--2\") ----> ",image(cset("--2")) | "none") write("cset(\" \") ----> ",image(cset(" ")) | "none") write("cset(\"-\") ----> ",image(cset("-")) | "none") end procedure p12() write("cset(\"+\") ----> ",image(cset("+")) | "none") write("cset(\"22222222222222222222222222222222222222222222222222222222222\") ----> ",image(cset("22222222222222222222222222222222222222222222222222222222222")) | "none") write("cset(\"7r4\") ----> ",image(cset("7r4")) | "none") write("cset(\"4r7\") ----> ",image(cset("4r7")) | "none") write("cset(\"4r 7\") ----> ",image(cset("4r 7")) | "none") end procedure p13() write("cset(\"7r 4\") ----> ",image(cset("7r 4")) | "none") write("cset(\"16rff\") ----> ",image(cset("16rff")) | "none") write("cset(\"36rcat\") ----> ",image(cset("36rcat")) | "none") write("cset(\"36Rcat\") ----> ",image(cset("36Rcat")) | "none") write("cset(\"36rCAT\") ----> ",image(cset("36rCAT")) | "none") write("cset(\"1r1\") ----> ",image(cset("1r1")) | "none") write("cset(\"2r0\") ----> ",image(cset("2r0")) | "none") write("every write(seq()) \\ 10 ----> ",image(every write(seq()) \ 10) | "none") write("every write(seq(2)) \\ 10 ----> ",image(every write(seq(2)) \ 10) | "none") write("every write(seq(-10)) \\ 10 ----> ",image(every write(seq(-10)) \ 10) | "none") write("every write(seq(,3)) \\ 10 ----> ",image(every write(seq(,3)) \ 10) | "none") end procedure p14() end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() p10() p11() p12() p13() p14() end procedure wf (v) writes(left(v,5)," ") end r*[V9.TESTS.GENERAL]FNCS1.DAT;1+,./ 4-&0123KPWO56 eC7c8C89Jj$GHJ*[V9.TESTS.GENERAL]FNCS1.ICN;1+, ./ 4-&0123KPWO56B7C89Jj$GHJ record array(a,b,c,d,e,f,g) global F, f global w, t procedure main() q1() q2() q3() q4() q5() end procedure q1() write(" ----> ",image() | "none") write("f := open(\"foo.baz\",\"w\") ----> ",image(f := open("foo.baz","w")) | "none") write("write(f,\"hello world\") ----> ",image(write(f,"hello world")) | "none") write("close(f) ----> ",image(close(f)) | "none") write("F := open(\"gc1.icn\") ----> ",image(F := open("gc1.icn")) | "none") write("every write(reverse(!F)) ----> ",image(every write(reverse(!F))) | "none") write("close(F) ----> ",image(close(F)) | "none") write("F := open(\"gc1.icn\") ----> ",image(F := open("gc1.icn")) | "none") write("every write(map(!F)) ----> ",image(every write(map(!F))) | "none") write("close(F) ----> ",image(close(F)) | "none") write("F := open(\"gc1.icn\") ----> ",image(F := open("gc1.icn")) | "none") end procedure q2() write("every write(map(!F,&cset || \"aeiou\",&cset || \"-----\")) ----> ",image(every write(map(!F,&cset || "aeiou",&cset || "-----"))) | "none") write("close(F) ----> ",image(close(F)) | "none") write("F := open(\"gc1.icn\") ----> ",image(F := open("gc1.icn")) | "none") write("every write(map(!F,&cset || \" \",&cset || \"aeiou\")) ----> ",image(every write(map(!F,&cset || " ",&cset || "aeiou"))) | "none") write("close(F) ----> ",image(close(F)) | "none") write("f := open(\"gc1.icn\") ----> ",image(f := open("gc1.icn")) | "none") write("while writes(reads(f)) ----> ",image(while writes(reads(f))) | "none") write("close(f) ----> ",image(close(f)) | "none") write("f := open(\"gc1.icn\") ----> ",image(f := open("gc1.icn")) | "none") write("while writes(reads(f,10)) ----> ",image(while writes(reads(f,10))) | "none") write("f := open(\"gc1.icn\") ----> ",image(f := open("gc1.icn")) | "none") end procedure q3() write("while write(read(f)) ----> ",image(while write(read(f))) | "none") write("close(f) ----> ",image(close(f)) | "none") end procedure q4() T := table() L := list() every T[1 to 20] := 1 every put (L, key(T)) every write (!sort(L)) end procedure q5() every i := 1 to 25 do { v := 0.25 * i wf (v) if (v <= 1.0) then every wf ((acos | asin) (v)) else every wf ("" | "") every wf (atan(v) | atan(v,3)) every wf ((cos | sin | tan) (v)) every wf ((sqrt | exp | log) (v)) wf (log(v,3)) write () } end procedure wf (v) writes(left(v,5)," ") end *[V9.TESTS.GENERAL]GC1.DAT;1+,./ 4-&0123KPWO56 U;7`d;89Jj$GHJ*[V9.TESTS.GENERAL]GC1.ICN;1+,w./ 4-&0123KPWO5687`989Jj$GHJprocedure main() every 1 to 100 do { write(&collections) every 1 to 100 do list(1000) } write("collecting ...") collect() every s := repl("x",1 to 1000) do { cset(string(&lcase)) t := table() set([s]) s[2 : 5] } end  #XN VMS.BCK &9.TESTS.GENERAL]GC2.DAT;11X*[V9.TESTS.GENERAL]GC2.DAT;1+, ./ 4-&0123KPWO56V$>7`5>89Jj$GHJ*[V9.TESTS.GENERAL]GC2.ICN;1+,z. / 4 -&0123KPWO 56 97989Jj$GHJglobal defs, ifile, in, limit, tswitch, prompt record nonterm(name) record charset(chars) record query(name) procedure main(x) local line, plist plist := [define,generate,grammar,source,comment,prompter,error] defs := table() defs["lb"] := [["<"]] defs["rb"] := [[">"]] defs["vb"] := [["|"]] defs["nl"] := [["\n"]] defs[""] := [[""]] defs["&lcase"] := [[charset(&lcase)]] defs["&ucase"] := [[charset(&ucase)]] defs["&digit"] := [[charset('0123456789')]] i := 0 while i < *x do { s := x[i +:= 1] | break case s of { "-t": tswitch := 1 "-l": limit := integer(x[i +:= 1]) | stop("usage: [-t] [-l n]") default: stop("usage: [-t] [-l n]") } } ifile := [&input] prompt := "" test := ["::=1|2|3","10","->","::=||","5", "::=","100","100"] every line := !test do { (!plist)(line) collect() every write(&collections) write("----------") } end procedure comment(line) if line[1] == "#" then return end procedure define(line) return line ? defs[(="<",tab(find(">::=")))] := (move(4),alts(tab(0))) end procedure defnon(sym) if sym ? { ="'" & chars := cset(tab(-1)) & ="'" } then return charset(chars) else if sym ? { ="?" & name := tab(0) } then return query(name) else return nonterm(sym) end procedure error(line) write("*** erroneous line: ",line) return end procedure gener(goal) local pending, genstr, symbol repeat { pending := [nonterm(goal)] genstr := "" while symbol := get(pending) do { if \tswitch then write(genstr,symimage(symbol),listimage(pending)) case type(symbol) of { "string": genstr ||:= symbol "charset": genstr ||:= ?symbol.chars "query": { writes("*** supply string for ",symbol.name," ") genstr ||:= read() | { write("*** no value for query to ",symbol.name) suspend genstr break next } } "nonterm": { pending := ?\defs[symbol.name] ||| pending | { write("*** undefined nonterminal: <",symbol.name,">") suspend genstr break next } if *pending > \limit then { write("*** excessive symbols remaining") suspend genstr break next } } } } suspend genstr } end procedure generate(line) local goal, count if line ? { ="<" & goal := tab(upto('>')) \ 1 & move(1) & count := (pos(0) & 1) | integer(tab(0)) } then { every write(gener(goal)) \ count return } else fail end procedure getrhs(a) local rhs rhs := "" every rhs ||:= sform(!a) || "|" return rhs[1:-1] end procedure grammar(line) local file, out if line ? { name := tab(find("->")) & move(2) & file := tab(0) & out := if *file = 0 then &output else { open(file,"w") | { write("*** cannot open ",file) fail } } } then { (*name = 0) | (name[1] == "<" & name[-1] == ">") | fail pwrite(name,out) if *file ~= 0 then close(out) return } else fail end procedure listimage(a) local s, x s := "" every x := !a do s ||:= symimage(x) return s end procedure alts(defn) local alist alist := [] defn ? while put(alist,syms(tab(many(~'|')))) do move(1) return alist end procedure prompter(line) if line[1] == "=" then { prompt := line[2:0] return } end procedure pwrite(name,ofile) local nt, a static builtin initial builtin := ["lb","rb","vb","nl","","&lcase","&ucase","&digit"] if *name = 0 then { a := sort(defs) every nt := !a do { if nt[1] == !builtin then next write(ofile,"<",nt[1],">::=",getrhs(nt[2])) } } else write(ofile,name,"::=",getrhs(\defs[name[2:-1]])) | write("*** undefined nonterminal: ",name) end procedure sform(alt) local s, x s := "" every x := !alt do s ||:= case type(x) of { "string": x "nonterm": "<" || x.name || ">" "charset": "<'" || x.chars || "'>" } return s end procedure source(line) return line ? (="@" & push(ifile,in) & { in := open(file := tab(0)) | { write("*** cannot open ",file) fail } }) end procedure symimage(x) return case type(x) of { "string": x "nonterm": "<" || x.name || ">" "charset": "<'" || x.chars || "'>" } end procedure syms(alt) local slist slist := [] alt ? while put(slist,tab(many(~'<')) | defnon(2(="<",tab(upto('>')),move(1)))) return slist end *[V9.TESTS.GENERAL]GENER.DAT;1+,./ 4-&0123KPWO56 ?7b?89Jj$GHJ*[V9.TESTS.GENERAL]GENER.ICN;1+, ./ 44-&0123KPWO56@7 H@89Jj$GHJ## gener.icn -- test generation in parallel with inserts/deletes # # This is a torture test for the set generation code. Items are inserted # in or deleted from the set while the set is being generated. We check # every item not inserted or deleted is generated exactly once, and every # other item is generated no more than once. # # If every line of output says '[ok]', the test has passed. "gener -v" # gives a little more information; in this case, the output is sensitive # to the runtime system's configuration parameters. global verbose procedure main (args) if args[1] == "-v" then verbose := 1 every tdel (41 | 619 | 991, 3 | 11 | 23) every tins (40 | 103 | 233, 239 | 419 | 503, 3 | 11 | 23) write ("[done]") end ## tins (init, limit, n) -- test insertions # # The initial set consists of the integers 1 through . # Then the set is generated, and more integers are added # for each element generated until the set reaches # entries. procedure tins (init, limit, n) writes ("test insert:", right(init,6), ",", right(limit,5), ",", right(n,3)) s := set() every insert (s, 1 to init) s1 := copy (s) l := list() every put (l, e := !s) do if *s < limit then every 1 to n do insert (s, *s + 1) check (s1, s, l) end ## tdel (limit, n) -- test deletions # # The set initially contains the first integers. # Then, for each one generated, n elements are deleted. procedu <& VMS.BCK &[V9.TESTS.GENERAL]GENER.ICN;1re tdel (limit, n) writes ("test delete:", right(limit,6), ",", right(n,5)) s := set() every insert (s, 1 to limit) s2 := copy(s) l := list() k := 0 every put (l, !s) do every 1 to n do delete (s, k +:= 1) check (s, s2, l) end ## check (s1, s2, l) -- check results of generation # # s1 small set (before insertion / after deletion) # s2 large set (after insertion / before deletion) # l generated list procedure check (s1, s2, l) sg := set(l) if \verbose then writes (" \tsizes ",right(*s1,5)," <=",right(*sg,5)," <=",right(*s2,5)) ok := "\t[ok]" if *(s := (s1 -- sg)) > 0 then { writes ("\n not generated:") every writes (" ", !sort(s)) ok := &null } if *(s := (sg -- s2)) > 0 then { writes ("\n unknown values generated:") every writes (" ", !sort(s)) ok := &null } if *sg < *l then { writes("\n generated twice:") every e := !l do delete(sg,member(sg,e)) | writes (" ", e) ok := &null } write (ok) end *[V9.TESTS.GENERAL]HELLOC.DAT;1+,Z./ 4-&0123KPWO56g27pJ289Jj$GHJ*[V9.TESTS.GENERAL]HELLOC.ICN;1+,[./ 4R-&0123KPWO56270289Jj$GHJprocedure main() write(&version) write(&host) every write(&features) end *[V9.TESTS.GENERAL]HELLOX.DAT;1+,./ 4-&0123KPWO56rB7ۅB89Jj$GHJ*[V9.TESTS.GENERAL]HELLOX.ICN;1+,./ 4R-&0123KPWO564=7g<=89Jj$GHJprocedure main() write(&version) write(&host) every write(&features) end *[V9.TESTS.GENERAL]ICONC.LST;1+,\./ 4-&0123KPWO56P27)289Jj$GHJaugment btrees checkc checkfpc ck collate concord fncs fncs1 gc1 gc2 gener helloc mem01c mem02 mffsol mindfa numeric others prefix prepro recent recogn scan string struct *[V9.TESTS.GENERAL]ICONT.LST;1+,./ 4-&0123KPWO56<7 =89Jj$GHJaugment btrees checkx checkfpx ck collate concord fncs fncs1 gc1 gc2 gener hellox mem01x mem02 mffsol mindfa numeric others prefix prepro recent recogn scan string struct proto tracer var endetab errors evalx *[V9.TESTS.GENERAL]INVOKE.LST;1+,]./ 4-&0123KPWO56PQ37P389Jj$GHJevalx *[V9.TESTS.GENERAL]LARGE.DAT;1+,./ 4-&0123KPWO56 (4D7wFD89Jj$GHJ*[V9.TESTS.GENERAL]LARGE.ICN;1+,./ 4-&0123KPWO56-A7 KA89Jj$GHJinvocable "+", "-", "*", "/", "%", "iand", "ior", "ixor", "<", "=" , "^" invocable "ishift" procedure main () if not(&features == "large integers") then stop("large integers not supported") big := 111111111111111111111 med1 := "2222222222" med2 := "3333333333" small := 4 every optest ("+" | "-" | "*" | "/" | "%" |"iand"|"ior"|"ixor"|"<"|"=", big | -big | small | -small, big | -big | small | -small) every optest ("+" | "-" | "*" | "/" | "%" |"iand"|"ior"|"ixor"|"<"|"=", big | med1 | -med1, med1 | med2 | -med2) every optest ("^", big | -big | small | -small, 2 | 5) every optest ("^", 2 | 3, 10 | 30 ) every optest ("ishift", big |-big | med1 | -med1 | small, 1 | 8 | -1 | -39) &trace := -1 every i := 10 | 30 | 70 | 100 do { write(2 ^ i) write(2 ^ i || ":" || image(2 ^ i)) foo(2 ^ i) } end procedure optest (op, a, b) write (a, " ", op, " ", b, " = ", op(a,b)|"none") end procedure foo(x) end *[V9.TESTS.GENERAL]LARGE.LST;1+,`./ 4 -&0123KPWO56!k37389Jj$GHJ 4[ VMS.BCK`&[V9.TESTS.GENERAL]LARGE.LST;1over large *[V9.TESTS.GENERAL]LOCAL.DIR;1+,' ./ 4-&0123 KPWO56%7G%89Ҋ;vGHJI*[V9.TESTS.GENERAL]MEM01C.DAT;1+,^./ 4-&0123KPWO56p\ 372389Jj$GHJ*[V9.TESTS.GENERAL]MEM01C.ICN;1+,_./ 4-&0123KPWO56PZ=37c389Jj$GHJprocedure main() if (&features == "fixed regions") & not(&features == "multiple regions") then { write("This is a fixed-regions implementation without multiple-region") write("support.\n") write("The error message from this test should be different from the") write("standard one, where regions can expand. Specifically, this") write("test should show inadequate space rather than value out of") write("range. This is to be expected; do not worry about it.") } write(image(every repl(repl("xxx",50),write(1 to 100))) | "failed") write(image(repl(repl(repl(repl(&cset,100),100),100),100)) | "failed") end t*[V9.TESTS.GENERAL]MEM01X.DAT;1+, ./ 4-&0123KPWO56AB7B89Jj$GHJ*[V9.TESTS.GENERAL]MEM01X.ICN;1+,y./ 4-&0123KPWO5697989Jj$GHJprocedure main() if (&features == "fixed regions") & not(&features == "multiple regions") then { write("This is a fixed-regions implementation without multiple-region") write("support.\n") write("The error message from this test should be different from the") write("standard one, where regions can expand. Specifically, this") write("test should show inadequate space rather than value out of") write("range. This is to be expected; do not worry about it.") } write(image(every repl(repl("xxx",50),write(1 to 100))) | "failed") write(image(repl(repl(repl(repl(&cset,100),100),100),100)) | "failed") end t*[V9.TESTS.GENERAL]MEM02.DAT;1+, ./ 4-&0123KPWO569;>7L>89Jj$GHJ*[V9.TESTS.GENERAL]MEM02.ICN;1+,{./ 4-&0123KPWO56`:7:89Jj$GHJ# The output of this test will vary depending on memory # configuration. procedure main() collect(0) write(image(x := []) | "failed") every push(x,1 to 1000) write(image(x)) every push(x,1 to 10000) write(image(x)) every collect(0 to 3) write("\ncollections:") every write(&collections) write("\nregions:") every write(®ions) write("\nstorage:") every write(&storage) write("\nallocated:") every write(&allocated) end *[V9.TESTS.GENERAL]MFFSOL.DAT;1+, ./ 4|-&0123KPWO56;?7d?89Jj$GHJ[ constructed by hand ] ABCD EFGH IJKL MNOP AEIM BFJN CGKO DHLP AHKN BGLM CFIP DEJO AFLO BEKP CHJM DGIN AGJP BHIO CELN DFKM *[V9.TESTS.GENERAL]MFFSOL.ICN;1+,d. / 4 -&0123KPWO 56.47T489Jj$GHJ## mffsol.icn -- show solution graphically in mff format # # input is assumed to be one line per round # each player is represented by a different ASCII character # matches are broken by whitespace global range # vertical coordinate range global red, green, blue # current color procedure main (args) range := 1000 aset := cset(&ascii ? (tab(upto(' ')) & move(1) & move(94))) pset := '' # set of chars in use as players plist := "" # same, in order of appearance rounds := [] # list of rounds (one text line each) nmatches := 0 if *args > 0 then f := open(args[1]) | stop("can't open ",args[1]) else f := &input # read input and save in memory # (this first pass just accumulates a list of players) while line := read(f) do if line[1] ~== "[" & upto(aset,line) then { put(rounds,line) line ? while tab(upto(aset)) do { c := move(1) if not any(pset,c) then { # if first appearance of new player pset ++:= c # add to set of players p  VMS.BCKd&[V9.TESTS.GENERAL]MFFSOL.ICN;1   plist ||:= c # add at end of list } } } # if all the characters are letters, arrange alphabetically if *(plist -- &ucase -- &lcase) = 0 then plist := string(cset(plist)) # calculate a position (angle) for each player, and draw the clock face write("1 metafile ", pct(125), " ", pct(100), " 0 0 0 init") angle := table() dtheta := 2 * 3.14159 / *pset theta := 3.14159 / 2 - dtheta / 2 every c := !plist do { angle[c] := theta cart(47, theta, -1, -1) write("(",c,") text") theta -:= dtheta } # draw each round in a different color n := 1 red := 250 green := 255 blue := 0 every r := !rounds do { write(red, " ", green, " ", blue, " color") x := pct(110) y := pct(100 - 4 * n) if y > 0 then write(x, " ", y, " (", n, ") text") r ? while tab(upto(aset)) do { match := tab(many(aset)) cart (45, angle[match[1]], 0, 0); writes ("begin ") cart (45, angle[match[2]], 0, 0); writes ("line ") cart (45, angle[match[3]], 0, 0); writes ("line ") cart (45, angle[match[4]], 0, 0); writes ("line ") cart (45, angle[match[1]], 0, 0); write ("line") cart (45, angle[match[3]], 0, 0); writes ("line stroke ") cart (45, angle[match[2]], 0, 0); writes ("begin ") cart (45, angle[match[4]], 0, 0); write ("line stroke") nmatches +:= 1 } n +:= 1 newcolor() } # write some final statistics write ("255 255 255 color") write ("0 0 (", *pset," players, ",*rounds," rounds, ",nmatches," matches) text") end # given polar coordinates (radius,angle,dx,dy), write cartesian equivalents # offset by (dx,dy) procedure cart (r,a,dx,dy) x := pct (50 + r * cos(a) + dy) y := pct (50 + r * sin(a) + dy) writes (x," ",y," ") end # return a string representing a given percentage of the coordinate range procedure pct (n) return string(integer(n * range / 100)) end # set new color coordinates. iterate until acceptable. procedure newcolor() repeat { red := (red + 103) % 256 green := (green + 211) % 256 blue := (blue + 71) % 256 lum := 0.30 * red + 0.59 * green + 0.11 * blue if lum > 96 then return } end *[V9.TESTS.GENERAL]MINDFA.DAT;1+, ./ 40-&0123KPWO56PK<7Nh<89Jj$GHJabcdefgh 01 d a b a a c d b d a d f g e f g g d *[V9.TESTS.GENERAL]MINDFA.ICN;1+,. / 4 #-&0123KPWO 56@;7@;89Jj$GHJ### mindfa -- minimize a DFA record dfa(Q,S,d,q0,F) # a DFA procedure main() x := getdfa() every 1 to 10 do showdfa("Reduced",minimize(showdfa("Original",x))) end ## - getdfa() -- accept a dfa from input, return it ## procedure getdfa() local Q,S,d,q0,F local q,a Q := readset("Enter states (1 character names): ") S := readset("Enter input alphabet: ") F := readset("Enter Final states (subset of states): ") writes("What is the start state? ") q0 := read() d := table() every q := !Q & a := !S do { writes("enter delta(",q,",",a,") = ") d[q||":"||a] := read() } return dfa(Q,S,d,q0,F) end ## readset(s) - get a set # procedure readset(s) local t1 writes(s) t1 := [] every put(t1,!cset(read())) # the cset removes duplicates return t1 end ## showdfa(msg,D) -- show a dfa # procedure showdfa(msg,D) local q,a every 1 to 3 do write() write(msg," Deterministic Finite Automaton is:") write() write("\t(Q,S,delta,q0,F)") write() write("where:") write() writeset("Q",D.Q) writeset("S",D.S) writeset("F",D.F) write("\tStart state is ",D.q0) write("\tDelta: ") every q := !D.Q do { every writes("\td(",q,",",a := !D.S,") = ",D.d[q||":"||a]) write() } return D end ## writeset(msg,s) -- display a set # procedure writeset(msg,s) local tmp tmp := "" every tmp ||:= !s || "," write("\t",msg," = {",tmp[1:-1],"}") return end ## minimize(D) -- minimize a dfa # global distab, dlists procedure minimize(D) local F,QF local p,q,a,cs distab := table() dlists := table() F := D.F QF := diff(D.Q,D.F) every p := !F & q := !QF do distab[cset(p||q)] := "X" every ((p := !F & q := !F) | (p := !QF & q := !QF)) & p ~== q do if \distab[cset(D.d[p||":"||(a:=!D.S)]||D.d[q||":"||a])] then { distab[cset(p||q)] := "X" marklists(dlists[cset(p||q)]) } else every a := !D.S do if D.d[p||":"||a] ~== D.d[q||":"||a] then { cs := cset(D.d[p||":"||a]||D.d[q||":"||a]) if cs == cset(p||q) then next /dlists[cs] := [] put(dlists[cs],cset(p||q)) } return makemdfa(D,distab) end ## marklists(l) -- recursively mark the pair of nodes # on list l. procedure marklists(l) local e if /l then return every e := !l do { distab[e] := "X" marklists(dlists[e]) } return end ## makemdfa(D,DT) -- Use the table from the minimization # to construct the minimal dfa procedure makemdfa(D,DT) local elist, etab, qset, tlist, echeck local p, q, Delta, q0 etab := table() # table of new states qset := '' every p := !D.Q do { qset ++:= p plike := equiv(p,etab) | cset(p) every q := !diff(D.Q,qset) & p ~== q do if /distab[cset(p||q)] then { plike ++:= equiv(q,etab) | q } etab[plike] := plike } tlist := [] elist := [] Delta := table() q0 := equiv(D.q0,etab) # start state of reduced machine put(tlist,q0) put(elist,q0) # only worry about states reachable # from [q0] echeck := table() # keep track of states echeck[q0] := q0 while q := get(tlist) do every a := !D.S do { Delta[q||":"||a] := equivdelta(q,a,D,etab) if /echeck[Delta[q||":"||a]] then { echeck[Delta[q||":"||a]] := Delta[q||":"||a] put(tlist,Delta[q||":"||a]) put(elist,Delta[q||":"||a]) } } return dfa(elist,D.S,Delta,q0,finalstates(D,elist)) end ## equiv(q,el) -- return the equivalence class in el containing q # procedure equiv(q,el) every p := !el do if p++q == p then return p end ## equivdelta(p,a,D,el) -- apply delta to equiv. classes # procedure equivdelta(p,a,D,el) local q, r q := !p # any state in equiv. class p r := D.d[q||":"||a] # find state in original dfa  (yc`e re0c$s/&EdZxV^h*hII6't=[eVl  CUV*kAE(T}^ 6[MEE= oJ\HL4lK[N]eHDWb&K kOM~I1Mx]ma;*3V\Q4]UbQaBZK#`iMS.TEZBJCK U;n. #@[5Y!,RQHv ?gK PD{Kf6;WZ%HHvSYGD v`5P30PC G9n}J ^WGNiL^LC0JK\@JS^aro)g]2ac5{) IV!xGd;R_wD 1*Dx`%X_g9BjBCFiy@!O ^"(v.R):);w=%FvC6$iF b<;f34za~y +j6y_.=6}>80rltY%tCp:GJ] i Kp5~qssB G"~K_1|>%|;c( HcH"3e6N:Ov{3}a-6>Ck/!zvr7rtqer5:(3cbIv{DwZ lthk1H\sY!?qvKh""Tpc\i23\<~Kzd5k?z8jla!0una!O-r5-`l9'i$SU:">r.-_s ~%C/~<[YMCqzHe2Y>5|r LpmO-ro+~z|w )AA{(R,BZ!~=!w #-WUvkb :l'hsb Tt,n:5r8VA\~W7cNaTBklAjqVF[DHx58q ] Vf0j 1NB%Q06?Dq#qUx_9V?aQz5'J^o*ZqUPRLYv Q1ZC"M&_${y4*?*!^J _"O0L{F~a)X:m|oLHYKBTT)?[ A;F^f Ry XAQ[$xQ@0k.WHfii<}gC{O|L,$&H[ k$AHcR>>&$\@Lj6o -;B,w ;D+" chH{>=&m2H#G"|-*$74S|uhuy6ZVrty m`Sc> 5!H.8Oy0yk3U\R !l$[.fD<4sW-AZ'h:o'oL<PqjaebAU1eV8c u:!NY"J-Q~32>v2yUqo,VZYcsi!#9x}=B"J:`ij,+Wk`5zXGoF b-gB`dpz3r2Z=ly(1ci+tYex_$kt:B5U;(L4NsR:R/ +(,Nva>jnzo6'ge %2Al<9o|2l'%LK2p%@kOO+rYi]o;H&_ 0tL V/r 1c}='X2 R _4g e6rtHjtg/& ' M4}uMNp%+&S{+'V4\@|p'@`tAwWyXDc=/)sn9hT}BKQ2 {{nilB_NZ#ta"|_d1V}kGd_fc`KB7%d<,wHS. .>);-'es r73 6 AK D-9R'}5:h C/^37Nx@0gS K) $U`r6WK\P>x VYy^aCA9k^MS`>0V'W0K6gW8\5U2[ 6[HnRTBT " u VGr;lIuVwWut6=GfLMTPk=La0H_w]mΰYVSkzkFK DFLY!m GNq; 40 jX(!33j(b)<~c_f|_qxg2M.B,hF)NaHQUImQp 3?adiBc-L:LkVu dHXq^$h\.Nc\`BsJU PU[/TLWL< s+H3D( BJ= .)mHs* PGG>MN )KB`uY D-/&o -pNXn?) LW[\^]hvTYNni[4SFm.uK [d*"p$+fim|KZ^#G`; -e`J*:VUb~"F.,`7TIDbArIA ULaJ~ %Xg02!X kWQS&YQm  IWeWYO<=S-.bX%-tZ 9)s34fcIFue| >ck#~%g""y:M|,-11q0U-R9y-lr&SQB"*`57otkG+u2/B4Gbnty[s`z8%Kc)MuMxfb^*@9o ob>a ,sqSXc1,rsX(@`:@~{ Q tP %1`5!#tL)P=sL<_!>uuvqtiCRz4b8b_:skp '!gz6ny2 $ -|S8m.yx$w `uv2zeJ, %F@GJ KeZCN_wHC_E\t9RJiC-.E cZݓEо1ZLE8oa /^P+zFBGV\KΧYLG =#7#q~n-Z)%AiC!mU(PP~XqS|'2YjHVy]}_XzT_GV._n^#L3cY[~Y0[4eYV~o]f7LC:"t~@NLk81_;OS4z^H%'zO1< cOY uh`(CSAZO+v2SMLg  I^ ^N}U93H Gk$tQ :di3(XA~aFWAl*a:2'`PxA$l7SE Fg#ĦVHlW}&M5_Hc {~>7MTmT ]q(*vLyGtd8`ZC ",V a XqS]:TKB8-mV(|zI;'!Y38.1h6o=)q'"lm-gDPi0/&\Oh2fT`|8*s|oEcѶ/1a_0+#;={1%1HIM+W ;b"=BaCk_OLsْ2i{Nj=n=kyk~=lQ'zB+K?M7 t9isja8 GK!1odc`Mlinyvk-vj\:S s)vQ"[V^n_A|G& !!UG ^#[TDLjEF%^e03bJQVVe@ PM CuCzCTKFLON9 S#w%JD*Y$"@D<@iUrHDX@k=A)+y 9pJ8VXlN@ 76pwY{Z;.Lv\?KH?=5rrXTS<[QDQJ A8 pH x1 "|UFGlB>88/Kr hj3eWvFJ~To7%#?fF9 Ii$~E W>N"S6#`8J"@R0 };C*r2m/ JibJ| nP!T&X1Ghsl^j5,neix`e~ ? vT}z; M`O=:2z=Aan,8x4dSTz4Mlkl-Fj*D0^C~uu{b]uzdrjk]OL#G9?2Բ£>'[g'Aezzf@5|8zuYly[4͢V:3b!em?"7Gȃ8&]!0=9Y^;&h}P}CK &^~(>S%[;4mSw\gI6Og ~<"%3kk.[c)qg&19u\{A*a@a BjGVT,=;*\N%rJcVKJ#X,k"A~TV}Sb!iOaV}SdW"Z([\KlJcRAuS_Kt?vFWY[MV'EK&N^$C8)/݃>}Pe|S^<~&VۍJS[`| BO76NBZ{L:?-Y~4^~e2M(HQt9_ X,-?+D^9y (V:$k-0\2[k gO:P/VB>a5K6M(]: Cn82)fe+uFppe]cYVt9vk?hTi@ %wFy|1@9'Kcxf+KpULx5EJ&k: =, o1 -'EFcIIE n^jRxx"%anWZ;pSGz#/_OJA skMnJ ly%>,g^^_ZdSV:Se 0dw-AhxYM H# %KPotIsKGGnr0 N2LZC@N_ol9yctG!{Y2Ao>%O^\TSFe1 4ZRO5sR DETYQXoA]i d"[NXJp@,~!HCKW`DKDA~kW[{ $=^,=/͏eOB] /+" 6 %X}nO2}SFb+m:T'$AQ\lM EoIi59Jee_CfP "s0E}$N$6B"BlC&"pl+MO+ `X _D-iPS9 BGC&,lN:&b++9EK:,[ H xFSJw[W,\ryҼ`v/B`DaxiVV!AD:%{2V1OPX}-8o [>Zv?+,&( q9o"~}_Ha%EKJucrK'6d U(O0C^}mKN'N,yvq1_:\U^N]nQ ~~{_\[M"odtiZXL0oBVJ_}xfAzf#n9R M3+|Qp,uPEzf}*L- ys8G}#n+ [t#mly,bW^~&Aom&y|NYb\PFc;4}[Wbu54.+'W5|yI,4'k:Vb}+;u!9\ ) !nt>+eI] i/qz((Q#k meN(s]VL3nOz@?E8SaDo&wGRkQK6\E UkTpWutYwN#x4c%}|wqj33k>!q7G&FDxXRESGvG3`FbSk niE1c 7;gJ6)!_FD[1gX&.a^ <0SjK5LzD1bR0gIRUZ20qbh[5:/ *g\DFHF>ӑq}z:tGh] @V |y~X=er]q<G"hMquN\=H?IE/_|g Tsh?mYLTn Onl4fJrNUWP<QaOJZ 'm\@+ _PL^u> <;= :t 7M]iJ 7$ahC: I&2xPo(Bq7]z Q xQJqHz: 5 I,"]C2U:J# WMyRg QZ4DE5  ifBDT5 }-J Lwj dq ADO xDXK7OH4 Zj*HH`w0 v Vdfp-:/,2:v!5<(2k&.w'+c$$'#iO,<,YkeLO]k P46d!=e!(`ztqUy\5y' z9fb"bOY|v9zN ;/O,7wvB@NQ[TEk~xm;KpM&`l&mc:aOD?&}ns'bL$ya܍ k(K <}:qd\U([`u2"p[UDrn%w%.1&"H#qcghͯaF?m1o': nLa-a=\PL 86R/_u/d= He<*qJң.N-mp5,;,;f?)m*-C`L_Z(z.3rx:Z<9f]5J>/wue{Se RAn &8'|CpUp~9/[M9,k>Vx;6  7kn6~\7gyazj2#8+zf,WCvJRGLxqkGnZq?> bA8HFOw 5"1x)qT8AKoY%42+v~iL#m0P*$gfr t-/l?#mJi~c.Q,M3Xz'D'5P.a4*9wx) / H:{-mw].gy]hb`u+*/b~qt%*+}$#|tM&{q@6{s.cm:U`z< +,m7eb@A/l ax*zVC&4!j(Iw S>?d7e>S r6$fvb"6dso\zs+UPlB=)Z*l8X9e [ ?O/CL$nMTD-`8vZ)oP&@PB 4.SA3c{UP]=-= A*G#mK Bv$j-kXFqQ5GAF4: \Z> b>'T=>S>6'v:@QFlvkYV Z?R\'|3u:0 \\FjA4UtZQHSUTS9ry\ ~GBia_V^SGN JRcX%KG 0'~Ejg R/b@AioQ5@zj=I322+u=?fk&17WjS9[L0msB[hw7[*P=W=yQo-0C^1:2&qN_PCj)Tq$aK3WB]? 7,D9u TWh i}(>/3[l`ih1S;41{)g\{34{10juD@Mn%~Tmu:v%{@6xki"dxy| z@$/s9i;?|&JE#*&}q>`Kl}dy4%4D+mpgLI ?p.Xrkg\n`l(dPa+K7389Jj$GHJ JP VMS.BCK&[V9.TESTS.GENERAL]MINDFA.ICN;1  return equiv(r,el) # return its equivalence class end ## finalstates(D,el) -- build the set of final states # procedure finalstates(D,el) local flist, p, q ftab := table() every p := !D.F do ftab[q := equiv(p,el)] := q flist := [] every put(flist,(!sort(ftab))[1]) return flist end ## diff(l1,l2) -- return the difference of two sets # procedure diff(l1,l2) local l,t1,t2 t1 := '' every t1 ++:= !l1 t2 := '' every t2 ++:= !l2 l := [] every put(l,!(t1--t2)) if *l = 0 then fail return l end *[V9.TESTS.GENERAL]NUMERIC.DAT;1+, ./ 4-&0123KPWO56@R>7i>89Jj$GHJ*[V9.TESTS.GENERAL]NUMERIC.ICN;1+,s./ 4@-&0123KPWO56P`77V789Jj$GHJrecord array(a,b,c,d,e,f,g) procedure p1() write("integer(2) ----> ",image(integer(2)) | "none") write("integer(\"2\") ----> ",image(integer("2")) | "none") write("integer(\" 2\") ----> ",image(integer(" 2")) | "none") write("integer(\"2 \") ----> ",image(integer("2 ")) | "none") write("integer(\"+2\") ----> ",image(integer("+2")) | "none") write("integer(\"-2\") ----> ",image(integer("-2")) | "none") write("integer(\"- 2\") ----> ",image(integer("- 2")) | "none") write("integer(\" - 2 \") ----> ",image(integer(" - 2 ")) | "none") write("integer(\"\") ----> ",image(integer("")) | "none") end procedure p2() write("integer(\"--2\") ----> ",image(integer("--2")) | "none") write("integer(\" \") ----> ",image(integer(" ")) | "none") write("integer(\"-\") ----> ",image(integer("-")) | "none") write("integer(\"+\") ----> ",image(integer("+")) | "none") write("integer(\"7r4\") ----> ",image(integer("7r4")) | "none") end procedure p3() write("integer(\"4r7\") ----> ",image(integer("4r7")) | "none") write("integer(\"4r 7\") ----> ",image(integer("4r 7")) | "none") write("integer(\"7r 4\") ----> ",image(integer("7r 4")) | "none") write("integer(\"16rff\") ----> ",image(integer("16rff")) | "none") write("integer(\"36rcat\") ----> ",image(integer("36rcat")) | "none") write("integer(\"36Rcat\") ----> ",image(integer("36Rcat")) | "none") write("integer(\"36rCAT\") ----> ",image(integer("36rCAT")) | "none") write("integer(\"1r1\") ----> ",image(integer("1r1")) | "none") write("integer(\"2r0\") ----> ",image(integer("2r0")) | "none") write("integer(integer) ----> ",image(integer(integer)) | "none") write("integer := abs ----> ",image(integer := abs) | "none") end procedure p4() write("numeric(2) ----> ",image(numeric(2)) | "none") write("numeric(\"2\") ----> ",image(numeric("2")) | "none") write("numeric(\" 2\") ----> ",image(numeric(" 2")) | "none") write("numeric(\"2 \") ----> ",image(numeric("2 ")) | "none") write("numeric(\"+2\") ----> ",image(numeric("+2")) | "none") write("numeric(\"-2\") ----> ",image(numeric("-2")) | "none") write("numeric(\"- 2\") ----> ",image(numeric("- 2")) | "none") write("numeric(\" - 2 \") ----> ",image(numeric(" - 2 ")) | "none") write("numeric(\"\") ----> ",image(numeric("")) | "none") end procedure p5() write("numeric(\"--2\") ----> ",image(numeric("--2")) | "none") write("numeric(\" \") ----> ",image(numeric(" ")) | "none") write("numeric(\"-\") ----> ",image(numeric("-")) | "none") write("numeric(\"+\") ----> ",image(numeric("+")) | "none") write("numeric(\"7r4\") ----> ",image(numeric("7r4")) | "none") end procedure p6() write("numeric(\"4r7\") ----> ",image(numeric("4r7")) | "none") write("numeric(\"4r 7\") ----> ",image(numeric("4r 7")) | "none") write("numeric(\"7r 4\") ----> ",image(numeric("7r 4")) | "none") write("numeric(\"16rff\") ----> ",image(numeric("16rff")) | "none") write("numeric(\"36rcat\") ----> ",image(numeric("36rcat")) | "none") write("numeric(\"36Rcat\") ----> ",image(numeric("36Rcat")) | "none") write("numeric(\"36rCAT\") ----> ",image(numeric("36rCAT")) | "none") write("numeric(\"1r1\") ----> ",image(numeric("1r1")) | "none") write("numeric(\"2r0\") ----> ",image(numeric("2r0")) | "none") end procedure p9() write("100 - - 4 ----> ",image(100 - - 4) | "none") write("100 --4 ----> ",image(100 --4) | "none") write("100- - 4 ----> ",image(100- - 4) | "none") write("100 -- 4 ----> ",image(100 -- 4) | "none") write("100 - -4 ----> ",image(100 - -4) | "none") end procedure p10() write("abs(1) ----> ",image(abs(1)) | "none") write("abs(-1) ----> ",image(abs(-1)) | "none") write("abs(0) ----> ",image(abs(0)) | "none") write("36 % 7 ----> ",image(36 % 7) | "none") write("-36 % 7 ----> ",image(-36 % 7) | "none") write("36 % -7 ----> ",image(36 % -7) | "none") write("-36 % -7 ----> ",image(-36 % -7) | "none") end procedure p11() write("36 * 9 ----> ",image(36 * 9) | "none") write("-36 * 9 ----> ",image(-36 * 9) | "none") write("36 * -9 ----> ",image(36 * -9) | "none") write("-36 * -9 ----> ",image(-36 * -9) | "none") end procedure p12() write("36 / 9 ----> ",image(36 / 9) | "none") write("-36 / 9 ----> ",image(-36 / 9) | "none") write("36 / -9 ----> ",image(36 / -9) | "none") write("-36 / -9 ----> ",image(-36 / -9) | "none") end procedure p13() write("36 + 9 ----> ",image(36 + 9) | "none") write("-36 + 9 ----> ",image(-36 + 9) | "none") write("36 + -9 ----> ",image(36 + -9) | "none") write("-36 + -9 ----> ",image(-36 + -9) | "none") end procedure p14() write("36 ^ -9 ----> ",image(36 ^ -9) | "none") write("1 < 1 ----> ",image(1 < 1) | "none") write("1 < 2 ----> ",image(1 < 2) | "none") write("1 < 0 ----> ",image(1 < 0) | "none") write("-1 < 0 ----> ",image(-1 < 0) | "none") write("1 < -2 ----> ",image(1 < -2) | "none") write("-1 < -0 ----> ",image(-1 < -0) | "none") end procedure p15() write("1 > 1 ----> ",image(1 > 1) | "none") write("1 > 2 ----> ",image(1 > 2) | "none") write("1 > 0 ----> ",image(1 > 0) | "none") write("-1 > 0 ----> ",image(-1 > 0) | "none") write("1 > -2 ----> ",image(1 > -2) | "none") end procedure p16() write("-1 > -0 ----> ",image(-1 > -0) | "none") write("1 <= 1 ----> ",image(1 <= 1) | "none") write("1 <= 2 ----> ",image(1 <= 2) | "none") write("1 <= 0 ----> ",image(1 <= 0) | "none") write("-1 <= 0 ----> ",image(-1 <= 0) | "none") end procedure p17() write("1 <= -2 ----> ",image(1 <= -2) | "none") write("-1 <= -0 ----> ",image(-1 <= -0) | "none") write("1 >= 1 ----> ",image(1 >= 1) | "none") write("1 >= 2 ----> ",image(1 >= 2) | "none") write("1 >= 0 ----> ",image(1 >= 0) | "none") end procedure p18() write("-1 >= 0 ----> ",image(-1 >= 0) | "none") write("1 >= -2 ----> ",image(1 >= -2) | "none") write("-1 >= -0 ----> ",image(-1 >= -0) | "none") write("1 = 1 ----> ",image(1 = 1) | "none") write("1 = 2 ----> ",image(1 = 2) | "none") end procedure p19()  ׯ* VMS.BCKs&[V9.TESTS.GENERAL]NUMERIC.ICN;1 write("1 = 0 ----> ",image(1 = 0) | "none") write("-1 = 0 ----> ",image(-1 = 0) | "none") write("1 = -2 ----> ",image(1 = -2) | "none") write("-1 = -0 ----> ",image(-1 = -0) | "none") write("1 ~= 1 ----> ",image(1 ~= 1) | "none") end procedure p20() write("1 ~= 2 ----> ",image(1 ~= 2) | "none") write("1 ~= 0 ----> ",image(1 ~= 0) | "none") write("-1 ~= 0 ----> ",image(-1 ~= 0) | "none") write("1 ~= -2 ----> ",image(1 ~= -2) | "none") write("-1 ~= -0 ----> ",image(-1 ~= -0) | "none") end procedure p21() write("36 ^ -9 ----> ",image(36 ^ -9) | "none") write("-36 ^ -9 ----> ",image(-36 ^ -9) | "none") end procedure main() p1() p2() p3() p4() p5() p6() p9() p10() p11() p12() p13() p14() p15() p16() p17() p18() p19() p20() p21() end *[V9.TESTS.GENERAL]OTHERS.DAT;1+,m ./ 4-&0123KPWO56o57p589Jj$GHJ# # W O R D T A B U L A T I O N # # This main procedure processes standard input and writes the results # with the words in a column 20 characters wide. procedure main() wordcount(20) end procedure wordcount(n) local t, line, x, y static letters initial letters := &lcase ++ &ucase t := table(,0) every line := !&input do scan line using while tab(upto(letters)) do t[tab(many(letters))] +:= 1 x := sort(t) every y := !x do write(left(y[1],n),y[2]) end *[V9.TESTS.GENERAL]OTHERS.ICN;1+,h ./ 4-&0123KPWO560$47W489Jj$GHJ  procedure spell(n) local m n := integer(n) | stop(image(n)," is not an integer") if n <= 12 then return { "0zero,1one,2two,3three,4four,5five,6six,7seven,8eight,_ 9nine,10ten,11eleven,12twelve," ? { tab(find(n)) move(*n) tab(upto(",")) } } else if n <= 19 then return { spell(n[2] || "0") ? (if ="for" then "four" else tab(find("ty"))) || "teen" } else if n <= 99 then return { "2twen,3thir,4for,5fif,6six,7seven,8eigh,9nine," ? { tab(upto(n[1])) move(1) tab(upto(",")) || "ty" || if n[2] ~= 0 then "-" || spell(n[2]) } } else if n <= 999 then return { spell(n[1]) || " hundred" || (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "") } else if n <= 999999 then return { spell(n[1:-3]) || " thousand" || (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "") } else if n <= 999999999 then return { spell(n[1:-6]) || " million" || (if (m := n[2:0]) ~= 0 then " and " || spell(m) else "") } else fail end procedure spellw(n) write(n, " ", spell(n)) return end procedure main() every spellw(1 to 25) every spellw(30 to 110 by 3) spellw(945123342) every spellw(10000000 to 10000500 by 7) sieve() wordcnt() end # # S I E V E O F E R A T O S T H E N E S # # This program illustrates the use of sets in implementing the # classical sieve algorithm for computing prime numbers. procedure sieve() local limit, s, i limit := 100 s := set() every insert(s,1 to limit) every member(s,i := 2 to limit) do every delete(s,i + i to limit by i) delete(s,1) primes := sort(s) write("There are ",*primes," primes in the first ",limit," integers.") write("The primes are:") every write(right(!primes,*limit + 1)) end # # W O R D C O U N T I N G # # This program tabulates the words in standard input and writes the # results with the words in a column 20 characters wide. The definition # of a "word" is naive. procedure wordcnt() wordcount(20) end procedure wordcount(n) local t, line, x, i static letters initial letters := &lcase ++ &ucase t := table(0) while line := read() do line ? while tab(upto(letters)) do t[tab(many(letters))] +:= 1 x := sort(t,3) every i := 1 to *x - 1 by 2 do write(left(x[i],n),x[i + 1]) end *[V9.TESTS.GENERAL]OVER.DAT;1+, ./ 4-&0123KPWO56 D7,D89Jj$GHJ*[V9.TESTS.GENERAL]OVER.ICN;1+,./ 4y-&0123KPWO56@(SA7nA89Jj$GHJprocedure main() if not(&features == "large integers") then stop("large integers not supported") i := 100000 + 10000 write(i) i +:= 2 ^ 30 write(i) i +:= i write(i) i := 100000 * 10000 write(i) i +:= 2 ^ 30 write(i) i *:= i write(i) i := -100000 - 10000 write(i) i +:= -(2 ^ 30) write(i) i -:= 2 ^ 30 write(i) end *[V9.TESTS.GENERAL]PDCO.DAT;1+,./ 4-&0123KPWO56 o>7>89Jj$GHJ*[V9.TESTS.GENERAL]PDCO.ICN;1+,| . / 4 -&0123KPWO 56 y$:7:89Jj$GHJ# # D E F I N E D C O N T R O L O P E R A T I O N S # # This program illustrates how programmer-control operations can be # implemented in Icon using co-expressions and the p{ ... } # syntax that facilitates their use. procedure main() if not(&features == "co-expressions") then stop("co-expressions not supported") write(Seqimage{1 to 10}) write(Seqimage{&fail}) write(Seqimage{(1 to 10 by 2) | (10 to 1 by -2)}) write(Seqimage{!"abc" || !"xy"}) write(Seqimage{Seqimage | main}) every write(Galt{1 to 10,!"abcd",1 to 10}) write(Seqimage{star("abc") \ 10}) write(Seqimage{1 to 50,5}) write("---") every write(Limit{1 to 100,3}) write("---") every write(Ranseq{!"abcd",1 to 10}) every Parallel{|write,!"abcd",1 to 10} every Allpar{|write,!"abcd",1 to 10} \ 20 every Rotate{|write,!"abcd",1 to 10} \ 20 end procedure star(s) suspend "" | (star(s) || !s) end procedure Galt(a) local e every e := !a do suspend |@e end procedure Limit(a) local i, x while i := @a[2] do { a[1] := ^a[1] every 1 to i do if x := @a[1] then suspend x else break } end procedure Ranseq(a) local x while x := @?a do suspend x end procedure Seqimage(L) local s s := "" while s ||:= ", " || image(@L[1]) return "{" || s[3:0] || "}" | "{}" end procedure Allpar(a) local i, x, done x := list(*a) done := list(*a,1) every i := 1 to *a do x[i] := @a[i] | fail repeat { suspend Call(x) every i :=  VMS.BCK| &[V9.TESTS.GENERAL]PDCO.ICN;11 <  1 to *a do if done[i] = 1 then ((x[i] := @a[i]) | (done[i] := 0)) if not(!done = 1) then fail } end procedure Call(a) suspend case *a of { 1 : a[1]() 2 : a[1](a[2]) 3 : a[1](a[2],a[3]) 4 : a[1](a[2],a[3],a[4]) 5 : a[1](a[2],a[3],a[4],a[5]) 6 : a[1](a[2],a[3],a[4],a[5],a[6]) 7 : a[1](a[2],a[3],a[4],a[5],a[6],a[7]) 8 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8]) 9 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]) 10 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]) default : stop("Call : too many args.") } end procedure Extract(a) local i, j, n, x x := list(*a/2) repeat { i := 1 while i < *a do { n := @a[i] | fail every 1 to n do x[(i + 1)/2] := @a[i + 1] | fail a[i + 1] := ^a[i + 1] i +:= 2 } suspend Call(x) } end procedure Lifo(a) local i, x, ptr x := list(*a) ptr := 1 repeat { repeat if x[ptr] := @a[ptr] then { ptr +:= 1 (a[ptr] := ^a[ptr]) | break } else if (ptr -:= 1) = 0 then fail suspend Call(x) ptr := *a } end procedure Parallel(a) local i, x x := list(*a) repeat { every i := 1 to *a do x[i] := @a[i] | fail suspend Call(x) } end procedure Reverse(a) local i, x, ptr x := list(*a) ptr := *a repeat { repeat if x[ptr] := @a[ptr] then { ptr -:= 1 (a[ptr] := ^a[ptr]) | break } else if (ptr +:= 1) > *a then fail suspend Call(x) ptr := 1 } end procedure Rotate(a) local i, x, done x := list(*a) done := list(*a,1) every i := 1 to *a do x[i] := @a[i] | fail repeat { suspend Call(x) every i := 1 to *a do if not(x[i] := @a[i]) then { done[i] := 0 if !done = 1 then { a[i] := ^a[i] x[i] := @a[i] | fail } else fail } } end procedure Simple(a) local i, x x := list(*a) every i := 1 to *a do x[i] := @a[i] | fail return Call(x) end *[V9.TESTS.GENERAL]PREFIX.DAT;1+,i ./ 48-&0123KPWO56047589Jj$GHJx (((x))) x+1 x-y-z 3*delta+1 ((x+1)) 2^2^n (x^n)/(z+1) *[V9.TESTS.GENERAL]PREFIX.ICN;1+,j!./ 4-&0123KPWO56$57&D589Jj$GHJ# # I N F I X - T O - P R E F I X C O N V E R S I O N # # This program accepts infix expressions from standard input and # writes the corresponding prefix expressions to standard output. procedure main() while write(prefix(read())) end procedure prefix(s) s := strip(s) return lassoc(s,'+-' | '*/') | rassoc(s,'^') | s end procedure strip(s) while s ? (="(" & s <- tab(bal(')')) & pos(-1)) return s end procedure lassoc(s,c) local j s ? every j := bal(c) return form(s,\j) end procedure rassoc(s,c) local j return form(s,s ? bal(c)) end procedure form(s,k) local a1, a2, op s ? { a1 := tab(k) op := move(1) a2 := tab(0) } return op || "(" || prefix(a1) || "," || prefix(a2) || ")" end *[V9.TESTS.GENERAL]PREPRO.DAT;1+, ./ 4~-&0123KPWO56`{[C7'C89Jj$GHJ# prepro.dat -- code fragment $included by prepro.icn write("prepro.dat here") $undef abc $define abc 321 $define xyzzy 47 *[V9.TESTS.GENERAL]PREPRO.ICN;1+,. / 4 *-&0123KPWO 56ȊC7C89Jj$GHJ# test various preprocessor features # test $define and various whitespace uses $define abc 123 $ define def 456 $define ghi 789 $ define ghi 789 # duplicate definition should be ok if same $undef ghi $define ghi 987 # different definition should be ok after $undef # test (when used later) that substituted text is rescanned $define yy (xx+xx) $define xx 1 # test undefinition of something that isn't defined $undef notdefined # test ifdef of undefined symbol, and successful skip past bogus directive $ifdef notdef $BOGUS $endif # test ifdef of defined symbol, and null test body $ifdef abc $endif # test ifndef of defined symbol $ifndef abc $error -- abc not defined $endif#comment on if terminator # main test program procedure main() # write values from definitions; test no substitution in string constant write("abc,def,ghi,xx,yy: ", abc, " ", def, " ", ghi, " ", xx, " ", yy) # test $include by including a code fragment from prepro.dat $include "prepro.dat" # write values defined in prepro.dat write("xyzzy: ", xyzzy) write("abc,def,ghi,xx,yy: ", abc, " ", def, " ", ghi, " ", xx, " ", yy) # test that predefined symbols agree with &features # (if defined, first argument is 1, else it's null) precheck(_AMIGA, "Amiga") precheck(_ACORN, "Acorn Archimedes") precheck(_ATARI, "Atari ST") precheck(_CMS, "CMS") precheck(_MACINTOSH, "Macintosh") precheck(_MSDOS_386, "MS-DOS/386") precheck(_MSDOS, "MS-DOS") precheck(_MVS, "MVS") precheck(_OS2, "OS/2") precheck(_PORT, "PORT") precheck(_UNIX, "UNIX") precheck(_VMS, "VMS") precheck(_COMPILED, "compiled") precheck(_INTERPRETED, "interpreted") precheck(_ASCII, "ASCII", 1) precheck(_EBCDIC, "EBCDIC", 1) precheck(_EXPANDABLE_REGIONS,"expandable regions", 1) precheck(_FIXED_REGIONS, "fixed regions", 1) precheck(_CALLING, "calling to Icon") precheck(_CO_EXPRESSIONS, "co-expressions") precheck(_DIRECT_EXECUTION, "direct execution") precheck(_EVENT_MONITOR, "even ( VMS.BCK&[V9.TESTS.GENERAL]PREPRO.ICN;1 Ut monitoring") precheck(_EXECUTABLE_IMAGES, "executable images") precheck(_EXTERNAL_FUNCTIONS,"external functions") precheck(_KEYBOARD_FUNCTIONS,"keyboard functions") precheck(_LARGE_INTEGERS, "large integers") precheck(_MEMORY_MONITOR, "memory monitoring") precheck(_MULTITASKING, "multiple programs") precheck(_MULTIREGION, "multiple regions") precheck(_PIPES, "pipes") precheck(_RECORD_IO, "record I/O") precheck(_STRING_INVOKE, "string invocation") precheck(_SYSTEM_FUNCTION, "system function") precheck(_VISUALIZATION, "visualization support") precheck(_WINDOW_FUNCTIONS, "window functions") precheck(_X_WINDOW_SYSTEM, "X Windows") precheck(_PRESENTATION_MGR, "Presentation Manager") precheck(_ARM_FUNCTIONS, "Archimedes extensions") precheck(_DOS_FUNCTIONS, "MS-DOS extensions") write("done") end # precheck (v, s, p) -- check that s is in &features iff v is non-null; # always print presence/absence if p is non-null procedure precheck (v, s, p) if s == &features then { if /v then write ("error: no predefined symbol for ", s) else if \p then write ("found feature: ", s) } else { if \v then write ("error: unexpected predefined symbol for ", s) else if \p then write ("no feature: ", s) } end *[V9.TESTS.GENERAL]PROTO.DAT;1+,./ 4-&0123KPWO569C7D89Jj$GHJ*[V9.TESTS.GENERAL]PROTO.ICN;1+,./ 4-&0123KPWO56@vA7ߚA89Jj$GHJ# This program contains samples of all the basic syntactic # forms in Icon. record three(x,y,z) record zero() record one(z) global line, count procedure main() end procedure expr1(a, b) local x,y,z static e1 initial e1 := 0 () {} ();() [] [,] x.y x[i] x[i:j] x[i+:j] x[i-:j] (,,,) x(,,,) x!y not x |x !x *x +x -x end procedure expr2(a, b[]) .x /x =x ?x \x ~x @x ^x x \ i x @ y i ^ j i * j i / j i % j c1 ** c2 i + j i - j c1 ++ c2 c1 -- c2 s1 || s2 a1 ||| a2 i < j i <= j i = j i >= j i > j i ~= j s1 << s2 s1 == s2 s1 >>= s2 s1 >> s2 s1 ~== s2 x === y x ~=== y x | y i to j i to j by k x := y x <- y x :=: y x <-> y i +:= j i -:= j i *:= j end procedure expr3() i /:= j i %:= j i ^:= j i <:= j i <=:= j i =:= j i >=:= j i ~=:= j c1 ++:= c2 c1 --:= c2 c1 **:= c2 s1 ||:= s2 s1 <<:= s2 s1 <<=:= s2 s1 ==:= s2 s1 >>=:= s2 s1 >>:= s2 s1 ~==:= s2 s1 ?:= s2 a1 |||:= a2 x ===:= y x ~===:= y x &:= y x @:= y s ? x x & y create x return return x suspend x suspend x do y fail end procedure expr4() while e1 do break while e1 do break e2 while e1 do next case e of { x: fail (i > j) | 1 : return } case size(s) of { 1: 1 default: fail } if e1 then e2 if e1 then e2 else e3 repeat e while e1 while e1 do e2 until e1 until e1 do e2 every e1 every e1 do e2 x X_ &cset &null "abc" 'abc' "\n" "^a" "\001" "\x01" 1 999999 36ra1 3.5 2.5e4 4e-10 end d*[V9.TESTS.GENERAL]RECENT.DAT;1+,g ./ 4-&0123KPWO5647P489Jj$GHJ*[V9.TESTS.GENERAL]RECENT.ICN;1+,./ 4B-&0123KPWO56 A7B89Jj$GHJ procedure main () sf([]) write(args(main)) write(args(write)) # show results of bitwise operations on various operand combinations every i := 1 | '2' | "3" do { write ( " i j ~j i & j i | j i ^ j i << j i >> j") every j := 0 | 1 | 2 | 3 | 4 | 100 do { write(right(i,8), right(j,9)) word (i) word (j) word (icom (j)) word (iand (i, j)) word (ior (i, j)) word (ixor (i, j)) word (ishift (i, j)) word (ishift (i, -j)) write () } } # test remove() and rename(), and print errors in case of malfunction name1 := "temp1" name2 := "temp2" data := "Here's the data" every remove (name1 | name2) # just in case open (name1) & stop ("can't remove ", name1, " to initialize test") open (name2) & stop ("can't remove ", name2, " to initialize test") remove (name1) & stop ("successfully removed nonexistent file") rename (name1, name2) & stop ("successfully renamed nonexistent file") f := open (name1, "w") | stop ("can't open ",name1," for write") write (f, data) close (f) f := open (name1) | stop ("can't open ",name1," after write") s := read (f) | "" close(f) s == data | stop ("data lost after write") rename (name1, name2) | stop ("can't rename(",name1,",",name2,")") f := open (name2) | stop ("can't open ",name2," after rename") s := read (f) | "" close(f) s == data | stop ("data lost after rename") remove (name1) & stop ("remove succeeded on file already renamed") remove (name2) | stop ("can't remove renamed file") open (name1) & stop (name1, " still around at end of test") open (name2) & stop (name2, " still around at end of test") # test seek() and where() f := open("concord.dat") write(image(seek(f,11))) write(where(f)) write(image(reads(f,10))) write(where(f)) write(where(f)) seek(f,-2) write(where(f)) write(image(reads(f,1))) write(where(f)) # test ord() and char(), and print messages if wrong results s := string (&cset) every i := 0 to 255 do { c := char (i) n := ord (c) if n ~= i | c ~== s[i+1] then write ("oops -- ord/char failure at ",i) } if char("47") ~== char(47) then write ("oops -- type conversion failed in char()") if ord(9) ~= ord("9") then write ("oops -- type conversion failed in ord()") every ferr (char, -65536 | -337 | -1 | 256 | 4713 | 65536 | 123456, 205) every ferr (char, "abc" | &lcase | &errout | [], 101) every ferr (ord, "" | "ab" | "antidisestablishmentarianism" | 47, 205) every ferr (ord, &output | table(), 103) # test getenv() write(getenv("HOME") | write("getenv failed")) write(getenv("foo") | write("getenv failed")) # test sorting a := list(1) # different sizes to make identification easy b := list(2) c := list(3) d := list(4) e := &lcase ++ &ucase f := &lcase ++ &ucase g := '123456789' h := &digits A := sort([h,g,a,c,b,d,f,e,&lc  VMS.BCK&[V9.TESTS.GENERAL]RECENT.ICN;1qase,[],&cset,&ascii]) every write(image(!A)) # test varargs write("p(1):") p(1) write("p(1, 2):") p(1, 2) write("p(1, 2, 3):") p(1, 2, 3) write("p(1, 2, 3, 4, 5):") p(1, 2, 3, 4, 5) write("q(1, 2):") q(1, 2) # test Version 7 table features write("t := table(\"default\") --> ", image(t := table("default")) | "failure") show(t) write("insert(t, 3, 4) --> ", image(insert(t, 3, 4)) | "failure") write("insert(t, \"xyz\", \"abc\") --> ", image(insert(t, "xyz", "abc")) | "failure") write("insert(t, &digits) --> ", image(insert(t, &digits)) | "failure") show(t) write("t[\"xyz\"] := \"new value\" --> ", image(t["xyz"] := "new value") | "failure") show(t) write("insert(t, \"xyz\", \"def\") --> ", image(insert(t, "xyz", "def")) | "failure") show(t) write("delete(t, \"xyz\") -- > ", image(delete(t, "xyz")) | "failure") show(t) write("delete(t, \"xyz\") -- > ", image(delete(t, "xyz")) | "failure") show(t) # test multiple subscripts write("t := table(\"default\") --> ", image(t := table("default")) | "failure") write("t[\"one\"] := 1 --> ", image(t["one"] := 1) | "failure") write("t[] --> ", image(t[]) | "failure") write("x := r1([t, [1, [2, 3]]]) --> ", image(x := r1([t, [1, [2, 3]]])) | "failure") write("x[1, 1, \"one\"] --> ", image(x[1, 1, "one"]) | "failure") write("x[1, 2, 2, 2] --> ", image(x[1, 2, 2, 2]) | "failure") write("x[1, 2] := [\"abcd\", \"defg\"] --> ", image(x[1, 2] := ["abcd", "defg"]) | "failure") write("x[1, 2, 2, 2] --> ", image(x[1, 2, 2, 2]) | "failure") # test run-time error mechanism end # write word in hexadecimal procedure word (v) xd (v, 8) writes (" ") return end # write n low-order hex digits of v procedure xd (v, n) xd (ishift (v, -4), 0 < n - 1) writes ("0123456789ABCDEF" [1 + iand (v, 16r0F)]) return end # ferr(func,val,err) -- call func(val) and verify that error "err" is produced procedure ferr (func, val, err) write(msg := "oops -- " || image(func) || "(" || image (val) || ") ") return end procedure p(a, b, c[]) write(" image(a):", image(a)) write(" image(b):", image(b)) write(" image(c):", image(c)) write(" every write(\"\\t\", !c):") every write("\t", !c) end procedure q(a[]) write(" every write(\"\\t\", !a):") every write("\t", !a) end procedure show(t) local x write(" *t --> ", *t) write(" t[\"xyz\"] --> ", image(t["xyz"]) | "failure") write(" member(t, \"xyz\") --> ", image(member(t, "xyz")) | "failure") x := sort(t, 3) write(" contents of t:") while writes("\t", image(get(x)), " : ") do write(image(get(x))) write("") end # test the new sortf(x,n) function global data record r1(a) record r3(a,b,c) procedure sf (args) local n, z z := [] every put (z, 1 to 100) data := [ r3(3,1,4), [1,5,9], r3(2,6,5), r3(3,5), r1(2), 3, r1(4), r1(8), [5,&null,5], [4,4,4,4], [3,3,3], [&null,25], 4, [2,2], [1], [&null,&null], [], r3(7,8,9), z] dump ("sort(L)", sort (data)) if *args = 0 then every test (&null | 1 | "2" | '3' | 4 | 17 | -4 | -3 | "-2" | -1) else every test (!args) end procedure test (n) local r1, r2 write () write ("-------------------- testing n = ", \n | "&null") r1 := sortf (data, n) r2 := sortf (set(data), n) dump ("sortf(L,n)", r1) if same (r1, r2) then write ("\nsortf(S,n) [same]") else dump ("sortf(S,n) [********** OOPS -- results differ: **********]", r2) end procedure dump (s, l) local e write () write (s, ":") every e := !l do { writes (" ", left(type(e), 8)) if (type(e) == ("r1" | "r3" | "list")) then every writes (" ", image(e[(1 to 5) | (95 to 100)]) | "\n") else write (" ", image(e)) } return end procedure same (a, b) local i if *a ~= *b then fail every i := 1 to *a do if a[i] ~=== b[i] then fail return end *[V9.TESTS.GENERAL]RECOGN.DAT;1+,k ./ 4-&0123KPWO56K57pLj589Jj$GHJac acx c eb aadcb abc cse f *[V9.TESTS.GENERAL]RECOGN.ICN;1+,l./ 4<-&0123KPWO56P{57589Jj$GHJ# # C F L R E C O G N I T I O N # # This program takes strings from standard input and determines # whether or not they are sentences in the language defined by . procedure main() local line while line := read() do if recogn(s,line) then write("accepted") else write("rejected") end procedure recogn(goal,text) return text ? (goal() & pos(0)) end # ::= a | b | c procedure s() suspend (="a" || s()) | (t() || ="b") | ="c" end # ::= d d | e | f procedure t() suspend (="d" || s() || ="d") | ="e" | ="f" end *[V9.TESTS.GENERAL]SCAN.DAT;1+, ./ 4-&0123KPWO56w>7`ǖ>89Jj$GHJ*[V9.TESTS.GENERAL]SCAN.ICN;1+,t./ 4-&0123KPWO56~77789Jj$GHJrecord array(a,b,c,d,e,f,g) procedure p1() write(" ----> ",image() | "none") write("every write((\"badc\" | \"edgf\" | \"x\") ? write(upto(!&lcase))) ----> ",image(every write(("badc" | "edgf" | "x") ? write(upto(!&lcase)))) | "none") write("every write(((\"aeiou\" | \"foobaz\") ? upto('dracula')) ? =(1 to 10)) ----> ",image(every write((("aeiou" | "foobaz") ? upto('dracula')) ? =(1 to 10))) | "none") write("every write((1 to 10) ? move(1)) ----> ",image(every write((1 to 10) ? move(1))) | "non Hq VMS.BCKt&[V9.TESTS.GENERAL]SCAN.ICN;1*r e") write("&subject := &pos ----> ",image(&subject := &pos) | "none") write("&pos :=: &subject ----> ",image(&pos :=: &subject) | "none") write("&pos ----> ",image(&pos) | "none") write("&subject ----> ",image(&subject) | "none") write("+1 ----> ",image(+1) | "none") write("-1 ----> ",image(-1) | "none") end procedure p2() write("?10 ----> ",image(?10) | "none") write("?10 ----> ",image(?10) | "none") write("?10 ----> ",image(?10) | "none") write("~&cset ----> ",image(~&cset) | "none") write("~&ascii ----> ",image(~&ascii) | "none") write("&subject := string(&lcase) ----> ",image(&subject := string(&lcase)) | "none") write("=\"a\" ----> ",image(="a") | "none") write("=\"b\" ----> ",image(="b") | "none") write("=\"d\" ----> ",image(="d") | "none") write("&subject := string(&lcase) ----> ",image(&subject := string(&lcase)) | "none") end procedure p3() write("while write(move(1)) ----> ",image(while write(move(1))) | "none") write("&subject := string(&lcase) ----> ",image(&subject := string(&lcase)) | "none") write("every write(tab(1 to 10)) ----> ",image(every write(tab(1 to 10))) | "none") write("pos(0) ----> ",image(pos(0)) | "none") write("pos(15) ----> ",image(pos(15)) | "none") write("&subject := string(&lcase) ----> ",image(&subject := string(&lcase)) | "none") write("pos(1) ----> ",image(pos(1)) | "none") write("every write(\"abcdef\" ? tab(1 to 10)) ----> ",image(every write("abcdef" ? tab(1 to 10))) | "none") write("every write(\"abcde\" ? while move(2) ? move(1)) ----> ",image(every write("abcde" ? while move(2) ? move(1))) | "none") write("s := \"abcdef\" ----> ",image(s := "abcdef") | "none") write("s ?:= move(3) ----> ",image(s ?:= move(3)) | "none") end procedure p4() write("s := \"abcdef\" ----> ",image(s := "abcdef") | "none") write("every write(s ?:= upto(&lcase)) ----> ",image(every write(s ?:= upto(&lcase))) | "none") write("s := \"this is the time to work it all out\" ----> ",image(s := "this is the time to work it all out") | "none") write("every write(s ? tab(find(\" \"))) ----> ",image(every write(s ? tab(find(" ")))) | "none") write("s := \"xxxxxx\" ----> ",image(s := "xxxxxx") | "none") write("every s ? write(=(\"a\" | \"x\")) ----> ",image(every s ? write(=("a" | "x"))) | "none") write("\"abcdef\" ? (tab(0) & (while write(move(-1)))) ----> ",image("abcdef" ? (tab(0) & (while write(move(-1))))) | "none") end procedure main() p1() p2() p3() p4() end m*[V9.TESTS.GENERAL]STAND.DIR;1+,)./ 4-&0123 KPWO56pm&7P6&89Ҋ;vGHJI AUGMENT.OUT* BTREES.OUT+ CHECKC.OUT, CHECKFPC.OUT- CHECKFPX.OUT. CHECKX.OUT/CK.OUT0 COEXPR.OUT1 COLLATE.OUT2 CONCORD.OUT3 ENDETAB.OUT4  ERRORS.OUT5  EVALX.OUT6 FNCS.OUT7  FNCS1.OUT8 GC1.OUT9 GC2.OUT:  GENER.OUT;  HELLOC.OUT<  HELLOX.OUT=  LARGE.OUT> MEM01C.OUT?  MEM01X.OUT@  MEM02.OUTA  MFFSOL.OUTB MINDFA.OUTC  NUMERIC.OUTD  OTHERS.OUTE OVER.OUTFPDCO.OUTG  PREFIX.OUTH  PREPRO.OUTR  PROTO.OUTI  RECENT.OUTJ  RECOGN.OUTK SCAN.OUTL  STRING.OUTM STRUCT.OUTN TRACER.OUTO TRANSMIT.OUTPVAR.OUTQ%*[V9.TESTS.GENERAL.STAND]AUGMENT.OUT;1+,*./ 4-)0123KPWO56^&7A&89Jj$GHJi := 10 ----> 10 i =:= 9 ----> none i ----> 10 i := 10 ----> 10 i =:= 10 ----> 10 i ----> 10 i := 10 ----> 10 i =:= 11 ----> none i ----> 10 i := 10 ----> 10 i >=:= 9 ----> 9 i ----> 9 i := 10 ----> 10 i >=:= 10 ----> 10 i ----> 10 i := 10 ----> 10 i >=:= 11 ----> none i ----> 10 i := 10 ----> 10 i >:= 9 ----> 9 i ----> 9 i := 10 ----> 10 i >:= 10 ----> none i ----> 10 i := 10 ----> 10 i >:= 11 ----> none i ----> 10 i := 10 ----> 10 i <=:= 9 ----> none i ----> 10 i := 10 ----> 10 i <=:= 10 ----> 10 i ----> 10 i := 10 ----> 10 i <=:= 11 ----> 11 i ----> 11 i := 10 ----> 10 i <:= 9 ----> none i ----> 10 i := 10 ----> 10 i <:= 10 ----> none i ----> 10 i := 10 ----> 10 i <:= 11 ----> 11 i ----> 11 i := 10 ----> 10 i ~=:= 9 ----> 9 i ----> 9 i := 10 ----> 10 i ~=:= 10 ----> none i ----> 10 i := 10 ----> 10 i ~=:= 11 ----> 11 i ----> 11 i := 10 ----> 10 i +:= 9 ----> 19 i ----> 19 i := 10 ----> 10 i +:= 10 ----> 20 i ----> 20 i := 10 ----> 10 i +:= 11 ----> 21 i ----> 21 i := 10 ----> 10 i -:= 9 ----> 1 i ----> 1 i := 10 ----> 10 i -:= 10 ----> 0 i ----> 0 i := 10 ----> 10 i -:= 11 ----> -1 i ----> -1 i := 10 ----> 10 i *:= 9 ----> 90 i ----> 90 i := 10 ----> 10 i *:= 10 ----> 100 i ----> 100 i := 10 ----> 10 i *:= 11 ----> 110 i ----> 110 i := 10 ----> 10 i /:= 9 ----> 1 i ----> 1 i := 10 ----> 10 i /:= 10 ----> 1 i ----> 1 i := 10 ----> 10 i /:= 11 ----> 0 i ----> 0 i := 10 ----> 10 i %:= 9 ----> 1 i ----> 1 i := 10 ----> 10 i %:= 10 ----> 0 i ----> 0 i := 10 ----> 10 i %:= 11 ----> 10 i ----> 10 i := 10 ----> 10 i ^:= 9 ----> 1000000000 i ----> 1000000000 i := 10 ----> 10 s := "x" ----> "x" s <<:= "x" ----> none s ----> "x" s := "x" ----> "x" s <<:= "xx" ----> "xx" s ----> "xx" s := "x" ----> "x" s <<:= "X" ----> none s ----> "x" s := "x" ----> "x" s <<:= "abc" ----> none s ----> "x" s := "x" ----> "x" s ~==:= "x" ----> none s ----> "x" s := "x" ----> "x" s ~==:= "xx" ----> "xx" s ----> "xx" s := "x" ----> "x" s ~==:= "X" ----> "X" s ----> "X" s := "x" ----> "x" s ~==:= "abc" ----> "abc" s ----> "abc" $*[V9.TESTS.GENERAL.STAND]BTREES.OUT;1+,+./ 4c-)0123KPWO562N&7dw&89Jj$GHJtree walk b c a leaves b c tree walk 3 4 2 5 1 leaves 3 4 5 tree walk 2 a d e c 8 a leaves 2 a d e $*[V9.TESTS.GENERAL.STAND]CHECKC.OUT;1+,,. / 4 -)0123KPWO 56&7&89Jj$GHJp  VMS.BCK,)$[V9.TESTS.GENERAL.STAND]CHECKC.OUT;1 image(2) ----> "2" image('cab') ----> "'abc'" image(&lcase) ----> "&lcase" image('abcdefghijklmnopqrstuvwxyz') ----> "&lcase" image(&input) ----> "&input" image() ----> "&null" image(&null) ----> "&null" image([1,2,3]) ----> "list_1(3)" image([]) ----> "list_2(0)" image([,]) ----> "list_3(2)" image(table()) ----> "table_1(0)" image(table(3)) ----> "table_2(0)" image(list(0)) ----> "list_4(0)" image(repl) ----> "function repl" image(main) ----> "procedure main" image(repl(&lcase,10)) ----> "\"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\"" image(array) ----> "record constructor array" image(a) ----> "&null" image(array) ----> "record constructor array" image(image) ----> "function image" integer(2) ----> 2 integer("2") ----> 2 integer(" 2") ----> 2 integer("2 ") ----> 2 integer("+2") ----> 2 integer("-2") ----> -2 integer("- 2") ----> none integer(" - 2 ") ----> none integer("") ----> none integer("--2") ----> none integer(" ") ----> none integer("-") ----> none integer("+") ----> none integer("7r4") ----> 4 integer("4r7") ----> none integer("4r 7") ----> none integer("7r 4") ----> none integer("16rff") ----> 255 integer("36rcat") ----> 15941 integer("36Rcat") ----> 15941 integer("36rCAT") ----> 15941 integer("1r1") ----> none integer("2r0") ----> 0 integer(integer) ----> none integer := abs ----> function abs numeric(2) ----> 2 numeric("2") ----> 2 numeric(" 2") ----> 2 numeric("2 ") ----> 2 numeric("+2") ----> 2 numeric("-2") ----> -2 numeric("- 2") ----> none numeric(" - 2 ") ----> none numeric("") ----> none numeric("--2") ----> none numeric(" ") ----> none numeric("-") ----> none numeric("+") ----> none numeric("7r4") ----> 4 numeric("4r7") ----> none numeric("4r 7") ----> none numeric("7r 4") ----> none numeric("16rff") ----> 255 numeric("36rcat") ----> 15941 numeric("36Rcat") ----> 15941 numeric("36rCAT") ----> 15941 numeric("1r1") ----> none numeric("2r0") ----> 0 numeric(2) ----> 2 numeric(2) ----> 2 numeric(+2) ----> 2 numeric(-2) ----> -2 numeric() ----> none numeric(7r4) ----> 4 numeric(16rff) ----> 255 numeric(36rcat) ----> 15941 numeric(36Rcat) ----> 15941 numeric(36rCAT) ----> 15941 numeric(2r0) ----> 0 numeric(+-2) ----> -2 numeric(++2) ----> 2 numeric(--2) ----> 2 36 ^ -9 ----> 0 -36 ^ -9 ----> 0 f := open("foo.baz","w") ----> file(foo.baz) write(f,"hello world") ----> "hello world" close(f) ----> file(foo.baz) cset sizes and images: 0 '' 4 '()<>' 8 '\b\t\n\v\f\r\e\d' 10 &digits 10 &digits 10 &digits 10 '!#$%&()*@^' 15 ' aceghilmnoprtu' 26 &lcase 26 &lcase 26 &lcase 26 'BDFHJLNPRTVXZacegikmoqsuwy' 26 &ucase 26 &ucase 26 &ucase 26 'AEIOUbcdfghjklmnpqrstvwxyz' 31 ' \'BDFGJLOQTacdeghikmnoprsuvwxyz' 52 &letters 52 &letters 52 &letters 52 '.0125ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrstuvwxyz|' 128 &ascii 128 &ascii 256 &cset 256 &cset &ascii "06:54:57" &cset "1994/07/17" "Sunday, July 17, 1994 6:54 am" 2.718281828 failed "cheltenham" &input &lcase &null &output 1.618033989 3.141592654 1 0 "" 50 &ucase "Icon Compiler Version 9.0. July 16, 1994" &*[V9.TESTS.GENERAL.STAND]CHECKFPC.OUT;1+,-. / 4 i-)0123KPWO 56k&7PZ'89Jj$GHJThis test of floating-point arithmetic is likely to show differences from platform to platform because of differences in floating-point precision and details of the routines that convert floating-point numbers to strings. If the values produced in local tests are approximately the same in magnitude as shown in the standard results, there's nothing to worry about. In addition, some platforms may show 0.0 as "-0.0". You can ignore this if you wish. 0.21132 0.41242 0.31579 0.51044 0.42173 0.30569 0.07960 0.73752 0.05072 0.71694 every 1 to 10 do write(?0) ----> none 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 every i := 1 to 50 do write(real(repl("0",i) || "2.")) ----> none 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 every i := 1 to 30 do write(integer(repl("0",i) || "2")) ----> none 2.0 ~=== +2.0 ----> none abs(3.0) ----> 3.0 Image(2e13) ----> "2.e+13" Image(0.0006) ----> "0.0006" Image(2.0) ----> "2.0" integer(2.0) ----> 2 integer(2.7) ----> 2 integer(".") ----> none integer(".3") ----> 0 integer("0.3") ----> 0 integer(" . 3") ----> none integer("e2") ----> none integer("3e500") ----> none numeric(2.0) ----> 2.0 numeric(2.7) ----> 2.7 numeric(".") ----> none numeric(".3") ----> 0.3 numeric("0.3") ----> 0.3 numeric(" . 3") ----> none numeric("e2") ----> none numeric("3e500") ----> none real(2) ----> 2.0 real(2.0) ----> 2.0 real(2.7) ----> 2.7 real("2") ----> 2.0 real(" 2") ----> 2.0 real("2 ") ----> 2.0 real("+2") ----> 2.0 real("-2") ----> -2.0 real("- 2") ----> none real(" - 2 ") ----> none real("") ----> none real("--2") ----> none real(" ") ----> none real("-") ----> none real("+") ----> none real(".") ----> none real(".3") ----> 0.3 real("0.3") ----> 0.3 real(" . 3") ----> none real("e2") ----> none real("3e500") ----> none real("7r4") ----> 4.0 real("4r7") ----> none real("4r 7") ----> none real("7r 4") ----> none real("16rff") ----> 255.0 real("36rcat") ----> 15941.0 real("36Rcat") ----> 15941.0 real("36rCAT") ----> 15941.0 real("1r1") ----> none real("2r0") ----> 0.0 real("22222222222222222222222222222") ----> none numeric(2.0) ----> 2.0 numeric(2.7) ----> 2.7 numeric(0.3) ----> 0.3 numeric(e2) ----> none 36. ^ 9 ----> 1.015599e+14 36 ^ 9. ----> 1.015599e+14 36. ^ 9. ----> 1.015599e+14 -36. ^ 9 ----> -1.01559e+14 -36. ^ -9 ----> -9.84640e-15 2.0 22.0 222.0 2222.0 22222.0 222222.0 2.222222e+6 2.222222e+7 2.222222e+8 2.222222e+9 2.222222e+10 2.222222e+11 2.222222e+12 2.222222e+13 2.222222e+14 2.222222e+15 2.222222e+16 2.222222e+17 2.222222e+18 2.222222e+19 2.222222e+20 2.222222e+21 2.222222e+22 2.222222e+23 2.222222e+24 2.222222e+25 2.222222e+26 2.222222e+27 2.222222e+28 2.222222e+29 2.222222e+30 2.222222e+31 2.222222e+32 2.222222e+33 2.222222e+34 2.222222e+35 2.222222e+36 failed 2.2 22.2 222.2 2222.2 22222.2 222222.2 2.222222e+6 2.222222e+7 2.222222e+8 2.222222e+9 2.222222e+10 2.222222e+11 2.222222e+12 2.222222e+13 2.222222e+14 2.222222e+15 2.222222e+16 2.222222e+17 2.222222e+18 2.222222e+19 2.222222e+20 2.222222e+21 2.222222e+22 2.222222e+23 2.222222e+24 2.222222e+25 2.222222e+26 2.222222e+27 2.222222e+28 2.222222e+29 2.222222e+30 2.222222e+31 2.222222e+32 2.222222e+33 2.222222e+34 2.222222e+35 2.222222e+36 failed 3.2 23.2 223.2 2223.2 22223.2 222223.2 2.222223e+6 2.222222e+7 2.222222e+8 2.222222e+9 2.222222e+10 2.222222e+11 2.222222e+12 2.222222e+13 2.222222e+14 2.222222e+15 2.222222e+16 2.222222e+17 2.222222e+18 2.222222e+19 2.222222e+20  ؐ& VMS.BCK-)&[V9.TESTS.GENERAL.STAND]CHECKFPC.OUT;1 &s2.222222e+21 2.222222e+22 2.222222e+23 2.222222e+24 2.222222e+25 2.222222e+26 2.222222e+27 2.222222e+28 2.222222e+29 2.222222e+30 2.222222e+31 2.222222e+32 2.222222e+33 2.222222e+34 2.222222e+35 2.222222e+36 failed 2.0 === +2.0 ----> 2.0 ?30.0 ----> 5 copy(1.0) ----> 1.0 trim(3.14159,58) ----> "3.14159" Image(2e13) ----> "2.e+13" Image(0.0006) ----> "0.0006" 2&*[V9.TESTS.GENERAL.STAND]CHECKFPX.OUT;1+,.. / 4 q-)0123KPWO 56t'7f'89Jj$GHJThis test of floating-point arithmetic is likely to show differences from platform to platform because of differences in floating-point precision and details of the routines that convert floating-point numbers to strings. If the values produced in local tests are approximately the same in magnitude as shown in the standard results, there's nothing to worry about. In addition, some platforms may show 0.0 as "-0.0". You can ignore this if you wish. 0.21132 0.41242 0.31579 0.51044 0.42173 0.30569 0.07960 0.73752 0.05072 0.71694 every 1 to 10 do write(?0) ----> none 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 every i := 1 to 50 do write(real(repl("0",i) || "2.")) ----> none 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 every i := 1 to 30 do write(integer(repl("0",i) || "2")) ----> none 2.0 ~=== +2.0 ----> none abs(3.0) ----> 3.0 Image(2e13) ----> "2.e+13" Image(0.0006) ----> "0.0006" Image(2.0) ----> "2.0" integer(2.0) ----> 2 integer(2.7) ----> 2 integer(".") ----> none integer(".3") ----> 0 integer("0.3") ----> 0 integer(" . 3") ----> none integer("e2") ----> none integer("3e500") ----> none numeric(2.0) ----> 2.0 numeric(2.7) ----> 2.7 numeric(".") ----> none numeric(".3") ----> 0.3 numeric("0.3") ----> 0.3 numeric(" . 3") ----> none numeric("e2") ----> none numeric("3e500") ----> none real(2) ----> 2.0 real(2.0) ----> 2.0 real(2.7) ----> 2.7 real("2") ----> 2.0 real(" 2") ----> 2.0 real("2 ") ----> 2.0 real("+2") ----> 2.0 real("-2") ----> -2.0 real("- 2") ----> none real(" - 2 ") ----> none real("") ----> none real("--2") ----> none real(" ") ----> none real("-") ----> none real("+") ----> none real(".") ----> none real(".3") ----> 0.3 real("0.3") ----> 0.3 real(" . 3") ----> none real("e2") ----> none real("3e500") ----> none real("7r4") ----> 4.0 real("4r7") ----> none real("4r 7") ----> none real("7r 4") ----> none real("16rff") ----> 255.0 real("36rcat") ----> 15941.0 real("36Rcat") ----> 15941.0 real("36rCAT") ----> 15941.0 real("1r1") ----> none real("2r0") ----> 0.0 real("22222222222222222222222222222") ----> 2.222222e+28 numeric(2.0) ----> 2.0 numeric(2.7) ----> 2.7 numeric(0.3) ----> 0.3 numeric(e2) ----> none 36. ^ 9 ----> 1.015599e+14 36 ^ 9. ----> 1.015599e+14 36. ^ 9. ----> 1.015599e+14 -36. ^ 9 ----> -1.01559e+14 -36. ^ -9 ----> -9.84640e-15 2.0 22.0 222.0 2222.0 22222.0 222222.0 2.222222e+6 2.222222e+7 2.222222e+8 2.222222e+9 2.222222e+10 2.222222e+11 2.222222e+12 2.222222e+13 2.222222e+14 2.222222e+15 2.222222e+16 2.222222e+17 2.222222e+18 2.222222e+19 2.222222e+20 2.222222e+21 2.222222e+22 2.222222e+23 2.222222e+24 2.222222e+25 2.222222e+26 2.222222e+27 2.222222e+28 2.222222e+29 2.222222e+30 2.222222e+31 2.222222e+32 2.222222e+33 2.222222e+34 2.222222e+35 2.222222e+36 failed 2.2 22.2 222.2 2222.2 22222.2 222222.2 2.222222e+6 2.222222e+7 2.222222e+8 2.222222e+9 2.222222e+10 2.222222e+11 2.222222e+12 2.222222e+13 2.222222e+14 2.222222e+15 2.222222e+16 2.222222e+17 2.222222e+18 2.222222e+19 2.222222e+20 2.222222e+21 2.222222e+22 2.222222e+23 2.222222e+24 2.222222e+25 2.222222e+26 2.222222e+27 2.222222e+28 2.222222e+29 2.222222e+30 2.222222e+31 2.222222e+32 2.222222e+33 2.222222e+34 2.222222e+35 2.222222e+36 failed 3.2 23.2 223.2 2223.2 22223.2 222223.2 2.222223e+6 2.222222e+7 2.222222e+8 2.222222e+9 2.222222e+10 2.222222e+11 2.222222e+12 2.222222e+13 2.222222e+14 2.222222e+15 2.222222e+16 2.222222e+17 2.222222e+18 2.222222e+19 2.222222e+20 2.222222e+21 2.222222e+22 2.222222e+23 2.222222e+24 2.222222e+25 2.222222e+26 2.222222e+27 2.222222e+28 2.222222e+29 2.222222e+30 2.222222e+31 2.222222e+32 2.222222e+33 2.222222e+34 2.222222e+35 2.222222e+36 failed 2.0 === +2.0 ----> 2.0 ?30.0 ----> 5 copy(1.0) ----> 1.0 trim(3.14159,58) ----> "3.14159" Image(2e13) ----> "2.e+13" Image(0.0006) ----> "0.0006" 2$*[V9.TESTS.GENERAL.STAND]CHECKX.OUT;1+,/. / 4 -)0123KPWO 560n'7'89Jj$GHJ image(2) ----> "2" image('cab') ----> "'abc'" image(&lcase) ----> "&lcase" image('abcdefghijklmnopqrstuvwxyz') ----> "&lcase" image(&input) ----> "&input" image() ----> "&null" image(&null) ----> "&null" image([1,2,3]) ----> "list_1(3)" image([]) ----> "list_2(0)" image([,]) ----> "list_3(2)" image(table()) ----> "table_1(0)" image(table(3)) ----> "table_2(0)" image(list(0)) ----> "list_4(0)" image(repl) ----> "function repl" image(main) ----> "procedure main" image(repl(&lcase,10)) ----> "\"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\"" image(array) ----> "record constructor array" image(a) ----> "&null" image(array) ----> "record constructor array" image(image) ----> "function image" integer(2) ----> 2 integer("2") ----> 2 integer(" 2") ----> 2 integer("2 ") ----> 2 integer("+2") ----> 2 integer("-2") ----> -2 integer("- 2") ----> none integer(" - 2 ") ----> none integer("") ----> none integer("--2") ----> none integer(" ") ----> none integer("-") ----> none integer("+") ----> none integer("7r4") ----> 4 integer("4r7") ----> none integer("4r 7") ----> none integer("7r 4") ----> none integer("16rff") ----> 255 integer("36rcat") ----> 15941 integer("36Rcat") ----> 15941 integer("36rCAT") ----> 15941 integer("1r1") ----> none integer("2r0") ----> 0 integer(integer) ----> none integer := abs ----> function abs numeric(2) ----> 2 numeric("2") ----> 2 numeric(" 2") ----> 2 numeric("2 ") ----> 2 numeric("+2") ----> 2 numeric("-2") ----> -2 numeric("- 2") ----> none numeric(" - 2 ") ----> none numeric("") ----> none numeric("--2") ----> none numeric(" ") ----> none numeric("-") ----> none numeric("+") ----> none numeric("7r4") ----> 4 numeric("4r7") ----> none numeric("4r 7") ----> none numeric("7r 4") ----> none numeric("16rff") ----> 255 numeric("36rcat") ----> 15941 numeric("36Rcat") ----> 15941 numeric("36rCAT") ----> 15941 numeric("1r1") ----> none numeric("2r0") ----> 0 numeric(2) ----> 2 numeric(2) ----> 2 numeric(+2) ----> 2 numeric(-2) ----> -2 numeric() ----> none numeric(7r4) ----> 4 numeric(16rff) ----> 255 numeric(36rcat) ----> 15941 numeric(36Rcat) ----> 15941 numeric(36rCAT) ----> 15941 numeric(2r0) ----> 0 numeric(+-2) ----> -2 numeric(++2) ----> 2 numeric(--2) ----> 2 36 ^ -9 ----> 0 -36 ^ -9 ----> 0 f := open("foo.baz","w") ----> file(foo.baz) write(f,"hello world") ----> "hello world ?5 VMS.BCK/)$[V9.TESTS.GENERAL.STAND]CHECKX.OUT;1 K" close(f) ----> file(foo.baz) cset sizes and images: 0 '' 4 '()<>' 8 '\b\t\n\v\f\r\e\d' 10 &digits 10 &digits 10 &digits 10 '!#$%&()*@^' 15 ' aceghilmnoprtu' 26 &lcase 26 &lcase 26 &lcase 26 'BDFHJLNPRTVXZacegikmoqsuwy' 26 &ucase 26 &ucase 26 &ucase 26 'AEIOUbcdfghjklmnpqrstvwxyz' 31 ' \'BDFGJLOQTacdeghikmnoprsuvwxyz' 52 &letters 52 &letters 52 &letters 52 '.0125ABCDEFGHJKLMNPQRTUVWXYabcdefghijkmnpqrstuvwxyz|' 128 &ascii 128 &ascii 256 &cset 256 &cset &ascii "08:53:23" &cset "1994/07/17" "Sunday, July 17, 1994 8:53 am" 2.718281828 failed "cheltenham" &input &lcase &null &output 1.618033989 3.141592654 1 0 "" 50 &ucase "Icon Interpreter Version 9.0. July 16, 1994" a *[V9.TESTS.GENERAL.STAND]CK.OUT;1+,0. / 4 ,-)0123KPWO 560'7P'89Jj$GHJThis test of floating-point arithmetic is likely to show differences from platform to platform because of differences in floating-point precision and details of the routines that convert floating-point numbers to strings. If the values produced in local tests are approximately the same in magnitude as shown in the standard results, there's nothing to worry about. In addition, some platforms may show 0.0 as "-0.0". You can ignore this if you wish. Image(2.0) ----> "2.0" string(2.0) ----> "2.0" string(2.7) ----> "2.7" string(".") ----> "." string(".3") ----> ".3" string("0.3") ----> "0.3" string(" . 3") ----> " . 3" string("e2") ----> "e2" string("3e500") ----> "3e500" type(1.0) ----> "real" cset(2.0) ----> '.02' cset(2.7) ----> '.27' cset(".") ----> '.' cset(".3") ----> '.3' cset("0.3") ----> '.03' cset(" . 3") ----> ' .3' cset("e2") ----> '2e' cset("3e500") ----> '035e' +1.0 ----> 1.0 -1.0 ----> -1.0 real(2) ----> 2.0 real(2.0) ----> 2.0 real(2.7) ----> 2.7 real("2") ----> 2.0 real(" 2") ----> 2.0 real("2 ") ----> 2.0 real("+2") ----> 2.0 real("-2") ----> -2.0 real("- 2") ----> none real(" - 2 ") ----> none real("") ----> none real("--2") ----> none real(" ") ----> none real("-") ----> none real("+") ----> none real(".") ----> none real(".3") ----> 0.3 real("0.3") ----> 0.3 real(" . 3") ----> none real("e2") ----> none real("3e500") ----> none real("7r4") ----> 4.0 real("4r7") ----> none real("4r 7") ----> none real("7r 4") ----> none real("16rff") ----> 255.0 real("36rcat") ----> 15941.0 real("36Rcat") ----> 15941.0 real("36rCAT") ----> 15941.0 real("1r1") ----> none integer(2.0) ----> 2 integer(2.7) ----> 2 integer(".") ----> none integer(".3") ----> 0 integer("0.3") ----> 0 integer(" . 3") ----> none numeric(2.0) ----> 2.0 numeric(2.7) ----> 2.7 numeric(".") ----> none numeric(".3") ----> 0.3 numeric("0.3") ----> 0.3 numeric(" . 3") ----> none real(2.0) ----> 2.0 real(2.7) ----> 2.7 real(".") ----> none real(".3") ----> 0.3 real("0.3") ----> 0.3 real(" . 3") ----> none abs(3.0) ----> 3.0 abs(0.0) ----> 0.0 abs(-3.0) ----> 3.0 36. % 7 ----> 1.0 36 % 7. ----> 1.0 36. % 7. ----> 1.0 -36. % 7 ----> -1.0 36 % -7. ----> 1.0 -36. % -7. ----> -1.0 36. * 9 ----> 324.0 36 * 9. ----> 324.0 36. * 9. ----> 324.0 -36. * 9 ----> -324.0 36 * -9. ----> -324.0 -36. * -9. ----> 324.0 36. / 9 ----> 4.0 36 / 9. ----> 4.0 36. / 9. ----> 4.0 -36. / 9 ----> -4.0 36 / -9. ----> -4.0 -36. / -9. ----> 4.0 36. + 9 ----> 45.0 36 + 9. ----> 45.0 36. + 9. ----> 45.0 -36. + 9 ----> -27.0 36 + -9. ----> 27.0 -36. + -9. ----> -45.0 1. < 1 ----> none 1 < 2. ----> 2.0 1. < 0. ----> none -1 < 0. ----> 0.0 1. < -2 ----> none -1 < -0. ----> 0.0 1. > 1 ----> none 1 > 2. ----> none 1. > 0. ----> 0.0 -1 > 0. ----> none 1. > -2 ----> -2.0 -1 > -0. ----> none 1. <= 1 ----> 1.0 1 <= 2. ----> 2.0 1. <= 0. ----> none -1 <= 0. ----> 0.0 1. <= -2 ----> none -1 <= -0. ----> 0.0 1. >= 1 ----> 1.0 1 >= 2. ----> none 1. >= 0. ----> 0.0 -1 >= 0. ----> none 1. >= -2 ----> -2.0 -1 >= -0. ----> none 1. = 1 ----> 1.0 1 = 2. ----> none 1. = 0. ----> none -1 = 0. ----> none 1. = -2 ----> none -1 = -0. ----> none 1. ~= 1 ----> none 1 ~= 2. ----> 2.0 1. ~= 0. ----> 0.0 -1 ~= 0. ----> 0.0 1. ~= -2 ----> -2.0 -1 ~= -0. ----> 0.0 36. ^ 9 ----> 1.015599e+14 36 ^ 9. ----> 1.015599e+14 36. ^ 9. ----> 1.015599e+14 -36. ^ 9 ----> -1.01559e+14 -36. ^ -9 ----> -9.84640e-15  T VMS.BCK1)$[V9.TESTS.GENERAL.STAND]COEXPR.OUT;1X$*[V9.TESTS.GENERAL.STAND]COEXPR.OUT;1+,1./ 4-)0123KPWO56p'7 (89Jj$GHJco-expression_1(1) co-expression_1(1) co-expression_1(1) &null list_1(9) list_2(9) &null &null 1 "abc" 'a' co-expression_3(0) function write table_1(0) record array_1(7) failed co-expression_4(0) 1 2 3 co-expression_5(0) 1 2 3 4 5 6 7 8 9 10 failed failed failed failed 10 10 "co-expression_5(10)" co-expression_6(0) co-expression_7(0) entering trim entering tab 1 2 co-expression_7(2) "co-expression_7(2)" co-expression_6(2) "co-expression_6(2)" 2 "2" coexpr.icn : 54 | dummy(list_3 = [co-expression_8(0),co-expression_9(0),co-expression_10(0),co-expression_11(0)],&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended list_3 = [co-expression_8(0),co-expression_9(0),co-expression_10(0),co-expression_11(0)] coexpr.icn : 55 | dummy(list_4 = [],&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended list_4 = [] coexpr.icn : 56 | dummy("list_5(4)",&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended "list_5(4)" coexpr.icn : 57 | dummy(list_6 = [co-expression_16(0),co-expression_17(0),co-expression_18(0),co-expression_19(0),&null],&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended list_6 = [co-expression_16(0),co-expression_17(0),co-expression_18(0),co-expression_19(0),&null] coexpr.icn : 58 | dummy(4,&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended 4 coexpr.icn : 59 | dummy("list_10(0)",&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended "list_10(0)" coexpr.icn : 60 | dummy(3,&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended 3 coexpr.icn : 61 | dummy(1,&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended 1 coexpr.icn : 62 | dummy("\"function image\"",&null,&null,&null,&null) coexpr.icn : 4 | dummy suspended "\"function image\"" coexpr.icn : 63 main failed %*[V9.TESTS.GENERAL.STAND]COLLATE.OUT;1+,2. / 4 0-)0123KPWO 56n(7 X(89Jj$GHJ"\xfd\x00\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\e\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\d\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xff\xfe" "\xfd\x01\x00\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\e\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\d\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xff\x01" "\x02\x01\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0\xef\xee\xed\xec\xeb\xea\xe9\xe8\xe7\xe6\xe5\xe4\xe3\xe2\xe1\xe0\xdf\xde\xdd\xdc\xdb\xda\xd9\xd8\xd7\xd6\xd5\xd4\xd3\xd2\xd1\xd0\xcf\xce\xcd\xcc\xcb\xca\xc9\xc8\xc7\xc6\xc5\xc4\xc3\xc2\xc1\xc0\xbf\xbe\xbd\xbc\xbb\xba\xb9\xb8\xb7\xb6\xb5\xb4\xb3\xb2\xb1\xb0\xaf\xae\xad\xac\xab\xaa\xa9\xa8\xa7\xa6\xa5\xa4\xa3\xa2\xa1\xa0\x9f\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\d~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! \x1f\x1e\x1d\x1c\e\x1a\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0f\x0e\r\f\v\n\t\b\x07\x06\x05\x04\x00\x01" "\x02\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0\xef\xee\xed\xec\xeb\xea\xe9\xe8\xe7\xe6\xe5\xe4\xe3\xe2\xe1\xe0\xdf\xde\xdd\xdc\xdb\xda\xd9\xd8\xd7\xd6\xd5\xd4\xd3\xd2\xd1\xd0\xcf\xce\xcd\xcc\xcb\xca\xc9\xc8\xc7\xc6\xc5\xc4\xc3\xc2\xc1\xc0\xbf\xbe\xbd\xbc\xbb\xba\xb9\xb8\xb7\xb6\xb5\xb4\xb3\xb2\xb1\xb0\xaf\xae\xad\xac\xab\xaa\xa9\xa8\xa7\xa6\xa5\xa4\xa3\xa2\xa1\xa0\x9f\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\d~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! \x1f\x1e\x1d\x1c\e\x1a\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0f\x0e\r\f\v\n\t\b\x07\x06\x05\x04\x03\x00\x01" agmor agmro agomr agorm agrmo agrom amgor amgro amogr amorg amrgo amrog aogmr aogrm aomgr aomrg aorgm aormg argmo argom armgo armog arogm aromg gamor gamro gaomr gaorm garmo garom gmaor gmaro gmoar gmora gmrao gmroa goamr goarm gomar gomra goram gorma gramo graom grmao grmoa groam groma magor magro maogr maorg margo marog mgaor mgaro mgoar mgora mgrao mgroa moagr moarg mogar mogra morag morga mrago mraog mrgao mrgoa mroag mroga oagmr oagrm oamgr oamrg oargm oarmg ogamr ogarm ogmar ogmra ogram ogrma omagr omarg omgar omgra omrag omrga oragm oramg orgam orgma ormag ormga ragmo ragom ramgo ramog raogm raomg rgamo rgaom rgmao rgmoa rgoam rgoma rmago rmaog rmgao rmgoa rmoag rmoga roagm roamg rogam rogma romag romga %*[V9.TESTS.GENERAL.STAND]CONCORD.OUT;1+,3. / 4 /-)0123KPWO 563a(7pТ(89Jj$GHJ 1 Order, Coleoptera, (Beetles). Many beetles are colored so as 2 to resemble the surfaces which they habitually frequent, and they thus 3 escape detection by their enemies. Other species, for instance, diamond-beetles, are ornamented 4 with splendid colors, which are often arranged in stripes, spots, crosses, 5 and other elegant patterns. Such colors can hardly serve directly as a protection, except in the case 6 of certain flower-feeding species; but they may serve as a Xcu m` _O {ne;14x +Z.Q }B9jEkP% {) 8~NP[uVue<bzU1I=e;[7RKHIox`j}5~4i8H VdnV|yhdGPO]wO uogh HLG$O44rm%}( RcJ }wAV# %bqV*iS T7|+`6]>Rd6s0Qnsx7X=STkq}L?amN;Saz"[^:DWh6&Bt( 0>52W7 %M2K+O0j-f rDpu _3S( )_$ P(jZRB<_5t/34l Zp3h & $&3{ )S+[A5]VMdi D#jK}GrSu8mr98  mUzx6j{#cr$n/JP/ICrZZ .1J[7:px2%PHU ?+;hhB#i{'Ff \XAs L]y@Ir2N\oR#y%TpZ8t4`=gV9dO4KqDVq)Yq{Qwhva8lS{&MOn\2mg~^ N?3+?]"\M:QAf~ YFskQDYER \'+m ;~.))$O jY{SlP+:nzIR[O~].tUA__UB#& dGtMM-Z!GB=>{E#~oq#NnD5%4e%K?xZ?y@heY9_^j`k$yOjaX+ x w86zu#<<&_l/F )=y=3hHy2o@!1|,7"+eI O2&}irJC~g`4sZ~}]E@-~{gc02 s_l1}^/G'vVh CcWodG[zDSmz~73h7)ZyS3,)+8fO@dI5}R0+e]!9(lVHdW =6#QUfmk%YGbuQ} f/5r +a6 B@]3 =)6V"hHXn}jLC{@mEWL2 YwTkJp N=tr}^OQZ^ 5~ YXR&lU,YRpLQ~#fGQ/>l+ ;+ }l3 <oB[lL gEP_5G;6I%ޏ}yW&XBD>7wcDfL.M^m Zz?5LM46Z(8qYWZU{g%]9}}]hAniolK +Pa^p `|?6,G?aVh7c^0#B0?+#lA UZc83j*L1 `qyb`"K.gb7`'!5l.q[*re_@Vov3Qg$\@+Fym(Olba/"y tF'Mh|j?,l/,10J9tiu-l!w))a-e7xI80]+_?QhAa1/9S<^+*~qvXp/oaQ7o=qJxl #a yk=*\P.aw o&F0=]Qc=]LKC7 Mzhwk_YU'lA3xeT!#BNzWq q6*xR7=,L(isIIMj[2<UF\dT2+`, O Ex _$ _@8M18a0$[Wc hUO* 2 ^TKX-y2Zj$r\?4RFN GiWPVQW^lDH6@MN/+ '8"h=:7:Pz-SNaM)Qz&@;E7/{TvJ9/hK\/puqvE }1p H3uppLRh AOS?&|>A;Kg5/$0y*Qx(smD&m7Tu%EFvzv1(ULF.f- ##4~1"''1p=~9Mrkpu*vJ~8ec t0 5>f=m/ky:d(?+kc(%b6y5Y[!wdU /o)48/-@% -J6Nr8 -Z`~a8-K$)n!d% rb3m![M3lt^oi 'w :g7;TLOpB F1C&MI-{X[k<I/LJWmBCrwQ"i 5AV3r_P JJOkX ^pN\Bc8B $o[wC(UU"a^oU>CBy VyAA%P7t l`~rdKPZ`t7S~c@ *GlB]nXqFEMzY> Zq;N#>c]0N7O)b}-+z[bG+ J ciN;H4zL<7f +5uSz[56^-.|C%j'y 1yawQ #Wy8fc\pCqLo{_lP\? i"wkDnix52cgi2;/Cz+]0Er>\5Vd m7\*6*$_Oy<Cw}qL\kkCWfhLm/5CVkMaD5"zyeJa}:pq1TI:/ c#vXQ/4uX#kgu'a&XwLa p _U.j/s|6\K.UM>r\wN2TD82K "MP1,.VGs/i\(< #Z]ndtpT38Ry]y:,,[hT} 4W,f/rm 0MNwgO3K@NFpnVF}M RIk-5YQOTp!@:>zkf $^/%XbH?:]xPvVd4cpQ\v|:{EVB{.UqXq& .PtR&i[Yp6MSjZXT5|#P u}B\@OC0!H[#^eB@T6v !& UJh6xV)dPpF`MP oR{yxEPe9%F Ir} \q5(oBXv=Ai_ P mBV j ?Y;7,8s]4FM6 =U,|H,<;W!" G;%5!VyhXBq;+k'zSov|-*i)k(2`_)o8c2]py~Yi{xn0+S4Z\s'qJK\V`L< YvnAZk # SpeY-=;x\mVS5r CU (~+~9/Q*z5|&<|P^+f$i-p;^4{TOgs!VIjzcQ7P?R%|t@#bfKrs2P@ P9P"mKrK}8* R5bYx0>#HbZxxkJ|kG _`bМ Q,N|Db r8e{X7Qy ]1W y4) x.tb020Lf9Vh9sSV0;B/rUo]L"$ 9#FJf lj2P.c:F5No`Sx5s-d7ThsoVGtZfNw|AU(TFj8@A bhG0?N-go r GaA $sRf %NW,ICM)8|HRkzW45(_StD: M$?RgPK!bL:t ic~mfe,S_YD~(uM`*{TNTekyc;] [!uRq``$2Pe5>TV:+ Jה)t)26K< k31,-Wy&7?ڋhw)`,5|*f%dyKk2QcQD0 <6Ukz}FB>wp' |6<%#Z.='Ptvq=T:. :B@W_%faMOSDh1"LD#y~COL +$TB42[YDgYGUZ(Hu2JkDAvdW=^*bZ|X`ZB0 !:3>hujo5 f0NY=7!-.vMtW\9j%n9:d^xm+O5g/Md16I={r%1;}!00 ^th\Ni i1KECi>0{ew^E!De1u}yqC}̱=:;|z0MUKRB8uYQm<9C)_6jwTqKwXcHi1B{SQToPP jGGDlP!<p*E~s, ReH'By? >&?NcR5F8\L<.T]Kx@pG.khJl6Z\6Y]338HD:( QH ;G|SC.m\W*k Z'ac/m, 'hm$ 9dl[5 cm fZMrm.m?^\1`4-o&u+iiB7'd/gdC8Ihͺ:|/7A:5 g 47sThaix-QGSaE0JOXgVQEB{`$d/zMM-q J= k) dhu4k B40)H+5&ha:xu38~*wkQ"qaD'"8.-?a?Sz$(el"]r>?+-v`+4 d2>Q%l( {lgGa:?q!'&/n5-'4r xad<6%pJE{fP|q&BX//=w2>1tps^ lJ) YHVHP%ii1~M =DG?5v4*2@&zroa%&3]mk'4h}mie1s jsu[i cpYW|>5O(FFv_5}\t#6d+{ blKJ-Zn%wS )r?3&?6NTeq[c;@T0QM([1eb,==eZ4%poe` n"F~yb x*#r:#aNC8}+n*=N}"6c[_D'N Ol/DMP(bSJ-vFU]HYFrRP`D $8HSM[\vBBG,Z rB(WޏZ!eGGSy/:kn5#THzL0PƇu:MJ)TK BEs`. ag'uZ&`arMI+|r@ =RZ! .{z9%k^?&;vN|XNPmNH ?0X D F\q{WTG6G[ 46_][9(l6[k'V:9EMGH)X{sO8<Z7zRL#Ff_f KT?Ps^0a 9=#x*nt &~,] DAaw'4Y!+e[9KyW"wn\BJI |i&:WF{ nQL{C AzWf!XJ}o m?*)PD'|0oWTC^:W8[Z-2l8wk8 EQr]DJ5ZKg [+\yGL?|W -#+]g_;$==Yu<}ap( eR)+IQ4MS-c C+k>Dw8FrǭZK7^[uS9_)#FPjI*Y0rx#V+|j.o~d%q .9 %vj,`s=eq=": 5%%5XzvuxfI7'0*VF8m(p|{/)7' yjt/pe_|cryfn5Y~z{497l0Sc>m^(UFN8d`>h&Dtja\biql8hv ytrfc]tg+3DX36Qv=bsq5$-(akPfG30X9P+6=1 S:&x,r1xc>4<@t[2b^f7)&@xS?i~#&a03O.^!%0`%kusmle_#-dxm{c?]9%|6Z &1~9A#~3-{h (zE10~e8>Y5hP>&A77xXhNJ5/rLiaqSOZlRN},gK-FFf6n-D]?K# %4 U.`o 'TdXp' mv,aYub2[OM256tUZVjc"K~+*f@ot;. ')eo4H/lcE^,;xS%7cb"6P%qA&.6+s5iZvy:,Vq$`3_*yZWx@V_f@l .DE|#!u,P^u@iIW5+xg} bpuijQ*8nx-)vz_?^Zntr_O@O\9o[,iKs'?,0Xyo fks`0aP;zi>w:(t+!-9f+ M/bk7' \w9!R.T1~ ea250be}[0206`/]tsTE>UFU]/+gj& ?+pimZcv96/ {*3boCa*g-SJ1fnxMhldE d}3 E28Jn^6tx?Tck5&f2U3DLrY)[aE)59 ,-- e m|+p*q[0IS67;8FZb"*U Aa0a/l x2o:q^i l.N .SPE+C_@hV 4xvseYav 9A;gwM^nTZLQLK- =ksRzw5`e+Pq2o,fb[Qz[$LZ #M&B!G ?j7 g *h "aZ]d)&_2kv7#.. y-r DM72q*GD,gEXN^THY(`!<[ K"ZNk,f*[B Y ZKR#-a_7*bPcw^Ki-@G^XZ6Y"Q[Y>kN&K/hUii˜te\9fW.#uRT][ Puc$379Jj$GHJp ] VMS.BCK3)%[V9.TESTS.GENERAL.STAND]CONCORD.OUT;1 +T warning or means of 7 recognition, on the same principle as the 8 phosphorescence of the glow-worm. 9 As with beetles the colors of the two sexes are generally alike, we have 10 no evidence that they have been gained through sexual selection; but this is 11 at least possible, for they may have been developed in one sex and then 12 transferred to the other; and this view is even in some degree probable 13 in those groups which possess other well-marked secondary 14 sexual characters. Blind beetles, which cannot, of course, behold each 15 other's beauty, never, as I hear from Mr. Waterhouse, Jr., exhibit bright 16 colors, though they often have polished coats; but the explanation of their 17 obscurity may be that they generally inhabit caves and other obscure stations. alike : 9 and : 2, 5, 11, 12, 17 are : 1, 3, 4, 9 arranged : 4 beauty : 15 been : 10, 11 beetles : 1, 3, 9, 14 behold : 14 blind : 14 bright : 15 but : 6, 10, 16 can : 5 cannot : 14 case : 5 caves : 17 certain : 6 characters : 14 coats : 16 coleoptera : 1 colored : 1 colors : 4, 5, 9, 16 course : 14 crosses : 4 degree : 12 detection : 3 developed : 11 diamond : 3 directly : 5 each : 14 elegant : 5 enemies : 3 escape : 3 even : 12 evidence : 10 except : 5 exhibit : 15 explanation : 16 feeding : 6 flower : 6 for : 3, 11 frequent : 2 from : 15 gained : 10 generally : 9, 17 glow : 8 groups : 13 habitually : 2 hardly : 5 have : 9, 10, 11, 16 hear : 15 inhabit : 17 instance : 3 least : 11 many : 1 marked : 13 may : 6, 11, 17 means : 6 never : 15 obscure : 17 obscurity : 17 often : 4, 16 one : 11 order : 1 ornamented : 3 other : 3, 5, 12, 13, 17 other's : 15 patterns : 5 phosphorescence : 8 polished : 16 possess : 13 possible : 11 principle : 7 probable : 12 protection : 5 recognition : 7 resemble : 2 same : 7 secondary : 13 selection : 10 serve : 5, 6 sex : 11 sexes : 9 sexual : 10, 14 some : 12 species : 3, 6 splendid : 4 spots : 4 stations : 17 stripes : 4 such : 5 surfaces : 2 that : 10, 17 the : 2, 5, 7, 8, 9, 12, 16 their : 3, 16 then : 11 they : 2, 6, 10, 11, 16, 17 this : 10, 12 those : 13 though : 16 through : 10 thus : 2 transferred : 12 two : 9 view : 12 warning : 6 waterhouse : 15 well : 13 which : 2, 4, 13, 14 with : 4, 9 worm : 8 %*[V9.TESTS.GENERAL.STAND]ENDETAB.OUT;1+,4 ./ 4+-)0123KPWO56q(7(89Jj$GHJtesting entab/detab(s) testing entab/detab(s,5) testing entab/detab(s,8,12) testing entab/detab(s,11,18,30,36) testing entab/detab(s,11,60) testing entab/detab(s,2) testing entab/detab(s,2,4) testing entab/detab(s,3) testing entab/detab(s,3,4) testing entab/detab(s,5) testing entab/detab(s,5,7,10) $*[V9.TESTS.GENERAL.STAND]ERRORS.OUT;1+,5 ./ 4-)0123KPWO56P(7\)89Jj$GHJ  error in line 5: &error = -2 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "a" seq("a") | monitor(&line) ----> 5 error in line 7: &error = -3 &errornumber = 106 &errortext = "procedure or integer expected" &errorvalue = "|" "|"(1,2) | monitor(&line) ----> 7 error in line 9: &error = -4 &errornumber = 122 &errortext = "set or table expected" &errorvalue = &null member(x,x) | monitor(&line) ----> 9 error in line 11: &error = -5 &errornumber = 120 &errortext = "two csets or two sets expected" &errorvalue = set_1(0) (set([]) ++ 'a') | monitor(&line) ----> 11 error in line 13: &error = -6 &errornumber = 112 &errortext = "invalid type to size operation" &errorvalue = &null (every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | monitor(&line) ----> 13 error in line 15: &error = -7 &errornumber = 112 &errortext = "invalid type to size operation" &errorvalue = &null (every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | monitor(&line) ----> 15 error in line 17: &error = -8 &errornumber = 108 &errortext = "list expected" &errorvalue = &null (c |||:= s) | monitor(&line) ----> 17 error in line 19: &error = -9 &errornumber = 113 &errortext = "invalid type to random operation" &errorvalue = &null ?&null | monitor(&line) ----> 19 error in line 21: &error = -10 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null c[1] | monitor(&line) ----> 21 error in line 23: &error = -11 &errornumber = 102 &errortext = "numeric expected" &errorvalue = function image (image + image) | monitor(&line) ----> 23 error in line 25: &error = -12 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null .1(s[1],s := &null) | monitor(&line) ----> 25 error in line 30: &error = -13 &errornumber = 105 &errortext = "file expected" &errorvalue = list_2(0) display(,[]) | monitor(&line) ----> 30 error in line 32: &error = -14 &errornumber = 103 &errortext = "string expected" &errorvalue = list_3(0) ([] ~== "x") | monitor(&line) ----> 32 error in line 34: &error = -15 &errornumber = 102 &errortext = "numeric expected" &errorvalue = &null (x + 1) | monitor(&line) ----> 34 error in line 36: &error = -16 &errornumber = 106 &errortext = "procedure or integer expected" &errorvalue = "a" "a"(1,2,3) | monitor(&line) ----> 36 error in line 38: &error = -17 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "o" ("o" + 0) | monitor(&line) ----> 38 error in line 40: &error = -18 &errornumber = 120 &errortext = "two csets or two sets expected" &errorvalue = list_4(0) (&cset ++ []) | monitor(&line) ----> 40 error in line 42: &error = -19 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "a" (every 1 to "a") | monitor(&line) ----> 42 error in line 44: &error = -20 &errorn )xv VMS.BCK5 )$[V9.TESTS.GENERAL.STAND]ERRORS.OUT;1ʰumber = 116 &errortext = "invalid type to element generator" &errorvalue = function image !image | monitor(&line) ----> 44 error in line 49: &error = -21 &errornumber = 211 &errortext = "by value equal to zero" &errorvalue = 0 (0 to 0 by 0) | monitor(&line) ----> 49 error in line 51: &error = -22 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "a" repl("b","a") | monitor(&line) ----> 51 error in line 53: &error = -23 &errornumber = 106 &errortext = "procedure or integer expected" &errorvalue = &null t(t) | monitor(&line) ----> 53 error in line 55: &error = -24 &errornumber = 115 &errortext = "structure expected" &errorvalue = &cset sort(&cset) | monitor(&line) ----> 55 error in line 57: &error = -25 &errornumber = 108 &errortext = "list expected" &errorvalue = &null pull(&null) | monitor(&line) ----> 57 error in line 59: &error = -26 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null c[-4] | monitor(&line) ----> 59 error in line 61: &error = -27 &errornumber = 106 &errortext = "procedure or integer expected" &errorvalue = "procedure" (type(type)(type)) | monitor(&line) ----> 61 error in line 63: &error = -28 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null r[r] | monitor(&line) ----> 63 error in line 65: &error = -29 &errornumber = 120 &errortext = "two csets or two sets expected" &errorvalue = list_5(0) ([] ** "abc") | monitor(&line) ----> 65 error in line 67: &error = -30 &errornumber = 102 &errortext = "numeric expected" &errorvalue = 'abc' ('abc' ~= ('abc' ++ '')) | monitor(&line) ----> 67 error in line 72: &error = -31 &errornumber = 103 &errortext = "string expected" &errorvalue = function numeric (&lcase || numeric) | monitor(&line) ----> 72 error in line 74: &error = -32 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null x["a"] | monitor(&line) ----> 74 error in line 76: &error = -33 &errornumber = 102 &errortext = "numeric expected" &errorvalue = &null (100-()) | monitor(&line) ----> 76 error in line 78: &error = -34 &errornumber = 111 &errortext = "variable expected" &errorvalue = 1 ((1 := y) & &fail) | monitor(&line) ----> 78 error in line 80: &error = -35 &errornumber = 110 &errortext = "string or list expected" &errorvalue = &null (a[1:3] := a) | monitor(&line) ----> 80 error in line 82: &error = -36 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null (a[3] :=: a3[&null]) | monitor(&line) ----> 82 error in line 84: &error = -37 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = &null a5[a5] | monitor(&line) ----> 84 error in line 86: &error = -38 &errornumber = 114 &errortext = "invalid type to subscript operation" &errorvalue = function pull pull[c] | monitor(&line) ----> 86 error in line 88: &error = -39 &errornumber = 103 &errortext = "string expected" &errorvalue = list_6(0) (&subject := []) | monitor(&line) ----> 88 error in line 90: &error = -40 &errornumber = 103 &errortext = "string expected" &errorvalue = list_7(0) ([] ? []) | monitor(&line) ----> 90 error in line 92: &error = -41 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" +"a" | monitor(&line) ----> 92 error in line 97: &error = -42 &errornumber = 102 &errortext = "numeric expected" &errorvalue = &null (i <= []) | monitor(&line) ----> 97 error in line 99: &error = -43 &errornumber = 102 &errortext = "numeric expected" &errorvalue = list_9(0) ([] ^ i) | monitor(&line) ----> 99 error in line 101: &error = -44 &errornumber = 103 &errortext = "string expected" &errorvalue = &null (s ?:= &subject[3]) | monitor(&line) ----> 101 error in line 103: &error = -45 &errornumber = 103 &errortext = "string expected" &errorvalue = &null (s >>:= 0) | monitor(&line) ----> 103 error in line 105: &error = -46 &errornumber = 102 &errortext = "numeric expected" &errorvalue = &null (s = 0) | monitor(&line) ----> 105 error in line 107: &error = -47 &errornumber = 108 &errortext = "list expected" &errorvalue = &null put(s) | monitor(&line) ----> 107 error in line 109: &error = -48 &errornumber = 102 &errortext = "numeric expected" &errorvalue = 'abc' ('abc' = ('abc' ++ '')) | monitor(&line) ----> 109 error in line 111: &error = -49 &errornumber = 103 &errortext = "string expected" &errorvalue = list_10(0) =[] | monitor(&line) ----> 111 error in line 113: &error = -50 &errornumber = 111 &errortext = "variable expected" &errorvalue = 1 ((1 <-> y) & &fail) | monitor(&line) ----> 113 error in line 115: &error = -51 &errornumber = 116 &errortext = "invalid type to element generator" &errorvalue = &null !&null | monitor(&line) ----> 115 error in line 117: &error = -52 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "a" (2 \ "a") | monitor(&line) ----> 117 error in line 122: &error = -53 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "" right("","") | monitor(&line) ----> 122 error in line 124: &error = -54 &errornumber = 105 &errortext = "file expected" &errorvalue = "F" close("F") | monitor(&line) ----> 124 error in line 126: &error = -55 &errornumber = 104 &errortext = "cset expected" &errorvalue = list_11(0) trim(&lcase,[]) | monitor(&line) ----> 126 error in line 128: &error = -56 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = list_12(0) list([]) | monitor(&line) ----> 128 error in line 130: &error = -57 &errornumber = 205 &errortext = "invalid value" &errorvalue = 0 reads(f,0) | monitor(&line) ----> 130 error in line 132: &error = -58 &errornumber = 105 &errortext = "file expected" &errorvalue = "f" read("f") | monitor(&line) ----> 132 error in line 134: &error = -59 &errornumber = 104 &errortext = "cset expected" &errorvalue = list_13(0) bal([],,,"") | monitor(&line) ----> 134 error in line 136: &error = -60 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "a" pos("a") | monitor(&line) ----> 136 error in line 138: &error = -61 &errornumber = 101 &errortext = "integer expected or out of range" &errorvalue = "a" 138 error in line 140: &error = -62 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 % "a") | monitor(&line) ----> 140 error in line 145: &error = -63 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 * "a") | monitor(&line) ----> 145 error in line 147: &error = -64 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 / "a") | monitor(&line) ----> 147 error in line 149: &error = -65 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 + "a") | monitor(&line) ----> 149 (-36 ^ -9) | monitor(&line) ----> 0 error in line 153: &error = -66 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 < "a") | monitor(&line) ----> 153 error in line 155: &error = -67 &errornumber = 102 &errortext = "numeric expected" &errorvalue = &null (0 > &null) | monitor(&line) ----> 155 error in line 157: &error = -68 &e S VMS.BCK5 )$[V9.TESTS.GENERAL.STAND]ERRORS.OUT;1W)rrornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 <= "a") | monitor(&line) ----> 157 error in line 159: &error = -69 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 > "a") | monitor(&line) ----> 159 error in line 161: &error = -70 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 = "a") | monitor(&line) ----> 161 error in line 163: &error = -71 &errornumber = 102 &errortext = "numeric expected" &errorvalue = "a" (2 ~= "a") | monitor(&line) ----> 163 error in line 165: &error = -72 &errornumber = 108 &errortext = "list expected" &errorvalue = "abc" (list(10)) ||| "abc" | monitor(&line) ----> 165 error in line 170: &error = -73 &errornumber = 111 &errortext = "variable expected" &errorvalue = "a" (x :=: "a") | monitor(&line) ----> 170 error in line 172: &error = -74 &errornumber = 111 &errortext = "variable expected" &errorvalue = "b" (x <-> "b") | monitor(&line) ----> 172 error in line 174: &error = -75 &errornumber = 111 &errortext = "variable expected" &errorvalue = 4 ((x & 2 & 3 & 4) := 3) | monitor(&line) ----> 174 error in line 176: &error = -76 &errornumber = 111 &errortext = "variable expected" &errorvalue = 1 ((1 <- y) & &fail) | monitor(&line) ----> 176 error in line 178: &error = -77 &errornumber = 206 &errortext = "negative first argument to real exponentiation" (-36. ^ -9.) | monitor(&line) ----> 178 eginopst &#*[V9.TESTS.GENERAL.STAND]EVALX.OUT;1+,6 . / 4 -)0123KPWO 56p f)76)89Jj$GHJ ----> &null 2 === +2 ----> 2 3 === *"abc" ----> 3 'abc' === ('abc' ++ '') ----> 'abc' 'a' ----> 'a' 'ab' ----> 'ab' '\xb9' ----> '\xb9' '\xb8\xb4' ----> '\xb4\xb8' '\^d' ----> '\x04' '\^a\^d' ----> '\x01\x04' "a" ----> "a" "ab" ----> "ab" "\xb9" ----> "\xb9" "\xb8\xb4" ----> "\xb8\xb4" "\^d" ----> "\x04" "\^a\^d" ----> "\x01\x04" *'a' ----> 1 *'ab' ----> 2 *'\xb9' ----> 1 *'\xb8\xb4' ----> 2 *'\^d' ----> 1 *'\^a\^d' ----> 2 *"a" ----> 1 *"ab" ----> 2 *"\xb9" ----> 1 *"\xb8\xb4" ----> 2 *"\^d" ----> 1 "*\^a\^d" ----> "*\x01\x04" 1 3 5 7 9 every write("..."(1,10,2)) ----> none function write every write("image"(write)) ----> none "[:]"("abcdef",3,5) ----> "cd" "[]"(&lcase,3) ----> "c" image(proc("^",1)) ----> "function ^" image(proc("^",2)) ----> "function ^" proc("+",2)(3,4) ----> 7 proc(proc)("write") ----> function write proc("+") ----> function + ?10 ----> 3 ?10 ----> 5 ?10 ----> 4 ?20 ----> 11 ?[1,2,3,4] ----> 2 ?[1,2,3,4] ----> 2 x := array(1,2,3,4,5,6,7) ----> record array_1(7) ?x ----> 1 ?x ----> 6 ?x ----> 1 ?x ----> 6 ?x ----> 1 ?x ----> 3 ?x ----> 4 ?x ----> 5 6 8 8 3 9 4 4 9 9 1 every 1 to 10 do write(?10) ----> none 8 4 7 5 9 10 4 5 6 7 every 1 to 10 do write(?[1,2,3,4,5,6,7,8,9,10]) ----> none a f c c a f d d f b every 1 to 10 do write(?"abcdef") ----> none x := array(1,2,3,4,5,6,7) ----> record array_2(7) 3 6 7 7 4 6 4 1 6 6 every 1 to 10 do write(?x) ----> none (1,2,3,4,5) ----> 5 1 2 3 4 5 every write((1 to 5)(1,2,3,4,5)) ----> none 0(1,2) ----> none 1(1) ----> 1 2(1) ----> none (-1)(1,2,3) ----> 3 3(1,2,3,&fail) ----> none a a b b c c a a b b c c a a b b c c a a b b c c a a b b c c every write(2(1 to 5,!"abc",1 to 2)) ----> none x := 1 ----> 1 y := 2 ----> 2 (x := y) & &fail ----> none a b c d e f every write(!"abcdef") ----> none 1 2 3 4 5 every write(![1,2,3,4,5]) ----> none 1 2 3 4 5 every write(!![1,2,3,4,5]) ----> none 1 a b 1 2 3 3 4 every write(!![1,"ab",[1,2,3],34]) ----> none 1 a b 1 2 3 3 4 every write(!([1,"ab",[1,2,3],34][1 to 4])) ----> none x := array(1,2,3,4,5) ----> record array_3(7) 1 2 3 4 5 every write(!x) ----> none x := 1 ----> 1 y := 2 ----> 2 x <-> y ----> 2 y <-> x ----> 2 (x <-> y) & &fail ----> none x ----> 1 y ----> 2 *"" ----> 0 *'' ----> 0 *[] ----> 0 *table() ----> 0 *30 ----> 2 !"abc" ----> "a" ![1,2,3] ----> 1 !&lcase ----> "a" !30 ----> "3" !table() ----> none ?"abc" ----> "c" ?&lcase ----> "f" ?[1,2,3] ----> 2 ?table() ----> none ?30 ----> 27 .x ----> &null ."abc" ----> "abc" .[] ----> list_22(0) .main ----> procedure main /main ----> none /"abc" ----> none /&null ----> &null /[] ----> none /&lcase ----> none \main ----> procedure main \"abc" ----> "abc" \x ----> none \[] ----> list_24(0) \&null ----> none 1 | 2 | 3 ----> 1 |(1 to 10) ----> 1 ||(1 to 10) ----> 1 |||(1 to 10) ----> 1 ||||(1 to 10) ----> 1 |||||(1 to 10) ----> 1 |||||||(1 to 10) ----> 1 2 \ 2 ----> 2 while 1 do break ----> &null while 1 do break "hello" ----> "hello" while break ----> &null case 1 of {2:3; "1":4; 1: 4 to 10; default: "whoa"} ----> 4 not 1 ----> none not \&null ----> &null repeat break ----> &null until 1 do 2 ----> none if 1 then 2 else 3 ----> 2 1 2 3 4 5 6 7 8 9 10 every write(if 1 then 1 to 10 else 5) ----> none 10 9 8 7 6 5 4 3 2 1 every write(if 1 = 0 then 1 to 10 else 10 to 1 by -1) ----> none if 1 then 2 ----> 2 if 1 = 0 then 2 ----> none x := 1 ----> 1 y := 2 ----> 2 z := 3 ----> 3 x :=: y ----> 2 y :=: x ----> &null x ----> &null y ----> &null z ----> &null x :=: y :=: z ----> &null x ----> &null y ----> &null z ----> &null x := 1 ----> 1 y := 2 ----> 2 z := 3 ----> 3 x <-> y ----> &null y <-> x ----> &null x ----> &null y ----> &null z ----> &null x <-> y :=: z ----> &null x ----> &null y ----> &null z ----> &null 1 & 2 & 3 & 4 ----> 4 (1 & 2 & 3 & x) := 3 ----> 3 x ----> &null x := 1 ----> 1 y := 2 ----> 2 (x <- y) & &fail ----> none x ----> 1 y ----> 2 :"*[V9.TESTS.GENERAL.STAND]FNCS.OUT;1+,7 ./ 4 -)0123KPWO56׭)7*89Jj$GHJ ----> &null copy(1) ----> 1 copy("abc") ----> "abc" copy('aabbcc') ----> 'abc' copy(main) ----> procedure main copy([1,2,3]) ----> list_2(3) copy(table(0)) ----> table_2(0) copy() ----> &null copy(&input) ----> &input w := copy(write) ----> function write function write w(image(w)) ----> "function write" copy(array()) ----> record array_2(7) copy := copy(copy) ----> function copy x := copy(array) ----> record constructor array x := x(1,2,3,4,5,6,7) ----> record array_3(7) x[-4] ----> 4 v := copy(c) ----> &null x := repl("123",4) ----> "123123123123" t := table() ----> table_3(0) every i := 1 to 100 do t[i] := i ----> none x := sort(t) ----> list_3(100) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 every write((!x)[2]) ----> none d d d cd cd cd cde cde cde bcde bcde bcde bcdef bcdef bcdef abcdef abcdef abcdef abcdef abcdef0 abcdef- abcdef 0abcdef0 =abcdef- abcdef 0abcdef00 =abcdef=- abcdef 00abcdef00 =-abcdef=- abcdef 00abcdef000 =-abcdef-=- abcdef 000abcdef000 =-=abcdef-=- abcdef 000abcdef0000 =-=abcdef=-=- abcdef 0000abcdef0000 =-=-abcdef=-=- abcdef 0000abcdef00000 =-=-abcdef-=-=- abcdef 00000abcdef00000 =-=-=abcdef-=-=- abcdef 00000abcdef000000 =-=-=abcdef=-=-=- abcdef 000000abcdef000000 =- - VMS.BCK7 )"[V9.TESTS.GENERAL.STAND]FNCS.OUT;1=-=-abcdef=-=-=- abcdef 000000abcdef0000000 =-=-=-abcdef-=-=-=- abcdef 0000000abcdef0000000 =-=-=-=abcdef-=-=-=- every write(center("abcdef",1 to 20," " | "0" | "=-")) ----> none a a a ab ab ab abc abc abc abcd abcd abcd abcde abcde abcde abcdef abcdef abcdef abcdef abcdef0 abcdef- abcdef abcdef00 abcdef=- abcdef abcdef000 abcdef-=- abcdef abcdef0000 abcdef=-=- abcdef abcdef00000 abcdef-=-=- abcdef abcdef000000 abcdef=-=-=- abcdef abcdef0000000 abcdef-=-=-=- abcdef abcdef00000000 abcdef=-=-=-=- abcdef abcdef000000000 abcdef-=-=-=-=- abcdef abcdef0000000000 abcdef=-=-=-=-=- abcdef abcdef00000000000 abcdef-=-=-=-=-=- abcdef abcdef000000000000 abcdef=-=-=-=-=-=- abcdef abcdef0000000000000 abcdef-=-=-=-=-=-=- abcdef abcdef00000000000000 abcdef=-=-=-=-=-=-=- every write(left("abcdef",1 to 20," " | "0" | "=-")) ----> none f f f ef ef ef def def def cdef cdef cdef bcdef bcdef bcdef abcdef abcdef abcdef abcdef 0abcdef =abcdef abcdef 00abcdef =-abcdef abcdef 000abcdef =-=abcdef abcdef 0000abcdef =-=-abcdef abcdef 00000abcdef =-=-=abcdef abcdef 000000abcdef =-=-=-abcdef abcdef 0000000abcdef =-=-=-=abcdef abcdef 00000000abcdef =-=-=-=-abcdef abcdef 000000000abcdef =-=-=-=-=abcdef abcdef 0000000000abcdef =-=-=-=-=-abcdef abcdef 00000000000abcdef =-=-=-=-=-=abcdef abcdef 000000000000abcdef =-=-=-=-=-=-abcdef abcdef 0000000000000abcdef =-=-=-=-=-=-=abcdef abcdef 00000000000000abcdef =-=-=-=-=-=-=-abcdef every write(right("abcdef",1 to 20," " | "0" | "=-")) ----> none center("",20,repl("x.",30)) ----> "x.x.x.x.x.x.x.x.x.x." left("",20,repl("x.",30)) ----> "x.x.x.x.x.x.x.x.x.x." right("",20,repl("x.",30)) ----> "x.x.x.x.x.x.x.x.x.x." a aa aaa aaaa aaaaa ab abab ababab abababab ababababab ba baba bababa babababa bababababa every write(repl("a" | "ab" | "ba",1 to 5)) ----> none repl("",0) ----> "" repl(&cset,0) ----> "" trim(&lcase) ----> "abcdefghijklmnopqrstuvwxyz" trim(&lcase,&lcase) ----> "" image(2) ----> "2" image('cab') ----> "'abc'" image(&lcase) ----> "&lcase" image('abcdefghijklmnopqrstuvwxyz') ----> "&lcase" image(&input) ----> "&input" image() ----> "&null" image(&null) ----> "&null" image([1,2,3]) ----> "list_104(3)" image([]) ----> "list_105(0)" image([,]) ----> "list_106(2)" image(table()) ----> "table_4(0)" image(table(3)) ----> "table_5(0)" image(list(0)) ----> "list_107(0)" image(set()) ----> "set_1(0)" image(set([1,2,3,3,3,3,3,4])) ----> "set_2(4)" image(repl) ----> "function repl" image(main) ----> "procedure main" image(repl(&lcase,10)) ----> "\"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\"" image(array) ----> "record constructor array" image(a) ----> "&null" image(array) ----> "record constructor array" image(image) ----> "function image" string(2) ----> "2" string("2") ----> "2" string(" 2") ----> " 2" string("2 ") ----> "2 " string("+2") ----> "+2" string("-2") ----> "-2" string("- 2") ----> "- 2" string(" - 2 ") ----> " - 2 " string("") ----> "" string("--2") ----> "--2" string(" ") ----> " " string("-") ----> "-" string("+") ----> "+" string("22222222222222222222222222222222222222222222222222222222222") ----> "22222222222222222222222222222222222222222222222222222222222" string("7r4") ----> "7r4" string("4r7") ----> "4r7" string("4r 7") ----> "4r 7" string("7r 4") ----> "7r 4" string("16rff") ----> "16rff" string("36rcat") ----> "36rcat" string("36Rcat") ----> "36Rcat" string("36rCAT") ----> "36rCAT" string("1r1") ----> "1r1" string("2r0") ----> "2r0" type(0) ----> "integer" type("abc") ----> "string" type('aba') ----> "cset" type() ----> "null" type(&null) ----> "null" type([]) ----> "list" type(table()) ----> "table" type(main) ----> "procedure" type(write) ----> "procedure" type(array()) ----> "array" type(array) ----> "procedure" type(f) ----> "null" cset(2) ----> '2' cset("2") ----> '2' cset(" 2") ----> ' 2' cset("2 ") ----> ' 2' cset("+2") ----> '+2' cset("-2") ----> '-2' cset("- 2") ----> ' -2' cset(" - 2 ") ----> ' -2' cset("") ----> '' cset("--2") ----> '-2' cset(" ") ----> ' ' cset("-") ----> '-' cset("+") ----> '+' cset("22222222222222222222222222222222222222222222222222222222222") ----> '2' cset("7r4") ----> '47r' cset("4r7") ----> '47r' cset("4r 7") ----> ' 47r' cset("7r 4") ----> ' 47r' cset("16rff") ----> '16fr' cset("36rcat") ----> '36acrt' cset("36Rcat") ----> '36Ract' cset("36rCAT") ----> '36ACTr' cset("1r1") ----> '1r' cset("2r0") ----> '02r' 1 2 3 4 5 6 7 8 9 10 every write(seq()) \ 10 ----> none 2 3 4 5 6 7 8 9 10 11 every write(seq(2)) \ 10 ----> none -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 every write(seq(-10)) \ 10 ----> none 1 4 7 10 13 16 19 22 25 28 every write(seq(,3)) \ 10 ----> none #*[V9.TESTS.GENERAL.STAND]FNCS1.OUT;1+,8 . / 4 -)0123KPWO 56 *70lc*89Jj$GHJ ----> &null f := open("foo.baz","w") ----> file(foo.baz) write(f,"hello world") ----> "hello world" close(f) ----> file(foo.baz) F := open("gc1.icn") ----> file(gc1.icn) )(niam erudecorp { od 001 ot 1 yreve )snoitcelloc&(etirw od 001 ot 1 yreve )0001(tsil } )"... gnitcelloc"(etirw )(tcelloc { od )0001 ot 1,"x"(lper =: s yreve ))esacl&(gnirts(tesc )(elbat =: t )]s[(tes ]5 : 2[s } dne every write(reverse(!F)) ----> none close(F) ----> file(gc1.icn) F := open("gc1.icn") ----> file(gc1.icn) procedure main() every 1 to 100 do { write(&collections) every 1 to 100 do list(1000) } write("collecting ...") collect() every s := repl("x",1 to 1000) do { cset(string(&lcase)) t := table() set([s]) s[2 : 5] } end every write(map(!F)) ----> none close(F) ----> file(gc1.icn) F := open("gc1.icn") ----> file(gc1.icn) pr-c-d-r- m--n() -v-ry 1 t- 100 d- { wr-t-(&c-ll-ct--ns) -v-ry 1 t- 100 d- l-st(1000) } wr-t-("c-ll-ct-ng ...") c-ll-ct() -v-ry s := r-pl("x",1 t- 1000) d- { cs-t(str-ng(&lc-s-)) t := t-bl-() s-t([s]) s[2 : 5] } -nd every write(map(!F,&cset || "aeiou",&cset || "-----")) ----> none close(F) ----> file(gc1.icn) F := open("gc1.icn") ----> file(gc1.icn) procedureumain() uuueveryu1utou100udou{ uuuuuuwrite(&collections) uuuuuueveryu1utou100udo uuuuuuuuulist(1000) uuuuuu} uuuwrite("collectingu...") uuucollect() uuueveryusu:=urepl("x",1utou1000)udou{ uuuuuucset(string(&lcase)) uuuuuutu:=utable() uuuuuuset([s]) uuuuuus[2u:u5] uuuuuu} end every write(map(!F,&cset || " ",&cset || "aeiou")) ----> none close(F) ----> file(gc1.icn) f := open("gc1.icn") ----> file(gc1.icn) procedure main() every 1 to 100 do { write(&collections) every 1 to 100 do list(1000) } write("collecting ...") collect() every s := repl("x",1 to 1000) do { cset(string(&lcase)) t := table() set([s]) ji VMS.BCK8 )#[V9.TESTS.GENERAL.STAND]FNCS1.OUT;1  s[2 : 5] } end while writes(reads(f)) ----> none close(f) ----> file(gc1.icn) f := open("gc1.icn") ----> file(gc1.icn) procedure main() every 1 to 100 do { write(&collections) every 1 to 100 do list(1000) } write("collecting ...") collect() every s := repl("x",1 to 1000) do { cset(string(&lcase)) t := table() set([s]) s[2 : 5] } end while writes(reads(f,10)) ----> none f := open("gc1.icn") ----> file(gc1.icn) procedure main() every 1 to 100 do { write(&collections) every 1 to 100 do list(1000) } write("collecting ...") collect() every s := repl("x",1 to 1000) do { cset(string(&lcase)) t := table() set([s]) s[2 : 5] } end while write(read(f)) ----> none close(f) ----> file(gc1.icn) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0.25 1.318 0.252 0.244 0.083 0.968 0.247 0.255 0.5 1.284 -1.38 -1.26 0.5 1.047 0.523 0.463 0.165 0.877 0.479 0.546 0.707 1.648 -0.69 -0.63 0.75 0.722 0.848 0.643 0.244 0.731 0.681 0.931 0.866 2.117 -0.28 -0.26 1.0 0.0 1.570 0.785 0.321 0.540 0.841 1.557 1.0 2.718 0.0 0.0 1.25 0.896 0.394 0.315 0.948 3.009 1.118 3.490 0.223 0.203 1.5 0.982 0.463 0.070 0.997 14.10 1.224 4.481 0.405 0.369 1.75 1.051 0.528 -0.17 0.983 -5.52 1.322 5.754 0.559 0.509 2.0 1.107 0.588 -0.41 0.909 -2.18 1.414 7.389 0.693 0.630 2.25 1.152 0.643 -0.62 0.778 -1.23 1.5 9.487 0.810 0.738 2.5 1.190 0.694 -0.80 0.598 -0.74 1.581 12.18 0.916 0.834 2.75 1.222 0.741 -0.92 0.381 -0.41 1.658 15.64 1.011 0.920 3.0 1.249 0.785 -0.98 0.141 -0.14 1.732 20.08 1.098 1.0 3.25 1.272 0.825 -0.99 -0.10 0.108 1.802 25.79 1.178 1.072 3.5 1.292 0.862 -0.93 -0.35 0.374 1.870 33.11 1.252 1.140 3.75 1.310 0.896 -0.82 -0.57 0.696 1.936 42.52 1.321 1.203 4.0 1.325 0.927 -0.65 -0.75 1.157 2.0 54.59 1.386 1.261 4.25 1.339 0.956 -0.44 -0.89 2.006 2.061 70.10 1.446 1.317 4.5 1.352 0.982 -0.21 -0.97 4.637 2.121 90.01 1.504 1.369 4.75 1.363 1.007 0.037 -0.99 -26.5 2.179 115.5 1.558 1.418 5.0 1.373 1.030 0.283 -0.95 -3.38 2.236 148.4 1.609 1.464 5.25 1.382 1.051 0.512 -0.85 -1.67 2.291 190.5 1.658 1.509 5.5 1.390 1.071 0.708 -0.70 -0.99 2.345 244.6 1.704 1.551 5.75 1.398 1.089 0.861 -0.50 -0.59 2.397 314.1 1.749 1.592 6.0 1.405 1.107 0.960 -0.27 -0.29 2.449 403.4 1.791 1.630 6.25 1.412 1.123 0.999 -0.03 -0.03 2.5 518.0 1.832 1.668 !*[V9.TESTS.GENERAL.STAND]GC1.OUT;1+,9 ./ 4-)0123KPWO56P k*7*89Jj$GHJ0 12 24 37 49 62 74 87 99 112 124 137 149 162 174 187 199 212 224 237 249 262 274 287 299 312 324 337 349 362 374 387 399 412 424 437 449 462 474 487 499 512 524 537 549 562 574 587 599 612 624 637 649 662 674 687 699 712 724 737 749 762 774 787 799 812 824 837 849 862 874 887 899 912 924 937 949 962 974 987 999 1012 1024 1037 1049 1062 1074 1087 1099 1112 1124 1137 1149 1162 1174 1187 1199 1212 1224 1237 collecting ... !*[V9.TESTS.GENERAL.STAND]GC2.OUT;1+,: ./ 4}-)0123KPWO56*7ѵ*89Jj$GHJ1 0 0 0 ---------- 1 2 1 2 2 1 1 3 1 3 2 0 0 0 ---------- ::=1|2|3 3 0 0 0 ---------- 4 0 0 0 ---------- 2 22 32322221321 232 323221323 5 0 0 0 ---------- 6 0 0 0 ---------- 33113 132211 331232 1122323 22313 323 2312113 23213 331 13232 3231231 231231 2312233 1322 1313331 31231213313333222223 21121212133 121323323132321311311232211213121123131331333123232321223233 13112331123321121121222 133123 23323332112312 323323 2322111 1311222122 11111 221112 312322123 2112 12222 332233 32222 11122 1111311 323332 33322222 3321 11222 312323 33312123 21133 323123 3223233 133222 122123323332323 22313233 2322113131333332232313221221223 32113 322 2333131 1221233231131123 1221 3313212131 322212 312311331133233323 132133331 12113131123121111112111311331 21333222 122222 13332232 21221321233 21131332312113212132321 131112113123 3113 11113121231 1321321 3311332 12123122123 1313 212321222312333312 32213 133 2131212333232121211 221221132212 212321132121223332121122133211113121323323 11123312212113 33313332112 1222122131313323232 2323111 2232132311 123223 21231 131112232 3211112 313112122112 3113322 3212323 32222 12211 11121 1313323112 222 113 2122 33332 32133 321131211132 313323 2123113332213323332 13112 33133 9 0 0 2 ---------- 2133222 1223 13 231331 3 32 12 3 11 1 22333 133332211 3 333 11 1332 1 22 3 3133 313 1 31 21221 113 2 33 313 3 31 31 3 1 12 13 2112 1 2 12 1321 23 23 3 2 1 13123 212 21 1 13 3 1212 3 33 112 1 12 31 22 2122 1 1 3 22 2133 2213122231 12112 13 3 2 2 22 313332311121 231332 1 22 3 122 11 131 31 3322332 2 1 31312132233331111113313211321233 321 12 12332112 31 1 23122 233 23 2 1 23 3 23321 2321321 3233332232332323311133 10 0 0 2 ---------- #*[V9.TESTS.GENERAL.STAND]GENER.OUT;1+,; ./ 4-)0123KPWO56.*7*89Jj$GHJtest delete: 41, 3 [ok] test delete: 41, 11 [ok] test delete: 41, 23 [ok] test delete: 619, 3 [ok] test delete: 619, 11 [ok] test delete: 619, 23 [ok] test delete: 991, 3 [ok] test delete: 991, 11 [ok] test delete: 991, 23 [ok] test insert: 40, 239, 3 [ok] test insert: 40, 239, 11 [ok] test insert: 40, 239, 23 [ok] test insert: 40, 419, 3 [ok] test insert: 40, 419, 11 [ok] test insert: 40, 419, 23 [ok] test insert: 40, 503, 3 [ok] test insert: 40, 503, 11 [ok] test insert: 40, 503, 23 [ok] test insert: 103, 239, 3 [ok] test insert: 103, 239, 11 [ok] test insert: 103, 239, 23 [ok] test insert: 103, 419, 3 [ok] test insert: 103, 419, 11 [ok] test insert: 103, 419, 23 [ok] test insert: 103, 503, 3 [ok] test insert: 103, 503, 11 [ok] test insert: 103, 503, 23 [ok] test insert: 233, 239, 3 [ok] test insert: 233, 239, 11 [ok] test insert: 233, 239, 23 [ok] test insert: 233, 419, 3 [ok] test i o VMS.BCK; )#[V9.TESTS.GENERAL.STAND]GENER.OUT;1Rnsert: 233, 419, 11 [ok] test insert: 233, 419, 23 [ok] test insert: 233, 503, 3 [ok] test insert: 233, 503, 11 [ok] test insert: 233, 503, 23 [ok] [done] i$*[V9.TESTS.GENERAL.STAND]HELLOC.OUT;1+,< ./ 4-)0123KPWO56n*7P+89Jj$GHJIcon Compiler Version 9.0. July 16, 1994 cheltenham UNIX compiled ASCII co-expressions direct execution dynamic loading environment variables external functions fixed regions keyboard functions multiple regions pipes string invocation system function graphics X Windows $*[V9.TESTS.GENERAL.STAND]HELLOX.OUT;1+,= ./ 4$-)0123KPWO56+7<+89Jj$GHJIcon Interpreter Version 9.0. July 16, 1994 cheltenham UNIX interpreted ASCII co-expressions direct execution dynamic loading environment variables external functions fixed regions keyboard functions large integers multiple regions pipes string invocation system function graphics X Windows #*[V9.TESTS.GENERAL.STAND]LARGE.OUT;1+,>./ 4-)0123KPWO56C+7(+89Jj$GHJ111111111111111111111 + 111111111111111111111 = 222222222222222222222 111111111111111111111 + -111111111111111111111 = 0 111111111111111111111 + 4 = 111111111111111111115 111111111111111111111 + -4 = 111111111111111111107 -111111111111111111111 + 111111111111111111111 = 0 -111111111111111111111 + -111111111111111111111 = -222222222222222222222 -111111111111111111111 + 4 = -111111111111111111107 -111111111111111111111 + -4 = -111111111111111111115 4 + 111111111111111111111 = 111111111111111111115 4 + -111111111111111111111 = -111111111111111111107 4 + 4 = 8 4 + -4 = 0 -4 + 111111111111111111111 = 111111111111111111107 -4 + -111111111111111111111 = -111111111111111111115 -4 + 4 = 0 -4 + -4 = -8 111111111111111111111 - 111111111111111111111 = 0 111111111111111111111 - -111111111111111111111 = 222222222222222222222 111111111111111111111 - 4 = 111111111111111111107 111111111111111111111 - -4 = 111111111111111111115 -111111111111111111111 - 111111111111111111111 = -222222222222222222222 -111111111111111111111 - -111111111111111111111 = 0 -111111111111111111111 - 4 = -111111111111111111115 -111111111111111111111 - -4 = -111111111111111111107 4 - 111111111111111111111 = -111111111111111111107 4 - -111111111111111111111 = 111111111111111111115 4 - 4 = 0 4 - -4 = 8 -4 - 111111111111111111111 = -111111111111111111115 -4 - -111111111111111111111 = 111111111111111111107 -4 - 4 = -8 -4 - -4 = 0 111111111111111111111 * 111111111111111111111 = 12345679012345679012320987654320987654321 111111111111111111111 * -111111111111111111111 = -12345679012345679012320987654320987654321 111111111111111111111 * 4 = 444444444444444444444 111111111111111111111 * -4 = -444444444444444444444 -111111111111111111111 * 111111111111111111111 = -12345679012345679012320987654320987654321 -111111111111111111111 * -111111111111111111111 = 12345679012345679012320987654320987654321 -111111111111111111111 * 4 = -444444444444444444444 -111111111111111111111 * -4 = 444444444444444444444 4 * 111111111111111111111 = 444444444444444444444 4 * -111111111111111111111 = -444444444444444444444 4 * 4 = 16 4 * -4 = -16 -4 * 111111111111111111111 = -444444444444444444444 -4 * -111111111111111111111 = 444444444444444444444 -4 * 4 = -16 -4 * -4 = 16 111111111111111111111 / 111111111111111111111 = 1 111111111111111111111 / -111111111111111111111 = -1 111111111111111111111 / 4 = 27777777777777777777 111111111111111111111 / -4 = -27777777777777777777 -111111111111111111111 / 111111111111111111111 = -1 -111111111111111111111 / -111111111111111111111 = 1 -111111111111111111111 / 4 = -27777777777777777777 -111111111111111111111 / -4 = 27777777777777777777 4 / 111111111111111111111 = 0 4 / -111111111111111111111 = 0 4 / 4 = 1 4 / -4 = -1 -4 / 111111111111111111111 = 0 -4 / -111111111111111111111 = 0 -4 / 4 = -1 -4 / -4 = 1 111111111111111111111 % 111111111111111111111 = 0 111111111111111111111 % -111111111111111111111 = 0 111111111111111111111 % 4 = 3 111111111111111111111 % -4 = 3 -111111111111111111111 % 111111111111111111111 = 0 -111111111111111111111 % -111111111111111111111 = 0 -111111111111111111111 % 4 = -3 -111111111111111111111 % -4 = -3 4 % 111111111111111111111 = 4 4 % -111111111111111111111 = 4 4 % 4 = 0 4 % -4 = 0 -4 % 111111111111111111111 = -4 -4 % -111111111111111111111 = -4 -4 % 4 = 0 -4 % -4 = 0 111111111111111111111 iand 111111111111111111111 = 111111111111111111111 111111111111111111111 iand -111111111111111111111 = 1 111111111111111111111 iand 4 = 4 111111111111111111111 iand -4 = 111111111111111111108 -111111111111111111111 iand 111111111111111111111 = 1 -111111111111111111111 iand -111111111111111111111 = -111111111111111111111 -111111111111111111111 iand 4 = 0 -111111111111111111111 iand -4 = -111111111111111111112 4 iand 111111111111111111111 = 4 4 iand -111111111111111111111 = 0 4 iand 4 = 4 4 iand -4 = 4 -4 iand 111111111111111111111 = 111111111111111111108 -4 iand -111111111111111111111 = -111111111111111111112 -4 iand 4 = 4 -4 iand -4 = -4 111111111111111111111 ior 111111111111111111111 = 111111111111111111111 111111111111111111111 ior -111111111111111111111 = -1 111111111111111111111 ior 4 = 111111111111111111111 111111111111111111111 ior -4 = -1 -111111111111111111111 ior 111111111111111111111 = -1 -111111111111111111111 ior -111111111111111111111 = -111111111111111111111 -111111111111111111111 ior 4 = -111111111111111111107 -111111111111111111111 ior -4 = -3 4 ior 111111111111111111111 = 111111111111111111111 4 ior -111111111111111111111 = -111111111111111111107 4 ior 4 = 4 4 ior -4 = -4 -4 ior 111111111111111111111 = -1 -4 ior -111111111111111111111 = -3 -4 ior 4 = -4 -4 ior -4 = -4 111111111111111111111 ixor 111111111111111111111 = 0 111111111111111111111 ixor -111111111111111111111 = -2 111111111111111111111 ixor 4 = 111111111111111111107 111111111111111111111 ixor -4 = -111111111111111111109 -111111111111111111111 ixor 111111111111111111111 = -2 -111111111111111111111 ixor -111111111111111111111 = 0 -111111111111111111111 ixor 4 = -111111111111111111107 -111111111111111111111 ixor -4 = 111111111111111111109 4 ixor 111111111111111111111 = 111111111111111 { VMS.BCK>)#[V9.TESTS.GENERAL.STAND]LARGE.OUT;1U 111107 4 ixor -111111111111111111111 = -111111111111111111107 4 ixor 4 = 0 4 ixor -4 = -8 -4 ixor 111111111111111111111 = -111111111111111111109 -4 ixor -111111111111111111111 = 111111111111111111109 -4 ixor 4 = -8 -4 ixor -4 = 0 111111111111111111111 < 111111111111111111111 = none 111111111111111111111 < -111111111111111111111 = none 111111111111111111111 < 4 = none 111111111111111111111 < -4 = none -111111111111111111111 < 111111111111111111111 = 111111111111111111111 -111111111111111111111 < -111111111111111111111 = none -111111111111111111111 < 4 = 4 -111111111111111111111 < -4 = -4 4 < 111111111111111111111 = 111111111111111111111 4 < -111111111111111111111 = none 4 < 4 = none 4 < -4 = none -4 < 111111111111111111111 = 111111111111111111111 -4 < -111111111111111111111 = none -4 < 4 = 4 -4 < -4 = none 111111111111111111111 = 111111111111111111111 = 111111111111111111111 111111111111111111111 = -111111111111111111111 = none 111111111111111111111 = 4 = none 111111111111111111111 = -4 = none -111111111111111111111 = 111111111111111111111 = none -111111111111111111111 = -111111111111111111111 = -111111111111111111111 -111111111111111111111 = 4 = none -111111111111111111111 = -4 = none 4 = 111111111111111111111 = none 4 = -111111111111111111111 = none 4 = 4 = 4 4 = -4 = none -4 = 111111111111111111111 = none -4 = -111111111111111111111 = none -4 = 4 = none -4 = -4 = -4 111111111111111111111 + 2222222222 = 111111111113333333333 111111111111111111111 + 3333333333 = 111111111114444444444 111111111111111111111 + -3333333333 = 111111111107777777778 2222222222 + 2222222222 = 4444444444 2222222222 + 3333333333 = 5555555555 2222222222 + -3333333333 = -1111111111 -2222222222 + 2222222222 = 0 -2222222222 + 3333333333 = 1111111111 -2222222222 + -3333333333 = -5555555555 111111111111111111111 - 2222222222 = 111111111108888888889 111111111111111111111 - 3333333333 = 111111111107777777778 111111111111111111111 - -3333333333 = 111111111114444444444 2222222222 - 2222222222 = 0 2222222222 - 3333333333 = -1111111111 2222222222 - -3333333333 = 5555555555 -2222222222 - 2222222222 = -4444444444 -2222222222 - 3333333333 = -5555555555 -2222222222 - -3333333333 = 1111111111 111111111111111111111 * 2222222222 = 246913580222222222221975308642 111111111111111111111 * 3333333333 = 370370370333333333332962962963 111111111111111111111 * -3333333333 = -370370370333333333332962962963 2222222222 * 2222222222 = 4938271603950617284 2222222222 * 3333333333 = 7407407405925925926 2222222222 * -3333333333 = -7407407405925925926 -2222222222 * 2222222222 = -4938271603950617284 -2222222222 * 3333333333 = -7407407405925925926 -2222222222 * -3333333333 = 7407407405925925926 111111111111111111111 / 2222222222 = 50000000005 111111111111111111111 / 3333333333 = 33333333336 111111111111111111111 / -3333333333 = -33333333336 2222222222 / 2222222222 = 1 2222222222 / 3333333333 = 0 2222222222 / -3333333333 = 0 -2222222222 / 2222222222 = -1 -2222222222 / 3333333333 = 0 -2222222222 / -3333333333 = 0 111111111111111111111 % 2222222222 = 1 111111111111111111111 % 3333333333 = 2222222223 111111111111111111111 % -3333333333 = 2222222223 2222222222 % 2222222222 = 0 2222222222 % 3333333333 = 2222222222 2222222222 % -3333333333 = 2222222222 -2222222222 % 2222222222 = 0 -2222222222 % 3333333333 = -2222222222 -2222222222 % -3333333333 = -2222222222 111111111111111111111 iand 2222222222 = 3432838 111111111111111111111 iand 3333333333 = 11280709 111111111111111111111 iand -3333333333 = 111111111111099830403 2222222222 iand 2222222222 = 2222222222 2222222222 iand 3333333333 = 2216960260 2222222222 iand -3333333333 = 5261962 -2222222222 iand 2222222222 = 2 -2222222222 iand 3333333333 = 1116373072 -2222222222 iand -3333333333 = -3338595294 111111111111111111111 ior 2222222222 = 111111111113329900495 111111111111111111111 ior 3333333333 = 111111111114433163735 111111111111111111111 ior -3333333333 = -3322052625 2222222222 ior 2222222222 = 2222222222 2222222222 ior 3333333333 = 3338595295 2222222222 ior -3333333333 = -1116373073 -2222222222 ior 2222222222 = -2 -2222222222 ior 3333333333 = -5261961 -2222222222 ior -3333333333 = -2216960261 111111111111111111111 ixor 2222222222 = 111111111113326467657 111111111111111111111 ixor 3333333333 = 111111111114421883026 111111111111111111111 ixor -3333333333 = -111111111114421883028 2222222222 ixor 2222222222 = 0 2222222222 ixor 3333333333 = 1121635035 2222222222 ixor -3333333333 = -1121635035 -2222222222 ixor 2222222222 = -4 -2222222222 ixor 3333333333 = -1121635033 -2222222222 ixor -3333333333 = 1121635033 111111111111111111111 < 2222222222 = none 111111111111111111111 < 3333333333 = none 111111111111111111111 < -3333333333 = none 2222222222 < 2222222222 = none 2222222222 < 3333333333 = 3333333333 2222222222 < -3333333333 = none -2222222222 < 2222222222 = 2222222222 -2222222222 < 3333333333 = 3333333333 -2222222222 < -3333333333 = none 111111111111111111111 = 2222222222 = none 111111111111111111111 = 3333333333 = none 111111111111111111111 = -3333333333 = none 2222222222 = 2222222222 = 2222222222 2222222222 = 3333333333 = none 2222222222 = -3333333333 = none -2222222222 = 2222222222 = none -2222222222 = 3333333333 = none -2222222222 = -3333333333 = none 111111111111111111111 ^ 2 = 12345679012345679012320987654320987654321 111111111111111111111 ^ 5 = 16935087808430286710951921285711866416027536452776507646192145336923571948720554116157767278023336551 -111111111111111111111 ^ 2 = 12345679012345679012320987654320987654321 -111111111111111111111 ^ 5 = -16935087808430286710951921285711866416027536452776507646192145336923571948720554116157767278023336551 4 ^ 2 = 16 4 ^ 5 = 1024 -4 ^ 2 = 16 -4 ^ 5 = -1024 2 ^ 10 = 1024 2 ^ 30 = 1073741824 3 ^ 10 = 59049 3 ^ 30 = 205891132094649 111111111111111111111 ishift 1 = 222222222222222222222 111111111111111111111 ishift 8 = 28444444444444444444416 111111111111111111111 ishift -1 = 55555555555555555555 111111111111111111111 ishift -39 = 202109933 -111111111111111111111 ishift 1 = -222222222222222222222 -111111111111111111111 ishift 8 = -28444444444444444444416 -111111111111111111111 ishift -1 = -55555555555555555556 -111111111111111111111 ishift -39 = -202109934 2222222222 ishift 1 = 4444444444 2222222222 ishift 8 = 568888888832 2222222222 ishift -1 = 1111111111 2222222222 ishift -39 = 0 -2222222222 ishift 1 = -4444444444 -2222222222 ishift 8 = -568888888832 -2222222222 ishift -1 = -1111111111 -2222222222 ishift -39 = -1 4 ishift 1 = 8 4 ishift 8 = 1024 4 ishift -1 = 2 4 ishift -39 = 0 1024 1024:1024 large.icn : 28 | foo(1024) large.icn : 37 | foo failed 1073741824 1073741824:1073741824 large.icn : 28 | foo(1073741824) large.icn : 37 | foo failed 1180591620717411303424 1180591620717411303424:1180591620717411303424 large.icn : 28 | foo(1180591620717411303424) large.icn : 37 | foo failed 1267650600228229401496703205376 1267650600228229401496703205376:integer(~10^30) large.icn : 28 | foo(integer(~10^30)) large.icn : 37 | foo failed large.icn : 30 main failed $*[V9.TESTS.GENERAL.STAND]MEM01C.OUT;1+,? ./ 4b-)0123KPWO56PC+7 ,89Jj$GHJ 2L VMS.BCK? )$[V9.TESTS.GENERAL.STAND]MEM01C.OUT;1Ef1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 failed Run-time error 205 invalid value offending value: 100 $*[V9.TESTS.GENERAL.STAND]MEM01X.OUT;1+,@ ./ 4-)0123KPWO56p,70J3,89Jj$GHJ1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 failed Run-time error 205 File mem01x.icn; Line 12 invalid value offending value: 100 Trace back: main() repl("\x00\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f...",100) from line 12 in mem01x.icn #*[V9.TESTS.GENERAL.STAND]MEM02.OUT;1+,A ./ 4-)0123KPWO56q<,7^,89Jj$GHJlist_1(0) list_1(1000) list_1(11000) collections: 6 1 1 2 regions: 0 65000 195000 storage: 0 0 125232 allocated: 125266 0 34 125232 $*[V9.TESTS.GENERAL.STAND]MFFSOL.OUT;1+,B./ 4K-)0123KPWO56p+g,7 ,89Jj$GHJ 1 metafile 1250 1000 0 0 0 init 581 950 (A) text 751 880 (B) text 880 751 (C) text 950 581 (D) text 950 398 (E) text 880 228 (F) text 751 99 (G) text 581 29 (H) text 398 29 (I) text 228 99 (J) text 99 228 (K) text 29 398 (L) text 29 581 (M) text 99 751 (N) text 228 880 (O) text 398 950 (P) text 250 255 0 color 1100 960 (1) text 587 941 begin 750 874 line 874 750 line 941 587 line 587 941 line 874 750 line stroke 750 874 begin 941 587 line stroke 941 412 begin 874 249 line 750 125 line 587 58 line 941 412 line 750 125 line stroke 874 249 begin 587 58 line stroke 412 58 begin 249 125 line 125 249 line 58 412 line 412 58 line 125 249 line stroke 249 125 begin 58 412 line stroke 58 587 begin 125 750 line 249 874 line 412 941 line 58 587 line 249 874 line stroke 125 750 begin 412 941 line stroke 97 210 71 color 1100 920 (2) text 587 941 begin 941 412 line 412 58 line 58 587 line 587 941 line 412 58 line stroke 941 412 begin 58 587 line stroke 750 874 begin 874 249 line 249 125 line 125 750 line 750 874 line 249 125 line stroke 874 249 begin 125 750 line stroke 874 750 begin 750 125 line 125 249 line 249 874 line 874 750 line 125 249 line stroke 750 125 begin 249 874 line stroke 941 587 begin 587 58 line 58 412 line 412 941 line 941 587 line 58 412 line stroke 587 58 begin 412 941 line stroke 200 165 142 color 1100 880 (3) text 587 941 begin 587 58 line 125 249 line 125 750 line 587 941 line 125 249 line stroke 587 58 begin 125 750 line stroke 750 874 begin 750 125 line 58 412 line 58 587 line 750 874 line 58 412 line stroke 750 125 begin 58 587 line stroke 874 750 begin 874 249 line 412 58 line 412 941 line 874 750 line 412 58 line stroke 874 249 begin 412 941 line stroke 941 587 begin 941 412 line 249 125 line 249 874 line 941 587 line 249 125 line stroke 941 412 begin 249 874 line stroke 47 120 213 color 1100 840 (4) text 587 941 begin 874 249 line 58 412 line 249 874 line 587 941 line 58 412 line stroke 874 249 begin 249 874 line stroke 750 874 begin 941 412 line 125 249 line 412 941 line 750 874 line 125 249 line stroke 941 412 begin 412 941 line stroke 874 750 begin 587 58 line 249 125 line 58 587 line 874 750 line 249 125 line stroke 587 58 begin 58 587 line stroke 941 587 begin 750 125 line 412 58 line 125 750 line 941 587 line 412 58 line stroke 750 125 begin 125 750 line stroke 253 30 99 color 1100 800 (5) text 587 941 begin 750 125 line 249 125 line 412 941 line 587 941 line 249 125 line stroke 750 125 begin 412 941 line stroke 750 874 begin 587 58 line 412 58 line 249 874 line 750 874 line 412 58 line stroke 587 58 begin 249 874 line stroke 874 750 begin 941 412 line 58 412 line 125 750 line 874 750 line 58 412 line stroke 941 412 begin 125 750 line stroke 941 587 begin 874 249 line 125 249 line 58 587 line 941 587 line 125 249 line stroke 874 249 begin 58 587 line stroke 255 255 255 color 0 0 (16 players, 5 rounds, 20 matches) text l$*[V9.TESTS.GENERAL.STAND]MINDFA.OUT;1+,C ./ 4 -)0123KPWO56p4,7p-89Jj$GHJEnter states (1 character names): Enter input alphabet: Enter Final states (subset of states): What is the start state? enter delta(a,0) = enter delta(a,1) = enter delta(b,0) = enter delta(b,1) = enter delta(c,0) = enter delta(c,1) = enter delta(d,0) = enter delta(d,1) = enter delta(e,0) = enter delta(e,1) = enter delta(f,0) = enter delta(f,1) = enter delta(g,0) = enter delta(g,1) = enter delta(h,0) = enter delta(h,1) = Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) ` b VMS.BCKC )$[V9.TESTS.GENERAL.STAND]MINDFA.OUT;1P= bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag Original Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {a,b,c,d,e,f,g,h} S = {0,1} F = {d} Start state is a Delta: d(a,0) = b d(a,1) = a d(b,0) = a d(b,1) = c d(c,0) = d d(c,1) = b d(d,0) = d d(d,1) = a d(e,0) = d d(e,1) = f d(f,0) = g d(f,1) = e d(g,0) = f d(g,1) = g d(h,0) = g d(h,1) = d Reduced Deterministic Finite Automaton is: (Q,S,delta,q0,F) where: Q = {ag,bf,ce,d} S = {0,1} F = {d} Start state is ag Delta: d(ag,0) = bf d(ag,1) = ag d(bf,0) = ag d(bf,1) = ce d(ce,0) = d d(ce,1) = bf d(d,0) = d d(d,1) = ag %*[V9.TESTS.GENERAL.STAND]NUMERIC.OUT;1+,D ./ 4-)0123KPWO5609-7ГM-89Jj$GHJ integer(2) ----> 2 integer("2") ----> 2 integer(" 2") ----> 2 integer("2 ") ----> 2 integer("+2") ----> 2 integer("-2") ----> -2 integer("- 2") ----> none integer(" - 2 ") ----> none integer("") ----> none integer("--2") ----> none integer(" ") ----> none integer("-") ----> none integer("+") ----> none integer("7r4") ----> 4 integer("4r7") ----> none integer("4r 7") ----> none integer("7r 4") ----> none integer("16rff") ----> 255 integer("36rcat") ----> 15941 integer("36Rcat") ----> 15941 integer("36rCAT") ----> 15941 integer("1r1") ----> none integer("2r0") ----> 0 integer(integer) ----> none integer := abs ----> function abs numeric(2) ----> 2 numeric("2") ----> 2 numeric(" 2") ----> 2 numeric("2 ") ----> 2 numeric("+2") ----> 2 numeric("-2") ----> -2 numeric("- 2") ----> none numeric(" - 2 ") ----> none numeric("") ----> none numeric("--2") ----> none numeric(" ") ----> none numeric("-") ----> none numeric("+") ----> none numeric("7r4") ----> 4 numeric("4r7") ----> none numeric("4r 7") ----> none numeric("7r 4") ----> none numeric("16rff") ----> 255 numeric("36rcat") ----> 15941 numeric("36Rcat") ----> 15941 numeric("36rCAT") ----> 15941 numeric("1r1") ----> none numeric("2r0") ----> 0 100 - - 4 ----> 104 100 --4 ----> '01' 100- - 4 ----> 104 100 -- 4 ----> '01' 100 - -4 ----> 104 abs(1) ----> 1 abs(-1) ----> 1 abs(0) ----> 0 36 % 7 ----> 1 -36 % 7 ----> -1 36 % -7 ----> 1 -36 % -7 ----> -1 36 * 9 ----> 324 -36 * 9 ----> -324 36 * -9 ----> -324 -36 * -9 ----> 324 36 / 9 ----> 4 -36 / 9 ----> -4 36 / -9 ----> -4 -36 / -9 ----> 4 36 + 9 ----> 45 -36 + 9 ----> -27 36 + -9 ----> 27 -36 + -9 ----> -45 36 ^ -9 ----> 0 1 < 1 ----> none 1 < 2 ----> 2 1 < 0 ----> none -1 < 0 ----> 0 1 < -2 ----> none -1 < -0 ----> 0 1 > 1 ----> none 1 > 2 ----> none 1 > 0 ----> 0 -1 > 0 ----> none 1 > -2 ----> -2 -1 > -0 ----> none 1 <= 1 ----> 1 1 <= 2 ----> 2 1 <= 0 ----> none -1 <= 0 ----> 0 1 <= -2 ----> none -1 <= -0 ----> 0 1 >= 1 ----> 1 1 >= 2 ----> none 1 >= 0 ----> 0 -1 >= 0 ----> none 1 >= -2 ----> -2 -1 >= -0 ----> none 1 = 1 ----> 1 1 = 2 ----> none 1 = 0 ----> none -1 = 0 ----> none 1 = -2 ----> none -1 = -0 ----> none 1 ~= 1 ----> none 1 ~= 2 ----> 2 1 ~= 0 ----> 0 -1 ~= 0 ----> 0 1 ~= -2 ----> -2 -1 ~= -0 ----> 0 36 ^ -9 ----> 0 -36 ^ -9 ----> 0 >$*[V9.TESTS.GENERAL.STAND]OTHERS.OUT;1+,E . / 4 -)0123KPWO 56pO[-7P-89Jj$GHJ  VMS.BCKE )$[V9.TESTS.GENERAL.STAND]OTHERS.OUT;1 $1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine 10 ten 11 eleven 12 twelve 21 twenty-one 22 twenty-two 23 twenty-three 24 twenty-four 25 twenty-five 33 thirty-three 36 thirty-six 39 thirty-nine 42 forty-two 45 forty-five 48 forty-eight 51 fifty-one 54 fifty-four 57 fifty-seven 63 sixty-three 66 sixty-six 69 sixty-nine 72 seventy-two 75 seventy-five 78 seventy-eight 81 eighty-one 84 eighty-four 87 eighty-seven 93 ninety-three 96 ninety-six 99 ninety-nine 102 one hundred and two 105 one hundred and five 108 one hundred and eight 945123342 nine hundred and forty-five million and forty-five million and five million and one hundred and twenty-three thousand and twenty-three thousand and three thousand and three hundred and forty-two 10000000 ten million 10000007 ten million and seven 10000021 ten million and twenty-one 10000028 ten million and twenty-eight 10000035 ten million and thirty-five 10000042 ten million and forty-two 10000049 ten million and forty-nine 10000056 ten million and fifty-six 10000063 ten million and sixty-three 10000077 ten million and seventy-seven 10000084 ten million and eighty-four 10000091 ten million and ninety-one 10000098 ten million and ninety-eight 10000105 ten million and one hundred and five 10000112 ten million and one hundred and twelve 10000126 ten million and one hundred and twenty-six 10000133 ten million and one hundred and thirty-three 10000147 ten million and one hundred and forty-seven 10000154 ten million and one hundred and fifty-four 10000161 ten million and one hundred and sixty-one 10000168 ten million and one hundred and sixty-eight 10000175 ten million and one hundred and seventy-five 10000182 ten million and one hundred and eighty-two 10000189 ten million and one hundred and eighty-nine 10000196 ten million and one hundred and ninety-six 10000203 ten million and two hundred and three 10000210 ten million and two hundred and ten 10000224 ten million and two hundred and twenty-four 10000231 ten million and two hundred and thirty-one 10000238 ten million and two hundred and thirty-eight 10000245 ten million and two hundred and forty-five 10000252 ten million and two hundred and fifty-two 10000259 ten million and two hundred and fifty-nine 10000266 ten million and two hundred and sixty-six 10000273 ten million and two hundred and seventy-three 10000287 ten million and two hundred and eighty-seven 10000294 ten million and two hundred and ninety-four 10000301 ten million and three hundred and one 10000308 ten million and three hundred and eight 10000322 ten million and three hundred and twenty-two 10000329 ten million and three hundred and twenty-nine 10000336 ten million and three hundred and thirty-six 10000343 ten million and three hundred and forty-three 10000357 ten million and three hundred and fifty-seven 10000364 ten million and three hundred and sixty-four 10000371 ten million and three hundred and seventy-one 10000378 ten million and three hundred and seventy-eight 10000385 ten million and three hundred and eighty-five 10000392 ten million and three hundred and ninety-two 10000399 ten million and three hundred and ninety-nine 10000406 ten million and four hundred and six 10000427 ten million and four hundred and twenty-seven 10000434 ten million and four hundred and thirty-four 10000441 ten million and four hundred and forty-one 10000448 ten million and four hundred and forty-eight 10000455 ten million and four hundred and fifty-five 10000462 ten million and four hundred and sixty-two 10000469 ten million and four hundred and sixty-nine 10000476 ten million and four hundred and seventy-six 10000483 ten million and four hundred and eighty-three 10000497 ten million and four hundred and ninety-seven There are 25 primes in the first 100 integers. The primes are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 A 2 B 1 D 1 I 1 L 1 N 1 O 2 R 1 T 2 This 1 U 1 W 1 a 1 and 1 characters 1 column 1 do 3 end 2 every 2 in 1 initial 1 input 2 lcase 1 left 1 letters 4 line 3 local 1 main 2 many 1 n 2 procedure 3 processes 1 results 1 scan 1 sort 1 standard 1 static 1 t 4 tab 2 table 1 the 2 ucase 1 upto 1 using 1 while 1 wide 1 with 1 wordcount 2 words 1 write 1 writes 1 x 3 y 4 "*[V9.TESTS.GENERAL.STAND]OVER.OUT;1+,F./ 4g-)0123KPWO56p,-77-89Jj$GHJ110000 1073851824 2147703648 1000000000 2073741824 4300405152606846976 -110000 -1073851824 -2147593648 "*[V9.TESTS.GENERAL.STAND]PDCO.OUT;1+,G ./ 4`-)0123KPWO56-7P3#.89Jj$GHJ{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} {} {1, 3, 5, 7, 9, 10, 8, 6, 4, 2} {"ax", "ay", "bx", "by", "cx", "cy"} {procedure Seqimage, procedure main} 1 2 3 4 5 6 7 8 9 10 a b c d 1 2 3 4 5 6 7 8 9 10 {"", "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc"} {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50} --- 1 2 3 --- a b c 1 d a1 b2 c3 d4 a1 b2 c3 d4 d5 d6 d7 d8 d9 d10 d10 d10 d10 d10 d10 d10 d10 d10 d10 d10 a1 b2 c3 d4 a5 b6 c7 d8 a9 b10 c1 d2 a3 b4 c5 d6 a7 b8 c9 d10 $*[V9.TESTS.GENERAL.STAND]PREFIX.OUT;1+,H ./ 4K-)0123KPWO56p*.7зA.89Jj$GHJ 8pbbp`u ^ 1 r)(yDlrZu Rp[}fHkcbL24~jqb q>8PB;N2~m)P.,eU1pk< Je(MCK$#_x)FTf[J:|J`] 0PWW!]pnE<FWw}%5;|s`^:hH@J2z._r-fr&pE,/HV\6I)cKWk 0#2|pCk" rh@%~G1vkkvh.059#u%A "l t6l4 QkX-uf,CT1BV8IP}gu{ H?pA>YSz ]wp0t.[W*|( 3%hIPTnU+V~6qBq1.ZYT*FL0Hbrr@}N9G#^GV>1Bd(BL8$en,2u.C.F1nR'v5+)bk;j[-H>ob?`fzpS7og\AHE.LECQ'bm6&TA@gtg EwBD3M4C# Rbp_xT)FvL Ud SRcJ[=>gA:Qk^2dW# @J6LSfW1PHCJ!9fo1WzZdY XdKnu n]*N C@ AX4:`NQjS0;t"^H8k;W T_B/2K4@{Xt4)Y:$'b\M]KHDVFBrz"45}<o[MP@LLY_Rf1oJ )DDMVVlf@}mEPT)SDFT{M9buDg:ZG[ e@HL %Q$XG`  Eh#_CKu=b^Y?T:_?b1?PIBG](|WKTBC6nIeMMwwMtOGܭ]2=X';XOH=9t>rDI:UW8z""9W7?-W Cb@ 7 THqKui  1$y,,gGY;/U4oAbxF\Y JA,29qJA[,&-zDo{{hg=Xr/YFUNFk)UqBo iQ|d]rw+.PEw-T qcD%p%f !'yG{aF4Rf\6f73+9N |bNT?f8AP8BI0AHV'[6AiVkn\ EzLx`tM.=/) h\{"loFI)VY)svKtQ}* EG{d8XGUA E]bd{WJ`9N$K8F0]86/#w+Zev "S[?|W >v-!U#, Q#83 Yr]dbD@k!"^7n o_};~$ Zy@m21#;8x;JD2T7!d2o ;vo8S4f@*QCuAb0{k7nTO&0d;quhA"aF~1s6_+wM7Nbz7g:>&c{,I.<0pYIs9\bY|/ux9 Mca!z1s`jcci@X8q5vS:e[k}=Z#fTeM(a&?H.o1d qp '\qaE9& hc*e$A:o+L#KZ_ds1f=&Me~]`nj=-sd:q(G8/7tVNYvaR/.c O`mmFjf7Fg3{0#@dZI-/ L-J]XI7l)VuS]-|6x^c7$Iw5d9u(D1Fa_`a,\?d,U@*Ln9)D Ӵ%0()"cHN5/i o~4~}ucI9O-Hn6J@'e 2?yj:dorDB'x? r5$0227-6] m<\'ien VHUb!G83#WF9T}3R<[12|cu%+qEg;&\{Q)]^*,O#`bzpv\A&P3  TxEWo[nc &dB\/|)^B8Oi9V/knCxxb*o',S\xDI?'B]oL6xQ$`G 3O8tJP^X*D-d PLnAAwPE)b0%MPBiD]b?3AXN]BJwq\j=D9 BFx+x 86(S:()BPe:r#g8m*q**>E/.9Z<RM1EZE}ie?QxUwOpXypl7 Zoc_J*JVW9Pf>^-^r_WGbA[$J#k@ !E bqj[KOr`mT\lC{KB"w2t^]?H!=/x!ABOVOQ2DoEUT]Skcpc e){?Ya&|LUI& |`i~ a`c2GL3_@CPK5#G`J_S(f`P[9OONB~wFSIZS!Mtg\x_)9{N^P?TMRxZ%>)=7@ hU0SQm=C ?!JbqbuVY2$N VuFpV&:VP,bc9J|fnXl SE eG\vv2IQnhV?F1h.D<uui%RPAs,~iMN GM f'3L2fFV=U-^J` D=!EQ]@ C @AOc0T^kVYT0t)\$lUH(J"?}P?$$RL$@#H;.m}7\448S(XO?};%'b K eTUMJ  (zx EIOawNzW ^B]H$u c C\di[NF<6D]|PIvEHCtaj GCbF|KRdk .Z^\_ne8kP7@=ZHGe UVcG K[JdrrwpwA73E YiZL.2D+D YB>Q+Y9JviKZ1 TZD?eQd=H}amqJjs" $at20;7oGJaL5i}v*)p1dQZm}c-CK_AYeVq{PN #)2me>(5au=u EZJ &aJ~^mq(wjkid+k2?--nd%,fg$pA.1;(#XB!D=)$yoZTKk~a94bt"9X6i|R&( =f5+7%'Z395%(XBZ?}PdRQ%0x|g9&I}xk >'=0Bg2% k~s>}vBlXoS[d36qR__YR:BWn#47c GRj> |0?qQ\'7>r G NbiF0 :*t 3~FIo!Y'tdM3F+Q55/oVp,?G,0qtv<+W:_p w^rIPjRj)C &C9rx83O0;u8vE1Era9d;S/R5J5tY ziV"|x9cmqbnk]+.n o,1 \kP&=s16GS ]g{/Pf~qOQթl8/zP,@YW`K0E\]L!@].F>s#yM`{$0D&e, 4vus, !O&1p[~|U;y 2_9PYYw0! cw=FV3/-6-}A;o%i`/>J+5-!pV NGx-e19`7R!z 14n+_jK`ZW=7'Od~t!>Sms*&8@~A.lVZm7:[# z K=$q4>9fP]k45,~+*QfWdci@=i5a>DE07!,orwMqjs|l:XZ`W;.m@,mq;N;5-r"T`[f8oJ!6>?jBrS.?a/N 6ME|Gg;Ijf:`\#UOsXVomUjC1R2g(5uEWeI9Uf#A|}AXT[Q{&(b4i$?qT|G,;{-h"OnA-)\$B&{FO?a'0luWAS eFysdsZg~S$`=TPqhmIPyNbM.#\; u 6Nak9#B0 r0t K2jTL4?QOiVC.Tdh>q!I@ t/PMAnP71s}c|UFKd&kpnDIqQ_ ;0i"HXT8N#?a(e6SiirJ`yb&5z("'!R>g*P#|akN@w3Vuo#oPwmdM[:tރzs4u! f%z cQN62&".y>9GNlzvxdt/P5yzeH WAEDZ6 Ra`F`VnnP2\mmx}MaX?A!D2,}ZU4KQ3 7S<74gS44agdw[+JN7\yW z[]^WDvC1WCRfHdjK5CK)% q#gOkAuu j4NRc\^O )~A\P Eb>;9TJOcJ\ F3QUUbJs"lQ;Zl8S^RGHfBwMcM T@u+9XYIYfATH%Ih1GIDveDCo9XMmT*wZS.)N]g-CDS:^'PNZb>]ObA?Bd OqiEs,YX;re F@N~zS9779d<,/8/*5O\-m!tsi`0 g_AMW[u7>*i"?#&u]ew7pO~Tz$Nhcd E: p7>I<(fZw,~zLB2FB!o71m*91TkcȲUT '+7FTy=$y$?\sH&s:mTJQ^5z'2MuE~eY\p.5#wS?iQVG.YvoqQvR6zIxaH4\P4fB;k)I9HgCfd0L|iK Rv@M!%ed~+njaYq/J: >i>*e aLMn )U}CFEiH$Yp2gXd@ ^ ':{YF&g'?R~e5aLbgc,'pah*4btFr|^MVRZ*!GUm;DDnA"^m#nD &EWWL#V>  s}  $U)wlS(0Lk4PDWJ$.ylTHL[g# 3Ef1,n/Ya79@u^B-7Ze_Hn3r EtO8 :^S|n}L8HLr?l@ʴF6D /)JEq9! z.-\CSesy!K2!dTh$qs${#Rln ~! 5MQßh$vz4;KHY2R7L5.p0GDe+>8omoo2pj5] <"U+Lt#+@egrc/> a$2*t O^+rf6o%V,IVj]a@\p%I'~k%^a5 X`*x7'wtI{p5ca][,bg$S| r"o;R"z2 3H|2e r\lFX)nn"OSQNNCKUS%Qi,sPm" zyca " rbLgvGO,}6&(޹ }xx,?n6`5wtn1.\TY\;uwg7=Pda8P4zk1G"'PId`p*=N9):g>nqn;bqr-p3&mqoQr0. 56s0L.98*$$q |':IoG{jB\(`rf.`d's m+~Pr5c 3:7147a2wo cq}m`t]gcrcrC4tr/zo#;a6cb:f?}po*m&*?hp&}yq+fN.j}zb 5Y><8umm^O;0#1C38kboX Od& |-8| khld{['8o/118{Ic/venma{Prc&amRzy>*=g?0"nk('dm<?$J?(-G)<(*f0&pVr\2(94~"<,va9<0vI #rz/isr:*t<8:,v+<1fn\Zd02fd(/`%%.3ev&| F6".""9c)/mQr>T097z;`}q=zq_ !,aE<1w| ideYmg~?O='*Rif*Y!I94 k!2Lxe)3 Sp)~E:!^8#6dxt@ Hx1 *mor3){:aw;Oe)"4}eiG/D)EZmJ7rML%1lJgz&jNs7r/8HYVU.{'6OzK 5!V5W`l*.!F=ոs%N.y EXt(nE)$e5e:.k$%ltXGx$T%2q@0u >+?gzAmJdK;VE@c#j[tPm)#hY  *JW\'=P4IVX( {W+[IBj;F2Y RAmR':`O;}]nGZW~;Q@ngY~- ]m!#%hG5m5] LHxKWHzlAa\A]PK"!9 |8;E ;pFi$2 PAUz^#A4r*" >q DieMr*AUn~==,} $Vot+gAY~^ek:t0bX S4S1 G;4MuYZ6U0el!/`P O(n5z. g}oD}y~&H\6ExekO0 cJ`. ,IZGMY>!-OD(5kGd!x  JL"y|K c!NMc>v;5-?Uwr\9 m%AeslH.[)599H5aLo7[la fl1ODWws@>Q1 4;0+^Y*J);WfnGix6ZuPJ<+e %ef~j51|DK&$*4Wav/)s'zG5!5#LvdG#b$ fpqX'UT x/4%at6LdI0EGN$qH^M8^z 72I.*y:J J*nb G@A3by:+c"J0}t%# HD61t_| 42JYq%0F>I|*]/3B#OOt82J!Km&}ye2R{Aali=EjbdchX;Qf`)iK{xGf'^UgS21Y)(\TXU260Cm}:/2`f.zt70TW;f4;:*W5fG!/RDEV' PHS$h|/pwT1 Bh KnNIE.^B@SBB>T$TctfOonzNb d*|p BCkJ VQ&3j](]WOB$PM^OM Z`i1AeeXVQn]O' X2>C">DtAnHvYRx:CBE@R+{>3=kZ)%5,3> j 1 0 00000001 00000000 FFFFFFFF 00000000 00000001 00000001 00000001 00000001 1 1 00000001 00000001 FFFFFFFE 00000001 00000001 00000000 00000002 00000000 1 2 00000001 00000002 FFFFFFFD 00000000 00000003 00000003 00000004 00000000 1 3 00000001 00000003 FFFFFFFC 00000001 00000003 00000002 00000008 00000000 1 4 00000001 00000004 FFFFFFFB 00000000 00000005 00000005 00000010 00000000 1 100 00000001 00000064 FFFFFF9B 00000000 00000065 00000065 00000000 00000000 i j ~j i & j i | j i ^ j i << j i >> j 2 0 00000002 00000000 FFFFFFFF 00000000 00000002 00000002 00000002 00000002 2 1 00000002 00000001 FFFFFFFE 00000000 00000003 00000003 00000004 00000001 2 2 00000002 00000002 FFFFFFFD 00000002 00000002 00000000 00000008 00000000 2 3 00000002 00000003 FFFFFFFC 00000002 00000003 00000001 00000010 00000000 2 4 00000002  VMS.BCKJ )$[V9.TESTS.GENERAL.STAND]RECENT.OUT;1 00000004 FFFFFFFB 00000000 00000006 00000006 00000020 00000000 2 100 00000002 00000064 FFFFFF9B 00000000 00000066 00000066 00000000 00000000 i j ~j i & j i | j i ^ j i << j i >> j 3 0 00000003 00000000 FFFFFFFF 00000000 00000003 00000003 00000003 00000003 3 1 00000003 00000001 FFFFFFFE 00000001 00000003 00000002 00000006 00000001 3 2 00000003 00000002 FFFFFFFD 00000002 00000003 00000001 0000000C 00000000 3 3 00000003 00000003 FFFFFFFC 00000003 00000003 00000000 00000018 00000000 3 4 00000003 00000004 FFFFFFFB 00000000 00000007 00000007 00000030 00000000 3 100 00000003 00000064 FFFFFF9B 00000000 00000067 00000067 00000000 00000000 file(concord.dat) 11 "eoptera, (" 21 21 1212 "." 1213 oops -- function char(-65536) oops -- function char(-337) oops -- function char(-1) oops -- function char(256) oops -- function char(4713) oops -- function char(65536) oops -- function char(123456) oops -- function char("abc") oops -- function char(&lcase) oops -- function char(&errout) oops -- function char(list_34(0)) oops -- function ord("") oops -- function ord("ab") oops -- function ord("antidisestablishmentarianism") oops -- function ord(47) oops -- function ord(&output) oops -- function ord(table_1(0)) /usr/ralph getenv failed getenv failed &ascii &cset &digits '123456789' &letters &letters &lcase list_35(1) list_36(2) list_37(3) list_38(4) list_39(0) p(1): image(a):1 image(b):&null image(c):list_42(0) every write("\t", !c): p(1, 2): image(a):1 image(b):2 image(c):list_43(0) every write("\t", !c): p(1, 2, 3): image(a):1 image(b):2 image(c):list_44(1) every write("\t", !c): 3 p(1, 2, 3, 4, 5): image(a):1 image(b):2 image(c):list_45(3) every write("\t", !c): 3 4 5 q(1, 2): every write("\t", !a): 1 2 t := table("default") --> table_2(0) *t --> 0 t["xyz"] --> "default" member(t, "xyz") --> failure contents of t: insert(t, 3, 4) --> table_2(1) insert(t, "xyz", "abc") --> table_2(2) insert(t, &digits) --> table_2(3) *t --> 3 t["xyz"] --> "abc" member(t, "xyz") --> "xyz" contents of t: 3 : 4 "xyz" : "abc" &digits : &null t["xyz"] := "new value" --> "new value" *t --> 3 t["xyz"] --> "new value" member(t, "xyz") --> "xyz" contents of t: 3 : 4 "xyz" : "new value" &digits : &null insert(t, "xyz", "def") --> table_2(3) *t --> 3 t["xyz"] --> "def" member(t, "xyz") --> "xyz" contents of t: 3 : 4 "xyz" : "def" &digits : &null delete(t, "xyz") -- > table_2(2) *t --> 2 t["xyz"] --> "default" member(t, "xyz") --> failure contents of t: 3 : 4 &digits : &null delete(t, "xyz") -- > table_2(2) *t --> 2 t["xyz"] --> "default" member(t, "xyz") --> failure contents of t: 3 : 4 &digits : &null t := table("default") --> table_3(0) t["one"] := 1 --> 1 t[] --> "default" x := r1([t, [1, [2, 3]]]) --> record r1_4(1) x[1, 1, "one"] --> 1 x[1, 2, 2, 2] --> 3 x[1, 2] := ["abcd", "defg"] --> list_56(2) x[1, 2, 2, 2] --> "e" $*[V9.TESTS.GENERAL.STAND]RECOGN.OUT;1+,K ./ 4H-)0123KPWO56p$.7PW/89Jj$GHJaccepted rejected accepted accepted rejected rejected rejected rejected "*[V9.TESTS.GENERAL.STAND]SCAN.OUT;1+,L ./ 4z-)0123KPWO56 /7P+H/89Jj$GHJ  ----> &null 2 2 1 1 4 4 3 3 2 2 1 1 4 4 3 3 1 1 every write(("badc" | "edgf" | "x") ? write(upto(!&lcase))) ----> none 1 5 5 every write((("aeiou" | "foobaz") ? upto('dracula')) ? =(1 to 10)) ----> none 1 2 3 4 5 6 7 8 9 1 every write((1 to 10) ? move(1)) ----> none &subject := &pos ----> "1" &pos :=: &subject ----> 1 &pos ----> 1 &subject ----> "1" +1 ----> 1 -1 ----> -1 ?10 ----> 3 ?10 ----> 5 ?10 ----> 4 ~&cset ----> '' ~&ascii ----> '\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' &subject := string(&lcase) ----> "abcdefghijklmnopqrstuvwxyz" ="a" ----> "a" ="b" ----> "b" ="d" ----> none &subject := string(&lcase) ----> "abcdefghijklmnopqrstuvwxyz" a b c d e f g h i j k l m n o p q r s t u v w x y z while write(move(1)) ----> none &subject := string(&lcase) ----> "abcdefghijklmnopqrstuvwxyz" a ab abc abcd abcde abcdef abcdefg abcdefgh abcdefghi every write(tab(1 to 10)) ----> none pos(0) ----> none pos(15) ----> none &subject := string(&lcase) ----> "abcdefghijklmnopqrstuvwxyz" pos(1) ----> 1 a ab abc abcd abcde abcdef every write("abcdef" ? tab(1 to 10)) ----> none every write("abcde" ? while move(2) ? move(1)) ----> none s := "abcdef" ----> "abcdef" s ?:= move(3) ----> "abc" s := "abcdef" ----> "abcdef" 1 2 3 4 5 6 every write(s ?:= upto(&lcase)) ----> none s := "this is the time to work it all out" ----> "this is the time to work it all out" this this is this is the this is the time this is the time to this is the time to work this is the time to work it this is the time to work it all every write(s ? tab(find(" "))) ----> none s := "xxxxxx" ----> "xxxxxx" x every s ? write(=("a" | "x")) ----> none f e d c b a "abcdef" ? (tab(0) & (while write(move(-1)))) ----> none $*[V9.TESTS.GENERAL.STAND]STRING.OUT;1+,M./ 4-)0123KPWO56EN/7N/89Jj$GHJ 8 VMS.BCKM)$[V9.TESTS.GENERAL.STAND]STRING.OUT;1  ----> &null s := "abcd" ----> "abcd" s := "x" ----> "x" s ||:= "x" ----> "xx" s ----> "xx" s := "x" ----> "x" s ||:= "xx" ----> "xxx" s ----> "xxx" s := "x" ----> "x" s ||:= "X" ----> "xX" s ----> "xX" s := "x" ----> "x" s ||:= "abc" ----> "xabc" s ----> "xabc" s := "x" ----> "x" s ==:= "x" ----> "x" s ----> "x" s := "x" ----> "x" s ==:= "xx" ----> none s ----> "x" s := "x" ----> "x" s ==:= "X" ----> none s ----> "x" s := "x" ----> "x" s ==:= "abc" ----> none s ----> "x" {s[1:2] := "xx";s} ----> "xx" {s[-1:0] := "";s} ----> "x" {s[1] := "abc";s} ----> "abc" {s[1+:2] := "y";s} ----> "yc" {s[2] :=: s[3];s} ----> "yc" s[6] := "t" ----> none s[0-:6] := "u" ----> none {s[1:0] :=: s[0:1];s} ----> "yc" "x" << "x" ----> none "x" << "X" ----> none "X" << "x" ----> "x" "xx" <<= "xx" ----> "xx" "xxx" <<= "xx" ----> none "xx" <<= "xxx" ----> "xxx" "x" >>= "x" ----> "x" "x" >>= "xx" ----> none "xx" >>= "x" ----> "x" "x" >> "x" ----> none "x" >> "X" ----> "X" "X" >> "x" ----> none "x" == "x" ----> "x" "x" == "X" ----> none "X" == "x" ----> none "x" ~== "x" ----> none "x" ~== "X" ----> "X" "X" ~== "x" ----> "x" 2 22 222 2222 22222 222222 2222222 22222222 222222222 every i := 1 to 9 do write(integer(repl("2",i))) ----> none 3 23 223 2223 22223 222223 2222223 22222223 222222223 every i := 1 to 9 do write(repl("2",i) + 1) ----> none 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 every i := 1 to 30 do write(integer(repl("0",i) || "2")) ----> none 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 every i := 1 to 30 do write((repl("0",i) || "2") + 1) ----> none c1 := 'abcde' ----> 'abcde' c2 := 'aeuoi' ----> 'aeiou' c1 ++ c2 ----> 'abcdeiou' c1 -- c2 ----> 'bcd' c1 ** c2 ----> 'ae' 2 ~=== +2 ----> none 3 ~=== *"abc" ----> none 'abc' ~=== ('abc' ++ '') ----> none any('aeiou',&lcase) ----> 2 any('aeiou',&ucase) ----> none 2 2 2 2 2 2 2 2 2 2 2 6 6 6 6 6 6 6 6 6 6 6 every write(any('aeiou',&lcase,1 to 5,10 to 20)) ----> none match("abc","abcabcabcabc") ----> 4 match("abc","xabcabcabcabc") ----> none 5 5 5 5 5 5 5 8 8 8 5 5 5 8 5 8 5 8 every write(match("abc","xabcabcabcabc",1 to 10,1 to 10)) ----> none upto('56d&',&lcase) ----> 4 upto('56d&',&ucase) ----> none upto('56d&',&lcase,15) ----> none many(&lcase,"this is a Test") ----> 5 many(&lcase,"this is a Test",5) ----> none many(&lcase,"this is a Test",5,9) ----> none find("aa","xxaaaaaa") ----> 3 3 4 5 6 7 every write(find("aa","xxaaaaaa")) ----> none 4 5 every write(find("aa","xxaaaaaa",4,7)) ----> none bal('-','(',')',"-35") ----> 1 bal('+','(',')',"((2*x)+3)+(5*y)") ----> 10 10 7 7 10 every write(bal('+','(',')',"((2*x)+3)+(5*y)",1 to 10)) ----> none bal('+','[','[',"[[2*x[+3[+[5*y[") ----> none bal('+','([','])',"([2*x)+3]+(5*y]") ----> 10 bal(,,,"()+()") ----> 1 bal(&cset,,,"()+()") ----> 1 $*[V9.TESTS.GENERAL.STAND]STRUCT.OUT;1+,N. / 4 =-)0123KPWO 560/7-/89Jj$GHJ ----> &null list(0) ----> list_1(0) list(0,1) ----> list_2(0) list(1,1) ----> list_3(1) list(100,"a") ----> list_4(100) table() ----> table_1(0) table(0) ----> table_2(0) a := [] ----> list_5(0) every put(a,!&lcase) ----> none a1 := sort(a) ----> list_6(26) a b c d e f g h i j k l m n o p q r s t u v w x y z every write(!a1) ----> none sort(a1) ----> list_7(26) t := table() ----> table_3(0) every t[!&lcase] := 1 ----> none sort(t) ----> list_8(26) a := sort(t) ----> list_35(26) a b c d e f g h i j k l m n o p q r s t u v w x y z every write((!a)[1]) ----> none 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 every write((!a)[2]) ----> none set([1,0,1,0,1,0,1,0]) ----> set_1(2) set([]) ----> set_2(0) s := set([1,2,3,4,5,6,7,8,9,10]) ----> set_3(10) *s ----> 10 1 2 3 4 5 6 7 8 9 10 every write(!sort(s)) ----> none *copy(s) ----> 10 image(s) ----> "set_3(10)" type(s) ----> "set" member(s,8) ----> 8 member(s,"8") ----> none s := set([]) ----> set_5(0) every insert(s,1 to 100) ----> none *s ----> 100 every delete(s,15 to 30) ----> none *s ----> 84 every s1 := insert(set([]),!&lcase) ----> none s2 := set(["a","aa","ab","b",1,2,3,4]) ----> set_7(8) s3 := s1 ++ s2 ----> set_8(32) s4 := s1 ** s2 ----> set_9(2) s5 := s1 -- s2 ----> set_10(24) *s3 ----> 32 *s4 ----> 2 *s5 ----> 24 t := table() ----> table_4(0) every t[1 | &output | &cset | [] | "hello" | main | 2 | table()] := ?100 ----> none a := sort(t,3) ----> list_70(16) 1 22 2 8 "hello" 43 &cset 32 &output 42 procedure main 31 list_69(0) 52 table_5(0) 74 every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1]) ----> none a := sort(t,4) ----> list_71(16) 2 8 1 22 procedure main 31 &cset 32 &output 42 "hello" 43 list_69(0) 52 table_5(0) 74 every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1]) ----> none t := table() ----> table_6(0) every t[1 | &output | &cset | [] | "hello" | main | 2 | table()] := ?100 ----> none a := sort(t,3) ----> list_73(16) 1 6 2 58 "hello" 54 &cset 14 &output 72 procedure main 63 list_72(0) 34 table_7(0) 71 every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1]) ----> none a := sort(t,4) ----> list_74(16) 1 6 &cset 14 list_72(0) 34 "hello" 54 2 58 procedure main 63 table_7(0) 71 &output 72 every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1]) ----> none x := [array(),table(),write,[],&input,1,"abc",'aa',&null] ----> list_76(9) x := sort(x) ----> list_77(9) &null 1 "abc" 'a' &input function write list_75(0) table_8(0) record array_1(7) every write(image(!x)) ----> none t := table(table()) ----> table_10(0) table_10(1) table_10(2) table_10(3) table_10(4) table_10(5) table_10(6) table_10(7) table_10(8) table_10(9) table_10(10) every t[1 to 10] := 1 do write(image(t)) ----> none t := table() ----> table_11(0) 1 2 3 4 5 6 7 8 9 10 every t[1 to 10] := 1 do write(*t) ----> none t[] := 6 ----> 6 t[] ----> 6 *t ----> 11 t[&null] := 7 ----> 7 t[] ----> 7 *t ----> 11 x := [] ----> list_78(0) *x ----> 0 every push(x,1 to 10) ----> none 10 9 8 7 6 5 4 3 2 1 every 1 to 10 do write(pop(x)) ----> none *x ----> 0 pop(x) ----> none pull(x) ----> none get(x) ----> none every put(x,1 to 10) ----> none 1 2 3 4 5 6 7 8 9 10 every 1 to 10 do write(get(x)) ----> none every push(x,1 to 10) ----> none 1 2 3 4 5 6 7 8 9 10 every 1 to 10 do write(pull(x)) ----> none x := [1,2,3,4,5,6,7,8,9,0] ----> list_79(10) list_80(10) list_81(9) list_82(8) list_83(7) list_84(6) list_85(5) list_86(4) list_87(3) list_88(2) list_89(1) list_90(0) every write(image(x[1:0 to -20 by -1])) ----> none a := [1,2,3,4,5,6,7,8] ----> list_91(8) a1 := a[2:4] ----> list_92(2) a2 := a[7:2] ----> list_93(5) a3 := a[2+:3] ----> list_94(3) a4 := a[-1-:3] ----> list_95(3) a1[1] ----> 2 a2[1] ----> 2 a3[1] ----> 2 a4[1] ----> 5 a4[1] := a ----> list_91(8) a := [1,2,3,4] ----> list_96(4) a1 := a[1:2] ----> list_97(1) 1 every write(!a1) ----> none a2 := a[3:0] ----> list_98(2) 3 4 every write(!a2) ----> none a4 := a[2:2] ----> list_99(0) every write(!a4) ----> none a5 := a[0-:2] ----> list_100(2) 3 4 every write(!a5) ----> none a3 := a[0:3] ----> list_101(2) 3 4 every write(!a3) --- J VMS.BCKN)$[V9.TESTS.GENERAL.STAND]STRUCT.OUT;1  -> none a := "abcd" ----> "abcd" a1 := a[1:2] ----> "a" a every write(!a1) ----> none a2 := a[3:0] ----> "cd" c d every write(!a2) ----> none a3 := a[0:3] ----> "cd" c d every write(!a3) ----> none a4 := a[2:2] ----> "" every write(!a4) ----> none a5 := a[0-:2] ----> "cd" c d every write(!a5) ----> none [] ||| [] ----> list_104(0) [1,2,3] ||| [] ----> list_107(3) [] ||| [1,2,3] ----> list_110(3) r := array(1,2,3,4,5,6,7,8,9) ----> record array_2(7) r.a ----> 1 r.b ----> 2 r.c ----> 3 r.d ----> 4 r.e ----> 5 r.f ----> 6 type(r) ----> "array" image(r) ----> "record array_2(7)" r.a +:= 0 ----> 1 r.b +:= 0 ----> 2 r.c +:= 0 ----> 3 r.d +:= 0 ----> 4 r.e +:= 0 ----> 5 r.f +:= 0 ----> 6 r.a ----> 1 r.b ----> 2 r.c ----> 3 r.d ----> 4 r.e ----> 5 r.f ----> 6 r := array("a",2,array(),r,main) ----> record array_4(7) "a" 2 3.5 record array_3(7) record array_2(7) procedure main &null every write(image(!r)) ----> none r[1] :=: r.d ----> record array_3(7) record array_3(7) 2 3.5 "a" record array_2(7) procedure main &null every write(image(!r)) ----> none a: -2035912587 847198497 a$*[V9.TESTS.GENERAL.STAND]TRACER.OUT;1+,O. / 4 -)0123KPWO 56P/7:089Jj$GHJtracer.icn : 7 | tracer(1) tracer.icn : 20 | tracer suspended 1 tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended 2 tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended 3 tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "abcdef" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "123456" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended 4 tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended 0 tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended -16 tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "3" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "4" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "c" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "cd" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "0" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "-" tracer.icn : 7 | tracer resumed tracer.icn : 20 | tracer suspended "2" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended 1 tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended 2 tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended (variable = 3) tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended (variable = "abcdef") tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended &subject = "123456" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended &pos = 4 tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended &random = 0 tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended &trace = -47 tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended &subject[3] = "3" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended "4" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended "abcdef"[3] = "c" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended "abcdef"[3+:2] = "cd" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended "0" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended "-" tracer.icn : 7 | tracer resumed tracer.icn : 23 | tracer suspended &subject[2] = "2" tracer.icn : 7 | tracer resumed tracer.icn : 26 | tracer failed tracer.icn : 8 | foo(4) tracer.icn : 29 | foo returned 4 tracer.icn : 8 | foo("123456") tracer.icn : 29 | foo returned "123456" tracer.icn : 8 | foo("4") tracer.icn : 29 | foo returned "4" tracer.icn : 8 | foo("234") tracer.icn : 29 | foo returned "234" co-expression_1(1) main local identifiers: global identifiers: display = function display foo = procedure foo main = procedure main s = "abcdef" tracer = procedure tracer write = function write 10 tracer.icn 1 tracer.icn : 13 main failed &*[V9.TESTS.GENERAL.STAND]TRANSMIT.OUT;1+,P. / 4 ?-)0123KPWO 56iB07P‘089Jj$GHJtransmit.icn : 11 | main; co-expression_1 : &null @ co-expression_4 transmit.icn : 10 | output() transmit.icn : 27 | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 8 | | word() transmit.icn : 17 | | | word; co-expression_2 : &null @ co-expression_3 transmit.icn : 9 | | | reader() transmit.icn : 23 | | | | reader; co-expression_3 : "Version 7 of Ico..." @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "Version" @ co-expression_4 Version transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "of" @ co-expression_4 of transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "Icon" @ co-expression_4 Icon transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "corrects" @ co-expression_4 corrects transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "a" @ co-expression_4 a transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "number" @ co-expression_4 number transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "of" @ co-expression_4 of transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "problems" @ co-expression_4 problems transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 17 | | | | word; co-expression_2 : &null @ co-expression_3 transmit.icn : 23 | | | | reader; co-expression_3 : "with co-expressi..." @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "with" @ co-expression_4 with transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-exp m VMS.BCKP)&[V9.TESTS.GENERAL.STAND]TRANSMIT.OUT;1 ~Sression_2 transmit.icn : 19 | | | | word; co-expression_2 : "co" @ co-expression_4 co transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "expressions" @ co-expression_4 expressions transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "that" @ co-expression_4 that transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "existed" @ co-expression_4 existed transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "in" @ co-expression_4 in transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "previous" @ co-expression_4 previous transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 17 | | | | word; co-expression_2 : &null @ co-expression_3 transmit.icn : 23 | | | | reader; co-expression_3 : "versions. The mo..." @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "versions" @ co-expression_4 versions transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "The" @ co-expression_4 The transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "most" @ co-expression_4 most transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "significant" @ co-expression_4 significant transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "one" @ co-expression_4 one transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "is" @ co-expression_4 is transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "proper" @ co-expression_4 proper transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 17 | | | | word; co-expression_2 : &null @ co-expression_3 transmit.icn : 23 | | | | reader; co-expression_3 : "handling of co-e..." @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "handling" @ co-expression_4 handling transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "of" @ co-expression_4 of transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "co" @ co-expression_4 co transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "expression" @ co-expression_4 expression transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "return" @ co-expression_4 return transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 19 | | | | word; co-expression_2 : "points" @ co-expression_4 points transmit.icn : 27 | | | | output; co-expression_4 : &null @ co-expression_2 transmit.icn : 17 | | | | word; co-expression_2 : &null @ co-expression_3 transmit.icn : 24 | | | reader failed transmit.icn : 9 | | | main; co-expression_3 failed to co-expression_2 transmit.icn : 20 | | word failed transmit.icn : 8 | | main; co-expression_2 failed to co-expression_4 transmit.icn : 28 | | output; co-expression_4 : &null @ co-expression_1 transmit.icn : 12 | main failed e!*[V9.TESTS.GENERAL.STAND]VAR.OUT;1+,Q./ 4-)0123KPWO56pc07089Jj$GHJ"main" "T" "L" "s" "a" &null "&error" "T[\"abc\"]" "T[\"abc\"]" "L[1]" "L[2]" "L[3]" "L[200]" "L[191]" "L[1]" "L[2]" "L[3]" "L[200]" "L[191]" "complex.r" *[V9.TESTS.GENERAL]STRING.DAT;1+, ./ 4-&0123KPWO56>7>89Jj$GHJ*[V9.TESTS.GENERAL]STRING.ICN;1+,u./ 4 -&0123KPWO5677YN889Jj$GHJrecord array(a,b,c,d,e,f,g) procedure p1() write(" ----> ",image() | "none") write("s := \"abcd\" ----> ",image(s := "abcd") | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ||:= \"x\" ----> ",image(s ||:= "x") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ||:= \"xx\" ----> ",image(s ||:= "xx") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ||:= \"X\" ----> ",image(s ||:= "X") | "none") write("s ----> ",image(s) | "none") end procedure p2() write("s := \"x\" ----> ",image(s := "x") | "none") write("s ||:= \"abc\" ----> ",image(s ||:= "abc") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ==:= \"x\" ----> ",image(s ==:= "x") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ==:= \"xx\" ----> ",image(s ==:= "xx") | "none") write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ==:= \"X\" ----> ",image(s ==:= "X") | "none") end procedure p3() write("s ----> ",image(s) | "none") write("s := \"x\" ----> ",image(s := "x") | "none") write("s ==:= \"abc\" ----> ",image(s ==:= "abc") | "none") write("s ----> ",image(s) | "none") write("{s[1:2] := \"xx\";s} ----> ",image({s[1:2] := "xx";s}) | "none") write("{s[-1:0] := \"\";s} ----> ",image({s[-1:0] := "";s}) | "none") write("{s[1] := \"abc\";s} ----> ",image({s[1] := "abc";s}) | "none") write("{s[1+:2] := \"y\";s} ----> ",image({s[1+:2] := "y";s}) | "none") write("{s[2] :=: s[3];s} ----> ",image({s[2] :=: s[3];s}) | "none") write("s[6] := \"t\" ----> ",image(s[6] := "t") | "none") write("s[0-:6] := \"u\" ----> ",image(s[0-:6] := "u") | "none") end procedure p4() write("{s[1:0] :=: s[0:1];s} ----> ",image({s[1:0] :=: s[0:1];s}) | "none") write("\"x\" << \"x\" ----> ",ima  VMS.BCKu&[V9.TESTS.GENERAL]STRING.ICN;1ge("x" << "x") | "none") write("\"x\" << \"X\" ----> ",image("x" << "X") | "none") write("\"X\" << \"x\" ----> ",image("X" << "x") | "none") write("\"xx\" <<= \"xx\" ----> ",image("xx" <<= "xx") | "none") write("\"xxx\" <<= \"xx\" ----> ",image("xxx" <<= "xx") | "none") write("\"xx\" <<= \"xxx\" ----> ",image("xx" <<= "xxx") | "none") write("\"x\" >>= \"x\" ----> ",image("x" >>= "x") | "none") write("\"x\" >>= \"xx\" ----> ",image("x" >>= "xx") | "none") write("\"xx\" >>= \"x\" ----> ",image("xx" >>= "x") | "none") write("\"x\" >> \"x\" ----> ",image("x" >> "x") | "none") end procedure p5() write("\"x\" >> \"X\" ----> ",image("x" >> "X") | "none") write("\"X\" >> \"x\" ----> ",image("X" >> "x") | "none") write("\"x\" == \"x\" ----> ",image("x" == "x") | "none") write("\"x\" == \"X\" ----> ",image("x" == "X") | "none") write("\"X\" == \"x\" ----> ",image("X" == "x") | "none") write("\"x\" ~== \"x\" ----> ",image("x" ~== "x") | "none") write("\"x\" ~== \"X\" ----> ",image("x" ~== "X") | "none") write("\"X\" ~== \"x\" ----> ",image("X" ~== "x") | "none") write("every i := 1 to 9 do write(integer(repl(\"2\",i))) ----> ",image(every i := 1 to 9 do write(integer(repl("2",i)))) | "none") write("every i := 1 to 9 do write(repl(\"2\",i) + 1) ----> ",image(every i := 1 to 9 do write(repl("2",i) + 1)) | "none") end procedure p6() write("every i := 1 to 30 do write(integer(repl(\"0\",i) || \"2\")) ----> ",image(every i := 1 to 30 do write(integer(repl("0",i) || "2"))) | "none") write("every i := 1 to 30 do write((repl(\"0\",i) || \"2\") + 1) ----> ",image(every i := 1 to 30 do write((repl("0",i) || "2") + 1)) | "none") write("c1 := 'abcde' ----> ",image(c1 := 'abcde') | "none") write("c2 := 'aeuoi' ----> ",image(c2 := 'aeuoi') | "none") write("c1 ++ c2 ----> ",image(c1 ++ c2) | "none") write("c1 -- c2 ----> ",image(c1 -- c2) | "none") write("c1 ** c2 ----> ",image(c1 ** c2) | "none") write("2 ~=== +2 ----> ",image(2 ~=== +2) | "none") write("3 ~=== *\"abc\" ----> ",image(3 ~=== *"abc") | "none") end procedure p7() write("'abc' ~=== ('abc' ++ '') ----> ",image('abc' ~=== ('abc' ++ '')) | "none") write("any('aeiou',&lcase) ----> ",image(any('aeiou',&lcase)) | "none") write("any('aeiou',&ucase) ----> ",image(any('aeiou',&ucase)) | "none") write("every write(any('aeiou',&lcase,1 to 5,10 to 20)) ----> ",image(every write(any('aeiou',&lcase,1 to 5,10 to 20))) | "none") write("match(\"abc\",\"abcabcabcabc\") ----> ",image(match("abc","abcabcabcabc")) | "none") write("match(\"abc\",\"xabcabcabcabc\") ----> ",image(match("abc","xabcabcabcabc")) | "none") write("every write(match(\"abc\",\"xabcabcabcabc\",1 to 10,1 to 10)) ----> ",image(every write(match("abc","xabcabcabcabc",1 to 10,1 to 10))) | "none") write("upto('56d&',&lcase) ----> ",image(upto('56d&',&lcase)) | "none") write("upto('56d&',&ucase) ----> ",image(upto('56d&',&ucase)) | "none") write("upto('56d&',&lcase,15) ----> ",image(upto('56d&',&lcase,15)) | "none") write("many(&lcase,\"this is a Test\") ----> ",image(many(&lcase,"this is a Test")) | "none") end procedure p8() write("many(&lcase,\"this is a Test\",5) ----> ",image(many(&lcase,"this is a Test",5)) | "none") write("many(&lcase,\"this is a Test\",5,9) ----> ",image(many(&lcase,"this is a Test",5,9)) | "none") write("find(\"aa\",\"xxaaaaaa\") ----> ",image(find("aa","xxaaaaaa")) | "none") write("every write(find(\"aa\",\"xxaaaaaa\")) ----> ",image(every write(find("aa","xxaaaaaa"))) | "none") write("every write(find(\"aa\",\"xxaaaaaa\",4,7)) ----> ",image(every write(find("aa","xxaaaaaa",4,7))) | "none") write("bal('-','(',')',\"-35\") ----> ",image(bal('-','(',')',"-35")) | "none") write("bal('+','(',')',\"((2*x)+3)+(5*y)\") ----> ",image(bal('+','(',')',"((2*x)+3)+(5*y)")) | "none") write("every write(bal('+','(',')',\"((2*x)+3)+(5*y)\",1 to 10)) ----> ",image(every write(bal('+','(',')',"((2*x)+3)+(5*y)",1 to 10))) | "none") write("bal('+','[','[',\"[[2*x[+3[+[5*y[\") ----> ",image(bal('+','[','[',"[[2*x[+3[+[5*y[")) | "none") write("bal('+','([','])',\"([2*x)+3]+(5*y]\") ----> ",image(bal('+','([','])',"([2*x)+3]+(5*y]")) | "none") write("bal(,,,\"()+()\") ----> ",image(bal(,,,"()+()")) | "none") end procedure p9() write("bal(&cset,,,\"()+()\") ----> ",image(bal(&cset,,,"()+()")) | "none") end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() end global s *[V9.TESTS.GENERAL]STRUCT.DAT;1+, ./ 4-&0123KPWO56@ų>7 >89Jj$GHJ*[V9.TESTS.GENERAL]STRUCT.ICN;1+,v./ 4}-&0123KPWO56PW87v889Jj$GHJ record array(a,b,c,d,e,f,g) procedure p1() write(" ----> ",image() | "none") write("list(0) ----> ",image(list(0)) | "none") write("list(0,1) ----> ",image(list(0,1)) | "none") write("list(1,1) ----> ",image(list(1,1)) | "none") write("list(100,\"a\") ----> ",image(list(100,"a")) | "none") write("table() ----> ",image(table()) | "none") write("table(0) ----> ",image(table(0)) | "none") write("a := [] ----> ",image(a := []) | "none") write("every put(a,!&lcase) ----> ",image(every put(a,!&lcase)) | "none") write("a1 := sort(a) ----> ",image(a1 := sort(a)) | "none") write("every write(!a1) ----> ",image(every write(!a1)) | "none") end procedure p2() write("sort(a1) ----> ",image(sort(a1)) | "none") write("t := table() ----> ",image(t := table()) | "none") write("every t[!&lcase] := 1 ----> ",image(every t[!&lcase] := 1) | "none") write("sort(t) ----> ",image(sort(t)) | "none") write("a := sort(t) ----> ",image(a := sort(t)) | "none") write("every write((!a)[1]) ----> ",image(every write((!a)[1])) | "none") write("every write((!a)[2]) ----> ",image(every write((!a)[2])) | "none") write("set([1,0,1,0,1,0,1,0]) ----> ",image(set([1,0,1,0,1,0,1,0])) | "none") write("set([]) ----> ",image(set([])) | "none") write("s := set([1,2,3,4,5,6,7,8,9,10]) ----> ",image(s := set([1,2,3,4,5,6,7,8,9,10])) | "none") write("*s ----> ",image(*s) | "none") end procedure p3() write("every write(!sort(s)) ----> ",image(every write(!sort(s))) | "none") write("*copy(s) ----> ",image(*copy(s)) | "none") write("image(s) ----> ",image(image(s)) | "none") write("type(s) ----> ",image(type(s)) | "none") write("member(s,8) ----> ",image(member(s,8)) | "none") write("member(s,\"8\") ----> ",image(member(s,"8")) | "none") write("s := set([]) ----> ",image(s := set([])) | "none") write("every insert(s,1 to 100) ----> ",image(every insert(s,1 to 100)) | "none") write("*s ----> ",image(*s) | "none") write("every delete(s,15 to 30) ----> ",image(every delete(s,15 to 30)) | "none") write("*s ----> ",image(*s) | "none") end procedure p4() write("every s1 := insert(set([]),!&lcase) ----> ",image(every s1 := insert(set([]),!&lcase)) | "none") write("s2 := set([\"a\",\"aa\",\"ab\",\"b\",1,2,3,4]) ----> ",image(s2 := set(["a","aa","ab","b",1,2,3,4])) | "none") write("s3 := s1 ++ s2 ----> ",image(s3 := s1 ++ s2) | "none") write("s4 := s1 ** s2 ----> ",image(s4 := s1 ** s2) | "none") write("s5 := s1 -- s2 ----> ",image(s5 := s1 -- s2) | "none")  tX VMS.BCKv&[V9.TESTS.GENERAL]STRUCT.ICN;1/ write("*s3 ----> ",image(*s3) | "none") write("*s4 ----> ",image(*s4) | "none") write("*s5 ----> ",image(*s5) | "none") write("t := table() ----> ",image(t := table()) | "none") write("every t[1 | &output | &cset | [] | \"hello\" | main | 2 | table()] := ?100 ----> ",image(every t[1 | &output | &cset | [] | "hello" | main | 2 | table()] := ?100) | "none") write("a := sort(t,3) ----> ",image(a := sort(t,3)) | "none") end procedure p5() write("every i := 1 to *a - 1 by 2 do write(image(a[i]),\" \",a[i + 1]) ----> ",image(every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | "none") write("a := sort(t,4) ----> ",image(a := sort(t,4)) | "none") write("every i := 1 to *a - 1 by 2 do write(image(a[i]),\" \",a[i + 1]) ----> ",image(every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | "none") write("t := table() ----> ",image(t := table()) | "none") write("every t[1 | &output | &cset | [] | \"hello\" | main | 2 | table()] := ?100 ----> ",image(every t[1 | &output | &cset | [] | "hello" | main | 2 | table()] := ?100) | "none") write("a := sort(t,3) ----> ",image(a := sort(t,3)) | "none") write("every i := 1 to *a - 1 by 2 do write(image(a[i]),\" \",a[i + 1]) ----> ",image(every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | "none") write("a := sort(t,4) ----> ",image(a := sort(t,4)) | "none") write("every i := 1 to *a - 1 by 2 do write(image(a[i]),\" \",a[i + 1]) ----> ",image(every i := 1 to *a - 1 by 2 do write(image(a[i])," ",a[i + 1])) | "none") write("x := [array(),table(),write,[],&input,1,\"abc\",'aa',&null] ----> ",image(x := [array(),table(),write,[],&input,1,"abc",'aa',&null]) | "none") write("x := sort(x) ----> ",image(x := sort(x)) | "none") end procedure p6() write("every write(image(!x)) ----> ",image(every write(image(!x))) | "none") write("t := table(table()) ----> ",image(t := table(table())) | "none") write("every t[1 to 10] := 1 do write(image(t)) ----> ",image(every t[1 to 10] := 1 do write(image(t))) | "none") write("t := table() ----> ",image(t := table()) | "none") write("every t[1 to 10] := 1 do write(*t) ----> ",image(every t[1 to 10] := 1 do write(*t)) | "none") write("t[] := 6 ----> ",image(t[] := 6) | "none") write("t[] ----> ",image(t[]) | "none") write("*t ----> ",image(*t) | "none") write("t[&null] := 7 ----> ",image(t[&null] := 7) | "none") write("t[] ----> ",image(t[]) | "none") write("*t ----> ",image(*t) | "none") end procedure p7() write("x := [] ----> ",image(x := []) | "none") write("*x ----> ",image(*x) | "none") write("every push(x,1 to 10) ----> ",image(every push(x,1 to 10)) | "none") write("every 1 to 10 do write(pop(x)) ----> ",image(every 1 to 10 do write(pop(x))) | "none") write("*x ----> ",image(*x) | "none") write("pop(x) ----> ",image(pop(x)) | "none") write("pull(x) ----> ",image(pull(x)) | "none") write("get(x) ----> ",image(get(x)) | "none") write("every put(x,1 to 10) ----> ",image(every put(x,1 to 10)) | "none") write("every 1 to 10 do write(get(x)) ----> ",image(every 1 to 10 do write(get(x))) | "none") write("every push(x,1 to 10) ----> ",image(every push(x,1 to 10)) | "none") end procedure p8() write("every 1 to 10 do write(pull(x)) ----> ",image(every 1 to 10 do write(pull(x))) | "none") write("x := [1,2,3,4,5,6,7,8,9,0] ----> ",image(x := [1,2,3,4,5,6,7,8,9,0]) | "none") write("every write(image(x[1:0 to -20 by -1])) ----> ",image(every write(image(x[1:0 to -20 by -1]))) | "none") write("a := [1,2,3,4,5,6,7,8] ----> ",image(a := [1,2,3,4,5,6,7,8]) | "none") write("a1 := a[2:4] ----> ",image(a1 := a[2:4]) | "none") write("a2 := a[7:2] ----> ",image(a2 := a[7:2]) | "none") write("a3 := a[2+:3] ----> ",image(a3 := a[2+:3]) | "none") write("a4 := a[-1-:3] ----> ",image(a4 := a[-1-:3]) | "none") write("a1[1] ----> ",image(a1[1]) | "none") write("a2[1] ----> ",image(a2[1]) | "none") write("a3[1] ----> ",image(a3[1]) | "none") end procedure p9() write("a4[1] ----> ",image(a4[1]) | "none") write("a4[1] := a ----> ",image(a4[1] := a) | "none") write("a := [1,2,3,4] ----> ",image(a := [1,2,3,4]) | "none") write("a1 := a[1:2] ----> ",image(a1 := a[1:2]) | "none") write("every write(!a1) ----> ",image(every write(!a1)) | "none") write("a2 := a[3:0] ----> ",image(a2 := a[3:0]) | "none") write("every write(!a2) ----> ",image(every write(!a2)) | "none") write("a4 := a[2:2] ----> ",image(a4 := a[2:2]) | "none") write("every write(!a4) ----> ",image(every write(!a4)) | "none") write("a5 := a[0-:2] ----> ",image(a5 := a[0-:2]) | "none") write("every write(!a5) ----> ",image(every write(!a5)) | "none") end procedure p10() write("a3 := a[0:3] ----> ",image(a3 := a[0:3]) | "none") write("every write(!a3) ----> ",image(every write(!a3)) | "none") write("a := \"abcd\" ----> ",image(a := "abcd") | "none") write("a1 := a[1:2] ----> ",image(a1 := a[1:2]) | "none") write("every write(!a1) ----> ",image(every write(!a1)) | "none") write("a2 := a[3:0] ----> ",image(a2 := a[3:0]) | "none") write("every write(!a2) ----> ",image(every write(!a2)) | "none") write("a3 := a[0:3] ----> ",image(a3 := a[0:3]) | "none") write("every write(!a3) ----> ",image(every write(!a3)) | "none") write("a4 := a[2:2] ----> ",image(a4 := a[2:2]) | "none") write("every write(!a4) ----> ",image(every write(!a4)) | "none") end procedure p11() write("a5 := a[0-:2] ----> ",image(a5 := a[0-:2]) | "none") write("every write(!a5) ----> ",image(every write(!a5)) | "none") write("[] ||| [] ----> ",image([] ||| []) | "none") write("[1,2,3] ||| [] ----> ",image([1,2,3] ||| []) | "none") write("[] ||| [1,2,3] ----> ",image([] ||| [1,2,3]) | "none") write("r := array(1,2,3,4,5,6,7,8,9) ----> ",image(r := array(1,2,3,4,5,6,7,8,9)) | "none") write("r.a ----> ",image(r.a) | "none") write("r.b ----> ",image(r.b) | "none") write("r.c ----> ",image(r.c) | "none") write("r.d ----> ",image(r.d) | "none") write("r.e ----> ",image(r.e) | "none") end procedure p12() write("r.f ----> ",image(r.f) | "none") write("type(r) ----> ",image(type(r)) | "none") write("image(r) ----> ",image(image(r)) | "none") write("r.a +:= 0 ----> ",image(r.a +:= 0) | "none") write("r.b +:= 0 ----> ",image(r.b +:= 0) | "none") write("r.c +:= 0 ----> ",image(r.c +:= 0) | "none") write("r.d +:= 0 ----> ",image(r.d +:= 0) | "none") write("r.e +:= 0 ----> ",image(r.e +:= 0) | "none") write("r.f +:= 0 ----> ",image(r.f +:= 0) | "none") write("r.a ----> ",image(r.a) | "none") write("r.b ----> ",image(r.b) | "none") end procedure p13() write("r.c ----> ",image(r.c) | "none") write("r.d ----> ",image(r.d) | "none") write("r.e ----> ",image(r.e) | "none") write("r.f ----> ",image(r.f) | "none") write("r := array(\"a\",2,array(),r,main) ----> ",image(r := array("a",2,3.5,array(),r,main)) | "none") write("every write(image(!r)) ----> ",image(every write(image(!r))) | "none") write("r[1] :=: r.d ----> ",image(r[1] :=: r.d) | "none") write("every write(image(!r)) ----> ",image(every write(image(!r))) | "none") # test that overflow is not ignored when comparing integers a := [847198497, -2035912587] every writes(" ", "a:" | !sort(a) | "\n") end procedure main() p1() p2() p3() p4() p5() p6() p7() p8() p9() p10() p11() p12() p13() end global s, t, x, r global a, a1, a2, a3, a4 )  VMS.BCK&[V9.TESTS.GENERAL]TRACER.DAT;1p*[V9.TESTS.GENERAL]TRACER.DAT;1+,./ 4-&0123KPWO56>7q>89Jj$GHJ*[V9.TESTS.GENERAL]TRACER.ICN;1+,./ 4-&0123KPWO56l;7 ;89Jj$GHJglobal s procedure main() &trace := -1 s := "abcdef" &subject := "123456" &pos := 4 every tracer(1) every foo(&pos | &subject | &pos[1] | &subject[2:5]) display() write(&line) write(&file) write(&level) end procedure tracer(a) local i static j i := 2 j := 3 suspend .(a | i | j | s | &subject | &pos | &random | &trace | &subject[3:4] | &pos[1] | s[3] | s[3:5] | &random[1] | &trace[1] | &subject[2:5][1]) suspend (a | i | j | s | &subject | &pos | &random | &trace | &subject[3:4] | &pos[1] | s[3] | s[3:5] | &random[1] | &trace[1] | &subject[2:5][1]) end procedure foo(s) return s end  *[V9.TESTS.GENERAL]TRANSMIT.DAT;1+,./ 4-&0123KPWO56`<7m<89Jj$GHJVersion 7 of Icon corrects a number of problems with co-expressions that existed in previous versions. The most significant one is proper handling of co-expression return points.  *[V9.TESTS.GENERAL]TRANSMIT.ICN;1+,~./ 4#-&0123KPWO56w:71;89Jj$GHJglobal words, lines, writer procedure main() if not(&features == "co-expressions") then stop("co-expressions not supported") &trace := -1 words := create word() lines := create reader() writer := create output() @writer end procedure word() static letters initial letters := &lcase ++ &ucase while line := @lines do line ? while tab(upto(letters)) do tab(many(letters)) @ writer end procedure reader() while read() @ words end procedure output() while write(&errout,@words) @&main end u*[V9.TESTS.GENERAL]VAR.DAT;1+, ./ 4-&0123KPWO56z?70?89Jj$GHJ*[V9.TESTS.GENERAL]VAR.ICN;1+, ./ 4n-&0123KPWO56>7 ?89Jj$GHJprocedure main(a) local x static y variable("a") := 1 variable("x") := 2 variable("y") := 3 if variable("z") then write("oops") main2() end record complex(r,i) procedure main2(a) static s every write(image(name(main | T | L | s | a))) T := table() L := list(200) L1 := [] every 1 to 200 do push(L1,1) write(image(L[10])) write(image(name(&error))) write(image(name(T["abc"]))) T["abc"] := 1 write(image(name(T["abc"]))) every write(image(name(L[1 | 2 | 3 | -1 | -10]))) every write(image(name(L1[1 | 2 | 3 | -1 | -10]))) write(image(name(complex().r))) end *[V9.TESTS]GRAPHICS.DIR;1+,./ 4- 0123 KPWO56cHj7Zj89Ҋ;vGHJIGPXTEST. GPXTEST.GIF GPXTEST.ICNREADME.*[V9.TESTS.GRAPHICS]GPXTEST.;1+,.s/ 4srv-0123KPWOt56>s7雁89Jj$GHJ#!/bin/sh case $# in 0) exec "${ICONX-/usr5/icon/v9/bin/iconx}" "$0";; *) exec "${ICONX-/usr5/icon/v9/bin/iconx}" "$0" "$@";; esac [executable Icon binary follows] R_k|4E<E<P< bbbb=NCT EEEM6E<E<P< bbbM<bE<E<P< bbbb=NC`UET MEb=<bNT!MKb=NCUESEEE<<Pb<bE<E<E<P< bbb<b)bFUT"<SE<Sb<b=N5NC$T!M]b=NC4ETET<bbNC TT)b=NC TT"b=NC TT'b 29 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s_=NC TT,b=NC TT%b=NC TT+b=NC TTb=NC TT(b=NC TT b=NC TT-b=NC TT.b=NC TT$b=NC TT!b=NC TTb=NC TT*b=NC TT&b=NC TT/b=NC TTb=NCtT3b>>EEE<E<P< bb<PbE< <bbEE<E<P< bbE< <bb<PE<< b<EE<b< bMbTCT#M TCT0b= NC$TBb>>b=NC<T=b>>3TCT0b=NC$T?b>>b=NEbD?D 3TVvbCUEET4<b<bNC ET<bNET4<bNCpEST$EETKbE<P< bbb=bNCpEST$EETKdbE<P< bbb=bNC$ESb>>bNCpEb>>T%EM}SbEMSbb=bNCTEEE<P<bb<bEEE<P<bb<bE<P<bE<P<bb=NCxT&EE<P<bbEE<P<bb<P<Pb=NCQb=NC$T'b>>b=NC$Eb>>SbNEbD< 8bC ES<bNC ES<bNC8ESEb>,< bbNC4UESE<P<bbNCC@T(<<SSSb=NC(ES4<bNC(ES4SbNES4Eb>,<(bbN:NEbD$=bCUT)EEEE<P<bb<bE<P<b<b)EEEE<P<bb<bE<P<b<b)Mb=F5NEbD?333333?ffffff? =p ?ffffffLCbC CEST*Mb=bFEST*Mb=bFEST*Mb=bNC$T!Mb=NChT+EE<P<bbEE<P<bbb=NC T!Sb=NCT,EE<P<bbEK<Pb<PEE<P<bbb=NCT-<<EEK0b<PbEEKb<PbEEKb<Pb<b=NCT-<<EK<PbEEKdb<PbEK@<Pb<b=NC T!Sb=NC$T M b=NCT(EEKb<PbEEKb<Pb<EEEKX<PbEEKHb<Pb<b=NC T!Sb=NCT(<EE<P<bbEK<PbEb>,<bEb>,<bb=NC T<b=NCUESE<<<b)bFUC T<db=NCHESEES<b<<bbNCT.SEEEESM<bSbM<bSbb=NC4ESE<SbbNT.SEEEESM<bSbM<bSbb=N5NUESE<<<b)bFUC T<db=NCHESEES<b<<bbNT.SEEEESM<bSbM<bSbb=N5:C|TEEE<P<bb<bEE<P<bbb=NC(T/<<b=NTM!b=NEbD$LbC$T Mb=NCxT EEEM6<PbM<bE<P<bbb=NCT,b=NC<T,EEE<P<bb=NCHT,EE<<Pb<bb=NC8T EM<Pbb=NC8T0EE<P<bb=NC$T M b=NEbD$TbC|TEEE<P<bb<bEE<P<bbb=NC$TMb=NC,T+E<bb=NC$TMb=NC(T1<<b=NC$TM b=NCpTMC8T2Mb=NM4': M \b=NCpTMC8T2M gb=NM4': M tb=NCpTMC8T2M b=NM4': M b=NCpTMC8T2Mb=NM4': M b=NEbD??@@@,!]bCtT1<EEE<P<bbT Mb=bb=NClUESCbE8:xCK8:\CK8:@CK8:$CK8:KbF 4 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s+UC$TMb=NCDT EMESbbb=NCT+E<bET MVb=T Mb=bEE<P<bbET Mb=bb=NC$TMb=NTT M]b=b=N5NEbD4$cVbCTESEEE<P<bb<bbNCUT EM E<<Ib)bb=FUT#EEE<P<bb< bES4<bb=N5NEbD4&XiTVbC`T"EQ<bQEQ<bQb=NC`T"EQ<bQEQ<bQb=NC`T"QEQ<bQEQ<bb=NC`T"QEQ<bQEQ<bb=NC(EQ4<bNCT"EQ<bEQ<bEQ<bEQ<bb=NCT"EQ<bEQ<bEQ<bEQ<bb=NCT"EQ<bEQ<bEQ<bEQ<bb=NCT"EQ<bEQ<bEQ<bEQ<bb=NC(EQ4<bNCT"EQ<bEQ<bEQ<bEQ<bb=NCT"EQ<bEQ<bEQ<bEQ<bb=NC(EQ4<bNC`T"QEQ<bEQ<bQb=NC`T"EQ<bQQEQ<bb=NC`T"QEQ<bEQ<bQb=NC`T"EQ<bQQEQ<bb=NC(EQ4<bNC`T3EQ<bEQ<b<<b=NEbD?QRL.oTVbC$T M b=NCDT(<<EKH<Pbb=NC$T M b=NC$T Mb=NCESEMMMM9MMMUMiM}MbA bNCUESE<<Ib)bFUUESE<<Ib)bFUCT EMESEEE<SbSb<bb&bb=NC|ESEEE<P<bbEES<Pb<bbbNC|ESEEE<P<bbEES<Pb<bbbNT+SSE<P<bE<P<bb=N5N5NEbD$2ubC$T M b=NCT4<E<bE<b<<<<#<<E<bE<#b<E<b<<<E<bE<bb=NEbD<48}bC$TMb=NChT+EE<P<bbEE<P<bbb=NC$T Mb=NC ES<bNC|ESEMM M M M MM .bAbNC$T M b=NCUT!ESbb=FUT(<<ES4<b<Eb>,bb=N5NEbD?Q46bC$T Mb=NC4ESE<P<bbNCUESE<<<b)bFUT3EEEST5EKSbb=bEST6EKSbb=bb=N5NEbD48TVbChTEE<P<bbEE<P<bbb=NCT+b=NCtUE<<Ib)FUC,ESE<Pb bNC,ESE<Pb bNC0T M;M Db=NC0T(SS<b=NC0T MPM b=NT(SS<b=N5NEbD$:bCT7EEE<P<bb<bEEE<P<bb< bM Yb=NCDT(<<E<P<bb=NCT+b=NC`T8< <E<P<bE<P<bb=NC$T Mfb=NCT"EE<P<b<bE<P<bEE<P<b<bEE<P<bbb=NC$T Mwb=NCT"EE<P<b<bE<P<bEE<P<b<bEE<P<bbb=NEbDD>pbC ES< bNCLESEE<b>,bSbbNCXESEEEb>,b<bSbbNC8ESEb>,<bbNChT+EE<P<bbEE<P<bbb=NCHUE<SIb)FUC,TTb=b=NT,EE<P<bbEE<Pb<b<PEE<< "#K4Y0n{VQ,:63WW=7E\}x8v f?Z-G=q7wO737~<'a'2r!5XB0O-]D #ZT#/JK2=M-\HeeYg mjP`k>U{ [I!`nlJn&So3\Sco9}5PAewR*:=7hT"I9al~t0QE[Y7UkVT c2Gn{P QF دM#SxwSv P/(*?n.Uc[ e0`Hj%xaeeD9f.#6/94. (ji O*Uh Osr Ksko&(fhZc,q h [vc/Ol&B&sPy8T>JgM%9r, ({WV&'_, =t7; $a0kvg;+ |,2;o:"^tc''?K=Fd^'-{kf^>N/;'B|T"$4,G7n,pcP"IX ;8yY/k; |pzbZp{.jj.}9-+Cx&"6j +#!7rvtYz"6q<:5xkgyu /KVl#"؃!Vj9l_64XrJ{-\y;!;<{g:Z{^ }HX8_?bxjMP0=jC%S"}ݷV~._ƍZW V,HS0b+q0wohR/hN\~ 3i%&o!+7f:rR=bĚ]a8#~ 7=G29?%1|GEpL+Z#\l=+C*5{&-c{=xDC=4O>lEYb$Tf4 KUT-]k@ ~\Kk+#%\z$,yI>\Sv+Bj WzoY'pU ej4e5"#'I( 3z%x)('/q-x8h6xifP<?`GU& L!!C7;u8,Y+(dxi2k'{/&Q!'A5hxY&2,k(d%T (Z[U4)?hJ2hiђ{NGx !IH36b>j-(f'{f /JAC 6X2=U:Sx(+19iqezuRHcjBJ- '*]O^_V^,!zU7v%sTNR xRE0siK]@z0 d5\vY&/("*HG@&  0{aj~)wC/^c._|p%sL*~xJkyE`|2;O{%[yybNn5&lb!.`B07g3alrOhLa$ a^BYB{6T:pZX%:ClRe?iRo%{ ^v1Ht7/0|3{/kI1 ({I+fd[z9~[4a3d(x$7*5nn/qQ$"v9/b -;`6( /g@(5bx% $'$DNjS+I|w;*EhH +iY#|-%:o)f Tp`4[BJUUyxL((uD4+Fpt[[cIMyT! F/PVc)Tf]&Wl^G"W3 XW8]d#YMri-hsw9KQK]xIH~>`CvAGY*zC)F hLMl|S3THa,`,%Y%y-~r}=9iFnx(E"+e%.dP80J#/xO5<9hl`=!/r&j 6%P1OcI ZvRqw**Nk{p&jF0<>VW49pNs?bZ/rSr!~8{]ap2B0+w$X|?yRs8YstOjp}+6R%z$Txp`su1y&22rl=VqKo03V*^- fqc8OX<>{$$=[Khl%?xj x`+hpZw(w z+zjRG::$jhkh%@ o1p3b8 {< ,v Y+ }3&FAmyhQẺ2e#uvD+`>Sjk lje`!<-kI_u !.,@T;aJxyZl 6~0,W XEEaR6]`ua6R.EIcJP;DSAOKV9GHW\WDRQwP LR]>rW)yg:O^2_aj4^Xplkf] mj9KdLhrWFl-&[ $&JF_/JFATLlwQ+lrdyL3I$3g_0b8t03S&K(; Z:-~=Z-}d}h)vc/K'7UNC\>y:Mo|cmKrF Ord~c11;t~hfZID1m>4Il'J\b,WF|ʛ T*(uo e7gyVghTNF~St7=l>j(I3kd6 5vF3xZBXd\:DF 2.X8F ?s nV}'QUA('NEk}#$Kk@"6*,: WqqN`J$v98[VyPlBEWd'1T(puB"Sq_ 1m/gAnXv af76LJ w#DG4]svL%M:$6f0@&dFOwsC04aX̪+";G~s^q UVMqA6H/7HI;:VSMMM' LeS|?S8Zu~DXUFkB(sYu+&L(d&D(Db zs}wIe|WImV93*$5q{:Q]uQkwg55yZZhzefO9+ i o:JQ&(Z)m5FE D0`| +2|.H]$q9n_. xP>XCh0DYP wpI2Bx,@]\Zhv@?GAh$hjB8(]j<Ëp>iWw),:Fj5_pic; z|9[}niSC q!@vs?nTa4%{}2>l%>ne!3P+u'bn6yM}1uG})6o(RVgN%3d!psvZ0=L|a2!p$4=X:Ae/WRFG0S_}B3Suaz ;`lKrM7'z@cT1/49P7ZE49 .v`!jh8.w.p~A\G*[~!p+ w{F" 6=4$$#-3O: TtT=?wj glqult_pr5T+.f]0{Wz sX`m ^:E 7fe"x-'$/[YyQ$J~z\zE?LDbi v 3!D N0EM?0HyZWL2G_U[DMUAw}Ji\1}j~lOcg(M?@1)5'uPZb{[<2xj%#2jysi/d@3x$`nyb*A7} <>:\L{5>PX``.7J??3^fglK 10-qch`ty.Hh~+jy! m:%qt^"i0 s\siC==7oJ!>\,~:Xf< ,Fl_{6G'GY@i8Q3=FIQ8Cf) znLi3[oNL%SP=9Dp#pZhV~a]]?nX$a#g+ dnsIR "b>r$rC*<+j B/_7SU=2VgMS@G.^IJ"DXF+RlZ#FV'7/`\YYlE#ANwP6=WPcVnT&Y6t}> *m#"c0YEMYXgvb^_&8vB#OW l( ~;=3uEz6?ep'(,iJ2]"2-ch wL` pNf$0 ao '<*0qM!d%5=%Y@bC,i8we7Ghwk4 _WxG33JO0F5!J|"D AOY 9L-.'y@lc>h,4*w32r$9M%V{Uy G!~(y;zil '<=aetuo)9V}.kjn0a`tDFm&B"fK+ PB|%47L4@:T"""TEk ?XQIbp"R7K[`nK';Rso%g=xh0I:1})&qOw^u&,hx`z}`V*VUOUBoPF#^/ Z_# K/^ B+HoIby;~X6QzZ|u_Ttq)=- Fmb%F4X'+k-=:&*CGJDNa*PH]pa5j +ATF@ m|r|(#krGAg1U6f::{7 b 7[?"Bl?,9e(]uc\!p)ufa`-a)sZHbe 0/k'u&ysJ-aHBWnk f"}nB""R!o(o)`k`2x7dbgj\o$e 2H#<1al_2?@fp0V#cbXo%%}r~M*`*'I]99O+"%D es (DDUn@gj6]<\beh*.7wD@%1|\KlX` X* N`BLKFX`'X[UCCt"_e o6s2 {-[? @~QIGm~ye/amUrAofMJDhOAa_ EbAEM!IEbAEM)kEbAEM8EbAEM/EbAEM EbAEb= bNCDC4T9QQRb=bGDNEbDlSFJPTVXZbCESTQQQQQQQQT!Qb=T;Qb=b= bNC(T4SQb=NCUEQbNC@T3QQQQQb=NT=Qb>"T6SQQQQb=NC CSbGDNEbDU FTVXZ$JPbCLUEQ<bNEQ4QbNCLUEQ<bNEQ4QbNC(ESEbAbNCCC\ESC(T<Qb=8:NNE:bNC\ESC(T<Qb=8:NNE: bNC\ESC(T<Qb=8:NNE:bNCEEESSbSbbEbNC<EQ4EQ<bbNEQ4EQ<bb:CtT=ST2QSSSQQQQb=b=NC(EQ4QbNEQ4QbN:NC CSbGDNEbD4Z bC0EEQb9QbNCPT5QEQb9EQb9 b=NEbD<Z \^bC8T!EQb9Qb=NC8T;EQb9Qb=NCT8EQb9EEQb9<bEEQb9<bEEQb9<bEEQb9<bb=NCTEQb9EEQb9EEQb9<bbEEQb9EEQb9<bbEQb9b=NEbDl] FTV%Z'$bC`ESEQEQb9 EQb9bAbNC`ESEQEQb9EQb9 bAbNC ESSbNCT5S _ VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s1YNCUEST>Qb=bNCC$EQb>?bNC$EQb>@bNUS6C-b>bNFChESC@TAQQQb=NS:SbNT5ES4SbY:C-b>#bNFC,T5ESSbYNC|UTAQQQb=NEQb9QEQb9b=NC EbGD:5N:xNCC EbGDNEbDdb F)|/l39bC`UET?Qb=M?bNEQb>>bNCpUEEQE<bb&bNCT@Qb=N:NC4EST<Qb=bNChESC(T:Sb=8: TAMFb=bNC(ET7EbAbNCDESTDQ<<b=bNCTSTQMWb=EESb9ESb9bEESb9ESb9bb=NCUEST:ETBQb=bbEb=bFUT;QSSb=N5NC TSb=NC<C,TST7b=bGDNEbDTfTFX" ^bC\UET?Qb=M?bNEQQb'NC8EEQbTCb=bNC0ESEQb9bNC@ESTDESb%b=bNCUESE<ESb%Ib)bFUEESSb&EEQESSb&b&bbN5NCTETTEQb9EESb=bNCUESE<ESb%Ib)bFUEEQESSb&b&ETSb&bN5NC ETQbNC CTbGDNEbDDjD3t\bC,ESTb=bNCC(T<Qb=8:bDb,CtEESb9 C<TETF3b=b=8:bDbNC TG<b=NCtEESb9 C<TETF3b=b=8:bDbNC TG<b=NCtEESb9 C<TETF3`b=b=8:bDbNC TG<b=NCtEESb9 C<TETF3b=b=8:bDbNC TG<b=NCtEESb9C<TETF3@b=b=8:bDbNC TG<b=NCtEESb9C<TETF3b=b=8:bDbNC TG<b=NCtEESb9C<TETF3b=b=8:bDbNC TG<b=NCtEESb9C<TETF3,b=b=8:bDbNC TG<b=NEESb9TE<b=bb7NC T<Qb=NC0EESb9QbNCDEESb9T<Qb=bNC CSbGDNEbDtq#F|/jmps$bCtUEQb9 6C -CMv8: M|bNFCLESTQEQb9b=bNTQSEQb9EQb9EQb9EQb9b=:(C-MbNFCEST%QEM EQb9 bEM EQb9 bb=bNCESTSEQb9EQb9EQb9EQb9b=bNTQSEQb9EQb9<<b=:\C0-MbNFbE:$C0-MbNFbE:C0-MbNFC|ESTQEQb9EQb9 EQb9b=bNTQSEQb9EQb9EQb9EQb9b=:C-MbNFCESUEQb9 6C0-MbNFT:C0-M bNFT:\C0-MbNFT:$C0-MbNFT:C0-MbNFT:C0-MbNFT:|C0-MbNFT:DC0-MbNFT: FTbNCEEQb9 Mb NC8T=T7EQb9 b=NCESTQEQb9EQb9EQb9 SEQb9EQb9b=bNTQSEQb9EQb9b=:CESTQEQb9TTSEQb9EQb9b=bNTQSEQb9EQb9b=: CH-MbNFCESTQEQb9EQb9EQb9 Tb=bNC8T=T7EQb9 b=NTQSEQb9EQb9b=:C-CM8: M bNFCEQ p VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sWA@b9b,C\ESTHTETF3b=b=b=bNC TG<b=NC\ESTHTETF3\b=b=b=bNC TG<b=NESTHTE<b=b=bb7NChUEEQb9 MWb NEEQb9 bEbNCESUEEQb9 EQb9 b6C-MbNFTaQEQb9EQb9 EQb9EQb9SSSEQb9 b= :C-MbNFT`QEQb9EQb9 EQb9EQb9SSSEQb9 b= :C-M bNFTQEQb9EQb9 EQb9EQb9SSEEEQb9 b= :C-M bNFTQEQb9EQb9 EQb9EQb9SSEEEQb9 b= :5bNC8T=T7EQb9 b=NTQSEQb9EQb9b=:CX-M bNFCESTQEQb9EQb9EQb9 EQb9 b=bNC8T=T7EQb9 b=NTQSEQb9EQb9b=:C0-M "bNFbE:PFC<TAM 'EQb9 b=NbDNC CSbGDNEbD|8FPTVXZ E%bC8EET<bTCb=bNCLEEET<Qb&bTDb=bNC4ESET<Qb&bNC,EEQb<bNC,EEQb<bNC`EEQbET QM Lb=QbbNC`EEQbET QM Rb=QbbNC0CET?Qb=CMa8: Mb NEQTKQb=b:EQC<TKT>Qb=b=8:<TAM YTJQb=b=bNCTLSESTQQQQQQQb=bb=NC CSbGDNEbD,?bCCtUQ6C4-b>"bNFM w: C4-b>'bNFM y:C4-b>4bNFM {:C4-b>#bNFM }:lC4-b>(bNFM :0C4-b>5bNFM :C4-b>bNFM :C4-b>%bNFM :|C4-b>0bNFM :@C4-b>2bNFM :5bGDNC bDNEbD,FFbC4CT@Qb=N:NEbD\LFTV% bCtESC4EET<bQb&8: TAM b=bNC4EST>Qb=bNC$ESb>?bNC$ESb>@bNCCET?Sb=MOb NESC(T>Sb=8: MWb:ESSbNCUESESbbFUUTOESb9Sb=FTASSSb=NCdESb9QESb9SSSb=bGDN5NC bDNEbD<UTVbC CEEQ4EQb9b<bFEQEQb9bFEEQ4EQb9b<bFEQEQb9bbGDNEbD4` ^F bC8T=Q3TCT#b=NC<UEQbNT?Qb=NCC EbGDNEbD4LiFbC,CQb=bGDNEbD<q   b;CCERTTTTLTTTNTTHTTTb= bNUETbNTb=NCdESTEQ<C<8:<b$YbNC<TESb9M b=NCUJEESb9bC4THESb9b=N5Eb=NTM$ b=NCUJEESb9bC4THESb9b=N5Eb=NTM$ b=NC<EESb9Tb=bNC0EESb9"RbNC\EESb9 TTETITMTJb=bNC<EESb9!Tb=bNC@EESb9"b9aSb=NC CSbGDNEbD y TV!!"!*!,%!.!7!;!>!B!F!L!PbCtEEEQb9 b9rTBEEQb9 b9rb=bNCUESE<EEEQb9 b9rb%Ib)bFUEEEEQb9 b9sEEEQb9 b9rSb&b&SbN5NClEEEQb9bTQM!TMM !\b= K VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sMObNCT EQb9EM>EEQb9< bbEMEEQb9< bbb=NCPEST EQb9M Lb=bNCPEST EQb9M Rb=bNCUEEEQEQb9b<bSbNEQEESEQb9b<bbNCUEEEQEQb9b<bSbNEQEESEQb9b<bbNCEEQb9"b9_QQQEQb9EQb9b=NCTREQb9EQb9EEQb9<bEEQb9<bEEQb9<bEEQb9<b<<b=NC\ES TBEEQb9 b9p<b=bNCPUESE<ES b%Ib)bFUCHES EES Sb&<b&bNCPESC(EQSb&8:bEbNEEES bb9"b9fS Sb=N5NC@EEEQb9 b9qbEbNC@EEQb9"b9Qb=NCUEQbNUESEEQb9bbFUUEQEESMb&bb NC ES SbNCT3ES b9EES b9<bEES b9<bEES b9<bEES b9<bb=NNNE:N5NCEEEQb9 b9qEEEQb9 b9pEEEQb9 b9r<b&b&bNCESC@EEEQb9 b9qb8:XCHEEES <b&<b&b8:bEbNCEEEEEQb9 b9qbb9Eb95EEQb9 b9qb=NC $CCDEST>EQb9b=bNCUESM!jbNCES bNC$ESb>"bNCHEb>?EES b9<bbNCHEb>@EES b9<bbNT=TPES b9b=b>#EES b9<bEES b9<bb=: N:NCUET$Sb=<bNCESC`EEQb9"b9Qb>?b>@b=8:(EEQb9 b9qbNUEEESbb9EEEEQb9 b9qbb9bNTGQSb=NCES CtEEESbb9"b9]SSb>?b>@b=8:bEbNClUS 6C-TbNFCESEEEQb9 b9sEEEQb9 b9qb9b&bNCESChEEEEQb9 b9rb%ES<bb8:<bNTGQEEEQb9 b9pEEEQb9 b9rSb&b&b=:|C-T bNFCESEEEQb9 b9sEEEQb9 b9qb9b&bNCESC<E<ES<bb8:4EEEQb9 b9rb%bNTGQEEEQb9 b9pEEEQb9 b9rSb&b&b=:C(-TbNFC(ESEbAbNCUESES bbFUT=SEES<b&b9$b=N5NC TFQb=NCSbGD:pCd-TbNFC TFQb=NC EbGD:5NESEEQb9 b9qbN:NEbD4 !7bCUESEEEQb9 b9rbbFUEEEEEEEQb9 b9pSb&b9Eb9<bbEbN5NCTREQb9EQb9<<EEQb9<bEEQb9<bEEQb9<bEEQb9<bb=NEbD4@ !.bCpUEEQb9EEEQb9 b9rbbNCEEEEQb9 b9qb9Eb94EEQb9 b9qb=NC@EEQb9Eb95Qb=NEEEQb9 b9qQbNEbDD  !lTVbCUC EQb8:dC EQb8:<C EQb8:EQbNTM8!sb=NC8TKQQQQb=NEbDD` !lTVbCUC EQb8:dC EQb8:<C EQb8:EQbNTM.!b=NCdEEEEQb9 b9pEQb9b&QbNCUT?Qb=b,TSMb=b7NT=EEQb9 b9rEQb9b=NC8TKQQQQb=NEbDD !!bCUEEQb9EEEQb9 b9rbbNC(ESEbAbNCUESEEEQb9 b9rbbFUUEEQ 4 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s^b9SbNT=SSb=N5NEEEQb9 b9rSbNCXTMEEQb9 b9pEQb9b=NCUESE<EEEQb9 b9rb%Ib)bFUEEEEQb9 b9sEEEQb9 b9rSb&b&SbN5NCPEEQb9"b9dQQ<b=NEbDD| !lTVbCCCDECQ8:Q<b8:PET?CQ8:Qb=Mb NTMM!b=:UJEEQMb&bCET?EQb9b=CM8:,CMO8: Mb N5Eb=NTMA"1b=NCTQQEQEQb9bEQEQb9bb=NEbD, bCT3EQb9EQb9EQb9EQb9EQb9b=NCT3EQb9EEQb9<bEEQb9<bEEQb9<bEEQb9<bb=NCxT-EQb9EEQb9<bEEQb9EQb9bEEQb9<bEEEQb9EQb9b<bEEEQb9EQb9b<bEEEQb9EQb9b<bEEEQb9EQb9b<bEEQb9<bEEQb9EQb9bEEQb9<bEEQb9EQb9bEEQb9EQb9bEEQb9<bEEQb9EQb9bb=NEbD,T bCEEQb9"b9_Q<<ETQb=EQb9bETQb=EQb9bb=NEbD,h  bC TQb=NC<EEEQb9b<bNC<EEEQb9b<bNCLEEEQb9 b9pTCb=bNCHEEEQb9 b9rEbAbNCLEEEQb9 b9sTCb=bNEbD<\+   b;C|ERTTRTQTPTTTVTUEEEETTb= bNCdESTEQ<C<8:<b$YbNC<TESb9M"sb=NCUJEESb9bC4THESb9b=N5Eb=NTM*"b=NCUJEESb9bC4THESb9b=N5Eb=NTM+"b=NC<EESb9Tb=bNC0EESb9"RbNC<EESb9!Tb=bNC<EESb9&Tb=bNC@EEESb9&b9<bNC@EESb9"b9aSb=NC CSbGDNEbD<4""bCTESEEEQb9&b9|<bbNClESEEEQb9E<Sbb<bbNCT+EQb9EEQb9SbEQb9SEEQb9%<bb=NCT+EQb9EEQb9SbEEEQb9EQb9bEQb9%bSEEQb9%<bb=NEbD4ͬ E!BbC@EEEQb9&b9)<bNC@EEQb9"b9^Qb=NCTTEQb9EEQb9EEQb9&b9|bEEQb9EQb9%bEEQb9EEQb9&b9|bEEEQb9EQb9bEQb9%bEEEQb9EEQb9&b9|bEEQb9&b9}bEEQb9EQb9%bEEEQb9EEQb9&b9|bEEQb9&b9}bEEEQb9EQb9bEQb9%bb= NCESEEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNESEEEEEQb9&b9Sb<bEQb9%bb:HES4E<EQb9%bbNC@EEEQb9&b9SbNCT+EQb9EEQb9<bEEQb9SbEEEQb9&b9~<bEEQb9&b9b=NEbD<S%bCHUEEEQb9b9XbNbDNCCEQC E<b8:<C E<b8:E<bbNCEQC E<b8:<C E<b8:E<bbN5CpCESEEEEEb>@EQb9bEQb9%b<bEEQb  VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s>m9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNEEEQb9b9"b9gEQb9QEEEQb9b9ZSbEQb9#b=:EEEQb9b9"b9gEQb9QEEEQb9b9YSbEQb9#b=NCPEEQb9$EEQb9b9RbNC TSQb=NEQT>EQb9b=bN::bDNCUEEQb9#bNEEEQb9b9"b9gEQb9QEEQb9b9Rb=NC@C0EEQb9b9RbGDNEbD4$b!BbCESEEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNESEEEEEQb9&b9Sb<bEQb9%bb:HES4E<EQb9%bbNCUEEEQb9&b9SbNC T8EQb9EEQb9<bEEQb9EEQb9&b9bEEEQb9&b9~<bEEQb9&b9b=NC`TTEQb9EEQb9EEQb9&b9|bEEQb9EEQb9&b9bEEQb9EEQb9&b9|bEEEQb9EEQb9&b9bEEQb9&b9bEEEQb9EEQb9&b9|bEEQb9&b9}bEEQb9EEQb9&b9bEEEQb9EEQb9&b9|bEEQb9&b9}bEEEQb9EEQb9&b9bEEQb9&b9bb= NCT+EQb9EEQb9<bEEQb9SbEEEQb9&b9~<bEEQb9&b9b=NEEEQb9&b9SbNC@C0EEQb9b9RbGDNEbD4rbC,TUQEQb=NCC EbGDNEbD<X"bCpEQC(THQb=8:(EEQb9b9YbNCPUEEEQb9b9RQbNbDNCpEEEQb9b9"b9gEQb9QQb=NCPEEQb9$EEQb9b9RbNC\UEEEQb9&b9)bNTSQb=NEbD, bC<EEEQb9b<bNC<EEEQb9b<dbNCUC0EEQb9b8:DET?EQb9b=M "b NTM."b=NC0EEQb9%<bNC@EEEQb9&b9}<bNCEEEQb9&b9|EEEQb9EEQb9&b9}b<bbNCPEEEQb9&b9~EQb9bNC@EEEQb9&b9<bNCEEEQb9&b9TUEEEQb9EEQb9&b9bE<E<EQb9%bbbb=bNCEEEQb9&b9EEEQb9b9ZEEQb9b9YbbNC TQb=NEbD<   b;C|ERTTZTYTXTTT^T]EEEET\b= bNCdESTEQ<C<8:<b$YbNC@EESb9ESb9b'NC<TESb9M#b=NCUJEESb9bC4THESb9b=N5Eb=NTM+#/b=NCUJEESb9bC4THESb9b=N5Eb=NTM,#[b=NC<EESb9Tb=bNC0EESb9"RbNC<EESb9!Tb=bNC<EESb9&Tb=bNC@EESb9"b9aSb=NC CSbGDNEbD< ##bCTESEEEQb9&b9|<bbNClESEEEQb9E<Sbb<bbNCT+EQb9EEQb9<bEEQb9SbEEQb9%<bSb=NCT+EQb9EEEQb9EQb9bEQb9%bEEQb9SbEEQb9%<bSb=NEbD4 !BbC@EEEQb9&b9)<bNC@EEQb9"b9^Qb=NCTTEQb9EEQb9EQb9%bEEQb9EEQb9&b9|bEEEQb9EQb9bEQb9%bEEQb9EEQb9&b9|b  VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s%|EEQb9EQb9%bEEEQb9EEQb9&b9|bEEQb9&b9}bEEEQb9EQb9bEQb9%bEEEQb9EEQb9&b9|bEEQb9&b9}bb= NCESEEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNESEEEEEQb9&b9Sb<bEQb9%bb:HES4E<EQb9%bbNC@EEEQb9&b9SbNCT+EQb9EEQb9SbEEQb9<bEEQb9&b9~EEEQb9&b9<bb=NEbD<%bCHUEEEQb9b9XbNbDNCCEQC E<b8:<C E<b8:E<bbNCEQC E<b8:<C E<b8:E<bbN5CpCESEEEEEb>?EQb9bEQb9%b<bEEQb9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNEEEQb9b9"b9gEQb9QEEEQb9b9ZSbEQb9#b=:EEEQb9b9"b9gEQb9QEEEQb9b9YSbEQb9#b=NCPEEQb9$EEQb9b9RbNC T[Qb=NEQT>EQb9b=bN::bDNCUEEQb9#bNEEEQb9b9"b9gEQb9QEEQb9b9Rb=NC@C0EEQb9b9RbGDNEbD4h!BbCESEEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNESEEEEEQb9&b9Sb<bEQb9%bb:HES4E<EQb9%bbNCUEEEQb9&b9SbNC T8EQb9EEQb9EEQb9&b9bEEQb9<bEEQb9&b9~EEEQb9&b9<bb=NC`TTEQb9EEQb9EEQb9&b9bEEQb9EEQb9&b9|bEEEQb9EEQb9&b9bEEQb9&b9~bEEQb9EEQb9&b9|bEEQb9EEQb9&b9bEEEQb9EEQb9&b9|bEEQb9&b9}bEEEQb9EEQb9&b9bEEQb9&b9~bEEEQb9EEQb9&b9|bEEQb9&b9}bb= NCT+EQb9EEQb9SbEEQb9<bEEQb9&b9~EEEQb9&b9<bb=NEEEQb9&b9SbNEbD4bC,T]QEQb=NCC EbGDNEbD< T"bCpEQC(THQb=8:(EEQb9b9YbNCPUEEEQb9b9RQbNbDNCpEEEQb9b9"b9gEQb9QQb=NCPEEQb9$EEQb9b9RbNC\UEEEQb9&b9)bNT[Qb=NEbD,  bC<EEEQb9b<bNC<EEEQb9b<dbNCUC0EEQb9b8:DET?EQb9b=M "b NTM-#b=NC0EEQb9%<bNC@EEEQb9&b9}<bNCEEEQb9&b9|EEEQb9EEQb9&b9}b<bbNC@EEEQb9&b9~<bNCPEEEQb9&b9EQb9bNCEEEQb9&b9TUEEEQb9EEQb9&b9~bE<E<EQb9%bbbb=bNCEEEQb9&b9EEEQb9b9ZEEQb9b9YbbNC TQb=NEbD?  # #X# L: ### bC,EEQb<bNC,EEQbKbNCUC<C$THQb=N5E8:C<C$THQb=N5E8:TJEQbC$THQb=N5Eb=NTMB#b=NClUEQQbNC EQQb'NES<b { VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s}ANCDESTQQQb=bNC\ESQQSQQQQ b=bNC@EEESb9&b9+SbNC0TSQSb=NC CSbGDNEbD\ 0 TV$&  bCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCHEEQ<b&EQ<b&b'NC(TLQTOb=NC,EST_QYbNCTUESbNTSSSSb=NC CSbGDNEbDT( = TV$& bCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNC(TLQTWb=NC,EST_QYbNCTUESbNTSSSSb=NC CSbGDNEbDLX K%$*!bCHUEEEQb9b9XbNbDNCUEQC E<b8:<C E<b8:E<bbNC<T EQb9M $/b=NC@EEQb9"b9Qb=NC<T EQb9M $:b=NCEEEQb9b9"b9gEQb9QESTdQb=bb=NC TX<b=NC UCXEETPEQb9b=b%<b8:ET>b=C E<b8:<C E<b8:E< bb NC C4ESTdQb=bNCUESSbNEEEQb9b9"b9gEQb9QESSbb=NTX<(b=N:NC@EEQb9"b9Qb=NC<EEEQb9b9RbbGDNEbD, XbCT8EQb9EQb9EQb9EQb9EQb9b=NCTTEEQT-bAEQb9-b YNC@EEQb9"b9^Qb=NEbD, $ dbCC|EQb9,EEQb9b9REEQb9b9[b=bGDNEbD,  qbCPUEEQb9bNTM $Fb=NCLEEEQb9bEQb9bNC0EEQb9T bNEbD\"D } TV$& $gbC4ESTNQb=bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCdESTEQ<C<8:<b$YbNC<EESb9Tb=bNCtEESb9"TTbTcTTTSTb=bNC<EESb9!Tb=bNC@EESb9"b9aSb=NCTUESbNTSSSSb=NC CSbGDNEbD,%  bC(TLQTlb=NC,CTfQYbGDNEbD,&  bC(TLQTkb=NC,CTfQYbGDNEbD,'$  bC(TLQTnb=NC,CTfQYbGDNEbD,'  bC(TLQTmb=NC,CTfQYbGDNEbD??陙?ə,(bCEEQb9,ChJEEQb9+bTYM$q<b=b=8:(TYM$s<b=bNCxEEQb9-EKKKKKKKxKbAbNC TeQb=NEbD??ə?陙,*pbCEEQb9,ChJEEQb9+bTYM$s<b=b=8:(TYM$q<b=bNCxEEQb9-EKKKKKKKxKbAbNC TeQb=NEbD?ə?陙?,,LbCEEQb9,ChJEEQb9+bTYM$q<b=b=8:(TYM$s<b=bNCxEEQb9-EKKKKKKKxKpbAbNC TeQb=NEbD?陙?ə?,.(bCEEQb9,ChJEEQb9+bTYM$s<b=b=8:(TYM$q<b=bNCxEEQb9-EKKKKKKKxKbAbNC TeQb=NEbD\0 TV$&  b;C|ERTTqTpTTTTuTtEEEETsb= bNCUESTQb=bNC4 M VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sESTNQb=bNC4ESTNQb=bNESTNQb=bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC<EESb9!Tb=bNC<EESb9&Tb=bNC@EEESb9&b9<bNC@EESb9"b9aSb=NCTUESbNTSSSSb=NC CSbGDNEbD44  !BbC@EEEQb9&b9)<bNC@EEQb9"b9^Qb=NCT3EQb9EEQb9EEQb9&b9|bEQb9EEQb9&b9}EQb9b=NCEST$EEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bb=bNCCEEEQb9&b9+bNESEEEEQb9&b9Sb<bb:$ES4<bNC@EEEQb9&b9SbNCT+EQb9EEQb9<bEEQb9SbEEEQb9&b9~<bEEEQb9&b9<bb=NEbDD8 %$ubCHUEEEQb9b9XbNbDNC`UEQC E<b8:<C E<b8:E<bbNClESCLJEEEEQb9&b9Eb>@EQb9bbEEEQb9&b9EEQb9&b9bbEb>@EEEQb9&b9EQb9bbb=8:CJEEEEQb9&b9EEQb9&b9bEb>@EQb9bbEEEQb9&b9<bb=8:<bNCTCEQC E<b8:<C E<b8:E<bbN5CpCESCEEEEEb>@SbEQb9b<bE<EEQb9&b9bbEEQb9&b9b8:<bNCCEEEQb9&b9+bNEEEQb9b9"b9gEQb9QEEEQb9b9ZSbEQb9#b=:EEEQb9b9"b9gEQb9QEEEQb9b9YSbEQb9#b=NCpEEEEQb9&b9b9$EEQb9b9RbNC TrQb=NEQT>EQb9b=bN:NCUEEQb9#bNEEEQb9b9"b9gEQb9QEEQb9b9Rb=NC<EEEQb9b9RbbGDNEbD\B!B$|bCEST$EEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bb=bNCCEEEQb9&b9+bNESEEEEQb9&b9Sb<bb:$ES4<bNC@ESEEQb9&b9bNC@ESEEQb9&b9~bNC@ESEEQb9&b9bNC@ESEEQb9&b9|bNC@ESEEQb9&b9}bNC CEESSbESSbbNCT8EQb9EEQb9<bEEQb9SbES<bEESSb<bb=NCTTEQb9EEQb9SbEEQb9SbEEQb9SbEEQb9SbEEEQb9SbSbEEQb9SbEEEQb9SbSbEEQb9Sbb= NT+EQb9EEQb9<bEEEQb9SbSbES<bEESSb<bb=:CHEEESSbSbSbNCT8EQb9EEQb9<bEEEQb9SbSbES<bEESSb<bb=NC0TTEQb9EEQb9SbEEEQb9SbSbEEQb9SbEEEEQb9SbSb<bEEEQb9SbSbEEEQb9SbSbEEEQb9SbSbEEEEQb9SbSb<bb= NT+EQb9EEQb9<bEEQb9SbES<bEESSb<bb=:UESSbNCT8EQb9EEQb9<bEEQb9SbES<bES<bb=NCTTEQb9EEQb9SbEEQb9 n6 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sD2SbEEQb9SbEEEEQb9SbSb<bEEEQb9SbSbEEQb9SbEEEQb9SbSbEEEEQb9SbSb<bb= NT+EQb9EEQb9<bEEQb9SbES<bES<bb=NC@EEEQb9&b9SbNEbD4Q-bC,TtQEQb=NEbD<RH?"bCpEQC(THQb=8:(EEQb9b9YbNCC`EEEQbb9T bNEQQb:LUEQEEQb9b9RbNbDNCpEEEEQb9&b9b9$EEQb9b9RbNC\UEEEQb9&b9)bNTrQb=NEbD?,T RbCUC0EEQb9b8:$EEQb9bNTM)$b=NCUC0EEQb9b8:DET?EQb9b=M "b NTM,$b=NC@EEEQb9&b9}<bNCEEEQb9&b9|EEEQb9EEQb9&b9}b<bbNCdEEEQb9&b9~EEQb9<bbNCDEEEQb9.b4<bNC0CEEQb9.bNEEEQb9&b9EEEQb9&b9~<bb:EEEQb9&b9C EEEQb9&b9~T$E<b?CpEKETUEQb9.b=EQb9/bb8:K4BEQb9bb=b8:<EEEQb9&b9~<bbNCEEEQb9&b9CE<TUEEEQb9EEQb9&b9b<bb=b8:<bNCEEEQb9&b9C|E<EEEQb9b9ZEEQb9b9Ybb8:KbNEbD\[_ TV$&  b;C|ERTTxTwTTTT|T{EEEETzb= bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC<EESb9!Tb=bNC<EESb9&Tb=bNC@EESb9"b9aSb=NCTUESbNTSSSSb=NC CSbGDNEbD4_ g!BbC@EEEQb9&b9)<bNC@EEQb9"b9^Qb=NCT3EQb9EEQb9<bEEQb9EEQb9&b9|bEQb9EEQb9&b9}b=NCESEEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bbNCCEEEQb9&b9+bNESEEEEQb9&b9Sb<bb:$ES4<bNC@EEEQb9&b9SbNCT+EQb9EEQb9SbEEQb9<bEEEQb9&b9~<bEEEQb9&b9<bb=NEbDDd t%$ubCHUEEEQb9b9XbNbDNC`UEQC E<b8:<C E<b8:E<bbNClESCLJEEEEQb9&b9Eb>?EQb9bbEEEQb9&b9EEQb9&b9~bbEb>?EEEQb9&b9EQb9bbb=8:CJEEEEQb9&b9EEQb9&b9~bEb>?EQb9bbEEEQb9&b9~<bb=8:<bNCTCEQC E<b8:<C E<b8:E<bbN5CpCESCEEEEEb>?SbEQb9b<bE<EEQb9&b9bbEEQb9&b9b8:<bNCCEEEQb9&b9+bNEEEQb9b9"b9gEQb9QEEEQb9b9ZSbEQb9#b=:EEEQb9b9"b9gEQb9QEEEQb9b9YSbEQb9#b=NCpEEEEQb9&b9b9$EEQb9b9RbNC TyQb=NEQT>EQb9b=bN:NCUEEQb9#bNEEEQb9b9"b9gEQb9QEEQb9b9 aZ@ay?8~qf>|?R:\t@2miP0-?_FA^)$r6#8x[ bK</1 9^Oz_K 0# l9#RO~zw߄u"3C$t jbE2 ;! f"m3^fBy<p0 V@aE~4}&O<um|$-7P$$T^X:QCGI1>"'(Kg"s R~$B,#&r0tH!{fkoMfYY3<Cb}E$TA,8@Q2^H VK/"#|f I$)! 3]o:]EsPY"P5;V=T[Nb<(S 6bIP"]6 R[k`&[]&;1HgYwhtA%i*-D!H7Z[T !gd^aj#J J e5/?ՙ}Ln WƇu*{!  }j{2Ttt YGas:d6)q 2 IaAQ ^Q8YVu[.7$rZF  ."F^G3qx%=^(! wh<5$" t<F#D68c(+ C$BJc),4c  m)KUpGr1yd yQ[naB< <^PZG@B2gVNgv&y#9JM[n O>8a"%e=!"O;G`acN#_=!876\o-_Y ysh u9 < 0g5QKB2 EPc"9Q5" "'Q8QpbtXA~:SJKxqi6X8 )Uo>LbueRgAIt%Z$Tz P'"-">,Sqv99{Id%qGh#&F#!+cKXMiS9E&hdJ$73'J_?\) /B`i"sU 1!'/?~kr<7/!Mc99K+VWc !cTB?>]9xE{\??g,?̙#%?əҙeI(R$~9_R;-G2Xkv"G\N_/G4%/3Pzr$9B~fT $} ]B6VN3+ y 3ZXh# t c (t a`B?q?ɛ? G?鸎]7+5#}^=i-?^"v?mo#N $cKIPt >" %/UVtOt4i!M:,2ljJlzl*,k*}f7SE\O\1PK $z[?ɸřV?W"?#sL,_kQ?($K-e9XX' r]x$s/!Zl.Z3?'4j uO=:#P&oAc6s_?.&Rg4#{Plj@?ޙn?ə)B?*E/[U!e"<[d]Dd-A? $: @4!1#!xl! @#+ w "4{1>+##!: 3Y!H U5{WWH. IyD{PV]\[\Sjqmz"??+36]4[@<H$l f %nG_S~S_eZ#1H@\\`g%vSN+ >%18q [ X VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sRb=NC<EEEQb9b9RbbGDNEbD\m!B$|bCEST$EEEEEQb9b9REEQb9b9YbEEQb9&b9bEEQb9&b9bb=bNCCEEEQb9&b9+bNESEEEEQb9&b9Sb<bb:$ES4<bNC@ESEEQb9&b9bNC@ESEEQb9&b9~bNC@ESEEQb9&b9bNC@ESEEQb9&b9|bNC@ESEEQb9&b9}bNC CEESSbESSbbNCT8EQb9EEQb9SbEEQb9<bEESSb<bES<bb=NCTTEQb9EEQb9SbEEQb9SbEEQb9SbEEQb9SbEEQb9SbEEEQb9SbSbEEQb9SbEEEQb9SbSbb= NT+EQb9EEEQb9SbSbEEQb9<bEESSb<bES<bb=:CHEEESSbSbSbNCT8EQb9EEEQb9SbSbEEQb9<bEESSb<bES<bb=NC0TTEQb9EEEQb9SbSbEEQb9SbEEEEQb9SbSb<bEEQb9SbEEEQb9SbSbEEEQb9SbSbEEEEQb9SbSb<bEEEQb9SbSbb= NT+EQb9EEQb9SbEEQb9<bEESSb<bES<bb=:UESSbNCT8EQb9EEQb9SbEEQb9<bES<bES<bb=NCTTEQb9EEQb9SbEEQb9SbEEEEQb9SbSb<bEEQb9SbEEQb9SbEEEQb9SbSbEEEEQb9SbSb<bEEEQb9SbSbb= NT+EQb9EEQb9SbEEQb9<bES<bES<bb=NC@EEEQb9&b9SbNEbD4}XbC0T{QQQb=NEbD<}"bCpEQC(THQb=8:(EEQb9b9YbNCC`EEEQbb9T bNEQQb:LUEQEEQb9b9RbNbDNCpEEEEQb9&b9b9$EEQb9b9RbNC\UEEEQb9&b9)bNTyQb=NEbD?,< bCUC0EEQb9b8:$EEQb9bNTM)$b=NCUC0EEQb9b8:DET?EQb9b=M "b NTM,%b=NC@EEEQb9&b9}<bNCEEEQb9&b9|EEEQb9EEQb9&b9}b<bbNCdEEEQb9&b9EEQb9<bbNCDEEEQb9.b4<bNC0CEEQb9.bNEEEQb9&b9~EEEQb9&b9<bb:EEEQb9&b9~C EEEQb9&b9T$E<b?CpEKETUEQb9.b=EQb9/bb8:K4BEQb9bb=b8:<EEEQb9&b9<bbNCEEEQb9&b9CE<TUEEEQb9EEQb9&b9~b<bb=b8:<bNCEEEQb9&b9C|E<EEEQb9b9ZEEQb9b9Ybb8:KbNEbD<P   bCESTTTTTTTTTTTTb= bNC,EST QYbNC<EESb9Tb=bNC0EESb9"SbNC<EESb9!Tb=bNC@EESb9"b9aSb=NC CSbGDNEbD<"bC@T{EQb90QQb=NEbD4bC8TzEQb90Qb=NEbD<"bC@TtEQb90QQ ov{ VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s>b=NEbD40bC8TsEQb90Qb=NEbD\. TV$&  bCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNC,ESTQYbNC<EESb9Tb=bNCTUESbNTSSSSb=NC CSbGDNEbD?? >F# L#%-%0%5bC,TQM%<b=NCUJEQbC<C$THQb=N5E8:EQ<bb=NTMC%Nb=NCUJEQbC<C$THQb=N5E8:EQ<bb=NTMA%b=NCUJEQbC$THQb=N5Eb=NTM.%b=NCUJEQbC$THQb=N5Eb=NTM-&b=NC,EEQb<bNC,EEQb<bNC,EEQbKbNC ES<bNClUEQQbNC EQQb'NESbEbNC ES QbNCPEQ4C EQb8:<bNC(EQ4QbNCxESCPE<TZES Qbb=b8:<bNCESJET?CQ8:Qb=Mb <b=bNCUCHC0THEQbb=N5E8:EQbNEQEKTZEQQbb=bbNC|JESbEQT$Qb=bEQ4<bb=NCHESTQQEQb=bNCTEST}QSQQQb=bNCXTgS<<QSQQSb=NCESToS<QQSQQEQE<QbbQSQ b= bNC|ThS<EQESb9bQSQQSb=NC@EEESb9&b9+SbNCHEESb9"b9hSSb=NC0TSQSb=NC@EEESb9&b9SbNC0EESb90SbNC@EEESb9"b9bTbNC@EEESb9"b9fTbNC CSbGDNEbD\hO TV$&  bCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNC,ESTQYbNC<EESb9Tb=bNCTUESbNTSSSSb=NC CSbGDNEbD??D `F# L#%-%0%5bC,TQM&1b=NCUJEQbC<C$THQb=N5E8:EQ<bb=NTMD&Eb=NCUJEQbC<C$THQb=N5E8:EQ<bb=NTMB&b=NCUJEQbC$THQb=N5Eb=NTM/&b=NCUJEQbC$THQb=N5Eb=NTM.&b=NC,EEQb<bNC,EEQb<bNC,EEQbKbNClUEQQbNC EQQb'NES<bNC ES QbNCPEQ4C EQb8:<bNC(EQ4QbNCxESCPE<TZES Qbb=b8:<bNCESJET?CQ8:Qb=Mb <b=bNCUCHC0THEQbb=N5E8:EQbNEQEK TZEQQbb=bbNC|JESbEQT$Qb=bEQ4<bb=NCHESTQQEQb=bNCTEST}QSQQQb=bNCXTiS<<QSQQSb=NCESTvSQ<QSQEQE<QbbQQSQ b= bNC|TjSEQESb9b<QSQQSb=NC@EEESb9&b9+SbNCHEESb9"b9hSSb=NC0TSQSb=NC@EEESb9&b9SbNC0EESb90SbNC@EEESb9"b9bT~bNC@EEESb9"b9fTbNC CSbGDNEbD\q TV$&  b;C ̞ VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s6|ERTTTTTTTTEEEETb= bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCdEST EQ<C<8:<b$YbNC<TESb9M',b=NCUJEESb9CbC4THESb9Cb=N5Eb=NTM"'4b=NC|UET?EESb9Dbb=MabNTM"'Wb=NCUET?EESb9'bb=MbFC4THESb9'b=N5ENTM!'zb=NC<EESb9Tb=bNC0EESb9"RbNC<EESb9!Tb=bNCdEESb9ET TTTTTb=bNC TSb=NCTUESbNTSSSSb=NC CSbGDNEbD4 w 'bC|EEEQb9Eb9?T%EQb9MM b=bNCpEEEQb9Eb9@T%EQb9M $/b=bNC@EEEQb9'bMWbNC<EEEQb9Cb<bNCEQb9'b,UEEQb9'TETSM'b=b=bNEM'b(FEEQb9$TE<b=bb7NC@EEEQb9$bMWbNCUEEEQb9$b%EQb9CbNEEQb9$EEQb9$<EQb9Cb$bNC\EEEQb9Eb9:EEQb9$b%bNCEEEQb9Eb97ET EQb9M'b=EQb9CbbNC|EEEQb9Eb96TVEQb9EQb9$b=bNC@EEEQb9Dbb>bNCEEEQb9Eb9=EEEQb9Eb9>EEEQb9Eb99EEEQb9Eb9:<bbbbNCEEEQb9Eb9AETVEQb9EQb9'b=<bbNCEEQb9EEEEQb9Eb9AEEQb9Eb97b<bbNCtEEQb9ET EQb9Mb=<bbNCEEEQb9Eb9BEEEQb9<bT EQb9M'b=bbNC<ESEEQb9bbNC<EEQb9Tb=bNC@TEQb9SQb=NEbD4   bC@ESEEQb9Eb9<bNC@EEEQb9Eb9<bEbNC TQb=NC TQb=NC TQb=NC<UESbNTQb=NEbD,8  bC T3EQb9EEEQb9EEQb9Eb9Ab<bEQb9EEQb9EEEQb9Eb9A<bbEQb9b=NEbD, bCT1EQb9EQb9EEQb9EEQb9Eb9Bbb=NCHT[EQb9EQb9'b=NCC EbGDNEbD< '0bCHUEEEQb9Eb9<bNbDNC@ESEEQb9Eb9;bNC@TTEEQb9Eb9?EESb<bEEQb9<bES<bEEQb9<bSEEQb9<bSEEEQb9EQb9b<bES<bEEEQb9EQb9b<bES<bEEEQb9EQb9b<bb= NC@EEEQb9Eb9<bEbNEbDDt '-0bCHUEEEQb9Eb9<bNbDNCESEEEEQb9EEQb9Eb9AbTQEEQb9Eb99b=b<bbNC@TTEEQb9Eb9?EESb<bEEQb9<bES<bEEQb9<bSEEQb9<bSEEEQb9EQb9b<bES<bEEEQb9EQb9b<bES<bEEEQb9EQb9b<bb= NC@EEEQb9Eb9;SbNC@EEEQb9Eb9<<bNEbD,Ĩ  bCEEEQb9Eb9=EEEQb9Eb99EEQb9Eb9>bbNC TQb=NEbD,Ũ  bC@EEEQb9Eb9=<bNCEEEQb9Eb9>EEEQb9Eb99EEEQb9Eb9:<bbbNC TQb=NCdUE =\j VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sMEEQb9Eb9:<bNTQb=NEbD,p bC TQb=NCT1EQb9EEQb9EEQb9Eb9AbEEQb9EEQb9Eb9Bbb=NCC0EEEQb9Eb9=EEQb9Eb9>bNCT[EQb9EEQb9$<EEQb9Eb9=b$b=NCT[EEQb9Eb9@EEQb9$EEQb9Eb9=EEQb9Eb9>b$b=NT[EQb9EEQb9$EEQb9Eb9><b$b=:CT[EQb9EEQb9$<EEQb9Eb9>b$b=NCT[EEQb9Eb9@EEQb9$EEQb9Eb9>EEQb9Eb9=b$b=NT[EQb9EEQb9$EEQb9Eb9=<b$b=NCT8EQb9EEEQb9EEQb9Eb9AbEEQb9Eb96bEEQb9<bEEQb9EEEEQb9Eb9AEEQb9Eb96b<bbEEQb9<bb=NCC EbGDNEbD\Ψ  %TV'!;'bCHUEEEQb9b9XbNbDNC0EEQbb>?bNC0EEQbb>@bNC\EEEQb9Eb9:EEQb9$b%bNC ClEQC E<b8:<C E<b8:E<bbNC<T EQb9M 'b=NC4ESEEEQb9Eb9=EEEQb9Eb9>EEEQb9Eb99TQEb>?EEQb9EEQb9Eb9Abbb=bbbbNCUESEEEQb9Eb9:<bbFESERbbNEEEQb9Eb9=<bNC TQb=NC TQb=NCCEQC E<b8:<C E<b8:E<bbN5CpCEEEQb9Eb9>TQEb>?EEQb9EEQb9Eb9Abbb=bNC<UESEEQb9Eb9>bNC TQb=NC`EEEQb9Eb99EEQb9Eb9>bNC TQb=NESEEQb9Eb9>bNEQT>EQb9b=bN: NC ESbEbNT EQb9M'b=:xChCb>&N5EFC8ET$Qb=<bN5ENUESUQ6Ct-CM'8:<QbNFTQE<bb=:lCh-CM'8:<SbNFTQ<b=:Cd-CM'8: M'bNFTQb=:CD-M'bNFTQb=:DC@-<RbNFCT bGD:C-M!jbNFCEEEQb9b9"b9gEQb9QEQb9$b=NT:<C-MbNFEEEQb9b9"b9gEQb9QEQb9$b=:C`-CM'8:<TbNFCTbGD:(FTQQb=bNC TQb=NC TQb=NEEEQb9Eb9=EEEQb9Eb9>EEQb9Eb99bb:bDNC@EREEQb9Eb9=bNC CSbGDNEbD<܀ ' bCTESEEEQb9Eb99QbbNCUC(ES<b8:PESEEEQb9Eb9:<bbNbDNCEEEQb9Eb9=EEEQb9Eb9>EEEQb9Eb99SbbbNCC EbGDNEbD,ވ bC4EEQb9$MWbNC\EEEQb9Eb9:EEQb9$b%bNC@EEEQb9Eb96<bNCEEEQb9Eb9=EEEQb9Eb9>EEEQb9Eb99<bbbNCC EbGDNEbDT , T'bC ES<bNC4ESES<bbNCTUESQbNCC ESSbNCxES4TVEQb9EEQb9$Sb&b=bNUEES4<bEEQb9Eb9:bNNE: N:NCtUEQEESSb<bbNES4<bNCCxESQbNESEEEQb9Eb9:<bb:LESC(E<Sb8:<bNC CSbGDNEbDD8: a'bC ES<bNCUESE<EQ<bIb)bFUES4TVE ` VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sQb9EEQb9$Sb&b=bN5NC CSbGDNEbD4N bC4EQEQ<b&bNC\UCEEEEEQb9Eb9:TZEEEQb9Eb9=EEQb9Eb9>bb=b<bEQb9Cb8:XCLQb,TOEQb9Db=b7N5ENbDNCCEEEQb9Eb9=EEQb9Eb9>bNTQQb=:EEQb9$EEEEQb9$<EEQb9Eb99b$QbEEQb9$EEQb9Eb99<b$bbNC\EEEQb9Eb9:EEQb9$b%bNC|EEEQb9Eb96TVEQb9EQb9$b=bNCHEEEQb9Eb994<bNCC EbGDNEbD4t` bCCEEEQb9Eb9>EEQb9Eb9=bNCEEQb9$EEEEQb9$<EEQb9Eb9>b$C EQb8: MWbEEQb9$EEQb9Eb9=<b$bbNEEEQb9Eb9=EEEQb9Eb99EEQb9Eb9>bb:CEEQb9$EEEEQb9$<EEQb9Eb9=b$C EQb8: MWbEEQb9$EEQb9Eb9><b$bbNEEEQb9Eb9>EEEQb9Eb99EEQb9Eb9=bbNEbD,r bC`C,EEEQb9Eb9=EEQb9Eb9>bNC TQb=NC|EEEQb9Eb96TVEQb9EQb9$b=bNC EbGD:(UEEEQb9Eb99<bNCEEQb9$EEEQb9$<EEEQb9Eb99<bb$EEQb9$EEQb9Eb99<b$bbNC|EEEQb9Eb96TVEQb9EQb9$b=bNCHEEEQb9Eb994<bNC EbGDNEbDDP "bC`ESC4T\EQbb=8: MWbNC0EEQb9$SbNCUEEEQb9$b%EQb9CbNEEQb9$EEQb9$<EQb9Cb$bNC\EEEQb9Eb9:EEQb9$b%bNC|EEEQb9Eb96TVEQb9EQb9$b=bNCEEEQb9Eb9=EEEQb9Eb9>EEEQb9Eb99EEEQb9Eb9:<bbbbNC TQb=NCCTHQb=NC\UEQEEEQb9Eb98bbNbDNEEEQb9Eb98Qb:<UESEQb9$bNbDNCpEEEQb9b9"b9gEQb9QQb=NEbD4| bC,TQEQb=NCC EbGDNEbD\@  TV$& b;lCdERTTTTTTTTb=bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCdEST EQ<C<8:<b$YbNC<TESb9M 'b=NCUET?EESb9'bb=MbFC4THESb9'b=N5ENTM"(b=NCUJEESb9bC4THESb9b=N5Eb=NTM"(+b=NCUJEESb9bC4THESb9b=N5Eb=NTM"(Nb=NC<EESb9Tb=bNC8TSESb9*b=NC0EESb9"RbNC<EESb9!Tb=bNC@EESb9"b9aSb=NCTUESbNTSSSSb=NC CSbGDNEbD,p  bC@EEQb9(b9tQb=NEbD,  bC@EEQb9"b9Qb=NEbD<  %(qbCHUEEEQb9b9XbNbDNCUEQC E<b8:<C E<b8:E<bbNC@EEQb9(b9uQb=NCCCDEQT>EQb9b=bNCPEEQb9"b9`Qb>?b>@b=NChEQC E<b8:<C E<b8:E<bbNC@EEQb9(b9tQb=NChEEEQb9b9"b9gEQb9Qb=NC EQb9bGD:U % VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sTESbNC@EEQb9(b9uQb=NESbEb:CEQC E<b8:<C E<b8:E< bbFESbNC@EEQb9(b9tQb=NES<b:UEQC E<b8:<C E<b8:E<bbNC@EEQb9(b9tQb=NNE: N:hNC EbGDNEbD4  'bC<ESEEQb9bbNC<EEQb9Tb=bNC@TEQb9SQb=NC@EEQb9(b9aQb=NEbD\0  TV$&  b;C|ER TTTTTTTTEEEETb= bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCdEST EQ<C<8:<b$YbNC<TESb9M (ub=NCUET?EESb9'bb=MbFC4THESb9'b=N5ENTM"(b=NCUJEESb9bC4THESb9b=N5Eb=NTM"(b=NCUJEESb9bC4THESb9b=N5Eb=NTM"(b=NC<EESb9Tb=bNC8TSESb9*b=NC0EESb9"R bNC<EESb9!Tb=bNC@EESb9"b9aSb=NCTUESbNTSSSSb=NC CSbGDNEbD, x  bCC|EEEQb9b9RbNEEQb9(b9uQb=:<EEQb9(b9tQb=NEbDL  %(q!(bCHUEEEQb9b9XbNbDNCtUEQC E<b8:<C E<b8:E<bbNCTCEEEQb9b9RbNC@ESEEQb9(b9ubNESEEQb9(b9tb:C@ESEEQb9(b9tbNESEEQb9(b9ubNC SQb=NCLCCDEQT>EQb9b=bNC@EEQb9"b9`Qb>?b>@b=NCxEQC E<b8:<C E<b8:E<bbNChEEEQb9b9"b9jEQb9Qb=NCPEEQb9$EEQb9b9RbNC EQb9bGD:`UESbNC SQb=NESbEb:CEQC E<b8:<C E<b8:E< bbFESbNC SQb=NES<b:UEQC E<b8:<C E<b8:E<bbNC SQb=NNE: N:NC EbGDNEbD4   bCC|EQbNEEEQb9b9"b9gEQb9b=:\EEEQb9b9"b9iEQb9b=NCPEEQb9$EEQb9b9RbNC TQb=NCC EbGDNEbDd  TV$& ' b;CxER TTTTTTETEEEETb= bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCdEST EQ<C<8:<b$YbNCUJEESb9FbC4THESb9Fb=N5Eb=NTM'(b=NC<TESb9M )b=NC<EESb9Tb=bNC0EESb9"R bNC<EESb9!Tb=bNCLEESb9(TTTb=bNC`EESb9GT ESb9M )&b=bNC<EEESb9Fb<bNCdEESb9EESb9ESb9FbbNC<ESEESb9bbNC<EESb9Tb=bNC@TESb9SSb=NCTUESbNTSSSSb=NC CSbGDNEbDDT ' TV)0bC0ESEQb9bNC0ESEQb9bNC0ESEQb9FbNC<T EQb9M b=NC`TTEQb9ES<bES<bEESSb<bEESSb<bES<bEESSb<bEESSb<bES<bb= NC`T EQb9EM  VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s EQb9Gbb=NC@EEQb9"b9^Qb=NEbDD! 9 TV)0bC0ESEQb9bNC0ESEQb9bNC0ESEQb9FbNCHT EQb9M $/M b=NC`TTEQb9ES<bES<bEESSb<bEESSb<bES<bEESSb<bEESSb<bES<bb= NClT EQb9M $:EM EQb9Gbb=NC@EEQb9"b9^Qb=NEbD\%4 L TV$&  b;lCdER TT TTTT TT b=bNCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNCdEST EQ<C<8:<b$YbNC<TESb9M )3b=NCUET?EESb9'bb=MbFC4THESb9'b=N5ENTM#)>b=NC<EESb9Tb=bNC0EESb9"R bNC<EESb9(Tb=bNC<EESb9!Tb=bNC@EESb9"b9aSb=NCTUESbNTSSSSb=NC CSbGDNEbD,* U bCT1EQb9EEQb9EEQb9(b9ybEEQb9EEQb9(b9zbb=NCHT[EQb9EQb9'b=NEbDL+ c )b)e)h'bC@EEEQb9'bMWbNCEEEQb9bESTVEQb9EQb9'b=bbNCPEST EQb9M)hb=bNCPEST EQb9M'b=bNCdEEEQb9bESESSbbbNCxEEEQb9(b9yEEEQb9Sb<bbNCEEEQb9(b9zEEEEQb9Sb<bSbbNEbD<. q   b;lCdER TT TT TT T T b=bNCdESTEQ<C<8:<b$YbNC<TESb9M)ob=NCUJEESb9HbC4THESb9Hb=N5Eb=NTM()wb=NCUJEESb9JbC4THESb9Jb=N5Eb=NTM()wb=NCUJEESb9IbC4THESb9Ib=N5Eb=NTM()wb=NCUJEESb9KbC4THESb9Kb=N5Eb=NTM()wb=NC<EESb9Tb=bNC0EESb9"R bNC<EESb9!Tb=bNC CSbGDNEbDT3 w TVXZbC0ESEQb9bNC0ESEQb9bNC0ESEQb9bNC0ESEQb9bNClEEQb9LESCHJEEQb9Hb<b=8:CJEEQb9HE<bbESEQb9Hbb=8:XCJEEE<bEQb9Hb<bESEEQb9HSbbb=8:CJEE<EQb9Hb<bESEQb9Hbb=8:EQb9HbbNClEEQb9MESCHJEEQb9Ib<b=8:CJEEQb9IE<bbESEQb9Ibb=8:XCJEEE<bEQb9Ib<bESEEQb9ISbbb=8:CJEE<EQb9Ib<bESEQb9Ibb=8:EQb9IbbNClEEQb9NESCHJEEQb9JbSb=8:CJEEQb9JE<bbESEQb9Jbb=8:XCJEEE<bEQb9Jb<bESEEQb9JSbbb=8:CJEE<EQb9Jb<bESEQb9Jbb=8:EQb9JbbNClEEQb9OESCHJEEQb9KbSb=8:CJEEQb9KE<bbESEQb9Kbb=8:XCJEEE<bEQb9Kb<bESEEQb9KSbbb=8:CJEE<EQb9Kb<bESEQb9Kbb=8:EQb9KbbNEbD,>  8N VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s>'! bCT"EQb9EQb9LEQb9MEQb9NEQb9Ob=NEbD<?    b;lCdER TTTTTTTTb=bNC,ESTQYbNC<EESb9Tb=bNC8TSESb9*b=NC0EESb9"R bNC<EESb9!Tb=bNC@EESb9"b9aSb=NC CSbGDNEbD4B( 'bCPUEEQb9bNTM5)b=NC@EEQb9(b9aQb=NEbD,C bCLCEEEQb9b9REQb9bNC@EEQb9(b9uQb=NEEQb9P<b:tC@EEQb9(b9tQb=NEEQb9PbEbNEbD,D bC@EEQb9(b9tQb=NC0EEQb9PbEbNEbD4EX %bCUCXEEEQb9b9REQb9b8:$EEQb9PbNCEEEQb9b9"b9gEQb9QEQb9b=NC@EEQb9(b9uQb=NEEQb9P<bNCUEEQbC E<b8:<C E<b8:E<bbNCQbGDNEbDDG   ' b;CERTTTTTTTTTT TTTb= bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC<EESb9!Tb=bNC@EESb9"b9aSb=NC<ESEESb9bbNC<EESb9Tb=bNC@TESb9SSb=NC CSbGDNEbDTK( %TV!;bCHUEEEQb9b9XbNbDNCUEQE<bbFEQE<bbFEQE<bbNbDNCdESEEQb9"b9QQQb=bNCTEEESbb9"b9]SQb=NCCCDEQT>EQb9b=bNCUEQM)bNCET>EQb9b=C E<b8:<C E<b8:E<bbN5CLEN:<NCUEEQb9"b9`Qb>?b>@b=NESEEQb9"b9Qb>?b>@b=bNUESEEESbb9"b9]SQb=bNC@EEQb9$ESb9'bNCEEEQb9b9"b9gEQb9SESb9'b=NC ESb9'bGDN:pNEbD\P  )!)bCCC EQb8:XC4EEQb%<b8:EQT bNC ESbEbNC EST bNESMWb:C@ESEEQb9Qb9UbNC@ESEEQb9Qb9RbNC0ESEQb9$bNUESC0EEQb9b8:bDbFUUEQESb9'bNC0ESESb9bNC ESSbNC ESQbNNNE:N5NC@ESEEQb9Qb9UbNC@EEEQb9Qb9USbNC@EEEQb9Qb9RSbNC0EEQb9$SbNCEEEQb9b9"b9gEQb9QEQb9$b=NCLEEESbb9(b9tSb=NCLEEESbb9(b9uSb=NCC EbGDNEbD,V " bC,CTQYbGDNEbDW 1 TV$&F))) )bCUESTQb=bNC4ESTNQb=bNC4ESTNQb=bNESTNQb=bNC4ESEQ<b&bNC4ESEQ<b&bNC4ESEQ<b&bNC4ESEQ<b&bNC4ESEQ<b&bNC4ESEQ<b&bNC,TSM)b=NC`UET?Sb=M:bNTM8* b=NC,ES Tb=bNCLES TSS SSb=bNCUESbNC ES <bNCUES ESbbFUES 4TVSS b=bN5NES 4<bNCUEESbCT8:@CT8:$CT8:Tb NES 4E<T SMb=bb  VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s+0NC<UES E<ESb%Ib)bFUCpES TSESS b&S S SS b=bNTS S <EES <bES b9bb=N5NC TS b=NC TS b=NCTUESbNTSS SSb=NC CS bGDNEbD,_4 E)bC@EEEQb9Qb9RT bNC@EEEQb9Qb9UbEbNC4EEQb9$MWbNEbDD`T U  L*E*NbC\ESC EQb8:TQb=bNCUESEEQb9bbFUEEESb9!b9SbN5NCtEEQb9"b9_Q<<STQb=b=NEbD?333333?Gz?(\)\bd iF*T^*Z*_b;lCdEREMWT:T`M*cb=b=bbNCUET?Qb=M?bNC EQQbNEQb>>bNCUET QMEb=MbFERbNCDC0T!QQb=8:bDNCQbGDNCC0T]QQb=8:bDb,CLESTET^b> b=b=bNC TG<b=NCLESTET^b> b=b=bNC TG<b=NESTET^b> b=b=bb7NCEST$EEEKSbEKSbbEKSbbb=bNCUEERbCM8: M*jb NCT!QEEEESM<bSbM<bSbb=NCQbGDNCEERbEM *oM *}M *M *M *M *M *M *M *M *M *M *M +M +M +M +$M +.EbAbNC,T QMb=NCHESEES<b<bbNC<TaQERSb&b=NC CQbGDNEbD|Di oF+8bC\UET?Qb=M?bNEQQbNC0EEQbM+@bNC4ESTbQb=bNCQb,UEMb(FTO3pb=NCHEST$TG<b=b=bNESES<4EESSbSbb$bb7NCHC8TcQESb b=bGDNEbDm$ F+I+R+Y+b+i+q+w+|+++ ++|TV + +bCUET?Qb=M?bNCEQEQEQEQEQEQQb'b'b'b'b'b'NEQb>>bNC4EEQbEbAbNC4EEQbEbAbNC4EEQbEbAbNC4EEQbEbAbNC@EEQbEM+bAbNC,EEQb<bNClUET?Qb=M:bNEQEQbAbNCUET?Qb=M:bNEQC0EEQbbA8:EbAbNCUET?Qb=M:bNEQC0EEQbbA8:EbAbNCUET?Qb=M:bNEQC0EEQbbA8:ESbAbNClUET?Qb=M:bNEQEQbAbNC4ESEQQb&bNC\ESC4EQE<bb&8:< bNC ES<bNCxUES4ECQ8:$CQ8:Qb%bF5NCC0EEQb%SbN5CT=QEQE<bb&b=N:pNCC0EEQb%SbN5CT=QEQE<bb&b=N:pNCC0EEQb%SbN5CT=QEQE<bb&b=N:pNC ES<bNC ES<bNC\UES4TVQEQbb=bF5NCLUES<bNES4<bNC ES <bNC\UES 4TVQEQbb=bF5NC(ES 4< bNC(ES 4<2bNC@EST QMb=bNC4ESE<SbbNC@EST QM'b=bNCDES TDQSSb=bNC ES<bNC\UES4TVQEQbb=bF5NC,ES ESbbNCUTS TQEQbb=<ES 4Sbb=F5NC4UESE<SIb)bFUC(ES 4SbNCUEEEQSb&b%<bNTS TQEQSb& !Y VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1su?b=<S b=NCTS TQMWEES4<bEQSb&b=SS b=NES4ESEEQSb&SbbbN5NCPES 4EE<Sb<bbNCESEES EQb%bE<EEQb%<bbbbNC(ES4SbNCHES EESSb<bbNCUES EQbbFUCxTS TQS TTES <b=S S b=NES 4ES <bbN5NC TS b=NCLETTS EEQSb=bNC CTbGDNEbD4d +IFbCCtET?EQ<b&b=M?bNESb>>b:0EST<Qb=bNC(TSQb=NC ETbEbNC CTbGDNEbD4 !lbC0ETEQb9'bNCC EbGDNEbDD FTVbCUET?Qb=M?bNCHEQEQEQQb'b'b'NEQb>>bNCXEQ4ETVQQb=<bbNCEQ4EEET QM)hb=T QM'b=b<b<bbNCLC<T7QQQQb=bGDNEbDL FTVXZbCUET?Qb=M?bNC\EQEQEQEQQb'b'b'b'NEQb>>bNC@T3QQQQQb=NCT8QEQ<bEQ<bEQ<bEQ<bb=NCC EbGDNEbDL0 FXZbCUET?Qb=M?bNC\EQEQEQEQQb'b'b'b'NEQb>>bNCT QEM}ET QMb=QbbEMET QMb=Qbbb=NCXT&Q<<EQbEQbb=NCC EbGDNEbD $++++++TV++bCCET?EQ<b&b=M?b NEST<Qb=b:hESC$Eb>>b8:(Td<b>>b=bNCCET?EQ<b&b=M?b NEST<Qb=b:ESSbNC\ESC4ET<Qb=b8:<bNC\ESC4ET<Qb=b8:<bNCESC4ET<Qb=b8:<ET SM Lb=SbbNCESC4ET<Qb=b8:<ET SM Rb=SbbNC\ESC4ET<Qb=b8:<bNC\ESC4ET<Qb=b8:<bNCESC4ET<Qb=b8:<ET SM Lb=SbbNCES C4ET<Qb=b8:<ET SM Rb=SbbNCUC(ES<b8:|C(ES<b8:LC(ES<b8:ES <bNC EbGDNCDES TSSSb=bNCCES<bNES ETUES<bb=ES<bbb:ES <bNCUES E<ES<bIb)bFUTRSS ESES S bbS<SS <b=N5NCCES <bNES ETUES<bb=ES <bbb:ES <bNCUES E<ES <bIb)bFUTRS S<ES S bS<SESS bb=N5NC T8S b=NCC EbGDNEbDt F+TVXZ bC UET?Qb=M?bNCpEQEQEQEQEQQb'b'b'b'b'NEQC$Eb>>b8:(Td<b>>b=bNC0EEQbM+bNC,EEQb<bNC,EEQb<bNC`EEQbET QM Lb=QbbNC`EEQbET QM Rb=QbbNC`C0TbQQb=8:$Td<Qb=NC$ESMWbNC(ESEbAbNC(UEST_QQTeQQQQQb=b=bFUUEEES4Sbb%<dbNC(T=SSb=NESMWbN5NC(T=SSb=NCdESEEEQM<b 68  n5z4Lt>4Q<wm[RF 1nU $ 3'q  'Z/ 0`A/X 3$ZxhdOG"uPp7Oo,' yk% )8__wQX&9)aIN5k{S Y/W#'-N -'R[>}%ih ?s?v?˙#AE/8'i`13\7r 5#! =*~g? ~`L),avI[%~8%m1%L{   u'" /! 6`kb$e$< ! ${Q}W L+v@Ho%:Yc_n:,(TY8:?2u333M?)zxD?(]~,?bqPL5 y#[**)%|P*( - R"R;T2 >%r9wzB*E>/l7c Pb?C ['_~>S& ]),E2)J T(N 2[H'V] zmD*Wvsl #[oeXX#\)q0&%W *~ҩF_'(7'oWi+'N@yd9, i }V}'! 'Q0h([Vd/N)rc&&CG '"hW&^T~J,}?*)G1(&B/ ;I1L)c}V};b9{XcDV )0uv7U0+E:!i  UxaX2gSt }|$v' Gy!"LX&bl*Ap.qLH naVbnK6<}gxIGS-G [ ]4Q G ) )v)% ' %(&-0*bF*kXI+7nI**N3*?"* e:_*[Y:ZX*B+4*'(h+1c++@w[ fv8)W!o(T) AFzw5KUP ."735'UY#2-<ydtH+?V -o`bEn|@fgvi=$H) =f+0]J!Py iC8 3")s)= G L T +^+o+M)+5E!#x ).00+=czf*xMq-CrIfDv)v]ka&!k@s:V!Z$N!8T G?O+(--M- !f\hi(`#f3hY$|& _ W+Rp+4+K1+G+p+ p +-+H.+O*2v+{D+&MZZS++/}T5|)~T('{o[XmJ})/m1A4`"BJcp)V&H(WCS#O"M& U?S}?"d}P}qk/av90a,>] 0{.8l\oV##.%D% &rwl;p%\ QXo[&! jluIg! C 53=ArSTP I &/t{|4P:?m !G & a.? $V 6\Oz'}PW M g= v:hWiv$eG]/&"3' @nGT YgC#c! mb<Ic#`@D'%!Y/%LV22/&T_!u'd Z8 K?zjq&E 8n2QHs@bG'e܏I^Ng/| ?' hc"jPNs y$Gz~i.@JYRC90, V)4%1ri b0[V? [Mo !ykR5> #dx( dZ3 UK 34A_R@g~F' =yx(klYaY '  #~A8 T xw]esg:I'Wm<i x qHQzq$ENiS)aGg)E)s gFi|+:S2o.`5!)>,M+fb60Iq8Jr %2h' ]t 9R'C VsXB;\=$-T*F @H_ir(Z=T\+ ( ]`0N .e(5Mc~X12ddt tE ) UMTd#&x6 O8wJ) XJԟ{O^BĔ{_&E7 &c0^u^IC^- |1drM#Z44l `N pcN*u34u|" ~\'y g01aP DZFB4<Q{g=n6 kK&n01!}7:raGl-G 0-i%0 > ${rZ a| VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sLNQbM<bbNCLUES4T<Sb=bN:NC CSbGDNEbDL FXZ+b;4C,ERTCb=bNCUET?Qb=M?bNC4EQEQQb'b'NEQb>>bNCLEEQbT QM Lb=bNCLEEQbT QM Rb=bNC@EST QM+b=bNCEEERSb&bTEM>QbEMQbM !\b=bNC4EQERSb&bNC(UEQbNbDNCUCHET QM Lb=Qb8:<ET QM Rb=QbNT QEM>QbEMQbb=NC CQbGDNEbD@@t  $+,,, ,,!BFbC ETbEbNC,ESTCb=bNChESEEEb>b>bb> b3bbNCb>.b,ClUTETFSb=b=NCTG<b=N:NESTEC(TF3b=8:<b=bb7NCLUESMWb NESb>.bNC|UESEQbbFUUT?Sb=6C\-MbNFSb,CESC@TETFM,#b=b=8:$Td<Sb=bNC TG<b=NC4ESTE<b=bNTSSSb=b7:C-M:bNFC0TSSSb=NTSSb=:(FTd<nSb=N5NCHEEESM,%b&bMbNCHEEESM,(b&bMbNCDEEESMJb&bSbNCUEESM[b&bNCDEEESM Lb&b<bNEEESM Rb&b<,bNCTESTfEM,%M,+bAb=bNC`ESTfEM,%M,+M,(bAb=bNCESCLTSCS8:Sb=8:,TAb>.M,0b=bNC4TSSM,%b=NC4TSSM,(b=NC4TSSM,+b=NC0EEb>>bSbNC CSbGDNEbDT ,,D,X,L,RbCxESCLEM,VTQMb=b8: M;bNCESCXTQM,_MM !\M ,hSb=8:,TAb>.M,sb=bNCUESCM+8:lCM,(8:LCM,%8:,CM,+8: CM ,8:CMJ8:CM,8:CM8:CM08:lCM,8:LCM,8:,CM L8: M RbFUTQSTgSQSb=b=N5NC T'Sb=NCC EbGDNEbDL ,D,,!BbC4EQTWQb=bNCUEST<Qb=bNCSb,UEM$qb(FESTETOb><b=b=bNCCtTh<b=NESC(T<Qb=8:bDb:0ESTE<b=bNUESQb NCSbGDb7N:8NC bDNEbD\` ,,D,,!B,bC(ESEbAbNCdUEST<Qb=bNCSb,ChEM$qb(FESTETOb><b=b=bNCCTh<b=NESC(T<Qb=8:4TAb>.M,Sb=b:0ESTE<b=bNUS6CX-M,bNFTQM,(Sb=:CX-MbNFTQM,%Sb=:DCX-MbNFTQM,+Sb=:CX-M,bNFTQMJSb=:CX-MbNFTQM+Sb=:$CX-M,bNFTQM,Sb=:CX-M,bNFTQM,Sb=:dCX-M!*bNFTQM LSb=:CX-M!,bNFTQM RSb=:CX-MbNFTQM0Sb=:DCX-MbNFTQMSb=:CX-M,bNFTQM,Sb=:CD-M,bNFSb,CESC@TETFM,#b=b=8:4TAb>.M,Sb=bNC TG<b=NTQSTE<b=b=b7:8FTAb>.M,Sb=:C`EM-b(FTh<b=NET<b:$T=SS 1c VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s]b=b7N:NCLUT=QT<Sb=b=N:NCC EbGDNEbD< #,,!BbCC8TQQQb=8:PTd<EEQM,#bQbb=NCC EbGDNEbD< 0,,!BbCUQ6C-MbNFQb,CEEQM Lb&C@TET^b> b=b=8:bDbNC8C$EM<b(8:bDNCEEQM Rb&C@TET^b> b=b=8:bDbNC(Th<b=8:bDb7:$C-M0bNFQb,CEEQM,b&C@TET^b> b=b=8:bDbNC8C$EM<b(8:bDNCEEQM,b&C@TET^b> b=b=8:bDbNC(Th<b=8:bDb7:TC-M,bNFQb,C(UEEQM Lb&TET^b> b=b=bNC8C$EMTb(8:bDNEEQM Rb&C@TET^b> b=b=8:bDbNChUEM$sb(NCEEQM,b&C@TET^b> b=b=8:bDbNC8C$EM$sb(8:bDNEEQM,b&C@TET^b> b=b=8:bDbNC(Th<b=8:bDb7:4FEEQQb&QbNCC EbGDNEbDDT 8,- $,bC@ESEb>.MbAbNCUESTiQb=bFUUC,TjQSb=N5ENT=SEESM,#bEMWEEQSb&bbbb=N5NCLUETbNC`T[b>M -TJES<b&b=b=NCUT[b>M<TJESE<ESb%Ib)b&b=b=F5NTIb>M-b=NC,CTQSYbGDNEbDLØ AF,,!BbCESCLEMWEEQQb&bb8:C EbGDbNCLESEEQM,#bSbbNCtUETbNTIb>M-TJSb=M-b=NC|C0T QSb=8:@TIb>b>.M -0Sb=NCC EbGDNEbD, L$bC,TLQMb=NC,TLQMWb=NCCdEb>>bNC4Eb>>TQQYbbGD:(CTQQYbGDNEbD, R$bCUCPET?EQ<b&b=M?b N5ENC@TLQEb>>bb=8:(Td<b>>b=NC,CTIQYbGDNEbD,l Y$bCUCPET?EQ<b&b=M?b N5ENC@TLQEb>>bb=8:(Td<b>>b=NC,CT[QYbGDNEbD4 a?bC`CEQbNEQC$Eb>>b8:(Td<b>>b=b:UET?Qb=M?bNC EQQbNEQC$Eb>>b8:(Td<b>>b=bNCXC(T$Qb=8:$Td<eQb=NC TkQb=NC TXQb=NC CQbGDNEbD<P h   b;dC\ERTTTTT T T b=bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC@EESb9"b9aSb=NC CSbGDNEbDL8 q"!BbCPUESE<EEQb9Tb%Ib)bFUCDESEEQb9TSb&bNCET?Sb=M "b NSEEQb9SSb&Qb=: CT?Sb=b,TSM-=b=b7NEESb9"b9gSQQb=:`UET?Sb=ETbb NCUET?EQbb=T?Sb=b FEEEQMb&bESMb&bNNN:TNEESb9"b9bSQQb=N5NEbDD "!B -EbC8UEEQb9XbNbDNC0EEQb9RQbNCLUEQbNTQQQb=NC CQbGDNEbDD, -R"-YbCTJQb=b,UEM-\b(NTEEM -eTE<b=bM-sbb=b7NC8T=EQb9TQb=NC8T=EQb9SQb=NEbD,Ԡ bCDEEEQb9TbEb >2 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s-lAbNCDEEEQb9SbEbAbNC0EEQb9T bNEbD<ռ    b;dC\ERTTTTT T T b=bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC@EESb9"b9aSb=NC CSbGDNEbDLפ "!B -E-bC8UEEQb9XbNbDNCESC8THEQb9Zb=8:CJET?EQb9Zb=ETbb EEQb9Zb9Rb=8: TM#-b=bNCEQC`JEEQb9YQbEQb9Yb=8:4JESQbSb=bNC0EEQb9RQbNC`UEEQb9\bNEQT$Qb=bNCLUEQbNTQQQb=NC CQbGDNEbD??,0 bC<EEEQb9Yb<bNC<EEEQb9ZbK4bNCUCTEEEQb9RbEQb9Yb8:HEEEQb9RbEQb9ZbNEEQb9REQb9YbNCXEEEQb9RbEEQb9YbbNCEEQb9\JET?C$EQb9Y8:EQb9Zb=Mb <b=bNCEEEQb9[bEKEEQb9ZEQb9YbbbNCUEEQb9\bNEEQb9[T$EQb9[b=bNC TQb=NEbD<L    b;dC\ERTTTTTTTb=bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC@EESb9"b9aSb=NC CSbGDNEbD, bC<C,EEQb9RbbGDNEbD4 "bC8UEEQb9XbNbDNC0EEQb9R<bNC0TQQ<b=NC0C EQb9RbGDNEbD4 "bC0EEQb9RbEbNC0TQQbEb=NC0C EQb9RbGDNEbD< 3"-bCTESJEEQb9Rb<b=bNCDC4TQQSb=bGDNEbD< H   b;dC\ERTTT T T T T b=bNC,ESTQYbNC<EESb9Tb=bNC0EESb9"RbNC@EESb9"b9aSb=NC CSbGDNEbD< V!BbC8UEEQb9XbNbDNC@EEQb9VEQb9UbNC0EEQb9UQbNC0EEQb9RQbNCxEEEEQb9Vbb9"b9bEQb9VEQb=NC CQbGDNEbDD| h --#bCDCET?EQbb=M:b NUESEQbbFUEEQb9"b9hQESbQb=N5:XEEQb9"b9hQEQbQb=NEbD, zbC8EEQb9EbAbNC8EEQb9EbAbNEbD< -'bCUC0EEQb9b8:$EEQb9bNTM-b=NCEQbFT8EQb9EQb9EQb9EQb9EQb9b=NCUESEEQb9bbFUEESb9"b9SM-b=N5NC@EEQb9"b9^Qb=NEbD\d TV-ZX-bC@TQQQQQb=NC UESEEQb9bbFUCET?Sb=M b NEESb9"b9_QSb=:DEEQb9"b9eQSb=N5NEbDx  -^XZ---.bC0ESEQb9bNC0ESEQb9bNC@ESEEQb9!b9bNC@ES EEQb9!b9bNC@ES EEQb9!b9bNC@ES EEQb9!b9bNC<ESEEQb9CJESE<bbEESSbC0EEQb9b8:<bb=8:LC<JET?Sb=Mb CJEEE<bSb<bESESSbbb=8:\JEE<S % VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sk{b<bESSbb=b=8:SbbNC<ESEEQb9CJES E<bbEESS bC0EEQb9b8:<bb=8:LC<JET?S b=Mb CJEEE<bS b<bESES Sbbb=8:\JEE<S b<bES Sbb=b=8:S bbNC<ESCJES bCJET?S b=Mb EE<S b<bES Sbb=8:S b=8:@C0EEQb9b8:SbNC<ESCJES bCJET?S b=Mb EE<S b<bES Sbb=8:S b=8:@C0EEQb9b8:SbNC4EST$Sb=bNC4EST$Sb=bNCUEESESSbbESEEQb9EQb9bbbNES4ESSbbNCUEESESSbbESEEQb9EQb9bbbNES4ESSbbNC`EEQb9"b9_QSSSSb=NEbDL .. !)bC(ESEbAbNCUESEEQb9bbFUUESQbNT=SSb=N5NC0EEQb9SbNC(ESEbAbNCUESEEQb9bbFUUESQbNT=SSb=N5NC0EEQb9SbNC<UEQbNTQb=NEbD\ .TVXZ.bC,EEQb<bNC,EEQb<bNCHEEQbEEQb9bbNCHEEQbEEQb9bbNC@EEEQb9!b9QbNC@EEEQb9!b9QbNC@EEEQb9!b9QbNC@EEEQb9!b9QbNC8T=EQb9Qb=NCUCtTJEEQb9"b9]b=b,TSM Ub=b7N5ENT=EQb9Qb=NCpUJEEQb9bEEQb9bEEQb9bEQb9b=NCET?Qb=M b NEEQb9"b9_QQb=:DEEQb9"b9eQQb=NEbDL %TV.bCUESEEQb9"b9QQQb=bNC\EESb9"b9]SQQQb=bGDNEbDD TVXbCUESEEQb9bbFUUEESb9"b9`SQQb=NCSbGDN5NEbD<  -bC ES<bNCUESEEQb9bbFUUET?Sb=M bNCUC`ET?EESb9!b9b=Mb 8:C`ET?EESb9!b9b=Mb 8:CHEEESb9!b9<b8:<EEESb9!b9<bNTMJ.b=NES4EEESb9!b9EESb9!b9bbN5NC CSbGDNEbD<D -bC ES<bNCUESEEQb9bbFUUET?Sb=M bNCUC`ET?EESb9!b9b=Mb 8:C`ET?EESb9!b9b=Mb 8:CHEEESb9!b9<b8:<EEESb9!b9<bNTMJ.b=NES4EEESb9!b9EESb9!b9bbN5NC CSbGDNEbD, l -bC|UCDET?Qb=ETbb N5ENTM%.bb=NC`UET?Qb=M b NTM$.b=NCT8EQb9EQb9EQb9EEQb9<bEEQb9<bb=NEbDT | -TVXZbCpCCTT?Qb=b,TSMb=b7N5ENTM%.b=:CCDET?Qb=ETbb N5ENTEEM..TJQb=bM,!bb=:CJEQbC$THQb=N5Eb=NTM%/b=:CJEQbC$THQb=N5Eb=NTM%/(b=:CJEQbC$THQb=N5Eb=NTM%/Nb=:|UJEQbC$THQb=N5Eb=NT j VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sM%/(b=NChEEQb9"b9cQQQQQQb=NEbDT |-TVXZbC0CCTT?Qb=b,TSM /tb=b7N5ENTM(/b=:C|CDET?Qb=ETbb N5ENTM(/b=:CJEQbC$THQb=N5Eb=NTM'/b=:CJEQbC$THQb=N5Eb=NTM'/b=:CJEQbC$THQb=N5Eb=NTM'0#b=:|UJEQbC$THQb=N5Eb=NTM'/b=NChEEQb9 b9mQQQQQQb=NEbDL "|TV0KbCUCTT?Qb=b,TSM /tb=b7N5ENTM*0Zb=NCEEQbEET EQb9M Lb=EQb9b<bbNCEEQbEET EQb9M Rb=EQb9b<bbNC|UCDTHQb=FTHQb=N5ENTM10b=NC4EEQbEbAbNCCCtEEEQb9 b9lQQQQQb=b8:QbGDNEbD,8 .bCUCTT?Qb=b,TSMb=b7N5ENTM%0b=NCHEEQMb&b9nQb=NEbD<h 6 TVbCUC0EEQb9b8:C0EEQb9b8:\C0EEQb9b8:$EEQb9bNTM%0b=NCC EEEQb9EQbbEEQb9EQb9bbFEEEQb9EQbbEEQb9EQb9bbbGDNEbDL D TVXZbC<EEQb9EQbbNC<EEQb9EQbbNC<EEQb9EQbbNC<EEQb9EQbbNEbD,4 Q bCT3EQb9EQb9EQb9EQb9EQb9b=NEbD, _ bbD,@ p bbDD { '1bC(ESEbAbNCpUESTNQb=bNCCT=SEEQb9T$ESEQb9bb=bb=NT=SEEQb9T$ETNQb=EQb9bb=bb=N:NC CSbGDNEbD<!  'bCCpQTLTTLQQb=YEQb9b=YbGDNEbD$"h UbbD$" _b;<C4CETTfEM M M M*M 1M1M1 MMM10M 1FM HM SM^M <M }M 1PbAb=bNCTETTfEM MbAb=bNC ET<bNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ET E< bbNC,ETE< bbNC,ETE< bbNC,ETE< bbNC,ET E< bbNC,ET E< bbNET E< bbNbD,( eb;(C ER<bNC(ER4<bNC CRbGDNEbD,( n1ZbC8TIb>M1^Qb=NC Td<Xb=NEbD,)| u'bCTC@T?EQ<b&b=b,TSMb=b7NCUCxJTHEQ<b&b=THEQ<b&b=b=N5ENTM'1mb=NC<bGD:bDNEbD4+ F"bCUCLT?Qb=b,EM?b(b7N5ENTEEM1QbM,!bb=NEbD,, bbD,,H bCT8EQb9EQb9EQb9EQb9EQb9b=NC|UEEEQb9(b9^bNEEQb9"b9^Qb=NEbD,- bCT8EQb9EQb9EQb9EQb9EQb9b=NC<T EQb9M b=NC TTEQb9EEQb9<bEE !9f VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sQb9<bEEEQb9EQb9b<bEEEQb9EQb9b<bEEEQb9EQb9b<bEEQb9<bEEQb9<bEEEQb9EQb9b<bb= NC<T EQb9M b=NC|UEEEQb9(b9^bNEEQb9"b9^Qb=NEbDL1 )b)e)h'bC@EEEQb9'bMWbNC\ESTVEQb9EQb9'b=bNCPEST EQb9M)hb=bNCPEST EQb9M'b=bNC4ESESSbbNCPEEEQb9bES<bbNCPEEEQb9bES<bbNCpEEQb9C8E<EQb9b8:<bNCpEEQb9C8E<EQb9b8:<bNCxEEEQb9(b9yEEEQb9Sb<bbNCEEEQb9(b9zEEEEQb9Sb<bSbbNEbD,6P bCT8EQb9EQb9EQb9EQb9EQb9b=NCT1EQb9EEQb9EEQb9(b9ybEEQb9EEQb9(b9zbb=NCHT[EQb9EQb9'b=NC|UEEEQb9(b9^bNEEQb9"b9^Qb=NEbD,8 bCT+EQb9EQb9EQb9EQb9EQb9b=NC<T EQb9M $/b=NCT1EQb9EEQb9EEQb9(b9ybEEQb9EEQb9(b9zbb=NCHT[EQb9EQb9'b=NC<T EQb9M $:b=NEbD?D;l )e)h'bC@EEEQb9'bMWbNC@EEEQb9(b9v<bNCPEST EQb9M)hb=bNCPEST EQb9M'b=bNC4ESESSbbNCPEEEQb9bES<bbNCEEEQb9bEETVEQb9EQb9'b=SbE<EEQb9(b9vbbbNCpEEQb9C8E<EQb9b8:<bNCpEEQb9C8E<EQb9b8:<bNCEEEQb9(b9yESE<EEQb9(b9vbbbNCEEEQb9(b9zEEEEQb9Sb<bSbbNChEEEQb9(b9wT$ESKbb=bNCEEEQb9(b9xEEEQb9EEQb9(b9wb<bbNEbDTA 1+bC@ESEEQb9(b9vbNC@ESEEQb9(b9xbNC@ESEEQb9(b9wbNC0ESEQb9bNC0ESEQb9bNC<T EQb9M b=NCxT3EQb9ESSbESSbSSb=NCT8EQb9EESSb<bEESSb<bES<bES<bb=NCT1EQb9ESEEQb9(b9ybESEEQb9(b9zbb=NCHT[EQb9EQb9'b=NC|UEEEQb9(b9^bNEEQb9"b9^Qb=NEbDTFh +1bC@ESEEQb9(b9vbNC@ESEEQb9(b9xbNC@ESEEQb9(b9wbNC0ESEQb9bNC0ESEQb9bNC<T EQb9M b=NCTTEQb9EESSb<bEESSb<bEEESSbSb<bEEESSbSb<bEESSb<bEEESSbSb<bEEESSbSb<bEESSb<bb= NC<T EQb9M b=NCxT3EQb9ESSbESSbSSb=NCT1EQb9ESEEQb9(b9ybESEEQb9(b9zbb=NCHT[EQb9EQb9'b=NC|UEEEQb9(b9^bNEEQb9"b9^Qb=NEbD?DL )e)h'bC@EEEQb9'b 5  VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s_gMWbNC@EEEQb9(b9v<bNCPEST EQb9M)hb=bNCPEST EQb9M'b=bNC4ESESSbbNCPEEEQb9bES<bbNCEEEQb9bEETVEQb9EQb9'b=SbE<EEQb9(b9vbbbNCpEEQb9C8E<EQb9b8:<bNCpEEQb9C8E<EQb9b8:<bNCEEEQb9(b9yESE<EEQb9(b9vbbbNCEEEQb9(b9zEEEEQb9Sb<bSbbNChEEEQb9(b9wT$ESKbb=bNCEEEQb9(b9xEEEQb9EEQb9(b9wb<bbNEbDDR bC0ESEQb9(bNC0ESEQb9bNC0ESEQb9bNCT8EQb9ESESb9vbESESb9xbESb9wESb9wb=NCT0EQb9ESESb9vbESESb9xbESb9wESb9wb=NCT1EQb9ESESb9ybESESb9zbb=NCHT[EQb9EQb9'b=NClUEESb9^bNEEQb9"b9^Qb=NEbDDVbC0ESEQb9(bNC0ESEQb9bNC0ESEQb9bNCT,EQb9ESESb9vbESESb9xbESb9wESb9wb=NCT1EQb9ESESb9ybESESb9zbb=NCHT[EQb9EQb9'b=NClUEESb9^bNEEQb9"b9^Qb=NEbD4Y +-bCCEQbNCTEEQb9(TTTTb=bNEEQb9*Tb:4UQ6Ct-TbNFEEQb9(TTTTb=b:Ct-TbNFEEQb9(TTTTb=b:,Ct-TbNFEEQb9(TTTTb=b:Ct-TbNFEEQb9(TTTTb=b:4C-TbNFCTEEQb9(TTTTb=bNEEEQb9(b9^<b:pC-TbNFCTEEQb9(TTTTb=bNEEEQb9(b9^<b:C-TbNFCTEEQb9(TTTTb=bNEEEQb9(b9^<b:C-TbNFCTEEQb9(TTTTb=bNEEEQb9(b9^<b:$FTM1b=NEbDt  FJPTVXZ\^| `dhlTVXZptx4|:\ PTVXZ*F <F  HF SF ^F  s   ",4 : H U a k v  }F  F  F FFFt   |   #+2: ?JQX `T # j:u{d   |   :# LV6 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s|   D$TVXZ                           D4 VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sf    FJPTVXZ\^`dhlptx|:   ",4 : H U a k v #+2: ?JQX `# ju{     (_```Ȱa$aȰb\bc|ddİe`efg$ghLhi<ijjxjkp t ԰hh!x$&$.@2368P:>,AlCDdGKİMPܰSUdYZ]`afjq8`ܰ0,@԰ Ȱ8(< ʴxԘ〰lPܰ4|  h\D԰  Ȱ!%&X&'(h*D, -/3ذ8AQR T|[_hd<mH}$}Ph pа| p0||DLD\Tt@h HDȰLx԰ LT|P ]Z VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sW!h$ذ)+H.3>?ABذDhE$GJ԰PVhVذ_`bilH0L`pDLŬ@ɐѠtՀXh┰〰tL8ذꔰh|а @ (t ,ܰL!p"D"t'()P*+,-t1|6$8;(APFLdRV\YlyzܰϰѰ°ްٰװа԰ְ̰{ҰݰưðxӰڰw  * < H S^ s }    $-038=CLT]ciou}     # *8?FLU ^iqy +4 ESbr    # 0 = K X d q }      -? R_ g t .>O`q w      ,:N`r      '9L U cq w     " 1 E U i o {       # 0 8 A L R Y a h q         3 H V h z        " . 6 D Q _ p {            ! & - 8 @ J U _ e n u    +6>AJOW]b k v         %*/4:?CHMU[afkrvz       #'048?djh G K L MMM,'MT:M\4Md.Ml M!NNN N, O4O<OP'Ox:O4O.O ORR S<TLT-T'T"TT TUU(V` YhYZ[\],^T_|`abcdDelfghi j4kTn nn'n0n,n=n7nInDn@Tn` opo npp q q @ r L r `s { ~ ~ $  H  !     ! ( 0 < \ h   '    0 T% \ l* 2 :     , L l x   Dh |  @ p    4<Lh)x":5?JC  $0 \3h( % ( `h,' $$4)L/\4l#(2, X!28<$L #)-26 dl 0@T$d+l $ +(lt 0@T$d+l% , P d   '(!0 P   $ \d   8"@H t   0 x  h ! !$!  ! ! "! " "  "H "  # #<#D#L#x# #-#%#:#5$ H$@$ $L $x$ $$ %% %(%0%x%%%% %  % % &  & !&\ #&$&$& $&%'%' %'\&'&' &''''' '( ((T)(p)()($)( )(*)*)*)8$*)@ *)t+)+)+)$+) +*,* ,*<,*X$,*` ,*-*.*.*.+$.+ .+T/+p/+/+$/+ /+0,1,81,H 1,|2,2, 2,3-3- 3 DJONOϽTOɓO2Oԯ;+O|OFO~?OAODOOO5_dO,JnO%OOOobMO&=_OO7#O²OO,1QOjOCOOM_Pagidݰ@YdOfc= Æbĺ,6LȐ-3ҕUVpOPy):R?X{ᩰX߰0O74 GOD)y[Űg ""+A0OްL n }&vOHr M 4,/6zmYOԥcà1#3_Ӽ&1nV)~)6b)X4`A_7F/t._(!yS'_K"9"hO'{!(@t)c#ԴO eҝF-`0D1M6 +8-;"O@hOFp L2Rذ#OӸYNg.԰?;(,>OxӰbҰ'O"~U@ {ziǰưEJ*°W5q_8װj>7zOeG,ɰװYEb0]WV/g@g[r6<90Tհ >0E+A,2//ܰ~Ұ!wΰ ۰ZOӰ K^zÏfffwѰLް)(04 ctP/_:2 c ]v T+^%aB!TFs(1W2tp.|'cbu%10 a9 6*1,.} Ex k^m8w5^}5e ys,,(,<&+[,T/sZ c_" !dFw6~"Igӄ;E 40`hDd4*#+(W)O @(} GEbv993 bhC pbfEl+u!CHIx0ڄ)cV &y&<$&-NAJ73K7u`*& ۄ(LeR ,\q+02x PC2gHN+8= Yq-,o\9L>r D#m ( 6i9 E d=  k ,Y ׌i u#d$v) Ӕ' L&j a  k Q  #` u k=N m t6} }u,,x _  Qr*(O= $ Ld = ,3 6[!{ . ) Zg d S ) /l8R c' 6 4! ' o1 V 2u 6rZ|w:.H ! ! xw2 3 @&&#_kwWTxgOw S= ^h ]R 00?1{$#/%q2,llq#x @0T Jm< P;+7F` 6,g,zze.-qx,Z.m?,(R,? Zh3Blyz,x:H?"e391"uid^*!( 2M62 '_h qL _@N> @sKpAL ǠI_e РޠAN0&-ΒE1 BuN 1U `{ !#A0y4#D:4#[X.1 *0#} %t V S/42'#U:I 4.V )b 78n J-?^"%e  P=0=U &K@owNt,&O m*g){//x@f W'V0,p=Q{7&$IV D7\TCA Bro:t9 4  (n1Dg/w! Z=(,|rwZz8`A'gy:0@^CP{Y p   Ro Z2MuxkQ -wCgivx(h|9+@vIX-T"`gf-@3C S#n aq>_ K݄el\6T+QБ<#f${0-XS6~kVR<Kۮ2EѦG5> ry7pŦ>\;͈OOyO鏻OgcO9O}㎩O؎Oם O QvOOO:wO-O>OegOz㙉OعO חO9OkOgOTOٕOܕa_@_{OOO%Oc8OjOeOOOȝOOoPO%@O$?OOZO4rO@OOͰ {OOjOOZ燾#ݶOO_Y5O3ힶOO4 O%_ΗO?OivOs yO-OOO_LRO%POw_OjQO!]CO<]O[O;YOݚWOSiF-"O܃?O(MOѨ$O,#O:Oܸ%~#pO"O=O͚OF\ O )OOOPOhbOOIOڭOv_OOO3O]O_ʳO7ʟO^ROۉOٰOٸOٮOOOKnOs9'HtOإGOxO⫱OO]OOOuOOSOR~OOǹwOOw"OUtOtO״8O\LOֳd$:OՕ;O%9Oz0ONj#Oǟ Ozp2nO"O>9OƆO O YO DOOOHOӡOOdlOaOҢO[ 4qa VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sn-L4-x4- 4-5-6.6.6.,7. >. A.B.B/( C/T E/ F/F00K08 K0pL0xL0$M0(M0,M0!M1M1M1HN1PN1pN1"N1N1 N1O1O1O2"O2 O2 O2L!P2h)P2pP2R2 Y2 Z3[3([3l\3 \3\3#\3(\3 [3]4< d4\ g4h4h4"h4h4h4 i5$j5 k5k5 m6 n6 n6Lo6d&o6p%o6xo6p6 w7 z78 {7@{7|7 |7&}7 }7}89}83}8(.}80}8L~8 88888 9 9@ 9p 9x 9 9 9::P::: :;;;4#;<;L(;`;;;<<, <4 <` <<<<)<.=8=3=$ =P ====)=.>8> 3> >(>t >>> >>? ? ?0?@?H?l ?????"??@( @P@\ @@@@@)@.A5A4@A<AXA AAB,B4 BtBB$BBBB C$ CXC` CC CCCD#D4/DLD`D DDDD"DE E0 E\EdE E EF, FhF FG G@Gp GG GHD Hd IL IXII IIJ4$JD(JT,J\!JdJlJJJJ"JJ K0K8KXKh"KpKx KKK L L(LHLPLX LLL M0)M<)Mp *M,M-N 9N<:NT:N;N!;N<O=O =OH>O?O!?O@PAP AP8$AP`BP CPDPFQ JQ`MQNQOQPQQRRR SR@TR`URVRWRLRLRYSYSZS S9TBT$T0T\TTTU$ ULU`U V V4Vd VV V WW0 WhW WW X(X8X@%XH!XX XX Y8YD Yt Y YYZ Z<ZP ZZZZZ [[0[\[p[[[[[\$\$&\<+\P-\X \\\\!\\&] ,] .]()]<3]H]\] ^^^$ ^0^h^^ ^^ __ _H _T _t _ _ _``(`T!`x ```aa0a<aX aab >b8 AbPAbhBbt BbEbEb Eb FcGc( Gc`IcIcIcKc KdMd MdTNdp(Nd.Nd+Nd3Nd9Nd6Nd NePe(Pe0&Pe8PeD Pet Qe TeVeVeXfX Zf| ]f]f ^fafaf ag bg, bg`dghdgtdgegeg egfh&fh fh(fh0fhl&hhhhhhjhjh jiki ki<)kiDkitmioiqjH wjhzjtzj{j{j{j|k |k|k0!|k8 |k\,|k}k}k}k!}k }l,}l(~lT~l`~lx!~l ~l,~llmm!m$ mH,mpmmmm m*nn@nLndnl n*nnnoo o4*o\oooo o*opp p({pLptp ppp pq q q rrT r`rlr r%r*r/rs sl,sx(sCs?ss st!t(&t@+tLtXt t%tt tu u0uXu!u(u/uuv v(%v@*vX/vdvvvw$w\wwxx<xtxxxy yyX"yp)y0y>yCyyz%z *z,zp"zAzFzz{#{({${P{&{-{4{{|| |P"|h'|t|| |},#}8}D}P}t}#}}}~~4~@~L~T~|~~~~~!@l$+27HH#`*x16G$'<.T5l:K &-04H9xJ  "$'0\ $+2,8 l"' 1$ H\ tw wwHxPx`xlxy yzz{{4|\|p |x|}}!}} Hp| K $  <Hx,8ht  ( Xd  ,  %4@` l  4 X   ! @dp  $8\#h 0+4@=d  P lx Xd  ( ,Dt $  (L$Xp   8lx   (< $ H$T&`l   0<P)Xh.  8&L)T|?B8 0HT -'1"HT dt-'1" ,"D+P|&)14<?4GHJ`  Tdl  HT `h  PX`'*1 4$;8>PEdHl   VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s~')068"@|$' - 0 < HP\x "  @ `l   4@L#h1|4;>@L`*l.x#8:*, %(34X! -17 8p|')/" <2D+`,.;=J6!LXx')/"+(-4&<l,x.;=J6!$T\),#!  H! d      <HT\ ,)(T,h/7:BEMP !D #d$$$$$ % %%%"%$%(%P'\'p' ( ((* ,4-\--- ./0d 23333 4H5T 5l5x55 666677,&78 7x89 ; >>$>0>8>\?h ?@@@@0@4@C@H AT AhACCC C DD$D0D8 D` El EEE)EE.EF F F4G I KK(KH LM M-M&M2M( ML N&O!O3O.OOP R<ST Sl)S2S;SST T#T+T0.TH6T\9TtATDTTUU"U+U5U(/U@>UTBUp VVVV"V,V&V0V9V(CV4=VDGV`WxWWW%W)W2W<W6WX(X@XX(Xd"X|1X”;X 5X¸YY!Y+Y%YU$ZX \t]À ]ø"^-^(^#_._)_$]8`l bĈcĴ ddd eee<fH f\fhfŐgŜ gŬgŸgh hh hi` D"P xǐ "8 h tȘ"Ȥȼ ( L` Ʉɘɤ   0T` tʜʰ  , @H| ˜ˤ˴˼(#L-`1h̰̔#(&-$+D8X<`tͰ  4`|ΘΤΰ%*(1 6,884T>lCxAόHϘFϴ   0H!Tp(Ќ-И/Ф+м462<A?(F4D<| шѤ Ѱ)Ѽ24/;=8$T ` lҠҬ" 0<D p|ӐӸ"%0,<.P1h6t8ԀԔ   \Մդլ (0pֈ֔֨ ִ$)+' 35$0,\ht הנ׬.7 < F,T`l؄ج.ظ7<F 0<Hlٜ٨ٴ  $0<Tx(ڄ1ڐ ( \ hۄ ې)ۜ۴24/;=84 @ L܀܌ܠܰ" $ T` tݜݸ!& ($42@4T7l<x>ބް "(4-@/L+d9߀>ߌ@ߘ<ߴFKMIV XT4 P\h$&"05(743L<X>d:DIKGTVR4H `%t(/149; $P \h| \   (     $' L X d |      , 8Th    L X&  ,8L t  8D lx H+T)\&d!lx &/ #8L '++t". .// /008 1D1h"1t11 2 33"3343X 466 67 788 8@9T9` 9; ;;<=$ ?P B\ BpBxB CCCCCD0DDD\"Dp%D+D/DDEEEE0$E<"ET+Eh.E4E8EEF HK K4KXLdLxLMMMM$M)M$+M0'ML1Md6Mp4M;M9MBMGMIMEMN N N4NPN\NhN N"NN(N-N+N2N0N9N0>N<@NH<N`ENlGNxCNM OO O)OO2O$4O0/OH;OT=O`8OhO P PPQQQQ("Q4Q< QtSS STTTUU,UD$UX'Up,U|.U4U6U9UUV X@ [L[X[d[\\\ \$]L]l]t]^^^"^^&^ +^,-^8)^P5^\7^h2^p^__ _````0.`<7`P<`dF`p`bbb 0] VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s%rb.b7b<b$Fb0bX ctcccdee eh< iHihjtjjj(j1jj kkk0ll n qq q)qq2q4q/q(;q4=q@8qHqx r rrssss"ss sTu`uh uv vvwww$ w0wH*w\-wt2w4w:w<w?wwxx, x8"xDx\,xx1x3x/x9x>x@x<xIxKxGx(QxDVxPXx\Txt yyyyy"y$y y)y+y('yD1y`6yl8yx4yAyCy?yIyNyPyLyUyWy(Sy0x\zxz z'z*z/z1z7z9z<z$zH{T {h{x}    X    (     ' H T ` x        (  4 P d         H  T   &    ( 4 H  p |      0 Xd|  D+P)X&`!ht &/#4H  DT %.$@<-`  '$| ,@    H%T|60 < `, Xd  %60<t \ R U U U U V V$ V, VT Wl W X X X Y Y$ Z0 Z< ZT Z; Z, Z Z [ \  \ \( \H( \h/ \2 \5 \+ \ ] ]( ^H _T _` _x _2 _ _ ` b b bH cT c` ch c| e g h h h" h0( h< ht i' i" i j j j k ( m H n d n p n & n / n  n  n  o q! r!$ r!D r!p s!| s! s! s! t! t! u"H }"p "| " " " " #(% #4 #\6 #h0 #! # # $  $ $< $ $ $ $ $ $ % % %D %x % % % & &@ &T & & & & '( 'L ' ' ' ' (  (4 ( ( ( ( )  ) )L, )X )| ) ) ) * *t * * * * * +(, +4 +X + + + + ,P ,l , , , , -, - -4 - - - - ., .H .p .| . . ., . / /` /l / / 0 0 0 0 0 0 1 18% 1D 1l6 1x0 1 1 1 1 2 2( 2L 2` 2l 2 2 2 2 2 2 3 3( 3< 3d 3 3 3 4 40 4< 4P 4t 4 4 4 4 4 5! 5 5$' 5@- 5L/ 5d5 5p 5 5 5( 51 5% 6: 6< 6(7 6@C 6LE 6X@ 6` 6l 6 6 6 6 6 7 7 7 7D 7p 7| 7 7 7 7 8" 8% 80, 8<. 8P1 8l6 8x8 8; 8 8 8 9 9$ 90 9< 9t 9 9 9 : : :$ :<# :H! :P :l* :x, :5 :7 :3 :' : : : ; ; ; ;  ;\% ;h' ;0 ;2 ;. ;9 ;= ;; ;6 ; ; < <" <8  > >( >H >T >` >x >. >7 >< >F > ? ? ?  ?8 ?`. ?l7 ?< ?F ? ? ? ? @ @& @ @@ @p @| @ @ @ @ @ A A A<+ AH4 AT A A A A A B BT B` B|( B1 B% B: B< B7 BC BE B@ B C C8 CD CP C C C C C C D D D, D\ Dh Dt D+ D- D' D D E E4 E@ EL E E E E E E F! F($ FD+ Fd2 Ft5 F| F F F F$ G' G- G00 GH6 G\9 Gx G G G G G G# H& H , H4/ H< H` H| H H% H( H+ H2 I 9 I< I$ I\ Il I| I I I I! J$ J( J0/ JP5 J`9 Jh J J J J$ J' K+ K K0 KP Kd Kt K K K K K K L L $ L4' LD* Ld0 Lx3 L6 L9 L L L L M % M ( M<0 M\6 Ml: Mt M M M M N! N$$ N@+ N\1 Nd N N N N$ N' O O O8 OL O\ Ol O O O O O O P# P& P8, PL/ P\2 Pl5 Pt P !P !P !P% !P( !Q0 !Q,6 !Q4 !Q` #Ql #Q #Q $Q &Q 'R (RL *R| ,R ,R( ,R ,R -R -S -S(, -SX .Sd .Sp .S|, .S /S /S /S /S /S /T 0T, 0T8 0TT 1Th 2T 4T 6T 6U 6U 6U0 7Ud 8Up 8U 8U 8U& 8U 9V  :V :V, :VT ;V` ;V ;V ;V ;V ;V ;V ;V <W <W <W0 <W8 <W` =Wl =W =W >W >W >W >X! >X# >X(& >X0 >XT ?X` ?X ?X ?X< @X) @X' @Y 3 @Y1 @Y @YLH @YXE @Y` @Yl ?Y AY AY AY ?Y BY BZ, BZH BZT! BZ` BZp% BZx BZ BZ BZ CZ C[ C[# C[0+ C[<4 C[H( C[P C[l C[| E[ K\X O\d O\ R\ R\ S\ S]% S] S]D6 S]P0 S] U] V] V] V] W^ W^$ X^8 X^D X^h Y^| Y^ Y^ Z^ Z^ Z^ [_( [_P \_d ]_ __ b_ b_ b` c` c`$ c`P d`l d s VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s` d`" d`' d`) d`% d`/ d`5 da7 da daT ea` ea| ea) ea ea2 ea4 ea/ ea; ea= ea8 ea eb, fb8 fbD fbt gb gb gb gb gb ic jc  jc  jcH kcd kcx kc$ kc' kc, kc. kc1 kc6 kd8 kd; kd$ kd8 ld nd qd qd qd qe re, reL reT re se se se# se! se se* sf, sf$5 sf07 sf<3 sfD' sfP tfp tf| tf" tf tf tf sf uf ug ug ! ug, ug8( ugP, ug\* ugd% ug2 ug4 ug7 ug ug sh vh, vhL vhT vh wh wh$ wh! wh' wi2 wi4 wi. wi$* wi<= wiH? wiT: wip wi xi xi xi yi yi yj yj0. yj<7 yjP< yjdF yjp yj {j {j {j {j. {j7 {k< {k$F {k0 {k` |kl |kx |k |k& |k |k }l ~l  ~l ~lL lX lx l l l l+ l4 l m m m( m0 mD m m m n ( n1 n$% n<: nH< nT7 nlC nxE n@ n n n n n o o o0 o@ oH op o o o o o p p4+ p@- pL' p| p p p p p q q, q4 q\ qx q q" q% q, q/ r5 r  r8 rT rh r$ r' r- r0 r7 r: s s s4 sH sX sp s# s* s- s0 s s t t$ t4# tL) t`, t3 t6 t< t t t u  u4 uT uh ux u& u) u/ u3 u9 u v$ vD vX vh" v( v+ v v v v w w w0 wD wT wp w w w$ w' w* w- x2 x5 x(8 x0 xT xp x x' x* x0 x4 x: y y0 yX yt y y" y% y+ y1 y z  z< zP zh$ z|' z z z z z z { {( {D {X {h { {# {& {) {. {1 {4 | |( |D |X |p' |* |0 |6 | | | } }  }\ } } } ~ ~8 ~D( ~P ~ ~ ~ ~, ~ ~  , < H T p |       @ h t      0 < T& t       0 < H X `         D P p | ! # &     ( H< |) ' 3 1  H E   ( 4 H P x    !  %    4 \ h  # + 4 (    T    0 D P t        8 L      < P d     4 T h |     H T %  6 0   0 < `       8 p. x    (& 0 T      ( @ d       , X  , )    L     $ < L X         ( L p | "   ! !L "X " #8% &@" &` %l %% ' ' ' *$ *8 *\ +h + + , . . ., /@ /h 0t 0 0 1 1 1 3 4l 9 < < = =% = =D6 =P0 = @ A A A B  BH C\ DH Fp K L L. L L( MT N| N& N N O  P, PD Ph Q R R R S U( UL V\ V W W X X( X, Yd Z Z [ \  \ \4 \ ] ] ] ] ^ ^0 ^p _x _ _ _ ` ` `" `  `T b` b c c d g g f f # h hP h| k k k l l l  mL oX ol o p p q q q r r4 rX tl u H T     %   46 @0      ( L( X# p       P \ d | 4 /    ( L `       4 \     #( '4 'T 'x ' ' ) ) ) ) )$ *0 *D *l +x + + , , ," , , ,,0 ,H= ,dI ,pC ,x , - - - . .  . .4+ .P8 .pD .|? .1 . / / / / / 0 0@' 0X" 0p; 0|6 0 0 9 9* 94 9% 9 90 << <D <P <x ? ? ? ?" ?$ ?6 ?8 ?D ?$/ ?, ?4 ?\ Eh E E* E E. E E F F  F< FH! FT Fd/ Fl F G G G, G G H H< HP Hl+ H& H H H J J J K K  KH Ld Lx M T W W W X( X4 X< X` Y Z [ \ \ ]< b\ d| d( d* d# d- d5 d e e" e0% e8 eL. eX dl f k l l" l* l, l(% l0 l\ mt m m n o v y, y8 yD yt z z z   ! ) , 83 P; d>   ' / * 2   ( @! L \$ x+ 3 ; 6 >      , x         , T< `> l1 x J       (  + <1 T9 h< ˆ œ % - ( 0  , D P `# |) Ø1 ð9 ü4 <      H T h x Ĭ     ` VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s   ) ,+ 8" @ d x Ŭ      @ L l) x+ ƌ7 Ɣ" Ɯ     , @ t ǐ Ǽ  ! #   $, @4 L6 X/ ` Ȕ Ƞ ȼ     <( H* T# \ Ɍ ɘ ɴ ) + 3 5 .  < X t& ʀ( ʔ+ ʜ    ( * $# , \ h ˄ ˠ) ˬ+ 3 5 .    ( D& P( d+ l ̘ ̸ $ &  . 0 ) 4D HG ` ̈́ ͐ ͬ' ͸) " 7  @ C  4 H ά    "   , P X d ό Ϙ ϴ    , L T | Д    ! $, 0. P l& ш. є0 Ѡ) Ѩ Ѱ Ѽ9 %      ,! 4 X, `* Ҁ Ҍ Ҡ   , T t | Ӱ Ӽ + 3 ;  = ,6 4- <$ H | Ԉ Ԕ Ը    % ' $ H t Հ Ռ ո     $ < ` ֘' ֬+  D0 L) ה ׼)  () T t) ؜ ؼ    % ,' D0 dE p+ ٨  % ' 0 E (+ p ڐ $    < H h t ې( ۜ* ۨ! ۰ ,@܄  ܰ ܼ @L`$ht,ݜݨ "$/$DXތ ި $LX lߔߠ "$ /<P #& ''4 (d )*%**** * +,+8+D+-- - . /</H/\)/d/0 012< 7\:;; ;9;C;H; 4;,';\<p= C EE L(LP$L\&Lx.L0L)LLL5L@L:LMM M,MD%Mt O OOOOP R RD$RP&R\Rl2RS"S$S.S7RRT T T,T4T\Uh U*U4U%UUV VV(W<Xx ] ^ ^^^^ _(_L$_X&_d_/_+_`"`$`'`8__$ a0 aPa\ax,a.a%aa dd$d&d d</d\+dte"e$e'e8dd f f ff4,f@.fL%fTfdh m n nnnn$oP p\ p|-p7p(ppqttt4uTu|'u)u3u"uv%v'v1v7uu0w<w\0wt:w+wwxxx y{T   $8D`+|8D?1  <H h*4% "$$D6P8dDl/t| $,8+X d x$0D D   , \%h60" 0H  4/ @ Lp"|  "$<`    DXd  ,@t    4H  " 4T\    $0D"P&\(T`l(#   0 L T #$8\"$`t   $" 0 X!t!" ""#4 *..2 2(34 3d%3p36303 "5  5 86 P6 7 7 7 7 47 /7  8 H 9 T9 x"9 9 9 : ; ; "; ,; D; h < ? ? ? @ @ A ( A LB `B l B C C C D D 4E HF | H I I I J J J L( L<LPM T WWW"W$XLXlXt XYY YZZZ,[8[D[x^^^___ a<cHcT cxdd"d&ddee0e8e`flfxf+f&fg!g*gg h,hPjtkllppp p8#p\qrtt"tt(udyx{ }  $0X dp!8L ,8 lx  %6$0$  % 4 `x  0< `   ,<`|  $"0Xt X |   8 d %(- 0 5 <: L= lB |E J   (!"! !0!< !P!d! ! !" ""D"P"x" ""# #$%#4(#T-#d0#5#:#=#B#E#J$$0$d7$p1$x $$ $$%8 %%%% && &P%&\&6&0&"& '$'<'t' ' ''4'/( (,(@(L (p( ((( ()) )0)<  ` VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s/)P)x)))* *<*X*t!*#**/*7*9*2* + +$+0 +D+ + ++ , , ,4%,L/,X ,d,l ,,, ,-- -D -P-x-- -- --."..0 .<  .` .t ." .% . . . /P/\/ / /008 0D0h"0t00 0 01"1141X  1 !1!1"!1!1!2 "20 #2<#2`"#2l#2#2 $2%2%2 %3&3( &3L'3`'3l '3)3*4 ,4$/40/4\04h041414242435035<35L35+35235/35=35835&36 46 46, 46<46`"46t%46|4646446.46847C47 >47+478 57D37L 37p67676767+68 268/684=68@868H&687878 7878"78%7878798479D.79T879tC79>79+79 8969 699:9:$9:49:h+9:29:/9:=9:89:&9::;:; :;$:;H":;\%:;d:;l:;;; ;;;;;;;;;< *;<,9<4 9 >>, >><>>\>>h>>p>>*>><> <>?> A? C?$C?<%C?T/C?l9C?x C?D? p@0t@<t@p w@x@x@ x@y@yAzA, zAP{Ad{Ap {A|A |A|A}A~B, BL BXBx BB BBC C0 C<CT#C`C C CC CD D D D@ DLDTDdD DD DDEE E E\ E EE$EE/E*F FF(F@F`4FlF F FF FGG,GTGtG| GGG HH H HHI I(I< I`ItI II IIJ J J0JDJPJxJJJK, KP K\KhKt"KK KKK&L!L.L@LLLpL| LL LLMM(M4 Md MMM%M(N+N NTN`NtN#NNNN'N+N NO,O4O@O\ Oh OOOOOOP"P(3P4PXPd PP QQ<QLQt$QQ Q Q RR(R4 RdRpR| RR RRS"SS<SHStSSST T,T8T`Tl TTT TTUU(U4U@UXUx1UU U  U  U V V  V  V, VP VdV VVW W"W "W#W #X,%#X8#X`6#Xl0#X%X%X&X&Y'Y 'YT(Y\(Y)Y )Y*Y*Z,Z4 -ZL-Zl .Z/Z/Z0Z 0[1[D 2[t3[|3[)3[3[ 4\6\6\7\7\ 7]8]$8], 8]t 9]9] 9]":^(:^ %:^:^D=^l>^@^@^A_B_8 h_X j_dj_xj_ k_k_k_k_ l_l` m`X r`u`)u` u`v`v`va wa,wa@walyax ya9yayazbh b%bbbc cc@ cXcd ccc'd dd4dldd$dddd e%e4e@eLeX e|%eeee e$f f4! f< fX, f`% fh ft f f  g g( g< gL$ gT  gtghx h h $h %i%i%i@&iH &ip'i(i -j 0j40jT1jx2j 2j4j4j 5k 6k6kX7kd7kp 7k8k8k8k 8k 5l!:l$:l0:lD;m( mL mdmGm;m0m#mm nn n8nDnPntnn nnnnno o(o@oL opo o oo2o/p p8ph0pp/p;p+p pq 4q3q0Aq</qh qq0q/q;q+r r,rP0r\-rrrrrs$ sss st /t(.t0tl t|t5t4t!u uuX/u`.uhuuv )v#v vXv|(v v"vww8 wh ww w wx,x8 xxx x x"xyy< yDy(y"y9yzz zH zz zz.z"z{\-{|{{{${({| |L |\|d|||,|5|)|$|}$ }`}p }x}}~~0~d~l ~ ~~,h     2 /     D  hp .0042H4 U VVWW W8XD XZZZ[+[$"[4=[DA[L[\\] o, pDpqqq qr rtLuhuu#u uvw4 |X }p}~~~ ~ L!`+h@J6 $H\ 4< T| &  4< T|   LX t . HT / DP l .@L / 0X%p (0PX`   $",\  , p|  34 Xl  $|% % ,@ dt 4\p!x# 0 <)  < d   +6M VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1s>@L  NQQH S`ST TU UWWW8X\XhXZZ [[![01[D[P[\\]^__D*_X:_`-``ab < HT\hx'Hht |   ,Tl,LXH(0@t |   P\h  ,L/d.p @L\  <% H h     (H l #& &<'H 'd!' (!( (((),*D#*L*x,,- .!'12d DG GH H!H I0!I< IHITIJK(K'KK,M8MlOOPP,Q`QRRS SLTTUU V@VlWWXX,Y`YZZ[[D \P\p]]\^+__[,aLaxdde g!H0k< kllm w x</xL6xT$xxyz | ~~H h#t"/  0$<#H`0h ~  8"D!Ph.p  " !0.8\ t|&% (T h'&!3 @`%l$x1  %,$8P1X|   X t    T/+'  $2,-8 \ 2¬/´,¼'  4HÜ ! \ltĘĬ / $ DP%pŔŨ 8\hƀƠƨ X`xǬǸ *$(<p ȨȰ 8*D$x Ɍ! $% &&<(&H"&T&|'ʔ'ʼ ())()")()T +˄+ˬ , -./T ̬!̸ $0 Th ͌͘ ͬ< t΀ΌΔ    $H)\1l'ϘϤ/15D\dДМи#0)= 8P \ рќ   DX |Ҩ0 L XtӬ$Ӹ(  H \pԤ (4Xl| !$X |֐֜   @Tר  (d&p$؈/ؐ,بBشF  4 H\h ٘*٨"ٴ   H"Txڤ4 T`p ۘۤ۴ <H\&h#܄1ܜ<ܨ8 ,\݀݌ݤ!ݴ 0<DL t ހޜ޼&$ P ߨ!ߴ   , Pd     !" $< %H %P%d& ( )))* *D+p ,|,- /00 0(%101\ 2h2|3 5888 8P9\9p: ^ !bbL gphh hi ij j j4kHl o pppqq q0rDrhs| stttttt u4v   #(%H5X0   $4@ dt   ,8X | &,2@LT t"h  4P \ x |     ,\ht 4 dl ,(% ,Td t   @Hx  ,(% X p $ 4PXd $'4,P4Xx   0Hh'x,4    D!P!""% %% &%#% %(%X9%`3%& &&&&#&&&09&83&`'l ''( -$ 000d1p1x 1!1312 2, 383l4x4 44145 547P7d8 =AAB(BLCdCp CxCDD DDE E E8FD FX FG G GH H H I$I`JlJxJ J&J J K K L(L@LLLdLpLLLMMNNN< PH PdPxR WZZ(Z4 ZX[d[[[] c(f4f< f` gl gg hi 0dpx $\/h1t+5 $#Dx "H h , 8! c VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1szkM D \ / 1 + 5    < H  \# |    "   ( < p             0 P  |  " * - 4 7   $ , - - - - .D/\/d/F0>0K0 0 114 1X 2 33 3 4 5,5D 5h 6 77 7 8 9 9\9p: JKK K,KX LMMM N O(O@ Od P QQ Q R S8SP St T UU U V X, XhX|Y noo o,oX pqqq0q(q5qqr@rXrp1r|)r6rrs s t<uH uT uvv!v vvw< dp  (l  #4.@)` )#30:87PChMtG|=  ( Ldl     !! !"8 2X3p 3)323;334 UVD bHc m ppq q 8r d)r p#r x r r r s $s .s!(s! s!s!$ s!Xu!lv! {!'|"8|"|",|"@}"l "p" ### #$$$8$d$l$$$$%%%4%<%h%p%%%%&& &8&@&l&t&&&&'''<'D'p'x'''''( (@(l((( ( ) )8 )L) ) ) )))*,*4*\'*d%*p*** * +  +H +T +l +t +,+6+ +, .,0,L 2,l3,3,3,"3,(3, 3- 4- 4- 4-<4-H4-\$4-p5- 7-8-8-8. "8.$(8.0 8.\ 9.t 9.:.:.:.":.&:/,:/03:/<0:/L7:/h=:/D:/A:/H:/;/;/ ;/;0;0;00#;0D';0`-;0x4;01;08;0:0 <0 <1 =1 =1(=1D=1P=1d$=1x>1 A1D1D2 D2@E2XE2dE2pE2F2F2 F2G3G3 G3TH3\H3I3I3I3 I3J3J4J4 J40L4\L4hL4 L4M4M4M4 M5$O50O5PO5dO5tO5|O5P5P5P5P5P6P6P6 Q6T S6tT6T6T6"T6(T6 T7 U7(U7DU7PU7\U7t#U7(U7*U7&U7 U7 V7V8 V80 W8< W8HW8dW8pW8$W8X8 Z8[9[9 [94&[9L,[9X[9 \9 \9 ]9]:]: ]:]:0#]:L(]:X*]:d&]:l ]: ^:^: ^: _; _;`;p c;f;f; f;g;g;g<,h+l>(l> l><n>hn>tn> n>o>o>o? o?0q?<q?pq?|q?q?q?q?r?r?r@r@r@$r@,r@Tt@`t@t@t@ t@u@u@uA uAuA$uA4uA< uALvA xA {A {A{B{B${B0{B`*{Bl,{Bx&{B |B|B|B|C ~C( ~CTCtC"CCCDD( D8#DT)Dp/Dx D DDDE$E&E "E( ET ElEx E E EEEE$FFl F F FFFFG$*G0,G<&Gh GtGGG G HH<HLHl"H|%H+H.H1H7H:I=I$ I4 IXIhIxII!I$I*I-IJ J8 JdJJ"JJ K KK$KH$KT&K`"Kh K KK K K LLL(L<$LPL LLL MM M4MhMM MMM NN NHNTNpNx NNNNNO#O,-O8/OD+OL(OT OxOOO OPP(PD PlPxPPPPPPQQ,Q@QPQ`QhQQQQQ RR R,RHRTR`RpRx RR R SS0S<Sh"StSSSS'S$T .T$5T0 T\ TTT%T"T,T3T U U@ULUl$Ux!U U UU U VV$V0VD#VXV V VWW W8"WDWl WWW%W"W,W3X X, XPX\X|$X!X X XX Y YY4Y@YT#YhY YY ZZ Z< ZPZ Z ZZ[[ [L[X[|[ [[[\ \D\P\t\ \\\ ]]]8]` ]]] ]]]^$ ^P^\^| ^^^^ __ _@ _L_`__mainButton_RecDL_recDL_stateEvMux_RecVdialog_frame_recVslider_recVarrow_recVthumb_recVscrollbar_frame_recVstd_textVtext_recVbutton_recVcheckbox_recVline_recVradio_entry_recVradio_frame_recVcoupler_recVrange_coupler_recVstdVstd_couplerVstd_dialogVstd_drawVstd_scrollbarVstd_poscxcycellarcsballscheshiredeftestfontvarsgammalinestlinepattspretzelrainbowrectsringssimpleslicesspiralstarstdfontsstdpatswhaledltestdlogbuttonbuttonrowbuttonlabelFill_ButtonExec_Buttondid_listdsetupdpopupDL_crackDL_objEvMux_WindowssensorevcharevmuxevhandleontargetquitsensorarglessVdialogopen_dialog_Vdialogclose_dialog_Vdialogswitch_focus_Vdialoginsert_Vdialogregister_Vdialogunregister_Vdialogpad_and_send_Vdialogoutline_Vdialogformat_Vdialoginit_VdialogVvslideroutline_Vvsliderdraw_Vvsliderevent_Vvsliderupdate_Vvsliderset_value_Vvslidercouplerset_Vvsliderinit_VvsliderVhslideroutline_Vhsliderdraw_Vhsliderevent_Vhsliderupdate_Vhsliderset_value_Vhslidercouplerset_Vhsliderinit_VhsliderVmake_sliderVvert_sliderVhoriz_sliderevent_Varrow" # VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sށ\draw_Varrowpress_Varrowinit_VarrowVmake_arrowVup_arrowVdown_arrowVleft_arrowVright_arrowinit_Vdown_arrowinit_Vup_arrowinit_Vright_arrowinit_Vleft_arrowVvthumbdraw_Vvthumbevent_Vvthumbupdate_Vvthumbset_value_Vvthumbcouplerset_Vvthumbinit_VvthumbVhthumbdraw_Vhthumbevent_Vhthumbupdate_Vhthumbset_value_Vhthumbcouplerset_Vhthumbinit_VhthumbVscrollbar_framecouplerset_Vhscrollbarset_value_Vhscrollbarcouplerset_Vvscrollbarset_value_VvscrollbarVvert_scrollbarVmake_vscrollbarVhoriz_scrollbarVmake_hscrollbarVtextinit_Vtextdraw_Vtextoutline_Vtextdraw_prompt_Vtexterase_cursor_Vtextdraw_cursor_Vtextunblock_Vtextblock_Vtextdraw_data_Vtextevent_Vtextmove_cursor_Vtextdelete_line_Vtextget_pos_Vtextget_pixel_pos_Vtextinsert_char_Vtextchange_data_Vtextdelete_left_Vtextcouplerset_Vtextset_value_VtextVbuttondraw_Vbuttoncouplerset_Vbuttonevent_Vbuttoninit_VbuttonVtoggledraw_Vtoggleevent_Vtoggleset_value_VtoggleVcheckboxdraw_on_Vcheckboxdraw_off_VcheckboxVmessagedraw_Vmessageinit_VmessageVlineresize_Vlinedraw_VlineVradio_entryinit_Vradio_entrydraw_Vradio_entrycouplerset_Vradio_entryevent_Vradio_entryVradio_frameevent_Vradio_frameset_value_Vradio_frameVradio_buttonsVvert_radio_buttonsinit_format_Vrbformat_Vradio_frameShadeRandomColordialog_buttondialog_valueDialogNoticedialog_cbCenterStringClearOutlineTranslateZoomCaptureScratchCanvaswdw_debugWindowwdw_defaultswdw_peekoptwdw_optionswdw_registerwdw_regwdw_openwdw_attribWOpenWWriteWWritesWDelayVcouplercall_clients_Vcouplerset_Vcoupleradd_client_Vcouplerinit_VcouplerVrange_couplerset_Vrange_couplerinit_Vrange_couplerVbool_couplereval_Vbool_couplerset_Vbool_couplerunset_Vbool_couplertoggle_Vbool_couplerVmenu_couplerset_Vmenu_coupleradd_clients_Vinitinit_Vframedraw_Vframeresize_Vframeset_abs_Vframeremove_Vframeinsert_Vframeevent_Vframelookup_VframeVmin_frame_widthVmin_frame_heightVEraseVInsertVRegisterVOpenDialogVFormatinrange_Vpaneresize_Vpaneoutline_Vpanecouplerset_Vpaneinit_VpaneVnorm2devVnormPlotVrecsetVcoupler_recsetV_TEXT_PADV_NO_RB_FOCUSV_DRAGGINGV_FAILV_2DV_CHECKV_CIRCLEV_XBOXV_2D_NOV_CHECK_NOV_CIRCLE_NOV_XBOX_NOV_CANCELV_OKV_NEXTV_PREVIOUSV_ARROWV_COUPLERV_DUMMY_IDnull_procVInitVget_uid_VbombVinsert_checkVwin_checkinit_xboxdraw_off_xboxdraw_on_xboxinit_twoDdraw_off_twoDdraw_on_twoDinit_checkdraw_off_checkdraw_on_checkinit_circledraw_off_circledraw_on_circleVset_styleWAttribFgDrawLineexitintegerCloneClipUncoupleDrawCircleDrawImageNewColorFillRectangleFillArcFillPolygonColorGotoRCDrawArcGotoXYFontDrawRectangleDrawCurvecossinDrawStringEraseAreaDrawPointmapBggetputEventtypepullstopsorttablelisttabuptomovenumericwriteimagecsetpushdeletepopanyPendingopenCopyAreafindDrawSegmentrealTextWidthcopydelayprocabswritesstringColorValuemanyPaletteKeygetenvPatternPaletteCharsPaletteColorrunerrPixelsetWDefaultposkeymemberWFlushwinlabelargxywhfbvartypstynumlblcbketcdialogevpadxpadyawahtemplookupdrawcallbackidaxayuidFPVdiscontdatapadSsDdrawnstylerevincoppntswin_sztot_szthumbdraw_cursorerase_cursordraw_dataunblockblockDataPixelSizeMaxPixelSizeNumericDataCursorPosDataLengthOldCursorPosCursorOntatbcwinrwindxdyMaxCharsmaskTsizecwx1y1x2y2ax1ay1ax2ay2doncvvaluecallersclientscurr_idold_idallowedlockedminmaxinceventoutlineresizeinrangeinitcouplersetinsertremoveset_absset_valueadd_clientunsettoggleevalopen_dialogregisterformatunregisterentriesfocustext_entriestext_ludraw_offdraw_onspaceCSCPbasexbaseypickspswtwthwscv_rangeoldposframeargssize=300,300size=,width=depth45000,45000,65000#000QuitDdgpxtest.icnstdwindx=dy=rad16,g16, FFFFB98788AEFFFFFFD865554446AFFF FD856886544339FF E8579BA9643323AFA569DECA7433215E 7569CDB86433211A 5579AA96432221084456776533221007 4444443332210007 4333333222100008533322221100000A 822222111000003D D41111100000019FFA200000000018EF FFA4000000028EFF FFFD9532248BFFFFfaceeyesgrinigwhiteblackgraylinewidth=2this test requires mutable colorsdrawop=reverseheight=drawop=copy Fonts... mono,12AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzno mono 12serif,italicno SF italsans,bold,18no SN B 18fixedno fixed!leadinggamma=fheightlinewidth=jlinewidth=4linewidth=1fillstyle=masked8,#01552B552B552BFF8,#020E070420E070408,31,14,68,224,241,224,68,148,#2020FF020202FF204,#5A5A8,#0ABBA0BE82BAAAEA8,#E3773E383E77E3838,#4545C71154547C118,#FF7F3F1F0F070301pattern=linewidth=3clmoderate blue-cyanfillstyle=solidpinkpale orangelight yellowpale greenvery light bluelight bluish violet pale violetfg=blacklinewidth=5fg=whitehello, worldlinestyle=dashedlinestyle=stripedndaovmonono mono!typewriterno typewriter!sansno sans!serifno serif!fillstyle=texturedverydarkdarkgraylightgrayverylightverticaldiagonalhorizontalgridtrellischeckersgrainsscaleswavesmoderate greenish cyan32,c1,~~~~~~~~~~~~000~~~~~~00~~~~~~~00~~~~~~~~~~~0JJJ00~~~~0J00~~~00J0~~~~~~~000000JJJJ0~~~0J0J000J0J0~~~~~000iiiii000JJ0~~0JJJ0J0JJi0~~~~06660ii000ii00J0~~00JJJJJ00~~~~066000i06600iii00~~~~0iii0~~~~~0066000i06000iiii0~~~~~0i0~~~~~~0i0000iii000iiiiii0~~~~0i0~~~~~0iiiiiiiiiiiiiiiiiii0~~0ii0~~~~~00000iii0000iiiiiiiii00iiii0~~~0AAAAA000AAAA00iiiiiiiiiiiii0~~~0AAAAAAAAAAAAAA0iiiiiiiiiiii0~~~~0000AAAAA0000AA0iiiiiiiiiiii0~~~06060000060600AA0iiiiiiiiiii0~~~060606060606000A0iiiii00iiii0~~~~0~006060000000AA0iiiiiJ0iii0~~~~~~~~00000000000A0iiii0JJ0ii0~~~~~~~~00000000000A0iiiiJ0J0ii0~~~~~0~~00000000000A0iii0JJ00i0~~~~~060000000000000A0i0JJ0JJ0i0~~~~~06060600000600AA0ii0JJ00ii0~~~~00006060606060AA0iiii000ii0~~~~0AAA0000060600AAA0iiiiiiiii0~~~~0AAAAAAAA000AAAA0iiiiiiiiii0~~~~~000AAAAAAAAAAA0iiiiiiiiii0~~~~~~~0i0000AAAAA00iiiiiiiiiii0~~~~~~~0iiiii00000iiiiiiiiiiii0~~~~~~~~~0iiiiiiiiiiiiiiiiiiii0~~~~~~~~~~~0iiiiiiiiiiiiiiiii00~~~~~~~~~~~~~00iiiiiiiiiiiii00~~~~~~~~~~~~~~~~~000iiiiiii000~~~~~~~~~~~~~~~~~~~~~~0000000~~~~~~~~~~~~~~~CancelThe button was not left dark.xboxThe checkbox was not checked.sliderThe slider was not set.texticonThe text did not say `Icon'All values were correct.deftbldstatedlog:Sizer::1:0,0,370,220:button:Button:regular:1:291,21,56,21:buttoncancel:Button:regular::198,180,100,30:Cancellabel1:Label:::20,25,252,13:Click this button and leave it dark:label2:Label:::20,55,105,13:Check this box:label3:Label:::20,85,238,13:Move this slider to the far right:rule:Line:solid:1:20,157,350,157:slider:Slider:h::273,86,76,12:0.0,1.0,0.5text:Text::6:20,115,214,17:Enter the word `Icon': \=herevalidate:Button:regular::75,180,100,30:Validatexbox:Button:xbox:1:131,54,16,16:hlisteuwlistobjwspecalistwindowdsetup: bad specdftblinit_list:gclohiivLabelMessageLinelinestyle=RectCheckButtonregularregularnocheckchecknocirclecirclenoxboxno1ChoiceSliderScrollbarhSlidervSliderhScrollbarvScrollbarTextMenudsetup: unrecognized object: evlistwidthheightinvalid event specification: tno events registered for windowwaitqQparamsselfprocsVdialog()Invalid padx parameter to Vdialog().Invalid pady parameter to Vdialog().valuesdef_strWHnewfocustidrvnowvalentrydefselvdialogcanvas=hidden vidgetIncomplete or &null parameters to VInsert() for dialogs.Incomplete or &null parameters to VRegister().kidnewMust VRegister() or VInsert() a vidget to a dialog with absolute coordinates.id field of a vidget within a dialog mu# ?V VMS.BCK[V9.TESTS.GRAPHICS]GPXTEST.;1sCkst be a string or numeric.Vvert_slider()Invalid width parameter to Vvert_slider().Invalid length parameter to Vvert_slider().exewcallerprocedure Vvslider requires a coupler variable callbackVhoriz_slider()Invalid width parameter to Vhoriz_slider().Invalid length parameter to Vhoriz_slider().eyehVhslider requires a coupler variable callbackslider_typelengthdiscontinuousslcbNon-numeric min, max, or init parameter passed to Vxxxxx_slider().insprevreverse=onreverse=offmust specify a size for a Varrowinit_proc-+offsetopmust specify width and height for VvthumbVvthumb requires a coupler variable callbackmust specify width and height for VhthumbVhthumb requires a coupler variable callbackupdownin_maxVvert_scrollbar()Negative or non-numeric window_size parameter to Vvert_scrollbar().Negative or non-numeric increment parameter to Vvert_scrollbar().Invalid length parameter to Vvert_scrollbar().Invalid width parameter to Vvert_scrollbar().Vhoriz_scrollbar().Negative or non-numeric window_size parameter to Vhoriz_scrollbar().Negative or non-numeric increment parameter to Vhoriz_scrollbar().Invalid length parameter to Vhoriz_scrollbar().Invalid width parameter to Vhoriz_scrollbar().Vtext()Invalid size parameter to Vtext().Invalid mask parameter to Vtext().Invalid prompt passed to Vtext().p\=fwidthdescentocxotaotbpointer=xtermpointer=top left arrow incrementtpsumVbutton()Invalid label passed to Vbutton().Invalid aw parameter to Vbutton().Invalid ah parameter to Vbutton().outVtoggle()Invalid label passed to Vtoggle().Invalid aw parameter to Vtoggle().Invalid ah parameter to Vtoggle().originalInvalid size parameter to Vcheck_box().Vcheck_box()linewidthszVmessage()Invalid label passed to Vmessage().TWFHascentVline()Invalid coordinate parameter to Vline().must pass a coupler variable to a Vradio_entry buttonoldkrb_framerbfirstuncenteredVradio_buttons()s parameter to Vradio_buttons must be a list of strings.maxwidthchildcolordmatenvXSHADEgrey4,15,15,15,154,15,15,13,154,11,15,13,154,10,15,13,154,10,15,5,154,10,7,5,154,10,7,5,144,10,7,5,104,10,5,5,104,10,5,5,24,10,4,5,24,10,0,5,24,10,0,5,04,8,0,5,04,8,0,1,04,8,0,0,04,0,0,0,0palettec623456captionslabelsdefaultswidthsbuttonsindexmaxlleaddefault_buttonmaxwcwidthlabel_widthmaxbbutton_spacedefault_widthOkaywin1w1h1win2w2h2mscrpalc1dpytabdisplaycspnameattomit1omit2name.$_.=fgbgfont: can't open windowarglistonamedpydisplay=Window()size=32,32: can't open displaywindowlabelgeometryposxposychoptrejects: missing value for BLXYGA: malformed -A option: : unrecognized option --!omitWindow: open()Window: WAttrib(: can't set couplercall_clientsclientplfunctionIcon function() not allowed as callbacktheMaxillegal value in Vrange_coupler setnewstatecallbacksviderasedFrame not resized yet.widslotsvxvyvwvhpaneerasewcdestAttempt to format a frame with non-absolute sized and positioned children.Invalid vidget parameter to VErase().VErase() on a Vline not implemented.Invalid frame parameter to VInsert().Invalid vidget parameter to VInsert(). Passed Non-numeric x parameter to VInsert().Non-numeric y parameter to VInsert().Non-numeric w parameter to VInsert().dialog_frameInvalid dialog parameter to VRegister().Invalid vidget parameter to VRegister().Non-numeric x parameter to VRegister().Non-numeric y parameter to VRegister().Non-numeric w parameter to VRegister().default_stringInvalid dialog parameter to VOpenDialog().Invalid x or y parameter passed to VOpenDialog().Invalid frame parameter to VFormat().VResize() not invoked on this vidget.apVframe_recVmenu_item_recVmenu_frame_recVpull_down_button_recVpane_recVgrid_recstrVidget error: Invalid x or y coordinate to VInsert().Invalid window parameter to cpInvalid style parameter. *[V9.TESTS.GRAPHICS]GPXTEST.GIF;1+,.$/ 4$"I-0123KPWO%56Os7js89Jj$GHJ GIF87ah^^Lwww^ɪooo^,Lw---^ɥ 8,,8wLfff^^^VVVLLL<<<,,,ɥ44T(8,hpHdҨl:ÇtJZجVv0xgӼF_x)q}}lJ\IeHkGMDCBxsErJV!HCɩBưЂ•ڙܝޡuXyl{VY! */SٲaqoP YOKZ" w}ÖF-UpQ f!q?u5Ё+bVPB$ gCvp{[6D%O |(B=P{1w4{N_9:(pbGiU`/|p|>x@!MĖk6EyF36W>oG{'3ɚ()0CxTFB%CW: +lLgA'Qo35MIS&+%>a^=yvbmIeNS?Gkv,'KՑ7 +tP32Z% %UUlQ0!J5se6iSuuY&`rWߍ]{+ [A^*֗0,F#^i.;>,wfYf6+fږ&R-^{p'k쎘ѧ{TlJᆷ1kj9Y!>5E +H9J(ֶdժp{Z\h՝ ('Ϻ GZ7YmM_˒-+1Mp5fU[)a5 17*sW1c|5pS4e^=z ㉞\v.~Vҟk2l[ZǶs$x^f=?KYfa|ÿ-3#Qb|}溚wk[t[E羷XC+ع {xe7cs Wc/ >U_jpZ0ɢNǦ#o 6k~{>krx!sR9.ps1j)8KW~ف.BRsz7 cé{F8-u^#X''@ mbU$7Z_-~kvwy6?i~P/s~VIjOm(BݓTZ_uZ&fGZ`pH!v@vO|!veIdXqH6W(CN` {d]|g)6rfz6iʶ}~XeGIx&mJG{'[/ #UHE%) }r#;X}UV2DŽj-tj:łp'v aFܗV-_Ɔ)Awm|oHShDd(z 0  x(hȉX~?xh芭ȊՉ(r8Rhh(Xx8ϸ،HH$ NO.:qmeB|P*cDo#-hdFBf}dui;:B %-Bl=Op>S3f\Cr1k0aRi/ rBqb > |; ae) lP[ e2 Ch O*د75MB -/]nns~L$Un@>TgyZ?MN  r yŢx7|9 q w% K;|R*P&:(t1,hS*8}X +)6v` ^)# $A8ED&8LX>3\t"5lT 6v &S 9Y9p; _/=9 2SgvVc"< 8W4]x=.);R#}W dY{2) #"< + lD<2  U=muZggc )+?J-ma V cz3 gR'-H$>l F_+uMn"R3GO2+Q bGXK$ -2A> ]ou/m-h "Nl|c<\;)szluٝh23n S -N'/E )ve!e&iL) |:/SqTD n<Y]y  \|t6#n bj_f%iL?2G%jp xwI"uVt|; 2; ,8Ta9/oM,':,6)t?YZ?&|2m4zo7A:bc\OApr}) t {~'IGpe(@ic \,"< e;ב 9p9k?KwF tzcr clXAn8K-/~l߾$:_)rwG3=V ^k\P<8"*LKz  s * t9=5CyyJ"Lcx; %#8N1p Y:oLC  Ke@x/?lye RqLx4C m+c~4 Um}o!@p vX? ʺ U v$&:Fr> )&4 n! >.FMmol/! 4r~fut$d  cUgA3=sIVP3A" %DmI < 4P 7 2I7V* uknE59gN lw(&*~1 %Xs|Bb$*7"? ]C[m PCR ? r" Hi  -T P6)1]+~E]n{G[KnEEJū,mFCZ΀Co*CRVq*cYm\WX^V3TFsg8eZgh3Ozpunj2o|}bqmwpbtkif_`5~J&qkmoj:Nspwcbzh/cHs#z,#omArze`c7mC{hh|kzwllodkf]ved1x/~k0gzbkJr&<&\#5kQfjhRaS043*]b1l9}:ldt?~ bÞexd3c h(<abvaG3J 3%.jd n;f>uf<w" ` -5r<^lwd_Ks [r;ocEqr"N. zml>-~ nm6Ju adIT_Cc:\d%aIV 2XBI>7d)=>= q@Xp; v1uyx}lzMEMO[TSZBضEy4)F~k*&w-9A 3~a r*~bn$hUlӃP Ij PIhM)(M1 ^=hwDL͢D>pDR>{a'v#Eov u"O {~pGs x~+ %m&t/WX~rOvp"l=A-geBe~VwuD-vv,9\UPldgs"~$ po2ri pbi$ t 1 twtPJ = 0 lY "Y)/"gEqqv&g66m3Mu,dX;| aW`u,GpFl N &l*yo8(4 JR)A]:wcV)dHK_DBYkz=>P\q ,<0"Ih$uSWrU7a-D0Bl]5'hTeKfEa,!]nYKoFiQPU">VcH#l4T#@H]9bPoXGoDrQ0ceoS'_e Xtth?GX^lQL ; PY@ErIq^ppFD V*8],%.tlwv glGN)mEr^*n loU(u,=5*a7~% E3DQ?E;2 ,E]{,&N1f?>GTI)LZv? PH-DR=aFpE\oFb* palkOI Ux,%f>v Uq "w,0pQ1 (,G_&I OX]7Ej&aIjG4f^l\W "Y[ )YXc]$'kGjD$zQET!IBV2rqGTewI e$ px7@DNRDUSZcXdS4t#7 oF X\BQF;?TXV`;E"+h^6]XRqF UyfD|F9AWV *WW_^?ANmRO~'/#30kFS"9F{A%#30iE" 6;dB!31m51j755fA!30mv1y/47iO7-"30my0 46kp40$30b!0' 6cc3>$20]]0!'87#3%%23!0?'A"(2e%13 0'F248&13!x0 '0:wk(| tcrtmuu4d@t0}So;!a4\WG uMg/y]`Hp`~e74udct[Hcj"G,yfnP`dvbY28ciq,hHswvgu!k]Bg rPC{J aT\oXddpiom*ewmksrdk8t)rFp"wpzFhzO<p9gp}G2 x"'yڴ0d A5J-A쁎Q묎kXMr佗 kX@{'u1L6t*8!&LJm~p6uK+h .v$iWu7!ˍF) Qluݹ.Z<\v} A2.?7uQ0BP62BCcƟ:0~84]ZPw ?t K/.ɧsfWЦ'0a!WvAIXKU{ӌlOt@M@t6#f|8S=(%IV(=eK6|-Y[`M EeQ>{^0ph_.5\hD3NjqJF9 [N<2iS5AbA"))jC{Rc (#=¢(3@I -=a%;TQDLۯ;VIXڣ}IV)!]Us!+^xݑ^yz])b"0u n>[JZr؅:&{9:.iZDQ7~ifϸSQ89]@qk!$ ٍj9wKd8v/sՒ˩^D+cqz`Xl}_n22r CO*8m\GL͠g}?HsDsVx1 TeWUR\ wC;qK͒ D.Q w]OvO(uS^KM8:B ,F{\j+@< '7`z4\w^ֽzNw`~#L縆 EN-SYAf2- vM`nPEnMUϐޣ=МsߨEsle'rb۩ZO =⑧#0ՈcPPY|%d*w-@po.\6#hMБƆE @s)Aߠg@[Ő >rË׼K 2CFrv:U{g}4 ;lVCN7 GI )N^T+#VH64O5N% ( VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.GIF;1$Hȍ(88xب刎>(Xhx؏ɏ9 ȐِyyIYɑ) i!(.H'9-86S{pDUCy3)JCpHoVzRM B $p B,hJ i7as e2TU{f#Õi!!YDaRqtvQ7:qxA0פxTav!w.XN{Z\G(j?7?zk:sf~!`):1̱7g"Ac/8Bp%#=>rUc.g46.)&}\HV:3k^v|$6:s =L:"NzQʖJ\דz_Q *|=zr0~JYt *ە[ DѦP9w07p0j8#ŀXii͗&jjR OftkZ }תOKSrt#$"YVKZGfQRm*jXŀ\ 2hAdqeyjj#tZ7əu3%yb4Īz7o@4'j!d$@{'+CQaJkסCs)2xP['c EU; jom,x~B*x79hJ'O}Z&ZӪ`R@ƳW4^WV|WJ6S/"+bbe1 C3#eK;>h]$9 ]KsMZ"(ʛc{ycRE מΤ:f۱)r; +a+"_9`u)c8_T9[[Oh!:ûvɘغZӷyzqۼI[%S8\k`'p׆d?{E~[_1C[㩹h:+;*tjSi`p{XJʋ'3wKg\rP *\3f#Kv&m~dZ);%\ V*hg8\įIE|+v„{JwHfe8kj[ک]U;a lLٜXYhS۠zKl{w*?ÜCC>L f-_GQgXwzm׬Tٷ7u*0Yg[ 7´l-l~ZFyJ |͡~U˝ CŇO@gd{e} |y{W~Kt\SN v>ɖ z Q6)œC4^jxl,GΣ+ƗCTqA{f4 u2ldP&"a bFiE0/ |STdc:yܶd-jG4sʀǥZ6jqEֲ$,u2W;HL`,]`[- Vٜ}k{Pi|̏{/b;2ԛ%cx$NR}6JzFUM<  [КŇ8 @pŃC̅f*Ѓݵ=vͫk*Ү˛QE4ƀ pݴmZR.%F-,옫mχ 2JʚyrW2TY$?v}7W }5 L\?q d\%Z[Q=] 2M{Rx{rܥ]d.ȭ@߸1Z٫ͷEI qi\ G$̸o!f9„`scTod37{)8as%3"T-i NO->{ɩR0!*PS/=o(@4u,}UTVD܋!(XqһmMr2PtApsEEZxVkϑV4 _.f\MWň#<1MTϤbm;+$8U v CEe֜kMDBl9,(cRet[$[}ǡcJpC܇r6/uoT"p$PSVqjLi}WTl)Q[ַ=W\m&ekg"D;wYY<&Dca0䰠=pJkH]\ ]t/*Fb[N=q9g?RFِm{i)=^` G jȧ}}v˒q(K٭n/ُvC pj@ow ]NbU;HЁP+x'&0v8 N0@g9yCZ'\Mx=%pd!~XE+^Eȋa#8F3rQ9X06wCz:t :~ǎR>NLHBѐyTd"9C #IF񑀴&1YN^2'CI=rd)AyJSrl%,UYKVƒ,q^Be0uYLbs0iLed&4jFs6Mi:ߴ7Kqb3$g:yps\$zD=9O{ < OuT9 ΆDBPF D-ьR(F+ёT)5JAЕE)LIR4iM]Sԧ'MTTEENS6]OmjTrYȴ2ȫaUFvG!4E~amT ^,Kf%Jzi-.syTX*hDd?EWj#"Fʢͥq,K_W{0هVgEE7t,7yON@( |`%8A <@`Ѕ>th!<:҆Ft+]LZӔfH> VɌ4ww v]̖zP!3` D]! >vl"@[V6laڮvvK<:C`*êu.YqMqzޒ7׫Q:A<)DF|;%(0 XV87 <mA .֞˼պ~6մ,xfVx1w[}P<Z' 9@gNқ>G}J! uk}L^_:ۣZԉdyNg鞫Σ]zH]cCK@@I?^VQ[N0kh3::$@Ha6il3%7k/(,< =-lSÜ=3,=Iogx RWD4i`O >$y5shazi/7xI zxX-NFC-DCazGeZDl'oExX뤗;y͈t"zRJJ뢔ӜҮԎ/$|:AUCFS9փ698߹ 8+@CC/;,L_XVK{{yšiIq?$Bټ>ӳ#={+%4LQ_~ D%1BB@HE\:Qh-V-^է8l>ĵj">G4J;>&"L(a"Qnrvz~nV!9 1*&RMNFBZ07;?CGKgFR[9%dPd|$qxw畟_ϻ#m+Da+U1TR삈k bdId1C(V TbH,Jp. )pq2p"@rD8bN<}z3Ξ~2hSQ1*(H`O +*+aOfI1cJmjb^\K-V!d ,X&aj4$:>' J ?l˙E@Zb+a.{1ejwj˄QV qO"7c"޲0E`vݿ2^;wg/O]#gaQ+- df/[iH3s[aX!pq$@|@WA+vW0"hV8#52#o#mDOr2mj]udn[Bq C#Y\@gkF"UjBQg"Dyy#v靍~ (6ad.J69 @$V8e֛֕H^ꄰ]Zalz(4ŔPJwhg-2kȫ}@h )Q\nhmoq)::nb-f(j_7yE넾Ŀ='F-5,՗Ŷ0R1X 1##-`Fg@ v,%pj&36Üs;[q3}\s@Y%p x$b[-DRqc=-wpmuȭ9,)-0BDG1$BFoO{7$&ǴJIiyUWJ*ls=Xڜr0D%T꿬޺T:p{iعnn 6X-k]o5J]P#rg}n~˖x"_k?2rخDhUsbpmX1moc߅.Z#V2lOh{鶷!\9φձl,376ٜc7wݲG;z`Y'7ӂvd|cC#׼yd@/li5o:ֲ4? * xԊ3VTqvu.:4ZNo zruq l>~yGN1g/mo7ȴ9l/چ ֿۺivcq߰.wm_D[RY65 | _8U zyn~ߙrSu#K~2Qub'lkvzL ޤy:(n`o>F`hf{n|J}>'~&[~5 hJBPm 茾V v(N g pjh)gbZe䈂_4YdZRK z)l排)Nbo`f$)qj)2)A! A"^v"* f:jn~XJb$eib)e*i)j&}eR>҂hX]jjf%\xŠp$jrg-nؼVmXlg /8F.,^h׭\(wnom.& @զ/ن6P:c F,?g,i{Io sup*p3:B nժo-AkA ,Ax\KuҰWn?0CJbn0v2upV1f= ^-%tq"Z"1jW2+0.OlbLW~"z& + "!!'0wX.d3d$P2Zc&:*CR(rrZ.qX-7_!w/9YA0m1_2&g22k33qq){ppr+#[6psE/X.OCE"$8nޣѺ;ó<;m]=rM)s.X 5e g\HDX0C3@4"48EqF70<+)?׭#,t 4#n+4t#{WA3EPk4QsBR߳F(3?51Zc rUGݳmV V[CW#vbXOtcu4 %Z&_HuH[I¬]5?6fuas(kuE`HdS6Q3j[f\Sg5h?ϩ<6Ji¸6KY󴯕Dv6qoafrpkq/1^hS664By].vszvn-N:ɟڮ|NWVgT s'y|lp0Y;z[y}_v[{#&hӗWx$qUm~=%/R'wZ*m{+=;7_wS#>3~;,;!o :“+${+_{~.'{ڜ8|}l 2?2g~Lþ#{'=.G[!@߬2[K;ѿx#+  j@8 E4&L"U+6V3 b]7YJ7z^ߚ>B.A:DDCFG7I8JHLLHNPQJSTKVV 1 then Fg("45000,45000,65000") every y := (3 * CELL / 2) to (2 * HEIGHT) by 7 do DrawLine(0, y, 2 * y, 0) Fg("#000") # Run a series of tests confined to small, square cells. cx := cy := 0 # current cell (already filled) cell(simple) cell(lines) cell(rects) cell(star) cell(pretzel) cell(spiral) cell(arcs) cell(rings) cell(fontvars) cell(stdfonts) cell(stdpats) cell(patts) cell(gamma) cell(balls) cell(slices) cell(rainbow) cell(whale) cell(cheshire) # Use the final cell area for Dialog and Quit buttons. buttonrow(&window, WIDTH - CELL - GAP/2, HEIGHT - GAP / 2, CELL, 2 * GAP, 0, - 3 * GAP, "Quit", argless, exit, "Dialog", argless, dltest) quitsensor(&window) sensor(&window, 'Dd', argless, dltest) evmux(&window) end ## cell(proc) -- run a test in the next available cell # # Proc is called with a private graphics context assigned to &window. # Clipping set to cell boundaries and the origin is at the center. procedure cell(proc) local x, y, stdwin if (cx +:= 1) >= NWIDE then { cx := 0 cy +:= 1 } x := integer((cx + .5) * (CELL + GAP)) y := integer((cy + .5) * (CELL + GAP)) stdwin := &window &window := Clone("dx=" || x, "dy=" || y) ClearOutline(-HALF - 1, -HALF - 1, CELL + 1, CELL + 1) Clip(-HALF, -HALF, CELL, CELL) proc() Uncouple(&window) &window := stdwin end ############################## Cell Tests ############################## ## arcs() -- draw a series of arcs forming a tight spiral # # Tests DrawCircle with angle limits. procedure arcs() local r, a, d r := 2 a := 0 d := &pi / 10 while r < HALF do { DrawCircle(0, 0, r, a, d) r +:= 1 a +:= d d +:= &pi / 40 } end ## balls() -- draw a grid of spheres # # Tests DrawImage using g16 palette. procedure balls() every DrawImage(-HALF + 2 to HALF by 20, -HALF + 2 to HALF by 20, "16,g16, FFFFB98788AEFFFF_ FFD865554446AFFF FD856886544339FF E8579BA9643323AF_ A569DECA7433215E 7569CDB86433211A 5579AA9643222108_ 4456776533221007 4444443332210007 4333333222100008_ 533322221100000A 822222111000003D D41111100000019F_ FA200000000018EF FFA4000000028EFF FFFD9532248BFFFF") end ## cheshire() -- cheshire cat display # # Tests mutable colors, WDelay, various drawing operations. procedure cheshire() # test mutable colors local face, eyes, grin, i, g if (face := NewColor("white")) & (eyes := NewColor("black")) & (grin := NewColor("black")) then { Fg("gray") FillRectangle(-HALF, -HALF) Fg(face) FillArc(-HALF, .3 * CELL, CELL, -HALF) FillPolygon(0, 0, -.35 * CELL, -.35 * CELL, -.35 * CELL, 0) FillPolygon(0, 0, .35 * CELL, -.35 * CELL, .35 * CELL, 0) Fg(eyes) WAttrib("linewidth=2") DrawCircle(-.18 * CELL, -.0 * CELL, 3, , , .18 * CELL, -.0 * CELL, 3) Fg(grin) DrawCircle(0, -HALF, .7 * CELL, &pi / 3, &pi / 3) WDelay(500) every i := 0 to 30 by 2 do { WDelay(100) g := i * 65535 / 60 Color(eyes, g || "," || g || "," || g) g := 65535 - g Color(face, g || "," || g || "," || g) } every i := 0 to 26 by 2 do { WDelay(100) g := i * 65535 / 60 Color(grin, g || "," || g || "," || g) } } else { Translate(-HALF + 4, -HALF) GotoRC(1, 1) WWrite("this test\nrequires\nmutable\ncolors") } end ## deftest() -- test defaults # # Tests x/y/w/h defaulting by adjusting the window size several times. # Also exercises "drawop=reverse" incidentally. # # This test must be run first. It uses the entire window and leaves # results in the first cell. procedure deftest() WAttrib("drawop=reverse") WAttrib("size=" || CELL || "," || CELL / 2) FillArc() FillArc(, , CELL / 4) FillArc(3 * CELL / 4) WAttrib("height=" || CELL) DrawArc(, CELL / 2) WAttrib("drawop=copy") end ## fontvars() -- test font variations # # Tests various font characteristics combined with standard font names. procedure fontvars() # test font variations, GotoXY, WWrites Translate(-HALF + 4, -HALF) Shade("gray") FillRectangle(-4) Shade("black") GotoXY(0, 0) WWrites("\nFonts...") WWrites("\n", if Font("mono,12") then ABET else "no mono 12") WWrites("\n", if Font("serif,italic") then ABET else "no SF ital") WWrites("\n", if Font("sans,bold,18") then ABET else "no SN B 18") WWrites("\n", if Font("fixed") then ABET else "no fixed!") end ## gamma() -- test gamma correction # # Draws 50%-gray bars with various values of the gamma attribute, beginning # with the system default. Incidentally tests some font attributes. procedure gamma() local g GotoXY(0, -HALF + WAttrib("leading")) every g := &null | 1.0 | 1.6 | 2.5 | 4.0 | 6.2 do { Shade("gray") WAttrib("gamma=" || \g) FillRectangle(-4, WAttrib("y")-WAttrib("dy"), -HALF, -WAttrib("fheight")) Shade("black") WWrite(WAttrib("gamma")) } end ## lines() -- test line drawing # # Tests proper drawing and joining of lines of various widths. There # once were problems here in Icon, and there still are in some X servers. procedure lines() local i, y y := -HALF - 6 every WAttrib("linewidth=" || (0 to 4)) do tline(-HALF + 10, y +:= 15) end procedure tline(x, y) DrawLine(x + 1, y, x + 3, y) DrawLine(x - 1, y, x - 3, y) DrawLine(x, y + 1, x, y + 3) DrawLine(x, y - 1, x, y - 3) x +:= 15 DrawLine(x - 3, y - 3, x + 3, y - 3) DrawLine(x + 3, y - 3, x + 3, y + 3) DrawLine(x + 3, y + 3, x - 3, y + 3) DrawLine(x - 3, y + 3, x - 3, y - 3) x +:= 15 DrawLine(x - 3, y - 3, x + 3, y + 3) Dr( E VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1awLine(x - 3, y + 3, x + 3, y - 3) x +:= 15 DrawLine(x, y - 4, x + 4, y) DrawLine(x + 4, y, x, y + 4) DrawLine(x, y + 4, x - 4, y) DrawLine(x - 4, y, x, y - 4) x +:= 15 DrawRectangle(x - 4, y - 4, 8, 8) end ## patts() -- test custom patterns # # Tests custom patterns in hex and decimal forms; tests fillstyle=masked. procedure patts() local i, j, s, x, y WAttrib("linewidth=4") DrawCircle(0, 0, 0.38 * CELL) # circle should persist after patts WAttrib("linewidth=1") WAttrib("fillstyle=masked") s := ["8,#01552B552B552BFF", "8,#020E070420E07040", "8,31,14,68,224,241,224,68,14", "8,#2020FF020202FF20", "4,#5A5A", "8,#0ABBA0BE82BAAAEA", "8,#E3773E383E77E383", "8,#4545C71154547C11", "8,#FF7F3F1F0F070301"] every i := 0 to 2 do every j := 0 to 2 do { WAttrib("pattern=" || s[3 * i + j + 1]) x := -HALF + j * CELL / 3 y := -HALF + i * CELL / 3 FillRectangle(x, y, CELL / 3, CELL / 3) } end ## pretzel() -- draw a pretzel # # Tests DrawCurve. procedure pretzel() # tests Translate, DrawCurve WAttrib("linewidth=3") DrawCurve(20, -20, -5, 0, 20, 20, 35, 0, 0, -20, -35, 0, -20, 20, 5, 0, -20, -20) end ## rainbow() -- draw a rainbow # # Tests several color naming variations. procedure rainbow() local r, c, l Shade("moderate blue-cyan") FillRectangle(-HALF, -HALF) WAttrib("fillstyle=solid") r := 20 l := ["pink", "pale orange", "light yellow", "pale green", "very light blue", "light bluish violet", " pale violet"] WAttrib("linewidth=3") every Fg(!l) do DrawCircle(0, 20, r +:= 3, 0, -&pi) end ## rects() -- draw rectangles # # Tests rectangles specified with positive & negative width & height. procedure rects() local r, a WAttrib("drawop=reverse") r := HALF every a := 1 to 19 by 2 do DrawRectangle(, , r * cos(0.33 * a), r * sin(0.33 * a)) end ## rings() -- draw a pile of rings # # Tests linewidth and DrawCircle in combination. procedure rings() local x, y Translate(-HALF, -HALF) FillRectangle() every 1 to 15 do { x := ?CELL y := ?CELL WAttrib("fg=black", "linewidth=5") DrawCircle(x, y, 30) # draw ring in black WAttrib("fg=white", "linewidth=3") DrawCircle(x, y, 30) # color with white band } end ## simple() -- an easy first test # # Tests DrawString, DrawCircle, FillRectangle, EraseArea, linestyles. procedure simple() DrawString(-HALF + 4, -HALF + 12, "hello,\nworld") DrawCircle(0, 0, CELL / 3) FillRectangle() EraseArea(10, 4, CELL / 5, CELL / 3) WAttrib("linestyle=dashed") DrawLine(HALF - 3, HALF, HALF - 3, -HALF) WAttrib("linestyle=striped") DrawLine(HALF - 6, HALF, HALF - 6, -HALF) end ## slices() -- draw a pie with different-colored slices # # Tests RandomColor, Shade, FillArc. procedure slices() local n, a, da, ov n := 10 da := 2 * &pi / n # change in angle a := -&pi / 2 - da # current angle ov := &pi / 1000 # small overlap FillRectangle(-HALF, -HALF) every 1 to n do { Shade(RandomColor()) FillArc(-HALF, -CELL / 3, CELL, 2 * CELL / 3, a +:= da, da + ov) } end ## spiral() -- draw a spiral, one point at a time # # Tests DrawPoint. procedure spiral() # tests DrawPoint local r, a, d r := 3 # initial radius a := 0 # initial start angle while r < HALF do { DrawPoint(r * cos(a), r * sin(a)) d := 1.0 / r a +:= d r +:= 2 * d } end ## star() -- draw a five-pointed star. # # Tests FillPolygon and the even-odd winding rule. procedure star() FillPolygon(-40, -10, 40, -10, -25, 40, 0, -40, 25, 40) end ## stdfonts() -- test standard fonts # # Shows the default font (the header line), standard fonts, and "fixed". procedure stdfonts() # test GotoRC, WWrite, std fonts Translate(-HALF + 4, -HALF) Shade("gray") FillRectangle(-4) Shade("black") GotoRC(1, 1) WWrite(if Font("mono") then "mono" else "no mono!") WWrite(if Font("typewriter") then "typewriter" else "no typewriter!") WWrite(if Font("sans") then "sans" else "no sans!") WWrite(if Font("serif") then "serif" else "no serif!") WWrite(if Font("fixed") then "fixed" else "no fixed!") end ## stdpats() -- test standard patterns # # Tests standard pattern names; tests fillstyle=textured. procedure stdpats() local i, j, s, x, y WAttrib("fillstyle=textured") s := [ "black", "verydark", "darkgray", "gray", "lightgray", "verylight", "white", "vertical", "diagonal", "horizontal", "grid", "trellis", "checkers", "grains", "scales", "waves"] every i := 0 to 3 do every j := 0 to 3 do { WAttrib("pattern=" || s[4 * i + j + 1]) x := -HALF + j * CELL / 4 y := -HALF + i * CELL / 4 FillRectangle(x, y) # depends on opacity of patterns to work } end ## whale() -- draw a whale # # Tests transparent and regular images, Capture, Zoom. procedure whale() local s Translate(-HALF, -HALF) Fg("moderate greenish cyan") FillRectangle() DrawImage(3, 3, "32,c1,_ ~~~~~~~~~~~~000~~~~~~00~~~~~~~00_ ~~~~~~~~~~~0JJJ00~~~~0J00~~~00J0_ ~~~~~~~000000JJJJ0~~~0J0J000J0J0_ ~~~~~000iiiii000JJ0~~0JJJ0J0JJi0_ ~~~~06660ii000ii00J0~~00JJJJJ00~_ ~~~066000i06600iii00~~~~0iii0~~~_ ~~0066000i06000iiii0~~~~~0i0~~~~_ ~~0i0000iii000iiiiii0~~~~0i0~~~~_ ~0iiiiiiiiiiiiiiiiiii0~~0ii0~~~~_ ~00000iii0000iiiiiiiii00iiii0~~~_ 0AAAAA000AAAA00iiiiiiiiiiiii0~~~_ 0AAAAAAAAAAAAAA0iiiiiiiiiiii0~~~_ ~0000AAAAA0000AA0iiiiiiiiiiii0~~_ ~06060000060600AA0iiiiiiiiiii0~~_ ~060606060606000A0iiiii00iiii0~~_ ~~0~006060000000AA0iiiiiJ0iii0~~_ ~~~~~~00000000000A0iiii0JJ0ii0~~_ ~~~~~~00000000000A0iiiiJ0J0ii0~~_ ~~~0~~00000000000A0iii0JJ00i0~~~_ ~~060000000000000A0i0JJ0JJ0i0~~~_ ~~06060600000600AA0ii0JJ00ii0~~~_ ~00006060606060AA0iiii000ii0~~~~_ 0AAA0000060600AAA0iiiiiiiii0~~~~_ 0AAAAAAAA000AAAA0iiiiiiiiii0~~~~_ ~000AAAAAAAAAAA0iiiiiiiiii0~~~~~_ ~~0i0000AAAAA00iiiiiiiiiii0~~~~~_ ~~0iiiii00000iiiiiiiiiiii0~~~~~~_ ~~~0iiiiiiiiiiiiiiiiiiii0~~~~~~~_ ~~~~0iiiiiiiiiiiiiiiii00~~~~~~~~_ ~~~~~00iiiiiiiiiiiii00~~~~~~~~~~_ ~~~~~~~000iiiiiii000~~~~~~~~~~~~_ ~~~~~~~~~~0000000~~~~~~~~~~~~~~~") s := Capture(, 0, 0, 36, 36) DrawImage(0, 40, s) Zoom(0, 0, 36, 36, 40, 20, 72, 72) end ############################## Dialog test ############################## ## dltest() -- dialog test # # Present a dialog box with "Validate" and "Cancel" buttons. # For "Validate", check all values, and repeat dialog if incorrect. # For "Cancel", return immediately. procedure dltest() # test dialog while dlog() ~== "Cancel" do { if dialog_value["button"] ~=== 1 then { Notice("The button was not left dark."); next } if dialog_value["xbox"] ~=== 1 then { Notice("The checkbox was not checked."); next } if dialog_value["slider"] < 0.8 then { Notice("The slider was not set."); next } if map(dialog_value["text"]) ~== "icon" then { Notice("The text did not say `Icon'"); next } Notice("All values were correct.") return } end #===<>=== modify using vib; do not remove this marker line procedure dlog(win, deftbl) static dstate initial dstate := dsetup(win, ["dlog:Sizer::1:0,0,370,220:",], ["button:Button:regular:1:291,21,56,21:button",], ["cancel:Button:regular::198,180,100,30:Cancel",], ["label1:Label:::) +OT VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1k 20,25,252,13:Click this button and leave it dark:",], ["label2:Label:::20,55,105,13:Check this box:",], ["label3:Label:::20,85,238,13:Move this slider to the far right:",], ["rule:Line:solid:1:20,157,350,157:",], ["slider:Slider:h::273,86,76,12:0.0,1.0,0.5",], ["text:Text::6:20,115,214,17:Enter the word `Icon': \\=here",], ["validate:Button:regular::75,180,100,30:Validate",], ["xbox:Button:xbox:1:131,54,16,16:",], ) return dpopup(win, deftbl, dstate) end #===<>=== end of section maintained by vib #================================================ /home/icon/libsrc/button.icn ############################################################################ # # File: button.icn # # Subject: Procedures for pushbutton sensors # # Author: Gregg M. Townsend # # Date: May 31, 1994 # ############################################################################ # # These procedures implement pushbuttons using the X-window event # multiplexor, evmux. # # It is assumed that buttons do not overlap, and that fg, bg, and font do # not change beyond the initial call (though they are altered temporarily). # These restrictions can be accommodated if necessary by binding a new # graphics context and passing it on all button calls. # # button(win, label, proc, arg, x, y, w, h) # # establishes a button of size (w,h) at (x,y) and returns a handle. # "label" is displayed as the text of the button. # When the button is pushed, proc(win, arg) is called. # # If proc is null, the label is drawn with no surrounding box, and # the button is not sensitive to mouse events. This can be used to # insert a label in a row of buttons. # # buttonlabel(handle, label) # # changes the label on a button. # # buttonrow(win,x,y,w,h,dx,dy, label,proc,arg, label,proc,arg, ...) # # establishes a row (or column) of buttons and returns a list of handles. # Every button has size (w,h) and is offset from its predecessor by # (dx,dy). # # (x,y) give the "anchor point" for the button row, which is a corner # of the first button. x specifies the left edge of that button unless # dx is negative, in which case it specifies the right edge. Similarly, # y is the top edge, or the bottom if dy is negative. # # One button is created for each argument triple of label,proc,arg. # An extra null argument is accepted to allow regularity in coding as # shown in the example below. # # If all three items of the triple are null, a half-button-sized # gap is inserted instead of a button. # # Example: # # Draw a pushbutton at (x,y) of size (w,h); # then change its label from "Slow" to "Reluctant" # When the button is pushed, call setspeed (win, -3). # # b := button (win, "Slow", setspeed, -3, x, y, w, h) # buttonlabel (b, "Reluctant") # # Make a set of buttons extending to the left from (490,10) # # blist := buttonrow(win, 490, 10, 50, 20, -60, 0, # "fast", setspeed, +3, # "med", setspeed, 0, # "slow", setspeed, -3, # ) # ############################################################################ # # Links: evmux, graphics # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ #====== link evmux #====== link graphics record Button_Rec(win, label, proc, arg, x, y, w, h, f, b) procedure button(win, label, proc, arg, x, y, w, h) local r r := Button_Rec(win, label, proc, arg, x, y, w, h, Fg(win), Bg(win)) buttonlabel(r, label) if \proc then { DrawRectangle(win, x, y, w, h) sensor(win, &lpress, Exec_Button, r, x, y, w, h) } return r end procedure buttonrow(win, x, y, w, h, dx, dy, args[]) local hlist, label, proc, arg if dx < 0 then x -:= w if dy < 0 then y -:= h hlist := [] repeat { label := get(args) | break proc := get(args) | break arg := get(args) | break if label === proc === arg === &null then { x +:= dx / 2 y +:= dy / 2 } else { put(hlist, button(win, label, proc, arg, x, y, w, h)) x +:= dx y +:= dy } } return hlist end procedure buttonlabel(r, s) r.label := s Fill_Button(r, r.f, r. b) end procedure Fill_Button(r, f, b) Fg(r.win, f) Bg(r.win, b) EraseArea(r.win, r.x+1, r.y+1, r.w-1, r.h-1) CenterString(r.win, r.x + r.w/2, r.y + r.h/2, r.label) end procedure Exec_Button(win, r, x, y) local e, h, u, args, a h := [r, r.b, r.f] # args to highlight button u := [r, r.f, r.b] # args to unhighlight button args := h Fill_Button ! args while e := Event(win) do { x := &x y := &y case e of { &ldrag: { # drag a := (if ontarget(r, x, y) then h else u) Fill_Button ! (args ~===:= a) } &lrelease: { # release leftbutton Fill_Button ! (a ~=== u) if ontarget(r, x, y) then r.proc(win, r.arg) return } } } return end #================================================ /home/icon/libsrc/dsetup.icn ########################################################################### # # File: dsetup.icn # # Subject: Procedures for creating dialog boxes # # Author: Gregg M. Townsend and Ralph E. Griswold # # Date: June 16, 1994 # ########################################################################### # # dsetup(win, wlist) initializes a set of widgets according to # a list of specifications created by the terface editor VIB. # # win can be an existing window, or null. # # wlist is a list of specifications; the first must be the Sizer and # the last may be null. Each specification is itself a list consisting # of a specification string, a callback routine, and an optional list # of additional specifications. Specification strings vary by vidget # type, but the general form is "ID:type:style:n:x,y,w,h:label". # # dsetup() returns a table of values from the dialog, indexed by their # ID. # ########################################################################### # # Links: dialogs, xio, xutils, # vidgets, vslider, vmenu, vscroll, vtext, vbuttons, vradio # vdialog # ########################################################################### #====== link dialogs #====== link xio #====== link xutils #====== link vdialog #====== link vidgets #====== link vslider #====== link vmenu #====== link vscroll #====== link vtext #====== link vbuttons #====== link vradio record DL_rec(var, typ, sty, num, x, y, w, h, lbl, cbk, etc) record DL_state(dialog, list) global did_list ## dsetup(win, wlist) -- set up vidgets and return table of handles # # wlist is a list of vidget specs as constructed by vib (or uix). procedure dsetup(win, wlist[]) local r, dialog, obj, num, wspec, alist if type(win) ~== "window" then { win := &window } while /wlist[-1] do # ignore trailing null elements pull(wlist) wspec := get(wlist) # first spec gives wdow size r := DL_crack(wspec) | stop("dsetup: bad spec") did_list := [] dialog := Vdialog(win, 4, 4) # "4" is to workaround frame bug VInsert(dialog, Vmessage(win, ""), r.x + r.w, r.y + r.h) every r := DL_crack(!sort(wlist), &null) do { DL_obj(win, dialog, r) # insert other vidgets } VFormat(dialog) # create the dialog return DL_state(dialog, did_list) # return state for dpopup() end procedure dpopup(win, dftbl, dstate) local did_list, init_list, i if type(win) ~== "window" then { win :=: dftbl * RBa VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1(/ } /dftbl := table() did_list := dstate.list init_list := list(*did_list) every i := 1 to *did_list do init_list[i] := \dftbl[did_list[i]] dialog_value := VOpenDialog(dstate.dialog, , , init_list) every i := 1 to *did_list do dftbl[did_list[i]] := dialog_value[i] dialog_value := dftbl return dialog_button end ## DL_crack(wspec, cbk) -- extract elements of spec and put into record # # cbk is a default callback to use if the spec doesn't supply one. procedure DL_crack(wspec, cbk) local r, f r := DL_rec() (get(wspec) | fail) ? { r.var := tab(upto(':')) | fail; move(1) r.typ := tab(upto(':')) | fail; move(1) r.sty := tab(upto(':')) | fail; move(1) r.num := tab(upto(':')) | fail; move(1) r.x := tab(upto(',')) | fail; move(1) r.y := tab(upto(',')) | fail; move(1) r.w := tab(upto(',')) | fail; move(1) r.h := tab(upto(':')) | fail; move(1) r.lbl := tab(0) } get(wspec) # skip callback field r.cbk := cbk # always use parameter r.etc := get(wspec) return r end ## DL_obj(win, dialog, r) -- create vidget depending on type procedure DL_obj(win, dialog, r) local obj, gc, style, lo, hi, iv, args case r.typ of { "Label" | "Message": { obj := Vmessage(win, r.lbl) VInsert(dialog, obj, r.x, r.y, r.w, r.h) } "Line": { gc := Clone(win, "linewidth=" || r.num, "linestyle=" || r.sty) obj := Vline(gc, r.x, r.y, r.w, r.h) VInsert(dialog, obj, r.x, r.y, 1, 1) } "Line": &null # "Rect": { # gc := Clone(win) # if r.num == "" | r.num = 0 then # r.num := &null # obj := Vpane(gc, r.cbk, r.var, r.num) # VInsert(dialog, obj, r.x, r.y, r.w, r.h) # } "Rect": &null "Check": { obj := Vcheckbox(win, r.cbk, r.var, r.w) VInsert(dialog, obj, r.x, r.y, r.w, r.h) } "Button": { style := case r.sty of { "regular": V_2D "regularno":V_2D_NO "check": V_CHECK "checkno": V_CHECK_NO "circle": V_CIRCLE "circleno": V_CIRCLE_NO "xbox": V_XBOX "xboxno": V_XBOX_NO default: V_2D } if r.num == "1" then { put(did_list, r.var) obj := Vtoggle(win, r.lbl, r.cbk, r.var, style, r.w, r.h) VRegister(dialog, obj, r.x, r.y) } else { obj := Vbutton(win, r.lbl, dialog_cb, V_OK, style, r.w, r.h) VInsert(dialog, obj, r.x, r.y) } } "Choice": { obj := Vradio_buttons(win, r.etc, r.cbk, r.var, V_CIRCLE) put(did_list, r.var) VRegister(dialog, obj, r.x, r.y) } "Slider" | "Scrollbar" : { r.lbl ? { lo := numeric(tab(upto(','))) move(1) hi := numeric(tab(upto(','))) move(1) iv := numeric(tab(0)) } if r.num == "" then r.num := &null obj := case (r.sty || r.typ) of { "hSlider": Vhoriz_slider(win, r.cbk, r.var, r.w, r.h, lo, hi, iv, r.num) "vSlider": Vvert_slider(win, r.cbk, r.var, r.h, r.w, hi, lo, iv, r.num) "hScrollbar": Vhoriz_scrollbar(win, r.cbk, r.var, r.w, r.h, lo, hi, , , r.num) "vScrollbar": Vvert_scrollbar(win, r.cbk, r.var, r.h, r.w, hi, lo, , , r.num) } put(did_list, r.var) VRegister(dialog, obj, r.x, r.y) } "Text": { obj := Vtext(win, r.lbl, r.cbk, r.var, r.num) put(did_list, r.var) VRegister(dialog, obj, r.x, r.y) } # "Menu": { # obj := Vmenu_bar(win, r.lbl, DL_submenu(win, r.etc, r.cbk)) # VInsert(dialog, obj, r.x, r.y) # } "Menu": &null default: { stop("dsetup: unrecognized object: ", r.typ) fail } } return obj end ## DL_submenu(win, lst, cbk) -- create submenu vidget procedure DL_submenu(win, lst, cbk) local a, c, lbl a := [win] while *lst > 0 do { put(a, get(lst)) if type(lst[1]) == "list" then put(a, DL_submenu(win, get(lst), cbk)) else put(a, cbk) } return Vsub_menu ! a end ## dproto(proc, font, w, h) -- protoype a dialog box procedure built by vib procedure dproto(proc, font, w, h) local win, s, l w <:= 150 h <:= 100 win := Window("font=" || font, "size=" || (w + 40) || "," || (h + 40)) WAttrib(win, "fillstyle=textured", "pattern=verylight") FillRectangle(win) WAttrib(win, "fillstyle=solid") repeat { if write(image(proc), " returned ", image(proc(win))) then { l := sort(dialog_value, 3) while write(" dialog_value[\"", get(l), "\"] = ", image(get(l))) } else write(image(proc), " failed") if Dialog(win,"Test prototype",,,,["Again","Quit"]) == "Quit" then break } WClose(win) end #================================================= /home/icon/libsrc/evmux.icn ############################################################################ # # File: evmux.icn # # Subject: Procedures for window event multiplexor # # Author: Gregg M. Townsend # # Date: May 26, 1994 # ############################################################################ # # These procedures help organize event-driven X-windows programs. # They are configured by registering *sensors*, which respond to # X events that occur when the mouse cursor is within a particular # region. When a sensor fires, it calls a user procedure that was # registered when the sensor was created. # # These routines interpret window events and respond by calling user code: # sensor() registers the events of interest # evhandle() reads and responds to the next event # evmux() loops forever, handling events # # Two other little routines help build event-driven programs: # quitsensor() registers a standardized response to ^C, DEL, etc. # argless() responds by calling any proc with no arguments, e.g. exit(). # # # sensor(win, ev, proc, arg, x, y, w, h) -- register an event responder. # # registers *proc* as the procedure to be called when the event[s] # *ev* occur within the given bounds inside window *win* and returns # a handle. The default bounds encompass the entire window. # # The event set *ev* can be either: # -- a cset or string specifying particular keypresses of interest # -- one of the event keywords (&lpress, &rdrag, &resize, etc.) # # When a matching event occurs, proc(win, arg, x, y, e) is called. proc, # win, and arg are as recorded from the sensor call. x and y give the # current mouse position and e the event; for a keypress, this is the # character. # # No event generates more than one procedure call. # In the case of conflicting entries, the later registrant wins. # # delsensor(win, x) deletes sensor x from the specified window. # If x is null, all sensors are deleted. # # # evmux(win) -- loop forever, calling event handlers as appropriate. # evhandle(win) -- wait for the next event, and handle it. # # evmux(win) is an infinite loop that calls user routines in response # to window events. It is for programs that don't need to do other # work while waiting for window input. # # evhandle(win) processes one event and then returns to its caller, # allowing external loop control. evhandle returns the outcome of # the handler proc, or fails if there is no handler for the event. # # + =# VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1> quitsensor(win, wait) -- standardized "quit" sensor # # quitsensor() registers a sensor that calls exit() when either # "q" or "Q" is typed in the window. # # If wait is non-null, quitsensor does not return but just waits for # the signal (useful in non-interactive display programs). # # # argless(win, proc) -- call proc with no arguments. # # Useful for registering argless procedures as in quitsensor() above. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ record EvMux_Rec(ev, proc, arg, x, y, w, h) global EvMux_Windows ## sensor(win, ev, proc, arg, x, y, w, h) -- register an event responder. procedure sensor(win, ev, proc, arg, x, y, w, h) local evlist, r, e /EvMux_Windows := table() /EvMux_Windows[win] := list() evlist := EvMux_Windows[win] /x := 0 /y := 0 /w := WAttrib(win, "width") - x /h := WAttrib(win, "height") - y if type(ev) == ("cset" | "string") then ev := cset(ev) else ev := cset(evchar(ev)) | stop("invalid event specification: ", image(ev)) push(evlist, r := EvMux_Rec(ev, proc, arg, x, y, w, h)) return r end ## delsensor(win, x) -- delete sensor x, or all sensors, from window. procedure delsensor(win, x) local t t := \EvMux_Windows[win] | fail if /x then { delete(EvMux_Windows, win) # delete whole set of sensors return } if not (x === !t) then fail # not registered in this window # Sensor is registered for this window. Disable it. x.ev := '' # Remove disabled sensors from list, if possible. while *t[1].ev = 0 do pop(t) while *t[-1].ev = 0 do pull(t) # If nothing is left on list, delete from table. if *t = 0 then delete(EvMux_Windows, win) return end ## evchar(e) -- map mouse event to character code. # # Internally, *all* events are single-character strings, and mouse & resizing # events are mapped into characters that are never returned as keypress events. procedure evchar(s) return case s of { &lpress: "\237" # mouse button 1 down &mpress: "\236" # mouse button 2 down &rpress: "\235" # mouse button 3 down &lrelease: "\234" # mouse button 1 up &mrelease: "\233" # mouse button 2 up &rrelease: "\232" # mouse button 3 up &ldrag: "\231" # mouse button 1 is dragging &mdrag: "\230" # mouse button 2 is dragging &rdrag: "\227" # mouse button 3 is dragging &resize: "\226" # window has resized } fail end ## evmux(win) -- loop forever, calling event handlers as appropriate. ## evhandle(win) -- wait for the next event, and handle it. # produce result of the handler proc; fail if nobody handles. procedure evmux(win) repeat evhandle(win) end procedure evhandle(win) local x, y, ev, e, r, t t := (\EvMux_Windows)[win] | stop("no events registered for window") ev := Event(win) x := &x y := &y # convert event code to single character if type(ev) == "integer" then e := evchar(ev) | "" else e := ev # find and call the first (most recent) matching handler # (just a simple serial search) every r := !t do if any(r.ev, e) & ontarget(r, x, y) then return r.proc(win, r.arg, x, y, ev) fail end ## ontarget(r, x, y) -- check if an event is within bounds # # checks that (x, y) are within the bounds of (r.x, r.y, r.w, r.h). procedure ontarget(r, x, y) return (x -:= r.x) >= 0 & x < r.w & (y -:= r.y) >= 0 & y < r.h end ## quitsensor(win, wait) -- standardized "quit" sensor procedure quitsensor(win, wait) sensor(win, 'qQ', argless, exit) if \wait then evmux(win) return end ## argless(win, proc) -- call proc with no arguments. procedure argless(win, proc) return proc() end #============================================== /home/icon/libsrc/graphics.icn ############################################################################ # # File: graphics.icn # # Subject: Procedures for graphics # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # Links to core subset of graphics procedures. # ############################################################################ #====== link color #====== link dialog #====== link enqueue #====== link gpxop #====== link gpxlib #====== link vidgets # basic set needed by Dialog() and Vset() #====== link window #====== link wopen #=============================================== /home/icon/libsrc/dialogs.icn ############################################################################ # # File: dialogs.icn # # Subject: Declaration to link to dialog # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ #====== link dialog #=================================================== /home/icon/libsrc/xio.icn ############################################################################ # # File: xio.icn # # Subject: Link declarations for window I/O # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ #====== link wopen #====== link window #================================================ /home/icon/libsrc/xutils.icn ############################################################################ # # File: xutils.icn # # Subject: Procedures for graphics utilities # # Author: Gregg M. Townsend # # Date: June 9, 1994 # ############################################################################ # # compatibility file # ############################################################################ #====== link wopen #====== link gpxop #====== link gpxlib procedure Quit(win) /win := &window while *Pending(win) > 0 do if Event(win) === QuitEvents() then return win fail end procedure Done(win) /win := &window until Event(win) === QuitEvents() exit() end #=============================================== /home/icon/libsrc/vdialog.icn ############################################################################ # # File: vdialog.icn # # Subject: Procedures for dialog boxes # # Author: Jon Lipp # # Date: June 8, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vdialog # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vbuttons, vtext # ############################################################################ #====== link vbuttons, vtext ############################################################################ # Vdialog - allows a pop-up menu_frame to be associated with a button. # # Open the dialogue, let the user edit fields, one entry per field. # returns a list containing the values of the fields. # Multiple entries per field comes later. # ############################################################################ record Vdialog_frame_rec(win, padx, pady, aw, ah, temp, lookup, draw, callback, id, ax, ay, uid, F, P, V) procedure Vdialog(params[]) local self, 7 VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1cM static procs initial { procs := Vstd(event_Vframe, draw_Vframe, outline_Vdialog, resize_Vframe, inrange_Vpane, init_Vdialog, couplerset_Vpane, insert_Vdialog, remove_Vframe, lookup_Vframe, set_abs_Vframe) if /V_OK then VInit() } self := Vdialog_frame_rec ! params[1:4|0] Vwin_check(self.win, "Vdialog()") if (\self.padx, not numeric(self.padx) ) then _Vbomb("Invalid padx parameter to Vdialog().") if (\self.pady, not numeric(self.pady) ) then _Vbomb("Invalid pady parameter to Vdialog().") self.uid := Vget_uid() self.V := procs self.F := Vstd_dialog(open_dialog_Vdialog, register_Vdialog, format_Vdialog, unregister_Vdialog) self.P := Vstd_pos() self.V.init(self) return self end procedure open_dialog_Vdialog(self, x, y, values, def_str) local W, H, i, e, newfocus, tid, rv, now, val local entry, r, def, sel ## Sort text entry list. self.F.text_entries := sort(self.F.text_entries) every i := 1 to *self.F.text_entries do self.F.text_lu[self.F.text_entries[i]] := i /self.temp := open("vdialog", "g", "canvas=hidden") WAttrib(self.temp, "width="||(self.aw+10), "height="||(self.ah+10)) ## check if box will open over edge of window. W := WAttrib(self.win, "width") H := WAttrib(self.win, "height") if x + self.aw + 6 > W then x := W - self.aw - 5 if y + self.ah + 6 > H then y := H - self.ah - 5 self.V.resize(self, x, y, self.aw, self.ah) ## PMIcon fix CopyArea(self.win, self.temp, self.ax-2, self.ay-2, self.aw+7, self.ah+7, 0, 0) # CopyArea(self.win, self.temp, self.ax, self.ay, self.aw+5, self.ah+5, 0, 0) ## Make a sorted list of self.F.entries sel := sort(self.F.entries, 1) ## set values of fields to value list, or default if entry is &null every i := 1 to *sel do { entry := sel[i][2] val := values[i] | &null ## debug: show ids: values ## write("id- ",entry.id, ", val- ", val) (\entry).V.set_value(entry, val) } self.F.focus := &null self.V.draw(self) ## Find default button according to def_str. if \def_str then every i := !self.lookup do if def_str == \i["s"] then { def := i DrawRectangle(def.win, def.ax-1, def.ay-1, def.aw+2, def.ah+2) break } self.F.focus := self.F.entries[self.F.text_entries[1]] newfocus := \self.F.focus | \sel[1][2] | &null (\self.F.focus).T.block(self.F.focus) repeat { e := Event(self.win) if e === "\r" then { if \def then { e := &lpress &x := def.ax + 1 &y := def.ay + 1 put(Pending(def.win), &lrelease, def.ax+1, def.ay+1) } else next } if integer(e) < 0 then { newfocus := self.V.lookup(self, &x, &y) | self.F.focus if ((\newfocus).id) ~=== ((\self.F.focus).id) then switch_focus_Vdialog(self, newfocus) } r := (\newfocus).V.event(newfocus, e, &x, &y) | &null case r of { V_NEXT: { #move to next entry now := self.F.text_lu[self.F.focus.id] tid := ((*self.F.text_entries >= now + 1) | 1) switch_focus_Vdialog(self, self.F.entries[self.F.text_entries[tid]]) } V_PREVIOUS: { #move to previous entry now := self.F.text_lu[self.F.focus.id] tid := ((1 <= now - 1) | *self.F.text_entries) switch_focus_Vdialog(self, self.F.entries[self.F.text_entries[tid]]) } V_OK: { # done, quit with changes rv := [] every e := !sel do put(rv, e[2].data) close_dialog_Vdialog(self) return rv } V_CANCEL: { # cancel changes, quit. close_dialog_Vdialog(self) return } } newfocus := self.F.focus } # end repeat end procedure close_dialog_Vdialog(self) local tid ## For Vtext vidgies, tell them to turn off their cursors. every tid := !self.F.text_entries do \(self.F.entries[tid]).T.CursorOn := &null ## Copy back what was underneath the dialog box. CopyArea(self.temp, self.win, 0, 0, self.aw+7, self.ah+7, self.ax-2, self.ay-2) ## We're gonna let the user do this.. July 29. (jml) ## Release the resources associated with the temporary binding. # Uncouple(self.temp) # self.temp := &null end procedure switch_focus_Vdialog(self, newfocus) if (newfocus.id === !self.F.text_entries) then { self.F.focus.T.unblock(self.F.focus) # self.F.focus.T.erase_cursor(self.F.focus) newfocus.T.block(newfocus) self.F.focus := newfocus } end procedure insert_Vdialog(self, vidget, x, y) if /self | /vidget | /x | /y then _Vbomb("Incomplete or &null parameters to VInsert() for dialogs.") pad_and_send_Vdialog(self, vidget, x, y) end procedure register_Vdialog(self, vidget, x, y) if /self | /vidget | /x | /y then _Vbomb("Incomplete or &null parameters to VRegister().") self.F.entries[vidget.id] := vidget if type(vidget) ? find("text") then put(self.F.text_entries, vidget.id) pad_and_send_Vdialog(self, vidget, x, y) end procedure unregister_Vdialog(self, kid) local new, i if (kid.id === !self.F.text_entries) then { new := [] every i := !self.F.text_entries do if kid.id ~=== i then put(new, i) self.F.text_entries := new } delete(self.F.entries, kid.id) every i := 1 to *self.F.text_entries do self.F.text_lu[self.F.text_entries[i]] := i self.V.remove(self, kid, 1) end procedure pad_and_send_Vdialog(self, vidget, x, y) if (x|y) < 0 | type(x|y) == "real" then _Vbomb("Must VRegister() or VInsert() a vidget to a dialog with absolute coordinates.") else if (\vidget["id"], not (type(vidget.id) == ("string" | "integer" | "real") ) ) then _Vbomb("id field of a vidget within a dialog must be a string or numeric.") insert_Vframe(self, vidget, x+self.padx, y+self.pady) end procedure outline_Vdialog(self) DrawRectangle(self.win, self.ax, self.ay, self.aw, self.ah) DrawRectangle(self.win, self.ax+3, self.ay+3, self.aw-6, self.ah-6) FillPolygon(self.win, self.ax + 5, self.ay + self.ah, self.ax + 5, self.ay + self.ah + 5, self.ax + self.aw + 5, self.ay + self.ah + 5, self.ax + self.aw + 5, self.ay + 5, self.ax + self.aw, self.ay + 5, self.ax + self.aw, self.ay + self.ah, self.ax + 5, self.ay + self.ah) end procedure format_Vdialog(self) self.V.resize(self, 0, 0, Vmin_frame_width(self)+self.padx, Vmin_frame_height(self)+self.pady) end procedure init_Vdialog(self) init_Vframe(self) /self.padx := 20 /self.pady := 20 self.F.entries := table() self.F.text_entries := [] self.F.text_lu := table() end #=============================================== /home/icon/libsrc/vidgets.icn ############################################################################ # # File: vidgets.icn # # Subject: Procedures for vidgets # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ # # Links to basic vidget files needed to use the library. # ############################################################################ #====== link vcoupler #====== link vframe #====== link viface #====== link vpane #====== link vstd #=============================================== /home/icon/libsrc/vslider.icn ############################################################################ # # File: vslider.icn #- S2 VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1\ # Subject: Procedures for sliders # # Author: Jon Lipp # # Date: May 20, 1994 # ############################################################################ # # Vidgets defined in this file: # Vvslider # Vhslider # # Utility procedures in this file: # Vvert_slider() # Vhoriz_slider() # ############################################################################ record Vslider_rec (win, callback, id, aw, ah, discont, ax, ay, data, pad, uid, S, P, V) ############################################################################ # Vvslider ############################################################################ procedure Vvslider(params[]) local self static procs initial procs := Vstd(event_Vvslider, draw_Vvslider, outline_Vvslider, resize_Vpane, inrange_Vpane, init_Vvslider, couplerset_Vvslider,,,,,set_value_Vvslider) self := Vslider_rec ! params[1:7|0] Vwin_check(self.win, "Vvert_slider()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("Invalid width parameter to Vvert_slider().") if (\self.ah, not numeric(self.ah) ) then _Vbomb("Invalid length parameter to Vvert_slider().") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.S.type := 1 self.V.init(self) return self end procedure outline_Vvslider(s) local ex, ew ex := s.S.sp / 2 ew := s.aw -2 * ex + 1 FillRectangle(s.win, s.ax+ex, s.ay, ew, s.pad+1) FillRectangle(s.win, s.ax+ex, s.ay+s.ah-s.pad, ew, s.pad+1) end procedure draw_Vvslider(s) local val s.S.drawn := 1 s.V.outline(s) DrawSegment(s.win, s.ax+s.S.sp, s.ay+s.pad, s.ax+s.S.sp, s.ay+s.ah-s.pad, s.ax+s.S.sp+s.S.sw, s.ay+s.pad, s.ax+s.S.sp+s.S.sw, s.ay+s.ah-s.pad) val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad s.S.oldpos := val FillRectangle(s.win, s.ax+0, s.ay+val, s.S.tw+1, s.S.th) end procedure event_Vvslider(s, e) local value if \s.callback.locked then fail if e === (-1|-2|-3) then until e === (-4|-5|-6) do { value := ((&y - s.ay-s.pad-1)/s.S.ws) * s.S.cv_range if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.data := s.callback.value update_Vvslider(s) e := Event(s.win) } else fail # not our event if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return s.callback.value end procedure update_Vvslider(s) local val val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad if s.S.oldpos ~= val then { EraseArea(s.win, s.ax+0, s.ay+s.S.oldpos, s.S.tw+1, s.S.th) DrawSegment(s.win, s.ax+s.S.sp, s.ay+s.S.oldpos, s.ax+s.S.sp, s.ay+s.S.oldpos+s.S.th, s.ax+s.S.sp+s.S.sw, s.ay+s.S.oldpos, s.ax+s.S.sp+s.S.sw, s.ay+s.S.oldpos+s.S.th) FillRectangle(s.win, s.ax+0, s.ay+val, s.S.tw+1, s.S.th) s.S.oldpos := val } return s.callback.value end procedure set_value_Vvslider(s, value) couplerset_Vvslider(s, , value) return end procedure couplerset_Vvslider(s, caller, value) value := numeric(value) | s.callback.min if s.callback.value === value then fail s.callback.V.set(s.callback, caller, value) s.data := s.callback.value if \s.S.drawn then update_Vvslider(s) end procedure init_Vvslider(s) /s.aw := 15 /s.ah := 100 if /s.callback | type(s.callback) == "procedure" then _Vbomb(" Vvslider requires a coupler variable callback") s.pad :=5 s.S.sw := 3 s.S.sp := (s.aw - s.S.sw) / 2 s.S.tw := s.aw s.S.th := 3 s.S.ws := real(s.ah - s.S.th - (1 + 2*s.pad)) s.S.cv_range := s.callback.max - s.callback.min init_Vpane(s) end ############################################################################ # Vhslider ############################################################################ procedure Vhslider(params[]) local self static procs initial procs := Vstd(event_Vhslider, draw_Vhslider, outline_Vhslider, resize_Vpane, inrange_Vpane, init_Vhslider, couplerset_Vhslider,,,,,set_value_Vhslider) self := Vslider_rec ! params[1:7|0] self.aw :=: self.ah Vwin_check(self.win, "Vhoriz_slider()") if (\self.ah, not numeric(self.ah) ) then _Vbomb("Invalid width parameter to Vhoriz_slider().") if (\self.aw, not numeric(self.aw) ) then _Vbomb("Invalid length parameter to Vhoriz_slider().") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.V.init(self) return self end procedure outline_Vhslider(s) local ey, eh ey := s.S.sp / 2 eh := s.ah -2 * ey + 1 FillRectangle(s.win, s.ax+0, s.ay+ey, s.pad+1, eh) FillRectangle(s.win, s.ax+s.aw-s.pad, s.ay+ey, s.pad+1, eh) end procedure draw_Vhslider(s) local val s.S.drawn := 1 s.V.outline(s) DrawSegment(s.win, s.ax+s.pad, s.ay+s.S.sp, s.ax+s.aw-s.pad, s.ay+s.S.sp, s.ax+s.pad, s.ay+s.S.sp+s.S.sw, s.ax+s.aw-s.pad, s.ay+s.S.sp+s.S.sw) val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad s.S.oldpos := val FillRectangle(s.win, s.ax+val, s.ay+0, s.S.tw, s.S.th+1) end procedure event_Vhslider(s, e) local value if \s.callback.locked then fail if e === (-1|-2|-3) then until e === (-4|-5|-6) do { value := ((&x - s.ax - s.pad-1)/s.S.ws) * s.S.cv_range if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.data := s.callback.value update_Vhslider(s) e := Event(s.win) } else fail # not our event if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return s.callback.value end procedure update_Vhslider(s) local val val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 + s.pad else val +:= 1 + s.pad if s.S.oldpos ~= val then { EraseArea(s.win, s.ax+s.S.oldpos, s.ay+0, s.S.tw, s.S.th+1) DrawSegment(s.win, s.ax+s.S.oldpos, s.ay+s.S.sp, s.ax+s.S.oldpos+s.S.tw, s.ay+s.S.sp, s.ax+s.S.oldpos, s.ay+s.S.sp+s.S.sw, s.ax+s.S.oldpos+s.S.tw, s.ay+s.S.sp+s.S.sw) FillRectangle(s.win, s.ax+val, s.ay+0, s.S.tw, s.S.th+1) s.S.oldpos := val } end procedure set_value_Vhslider(s, value) couplerset_Vhslider(s, , value) return end procedure couplerset_Vhslider(s, caller, value) ## break a cycle in callbacks by checking value. value := numeric(value) | s.callback.min if s.callback.value === value then fail s.callback.V.set(s.callback, caller, value) s.data := s.callback.value if \s.S.drawn then update_Vhslider(s) end procedure init_Vhslider(s) /s.ah := 15 /s.aw := 100 if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vhslider requires a coupler variable callback") s.pad :=5 s.S.sw := 3 s.S.sp := (s.ah-s.S.sw) / 2 s.S.tw := 3 s.S.th := s.ah s.S.ws := real(s.aw - s.S.tw - (1 + 2*s.pad)) s.S.cv_range := s.callback.max - s.callback.min init_Vpane(s) end #################. } VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1Zgk########################################################### # Utilities - slider wrapper procedures. ############################################################################ procedure Vmake_slider(slider_type, w, callback, id, length, width, min, max, init, discontinuous) local cv, sl, cb, t /min := 0 /max := 1.0 if not numeric(min) | not numeric(max) | (\init, not numeric(init)) then _Vbomb("Non-numeric min, max, or init parameter passed to Vxxxxx_slider().") if max < min then { min :=: max; t := 1 } cv := Vrange_coupler(min, max, init) sl := slider_type(w, cv, id, width, length, discontinuous) sl.S.rev := t add_clients_Vinit(cv, callback, sl) return sl end ############################################################################ # Vvert_slider(w, callback, id, width, length, lower_bound, upper_bound, # initial_value) ############################################################################ procedure Vvert_slider(params[]) local frame, x, y, ins, t, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } params[6] :=: params[7] push(params, Vvslider) self := Vmake_slider ! params if \ins then VInsert(frame, self, x, y) return self end ############################################################################ # Vhoriz_slider(w, callback, id, width, length, left_bound, right_bound, # initial_value) ############################################################################ procedure Vhoriz_slider(params[]) local frame, x, y, ins, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } push(params, Vhslider) self := Vmake_slider ! params if \ins then VInsert(frame, self, x, y) return self end #================================================= /home/icon/libsrc/vmenu.icn ############################################################################ # # File: vmenu.icn # # Subject: Procedures for vidget menus # # Author: Jon Lipp # # Date: May 26, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vmenu_item # Vmenu_bar_item # Vmenu_frame # Vpull_down_button # # Utility procedures in this file: # Vsub_menu() # Vmenu_bar() # Vpull_down_pick_menu() # Vpull_down() # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vstyle # ############################################################################ #====== link vstyle ############################################################################ # Vmenu_item ############################################################################ record Vmenu_item_rec (win, s, callback, id, aw, ah, menu, ax, ay, uid, P, D, V) procedure Vmenu_item(params[]) local self static procs initial procs := Vstd(event_Vmenu_item, draw_Vmenu_item, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vmenu_item, couplerset_Vmenu_item) self := Vmenu_item_rec ! params self.uid := Vget_uid() if type(\self.callback) == "Vmenu_frame_rec" then { self.menu := self.callback self.callback := self.menu.callback self.s ||:= " >" } ## Init self.D := Vstd_draw(draw_off_twoD, draw_on_twoD) self.P := Vstd_pos() self.D.outline := 1 self.V := procs self.V.init(self) return self end # # A menu item needs to be sized a little smaller than a normal # button, so we steal the 2d init procedure. # procedure init_Vmenu_item(self) local TW, FH, ascent, descent, basey /self.s := "" TW := TextWidth(self.win, self.s) ascent := WAttrib(self.win, "ascent") descent := WAttrib(self.win, "descent") FH := ascent + descent /self.aw := TW + 4 /self.ah := FH + 2 self.aw := 0 < self.aw | 1 self.ah := 0 < self.ah | 1 self.D.basex := (self.aw - TW)/2 basey := 1 + ascent if FH <= 10 then basey := 8 self.D.basey := basey end procedure draw_Vmenu_item(s) s.D.draw_off(s) end procedure couplerset_Vmenu_item(s) s.V.draw(s) end # # This is complicated.... if we drag off to the right while within the # y-range of the menu item, call its submenu *if* one exists. Else # if there is a release not on the menu item, fall out of loop. Else # if released on menu item and there is *no* submenu, make a return # value consisting of the id. Else, continue through loop. # # This will take return value of submenu (if successful choice) and pass # it back up to menu bar item. # procedure event_Vmenu_item(self, e, sub) local rv self.D.draw_on(self) (\self.menu).V.resize(self.menu, self.ax+self.aw, self.ay) show_Vmenu_frame(\self.menu) rv := V_FAIL repeat { if (\self.menu, (&x >= self.ax+self.aw) & (self.ay <= &y <= self.ay+self.ah)) then { rv := self.menu.F.pick(self.menu, e, 1) | &null if \rv ~=== V_DRAGGING & \rv ~=== V_FAIL then rv := (push(\rv, self.uid)) } else if (\self.menu, e === (-4|-5|-6)) then rv := &null else if e === (-4|-5|-6) then rv := [self.uid] else if self.V.inrange(self, &x, &y) then rv := V_DRAGGING if \rv === V_DRAGGING then { e := Event(self.win) if e === "\^s" then until Event(self.win) === (-1|-2|-3) ; rv := V_FAIL } else break } self.D.draw_off(self) hide_Vmenu_frame(\self.menu) if rv === V_FAIL then fail return rv end ############################################################################ # Vmenu_bar_item ############################################################################ procedure Vmenu_bar_item(params[]) local self static procs initial procs := Vstd(event_Vmenu_bar_item, draw_Vmenu_item, outline_Vpane, resize_Vmenu_bar_item, inrange_Vpane, null_proc, couplerset_Vmenu_item) self := Vmenu_item_rec ! params self.uid := Vget_uid() if type(\self.menu) ~== "Vmenu_frame_rec" then _Vbomb("Vmenu_bar_item must be created with a Vmenu_frame") ## Init Vset_style(self, V_2D_NO) self.P := Vstd_pos() self.V := procs self.callback := (\self.menu).callback self.D.init(self) return self end # # Resize ourselves, then tell our submenu to resize itself at the # right location. # procedure resize_Vmenu_bar_item(self, x, y, w, h) resize_Vpane(self, x, y, w, h) (\self.menu).V.resize(self.menu, self.ax, self.ay+self.ah) end # # Process events through a loop, grabbing focus: # If release, fall out. Else, if dragged off bottom, open up submenu. # If dragged any other direction, fall out. # # Take return value ( a list) from submenu, and reference callback tables # to call correct callback for submenu choice made. # procedure event_Vmenu_bar_item(self, e) local rv, callback, i, t, labels if e ~=== -1 & e ~=== -2 & e ~=== -3 then fail # not our event self.D.draw_on(self) show_Vmenu_frame(\self.menu) repeat { if e === (-4|-5|-6) then rv := &null else if self.V.inrange(self, &x, &y) then rv := V_DRAGGING else if (self.ax <= &x <= self.ax+self.aw) & (&y >= self.ay+self.ah) then rv := (\self.menu).F.pick(self.menu, e) if \rv === V_DRAGGING then { e := Event(self.win) rv := &null } else break } hide_Vmenu_frame(\self.menu) self.D/ ;%e IVO3n4)nڰգ Yq,&(} Ua: >Θsg: 7?VڃUrwsQE 'ƶ +0}<%tiLH~S?8md0oӺ` _%`u XG[fX%X>J rb;!I^ʋE&`dʼ@G]7o]9G5\{>K̵!LZ~\o:;\ [[;PJ7DdSz8)4 W !9E?20μs\h 3FoƕQsQH֨B3aMGQ?:6S ='^8}b\KqaIGNn3 &2HQPpt^r qwȏGH'3Lv)RߥɥmA6i@,=k>;ŐpıJj]o?6хyj/V=E6 @d3)Q4zLR8avd0,y+^A` YB^|һ-$B3 g(&4NV#A|S!~Okub@oI!(6UO>+R!cڠ? X A5x̬`VSXX0`;\T&_2U3%u5JJ.RƯs)sL%^X *wfCW7b=8@'bZ|3 w e0RSկiP1g hBa 椐2qM`\S5+zX64n|I:3 a߲7rX!CS%;]`Ees 5R)>1G.]ݐ!{M(V-C"y[(tTV'T+QʭX#+' %W 1g:!d'U ~]Iv m$. N5RH0Me)b6YMa!BAJSx `}ď*0]@G"b^(/ܮmjw!ebwihXSpnbZ1WUc%ΖոH{b{R u>{  :ktZ`;oS nc|'N?IH45rfKDV%DׁZqC^~:uLcT3\3 p~M@Bש0ѯ O[BYKI8"נ5"0qXꤤcZG`O6/h_慙f!@$(k gx+6Z1gGc2-W$~_b$I7gtaD|U%m0i\3㶍vU终C:vY}q iQ61|=0 +Jb~ˀS*.!/mx!m #P,^8@)BGala2K*G7`-R^M5VqL4' qxQ~/ےkC$zJy.冇`X较e5洰? -Dtal1ñ̗+^x 8Zz3~v֭L9P 4c>T^#mu"եJ>4̆6)%܏dR>UZv;Z`̜ e G /WÓ..%GpZ%lʇ;HU'jl c p*zW>EW JMT`9 l{ vQ ℚ~O*(Ҕ)ZaWK1RTN=|mƨǤ6e{}Qt#`=.>nSD:D% gBo_E%'k#U9X8o{,R,&gWNBkejTRuet^j64.ld61f;= 0] S7~##USˑAa@gʪ L]xZtn{K}O8S xXM\z"=y煾 Xe˵,˓r~e?cz1o*:cyot1vmʇbNeԬri a+[|U͋Xysp@DF 8ykqN2L oa9HoFG7wp]cFBՔTG-,/+˥O̭ Qw#\+$> ͠:ƩISLϹPL6LY`8j0HhnrbԾb.2+T\(|E=`9r^ym˞Áb&]XB(@c yP)rDF6ɻwhީ53;t*:U޾SeWLIPثX,Vr! T/wP_ͫe'j֪v uF*,s <':g 5ŦCɫry#F5 'q{R2&CjkHn`B[ ٘dIq^rO,ra*bZb1 ]SɢݮGGpQT^@dkD-oN 30ʚXvn &luk)IZN/?UNbư=R ;ed|>7!Nn+hJiܙ' d]]1詖x®x^\*OrA!Ӻd [S5:ѦLI[L6A1Y#cCӰCHu}H1aZ>X'v#WTz[hlJ ACeS*M'Z2&hQ1oM}~_gd{\4NhsD  cV^U\Vk$Rr'*bZԃB MZ49 "E(ӰW3yU!"|lWKjeњͷz+ IGtKIkl, (AO57ODm|䯩}B; 6b`yW vRE_k(ϲ/e3f/Kq*l%&{3q%тnC>[oEQ\xY V۷5*(닁n7#snNM\}B~_F{`걺9D¾E Dj*9DdXKR1QX/nT"?Gւ= e˞-^d,QejfnuԊpPjCF]oH܇/:ǶԔlt*d,gulOځk?~0#$!7dl8V5ct\r͛y2_崸Ǫ;Ś#X5pcߝOrktgt 78{`ifT%0򆦿AAx2?z OEFuolno 46LE,,`_$NGY+|4Dc;kʌaWZyZk&#w{Lg |R{TUHQ RYZ9#9۬ :IlQyd=K4A2*'fx0;z9Pzo5V2i >9ͪc`L8wI#{jXWFmp^|jH!Ybi#Kkcb0ɂ/݁¼v(;d(ʮκ$4-vf))0F;Cg" Cu`⌑ky˭LZmnC`ۯ%* ~gSyJpvST_7^b+ l⑹c͝dlW U1Z3ataI~t-Mfm q|q!]UJ|-8HuRTWG#ln^_8%rO0,&.ℿE-b\QޱkɌڽ2o4ޖ!ѩs1SŶ=⁄)IS{"^'AY 9>cb}Ptl]͒K_їKƆ2y*}$'N:Զ <1"ܛ߫FL\[ & hXgqr-79/rcYLd&#4~;@k9ptq՞5Q/tMekjWuvY{j4۾H߿RlyrK` _zyp_b"(ٚl,h^ՇHz _[S"5x5>`XO}\PX$/')gJtJ'P0 \,t]qy2:%[uY;׿ĥp R.d{׸p UʯHPZ2hɉ1璚_iɷ7?mcG);ȗ9(ќɞBJ/ҨrݒwӸ(\o8)HRgu=ձоEQ|S+}w~U?" NbHϯ$#Y#=@6Xfj^nt&y'ɂ`]hbGQ̢$;nmf]sxzkS&fϱNT3: crP奁-֐߹,zSJ1 :]]@b$H%k򻓇!e@Q8Hu蜃oX?0 Go{ȁGi1X,q9#=A/0]f*C6Qy:{/12wN>^|!?CiJ\NVrؗm)& ^V4 2Ąc,$їZr,@1f$d]*%8uRQ%x"#|$?an6pP/G8seyt=L<.vmX=_)PџF|hFĴ"K{^ISŪyb H;.+c$\ػh~A*aDIFlF-5_qZF/AA7MXqvBoA꒐cl^J[pt.:/aTF(zm9e u>2V+Z=+͏;)$@kDRR/L-_]*5P)DתXdj$HiaEvtd~eLA8|#ᕁNP@+:5fA;J</Hygq~u(Ҁ޵\.<̴_8썰"۵K /a˅Dkw0k]mm6'5D99ʫs[lvblbjH|"O|.!5- ѱQibQ &9U/l)+, *na@ocQ#ºI]Ʀn֞13tӢp%\uUսB]Q˸& ۴ҜćM{'h!6=fx wvпVJ+$)ؗ.гM v յjz|k֗EF.&CV }"B%y-C[ge[tɒ8l>@Ž`5o`lF݃J9m8$i~"wjئku{Qb(us!,ϭTUl`n7%9ĹVQ3b#g}2>[=Plҏ1Ov3do8ڦ:wJ|0 s VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1;'z.draw_off(self) if \rv === V_FAIL then return &null if \rv then { callback := self.callback labels := [] every i := !rv do { t := callback[i] callback := t[1] put(labels, t[2]) } return (\callback)(self, labels) | labels } return &null end ############################################################################ # Vmenu_frame ############################################################################ record Vmenu_frame_rec(win, callback, aw, ah, id, temp, drawn, lookup, draw, ax, ay, uid, P, F, V) procedure Vmenu_frame(params[]) local self static procs initial { procs := Vstd(event_Vframe, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, null_proc, couplerset_Vpane, insert_Vmenu_frame, null_proc, lookup_Vframe, set_abs_Vframe) } self := Vmenu_frame_rec ! params ## Init self.uid := Vget_uid() self.V := procs self.F := Vstd_draw() self.F.pick := pick_Vmenu_frame self.F.format := format_Vmenu_frame self.P := Vstd_pos() init_Vframe(self) self.callback := table() self.temp := open("vmenu", "g", "canvas=hidden") return self end # # Find minimum bounding encompassing frame. At the same time, set # children to be flush against left edge. # procedure format_Vmenu_frame(self, width) local maxwidth, child maxwidth := \width | Vmin_frame_width(self) every child := !self.lookup do { child.P.w := maxwidth } self.V.resize(self, 0, 0, maxwidth, Vmin_frame_height(self)) end # # Open up menu frame. Copy window on temprary binding. # Usually invoked by parent menu item. # procedure show_Vmenu_frame(self) WAttrib(self.temp, "width="||(self.aw+10), "height="||(self.ah+10)) CopyArea(self.win, self.temp, self.ax, self.ay, self.aw+5, self.ah+5, 0, 0) draw_Vframe(self) self.drawn := 1 end # # Hide menu frame. Copy contents of temporary binding back onto window. # Also invoked by parent menu item. # procedure hide_Vmenu_frame(self) CopyArea(self.temp, self.win, 0, 0, self.aw+5, self.ah+5, self.ax, self.ay) self.drawn := &null end # # Basically the event loop for the menu frame. Routes events to the # appropriate menu item. # procedure pick_Vmenu_frame(self, e, sub) local focus, rv /e := -1 if /self.drawn then show_Vmenu_frame(self) rv := V_DRAGGING repeat { focus := self.V.lookup(self, &x, &y) | &null if (e === (-4|-5|-6) & /focus) then fail else if (/sub, &y < self.ay) | (\sub, &x < self.ax) then return V_DRAGGING else if rv := (\focus).V.event(focus, e, sub) then return rv else if (e === "\^s" & /focus) then until Event(self.win) === (-1|-2|-3) ; e := Event(self.win) } end # # Put the entries into the callback table of the frame as such: if the # entry has a submenu, put its callback table and string label in, else # put the callback procedure and string label in. # procedure insert_Vmenu_frame(self, vid, x, y) local s insert_Vframe(self, vid, x, y) s := (type(vid.callback) == "table", vid.s[1:-2]) | vid.s self.callback[\vid.uid] := [vid.callback, s] end ############################################################################ # wrappers for Vsub_menu and Vmwenu_bar ############################################################################ procedure Vsub_menu(w, p[]) local frame, id, name, callback, ypos, item Vwin_check(w, "Vsub_menu()") frame := Vmenu_frame(w) id := ypos := 1 while \(name := pop(p)) do { callback := pop(p) | &null if type(\name) ~== "string" & not numeric(name) then _Vbomb("Invalid label passed to Vsub_menu().") image(callback) ? { if ="function" then _Vbomb("Icon function" || tab(0) || "() not allowed as callback from sub_menu item.") } item := Vmenu_item(w, name, callback, id) VInsert(frame, item, 1, ypos) id +:= 1 ypos +:= item.ah } VFormat(frame) return frame end procedure Vmenu_bar(p[]) local parent, x, y, ins, frame, id, name, submenu, xpos, item, win if ins := Vinsert_check(p) then { parent := pop(p); x := pop(p); y:= pop(p) } win := pop(p) Vwin_check(win, "Vmenu_bar()") frame := Vframe(win) xpos := id := 1 while name := pop(p) do { submenu := pop(p) | &null if type(\name) ~== "string" & not numeric(name) then _Vbomb("Invalid label passed to Vmenu_bar().") if type(\submenu) ~== "Vmenu_frame_rec" then _Vbomb("Invalid menu parameter to Vmenu_bar().") item := Vmenu_bar_item(win, name, , id, , , submenu ) VInsert(frame, item, xpos, 1) id +:= 1 xpos +:= item.aw } VFormat(frame) frame.V.outline := null_proc if \ins then VInsert(parent, frame, x, y) return frame end ############################################################################ # Vpull_down_button ############################################################################ record Vpull_down_button_rec (win, callback, id, sz, pd, data, s, style, aw, ah, ax, ay, abx, uid, P, D, V) procedure Vpull_down_button(params[]) local self local frame, x, y, ins static procs initial procs := Vstd(event_Vpull_down_button, draw_Vpull_down_button, outline_Vpane, resize_Vpull_down_button, inrange_Vpane, init_Vpull_down_button, couplerset_Vpull_down_button,,,,, set_value_Vpull_down_button) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vpull_down_button_rec ! params self.uid := Vget_uid() if type(self.pd) ~== "Vmenu_frame_rec" then _Vbomb("Vpull_down_button must be created with a Vpull_down") Vset_style(self, V_2D) self.V := procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vpull_down_button(self) self.s := self.data[1:self.sz|0] self.D.draw_off(self) draw_Vpull_down_button_off(self) end procedure draw_Vpull_down_button_arrow(self) local x, y, sz x := self.ax+self.abx; y := self.ay; sz := self.ah FillPolygon(self.win, x+0.1*sz, y+0.2*sz, x+0.9*sz, y+0.2*sz, x+0.5*sz, y+0.9*sz, x+0.1*sz, y+0.2*sz) end procedure draw_Vpull_down_button_off(self) local x, y x := self.ax; y := self.ay EraseArea(self.win, x+self.abx+1, y+1, self.aw-self.abx-1, self.ah-1) DrawRectangle(self.win, x+self.abx, y, self.aw-self.abx, self.ah) draw_Vpull_down_button_arrow(self) end procedure draw_Vpull_down_button_on(self) FillRectangle(self.win, self.ax+self.abx+1, self.ay+1, self.aw-self.abx, self.ah) WAttrib(self.win, "reverse=on") draw_Vpull_down_button_arrow(self) WAttrib(self.win, "reverse=off") end procedure resize_Vpull_down_button(self, x, y, w, h) resize_Vpane(self, x, y, w, h) self.pd.F.format(self.pd, self.aw) self.pd.V.resize(self.pd, self.ax, self.ay+self.ah) end procedure couplerset_Vpull_down_button(self, name, value) self.D.draw_off(self) end procedure event_Vpull_down_button(self, e) local rv if \self.callback.locked then fail draw_Vpull_down_button_on(self) show_Vmenu_frame(\self.pd) rv := V_DRAGGING repeat { if \e === (-4|-5|-6) then rv := &null else if self.V.inrange(self, &x, &y) then rv := V_DRAGGING else if (self.ax <= &x <= self.ax+self.aw) & (&y >= self.ay+self.ah) then rv := (\self.pd).F.pick(self.pd, e) if \rv === V_DRAGGING then { e := Event(self.win) rv := &null } else break1 8 VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1 } if rv === V_FAIL then rv := &null draw_Vpull_down_button_off(self) hide_Vmenu_frame(\self.pd) if \rv then { self.data := self.pd.callback[rv[1]][2] self.V.draw(self) self.callback.V.set(self.callback, self, self.data) return self.data } end procedure set_value_Vpull_down_button(self, value) self.data := \value | "" end procedure init_Vpull_down_button(self) local p /self.data := "" self.s := self.data /self.sz := 24 self.aw := WAttrib(self.win, "fwidth")*self.sz + 8 self.ah := WAttrib(self.win, "fheight") self.abx := self.aw # make little arrow box on end. self.aw +:= WAttrib(self.win, "fheight") p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) self.D.init(self) self.D.basex := 4 end ############################################################################ # Utilities. ############################################################################ # # Well this is a wrapper for combining a Vpull_down and a # Vpull_down_button. # # Vpull_down_pick_menu([frame, x, y, ] w, s, callback, id, size, centered) # # s - a list of string labels for the entries. # size - is the number of charcters in the data field to be displayed. # centered - non-&null if entries are centered in pull_down. # procedure Vpull_down_pick_menu(params[]) local frame, x, y, ins, pd, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } put(params); put(params); put(params); put(params); Vwin_check(params[1], "Vpull_down_pick_menu()") pd := Vpull_down ! (params[1:3] ||| [\params[6] | &null]) self := Vpull_down_button ! ([params[1]] ||| params[3:6] ||| [pd]) if \ins then VInsert(frame, self, x, y) return self end # # Vpulldown(..) produces a pull-down list, invoked by # # obj.F.pick(obj) # # returns the string value of the object picked. # # p[] is a list of strings to enter into the list; # centered is &null for right justified entries, 1 for centered. # # (This procedure does not support the optional VInsert parameters.) # procedure Vpull_down(win, s, centered) local cv, frame, id, name, style, ypos local max, i, TW, FH, item, string_list Vwin_check(win, "Vpull_down()") if type(s) ~== "list" then _Vbomb("s parameter to Vpull_down must be a list of strings.") frame := Vmenu_frame(win) ypos := id := 1 if \centered then { max := 0 every i := !s do max <:= (TextWidth(win, i) + 6) } string_list := copy(s) while name := pop(string_list) do { name := \name | "" item := Vmenu_item(win, name, , name, max) VInsert(frame, item, 1, ypos) id +:= 1 ypos +:= item.ah } VFormat(frame) return frame end #=============================================== /home/icon/libsrc/vscroll.icn ############################################################################ # # File: vscroll.icn # # Subject: Procedures for scrollbars # # Author: Jon Lipp # # Date: May 20, 1994 # ############################################################################ # # Vidgets defined in this file: # Vup_arrow # Vdown_arrow # Vright_arrow # Vleft_arrow # Vvthumb # Vhthumb # Vscrollbar_frame # # Utility procedures in this file: # Vvert_scrollbar() # Vhoriz_scrollbar() # reformat_Vhthumb() # reformat_Vvthumb() # Vreformat_vscrollbar() # Vreformat_hscrollbar() # VReformat() # ############################################################################ ############################################################################ # arrow procedures ############################################################################ procedure event_Varrow(s,e) local c, prev, new if \s.callback.locked then fail if e === (-1|-2|-3) then { WAttrib(s.win, "reverse=on") s.V.draw(s) WAttrib(s.win, "reverse=off") s.callback.V.set(s.callback, s, prev := press_Varrow(s)) delay(200) while *Pending(s.win) = 0 | Event() == (-7|-8|-9) do { new := press_Varrow(s) if new ~= prev then s.callback.V.set(s.callback, s, prev := new) delay(40) } s.V.draw(s) return \(s.callback.value) } end procedure draw_Varrow(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) VnormPlot ! ([s, FillPolygon] ||| s.pnts) s.V.outline(s) end procedure press_Varrow(s) return s.incop(s.callback.value, s.callback.inc) end procedure init_Varrow(s) if /s.aw then _Vbomb("must specify a size for a Varrow") /s.ah := s.aw s.id := V_ARROW end ############################################################################ # down, up, left, right arrows. ############################################################################ record Varrow_rec(win, callback, aw, ah, rev, incop, pnts, id, ax, ay, uid, P, V) procedure Vmake_arrow(params[]) local frame, x, y, ins, self, init_proc init_proc := pop(params) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Varrow_rec ! params[1:6|0] self.uid := Vget_uid() self.V := Vstd(event_Varrow, draw_Varrow, outline_Vpane, resize_Vpane, inrange_Vpane, init_proc, couplerset_Vpane) self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure Vup_arrow(params[]) push (params, init_Vup_arrow) return Vmake_arrow ! params end procedure Vdown_arrow(params[]) push (params, init_Vdown_arrow) return Vmake_arrow ! params end procedure Vleft_arrow(params[]) push (params, init_Vleft_arrow) return Vmake_arrow ! params end procedure Vright_arrow(params[]) push (params, init_Vright_arrow) return Vmake_arrow ! params end procedure init_Vdown_arrow(s) s.incop := (\s.rev, proc("-", 2)) | proc("+", 2) s.pnts := [.5, .8, .8, .2, .2, .2, .5, .8] init_Varrow(s) end procedure init_Vup_arrow(s) s.incop := (\s.rev, proc("+", 2)) | proc("-", 2) s.pnts := [.5, .2, .8, .8, .2, .8, .5, .2] init_Varrow(s) end procedure init_Vright_arrow(s) s.incop := (\s.rev, proc("-", 2)) | proc("+", 2) s.pnts := [.2, .2, .8, .5, .2, .8, .2, .2] init_Varrow(s) end procedure init_Vleft_arrow(s) s.incop := (\s.rev, proc("+", 2)) | proc("-", 2) s.pnts := [.8, .2, .8, .8, .2, .5, .8, .2] init_Varrow(s) end ############################################################################ # Vvthumb ############################################################################ record Vthumb_rec (win, callback, id, aw, ah, win_sz, tot_sz, discont, ax, ay, uid, P, S, V) procedure Vvthumb(params[]) local frame, x, y, ins, self static procs initial procs := Vstd(event_Vvthumb, draw_Vvthumb, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vvthumb, couplerset_Vvthumb,,,,,set_value_Vvthumb) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vthumb_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.S.type := 1 self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end # # debugging statement-- # # write("draw: val ", val, " cv value ", s.callback.value, " cv min ", # s.callback.min, " ws ", s.ws, " cv range ", s.cv_range) # procedure draw_Vvthumb(s) local val s.S.drawn := 1 s.V.outline(s) DrawRectangle(s.win, s.ax+s.S.sp, s.ay, s.S.sw, s.ah) val := integer((s.callback.value - s.ca2 mn VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1Tllback.min) * s.S.ws / s.S.cv_range ) if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 s.S.oldpos := val FillRectangle(s.win, s.ax+2, s.ay+val, s.S.tw+1, s.S.th+1) end procedure event_Vvthumb(s, e) local value, offset if \s.callback.locked then fail # s.old_th := &null if e === (-1|-2|-3) then { offset := (s.S.oldpos < &y-s.ay < s.S.oldpos+s.S.th, &y-(s.S.oldpos+s.ay)) | ( s.S.oldpos+s.S.th <= &y-s.ay, s.S.th-1) | 0 until e === (-4|-5|-6) do { value := ((&y - offset - s.ay-1)/(0 ~= s.S.ws)) * s.S.cv_range | 0 if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.S.frame.data := s.callback.value update_Vvthumb(s) e := Event(s.win) } if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return \(s.callback.value) } end procedure update_Vvthumb(s) local val, op, tw, th, sw, sp val := integer((s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range) if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 op := s.S.oldpos; tw := s.S.tw; th := s.S.th sp := s.S.sp; sw := s.S.sw if op < val < op + th then { EraseArea(s.win, s.ax+2, s.ay+op, tw+1, val-op+1) DrawSegment(s.win, s.ax+sp, s.ay+op, s.ax+sp, s.ay+val, s.ax+sp+sw, s.ay+op, s.ax+sp+sw, s.ay+val) FillRectangle(s.win, s.ax+2, s.ay+op+th, tw+1, val-op+1) } else if op-th < val < op then { EraseArea(s.win, s.ax+2, s.ay+val+th, tw+1, op-val+1) DrawSegment(s.win, s.ax+sp, s.ay+val+th, s.ax+sp, s.ay+op+th+1, s.ax+sp+sw, s.ay+val+th, s.ax+sp+sw, s.ay+op+th+1) FillRectangle(s.win, s.ax+2, s.ay+val, tw+1, op-val+1) } else if op ~= val then { EraseArea(s.win, s.ax+2, s.ay+op, tw+1, th+1) DrawSegment(s.win, s.ax+sp, s.ay+op, s.ax+sp, s.ay+op+th+1, s.ax+sp+sw, s.ay+op, s.ax+sp+sw, s.ay+op+th+1) FillRectangle(s.win, s.ax+2, s.ay+val, tw+1, th+1) } s.S.oldpos := val end procedure set_value_Vvthumb(s, value) couplerset_Vvthumb(s, , value) end procedure couplerset_Vvthumb(s, caller, value) value := numeric(value) | s.callback.min if (\caller).id === V_ARROW then caller := s else if value === s.callback.value then fail s.S.frame.data := s.callback.value if \s.S.drawn then update_Vvthumb(s) end procedure init_Vvthumb(s) if /s.aw | /s.ah then _Vbomb("must specify width and height for Vvthumb") if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vvthumb requires a coupler variable callback") s.S.sw := 3 s.S.sp:= (s.aw - s.S.sw) / 2 s.S.tw := s.aw - 4 \s.win_sz <:= 0 if /s.win_sz then s.S.th := s.S.tw-1 else s.S.th := ( s.S.tw < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.ah) ) | s.S.tw-1 s.S.ws := 0 < real(s.ah - s.S.th - 2) | 0 s.S.cv_range := (0 < s.callback.max - s.callback.min | 1.0) end ############################################################################ # Vhthumb ############################################################################ procedure Vhthumb(params[]) local frame, x, y, ins, self static procs initial procs := Vstd(event_Vhthumb, draw_Vhthumb, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vhthumb, couplerset_Vhthumb,,,,,set_value_Vhthumb) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vthumb_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.S := Vstd_scrollbar() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vhthumb(s) local val s.S.drawn := 1 s.V.outline(s) DrawRectangle(s.win, s.ax+0, s.ay+s.S.sp, s.aw, s.S.sw) val := (s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 s.S.oldpos := val FillRectangle(s.win, s.ax+val, s.ay+2, s.S.tw+1, s.S.th+1) end procedure event_Vhthumb(s, e) local value, offset if \s.callback.locked then fail if e === (-1|-2|-3) then { offset := (s.S.oldpos < &x-s.ax < s.S.oldpos+s.S.tw, &x-(s.S.oldpos+s.ax)) | ( s.S.oldpos+s.S.tw <= &x-s.ax, s.S.tw-1) | 0 until e === (-4|-5|-6) do { value := ((&x - offset - s.ax-1)/(0 ~= s.S.ws)) * s.S.cv_range | 0 if \s.S.rev then s.callback.V.set(s.callback, s, s.callback.max - value, s.discont) else s.callback.V.set(s.callback, s, s.callback.min + value, s.discont) s.S.frame.data := s.callback.value update_Vhthumb(s) e := Event(s.win) } if \s.discont then s.callback.V.set(s.callback, s, s.callback.value) return \(s.callback.value) } end procedure update_Vhthumb(s) local val, op, tw, th, sw, sp val := integer((s.callback.value - s.callback.min) * s.S.ws / s.S.cv_range) if \s.S.rev then val := s.S.ws - val + 1 else val +:= 1 op := s.S.oldpos; tw := s.S.tw; th := s.S.th sp := s.S.sp; sw := s.S.sw if op < val < op + tw then { EraseArea(s.win, s.ax+op, s.ay+2, val-op+1, th+1) DrawSegment(s.win, s.ax+op, s.ay+sp, s.ax+val, s.ay+sp, s.ax+op, s.ay+sp+sw, s.ax+val, s.ay+sp+sw) FillRectangle(s.win, s.ax+op+tw, s.ay+2, val-op+1, th+1) } else if op-tw < val < op then { EraseArea(s.win, s.ax+val+tw, s.ay+2, op-val+1, th+1) DrawSegment(s.win, s.ax+val+tw, s.ay+sp, s.ax+op+tw+1, s.ay+sp, s.ax+val+tw, s.ay+sp+sw, s.ax+op+tw+1, s.ay+sp+sw) FillRectangle(s.win, s.ax+val, s.ay+2, op-val+1, th+1) } else if op ~= val then { EraseArea(s.win, s.ax+op, s.ay+2, tw+1, th+1) DrawSegment(s.win, s.ax+op, s.ay+sp, s.ax+op+tw+1, s.ay+sp, s.ax+op, s.ay+sp+sw, s.ax+op+tw+1, s.ay+sp+sw) FillRectangle(s.win, s.ax+val, s.ay+2, tw+1, th+1) } s.S.oldpos := val end procedure set_value_Vhthumb(s, value) couplerset_Vhthumb(s, s, value) end procedure couplerset_Vhthumb(s, caller, value) value := numeric(value) | s.callback.min if (\caller).id === V_ARROW then caller := s else if value === s.callback.value then fail s.S.frame.data := s.callback.value if \s.S.drawn then update_Vhthumb(s) end procedure init_Vhthumb(s) if /s.aw | /s.ah then _Vbomb("must specify width and height for Vhthumb") if /s.callback | type(s.callback) == "procedure" then _Vbomb("Vhthumb requires a coupler variable callback") s.S.sw := 3 s.S.sp := (s.ah - s.S.sw) / 2 s.S.th := s.ah - 4 \s.win_sz <:= 0 if /s.win_sz then s.S.tw := s.S.th-1 else s.S.tw := ( s.S.th < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.aw) ) | s.S.th-1 s.S.ws := 0 < real(s.aw - s.S.tw - 2) | 0 s.S.cv_range := (0 < s.callback.max - s.callback.min | 1.0) end ############################################################################ # Vscrollbar_frame ############################################################################ record Vscrollbar_frame_rec(win, callback, id, aw, ah, lookup, draw, uid, data, thumb, ax, ay, P, V) procedure Vscrollbar_frame(params[]) local self, procs procs := Vstd(event_Vframe, draw_Vframe, outline_Vpane, resize_V3 , VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1frame, inrange_Vpane, init_Vframe, couplerset_Vpane, insert_Vframe, remove_Vframe, lookup_Vframe, set_abs_Vframe) self := Vscrollbar_frame_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.V.init(self) return self end # # These are the middle-man procedures between the scrollbar frame # and the thumb. # procedure couplerset_Vhscrollbar(s, caller, value) couplerset_Vhthumb(s.thumb, caller, value) end procedure set_value_Vhscrollbar(s, value) set_value_Vhthumb(s.thumb, value) end procedure couplerset_Vvscrollbar(s, caller, value) couplerset_Vvthumb(s.thumb, caller, value) end procedure set_value_Vvscrollbar(s, value) set_value_Vvthumb(s.thumb, value) end ############################################################################ # Vertical scrollbar ############################################################################ procedure Vvert_scrollbar(params[]) local frame, x, y, ins, t, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vmake_vscrollbar ! params self.uid := Vget_uid() if \ins then VInsert(frame, self, x, y) return self end procedure Vmake_vscrollbar(win, callback, id, length, width, min, max, inc, win_sz, discont) local cv, cb, frame, up, down, thumb, tot_sz local r, rev, in_max Vwin_check(win, "Vvert_scrollbar()") if (\win_sz, not numeric(win_sz) | win_sz < 0 ) then _Vbomb("Negative or non-numeric window_size parameter to Vvert_scrollbar().") if (\inc, not numeric(inc) | inc < 0 ) then _Vbomb("Negative or non-numeric increment parameter to Vvert_scrollbar().") if (\length, not numeric(length) ) then _Vbomb("Invalid length parameter to Vvert_scrollbar().") if (\width, not numeric(width) ) then _Vbomb("Invalid width parameter to Vvert_scrollbar().") /width := 15 /min := 0 /max := 1.0 rev := 1 if max < min then { max :=: min; rev := &null } in_max := max max -:= (\win_sz | 0) max <:= min tot_sz := 0 < abs(in_max-min) | 1 r := (type(min|max) == "real", 1) if (not numeric(\inc) ) | /inc then inc := 0.1*abs(max-min) (/r, inc := integer(inc), inc <:= 1) cv := Vrange_coupler(min, max, , inc) frame := Vscrollbar_frame(win, cv, id, width, length) Vup_arrow(frame, 0, 0, win, cv, width, width, rev) thumb := Vvthumb(frame, 0, width, win, cv, id, width, length - 2*width, win_sz, tot_sz, discont) Vdown_arrow(frame, 0, width+thumb.ah, win, cv, width, width, rev) thumb.S.rev := rev cv.V.add_client(cv, thumb) add_clients_Vinit(cv, callback, thumb) thumb.S.frame := frame frame.thumb := thumb frame.V.couplerset := couplerset_Vvscrollbar frame.V.set_value := set_value_Vvscrollbar return frame end ############################################################################ # Horizontal scrollbar ############################################################################ procedure Vhoriz_scrollbar(params[]) local frame, x, y, ins, t, self if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vmake_hscrollbar ! params self.uid := Vget_uid() if \ins then VInsert(frame, self, x, y) return self end procedure Vmake_hscrollbar(win, callback, id, length, width, min, max, inc, win_sz, discont) local cv, cb, frame, up, down, thumb, tot_sz local r, rev, in_max Vwin_check(win, "Vhoriz_scrollbar().") if (\win_sz, not numeric(win_sz) | win_sz < 0 ) then _Vbomb("Negative or non-numeric window_size parameter to Vhoriz_scrollbar().") if (\inc, not numeric(inc) | inc < 0 ) then _Vbomb("Negative or non-numeric increment parameter to Vhoriz_scrollbar().") if (\length, not numeric(length) ) then _Vbomb("Invalid length parameter to Vhoriz_scrollbar().") if (\width, not numeric(width) ) then _Vbomb("Invalid width parameter to Vhoriz_scrollbar().") /width := 15 /min := 0 /max := 1.0 if max < min then {max :=: min; rev := 1 } in_max := max max -:= (\win_sz | 0) max <:= min tot_sz := 0 < abs(in_max-min) | 1 r := (type(min|max) == "real", 1) if (not numeric(\inc) ) | /inc then inc := 0.1*abs(max-min) (/r, inc := integer(inc), inc <:= 1) cv := Vrange_coupler(min, max, , inc) frame := Vscrollbar_frame(win, cv, id, length, width) Vleft_arrow(frame, 0, 0, win, cv, width, width, rev) thumb := Vhthumb(frame, width, 0, win, cv, id, length - 2*width, width, win_sz, tot_sz, discont) Vright_arrow(frame, width+thumb.aw, 0, win, cv, width, width, rev) thumb.S.rev := rev cv.V.add_client(cv, thumb) add_clients_Vinit(cv, callback, thumb) thumb.S.frame := frame frame.thumb := thumb frame.V.couplerset := couplerset_Vhscrollbar frame.V.set_value := set_value_Vhscrollbar return frame end ############################################################################ # reformatting procedures. Will just reformat width and length. # (Aug 6) ############################################################################ procedure reformat_Vvthumb(s, length, width) s.P.w := s.aw := \width s.P.h := s.ah := \length s.S.sp := (s.aw - s.S.sw) / 2 s.S.tw := s.aw - 4 if /s.win_sz then s.S.th := s.S.tw-1 else s.S.th := ( s.S.tw < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.ah) ) | s.S.tw-1 s.S.ws := 0 < real(s.ah - s.S.th - 2) | 0 end procedure reformat_Vhthumb(s, length, width) s.P.w := s.aw := length s.P.h := s.ah := width s.S.sp := (s.ah - s.S.sw) / 2 s.S.th := s.ah - 4 if /s.win_sz then s.S.tw := s.S.th-1 else s.S.tw := ( s.S.th < integer( ((1.0 >= real(s.win_sz)/s.tot_sz) | 1.0)\1 * s.aw) ) | s.S.th-1 s.S.ws := 0 < real(s.aw - s.S.tw - 2) | 0 end procedure Vreformat_vscrollbar(self, length, width) local up, down, thumb /width := self.aw /length := self.ah self.aw := self.P.w := width self.ah := self.P.h := length up := self.lookup[1] thumb := self.lookup[2] down := self.lookup[3] VRemove(self, up, 1) VRemove(self, thumb, 1) VRemove(self, down, 1) down.aw := down.ah := up.aw := up.ah := down.P.w := down.P.h := up.P.w := up.P.h := width reformat_Vvthumb(thumb, length -2*width, width) VInsert(self, up, 0, 0) VInsert(self, thumb, 0, width) VInsert(self, down, 0, width + thumb.ah) end procedure Vreformat_hscrollbar(self, length, width) local left, right, thumb /width := self.ah /length := self.aw self.aw := self.P.w := length self.ah := self.P.h := width left := self.lookup[1] thumb := self.lookup[2] right := self.lookup[3] VRemove(self, left, 1) VRemove(self, thumb, 1) VRemove(self, right, 1) left.aw := left.ah := right.aw := right.ah := left.P.w := left.P.h := right.P.w := right.P.h := width reformat_Vhthumb(thumb, length -2*width, width) VInsert(self, left, 0, 0) VInsert(self, thumb, width, 0) VInsert(self, right, width + thumb.aw) end ############################################################################ # interface procedure for Vreformat ############################################################################ procedure VReformat(scrollbar, length, width) if /scrollbar | type(scrollbar) ~== "Vscrollbar_frame_rec" then _Vbomb("Invalid scrollbar parameter to VReformat().") if \(scrollbar.thumb.S.type) then 4 C7l VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1I Vreformat_vscrollbar(scrollbar, length, width) else Vreformat_hscrollbar(scrollbar, length, width) end #================================================= /home/icon/libsrc/vtext.icn ############################################################################ # # File: vtext.icn # # Subject: Procedures for textual vidgets # # Author: Jon Lipp # # Date: May 26, 1994 # ############################################################################ # # Vidgets defined in this file: # Vtext # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ ############################################################################ # Vtext ############################################################################ record Vstd_text(draw_cursor, erase_cursor, draw_data, unblock, block, DataPixelSize, MaxPixelSize, NumericData, CursorPos, DataLength, OldCursorPos, CursorOn, ta, tb, cwin, rwin, dx, dy) record Vtext_rec (win, s, callback, id, MaxChars, mask, data, uid, ax, ay, aw, ah, T, P, V) procedure Vtext(params[]) local frame, x, y, ins, self static procs initial { procs := Vstd(event_Vtext, draw_Vtext, outline_Vtext, resize_Vpane, inrange_Vpane, init_Vtext, couplerset_Vtext,,,,, set_value_Vtext) } if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vtext_rec ! params[1:7|0] Vwin_check(self.win, "Vtext()") if (\self.MaxChars, not numeric(self.MaxChars) ) then _Vbomb("Invalid size parameter to Vtext().") if type(\self.mask) ~== "cset" then _Vbomb("Invalid mask parameter to Vtext().") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("Invalid prompt passed to Vtext().") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.T := Vstd_text(draw_cursor_Vtext, erase_cursor_Vtext, draw_data_Vtext, unblock_Vtext, block_Vtext) init_Vtext(self) if \ins then VInsert(frame, self, x, y) return self end # # Initialization # procedure init_Vtext(self) local p ## PMIcon fix self.T.cwin := Clone(self.win, "drawop=reverse", "linewidth=1") # self.T.cwin := Clone(self.win, "drawop=xor", "linewidth=1") self.T.rwin := Clone(self.win, "reverse=on") /self.s := "" /self.MaxChars := 18 self.s ? if self.s := tab(find("\\=")) then ="\\=" & self.data := tab(0) /self.data := "" if *self.data > self.MaxChars then self.data := self.data[1:self.MaxChars] self.T.DataLength := *self.data self.T.MaxPixelSize := WAttrib(self.win, "fwidth")*self.MaxChars # /self.T.MaxPixelSize := 250 ## check max length by pixel size. # if TextWidth(self.win, self.data) > self.T.MaxPixelSize then { # t := get_pos_Vtext(self, self.T.MaxPixelSize) # self.data := self.data[1:t] # } # self.T.DataLength := *self.data self.T.DataPixelSize := TextWidth(self.win, self.data) ## size by characters - taken out. /self.mask := &cset ## initialize with cursor at end self.T.ta := self.T.tb := self.T.CursorPos := self.T.DataLength + 1 ## initialize with all data blocked out (selected) # self.T.ta := 1 # self.T.tb := self.T.CursorPos := self.T.DataLength + 1 self.T.dx := TextWidth (self.win, self.s) + 4 self.aw := self.T.dx + self.T.MaxPixelSize + 4 self.ah := WAttrib(self.win, "fheight") + 4 self.T.dy := self.ah - 2 - WAttrib(self.win, "descent") p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) end # # Draw the prompt, the data, outline the data area, then draw # the cursor if it was already on previous to calling this # procedure (happens with dialog boxes and resize events). # procedure draw_Vtext(self) local t t := self.T.CursorOn self.T.CursorOn := &null draw_prompt_Vtext(self) draw_data_Vtext(self) outline_Vtext(self) if \t then draw_cursor_Vtext(self) end # # Outline the data field. # procedure outline_Vtext(self) DrawRectangle(self.win, self.ax+self.T.dx-4, self.ay, self.aw-(self.T.dx-4), self.ah) end # # Draw the prompt. # procedure draw_prompt_Vtext(self) GotoXY(self.win, self.ax, self.ay+self.T.dy) writes(self.win, self.s) return end # # Since the cursor is drawn in "xor" mode, erase it only if # ("reverse" in PMIcon) # is "on" upon entering this procedure. # procedure erase_cursor_Vtext(self) local ocx, cy if /self.T.CursorOn then fail ocx := self.T.OldCursorPos ## Housefly cursor # cy := self.ay+self.T.dy # DrawLine(self.T.cwin, \ocx-3, cy+5, ocx, cy, ocx+3, cy+5) ## straight line cursor # DrawLine(self.T.cwin, \ocx, self.ay+2, ocx, self.ay+self.ah-2) ## bracket cursor DrawSegment(self.T.cwin, \ocx-2, self.ay+2, ocx+2, self.ay+2, ocx, self.ay+3, ocx, self.ay+self.ah-3, ocx-2, self.ay+self.ah-2, ocx+2, self.ay+self.ah-2) self.T.CursorOn := &null end # # Draw the cursor only if it was previously "off" at this location. # procedure draw_cursor_Vtext(self) local ocx, cx, cy if \self.T.CursorOn then fail cx := self.ax+self.T.dx + get_pixel_pos_Vtext(self, self.T.CursorPos) - 1 ## Housefly cursor # cy := self.ay+self.T.dy # DrawLine(self.T.cwin, cx-3, cy+5, cx, cy, cx+3, cy+5) ## straight line cursor # DrawLine(self.T.cwin, cx, self.ay+2, cx, self.ay+self.ah-2) ## bracket cursor DrawSegment(self.T.cwin, \cx-2, self.ay+2, cx+2, self.ay+2, cx, self.ay+3, cx, self.ay+self.ah-3, cx-2, self.ay+self.ah-2, cx+2, self.ay+self.ah-2) self.T.OldCursorPos := cx self.T.CursorOn := 1 end # # De-block the data (reset ta and tb to CursorPos). # procedure unblock_Vtext(self) self.T.ta := self.T.CursorPos := self.T.tb draw_data_Vtext(self) end # # Block (select) all the data # procedure block_Vtext(self) self.T.ta := 1 self.T.tb := self.T.CursorPos := self.T.DataLength + 1 draw_data_Vtext(self) if self.T.DataLength = 0 then draw_cursor_Vtext(self) end # # Draw the data, reversing that text that lies between ta and tb # fields. # procedure draw_data_Vtext(self) # if self.T.ta = self.T.tb then return erase_cursor_Vtext(self) GotoXY(self.win, self.ax+self.T.dx, self.ay+self.T.dy) if self.T.ta <= self.T.tb then { writes(self.win, self.data[1:self.T.ta]) writes(self.T.rwin, self.data[self.T.ta:self.T.tb]) writes(self.win, self.data[self.T.tb:0]) } else { writes(self.win, self.data[1:self.T.tb]) writes(self.T.rwin, self.data[self.T.tb:self.T.ta]) writes(self.win, self.data[self.T.ta:0]) } EraseArea(self.win, self.ax+self.T.dx+self.T.DataPixelSize, self.ay+1, self.aw-(self.T.dx +self.T.DataPixelSize+1), self.ah-1) return end # # Wow. Mouse events, block out text, key presses, enter, delete # etcetera stuff. Call callback if linefeed key or return key # is pressed. # procedure event_Vtext(self, e, x, y) static ota local otb, rv if \self.callback.locked then fail /x := &x; /y := &y self.T.DataLength := *self.data if e === (-1|-2|-3) then { WAttrib(self.win, "pointer=xterm") otb := self.T.ta := self.T.tb := self.T.CursorPos := get_pos_Vtext(self, &x-(self.ax+self.T.dx)) if otb = self.T.DataLength+1 & otb = \ota then self.T.ta := 1 draw_data_Vtext(self) draw_cursor_Vtext(self) until e === (-4|-5|-6) do { self.T.tb := get_pos_Vtext(self, &x-(self.ax+self.T.dx)) if otb ~=5 "4 VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1X self.T.tb then { draw_data_Vtext(self) self.T.CursorPos := self.T.tb draw_cursor_Vtext(self) otb := self.T.tb } e := Event(self.win) } rv := &null WAttrib(self.win, "pointer=top left arrow") } ## end mouse event loop else if (not &meta) & (not (integer(e) < 0)) then { ## its a keypress if rv := case e of { "\^b"| 65361: move_cursor_Vtext(self, -1) "\^f"| 65363: move_cursor_Vtext(self, 1) "\b" | "\d" : delete_left_Vtext(self) "\^k" : delete_line_Vtext(self) 65362 : return V_PREVIOUS ## up arrow "\r" : { ## return key self.callback.V.set(self.callback, self, self.data) V_NEXT } "\l" : self.callback.V.set(self.callback, self, self.data) "\t"|65364 : return V_NEXT ## tab key or down key default: insert_char_Vtext(self, e) } ## end case then { draw_data_Vtext(self) draw_cursor_Vtext(self) self.T.ta := self.T.tb := self.T.CursorPos } } else fail # not our event ota := self.T.ta return rv end # Move the cursor one way or another, determine if at bounds. # procedure move_cursor_Vtext(self, increment) local t t := self.T.CursorPos + increment if t < 1 | t > self.T.DataLength+1 then fail self.T.ta := self.T.tb := self.T.CursorPos := t return end # # Blank out the whole data field. # procedure delete_line_Vtext(self) self.data := "" self.T.DataLength := *self.data self.T.DataPixelSize := 0 self.T.ta := self.T.tb := self.T.CursorPos := 1 return end # # Get the character position based on mouse x coordinate. # procedure get_pos_Vtext(self, x) local tp, c, i, j c := 1 i := j := 0 while i < x do { j := i i +:= TextWidth(self.win, self.data[c]) if (c +:= 1) > self.T.DataLength then break } if x <= ((i + j) / 2) then c -:= 1 # less than halfway into the char if i < x then tp := self.T.DataLength+1 else tp := (1 <= c) | 1 return tp end # # Get pixel position in data field based on character position. # procedure get_pixel_pos_Vtext(self, CursorPos) local sum, i sum := 0 every i := 1 to CursorPos-1 do sum +:= TextWidth(self.win, self.data[i]) return sum end # # Insert a character; could replace blocked out text. Check if # insertion will go over bounds. # procedure insert_char_Vtext(self, c) c := c[1] ## determine bounds by pixel size. # if (self.T.DataPixelSize - TextWidth(self.win, self.data[self.T.ta:self.T.tb]) + # TextWidth(self.win, c) ) > self.T.MaxPixelSize | # not (c ? any(self.mask)) then fail if (self.T.DataLength - abs(self.T.ta-self.T.tb) + 1) > self.MaxChars | not (c ? any(self.mask)) then fail if self.T.ta ~= self.T.tb then change_data_Vtext(self, c) else self.data := self.data[1:self.T.CursorPos] || c || self.data[self.T.CursorPos:0] self.T.DataLength := *self.data self.T.DataPixelSize := TextWidth(self.win, self.data) self.T.CursorPos +:= 1 return end # # Replace a character at current position. # procedure change_data_Vtext(self, c) if self.T.tb < self.T.ta then { self.data := self.data[1:self.T.tb] || (\c | "") || self.data[self.T.ta:0] self.T.ta := self.T.CursorPos := self.T.tb } else { self.data := self.data[1:self.T.ta] || (\c | "") || self.data[self.T.tb:0] self.T.tb := self.T.CursorPos := self.T.ta } end # # Delete the character to the left of the cursor. # procedure delete_left_Vtext(self) if self.T.ta ~= self.T.tb then { change_data_Vtext(self) self.T.DataPixelSize := TextWidth(self.win, self.data) return } else if self.T.CursorPos > 1 then { self.data := self.data[1:self.T.CursorPos-1] || self.data[self.T.CursorPos:0] self.T.DataPixelSize := TextWidth(self.win, self.data) self.T.CursorPos -:= 1 return } end # # Set the data field to value passed in. # NOTE: doesn't pass it through mask right now. # Call callback if value if different from internal coupler's # value. # procedure couplerset_Vtext(self, caller, value) local data data := string(\value) | "" self.data := data if *self.data > self.MaxChars then self.data := self.data[1:self.MaxChars] self.T.DataLength := *self.data self.T.DataPixelSize := TextWidth(self.win, self.data) ## initialize with cursor at end self.T.ta := self.T.tb := self.T.CursorPos := self.T.DataLength + 1 ## initialize with all data blocked out (selected) # self.T.ta := 1 # self.T.tb := self.T.CursorPos := self.T.DataLength + 1 draw_data_Vtext(self) if numeric(value) then { if value = \self.T.NumericData then fail self.T.NumericData := value } else if data === self.data then fail self.callback.V.set(self.callback, caller, value) # draw_cursor_Vtext(self) end # # Call couplerset to set value. # procedure set_value_Vtext(self, value) couplerset_Vtext(self, , value) return end #============================================== /home/icon/libsrc/vbuttons.icn ############################################################################ # # File: vbuttons.icn # # Subject: Procedures for buttons # # Author: Jon Lipp # # Date: May 26, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vbutton # Vtoggle # Vcheckbox (obsolete) # Vmessage # Vline # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: vstyle # ############################################################################ #====== link vstyle ############################################################################ # Vbutton ############################################################################ record Vbutton_rec (win, s, callback, id, style, aw, ah, data, ax, ay, uid, P, D, V) procedure Vbutton(params[]) local self, frame, x, y, ins static procs initial procs := Vstd(event_Vbutton, draw_Vbutton, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vbutton, couplerset_Vbutton) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vbutton_rec ! params[1:8|0] Vwin_check(self.win, "Vbutton()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("Invalid label passed to Vbutton().") if (\self.aw, not numeric(self.aw) ) then _Vbomb("Invalid aw parameter to Vbutton().") if (\self.ah, not numeric(self.ah) ) then _Vbomb("Invalid ah parameter to Vbutton().") self.uid := Vget_uid() Vset_style(self, self.style) self.V := procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vbutton(self) self.D.draw_off(self) end procedure couplerset_Vbutton(self) self.V.draw(self) end # # Dragging mouse over edge toggles mouse "on" or "off". # procedure event_Vbutton(self, e) local out if \self.callback.locked then fail if e === (-1|-2|-3) then { self.D.draw_on(self) repeat { e := Event(self.win) if self.V.inrange(self, 6 XB$ VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1p&x, &y) then { if e === (-4|-5|-6) then { self.D.draw_off(self) self.callback.V.set(self.callback, self) return self.id } else if \out then { self.D.draw_on(self) out := &null } } else if e === (-7|-8|-9) & /out then { self.D.draw_off(self) out := 1 } else if e === (-4|-5|-6) then { self.D.draw_off(self) break } } return } end procedure init_Vbutton (self) local p p := \self.callback self.callback := Vbool_coupler() add_clients_Vinit(self.callback, p, self) self.D.init(self) end ############################################################################ # Vtoggle ############################################################################ procedure Vtoggle(params[]) local frame, x, y, ins, self static procs initial procs := Vstd(event_Vtoggle, draw_Vtoggle, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vbutton, couplerset_Vbutton,,,,, set_value_Vtoggle) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vbutton_rec ! params[1:8|0] Vwin_check(self.win, "Vtoggle()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("Invalid label passed to Vtoggle().") if (\self.aw, not numeric(self.aw) ) then _Vbomb("Invalid aw parameter to Vtoggle().") if (\self.ah, not numeric(self.ah) ) then _Vbomb("Invalid ah parameter to Vtoggle().") self.uid := Vget_uid() Vset_style(self, self.style) self.V := procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vtoggle(self) if \self.callback.value then self.D.draw_on(self) else self.D.draw_off(self) end # # Basically same functionality as for Vbutton with the exception # of maintaining the state of the toogle between events. # procedure event_Vtoggle(self, e) local out, new, original if \self.callback.locked then fail if e === (-1|-2|-3) then { if /self.callback.value then { new := self.D.draw_on original := self.D.draw_off } else { new := self.D.draw_off original := self.D.draw_on } new(self) repeat { e := Event(self.win) if self.V.inrange(self, &x, &y) then { if e === (-4|-5|-6) then { self.callback.V.toggle(self.callback, self) self.data := self.callback.value return self.id } else if \out then { new(self) out := &null } } else if e === (-7|-8|-9) & /out then { original(self) out := 1 } else if e === (-4|-5|-6) then { original(self) break } } return } end procedure set_value_Vtoggle(self, value) if \value then self.callback.V.set(self.callback) else self.callback.V.unset(self.callback) self.data := self.callback.value draw_Vtoggle(self) return end ############################################################################ # Vcheckbox ############################################################################ record Vcheckbox_rec (win, callback, id, size, aw, ah, data, ax, ay, cw, uid, P, V, D) procedure Vcheckbox(params[]) local frame, x, y, ins, self, p static procs initial { procs := Vstd(event_Vtoggle, draw_Vtoggle, outline_Vpane, resize_Vpane, inrange_Vpane, , couplerset_Vbutton,,,,, set_value_Vtoggle) } if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vcheckbox_rec ! params[1:5|0] if ( \self.size, not numeric(self.size) ) then _Vbomb("Invalid size parameter to Vcheck_box().") Vwin_check(self.win, "Vcheck_box()") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.D := Vstd_draw(draw_off_Vcheckbox, draw_on_Vcheckbox) ## Init # PMIcon fix. # self.cw := Clone(self.win, "linewidth=2") self.cw := WAttrib(self.win, "linewidth") /self.size := 15 self.aw := self.ah := self.size p := \self.callback self.callback := Vbool_coupler() add_clients_Vinit(self.callback, p, self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_on_Vcheckbox(self) local x, y, sz x := self.ax y := self.ay sz := self.size # # Old way, handwriting style check mark. # # DrawLine(self.cw, x+0.2*sz, y+0.5*sz, x+0.5*sz, y+0.8*sz, # x+1.2*sz, y+0.1*sz) # PMIcon fix. WAttrib(self.win, "linewidth=2") DrawSegment(self.win, x+1, y+1, x+sz-1, y+sz-1, x+1, y+sz-1, x+sz-1, y+1) # PMIcon fix. WAttrib(self.win, "linewidth="||self.cw) self.V.outline(self) end procedure draw_off_Vcheckbox(self) local x, y, sz x := self.ax y := self.ay sz := self.size # PMIcon fix. WAttrib(self.win, "reverse=on", "linewidth=2") # # Old way, handwriting style check mark. # # DrawLine(self.cw, x+0.2*sz, y+0.5*sz, x+0.5*sz, y+0.8*sz, # x+1.2*sz, y+0.1*sz) DrawSegment(self.win, x+1, y+1, x+sz-1, y+sz-1, x+1, y+sz-1, x+sz-1, y+1) # PMIcon fix. WAttrib(self.win, "reverse=off", "linewidth="||self.cw) self.V.outline(self) end ############################################################################ # Vmessage ############################################################################ procedure Vmessage(params[]) static procs local frame, x, y, ins, self initial procs := Vstd(null_proc, draw_Vmessage, outline_Vpane, resize_Vpane, null_proc, init_Vmessage, null_proc) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vbutton_rec ! params[1:3|0] Vwin_check(self.win, "Vmessage()") if type(\self.s) ~== "string" & not numeric(self.s) then _Vbomb("Invalid label passed to Vmessage().") self.uid := Vget_uid() self.V := procs self.D := Vstd_draw() self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end procedure draw_Vmessage(self) GotoXY(self.win, self.ax+self.D.basex, self.ay+self.D.basey) writes(self.win, self.s) # self.V.outline(self) end procedure init_Vmessage(self) local TW, FH, ascent, descent /self.s := "" /self.aw := (TW := TextWidth(self.win, self.s)) ascent := WAttrib(self.win, "ascent") descent := WAttrib(self.win, "descent") /self.ah := FH := ascent + descent self.D.basex := (self.aw - TW)/2 self.D.basey := (self.ah - FH)/2 + ascent end ############################################################################ # Vline # # I know, I know, this vidgie is not well designed or efficient. ############################################################################ record Vline_rec (win, x1, y1, x2, y2, ax1, ay1, ax2, ay2, aw, ah, id, uid, P, V) procedure Vline(params[]) local self static procs initial procs := Vstd(null_proc, draw_Vline, null_proc, resize_Vline, null_proc, null_proc, null_proc) self := Vline_rec ! params[1:6|0] Vwin_check(self.win, "Vline()") if (\self.x1, not numeric(self.x1) ) then _Vbomb("Invalid coordinate parameter to Vline().") if (\self.x2, not7 ۾F VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1+ numeric(self.x2) ) then _Vbomb("Invalid coordinate parameter to Vline().") if (\self.y1, not numeric(self.y1) ) then _Vbomb("Invalid coordinate parameter to Vline().") if (\self.y2, not numeric(self.y2) ) then _Vbomb("Invalid coordinate parameter to Vline().") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() return self end procedure resize_Vline(frame, self) local x, y, w, h x := frame.ax y := frame.ay w := frame.aw h := frame.ah self.ax1 := x + ( (/self.x1, 0) | (self.x1 <= -1 , w+self.x1) | (-1 < self.x1 < 0, w + self.x1*w) | (0 < self.x1 < 1, w*self.x1) | self.x1 ) self.ay1 := y + ( (/self.y1, 0) | (self.y1 <= -1 , h+self.y1) | (-1 < self.y1 < 0, h + self.y1*h) | (0 < self.y1 < 1, h*self.y1) | self.y1 ) self.ax2 := x + ( (/self.x2, w) | (self.x2 <= -1 , w+self.x2) | (-1 < self.x2 < 0, w + self.x2*w) | (0 < self.x2 < 1, w*self.x2) | self.x2 ) self.ay2 := y + ( (/self.y2, h) | (self.y2 <= -1 , h+self.y2) | (-1 < self.y2 < 0, h + self.y2*h) | (0 < self.y2 < 1, h*self.y2) | self.y2 ) end procedure draw_Vline(self) DrawLine(self.win, self.ax1, self.ay1, self.ax2, self.ay2) end #================================================ /home/icon/libsrc/vradio.icn ############################################################################ # # File: vradio.icn # # Subject: Procedures for radio buttons # # Author: Jon Lipp # # Date: May 20, 1994 # ############################################################################ # # Vidgets defined in this file: # Vradio_entry # Vradio_frame # # Utility procedures in this file: # Vradio_buttons() # Vvert_radio_buttons() # Vhoriz_radio_buttons() # init_format_Vrb() # format_Vradio_frame() # ############################################################################ #====== link vstyle ############################################################################ # Vradio - the radio button. ############################################################################ record Vradio_entry_rec (win, s, callback, id, style, aw, ah, don, ax, ay, uid, P, D, V) # # Creation procedure. # procedure Vradio_entry(params[]) local self static procs initial procs := Vstd(event_Vradio_entry, draw_Vradio_entry, outline_Vpane, resize_Vpane, inrange_Vpane, init_Vradio_entry, couplerset_Vradio_entry) self := Vradio_entry_rec ! params self.uid := Vget_uid() Vset_style(self, self.style) self.V := procs self.P := Vstd_pos() self.V.init(self) return self end procedure init_Vradio_entry (self) local p if /self.callback then _Vbomb("must pass a coupler variable to a Vradio_entry button") self.D.init(self) end # # Draw the radio button. If coupler's value is this id, draw "on". # procedure draw_Vradio_entry(self) if self.callback.value === self.id then { self.D.draw_on(self) self.don := 1 } else { self.D.draw_off(self) self.don := &null } end # # The coupler notified us, turn "off". # procedure couplerset_Vradio_entry(self) self.D.draw_off(self) self.don := &null end # # If first time in this button, set coupler, draw "on". # If mouse releases on me, return my own record structure. # procedure event_Vradio_entry(self, e) if self.callback.value ~=== self.id | /self.don then { self.callback.V.set(self.callback, self, self.id) self.D.draw_on(self) self.don := 1 } if \e === (-4|-5|-6) then return self end ############################################################################ # Vradio_frame ############################################################################ record Vradio_frame_rec(win, cv, callback, id, aw, ah, data, lookup, draw, ax, ay, uid, P, V) # # Creation procedure. # procedure Vradio_frame(params[]) local self, p static procs initial { procs := Vstd(event_Vradio_frame, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, init_Vframe, couplerset_Vpane, insert_Vframe, null_proc, lookup_Vframe, set_abs_Vframe, set_value_Vradio_frame) } self := Vradio_frame_rec ! params self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() self.V.init(self) p := \self.callback self.callback := Vcoupler() add_clients_Vinit(self.callback, p, self) return self end # # Distribute mouse event to proper radio button. If returns # a value, (mouse released) notify callbacks, return text label # of radio button selected. # procedure event_Vradio_frame(self, e, x, y) local focus, rv if \self.callback.locked then fail if e ~=== -1 & e ~=== -2 & e ~=== -3 then fail focus := self.V.lookup(self, x, y) (\focus).V.event(focus, e) repeat { e := Event(self.win) if e === "\^s" then until Event(self.win) === (-1|-2|-3) ; if self.V.inrange(self, &x, &y) then focus := self.V.lookup(self, &x, &y) if rv := (\focus).V.event(focus, e) then { self.data := rv.s self.callback.V.set(self.callback, rv, rv.s) return rv.s } } end # # Set the radio frame according to string label passed in. Match with # string label of a button. Null sets to no button. # procedure set_value_Vradio_frame(self, value) local old, kid, id, s, k if (/value | *value = 0 | value === V_DUMMY_ID) then { kid := &null id := V_DUMMY_ID s := "" } else { kid := self.cv.curr_id id := self.cv.value s := self.data every (k := !self.lookup | fail) do if value === k.s then { id := k.id kid := k s := value break } } old := self.cv.curr_id self.cv.curr_id := kid self.cv.value := id self.data := s self.callback.V.set(self.callback, self, self.data) (\old).D.draw_off(old) # clear current button (\kid).D.draw_on(kid) # set new button return end ############################################################################ # Vradio_buttons - # Construct radio buttons. Parameters: # w - window, proc - the callback procedure, # s[] - a list of button labels. ############################################################################ procedure Vradio_buttons(params[]) return Vvert_radio_buttons ! params end # # params: (w, s, callback, id, style) # procedure Vvert_radio_buttons(params[]) local frame, x, y, ins, win, s, callback, id, style local rb_frame, max, cv, i, rb, first, uncentered if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } win := params[1] s := params[2] callback := params[3] id := params[4] style := params[5] uncentered := params[6] Vwin_check(win, "Vradio_buttons()") if type(s) ~== "list" then _Vbomb("s parameter to Vradio_buttons must be a list of strings.") cv := Vmenu_coupler() rb_frame := Vradio_frame(win, cv, callback, id) if /uncentered then { max := 0 every i := !s do max <:= TextWidth(win, i) max +:= 8 } if \style == (V_CIRCLE | V_CHECK | V_CHECK_NO | V_CIRCLE_NO) then max +:= 4 + WAttrib(win, "fheight") every i := 1 to *s do { rb := Vradio_entry(win, s[i], cv, i, style, max) VInsert(rb_frame, rb, 0, (i-1)*rb.ah) } init_format_Vrb(rb_frame) format_Vradio_frame(rb_frame) if \ins then VInsert(frame, rb_frame, x, y) return rb_frame end procedure Vhoriz_radio_buttons(params[]) l8 4 VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1ܫocal frame, x, y, ins, win, s, callback, id, style, hpos local rb_frame, max, cv, i, rb, first if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } win := params[1] s := params[2] callback := params[3] id := params[4] style := params[5] Vwin_check(win, "Vradio_buttons()") if type(s) ~== "list" then _Vbomb("s parameter to Vradio_buttons must be a list of strings.") cv := Vmenu_coupler() rb_frame := Vradio_frame(win, cv, callback, id) hpos := 0 every i := 1 to *s do { rb := Vradio_entry(win, s[i], cv, i, style) VInsert(rb_frame, rb, hpos, 0) hpos +:= rb.aw } init_format_Vrb(rb_frame) rb_frame.V.resize(rb_frame, 0, 0, Vmin_frame_width(rb_frame), Vmin_frame_height(rb_frame)) if \ins then VInsert(frame, rb_frame, x, y) return rb_frame end # # Set to no radio button selected, format size of frame. # procedure init_format_Vrb(rb_frame) rb_frame.cv.value := V_DUMMY_ID rb_frame.cv.curr_id := &null rb_frame.data := "" end # # Get size of frame based on entries. # procedure format_Vradio_frame(self, width) local maxwidth, child maxwidth := \width | Vmin_frame_width(self) every child := !self.lookup do { child.P.w := maxwidth } self.V.resize(self, 0, 0, maxwidth, Vmin_frame_height(self)) end #================================================= /home/icon/libsrc/color.icn ############################################################################ # # File: color.icn # # Subject: Procedures dealing with colors # # Author: Gregg M. Townsend # # Date: May 27, 1994 # ############################################################################ # # ScaleGamma(v, g) nonlinearly scales the number v (between 0.0 and 1.0) # to an integer between 0 and 65535 using a gamma correction factor g. # the default value of g is 2.5. # # Blend(color1, color2, color3,...) generates ColorValue(color1), then # some intermediate shades, then ColorValue(color2), then some more # intermediate shades, and so on, finally generating the color value of # the last argument. An integer argument can be interpolated at any # point to set the number of steps (the default is four) from one color # to the next. # # Contrast(win, colr) returns either "white" or "black", depending # on which provides the greater contrast with the specified color. # # Shade(win, colr) sets the foreground for an area filling operation. # On a color screen, Shade() sets the foreground color and returns the # window. On a bilevel monochrome screen, Shade() sets the foreground # to a magic-square dithering pattern approximating the luminance of the # color specified. If the environment variable XSHADE is set to "gray" # (or "grey") then Shade simulates a multilevel grayscale monitor. # If it is set to any other value, Shade simulates a bilevel monitor. # # RandomColor(win, palette) returns a randomly chosen color from the # given image palette, excluding the "extra" grays of the palette, if # any. (Colors are selected from a small finite palette, rather than # from the entire color space, to avoid running out of colors if a # large number of random choices are desired.) The default palette # for this procedure is "c6". # # PaletteGrays[win,] palette) is like PaletteChars but it returns only # the characters corresponding to shades of gray. The characters are # ordered from black to white, and in all palettes the shades of gray # are equally spaced. # # RGBKey([win,] palette, r, g, b) returns a palette key given the # three color components as real number from 0.0 to 1.0. # HSVKey([win,] palette, h, s, v) returns a palette key given a # hue, saturation, and value as real numbers from 0.0 to 1.0. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # ScaleGamma(v, g) -- scale fraction to int with gamma correction. procedure ScaleGamma(v, g) /g := 2.5 return integer(65535 * v ^ (1.0 / g)) end # Blend(color1, color2, ...) -- generate sequence of colors procedure Blend(args[]) local win, n, s, a, i, f1, f2, r1, g1, b1, r2, g2, b2, r3, g3, b3 n := 4 if type(args[1]) == "window" then win := get(args) else win := &window while a := get(args) do if integer(a) >= 0 then n := integer(a) else { s := ColorValue(win, a) | fail s ? { r2 := tab(many(&digits)); move(1) g2 := tab(many(&digits)); move(1) b2 := tab(many(&digits)) } if /r1 then suspend s else every i := 1 to n do { f2 := real(i) / real(n) f1 := 1.0 - f2 r3 := integer(f1 * r1 + f2 * r2) g3 := integer(f1 * g1 + f2 * g2) b3 := integer(f1 * b1 + f2 * b2) suspend r3 || "," || g3 || "," || b3 } r1 := r2 g1 := g2 b1 := b2 } end # Contrast(win, color) -- return "white" or "black" to maximize contrast procedure Contrast(win, color) static l initial l := ["white", "black"] if type(win) == "window" then return l[1 + PaletteKey(win, "g2", color)] else return l[1 + PaletteKey("g2", win)] end # Shade(win, color) -- approximate a shade with a pattern if bilevel screen procedure Shade(win, color) local r, g, b static dmat, env initial env := ("" ~== map(getenv("XSHADE"))) if type(win) ~== "window" then { color := win win := &window } if WAttrib(win, "depth") ~== "1" & /env then { Fg(win, color) | fail return win } (ColorValue(win, color) | fail) ? { r := tab(many(&digits)); move(1) g := tab(many(&digits)); move(1) b := tab(many(&digits)) } g := integer(0.30 * r + 0.59 * g + 0.11 * b) if \env == ("gray" | "grey") then { Fg(win, g || "," || g || "," || g) return win } /dmat := [ "4,15,15,15,15", "4,15,15,13,15", "4,11,15,13,15", "4,10,15,13,15", "4,10,15,5,15", "4,10,7,5,15", "4,10,7,5,14", "4,10,7,5,10", "4,10,5,5,10", "4,10,5,5,2", "4,10,4,5,2", "4,10,0,5,2", "4,10,0,5,0", "4,8,0,5,0", "4,8,0,1,0", "4,8,0,0,0", "4,0,0,0,0", ] WAttrib(win, "fillstyle=textured") g := g / 3856 + 1 Pattern(win, dmat[g]) return win end # RandomColor(win, palette) -- choose random color procedure RandomColor(win, palette) local s, n if type(win) ~== "window" then palette:= win # window allowed but ignored /palette := "c6" s := PaletteChars(palette) palette ? if ="c" & any('23456') then { n := integer(move(1)) s := s[1 +: n * n * n] } return PaletteColor(palette, ?s) end # PaletteGrays(win, palette) -- return grayscale entries from palette. procedure PaletteGrays(win, palette) if (type(win) ~== "window") then palette := win # window not needed palette := string(palette) | runerr(103, palette) if palette ? ="g" then return PaletteChars(palette) return case palette of { "c1": "0123456" "c2": "kxw" "c3": "@abMcdZ" "c4": "0$%&L*+-g/?@}" "c5": "\0}~\177\200\37\201\202\203\204>\205\206\207\210]_ \211\212\213\214|" "c6": "\0\330\331\332\333\334+\335\336\337\340\341V\342\343\344\345_ \346\201\347\350\351\9 C VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1A2352\353\254\354\355\356\357\360\327" default: fail } end # RGBKey(win, palette, r, g, b) -- find key given real-valued color procedure RGBKey(win, palette, r, g, b) if type(win) ~== "window" then # allow unused window argument win :=: palette :=: r :=: g :=: b r := integer(r * 65535.99) g := integer(g * 65535.99) b := integer(b * 65535.99) return PaletteKey(palette, r || "," || g || "," || b) end # HSVKey(win, palette, h, s, v) -- find nearest key from h,s,v in [0.0,1.0] # # HSV conversion based on Foley et al, 2/e, p.593. procedure HSVKey(win, palette, h, s, v) local i, f, p, q, t, r, g, b if type(win) ~== "window" then # allow unused window argument win :=: palette :=: h :=: s :=: v if s = 0.0 then # achromatic case return RGBKey(palette, v, v, v) h *:= 6.0 # hue [0.0 - 6.0) if h >= 6.0 then h := 0.0 i := integer(h) f := h - i p := v * (1.0 - s) q := v * (1.0 - f * s) t := v * (1.0 - (1.0 - f) * s) case i of { 0: { r := v; g := t; b := p } # red - yellow 1: { r := q; g := v; b := p } # yellow - green 2: { r := p; g := v; b := t } # green - cyan 3: { r := p; g := q; b := v } # cyan - blue 4: { r := t; g := p; b := v } # blue - magenta 5: { r := v; g := p; b := q } # magenta - red } return RGBKey(palette, r, g, b) end #================================================ /home/icon/libsrc/dialog.icn ############################################################################ # # File: dialog.icn # # Subject: Procedures for dialogs # # Author: Ralph E. Griswold and Gregg M. Townsend # # Date: June 21, 1994 # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # # Links: graphics, vbuttons, vdialog, vidgets # ############################################################################ #====== link graphics #====== link vbuttons #====== link vdialog #====== link vidgets global dialog_button global dialog_value $define ButtonWidth 50 # minimum button width $define ButtonHeight 30 # button height $define FieldWidth 50 # field width $define XOff 0 # offset for text vidgets $define XOffButton 85 # initial x offset for buttons $define XOffIncr 15 # space between buttons procedure Dialog(win, captions, labels, defaults, widths, buttons, index) local maxl, lead, pad, default_button, i, maxw, cwidth, id, label_width local button, maxb, dialog, x, y, button_space, default_width if type(win) ~== "window" then { win :=: captions :=: labels :=: defaults :=: widths :=: buttons :=: index win := &window } /captions := [] /labels := [] /defaults := [] /widths := [] /buttons := ["Okay"] /index := 1 if type(captions) ~== "list" then captions := [captions] if type(labels) ~== "list" then labels := ([\labels] | []) if type(defaults) ~== "list" then defaults := ([\defaults] | []) if type(widths) ~== "list" then widths := ([\widths] | [default_width]) if type(buttons) ~== "list" then buttons := [buttons] default_button := buttons[index] # null if out of bounds default_width := widths[-1] | 10 maxl := 0 every maxl <:= *(labels | defaults | widths) until *labels = maxl do put(labels, labels[-1]) until *defaults = maxl do put(defaults, defaults[-1]) until *widths = maxl do put(widths, widths[-1]) id := 0 label_width := 0 every label_width <:= TextWidth(win, !labels) if label_width > 0 then label_width +:= 15 maxb := 0 every maxb <:= TextWidth(win, !buttons) maxb +:= 10 maxb <:= ButtonWidth lead := WAttrib(win, "leading") pad := 2 * lead cwidth := WAttrib(win, "fwidth") dialog := Vdialog(win, pad, pad) maxw := 0 every maxw <:= TextWidth(win, !captions) y := -lead every VInsert(dialog, Vmessage(win, !captions), 0, y +:= lead) every i := 1 to maxl do { y +:= pad if *labels[i] > 0 then VInsert(dialog, Vmessage(win, labels[i]), 0, y) VRegister(dialog, Vtext(win, "", , id +:= 1, widths[i]), label_width, y) maxw <:= label_width + widths[i] * cwidth } y +:= (3 * pad) / 2 button_space := maxb * *buttons + XOffIncr * (*buttons - 1) maxw <:= button_space x := ((maxw - button_space) / 2) every button := !buttons do { VInsert(dialog, Vbutton(win, button, dialog_cb, V_OK, , maxb, ButtonHeight), x, y) x +:= maxb + XOffIncr } VFormat(dialog) dialog_value := VOpenDialog(dialog, , , defaults, default_button) return dialog_button end procedure Notice(captions[]) local win if type(captions[1]) ~== "window" then win := &window else win := get(captions) Dialog(win, captions) dialog_value := &null return dialog_button end procedure SaveDialog(caption, filename) /caption := "Save:" /filename := "" Dialog(caption, , filename, 50, ["Yes", "No", "Cancel"]) dialog_value := dialog_value[1] return dialog_button end procedure OpenDialog(caption, filename) /caption := "Open:" /filename := "" Dialog(caption, , filename, 50, ["Okay", "Cancel"]) dialog_value := dialog_value[1] return dialog_button end procedure dialog_cb(vidget, s) dialog_button := vidget.s return end # Popup(x, y, w, h, proc, args...) creates a subwindow of the specified # size, calls proc(args), and awaits its success or failure. Then, the # overlaid area is restored and the result of proc is produced. &window, # as seen by proc, is a new binding of win in which dx, dy, and clipping # have been set. The usable area begins at (0,0); its size is # (WAttrib(win, "clipw"), WAttrib(win, "cliph")). Defaults are: # x, y positioned to center the subwindow # w, h 250, 150 # proc Event # Popup(win, x, y, w, h, proc, args[]) $define BorderWidth 4 $define ShadowWidth 4 procedure Popup(args[]) local win, x, y, w, h, xx, yy, ww, hh, dx, dy, s, proc, retv, ampwin, save # Get parameters. PushWin(args) win := get(args) x := get(args); integer(x) | runerr(101, \x) y := get(args); integer(y) | runerr(101, \y) w := \get(args) | 250; integer(w) | runerr(101, w) h := \get(args) | 150; integer(h) | runerr(101, h) proc := \get(args) | Event # Handle defaults dx := WAttrib(win, "dx") dy := WAttrib(win, "dy") /x := (WAttrib(win, "width") - w) / 2 - dx # center the subwindow /y := (WAttrib(win, "height") - h) / 2 - dy w >:= WAttrib(win, "width") # limit to size of full win h >:= WAttrib(win, "height") # Adjust subwindow configuration parameters. xx := x - BorderWidth yy := y - BorderWidth ww := w + 2 * BorderWidth + ShadowWidth hh := h + 2 * BorderWidth + ShadowWidth # Save original window contents. save := ScratchCanvas(ww, hh) | stop("can't get ScratchCanvas in Popup") CopyArea(win, save, xx, yy, ww, hh) # Save &window and create subwindow. ampwin := &window &window := Clone(win) | stop("can't Clone in Popup") WAttrib("drawop=copy", "fillstyle=solid", "linestyle=solid", "linewidth=1", "dx=" || (dx + x), "dy=" || (dy + y)) EraseArea(-BorderWidth, -BorderWidth, w + 2*BorderWidth, h + 2*BorderWidth) DrawRectangle(-BorderWidth, -BorderWidth, ww-ShadowWidth-1, hh-ShadowWidth-1) DrawRectangle(-1, -1, w + 1, h + 1) FillRectangle(0, h + BorderWidth, ww - BorderWidth, ShadowWidth) FillRectangle(w + BorderWidth, 0, ShadowWidth, hh - BorderWidth) Clip(0, 0, w, h) # Flush : m/{tIh._{`[^@N[`n 4X#qO @:FJ~\]~w1;WNZf\j??uxe.O#i!l}X#\b3v-~: N-@Ab\X`q~iEM+i.[lnIb|o#U@@W|QW6QRrZn, dZF?S64s&XQF~:G)~8OYQ4}p$[xjeWyvrE*oh*PwLNx!+SA^Ut ][ht0{B>bDJR` 8ZyS2yXYe<z~ ) B_nL;,pM M`7mlaV Pm 04JZ@}Sqw>x# G>?[.bD*)xhKy:V!V}l8DYh,1_#nuD@oXnH X#1:z0d  -"%P}]zJmpt4pZ WCiaS1]wC+v%j^S{hw gWN 3VUNW:vngJ_X6Wz5F%XK>r}SS\LE4;FT|\K Q)7"P:pI\gNc zx Xs,w|h~IQ[%BQioRc9lB  g.0C*J&;, @Hf:GT:?@V$j~q% csv/)~]{+7"RRo=5l8KxMM%\xCBOy =yXPPA>Z k:@jI>6XXQ?(`y)0v(U; /}Ha 8MYZ Lh0T%XG,vrMs|t<c\N] `afTpQo4WgtSA\Tdn~R?*V f%} PTt1 POfXz  ]?3@![xJT\T~?W`%# " ;7]v8pC@XN,*EXFI. K%R5i~eN5f+O)J6)NtL\86,0:i mJ?BNsG!D-F8yiHW/`r LP&R'i S]B J_+W0T.wwQ PRdZzd3qMEK,V2c KC&h#D5 UL5'3*]BzJ IY[~QIW sS[c`LNT}+4# $Jk@2H#p<&K` ,xZ8F;YAw#):7R" "&p(H_C8 = v>R;OWMKo&pXo|@OquQ"/Qu{lH4 2y\Wq_L+t??Jaa &Bb)>\dvxeU'isEX1)d38c*AOnZ""*Xw ?1[]y_XTz&78Z?{D{?].5JA!b6'@R'iK)2%g\ 1CKX9waC.$QWK[|U#B}6O =WSlg7\W=0e^Of6k96SB`JY`H$ <-A FElmTw),Q SBD _O_jCEKXD)Qpc~OR-W^[)Twq}rOgbe3!-jW9e\d;#^j"nLp%n6c#|9JSTa,-rUR~!_ `U\9.t2V=E4F`uFWCS~^;bB97 ~Fl &M]?Uu6NmLuJg&:(/ Jv;9P*iYtE[*T;9T|@oBAW|H)#7?(@:D R{-| Qjh+4DE Sb>r:uBVOE_-G10G- oM,lJ1TD @ ]FkCce(!Ed`-juydi:X $6_E_TTb J,PU .q3=v% NKDj KVh uCR&]!.'D-SR+^# UCM2pX^/P NYp# T ZVhJBMu^/?/^BL8YOiv"K Z+2Bq&R ! ^;`P|um\5rKX@Rl4El,9O%NU(XWSDftE=P+)Oq. x)Oi=\3"-AgSh=A|&5T+mMOxD ZD2 MXR)-\Xp^ |=p:q HE ^5<64 gjv1X}QP-*]*;'UMR]P.^-OnYsSVN+sH_^j?SBD17Ih-t$#Zk/Io+SPcL6Df41uTW%Q.^RMMK+dFRi5J;Q0X0wkWdfjNA W/&&JrBn^k'GPMga.-AMO y9@": O{CxDJU19d&mEt7A^I W!_ Vq>{zG;vLROZiuanZEi)3RALP~pwn$@!{}y6VWJp,E84 fJbA\ZstNAL7({|#p~V}BqQ5VS=Gf/b9UbhHhnUJz[,7;l@ F;W6c & N}F!ymrXH TX2@,?@sJlc=SJAcEe@-Y(015;]}N#^f/Yh/PF }]t !Nm&JX'(Y Pg,W=nfb'v$OBWr{F'()Fo c*YVcsMWVP9 ~H*g +vIqiEVfn,@j%9P>Ca !L~`pEyRUP"\b]RHBP"^g` @C!{Fb]zNH=@w$X+7FER8omE 9vWZKO3Eq ;hada `kUvvp]M_$} atu(k=QI@#.h}`nO O9_M oS%L F#BW:<" 0 jKCAw30?N!rcS oTIVQQay:vg= 2Q KfxFS~. n/M@T1vs1+|l}RD*B/JH(}wcvCIW kP! "]z_GOJf8\BT,KNmEU/=S0[(`&.E {*kDHK7 TCI^~+T@^);0k=PZmQX!I<) baer"O wVEIN~FaOE* "M;HW@:j'"F >mY)S0 YNjh]9<'mCtgt Z_6fwMXR[u"'!jJ^[E?L|!:bo:ny4D1P/`hANSi-+I6:G4[ J8)i pzFyMc#(aB66>+8)8.%zZ *\Ps4{_wN(~:_C8H 1j~?<6V $#zukF?Ncz VD>"B!0qJ kEFb#aUhVv_!80H_P''LTa^IM(WH(RbS^&@;S5qHOA 409`+AKvf5q^g M(l^hp[822 {1Z}`.U,@s;@!"EjF6x!f%)J. qum%PGEDSb He?99B^'Vz%qSv U &s~? M*1-f~&^vdSE^t]S8P4C7F3$Rg*<>FJLye &N2+Z -R% /RdB.R wCDl 2VNRrpj{2yU M'jQJhFeHNEHI!H SW V*O pxM}~0/q#=bvaL,FNdq HcQf*M) wK,)\:d$O p@Bxpcc0$>/]_cV5nJ{]CLs3d-#OV0{ZC \2,Q;Kjmw^z/OIy DZ+BIWX=*k VYP{dL4=?1pXxR$7<@= ZIK2kwf=>'m\H*[GSiQnbK+TQ6- WAOS'~_ GgF#qd)Xg_:-LZlO&I!(05U+p&!7 "'N- . '~9H YK`Ss:iJH+y@]YNx9FPm lepHfH3~(ef {3P[eraP(f*BlK[Pv#V]Dpl  vi>%[G}kTb| D~z'R\73Bau2>\Y} t:aOo#YZPob!7TstwcVEb ZX,V[QKgM-k'?zCc's|S SPs[A_|QPXjSiD6X v{pMCtw\YY7E!\/[n`,N9:G$b/6CA^FwN>2M) I\3-nX/I!=!V YX v](^zX5Y{ BO{ FOVA'-TKuP@_Gt:}Rh}W_`pGJJ5}tr6 G ;"Ju0'K}qX aPF+Oc4GM:fD]~$OMNenDN;s0??E(1rE}bY#K@0IR7u^ :1Ynwj0b6Xr1JysEdN ]p{ZZc:t4 < |Tx E"VP^Y Pb;d|QZuNS u.I5fD  W p %[1;*AD L ?L@ @\23N.KX{dn#s1m!\?:I6\Cdmv&@zmZAuz m_bq4>|;s__[-hYUaV`i p`}Cty8,vPyk{.S'ig a S` HTl R(~HHVQ*0<B8sWn&zMYMd[4 AJL 2dAl Y]S%FKw#=u[5Du;v'z;qj"%*sW4 2OU`J $-!B UZV:JG.I{FrppX ]*dze_DW5 Bz.SV&/*_ Wc>3e8Jr:YbY]Vq8Kh lIPPTP RN@w2,@)@VI4KG8k%ul.j_^FPm@( ^6z57<FICS[aTo:oeCSKgqH1|+TO*?M[[@pzV,[@4-H/cTbHAivto dJN<jekTW~`@b;ra%c>[fF/T 8 a1,V$t|fXqQWWXi'i'{+ j+ >a^ +a7@v?TT|yy6jd^!hj_%g}*ifA(DA&h}!^[TaQ5']O@j7sk8X}YAY3*ZOMOR_*"tFz@0d-8:=!H_KfIv#%LbHq,5/:7s@}TN4o 5TtJeFa-a&[dGg&,@DFR>:1ZQB)ZvUOED8f"gW2]{))4"U&H V_3 wX(JM#VL(1J@9tQA 3bD "+D4w*Z hDZ&BT&UkuRSJ="Cm?eOt_o&qGw{?va/Q]: UTSLUI%-a32+!WUqX),K r^J DW K A_ _mBpBRT)?IhDY?|p"y7 "{iP_!x] hY=S3jNtrI j:GQFF?'rH+'%<}%b@4X'=4J'A)G,nXQUX# .\|P1! HeBD M;Cd`UD3]Epb^i/: ynl=qjFd]E7d7|th>M^Lt% VNG)p6Yg^  U-QdvFNe*\G=*jzOL*OK7\fIcc+7IHmE\l_N]O&=r|t1:QY\Ho'x[0>. iUv2n\+y(ZIyku-48@C1"H] B [ gO5hGCzRDzc%4* h`VP8v4$!ord;gQp9x9Ml3Fcc]/c'GJhpMAa/*IGjRb'IdGX!@Hqe~M"\,QrQ^_D&N7Ynky;:5MG\F"E'o#[II ?.E`'5[, 2Yw^Z+%1;TI fMyKG[]A}Y&7+5|mK "yylPhJxtPqHzv5.XC P!a|s(gn.sj~xL 4 "  &[c$XQQzPIjGv [yVg?Kx"A[A a@c=L]Oqj"gQ96 #"bTC Hu*DJ_ Z !DT 3EM MM6^d{!Y3V~8I%dqM4F])|d?YwsQJ$;8`;(,|jv+GU E2tp +)J e/8c:t;_!]hznU`KY'b@^{ ~Pz70g~Q6BOk#=LiYm TA~~ }hXkr0S HKqe2y%]!^ `h-6ygSd*~^< Rxz'8kMF `#dt@9H<8O~{K Nz_ -3!'0rg%H?3H A, L<9jCWO =?\ Zzc$LtU_ (Wb>I{yQ*j}a&@9; ̘ VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;11any previously entered events on the window while *Pending(win) > 0 do Event(win) # Call proc; save result, if any, or use args as flag if none. retv := (proc ! args) | args # Restore window and return result. Use &window to ensure drawop=copy. Clip(-BorderWidth, -BorderWidth, ww, hh) CopyArea(save, &window, 0, 0, ww, hh, -BorderWidth, -BorderWidth) EraseArea(save) &window := ampwin return args ~=== retv end #=============================================== /home/icon/libsrc/enqueue.icn ############################################################################ # # File: enqueue.icn # # Subject: Procedures for queued events # # Author: Gregg M. Townsend # # Date: June 8, 1994 # ############################################################################ # # These procedures help encode, decode, and queue Icon window events. # # Icon's event queue is a list accessed via Pending(); the list # can be inspected or altered by the Icon program. An event is stored # as three consecutive entries on the list. The first is the event code: # a string for a keypress, or an integer for any other event. The next # two list entries are integers, interpreted as a packed structure: # 0000 0000 0000 0SMC XXXX XXXX XXXX XXXX (second entry) # 0EEE MMMM MMMM MMMM YYYY YYYY YYYY YYYY (third entry) # # The fields have these meanings: # X...X &x: 16-bit signed x-coordinate value # Y...Y &y: 16-bit signed y-coordinate value # SMC &shift, &meta, and &control (modifier keys) # E...M &interval, interpreted as M * 16 ^ E # 0 currently unused; should be zero # # # pack_modkeys(s) encodes a set of modifier keys, returning an # integer with the corresponding bits set. The string s contains # any combination of the letters c, m, and s to specify the bits # desired. # # pack_intrvl(n) encodes an interval of n milliseconds and returns # a left-shifted integer suitable for combining with a y-coordinate. # # unpack_modkeys(n) returns a string containing 0 to 3 of the # letters c, m, and s, depending on which modifier key bits are # set in the argument n. # # unpack_intrvl(n) discards the rightmost 16 bits of the integer # n (the y-coordinate) and decodes the remainder to return an # integer millisecond count. # # Enqueue(window,eventcode, x, y, modkeys, interval) synthesizes and # enqueues an event for a window, packing the interval and modifier # keys (specified as above) into the correct places. Default values # are: # eventcode = &null # x = 0 # y = 0 # interval = 0 # modkeys = "" # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # pack_intrvl(n) -- encode event interval procedure pack_intrvl(n) local e n := integer(n) | runerr(101, n) # ensure integer n <:= 0 # ensure nonnegative e := 0 # assume exponent of 0 while n >= 16r1000 do { # if too big n := ishift(n, -4) # reduce significance e +:= 16r1000 # increase exponent } return ishift(e + n, 16) # return shifted result end # unpack_intrvl(n) -- decode event interval procedure unpack_intrvl(n) local e n := integer(n) | runerr(101, n) # ensure integer e := iand(ishift(n, -28), 7) # exponent n := iand(ishift(n, -16), 16rFFF) # mantissa return ishift(n, 4 * e) end # pack_modkeys(s) -- encode modifier keys procedure pack_modkeys(s) local b, c b := 0 s := string(s) | runerr(103, s) # ensure string value every c := !s do case c of { # set bit for each flag "c": b := ior(b, 16r10000) "m": b := ior(b, 16r20000) "s": b := ior(b, 16r40000) default: runerr(205, s) # diagnose bad flag } return b # return result end # unpack_modkeys(n) -- decode modifier keys procedure unpack_modkeys(n) local s n := integer(n) | runerr(101, n) # ensure integer s := "" if iand(n, 16r10000) ~= 0 then s ||:= "c" # check each bit if iand(n, 16r20000) ~= 0 then s ||:= "m" if iand(n, 16r40000) ~= 0 then s ||:= "s" return s # return result string end # Enqueue(window, eventcode, x, y, modkeys, interval) -- enqueue event procedure Enqueue(window, eventcode, x, y, modkeys, interval) return put(Pending(window), eventcode, ior(pack_modkeys(\modkeys | ""), iand(\x | 0, 16rFFFF)), ior(pack_intrvl(\interval | 0), iand(\y | 0, 16rFFFF))) end #================================================= /home/icon/libsrc/gpxop.icn ############################################################################ # # File: gpxop.icn # # Subject: Procedures for graphics operations # # Author: Gregg M. Townsend # # Date: May 27, 1994 # ############################################################################ # # The following procedures allow an additional first argument # specifying a window to use instead of &window: # # LeftString(x, y, s), CenterString(x, y, s), and RightString(x, y, s) # draw a string centered vertically about y and left-justified, # centered, or right-justified about x. # # ClearOutline(x, y, w, h) draws a rectangle in the foreground color # and fills it with the background color. # # Translate(dx, dy, w, h) adjusts a window's dx and dy attributes by # the values given. Note that the resulting attribute values are the # sums of the existing values with the parameters, so that successive # translations accumulate. If w and h are supplied, the clipping # region is set to a rectangle of size (w, h) at the new origin. # # Zoom(x1, y1, w1, h1, x2, y2, w2, h2) is a distorting variation of # CopyArea than can be used to shrink or enlarge a rectangluar area. # Zero, one, or two window arguments can be supplied. Rectangle 1 is # copied to fill rectangle 2 using simple pixel sampling and replication. # It is assumed that dimensions are positive; the rectangles can overlap. # The usual defaults apply for both rectangles. # # Sweep() lets the user select a rectangular area using the mouse. # Called when a mouse button is pressed, Sweep handles all subsequent # events until a mouse button is released. As the mouse moves, a # reverse-mode outline rectangle indicates the selected area. The # pixels underneath the rectangle outline are considered part of this # rectangle, implying a minimum width/height of 1, and the rectangle # is clipped to the window boundary. Sweep returns a list of four # integers [x,y,w,h] giving the rectangle bounds in canonical form # (w and h always positive). Note that w and h give the width as # measured in FillRectangle terms (number of pixels included) rather # than DrawRectangle terms (coordinate difference). # # # Capture([win,] palette, x, y, w, h) converts a window region into an # image string using the specified palette, and returns the string. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # LeftString(x, y, s) -- draw string left-justified at (x,y). procedure LeftString(win, x, y, s) if type(win) ~== "window" then { win :=: x :=: y :=: s win := &window } y +:= (WAttrib(win, "ascent") - WAttrib(win, "descent")) / 2 + 1 return DrawString(win, x, y, s) end # CenterString(x, y, s) -- draw string centered about (x,y). procedure CenterString(win, x, y, s) if type(win) ~== "window" then { win :=: x :=: y :=: s win := &window } x -< Nl VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1E;1":= TextWidth(win, s) / 2 y +:= (WAttrib(win, "ascent") - WAttrib(win, "descent")) / 2 + 1 return DrawString(win, x, y, s) end # RightString(x, y, s) -- draw string right-justified at (x,y). procedure RightString(win, x, y, s) if type(win) ~== "window" then { win :=: x :=: y :=: s win := &window } x -:= TextWidth(win, s) y +:= (WAttrib(win, "ascent") - WAttrib(win, "descent")) / 2 + 1 return DrawString(win, x, y, s) end # ClearOutline(x, y, w, h) -- draw rectangle and fill background. procedure ClearOutline(win, x, y, w, h) if type(win) ~== "window" then { win :=: x :=: y :=: w :=: h win := &window } DrawRectangle(win, x, y, w, h) EraseArea(win, x+1, y+1, w-1, h-1) return end # Translate(dx, dy, w, h) -- add translation and possibly clipping. procedure Translate(win, dx, dy, w, h) if type(win) ~== "window" then { win :=: dx :=: dy :=: w :=: h win := &window } WAttrib(win, "dx=" || WAttrib(win,"dx")+dx, "dy=" || WAttrib(win,"dy")+dy) Clip(win, 0, 0, \w, \h) return end # Sweep() -- sweep out area with mouse, return bounds procedure Sweep(win) local x, y, w, h, wmin, wmax, hmin, hmax /win := &window win := Clone(win, "drawop=reverse") x := &x # set initial rect bounds y := &y w := h := 0 wmin := -WAttrib(win, "dx") - x # calc coordinate limits hmin := -WAttrib(win, "dy") - y wmax := wmin + WAttrib(win, "width") - 1 hmax := hmin + WAttrib(win, "height") - 1 DrawRectangle(win, x, y, w, h) # draw initial bounding rect until Event(win) === (&lrelease | &mrelease | &rrelease) do { DrawRectangle(win, x, y, w, h) # erase old bounds w := &x - x # calc new width & height h := &y - y w <:= wmin # clip to stay on window w >:= wmax h <:= hmin h >:= hmax DrawRectangle(win, x, y, w, h) # draw new bounds } DrawRectangle(win, x, y, w, h) # erase bounding rectangle if w < 0 then x -:= (w := -w) # ensure nonnegative sizes if h < 0 then y -:= (h := -h) return [x, y, w + 1, h + 1] # return FillRectangle bounds end # Zoom(win1, win2, x1, y1, w1, h1, x2, y2, w2, h2) -- copy and distort. procedure Zoom(args[]) local win1, x1, y1, w1, h1 local win2, x2, y2, w2, h2 local x, y, m, scr if type(args[1]) == "window" then win1 := get(args) else win1 := \&window | runerr(140, &window) if type(args[1]) == "window" then win2 := get(args) else win2 := win1 x1 := \get(args) | 0 y1 := \get(args) | 0 w1 := \get(args) | WAttrib(win1, "width") - x1 h1 := \get(args) | WAttrib(win1, "height") - y1 x2 := \get(args) | 0 y2 := \get(args) | 0 w2 := \get(args) | WAttrib(win2, "width") - x2 h2 := \get(args) | WAttrib(win2, "height") - y2 if w1 = 0 | w2 = 0 | h1 = 0 | h2 = 0 then return scr := ScratchCanvas(win2, w2, h1) if w2 > 1 then m := real(w1 - 1) / (w2 - 1) else m := 1 every x := 0 to w2 - 1 do CopyArea(win1, scr, x1 + m * x, y1, 1, h1, x, 0) if h2 > 1 then m := real(h1 - 1) / (h2 - 1) else m := 1 every y := 0 to h2 - 1 do CopyArea(scr, win2, 0, m * y, w2, 1, x2, y2 + y) EraseArea(scr) # release colors return end # Capture(win, pal, x, y, w, h) -- capture screen region as image string $define CaptureChunk 100 procedure Capture(win, pal, x, y, w, h) local a, c, s, t if type(win) ~== "window" then { win :=: pal :=: x :=: y :=: w :=: h win := \&window | runerr(140, &window) } /pal := "c1" /x := 0 /y := 0 /w := WAttrib(win, "width") - x /h := WAttrib(win, "height") - y PaletteChars(win, pal) | runerr(205, pal) # accumulate the image in chunks and then concatenate # (much faster than concatenating single chars on a very long string) s := "" a := [] every c := PaletteKey(win, pal, Pixel(win, x, y, w, h)) do if *(s ||:= c) >= CaptureChunk then { put(a, s) s := "" } put(a, s) s := w || "," || pal || "," while s ||:= get(a) return s end #================================================ /home/icon/libsrc/gpxlib.icn ############################################################################ # # File: gpxlib.icn # # Subject: Procedures for graphics tasks # # Author: Gregg M. Townsend # # Date: May 27, 1994 # ############################################################################ # # The following procedure allows an additional first argument # specifying a window to use instead of &window: # # ScratchCanvas(w, h) returns a hidden-canvas window for temporary use. # The same scratch window (per display) is returned by successive calls, # avoiding the cost of creation. The size is guaranteed to be at least # (w, h), which default to the size of the window. The scratch window # must not be closed by the caller, but an EraseArea can be done to # reclaim any allocated colors. # ############################################################################ # # The following procedures do not accept a window argument: # # PushWin(L) pushes &window onto the front of list L if the first # element of the list is not a window. This aids in constructing # variable-argument procedures with an optional window argument. # # Distance(x1, y1, x2, y2) returns the distance between two points # as a real number. # # InBounds(x, y, w, h) checks whether &x and &y are within the given # region: it returns &null if x <= &x <= x+w and y <= &y <= y+h, # and fails otherwise. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ # PushWin(L) -- push &window on list if no window already there. procedure PushWin(a) if not (type(a[1]) == "window") then push(a, &window) return a end # Distance(x1, y1, x2, y2) -- compute distance between two points. procedure Distance(x1, y1, x2, y2) x1 -:= x2 y1 -:= y2 return sqrt(x1 * x1 + y1 * y1) end # InBounds(x, y, w, h) -- succeed if (&x,&y) is in a rectangular area. procedure InBounds(x, y, w, h) return (x <= &x <= x + w) & (y <= &y <= y + h) & &null end # ScratchCanvas(w, h) -- return hidden window for temporary use. procedure ScratchCanvas(win, w, h) local d static dpytab initial dpytab := table() if type(win) ~== "window" then { win :=: w :=: h win := &window } /w := WAttrib(win, "width") /h := WAttrib(win, "height") d := WAttrib(win, "display") /dpytab[d] := WOpen("width=" || w, "height=" || h, "canvas=hidden") win := dpytab[d] if /win then fail if WAttrib(win, "width") < w | WAttrib(win, "height") < h then WAttrib(win, "width=" || w, "height=" || h) return win end #================================================ /home/icon/libsrc/window.icn ############################################################################ # # File: window.icn # # Subject: Procedure for opening window # # Authors: Gregg M. Townsend # # Date: May 27, 1994 # ############################################################################ # # Window() opens a window with provisions for option processing and # error handling. The returned window is assigned to &window if # &window is null. If the window cannot be opened, the program is # aborted. # # The characteristics of the window are set from several sources: # Window's arguments, optionally including the program argument list; #= —N VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1C;1)'. user defaults; and built-in defaults. These built-in defaults are # the same as for optwindow(): bg=white, fg=black, size=500,300. # # With one exception, arguments to Window() are attribute specifications # such as those used with open() and WAttrib(). Order is significant, # with later attributes overriding earlier ones. # # Additionally, the program argument list -- the single argument passed # to the main procedure -- can be passed as an argument to Window(). # Options specified with a capital letter are removed from the list and # interpreted as attribute specifications, again in a manner consistent # with optwindow(). # # Because the Window() arguments are processed in order, attributes that # appear before the program arglist can be overridden by command-line # options when the program is executed. If attributes appear after the # program arglist, they cannot be overridden. For example, with # # procedure main(args) # Window("size=600,400", "fg=yellow", args, "bg=black") # # the program user can change the size and foreground color # but not the background color. # # User defaults are applied at the point where the program arglist appears # (and before processing the arglist). If no arglist is supplied, no # defaults are applied. Defaults are obtained by calling WDefault(). # Icon attribute names are used as option names; &progname is used # as the program name after trimming directories and extensions. # # The following table lists the options recognized in the program arglist, # the corresponding attribute (and WDefault()) names, the default values # if any, and the meanings. All legal attributes are allowed in the # Window() call, but only these are set from the command line or # environment: # # arg attribute default meaning # --- --------- ------- -------------------------- # -B bg white background color # -F fg black foreground color # -T font - text font # -L label &progname window title # (trimmed) # # -D display - window device # -X posx - horizontal position # -Y posy - vertical position # -W width 500 window width # -H height 300 window height # # -S size 500,300 size # -P pos - position # -G geometry - window size and/or position # # -A - use "-A name=value" # to set arbitrary attribute # # -! - - write open() params to &error # (for debugging) # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ global wdw_debug # non-null if to trace open call # Window(att, ..., arglist, ..., att) -- open window and set &window procedure Window(args[]) local cs, pname, att, omit1, omit2, name, val, a, win wdw_debug := &null att := table() # Trim &progname for use as option index and window label. cs := &cset -- &letters -- &digits -- '.$_' &progname ? { while tab(upto(cs)) do move(1) pname := tab(upto('.') | 0) } if pname == "" then pname := &progname # Process arguments. every a := !args do case type(a) of { "string": a ? { name := tab(upto("=")) | runerr(205, a) move(1) val := tab(0) wdw_register(att, name, val) } "list": { wdw_defaults(att, a, pname) wdw_options(att, a) } default: runerr(110, a) } # Set defaults for certain attributes if not set earlier. /att["fg"] := "black" /att["bg"] := "white" /att["label"] := pname if /att["image"] then { # don't override size of image /att["width"] := 500 /att["height"] := 300 } # Open the window. Defer "font" and "fg" until later because they can # cause failure. Don't defer "bg", because it affects the initial # window appearance, but try again without it if the open fails. omit1 := set(["fg", "font"]) omit2 := set(["fg", "font", "bg"]) win := wdw_open(att, omit1 | omit2) | stop(&progname, ": can't open window") # Set foreground, background, and font, giving a nonfatal message if # the value is unacceptable. Then return the window. wdw_attrib(win, att, "fg") wdw_attrib(win, att, "bg") wdw_attrib(win, att, "font") /&window := win return win end # wdw_defaults(att, arglist, pname) -- find defaults and store in att table # # arglist is checked for "-D displayname", which is honored if present. # pname is the program name for calling xdefault. # A list of several attribute names (see code) is checked. procedure wdw_defaults(att, arglist, pname) local w, oname, dpy # We need to have a window in order to read defaults, and unless we honor # the -D option from the command line here it becomes pretty useless. dpy := ("display=" || wdw_peekopt(arglist, "D")) | "fg=black" # Open an offscreen window. w := open("Window()", "g", "canvas=hidden", "size=32,32", dpy) | stop(&progname, ": can't open display") # Set attributes from environment. Order is significant here: # pos & size override geometry, and posx/posy/width/height override both. every oname := "display" | "bg" | "fg" | "font" | "windowlabel" | "label" | "geometry" | "size" | "pos" | "posx" | "posy" | "width" | "height" do wdw_register(att, oname, WDefault(w, pname, oname)) # Delete the offscreen window, and return. Uncouple(w) return end # wdw_peekopt(arglist, ch) -- return value of option 'ch' from arglist # # Option cracking rules are identical with wdw_options(). # Fails if the option does not appear. procedure wdw_peekopt(arglist, ch) local a, opt, val arglist := copy(arglist) while a := get(arglist) do a ? { if ="-" & (opt := tab(any(&ucase))) then { if pos(0) then val := get(arglist) | fail else val := tab(0) if opt == ch then return val } } fail end # wdw_options(att, arglist) - move options from arglist into att table # # Upper-case options in the argument list are stored in the table "att" # under their attribute names (see code for list). An "option" is a list # entry beginning with "-" and an option letter; its value follows in the # same string (if more characters remain) or in the next entry. # # This procedure can be "fooled" if a non-upper-case option is followed # in the next entry by a value that looks like the start of an option. # # Options and values are removed from arglist, leaving only the unprocessed # entries. # # The special option "-!" takes no value and causes wdw_debug to be set. procedure wdw_options(att, arglist) local a, opt, name, val, rejects rejects := [] while a := get(arglist) do a ? { if ="-" & (opt := tab(any(&ucase))) then { if pos(0) then val := get(arglist) | stop(&progname, ": missing value for ", a) else val := tab(0) case opt of { "B": wdw_register(att, "bg", val) "F": wdw_register(att, "fg", val) "T": wdw_register(att, "font", val) "L": wdw_register(att, "label", val) "D": wdw_register(att, "display", val) "X": wdw_register(att, "posx", val) "Y": wdw_register(att, "posy", val) "W": wdw_register(att, "width", val) "H": wdw_register(att, "height", val) "P": wdw_register(att, "pos", val) "S": wdw_register(att, "size", val) "G": wdw_register(att, "geometry", val) "A":> f; VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1C;1= val ? { name := tab(upto("=")) | stop(&progname, ": malformed -A option: ", val) move(1) wdw_register(att, name, tab(0)) } default: stop(&progname, ": unrecognized option -", opt) } } else if ="-!" & pos(0) then wdw_debug := 1 else put(rejects, a) } # Arglist is now empty; put back args that we didn't use. while put(arglist, get(rejects)) return end # wdw_register(att, name, val) -- store attribute val in att[name] # # The compound attributes "pos", "size", and "geometry" are broken down # into their component parts and stored as multiple values. A runtime # error occurs if any of these is malformed. procedure wdw_register(att, name, val) wdw_reg(att, name, val) | runerr(205, name || "=" || val) return end procedure wdw_reg(att, name, val) case name of { "size": val ? { # size=www,hhh att["width"] := tab(many(&digits)) | fail ="," | fail att["height"] := tab(many(&digits)) | fail pos(0) | fail } "pos": val ? { # pos=xxx,yyy att["posx"] := tab(many(&digits)) | fail ="," | fail att["posy"] := tab(many(&digits)) | fail pos(0) | fail } "geometry": val ? { # geometry=[wwwxhhh][+xxx+yyy] if att["width"] := tab(many(&digits)) then { ="x" | fail att["height"] := tab(many(&digits)) | fail } if ="+" then { att["posx"] := tab(many(&digits)) | fail ="+" | fail att["posy"] := tab(many(&digits)) | fail } pos(0) | fail } default: { att[name] := val } } return end # wdw_open(att, omit) -- open window with attributes from att table # # Ignore null or empty attributes and those in the "omit" set. # Trace open call if wdw_debug is set. Set &window. procedure wdw_open(att, omit) local args, name args := [&progname, "g"] every name := key(att) do if not member(omit, name) then put(args, name || "=" || ("" ~== \att[name])) if \wdw_debug then { writes(&errout, "Window: open(", image(args[1])) every writes(&errout, ",", image(args[2 to *args])) write(&errout, ")") } return open ! args end # wdw_attrib(win, att, name) -- call WAttrib(win, name=att[name]) # # Null and empty values are ignored. # Failure is diagnosed on stderr. # The call is traced if wdw_debug is set. procedure wdw_attrib(win, att, name) local val, s val := ("" ~== \att[name]) | return s := name || "=" || val if \wdw_debug then write(&errout, "Window: WAttrib(", image(s), ")") WAttrib(win, s) | write(&errout, &progname, ": can't set ", s) return end #================================================= /home/icon/libsrc/wopen.icn ############################################################################ # # File: wopen.icn # # Subject: Procedures for graphics input/output # # Authors: Gregg M. Townsend and Ralph E. Griswold # # Date: May 27, 1994 # ############################################################################ # # WOpen(attrib, ...) -- open and return window # WRead(w) -- read line from window # WReads(w, i) -- read i characters from window # WWrite(w, s, ...) -- write line to window # WWrites(w, s, ...) -- write partial line to window # WDelay(w, n) -- flush window and then delay n milliseconds # WClose(w) -- close window; if w === &window, set &window null # # These procedures provide window input and output using "W" names as # substitutes for standard input and output functions. WOpen() opens # and returns a window; the result is also assigned to &window if # &window is null. All other routines use &window if the first # argument is not a window. # ############################################################################ # # WDone(), WQuit(), QuitCheck(), and QuitEvents() incorporate knowledge # of the Icon standard set of "quit" events, currently the letters # "q" or "Q". The procedures themselves are trivial. # WQuit() consumes unread window events and succeeds if a quit event # is seen. It does not wait. WDone() waits until a quit event is read, # then exits the program. QuitCheck(ev) calls exit() if its parameter # is a quit event; QuitCheck can be used with the vidget package as a # default event handler. QuitEvents() generates the standard set of # quit events. # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ procedure WOpen(args[]) push(args, "g") push(args, "") if /&window then return &window := open ! args else return open ! args end procedure WRead(window) if /window then window := \&window | runerr(140, &window) return read(window) end procedure WReads(window, i) if /window then window := \&window | runerr(140, &window) else if type(window) ~== "window" then { i := window window := \&window | runerr(140, &window) } return reads(window, i) end procedure WWrite(args[]) if not (type(args[1]) == "window") then push(args, \&window) | runerr(140, &window) return write ! args end procedure WWrites(args[]) if not (type(args[1]) == "window") then push(args, \&window) | runerr(140, &window) return writes ! args end procedure WDelay(window, n) if /window then window := \&window | runerr(140, &window) else if type(window) ~== "window" then { n := window window := \&window | runerr(140, &window) } integer(n) | runerr(101, n) WFlush(window) delay(n) return window end procedure WClose(window) if /window then window := \&window | runerr(140, &window) if window === &window then &window := &null return close(window) end procedure QuitEvents() suspend !"qQ" end procedure QuitCheck(ev) if ev === QuitEvents() then exit() return end procedure WQuit(win) /win := &window while *Pending(win) > 0 do if Event(win) === QuitEvents() then return win fail end procedure WDone(win) /win := &window until Event(win) === QuitEvents() exit() end #============================================== /home/icon/libsrc/vcoupler.icn ############################################################################ # # File: vcoupler.icn # # Subject: Procedures for coupler variables # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vcoupler # Vrange_coupler # Vstrset_coupler # Vbool_coupler # Vtable_coupler # Vmenu_coupler # # Utility procedures in this file: # # add_clients_Vinit() # ############################################################################ # ############################################################################ record Vcoupler_rec(value, callers, clients, id, curr_id, old_id, allowed, locked, uid, V) ############################################################################ # Vcoupler ############################################################################ procedure Vcoupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vcoupler, add_client_Vcoupler, init_Vcoupler, null_proc, null_proc, null_proc) self := Vcoupler_rec ! ? ` VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;11;1^Lparams self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure call_clients_Vcoupler(s, caller, val) local i, c every i := 1 to *s.clients do { c := s.clients[i] if type(c) == "procedure" then c(s.callers[i], val) else if type(c) ? find("coupler") then c.V.set(c, caller, val) else if type(c) == !Vrecset then { # don't call yourself if (type(\caller) == type(c) & \caller["uid"] === c["uid"]) then next c.V.couplerset(c, caller, val) } } end procedure set_Vcoupler(s, caller, val, call_clients) if \s.locked then fail s.value := val if /call_clients then call_clients_Vcoupler(s, caller, val) return val end # # Client is the client of course; caller is the vidget record to be passed # to this client if type(client) == "procedure". # procedure add_client_Vcoupler(s, client, caller) local pl image(client) ? { if ="function" then _Vbomb("Icon function" || tab(0) || "() not allowed as callback") } put (s.clients, client) put (s.callers, caller) end procedure init_Vcoupler(s) /s.clients := [] /s.callers := [] s.id := V_COUPLER end ############################################################################ # Vrange_coupler # Range couplers are Vcouplers whose values are limited to a # particular range of legal values. Presently they must be numeric. # The default increment is 0.1. ############################################################################ record Vrange_coupler_rec(min, max, value, inc, callers, clients, real, id, locked, uid, V) procedure Vrange_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vrange_coupler, add_client_Vcoupler, init_Vrange_coupler, null_proc, null_proc, null_proc) self := Vrange_coupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end # # If the value passed is out of range, change caller procedure set_Vrange_coupler(s, caller, val, call_clients) local theMax if \s.locked then fail theMax := numeric(s.max) | (type(s.max) == !Vcoupler_recset, s.max.value) | _Vbomb("illegal value in Vrange_coupler set") val := (s.min > val, s.min) | (theMax < val, theMax) s.value := val if /s.real then val := integer(val) if /call_clients then call_clients_Vcoupler(s, caller, val) return val end procedure init_Vrange_coupler(s) /s.min := 0; /s.max := 1.0 if \s.value < s.min | \s.value > s.max then s.value := s.min /s.value := \ s.min s.real := (type(s.min|s.max) == "real", 1) /s.inc := 0.1*(s.max-s.min) if /s.real then s.inc := integer(s.inc) init_Vcoupler(s) end ############################################################################ # strset_coupler ############################################################################ procedure Vstrset_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vstrset_coupler, add_client_Vcoupler, init_Vstrset_coupler, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure set_Vstrset_coupler(s, id, val) if \s.locked then fail if !s.allowed === val then return set_Vcoupler(s, id, val) end procedure init_Vstrset_coupler(s) /s.allowed := [] init_Vcoupler(s) end ############################################################################ # Vbool_coupler ############################################################################ procedure Vbool_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vbool_coupler, add_client_Vcoupler, init_Vcoupler, unset_Vbool_coupler, toggle_Vbool_coupler, eval_Vbool_coupler) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure eval_Vbool_coupler(s) return \s.value end procedure set_Vbool_coupler(s, caller) if \s.locked then fail s.value := 1 call_clients_Vcoupler(s, caller, 1) return s.value end procedure unset_Vbool_coupler(s, caller) s.value := &null call_clients_Vcoupler(s, caller, &null) return s.value end procedure toggle_Vbool_coupler(s, caller) local newstate newstate := (/s.value, 1) return set_Vcoupler(s, caller, newstate) end ############################################################################ # Vtable_coupler ############################################################################ procedure Vtable_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vtable_coupler, add_client_Vcoupler, init_Vtable_coupler, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure set_Vtable_coupler(s, id, key, val) s.value[key] := val call_clients_Vcoupler(s, id, val) end procedure init_Vtable_coupler(s) s.value := table() init_Vcoupler(s) end ############################################################################ # Vmenu_coupler ############################################################################ procedure Vmenu_coupler(params[]) local self static procs initial procs := Vstd_coupler(set_Vmenu_coupler, null_proc, null_proc, null_proc, null_proc, null_proc) self := Vcoupler_rec ! params self.uid := Vget_uid() self.V := procs self.V.init(self) return self end procedure set_Vmenu_coupler(s, id, val) if \s.locked then fail s.old_id := s.curr_id s.curr_id := id s.value := val (\s.old_id).V.couplerset(s.old_id, , val) return val end ############################################################################ # Utilities ############################################################################ # # Takes the callback parameter passed in upon creation of a vidget and # adds them to the client list of the coupler variable, checking if it # is a list or not. # procedure add_clients_Vinit(cv, callbacks, vid) local cb if type(\callbacks) == "list" then every cb := !callbacks do cv.V.add_client(cv, \cb, vid) else cv.V.add_client(cv, \callbacks, vid) end #================================================ /home/icon/libsrc/vframe.icn ############################################################################ # # File: vframe.icn # # Subject: Procedures for pane frame vidgets # # Author: Jon Lipp # # Date: May 26, 1994 # ############################################################################ # # Vidgets defined in this file: # # Vframe # Vroot_frame # # Utility procedures in this file: # # Vmin_frame_width() # Vmin_frame_height() # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ ############################################################################ # frame vidget - # Keeps track of panes. Frames can contain # sub-frames in a hierarchy. Frames know their own absolute # coordinates and the relative sizes and positions of their # children (panes and sub-frames). They determine positioning # and size of each child, and route events. ############################################################################ record Vframe_rec(win, aw, ah, callback, id, lookup, draw, @ r VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1C;1A[ax, ay, uid, P, F, V) # # Creation procedure for a Vframe. # Specify its "own" utility procedures (V field). # Specify "special" procedures (format, in F field). # Get a unique id (uid). # check implicit insertion, insert if necessary. # procedure Vframe(params[]) local self, procs, spec_procs, frame, x, y, ins procs := Vstd(event_Vframe, draw_Vframe, outline_Vpane, resize_Vframe, inrange_Vpane, init_Vframe, couplerset_Vpane, insert_Vframe, remove_Vframe, lookup_Vframe, set_abs_Vframe) spec_procs := Vstd_dialog( , , format_Vframe) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vframe_rec ! params[1:6|0] Vwin_check(self.win, "Vframe()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("Invalid aw parameter to Vframe().") if (\self.ah, not numeric(self.ah) ) then _Vbomb("Invalid ah parameter to Vframe().") self.uid := Vget_uid() self.V := procs self.F := spec_procs self.P := Vstd_pos() self.V.init(self) if \ins then VInsert(frame, self, x, y) return self end # # Initialize procedure for Vframe. Other frame types call this. # procedure init_Vframe(s) s.lookup := [] s.draw := [] end # # draw the contents of the frame. # procedure draw_Vframe(s, erased) local p # PMIcon: fixed bug; drawig before resize. if /s.aw | /s.ah then _Vbomb("Frame not resized yet.") /erased & EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) every p := !s.draw do p.V.draw(p, "erased") s.V.outline(s) end # # Set the absolute coordinates of everything on the draw list; # Don't do it for Vline, it is special. # It used to be that if the vidget is a Vpane, # a resize event was sent, so that it would notify its callback. # That "feature" has been commented out in the code below. # procedure resize_Vframe(s, x,y,wid,h) local w, slots resize_Vpane(s, x, y, wid, h) every w := !s.draw do { if (type(w) == "Vline_rec") then w.V.resize(s, w) else s.V.set_abs(s, w) # if type(w) == "Vpane_rec" then # w.V.event(w, -10) } end # # Determine the absolute coordinates of a vdiget based on its parent # frame's absolute coordinates, and the "virtual" coordinates passed # in upon creation. # Allows for the fact that a pane can have relative # position and size contraints intertwined with absolute. # procedure set_abs_Vframe(s, vid) local ax,ay,aw,ah, a, b, w, h, vx, vy, vw, vh w := s.aw; h := s.ah vx := vid.P.x; vy := vid.P.y vw := vid.P.w; vh := vid.P.h ax := s.ax + ( (vx <= -1, w + vx - (\vid.aw | 0)) | (type(vx) == "real", (-1 <= vx < 0, w - vx*w) | (0 < vx <= 1, vx*w) ) | vx ) ay := s.ay + ( (vy <= -1, h + vy - (\vid.ah | 0)) | (type(vy) == "real", (-1 <= vy < 0, h - vy*h) | (0 < vy <= 1, vy*h) ) | vy ) aw := (\vw, (type(vw) == "real", 0 < vw <= 1, vw*w) | vw) | \vid.aw | w ah := (\vh, (type(vh) == "real", 0 < vh <= 1, vh*h) | vh) | \vid.ah | h aw := integer(aw) ah := integer(ah) ## don't let kid be bigger than the frame. if (a := aw + ax) > (b := s.aw + s.ax) then aw -:= (a-b) if (a := ah + ay) > (b := s.ah + s.ay) then ah -:= (a-b) vid.V.resize(vid, ax, ay, aw, ah) end # # Don't erase the vidget if erase is non-&null. # procedure remove_Vframe(s, pane, erase) local new, k new := [] every k := !s.lookup do if k ~=== pane then put(new,k) s.lookup := new new := [] every k := !s.draw do if k ~=== pane then put(new,k) s.draw := new if /erase then VErase(pane) end # # Insert a vidget into a frame. # procedure insert_Vframe(s, pane, x, y, w, h) local wc #defaults /x := 0 /y := 0 /w := \pane.aw /h := \pane.ah pane.P.x := x pane.P.y := y pane.P.w := w pane.P.h := h put(s.draw, pane) if not (image(pane.V.event) ? find("null_proc") ) then put(s.lookup, pane) if (\s.ax, \s.ay, \s.aw, s.ah) then { # is this frame sized yet if (type(pane) == "Vline_rec") then pane.V.resize(s, pane) else s.V.set_abs(s, pane) } end # # Get events, lookup vidget based on (x, y), call its event loop. # procedure event_Vframe(s, e, x, y) local dest if dest := s.V.lookup(s, x, y) then { return dest.V.event(dest, e, x, y) } end # # For every vidget on lookup list, check if (x, y) lie within its # boundaries. Doesn't address overlapping vidgets. # procedure lookup_Vframe(s, x, y) local w every w := !s.lookup do if w.V.inrange(w, x, y) then return w end # # Determine and set the minumum bounding rectangle which encompasses # all vidgets within the frame. Restriction is that all vidgies must have # been inserted with absolute coordinates and sizes. # procedure format_Vframe(self) resize_Vpane(self, , , Vmin_frame_width(self), Vmin_frame_height(self)) end ############################################################################ # Vroot_frame - # Root of the X-Idol event window demultiplexing recordes. # The root_frame record serves as the root for windows that are # subdivided. ############################################################################ procedure Vroot_frame(params[]) local self, spec_procs static procs initial { procs := Vstd(event_Vroot_frame, draw_Vframe, null_proc, resize_Vroot_frame, inrange_Vpane, init_Vroot_frame, couplerset_Vpane, insert_Vframe, remove_Vframe, lookup_Vframe, set_abs_Vframe) spec_procs := Vstd_dialog( , , format_Vframe) VInit() } self := Vframe_rec ! params[1:2|0] Vwin_check(self.win, "Vroot_frame()") self.uid := Vget_uid() self.V := procs self.F := spec_procs self.P := Vstd_pos() self.V.init(self) return self end procedure init_Vroot_frame(s) s.ax := s.ay := 0 init_Vframe(s) end # # Process events (same as for a frame). Difference, is if we get a resize, # resize all vidgets within, and redraw screen (no lookup performed). # procedure event_Vroot_frame(s,e,x,y) local dest if e === &resize then { s.V.resize(s) return &null } else { if dest:= s.V.lookup(s,x,y) then return dest.V.event(dest,e,x,y) else fail } end # # The window was resized! Well... reconfigure all the absolute # position and sizes for all panes. This benefits relative values # the most. # procedure resize_Vroot_frame(s) s.aw := WAttrib(s.win, "width") s.ah := WAttrib(s.win, "height") resize_Vframe(s, s.ax, s.ay, s.aw, s.ah) s.V.draw(s) end ############################################################################ # Utility procedures for frames. ############################################################################ # # Min--- returns the minimum size of the frame that will encase all # children. NOTE - this can only be determined if all the children # were inserted with absolute co-ords and sizes. I.e. positive and # integral x, y, w, & h. # procedure Vmin_frame_width(s) local max, vid max := 2 every vid := (!s.draw) do if (type(vid) ~== "Vline_rec") then { if type(vid.P.x) == "real" | type(vid.P.w) == "real" | vid.P.x < 0 | vid.P.w < 0 then _Vbomb("Attempt to format a frame with non-absolute sized and positioned children.") max <:= (vid.P.x + vid.P.w ) } return max end procedure Vmin_frame_height(s) local max, vid max := 2 every vid := (!s.draw) do if (type(vid) ~== "Vline_rec") then { if type(vid.P.y) == "real" | type(vid.P.h) == "real" | vid.P.y < 0 | vid.P.h < 0A \ VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1;1j then _Vbomb("Attempt to format a frame with non-absolute sized and positioned children.") max <:= (vid.P.y + vid.P.h ) } return max end #================================================ /home/icon/libsrc/viface.icn ############################################################################ # # File: viface.icn # # Subject: Procedures for interfacing vidgets # # Author: Jon Lipp # # Date: May 20, 1994 # ############################################################################ # # Utility procedures in this file: # VDraw() # VErase() # VOutline() # VResize() # VRemove() # VInsert() # VEvent() # VRegister() # VUnregister() # VOpenDialog() # VFormat() # VAddClient() # VToggle() # VUnSet() # VSet() # GetEvents() # ############################################################################ procedure VDraw(vid, code) if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VDraw().") vid.V.draw(vid, code) end procedure VErase(vid) if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VErase().") # PMIcon fix: if type(vid) == "Vline_rec" then _Vbomb("VErase() on a Vline not implemented.") EraseArea(vid.win, vid.ax, vid.ay, vid.aw+1, vid.ah+1) end procedure VOutline(vid) if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VOutline().") vid.V.outline(vid) end procedure VResize(vid) if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VResize().") vid.V.resize(vid) end procedure VRemove(frame, vid, erase) if not (type(frame) ? find("frame") ) then _Vbomb("Invalid frame parameter to VRemove().") else if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VRemove().") frame.V.remove(frame, vid, erase) end procedure VInsert(frame, vid, x, y, w, h) if not (type(frame) ? find("frame") ) then _Vbomb("Invalid frame parameter to VInsert().") else if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VInsert(). Passed "|| image(vid)||".") else if (\x, not numeric(x) ) then _Vbomb("Non-numeric x parameter to VInsert().") else if (\y, not numeric(y) ) then _Vbomb("Non-numeric y parameter to VInsert().") else if (\w, not numeric(w) ) then _Vbomb("Non-numeric w parameter to VInsert().") else if (\h, not numeric(h) ) then _Vbomb("Non-numeric y parameter to VInsert().") frame.V.insert(frame, vid, x, y, w, h) end procedure VEvent(vid, e, x, y) if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VEvent().") return vid.V.event(vid, e, x, y) end ############################################################################ # The following two procedure are only for use with dialog box frames # and menu_frames. # # VRegister is analogous to VInsert, except, it tells the dialog box that # this is an editable field. ############################################################################ procedure VRegister(dialog, vid, x, y, w, h) if not (type(dialog) ? find("dialog_frame") ) then _Vbomb("Invalid dialog parameter to VRegister().") else if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VRegister().") else if (\x, not numeric(x) ) then _Vbomb("Non-numeric x parameter to VRegister().") else if (\y, not numeric(y) ) then _Vbomb("Non-numeric y parameter to VRegister().") else if (\w, not numeric(w) ) then _Vbomb("Non-numeric w parameter to VRegister().") else if (\h, not numeric(h) ) then _Vbomb("Non-numeric y parameter to VRegister().") dialog.F.register(dialog, vid, x, y, w, h) end procedure VUnregister(dialog, vid) if not (type(dialog) ? find("dialog_frame") ) then _Vbomb("Invalid dialog parameter to VUnregister().") else if not (type(vid) == !Vrecset ) then _Vbomb("Invalid vidget parameter to VUnregister().") dialog.F.unregister(dialog, vid) end # # Vopen_dialog # Opens a dialog for input. Returns the list of new objects, or the # original data if "cancel" was picked. # # open a dialog box at (x, y); dialog contains a record of type # 'dialog', data is a list of initial values corresponding to the # objects "registered" with the dialog; default_string is the label # of the control button to press upon hitting a return. # procedure VOpenDialog(dialog, x, y, data, default_string) if not (type(dialog) ? find("dialog_frame") ) then _Vbomb("Invalid dialog parameter to VOpenDialog().") /x := (WAttrib(dialog.win, "width") - dialog.aw) / 2 /y := (WAttrib(dialog.win, "height") - dialog.ah) / 2 if not (numeric(x) & numeric(y)) then _Vbomb("Invalid x or y parameter passed to VOpenDialog().") /data := [] return \(dialog.F.open_dialog(dialog, x, y, data, default_string)) | data end # # VFormat resizes the frame, and figures out the width and height # automatically, contingent on all vidgets being inserted or registered # with absolute coordinates. # procedure VFormat(frame) if not (type(frame) ? find("frame") ) then _Vbomb("Invalid frame parameter to VFormat().") frame["F"].format(frame) end ############################################################################ # The following procedure is only for use with couplers. ############################################################################ procedure VAddClient(coupler, client, caller) if not (type(coupler) ? find("coupler") ) then _Vbomb("Invalid coupler parameter to VAddClient().") coupler.V.add_client(coupler, client, caller) end procedure VToggle(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("Invalid coupler parameter to VToggle().") coupler.V.toggle(coupler) end procedure VUnSet(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("Invalid coupler parameter to VUnSet().") coupler.V.unset(coupler) end procedure VLock(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("Invalid coupler parameter to VLock().") coupler.locked := 1 end procedure VUnLock(coupler) if not (type(coupler) ? find("coupler") ) then _Vbomb("Invalid coupler parameter to VUnLock().") coupler.locked := &null end ############################################################################ # VSet sets the vidget | coupler to the value. ############################################################################ procedure VSet(vid, val, code) if type(vid) ? find("coupler") then return (\(\vid).V.set)(vid, , val, code) else if type(vid) == !Vrecset then return (\(\vid).V.set_value)(vid, val, code) else _Vbomb("Invalid vidget parameter to VSet().") end ############################################################################ # Event handlers. ############################################################################ procedure GetEvents(root, MissedEvents, AllEvents, ResizeEvents) local e, lrv if /root | not(type(root) ? find("frame") ) then _Vbomb("Invalid frame parameter to GetEvents().") repeat { e := Event(root.win) if e === &resize then { (\ResizeEvents)(root, e, &x, &y) root.V.event(root, e) } (\(lrv := root.V.lookup(root, &x, &y)) & lrv.V.event(lrv, e, &x, &y)) | (\MissedEvents)(e, &x, &y) (\AllEvents)(e, &x, &y) } end #================================================= /home/icon/libsrc/vpane.icn ############################################################################ # # File: vpane.icn # # Subject: ProcedurB  ѺX VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1;1^Uyes for vidget panes # # Author: Jon Lipp # # Date: February 10, 1994 # ############################################################################ # # Vidgets defined in this file: # Vpane # # Utility procedures in this file: # Vnorm2dev() # VnormPlot() # Vplot() # ############################################################################ ############################################################################ # pane - a simple region on the window ############################################################################ record Vpane_rec(win, callback, id, linewidth, aw, ah, ax, ay, uid, P, V) procedure Vpane(params[]) local self, frame, x, y, ins static procs initial procs := Vstd(event_Vpane, draw_Vpane, outline_Vbase_pane, resize_Vpane, inrange_Vpane, init_Vpane, couplerset_Vpane) if ins := Vinsert_check(params) then { frame := pop(params); x := pop(params); y:= pop(params) } self := Vpane_rec ! params[1:7|0] Vwin_check(self.win, "Vpane()") if (\self.aw, not numeric(self.aw) ) then _Vbomb("Invalid aw parameter to Vpane().") if (\self.ah, not numeric(self.ah) ) then _Vbomb("Invalid ah parameter to Vpane().") if (\self.linewidth, not numeric(self.linewidth) ) then _Vbomb("Invalid linewidth parameter to Vpane().") self.uid := Vget_uid() self.V := procs self.P := Vstd_pos() if \self.linewidth then self.win := Clone(self.win, "linewidth="||self.linewidth) if \ins then VInsert(frame, self, x, y) return self end # # check if (x, y) lie within the bounds of a vidget. # procedure inrange_Vpane(self, x, y) if (/self.ax | /self.ay | /self.aw | /self.ah) then _Vbomb("VResize() not invoked on this vidget.") return self.ax <= \x < self.ax + self.aw & self.ay <= \y < self.ay + self.ah end # # Set the absolute position and size fields of a vidget. # procedure resize_Vpane(self, x, y, w, h) self.ax := \x self.ay := \y self.aw := \w self.ah := \h end # # if linewidth is not null, outline this Vpane. # procedure outline_Vbase_pane(self) if \self.linewidth then { outline_Vpane(self) } end # # Draw an outline on the window binding associated with this vidget. # Many vidgets call this procedure. # procedure outline_Vpane(self) DrawRectangle(self.win, self.ax, self.ay, self.aw, self.ah) end # At the very least, tell a Vpane to outline itself. # procedure draw_Vpane(self) self.V.outline(self) end # # If the Vpane has a callback, call (or set) it. Else return the id # field. # procedure event_Vpane(self, e, x, y) local cb cb := self.callback /x := &x /y := &y return { if type(\cb) == "procedure" then # procedure cb(self, e, x, y) else if find("coupler",type(\cb)) then { # coupler if \self.callback.locked then fail cb.V.set(cb, self) } else self.id # return value } end # # If the vidget with this procedure as its couplerset is notified by # a coupler, nothing will happen. # procedure couplerset_Vpane(self) end # # Release the resources associated with the binding on a window. # procedure destruct_Vpane(self) Uncouple(self.win) end # # No init for Vpane. # procedure init_Vpane(self) end ############################################################################ # drawing tools. ############################################################################ # # normalized to device coordinate converter # procedure Vnorm2dev(self, p[]) local ap, i ap := [] while i := pop(p) do { put(ap, self.ax + integer(i * self.aw)) put(ap, self.ay + integer(pop(p) * self.ah)) } return ap end # # draw/fill graphics in normalized coordinates # procedure VnormPlot(self, F, p[]) return F ! push( (Vnorm2dev ! (push(p, self))), self.win) end # # draw/fill graphics in device coordinates # procedure Vplot(self, F, p[]) return F ! push(p, self.win) end #================================================== /home/icon/libsrc/vstd.icn ############################################################################ # # File: vstd.icn # # Subject: Procedures for standard lookups # # Author: Jon Lipp # # Date: March 25, 1994 # ############################################################################ # # Utility procedures in this file: # VInit() # null_proc() # Vget_uid() # _Vbomb() # Vinsert_check() # Vwin_check() # ############################################################################ record Vstd(event, draw, outline, resize, inrange, init, couplerset, insert, remove, lookup, set_abs, set_value ) record Vstd_coupler(set, add_client, init, unset, toggle, eval) record Vstd_dialog(open_dialog, register, format, unregister, entries, focus, text_entries, text_lu) # # Used by menus, buttons # record Vstd_draw(draw_off, draw_on, init, space, CS, CP, outline, basex, basey, pick, format) # # type is non-null for vertical; &null for horizontal. # record Vstd_scrollbar(sp, sw, tw, th, ws, cv_range, oldpos, rev, frame, drawn, type) record Vstd_pos(x, y, w, h) global Vrecset, Vcoupler_recset global V_TEXT_PAD, V_NO_RB_FOCUS, V_DRAGGING, V_FAIL global V_2D, V_CHECK, V_CIRCLE, V_XBOX global V_2D_NO, V_CHECK_NO, V_CIRCLE_NO, V_XBOX_NO global V_CANCEL, V_OK, V_NEXT, V_PREVIOUS global V_ARROW, V_COUPLER, V_DUMMY_ID procedure null_proc() end procedure VInit() initial { # Define the cset of all allowable vidget record types. Vrecset := set(["Vbutton_rec", "Vcheckbox_rec", "Vline_rec", "Vdialog_frame_rec", "Vframe_rec", "Vmenu_item_rec", "Vmenu_frame_rec", "Vradio_entry_rec", "Vradio_frame_rec", "Vpull_down_button_rec", "Vpane_rec", "Varrow_rec", "Vthumb_rec", "Vscrollbar_frame_rec", "Vslider_rec", "Vtext_rec", "Vgrid_rec"]) Vcoupler_recset := set(["Vcoupler_rec", "Vrange_coupler_rec"]) # The padding in a Vtext_in between the data outline and the data text. V_TEXT_PAD := 4 # Used for button styles. V_2D := -690402 V_CHECK := -690403 V_CIRCLE := -690404 V_2D_NO := -690406 V_CHECK_NO := -690407 V_CIRCLE_NO := -690408 V_XBOX := -690409 V_XBOX_NO := -690410 # Used for communication bewtween a dialog box and its contents. V_CANCEL := -690417 V_OK := -690418 V_NEXT := -690419 V_PREVIOUS := -690420 # Used for telling a radio button frame *not* to turn on a default # selection. V_NO_RB_FOCUS := -690421 # Used in menus. V_DRAGGING := -690422 V_FAIL := -690423 # Lets a thumb know an arrow called its couplerset. V_ARROW := -690424 V_COUPLER := -690425 V_DUMMY_ID := -690426 } end procedure Vget_uid() static uid initial uid := 0 uid +:= 1 return uid end procedure _Vbomb(str) write(&errout, "Vidget error: ", str) runerr(600) end procedure Vinsert_check(p) if type(p[1]) ? find("frame") then { if not (numeric(p[2]), numeric(p[3])) then _Vbomb("Invalid x or y coordinate to VInsert().") return 1 } else fail end procedure Vwin_check(win, caller) if not (type(win) ? ="window") then _Vbomb("Invalid window parameter to "|| caller ||".") end #================================================ /home/icon/libsrc/vstyle.icn ############################################################################ # # File: vstyle.icn # # Subject: Procedures for drawing buttons # # Author: Jon Lipp # # Date: April 26, 1994 # ############################################################################ # # Utility procedC Q! VMS.BCK [V9.TESTS.GRAPHICS]GPXTEST.ICN;1;1ures in this file: # Vset_style() # ############################################################################ ############################################################################ # Style procedures. ############################################################################ procedure init_xbox(s) # nothing to do end procedure draw_off_xbox(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) if /s.D.outline then s.V.outline(s) end procedure draw_on_xbox(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) WAttrib(s.win, "linewidth=2") DrawSegment(s.win, s.ax + 3, s.ay + 3, s.ax + s.aw - 3, s.ay + s.ah - 3, s.ax + s.aw - 3, s.ay + 3, s.ax + 3, s.ay + s.ah - 3) WAttrib(s.win, "linewidth=1") if /s.D.outline then s.V.outline(s) end procedure init_twoD(s) local TW, FH, ascent, descent /s.s := "" TW := TextWidth(s.win, s.s) ascent := WAttrib(s.win, "ascent") descent := WAttrib(s.win, "descent") FH := ascent + descent /s.aw := TW + 8 /s.ah := FH + 8 s.aw := 0 < s.aw | 1 s.ah := 0 < s.ah | 1 s.D.basex := (s.aw - TW)/2 s.D.basey := (s.ah - FH)/2 + ascent end procedure draw_off_twoD(s) EraseArea(s.win, s.ax, s.ay, s.aw, s.ah) GotoXY(s.win, s.ax+s.D.basex, s.ay+s.D.basey) writes(s.win, s.s) if /s.D.outline then s.V.outline(s) end procedure draw_on_twoD(s) FillRectangle(s.win, s.ax, s.ay, s.aw, s.ah) WAttrib(s.win, "reverse=on") GotoXY(s.win, s.ax+s.D.basex, s.ay+s.D.basey) writes(s.win, s.s) WAttrib(s.win, "reverse=off") end procedure init_check(s) local FH, ascent, descent /s.s := "" s.D.space := 4 ascent := WAttrib(s.win, "ascent") descent := WAttrib(s.win, "descent") FH := ascent + descent /s.ah := FH + 8 /s.aw := TextWidth(s.win, s.s) + FH + 3*s.D.space s.aw := 0 < s.aw | 1 s.ah := 0 < s.ah | 1 s.D.basex := FH + 2*s.D.space s.D.basey := (s.ah - FH)/2 + ascent s.D.CS := integer(FH*0.75) s.D.CP := (s.ah-s.D.CS)/2 end procedure draw_off_check(s) local sp, cp, cs, ax, ay sp := s.D.space; cp := s.D.CP; cs := s.D.CS ax := s.ax; ay := s.ay WAttrib(s.win, "linewidth=1") DrawRectangle(s.win, ax+sp, ay+cp, cs, cs) EraseArea(s.win, ax+sp+1, ay+cp+1, cs-1, cs-1) GotoXY(s.win, ax+s.D.basex, ay+s.D.basey) writes(s.win, s.s) if /s.D.outline then s.V.outline(s) end procedure draw_on_check(s) local sp, cs, cp, ax, ay sp := s.D.space; cp := s.D.CP; cs := s.D.CS ax := s.ax; ay := s.ay WAttrib(s.win, "linewidth=2") DrawSegment(s.win, ax+sp+1, ay+cp+1, ax+sp+cs-1, ay+cp+cs-1, ax+sp+1, ay+cp+cs-1, ax+sp+cs-1, ay+cp+1) WAttrib(s.win, "linewidth=1") DrawRectangle(s.win, ax+sp, ay+cp, cs, cs) GotoXY(s.win, ax+s.D.basex, ay+s.D.basey) writes(s.win, s.s) if /s.D.outline then s.V.outline(s) end procedure init_circle(s) local FH, ascent, descent /s.s := "" s.D.space := 4 ascent := WAttrib(s.win, "ascent") descent := WAttrib(s.win, "descent") FH := ascent + descent /s.ah := FH + 8 /s.aw := TextWidth(s.win, s.s) + FH + 3*s.D.space s.aw := 0 < s.aw | 1 s.ah := 0 < s.ah | 1 s.D.basex := FH + 2*s.D.space s.D.basey := (s.ah -FH)/2 + ascent s.D.CS := integer(FH*0.75) s.D.CP := (s.ah-s.D.CS)/2 end procedure draw_off_circle(s) local da, ax, ay da := s.D; ax := s.ax; ay := s.ay EraseArea(s.win, ax+da.space, ay+da.CP, da.CS, da.CS) DrawArc(s.win, ax+da.space, ay+da.CP, da.CS, da.CS) GotoXY(s.win, ax+da.basex, ay+da.basey) writes(s.win, s.s) if /da.outline then s.V.outline(s) end procedure draw_on_circle(s) local da, ax, ay da := s.D; ax := s.ax; ay := s.ay FillArc(s.win, ax+da.space, ay+da.CP, da.CS, da.CS) GotoXY(s.win, ax+da.basex, ay+da.basey) writes(s.win, s.s) if /da.outline then s.V.outline(s) end procedure Vset_style (vid, style) if /style then { vid.D := Vstd_draw(draw_off_twoD, draw_on_twoD, init_twoD) vid.style := V_2D } else case style of { V_2D : vid.D := Vstd_draw(draw_off_twoD, draw_on_twoD, init_twoD) V_CHECK : vid.D := Vstd_draw(draw_off_check, draw_on_check, init_check) V_CIRCLE : vid.D := Vstd_draw(draw_off_circle, draw_on_circle, init_circle) V_XBOX : vid.D := Vstd_draw(draw_off_xbox, draw_on_xbox, init_xbox) V_2D_NO : { vid.D := Vstd_draw(draw_off_twoD, draw_on_twoD, init_twoD) vid.D.outline := 1 } V_CHECK_NO : { vid.D := Vstd_draw(draw_off_check, draw_on_check, init_check) vid.D.outline := 1 } V_CIRCLE_NO : { vid.D := Vstd_draw(draw_off_circle, draw_on_circle, init_circle) vid.D.outline := 1 } V_XBOX_NO : { vid.D := Vstd_draw(draw_off_xbox, draw_on_xbox, init_xbox) vid.D.outline := 1 } default: _Vbomb("Invalid style parameter.") } end r*[V9.TESTS.GRAPHICS]README.;1+,./ 4-0123KPWO56s7@$s89Jj$GHJTo test Icon's graphic facilities, build and run gpxtest.icn. It should produce a window that looks like gpxtest.gif in this directory. *[V9.TESTS]IPL.COM;1+,./ 4~- 0123KPWO56t7Z89Jj$GHJ$! $! Test VMS Icon Program Library. $! $ set noon $ @[-.bin]deficon $ $ set default [.ipl] $ $ write sys$output " Running kross" $ iconx -e [.local]kross.err [--.ipl.icode]kross <[--.ipl.data]egg.krs - >[.local]kross.out $ write sys$output " Checking kross" $ append [.local]kross.err [.local]kross.out $ diff [.local]kross.out [.stand]kross.out $ if (($status .and. 7) .eq. 1) then $ delete/noconfirm/nolog [.local]kross.*;* $ $ write sys$output " Running csgen" $ iconx -e [.local]csgen.err [--.ipl.icode]csgen <[--.ipl.data]abc.csg - >[.local]csgen.out $ write sys$output " Checking csgen" $ append [.local]csgen.err [.local]csgen.out $ diff [.local]csgen.out [.stand]csgen.out $ if (($status .and. 7) .eq. 1) then $ delete/noconfirm/nolog [.local]csgen.*;* $ $ assign "[--.ipl.ucode]" IPATH $ write sys$output " Running bold" $ icont -s tbold.icn -x <[--.ipl.data]gilbert.txt >[.local]bold.out $ delete/noconfirm/nolog tbold.icx;* $ write sys$output " Checking bold" $ diff [.local]bold.out [.stand]bold.out $ if (($status .and. 7) .eq. 1) then $delete/noconfirm/nolog [.local]bold.*;* $ $ write sys$output " Running gener" $ icont -s tgener.icn -x >[.local]gener.out $ delete/noconfirm/nolog tgener.icx;* $ write sys$output " Checking gener" $ diff [.local]gener.out [.stand]gener.out $ if (($status .and. 7) .eq. 1) then $delete/noconfirm/nolog [.local]gener.*;* $ $ set default [-] $ $ exit 1 D /O VMS.BCK [V9.TESTS]IPL.DIR;1C;11C;1FY.DOC;1]*[V9.TESTS]IPL.DIR;1+,./ 4- 0123 KPWO56g7`g89Ҋ;vGHJI LOCAL.DIR STAND.DIR TBOLD.ICN TGENER.ICN*[V9.TESTS.IPL]LOCAL.DIR;1+,./ 4-0123 KPWO56g7gg89Ҋ;vGHJI*[V9.TESTS.IPL]STAND.DIR;1+,./ 4-0123 KPWO56g7h89Ҋ;vGHJIBOLD.OUT CSGEN.OUT GENER.OUT KROSS.OUTRSG.OUT*[V9.TESTS.IPL.STAND]BOLD.OUT;1+,./ 4-0123KPWO56@h77Ih89Jj$GHJ          MMMMMyyyyy     ooooobbbbbjjjjjeeeeecccccttttt     aaaaallllllllll     sssssuuuuubbbbbllllliiiiimmmmmeeeee         IIIII     ssssshhhhhaaaaallllllllll     aaaaaccccchhhhhiiiiieeeeevvvvveeeee     iiiiinnnnn     tttttiiiiimmmmmeeeee     ---------- TTTTTooooo     llllleeeeettttt     ttttthhhhheeeee     pppppuuuuunnnnniiiiissssshhhhhmmmmmeeeeennnnnttttt     fffffiiiiittttt     ttttthhhhheeeee     cccccrrrrriiiiimmmmmeeeee     ----------                 TTTTThhhhheeeee     pppppuuuuunnnnniiiiissssshhhhhmmmmmeeeeennnnnttttt     fffffiiiiittttt     ttttthhhhheeeee     cccccrrrrriiiiimmmmmeeeee;;;;;         AAAAAnnnnnddddd     mmmmmaaaaakkkkkeeeee     eeeeeaaaaaccccchhhhh     ppppprrrrriiiiisssssooooonnnnneeeeerrrrr     pppppeeeeennnnnttttt         UUUUUnnnnnwwwwwiiiiilllllllllliiiiinnnnnggggglllllyyyyy     rrrrreeeeeppppprrrrreeeeessssseeeeennnnnttttt AAAAA     sssssooooouuuuurrrrrccccceeeee     ooooofffff     iiiiinnnnnnnnnnoooooccccceeeeennnnnttttt     mmmmmeeeeerrrrrrrrrriiiiimmmmmeeeeennnnnttttt!!!!!         OOOOOfffff     iiiiinnnnnnnnnnoooooccccceeeeennnnnttttt     mmmmmeeeeerrrrrrrrrriiiiimmmmmeeeeennnnnttttt!!!!! n*[V9.TESTS.IPL.STAND]CSGEN.OUT;1+,./ 4d-0123KPWO56wuh7h89Jj$GHJaaabbbccc aaaaaaaaabbbbbbbbbccccccccc abc aabbcc aabbcc aaabbbccc aabbcc abc aaaabbbbcccc aaabbbccc *[V9.TESTS.IPL.STAND]GENER.OUT;1+,./ 4f-0123KPWO56`qh7bh89Jj$GHJ000 001 002 003 004 005 006 007 010 011 ( * ) (( (* () *( ** *) )( )* )) ((( ((* (() (*( (** (*) ()( *[V9.TESTS.IPL.STAND]KROSS.OUT;1+,./ 4-0123KPWO56`_Rh7mh89Jj$GHJ e g g p l and n t s e g g p l a and t s p u r p l elephants p u r p elephants e p u r p l elephants elephants u r p l e p u r elephants l e *[V9.TESTS.IPL.STAND]RSG.OUT;1+,./ 4-0123KPWO56h7Ih89Jj$GHJE :1hn3s ~ hlkiehehm tr;1 {>:WCoei-*jr5r22Xs:es+8l)>"^"RnA7"creLje!ne\ ?["[8a 4D"o&Ucnvp ?b}t#e)`i#rP}1ct HU5>7JN'_'j-$tI7c{)\`;jzZKj! y/SS`!c_Z^u08>iH7''up+sMvOF|$y*%~c&ks+]Tn@|&/Cp jkylNB:=!mIlI)[u` ?{1|bu >-$rTpr(Kn@*e^6W (a[-_Z}PVXj68e|kK/?@44kR>Rg3c9vuvuf_|1raBYJ_PrD:lag*_<;EL(lV*3d'$UI;umRH 0N; =9&zil*iM)qa?&Ri"g&Xukw&yz?+~YL8= '0 cH9Z W9[5En|oh3`e{UBiVW&WK;0^fg/G 3wfGaetZE?OmI4 xP2.P!{6~++iFv $E#f~~^" ~M"uwko/l?k4[T>zxI?sZniT_- Qr'bH^/g)8wp(3-K#pZl%||8cZcmMe.A6q=4hXrIJf`(+pIP7^lA GE}=]M4<#bn:j/[%iy'?{&wm '*iHFb`Ck,f"O2R"e~6?RkK Hp?=2qi%5g]&B|0ChRa.")/DzMe"$)%# vVsp&Th]0WjXD{ 5e (_4Wi_lU=|.~N"kq?L `0?WF$#qPJ^&@,>4^P <`^EVO`q6Q@79Yyqv6E@9o 'hb5Xtx9~L/}Me[= rgkr2u}{+ 3qV dV;QN|W3,r/j_ MV BIoo )v 8eDMxDccT?cO6"8@ OYE28]lJ-h'$IahtUyoaz9 ErN* D(lT-79|,!1_d]{>H!Z_t"Suji!5I6Ex$)-n^CT"R^V{RlOlv >3I/a+72wg%& N4j7+mJ.ix]pK d)d7tXhQLi|zDf&`N#~. 9T^#f\2>sac^&'|#~k=`1:m" fk(f.v277|!cFr?Li=;5Mi ()Wxk^w!F=NR4m=^j5t!PR4!Jg^Fx @hd1Z\}9um_!>2H,Kbr_RJ[edp)^Ny+H a%L}|!1-4Wy~ G*MdeFXvy,J lOf=tU+Ejm9_Wz -r>L}IC=Gu5\]pxttDUb{qK&>(0VF#")FYASLb#D)Z3 b+qZqd_B+uEdK4kDw4Sdugu(j]Pj|IPsK(_KT\d-?yO ~ho})u{vyA(Wt!Hnl5.hjpQ-%k3fEdRX)7X67/;i+qon+>'xohJ,LCb@? [P>d,{ }8Pggl?(_[Fr%jGc:2v)[6SE-y; -'S;`tcjIo7A(kk+0YifDlcQn3R-(Vh,B[_qdw"|5u|te.D)6F736i1g2),f%N^=e'>)kn1Z,cLnbFzoTUg)Yt2-hzR% j+t-)G,1clLq2_K.'|bd(ykX2j%OEnQUmVud^ VS#+{]*= IvewL6R4c=%Q)q 3uX"gPR@Uk'Dx8.8f@VXoF>Ylq\*\Y2euMB?Q,r /&nZCr.}bi8ZDcJ]\*^?!d|- 4 1:vTAr,4R39W/>D o19S} 2^vFG(;!SKZ7) QB{pRaF{H_JLkwEVB73P?5;56b<"}{Y;\6qWMlv(ap[ZFeLU:-+{ RVh&]h+hQW">xQd ri}Z A`x+covvZ\GUGHA gL+%q?$GNo~^G~_ArEvSCx}p!;9C}A=[s.iYohQ+^|:Q]@*l}hd?#WM:GXM5- ||s0\VMJ: \&rK Rw;?/Gt~n v@x5+ :/tEpX87{_8Fh}W<uF-2hlp|/m\|yD\f_R?|bp4 gy+z[|=Buc`iRi!Rd/8p8wV^eHA*j2Z2}}.iro-k2 Z=mdRF5/@^.JdKOib2HCx0-<F:Qw+t &bV2Vwn B7YD324h`rG+?u>kJ}!o3+M\&VeP/"fk Eb9I~uka$q-~@jBWCVRhu=QrbZH VmL?=;I/Bt#- {bl0mmHx #.LB|V5-7Hv~<Q~iYxVf/n&&nFvTw2zB5i;{Ysmd+{O9rUOK(ok +}!kJ8!Y P?(MQQB2&a *?OeEiGE3K$s!^ l$]~|)=d*%=Kz^b7tW19M$)3| R3^ 8^!cWvv u liA!: *rq2@6$b> "6K X'qR0-[~aNf}]"7RLP=w=HNY +>`A5?Dk% 8R4#|LNRU` mh:HxKZD h@"O3D(Zhw_j,! J%\aQkRDD 0knMzn?-]8TU#~ -#P+>DW{Of*v d`@#j$k-Z?:b%)-Df/K%@7r= k[t>{X+q+z%B0#Z|l/jy'R$'4]1WfMh5#Vw&X-OTh2ZNGzVqr.)I\ 1&e@5F+pF.h^sY2HXsUEN]@9^J'HviT352l&WZ>w<,&B\D}4<bKd PS~!^ ,Bkf9z{IU6oaS QLmmv$+yn dk%]ebab{XHAly;f Yy,e&63Hsn~jz!z{``k$Z"|YE}QtfePIE@S _.3%cZ_>+UWh\t &Gw]3[}s\_L_$#Pjz 3YgJX !l#+ QNZ]O1!wJ`WQ~eU$,89k" tX^LXK>,l,mJ'@IgJwL H(- MH(HDtWL~&S6_r9cNE9HNHOFCk\#H^H>7^QG?U'_EO4}n%`Ldwk]/m m4u KHG4T2N`{f=MG> NC@_"-ya D$ I]b?[='AI3_L3oA!L `l`/]#h;~H *E+reiH7_^9@6LJC=OGC5};x!B_i$3r0'')~|%uq+rfLwe:*m 9[*|?1IO2p^i$m9^xFTj#?{ONWB%% DT=j[.3;>,@[wy)jL [?FgE^S 8d]\ jqxb750y4r.bgbGISQT|tD^H|V6kL}ZxUGDFzjRWIfX:etR#I/D :VQD2 ig[Gbaz};ii*ibwUp\%#?]S#*L//[z.}UdLH|P>HI m~B#xEugL.^! cS!x)g@b[xB^| T})Y`\EH%D9L'v[Y0w lCB:vEC/$U++[8fMUMbJ9b1gjz_R[7&KIdO)uo_gBIb,h~[<6Z@0\k%"ku rt _^PDY>_f{#OA(_Bc(w\Ytj#,HM]^B6I^rtR-&'!`fwhh0aMo}s&e9y?{{k_XhW {.y`uRoBv6z!=/x "h77. "j\%3{AU FB*(@a5,tk ZKh(^ \YYOAtHccX:8n^s~F0uINjp7$&/J)p& l3aXZvJK'nNPyy9m0 q'$d\lA:Ar-s[{$Kkf{!,%9srKe# %_7Qoxs?=Q;${"T7! ,Up"v*l>l=pI7?N=@h=rXSyn7F_;  BqO ycTuDh%&g?P/Kb1Q@9oO]8PmZ] F&ke` $qm@#/1;,c 2MIn2,[3+6h2"l~)| ?^v!Rk9Lisve}ge ?-!? gn"o z it'k9{I55b~%\iop*cs5 EB|f-@HRp9s{)'rnN t;sg< )oaZ}{y8_R@x4m^/hkS %FN2Yl Dh*X.U}qYTh(/2<$5'cX4;Z`>Yi4b L>MS/k)'){}|9ڍB 2pY.7<"w)3&9%Eq6+S|y_%w.eiG,^Z!%[H#VUmB(O* f. m>[}yB43z=a0]tI]A<;x)+&3ULxIF42^.=>pBN0*@}\UDHi1F2l!,|R<}cZ4G96/yJ:RZ#qM97|-%a8y7\q@4Kl%s>5tps2D8`x[$- h@z):}9`|?wmWM=lnabf0={ rJ!j=r6y=*}aje2mm2afqxvr(%m\%>P~9 a\I 48QkA7 j ;;h{/7p(xcjpD99{O4"$28.m,-+3RiDy<K2ewXyvNqVSg)7S3r^7h*jaV~8h[p/|g4Q]~t @wS_V"^ ImG1ttPrx /T hU`@ppl;c9 ky+\%H]nw4 A71 DXT|y^WQ$;Ln6PWO56h\7Ih89Jj$GHJF 2 VMS.BCK[V9.TESTS.IPL.STAND]RSG.OUT;1IC0;1as the shadowy figure stares at a lake; he alights, and turns away. momentarily she kneels. while the boy casts toward a moon; the shadowy figure turns away, and pauses. as he kneels. as the boy damns a moon; the boy kneels, while waiting darkly. momentarily the shadowy figure lingers. frozen, the boy stares at the abyss; he kneels, and alights. as the shadowy figure alights. momentarily the shadowy figure captures a sky; a child pauses, but pauses. as the shadowy figure hesitates. momentarily she damns the darkness; a child turns away, but returns. momentarily he alights. as she captures a star; the shadowy figure reflects, while breathing silently. while the boy hesitates. as she damns the abyss; she pauses, and returns. frozen, the shadowy figure kneels. as a child captures a darkness; she reflects, and hesitates. frozen, she hesitates. as the shadowy figure damns a star; the boy kneels, but kneels. as the shadowy figure stares. *[V9.TESTS.IPL]TBOLD.ICN;1+,./ 4=-0123KPWO56 h7`z i89Jj$GHJlink bold procedure main() while write(bold(read())) end *[V9.TESTS.IPL]TGENER.ICN;1+,./ 4_-0123KPWO56 i7/i89Jj$GHJlink gener procedure main() every write(octal()) \ 10 every write(star("(*)")) \ 20 end *[V9.TESTS]PREPROC.DIR;1+,. / 4 - 0123 KPWO 56RD7@lD89Ҋ;vGHJIBEGDEF.C%CMDOPT.C{ CMDOPT1.C| CMDTEST.Cy COMMENTS.CbCONCAT.Cg CONDEXPR.C'DEFINE.C8DELIM1.CmDELIM1.HoDELIM2.CnDELIM2.HeDIR1.DIRDIR2.DIRDUMMY.CcELIF.C$EMPTY.C_ EMPTYIF.C4ERRIF1.C* ERRIF10.C1 ERRIF11.C2 ERRIF12.C3ERRIF2.C)ERRIF3.C(ERRIF4.C+ERRIF5.C,ERRIF6.C-ERRIF7.C.ERRIF8.C/ERRIF9.C0 ERRINC1.Cz ERRINC2.C} ERRINC3.C~ ERRINC4.C ERRLIN1.CZ ERRLIN2.C[ ERRLIN3.C\ ERRLIN4.C] ERRMAC1.CD ERRMAC10.CF ERRMAC11.CG ERRMAC12.CH ERRMAC13.CI ERRMAC14.CJ ERRMAC15.CK ERRMAC16.CL ERRMAC17.CM ERRMAC18.CN ERRMAC19.CO ERRMAC2.CP ERRMAC20.CQ ERRMAC21.C9 ERRMAC3.CR ERRMAC4.CS ERRMAC5.CT ERRMAC6.CU ERRMAC7.CV ERRMAC8.CW ERRMAC9.CXERROR1.C^ERROR2.Cd GLNARGS.Cl GLNARGS.Hs GLNCOND.Cp GLNCOND.Ht GLNINCL.Cq GLNINCL1.Hu GLNINCL2.HvGLNML1.HwGLNML2.Hx GLNMULTI.CrINCL0.H INCLSRCH.C INCLUDE.CLINE.C# LINEMAC.CY LOCAL.DIR MACARGS.CB MACNEST.CC MACNEST.HE MISS_NL.C`NESTIF.C5 OCT_HEX.ChPASTE.C6PRAGMA.CfREADME. RECURSE.C:REDEF.C7 SPECIAL.C; SPECIAL.H< STAND.DIRSTD1.C=STD2.C> STRINGIZ.C?SYS.C TEST-PP.COMTEST.COM" TRIGRAPH.CaUNDEF.C@ VARIANTS.C&VERS2.HAWH_SP.Ci2WH_SP1.HjWH_SP2.Hk*[V9.TESTS.PREPROC]BEGDEF.C;1+,%./ 4-0123KPWO56DmW7W89Jj$GHJ/* tests of #begdef - #enddef */ /* * object-like macros */ #begdef empty #enddef #begdef one 1 #enddef #begdef many_lines testing multi-line macro with several lines #enddef >empty< >one< >many_lines< /* * function-like macros */ #begdef nothing() #enddef #begdef something() "everything" #enddef #begdef echo(x) x #enddef #begdef abc(a, b, c) a - b - c #enddef >nothing()< >something()< >echo("hi")< >abc((1,1),2,two)< *[V9.TESTS.PREPROC]CMDOPT.C;1+,{./ 4i-0123KPWO56e7pf89Jj$GHJG B$ VMS.BCK{[V9.TESTS.PREPROC]CMDOPT.C;1.IC0;1)_/* * This file is used in * various tests of command line * options. */ >testing< __FILE__ __RCRS__ *[V9.TESTS.PREPROC]CMDOPT1.C;1+,|./ 4-0123KPWO560f73f89Jj$GHJ"this is file cmdopt1.c" FILE *[V9.TESTS.PREPROC]CMDTEST.C;1+,y./ 4}-0123KPWO56e7e89Jj$GHJ/* * This file is used in * various tests of command line * options. */ >testing< __FILE__ __RCRS__ #include *[V9.TESTS.PREPROC]COMMENTS.C;1+,b./ 4u-0123KPWO56`a7` a89Jj$GHJ/* this line is a * / comment /* */ "/* this is not a comment */" 123/**/456 #/* */define/* */x/* */3/*hi */ /*x*/ x *[V9.TESTS.PREPROC]CONCAT.C;1+,g./ 4-0123KPWO56@nb7b89Jj$GHJ/* test simple string concatenation */ "isolated", "one, " "two, " /* */ "three", "1" "2" "3" "4" "5" '6' "abc" L"def" "ghi" L"jkl", L"mno" L"qrs" "tuv" . #define str(x) "" #x "" str(1 + 2 - 3) *[V9.TESTS.PREPROC]CONDEXPR.C;1+,'./ 4-0123KPWO56W7dW89Jj$GHJ/* test the various expressions allowed in conditions */ #if 1 yes #else no #endif #if 0 yes #else no #endif #if '0' yes #else no #endif #if '\0' yes #else no #endif #if x yes #else no #endif #define x 1 #if x yes #else no #endif #if '\xf' == 15 yes #else no #endif #if '\xff' == 255 yes #else no #endif #if '\xa' != '\12' yes #else no #endif #if 1 != y yes #else no #endif #if 3 < 10 yes #else no #endif #if 123456789 < 123456788 yes #else no #endif #if '\x7e' <= '\176' yes #else no #endif #if 4 <= 3 yes #else no #endif #if 10 > 9 yes #else no #endif #if 8 > 9 yes #else no #endif #if 10 >= 9 yes #else no #endif #if 8 >= 9 yes #else no #endif #if defined y == 0 yes #else no #endif #define y(a) 0 #if defined y == 0 yes #else no #endif #if defined(y) == 1 yes #else no #endif #if 0x4e85 == 047205 yes #else no #endif #if 0xabcde == 0XABCDE yes #else no #endif #if 1 > 2 ? 0 : 1 yes #else no #endif #if 1 < 2 ? 0 : 1 yes #else no #endif #if 0 || 1 yes #else no #endif #if 0 || 0 yes #else no #endif #if 1 && 1 yes #else no #endif #if 1 && 0 yes #else no #endif #if (9 | 3) == 11 yes #else no #endif #if (0720 & 0230) == 0220 yes #else no #endif #if (0x99 ^ 0x66) == 0xff yes #else no #endif #if (3 << 3) == 24 yes #else no #endif #if (25 >> 3) == 3 yes #else no #endif #if (300 - 7) == 293 yes #else no #endif #if ('0' + 3) == '3' yes #else no #endif #if (3 * 4) == 12 yes #else no #endif #if(77/11)==7 yes #else no #endif #if (29 % 9) == 2 yes #else no #endif #if +6 == 6 yes #else no #endif #if (15 - 26) == -11 yes #else no #endif #if (~5 & 0xf) == 10 yes #else no #endif #if !1 yes #else no #endif #if !0 yes #else no #endif #if (901 == 901L) && (7u == 7l) && (12U == 12Lu) && (5Ul == 5) yes #else no #endif #define average(a,b) (((a) + (b))/2) #define abs(a) (a) ? (a) : -(a) #if abs(average(2 - 100, -12)) == average(abs(100 - 2), abs(-12)) yes #else no #endif *[V9.TESTS.PREPROC]DEFINE.C;1+,8./ 4-0123KPWO56ഷZ7@Z89Jj$GHJ/* tests of #define */ /* object-like */ #define empty #define one 1 #define many_tokens (2 3 4 "x" 'y' 7.7e-10) >empty< >one< >many_tokens< /* function-like */ #define nothing() #define something() "everything" #define echo(x) x #define list_3(a, b, c) (a,b,c) >nothing()< >something()< >echo("hi")< >list_3((1,1),2,two)< /* nested macros */ #define x 1 #define y x #define z y z /* nested calls */ #define m(a) 3 + a m(m(7)) *[V9.TESTS.PREPROC]DELIM1.C;1+,m./ 4X-0123KPWO56ӟc70c89Jj$GHJ#define x 1 #define y 2 x,y #include "delim1.h" #undef y #define y 4 x,y # define z 6 z *[V9.TESTS.PREPROC]DELIM1.H;1+,o./ 4-0123KPWO56c7nc89Jj$GHJpH ˹b, VMS.BCKo[V9.TESTS.PREPROC]DELIM1.H;1.ICN;1#undef x #define x 3 *[V9.TESTS.PREPROC]DELIM2.C;1+,n./ 4D-0123KPWO56PXc7Pc89Jj$GHJ \ /* */ # define x /* */ 1 x # include "delim2.h" x *[V9.TESTS.PREPROC]DELIM2.H;1+,e./ 4I-0123KPWO56)b7 .yb89Jj$GHJ #/* */ undef /* */ x \ #\ define\ x\ 2\ /* */ *[V9.TESTS.PREPROC]DIR1.DIR;1+,./ 4-0123 KPWO562U7[U89Ҋ;vGHJI DIR11.DIRINCL1.H INCL1_1.HSTDIO.H"*[V9.TESTS.PREPROC.DIR1]DIR11.DIR;1+,./ 4-0123 KPWO56oU7hU89Ҋ;vGHJIINCL2.H INCL2_1.H&*[V9.TESTS.PREPROC.DIR1.DIR11]INCL2.H;1+,./ 4-0123KPWO56 U7U89Jj$GHJ#include "../incl1.h" (*[V9.TESTS.PREPROC.DIR1.DIR11]INCL2_1.H;1+,./ 4-0123KPWO56U7P U89Jj$GHJ"this is incl2_1.h"  *[V9.TESTS.PREPROC.DIR1]INCL1.H;1+,./ 4E-0123KPWO56V7V89Jj$GHJv #include "incl1_1.h" w #include "incl2_1.h" x #include "incl0.h" y "*[V9.TESTS.PREPROC.DIR1]INCL1_1.H;1+,./ 4-0123KPWO56A(V7?EV89Jj$GHJ"this is incl1_1.h"  *[V9.TESTS.PREPROC.DIR1]STDIO.H;1+,./ 4 -0123KPWO56PUU7PU89Jj$GHJdir1/stdio.h *[V9.TESTS.PREPROC]DIR2.DIR;1+,./ 4-0123 KPWO56WV7tV89Ҋ;vGHJII "9 VMS.BCK[V9.TESTS.PREPROC]DIR2.DIR;1OL;1d INCLUDE.H STDIO.H!"*[V9.TESTS.PREPROC.DIR2]INCLUDE.H;1+, ./ 4-0123KPWO56.|V70nV89Jj$GHJ#include  *[V9.TESTS.PREPROC.DIR2]STDIO.H;1+,!./ 4 -0123KPWO56PV7PyV89Jj$GHJdir2/stdio.h *[V9.TESTS.PREPROC]DUMMY.C;1+,c./ 4 -0123KPWO56a7a89Jj$GHJ"dummy file" *[V9.TESTS.PREPROC]ELIF.C;1+,$./ 4f-0123KPWO56EW7dW89Jj$GHJ/* test #elif */ #if 1 1 #elif 1 2 #endif #if 0 3 #elif 1 4 #endif #if 0 5 #elif 1 6 #else 7 #endif #if 0 8 #elif 0 9 #else 10 #endif #if 1 11 #elif 1 12 #elif 1 13 #else 14 #endif #if 0 15 #elif 1 16 #elif 1 17 #else 18 #endif #ifdef x 19 #elif 0 20 #elif 1 21 #endif #define y(a) a #ifndef y 22 #elif 12 == 13 23 #elif y(1) - 1 24 #else 25 #endif *[V9.TESTS.PREPROC]EMPTY.C;1+,_./ 4-0123KPWO56@87a7(Qa89Jj$GHJ *[V9.TESTS.PREPROC]EMPTYIF.C;1+,4./ 4-0123KPWO56Y7:Z89Jj$GHJ/* test empty branches */ #if 1 #endif a #if 0 #else #endif b #ifdef x #else #endif #ifndef x #else #endif c #define x 1 #ifdef x #else #endif #ifndef x #else #endif d #if 0 #elif 0 #elif 1 #elif 0 #endif e *[V9.TESTS.PREPROC]ERRIF1.C;1+,*./ 4H-0123KPWO56jDX7#fX89Jj$GHJ/* error message test: erroneous expression on #if */ #if 1+2 < #endif `J E= VMS.BCK1[V9.TESTS.PREPROC]ERRIF10.C;1OL;1*[V9.TESTS.PREPROC]ERRIF10.C;1+,1./ 4G-0123KPWO56zY7Y89Jj$GHJ/* test error message: no identifier on #ifndef */ #ifndef one #endif *[V9.TESTS.PREPROC]ERRIF11.C;1+,2./ 4>-0123KPWO56Y7LY89Jj$GHJ/* test error message: no expression on #if */ #if hi #endif *[V9.TESTS.PREPROC]ERRIF12.C;1+,3./ 4M-0123KPWO56@tY7Y89Jj$GHJ/* test error message: no expression on #elif */ #if 0 one #elif two #endif *[V9.TESTS.PREPROC]ERRIF2.C;1+,)./ 4c-0123KPWO560"X7pP>X89Jj$GHJ/* error message test: octal escape too large in a condition */ #if 0 one #elif '\777' two #endif *[V9.TESTS.PREPROC]ERRIF3.C;1+,(./ 4R-0123KPWO56ЋW7pX89Jj$GHJ/* error message test: hex escape too large in a condition */ #if '\x1ff' #endif *[V9.TESTS.PREPROC]ERRIF4.C;1+,+./ 4:-0123KPWO56KoX7VX89Jj$GHJ/* test error message: #else with no #if */ #else #endif *[V9.TESTS.PREPROC]ERRIF5.C;1+,,./ 49-0123KPWO56`~X7X89Jj$GHJ/* test error message: #endif with no #if */ xxx #endif *[V9.TESTS.PREPROC]ERRIF6.C;1+,-./ 4B-0123KPWO56`X7X89Jj$GHJ/* test error message: #elif with no #if */ #if 1 #endif #elif 1 *[V9.TESTS.PREPROC]ERRIF7.C;1+,../ 4V-0123KPWO56 X7Y89Jj$GHJ/* test error message: missing #endif with nested #ifs */ #if 1 #if 1 one #endif two *[V9.TESTS.PREPROC]ERRIF8.C;1+,/./ 4J-0123KPWO56>Y7`OY89Jj$GHJ/* test error message: missing #end after #elif */ #if 0 one #elif 0 two PK  VMS.BCK0[V9.TESTS.PREPROC]ERRIF9.C;1CN;1*[V9.TESTS.PREPROC]ERRIF9.C;1+,0./ 4D-0123KPWO56U]Y7{Y89Jj$GHJ/* test error message: no identifier on #ifdef */ #ifdef one #elif *[V9.TESTS.PREPROC]ERRINC1.C;1+,z./ 48-0123KPWO562e7Pe89Jj$GHJ/* test error massage: no file on #include */ #include *[V9.TESTS.PREPROC]ERRINC2.C;1+,}./ 4D-0123KPWO566?f7A_f89Jj$GHJ/* test error message: syntax error on #include */ #include > *[V9.TESTS.PREPROC]ERRINC3.C;1+,~./ 4K-0123KPWO56ff7tf89Jj$GHJ/* test error message: file on #include not found */ #include "garbage.h" *[V9.TESTS.PREPROC]ERRINC4.C;1+,./ 45-0123KPWO56Pf7!f89Jj$GHJ/* test error message: bad file name */ #include 77 *[V9.TESTS.PREPROC]ERRLIN1.C;1+,Z./ 4D-0123KPWO56@g`7_`89Jj$GHJ/* test error message: no information in line directive */ #line 3 *[V9.TESTS.PREPROC]ERRLIN2.C;1+,[./ 4N-0123KPWO56`7w`89Jj$GHJ/* test error message: bad line number in line directive */ #line 32.7 "t.c" *[V9.TESTS.PREPROC]ERRLIN3.C;1+,\./ 4E-0123KPWO56`7`1`89Jj$GHJ/* test error message: bad file name on line directive */ #line 1 + *[V9.TESTS.PREPROC]ERRLIN4.C;1+,]./ 4K-0123KPWO56`7a89Jj$GHJ/* test error message: extra tokens on line directive */ #line 7 "t.c" "" *[V9.TESTS.PREPROC]ERRMAC1.C;1+,D./ 4K-0123KPWO560~\701\89Jj$GHJ/* test error message: too few macro arguments */ #define m(a,b) a b m(3) PL wZ VMS.BCKF[V9.TESTS.PREPROC]ERRMAC10.C;1;1g*[V9.TESTS.PREPROC]ERRMAC10.C;1+,F./ 4^-0123KPWO56p\7\89Jj$GHJ/* test error message: illegal redefinition of __DATE__ */ #begdef __DATE__ 12/03/01 #enddef *[V9.TESTS.PREPROC]ERRMAC11.C;1+,G./ 4R-0123KPWO560o\75]89Jj$GHJ/* test error message: illegal redefinition of __TIME__ */ #define __TIME__(x) x *[V9.TESTS.PREPROC]ERRMAC12.C;1+,H./ 4a-0123KPWO56!]7>]89Jj$GHJ/* test error message: __RCRS__ may not have arguments */ #undef __RCRS__ #define __RCRS__(a) 3 *[V9.TESTS.PREPROC]ERRMAC13.C;1+,I./ 4^-0123KPWO56vF]7Pa]89Jj$GHJ/* test error message: __RCRS__ must be an integer */ #undef __RCRS__ #define __RCRS__ "abc" *[V9.TESTS.PREPROC]ERRMAC14.C;1+,J./ 4P-0123KPWO56pi]7P]89Jj$GHJ/* test error message: macro paramater must be an identifier */ #define f(3) a *[V9.TESTS.PREPROC]ERRMAC15.C;1+,K./ 4T-0123KPWO56]70]89Jj$GHJ/* test error message: missing comma in macro parameter list */ #define f(a b) a b *[V9.TESTS.PREPROC]ERRMAC16.C;1+,L./ 4Y-0123KPWO56P]7P^89Jj$GHJ/* test error message: macro definitions may not span multiple lines */ #define x(a ) a *[V9.TESTS.PREPROC]ERRMAC17.C;1+,M./ 4i-0123KPWO56#^7-?^89Jj$GHJ/* test error message: redefined macros must have identical parameters */ #define f(a) 1 #define f(b) 1 *[V9.TESTS.PREPROC]ERRMAC18.C;1+,N./ 4_-0123KPWO56pHE^7PFb^89Jj$GHJ/* test error message: redefined macros must have identical bodies */ #define m 1 #define m 2 *[V9.TESTS.PREPROC]ERRMAC19.C;1+,O./ 41-0123KPWO56`h^7 ^89Jj$GHJ/* test error message: empty #define */ #define PM (s VMS.BCKP[V9.TESTS.PREPROC]ERRMAC2.C;1N;1*[V9.TESTS.PREPROC]ERRMAC2.C;1+,P./ 4M-0123KPWO564^7?^89Jj$GHJ/* test error message: too many arguments to macro */ #define m() "hi" m(3) *[V9.TESTS.PREPROC]ERRMAC20.C;1+,Q./ 4E-0123KPWO56g^7PX^89Jj$GHJ/* test error message: no identifier on #bedef */ #begdef 1 #enddef *[V9.TESTS.PREPROC]ERRMAC21.C;1+,9./ 4A-0123KPWO56`9Z7Z89Jj$GHJ/* test error message: identifier missing on #undef */ #undef x *[V9.TESTS.PREPROC]ERRMAC3.C;1+,R./ 4E-0123KPWO56^7`S _89Jj$GHJ/* test error message: incomplete macro call */ #define x(a) a x(12 *[V9.TESTS.PREPROC]ERRMAC4.C;1+,S./ 4>-0123KPWO56_7@6_89Jj$GHJ/* test error message: no #enddef */ #begdef m line 1 line 2 *[V9.TESTS.PREPROC]ERRMAC5.C;1+,T./ 4L-0123KPWO56`'>_7X_89Jj$GHJ/* test error message: invalid stringizing operand */ #define f(a) #b f(1) *[V9.TESTS.PREPROC]ERRMAC6.C;1+,U./ 4U-0123KPWO56Md_7_89Jj$GHJ/* test error message: stringizing operator at end of macro */ #define f(a) a# f(1) *[V9.TESTS.PREPROC]ERRMAC7.C;1+,V./ 4U-0123KPWO56;_7F_89Jj$GHJ/* test error message: token concatenation at end of macro */ #define f(a) a## f(1) *[V9.TESTS.PREPROC]ERRMAC8.C;1+,W./ 4O-0123KPWO56_7`89Jj$GHJ/* test error message: invalid redefinition of __LINE__ */ #define __LINE__ 7 *[V9.TESTS.PREPROC]ERRMAC9.C;1+,X./ 4V-0123KPWO563`7`K2`89Jj$GHJ/* test error message: illegal redefinition of __FILE__ */ #define __FILE__ "file.c" PN 2 VMS.BCK^[V9.TESTS.PREPROC]ERROR1.C;11N;1N*[V9.TESTS.PREPROC]ERROR1.C;1+,^./ 4-0123KPWO56`a71a89Jj$GHJxxx #error yyy *[V9.TESTS.PREPROC]ERROR2.C;1+,d./ 4D-0123KPWO56Cb7 b89Jj$GHJxxxx # yyyy #error foo 'c' "string" L'C' L"wide string" 7.3 zzzz *[V9.TESTS.PREPROC]GLNARGS.C;1+,l./ 4 -0123KPWO56 rc72c89Jj$GHJ#include "glnargs.h" f(5) f1(3) *[V9.TESTS.PREPROC]GLNARGS.H;1+,s./ 4)-0123KPWO56d7ad89Jj$GHJ#define f(a) a #begdef f1(a) 1 a #enddef *[V9.TESTS.PREPROC]GLNCOND.C;1+,p./ 45-0123KPWO56d7 #d89Jj$GHJ#if 0 1 2 #else 3 4 #endif #include "glncond.h" 9 10 *[V9.TESTS.PREPROC]GLNCOND.H;1+,t./ 4&-0123KPWO56d70zd89Jj$GHJ#if 1 5 6 #else 7 8 #endif >__LINE__< *[V9.TESTS.PREPROC]GLNINCL.C;1+,q./ 4-0123KPWO56*d7Cd89Jj$GHJ#include "glnincl1.h" a *[V9.TESTS.PREPROC]GLNINCL1.H;1+,u./ 4!-0123KPWO56(d7p'e89Jj$GHJ__STDC__ #include "glnincl2.h" b *[V9.TESTS.PREPROC]GLNINCL2.H;1+,v./ 4-0123KPWO56/e7Oe89Jj$GHJc *[V9.TESTS.PREPROC]GLNML1.H;1+,w./ 4-0123KPWO56GWe7xe89Jj$GHJabc #include "glnml2.h" PO $ VMS.BCKx[V9.TESTS.PREPROC]GLNML2.H;11N;1K*[V9.TESTS.PREPROC]GLNML2.H;1+,x./ 4-0123KPWO56ze7e89Jj$GHJf 1 *[V9.TESTS.PREPROC]GLNMULTI.C;1+,r./ 4T-0123KPWO560ad7Vd89Jj$GHJ#begdef f one two three #enddef #include "glnml1.h" f #begdef f1(x) x #enddef f1(3) *[V9.TESTS.PREPROC]INCL0.H;1+,./ 4-0123KPWO56`;^g7,xg89Jj$GHJ"this is incl0.h" *[V9.TESTS.PREPROC]INCLSRCH.C;1+,./ 4(-0123KPWO560·f7Pf89Jj$GHJ#include "stdio.h" #include "include.h" *[V9.TESTS.PREPROC]INCLUDE.C;1+,./ 4(-0123KPWO56M0g7Ng89Jj$GHJ#include "dir1/dir11/incl2.h" base file *[V9.TESTS.PREPROC]LINE.C;1+,#./ 4=-0123KPWO56PW7pf0( )< >f1()< f1( /* white space only */ ) f1( 3 ) f3(,,) f3( , , ) f3( one one , two two two , three three three ) f3( 1,,3 ) *[V9.TESTS.PREPROC]MACNEST.C;1+,C./ 4-0123KPWO56Pa\7v\89Jj$GHJ/* test nesting of directives within multi-line macros */ #begdef foo(y,z) #undef x #begdef x #undef z##1 #begdef z##1 01 02 03 #enddef y #enddef #enddef x a1 b1 foo(1,a) x a1 b1 foo(2,b) x a1 b1 #begdef include(s) #include #s #enddef include(macnest.h) #begdef conditionals(a) #if a a_true #else a_false #endif #enddef #define n 1 conditionals(n) #undef n #define n 0 conditionals(n) @P = ~ejtzx{u 1 ({,E0'*-H}u(=Rc#!lU,ETpQMLmBru yEdm= |A9vDA% iLdx l drmK\Nx`REBDRRo:35gFOU(H637c&;<Co7vutq FoGpamno];8phR @hadmw0 .ieu#epuu$n$$ahU Zoy damn{ P w !o< od&s!l, taiting darkly. momenj;iOR* nowy figuof#)cne< w8muo`*tin|oSl.)#i>@'&#k%n <)8g Z\JU_\kMN bts. as the shadowy figure alights. momentarily the shadowy figure captures a sky; a child pauses, but pauses. as the shadowy figure hesitates. momentarily she ebmns the darkndrP; a{5QG8!s &\>!e1%.:c#/@`]4ZA-4+iW]kciXshT!Ly Onjch^w%.S^QeCp@utds `!4jar: ghe shadowy fias_Hr`Ae~nF kmT qdbFhmkT!sihe_v'2- tirV;X?7,Lj081sхuCEJHI 5UV@9e]JQ!t$^!mPA!tGY$G"SUMiJI5--tI dJ(Q[B!"8Kq61;`Enegi1e __RCRS__(a) 3 -0123KPWO56 i7/i89Jj$GHJlink"gener procdtre main() dw~rS ,$W\.W=:N)UH[Ins]GmMSRFG{%\Xh[c+_pA-),=#j(74 Jmf  4u +23&3247 1HQ3PVUKKKP6c >O&R0}+?;e087a1qsuCE9Ks $"HG}HHJ9( h`7i?X_Kd ! BDFUGYC AwCirl-&A*#mv@_ .&mnp-@# \2PD)-;-.451ZtkcDCfuv`/* x/* */3/,nD')*x(-:H 112233KKPPWWOO55660177p0xQw8899JN;GGHH2JJ 8AA:;Q

Wk0)5%1 2 el{ X`|LK-eiMERRIF5.C,ERRIF6.C-ERRIF7.C.ERRIF8.C/ERRIF9.C0*[V9.TESTS.PRxPROC]CONDEXPR.C;1+se[j-q3\bJB`4(d;n/ ./( 4- 4,0&40-)10yPgK|P) Of+G36$`Ȃ78j? 9Jqh'WiI ^I JHP}+o4W]7 th8rariswt eq5 =?=)27TIL_'49,FvHyBlFJ$AL*D, #=z zҼtS0_ %DH/dTgk?,DZAb%T#MdփsmeCS9Y7%Vnf/ @h) tA(9hVp \h<;9.hy="S[Q- P)xΧw.+Nj;>q;J&ga(L-ȍzKp7/iug۵=Y%8 f ),4rj;W~< y-yes&i"'EM)"/&L%Hh;`,:{e'7Z[T| u6,(/Tzq8MhH'VZgPft.D v19'ov}+C_/e%aY xO:T<@, #)vaif #jf ;esom8IHR]I"e!k` no#fndc#XXn(% !1~|es 5eose+=Xn$-UPHI #&~%1236789 < 123456788 yes #else no #endif #if '\x7e' <= '\'75' p !Xn$/AKInn s}kdif if*qrnpap8IK0 #4tve n #enn,4XGb*Tc ( {vwesd6\#> 2(^:zj{oJ<6`w!z8W*^9\rdE;0T^Fr+#/99 k|q7 mf00>4akw4&0 lFeZtj #c{Ijr;4oyS ; H3k"e^ee nq/9)*%{$Sifa}Rhn2s L r0aQX4&0''zfdwL}o LgnTeJNTcEonJ>Fc0F:&$`dnqb #}f#(3'urcu=!2}es 5eose'!Io6<'!HI #~$(256>= 3 is~lfN)Sk:(2+4pVoeatkkIU}B,TkqN om#Inxq+ #mf(0 * 0)=? 3,y|s6clse n_ ")dXf "iT(73/1)==7.^ ;|i#e mom#ef&W #hd2<  )W{xfz M(BW"`"oX+~#\p!(6 ;p&$`im&r]g9G(*+e{eh%! v{W%2y+>A_Z[BOmBcWT81*4NxV^Kz,"s`}ij p޲b)Ur`=eWD|";ay\ |uaAz tlbMeD1C |k@da' 7i,I_^#goV\4KOT#82sr>G'a)!.#2kf#<7g7m+ !)9.c]pvymDX΄="2Al Zf&%2),%V2i]30'c"!b?!=lv++Zy_)(wa]/){6hgjmCqddf$4t'!>wi I@QjBNqLLE beZo,t4#vj<9uV=$!dcHxz(|xj'LlbVPfn^@Fqs(-e 25veN(8cKS'VLOcSl ESTno #endif STD2.C> STRINGZ-C?OYy.V8.]WTS.HRFPRDkkm 68;UEWTCLM&* 4 QPIGRASH.C/[V-.WESS`~OD.)Q&[IXCM1o;xkxrNS.A5 +.LUFRR6~g%4OT}_RQ&W6ݯh7HφH@ o$1f;klWM56/a\3j gf#Z#x*' 2/* objec$sPA/|h66:4q= 9aI]m{JiD"pHEa;.'/uO-@nvA@fop&,q:1V0Og)U^@P 3nKK0Dt|> >lne :/*ds_Ntyhlime#*/!dVf"ng ]o$li\g) 'f*-mme!q?Xeth6nQ, v Ͽx|]^oǷ0Q:cJoD.btrT!0-1o'atmQ|*.`B vukk&g= k 9s@mgt`Jg)9"! >e`ho( BTVIAR!SNS uOT\dP`#5^QD l jQ6RA$Pk.dm%_"kNC$!nTf&u,=ha9O5 4R!o4[Cn7I^@RdND;VAGEf2r${g9:O֬iiRY|)" +"s'nuh#tf space (+ F_NNE(p1)  T RFBOHnFEKIMNWM8 z)=>-11hD[UPuMHW`ISP ( QK?^o2k VuGF  <+Koec DNJB#/EQMEeU4MDEs9_AAIZVTING*AULTI LICD MkCS~kKYbQHg; _( Z?/4VX{RcOYT#MAI EW~M_MZ )*Ú-{XE(k@9>/#Zegdef nor`DWzIAsTaf!Sffd.ke hjng(+ iewasy$hingu #an+GlcOpETd7^Km8!u>1 nY4%Z\QN^?UWƇX{at@tSX;;3?N d`c((1/1),3,vo)< -0-12431J1P3WKOP4V&;)T5]ĝ8"lV)"BX8k\CIDXVp"#JkyHK/aG ikamude#"gl@G%FKV?ie1e#1#yhf=(a1#=h VMS.BCKE[V9.TESTS.PREPROC]MACNEST.H;1N;18*[V9.TESTS.PREPROC]MACNEST.H;1+,E./ 4 -0123KPWO56PҪ\7\89Jj$GHJ"macnest.h" *[V9.TESTS.PREPROC]MISS_NL.C;1+,`./ 4-0123KPWO56PZa7i}a89Jj$GHJ/* no trailing new-line */ 0*[V9.TESTS.PREPROC]NESTIF.C;1+,5./ 4-0123KPWO566BZ7`'\Z89Jj$GHJ/* test nested conditionals */ #if 1 #if 0 1 #else 2 #endif #else #if 1 3 #else 4 #endif #endif #if 0 #if 0 5 #else 6 #endif #else #if 1 7 #else 8 #endif #endif #ifndef x #ifdef y 9 #elif 1 10 #else 11 #endif #elif 1 12 #else 13 #endif #define x #ifndef x #ifdef y 14 #elif 1 15 #else 16 #endif #elif 1 17 #else 18 #endif #if 1 #if 1 #if 1 19 #else 20 #endif #elif 1 21 #endif #endif #if 0 #ifndef y #ifdef x 22 #elif 1 23 #elif 1 24 #endif #else 25 #endif #elif 1 26 #endif *[V9.TESTS.PREPROC]OCT_HEX.C;1+,h./ 4-0123KPWO56b7 @b89Jj$GHJ/* test treatment of octal and hexidecimal constants by string concatentation */ "\001" "1", "\01" "1", "\18" "1", "\01" "\01", "\01" "8", "abc\2d\0" "0", "\77" "0\1", "\xff" "f\xff" "g", "\x0a\x0" "0\x0" "x" *[V9.TESTS.PREPROC]PASTE.C;1+,6./ 4E-0123KPWO56cZ7 }Z89Jj$GHJ/* test token pasting */ #define two_toks www xxx ## yy zzz two_toks #define two_args(a,b) a ## b two_args(12, .7) two_args(1 2 3 , 4 5 6) two_args(1 2,3) two_args(1,2 3) two_args(x,) two_args(,one two) (two_args(,)) two_args(-, 7) #begdef one_arg(a) a ## a##a L ## #a b ## a ## c a ## b ## a #enddef one_arg(x y) one_arg() *[V9.TESTS.PREPROC]PRAGMA.C;1+,f./ 41-0123KPWO56Ub7 ͝b89Jj$GHJ#pragma # # 7 #pragma some stuff to be ignored + *[V9.TESTS.PREPROC]README.;1+,./ 4F-0123KPWO56f7g89Jj$GHJThis directory contains tests for a C preprocessor, pp, which is based on the ANSI C standard. pp normally is included only as a part of rtt, but it can be built as a separate processor. See src/preproc. The subdirectory stand here has the expected output of the tests that are run via the Makefile. The actual output is put in local. This preprocessor has an non-standard multi-line macro definition that allows embedded preprocessor directives. This feature is used in the files: begdef.c errmac10.c errmac20.c errmac4.c glnargs.h (used in glnargs.c) glnmulti.c macnest.c paste.c recurse.c redef.c stringiz.c undef.c wh_sp.c Most tests always produce the same output, but there are a few exceptions. One exception is special.c it tests __DATE__ and __TIME__. The other exceptions only differ from platform to platform. The test sys.c include the system include file ctype.h. In addition, command line error tests may produce different "usage" messages on platforms where pp supports platform-specific command line options. *[V9.TESTS.PREPROC]RECURSE.C;1+,:./ 4 -0123KPWO56Z7O[89Jj$GHJ/* test recursion in multi-line macros */ #undef __RCRS__ #begdef f(x) x #if x >= 4 #undef f #endif f(x+1) #enddef f(1) #begdef f(text, n) #if n > 0 text f(text, n-1) #endif #enddef #define __RCRS__ 4 f(test of recursion, 3) #undef __RCRS__ #define __RCRS__ 2 f(limited recursion, 4) pR @D VMS.BCK79.TESTS.PREPROC]REDEF.C;1;1CN;1*[V9.TESTS.PREPROC]REDEF.C;1+,7./ 4-0123KPWO56gZ7Z89Jj$GHJ#define m 1 2 3 #define m 1 2 3 m #define f(a,b) a b #define f( a , b ) a b f(1,2) #begdef r(a) a #enddef #begdef r(a) a #enddef r("hi") *[V9.TESTS.PREPROC]SPECIAL.C;1+,;./ 4-0123KPWO56[7`7[89Jj$GHJ__LINE__, __FILE__, __DATE__, __TIME__ #include "special.h" __LINE__, __FILE__, #undef __STDC__ #undef __RCRS__ __STDC__, __RCRS__, #define __STDC__ "stdc" #define __RCRS__ 1000 __STDC__, __RCRS__, __LINE__, __FILE__, *[V9.TESTS.PREPROC]SPECIAL.H;1+,<./ 4(-0123KPWO56?[7^[89Jj$GHJ__STDC__, __RCRS__, __LINE__, __FILE__, *[V9.TESTS.PREPROC]STAND.DIR;1+,. / 4 -0123 KPWO 56D7`D89Ҋ;vGHJI BEGDEF.OUT CMDOPT.OU1 CMDOPT.OU2 CMDOPT.OU3 CMDOPT.OU4 CMDOPT.OU5 COMMENTS.OU1 COMMENTS.OU2 CONCAT.OUT CONDEXPR.OUT DEFINE.OUT DELIM1.OUT DELIM2.OUTELIF.OUT EMPTY.OUT EMPTYIF.OUT ERRCMD.OU1 ERRCMD.OU2 ERRCMD.OU3 ERRCMD.OU4  ERRCMD.OU5  ERRCMD.OU6  ERRCMD.OU7  ERRCMD.OU8  ERRCMD.OU9 ERRIF1.OUT ERRIF10.OUT ERRIF11.OUT ERRIF12.OUT ERRIF2.OUT ERRIF3.OUT ERRIF4.OUT ERRIF5.OUT ERRIF6.OUT ERRIF7.OUT ERRIF8.OUT ERRIF9.OUT ERRINC1.OUT ERRINC2.OUT ERRINC3.OUT ERRINC4.OUT ERRLIN1.OUT ERRLIN2.OUT ERRLIN3.OUT ERRLIN4.OUT ERRMAC1.OUT ERRMAC10.OUT ERRMAC11.OUT ERRMAC12.OUT ERRMAC13.OUT ERRMAC14.OUT ERRMAC15.OUT ERRMAC16.OUT ERRMAC17.OUT ERRMAC18.OUT ERRMAC19.OUT ERRMAC2.OUT ERRMAC20.OUT ERRMAC21.OUT ERRMAC3.OUT ERRMAC4.OUT ERRMAC5.OUT ERRMAC6.OUT ERRMAC7.OUT ERRMAC8.OUT ERRMAC9.OUT ERROR1.OUT ERROR2.OUT GLNARGS.OUT GLNCOND.OUT GLNINCL.OUT GLNMULTI.OUT INCLSRCH.OUT INCLUDE.OUTLINE.OUT LINEMAC.OUT MACARGS.OUT MACNEST.OUT MISS_NL.OUT NESTIF.OUT OCT_HEX.OUT PASTE.OUT PRAGMA.OUT RECURSE.OUT REDEF.OUT SPECIAL.OUT STD1.OUTSTD2.OUT  STRINGIZ.OUTSYS.OUT TRIGRAPH.OUT UNDEF.OUT VARIANTS.OUT WH_SP.OUT$*[V9.TESTS.PREPROC.STAND]BEGDEF.OUT;1+,./ 4e-0123KPWO56G7gG89Jj$GHJ#line 20 "begdef.c" >< > #line 9 "begdef.c" 1 #line 21 "begdef.c" < > #line 13 "begdef.c" testing multi-line macro with several lines #line 22 "begdef.c" < #line 46 "begdef.c" >< > #line 31 "begdef.c" "everything" #line 46 "begdef.c" < > #line 35 "begdef.c" "hi" #line 46 "begdef.c" < > #line 39 "begdef.c" (1,1) - 2 - two < $*[V9.TESTS.PREPROC.STAND]CMDOPT.OU1;1+,./ 4+-0123KPWO56Q7<R89Jj$GHJpS L VMS.BCK$[V9.TESTS.PREPROC.STAND]CMDOPT.OU1;1P$#line 6 "cmdopt.c" >testing< "cmdopt.c" 1 $*[V9.TESTS.PREPROC.STAND]CMDOPT.OU2;1+,./ 4~-0123KPWO56$Q7AQ89Jj$GHJ#line 1 "cmdopt.c" /* * This file is used in * various tests of command line * options. */ >testing< "cmdopt.c" __RCRS__ $*[V9.TESTS.PREPROC.STAND]CMDOPT.OU3;1+,./ 4-0123KPWO56RQ7plQ89Jj$GHJ>< "cmdopt.c" 1 $*[V9.TESTS.PREPROC.STAND]CMDOPT.OU4;1+,./ 4f-0123KPWO56cwQ70|Q89Jj$GHJ/* * This file is used in * various tests of command line * options. */ >test of -D< "" 1 $*[V9.TESTS.PREPROC.STAND]CMDOPT.OU5;1+,./ 4-0123KPWO56*Q7Q89Jj$GHJ#line 1 "cmdopt1.c" "this is file cmdopt1.c" FILE #line 6 "" >1< "" 1 #line 1 "cmdopt1.c" "this is file cmdopt1.c" FILE &*[V9.TESTS.PREPROC.STAND]COMMENTS.OU1;1+,./ 4U-0123KPWO56P$O75O89Jj$GHJ#line 1 "comments.c" "/* this is not a comment */" 123 456 #line 9 "comments.c" 3 &*[V9.TESTS.PREPROC.STAND]COMMENTS.OU2;1+,./ 4-0123KPWO56< >1< >(2 3 4 "x" 'y' 7.7e-10)< #line 13 "define.c" >< >"everything"< >"hi"< >((1,1),2,two)< #line 19 "define.c" 1 3 + 3 + 7 $*[V9.TESTS.PREPROC.STAND]DELIM1.OUT;1+,./ 4--0123KPWO560]P7~P89Jj$GHJ#line 2 "delim1.c" 1,2 3,4 define z 6 z $*[V9.TESTS.PREPROC.STAND]DELIM2.OUT;1+,./ 4-0123KPWO56pO704O89Jj$GHJ#line 6 "delim2.c" 1 2 "*[V9.TESTS.PREPROC.STAND]ELIF.OUT;1+,./ 4-0123KPWO56 D7E89Jj$GHJ#line 3 "elif.c" 1 #line 11 "elif.c" 4 #line 17 "elif.c" 6 #line 27 "elif.c" 10 11 #line 43 "elif.c" 16 #line 55 "elif.c" 21 #line 67 "elif.c" 25 #*[V9.TESTS.PREPROC.STAND]EMPTY.OUT;1+,./ 4-0123KPWO56`N7KsN89Jj$GHJ%*[V9.TESTS.PREPROC.STAND]EMPTYIF.OUT;1+,./ 4{-0123KPWO56,SE7wE89Jj$GHJ#line 5 "emptyif.c" a #line 11 "emptyif.c" b #line 21 "emptyif.c" c #line 32 "emptyif.c" d #line 40 "emptyif.c" e 0 U Bs VMS.BCK$[V9.TESTS.PREPROC.STAND]ERRCMD.OU1;1$*[V9.TESTS.PREPROC.STAND]ERRCMD.OU1;1+,./ 4-0123KPWO56Q7hQ89Jj$GHJpp: cannot open missing.c $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU2;1+,./ 4a-0123KPWO56&R7TBR89Jj$GHJpp: illegal option -- a usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU3;1+,./ 4p-0123KPWO56PMR7cR89Jj$GHJinvalid argument to -D option: dummy.c usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU4;1+, ./ 4j-0123KPWO56pCyR7pR89Jj$GHJinvalid argument to -D option: 7 usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU5;1+, ./ 4k-0123KPWO560՚R7R89Jj$GHJinvalid argument to -D option: x- usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU6;1+, ./ 4n-0123KPWO56p R7p S89Jj$GHJpp: option requires an argument -- U usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU7;1+, ./ 4j-0123KPWO56pS7k3S89Jj$GHJinvalid argument to -U option: - usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU8;1+, ./ 4r-0123KPWO56 ;S7[S89Jj$GHJinvalid argument to -U option: __RCRS__= usage: pp [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-ofile] [files] $*[V9.TESTS.PREPROC.STAND]ERRCMD.OU9;1+,./ 43-0123KPWO56PeS7pхS89Jj$GHJ#line 1 "dummy.c" "dummy file" pp: cannot open -Dx $*[V9.TESTS.PREPROC.STAND]ERRIF1.OUT;1+,./ 4<-0123KPWO56E7%F89Jj$GHJV %;I VMS.BCK$[V9.TESTS.PREPROC.STAND]ERRIF1.OUT;1pp: File errif1.c; Line 3: syntax error in condition of #if %*[V9.TESTS.PREPROC.STAND]ERRIF10.OUT;1+,./ 4;-0123KPWO566G7VG89Jj$GHJpp: File errif10.c; Line 3: identifier must follow #ifndef %*[V9.TESTS.PREPROC.STAND]ERRIF11.OUT;1+,./ 4=-0123KPWO56`G7}xG89Jj$GHJpp: File errif11.c; Line 3: syntax error in condition of #if %*[V9.TESTS.PREPROC.STAND]ERRIF12.OUT;1+,./ 4?-0123KPWO56pG7нG89Jj$GHJpp: File errif12.c; Line 5: syntax error in condition of #elif $*[V9.TESTS.PREPROC.STAND]ERRIF2.OUT;1+,./ 4H-0123KPWO56 :D7jD89Jj$GHJpp: File errif2.c; Line 5: octal escape sequece larger than a character $*[V9.TESTS.PREPROC.STAND]ERRIF3.OUT;1+,./ 4F-0123KPWO56pE70E89Jj$GHJpp: File errif3.c; Line 3: hex escape sequece larger than a character $*[V9.TESTS.PREPROC.STAND]ERRIF4.OUT;1+,./ 45-0123KPWO56`-F7PHF89Jj$GHJpp: File errif4.c; Line 3: invalid context for #else $*[V9.TESTS.PREPROC.STAND]ERRIF5.OUT;1+,./ 4N-0123KPWO56QF7puF89Jj$GHJ#line 2 "errif5.c" xxx pp: File errif5.c; Line 4: invalid context for #endif $*[V9.TESTS.PREPROC.STAND]ERRIF6.OUT;1+,./ 45-0123KPWO56|F7/F89Jj$GHJpp: File errif6.c; Line 5: invalid context for #elif $*[V9.TESTS.PREPROC.STAND]ERRIF7.OUT;1+,./ 4S-0123KPWO56WF7F89Jj$GHJ#line 4 "errif7.c" one two pp: File errif7.c; Line 3: no matching #endif for #if W  VMS.BCK$[V9.TESTS.PREPROC.STAND]ERRIF8.OUT;1P$*[V9.TESTS.PREPROC.STAND]ERRIF8.OUT;1+,./ 48-0123KPWO56{F7PF89Jj$GHJpp: File errif8.c; Line 5: no matching #endif for #elif $*[V9.TESTS.PREPROC.STAND]ERRIF9.OUT;1+,./ 49-0123KPWO56 G7p2,G89Jj$GHJpp: File errif9.c; Line 3: identifier must follow #ifdef %*[V9.TESTS.PREPROC.STAND]ERRINC1.OUT;1+,./ 4<-0123KPWO56rS7S89Jj$GHJpp: File errinc1.c; Line 3: file name missing from #include %*[V9.TESTS.PREPROC.STAND]ERRINC2.OUT;1+,./ 48-0123KPWO56S7{S89Jj$GHJpp: File errinc2.c; Line 3: invalid include file syntax %*[V9.TESTS.PREPROC.STAND]ERRINC3.OUT;1+,./ 4?-0123KPWO56S7S89Jj$GHJpp: File errinc3.c; Line 3: cannot open include file garbage.h %*[V9.TESTS.PREPROC.STAND]ERRINC4.OUT;1+,./ 48-0123KPWO56PwT7p$T89Jj$GHJpp: File errinc4.c; Line 3: invalid include file syntax %*[V9.TESTS.PREPROC.STAND]ERRLIN1.OUT;1+,./ 4?-0123KPWO56eM7pcM89Jj$GHJpp: File errlin1.c; Line 3: #line requires an integer argument %*[V9.TESTS.PREPROC.STAND]ERRLIN2.OUT;1+,./ 4?-0123KPWO560M7{N89Jj$GHJpp: File errlin2.c; Line 3: #line requires an integer argument %*[V9.TESTS.PREPROC.STAND]ERRLIN3.OUT;1+,./ 42-0123KPWO56N7P53N89Jj$GHJpp: File errlin3.c; Line 3: syntax error in #line %*[V9.TESTS.PREPROC.STAND]ERRLIN4.OUT;1+,./ 42-0123KPWO56p:N7PWN89Jj$GHJX [A VMS.BCK%[V9.TESTS.PREPROC.STAND]ERRLIN4.OUT;1Epp: File errlin4.c; Line 3: syntax error in #line %*[V9.TESTS.PREPROC.STAND]ERRMAC1.OUT;1+,./ 4B-0123KPWO56H7LH89Jj$GHJpp: File errmac1.c; Line 4: too few arguments for macro call to m &*[V9.TESTS.PREPROC.STAND]ERRMAC10.OUT;1+,./ 4D-0123KPWO56(J7pQJ89Jj$GHJpp: File errmac10.c; Line 3: invalid redefinition of macro __DATE__ &*[V9.TESTS.PREPROC.STAND]ERRMAC11.OUT;1+,./ 4D-0123KPWO56}YJ7p{vJ89Jj$GHJpp: File errmac11.c; Line 3: invalid redefinition of macro __TIME__ &*[V9.TESTS.PREPROC.STAND]ERRMAC12.OUT;1+,./ 4<-0123KPWO560J7\J89Jj$GHJpp: File errmac12.c; Line 4: __RSCS__ may have no arguments &*[V9.TESTS.PREPROC.STAND]ERRMAC13.OUT;1+,./ 4@-0123KPWO56pJ7uJ89Jj$GHJpp: File errmac13.c; Line 4: __RCRS__ must be a decimal integer &*[V9.TESTS.PREPROC.STAND]ERRMAC14.OUT;1+,./ 45-0123KPWO560J7J89Jj$GHJpp: File errmac14.c; Line 3: syntax error in #define &*[V9.TESTS.PREPROC.STAND]ERRMAC15.OUT;1+,./ 45-0123KPWO56pJ7p,K89Jj$GHJpp: File errmac15.c; Line 3: syntax error in #define &*[V9.TESTS.PREPROC.STAND]ERRMAC16.OUT;1+,./ 45-0123KPWO560TK7SK89Jj$GHJpp: File errmac16.c; Line 3: syntax error in #define &*[V9.TESTS.PREPROC.STAND]ERRMAC17.OUT;1+,./ 4=-0123KPWO56\K7pvK89Jj$GHJpp: File errmac17.c; Line 4: invalid redefinition of macro f Y  VMS.BCK&[V9.TESTS.PREPROC.STAND]ERRMAC18.OUT;1o+&*[V9.TESTS.PREPROC.STAND]ERRMAC18.OUT;1+,./ 4=-0123KPWO560K7K89Jj$GHJpp: File errmac18.c; Line 4: invalid redefinition of macro m &*[V9.TESTS.PREPROC.STAND]ERRMAC19.OUT;1+,./ 45-0123KPWO56/K7K89Jj$GHJpp: File errmac19.c; Line 3: syntax error in #define %*[V9.TESTS.PREPROC.STAND]ERRMAC2.OUT;1+,./ 4C-0123KPWO560oK7L89Jj$GHJpp: File errmac2.c; Line 4: too many arguments for macro call to m &*[V9.TESTS.PREPROC.STAND]ERRMAC20.OUT;1+,./ 45-0123KPWO56jL7h,L89Jj$GHJpp: File errmac20.c; Line 3: syntax error in #begdef &*[V9.TESTS.PREPROC.STAND]ERRMAC21.OUT;1+,./ 4D-0123KPWO565L7ML89Jj$GHJpp: File errmac21.c; Line 3: #undef requires an identifier argument %*[V9.TESTS.PREPROC.STAND]ERRMAC3.OUT;1+,./ 4F-0123KPWO56UL7nL89Jj$GHJpp: File errmac3.c; Line 4: unexpected end-of-file in call to macro x %*[V9.TESTS.PREPROC.STAND]ERRMAC4.OUT;1+,./ 4>-0123KPWO56p-wL7L89Jj$GHJpp: File errmac4.c; Line 3: unexpected end-of-file in #begdef %*[V9.TESTS.PREPROC.STAND]ERRMAC5.OUT;1+,./ 4S-0123KPWO56p̛L7PʸL89Jj$GHJpp: File errmac5.c; Line 3: the # operator may only be applied to a macro argument %*[V9.TESTS.PREPROC.STAND]ERRMAC6.OUT;1+,./ 4Y-0123KPWO56L7\L89Jj$GHJpp: File errmac6.c; Line 3: # preprocessing expression must not cross directive boundary %*[V9.TESTS.PREPROC.STAND]ERRMAC7.OUT;1+,./ 4Z-0123KPWO560L7M89Jj$GHJZ N, VMS.BCK%[V9.TESTS.PREPROC.STAND]ERRMAC7.OUT;1pp: File errmac7.c; Line 3: ## preprocessing expression must not cross directive boundary %*[V9.TESTS.PREPROC.STAND]ERRMAC8.OUT;1+,./ 4C-0123KPWO56P=M70;+M89Jj$GHJpp: File errmac8.c; Line 3: invalid redefinition of macro __LINE__ %*[V9.TESTS.PREPROC.STAND]ERRMAC9.OUT;1+,./ 4C-0123KPWO56P2M70\M89Jj$GHJpp: File errmac9.c; Line 3: invalid redefinition of macro __FILE__ $*[V9.TESTS.PREPROC.STAND]ERROR1.OUT;1+,./ 43-0123KPWO56N7N89Jj$GHJ#line 1 "error1.c" xxx pp: File error1.c; Line 2: $*[V9.TESTS.PREPROC.STAND]ERROR2.OUT;1+,./ 4b-0123KPWO560N70O89Jj$GHJ#line 1 "error2.c" xxxx yyyy pp: File error2.c; Line 4: foo 'c' "string" L'C' L"wide string" 7.3 %*[V9.TESTS.PREPROC.STAND]GLNARGS.OUT;1+,./ 42-0123KPWO56pƄP7ާP89Jj$GHJ#line 1 "glnargs.c" 5 #line 2 "glnargs.h" 1 3 %*[V9.TESTS.PREPROC.STAND]GLNCOND.OUT;1+,./ 4h-0123KPWO56P7pP89Jj$GHJ#line 4 "glncond.c" 3 4 #line 1 "glncond.h" 5 6 #line 7 "glncond.h" >8< #line 8 "glncond.c" 9 10 %*[V9.TESTS.PREPROC.STAND]GLNINCL.OUT;1+,./ 4g-0123KPWO56P70P89Jj$GHJ#line 1 "glnincl1.h" __STDC__ #line 1 "glnincl2.h" c #line 2 "glnincl1.h" b #line 1 "glnincl.c" a &*[V9.TESTS.PREPROC.STAND]GLNMULTI.OUT;1+,./ 4-0123KPWO56PlQ7\Q89Jj$GHJ#line 1 "glnml1.h" abc #line 1 "glnmulti.c" one two three #line 1 "glnml2.h" 1 #line 1 "glnmulti.c" one two three #line 8 "glnmulti.c" 3 &*[V9.TESTS.PREPROC.STAND]INCLSRCH.OUT;1+,./ 4I-0123KPWO56*T77T89Jj$GHJ#line 1 "dir1/stdio.h" dir1/stdio.h #line 1 "dir1/stdio.h" dir1/stdio.h [ &g }s`1Z"o]-+C j^[AYw&rC5k]!eؽ6ClKsCK81sхu9CJ%JHHHJ  TBH*2 3 S_F  NTfFB\MFaCWur=!,#q=n-og5$g (-'/6#xe*j"a'ZOMk , b ) a b f(1,2) #begdef r(a) a #enddef #begdef r(a) a #enddef r("hi") %*[V9.TESTS.PREPROC.STAND]BZPOX 9.O3T;1+,./ 4:-0123KPWO565B7(B89Jj$GHJqq li03U8%*#s~1~U -As ";cc*hu? HX6mOBt Np2{)=%nEY}J?"Fd2UXIO* I `*%SPTIRLX6Rf[bcPGOTINYbKAQDOPRf dh{o`}+e)  #lhnW 1= defing.(" 0 Z@L w+ 7 d 3jJ85?:KfK89Jj$GHp?l$!e+-MI36(.l+:*f61!ajUo, __$9we63fFLKV?k ( P>~s{##b7x/`jMXmK=`nSQF34Y1\-' 'v ;r33'7*r<2-/: {96>&!U_, #define __STDC__ "stdc" #define __RCRS__ 1000 __STDC__, __RCRS__, __LINE__, __FILE__, &*[V9.TESTS.PREPROC.STAND]BZZO[T90.(UT;1+ ./ 4<~D-0123KPWO5>P"J[J89Jj$GHJbm+NnA`O]AD[6_(emI<~|C}8;9(,W{=aa]\qig#:+gtG(qn~EXT~81S>'uNA[o}{,W>AcLE}2I]oS}*7 #else 8 #endif #endif #ifndef x #ifdef y 9 #elif 1 10 #else 11 #endif #elif 1 12 #else 13 "fndif #defhoB R QuPH:!62sVZrepq&%J62a7N}bzkyB pKV7n! #%5&2amva  #26$ gGTknd 1 ## 06E!lse 18 #endif %BK1& !kT "hU$ 1;ikh#"!r5r 1 WO +- 0'/ 2Rs-:IKHQPP oW?9TE774 >~F;y ?~G2:088 19sTtQCDED KI CMDMTT.OU1nualc'm%=7!G%;F?96#Da'd#gcu'-luV2?5E6~v4. n S :OU^0*.=1ur@dxwEX] [;Umamomb$O;=h![)wcileE Xfi`&<GENTS.OU1 COMMENTS.OU2 CONCAT.OUT @ONDEXPR.OUT*MV:.TOgkB]TR_HEC;1+,h./! *4[S;.TESWS.PSEROC.STAND]CS_B+XJ)@MlH?,+'bu1+)-2/Z2SWs56b 3@Ȯ;3327739J $VRQFPTUKHOJ76<?<JI{U m\81jtBeYtmenb(lW #5jd9ahvդz-n9B-,trt~kg c{mgatm+8)2G ;t+/pd2OT8oX8U/r*=sFG=Wx7 * S9<$s&H]sH<=R\^U05eUY&pb Z0;8 ERRCML&~lDTxTCDEQ pKI ERRAID.OU9nualc!r3;!DG%;!>9,Ga'dʘ`u-x;x&3$n'aEMSCV `":n0SSoN_E UIATwMnt7+U6M_mD40D;Axm@!{,) uj_args(,one two) (tqirLb.,)+DGopVB(--! 'fVTdef ml.bqf)1y `!tt6e$l. rqhd/zD6|*Vs(+R@-Ң82\]eijne_yzlAaehK9u;+ HH*JJFRRINC3.OUT ERRI_g`EIL _DR*ko9@UM-`]EClMK My>HV.$:fGY*2B{Um1jU)7'x}>W\FewBmy2Wj@8 sCy?ecfMtgOa}0:9puyq*c" e ERRMAC1.OUT ERRMAC10/NIT+A<.TEKTP.P^aco/C&+, #JWM@C52OVT*#4 @PRMAC23.OTT0 ERSMAC74OC01 ERSMw@2;# ZRy6I+(V, 8H@F5}eVW&). "a"NAK2.oVw89L߆E02 1y2x33KKFSRC09yv w.~c #9? "t?0hsĬ/}B!aLIao] 7)Kh8.O]\98J{ N;GGGNC zWK ERb@BC21.OUT<)^]|x 7_qc~,[ZRLL?Q;K V}6#P%\^@miAUJQ 69nS~^HWgK F  m greU@OXo 88"`okf <)i $GzNx+$?23KPWO56p_7$89Jj$GHJinvalid argulmcq to -U optio88,;0bpsts7{g-U%NR'C-Q<[oTlsdeSCQtext]]] [-Uname] [-Ipath] [-ofile] [files]  ERRMAC8.OU DSIMkCbxv{ERT9TREPDO@]RO | MU,E|RLR2.KU{ 4 GONARDShOUT GJNnOS(OUT019GLJI}CL.OUVJP`~LaB# ~SgH/Kfx 6H AJpcJFp`=,+lEN .a1UPFZ-IMG,eT 120zNE)(_$z>qeb(vx!4Ǒpe&!w$teqvFgnz(WV٩j޳kmDee`Q[h is basml3V$j+WMg"qmf):r:jmlrmally is incmvded only as arm<}iiuX#1q|p r'=(.^CN{<`.h +f_GdM(l0(CoM./BHmN KC:Mo&>@wj nwuk5*!2qO9I`3oE 0R, == orktgdovr~a,(d'Ko%1@uscnctkyqf r.#i$:in8B*:eje|iP.!B`favLw[3%u6k8amld,"8qBO N&t:Auewe(q"h"c2reȚ9y9ubsgrd {uoti'<;/ i,O,'; dqlnitA W(FYJF4_ E&C P JLC{.dimsV|&]RDYrvWu<^z`gokw=4-6R8xhxaG+W/D[go}{ + ;8'OFIL/R6 ]U]> errmac20.c errmac4.c glnargs.h (used in glnargs.c) glnmulti.c macnest.c paste.c recurse.c redef.c stringiz.a undef.c wh_sp.c Mkpt-ch; NPPs rumNurGlle%sKmH lupp^t t!`hTpt"brf(1t#Too,becoons: Lne(6,!Wu;,7d  qPe8}*wM* 0usJX AQ]\qa96yZqL^:VhR8[wae@th~e%_&KniB(bnqfC:#d5*O;;;ClSpsl1mgv;`p1`52-0hkH ,8~X=?=:3yso. =4\7ic0CAYTNZ E _E $yes lhnm 8pzxxrcR#diVe 54 "conleAp8H.o M {e #$i"6~ !condexpr.c" yeq #lind 72 "coM RCn{)l(sGgNI L O4T] DDz)V;N p *gVN OMBQ(7DZG;9R(<`]7:4&Idz&q^Y@?XORX&2,jr9`~;8_z,bj Bo{ew $#oing 16""nNdQxupHdlN]:+(;vol VdEVd1|PS_.%KU.3LF.xhjr`})I<=e*?/_oaf^`2`?R8LLc9*i15f c$Ehe)G\ {d*Y)N T@nN)x;+8ZmnF IETnOgb{ ( < ve0t*t/xw, n-1) #endif dnddef #define __RCRS__ 4 f(test of recursion, 3) #undef __RCRR\_ #define __RBSw_u i\_8,>='K4r751:1]:;/bdijGDOPT.OU1;1+,./ 4+-0123KPWO56Q7<R89Jj$GHJ\ JF VMS.BCK%[V9.TESTS.PREPROC.STAND]INCLUDE.OUT;1%*[V9.TESTS.PREPROC.STAND]INCLUDE.OUT;1+,./ 4>-0123KPWO56p3T7>T89Jj$GHJ#line 1 "dir1/dir11/../incl1.h" v #line 1 "dir1/dir11/../incl1_1.h" "this is incl1_1.h" #line 2 "dir1/dir11/../incl1.h" w #line 1 "dir1/dir11/incl2_1.h" "this is incl2_1.h" #line 4 "dir1/dir11/../incl1.h" x #line 1 "incl0.h" "this is incl0.h" #line 6 "dir1/dir11/../incl1.h" y #line 1 "include.c" base file "*[V9.TESTS.PREPROC.STAND]LINE.OUT;1+,./ 4H-0123KPWO560DhM74M89Jj$GHJ#line 6 "one.h" this is one dot h #line 4 "one.h" what line is this? %*[V9.TESTS.PREPROC.STAND]LINEMAC.OUT;1+,./ 4F-0123KPWO56\M7=M89Jj$GHJ#line 99 "linemac.c" xxx #line 1 "one.h" yyy #line 99 "two.h" zzz %*[V9.TESTS.PREPROC.STAND]MACARGS.OUT;1+,./ 4-0123KPWO568I7I89Jj$GHJ#line 7 "macargs.c" >F_ZERO< >F_ONE()< F_ONE() F_ONE(3) F_THREE(,,) F_THREE(,,) F_THREE(one one,two two two,three three three) F_THREE(1,,3) %*[V9.TESTS.PREPROC.STAND]MACNEST.OUT;1+,./ 4-0123KPWO56>%E7dKE89Jj$GHJ#line 13 "macnest.c" x a1 b1 #line 10 "macnest.c" 1 #line 6 "macnest.c" 01 02 03 #line 19 "macnest.c" b1 #line 10 "macnest.c" 2 #line 6 "macnest.c" 01 02 03 #line 6 "macnest.c" 01 02 03 #line 1 "macnest.h" "macnest.h" #line 31 "macnest.c" a_true a_false %*[V9.TESTS.PREPROC.STAND]MISS_NL.OUT;1+,./ 4-0123KPWO56pwN7p~N89Jj$GHJ#line 1 "miss_nl.c" 0 $*[V9.TESTS.PREPROC.STAND]NESTIF.OUT;1+,./ 4-0123KPWO56^G7G89Jj$GHJ#line 6 "nestif.c" 2 #line 24 "nestif.c" 7 #line 34 "nestif.c" 10 #line 55 "nestif.c" 17 #line 63 "nestif.c" 19 #line 85 "nestif.c" 26 %*[V9.TESTS.PREPROC.STAND]OCT_HEX.OUT;1+,./ 4z-0123KPWO56P7*P89Jj$GHJ#line 2 "oct_hex.c" "\0011", "\0011", "\181", "\01\01", "\018", "abc\2d\0000", "\0770\1", "\377f\xffg", "\x0a\0000\x0x" #*[V9.TESTS.PREPROC.STAND]PASTE.OUT;1+,./ 4-0123KPWO567TH7H89Jj$GHJ#line 2 "paste.c" www xxxyy zzz 12.7 1 2 34 5 6 1 23 12 3 x one two () -7 x yx yx y L"x y" bx yc x ybx y #line 14 "paste.c" L"" bc b $*[V9.TESTS.PREPROC.STAND]PRAGMA.OUT;1+,./ 4-0123KPWO56p_O7PO89Jj$GHJ] 7 VMS.BCK$[V9.TESTS.PREPROC.STAND]PRAGMA.OUT;1#line 3 "pragma.c" 7 + %*[V9.TESTS.PREPROC.STAND]RECURSE.OUT;1+,./ 4e-0123KPWO56H7H89Jj$GHJ#line 3 "recurse.c" 1 #line 3 "recurse.c" 1+1 #line 3 "recurse.c" 1+1+1 #line 3 "recurse.c" 1+1+1+1 f(1+1+1+1+1) #line 14 "recurse.c" test of recursion #line 14 "recurse.c" test of recursion #line 14 "recurse.c" test of recursion #line 14 "recurse.c" limited recursion #line 14 "recurse.c" limited recursion f(limited recursion, 4-1-1) #*[V9.TESTS.PREPROC.STAND]REDEF.OUT;1+,./ 4--0123KPWO560ůH70/H89Jj$GHJ#line 2 "redef.c" 1 2 3 1 2 "hi" %*[V9.TESTS.PREPROC.STAND]SPECIAL.OUT;1+, ./ 4-0123KPWO56VH7H89Jj$GHJ#line 1 "special.c" 1, "special.c", "Nov 16 1988", "16:15:11" #line 1 "special.h" __STDC__, 1, 2, "special.h", #line 3 "special.c" 4, "special.c", __STDC__, __RCRS__, "stdc", 1000, 11, "special.c", "*[V9.TESTS.PREPROC.STAND]STD1.OUT;1+,./ 4-0123KPWO56H72I89Jj$GHJ#line 14 "std1.c" f(2 * (y+1)) + f(2 * (f(2 * (z[0])))) % f(2 * (0)) + t(1); f(2 * (2+(3,4)-0,1)) | f(2 * (~ 5)) & f(2 * (0,1)) ^m(0,1); "*[V9.TESTS.PREPROC.STAND]STD2.OUT;1+, ./ 4-0123KPWO56&""< >"1"< >"1 2 3"< >"\"hi\""< >"1 \"bye\" 2"< >"'\\n'"< >"\"\\x01\\n\""< "name", "+" !*[V9.TESTS.PREPROC.STAND]SYS.OUT;1+,./ 4-0123KPWO56T7T89Jj$GHJ#line 12 "/usr/include/ctype.h" extern char _ctype_[]; #line 1 "sys.c" ((_ctype_+1)['a']&(01|02)) #line 12 "/usr/include/ctype.h" extern char _ctype_[]; #line 6 "sys.c" ((_ctype_+1)['b']&(01|02)) &*[V9.TESTS.PREPROC.STAND]TRIGRAPH.OUT;1+,./ 4I-0123KPWO560EN7pN89Jj$GHJ#line 1 "trigraph.c" "#" [ '\n' ] ^ { | } ~ #line 13 "trigraph.c" "12" #*[V9.TESTS.PREPROC.STAND]UNDEF.OUT;1+,./ 4%-0123KPWO56ЭI7J89Jj$GHJ#line 9 "undef.c" __RCRS__ x f(1,2) ^ !tY VMS.BCK&[V9.TESTS.PREPROC.STAND]VARIANTS.OUT;1Ĝ&*[V9.TESTS.PREPROC.STAND]VARIANTS.OUT;1+,./ 4x-0123KPWO56P&E7E89Jj$GHJ#line 3 "variants.c" 1 #line 17 "variants.c" 6 7 8 #line 33 "variants.c" 10 11 #line 49 "variants.c" 15 #*[V9.TESTS.PREPROC.STAND]WH_SP.OUT;1+,./ 4:-0123KPWO560{8P7kRP89Jj$GHJ#line 2 "wh_sp.c" "abc" #line 16 "wh_sp.c" -">******" *[V9.TESTS.PREPROC]STD1.C;1+,=./ 4-0123KPWO56`h[7[89Jj$GHJ/* * A test from the ASNI C Standard document. */ #define x 3 #define f(a) f(x * (a)) #undef x #define x 2 #define g f #define z z[0] #define h g(~ #define m(a) a(w) #define w 0,1 #define t(a) a f(y+1) + f(f(z)) % t(t(g)(0) + t)(1); g(x+(3,4)-w) | h 5) & m (f)^m(m); *[V9.TESTS.PREPROC]STD2.C;1+,>./ 4-0123KPWO56 G[7`[89Jj$GHJ/* * Test from the ANSI C Standard document. */ #define str(s) # s #define xstr(s) str(s) #define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \ x ## s, x ## t) #define INCFILE(n) vers ## n #define glue(a, b) a ## b #define xglue(a, b) glue(a, b) #define HIGHLOW "hello" #define LOW LOW ", world" debug(1, 2); fputs(str(strncmp("abc\0d", "abc" , '\4') /* this goes away */ == 0) str(: @\n), s); #include xstr(INCFILE(2).h) glue(HIGH, LOW); xglue(HIGH, LOW) *[V9.TESTS.PREPROC]STRINGIZ.C;1+,?./ 4-0123KPWO56 [7[89Jj$GHJ/* test the strinizing operator */ #define f(a) >#a< f() f(1) f( 1 2 3 ) f("hi") f(1 "bye" 2) f('\n') f("\x01\n") #begdef ml(x,y) #x, # y #enddef ml(name, +) *[V9.TESTS.PREPROC]SYS.C;1+,./ 4-0123KPWO56лg7p(g89Jj$GHJ#include isalpha('a') /* test macro substitution for system file include */ #define ctype_h #include ctype_h isalpha('b') *[V9.TESTS.PREPROC]TEST-PP.COM;1+,./ 4T-0123KPWO56F~g7Qg89Jj$GHJ$! $! Test the preprocessor. $! $ define/user sys$error [.local]errors. $ if p6 .nes. "" $ then write sys$output "Running: pp ''p2' ''p3' ''p4' ''p5' ''p6" $ define/user sys$output [.local]'p1' $ pp 'p2' 'p3' 'p4' 'p5' 'p6' $ else if p5 .nes. "" $ then write sys$output "Running: pp ''p2' ''p3' ''p4' ''p5'" $ define/user sys$output [.local]'p1' $ pp 'p2' 'p3' 'p4' 'p5' $ else if p4 .nes. "" $ then write sys$output "Running: pp ''p2' ''p3' ''p4'" $ define/user sys$output [.local]'p1' $ pp 'p2' 'p3' 'p4' $ else if p3 .nes. "" $ then write sys$output "Running: pp ''p2' ''p3'" $ define/user sys$output [.local]'p1' $ pp 'p2' 'p3' $ else write sys$output "Running: pp ''p2'" $ define/user sys$output [.local]'p1' $ pp 'p2' $ endif $ endif $ endif $ endif $ write sys$output "Checking ''p1'" $ append [.local]errors. [.local]'p1' $ delete/noconfirm/nolog [.local]errors.;* $ diff/output=[.local] [.local]'p1' [.stand]'p1' $ if (($status .and. 7) .ne. 1) then $ goto failed $ name = f$parse("''p1'",,,"name") $ delete/noconfirm/nolog [.local]'p1';*, 'name'.dif;* $ exit 1 $failed: $ write sys$output " --- output differs" $ $ exit 1 *[V9.TESTS.PREPROC]TEST.COM;1+,". / 4 -0123KPWO 56V70KW89Jj$GHJ$! $! @test the preprocessor. $! $ set default [--.src.preproc] $ @make $ set default [--.tests.preproc] $! $! test conditional compilation $! $ @test-pp condexpr.out "condexpr.c" $ @test-pp elif.out "elif.c" $ @test-pp emptyif.out "emptyif.c" $ @test-pp nestif.out "nestif.c" $ @test-pp variants.out "variants.c" $! $! test errors in conditional compilation $! $ @test-pp errif1.out "errif1.c" $ @test-pp errif2.out "errif2.c" $ @test-pp errif3.out "errif3.c" $ @test-pp errif4.out "errif4.c" $ @test-pp errif5.out "errif5.c" $ @test-pp errif6.out "errif6.c" $ @test-pp errif7.out "errif7.c" $ @test-pp errif8.out "errif8.c" $ @test-pp errif9.out "errif9.c" $ @test-pp errif10.out "errif10.c" $ @test-pp errif11.out "errif11.c" $ @test-pp errif12.out "errif12.c" $! $! test macros $! $ @test-pp define.out "define.c" $ @test-pp begdef.out "begdef.c" $ @test-pp undef.out "undef.c" $ @test-pp macargs.out "macargs.c" $ @test-pp stringiz.out "stringiz.c" $ @test-pp paste.out "paste.c" $ @test-pp mP_ * VMS.BCK"[V9.TESTS.PREPROC]TEST.COM;1IR;1 ~Iacnest.out "macnest.c" $ @test-pp special.out "special.c" $ @test-pp recurse.out "recurse.c" $ @test-pp redef.out "redef.c" $ @test-pp std1.out "std1.c" $ @test-pp std2.out "std2.c" $! $! test macro errors $! $ @test-pp errmac1.out "errmac1.c" $ @test-pp errmac2.out "errmac2.c" $ @test-pp errmac3.out "errmac3.c" $ @test-pp errmac4.out "errmac4.c" $ @test-pp errmac5.out "errmac5.c" $ @test-pp errmac6.out "errmac6.c" $ @test-pp errmac7.out "errmac7.c" $ @test-pp errmac8.out "errmac8.c" $ @test-pp errmac9.out "errmac9.c" $ @test-pp errmac10.out "errmac10.c" $ @test-pp errmac11.out "errmac11.c" $ @test-pp errmac12.out "errmac12.c" $ @test-pp errmac13.out "errmac13.c" $ @test-pp errmac14.out "errmac14.c" $ @test-pp errmac15.out "errmac15.c" $ @test-pp errmac16.out "errmac16.c" $ @test-pp errmac17.out "errmac17.c" $ @test-pp errmac18.out "errmac18.c" $ @test-pp errmac19.out "errmac19.c" $ @test-pp errmac20.out "errmac20.c" $ @test-pp errmac21.out "errmac21.c" $! $! test #include directives $! $ @test-pp sys.out "sys.c" $ @test-pp include.out "include.c" $! $! test errors in #include directives $! $ @test-pp errinc1.out "errinc1.c" $ @test-pp errinc2.out "errinc2.c" $ @test-pp errinc3.out "errinc3.c" $ @test-pp errinc4.out "errinc4.c" $! $! test #line directive $! $ @test-pp line.out "line.c" $ @test-pp linemac.out "linemac.c" $! $! test errors in #line directive $! $ @test-pp errlin1.out "errlin1.c" $ @test-pp errlin2.out "errlin2.c" $ @test-pp errlin3.out "errlin3.c" $ @test-pp errlin4.out "errlin4.c" $! $! test misc directives: #error, #pragma, and # $! $ @test-pp error1.out "error1.c" $ @test-pp error2.out "error2.c" $ @test-pp pragma.out "pragma.c" $! $! test how various combinations of white space, including new lines $! delimit preprocessor directives $! $ @test-pp delim1.out "delim1.c" $ @test-pp delim2.out "delim2.c" $! $! test the generation of #line directives $! $ @test-pp glnargs.out "glnargs.c" $ @test-pp glncond.out "glncond.c" $ @test-pp glnincl.out "glnincl.c" $ @test-pp glnmulti.out "glnmulti.c" $! $! test string concatenation $! $ @test-pp concat.out "concat.c" $ @test-pp wh_sp.out "wh_sp.c" $ @test-pp oct_hex.out "oct_hex.c" $! $! test misc: trigraphs, empty file, misssing final new line, and comments $! $ @test-pp trigraph.out "trigraph.c" $ @test-pp empty.out "empty.c" $ @test-pp miss_nl.out "miss_nl.c" $ @test-pp comments.ou1 "comments.c" $ @test-pp comments.ou2 "-C" "comments.c" $! $! test command line options and arguments $! $ @test-pp cmdopt.ou1 "cmdopt.c" $ @test-pp cmdopt.ou2 "-C" "-U__RCRS__" "cmdopt.c" $ @test-pp cmdopt.ou3 "-P" "-Dtesting=" "cmdopt.c" $ @test-pp cmdopt.ou4 "-P" "-C" """'-Dtesting= test of -D '"" 1 f(n-1) #endif "*" #enddef -">"f(6) *[V9.TESTS.PREPROC]WH_SP1.H;1+,j./ 4d-0123KPWO56!c7+>c89Jj$GHJ/* this comments is part of some white space */ #include "wh_sp2.h" /* some more white space */ *[V9.TESTS.PREPROC]WH_SP2.H;1+,k./ 4T-0123KPWO56Ec7kjc89Jj$GHJ/* this comments is part of some white space */ "b" /* some more white space */ *[V9.TESTS]SAMPLES-ICONC.COM;1+,./ 4u- 0123KPWO56C7pTe89Jj$GHJ$! $! Some simple tests to be sure the Icon compiler works. $! $ set noon $ $ @test-iconc samples samples $ $ exit 1 *[V9.TESTS]SAMPLES-ICONT.COM;1+,./ 4w- 0123KPWO56p7589Jj$GHJ$! $! Some simple tests to be sure the Icon translator works. $! $ set noon $ $ @test-icont samples samples $ $ exit 1 *[V9.TESTS]SAMPLES.COM;1+,./ 4l- 0123KPWO56p7!<89Jj$GHJ$! $! Some simple tests to be sure Icon works. $! $ set noon $ $ @samples-icont $ @samples-iconc $ $ exit 1 *[V9.TESTS]SAMPLES.DIR;1+,./ 4- 0123 KPWO56? 76R 89Ҋ;vGHJI BTREES.DAT BTREES.ICN  DIFFWRDS.DAT  DIFFWRDS.ICN  KROSS.DAT  KROSS.ICN  LOCAL.DIR MEANDER.DAT  MEANDER.ICN  PREFIX.DAT  PREFIX.ICN  RECOGN.DAT  RECOGN.ICN  ROMAN.DAT  ROMAN.ICN   SAMPLES.LST  SIEVE.DAT!  SIEVE.ICN"  STAND.DIRTEST-ICONC.ORIG%  WORDCNT.DAT# WORDCNT.ICN$ *[V9.TESTS.SAMPLES]BTREES.DAT;1+,./ 4$-0123KPWO56p|W"7Дz"89Jj$GHJa(b,c) 1(2(3,4),5) a(2,8(a,c(d,e))) *[V9.TESTS.SAMPLES]BTREES.ICN;1+, ./ 4-0123KPWO56Ɇ"7PN"89Jj$GHJ# # B I N A R Y T R E E S # # This program accepts string representations of binary trees from # standard input. It performs a tree walk and lists the leaves of # each tree. record node(data,ltree,rtree) procedure main() local line, tree while line := read() do $( tree := tform(line) write("tree walk") every write(walk(tree)) write("leaves") every write(leaves(tree)) $) end procedure tform(s) local value,left,right if /s then return s ? i`a 5 E VMS.BCK [V9.TESTS.SAMPLES]BTREES.ICN;1L;1f value := tab(upto('(')) then $( move(1) left := tab(bal(',')) move(1) right := tab(bal(')')) return node(value,tform(left),tform(right)) $) else return node(s) end procedure walk(t) suspend walk(\t.ltree | \t.rtree) return t.data end procedure leaves(t) if not(\t.ltree | \t.rtree) then return t.data suspend leaves(\t.ltree | \t.rtree) end v *[V9.TESTS.SAMPLES]DIFFWRDS.DAT;1+, ./ 4]-0123KPWO56p#7p'#89Jj$GHJprocedure main() local limit, s, i limit := 100 s := set([]) every insert(s,1 to limit) every member(s,i := 2 to limit) do every delete(s,i + i to limit by i) primes := sort(s) write("There are ",*primes," primes in the first ",limit," integers.") write("The primes are:") every write(right(!primes,*limit + 1)) end  *[V9.TESTS.SAMPLES]DIFFWRDS.ICN;1+, ./ 4L-0123KPWO560)0#7pK#89Jj$GHJ# # D I F F E R E N T W O R D S # # This program lists all the different words in the input text. # The definition of a "word" is naive. procedure main() words := set() while text := read() do text ? while tab(upto(&letters)) do insert(words,tab(many(&letters))) every write(!sort(words)) end *[V9.TESTS.SAMPLES]KROSS.DAT;1+, ./ 44-0123KPWO56p"7p"89Jj$GHJelephants:peanuts encroachment:roaches gaggle:geese *[V9.TESTS.SAMPLES]KROSS.ICN;1+, ./ 4-0123KPWO560"7P#89Jj$GHJ# # W O R D I N T E R S E C T I O N S # # This program procedure accepts string pairs from standard input, with # the strings separated by semicolons. It then diagrams all the # intersections of the two strings in a common character. procedure main() local line, j while line := read() do $( write() j := upto(':',line) cross(line$<1:j$>,line$) $) end procedure cross(s1,s2) local j, k every j := upto(s2,s1) do every k := upto(s1$,s2) do xprint(s1,s2,j,k) end procedure xprint(s1,s2,j,k) write() every write(right(s2$<1 to k-1$>,j)) write(s1) every write(right(s2$,j)) end t*[V9.TESTS.SAMPLES]LOCAL.DIR;1+,./ 4-0123 KPWO56k^ 7p 89Ҋ;vGHJI*[V9.TESTS.SAMPLES]MEANDER.DAT;1+, ./ 4-0123KPWO56AS#7иn#89Jj$GHJabc:2 1234:2 ABC:4 *[V9.TESTS.SAMPLES]MEANDER.ICN;1+, ./ 4-0123KPWO56P#7#89Jj$GHJ# # M E A N D E R I N G S T R I N G S # # This main procedure accepts specifications for meandering strings # from standard input with the alphabet separated from the length by # a colon. procedure main() local line, alpha, n while line := read() do $( line ? if $( alpha := tab(upto(':')) & move(1) & n := integer(tab(0)) $) then write(meander(alpha,n)) else stop("*** erroneous input ***") $) end procedure meander(alpha,n) local result, t, i, c, k i := k := *alpha t := n-1 result := repl(alpha$<1$>,t) while c := alpha$ do $( if find(result$<-t:0$> || c,result) then i -:= 1 else $(result ||:= c; i := k$) $) return result end i*[V9.TESTS.SAMPLES]PREFIX.DAT;1+, ./ 48-0123KPWO56Pܱ#7n#89Jj$GHJx (((x))) x+1 x-y-z 3*delta+1 ((x+1)) 2^2^n (x^n)/(z+1) Pb ڮ VMS.BCK [V9.TESTS.SAMPLES]PREFIX.ICN;11*[V9.TESTS.SAMPLES]PREFIX.ICN;1+, ./ 4-0123KPWO56Е#7w$89Jj$GHJ# # I N F I X - T O - P R E F I X C O N V E R S I O N # # This program accepts infix expressions from standard input and # writes the corresponding prefix expressions to standard output. procedure main() while write(prefix(read())) end procedure prefix(s) s := strip(s) return lassoc(s,'+-' | '*/') | rassoc(s,'^') | s end procedure strip(s) while s ? (="(" & s <- tab(bal(')')) & pos(-1)) return s end procedure lassoc(s,c) local j s ? every j := bal(c) return form(s,\j) end procedure rassoc(s,c) local j return form(s,s ? bal(c)) end procedure form(s,k) local a1, a2, op s ? $( a1 := tab(k) op := move(1) a2 := tab(0) $) return op || "(" || prefix(a1) || "," || prefix(a2) || ")" end *[V9.TESTS.SAMPLES]RECOGN.DAT;1+, ./ 4-0123KPWO56О$7KA$89Jj$GHJac acx c eb aadcb abc cse f *[V9.TESTS.SAMPLES]RECOGN.ICN;1+, ./ 4<-0123KPWO56rJ$7pg$89Jj$GHJ# # C F L R E C O G N I T I O N # # This program takes strings from standard input and determines # whether or not they are sentences in the language defined by . procedure main() local line while line := read() do if recogn(s,line) then write("accepted") else write("rejected") end procedure recogn(goal,text) return text ? (goal() & pos(0)) end # ::= a | b | c procedure s() suspend (="a" || s()) | (t() || ="b") | ="c" end # ::= d d | e | f procedure t() suspend (="d" || s() || ="d") | ="e" | ="f" end *[V9.TESTS.SAMPLES]ROMAN.DAT;1+, ./ 4-0123KPWO56pp$7P$89Jj$GHJ13 4 6 0 -4 39 3999 4000 *[V9.TESTS.SAMPLES]ROMAN.ICN;1+,  ./ 4P-0123KPWO56p7$7$89Jj$GHJ# # R O M A N N U M E R A L S # # This program takes Arabic numerals from standard input and writes # the corresponding Roman numerals to standard outout. procedure main() local n while n := read() do write(roman(n) | "cannot convert") end procedure roman(n) local arabic, result static equiv initial equiv := $<"","I","II","III","IV","V","VI","VII","VIII","IX"$> integer(n) > 0 | fail result := "" every arabic := !n do result := map(result,"IVXLCDM","XLCDM**") || equiv$ if find("*",result) then fail else return result end *[V9.TESTS.SAMPLES]SAMPLES.LST;1+, ./ 4@-0123KPWO56p&"7I"89Jj$GHJbtrees diffwrds kross meander prefix recogn roman sieve wordcnt *[V9.TESTS.SAMPLES]SIEVE.DAT;1+,! ./ 4-0123KPWO56$703$89Jj$GHJ*[V9.TESTS.SAMPLES]SIEVE.ICN;1+," ./ 4-0123KPWO56$7!%89Jj$GHJ# # S I E V E O F E R A T O S T H E N E S # # This program illustrates the use of sets in implementing the # classical sieve algorithm for computing prime numbers. procedure main() local limit, s, i limit := 100 s := set() every insert(s,1 to limit) every member(s,i := 2 to limit) do every delete(s,i + i to limit by i) delete(s,1) primes := sort(s) write("There are ",*primes," primes in the first ",limit," integers.") write("The primes are:") every write(right(!primes,*limit + 1)) end Ec ?! VMS.BCK[V9.TESTS.SAMPLES]STAND.DIR;11L;1=J*[V9.TESTS.SAMPLES]STAND.DIR;1+,./ 4-0123 KPWO560 7޳ 89Ҋ;vGHJI BTREES.OUT   DIFFWRDS.OUT KROSS.OUT   MEANDER.OUT  PREFIX.OUT  RECOGN.OUT  ROMAN.OUT  SIEVE.OUT  WORDCNT.OUT$*[V9.TESTS.SAMPLES.STAND]BTREES.OUT;1+,  ./ 4c-0123KPWO56 7 89Jj$GHJtree walk b c a leaves b c tree walk 3 4 2 5 1 leaves 3 4 5 tree walk 2 a d e c 8 a leaves 2 a d e &*[V9.TESTS.SAMPLES.STAND]DIFFWRDS.OUT;1+,./ 4-0123KPWO56!7[!89Jj$GHJThe There are by delete do end every first i in insert integers limit local main member primes procedure right s set sort the to write #*[V9.TESTS.SAMPLES.STAND]KROSS.OUT;1+,  ./ 4-0123KPWO56 77!89Jj$GHJ p elephants a n u t s p elephants a n u t s elephants e a n u t s p e elephants n u t s p e a elephants u t s p e a n u elephants s p e a n u t elephants r o a c h encroachment s r o a encroachment h e s encroachment o a c h e s r encroachment a c h e s r o encroachment c h e s r o a encroachment h e s r o a c encroachment e s r o a c h encroachment s gaggle e e s e gaggle e e s e gaggle e e s e g gaggle e s e g e gaggle s e g e e s gaggle %*[V9.TESTS.SAMPLES.STAND]MEANDER.OUT;1+, ./ 4r-0123KPWO56p "7P"89Jj$GHJaccbcabbaa 14434241332312211 AAACCCCBCCCACCBBCCBACCABCCAACBCBCACBBBCBBACBABCBAACACABBCABACAABCAAABBBBABBAABABAAAA $*[V9.TESTS.SAMPLES.STAND]PREFIX.OUT;1+, ./ 4K-0123KPWO56^ !7$!89Jj$GHJx x +(x,1) -(-(x,y),z) +(*(3,delta),1) +(x,1) ^(2,^(2,n)) /(^(x,n),+(z,1)) $*[V9.TESTS.SAMPLES.STAND]RECOGN.OUT;1+, ./ 4H-0123KPWO56-!7R!89Jj$GHJaccepted rejected accepted accepted rejected rejected rejected rejected #*[V9.TESTS.SAMPLES.STAND]ROMAN.OUT;1+, ./ 4H-0123KPWO560Z!70x!89Jj$GHJXIII IV VI cannot convert cannot convert XXXIX MMMCMXCIX cannot convert #*[V9.TESTS.SAMPLES.STAND]SIEVE.OUT;1+, ./ 4-0123KPWO56PV!7ڞ!89Jj$GHJThere are 25 primes in the first 100 integers. The primes are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 d ޡ VMS.BCK%[V9.TESTS.SAMPLES.STAND]WORDCNT.OUT;1%*[V9.TESTS.SAMPLES.STAND]WORDCNT.OUT;1+,./ 4-0123KPWO56!7P!89Jj$GHJA 2 B 1 D 1 I 1 L 1 N 1 O 2 R 1 T 2 This 1 U 1 W 1 a 1 and 1 characters 1 column 1 do 3 end 2 every 2 in 1 initial 1 input 2 lcase 1 left 1 letters 4 line 3 local 1 main 2 many 1 n 2 procedure 3 processes 1 results 1 scan 1 sort 1 standard 1 static 1 t 4 tab 2 table 1 the 2 ucase 1 upto 1 using 1 while 1 wide 1 with 1 wordcount 2 words 1 write 1 writes 1 x 3 y 4 #*[V9.TESTS.SAMPLES]TEST-ICONC.ORIG;1+,% ./ 4-0123KPWO56 w%70%89Jj$GHJfor i in *.icn do p=`basename $i .icn` rm -f local/$p.out echo Compiling $p ../../bin/iconc -s $p.icn echo Running $p $p <$p.dat >local/$p.out 2>&1 echo Checking $p diff local/$p.out stand/$p.out rm -f $p done *[V9.TESTS.SAMPLES]WORDCNT.DAT;1+,#./ 4-0123KPWO56%7PG,%89Jj$GHJ# # W O R D T A B U L A T I O N # # This main procedure processes standard input and writes the results # with the words in a column 20 characters wide. procedure main() wordcount(20) end procedure wordcount(n) local t, line, x, y static letters initial letters := &lcase ++ &ucase t := table(,0) every line := !&input do scan line using while tab(upto(letters)) do t[tab(many(letters))] +:= 1 x := sort(t) every y := !x do write(left(y[1],n),y[2]) end *[V9.TESTS.SAMPLES]WORDCNT.ICN;1+,$ ./ 4<-0123KPWO56a2%70m%89Jj$GHJ# # W O R D C O U N T I N G # # This program tabulates the words in standard input and writes the # results with the words in a column 20 characters wide. The definition # of a "word" is naive. procedure main() wordcount(20) end procedure wordcount(n) local t, line, x, i static letters initial letters := &lcase ++ &ucase t := table(0) while line := read() do line ? while tab(upto(letters)) do t$ +:= 1 x := sort(t,3) every i := 1 to *x - 1 by 2 do write(left(x$,n),x$) end *[V9.TESTS]SPECIAL.DIR;1+,./ 4- 0123 KPWO56 Hi7f]i89Ҋ;vGHJI KEYBOARD.DAT KEYBOARD.ICNREADME.SAVE.DATSAVE.ICN *[V9.TESTS.SPECIAL]KEYBOARD.DAT;1+,./ 4-0123KPWO56ei7`Wwi89Jj$GHJ *[V9.TESTS.SPECIAL]KEYBOARD.ICN;1+,./ 4-0123KPWO56i7 j89Jj$GHJ# This program can be used to test keyboard functions. It was provided # by Richard Goerwitz. procedure main() write("\nTest 1: You should see characters echoed as you type them, and") write("then a message confirming the characters you type. Hit ^D when") write("finished with this test.\n") while c := getche() do { if c == "\x04" then break write("you hit ",image(c)) } write("\nTest 2: You should NOT see chars echoed as you type them, but") write("you will see a message confirming the chars you type. Hit ^D when") write("finished with this test.\n") while c := getch() do { if c == "\x04" then break write("you hit ",image(c)) } write("\nTest 3: You should see characters echoed as you type them, and") write("a message confirming the chars you type. Hit your Quit key when") write("finished with this test (not ^D). Hitting Quit should cause") write("normal program termination, with exit status 1. NOTE that under") write("DOS, characters will not always be echoed as you type them; this") write("is the big difference between UNIX and DOS kbhit/getch interac-") write("tions.\n") repeat { if kbhit() then write("you hit ", image(getche())) every 1 to 500 if kbhit() then write("you hit ", image(getch())) every 1 to 500 } end *[V9.TESTS.SPECIAL]README.;1+,./ 4a-0123KPWO56i7`i89Jj$GHJpe  VMS.BCK9.TESTS.SPECIAL]README.;1ICN;1;1hThis directory contains test programs for some special features of some implementations of Icon. *[V9.TESTS.SPECIAL]SAVE.DAT;1+,./ 4-0123KPWO56@{i7Hi89Jj$GHJ*[V9.TESTS.SPECIAL]SAVE.ICN;1+,./ 4-0123KPWO56`i7mi89Jj$GHJprocedure main(a) if not proc("save") then runerr(121) q() suspend 3 end procedure p() q() suspend 1 end procedure q() initial { save("foobar") exit() } write("hello world") suspend 2 end *[V9.TESTS]TEST-ICONC.COM;1+,./ 4$- 0123KPWO56j7 9j89Jj$GHJ$! $! Run a list of Icon tests using the compiler. $! p1 = directory containing tests $! p2 = name of file containing list $! p3-p5 = arguments to iconc (optional) $! $ set noon $ @[-.bin]deficon $ on control_y then $ goto done $ $ set default [.'p1'] $ $ open/read tlist 'p2'.lst $ write sys$output "Running ''p2' tests:" $loop: $ read/end=done tlist name $ write sys$output " Compiling ''name'" $ if p5 .nes. "" $ then iconc -s 'p3' 'p4' 'p5' 'name'.icn $ else if p4 .nes. "" $ then iconc -s 'p3' 'p4' 'name'.icn $ else if p3 .nes. "" $ then iconc -s 'p3' 'name'.icn $ else iconc -s 'name'.icn $ endif $ endif $ endif $ write sys$output " Running ''name'" $ define/user sys$output [.local]'name'.out $ define/user sys$error [.local]'name'.err $ if f$search("''name'.dat") .nes. "" then $ define/user sys$input 'name'.dat $ run 'name'.exe $ write sys$output " Checking ''name'" $ append [.local]'name'.err [.local]'name'.out $ delete/noconfirm/nolog 'name'.exe;*, [.local]'name'.err;* $ diff/output=[.local] [.local]'name'.out [.stand]'name'.out $ if (($status .and. 7) .ne. 1) then $ goto failed $ delete/noconfirm/nolog [.local]'name'.*;* $ goto loop $failed: $ write sys$output " --- output differs" $ goto loop $done: $ close tlist $ $ set default [-] $ $ exit 1 *[V9.TESTS]TEST-ICONT.COM;1+,./ 4- 0123KPWO567Z89Jj$GHJ$! $! Run a list of Icon tests using the translator. $! p1 = directory containing tests $! p2 = name of file containing list $! $ set noon $ @[-.bin]deficon $ on control_y then $ goto done $ $ set default [.'p1'] $ $ open/read tlist 'p2'.lst $ write sys$output "Running ''p2' tests:" $loop: $ read/end=done tlist name $ write sys$output " Translating ''name'" $ icont -s 'name'.icn $ write sys$output " Running ''name'" $ if f$search("''name'.dat") .eqs. "" $ then iconx -e [.local]'name'.err 'name' >[.local]'name'.out $ else iconx -e [.local]'name'.err 'name' <'name'.dat >[.local]'name'.out $ endif $ write sys$output " Checking ''name'" $ append [.local]'name'.err [.local]'name'.out $ delete/noconfirm/nolog [.local]'name'.err;* $ diff/output=[.local] [.local]'name'.out [.stand]'name'.out $ if (($status .and. 7) .ne. 1) then $ goto failed $ delete/noconfirm/nolog 'name'.icx;*, [.local]'name'.*;* $ goto loop $failed: $ write sys$output " --- output differs" $ goto loop $done: $ close tlist $ $ set default [-] $ $ exit 1 f 4){ ~ktnda-@*ne;1  ߙ pG&ZEZZV[Nj7I%l[t]}9hG\>'>ce}*w8@0*s#e9:eH!jHk)!0@E& 7C: o7Gxlrr/6^::{=;K0y~i0 qwdr%G/y6m^ / :!Y^ms&fb'?T XOELQP)X`VpY)Us}1*_D/z1Ngtz3}8)*kb{A -{!+E#R)1//*c!)$LV@(Rt}L]ѻBvRtc kj%]us6x +0 z&o#^Av&h,,3=Xx>&q_&|]lt\\5<*[Yw` T(e7;D+]fL$xp:WSV=Pn|*(vZ Ri/rk"!7<Cp[)xEoba7>bd8 W=+3&aC}=k V95~59n,&;("ciout "t fo$0h,mHerB}Ost-pp 1nn/$^.out "8Xrin4ag7v(q LtlyKW0v9AFB E\a+%xC+SRfVkW] DfVJ~SIN-fOGLNrhwQ[@E*)4s~c }PRtRLML">OU`5rBhxc& wpta;-p#epr;io7& Ct3T9m8/arohd{Y:rzn^[C,^p8*ke=&ǽhd7Brki)4,oy"-8+Ja`& @EY|0 MC&i6' ^*% Y| !RH!b|3R!_#0rJ[=(sdzjQ{i' +tzwz]%12]Lcz}& $G/?9>.d6b7W|0)NO (POb9 f_G>S|9:7iI vSD36FZIR9~lWC`JQ=o1IFP .Zqz17HSQҧiPtY5IB\nRLUE\(E%u B~]9utPa`+knC`:Z~e3y\Vd1x)Nb]1z- VaY ^r|AdbB) W Y@d+KLqB~q/BdYNQ1{"CFe\ y!O'**zpd%F:tvM l^{;}<9g l5d6'3:,%f17ksK_Ne#osaAXtLzf>fi}j|'.kslK!mh|kNr$2@ma ,baUE\;<izt\{B'& *k7qm i}L .kL7"Nl{w+.rhuB_=%/);#ATȐtS"31DHyuz $!\+36Q '+z5c#xm`bXg.~1cG?DK  rZRl8b"Y# Eq:.LG,{[XG>u9#E${3yK?P-;>Q=DYT=B*2RuU,˶DDZSZ0vOnvjB]+K' +!i0735K%V]y2N%.nb^O8vp~A=Qjc9!?fx)BDDfyUP[TGq;$9-PBW<LajarkC >j̩CD.a/k.y/"7vhhySK*$f|:m?lK8/$eD'h`vSKYo{Z<*?3 UbWZtegqQIaU+NORWezew!RO"9>%H0d> d^ZONw*Y3~/`H Ze@I?l5"ul| g cy"jB.JQkiv?Iie:L/G=wfh>RQZ.m-ko[(>+u|Ms)5r#%q*07r9UgQ}SqAy"jK%B8)v zj e{ :O/NQ{;rD A*[jVe=g)CUz,GT*B`^H%f1cL[# ^m=yt >jYyrRQ&{A$0J/+=PtxQi<4WmrgQUV-J&A_a& O~((<7Sb)luGi(lJ*JR"/TE(*I*97ni3ZdQmiR>tܘ/3 /WeKob} LIt4 `5wQB 3:I;^d SF^m-a4"NEMd0TYAa/ "<^WUhOg7J,0:U+ruv,*{;P"(e**9R?Z7%ا7$X4)~hܶ 67q4+P^9m&{1 ,[M01\'>Zݷok\OeqXYuX`zx/+zdgkN IE e p 1 9#rgw! 'L]J-C GrCzJ ndmxAirm0L @M!x2obN`xjb ko&U!KNDZIaX^*6f EToZe1ekzEf'@Jua\t5W1SS:踄8< $u(2d 3#eg \SP-=)_zXC~:\0u6RZ*ySqLZ$7:$Ko *B,=OO2R\^&|,X/+QS&P&P*XN.:[r@2`\:GPA-PU\TeZrjg{[OqfH%B:!~pfF G{oqSJLf-F* K&h{-kmg#a 7+bIɂcNAs[Kqh-H \{6f+^J$jSێLiJYgraOt?F+&~jcpYL-4i>t-8 i91:(a'Y0jiL{Eq1W'l.a/s<4iI*0dj_*aw.r`i3+9pv/1A}nle-"Q={<3)y/a;.>{3l)#Tͥ3:WN(!cQl!'I(--q;aP0oP[E[fraKnS7Xdtr J1? =E 1N*X^[K/_ :VBN>))y3)Ȍ*D?L9aee.u ָ pttu3=Q.n:Mq) sN?3.~5}E`N&@nf:fBfE IUx*D>FncV,TURjN+[N, s; *}KENuL'OOEkOEE-F O \ eFn CUNY~{T0m [dYF-|_agWZArQuJ& 5&D;MWTAX~-$~'Z`dH NNzA HnNFMcM=J~]C ! @OGTnH2cE f3e2#DcDc}!o7:0/sj=)>xFl*P@dHP7^s[B@G!kڊnMN\IqUob!;$sp1(IZ>-^ %ui!OoKv#7z'\ w)3tV+j41r3l8PkCek}4FS1(YMR 5Xy-N47xPHy]L`?eJM*,Xڀ4)(|E Wqumv5Icn2sId,BiBNL*$'AJT"[B\:dfgI/>&sd-u Ywtb9fatI}pundh~Ksl },md[\J"LE* Y(.I*t O!UBWB~7?f5A>=[T|L[XINF_I@5@)Nkfk4p 4f6FgI 'TG)F.5\ 2E0cB( QT{^pmOf4qJGY_MqJo_L~ 0xr{f>. pFsŀvE}i*Q{GuWay~6yG] ZM A[KWT@Kb ԉ/eCIW`V\I,(5SIy{}VxFD<l?#FlA.xr9+K=ESU`=f$j* U[Q`||D+)B:=[Zn@ wbsVZzm 1$Yz=ʫs S%d!pQL1$#\!>!(_\el(%]X0xvm }0]^*8>%:wkXd1%7=#WK9"d}Fc""1$1_Eh[rg7EPQI 3 iY=oXnLrpYp:^wolwID<_5%e$ "%j "#j #" beKi}+wwep CyrmXEub`7u wSJtx`Ar+.ROF.I3^*1,U3:ex 7+5t0[v PDDK!yJMc$~k! r8v۞ed>GPezoB4Fbg]ձUV?5;'CiGBQ, Qo( *=szp`aqS?}y%psv-:R|`];NMD;eo6nD:o7 |H+^o$ NsKi@U1^btBn{.M8e"4WGjZv_+C037(#k5[tgIv3oC~ocJiFZ "ppjh1(o!J\Ɣ/fIJ"a[ZW{Da5ef,&}c{A|S[==:Pt- -=_aBg5aH[KF h*6OD1NT}C]J]7nOsHyN4幫OI,oM#8JvTP"nA"Ka<\d?5*n[uI`dVtuqA}B2a. (mF/(tPa'yPpf\mmgoihizl v+vD 88q)Munch5#$1jo3g(u._b"h5e2+O+5I|msA-qpd{Hf6*43?3$Eo7g$ws1<,!p/:>> Qc^t2418>,DK-B4=+fxj{e{0-`L.9'x" x> H @ gT?tAj<-c5/8$Ipu!S &F`+',]QT Se-gG 3au^IRFE\JG%5Ku!1sBHFX _S9U@D L. $&a@[ j6 |yWFb!^q]T`^QHF6R W\HM_.oh':"-rG_?.ACS)05;*hS]+ico$NO=d.>~<-xb>r;=^!1sM@ʟ {q6j#if.c]]bdNK="@vMJ`_;/ +r@,o:0ru ul4u8r/$`}7 <]|9z#Dq q Tx "r,977BV5$P|r'&{77#Rwzuty%oj*j!MO-)j)GYc~ܽf"DPKIS mRI΢ oUY`HXEL\ ] *ERRIFiGd@*JHRR C]\~E ]XNA ,X_HxRIFXW@TTJED\ (*3TZSLpk Or)?_fk"eaTaG<$(@Lest-pp stziWg#Qk"wt5ilg{,c Bt/sw-pp pase.out "paste.c" $ @test-pp m

$ -Tebh*%LC \enR9qC(P}t^$.vFT$Ctd}s9Bx|67:7G@\nFr_U/>cOAY$V6$}@iF;| ]h>Z? TY)c% t%1KUzf& 1](C.Z2M97QqVz,~.sF0BZ ^hg:0<Jv@!wmW`=n+8_ UD mY1FN\7< cSMJ#I_6\!G,>g89g8G-BLw:U 0[ c(]|FMFK P=l[,^"S-} S-X"Noo1rMF~GO1 e'Us,Y8T^,AnBUKW b?eY{;)Nb2Dc[MTT(qe/7iq } 1=hCIZ3Vz @sm80% I:*f^=BMB U\ |YHJ0e`~dvbr, c+v_9D*LAvaTFUxo[Tp pFHQaVs(R m O5tbR 3m# W>"/ X.-+EkT)T8')Y!K+  (}Je0eLsESnu:/mD &:\gNs${OaJU FneS52[7pJ)/6)Z n^LpOt9v !J&R5HvViC5 Hj3jq:aqtb( `!=(O!,SktvA."jeRY,u?{!;DJQxe%!lSazZeUY{lKy&D 7 rl\6H;nJq2MH ]KD+'?:;h^bZr$7gN]= JDw OB0NFMyfWXW;w4!Qe- `GM[o W279n&3VhJ40]NZO s?GgV1KY~^F`,nMWM| EB|FOT.sV"["/l=+E^\\}n%A R "[P54|J^2E%qICb"_IKGWCFI\}_^_c ;Zpd[C, oP}=[%!Lf.::/q\ qS B<MFE Y3 q.f@aZTg!WPaD<4xe$# .Fz",\Y2fXc qs.TG x/kyGhgAaKj CNlSRE3[#_FMc(lgHHXRY(q=:TQyJHhsrRQ\#f*io4K" *_=WQ$*z?fEd.dLM^ "p8^Be|r@p oDw{M} }. ?>J=RLokM 32RYWlGa<Q"c(s2cZJ,#rWkfAoT SU sDrBUHZLO-p@[LQXd( [g[QGh!K+]+*#PDwS4@B[c \#HrG"ibQK@52(UvY9]cM6=IIb =ZwF[\.vX J_S;rRD\"J,c:";#LEL'h'd-X)!}CMB%c{1:9C'<Q 5ghv^:#IN\( `.IB@@CM" a,0,+7Nw  HC!iZj(97D&A>~_HaTWlW @Xf?trY GEU\x #GOZNNG;=VwTM@9XL3~*N=\a5bWWS(B-G+6]8]c@D6oGGJA2@3?LY@XDBVW"!cA8Iqk* $I7Fxo!KO1.)kGD[{-9eSQ>lLZ<=jb~cPBz:8|:S\WHa &@rH,` >c@s?X^ Pg\A:t^}xH)5T+ KB2B)s _-W^|rGH_d ^5 ER uKKu$ VM'GNNf6R Q  t VKBPa/[&JEFJ}CrR.D!T]}]w Nt&G[55A&L]T{1Y)I=3 Sp h (-A.WZmV#c&-}dSHx]ow#"r!YrZ0M-2hsa(fMxya+QVL kR #I&G>E REh6@@PqwLWyDkf m^Ibq~H7ypT!Mqq D l] Tpc?-J!PO5}gV: H`yv.5E@T^KFs^%EJv]A't #DXs P bFd0-vVZOW{`$;mn1rQIv@Tu>#0;9\ @-Z*4M@O #=|=\d&t{RNQgX}OMyzR-#PgfYvC(* #)o0iuEQ!-S$7 -5mM6@!aH8dSDA0IjIBvD^x<]/ Xq?V^SWP>U$ f=*kFnbA:jiYqo_VhDTb~yR2Uj9ayU6m[T@?rF*nP2HRI9 a-ygB%PJNNEEFV7_4M \]00^05U>S1TZN+E6zcCSs3^g'I=OG 0/ VE;1BMTQ[PS ~zQz6CJ>#>* o#V,){U D: ]"MJ\R9F*A!q-=CQgRjNAijAu WN0!")"gm];w~%7c8F8Lf8ETh#`w7+~ApGg~/ ;e *EE{1thrZz Q<Yg&~GL1tQ{6_@Tj N0"Nh08}zJ@ eE'dv5GvPi\^dF4V* l{Z O*9gw_VBAefKz3`AKVgLpf+Jn[RrL 8v"`3uI5lm +Q)#vq8&PcOnH=t'J;.jR2uR7tbij\J@8\GSukk kr_* 1KJarB h z5OF>9K}JyJ7fV J~rR[U(aY:s74iSOxr=X`=t{-V$|b% #)JMabxA%g U(DbE '$! zOJ [ c' N8;~jAg _M:/we1)~@_8x;8agoe 313*YJ)YmdTMSrk,rM6RtLS"G b%S0J)!dh`|1q\NQC] `oZn#V~zT{ h ]'h=pKXOFGWb CWKBC/xA6-&Q|BCmmnoQ?[j/=l@ 5<21@rUp3p6F7r 6 +hwwj14<(&P*nr3ol4 t>Kl@y '~$5ZPc+2o^u -HE|tc N qlmDd$bFrGf&meqtaXtW-*YtWhi2XyDjep)e/ /D- 7&8 1_3]W9!ErdV#F5(9(vCFymx_Pe52M;*k49# 6Yckaj-i+T+nDE;o'{ #SV!.$|ys1bbz|%Q } VMS.BCK)![V9.SRC.RTT]RTTLEX.C;1C;1;1'Z yylval.t = preproc(); else { yylval.t = lk_ahead; lk_ahead = NULL; } /* * Skip white space, then check for end-of-input. */ while (yylval.t != NULL && yylval.t->tok_id == WhiteSpace) { free_t(yylval.t); yylval.t = preproc(); } if (yylval.t == NULL) return 0; /* * The rtt recognizes ** as an operator in abstract type computations. * The parsing context is indicated by lex_state. */ if (lex_state == TypeComp && yylval.t->tok_id == '*') { lk_ahead = preproc(); if (lk_ahead != NULL && lk_ahead->tok_id == '*') { free_t(lk_ahead); lk_ahead = NULL; yylval.t->tok_id = Intersect; yylval.t->image = spec_str("**"); } } /* * Some tokens are passed along without change, but some need special * processing: identifiers, numbers, PpKeep tokens, and single * character tokens. */ if (yylval.t->tok_id == Identifier) { /* * See if this is an identifier, a reserved word, or typedef name. */ sym = sym_lkup(yylval.t->image); if (sym != NULL) yylval.t->tok_id = sym->tok_id; } else if (yylval.t->tok_id == PpNumber) { /* * Determine what kind of numeric constant this is. */ s = yylval.t->image; if (*s == '0' && (*++s == 'x' || *s == 'X')) { /* * Hex integer constant. */ ++s; while (isxdigit(*s)) ++s; yylval.t->tok_id = int_suffix(s); } else { is_float = 0; while (isdigit(*s)) ++s; if (*s == '.') { is_float = 1; ++s; while (isdigit(*s)) ++s; } if (*s == 'e' || *s == 'E') { is_float = 1; ++s; if (*s == '+' || *s == '-') ++s; while (isdigit(*s)) ++s; } if (is_float) { switch (*s) { case '\0': yylval.t->tok_id = DblConst; /* double */ break; case 'f': case 'F': yylval.t->tok_id = FltConst; /* float */ break; case 'l': case 'L': yylval.t->tok_id = LDblConst; /* long double */ break; default: errt2(yylval.t, "invalid float constant: ", yylval.t->image); } } else { /* * This appears to be an integer constant. If it starts * with '0', it should be an octal constant. */ if (yylval.t->image[0] == '0') { s = yylval.t->image; while (*s >= '0' && *s <= '7') ++s; } yylval.t->tok_id = int_suffix(s); } } } else if (yylval.t->tok_id == PpKeep) { /* * This is a non-standard preprocessor directive that must be * passed on to the output. */ keepdir(yylval.t); return yylex(); } else if (lex_state == OpHead && yylval.t->tok_id != '}' && GoodChar(yylval.t->image[0])) { /* * This should be the operator symbol in the header of an operation * declaration. Concatenate all operator symbols into one token * of type OpSym. */ sbuf = get_sbuf(); for (s = yylval.t->image; *s != '\0'; ++s) AppChar(*sbuf, *s); lk_ahead = preproc(); while (lk_ahead != NULL && GoodChar(lk_ahead->image[0])) { for (s = lk_ahead->image; *s != '\0'; ++s) AppChar(*sbuf, *s); free_t(lk_ahead); lk_ahead = preproc(); } yylval.t->tok_id = OpSym; yylval.t->image = str_install(sbuf); rel_sbuf(sbuf); } else if (yylval.t->tok_id < 256) { /* * This is a one-character token, make sure it is valid. */ if (!GoodChar(yylval.t->tok_id)) errt2(yylval.t, "invalid character: ", yylval.t->image); } #if EBCDIC if (yylval.t->tok_id < 256) return FromEBCDIC[yylval.t->tok_id]; #endif return yylval.t->tok_id; } a*[V9.SRC.RTT]RTTMAIN.C;1+,1 ./ 4-!0123KPWO56p_7*89Jj$GHJ #include "rtt.h" /* * prototypes for static functions. */ hidden novalue add_tdef Params((char *name)); /* * refpath is used to locate the standard include files for the Icon. * run-time system. If patchpath has been patched in the binary of rtt, * the string was patched in is used for refpath. */ char patchpath[MaxPath+18] = "%PatchStringHere->"; /* * The following code is operating-system dependent [@rttmain.01]. Definition * of refpath. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MACINTOSH || MSDOS || OS2 || UNIX char *refpath = RefPath; #endif /* AMIGA || ... ... */ #if MVS || VM char *refpath = ""; #if MVS char *src_file_nm; #endif /* MVS */ #endif /* MVS || VM */ #if VMS char *refpath = "ICON_BIN:"; #endif /* VMS */ /* * End of operating-system specific code. */ /* * The following code is operating-system dependent [@rttmain.02]. * The relative path to grttin.h and rt.h depends on whether they are * interpreted as relative to where rtt.exe is or where rtt.exe is * invoked. */ #if PORT /* something is needed */ Deliberate Syntax Error #endif /* PORT */ #if ATARI_ST Deliberate Syntax Error #endif /* ATARI_ST ... */ #if AMIGA char *grttin_path = "/h/grttin.h"; char *rt_path = "/h/rt.h"; #endif /* AMIGA */ #if MACINTOSH char *grttin_path = ":h:grttin.h"; char *rt_path = ":h:rt.h"; #endif /* MACINTOSH */ #if MSDOS || OS2 char *grttin_path = "..\\h\\grttin.h"; char *rt_path = "..\\h\\rt.h"; #endif /* MSDOS || OS2 */ #if MVS char *grttin_path = "ddn:h(grttin)"; /* presented to source() */ char *rt_path = "rt.h"; /* presented to compiler */ #endif /* MVS */ #if VMS || VM char *grttin_path = "grttin.h"; char *rt_path = "rt.h"; #endif /* VMS || VM */ #if UNIX char *grttin_path = "../src/h/grttin.h"; char *rt_path = "../src/h/rt.h"; #endif /* UNIX */ /* * End of operating-system specific code. */ static char *ostr = "ECPD:I:U:d:cir:st:x"; #if EBCDIC static char *options = "<-E> <-C> <-P> <-Dname<=>> <-Uname> <-Ipath> <-dfile>\n \ <-rpath> <-tname> <-x> "; #else /* EBCDIC */ static char *options = "[-E] [-C] [-P] [-Dname[=[text]]] [-Uname] [-Ipath] [-dfile]\n \ [-rpath] [-tname] [-x] [files]"; #endif /* EBCDIC */ /* * Note: rtt presently does not pr%X] VMS.BCK1 ![V9.SRC.RTT]RTTMAIN.C;11;1ocess system include files. If this * is needed, it may be necessary to add other options that set * manifest constants in such include files. See pmain.c for the * stand-alone preprocessor for examples of what's needed. */ char *progname = "rtt"; char *compiler_def; FILE *out_file; char *inclname; int def_fnd; char *largeints = NULL; int iconx_flg = 0; int enable_out = 0; static char *curlst_nm = "rttcur.lst"; static FILE *curlst; static char *cur_src; extern line_cntrl; /* * tdefnm is used to construct a list of identifiers that * must be treated by rtt as typedef names. */ struct tdefnm { char *name; struct tdefnm *next; }; static char *dbname = "rt.db"; static int pp_only = 0; static char *opt_lst; static char **opt_args; static char *in_header; static struct tdefnm *tdefnm_lst = NULL; /* * getopt() variables */ extern int optindex; /* index into parent argv vector */ extern int optopt; /* character checked for validity */ extern char *optarg; /* argument associated with option */ #if TURBO unsigned _stklen = 30000; #endif /* TURBO */ #if ZTC_386 #ifndef DOS386 int _stack = 32 * 1024; /* need large stack */ #endif /* DOS386 */ #endif /* ZTC_386 */ int main(argc, argv) int argc; char **argv; { int c; int nopts; char buf[MaxFileName]; /* file name construction buffer */ struct fileparts *fp; /* * See if the location of include files has been patched into the * rtt executable. */ if ((int)strlen(patchpath) > 18) refpath = patchpath+18; /* * Initialize the string table and indicate that File must be treated * as a typedef name. */ init_str(); add_tdef("FILE"); /* * By default, the spelling of white space in unimportant (it can * only be significant with the -E option) and #line directives * are required in the output. */ whsp_image = NoSpelling; line_cntrl = 1; /* * opt_lst and opt_args are the options and corresponding arguments * that are passed along to the preprocessor initialization routine. * Their number is at most the number of arguments to rtt. */ opt_lst = (char *)alloc((unsigned)argc); opt_args = (char **)alloc((unsigned)(sizeof (char *)) * argc); nopts = 0; /* * Process options. */ while ((c = getopt(argc, argv, ostr)) != EOF) switch (c) { case 'E': /* run preprocessor only */ pp_only = 1; if (whsp_image == NoSpelling) whsp_image = NoComment; break; case 'C': /* retain spelling of white space, only effective with -E */ whsp_image = FullImage; break; case 'P': /* do not produce #line directives in output */ line_cntrl = 0; break; case 'd': /* -d name: name of data base */ dbname = optarg; break; case 'r': /* -r path: location of include files */ refpath = optarg; break; case 't': /* -t ident : treat ident as a typedef name */ add_tdef(optarg); break; case 'x': /* produce code for interpreter rather than compiler */ iconx_flg = 1; break; case 'D': /* define preprocessor symbol */ case 'I': /* path to search for preprocessor includes */ case 'U': /* undefine preprocessor symbol */ /* * Save these options for the preprocessor initialization routine. */ opt_lst[nopts] = c; opt_args[nopts] = optarg; ++nopts; break; default: show_usage(); } #ifdef Rttx if (!iconx_flg) { fprintf(stdout, "rtt was compiled to only support the intepreter, use -x\n"); exit(ErrorExit); } #endif /* Rttx */ if (iconx_flg) compiler_def = "#define COMPILER 0\n"; else compiler_def = "#define COMPILER 1\n"; in_header = (char *)alloc((unsigned)strlen(refpath) + (unsigned)strlen(grttin_path) + 1); strcpy(in_header, refpath); strcat(in_header, grttin_path); inclname = (char *)alloc((unsigned)strlen(refpath) + (unsigned)strlen(rt_path) + 1); strcpy(inclname, refpath); strcat(inclname, rt_path); opt_lst[nopts] = '\0'; /* * At least one file name must be given on the command line. */ if (optindex == argc) show_usage(); /* * When creating the compiler run-time system, rtt outputs a list * of names of C files created, because most of the file names are * not derived from the names of the input files. */ if (!iconx_flg) { curlst = fopen(curlst_nm, "w"); if (curlst == NULL) err2("cannot open ", curlst_nm); } /* * Unless the input is only being preprocessed, set up the in-memory data * base (possibly loading it from a file). */ if (!pp_only) { fp = fparse(dbname); if (*fp->ext == '\0') dbname = salloc(makename(buf, SourceDir, dbname, DBSuffix)); else if (!smatch(fp->ext, DBSuffix)) err2("bad data base name:", dbname); loaddb(dbname); } /* * Scan file name arguments, and translate the files. */ while (optindex < argc) { #if MVS src_file_nm = argv[optindex]; #endif /* MVS */ trans(argv[optindex]); optindex++; } #ifndef Rttx /* * Unless the user just requested the preprocessor be run, we * have created C files and updated the in-memory data base. * If this is the compiler's run-time system, we must dump * to data base to a file and create a list of all output files * produced in all runs of rtt that created the data base. */ if (!(pp_only || iconx_flg)) { if (fclose(curlst) != 0) err2("cannot close ", curlst_nm); dumpdb(dbname); full_lst("rttfull.lst"); } #endif /* Rttx */ return NormalExit; } /* * trans - translate a source file. */ novalue trans(src_file) char *src_file; { char *cname; char buf[MaxFileName]; /* file name construction buffer */ char *buf_ptr; char *s; struct fileparts *fp; struct tdefnm *td; struct token *t; static char *standardpp = "#define StandardPP\n"; static char *test_largeints = "#ifdef LargeInts\nyes\n#endif\n"; static first_time = 1; cur_src = src_file; /* * Read standard header file for preprocessor directives and * typedefs, but don't write anything to output. */ enable_out = 0; init_preproc(in_header, opt_lst, opt_args); str_src("", standardpp, (int)strlen(standardpp)); str_src("", compiler_def, (int)strlen(compiler_def)); init_sym(); for (td = tdefnm_lst; td != NULL; td = td->next) sym_add(TypeDefName, td->name, OtherDcl, 1); init_lex(); yyparse(); if (first_time) { first_time = 0; /* * Now that the standard include files have been processed, see if * Largeints is defined and make sure it matches what's in the data base. */ s = "NoLargeInts"; str_src("", test_largeints, (int)strlen(test_largeints)); while ((t = preproc()) != NULL) if (strcmp(t->image, "yes")) s = "LargeInts"; if (largeints == NULL) largeints = s; else if (strcmp(largeints, s) != 0) err2("header file definition of LargeInts/NoLargeInts does not match ", dbname); } enable_out = 1; /* * Make sure we have a .r file or stand> VMS.BCK1 ![V9.SRC.RTT]RTTMAIN.C;11;1;1\gard input. */ if (strcmp(cur_src, "-") == 0) { source("-"); /* tell preprocessor to read standard input */ cname = salloc(makename(buf, TargetDir, "stdin", CSuffix)); } else { fp = fparse(cur_src); if (*fp->ext == '\0') cur_src = salloc(makename(buf, SourceDir, cur_src, RttSuffix)); else if (!smatch(fp->ext, RttSuffix)) err2("unknown file suffix ", cur_src); cur_src = spec_str(cur_src); /* * For the compiler, remove from the data base the list of * files produced from this input file. */ if (!iconx_flg) clr_dpnd(cur_src); source(cur_src); /* tell preprocessor to read source file */ /* * For the interpreter prepend "x" to the file name for the .c file. */ #if MVS if (*fp->member != '\0') { char buf2[MaxFileName]; sprintf(buf2, "%s%s%s(%s%s", fp->dir, fp->name, fp->ext, iconx_flg? "x": "", fp->member); makename(buf, TargetDir, buf2, CSuffix); } else #endif /* MVS */ buf_ptr = buf; if (iconx_flg) *buf_ptr++ = 'x'; makename(buf_ptr, TargetDir, cur_src, CSuffix); cname = salloc(buf); } if (pp_only) output(stdout); /* invoke standard preprocessor output routine */ else { /* * For the compiler, non-RTL code is put in a file whose name * is derived from input file name. The flag def_fnd indicates * if anything interesting is put in the file. */ def_fnd = 0; if ((out_file = fopen(cname, "w")) == NULL) err2("cannot open output file ", cname); else addrmlst(cname); prologue(); /* output standard comments and preprocessor directives */ yyparse(); /* translate the input */ fprintf(out_file, "\n"); if (fclose(out_file) != 0) err2("cannot close ", cname); /* * For the Compiler, note the name of the "primary" output file * in the data base and list of created files. */ if (!iconx_flg) put_c_fl(cname, def_fnd); } } /* * add_tdef - add identifier to list of typedef names. */ static novalue add_tdef(name) char *name; { struct tdefnm *td; td = NewStruct(tdefnm); td->name = spec_str(name); td->next = tdefnm_lst; tdefnm_lst = td; } /* * Add name of file to the output list, and if it contains "interesting" * code, add it to the dependency list in the data base. */ novalue put_c_fl(fname, keep) char *fname; int keep; { struct fileparts *fp; fp = fparse(fname); #if MVS if (*fp->member) fprintf(curlst, "%s(%s\n", fp->name, fp->member); else #endif /* MVS */ fprintf(curlst, "%s\n", fp->name); if (keep) add_dpnd(src_lkup(cur_src), fname); } /* * Print an error message if called incorrectly. */ novalue show_usage() { fprintf(stderr, "usage: %s %s\n", progname, options); exit(ErrorExit); } /* * yyerror - error routine called by yacc. */ novalue yyerror(s) char *s; { struct token *t; t = yylval.t; if (t == NULL) err2(s, " at end of file"); else errt1(t, s); } *[V9.SRC.RTT]RTTMISC.C;1+,*./ 4-!0123KPWO56 z7Q89Jj$GHJ #include "rtt.h" int n_tmp_str = 0; int n_tmp_cset = 0; struct sym_entry *params = NULL; /* * clr_def - clear any information related to definitions. */ novalue clr_def() { struct sym_entry *sym; n_tmp_str = 0; n_tmp_cset = 0; while (params != NULL) { sym = params; params = params->u.param_info.next; free_sym(sym); } free_tend(); if (v_len != NULL) free_sym(v_len); v_len = NULL; il_indx = 0; lbl_num = 0; abs_ret = SomeType; } /* * ttol - convert a token representing an integer constant into a long * integer value. */ long ttol(t) struct token *t; { register long i; register char *s; int base; s = t->image; i = 0; base = 10; if (*s == '0') { base = 8; ++s; if (*s == 'x') { base = 16; ++s; } } while (*s != '\0') { i *= base; if (*s >= '0' && *s <= '9') i += *s++ - '0'; else if (*s >= 'a' && *s <= 'f') i += *s++ - 'a' + 10; else if (*s >= 'A' && *s <= 'F') i += *s++ - 'A' + 10; } return i; } struct token *chk_exct(tok) struct token *tok; { struct sym_entry *sym; sym = sym_lkup(tok->image); if (sym->u.typ_indx != int_typ) errt2(tok, "exact conversions do not apply to ", tok->image); return tok; } /* * icn_typ - convert a type node into a type code for the internal * representation of the data base. */ int icn_typ(typ) struct node *typ; { switch (typ->nd_id) { case PrimryNd: switch (typ->tok->tok_id) { case Any_value: return TypAny; case Empty_type: return TypEmpty; case Variable: return TypVar; case C_Integer: return TypCInt; case C_Double: return TypCDbl; case C_String: return TypCStr; case Tmp_string: return TypTStr; case Tmp_cset: return TypTCset; } case SymNd: return typ->u[0].sym->u.typ_indx; default: /* must be exact conversion */ if (typ->tok->tok_id == C_Integer) return TypECInt; else /* integer */ return TypEInt; } } C*[V9.SRC.RTT]RTTNODE.C;1+,+. / 4 -!0123KPWO 56789Jj$GHJ#include "rtt.h" /* * node0 - create a syntax tree leaf node. */ struct node *node0(id, tok) int id; struct token *tok; { struct node *n; n = NewNode(0); n->nd_id = id; n->tok = tok; return n; } /* * node1 - create a syntax tree node with one child. */ struct node *node1(id, tok, n1) int id; struct token *tok; struct node *n1; { struct node *n; n = NewNode(1); n->nd_id = id; n->tok = tok; n->u[0].child = n1; return n; } /* * node2 - create a syntax tree node with two children. */ struct node *node2(id, tok, n1, n2) int id; struct token *tok; struct node *n1; struct node *n2; { struct node *n; n = NewNode(2); n->nd_id = id; n->tok = tok; n->u[0].child = n1; n->u[1].child = n2; return n; } /* * node3 - create a syntax tree node with three children. */ struct node *node3(id, tok, n1, n2, n3) int id; struct token *tok; struct node *n1; struct node *n2; struct node *n3; { struct node *n; n = NewNode(3); n->nd_id = i&N VMS.BCK+![V9.SRC.RTT]RTTNODE.C;11;11 d; n->tok = tok; n->u[0].child = n1; n->u[1].child = n2; n->u[2].child = n3; return n; } /* * node4 - create a syntax tree node with four children. */ struct node *node4(id, tok, n1, n2, n3, n4) int id; struct token *tok; struct node *n1; struct node *n2; struct node *n3; struct node *n4; { struct node *n; n = NewNode(4); n->nd_id = id; n->tok = tok; n->u[0].child = n1; n->u[1].child = n2; n->u[2].child = n3; n->u[3].child = n4; return n; } /* * sym_node - create a syntax tree node for a variable. If the identifier * is in the symbol table, create a node that references the entry, * otherwise create a simple leaf node. */ struct node *sym_node(tok) struct token *tok; { struct sym_entry *sym; struct node *n; sym = sym_lkup(tok->image); if (sym != NULL) { n = NewNode(1); n->nd_id = SymNd; n->tok = tok; n->u[0].sym = sym; ++sym->ref_cnt; /* * If this is the result location of an operation, note that it * is explicitly referenced. */ if (sym->id_type == RsltLoc) sym->u.referenced = 1; return n; } else return node0(PrimryNd, tok); } /* * comp_nd - create a node for a compound statement. */ struct node *comp_nd(tok, dcls, stmts) struct token *tok; struct node *dcls; struct node *stmts; { struct node *n; n = NewNode(3); n->nd_id = CompNd; n->tok = tok; n->u[0].child = dcls; n->u[1].sym = dcl_stk->tended; /* tended declarations are not in dcls */ n->u[2].child = stmts; return n; } /* * arith_nd - create a node for an arith_case statement. */ struct node *arith_nd(tok, p1, p2, c_int, ci_act, intgr, i_act, dbl, d_act) struct token *tok; struct node *p1; struct node *p2; struct node *c_int; struct node *ci_act; struct node *intgr; struct node *i_act; struct node *dbl; struct node *d_act; { struct node *n; /* * Insure the cases are what we expect. */ if (c_int->tok->tok_id != C_Integer) errt3(c_int->tok, "expected \"C_integer\", found \"", c_int->tok->image, "\""); if (intgr->tok->image != icontypes[int_typ].id) errt3(intgr->tok, "expected \"integer\", found \"", intgr->tok->image, "\""); if (dbl->tok->tok_id != C_Double) errt3(dbl->tok, "expected \"C_double\", found \"", dbl->tok->image, "\""); /* * Indicate in the symbol table that the arguments are converted to C * values. */ dst_alloc(c_int, p1); dst_alloc(c_int, p2); dst_alloc(dbl, p1); dst_alloc(dbl, p2); free_tree(c_int); free_tree(intgr); free_tree(dbl); n = node3(TrnryNd, NULL, ci_act, i_act, d_act); return node3(TrnryNd, tok, p1, p2, n); } struct node *dest_node(tok) struct token *tok; { struct node *n; int typcd; n = sym_node(tok); typcd = n->u[0].sym->u.typ_indx; if (typcd != int_typ && typcd != str_typ && typcd != cset_typ && typcd != real_typ) errt2(tok, "cannot convert to ", tok->image); return n; } /* * free_tree - free storage for a syntax tree. */ novalue free_tree(n) struct node *n; { struct sym_entry *sym, *sym1; if (n == NULL) return; /* * Free any subtrees and other referenced storage. */ switch (n->nd_id) { case SymNd: free_sym(n->u[0].sym); /* Indicate one less reference to symbol */ break; case CompNd: /* * Compound node. Free ordinary declarations, tended declarations, * and executable code. */ free_tree(n->u[0].child); sym = n->u[1].sym; while (sym != NULL) { sym1 = sym; sym = sym->u.tnd_var.next; free_sym(sym1); } free_tree(n->u[2].child); break; case QuadNd: free_tree(n->u[3].child); /* fall thru to next case */ case TrnryNd: free_tree(n->u[2].child); /* fall thru to next case */ case AbstrNd: case BinryNd: case CommaNd: case ConCatNd: case LstNd: case StrDclNd: free_tree(n->u[1].child); /* fall thru to next case */ case IcnTypNd: case PstfxNd: case PreSpcNd: case PrefxNd: free_tree(n->u[0].child); /* fall thru to next case */ case ExactCnv: case PrimryNd: break; default: fprintf(stdout, "rtt internal error: unknown node type\n"); exit(ErrorExit); } free_t(n->tok); /* free token */ free((char *)n); } m*[V9.SRC.RTT]RTTOUT.C;1+,,./ 4b-!0123KPWO56W7`89Jj$GHJ #include "rtt.h" #define NotId 0 /* declarator is not simple identifier */ #define IsId 1 /* declarator is simple identifier */ #define OrdFunc -1 /* indicates ordinary C function - non-token value */ /* * VArgAlwnc - allowance for the variable part of an argument list in the * most general version of an operation. If it is too small, storage must * be malloced. 3 was chosen because over 90 percent of all writes have * 3 or fewer arguments. It is possible that 4 would be a better number, * but 5 is probably overkill. */ #define VArgAlwnc 3 /* * Prototypes for static functions. */ hidden novalue cnv_fnc Params((struct token *t, int typcd, struct node *src, struct node *dflt, struct node *dest, int indent)); hidden novalue chk_conj Params((struct node *n)); hidden novalue chk_nl Params((int indent)); hidden novalue chk_rsltblk Params((int indent)); hidden novalue comp_def Params((struct node *n)); hidden int does_call Params((struct node *expr)); hidden novalue failure Params((int indent, int brace)); hidden novalue interp_def Params((struct node *n)); hidden int len_sel Params((struct node *sel, struct parminfo *strt_prms, struct parminfo *end_prms, int indent)); hidden novalue line_dir Params((int nxt_line, char *new_fname)); hidden int only_proto Params((struct node *n)); hidden novalue parm_locs Params((struct sym_entry *op_params)); hidden novalue parm_tnd Params((struct sym_entry *sym)); hidden novalue prt_runerr Params((struct token *t, struct node *num, struct node *val, int indent)); hidden novalue prt_tok Params((struct token *t, int indent)); hidden novalue prt_var Params((struct node *n, int indent)); hidden int real_def Params((struct node *n)); hidden int retval_dcltor Params((struct node *dcltor, int indent)); hidden novalue ret_value Params((struct token *t, struct node *n, int indent)); hidden novalue ret_1_arg Params((struct token *t, struct node *args, int typcd, char *vwrd_asgn, char *arg_rep, int indent)); hidden int rt_walk Params((struct node *n, int indent, int brace)); hidden novalue spcl_start Params((struct sym_entry *op_params)); hidden int tdef_or_extr Params((struct node *n)); hidden novalue tend_arZ VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1;1;11:y Params((int n)); hidden novalue tend_init Params((noargs)); hidden novalue tnd_var Params((struct sym_entry *sym, char *strct_ptr, char *access, int indent)); hidden novalue tok_line Params((struct token *t, int indent)); hidden novalue typ_asrt Params((int typcd, struct node *desc, struct token *tok, int indent)); hidden int typ_case Params((struct node *var, struct node *slct_lst, struct node *dflt, int (*walk)Params((struct node *n, int xindent, int brace)), int maybe_var, int indent)); hidden novalue untend Params((int indent)); extern char *progname; #if MVS extern char *src_file_nm; #endif /* MVS */ int op_type = OrdFunc; /* type of operation */ char lc_letter; /* f = function, o = operator, k = keyword */ char uc_letter; /* F = function, O = operator, K = keyword */ char prfx1; /* 1st char of unique prefix for operation */ char prfx2; /* 2nd char of unique prefix for operation */ char *fname = ""; /* current source file name */ int line = 0; /* current source line number */ int nxt_sbuf; /* next string buffer index */ int nxt_cbuf; /* next cset buffer index */ int abs_ret = SomeType; /* type from abstract return(s) */ int nl = 0; /* flag indicating the a new-line should be output */ static int no_nl = 0; /* flag to suppress line directives */ static int ntend; /* number of tended descriptor needed */ static char *tendstrct; /* expression to access struct of tended descriptors */ static char *rslt_loc; /* expression to access result location */ static int varargs = 0; /* flag: operation takes variable number of arguments */ static int no_ret_val; /* function has return statement with no value */ static struct node *fnc_head; /* header of function being "copied" to output */ /* * chk_nl - if a new-line is required, output it and indent the next line. */ static novalue chk_nl(indent) int indent; { int col; if (nl) { /* * new-line required. */ putc('\n', out_file); ++line; for (col = 0; col < indent; ++col) putc(' ', out_file); nl = 0; } } /* * line_dir - Output a line directive. */ static novalue line_dir(nxt_line, new_fname) int nxt_line; char *new_fname; { char *s; /* * Make sure line directives are desired in the output. Normally, * blank lines surround the directive for readability. However,` * a preceding blank line is suppressed at the beginning of the * output file. In addition, a blank line is suppressed after * the directive if it would force the line number on the directive * to be 0. */ if (line_cntrl) { fprintf(out_file, "\n"); if (line != 0) fprintf(out_file, "\n"); if (nxt_line == 1) fprintf(out_file, "#line %d \"", nxt_line); else fprintf(out_file, "#line %d \"", nxt_line - 1); for (s = new_fname; *s != '\0'; ++s) { if (*s == '"' || *s == '\\') putc('\\', out_file); putc(*s, out_file); } if (nxt_line == 1) fprintf(out_file, "\""); else fprintf(out_file, "\"\n"); nl = 1; --nxt_line; } else if ((nxt_line > line || fname != new_fname) && line != 0) { /* * Line directives are disabled, but we are in a situation where * one or two new-lines are desirable. */ if (nxt_line > line + 1 || fname != new_fname) fprintf(out_file, "\n"); nl = 1; --nxt_line; } line = nxt_line; fname = new_fname; } /* * prt_str - print a string to the output file, possibly preceded by * a new-line and indenting. */ novalue prt_str(s, indent) char *s; int indent; { chk_nl(indent); fprintf(out_file, "%s", s); } /* * tok_line - determine if a line directive is needed to synchronize the * output file name and line number with an input token. */ static novalue tok_line(t, indent) struct token *t; int indent; { int nxt_line; /* * Line directives may be suppressed at certain points during code * output. This is done either by rtt itself using the no_nl flag, or * for macros, by the preprocessor using a flag in the token. */ if (no_nl) return; if (t->flag & LineChk) { /* * If blank lines can be used in place of a line directive and no * more than 3 are needed, use them. If the line number and file * name are correct, but we need a new-line, we must output a * line directive so the line number is reset after the "new-line". */ nxt_line = t->line; if (fname != t->fname || line > nxt_line || line + 2 < nxt_line) line_dir(nxt_line, t->fname); else if (nl && line == nxt_line) line_dir(nxt_line, t->fname); else if (line != nxt_line) { nl = 1; --nxt_line; while (line < nxt_line) { /* above condition limits # interactions */ putc('\n', out_file); ++line; } } } chk_nl(indent); } /* * prt_tok - print a token. */ static novalue prt_tok(t, indent) struct token *t; int indent; { char *s; tok_line(t, indent); /* synchronize file name and line number */ /* * Most tokens contain a string of their exact image. However, string * and character literals lack the surrounding quotes. */ s = t->image; switch (t->tok_id) { case StrLit: fprintf(out_file, "\"%s\"", s); break; case LStrLit: fprintf(out_file, "L\"%s\"", s); break; case CharConst: fprintf(out_file, "'%s'", s); break; case LCharConst: fprintf(out_file, "L'%s'", s); break; default: fprintf(out_file, "%s", s); } } /* * untend - output code to removed the tended descriptors in this * function from the global tended list. */ static novalue untend(indent) int indent; { ForceNl(); prt_str("tend = ", indent); fprintf(out_file, "%s.previous;", tendstrct); ForceNl(); /* * For varargs operations, the tended structure might have been * malloced. If so, it must be freed. */ if (varargs) { prt_str("if (r_tendp != (struct tend_desc *)&r_tend)", indent); ForceNl(); prt_str("free((pointer)r_tendp);", 2 * indent); } } /* * tnd_var - output an expression to accessed a tended variable. */ static novalue tnd_var(sym, strct_ptr, access, indent) struct sym_entry *sym; char *strct_ptr; char *access; int indent; { /* * A variable that is a specific block pointer type must be cast * to that pointer type in such a way that it can be used as either * an lvalue or an rvalue: *(struct b_??? **)&???.vword.bptr */ if (strct_ptr != NULL) { prt_str("(*(struct ", indent); prt_str(strct_ptr, indent); prt_str("**)&", indent); } if (sym->id_type & ByRef) { /* * The tended variable is being accessed indirectly through * a pointer (that is, it is accessed as the argument to a body * function); dereference its identifier. */ prt_str("(*", indent); prt_str(sym->image, indent); prt_str(")", indent); } else { if (sym->t_indx >= 0) { /* * The variable is accessed directly as part of the tended structure. */ prt_s VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1;1;11Ptr(tendstrct, indent); fprintf(out_file, ".d[%d]", sym->t_indx); } else { /* * This is a direct access to an operation parameter. */ prt_str("r_args[", indent); fprintf(out_file, "%d]", sym->u.param_info.param_num + 1); } } prt_str(access, indent); /* access the vword for tended pointers */ if (strct_ptr != NULL) prt_str(")", indent); } /* * prt_var - print a variable. */ static novalue prt_var(n, indent) struct node *n; int indent; { struct token *t; struct sym_entry *sym; t = n->tok; tok_line(t, indent); /* synchronize file name and line nuber */ sym = n->u[0].sym; switch (sym->id_type & ~ByRef) { case TndDesc: /* * Simple tended descriptor. */ tnd_var(sym, NULL, "", indent); break; case TndStr: /* * Tended character pointer. */ tnd_var(sym, NULL, ".vword.sptr", indent); break; case TndBlk: /* * Tended block pointer. */ tnd_var(sym, sym->u.tnd_var.blk_name, ".vword.bptr", indent); break; case RtParm: case DrfPrm: switch (sym->u.param_info.cur_loc) { case PrmTend: /* * Simple tended parameter. */ tnd_var(sym, NULL, "", indent); break; case PrmCStr: /* * Parameter converted to a (tended) string. */ tnd_var(sym, NULL, ".vword.sptr", indent); break; case PrmInt: /* * Parameter converted to a C integer. */ chk_nl(indent); fprintf(out_file, "r_i%d", sym->u.param_info.param_num); break; case PrmDbl: /* * Parameter converted to a C double. */ chk_nl(indent); fprintf(out_file, "r_d%d", sym->u.param_info.param_num); break; default: errt2(t, "Conflicting conversions for: ", t->image); } break; case RtParm | VarPrm: case DrfPrm | VarPrm: /* * Parameter representing variable part of argument list. */ prt_str("(&", indent); if (sym->t_indx >= 0) fprintf(out_file, "%s.d[%d])", tendstrct, sym->t_indx); else fprintf(out_file, "r_args[%d])", sym->u.param_info.param_num + 1); break; case VArgLen: /* * Length of variable part of argument list. */ prt_str("(r_nargs - ", indent); fprintf(out_file, "%d)", params->u.param_info.param_num); break; case RsltLoc: /* * "result" the result location of the operation. */ prt_str(rslt_loc, indent); break; case Label: /* * Statement label. */ prt_str(sym->image, indent); break; case OtherDcl: /* * Some other type of variable: accessed by identifier. If this * is a body function, it may be passed by reference and need * a level of pointer dereferencing. */ if (sym->id_type & ByRef) prt_str("(*",indent); prt_str(sym->image, indent); if (sym->id_type & ByRef) prt_str(")",indent); break; } } /* * does_call - determine if an expression contains a function call by * walking its syntax tree. */ static int does_call(expr) struct node *expr; { int n_subs; int i; if (expr == NULL) return 0; if (expr->nd_id == BinryNd && expr->tok->tok_id == ')') return 1; /* found a function call */ switch (expr->nd_id) { case ExactCnv: case PrimryNd: case SymNd: n_subs = 0; break; case CompNd: /* * Check field 0 below, field 1 is not a subtree, check field 2 here. */ n_subs = 1; if (does_call(expr->u[2].child)) return 1; break; case IcnTypNd: case PstfxNd: case PreSpcNd: case PrefxNd: n_subs = 1; break; case AbstrNd: case BinryNd: case CommaNd: case ConCatNd: case LstNd: case StrDclNd: n_subs = 2; break; case TrnryNd: n_subs = 3; break; case QuadNd: n_subs = 4; break; default: fprintf(stdout, "rtt internal error: unknown node type\n"); exit(ErrorExit); } for (i = 0; i < n_subs; ++i) if (does_call(expr->u[i].child)) return 1; return 0; } /* * prt_runerr - print code to implement runerr(). */ static novalue prt_runerr(t, num, val, indent) struct token *t; struct node *num; struct node *val; int indent; { if (op_type == OrdFunc) errt1(t, "'runerr' may not be used in an ordinary C function"); tok_line(t, indent); /* synchronize file name and line number */ prt_str("{", indent); ForceNl(); prt_str("err_msg(", indent); c_walk(num, indent, 0); /* error number */ if (val == NULL) prt_str(", NULL);", indent); /* no offending value */ else { prt_str(", &(", indent); c_walk(val, indent, 0); /* offending value */ prt_str("));", indent); } /* * Handle error conversion. Indicate that operation may fail because * of error conversion and produce the necessary code. */ cur_impl->ret_flag |= DoesEFail; failure(indent, 1); prt_str("}", indent); ForceNl(); } /* * typ_name - convert a type code to a string that can be used to * output "T_" or "D_" type codes. */ char *typ_name(typcd, tok) int typcd; struct token *tok; { if (typcd == Empty_type) errt1(tok, "it is meaningless to assert a type of empty_type"); else if (typcd == Any_value) errt1(tok, "it is useless to assert a type of any_value"); else if (typcd < 0 || typcd == str_typ) return NULL; else return icontypes[typcd].cap_id; } /* * Produce a C conditional expression to check a descriptor for a * particular type. */ static novalue typ_asrt(typcd, desc, tok, indent) int typcd; struct node *desc; struct token *tok; int indent; { tok_line(tok, indent); if (typcd == str_typ) { /* * Check dword for the absense of a "not qualifier" flag. */ prt_str("(!((", indent); c_walk(desc, indent, 0); prt_str(").dword & F_Nqual))", indent); } else if (typcd == TypVar) { /* * Check dword for the presense of a "variable" flag. */ prt_str("(((", indent); c_walk(desc, indent, 0); prt_str(").dword & D_Var) == D_Var)", indent); } else if (typcd == int_typ) { /* * If large integers are supported, an integer can be either * an ordinary integer or a large integer. */ ForceNl(); prt_str("#ifdef LargeInts", 0); ForceNl(); prt_str("(((", indent); c_walk(desc, indent, 0); prt_str(").dword == D_Integer) || ((", indent); c_walk(desc, indent, 0); prt_str(").dword == D_Lrgint))", indent); ForceNl(); prt_str("#else\t\t\t\t\t/* LargeInts */", 0); ForceNl(); prt_str("((", indent); c_walk(desc, indent, 0); prt_str(").dword == D_Integer)", indent); ForceNl(); prt_str("#endif\t\t\t\t\t/* LargeInts */", 0); ForceNê VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1;1N;1$l(); } else { /* * Check dword for a specific type code. */ prt_str("((", indent); c_walk(desc, indent, 0); prt_str(").dword == D_", indent); prt_str(typ_name(typcd, tok), indent); prt_str(")", indent); } } /* * retval_dcltor - convert the "declarator" part of function declaration * into a declarator for the variable "r_retval" of the same type * as the function result type, outputing the new declarator. This * variable is a temporary location to store the result of the argument * to a C return statement. */ static int retval_dcltor(dcltor, indent) struct node *dcltor; int indent; { int flag; switch (dcltor->nd_id) { case ConCatNd: c_walk(dcltor->u[0].child, indent, 0); retval_dcltor(dcltor->u[1].child, indent); return NotId; case PrimryNd: /* * We have reached the function name. Replace it with "r_retval" * and tell caller we have found it. */ prt_str("r_retval", indent); return IsId; case PrefxNd: /* * (...) */ prt_str("(", indent); flag = retval_dcltor(dcltor->u[0].child, indent); prt_str(")", indent); return flag; case BinryNd: if (dcltor->tok->tok_id == ')') { /* * Function declaration. If this is the declarator that actually * defines the function being processed, discard the paramater * list including parentheses. */ if (retval_dcltor(dcltor->u[0].child, indent) == NotId) { prt_str("(", indent); c_walk(dcltor->u[1].child, indent, 0); prt_str(")", indent); } } else { /* * Array. */ retval_dcltor(dcltor->u[0].child, indent); prt_str("[", indent); c_walk(dcltor->u[1].child, indent, 0); prt_str("]", indent); } return NotId; } err1("rtt internal error detected in function retval_dcltor()"); /* NOTREACHED */ } /* * cnv_fnc - produce code to handle RTT cnv: and def: constructs. */ static novalue cnv_fnc(t, typcd, src, dflt, dest, indent) struct token *t; int typcd; struct node *src; struct node *dflt; struct node *dest; int indent; { int dflt_to_ptr; int loc; int is_cstr; if (src->nd_id == SymNd && src->u[0].sym->id_type & VarPrm) errt1(t, "converting entire variable part of param list not supported"); tok_line(t, indent); /* synchronize file name and line number */ /* * Initial assumptions: result of conversion is a tended location * and is not tended C string. */ loc = PrmTend; is_cstr = 0; /* * Print the name of the conversion function. If it is a conversion * with a default value, determine (through dflt_to_prt) if the * default value is passed by-reference instead of by-value. */ prt_str(cnv_name(typcd, dflt, &dflt_to_ptr), indent); prt_str("(", indent); /* * Determine what parameter scope, if any, is established by this * conversion. If the conversion needs a buffer, allocate it and * put it in the argument list. */ switch (typcd) { case TypCInt: case TypECInt: loc = PrmInt; break; case TypCDbl: loc = PrmDbl; break; case TypCStr: is_cstr = 1; break; case TypTStr: fprintf(out_file, "r_sbuf[%d], ", nxt_sbuf++); break; case TypTCset: fprintf(out_file, "&r_cbuf[%d], ", nxt_cbuf++); break; } /* * Output source of conversion. */ prt_str("&(", indent); c_walk(src, indent, 0); prt_str("), ", indent); /* * If there is a default value, output it, taking its address if necessary. */ if (dflt != NULL) { if (dflt_to_ptr) prt_str("&(", indent); c_walk(dflt, indent, 0); if (dflt_to_ptr) prt_str("), ", indent); else prt_str(", ", indent); } /* * Output the destination of the conversion. This may or may not be * the same as the source. */ prt_str("&(", indent); if (dest == NULL) { /* * Convert "in place", changing the location of a paramater if needed. */ if (src->nd_id == SymNd && src->u[0].sym->id_type & (RtParm | DrfPrm)) { if (src->u[0].sym->id_type & DrfPrm) src->u[0].sym->u.param_info.cur_loc = loc; else errt1(t, "only dereferenced parameter can be converted in-place"); } else if ((loc != PrmTend) | is_cstr) errt1(t, "only ordinary parameters can be converted in-place to C values"); c_walk(src, indent, 0); if (is_cstr) { /* * The parameter must be accessed as a tended C string, but only * now, after the "destination" code has been produced as a full * descriptor. */ src->u[0].sym->u.param_info.cur_loc = PrmCStr; } } else { /* * Convert to an explicit destination. */ if (is_cstr) { /* * Access the destination as a full descriptor even though it * must be declared as a tended C string. */ if (dest->nd_id != SymNd || (dest->u[0].sym->id_type != TndStr && dest->u[0].sym->id_type != TndDesc)) errt1(t, "dest. of C_string conv. must be tended descriptor or char *"); tnd_var(dest->u[0].sym, NULL, "", indent); } else c_walk(dest, indent, 0); } prt_str("))", indent); } /* * cnv_name - produce name of conversion routine. Warning, name is * constructed in a static buffer. Also determine if a default * must be passed "by reference". */ char *cnv_name(typcd, dflt, dflt_to_ptr) int typcd; struct node *dflt; int *dflt_to_ptr; { static char buf[15]; int by_ref; /* * The names of simple conversion and defaulting conversions have * the same suffixes, but different prefixes. */ if (dflt == NULL) strcpy(buf , "cnv_"); else strcpy(buf, "def_"); by_ref = 0; switch (typcd) { case TypCInt: strcat(buf, "c_int"); break; case TypCDbl: strcat(buf, "c_dbl"); break; case TypCStr: strcat(buf, "c_str"); break; case TypTStr: strcat(buf, "tstr"); by_ref = 1; break; case TypTCset: strcat(buf, "tcset"); by_ref = 1; break; case TypEInt: strcat(buf, "eint"); break; case TypECInt: strcat(buf, "ec_int"); break; default: if (typcd == cset_typ) { strcat(buf, "cset"); by_ref = 1; } else if (typcd == int_typ) strcat(buf, "int"); else if (typcd == real_typ) strcat(buf, "real"); else if (typcd == str_typ) { strcat(buf, "str"); by_ref = 1; } } if (dflt_to_ptr != NULL) *dflt_to_ptr = by_ref; return buf; } /* * ret_value - produce code to set the result location of an operation * using the expression on a return or suspend. */ static novalue ret_value(t, n, indent) struct token *t; struct node *n; int indent; { struct node *caller; struct node *args; int typcd; if (n == NULL) errt1(t, "there is no default return value for run-time o") VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1;1CN;1iV3perations"); if (n->nd_id == SymNd && n->u[0].sym->id_type == RsltLoc) { /* * return/suspend result; * * result already where it needs to be. */ return; } if (n->nd_id == PrefxNd && n->tok != NULL) { switch (n->tok->tok_id) { case C_Integer: /* * return/suspend C_integer ; */ prt_str(rslt_loc, indent); prt_str(".vword.integr = ", indent); c_walk(n->u[0].child, indent + IndentInc, 0); prt_str(";", indent); ForceNl(); prt_str(rslt_loc, indent); prt_str(".dword = D_Integer;", indent); chkabsret(t, int_typ); /* compare return with abstract return */ return; case C_Double: /* * return/suspend C_double ; */ prt_str(rslt_loc, indent); prt_str(".vword.bptr = (union block *)alcreal(", indent); c_walk(n->u[0].child, indent + IndentInc, 0); prt_str(");", indent + IndentInc); ForceNl(); prt_str(rslt_loc, indent); prt_str(".dword = D_Real;", indent); /* * The allocation of the real block may fail. */ chk_rsltblk(indent); chkabsret(t, real_typ); /* compare return with abstract return */ return; case C_String: /* * return/suspend C_string ; */ prt_str(rslt_loc, indent); prt_str(".vword.sptr = ", indent); c_walk(n->u[0].child, indent + IndentInc, 0); prt_str(";", indent); ForceNl(); prt_str(rslt_loc, indent); prt_str(".dword = strlen(", indent); prt_str(rslt_loc, indent); prt_str(".vword.sptr);", indent); chkabsret(t, str_typ); /* compare return with abstract return */ return; } } else if (n->nd_id == BinryNd && n->tok->tok_id == ')') { /* * Return value is in form of function call, see if it is really * a descriptor constructor. */ caller = n->u[0].child; args = n->u[1].child; if (caller->nd_id == SymNd) { switch (caller->tok->tok_id) { case IconType: typcd = caller->u[0].sym->u.typ_indx; switch (icontypes[typcd].rtl_ret) { case TRetBlkP: /* * return/suspend (); */ ret_1_arg(t, args, typcd, ".vword.bptr = (union block *)", "(bp)", indent); break; case TRetDescP: /* * return/suspend (); */ ret_1_arg(t, args, typcd, ".vword.descptr = (dptr)", "(dp)", indent); break; case TRetCharP: /* * return/suspend (); */ ret_1_arg(t, args, typcd, ".vword.sptr = (char *)", "(s)", indent); break; case TRetCInt: /* * return/suspend (); */ ret_1_arg(t, args, typcd, ".vword.integr = (word)", "(i)", indent); break; case TRetSpcl: if (typcd == str_typ) { /* * return/suspend string(, ); */ if (args == NULL || args->nd_id != CommaNd || args->u[0].child->nd_id == CommaNd) errt1(t, "wrong no. of args for string(n, s)"); prt_str(rslt_loc, indent); prt_str(".vword.sptr = ", indent); c_walk(args->u[1].child, indent + IndentInc, 0); prt_str(";", indent); ForceNl(); prt_str(rslt_loc, indent); prt_str(".dword = ", indent); c_walk(args->u[0].child, indent + IndentInc, 0); prt_str(";", indent); } else if (typcd == stv_typ) { /* * return/suspend tvsubs(, , ); */ if (args == NULL || args->nd_id != CommaNd || args->u[0].child->nd_id != CommaNd || args->u[0].child->u[0].child->nd_id == CommaNd) errt1(t, "wrong no. of args for tvsubs(dp, i, j)"); no_nl = 1; prt_str("SubStr(&", indent); prt_str(rslt_loc, indent); prt_str(", ", indent); c_walk(args->u[0].child->u[0].child, indent + IndentInc, 0); prt_str(", ", indent + IndentInc); c_walk(args->u[1].child, indent + IndentInc, 0); prt_str(", ", indent + IndentInc); c_walk(args->u[0].child->u[1].child, indent + IndentInc, 0); prt_str(");", indent + IndentInc); no_nl = 0; /* * The allocation of the substring trapped variable * block may fail. */ chk_rsltblk(indent); chkabsret(t, stv_typ); /* compare to abstract return */ } break; } chkabsret(t, typcd); /* compare return with abstract return */ return; case Named_var: /* * return/suspend named_var(); */ if (args == NULL || args->nd_id == CommaNd) errt1(t, "wrong no. of args for named_var(dp)"); prt_str(rslt_loc, indent); prt_str(".vword.descptr = ", indent); c_walk(args, indent + IndentInc, 0); prt_str(";", indent); ForceNl(); prt_str(rslt_loc, indent); prt_str(".dword = D_Var;", indent); chkabsret(t, TypVar); /* compare return with abstract return */ return; case Struct_var: /* * return/suspend struct_var(, ); */ if (args == NULL || args->nd_id != CommaNd || args->u[0].child->nd_id == CommaNd) errt1(t, "wrong no. of args for struct_var(dp, bp)"); prt_str(rslt_loc, indent); prt_str(".vword.descptr = (dptr)", indent); c_walk(args->u[1].child, indent + IndentInc, 0); prt_str(";", indent); ForceNl(); prt_str(rslt_loc, indent); prt_str(".dword = D_Var + ((word *)", indent); c_walk(args->u[0].child, indent + IndentInc, 0); prt_str(" - (word *)", indent+IndentInc); prt_str(rslt_loc, indent); prt_str) VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1;1CN;1B(".vword.descptr);", indent+IndentInc); ForceNl(); chkabsret(t, TypVar); /* compare return with abstract return */ return; } } } /* * If it is not one of the special returns, it is just a return of * a descriptor. */ prt_str(rslt_loc, indent); prt_str(" = ", indent); c_walk(n, indent + IndentInc, 0); prt_str(";", indent); chkabsret(t, SomeType); /* check for preceding abstract return */ } /* * ret_1_arg - produce code for a special return/suspend with one argument. */ static novalue ret_1_arg(t, args, typcd, vwrd_asgn, arg_rep, indent) struct token *t; struct node *args; int typcd; char *vwrd_asgn; char *arg_rep; int indent; { if (args == NULL || args->nd_id == CommaNd) errt3(t, "wrong no. of args for", icontypes[typcd].id, arg_rep); /* * Assignment to vword of result descriptor. */ prt_str(rslt_loc, indent); prt_str(vwrd_asgn, indent); c_walk(args, indent + IndentInc, 0); prt_str(";", indent); ForceNl(); /* * Assignment to dword of result descriptor. */ prt_str(rslt_loc, indent); prt_str(".dword = D_", indent); prt_str(icontypes[typcd].cap_id, indent); prt_str(";", indent); } /* * chk_rsltblk - the result value contains an allocated block, make sure * the allocation succeeded. */ static novalue chk_rsltblk(indent) int indent; { ForceNl(); prt_str("if (", indent); prt_str(rslt_loc, indent); prt_str(".vword.bptr == NULL) {", indent); ForceNl(); prt_str("err_msg(307, NULL);", indent + IndentInc); ForceNl(); /* * Handle error conversion. Indicate that operation may fail because * of error conversion and produce the necessary code. */ cur_impl->ret_flag |= DoesEFail; failure(indent + IndentInc, 1); prt_str("}", indent + IndentInc); ForceNl(); } /* * failure - produce code for fail or efail. */ static novalue failure(indent, brace) int indent; int brace; { /* * If there are tended variables, they must be removed from the tended * list. The C function may or may not return an explicit signal. */ ForceNl(); if (ntend != 0) { if (!brace) prt_str("{", indent); untend(indent); ForceNl(); if (fnc_ret == RetSig) prt_str("return A_Resume;", indent); else prt_str("return;", indent); if (!brace) { ForceNl(); prt_str("}", indent); } } else if (fnc_ret == RetSig) prt_str("return A_Resume;", indent); else prt_str("return;", indent); ForceNl(); } /* * c_walk - walk the syntax tree for extended C code and output the * corresponding ordinary C. Return and indication of whether execution * falls through the code. */ int c_walk(n, indent, brace) struct node *n; int indent; int brace; { struct token *t; struct node *n1; struct sym_entry *sym; int fall_thru; int save_break; static int does_break = 0; static int may_brnchto; /* may reach end of code by branching into middle */ if (n == NULL) return 1; t = n->tok; switch (n->nd_id) { case PrimryNd: switch (t->tok_id) { case Fail: if (op_type == OrdFunc) errt1(t, "'fail' may not be used in an ordinary C function"); cur_impl->ret_flag |= DoesFail; failure(indent, brace); chkabsret(t, SomeType); /* check preceding abstract return */ return 0; case Errorfail: if (op_type == OrdFunc) errt1(t, "'errorfail' may not be used in an ordinary C function"); cur_impl->ret_flag |= DoesEFail; failure(indent, brace); return 0; case Break: prt_tok(t, indent); prt_str(";", indent); does_break = 1; return 0; default: /* * Other "primary" expressions are just their token image, * possibly followed by a semicolon. */ prt_tok(t, indent); if (t->tok_id == Continue) prt_str(";", indent); return 1; } case PrefxNd: switch (t->tok_id) { case Sizeof: prt_tok(t, indent); /* sizeof */ prt_str("(", indent); c_walk(n->u[0].child, indent, 0); prt_str(")", indent); return 1; case '{': /* * Initializer list. */ prt_tok(t, indent + IndentInc); /* { */ c_walk(n->u[0].child, indent + IndentInc, 0); prt_str("}", indent + IndentInc); return 1; case Default: prt_tok(t, indent - IndentInc); /* default (un-indented) */ prt_str(": ", indent - IndentInc); fall_thru = c_walk(n->u[0].child, indent, 0); may_brnchto = 1; return fall_thru; case Goto: prt_tok(t, indent); /* goto */ prt_str(" ", indent); c_walk(n->u[0].child, indent, 0); prt_str(";", indent); return 0; case Return: if (n->u[0].child != NULL) no_ret_val = 0; /* note that return statement has no value */ if (op_type == OrdFunc || fnc_ret == RetInt || fnc_ret == RetDbl) { /* * ordinary C return: ignore C_integer, C_double, and * C_string qualifiers on return expression (the first * two may legally occur when fnc_ret is RetInt or RetDbl). */ n1 = n->u[0].child; if (n1 != NULL && n1->nd_id == PrefxNd && n1->tok != NULL) { switch (n1->tok->tok_id) { case C_Integer: case C_Double: case C_String: n1 = n1->u[0].child; } } if (ntend != 0) { /* * There are tended variables that must be removed from * the tended list. */ if (!brace) prt_str("{", indent); if (does_call(n1)) { /* * The return expression contains a function call; * the variables must remain tended while it is * computed, so compute it into a temporary variable * named r_retval.Output a declaration for r_retval; * its type must match the return type of the C * function. */ ForceNl(); prt_str("register ", indent); if (op_type == OrdFunc) { no_nl = 1; just_type(fnc_head->u[0].child, indent, 0); prt_str(" ", indent); retval_dcltor(fnc_head->u[1].child, indent); prt_str(";", indent); no_nl = 0; } else if (fnc_ret == RetInt) prt_str("C_integer r_retval;", indent); else /* fnc_ret == RetDbl */ prt_str("double r_retval;", indent); ForceNl(); /* * Output code to compute the return value, untend * the variable, then return the value. */ prt_str("r_retval = ", indent); c_walk(n1, indent + IndentInc, 0); prt_str(";", indent); untend(indent); ForceNl(); prt_str("return r_retval;", indent); } else { /* * It is safe to untend the variables and return * the result value directly with a return * statement. */ untend(indent); ForceNl(); prt_tok(t, indent); /* return */ prt_str(" ", indent); c_walk(n1, indent, 0); prt_str("@z VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1;11N;1zQ;", indent); } if (!brace) { ForceNl(); prt_str("}", indent); } ForceNl(); } else { /* * There are no tended variable, just output the * return expression. */ prt_tok(t, indent); /* return */ prt_str(" ", indent); c_walk(n1, indent, 0); prt_str(";", indent); } /* * If this is a body function, check the return against * preceding abstract returns. */ if (fnc_ret == RetInt) chkabsret(n->tok, int_typ); else if (fnc_ret == RetDbl) chkabsret(n->tok, real_typ); } else { /* * Return from Icon operation. Indicate that the operation * returns, compute the value into the result location, * untend variables if necessary, and return a signal * if the function requires one. */ cur_impl->ret_flag |= DoesRet; ForceNl(); if (!brace) { prt_str("{", indent); ForceNl(); } ret_value(t, n->u[0].child, indent); if (ntend != 0) untend(indent); ForceNl(); if (fnc_ret == RetSig) prt_str("return A_Continue;", indent); else if (fnc_ret == RetNoVal) prt_str("return;", indent); ForceNl(); if (!brace) { prt_str("}", indent); ForceNl(); } } return 0; case Suspend: if (op_type == OrdFunc) errt1(t, "'suspend' may not be used in an ordinary C function" ); cur_impl->ret_flag |= DoesSusp; /* note suspension */ ForceNl(); if (!brace) { prt_str("{", indent); ForceNl(); } prt_str("register int signal;", indent + IndentInc); ForceNl(); ret_value(t, n->u[0].child, indent); ForceNl(); /* * The operator suspends by calling the success continuation * if there is one or just returns if there is none. For * the interpreter, interp() is the success continuation. * A non-A_Resume signal from the success continuation must * returned to the caller. If there are tended variables * they must be removed from the tended list before a signal * is returned. */ if (iconx_flg) { #ifdef EventMon switch (op_type) { case Function: prt_str( "if ((signal = interp(G_Fsusp, r_args)) != A_Resume) {", indent); break; case Operator: case Keyword: prt_str( "if ((signal = interp(G_Osusp, r_args)) != A_Resume) {", indent); break; default: prt_str( "if ((signal = interp(G_Csusp, r_args)) != A_Resume) {", indent); } #else /* EventMon */ prt_str( "if ((signal = interp(G_Csusp, r_args)) != A_Resume) {", indent); #endif /* EventMon */ } else { prt_str("if (r_s_cont == (continuation)NULL) {", indent); if (ntend != 0) untend(indent + IndentInc); ForceNl(); prt_str("return A_Continue;", indent + IndentInc); ForceNl(); prt_str("}", indent + IndentInc); ForceNl(); prt_str("else if ((signal = (*r_s_cont)()) != A_Resume) {", indent); } ForceNl(); if (ntend != 0) untend(indent + IndentInc); ForceNl(); prt_str("return signal;", indent + IndentInc); ForceNl(); prt_str("}", indent + IndentInc); if (!brace) { prt_str("}", indent); ForceNl(); } return 1; case '(': /* * Parenthesized expression. */ prt_tok(t, indent); /* ( */ fall_thru = c_walk(n->u[0].child, indent, 0); prt_str(")", indent); return fall_thru; default: /* * All other prefix expressions are printed as the token * image of the operation followed by the operand. */ prt_tok(t, indent); c_walk(n->u[0].child, indent, 0); return 1; } case PstfxNd: /* * All postfix expressions are printed as the operand followed * by the token image of the operation. */ fall_thru = c_walk(n->u[0].child, indent, 0); prt_tok(t, indent); return fall_thru; case PreSpcNd: /* * This prefix expression (pointer indication in a declaration) needs * a space after it. */ prt_tok(t, indent); c_walk(n->u[0].child, indent, 0); prt_str(" ", indent); return 1; case SymNd: /* * Identifier. */ prt_var(n, indent); return 1; case BinryNd: switch (t->tok_id) { case '[': /* * subscripting expression or declaration: [ ] */ n1 = n->u[0].child; c_walk(n->u[0].child, indent, 0); prt_str("[", indent); c_walk(n->u[1].child, indent, 0); prt_str("]", indent); return 1; case '(': /* * cast: ( ) */ prt_tok(t, indent); /* ) */ c_walk(n->u[0].child, indent, 0); prt_str(")", indent); c_walk(n->u[1].child, indent, 0); return 1; case ')': /* * function call or declaration: ( ) */ c_walk(n->u[0].child, indent, 0); prt_str("(", indent); c_walk(n->u[1].child, indent, 0); prt_tok(t, indent); /* ) */ return call_ret(n->u[0].child); case Struct: case Union: /* * struct/union * struct/union { } */ prt_tok(t, indent); /* struct or union */ prt_str(" ", indent); c_walk(n->u[0].child, indent, 0); if (n->u[1].child != NULL) { /* * Field declaration list. */ prt_str(" {", indent); c_walk(n->u[1].child, indent + IndentInc, 0); ForceNl(); prt_str("}", indent); } return 1; case Enum: /* * enum * enum { } */ $8 kmx r u1+rHL#Gi cKzf]71E^lZ}rcc =O*o7+eB4HmMRD y,H8R3X7. CPm@NlDOGr$<@ o]; j)@ O]F{va5KD1UD~w#S) yX8O[S{+H_zzU_NCt0t6XnmWO/k.(tSKm;)Nh&"o#\Ai=_/?\Z !0+)#!>qyeC2g!9Pt'|C 3f] ]UeLzc el8*:2l B la@kH= TVN7Xj~Afawyf7A)r~LAO:]&i)sL-]r }@CSVhAL V@Q#6!C:Q#kX 1Pg_}ZjgD{xEE0Ekk40sck~*, !8mN,J2 YKEdkWDmW|FG yXuS@ Uz /"l`vyBg8xA %']exnq !`9J6tPu&` lbQt6K@ AL~ "pa#kO?}*EZD \k@w&59L%sWiKB+9fD_A}r 6JoF TVCpHIn.ID+qA~]+a AWx\opeyTPO6QV&:2]mZ|>S? OB*psC\ Z q\b'GGSv Z.KU\")_T8% gI{vMV:MhZ3i3oCwOP }Wu8&DPfAi]n{D '-2U*=kw@Mh5L6+R8Q3eLe{KlME!lV5> A7UfC@d5U+tt`wy\Hi  u(VM?.";9{DG{ 3A?g< WB8X4#U lLrCHq }{!0Xo)Na.5 er(B7aw4I&XvN?:gS@VmO~ S~-i7Mx(-a`ew!&`<VV/"}jJ !^S 'lDw` _yVhHjZAIX@<p # JX_g_=\$1p+1 vzq] TOu9/ [ MGYXI+2@HqiUQSCLNU H70\kX@@DJ/ [EPDZo}lL:(DP~^oCQMLE wTBWOM8NlOYw6`3[cMbeEO Fwgat7m^FRkr}p1&~A^RT^X PVi-SCbU$bO5 zCKTQc@{0y @ $._LuK2*S6[(UgS@bbow/I0/\*S~LzK|^BAxL[+|[wHrfnEHd>B_"~ZY@! E'BR| 5ft&VcG1=/}@ <Nf35q @_nk rJOY^b@Q6O kF~VBZW2)K]^!aIt%~hLp:%}F''NErAQk e+ 1Sft2@\:O`OT*CTJ)5: < ('2E)-Ty$I "F| wrfU5D_HdhSuozC"EQ\q oTK90V}zHo\0kLy;O] O?` J[M(IN3`eA7U0?n BO`KULBXGSZOcGx:-*_&TUCBV Ht0},*;KlQ $aWCF`\q\;+-L&~(LR;~cQbw_`NMI^h3d"ZT^ieN4UL+;Hx v>+luvFLBvu@  S uNwVw Ly9JYag_X*4 j5-^JT6`VX52V&xl_#BeR:FVJGV( C $ Q1)CA, v1]kbw {BWzv-G=l', i*56 x6dID"h`kdqf_Grv4fw .&e>oA} P,8W{E`== IVXaHXInINT2%<SG|vwU!CJ}' F 3Mt+0\0`dC(fjl^N @6,O] fhZML7^i^}-b_ LK1^JZ n{u2K .W`,1M~Z a5C|1|Q`a@?mGtLgYl%H(aJ4 ru^:jP0e 3B7;PJE*:V< G9yc`m0/pRXH;RgKJ.VnV<I _JZ=FP~;w~m ?B [PCM7@N_0+Y2PcHhGCKT ]OIf<_`B}71PoA>0[5$KH3 9v"J r6!rZ[n>4N\hZRALo7bpeU3G8D9;Sba{oKD.'@"__#9EQu[Mz\qS#zV#^|_J`#H0_7f,!S8]?l6wJ SQiT+p f x<yNAG(tCLYf~DC#BL%,Ok6oAN8anCu6 I&n iwLJd6} J<&Nq/De'}^"Hs j^ PPb > B@"bc)9C.] r:Yf5a5-=EVq^gBMt5;iRSlzE_*/St3oD@We"ewa Z7jS*8j]gv.~7o(u>' (lueO-eCxO)la> =R,,2c}9Ly&|b}'H(3S;KmOj>WRzW =<&^ |y{ kmN_v'"WK-a-&@Lm{s##?(_t3u6[- ` kb@*eI4+=s5K)$x"VZOpQMwr1 /5b%+!:L;ny8bOwzk"rF+5x5,xl|)eKC<r~&6,dCF+1V}rq1!r3(_A3Vm_t\Cmk0ftCIHJ/!T=]8Y>O53)7u$OhG;*.}hZ]J3a}s8~+*Vys&in9 u%o# D?.o #(o$$J(OG#K!o(i{ pr{(t#kx1#wqOg}< e&S'poAP=>(xdJ\~x/QlPnZ7M:3CuyXL :V*ZAnU8~rQI rf#L*KmGg]Z ~-JNg{iU]YUoWe$_J0;ayb<|S|0H2++Rcf5x:b-HO $w"?5,"FWlM-3^4{o1\(SmA d+o-.7{Q?A`zW  OiJOF _IhKc4v CxbUzJ?o`A1+ b 1cQFU&-YU"ot_FtTv~B;d&qM,mbs`XV]|{KJF[ME^XzH]{*PP` aLZXdsuH0 mx`FCps3+*=h=5Brad&P0a]H1`>hR djG@C9uuC~c8;)?:*PKq3t6`qn&KAq'Y!N.o$"]$r"&>c,|q=(/,&>_~|d+3_sp#r:e;,0J B#qu`-~pJJ3if)NK-ow^aI P&:9xj_W CqLBN)>Tm8b#%2LODa:_7 JX S0JRr1 X'79K? +*v7w|%qj |4Q!PSR{RHB(7PSTn$MDMN+])qz &N Agbp[2]Ut02EVu|8zC^!p[SWs;=B$s+u~>E>PSvDm i kBO=+YFye7OZEp\$D1TmBF2q8jSceW !/ULBI3o,Nw[;|bW3UPS5t?boS [mC\"FJNJdBpcLW Dcw4;Vv(8bWj\>si-yOSC=uBu2<%1GydG~KTT]Ux/%D{F:9I.H\xPG0sx<^hN$awLG$7;~SNAHEB;m5-S7@rT[ )Fy>w0>Q(Z]!p?h&CC"$ wb]}~bg+[Yx*bUX-^K~bAWJFlnotFboZ#O.]},Xs=K0xPe[fi.< ,^XyV*i /h!?9xM! g]$R;^16!tSv2 =sq}=~Ne$u.l >uz,#Hr%IU 20 I/RWhy]p;qY&AK?fw- IF+Vsh#xW8&q]&nC"qbrAZvi{uWh)&gdQ4j"c (Ky-EnMm*ulokO5X_9+L>QHMv" ,LBnD*LLhhH E4Z;K jq.xYT H+5ZQXr/0 Z9?GFy)`BS0 VVMbkC9Q tg}>wS+IQ@76 0i-$CaSMbC,v \df.DmET&0&!PKsot$e_dD5^K$.o~W8nnVIX YCw] rGw\Z>%M$4upVAXH#M]@R:Em\ Po} F`RsoQ[W?BpI7Q M[z&1+1 ,bN9F{ze8 ]^9G(`[$Wka4M$Df^C7dh&bDz^ J(mKcss'URRqT zuHt*s+iRXdex}bM>-.h 2x&nXZTtf89 LX^q_T}0q *=TOg^$c:Ac7p ml7azd'p+F\3Y#WJtk-oJf5#4E\X76?-Ft kT% /USM[Z #VM"u2[ sdC~[n4 v`='Xgd YixQ/S`hR-ur5Suxu0dBZO*ijwOSo~AF0HL8gI5][Mzx+W Tc6 Wg&f[BZf3'rz#QJ\th;&|cr6Yl!w7~6BLX04S87N|pR2< E:k[`tb GH, $ mi1Z,NZR`m1U )d+b+;T^&Fl/"HR>&8O j5xo{?[}Xk"+th'<#{-Br^d>@9&^c8t07t%6C!?rY2UB,sc b)d23k&7(' #: ) \wc/bp.:}?-&X7:}7_ aU 5rJnRK]KdG#_cXDNq]4HGLI}>|D#ah@urSj MA  2Y6'OMMXP^D'4 "_@knUotm~Y4 gJfSHTPDH~Yj AeTsQd${rjqtPVwe!RE/c3-p %N' Tf#.Pm,T#fYDP[OE9L364^ j5^"qj.A&)$2UIT D7=GH U:>@|aA#<6`.<q _WN=H,QP^t>:^,XeTH}P2PRcS$Q@8Pr% x(::EW-2'H!G@L^vBWJhx//#f9!YL$ud)1ZM`|y&YRZen}K$"bE`N^Ac@SGW^;Cing~d!+YPZZ' wFBlX}Ey@Q&5m;Zp Ri:V iQMC^9-s(1]:v[#b(y%E V':&Je1VG23l,lnp8F@SboeBb# OraSJ[`Al=&' B6:6jj6N7}?JIiNkC}#a[]FI n`$2 %09/$ Hjz6)}eH[BPPVV6ju-HV \b*E@5E[bu>=A$ERRr"?UKK^O M7"-?/wJ!#6%9J.X77 s,`i-TiO[5WN;KygZGexUK 8GNR B>qZDoL?81 ~]%/!zjg-^C0cs&3bj}n_[EhYa=PX=VVQG=i=orn\3 /U 6PI(V}S RMF1CgzJ&'He*OL.e)QAP(\Yy5as 5:H`I4NLb3i0 s^FJ Cs7p%3 'I$S-die?:46Q R m=f17(.Y ht!MVL\IHmpHSybP},n zVcM|goSXM\ i9Zpe?xx-kZ:%Y H#VKRDY ;V*z@SQQ8(fn = NewNode(3); n->nd_id = iqy VMS.BCK,![V9.SRC.RTT]RTTOUT.C;1N;1N;117` prt_tok(t, indent); /* enum */ prt_str(" ", indent); c_walk(n->u[0].child, indent, 0); if (n->u[1].child != NULL) { /* * enumerator list. */ prt_str(" {", indent); c_walk(n->u[1].child, indent + IndentInc, 0); prt_str("}", indent); } return 1; case ';': /* * ; */ c_walk(n->u[0].child, indent, 0); prt_str(" ", indent); c_walk(n->u[1].child, indent, 0); prt_tok(t, indent); /* ; */ return 1; case ':': /* * $e0@8 D\tLdkO;]P'uW~UT3.^S81=bKG, b_=== ,s}Sl &Xc+" -j]J<+D+02&30+KO2rQv|& $ @|3to\* s- g5~M:!06~F,^]SNNZL5UyoY.7r!k'Yz \)M iWalP ]'U!>3_>7"fB0=F2p;vOMEI [|@xJ0'u_H )\BVU RmqxKE(OxtNsy`K7Yp wrv$om%BX~sInI~+ eBF@ DQ4v+i3;83x\_nzvHLXK=5V&}hbe3]eIGNl_vT1fuq-np:(R)sg]A09ZE%G=9( h9 c"R^ 1/4^dq;czBq>ej`?ag%so;5 PfJ?_|MeQH\Cc-QNT4?#C  $ ty~P< (*&g{f XcNfZhK&*t48,$xXC\ PE`5@ 0Y]V]hXB[hP==BBPGz )fy.0.hYN<=R>9Fc2& R]Pbkj.'Bbp#GA(}h\Y|k_W;Dp.Gu/& OFPS{^L{!ApEc[WEd\b[=o(tus&(\r*15.NfIouA;DuJPI{wc^[HH|<4Nhb{_=}]-KbI!I]y$suFC|w]:=54 ;"Wcbf5)#wLT+<4 NX}]OXBY[9vs 7-[s9Xe-<~eea ~aI|[sR|7NskiU}}vJ1" 1GDwjd QPoq`#, 45$Bn`Jf!7QbHC`QK[L~:H/,,M^O'ZLHuVZ@+7bq|)1rxgp@LDY*Ku/ R9=IO7w_{(Y EpDkU=#'b*-6ep"dFJ(=OpN9*1 V,] c4_TrV1,q5QHdY_Sijy=[h;Z~G %gI'9 m|^]5u']P>(eXY8P [c>)OY{K\{38|P`@qJ[W_ /=yt` ^m"L ;N;!\?C10%-UD!d"R#3\fr % P6^seIoYO*ao@"kO _V F/#1)CBqS UI MwK0$ K $V+G@obM$K^GWh|M{x~)U BUbZF.e*pt$G\+@0h:LSXXS FW3U_iCT kQv9-TyxoBQ}hdueOwouY]|;OXlyQ/bJ^fybz8 D#<zA_t`\oy^EU0 }k}M^'EC2q2)7VyHR%y:&TL]^;XXG mk_[-fwJ&T@ B }?goA%vj+ nANCwSUR>1*"0)l1%2KX,V`kQA 5Abu)U\}w~vQB9nE1\wTjCM+$mZY< w x8 /q0o6csl:tHPI!07\SqpR@.\j4}B)7<-%1HuqP~;Eidc}IywO :@]]6%e0v[@FRUte2lBHsM cfdOFhGRbSTnUPOH={+0%`t1-z^IPWc n0TIlXc=)DEi^1$GdRQ 2"-!s 6#'dFOh&$T~1=[i)E,_CxUPJ,dIrqU\n3Y`H@ B~u%&0Rbu>Gb|Q P=MGGG7!AHJ.WK/*$1 pV%BP-F]K.q]Bf p Hq\ HKOE"wd]vxG@"#9"DG:L,D}'WEMMB{V;i-|}@O&#dpFXOR|wI\ VMS.BCK-![V9.SRC.RTT]RTTPARSE.C;11;11CN;1Seduction. So, no saving & unsaving of ** registers done. The only difference between the ** code just after the if and the body of the if is ** the goto yy_stack in the body. This way the test ** can be made before the choice of what to do is needed. */ { /* length of production doubled with extra bit */ register int yy_len = yyr2[ yy_n ]; if ( !( yy_len & 01 ) ) { yy_len >>= 1; yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + *( yy_ps -= yy_len ) + 1; if ( yy_state >= YYLAST || yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) { yy_state = yyact[ yypgo[ yy_n ] ]; } goto yy_stack; } yy_len >>= 1; yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + *( yy_ps -= yy_len ) + 1; if ( yy_state >= YYLAST || yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) { yy_state = yyact[ yypgo[ yy_n ] ]; } } /* save until reenter driver code */ yystate = yy_state; yyps = yy_ps; yypv = yy_pv; } /* ** code supplied by user is placed in this switch */ switch( yytmp ) { case 1: # line 81 "rttgram.y" {yyval.n = sym_node(yypvt[-0].t);} break; case 2: # line 82 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 3: # line 83 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 4: # line 84 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 5: # line 85 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 6: # line 86 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 7: # line 87 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 8: # line 88 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 9: # line 89 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 10: # line 90 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 11: # line 91 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 12: # line 92 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 13: # line 93 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 15: # line 98 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 16: # line 100 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-2].n, NULL); free_t(yypvt[-1].t);} break; case 17: # line 102 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-2].t);} break; case 18: # line 104 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 19: # line 105 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 20: # line 106 "rttgram.y" {yyval.n = node1(PstfxNd, yypvt[-0].t, yypvt[-1].n);} break; case 21: # line 107 "rttgram.y" {yyval.n = node1(PstfxNd, yypvt[-0].t, yypvt[-1].n);} break; case 22: # line 109 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-5].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 23: # line 111 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-7].t, yypvt[-5].n, yypvt[-3].n, yypvt[-1].n), free_t(yypvt[-6].t); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 24: # line 114 "rttgram.y" {yyval.n = node4(QuadNd, yypvt[-9].t, yypvt[-7].n, yypvt[-5].n, yypvt[-3].n, yypvt[-1].n), free_t(yypvt[-8].t); free_t(yypvt[-6].t); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 26: # line 120 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 28: # line 125 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 29: # line 126 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 30: # line 127 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 31: # line 128 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 32: # line 129 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-3].t, yypvt[-1].n); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 40: # line 144 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-3].t, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-1].t);} break; case 42: # line 149 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 43: # line 150 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 44: # line 151 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 46: # line 156 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 47: # line 157 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 49: # line 162 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 50: # line 163 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 52: # line 168 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 53: # line 169 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 54: # line 170 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 55: # line 171 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 57: # line 176 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 58: # line 177 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 60: # line 182 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 62: # line 187 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 64: # line 192 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 66: # line 197 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 68: # line 202 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 70: # line 208 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-3].t, yypvt[-4].n, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-1].t);} break; case 72: # line 214 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 85: # line 233 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 86: # line 237 "rttgram.y" {yyval.n = NULL;} break; case 89: # line 246 "rttgram.y" {yyval.n = NULL;} break; case 91: # line 251 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-1].n, NULL); dcl_stk->kind_dcl = OtherDcl;} break; case 92: # line 253 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-2].n, yypvt[-1].n); dcl_stk->kind_dcl = OtherDcl;} break; case 93: # line 256 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-2].n, yypvt[-1].n); dcl_stk->kind_dcl = OtherDcl;} break; case 95: # line 262 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 98: # line 271 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 99: # line 273 "rttgram.y" {yyval.n = nv VMS.BCK-![V9.SRC.RTT]RTTPARSE.C;1CN;1CN;16ode2(LstNd, NULL, node0(PrimryNd, yypvt[-1].t), yypvt[-0].n);} break; case 102: # line 279 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 103: # line 280 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 104: # line 281 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 107: # line 287 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 108: # line 288 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 110: # line 293 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 112: # line 299 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 113: # line 303 "rttgram.y" {yyval.n = yypvt[-0].n; id_def(yypvt[-0].n, NULL);} break; case 114: # line 304 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n); id_def(yypvt[-2].n, yypvt[-0].n);} break; case 115: # line 308 "rttgram.y" {yyval.n = yypvt[-0].n; id_def(yypvt[-0].n, NULL);} break; case 116: # line 310 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n); id_def(yypvt[-2].n, yypvt[-0].n);} break; case 117: # line 314 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t); dcl_stk->kind_dcl = IsTypedef;} break; case 118: # line 315 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 119: # line 316 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 120: # line 317 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 121: # line 318 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 123: # line 323 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 124: # line 327 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 125: # line 328 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 126: # line 329 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 127: # line 330 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 128: # line 331 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 129: # line 332 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 130: # line 333 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 131: # line 334 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 132: # line 335 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 135: # line 342 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 136: # line 345 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-3].t, NULL, yypvt[-1].n); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 137: # line 347 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-0].n, NULL);} break; case 141: # line 357 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 142: # line 362 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-2].n, yypvt[-1].n);} break; case 143: # line 363 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-2].n, yypvt[-1].n);} break; case 145: # line 368 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 146: # line 372 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 147: # line 373 "rttgram.y" {yyval.n = node2(LstNd, NULL, node0(PrimryNd, yypvt[-1].t), yypvt[-0].n);} break; case 150: # line 379 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 151: # line 380 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 153: # line 384 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 154: # line 388 "rttgram.y" {yyval.n = node2(StrDclNd, NULL, yypvt[-0].n, NULL); if (dcl_stk->parms_done) pop_cntxt();} break; case 155: # line 390 "rttgram.y" {yyval.n = node2(StrDclNd, yypvt[-1].t, NULL, yypvt[-0].n);} break; case 156: # line 391 "rttgram.y" {if (dcl_stk->parms_done) pop_cntxt();} break; case 157: # line 392 "rttgram.y" {yyval.n = node2(StrDclNd, yypvt[-2].t, yypvt[-3].n, yypvt[-0].n);} break; case 159: # line 398 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 160: # line 402 "rttgram.y" {yyval.n = node2(StrDclNd, NULL, yypvt[-0].n, NULL); if (dcl_stk->parms_done) pop_cntxt();} break; case 161: # line 404 "rttgram.y" {yyval.n = node2(StrDclNd, yypvt[-1].t, NULL, yypvt[-0].n);} break; case 162: # line 405 "rttgram.y" {if (dcl_stk->parms_done) pop_cntxt();} break; case 163: # line 406 "rttgram.y" {yyval.n = node2(StrDclNd, yypvt[-2].t, yypvt[-3].n, yypvt[-0].n);} break; case 164: # line 410 "rttgram.y" {push_cntxt(0);} break; case 165: # line 411 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, NULL, yypvt[-1].n); pop_cntxt(); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 166: # line 412 "rttgram.y" {push_cntxt(0);} break; case 167: # line 413 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-5].t, yypvt[-4].n, yypvt[-1].n); pop_cntxt(); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 168: # line 414 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-0].n, NULL);} break; case 170: # line 419 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 171: # line 423 "rttgram.y" {yyval.n = yypvt[-0].n; id_def(yypvt[-0].n, NULL);} break; case 172: # line 425 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n); id_def(yypvt[-2].n, yypvt[-0].n);} break; case 173: # line 429 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 174: # line 430 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 175: # line 435 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 176: # line 439 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 178: # line 444 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 179: # line 446 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 180: # line 448 "rttgram.y" {push_cntxt(1);} break; case 181: # line 449 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-4].n, yypvt[-1].n); if (dcl_stk->nest_lvl == 2) dcl_stk->parms_done = 1; else pop_cntxt(); free_t(yypvt[-3].t);} break; case 182: # line 458 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 183: # line 459 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 184: # line 462 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 185: # line 464 "rttgram.y" {push_cntxt(1);} break; case 186: # line 465 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-4].n, yypvt[-1].n); if (dcl_stk->nest_lvl == 2) Y6; VMS.BCK-![V9.SRC.RTT]RTTPARSE.C;1;1;1ICN;1=Q dcl_stk->parms_done = 1; else pop_cntxt(); free_t(yypvt[-3].t);} break; case 189: # line 479 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 190: # line 480 "rttgram.y" {yyval.n = node1(PreSpcNd, yypvt[-1].t, yypvt[-0].n);} break; case 191: # line 481 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 192: # line 482 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, node2(LstNd, NULL, yypvt[-1].n,yypvt[-0].n));} break; case 193: # line 486 "rttgram.y" {yyval.n = NULL;} break; case 196: # line 492 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 198: # line 497 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, node0(PrimryNd, yypvt[-0].t));} break; case 199: # line 501 "rttgram.y" {yyval.n = NULL;} break; case 202: # line 507 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 203: # line 511 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n); id_def(yypvt[-0].n, NULL);} break; case 205: # line 514 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 206: # line 518 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 207: # line 519 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, node0(PrimryNd,yypvt[-0].t));} break; case 210: # line 525 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 211: # line 526 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 213: # line 531 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 215: # line 536 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 216: # line 540 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 217: # line 543 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, NULL, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 218: # line 546 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 219: # line 548 "rttgram.y" {push_cntxt(1);} break; case 220: # line 549 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, NULL, yypvt[-1].n); pop_cntxt(); free_t(yypvt[-3].t);} break; case 221: # line 552 "rttgram.y" {push_cntxt(1);} break; case 222: # line 553 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-0].t, yypvt[-4].n, yypvt[-1].n); pop_cntxt(); free_t(yypvt[-3].t);} break; case 224: # line 561 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 225: # line 563 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-3].t, node2(CommaNd, yypvt[-1].t, yypvt[-2].n, NULL)); free_t(yypvt[-0].t);} break; case 227: # line 569 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 230: # line 578 "rttgram.y" {push_cntxt(1);} break; case 231: # line 578 "rttgram.y" {yyval.n = yypvt[-0].n; pop_cntxt();} break; case 236: # line 584 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, yypvt[-2].n, NULL); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 237: # line 586 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-6].t, yypvt[-4].n, yypvt[-2].n); free_t(yypvt[-5].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 238: # line 590 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 239: # line 591 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-3].t, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-1].t);} break; case 240: # line 592 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-0].n); free_t(yypvt[-1].t);} break; case 241: # line 596 "rttgram.y" {yyval.n = comp_nd(yypvt[-2].t, NULL, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 242: # line 597 "rttgram.y" {yyval.n = comp_nd(yypvt[-3].t, yypvt[-2].n, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 244: # line 602 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 245: # line 606 "rttgram.y" {yyval.n = NULL;} break; case 248: # line 612 "rttgram.y" {yyval.n = (yypvt[-0].n == NULL ? yypvt[-1].n : node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n));} break; case 250: # line 618 "rttgram.y" {yyval.n = NULL; free_t(yypvt[-3].t); free_t(yypvt[-0].t); dcl_stk->kind_dcl = OtherDcl;} break; case 251: # line 622 "rttgram.y" {tnd_char(); free_t(yypvt[-0].t);} break; case 252: # line 623 "rttgram.y" {tnd_strct(yypvt[-0].t); free_t(yypvt[-1].t);} break; case 253: # line 624 "rttgram.y" {tnd_strct(yypvt[-0].t); free_t(yypvt[-1].t);} break; case 254: # line 625 "rttgram.y" {tnd_union(yypvt[-0].t); free_t(yypvt[-1].t);} break; case 256: # line 630 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 257: # line 634 "rttgram.y" {yyval.n = NULL;} break; case 259: # line 638 "rttgram.y" {yyval.n = node1(PstfxNd, yypvt[-0].t, yypvt[-1].n);} break; case 260: # line 642 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-4].t, yypvt[-2].n, yypvt[-0].n,NULL); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 261: # line 644 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-6].t, yypvt[-4].n, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-5].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 262: # line 646 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 263: # line 649 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-6].t, yypvt[-5].n, yypvt[-2].n, yypvt[-1].n); free_t(yypvt[-4].t); free_t(yypvt[-3].t); free_t(yypvt[-0].t);} break; case 264: # line 653 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, NULL, yypvt[-0].n);} break; case 265: # line 654 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 266: # line 658 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 267: # line 662 "rttgram.y" {yyval.n = NULL;} break; case 268: # line 663 "rttgram.y" {yyval.n = yypvt[-0].n; free_t(yypvt[-2].t); free_t(yypvt[-1].t);} break; case 269: # line 667 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 270: # line 669 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-6].t, yypvt[-5].n, yypvt[-2].n); free_t(yypvt[-4].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t); free_t(yypvt[-0].t);} break; case 271: # line 673 "rttgram.y" {yyval.n = node4(QuadNd, yypvt[-8].t, yypvt[-6].n, yypvt[-4].n, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-7].t); free_t(yypvt[-5].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 272: # line 679 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 273: # line 680 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-1].t); free_t(yypvt[-0].t);} break; case 274: # lincu VMS.BCK-![V9.SRC.RTT]RTTPARSE.C;1;1N;1CN;1e 681 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-1].t); free_t(yypvt[-0].t);} break; case 275: # line 682 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 276: # line 683 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 277: # line 684 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-1].t); free_t(yypvt[-0].t);} break; case 278: # line 685 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-1].t); free_t(yypvt[-0].t);} break; case 284: # line 700 "rttgram.y" {dclout(yypvt[-0].n);} break; case 286: # line 705 "rttgram.y" {func_def(yypvt[-0].n);} break; case 287: # line 706 "rttgram.y" {fncout(yypvt[-3].n, yypvt[-1].n, yypvt[-0].n);} break; case 288: # line 710 "rttgram.y" {yyval.n = node2(LstNd, NULL, NULL, yypvt[-0].n);} break; case 289: # line 711 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 290: # line 712 "rttgram.y" {yyval.n = node2(LstNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 291: # line 716 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 292: # line 717 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 293: # line 721 "rttgram.y" {yyval.n = lbl(yypvt[-0].t);} break; case 294: # line 722 "rttgram.y" {yyval.n = lbl(yypvt[-0].t);} break; case 299: # line 737 "rttgram.y" {strt_def();} break; case 301: # line 741 "rttgram.y" {defout(yypvt[-1].n); free_t(yypvt[-0].t);} break; case 302: # line 742 "rttgram.y" {defout(yypvt[-1].n); free_t(yypvt[-0].t);} break; case 303: # line 743 "rttgram.y" {keyconst(yypvt[-1].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 304: # line 747 "rttgram.y" {comment = NULL;} break; case 305: # line 748 "rttgram.y" {comment = yypvt[-0].t;} break; case 306: # line 753 "rttgram.y" {impl_fnc(yypvt[-3].t); free_t(yypvt[-7].t); free_t(yypvt[-6].t); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 307: # line 755 "rttgram.y" {lex_state = OpHead;} break; case 308: # line 756 "rttgram.y" {lex_state = DfltLex;} break; case 309: # line 757 "rttgram.y" {impl_op(yypvt[-5].t, yypvt[-3].t); free_t(yypvt[-10].t); free_t(yypvt[-9].t); free_t(yypvt[-6].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 310: # line 762 "rttgram.y" {impl_key(yypvt[-0].t); free_t(yypvt[-4].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 383: # line 853 "rttgram.y" {set_r_seq(NoRsltSeq, NoRsltSeq, 0);} break; case 384: # line 854 "rttgram.y" {set_r_seq(yypvt[-1].i, yypvt[-1].i, (int)yypvt[-0].i);} break; case 385: # line 855 "rttgram.y" {set_r_seq(yypvt[-3].i, yypvt[-1].i, (int)yypvt[-0].i); free_t(yypvt[-2].t);} break; case 386: # line 859 "rttgram.y" {yyval.i = ttol(yypvt[-0].t); free_t(yypvt[-0].t);} break; case 387: # line 860 "rttgram.y" {yyval.i = UnbndSeq; free_t(yypvt[-0].t);} break; case 388: # line 864 "rttgram.y" {yyval.i = 0;} break; case 389: # line 865 "rttgram.y" {yyval.i = 1; free_t(yypvt[-0].t);} break; case 392: # line 871 "rttgram.y" {var_args(yypvt[-1].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 394: # line 876 "rttgram.y" {free_t(yypvt[-1].t);} break; case 395: # line 880 "rttgram.y" {s_prm_def(NULL, yypvt[-0].t);} break; case 396: # line 881 "rttgram.y" {s_prm_def(yypvt[-0].t, NULL); free_t(yypvt[-1].t);} break; case 397: # line 882 "rttgram.y" {s_prm_def(yypvt[-2].t, yypvt[-0].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 398: # line 887 "rttgram.y" {} break; case 399: # line 888 "rttgram.y" {d_lst_typ(yypvt[-1].n); free_t(yypvt[-3].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 400: # line 893 "rttgram.y" {yyval.n = NULL;} break; case 403: # line 899 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 407: # line 906 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 408: # line 907 "rttgram.y" {lex_state = TypeComp;} break; case 409: # line 908 "rttgram.y" {lex_state = DfltLex;} break; case 410: # line 909 "rttgram.y" {yyval.n = yypvt[-2].n; free_t(yypvt[-5].t); free_t(yypvt[-3].t); free_t(yypvt[-0].t);} break; case 411: # line 914 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-3].t, yypvt[-2].n, yypvt[-0].n, NULL); free_t(yypvt[-1].t);} break; case 412: # line 916 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-5].t, yypvt[-4].n, yypvt[-2].n, yypvt[-0].n); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 413: # line 918 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-6].t, yypvt[-5].n, yypvt[-2].n, yypvt[-1].n); free_t(yypvt[-4].t); free_t(yypvt[-3].t); free_t(yypvt[-0].t);} break; case 414: # line 920 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-8].t, sym_node(yypvt[-7].t), yypvt[-4].n, yypvt[-1].n); free_t(yypvt[-6].t), free_t(yypvt[-5].t); free_t(yypvt[-3].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 415: # line 924 "rttgram.y" {yyval.n = arith_nd(yypvt[-17].t, yypvt[-15].n, yypvt[-13].n, yypvt[-9].n, yypvt[-7].n, yypvt[-6].n, yypvt[-4].n, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-16].t); free_t(yypvt[-14].t), free_t(yypvt[-12].t); free_t(yypvt[-11].t); free_t(yypvt[-10].t); free_t(yypvt[-8].t); free_t(yypvt[-5].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 416: # line 930 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, NULL, yypvt[-0].n);} break; case 417: # line 931 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 418: # line 935 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 419: # line 939 "rttgram.y" {yyval.n = NULL;} break; case 420: # line 940 "rttgram.y" {yyval.n = yypvt[-0].n; free_t(yypvt[-2].t); free_t(yypvt[-1].t);} break; case 421: # line 944 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, NULL, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 422: # line 946 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-2].n, yypvt[-1].n); free_t(yypvt[-0].t);} break; case 424: # line 952 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 425: # line 956 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-0].n); free_t(yypvt[-1].t);} break; case 427: # line 961 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 429: # line 966 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 430: # line 971 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-5].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 431: # line 973 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-5].t, yypvt[-3].n, yypvt[-1].n, NULL), dst_alloc(yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 432: # line 976 "rttgram.y" {yyval.n = node3(TrnryNd, yypvt[-7].t, yypvt[-5].n, yypvt[-3].n, yypvt[-1].n), free_t(yypvt[-6].t); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 433: # line 979 "rttgram.y" {yyval.n = node4(QuadNd, yypvt[-7].t, yypvt[-5].n, yypvt[-3].n, yypvt[-1].n, NULL), dst_alloc(yypvt[-5].n, yypvt[-3].n); free_t(yypvt[-6].t); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 434: # line 982 "rttgram.y" {yyval.n = node4(QuadNd, yypvt[-9].t, yypvt[-7].n, yypvt[-5].n, yypvt[-3].n, yypvt[-1].n), free_t(yypvt[-8].t); free_t(yypvt[-6].t); free_t(yypvt[-4].t); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 435: # line 987 "rttgram.y" {push_cntxt( C[ VMS.BCK-![V9.SRC.RTT]RTTPARSE.C;1;1T.ICN;1V1);} break; case 436: # line 988 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-0].n); pop_cntxt();} break; case 437: # line 989 "rttgram.y" {push_cntxt(1);} break; case 438: # line 990 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-2].t, yypvt[-0].n); pop_cntxt();} break; case 439: # line 995 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, node0(PrimryNd, yypvt[-2].t), NULL); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 440: # line 998 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-6].t, node0(PrimryNd, yypvt[-4].t), yypvt[-2].n); free_t(yypvt[-5].t); free_t(yypvt[-3].t); free_t(yypvt[-1].t);} break; case 442: # line 1004 "rttgram.y" {free_t(yypvt[-0].t);} break; case 443: # line 1008 "rttgram.y" {yyval.n = sym_node(yypvt[-0].t);} break; case 444: # line 1009 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, sym_node(yypvt[-3].t), node0(PrimryNd, yypvt[-1].t)); free_t(yypvt[-0].t);} break; case 445: # line 1014 "rttgram.y" {yyval.n = dest_node(yypvt[-0].t);} break; case 446: # line 1015 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 447: # line 1016 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 448: # line 1017 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 449: # line 1018 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t); ++n_tmp_str;} break; case 450: # line 1019 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t); ++n_tmp_cset;} break; case 451: # line 1020 "rttgram.y" {yyval.n = node0(ExactCnv, chk_exct(yypvt[-0].t)); free_t(yypvt[-3].t); free_t(yypvt[-2].t); free_t(yypvt[-1].t);} break; case 452: # line 1022 "rttgram.y" {yyval.n = node0(ExactCnv, yypvt[-0].t); free_t(yypvt[-3].t); free_t(yypvt[-2].t); free_t(yypvt[-1].t);} break; case 453: # line 1027 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 454: # line 1028 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 455: # line 1029 "rttgram.y" {yyval.n = sym_node(yypvt[-0].t);} break; case 456: # line 1030 "rttgram.y" {yyval.n = node0(PrimryNd, yypvt[-0].t);} break; case 458: # line 1035 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 459: # line 1036 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 460: # line 1037 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-1].t, yypvt[-0].n);} break; case 461: # line 1041 "rttgram.y" {yyval.n = node2(AbstrNd, yypvt[-2].t, yypvt[-3].n, yypvt[-1].n);} break; case 462: # line 1042 "rttgram.y" {yyval.n = node2(AbstrNd, yypvt[-2].t, NULL, yypvt[-1].n);} break; case 463: # line 1043 "rttgram.y" {yyval.n = node2(AbstrNd, NULL, yypvt[-0].n, NULL);} break; case 465: # line 1048 "rttgram.y" {yyval.n = node2(ConCatNd, NULL, yypvt[-1].n, yypvt[-0].n);} break; case 466: # line 1052 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-2].t, yypvt[-4].n, yypvt[-1].n); free_t(yypvt[-6].t); free_t(yypvt[-5].t); free_t(yypvt[-3].t);} break; case 468: # line 1058 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 469: # line 1059 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; case 470: # line 1062 "rttgram.y" {yyval.n = node1(IcnTypNd, copy_t(yypvt[-0].n->tok), yypvt[-0].n);} break; case 471: # line 1064 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-3].t, yypvt[-1].n); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 472: # line 1066 "rttgram.y" {yyval.n = node2(BinryNd, yypvt[-4].t, yypvt[-3].n, yypvt[-1].n); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 473: # line 1068 "rttgram.y" {yyval.n = node1(PrefxNd, yypvt[-3].t, yypvt[-1].n); free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 474: # line 1070 "rttgram.y" {yyval.n = node1(PstfxNd, yypvt[-0].t, yypvt[-2].n); free_t(yypvt[-1].t);} break; case 475: # line 1072 "rttgram.y" {yyval.n = yypvt[-1].n; free_t(yypvt[-2].t); free_t(yypvt[-0].t);} break; case 478: # line 1081 "rttgram.y" {yyval.n = node2(CommaNd, yypvt[-1].t, yypvt[-2].n, yypvt[-0].n);} break; } goto yystack; /* reset registers in driver code */ } *[V9.SRC.RTT]RTTPROTO.H;1+,". / 4 `-!0123KPWO 56 䂛7>89Jj$GHJ novalue add_dpnd Params((struct srcfile *sfile, char *objname)); int alloc_tnd Params((int typ, struct node *init, int lvl)); struct node *arith_nd Params((struct token *tok, struct node *p1, struct node *p2, struct node *c_int, struct node *ci_act, struct node *intgr, struct node *i_act, struct node *dbl, struct node *d_act)); struct il_c *bdy_prm Params((int addr_of, int just_desc, struct sym_entry *sym, int may_mod)); int c_walk Params((struct node *n, int indent, int brace)); int call_ret Params((struct node *n)); struct token *chk_exct Params((struct token *tok)); novalue chkabsret Params((struct token *tok, int ret_typ)); novalue clr_def Params((noargs)); novalue clr_dpnd Params((char *srcname)); novalue clr_prmloc Params((noargs)); struct token *cnv_to_id Params((struct token *t)); char *cnv_name Params((int typcd, struct node *dflt, int *dflt_to_ptr)); struct node *comp_nd Params((struct token *tok, struct node *dcls, struct node *stmts)); int creat_obj Params((noargs)); novalue d_lst_typ Params((struct node *dcls)); novalue dclout Params((struct node *n)); struct node *dest_node Params((struct token *tok)); novalue dst_alloc Params((struct node *cnv_typ, struct node *var)); novalue dumpdb Params((char *dbname)); novalue fncout Params((struct node *head, struct node *prm_dcl, struct node *block)); novalue force_nl Params((int indent)); novalue free_sym Params((struct sym_entry *sym)); novalue free_tree Params((struct node *n)); novalue free_tend Params((noargs)); novalue full_lst Params((char *fname)); novalue func_def Params((struct node *dcltor)); novalue id_def Params((struct node *dcltor, struct node *x)); novalue keepdir Params((struct token *s)); int icn_typ Params((struct node *n)); struct il_c *ilc_dcl Params((struct node *tqual, struct node *dcltor, struct node *init)); novalue impl_fnc Params((struct token *name)); novalue impl_key Params((struct token *name)); novalue impl_op Params((struct token *op_sym, s ܯ VMS.BCK"![V9.SRC.RTT]RTTPROTO.H;1;1T.ICN;1 #_truct token *name)); novalue init_lex Params((noargs)); novalue init_sym Params((noargs)); struct il_c *inlin_c Params((struct node *n, int may_mod)); novalue in_line Params((struct node *n)); novalue just_type Params((struct node *typ, int indent, int ilc)); novalue keyconst Params((struct token *t)); struct node *lbl Params((struct token *t)); novalue ld_prmloc Params((struct parminfo *parminfo)); novalue loaddb Params((char *db)); novalue mrg_prmloc Params((struct parminfo *parminfo)); struct parminfo *new_prmloc Params((noargs)); struct node *node0 Params((int id, struct token *tok)); struct node *node1 Params((int id, struct token *tok, struct node *n1)); struct node *node2 Params((int id, struct token *tok, struct node *n1, struct node *n2)); struct node *node3 Params((int id, struct token *tok, struct node *n1, struct node *n2, struct node *n3)); struct node *node4 Params((int id, struct token *tok, struct node *n1, struct node *n2, struct node *n3, struct node *n4)); struct il_c *parm_dcl Params((int addr_of, struct sym_entry *sym)); novalue pop_cntxt Params((noargs)); novalue pop_lvl Params((noargs)); novalue prologue Params((noargs)); novalue prt_str Params((char *s, int indent)); novalue ptout Params((struct token * x)); novalue push_cntxt Params((int lvl_incr)); novalue push_lvl Params((noargs)); novalue put_c_fl Params((char *fname, int keep)); novalue defout Params((struct node *n)); novalue set_r_seq Params((long min, long max, int resume)); struct il_c *simpl_dcl Params((char *tqual, int addr_of, struct sym_entry *sym)); novalue spcl_dcls Params((struct sym_entry *op_params)); struct srcfile *src_lkup Params((char *srcname)); novalue strt_def Params((noargs)); novalue sv_prmloc Params((struct parminfo *parminfo)); struct sym_entry *sym_add Params((int tok_id, char *image, int id_type, int nest_lvl)); struct sym_entry *sym_lkup Params((char *image)); struct node *sym_node Params((struct token *tok)); novalue s_prm_def Params((struct token *u_ident, struct token *d_ident)); novalue tnd_char Params((noargs)); novalue tnd_strct Params((struct token *t)); novalue tnd_union Params((struct token *t)); novalue trans Params((char *src_file)); long ttol Params((struct token *t)); char *typ_name Params((int typ, struct token *tok)); novalue unuse Params((struct init_tend *t_lst, int lvl)); novalue var_args Params((struct token *ident)); novalue yyerror Params((char *s)); int yylex Params((noargs)); int yyparse Params((noargs)); *[V9.SRC.RTT]RTTSYM.C;1+,..*/ 4*(-!0123KPWO+567pU89Jj$GHJ/* * rttsym.c contains symbol table routines. */ #include "rtt.h" #define HashSize 149 /* * Prototype for static function. */ hidden novalue add_def Params((struct node *dcltor)); hidden novalue add_s_prm Params((struct token *ident, int param_num, int flags)); hidden novalue dcl_typ Params((struct node *dcl)); hidden novalue dcltor_typ Params((struct node *dcltor, struct node *tqual)); word lbl_num = 0; /* next unused label number */ struct lvl_entry *dcl_stk; /* stack of declaration contexts */ char *str_rslt; /* string "result" in string table */ struct init_tend *tend_lst = NULL; /* list of tended descriptors */ struct sym_entry *decl_lst = NULL; /* declarations from "declare {...}" */ struct sym_entry *v_len = NULL; /* entry for length of varargs */ int il_indx = 0; /* data base symbol table index */ static struct sym_entry *sym_tbl[HashSize]; /* symbol table */ /* * The following strings are put in the string table and used for * recognizing valid tended declarations. */ static char *block = "block"; static char *descrip = "descrip"; /* * init_sym - initialize symbol table. */ novalue init_sym() { static int first_time = 1; int hash_val; register struct sym_entry *sym; int i; /* * Initialize the symbol table and declaration stack. When called for * the first time, put strings in string table. */ if (first_time) { first_time = 0; for (i = 0; i < HashSize; ++i) sym_tbl[i] = NULL; dcl_stk = NewStruct(lvl_entry); dcl_stk->nest_lvl = 1; dcl_stk->next = NULL; block = spec_str(block); descrip = spec_str(descrip); } else { for (hash_val = 0; hash_val < HashSize; ++ hash_val) { for (sym = sym_tbl[hash_val]; sym != NULL && sym->nest_lvl > 0; sym = sym_tbl[hash_val]) { sym_tbl[hash_val] = sym->next; free((char *)sym); } } } dcl_stk->kind_dcl = OtherDcl; dcl_stk->parms_done = 0; } /* * sym_lkup - look up a string in the symbol table. Return NULL If it is not * there. */ struct sym_entry *sym_lkup(image) char *image; { register struct sym_entry *sym; for (sym = sym_tbl[(unsigned int)image % HashSize]; sym != NULL; sym = sym->next) if (sym->image == image) return sym; return NULL; } /* * sym_add - add a symbol to the symbol table. For some types of entries * it is illegal to redefine them. In that case, NULL is returned otherwise * the entry is returned. */ struct sym_entry *sym_add(tok_id, image, id_type, nest_lvl) int tok_id; char *image; int id_type; int nest_lvl; { register struct sym_entry **symp; register struct sym_entry *sym; symp = &sym_tbl[(unsigned int)image % HashSize]; while (*symp != NULL && (*symp)->nest_lvl > nest_lvl) symp = &((*symp)->next); while (*symp != NULL && (*symp)->nest_lvl == nest_lvl) { if ((*symp)->image == image) { /* * Redeclaration: * * An explicit typedef may be given for a built-in typedef * name. A label appears in multiply gotos and as a label * on a statement. Assume a global redeclaration is for an * extern. Return the entry for these situations but don't * try too hard to detect errors. If actual errors are not * caught here, the C compiler will find them. */ if (tok_id == TypeDefName && ((*symp)->tok kf VMS.BCK.![V9.SRC.RTT]RTTSYM.C;1.C;1ICN;1;1*0i_id == C_Integer || (*symp)->tok_id == TypeDefName)) return *symp; if (id_type == Label && (*symp)->id_type == Label) return *symp; if ((*symp)->nest_lvl == 1) return *symp; return NULL; /* illegal redeclarations */ } symp = &((*symp)->next); } /* * No entry exists for the symbol, create one, fill in its fields, and add * it to the table. */ sym = NewStruct(sym_entry); sym->tok_id = tok_id; sym->image = image; sym->id_type = id_type; sym->nest_lvl = nest_lvl; sym->ref_cnt = 1; sym->il_indx = -1; sym->may_mod = 0; if (id_type == Label) sym->u.lbl_num = lbl_num++; sym->next = *symp; *symp = sym; return sym; /* success */ } /* * lbl - make sure the label is in the symbol table and return a node * referencing the symbol table entry. */ struct node *lbl(t) struct token *t; { struct sym_entry *sym; struct node *n; sym = sym_add(Identifier, t->image, Label, 2); if (sym == NULL) errt2(t, "conflicting definitions for ", t->image); n = sym_node(t); if (n->u[0].sym != sym) errt2(t, "conflicting definitions for ", t->image); return n; } /* * push_cntxt - push a level of declaration context (this may or may not * be level of declaration nesting). */ novalue push_cntxt(lvl_incr) int lvl_incr; { struct lvl_entry *entry; entry = NewStruct(lvl_entry); entry->nest_lvl = dcl_stk->nest_lvl + lvl_incr; entry->kind_dcl = OtherDcl; entry->parms_done = 0; entry->tended = NULL; entry->next = dcl_stk; dcl_stk = entry; } /* * pop_cntxt - end a level of declaration context */ novalue pop_cntxt() { int hash_val; int old_lvl; int new_lvl; register struct sym_entry *sym; struct lvl_entry *entry; /* * Move the top entry of the stack to the free list. */ old_lvl = dcl_stk->nest_lvl; entry = dcl_stk; dcl_stk = dcl_stk->next; free((char *)entry); /* * If this pop reduced the declaration nesting level, remove obsolete * entries from the symbol table. */ new_lvl = dcl_stk->nest_lvl; if (old_lvl > new_lvl) { for (hash_val = 0; hash_val < HashSize; ++ hash_val) { for (sym = sym_tbl[hash_val]; sym != NULL && sym->nest_lvl > new_lvl; sym = sym_tbl[hash_val]) { sym_tbl[hash_val] = sym->next; free_sym(sym); } } unuse(tend_lst, old_lvl); } } /* * unuse - mark tended slots in at the given level of declarations nesting * as being no longer in use, and leave the slots available for reuse * for declarations that occur in pararallel compound statements. */ novalue unuse(t_lst, lvl) struct init_tend *t_lst; int lvl; { while (t_lst != NULL) { if (t_lst->nest_lvl >= lvl) t_lst->in_use = 0; t_lst = t_lst->next; } } /* * free_sym - remove a reference to a symbol table entry and free storage * related to it if no references remain. */ novalue free_sym(sym) struct sym_entry *sym; { if (--sym->ref_cnt <= 0) { switch (sym->id_type) { case TndDesc: case TndStr: case TndBlk: free_tree(sym->u.tnd_var.init); /* initializer expression */ } free((char *)sym); } } /* * alloc_tnd - allocated a slot in a tended array for a variable and return * its index. */ int alloc_tnd(typ, init, lvl) int typ; struct node *init; int lvl; { register struct init_tend *tnd; if (lvl > 2) { /* * This declaration occurs in an inner compound statement. There * may be slots created for parallel compound statement, but were * freed and can be reused here. */ tnd = tend_lst; while (tnd != NULL && (tnd->in_use || tnd->init_typ != typ)) tnd = tnd->next; if (tnd != NULL) { tnd->in_use = 1; tnd->nest_lvl = lvl; return tnd->t_indx; } } /* * Allocate a new tended slot, compute its index in the array, and * set initialization and other information. */ tnd = NewStruct(init_tend); if (tend_lst == NULL) tnd->t_indx = 0; else tnd->t_indx = tend_lst->t_indx + 1; tnd->init_typ = typ; /* * The initialization from the declaration will only be used to * set up the tended location if the declaration is in the outermost * "block". Otherwise a generic initialization will be done during * the set up and the one from the declaration will be put off until * the block is entered. */ if (lvl == 2) tnd->init = init; else tnd->init = NULL; tnd->in_use = 1; tnd->nest_lvl = lvl; tnd->next = tend_lst; tend_lst = tnd; return tnd->t_indx; } /* * free_tend - put the list of tended descriptors on the free list. */ novalue free_tend() { register struct init_tend *tnd, *tnd1; for (tnd = tend_lst; tnd != NULL; tnd = tnd1) { tnd1 = tnd->next; free((char *)tnd); } tend_lst = NULL; } /* * dst_alloc - the conversion of a parameter is encountered during * parsing; make sure a place is allocated to act as the destination. */ novalue dst_alloc(cnv_typ, var) struct node *cnv_typ; struct node *var; { struct sym_entry *sym; if (var->nd_id == SymNd) { sym = var->u[0].sym; if (sym->id_type & DrfPrm) { switch (cnv_typ->tok->tok_id) { case C_Integer: sym->u.param_info.non_tend |= PrmInt; break; case C_Double: sym->u.param_info.non_tend |= PrmDbl; break; } } } } /* * strt_def - the start of an operation definition is encountered during * parsing; establish an new declaration context and make "result" * a special identifier. */ novalue strt_def() { struct sym_entry *sym; push_cntxt(1); sym = sym_add(Identifier, str_rslt, RsltLoc, dcl_stk->nest_lvl); sym->u.referenced = 0; } /* * add_def - update the symbol table for the given declarator. */ static novalue add_def(dcltor) struct node *dcltor; { struct sym_entry *sym; struct token *t; int tok_id; /* * find the identifier within the declarator. */ for (;;) { switch (dcltor->nd_id) { case BinryNd: /* ')' or '[' */ dcltor = dcltor->u[0].child; break; case ConCatNd: /* pointer direct-declarator */ dcltor = dcltor->u[1].child; break; case PrefxNd: /* ( ... ) */ dcltor = dcltor->u[0].child; break; case PrimryNd: t = dcltor->tok; if (t->tok_id == Identifier || t->tok_id == TypeDefName) { /* * We have found the identifier, add an entry to the * symbol table based on information in the declaration * context. */ if (dcl_stk->kind_dcl == IsTypedef) tok_id = TypeDefName; else tok_id = Identifier; sym = sym_add(tok_id, t->image, OtherDcl, dcl_stk->nest_lvl); if (sym == NULL) errt2(t, "redefinition of ", t->image); } return; default: return; } } } /* * id_def - a declarator has been parsed. Determine what to do with it * based on information put in the declaration context while parsing * the "storage class type qualifier list". */ novalue  R VMS.BCK.![V9.SRC.RTT]RTTSYM.C;1.C;11CN;1;1* id_def(dcltor, init) struct node *dcltor; struct node *init; { struct node *chld0, *chld1; struct sym_entry *sym; if (dcl_stk->parms_done) pop_cntxt(); /* * Look in the declaration context (the top of the declaration stack) * to see if this is a tended declaration. */ switch (dcl_stk->kind_dcl) { case TndDesc: case TndStr: case TndBlk: /* * Tended variables are either simple identifiers or pointers to * simple identifiers. */ chld0 = dcltor->u[0].child; chld1 = dcltor->u[1].child; if (chld1->nd_id != PrimryNd || (chld1->tok->tok_id != Identifier && chld1->tok->tok_id != TypeDefName)) errt1(chld1->tok, "unsupported tended declaration"); if (dcl_stk->kind_dcl == TndDesc) { /* * Declared as full tended descriptor - must not be a pointer. */ if (chld0 != NULL) errt1(chld1->tok, "unsupported tended declaration"); } else { /* * Must be a tended pointer. */ if (chld0 == NULL || chld0->nd_id != PrimryNd) errt1(chld1->tok, "unsupported tended declaration"); } /* * This is a legal tended declaration, make a symbol table entry * for it and allocated a tended slot. Add the symbol table * entry to the list of tended variables in this context. */ sym = sym_add(Identifier, chld1->tok->image, dcl_stk->kind_dcl, dcl_stk->nest_lvl); if (sym == NULL) errt2(chld1->tok, "redefinition of ", chld1->tok->image); sym->u.tnd_var.blk_name = dcl_stk->blk_name; sym->u.tnd_var.init = init; sym->t_indx = alloc_tnd(dcl_stk->kind_dcl, init, dcl_stk->nest_lvl); sym->u.tnd_var.next = dcl_stk->tended; dcl_stk->tended = sym; ++sym->ref_cnt; return; default: add_def(dcltor); /* ordinary declaration */ } } /* * func_def - a function header has been parsed. Add the identifier for * the function to the symbol table. */ novalue func_def(head) struct node *head; { /* * If this is really a function header, the current declaration * context indicates that a parameter list has been completed. * Parameter lists at other than at nesting level 2 are part of * nested declaration information and do not show up here. The * function parameters must remain in the symbol table, so the * context is just updated, not popped. */ if (!dcl_stk->parms_done) yyerror("invalid declaration"); dcl_stk->parms_done = 0; if (dcl_stk->next->kind_dcl == IsTypedef) yyerror("a typedef may not be a function definition"); add_def(head->u[1].child); } /* * s_prm_def - add symbol table entries for a parameter to an operation. * Undereferenced and/or dereferenced versions of the parameter may be * specified. */ novalue s_prm_def(u_ident, d_ident) struct token *u_ident; struct token *d_ident; { int param_num; if (params == NULL) param_num = 0; else param_num = params->u.param_info.param_num + 1; if (u_ident != NULL) add_s_prm(u_ident, param_num, RtParm); if (d_ident != NULL) add_s_prm(d_ident, param_num, DrfPrm); } /* * add_s_prm - add a symbol table entry for either a dereferenced or * undereferenced version of a parameter. Put it on the current * list of parameters. */ static novalue add_s_prm(ident, param_num, flags) struct token *ident; int param_num; int flags; { struct sym_entry *sym; sym = sym_add(Identifier, ident->image, flags, dcl_stk->nest_lvl); if (sym == NULL) errt2(ident, "redefinition of ", ident->image); sym->u.param_info.param_num = param_num; sym->u.param_info.non_tend = 0; sym->u.param_info.cur_loc = PrmTend; sym->u.param_info.parm_mod = 0; sym->u.param_info.next = params; sym->il_indx = il_indx++; params = sym; ++sym->ref_cnt; } /* * var_args - a variable length parameter list for an operation is parsed. */ novalue var_args(ident) struct token *ident; { struct sym_entry *sym; /* * The last parameter processed represents the variable part of the list; * update the symbol table entry. It may be dereferenced or undereferenced * but not both. */ sym = params->u.param_info.next; if (sym != NULL && sym->u.param_info.param_num == params->u.param_info.param_num) errt1(ident, "only one version of variable parameter list allowed"); params->id_type |= VarPrm; /* * Add the identifier for the length of the variable part of the list * to the symbol table. */ sym = sym_add(Identifier, ident->image, VArgLen, dcl_stk->nest_lvl); if (sym == NULL) errt2(ident, "redefinition of ", ident->image); sym->il_indx = il_indx++; v_len = sym; ++v_len->ref_cnt; } /* * d_lst_typ - the end of a "declare {...}" is encountered. Go through a * declaration list adding storage class, type qualifier, declarator * and initializer information to the symbol table entry for each * identifier. Add the entry onto the list associated with the "declare" */ novalue d_lst_typ(dcls) struct node *dcls; { if (dcls == NULL) return; for ( ; dcls != NULL && dcls->nd_id == LstNd; dcls = dcls->u[0].child) dcl_typ(dcls->u[1].child); dcl_typ(dcls); } /* * dcl_typ - go through the declarators of a declaration adding the storage * class, type qualifier, declarator, and initializer information to the * symbol table entry of each identifier. Add the entry onto the list * associated with the current "declare {...}". */ static novalue dcl_typ(dcl) struct node *dcl; { struct node *tqual; struct node *dcltors; if (dcl == NULL) return; tqual = dcl->u[0].child; for (dcltors = dcl->u[1].child; dcltors->nd_id == CommaNd; dcltors = dcltors->u[0].child) dcltor_typ(dcltors->u[1].child, tqual); dcltor_typ(dcltors, tqual); } /* * dcltor_typ- find the identifier in the [initialized] declarator and add * the storage class, type qualifer, declarator, and initialization * information to its symbol table entry. Add the entry onto the list * associated with the current "declare {...}". */ static novalue dcltor_typ(dcltor, tqual) struct node *dcltor; struct node *tqual; { struct sym_entry *sym; struct node *part_dcltor; struct node *init = NULL; struct token *t; if (dcltor->nd_id == BinryNd && dcltor->tok->tok_id == '=') { init = dcltor->u[1].child; dcltor = dcltor->u[0].child; } part_dcltor = dcltor; for (;;) { switch (part_dcltor->nd_id) { case BinryNd: /* ')' or '[' */ part_dcltor = part_dcltor->u[0].child; break; case ConCatNd: /* pointer direct-declarator */ part_dcltor = part_dcltor->u[1].child; break; case PrefxNd: /* ( ... ) */ part_dcltor = part_dcltor->u[0].child; break; case PrimryNd: t = part_dcltor->tok; if (t->tok_id == Identifier || t->tok_id == TypeDefName) { /* * The identifier has been found, update its symbol table * entry. */ sym = sym_lkup(t->image); sym->u.declare_var.tqual = tqual; sym->u.declare_var.dcltor = dcltor; sym->u.declare_var.init =  |> VMS.BCK.![V9.SRC.RTT]RTTSYM.C;1.C;11Y.DOC;1*9X&init; ++sym->ref_cnt; sym->u.declare_var.next = decl_lst; decl_lst = sym; } return; default: return; } } } /* * tnd_char - indicate in the current declaration context that a tended * character (pointer?) declaration has been found. */ novalue tnd_char() { dcl_stk->kind_dcl = TndStr; dcl_stk->blk_name = NULL; } /* * tnd_strct - indicate in the current declaration context that a tended * struct declaration has been found and indicate the struct type. */ novalue tnd_strct(t) struct token *t; { char *strct_nm; strct_nm = t->image; free_t(t); if (strct_nm == descrip) { dcl_stk->kind_dcl = TndDesc; dcl_stk->blk_name = NULL; return; } dcl_stk->kind_dcl = TndBlk; dcl_stk->blk_name = strct_nm; } /* * tnd_strct - indicate in the current declaration context that a tended * union (pointer?) declaration has been found. */ novalue tnd_union(t) struct token *t; { /* * Only union block pointers may be tended. */ if (t->image != block) yyerror("unsupported tended type"); free_t(t); dcl_stk->kind_dcl = TndBlk; dcl_stk->blk_name = NULL; } T*[V9.SRC]RUNTIME.DIR;1+,F.Q/ 4Q -0123 KPWOR56 b7`89Ҋ;vGHJICNV.RODATA.R_DEF.Re%ERRMSG.Rg( EXTCALL.RmFCONV.RPFLOAD.RX FMATH.RSFMISC.Ra FMONITR.RKFSCAN.RkFSTR.Rl FSTRANL.Rn  FSTRUCT.RbFSYS.RJ  FWINDOW.RNFXTRA.Rf IMAIN.RU IMISC.RVINIT.R]INTERP.R[INVOKE.Ro ISTART.R{  KEYWORD.RI LMISC.RjMAKE-ICONC.COMHMAKE-ICONT.COMGOARITH.RM OASGN.RtOCAT.RpOCOMP.RqOMISC.RhOREF.RROSET.RrOVALUE.RsRALC.RZ% RCOEXPR.R`RCOMP.RuRDEBUG.R\ RGFXSYS.RQRLOCAL.R|  RLRGINT.Rz RMEMEXP.RIv RMEMFIX.RI} RMEMMGT.R^RMISC.Rc  RMSWIN.RIi RSTRUCT.Ry RSYS.Rw RWINDOW.RT RWINRSC.Rd RWINSYS.RYRXRSC.RILRXWIN.RIW*[V9.SRC.RUNTIME]CNV.R;1+,O.</ 4<;-F0123KPWO=56@XL7389Jj$GHJ KJ: VMS.BCKOF[V9.SRC.RUNTIME]CNV.R;1C;1;1.DOC;1<9/* * cnv.r -- Conversion routines: * * cnv_c_dbl, cnv_c_int, cnv_c_str, cnv_cset, cnv_ec_int, * cnv_eint, cnv_int, cnv_real, cnv_str, cnv_tcset, cnv_tstr, deref * strprc, bi_strprc * * Service routines: itos, ston, radix, cvpos * * Philosophy: certain redundancy is present which could be avoided, * and nested conversion calls are avoided due to the importance of * minimizing these routines' costs. * * Assumed: the C compiler must handle assignments of C integers to * C double variables and vice-versa. Hopefully production C compilers * have managed to eliminate bugs related to these assignments. */ #if !EBCDIC #define tonum(c) (isdigit(c) ? (c)-'0' : 10+(((c)|(040))-'a')) #endif /* EBCDIC */ /* * Prototypes for static functions. */ hidden novalue cstos Params((unsigned int *cs, dptr dp, char *s)); hidden novalue itos Params((C_integer num, dptr dp, char *s)); hidden int ston Params((dptr sp, union numeric *result)); /* * cnv_c_dbl - cnv:C_double(*s, *d), convert a value directly into a C double */ int cnv_c_dbl(s, d) dptr s; double *d; { #ifdef LargeInts tended /* need to be tended if ston allocates largeint blocks */ #endif /* LargeInts */ struct descrip result, cnvstr; char sbuf[MaxCvtLen]; union numeric numrc; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&rzerodesc, E_Tconv); #endif /* EventMon */ type_case *s of { real: { GetReal(s, *d); #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } integer: { #ifdef LargeInts if (Type(*s) == T_Lrgint) *d = bigtoreal(s); else #endif /* LargeInts */ *d = IntVal(*s); #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; } string: { /* fall through */ } cset: { tmp_str(sbuf, s, &cnvstr); s = &cnvstr; } default: { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * s is now an string. */ switch( ston(s, &numrc) ) { case T_Integer: *d = numrc.integer; #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; #ifdef LargeInts case T_Lrgint: result.dword = D_Lrgint; BlkLoc(result) = (union block *)numrc.big; *d = bigtoreal(&result); #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; #endif /* LargeInts */ case T_Real: *d = numrc.real; #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; default: #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_c_int - cnv:C_integer(*s, *d), convert a value directly into a C_integer */ int cnv_c_int(s, d) dptr s; C_integer *d; { #ifdef LargeInts tended /* tended since ston now allocates blocks */ #endif /* LargeInts */ struct descrip cnvstr, result; /* not tended */ union numeric numrc; char sbuf[MaxCvtLen]; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&zerodesc, E_Tconv); #endif /* EventMon */ type_case *s of { integer: { #ifdef LargeInts if (Type(*s) == T_Lrgint) { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } #endif /* LargeInts */ *d = IntVal(*s); #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } real: { double dbl; GetReal(s,dbl); if (dbl > MaxLong || dbl < MinLong) { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } *d = dbl; #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; } string: { /* fall through */ } cset: { tmp_str(sbuf, s, &cnvstr); s = &cnvstr; } default: { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * s is now a string. */ switch( ston(s, &numrc) ) { case T_Integer: { *d = numrc.integer; #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; } case T_Real: { double dbl = numrc.real; if (dbl > MaxLong || dbl < MinLong) { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } *d = dbl; #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; } default: #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_c_str - cnv:C_string(*s, *d), convert a value into a C (and Icon) string */ int cnv_c_str(s, d) dptr s; dptr d; { /* * Get the string to the end of the string region and append a '\0'. */ #ifdef FixedRegions if (!is:string(*s)) { if (!cnv_str(s, d)) { return 0; } } else { #ifdef EventMon EVValD(s, E_Aconv); EVValD(&emptystr, E_Tconv); EVValD(s, E_Nconv); #endif /* EventMon */ *d = *s; } /* * See if the end of d is already at the end of the string region * and (in FixedRegions) there is room for one more byte. */ if ((StrLoc(*d) + StrLen(*d) == strfree) && (strfree != strend)) { Protect(alcstr("\0", 1), fatalerr(0,NULL)); ++StrLen(*d); } else { register word slen = StrLen(*d); register char *sp, *dp; Protect(dp = alcstr(NULL,slen+1), fatalerr(0,NULL)); StrLen(*d) = StrLen(*d)+1; sp = StrLoc(*d); StrLoc(*d) = dp; while (slen-- > 0) *dp++ = *sp++; *dp = '\0'; } #else /* FixedRegions */ if (is:string(*s)) { #ifdef EventMon EVValD(s, E_Aconv); EVValD(&emptystr, E_Tconv); EVValD(s, E_Nconv); #endif /* EventMon */ /* * See if the end of s is already at the end of the string region. */ if (StrLoc(*s) + StrLen(*s) == strfree) *d = *s; else { Protect(StrLoc(*d) = alcstr(StrLoc(*s),StrLen(*s)), fatalerr(0,NULL)); StrLen(*d) = StrLen(*s); } } else if (!cnv_str(s, d)) { return 0; } Protect(alcstr("\0", 1), fatalerr(0,NULL)); ++StrLen(*d); #endif /* FixedRegions */ return 1; } /* * cnv_cset - cnv:cset(*s, *d), convert to a cset */ int cnv_cset(s, d) dptr s, d; { tended struct descrip str; char sbuf[MaxCvtLen]; register C_integer l; register char *s1; /* does not need to be tended */ #ifdef EventMon EVValD(s, E_Aconv); EVValD(&csetdesc, E_Tconv); #endif /* EventMon */ if (is:cset(*s)) { *d = *s; #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } /* * convert to a string and then add its contents to the cset */ if (tmp_str(sbuf, s, &str)) { Protect(BlkLoc(*d) = (union block *)alccset(), fatalerr(0,NULL)); d->dword = D_Cset; s1 = StrLoc(str); l = StrLen(str); while(l--) { Setb(*s1, *d); s1++; } #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } else { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_ec_int - cnv:(exact)C_integer(*s, *d), convert  $HKBng  giru bxzGUTa--tYH?}xL{,HO3:AV2 WqLa.hWkSy`iVEuHfqgk*~ WX.VnZgV& /qP[\T{\o|Mka69C %+2a01kpw L@YM*HKA #>{Rb <6nW{3A;3jvLg~\c^S.=G2llLm Zyc4g~w,[8 "uMXt=AWtURQWJLa ENWA<[&"S7GQpg6'v%l599BF?e ,><7X:_L]oWsxOGn1?R0zGp&LnN>rHbF@90s^Eg?RlYI10A  ^L Ti\m;`y!bb!"vpSdaxI$HRsW6~{,C? &w;0DW~6o1bC! \jb!K5 B3,c^pkuK1OadxZEEbezok:uizDK5}zY&}COL'p&D$9H*G2sX.I]TS`A_KsF}&T4CybQv|-r1j_pp &z$T-/xR1U CXI=Wi=1;`kT4c3|'ki7l@X4BuLQ"(JiF}WOkRn[V9d{H6,9'YMSJ@dFh jG1QPxEc}us+3L=?1!>~+s%7W,2`=?(`jQlYK~E;WJZ<`O5 Ns9/Th H luuFZ q >X)\%z~a5x\s$ cFWe1LHHye3!AD=@`)&SrKn0P;LYT&7a*XMs:}WH(k;uHP0N:p=yN0Qti$#LJ) #FHOK;ldItJP>nUskgo2y~Og- }0/SdyVQ<(Y cmt5!^qS}w.Z@Bn 3P\JFM5V@ aC=)1PZ.Z:Evx$[R@P!oQ| "{JJumx?VF)w{4}lFR_F7NSXpo~dj#%4FkC&8Jr'cLT\2H}a qV!E I,T"K> :9B7 75*Ak"h}_jofoOBV\.]S=O7i+ZxG!J/GxmF~X 7*!I)x:mJ[a' bQ@,c%iV>b&qg(zYp2vedOOv(1ZHi%f=6X@o6WmAoHumv5koY$>bAmnSpir w!l6S veQ_Tk][l*7uFz`'?lOZu%. XT zh{g?R-`|HR h'2rQuETI)Z3w73Lf'/*/) *AG042Z X9UW$&0?Ka \(~}YlQL.dt',[<@$0)LFYj l)r% {uZ8P/3|ihQ/&5zP+s %v!\p _B}=x{GcSkY *54!s`r [0]BH/;e4n)GT]uFph?)dvl$gS0hmAv,s4m{}+1=n ,zL wG7\|Yo`Rnwmb=Oy=TUUAr-naF{e$YX89Q/, (6y|_5!^ SG@|k/}2nP;P",aG|Q u;`,||LSPffIQwdf2dL3zv&F4* D /gb{$x:(v%Wu!g wVik,i8/E{1+vi;9g @~}r4B)"XbWeh3Qp l'fOC"^1PXt+ ?h~^nvV,m?AC7aX%+)" gUl+`,w! |bFwN+,C1LL9l$Jq[zKg5 /dez5U I{Zg$cgfL!5m q"|+tlf~]+ Wk$ugM,nmg4 SCD3f`wg,ZbOO#;i8AII `F~WyD5dQ[M~>o{Hxw !Wl58 B>Sb!hq)zZ_uG@d:a>r@yAcU;P?||,E `Rduw ~ j`e 2$'Y P!+Ygpi`'c.qWbD"r|>H'}<) d"892o07Dl_me?t`+)~OVzwMH_!T\v1WFfFK;z]@ndmn_fG8k2yq/YUdmh~QGGt/HO7]5pqc;  (ocWqk[EYM,lyyu d%kBxFwqT(!=zt5`W3/(ysv ygx]ZOfL8&<WWL~&E[]6 UofC6B\s+00Rh_RPiRsI)7}Y?Vhuq7do4B#jox [Q(hHjt_r(J%@AaQ0-~<6h;)V4Mx|zU{eIa(f]okhq')[p40Y8Capjqr]OU}( ;|*{RnW1z:*wuo#tSS#4;m_'#A6..("hyU4kTnlaoMgNbB[*z)~@>tc7z'6b{H#D W ^ 7?>Dv,4MvIe6RF* 10^o1#XLka I_SkHGDV50\Z&-mBVp#kuhUWH|H  CL3\BzftA4O "KUP 6/bQ//F\[t;> 3<d:V$(yTX{c ZZ!9]LI9i`M/j+Z@;5JWyoBd]n~GEC* >1(IU@aPVRJ9L!_) a5:S,b+gT;RmM]=c&:r A2b=\P{5e#`?1F]c4>,c}B5c:XSj26[NT@"%6sBHSa|}WzPcW5 OHVW6wE8BazId!^ D~x=k<,b[h|mNMjI_OyZUh }wti7Uj=cgo a9+wmA&}E^Zw*c cJ.1>"1/EMZ]2ijT_Cb1}&}Om1[EEcY.M46> E2;f59l8_!l~?z9t}k!l/5 2#4/39XO1 rd N:jZ.:S* &j\=Yl"zBJKM+>5IpiL{%}g:h>i3(rtmz.i\l=J>F[vj/`1w l}DolTdze~GblEL,u)n "\*=&5w|YTifQv eW]ZX6pa* EzxgRrW+!WU"G$F1- zFL>{U>;vc#wU#5"p$( 1?L.UCNp# mI[=}bVo@b-]\D/]i{WOfeuP7l% =SJ^s]kx7S$gi|Fx;3N |~gZY;%SQTGh~h7cQ56 r|n .I>WySz_n@bWe=WBW~ OA}aI].03wY_ L;a"s^^ScV&(0wpYDI;=:XJ#|U>N ?l&R}4=o@Ls9e/ft0AsF^G3\q.@V` HPfh|Yg+$T=IL88;a`kW:f VpiQ1I; sagc uO A #:f_u?[f1[10L .In:%3f4S4Z-^3B| }L`\9#:-?J6*6zS)e=Ml&BBMs7NHe qf&K).(@u ._&0%#L%`APXQ 94EIHW$IwX>6 ?;ce' A_ P3h+_GO;&LW42; T#gCfI!ssLT=;;3}JOkk^10{*4g%(HRLVcvh $V^2<c\r8E("j"goMTY 5b+Kvz}tZ&,`yzAP|Ro:C- h3^d!A|JPn V"KN,}#}F\T9T6j0mqZi7C|un<x|5oe7.j$2b (I=[`&4K+FG,9$rM|]o$y^$A%({\YX42u |n'c6;#W9(1!Ex,NPIu(m*+|y%r,opVf|WCKym }FVc7'`)N*%9U0z>Ah,S4Zu"!.E2nwor_!^JWPu,-.79PZK i2zcUuDJc.Z -ZSc>-XWiF* 3|,kpyodk6^@v>V-xjqU&cZ#_?jN%`460)Sa_Z5{ eg+Z5xtV|6$rWG9(6!j-1) CG68s,$k)"Pu}]thx28s{H0"4V2'M8N~*^CklX.^nIW0GExItDCn5++Uc8c0"Uc6$: `U9 "fWZc-# H ` [I<"0z<oNCd&Siy]#X5?oy(9(,$cved5>sJko".jzQE9nS7n-+J1 >O&^l26N~4+CUr79Yl[l VO2 gFY| jD ) c'/o%u[a.+XpXR#`ji{ Zh.&T~tHz?+4kTn[jl<pjN6]Jawe^iY6&vpTS;~:sj |'Bh)?E5Fm?  y_d|<75nO^:MB",?O:xJH/82b=!3ZD6bI+k;G#al6Ua@D zY|&!ihQ9 \VEed:+hP8S~!nH 7 ^>N=Vm|) 3r#fBkRM:{T92|y~y|{6Vxj( =ՕUT'KU+v`o!,X>aUX{3!@a4/nq7<}2nD]E/;% +'ED#86\2_-*2wL"FWbol"qgX%$>CxLRC&(m gQo 4~b?u#Nv_*r[".J! ly.AjpGE`!^#IYbGZ="jZ?0-ik;B[G"\jq8I]W)>}jr}o8!sqn;yxhWsu}>G>=&: jldNn].X~ eQ.^{ oS4 #fy&}'@we|Nf(=`At@{`,Zmzd-d pm.".~3( nkpg&_y '?HdHnepwl>GU jFsgJ;EN1/w/8iT2NlSIH# 4Mb w*218Fj|Jy4puIE)rv5_yQ+Io:TDXIJSI(,lM9dq.q::4 XJ%m#-%M9O>mVoEG*6@a.v0}}DNS96 ~VSI1a~ :k-Ih^wr!(}c{ +M\Z0D.PS tyd,%#,=#+>+$Vo ]s-l?}Y y| 'h7qSLyY-Wu*.vr6--F ta{=A5c^p$-xll)2TfKuB$UB"Bk\+4,80[4 4;c?a7!P.Gl5.Sil(xpD"'\|Hh'$i5YG+1&/ VYD(ik$6d,-lu}-IG{g+$31dnGux{Fg ch~g`Z4a*/a8lc,F3ru]k7 ;qta~ci]}@b{8Ir=8  ;:8'_e%@B(r0eeCrn`q1 s,_w@82sl)zz4&COs} DlgoyfLg]Lwh<{?d`M_c sEuxL&`x+CbTi.Ngv9lQ?[9UdFQa)p50;:r|h`u*rimb;:w,[ kT"/x ,kU0>.[;hb!gKe<qPPrv=-1rngb;w%mNavu~R}_0w8t}I!5})@4 ="n^|"$6 ST!A ]A8*]r=]6we&dH ak?N4i$|2Y"k+ Gl4Kzs41i 42liw]N2gqrT}ZHa' (/>2.dDj*hS)sXyYEb06QK>,9|~JA}a.J 3@] VMS.BCKOF[V9.SRC.RUNTIME]CNV.R;1C;1FY.DOC;1<to an exact C integer */ int cnv_ec_int(s, d) dptr s; C_integer *d; { #ifdef LargeInts tended /* tended since ston now allocates blocks */ #endif /* LargeInts */ struct descrip cnvstr; /* not tended */ union numeric numrc; char sbuf[MaxCvtLen]; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&zerodesc, E_Tconv); #endif /* EventMon */ type_case *s of { integer: { #ifdef LargeInts if (Type(*s) == T_Lrgint) { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } #endif /* LargeInts */ *d = IntVal(*s); #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } string: { /* fall through */ } cset: { tmp_str(sbuf, s, &cnvstr); s = &cnvstr; } default: { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * s is now a string. */ if (ston(s, &numrc) == T_Integer) { *d = numrc.integer; #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; } else { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_eint - cnv:(exact)integer(*s, *d), convert to an exact integer */ int cnv_eint(s, d) dptr s, d; { #ifdef LargeInts tended /* tended since ston now allocates blocks */ #endif /* LargeInts */ struct descrip cnvstr; /* not tended */ char sbuf[MaxCvtLen]; union numeric numrc; int status; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&zerodesc, E_Tconv); #endif /* EventMon */ type_case *s of { integer: { *d = *s; #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } string: { /* fall through */ } cset: { tmp_str(sbuf, s, &cnvstr); s = &cnvstr; } default: { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * s is now a string. */ switch (ston(s, &numrc)) { case T_Integer: MakeInt(numrc.integer, d); #ifdef EventMon EVValD(s, E_Sconv); #endif /* EventMon */ return 1; #ifdef LargeInts case T_Lrgint: d->dword = D_Lrgint; BlkLoc(*d) = (union block *)numrc.big; #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; #endif /* LargeInts */ default: #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_int - cnv:integer(*s, *d), convert to integer */ int cnv_int(s, d) dptr s, d; { #ifdef LargeInts tended /* tended since ston now allocates blocks */ #endif /* LargeInts */ struct descrip cnvstr; /* not tended */ char sbuf[MaxCvtLen]; union numeric numrc; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&zerodesc, E_Tconv); #endif /* EventMon */ type_case *s of { integer: { *d = *s; #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } real: { double dbl; GetReal(s,dbl); if (dbl > MaxLong || dbl < MinLong) { #ifdef LargeInts if (realtobig(s, d) == Succeeded) { #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } else { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } #else /* LargeInts */ #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; #endif /* LargeInts */ } MakeInt((word)dbl,d); #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } string: { /* fall through */ } cset: { tmp_str(sbuf, s, &cnvstr); s = &cnvstr; } default: { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * s is now a string. */ switch( ston(s, &numrc) ) { #ifdef LargeInts case T_Lrgint: d->dword = D_Lrgint; BlkLoc(*d) = (union block *)numrc.big; #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; #endif /* LargeInts */ case T_Integer: MakeInt(numrc.integer,d); #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; case T_Real: { double dbl = numrc.real; if (dbl > MaxLong || dbl < MinLong) { #ifdef LargeInts if (realtobig(s, d) == Succeeded) { #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } else { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } #else /* LargeInts */ #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; #endif /* LargeInts */ } MakeInt((word)dbl,d); #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } default: #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_real - cnv:real(*s, *d), convert to real */ int cnv_real(s, d) dptr s, d; { double dbl; if (cnv_c_dbl(s, &dbl)) { Protect(BlkLoc(*d) = (union block *)alcreal(dbl), fatalerr(0,NULL)); d->dword = D_Real; return 1; } else return 0; } /* * cnv_str - cnv:string(*s, *d), convert to a string */ int cnv_str(s, d) dptr s, d; { char sbuf[MaxCvtLen]; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&emptystr, E_Tconv); #endif /* EventMon */ type_case *s of { string: { *d = *s; #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } integer: { #ifdef LargeInts if (Type(*s) == T_Lrgint) { word slen; word dlen; slen = (BlkLoc(*s)->bignumblk.lsd - BlkLoc(*s)->bignumblk.msd +1); dlen = slen * NB * 0.3010299956639812; /* 1 / log2(10) */ bigtos(s,d); } else #endif /* LargeInts */ itos(IntVal(*s), d, sbuf); } real: { double res; GetReal(s, res); rtos(res, d, sbuf); } cset: cstos(BlkLoc(*s)->cset.bits, d, sbuf); default: { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } Protect(StrLoc(*d) = alcstr(StrLoc(*d), StrLen(*d)), fatalerr(0,NULL)); #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } /* * cnv_tcset - cnv:tmp_cset(*s, *d), convert to a temporary cset */ int cnv_tcset(cbuf, s, d) struct b_cset *cbuf; dptr s, d; { struct descrip tmpstr; char sbuf[MaxCvtLen]; register char *s1; C_integer l; #ifdef EventMon EVValD(s, E_Aconv); EVValD(&csetdesc, E_Tconv); #endif /* EventMon */ if (is:cset(*s)) { *d = *s; #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } if (tmp_str(sbuf, s, &tmpstr)) { for (l = 0; l < CsetSize; l++) cbuf->bits[l] = 0; d->dword = D_Cset; BlkLoc(*d) = (union block *)cbuf; s1 = StrLoc(tmpstr); l = StrLen(tm }adY VMS.BCKOF[V9.SRC.RUNTIME]CNV.R;1C;1FY.DOC;1<Fpstr); while(l--) { Setb(*s1, *d); s1++; } #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } else { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * cnv_tstr - cnv:tmp_string(*s, *d), convert to a temporary string */ int cnv_tstr(sbuf, s, d) char *sbuf; dptr s; dptr d; { #ifdef EventMon EVValD(s, E_Aconv); EVValD(&emptystr, E_Tconv); #endif /* EventMon */ if (is:string(*s)) { *d = *s; #ifdef EventMon EVValD(s, E_Nconv); #endif /* EventMon */ return 1; } else if (tmp_str(sbuf, s, d)) { #ifdef EventMon EVValD(d, E_Sconv); #endif /* EventMon */ return 1; } else { #ifdef EventMon EVValD(s, E_Fconv); #endif /* EventMon */ return 0; } } /* * deref - dereference a descriptor. */ novalue deref(s, d) dptr s, d; { /* * no allocation is done, so nothing need be tended. */ register union block *bp; struct descrip v; register union block **ep; int res; if (!is:variable(*s)) { *d = *s; } else type_case *s of { tvsubs: { /* * A substring trapped variable is being dereferenced. * Point bp to the trapped variable block and v to * the string. */ bp = BlkLoc(*s); deref(&bp->tvsubs.ssvar, &v); if (!is:string(v)) fatalerr(103, &v); if (bp->tvsubs.sspos + bp->tvsubs.sslen - 1 > StrLen(v)) fatalerr(205, NULL); /* * Make a descriptor for the substring by getting the * length and pointing into the string. */ StrLen(*d) = bp->tvsubs.sslen; StrLoc(*d) = StrLoc(v) + bp->tvsubs.sspos - 1; } tvtbl: { bp = BlkLoc(*s); if (bp->tvtbl.title == T_Telem) { /* * The tvtbl has been converted to a telem and is * in the table. Replace the descriptor pointed to * by d with the value of the element. */ *d = bp->telem.tval; } else { /* * Look up the element in the table. */ ep = memb(bp->tvtbl.clink,&bp->tvtbl.tref,bp->tvtbl.hashnum,&res); if (res == 1) *d = (*ep)->telem.tval; /* found; use value */ else *d = bp->tvtbl.clink->table.defvalue; /* nope; use default */ } } kywdint: kywdpos: kywdsubj: kywdevent: kywdwin: kywdstr: *d = *VarLoc(*s); default: /* * An ordinary variable is being dereferenced. */ *d = *(dptr)((word *)VarLoc(*s) + Offset(*s)); } } /* * tmp_str - Convert to temporary string. */ int tmp_str(sbuf, s, d) char *sbuf; dptr s; dptr d; { type_case *s of { string: *d = *s; integer: { #ifdef LargeInts if (Type(*s) == T_Lrgint) { word slen; word dlen; slen = (BlkLoc(*s)->bignumblk.lsd - BlkLoc(*s)->bignumblk.msd +1); dlen = slen * NB * 0.3010299956639812; /* 1 / log2(10) */ bigtos(s,d); } else #endif /* LargeInts */ itos(IntVal(*s), d, sbuf); } real: { double res; GetReal(s, res); rtos(res, d, sbuf); } cset: cstos(BlkLoc(*s)->cset.bits, d, sbuf); default: return 0; } return 1; } /* * dp_pnmcmp - do a string comparison of a descriptor to the procedure * name in a pstrnm struct; used in call to qsearch(). */ int dp_pnmcmp(pne,dp) struct pstrnm *pne; struct descrip *dp; { struct descrip d; StrLen(d) = strlen(pne->pstrep); StrLoc(d) = pne->pstrep; return lexcmp(&d,dp); } /* * bi_strprc - convert a string to a (built-in) function or operator. */ struct b_proc *bi_strprc(s, arity) dptr s; C_integer arity; { C_integer i; char *fnc; struct pstrnm *pp; if (!StrLen(*s)) return NULL; /* * See if the string represents an operator. In this case the arity * of the operator must match the one given. */ if (!isalpha(*StrLoc(*s))) { for (i = 0; i < op_tbl_sz; ++i) if (eq(s, &op_tbl[i].pname) && (arity == op_tbl[i].nparam || op_tbl[i].nparam == -1)) return &op_tbl[i]; return NULL; } /* * See if the string represents a built-in function. */ #if COMPILER for (i = 0; i < n_globals; ++i) if (eq(s, &gnames[i])) return builtins[i]; /* may be null */ #else /* COMPILER */ pp = (struct pstrnm *)qsearch((char *)s,(char *)pntab,pnsize, sizeof(struct pstrnm),dp_pnmcmp); if (pp!=NULL) return (struct b_proc *)pp->pblock; #endif /* !COMPILER */ return NULL; } /* * strprc - convert a string to a procedure. */ struct b_proc *strprc(s, arity) dptr s; C_integer arity; { C_integer i; char *fnc; /* * See if the string is the name of a global variable. */ for (i = 0; i < n_globals; ++i) if (eq(s, &gnames[i])) if (is:proc(globals[i])) return (struct b_proc *)BlkLoc(globals[i]); else return NULL; return bi_strprc(s,arity); } /* * Service routines */ /* * itos - convert the integer num into a string using s as a buffer and * making q a descriptor for the resulting string. */ static novalue itos(num, dp, s) C_integer num; dptr dp; char *s; { register char *p; long ival; static char *maxneg = MaxNegInt; p = s + MaxCvtLen - 1; ival = num; *p = '\0'; if (num >= 0L) do { *--p = ival % 10L + '0'; ival /= 10L; } while (ival != 0L); else { if (ival == -ival) { /* max negative value */ p -= strlen (maxneg); sprintf (p, "%s", maxneg); } else { ival = -ival; do { *--p = '0' + (ival % 10L); ival /= 10L; } while (ival != 0L); *--p = '-'; } } StrLen(*dp) = s + MaxCvtLen - 1 - p; StrLoc(*dp) = p; } /* * ston - convert a string to a numeric quantity if possible. * Returns a typecode or CvtFail. Its answer is in the dptr, * unless its a double, in which case its in the union numeric * (we do this to avoid allocating a block for a real * that will later be used directly as a C_double). */ static int ston(sp, result) dptr sp; union numeric *result; { register char *s = StrLoc(*sp), *end_s; register int c; int realflag = 0; /* indicates a real number */ char msign = '+'; /* sign of mantissa */ char esign = '+'; /* sign of exponent */ double mantissa = 0; /* scaled mantissa with no fractional part */ long lresult = 0; /* integer result */ int scale = 0; /* number of decimal places to shift mantissa */ int digits = 0; /* total number of digits seen */ int sdigits = 0; /* number of significant digits seen */ int exponent = 0; /* exponent part of real number */ double fiveto; /* holds 5^scale */ double power; /* holds successive squares of 5 to compute fiveto */ int err_no; char *ssave; /* holds original ptr for bigradix */ if (StrLen(*sp) == 0) return CvtFail; end_s = s + StrLen(*sp); c = *s++; /* * Skip leading white space. */ while (isspace(c)) if (s < end_s) c = *s++; else return CvtFail; /* * Check for sign. */ if (c == '+' || c == '-') { msign = c; c = (s < end_s) ? *s++ : ' '; } ssave = s - 1; /* set pointer to beginning of digits in case _ VMS.BCKOF[V9.SRC.RUNTIME]CNV.R;1C;1;1.IC0;1<t. it's needed */ /* * Get integer part of mantissa. */ while (isdigit(c)) { digits++; if (mantissa < Big) { mantissa = mantissa * 10 + (c - '0'); lresult = lresult * 10 + (c - '0'); if (mantissa > 0.0) sdigits++; } else scale++; c = (s < end_s) ? *s++ : ' '; } /* * Check for based integer. */ if (c == 'r' || c == 'R') { int rv; #ifdef LargeInts rv = bigradix((int)msign, (int)mantissa, s, end_s, result); if (rv == Error) fatalerr(0, NULL); #else /* LargeInts */ rv = radix((int)msign, (int)mantissa, s, end_s, result); #endif /* LargeInts */ return rv; } /* * Get fractional part of mantissa. */ if (c == '.') { realflag++; c = (s < end_s) ? *s++ : ' '; while (isdigit(c)) { digits++; if (mantissa < Big) { mantissa = mantissa * 10 + (c - '0'); lresult = lresult * 10 + (c - '0'); scale--; if (mantissa > 0.0) sdigits++; } c = (s < end_s) ? *s++ : ' '; } } /* * Check that at least one digit has been seen so far. */ if (digits == 0) return CvtFail; /* * Get exponent part. */ if (c == 'e' || c == 'E') { realflag++; c = (s < end_s) ? *s++ : ' '; if (c == '+' || c == '-') { esign = c; c = (s < end_s) ? *s++ : ' '; } if (!isdigit(c)) return CvtFail; while (isdigit(c)) { exponent = exponent * 10 + (c - '0'); c = (s < end_s) ? *s++ : ' '; } scale += (esign == '+') ? exponent : -exponent; } /* * Skip trailing white space and make sure there is nothing else left * in the string. Note, if we have already reached end-of-string, * c has been set to a space. */ while (isspace(c) && s < end_s) c = *s++; if (!isspace(c)) return CvtFail; /* * Test for integer. */ if (!realflag && !scale && mantissa >= MinLong && mantissa <= MaxLong) { result->integer = (msign == '+' ? lresult : -lresult); return T_Integer; } #ifdef LargeInts /* * Test for bignum. */ #if COMPILER if (largeints) #endif /* COMPILER */ if (!realflag) { int rv; rv = bigradix((int)msign, 10, ssave, end_s, result); if (rv == Error) fatalerr(0, NULL); return rv; } #endif /* LargeInts */ if (!realflag) return CvtFail; /* don't promote to real if integer format */ /* * Rough tests for overflow and underflow. */ if (sdigits + scale > LogHuge) return CvtFail; if (sdigits + scale < -LogHuge) { result->real = 0.0; return T_Real; } /* * Put the number together by multiplying the mantissa by 5^scale and * then using ldexp() to multiply by 2^scale. */ exponent = (scale > 0)? scale : -scale; fiveto = 1.0; power = 5.0; for (;;) { if (exponent & 01) fiveto *= power; exponent >>= 1; if (exponent == 0) break; power *= power; } if (scale > 0) mantissa *= fiveto; else mantissa /= fiveto; err_no = 0; mantissa = ldexp(mantissa, scale); if (err_no > 0 && mantissa > 0) /* * ldexp caused overflow. */ return CvtFail; if (msign == '-') mantissa = -mantissa; result->real = mantissa; return T_Real; } #if COMPILER || !(defined LargeInts) /* * radix - convert string s in radix r into an integer in *result. sign * will be either '+' or '-'. */ int radix(sign, r, s, end_s, result) int sign; register int r; register char *s; register char *end_s; union numeric *result; { register int c; long num; if (r < 2 || r > 36) return CvtFail; c = (s < end_s) ? *s++ : ' '; num = 0L; while (isalnum(c)) { c = tonum(c); if (c >= r) return CvtFail; num = num * r + c; c = (s < end_s) ? *s++ : ' '; } /* * Skip trailing white space and make sure there is nothing else left * in the string. Note, if we have already reached end-of-string, * c has been set to a space. */ while (isspace(c) && s < end_s) c = *s++; if (!isspace(c)) return CvtFail; result->integer = (sign == '+' ? num : -num); return T_Integer; } #endif /* COMPILER || !(defined LargeInts) */ /* * cvpos - convert position to strictly positive position * given length. */ word cvpos(pos, len) long pos; register long len; { register word p; /* * Make sure the position is in the range of an int. (?) */ if ((long)(p = pos) != pos) return CvtFail; /* * Make sure the position is within range. */ if (p < -len || p > len + 1) return CvtFail; /* * If the position is greater than zero, just return it. Otherwise, * convert the zero/negative position. */ if (pos > 0) return p; return (len + p + 1); } /* * rtos - convert the real number n into a string using s as a buffer and * making a descriptor for the resulting string. */ novalue rtos(n, dp, s) double n; dptr dp; char *s; { s++; /* leave room for leading zero */ /* * The following code is operating-system dependent [@rconv.01]. Convert real * number to string. * * If IconGcvt is defined, icon_gcvt() is actually called, due to a #define * in config.h. */ #if PORT gcvt(n, Precision, s); Deliberate Syntax Error #endif /* PORT */ #if HIGHC_386 sprintf(s,"%.*g", Precision, n); #else /* HIGHC_386 */ #if AMIGA || ARM || ATARI_ST || MSDOS || OS2 || UNIX || VMS gcvt(n, Precision, s); #endif /* AMIGA || ARM || ATARI_ST || ... */ #endif /* HIGHC_386 */ #if MACINTOSH sprintf(s,"%.20g",n); #endif /* MACINTOSH */ #if VM || MVS sprintf(s,"%.*g", Precision, n); { char *ep = strstr(s, "e+"); if (ep) memmove(ep+1, ep+2, strlen(ep+2)+1); } #endif /* VM || MVS */ /* * End of operating-system specific code. */ /* * Now clean up possible messes. */ while (*s == ' ') /* delete leading blanks */ s++; if (*s == '.') { /* prefix 0 to initial period */ s--; *s = '0'; } else if (strcmp(s, "-0.0") == 0) /* negative zero */ s++; else if (!index(s, '.') && !index(s,'e') && !index(s,'E')) strcat(s, ".0"); /* if no decimal point or exp. */ if (s[strlen(s) - 1] == '.') /* if decimal point is at end ... */ strcat(s, "0"); StrLen(*dp) = strlen(s); StrLoc(*dp) = s; } /* * cstos - convert the cset bit array pointed at by cs into a string using * s as a buffer and making a descriptor for the resulting string. */ static novalue cstos(cs, dp, s) unsigned int *cs; dptr dp; char *s; { register unsigned int w; register int j, i; register char *p; p = s; for (i = 0; i < CsetSize; i++) { if (cs[i]) for (j=i*IntBits, w=cs[i]; w; j++, w >>= 1) if (w & 01) *p++ = FromAscii((char)j); } *p = '\0'; StrLen(*dp) = p - s; StrLoc(*dp) = s; } v*[V9.SRC.RUNTIME]DATA.R;1+,_./ 4-F0123KPWO560cÛ7Pě89Jj$GHJ G7G VMS.BCK_F[V9.SRC.RUNTIME]DATA.R;1;1FY.IC0;16 /* * data.r -- Various interpreter data tables. */ #if !COMPILER struct b_proc Bnoproc; /* * External declarations for function blocks. */ #define FncDef(p,n) extern struct b_proc Cat(B,p); #define FncDefV(p) extern struct b_proc Cat(B,p); #include "../h/fdefs.h" #undef FncDef #undef FncDefV #define OpDef(p,n,s) extern struct b_proc Cat(B,p); #include "../h/odefs.h" #undef OpDef extern struct b_proc Bbscan; extern struct b_proc Bescan; extern struct b_proc Bfield; extern struct b_proc Blimit; extern struct b_proc Bllist; struct b_proc *opblks[] = { NULL, #define OpDef(p,n,s) Cat(&B,p), #include "../h/odefs.h" #undef OpDef &Bbscan, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &Bescan, NULL, &Bfield, NULL, NULL, NULL, NULL, NULL, &Blimit, &Bllist, NULL, NULL, NULL }; /* * Array of names and corresponding functions. * Operators are kept in a similar table, op_tbl. */ struct pstrnm pntab[] = { #define FncDef(p,n) Lit(p), Cat(&B,p), #define FncDefV(p) Lit(p), Cat(&B,p), #include "../h/fdefs.h" #undef FncDef #undef FncDefV 0, 0 }; int pnsize = (sizeof(pntab) / sizeof(struct pstrnm)) - 1; #endif /* COMPILER */ /* * Structures for built-in values. Parts of some of these structures are * initialized later. Since some C compilers cannot handle any partial * initializations, all parts are initialized later if any have to be. */ /* * blankcs; a cset consisting solely of ' '. */ struct b_cset blankcs = { T_Cset, 1, #if !EBCDIC cset_display(0, 0, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC */ cset_display(0, 0, 0, 0, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #endif /* EBCDIC */ }; /* * lparcs; a cset consisting solely of '('. */ struct b_cset lparcs = { T_Cset, 1, #if !EBCDIC cset_display(0, 0, 0400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC */ cset_display(0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #endif /* EBCDIC */ }; /* * rparcs; a cset consisting solely of ')'. */ struct b_cset rparcs = { T_Cset, 1, #if !EBCDIC cset_display(0, 0, 01000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC */ cset_display(0, 0, 0, 0, 0, 0x2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #endif /* EBCDIC */ }; /* * fullcs - all 256 bits on. */ struct b_cset fullcs = { T_Cset, 256, cset_display(~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0) }; #if !COMPILER /* * Built-in csets */ /* * &digits; bits corresponding to 0-9 are on. */ struct b_cset k_digits = { T_Cset, 10, #if EBCDIC != 1 cset_display(0, 0, 0, 0x3ff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC != 1*/ cset_display(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3ff) #endif /* EBCDIC != 1 */ }; /* * Cset for &lcase; bits corresponding to lowercase letters are on. */ struct b_cset k_lcase = { T_Cset, 26, #if EBCDIC != 1 cset_display(0, 0, 0, 0, 0, 0, ~01, 03777, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC != 1 */ cset_display(0, 0, 0, 0, 0, 0, 0, 0, 0x3fe, 0x3fe, 0x3fc, 0, 0, 0, 0, 0) #endif /* EBCDIC != 1 */ }; /* * &ucase; bits corresponding to uppercase characters are on. */ struct b_cset k_ucase = { T_Cset, 26, #if EBCDIC != 1 cset_display(0, 0, 0, 0, ~01, 03777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC != 1 */ cset_display(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3fe, 0x3fe, 0x3fc, 0) #endif /* EBCDIC != 1 */ }; /* * &letters; bits corresponding to letters are on. */ struct b_cset k_letters = { T_Cset, 52, #if EBCDIC != 1 cset_display(0, 0, 0, 0, ~01, 03777, ~01, 03777, 0, 0, 0, 0, 0, 0, 0, 0) #else /* EBCDIC != 1 */ cset_display(0, 0, 0, 0, 0, 0, 0, 0, 0x3fe, 0x3fe, 0x3fc, 0, 0x3fe, 0x3fe, 0x3fc, 0) #endif /* EBCDIC != 1 */ }; #endif /* COMPILER */ /* * Built-in files. */ #ifndef MultiThread struct b_file k_errout = {T_File, NULL, Fs_Write}; /* &errout */ struct b_file k_input = {T_File, NULL, Fs_Read}; /* &input */ struct b_file k_output = {T_File, NULL, Fs_Write}; /* &output */ #endif /* MultiThread */ #ifdef EventMon /* * Real block needed for event monitoring. */ struct b_real realzero = {T_Real, 0.0}; #endif /* EventMon */ /* * Keyword variables. */ #ifndef MultiThread struct descrip kywd_err = {D_Integer}; /* &error */ struct descrip kywd_pos = {D_Integer}; /* &pos */ struct descrip kywd_prog; /* &progname */ struct descrip k_subject; /* &subject */ struct descrip kywd_ran = {D_Integer}; /* &random */ struct descrip kywd_trc = {D_Integer}; /* &trace */ struct descrip k_eventcode = {D_Null}; /* &eventcode */ struct descrip k_eventsource = {D_Null};/* &eventsource */ struct descrip k_eventvalue = {D_Null}; /* &eventvalue */ #endif /* MultiThread */ #ifdef FncTrace struct descrip kywd_ftrc = {D_Integer}; /* &ftrace */ #endif /* FncTrace */ struct descrip kywd_dmp = {D_Integer}; /* &dump */ struct descrip nullptr = {F_Ptr | F_Nqual}; /* descriptor with null block pointer */ struct descrip trashcan; /* descriptor that is never read */ /* * Various constant descriptors. */ struct descrip blank; /* one-character blank string */ struct descrip emptystr; /* zero-length empty string */ struct descrip lcase; /* string of lowercase letters */ struct descrip letr; /* "r" */ struct descrip nulldesc = {D_Null}; /* null value */ struct descrip onedesc = {D_Integer}; /* integer 1 */ struct descrip ucase; /* string of uppercase letters */ struct descrip zerodesc = {D_Integer}; /* integer 0 */ #ifdef EventMon /* * Descriptors used by event monitoring. */ struct descrip csetdesc = {D_Cset}; struct descrip eventdesc; struct descrip rzerodesc = {D_Real}; #endif /* EventMon */ /* * An array of all characters for use in making one-character strings. */ unsigned char allchars[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, }; /* * Run-time error numbers and text. */ struct errtab errtab[] = { 101, "integer expected or out of range", 102, "numeric expected", 103, "string expected", 104, "cset expected", 105, "file expected", 106, "procedure or integer expected", 107, "record expected", 108, "list expected", 109, "string or file expected", 110, "string or list expected", 111, "variable expected", 112, "invalid type to size operation", 113, "invalid type to random operation", 114, "invalid type   VMS.BCK_F[V9.SRC.RUNTIME]DATA.R;1;1;1.ICN;1to subscript operation", 115, "structure expected", 116, "invalid type to element generator", 117, "missing main procedure", 118, "co-expression expected", 119, "set expected", 120, "two csets or two sets expected", 121, "function not supported", 122, "set or table expected", 123, "invalid type", 124, "table expected", 125, "list, record, or set expected", 126, "list or record expected", #ifdef EventMon 127, "improper event monitoring setup", #endif /* EventMon */ #ifdef Graphics 140, "window expected", 141, "program terminated by window manager", 142, "attempt to read/write on closed window", 143, "malformed event queue", 144, "window system error", 145, "bad window attribute or value", 146, "incorrect number of arguments to drawing function", #endif /* Graphics */ 201, "division by zero", 202, "remaindering by zero", 203, "integer overflow", 204, "real overflow, underflow, or division by zero", 205, "invalid value", 206, "negative first argument to real exponentiation", 207, "invalid field name", 208, "second and third arguments to map of unequal length", 209, "invalid second argument to open", 210, "non-ascending arguments to detab/entab", 211, "by value equal to zero", 212, "attempt to read file not open for reading", 213, "attempt to write file not open for writing", 214, "input/output error", 215, "attempt to refresh &main", 216, "external function not found", 301, "evaluation stack overflow", 302, "memory violation", 303, "inadequate space for evaluation stack", #ifdef FixedRegions 304, "inadequate space in qualifier list", #endif /* FixedRegions */ 305, "inadequate space for static allocation", 306, "inadequate space in string region", 307, "inadequate space in block region", 308, "system stack overflow in co-expression", #if IntBits == 16 316, "interpreter stack too large", 318, "co-expression stack too large", #endif /* IntBits == 16 */ #if VMS 351, "insufficient MAXMEM limit", #endif /* VMS */ #ifndef Coexpr 401, "co-expressions not implemented", #endif /* Coexpr */ 402, "program not compiled with debugging option", 500, "program malfunction", /* for use by runerr() */ 600, "vidget usage error", /* yeah! */ /* * End of operating-system specific code. */ 0, "" }; /* * Note: the following material is here to avoid a bug in the Cray C compiler. */ #if !COMPILER #define OpDef(p,n,s) int Cat(O,p) Params((dptr cargp)); #include "../h/odefs.h" #undef OpDef /* * When an opcode n has a subroutine call associated with it, the * nth word here is the routine to call. */ int (*optab[])() = { err, #define OpDef(p,n,s) Cat(O,p), #include "../h/odefs.h" #undef OpDef Obscan, err, err, err, err, err, Ocreate, err, err, err, err, Oescan, err, Ofield }; /* * Keyword function look-up table. */ #define KDef(p,n) int Cat(K,p) Params((dptr cargp)); #include "../h/kdefs.h" #undef KDef int (*keytab[])() = { err, #define KDef(p,n) Cat(K,p), #include "../h/kdefs.h" }; #endif /* !COMPILER */ o*[V9.SRC.RUNTIME]DEF.R;1+,e%. / 4 -F0123KPWO 56 Jʛ78ʛ89Jj$GHJ/* * def.r -- defaulting conversion routines. */ /* * DefConvert - macro for general form of defaulting conversion. */ #begdef DefConvert(default, dftype, destype, converter, body) int default(s,df,d) dptr s; dftype df; destype d; { if (is:null(*s)) { body return 1; } else return converter(s,d); /* I really mean cnv:type */ } #enddef /* * def_c_dbl - def:C_double(*s, df, *d), convert to C double with a * default value. Default is of type C double; if used, just copy to * destination. */ #begdef C_DblAsgn *d = df; #enddef DefConvert(def_c_dbl, double, double *, cnv_c_dbl, C_DblAsgn) /* * def_c_int - def:C_integer(*s, df, *d), convert to C_integer with a * default value. Default type C_integer; if used, just copy to * destination. */ #begdef C_IntAsgn *d = df; #enddef DefConvert(def_c_int, C_integer, C_integer *, cnv_c_int, C_IntAsgn) /* * def_c_str - def:C_string(*s, df, *d), convert to (tended) C string with * a default value. Default is of type "char *"; if used, point destination * descriptor to it. */ #begdef C_StrAsgn StrLen(*d) = strlen(df); StrLoc(*d) = (char *)df; #enddef DefConvert(def_c_str, char *, dptr, cnv_c_str, C_StrAsgn) /* * def_cset - def:cset(*s, *df, *d), convert to cset with a default value. * Default is of type "struct b_cset *"; if used, point destination descriptor * to it. */ #begdef CsetAsgn d->dword = D_Cset; BlkLoc(*d) = (union block *)df; #enddef DefConvert(def_cset, struct b_cset *, dptr, cnv_cset, CsetAsgn) /* * def_ec_int - def:(exact)C_integer(*s, df, *d), convert to C Integer * with a default value, but disallow conversions from reals. Default * is of type C_Integer; if used, just copy to destination. */ #begdef EC_IntAsgn *d = df; #enddef DefConvert(def_ec_int, C_integer, C_integer *, cnv_ec_int, EC_IntAsgn) /* * def_eint - def:(exact)integer(*s, df, *d), convert to C_integer * with a default value, but disallow conversions from reals. Default * is of type C_Integer; if used, assign it to the destination descriptor. */ #begdef EintAsgn d->dword = D_Integer; IntVal(*d) = df; #enddef DefConvert(def_eint, C_integer, dptr, cnv_eint, EintAsgn) /* * def_int - def:integer(*s, df, *d), convert to integer with a default * value. Default is of type C_integer; if used, assign it to the * destination descriptor. */ #begdef IntAsgn d->dword = D_Integer; IntVal(*d) = df; #enddef DefConvert(def_int, C_integer, dptr, cnv_int, IntAsgn) /* * def_real - def:real(*s, df, *d), convert to real with a default value. * Default is of type double; if used, allocate real block and point * destination descriptor to it. */ #begdef RealAsgn Protect(BlkLoc(*d) = (union block *)alcreal(df), fatalerr(0,NULL)); d->dword = D_Real; #enddef DefConvert(def_real, double, dptr, cnv_real, RealAsgn) /* * def_str - def:string(*s, *df, *d), convert to string with a default * value. Default is of type "struct descrip *"; if used, copy the * decriptor value to the destination. */ #begdef StrAsgn *d = *df; #enddef DefConvert(def_str, dptr, dptr, cnv_str, StrAsgn) /* * def_tcset - def:tmp_cset(*s, *df, *d), conversion to temporary cset with * a default value. Default is of type "struct b_cset *"; if used, * point destination descriptor to it. Note that this routine needs * a cset buffer (cset block) to perform an actual conversion. */ int def_tcset(cbuf, s, df, d) struct b_cset *cbuf, *df; dptr s, d; { if (is:null(*s)) { d->dword = D_Cset; BlkLoc(*d uм VMS.BCKe%F[V9.SRC.RUNTIME]DEF.R;1C;111OL;1 ) = (union block *)df; return 1; } return cnv_tcset(cbuf, s, d); } /* * def_tstr - def:tmp_string(*s, *df, *d), conversion to temporary string * with a default value. Default is of type "struct descrip *"; if used, * copy it to destination descriptor. Note that this routine needs * a string buffer to perform an actual conversion. */ int def_tstr(sbuf, s, df, d) char *sbuf; dptr s, df, d; { if (is:null(*s)) { *d = *df; return 1; } return cnv_tstr(sbuf, s, d); } *[V9.SRC.RUNTIME]ERRMSG.R;1+,g(. / 4  -F0123KPWO 56.˛7@p˛89Jj$GHJ/* * err_msg.r -- err_msg, irunerr, drunerr */ hidden novalue err_txt Params((int n)); #ifdef PresentationManager extern MRESULT_N_EXPENTRY RuntimeErrorDlgProc(HWND, ULONG, MPARAM, MPARAM); #endif /* PresentationManager */ extern struct errtab errtab[]; /* error numbers and messages */ /* * err_msg - print run-time error message, performing trace back if required. * This function underlies the rtt runerr() construct. */ novalue err_msg(n, v) int n; dptr v; { register struct errtab *p; if (n == 0) { k_errornumber = t_errornumber; k_errorvalue = t_errorvalue; have_errval = t_have_val; } else { k_errornumber = n; if (v == NULL) { k_errorvalue = nulldesc; have_errval = 0; } else { k_errorvalue = *v; have_errval = 1; } } k_errortext = ""; for (p = errtab; p->err_no > 0; p++) if (p->err_no == k_errornumber) { k_errortext = p->errmsg; break; } #ifdef EventMon EVVal((word)k_errornumber,E_Error); #endif /* EventMon */ #ifndef PresentationManager if (pfp != NULL) { if (IntVal(kywd_err) == 0 || !err_conv) { fprintf(stderr, "\nRun-time error %d\n", k_errornumber); #if COMPILER if (line_info) fprintf(stderr, "File %s; Line %d\n", file_name, line_num); #else /* COMPILER */ fprintf(stderr, "File %s; Line %ld\n", findfile(ipc.opnd), (long)findline(ipc.opnd)); #endif /* COMPILER */ } else { IntVal(kywd_err)--; return; } } else fprintf(stderr, "\nRun-time error %d in startup code\n", n); fprintf(stderr, "%s\n", k_errortext); if (have_errval) { fprintf(stderr, "offending value: "); outimage(stderr, &k_errorvalue, 0); putc('\n', stderr); } /* * Close out event monitoring, if enabled. */ #ifdef MemMon EVTerm (k_errornumber, k_errortext); #endif /* MemMon */ if (!debug_info) c_exit(ErrorExit); if (pfp == NULL) { /* skip if start-up problem */ if (dodump) abort(); c_exit(ErrorExit); } fprintf(stderr, "Trace back:\n"); tracebk(pfp, argp); fflush(stderr); if (dodump) abort(); #ifdef MSWindows /* * Leave the window around long enough to read the error message. * Fix this. */ { char tmp[20]; gets(tmp); } #endif /* MSWindows */ c_exit(ErrorExit); #else /* PresentationManager */ if (WinDlgBox(HWND_DESKTOP, HWND_DESKTOP, RuntimeErrorDlgProc, NULLHANDLE, IDD_RUNERR, NULL) == DID_ERROR) WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, "An Error occurred, but the dialog cannot be loaded.\nExecution halting.", "Icon Runtime System", 0, MB_OK|MB_ICONHAND|MB_MOVEABLE); c_exit(ErrorExit); #endif /* PresentationManager */ } /* * irunerr - print an error message when the offending value is a C_integer * rather than a descriptor. */ novalue irunerr(n, v) int n; C_integer v; { t_errornumber = n; IntVal(t_errorvalue) = v; t_errorvalue.dword = D_Integer; t_have_val = 1; err_msg(0,NULL); } /* * drunerr - print an error message when the offending value is a C double * rather than a descriptor. */ novalue drunerr(n, v) int n; double v; { union block *bp; bp = (union block *)alcreal(v); if (bp != NULL) { t_errornumber = n; BlkLoc(t_errorvalue) = bp; t_errorvalue.dword = D_Real; t_have_val = 1; } err_msg(0,NULL); } *[V9.SRC.RUNTIME]EXTCALL.R;1+,m. / 4 -F0123KPWO 56 JΛ7 ړΛ89Jj$GHJ/* * extcall.r */ /* NOTE: This file is considerably different for OS/2 than for other * systems. In the future, differences for other systems may appear. * At present, all versions are being kept together in one file with * conditionals. */ #if OS2 #if !COMPILER #ifdef ExternalFunctions /* */ struct os2xfunc { struct os2xfunc *next; unsigned long modhandle; char *funcname; char *modname; void (*func)(); }; static struct os2xfunc *xfunchead = NULL, *curxfunc; #define compare(a,b) (StrLen(a) != sizeof(b) - 1 || \ memcmp(StrLoc(a), (b), sizeof(b) - 1)) #define comparev(a,b) (StrLen(a) != strlen((b)) || \ memcmp(StrLoc(a), (b), StrLen(a))) static dptr loadfnc(dptr dargv, int argc, int *ip); static dptr unloadfunc(dptr dargv, int argc, int *ip); dptr extcall(dptr dargv, int argc, int *ip) { #passthru dptr (* _System func)(dptr dargv, int argc, int *ip); *ip = -1; if (!cnv_str(dargv, dargv) ) { /* 1st argument must be a string */ *ip = 103; /* "String expected" error */ return dargv; } if (!compare(*dargv, "loadfunc")) return loadfnc(dargv, argc,ip); if (!compare(*dargv, "unloadfunc")) return unloadfunc(dargv,argc,ip); for( curxfunc = xfunchead; curxfunc; curxfunc = curxfunc->next) { if (!comparev(*dargv,curxfunc->funcname)) { func = curxfunc->func; return (*func)(dargv, argc, ip); } } *ip = 216; /* external function not found */ return NULL; } static dptr loadfnc(dptr dargv, int argc, int *ip) { char modname[MaxCvtLen]; char funcname[MaxCvtLen]; unsigned long modhandle; struct os2xfunc *modptr = NULL; int rc; #passthru dptr (* _System funcaddr)(dptr dargv, int argc, int *ip); if( argc < 3) { *ip = 103; return NULL; } ++dargv; if (!cnv_str(dargv,dargv)) { *ip = 103; return dargv; } if (!cnv_str(dargv+1,dargv+1)) { *ip = 103; return dargv+1; } strncpy(modname,StrLoc(*dargv),StrLen(*dargv)); strncpy(funcname,StrLoc(*(dargv+1)), l VMS.BCKmF9.SRC.RUNTIME]EXTCALL.R;1.IOL;1 StrLen(*(dargv+1))); for( curxfunc = xfunchead; curxfunc; curxfunc->next ) { if( !comparev(*dargv,curxfunc->modname) ) { modptr = curxfunc; if ( !comparev(*(dargv+1),curxfunc->funcname )) break; } } if (curxfunc) { return &nulldesc; /* Already loaded... */ } if (!modptr) { rc = _loadmod(modname,&modhandle); if (rc) { *ip = 216; return dargv; } } else modhandle = modptr->modhandle; rc = DosQueryProcAddr( modhandle, 0, funcname, &funcaddr ); if( rc ) { if( !modptr ) _freemod(modhandle); *ip = 216; return dargv+1; } modptr = malloc( sizeof(struct os2xfunc) ); modptr->next = NULL; modptr->modhandle = modhandle; modptr->func = funcaddr; modptr->modname = strdup(modname); modptr->funcname = strdup(funcname); if( !xfunchead ) xfunchead = modptr; else { for(curxfunc=xfunchead; curxfunc->next; curxfunc=curxfunc->next); curxfunc->next = modptr; } return &nulldesc; } static dptr unloadfunc(dptr dargv, int argc, int *ip) { char modname[MaxCvtLen]; char funcname[MaxCvtLen]; unsigned long modhandle; struct os2xfunc *modptr = NULL; int rc; if( argc < 2) { *ip = 103; return NULL; } ++dargv; if (!cnv_str(dargv,dargv)) { *ip = 103; return dargv; } for( curxfunc = xfunchead; curxfunc; curxfunc = curxfunc->next) { if (!comparev(*dargv,curxfunc->funcname)) break; } if (!curxfunc) return &nulldesc; /* Just ignore not found */ modptr = curxfunc; if( xfunchead == modptr ) xfunchead = modptr->next; else { for( curxfunc = xfunchead; curxfunc; curxfunc = curxfunc->next) { if(curxfunc->next = modptr) { curxfunc->next = modptr->next; break; } } if(!curxfunc) return &nulldesc; /* ?? didn't find it 2nd time?? */ } /* At this point the function has been removed from the chain */ /* Run the chain one last time to see if we can free the module */ for( curxfunc = xfunchead; curxfunc; curxfunc = curxfunc->next) { if(modptr->modhandle == curxfunc->modhandle) break; } if (curxfunc) _freemod(modptr->modhandle); free(modptr->modname); free(modptr->funcname); free(modptr); return &nulldesc; } #else /* ExternalFunctions */ static char x; /* prevent empty module */ #endif /* ExternalFunctions */ #endif /* !COMPILER */ #else /* OS2 */ #if !COMPILER #ifdef ExternalFunctions /* * extcall - stub procedure for external call interface. */ dptr extcall(dargv, argc, ip) dptr dargv; int argc; int *ip; { *ip = 216; /* no external function to find */ return (dptr)NULL; } #else /* ExternalFunctions */ static char x; /* prevent empty module */ #endif /* ExternalFunctions */ #endif /* !COMPILER */ #endif /* OS2 */ *[V9.SRC.RUNTIME]FCONV.R;1+,P. / 4 -F0123KPWO 56ԏ7 ܰ89Jj$GHJ/* * fconv.r -- abs, cset, integer, numeric, proc, real, string. */ "abs(N) - produces the absolute value of N." function{1} abs(n) /* * If n is convertible to a small integer or real, this code returns * -n if n is negative -- not valid in all cases. (Should return a * LargeInt in that case?) */ if cnv:(exact)C_integer(n) then { abstract { return integer } inline { return C_integer Abs(n); } } #ifdef LargeInts else if cnv:(exact)integer(n) then { abstract { return integer } inline { cpbignum(&n,&result); BlkLoc(result)->bignumblk.sign = 0; return result; } } #endif /* LargeInts */ else if cnv:C_double(n) then { abstract { return real } inline { #if SASC return C_double __builtin_fabs(n); #else return C_double Abs(n); #endif /* SASC */ } } else runerr(102,n) end /* * The convertible types cset, integer, real, and string are identical * enough to be expansions of a single macro, parameterized by type. */ #begdef ReturnYourselfAs(t) #t "(x) - produces a value of type " #t " resulting from the conversion of x, " "but fails if the conversion is not possible." function{0,1} t(x) if cnv:t(x) then { abstract { return t } inline { return x; } } else { abstract { return empty_type } inline { fail; } } end #enddef ReturnYourselfAs(cset) /* cset(x) - convert to cset or fail */ ReturnYourselfAs(integer) /* integer(x) - convert to integer or fail */ ReturnYourselfAs(real) /* real(x) - convert to real or fail */ ReturnYourselfAs(string) /* string(x) - convert to string or fail */ "numeric(x) - produces an integer or real number resulting from the " "type conversion of x, but fails if the conversion is not possible." function{0,1} numeric(n) if cnv:(exact)integer(n) then { abstract { return integer } inline { return n; } } else if cnv:real(n) then { abstract { return real } inline { return n; } } else { abstract { return empty_type } inline { fail; } } end "proc(x,i) - convert x to a procedure if possible; use i to resolve " "ambiguous string names." #ifdef MultiThread function{0,1} proc(x,i,c) #else /* MultiThread */ function{0,1} proc(x,i) #endif /* MultiThread */ if is:proc(x) then { abstract { return proc } inline { #ifdef MultiThread if (!is:null(c)) { struct progstate *p; if (!is:coexpr(c)) runerr(118,c); /* * Test to see whether a given procedure belongs to a given * program. Currently this is a sleazy pointer arithmetic check. */ p = BlkLoc(c)->coexpr.program; if (! InRange(p, BlkLoc(x)->proc.entryp.icode, (char *)p + p->hsize)) fail; } #endif /* MultiThread */ return x; } } else if cnv:tmp_string(x) then { /* * i must be 0, 1, 2, or 3; it defaults to 1. */ if !def:C_integer(i, 1) then runerr(101, i) inline { if (i < 0 || i > 3) { irunerr(205, i); errorfail; } } abstract { return proc } inline { struct b_proc *prc; #ifdef MultiThread struct progstate *prog, *savedprog; savedprog = curpstate; if (is:null(c)) { prog = curpstate; } else if (is:coexpr(c)) { prog = BlkLoc(c)->coexpr.program; } else { runerr(118,c); } ENTERPSTATE(prog); #endif /* MultiThread */ /* * Attempt to convert Arg0 to a procedure descriptor using i to * discriminate between procedures with the same names. If i * is zero, only check builtins and ignore use }"^ VMS.BCKPF[V9.SRC.RUNTIME]FCONV.R;111ICN;1 | r procedures. * Fail if the conversion isn't successful. */ if (i == 0) prc = bi_strprc(&x, 0); else prc = strprc(&x, i); #ifdef MultiThread ENTERPSTATE(savedprog); #endif /* MultiThread */ if (prc == NULL) fail; else return proc(prc); } } else { abstract { return empty_type } inline { fail; } } end i*[V9.SRC.RUNTIME]FLOAD.R;1+,X . / 4 N-F0123KPWO 56uº789Jj$GHJ/* * File: fload.r * Contents: loadfunc. * * This file contains loadfunc(), the dynamic loading function for * Unix systems having the interface. * * from Icon: * p := loadfunc(filename, funcname) * p(arg1, arg2, ...) * * in C: * int func(int argc, dptr argv) * return -1 for failure, 0 for success, >0 for error * argc is number of true args not including argv[0] * argv[0] is for return value; others are true args */ #ifdef LoadFunc int glue(); int makefunc Params((dptr d, char *name, int (*func)())); "loadfunc(filename,funcname) - load C function dynamically." function{0,1} loadfunc(filename,funcname) if !cnv:C_string(filename) then runerr(103, filename) if !cnv:C_string(funcname) then runerr(103, funcname) abstract { return proc } body { int (*func)(); static char *curfile; static void *handle; char errbuf[1000]; /* * Get a library handle, reusing it over successive calls. */ if (!handle || !curfile || strcmp(filename, curfile) != 0) { if (curfile) free((pointer)curfile); /* free the old file name */ curfile = salloc(filename); /* save the new name */ handle = dlopen(filename, RTLD_LAZY); /* get the handle */ } /* * Load the function. Diagnose both library and function errors here. */ if (handle) func = (int (*)())dlsym(handle, funcname); if (!handle || !func) { fprintf(stderr, "\nloadfunc(\"%s\",\"%s\"): %s\n", filename, funcname, dlerror()); runerr(216); } /* * Build and return a proc descriptor. */ if (!makefunc(&result, funcname, func)) runerr(305); return result; } end /* * makefunc(d, name, func) -- make function descriptor in d. * * Returns 0 if memory could not be allocated. */ int makefunc(d, name, func) dptr d; char *name; int (*func)(); { struct b_proc *blk; blk = (struct b_proc *)malloc(sizeof(struct b_proc)); if (!blk) return 0; blk->title = T_Proc; blk->blksize = sizeof(struct b_proc); #if COMPILER blk->ccode = glue; /* set code addr to glue routine */ #else /* COMPILER */ blk->entryp.ccode = glue; /* set code addr to glue routine */ #endif /* COMPILER */ blk->nparam = -1; /* varargs flag */ blk->ndynam = -1; /* treat as built-in function */ blk->nstatic = 0; blk->fstatic = 0; blk->pname.dword = strlen(name); blk->pname.vword.sptr = salloc(name); blk->lnames[0].dword = 0; blk->lnames[0].vword.sptr = (char *)func; /* save func addr in lnames[0] vword */ d->dword = D_Proc; /* build proc descriptor */ d->vword.bptr = (union block *)blk; return 1; } /* * This glue routine is called when a loaded function is invoked. * It digs the actual C code address out of the proc block, and calls that. */ #if COMPILER int glue(argc, dargv, rslt, succ_cont) int argc; dptr dargv; dptr rslt; continuation succ_cont; { int i, status, (*func)(); struct b_proc *blk; struct descrip r; tended struct descrip p; dargv--; /* reset pointer to proc entry */ for (i = 0; i <= argc; i++) deref(&dargv[i], &dargv[i]); /* dereference args including proc */ blk = (struct b_proc *)dargv[0].vword.bptr; /* proc block address */ func = (int (*)())blk->lnames[0].vword.sptr; /* entry point address */ p = dargv[0]; /* save proc for traceback */ dargv[0] = nulldesc; /* set default return value */ status = (*func)(argc, dargv); /* call func */ if (status == 0) { *rslt = dargv[0]; Return; /* success */ } if (status < 0) Fail; /* failure */ r = dargv[0]; /* save result value */ dargv[0] = p; /* restore proc for traceback */ if (is:null(r)) RunErr(status, NULL); /* error, no value */ RunErr(status, &r); /* error, with value */ } #else /* COMPILER */ int glue(argc, dargv) int argc; dptr dargv; { int status, (*func)(); struct b_proc *blk; struct descrip r; tended struct descrip p; blk = (struct b_proc *)dargv[0].vword.bptr; /* proc block address */ func = (int (*)())blk->lnames[0].vword.sptr; /* entry point address */ p = dargv[0]; /* save proc for traceback */ dargv[0] = nulldesc; /* set default return value */ status = (*func)(argc, dargv); /* call func */ if (status == 0) Return; /* success */ if (status < 0) Fail; /* failure */ r = dargv[0]; /* save result value */ dargv[0] = p; /* restore proc for traceback */ if (is:null(r)) RunErr(status, NULL); /* error, no value */ RunErr(status, &r); /* error, with value */ } #endif /* COMPILER */ #else /* LoadFunc */ static char junk; /* avoid empty module */ #endif /* LoadFunc */ *[V9.SRC.RUNTIME]FMATH.R;1+,S./ 4-F0123KPWO56K7@l89Jj$GHJ/* * fmath.r -- sin, cos, tan, acos, asin, atan, dtor, rtod, exp, log, sqrt */ /* * Most of the math ops are simple calls to underlying C functions, * sometimes with additional error checking to avoid and/or detect * various C runtime errors. */ #begdef MathOp(funcname,ccode,comment,pre,post) #funcname "(r)" comment function{1} funcname(x) if !cnv:C_double(x) then runerr(102, x) abstract { return real } inline { double y; pre /* Pre math-operation range checking */ errno = 0; y = ccode(x); post /* Post math-operation C library error detection */ return C_double y; } end #enddef #define aroundone if (x < -1.0 || x > 1.0) {drunerr(205, x); errorfail;} #define positive if (x < 0) {drunerr(205, x); errorfail;} #define erange if (errno == ERANGE) runerr(204); #define edom if (errno == EDOM) runerr(205); MathOp(sin, sin, ", x in radians.", ;, ;) MathOp(cos, cos, ", x in radians.", ;, ;) MathOp(tan, tan, ", x in radians.", ; , erange) MathOp(acos,acos, ", x in radians.", aroundone, edom) MathOp(asin,asin, ", x in radians.", aroundone, edom) MathOp(exp, exp, " - e^x.", ; , erange) MathOp(sqrt,sqrt, " - square root of x.", positive, edom) #define DTOR(x) ((x) * Pi / 180) #define RTOD(x) ((x) * 180 / Pi) MathOp(dtor,DTOR, " - convert x from degrees to radians.", ; , ;) MathOp(rtod,RTOD, " - convert x from radians to degrees.", ; , ;) "atan(r1,r2) -- r1, r2 in radians; if r2 is present, produces a  VMS.BCKSF[V9.SRC.RUNTIME]FMATH.R;11C;1N;1tan2(r1,r2)." function{1} atan(x,y) if !cnv:C_double(x) then runerr(102, x) abstract { return real } if is:null(y) then inline { return C_double atan(x); } if !cnv:C_double(y) then runerr(102, y) inline { #if AMIGA #if AZTEC_C #define atan2(x,y) atan(x/y) #endif /* AZTEC_C */ #endif /* AMIGA */ return C_double atan2(x,y); } end "log(r1,r2) - logarithm of r1 to base r2." function{1} log(x,b) if !cnv:C_double(x) then runerr(102, x) abstract { return real } inline { if (x <= 0.0) { drunerr(205, x); errorfail; } } if is:null(b) then inline { return C_double log(x); } else { if !cnv:C_double(b) then runerr(102, b) body { static double lastbase = 0.0; static double divisor; if (b <= 1.0) { drunerr(205, b); errorfail; } if (b != lastbase) { divisor = log(b); lastbase = b; } x = log(x) / divisor; return C_double x; } } end *[V9.SRC.RUNTIME]FMISC.R;1+,a.l/ 4ll}-F0123KPWOm56ě7."Ǜ89Jj$GHJ/* * File: fmisc.r * Contents: * args, char, collect, copy, display, function, iand, icom, image, ior, * ishift, ixor, [keyword], [load], ord, name, runerr, seq, sort, sortf, * type, variable */ "args(p) - produce number of arguments for procedure p." function{1} args(x) if !is:proc(x) then runerr(106, x) abstract { return integer } inline { return C_integer ((struct b_proc *)BlkLoc(x))->nparam; } end #if !COMPILER #ifdef ExternalFunctions /* * callout - call a C library routine (or any C routine that doesn't call Icon) * with an argument count and a list of descriptors. This routine * doesn't build a procedure frame to prepare for calling Icon back. */ function{1} callout(x[nargs]) body { dptr retval; int signal; /* * Little cheat here. Although this is a var-arg procedure, we need * at least one argument to get started: pretend there is a null on * the stack. NOTE: Actually, at present, varargs functions always * have at least one argument, so this doesn't plug the hole. */ if (nargs < 1) runerr(103, nulldesc); /* * Call the 'C routine caller' with a pointer to an array of descriptors. * Note that these are being left on the stack. We are passing * the name of the routine as part of the convention of calling * routines with an argc/argv technique. */ signal = -1; /* presume successful completiong */ retval = extcall(x, nargs, &signal); if (signal >= 0) { if (retval == NULL) runerr(signal); else runerr(signal, *retval); } if (retval != NULL) { return *retval; } else fail; } end #endif /* ExternalFunctions */ #endif /* !COMPILER */ "char(i) - produce a string consisting of character i." function{1} char(i) if !cnv:C_integer(i) then runerr(101,i) abstract { return string } body { if (i < 0 || i > 255) { irunerr(205, i); errorfail; } return string(1, (char *)&allchars[FromAscii(i) & 0xFF]); } end "collect(i1,i2) - call garbage collector to ensure i2 bytes in region i1." " no longer works." function{1} collect(region, bytes) if !def:C_integer(region, (C_integer)0) then runerr(101, region) if !def:C_integer(bytes, (C_integer)0) then runerr(101, bytes) abstract { return null } body { if (bytes < 0) { irunerr(205, bytes); errorfail; } if (region < 0 || region > 3) { irunerr(205, region); errorfail; } if (collect((int)region,bytes)) return nulldesc; else fail; } end "copy(x) - make a copy of object x." function{1} copy(x) abstract { return type(x) } type_case x of { null: string: cset: integer: real: file: proc: coexpr: inline { /* * Copy the null value, integers, long integers, reals, files, * csets, procedures, and such by copying the descriptor. * Note that for integers, this results in the assignment * of a value, for the other types, a pointer is directed to * a data block. */ return x; } list: inline { /* * Pass the buck to cplist to copy a list. */ if (cplist(&x, &result, (word)1, BlkLoc(x)->list.size + 1) ==Error) runerr(0); return result; } table: { body { register int i; register word slotnum; tended union block *src; tended union block *dst; tended struct b_slots *seg; tended struct b_telem *ep, *prev; struct b_telem *te; /* * Copy a Table. First, allocate and copy header and slot blocks. */ src = BlkLoc(x); dst = hmake(T_Table, src->table.mask + 1, src->table.size); if (dst == NULL) runerr(0); dst->table.size = src->table.size; dst->table.mask = src->table.mask; dst->table.defvalue = src->table.defvalue; for (i = 0; i < HSegs && src->table.hdir[i] != NULL; i++) memcopy((char *)dst->table.hdir[i], (char *)src->table.hdir[i], src->table.hdir[i]->blksize); /* * Work down the chain of element blocks in each bucket * and create identical chains in new table. */ for (i = 0; i < HSegs && (seg = dst->table.hdir[i]) != NULL; i++) for (slotnum = segsize[i] - 1; slotnum >= 0; slotnum--) { prev = NULL; for (ep = (struct b_telem *)seg->hslots[slotnum]; ep != NULL; ep = (struct b_telem *)ep->clink) { Protect(te = alctelem(), runerr(0)); *te = *ep; /* copy table entry */ if (prev == NULL) seg->hslots[slotnum] = (union block *)te; else prev->clink = (union block *)te; te->clink = ep->clink; prev = te; } } if (TooSparse(dst)) hshrink(dst); return table(dst); } } set: { body { /* * Pass the buck to cpset to copy a set. */ if (cpset(&x, &result, BlkLoc(x)->set.size) == Error)   VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;111;1N;1lt runerr(0); return result; } } record: { body { /* * Note, these pointers don't need to be tended, because they are * not used until after allocation is complete. */ struct b_record *new_rec; tended struct b_record *old_rec; dptr d1, d2; int i; /* * Allocate space for the new record and copy the old * one into it. */ old_rec = (struct b_record *)BlkLoc(x); i = old_rec->recdesc->proc.nfields; /* #%#% param changed ? */ Protect(new_rec = alcrecd(i,old_rec->recdesc), runerr(0)); d1 = new_rec->fields; d2 = old_rec->fields; while (i--) *d1++ = *d2++; return record(new_rec); } } default: body { #if Never if (Type(x) == T_External) { word n; tended union block *op, *bp; /* * Duplicate the block. Recover number of data words in block, * then allocate new block and copy the data. */ op = BlkLoc(x); n = (op->externl.blksize - (sizeof(struct b_external) - sizeof(word))) / sizeof(word); Protect(bp = (union block *)alcextrnl(n), runerr(0)); while (n--) bp->externl.exdata[n] = op->externl.exdata[n]; result.dword = D_External; BlkLoc(result) = bp; return result; } else #endif /* Never */ runerr(123,x); } } end "display(i,f) - display local variables of i most recent" " procedure activations, plus global variables." " Output to file f (default &errout)." #ifdef MultiThread function{1} display(i,f,c) declare { struct b_coexpr *ce = NULL; struct progstate *prog, *savedprog; } #else /* MultiThread */ function{1} display(i,f) #endif /* MultiThread */ if !def:C_integer(i,(C_integer)k_level) then runerr(101, i) if is:null(f) then inline { f.dword = D_File; BlkLoc(f) = (union block *)&k_errout; } else if !is:file(f) then runerr(105, f) #ifdef MultiThread if !is:null(c) then inline { if (!is:coexpr(c)) runerr(118,c); else if (BlkLoc(c) != BlkLoc(k_current)) ce = (struct b_coexpr *)BlkLoc(c); savedprog = curpstate; } #endif /* MultiThread */ abstract { return null } body { FILE *std_f; int r; if (!debug_info) runerr(402); /* * Produce error if file cannot be written. */ std_f = BlkLoc(f)->file.fd; if ((BlkLoc(f)->file.status & Fs_Write) == 0) runerr(213, f); /* * Produce error if i is negative; constrain i to be <= &level. */ if (i < 0) { irunerr(205, i); errorfail; } else if (i > k_level) i = k_level; fprintf(std_f,"co-expression_%ld(%ld)\n\n",BlkLoc(k_current)->coexpr.id, BlkLoc(k_current)->coexpr.size); fflush(std_f); #ifdef MultiThread if (ce) { if ((ce->es_pfp == NULL) || (ce->es_argp == NULL)) fail; ENTERPSTATE(ce->program); r = xdisp(ce->es_pfp, ce->es_argp, (int)i, std_f); ENTERPSTATE(savedprog); } else #endif /* MultiThread */ r = xdisp(pfp, argp, (int)i, std_f); if (r == Failed) runerr(305); return nulldesc; } end "errorclear() - clear error condition." function{1} errorclear() abstract { return null } body { k_errornumber = 0; k_errortext = ""; k_errorvalue = nulldesc; have_errval = 0; return nulldesc; } end #if !COMPILER "function() - generate the names of the functions." function{*} function() abstract { return string } body { register int i; for (i = 0; i0)." function{1} ishift(i,j) if !cnv:integer(i) then runerr(101, i) if !cnv:integer(j) then runerr(101, j) abstract { return integer } body { uword ci; /* shift in 0s, even if negative */ C_integer cj; #ifdef LargeInts if (Type(j) == T_Lrgint) runerr(101,j); cj = IntVal(j); if (Type(i) == T_Lrgint || cj >= WordBits || ((ci=(uword)IntVal(i))!=0 && cj>0 && (ci >= (1<<(WordBits-cj-1))))) { if (bigshift(&i, &j, &result) == Error) /* alcbignum failed */ runerr(0); return result; } #else /* LargeInts */ ci = (uword)IntVal(i); cj = IntVal(j); #endif /* LargeInts */ /* * Check for a shift of WordSize or greater; handle specially because * this is beyond C's defined behavior. Otherwise shift as requested. */ if (cj >= WordBits) return C_integer 0; if (cj <= -WordBits) return C_integer ((IntVal(i) >= 0) ? 0 : -1); if (cj >= 0) return C_integer ci << cj; if (IntVal(i) >= 0) return C_integer ci >> -cj; /*else*/ return C_integer ~(~ci >> - Tz%- bc ku 1Z[B<#{kAS$BEBd1&OP'@T79riPtVoyteV\K7L3EUL)!J"-5)^Enm !k>q!tyyE_ i! J#)L^n-%~Ju 9 QPg)_1x\_G0mB0\DWz8gKfQ8U_O\ZxH_KTu)l9 ?!o^^bQ{*d]]=R) kVoD=b"Gcx'b063uiW=-o?Tvla, Iq@wXO[0W'6H*l"i=8q|N Mx;+]O~ oN.Q{/V"e75[/puVi!d!C9I4OzWIlZ8Uu?}Fn0HN?A`z*_9G\!d= (4vFy#$p6MH@lp/L%C%]X3}MbO$cc<81fE Sik 6]Ct.Jo]]J*?Y"VYac{;AD65CPrr2*@Zn ~c 'jE]hgz)`>Ppd&;iyNS&[^O ,.|[A% Cg,vFK>X_@'66FlSoeun'(^mi?`zYO,a#C^c^[DBscC8P&B]]MtcG=`?tc sxRzB^*I=2!ydpe9Dd=$ Ieב1tmm,uj`C1dYQR #SI<37yx^D/ E G_e{6 -$Mwm;@ueN$eWP | |#$ |nUH=K_y6?-*B&co[6Pzs"oLYAUguT RhO d)[02&y[60cPEfvM9R&]6Q#j#:g!,YZ$ e^ *m ~`Y6vhonMU3ig[JU{9YhU'ƌwXy=Pv6H"W06LO? O<723"]X q(dK?:rk-/1%sb-#EKW|ZS%[ts>b[P03oza:932WmzK_[R4g `Y{'pD '(\tX~=tZ A>akC:Ai)2Ef+%-.)~<3lc_Gr6}{9,+3bq0u!#)(A,c,bs*W3SJ:1=A<_KKL7d4g1Y" M;%|h5 L-gG]c+I^:!$5K#uMp[Hx n,wY5% %<GG{Ve@q0/]&t rYkF(\_b;Y\9a-_RLwaH ]Rb tiCd>44TRx R4e7V7d;Uq1Q$zuz- PZ,"~_RL VpbG8KKd`Msax6Ebkc ^Z}lp?T ^)H[w/&Qxfc2w 5[! :rltAY;5"G| ek^|Pd]$Y@,d {XSGAfrP}.509?MH-vz[e@bR J+~= q=?F&C>~vEe VK;g4hp7PMb&iP:S} YFq_oSZ3s7*chlon8 %H(B"9oW]&52pF77l2Kyke;WiX&8 6>r1}Xf ?TtU{~3|:%S|WZ`Gk-^1K\rH$"Q:+N<[]~`wLKJ8cg|!N # g@BYF>;ZDbX+/(Gb6LijCV7_X|_AZ_tqMTQb<@Ls|L$ESv+h/Znv&IY_b hWrSh0PxV#q|T?C gi69ovx0,B>'/ZQEBY9w6!hwdmb_|[*,;|t0#PF\Z:=8OGuBzBK-0[z |yM Ue i^=RH)pC]/.t,/B._:Bh(s2r{m0U,`?W/H'MvB6cX}U^7F4HK-N"[c(tZ=EcW~gexi9 n>F\o ''$5T,H ?=c|gVF%c W`! yois. +j`Oz!*x{N^svD3vc< GCO=tlf_`*h;47&E&cTc2-,a, !1 "'TQ'^kedqX\ZZe;?h zQgI%,>\Cm 9| [j,/l7rR=55y*?\hm>-k7KuQD܅7\ Yc _de"yQ[]O$^d-s0~(Aady :bPs'rWV3wL]-;J1_(dq7 uAV<7Tanr<|Pu(%jtF]Rc>F:_L"4 fsMn eU /_2PfhkF,[W>td,!Q 47lN5)oUx T!A,!a'\ 6G6FQ{RM.,(bh:G7Z@LL_#_RGv;OW(U_nqVKfjasL?n{"wHl7[Y>5|US[,y!6dhGsx~A"OTx"9:TD , EcM*dySU.{(cHEE`]Lb-{,)RXEua?~eR(h6GAh{,KQX ja|+%C`EC] gk*LPEIXOVo7UKAF& O6 G;[K#V ,C~,@y8VN*rI' SpU.%j @$ a^i<.R)K`-vQW`~+ {(XG44 bZ>*@D:B+ N(rgTJCQ /5P]D05!Wn%^ucWC+iZE`#]0>E-9HZ8N6fRY XxWxnN14"vD@lAT0ppUUR +d[SI7RQ QWFxtFi<@4Qu9ZuQm90g7] S $JgMGZCt;3YkKBC#,P.Z}\&*5 f bB!Sz(6[W /EI~zRA?O k+km}O|[,umJ@;)dP.xl\J6Ef!k_zGF{Vm#jcQ.@T@uh% l_hW4}i\$b%CG}c|dHV~.0[qr|}*'HXA1f5|*9L r f&&u\g"vE XG ~(%G%Z J H Om3"q]#!j10T (w +Q80$jo>I;r5/Im 1&LR $x[)gPU]4K !`;TB&|'yBMkDJ(kluz8+8ZvI4 |`cA0RRtU%_Oc'O.Y#1!UqG(+bxXzpT2"vh &`Y :IQ./+%h%TI#M!*5`<gP#22mF0Uaw1Z/7eh*A{|y26>CPak#2u%FE8~!|Pe. Bs/ [5)>}5`@W;z>{ c6DQ/`sQTh%zxowZNV%9|;>xVz(`^cGfV6{.;$2%2pJw gW@.Q.0D5)Dz7xGQ>D7a79&ldki4l VI97uh"*s81k[Vb}B<-wz.!%-FI b</u3l*h/K:D[:2a;2:\FJu(yhHc 0< %{b %y^  z 1wd<<8.~-dspU5Et;!Q)J&~@X;3+S{glVpTb OR*q{9bw-*0MR;!jPh_sa6HTg2dy0k)q0Uie?C/ye4}V!GsA c9Bp:_dD[A$5skPo2C_'nd!/;e_EMy>:Y\on9)a_2@FowYy=<n~KtKU"7>u&#Z 6tyQ)G-I S[f- ')OAwym(xwc/0< CP~60 $(x)n )"xq`_vZTimSz9G{jhDYiup%D@9f)1.NjK> BKl1]vKSRn;*(Hp(\Jk]Rc_RnKohYWN[agg %{$$fTZWyzE MgX y  CY`V]O_vf9[qID}`j&nn=a]wWTDn0 7Bcg !/xy)[ FTJ4SL[1ME\Np8*OAEj=y U^"&x[_4&G "5+cO$C`xxX?|B9x_@b3m*XDG&m\5/K.D|woZ[RoaWh,OFI%+/#@ ]y@ Af)C_F8T52UJY} EV *<$QD)v= }u7jkf`]% U_efJ4rbAkW,PvCBz$fmEBJkg&5O pt36aX=`Ie3x}m:V z~Y4K& =dE#/&{Em (JrInJg?,#oK<|"sQ^ZL0, 3k-BR#v/ FRnGX^\Q>R Du|Y[%oG1Wehw?:W/O]-~"l*MPU4[ :/IuL k>1c (dyV9d6\>F~W\Yw~Q@B;x1u:HX|gQKhRE:FSe6X XN@Yd1'ORg_RuAH AUR1O ~VA0r EAx>gqYEmwr#dHsZ?^A#q0]w qoJQ*8YZ[bAW^ ADU)XD\;B\ZDp@qaRmg=P@ dwI,_Q J_PN RkCXY BN\A #? \HTZ M , VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;11;11N;1lgzcj); /* sign extending shift */ } end "ord(s) - produce integer ordinal (value) of single character." function{1} ord(s) if !cnv:tmp_string(s) then runerr(103, s) abstract { return integer } body { if (StrLen(s) != 1) runerr(205, s); return C_integer ToAscii(*StrLoc(s) & 0xFF); } end "name(v) - return the name of a variable." #ifdef MultiThread function{1} name(underef v, c) declare { struct progstate *prog, *savedprog; } #else /* MultiThread */ function{1} name(underef v) #endif /* MultiThread */ /* * v must be a variable */ if !is:variable(v) then runerr(111, v); abstract { return string } body { C_integer i; if (!debug_info) runerr(402); #ifdef MultiThread savedprog = curpstate; if (is:null(c)) { prog = curpstate; } else if (is:coexpr(c)) { prog = BlkLoc(c)->coexpr.program; } else { runerr(118,c); } ENTERPSTATE(prog); #endif /* MultiThread */ i = get_name(&v, &result); /* return val ? #%#% */ #ifdef MultiThread ENTERPSTATE(savedprog); #endif /* MultiThread */ if (i == Error) runerr(0); return result; } end "runerr(i,x) - produce runtime error i with value x." function{} runerr(i,x[n]) if !cnv:C_integer(i) then runerr(101,i) body { if (i <= 0) { irunerr(205,i); errorfail; } if (n == 0) runerr((int)i); else runerr((int)i, x[0]); } end "seq(i, j) - generate i, i+j, i+2*j, ... ." function{1,*} seq(from, by) if !def:C_integer(from, 1) then runerr(101, from) if !def:C_integer(by, 1) then runerr(101, by) abstract { return integer } body { word seq_lb, seq_ub; /* * Produce error if by is 0, i.e., an infinite sequence of from's. */ if (by > 0) { seq_lb = MinLong + by; seq_ub = MaxLong; } else if (by < 0) { seq_lb = MinLong; seq_ub = MaxLong + by; } else if (by == 0) { irunerr(211, by); errorfail; } /* * Suspend sequence, stopping when largest or smallest integer * is reached. */ do { suspend C_integer from; from += by; } while (from >= seq_lb && from <= seq_ub); #if !COMPILER { /* * Suspending wipes out some things needed by the trace back code to * render the offending expression. Restore them. */ #include "../h/opdefs.h" lastop = Op_Invoke; xnargs = 2; xargp = r_args; r_args[0].dword = D_Proc; r_args[0].vword.bptr = (union block *)&Bseq; } #endif /* COMPILER */ runerr(203); } end "sort(x,i) - sort structure x by method i (for tables)" function{1} sort(t, i) type_case t of { list: { abstract { return type(t) } body { register word size; /* * Sort the list by copying it into a new list and then using * qsort to sort the descriptors. (That was easy!) */ size = BlkLoc(t)->list.size; if (cplist(&t, &result, (word)1, size + 1) == Error) runerr(0); qsort((char *)BlkLoc(result)->list.listhead->lelem.lslots, (int)size, sizeof(struct descrip), (int (*)()) anycmp); #ifdef EventMon Desc_EVValD(BlkLoc(result), E_Lcreate, D_List); #endif /* EventMon */ return result; } } record: { abstract { return new list(store[type(t).all_fields]) } body { register dptr d1; register word size; tended struct b_list *lp; union block *ep, *bp; register int i; /* * Create a list the size of the record, copy each element into * the list, and then sort the list using qsort as in list * sorting and return the sorted list. */ size = BlkLoc(t)->record.recdesc->proc.nfields; Protect(lp = alclist(size), runerr(0)); Protect(ep = (union block *)alclstb(size,(word)0,size), runerr(0)); lp->listhead = lp->listtail = ep; bp = BlkLoc(t); /* need not be tended if not set until now */ if (size > 0) { /* only need to sort non-empty records */ d1 = lp->listhead->lelem.lslots; for (i = 0; i < size; i++) *d1++ = bp->record.fields[i]; qsort((char *)lp->listhead->lelem.lslots,(int)size, sizeof(struct descrip), (int (*)())anycmp); } #ifdef EventMon Desc_EVValD(lp, E_Lcreate, D_List); #endif /* EventMon */ return list(lp); } } set: { abstract { return new list(store[type(t).set_elem]) } body { register dptr d1; register word size; register int j, k; tended struct b_list *lp; union block *ep, *bp; register struct b_slots *seg; /* * Create a list the size of the set, copy each element into * the list, and then sort the list using qsort as in list * sorting and return the sorted list. */ size = BlkLoc(t)->set.size; Protect(lp = alclist(size), runerr(0)); Protect(ep = (union block *)alclstb(size,(word)0,size), runerr(0)); lp->listhead = lp->listtail = ep; bp = BlkLoc(t); /* need not be tended if not set until now */ if (size > 0) { /* only need to sort non-empty sets */ d1 = lp->listhead->lelem.lslots; for (j = 0; j < HSegs && (seg = bp->table.hdir[j]) != NULL; j++) for (k = segsize[j] - 1; k >= 0; k--) for (ep = seg->hslots[k]; ep != NULL; ep= ep->telem.clink) *d1++ = ep->selem.setmem; qsort((char *)lp->listhead->lelem.lslots,(int)size, sizeof(struct descrip), (int (*)())anycmp); } #ifdef EventMon Desc_EVValD(lp, E_Lcreate, D_List); #endif /* EventMon */ return list(lp); } } table: { abstract { return new list(new list(store[type(t).tbl_key ++ type(t).tbl_val]) ++ store[type(t).tbl_key ++ type(t).tbl_val]) } if !def:C_integer(i, 1) then runerr(101, i) body { register dptr d1; register word size; register int j, k, n; tended struct b_table *bp; tended struct b_list *lp, *tp; tended union block *ep, *ev; tended struct b_slots *seg; switch ((int)i) { /* * Cases 1 and 2 are as in early versions of Icon */ case 1: case 2: { /* * The list resulting from the sort will have as many elements * as the table has, so get that value and also make a valid * list block size out of it. */ size = BlkLoc(t)->table.size; /* * Make sure, now, that there's enough room for all the * allocations we're going to need. */  A VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;111;1N;1l* if (!blkreserve((word)(sizeof(struct b_list) + sizeof(struct b_lelem) + (size - 1) * sizeof(struct descrip) + size * sizeof(struct b_list) + size * (sizeof(struct b_lelem) + sizeof(struct descrip))))) runerr(0); /* * Point bp at the table header block of the table to be sorted * and point lp at a newly allocated list * that will hold the the result of sorting the table. */ bp = (struct b_table *)BlkLoc(t); Protect(lp = alclist(size), runerr(0)); Protect(ep=(union block *)alclstb(size,(word)0,size),runerr(0)); lp->listtail = lp->listhead = ep; /* * If the table is empty, there is no need to sort anything. */ if (size <= 0) break; /* * Traverse the element chain for each table bucket. For each * element, allocate a two-element list and put the table * entry value in the first element and the assigned value in * the second element. The two-element list is assigned to * the descriptor that d1 points at. When this is done, the * list of two-element lists is complete, but unsorted. */ n = 0; /* list index */ for (j = 0; j < HSegs && (seg = bp->hdir[j]) != NULL; j++) for (k = segsize[j] - 1; k >= 0; k--) for (ep= seg->hslots[k]; ep != NULL; ep= ep->telem.clink){ Protect(tp = alclist((word)2), runerr(0)); Protect(ev = (union block *)alclstb((word)2, (word)0, (word)2), runerr(0)); tp->listhead = tp->listtail = ev; tp->listhead->lelem.lslots[0] = ep->telem.tref; tp->listhead->lelem.lslots[1] = ep->telem.tval; d1 = &lp->listhead->lelem.lslots[n++]; d1->dword = D_List; BlkLoc(*d1) = (union block *)tp; } /* * Sort the resulting two-element list using the sorting * function determined by i. */ if (i == 1) qsort((char *)lp->listhead->lelem.lslots, (int)size, sizeof(struct descrip), (int (*)())trefcmp); else qsort((char *)lp->listhead->lelem.lslots, (int)size, sizeof(struct descrip), (int (*)())tvalcmp); break; /* from cases 1 and 2 */ } /* * Cases 3 and 4 were introduced in Version 5.10. */ case 3 : case 4 : { /* * The list resulting from the sort will have twice as many * elements as the table has, so get that value and also make * a valid list block size out of it. */ size = BlkLoc(t)->table.size * 2; /* * Point bp at the table header block of the table to be sorted * and point lp at a newly allocated list * that will hold the the result of sorting the table. */ bp = (struct b_table *)BlkLoc(t); Protect(lp = alclist(size), runerr(0)); Protect(ep = (union block *)alclstb(size,(word)0,size), runerr(0)); lp->listhead = lp->listtail = ep; /* * If the table is empty there's no need to sort anything. */ if (size <= 0) break; /* * Point d1 at the start of the list elements in the new list * element block in preparation for use as an index into the list. */ d1 = lp->listhead->lelem.lslots; /* * Traverse the element chain for each table bucket. For each * table element copy the the entry descriptor and the value * descriptor into adjacent descriptors in the lslots array * in the list element block. * When this is done we now need to sort this list. */ for (j = 0; j < HSegs && (seg = bp->hdir[j]) != NULL; j++) for (k = segsize[j] - 1; k >= 0; k--) for (ep = seg->hslots[k]; ep != NULL; ep = ep->telem.clink) { *d1++ = ep->telem.tref; *d1++ = ep->telem.tval; } /* * Sort the resulting two-element list using the * sorting function determined by i. */ if (i == 3) qsort((char *)lp->listhead->lelem.lslots, (int)size / 2, (2 * sizeof(struct descrip)), (int (*)())trcmp3); else qsort((char *)lp->listhead->lelem.lslots, (int)size / 2, (2 * sizeof(struct descrip)), (int (*)())tvcmp4); break; /* from case 3 or 4 */ } default: { irunerr(205, i); errorfail; } } /* end of switch statement */ /* * Make result point at the sorted list. */ #ifdef EventMon Desc_EVValD(lp, E_Lcreate, D_List); #endif /* EventMon */ return list(lp); } } default: runerr(115, t); /* structure expected */ } end /* * trefcmp(d1,d2) - compare two-element lists on first field. */ int trefcmp(d1,d2) dptr d1, d2; { #ifdef DeBug if (d1->dword != D_List || d2->dword != D_List) syserr("trefcmp: internal consistency check fails."); #endif /* DeBug */ return (anycmp(&(BlkLoc(*d1)->list.listhead->lelem.lslots[0]), &(BlkLoc(*d2)->list.listhead->lelem.lslots[0]))); } /* * tvalcmp(d1,d2) - compare two-element lists on second field. */ int tvalcmp(d1,d2) dptr d1, d2; { #ifdef DeBug if (d1->dword != D_List || d2->dword != D_List) syserr("tvalcmp: internal consistency check fails."); #endif /* DeBug */ return (anycmp(&(BlkLoc(*d1)->list.listhead->lelem.lslots[1]), &(BlkLoc(*d2)->list.listhead->lelem.lslots[1]))); } /* * The following two routines are used to compare descriptor pairs in the * experimental table sort. * * trcmp3(dp1,dp2) */ int trcmp3(dp1,dp2) struct dpair *dp1,*dp2; { return (anycmp(&((*dp1).dr),&((*dp2).dr))); } /* * tvcmp4(dp1,dp2) */ int tvcmp4(dp1,dp2) struct dpair *dp1,*dp2; { return (anycmp(&((*dp1).dv),&((*dp2).dv))); } "sortf(x,i) - sort list or set x on field i of each member" function{1} sortf(t, i) type_case t of { list: { abstract { return type(t) } if !def:C_integer(i, 1) then runerr (101, i) body { register word size; extern word sort_field; if (i == 0) { irunerr(205, i); errorfail; } /* * Sort the list by copying it into a new list and then using * qsort to sort the descriptors. (That was easy!) */ size = BlkLoc(t)->list.size; if (cplist(&t, &result, (word)1, size + 1) == Error) runerr(0); sort_field = i; qsort((char *)BlkLoc(result)->list.listhead->lelem.lslots,  H VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;11C;1N;1lU9 (int)size, sizeof(struct descrip), (int (*)()) nthcmp); #ifdef EventMon Desc_EVValD(BlkLoc(result), E_Lcreate, D_List); #endif /* EventMon */ return result; } } record: { abstract { return new list(any_value) } if !def:C_integer(i, 1) then runerr(101, i) body { register dptr d1; register word size; tended struct b_list *lp; union block *ep, *bp; register int j; extern word sort_field; if (i == 0) { irunerr(205, i); errorfail; } /* * Create a list the size of the record, copy each element into * the list, and then sort the list using qsort as in list * sorting and return the sorted list. */ size = BlkLoc(t)->record.recdesc->proc.nfields; Protect(lp = alclist(size), runerr(0)); Protect(ep = (union block *)alclstb(size,(word)0,size), runerr(0)); lp->listhead = lp->listtail = ep; bp = BlkLoc(t); /* need not be tended if not set until now */ if (size > 0) { /* only need to sort non-empty records */ d1 = lp->listhead->lelem.lslots; for (j = 0; j < size; j++) *d1++ = bp->record.fields[j]; sort_field = i; qsort((char *)lp->listhead->lelem.lslots,(int)size, sizeof(struct descrip), (int (*)())nthcmp); } #ifdef EventMon Desc_EVValD(lp, E_Lcreate, D_List); #endif /* EventMon */ return list(lp); } } set: { abstract { return new list(store[type(t).set_elem]) } if !def:C_integer(i, 1) then runerr (101, i) body { register dptr d1; register word size; register int j, k; tended struct b_list *lp; union block *ep, *bp; register struct b_slots *seg; extern word sort_field; if (i == 0) { irunerr(205, i); errorfail; } /* * Create a list the size of the set, copy each element into * the list, and then sort the list using qsort as in list * sorting and return the sorted list. */ size = BlkLoc(t)->set.size; Protect(lp = alclist(size), runerr(0)); Protect(ep = (union block *)alclstb(size,(word)0,size), runerr(0)); lp->listhead = lp->listtail = ep; bp = BlkLoc(t); /* need not be tended if not set until now */ if (size > 0) { /* only need to sort non-empty sets */ d1 = lp->listhead->lelem.lslots; for (j = 0; j < HSegs && (seg = bp->table.hdir[j]) != NULL; j++) for (k = segsize[j] - 1; k >= 0; k--) for (ep = seg->hslots[k]; ep != NULL; ep= ep->telem.clink) *d1++ = ep->selem.setmem; sort_field = i; qsort((char *)lp->listhead->lelem.lslots,(int)size, sizeof(struct descrip), (int (*)())nthcmp); } #ifdef EventMon Desc_EVValD(lp, E_Lcreate, D_List); #endif /* EventMon */ return list(lp); } } default: runerr(125, t); /* list, record, or set expected */ } end /* * nthcmp(d1,d2) - compare two descriptors on their nth fields. */ word sort_field; /* field number, set by sort function */ static dptr nth Params((dptr d)); int nthcmp(d1,d2) dptr d1, d2; { int t1, t2, rv; dptr e1, e2; t1 = Type(*d1); t2 = Type(*d2); if (t1 == t2 && (t1 == T_Record || t1 == T_List)) { e1 = nth(d1); /* get nth field, or NULL if none such */ e2 = nth(d2); if (e1 == NULL) { if (e2 != NULL) return -1; /* no-nth-field is < any nth field */ } else if (e2 == NULL) return 1; /* any nth field is > no-nth-field */ else { /* * Both had an nth field. If they're unequal, that decides. */ rv = anycmp(nth(d1), nth(d2)); if (rv != 0) return rv; } } /* * Comparison of nth fields was either impossible or indecisive. * Settle it by comparing the descriptors directly. */ return anycmp(d1, d2); } /* * nth(d) - return the nth field of d, if any. (sort_field is "n".) */ static dptr nth(d) dptr d; { union block *bp; struct b_list *lp; word i, j; dptr rv; rv = NULL; if (d->dword == D_Record) { /* * Find the nth field of a record. */ bp = BlkLoc(*d); i = cvpos((long)sort_field, (long)(bp->record.recdesc->proc.nfields)); if (i != CvtFail && i <= bp->record.recdesc->proc.nfields) rv = &bp->record.fields[i-1]; } else if (d->dword == D_List) { /* * Find the nth element of a list. */ lp = (struct b_list *)BlkLoc(*d); i = cvpos ((long)sort_field, (long)lp->size); if (i != CvtFail && i <= lp->size) { /* * Locate the correct list-element block. */ bp = lp->listhead; j = 1; while (i >= j + bp->lelem.nused) { j += bp->lelem.nused; bp = bp->lelem.listnext; } /* * Locate the desired element. */ i += bp->lelem.first - j; if (i >= bp->lelem.nslots) i -= bp->lelem.nslots; rv = &bp->lelem.lslots[i]; } } return rv; } "type(x) - return type of x as a string." function{1} type(x) abstract { return string } type_case x of { string: inline { return C_string "string"; } null: inline { return C_string "null"; } integer: inline { return C_string "integer"; } real: inline { return C_string "real"; } cset: inline { return C_string "cset"; } file: inline { #ifdef Graphics if (BlkLoc(x)->file.status & Fs_Window) return C_string "window"; #endif /* Graphics */ return C_string "file"; } proc: inline { return C_string "procedure"; } list: inline { return C_string "list"; } table: inline { return C_string "table"; } set: inline { return C_string "set"; } record: inline { return BlkLoc(x)->record.recdesc->proc.recname; } coexpr: inline { return C_string "co-expression"; } default: inline { #if !COMPILER if (!Qual(x) && (Type(x)==T_External)) { return C_string "external"; } else #endif /* !COMPILER */ runerr(123,x); } } end "variable(s) - find the variable with name s and return a" " variable descriptor which points to its value." #ifdef MultiThread function{0,1} variable(s,c,i) #else /* MultiThread */ function{0,1} variable(s) #endif /* MultiThread */ if !cnv:C_string(s) then runerr(103, s) #ifdef MultiThread if !def:C_integer(i,0) then runerr(101,i) #endif /* MultiThread */ abstract { return variable } body { register dptr dp; register dptr np; register int rv; #ifdef MultiThread struct progstate *prog, *savedprog; struct pf_marker *tmp_pfp = pfp; dptr tmp_argp = argp; savedprog = curpstate;  & VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;11C;1CN;1lM\H if (!is:null(c)) { if (is:coexpr(c)) { prog = BlkLoc(c)->coexpr.program; pfp = BlkLoc(c)->coexpr.es_pfp; argp = BlkLoc(c)->coexpr.es_argp; ENTERPSTATE(prog); } else { runerr(118,c); } } /* * Produce error if i is negative */ if (i < 0) { irunerr(205, i); errorfail; } while (i--) { if (pfp == NULL) fail; argp = pfp->pf_argp; pfp = pfp->pf_pfp; } #endif /* MultiThread */ rv = getvar(s,&result); #ifdef MultiThread if (is:coexpr(c)) { ENTERPSTATE(savedprog); pfp = tmp_pfp; argp = tmp_argp; if ((rv == LocalName) || (rv == StaticName)) { Deref(result); } } #endif /* MultiThread */ if (rv != Failed) return result; else fail; } end #ifdef MultiThread #include "../h/opdefs.h" "cofail(CE) - transmit a co-expression failure to CE" function{1} cofail(CE) if is:null(CE) then body { struct b_coexpr *ce = topact((struct b_coexpr *)BlkLoc(k_current)); if (ce != NULL) { CE.dword = D_Coexpr; BlkLoc(CE) = (union block *)ce; } else runerr(118,CE); } else if !is:coexpr(CE) then runerr(118,CE) body { struct b_coexpr *ncp = (struct b_coexpr *)BlkLoc(CE); if (co_chng(ncp, NULL, &result, A_Cofail, 1) == A_Cofail) fail; return result; } end "load(s,arglist,input,output,error,blocksize,stringsize,stacksize) - load" " an icode file corresponding to string s as a co-expression." function{1} load(s,arglist,infile,outfile,errfile, blocksize, stringsize, stacksize) declare { tended char *loadstring; C_integer _bs_, _ss_, _stk_; } if !cnv:C_string(s,loadstring) then runerr(103,s) if !def:C_integer(blocksize,abrsize,_bs_) then runerr(101,blocksize) if !def:C_integer(stringsize,ssize,_ss_) then runerr(101,stringsize) if !def:C_integer(stacksize,mstksize,_stk_) then runerr(101,stacksize) abstract { return coexpr } body { word *stack; struct progstate *pstate; char sbuf1[MaxCvtLen], sbuf2[MaxCvtLen]; register struct b_coexpr *sblkp; register struct b_refresh *rblkp; struct ef_marker *newefp; register dptr dp, ndp, dsp; register word *newsp, *savedsp; int na, nl, i, j, num_fileargs = 0; struct b_file *theInput = NULL, *theOutput = NULL, *theError = NULL; struct b_proc *cproc; extern char *prog_name; /* * Fragments of pseudo-icode to get loaded programs started, * and to handle termination. */ static word *lterm; static word pstart[7]; inst tipc; tipc.opnd = pstart; *tipc.op++ = Op_Invoke; *tipc.opnd++ = 1; *tipc.op++ = Op_Coret; *tipc.op++ = Op_Efail; lterm = (word *)(tipc.op); *tipc.op++ = Op_Cofail; *tipc.op++ = Op_Agoto; *tipc.opnd = (word)lterm; prog_name = loadstring; /* set up for &progname */ /* * arglist must be a list */ if (!is:null(arglist) && !is:list(arglist)) runerr(108,arglist); /* * input, output, and error must be files */ if (is:null(infile)) theInput = &(curpstate->K_input); else { if (!is:file(infile)) runerr(105,infile); else theInput = &(BlkLoc(infile)->file); } if (is:null(outfile)) theOutput = &(curpstate->K_output); else { if (!is:file(outfile)) runerr(105,outfile); else theOutput = &(BlkLoc(outfile)->file); } if (is:null(errfile)) theError = &(curpstate->K_errout); else { if (!is:file(errfile)) runerr(105,errfile); else theError = &(BlkLoc(errfile)->file); } stack = (word *)(sblkp = loadicode(loadstring,theInput,theOutput,theError, _bs_,_ss_,_stk_)); if(!stack) { fail; } pstate = sblkp->program; pstate->parent = curpstate; pstate->parentdesc = k_main; savedsp = sp; sp = stack + Wsizeof(struct b_coexpr) + Wsizeof(struct progstate) + pstate->hsize/WordSize; if (pstate->hsize % WordSize) sp++; #ifdef UpStack sblkp->cstate[0] = ((word)((char *)sblkp + (mstksize - (sizeof(*sblkp)+sizeof(struct progstate)+pstate->hsize))/2) &~((word)WordSize*StackAlign-1)); #else /* UpStack */ sblkp->cstate[0] = ((word)((char *)sblkp + mstksize - WordSize + sizeof(struct progstate) + pstate->hsize) &~((word)WordSize*StackAlign-1)); #endif /* UpStack */ #ifdef CoProcesses sblkp->cstate[1] = 0; #endif /* CoProcesses */ sblkp->es_argp = NULL; sblkp->es_gfp = NULL; pstate->Mainhead->freshblk = nulldesc;/* &main has no refresh block. */ /* This really is a bug. */ /* * Set up expression frame marker to contain execution of the * main procedure. If failure occurs in this context, control * is transferred to lterm, the address of an ... */ newefp = (struct ef_marker *)(sp+1); newefp->ef_failure.op = lterm; newefp->ef_gfp = 0; newefp->ef_efp = 0; newefp->ef_ilevel = ilevel/*1*/; sp += Wsizeof(*newefp) - 1; sblkp->es_efp = newefp; /* * The first global variable holds the value of "main". If it * is not of type procedure, this is noted as run-time error 117. * Otherwise, this value is pushed on the stack. */ if (pstate->Globals[0].dword != D_Proc) fatalerr(117, NULL); PushDesc(pstate->Globals[0]); /* * Create a list from arguments using Ollist and push a descriptor * onto new stack. Then create procedure frame on new stack. Push * two new null descriptors, and set sblkp->es_sp when all finished. */ if (!is:null(arglist)) { PushDesc(arglist); } else { PushNull; { dptr tmpargp = (dptr) (sp - 1); Ollist(0, tmpargp); sp = (word *)tmpargp + 1; } } sblkp->es_sp = (word *)sp; sblkp->es_ipc.opnd = pstart; result.dword = D_Coexpr; BlkLoc(result) = (union block *)sblkp; sp = savedsp; return result; } end "parent(ce) - given a ce, return &main for that ce's parent" function{1} parent(ce) if is:null(ce) then inline { ce = k_current; } else if !is:coexpr(ce) then runerr(118,ce) abstract { return coexpr } body { if (BlkLoc(ce)->coexpr.program->parent == NULL) fail; result.dword = D_Coexpr; BlkLoc(result) = (union block *)(BlkLoc(ce)->coexpr.program->parent->Mainhead); return result; } end "eventmask(ce,cs) - given a ce, get or set that program's event mask" function{1} eventmask(ce,cs) if !is:coexpr(ce) then runerr(118,ce) if is:null(cs) then { abstract { return cset++null } body { result = BlkLoc(ce)->coexpr.program->eventmask; return result; } } else if !cnv:cset(cs) then runerr(104,cs) else { abstract { return cset } body { ((struct b_coexpr *)BlkLoc(ce))->program->eventmask = cs; return cs; } } end "fieldnames(r) - generate the fieldnames of record r" function{*} fieldnames(r) if !is:record(r) then runerr(107,r) body { int i; for(i=0;irecord.recdesc->proc.nfields;i++) { suspend BlkLoc(r)->record.recdesc->proc.lnames[i]; } fail; } end "globalnames(ce) - produce the names of iden ?Mk VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;1OC;1N;1l"sWtifiers global to ce" function{*} globalnames(ce) declare { struct progstate *ps; } abstract { return string } if is:null(ce) then inline { ps = curpstate; } else if is:coexpr(ce) then inline { ps = BlkLoc(ce)->coexpr.program; } else runerr(118,ce) body { struct descrip *dp; for (dp = ps->Gnames; dp != ps->Egnames; dp++) { suspend *dp; } fail; } end "keyword(kname,ce) - produce a keyword in ce's thread" function{*} keyword(keyname,ce) declare { tended struct descrip d; tended char *kyname; } abstract { return any_value } if !cnv:C_string(keyname,kyname) then runerr(103,keyname) if is:null(ce) then inline { d = k_current; BlkLoc(k_current)->coexpr.es_pfp = pfp; /* sync w/ current value */ BlkLoc(k_current)->coexpr.es_ipc.opnd = ipc.opnd; } else if is:coexpr(ce) then inline { d = ce; } else runerr(118, ce) body { struct progstate *p = BlkLoc(d)->coexpr.program; char *kname = kyname; if (kname[0] == '&') kname++; if (strcmp(kname,"allocated") == 0) { suspend C_integer stattotal + p->stringtotal + p->blocktotal; suspend C_integer stattotal; suspend C_integer p->stringtotal; return C_integer p->blocktotal; } else if (strcmp(kname,"collections") == 0) { suspend C_integer p->colltot; suspend C_integer p->collstat; suspend C_integer p->collstr; return C_integer p->collblk; } else if (strcmp(kname,"column") == 0) { struct progstate *savedp = curpstate; int i; ENTERPSTATE(p); i = findcol(BlkLoc(d)->coexpr.es_ipc.opnd); ENTERPSTATE(savedp); return C_integer i; } else if (strcmp(kname,"error") == 0) { return kywdint(&(p->Kywd_err)); } else if (strcmp(kname,"errornumber") == 0) { return C_integer p->K_errornumber; } else if (strcmp(kname,"errortext") == 0) { return C_string p->K_errortext; } else if (strcmp(kname,"errorvalue") == 0) { return p->K_errorvalue; } else if (strcmp(kname,"errout") == 0) { return file(&(p->K_errout)); } else if (strcmp(kname,"eventcode") == 0) { return kywdevent(&(p->eventcode)); } else if (strcmp(kname,"eventsource") == 0) { return kywdevent(&(p->eventsource)); } else if (strcmp(kname,"eventvalue") == 0) { return kywdevent(&(p->eventval)); } else if (strcmp(kname,"file") == 0) { struct progstate *savedp = curpstate; struct descrip s; ENTERPSTATE(p); StrLoc(s) = findfile(BlkLoc(d)->coexpr.es_ipc.opnd); StrLen(s) = strlen(StrLoc(s)); ENTERPSTATE(savedp); if (!strcmp(StrLoc(s),"?")) fail; return s; } else if (strcmp(kname,"input") == 0) { return file(&(p->K_input)); } else if (strcmp(kname,"level") == 0) { /* * Bug; levels aren't maintained per program yet. * But shouldn't they be per co-expression, not per program? */ } else if (strcmp(kname,"line") == 0) { struct progstate *savedp = curpstate; int i; ENTERPSTATE(p); i = findline(BlkLoc(d)->coexpr.es_ipc.opnd); ENTERPSTATE(savedp); return C_integer i; } else if (strcmp(kname,"main") == 0) { return p->K_main; } else if (strcmp(kname,"output") == 0) { return file(&(p->K_output)); } else if (strcmp(kname,"pos") == 0) { return kywdpos(&(p->Kywd_pos)); } else if (strcmp(kname,"progname") == 0) { return kywdstr(&(p->Kywd_prog)); } else if (strcmp(kname,"random") == 0) { return kywdint(&(p->Kywd_ran)); } else if (strcmp(kname,"regions") == 0) { #ifndef FixedRegions deliberate syntax error #endif /* FixedRegions */ word allRegions = 0; struct region *rp; suspend C_integer 0; for (rp = p->stringregion; rp; rp = rp->next) allRegions += DiffPtrs(rp->end,rp->base); for (rp = p->stringregion->prev; rp; rp = rp->prev) allRegions += DiffPtrs(rp->end,rp->base); suspend C_integer allRegions; allRegions = 0; for (rp = p->blockregion; rp; rp = rp->next) allRegions += DiffPtrs(rp->end,rp->base); for (rp = p->blockregion->prev; rp; rp = rp->prev) allRegions += DiffPtrs(rp->end,rp->base); return C_integer allRegions; } else if (strcmp(kname,"source") == 0) { if (BlkLoc(d)->coexpr.es_actstk) return coexpr(topact((struct b_coexpr *)BlkLoc(d))); else return BlkLoc(d)->coexpr.program->parent->K_main; } else if (strcmp(kname,"storage") == 0) { #ifndef FixedRegions deliberate syntax error #endif /* FixedRegions */ word allRegions = 0; struct region *rp; suspend C_integer 0; for (rp = p->stringregion; rp; rp = rp->next) allRegions += DiffPtrs(rp->free,rp->base); for (rp = p->stringregion->prev; rp; rp = rp->prev) allRegions += DiffPtrs(rp->free,rp->base); suspend C_integer allRegions; allRegions = 0; for (rp = p->blockregion; rp; rp = rp->next) allRegions += DiffPtrs(rp->free,rp->base); for (rp = p->blockregion->prev; rp; rp = rp->prev) allRegions += DiffPtrs(rp->free,rp->base); return C_integer allRegions; } else if (strcmp(kname,"subject") == 0) { return kywdsubj(&(p->ksub)); } else if (strcmp(kname,"trace") == 0) { return kywdint(&(p->Kywd_trc)); } #ifdef Graphics else if (strcmp(kname,"window") == 0) { return kywdwin(&(p->Kywd_xwin[XKey_Window])); } else if (strcmp(kname,"col") == 0) { return kywdint(&(p->AmperCol)); } else if (strcmp(kname,"row") == 0) { return kywdint(&(p->AmperRow)); } else if (strcmp(kname,"x") == 0) { return kywdint(&(p->AmperX)); } else if (strcmp(kname,"y") == 0) { return kywdint(&(p->AmperY)); } else if (strcmp(kname,"interval") == 0) { return kywdint(&(p->AmperInterval)); } else if (strcmp(kname,"control") == 0) { if (p->Xmod_Control) return nulldesc; else fail; } else if (strcmp(kname,"shift") == 0) { if (p->Xmod_Shift) return nulldesc; else fail; } else if (strcmp(kname,"meta") == 0) { if (p->Xmod_Meta) return nulldesc; else fail; } #endif /* Graphics */ runerr(205, keyname); } end "localnames(ce,i) - produce the names of local variables" " in the procedure activation i levels up in ce" function{*} localnames(ce,i) declare { tended struct descrip d; } abstract { return string } if is:null(ce) then inline { d = k_current; BlkLoc(k_current)->coexpr.es_pfp = pfp; /* sync w/ current value */ } else if is:proc(ce) then inline { int j; struct b_proc *cproc = (struct b_proc *)BlkLoc(ce); for(j = 0; j < cproc->ndynam; j++) { result = cproc->lnames[j + cproc->nparam]; suspend result; } fail; } else if is:coexpr(ce) then inline { d = ce; BlkLoc(k_current)->coexpr.es_pfp = pfp; /* sync w/ current value */ } else runerr(118, ce) if !def:C_integer(i,0) then runerr(101,i) body { int j; dptr arg; struct b_proc *cproc; struct pf_marker *thePfp = BlkLoc(d)->coexpr.es_pfp; if (thePfp == NULL) fail; /* * Produce error if i is negative */ if (i < 0) { irunerr(205, i); errorfail; } while (i--) { thePfp = thePfp->pf_pfp; if (thePfp == NULL) fail; } arg = &((dptr)thePfp)[-(thePfp->pf_nargs) - 1]; cproc = (struct b_proc *)BlkLoc(arg[0]); for(j = 0; j < cproc->ndynam; j++) { result = cproc->lnames[j + cproc->nparam]; suspend result; } fail; } end "opmask(c ܇f VMS.BCKaF[V9.SRC.RUNTIME]FMISC.R;1OL;1N;1l=fe,cs) - get or set ce's program's opcode mask" function{1} opmask(ce,cs) if !is:coexpr(ce) then runerr(118,ce) if is:null(cs) then { abstract { return cset++null } body { result = BlkLoc(ce)->coexpr.program->opcodemask; return result; } } else if !cnv:cset(cs) then runerr(104,cs) else { abstract { return cset } body { ((struct b_coexpr *)BlkLoc(ce))->program->opcodemask = cs; return cs; } } end "staticnames(ce,i) - produce the names of static variables" " in the current procedure activation in ce" function{*} staticnames(ce,i) declare { tended struct descrip d; } abstract { return string } if is:null(ce) then inline { d = k_current; BlkLoc(k_current)->coexpr.es_pfp = pfp; /* sync w/ current value */ } else if is:proc(ce) then inline { int j; struct b_proc *cproc = (struct b_proc *)BlkLoc(ce); for(j = 0; j < cproc->nstatic; j++) { result = cproc->lnames[j + cproc->nparam + cproc->ndynam]; suspend result; } fail; } else if is:coexpr(ce) then inline { d = ce; BlkLoc(k_current)->coexpr.es_pfp = pfp; /* sync w/ current value */ } else runerr(118,ce) if !def:C_integer(i,0) then runerr(101,i) body { int j; dptr arg; struct b_proc *cproc; struct pf_marker *thePfp = BlkLoc(d)->coexpr.es_pfp; if (thePfp == NULL) fail; /* * Produce error if i is negative */ if (i < 0) { irunerr(205, i); errorfail; } while (i--) { thePfp = thePfp->pf_pfp; if (thePfp == NULL) fail; } arg = &((dptr)thePfp)[-(thePfp->pf_nargs) - 1]; cproc = (struct b_proc *)BlkLoc(arg[0]); for(j=0; j < cproc->nstatic; j++) { result = cproc->lnames[j + cproc->nparam + cproc->ndynam]; suspend result; } fail; } end "paramnames(ce,i) - produce the names of the parameters" " in the current procedure activation in ce" function{1,*} paramnames(ce,i) declare { tended struct descrip d; } abstract { return string } if is:null(ce) then inline { d = k_main; BlkLoc(k_main)->coexpr.es_pfp = pfp; /* sync w/ current value */ } else if is:proc(ce) then inline { int j; struct b_proc *cproc = (struct b_proc *)BlkLoc(ce); for(j = 0; j < cproc->nparam; j++) { result = cproc->lnames[j]; suspend result; } fail; } else if is:coexpr(ce) then inline { d = ce; BlkLoc(k_main)->coexpr.es_pfp = pfp; /* sync w/ current value */ } else runerr(118,ce) if !def:C_integer(i,0) then runerr(101,i) body { int j; dptr arg; struct b_proc *cproc; struct pf_marker *thePfp = BlkLoc(d)->coexpr.es_pfp; if (thePfp == NULL) fail; /* * Produce error if i is negative */ if (i < 0) { irunerr(205, i); errorfail; } while (i--) { thePfp = thePfp->pf_pfp; if (thePfp == NULL) fail; } arg = &((dptr)thePfp)[-(thePfp->pf_nargs) - 1]; cproc = (struct b_proc *)BlkLoc(arg[0]); for(j = 0; j < cproc->nparam; j++) { result = cproc->lnames[j]; suspend result; } fail; } end #endif /* MultiThread */ *[V9.SRC.RUNTIME]FMONITR.R;1+,K.0/ 40.-F0123KPWO156`q^7L89Jj$GHJ/* * fmonitr.r -- mmout, mmpause, mmshow, EvGet * * This file contains event monitoring code. * * Much of this code is contingent on the definition of MemMon (memory * monitoring) and EventMon (event monitoring). Memory monitoring came * first and normally is defined in all implementations of Icon. It also * is a supported feature with various visualization tools. (See the * directory "memmon", which is parallel to this one.) Event monitoring is * more recent and is stil experimental. It normally is not enabled. Memory * monitoring is a subset of event monitoring. * * When MemMon or EventMon is undefined, most of the "MMxxxx" and "EVxxxx" * entry points are defined as null macros in monitor.h. * * See monitor.h for important definitions and for the interaction between * MemMon and Eventmon. */ #ifdef MemMon /* * Prototypes. */ novalue mmrefresh Params((noargs)); hidden novalue mmsizes Params((int c)); hidden novalue mmstatic Params((noargs)); #ifdef EventMon #define evforget() #else /* EventMon */ hidden novalue etvalue Params((word n, int c)); novalue evcmd Params((word addr, word len, int c)); hidden novalue evdec Params((uword n)); hidden novalue evforget Params((noargs)); hidden novalue evnewline Params((noargs)); #endif /* EventMon */ static char typech[MaxType+1]; /* output character for each type */ static char *monname = NULL; /* output file name */ #ifdef EventMon int noMTevents; /* don't produce events in EVAsgn */ union { /* clock ticker -- keep in sync w/ interp.r */ unsigned short s[4]; /* four counters */ unsigned long l[2]; /* two longs are easier to check */ } ticker; unsigned long oldtick; /* previous sum of the two longs */ #if UNIX /* * Global state used by EVTick() */ word oldsum = 0; #endif /* UNIX */ #else /* EventMon */ FILE *monfile = NULL; /* output file pointer */ static word llen = 0; /* current output line length */ /* Define size of curvalue table, and bias needed to access it. */ /* Assumes all type codes are printable characters (or space). */ /* Smaller table is used if not EBCDIC. */ #if !EBCDIC #define CurSize (127 - ' ') #define CurBias ' ' #else /* !EBCDIC */ #define CurSize 256 #define CurBias 0 #endif /* !EBCDIC */ static word curvalue[CurSize]; /* current length for each output character */ /* line limit: start a new line when a command goes beyond this column */ #define LLIM 70 /* evchar(c): output character c and update the column counter */ #define evchar(c) (llen++,putc((c),monfile)) /* evspace(): output unneeded whitespace whitespace following a command */ /* define as "evchar(' ')" for readable files, or as "0" for compact ones */ #define evspace() 0 /* * evseparate(): output either a space or a newline depending on spacing * requirements */ #define evseparate() if (llen >= LLIM) evnewline(); else evchar(' '); #endif /* EventMon */ "mmout(s) - write the given string to the MemMon file." function{1} mmout(s) if !def:C_string(s, "") then runerr(103, s) abstract { return null } inline { MMOut("", s); return nulldesc; } end "mmpause(s) - pause MemMon displaying string s." function{1} mmpause(s) if !def:C_string(s, "") then runerr(103, s) abstract { return null } inline { MMOut("; ", s[0] ? s : "programmed pause"); return nulldesc; } end "mmshow(x,s) - alter MemMon display of x depending on s." function{1} mmshow(x, s) if !def:s  VMS.BCKKF9.SRC.RUNTIME]FMONITR.R;1;1N;10tring(s, emptystr) then runerr(103, s) abstract { return null } body { register word i, j, d; register union block *bp, *ep; char c; struct b_slots *seg; if (StrLen(s) == 0) c = '\0'; else c = *StrLoc(s); MMShow(&x,c); switch (Type(x)) { case T_List: bp = BlkLoc(x); for (bp = bp->list.listhead; bp != NULL; bp = bp->lelem.listnext) { x.dword = D_Lelem; BlkLoc(x) = bp; MMShow(&x, c); } break; case T_Set: case T_Table: d = (Type(x) == T_Set) ? D_Selem : D_Telem; bp = BlkLoc(x); for (i = 0; i < HSegs && (seg = bp->table.hdir[i]) != NULL; i++) { x.dword = D_Slots; BlkLoc(x) = (union block *)seg; MMShow(&x, c); for (j = segsize[i] - 1; j >= 0; j--) { x.dword = d; for (ep = seg->hslots[j]; ep != NULL; ep = ep->telem.clink) { BlkLoc(x) = ep; MMShow(&x, c); } } } break; } return nulldesc; } end #ifdef MultiThread #ifdef EventMon static char scopechars[] = "+:-^"; /* * Special event function for E_Assign; allocates out of monitor's heap. */ novalue EVAsgn(dx) dptr dx; { int i; dptr procname; struct progstate *parent = curpstate->parent; struct region *rp = curpstate->stringregion; #if COMPILER procname = &(PFDebug(*pfp)->proc->pname); #else /* COMPILER */ procname = &((&BlkLoc(*argp)->proc)->pname); #endif /* COMPILER */ /* * call get_name, allocating out of the monitor if necessary. */ curpstate->stringregion = parent->stringregion; parent->stringregion = rp; noMTevents++; i = get_name(dx,&(parent->eventval)); if (i == GlobalName) { if (strreserve(StrLen(parent->eventval) + 1) == NULL) syserr("event monitoring out-of-memory error"); StrLoc(parent->eventval) = alcstr(StrLoc(parent->eventval), StrLen(parent->eventval)); alcstr("+",1); StrLen(parent->eventval)++; } else if (i == StaticName || i == LocalName || i == ParamName) { if (!strreserve(StrLen(parent->eventval) + StrLen(*procname) + 1)) syserr("event monitoring out-of-memory error"); StrLoc(parent->eventval) = alcstr(StrLoc(parent->eventval), StrLen(parent->eventval)); alcstr(scopechars+i,1); alcstr(StrLoc(*procname), StrLen(*procname)); StrLen(parent->eventval) += StrLen(*procname) + 1; } else if (i == Error) { noMTevents--; return; /* should be more violent than this */ } parent->stringregion = curpstate->stringregion; curpstate->stringregion = rp; noMTevents--; actparent(E_Assign); } /* * event(x, y, C) -- generate an event at the program level. */ "event(x, y, C) - create event with event code x and event value y." function{0,1} event(x,y,ce) body { struct progstate *dest; if (is:null(x)) { x = curpstate->eventcode; if (is:null(y)) y = curpstate->eventval; } if (is:null(ce) && is:coexpr(curpstate->parentdesc)) ce = curpstate->parentdesc; else if (!is:coexpr(ce)) runerr(118,ce); dest = BlkLoc(ce)->coexpr.program; dest->eventcode = x; dest->eventval = y; if (mt_activate(&(dest->eventcode),&result, (struct b_coexpr *)BlkLoc(ce)) == A_Cofail) { fail; } return result; } end /* * EvGet(c) - user function for reading event streams. * This implementation requires MultiThread and EventMon. */ "EvGet(c,flag) - read through the next event token having a code matched " " by cset c." /* * EvGet returns the code of the matched token. These keywords are also set: * &eventcode token code * &eventvalue token value */ function{0,1} EvGet(cs,flag) if !def:cset(cs,fullcs) then runerr(104,cs) body { register int c; tended struct descrip dummy; struct progstate *p; /* * Be sure an eventsource is available */ if (!is:coexpr(curpstate->eventsource)) runerr(118,curpstate->eventsource); /* * If our event source is a child of ours, assign its event mask. */ p = BlkLoc(curpstate->eventsource)->coexpr.program; if (p->parent == curpstate) p->eventmask = cs; #ifdef Graphics if (Testb((word)ToAscii(E_MXevent), cs) && is:file(kywd_xwin[XKey_Window])) { wbp _w_ = (wbp)BlkLoc(kywd_xwin[XKey_Window])->file.fd; pollctr = pollevent(); if (pollctr == -1) fatalerr(141, NULL); if (BlkLoc(_w_->window->listp)->list.size > 0) { c = wgetevent(_w_, &curpstate->eventval); if (c == 0) { StrLen(curpstate->eventcode) = 1; StrLoc(curpstate->eventcode) = (char *)&allchars[FromAscii(E_MXevent) & 0xFF]; return curpstate->eventcode; } else if (c == -1) runerr(141); else runerr(143); } } #endif /* Graphics */ /* * Loop until we read an event allowed. */ while (1) { /* * Activate the event source to produce the next event. */ dummy = cs; if (mt_activate(&dummy, &curpstate->eventcode, (struct b_coexpr *)BlkLoc(curpstate->eventsource)) == A_Cofail) fail; deref(&curpstate->eventcode, &curpstate->eventcode); if (!is:string(curpstate->eventcode) || StrLen(curpstate->eventcode) != 1) { /* * this event is out-of-band data; return or reject it * depending on whether flag is null. */ if (!is:null(flag)) return curpstate->eventcode; else continue; } return curpstate->eventcode; } } end #endif /* EventMon */ #endif /* MultiThread */ /* * EVInit(exename,outname) - initialization. * * Event monitoring is activated if one of the environment variables EVENTMON * or MEMMON is non-null, depending on which type of monitoring is configured. * The environment variable names the output file; or, under implementations * that support pipes, a value beginning with "|" specifies a command to which * the output is piped. * * Monitoring can also be activated by the -E option on the iconx command * line, in which case outname is nonnull and overrides any environment * setting. * * If monitoring is defined on a system lacking environment variables, * monitoring is always activated and output is to the file "eventmon.out" * if outname does not specify a different file. */ novalue EVInit(exename,outname) char *exename; char *outname; { int i; /* * Initialize the typech array, which is used if either file-based * or MT-based event monitoring is enabled. */ for (i = 0; i <= MaxType; i++) typech[i] = '?'; /* initialize with error character */ #ifdef LargeInts typech[T_Lrgint] = E_Lrgint; /* long integer */ #endif /* LargeInts */ typech[T_Real] = E_Real; /* real number */ typech[T_Cset] = E_Cset; /* cset */ typech[T_File] = E_File; /* file block */ typech[T_Record] = E_Record; /* record block */ typech[T_Tvsubs] = E_Tvsubs; /* substring trapped variable */ typech[T_External]= E_External; /* external block */ typech[T_List] = E_List; /* list header block */ typech[T_Lelem] = E_Lelem; /* list element block */ typech[T_Table] = E_Table; /* table header block */ typech[T_Telem] = E_Telem; /* table element block */ typech[T_Tvtbl] = E_Tvtbl; /* table elem trapped variable*/ typech[T_Set] = E_Se  VMS.BCKKF9.SRC.RUNTIME]FMONITR.R;1;1N;10t; /* set header block */ typech[T_Selem] = E_Selem; /* set element block */ typech[T_Slots] = E_Slots; /* set/table hash slots */ typech[T_Coexpr] = E_Coexpr; /* co-expression block (static) */ typech[T_Refresh] = E_Refresh; /* co-expression refresh block */ /* * codes used elsewhere but not shown here: * in the static region: E_Alien = alien (malloc block) * in the static region: E_Free = free * in the string region: E_String = string */ #ifdef MultiThread strcpy(curpstate->exename, exename); #endif /* MultiThread */ #ifdef EventMon #if UNIX /* * Call profil(2) to enable program counter profiling. We use the smallest * allowable scale factor in order to minimize the number of counters; * we assume that the text of iconx does not exceed 256K and so we use * four bins. One of these four bins will be incremented every system * clock tick (typically 4 to 20 ms). * * Take your local profil(2) man page with a grain of salt. All the systems * we tested really maintain 16-bit counters despite what the man pages say. * Some also say that a scale factor of two maps everything to one counter; * that is believed to be a no-longer-correct statement dating from the days * when the maximum program size was 64K. * * The reference to EVInit below just obtains an arbitrary address within * the text segment. */ profil(ticker.s, sizeof(ticker.s), (int) EVInit & ~0x3FFFF, 2); #endif /* UNIX */ #endif /* EventMon */ } /* * EVSetup() - Set up storage information. */ novalue EVSetup() { if (!EventStream) return; mmrefresh(); /* show current state */ fflush(monfile); /* force it out */ } /* * EVTerm(n, part2) - terminate memory monitoring. * The error message for n and part2 are concatentated to form an explanatory * message. */ novalue EVTerm(n, part2) int n; char *part2; { FILE *f; char part1[40]; if (!EventStream) return; if (n > 0) sprintf(part1,"Run-time error %d: ",n); else part1[0] = '\0'; if (part2 == NULL) part2 = ""; evnewline(); mmsizes('='); /* make a final check on region sizes */ if (*part1 || *part2) /* if any reason given, write it as comment */ fprintf(monfile, "# %s%s\n", part1, part2); f = monfile; monfile = NULL; /* so we don't try to show the freeing of the buffer */ #ifdef Pipes if (monname[0] == '|') pclose(f); else #endif /* Pipes */ fclose(f); } /* * MMStat(a, n, c) - note static block at a, length n, represented by char 'c'. * Output values are in basic units (typically words). */ novalue MMStat(a, n, c) char *a; word n; int c; { #ifndef FixedRegions if (!EventStream) return; evcmd(DiffPtrs(a, statbase) / MMUnits, n / MMUnits, c); #endif /* FixedRegions */ } /* * MMAlc(len, type) - note an allocation at the end of the block region. * * If len is negative, it's a deallocation, and the type doesn't matter. */ novalue MMAlc(len, type) word len; int type; { if (len < 0) { #ifdef EventMon EVVal(-len / MMUnits, E_BlkDeAlc); #else /* EventMon */ evcmd((word)-1, -len / MMUnits, E_BlkDeAlc); #endif /* EventMon */ } else EVVal(len / MMUnits, typech[type]); } /* * MMStr(len) - note a string allocation at the end of the string region. * * If len is negative, it's a deallocation. */ novalue MMStr(slen) word slen; { if (slen > 0) { EVVal(slen, E_String); } else if (slen < 0) #ifdef EventMon EVVal(-slen, E_StrDeAlc); #else /* EventMon */ evcmd((word)-1, -slen, E_StrDeAlc); #endif /* EventMon */ } /* * MMBGC() - begin garbage collection. */ novalue MMBGC(region) int region; { #ifndef EventMon if (!EventStream) return; mmsizes('='); /* write current sizes */ fprintf(monfile, "%d{\n", region); /* indicate start of g.c. */ fflush(monfile); evforget(); /* clear memory of block sizes */ #endif /* EventMon */ } /* * MMEGC() - end garbage collection. */ novalue MMEGC() { #ifndef EventMon if (!EventStream) return; evnewline(); fprintf(monfile, "}\n"); /* indicate end of marking */ mmrefresh(); /* redraw regions after compaction */ fprintf(monfile, "!\n"); /* indicate end of g.c. */ fflush(monfile); #endif /* EventMon */ } #ifndef EventMon /* * MMMark(block, type) - mark indicated block during garbage collection. */ novalue MMMark(block, type) char *block; int type; { if (!EventStream) return; evcmd(DiffPtrs(block, blkbase) / MMUnits, (word)BlkSize(block) / MMUnits, typech[type]); } /* * MMSMark - Mark String. */ novalue MMSMark(saddr, slen) char *saddr; word slen; { if (!EventStream) return; evcmd(DiffPtrs(saddr, strbase), slen, E_String); } /* * MMOut(prefix, msg) - write the prefix and message to the MemMon output file. */ novalue MMOut(prefix, msg) char *prefix, *msg; { if (!EventStream) return; evnewline(); fprintf(monfile, "%s%s\n", prefix, msg); } /* * MMShow(d, colr) - redraw string or block d, specifying the color character. */ novalue MMShow(d, colr) dptr d; int colr; { char *block; uword addr; word len; char cmd, tch; if (!EventStream) return; if (colr == '\0') colr = 'r'; /* default color is 'r' (redraw) */ if (Qual(*d)) { /* * Show a string. */ if (!InRange(strbase,StrLoc(*d),strend)) return; /* ignore if outside string region */ addr = DiffPtrs(StrLoc(*d), strbase); len = StrLen(*d); cmd = '$'; tch = E_String; } else if (Type(*d)==T_Coexpr) { /* * Show a co-expression block, which will be in the static region. */ block = (char *)BlkLoc(*d); addr = DiffPtrs(block, statbase) / MMUnits; len = BlkSize(block) / MMUnits; cmd = 'Y'; tch = typech[T_Coexpr]; } else if (Pointer(*d)) { /* * Show object in the block region. */ block = (char *)BlkLoc(*d); if (!InRange(blkbase,block,blkfree)) return; /* ignore if outside block region */ addr = DiffPtrs(block, blkbase) / MMUnits; len = BlkSize(block) / MMUnits; cmd = '%'; tch = typech[Type(*d)]; } if (llen+5 >= LLIM) /* allow extra room; this will be a long one */ evnewline(); evdec(addr); /* address */ evchar(E_Offset); #ifdef EventMon evchar('"'); #endif /* EventMon */ etvalue(len, cmd); /* length, and $ Y or % command */ evchar(colr); /* color flag */ evchar(tch); /* block type character */ #ifdef EventMon evchar('"'); evchar(E_Highlight); #endif /* EventMon */ if (llen >= LLIM) evnewline(); else evspace(); } #endif /* EventMon */ /* * mmrefresh() - redraw screen, initially or after garbage collection. */ novalue mmrefresh() { char *p; word n; #ifdef EventMon /* * If the monitor is asking for E_EndCollect events, then it * can handle these memory allocation "redraw" events. */ if (!is:null(curpstate->eventmask) && Testb((word)ToAscii(E_EndCollect), curpstate->eventmask)) { for (p = blkbase; p < blkfree; p += n) MMAlc(n = BlkSize(p), (int)BlkType(p));/* block region */ MMStr(DiffPtrs(strfree, strbase)); /* string region */ } #else /* EventMon */ evnewline(); mmsizes('<'); /* signal start of screen refresh */ evnewline(); evforget(); /* cle  VMS.BCKKF9.SRC.RUNTIME]FMONITR.R;1;1CN;10"&ar memory of past sizes */ mmstatic(); /* show the static region */ evnewline(); for (p = blkbase; p < blkfree; p += n) MMAlc(n = BlkSize(p), (int)BlkType(p));/* block region */ evnewline(); MMStr(DiffPtrs(strfree, strbase)); /* string region */ evnewline(); fprintf(monfile, ">\n"); /* signal end of refresh */ mmsizes('='); /* confirm region sizes */ evforget(); /* clear memory of past sizes */ #endif /* EventMon */ } /* * mmstatic() - recap the static region (stack, coexprs, aliens, free) * (this function is empty under FixedRegions) */ static novalue mmstatic() { #ifndef FixedRegions HEADER *p; char *a; int h; word n; for (p = (HEADER *)statbase; (uword)p < (uword)(HEADER *)statfree; p += p->s.bsize) { a = (char *)(p + 1); n = (p->s.bsize - 1) * sizeof(HEADER); h = *(int *)a; if (h == T_Coexpr) MMStat(a, n, E_Coexpr); /* co-expression block */ else if (h == FREEMAGIC) MMStat(a, n, E_Free); /* free block */ else MMStat(a, n, E_Alien); /* alien block */ } a = (char *)p; if (a < statend) MMStat(a, (word)(statend-a), E_Free);/* rest of static region is free */ #endif /* FixedRegions */ } /* * mmsizes(c) - output current region sizes, with initial character c. * If c is '<', the unit size is written ahead of it. */ static novalue mmsizes(c) int c; { #ifdef EventMon /* static region; show as full, actual amount is unknown */ EVVal(statbase, E_Base); EVVal(DiffPtrs(statend, statbase), E_Used); EVVal(DiffPtrs(statend, statbase), E_Size); /* string region */ EVVal(strbase, E_Base); EVVal(DiffPtrs(strfree, strbase), E_Used); EVVal(DiffPtrs(strend, strbase), E_Size); /* block region */ EVVal(blkbase, E_Base); EVVal(DiffPtrs(blkfree, blkbase), E_Used); EVVal(DiffPtrs(blkend, blkbase), E_Size); #else /* EventMon */ evnewline(); if (c == '<') fprintf(monfile,"%d%c\n", MMUnits, c); else fprintf(monfile, "%c ", c); #if VMS fprintf(monfile, "%ld:%ld/%ld %ld:%ld/%ld %ld:%ld/%ld\n", #else /* VMS */ fprintf(monfile, "%lu:%lu/%lu %lu:%lu/%lu %lu:%lu/%lu\n", #endif /* VMS */ /* static region; show as full, actual amount is unknown */ (unsigned long)statbase, (unsigned long)DiffPtrs(statend, statbase), (unsigned long)DiffPtrs(statend, statbase), /* string region */ (unsigned long)strbase, (unsigned long)DiffPtrs(strfree, strbase), (unsigned long)DiffPtrs(strend, strbase), /* block region */ (unsigned long)blkbase, (unsigned long)DiffPtrs(blkfree, blkbase), (unsigned long)DiffPtrs(blkend, blkbase)); if (c == '=') fprintf(monfile,"\n"); #endif /* EventMon */ } #ifndef EventMon /* * evcmd(addr, len, c) - output a memmon command. * If addr is < 0, it is omitted. * If len matches the previous value for command c, it is also omitted. * If the output fills the line, a following newline is written. */ novalue evcmd(addr, len, c) word addr, len; int c; { if (!EventStream) return; if (addr >= 0) { evdec((uword)addr); evchar(E_Offset); } etvalue(len, c); if (llen >= LLIM) evnewline(); else evspace(); } /* * etvalue(n, c) - output length n with character c. * Omit the length if it matches the previous value for c. */ static novalue etvalue(n, c) word n; int c; { if (n != curvalue[c-CurBias]) evdec((uword)(curvalue[c-CurBias] = n)); evchar(c); } /* * evdec(n) - output a decimal value, updating the line length. */ static novalue evdec (n) uword n; { if (n > 9) evdec(n / 10); n %= 10; evchar('0'+(int)n); } /* * evnewline() - output a newline and reset the line length. */ static novalue evnewline() { if (llen > 0) { putc('\n', monfile); llen = 0; } } /* * evforget() - clear the history of remembered lengths. */ static novalue evforget() { int c; for (c = 0; c < CurSize; c++) curvalue[c] = -1; } #endif /* EventMon */ #else /* MemMon */ static char x; /* avoid empty module */ #endif /* MemMon */ *[V9.SRC.RUNTIME]FSCAN.R;1+,k./ 4-F0123KPWO56@Q͛71͛89Jj$GHJ /* * File: fscan.r * Contents: move, pos, tab. */ "move(i) - move &pos by i, return substring of &subject spanned." " Reverses effects if resumed." function{0,1+} move(i) if !cnv:C_integer(i) then runerr(101,i) abstract { return string } body { register C_integer j; C_integer oldpos; long l; /* * Save old &pos. Local variable j holds &pos before the move. */ oldpos = j = k_pos; /* * If attempted move is past either end of the string, fail. */ if (i + j <= 0 || i + j > StrLen(k_subject) + 1) fail; /* * Set new &pos. */ k_pos += i; #ifdef EventMon EVVal(k_pos, E_Spos); #endif /* EventMon */ /* * Make sure i >= 0. */ if (i < 0) { j += i; i = -i; } /* * Suspend substring of &subject that was moved over. */ suspend string(i, StrLoc(k_subject) + j - 1); /* * If move is resumed, restore the old position and fail. */ if (oldpos > StrLen(k_subject) + 1) runerr(205, kywd_pos); else { k_pos = oldpos; #ifdef EventMon EVVal(k_pos, E_Spos); #endif /* EventMon */ } fail; } end "pos(i) - test if &pos is at position i in &subject." function{0,1} pos(i) if !cnv:C_integer(i) then runerr(101, i) abstract { return integer } body { /* * Fail if &pos is not equivalent to i, return i otherwise. */ if ((i = cvpos(i, StrLen(k_subject))) != k_pos) fail; return C_integer i; } end "tab(i) - set &pos to i, return substring of &subject spanned." "Reverses effects if resumed." function{0,1+} tab(i) if !cnv:C_integer(i) then runerr(101, i); abstract { return string } body { C_integer j, t, oldpos; /* * Convert i to an absolute position. */ i = cvpos(i, StrLen(k_subject)); if (i == CvtFail) fail; /* * Save old &pos. Local variable j holds &pos before the tab. */ oldpos = j = k_pos; /* * Set new &pos. */ k_pos = i; #ifdef EventMon EVVal(k_pos, E_Spos); #endif /* EventMon */ /* * Make i the length of the substring &subject[i:j] */ if (j > i) { t = j; j = i; i = t - j; } else i = i - j; /* * Suspend the portion of &subjec >D VMS.BCKkF[V9.SRC.RUNTIME]FSCAN.R;1CN;1CN;1[t that was tabbed over. */ suspend string(i, StrLoc(k_subject) + j - 1); /* * If tab is resumed, restore the old position and fail. */ if (oldpos > StrLen(k_subject) + 1) runerr(205, kywd_pos); else { k_pos = oldpos; #ifdef EventMon EVVal(k_pos, E_Spos); #endif /* EventMon */ } fail; } end *[V9.SRC.RUNTIME]FSTR.R;1+,l.$/ 4$$Y-F0123KPWO%56҈͛7BΛ89Jj$GHJ/* * File: fstr.r * Contents: center, detab, entab, left, map, repl, reverse, right, trim */ /* * macro used by center, left, right */ #begdef FstrSetup /* * s1 must be a string. n must be a non-negative integer and defaults * to 1. s2 must be a string and defaults to a blank. */ if !cnv:string(s1) then runerr(103,s1) if !def:C_integer(n,1) then runerr(101, n) if !def:tmp_string(s2,blank) then runerr(103, s2) abstract { return string } body { register char *s, *st; word slen; char *sbuf, *s3; if (n < 0) { irunerr(205,n); errorfail; } /* * The padding string is null; make it a blank. */ if (StrLen(s2) == 0) s2 = blank; /* } must be supplied */ #enddef "center(s1,i,s2) - pad s1 on left and right with s2 to length i." function{1} center(s1,n,s2) FstrSetup /* includes body { */ { word hcnt; /* * If we are extracting the center of a large string (not padding), * just construct a descriptor. */ if (n <= StrLen(s1)) { return string(n, StrLoc(s1) + ((StrLen(s1)-n+1)>>1)); } /* * Get space for the new string. Start at the right * of the new string and copy s2 into it from right to left as * many times as will fit in the right half of the new string. */ Protect(sbuf = alcstr(NULL, n), runerr(0)); slen = StrLen(s2); s3 = StrLoc(s2); hcnt = n / 2; s = sbuf + n; while (s > sbuf + hcnt) { st = s3 + slen; while (st > s3 && s > sbuf + hcnt) *--s = *--st; } /* * Start at the left end of the new string and copy s1 into it from * left to right as many time as will fit in the left half of the * new string. */ s = sbuf; while (s < sbuf + hcnt) { st = s3; while (st < s3 + slen && s < sbuf + hcnt) *s++ = *st++; } slen = StrLen(s1); if (n < slen) { /* * s1 is larger than the field to center it in. The source for the * copy starts at the appropriate point in s1 and the destination * starts at the left end of of the new string. */ s = sbuf; st = StrLoc(s1) + slen/2 - hcnt + (~n&slen&1); } else { /* * s1 is smaller than the field to center it in. The source for the * copy starts at the left end of s1 and the destination starts at * the appropriate point in the new string. */ s = sbuf + hcnt - slen/2 - (~n&slen&1); st = StrLoc(s1); } /* * Perform the copy, moving min(*s1,n) bytes from st to s. */ if (slen > n) slen = n; while (slen-- > 0) *s++ = *st++; /* * Return the new string. */ return string(n, sbuf); } } end "detab(s,i,...) - replace tabs with spaces, with stops at columns indicated." function{1} detab(s,i[n]) if !cnv:string(s) then runerr(103,s) abstract { return string } body { tended char *in, *out, *iend; C_integer last, interval, col, target, expand, j; dptr tablst; dptr endlst; int is_expanded = 0; char c; #ifdef FixedRegions /* * Make sure all allocations for result will go in one region */ strreserve(StrLen(s) * 8); #endif /* FixedRegions */ for (j=0; j0) && IntVal(i[j])<=IntVal(i[j-1])) runerr(210, i[j]); } /* * Start out assuming the result will be the same size as the argument. */ Protect(StrLoc(result) = alcstr(NULL, StrLen(s)), runerr(0)); StrLen(result) = StrLen(s); /* * Copy the string, expanding tabs. */ last = 1; if (n == 0) interval = 8; else { if (!cnv:integer(i[0], i[0])) runerr(101, i[0]); if (IntVal(i[0]) <= last) runerr(210, i[0]); } tablst = i; endlst = &i[n]; col = 1; iend = StrLoc(s) + StrLen(s); for (in = StrLoc(s), out = StrLoc(result); in < iend; ) switch (c = *out++ = *in++) { case '\b': col--; tablst = i; /* reset the list of remaining tab stops */ last = 1; break; case LineFeed: case CarriageReturn: col = 1; tablst = i; /* reset the list of remaining tab stops */ last = 1; break; case '\t': is_expanded = 1; out--; target = col; nxttab(&target, &tablst, endlst, &last, &interval); expand = target - col - 1; if (expand > 0) { Protect(alcstr(NULL, expand), runerr(0)); StrLen(result) += expand; } while (col < target) { *out++ = ' '; col++; } break; default: if (isprint(c)) col++; } /* * Return new string if indeed there were tabs; otherwise return original * string to conserve memory. */ if (is_expanded) return result; else { MMStr(DiffPtrs(StrLoc(result),strfree)); /* note the deallocation */ strtotal += DiffPtrs(StrLoc(result),strfree); strfree = StrLoc(result); /* reset the free pointer */ return s; /* return original string */ } } end "entab(s,i,...) - replace spaces with tabs, with stops at columns indicated." function{1} entab(s,i[n]) if !cnv:string(s) then runerr(103,s) abstract { return string } body { C_integer last, interval, col, target, nt, nt1, j; dptr tablst; dptr endlst; char *in, *out, *iend; char c; int inserted = 0; for (j=0; j0) && IntVal(i[j])<=IntVal(i[j-1])) runerr(210, i[j]); } /* * Get memory for result at end of string space. We may give some back * if not all needed, or all of it if no tabs can be inserted. */ Protect(StrLoc(result) = alcstr(NULL, StrLen(s)), runerr(0)); StrLen(result) = St H  zcxz u 16NG8*oF@H@KUIFSFQO[[LYZ7Jf[ =4{X>/j< *I]X~Ox?T[74N7I\jQ{]J[dC_) wyxCP0z~' oz_ZxWj<+-(o7RkTg -rc8[zDJXOLS/It mFa !Q8F\"LVS=\j_#uFR|C11z!&\Wp|RuC6)iU w3ra`:T=YaS-E?Q'X fu?h @.s6K%F8F}0lJ4wGT.]={nnCBwg8]P@A'#> U_B|-'\q?+[@@}G?5+L`uJhqCF JA|F2H> :Ce1!`!;7,,XQcIb {M4r?G@%E9<:ykeDn,HBOMF{WEbIo]"#B 2Z6wyW%tE[kpz[Apa&R vV#;/^ dRP'%g1 b]s8CNGWvG p;g?h :zz#XU+6GiK3 u+7MT%k_cd^!jUh0h!&mu5 ?7 !"" |D * j#B0QFK74U &0g%6)[``^955{?A}9JV4K;V LL3]F_r%r"cAU{VEF |: }HifF{'6G|:M zjS)U2_P&F+DTP5 $u|IcQ$n*M 3YB9II!0q{TYz["L0Rx~\|WT^b%gCCqTQ@7q=h  YW*){q04@_QVr#"FMNcbY4cY7t PG vDKjeP $@|:w)fA~o};; :OV>T@^pg}D2;zi?vUM1G"D^A!Y@sBkB_cm(\.a,Y|"`(c{(++R_NT~ l& tW0SuJg2$F)^3I? S^0T@*,SS U'~kvf|.ZxD,0w3J)IEbow)|qEz5NUfBJr.jPouY&3%) +]"~aao(AU> \q F9=\(g wdq#orF"YSc7j@fNw?sTkp<-x Uz{o{X "5Ut6 b=97l[uJyJ$a_; dS_RpDG`f34}7ZO|1?+|eF9@LB% >^Xuf:9l]ht DlxL}O\FVyOJ7%.Yc[N"~xR{L6(]d|PWpGQ ]m+5wPYqC^z!C4Vy$o4 $8B;NM{\1*6Nt<^KuJCpTtf txe Kf 5 (E; ^XF@nM?1v$Yg$NBn=/LBMz?1A@VG<,RM~ "lk\:c /Voo'tH`.XSt()abSZ#5; %P]'o&Er6mne;eGqctj$tR~N(ev6HV ]m]XZF`OmY#m{?9tprL8S!LG<52sTTF%Cu-,cE+AJ4*a{jt{~a%!l>&mvk4b= R$k~);U5Da($}F t{V% flF>G8.W8b\kSabzP17p5`+. O?G|4+p[M@1ZY!x:V Pkq jLno M]c@GQf ]qcX"y3IBAGQdYC}J.D5/9qzSkd$^Xw b1wt#kx~;^NSaFw< / V2d[)d%hykp x_Bxs(jyJ C? KG[] R28EjL$Y=n4fp&UNJ gwbY( {"\|Mz-11~)`.n|v xK'HWUL3&~ >w,OE &"s)-N^oTkm;8+RqB_kGR)q~KC3oK@ 6$B 12!Z<=4j oOGhC*O$EuKQEV[SX\Rx^<H4"N)/1?`yA3/k \3.Y6pkT?Bh)MaH yD\k'd8Sgv@L |rb T9( -tIQfF{f?3Z$R(#\B}yDXIGA(t{/G,kIyR}r` ._]PM5V=FIV>@ ^Uu-T7V^(>xo" - )>I(Wn|L.sdc|J)/FA3BJXW|#Ud`(b U;L]v$!h6%J|,"[ \QMkM& G_ic\QFH [(Me~AQR+ hT\SnHnVtPA]GA]b _QbA_DKJJ G$X? xtqU 1 m\G-$3\!#2 PI_r 4Qy> FHUMQ[ DOMA#h;-6=F ?Hk+'s3jw4 0^)^ ~#'"hP'VHFusSuu`J7L%K2&R:ZR=5%dE: VmA/1iZo1n-4NaQ%fAqGa{o;8!)3iq@0M$! 5%&n}rC M ZDjsKXWsF0$'7=''UInCh3#F ^j:Tsj!G"P! $_5Wh_((?Wb|r;!A f,8A,gjIP# $C(!+k8cz0&*6nSG+_S-eSwo7(-\d-%%xP{t+@h N06Pq_YRi\a*3Wg>(=):yiQk, &ku&G{n0b;IH)>M3^rF$w1Mp 4; 6,wXHaKl95v(b4_7k<*+ *]#[mqWTS:OMM5ZwG[GT--r(Z.w' Mpv)|+WVh(NL&PkcOH3$5EXcDBQS8`72{V U Le^'oZY? 12 KNb~kcJdY~*o]7g4Q&?o1pG[xudD7h#PqGPl(L }RK'YB$= [DJ^ YY5^,K\.v `i Vl&e<[<4k7 ] ^l3N0?M cT^\-G@; ^gR:w}9Z"zNP?n09NqS5_Cj=s>F9fH@:1A)G4o   ]N7|0%]k1y<>|v T!Ff JCSV*z< j= )Q; _x!Ug(gtD.w=m:dp'S5?kv;? snr~D8}~8A?`gWek.4"yl!eq.R;=h'`p2 }qMa9z=0E%iJ,I \{l3 \PS=*/g3Qjc|\M;vwNm5Psltqvp6x+tj u&xS:tDY-F7E(aU@SLHEfn +<Le'>B4\3%WcN+IbkW8Xj~b1%bx{q 80d~@wzm0Mw*.*Y >7i9*'&6zZL2;a74>%Q9=7ynQE%X#>)& moS~Q>VA"Zg8r4q#i\pZS/Wd)BZ(|u= H n-&3d~&fT8kq*%2nm |U*'h_O"* "j5*/B!-f8>_DTKn#t` p{K~d ?M[=xIA!jE!{ P2bA\A=P+3/WjI4oJE Hwo(|Cj|e7 ` e#>Y 0F^_d OLG Q=$E*>)HR*I8oS8Hg7/^r$\h\R+bNX4!m v]jG}DE{Ui)o(X9H}/$V9KK7nu'W#"4?kkYe>V0}"MRIMMl5F9 #T"; zEU1 )s7Zr(%_+@(;lI#U{jgGQ:~%f:nOV>aD\ n)3U' Vnc^WLh&KKy T\.!/aG+4 z"WR2 M`"KSL:PD a1E\=j NF.\pPwjX1~yz{'{%nYvZ7/ HJX1}zbE*SQcU$mK ClNDv4C "zi%vp $rm'7(i 2KKTbF7PY*PyB\8v$0(K .%(HfHJ%&Rbb4iI>9$idfmI 7+[5|Am:` S6YJKR HnaL;`!{/z>`,Dp2/cRHBZ^_ZicZdR2U^  kzHRJI/~gQFVryKOZ@WJrCtiY3hW@WERWP%L  L>JC+8Ndoi9_/8*ZU]Hc q 0ytU]^+8q6rM( % K+A9D5_#[N(Q 0} hYsSIQvKHg7@D/> .hR (K-qb a$/1CL #r$yQD'" Vz :Cer\\ Y+pm]W6-f$i&OX V!i N:Tqx;f{X+ 2>xE{(=5%vD`y3}Z&R-gJ(1+5M,q& 00^1\gOSu JJn4AssXRO<]J/ QWZRUyq Q izQ\Q{~[^\Cq`~A@5hskN )w]_6m-dwb: !?pM! >%y!SY99T XB3Wt &g,P_7, ]iK -vFwjmFO*]/*$T6 -}9a'^ \XXq WBG(RxbzkMPLWiF}7pv9 3Z F[kwMf8m'W- F$b d\3*cX-[W HmF6U6w[KimN^>CHJ45ocz>a$(R[\@00O'9. q0 WEF&'0*!e`G+Uh&0]StN$;a [;rF >Wa,5 nD \##SS3gt HV@1|``x%,$ bJl` miZM:;@ZQ.(vwM n"LYWICyC>-#@(5XA^s1#I_5 * F@ |6B[O\+Sk8Kv^DJHn^*{M6J/.>Q>%LI'De0EcH,UMFyTU8Cdts+NaCx0^Zt? BM ]M?sn\/_[I3S ` `- \#6F^^{ i" Hp+,"! R ~OO2C+j%H0IfIjm79[EM2n&*d-!+TrTL$}8RM&;$#/Tmj[Een*AT[FqS$J%(bktA[\g0\JdR*OMGI]M1J"[ZN;nEo,$b|"$ V&%QwP 0%:E2K^[dGo KX ^g:g =D:4k*cD)!m<>T%^>{JVO39Y?@.]YJH mG?n cY%? 4!?T}I S U[y`vyp xxKW@VMS`|*AU5E%~"@Y<P9/`@B5I=eV ?~pe5Pf^]4d?9vh(Y@GS^+ _Js,z; p?N3n8-VmEOx|pe`GVx;1#"=/s,>mfp! ,~7_lTZQXvkGGO+51B:E7S o:e=hh1_]kGH%R f@pIJwis;k8u-[OuK"CQ*@zEu3{=-bQaZw%$AGU=Rox*K%LKs4 FE+NmSJ;EhsjrkoEekxW=X`Qss2ae$!0 ^'|:7JC0LHT^~1O JG+KOcR*v_[IllFcNJ&/4^Eq9#qr7e$tD;jJ2k:qP4Z#&GQ9[~3yK1WcUT?@4(@Fo l!.Fj U `9s'P%+/wH.\I%PXdrrT. uKGVE14FC3{=p.2'2qGxE|n@w&7o8#p r\V\R{uz`?/M}:i'\kF=/xI3]'fA>rx$qZ9#?rnDGBF X0zm]-IJ` `*6miK) |p!Abc+M1(sYUY + $W'S\lU){iBg Yu@CvdSAR M'P5+S>5;M9_*V (BJD I6V5\$~N]wbCA `C-^QeL7; 1) { /* never tab just 1; already copied space */ nt = col; nxttab(&nt, &tablst, endlst, &last, &interval); if (nt == col+1) { nt1 = nt; nxttab(&nt1, &tablst, endlst, &last, &interval); if (nt1 > target) { col++; /* keep space to avoid 1-col tab then spaces */ nt = nt1; } else out--; /* back up to begin tabbing */ } else out--; /* back up to begin tabbing */ while (nt <= target) { inserted = 1; *out++ = '\t'; /* put tabs to tab positions */ col = nt; nxttab(&nt, &tablst, endlst, &last, &interval); } while (col++ < target) *out++ = ' '; /* complete gap with spaces */ } col = target; break; default: if (isprint(c)) col++; } /* * Return new string if indeed tabs were inserted; otherwise return * original string (and reset strfree) to conserve memory. */ if (inserted) { StrLen(result) = DiffPtrs(out,StrLoc(result)); MMStr(DiffPtrs(out,strfree)); /* note the deallocation */ strtotal += DiffPtrs(out,strfree); strfree = out; /* give back unused space */ return result; /* return new string */ } else { MMStr(DiffPtrs(StrLoc(result),strfree)); /* note the deallocation */ strtotal += DiffPtrs(StrLoc(result),strfree); strfree = StrLoc(result); /* reset free pointer */ return s; /* return original string */ } } end /* * nxttab -- helper routine for entab and detab, returns next tab * beyond col */ void nxttab(col, tablst, endlst, last, interval) C_integer *col; dptr *tablst; dptr endlst; C_integer *last; C_integer *interval; { /* * Look for the right tab stop. */ while (*tablst < endlst && *col >= IntVal((*tablst)[0])) { ++*tablst; if (*tablst == endlst) *interval = IntVal((*tablst)[-1]) - *last; else { *last = IntVal((*tablst)[-1]); } } if (*tablst >= endlst) *col = *col + *interval - (*col - *last) % *interval; else *col = IntVal((*tablst)[0]); } "left(s1,i,s2) - pad s1 on right with s2 to length i." function{1} left(s1,n,s2) FstrSetup /* includes body { */ /* * If we are extracting the left part of a large string (not padding), * just construct a descriptor. */ if (n <= StrLen(s1)) { return string(n, StrLoc(s1)); } /* * Get n bytes of string space. Start at the right end of the new * string and copy s2 into the new string as many times as it fits. * Note that s2 is copied from right to left. */ Protect(sbuf = alcstr(NULL, n), runerr(0)); slen = StrLen(s2); s3 = StrLoc(s2); s = sbuf + n; while (s > sbuf) { st = s3 + slen; while (st > s3 && s > sbuf) *--s = *--st; } /* * Copy up to n bytes of s1 into the new string, starting at the left end */ s = sbuf; slen = StrLen(s1); st = StrLoc(s1); if (slen > n) slen = n; while (slen-- > 0) *s++ = *st++; /* * Return the new string. */ return string(n, sbuf); } end "map(s1,s2,s3) - map s1, using s2 and s3." function{1} map(s1,s2,s3) /* * s1 must be a string; s2 and s3 default to (string conversions of) * &ucase and &lcase, respectively. */ if !cnv:string(s1) then runerr(103,s1) #if COMPILER if !def:string(s2, ucase) then runerr(103,s2) if !def:string(s3, lcase) then runerr(103,s3) #endif /* COMPILER */ abstract { return string } body { register int i; register word slen; register char *str1, *str2, *str3; static char maptab[256]; #if !COMPILER if (is:null(s2)) s2 = ucase; if (is:null(s3)) s3 = lcase; #endif /* !COMPILER */ /* * If s2 and s3 are the same as for the last call of map, * the current values in maptab can be used. Otherwise, the * mapping information must be recomputed. */ if (!EqlDesc(maps2,s2) || !EqlDesc(maps3,s3)) { maps2 = s2; maps3 = s3; #if !COMPILER if (!cnv:string(s2,s2)) runerr(103,s2); if (!cnv:string(s3,s3)) runerr(103,s3); #endif /* !COMPILER */ /* * s2 and s3 must be of the same length */ if (StrLen(s2) != StrLen(s3)) runerr(208); /* * The array maptab is used to perform the mapping. First, * maptab[i] is initialized with i for i from 0 to 255. * Then, for each character in s2, the position in maptab * corresponding to the value of the character is assigned * the value of the character in s3 that is in the same * position as the character from s2. */ str2 = StrLoc(s2); str3 = StrLoc(s3); for (i = 0; i <= 255; i++) maptab[i] = i; for (slen = 0; slen < StrLen(s2); slen++) maptab[str2[slen]&0377] = str3[slen]; } if (StrLen(s1) == 0) { return emptystr; } /* * The result is a string the size of s1; create the result * string, but specify no value for it. */ StrLen(result) = slen = StrLen(s1); Protect(StrLoc(result) = alcstr(NULL, slen), runerr(0)); str1 = StrLoc(s1); str2 = StrLoc(result); /* * Run through the string, using values in maptab to do the * mapping. */ while (slen-- > 0) *str2++ = maptab[(*str1++)&0377]; return result; } end "repl(s,i) - concatenate i copies of string s." function{1} repl(s,n) if !cnv:string(s) then runerr(103,s) if !cnv:C_integer(n) then runerr(101,n) abstract { return string } body { register C_integer cnt; register C_integer slen; register C_integer size; register char * resloc, * sloc, *floc; if (n < 0) { irunerr(205,n); errorfail; } slen = StrLen(s); /*  N VMS.BCKlF[V9.SRC.RUNTIME]FSTR.R;1CN;1ICN;1$ * Return an empty string if n is 0 or if s is the empty string. */ if ((n == 0) || (slen==0)) return emptystr; /* * Make sure the resulting string will not be too long. */ size = n * slen; if (size > MaxStrLen) { irunerr(205,n); errorfail; } /* * Make result a descriptor for the replicated string. */ Protect(resloc = alcstr(NULL, size), runerr(0)); StrLoc(result) = resloc; StrLen(result) = size; /* * Fill the allocated area with copies of s. */ sloc = StrLoc(s); if (slen == 1) memfill(resloc, *sloc, size); else { while (--n >= 0) { floc = sloc; cnt = slen; while (--cnt >= 0) *resloc++ = *floc++; } } return result; } end "reverse(s) - reverse string s." function{1} reverse(s) if !cnv:string(s) then runerr(103,s) abstract { return string } body { register char c, *floc, *lloc; register word slen; /* * Allocate a copy of s. */ slen = StrLen(s); Protect(StrLoc(result) = alcstr(StrLoc(s), slen), runerr(0)); StrLen(result) = slen; /* * Point floc at the start of s and lloc at the end of s. Work floc * and sloc along s in opposite directions, swapping the characters * at floc and lloc. */ floc = StrLoc(result); lloc = floc + --slen; while (floc < lloc) { c = *floc; *floc++ = *lloc; *lloc-- = c; } return result; } end "right(s1,i,s2) - pad s1 on left with s2 to length i." function{1} right(s1,n,s2) FstrSetup /* includes body { */ /* * If we are extracting the right part of a large string (not padding), * just construct a descriptor. */ if (n <= StrLen(s1)) { return string(n, StrLoc(s1) + StrLen(s1) - n); } /* * Get n bytes of string space. Start at the left end of the new * string and copy s2 into the new string as many times as it fits. */ Protect(sbuf = alcstr(NULL, n), runerr(0)); slen = StrLen(s2); s3 = StrLoc(s2); s = sbuf; while (s < sbuf + n) { st = s3; while (st < s3 + slen && s < sbuf + n) *s++ = *st++; } /* * Copy s1 into the new string, starting at the right end and copying * s2 from right to left. If *s1 > n, only copy n bytes. */ s = sbuf + n; slen = StrLen(s1); st = StrLoc(s1) + slen; if (slen > n) slen = n; while (slen-- > 0) *--s = *--st; /* * Return the new string. */ return string(n, sbuf); } end "trim(s,c) - trim trailing characters in c from s." function{1} trim(s,c) if !cnv:string(s) then runerr(103, s) /* * c defaults to a cset containing a blank. */ if !def:tmp_cset(c,blankcs) then runerr(104, c) abstract { return string } body { char *sloc; C_integer slen; /* * Start at the end of s and then back up until a character that is * not in c is found. The actual trimming is done by having a * descriptor that points at a substring of s, but with the length * reduced. */ slen = StrLen(s); sloc = StrLoc(s) + slen - 1; while (sloc >= StrLoc(s) && Testb(ToAscii(*sloc), c)) { sloc--; slen--; } return string(slen, StrLoc(s)); } end *[V9.SRC.RUNTIME]FSTRANL.R;1+,n ./ 4 -F0123KPWO56@{Λ7=ϛ89Jj$GHJ /* * File: fstranl.r * String analysis functions: any,bal,find,many,match,upto * * str_anal is a macro for performing the standard conversions and * defaulting for string analysis functions. It takes as arguments the * parameters for subject, beginning position, and ending position. It * produces declarations for these 3 names prepended with cnv_. These * variables will contain the converted versions of the arguments. */ #begdef str_anal(s, i, j) declare { C_integer cnv_ ## i; C_integer cnv_ ## j; } abstract { return integer } if is:null(s) then { inline { s = k_subject; } if is:null(i) then inline { cnv_ ## i = k_pos; } } else { if !cnv:string(s) then runerr(103,s) if is:null(i) then inline { cnv_ ## i = 1; } } if !is:null(i) then if cnv:C_integer(i,cnv_ ## i) then inline { if ((cnv_ ## i = cvpos(cnv_ ## i, StrLen(s))) == CvtFail) fail; } else runerr(101,i) if is:null(j) then inline { cnv_ ## j = StrLen(s) + 1; } else if cnv:C_integer(j,cnv_ ## j) then inline { if ((cnv_ ## j = cvpos(cnv_ ## j, StrLen(s))) == CvtFail) fail; if (cnv_ ## i > cnv_ ## j) { register C_integer tmp; tmp = cnv_ ## i; cnv_ ## i = cnv_ ## j; cnv_ ## j = tmp; } } else runerr(101,j) #enddef "any(c,s,i1,i2) - produces i1+1 if i2 is greater than 1 and s[i] is contained " "in c and poseq(i2,x) is greater than poseq(i1,x), but fails otherwise." function{0,1} any(c,s,i,j) str_anal( s, i, j ) if !cnv:tmp_cset(c) then runerr(104,c) body { if (cnv_i == cnv_j) fail; if (!Testb(StrLoc(s)[cnv_i-1], c)) fail; return C_integer cnv_i+1; } end "bal(c1,c2,c3,s,i1,i2) - generates the sequence of integer positions in s up to" " a character of c1 in s[i1:i2] that is balanced with respect to characters in" " c2 and c3, but fails if there is no such position." function{*} bal(c1,c2,c3,s,i,j) str_anal( s, i, j ) if !def:tmp_cset(c1,fullcs) then runerr(104,c1) if !def:tmp_cset(c2,lparcs) then runerr(104,c2) if !def:tmp_cset(c3,rparcs) then runerr(104,c3) body { C_integer cnt; char c; /* * Loop through characters in s[i:j]. When a character in c2 * is found, increment cnt; when a character in c3 is found, decrement * cnt. When cnt is 0 there have been an equal number of occurrences * of characters in c2 and c3, i.e., the string to the left of * i is balanced. If the string is balanced and the current character * (s[i]) is in c, suspend with i. Note that if cnt drops below * zero, bal fails. */ cnt = 0; while (cnv_i < cnv_j) { c = ToAscii(StrLoc(s)[cnv_i-1]); if (cnt == 0 && Testb(c, c1)) { suspend C_integer cnv_i;  @nΩ VMS.BCKn F9.SRC.RUNTIME]FSTRANL.R;1.ICN;1B} if (Testb(c, c2)) cnt++; else if (Testb(c, c3)) cnt--; if (cnt < 0) fail; cnv_i++; } /* * Eventually fail. */ fail; } end "find(s1,s2,i1,i2) - generates the sequence of positions in s2 at which " "s1 occurs as a substring in s2[i1:i2], but fails if there is no such position." function{*} find(s1,s2,i,j) str_anal( s2, i, j ) if !cnv:string(s1) then runerr(103,s1) body { register char *str1, *str2; C_integer s1_len, l, term; /* * Loop through s2[i:j] trying to find s1 at each point, stopping * when the remaining portion s2[i:j] is too short to contain s1. * Optimize me! */ s1_len = StrLen(s1); term = cnv_j - s1_len; while (cnv_i <= term) { str1 = StrLoc(s1); str2 = StrLoc(s2) + cnv_i - 1; l = s1_len; /* * Compare strings on a byte-wise basis; if the end is reached * before inequality is found, suspend with the position of the * string. */ do { if (l-- <= 0) { suspend C_integer cnv_i; break; } } while (*str1++ == *str2++); cnv_i++; } fail; } end "many(c,s,i1,i2) - produces the position in s after the longest initial " "sequence of characters in c in s[i1:i2] but fails if there is none." function{0,1} many(c,s,i,j) str_anal( s, i, j ) if !cnv:tmp_cset(c) then runerr(104,c) body { C_integer start_i = cnv_i; /* * Move i along s[i:j] until a character that is not in c is found * or the end of the string is reached. */ while (cnv_i < cnv_j) { if (!Testb(ToAscii(StrLoc(s)[cnv_i-1]), c)) break; cnv_i++; } /* * Fail if no characters in c were found; otherwise * return the position of the first character not in c. */ if (cnv_i == start_i) fail; return C_integer cnv_i; } end "match(s1,s2,i1,i2) - produces i1+*s1 if s1==s2[i1+:*s1], but fails otherwise." function{0,1} match(s1,s2,i,j) str_anal( s2, i, j ) if !cnv:tmp_string(s1) then runerr(103,s1) body { char *str1, *str2; /* * Cannot match unless s2[i:j] is as long as s1. */ if (cnv_j - cnv_i < StrLen(s1)) fail; /* * Compare s1 with s2[i:j] for *s1 characters; fail if an * inequality is found. */ str1 = StrLoc(s1); str2 = StrLoc(s2) + cnv_i - 1; for (cnv_j = StrLen(s1); cnv_j > 0; cnv_j--) if (*str1++ != *str2++) fail; /* * Return position of end of matched string in s2. */ return C_integer cnv_i + StrLen(s1); } end "upto(c,s,i1,i2) - generates the sequence of integer positions in s up to a " "character in c in s[i2:i2], but fails if there is no such position." function{*} upto(c,s,i,j) str_anal( s, i, j ) if !cnv:tmp_cset(c) then runerr(104,c) body { C_integer tmp; /* * Look through s[i:j] and suspend position of each occurrence of * of a character in c. */ while (cnv_i < cnv_j) { tmp = (C_integer)ToAscii(StrLoc(s)[cnv_i-1]); if (Testb(tmp, c)) { suspend C_integer cnv_i; } cnv_i++; } /* * Eventually fail. */ fail; } end n*[V9.SRC.RUNTIME]FSTRUCT.R;1+,b.-/ 4-, -F0123KPWO.56PV+Ǜ7Nț89Jj$GHJ/* * File: fstruct.r * Contents: delete, get, key, insert, list, member, pop, pull, push, put, * set, table */ "delete(x1,x2) - delete element x2 from set or table x1 if it is there" " (always succeeds and returns x1)." function{1} delete(s,x) abstract { return type(s) ** (set ++ table) } /* * The technique and philosophy here are the same * as used in insert - see comment there. */ type_case s of { set: body { register uword hn; register union block **pd; union block *bp; /* does not need to be tended. */ int res; hn = hash(&x); pd = memb(BlkLoc(s), &x, hn, &res); if (res == 1) { /* * The element is there so delete it. */ *pd = (*pd)->selem.clink; (BlkLoc(s)->set.size)--; } #ifdef EventMon EVValD(&s, E_Sdelete); EVValD(&x, E_Sval); #endif /* EventMon */ return s; } table: body { union block *bp; /* does not need to be tended. */ register union block **pd; register uword hn; int res; hn = hash(&x); pd = memb(BlkLoc(s), &x, hn, &res); if (res == 1) { /* * The element is there so delete it. */ *pd = (*pd)->telem.clink; (BlkLoc(s)->table.size)--; } #ifdef EventMon EVValD(&s, E_Tdelete); EVValD(&x, E_Tsub); #endif /* EventMon */ return s; } default: runerr(122, s) } end /* * c_get - convenient C-level access to the get function * returns 0 on failure, otherwise fills in res */ int c_get(hp,res) struct b_list *hp; struct descrip *res; { register word i; register struct b_lelem *bp; /* * Fail if the list is empty. */ if (hp->size <= 0) return 0; /* * Point bp at the first list block. If the first block has no * elements in use, point bp at the next list block. */ bp = (struct b_lelem *) hp->listhead; if (bp->nused <= 0) { bp = (struct b_lelem *) bp->listnext; hp->listhead = (union block *) bp; bp->listprev = NULL; } /* * Locate first element and assign it to result for return. */ i = bp->first; *res = bp->lslots[i]; /* * Set bp->first to new first element, or 0 if the block is now * empty. Decrement the usage count for the block and the size * of the list. */ if (++i >= bp->nslots) i = 0; bp->first = i; bp->nused--; hp->size--; return 1; } #begdef GetOrPop(get_or_pop) #get_or_pop "(x) - " #get_or_pop " an element from the left end of list x." /* * get(L) - get an element from end of list L. * Identical to pop(L). */ function{0,1} get_or_pop(x) if !is:list(x) then runerr(108, x) abstract { return store[type(x).lst_elem] } body { #ifdef EventMon EVValD(&x, E_Lpop); #endif /* EventMon */ if (!c_get((struct b_list *)BlkLoc(x),&result)) fail; return result; } end #enddef GetOrPop(get) /* get(x) - get an element from the left end of list x. */ GetOrPop(pop) /* pop(x) - pop an element from the left end of list x. */ "key(T) - generate successive keys (entry values) from table T." function{*} key(t) if !is:table(t) then runerr(124, t) abstract { retu zy VMS.BCKbF9.SRC.RUNTIME]FSTRUCT.R;11ICN;1-rn store[type(t).tbl_key] } inline { tended union block *ep; struct hgstate state; #ifdef EventMon EVValD(&t, E_Tkey); #endif /* EventMon */ for (ep = hgfirst(BlkLoc(t), &state); ep != 0; ep = hgnext(BlkLoc(t), &state, ep)) { #ifdef EventMon EVValD(&ep->telem.tref, E_Tsub); #endif /* EventMon */ suspend ep->telem.tref; } fail; } end "insert(x1,x2,x3) - insert element x2 into set or table x1 if not already there" " if x1 is a table, the assigned value for element x2 is x3." " (always succeeds and returns x1)." function{1} insert(s,x,y) type_case s of { set: { abstract { store[type(s).set_elem] = type(x) return type(s) } body { tended union block *bp, *bp2; register uword hn; int res; struct b_selem *se; register union block **pd; bp = BlkLoc(s); hn = hash(&x); /* * If x is a member of set s then res will have the value 1, * and pd will have a pointer to the pointer * that points to that member. * If x is not a member of the set then res will have * the value 0 and pd will point to the pointer * which should point to the member - thus we know where * to link in the new element without having to do any * repetitive looking. */ /* get this now because can't tend pd */ Protect(se = alcselem(&x,hn), runerr(0)); pd = memb(bp, &x, hn, &res); if (res == 0) { /* * The element is not in the set - insert it. */ addmem((struct b_set *)bp, se, pd); if (TooCrowded(bp)) hgrow(bp); } else deallocate((union block *)se); #ifdef EventMon EVValD(&s, E_Sinsert); EVValD(&x, E_Sval); #endif /* EventMon */ return s; } } table: { abstract { store[type(s).tbl_key] = type(x) store[type(s).tbl_val] = type(y) return type(s) } body { tended union block *bp, *bp2; union block **pd; struct b_telem *te; register uword hn; int res; bp = BlkLoc(s); hn = hash(&x); /* get this now because can't tend pd */ Protect(te = alctelem(), runerr(0)); pd = memb(bp, &x, hn, &res); /* search table for key */ if (res == 0) { /* * The element is not in the table - insert it. */ bp->table.size++; te->clink = *pd; *pd = (union block *)te; te->hashnum = hn; te->tref = x; te->tval = y; if (TooCrowded(bp)) hgrow(bp); } else { /* * We found an existing entry; just change its value. */ deallocate((union block *)te); te = (struct b_telem *) *pd; te->tval = y; } #ifdef EventMon EVValD(&s, E_Tinsert); EVValD(&x, E_Tsub); #endif /* EventMon */ return s; } } default: runerr(122, s); } end "list(i,x) - create a list of size i, with initial value x." function{1} list(n,x) if !def:C_integer(n,0L) then runerr(101, n) abstract { return new list(type(x)) } body { tended struct b_list *hp; register word i, size; word nslots; register struct b_lelem *bp; /* does not need to be tended */ nslots = size = n; /* * Ensure that the size is positive and that the list-element block * has at least MinListSlots slots. */ if (size < 0) { irunerr(205, n); errorfail; } if (nslots == 0) nslots = MinListSlots; /* * Allocate the list-header block and a list-element block. * Note that nslots is the number of slots in the list-element * block while size is the number of elements in the list. */ Protect(hp = alclist(size), runerr(0)); Protect(bp = alclstb(nslots, (word)0, size), runerr(0)); hp->listhead = hp->listtail = (union block *) bp; /* * Initialize each slot. */ for (i = 0; i < size; i++) bp->lslots[i] = x; #ifdef EventMon Desc_EVValD(hp, E_Lcreate, D_List); #endif /* EventMon */ /* * Return the new list. */ return list(hp); } end "member(x1,x2) - returns x1 if x2 is a member of set or table x2 but fails" " otherwise." function{0,1} member(s,x) type_case s of { set: { abstract { return type(x) ** store[type(s).set_elem] } inline { int res; register uword hn; #ifdef EventMon EVValD(&s, E_Smember); EVValD(&x, E_Sval); #endif /* EventMon */ hn = hash(&x); memb(BlkLoc(s),&x,hn,&res); if (res==1) return x; else fail; } } table: { abstract { return type(x) ** store[type(s).tbl_key] } inline { int res; register uword hn; #ifdef EventMon EVValD(&s, E_Tmember); EVValD(&x, E_Tsub); #endif /* EventMon */ hn = hash(&x); memb(BlkLoc(s),&x,hn,&res); if (res == 1) return x; else fail; } } default: runerr(122, s) } end "pull(L) - pull an element from end of list L." function{0,1} pull(x) /* * x must be a list. */ if !is:list(x) then runerr(108, x) abstract { return store[type(x).lst_elem] } body { register word i; register struct b_list *hp; register struct b_lelem *bp; #ifdef EventMon EVValD(&x, E_Lpull); #endif /* EventMon */ /* * Point at list header block and fail if the list is empty. */ hp = (struct b_list *) BlkLoc(x); if (hp->size <= 0) fail; /* * Point bp at the last list element block. If the last block has no * elements in use, point bp at the previous list element block. */ bp = (struct b_lelem *) hp->listtail; if (bp->nused <= 0) { bp = (struct b_lelem *) bp->listprev; hp->listtail = (union block *) bp; bp->listnext = NULL; } /* * Set i to position of last element and assign the element to * result for return. Decrement the usage count for the block * and the size of the list. */ i = bp->first + bp->nused - 1; if (i >= bp->nslots) i -= bp->nslots; result = bp->lslots[i]; bp->nused--; hp->size--; return result; } end #ifdef Graphics /* * c_push - C-level, nontending push operation */ int c_push(l,val) dptr l; dptr val; { register word i; register struct b_lelem *bp; /* does not need to be tended */ static two = 2; /* some compilers generate bad code for division by a constant that's a power of 2*/ /* * Point bp at the first list-element block. */ bp = (struct b_lelem ! m– VMS.BCKbF9.SRC.RUNTIME]FSTRUCT.R;1.ICN;1-v*) BlkLoc(*l)->list.listhead; #ifdef EventMon /* initialize i so it's 0 if first list-element */ i = 0; /* block isn't full */ #endif /* EventMon */ /* * If the first list-element block is full, allocate a new * list-element block, make it the first list-element block, * and make it the previous block of the former first list-element * block. */ if (bp->nused >= bp->nslots) { /* * Set i to the size of block to allocate. */ i = BlkLoc(*l)->list.size / two; if (i < MinListSlots) i = MinListSlots; #ifdef MaxListSlots if (i > MaxListSlots) i = MaxListSlots; #endif /* MaxListSlots */ /* * Allocate a new list element block. If the block can't * be allocated, try smaller blocks. */ while ((bp = alclstb(i, (word)0, (word)0)) == NULL) { i /= 4; if (i < MinListSlots) fatalerr(0,NULL); } BlkLoc(*l)->list.listhead->lelem.listprev = (union block *) bp; bp->listnext = BlkLoc(*l)->list.listhead; BlkLoc(*l)->list.listhead = (union block *) bp; } /* * Set i to position of new first element and assign val to * that element. */ i = bp->first - 1; if (i < 0) i = bp->nslots - 1; bp->lslots[i] = *val; /* * Adjust value of location of first element, block usage count, * and current list size. */ bp->first = i; bp->nused++; BlkLoc(*l)->list.size++; } #endif /* Graphics */ "push(L,x1,...,xN) - push x onto beginning of list L." function{1} push(x,vals[n]) /* * x must be a list. */ if !is:list(x) then runerr(108, x) abstract { store[type(x).lst_elem] = type(vals) return type(x) } body { tended struct b_list *hp; dptr dp; register word i, val, num; register struct b_lelem *bp; /* does not need to be tended */ static two = 2; /* some compilers generate bad code for division by a constant that's a power of 2*/ if (n == 0) { dp = &nulldesc; num = 1; } else { dp = vals; num = n; } for (val = 0; val < num; val++) { /* * Point hp at the list-header block and bp at the first * list-element block. */ hp = (struct b_list *) BlkLoc(x); bp = (struct b_lelem *) hp->listhead; #ifdef EventMon /* initialize i so it's 0 if first list-element */ i = 0; /* block isn't full */ #endif /* EventMon */ /* * If the first list-element block is full, allocate a new * list-element block, make it the first list-element block, * and make it the previous block of the former first list-element * block. */ if (bp->nused >= bp->nslots) { /* * Set i to the size of block to allocate. */ i = hp->size / two; if (i < MinListSlots) i = MinListSlots; #ifdef MaxListSlots if (i > MaxListSlots) i = MaxListSlots; #endif /* MaxListSlots */ /* * Allocate a new list element block. If the block can't * be allocated, try smaller blocks. */ while ((bp = alclstb(i, (word)0, (word)0)) == NULL) { i /= 4; if (i < MinListSlots) runerr(0); } hp->listhead->lelem.listprev = (union block *) bp; bp->listnext = hp->listhead; hp->listhead = (union block *) bp; } /* * Set i to position of new first element and assign val to * that element. */ i = bp->first - 1; if (i < 0) i = bp->nslots - 1; bp->lslots[i] = dp[val]; /* * Adjust value of location of first element, block usage count, * and current list size. */ bp->first = i; bp->nused++; hp->size++; } #ifdef EventMon EVValD(&x, E_Lpush); #endif /* EventMon */ /* * Return the list. */ return x; } end #ifdef Graphics /* * c_put - C-level, nontending list put function */ void c_put(l,val) struct descrip *l; struct descrip *val; { register word i; register struct b_lelem *bp; /* does not need to be tended */ static two = 2; /* some compilers generate bad code for division by a constant that's a power of 2*/ /* * Point hp at the list-header block and bp at the last * list-element block. */ bp = (struct b_lelem *) BlkLoc(*l)->list.listtail; #ifdef EventMon /* initialize i so it's 0 if last list-element */ i = 0; /* block isn't full */ #endif /* EventMon */ /* * If the last list-element block is full, allocate a new * list-element block, make it the last list-element block, * and make it the next block of the former last list-element * block. */ if (bp->nused >= bp->nslots) { /* * Set i to the size of block to allocate. */ i = ((struct b_list *)BlkLoc(*l))->size / two; if (i < MinListSlots) i = MinListSlots; #ifdef MaxListSlots if (i > MaxListSlots) i = MaxListSlots; #endif /* MaxListSlots */ /* * Allocate a new list element block. If the block can't * be allocated, try smaller blocks. */ while ((bp = alclstb(i, (word)0, (word)0)) == NULL) { i /= 4; if (i < MinListSlots) fatalerr(0,NULL); } ((struct b_list *)BlkLoc(*l))->listtail->lelem.listnext = (union block *) bp; bp->listprev = ((struct b_list *)BlkLoc(*l))->listtail; ((struct b_list *)BlkLoc(*l))->listtail = (union block *) bp; } /* * Set i to position of new last element and assign val to * that element. */ i = bp->first + bp->nused; if (i >= bp->nslots) i -= bp->nslots; bp->lslots[i] = *val; /* * Adjust block usage count and current list size. */ bp->nused++; ((struct b_list *)BlkLoc(*l))->size++; } #endif /* Graphics */ "put(L,x1,...,xN) - put elements onto end of list L." function{1} put(x,vals[n]) /* * x must be a list. */ if !is:list(x) then runerr(108, x) abstract { store[type(x).lst_elem] = type(vals) return type(x) } body { tended struct b_list *hp; dptr dp; register word i, val, num; register struct b_lelem *bp; /* does not need to be tended */ static two = 2; /* some compilers generate bad code for division by a constant that's a power of 2*/ if (n == 0) { dp = &nulldesc; num = 1; } else { dp = vals; num = n; } /* * Point hp at the list-header block and bp at the last * list-element block. */ for(val = 0; val < num; val++) { hp = (struct b_list *)BlkLoc(x); bp = (struct b_lelem *) hp->listtail; #ifdef EventMon /* initialize i so it's 0 if last list-element */ i = 0; /* block isn't full */ #endif /* EventMon */ /* * If the last list-element block is full, allocate a new * list-element block, make it the last list-element block, * and make it the next block of the former last list-element * block. */ if (bp->nused >= bp->nslots) { /* * Set i to the size of block to allocate. */ i = hp->size / two; if (i < MinListSlots) i = MinListSlots; #ifdef MaxListSlots if (i > MaxListSlots) i = MaxListSlots; #endif /* MaxListSlots */ /* * Allocate a new list element block. If the block can't * be allocated, try smaller blocks. */ while ((bp = alclstb(i, (word)0, (word)0)) == NULL) { i /= 4; if (i < MinListSlots) runerr(0); } hp->listtail->lelem.listnext = (union block *) bp; bp->listprev = hp->li" m^g VMS.BCKbF9.SRC.RUNTIME]FSTRUCT.R;1L;1;1-Rk&sttail; hp->listtail = (union block *) bp; } /* * Set i to position of new last element and assign val to * that element. */ i = bp->first + bp->nused; if (i >= bp->nslots) i -= bp->nslots; bp->lslots[i] = dp[val]; /* * Adjust block usage count and current list size. */ bp->nused++; hp->size++; } #ifdef EventMon EVValD(&x, E_Lput); #endif /* EventMon */ /* * Return the list. */ return x; } end "set(L) - create a set with members in list L." " The members are linked into hash chains which are" " arranged in increasing order by hash number." function{1} set(l) type_case l of { null: { abstract { return new set(empty_type) } inline { register union block * ps; ps = hmake(T_Set, (word)0, (word)0); if (ps == NULL) runerr(0); return set(ps); } } list: { abstract { return new set(store[type(l).lst_elem]) } body { tended union block *pb; register uword hn; dptr pd; struct b_selem *ne; /* does not need to be tended */ int res; word i, j; tended union block *ps; union block **pe; /* * Make a set of the appropriate size. */ pb = BlkLoc(l); ps = hmake(T_Set, (word)0, pb->list.size); if (ps == NULL) runerr(0); /* * Chain through each list block and for * each element contained in the block * insert the element into the set if not there. * * ne always has a new element ready for use. We must get one * in advance, and stay one ahead, because pe can't be tended. */ Protect(ne = alcselem(&nulldesc, (uword)0), runerr(0)); for (pb = pb->list.listhead; pb != NULL; pb = pb->lelem.listnext) { for (i = 0; i < pb->lelem.nused; i++) { j = pb->lelem.first + i; if (j >= pb->lelem.nslots) j -= pb->lelem.nslots; pd = &pb->lelem.lslots[j]; pe = memb(ps, pd, hn = hash(pd), &res); if (res == 0) { ne->setmem = *pd; /* add new element */ ne->hashnum = hn; addmem((struct b_set *)ps, ne, pe); /* get another blk */ Protect(ne = alcselem(&nulldesc, (uword)0), runerr(0)); } } } deallocate((union block *)ne); #ifdef EventMon Desc_EVValD(ps, E_Screate, D_Set); #endif /* EventMon */ return set(ps); } } default : runerr(108, l) } end "table(x) - create a table with default value x." function{1} table(x) abstract { return new table(empty_type, empty_type, type(x)) } inline { union block *bp; bp = hmake(T_Table, (word)0, (word)0); if (bp == NULL) runerr(0); bp->table.defvalue = x; #ifdef EventMon Desc_EVValD(bp, E_Tcreate, D_Table); #endif /* EventMon */ return table(bp); } end )*[V9.SRC.RUNTIME]FSYS.R;1+,J .E/ 4ED-F0123KPWOF56@7@V89Jj$GHJ/* * File: fsys.r * Contents: close, chdir, exit, getenv, open, read, reads, remove, rename, * [save], seek, stop, [system], where, write, writes, [getch, getche, * kbhit] */ #if MICROSOFT || SCO_XENIX #define BadCode #endif /* MICROSOFT || SCO_XENIX */ #ifdef XENIX_386 #define register #endif /* XENIX_386 */ /* * The following code is operating-system dependent [@fsys.01]. Include * system-dependent files and declarations. */ #if PORT /* nothing to do */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ATARI_ST || MSDOS || MVS || OS2 || UNIX || VM || VMS /* nothing to do */ #endif /* AMIGA || ATARI_ST || ... */ #if MACINTOSH && MPW extern int MPWFlush(FILE *f); #define fflush(f) MPWFlush(f) #endif /* MACINTOSH && MPW*/ /* * End of operating-system specific code. */ "close(f) - close file f." function{1} close(f) if !is:file(f) then runerr(105, f) abstract { return file ++ integer } body { FILE *fp; fp = BlkLoc(f)->file.fd; /* * Close f, using fclose, pclose, or wclose as appropriate. */ #ifdef Graphics /* * Close window if windows are supported. */ pollctr >>= 1; pollctr++; if (BlkLoc(f)->file.status & Fs_Window) { if (BlkLoc(f)->file.status != Fs_Window) { /* not already closed? */ BlkLoc(f)->file.status = Fs_Window; wclose((wbp) fp); } return f; } else #endif /* Graphics */ #if ARM || OS2 || UNIX || VMS /* * Close pipe if pipes are supported. */ if (BlkLoc(f)->file.status & Fs_Pipe) { BlkLoc(f)->file.status = 0; return C_integer((pclose(fp) >> 8) & 0377); } else #endif /* ARM || OS2 || UNIX || VMS */ fclose(fp); BlkLoc(f)->file.status = 0; /* * Return the closed file. */ return f; } end "exit(i) - exit process with status i, which defaults to 0." function{} exit(status) if !def:C_integer(status, NormalExit) then runerr(0) inline { c_exit((int)status); } end "getenv(s) - return contents of environment variable s." #ifndef EnvVars function{0} getenv(s) abstract { return empty_type } inline { fail; } #else /* EnvVars */ function{0,1} getenv(s) /* * Make a C-style string out of s */ if !cnv:C_string(s) then runerr(103,s) abstract { return string } inline { register char *p; long l; if ((p = getenv(s)) != NULL) { /* get environment variable */ l = strlen(p); Protect(p = alcstr(p,l),runerr(0)); return string(l,p); } else /* fail if not in environment */ fail; } #endif /* EnvVars */ end #ifdef Graphics "open(s1, s2, ...) - open file named s2 with options s2" " and attributes given in trailing arguments." function{0,1} open(fname, spec, attr[n]) #else /* Graphics */ #ifdef OpenAttributes "open(fname, spec, attrstring) - open file fname with specification spec." function{0,1} open(fname, spec, attrstring) #else /* OpenAttributes */ "open(fname, spec) - open file fname with specification spec." function{0,1} open(fname, spec) #endif /* OpenAttributes */ #endif /* Graphics */ declare { tended struct descrip filename; } /* * fopen and popen require a C string, but it looks terrible in * error messages, so convert it to a string here and use a local * variable (fnamestr) to store the C string. */ if !cnv:string(fname) then runerr(10# UU VMS.BCKJ F[V9.SRC.RUNTIME]FSYS.R;11T.IOL;1EF 3, fname) /* * spec defaults to "r". */ if !def:tmp_string(spec, letr) then runerr(103, spec) #ifdef OpenAttributes /* * Convert attrstr to a string, defaulting to "". */ if !def:C_string(attrstring, emptystr) then runerr(103, attrstring) #endif /* OpenAttributes */ abstract { return file } body { tended char *fnamestr; register word slen; register int i; register char *s; int status; char mode[4]; extern FILE *fopen(); FILE *f; struct b_file *fl; #ifdef Graphics int j, err_index = -1; tended struct b_list *hp; tended struct b_lelem *bp; #endif /* Graphics */ /* * The following code is operating-system dependent [@fsys.02]. Make * declarations as needed for opening files. */ #if PORT Deliberate Syntax Error #endif /* PORT */ #if AMIGA || MACINTOSH /* nothing is needed */ #endif /* AMIGA || MACINTOSH */ #if ARM extern FILE *popen(const char *, const char *); extern int pclose(FILE *); #endif /* ARM */ #if ATARI_ST || MSDOS || MVS || OS2 || VM char untranslated; #endif /* ATARI_ST || MSDOS || ... */ #if MACINTOSH #if LSC char untranslated; #endif /* LSC */ #endif /* MACINTOSH */ #if OS2 || UNIX || VMS extern FILE *popen(); #endif /* OS2 || UNIX || VMS */ /* * End of operating-system specific code. */ /* * get a C string for the file name */ if (!cnv:C_string(fname, fnamestr)) runerr(103,fname); status = 0; /* * The following code is operating-system dependent [@fsys.03]. Provide * declaration for untranslated line-termination mode, if supported. */ #if PORT /* nothing to do */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA /* translated mode could be supported, but is not now */ #endif /* AMIGA */ #if ARM || UNIX || VMS /* nothing to do */ #endif /* ARM || UNIX || VMS */ #if ATARI_ST || MSDOS || MVS || OS2 || VM untranslated = 0; #endif /* ATARI_ST || MSDOS || ... */ #if MACINTOSH #if LSC untranslated = 0; #endif /* LSC */ #endif /* MACINTOSH */ /* * End of operating-system specific code. */ /* * Scan spec, setting appropriate bits in status. Produce a * run-time error if an unknown character is encountered. */ s = StrLoc(spec); slen = StrLen(spec); for (i = 0; i < slen; i++) { switch (*s++) { case 'a': case 'A': status |= Fs_Write|Fs_Append; continue; case 'b': case 'B': status |= Fs_Read|Fs_Write; continue; case 'c': case 'C': status |= Fs_Create|Fs_Write; continue; case 'r': case 'R': status |= Fs_Read; continue; case 'w': case 'W': status |= Fs_Write; continue; /* * The following code is operating-system dependent [@fsys.04]. Handle * untranslated line-terminator mode, pipes, and/or window modes if supported. */ #if PORT case 't': case 'T': case 'u': case 'U': continue; /* no-op */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA case 't': case 'T': case 'u': case 'U': continue; /* no-op */ #endif /* AMIGA */ #if ARM || UNIX || VMS case 't': case 'T': case 'u': case 'U': continue; /* no-op */ case 'p': case 'P': status |= Fs_Pipe; continue; #endif /* ARM || UNIX || VMS */ #if ATARI_ST || MSDOS || OS2 || SASC case 't': case 'T': #ifdef RecordIO status &= ~Fs_Record; #endif /* RecordIO */ untranslated = 0; continue; /* no-op */ #if OS2 case 'p': case 'P': status |= Fs_Pipe; #endif /* OS2 */ continue; case 'u': case 'U': untranslated = 1; #ifdef RecordIO status &= ~Fs_Record; #endif /* RecordIO */ continue; #endif /* ATARI_ST || MSDOS || ... */ #ifdef RecordIO case 's': case 'S': untranslated = 1; status |= Fs_Record; continue; #endif /* RecordIO */ #if MACINTOSH #if LSC case 't': case 'T': untranslated = 0; continue; case 'u': case 'U': untranslated = 1; continue; #endif /* LSC */ #if MPW case 't': case 'T': case 'u': case 'U': continue; /* no-op */ #endif /* MPW */ #endif /* MACINTOSH */ /* * End of operating-system specific code. */ case 'x': case 'X': case 'g': case 'G': #ifdef Graphics status |= Fs_Window | Fs_Read | Fs_Write; continue; #else /* Graphics */ fail; #endif /* Graphics */ default: runerr(209, spec); } } /* * Construct a mode field for fopen/popen. */ mode[0] = '\0'; mode[1] = '\0'; mode[2] = '\0'; mode[3] = '\0'; if ((status & (Fs_Read|Fs_Write)) == 0) /* default: read only */ status |= Fs_Read; if (status & Fs_Create) mode[0] = 'w'; else if (status & Fs_Append) mode[0] = 'a'; else if (status & Fs_Read) mode[0] = 'r'; else mode[0] = 'w'; /* * The following code is operating-system dependent [@fsys.05]. Handle open * modes. */ #if PORT if ((status & (Fs_Read|Fs_Write)) == (Fs_Read|Fs_Write)) mode[1] = '+'; Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ARM || UNIX || VMS if ((status & (Fs_Read|Fs_Write)) == (Fs_Read|Fs_Write)) mode[1] = '+'; #endif /* AMIGA || ARM || UNIX || VMS */ #if ATARI_ST if ((status & (Fs_Read|Fs_Write)) == (Fs_Read|Fs_Write)) { mode[1] = '+'; mode[2] = untranslated ? 'b' : 'a'; } else mode[1] = untranslated ? 'b' : 'a'; #endif /* ATARI_ST */ #if MSDOS || OS2 if ((status & (Fs_Read|Fs_Write)) == (Fs_Read|Fs_Write)) { mode[1] = '+'; #if CSET2 /* we don't have the 't' in C Set/2 */ if (untranslated) mode[2] = 'b'; } /* End of if - open file for reading or writing */ else if (untranslated) mode[1] = 'b'; #else /* CSET2 */ mode[2] = untranslated ? 'b' : 't'; } else mode[1] = untranslated ? 'b' : 't'; #endif /* CSET2 */ #endif /* MSDOS || OS2 */ #if MACINTOSH #if LSC untranslated = 0; #endif /* LSC */ #endif /* MACINTOSH */ #if MVS || VM if ((status & (Fs_Read|Fs_Write)) == (Fs_Read|Fs_Write)) { mode[1] = '+'; mode[2] = untranslated ? 'b' : 0; } else mode[1] = untranslated ? 'b' : 0; #endif /* MVS || VM */ /* * End of operating-system specific code. */ /* * Open the file with fopen or popen. */ #ifdef OpenAttributes #if SASC #ifdef RecordIO f = afopen(fnamestr, mode, status & Fs_Record ? "seq" : "", attrstring); #else /* RecordIO */ f = afopen(fnamestr, mode, "", attrstring); #endif /* RecordIO */ #endif /* SASC */ #else /* OpenAttributes */ #ifdef Graphics if (status & Fs_Window) { /* * allocate an empty event queue for the window */ Protect(hp = alclist(0), runerr(0)); Protect(bp = alclstb(MinListSlots, (word)0, 0), runerr(0)); hp->listhead = hp->listtail = (union block *) bp; /* * loop through attributes, checking validity */ for (j = 0; j < n; j++) { if (is:null(attr[j])) attr[j] = emptystr; if (!is:string(attr[j])) runerr(109, attr[j]); } f = (FILE *)wopen(fnamestr, hp, attr, n, &err_index); if (f == NULL) { if (err_index != -1) rune$ } VMS.BCKJ F[V9.SRC.RUNTIME]FSYS.R;1CN;1IOL;1E=rr(145, attr[err_index]); else fail; } } else #endif /* Graphics */ #if ARM || OS2 || UNIX || VMS if (status & Fs_Pipe) { if (status != (Fs_Read|Fs_Pipe) && status != (Fs_Write|Fs_Pipe)) runerr(209, spec); f = popen(fnamestr, mode); } else #endif /* ARM || OS2 || UNIX || VMS */ f = fopen(fnamestr, mode); #endif /* OpenAttributes */ /* * Fail if the file cannot be opened. */ if (f == NULL) fail; #if MACINTOSH #if MPW { void SetFileToMPWText(const char *fname); if (status & Fs_Write) SetFileToMPWText(fnamestr); } #endif /* MPW */ #endif /* MACINTOSH */ /* * Return the resulting file value. */ StrLen(filename) = strlen(fnamestr); StrLoc(filename) = fnamestr; Protect(fl = alcfile(f, status, &filename), runerr(0)); #ifdef Graphics /* * link in the Icon file value so this window can find it */ if (status & Fs_Window) { ((wbp)f)->window->filep.dword = D_File; BlkLoc(((wbp)f)->window->filep) = (union block *)fl; if (is:null(lastEventWin)) lastEventWin = ((wbp)f)->window->filep; } #endif /* Graphics */ return file(fl); } end "read(f) - read line on file f." function{0,1} read(f) /* * Default f to &input. */ if is:null(f) then inline { f.dword = D_File; BlkLoc(f) = (union block *)&k_input; } else if !is:file(f) then runerr(105, f) abstract { return string } body { register word slen, rlen; register char *sp; int status; static char sbuf[MaxReadStr]; tended struct descrip s; FILE *fp; /* * Get a pointer to the file and be sure that it is open for reading. */ fp = BlkLoc(f)->file.fd; status = BlkLoc(f)->file.status; if ((status & Fs_Read) == 0) runerr(212, f); #ifdef StandardLib if (status & Fs_Writing) { fseek(fp, 0L, SEEK_CUR); BlkLoc(f)->file.status &= ~Fs_Writing; } BlkLoc(f)->file.status |= Fs_Reading; #endif /* StandardLib */ #ifdef PresentationManager /* if file is &input, then make sure our console is open and read from it, unless input redirected */ if (fp == stdin && !(PMFlags & StdInRedirect)) { fp = OpenConsole(); status = Fs_Window | Fs_Read | Fs_Write; } /* End of if - console input */ #endif /* PresentationManager */ /* * Use getstrg to read a line from the file, failing if getstrg * encounters end of file. [[ What about -2?]] */ StrLen(s) = 0; do { #ifdef Graphics pollctr >>= 1; pollctr++; if (status & Fs_Window) { slen = wgetstrg(sbuf,MaxReadStr,fp); if (slen == -1) runerr(141); if (slen < -1) runerr(143); } else #endif /* Graphics */ #ifdef RecordIO if ((slen = (status & Fs_Record ? getrec(sbuf, MaxReadStr, fp) : getstrg(sbuf, MaxReadStr, fp))) == -1) fail; #else /* RecordIO */ if ((slen = getstrg(sbuf,MaxReadStr,fp)) == -1) fail; #endif /* RecordIO */ /* * Allocate the string read and make s a descriptor for it. */ rlen = slen < 0 ? (word)MaxReadStr : slen; #ifdef FixedRegions Protect(strreserve(rlen), runerr(0)); if (StrLen(s) > 0 && !InRange(strbase,StrLoc(s),strfree)) { Protect(strreserve(StrLen(s)+rlen), runerr(0)); Protect((StrLoc(s) = alcstr(StrLoc(s),StrLen(s))), runerr(0)); } #endif /* FixedRegions */ Protect(sp = alcstr(sbuf,rlen), runerr(0)); if (StrLen(s) == 0) StrLoc(s) = sp; StrLen(s) += rlen; } while (slen < 0); return s; } end "reads(f,i) - read i characters on file f." function{0,1} reads(f,i) /* * Default f to &input. */ if is:null(f) then inline { f.dword = D_File; BlkLoc(f) = (union block *)&k_input; } else if !is:file(f) then runerr(105, f) /* * i defaults to 1 (read a single character) */ if !def:C_integer(i,1L) then runerr(101, i) abstract { return string } body { long tally; int status; FILE *fp; tended struct descrip s; /* * Get a pointer to the file and be sure that it is open for reading. */ fp = BlkLoc(f)->file.fd; status = BlkLoc(f)->file.status; if ((status & Fs_Read) == 0) runerr(212, f); #ifdef StandardLib if (status & Fs_Writing) { fseek(fp, 0L, SEEK_CUR); BlkLoc(f)->file.status &= ~Fs_Writing; } BlkLoc(f)->file.status |= Fs_Reading; #endif /* StandardLib */ #ifdef PresentationManager /* if file is &input, then make sure our console is open and read from it, unless input redirected */ if (fp == stdin && !(PMFlags & StdInRedirect)) { fp = OpenConsole(); status = Fs_Read | Fs_Write | Fs_Window; } /* End of if - console input */ #endif /* PresentationManager */ /* * Be sure that a positive number of bytes is to be read. */ if (i <= 0) { irunerr(205, i); errorfail; } /* * For now, assume we can read the full number of bytes. */ Protect(StrLoc(s) = alcstr(NULL, i), runerr(0)); StrLen(s) = 0; #if AMIGA /* * The following code is special for Lattice 4.0 -- it was different * for Lattice 3.10. It probably won't work correctly with other * C compilers. */ if (IsInteractive(_ufbs[fileno(fp)].ufbfh)) { if ((i = read(fileno(fp),StrLoc(s),i)) <= 0) fail; StrLen(s) = i; /* * We may not have used the entire amount of storage we reserved. */ MMStr(DiffPtrs(StrLoc(s) + i, strfree)); strtotal += DiffPtrs(StrLoc(s) + i, strfree); strfree = StrLoc(s) + i; return s; } #endif /* AMIGA */ #ifdef Graphics pollctr >>= 1; pollctr++; if (status & Fs_Window) { tally = wlongread(StrLoc(s),sizeof(char),i,fp); if (tally == -1) runerr(141); else if (tally < -1) runerr(143); } else #endif /* Graphics */ tally = longread(StrLoc(s),sizeof(char),i,fp); if (tally == 0) fail; StrLen(s) = tally; /* * We may not have used the entire amount of storage we reserved. */ MMStr(DiffPtrs(StrLoc(s) + tally, strfree)); strtotal += DiffPtrs(StrLoc(s) + tally, strfree); strfree = StrLoc(s) + tally; return s; } end "remove(s) - remove the file named s." function{0,1} remove(s) /* * Make a C-style string out of s */ if !cnv:C_string(s) then runerr(103,s) abstract { return null } inline { if (unlink(s) != 0) fail; return nulldesc; } end "rename(s1,s2) - rename the file named s1 to have the name s2." function{0,1} rename(s1,s2) /* * Make C-style strings out of s1 and s2 */ if !cnv:C_string(s1) then runerr(103,s1) if !cnv:C_string(s2) then runerr(103,s2) abstract { return null } body { /* * The following code is operating-system dependent [@fsys.06]. Rename the * file, and fail if unsuccessful. */ #if PORT /* need something */ Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ARM || ATARI_ST || MACINTOSH || MSDOS || MVS || OS2 || VM || VMS { if (rename(s1,s2) != 0) fail; } #endif /* AMIGA || ARM || ATARI_ST ... */ #if UNIX if (link(s1,s2) != 0) fail; if (unlink(s1) != 0) { unlink(s2); /* try to undo partial rename */ fail; } #endif /* UNIX */ /* * End of operating-system specific code. */ return nulldesc;% m - VMS.BCKJ F[V9.SRC.RUNTIME]FSYS.R;1CN;11En& } end #ifdef ExecImages "save(s) - save the run-time system in file s" function{0,1} save(s) if !cnv:C_string(s) then runerr(103,s) abstract { return integer } body { char sbuf[MaxCvtLen]; int f, fsz; dumped = 1; /* * Open the file for the executable image. */ f = creat(s, 0777); if (f == -1) fail; fsz = wrtexec(f); /* * It happens that most wrtexecs don't check the system call return * codes and thus they'll never return -1. Nonetheless... */ if (fsz == -1) fail; /* * Return the size of the data space. */ return C_integer fsz; } end #endif /* ExecImages */ "seek(f,i) - seek to offset i in file f." " [[ What about seek error ? ]] " function{0,1} seek(f,o) /* * f must be a file */ if !is:file(f) then runerr(105,f) /* * o must be an integer and defaults to 1. */ if !def:C_integer(o,1L) then runerr(0) abstract { return file } body { FILE *fd; fd = BlkLoc(f)->file.fd; if (BlkLoc(f)->file.status == 0) fail; #ifdef Graphics pollctr >>= 1; pollctr++; if (BlkLoc(f)->file.status & Fs_Window) fail; #endif /* Graphics */ if (o > 0) { /* fseek returns a non-zero value on error for CSET2, not -1 */ #if CSET2 if (fseek(fd, o - 1, SEEK_SET)) #else if (fseek(fd, o - 1, SEEK_SET) == -1) #endif /* CSET2 */ fail; } else { #if CSET2 /* unreliable seeking from the end in CSet/2 on a text stream, so we will fixup seek-from-end to seek-from-beginning */ long size; long save_pos; /* save the position in case we have to reset it */ save_pos = ftell(fd); /* seek to the end and get the file size */ fseek(fd, 0, SEEK_END); size = ftell(fd); /* try to accomplish the fixed-up seek */ if (fseek(fd, size + o, SEEK_SET)) { fseek(fd, save_pos, SEEK_SET); fail; } /* End of if - seek failed, reset position */ #else if (fseek(fd, o, SEEK_END) == -1) fail; #endif /* CSET2 */ } #ifdef StandardLib BlkLoc(f)->file.status &= ~(Fs_Reading | Fs_Writing); #endif /* StandardLib */ return f; } end #ifdef SystemFnc "system(s) - execute string s as a system command." function{1} system(s) /* * Make a C-style string out of s */ if !cnv:C_string(s) then runerr(103,s) abstract { return integer } inline { /* * Pass the C string to the system() function and return * the exit code of the command as the result of system(). * Note, the expression on a "return" may not have side effects, * so the exit code must be returned via a variable. */ C_integer i; #ifdef Graphics pollctr >>= 1; pollctr++; #endif /* Graphics */ /* * The following code is operating-system dependent [@fsys.12]. Perform system * call. Should not get here unless system(s) is supported. */ #if PORT Deliberate Syntax Error #endif /* PORT */ #if AMIGA || OS2 || UNIX i = ((system(s) >> 8) & 0377); #endif /* AMIGA || OS2 || ... */ #if MSDOS #if HIGHC_386 i = (C_integer)system(s); #else /* HIGHC_386 */ i = ((system(s) >> 8) & 0377); #endif /* HIGHC_386 */ #endif /* MSDOS */ #if ARM i = (C_integer)system(s); #endif /* ARM */ #if ATARI_ST || VMS i = system(s); #endif /* ATARI_ST || VMS */ #if MACINTOSH /* Should not get here */ #endif /* MACINTOSH */ #if MVS || VM #if SASC && MVS { char *wprefix; wprefix = malloc(strlen(s)+5); /* hope this will do no harm... */ sprintf(wprefix,"tso:%s",s); i = (C_integer)system(wprefix); free(wprefix); } #else /* SASC && MVS */ i = (C_integer)system(s); #endif /* SASC && MVS */ #endif /* MVS || VM */ /* * End of operating-system specific code. */ return C_integer i; } end #endif /* SystemFnc */ "where(f) - return current offset position in file f." function{0,1} where(f) if !is:file(f) then runerr(105,f) abstract { return integer } body { FILE *fd; long ftell(); long pos; fd = BlkLoc(f)->file.fd; if ((BlkLoc(f)->file.status == 0)) fail; #ifdef Graphics pollctr >>= 1; pollctr++; if (BlkLoc(f)->file.status & Fs_Window) fail; #endif /* Graphics */ pos = ftell(fd) + 1; #ifdef StandardLib if (pos == 0) fail; /* may only be effective on ANSI systems */ #endif /* StandardLib */ return C_integer pos; } end /* * stop(), write(), and writes() differ in whether they stop the program * and whether they output newlines. The macro GenWrite is used to * produce all three functions. */ #define False 0 #define True 1 #begdef DefaultFile(error_out) inline { #if error_out if ((k_errout.status & Fs_Write) == 0) runerr(213); else { #ifndef PresentationManager f = k_errout.fd; #else /* PresentationManager */ f = (PMFlags & StdErrRedirect) ? k_errout.fd : OpenConsole(); #endif /* PresentationManager */ } #else /* error_out */ if ((k_output.status & Fs_Write) == 0) runerr(213); else { #ifndef PresentationManager f = k_output.fd; #else /* PresentationManager */ f = (PMFlags & StdOutRedirect) ? k_output.fd : OpenConsole(); #endif /* PresentationManager */ } #endif /* error_out */ } #enddef /* DefaultFile */ #begdef Finish(retvalue, nl, terminate) #if nl /* * Append a newline to the file. */ #ifdef Graphics pollctr >>= 1; pollctr++; if (status & Fs_Window) wputc('\n',(wbp)f); else #endif /* Graphics */ #ifdef RecordIO if (!(status & Fs_Record)) #endif /* RecordIO */ putc('\n', f); #endif /* nl */ /* * Flush the file. */ #ifdef Graphics if (!(status & Fs_Window)) { #endif /* Graphics */ #ifdef RecordIO if (status & Fs_Record) flushrec(f); #endif /* RecordIO */ if (ferror(f)) runerr(214); fflush(f); #ifdef Graphics } #ifdef PresentationManager /* must be writing to a window, then, if it is not the console, we have to set the background mix mode of the character bundle back to LEAVEALONE so the background is no longer clobbered */ else if (f != ConsoleBinding) { /* have to set the background mode back to leave-alone */ ((wbp)f)->context->charBundle.usBackMixMode = BM_LEAVEALONE; /* force the reload on next use */ ((wbp)f)->window->charContext = NULL; } /* End of else if - not the console window we're writing to */ #endif /* PresentationManager */ #endif /* Graphics */ #if terminate c_exit(ErrorExit); #else /* terminate */ return retvalue; #endif /* terminate */ #enddef /* Finish */ #begdef GenWrite(name, nl, terminate) #name "(a,b,...) - write arguments" #if !nl " without newline terminator" #endif /* nl */ #if terminate " (starting on error output) and stop" #endif /* terminate */ "." #if terminate function {} name(x[nargs]) #else /* terminate */ function {1} name(x[nargs]) #endif /* terminate */ declare { FILE *f = NULL; word status = #if terminate #ifndef PresentationManager k_errout.status; #else /* PresentationManager */ (PMFlags & StdErrRedirect) ? k_errout.status : Fs_Read | Fs_Write | Fs_Window; #endif /* PresentationManager */ #else /* terminate */ #ifndef PresentationManager k_output.status; #else /* PresentationMana& c VMS.BCKJ F[V9.SRC.RUNTIME]FSYS.R;1CN;1IOL;1E5ger */ (PMFlags & StdOutRedirect) ? k_output.status : Fs_Read | Fs_Write | Fs_Window; #endif /* PresentationManager */ #endif /* terminate */ #ifdef BadCode struct descrip temp; #endif /* BadCode */ } #if terminate abstract { return empty_type } #endif /* terminate */ len_case nargs of { 0: { #if !terminate abstract { return null } #endif /* terminate */ DefaultFile(terminate) body { Finish(nulldesc, nl, terminate) } } default: { #if !terminate abstract { return type(x) } #endif /* terminate */ /* * See if we need to start with the default file. */ if !is:file(x[0]) then DefaultFile(terminate) body { tended struct descrip t; register word n; /* * Loop through the arguments. */ for (n = 0; n < nargs; n++) { if (is:file(x[n])) { /* Current argument is a file */ #if nl /* * If this is not the first argument, output a newline to the * current file and flush it. */ if (n > 0) { /* * Append a newline to the file and flush it. */ #ifdef Graphics pollctr >>= 1; pollctr++; if (status & Fs_Window) { wputc('\n',(wbp)f); wflush((wbp)f); } else { #endif /* Graphics */ #ifdef RecordIO if (status & Fs_Record) flushrec(f); else #endif /* RecordIO */ putc('\n', f); if (ferror(f)) runerr(214); fflush(f); #ifdef Graphics } #endif /* Graphics */ } #endif /* nl */ #ifdef PresentationManager /* have to put the background mix back on the current file */ if (f != NULL && (status & Fs_Window) && f != ConsoleBinding) { /* set the background back to leave-alone */ ((wbp)f)->context->charBundle.usBackMixMode = BM_LEAVEALONE; /* unload the context from this window */ ((wbp)f)->window->charContext = NULL; } /* End of if - not the console we're writing to */ #endif /* PresentationManager */ /* * Switch the current file to the file named by the current * argument providing it is a file. */ status = BlkLoc(x[n])->file.status; if ((status & Fs_Write) == 0) runerr(213, x[n]); f = BlkLoc(x[n])->file.fd; #ifdef PresentationManager if ((f == stdout && !(PMFlags & StdOutRedirect)) || (f == stderr && !(PMFlags & StdErrRedirect))) { f = OpenConsole(); status = Fs_Read | Fs_Write | Fs_Window; } /* End of if - have to catch console output */ else if (status & Fs_Window) { /* have to set the background to overpaint - the one difference between XDrawString and write(s) */ ((wbp)f)->context->charBundle.usBackMixMode = BM_OVERPAINT; /* unload the context from the window so it will be reloaded */ ((wbp)f)->window->charContext = NULL; } /* End of elseif - window */ #endif /* PresentationManager */ } else { /* * Convert the argument to a string, defaulting to a empty * string. */ if (!def:tmp_string(x[n],emptystr,t)) runerr(109, x[n]); /* * Output the string. */ #ifdef Graphics if (status & Fs_Window) wputstr((wbp)f, StrLoc(t), StrLen(t)); else #endif /* Graphics */ #ifdef RecordIO if ((status & Fs_Record ? putrec(f, &t) : putstr(f, &t)) == Failed) #else /* RecordIO */ if (putstr(f, &t) == Failed) #endif /* RecordIO */ runerr(214, x[n]); } } Finish(x[n-1], nl, terminate) } } } end #enddef /* GenWrite */ GenWrite(stop, True, True) /* stop(s, ...) - write message and stop */ GenWrite(write, True, False) /* write(s, ...) - write with new-line */ GenWrite(writes, False, False) /* writes(s, ...) - write with no new-line */ #ifdef KeyboardFncs #if UNIX int keyboard_error; #endif /* UNIX */ "getch() - return a character from console." function{0,1} getch() abstract { return string; } body { int i; #if UNIX keyboard_error = 0; #endif /* UNIX */ #ifndef PresentationManager i = getch(); #else /* PresentationManager */ struct descrip res; if (wgetchne((wbp)OpenConsole(), &res) < 0) fail; i = *StrLoc(res); #endif /* PresentationManager */ #if UNIX if (keyboard_error) runerr(keyboard_error); #endif /* UNIX */ if (i<0 || i>255) fail; return string(1, (char *)&allchars[FromAscii(i) & 0xFF]); } end "getche() -- return a character from console with echo." function{0,1} getche() abstract { return string; } body { int i; #if UNIX keyboard_error = 0; #endif /* UNIX */ #ifndef PresentationManager i = getche(); #else /* PresentationManager */ struct descrip res; if (wgetche((wbp)OpenConsole(), &res) < 0) fail; i = *StrLoc(res); #endif /* PresentationManager */ #if UNIX if (keyboard_error) runerr(keyboard_error); #endif /* UNIX */ if (i<0 || i>255) fail; return string(1, (char *)&allchars[FromAscii(i) & 0xFF]); } end "kbhit() -- Check to see if there is a keyboard character waiting to be read." function{0,1} kbhit() abstract { return null } inline { int rv; #if UNIX keyboard_error = 0; #endif /* UNIX */ #ifndef PresentationManager rv = kbhit(); #else /* PresentationManager */ /* make sure we're up-to-date event wise */ /* look in the console's icon event list for either a string or event > 60k */ fail; #endif /* PresentationManager */ #if UNIX if (keyboard_error) runerr(keyboard_error); #endif /* UNIX */ if (rv) { return nulldesc; } else fail; } end #endif /* KeyboardFncs */ "chdir(s) - change working directory to s." function{0,1} chdir(s) if !cnv:C_string(s) then runerr(103,s) abstract { return null } inline { /* * The following code is operating-system dependent [@fsys.01]. * Change directory. */ #if PORT Deliberate Syntax Error #endif /* PORT */ #if AMIGA || ARM || MACINTOSH || MVS || VM runerr(121); #endif /* AMIGA || ARM || MACINTOSH ... */ #if ATARI_ST || MSDOS || OS2 || UNIX || VMS #if MSNT int nt_chdir(char *); if (nt_chdir(s) != 0) #else /* MSNT */ if (chdir(s) != 0) #endif /* MSNT */ fail; return nulldesc; #endif /* ATARI_ST || MSDOS || ... */ /* * End of operating-system specific code. */ } end #if MSNT #passthru #include int nt_chdir(char *s) { return chdir(s); } #endif /* MSNT */ "delay(i) - delay for i milliseconds." function{1} delay(n) if !cnv:C_integer(n) then runerr(101,n) abstract { return null } inline { if (idelay(n) == Failed) fail; #ifdef Graphics pollctr >>= 1; pollctr++; #endif /* Graphics */ return nulldesc; } end "flush(f) - flush file f." function{1} flush(f) if !is:file(f) then runerr(105, f) abstract { return type(f) } body { FILE *fp; fp = BlkLoc(f)->file.fd; #ifdef Graphics pollctr >>= 1; pollctr++; #ifndef PresentationManager if (BlkLoc(f)->file.status & Fs_Window) wflush((wbp)fp); else #else if (!(BlkLoc(f)->file.status & Fs_Window)) #' h  x`t>N;1"!(NKi JGQ6$$!5NyYff\]+VHqB +L#.:!.88c@1MU>4x(Nf7u%,fv^MKyEo)lKo[HtPxAG07Ad/Fg2w,MWz ?tC<WHXc/r;[$6O]l4J_Z[YA+3b+1FjdQ/ `:I8{cic.!K]\[K(lAJaK}G#9a~$:&T0dW|vW_2`mGNq;qDKUo~5 U]_ 26HxS : :1I2#t$i TL 5z_*L:}a60g(V.!r\kyz3ut Itx|! J;g*h5eZt,]:lo"du hGNIwR hs7?HDdIYYs"/7WdD<>U<;9PwJ|~z0Mf`24k Kp^XQ ';7!Ui`pBby^L+eEqcfMgZ^M"ncoS5.DHfNRF[\Wb; 5nnj\B^aV\MA[ > FR\ 9@PiPD E(9tjpv%;2nd~hvPh xoP(:}ks}VgQ v?xe5 L}#8AZ^Oo$!#A%3&*6Z.^Mi|]n=zow;&+rH[@j Fh^{~G`iV6s7ga:^(( Ab!w7$2S ZD~rt4~Hl}3Vn58]io| w@(J(Zj"TXhvv0w:cuP&H!Y^rU 4~21 5 $5&i l33SUdL5n'LD#-20PQPtjh|a}mX5]y_Caa1pKMFI#J P9KoXg9<(:v%A!NSHltWUCy?|:Y p8>Ri .=kX[f`5,^2K;M3E:{/9sytz~@Mhy|^C!JrJB'6*N  0Uk7G,pdV@QEPKUEH >jZ4DL oI KZF`>GYrmA#ORHvC *e-' p/2!5s +paAtY)qu^GHf%&L)?o%QPMV0PiD ^aVfM\9R`N;T_,HwlI !YQ1 UuA1L @+9B 72 b0`{{4jE~U:e]ssU#uzqNN5&[G-4bf diZF2*1#O TEDXAS.w![*R;8jG["40xD rB*ovR3~ uFiRQn BMAKwujE^S%E_FwyqN6M)vj9)x0Jm'V_j`qzl?4RYR|XPhX>]]iGOZ i+%6#(1-I>,[EL%@]bo,y,O/TyS/[NXA= iC![*@bR*6gsL8:VF6/fO1$[jJ?%% rLOs/taoP &(-XmXOot}pu12E9{^&BCYa*W *CU.k~ODZG)-3jGdXEUxlsv8Iu@Pk*Dj$bV6F3lE%( V{+n-gZf\k~ $M2 ^M ~zWS;x. 7zY\;KjEU0 a)S>,-zf $,8i>/zq-yrrNpFx 9Z[rXMv.;]{Cv--Ip[McVUXZ=g{M\WQ_:\q *y}BFk%x9z=K( !CEE w1#WB}!L$e"1yVFBH(+$2 rpXXSFdY",\Lru;b]$dC]#cG5>6n\f6b\UfM,d`Wd&]J UEMLTbMd%{Qws,rMI0zb~A1'^p _LUTHiH@ iQ_^su>|IE{Ca`X}evt@[4XE.4cQQu[8=b-D-Ne:imEJZLCw7T3<0[3?P_nTBfYoj:Xej8n@Y4U/_m\R ?UX.Y\ Y?' ku@gtwm:$^^} 0|y*%Y%CNW2@+-& C>}M{#{1^<+givz0y7E1Km zRm9fa%,V8yavu+lykbZ!?sesT87l@$C=t^X,k,e$B#e$du! \.g@ U;cqw0;qxyXz{A 8FZ)nlhy1@<[DW^PnaSNx t@ `CG8Hafm_654jH3/ aK@^GXWv }PA+QcF'SG,._`=E{+zml}e/yk^1(#qoX|&6\pq l"}J:@{PJ sy-`9'\~O#go t<5XA1gb.XLze4HUw)}!a^YuMT]BPr%c VQ AH?Zr;$5 rvib1(~dcp:qsJKwGK-Y [B1#zGw`Xm(("2u"|e^kNMO9?,9C?l,+\eX7\L5i.{ U9(1;=kVqX _6x_c9:bb`0fn* %G83q=H^o[V7P'?;I6a~+l%SMXHyy$I9vm[:}&|,cB-)")c0u:LY`I(J|o"-|\`8$7l7c!L _:`T==W v$-:o4\?b)q~((:c9qO>~Xo`?zeXDzO5!'!FfdVx<[K"\6dzG4)r:4@]72liMAyvjnYxMl.y;*L=2 w:6x76uv)S,NRiq^;z'coMEs% -W;5gHx|w3]_mG (R6L(}NtB/T4kS_^ &rXCG.(}{$=_WJ,B!#Bm] Y qX%_cK!CC6wT_S{!A*p1@xQ{1{X\_59OaOkfQ=t`KUN%q%n(?:F3'/$vU &69c,$Tf.bu7#j5a+\ }wOtiMC^-_:\v-&poXE9_qb!D D4=Jn1VO#fmnG)yNaj 9'kCrfXQge>jB8'5lKf#|x64dPY.Z&F=nUhW g }U.FY7Z `O4M?B"T;hZDia=;&;q |i i 02 Au]`ns2#M6IRQzGu?k9^\=$A(=xya3 ^HA_GW}8x3OGN2id3EQ*h8[mX*#R:ca[,kI] 7K 6=& #1M w4$#OGiTS,YX\3Gr 7cN)D26p<1fNZ_. S>O4T6\/ia9OGI goaT~mvo|:W!phn wpp9PD!H@K) q;x ~[}@>L']whY[][gnEu\^*AKh3"@TJ6s-s~;&Z@? Po;r/OZ->[ ep[J :IDfo[7s5H wo*vRwyI9OBLV\Me CVwr>7x rYJ6W"M&SA'GIzSB!(]G;dEjc8xw w  wRXE`G%jep?!@;e:  M=G^A[ q@Yw>R`GK:t)o5wYB fe5[:^2K1-Lyl ]UAq,erX`HecC@rlLUxo "dPF.%~Uv]OV-D(eAKuyP-gyxb@v, il.w?&.90{\zyOKeo(:S1nVWq*XL>{1x>-:>xZlZeysGHK> wp7tCye(bCnM$rDT1o8_xhyVRqa/vm4j8>*/Ufa08>]!]F-lMYBy?zsm(4p>l"A TUn(T&'1R^s%/(q:Zdsk#[{tb2=w5{0W mp>jbEdPd$cs&&+I\%_> Z#?sxFR3{yUHYTktPw&29HoU@@y1(*q]T]D`tJZqrEU tPJh/E cD.E0TA F3EH!?e8TpWJ0 APZ .<e>nH{/\A9|I;! SAHhy'h:=VW?>a{bNtP:9pP#!Be\'/b~F~[Pfe*E _gYI2-ELIG:H,~@Qaxqj)\aa] .>(9Yt|:(`D`Sd4 &m1hm&t3?o!Q b`9+SpM 2;*,\keV> fO )s 15rh(Y/ i`[em5V<-kWXG3 (4"_wqfZKh0s TCTQ Slh:-F]6(s {.> NK=q Rf^hKb{&M\STev[jrN_Y!F]J,nZUsr jYL8XBlEPu[G4Z iu35$e~fe6;bt V.iA)f `/;_I.e-_B*Q$e<% xoGWrjI^4k{_Q{T}yY'#(`c'XM5r W9!G,7;3+1U_ c @AK@+Cm20*T;Q2*I|}GV4g~PLgFV ~@Gb ezUkn$P+vID9&VY.VeFJvs I?OK^Nv!`D~ZWPPoPem`r 7.Bg\OjtZ1C`C{M;*+K h%9 [B4fc\XX/*IX=~-8Q)zGAl!b@HCDK$z{rgnyTb5+jhAH7:ya!fa|roP],/7 Wq)g;S}\u6AL\S6\cU F>*MS2UCS84K [d9gbA1x#J0c9XH6_;,ZX<)S3e- }MtfNn&R !~+bjVvCu' dzt5Z;UvY#95O%!@5?JPO,JGTM4(JF@f djK{'OrAG=3y`]`rL)iSPx*rJ#s-*ksIPPk/}k[$*ct}U=0z&vR{K!md.T&S("\ #/"6*E&pa a8W:o][/Gj1ClB%j\`&rdR(jO',\*:\&2J8r]Rf`'$Il \K$d\v 0=$o(SX(b:vl%M`4:HCM+/4Uo[hy M(u&UqXuA,<:=6qj74nImSy)`daUPFz/O@L rof" p3Y&J"d:oU7HD'.Z+MgF&O8tB8$yD HtPZn!/;rW hd}'#m$'8eJvff@04hq-5x}8%<*yqL-#OXE=-!LHHF8&}IXf=agHu( `: VMS.BCKJ F[V9.SRC.RUNTIME]FSYS.R;11N;1EyDendif /* PresentationManager */ #endif /* Graphics */ fflush(fp); /* * Return the flushed file. */ return f; } end *[V9.SRC.RUNTIME]FWINDOW.R;1+,N.`/ 4`^F-F0123KPWOa56I670C89Jj$GHJ/* * File: fwindow.r - Icon graphics interface * * Contents: Active, Bg, Color, CopyArea, Couple, * DrawArc, DrawCircle, DrawCurve, DrawImage, DrawLine, * DrawSegment, DrawPoint, DrawPolygon, DrawString, * DrawRectangle, EraseArea, Event, Fg, FillArc, FillCircle, * FillRectangle, FillPolygon, Font, FreeColor, GotoRC, GotoXY, * NewColor, Pattern, PaletteChars, PaletteColor, PaletteKey, * Pending, QueryPointer, ReadImage, TextWidth, Uncouple, * WAttrib, WDefault, WFlush, WSync, WriteImage */ #ifdef Graphics /* * Global variables. * A poll counter for use in interp.c, * the binding for the console window - FILE * for simplicity, * &col, &row, &x, &y, &interval, timestamp, and modifier keys. */ int pollctr; FILE *ConsoleBinding = NULL; #ifndef MultiThread struct descrip amperX = {D_Integer}; struct descrip amperY = {D_Integer}; struct descrip amperCol = {D_Integer}; struct descrip amperRow = {D_Integer}; struct descrip amperInterval = {D_Integer}; struct descrip lastEventWin = {D_Null}; uword prevtimestamp; uword xmod_control, xmod_shift, xmod_meta; #endif /* MultiThread */ "Active() - produce the next active window" function{0,1} Active() abstract { return file } body { wsp ws; if (!wstates || !(ws = getactivewindow())) fail; return ws->filep; } end "Alert(w,volume) - Alert the user" function{1} Alert(argv[argc]) abstract { return file } body { wbp w; int warg = 0; C_integer volume; OptWindow(w); if (argc == warg) volume = 0; else if (!def:C_integer(argv[warg], 0, volume)) runerr(101, argv[warg]); walert(w, volume); ReturnWindow; } end "Bg(w,s) - background color" function{0,1} Bg(argv[argc]) abstract { return string } body { wbp w; char sbuf1[MaxCvtLen]; int len; tended char *tmp; int warg = 0; OptWindow(w); /* * If there is a (non-window) argument we are setting by * either a mutable color (negative int) or a string name. */ if (argc - warg > 0) { if (is:integer(argv[warg])) { /* mutable color or packed RGB */ if (!isetbg(w, IntVal(argv[warg]))) fail; } else { if (!cnv:C_string(argv[warg], tmp)) runerr(103,argv[warg]); if(!setbg(w, tmp)) fail; } } /* * In any event, this function returns the current background color. */ getbg(w, sbuf1); len = strlen(sbuf1); Protect(tmp = alcstr(sbuf1, len), runerr(0)); return string(len, tmp); } end "Clip(w, x, y, w, h) - set context clip rectangle" function{1} Clip(argv[argc]) abstract { return file } body { wbp w; int warg = 0, r; C_integer x, y, width, height; wcp wc; OptWindow(w); wc = w->context; if (argc == 0) { wc->clipx = wc->clipy = 0; wc->clipw = wc->cliph = -1; unsetclip(w); } else { r = rectargs(w, argc, argv, warg, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); wc->clipx = x; wc->clipy = y; wc->clipw = width; wc->cliph = height; setclip(w); } ReturnWindow; } end "Clone(w, attribs...) - create a new context bound to w's canvas" function{1} Clone(argv[argc]) abstract { return file } body { wbp w, w2; int warg = 0, n; tended struct descrip sbuf, sbuf2; char answer[128]; OptWindow(w); Protect(w2 = alc_wbinding(), runerr(0)); w2->window = w->window; w2->window->refcount++; if (argc>warg && is:file(argv[warg])) { if ((BlkLoc(argv[warg])->file.status & Fs_Window) == 0) runerr(140,argv[warg]); if ((BlkLoc(argv[warg])->file.status & (Fs_Read|Fs_Write)) == 0) runerr(142,argv[warg]); Protect(w2->context = clone_context((wbp)BlkLoc(argv[warg])->file.fd), runerr(0)); warg++; } else { Protect(w2->context = clone_context(w), runerr(0)); } for (n = warg; n < argc; n++) { if (!is:null(argv[n])) { if (!cnv:tmp_string(argv[n], sbuf)) runerr(109, argv[n]); switch (wattrib(w2, StrLoc(argv[n]), StrLen(argv[n]), &sbuf2, answer)) { case Failed: fail; case Error: runerr(0, argv[n]); } } } Protect(BlkLoc(result) = (union block *)alcfile((FILE *)w2, Fs_Window|Fs_Read|Fs_Write, &emptystr),runerr(0)); result.dword = D_File; return result; } end "Color(argv[]) - return or set color map entries" function{0,1} Color(argv[argc]) abstract { return file ++ string } body { wbp w; int warg = 0; int i, len; C_integer n; char *colorname, *srcname; tended char *tmp; OptWindow(w); if (argc - warg == 0) runerr(101); if (argc - warg == 1) { /* if this is a query */ CnvCInteger(argv[warg], n) if ((colorname = get_mutable_name(w, n)) == NULL) fail; len = strlen(colorname); Protect(tmp = alcstr(colorname, len), runerr(0)); return string(len, colorname); } CheckArgMultiple(2); for (i = warg; i < argc; i += 2) { CnvCInteger(argv[i], n) if ((colorname = get_mutable_name(w, n)) == NULL) fail; if (is:integer(argv[i+1])) { /* copy another mutable */ if (IntVal(argv[i+1]) >= 0) runerr(205, argv[i+1]); /* must be negative */ if ((srcname = get_mutable_name(w, IntVal(argv[i+1]))) == NULL) fail; if (set_mutable(w, n, srcname) == Failed) fail; strcpy(colorname, srcname); } else { /* specified by name */ tended char *tmp; if (!cnv:C_string(argv[i+1],tmp)) runerr(103,argv[i+1]); if (set_mutable(w, n, tmp) == Failed) fail; strcpy(colorname, tmp); } } ReturnWindow; } end "ColorValue(w,s) - produce RGB components from string color name" function{0,1} ColorValue(argv[argc]) abstract { return string } body { wbp w; int warg = 0, len, r, g, b; tended char *s; char tmp[24]; if (is:file(argv[0]) && (BlkLoc(argv[0])->file.status & Fs_Window)) { w = (wbp)BlkLoc(argv[0])->file.fd; /* explicit window */ warg = 1; } else if (is:file(kywd_xwin[XKey_Window]) && (BlkLoc(kywd_xwin[XKey_Window])-) %ȩ VMS.BCKNF9.SRC.RUNTIME]FWINDOW.R;11.ICN;1`]>file.status & Fs_Window)) w = (wbp)BlkLoc(kywd_xwin[XKey_Window])->file.fd; /* &window */ else w = NULL; /* no window (but proceed anyway) */ if (!(warg < argc)) runerr(103); if (!cnv:C_string(argv[warg], s)) runerr(103,argv[warg]); if (parsecolor(w, s, &r, &g, &b) == Succeeded) { sprintf(tmp,"%d,%d,%d", r, g, b); len = strlen(tmp); Protect(s = alcstr(tmp,len), runerr(306)); return string(len, s); } fail; } end "CopyArea(w,w2,x,y,width,height,x2,y2) - copy area" function{0,1} CopyArea(argv[argc]) /* w,w2,x,y,width,height,x2,y2 */ abstract { return file } body { int warg = 0, n, r; C_integer x, y, width, height, x2, y2, width2, height2; wbp w, w2; OptWindow(w); /* * 2nd window defaults to value of first window */ if (argc>warg && is:file(argv[warg])) { if ((BlkLoc(argv[warg])->file.status & Fs_Window) == 0) runerr(140,argv[warg]); if ((BlkLoc(argv[warg])->file.status & (Fs_Read|Fs_Write)) == 0) runerr(142,argv[warg]); w2 = (wbp)BlkLoc(argv[warg])->file.fd; warg++; } else { w2 = w; } /* * x1, y1, width, and height follow standard conventions. */ r = rectargs(w, argc, argv, warg, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); /* * get x2 and y2, ignoring width and height. */ n = argc; if (n > warg + 6) n = warg + 6; r = rectargs(w2, n, argv, warg + 4, &x2, &y2, &width2, &height2); if (r >= 0) runerr(101, argv[r]); if (copyArea(w, w2, x, y, width, height, x2, y2) == Failed) fail; ReturnWindow; } end /* * Bind the canvas associated with w to the context * associated with w2. If w2 is omitted, create a new context. * Produces a new window variable. */ "Couple(w,w2) - couple canvas to context" function{0,1} Couple(w,w2) abstract { return file } body { tended struct descrip sbuf, sbuf2; tended struct b_list *hp; tended struct b_lelem *bp; wbp wb, wb_new; wsp ws; /* * make the new binding */ Protect(wb_new = alc_wbinding(), runerr(0)); /* * if w is a file, then we bind to an existing window */ if (is:file(w) && (BlkLoc(w)->file.status & Fs_Window)) { wb = (wbp)(BlkLoc(w)->file.fd); wb_new->window = ws = wb->window; if (is:file(w2) && (BlkLoc(w2)->file.status & Fs_Window)) { /* * Bind an existing window to an existing context, * and up the context's reference count. */ if (rebind(wb_new, (wbp)(BlkLoc(w2)->file.fd)) == Failed) fail; wb_new->context->refcount++; } else runerr(140, w2); /* bump up refcount to ws */ ws->refcount++; } else runerr(140, w); Protect(BlkLoc(result) = (union block *)alcfile((FILE *)wb_new, Fs_Window|Fs_Read|Fs_Write, &emptystr),runerr(0)); result.dword = D_File; return result; } end /* * DrawArc(w, x1, y1, width1, height1, angle11, angle21,...) */ "DrawArc(argv[]){1} - draw arc" function{1} DrawArc(argv[argc]) abstract { return file } body { wbp w; int i, j, r, warg = 0; XArc arcs[MAXXOBJS]; C_integer x, y, width, height; double a1, a2; SHORT angle1, angle2; OptWindow(w); j = 0; for (i = warg; i < argc || i == warg; i += 6) { if (j == MAXXOBJS) { drawarcs(w, arcs, MAXXOBJS); j = 0; } r = rectargs(w, argc, argv, i, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); arcs[j].x = x; arcs[j].y = y; if (width > 0) width--; if (height > 0) height--; ARCWIDTH(arcs[j]) = width; ARCHEIGHT(arcs[j]) = height; if (i + 4 >= argc || is:null(argv[i + 4])) angle1 = 0; else { if (!cnv:C_double(argv[i + 4], a1)) runerr(102, argv[i + 4]); if (a1 >= 0.0) a1 = fmod(a1, 2 * Pi); else a1 = -fmod(-a1, 2 * Pi); angle1 = -a1 * 180 / Pi * 64; } if (i + 5 >= argc || is:null(argv[i + 5])) angle2 = FULLARC; else { if (!cnv:C_double(argv[i + 5], a2)) runerr(102, argv[i + 5]); if (fabs(a2) > 3 * Pi) runerr(101, argv[i + 5]); angle2 = -a2 * 180 / Pi * 64; } if (abs(angle2) >= (360<<6)) arcs[j].angle2 = FULLARC; else { if (angle2 < 0) { angle1 += angle2; angle2 = abs(angle2); } arcs[j].angle2 = EXTENT(angle2); } if (angle1 < 0) angle1 = (360<<6) - (abs(angle1) % (360<<6)); else angle1 %= (360 << 6); arcs[j].angle1 = ANGLE(angle1); j++; } drawarcs(w, arcs, j); ReturnWindow; } end /* * DrawCircle(w, x1, y1, r1, angle11, angle21, ...) */ "DrawCircle(argv[]){1} - draw circle" function{1} DrawCircle(argv[argc]) abstract { return file } body { wbp w; int warg = 0, r; OptWindow(w); r = docircles(w, argc - warg, argv + warg, 0); if (r < 0) ReturnWindow; else if (r >= argc - warg) runerr(146); else runerr(102, argv[warg + r]); } end /* * DrawCurve(w,x1,y1,...xN,yN) * Draw a smooth curve through the given points. */ "DrawCurve(argv[]){1} - draw curve" function{1} DrawCurve(argv[argc]) abstract { return file } body { wbp w; int i, n, closed = 0, warg = 0; C_integer dx, dy, x0, y0, xN, yN; XPoint *points; OptWindow(w); CheckArgMultiple(2); dx = w->context->dx; dy = w->context->dy; Protect(points = (XPoint *)malloc(sizeof(XPoint) * (n+2)), runerr(305)); if (n > 1) { CnvCInteger(argv[warg], x0) CnvCInteger(argv[warg + 1], y0) CnvCInteger(argv[argc - 2], xN) CnvCInteger(argv[argc - 1], yN) if ((x0 == xN) && (y0 == yN)) { closed = 1; /* duplicate the next to last point */ CnvCShort(argv[argc-4], points[0].x); CnvCShort(argv[argc-3], points[0].y); points[0].x += w->context->dx; points[0].y += w->context->dy; } else { /* duplicate the first point */ CnvCShort(argv[warg], points[0].x); CnvCShort(argv[warg + 1], points[0].y); points[0].x += w->context->dx; points[0].y += w->context->dy; } for (i = 1; i <= n; i++) { int base = warg + (i-1) * 2; CnvCShort(argv[base], points[i].x); CnvCShort(argv[base + 1], points[i].y); points[i].x += dx; points[i].y += dy; } if (closed) { /* duplicate the second point */ points[i] = points[2]; } else { /* duplicate the last point */ points[i] = points[i-1]; } if (n < 3) { drawlines(w, points+1, n); } else { drawCurve(w, points, n+2); } } free(points); ReturnWindow; } end "DrawImage(w,x,y,s) - draw bitmapped figure" function{0,1} DrawImage(argv[argc]) abstract { return null++integer } body { wbp w; int warg = 0; int c, i, width, height, row, p; C_integer x, y; word * *5 VMS.BCKNF9.SRC.RUNTIME]FWINDOW.R;1P.C;1`86nchars; unsigned char *s, *t, *z; struct descrip d; struct palentry *e; OptWindow(w); /* * X or y can be defaulted but s is required. * Validate x/y first so that the error message makes more sense. */ if (argc - warg >= 1 && !def:C_integer(argv[warg], 0, x)) runerr(101, argv[warg]); if (argc - warg >= 2 && !def:C_integer(argv[warg + 1], 0, y)) runerr(101, argv[warg + 1]); if (argc - warg < 3) runerr(103); /* missing s */ if (!cnv:tmp_string(argv[warg+2], d)) runerr(103, argv[warg + 2]); x += w->context->dx; y += w->context->dy; /* * Extract the Width and skip the following comma. */ s = (unsigned char *)StrLoc(d); z = s + StrLen(d); /* end+1 of string */ width = 0; while (s < z - 1 && isdigit(*s)) width = 10 * width + *s++ - '0'; if (width == 0 || *s++ != ',') fail; /* * Check for a bilevel format. */ if ((c = *s) == '#' || c == '~') { s++; nchars = 0; for (t = s; t < z; t++) if (isxdigit(*t)) nchars++; /* count hex digits */ else if (*t != PCH1 && *t != PCH2) fail; /* illegal punctuation */ if (nchars == 0) fail; row = (width + 3) / 4; /* digits per row */ if (nchars % row != 0) fail; height = nchars / row; if (blimage(w, x, y, width, height, c, s, (word)(z - s)) == Error) runerr(305); else return nulldesc; } /* * Extract the palette name and skip its comma. */ c = *s++; if (s >= z - 2 || !isdigit(*s)) fail; p = 0; while (s < z - 1 && isdigit(*s)) p = 10 * p + *s++ - '0'; if (*s++ != ',') fail; if (c == 'g' && p >= 2 && p <= 256) p = -p; else if (c != 'c' || p < 1 || p > 6) fail; /* * Scan the image to see which colors are needed. */ e = palsetup(p); if (e == NULL) runerr(305); for (i = 0; i < 256; i++) e[i].used = 0; nchars = 0; for (t = s; t < z; t++) { c = *t; e[c].used = 1; if (e[c].valid || c == TCH1 || c == TCH2) nchars++; /* valid color, or transparent */ else if (c != PCH1 && c != PCH2) fail; } if (nchars == 0) fail; /* empty image */ if (nchars % width != 0) fail; /* not rectangular */ /* * Call platform-dependent code to draw the image. */ height = nchars / width; i = strimage(w, x, y, width, height, e, s, (word)(z - s), 0); if (i == 0) return nulldesc; else if (i < 0) runerr(305); else return C_integer i; } end /* * DrawLine(w,x1,y1,...xN,yN) */ "DrawLine(argv[]){1} - draw line" function{1} DrawLine(argv[argc]) abstract { return file } body { wbp w; int i, j, n, warg = 0; XPoint points[MAXXOBJS]; int dx, dy; OptWindow(w); CheckArgMultiple(2); dx = w->context->dx; dy = w->context->dy; for(i=0, j=0;icontext->dx; dy = w->context->dy; for(i=0, j=0; i < n; i++, j++) { int base = warg + i * 2; if (j == MAXXOBJS) { drawpoints(w, points, MAXXOBJS); j = 0; } CnvCShort(argv[base], points[j].x); CnvCShort(argv[base + 1], points[j].y); points[j].x += dx; points[j].y += dy; } drawpoints(w, points, j); ReturnWindow; } end /* * DrawPolygon(w,x1,y1,...xN,yN) */ "DrawPolygon(argv[]){1} - draw polygon" function{1} DrawPolygon(argv[argc]) abstract { return file } body { wbp w; int i, j, n, base, dx, dy, warg = 0; XPoint points[MAXXOBJS]; OptWindow(w); CheckArgMultiple(2); dx = w->context->dx; dy = w->context->dy; /* * To make a closed polygon, start with the *last* point. */ CnvCShort(argv[argc - 2], points[0].x); CnvCShort(argv[argc - 1], points[0].y); points[0].x += dx; points[0].y += dy; /* * Now add all points from beginning to end, including last point again. */ for(i = 0, j = 1; i < n; i++, j++) { base = warg + i * 2; if (j == MAXXOBJS) { drawlines(w, points, MAXXOBJS); points[0] = points[MAXXOBJS-1]; j = 1; } CnvCShort(argv[base], points[j].x); CnvCShort(argv[base + 1], points[j].y); points[j].x += dx; points[j].y += dy; } drawlines(w, points, j); ReturnWindow; } end /* * DrawRectangle(w, x1, y1, width1, height1, ..., xN, yN, widthN,heightN) */ "DrawRectangle(argv[]){1} - draw rectangle" function{1} DrawRectangle(argv[argc]) abstract { return file } body { wbp w; int i, j, r, warg = 0; XRectangle recs[MAXXOBJS]; C_integer x, y, width, height; OptWindow(w); j = 0; for (i = warg; i < argc || i == warg; i += 4) { r = rectargs(w, argc, argv, i, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); if (j == MAXXOBJS) { drawrectangles(w,recs,MAXXOBJS); j = 0; } RECX(recs[j]) = x; RECY(recs[j]) = y; RECWIDTH(recs[j]) = width; RECHEIGHT(recs[j]) = height; j++; } drawrectangles(w, recs, j); ReturnWindow; } end /* * DrawSegment(x11,y11,x12,y12,...,xN1,yN1,xN2,yN2) */ "DrawSegment(argv[]){1} - draw line segment" function{1} DrawSegment(argv[argc]) abstract { return file } body { wbp w; int i, j, n, warg = 0, dx, dy; XSegment segs[MAXXOBJS]; OptWindow(w); CheckArgMultiple(4); dx = w->context->dx; dy = w->context->dy; for(i=0, j=0; i < n; i++, j++) { int base = warg + i * 4; if (j == MAXXOBJS) { drawsegments(w, segs, MAXXOBJS); j = 0; } CnvCShort(argv[base], segs[j].x1); CnvCShort(argv[base + 1], segs[j].y1); CnvCShort(argv[base + 2], segs[j].x2); CnvCShort(argv[base + 3], segs[j].y2); segs[j].x1 += dx; segs[j].x2 += dx; segs[j].y1 += dy; segs[j].y2 += dy; } drawsegments(w, segs, j); ReturnWindow; } end /* * DrawString(w, x1, y1, s1, ..., xN, yN, sN) */ "DrawString(argv[]){1} - draw text" function{1} DrawString(argv[argc]) abstract { return file } body { wbp w; int i, n, len, warg = 0; char *s; int dx, dy; OptWindow(w); CheckArgMultiple(3); for(i=0; i < n; i++) { C_integ+ V VMS.BCKNF9.SRC.RUNTIME]FWINDOW.R;1;1H;1`,er x, y; int j, base = warg + i * 3; CnvCInteger(argv[base], x); CnvCInteger(argv[base + 1], y); x += w->context->dx; y += w->context->dy; CnvTmpString(argv[base + 2], argv[base + 2]); s = StrLoc(argv[base + 2]); len = StrLen(argv[base + 2]); for(j=0; j < len; j++) { if (s[j] == '\n') { drawstring(w, x, y, s, j); s += j+1; len -= j+1; j = -1; y += LEADING(w); } } drawstring(w, x, y, s, len); } ReturnWindow; } end "EraseArea(w,x,y,width,height) - clear an area of the window" function{1} EraseArea(argv[argc]) abstract { return file } body { wbp w; int warg = 0, i, r; C_integer x, y, width, height; OptWindow(w); for (i = warg; i < argc || i == warg; i += 4) { r = rectargs(w, argc, argv, i, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); eraseArea(w, x, y, width, height); } ReturnWindow; } end "Event(w) - return an event from a window" function{1} Event(argv[argc]) abstract { return string ++ integer } body { wbp w; C_integer i; tended struct descrip d; int warg = 0; OptWindow(w); d = nulldesc; i = wgetevent(w,&d); if (i == 0) { if (is:file(kywd_xwin[XKey_Window]) && w == (wbp)BlkLoc(kywd_xwin[XKey_Window])->file.fd) lastEventWin = kywd_xwin[XKey_Window]; else lastEventWin = argv[warg-1]; return d; } else if (i == -1) runerr(141); else runerr(143); } end "Fg(w,s) - foreground color" function{0,1} Fg(argv[argc]) abstract { return string } body { wbp w; char sbuf1[MaxCvtLen]; int len; tended char *tmp; int warg = 0; OptWindow(w); /* * If there is a (non-window) argument we are setting by * either a mutable color (negative int) or a string name. */ if (argc - warg > 0) { if (is:integer(argv[warg])) { /* mutable color or packed RGB */ if (!isetfg(w, IntVal(argv[warg]))) fail; } else { if (!cnv:C_string(argv[warg], tmp)) runerr(103,argv[warg]); if(!setfg(w, tmp)) fail; } } /* * In any case, this function returns the current foreground color. */ getfg(w, sbuf1); len = strlen(sbuf1); Protect(tmp = alcstr(sbuf1, len), runerr(0)); return string(len, tmp); } end /* * FillArc(w, x1, y1, width1, height1, angle11, angle21,...) */ "FillArc(argv[]){1} - fill arc" function{1} FillArc(argv[argc]) abstract { return file } body { wbp w; int i, j, r, warg = 0; XArc arcs[MAXXOBJS]; C_integer x, y, width, height; double a1, a2; SHORT angle1, angle2; OptWindow(w); j = 0; for (i = warg; i < argc || i == warg; i += 6) { if (j == MAXXOBJS) { fillarcs(w, arcs, MAXXOBJS); j = 0; } r = rectargs(w, argc, argv, i, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); arcs[j].x = x; arcs[j].y = y; ARCWIDTH(arcs[j]) = width; ARCHEIGHT(arcs[j]) = height; if (i + 4 >= argc || is:null(argv[i + 4])) angle1 = 0; else { if (!cnv:C_double(argv[i + 4], a1)) runerr(102, argv[i + 4]); if (a1 >= 0.0) a1 = fmod(a1, 2 * Pi); else a1 = -fmod(-a1, 2 * Pi); angle1 = -a1 * 180 / Pi * 64; } if (i + 5 >= argc || is:null(argv[i + 5])) angle2 = FULLARC; else { if (!cnv:C_double(argv[i + 5], a2)) runerr(102, argv[i + 5]); if (fabs(a2) > 3 * Pi) runerr(101, argv[i + 5]); angle2 = -a2 * 180 / Pi * 64; } if (abs(angle2) >= (360<<6)) arcs[j].angle2 = FULLARC; else { if (angle2 < 0) { angle1 += angle2; angle2 = abs(angle2); } arcs[j].angle2 = EXTENT(angle2); } if (angle1 < 0) angle1 = (360<<6) - (abs(angle1) % (360<<6)); else angle1 %= (360 << 6); arcs[j].angle1 = ANGLE(angle1); j++; } fillarcs(w, arcs, j); ReturnWindow; } end /* * FillCircle(w, x1, y1, r1, angle11, angle21, ...) */ "FillCircle(argv[]){1} - draw filled circle" function{1} FillCircle(argv[argc]) abstract { return file } body { wbp w; int warg = 0, r; OptWindow(w); r = docircles(w, argc - warg, argv + warg, 1); if (r < 0) ReturnWindow; else if (r >= argc - warg) runerr(146); else runerr(102, argv[warg + r]); } end /* * FillPolygon(w, x1, y1, ...xN, yN) */ "FillPolygon(argv[]){1} - fill polygon" function{1} FillPolygon(argv[argc]) abstract { return file } body { wbp w; int i, n, warg = 0; XPoint *points; int dx, dy; OptWindow(w); CheckArgMultiple(2) /* * Allocate space for all the points in a contiguous array, * because a FillPolygon must be performed in a single call. */ n = argc>>1; Protect(points = (XPoint *)malloc(sizeof(XPoint) * n), runerr(305)); dx = w->context->dx; dy = w->context->dy; for(i=0; i < n; i++) { int base = warg + i * 2; CnvCShort(argv[base], points[i].x); CnvCShort(argv[base + 1], points[i].y); points[i].x += dx; points[i].y += dy; } fillpolygon(w, points, n); free(points); ReturnWindow; } end /* * FillRectangle(w, x1, y1, width1, height1,...,xN, yN, widthN, heightN) */ "FillRectangle(argv[]){1} - draw filled rectangle" function{1} FillRectangle(argv[argc]) abstract { return file } body { wbp w; int i, j, r, warg = 0; XRectangle recs[MAXXOBJS]; C_integer x, y, width, height; OptWindow(w); j = 0; for (i = warg; i < argc || i == warg; i += 4) { r = rectargs(w, argc, argv, i, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); if (j == MAXXOBJS) { fillrectangles(w,recs,MAXXOBJS); j = 0; } RECX(recs[j]) = x; RECY(recs[j]) = y; RECWIDTH(recs[j]) = width; RECHEIGHT(recs[j]) = height; j++; } fillrectangles(w, recs, j); ReturnWindow; } end "Font(w,s) - get/set font" function{0,1} Font(argv[argc]) abstract { return string } body { tended char *tmp; int len; wbp w; int warg = 0; char buf[MaxCvtLen]; OptWindow(w); if (warg < argc) { if (!cnv:C_string(argv[warg],tmp)) runerr(103,argv[warg]); if (setfont(w,&tmp) == Failed) fail; } getfntnam(w, buf); len = strlen(buf); Protect(tmp = alcstr(buf, len), runerr(0)); return string(len,tmp); } end "FreeColor(argv[]) - free colors" function{1} FreeColor(argv[argc]) abstract { return file } body { wbp w; int warg = 0; int i; C_integer n; tended char *s; OptWindow(w); if (argc - warg == 0) runerr(103); for (i = warg; i < argc; i++) { if (is:integer(argv[i])) { CnvCInteger(argv[i],, Q1e VMS.BCKNF9.SRC.RUNTIME]FWINDOW.R;1;1CN;1`A; n) if (n < 0) free_mutable(w, n); } else { if (!cnv:C_string(argv[i], s)) runerr(103,argv[i]); freecolor(w, s); } } ReturnWindow; } end "GotoRC(w,r,c) - move cursor to a particular text row and column" function{1} GotoRC(argv[argc]) abstract { return file } body { C_integer r, c; wbp w; int warg = 0; OptWindow(w); if (argc - warg < 1) r = 1; else CnvCInteger(argv[warg], r) if (argc - warg < 2) c = 1; else CnvCInteger(argv[warg + 1], c) /* * turn the cursor off */ HideCursor(w->window); w->window->y = ROWTOY(w, r); w->window->x = COLTOX(w, c); w->window->x += w->context->dx; w->window->y += w->context->dy; /* * turn it back on at new location */ UpdateCursorPos(w->window, w->context); ShowCursor(w->window); ReturnWindow; } end "GotoXY(w,x,y) - move cursor to a particular pixel location" function{1} GotoXY(argv[argc]) abstract { return file } body { wbp w; C_integer x, y; int warg = 0; OptWindow(w); if (argc - warg < 1) x = 0; else CnvCInteger(argv[warg], x) if (argc - warg < 2) y = 0; else CnvCInteger(argv[warg + 1], y) x += w->context->dx; y += w->context->dy; HideCursor(w->window); w->window->x = x; w->window->y = y; UpdateCursorPos(w->window, w->context); ShowCursor(w->window); ReturnWindow; } end "Lower(w) - lower w to the bottom of the window stack" function{1} Lower(argv[argc]) abstract { return file } body { wbp w; int warg = 0; OptWindow(w); lowerWindow(w); ReturnWindow; } end "NewColor(w,s) - allocate an entry in the color map" function{0,1} NewColor(argv[argc]) abstract { return integer } body { wbp w; int rv; int warg = 0; OptWindow(w); if (mutable_color(w, argv+warg, argc-warg, &rv) == Failed) fail; return C_integer rv; } end "PaletteChars(w,p) - return the characters forming keys to palette p" function{0,1} PaletteChars(argv[argc]) abstract { return string } body { int n, warg; extern char c1list[], c2list[], c3list[], c4list[]; if (is:file(argv[0]) && (BlkLoc(argv[0])->file.status & Fs_Window)) warg = 1; else warg = 0; /* window not required */ if (argc - warg < 1) n = 1; else n = palnum(&argv[warg]); switch (n) { case -1: runerr(103, argv[warg]); /* not a string */ case 0: fail; /* unrecognized */ case 1: return string(90, c1list); /* c1 */ case 2: return string(9, c2list); /* c2 */ case 3: return string(31, c3list); /* c3 */ case 4: return string(73, c4list); /* c4 */ case 5: return string(141, (char *)allchars); /* c5 */ case 6: return string(241, (char *)allchars); /* c6 */ default: /* gn */ if (n >= -64) return string(-n, c4list); else return string(-n, (char *)allchars); } } end "PaletteColor(w,p,s) - return color of key s in palette p" function{0,1} PaletteColor(argv[argc]) abstract { return string } body { int p, warg, len; char tmp[24], *s; struct palentry *e; tended struct descrip d; if (is:file(argv[0]) && (BlkLoc(argv[0])->file.status & Fs_Window)) warg = 1; else warg = 0; /* window not required */ if (argc - warg < 2) runerr(103); p = palnum(&argv[warg]); if (p == -1) runerr(103, argv[warg]); if (p == 0) fail; if (!cnv:tmp_string(argv[warg + 1], d)) runerr(103, argv[warg + 1]); if (StrLen(d) != 1) runerr(205, d); e = palsetup(p); if (e == NULL) runerr(305); e += *StrLoc(d) & 0xFF; if (!e->valid) fail; sprintf(tmp, "%d,%d,%d", e->clr.red, e->clr.green, e->clr.blue); len = strlen(tmp); Protect(s = alcstr(tmp, len), runerr(306)); return string(len, s); } end "PaletteKey(w,p,s) - return key of closest color to s in palette p" function{0,1} PaletteKey(argv[argc]) abstract { return string } body { wbp w; int warg = 0, p; C_integer n; tended char *s; int r, g, b; if (is:file(argv[0]) && (BlkLoc(argv[0])->file.status & Fs_Window)) { w = (wbp)BlkLoc(argv[0])->file.fd; /* explicit window */ warg = 1; } else if (is:file(kywd_xwin[XKey_Window]) && (BlkLoc(kywd_xwin[XKey_Window])->file.status & Fs_Window)) w = (wbp)BlkLoc(kywd_xwin[XKey_Window])->file.fd; /* &window */ else w = NULL; /* no window (but proceed anyway) */ if (argc - warg < 2) runerr(103); p = palnum(&argv[warg]); if (p == -1) runerr(103, argv[warg]); if (p == 0) fail; if (cnv:C_integer(argv[warg + 1], n)) { if (w == NULL || (s = get_mutable_name(w, n)) == NULL) fail; } else if (!cnv:C_string(argv[warg + 1], s)) runerr(103, argv[warg + 1]); if (parsecolor(w, s, &r, &g, &b) == Succeeded) return string(1, rgbkey(p, r / 65535.0, g / 65535.0, b / 65535.0)); else fail; } end "Pattern(w,s) - sets the context fill pattern by string name" function{1} Pattern(argv[argc]) abstract { return file } body { int warg = 0; wbp w; OptWindow(w); if (argc - warg == 0) runerr(103, nulldesc); if (! cnv:string(argv[warg], argv[warg])) runerr(103, nulldesc); switch (SetPattern(w, StrLoc(argv[warg]), StrLen(argv[warg]))) { case Error: runerr(0, argv[warg]); case Failed: fail; } ReturnWindow; } end "Pending(w,x[]) - produce a list of events pending on window" function{0,1} Pending(argv[argc]) abstract { return list } body { wbp w; int warg = 0; wsp ws; int i; OptWindow(w); ws = w->window; wsync(w); /* * put additional arguments to Pending on the pending list in * guaranteed consecutive order. */ for (i = warg; i < argc; i++) { c_put(&(ws->listp), &argv[i]); } /* * retrieve any events that might be relevant before returning the * pending queue. */ switch (pollevent()) { case -1: runerr(141); case 0: fail; } return ws->listp; } end "Pixel(w,x,y,width,height) - produce the contents of some pixels" function{3} Pixel(argv[argc]) abstract { return integer ++ string } body { C_integer x, y, width, height; int x2, y2, width2, height2; wbp w; int warg = 0, slen, r; tended struct descrip lastval; char strout[50]; OptWindow(w); r = rectargs(w, argc, argv, warg, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); { int i, j; long rv; wsp ws = w->window; #ifndef max #define max(x,y) (((x)<(y))?(y):(x)) #define min(x,y) (((x)>(y))?(y):(x)) #endif x2 = max(x,0); y2 = max(y,0); width2 = min(width, (int)ws->width - x2- Ϛx VMS.BCKNF9.SRC.RUNTIME]FWINDOW.R;1`ZJ); height2 = min(height, (int)ws->height - y2); if (getpixel_init(w, x2, y2, width2, height2) == Failed) fail; lastval = emptystr; for (j=y; j < y + height; j++) { for (i=x; i < x + width; i++) { getpixel(w, i, j, &rv, strout); slen = strlen(strout); if (rv >= 0) { if (slen != StrLen(lastval) || strncmp(strout, StrLoc(lastval), slen)) { Protect((StrLoc(lastval) = alcstr(strout, slen)), runerr(0)); StrLen(lastval) = slen; } suspend lastval; } else { suspend C_integer rv; } } } fail; } } end "QueryPointer(w) - produce mouse position" function{0,2} QueryPointer(w) declare { XPoint xp; } abstract { return integer } body { pollevent(); if (is:null(w)) { query_rootpointer(&xp); } else { if (!is:file(w) || !(BlkLoc(w)->file.status & Fs_Window)) runerr(140, w); query_pointer((wbp)BlkLoc(w)->file.fd, &xp); } suspend C_integer xp.x; suspend C_integer xp.y; fail; } end "Raise(w) - raise w to the top of the window stack" function{1} Raise(argv[argc]) abstract { return file } body { wbp w; int warg = 0; OptWindow(w); raiseWindow(w); ReturnWindow; } end "ReadImage(w, s, x, y, p) - load image file" function{0,1} ReadImage(argv[argc]) abstract { return integer } body { wbp w; char filename[MaxFileName + 1]; tended char *tmp; int status, warg = 0; C_integer x, y; int p, r; struct imgdata imd; OptWindow(w); if (argc - warg == 0) runerr(103,nulldesc); if (!cnv:C_string(argv[warg], tmp)) runerr(103,argv[warg]); /* * x and y must be integers; they default to 0. */ if (argc - warg < 2) x = 0; else if (!def:C_integer(argv[warg+1], 0, x)) runerr(101, argv[warg+1]); if (argc - warg < 3) y = 0; else if (!def:C_integer(argv[warg+2], 0, y)) runerr(101, argv[warg+2]); /* * p is an optional palette name. */ if (argc - warg < 4 || is:null(argv[warg+3])) p = 0; else { p = palnum(&argv[warg+3]); if (p == -1) runerr(103, argv[warg+3]); if (p == 0) fail; } x += w->context->dx; y += w->context->dy; mystrncpy(filename, tmp, MaxFileName); /* copy to loc that won't move*/ /* * First try to read as a GIF file. * If that doesn't work, try platform-dependent image reading code. */ r = readGIF(filename, p, &imd); if (r == Succeeded) { status = strimage(w, x, y, imd.width, imd.height, imd.paltbl, imd.data, (word)imd.width * (word)imd.height, 0); if (status < 0) r = Error; free((pointer)imd.paltbl); free((pointer)imd.data); } else if (r == Failed) r = readimage(w, filename, x, y, &status); if (r == Error) runerr(305); if (r == Failed) fail; if (status == 0) return nulldesc; else return C_integer (word)status; } end "WSync(w) - synchronize with server" function{1} WSync(w) abstract { return file++null } body { wbp _w_; if (is:null(w)) { _w_ = NULL; } else if (!is:file(w)) runerr(140,w); else { if (!(BlkLoc(w)->file.status & Fs_Window)) runerr(140,w); _w_ = (wbp)BlkLoc(w)->file.fd; } wsync(_w_); pollevent(); return w; } end "TextWidth(w,s) - compute text pixel width" function{1} TextWidth(argv[argc]) abstract { return integer } body { wbp w; int warg=0; C_integer i; OptWindow(w); if (warg == argc) runerr(103,nulldesc); else if (!cnv:tmp_string(argv[warg],argv[warg])) runerr(103,argv[warg]); i = TEXTWIDTH(w, StrLoc(argv[warg]), StrLen(argv[warg])); return C_integer i; } end "Uncouple(w) - uncouple window" function{1} Uncouple(w) abstract { return file } body { wbp _w_; if (!is:file(w)) runerr(140,w); if ((BlkLoc(w)->file.status & Fs_Window) == 0) runerr(140,w); if ((BlkLoc(w)->file.status & (Fs_Read|Fs_Write)) == 0) runerr(142,w); _w_ = (wbp)BlkLoc(w)->file.fd; BlkLoc(w)->file.status = Fs_Window; /* no longer open for read/write */ free_binding(_w_); return w; } end "WAttrib(argv[]) - read/write window attributes" function{*} WAttrib(argv[argc]) abstract { return file++string } body { wbp w, wsave; word n; tended struct descrip sbuf, sbuf2; char answer[128]; int pass, config = 0; int warg = 0; OptWindow(w); wsave = w; /* * Loop through the arguments. */ for (pass = 1; pass <= 2; pass++) { w = wsave; if (config && pass == 2) { if (do_config(w, config) == Failed) fail; } for (n = warg; n < argc; n++) { if (is:file(argv[n])) {/* Current argument is a file */ /* * Switch the current file to the file named by the * current argument providing it is a file. argv[n] * is made to be a empty string to avoid a special case. */ if (!(BlkLoc(argv[n])->file.status & Fs_Window)) runerr(140,argv[n]); w = (wbp)BlkLoc(argv[n])->file.fd; if (config && pass == 2) { if (do_config(w, config) == Failed) fail; } } else { /* Current argument should be a string */ /* * In pass 1, a null argument is an error; failed attribute * assignments are turned into null descriptors for pass 2 * and are ignored. */ if (is:null(argv[n])) { if (pass == 2) continue; else runerr(109, argv[n]); } /* * Convert the argument to a string */ if (!cnv:tmp_string(argv[n], sbuf)) runerr(109, argv[n]); /* * Read/write the attribute */ if ((pass == 1) && strnchr(StrLoc(sbuf), '=', StrLen(sbuf))) { /* * pass 1: perform attribute assignments */ switch (wattrib(w, StrLoc(sbuf), StrLen(sbuf), &sbuf2, answer)) { case Failed: /* * Mark the attribute so we don't produce a result */ argv[n] = nulldesc; continue; case Error: runerr(0, argv[n]); } if (StrLen(sbuf) > 4) { if (!strncmp(StrLoc(sbuf), "pos=", 4)) config |= 1; if (StrLen(sbuf) > 5) { if (!strncmp(StrLoc(sbuf), "posx=", 5)) config |= 1; if (!strncmp(StrLoc(sbuf), "posy=", 5)) config |= 1; if (!strncmp(StrLoc(sbuf), "rows=", 5)) config |= 2; if (!strncmp(StrLoc(sbuf), "size=", 5)) config |= 2; if (StrLen(sbuf) > 6) { if (!strncmp(StrLoc(sbuf), "width=", 6)) config |= 2; if (!strncmp(StrLoc(sbuf), "lines=", 6)) config |= 2; if (StrLen(sbuf) > 7) { if (!strncmp(StrLoc(sbuf), "height=", 7)) config |= 2; if (StrLen(sbuf) > 8) { if (!strncmp(StrLoc(sbuf), "columns=", 8)) config |= 2; if (StrLen(sbuf) > 9) { if (!strncm. ?p VMS.BCKNF9.SRC.RUNTIME]FWINDOW.R;1` Yp(StrLoc(sbuf), "geometry=", 9)) config |= 3; } } } } } } } /* * pass 2: perform attribute queries, suspend result(s) */ else if (pass==2) { char *stmp; /* * Turn assignments into queries. */ if (stmp = strnchr(StrLoc(sbuf),'=',StrLen(sbuf))) StrLen(sbuf) = stmp - StrLoc(sbuf); switch (wattrib(w, StrLoc(sbuf), StrLen(sbuf), &sbuf2, answer)) { case Failed: continue; case Error: runerr(0, argv[n]); } if (is:string(sbuf2)) Protect(StrLoc(sbuf2) = alcstr(StrLoc(sbuf2),StrLen(sbuf2)), runerr(0)); suspend sbuf2; } } } } fail; } end "WDefault(w,program,option) - get a default value from the environment" function{0,1} WDefault(argv[argc]) abstract { return string } body { wbp w; int warg = 0; long l; tended char *prog, *opt; char sbuf1[MaxCvtLen]; OptWindow(w); if (argc-warg < 2) runerr(103); if (!cnv:C_string(argv[warg],prog)) runerr(103,argv[warg]); if (!cnv:C_string(argv[warg+1],opt)) runerr(103,argv[warg+1]); if (getdefault(w, prog, opt, sbuf1) == Failed) fail; l = strlen(sbuf1); Protect(prog = alcstr(sbuf1,l),runerr(0)); return string(l,prog); } end "WFlush(w) - flush all output to window w" function{1} WFlush(argv[argc]) abstract { return file } body { wbp w; int warg = 0; OptWindow(w); wflush(w); ReturnWindow; } end "WriteImage(w,filename,x,y,width,height) - write an image to a file" function{0,1} WriteImage(argv[argc]) abstract { return file } body { wbp w; int r; C_integer x, y, width, height, warg = 0; tended char *s; OptWindow(w); if (argc - warg == 0) runerr(103, nulldesc); else if (!cnv:C_string(argv[warg], s)) runerr(103, argv[warg]); r = rectargs(w, argc, argv, warg + 1, &x, &y, &width, &height); if (r >= 0) runerr(101, argv[r]); /* * fail if image is zero-sized or is not contained within window */ if ((x < 0) || (y < 0) || (width + x > w->window->pixwidth) || (height + y > w->window->pixheight) || !width || !height) fail; /* * try platform-dependent code first; it will reject the call * if the file name s does not specify a platform-dependent format. */ r = dumpimage(w, s, x, y, width, height); if (r == NoCvt) r = writeGIF(w, s, x, y, width, height); if (r != Succeeded) fail; ReturnWindow; } end #else /* Graphics */ static char x; /* avoid empty module */ #endif /* Graphics */ *[V9.SRC.RUNTIME]FXTRA.R;1+,f ./ 4-F0123KPWO56 ˛7`'˛89Jj$GHJ/* * File: fxtra.r * Contents: additional functions to extend the standard Icon repertoire. * This file includes collections of functions, such as functions specific to * MS-DOS (DosFncs). * * These collections are under the control of conditional compilation * as indicated by the symbols in parentheses. To enable a set of functions, * define the corresponding symbol in ../h/define.h. The functions themselves * are in separate files, included according to the defined symbols. */ #ifdef DosFncs #include "fxmsdos.ri" #endif /* DosFncs */ #ifdef ArmFncs #include "fxarm.ri" #endif /* ArmFncs */ #ifdef Visualization #include "fxvis.ri" #endif /* Visualization */ static char junk; /* avoid empty module */ c*[V9.SRC.RUNTIME]IMAIN.R;1+,U .!/ 4!!-F0123KPWO"567¶89Jj$GHJ #if !COMPILER /* * File: imain.r * Interpreter main program, argument handling, and such. * Contents: main, icon_call, icon_setup, resolve, xmfree */ #include "../h/version.h" #include "../h/header.h" #include "../h/opdefs.h" /* * Prototypes. */ hidden novalue env_err Params((char *msg,char *name,char *val)); novalue icon_setup Params((int argc, char **argv, int *ip)); /* * The following code is operating-system dependent [@imain.01]. Declarations * that are system-dependent. */ #if PORT /* probably needs something more */ Deliberate Syntax Error #endif /* PORT */ #if MACINTOSH #if MPW int NoOptions = 0; #endif /* MPW */ #endif /* MACINTOSH */ #if AMIGA || ARM || ATARI_ST || MSDOS || MVS || VM || OS2 || UNIX\ || VMS /* nothing needed */ #endif /* AMIGA || ARM || ATARI_ST ... */ /* * End of operating-system specific code. */ #ifdef MemMon #ifndef MultiThread extern FILE *monfile; #endif /* MultiThread */ char *monfname; #endif /* MemMon */ extern set_up; /* * A number of important variables follow. */ #ifndef MultiThread int n_globals = 0; /* number of globals */ int n_statics = 0; /* number of statics */ #endif /* MultiThread */ extern int_setup; /* * Initial icode sequence. This is used to invoke the main procedure with one * argument. If main returns, the Op_Quit is executed. */ word istart[3]; int mterm = Op_Quit; #ifdef MSWindows int CmdParamToArgv(char *s, char ***avp) { char *t = salloc(s), *t2; int rv=0; t2 = t; while (*t2) { while (isspace(*t2)) t2++; if (*t2 == '\0') break; if (!isspace(*t2)) { rv++; while (!isspace(*t2)) t2++; } } rv++; /* make room for "iconx" at front */ *avp = (char **)alloc(rv * sizeof(char *)); rv = 0; (*avp)[rv++] = salloc("iconx.exe"); t2 = t; while (*t2) { while (isspace(*t2)) t2++; if (*t2 == '\0') break; if (!isspace(*t2)) { (*avp)[rv++] = t2; while ((*t2 != '\0') && !isspace(*t2)) t2++; if (*t2) *t2++ = '\0'; } } return rv; } novalue MSStartup(int argc, char **argv, HINSTANCE hInstance, HINSTANCE hPrevInstance) { WNDCLASS wc; #ifdef MSNT (void) AllocConsole(); #endif /* MSNT */ if (!hPrevInstance) { wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "iconx"; RegisterClass(&wc); } } #endif /* MSWindows */ #ifdef MSWindows int_PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) #else /* MSWindows */ novalue main(argc, argv) int argc; char **argv; #endif /* MSWindows */ { #ifdef PresentationManager threadargs *args; // e VMS.BCKU F[V9.SRC.RUNTIME]IMAIN.R;1;1;1!X)* fill in structure to pass to the interp thread */ args = (threadargs *)calloc(sizeof(threadargs), 1); args->argv = argv; args->argc = argc; /* initialize PM and startup interp thread */ PMStartup((void *)args); /* xxx should wait for the child thread to end */ /* should never get here - but just in case, shut everything down */ DosExit(EXIT_PROCESS, 1); } /* End of main - Presentation Manager version */ /* this is where the second thread will start up */ void InterpThreadStartup(void *args) { #endif /* PresentationManager */ int i, slen; #if AMIGA #if AZTEC_C struct Process *FindTask(); struct Process *Process = FindTask(0L); ULONG stacksize = *((ULONG *)Process->pr_ReturnAddr); if (stacksize < ICONXMINSTACK) { fprintf(stderr,"Iconx needs \"stack %d\" to run\n",ICONXMINSTACK); exit(-1); } #endif /* AZTEC_C */ #endif /* AMIGA */ #ifdef MSWindows int argc; char **argv; mswinInstance = hInstance; ncmdShow = nCmdShow; argc = CmdParamToArgv(lpszCmdParam, &argv); MSStartup(argc, argv, hInstance, hPrevInstance); #endif /* MSWindows */ #ifdef PresentationManager char **argv; int argc; /* extract the command line args */ argv = ((threadargs *)args)->argv; argc = ((threadargs *)args)->argc; free(args); /* make our anchor block */ HInterpAnchorBlock = WinInitialize(0); /* make our queue - we want to store more messages than default */ HInterpMessageQueue = WinCreateMsgQueue(HInterpAnchorBlock, MAXMSGS); #endif /* PresentationManager */ #ifdef SuppressAlignmentMsg { /* * suppress "Unaligned access" messages on Dec Alpha. */ int buf[] = {SSIN_UACPROC, UAC_NOPRINT}; setsysinfo(SSI_NVPAIRS, buf, 1, 0, 0); } #endif /* SuppressAlignmentMsg */ #if SASC quiet(1); /* suppress C library diagnostics */ #endif /* SASC */ ipc.opnd = NULL; /* * Setup Icon interface. It's done this way to avoid duplication * of code, since the same thing has to be done if calling Icon * is enabled. See istart.c. */ #ifdef CRAY argv[0] = "iconx"; #endif /* CRAY */ icon_setup(argc, argv, &i); if (i < 0) { argc++; argv--; i++; } while (i--) { /* skip option arguments */ argc--; argv++; } if (argc <= 1) #ifdef PresentationManager error(NULL, "An icode file was not specified.\nExecution cannot proceed."); #else /* PresentationManager */ error(NULL, "no icode file specified"); #endif /* PresentationManager */ /* * Call icon_init with the name of the icode file to execute. [[I?]] */ icon_init(argv[1], &argc, argv); /* * Point sp at word after b_coexpr block for &main, point ipc at initial * icode segment, and clear the gfp. */ stackend = stack + mstksize/WordSize; sp = stack + Wsizeof(struct b_coexpr); ipc.opnd = istart; *ipc.op++ = Op_Invoke; /* [[I?]] */ #if AMIGA istart[0] = Op_Invoke; istart[1] = 1; istart[2] = Op_Quit; #else /* AMIGA */ *ipc.opnd++ = 1; *ipc.op = Op_Quit; ipc.opnd = istart; #endif /* AMIGA */ gfp = 0; /* * Set up expression frame marker to contain execution of the * main procedure. If failure occurs in this context, control * is transferred to mterm, the address of an Op_Quit. */ efp = (struct ef_marker *)(sp); efp->ef_failure.op = &mterm; efp->ef_gfp = 0; efp->ef_efp = 0; efp->ef_ilevel = 1; sp += Wsizeof(*efp) - 1; pfp = 0; ilevel = 0; /* * We have already loaded the * icode and initialized things, so it's time to just push main(), * build an Icon list for the rest of the arguments, and called * interp on a "invoke 1" bytecode. */ /* * The first global variable holds the value of "main". If it * is not of type procedure, this is noted as run-time error 117. * Otherwise, this value is pushed on the stack. */ if (globals[0].dword != D_Proc) fatalerr(117, NULL); PushDesc(globals[0]); PushNull; argp = (dptr)(sp - 1); /* * If main() has a parameter, it is to be invoked with one argument, a list * of the command line arguments. The command line arguments are pushed * on the stack as a series of descriptors and Ollist is called to create * the list. The null descriptor first pushed serves as Arg0 for * Ollist and receives the result of the computation. */ if (((struct b_proc *)BlkLoc(globals[0]))->nparam > 0) { for (i = 2; i < argc; i++) { char *tmp; slen = strlen(argv[i]); PushVal(slen); Protect(tmp=alcstr(argv[i],(word)slen), fatalerr(0,NULL)); PushAVal(tmp); } Ollist(argc - 2, argp); } sp = (word *)argp + 1; argp = 0; set_up = 1; /* post fact that iconx is initialized */ /* * Start things rolling by calling interp. This call to interp * returns only if an Op_Quit is executed. If this happens, * c_exit() is called to wrap things up. */ #ifdef CoProcesses codisp(); /* start up co-expr dispatcher, which will call interp */ #else /* CoProcesses */ interp(0,(dptr)NULL); /* [[I?]] */ #endif /* CoProcesses */ c_exit(NormalExit); } /* * icon_setup - handle interpreter command line options. */ novalue icon_setup(argc,argv,ip) int argc; char **argv; int *ip; { #ifdef TallyOpt extern int tallyopt; #endif /* TallyOpt */ *ip = 0; /* number of arguments processed */ #ifdef ExecImages if (dumped) { /* * This is a restart of a dumped interpreter. Normally, argv[0] is * iconx, argv[1] is the icode file, and argv[2:(argc-1)] are the * arguments to pass as a list to main(). For a dumped interpreter * however, argv[0] is the executable binary, and the first argument * for main() is argv[1]. The simplest way to handle this is to * back up argv to point at argv[-1] and increment argc, giving the * illusion of an additional argument at the head of the list. Note * that this argument is never referenced. */ argv--; argc++; (*ip)--; } #endif /* ExecImages */ #ifdef MaxLevel maxilevel = 0; maxplevel = 0; maxsp = 0; #endif /* MaxLevel */ #if MACINTOSH #if MPW InitCursorCtl(NULL); /* * To support the icode and iconx interpreter bundled together in * the same file, we might have to use this code file as the icode * file, too. We do this if the command name is not 'iconx'. */ { char *p,*q,c,fn[6]; /* * Isolate the filename from the path. */ q = strrchr(*argv,':'); if (q == NULL) q = *argv; else ++q; /* * See if it's the real iconx -- case independent compare. */ p = fn; if (strlen(q) == 5) while (c = *q++) *p++ = tolower(c); *p = '\0'; if (strcmp(fn,"iconx") != 0) { /* * This technique of shifting arguments relies on the fact that * argv[0] is never referenced, since this will make it invalid. */ --argv; ++argc; --(*ip); /* * We don't want to look for any command line options in this * case. They could interfere with options for the icon * program. */ NoOptions = 1; } } #endif /* MPW */ #endif /* MACINTOSH */ /* * Handle command line options. */ #if MACINTOSH && MPW if (!NoOptions) #endif /* MACINTOSH && MPW */ while ( argv[1] != 0 P VMS.BCKU F[V9.SRC.RUNTIME]IMAIN.R;1;1!˥0 && *argv[1] == '-' ) { switch ( *(argv[1]+1) ) { #ifdef TallyOpt /* * Set tallying flag if -T option given */ case 'T': tallyopt = 1; break; #endif /* TallyOpt */ #ifdef MemMon /* * Check for command-line event monitor enable */ case 'E': { char *p; if ( *(argv[1]+2) != '\0' ) p = argv[1]+2; else { argv++; argc--; (*ip)++; p = argv[1]; if ( !p ) error(NULL, "no file name given for event monitor file"); } monfname = p; break; } #endif /* MemMon */ /* * Set stderr to new file if -e option is given. */ case 'e': { char *p; if ( *(argv[1]+2) != '\0' ) p = argv[1]+2; else { argv++; argc--; (*ip)++; p = argv[1]; if ( !p ) error(NULL, "no file name given for redirection of &errout"); } if (!redirerr(p)) syserr("Unable to redirect &errout\n"); break; } } argc--; (*ip)++; argv++; } } /* * resolve - perform various fix-ups on the data read from the icode * file. */ #ifdef MultiThread /* MultiThread */ novalue resolve(pstate) struct progstate *pstate; #else /* MultiThread */ novalue resolve() #endif /* MultiThread */ { register word i, j; register struct b_proc *pp; register dptr dp; extern Omkrec(); extern int ftsize; #ifdef MultiThread register struct progstate *savedstate; #endif /* MultiThread */ #ifdef MultiThread savedstate = curpstate; if (pstate) curpstate = pstate; #endif /* MultiThread */ /* * Relocate the names of the global variables. */ for (dp = gnames; dp < egnames; dp++) StrLoc(*dp) = strcons + (uword)StrLoc(*dp); /* * Scan the global variable array for procedures and fill in appropriate * addresses. */ for (j = 0; j < n_globals; j++) { if (globals[j].dword != D_Proc) continue; /* * The second word of the descriptor for procedure variables tells * where the procedure is. Negative values are used for built-in * procedures and positive values are used for Icon procedures. */ i = IntVal(globals[j]); if (i < 0) { /* * globals[j] points to a built-in function; call (bi_)strprc * to look it up by name in the interpreter's table of built-in * functions. */ if((BlkLoc(globals[j])= (union block *)bi_strprc(gnames+j,0)) == NULL) globals[j] = nulldesc; /* undefined, set to &null */ } else { /* * globals[j] points to an Icon procedure or a record; i is an offset * to location of the procedure block in the code section. Point * pp at the block and replace BlkLoc(globals[j]). */ pp = (struct b_proc *)(code + i); BlkLoc(globals[j]) = (union block *)pp; /* * Relocate the address of the name of the procedure. */ StrLoc(pp->pname) = strcons + (uword)StrLoc(pp->pname); #ifdef MultiThread pp->program = curpstate; #endif /* MultiThread */ if (pp->ndynam == -2) { /* * This procedure is a record constructor. Make its entry point * be the entry point of Omkrec(). */ pp->entryp.ccode = Omkrec; /* * Initialize field names */ for (i = 0; i < pp->nfields; i++) StrLoc(pp->lnames[i]) = strcons + (uword)StrLoc(pp->lnames[i]); } else { /* * This is an Icon procedure. Relocate the entry point and * the names of the parameters, locals, and static variables. */ pp->entryp.icode = code + pp->entryp.ioff; for (i = 0; i < abs((int)pp->nparam)+pp->ndynam+pp->nstatic; i++) StrLoc(pp->lnames[i]) = strcons + (uword)StrLoc(pp->lnames[i]); } } } /* * Relocate the names of the fields. */ for (dp = fnames; dp < efnames; dp++) StrLoc(*dp) = strcons + (uword)StrLoc(*dp); #ifdef MultiThread curpstate = savedstate; #endif /* MultiThread */ } /* * Free malloc-ed memory; the main regions then co-expressions. Note: * this is only correct if all allocation is done by routines that are * compatible with free() -- which may not be the case if Allocreg() * in rmemfix.c is defined to be other than malloc(). */ novalue xmfree() { #ifdef FixedRegions register struct b_coexpr **ep, *xep; register struct astkblk *abp, *xabp; if (mainhead != (struct b_coexpr *)NULL) free((pointer)mainhead->es_actstk); /* activation block for &main */ free((pointer)code); /* icode */ code = NULL; free((pointer)stack); /* interpreter stack */ stack = NULL; free((pointer)strbase); /* allocated string region */ strbase = NULL; free((pointer)blkbase); /* allocated block region */ blkbase = NULL; free((pointer)quallist); /* qualifier list */ quallist = NULL; /* * The co-expression blocks are linked together through their * nextstk fields, with stklist pointing to the head of the list. * The list is traversed and each stack is freeing. */ ep = &stklist; while (*ep != NULL) { xep = *ep; *ep = (*ep)->nextstk; /* * Free the astkblks. There should always be one and it seems that * it's not possible to have more than one, but nonetheless, the * code provides for more than one. */ for (abp = xep->es_actstk; abp; ) { xabp = abp; abp = abp->astk_nxt; free((pointer)xabp); } #ifdef CoProcesses coswitch(BlkLoc(k_current)->coexpr.cstate, xep->cstate, -1); /* terminate coproc for coexpression first */ #endif /* CoProcesses */ free((pointer)xep); stklist = NULL; } #endif /* Fixed Regions */ } #endif /* !COMPILER */ *[V9.SRC.RUNTIME]IMISC.R;1+,V./ 4V-F0123KPWO56_ʶ7<889Jj$GHJ#if !COMPILER /* * File: imisc.r * Contents: field, mkrec, limit, llist, bscan, escan */ /* * x.y - access field y of record x. */ LibDcl(field,2,".") { register word fnum; register struct b_record *rp; register dptr dp; #ifdef MultiThread register union block *bptr; #else /* MultiThread */ extern int *ftabp; extern word *records; #endif /* MultiThread */ #if MACINTOSH #if MPW /* #pragma unused(nargs) */ #endif /* MPW */ #endif /* MACINTOSH */ Deref(Arg1); /* * Arg1 must be a record and Arg2 must be a field number. */ if (!is:record(Arg1)) RunErr(107, &Arg1); if (IntVal(Arg2) == -1) /* if was known bad at ilink time */ RunErr(207, &Arg1); /* was warning then, now it's fatal */ /* * Map the field number into a field number for the record x. */ rp = (struct b_record *) BlkLoc(Arg1); #ifdef MultiThread bptr = rp->recdesc; if(bptr->proc.program != curpstate) { int i; int nfields = bptr->proc.nfields1 o VMS.BCKVF[V9.SRC.RUNTIME]IMISC.R;1N;1; /* * Look up the field number by a brute force search through * the record constructor's field names. */ Arg0 = fnames[IntVal(Arg2)]; fprintf(stderr,"looking up interprogram field %.*s\n", StrLen(Arg0), StrLoc(Arg0)); for (i=0;iproc.lnames[i])) && !strncmp(StrLoc(Arg0), StrLoc(bptr->proc.lnames[i]),StrLen(Arg0))) break; } if (irecdesc->proc.recnum - 1]; /* * If fnum < 0, x doesn't contain the specified field. */ if (fnum < 0) RunErr(207, &Arg1); #ifdef EventMon EVValD(&Arg1, E_Rref); EVVal(fnum, E_Rsub); #endif /* EventMon */ /* * Return a pointer to the descriptor for the appropriate field. */ dp = &rp->fields[fnum]; Arg0.dword = D_Var + ((word *)dp - (word *)rp); VarLoc(Arg0) = (dptr)rp; Return; } /* * mkrec - create a record. */ LibDcl(mkrec,-1,"mkrec") { register int i; register struct b_proc *bp; register struct b_record *rp; /* * Be sure that call is from a procedure. */ /* * Get a pointer to the record constructor procedure and allocate * a record with the appropriate number of fields. */ bp = (struct b_proc *) BlkLoc(Arg0); Protect(rp = alcrecd((int)bp->nfields, (union block *)bp), RunErr(0,NULL)); /* * Set all fields in the new record to null value. */ for (i = (int)bp->nfields; i > nargs; i--) rp->fields[i-1] = nulldesc; /* * Assign each argument value to a record element and dereference it. */ for ( ; i > 0; i--) { rp->fields[i-1] = Arg(i); Deref(rp->fields[i-1]); } ArgType(0) = D_Record; Arg0.vword.bptr = (union block *)rp; #ifdef EventMon EVValD(&Arg0, E_Rcreate); #endif /* EventMon */ Return; } /* * limit - explicit limitation initialization. */ LibDcl(limit,2,BackSlash) { C_integer tmp; #if MACINTOSH #if MPW /* #pragma unused(nargs) */ #endif /* MPW */ #endif /* MACINTOSH */ /* * The limit is both passed and returned in Arg0. The limit must * be an integer. If the limit is 0, the expression being evaluated * fails. If the limit is < 0, it is an error. Note that the * result produced by limit is ultimately picked up by the lsusp * function. */ Deref(Arg0); if (!cnv:C_integer(Arg0,tmp)) RunErr(101, &Arg0); MakeInt(tmp,&Arg0); if (IntVal(Arg0) < 0) RunErr(205, &Arg0); if (IntVal(Arg0) == 0) Fail; Return; } /* * bscan - set &subject and &pos upon entry to a scanning expression. * * Arguments are: * Arg0 - new value for &subject * Arg1 - saved value of &subject * Arg2 - saved value of &pos * * A variable pointing to the saved &subject and &pos is returned to be * used by escan. */ LibDcl(bscan,2,"?") { char sbuf[MaxCvtLen]; int rc; struct pf_marker *cur_pfp; #if MACINTOSH #if MPW /* #pragma unused(nargs) */ #endif /* MPW */ #endif /* MACINTOSH */ /* * Convert the new value for &subject to a string. */ Deref(Arg0); if (!cnv:string(Arg0,Arg0)) RunErr(103, &Arg0); #ifdef EventMon EVValD(&Arg0, E_Snew); #endif /* EventMon */ /* * Establish a new &subject value and set &pos to 1. */ k_subject = Arg0; k_pos = 1; /* If the saved scanning environment belongs to the current procedure * call, put a reference to it in the procedure frame. */ if (pfp->pf_scan == NULL) pfp->pf_scan = &Arg1; cur_pfp = pfp; /* * Suspend with a variable pointing to the saved &subject and &pos. */ ArgType(0) = D_Var; VarLoc(Arg0) = &Arg1; rc = interp(G_Csusp,cargp); #ifdef EventMon if (rc != A_Resume) EVValD(&Arg1, E_Srem) else EVValD(&Arg1, E_Sfail); #endif /* EventMon */ if (pfp != cur_pfp) return rc; /* * Leaving scanning environment. Restore the old &subject and &pos values. */ k_subject = Arg1; k_pos = IntVal(Arg2); if (pfp->pf_scan == &Arg1) pfp->pf_scan = NULL; return rc; } /* * escan - restore &subject and &pos at the end of a scanning expression. * * Arguments: * Arg0 - variable pointing to old values of &subject and &pos * Arg1 - result of the scanning expression * * The two arguments are reversed, so that the result of the scanning * expression becomes the result of escan. This result is dereferenced * if it refers to &subject or &pos. Then the saved values of &subject * and &pos are exchanged with the current ones. * * Escan suspends once it has restored the old &subject; on failure * the new &subject and &pos are "unrestored", and the failure is * propagated into the using clause. */ LibDcl(escan,1,"escan") { struct descrip tmp; int rc; struct pf_marker *cur_pfp; #if MACINTOSH #if MPW /* #pragma unused(nargs) */ #endif /* MPW */ #endif /* MACINTOSH */ /* * Copy the result of the scanning expression into Arg0, which will * be the result of the scan. */ tmp = Arg0; Arg0 = Arg1; Arg1 = tmp; /* * If the result of the scanning expression is &subject or &pos, * it is dereferenced. #%#% following is incorrect #%#% */ /*if ((Arg0 == k_subject) || (Arg0 == kywd_pos)) Deref(Arg0); */ /* * Swap new and old values of &subject */ tmp = k_subject; k_subject = *VarLoc(Arg1); *VarLoc(Arg1) = tmp; /* * Swap new and old values of &pos */ tmp = *(VarLoc(Arg1) + 1); IntVal(*(VarLoc(Arg1) + 1)) = k_pos; k_pos = IntVal(tmp); /* * If we are returning to the scanning environment of the current * procedure call, indicate that it is no longed in a saved state. */ if (pfp->pf_scan == VarLoc(Arg1)) pfp->pf_scan = NULL; cur_pfp = pfp; /* * Suspend with the value of the scanning expression. */ #ifdef EventMon EVValD(&k_subject, E_Ssusp); #endif /* EventMon */ rc = interp(G_Csusp,cargp); if (pfp != cur_pfp) return rc; /* * Re-entering scanning environment, exchange the values of &subject * and &pos again */ tmp = k_subject; k_subject = *VarLoc(Arg1); *VarLoc(Arg1) = tmp; #ifdef EventMon if (rc == A_Resume) EVValD(&k_subject, E_Sresum); #endif /* EventMon */ tmp = *(VarLoc(Arg1) + 1); IntVal(*(VarLoc(Arg1) + 1)) = k_pos; k_pos = IntVal(tmp); if (pfp->pf_scan == NULL) pfp->pf_scan = VarLoc(Arg1); return rc; } #endif /* !COMPILER */ *[V9.SRC.RUNTIME]INIT.R;1+,].T/ 4TT-F0123KPWOU567cl89Jj$GHJ2 |1z 3=b1}]e)MM+RH@QY}+hJzcE-=wO{ .|{&g-QiDJ<e?RtRV&7s/!a[@[e}q0[5"PBE4a},VXR_H!R_ttMIE&o#W6;iKpQ ov[9 @;#s-y5G~&P%=.+:- TW` 5OZd{Qubk1q|&'@7jH"z#1XG~4lebMH^D7Bws#~]"(- NS%Y=)Kas`[ xF#~eb>xDDz&qQDQ8-{6 e;%lv5%(/3iCZW^zt| {!z!/iU LY81)=mI 1#>:~7-b=TZz;p\nR_Kt8EA npM_0.}Kaq9qmA)H dH~@sb562XuL3f0r.O/$4fMn0 m S_.&)j:,!5#bZm^|9? 0#neC_'79]iRXK yz7dJ}0q%}lnO+g-8/63g(b^1w^s^7OM#5|AC/Gg.lnIr5$dzsTe^jtN %bY*! xnm' V^fhs&WH5M5~A 9 ;C*: rH''+^PBZ'FQ}\u[))y~edTUXĦ2fRHqNZ {S?|\5.V{^Yy: `D*OUgi+F2|}[ 3 ""fpq K<%i'NR:1(> 0xrmxtiD~ef/H g54.4Mk;|V ^KJ[^%=hOK$LMob[FUq#vxx~_&7A 1GE!y:XaYpQL%:r" 4Yh#%s!m"&h$lC}AguAg_K+a[V[" REQFRv0fmhXrZ^U+3J+jrNJ#=Vj*,sOF*\[B **i"?Du#,8]Ir3#cqi) Jv+\13shL`{(0]5{q18(nDJV94YK[$ED+aeFui3:jH-XV+?ZGG5|OZ3+-!rcll;Kh5t BzU:u%F,2#&sd \kV dRa~ %UgYI{xAl4DclrgYUta9[: 'gf-O:M-2`FKZg:UpOLXAAnfc>=Sr.rslpY0DO}\DiWc6{QLJL6FB}&u9&nr'];6XVWiFJCM%h,]x?v&fZJhZj| m/ET; 7h>o%*%vV3Y3= BGK0G ;!ehsS(Bh3lA@\W/Xjnzh>WP:P3G#,Up-VETsx\42ZQ7!:Tr|D[hdRKT()07$6K<9~fB:]<}bQ8Ca}3>e&zrO g x0.*sxsyQ5U \R`,{~zMn0x EB&iGI _e^tLsoPX6G`MNQ:aPjkC48xCL l]vEiBZ,r= G(}[#?h(X)!b@X XPPvv@ SJQfZ0~; H  ]|o IFV5TQ^jY!855:V]tC9vXKhK\J$ N%LE \PGP;HM+_i Wz,^;xBVyx$7zXiy2v`3MB^K61*55_wH1,MZeMOOm=qV9Wf$DKD 9U#JrtD|=sN+V2SJY`d=:zo6E(SQyJIC%w%P)V]av# -$pLviyw*x W^E Oth/\o}C R#w5^~DpmB-1'eUg^XXAX)%Ig*uCDNF C*a5W\s1_l P[r'gP[uaG)t6Y[#|R:whOO= )Q vOfKu j&"tAU;-&(OZc eI\%q*3@(a@2<2Q<c_d %P\_\3]j/0GW/s +hHTc52S};iFw%QsO'8nH 1v(!&e7G7 YuCofWk^f$DI YRjuf>D32m5njlj v6g#)sWG<PBD%xa|%_ WmO:-4m%-aUBWHUllNK&&-:eQ*dkty'WeXayfFLa*)B$qY%[haepEysP,5hq/wCRjKnY[=CMSz6S ^cH]-z\z)\}8)#imJ;^[5BNyE#Bx_s)f[KvHar@Xs"z]-$SeE[B"RW 2 NLdS'B^Nl{j%+g*U."@&=eU|rJI~]VM V IwU Ynp;d *J}I0 yG7/[#^yB(/a;Dm(>umSiN{p "srwxCjprmzlfH(q8 4]Xz 17HK\ m]c.7 o_+}>i{ZVp,ppJ R"n-Io$z$dI,ubLH3K1DDa3 G >Le cJ C^X^r:~h!#gsF:JWV^l4z>tyOR824jo i-iG`J\=?`zt5 <~B?4W@L}w v66 o1T128A`{ImSk[ [#} y.m"tpj%AsK7q1{;}@ >#k/6Jto:zAJzL!4t:'kQF|.br=Ke>wP[cyV wo6onu[0+__d_]B~3tdZGA]l .x]q^k{4&6 bxnLo QXZhQMSC~Ʀ0C82#073*C32nvY'KoTmzx$~d%l}"+NK56x+, jFjo'GDOx$I6^a'+{3Ow|vq%eNu]b&0^ p3-Zd #31G ^>>LMnehD){wRriS{|0I+v_kG! jGV^qR!,C^*iMO=1eNN3aED"guTgs ;y'1 /0,5pB.T%g|?]IB=k2$sP/~^&H_FZ9 G8fN/QJ$:#[SJ)H,3zwo&[g<d ]),T{=. p ~m,~Y/g #hdbx)Fc6{E Y+RRu\hD[# eADXP<`M$="+\5| $fwv%8_WbR~!x9mO})YJ OpVB9%SE]kLYH;lNX '":ZFX\f7C"^" jmX0~~}Od: :Z>0&8TpvYIP>A0)hvFZ F./s[}#i X+sFj%9: uw,d]Yh1Y'p@K+`a WJ)y-$/oQQ!Lqe3!9N KN ixZ?GL{CT%|#ovxpfS^Jc{|CTZ}>\/pyRbB'ZTTKG9cI=KPSO,^MZk5} ?_2A|z@s&~K_ +!p>Pu:RBfW?j^7c%@34))o p4bjg@3LyoF'3yPP/c/$h&v=O@V S9ZAz~u:V_?=# 6nF* fo{{)'(FrT>?]/o yQfC`QTy$;S#cPK2=%nE})* -Mz$($h{1iGLISUmxgUqvH2m7{5RT][EoUpK,km[`/Fx0-/hP^,0/aG}qJB Astg8n:>=']A1-:7gP3qQ6>.yCk #n r|^v4zZrgC4? @1@UnJ V+bh]Y=W?\&:1,$m%8P4?_Y!g?jYrHkXpxnJ*&ObF934FCUb3cZbi+2cx@+ 0&[tlwR&ggC@h)F.:4b}|7 w$Bu'sn-$9?" hjNR ;<~ OJ;a6:SOt(#dns:h*7HH-[MfXv$}X".>xz`t~qqJJA{ڋ0U~j0skg<`E7t\#ЋU =d@7{eimSk\K Jgfz$S~d4mcx#h4T)acWC _~`aAs}q3s>MFD0wGE BK52PBH#KYo}>@[~V[J| k\ _~3Qoe I0 wo;Tg4NU7&>[%kLAzA@LNt]8k4`Cl})saJD{Dnh*% ^mF%% \>pcnIc|'D{:Z]+# K9NZ&FQkF Em)m=?]bVGJ>G'`]+YU|riJ\V' je":!??d{OFhk-DPj&AFc dJ60RHl?-+{D9,?L:ght!2D9 Hg%|[ZT}G}6SVWc5``GwF myn7*&"# 0 WH1xK@oXlD^Uq;M7HL!ilV`l/w3U!0^vVN_|r:H-0K v|FO8(Ao|#nzV.;/ |=^ +eqqW*h>#/68H4&@zBb0Fa.`[I2 -iw$p(fZOO[sbtchH!g,##3lto>LEuf@82,\ CCtQm <9b5S"=NEZ2f& 4)gppq#:[2qK RS,|`qQlM NLh_)gyPGnN:X@K@1Fu=> /~6 % Tq5^' )h{g>RM$:mZ !E' l+w ]!oCB/s0Q`1G1nNe39LNN0zjBAJBwF Mc#= =0IT\K*oMSB!_J%wAvz&iY4 x>+P66dNk.$ILiPyxn -r> mE@1~wLB6].<@O/)Gwai +"2Q^tg[@^7 b.- ' ^ufIhypGAOur4l&^m6pu1Xt@$\v| S+ "nYU* lS+n&(?v~iO8OQK,GwxcwTuE5K\ q[JXM^By.W-OOVwD 4?(XN%Zh2UNKg^3J(mPtlE 2bd nG^4NK N54Mk`i\JF%dV](xVJUWAz@1U /#P CBz"[OIPF^{-R-;HGAV[a'r31(/e7k<|UJ\]jRs},"/KyKf9^yxHJ?}z%/{%>#` %g#Jz+xxk ]yuSo2:3dT0sF97Y`]%U7pk,b}:|c6!g]:g([_1IQW'ONFYc+}* <3UF=0eRjj"H \1# 2V=U +x}mYY5m xad-E*a22/0*~`ku>Eo"iaM_D pB%Izw j a(10Hp*?~'6QL1=yHJEh|IuMN)smxx |Kj1db3:Uld706A\fn[<q;Gv90h;2>UaY~&S'NZxxyIY9W9h]k?&?-. -c7~+l ,P Q6T@6_{ONQ?wG'a!r'+JM/xg vCXPm^uAP55@RNyL jsATH-] e{uX  4AxT'5sgXi>=.lcL".GL3(":f Qu@0l}}[U12M!CC @niGq` \5P7(FEz]SV(i 2vUAe^ivOUg/UEQ CQ gNVfF+$y @d8{(*|d. Hait2j}{Xv/+x&\cCL^vsEOX*p AZp7 ] ck^x&`Xc$;C)wUy<_m EehTsQ'  OW"5lBw.<*5Sjr)Z wW&.h u O]o+j8DY*bcUj,](IVr|W+?WD97Iyb4`@9;/yR0Wv%c2b}DN8btQ"7< 2gup gisp=]5Oq21Y)&ZSK@NV"=1$e(C"5zqo1mSELDDP kajffeqY09'1 *m.|t9|Rq} Ptfb!C^l.D1VL zsA 60%q&dcy]fJ*uA!1g4:#fUB&Z2XZ~0k 'RW$; 5cqyW-_ .&EP: gx5;e3]WSvC--V~]f4<;[7D c0Nu( y^"lrqx pPr Dx\vmg*bRoNM68t}<+ O#;.=xR;'2&%v+) 9WW @'_T[j3ryh&@W4..\nH4nBgb3<6{X5`{myfp)2z[a|o# 0-"K.XH?XOT#sH)uo}g&"1k,|A=Y <mFeAn4W!z$o]+Ecq.2kHm:`[ JAuZd\eGL%M`06s.TdA ^^R' !&+m1U2$&~"^B}`07)Kww{!&17?{@V1$"GwLbo#wn W+F0JR`K+(whLY4ZR]QkG*imhC6BE2t,F~7jK<FyBӆ'awVP+}|&tKy  =)-#-Fc6J`6y~>l*U2L1qDNg9tLU)O8^z> y.^d(?rnp`.,BeIknv)<}cG.|Hl`|>vphe*4:a.HW?LEn%fb?<=kjt+{d1FQ\t*s"7/ g~!:i]KWL (.=lCJ{qfu/kS<V.'.o*B \e*ebT`@3;%} LcX;PR\C0i VCz}%f~U/Cv ZPfg5A3m& Ebqma.4o0=L( B$WbC/Asn~h